[
  {
    "path": ".cirrus.yml",
    "content": "---\n# We use Cirrus for RHEL clones because Cirrus can directly run them\n# without depending on nested virtualization.\n\n# NOTE Cirrus execution environments lack a terminal, needed for\n# some integration tests. So we use `ssh -tt` command to fake a terminal.\n\ntask:\n  timeout_in: 30m\n\n  env:\n    HOME: /root\n    CIRRUS_WORKING_DIR: /home/runc\n    GO_VER_PREFIX: \"1.25.\"\n    BATS_VERSION: \"v1.12.0\"\n    LIBPATHRS_VERSION: \"0.2.4\"\n    RPMS: gcc git-core iptables jq glibc-static libseccomp-devel make criu fuse-sshfs container-selinux policycoreutils cargo lld wget\n    # yamllint disable rule:key-duplicates\n    matrix:\n      - DISTRO: almalinux-8\n        IMAGE_PROJECT: almalinux-cloud\n      - DISTRO: almalinux-9\n        IMAGE_PROJECT: almalinux-cloud\n      - DISTRO: centos-stream-10\n        IMAGE_PROJECT: centos-cloud\n\n  name: ci / $DISTRO\n\n  compute_engine_instance:\n    image_project: $IMAGE_PROJECT\n    image: family/$DISTRO\n    platform: linux\n    cpu: 4\n    memory: 8G\n\n  install_dependencies_script: |\n    case $DISTRO in\n    *-8)\n      dnf config-manager --set-enabled powertools # for glibc-static\n      ;;\n    *-9|*-10)\n      dnf config-manager --set-enabled crb # for glibc-static\n      dnf -y install epel-release # for fuse-sshfs\n      # Delegate all cgroup v2 controllers to rootless user via --systemd-cgroup.\n      # The default (since systemd v252) is \"pids memory cpu\".\n      mkdir -p /etc/systemd/system/user@.service.d\n      printf \"[Service]\\nDelegate=yes\\n\" > /etc/systemd/system/user@.service.d/delegate.conf\n      systemctl daemon-reload\n      ;;\n    esac\n    # Work around dnf mirror failures by retrying a few times.\n    for i in $(seq 0 2); do\n      sleep $i\n      dnf install -y --setopt=install_weak_deps=False --setopt=tsflags=nodocs $RPMS && break\n    done\n    [ $? -eq 0 ] # fail if dnf failed\n\n    case $DISTRO in\n    *-8)\n      # Use newer criu (with https://github.com/checkpoint-restore/criu/pull/2545).\n      # Alas we have to disable container-tools for that.\n      dnf -y module disable container-tools\n      dnf -y copr enable adrian/criu-el8\n      dnf -y install criu\n    esac\n\n    # Install libpathrs.\n    /home/runc/script/build-libpathrs.sh \"$LIBPATHRS_VERSION\" /usr\n\n    # Install Go.\n    URL_PREFIX=\"https://go.dev/dl/\"\n    # Find out the latest minor release URL.\n    filename=$(curl -fsSL \"${URL_PREFIX}?mode=json&include=all\" | jq -r --arg Ver \"go$GO_VER_PREFIX\" '. | map(select(.version | contains($Ver))) | first | .files[] | select(.os == \"linux\" and .arch == \"amd64\" and .kind == \"archive\") | .filename')\n    curl -fsSL \"$URL_PREFIX$filename\" | tar Cxz /usr/local\n    # install bats\n    cd /tmp\n    git clone https://github.com/bats-core/bats-core\n    cd bats-core\n    git checkout $BATS_VERSION\n    ./install.sh /usr/local\n    cd -\n    # Setup rootless tests.\n    /home/runc/script/setup_rootless.sh\n    # set PATH\n    echo 'export PATH=/usr/local/go/bin:/usr/local/bin:$PATH' >> /root/.bashrc\n    # Setup ssh localhost for terminal emulation (script -e did not work)\n    ssh-keygen -t ed25519 -f /root/.ssh/id_ed25519 -N \"\"\n    cat /root/.ssh/id_ed25519.pub >> /root/.ssh/authorized_keys\n    chmod 400 /root/.ssh/authorized_keys\n    ssh-keyscan localhost >> /root/.ssh/known_hosts\n    echo -e \"Host localhost\\n\\tStrictHostKeyChecking no\\t\\nIdentityFile /root/.ssh/id_ed25519\\n\" >> /root/.ssh/config\n    sed -e \"s,PermitRootLogin.*,PermitRootLogin prohibit-password,g\" -i /etc/ssh/sshd_config\n    systemctl restart sshd\n  host_info_script: |\n    uname -a\n    # -----\n    /usr/local/go/bin/go version\n    # -----\n    systemctl --version\n    # -----\n    cat /etc/os-release\n    # -----\n    df -T\n    # -----\n    sestatus\n    # -----\n    cat /proc/cpuinfo\n  check_config_script: |\n    /home/runc/script/check-config.sh\n  unit_tests_script: |\n    ssh -tt localhost \"make -C /home/runc localunittest\"\n  integration_systemd_script: |\n    ssh -tt localhost \"make -C /home/runc localintegration RUNC_USE_SYSTEMD=yes\"\n  integration_fs_script: |\n    ssh -tt localhost \"make -C /home/runc localintegration\"\n  integration_systemd_rootless_script: |\n    case $DISTRO in\n      *-8)\n        echo \"SKIP: integration_systemd_rootless_script requires cgroup v2\"\n        ;;\n      *)\n        ssh -tt localhost \"make -C /home/runc localrootlessintegration RUNC_USE_SYSTEMD=yes\"\n    esac\n  integration_fs_rootless_script: |\n    ssh -tt localhost \"make -C /home/runc localrootlessintegration\"\n"
  },
  {
    "path": ".clang-format",
    "content": "---\n# We use GNU indent from the Makefile to format C code in this project. Alas,\n# there is no way to map indent options to clang-format style options in a way\n# to achieve identical results for both formatters.\n#\n# Therefore, let's disable clang-format entirely.\nDisableFormat: true\n...\n"
  },
  {
    "path": ".codespellrc",
    "content": "[codespell]\nskip = ./vendor,./.git,./go.sum\nignore-words-list = clos,mis\n"
  },
  {
    "path": ".editorconfig",
    "content": "# This file is used by shfmt. See https://EditorConfig.org\n\n# This is a top-most EditorConfig file.\nroot = true\n\n# Ignore the entire \"vendor\" directory.\n[vendor/**]\nignore = true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yaml",
    "content": "# Forked from https://github.com/containerd/nerdctl/blob/v1.2.1/.github/ISSUE_TEMPLATE/bug_report.yaml\nname: Bug report\ndescription: Create a bug report to help improve runc\nlabels: kind/unconfirmed-bug-claim\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        If you are reporting a new issue, make sure that we do not have any duplicates\n        already open. You can ensure this by searching the issue list for this\n        repository. If there is a duplicate, please close your issue and add a comment\n        to the existing issue instead.\n\n        When reporting a security issue, do not create an issue or file a pull request on GitHub.\n        See [`opencontainers/.github/SECURITY.md`](https://github.com/opencontainers/.github/blob/master/SECURITY.md).\n\n  - type: textarea\n    attributes:\n      label: Description\n      description: |\n        Briefly describe the problem you are having in a few paragraphs.\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Steps to reproduce the issue\n      description: |\n        As much as possible, try to make steps that would work in a script. This makes the repro unambiguous and easy to follow.\n      value: |\n        1.\n        2.\n        3.\n\n  - type: textarea\n    attributes:\n      label: Describe the results you received and expected\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: What version of runc are you using?\n      placeholder: runc --version\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Host OS information\n      placeholder: cat /etc/os-release\n\n  - type: textarea\n    attributes:\n      label: Host kernel information\n      placeholder: uname -a\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "# Forked from https://github.com/containerd/nerdctl/blob/main/.github/ISSUE_TEMPLATE/config.yml\nblank_issues_enabled: true\ncontact_links:\n  - name: Ask a question (GitHub Discussions)\n    url: https://github.com/opencontainers/runc/discussions\n    about: |\n      Please do not submit \"a bug report\" for asking a question.\n      In most cases, GitHub Discussions is the best place to ask a question.\n      If you are not sure whether you are going to report a bug or ask a question,\n      please consider asking in GitHub Discussions first.\n  - name: Slack (opencontainers.slack.com)\n    url: https://communityinviter.com/apps/opencontainers/join-the-oci-community\n    # GitHub requires the `about` property to be set\n    about: Slack\n  - name: Mailing list\n    url: https://groups.google.com/a/opencontainers.org/forum/#!forum/dev\n    about: Mailing list\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "# Please see the documentation for all configuration options:\n# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates\n\nversion: 2\nupdates:\n  # Dependencies listed in go.mod\n  - package-ecosystem: \"gomod\"\n    directory: \"/\" # Location of package manifests\n    schedule:\n      interval: \"daily\"\n\n  # Dependencies listed in .github/workflows/*.yml\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"daily\"\n\n  # Dependencies listed in Dockerfile\n  - package-ecosystem: \"docker\"\n    directory: \"/\"\n    schedule:\n      interval: \"daily\"\n"
  },
  {
    "path": ".github/workflows/scheduled.yml",
    "content": "# This enables periodical execution of CI jobs in branches we maintain.\n#\n# CI jobs are triggered through here (instead of adding \"schedule:\" to the\n# appropriate files) because scheduled jobs are only run on the main branch.\n# In other words, it's a way to run periodical CI for other branches.\n\nname: scheduled\non:\n  schedule:\n    # Runs at 00:00 UTC every Sunday, Tuesday, Thursday.\n    - cron: '0 0 * * 0,2,4'\n  workflow_dispatch:\npermissions:\n  contents: read\n  actions: write\n\njobs:\n  trigger-workflow:\n    strategy:\n      matrix:\n        branch: [\"main\", \"release-1.3\"]\n        wf_id: [\"validate.yml\", \"test.yml\"]\n    runs-on: ubuntu-latest\n    steps:\n      - name: Trigger ${{ matrix.wf_id }} workflow on ${{ matrix.branch}} branch\n        uses: actions/github-script@v8\n        with:\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n          script: |\n            await github.rest.actions.createWorkflowDispatch({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              workflow_id: '${{ matrix.wf_id }}',\n              ref: '${{ matrix.branch }}'\n            });\n"
  },
  {
    "path": ".github/workflows/test.yml",
    "content": "# NOTE Github Actions execution environments lack a terminal, needed for\n# some integration tests. So we use `script` command to fake a terminal.\n\nname: ci\non:\n  push:\n    tags:\n      - v*\n    branches:\n      - main\n      - release-*\n  pull_request:\n  workflow_dispatch:\npermissions:\n  contents: read\n\nenv:\n  LIBPATHRS_VERSION: \"0.2.4\"\n  # Don't ignore C warnings. Note that the output of \"go env CGO_CFLAGS\" by default is \"-g -O2\", so we keep them.\n  CGO_CFLAGS: -g -O2 -Werror\n\njobs:\n  test:\n    timeout-minutes: 30\n    strategy:\n      fail-fast: false\n      matrix:\n        os: [ubuntu-24.04, ubuntu-24.04-arm]\n        go-version: [1.24.x, 1.25.x, 1.26.x]\n        libpathrs: [\"libpathrs\", \"\"]\n        rootless: [\"rootless\", \"\"]\n        race: [\"-race\", \"\"]\n        criu: [\"\", \"criu-dev\"]\n        exclude:\n          # Disable most of criu-dev jobs, as they are expensive\n          # (need to compile criu) and don't add much value/coverage.\n          - criu: criu-dev\n            go-version: 1.24.x\n          - criu: criu-dev\n            go-version: 1.25.x\n          - criu: criu-dev\n            rootless: rootless\n          # Do race detection only with latest stable Go version.\n          - race: -race\n            go-version: 1.24.x\n          - race: -race\n            go-version: 1.25.x\n\n    runs-on: ${{ matrix.os }}\n\n    steps:\n    - name: checkout\n      uses: actions/checkout@v6\n\n    - name: Show host info\n      run: |\n        set -x\n        # Sync `set -x` outputs with command ouputs\n        exec 2>&1\n        # Version\n        uname -a\n        cat /etc/os-release\n        # Hardware\n        cat /proc/cpuinfo\n        free -mt\n        # cgroup\n        ls -F /sys/fs/cgroup\n        cat /proc/self/cgroup\n        if [ -e /sys/fs/cgroup/cgroup.controllers ]; then\n          cat /sys/fs/cgroup/cgroup.controllers\n          cat /sys/fs/cgroup/cgroup.subtree_control\n          ls -F /sys/fs/cgroup$(grep -oP '0::\\K.*' /proc/self/cgroup)\n        fi\n        # kernel config\n        script/check-config.sh\n\n    - name: install deps\n      run: |\n        sudo apt update\n        sudo apt -y install libseccomp-dev sshfs uidmap lld\n\n    - name: install libpathrs ${{ env.LIBPATHRS_VERSION }}\n      if: ${{ matrix.libpathrs != '' }}\n      run: |\n        sudo -E PATH=\"$PATH\" ./script/build-libpathrs.sh \"$LIBPATHRS_VERSION\" /usr\n\n    - name: remove libpathrs build tag\n      if: ${{ matrix.libpathrs == '' }}\n      run: |\n        echo RUNC_BUILDTAGS=-libpathrs >>\"$GITHUB_ENV\"\n\n    - name: install CRIU\n      if: ${{ matrix.criu == '' }}\n      env:\n        PREFIX: https://download.opensuse.org/repositories/devel:/tools:/criu/xUbuntu\n      run: |\n        REPO=${PREFIX}_$(. /etc/os-release && echo $VERSION_ID)\n        curl -fSsLl $REPO/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/devel_tools_criu.gpg > /dev/null\n        echo \"deb $REPO/ /\" | sudo tee /etc/apt/sources.list.d/criu.list\n        sudo apt update\n        sudo apt -y install criu\n\n    - name: install CRIU (${{ matrix.criu }})\n      if: ${{ matrix.criu != '' }}\n      run: |\n        sudo apt -qy install \\\n          libcap-dev libnet1-dev libnl-3-dev uuid-dev \\\n          libprotobuf-c-dev libprotobuf-dev protobuf-c-compiler protobuf-compiler\n        git clone --depth 1 --branch ${{ matrix.criu }} --single-branch \\\n          https://github.com/checkpoint-restore/criu.git ~/criu\n        (cd ~/criu && sudo make -j $(nproc) install-criu)\n        rm -rf ~/criu\n        criu --version\n\n    - name: install go ${{ matrix.go-version }}\n      uses: actions/setup-go@v6\n      with:\n        go-version: ${{ matrix.go-version }}\n        check-latest: true\n\n    - name: build\n      run: sudo -E PATH=\"$PATH\" make EXTRA_FLAGS=\"${{ matrix.race }}\" all\n\n    - name: Setup Bats and bats libs\n      uses: bats-core/bats-action@4.0.0\n      with:\n        bats-version: 1.12.0 # Known as BATS_VERSION in other places.\n        support-install: false\n        assert-install: false\n        detik-install: false\n        file-install: false\n\n    - name: Allow userns for runc\n      # https://discourse.ubuntu.com/t/ubuntu-24-04-lts-noble-numbat-release-notes/39890#unprivileged-user-namespace-restrictions-15\n      if: startsWith(matrix.os, 'ubuntu-24.04')\n      run: |\n        sed \"s;^profile runc /usr/sbin/;profile runc-test $PWD/;\" < /etc/apparmor.d/runc | sudo apparmor_parser\n\n    - name: unit test\n      if: matrix.rootless != 'rootless'\n      run: sudo -E PATH=\"$PATH\" -- make TESTFLAGS=\"${{ matrix.race }}\" localunittest\n\n    - name: add rootless user\n      if: matrix.rootless == 'rootless'\n      run: |\n        ./script/setup_rootless.sh\n        sudo chmod a+X $HOME # for Ubuntu 22.04 and later\n\n    - name: integration test (fs driver)\n      continue-on-error: ${{ matrix.criu != '' }} # Don't let criu-dev errors fail CI.\n      run: sudo -E PATH=\"$PATH\" script -e -c 'make local${{ matrix.rootless }}integration'\n\n    - name: integration test (systemd driver)\n      continue-on-error: ${{ matrix.criu != '' }} # Don't let criu-dev errors fail CI.\n      run: |\n        # Delegate all cgroup v2 controllers to rootless user via --systemd-cgroup.\n        # The default (since systemd v252) is \"pids memory cpu\".\n        sudo mkdir -p /etc/systemd/system/user@.service.d\n        printf \"[Service]\\nDelegate=yes\\n\" | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n        sudo systemctl daemon-reload\n        # Run the tests.\n        sudo -E PATH=\"$PATH\" script -e -c 'make RUNC_USE_SYSTEMD=yes local${{ matrix.rootless }}integration'\n\n  # We need to continue support for 32-bit ARM.\n  # However, we do not have 32-bit ARM CI, so we use i386 for testing 32bit stuff.\n  # We are not interested in providing official support for i386.\n  cross-i386:\n    timeout-minutes: 15\n    strategy:\n      fail-fast: false\n    runs-on: ubuntu-24.04\n\n    steps:\n\n    - name: checkout\n      uses: actions/checkout@v6\n\n    - name: install deps\n      run: |\n        sudo dpkg --add-architecture i386\n        # Add criu repo. The web server returns gateway timeout, thus the retry.\n        sudo add-apt-repository -y ppa:criu/ppa || sudo add-apt-repository -y ppa:criu/ppa\n        # apt-add-repository runs apt update so we don't have to.\n\n        GCC_VERSION=\"$(gcc -dumpversion)\"\n        sudo apt -qy install \\\n          lld criu \\\n          libseccomp-dev libseccomp-dev:i386 \\\n          libc-dev:i386 libgcc-s1:i386 libgcc-${GCC_VERSION}-dev:i386 gcc-i686-linux-gnu\n\n        # When cross-compiling, GCC 13 and earlier will look for a linker that\n        # is marked for cross-compilation, which the Ubuntu lld package doesn't\n        # provide. The solution is to create a symlink ourselves. GCC 14 fixed\n        # this, see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111605>.\n        ln -sv \"$(which ld.lld)\" /usr/local/bin/i686-linux-gnu-ld.lld\n    - run: rustup target add i686-unknown-linux-gnu\n\n    - name: install libpathrs ${{ env.LIBPATHRS_VERSION }}\n      run: |\n        sudo -E PATH=\"$PATH\" ./script/build-libpathrs.sh \"$LIBPATHRS_VERSION\" /usr 386\n        sudo ldconfig /usr/386/lib\n\n    - name: install go\n      uses: actions/setup-go@v6\n      with:\n        go-version: 1.x # Latest stable\n        check-latest: true\n\n    - name: unit test\n      env:\n        CC: i686-linux-gnu-gcc\n        PKG_CONFIG_PATH: /usr/386/lib/pkgconfig\n      run: sudo -E PATH=\"$PATH\" -- make GOARCH=386 localunittest\n\n  fedora:\n    timeout-minutes: 30\n    runs-on: ubuntu-24.04\n    steps:\n    - uses: actions/checkout@v6\n\n    - uses: lima-vm/lima-actions/setup@v1\n      id: lima-actions-setup\n\n    - uses: actions/cache@v5\n      with:\n        path: ~/.cache/lima\n        key: lima-${{ steps.lima-actions-setup.outputs.version }}\n\n    - name: \"Start VM\"\n      # --plain is set to disable file sharing, port forwarding, built-in containerd, etc. for faster start up\n      #\n      # CPUs: min(4, host CPU cores)\n      # RAM:  min(4 GiB, half of host memory)\n      # Disk: 100 GiB\n      run: limactl start --plain --name=default template://fedora\n\n    - name: \"Initialize VM\"\n      run: |\n        set -eux -o pipefail\n        limactl cp -r . default:/tmp/runc\n        lima sudo /tmp/runc/script/setup_host_fedora.sh\n\n    - name: \"Show guest info\"\n      run: |\n        set -eux -o pipefail\n        lima uname -a\n        lima systemctl --version\n        lima df -T\n        lima cat /etc/os-release\n        lima go version\n        lima sestatus\n        lima rpm -q container-selinux\n\n    - name: \"Check config\"\n      run: lima /tmp/runc/script/check-config.sh\n\n    # NOTE the execution environment lacks a terminal, needed for\n    # some integration tests. So we use `ssh -tt` command to fake a terminal.\n    - name: \"Run unit tests\"\n      run: ssh -tt lima-default sudo -i make -C /tmp/runc localunittest\n\n    - name: \"Run integration tests (systemd driver)\"\n      run: ssh -tt lima-default sudo -i make -C /tmp/runc localintegration RUNC_USE_SYSTEMD=yes\n\n    - name: \"Run integration tests (fs driver)\"\n      run: ssh -tt lima-default sudo -i make -C /tmp/runc localintegration\n\n    - name: \"Run integration tests (systemd driver, rootless)\"\n      run: ssh -tt lima-default sudo -i make -C /tmp/runc localrootlessintegration RUNC_USE_SYSTEMD=yes\n\n    - name: \"Run integration tests (fs driver, rootless)\"\n      run: ssh -tt lima-default sudo -i make -C /tmp/runc localrootlessintegration\n\n  all-done:\n    needs:\n    - test\n    - cross-i386\n    - fedora\n    runs-on: ubuntu-24.04\n    steps:\n    - run: echo \"All jobs completed\"\n"
  },
  {
    "path": ".github/workflows/validate.yml",
    "content": "name: validate\non:\n  push:\n    tags:\n      - v*\n    branches:\n      - main\n      - release-*\n  pull_request:\n  workflow_dispatch:\n\npermissions:\n  contents: read\n\nenv:\n  GO_VERSION: 1.25\n  LIBPATHRS_VERSION: \"0.2.4\"\n\njobs:\n  keyring:\n    runs-on: ubuntu-24.04\n    steps:\n    - uses: actions/checkout@v6\n    - name: check runc.keyring\n      run: make validate-keyring\n\n  lint:\n    timeout-minutes: 30\n    permissions:\n      contents: read\n      pull-requests: read\n      checks: write # to allow the action to annotate code in the PR.\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v6\n        with:\n          fetch-depth: 2\n      - uses: actions/setup-go@v6\n        with:\n          go-version: \"${{ env.GO_VERSION }}\"\n      - name: install deps\n        run: |\n          sudo apt -q update\n          sudo apt -qy install libseccomp-dev\n      - uses: golangci/golangci-lint-action@v9\n        with:\n          version: v2.10\n          skip-cache: true\n      # Extra linters, only checking new code from a pull request to main.\n      - name: lint-extra\n        if: github.event_name == 'pull_request' && github.base_ref == 'main'\n        run: |\n          golangci-lint run --config .golangci-extra.yml --new-from-rev=HEAD~1\n\n  modernize:\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v6\n        with:\n          fetch-depth: 2\n      - uses: actions/setup-go@v6\n        with:\n          go-version: stable # modernize@latest may require latest Go.\n      - name: install deps\n        run: |\n          sudo apt -q update\n          sudo apt -qy install libseccomp-dev\n      - name: run go fix\n        run: |\n          go fix ./...\n          git diff --exit-code\n      - name: run modernize\n        run: |\n          go run golang.org/x/tools/go/analysis/passes/modernize/cmd/modernize@latest -fix ./...\n          git diff --exit-code\n\n  compile-buildtags:\n    runs-on: ubuntu-24.04\n    env:\n      # Don't ignore C warnings. Note that the output of \"go env CGO_CFLAGS\" by default is \"-g -O2\", so we keep them.\n      CGO_CFLAGS: -g -O2 -Werror\n    steps:\n      - uses: actions/checkout@v6\n      - name: install go\n        uses: actions/setup-go@v6\n        with:\n          go-version: \"${{ env.GO_VERSION }}\"\n      - name: install deps\n        run: |\n          sudo apt update\n          sudo apt -y install libseccomp-dev lld\n      - name: install libpathrs ${{ env.LIBPATHRS_VERSION }}\n        run: |\n          sudo -E PATH=\"$PATH\" ./script/build-libpathrs.sh \"$LIBPATHRS_VERSION\" /usr\n      - name: compile with no build tags\n        run: make BUILDTAGS=\"\"\n      - name: compile with runc_nocriu build tag\n        run: make RUNC_BUILDTAGS=\"runc_nocriu\"\n\n  codespell:\n    runs-on: ubuntu-24.04\n    steps:\n    - uses: actions/checkout@v6\n    - name: install deps\n      # Version of codespell bundled with Ubuntu is way old, so use pip.\n      run: pip install --break-system-packages codespell==v2.4.1\n    - name: run codespell\n      run: codespell\n\n  shfmt:\n    runs-on: ubuntu-24.04\n    steps:\n    - uses: actions/checkout@v6\n    - name: shfmt\n      run: make shfmt\n\n  shellcheck:\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v6\n      - name: install shellcheck\n        env:\n          VERSION: v0.11.0\n          BASEURL: https://github.com/koalaman/shellcheck/releases/download\n          SHA256: 4da528ddb3a4d1b7b24a59d4e16eb2f5fd960f4bd9a3708a15baddbdf1d5a55b\n        run: |\n          mkdir ~/bin\n          curl -sSfL --retry 5 $BASEURL/$VERSION/shellcheck-$VERSION.linux.x86_64.tar.xz |\n            tar xfJ - -C ~/bin --strip 1 shellcheck-$VERSION/shellcheck\n          sha256sum --strict --check - <<<\"$SHA256 *$HOME/bin/shellcheck\"\n          # make sure to remove the old version\n          sudo rm -f /usr/bin/shellcheck\n          # Add ~/bin to $PATH.\n          echo ~/bin >> $GITHUB_PATH\n      - uses: lumaxis/shellcheck-problem-matchers@v2\n      - name: run\n        run: make shellcheck\n      - name: check-config.sh\n        run : ./script/check-config.sh\n\n  space-at-eol:\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v6\n      - run: rm -fr vendor\n      - run: if git -P grep -I -n '\\s$'; then echo \"^^^ extra whitespace at EOL, please fix\"; exit 1; fi\n\n  deps:\n    runs-on: ubuntu-24.04\n    steps:\n    - uses: actions/checkout@v6\n    - name: install go\n      uses: actions/setup-go@v6\n      with:\n        go-version: \"${{ env.GO_VERSION }}\"\n        check-latest: true\n    - name: verify deps\n      run: make verify-dependencies\n    - name: no toolchain in go.mod # See https://github.com/opencontainers/runc/pull/4717, https://github.com/dependabot/dependabot-core/issues/11933.\n      run: |\n        if grep -q '^toolchain ' go.mod; then echo \"Error: go.mod must not have toolchain directive, please fix\"; exit 1; fi\n    - name: no exclude nor replace in go.mod\n      run: |\n        if grep -Eq '^\\s*(exclude|replace) ' go.mod; then echo \"Error: go.mod must not have exclude/replace directive, it breaks go install. Please fix\"; exit 1; fi\n\n\n  commit:\n    permissions:\n      contents: read\n      pull-requests: read\n    runs-on: ubuntu-24.04\n    steps:\n      - name: get pr commits\n        if: github.event_name == 'pull_request' # Only check commits on pull requests.\n        id: 'get-pr-commits'\n        uses: tim-actions/get-pr-commits@v1.3.1\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: check subject line length\n        if: github.event_name == 'pull_request' # Only check commits on pull requests.\n        uses: tim-actions/commit-message-checker-with-regex@v0.3.2\n        with:\n          commits: ${{ steps.get-pr-commits.outputs.commits }}\n          pattern: '^.{0,72}(\\n.*)*$'\n          error: 'Subject too long (max 72)'\n\n      - name: succeed (not a PR) # Allow all-done to succeed for non-PRs.\n        if: github.event_name != 'pull_request'\n        run: echo \"Nothing to check here.\"\n\n  cfmt:\n    runs-on: ubuntu-24.04\n    steps:\n    - name: checkout\n      uses: actions/checkout@v6\n    - name: install deps\n      run: |\n        sudo apt -qq update\n        sudo apt -qqy install indent\n    - name: cfmt\n      run: |\n        make cfmt\n        git diff --exit-code\n\n  check-go:\n    runs-on: ubuntu-24.04\n    steps:\n    - uses: actions/checkout@v6\n    - name: check Go version\n      run: |\n        GO_VER=$(awk -F= '/^ARG\\s+GO_VERSION=/ {print $2; quit}' Dockerfile)\n        echo \"Go version used in Dockerfile: $GO_VER\"\n        echo -n \"Checking if Go $GO_VER is supported ... \"\n        curl -fsSL https://go.dev/dl/?mode=json | jq -e 'any(.[]; .version | startswith(\"go'$GO_VER'\"))'\n        echo -n \"Checking if Go $GO_VER is tested against ... \"\n        yq -e '.jobs.test.strategy.matrix.go-version | contains([\"'$GO_VER'.x\"])' .github/workflows/test.yml\n\n  release:\n    timeout-minutes: 30\n    runs-on: ubuntu-24.04\n    steps:\n    - name: checkout\n      uses: actions/checkout@v6\n\n    - name: check CHANGELOG.md\n      run: make verify-changelog\n\n      # We have to run this under Docker as Ubuntu (host) does not support all\n      # the architectures we want to compile test against, and Dockerfile uses\n      # Debian (which does).\n      #\n      # XXX: as currently this is the only job that is using Docker, we are\n      # building and using the runcimage locally. In case more jobs running\n      # under Docker will emerge, it will be good to have a separate make\n      # runcimage job and share its result (the docker image) with whoever\n      # needs it.\n    - name: build docker image\n      run: make runcimage\n    - name: make releaseall\n      run: make releaseall\n    - name: upload artifacts\n      uses: actions/upload-artifact@v7\n      with:\n        name: release-${{ github.run_id }}\n        path: release/*\n\n\n  get-images:\n    runs-on: ubuntu-24.04\n    steps:\n    - uses: actions/checkout@v6\n    - name: install bashbrew\n      env:\n        BASEURL: https://github.com/docker-library/bashbrew/releases/download\n        VERSION: v0.1.7\n        SHA256: 6b71a6fccfb2025d48a2b23324836b5513c29abfd2d16a57b7a2f89bd02fe53a\n      run: |\n        mkdir ~/bin\n        curl -sSfL --retry 5 -o ~/bin/bashbrew \\\n          $BASEURL/$VERSION/bashbrew-amd64\n        sha256sum --strict --check - <<<\"$SHA256 *$HOME/bin/bashbrew\"\n        chmod a+x ~/bin/bashbrew\n        # Add ~/bin to $PATH.\n        echo ~/bin >> $GITHUB_PATH\n    - name: check that get-images.sh is up to date\n      run: |\n        cd tests/integration\n        ./bootstrap-get-images.sh > get-images.sh\n        git diff --exit-code\n\n  conmon:\n    runs-on: ubuntu-24.04\n    steps:\n    - name: checkout\n      uses: actions/checkout@v6\n\n    - name: install runc and conmon deps\n      # XXX maybe switch to conmon/hack/github-actions-setup if the burden\n      # to maintain the list of needed packages here is too much to handle.\n      run: |\n        sudo apt update\n        sudo apt -y install libseccomp-dev libglib2.0-dev libsystemd-dev socat\n    - name: install libpathrs ${{ env.LIBPATHRS_VERSION }}\n      run: |\n        sudo -E PATH=\"$PATH\" ./script/build-libpathrs.sh \"$LIBPATHRS_VERSION\" /usr\n\n    - name: install Go\n      uses: actions/setup-go@v6\n      with:\n        go-version: \"${{ env.GO_VERSION }}\"\n\n    - name: build runc\n      run: make\n\n    - name: setup bats\n      uses: bats-core/bats-action@4.0.0\n      with:\n        bats-version: 1.13.0 # As required by conmon in hack/github-actions-setup.\n        support-install: false\n        assert-install: false\n        detik-install: false\n        file-install: false\n\n    - name: checkout conmon\n      uses: actions/checkout@v6\n      with:\n        repository: containers/conmon\n        path: conmon\n        ref: v2.2.1\n\n    - name: build conmon\n      run: cd conmon && make\n\n    - name: run conmon tests\n      run: |\n        RUNTIME_BINARY=$(pwd)/runc ./conmon/test/run-tests.sh -j $(nproc)\n\n  all-done:\n    needs:\n      - check-go\n      - cfmt\n      - codespell\n      - commit\n      - compile-buildtags\n      - conmon\n      - deps\n      - get-images\n      - keyring\n      - lint\n      - modernize\n      - release\n      - shellcheck\n      - shfmt\n      - space-at-eol\n    runs-on: ubuntu-24.04\n    steps:\n    - run: echo \"All jobs completed\"\n"
  },
  {
    "path": ".gitignore",
    "content": "vendor/pkg\n/runc\n/runc-*\n/tests/cmd/_bin\nman/man8\nrelease\nVagrantfile\n.vagrant\n"
  },
  {
    "path": ".golangci-extra.yml",
    "content": "# This is golangci-lint config file which is used to check new code in\n# github PRs only (see lint-extra in .github/workflows/validate.yml).\n#\n# For the default linter config, see .golangci.yml. This config should\n# only enable additional linters not enabled in the default config.\nversion: \"2\"\n\nrun:\n  build-tags:\n    - seccomp\n\nlinters:\n  default: none\n  enable:\n    - godot\n    - revive\n    - staticcheck\n  settings:\n    staticcheck:\n      checks:\n        - all\n        - -QF1008 # https://staticcheck.dev/docs/checks/#QF1008 Omit embedded fields from selector expression.\n"
  },
  {
    "path": ".golangci.yml",
    "content": "version: \"2\"\n\nrun:\n  build-tags:\n    - seccomp\n\nformatters:\n  enable:\n    - gofumpt\n  settings:\n    gofumpt:\n      extra-rules: true\n\nlinters:\n  enable:\n    - errorlint\n    - forbidigo\n    - nolintlint\n    - unconvert\n    - unparam\n  settings:\n    govet:\n      enable:\n        - nilness\n    staticcheck:\n      checks:\n        - all\n        - -ST1000 # https://staticcheck.dev/docs/checks/#ST1000 Incorrect or missing package comment.\n        - -ST1003 # https://staticcheck.dev/docs/checks/#ST1003 Poorly chosen identifier.\n        - -ST1005 # https://staticcheck.dev/docs/checks/#ST1005 Incorrectly formatted error string.\n        - -QF1008 # https://staticcheck.dev/docs/checks/#QF1008 Omit embedded fields from selector expression.\n    forbidigo:\n      forbid:\n        # os.Create implies O_TRUNC without O_CREAT|O_EXCL, which can lead to\n        # an even more severe attacks than CVE-2024-45310, where host files\n        # could be wiped. Always use O_EXCL or otherwise ensure we are not\n        # going to be tricked into overwriting host files.\n        - pattern: ^os\\.Create$\n          pkg: ^os$\n        # os.Is* error checking functions predate errors.Is. Therefore, they\n        # only support errors returned by the os package and subtly fail\n        # to deal with other wrapped error types.\n        # New code should use errors.Is(err, error-type) instead.\n        - pattern: ^os\\.Is(Exist|NotExist|Permission|Timeout)$\n          pkg: ^os$\n      analyze-types: true\n  exclusions:\n    rules:\n      # forbidigo lints are only relevant for main code.\n      - path: '(.+)_test\\.go'\n        linters:\n          - forbidigo\n    presets:\n      - std-error-handling\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\nThis file documents all notable changes made to this project since runc 1.0.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [Unreleased]\n\n### Added ###\n\n- When building runc, `RUNC_BUILDTAGS` make or shell environment variable can\n  be used to add build tags and/or remove existing build tags (when a tag is\n  prefixed with `-`). (#5171)\n\n### Deprecated ###\n- `EXTRA_BUILDTAGS` make variable is deprecated in favor of `RUNC_BUILDTAGS`\n  and will be removed in runc 1.6. (#5171)\n\n## [1.5.0-rc.1] - 2026-03-12\n\n> 憎しみを束ねてもそれは脆い！\n\n> [!NOTE]\n> runc v1.5.0-rc.1 includes all of the patches backported to runc v1.4.1.\n\n### libcontainer API ###\n- The following deprecated Go APIs have been removed:\n  - `CleanPath`, `StripRoot`, and `WithProcfd` from `libcontainer/utils`. Note\n    that `WithProcfdFile` has not been removed (due to import cycle issues) but\n    is instead marked as internal in its godoc comment. (#5051)\n  - All of the cgroup-related types and functions from `libcontainer/configs`\n    which are now maintained in `github.com/opencontainers/cgroups` (#5141):\n    - `libcontainer/configs.Cgroup`\n    - `libcontainer/configs.Resources`\n    - `libcontainer/configs.FreezerState`\n    - `libcontainer/configs.LinuxRdma`\n    - `libcontainer/configs.BlockIODevice`\n    - `libcontainer/configs.WeightDevice`\n    - `libcontainer/configs.ThrottleDevice`\n    - `libcontainer/configs.HugepageLimit`\n    - `libcontainer/configs.IfPrioMap`\n    - `libcontainer/configs.Undefined`\n    - `libcontainer/configs.Frozen`\n    - `libcontainer/configs.Thawed`\n    - `libcontainer/configs.NewWeightDevice`\n    - `libcontainer/configs.NewThrottleDevice`\n  - `libcontainer/configs.HookList.RunHooks`. (#5141)\n  - `libcontainer/configs.MPOL_*` (#5141)\n  - All of the types in `libcontainer/devices` which are now maintained in\n    `github.com/opencontainers/cgroups/devices/config` (#5141):\n    - `libcontainer/devices.Wildcard`\n    - `libcontainer/devices.WildcardDevice`\n    - `libcontainer/devices.BlockDevice`\n    - `libcontainer/devices.CharDevice`\n    - `libcontainer/devices.FifoDevice`\n    - `libcontainer/devices.Device`\n    - `libcontainer/devices.Permissions`\n    - `libcontainer/devices.Type`\n    - `libcontainer/devices.Rule`\n- `libcontainer.Process` methods (`Wait`, `Pid`, `Signal`) and\n  `libcontainer/configs.Config` methods (`HostUID`, `HostRootUID`, `HostGID`,\n  `HostRootGID`) now use pointer receivers. (#5088)\n- The example code for `libcontainer` has been moved out of a `README` and into\n  a proper `Example*` test file that will be compile-tested by our CI. As\n  mentioned elsewhere, we still *do not* recommend users make use of the\n  `libcontainer` API directly. (#5127)\n\n### Deprecated ###\n- The `libcontainer/configs.Mount.Relabel` configuration field (used to relabel\n  mounts with the `z` and `Z` \"pseudo\" mount options) was never accessible\n  outside of the libcontainer API, and in practice the relabel logic has always\n  lived in higher level runtimes. It has been made into a no-op and the field\n  will be removed entirely in runc 1.7. (#5152, #5160)\n\n### Removed ###\n- The `memfd-bind` helper binary has been removed, as it has never been\n  particularly useful and was completely obsoleted by the changes to\n  `/proc/self/exe` sealing we introduced in runc [1.2.0][]. (#5141)\n\n### Added ###\n- User-namespaced containers can now configure `user.*` sysctls. (#4889)\n- Intel RDT: the RDT subdirectory is now only removed if runc created it,\n  matching the updated runtime-spec guidance. (#3832, #5155)\n\n### Changed ###\n- Our release binaries and default build configuration now use [libpathrs][] by\n  default, providing better hardening against certain kinds of attacks. Users\n  of runc should not see any changes as a result of this, but packagers will\n  need to adjust their packaging accordingly. runc can still be built without\n  libpathrs (by building without the `libpathrs` build tag), but we currently\n  plan to make runc 1.6 *require* libpathrs. (#5103)\n- `runc exec` will now request systemd to move the `exec` process into the\n  container cgroup, making the procedure more rootless-friendly. (#4822)\n- seccomp: minor documentation updates. (#4902)\n- Update spec conformance documentation for OCI runtime-spec v1.3.0. (#4948,\n  #5150)\n- Our release archives now have the name `runc-$version.tar.xz` to make distro\n  packaging a little easier by matching the filename to the top-level directory\n  name in the archive. (#5052)\n\n[libpathrs]: https://github.com/cyphar/libpathrs\n\n## [1.4.1] - 2026-03-12\n\n> La guerre n'est pas une aventure. La guerre est une maladie. Comme le typhus.\n\n### Deprecated ###\n- `libcontainer/configs.MPOL_*` constants added in runc [1.4.0][]. (#5110,\n  #5055)\n\n### Added ###\n- Preliminary `loong64` support. (#5062, #4938)\n\n### Fixed ###\n- libct: fix panic in `initSystemdProps` when processing certain systemd\n  properties in the OCI spec. (#5161, #5133)\n- libct: fix several file descriptor leaks on error paths. (#5168, #5009)\n- Remove unnecessary `crypto/tls` dependency by open-coding the systemd socket\n  activation logic, allowing us to more easily avoid false positive CVE\n  warnings. (#5093, #5057)\n- Remove legacy `os.Is*` error usage, improving error type detection to make\n  our error fallback paths more robust. (#5162, #5061)\n- Go 1.26 has started enforcing a restriction of `os/exec.Cmd` which caused\n  issues with our usage of `CLONE_INTO_CGROUP` (on newer kernels). This has now\n  been resolved. (#5116, #5091)\n- Recursive `atime`-related mount flags (`rrelatime` et al.) are now applied\n  properly. (#5114, #5098)\n- Fix a regression in `runc exec` due to `CLONE_INTO_CGROUP` in the\n  (inadvisable) scenario where a container is configured without cgroup\n  namespaces and with `/sys/fs/cgroup` mounted `rw`. (#5117, #5101)\n- On machines with more than 1024 CPU cores, our logic for resetting the CPU\n  affinity will now correctly reset the affinity onto _all_ available cores\n  (not just the first 1024). (#5149, #5025)\n- PR #4757 caused a regression that resulted in spurious `cannot start a\n  container that has stopped` errors when running `runc create` and has thus\n  been reverted. (#5157, #5153, #5151, #4645, #4757)\n\n### Changed ###\n- Previously we made an attempt to make our `runc.armhf` release binaries work\n  with ARMv6 (which would allow runc to work on the original Raspberry Pi).\n  Unfortunately, this has effectively always been broken (because we\n  cross-compile `libseccomp` within a Debian container and statically link to\n  it) and so we are now officially matching [the Debian definition of `armhf`][debian-armhf]\n  (that is, ARMv7). (#5167, #5103)\n- Minor signing keyring updates. (#5147, #5139, #5144, #5148)\n\n[debian-armhf]: https://wiki.debian.org/ArmHardFloatPort\n\n### Added ###\n- Support for specs.LinuxSeccompFlagWaitKillableRecv. (#5172)\n\n## [1.4.0] - 2025-11-27\n\n> 路漫漫其修远兮，吾将上下而求索！\n\n### Deprecated ###\n- Deprecate cgroup v1. (#4956)\n- Deprecate `CleanPath`, `StripRoot`, `WithProcfd`, and `WithProcfdFile` from\n  `libcontainer/utils`. (#4985)\n\n### Breaking ###\n- The handling of `pids.limit` has been updated to match the newer guidance\n  from the OCI runtime specification. In particular, now a maximum limit value\n  of `0` will be treated as an actual limit (due to limitations with systemd,\n  it will be treated the same as a limit value of `1`). We only expect users\n  that explicitly set `pids.limit` to `0` will see a behaviour change.\n  (opencontainers/cgroups#48, #4949)\n\n### Fixed ###\n- cgroups: provide iocost statistics for cgroupv2. (opencontainers/cgroups#43)\n- cgroups: retry DBus connection when it fails with EAGAIN.\n  (opencontainers/cgroups#45)\n- cgroups: improve `cpuacct.usage_all` resilience when parsing data from\n  patched kernels (such as the Tencent kernels). (opencontainers/cgroups#46,\n  opencontainers/cgroups#50)\n- libct: close child fds on `prepareCgroupFD` error. (#4936)\n- libct: fix mips compilation. (#4962, #4967)\n- When configuring a `tmpfs` mount, only set the `mode=` argument if the target\n  path already existed. This fixes a regression introduced in our\n  [CVE-2025-52881][] mitigation patches. (#4971, #4973, #4976)\n- Fix various file descriptor leaks and add additional tests to detect them as\n  comprehensively as possible. (#5007, #5021, #5026, #5034)\n- The \"hallucination\" helpers added as part of the [CVE-2025-52881][]\n  mitigation have been made more generic and now apply to all of our `pathrs`\n  helper functions, which should ensure we will not regress dangling symlink\n  users. (#4985)\n\n### Changed\n- libct: switch to `(*CPUSet).Fill`. (#4927)\n- docs/spec-conformance.md: update for spec v1.3.0. (#4948)\n- Errors from `runc init` have historically been quite painful to understand\n  and debug, we have made several improvements to make them more comprehensive\n  and thus useful when debugging issues. (#5040, #4951, #4928)\n\n[CVE-2025-52881]: https://github.com/opencontainers/runc/security/advisories/GHSA-cgrx-mc8f-2prm\n\n## [1.3.4] - 2025-11-27\n\n> Take me to your heart, take me to your soul.\n\n### Fixed\n * libct: fix mips compilation. (#4962, #4966)\n * When configuring a `tmpfs` mount, only set the `mode=` argument if the\n   target path already existed. This fixes a regression introduced in our\n   [CVE-2025-52881][] mitigation patches. (#4971, #4973, #4976)\n * Fix various file descriptor leaks and add additional tests to detect them as\n   comprehensively as possible. (#5007, #5021, #5026, #5034)\n\n### Changed\n * Downgrade `github.com/cyphar/filepath-securejoin` dependency to `v0.5.2`,\n   which should make it easier for some downstreams to import `runc` without\n   pulling in too many extra packages. (#5028)\n\n[CVE-2025-52881]: https://github.com/opencontainers/runc/security/advisories/GHSA-cgrx-mc8f-2prm\n\n## [1.2.9] - 2025-11-27\n\n> Stars hide your fires, let me rest tonight.\n\n### Fixed\n * libct: fix mips compilation. (#4962, #4965)\n * When configuring a `tmpfs` mount, only set the `mode=` argument if the\n   target path already existed. This fixes a regression introduced in our\n   [CVE-2025-52881][] mitigation patches. (#4971, #4974)\n * Fix various file descriptor leaks and add additional tests to detect them as\n   comprehensively as possible. (#5007, #5021, #5026, #5027)\n\n### Changed\n * Downgrade `github.com/cyphar/filepath-securejoin` dependency to `v0.5.2`,\n   which should make it easier for some downstreams to import `runc` without\n   pulling in too many extra packages. (#5027)\n\n[CVE-2025-52881]: https://github.com/opencontainers/runc/security/advisories/GHSA-cgrx-mc8f-2prm\n\n## [1.4.0-rc.3] - 2025-11-05\n\n> その日、人類は思い出した。\n\n### Security\n\nThis release includes fixes for the following high-severity security issues:\n\n* [CVE-2025-31133][] exploits an issue with how masked paths are implemented in\n  runc. When masking files, runc will bind-mount the container's `/dev/null`\n  inode on top of the file. However, if an attacker can replace `/dev/null`\n  with a symlink to some other procfs file, runc will instead bind-mount the\n  symlink target read-write. This issue affected all known runc versions.\n\n* [CVE-2025-52565][] is very similar in concept and application to\n  [CVE-2025-31133][], except that it exploits a flaw in `/dev/console`\n  bind-mounts. When creating the `/dev/console` bind-mount (to `/dev/pts/$n`),\n  if an attacker replaces `/dev/pts/$n` with a symlink then runc will\n  bind-mount the symlink target over `/dev/console`. This issue affected all\n  versions of runc >= 1.0.0-rc3.\n\n* [CVE-2025-52881][] is a more sophisticated variant of [CVE-2019-19921][],\n  which was a flaw that allowed an attacker to trick runc into writing the LSM\n  process labels for a container process into a dummy tmpfs file and thus not\n  apply the correct LSM labels to the container process. The mitigation we\n  applied for [CVE-2019-19921][] was fairly limited and effectively only caused\n  runc to verify that when we write LSM labels that those labels are actual\n  procfs files. This issue affects all known runc versions.\n\n### Fixed\n * Switched to `(*CPUSet).Fill` rather than our hacky optimisation when\n   resetting the CPU affinity of runc. (#4926, #4927)\n * Correctly close child fds during `(*setns).start` if an error occurs.\n   (#4930, #4936)\n\n[CVE-2019-19921]: https://github.com/opencontainers/runc/security/advisories/GHSA-fh74-hm69-rqjw\n[CVE-2025-31133]: https://github.com/opencontainers/runc/security/advisories/GHSA-9493-h29p-rfm2\n[CVE-2025-52565]: https://github.com/opencontainers/runc/security/advisories/GHSA-qw9x-cqr3-wc7r\n[CVE-2025-52881]: https://github.com/opencontainers/runc/security/advisories/GHSA-cgrx-mc8f-2prm\n\n## [1.3.3] - 2025-11-05\n\n> 奴らに支配されていた恐怖を\n\n### Security\n\nThis release includes fixes for the following high-severity security issues:\n\n* [CVE-2025-31133][] exploits an issue with how masked paths are implemented in\n  runc. When masking files, runc will bind-mount the container's `/dev/null`\n  inode on top of the file. However, if an attacker can replace `/dev/null`\n  with a symlink to some other procfs file, runc will instead bind-mount the\n  symlink target read-write. This issue affected all known runc versions.\n\n* [CVE-2025-52565][] is very similar in concept and application to\n  [CVE-2025-31133][], except that it exploits a flaw in `/dev/console`\n  bind-mounts. When creating the `/dev/console` bind-mount (to `/dev/pts/$n`),\n  if an attacker replaces `/dev/pts/$n` with a symlink then runc will\n  bind-mount the symlink target over `/dev/console`. This issue affected all\n  versions of runc >= 1.0.0-rc3.\n\n* [CVE-2025-52881][] is a more sophisticated variant of [CVE-2019-19921][],\n  which was a flaw that allowed an attacker to trick runc into writing the LSM\n  process labels for a container process into a dummy tmpfs file and thus not\n  apply the correct LSM labels to the container process. The mitigation we\n  applied for [CVE-2019-19921][] was fairly limited and effectively only caused\n  runc to verify that when we write LSM labels that those labels are actual\n  procfs files. This issue affects all known runc versions.\n\n### Added\n\n* `runc update` now supports configuring per-device weights and iops. (#4775,\n  #4807, #4825, #4931)\n\n[CVE-2019-19921]: https://github.com/opencontainers/runc/security/advisories/GHSA-fh74-hm69-rqjw\n[CVE-2025-31133]: https://github.com/opencontainers/runc/security/advisories/GHSA-9493-h29p-rfm2\n[CVE-2025-52565]: https://github.com/opencontainers/runc/security/advisories/GHSA-qw9x-cqr3-wc7r\n[CVE-2025-52881]: https://github.com/opencontainers/runc/security/advisories/GHSA-cgrx-mc8f-2prm\n\n## [1.2.8] - 2025-11-05\n\n> 鳥籠の中に囚われた屈辱を\n\n### Security\n\nThis release includes fixes for the following high-severity security issues:\n\n* [CVE-2025-31133][] exploits an issue with how masked paths are implemented in\n  runc. When masking files, runc will bind-mount the container's `/dev/null`\n  inode on top of the file. However, if an attacker can replace `/dev/null`\n  with a symlink to some other procfs file, runc will instead bind-mount the\n  symlink target read-write. This issue affected all known runc versions.\n\n* [CVE-2025-52565][] is very similar in concept and application to\n  [CVE-2025-31133][], except that it exploits a flaw in `/dev/console`\n  bind-mounts. When creating the `/dev/console` bind-mount (to `/dev/pts/$n`),\n  if an attacker replaces `/dev/pts/$n` with a symlink then runc will\n  bind-mount the symlink target over `/dev/console`. This issue affected all\n  versions of runc >= 1.0.0-rc3.\n\n* [CVE-2025-52881][] is a more sophisticated variant of [CVE-2019-19921][],\n  which was a flaw that allowed an attacker to trick runc into writing the LSM\n  process labels for a container process into a dummy tmpfs file and thus not\n  apply the correct LSM labels to the container process. The mitigation we\n  applied for [CVE-2019-19921][] was fairly limited and effectively only caused\n  runc to verify that when we write LSM labels that those labels are actual\n  procfs files. This issue affects all known runc versions.\n\n[CVE-2019-19921]: https://github.com/opencontainers/runc/security/advisories/GHSA-fh74-hm69-rqjw\n[CVE-2025-31133]: https://github.com/opencontainers/runc/security/advisories/GHSA-9493-h29p-rfm2\n[CVE-2025-52565]: https://github.com/opencontainers/runc/security/advisories/GHSA-qw9x-cqr3-wc7r\n[CVE-2025-52881]: https://github.com/opencontainers/runc/security/advisories/GHSA-cgrx-mc8f-2prm\n\n## [1.4.0-rc.2] - 2025-10-10\n\n> 私の役目は信じるかどうかではない。行うかどうかだ。\n\n### libcontainer API\n * The deprecated `libcontainer/userns` package has been removed; use\n   `github.com/moby/sys/userns` instead. (#4910, #4911)\n\n### Added\n * Allow setting `user.*` sysctls for user-namespaced containers, as they are\n   namespaced and thus safe to configure. (#4889, #4892)\n * Add support for using `clone3(2)`'s `CLONE_INTO_CGROUP` flag when\n   configuring the `runc exec` process. This also included some internal\n   changes to how we add processes to containers. (#4822, #4812, #4920)\n * Add support for configuring the NUMA pmemory policy for a container with\n   `set_mempolicy(2)`. (opencontainers/runtime-spec#1282, #4726, #4915)\n * Add support for `intelRdt.schemata` to allow for configuration of all\n   schemas in `resctrl`. (opencontainers/runtime-spec#1230, #4830, #4915)\n * Add support for `intelRdt.enableMonitoring` to allow for per-container\n   `resctrl` monitoring. This replaces the old `intelRdt.enableCMT` and\n   `intelRdt.enableMBM` options which were never implemented by runc and have\n   been removed from the runtime-spec. (opencontainers/runtime-spec#1287,\n   #4832, #4921)\n\n### Fixed\n * Configure `personality(2)` before applying seccomp profiles. (#4900, #4903)\n * Fixed integration test failure on ppc64, caused by 64K page size so the\n   kernel was rounding memory limit to 64K. (#4841, #4895, #4893)\n * seccompagent: fix fd close loop to prevent closing stdio in the error path.\n   (#4913, #4923)\n\n## [1.4.0-rc.1] - 2025-09-05\n\n> おめェもボスになったんだろぉ？\n\nThis version of runc requires Go 1.24 to build.\n\n### libcontainer API\n- The deprecated `libcontainer/user` package has been removed; use\n  `github.com/moby/sys/user` instead. (#3999, #4617)\n- `libcontainer/apparmor` variables containing public functions have been\n  switched to wrapper functions. (#4725)\n\n### Breaking\n- runc update no longer allows `--l3-cache-schema` or `--mem-bw-schema` if\n  `linux.intelRdt` was not present in the container’s original `config.json`.\n\n  Without `linux.intelRdt` no CLOS (resctrl group) is created at container\n  creation, so it is not possible to apply the updated options with `runc\n  update`.\n\n  Previously, this scenario did not work as expected. The `runc update` would\n  create a new CLOS but fail to apply the schema, move only the init process\n  (omitting children) to the new group, and leave the CLOS orphaned after\n  container exit. (#4827)\n- The deprecated `--criu` flag has been removed entirely, instead the `criu`\n  binary in `$PATH` will be used. (#4722)\n\n### Added\n * runc now supports the `linux.netDevices` field to allow for devices to be\n   moved into container network namespaces seamlessly. (#4538)\n * `runc update` now supports per-device weight and iops cgroup limits. (#4775)\n * intel rdt: allow explicit assignment to root CLOS. (#4854)\n\n### Fixed\n * Container processes will no longer inherit the CPU affinity of runc by\n   default. Instead, the default CPU affinity of container processes will be\n   the largest set of CPUs permitted by the container's cpuset cgroup and any\n   other system restrictions (such as isolated CPUs). (#4041, #4815, #4858)\n * Use `chown(uid, -1)` when configuring the console inode, to avoid issues\n   with unmapped GIDs. (#4679)\n * Add logging for the cases where failed keyring operations are ignored during\n   setup. (#4676)\n * Optimise `runc exec` by avoiding calling into SELinux's `Set.*Label` when\n   `processLabel` is not set. (#4354)\n * Fix mips64 builds for remap-rootfs. (#4723)\n * Setting `linux.rootfsPropagation` to `shared` or `unbindable` now functions\n   properly. (#1755, #1815, #4724)\n * runc delete and runc stop can now correctly handle cases where runc\n   create was killed during setup. Previously it was possible for the\n   container to be in such a state that neither runc stop nor runc\n   delete would be unable to kill or delete the container. (#4534,\n   #4645, #4757)\n * Close seccomp agent connection to prevent resource leaks. (#4796)\n * `runc update` will no longer clear intelRdt state information. (#4828)\n * runc will now error out earlier if intelRdt is not enabled. (#4829)\n * Improve filesystem operations within intelRdt manager. (#4840, #4831)\n * Resolve a certain race between `runc create` and `runc delete` that would\n   previously result in spurious errors. (#4735)\n * CI: skip bpf tests on misbehaving udev systems. (#4825)\n\n### Changes\n * Use Go's built-in `pidfd_send_signal(2)` support when available. (#4666)\n * Make `state.json` 25% smaller. (#4685)\n * Migrate to Go 1.22+ features. (#4687, #4703)\n * Provide private wrappers around common syscalls to make `-EINTR` handling\n   less cumbersome for the rest of runc. (#4697)\n * Ignore the dmem controller in our cgroup tests, as systemd does not\n   yet support it. (#4806)\n * `/proc/net/dev` is no longer included in the permitted procfs overmount\n   list. Its inclusion was almost certainly an error, and because\n   `/proc/net` is a symlink to `/proc/self/net`, overmounting this was\n   almost certainly never useful (and will be blocked by future kernel\n   versions). (#4817)\n * Simplify the prepareCriuRestoreMounts logic for checkpoint-restore.\n   (#4765)\n * Bump minimum Go version to 1.24. (#4851)\n * CI: migrate virtualised Fedora tests from Vagrant + Cirrus to Lima + GHA. We\n   still use Cirrus for the AlmaLinux tests, since they can be run without\n   virtualisation. (#4664)\n * CI: install fewer dependencies (#4671), bump shellcheck and bats versions\n   (#4670).\n * CI: remove `toolchain` from `go.mod` and add a CI check to make sure it's\n   never added accidentally. (#4717, #4721)\n * CI: do not allow `exclude` or `replace` directives in `go.mod`, to make sure\n   that `go install` doesn't get accidentally broken. (#4750)\n * CI: fix exclusion rules and allow us to run jobs manually. (#4760)\n * CI: Switch to GitHub-hosted ARM runners. Thanks again to @alexellis\n   for supporting runc's ARM CI up until now. (#4844, #4856)\n * Various dependency updates. (#4659, #4658, #4662, #4663, #4689, #4694,\n   #4702, #4701, #4707, #4710, #4746, #4756, #4751, #4758, #4764, #4768, #4779,\n   #4783, #4785, #4801, #4808, #4803, #4839, #4846, #4847, #4845, #4850, #4861,\n   #4860)\n\n## [1.3.2] - 2025-10-02\n\n> Ночь, улица, фонарь, аптека...\n\n### Changed\n * The conversion from cgroup v1 CPU shares to cgroup v2 CPU weight is\n   improved to better fit default v1 and v2 values. (#4772, #4785, #4897)\n * Dependency github.com/opencontainers/cgroups updated from v0.0.1 to\n   v0.0.4. (#4897)\n\n### Fixed\n * runc state: fix occasional \"cgroup.freeze: no such device\" error.\n   (#4798, #4808, #4897)\n * Fixed integration test failure on ppc64, caused by 64K page size so the\n   kernel was rounding memory limit to 64K. (#4841, #4895, #4893)\n\n## [1.3.1] - 2025-09-05\n\n> この瓦礫の山でよぉ\n\n### Fixed\n * Container processes will no longer inherit the CPU affinity of runc by\n   default. Instead, the default CPU affinity of container processes will be\n   the largest set of CPUs permitted by the container's cpuset cgroup and any\n   other system restrictions (such as isolated CPUs). (#4041, #4815, #4858)\n * Setting `linux.rootfsPropagation` to `shared` or `unbindable` now functions\n   properly. (#1755, #1815, #4724, #4789)\n * Close seccomp agent connection to prevent resource leaks. (#4796, #4799)\n * `runc delete` and `runc stop` can now correctly handle cases where `runc\n   create` was killed during setup. Previously it was possible for the\n   container to be in such a state that neither `runc stop` nor `runc delete`\n   would be unable to kill or delete the container. (#4534, #4645, #4757,\n   #4793)\n * `runc update` will no longer clear intelRdt state information. (#4828,\n   #4833)\n * CI: Fix exclusion rules and allow us to run jobs manually. (#4760, #4763)\n\n### Changed\n * Improvements to the deprecation warnings as part of the\n   `github.com/opencontainers/cgroups` split. (#4784, #4788)\n * Ignore the dmem controller in our cgroup tests, as systemd does not yet\n   support it. (#4806, #4811)\n * `/proc/net/dev` is no longer included in the permitted procfs overmount\n   list. Its inclusion was almost certainly an error, and because `/proc/net`\n   is a symlink to `/proc/self/net`, overmounting this was almost certainly\n   never useful (and will be blocked by future kernel versions). (#4817, #4820)\n * Simplify the `prepareCriuRestoreMounts` logic for checkpoint-restore.\n   (#4765, #4871)\n * CI: Bump `golangci-lint` to v2.1. (#4747, #4754)\n * CI: Switch to GitHub-hosted ARM runners. Thanks again to @alexellis for\n   supporting runc's ARM CI up until now. (#4844, #4856, #4866)\n\n## [1.3.0] - 2025-04-30\n\n> Mr. President, we must not allow a mine shaft gap!\n\n### Fixed\n * Removed preemptive \"full access to cgroups\" warning when calling `runc\n   pause` or `runc unpause` as an unprivileged user without\n   `--systemd-cgroups`. Now the warning is only emitted if an actual permission\n   error was encountered. (#4709)\n * Several fixes to our CI, mainly related to AlmaLinux and CRIU. (#4670,\n   #4728, #4736)\n\n### Changed\n * In runc 1.2, we changed our mount behaviour to correctly handle clearing\n   flags. However, the error messages we returned did not provide as much\n   information to users about what clearing flags were conflicting with locked\n   mount flags. We now provide more diagnostic information if there is an error\n   when in the fallback path to handle locked mount flags. (#4734)\n * Upgrade our CI to use golangci-lint v2.0. (#4692)\n * `runc version` information is now filled in using `//go:embed` rather than\n   being set through `Makefile`. This allows `go install` or other non-`make`\n   builds to contain the correct version information. Note that `make\n   EXTRA_VERSION=...` still works. (#418)\n * Remove `exclude` directives from our `go.mod` for broken `cilium/ebpf`\n   versions. `v0.17.3` resolved the issue we had, and `exclude` directives are\n   incompatible with `go install`. (#4748)\n\n## [1.3.0-rc.2] - 2025-04-10\n\n> Eppur si muove.\n\n### Fixed\n * Use the container's `/etc/passwd` to set the `HOME` env var. After a refactor\n   for 1.3, we were setting it reading the host's `/etc/passwd` file instead.\n   (#4693, #4688)\n * Override `HOME` env var if it's set to the empty string. This fixes a\n   regression after the same refactor for 1.3 and aligns the behavior with older\n   versions of runc. (#4711)\n * Add time namespace to container config after checkpoint/restore. CRIU since\n   version 3.14 uses a time namespace for checkpoint/restore, however it was not\n   joining the time namespace in runc. (#4705)\n\n## [1.3.0-rc.1] - 2025-03-04\n\n> No tengo miedo al invierno, con tu recuerdo lleno de sol.\n\n### libcontainer API\n * `configs.CommandHook` struct has changed, Command is now a pointer.\n   Also, `configs.NewCommandHook` now accepts a `*Command`. (#4325)\n * The `Process` struct has `User` string field replaced with numeric\n   `UID` and `GID` fields, and `AdditionalGroups` changed its type from\n   `[]string` to `[]int`. Essentially, resolution of user and group\n   names to IDs is no longer performed by libcontainer, so if a libcontainer\n   user previously relied on this feature, now they have to convert names to\n   IDs before calling libcontainer; it is recommended to use Go package\n   github.com/moby/sys/user for that. (#3999)\n * Move libcontainer/cgroups to a separate repository. (#4618)\n\n### Fixed\n * `runc exec -p` no longer ignores specified `ioPriority` and `scheduler`\n   settings. Similarly, libcontainer's `Container.Start` and `Container.Run`\n   methods no longer ignore `Process.IOPriority` and `Process.Scheduler`\n   settings. (#4585)\n * We no longer use `F_SEAL_FUTURE_WRITE` when sealing the runc binary, as it\n   turns out this had some unfortunate bugs in older kernel versions and was\n   never necessary in the first place. (#4641, #4640)\n * runc now uses a more flexible method of joining namespaces, which better\n   matches the behaviour of `nsenter(8)`. This is mainly useful for users that\n   create a container with a runc-managed user namespace but want the container\n   to join some externally-managed namespace as well. (#4492)\n * `runc` now properly handles joining time namespaces (such as with `runc\n   exec`). Previously we would attempt to set the time offsets when joining,\n   which would fail. (#4635, #4636)\n * Handle `EINTR` retries correctly for socket-related direct\n   `golang.org/x/sys/unix` system calls. (#4637)\n * Handle `close_range(2)` errors more gracefully. (#4596)\n * Fix a stall issue that would happen if setting `O_CLOEXEC` with\n   `CloseExecFrom` failed (#4599).\n * Handle errors on older kernels when resetting ambient capabilities more\n   gracefully. (#4597)\n\n### Changed\n * runc now has an official release policy to help provide more consistency\n   around our release schedules and better define our support policy for old\n   release branches. See `RELEASES.md` for more details. (#4557)\n * Improved performance by switching to `strings.Cut` where appropriate.\n   (#4470)\n * The minimum Go version of runc is now Go 1.23. (#4598)\n * Updated builds to libseccomp v2.5.6. (#4625)\n\n### Added\n * runc has been updated to support OCI runtime-spec 1.2.1. (#4653)\n * CPU affinity support for `runc exec`. (#4327)\n * CRIU support can be disabled using the build tag `runc_nocriu`. (#4546)\n * Support to get the pidfd of the container via CLI flag `pidfd-socket`.\n   (#4045)\n * Support `skip-in-flight` and `link-remap` options for CRIU. (#4627)\n * Support cgroup v1 mounted with `noprefix`. (#4513)\n\n## [1.2.7] - 2025-09-05\n\n> さんをつけろよデコ助野郎！\n\n### Fixed\n * Removed preemptive \"full access to cgroups\" warning when calling `runc\n   pause` or `runc unpause` as an unprivileged user without\n   `--systemd-cgroups`. Now the warning is only emitted if an actual permission\n   error was encountered. (#4709, #4720)\n * Add time namespace to container config after checkpoint/restore. CRIU since\n   version 3.14 uses a time namespace for checkpoint/restore, however it was\n   not joining the time namespace in runc. (#4696, #4714)\n * Container processes will no longer inherit the CPU affinity of runc by\n   default. Instead, the default CPU affinity of container processes will be\n   the largest set of CPUs permitted by the container's cpuset cgroup and any\n   other system restrictions (such as isolated CPUs). (#4041, #4815, #4858)\n * Close seccomp agent connection to prevent resource leaks. (#4796, #4800)\n * Several fixes to our CI, mainly related to AlmaLinux and CRIU. (#4670,\n   #4728, #4736, #4742)\n * Setting `linux.rootfsPropagation` to `shared` or `unbindable` now functions\n   properly. (#1755, #1815, #4724, #4791)\n * `runc update` will no longer clear intelRdt state information. (#4828,\n   #4834)\n\n### Changed\n * In runc 1.2, we changed our mount behaviour to correctly handle clearing\n   flags. However, the error messages we returned did not provide as much\n   information to users about what clearing flags were conflicting with locked\n   mount flags. We now provide more diagnostic information if there is an error\n   when in the fallback path to handle locked mount flags. (#4734, #4740)\n * Ignore the dmem controller in our cgroup tests, as systemd does not yet\n   support it. (#4806, #4811)\n * `/proc/net/dev` is no longer included in the permitted procfs overmount\n   list. Its inclusion was almost certainly an error, and because `/proc/net`\n   is a symlink to `/proc/self/net`, overmounting this was almost certainly\n   never useful (and will be blocked by future kernel versions). (#4817, #4820)\n * CI: Switch to GitHub-hosted ARM runners. Thanks again to @alexellis for\n   supporting runc's ARM CI up until now. (#4844, #4856, #4867)\n * Simplify the `prepareCriuRestoreMounts` logic for checkpoint-restore.\n   (#4765, #4872)\n\n## [1.2.6] - 2025-03-17\n\n> Hasta la victoria, siempre.\n\n### Fixed\n * Fix a stall issue that would happen if setting `O_CLOEXEC` with\n   `CloseExecFrom` failed (#4647).\n * `runc` now properly handles joining time namespaces (such as with `runc\n   exec`). Previously we would attempt to set the time offsets when joining,\n   which would fail. (#4635, #4649)\n * Handle `EINTR` retries correctly for socket-related direct\n   `golang.org/x/sys/unix` system calls. (#4650)\n * We no longer use `F_SEAL_FUTURE_WRITE` when sealing the runc binary, as it\n   turns out this had some unfortunate bugs in older kernel versions and was\n   never necessary in the first place. (#4651, #4640)\n\n### Removed\n * Remove `Fexecve` helper from `libcontainer/system`. Runc 1.2.1 removed\n   runc-dmz, but we forgot to remove this helper added only for that. (#4646)\n\n###  Changed\n * Use Go 1.23 for official builds, run CI with Go 1.24 and drop Ubuntu 20.04\n   from CI. We need to drop Ubuntu 20.04 from CI because Github Actions\n   announced it's already deprecated and it will be discontinued soon. (#4648)\n\n## [1.2.5] - 2025-02-13\n\n> Мороз и солнце; день чудесный!\n\n### Fixed\n* There was a regression in systemd v230 which made the way we define device\n  rule restrictions require a systemctl daemon-reload for our transient\n  units. This caused issues for workloads using NVIDIA GPUs. Workaround the\n  upstream regression by re-arranging how the unit properties are defined.\n  (#4568, #4612, #4615)\n * Dependency github.com/cyphar/filepath-securejoin is updated to v0.4.1,\n   allowing projects that vendor runc to bump it as well. (#4608)\n * CI: fixed criu-dev compilation. (#4611)\n\n### Changed\n * Dependency golang.org/x/net is updated to 0.33.0. (#4632)\n\n## [1.2.4] - 2025-01-07\n\n> Христос се роди!\n\n### Fixed\n * Re-add tun/tap devices to built-in allowed devices lists.\n\n   In runc 1.2.0 we removed these devices from the default allow-list (which\n   were added seemingly by accident early in Docker's history) as a precaution\n   in order to try to reduce the attack surface of device inodes available to\n   most containers (#3468). At the time we thought that the vast majority of\n   users using tun/tap would already be specifying what devices they need (such\n   as by using `--device` with Docker/Podman) as opposed to doing the `mknod`\n   manually, and thus there would've been no user-visible change.\n\n   Unfortunately, it seems that this regressed a noticeable number of users\n   (and not all higher-level tools provide easy ways to specify devices to\n   allow) and so this change needed to be reverted. Users that do not need\n   these devices are recommended to explicitly disable them by adding deny\n   rules in their container configuration. (#4555, #4556)\n\n## [1.2.3] - 2024-12-12\n\n> Winter is not a season, it's a celebration.\n\n### Fixed\n * Fixed a regression in use of securejoin.MkdirAll, where multiple\n   runc processes racing to create the same mountpoint in a shared rootfs\n   would result in spurious EEXIST errors. In particular, this regression\n   caused issues with BuildKit. (#4543, #4550)\n * Fixed a regression in eBPF support for pre-5.6 kernels after upgrading\n   Cilium's eBPF library version to 0.16 in runc. (#3008, #4548, #4551)\n\n## [1.2.2] - 2024-11-15\n\n> Specialization is for insects.\n\n### Fixed\n * Fixed the failure of `runc delete` on a rootless container with no\n   dedicated cgroup on a system with read-only `/sys/fs/cgroup` mount.\n   This is a regression in runc 1.2.0, causing a failure when using\n   rootless buildkit. (#4518, #4531)\n * Using runc on a system where /run/runc and /usr/bin are on different\n   filesystems no longer results in harmless but annoying messages\n   (\"overlayfs: \"xino\" feature enabled using 3 upper inode bits\")\n   appearing in the kernel log. (#4508, #4530)\n\n### Changed\n * Better memfd-bind documentation. (#4530)\n * CI: bump Fedora 40 -> 41. (#4528)\n\n## [1.2.1] - 2024-11-01\n\n>  No existe una escuela que enseñe a vivir.\n\n### Fixed\n * Became root after joining an existing user namespace. Otherwise, runc\n   won't have permissions to configure some mounts when running under\n   SELinux and runc is not creating the user namespace. (#4466, #4477)\n\n### Removed\n * Remove dependency on `golang.org/x/sys/execabs` from go.mod. (#4480)\n * Remove runc-dmz, that had many limitations, and is mostly made obsolete by\n   the new protection mechanism added in v1.2.0. Note that runc-dmz was only\n   available only in the 1.2.0 release and required to set an environment variable\n   to opt-in. (#4488)\n\n### Added\n * The `script/check-config.sh` script now checks for overlayfs support. (#4494)\n * When using cgroups v2, allow to set or update memory limit to \"unlimited\"\n   and swap limit to a specific value. (#4501)\n\n## [1.2.0] - 2024-10-22\n\n> できるときにできることをやるんだ。それが今だ。\n\n### Added\n * In order to alleviate the remaining concerns around the memory usage and\n   (arguably somewhat unimportant, but measurable) performance overhead of\n   memfds for cloning `/proc/self/exe`, we have added a new protection using\n   `overlayfs` that is used if you have enough privileges and the running\n   kernel supports it. It has effectively no performance nor memory overhead\n   (compared to no cloning at all). (#4448)\n\n### Fixed\n * The original fix for [CVE-2024-45310][cve-2024-45310] was intentionally very\n   limited in scope to make it easier to review, however it also did not handle\n   all possible `os.MkdirAll` cases and thus could lead to regressions. We have\n   switched to the more complete implementation in the newer versions of\n   `github.com/cyphar/filepath-securejoin`. (#4393, #4400, #4421, #4430)\n * In certain situations (a system with lots of mounts or racing mounts) we\n   could accidentally end up leaking mounts from the container into the host.\n   This has been fixed. (#4417)\n * The fallback logic for `O_TMPFILE` clones of `/proc/self/exe` had a minor\n   bug that would cause us to miss non-`noexec` directories and thus fail to\n   start containers on some systems. (#4444)\n * Sometimes the cloned `/proc/self/exe` file descriptor could be placed in a\n   way that it would get clobbered by the Go runtime. We had a fix for this\n   already but it turns out it could still break in rare circumstances, but it\n   has now been fixed. (#4294, #4452)\n\n### Changed\n * It is not possible for `runc kill` to work properly in some specific\n   configurations (such as rootless containers with no cgroups and a shared pid\n   namespace). We now output a warning for such configurations. (#4398)\n * memfd-bind: update the documentation and make path handling with the systemd\n   unit more idiomatic. (#4428)\n * We now use v0.16 of Cilium's eBPF library, including fixes that quite a few\n   downstreams asked for. (#4397, #4396)\n * Some internal `runc init` synchronisation that was no longer necessary (due\n   to the `/proc/self/exe` cloning move to Go) was removed. (#4441)\n\n[cve-2024-45310]: https://github.com/opencontainers/runc/security/advisories/GHSA-jfvp-7x6p-h2pv\n\n## [1.2.0-rc.3] - 2024-09-02\n\n> The supreme happiness of life is the conviction that we are loved.\n\n### Security\n\n * Fix [CVE-2024-45310][cve-2024-45310], a low-severity attack that allowed\n   maliciously configured containers to create empty files and directories on\n   the host.\n\n### Added\n\n * Document build prerequisites for different platforms. (#4353)\n\n### Fixed\n\n * Try to delete exec fifo file when failure in creation. (#4319)\n * Revert \"libcontainer: seccomp: pass around *os.File for notifyfd\". (#4337)\n * Fix link to gvariant documentation in systemd docs. (#4369)\n\n### Changed\n\n * Remove pre-go1.17 build-tags. (#4329)\n * libct/userns: assorted (godoc) improvements. (#4330)\n * libct/userns: split userns detection from internal userns code. (#4331)\n * rootfs: consolidate mountpoint creation logic. (#4359)\n * Add Go 1.23, drop 1.21. (#4360)\n * Revert \"allow overriding VERSION value in Makefile\" and add `EXTRA_VERSION`.\n   (#4370)\n * Mv contrib/cmd tests/cmd (except memfd-bind). (#4377)\n * Makefile: Don't read COMMIT, BUILDTAGS, `EXTRA_BUILDTAGS` from env vars.\n   (#4380)\n\n[cve-2024-45310]: https://github.com/opencontainers/runc/security/advisories/GHSA-jfvp-7x6p-h2pv\n\n## [1.2.0-rc.2] - 2024-06-26\n\n> TRUE or FALSE, it's a problem!\n\n### Important Notes\n\n * libcontainer/cgroups users who want to manage cgroup devices need to explicitly\n   import libcontainer/cgroups/devices. (#3452, #4248)\n * If building with Go 1.22.x, make sure to use 1.22.4 or a later version.\n   (see #4233 for more details)\n\n### Added\n\n * CI: add actuated-arm64. (#4142, #4252, #4276)\n\n### Fixed\n\n * cgroup v2: do not set swap to 0 or unlimited when it's not available. (#4188)\n * Set the default value of CpuBurst to nil instead of 0. (#4210, #4211)\n * libct/cg: write unified resources line by line. (#4186)\n * libct.Start: fix locking, do not allow a second container init. (#4271)\n * Fix tests in debian testing (mount_sshfs.bats). (#4245)\n * Fix codespell warnings. (#4291)\n * libct/cg/dev: fix TestSetV1Allow panic. (#4295)\n * tests/int/scheduler: require smp. (#4298)\n\n### Changed\n\n * libct/cg/fs: don't write cpu_burst twice on ENOENT. (#4259)\n * Make trimpath optional. (#3908)\n * Remove unused system.Execv. (#4268)\n * Stop blacklisting Go 1.22+, drop Go < 1.21 support, use Go 1.22 in CI. (#4292)\n * Improve some error messages for runc exec. (#4320)\n * ci/gha: bump golangci-lint[-action]. (#4255)\n * tests/int/tty: increase the timeout. (#4260)\n * [ci] use go mod instead of go get in spec.bats. (#4264)\n * tests/int/checkpoint: rm double logging. (#4251)\n * .cirrus.yml: rm FIXME from rootless fs on CentOS 7. (#4279)\n * Dockerfile: bump Debian to 12, Go to 1.21. (#4296)\n * ci/gha: switch to ubuntu 24.04. (#4286)\n * Vagrantfile.fedora: bump to F40. (#4285)\n\n## [1.2.0-rc.1] - 2024-04-03\n\n> There's a frood who really knows where his towel is.\n\n`runc` now requires a minimum of Go 1.20 to compile.\n\n> **NOTE**: runc currently will not work properly when compiled with Go 1.22 or\n> newer. This is due to some unfortunate glibc behaviour that Go 1.22\n> exacerbates in a way that results in containers not being able to start on\n> some systems. [See this issue for more information.][runc-4233]\n\n[runc-4233]: https://github.com/opencontainers/runc/issues/4233\n\n### Breaking\n\n * Several aspects of how mount options work has been adjusted in a way that\n   could theoretically break users that have very strange mount option strings.\n   This was necessary to fix glaring issues in how mount options were being\n   treated. The key changes are:\n\n   - Mount options on bind-mounts that clear a mount flag are now always\n     applied. Previously, if a user requested a bind-mount with only clearing\n     options (such as `rw,exec,dev`) the options would be ignored and the\n     original bind-mount options would be set. Unfortunately this also means\n     that container configurations which specified only clearing mount options\n     will now actually get what they asked for, which could break existing\n     containers (though it seems unlikely that a user who requested a specific\n     mount option would consider it \"broken\" to get the mount options they\n     asked foruser who requested a specific mount option would consider it\n     \"broken\" to get the mount options they asked for). This also allows us to\n     silently add locked mount flags the user *did not explicitly request to be\n     cleared* in rootless mode, allowing for easier use of bind-mounts for\n     rootless containers. (#3967)\n\n   - Container configurations using bind-mounts with superblock mount flags\n     (i.e. filesystem-specific mount flags, referred to as \"data\" in\n     `mount(2)`, as opposed to VFS generic mount flags like `MS_NODEV`) will\n     now return an error. This is because superblock mount flags will also\n     affect the host mount (as the superblock is shared when bind-mounting),\n     which is obviously not acceptable. Previously, these flags were silently\n     ignored so this change simply tells users that runc cannot fulfil their\n     request rather than just ignoring it. (#3990)\n\n   If any of these changes cause problems in real-world workloads, please [open\n   an issue](https://github.com/opencontainers/runc/issues/new/choose) so we\n   can adjust the behaviour to avoid compatibility issues.\n\n### Added\n\n * runc has been updated to OCI runtime-spec 1.2.0, and supports all Linux\n   features with a few minor exceptions. See\n   [`docs/spec-conformance.md`](https://github.com/opencontainers/runc/blob/v1.2.0-rc.1/docs/spec-conformance.md)\n   for more details.\n * runc now supports id-mapped mounts for bind-mounts (with no restrictions on\n   the mapping used for each mount). Other mount types are not currently\n   supported. This feature requires `MOUNT_ATTR_IDMAP` kernel support (Linux\n   5.12 or newer) as well as kernel support for the underlying filesystem used\n   for the bind-mount. See [`mount_setattr(2)`][mount_setattr.2] for a list of\n   supported filesystems and other restrictions. (#3717, #3985, #3993)\n * Two new mechanisms for reducing the memory usage of our protections against\n   [CVE-2019-5736][cve-2019-5736] have been introduced:\n   - `runc-dmz` is a minimal binary (~8K) which acts as an additional execve\n     stage, allowing us to only need to protect the smaller binary. It should\n     be noted that there have been several compatibility issues reported with\n     the usage of `runc-dmz` (namely related to capabilities and SELinux). As\n     such, this mechanism is **opt-in** and can be enabled by running `runc`\n     with the environment variable `RUNC_DMZ=true` (setting this environment\n     variable in `config.json` will have no effect). This feature can be\n     disabled at build time using the `runc_nodmz` build tag. (#3983, #3987)\n   - `contrib/memfd-bind` is a helper daemon which will bind-mount a memfd copy\n     of `/usr/bin/runc` on top of `/usr/bin/runc`. This entirely eliminates\n     per-container copies of the binary, but requires care to ensure that\n     upgrades to runc are handled properly, and requires a long-running daemon\n     (unfortunately memfds cannot be bind-mounted directly and thus require a\n     daemon to keep them alive). (#3987)\n * runc will now use `cgroup.kill` if available to kill all processes in a\n   container (such as when doing `runc kill`). (#3135, #3825)\n * Add support for setting the umask for `runc exec`. (#3661)\n * libct/cg: support `SCHED_IDLE` for runc cgroupfs. (#3377)\n * checkpoint/restore: implement `--manage-cgroups-mode=ignore`. (#3546)\n * seccomp: refactor flags support; add flags to features, set `SPEC_ALLOW` by\n   default. (#3588)\n * libct/cg/sd: use systemd v240+ new `MAJOR:*` syntax. (#3843)\n * Support CFS bandwidth burst for CPU. (#3749, #3145)\n * Support time namespaces. (#3876)\n * Reduce the `runc` binary size by ~11% by updating\n   `github.com/checkpoint-restore/go-criu`. (#3652)\n * Add `--pidfd-socket` to `runc run` and `runc exec` to allow for management\n   processes to receive a pidfd for the new process, allowing them to avoid pid\n   reuse attacks. (#4045)\n\n[mount_setattr.2]: https://man7.org/linux/man-pages/man2/mount_setattr.2.html\n[cve-2019-5736]: https://github.com/advisories/GHSA-gxmr-w5mj-v8hh\n\n### Deprecated\n\n * `runc` option `--criu` is now ignored (with a warning), and the option will\n   be removed entirely in a future release. Users who need a non-standard\n   `criu` binary should rely on the standard way of looking up binaries in\n   `$PATH`. (#3316)\n * `runc kill` option `-a` is now deprecated. Previously, it had to be specified\n   to kill a container (with SIGKILL) which does not have its own private PID\n   namespace (so that runc would send SIGKILL to all processes). Now, this is\n   done automatically. (#3864, #3825)\n * `github.com/opencontainers/runc/libcontainer/user` is now deprecated, please\n   use `github.com/moby/sys/user` instead. It will be removed in a future\n   release. (#4017)\n\n### Changed\n\n * When Intel RDT feature is not available, its initialization is skipped,\n   resulting in slightly faster `runc exec` and `runc run`. (#3306)\n * `runc features` is no longer experimental. (#3861)\n * libcontainer users that create and kill containers from a daemon process\n   (so that the container init is a child of that process) must now implement\n   a proper child reaper in case a container does not have its own private PID\n   namespace, as documented in `container.Signal`. (#3825)\n * Sum `anon` and `file` from `memory.stat` for cgroupv2 root usage,\n   as the root does not have `memory.current` for cgroupv2.\n   This aligns cgroupv2 root usage more closely with cgroupv1 reporting.\n   Additionally, report root swap usage as sum of swap and memory usage,\n   aligned with v1 and existing non-root v2 reporting. (#3933)\n * Add `swapOnlyUsage` in `MemoryStats`. This field reports swap-only usage.\n   For cgroupv1, `Usage` and `Failcnt` are set by subtracting memory usage\n   from memory+swap usage. For cgroupv2, `Usage`, `Limit`, and `MaxUsage`\n   are set. (#4010)\n * libcontainer users that create and kill containers from a daemon process\n   (so that the container init is a child of that process) must now implement\n   a proper child reaper in case a container does not have its own private PID\n   namespace, as documented in `container.Signal`. (#3825)\n * libcontainer: `container.Signal` no longer takes an `all` argument. Whether\n   or not it is necessary to kill all processes in the container individually\n   is now determined automatically. (#3825, #3885)\n * seccomp: enable seccomp binary tree optimization. (#3405)\n * `runc run`/`runc exec`: ignore SIGURG. (#3368)\n * Remove tun/tap from the default device allowlist. (#3468)\n * `runc --root non-existent-dir list` now reports an error for non-existent\n   root directory. (#3374)\n\n### Fixed\n\n * In case the runc binary resides on tmpfs, `runc init` no longer re-execs\n   itself twice. (#3342)\n * Our seccomp `-ENOSYS` stub now correctly handles multiplexed syscalls on\n   s390 and s390x. This solves the issue where syscalls the host kernel did not\n   support would return `-EPERM` despite the existence of the `-ENOSYS` stub\n   code (this was due to how s390x does syscall multiplexing). (#3474)\n * Remove tun/tap from the default device rules. (#3468)\n * specconv: avoid mapping \"acl\" to `MS_POSIXACL`. (#3739)\n * libcontainer: fix private PID namespace detection when killing the\n   container. (#3866, #3825)\n * systemd socket notification: fix race where runc exited before systemd\n   properly handled the `READY` notification. (#3291, #3293)\n * The `-ENOSYS` seccomp stub is now always generated for the native\n   architecture that `runc` is running on. This is needed to work around some\n   arguably specification-incompliant behaviour from Docker on architectures\n   such as ppc64le, where the allowed architecture list is set to `null`. This\n   ensures that we always generate at least one `-ENOSYS` stub for the native\n   architecture even with these weird configs. (#4219)\n\n### Removed\n\n * In order to fix performance issues in the \"lightweight\" bindfd protection\n   against [CVE-2019-5736][cve-2019-5736], the temporary `ro` bind-mount of\n   `/proc/self/exe` has been removed. runc now creates a binary copy in all\n   cases. See the above notes about `memfd-bind` and `runc-dmz` as well as\n   `contrib/cmd/memfd-bind/README.md` for more information about how this\n   (minor) change in memory usage can be further reduced. (#3987, #3599, #2532,\n   #3931)\n * libct/cg: Remove `EnterPid` (a function with no users). (#3797)\n * libcontainer: Remove `{Pre,Post}MountCmds` which were never used and are\n   obsoleted by more generic container hooks. (#3350)\n\n[cve-2019-5736]: https://github.com/advisories/GHSA-gxmr-w5mj-v8hh\n\n## [1.1.15] - 2024-10-07\n\n> How, dear sir, did you cross the flood? By not stopping, friend, and by not\n> straining I crossed the flood.\n\n### Fixed\n\n * The `-ENOSYS` seccomp stub is now always generated for the native\n   architecture that `runc` is running on. This is needed to work around some\n   arguably specification-incompliant behaviour from Docker on architectures\n   such as ppc64le, where the allowed architecture list is set to `null`. This\n   ensures that we always generate at least one `-ENOSYS` stub for the native\n   architecture even with these weird configs. (#4391)\n * On a system with older kernel, reading `/proc/self/mountinfo` may skip some\n   entries, as a consequence runc may not properly set mount propagation,\n   causing container mounts leak onto the host mount namespace. (#2404, #4425)\n\n### Removed\n\n * In order to fix performance issues in the \"lightweight\" bindfd protection\n   against [CVE-2019-5736], the temporary `ro` bind-mount of `/proc/self/exe`\n   has been removed. runc now creates a binary copy in all cases. (#4392, #2532)\n\n[CVE-2019-5736]: https://www.openwall.com/lists/oss-security/2019/02/11/2\n\n## [1.1.14] - 2024-09-03\n\n> 年を取っていいことは、驚かなくなることね。\n\n### Security\n\n * Fix [CVE-2024-45310][cve-2024-45310], a low-severity attack that allowed\n   maliciously configured containers to create empty files and directories on\n   the host.\n\n[cve-2024-45310]: https://github.com/opencontainers/runc/security/advisories/GHSA-jfvp-7x6p-h2pv\n\n### Added\n\n * Add support for Go 1.23. (#4360, #4372)\n\n### Fixed\n\n * Revert \"allow overriding VERSION value in Makefile\" and add `EXTRA_VERSION`.\n   (#4370, #4382)\n * rootfs: consolidate mountpoint creation logic. (#4359)\n\n## [1.1.13] - 2024-06-13\n\n> There is no certainty in the world. This is the only certainty I have.\n\n### Important Notes\n\n * If building with Go 1.22.x, make sure to use 1.22.4 or a later version.\n   (see #4233 for more details)\n\n### Fixed\n\n * Support go 1.22.4+. (#4313)\n * runc list: fix race with runc delete. (#4231)\n * Fix set nofile rlimit error. (#4277, #4299)\n * libct/cg/fs: fix setting rt_period vs rt_runtime. (#4284)\n * Fix a debug msg for user ns in nsexec. (#4315)\n * script/*: fix gpg usage wrt keyboxd. (#4316)\n * CI fixes and misc backports. (#4241)\n * Fix codespell warnings. (#4300)\n\n### Changed\n\n * Silence security false positives from golang/net. (#4244)\n * libcontainer: allow containers to make apps think fips is enabled/disabled for testing. (#4257)\n * allow overriding VERSION value in Makefile. (#4270)\n * Vagrantfile.fedora: bump Fedora to 39. (#4261)\n * ci/cirrus: rm centos stream 8. (#4305, #4308)\n\n## [1.1.12] - 2024-01-31\n\n> Now you're thinking with Portals™!\n\n### Security\n\n* Fix [CVE-2024-21626][cve-2024-21626], a container breakout attack that took\n  advantage of a file descriptor that was leaked internally within runc (but\n  never leaked to the container process). In addition to fixing the leak,\n  several strict hardening measures were added to ensure that future internal\n  leaks could not be used to break out in this manner again. Based on our\n  research, while no other container runtime had a similar leak, none had any\n  of the hardening steps we've introduced (and some runtimes would not check\n  for any file descriptors that a calling process may have leaked to them,\n  allowing for container breakouts due to basic user error).\n\n[cve-2024-21626]: https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv\n\n## [1.1.11] - 2024-01-01\n\n> Happy New Year!\n\n### Fixed\n\n* Fix several issues with userns path handling. (#4122, #4124, #4134, #4144)\n\n### Changed\n\n * Support memory.peak and memory.swap.peak in cgroups v2.\n   Add `swapOnlyUsage` in `MemoryStats`. This field reports swap-only usage.\n   For cgroupv1, `Usage` and `Failcnt` are set by subtracting memory usage\n   from memory+swap usage. For cgroupv2, `Usage`, `Limit`, and `MaxUsage`\n   are set. (#4000, #4010, #4131)\n * build(deps): bump github.com/cyphar/filepath-securejoin. (#4140)\n\n## [1.1.10] - 2023-10-31\n\n> Śruba, przykręcona we śnie, nie zmieni sytuacji, jaka panuje na jawie.\n\n### Added\n\n* Support for `hugetlb.<pagesize>.rsvd` limiting and accounting. Fixes the\n  issue of postres failing when hugepage limits are set. (#3859, #4077)\n\n### Fixed\n\n* Fixed permissions of a newly created directories to not depend on the value\n  of umask in tmpcopyup feature implementation. (#3991, #4060)\n* libcontainer: cgroup v1 GetStats now ignores missing `kmem.limit_in_bytes`\n  (fixes the compatibility with Linux kernel 6.1+). (#4028)\n* Fix a semi-arbitrary cgroup write bug when given a malicious hugetlb\n  configuration. This issue is not a security issue because it requires a\n  malicious `config.json`, which is outside of our threat model. (#4103)\n* Various CI fixes. (#4081, #4055)\n\n## [1.1.9] - 2023-08-10\n\n> There is a crack in everything. That's how the light gets in.\n\n### Added\n\n* Added go 1.21 to the CI matrix; other CI updates. (#3976, #3958)\n\n### Fixed\n\n* Fixed losing sticky bit on tmpfs (a regression in 1.1.8). (#3952, #3961)\n* intelrdt: fixed ignoring ClosID on some systems. (#3550, #3978)\n\n### Changed\n\n * Sum `anon` and `file` from `memory.stat` for cgroupv2 root usage,\n   as the root does not have `memory.current` for cgroupv2.\n   This aligns cgroupv2 root usage more closely with cgroupv1 reporting.\n   Additionally, report root swap usage as sum of swap and memory usage,\n   aligned with v1 and existing non-root v2 reporting. (#3933)\n\n## [1.1.8] - 2023-07-20\n\n> 海纳百川 有容乃大\n\n### Added\n\n* Support riscv64. (#3905)\n\n### Fixed\n\n* init: do not print environment variable value. (#3879)\n* libct: fix a race with systemd removal. (#3877)\n* tests/int: increase num retries for oom tests. (#3891)\n* man/runc: fixes. (#3892)\n* Fix tmpfs mode opts when dir already exists. (#3916)\n* docs/systemd: fix a broken link. (#3917)\n* ci/cirrus: enable some rootless tests on cs9. (#3918)\n* runc delete: call systemd's reset-failed. (#3932)\n* libct/cg/sd/v1: do not update non-frozen cgroup after frozen failed. (#3921)\n\n### Changed\n\n* CI: bump Fedora, Vagrant, bats. (#3878)\n* `.codespellrc`: update for 2.2.5. (#3909)\n\n## [1.1.7] - 2023-04-26\n\n> Ночевала тучка золотая на груди утеса-великана.\n\n### Fixed\n\n* When used with systemd v240+, systemd cgroup drivers no longer skip\n  `DeviceAllow` rules if the device does not exist (a regression introduced\n  in runc 1.1.3). This fix also reverts the workaround added in runc 1.1.5,\n  removing an extra warning emitted by runc run/start. (#3845, #3708, #3671)\n\n### Added\n\n* The source code now has a new file, `runc.keyring`, which contains the keys\n  used to sign runc releases. (#3838)\n\n## [1.1.6] - 2023-04-11\n\n> In this world nothing is certain but death and taxes.\n\n### Compatibility\n\n* This release can no longer be built from sources using Go 1.16. Using a\n  latest maintained Go 1.20.x or Go 1.19.x release is recommended.\n  Go 1.17 can still be used.\n\n### Fixed\n\n* systemd cgroup v1 and v2 drivers were deliberately ignoring `UnitExist` error\n  from systemd while trying to create a systemd unit, which in some scenarios\n  may result in a container not being added to the proper systemd unit and\n  cgroup. (#3780, #3806)\n* systemd cgroup v2 driver was incorrectly translating cpuset range from spec's\n  `resources.cpu.cpus` to systemd unit property (`AllowedCPUs`) in case of more\n  than 8 CPUs, resulting in the wrong AllowedCPUs setting. (#3808)\n* systemd cgroup v1 driver was prefixing container's cgroup path with the path\n  of PID 1 cgroup, resulting in inability to place PID 1 in a non-root cgroup.\n  (#3811)\n* runc run/start may return \"permission denied\" error when starting a rootless\n  container when the file to be executed does not have executable bit set for\n  the user, not taking the `CAP_DAC_OVERRIDE` capability into account. This is\n  a regression in runc 1.1.4, as well as in Go 1.20 and 1.20.1 (#3715, #3817)\n* cgroup v1 drivers are now aware of `misc` controller. (#3823)\n* Various CI fixes and improvements, mostly to ensure Go 1.19.x and Go 1.20.x\n  compatibility.\n\n## [1.1.5] - 2023-03-29\n\n> 囚われた屈辱は\n> 反撃の嚆矢だ\n\n### Security\n\nThe following CVEs were fixed in this release:\n\n* [CVE-2023-25809][] is a vulnerability involving rootless containers where\n  (under specific configurations), the container would have write access to the\n  `/sys/fs/cgroup/user.slice/...` cgroup hierarchy. No other hierarchies on the\n  host were affected. This vulnerability was discovered by Akihiro Suda.\n\n* [CVE-2023-27561][] was a regression in our protections against tricky `/proc`\n  and `/sys` configurations (where the container mountpoint is a symlink)\n  causing us to be tricked into incorrectly configuring the container, which\n  effectively re-introduced [CVE-2019-19921][]. This regression was present\n  from v1.0.0-rc95 to v1.1.4 and was discovered by @Beuc. (#3785)\n\n* [CVE-2023-28642][] is a different attack vector using the same regression\n  as in [CVE-2023-27561][]. This was reported by Lei Wang.\n\n[CVE-2019-19921]: https://github.com/advisories/GHSA-fh74-hm69-rqjw\n[CVE-2023-25809]: https://github.com/opencontainers/runc/security/advisories/GHSA-m8cg-xc2p-r3fc\n[CVE-2023-27561]: https://github.com/advisories/GHSA-vpvm-3wq2-2wvm\n[CVE-2023-28642]: https://github.com/opencontainers/runc/security/advisories/GHSA-g2j6-57v7-gm8c\n\n### Fixed\n\n* Fix the inability to use `/dev/null` when inside a container. (#3620)\n* Fix changing the ownership of host's `/dev/null` caused by fd redirection\n  (a regression in 1.1.1). (#3674, #3731)\n* Fix rare runc exec/enter unshare error on older kernels, including\n  CentOS < 7.7. (#3776)\n* nsexec: Check for errors in `write_log()`. (#3721)\n* Various CI fixes and updates. (#3618, #3630, #3640, #3729)\n\n## [1.1.4] - 2022-08-24\n\n> If you look for perfection, you'll never be content.\n\n### Fixed\n\n* Fix mounting via wrong proc fd.\n  When the user and mount namespaces are used, and the bind mount is followed by\n  the cgroup mount in the spec, the cgroup was mounted using the bind mount's\n  mount fd. (#3511)\n* Switch `kill()` in `libcontainer/nsenter` to `sane_kill()`. (#3536)\n* Fix \"permission denied\" error from `runc run` on `noexec` fs. (#3541)\n* Fix failed exec after `systemctl daemon-reload`.\n  Due to a regression in v1.1.3, the `DeviceAllow=char-pts rwm` rule was no\n  longer added and was causing an error `open /dev/pts/0: operation not permitted: unknown`\n  when systemd was reloaded. (#3554)\n* Various CI fixes. (#3538, #3558, #3562)\n\n## [1.1.3] - 2022-06-09\n\n> In the beginning there was nothing, which exploded.\n\n### Fixed\n * Our seccomp `-ENOSYS` stub now correctly handles multiplexed syscalls on\n   s390 and s390x. This solves the issue where syscalls the host kernel did not\n   support would return `-EPERM` despite the existence of the `-ENOSYS` stub\n   code (this was due to how s390x does syscall multiplexing). (#3478)\n * Retry on dbus disconnect logic in libcontainer/cgroups/systemd now works as\n   intended; this fix does not affect runc binary itself but is important for\n   libcontainer users such as Kubernetes. (#3476)\n * Inability to compile with recent clang due to an issue with duplicate\n   constants in libseccomp-golang. (#3477)\n * When using systemd cgroup driver, skip adding device paths that don't exist,\n   to stop systemd from emitting warnings about those paths. (#3504)\n * Socket activation was failing when more than 3 sockets were used. (#3494)\n * Various CI fixes. (#3472, #3479)\n\n### Added\n * Allow to bind mount /proc/sys/kernel/ns_last_pid to inside container. (#3493)\n\n### Changed\n * runc static binaries are now linked against libseccomp v2.5.4. (#3481)\n\n\n## [1.1.2] - 2022-05-11\n\n> I should think I'm going to be a perpetual student.\n\n### Security\n * A bug was found in runc where runc exec --cap executed processes with\n   non-empty inheritable Linux process capabilities, creating an atypical Linux\n   environment. For more information, see [GHSA-f3fp-gc8g-vw66][] and\n   CVE-2022-29162.\n\n### Changed\n * `runc spec` no longer sets any inheritable capabilities in the created\n   example OCI spec (`config.json`) file.\n\n[GHSA-f3fp-gc8g-vw66]: https://github.com/opencontainers/runc/security/advisories/GHSA-f3fp-gc8g-vw66\n\n\n## [1.1.1] - 2022-03-28\n\n> Violence is the last refuge of the incompetent.\n\n### Added\n * CI is now also run on centos-stream-9. (#3436)\n\n### Fixed\n * `runc run/start` can now run a container with read-only `/dev` in OCI spec,\n   rather than error out. (#3355)\n * `runc exec` now ensures that `--cgroup` argument is a sub-cgroup. (#3403)\n * libcontainer systemd v2 manager no longer errors out if one of the files\n   listed in `/sys/kernel/cgroup/delegate` do not exist in container's cgroup.\n   (#3387, #3404)\n * Loose OCI spec validation to avoid bogus \"Intel RDT is not supported\" error.\n   (#3406)\n * libcontainer/cgroups no longer panics in cgroup v1 managers if `stat`\n   of `/sys/fs/cgroup/unified` returns an error other than ENOENT. (#3435)\n\n\n## [1.1.0] - 2022-01-14\n\n> A plan depends as much upon execution as it does upon concept.\n\n### Changed\n * libcontainer will now refuse to build without the nsenter package being\n   correctly compiled (specifically this requires CGO to be enabled). This\n   should avoid folks accidentally creating broken runc binaries (and\n   incorrectly importing our internal libraries into their projects). (#3331)\n\n\n## [1.1.0-rc.1] - 2021-12-14\n\n> He who controls the spice controls the universe.\n\n### Deprecated\n * runc run/start now warns if a new container cgroup is non-empty or frozen;\n   this warning will become an error in runc 1.2. (#3132, #3223)\n * runc can only be built with Go 1.16 or later from this release onwards.\n   (#3100, #3245, #3325)\n\n### Removed\n * `cgroup.GetHugePageSizes` has been removed entirely, and been replaced with\n   `cgroup.HugePageSizes` which is more efficient. (#3234)\n * `intelrdt.GetIntelRdtPath` has been removed. Users who were using this\n   function to get the intelrdt root should use the new `intelrdt.Root`\n   instead. (#2920, #3239)\n\n### Added\n * Add support for RDMA cgroup added in Linux 4.11. (#2883)\n * runc exec now produces exit code of 255 when the exec failed.\n   This may help in distinguishing between runc exec failures\n   (such as invalid options, non-running container or non-existent\n   binary etc.) and failures of the command being executed. (#3073)\n * runc run: new `--keep` option to skip removal exited containers artefacts.\n   This might be useful to check the state (e.g. of cgroup controllers) after\n   the container has exited. (#2817, #2825)\n * seccomp: add support for `SCMP_ACT_KILL_PROCESS` and `SCMP_ACT_KILL_THREAD`\n   (the latter is just an alias for `SCMP_ACT_KILL`). (#3204)\n * seccomp: add support for `SCMP_ACT_NOTIFY` (seccomp actions). This allows\n   users to create sophisticated seccomp filters where syscalls can be\n   efficiently emulated by privileged processes on the host. (#2682)\n * checkpoint/restore: add an option (`--lsm-mount-context`) to set\n   a different LSM mount context on restore. (#3068)\n * runc releases are now cross-compiled for several architectures. Static\n   builds for said architectures will be available for all future releases.\n   (#3197)\n * intelrdt: support ClosID parameter. (#2920)\n * runc exec --cgroup: an option to specify a (non-top) in-container cgroup\n   to use for the process being executed. (#3040, #3059)\n * cgroup v1 controllers now support hybrid hierarchy (i.e. when on a cgroup v1\n   machine a cgroup2 filesystem is mounted to /sys/fs/cgroup/unified, runc\n   run/exec now adds the container to the appropriate cgroup under it). (#2087,\n   #3059)\n * sysctl: allow slashes in sysctl names, to better match `sysctl(8)`'s\n   behaviour. (#3254, #3257)\n * mounts: add support for bind-mounts which are inaccessible after switching\n   the user namespace. Note that this does not permit the container any\n   additional access to the host filesystem, it simply allows containers to\n   have bind-mounts configured for paths the user can access but have\n   restrictive access control settings for other users. (#2576)\n * Add support for recursive mount attributes using `mount_setattr(2)`. These\n   have the same names as the proposed `mount(8)` options -- just prepend `r`\n   to the option name (such as `rro`). (#3272)\n * Add `runc features` subcommand to allow runc users to detect what features\n   runc has been built with. This includes critical information such as\n   supported mount flags, hook names, and so on. Note that the output of this\n   command is subject to change and will not be considered stable until runc\n   1.2 at the earliest. The runtime-spec specification for this feature is\n   being developed in [opencontainers/runtime-spec#1130]. (#3296)\n\n[opencontainers/runtime-spec#1130]: https://github.com/opencontainers/runtime-spec/pull/1130\n\n### Changed\n * system: improve performance of `/proc/$pid/stat` parsing. (#2696)\n * cgroup2: when `/sys/fs/cgroup` is configured as a read-write mount, change\n   the ownership of certain cgroup control files (as per\n   `/sys/kernel/cgroup/delegate`) to allow for proper deferral to the container\n   process. (#3057)\n * docs: series of improvements to man pages to make them easier to read and\n   use. (#3032)\n\n#### libcontainer API\n * internal api: remove internal error types and handling system, switch to Go\n   wrapped errors. (#3033)\n * New configs.Cgroup structure fields (#3177):\n   * Systemd (whether to use systemd cgroup manager); and\n   * Rootless (whether to use rootless cgroups).\n * New cgroups/manager package aiming to simplify cgroup manager instantiation.\n   (#3177)\n * All cgroup managers' instantiation methods now initialize cgroup paths and\n   can return errors. This allows to use any cgroup manager method (e.g.\n   Exists, Destroy, Set, GetStats) right after instantiation, which was not\n   possible before (as paths were initialized in Apply only). (#3178)\n\n### Fixed\n * nsenter: do not try to close already-closed fds during container setup and\n   bail on close(2) failures. (#3058)\n * runc checkpoint/restore: fixed for containers with an external bind mount\n   which destination is a symlink. (#3047).\n * cgroup: improve openat2 handling for cgroup directory handle hardening.\n   (#3030)\n * `runc delete -f` now succeeds (rather than timing out) on a paused\n   container. (#3134)\n * runc run/start/exec now refuses a frozen cgroup (paused container in case of\n   exec). Users can disable this using `--ignore-paused`. (#3132, #3223)\n * config: do not permit null bytes in mount fields. (#3287)\n\n\n## [1.0.3] - 2021-12-06\n\n> If you were waiting for the opportune moment, that was it.\n\n### Security\n * A potential vulnerability was discovered in runc (related to an internal\n   usage of netlink), however upon further investigation we discovered that\n   while this bug was exploitable on the master branch of runc, no released\n   version of runc could be exploited using this bug. The exploit required being\n   able to create a netlink attribute with a length that would overflow a uint16\n   but this was not possible in any released version of runc. For more\n   information, see [GHSA-v95c-p5hm-xq8f][] and CVE-2021-43784.\n\n### Fixed\n * Fixed inability to start a container with read-write bind mount of a\n   read-only fuse host mount. (#3283, #3292)\n * Fixed inability to start when read-only /dev in set in spec. (#3276, #3277)\n * Fixed not removing sub-cgroups upon container delete, when rootless cgroup v2\n   is used with older systemd. (#3226, #3297)\n * Fixed returning error from GetStats when hugetlb is unsupported (which causes\n   excessive logging for Kubernetes). (#3233, #3295)\n * Improved an error message when dbus-user-session is not installed and\n   rootless + cgroup2 + systemd are used. (#3212)\n\n[GHSA-v95c-p5hm-xq8f]: https://github.com/opencontainers/runc/security/advisories/GHSA-v95c-p5hm-xq8f\n\n\n## [1.0.2] - 2021-07-16\n\n> Given the right lever, you can move a planet.\n\n### Changed\n * Made release builds reproducible from now on. (#3099, #3142)\n\n### Fixed\n * Fixed a failure to set CPU quota period in some cases on cgroup v1. (#3090\n   #3115)\n * Fixed the inability to start a container with the \"adding seccomp filter\n   rule for syscall ...\" error, caused by redundant seccomp rules (i.e. those\n   that has action equal to the default one). Such redundant rules are now\n   skipped. (#3109, #3129)\n * Fixed a rare debug log race in runc init, which can result in occasional\n   harmful \"failed to decode ...\" errors from runc run or exec. (#3120, #3130)\n * Fixed the check in cgroup v1 systemd manager if a container needs to be\n   frozen before Set, and add a setting to skip such freeze unconditionally.\n   The previous fix for that issue, done in  runc 1.0.1, was not working.\n   (#3166, #3167)\n\n\n## [1.0.1] - 2021-07-16\n\n> If in doubt, Meriadoc, always follow your nose.\n\n### Fixed\n * Fixed occasional runc exec/run failure (\"interrupted system call\") on an\n   Azure volume. (#3045, #3074)\n * Fixed \"unable to find groups ... token too long\" error with /etc/group\n   containing lines longer than 64K characters. (#3062, #3079)\n * cgroup/systemd/v1: fix leaving cgroup frozen after Set if a parent cgroup is\n   frozen.  This is a regression in 1.0.0, not affecting runc itself but some\n   of libcontainer users (e.g Kubernetes). (#3081, #3085)\n * cgroupv2: bpf: Ignore inaccessible existing programs in case of\n   permission error when handling replacement of existing bpf cgroup\n   programs. This fixes a regression in 1.0.0, where some SELinux\n   policies would block runc from being able to run entirely. (#3055, #3087)\n * cgroup/systemd/v2: don't freeze cgroup on Set. (#3067, #3092)\n * cgroup/systemd/v1: avoid unnecessary freeze on Set. (#3082, #3093)\n\n\n## [1.0.0] - 2021-06-22\n\n> A wizard is never late, nor is he early, he arrives precisely when he means\n> to.\n\nAs runc follows Semantic Versioning, we will endeavour to not make any\nbreaking changes without bumping the major version number of runc.\nHowever, it should be noted that Go API usage of runc's internal\nimplementation (libcontainer) is *not* covered by this policy.\n\n### Removed\n * Removed libcontainer/configs.Device* identifiers (deprecated since rc94,\n   use libcontainer/devices). (#2999)\n * Removed libcontainer/system.RunningInUserNS function (deprecated since\n   rc94, use libcontainer/userns). (#2999)\n\n### Deprecated\n * The usage of relative paths for mountpoints will now produce a warning\n   (such configurations are outside of the spec, and in future runc will\n   produce an error when given such configurations). (#2917, #3004)\n\n### Fixed\n * cgroupv2: devices: rework the filter generation to produce consistent\n   results with cgroupv1, and always clobber any existing eBPF\n   program(s) to fix `runc update` and avoid leaking eBPF programs\n   (resulting in errors when managing containers).  (#2951)\n * cgroupv2: correctly convert \"number of IOs\" statistics in a\n   cgroupv1-compatible way. (#2965, #2967, #2968, #2964)\n * cgroupv2: support larger than 32-bit IO statistics on 32-bit architectures.\n * cgroupv2: wait for freeze to finish before returning from the freezing\n   code, optimize the method for checking whether a cgroup is frozen. (#2955)\n * cgroups/systemd: fixed \"retry on dbus disconnect\" logic introduced in rc94\n * cgroups/systemd: fixed returning \"unit already exists\" error from a systemd\n   cgroup manager (regression in rc94). (#2997, #2996)\n\n### Added\n * cgroupv2: support SkipDevices with systemd driver. (#2958, #3019)\n * cgroup1: blkio: support BFQ weights. (#3010)\n * cgroupv2: set per-device io weights if BFQ IO scheduler is available.\n   (#3022)\n\n### Changed\n * cgroup/systemd: return, not ignore, stop unit error from Destroy. (#2946)\n * Fix all golangci-lint failures. (#2781, #2962)\n * Make `runc --version` output sane even when built with `go get` or\n   otherwise outside of our build scripts. (#2962)\n * cgroups: set SkipDevices during runc update (so we don't modify\n   cgroups at all during `runc update`). (#2994)\n\n<!-- minor releases -->\n[Unreleased]: https://github.com/opencontainers/runc/compare/v1.3.0-rc.1...HEAD\n[1.3.0]: https://github.com/opencontainers/runc/compare/v1.3.0-rc.2...v1.3.0\n[1.2.0]: https://github.com/opencontainers/runc/compare/v1.2.0-rc.1...v1.2.0\n[1.1.0]: https://github.com/opencontainers/runc/compare/v1.1.0-rc.1...v1.1.0\n[1.0.0]: https://github.com/opencontainers/runc/releases/tag/v1.0.0\n\n<!-- 1.0.z patch releases -->\n[Unreleased 1.0.z]: https://github.com/opencontainers/runc/compare/v1.0.3...release-1.0\n[1.0.3]: https://github.com/opencontainers/runc/compare/v1.0.2...v1.0.3\n[1.0.2]: https://github.com/opencontainers/runc/compare/v1.0.1...v1.0.2\n[1.0.1]: https://github.com/opencontainers/runc/compare/v1.0.0...v1.0.1\n\n<!-- 1.1.z patch releases -->\n[Unreleased 1.1.z]: https://github.com/opencontainers/runc/compare/v1.1.15...release-1.1\n[1.1.15]: https://github.com/opencontainers/runc/compare/v1.1.14...v1.1.15\n[1.1.14]: https://github.com/opencontainers/runc/compare/v1.1.13...v1.1.14\n[1.1.13]: https://github.com/opencontainers/runc/compare/v1.1.12...v1.1.13\n[1.1.12]: https://github.com/opencontainers/runc/compare/v1.1.11...v1.1.12\n[1.1.11]: https://github.com/opencontainers/runc/compare/v1.1.10...v1.1.11\n[1.1.10]: https://github.com/opencontainers/runc/compare/v1.1.9...v1.1.10\n[1.1.9]: https://github.com/opencontainers/runc/compare/v1.1.8...v1.1.9\n[1.1.8]: https://github.com/opencontainers/runc/compare/v1.1.7...v1.1.8\n[1.1.7]: https://github.com/opencontainers/runc/compare/v1.1.6...v1.1.7\n[1.1.6]: https://github.com/opencontainers/runc/compare/v1.1.5...v1.1.6\n[1.1.5]: https://github.com/opencontainers/runc/compare/v1.1.4...v1.1.5\n[1.1.4]: https://github.com/opencontainers/runc/compare/v1.1.3...v1.1.4\n[1.1.3]: https://github.com/opencontainers/runc/compare/v1.1.2...v1.1.3\n[1.1.2]: https://github.com/opencontainers/runc/compare/v1.1.1...v1.1.2\n[1.1.1]: https://github.com/opencontainers/runc/compare/v1.1.0...v1.1.1\n[1.1.0-rc.1]: https://github.com/opencontainers/runc/compare/v1.0.0...v1.1.0-rc.1\n\n<!-- 1.2.z patch releases -->\n[Unreleased 1.2.z]: https://github.com/opencontainers/runc/compare/v1.2.9...release-1.2\n[1.2.9]: https://github.com/opencontainers/runc/compare/v1.2.8...v1.2.9\n[1.2.8]: https://github.com/opencontainers/runc/compare/v1.2.7...v1.2.8\n[1.2.7]: https://github.com/opencontainers/runc/compare/v1.2.6...v1.2.7\n[1.2.6]: https://github.com/opencontainers/runc/compare/v1.2.5...v1.2.6\n[1.2.5]: https://github.com/opencontainers/runc/compare/v1.2.4...v1.2.5\n[1.2.4]: https://github.com/opencontainers/runc/compare/v1.2.3...v1.2.4\n[1.2.3]: https://github.com/opencontainers/runc/compare/v1.2.2...v1.2.3\n[1.2.2]: https://github.com/opencontainers/runc/compare/v1.2.1...v1.2.2\n[1.2.1]: https://github.com/opencontainers/runc/compare/v1.2.0...v1.2.1\n[1.2.0-rc.3]: https://github.com/opencontainers/runc/compare/v1.2.0-rc.2...v1.2.0-rc.3\n[1.2.0-rc.2]: https://github.com/opencontainers/runc/compare/v1.2.0-rc.1...v1.2.0-rc.2\n[1.2.0-rc.1]: https://github.com/opencontainers/runc/compare/v1.1.0...v1.2.0-rc.1\n\n<!-- 1.3.z patch releases -->\n[Unreleased 1.3.z]: https://github.com/opencontainers/runc/compare/v1.3.4...release-1.3\n[1.3.4]: https://github.com/opencontainers/runc/compare/v1.3.3...v1.3.4\n[1.3.3]: https://github.com/opencontainers/runc/compare/v1.3.2...v1.3.3\n[1.3.2]: https://github.com/opencontainers/runc/compare/v1.3.1...v1.3.2\n[1.3.1]: https://github.com/opencontainers/runc/compare/v1.3.0...v1.3.1\n[1.3.0]: https://github.com/opencontainers/runc/compare/v1.3.0-rc.2...v1.3.0\n[1.3.0-rc.2]: https://github.com/opencontainers/runc/compare/v1.3.0-rc.1...v1.3.0-rc.2\n[1.3.0-rc.1]: https://github.com/opencontainers/runc/compare/v1.2.0...v1.3.0-rc.1\n\n<!-- 1.4.z patch releases -->\n[Unreleased 1.4.z]: https://github.com/opencontainers/runc/compare/v1.4.1...release-1.4\n[1.4.1]: https://github.com/opencontainers/runc/compare/v1.4.0...v1.4.1\n[1.4.0]: https://github.com/opencontainers/runc/compare/v1.4.0-rc.3...v1.4.0\n[1.4.0-rc.3]: https://github.com/opencontainers/runc/compare/v1.4.0-rc.2...v1.4.0-rc.3\n[1.4.0-rc.2]: https://github.com/opencontainers/runc/compare/v1.4.0-rc.1...v1.4.0-rc.2\n[1.4.0-rc.1]: https://github.com/opencontainers/runc/compare/v1.3.0...v1.4.0-rc.1\n\n<!-- 1.5.z patch releases -->\n[Unreleased 1.5.z]: https://github.com/opencontainers/runc/compare/v1.5.0-rc.1...release-1.5\n[1.5.0-rc.1]: https://github.com/opencontainers/runc/compare/v1.4.0...v1.5.0-rc.1\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "## Contribution Guidelines\n\n### Security issues\n\nIf you are reporting a security issue, do not create an issue or file a pull\nrequest on GitHub. Instead, disclose the issue responsibly by sending an email\nto security@opencontainers.org (which is inhabited only by the maintainers of\nthe various OCI projects).\n\n### Pull requests are always welcome\n\nWe are always thrilled to receive pull requests, and do our best to\nprocess them as fast as possible. Not sure if that typo is worth a pull\nrequest? Do it! We will appreciate it.\n\nIf your pull request is not accepted on the first try, don't be\ndiscouraged! If there's a problem with the implementation, hopefully you\nreceived feedback on what to improve.\n\nWe're trying very hard to keep runc lean and focused. We don't want it\nto do everything for everybody. This means that we might decide against\nincorporating a new feature. However, there might be a way to implement\nthat feature *on top of* runc.\n\n\n### Conventions\n\nFork the repo and make changes on your fork in a feature branch:\n\n- If it's a bugfix branch, name it XXX-something where XXX is the number of the\n  issue\n- If it's a feature branch, create an enhancement issue to announce your\n  intentions, and name it XXX-something where XXX is the number of the issue.\n\nSubmit unit tests for your changes.  Go has a great test framework built in; use\nit! Take a look at existing tests for inspiration. Run the full test suite on\nyour branch before submitting a pull request.\n\nUpdate the documentation when creating or modifying features. Test\nyour documentation changes for clarity, concision, and correctness, as\nwell as a clean documentation build. See ``docs/README.md`` for more\ninformation on building the docs and how docs get released.\n\nWrite clean code. Universally formatted code promotes ease of writing, reading,\nand maintenance. Always run `gofmt -s -w file.go` on each changed file before\ncommitting your changes. Most editors have plugins that do this automatically.\n\nPull requests descriptions should be as clear as possible and include a\nreference to all the issues that they address.\n\nPull requests must not contain commits from other users or branches.\n\nCommit messages must start with a capitalized and short summary (max. 50\nchars) written in the imperative, followed by an optional, more detailed\nexplanatory text which is separated from the summary by an empty line.\n\nCode review comments may be added to your pull request. Discuss, then make the\nsuggested modifications and push additional commits to your feature branch. Be\nsure to post a comment after pushing. The new commits will show up in the pull\nrequest automatically, but the reviewers will not be notified unless you\ncomment.\n\nBefore the pull request is merged, make sure that you squash your commits into\nlogical units of work using `git rebase -i` and `git push -f`. After every\ncommit the test suite should be passing. Include documentation changes in the\nsame commit so that a revert would remove all traces of the feature or fix.\n\nCommits that fix or close an issue should include a reference like `Closes #XXX`\nor `Fixes #XXX`, which will automatically close the issue when merged.\n\n### Sign your work\n\nThe sign-off is a simple line at the end of the explanation for the\npatch, which certifies that you wrote it or otherwise have the right to\npass it on as an open-source patch.  The rules are pretty simple: if you\ncan certify the below (from\n[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\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@gmail.com>\n\nusing your real name (sorry, no pseudonyms or anonymous contributions.)\n\nYou can add the sign off when creating the git commit via `git commit -s`.\n"
  },
  {
    "path": "Dockerfile",
    "content": "ARG GO_VERSION=1.25\nARG BATS_VERSION=v1.12.0\nARG LIBSECCOMP_VERSION=2.6.0\nARG LIBPATHRS_VERSION=0.2.4\n\nFROM golang:${GO_VERSION}-trixie\nARG DEBIAN_FRONTEND=noninteractive\nARG CRIU_REPO=https://download.opensuse.org/repositories/devel:/tools:/criu/Debian_13\n\nRUN KEYFILE=/usr/share/keyrings/criu-repo-keyring.gpg; \\\n    wget -nv $CRIU_REPO/Release.key -O- | gpg --dearmor > \"$KEYFILE\" \\\n    && echo \"deb [signed-by=$KEYFILE] $CRIU_REPO/ /\" > /etc/apt/sources.list.d/criu.list \\\n    && printf \"%s\\n\" i386 armel armhf arm64 ppc64el s390x riscv64 | xargs -t -n1 -- dpkg --add-architecture \\\n    && apt-get update \\\n    && apt-get install -y --no-install-recommends \\\n        build-essential \\\n        cargo \\\n        cargo-auditable \\\n        clang \\\n        criu \\\n        gcc \\\n        gcc-multilib \\\n        curl \\\n        gawk \\\n        gperf \\\n        iptables \\\n        jq \\\n        kmod \\\n        lld \\\n        pkg-config \\\n        python3-minimal \\\n        sshfs \\\n        sudo \\\n        uidmap \\\n        iproute2 \\\n    && apt-get install -y --no-install-recommends \\\n        libc-dev:i386 libgcc-s1:i386 gcc-i686-linux-gnu libstd-rust-dev:i386 \\\n        gcc-aarch64-linux-gnu libc-dev-arm64-cross libstd-rust-dev:arm64 \\\n        gcc-arm-linux-gnueabi libc-dev-armel-cross libstd-rust-dev:armel \\\n        gcc-arm-linux-gnueabihf libc-dev-armhf-cross libstd-rust-dev:armhf \\\n        gcc-powerpc64le-linux-gnu libc-dev-ppc64el-cross libstd-rust-dev:ppc64el \\\n        gcc-s390x-linux-gnu libc-dev-s390x-cross libstd-rust-dev:s390x \\\n        gcc-riscv64-linux-gnu libc-dev-riscv64-cross libstd-rust-dev:riscv64 \\\n    && apt-get clean \\\n    && rm -rf /var/cache/apt /var/lib/apt/lists/* /etc/apt/sources.list.d/*.list\n\n# Add a dummy user for the rootless integration tests. While runC does\n# not require an entry in /etc/passwd to operate, one of the tests uses\n# `git clone` -- and `git clone` does not allow you to clone a\n# repository if the current uid does not have an entry in /etc/passwd.\nRUN useradd -u1000 -m -d/home/rootless -s/bin/bash rootless\n\n# install bats\nARG BATS_VERSION\nRUN cd /tmp \\\n    && git clone https://github.com/bats-core/bats-core.git \\\n    && cd bats-core \\\n    && git reset --hard \"${BATS_VERSION}\" \\\n    && ./install.sh /usr/local \\\n    && rm -rf /tmp/bats-core\n\nARG RELEASE_ARCHES=\"386 amd64 arm64 armel armhf ppc64le riscv64 s390x\"\nENV DYLIB_DIR=/opt/runc-dylibs\n\n# install libseccomp\nARG LIBSECCOMP_VERSION\nCOPY script/build-seccomp.sh script/lib.sh /tmp/script/\nRUN mkdir -p $DYLIB_DIR \\\n    && /tmp/script/build-seccomp.sh \"$LIBSECCOMP_VERSION\" $DYLIB_DIR $RELEASE_ARCHES\nENV LIBSECCOMP_VERSION=$LIBSECCOMP_VERSION\n\n# install libpathrs\nARG LIBPATHRS_VERSION\nCOPY script/build-libpathrs.sh /tmp/script/\nRUN mkdir -p $DYLIB_DIR \\\n    && /tmp/script/build-libpathrs.sh \"$LIBPATHRS_VERSION\" $DYLIB_DIR $RELEASE_ARCHES\nENV LIBPATHRS_VERSION=$LIBPATHRS_VERSION\n\nENV LD_LIBRARY_PATH=$DYLIB_DIR/lib\nENV PKG_CONFIG_PATH=$DYLIB_DIR/lib/pkgconfig\n\n# Prevent the \"fatal: detected dubious ownership in repository\" git complain during build.\nRUN git config --global --add safe.directory /go/src/github.com/opencontainers/runc\n\nWORKDIR /go/src/github.com/opencontainers/runc\n\n# Fixup for cgroup v2.\nCOPY script/prepare-cgroup-v2.sh /\nENTRYPOINT [ \"/prepare-cgroup-v2.sh\" ]\n"
  },
  {
    "path": "EMERITUS.md",
    "content": "## Emeritus ##\n\nWe would like to acknowledge previous runc maintainers and their huge\ncontributions to our collective success:\n\n * Alexander Morozov (@lk4d4)\n * Andrei Vagin (@avagin)\n * Rohit Jnagal (@rjnagal)\n * Victor Marmol (@vmarmol)\n * Michael Crosby (@crosbymichael)\n * Daniel, Dao Quang Minh (@dqminh)\n * Qiang Huang (@hqhq)\n\nWe thank these members for their service to the OCI community.\n"
  },
  {
    "path": "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 2014 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       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": "MAINTAINERS",
    "content": "Mrunal Patel <mpatel@redhat.com> (@mrunalp)\nAleksa Sarai <cyphar@cyphar.com> (@cyphar)\nAkihiro Suda <akihiro.suda.cz@hco.ntt.co.jp> (@AkihiroSuda)\nKir Kolyshkin <kolyshkin@gmail.com> (@kolyshkin)\nSebastiaan van Stijn <github@gone.nl> (@thaJeztah)\nLi Fu Bang <lifubang@acmcoder.com> (@lifubang)\nRodrigo Campos <rodrigo@sdfg.com.ar> (@rata)\n"
  },
  {
    "path": "MAINTAINERS_GUIDE.md",
    "content": "## Introduction\n\nDear maintainer. Thank you for investing the time and energy to help\nmake runc as useful as possible. Maintaining a project is difficult,\nsometimes unrewarding work.  Sure, you will get to contribute cool\nfeatures to the project. But most of your time will be spent reviewing,\ncleaning up, documenting, answering questions, justifying design\ndecisions - while everyone has all the fun! But remember - the quality\nof the maintainers work is what distinguishes the good projects from the\ngreat.  So please be proud of your work, even the unglamorous parts,\nand encourage a culture of appreciation and respect for *every* aspect\nof improving the project - not just the hot new features.\n\nThis document is a manual for maintainers old and new. It explains what\nis expected of maintainers, how they should work, and what tools are\navailable to them.\n\nThis is a living document - if you see something out of date or missing,\nspeak up!\n\n## What are a maintainer's responsibility?\n\nIt is every maintainer's responsibility to:\n\n* 1) Expose a clear roadmap for improving their component.\n* 2) Deliver prompt feedback and decisions on pull requests.\n* 3) Be available to anyone with questions, bug reports, criticism etc.\n  on their component. This includes IRC and GitHub issues and pull requests.\n* 4) Make sure their component respects the philosophy, design and\n  roadmap of the project.\n\n## How are decisions made?\n\nShort answer: with pull requests to the runc repository.\n\nrunc is an open-source project with an open design philosophy. This\nmeans that the repository is the source of truth for EVERY aspect of the\nproject, including its philosophy, design, roadmap and APIs. *If it's\npart of the project, it's in the repo. It's in the repo, it's part of\nthe project.*\n\nAs a result, all decisions can be expressed as changes to the\nrepository. An implementation change is a change to the source code. An\nAPI change is a change to the API specification. A philosophy change is\na change to the philosophy manifesto. And so on.\n\nAll decisions affecting runc, 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: Accept (`LGTM`) or refuse a pull request. The relevant maintainers do\nthis (see below \"Who decides what?\")\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## Who decides what?\n\nAll decisions are pull requests, and the relevant maintainers make\ndecisions by accepting or refusing the pull request. Review and acceptance\nby anyone is denoted by adding a comment in the pull request: `LGTM`.\nHowever, only currently listed `MAINTAINERS` are counted towards the required\ntwo LGTMs.\n\nOverall the maintainer system works because of mutual respect across the\nmaintainers of the project.  The maintainers trust one another to make decisions\nin the best interests of the project.  Sometimes maintainers can disagree and\nthis is part of a healthy project to represent the point of views of various people.\n\n\n### How are maintainers added?\n\nThe best maintainers have a vested interest in the project.  Maintainers\nare first and foremost contributors that have shown they are committed to\nthe long term success of the project.  Contributors wanting to become\nmaintainers are expected to be deeply involved in contributing code,\npull request review, and triage of issues in the project for more than two 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.  The\nfinal vote to add a new maintainer should be approved by over 66% of the current\nmaintainers. The voting period is five business days on the Pull Request\nto add the new maintainer.\n\n\n### What is expected of maintainers?\n\nPart of a healthy project is to have active maintainers to support the community\nin contributions and perform tasks to keep the project running.  Maintainers are\nexpected to be able to respond in a timely manner if their help is required on specific\nissues where they are pinged.  Being a maintainer is a time consuming commitment and should\nnot be taken lightly.\n\nWhen a maintainer is unable to perform the required duties they can be removed with\na vote by 66% of the current maintainers.\nThe voting period is ten business days.  Issues related to a maintainer's performance should\nbe discussed with them among the other maintainers so that they are not surprised by\na pull request removing them.\n"
  },
  {
    "path": "Makefile",
    "content": "SHELL = /bin/bash\n\nCONTAINER_ENGINE := docker\nGO ?= go\n\nPREFIX ?= /usr/local\nBINDIR := $(PREFIX)/sbin\nMANDIR := $(PREFIX)/share/man\n\nGIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null)\nGIT_BRANCH_CLEAN := $(shell echo $(GIT_BRANCH) | sed -e \"s/[^[:alnum:]]/-/g\")\nRUNC_IMAGE := runc_dev$(if $(GIT_BRANCH_CLEAN),:$(GIT_BRANCH_CLEAN))\nPROJECT := github.com/opencontainers/runc\nBUILDTAGS := seccomp urfave_cli_no_docs libpathrs\n# Tags prefixed with - in RUNC_BUILDTAGS are removed from BUILDTAGS; others are added.\nRUNC_BUILDTAGS ?=\nBUILDTAGS_REMOVE := $(patsubst -%,%,$(filter -%,$(RUNC_BUILDTAGS)))\nBUILDTAGS_ADD    := $(filter-out -%,$(RUNC_BUILDTAGS))\nBUILDTAGS := $(filter-out $(BUILDTAGS_REMOVE),$(BUILDTAGS)) $(BUILDTAGS_ADD)\n# TODO: remove EXTRA_BUILDTAGS for runc 1.6.\nifdef EXTRA_BUILDTAGS\n  $(warning EXTRA_BUILDTAGS is deprecated; use RUNC_BUILDTAGS instead)\n  BUILDTAGS += $(EXTRA_BUILDTAGS)\nendif\n\nCOMMIT := $(shell git describe --dirty --long --always)\nEXTRA_VERSION :=\nLDFLAGS_COMMON := -X main.gitCommit=$(COMMIT) \\\n\t\t  $(if $(strip $(EXTRA_VERSION)),-X main.extraVersion=$(EXTRA_VERSION),)\n\nGOARCH := $(shell $(GO) env GOARCH)\n\n# -trimpath may be required on some platforms to create reproducible builds\n# on the other hand, it does strip out build information, like -ldflags, which\n# some tools use to infer the version, in the absence of go information,\n# which happens when you use `go build`.\n# This enables someone to override by doing `make runc TRIMPATH= ` etc.\nTRIMPATH := -trimpath\n\nGO_BUILDMODE :=\n# Enable dynamic PIE executables on supported platforms.\nifneq (,$(filter $(GOARCH),386 amd64 arm arm64 loong64 ppc64le riscv64 s390x))\n\tifeq (,$(findstring -race,$(EXTRA_FLAGS)))\n\t\tGO_BUILDMODE := \"-buildmode=pie\"\n\tendif\nendif\nGO_BUILD := $(GO) build $(TRIMPATH) $(GO_BUILDMODE) \\\n\t$(EXTRA_FLAGS) -tags \"$(BUILDTAGS)\" \\\n\t-ldflags \"$(LDFLAGS_COMMON) $(EXTRA_LDFLAGS)\"\n\nGO_BUILDMODE_STATIC :=\nLDFLAGS_STATIC := -extldflags -static\n# Enable static PIE executables on supported platforms.\n# This (among the other things) requires libc support (rcrt1.o), which seems\n# to be available only for arm64 and amd64 (Debian Bullseye).\nifneq (,$(filter $(GOARCH),arm64 amd64))\n\tifeq (,$(findstring -race,$(EXTRA_FLAGS)))\n\t\tGO_BUILDMODE_STATIC := -buildmode=pie\n\t\tLDFLAGS_STATIC := -linkmode external -extldflags -static-pie\n\tendif\nendif\n# Enable static PIE binaries on supported platforms.\nGO_BUILD_STATIC := $(GO) build $(TRIMPATH) $(GO_BUILDMODE_STATIC) \\\n\t$(EXTRA_FLAGS) -tags \"$(BUILDTAGS) netgo osusergo\" \\\n\t-ldflags \"$(LDFLAGS_COMMON) $(LDFLAGS_STATIC) $(EXTRA_LDFLAGS)\"\n\nGPG_KEYID ?= cyphar@cyphar.com\n\n# Some targets need cgo, which is disabled by default when cross compiling.\n# Enable cgo explicitly for those.\n# Both runc and libcontainer/integration need libcontainer/nsenter.\nrunc static localunittest: export CGO_ENABLED=1\n# seccompagent needs libseccomp (when seccomp build tag is set).\nifneq (,$(filter $(BUILDTAGS),seccomp))\nseccompagent: export CGO_ENABLED=1\nendif\n\n.DEFAULT: runc\n\n.PHONY: runc\nrunc: runc-bin\n\n.PHONY: runc-bin\nrunc-bin:\n\t$(GO_BUILD) -o runc .\n\n.PHONY: all\nall: runc\n\nTESTBINDIR := tests/cmd/_bin\n$(TESTBINDIR):\n\tmkdir $(TESTBINDIR)\n\nTESTBINS := recvtty sd-helper seccompagent fs-idmap pidfd-kill remap-rootfs key_label\n.PHONY: test-binaries $(TESTBINS)\ntest-binaries: $(TESTBINS)\n$(TESTBINS): $(TESTBINDIR)\n\t$(GO_BUILD) -o $(TESTBINDIR) ./tests/cmd/$@\n\n.PHONY: clean\nclean:\n\trm -f runc runc-*\n\trm -fr $(TESTBINDIR)\n\tsudo rm -rf release\n\trm -rf man/man8\n\n.PHONY: static\nstatic: static-bin\n\n.PHONY: static-bin\nstatic-bin:\n\t$(GO_BUILD_STATIC) -o runc .\n\n.PHONY: releaseall\nreleaseall: RELEASE_ARGS := \"-a 386 -a amd64 -a arm64 -a armel -a armhf -a ppc64le -a riscv64 -a s390x\"\nreleaseall: release\n\n.PHONY: release\nrelease: runcimage\n\t$(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \\\n\t\t--rm -v $(CURDIR):/go/src/$(PROJECT) \\\n\t\t-e RELEASE_ARGS=$(RELEASE_ARGS) \\\n\t\t$(RUNC_IMAGE) make localrelease\n\tscript/release_sign.sh -S $(GPG_KEYID)\n\n.PHONY: localrelease\nlocalrelease: verify-changelog\n\tscript/release_build.sh $(RELEASE_ARGS)\n\n.PHONY: dbuild\ndbuild: runcimage\n\t$(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \\\n\t\t--privileged --rm \\\n\t\t-v $(CURDIR):/go/src/$(PROJECT) \\\n\t\t$(RUNC_IMAGE) make clean runc test-binaries\n\n.PHONY: lint\nlint:\n\tgolangci-lint run ./...\n\n.PHONY: man\nman:\n\tman/md2man-all.sh\n\n.PHONY: runcimage\nruncimage:\n\t$(CONTAINER_ENGINE) build $(CONTAINER_ENGINE_BUILD_FLAGS) -t $(RUNC_IMAGE) .\n\n.PHONY: test\ntest: unittest integration rootlessintegration\n\n.PHONY: localtest\nlocaltest: localunittest localintegration localrootlessintegration\n\n.PHONY: unittest\nunittest: runcimage\n\t$(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \\\n\t\t-t --privileged --rm \\\n\t\t-v /lib/modules:/lib/modules:ro \\\n\t\t-v $(CURDIR):/go/src/$(PROJECT) \\\n\t\t$(RUNC_IMAGE) make localunittest TESTFLAGS=\"$(TESTFLAGS)\"\n\n.PHONY: localunittest\nlocalunittest: test-binaries\n\t$(GO) test -timeout 3m -tags \"$(BUILDTAGS)\" $(TESTFLAGS) -v ./...\n\n.PHONY: integration\nintegration: runcimage\n\t$(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \\\n\t\t-t --privileged --rm \\\n\t\t-v /lib/modules:/lib/modules:ro \\\n\t\t-v $(CURDIR):/go/src/$(PROJECT) \\\n\t\t$(RUNC_IMAGE) make localintegration TESTPATH=\"$(TESTPATH)\"\n\n.PHONY: localintegration\nlocalintegration: runc test-binaries\n\tbats -t tests/integration$(TESTPATH)\n\n.PHONY: rootlessintegration\nrootlessintegration: runcimage\n\t$(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \\\n\t\t-t --privileged --rm \\\n\t\t-v $(CURDIR):/go/src/$(PROJECT) \\\n\t\t-e ROOTLESS_TESTPATH \\\n\t\t$(RUNC_IMAGE) make localrootlessintegration\n\n.PHONY: localrootlessintegration\nlocalrootlessintegration: runc test-binaries\n\ttests/rootless.sh\n\n.PHONY: shell\nshell: runcimage\n\t$(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \\\n\t\t-ti --privileged --rm \\\n\t\t-v $(CURDIR):/go/src/$(PROJECT) \\\n\t\t$(RUNC_IMAGE) bash\n\n.PHONY: install\ninstall:\n\tinstall -D -m0755 runc $(DESTDIR)$(BINDIR)/runc\n\n.PHONY: install-bash\ninstall-bash:\n\tinstall -D -m0644 contrib/completions/bash/runc $(DESTDIR)$(PREFIX)/share/bash-completion/completions/runc\n\n.PHONY: install-man\ninstall-man: man\n\tinstall -d -m 755 $(DESTDIR)$(MANDIR)/man8\n\tinstall -D -m 644 man/man8/*.8 $(DESTDIR)$(MANDIR)/man8\n\n.PHONY: cfmt\ncfmt: C_SRC=$(shell git ls-files '*.c' | grep -v '^vendor/')\ncfmt:\n\tindent -linux -l120 -il0 -ppi2 -cp1 -sar -T size_t -T jmp_buf $(C_SRC)\n\n.PHONY: shellcheck\nshellcheck:\n\tshellcheck tests/integration/*.bats tests/integration/*.sh \\\n\t\ttests/integration/*.bash tests/*.sh \\\n\t\tman/*.sh script/*\n\t# TODO: add shellcheck for more sh files (contrib/completions/bash/runc).\n\n.PHONY: shfmt\nshfmt:\n\t$(CONTAINER_ENGINE) run $(CONTAINER_ENGINE_RUN_FLAGS) \\\n\t\t--rm -v $(CURDIR):/src -w /src \\\n\t\tmvdan/shfmt:v3.11.0 -d -w .\n\n.PHONY: localshfmt\nlocalshfmt:\n\tshfmt -d -w .\n\n.PHONY: vendor\nvendor:\n\t$(GO) mod tidy\n\t$(GO) mod vendor\n\t$(GO) mod verify\n\n.PHONY: verify-changelog\nverify-changelog:\n\t# No space at EOL.\n\t! grep -n '\\s$$' CHANGELOG.md\n\t# Period before issue/PR references.\n\t! grep -n '[0-9a-zA-Z][^.] (#[1-9][0-9, #]*)$$' CHANGELOG.md\n\n.PHONY: verify-dependencies\nverify-dependencies: vendor\n\t@test -z \"$$(git status --porcelain -- go.mod go.sum vendor/)\" \\\n\t\t|| (echo -e \"git status:\\n $$(git status -- go.mod go.sum vendor/)\\nerror: vendor/, go.mod and/or go.sum not up to date. Run \\\"make vendor\\\" to update\"; exit 1) \\\n\t\t&& echo \"all vendor files are up to date.\"\n\n.PHONY: validate-keyring\nvalidate-keyring:\n\tscript/keyring_validate.sh\n"
  },
  {
    "path": "NOTICE",
    "content": "runc\n\nCopyright 2012-2015 Docker, Inc.\n\nThis product includes software developed at Docker, Inc. (http://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 http://www.bis.doc.gov\n\nSee also http://www.apache.org/dev/crypto.html and/or seek legal counsel.\n"
  },
  {
    "path": "PRINCIPLES.md",
    "content": "# runc principles\n\nIn the design and development of runc and libcontainer we try to follow these principles:\n\n(Work in progress)\n\n* Don't try to replace every tool. Instead, be an ingredient to improve them.\n* Less code is better.\n* Fewer components are better. Do you really need to add one more class?\n* 50 lines of straightforward, readable code is better than 10 lines of magic that nobody can understand.\n* Don't do later what you can do now. \"//TODO: refactor\" is not acceptable in new code.\n* When hesitating between two options, choose the one that is easier to reverse.\n* \"No\" is temporary; \"Yes\" is forever. If you're not sure about a new feature, say no. You can change your mind later.\n* Containers must be portable to the greatest possible number of machines. Be suspicious of any change which makes machines less interchangeable.\n* The fewer moving parts in a container, the better.\n* Don't merge it unless you document it.\n* Don't document it unless you can keep it up-to-date.\n* Don't merge it unless you test it!\n* Everyone's problem is slightly different. Focus on the part that is the same for everyone, and solve that.\n"
  },
  {
    "path": "README.md",
    "content": "# runc\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/opencontainers/runc)](https://goreportcard.com/report/github.com/opencontainers/runc)\n[![Go Reference](https://pkg.go.dev/badge/github.com/opencontainers/runc.svg)](https://pkg.go.dev/github.com/opencontainers/runc)\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/588/badge)](https://bestpractices.coreinfrastructure.org/projects/588)\n[![gha/validate](https://github.com/opencontainers/runc/workflows/validate/badge.svg)](https://github.com/opencontainers/runc/actions?query=workflow%3Avalidate)\n[![gha/ci](https://github.com/opencontainers/runc/workflows/ci/badge.svg)](https://github.com/opencontainers/runc/actions?query=workflow%3Aci)\n[![CirrusCI](https://api.cirrus-ci.com/github/opencontainers/runc.svg)](https://cirrus-ci.com/github/opencontainers/runc)\n\n## Introduction\n\n`runc` is a CLI tool for spawning and running containers on Linux according to the OCI specification.\n\n## Releases\n\nYou can find official releases of `runc` on the [release](https://github.com/opencontainers/runc/releases) page.\n\nAll releases are signed by one of the keys listed in the [`runc.keyring` file in the root of this repository](runc.keyring).\n\n## Security\n\nThe reporting process and disclosure communications are outlined [here](https://github.com/opencontainers/org/blob/master/SECURITY.md).\n\n### Security Audit\nA third party security audit was performed by Cure53, you can see the full report [here](https://github.com/opencontainers/runc/blob/master/docs/Security-Audit.pdf).\n\n## Building\n\n`runc` only supports Linux. See the header of [`go.mod`](./go.mod) for the minimally required Go version.\n\n### Pre-Requisites\n\n#### Utilities and Libraries\n\nIn addition to Go, building `runc` requires multiple utilities and libraries to be installed on your system.\n\nOn Ubuntu/Debian, you can install the required dependencies with:\n\n```bash\napt update && apt install -y make gcc linux-libc-dev libseccomp-dev pkg-config git\n```\n\nOn CentOS/Fedora, you can install the required dependencies with:\n\n```bash\nyum install -y make gcc kernel-headers libseccomp-devel pkg-config git\n```\n\nOn Alpine Linux, you can install the required dependencies with:\n\n```bash\napk --update add bash make gcc libseccomp-dev musl-dev linux-headers git\n```\n\nThe following dependencies are optional:\n\n* `libseccomp` - only required if you enable seccomp support; to disable, see [Build Tags](#build-tags)\n\n### Build\n\n```bash\n# create a 'github.com/opencontainers' in your GOPATH/src\ncd github.com/opencontainers\ngit clone https://github.com/opencontainers/runc\ncd runc\n\nmake\nsudo make install\n```\n\nYou can also use `go get` to install to your `GOPATH`, assuming that you have a `github.com` parent folder already created under `src`:\n\n```bash\ngo get github.com/opencontainers/runc\ncd $GOPATH/src/github.com/opencontainers/runc\nmake\nsudo make install\n```\n\n`runc` will be installed to `/usr/local/sbin/runc` on your system.\n\n#### Version string customization\n\nYou can see the runc version by running `runc --version`. You can append a custom string to the\nversion using the `EXTRA_VERSION` make variable when building, e.g.:\n\n```bash\nmake EXTRA_VERSION=\"+build-1\"\n```\n\nBear in mind to include some separator for readability.\n\n#### Build Tags\n\n`runc` supports optional build tags for compiling support of various features,\nwith some of them enabled by default in the top-level Makefile.\n\nThe following build tags are currently recognized:\n\n| Build Tag     | Feature                               | Set by Default | Dependencies        |\n|---------------|---------------------------------------|----------------|---------------------|\n| `seccomp`     | Syscall filtering using `libseccomp`. | yes            | `libseccomp`        |\n| `libpathrs`   | Use [`libpathrs`][] for path safety.  | yes            | [`libpathrs`][]     |\n| `runc_nocriu` | **Disables** runc checkpoint/restore. | no             | `criu`              |\n\n[`libpathrs`]: https://github.com/cyphar/libpathrs\n\nTo add or remove build tags from the default set, use the `RUNC_BUILDTAGS`\nmake or shell variable. Tags prefixed with `-` are removed from the default set;\nothers are added. For example:\n\n```bash\n# Add runc_nocriu and remove seccomp tag.\nmake RUNC_BUILDTAGS=\"runc_nocriu -seccomp\"\n```\n\nThe following build tags were used earlier, but are now obsoleted:\n - **runc_nodmz** (since runc v1.2.1 runc dmz binary is dropped)\n - **nokmem** (since runc v1.0.0-rc94 kernel memory settings are ignored)\n - **apparmor** (since runc v1.0.0-rc93 the feature is always enabled)\n - **selinux**  (since runc v1.0.0-rc93 the feature is always enabled)\n\n### Running the test suite\n\n`runc` currently supports running its test suite via Docker.\nTo run the suite just type `make test`.\n\n```bash\nmake test\n```\n\nThere are additional make targets for running the tests outside of a container but this is not recommended as the tests are written with the expectation that they can write and remove anywhere.\n\nYou can run a specific test case by setting the `TESTFLAGS` variable.\n\n```bash\n# make test TESTFLAGS=\"-run=SomeTestFunction\"\n```\n\nYou can run a specific integration test by setting the `TESTPATH` variable.\n\n```bash\n# make test TESTPATH=\"/checkpoint.bats\"\n```\n\nYou can run a specific rootless integration test by setting the `ROOTLESS_TESTPATH` variable.\n\n```bash\n# make test ROOTLESS_TESTPATH=\"/checkpoint.bats\"\n```\n\nYou can run a test using your container engine's flags by setting `CONTAINER_ENGINE_BUILD_FLAGS` and `CONTAINER_ENGINE_RUN_FLAGS` variables.\n\n```bash\n# make test CONTAINER_ENGINE_BUILD_FLAGS=\"--build-arg http_proxy=http://yourproxy/\" CONTAINER_ENGINE_RUN_FLAGS=\"-e http_proxy=http://yourproxy/\"\n```\n\n### Go Dependencies Management\n\n`runc` uses [Go Modules](https://github.com/golang/go/wiki/Modules) for dependencies management.\nPlease refer to [Go Modules](https://github.com/golang/go/wiki/Modules) for how to add or update\nnew dependencies.\n\n```\n# Update vendored dependencies\nmake vendor\n# Verify all dependencies\nmake verify-dependencies\n```\n\n## Using runc\n\nPlease note that runc is a low level tool not designed with an end user\nin mind. It is mostly employed by other higher level container software.\n\nTherefore, unless there is some specific use case that prevents the use\nof tools like Docker or Podman, it is not recommended to use runc directly.\n\nIf you still want to use runc, here's how.\n\n### Creating an OCI Bundle\n\nIn order to use runc you must have your container in the format of an OCI bundle.\nIf you have Docker installed you can use its `export` method to acquire a root filesystem from an existing Docker container.\n\n```bash\n# create the top most bundle directory\nmkdir /mycontainer\ncd /mycontainer\n\n# create the rootfs directory\nmkdir rootfs\n\n# export busybox via Docker into the rootfs directory\ndocker export $(docker create busybox) | tar -C rootfs -xvf -\n```\n\nAfter a root filesystem is populated you just generate a spec in the format of a `config.json` file inside your bundle.\n`runc` provides a `spec` command to generate a base template spec that you are then able to edit.\nTo find features and documentation for fields in the spec please refer to the [specs](https://github.com/opencontainers/runtime-spec) repository.\n\n```bash\nrunc spec\n```\n\n### Running Containers\n\nAssuming you have an OCI bundle from the previous step you can execute the container in two different ways.\n\nThe first way is to use the convenience command `run` that will handle creating, starting, and deleting the container after it exits.\n\n```bash\n# run as root\ncd /mycontainer\nrunc run mycontainerid\n```\n\nIf you used the unmodified `runc spec` template this should give you a `sh` session inside the container.\n\nThe second way to start a container is using the specs lifecycle operations.\nThis gives you more power over how the container is created and managed while it is running.\nThis will also launch the container in the background so you will have to edit\nthe `config.json` to remove the `terminal` setting for the simple examples\nbelow (see more details about [runc terminal handling](docs/terminals.md)).\nYour process field in the `config.json` should look like this below with `\"terminal\": false` and `\"args\": [\"sleep\", \"5\"]`.\n\n\n```json\n        \"process\": {\n                \"terminal\": false,\n                \"user\": {\n                        \"uid\": 0,\n                        \"gid\": 0\n                },\n                \"args\": [\n                        \"sleep\", \"5\"\n                ],\n                \"env\": [\n                        \"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n                        \"TERM=xterm\"\n                ],\n                \"cwd\": \"/\",\n                \"capabilities\": {\n                        \"bounding\": [\n                                \"CAP_AUDIT_WRITE\",\n                                \"CAP_KILL\",\n                                \"CAP_NET_BIND_SERVICE\"\n                        ],\n                        \"effective\": [\n                                \"CAP_AUDIT_WRITE\",\n                                \"CAP_KILL\",\n                                \"CAP_NET_BIND_SERVICE\"\n                        ],\n                        \"inheritable\": [\n                                \"CAP_AUDIT_WRITE\",\n                                \"CAP_KILL\",\n                                \"CAP_NET_BIND_SERVICE\"\n                        ],\n                        \"permitted\": [\n                                \"CAP_AUDIT_WRITE\",\n                                \"CAP_KILL\",\n                                \"CAP_NET_BIND_SERVICE\"\n                        ],\n                        \"ambient\": [\n                                \"CAP_AUDIT_WRITE\",\n                                \"CAP_KILL\",\n                                \"CAP_NET_BIND_SERVICE\"\n                        ]\n                },\n                \"rlimits\": [\n                        {\n                                \"type\": \"RLIMIT_NOFILE\",\n                                \"hard\": 1024,\n                                \"soft\": 1024\n                        }\n                ],\n                \"noNewPrivileges\": true\n        },\n```\n\nNow we can go through the lifecycle operations in your shell.\n\n\n```bash\n# run as root\ncd /mycontainer\nrunc create mycontainerid\n\n# view the container is created and in the \"created\" state\nrunc list\n\n# start the process inside the container\nrunc start mycontainerid\n\n# after 5 seconds view that the container has exited and is now in the stopped state\nrunc list\n\n# now delete the container\nrunc delete mycontainerid\n```\n\nThis allows higher level systems to augment the containers creation logic with setup of various settings after the container is created and/or before it is deleted. For example, the container's network stack is commonly set up after `create` but before `start`.\n\n#### Rootless containers\n`runc` has the ability to run containers without root privileges. This is called `rootless`. You need to pass some parameters to `runc` in order to run rootless containers. See below and compare with the previous version.\n\n**Note:** In order to use this feature, \"User Namespaces\" must be compiled and enabled in your kernel. There are various ways to do this depending on your distribution:\n- Confirm `CONFIG_USER_NS=y` is set in your kernel configuration (normally found in `/proc/config.gz`)\n- Arch/Debian: `echo 1 > /proc/sys/kernel/unprivileged_userns_clone`\n- RHEL/CentOS 7: `echo 28633 > /proc/sys/user/max_user_namespaces`\n\nRun the following commands as an ordinary user:\n```bash\n# Same as the first example\nmkdir ~/mycontainer\ncd ~/mycontainer\nmkdir rootfs\ndocker export $(docker create busybox) | tar -C rootfs -xvf -\n\n# The --rootless parameter instructs runc spec to generate a configuration for a rootless container, which will allow you to run the container as a non-root user.\nrunc spec --rootless\n\n# The --root parameter tells runc where to store the container state. It must be writable by the user.\nrunc --root /tmp/runc run mycontainerid\n```\n\n#### Supervisors\n\n`runc` can be used with process supervisors and init systems to ensure that containers are restarted when they exit.\nAn example systemd unit file looks something like this.\n\n```systemd\n[Unit]\nDescription=Start My Container\n\n[Service]\nType=forking\nExecStart=/usr/local/sbin/runc run -d --pid-file /run/mycontainerid.pid mycontainerid\nExecStopPost=/usr/local/sbin/runc delete mycontainerid\nWorkingDirectory=/mycontainer\nPIDFile=/run/mycontainerid.pid\n\n[Install]\nWantedBy=multi-user.target\n```\n\n## More documentation\n\n* [Spec conformance](./docs/spec-conformance.md)\n* [cgroup v2](./docs/cgroup-v2.md)\n* [Checkpoint and restore](./docs/checkpoint-restore.md)\n* [systemd cgroup driver](./docs/systemd.md)\n* [Terminals and standard IO](./docs/terminals.md)\n* [Experimental features](./docs/experimental.md)\n* [Deprecated features](./docs/deprecated.md)\n\n## License\n\nThe code and docs are released under the [Apache 2.0 license](LICENSE).\n"
  },
  {
    "path": "RELEASES.md",
    "content": "## Release Cadence and Support Policy ##\n\nThis document describes the release cadence for runc as well as outlining the\nsupport policy for old release branches. Historically, despite runc being the\nmost widely used Linux container runtime, our release schedule has been very\nad-hoc and has resulted in very long periods of time between minor releases,\ncausing issues for downstreams that wanted particular features.\n\n### Semantic Versioning ###\n\nrunc uses [Semantic Versioning][semver] for releases. However, our\ncompatibility policy only applies to the runc binary. We will make a\nbest-effort attempt to reduce the impact to users that make direct use of the\nGo packages prefixed with `github.com/opencontainers/runc`, but we do not\nformally guarantee that API compatibility will be preserved.\n\n[semver]: https://semver.org/spec/v2.0.0.html\n\n### Release Cadence ###\n\n[new-issue]: https://github.com/opencontainers/runc/issues/new/choose\n\nrunc follows a 6-month minor version release schedule, with the aim of releases\nhappening at the end of April and October each year.\n\nThe first release candidate will be created 2 months before the planned release\ndate (i.e. the end of February and August, respectively), at which point the\nrelease branch will be created and will enter a feature freeze. No new features\nwill be merged into the release branch, and large features being developed\nimmediately before the feature freeze may have their merge delayed so as to not\nbe included in the next release. Most releases will have two or three release\ncandidates, but this may change depending on the circumstances of the release\nat the time.\n\nIf a last-minute critical issue is discovered, the release may be delayed.\nHowever, the following release will still go according to schedule (except in\nthe exceptionally unlikely scenario where the delay is 4-6 months long, in\nwhich case the next release is moved forward to when the subsequent release\nwould have been).\n\nHere is a hypothetical release timeline to see how this works in practice:\n\n| Date       | Release      | Notes |\n| ---------- | ------------ | ----- |\n| 200X-02-28 | `1.3.0-rc.1` | `release-1.3` branch created, feature freeze. |\n| 200X-03-12 | `1.3.0-rc.2` | |\n| 200X-03-25 | `1.3.0-rc.3` | |\n| 200X-04-30 | `1.3.0`      | `1.3` release published. |\n| 200X-05-10 | `1.3.1`      | |\n| 200X-06-21 | `1.3.2`      | |\n| 200X-06-25 | `1.3.3`      | |\n| 200X-07-02 | `1.3.4`      | |\n| 200X-08-28 | `1.4.0-rc.1` | `release-1.4` branch created, feature freeze. |\n| 200X-09-15 | `1.3.5`      | Patch releases in other release branches have no impact on the new release branch. |\n| 200X-09-21 | `1.4.0-rc.2` | |\n| 200X-10-31 | `1.4.0`      | `1.4` release published. |\n| 200X-11-10 | `1.4.1`      | |\n| 200X-12-25 | `1.4.2`      | |\n\n(And so on for the next year.)\n\n### Support Policy ###\n\nIn order to ease the transition between minor runc releases, previous minor\nrelease branches of runc will be maintained for some time after the newest\nminor release is published. In the following text, `latest` refers to the\nlatest minor (non-release-candidate) runc release published; `latest-1` is the\nprevious minor release branch; and `latest-2` is the minor release branch\nbefore `latest-1`. For example, if `latest` is `1.4.0` then `latest-1` is\n`1.3.z` and `latest-2` is `1.2.z`.\n\n * Once `latest` is released, new features will no longer be merged into\n   `latest` and only bug and security fixes will be backported, though we will\n   be fairly liberal with what kinds of bugs will considered candidates for\n   backporting.\n\n * `latest-1` will only receive security fixes and significant bug fixes (what\n   bug fixes are \"significant\" are down to the maintainer's judgement, but\n   maintainers should err on the side of reducing the number of backports at\n   this stage). At this stage, users of `latest-1` are encouraged to start\n   planning the migration to the `latest` release of runc (as well as reporting\n   any issues they may find).\n\n * `latest-2` will only receive high severity security fixes (i.e. CVEs that\n   have been assessed as having a CVSS score of 7.0 or higher). At this stage,\n   users still using `latest-2` would be strongly encouraged to upgrade to\n   either `latest` or `latest-1`.\n\n * Any older releases will no longer receive any updates, and users are\n   encouraged to upgrade in the strongest possible terms, as they will not\n   receive any security fixes regardless of severity or impact.\n\nThis policy only applies to minor releases of runc with major version `1`. If\nthere is a runc `2.0` release in the future, this document will be updated to\nreflect the necessary changes to the support policy for the `1.y` major release\nbranch of runc.\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security\n\nWhen reporting a security issue, do not create an issue or file a pull request on GitHub.\nThe reporting process and disclosure communications are outlined [here](https://github.com/opencontainers/org/blob/master/SECURITY.md).\n"
  },
  {
    "path": "VERSION",
    "content": "1.5.0-rc.1+dev\n"
  },
  {
    "path": "checkpoint.go",
    "content": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\n\t\"github.com/moby/sys/userns\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\t\"github.com/sirupsen/logrus\"\n\t\"github.com/urfave/cli\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n)\n\nvar checkpointCommand = cli.Command{\n\tName:  \"checkpoint\",\n\tUsage: \"checkpoint a running container\",\n\tArgsUsage: `<container-id>\n\nWhere \"<container-id>\" is the name for the instance of the container to be\ncheckpointed.`,\n\tDescription: `The checkpoint command saves the state of the container instance.`,\n\tFlags: []cli.Flag{\n\t\tcli.StringFlag{Name: \"image-path\", Value: \"\", Usage: \"path for saving criu image files\"},\n\t\tcli.StringFlag{Name: \"work-path\", Value: \"\", Usage: \"path for saving work files and logs\"},\n\t\tcli.StringFlag{Name: \"parent-path\", Value: \"\", Usage: \"path for previous criu image files in pre-dump\"},\n\t\tcli.BoolFlag{Name: \"leave-running\", Usage: \"leave the process running after checkpointing\"},\n\t\tcli.BoolFlag{Name: \"tcp-established\", Usage: \"allow open tcp connections\"},\n\t\tcli.BoolFlag{Name: \"tcp-skip-in-flight\", Usage: \"skip in-flight tcp connections\"},\n\t\tcli.BoolFlag{Name: \"link-remap\", Usage: \"allow one to link unlinked files back when possible\"},\n\t\tcli.BoolFlag{Name: \"ext-unix-sk\", Usage: \"allow external unix sockets\"},\n\t\tcli.BoolFlag{Name: \"shell-job\", Usage: \"allow shell jobs\"},\n\t\tcli.BoolFlag{Name: \"lazy-pages\", Usage: \"use userfaultfd to lazily restore memory pages\"},\n\t\tcli.IntFlag{Name: \"status-fd\", Value: -1, Usage: \"criu writes \\\\0 to this FD once lazy-pages is ready\"},\n\t\tcli.StringFlag{Name: \"page-server\", Value: \"\", Usage: \"ADDRESS:PORT of the page server\"},\n\t\tcli.BoolFlag{Name: \"file-locks\", Usage: \"handle file locks, for safety\"},\n\t\tcli.BoolFlag{Name: \"pre-dump\", Usage: \"dump container's memory information only, leave the container running after this\"},\n\t\tcli.StringFlag{Name: \"manage-cgroups-mode\", Value: \"\", Usage: \"cgroups mode: soft|full|strict|ignore (default: soft)\"},\n\t\tcli.StringSliceFlag{Name: \"empty-ns\", Usage: \"create a namespace, but don't restore its properties\"},\n\t\tcli.BoolFlag{Name: \"auto-dedup\", Usage: \"enable auto deduplication of memory images\"},\n\t},\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 1, exactArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// XXX: Currently this is untested with rootless containers.\n\t\tif os.Geteuid() != 0 || userns.RunningInUserNS() {\n\t\t\tlogrus.Warn(\"runc checkpoint is untested with rootless containers\")\n\t\t}\n\n\t\tcontainer, err := getContainer(context)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstatus, err := container.Status()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif status == libcontainer.Created || status == libcontainer.Stopped {\n\t\t\treturn fmt.Errorf(\"Container cannot be checkpointed in %s state\", status.String())\n\t\t}\n\t\toptions, err := criuOptions(context)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\terr = container.Checkpoint(options)\n\t\tif err == nil && !options.LeaveRunning && !options.PreDump {\n\t\t\t// Destroy the container unless we tell CRIU to keep it.\n\t\t\tif err := container.Destroy(); err != nil {\n\t\t\t\tlogrus.Warn(err)\n\t\t\t}\n\t\t}\n\t\treturn err\n\t},\n}\n\nfunc prepareImagePaths(context *cli.Context) (string, string, error) {\n\timagePath := context.String(\"image-path\")\n\tif imagePath == \"\" {\n\t\timagePath = getDefaultImagePath()\n\t}\n\n\tif err := os.MkdirAll(imagePath, 0o600); err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\n\tparentPath := context.String(\"parent-path\")\n\tif parentPath == \"\" {\n\t\treturn imagePath, parentPath, nil\n\t}\n\n\tif filepath.IsAbs(parentPath) {\n\t\treturn \"\", \"\", errors.New(\"--parent-path must be relative\")\n\t}\n\n\trealParent := filepath.Join(imagePath, parentPath)\n\tfi, err := os.Stat(realParent)\n\tif err == nil && !fi.IsDir() {\n\t\terr = &os.PathError{Path: realParent, Err: unix.ENOTDIR}\n\t}\n\n\tif err != nil {\n\t\treturn \"\", \"\", fmt.Errorf(\"invalid --parent-path: %w\", err)\n\t}\n\n\treturn imagePath, parentPath, nil\n}\n\nfunc criuOptions(context *cli.Context) (*libcontainer.CriuOpts, error) {\n\timagePath, parentPath, err := prepareImagePaths(context)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\topts := &libcontainer.CriuOpts{\n\t\tImagesDirectory:         imagePath,\n\t\tWorkDirectory:           context.String(\"work-path\"),\n\t\tParentImage:             parentPath,\n\t\tLeaveRunning:            context.Bool(\"leave-running\"),\n\t\tTcpEstablished:          context.Bool(\"tcp-established\"),\n\t\tTcpSkipInFlight:         context.Bool(\"tcp-skip-in-flight\"),\n\t\tLinkRemap:               context.Bool(\"link-remap\"),\n\t\tExternalUnixConnections: context.Bool(\"ext-unix-sk\"),\n\t\tShellJob:                context.Bool(\"shell-job\"),\n\t\tFileLocks:               context.Bool(\"file-locks\"),\n\t\tPreDump:                 context.Bool(\"pre-dump\"),\n\t\tAutoDedup:               context.Bool(\"auto-dedup\"),\n\t\tLazyPages:               context.Bool(\"lazy-pages\"),\n\t\tStatusFd:                context.Int(\"status-fd\"),\n\t\tLsmProfile:              context.String(\"lsm-profile\"),\n\t\tLsmMountContext:         context.String(\"lsm-mount-context\"),\n\t\tManageCgroupsMode:       context.String(\"manage-cgroups-mode\"),\n\t}\n\n\t// CRIU options below may or may not be set.\n\n\tif psOpt := context.String(\"page-server\"); psOpt != \"\" {\n\t\taddress, port, err := net.SplitHostPort(psOpt)\n\n\t\tif err != nil || address == \"\" || port == \"\" {\n\t\t\treturn nil, errors.New(\"Use --page-server ADDRESS:PORT to specify page server\")\n\t\t}\n\t\tportInt, err := strconv.Atoi(port)\n\t\tif err != nil {\n\t\t\treturn nil, errors.New(\"Invalid port number\")\n\t\t}\n\t\topts.PageServer = libcontainer.CriuPageServerInfo{\n\t\t\tAddress: address,\n\t\t\tPort:    int32(portInt),\n\t\t}\n\t}\n\n\t// runc doesn't manage network devices and their configuration.\n\tnsmask := unix.CLONE_NEWNET\n\n\tif context.IsSet(\"empty-ns\") {\n\t\tnamespaceMapping := map[specs.LinuxNamespaceType]int{\n\t\t\tspecs.NetworkNamespace: unix.CLONE_NEWNET,\n\t\t}\n\n\t\tfor _, ns := range context.StringSlice(\"empty-ns\") {\n\t\t\tf, exists := namespaceMapping[specs.LinuxNamespaceType(ns)]\n\t\t\tif !exists {\n\t\t\t\treturn nil, fmt.Errorf(\"namespace %q is not supported\", ns)\n\t\t\t}\n\t\t\tnsmask |= f\n\t\t}\n\t}\n\n\topts.EmptyNs = uint32(nsmask)\n\n\treturn opts, nil\n}\n"
  },
  {
    "path": "contrib/completions/bash/runc",
    "content": "#!/bin/bash\n#\n# bash completion file for runc command\n#\n# This script provides completion of:\n#  - commands and their options\n#  - filepaths\n#\n# To enable the completions either:\n#  - place this file in /usr/share/bash-completion/completions\n#  or\n#  - copy this file to e.g. ~/.runc-completion.sh and add the line\n#    below to your .bashrc after bash completion features are loaded\n#    . ~/.runc-completion.sh\n#\n# Configuration:\n#\n\n# Note for developers:\n# Please arrange options sorted alphabetically by long name with the short\n# options immediately following their corresponding long form.\n# This order should be applied to lists, alternatives and code blocks.\n\n__runc_previous_extglob_setting=$(shopt -p extglob)\nshopt -s extglob\n\n__runc_list_all() {\n\tCOMPREPLY=($(compgen -W \"$(runc list -q)\" -- $cur))\n}\n\n__runc_pos_first_nonflag() {\n\tlocal argument_flags=$1\n\n\tlocal counter=$((${subcommand_pos:-${command_pos}} + 1))\n\twhile [ $counter -le $cword ]; do\n\t\tif [ -n \"$argument_flags\" ] && eval \"case '${words[$counter]}' in $argument_flags) true ;; *) false ;; esac\"; then\n\t\t\t((counter++))\n\t\telse\n\t\t\tcase \"${words[$counter]}\" in\n\t\t\t-*) ;;\n\t\t\t*)\n\t\t\t\tbreak\n\t\t\t\t;;\n\t\t\tesac\n\t\tfi\n\t\t((counter++))\n\tdone\n\n\techo $counter\n}\n\n# Transforms a multiline list of strings into a single line string\n# with the words separated by \"|\".\n# This is used to prepare arguments to __runc_pos_first_nonflag().\n__runc_to_alternatives() {\n\tlocal parts=($1)\n\tlocal IFS='|'\n\techo \"${parts[*]}\"\n}\n\n# Transforms a multiline list of options into an extglob pattern\n# suitable for use in case statements.\n__runc_to_extglob() {\n\tlocal extglob=$(__runc_to_alternatives \"$1\")\n\techo \"@($extglob)\"\n}\n\n# Subcommand processing.\n# Locates the first occurrence of any of the subcommands contained in the\n# first argument. In case of a match, calls the corresponding completion\n# function and returns 0.\n# If no match is found, 1 is returned. The calling function can then\n# continue processing its completion.\n#\n# TODO if the preceding command has options that accept arguments and an\n# argument is equal to one of the subcommands, this is falsely detected as\n# a match.\n__runc_subcommands() {\n\tlocal subcommands=\"$1\"\n\n\tlocal counter=$(($command_pos + 1))\n\twhile [ $counter -lt $cword ]; do\n\t\tcase \"${words[$counter]}\" in\n\t\t$(__runc_to_extglob \"$subcommands\"))\n\t\t\tsubcommand_pos=$counter\n\t\t\tlocal subcommand=${words[$counter]}\n\t\t\tlocal completions_func=_runc_${command}_${subcommand}\n\t\t\tdeclare -F $completions_func >/dev/null && $completions_func\n\t\t\treturn 0\n\t\t\t;;\n\t\tesac\n\t\t((counter++))\n\tdone\n\treturn 1\n}\n\n# List all Signals\n__runc_list_signals() {\n\tCOMPREPLY=($(compgen -W \"$(for i in $(kill -l | xargs); do echo $i; done | grep SIG)\"))\n}\n\n# suppress trailing whitespace\n__runc_nospace() {\n\t# compopt is not available in ancient bash versions\n\ttype compopt &>/dev/null && compopt -o nospace\n}\n\n# The list of capabilities is defined in types.go, ALL was added manually.\n__runc_complete_capabilities() {\n\tCOMPREPLY=($(compgen -W \"\n\t\tALL\n\t\tAUDIT_CONTROL\n\t\tAUDIT_WRITE\n\t\tAUDIT_READ\n\t\tBLOCK_SUSPEND\n\t\tBPF\n\t\tCHECKPOINT_RESTORE\n\t\tCHOWN\n\t\tDAC_OVERRIDE\n\t\tDAC_READ_SEARCH\n\t\tFOWNER\n\t\tFSETID\n\t\tIPC_LOCK\n\t\tIPC_OWNER\n\t\tKILL\n\t\tLEASE\n\t\tLINUX_IMMUTABLE\n\t\tMAC_ADMIN\n\t\tMAC_OVERRIDE\n\t\tMKNOD\n\t\tNET_ADMIN\n\t\tNET_BIND_SERVICE\n\t\tNET_BROADCAST\n\t\tNET_RAW\n\t\tPERFMON\n\t\tSETFCAP\n\t\tSETGID\n\t\tSETPCAP\n\t\tSETUID\n\t\tSYS_ADMIN\n\t\tSYS_BOOT\n\t\tSYS_CHROOT\n\t\tSYSLOG\n\t\tSYS_MODULE\n\t\tSYS_NICE\n\t\tSYS_PACCT\n\t\tSYS_PTRACE\n\t\tSYS_RAWIO\n\t\tSYS_RESOURCE\n\t\tSYS_TIME\n\t\tSYS_TTY_CONFIG\n\t\tWAKE_ALARM\n\t\" -- \"$cur\"))\n}\n\n_runc_exec() {\n\tlocal boolean_options=\"\n\t   --help\n\t   --no-new-privs\n\t   --tty, -t\n\t   --detach, -d\n\t\"\n\n\tlocal options_with_args=\"\n\t   --console-socket\n\t   --cwd\n\t   --env, -e\n\t   --user, -u\n\t   --additional-gids, -g\n\t   --process, -p\n\t   --pid-file\n\t   --process-label\n\t   --apparmor\n\t   --cap, -c\n\t   --preserve-fds\n\t   --ignore-paused\n\t\"\n\n\tlocal all_options=\"$options_with_args $boolean_options\"\n\n\tcase \"$prev\" in\n\t--cap | -c)\n\t\t__runc_complete_capabilities\n\t\treturn\n\t\t;;\n\n\t--console-socket | --cwd | --process | --apparmor)\n\t\tcase \"$cur\" in\n\t\t*:*) ;; # TODO somehow do _filedir for stuff inside the image, if it's already specified (which is also somewhat difficult to determine)\n\t\t'')\n\t\t\tCOMPREPLY=($(compgen -W '/' -- \"$cur\"))\n\t\t\t__runc_nospace\n\t\t\t;;\n\t\t/*)\n\t\t\t_filedir\n\t\t\t__runc_nospace\n\t\t\t;;\n\t\tesac\n\t\treturn\n\t\t;;\n\t--env | -e)\n\t\tCOMPREPLY=($(compgen -e -- \"$cur\"))\n\t\t__runc_nospace\n\t\treturn\n\t\t;;\n\t$(__runc_to_extglob \"$options_with_args\"))\n\t\treturn\n\t\t;;\n\tesac\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$all_options\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\t__runc_list_all\n\t\t;;\n\tesac\n}\n\n# global options that may appear after the runc command\n_runc_runc() {\n\tlocal boolean_options=\"\n\t\t$global_boolean_options\n\t\t--help\n\t\t--version -v\n\t\t--debug\n\t\t--systemd-cgroup\n\t\"\n\tlocal options_with_args=\"\n\t\t--log\n\t\t--log-format\n\t\t--root\n\t\t--rootless\n\t\"\n\n\tcase \"$prev\" in\n\t--log | --root)\n\t\tcase \"$cur\" in\n\t\t*:*) ;; # TODO somehow do _filedir for stuff inside the image, if it's already specified (which is also somewhat difficult to determine)\n\t\t'')\n\t\t\tCOMPREPLY=($(compgen -W '/' -- \"$cur\"))\n\t\t\t__runc_nospace\n\t\t\t;;\n\t\t*)\n\t\t\t_filedir\n\t\t\t__runc_nospace\n\t\t\t;;\n\t\tesac\n\t\treturn\n\t\t;;\n\n\t--log-format)\n\t\tCOMPREPLY=($(compgen -W 'text json' -- \"$cur\"))\n\t\treturn\n\t\t;;\n\n\t$(__runc_to_extglob \"$options_with_args\"))\n\t\treturn\n\t\t;;\n\tesac\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\tlocal counter=$(__runc_pos_first_nonflag $(__runc_to_extglob \"$options_with_args\"))\n\t\tif [ $cword -eq $counter ]; then\n\t\t\tCOMPREPLY=($(compgen -W \"${commands[*]} help\" -- \"$cur\"))\n\t\tfi\n\t\t;;\n\tesac\n}\n\n_runc_pause() {\n\tlocal boolean_options=\"\n\t   --help\n\t   -h\n\t\"\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\t__runc_list_all\n\t\t;;\n\tesac\n}\n\n_runc_ps() {\n\tlocal boolean_options=\"\n\t   --help\n\t   -h\n\t\"\n\tlocal options_with_args=\"\n\t   --format, -f\n\t\"\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\t__runc_list_all\n\t\t;;\n\tesac\n}\n\n_runc_delete() {\n\tlocal boolean_options=\"\n\t   --help\n\t   -h\n\t   --format, -f\n\t\"\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\t__runc_list_all\n\t\t;;\n\tesac\n}\n\n_runc_kill() {\n\tlocal boolean_options=\"\n\t   --help\n\t   -h\n          --all\n          -a\n\t\"\n\n\tcase \"$prev\" in\n\t\"kill\")\n\t\t__runc_list_all\n\t\treturn\n\t\t;;\n\t*)\n\t\t__runc_list_signals\n\t\treturn\n\t\t;;\n\tesac\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\t__runc_list_all\n\t\t;;\n\tesac\n}\n\n_runc_events() {\n\tlocal boolean_options=\"\n\t   --help\n\t   --stats\n\t\"\n\n\tlocal options_with_args=\"\n\t   --interval\n\t\"\n\n\tcase \"$prev\" in\n\t$(__runc_to_extglob \"$options_with_args\"))\n\t\treturn\n\t\t;;\n\tesac\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\t__runc_list_all\n\t\t;;\n\tesac\n}\n\n_runc_list() {\n\tlocal boolean_options=\"\n\t   --help\n\t   --quiet\n\t   -q\n\t\"\n\n\tlocal options_with_args=\"\n\t   --format\n\t   -f\n\t\"\n\n\tcase \"$prev\" in\n\t--format | -f)\n\t\tCOMPREPLY=($(compgen -W 'text json' -- \"$cur\"))\n\t\treturn\n\t\t;;\n\n\t$(__runc_to_extglob \"$options_with_args\"))\n\t\treturn\n\t\t;;\n\tesac\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\tlocal counter=$(__runc_pos_first_nonflag $(__runc_to_extglob \"$options_with_args\"))\n\t\t;;\n\tesac\n}\n\n_runc_spec() {\n\tlocal boolean_options=\"\n\t   --help\n\t   --rootless\n\t\"\n\n\tlocal options_with_args=\"\n\t   --bundle\n\t   -b\n\t\"\n\n\tcase \"$prev\" in\n\t--bundle | -b)\n\t\tcase \"$cur\" in\n\t\t'')\n\t\t\tCOMPREPLY=($(compgen -W '/' -- \"$cur\"))\n\t\t\t__runc_nospace\n\t\t\t;;\n\t\t/*)\n\t\t\t_filedir\n\t\t\t__runc_nospace\n\t\t\t;;\n\t\tesac\n\t\treturn\n\t\t;;\n\n\t$(__runc_to_extglob \"$options_with_args\"))\n\t\treturn\n\t\t;;\n\tesac\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\tlocal counter=$(__runc_pos_first_nonflag $(__runc_to_extglob \"$options_with_args\"))\n\t\t;;\n\tesac\n}\n\n_runc_run() {\n\tlocal boolean_options=\"\n\t   --help\n\t   --detatch\n\t   -d\n\t   --no-subreaper\n\t   --no-pivot\n\t   --no-new-keyring\n\t\"\n\n\tlocal options_with_args=\"\n\t   --bundle\n\t   -b\n\t   --console-socket\n\t   --pid-file\n\t   --preserve-fds\n\t\"\n\n\tcase \"$prev\" in\n\t--bundle | -b | --console-socket | --pid-file)\n\t\tcase \"$cur\" in\n\t\t'')\n\t\t\tCOMPREPLY=($(compgen -W '/' -- \"$cur\"))\n\t\t\t__runc_nospace\n\t\t\t;;\n\t\t/*)\n\t\t\t_filedir\n\t\t\t__runc_nospace\n\t\t\t;;\n\t\tesac\n\t\treturn\n\t\t;;\n\n\t$(__runc_to_extglob \"$options_with_args\"))\n\t\treturn\n\t\t;;\n\tesac\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\t__runc_list_all\n\t\t;;\n\tesac\n}\n\n_runc_checkpoint() {\n\tlocal boolean_options=\"\n\t   --help\n\t   -h\n\t   --leave-running\n\t   --tcp-established\n\t   --tcp-skip-in-flight\n\t   --link-remap\n\t   --ext-unix-sk\n\t   --shell-job\n\t   --lazy-pages\n\t   --file-locks\n\t   --pre-dump\n\t   --auto-dedup\n\t\"\n\n\tlocal options_with_args=\"\n\t   --image-path\n\t   --work-path\n\t   --parent-path\n\t   --status-fd\n\t   --page-server\n\t   --manage-cgroups-mode\n\t   --empty-ns\n\t\"\n\n\tcase \"$prev\" in\n\t--page-server) ;;\n\n\t--manage-cgroups-mode)\n\t\tCOMPREPLY=($(compgen -W \"soft full strict\" -- \"$cur\"))\n\t\treturn\n\t\t;;\n\n\t--image-path | --work-path | --parent-path)\n\t\tcase \"$cur\" in\n\t\t*:*) ;; # TODO somehow do _filedir for stuff inside the image, if it's already specified (which is also somewhat difficult to determine)\n\t\t'')\n\t\t\tCOMPREPLY=($(compgen -W '/' -- \"$cur\"))\n\t\t\t__runc_nospace\n\t\t\t;;\n\t\t*)\n\t\t\t_filedir\n\t\t\t__runc_nospace\n\t\t\t;;\n\t\tesac\n\t\treturn\n\t\t;;\n\n\t$(__runc_to_extglob \"$options_with_args\"))\n\t\treturn\n\t\t;;\n\tesac\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\t__runc_list_all\n\t\t;;\n\tesac\n}\n_runc_create() {\n\tlocal boolean_options=\"\n\t   --help\n\t   --no-pivot\n\t   --no-new-keyring\n\t\"\n\n\tlocal options_with_args=\"\n\t   --bundle\n\t   -b\n\t   --console-socket\n\t   --pid-file\n\t   --preserve-fds\n\t\"\n\tcase \"$prev\" in\n\t--bundle | -b | --console-socket | --pid-file)\n\t\tcase \"$cur\" in\n\t\t'')\n\t\t\tCOMPREPLY=($(compgen -W '/' -- \"$cur\"))\n\t\t\t__runc_nospace\n\t\t\t;;\n\t\t/*)\n\t\t\t_filedir\n\t\t\t__runc_nospace\n\t\t\t;;\n\t\tesac\n\t\treturn\n\t\t;;\n\n\t$(__runc_to_extglob \"$options_with_args\"))\n\t\treturn\n\t\t;;\n\tesac\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\t__runc_list_all\n\t\t;;\n\tesac\n\n}\n\n_runc_help() {\n\tlocal counter=$(__runc_pos_first_nonflag)\n\tif [ $cword -eq $counter ]; then\n\t\tCOMPREPLY=($(compgen -W \"${commands[*]}\" -- \"$cur\"))\n\tfi\n}\n\n_runc_restore() {\n\tlocal boolean_options=\"\n\t   --help\n\t   --tcp-established\n\t   --ext-unix-sk\n\t   --shell-job\n\t   --file-locks\n\t   --detach\n\t   -d\n\t   --no-subreaper\n\t   --no-pivot\n\t   --auto-dedup\n\t   --lazy-pages\n\t\"\n\n\tlocal options_with_args=\"\n\t   -b\n\t   --bundle\n\t   --image-path\n\t   --work-path\n\t   --manage-cgroups-mode\n\t   --pid-file\n\t   --empty-ns\n\t\"\n\n\tlocal all_options=\"$options_with_args $boolean_options\"\n\n\tcase \"$prev\" in\n\t--manage-cgroups-mode)\n\t\tCOMPREPLY=($(compgen -W \"soft full strict\" -- \"$cur\"))\n\t\treturn\n\t\t;;\n\n\t--pid-file | --image-path | --work-path | --bundle | -b)\n\t\tcase \"$cur\" in\n\t\t*:*) ;; # TODO somehow do _filedir for stuff inside the image, if it's already specified (which is also somewhat difficult to determine)\n\t\t'')\n\t\t\tCOMPREPLY=($(compgen -W '/' -- \"$cur\"))\n\t\t\t__runc_nospace\n\t\t\t;;\n\t\t/*)\n\t\t\t_filedir\n\t\t\t__runc_nospace\n\t\t\t;;\n\t\tesac\n\t\treturn\n\t\t;;\n\n\t$(__runc_to_extglob \"$options_with_args\"))\n\t\treturn\n\t\t;;\n\tesac\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$all_options\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\t__runc_list_all\n\t\t;;\n\tesac\n}\n\n_runc_resume() {\n\tlocal boolean_options=\"\n\t   --help\n\t   -h\n\t\"\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\t__runc_list_all\n\t\t;;\n\tesac\n}\n\n_runc_state() {\n\tlocal boolean_options=\"\n\t   --help\n\t   -h\n\t\"\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\t__runc_list_all\n\t\t;;\n\tesac\n}\n_runc_start() {\n\tlocal boolean_options=\"\n\t   --help\n\t   -h\n\t\"\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\t__runc_list_all\n\t\t;;\n\tesac\n}\n_runc_update() {\n\tlocal boolean_options=\"\n\t   --help\n\t\"\n\n\tlocal options_with_args=\"\n\t   --blkio-weight\n\t   --cpu-period\n\t   --cpu-quota\n\t   --cpu-burst\n\t   --cpu-rt-period\n\t   --cpu-rt-runtime\n\t   --cpu-share\n\t   --cpuset-cpus\n\t   --cpuset-mems\n\t   --memory\n\t   --memory-reservation\n\t   --memory-swap\n\t   --pids-limit\n\t   --l3-cache-schema\n\t   --mem-bw-schema\n\t   --cpu-idle\n\t\"\n\n\tcase \"$prev\" in\n\t$(__runc_to_extglob \"$options_with_args\"))\n\t\treturn\n\t\t;;\n\tesac\n\n\tcase \"$cur\" in\n\t-*)\n\t\tCOMPREPLY=($(compgen -W \"$boolean_options $options_with_args\" -- \"$cur\"))\n\t\t;;\n\t*)\n\t\t__runc_list_all\n\t\t;;\n\tesac\n}\n\n_runc() {\n\tlocal previous_extglob_setting=$(shopt -p extglob)\n\tshopt -s extglob\n\n\tlocal commands=(\n\t\tcheckpoint\n\t\tcreate\n\t\tdelete\n\t\tevents\n\t\texec\n\t\tkill\n\t\tlist\n\t\tpause\n\t\tps\n\t\trestore\n\t\tresume\n\t\trun\n\t\tspec\n\t\tstart\n\t\tstate\n\t\tupdate\n\t\thelp\n\t\th\n\t)\n\n\t# These options are valid as global options for all client commands\n\t# and valid as command options for `runc daemon`\n\tlocal global_boolean_options=\"\n\t\t--help -h\n\t\t--version -v\n\t\"\n\n\tCOMPREPLY=()\n\tlocal cur prev words cword\n\t_get_comp_words_by_ref -n : cur prev words cword\n\n\tlocal command='runc' command_pos=0 subcommand_pos\n\tlocal counter=1\n\twhile [ $counter -lt $cword ]; do\n\t\tcase \"${words[$counter]}\" in\n\t\t-*) ;;\n\t\t=)\n\t\t\t((counter++))\n\t\t\t;;\n\t\t*)\n\t\t\tcommand=\"${words[$counter]}\"\n\t\t\tcommand_pos=$counter\n\t\t\tbreak\n\t\t\t;;\n\t\tesac\n\t\t((counter++))\n\tdone\n\n\tlocal completions_func=_runc_${command}\n\tdeclare -F $completions_func >/dev/null && $completions_func\n\n\teval \"$previous_extglob_setting\"\n\treturn 0\n}\n\neval \"$__runc_previous_extglob_setting\"\nunset __runc_previous_extglob_setting\n\ncomplete -F _runc runc\n"
  },
  {
    "path": "create.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/urfave/cli\"\n)\n\nvar createCommand = cli.Command{\n\tName:  \"create\",\n\tUsage: \"create a container\",\n\tArgsUsage: `<container-id>\n\nWhere \"<container-id>\" is your name for the instance of the container that you\nare starting. The name you provide for the container instance must be unique on\nyour host.`,\n\tDescription: `The create command creates an instance of a container for a bundle. The bundle\nis a directory with a specification file named \"` + specConfig + `\" and a root\nfilesystem.\n\nThe specification file includes an args parameter. The args parameter is used\nto specify command(s) that get run when the container is started. To change the\ncommand(s) that get executed on start, edit the args parameter of the spec. See\n\"runc spec --help\" for more explanation.`,\n\tFlags: []cli.Flag{\n\t\tcli.StringFlag{\n\t\t\tName:  \"bundle, b\",\n\t\t\tValue: \"\",\n\t\t\tUsage: `path to the root of the bundle directory, defaults to the current directory`,\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"console-socket\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"path to an AF_UNIX socket which will receive a file descriptor referencing the master end of the console's pseudoterminal\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"pidfd-socket\",\n\t\t\tUsage: \"path to an AF_UNIX socket which will receive a file descriptor referencing the init process\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"pid-file\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"specify the file to write the process id to\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"no-pivot\",\n\t\t\tUsage: \"do not use pivot root to jail process inside rootfs.  This should be used whenever the rootfs is on top of a ramdisk\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"no-new-keyring\",\n\t\t\tUsage: \"do not create a new session keyring for the container.  This will cause the container to inherit the calling processes session key\",\n\t\t},\n\t\tcli.IntFlag{\n\t\t\tName:  \"preserve-fds\",\n\t\t\tUsage: \"Pass N additional file descriptors to the container (stdio + $LISTEN_FDS + N in total)\",\n\t\t},\n\t},\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 1, exactArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstatus, err := startContainer(context, CT_ACT_CREATE, nil)\n\t\tif err == nil {\n\t\t\t// exit with the container's exit status so any external supervisor\n\t\t\t// is notified of the exit with the correct exit status.\n\t\t\tos.Exit(status)\n\t\t}\n\t\treturn fmt.Errorf(\"runc create failed: %w\", err)\n\t},\n}\n"
  },
  {
    "path": "delete.go",
    "content": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"time\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/urfave/cli\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc killContainer(container *libcontainer.Container) error {\n\t_ = container.Signal(unix.SIGKILL)\n\tfor range 100 {\n\t\ttime.Sleep(100 * time.Millisecond)\n\t\tif err := container.Signal(unix.Signal(0)); err != nil {\n\t\t\treturn container.Destroy()\n\t\t}\n\t}\n\treturn errors.New(\"container init still running\")\n}\n\nvar deleteCommand = cli.Command{\n\tName:  \"delete\",\n\tUsage: \"delete any resources held by the container often used with detached container\",\n\tArgsUsage: `<container-id>\n\nWhere \"<container-id>\" is the name for the instance of the container.\n\nEXAMPLE:\nFor example, if the container id is \"ubuntu01\" and runc list currently shows the\nstatus of \"ubuntu01\" as \"stopped\" the following will delete resources held for\n\"ubuntu01\" removing \"ubuntu01\" from the runc list of containers:\n\n       # runc delete ubuntu01`,\n\tFlags: []cli.Flag{\n\t\tcli.BoolFlag{\n\t\t\tName:  \"force, f\",\n\t\t\tUsage: \"Forcibly deletes the container if it is still running (uses SIGKILL)\",\n\t\t},\n\t},\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 1, exactArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tid := context.Args().First()\n\t\tforce := context.Bool(\"force\")\n\t\tcontainer, err := getContainer(context)\n\t\tif err != nil {\n\t\t\tif errors.Is(err, libcontainer.ErrNotExist) {\n\t\t\t\t// if there was an aborted start or something of the sort then the container's directory could exist but\n\t\t\t\t// libcontainer does not see it because the state.json file inside that directory was never created.\n\t\t\t\tpath := filepath.Join(context.GlobalString(\"root\"), id)\n\t\t\t\tif e := os.RemoveAll(path); e != nil {\n\t\t\t\t\tfmt.Fprintf(os.Stderr, \"remove %s: %v\\n\", path, e)\n\t\t\t\t}\n\t\t\t\tif force {\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\t// When --force is given, we kill all container processes and\n\t\t// then destroy the container. This is done even for a stopped\n\t\t// container, because (in case it does not have its own PID\n\t\t// namespace) there may be some leftover processes in the\n\t\t// container's cgroup.\n\t\tif force {\n\t\t\treturn killContainer(container)\n\t\t}\n\t\ts, err := container.Status()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch s {\n\t\tcase libcontainer.Stopped:\n\t\t\treturn container.Destroy()\n\t\tcase libcontainer.Created:\n\t\t\treturn killContainer(container)\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"cannot delete container %s that is not stopped: %s\", id, s)\n\t\t}\n\t},\n}\n"
  },
  {
    "path": "docs/cgroup-v2.md",
    "content": "# cgroup v2\n\nrunc fully supports cgroup v2 (unified mode) since v1.0.0-rc93.\n\nTo use cgroup v2, you might need to change the configuration of the host init system.\nThe following distributions are known to use cgroup v2 by default:\n<!-- the list should be kept in sync with https://github.com/rootless-containers/rootlesscontaine.rs/blob/master/content/getting-started/common/cgroup2.md -->\n- Fedora (since 31)\n- Arch Linux (since April 2021)\n- openSUSE Tumbleweed (since c. 2021)\n- Debian GNU/Linux (since 11)\n- Ubuntu (since 21.10)\n- RHEL and RHEL-like distributions (since 9)\n\nOn other systemd-based distros, cgroup v2 can be enabled by adding `systemd.unified_cgroup_hierarchy=1` to the kernel cmdline.\n\n## Am I using cgroup v2?\n\nYes if `/sys/fs/cgroup/cgroup.controllers` is present.\n\n## Host Requirements\n### Kernel\n* Recommended version: 5.2 or later\n* Minimum version: 4.15\n\nKernel older than 5.2 is not recommended due to lack of freezer.\n\nNotably, kernel older than 4.15 MUST NOT be used (unless you are running containers with user namespaces), as it lacks support for controlling permissions of devices.\n\n### Systemd\nOn cgroup v2 hosts, it is highly recommended to run runc with the systemd cgroup driver (`runc --systemd-cgroup`), though not mandatory.\n\nThe recommended systemd version is 244 or later. Older systemd does not support delegation of `cpuset` controller.\n\nMake sure you also have the `dbus-user-session` (Debian/Ubuntu) or `dbus-daemon` (CentOS/Fedora) package installed, and that `dbus` is running. On Debian-flavored distros, this can be accomplished like so:\n\n```bash\nsudo apt install -y dbus-user-session\nsystemctl --user start dbus\n```\n\n## Rootless\nOn cgroup v2 hosts, rootless runc can talk to systemd to get cgroup permissions to be delegated.\n\n```bash\nrunc spec --rootless\njq '.linux.cgroupsPath=\"user.slice:runc:foo\"' config.json | sponge config.json\nrunc --systemd-cgroup run foo\n```\n\nThe container processes are executed in a cgroup like `/user.slice/user-$(id -u).slice/user@$(id -u).service/user.slice/runc-foo.scope`.\n\n### Configuring delegation\nTypically, only `memory` and `pids` controllers are delegated to non-root users by default.\n\n```console\n$ cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/user@$(id -u).service/cgroup.controllers\nmemory pids\n```\n\nTo allow delegation of other controllers, you need to change the systemd configuration as follows:\n\n```bash\nsudo mkdir -p /etc/systemd/system/user@.service.d\ncat <<EOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf\n[Service]\nDelegate=cpu cpuset io memory pids\nEOF\nsudo systemctl daemon-reload\n```\n"
  },
  {
    "path": "docs/checkpoint-restore.md",
    "content": "# Checkpoint and Restore #\n\nFor a basic description about checkpointing and restoring containers with\n`runc` please see [runc-checkpoint(8)](../man/runc-checkpoint.8.md) and\n[runc-restore(8)](../man/runc-restore.8.md).\n\n## Checkpoint/Restore Annotations ##\n\nIn addition to specifying options on the command-line like it is described\nin the man-pages (see above), it is also possible to influence CRIU's\nbehaviour using CRIU configuration files. For details about CRIU's\nconfiguration file support please see [CRIU's wiki](https://criu.org/Configuration_files).\n\nIn addition to CRIU's default configuration files `runc` tells CRIU to\nalso evaluate the file `/etc/criu/runc.conf`. Using the annotation\n`org.criu.config` it is, however, possible to change this additional\nCRIU configuration file.\n\nIf the annotation `org.criu.config` is set to an empty string `runc`\nwill not pass any additional configuration file to CRIU. With an empty\nstring it is therefore possible to disable the additional CRIU configuration\nfile. This can be used to make sure that no additional configuration file\nchanges CRIU's behaviour accidentally.\n\nIf the annotation `org.criu.config` is set to a non-empty string `runc` will\npass that string to CRIU to be evaluated as an additional configuration file.\nIf CRIU cannot open this additional configuration file, it will ignore this\nfile and continue.\n\n### Annotation Example to disable additional CRIU configuration file ###\n\n```\n{\n\t\"ociVersion\": \"1.0.0\",\n\t\"annotations\": {\n\t\t\"org.criu.config\": \"\"\n\t},\n\t\"process\": {\n```\n\n### Annotation Example to set a specific CRIU configuration file ###\n\n```\n{\n\t\"ociVersion\": \"1.0.0\",\n\t\"annotations\": {\n\t\t\"org.criu.config\": \"/etc/special-runc-criu-options\"\n\t},\n\t\"process\": {\n```\n"
  },
  {
    "path": "docs/deprecated.md",
    "content": "# Deprecated features\n\nThe following features are deprecated:\n\nFeature                                  | Deprecation  release | Removal release\n---------------------------------------- | -------------------- | ------------------\ncgroup v1                                | v1.4.0               | (May 2029)\n\n<!-- TBD: features that were already deprecated and removed -->\n\n- The latest release in May 2029 may not necessarily support cgroup v1, but there will be at least one maintained branch with the support for cgroup v1.\n"
  },
  {
    "path": "docs/experimental.md",
    "content": "# Experimental features\n\nThe following features were experimental in the past:\n\nFeature                                  | Experimental release | Graduation release\n---------------------------------------- | -------------------- | ------------------\ncgroup v2                                | v1.0.0-rc91          | v1.0.0-rc93\nThe `runc features` command              | v1.1.0               | v1.2.0\nrunc-dmz                                 | v1.2.0-rc1           | Dropped in v1.2.1\n"
  },
  {
    "path": "docs/spec-conformance.md",
    "content": "# Spec conformance\n\nThis branch of runc implements the [OCI Runtime Spec v1.3.0](https://github.com/opencontainers/runtime-spec/tree/v1.3.0)\nfor the `linux` platform.\n\n## Architectures\n\nThe following architectures are supported:\n\nrunc binary  | seccomp\n-------------|-------------------------------------------------------\n`amd64`      | `SCMP_ARCH_X86`, `SCMP_ARCH_X86_64`, `SCMP_ARCH_X32`\n`arm64`      | `SCMP_ARCH_ARM`, `SCMP_ARCH_AARCH64`\n`armel`      | `SCMP_ARCH_ARM`\n`armhf`      | `SCMP_ARCH_ARM`\n`ppc64le`    | `SCMP_ARCH_PPC64LE`\n`riscv64`    | `SCMP_ARCH_RISCV64`\n`s390x`      | `SCMP_ARCH_S390`, `SCMP_ARCH_S390X`\n`loong64`    | `SCMP_ARCH_LOONGARCH64`\n\nThe runc binary might be compilable for i386, big-endian PPC64,\nand several MIPS variants too, but these architectures are not officially supported.\n"
  },
  {
    "path": "docs/systemd.md",
    "content": "## systemd cgroup driver\n\nBy default, runc creates cgroups and sets cgroup limits on its own (this mode\nis known as fs cgroup driver). When `--systemd-cgroup` global option is given\n(as in e.g. `runc --systemd-cgroup run ...`), runc switches to systemd cgroup\ndriver. This document describes its features and peculiarities.\n\n### systemd unit name and placement\n\nWhen creating a container, runc requests systemd (over dbus) to create\na transient unit for the container, and place it into a specified slice.\n\nThe name of the unit and the containing slice is derived from the container\nruntime spec in the following way:\n\n1. If `Linux.CgroupsPath` is set, it is expected to be in the form\n   `[slice]:[prefix]:[name]`.\n\n   Here `slice` is a systemd slice under which the container is placed.\n   If empty, it defaults to `system.slice`, except when cgroup v2 is\n   used and rootless container is created, in which case it defaults\n   to `user.slice`.\n\n   Note that `slice` can contain dashes to denote a sub-slice\n   (e.g. `user-1000.slice` is a correct notation, meaning a subslice\n   of `user.slice`), but it must not contain slashes (e.g.\n   `user.slice/user-1000.slice` is invalid).\n\n   A `slice` of `-` represents a root slice.\n\n   Next, `prefix` and `name` are used to compose the  unit name, which\n   is `<prefix>-<name>.scope`, unless `name` has `.slice` suffix, in\n   which case `prefix` is ignored and the `name` is used as is.\n   The default value for both `prefix` and `name` is empty string.\n\n2. If `Linux.CgroupsPath` is not set or empty, it works the same way as if it\n   would be set to `:runc:<container-id>`. See the description above to see\n   what it transforms to.\n\nAs described above, a unit being created can either be a scope or a slice.\nFor a scope, runc specifies its parent slice via a _Slice=_ systemd property,\nand also sets _Delegate=true_. For a slice, runc specifies a weak dependency on\nthe parent slice via a _Wants=_ property.\n\n### Resource limits\n\nrunc always enables accounting for all controllers, regardless of any limits\nbeing set. This means it unconditionally sets the following properties for the\nsystemd unit being created:\n\n * _CPUAccounting=true_\n * _IOAccounting=true_ (_BlockIOAccounting_ for cgroup v1)\n * _MemoryAccounting=true_\n * _TasksAccounting=true_\n\nThe resource limits of the systemd unit are set by runc by translating the\nruntime spec resources to systemd unit properties.\n\nSuch translation is by no means complete, as there are some cgroup properties\nthat can not be set via systemd.  Therefore, runc systemd cgroup driver is\nbacked by fs driver (in other words, cgroup limits are first set via systemd\nunit properties, and when by writing to cgroupfs files).\n\nThe set of runtime spec resources which is translated by runc to systemd unit\nproperties depends on kernel cgroup version being used (v1 or v2), and on the\nsystemd version being run. If an older systemd version (which does not support\nsome resources) is used, runc do not set those resources.\n\nThe following tables summarize which properties are translated.\n\n#### cgroup v1\n\n| runtime spec resource | systemd property name | min systemd version |\n|-----------------------|-----------------------|---------------------|\n| memory.limit          | MemoryLimit           |                     |\n| cpu.shares            | CPUShares             |                     |\n| blockIO.weight        | BlockIOWeight         |                     |\n| pids.limit            | TasksMax              |                     |\n| cpu.cpus              | AllowedCPUs           | v244                |\n| cpu.mems              | AllowedMemoryNodes    | v244                |\n\n#### cgroup v2\n\n| runtime spec resource   | systemd property name | min systemd version |\n|-------------------------|-----------------------|---------------------|\n| memory.limit            | MemoryMax             |                     |\n| memory.reservation      | MemoryLow             |                     |\n| memory.swap             | MemorySwapMax         |                     |\n| cpu.shares              | CPUWeight             |                     |\n| pids.limit              | TasksMax              |                     |\n| cpu.cpus                | AllowedCPUs           | v244                |\n| cpu.mems                | AllowedMemoryNodes    | v244                |\n| unified.cpu.max         | CPUQuota, CPUQuotaPeriodSec | v242          |\n| unified.cpu.weight      | CPUWeight             |                     |\n| unified.cpu.idle        | CPUWeight             | v252                |\n| unified.cpuset.cpus     | AllowedCPUs           | v244                |\n| unified.cpuset.mems     | AllowedMemoryNodes    | v244                |\n| unified.memory.high     | MemoryHigh            |                     |\n| unified.memory.low      | MemoryLow             |                     |\n| unified.memory.min      | MemoryMin             |                     |\n| unified.memory.max      | MemoryMax             |                     |\n| unified.memory.swap.max | MemorySwapMax         |                     |\n| unified.pids.max        | TasksMax              |                     |\n\nFor documentation on systemd unit resource properties, see\n`systemd.resource-control(5)` man page.\n\n### Auxiliary properties\n\nAuxiliary properties of a systemd unit (as shown by `systemctl show\n<unit-name>` after the container is created) can be set (or overwritten) by\nadding annotations to the container runtime spec (`config.json`).\n\nFor example:\n\n```json\n        \"annotations\": {\n                \"org.systemd.property.TimeoutStopUSec\": \"uint64 123456789\",\n                \"org.systemd.property.CollectMode\":\"'inactive-or-failed'\"\n        },\n```\n\nThe above will set the following properties:\n\n* `TimeoutStopSec` to 2 minutes and 3 seconds;\n* `CollectMode` to \"inactive-or-failed\".\n\nThe values must be in the gvariant text format, as described in\n[gvariant documentation](https://docs.gtk.org/glib/gvariant-text-format.html).\n\nTo find out which type systemd expects for a particular parameter, please\nconsult systemd sources.\n"
  },
  {
    "path": "docs/terminals.md",
    "content": "# Terminals and Standard IO #\n\n*Note that the default configuration of `runc` (foreground, new terminal) is\ngenerally the best option for most users. This document exists to help explain\nwhat the purpose of the different modes is, and to try to steer users away from\ncommon mistakes and misunderstandings.*\n\nIn general, most processes on Unix (and Unix-like) operating systems have 3\nstandard file descriptors provided at the start, collectively referred to as\n\"standard IO\" (`stdio`):\n\n* `0`: standard-in (`stdin`), the input stream into the process\n* `1`: standard-out (`stdout`), the output stream from the process\n* `2`: standard-error (`stderr`), the error stream from the process\n\nWhen creating and running a container via `runc`, it is important to take care\nto structure the `stdio` the new container's process receives. In some ways\ncontainers are just regular processes, while in other ways they're an isolated\nsub-partition of your machine (in a similar sense to a VM). This means that the\nstructure of IO is not as simple as with ordinary programs (which generally\njust use the file descriptors you give them).\n\n## Other File Descriptors ##\n\nBefore we continue, it is important to note that processes can have more file\ndescriptors than just `stdio`. By default in `runc` no other file descriptors\nwill be passed to the spawned container process. If you wish to explicitly pass\nfile descriptors to the container you have to use the `--preserve-fds` option.\nThese ancillary file descriptors don't have any of the strange semantics\ndiscussed further in this document (those only apply to `stdio`) -- they are\npassed untouched by `runc`.\n\nIt should be noted that `--preserve-fds` does not take individual file\ndescriptors to preserve. Instead, it takes how many file descriptors (not\nincluding `stdio` or `LISTEN_FDS`) should be passed to the container. In the\nfollowing example:\n\n```bash\nrunc run --preserve-fds 5 <container>\n```\n\n`runc` will pass the first `5` file descriptors (`3`, `4`, `5`, `6`, and `7` --\nassuming that `LISTEN_FDS` has not been configured) to the container.\n\nIn addition to `--preserve-fds`, `LISTEN_FDS` file descriptors are passed\nautomatically to allow for `systemd`-style socket activation. To extend the\nabove example:\n\n```bash\nLISTEN_PID=$pid_of_runc LISTEN_FDS=3 runc run --preserve-fds 5 <container>\n```\n\n`runc` will now pass the first `8` file descriptors (and it will also pass\n`LISTEN_FDS=3` and `LISTEN_PID=1` to the container). The first `3` (`3`, `4`,\nand `5`) were passed due to `LISTEN_FDS` and the other `5` (`6`, `7`, `8`, `9`,\nand `10`) were passed due to `--preserve-fds`. You should keep this in mind if\nyou use `runc` directly in something like a `systemd` unit file. To disable\nthis `LISTEN_FDS`-style passing just unset `LISTEN_FDS`.\n\n**Be very careful when passing file descriptors to a container process.** Due\nto some Linux kernel (mis)features, a container with access to certain types of\nfile descriptors (such as `O_PATH` descriptors) outside of the container's root\nfile system can use these to break out of the container's pivoted mount\nnamespace. [This has resulted in CVEs in the past.][CVE-2016-9962]\n\n[CVE-2016-9962]: https://nvd.nist.gov/vuln/detail/CVE-2016-9962\n\n## <a name=\"terminal-modes\" /> Terminal Modes ##\n\n`runc` supports two distinct methods for passing `stdio` to the container's\nprimary process:\n\n* [new terminal](#new-terminal) (`terminal: true`)\n* [pass-through](#pass-through) (`terminal: false`)\n\nWhen first using `runc` these two modes will look incredibly similar, but this\ncan be quite deceptive as these different modes have quite different\ncharacteristics.\n\nBy default, `runc spec` will create a configuration that will create a new\nterminal (`terminal: true`). However, if the `terminal: ...` line is not\npresent in `config.json` then pass-through is the default.\n\n*In general we recommend using new terminal, because it means that tools like\n`sudo` will work inside your container. But pass-through can be useful if you\nknow what you're doing, or if you're using `runc` as part of a non-interactive\npipeline.*\n\n### <a name=\"new-terminal\"> New Terminal ###\n\nIn new terminal mode, `runc` will create a brand-new \"console\" (or more\nprecisely, a new pseudo-terminal using the container's namespaced\n`/dev/pts/ptmx`) for your contained process to use as its `stdio`.\n\nWhen you start a process in new terminal mode, `runc` will do the following:\n\n1. Create a new pseudo-terminal.\n2. Pass the slave end to the container's primary process as its `stdio`.\n3. Send the master end to a process to interact with the `stdio` for the\n   container's primary process ([details below](#runc-modes)).\n\nIt should be noted that since a new pseudo-terminal is being used for\ncommunication with the container, some strange properties of pseudo-terminals\nmight surprise you. For instance, by default, all new pseudo-terminals\ntranslate the byte `'\\n'` to the sequence `'\\r\\n'` on both `stdout` and\n`stderr`. In addition there are [a whole range of `ioctls(2)` that can only\ninteract with pseudo-terminal `stdio`][tty_ioctl(4)].\n\n> **NOTE**: In new terminal mode, all three `stdio` file descriptors are the\n> same underlying file. The reason for this is to match how a shell's `stdio`\n> looks to a process (as well as remove race condition issues with having to\n> deal with multiple master pseudo-terminal file descriptors). However this\n> means that it is not really possible to uniquely distinguish between `stdout`\n> and `stderr` from the caller's perspective.\n\n#### Issues\n\nIf you see an error like\n\n```\nopen /dev/tty: no such device or address\n```\n\nfrom runc, it means it can't open a terminal (because there isn't one). This\ncan happen when stdin (and possibly also stdout and stderr) are redirected,\nor in some environments that lack a tty (such as GitHub Actions runners).\n\nThe solution to this is to *not* use a terminal for the container, i.e. have\n`terminal: false` in `config.json`. If the container really needs a terminal\n(some programs require one), you can provide one, using one of the following\nmethods.\n\nOne way is to use `ssh` with the `-tt` flag. The second `t` forces a terminal\nallocation even if there's no local one -- and so it is required when stdin is\nnot a terminal (some `ssh` implementations only look for a terminal on stdin).\n\nAnother way is to run runc under the `script` utility, like this\n\n```bash\nscript -e -c 'runc run <container>'\n```\n\n[tty_ioctl(4)]: https://linux.die.net/man/4/tty_ioctl\n\n### <a name=\"pass-through\"> Pass-Through ###\n\nIf you have already set up some file handles that you wish your contained\nprocess to use as its `stdio`, then you can ask `runc` to pass them through to\nthe contained process (this is not necessarily the same as `--preserve-fds`'s\npassing of file descriptors -- [details below](#runc-modes)). As an example\n(assuming that `terminal: false` is set in `config.json`):\n\n```bash\necho input | runc run some_container > /tmp/log.out 2> /tmp/log.err\n```\n\nHere the container's various `stdio` file descriptors will be substituted with\nthe following:\n\n* `stdin` will be sourced from the `echo input` pipeline.\n* `stdout` will be output into `/tmp/log.out` on the host.\n* `stderr` will be output into `/tmp/log.err` on the host.\n\nIt should be noted that the actual file handles seen inside the container may\nbe different [based on the mode `runc` is being used in](#runc-modes) (for\ninstance, the file referenced by `1` could be `/tmp/log.out` directly or a pipe\nwhich `runc` is using to buffer output, based on the mode). However the net\nresult will be the same in either case. In principle you could use the [new\nterminal mode](#new-terminal) in a pipeline, but the difference will become\nmore clear when you are introduced to [`runc`'s detached mode](#runc-modes).\n\n## <a name=\"runc-modes\" /> `runc` Modes ##\n\n`runc` itself runs in two modes:\n\n* [foreground](#foreground)\n* [detached](#detached)\n\nYou can use either [terminal mode](#terminal-modes) with either `runc` mode.\nHowever, there are considerations that may indicate preference for one mode\nover another. It should be noted that while two types of modes (terminal and\n`runc`) are conceptually independent from each other, you should be aware of\nthe intricacies of which combination you are using.\n\n*In general we recommend using foreground because it's the most\nstraight-forward to use, with the only downside being that you will have a\nlong-running `runc` process. Detached mode is difficult to get right and\ngenerally requires having your own `stdio` management.*\n\n### Foreground ###\n\nThe default (and most straight-forward) mode of `runc`. In this mode, your\n`runc` command remains in the foreground with the container process as a child.\nAll `stdio` is buffered through the foreground `runc` process (irrespective of\nwhich terminal mode you are using). This is conceptually quite similar to\nrunning a normal process interactively in a shell (and if you are using `runc`\nin a shell interactively, this is what you should use).\n\nBecause the `stdio` will be buffered in this mode, some very important\npeculiarities of this mode should be kept in mind:\n\n* With [new terminal mode](#new-terminal), the container will see a\n  pseudo-terminal as its `stdio` (as you might expect). However, the `stdio` of\n  the foreground `runc` process will remain the `stdio` that the process was\n  started with -- and `runc` will copy all `stdio` between its `stdio` and the\n  container's `stdio`. This means that while a new pseudo-terminal has been\n  created, the foreground `runc` process manages it over the lifetime of the\n  container.\n\n* With [pass-through mode](#pass-through), the foreground `runc`'s `stdio` is\n  **not** passed to the container. Instead, the container's `stdio` is a set of\n  pipes which are used to copy data between `runc`'s `stdio` and the\n  container's `stdio`. This means that the container never has direct access to\n  host file descriptors (aside from the pipes created by the container runtime,\n  but that shouldn't be an issue).\n\nThe main drawback of the foreground mode of operation is that it requires a\nlong-running foreground `runc` process. If you kill the foreground `runc`\nprocess then you will no longer have access to the `stdio` of the container\n(and in most cases this will result in the container dying abnormally due to\n`SIGPIPE` or some other error). By extension this means that any bug in the\nlong-running foreground `runc` process (such as a memory leak) or a stray\nOOM-kill sweep could result in your container being killed **through no fault\nof the user**. In addition, there is no way in foreground mode of passing a\nfile descriptor directly to the container process as its `stdio` (like\n`--preserve-fds` does).\n\nThese shortcomings are obviously sub-optimal and are the reason that `runc` has\nan additional mode called \"detached mode\".\n\n### Detached ###\n\nIn contrast to foreground mode, in detached mode there is no long-running\nforeground `runc` process once the container has started. In fact, there is no\nlong-running `runc` process at all. However, this means that it is up to the\ncaller to handle the `stdio` after `runc` has set it up for you. In a shell\nthis means that the `runc` command will exit and control will return to the\nshell, after the container has been set up.\n\nYou can run `runc` in detached mode in one of the following ways:\n\n* `runc run -d ...` which operates similar to `runc run` but is detached.\n* `runc create` followed by `runc start` which is the standard container\n  lifecycle defined by the OCI runtime specification (`runc create` sets up the\n  container completely, waiting for `runc start` to begin execution of user\n  code).\n\nThe main use-case of detached mode is for higher-level tools that want to be\nwrappers around `runc`. By running `runc` in detached mode, those tools have\nfar more control over the container's `stdio` without `runc` getting in the\nway (most wrappers around `runc` like `cri-o` or `containerd` use detached mode\nfor this reason).\n\nUnfortunately using detached mode is a bit more complicated and requires more\ncare than the foreground mode -- mainly because it is now up to the caller to\nhandle the `stdio` of the container.\n\nAnother complication is that the parent process is responsible for acting as\nthe subreaper for the container. In short, you need to call\n`prctl(PR_SET_CHILD_SUBREAPER, 1, ...)` in the parent process and correctly\nhandle the implications of being a subreaper. Failing to do so may result in\nzombie processes being accumulated on your host.\n\nThese tasks are usually performed by a dedicated (and minimal) monitor process\nper-container. For the sake of comparison, other runtimes such as LXC do not\nhave an equivalent detached mode and instead integrate this monitor process\ninto the container runtime itself -- this has several tradeoffs, and runc has\nopted to support delegating the monitoring responsibility to the parent process\nthrough this detached mode.\n\n#### Detached Pass-Through ####\n\nIn detached mode, pass-through actually does what it says on the tin -- the\n`stdio` file descriptors of the `runc` process are passed through (untouched)\nto the container's `stdio`. The purpose of this option is to allow a user to\nset up `stdio` for a container themselves and then force `runc` to just use\ntheir pre-prepared `stdio` (without any pseudo-terminal funny business). *If\nyou don't see why this would be useful, don't use this option.*\n\n**You must be incredibly careful when using detached pass-through (especially\nin a shell).** The reason for this is that by using detached pass-through you\nare passing host file descriptors to the container. In the case of a shell,\nusually your `stdio` is going to be a pseudo-terminal (on your host). A\nmalicious container could take advantage of TTY-specific `ioctls` like\n`TIOCSTI` to fake input into the **host** shell (remember that in detached\nmode, control is returned to your shell and so the terminal you've given the\ncontainer is being read by a shell prompt).\n\nThere are also several other issues with running non-malicious containers in a\nshell with detached pass-through (where you pass your shell's `stdio` to the\ncontainer):\n\n* Output from the container will be interleaved with output from your shell (in\n  a non-deterministic way), without any real way of distinguishing from where a\n  particular piece of output came from.\n\n* Any input to `stdin` will be non-deterministically split and given to either\n  the container or the shell (because both are blocked on a `read(2)` of the\n  same FIFO-style file descriptor).\n\nThey are all related to the fact that there is going to be a race when either\nyour host or the container tries to read from (or write to) `stdio`. This\nproblem is especially obvious when in a shell, where usually the terminal has\nbeen put into raw mode (where each individual key-press should cause `read(2)`\nto return).\n\n> **NOTE**: There is also currently a [known problem][issue-1721] where using\n> detached pass-through will result in the container hanging if the `stdout` or\n> `stderr` is a pipe (though this should be a temporary issue).\n\n[issue-1721]: https://github.com/opencontainers/runc/issues/1721\n\n#### Detached New Terminal ####\n\nWhen creating a new pseudo-terminal in detached mode, and fairly obvious\nproblem appears -- how do we use the new terminal that `runc` created? Unlike\nin pass-through, `runc` has created a new set of file descriptors that need to\nbe used by *something* in order for container communication to work.\n\nThe way this problem is resolved is through the use of Unix domain sockets.\nThere is a feature of Unix sockets called `SCM_RIGHTS` which allows a file\ndescriptor to be sent through a Unix socket to a completely separate process\n(which can then use that file descriptor as though they opened it). When using\n`runc` in detached new terminal mode, this is how a user gets access to the\npseudo-terminal's master file descriptor.\n\nTo this end, there is a new option (which is required if you want to use `runc`\nin detached new terminal mode): `--console-socket`. This option takes the path\nto a Unix domain socket which `runc` will connect to and send the\npseudo-terminal master file descriptor down. The general process for getting\nthe pseudo-terminal master is as follows:\n\n1. Create a Unix domain socket at some path, `$socket_path`.\n2. Call `runc run` or `runc create` with the argument `--console-socket\n   $socket_path`.\n3. Using `recvmsg(2)` retrieve the file descriptor sent using `SCM_RIGHTS` by\n   `runc`.\n4. Now the manager can interact with the `stdio` of the container, using the\n   retrieved pseudo-terminal master.\n\nAfter `runc` exits, the only process with a copy of the pseudo-terminal master\nfile descriptor is whoever read the file descriptor from the socket.\n\n> **NOTE**: Currently `runc` doesn't support abstract socket addresses (due to\n> it not being possible to pass an `argv` with a null-byte as the first\n> character). In the future this may change, but currently you must use a valid\n> path name.\n\nIn order to help users make use of detached new terminal mode, we have provided\na [Go implementation in the `go-runc` bindings][containerd/go-runc.Socket], as\nwell as [a simple client][recvtty].\n\n[containerd/go-runc.Socket]: https://godoc.org/github.com/containerd/go-runc#Socket\n[recvtty]: /tests/cmd/recvtty\n"
  },
  {
    "path": "events.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/opencontainers/runc/libcontainer/intelrdt\"\n\t\"github.com/opencontainers/runc/types\"\n\n\t\"github.com/sirupsen/logrus\"\n\t\"github.com/urfave/cli\"\n)\n\nvar eventsCommand = cli.Command{\n\tName:  \"events\",\n\tUsage: \"display container events such as OOM notifications, cpu, memory, and IO usage statistics\",\n\tArgsUsage: `<container-id>\n\nWhere \"<container-id>\" is the name for the instance of the container.`,\n\tDescription: `The events command displays information about the container. By default the\ninformation is displayed once every 5 seconds.`,\n\tFlags: []cli.Flag{\n\t\tcli.DurationFlag{Name: \"interval\", Value: 5 * time.Second, Usage: \"set the stats collection interval\"},\n\t\tcli.BoolFlag{Name: \"stats\", Usage: \"display the container's stats then exit\"},\n\t},\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 1, exactArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcontainer, err := getContainer(context)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tduration := context.Duration(\"interval\")\n\t\tif duration <= 0 {\n\t\t\treturn errors.New(\"duration interval must be greater than 0\")\n\t\t}\n\t\tstatus, err := container.Status()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif status == libcontainer.Stopped {\n\t\t\treturn fmt.Errorf(\"container with id %s is not running\", container.ID())\n\t\t}\n\t\tvar (\n\t\t\tstats  = make(chan *libcontainer.Stats, 1)\n\t\t\tevents = make(chan *types.Event, 1024)\n\t\t\tgroup  = &sync.WaitGroup{}\n\t\t)\n\t\tgroup.Add(1)\n\t\tgo func() {\n\t\t\tdefer group.Done()\n\t\t\tenc := json.NewEncoder(os.Stdout)\n\t\t\tfor e := range events {\n\t\t\t\tif err := enc.Encode(e); err != nil {\n\t\t\t\t\tlogrus.Error(err)\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\t\tif context.Bool(\"stats\") {\n\t\t\ts, err := container.Stats()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tevents <- &types.Event{Type: \"stats\", ID: container.ID(), Data: convertLibcontainerStats(s)}\n\t\t\tclose(events)\n\t\t\tgroup.Wait()\n\t\t\treturn nil\n\t\t}\n\t\tgo func() {\n\t\t\tfor range time.Tick(context.Duration(\"interval\")) {\n\t\t\t\ts, err := container.Stats()\n\t\t\t\tif err != nil {\n\t\t\t\t\tlogrus.Error(err)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tstats <- s\n\t\t\t}\n\t\t}()\n\t\tn, err := container.NotifyOOM()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase _, ok := <-n:\n\t\t\t\tif ok {\n\t\t\t\t\t// this means an oom event was received, if it is !ok then\n\t\t\t\t\t// the channel was closed because the container stopped and\n\t\t\t\t\t// the cgroups no longer exist.\n\t\t\t\t\tevents <- &types.Event{Type: \"oom\", ID: container.ID()}\n\t\t\t\t} else {\n\t\t\t\t\tn = nil\n\t\t\t\t}\n\t\t\tcase s := <-stats:\n\t\t\t\tevents <- &types.Event{Type: \"stats\", ID: container.ID(), Data: convertLibcontainerStats(s)}\n\t\t\t}\n\t\t\tif n == nil {\n\t\t\t\tclose(events)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tgroup.Wait()\n\t\treturn nil\n\t},\n}\n\nfunc convertLibcontainerStats(ls *libcontainer.Stats) *types.Stats {\n\tcg := ls.CgroupStats\n\tif cg == nil {\n\t\treturn nil\n\t}\n\tvar s types.Stats\n\ts.Pids.Current = cg.PidsStats.Current\n\ts.Pids.Limit = cg.PidsStats.Limit\n\n\ts.CPU.Usage.Kernel = cg.CpuStats.CpuUsage.UsageInKernelmode\n\ts.CPU.Usage.User = cg.CpuStats.CpuUsage.UsageInUsermode\n\ts.CPU.Usage.Total = cg.CpuStats.CpuUsage.TotalUsage\n\ts.CPU.Usage.Percpu = cg.CpuStats.CpuUsage.PercpuUsage\n\ts.CPU.Usage.PercpuKernel = cg.CpuStats.CpuUsage.PercpuUsageInKernelmode\n\ts.CPU.Usage.PercpuUser = cg.CpuStats.CpuUsage.PercpuUsageInUsermode\n\ts.CPU.Throttling.Periods = cg.CpuStats.ThrottlingData.Periods\n\ts.CPU.Throttling.ThrottledPeriods = cg.CpuStats.ThrottlingData.ThrottledPeriods\n\ts.CPU.Throttling.ThrottledTime = cg.CpuStats.ThrottlingData.ThrottledTime\n\ts.CPU.PSI = cg.CpuStats.PSI\n\n\ts.CPUSet = types.CPUSet(cg.CPUSetStats)\n\n\ts.Memory.Cache = cg.MemoryStats.Cache\n\ts.Memory.Kernel = convertMemoryEntry(cg.MemoryStats.KernelUsage)\n\ts.Memory.KernelTCP = convertMemoryEntry(cg.MemoryStats.KernelTCPUsage)\n\ts.Memory.Swap = convertMemoryEntry(cg.MemoryStats.SwapUsage)\n\ts.Memory.Usage = convertMemoryEntry(cg.MemoryStats.Usage)\n\ts.Memory.Raw = cg.MemoryStats.Stats\n\ts.Memory.PSI = cg.MemoryStats.PSI\n\n\ts.Blkio.IoServiceBytesRecursive = convertBlkioEntry(cg.BlkioStats.IoServiceBytesRecursive)\n\ts.Blkio.IoServicedRecursive = convertBlkioEntry(cg.BlkioStats.IoServicedRecursive)\n\ts.Blkio.IoQueuedRecursive = convertBlkioEntry(cg.BlkioStats.IoQueuedRecursive)\n\ts.Blkio.IoServiceTimeRecursive = convertBlkioEntry(cg.BlkioStats.IoServiceTimeRecursive)\n\ts.Blkio.IoWaitTimeRecursive = convertBlkioEntry(cg.BlkioStats.IoWaitTimeRecursive)\n\ts.Blkio.IoMergedRecursive = convertBlkioEntry(cg.BlkioStats.IoMergedRecursive)\n\ts.Blkio.IoTimeRecursive = convertBlkioEntry(cg.BlkioStats.IoTimeRecursive)\n\ts.Blkio.SectorsRecursive = convertBlkioEntry(cg.BlkioStats.SectorsRecursive)\n\ts.Blkio.PSI = cg.BlkioStats.PSI\n\n\ts.Hugetlb = make(map[string]types.Hugetlb)\n\tfor k, v := range cg.HugetlbStats {\n\t\ts.Hugetlb[k] = convertHugtlb(v)\n\t}\n\n\tif is := ls.IntelRdtStats; is != nil {\n\t\tif intelrdt.IsCATEnabled() {\n\t\t\ts.IntelRdt.L3CacheInfo = convertL3CacheInfo(is.L3CacheInfo)\n\t\t\ts.IntelRdt.L3CacheSchemaRoot = is.L3CacheSchemaRoot\n\t\t\ts.IntelRdt.L3CacheSchema = is.L3CacheSchema\n\t\t}\n\t\tif intelrdt.IsMBAEnabled() {\n\t\t\ts.IntelRdt.MemBwInfo = convertMemBwInfo(is.MemBwInfo)\n\t\t\ts.IntelRdt.MemBwSchemaRoot = is.MemBwSchemaRoot\n\t\t\ts.IntelRdt.MemBwSchema = is.MemBwSchema\n\t\t}\n\t\tif intelrdt.IsMBMEnabled() {\n\t\t\ts.IntelRdt.MBMStats = is.MBMStats\n\t\t}\n\t\tif intelrdt.IsCMTEnabled() {\n\t\t\ts.IntelRdt.CMTStats = is.CMTStats\n\t\t}\n\n\t\ts.IntelRdt.Schemata = is.Schemata\n\t}\n\n\ts.NetworkInterfaces = ls.Interfaces\n\treturn &s\n}\n\nfunc convertHugtlb(c cgroups.HugetlbStats) types.Hugetlb {\n\treturn types.Hugetlb{\n\t\tUsage:   c.Usage,\n\t\tMax:     c.MaxUsage,\n\t\tFailcnt: c.Failcnt,\n\t}\n}\n\nfunc convertMemoryEntry(c cgroups.MemoryData) types.MemoryEntry {\n\treturn types.MemoryEntry{\n\t\tLimit:   c.Limit,\n\t\tUsage:   c.Usage,\n\t\tMax:     c.MaxUsage,\n\t\tFailcnt: c.Failcnt,\n\t}\n}\n\nfunc convertBlkioEntry(c []cgroups.BlkioStatEntry) []types.BlkioEntry {\n\tout := make([]types.BlkioEntry, 0, len(c))\n\tfor _, e := range c {\n\t\tout = append(out, types.BlkioEntry(e))\n\t}\n\treturn out\n}\n\nfunc convertL3CacheInfo(i *intelrdt.L3CacheInfo) *types.L3CacheInfo {\n\tci := types.L3CacheInfo(*i)\n\treturn &ci\n}\n\nfunc convertMemBwInfo(i *intelrdt.MemBwInfo) *types.MemBwInfo {\n\tmi := types.MemBwInfo(*i)\n\treturn &mi\n}\n"
  },
  {
    "path": "exec.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\t\"github.com/urfave/cli\"\n)\n\nvar execCommand = cli.Command{\n\tName:  \"exec\",\n\tUsage: \"execute new process inside the container\",\n\tArgsUsage: `<container-id> <command> [command options]  || -p process.json <container-id>\n\nWhere \"<container-id>\" is the name for the instance of the container and\n\"<command>\" is the command to be executed in the container.\n\"<command>\" can't be empty unless a \"-p\" flag provided.\n\nEXAMPLE:\nFor example, if the container is configured to run the linux ps command the\nfollowing will output a list of processes running in the container:\n\n       # runc exec <container-id> ps`,\n\tFlags: []cli.Flag{\n\t\tcli.StringFlag{\n\t\t\tName:  \"console-socket\",\n\t\t\tUsage: \"path to an AF_UNIX socket which will receive a file descriptor referencing the master end of the console's pseudoterminal\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"pidfd-socket\",\n\t\t\tUsage: \"path to an AF_UNIX socket which will receive a file descriptor referencing the exec process\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"cwd\",\n\t\t\tUsage: \"current working directory in the container\",\n\t\t},\n\t\tcli.StringSliceFlag{\n\t\t\tName:  \"env, e\",\n\t\t\tUsage: \"set environment variables\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"tty, t\",\n\t\t\tUsage: \"allocate a pseudo-TTY\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"user, u\",\n\t\t\tUsage: \"UID (format: <uid>[:<gid>])\",\n\t\t},\n\t\tcli.Int64SliceFlag{\n\t\t\tName:  \"additional-gids, g\",\n\t\t\tUsage: \"additional gids\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"process, p\",\n\t\t\tUsage: \"path to the process.json\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"detach,d\",\n\t\t\tUsage: \"detach from the container's process\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"pid-file\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"specify the file to write the process id to\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"process-label\",\n\t\t\tUsage: \"set the asm process label for the process commonly used with selinux\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"apparmor\",\n\t\t\tUsage: \"set the apparmor profile for the process\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"no-new-privs\",\n\t\t\tUsage: \"set the no new privileges value for the process\",\n\t\t},\n\t\tcli.StringSliceFlag{\n\t\t\tName:  \"cap, c\",\n\t\t\tValue: &cli.StringSlice{},\n\t\t\tUsage: \"add a capability to the bounding set for the process\",\n\t\t},\n\t\tcli.IntFlag{\n\t\t\tName:  \"preserve-fds\",\n\t\t\tUsage: \"Pass N additional file descriptors to the container (stdio + $LISTEN_FDS + N in total)\",\n\t\t},\n\t\tcli.StringSliceFlag{\n\t\t\tName:  \"cgroup\",\n\t\t\tUsage: \"run the process in an (existing) sub-cgroup(s). Format is [<controller>:]<cgroup>.\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"ignore-paused\",\n\t\t\tUsage: \"allow exec in a paused container\",\n\t\t},\n\t},\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 1, minArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := revisePidFile(context); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstatus, err := execProcess(context)\n\t\tif err == nil {\n\t\t\tos.Exit(status)\n\t\t}\n\t\tfatalWithCode(fmt.Errorf(\"exec failed: %w\", err), 255)\n\t\treturn nil // to satisfy the linter\n\t},\n\tSkipArgReorder: true,\n}\n\n// getSubCgroupPaths parses --cgroup arguments, which can either be\n//   - a single \"path\" argument (for cgroup v2);\n//   - one or more controller[,controller[,...]]:path arguments (for cgroup v1).\n//\n// Returns a controller to path map. For cgroup v2, it's a single entity map\n// with empty controller value.\nfunc getSubCgroupPaths(args []string) (map[string]string, error) {\n\tif len(args) == 0 {\n\t\treturn nil, nil\n\t}\n\tpaths := make(map[string]string, len(args))\n\tfor _, c := range args {\n\t\t// Split into controller:path.\n\t\tif ctr, path, ok := strings.Cut(c, \":\"); ok {\n\t\t\t// There may be a few comma-separated controllers.\n\t\t\tfor ctrl := range strings.SplitSeq(ctr, \",\") {\n\t\t\t\tif ctrl == \"\" {\n\t\t\t\t\treturn nil, fmt.Errorf(\"invalid --cgroup argument: %s (empty <controller> prefix)\", c)\n\t\t\t\t}\n\t\t\t\tif _, ok := paths[ctrl]; ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\"invalid --cgroup argument(s): controller %s specified multiple times\", ctrl)\n\t\t\t\t}\n\t\t\t\tpaths[ctrl] = path\n\t\t\t}\n\t\t} else {\n\t\t\t// No \"controller:\" prefix (cgroup v2, a single path).\n\t\t\tif len(args) != 1 {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid --cgroup argument: %s (missing <controller>: prefix)\", c)\n\t\t\t}\n\t\t\tpaths[\"\"] = c\n\t\t}\n\t}\n\treturn paths, nil\n}\n\nfunc execProcess(context *cli.Context) (int, error) {\n\tcontainer, err := getContainer(context)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\tstatus, err := container.Status()\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\tif status == libcontainer.Stopped {\n\t\treturn -1, errors.New(\"cannot exec in a stopped container\")\n\t}\n\tif status == libcontainer.Paused && !context.Bool(\"ignore-paused\") {\n\t\treturn -1, errors.New(\"cannot exec in a paused container (use --ignore-paused to override)\")\n\t}\n\tp, err := getProcess(context, container)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\tcgPaths, err := getSubCgroupPaths(context.StringSlice(\"cgroup\"))\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\tr := &runner{\n\t\tenableSubreaper: false,\n\t\tshouldDestroy:   false,\n\t\tcontainer:       container,\n\t\tconsoleSocket:   context.String(\"console-socket\"),\n\t\tpidfdSocket:     context.String(\"pidfd-socket\"),\n\t\tdetach:          context.Bool(\"detach\"),\n\t\tpidFile:         context.String(\"pid-file\"),\n\t\taction:          CT_ACT_RUN,\n\t\tinit:            false,\n\t\tpreserveFDs:     context.Int(\"preserve-fds\"),\n\t\tsubCgroupPaths:  cgPaths,\n\t}\n\treturn r.run(p)\n}\n\nfunc getProcess(context *cli.Context, c *libcontainer.Container) (*specs.Process, error) {\n\tif path := context.String(\"process\"); path != \"\" {\n\t\tf, err := os.Open(path)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdefer f.Close()\n\t\tvar p specs.Process\n\t\tif err := json.NewDecoder(f).Decode(&p); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &p, validateProcessSpec(&p)\n\t}\n\t// Process from config.json and CLI flags.\n\tbundle, ok := utils.SearchLabels(c.Config().Labels, \"bundle\")\n\tif !ok {\n\t\treturn nil, errors.New(\"bundle not found in labels\")\n\t}\n\tif err := os.Chdir(bundle); err != nil {\n\t\treturn nil, err\n\t}\n\tspec, err := loadSpec(specConfig)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp := spec.Process\n\targs := context.Args()\n\tif len(args) < 2 {\n\t\treturn nil, errors.New(\"exec args cannot be empty\")\n\t}\n\tp.Args = args[1:]\n\t// Override the cwd, if passed.\n\tif cwd := context.String(\"cwd\"); cwd != \"\" {\n\t\tp.Cwd = cwd\n\t}\n\tif ap := context.String(\"apparmor\"); ap != \"\" {\n\t\tp.ApparmorProfile = ap\n\t}\n\tif l := context.String(\"process-label\"); l != \"\" {\n\t\tp.SelinuxLabel = l\n\t}\n\tif caps := context.StringSlice(\"cap\"); len(caps) > 0 {\n\t\tfor _, c := range caps {\n\t\t\tp.Capabilities.Bounding = append(p.Capabilities.Bounding, c)\n\t\t\tp.Capabilities.Effective = append(p.Capabilities.Effective, c)\n\t\t\tp.Capabilities.Permitted = append(p.Capabilities.Permitted, c)\n\t\t\t// Since ambient capabilities can't be set without inherritable,\n\t\t\t// and runc exec --cap don't set inheritable, let's only set\n\t\t\t// ambient if we already have some inheritable bits set from spec.\n\t\t\tif p.Capabilities.Inheritable != nil {\n\t\t\t\tp.Capabilities.Ambient = append(p.Capabilities.Ambient, c)\n\t\t\t}\n\t\t}\n\t}\n\t// append the passed env variables\n\tp.Env = append(p.Env, context.StringSlice(\"env\")...)\n\n\t// Always set tty to false, unless explicitly enabled from CLI.\n\tp.Terminal = context.Bool(\"tty\")\n\tif context.IsSet(\"no-new-privs\") {\n\t\tp.NoNewPrivileges = context.Bool(\"no-new-privs\")\n\t}\n\t// Override the user, if passed.\n\tif user := context.String(\"user\"); user != \"\" {\n\t\tuids, gids, ok := strings.Cut(user, \":\")\n\t\tif ok {\n\t\t\tgid, err := strconv.Atoi(gids)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"bad gid: %w\", err)\n\t\t\t}\n\t\t\tp.User.GID = uint32(gid)\n\t\t}\n\t\tuid, err := strconv.Atoi(uids)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"bad uid: %w\", err)\n\t\t}\n\t\tp.User.UID = uint32(uid)\n\t}\n\tfor _, gid := range context.Int64Slice(\"additional-gids\") {\n\t\tif gid < 0 {\n\t\t\treturn nil, fmt.Errorf(\"additional-gids must be a positive number %d\", gid)\n\t\t}\n\t\tp.User.AdditionalGids = append(p.User.AdditionalGids, uint32(gid))\n\t}\n\treturn p, validateProcessSpec(p)\n}\n"
  },
  {
    "path": "features.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/opencontainers/runc/libcontainer/capabilities\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/seccomp\"\n\t\"github.com/opencontainers/runc/libcontainer/specconv\"\n\truncfeatures \"github.com/opencontainers/runc/types/features\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\t\"github.com/opencontainers/runtime-spec/specs-go/features\"\n\t\"github.com/urfave/cli\"\n)\n\nvar featuresCommand = cli.Command{\n\tName:      \"features\",\n\tUsage:     \"show the enabled features\",\n\tArgsUsage: \"\",\n\tDescription: `Show the enabled features.\n   The result is parsable as a JSON.\n   See https://github.com/opencontainers/runtime-spec/blob/main/features.md for the type definition.\n`,\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 0, exactArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tt := true\n\n\t\tfeat := features.Features{\n\t\t\tOCIVersionMin: \"1.0.0\",\n\t\t\tOCIVersionMax: specs.Version,\n\t\t\tAnnotations: map[string]string{\n\t\t\t\truncfeatures.AnnotationRuncVersion:           version,\n\t\t\t\truncfeatures.AnnotationRuncCommit:            gitCommit,\n\t\t\t\truncfeatures.AnnotationRuncCheckpointEnabled: \"true\",\n\t\t\t},\n\t\t\tHooks:        configs.KnownHookNames(),\n\t\t\tMountOptions: specconv.KnownMountOptions(),\n\t\t\tLinux: &features.Linux{\n\t\t\t\tNamespaces:   specconv.KnownNamespaces(),\n\t\t\t\tCapabilities: capabilities.KnownCapabilities(),\n\t\t\t\tCgroup: &features.Cgroup{\n\t\t\t\t\tV1:          &t,\n\t\t\t\t\tV2:          &t,\n\t\t\t\t\tSystemd:     &t,\n\t\t\t\t\tSystemdUser: &t,\n\t\t\t\t\tRdma:        &t,\n\t\t\t\t},\n\t\t\t\tApparmor: &features.Apparmor{\n\t\t\t\t\tEnabled: &t,\n\t\t\t\t},\n\t\t\t\tSelinux: &features.Selinux{\n\t\t\t\t\tEnabled: &t,\n\t\t\t\t},\n\t\t\t\tIntelRdt: &features.IntelRdt{\n\t\t\t\t\tEnabled:    &t,\n\t\t\t\t\tSchemata:   &t,\n\t\t\t\t\tMonitoring: &t,\n\t\t\t\t},\n\t\t\t\tMemoryPolicy: &features.MemoryPolicy{\n\t\t\t\t\tModes: specconv.KnownMemoryPolicyModes(),\n\t\t\t\t\tFlags: specconv.KnownMemoryPolicyFlags(),\n\t\t\t\t},\n\t\t\t\tMountExtensions: &features.MountExtensions{\n\t\t\t\t\tIDMap: &features.IDMap{\n\t\t\t\t\t\tEnabled: &t,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNetDevices: &features.NetDevices{\n\t\t\t\t\tEnabled: &t,\n\t\t\t\t},\n\t\t\t},\n\t\t\tPotentiallyUnsafeConfigAnnotations: []string{\n\t\t\t\t\"bundle\",\n\t\t\t\t\"org.systemd.property.\", // prefix form\n\t\t\t\t\"org.criu.config\",\n\t\t\t},\n\t\t}\n\n\t\tif seccomp.Enabled {\n\t\t\tfeat.Linux.Seccomp = &features.Seccomp{\n\t\t\t\tEnabled:        &t,\n\t\t\t\tActions:        seccomp.KnownActions(),\n\t\t\t\tOperators:      seccomp.KnownOperators(),\n\t\t\t\tArchs:          seccomp.KnownArchs(),\n\t\t\t\tKnownFlags:     seccomp.KnownFlags(),\n\t\t\t\tSupportedFlags: seccomp.SupportedFlags(),\n\t\t\t}\n\t\t\tmajor, minor, patch := seccomp.Version()\n\t\t\tfeat.Annotations[runcfeatures.AnnotationLibseccompVersion] = fmt.Sprintf(\"%d.%d.%d\", major, minor, patch)\n\t\t}\n\n\t\tenc := json.NewEncoder(context.App.Writer)\n\t\tenc.SetIndent(\"\", \"    \")\n\t\treturn enc.Encode(feat)\n\t},\n}\n"
  },
  {
    "path": "go.mod",
    "content": "module github.com/opencontainers/runc\n\ngo 1.24.0\n\nrequire (\n\tgithub.com/checkpoint-restore/go-criu/v7 v7.2.0\n\tgithub.com/containerd/console v1.0.5\n\tgithub.com/coreos/go-systemd/v22 v22.7.0\n\tgithub.com/cyphar/filepath-securejoin v0.6.1\n\tgithub.com/docker/go-units v0.5.0\n\tgithub.com/godbus/dbus/v5 v5.2.2\n\tgithub.com/moby/sys/capability v0.4.0\n\tgithub.com/moby/sys/mountinfo v0.7.2\n\tgithub.com/moby/sys/user v0.4.0\n\tgithub.com/moby/sys/userns v0.1.0\n\tgithub.com/mrunalp/fileutils v0.5.1\n\tgithub.com/opencontainers/cgroups v0.0.6\n\tgithub.com/opencontainers/runtime-spec v1.3.0\n\tgithub.com/opencontainers/selinux v1.13.1\n\tgithub.com/seccomp/libseccomp-golang v0.11.1\n\tgithub.com/sirupsen/logrus v1.9.4\n\tgithub.com/urfave/cli v1.22.17\n\tgithub.com/vishvananda/netlink v1.3.1\n\tgithub.com/vishvananda/netns v0.0.5\n\tgolang.org/x/net v0.50.0\n\tgolang.org/x/sys v0.41.0\n\tgoogle.golang.org/protobuf v1.36.11\n)\n\nrequire (\n\tcyphar.com/go-pathrs v0.2.4 // indirect\n\tgithub.com/cilium/ebpf v0.17.3 // indirect\n\tgithub.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect\n\tgithub.com/russross/blackfriday/v2 v2.1.0 // indirect\n)\n"
  },
  {
    "path": "go.sum",
    "content": "cyphar.com/go-pathrs v0.2.4 h1:iD/mge36swa1UFKdINkr1Frkpp6wZsy3YYEildj9cLY=\ncyphar.com/go-pathrs v0.2.4/go.mod h1:y8f1EMG7r+hCuFf/rXsKqMJrJAUoADZGNh5/vZPKcGc=\ngithub.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=\ngithub.com/checkpoint-restore/go-criu/v7 v7.2.0 h1:qGiWA4App1gGlEfIJ68WR9jbezV9J7yZdjzglezcqKo=\ngithub.com/checkpoint-restore/go-criu/v7 v7.2.0/go.mod h1:u0LCWLg0w4yqqu14aXhiB4YD3a1qd8EcCEg7vda5dwo=\ngithub.com/cilium/ebpf v0.17.3 h1:FnP4r16PWYSE4ux6zN+//jMcW4nMVRvuTLVTvCjyyjg=\ngithub.com/cilium/ebpf v0.17.3/go.mod h1:G5EDHij8yiLzaqn0WjyfJHvRa+3aDlReIaLVRMvOyJk=\ngithub.com/containerd/console v1.0.5 h1:R0ymNeydRqH2DmakFNdmjR2k0t7UPuiOV/N/27/qqsc=\ngithub.com/containerd/console v1.0.5/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=\ngithub.com/coreos/go-systemd/v22 v22.7.0 h1:LAEzFkke61DFROc7zNLX/WA2i5J8gYqe0rSj9KI28KA=\ngithub.com/coreos/go-systemd/v22 v22.7.0/go.mod h1:xNUYtjHu2EDXbsxz1i41wouACIwT7Ybq9o0BQhMwD0w=\ngithub.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo=\ngithub.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=\ngithub.com/cyphar/filepath-securejoin v0.6.1 h1:5CeZ1jPXEiYt3+Z6zqprSAgSWiggmpVyciv8syjIpVE=\ngithub.com/cyphar/filepath-securejoin v0.6.1/go.mod h1:A8hd4EnAeyujCJRrICiOWqjS1AX0a9kM5XL+NwKoYSc=\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/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/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI=\ngithub.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow=\ngithub.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ=\ngithub.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c=\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/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA=\ngithub.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=\ngithub.com/jsimonetti/rtnetlink/v2 v2.0.1 h1:xda7qaHDSVOsADNouv7ukSuicKZO7GgVUCXxpaIEIlM=\ngithub.com/jsimonetti/rtnetlink/v2 v2.0.1/go.mod h1:7MoNYNbb3UaDHtF8udiJo/RH6VsTKP1pqKLUTVCvToE=\ngithub.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=\ngithub.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=\ngithub.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\ngithub.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=\ngithub.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g=\ngithub.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw=\ngithub.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U=\ngithub.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA=\ngithub.com/moby/sys/capability v0.4.0 h1:4D4mI6KlNtWMCM1Z/K0i7RV1FkX+DBDHKVJpCndZoHk=\ngithub.com/moby/sys/capability v0.4.0/go.mod h1:4g9IK291rVkms3LKCDOoYlnV8xKwoDTpIrNEE35Wq0I=\ngithub.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg=\ngithub.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4=\ngithub.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs=\ngithub.com/moby/sys/user v0.4.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/mrunalp/fileutils v0.5.1 h1:F+S7ZlNKnrwHfSwdlgNSkKo67ReVf8o9fel6C3dkm/Q=\ngithub.com/mrunalp/fileutils v0.5.1/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=\ngithub.com/opencontainers/cgroups v0.0.6 h1:tfZFWTIIGaUUFImTyuTg+Mr5x8XRiSdZESgEBW7UxuI=\ngithub.com/opencontainers/cgroups v0.0.6/go.mod h1:oWVzJsKK0gG9SCRBfTpnn16WcGEqDI8PAcpMGbqWxcs=\ngithub.com/opencontainers/runtime-spec v1.3.0 h1:YZupQUdctfhpZy3TM39nN9Ika5CBWT5diQ8ibYCRkxg=\ngithub.com/opencontainers/runtime-spec v1.3.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=\ngithub.com/opencontainers/selinux v1.13.1 h1:A8nNeceYngH9Ow++M+VVEwJVpdFmrlxsN22F+ISDCJE=\ngithub.com/opencontainers/selinux v1.13.1/go.mod h1:S10WXZ/osk2kWOYKy1x2f/eXF5ZHJoUs8UU/2caNRbg=\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/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=\ngithub.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=\ngithub.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=\ngithub.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=\ngithub.com/seccomp/libseccomp-golang v0.11.1 h1:wuk4ZjSx6kyQII4rj6G6fvVzRHQaSiPvccJazDagu4g=\ngithub.com/seccomp/libseccomp-golang v0.11.1/go.mod h1:5m1Lk8E9OwgZTTVz4bBOer7JuazaBa+xTkM895tDiWc=\ngithub.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w=\ngithub.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g=\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=\ngithub.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=\ngithub.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=\ngithub.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=\ngithub.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=\ngithub.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=\ngithub.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=\ngithub.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=\ngithub.com/urfave/cli v1.22.17 h1:SYzXoiPfQjHBbkYxbew5prZHS1TOLT3ierW8SYLqtVQ=\ngithub.com/urfave/cli v1.22.17/go.mod h1:b0ht0aqgH/6pBYzzxURyrM4xXNgsoT/n2ZzwQiEhNVo=\ngithub.com/vishvananda/netlink v1.3.1 h1:3AEMt62VKqz90r0tmNhog0r/PpWKmrEShJU0wJW6bV0=\ngithub.com/vishvananda/netlink v1.3.1/go.mod h1:ARtKouGSTGchR8aMwmkzC0qiNPrrWO5JS/XMVl45+b4=\ngithub.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zdEY=\ngithub.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=\ngolang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60=\ngolang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM=\ngolang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=\ngolang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k=\ngolang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=\ngoogle.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=\ngoogle.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=\ngopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/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=\n"
  },
  {
    "path": "init.go",
    "content": "package main\n\nimport (\n\t\"os\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t_ \"github.com/opencontainers/runc/libcontainer/nsenter\"\n)\n\nfunc init() {\n\tif len(os.Args) > 1 && os.Args[1] == \"init\" {\n\t\t// This is the golang entry point for runc init, executed\n\t\t// before main() but after libcontainer/nsenter's nsexec().\n\t\tlibcontainer.Init()\n\t}\n}\n"
  },
  {
    "path": "internal/linux/doc.go",
    "content": "// Package linux provides minimal wrappers around Linux system calls, primarily\n// to provide support for automatic EINTR-retries.\npackage linux\n"
  },
  {
    "path": "internal/linux/eintr.go",
    "content": "package linux\n\nimport (\n\t\"errors\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// retryOnEINTR takes a function that returns an error and calls it\n// until the error returned is not EINTR.\nfunc retryOnEINTR(fn func() error) error {\n\tfor {\n\t\terr := fn()\n\t\tif !errors.Is(err, unix.EINTR) {\n\t\t\treturn err\n\t\t}\n\t}\n}\n\n// retryOnEINTR2 is like retryOnEINTR, but it returns 2 values.\nfunc retryOnEINTR2[T any](fn func() (T, error)) (T, error) {\n\tfor {\n\t\tval, err := fn()\n\t\tif !errors.Is(err, unix.EINTR) {\n\t\t\treturn val, err\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "internal/linux/linux.go",
    "content": "package linux\n\nimport (\n\t\"os\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// Dup3 wraps [unix.Dup3].\nfunc Dup3(oldfd, newfd, flags int) error {\n\terr := retryOnEINTR(func() error {\n\t\treturn unix.Dup3(oldfd, newfd, flags)\n\t})\n\treturn os.NewSyscallError(\"dup3\", err)\n}\n\n// Exec wraps [unix.Exec].\nfunc Exec(cmd string, args, env []string) error {\n\terr := retryOnEINTR(func() error {\n\t\treturn unix.Exec(cmd, args, env)\n\t})\n\tif err != nil {\n\t\treturn &os.PathError{Op: \"exec\", Path: cmd, Err: err}\n\t}\n\treturn nil\n}\n\n// Getwd wraps [unix.Getwd].\nfunc Getwd() (wd string, err error) {\n\twd, err = retryOnEINTR2(unix.Getwd)\n\treturn wd, os.NewSyscallError(\"getwd\", err)\n}\n\n// Open wraps [unix.Open].\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tfd, err = retryOnEINTR2(func() (int, error) {\n\t\treturn unix.Open(path, mode, perm)\n\t})\n\tif err != nil {\n\t\treturn -1, &os.PathError{Op: \"open\", Path: path, Err: err}\n\t}\n\treturn fd, nil\n}\n\n// Openat wraps [unix.Openat].\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tfd, err = retryOnEINTR2(func() (int, error) {\n\t\treturn unix.Openat(dirfd, path, mode, perm)\n\t})\n\tif err != nil {\n\t\treturn -1, &os.PathError{Op: \"openat\", Path: path, Err: err}\n\t}\n\treturn fd, nil\n}\n\n// Recvfrom wraps [unix.Recvfrom].\nfunc Recvfrom(fd int, p []byte, flags int) (n int, from unix.Sockaddr, err error) {\n\terr = retryOnEINTR(func() error {\n\t\tn, from, err = unix.Recvfrom(fd, p, flags)\n\t\treturn err\n\t})\n\tif err != nil {\n\t\treturn 0, nil, os.NewSyscallError(\"recvfrom\", err)\n\t}\n\treturn n, from, err\n}\n\n// SchedSetaffinity wraps sched_setaffinity syscall without unix.CPUSet size limitation.\nfunc SchedSetaffinity(pid int, buf []byte) error {\n\terr := retryOnEINTR(func() error {\n\t\t_, _, errno := unix.Syscall(\n\t\t\tunix.SYS_SCHED_SETAFFINITY,\n\t\t\tuintptr(pid),\n\t\t\tuintptr(len(buf)),\n\t\t\tuintptr((unsafe.Pointer)(&buf[0])))\n\t\tif errno != 0 {\n\t\t\treturn errno\n\t\t}\n\t\treturn nil\n\t})\n\treturn os.NewSyscallError(\"sched_setaffinity\", err)\n}\n\n// Sendmsg wraps [unix.Sendmsg].\nfunc Sendmsg(fd int, p, oob []byte, to unix.Sockaddr, flags int) error {\n\terr := retryOnEINTR(func() error {\n\t\treturn unix.Sendmsg(fd, p, oob, to, flags)\n\t})\n\treturn os.NewSyscallError(\"sendmsg\", err)\n}\n\n// SetMempolicy wraps set_mempolicy.\nfunc SetMempolicy(mode int, mask *unix.CPUSet) error {\n\terr := retryOnEINTR(func() error {\n\t\treturn unix.SetMemPolicy(mode, mask)\n\t})\n\treturn os.NewSyscallError(\"set_mempolicy\", err)\n}\n\n// Readlinkat wraps [unix.Readlinkat].\nfunc Readlinkat(dir *os.File, path string) (string, error) {\n\tsize := 4096\n\tfor {\n\t\tlinkBuf := make([]byte, size)\n\t\tn, err := retryOnEINTR2(func() (int, error) {\n\t\t\treturn unix.Readlinkat(int(dir.Fd()), path, linkBuf)\n\t\t})\n\t\tif err != nil {\n\t\t\treturn \"\", &os.PathError{Op: \"readlinkat\", Path: dir.Name() + \"/\" + path, Err: err}\n\t\t}\n\t\tif n != size {\n\t\t\treturn string(linkBuf[:n]), nil\n\t\t}\n\t\t// Possible truncation, resize the buffer.\n\t\tsize *= 2\n\t}\n}\n\n// GetPtyPeer is a wrapper for ioctl(TIOCGPTPEER).\nfunc GetPtyPeer(ptyFd uintptr, unsafePeerPath string, flags int) (*os.File, error) {\n\t// Make sure O_NOCTTY is always set -- otherwise runc might accidentally\n\t// gain it as a controlling terminal. O_CLOEXEC also needs to be set to\n\t// make sure we don't leak the handle either.\n\tflags |= unix.O_NOCTTY | unix.O_CLOEXEC\n\n\t// There is no nice wrapper for this kind of ioctl in unix.\n\tpeerFd, _, errno := unix.Syscall(\n\t\tunix.SYS_IOCTL,\n\t\tptyFd,\n\t\tuintptr(unix.TIOCGPTPEER),\n\t\tuintptr(flags),\n\t)\n\tif errno != 0 {\n\t\treturn nil, os.NewSyscallError(\"ioctl TIOCGPTPEER\", errno)\n\t}\n\treturn os.NewFile(peerFd, unsafePeerPath), nil\n}\n"
  },
  {
    "path": "internal/pathrs/doc.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n/*\n * Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n * Copyright (C) 2024-2025 SUSE LLC\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 pathrs provides wrappers around filepath-securejoin to add the\n// minimum set of features needed from libpathrs that are not provided by\n// filepath-securejoin, with the eventual goal being that these can be used to\n// ease the transition by converting them stubs when enabling libpathrs builds.\npackage pathrs\n"
  },
  {
    "path": "internal/pathrs/mkdirall.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n/*\n * Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n * Copyright (C) 2024-2025 SUSE LLC\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 pathrs\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n)\n\n// MkdirAllParentInRoot is like [MkdirAllInRoot] except that it only creates\n// the parent directory of the target path, returning the trailing component so\n// the caller has more flexibility around constructing the final inode.\n//\n// Callers need to be very careful operating on the trailing path, as trivial\n// mistakes like following symlinks can cause security bugs. Most people\n// should probably just use [MkdirAllInRoot] or [CreateInRoot].\nfunc MkdirAllParentInRoot(root, unsafePath string, mode os.FileMode) (*os.File, string, error) {\n\t// MkdirAllInRoot also does hallucinateUnsafePath, but we need to do it\n\t// here first because when we split unsafePath into (dir, file) components\n\t// we want to be doing so with the hallucinated path (so that trailing\n\t// dangling symlinks are treated correctly).\n\tunsafePath, err := hallucinateUnsafePath(root, unsafePath)\n\tif err != nil {\n\t\treturn nil, \"\", fmt.Errorf(\"failed to construct hallucinated target path: %w\", err)\n\t}\n\n\tdirPath, filename := filepath.Split(unsafePath)\n\tif filepath.Join(\"/\", filename) == \"/\" {\n\t\treturn nil, \"\", fmt.Errorf(\"create parent dir in root subpath %q has bad trailing component %q\", unsafePath, filename)\n\t}\n\n\tdirFd, err := MkdirAllInRoot(root, dirPath, mode)\n\treturn dirFd, filename, err\n}\n"
  },
  {
    "path": "internal/pathrs/mkdirall_pathrslite.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n/*\n * Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n * Copyright (C) 2024-2025 SUSE LLC\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 pathrs\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite\"\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// MkdirAllInRoot attempts to make\n//\n//\tpath, _ := securejoin.SecureJoin(root, unsafePath)\n//\tos.MkdirAll(path, mode)\n//\tos.Open(path)\n//\n// safer against attacks where components in the path are changed between\n// SecureJoin returning and MkdirAll (or Open) being called. In particular, we\n// try to detect any symlink components in the path while we are doing the\n// MkdirAll.\n//\n// NOTE: If unsafePath is a subpath of root, we assume that you have already\n// called SecureJoin and so we use the provided path verbatim without resolving\n// any symlinks (this is done in a way that avoids symlink-exchange races).\n// This means that the path also must not contain \"..\" elements, otherwise an\n// error will occur.\n//\n// This uses (pathrs-lite).MkdirAllHandle under the hood, but it has special\n// handling if unsafePath has already been scoped within the rootfs (this is\n// needed for a lot of runc callers and fixing this would require reworking a\n// lot of path logic).\nfunc MkdirAllInRoot(root, unsafePath string, mode os.FileMode) (*os.File, error) {\n\tunsafePath, err := hallucinateUnsafePath(root, unsafePath)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to construct hallucinated target path: %w\", err)\n\t}\n\n\t// Check for any silly mode bits.\n\tif mode&^0o7777 != 0 {\n\t\treturn nil, fmt.Errorf(\"tried to include non-mode bits in MkdirAll mode: 0o%.3o\", mode)\n\t}\n\t// Linux (and thus os.MkdirAll) silently ignores the suid and sgid bits if\n\t// passed. While it would make sense to return an error in that case (since\n\t// the user has asked for a mode that won't be applied), for compatibility\n\t// reasons we have to ignore these bits.\n\tif ignoredBits := mode &^ 0o1777; ignoredBits != 0 {\n\t\tlogrus.Warnf(\"MkdirAll called with no-op mode bits that are ignored by Linux: 0o%.3o\", ignoredBits)\n\t\tmode &= 0o1777\n\t}\n\n\trootDir, err := os.OpenFile(root, unix.O_DIRECTORY|unix.O_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"open root handle: %w\", err)\n\t}\n\tdefer rootDir.Close()\n\n\treturn retryEAGAIN(func() (*os.File, error) {\n\t\treturn pathrs.MkdirAllHandle(rootDir, unsafePath, mode)\n\t})\n}\n"
  },
  {
    "path": "internal/pathrs/path.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n/*\n * Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n * Copyright (C) 2024-2025 SUSE LLC\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 pathrs\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\tsecurejoin \"github.com/cyphar/filepath-securejoin\"\n)\n\n// IsLexicallyInRoot is shorthand for strings.HasPrefix(path+\"/\", root+\"/\"),\n// but properly handling the case where path or root have a \"/\" suffix.\n//\n// NOTE: The return value only make sense if the path is already mostly cleaned\n// (i.e., doesn't contain \"..\", \".\", nor unneeded \"/\"s).\nfunc IsLexicallyInRoot(root, path string) bool {\n\troot = strings.TrimRight(root, \"/\")\n\tpath = strings.TrimRight(path, \"/\")\n\treturn strings.HasPrefix(path+\"/\", root+\"/\")\n}\n\n// LexicallyCleanPath makes a path safe for use with filepath.Join. This is\n// done by not only cleaning the path, but also (if the path is relative)\n// adding a leading '/' and cleaning it (then removing the leading '/'). This\n// ensures that a path resulting from prepending another path will always\n// resolve to lexically be a subdirectory of the prefixed path. This is all\n// done lexically, so paths that include symlinks won't be safe as a result of\n// using CleanPath.\nfunc LexicallyCleanPath(path string) string {\n\t// Deal with empty strings nicely.\n\tif path == \"\" {\n\t\treturn \"\"\n\t}\n\n\t// Ensure that all paths are cleaned (especially problematic ones like\n\t// \"/../../../../../\" which can cause lots of issues).\n\n\tif filepath.IsAbs(path) {\n\t\treturn filepath.Clean(path)\n\t}\n\n\t// If the path isn't absolute, we need to do more processing to fix paths\n\t// such as \"../../../../<etc>/some/path\". We also shouldn't convert absolute\n\t// paths to relative ones.\n\tpath = filepath.Clean(string(os.PathSeparator) + path)\n\t// This can't fail, as (by definition) all paths are relative to root.\n\tpath, _ = filepath.Rel(string(os.PathSeparator), path)\n\n\treturn path\n}\n\n// LexicallyStripRoot returns the passed path, stripping the root path if it\n// was (lexicially) inside it. Note that both passed paths will always be\n// treated as absolute, and the returned path will also always be absolute. In\n// addition, the paths are cleaned before stripping the root.\nfunc LexicallyStripRoot(root, path string) string {\n\t// Make the paths clean and absolute.\n\troot, path = LexicallyCleanPath(\"/\"+root), LexicallyCleanPath(\"/\"+path)\n\tswitch {\n\tcase path == root:\n\t\tpath = \"/\"\n\tcase root == \"/\":\n\t\t// do nothing\n\tdefault:\n\t\tpath = strings.TrimPrefix(path, root+\"/\")\n\t}\n\treturn LexicallyCleanPath(\"/\" + path)\n}\n\n// hallucinateUnsafePath creates a new unsafePath which has all symlinks\n// (including dangling symlinks) fully resolved and any non-existent components\n// treated as though they are real. This is effectively just a wrapper around\n// [securejoin.SecureJoin] that strips the root. This path *IS NOT* safe to use\n// as-is, you *MUST* operate on the returned path with pathrs-lite.\n//\n// The reason for this methods is that in previous runc versions, we would\n// tolerate nonsense paths with dangling symlinks as path components.\n// pathrs-lite does not support this, so instead we have to emulate this\n// behaviour by doing SecureJoin *purely to get a semi-reasonable path to use*\n// and then we use pathrs-lite to operate on the path safely.\n//\n// It would be quite difficult to emulate this in a race-free way in\n// pathrs-lite, so instead we use [securejoin.SecureJoin] to simply produce a\n// new candidate path for operations like [MkdirAllInRoot] so they can then\n// operate on the new unsafePath as if it was what the user requested.\n//\n// If unsafePath is already lexically inside root, it is stripped before\n// re-resolving it (this is done to ensure compatibility with legacy callers\n// within runc that call SecureJoin before calling into pathrs).\nfunc hallucinateUnsafePath(root, unsafePath string) (string, error) {\n\tunsafePath = LexicallyStripRoot(root, unsafePath)\n\tweirdPath, err := securejoin.SecureJoin(root, unsafePath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tunsafePath = LexicallyStripRoot(root, weirdPath)\n\treturn unsafePath, nil\n}\n"
  },
  {
    "path": "internal/pathrs/path_test.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n/*\n * Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n * Copyright (C) 2024-2025 SUSE LLC\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 pathrs\n\nimport \"testing\"\n\nfunc TestIsLexicallyInRoot(t *testing.T) {\n\tfor _, test := range []struct {\n\t\tname       string\n\t\troot, path string\n\t\texpected   bool\n\t}{\n\t\t{\"Equal1\", \"/foo\", \"/foo\", true},\n\t\t{\"Equal2\", \"/bar/baz\", \"/bar/baz\", true},\n\t\t{\"Equal3\", \"/bar/baz/\", \"/bar/baz/\", true},\n\t\t{\"Root\", \"/\", \"/foo/bar\", true},\n\t\t{\"Root-Equal\", \"/\", \"/\", true},\n\t\t{\"InRoot-Basic1\", \"/foo/bar\", \"/foo/bar/baz/abcd\", true},\n\t\t{\"InRoot-Basic2\", \"/a/b/c/d\", \"/a/b/c/d/e/f/g/h\", true},\n\t\t{\"InRoot-Long\", \"/var/lib/docker/container/1234abcde/rootfs\", \"/var/lib/docker/container/1234abcde/rootfs/a/b/c\", true},\n\t\t{\"InRoot-TrailingSlash1\", \"/foo/bar/\", \"/foo/bar\", true},\n\t\t{\"InRoot-TrailingSlash2\", \"/foo/\", \"/foo/bar/baz/boop\", true},\n\t\t{\"NotInRoot-Basic1\", \"/foo\", \"/bar\", false},\n\t\t{\"NotInRoot-Basic2\", \"/foo\", \"/bar\", false},\n\t\t{\"NotInRoot-Basic3\", \"/foo/bar/baz\", \"/foo/boo/baz/abc\", false},\n\t\t{\"NotInRoot-Long\", \"/var/lib/docker/container/1234abcde/rootfs\", \"/a/b/c\", false},\n\t\t{\"NotInRoot-Tricky1\", \"/foo/bar\", \"/foo/bara\", false},\n\t\t{\"NotInRoot-Tricky2\", \"/foo/bar\", \"/foo/ba/r\", false},\n\t} {\n\t\tt.Run(test.name, func(t *testing.T) {\n\t\t\tgot := IsLexicallyInRoot(test.root, test.path)\n\t\t\tif test.expected != got {\n\t\t\t\tt.Errorf(\"IsLexicallyInRoot(%q, %q) = %v (expected %v)\", test.root, test.path, got, test.expected)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestLexicallyCleanPath(t *testing.T) {\n\tpath := LexicallyCleanPath(\"\")\n\tif path != \"\" {\n\t\tt.Errorf(\"expected to receive empty string and received %s\", path)\n\t}\n\n\tpath = LexicallyCleanPath(\"rootfs\")\n\tif path != \"rootfs\" {\n\t\tt.Errorf(\"expected to receive 'rootfs' and received %s\", path)\n\t}\n\n\tpath = LexicallyCleanPath(\"../../../var\")\n\tif path != \"var\" {\n\t\tt.Errorf(\"expected to receive 'var' and received %s\", path)\n\t}\n\n\tpath = LexicallyCleanPath(\"/../../../var\")\n\tif path != \"/var\" {\n\t\tt.Errorf(\"expected to receive '/var' and received %s\", path)\n\t}\n\n\tpath = LexicallyCleanPath(\"/foo/bar/\")\n\tif path != \"/foo/bar\" {\n\t\tt.Errorf(\"expected to receive '/foo/bar' and received %s\", path)\n\t}\n\n\tpath = LexicallyCleanPath(\"/foo/bar/../\")\n\tif path != \"/foo\" {\n\t\tt.Errorf(\"expected to receive '/foo' and received %s\", path)\n\t}\n}\n\nfunc TestLexicallyStripRoot(t *testing.T) {\n\tfor _, test := range []struct {\n\t\troot, path, out string\n\t}{\n\t\t// Works with multiple components.\n\t\t{\"/a/b\", \"/a/b/c\", \"/c\"},\n\t\t{\"/hello/world\", \"/hello/world/the/quick-brown/fox\", \"/the/quick-brown/fox\"},\n\t\t// '/' must be a no-op.\n\t\t{\"/\", \"/a/b/c\", \"/a/b/c\"},\n\t\t// Must be the correct order.\n\t\t{\"/a/b\", \"/a/c/b\", \"/a/c/b\"},\n\t\t// Must be at start.\n\t\t{\"/abc/def\", \"/foo/abc/def/bar\", \"/foo/abc/def/bar\"},\n\t\t// Must be a lexical parent.\n\t\t{\"/foo/bar\", \"/foo/barSAMECOMPONENT\", \"/foo/barSAMECOMPONENT\"},\n\t\t// Must only strip the root once.\n\t\t{\"/foo/bar\", \"/foo/bar/foo/bar/baz\", \"/foo/bar/baz\"},\n\t\t// Deal with .. in a fairly sane way.\n\t\t{\"/foo/bar\", \"/foo/bar/../baz\", \"/foo/baz\"},\n\t\t{\"/foo/bar\", \"../../../../../../foo/bar/baz\", \"/baz\"},\n\t\t{\"/foo/bar\", \"/../../../../../../foo/bar/baz\", \"/baz\"},\n\t\t{\"/foo/bar/../baz\", \"/foo/baz/bar\", \"/bar\"},\n\t\t{\"/foo/bar/../baz\", \"/foo/baz/../bar/../baz/./foo\", \"/foo\"},\n\t\t// All paths are made absolute before stripping.\n\t\t{\"foo/bar\", \"/foo/bar/baz/bee\", \"/baz/bee\"},\n\t\t{\"/foo/bar\", \"foo/bar/baz/beef\", \"/baz/beef\"},\n\t\t{\"foo/bar\", \"foo/bar/baz/beets\", \"/baz/beets\"},\n\t} {\n\t\tgot := LexicallyStripRoot(test.root, test.path)\n\t\tif got != test.out {\n\t\t\tt.Errorf(\"LexicallyStripRoot(%q, %q) -- got %q, expected %q\", test.root, test.path, got, test.out)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "internal/pathrs/procfs_pathrslite.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n/*\n * Copyright (C) 2025 Aleksa Sarai <cyphar@cyphar.com>\n * Copyright (C) 2025 SUSE LLC\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 pathrs\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/procfs\"\n)\n\nfunc procOpenReopen(openFn func(subpath string) (*os.File, error), subpath string, flags int) (*os.File, error) {\n\thandle, err := retryEAGAIN(func() (*os.File, error) {\n\t\treturn openFn(subpath)\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer handle.Close()\n\n\tf, err := Reopen(handle, flags)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"reopen %s: %w\", handle.Name(), err)\n\t}\n\treturn f, nil\n}\n\n// ProcSelfOpen is a wrapper around [procfs.Handle.OpenSelf] and\n// [pathrs.Reopen], to let you one-shot open a procfs file with the given\n// flags.\nfunc ProcSelfOpen(subpath string, flags int) (*os.File, error) {\n\tproc, err := retryEAGAIN(procfs.OpenProcRoot)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer proc.Close()\n\treturn procOpenReopen(proc.OpenSelf, subpath, flags)\n}\n\n// ProcPidOpen is a wrapper around [procfs.Handle.OpenPid] and [pathrs.Reopen],\n// to let you one-shot open a procfs file with the given flags.\nfunc ProcPidOpen(pid int, subpath string, flags int) (*os.File, error) {\n\tproc, err := retryEAGAIN(procfs.OpenProcRoot)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer proc.Close()\n\treturn procOpenReopen(func(subpath string) (*os.File, error) {\n\t\treturn proc.OpenPid(pid, subpath)\n\t}, subpath, flags)\n}\n\n// ProcThreadSelfOpen is a wrapper around [procfs.Handle.OpenThreadSelf] and\n// [pathrs.Reopen], to let you one-shot open a procfs file with the given\n// flags. The returned [procfs.ProcThreadSelfCloser] needs the same handling as\n// when using pathrs-lite.\nfunc ProcThreadSelfOpen(subpath string, flags int) (_ *os.File, _ procfs.ProcThreadSelfCloser, Err error) {\n\tproc, err := retryEAGAIN(procfs.OpenProcRoot)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer proc.Close()\n\n\thandle, closer, err := retryEAGAIN2(func() (*os.File, procfs.ProcThreadSelfCloser, error) {\n\t\treturn proc.OpenThreadSelf(subpath)\n\t})\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tif closer != nil {\n\t\tdefer func() {\n\t\t\tif Err != nil {\n\t\t\t\tcloser()\n\t\t\t}\n\t\t}()\n\t}\n\tdefer handle.Close()\n\n\tf, err := Reopen(handle, flags)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"reopen %s: %w\", handle.Name(), err)\n\t}\n\treturn f, closer, nil\n}\n\n// Reopen is a wrapper around pathrs.Reopen.\nfunc Reopen(file *os.File, flags int) (*os.File, error) {\n\treturn retryEAGAIN(func() (*os.File, error) {\n\t\treturn pathrs.Reopen(file, flags)\n\t})\n}\n"
  },
  {
    "path": "internal/pathrs/retry.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n/*\n * Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n * Copyright (C) 2024-2025 SUSE LLC\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 pathrs\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// Based on >50k tests running \"runc run\" on a 16-core system with very heavy\n// rename(2) load, the single longest latency caused by -EAGAIN retries was\n// ~800us (with the vast majority being closer to 400us). So, a 2ms limit\n// should give more than enough headroom for any real system in practice.\nconst retryDeadline = 2 * time.Millisecond\n\n// retryEAGAIN is a top-level retry loop for pathrs to try to returning\n// spurious errors in most normal user cases when using openat2 (libpathrs\n// itself does up to 128 retries already, but this method takes a\n// wallclock-deadline approach to simply retry until a timer elapses).\nfunc retryEAGAIN[T any](fn func() (T, error)) (T, error) {\n\tdeadline := time.After(retryDeadline)\n\tfor {\n\t\tv, err := fn()\n\t\tif !errors.Is(err, unix.EAGAIN) {\n\t\t\treturn v, err\n\t\t}\n\t\tselect {\n\t\tcase <-deadline:\n\t\t\treturn *new(T), fmt.Errorf(\"%v retry deadline exceeded: %w\", retryDeadline, err)\n\t\tdefault:\n\t\t\t// retry\n\t\t}\n\t}\n}\n\n// retryEAGAIN2 is like retryEAGAIN except it returns two values.\nfunc retryEAGAIN2[T1, T2 any](fn func() (T1, T2, error)) (T1, T2, error) {\n\ttype ret struct {\n\t\tv1 T1\n\t\tv2 T2\n\t}\n\tv, err := retryEAGAIN(func() (ret, error) {\n\t\tv1, v2, err := fn()\n\t\treturn ret{v1: v1, v2: v2}, err\n\t})\n\treturn v.v1, v.v2, err\n}\n"
  },
  {
    "path": "internal/pathrs/root_pathrslite.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n/*\n * Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n * Copyright (C) 2024-2025 SUSE LLC\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 pathrs\n\nimport (\n\t\"os\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/internal/linux\"\n)\n\n// OpenInRoot opens the given path inside the root with the provided flags. It\n// is effectively shorthand for [securejoin.OpenInRoot] followed by\n// [securejoin.Reopen].\nfunc OpenInRoot(root, subpath string, flags int) (*os.File, error) {\n\thandle, err := retryEAGAIN(func() (*os.File, error) {\n\t\treturn pathrs.OpenInRoot(root, subpath)\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer handle.Close()\n\n\treturn Reopen(handle, flags)\n}\n\n// CreateInRoot creates a new file inside a root (as well as any missing parent\n// directories) and returns a handle to said file. This effectively has\n// open(O_CREAT|O_NOFOLLOW) semantics. If you want the creation to use O_EXCL,\n// include it in the passed flags. The fileMode argument uses unix.* mode bits,\n// *not* os.FileMode.\nfunc CreateInRoot(root, subpath string, flags int, fileMode uint32) (*os.File, error) {\n\tdirFd, filename, err := MkdirAllParentInRoot(root, subpath, 0o755)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer dirFd.Close()\n\n\t// We know that the filename does not have any \"/\" components, and that\n\t// dirFd is inside the root. O_NOFOLLOW will stop us from following\n\t// trailing symlinks, so this is safe to do. libpathrs's Root::create_file\n\t// works the same way.\n\tflags |= unix.O_CREAT | unix.O_NOFOLLOW\n\tfd, err := linux.Openat(int(dirFd.Fd()), filename, flags, fileMode)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn os.NewFile(uintptr(fd), root+\"/\"+subpath), nil\n}\n"
  },
  {
    "path": "internal/sys/doc.go",
    "content": "// Package sys is an internal package that contains helper methods for dealing\n// with Linux that are more complicated than basic wrappers. Basic wrappers\n// usually belong in internal/linux. If you feel something belongs in\n// libcontainer/utils or libcontainer/system, it probably belongs here instead.\npackage sys\n"
  },
  {
    "path": "internal/sys/opath_linux.go",
    "content": "package sys\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"strconv\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/internal/pathrs\"\n)\n\n// FchmodFile is a wrapper around fchmodat2(AT_EMPTY_PATH) with fallbacks for\n// older kernels. This is distinct from [File.Chmod] and [unix.Fchmod] in that\n// it works on O_PATH file descriptors.\nfunc FchmodFile(f *os.File, mode uint32) error {\n\terr := unix.Fchmodat(int(f.Fd()), \"\", mode, unix.AT_EMPTY_PATH)\n\t// If fchmodat2(2) is not available at all, golang.org/x/unix (probably\n\t// in order to mirror glibc) returns EOPNOTSUPP rather than EINVAL\n\t// (what the kernel actually returns for invalid flags, which is being\n\t// emulated) or ENOSYS (which is what glibc actually sees).\n\tif err != unix.EINVAL && err != unix.EOPNOTSUPP { //nolint:errorlint // unix errors are bare\n\t\t// err == nil is implicitly handled\n\t\treturn os.NewSyscallError(\"fchmodat2 AT_EMPTY_PATH\", err)\n\t}\n\n\t// AT_EMPTY_PATH support was added to fchmodat2 in Linux 6.6\n\t// (5daeb41a6fc9d0d81cb2291884b7410e062d8fa1). The alternative for\n\t// older kernels is to go through /proc.\n\tfdDir, closer, err2 := pathrs.ProcThreadSelfOpen(\"fd/\", unix.O_DIRECTORY)\n\tif err2 != nil {\n\t\treturn fmt.Errorf(\"fchmodat2 AT_EMPTY_PATH fallback: %w\", err2)\n\t}\n\tdefer closer()\n\tdefer fdDir.Close()\n\n\terr = unix.Fchmodat(int(fdDir.Fd()), strconv.Itoa(int(f.Fd())), mode, 0)\n\tif err != nil {\n\t\terr = fmt.Errorf(\"fchmodat /proc/self/fd/%d: %w\", f.Fd(), err)\n\t}\n\truntime.KeepAlive(f)\n\treturn err\n}\n\n// FchownFile is a wrapper around fchownat(AT_EMPTY_PATH). This is distinct\n// from [File.Chown] and [unix.Fchown] in that it works on O_PATH file\n// descriptors.\nfunc FchownFile(f *os.File, uid, gid int) error {\n\terr := unix.Fchownat(int(f.Fd()), \"\", uid, gid, unix.AT_EMPTY_PATH)\n\truntime.KeepAlive(f)\n\treturn os.NewSyscallError(\"fchownat AT_EMPTY_PATH\", err)\n}\n"
  },
  {
    "path": "internal/sys/sysctl_linux.go",
    "content": "package sys\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/procfs\"\n)\n\nfunc procfsOpenRoot(proc *procfs.Handle, subpath string, flags int) (*os.File, error) {\n\thandle, err := proc.OpenRoot(subpath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer handle.Close()\n\n\treturn pathrs.Reopen(handle, flags)\n}\n\n// WriteSysctls sets the given sysctls to the requested values.\nfunc WriteSysctls(sysctls map[string]string) error {\n\t// We are going to write multiple sysctls, which require writing to an\n\t// unmasked procfs which is not going to be cached. To avoid creating a new\n\t// procfs instance for each one, just allocate one handle for all of them.\n\tproc, err := procfs.OpenUnsafeProcRoot()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer proc.Close()\n\n\tfor key, value := range sysctls {\n\t\tkeyPath := strings.ReplaceAll(key, \".\", \"/\")\n\n\t\tsysctlFile, err := procfsOpenRoot(proc, \"sys/\"+keyPath, unix.O_WRONLY|unix.O_TRUNC|unix.O_CLOEXEC)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"open sysctl %s file: %w\", key, err)\n\t\t}\n\t\tdefer sysctlFile.Close()\n\n\t\t_, err = sysctlFile.WriteString(value)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to write sysctl %s = %q: %w\", key, value, err)\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "internal/sys/verify_inode_unix.go",
    "content": "package sys\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// VerifyInodeFunc is the callback passed to [VerifyInode] to check if the\n// inode is the expected type (and on the correct filesystem type, in the case\n// of filesystem-specific inodes).\ntype VerifyInodeFunc func(stat *unix.Stat_t, statfs *unix.Statfs_t) error\n\n// VerifyInode verifies that the underlying inode for the given file matches an\n// expected inode type (possibly on a particular kind of filesystem). This is\n// mainly a wrapper around [VerifyInodeFunc].\nfunc VerifyInode(file *os.File, checkFunc VerifyInodeFunc) error {\n\tvar stat unix.Stat_t\n\tif err := unix.Fstat(int(file.Fd()), &stat); err != nil {\n\t\treturn fmt.Errorf(\"fstat %q: %w\", file.Name(), err)\n\t}\n\tvar statfs unix.Statfs_t\n\tif err := unix.Fstatfs(int(file.Fd()), &statfs); err != nil {\n\t\treturn fmt.Errorf(\"fstatfs %q: %w\", file.Name(), err)\n\t}\n\truntime.KeepAlive(file)\n\treturn checkFunc(&stat, &statfs)\n}\n"
  },
  {
    "path": "internal/third_party/systemd/activation/files_unix.go",
    "content": "// Copyright 2015 CoreOS, 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//go:build !windows\n\n// Package activation implements primitives for systemd socket activation.\n//\n// It is a partial copy of https://github.com/coreos/go-systemd/v22/activation\n// (https://github.com/coreos/go-systemd/blob/ce60782c0aabb616faa8e60f91e639d91f631e99/activation/files_unix.go),\n// to avoid bringing in crypto/tls dependency.\npackage activation\n\nimport (\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n)\n\nconst (\n\t// listenFdsStart corresponds to `SD_LISTEN_FDS_START`.\n\tlistenFdsStart = 3\n)\n\n// Files returns a slice containing a os.File object for each\n// file descriptor passed to this process via systemd fd-passing protocol.\n//\n// The order of the file descriptors is preserved in the returned slice.\nfunc Files() []*os.File {\n\tpid, err := strconv.Atoi(os.Getenv(\"LISTEN_PID\"))\n\tif err != nil || pid != os.Getpid() {\n\t\treturn nil\n\t}\n\n\tnfds, err := strconv.Atoi(os.Getenv(\"LISTEN_FDS\"))\n\tif err != nil || nfds <= 0 {\n\t\treturn nil\n\t}\n\n\tnames := strings.Split(os.Getenv(\"LISTEN_FDNAMES\"), \":\")\n\n\tfiles := make([]*os.File, 0, nfds)\n\tfor fd := listenFdsStart; fd < listenFdsStart+nfds; fd++ {\n\t\tsyscall.CloseOnExec(fd)\n\t\tname := \"LISTEN_FD_\" + strconv.Itoa(fd)\n\t\toffset := fd - listenFdsStart\n\t\tif offset < len(names) && len(names[offset]) > 0 {\n\t\t\tname = names[offset]\n\t\t}\n\t\tfiles = append(files, os.NewFile(uintptr(fd), name))\n\t}\n\n\treturn files\n}\n"
  },
  {
    "path": "kill.go",
    "content": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/urfave/cli\"\n\t\"golang.org/x/sys/unix\"\n)\n\nvar killCommand = cli.Command{\n\tName:  \"kill\",\n\tUsage: \"kill sends the specified signal (default: SIGTERM) to the container's init process\",\n\tArgsUsage: `<container-id> [signal]\n\nWhere \"<container-id>\" is the name for the instance of the container and\n\"[signal]\" is the signal to be sent to the init process.\n\nEXAMPLE:\nFor example, if the container id is \"ubuntu01\" the following will send a \"KILL\"\nsignal to the init process of the \"ubuntu01\" container:\n\n       # runc kill ubuntu01 KILL`,\n\tFlags: []cli.Flag{\n\t\tcli.BoolFlag{\n\t\t\tName:   \"all, a\",\n\t\t\tUsage:  \"(obsoleted, do not use)\",\n\t\t\tHidden: true,\n\t\t},\n\t},\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 1, minArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := checkArgs(context, 2, maxArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcontainer, err := getContainer(context)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tsigstr := context.Args().Get(1)\n\t\tif sigstr == \"\" {\n\t\t\tsigstr = \"SIGTERM\"\n\t\t}\n\n\t\tsignal, err := parseSignal(sigstr)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = container.Signal(signal)\n\t\tif errors.Is(err, libcontainer.ErrNotRunning) && context.Bool(\"all\") {\n\t\t\terr = nil\n\t\t}\n\t\treturn err\n\t},\n}\n\nfunc parseSignal(rawSignal string) (unix.Signal, error) {\n\ts, err := strconv.Atoi(rawSignal)\n\tif err == nil {\n\t\treturn unix.Signal(s), nil\n\t}\n\tsig := strings.ToUpper(rawSignal)\n\tif !strings.HasPrefix(sig, \"SIG\") {\n\t\tsig = \"SIG\" + sig\n\t}\n\tsignal := unix.SignalNum(sig)\n\tif signal == 0 {\n\t\treturn -1, fmt.Errorf(\"unknown signal %q\", rawSignal)\n\t}\n\treturn signal, nil\n}\n"
  },
  {
    "path": "libcontainer/README.md",
    "content": "# libcontainer\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/opencontainers/runc/libcontainer.svg)](https://pkg.go.dev/github.com/opencontainers/runc/libcontainer)\n\nLibcontainer provides a native Go implementation for creating containers\nwith namespaces, cgroups, capabilities, and filesystem access controls.\nIt allows you to manage the lifecycle of the container performing additional operations\nafter the container is created.\n\n\n## Container\nA container is a self contained execution environment that shares the kernel of the\nhost system and which is (optionally) isolated from other containers in the system.\n\n## Using libcontainer\n\nFor a brief overview of using libcontainer, see [example_test.go](example_test.go).\n\n### Container init\n\nBecause containers are spawned in a two step process you will need a binary that\nwill be executed as the init process for the container. In libcontainer, we use\nthe current binary (/proc/self/exe) to be executed as the init process, and use\narg \"init\", we call the first step process \"bootstrap\", so you always need a \"init\"\nfunction as the entry of \"bootstrap\".\n\nIn addition to the go init function the early stage bootstrap is handled by importing\n[nsenter](../nsenter/README.md).\n\nFor details on how runc implements such \"init\", see\n[../init.go](../init.go) and [init_linux.go](init_linux.go).\n\n## Checkpoint & Restore\n\nlibcontainer now integrates [CRIU](http://criu.org/) for checkpointing and restoring containers.\nThis lets you save the state of a process running inside a container to disk, and then restore\nthat state into a new process, on the same machine or on another machine.\n\n`criu` version 1.5.2 or higher is required to use checkpoint and restore.\nIf you don't already  have `criu` installed, you can build it from source, following the\n[online instructions](http://criu.org/Installation). `criu` is also installed in the docker image\ngenerated when building libcontainer with docker.\n\n\n## Copyright and license\n\nCode and documentation copyright 2014 Docker, inc.\nThe code and documentation are released under the [Apache 2.0 license](../LICENSE).\nThe documentation is also released under Creative Commons Attribution 4.0 International License.\nYou may obtain a copy of the license, titled CC-BY-4.0, at http://creativecommons.org/licenses/by/4.0/.\n"
  },
  {
    "path": "libcontainer/SPEC.md",
    "content": "## Container Specification - v1\n\nThis is the standard configuration for version 1 containers.  It includes\nnamespaces, standard filesystem setup, a default Linux capability set, and\ninformation about resource reservations.  It also has information about any\npopulated environment settings for the processes running inside a container.\n\nAlong with the configuration of how a container is created the standard also\ndiscusses actions that can be performed on a container to manage and inspect\ninformation about the processes running inside.\n\nThe v1 profile is meant to be able to accommodate the majority of applications\nwith a strong security configuration.\n\n### System Requirements and Compatibility\n\nMinimum requirements:\n* Kernel version - 3.10 recommended 2.6.2x minimum(with backported patches)\n* Mounted cgroups with each subsystem in its own hierarchy\n\n\n### Namespaces\n\n|     Flag        | Enabled |\n| --------------- | ------- |\n| CLONE_NEWPID    |    1    |\n| CLONE_NEWUTS    |    1    |\n| CLONE_NEWIPC    |    1    |\n| CLONE_NEWNET    |    1    |\n| CLONE_NEWNS     |    1    |\n| CLONE_NEWUSER   |    1    |\n| CLONE_NEWCGROUP |    1    |\n\nNamespaces are created for the container via the `unshare` syscall.\n\n\n### Filesystem\n\nA root filesystem must be provided to a container for execution.  The container\nwill use this root filesystem (rootfs) to jail and spawn processes inside where\nthe binaries and system libraries are local to that directory.  Any binaries\nto be executed must be contained within this rootfs.\n\nMounts that happen inside the container are automatically cleaned up when the\ncontainer exits as the mount namespace is destroyed and the kernel will\nunmount all the mounts that were setup within that namespace.\n\nFor a container to execute properly there are certain filesystems that\nare required to be mounted within the rootfs that the runtime will setup.\n\n|     Path    |  Type  |                  Flags                 |                 Data                     |\n| ----------- | ------ | -------------------------------------- | ---------------------------------------- |\n| /proc       | proc   | MS_NOEXEC,MS_NOSUID,MS_NODEV           |                                          |\n| /dev        | tmpfs  | MS_NOEXEC,MS_STRICTATIME               | mode=755                                 |\n| /dev/shm    | tmpfs  | MS_NOEXEC,MS_NOSUID,MS_NODEV           | mode=1777,size=65536k                    |\n| /dev/mqueue | mqueue | MS_NOEXEC,MS_NOSUID,MS_NODEV           |                                          |\n| /dev/pts    | devpts | MS_NOEXEC,MS_NOSUID                    | newinstance,ptmxmode=0666,mode=620,gid=5 |\n| /sys        | sysfs  | MS_NOEXEC,MS_NOSUID,MS_NODEV,MS_RDONLY |                                          |\n\n\nAfter a container's filesystems are mounted within the newly created\nmount namespace `/dev` will need to be populated with a set of device nodes.\nIt is expected that a rootfs does not need to have any device nodes specified\nfor `/dev` within the rootfs as the container will setup the correct devices\nthat are required for executing a container's process.\n\n|      Path    | Mode |   Access   |\n| ------------ | ---- | ---------- |\n| /dev/null    | 0666 |  rwm       |\n| /dev/zero    | 0666 |  rwm       |\n| /dev/full    | 0666 |  rwm       |\n| /dev/tty     | 0666 |  rwm       |\n| /dev/random  | 0666 |  rwm       |\n| /dev/urandom | 0666 |  rwm       |\n\n\n**ptmx**\n`/dev/ptmx` will need to be a symlink to the host's `/dev/ptmx` within\nthe container.\n\nThe use of a pseudo TTY is optional within a container and it should support both.\nIf a pseudo is provided to the container `/dev/console` will need to be\nsetup by binding the console in `/dev/` after it has been populated and mounted\nin tmpfs.\n\n|      Source     | Destination  | UID GID | Mode | Type |\n| --------------- | ------------ | ------- | ---- | ---- |\n| *pty host path* | /dev/console | 0 0     | 0600 | bind |\n\n\nAfter `/dev/null` has been setup we check for any external links between\nthe container's io, STDIN, STDOUT, STDERR.  If the container's io is pointing\nto `/dev/null` outside the container we close and `dup2` the `/dev/null`\nthat is local to the container's rootfs.\n\n\nAfter the container has `/proc` mounted a few standard symlinks are setup\nwithin `/dev/` for the io.\n\n|    Source       | Destination |\n| --------------- | ----------- |\n| /proc/self/fd   | /dev/fd     |\n| /proc/self/fd/0 | /dev/stdin  |\n| /proc/self/fd/1 | /dev/stdout |\n| /proc/self/fd/2 | /dev/stderr |\n\nA `pivot_root` is used to change the root for the process, effectively\njailing the process inside the rootfs.\n\n```c\nput_old = mkdir(...);\npivot_root(rootfs, put_old);\nchdir(\"/\");\nunmount(put_old, MS_DETACH);\nrmdir(put_old);\n```\n\nFor container's running with a rootfs inside `ramfs` a `MS_MOVE` combined\nwith a `chroot` is required as `pivot_root` is not supported in `ramfs`.\n\n```c\nmount(rootfs, \"/\", NULL, MS_MOVE, NULL);\nchroot(\".\");\nchdir(\"/\");\n```\n\nThe `umask` is set back to `0022` after the filesystem setup has been completed.\n\n### Resources\n\nCgroups are used to handle resource allocation for containers.  This includes\nsystem resources like cpu, memory, and device access.\n\n| Subsystem  | Enabled |\n| ---------- | ------- |\n| devices    | 1       |\n| memory     | 1       |\n| cpu        | 1       |\n| cpuacct    | 1       |\n| cpuset     | 1       |\n| blkio      | 1       |\n| perf_event | 1       |\n| freezer    | 1       |\n| hugetlb    | 1       |\n| pids       | 1       |\n\n\nAll cgroup subsystem are joined so that statistics can be collected from\neach of the subsystems.  Freezer does not expose any stats but is joined\nso that containers can be paused and resumed.\n\nThe parent process of the container's init must place the init pid inside\nthe correct cgroups before the initialization begins.  This is done so\nthat no processes or threads escape the cgroups.  This sync is\ndone via a pipe ( specified in the runtime section below ) that the container's\ninit process will block waiting for the parent to finish setup.\n\n### IntelRdt\n\nIntel platforms with new Xeon CPU support Resource Director Technology (RDT).\nCache Allocation Technology (CAT) and Memory Bandwidth Allocation (MBA) are\ntwo sub-features of RDT.\n\nCache Allocation Technology (CAT) provides a way for the software to restrict\ncache allocation to a defined 'subset' of L3 cache which may be overlapping\nwith other 'subsets'. The different subsets are identified by class of\nservice (CLOS) and each CLOS has a capacity bitmask (CBM).\n\nMemory Bandwidth Allocation (MBA) provides indirect and approximate throttle\nover memory bandwidth for the software. A user controls the resource by\nindicating the percentage of maximum memory bandwidth or memory bandwidth limit\nin MBps unit if MBA Software Controller is enabled.\n\nIt can be used to handle L3 cache and memory bandwidth resources allocation\nfor containers if hardware and kernel support Intel RDT CAT and MBA features.\n\nIn Linux 4.10 kernel or newer, the interface is defined and exposed via\n\"resource control\" filesystem, which is a \"cgroup-like\" interface.\n\nComparing with cgroups, it has similar process management lifecycle and\ninterfaces in a container. But unlike cgroups' hierarchy, it has single level\nfilesystem layout.\n\nCAT and MBA features are introduced in Linux 4.10 and 4.12 kernel via\n\"resource control\" filesystem.\n\nIntel RDT \"resource control\" filesystem hierarchy:\n```\nmount -t resctrl resctrl /sys/fs/resctrl\ntree /sys/fs/resctrl\n/sys/fs/resctrl/\n|-- info\n|   |-- L3\n|   |   |-- cbm_mask\n|   |   |-- min_cbm_bits\n|   |   |-- num_closids\n|   |-- MB\n|       |-- bandwidth_gran\n|       |-- delay_linear\n|       |-- min_bandwidth\n|       |-- num_closids\n|-- ...\n|-- schemata\n|-- tasks\n|-- <container_id>\n    |-- ...\n    |-- schemata\n    |-- tasks\n```\n\nFor runc, we can make use of `tasks` and `schemata` configuration for L3\ncache and memory bandwidth resources constraints.\n\nThe file `tasks` has a list of tasks that belongs to this group (e.g.,\n<container_id>\" group). Tasks can be added to a group by writing the task ID\nto the \"tasks\" file (which will automatically remove them from the previous\ngroup to which they belonged). New tasks created by fork(2) and clone(2) are\nadded to the same group as their parent.\n\nThe file `schemata` has a list of all the resources available to this group.\nEach resource (L3 cache, memory bandwidth) has its own line and format.\n\nL3 cache schema:\nIt has allocation bitmasks/values for L3 cache on each socket, which\ncontains L3 cache id and capacity bitmask (CBM).\n```\n\tFormat: \"L3:<cache_id0>=<cbm0>;<cache_id1>=<cbm1>;...\"\n```\nFor example, on a two-socket machine, the schema line could be \"L3:0=ff;1=c0\"\nwhich means L3 cache id 0's CBM is 0xff, and L3 cache id 1's CBM is 0xc0.\n\nThe valid L3 cache CBM is a *contiguous bits set* and number of bits that can\nbe set is less than the max bit. The max bits in the CBM is varied among\nsupported Intel CPU models. Kernel will check if it is valid when writing.\ne.g., default value 0xfffff in root indicates the max bits of CBM is 20\nbits, which mapping to entire L3 cache capacity. Some valid CBM values to\nset in a group: 0xf, 0xf0, 0x3ff, 0x1f00 and etc.\n\nMemory bandwidth schema:\nIt has allocation values for memory bandwidth on each socket, which contains\nL3 cache id and memory bandwidth.\n```\n\tFormat: \"MB:<cache_id0>=bandwidth0;<cache_id1>=bandwidth1;...\"\n```\nFor example, on a two-socket machine, the schema line could be \"MB:0=20;1=70\"\n\nThe minimum bandwidth percentage value for each CPU model is predefined and\ncan be looked up through \"info/MB/min_bandwidth\". The bandwidth granularity\nthat is allocated is also dependent on the CPU model and can be looked up at\n\"info/MB/bandwidth_gran\". The available bandwidth control steps are:\nmin_bw + N * bw_gran. Intermediate values are rounded to the next control\nstep available on the hardware.\n\nIf MBA Software Controller is enabled through mount option \"-o mba_MBps\"\nmount -t resctrl resctrl -o mba_MBps /sys/fs/resctrl\nWe could specify memory bandwidth in \"MBps\" (Mega Bytes per second) unit\ninstead of \"percentages\". The kernel underneath would use a software feedback\nmechanism or a \"Software Controller\" which reads the actual bandwidth using\nMBM counters and adjust the memory bandwidth percentages to ensure:\n\"actual memory bandwidth < user specified memory bandwidth\".\n\nFor example, on a two-socket machine, the schema line could be\n\"MB:0=5000;1=7000\" which means 5000 MBps memory bandwidth limit on socket 0\nand 7000 MBps memory bandwidth limit on socket 1.\n\nFor more information about Intel RDT kernel interface:\nhttps://www.kernel.org/doc/Documentation/x86/intel_rdt_ui.txt\n\n```\nAn example for runc:\nConsider a two-socket machine with two L3 caches where the default CBM is\n0x7ff and the max CBM length is 11 bits, and minimum memory bandwidth of 10%\nwith a memory bandwidth granularity of 10%.\n\nTasks inside the container only have access to the \"upper\" 7/11 of L3 cache\non socket 0 and the \"lower\" 5/11 L3 cache on socket 1, and may use a\nmaximum memory bandwidth of 20% on socket 0 and 70% on socket 1.\n\n\"linux\": {\n    \"intelRdt\": {\n        \"closID\": \"guaranteed_group\",\n        \"l3CacheSchema\": \"L3:0=7f0;1=1f\",\n        \"memBwSchema\": \"MB:0=20;1=70\"\n    }\n}\n```\n\n### Security\n\nThe standard set of Linux capabilities that are set in a container\nprovide a good default for security and flexibility for the applications.\n\n\n|     Capability       | Enabled |\n| -------------------- | ------- |\n| CAP_NET_RAW          | 1       |\n| CAP_NET_BIND_SERVICE | 1       |\n| CAP_AUDIT_READ       | 1       |\n| CAP_AUDIT_WRITE      | 1       |\n| CAP_DAC_OVERRIDE     | 1       |\n| CAP_SETFCAP          | 1       |\n| CAP_SETPCAP          | 1       |\n| CAP_SETGID           | 1       |\n| CAP_SETUID           | 1       |\n| CAP_MKNOD            | 1       |\n| CAP_CHOWN            | 1       |\n| CAP_FOWNER           | 1       |\n| CAP_FSETID           | 1       |\n| CAP_KILL             | 1       |\n| CAP_SYS_CHROOT       | 1       |\n| CAP_NET_BROADCAST    | 0       |\n| CAP_SYS_MODULE       | 0       |\n| CAP_SYS_RAWIO        | 0       |\n| CAP_SYS_PACCT        | 0       |\n| CAP_SYS_ADMIN        | 0       |\n| CAP_SYS_NICE         | 0       |\n| CAP_SYS_RESOURCE     | 0       |\n| CAP_SYS_TIME         | 0       |\n| CAP_SYS_TTY_CONFIG   | 0       |\n| CAP_AUDIT_CONTROL    | 0       |\n| CAP_MAC_OVERRIDE     | 0       |\n| CAP_MAC_ADMIN        | 0       |\n| CAP_NET_ADMIN        | 0       |\n| CAP_SYSLOG           | 0       |\n| CAP_DAC_READ_SEARCH  | 0       |\n| CAP_LINUX_IMMUTABLE  | 0       |\n| CAP_IPC_LOCK         | 0       |\n| CAP_IPC_OWNER        | 0       |\n| CAP_SYS_PTRACE       | 0       |\n| CAP_SYS_BOOT         | 0       |\n| CAP_LEASE            | 0       |\n| CAP_WAKE_ALARM       | 0       |\n| CAP_BLOCK_SUSPEND    | 0       |\n\n\nAdditional security layers like [apparmor](https://wiki.ubuntu.com/AppArmor)\nand [selinux](http://selinuxproject.org/page/Main_Page) can be used with\nthe containers.  A container should support setting an apparmor profile or\nselinux process and mount labels if provided in the configuration.\n\nStandard apparmor profile:\n```c\n#include <tunables/global>\nprofile <profile_name> flags=(attach_disconnected,mediate_deleted) {\n  #include <abstractions/base>\n  network,\n  capability,\n  file,\n  umount,\n\n  deny @{PROC}/sys/fs/** wklx,\n  deny @{PROC}/sysrq-trigger rwklx,\n  deny @{PROC}/mem rwklx,\n  deny @{PROC}/kmem rwklx,\n  deny @{PROC}/sys/kernel/[^s][^h][^m]* wklx,\n  deny @{PROC}/sys/kernel/*/** wklx,\n\n  deny mount,\n\n  deny /sys/[^f]*/** wklx,\n  deny /sys/f[^s]*/** wklx,\n  deny /sys/fs/[^c]*/** wklx,\n  deny /sys/fs/c[^g]*/** wklx,\n  deny /sys/fs/cg[^r]*/** wklx,\n  deny /sys/firmware/efi/efivars/** rwklx,\n  deny /sys/kernel/security/** rwklx,\n}\n```\n\n[seccomp](https://en.wikipedia.org/wiki/Seccomp) can be used to apply filters\nto the system calls used in a container. The set of filter expressions allows\nyou to match against syscall numbers (automatically resolved from syscall\nnames) and apply various comparison operators to syscall arguments.\n\nWhen a filter rule matches, the associated action is executed - such as killing\nthe process or thread, returning an errno value without executing the syscall,\nforwarding the request to a user-space agent to handle, emitting a log entry,\nor permitting the syscall to execute.\n\nThe primary use-case is to provide an explicit allow-list of syscalls for a\ncontainer, to reduce the kernel API attack surface exposed to the container.\nHistorically, seccomp has protected containers against various kernel 0-day\nvulnerabilities, so a strong seccomp filter is highly recommended.\n\nlibcontainer does not provide a default filter, but higher-level\nruntimes tend to define their own filters for use with runc (see\n[oci-runtime-seccomp](https://github.com/opencontainers/runtime-spec/blob/v1.2.1/config-linux.md#seccomp)\nfor more information on how to write your own filters).\n\n### Runtime and Init Process\n\nDuring container creation the parent process needs to talk to the container's init\nprocess and have a form of synchronization.  This is accomplished by creating\na pipe that is passed to the container's init.  When the init process first spawns\nit will block on its side of the pipe until the parent closes its side.  This\nallows the parent to have time to set the new process inside a cgroup hierarchy\nand/or write any uid/gid mappings required for user namespaces.\nThe pipe is passed to the init process via FD 3.\n\nThe application consuming libcontainer should be compiled statically.  libcontainer\ndoes not define any init process and the arguments provided are used to `exec` the\nprocess inside the application.  There should be no long running init within the\ncontainer spec.\n\nIf a pseudo tty is provided to a container it will open and `dup2` the console\nas the container's STDIN, STDOUT, STDERR as well as mounting the console\nas `/dev/console`.\n\nAn extra set of mounts are provided to a container and setup for use.  A container's\nrootfs can contain some non portable files inside that can cause side effects during\nexecution of a process.  These files are usually created and populated with the container\nspecific information via the runtime.\n\n**Extra runtime files:**\n* /etc/hosts\n* /etc/resolv.conf\n* /etc/hostname\n* /etc/localtime\n\n\n#### Defaults\n\nThere are a few defaults that can be overridden by users, but in their omission\nthese apply to processes within a container.\n\n|       Type          |             Value              |\n| ------------------- | ------------------------------ |\n| Parent Death Signal | SIGKILL                        |\n| UID                 | 0                              |\n| GID                 | 0                              |\n| GROUPS              | 0, NULL                        |\n| CWD                 | \"/\"                            |\n| $HOME               | Current user's home dir or \"/\" |\n| Readonly rootfs     | false                          |\n| Pseudo TTY          | false                          |\n\n\n## Actions\n\nAfter a container is created there is a standard set of actions that can\nbe done to the container.  These actions are part of the public API for\na container.\n\n|     Action     |                         Description                                |\n| -------------- | ------------------------------------------------------------------ |\n| Get processes  | Return all the pids for processes running inside a container       |\n| Get Stats      | Return resource statistics for the container as a whole            |\n| Wait           | Waits on the container's init process ( pid 1 )                    |\n| Wait Process   | Wait on any of the container's processes returning the exit status |\n| Destroy        | Kill the container's init process and remove any filesystem state  |\n| Signal         | Send a signal to the container's init process                      |\n| Signal Process | Send a signal to any of the container's processes                  |\n| Pause          | Pause all processes inside the container                           |\n| Resume         | Resume all processes inside the container if paused                |\n| Exec           | Execute a new process inside of the container  ( requires setns )  |\n| Set            | Setup configs of the container after it's created                  |\n\n### Execute a new process inside of a running container\n\nUser can execute a new process inside of a running container. Any binaries to be\nexecuted must be accessible within the container's rootfs.\n\nThe started process will run inside the container's rootfs. Any changes\nmade by the process to the container's filesystem will persist after the\nprocess finished executing.\n\nThe started process will join all the container's existing namespaces. When the\ncontainer is paused, the process will also be paused and will resume when\nthe container is unpaused.  The started process will only run when the container's\nprimary process (PID 1) is running, and will not be restarted when the container\nis restarted.\n\n#### Planned additions\n\nThe started process will have its own cgroups nested inside the container's\ncgroups. This is used for process tracking and optionally resource allocation\nhandling for the new process. Freezer cgroup is required, the rest of the cgroups\nare optional. The process executor must place its pid inside the correct\ncgroups before starting the process. This is done so that no child processes or\nthreads can escape the cgroups.\n\nWhen the process is stopped, the process executor will try (in a best-effort way)\nto stop all its children and remove the sub-cgroups.\n"
  },
  {
    "path": "libcontainer/apparmor/apparmor.go",
    "content": "// Package apparmor provides a minimal set of helpers to configure the AppArmor\n// profile of the current process, effectively acting as a very stripped-down\n// version of libapparmor.\npackage apparmor\n\nimport \"errors\"\n\n// IsEnabled returns true if apparmor is enabled for the host.\nfunc IsEnabled() bool {\n\treturn isEnabled()\n}\n\n// ApplyProfile will apply the profile with the specified name to the process\n// after the next exec. It is only supported on Linux and produces an\n// [ErrApparmorNotEnabled] on other platforms.\nfunc ApplyProfile(name string) error {\n\treturn applyProfile(name)\n}\n\n// ErrApparmorNotEnabled indicates that AppArmor is not enabled or not supported.\nvar ErrApparmorNotEnabled = errors.New(\"apparmor: config provided but apparmor not supported\")\n"
  },
  {
    "path": "libcontainer/apparmor/apparmor_linux.go",
    "content": "package apparmor\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"sync\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/internal/pathrs\"\n)\n\nvar (\n\tappArmorEnabled bool\n\tcheckAppArmor   sync.Once\n)\n\n// isEnabled returns true if apparmor is enabled for the host.\nfunc isEnabled() bool {\n\tcheckAppArmor.Do(func() {\n\t\tif _, err := os.Stat(\"/sys/kernel/security/apparmor\"); err == nil {\n\t\t\tbuf, err := os.ReadFile(\"/sys/module/apparmor/parameters/enabled\")\n\t\t\tappArmorEnabled = err == nil && len(buf) > 1 && buf[0] == 'Y'\n\t\t}\n\t})\n\treturn appArmorEnabled\n}\n\nfunc setProcAttr(attr, value string) error {\n\tattr = pathrs.LexicallyCleanPath(attr)\n\tattrSubPath := \"attr/apparmor/\" + attr\n\tif _, err := os.Stat(\"/proc/self/\" + attrSubPath); errors.Is(err, os.ErrNotExist) {\n\t\t// fall back to the old convention\n\t\tattrSubPath = \"attr/\" + attr\n\t}\n\n\t// Under AppArmor you can only change your own attr, so there's no reason\n\t// to not use /proc/thread-self/ (instead of /proc/<tid>/, like libapparmor\n\t// does).\n\tf, closer, err := pathrs.ProcThreadSelfOpen(attrSubPath, unix.O_WRONLY|unix.O_CLOEXEC)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer closer()\n\tdefer f.Close()\n\n\t_, err = f.WriteString(value)\n\treturn err\n}\n\n// changeOnExec reimplements aa_change_onexec from libapparmor in Go.\nfunc changeOnExec(name string) error {\n\tif err := setProcAttr(\"exec\", \"exec \"+name); err != nil {\n\t\treturn fmt.Errorf(\"apparmor failed to apply profile: %w\", err)\n\t}\n\treturn nil\n}\n\n// applyProfile will apply the profile with the specified name to the process\n// after the next exec.\nfunc applyProfile(name string) error {\n\tif name == \"\" {\n\t\treturn nil\n\t}\n\n\treturn changeOnExec(name)\n}\n"
  },
  {
    "path": "libcontainer/apparmor/apparmor_unsupported.go",
    "content": "//go:build !linux\n\npackage apparmor\n\nfunc isEnabled() bool {\n\treturn false\n}\n\nfunc applyProfile(name string) error {\n\tif name != \"\" {\n\t\treturn ErrApparmorNotEnabled\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "libcontainer/capabilities/capabilities.go",
    "content": "//go:build linux\n\n// Package capabilities provides helpers for managing Linux capabilities.\npackage capabilities\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"maps\"\n\t\"slices\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n\n\t\"github.com/moby/sys/capability\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/sirupsen/logrus\"\n)\n\nfunc capToStr(c capability.Cap) string {\n\treturn \"CAP_\" + strings.ToUpper(c.String())\n}\n\nvar capMap = sync.OnceValues(func() (map[string]capability.Cap, error) {\n\tlist, err := capability.ListSupported()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcm := make(map[string]capability.Cap, len(list))\n\tfor _, c := range list {\n\t\tcm[capToStr(c)] = c\n\t}\n\treturn cm, nil\n})\n\n// KnownCapabilities returns the list of the known capabilities.\n// Used by `runc features`.\nfunc KnownCapabilities() []string {\n\tlist := capability.ListKnown()\n\tres := make([]string, len(list))\n\tfor i, c := range list {\n\t\tres[i] = \"CAP_\" + strings.ToUpper(c.String())\n\t}\n\treturn res\n}\n\n// New creates a new Caps from the given Capabilities config. Unknown Capabilities\n// or Capabilities that are unavailable in the current environment are ignored,\n// printing a warning instead.\nfunc New(capConfig *configs.Capabilities) (*Caps, error) {\n\tvar c Caps\n\tif capConfig == nil {\n\t\treturn &c, nil\n\t}\n\n\t_, err := capMap()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tunknownCaps := make(map[string]struct{})\n\tc.caps = map[capability.CapType][]capability.Cap{\n\t\tcapability.BOUNDING:    capSlice(capConfig.Bounding, unknownCaps),\n\t\tcapability.EFFECTIVE:   capSlice(capConfig.Effective, unknownCaps),\n\t\tcapability.INHERITABLE: capSlice(capConfig.Inheritable, unknownCaps),\n\t\tcapability.PERMITTED:   capSlice(capConfig.Permitted, unknownCaps),\n\t\tcapability.AMBIENT:     capSlice(capConfig.Ambient, unknownCaps),\n\t}\n\tif c.pid, err = capability.NewPid2(0); err != nil {\n\t\treturn nil, err\n\t}\n\tif len(unknownCaps) > 0 {\n\t\tlogrus.Warn(\"ignoring unknown or unavailable capabilities: \", slices.Sorted(maps.Keys(unknownCaps)))\n\t}\n\treturn &c, nil\n}\n\n// capSlice converts the slice of capability names in caps, to their numeric\n// equivalent, and returns them as a slice. Unknown or unavailable capabilities\n// are not returned, but appended to unknownCaps.\nfunc capSlice(caps []string, unknownCaps map[string]struct{}) []capability.Cap {\n\tcm, _ := capMap()\n\tout := make([]capability.Cap, 0, len(caps))\n\tfor _, c := range caps {\n\t\tif v, ok := cm[c]; !ok {\n\t\t\tunknownCaps[c] = struct{}{}\n\t\t} else {\n\t\t\tout = append(out, v)\n\t\t}\n\t}\n\treturn out\n}\n\n// Caps holds the capabilities for a container.\ntype Caps struct {\n\tpid  capability.Capabilities\n\tcaps map[capability.CapType][]capability.Cap\n}\n\n// ApplyBoundingSet sets the capability bounding set to those specified in the whitelist.\nfunc (c *Caps) ApplyBoundingSet() error {\n\tif c.pid == nil {\n\t\treturn nil\n\t}\n\tc.pid.Clear(capability.BOUNDING)\n\tc.pid.Set(capability.BOUNDING, c.caps[capability.BOUNDING]...)\n\treturn c.pid.Apply(capability.BOUNDING)\n}\n\n// ApplyCaps sets all the capabilities for the current process in the config.\nfunc (c *Caps) ApplyCaps() error {\n\tif c.pid == nil {\n\t\treturn nil\n\t}\n\tc.pid.Clear(capability.CAPS | capability.BOUNDS)\n\tfor _, g := range []capability.CapType{\n\t\tcapability.EFFECTIVE,\n\t\tcapability.PERMITTED,\n\t\tcapability.INHERITABLE,\n\t\tcapability.BOUNDING,\n\t} {\n\t\tc.pid.Set(g, c.caps[g]...)\n\t}\n\tif err := c.pid.Apply(capability.CAPS | capability.BOUNDS); err != nil {\n\t\treturn fmt.Errorf(\"can't apply capabilities: %w\", err)\n\t}\n\n\t// Old version of capability package used to ignore errors from setting\n\t// ambient capabilities, which is now fixed (see\n\t// https://github.com/kolyshkin/capability/pull/3).\n\t//\n\t// To maintain backward compatibility, set ambient caps one by one and\n\t// don't return any errors, only warn.\n\tambs := c.caps[capability.AMBIENT]\n\terr := capability.ResetAmbient()\n\n\t// EINVAL is returned when the kernel doesn't support ambient capabilities.\n\t// We ignore this because runc supports running on older kernels.\n\tif err != nil && !errors.Is(err, syscall.EINVAL) {\n\t\treturn err\n\t}\n\n\tfor _, a := range ambs {\n\t\terr := capability.SetAmbient(true, a)\n\t\tif err != nil {\n\t\t\tlogrus.Warnf(\"can't raise ambient capability %s: %v\", capToStr(a), err)\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "libcontainer/capabilities/capabilities_linux_test.go",
    "content": "package capabilities\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/moby/sys/capability\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/sirupsen/logrus\"\n\t\"github.com/sirupsen/logrus/hooks/test\"\n)\n\nvar capTypes = []capability.CapType{\n\tcapability.BOUNDING,\n\tcapability.PERMITTED,\n\tcapability.INHERITABLE,\n\tcapability.EFFECTIVE,\n\tcapability.AMBIENT,\n}\n\nfunc TestNew(t *testing.T) {\n\tcs := []string{\"CAP_CHOWN\", \"CAP_UNKNOWN\", \"CAP_UNKNOWN2\"}\n\tconf := configs.Capabilities{\n\t\tBounding:    cs,\n\t\tEffective:   cs,\n\t\tInheritable: cs,\n\t\tPermitted:   cs,\n\t\tAmbient:     cs,\n\t}\n\n\thook := test.NewGlobal()\n\tdefer hook.Reset()\n\n\tlogrus.SetOutput(io.Discard)\n\tcaps, err := New(&conf)\n\tlogrus.SetOutput(os.Stderr)\n\n\tif err != nil {\n\t\tt.Error(err)\n\t}\n\te := hook.AllEntries()\n\tif len(e) != 1 {\n\t\tt.Errorf(\"expected 1 warning, got %d\", len(e))\n\t}\n\n\texpectedLogs := logrus.Entry{\n\t\tLevel:   logrus.WarnLevel,\n\t\tMessage: \"ignoring unknown or unavailable capabilities: [CAP_UNKNOWN CAP_UNKNOWN2]\",\n\t}\n\n\tl := hook.LastEntry()\n\tif l == nil {\n\t\tt.Fatal(\"expected a warning, but got none\")\n\t}\n\tif l.Level != expectedLogs.Level {\n\t\tt.Errorf(\"expected %q, got %q\", expectedLogs.Level, l.Level)\n\t}\n\tif l.Message != expectedLogs.Message {\n\t\tt.Errorf(\"expected %q, got %q\", expectedLogs.Message, l.Message)\n\t}\n\n\tif len(caps.caps) != len(capTypes) {\n\t\tt.Errorf(\"expected %d capability types, got %d: %v\", len(capTypes), len(caps.caps), caps.caps)\n\t}\n\n\tfor _, cType := range capTypes {\n\t\tif i := len(caps.caps[cType]); i != 1 {\n\t\t\tt.Errorf(\"expected 1 capability for %s, got %d: %v\", cType, i, caps.caps[cType])\n\t\t\tcontinue\n\t\t}\n\t\tif caps.caps[cType][0] != capability.CAP_CHOWN {\n\t\t\tt.Errorf(\"expected CAP_CHOWN, got %s: \", caps.caps[cType][0])\n\t\t\tcontinue\n\t\t}\n\t}\n\n\thook.Reset()\n}\n"
  },
  {
    "path": "libcontainer/capabilities/capabilities_unsupported.go",
    "content": "//go:build !linux\n\npackage capabilities\n"
  },
  {
    "path": "libcontainer/cmd_clone.go",
    "content": "package libcontainer\n\nimport \"os/exec\"\n\n// cloneCmd creates a copy of exec.Cmd. It is needed because cmd.Start\n// must only be used once, and go1.26 actually enforces that (see\n// https://go-review.googlesource.com/c/go/+/728642). The implementation\n// is similar to\n//\n//\tcmd = *c\n//\treturn &cmd\n//\n// except it does not copy private fields, or fields populated\n// after the call to cmd.Start.\n//\n// NOTE if Go will add exec.Cmd.Clone, we should switch to it.\nfunc cloneCmd(c *exec.Cmd) *exec.Cmd {\n\tcmd := &exec.Cmd{\n\t\tPath:        c.Path,\n\t\tArgs:        c.Args,\n\t\tEnv:         c.Env,\n\t\tDir:         c.Dir,\n\t\tStdin:       c.Stdin,\n\t\tStdout:      c.Stdout,\n\t\tStderr:      c.Stderr,\n\t\tExtraFiles:  c.ExtraFiles,\n\t\tSysProcAttr: c.SysProcAttr,\n\t\t// Don't copy Process, ProcessState, Err since\n\t\t// these fields are populated after the start.\n\n\t\t// Technically, we do not use Cancel or WaitDelay,\n\t\t// but they are here for the sake of completeness.\n\t\tCancel:    c.Cancel,\n\t\tWaitDelay: c.WaitDelay,\n\t}\n\treturn cmd\n}\n"
  },
  {
    "path": "libcontainer/configs/config.go",
    "content": "// Package configs provides various container-related configuration types\n// used by libcontainer.\npackage configs\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n\tdevices \"github.com/opencontainers/cgroups/devices/config\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n)\n\ntype Rlimit struct {\n\tType int    `json:\"type\"`\n\tHard uint64 `json:\"hard\"`\n\tSoft uint64 `json:\"soft\"`\n}\n\n// IDMap represents UID/GID Mappings for User Namespaces.\ntype IDMap struct {\n\tContainerID int64 `json:\"container_id\"`\n\tHostID      int64 `json:\"host_id\"`\n\tSize        int64 `json:\"size\"`\n}\n\n// Seccomp represents syscall restrictions\n// By default, only the native architecture of the kernel is allowed to be used\n// for syscalls. Additional architectures can be added by specifying them in\n// Architectures.\ntype Seccomp struct {\n\tDefaultAction    Action                   `json:\"default_action\"`\n\tArchitectures    []string                 `json:\"architectures\"`\n\tFlags            []specs.LinuxSeccompFlag `json:\"flags\"`\n\tSyscalls         []*Syscall               `json:\"syscalls\"`\n\tDefaultErrnoRet  *uint                    `json:\"default_errno_ret\"`\n\tListenerPath     string                   `json:\"listener_path,omitempty\"`\n\tListenerMetadata string                   `json:\"listener_metadata,omitempty\"`\n}\n\n// Action is taken upon rule match in Seccomp\ntype Action int\n\nconst (\n\tKill Action = iota + 1\n\tErrno\n\tTrap\n\tAllow\n\tTrace\n\tLog\n\tNotify\n\tKillThread\n\tKillProcess\n)\n\n// Operator is a comparison operator to be used when matching syscall arguments in Seccomp\ntype Operator int\n\nconst (\n\tEqualTo Operator = iota + 1\n\tNotEqualTo\n\tGreaterThan\n\tGreaterThanOrEqualTo\n\tLessThan\n\tLessThanOrEqualTo\n\tMaskEqualTo\n)\n\n// Arg is a rule to match a specific syscall argument in Seccomp\ntype Arg struct {\n\tIndex    uint     `json:\"index\"`\n\tValue    uint64   `json:\"value\"`\n\tValueTwo uint64   `json:\"value_two\"`\n\tOp       Operator `json:\"op\"`\n}\n\n// Syscall is a rule to match a syscall in Seccomp\ntype Syscall struct {\n\tName     string `json:\"name\"`\n\tAction   Action `json:\"action\"`\n\tErrnoRet *uint  `json:\"errnoRet\"`\n\tArgs     []*Arg `json:\"args\"`\n}\n\n// Config defines configuration options for executing a process inside a contained environment.\ntype Config struct {\n\t// NoPivotRoot will use MS_MOVE and a chroot to jail the process into the container's rootfs\n\t// This is a common option when the container is running in ramdisk.\n\tNoPivotRoot bool `json:\"no_pivot_root,omitempty\"`\n\n\t// ParentDeathSignal specifies the signal that is sent to the container's process in the case\n\t// that the parent process dies.\n\tParentDeathSignal int `json:\"parent_death_signal,omitempty\"`\n\n\t// Path to a directory containing the container's root filesystem.\n\tRootfs string `json:\"rootfs\"`\n\n\t// Umask is the umask to use inside of the container.\n\tUmask *uint32 `json:\"umask,omitempty\"`\n\n\t// Readonlyfs will remount the container's rootfs as readonly where only externally mounted\n\t// bind mounts are writtable.\n\tReadonlyfs bool `json:\"readonlyfs,omitempty\"`\n\n\t// Specifies the mount propagation flags to be applied to /.\n\tRootPropagation int `json:\"rootPropagation,omitempty\"`\n\n\t// Mounts specify additional source and destination paths that will be mounted inside the container's\n\t// rootfs and mount namespace if specified.\n\tMounts []*Mount `json:\"mounts\"`\n\n\t// The device nodes that should be automatically created within the container upon container start.  Note, make sure that the node is marked as allowed in the cgroup as well!\n\tDevices []*devices.Device `json:\"devices\"`\n\n\t// NetDevices are key-value pairs, keyed by network device name, moved to the container's network namespace.\n\tNetDevices map[string]*LinuxNetDevice `json:\"netDevices,omitempty\"`\n\n\tMountLabel string `json:\"mount_label,omitempty\"`\n\n\t// Hostname optionally sets the container's hostname if provided.\n\tHostname string `json:\"hostname,omitempty\"`\n\n\t// Domainname optionally sets the container's domainname if provided.\n\tDomainname string `json:\"domainname,omitempty\"`\n\n\t// Namespaces specifies the container's namespaces that it should setup when cloning the init process\n\t// If a namespace is not provided that namespace is shared from the container's parent process.\n\tNamespaces Namespaces `json:\"namespaces\"`\n\n\t// Capabilities specify the capabilities to keep when executing the process inside the container\n\t// All capabilities not specified will be dropped from the processes capability mask.\n\tCapabilities *Capabilities `json:\"capabilities,omitempty\"`\n\n\t// Networks specifies the container's network setup to be created.\n\tNetworks []*Network `json:\"networks,omitempty\"`\n\n\t// Routes can be specified to create entries in the route table as the container is started.\n\tRoutes []*Route `json:\"routes,omitempty\"`\n\n\t// Cgroups specifies specific cgroup settings for the various subsystems that the container is\n\t// placed into to limit the resources the container has available.\n\tCgroups *cgroups.Cgroup `json:\"cgroups\"`\n\n\t// AppArmorProfile specifies the profile to apply to the process running in the container and is\n\t// change at the time the process is executed.\n\tAppArmorProfile string `json:\"apparmor_profile,omitempty\"`\n\n\t// ProcessLabel specifies the label to apply to the process running in the container.  It is\n\t// commonly used by selinux.\n\tProcessLabel string `json:\"process_label,omitempty\"`\n\n\t// Rlimits specifies the resource limits, such as max open files, to set in the container\n\t// If Rlimits are not set, the container will inherit rlimits from the parent process.\n\tRlimits []Rlimit `json:\"rlimits,omitempty\"`\n\n\t// OomScoreAdj specifies the adjustment to be made by the kernel when calculating oom scores\n\t// for a process. Valid values are between the range [-1000, '1000'], where processes with\n\t// higher scores are preferred for being killed. If it is unset then we don't touch the current\n\t// value.\n\t// More information about kernel oom score calculation here: https://lwn.net/Articles/317814/\n\tOomScoreAdj *int `json:\"oom_score_adj,omitempty\"`\n\n\t// UIDMappings is an array of User ID mappings for User Namespaces.\n\tUIDMappings []IDMap `json:\"uid_mappings,omitempty\"`\n\n\t// GIDMappings is an array of Group ID mappings for User Namespaces.\n\tGIDMappings []IDMap `json:\"gid_mappings,omitempty\"`\n\n\t// MaskPaths specifies paths within the container's rootfs to mask over with a bind\n\t// mount pointing to /dev/null as to prevent reads of the file.\n\tMaskPaths []string `json:\"mask_paths,omitempty\"`\n\n\t// ReadonlyPaths specifies paths within the container's rootfs to remount as read-only\n\t// so that these files prevent any writes.\n\tReadonlyPaths []string `json:\"readonly_paths,omitempty\"`\n\n\t// Sysctl is a map of properties and their values. It is the equivalent of using\n\t// sysctl -w my.property.name value in Linux.\n\tSysctl map[string]string `json:\"sysctl,omitempty\"`\n\n\t// Seccomp allows actions to be taken whenever a syscall is made within the container.\n\t// A number of rules are given, each having an action to be taken if a syscall matches it.\n\t// A default action to be taken if no rules match is also given.\n\tSeccomp *Seccomp `json:\"seccomp,omitempty\"`\n\n\t// NoNewPrivileges controls whether processes in the container can gain additional privileges.\n\tNoNewPrivileges bool `json:\"no_new_privileges,omitempty\"`\n\n\t// Hooks are a collection of actions to perform at various container lifecycle events.\n\t// CommandHooks are serialized to JSON, but other hooks are not.\n\tHooks Hooks `json:\"Hooks,omitempty\"`\n\n\t// Version is the version of opencontainer specification that is supported.\n\tVersion string `json:\"version\"`\n\n\t// Labels are user defined metadata that is stored in the config and populated on the state\n\tLabels []string `json:\"labels\"`\n\n\t// NoNewKeyring will not allocated a new session keyring for the container.  It will use the\n\t// callers keyring in this case.\n\tNoNewKeyring bool `json:\"no_new_keyring,omitempty\"`\n\n\t// IntelRdt specifies settings for Intel RDT group that the container is placed into\n\t// to limit the resources (e.g., L3 cache, memory bandwidth) the container has available\n\tIntelRdt *IntelRdt `json:\"intel_rdt,omitempty\"`\n\n\t// MemoryPolicy specifies NUMA memory policy for the container.\n\tMemoryPolicy *LinuxMemoryPolicy `json:\"memory_policy,omitempty\"`\n\n\t// RootlessEUID is set when the runc was launched with non-zero EUID.\n\t// Note that RootlessEUID is set to false when launched with EUID=0 in userns.\n\t// When RootlessEUID is set, runc creates a new userns for the container.\n\t// (config.json needs to contain userns settings)\n\tRootlessEUID bool `json:\"rootless_euid,omitempty\"`\n\n\t// RootlessCgroups is set when unlikely to have the full access to cgroups.\n\t// When RootlessCgroups is set, cgroups errors are ignored.\n\tRootlessCgroups bool `json:\"rootless_cgroups,omitempty\"`\n\n\t// TimeOffsets specifies the offset for supporting time namespaces.\n\tTimeOffsets map[string]specs.LinuxTimeOffset `json:\"time_offsets,omitempty\"`\n\n\t// Scheduler represents the scheduling attributes for a process.\n\tScheduler *Scheduler `json:\"scheduler,omitempty\"`\n\n\t// Personality contains configuration for the Linux personality syscall.\n\tPersonality *LinuxPersonality `json:\"personality,omitempty\"`\n\n\t// IOPriority is the container's I/O priority.\n\tIOPriority *IOPriority `json:\"io_priority,omitempty\"`\n\n\t// ExecCPUAffinity is CPU affinity for a non-init process to be run in the container.\n\tExecCPUAffinity *CPUAffinity `json:\"exec_cpu_affinity,omitempty\"`\n}\n\n// Scheduler is based on the Linux sched_setattr(2) syscall.\ntype Scheduler = specs.Scheduler\n\n// ToSchedAttr is to convert *configs.Scheduler to *unix.SchedAttr.\nfunc ToSchedAttr(scheduler *Scheduler) (*unix.SchedAttr, error) {\n\tvar policy uint32\n\tswitch scheduler.Policy {\n\tcase specs.SchedOther:\n\t\tpolicy = 0\n\tcase specs.SchedFIFO:\n\t\tpolicy = 1\n\tcase specs.SchedRR:\n\t\tpolicy = 2\n\tcase specs.SchedBatch:\n\t\tpolicy = 3\n\tcase specs.SchedISO:\n\t\tpolicy = 4\n\tcase specs.SchedIdle:\n\t\tpolicy = 5\n\tcase specs.SchedDeadline:\n\t\tpolicy = 6\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"invalid scheduler policy: %s\", scheduler.Policy)\n\t}\n\n\tvar flags uint64\n\tfor _, flag := range scheduler.Flags {\n\t\tswitch flag {\n\t\tcase specs.SchedFlagResetOnFork:\n\t\t\tflags |= 0x01\n\t\tcase specs.SchedFlagReclaim:\n\t\t\tflags |= 0x02\n\t\tcase specs.SchedFlagDLOverrun:\n\t\t\tflags |= 0x04\n\t\tcase specs.SchedFlagKeepPolicy:\n\t\t\tflags |= 0x08\n\t\tcase specs.SchedFlagKeepParams:\n\t\t\tflags |= 0x10\n\t\tcase specs.SchedFlagUtilClampMin:\n\t\t\tflags |= 0x20\n\t\tcase specs.SchedFlagUtilClampMax:\n\t\t\tflags |= 0x40\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"invalid scheduler flag: %s\", flag)\n\t\t}\n\t}\n\n\treturn &unix.SchedAttr{\n\t\tSize:     unix.SizeofSchedAttr,\n\t\tPolicy:   policy,\n\t\tFlags:    flags,\n\t\tNice:     scheduler.Nice,\n\t\tPriority: uint32(scheduler.Priority),\n\t\tRuntime:  scheduler.Runtime,\n\t\tDeadline: scheduler.Deadline,\n\t\tPeriod:   scheduler.Period,\n\t}, nil\n}\n\ntype IOPriority = specs.LinuxIOPriority\n\ntype CPUAffinity struct {\n\tInitial, Final *unix.CPUSet\n}\n\n// ToCPUSet parses a string in list format into a unix.CPUSet, e.g. \"0-3,5,7-9\".\nfunc ToCPUSet(str string) (*unix.CPUSet, error) {\n\tif str == \"\" {\n\t\treturn nil, nil\n\t}\n\ts := new(unix.CPUSet)\n\n\t// Since (*CPUset).Set silently ignores too high CPU values,\n\t// find out what the maximum is, and return an error.\n\tmaxCPU := uint64(unsafe.Sizeof(*s) * 8)\n\ttoInt := func(v string) (int, error) {\n\t\tret, err := strconv.ParseUint(v, 10, 32)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tif ret >= maxCPU {\n\t\t\treturn 0, fmt.Errorf(\"values larger than %d are not supported\", maxCPU-1)\n\t\t}\n\t\treturn int(ret), nil\n\t}\n\n\tfor r := range strings.SplitSeq(str, \",\") {\n\t\t// Allow extra spaces around.\n\t\tr = strings.TrimSpace(r)\n\t\t// Allow empty elements (extra commas).\n\t\tif r == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif r0, r1, found := strings.Cut(r, \"-\"); found {\n\t\t\tstart, err := toInt(r0)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tend, err := toInt(r1)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tif start > end {\n\t\t\t\treturn nil, errors.New(\"invalid range: \" + r)\n\t\t\t}\n\t\t\tfor i := start; i <= end; i++ {\n\t\t\t\ts.Set(i)\n\t\t\t}\n\t\t} else {\n\t\t\tval, err := toInt(r)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\ts.Set(val)\n\t\t}\n\t}\n\tif s.Count() == 0 {\n\t\treturn nil, fmt.Errorf(\"no members found in set %q\", str)\n\t}\n\n\treturn s, nil\n}\n\n// ConvertCPUAffinity converts [specs.CPUAffinity] to [CPUAffinity].\nfunc ConvertCPUAffinity(sa *specs.CPUAffinity) (*CPUAffinity, error) {\n\tif sa == nil {\n\t\treturn nil, nil\n\t}\n\tinitial, err := ToCPUSet(sa.Initial)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"bad CPUAffinity.Initial: %w\", err)\n\t}\n\tfinal, err := ToCPUSet(sa.Final)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"bad CPUAffinity.Final: %w\", err)\n\t}\n\tif initial == nil && final == nil {\n\t\treturn nil, nil\n\t}\n\n\treturn &CPUAffinity{\n\t\tInitial: initial,\n\t\tFinal:   final,\n\t}, nil\n}\n\ntype (\n\tHookName string\n\tHookList []Hook\n\tHooks    map[HookName]HookList\n)\n\nconst (\n\t// Prestart commands are executed after the container namespaces are created,\n\t// but before the user supplied command is executed from init.\n\t// Note: This hook is now deprecated\n\t// Prestart commands are called in the Runtime namespace.\n\tPrestart HookName = \"prestart\"\n\n\t// CreateRuntime commands MUST be called as part of the create operation after\n\t// the runtime environment has been created but before the pivot_root has been executed.\n\t// CreateRuntime is called immediately after the deprecated Prestart hook.\n\t// CreateRuntime commands are called in the Runtime Namespace.\n\tCreateRuntime HookName = \"createRuntime\"\n\n\t// CreateContainer commands MUST be called as part of the create operation after\n\t// the runtime environment has been created but before the pivot_root has been executed.\n\t// CreateContainer commands are called in the Container namespace.\n\tCreateContainer HookName = \"createContainer\"\n\n\t// StartContainer commands MUST be called as part of the start operation and before\n\t// the container process is started.\n\t// StartContainer commands are called in the Container namespace.\n\tStartContainer HookName = \"startContainer\"\n\n\t// Poststart commands are executed after the container init process starts.\n\t// Poststart commands are called in the Runtime Namespace.\n\tPoststart HookName = \"poststart\"\n\n\t// Poststop commands are executed after the container init process exits.\n\t// Poststop commands are called in the Runtime Namespace.\n\tPoststop HookName = \"poststop\"\n)\n\n// HasHook checks if config has any hooks with any given names configured.\nfunc (c *Config) HasHook(names ...HookName) bool {\n\tif c.Hooks == nil {\n\t\treturn false\n\t}\n\tfor _, h := range names {\n\t\tif len(c.Hooks[h]) > 0 {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// KnownHookNames returns the known hook names.\n// Used by `runc features`.\nfunc KnownHookNames() []string {\n\treturn []string{\n\t\tstring(Prestart), // deprecated\n\t\tstring(CreateRuntime),\n\t\tstring(CreateContainer),\n\t\tstring(StartContainer),\n\t\tstring(Poststart),\n\t\tstring(Poststop),\n\t}\n}\n\ntype Capabilities struct {\n\t// Bounding is the set of capabilities checked by the kernel.\n\tBounding []string `json:\"Bounding,omitempty\"`\n\t// Effective is the set of capabilities checked by the kernel.\n\tEffective []string `json:\"Effective,omitempty\"`\n\t// Inheritable is the capabilities preserved across execve.\n\tInheritable []string `json:\"Inheritable,omitempty\"`\n\t// Permitted is the limiting superset for effective capabilities.\n\tPermitted []string `json:\"Permitted,omitempty\"`\n\t// Ambient is the ambient set of capabilities that are kept.\n\tAmbient []string `json:\"Ambient,omitempty\"`\n}\n\nfunc (hooks *Hooks) UnmarshalJSON(b []byte) error {\n\tvar state map[HookName][]CommandHook\n\n\tif err := json.Unmarshal(b, &state); err != nil {\n\t\treturn err\n\t}\n\n\t*hooks = Hooks{}\n\tfor n, commandHooks := range state {\n\t\tif len(commandHooks) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t(*hooks)[n] = HookList{}\n\t\tfor _, h := range commandHooks {\n\t\t\t(*hooks)[n] = append((*hooks)[n], h)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (hooks *Hooks) MarshalJSON() ([]byte, error) {\n\tserialize := func(hooks []Hook) (serializableHooks []CommandHook) {\n\t\tfor _, hook := range hooks {\n\t\t\tswitch chook := hook.(type) {\n\t\t\tcase CommandHook:\n\t\t\t\tserializableHooks = append(serializableHooks, chook)\n\t\t\tdefault:\n\t\t\t\tlogrus.Warnf(\"cannot serialize hook of type %T, skipping\", hook)\n\t\t\t}\n\t\t}\n\n\t\treturn serializableHooks\n\t}\n\n\treturn json.Marshal(map[string]any{\n\t\t\"prestart\":        serialize((*hooks)[Prestart]),\n\t\t\"createRuntime\":   serialize((*hooks)[CreateRuntime]),\n\t\t\"createContainer\": serialize((*hooks)[CreateContainer]),\n\t\t\"startContainer\":  serialize((*hooks)[StartContainer]),\n\t\t\"poststart\":       serialize((*hooks)[Poststart]),\n\t\t\"poststop\":        serialize((*hooks)[Poststop]),\n\t})\n}\n\n// Run executes all hooks for the given hook name.\nfunc (hooks Hooks) Run(name HookName, state *specs.State) error {\n\tlist := hooks[name]\n\tfor i, h := range list {\n\t\tif err := h.Run(state); err != nil {\n\t\t\treturn fmt.Errorf(\"error running %s hook #%d: %w\", name, i, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// SetDefaultEnv sets the environment for those CommandHook entries\n// that do not have one set.\nfunc (hooks HookList) SetDefaultEnv(env []string) {\n\tfor _, h := range hooks {\n\t\tif ch, ok := h.(CommandHook); ok && len(ch.Env) == 0 {\n\t\t\tch.Env = env\n\t\t}\n\t}\n}\n\ntype Hook interface {\n\t// Run executes the hook with the provided state.\n\tRun(*specs.State) error\n}\n\n// NewFunctionHook will call the provided function when the hook is run.\nfunc NewFunctionHook(f func(*specs.State) error) FuncHook {\n\treturn FuncHook{\n\t\trun: f,\n\t}\n}\n\ntype FuncHook struct {\n\trun func(*specs.State) error\n}\n\nfunc (f FuncHook) Run(s *specs.State) error {\n\treturn f.run(s)\n}\n\ntype Command struct {\n\tPath    string         `json:\"path\"`\n\tArgs    []string       `json:\"args\"`\n\tEnv     []string       `json:\"env\"`\n\tDir     string         `json:\"dir\"`\n\tTimeout *time.Duration `json:\"timeout\"`\n}\n\n// NewCommandHook will execute the provided command when the hook is run.\nfunc NewCommandHook(cmd *Command) CommandHook {\n\treturn CommandHook{\n\t\tCommand: cmd,\n\t}\n}\n\ntype CommandHook struct {\n\t*Command\n}\n\nfunc (c *Command) Run(s *specs.State) error {\n\tb, err := json.Marshal(s)\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar stdout, stderr bytes.Buffer\n\tcmd := exec.Cmd{\n\t\tPath:   c.Path,\n\t\tArgs:   c.Args,\n\t\tEnv:    c.Env,\n\t\tStdin:  bytes.NewReader(b),\n\t\tStdout: &stdout,\n\t\tStderr: &stderr,\n\t}\n\tif err := cmd.Start(); err != nil {\n\t\treturn err\n\t}\n\terrC := make(chan error, 1)\n\tgo func() {\n\t\terr := cmd.Wait()\n\t\tif err != nil {\n\t\t\terr = fmt.Errorf(\"%w, stdout: %s, stderr: %s\", err, stdout.String(), stderr.String())\n\t\t}\n\t\terrC <- err\n\t}()\n\tvar timerCh <-chan time.Time\n\tif c.Timeout != nil {\n\t\ttimer := time.NewTimer(*c.Timeout)\n\t\tdefer timer.Stop()\n\t\ttimerCh = timer.C\n\t}\n\tselect {\n\tcase err := <-errC:\n\t\treturn err\n\tcase <-timerCh:\n\t\t_ = cmd.Process.Kill()\n\t\t<-errC\n\t\treturn fmt.Errorf(\"hook ran past specified timeout of %.1fs\", c.Timeout.Seconds())\n\t}\n}\n"
  },
  {
    "path": "libcontainer/configs/config_linux.go",
    "content": "package configs\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n)\n\nvar (\n\terrNoUIDMap = errors.New(\"user namespaces enabled, but no uid mappings found\")\n\terrNoGIDMap = errors.New(\"user namespaces enabled, but no gid mappings found\")\n)\n\n// Please check https://man7.org/linux/man-pages/man2/personality.2.html for const details.\n// https://raw.githubusercontent.com/torvalds/linux/master/include/uapi/linux/personality.h\nconst (\n\tPerLinux   = 0x0000\n\tPerLinux32 = 0x0008\n)\n\ntype LinuxPersonality struct {\n\t// Domain for the personality\n\t// can only contain values \"LINUX\" and \"LINUX32\"\n\tDomain int `json:\"domain\"`\n}\n\n// HostUID gets the translated uid for the process on host which could be\n// different when user namespaces are enabled.\nfunc (c *Config) HostUID(containerID int) (int, error) {\n\tif c.Namespaces.Contains(NEWUSER) {\n\t\tif len(c.UIDMappings) == 0 {\n\t\t\treturn -1, errNoUIDMap\n\t\t}\n\t\tid, found := c.hostIDFromMapping(int64(containerID), c.UIDMappings)\n\t\tif !found {\n\t\t\treturn -1, fmt.Errorf(\"user namespaces enabled, but no mapping found for uid %d\", containerID)\n\t\t}\n\t\t// If we are a 32-bit binary running on a 64-bit system, it's possible\n\t\t// the mapped user is too large to store in an int, which means we\n\t\t// cannot do the mapping. We can't just return an int64, because\n\t\t// os.Setuid() takes an int.\n\t\tif id > math.MaxInt {\n\t\t\treturn -1, fmt.Errorf(\"mapping for uid %d (host id %d) is larger than native integer size (%d)\", containerID, id, math.MaxInt)\n\t\t}\n\t\treturn int(id), nil\n\t}\n\t// Return unchanged id.\n\treturn containerID, nil\n}\n\n// HostRootUID gets the root uid for the process on host which could be non-zero\n// when user namespaces are enabled.\nfunc (c *Config) HostRootUID() (int, error) {\n\treturn c.HostUID(0)\n}\n\n// HostGID gets the translated gid for the process on host which could be\n// different when user namespaces are enabled.\nfunc (c *Config) HostGID(containerID int) (int, error) {\n\tif c.Namespaces.Contains(NEWUSER) {\n\t\tif len(c.GIDMappings) == 0 {\n\t\t\treturn -1, errNoGIDMap\n\t\t}\n\t\tid, found := c.hostIDFromMapping(int64(containerID), c.GIDMappings)\n\t\tif !found {\n\t\t\treturn -1, fmt.Errorf(\"user namespaces enabled, but no mapping found for gid %d\", containerID)\n\t\t}\n\t\t// If we are a 32-bit binary running on a 64-bit system, it's possible\n\t\t// the mapped user is too large to store in an int, which means we\n\t\t// cannot do the mapping. We can't just return an int64, because\n\t\t// os.Setgid() takes an int.\n\t\tif id > math.MaxInt {\n\t\t\treturn -1, fmt.Errorf(\"mapping for gid %d (host id %d) is larger than native integer size (%d)\", containerID, id, math.MaxInt)\n\t\t}\n\t\treturn int(id), nil\n\t}\n\t// Return unchanged id.\n\treturn containerID, nil\n}\n\n// HostRootGID gets the root gid for the process on host which could be non-zero\n// when user namespaces are enabled.\nfunc (c *Config) HostRootGID() (int, error) {\n\treturn c.HostGID(0)\n}\n\n// Utility function that gets a host ID for a container ID from user namespace map\n// if that ID is present in the map.\nfunc (c *Config) hostIDFromMapping(containerID int64, uMap []IDMap) (int64, bool) {\n\tfor _, m := range uMap {\n\t\tif (containerID >= m.ContainerID) && (containerID <= (m.ContainerID + m.Size - 1)) {\n\t\t\thostID := m.HostID + (containerID - m.ContainerID)\n\t\t\treturn hostID, true\n\t\t}\n\t}\n\treturn -1, false\n}\n"
  },
  {
    "path": "libcontainer/configs/config_linux_test.go",
    "content": "package configs\n\nimport (\n\t\"testing\"\n)\n\nvar HookNameList = []HookName{Prestart, CreateRuntime, CreateContainer, StartContainer, Poststart, Poststop}\n\nfunc TestRemoveNamespace(t *testing.T) {\n\tns := Namespaces{\n\t\t{Type: NEWNET},\n\t}\n\tif !ns.Remove(NEWNET) {\n\t\tt.Fatal(\"NEWNET was not removed\")\n\t}\n\tif len(ns) != 0 {\n\t\tt.Fatalf(\"namespaces should have 0 items but reports %d\", len(ns))\n\t}\n}\n\nfunc TestHostRootUIDNoUSERNS(t *testing.T) {\n\tconfig := &Config{\n\t\tNamespaces: Namespaces{},\n\t}\n\tuid, err := config.HostRootUID()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif uid != 0 {\n\t\tt.Fatalf(\"expected uid 0 with no USERNS but received %d\", uid)\n\t}\n}\n\nfunc TestHostRootUIDWithUSERNS(t *testing.T) {\n\tconfig := &Config{\n\t\tNamespaces: Namespaces{{Type: NEWUSER}},\n\t\tUIDMappings: []IDMap{\n\t\t\t{\n\t\t\t\tContainerID: 0,\n\t\t\t\tHostID:      1000,\n\t\t\t\tSize:        1,\n\t\t\t},\n\t\t},\n\t}\n\tuid, err := config.HostRootUID()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif uid != 1000 {\n\t\tt.Fatalf(\"expected uid 1000 with no USERNS but received %d\", uid)\n\t}\n}\n\nfunc TestHostRootGIDNoUSERNS(t *testing.T) {\n\tconfig := &Config{\n\t\tNamespaces: Namespaces{},\n\t}\n\tuid, err := config.HostRootGID()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif uid != 0 {\n\t\tt.Fatalf(\"expected gid 0 with no USERNS but received %d\", uid)\n\t}\n}\n\nfunc TestHostRootGIDWithUSERNS(t *testing.T) {\n\tconfig := &Config{\n\t\tNamespaces: Namespaces{{Type: NEWUSER}},\n\t\tGIDMappings: []IDMap{\n\t\t\t{\n\t\t\t\tContainerID: 0,\n\t\t\t\tHostID:      1000,\n\t\t\t\tSize:        1,\n\t\t\t},\n\t\t},\n\t}\n\tuid, err := config.HostRootGID()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif uid != 1000 {\n\t\tt.Fatalf(\"expected gid 1000 with no USERNS but received %d\", uid)\n\t}\n}\n"
  },
  {
    "path": "libcontainer/configs/config_test.go",
    "content": "package configs_test\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n)\n\nfunc TestUnmarshalHooks(t *testing.T) {\n\ttimeout := time.Second\n\n\thookCmd := configs.NewCommandHook(&configs.Command{\n\t\tPath:    \"/var/vcap/hooks/hook\",\n\t\tArgs:    []string{\"--pid=123\"},\n\t\tEnv:     []string{\"FOO=BAR\"},\n\t\tDir:     \"/var/vcap\",\n\t\tTimeout: &timeout,\n\t})\n\n\thookJson, err := json.Marshal(hookCmd)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tfor _, hookName := range configs.HookNameList {\n\t\thooks := configs.Hooks{}\n\t\terr = hooks.UnmarshalJSON(fmt.Appendf(nil, `{\"%s\" :[%s]}`, hookName, hookJson))\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\n\t\tif !reflect.DeepEqual(hooks[hookName], configs.HookList{hookCmd}) {\n\t\t\tt.Errorf(\"Expected %s to equal %+v but it was %+v\", hookName, hookCmd, hooks[hookName])\n\t\t}\n\t}\n}\n\nfunc TestUnmarshalHooksWithInvalidData(t *testing.T) {\n\thook := configs.Hooks{}\n\terr := hook.UnmarshalJSON([]byte(`{invalid-json}`))\n\tif err == nil {\n\t\tt.Error(\"Expected error to occur but it was nil\")\n\t}\n}\n\nfunc TestMarshalHooks(t *testing.T) {\n\ttimeout := time.Second\n\n\thookCmd := configs.NewCommandHook(&configs.Command{\n\t\tPath:    \"/var/vcap/hooks/hook\",\n\t\tArgs:    []string{\"--pid=123\"},\n\t\tEnv:     []string{\"FOO=BAR\"},\n\t\tDir:     \"/var/vcap\",\n\t\tTimeout: &timeout,\n\t})\n\n\thook := configs.Hooks{\n\t\tconfigs.Prestart:        configs.HookList{hookCmd},\n\t\tconfigs.CreateRuntime:   configs.HookList{hookCmd},\n\t\tconfigs.CreateContainer: configs.HookList{hookCmd},\n\t\tconfigs.StartContainer:  configs.HookList{hookCmd},\n\t\tconfigs.Poststart:       configs.HookList{hookCmd},\n\t\tconfigs.Poststop:        configs.HookList{hookCmd},\n\t}\n\thooks, err := hook.MarshalJSON()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\t// Note Marshal seems to output fields in alphabetical order\n\thookCmdJson := `[{\"path\":\"/var/vcap/hooks/hook\",\"args\":[\"--pid=123\"],\"env\":[\"FOO=BAR\"],\"dir\":\"/var/vcap\",\"timeout\":1000000000}]`\n\th := fmt.Sprintf(`{\"createContainer\":%[1]s,\"createRuntime\":%[1]s,\"poststart\":%[1]s,\"poststop\":%[1]s,\"prestart\":%[1]s,\"startContainer\":%[1]s}`, hookCmdJson)\n\tif string(hooks) != h {\n\t\tt.Errorf(\"Expected hooks %s to equal %s\", string(hooks), h)\n\t}\n}\n\nfunc TestMarshalUnmarshalHooks(t *testing.T) {\n\ttimeout := time.Second\n\n\thookCmd := configs.NewCommandHook(&configs.Command{\n\t\tPath:    \"/var/vcap/hooks/hook\",\n\t\tArgs:    []string{\"--pid=123\"},\n\t\tEnv:     []string{\"FOO=BAR\"},\n\t\tDir:     \"/var/vcap\",\n\t\tTimeout: &timeout,\n\t})\n\n\thook := configs.Hooks{\n\t\tconfigs.Prestart:        configs.HookList{hookCmd},\n\t\tconfigs.CreateRuntime:   configs.HookList{hookCmd},\n\t\tconfigs.CreateContainer: configs.HookList{hookCmd},\n\t\tconfigs.StartContainer:  configs.HookList{hookCmd},\n\t\tconfigs.Poststart:       configs.HookList{hookCmd},\n\t\tconfigs.Poststop:        configs.HookList{hookCmd},\n\t}\n\thooks, err := hook.MarshalJSON()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tumMhook := configs.Hooks{}\n\terr = umMhook.UnmarshalJSON(hooks)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif !reflect.DeepEqual(umMhook, hook) {\n\t\tt.Errorf(\"Expected hooks to be equal after mashaling -> unmarshaling them: %+v, %+v\", umMhook, hook)\n\t}\n}\n\nfunc TestMarshalHooksWithUnexpectedType(t *testing.T) {\n\tfHook := configs.NewFunctionHook(func(*specs.State) error {\n\t\treturn nil\n\t})\n\thook := configs.Hooks{\n\t\tconfigs.CreateRuntime: configs.HookList{fHook},\n\t}\n\thooks, err := hook.MarshalJSON()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\th := `{\"createContainer\":null,\"createRuntime\":null,\"poststart\":null,\"poststop\":null,\"prestart\":null,\"startContainer\":null}`\n\tif string(hooks) != h {\n\t\tt.Errorf(\"Expected hooks %s to equal %s\", string(hooks), h)\n\t}\n}\n\nfunc TestFuncHookRun(t *testing.T) {\n\tstate := &specs.State{\n\t\tVersion: \"1\",\n\t\tID:      \"1\",\n\t\tStatus:  \"created\",\n\t\tPid:     1,\n\t\tBundle:  \"/bundle\",\n\t}\n\n\tfHook := configs.NewFunctionHook(func(s *specs.State) error {\n\t\tif !reflect.DeepEqual(state, s) {\n\t\t\treturn fmt.Errorf(\"expected state %+v to equal %+v\", state, s)\n\t\t}\n\t\treturn nil\n\t})\n\n\terr := fHook.Run(state)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n}\n\nfunc TestCommandHookRun(t *testing.T) {\n\tstate := &specs.State{\n\t\tVersion: \"1\",\n\t\tID:      \"1\",\n\t\tStatus:  \"created\",\n\t\tPid:     1,\n\t\tBundle:  \"/bundle\",\n\t}\n\n\tstateJson, err := json.Marshal(state)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tverifyCommandTemplate := `#!/bin/sh\nif [ \"$1\" != \"testarg\" ]; then\n\techo \"Bad value for $1. Expected 'testarg', found '$1'\"\n\texit 1\nfi\nif [ -z \"$FOO\" ] || [ \"$FOO\" != BAR ]; then\n\techo \"Bad value for FOO. Expected 'BAR', found '$FOO'\"\n\texit 1\nfi\nexpectedJson=%q\nread JSON\nif [ \"$JSON\" != \"$expectedJson\" ]; then\n\techo \"Bad JSON received. Expected '$expectedJson', found '$JSON'\"\n\texit 1\nfi\nexit 0\n\t`\n\tverifyCommand := fmt.Sprintf(verifyCommandTemplate, stateJson)\n\tfilename := \"/tmp/runc-hooktest.sh\"\n\tos.Remove(filename)\n\tif err := os.WriteFile(filename, []byte(verifyCommand), 0o700); err != nil {\n\t\tt.Fatalf(\"Failed to create tmp file: %v\", err)\n\t}\n\tdefer os.Remove(filename)\n\n\tcmdHook := configs.NewCommandHook(&configs.Command{\n\t\tPath: filename,\n\t\tArgs: []string{filename, \"testarg\"},\n\t\tEnv:  []string{\"FOO=BAR\"},\n\t\tDir:  \"/\",\n\t})\n\n\tif err := cmdHook.Run(state); err != nil {\n\t\tt.Errorf(\"Want no error, got: %+v\", err)\n\t}\n}\n\nfunc TestCommandHookRunTimeout(t *testing.T) {\n\tstate := &specs.State{\n\t\tVersion: \"1\",\n\t\tID:      \"1\",\n\t\tStatus:  \"created\",\n\t\tPid:     1,\n\t\tBundle:  \"/bundle\",\n\t}\n\ttimeout := 100 * time.Millisecond\n\n\tcmdHook := configs.NewCommandHook(&configs.Command{\n\t\tPath:    \"/bin/sleep\",\n\t\tArgs:    []string{\"/bin/sleep\", \"1\"},\n\t\tTimeout: &timeout,\n\t})\n\n\tif err := cmdHook.Run(state); err == nil {\n\t\tt.Error(\"Expected error to occur but it was nil\")\n\t}\n}\n"
  },
  {
    "path": "libcontainer/configs/configs_fuzzer.go",
    "content": "//go:build gofuzz\n\npackage configs\n\nfunc FuzzUnmarshalJSON(data []byte) int {\n\thooks := Hooks{}\n\t_ = hooks.UnmarshalJSON(data)\n\treturn 1\n}\n"
  },
  {
    "path": "libcontainer/configs/doc.go",
    "content": "// Package configs defines the structures and constants used for configuring a container\npackage configs\n"
  },
  {
    "path": "libcontainer/configs/intelrdt.go",
    "content": "package configs\n\ntype IntelRdt struct {\n\t// The identity for RDT Class of Service\n\tClosID string `json:\"closID,omitempty\"`\n\n\t// Schemata is a generic field to specify schemata file in the resctrl\n\t// filesystem. Each element represents one line written to the schemata file.\n\tSchemata []string `json:\"schemata,omitempty\"`\n\n\t// The schema for L3 cache id and capacity bitmask (CBM)\n\t// Format: \"L3:<cache_id0>=<cbm0>;<cache_id1>=<cbm1>;...\"\n\tL3CacheSchema string `json:\"l3_cache_schema,omitempty\"`\n\n\t// The schema of memory bandwidth per L3 cache id\n\t// Format: \"MB:<cache_id0>=bandwidth0;<cache_id1>=bandwidth1;...\"\n\t// The unit of memory bandwidth is specified in \"percentages\" by\n\t// default, and in \"MBps\" if MBA Software Controller is enabled.\n\tMemBwSchema string `json:\"memBwSchema,omitempty\"`\n\n\t// Create a monitoring group for the container.\n\tEnableMonitoring bool `json:\"enableMonitoring,omitempty\"`\n}\n"
  },
  {
    "path": "libcontainer/configs/memorypolicy.go",
    "content": "package configs\n\nimport \"golang.org/x/sys/unix\"\n\n// LinuxMemoryPolicy contains memory policy configuration.\ntype LinuxMemoryPolicy struct {\n\t// Mode specifies memory policy mode without mode flags. See\n\t// set_mempolicy() documentation for details.\n\tMode int `json:\"mode,omitempty\"`\n\t// Flags contains mode flags.\n\tFlags int `json:\"flags,omitempty\"`\n\t// Nodes contains NUMA nodes to which the mode applies.\n\tNodes *unix.CPUSet `json:\"nodes,omitempty\"`\n}\n"
  },
  {
    "path": "libcontainer/configs/mount.go",
    "content": "package configs\n\nconst (\n\t// EXT_COPYUP is a directive to copy up the contents of a directory when\n\t// a tmpfs is mounted over it.\n\tEXT_COPYUP = 1 << iota //nolint:golint,revive // ignore \"don't use ALL_CAPS\" warning\n)\n"
  },
  {
    "path": "libcontainer/configs/mount_linux.go",
    "content": "package configs\n\nimport \"golang.org/x/sys/unix\"\n\ntype MountIDMapping struct {\n\t// Recursive indicates if the mapping needs to be recursive.\n\tRecursive bool `json:\"recursive,omitempty\"`\n\n\t// UserNSPath is a path to a user namespace that indicates the necessary\n\t// id-mappings for MOUNT_ATTR_IDMAP. If set to non-\"\", UIDMappings and\n\t// GIDMappings must be set to nil.\n\tUserNSPath string `json:\"userns_path,omitempty\"`\n\n\t// UIDMappings is the uid mapping set for this mount, to be used with\n\t// MOUNT_ATTR_IDMAP.\n\tUIDMappings []IDMap `json:\"uid_mappings,omitempty\"`\n\n\t// GIDMappings is the gid mapping set for this mount, to be used with\n\t// MOUNT_ATTR_IDMAP.\n\tGIDMappings []IDMap `json:\"gid_mappings,omitempty\"`\n}\n\ntype Mount struct {\n\t// Source path for the mount.\n\tSource string `json:\"source\"`\n\n\t// Destination path for the mount inside the container.\n\tDestination string `json:\"destination\"`\n\n\t// Device the mount is for.\n\tDevice string `json:\"device\"`\n\n\t// Mount flags.\n\tFlags int `json:\"flags,omitempty\"`\n\n\t// Mount flags that were explicitly cleared in the configuration (meaning\n\t// the user explicitly requested that these flags *not* be set).\n\tClearedFlags int `json:\"cleared_flags,omitempty\"`\n\n\t// Propagation flags.\n\tPropagationFlags []int `json:\"propagation_flags,omitempty\"`\n\n\t// Mount data applied to the mount.\n\tData string `json:\"data,omitempty\"`\n\n\t// Relabel field is ignored.\n\t//\n\t// Deprecated: do not use. This field will be removed in runc 1.7.\n\tRelabel string `json:\"-\"`\n\n\t// RecAttr represents mount properties to be applied recursively (AT_RECURSIVE), see mount_setattr(2).\n\tRecAttr *unix.MountAttr `json:\"rec_attr,omitempty\"`\n\n\t// Extensions are additional flags that are specific to runc.\n\tExtensions int `json:\"extensions,omitempty\"`\n\n\t// Mapping is the MOUNT_ATTR_IDMAP configuration for the mount. If non-nil,\n\t// the mount is configured to use MOUNT_ATTR_IDMAP-style id mappings.\n\tIDMapping *MountIDMapping `json:\"id_mapping,omitempty\"`\n}\n\nfunc (m *Mount) IsBind() bool {\n\treturn m.Flags&unix.MS_BIND != 0\n}\n\nfunc (m *Mount) IsIDMapped() bool {\n\treturn m.IDMapping != nil\n}\n"
  },
  {
    "path": "libcontainer/configs/mount_unsupported.go",
    "content": "//go:build !linux\n\npackage configs\n\ntype Mount struct{}\n\nfunc (m *Mount) IsBind() bool {\n\treturn false\n}\n"
  },
  {
    "path": "libcontainer/configs/namespaces.go",
    "content": "package configs\n\ntype NamespaceType string\n\ntype Namespaces []Namespace\n"
  },
  {
    "path": "libcontainer/configs/namespaces_linux.go",
    "content": "package configs\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"slices\"\n\t\"sync\"\n)\n\nconst (\n\tNEWNET    NamespaceType = \"NEWNET\"\n\tNEWPID    NamespaceType = \"NEWPID\"\n\tNEWNS     NamespaceType = \"NEWNS\"\n\tNEWUTS    NamespaceType = \"NEWUTS\"\n\tNEWIPC    NamespaceType = \"NEWIPC\"\n\tNEWUSER   NamespaceType = \"NEWUSER\"\n\tNEWCGROUP NamespaceType = \"NEWCGROUP\"\n\tNEWTIME   NamespaceType = \"NEWTIME\"\n)\n\nvar (\n\tnsLock              sync.Mutex\n\tsupportedNamespaces = make(map[NamespaceType]bool)\n)\n\n// NsName converts the namespace type to its filename\nfunc NsName(ns NamespaceType) string {\n\tswitch ns {\n\tcase NEWNET:\n\t\treturn \"net\"\n\tcase NEWNS:\n\t\treturn \"mnt\"\n\tcase NEWPID:\n\t\treturn \"pid\"\n\tcase NEWIPC:\n\t\treturn \"ipc\"\n\tcase NEWUSER:\n\t\treturn \"user\"\n\tcase NEWUTS:\n\t\treturn \"uts\"\n\tcase NEWCGROUP:\n\t\treturn \"cgroup\"\n\tcase NEWTIME:\n\t\treturn \"time\"\n\t}\n\treturn \"\"\n}\n\n// IsNamespaceSupported returns whether a namespace is available or\n// not\nfunc IsNamespaceSupported(ns NamespaceType) bool {\n\tnsLock.Lock()\n\tdefer nsLock.Unlock()\n\tsupported, ok := supportedNamespaces[ns]\n\tif ok {\n\t\treturn supported\n\t}\n\tnsFile := NsName(ns)\n\t// if the namespace type is unknown, just return false\n\tif nsFile == \"\" {\n\t\treturn false\n\t}\n\t// We don't need to use /proc/thread-self here because the list of\n\t// namespace types is unrelated to the thread. This lets us avoid having to\n\t// do runtime.LockOSThread.\n\t_, err := os.Stat(\"/proc/self/ns/\" + nsFile)\n\t// a namespace is supported if it exists and we have permissions to read it\n\tsupported = err == nil\n\tsupportedNamespaces[ns] = supported\n\treturn supported\n}\n\nfunc NamespaceTypes() []NamespaceType {\n\treturn []NamespaceType{\n\t\tNEWUSER, // Keep user NS always first, don't move it.\n\t\tNEWIPC,\n\t\tNEWUTS,\n\t\tNEWNET,\n\t\tNEWPID,\n\t\tNEWNS,\n\t\tNEWCGROUP,\n\t\tNEWTIME,\n\t}\n}\n\n// Namespace defines configuration for each namespace.  It specifies an\n// alternate path that is able to be joined via setns.\ntype Namespace struct {\n\tType NamespaceType `json:\"type\"`\n\tPath string        `json:\"path,omitempty\"`\n}\n\nfunc (n *Namespace) GetPath(pid int) string {\n\treturn fmt.Sprintf(\"/proc/%d/ns/%s\", pid, NsName(n.Type))\n}\n\nfunc (n *Namespaces) Remove(t NamespaceType) bool {\n\ti := n.index(t)\n\tif i == -1 {\n\t\treturn false\n\t}\n\t*n = slices.Delete((*n), i, i+1)\n\treturn true\n}\n\nfunc (n *Namespaces) Add(t NamespaceType, path string) {\n\ti := n.index(t)\n\tif i == -1 {\n\t\t*n = append(*n, Namespace{Type: t, Path: path})\n\t\treturn\n\t}\n\t(*n)[i].Path = path\n}\n\nfunc (n *Namespaces) index(t NamespaceType) int {\n\tfor i, ns := range *n {\n\t\tif ns.Type == t {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\nfunc (n *Namespaces) Contains(t NamespaceType) bool {\n\treturn n.index(t) != -1\n}\n\nfunc (n *Namespaces) PathOf(t NamespaceType) string {\n\ti := n.index(t)\n\tif i == -1 {\n\t\treturn \"\"\n\t}\n\treturn (*n)[i].Path\n}\n"
  },
  {
    "path": "libcontainer/configs/namespaces_syscall.go",
    "content": "//go:build linux\n\npackage configs\n\nimport \"golang.org/x/sys/unix\"\n\nfunc (n *Namespace) Syscall() int {\n\treturn namespaceInfo[n.Type]\n}\n\nvar namespaceInfo = map[NamespaceType]int{\n\tNEWNET:    unix.CLONE_NEWNET,\n\tNEWNS:     unix.CLONE_NEWNS,\n\tNEWUSER:   unix.CLONE_NEWUSER,\n\tNEWIPC:    unix.CLONE_NEWIPC,\n\tNEWUTS:    unix.CLONE_NEWUTS,\n\tNEWPID:    unix.CLONE_NEWPID,\n\tNEWCGROUP: unix.CLONE_NEWCGROUP,\n\tNEWTIME:   unix.CLONE_NEWTIME,\n}\n\n// CloneFlags parses the container's Namespaces options to set the correct\n// flags on clone, unshare. This function returns flags only for new namespaces.\nfunc (n *Namespaces) CloneFlags() uintptr {\n\tvar flag int\n\tfor _, v := range *n {\n\t\tif v.Path != \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tflag |= namespaceInfo[v.Type]\n\t}\n\treturn uintptr(flag)\n}\n\n// IsPrivate tells whether the namespace of type t is configured as private\n// (i.e. it exists and is not shared).\nfunc (n Namespaces) IsPrivate(t NamespaceType) bool {\n\tfor _, v := range n {\n\t\tif v.Type == t {\n\t\t\treturn v.Path == \"\"\n\t\t}\n\t}\n\t// Not found, so implicitly sharing a parent namespace.\n\treturn false\n}\n"
  },
  {
    "path": "libcontainer/configs/namespaces_syscall_unsupported.go",
    "content": "//go:build !linux && !windows\n\npackage configs\n\nfunc (n *Namespace) Syscall() int {\n\tpanic(\"No namespace syscall support\")\n}\n\n// CloneFlags parses the container's Namespaces options to set the correct\n// flags on clone, unshare. This function returns flags only for new namespaces.\nfunc (n *Namespaces) CloneFlags() uintptr {\n\tpanic(\"No namespace syscall support\")\n}\n"
  },
  {
    "path": "libcontainer/configs/namespaces_unsupported.go",
    "content": "//go:build !linux\n\npackage configs\n\n// Namespace defines configuration for each namespace.  It specifies an\n// alternate path that is able to be joined via setns.\ntype Namespace struct{}\n"
  },
  {
    "path": "libcontainer/configs/netdevices.go",
    "content": "package configs\n\n// LinuxNetDevice represents a single network device to be added to the container's network namespace.\ntype LinuxNetDevice struct {\n\t// Name of the device in the container namespace.\n\tName string `json:\"name,omitempty\"`\n}\n"
  },
  {
    "path": "libcontainer/configs/network.go",
    "content": "package configs\n\n// Network defines configuration for a container's networking stack\n//\n// The network configuration can be omitted from a container causing the\n// container to be setup with the host's networking stack\ntype Network struct {\n\t// Type sets the networks type, commonly veth and loopback.\n\tType string `json:\"type\"`\n\n\t// Name of the network interface.\n\tName string `json:\"name,omitempty\"`\n\n\t// The bridge to use.\n\tBridge string `json:\"bridge,omitempty\"`\n\n\t// MacAddress contains the MAC address to set on the network interface.\n\tMacAddress string `json:\"mac_address,omitempty\"`\n\n\t// Address contains the IPv4 and mask to set on the network interface.\n\tAddress string `json:\"address,omitempty\"`\n\n\t// Gateway sets the gateway address that is used as the default for the interface.\n\tGateway string `json:\"gateway,omitempty\"`\n\n\t// IPv6Address contains the IPv6 and mask to set on the network interface.\n\tIPv6Address string `json:\"ipv6_address,omitempty\"`\n\n\t// IPv6Gateway sets the ipv6 gateway address that is used as the default for the interface.\n\tIPv6Gateway string `json:\"ipv6_gateway,omitempty\"`\n\n\t// Mtu sets the mtu value for the interface and will be mirrored on both the host and\n\t// container's interfaces if a pair is created, specifically in the case of type veth\n\t// Note: This does not apply to loopback interfaces.\n\tMtu int `json:\"mtu,omitempty\"`\n\n\t// TxQueueLen sets the tx_queuelen value for the interface and will be mirrored on both the host and\n\t// container's interfaces if a pair is created, specifically in the case of type veth\n\t// Note: This does not apply to loopback interfaces.\n\tTxQueueLen int `json:\"txqueuelen,omitempty\"`\n\n\t// HostInterfaceName is a unique name of a veth pair that resides on in the host interface of the\n\t// container.\n\tHostInterfaceName string `json:\"host_interface_name,omitempty\"`\n\n\t// HairpinMode specifies if hairpin NAT should be enabled on the virtual interface\n\t// bridge port in the case of type veth\n\t// Note: This is unsupported on some systems.\n\t// Note: This does not apply to loopback interfaces.\n\tHairpinMode bool `json:\"hairpin_mode,omitempty\"`\n}\n\n// Route defines a routing table entry.\n//\n// Routes can be specified to create entries in the routing table as the container\n// is started.\n//\n// All of destination, source, and gateway should be either IPv4 or IPv6.\n// One of the three options must be present, and omitted entries will use their\n// IP family default for the route table.  For IPv4 for example, setting the\n// gateway to 1.2.3.4 and the interface to eth0 will set up a standard\n// destination of 0.0.0.0(or *) when viewed in the route table.\ntype Route struct {\n\t// Destination specifies the destination IP address and mask in the CIDR form.\n\tDestination string `json:\"destination,omitempty\"`\n\n\t// Source specifies the source IP address and mask in the CIDR form.\n\tSource string `json:\"source,omitempty\"`\n\n\t// Gateway specifies the gateway IP address.\n\tGateway string `json:\"gateway,omitempty\"`\n\n\t// InterfaceName specifies the device to set this route up for, for example eth0.\n\tInterfaceName string `json:\"interface_name,omitempty\"`\n}\n"
  },
  {
    "path": "libcontainer/configs/tocpuset_test.go",
    "content": "package configs\n\nimport (\n\t\"testing\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc TestToCPUSet(t *testing.T) {\n\tset := func(cpus ...int) *unix.CPUSet {\n\t\tr := &unix.CPUSet{}\n\t\tfor _, cpu := range cpus {\n\t\t\tr.Set(cpu)\n\t\t}\n\t\treturn r\n\t}\n\n\ttestCases := []struct {\n\t\tin    string\n\t\tout   *unix.CPUSet\n\t\tisErr bool\n\t}{\n\t\t{in: \"\"}, // Empty means unset.\n\n\t\t// Valid cases.\n\t\t{in: \"0\", out: &unix.CPUSet{1}},\n\t\t{in: \"1\", out: &unix.CPUSet{2}},\n\t\t{in: \"0-1\", out: &unix.CPUSet{3}},\n\t\t{in: \"0,1\", out: &unix.CPUSet{3}},\n\t\t{in: \",0,1,\", out: &unix.CPUSet{3}},\n\t\t{in: \"0-3\", out: &unix.CPUSet{0x0f}},\n\t\t{in: \"0,1,2-3\", out: &unix.CPUSet{0x0f}},\n\t\t{in: \"4-7\", out: &unix.CPUSet{0xf0}},\n\t\t{in: \"0-7\", out: &unix.CPUSet{0xff}},\n\t\t{in: \"0-15\", out: &unix.CPUSet{0xffff}},\n\t\t{in: \"16\", out: &unix.CPUSet{0x10000}},\n\t\t// Extra whitespace in between ranges are OK.\n\t\t{in: \"1, 2, 1-2\", out: &unix.CPUSet{6}},\n\t\t{in: \"    , 1   , 3  ,  5-7,    \", out: &unix.CPUSet{0xea}},\n\t\t// Somewhat large values. The underlying type in unix.CPUSet\n\t\t// can either be uint32 or uint64, so we have to use a helper.\n\t\t{in: \"0-3,32-33\", out: set(0, 1, 2, 3, 32, 33)},\n\t\t{in: \"127-129, 1\", out: set(1, 127, 128, 129)},\n\t\t{in: \"1023\", out: set(1023)},\n\n\t\t// Error cases.\n\t\t{in: \"-\", isErr: true},\n\t\t{in: \"1-\", isErr: true},\n\t\t{in: \"-3\", isErr: true},\n\t\t{in: \",\", isErr: true},\n\t\t{in: \" \", isErr: true},\n\t\t// Bad range (start > end).\n\t\t{in: \"54-53\", isErr: true},\n\t\t// Extra spaces inside a range is not OK.\n\t\t{in: \"1 - 2\", isErr: true},\n\t\t{in: \"1024\", isErr: true}, // Too big for unix.CPUSet.\n\t}\n\n\tfor _, tc := range testCases {\n\t\tt.Run(tc.in, func(t *testing.T) {\n\t\t\tout, err := ToCPUSet(tc.in)\n\t\t\tt.Logf(\"ToCPUSet(%q) = %v (error: %v)\", tc.in, out, err)\n\t\t\t// Check the error.\n\t\t\tif tc.isErr {\n\t\t\t\tif err == nil {\n\t\t\t\t\tt.Error(\"want error, got nil\")\n\t\t\t\t}\n\t\t\t\treturn // No more checks.\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"want no error, got %v\", err)\n\t\t\t}\n\t\t\t// Check the value.\n\t\t\tif tc.out == nil {\n\t\t\t\tif out != nil {\n\t\t\t\t\tt.Fatalf(\"want nil, got %v\", out)\n\t\t\t\t}\n\t\t\t\treturn // No more checks.\n\t\t\t}\n\t\t\tif out == nil {\n\t\t\t\tt.Fatalf(\"want %v, got nil\", tc.out)\n\t\t\t}\n\t\t\tif *out != *tc.out {\n\t\t\t\tt.Errorf(\"case %q: want %v, got %v\", tc.in, tc.out, out)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "libcontainer/configs/validate/doc.go",
    "content": "// Package validate provides helpers for validating configuration.\npackage validate\n"
  },
  {
    "path": "libcontainer/configs/validate/intelrdt.go",
    "content": "package validate\n\nimport (\n\t\"sync\"\n\n\t\"github.com/opencontainers/runc/libcontainer/intelrdt\"\n)\n\n// Cache the result of intelrdt IsEnabled functions to avoid repeated sysfs\n// access and enable mocking for unit tests.\ntype intelRdtStatus struct {\n\tsync.Once\n\trdtEnabled bool\n\tcatEnabled bool\n\tmbaEnabled bool\n}\n\nvar intelRdt = &intelRdtStatus{}\n\nfunc (i *intelRdtStatus) init() {\n\ti.Do(func() {\n\t\ti.rdtEnabled = intelrdt.IsEnabled()\n\t\ti.catEnabled = intelrdt.IsCATEnabled()\n\t\ti.mbaEnabled = intelrdt.IsMBAEnabled()\n\t})\n}\n\nfunc (i *intelRdtStatus) isEnabled() bool {\n\ti.init()\n\treturn i.rdtEnabled\n}\n\nfunc (i *intelRdtStatus) isCATEnabled() bool {\n\ti.init()\n\treturn i.catEnabled\n}\n\nfunc (i *intelRdtStatus) isMBAEnabled() bool {\n\ti.init()\n\treturn i.mbaEnabled\n}\n"
  },
  {
    "path": "libcontainer/configs/validate/intelrdt_test.go",
    "content": "package validate\n\nimport (\n\t\"testing\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n)\n\nfunc TestValidateIntelRdt(t *testing.T) {\n\t// Call init to trigger the sync.Once and enable overriding the rdt status\n\tintelRdt.init()\n\n\ttestCases := []struct {\n\t\tname       string\n\t\trdtEnabled bool\n\t\tcatEnabled bool\n\t\tmbaEnabled bool\n\t\tconfig     *configs.IntelRdt\n\t\tisErr      bool\n\t}{\n\t\t{\n\t\t\tname: \"rdt not supported, no config\",\n\t\t},\n\t\t{\n\t\t\tname:   \"rdt not supported, with config\",\n\t\t\tconfig: &configs.IntelRdt{},\n\t\t\tisErr:  true,\n\t\t},\n\t\t{\n\t\t\tname:       \"empty config\",\n\t\t\trdtEnabled: true,\n\t\t\tconfig:     &configs.IntelRdt{},\n\t\t},\n\t\t{\n\t\t\tname:       \"root clos\",\n\t\t\trdtEnabled: true,\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tClosID: \"/\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname:       \"invalid ClosID (.)\",\n\t\t\trdtEnabled: true,\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tClosID: \".\",\n\t\t\t},\n\t\t\tisErr: true,\n\t\t},\n\t\t{\n\t\t\tname:       \"invalid ClosID (..)\",\n\t\t\trdtEnabled: true,\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tClosID: \"..\",\n\t\t\t},\n\t\t\tisErr: true,\n\t\t},\n\t\t{\n\t\t\tname:       \"invalid ClosID (contains /)\",\n\t\t\trdtEnabled: true,\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tClosID: \"foo/bar\",\n\t\t\t},\n\t\t\tisErr: true,\n\t\t},\n\t\t{\n\t\t\tname:       \"cat not supported\",\n\t\t\trdtEnabled: true,\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tL3CacheSchema: \"0=ff\",\n\t\t\t},\n\t\t\tisErr: true,\n\t\t},\n\t\t{\n\t\t\tname:       \"mba not supported\",\n\t\t\trdtEnabled: true,\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tMemBwSchema: \"0=100\",\n\t\t\t},\n\t\t\tisErr: true,\n\t\t},\n\t\t{\n\t\t\tname:       \"valid config\",\n\t\t\trdtEnabled: true,\n\t\t\tcatEnabled: true,\n\t\t\tmbaEnabled: true,\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tClosID:        \"clos-1\",\n\t\t\t\tL3CacheSchema: \"0=ff\",\n\t\t\t\tMemBwSchema:   \"0=100\",\n\t\t\t},\n\t\t},\n\t}\n\tfor _, tc := range testCases {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tintelRdt.rdtEnabled = tc.rdtEnabled\n\t\t\tintelRdt.catEnabled = tc.catEnabled\n\t\t\tintelRdt.mbaEnabled = tc.mbaEnabled\n\n\t\t\tconfig := &configs.Config{\n\t\t\t\tRootfs:   \"/var\",\n\t\t\t\tIntelRdt: tc.config,\n\t\t\t}\n\n\t\t\terr := Validate(config)\n\t\t\tif tc.isErr && err == nil {\n\t\t\t\tt.Error(\"expected error, got nil\")\n\t\t\t}\n\t\t\tif !tc.isErr && err != nil {\n\t\t\t\tt.Error(err)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "libcontainer/configs/validate/rootless.go",
    "content": "package validate\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n)\n\n// rootlessEUIDCheck makes sure that the config can be applied when runc\n// is being executed as a non-root user (euid != 0) in the current user namespace.\nfunc rootlessEUIDCheck(config *configs.Config) error {\n\tif !config.RootlessEUID {\n\t\treturn nil\n\t}\n\tif err := rootlessEUIDMappings(config); err != nil {\n\t\treturn err\n\t}\n\tif err := rootlessEUIDMount(config); err != nil {\n\t\treturn err\n\t}\n\n\t// XXX: We currently can't verify the user config at all, because\n\t//      configs.Config doesn't store the user-related configs. So this\n\t//      has to be verified by setupUser() in init_linux.go.\n\n\treturn nil\n}\n\nfunc rootlessEUIDMappings(config *configs.Config) error {\n\tif !config.Namespaces.Contains(configs.NEWUSER) {\n\t\treturn errors.New(\"rootless container requires user namespaces\")\n\t}\n\t// We only require mappings if we are not joining another userns.\n\tif config.Namespaces.IsPrivate(configs.NEWUSER) {\n\t\tif len(config.UIDMappings) == 0 {\n\t\t\treturn errors.New(\"rootless containers requires at least one UID mapping\")\n\t\t}\n\t\tif len(config.GIDMappings) == 0 {\n\t\t\treturn errors.New(\"rootless containers requires at least one GID mapping\")\n\t\t}\n\t}\n\treturn nil\n}\n\n// rootlessEUIDMount verifies that all mounts have valid uid=/gid= options,\n// i.e. their arguments has proper ID mappings.\nfunc rootlessEUIDMount(config *configs.Config) error {\n\t// XXX: We could whitelist allowed devices at this point, but I'm not\n\t//      convinced that's a good idea. The kernel is the best arbiter of\n\t//      access control.\n\n\t// Check that the options list doesn't contain any uid= or gid= entries\n\t// that don't resolve to root.\n\tfor _, mount := range config.Mounts {\n\t\t// Look for a common substring; skip further processing\n\t\t// if there can't be any uid= or gid= options.\n\t\tif !strings.Contains(mount.Data, \"id=\") {\n\t\t\tcontinue\n\t\t}\n\t\tfor opt := range strings.SplitSeq(mount.Data, \",\") {\n\t\t\tif str, ok := strings.CutPrefix(opt, \"uid=\"); ok {\n\t\t\t\tuid, err := strconv.Atoi(str)\n\t\t\t\tif err != nil {\n\t\t\t\t\t// Ignore unknown mount options.\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif _, err := config.HostUID(uid); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"cannot specify %s mount option for rootless container: %w\", opt, err)\n\t\t\t\t}\n\t\t\t} else if str, ok := strings.CutPrefix(opt, \"gid=\"); ok {\n\t\t\t\tgid, err := strconv.Atoi(str)\n\t\t\t\tif err != nil {\n\t\t\t\t\t// Ignore unknown mount options.\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif _, err := config.HostGID(gid); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"cannot specify %s mount option for rootless container: %w\", opt, err)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "libcontainer/configs/validate/rootless_test.go",
    "content": "package validate\n\nimport (\n\t\"testing\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n)\n\nfunc rootlessEUIDConfig() *configs.Config {\n\treturn &configs.Config{\n\t\tRootfs:          \"/var\",\n\t\tRootlessEUID:    true,\n\t\tRootlessCgroups: true,\n\t\tNamespaces: configs.Namespaces(\n\t\t\t[]configs.Namespace{\n\t\t\t\t{Type: configs.NEWUSER},\n\t\t\t},\n\t\t),\n\t\tUIDMappings: []configs.IDMap{\n\t\t\t{\n\t\t\t\tHostID:      1337,\n\t\t\t\tContainerID: 0,\n\t\t\t\tSize:        1,\n\t\t\t},\n\t\t},\n\t\tGIDMappings: []configs.IDMap{\n\t\t\t{\n\t\t\t\tHostID:      7331,\n\t\t\t\tContainerID: 0,\n\t\t\t\tSize:        1,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc TestValidateRootlessEUID(t *testing.T) {\n\tconfig := rootlessEUIDConfig()\n\tif err := Validate(config); err != nil {\n\t\tt.Errorf(\"Expected error to not occur: %+v\", err)\n\t}\n}\n\n/* rootlessEUIDMappings */\n\nfunc TestValidateRootlessEUIDUserns(t *testing.T) {\n\tconfig := rootlessEUIDConfig()\n\tconfig.Namespaces = nil\n\tif err := Validate(config); err == nil {\n\t\tt.Errorf(\"Expected error to occur if user namespaces not set\")\n\t}\n}\n\nfunc TestValidateRootlessEUIDMappingUid(t *testing.T) {\n\tconfig := rootlessEUIDConfig()\n\tconfig.UIDMappings = nil\n\tif err := Validate(config); err == nil {\n\t\tt.Errorf(\"Expected error to occur if no uid mappings provided\")\n\t}\n}\n\nfunc TestValidateNonZeroEUIDMappingGid(t *testing.T) {\n\tconfig := rootlessEUIDConfig()\n\tconfig.GIDMappings = nil\n\tif err := Validate(config); err == nil {\n\t\tt.Errorf(\"Expected error to occur if no gid mappings provided\")\n\t}\n}\n\n/* rootlessEUIDMount() */\n\nfunc TestValidateRootlessEUIDMountUid(t *testing.T) {\n\tconfig := rootlessEUIDConfig()\n\tconfig.Mounts = []*configs.Mount{\n\t\t{\n\t\t\tSource:      \"devpts\",\n\t\t\tDestination: \"/dev/pts\",\n\t\t\tDevice:      \"devpts\",\n\t\t},\n\t}\n\n\tif err := Validate(config); err != nil {\n\t\tt.Errorf(\"Expected error to not occur when uid= not set in mount options: %+v\", err)\n\t}\n\n\tconfig.Mounts[0].Data = \"uid=5\"\n\tif err := Validate(config); err == nil {\n\t\tt.Errorf(\"Expected error to occur when setting uid=5 in mount options\")\n\t}\n\n\tconfig.Mounts[0].Data = \"uid=0\"\n\tif err := Validate(config); err != nil {\n\t\tt.Errorf(\"Expected error to not occur when setting uid=0 in mount options: %+v\", err)\n\t}\n\n\tconfig.Mounts[0].Data = \"uid=2\"\n\tconfig.UIDMappings[0].Size = 10\n\tif err := Validate(config); err != nil {\n\t\tt.Errorf(\"Expected error to not occur when setting uid=2 in mount options and UIDMappings[0].size is 10\")\n\t}\n\n\tconfig.Mounts[0].Data = \"uid=20\"\n\tconfig.UIDMappings[0].Size = 10\n\tif err := Validate(config); err == nil {\n\t\tt.Errorf(\"Expected error to occur when setting uid=20 in mount options and UIDMappings[0].size is 10\")\n\t}\n}\n\nfunc TestValidateRootlessEUIDMountGid(t *testing.T) {\n\tconfig := rootlessEUIDConfig()\n\tconfig.Mounts = []*configs.Mount{\n\t\t{\n\t\t\tSource:      \"devpts\",\n\t\t\tDestination: \"/dev/pts\",\n\t\t\tDevice:      \"devpts\",\n\t\t},\n\t}\n\n\tif err := Validate(config); err != nil {\n\t\tt.Errorf(\"Expected error to not occur when gid= not set in mount options: %+v\", err)\n\t}\n\n\tconfig.Mounts[0].Data = \"gid=5\"\n\tif err := Validate(config); err == nil {\n\t\tt.Errorf(\"Expected error to occur when setting gid=5 in mount options\")\n\t}\n\n\tconfig.Mounts[0].Data = \"gid=0\"\n\tif err := Validate(config); err != nil {\n\t\tt.Errorf(\"Expected error to not occur when setting gid=0 in mount options: %+v\", err)\n\t}\n\n\tconfig.Mounts[0].Data = \"gid=5\"\n\tconfig.GIDMappings[0].Size = 10\n\tif err := Validate(config); err != nil {\n\t\tt.Errorf(\"Expected error to not occur when setting gid=5 in mount options and GIDMappings[0].size is 10\")\n\t}\n\n\tconfig.Mounts[0].Data = \"gid=11\"\n\tconfig.GIDMappings[0].Size = 10\n\tif err := Validate(config); err == nil {\n\t\tt.Errorf(\"Expected error to occur when setting gid=11 in mount options and GIDMappings[0].size is 10\")\n\t}\n}\n\nfunc BenchmarkRootlessEUIDMount(b *testing.B) {\n\tconfig := rootlessEUIDConfig()\n\tconfig.GIDMappings[0].Size = 10\n\tconfig.Mounts = []*configs.Mount{\n\t\t{\n\t\t\tSource:      \"devpts\",\n\t\t\tDestination: \"/dev/pts\",\n\t\t\tDevice:      \"devpts\",\n\t\t\tData:        \"newinstance,ptmxmode=0666,mode=0620,uid=0,gid=5\",\n\t\t},\n\t}\n\n\tfor b.Loop() {\n\t\terr := rootlessEUIDMount(config)\n\t\tif err != nil {\n\t\t\tb.Fatal(err)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "libcontainer/configs/validate/validator.go",
    "content": "package validate\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\tselinux \"github.com/opencontainers/selinux/go-selinux\"\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n)\n\ntype check func(config *configs.Config) error\n\nfunc Validate(config *configs.Config) error {\n\tchecks := []check{\n\t\tcgroupsCheck,\n\t\trootfs,\n\t\tnetwork,\n\t\tnetdevices,\n\t\tuts,\n\t\tsecurity,\n\t\tnamespaces,\n\t\tsysctl,\n\t\tintelrdtCheck,\n\t\trootlessEUIDCheck,\n\t\tmountsStrict,\n\t\tscheduler,\n\t\tioPriority,\n\t\tmemoryPolicy,\n\t}\n\tfor _, c := range checks {\n\t\tif err := c(config); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t// Relaxed validation rules for backward compatibility\n\twarns := []check{\n\t\tmountsWarn,\n\t}\n\tfor _, c := range warns {\n\t\tif err := c(config); err != nil {\n\t\t\tlogrus.WithError(err).Warn(\"configuration\")\n\t\t}\n\t}\n\treturn nil\n}\n\n// rootfs validates if the rootfs is an absolute path and is not a symlink\n// to the container's root filesystem.\nfunc rootfs(config *configs.Config) error {\n\tif _, err := os.Stat(config.Rootfs); err != nil {\n\t\treturn fmt.Errorf(\"invalid rootfs: %w\", err)\n\t}\n\tcleaned, err := filepath.Abs(config.Rootfs)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"invalid rootfs: %w\", err)\n\t}\n\tif cleaned, err = filepath.EvalSymlinks(cleaned); err != nil {\n\t\treturn fmt.Errorf(\"invalid rootfs: %w\", err)\n\t}\n\tif filepath.Clean(config.Rootfs) != cleaned {\n\t\treturn errors.New(\"invalid rootfs: not an absolute path, or a symlink\")\n\t}\n\treturn nil\n}\n\n// https://elixir.bootlin.com/linux/v6.12/source/net/core/dev.c#L1066\nfunc devValidName(name string) bool {\n\tif len(name) == 0 || len(name) > unix.IFNAMSIZ {\n\t\treturn false\n\t}\n\tif name == \".\" || name == \"..\" {\n\t\treturn false\n\t}\n\tif strings.ContainsAny(name, \"/: \") {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc netdevices(config *configs.Config) error {\n\tif len(config.NetDevices) == 0 {\n\t\treturn nil\n\t}\n\tif !config.Namespaces.Contains(configs.NEWNET) {\n\t\treturn errors.New(\"unable to move network devices without a NET namespace\")\n\t}\n\n\tif config.RootlessEUID || config.RootlessCgroups {\n\t\treturn errors.New(\"network devices are not supported for rootless containers\")\n\t}\n\n\tfor name, netdev := range config.NetDevices {\n\t\tif !devValidName(name) {\n\t\t\treturn fmt.Errorf(\"invalid network device name %q\", name)\n\t\t}\n\t\tif netdev.Name != \"\" && !devValidName(netdev.Name) {\n\t\t\treturn fmt.Errorf(\"invalid network device name %q\", netdev.Name)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc network(config *configs.Config) error {\n\tif !config.Namespaces.Contains(configs.NEWNET) {\n\t\tif len(config.Networks) > 0 || len(config.Routes) > 0 {\n\t\t\treturn errors.New(\"unable to apply network settings without a private NET namespace\")\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc uts(config *configs.Config) error {\n\tif config.Hostname != \"\" && !config.Namespaces.Contains(configs.NEWUTS) {\n\t\treturn errors.New(\"unable to set hostname without a private UTS namespace\")\n\t}\n\tif config.Domainname != \"\" && !config.Namespaces.Contains(configs.NEWUTS) {\n\t\treturn errors.New(\"unable to set domainname without a private UTS namespace\")\n\t}\n\treturn nil\n}\n\nfunc security(config *configs.Config) error {\n\t// restrict sys without mount namespace\n\tif (len(config.MaskPaths) > 0 || len(config.ReadonlyPaths) > 0) &&\n\t\t!config.Namespaces.Contains(configs.NEWNS) {\n\t\treturn errors.New(\"unable to restrict sys entries without a private MNT namespace\")\n\t}\n\tif config.ProcessLabel != \"\" && !selinux.GetEnabled() {\n\t\treturn errors.New(\"selinux label is specified in config, but selinux is disabled or not supported\")\n\t}\n\n\treturn nil\n}\n\nfunc namespaces(config *configs.Config) error {\n\tif config.Namespaces.Contains(configs.NEWUSER) {\n\t\tif _, err := os.Stat(\"/proc/self/ns/user\"); errors.Is(err, os.ErrNotExist) {\n\t\t\treturn errors.New(\"user namespaces aren't enabled in the kernel\")\n\t\t}\n\t\thasPath := config.Namespaces.PathOf(configs.NEWUSER) != \"\"\n\t\thasMappings := config.UIDMappings != nil || config.GIDMappings != nil\n\t\tif !hasPath && !hasMappings {\n\t\t\treturn errors.New(\"user namespaces enabled, but no namespace path to join nor mappings to apply specified\")\n\t\t}\n\t\t// The hasPath && hasMappings validation case is handled in specconv --\n\t\t// we cache the mappings in Config during specconv in the hasPath case,\n\t\t// so we cannot do that validation here.\n\t} else {\n\t\tif config.UIDMappings != nil || config.GIDMappings != nil {\n\t\t\treturn errors.New(\"user namespace mappings specified, but user namespace isn't enabled in the config\")\n\t\t}\n\t}\n\n\tif config.Namespaces.Contains(configs.NEWCGROUP) {\n\t\tif _, err := os.Stat(\"/proc/self/ns/cgroup\"); errors.Is(err, os.ErrNotExist) {\n\t\t\treturn errors.New(\"cgroup namespaces aren't enabled in the kernel\")\n\t\t}\n\t}\n\n\tif config.Namespaces.Contains(configs.NEWTIME) {\n\t\tif _, err := os.Stat(\"/proc/self/timens_offsets\"); errors.Is(err, os.ErrNotExist) {\n\t\t\treturn errors.New(\"time namespaces aren't enabled in the kernel\")\n\t\t}\n\t\thasPath := config.Namespaces.PathOf(configs.NEWTIME) != \"\"\n\t\thasOffsets := config.TimeOffsets != nil\n\t\tif hasPath && hasOffsets {\n\t\t\treturn errors.New(\"time namespace enabled, but both namespace path and time offsets specified -- you may only provide one\")\n\t\t}\n\t} else {\n\t\tif config.TimeOffsets != nil {\n\t\t\treturn errors.New(\"time namespace offsets specified, but time namespace isn't enabled in the config\")\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// convertSysctlVariableToDotsSeparator can return sysctl variables in dots separator format.\n// The '/' separator is also accepted in place of a '.'.\n// Convert the sysctl variables to dots separator format for validation.\n// More info: sysctl(8), sysctl.d(5).\n//\n// For example:\n// Input sysctl variable \"net/ipv4/conf/eno2.100.rp_filter\"\n// will return the converted value \"net.ipv4.conf.eno2/100.rp_filter\"\nfunc convertSysctlVariableToDotsSeparator(val string) string {\n\tif val == \"\" {\n\t\treturn val\n\t}\n\tfirstSepIndex := strings.IndexAny(val, \"./\")\n\tif firstSepIndex == -1 || val[firstSepIndex] == '.' {\n\t\treturn val\n\t}\n\n\tf := func(r rune) rune {\n\t\tswitch r {\n\t\tcase '.':\n\t\t\treturn '/'\n\t\tcase '/':\n\t\t\treturn '.'\n\t\t}\n\t\treturn r\n\t}\n\treturn strings.Map(f, val)\n}\n\n// sysctl validates that the specified sysctl keys are valid or not.\n// /proc/sys isn't completely namespaced and depending on which namespaces\n// are specified, a subset of sysctls are permitted.\nfunc sysctl(config *configs.Config) error {\n\tvalidSysctlMap := map[string]bool{\n\t\t\"kernel.msgmax\":          true,\n\t\t\"kernel.msgmnb\":          true,\n\t\t\"kernel.msgmni\":          true,\n\t\t\"kernel.sem\":             true,\n\t\t\"kernel.shmall\":          true,\n\t\t\"kernel.shmmax\":          true,\n\t\t\"kernel.shmmni\":          true,\n\t\t\"kernel.shm_rmid_forced\": true,\n\t}\n\n\tvar (\n\t\tnetOnce    sync.Once\n\t\thostnet    bool\n\t\thostnetErr error\n\t)\n\n\tfor s := range config.Sysctl {\n\t\ts := convertSysctlVariableToDotsSeparator(s)\n\t\tif validSysctlMap[s] || strings.HasPrefix(s, \"fs.mqueue.\") {\n\t\t\tif config.Namespaces.Contains(configs.NEWIPC) {\n\t\t\t\tcontinue\n\t\t\t} else {\n\t\t\t\treturn fmt.Errorf(\"sysctl %q is not allowed in the hosts ipc namespace\", s)\n\t\t\t}\n\t\t}\n\t\tif strings.HasPrefix(s, \"net.\") {\n\t\t\t// Is container using host netns?\n\t\t\t// Here \"host\" means \"current\", not \"initial\".\n\t\t\tnetOnce.Do(func() {\n\t\t\t\tif !config.Namespaces.Contains(configs.NEWNET) {\n\t\t\t\t\thostnet = true\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tpath := config.Namespaces.PathOf(configs.NEWNET)\n\t\t\t\tif path == \"\" {\n\t\t\t\t\t// own netns, so hostnet = false\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\thostnet, hostnetErr = isHostNetNS(path)\n\t\t\t})\n\t\t\tif hostnetErr != nil {\n\t\t\t\treturn fmt.Errorf(\"invalid netns path: %w\", hostnetErr)\n\t\t\t}\n\t\t\tif hostnet {\n\t\t\t\treturn fmt.Errorf(\"sysctl %q not allowed in host network namespace\", s)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif config.Namespaces.Contains(configs.NEWUTS) {\n\t\t\tswitch s {\n\t\t\tcase \"kernel.domainname\":\n\t\t\t\t// This is namespaced and there's no explicit OCI field for it.\n\t\t\t\tcontinue\n\t\t\tcase \"kernel.hostname\":\n\t\t\t\t// This is namespaced but there's a conflicting (dedicated) OCI field for it.\n\t\t\t\treturn fmt.Errorf(\"sysctl %q is not allowed as it conflicts with the OCI %q field\", s, \"hostname\")\n\t\t\t}\n\t\t}\n\n\t\tif strings.HasPrefix(s, \"user.\") {\n\n\t\t\t// while it is technically true that a non-userns\n\t\t\t// container can write to /proc/sys/user on behalf of\n\t\t\t// the init_user_ns, it was not previously supported,\n\t\t\t// and doesn't guarantee that someone else spawns a\n\t\t\t// different container and writes there, changing the\n\t\t\t// values. in particular, setting something like\n\t\t\t// max_user_namespaces to non-zero could be a vector to\n\t\t\t// use 0-days where the admin had previously disabled\n\t\t\t// them.\n\t\t\t//\n\t\t\t// additionally, this setting affects other host\n\t\t\t// processes that are not container related.\n\t\t\t//\n\t\t\t// so let's refuse this unless we know for sure it\n\t\t\t// won't touch anything else.\n\t\t\tif !config.Namespaces.Contains(configs.NEWUSER) {\n\t\t\t\treturn fmt.Errorf(\"setting ucounts without a user namespace not allowed: %v\", s)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\treturn fmt.Errorf(\"sysctl %q is not in a separate kernel namespace\", s)\n\t}\n\n\treturn nil\n}\n\nfunc intelrdtCheck(config *configs.Config) error {\n\tif config.IntelRdt != nil {\n\t\tif !intelRdt.isEnabled() {\n\t\t\treturn fmt.Errorf(\"intelRdt is specified in config, but Intel RDT is not enabled\")\n\t\t}\n\n\t\tswitch clos := config.IntelRdt.ClosID; {\n\t\tcase clos == \".\", clos == \"..\", len(clos) > 1 && strings.Contains(clos, \"/\"):\n\t\t\treturn fmt.Errorf(\"invalid intelRdt.ClosID %q\", clos)\n\t\t}\n\n\t\tif !intelRdt.isCATEnabled() && config.IntelRdt.L3CacheSchema != \"\" {\n\t\t\treturn errors.New(\"intelRdt.l3CacheSchema is specified in config, but Intel RDT/CAT is not enabled\")\n\t\t}\n\t\tif !intelRdt.isMBAEnabled() && config.IntelRdt.MemBwSchema != \"\" {\n\t\t\treturn errors.New(\"intelRdt.memBwSchema is specified in config, but Intel RDT/MBA is not enabled\")\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc cgroupsCheck(config *configs.Config) error {\n\tc := config.Cgroups\n\tif c == nil {\n\t\treturn nil\n\t}\n\n\tif (c.Name != \"\" || c.Parent != \"\") && c.Path != \"\" {\n\t\treturn fmt.Errorf(\"cgroup: either Path or Name and Parent should be used, got %+v\", c)\n\t}\n\n\tr := c.Resources\n\tif r == nil {\n\t\treturn nil\n\t}\n\n\tif !cgroups.IsCgroup2UnifiedMode() && r.Unified != nil {\n\t\treturn cgroups.ErrV1NoUnified\n\t}\n\n\tif cgroups.IsCgroup2UnifiedMode() {\n\t\t_, err := cgroups.ConvertMemorySwapToCgroupV2Value(r.MemorySwap, r.Memory)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc checkBindOptions(m *configs.Mount) error {\n\tif !m.IsBind() {\n\t\treturn nil\n\t}\n\t// We must reject bind-mounts that also have filesystem-specific mount\n\t// options, because the kernel will completely ignore these flags and we\n\t// cannot set them per-mountpoint.\n\t//\n\t// It should be noted that (due to how the kernel caches superblocks), data\n\t// options could also silently ignored for other filesystems even when\n\t// doing a fresh mount, but there is no real way to avoid this (and it\n\t// matches how everything else works). There have been proposals to make it\n\t// possible for userspace to detect this caching, but this wouldn't help\n\t// runc because the behaviour wouldn't even be desirable for most users.\n\tif m.Data != \"\" {\n\t\treturn errors.New(\"bind mounts cannot have any filesystem-specific options applied\")\n\t}\n\treturn nil\n}\n\nfunc checkIDMapMounts(config *configs.Config, m *configs.Mount) error {\n\t// Make sure MOUNT_ATTR_IDMAP is not set on any of our mounts. This\n\t// attribute is handled differently to all other attributes (through\n\t// m.IDMapping), so make sure we never store it in the actual config. This\n\t// really shouldn't ever happen.\n\tif m.RecAttr != nil && (m.RecAttr.Attr_set|m.RecAttr.Attr_clr)&unix.MOUNT_ATTR_IDMAP != 0 {\n\t\treturn errors.New(\"mount configuration cannot contain recAttr for MOUNT_ATTR_IDMAP\")\n\t}\n\tif !m.IsIDMapped() {\n\t\treturn nil\n\t}\n\tif !m.IsBind() {\n\t\treturn errors.New(\"id-mapped mounts are only supported for bind-mounts\")\n\t}\n\tif config.RootlessEUID {\n\t\treturn errors.New(\"id-mapped mounts are not supported for rootless containers\")\n\t}\n\tif m.IDMapping.UserNSPath == \"\" {\n\t\tif len(m.IDMapping.UIDMappings) == 0 || len(m.IDMapping.GIDMappings) == 0 {\n\t\t\treturn errors.New(\"id-mapped mounts must have both uid and gid mappings specified\")\n\t\t}\n\t} else {\n\t\tif m.IDMapping.UIDMappings != nil || m.IDMapping.GIDMappings != nil {\n\t\t\t// should never happen\n\t\t\treturn errors.New(\"[internal error] id-mapped mounts cannot have both userns_path and uid and gid mappings specified\")\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc mountsWarn(config *configs.Config) error {\n\tfor _, m := range config.Mounts {\n\t\tif !filepath.IsAbs(m.Destination) {\n\t\t\treturn fmt.Errorf(\"mount %+v: relative destination path is **deprecated**, using it as relative to /\", m)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc mountsStrict(config *configs.Config) error {\n\tfor _, m := range config.Mounts {\n\t\tif err := checkBindOptions(m); err != nil {\n\t\t\treturn fmt.Errorf(\"invalid mount %+v: %w\", m, err)\n\t\t}\n\t\tif err := checkIDMapMounts(config, m); err != nil {\n\t\t\treturn fmt.Errorf(\"invalid mount %+v: %w\", m, err)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc isHostNetNS(path string) (bool, error) {\n\tconst currentProcessNetns = \"/proc/self/ns/net\"\n\n\tvar st1, st2 unix.Stat_t\n\n\tif err := unix.Stat(currentProcessNetns, &st1); err != nil {\n\t\treturn false, &os.PathError{Op: \"stat\", Path: currentProcessNetns, Err: err}\n\t}\n\tif err := unix.Stat(path, &st2); err != nil {\n\t\treturn false, &os.PathError{Op: \"stat\", Path: path, Err: err}\n\t}\n\n\treturn (st1.Dev == st2.Dev) && (st1.Ino == st2.Ino), nil\n}\n\n// scheduler is to validate scheduler configs according to https://man7.org/linux/man-pages/man2/sched_setattr.2.html\nfunc scheduler(config *configs.Config) error {\n\ts := config.Scheduler\n\tif s == nil {\n\t\treturn nil\n\t}\n\tif s.Policy == \"\" {\n\t\treturn errors.New(\"scheduler policy is required\")\n\t}\n\tif s.Policy == specs.SchedOther || s.Policy == specs.SchedBatch {\n\t\tif s.Nice < -20 || s.Nice > 19 {\n\t\t\treturn fmt.Errorf(\"invalid scheduler.nice: %d when scheduler.policy is %s\", s.Nice, string(s.Policy))\n\t\t}\n\t}\n\tif s.Priority != 0 && (s.Policy != specs.SchedFIFO && s.Policy != specs.SchedRR) {\n\t\treturn errors.New(\"scheduler.priority can only be specified for SchedFIFO or SchedRR policy\")\n\t}\n\tif s.Policy != specs.SchedDeadline && (s.Runtime != 0 || s.Deadline != 0 || s.Period != 0) {\n\t\treturn errors.New(\"scheduler runtime/deadline/period can only be specified for SchedDeadline policy\")\n\t}\n\treturn nil\n}\n\nfunc ioPriority(config *configs.Config) error {\n\tif config.IOPriority == nil {\n\t\treturn nil\n\t}\n\tpriority := config.IOPriority.Priority\n\tif priority < 0 || priority > 7 {\n\t\treturn fmt.Errorf(\"invalid ioPriority.Priority: %d\", priority)\n\t}\n\n\tswitch class := config.IOPriority.Class; class {\n\tcase specs.IOPRIO_CLASS_RT, specs.IOPRIO_CLASS_BE, specs.IOPRIO_CLASS_IDLE:\n\t\t// Valid class, do nothing.\n\tdefault:\n\t\treturn fmt.Errorf(\"invalid ioPriority.Class: %q\", class)\n\t}\n\n\treturn nil\n}\n\nfunc memoryPolicy(config *configs.Config) error {\n\tmpol := config.MemoryPolicy\n\tif mpol == nil {\n\t\treturn nil\n\t}\n\tswitch mpol.Mode {\n\tcase unix.MPOL_DEFAULT, unix.MPOL_LOCAL:\n\t\tif mpol.Nodes != nil && mpol.Nodes.Count() != 0 {\n\t\t\treturn fmt.Errorf(\"memory policy mode requires 0 nodes but got %d\", mpol.Nodes.Count())\n\t\t}\n\tcase unix.MPOL_BIND, unix.MPOL_INTERLEAVE,\n\t\tunix.MPOL_PREFERRED_MANY, unix.MPOL_WEIGHTED_INTERLEAVE:\n\t\tif mpol.Nodes == nil || mpol.Nodes.Count() == 0 {\n\t\t\treturn fmt.Errorf(\"memory policy mode requires at least one node but got 0\")\n\t\t}\n\tcase unix.MPOL_PREFERRED:\n\t\t// Zero or more nodes are allowed by the kernel.\n\tdefault:\n\t\treturn fmt.Errorf(\"invalid memory policy mode: %d\", mpol.Mode)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "libcontainer/configs/validate/validator_test.go",
    "content": "package validate\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc TestValidate(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tRootfs: \"/var\",\n\t}\n\n\terr := Validate(config)\n\tif err != nil {\n\t\tt.Errorf(\"Expected error to not occur: %+v\", err)\n\t}\n}\n\nfunc TestValidateWithInvalidRootfs(t *testing.T) {\n\tdir := \"rootfs\"\n\tif err := os.Symlink(\"/var\", dir); err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer os.Remove(dir)\n\n\tconfig := &configs.Config{\n\t\tRootfs: dir,\n\t}\n\n\terr := Validate(config)\n\tif err == nil {\n\t\tt.Error(\"Expected error to occur but it was nil\")\n\t}\n}\n\nfunc TestValidateNetworkWithoutNETNamespace(t *testing.T) {\n\tnetwork := &configs.Network{Type: \"loopback\"}\n\tconfig := &configs.Config{\n\t\tRootfs:     \"/var\",\n\t\tNamespaces: []configs.Namespace{},\n\t\tNetworks:   []*configs.Network{network},\n\t}\n\n\terr := Validate(config)\n\tif err == nil {\n\t\tt.Error(\"Expected error to occur but it was nil\")\n\t}\n}\n\nfunc TestValidateNetworkRoutesWithoutNETNamespace(t *testing.T) {\n\troute := &configs.Route{Gateway: \"255.255.255.0\"}\n\tconfig := &configs.Config{\n\t\tRootfs:     \"/var\",\n\t\tNamespaces: []configs.Namespace{},\n\t\tRoutes:     []*configs.Route{route},\n\t}\n\n\terr := Validate(config)\n\tif err == nil {\n\t\tt.Error(\"Expected error to occur but it was nil\")\n\t}\n}\n\nfunc TestValidateHostname(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tRootfs:   \"/var\",\n\t\tHostname: \"runc\",\n\t\tNamespaces: configs.Namespaces(\n\t\t\t[]configs.Namespace{\n\t\t\t\t{Type: configs.NEWUTS},\n\t\t\t},\n\t\t),\n\t}\n\n\terr := Validate(config)\n\tif err != nil {\n\t\tt.Errorf(\"Expected error to not occur: %+v\", err)\n\t}\n}\n\nfunc TestValidateUTS(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tRootfs:     \"/var\",\n\t\tDomainname: \"runc\",\n\t\tHostname:   \"runc\",\n\t\tNamespaces: configs.Namespaces(\n\t\t\t[]configs.Namespace{\n\t\t\t\t{Type: configs.NEWUTS},\n\t\t\t},\n\t\t),\n\t}\n\n\terr := Validate(config)\n\tif err != nil {\n\t\tt.Errorf(\"Expected error to not occur: %+v\", err)\n\t}\n}\n\nfunc TestValidateUTSWithoutUTSNamespace(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tRootfs:   \"/var\",\n\t\tHostname: \"runc\",\n\t}\n\n\terr := Validate(config)\n\tif err == nil {\n\t\tt.Error(\"Expected error to occur but it was nil\")\n\t}\n\n\tconfig = &configs.Config{\n\t\tRootfs:     \"/var\",\n\t\tDomainname: \"runc\",\n\t}\n\n\terr = Validate(config)\n\tif err == nil {\n\t\tt.Error(\"Expected error to occur but it was nil\")\n\t}\n}\n\nfunc TestValidateSecurityWithMaskPaths(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tRootfs:    \"/var\",\n\t\tMaskPaths: []string{\"/proc/kcore\"},\n\t\tNamespaces: configs.Namespaces(\n\t\t\t[]configs.Namespace{\n\t\t\t\t{Type: configs.NEWNS},\n\t\t\t},\n\t\t),\n\t}\n\n\terr := Validate(config)\n\tif err != nil {\n\t\tt.Errorf(\"Expected error to not occur: %+v\", err)\n\t}\n}\n\nfunc TestValidateSecurityWithROPaths(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tRootfs:        \"/var\",\n\t\tReadonlyPaths: []string{\"/proc/sys\"},\n\t\tNamespaces: configs.Namespaces(\n\t\t\t[]configs.Namespace{\n\t\t\t\t{Type: configs.NEWNS},\n\t\t\t},\n\t\t),\n\t}\n\n\terr := Validate(config)\n\tif err != nil {\n\t\tt.Errorf(\"Expected error to not occur: %+v\", err)\n\t}\n}\n\nfunc TestValidateSecurityWithoutNEWNS(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tRootfs:        \"/var\",\n\t\tMaskPaths:     []string{\"/proc/kcore\"},\n\t\tReadonlyPaths: []string{\"/proc/sys\"},\n\t}\n\n\terr := Validate(config)\n\tif err == nil {\n\t\tt.Error(\"Expected error to occur but it was nil\")\n\t}\n}\n\nfunc TestValidateUserNamespace(t *testing.T) {\n\tif _, err := os.Stat(\"/proc/self/ns/user\"); errors.Is(err, os.ErrNotExist) {\n\t\tt.Skip(\"Test requires userns.\")\n\t}\n\tconfig := &configs.Config{\n\t\tRootfs: \"/var\",\n\t\tNamespaces: configs.Namespaces(\n\t\t\t[]configs.Namespace{\n\t\t\t\t{Type: configs.NEWUSER},\n\t\t\t},\n\t\t),\n\t\tUIDMappings: []configs.IDMap{{HostID: 0, ContainerID: 123, Size: 100}},\n\t\tGIDMappings: []configs.IDMap{{HostID: 0, ContainerID: 123, Size: 100}},\n\t}\n\n\terr := Validate(config)\n\tif err != nil {\n\t\tt.Errorf(\"expected error to not occur %+v\", err)\n\t}\n}\n\nfunc TestValidateUsernsMappingWithoutNamespace(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tRootfs:      \"/var\",\n\t\tUIDMappings: []configs.IDMap{{HostID: 0, ContainerID: 123, Size: 100}},\n\t\tGIDMappings: []configs.IDMap{{HostID: 0, ContainerID: 123, Size: 100}},\n\t}\n\n\terr := Validate(config)\n\tif err == nil {\n\t\tt.Error(\"Expected error to occur but it was nil\")\n\t}\n}\n\nfunc TestValidateTimeNamespace(t *testing.T) {\n\tif _, err := os.Stat(\"/proc/self/ns/time\"); errors.Is(err, os.ErrNotExist) {\n\t\tt.Skip(\"Test requires timens.\")\n\t}\n\tconfig := &configs.Config{\n\t\tRootfs: \"/var\",\n\t\tNamespaces: configs.Namespaces(\n\t\t\t[]configs.Namespace{\n\t\t\t\t{Type: configs.NEWTIME},\n\t\t\t},\n\t\t),\n\t}\n\n\terr := Validate(config)\n\tif err != nil {\n\t\tt.Errorf(\"expected error to not occur %+v\", err)\n\t}\n}\n\nfunc TestValidateTimeNamespaceWithBothPathAndTimeOffset(t *testing.T) {\n\tif _, err := os.Stat(\"/proc/self/ns/time\"); errors.Is(err, os.ErrNotExist) {\n\t\tt.Skip(\"Test requires timens.\")\n\t}\n\tconfig := &configs.Config{\n\t\tRootfs: \"/var\",\n\t\tNamespaces: configs.Namespaces(\n\t\t\t[]configs.Namespace{\n\t\t\t\t{Type: configs.NEWTIME, Path: \"/proc/1/ns/time\"},\n\t\t\t},\n\t\t),\n\t\tTimeOffsets: map[string]specs.LinuxTimeOffset{\n\t\t\t\"boottime\":  {Secs: 150, Nanosecs: 314159},\n\t\t\t\"monotonic\": {Secs: 512, Nanosecs: 271818},\n\t\t},\n\t}\n\n\terr := Validate(config)\n\tif err == nil {\n\t\tt.Error(\"Expected error to occur but it was nil\")\n\t}\n}\n\nfunc TestValidateTimeOffsetsWithoutTimeNamespace(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tRootfs: \"/var\",\n\t\tTimeOffsets: map[string]specs.LinuxTimeOffset{\n\t\t\t\"boottime\":  {Secs: 150, Nanosecs: 314159},\n\t\t\t\"monotonic\": {Secs: 512, Nanosecs: 271818},\n\t\t},\n\t}\n\n\terr := Validate(config)\n\tif err == nil {\n\t\tt.Error(\"Expected error to occur but it was nil\")\n\t}\n}\n\n// TestConvertSysctlVariableToDotsSeparator tests whether the sysctl variable\n// can be correctly converted to a dot as a separator.\nfunc TestConvertSysctlVariableToDotsSeparator(t *testing.T) {\n\ttype testCase struct {\n\t\tin  string\n\t\tout string\n\t}\n\tvalid := []testCase{\n\t\t{in: \"kernel.shm_rmid_forced\", out: \"kernel.shm_rmid_forced\"},\n\t\t{in: \"kernel/shm_rmid_forced\", out: \"kernel.shm_rmid_forced\"},\n\t\t{in: \"net.ipv4.conf.eno2/100.rp_filter\", out: \"net.ipv4.conf.eno2/100.rp_filter\"},\n\t\t{in: \"net/ipv4/conf/eno2.100/rp_filter\", out: \"net.ipv4.conf.eno2/100.rp_filter\"},\n\t\t{in: \"net/ipv4/ip_local_port_range\", out: \"net.ipv4.ip_local_port_range\"},\n\t\t{in: \"kernel/msgmax\", out: \"kernel.msgmax\"},\n\t\t{in: \"kernel/sem\", out: \"kernel.sem\"},\n\t}\n\n\tfor _, test := range valid {\n\t\tconvertSysctlVal := convertSysctlVariableToDotsSeparator(test.in)\n\t\tif convertSysctlVal != test.out {\n\t\t\tt.Errorf(\"The sysctl variable was not converted correctly. got: %s, want: %s\", convertSysctlVal, test.out)\n\t\t}\n\t}\n}\n\nfunc TestValidateSysctl(t *testing.T) {\n\tsysctl := map[string]string{\n\t\t\"fs.mqueue.ctl\":                    \"ctl\",\n\t\t\"fs/mqueue/ctl\":                    \"ctl\",\n\t\t\"net.ctl\":                          \"ctl\",\n\t\t\"net/ctl\":                          \"ctl\",\n\t\t\"net.ipv4.conf.eno2/100.rp_filter\": \"ctl\",\n\t\t\"kernel.ctl\":                       \"ctl\",\n\t\t\"kernel/ctl\":                       \"ctl\",\n\t}\n\n\tfor k, v := range sysctl {\n\t\tconfig := &configs.Config{\n\t\t\tRootfs: \"/var\",\n\t\t\tSysctl: map[string]string{k: v},\n\t\t}\n\n\t\terr := Validate(config)\n\t\tif err == nil {\n\t\t\tt.Error(\"Expected error to occur but it was nil\")\n\t\t}\n\t}\n}\n\nfunc TestValidateValidSysctl(t *testing.T) {\n\tsysctl := map[string]string{\n\t\t\"fs.mqueue.ctl\":                    \"ctl\",\n\t\t\"fs/mqueue/ctl\":                    \"ctl\",\n\t\t\"net.ctl\":                          \"ctl\",\n\t\t\"net/ctl\":                          \"ctl\",\n\t\t\"net.ipv4.conf.eno2/100.rp_filter\": \"ctl\",\n\t\t\"kernel.msgmax\":                    \"ctl\",\n\t\t\"kernel/msgmax\":                    \"ctl\",\n\t}\n\n\tfor k, v := range sysctl {\n\t\tconfig := &configs.Config{\n\t\t\tRootfs: \"/var\",\n\t\t\tSysctl: map[string]string{k: v},\n\t\t\tNamespaces: []configs.Namespace{\n\t\t\t\t{\n\t\t\t\t\tType: configs.NEWNET,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tType: configs.NEWIPC,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\n\t\terr := Validate(config)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Expected error to not occur with {%s=%s} but got: %q\", k, v, err)\n\t\t}\n\t}\n}\n\nfunc TestValidateSysctlWithSameNs(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tRootfs: \"/var\",\n\t\tSysctl: map[string]string{\"net.ctl\": \"ctl\"},\n\t\tNamespaces: configs.Namespaces(\n\t\t\t[]configs.Namespace{\n\t\t\t\t{\n\t\t\t\t\tType: configs.NEWNET,\n\t\t\t\t\tPath: \"/proc/self/ns/net\",\n\t\t\t\t},\n\t\t\t},\n\t\t),\n\t}\n\n\terr := Validate(config)\n\tif err == nil {\n\t\tt.Error(\"Expected error to occur but it was nil\")\n\t}\n}\n\nfunc TestValidateSysctlWithBindHostNetNS(t *testing.T) {\n\tif os.Getuid() != 0 {\n\t\tt.Skip(\"requires root\")\n\t}\n\n\tconst selfnet = \"/proc/self/ns/net\"\n\n\tfile := filepath.Join(t.TempDir(), \"default\")\n\tfd, err := os.Create(file)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer os.Remove(file)\n\tfd.Close()\n\n\tif err := unix.Mount(selfnet, file, \"bind\", unix.MS_BIND, \"\"); err != nil {\n\t\tt.Fatalf(\"can't bind-mount %s to %s: %s\", selfnet, file, err)\n\t}\n\tdefer func() {\n\t\t_ = unix.Unmount(file, unix.MNT_DETACH)\n\t}()\n\n\tconfig := &configs.Config{\n\t\tRootfs: \"/var\",\n\t\tSysctl: map[string]string{\"net.ctl\": \"ctl\", \"net.foo\": \"bar\"},\n\t\tNamespaces: configs.Namespaces(\n\t\t\t[]configs.Namespace{\n\t\t\t\t{\n\t\t\t\t\tType: configs.NEWNET,\n\t\t\t\t\tPath: file,\n\t\t\t\t},\n\t\t\t},\n\t\t),\n\t}\n\n\tif err := Validate(config); err == nil {\n\t\tt.Error(\"Expected error to occur but it was nil\")\n\t}\n}\n\nfunc TestValidateSysctlWithoutNETNamespace(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tRootfs:     \"/var\",\n\t\tSysctl:     map[string]string{\"net.ctl\": \"ctl\"},\n\t\tNamespaces: []configs.Namespace{},\n\t}\n\n\terr := Validate(config)\n\tif err == nil {\n\t\tt.Error(\"Expected error to occur but it was nil\")\n\t}\n}\n\nfunc TestValidateMounts(t *testing.T) {\n\ttestCases := []struct {\n\t\tisErr bool\n\t\tdest  string\n\t}{\n\t\t{isErr: false, dest: \"not/an/abs/path\"},\n\t\t{isErr: false, dest: \"./rel/path\"},\n\t\t{isErr: false, dest: \"./rel/path\"},\n\t\t{isErr: false, dest: \"../../path\"},\n\t\t{isErr: false, dest: \"/abs/path\"},\n\t\t{isErr: false, dest: \"/abs/but/../unclean\"},\n\t}\n\n\tfor _, tc := range testCases {\n\t\tconfig := &configs.Config{\n\t\t\tRootfs: \"/var\",\n\t\t\tMounts: []*configs.Mount{\n\t\t\t\t{Destination: tc.dest},\n\t\t\t},\n\t\t}\n\n\t\terr := Validate(config)\n\t\tif tc.isErr && err == nil {\n\t\t\tt.Errorf(\"mount dest: %s, expected error, got nil\", tc.dest)\n\t\t}\n\t\tif !tc.isErr && err != nil {\n\t\t\tt.Errorf(\"mount dest: %s, expected nil, got error %v\", tc.dest, err)\n\t\t}\n\t}\n}\n\nfunc TestValidateBindMounts(t *testing.T) {\n\ttestCases := []struct {\n\t\tisErr bool\n\t\tflags int\n\t\tdata  string\n\t}{\n\t\t{isErr: false, flags: 0, data: \"\"},\n\t\t{isErr: false, flags: unix.MS_RDONLY | unix.MS_NOSYMFOLLOW, data: \"\"},\n\n\t\t{isErr: true, flags: 0, data: \"idmap\"},\n\t\t{isErr: true, flags: unix.MS_RDONLY, data: \"custom_ext4_flag\"},\n\t\t{isErr: true, flags: unix.MS_NOATIME, data: \"rw=foobar\"},\n\t}\n\n\tfor _, tc := range testCases {\n\t\tfor _, bind := range []string{\"bind\", \"rbind\"} {\n\t\t\tbindFlag := map[string]int{\n\t\t\t\t\"bind\":  unix.MS_BIND,\n\t\t\t\t\"rbind\": unix.MS_BIND | unix.MS_REC,\n\t\t\t}[bind]\n\n\t\t\tconfig := &configs.Config{\n\t\t\t\tRootfs: \"/var\",\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tDestination: \"/\",\n\t\t\t\t\t\tFlags:       tc.flags | bindFlag,\n\t\t\t\t\t\tData:        tc.data,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\n\t\t\terr := Validate(config)\n\t\t\tif tc.isErr && err == nil {\n\t\t\t\tt.Errorf(\"%s mount flags:0x%x data:%v, expected error, got nil\", bind, tc.flags, tc.data)\n\t\t\t}\n\t\t\tif !tc.isErr && err != nil {\n\t\t\t\tt.Errorf(\"%s mount flags:0x%x data:%v, expected nil, got error %v\", bind, tc.flags, tc.data, err)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestValidateIDMapMounts(t *testing.T) {\n\tmapping := []configs.IDMap{\n\t\t{\n\t\t\tContainerID: 0,\n\t\t\tHostID:      10000,\n\t\t\tSize:        1,\n\t\t},\n\t}\n\n\ttestCases := []struct {\n\t\tname   string\n\t\tisErr  bool\n\t\tconfig *configs.Config\n\t}{\n\t\t{\n\t\t\tname:  \"idmap non-bind mount\",\n\t\t\tisErr: true,\n\t\t\tconfig: &configs.Config{\n\t\t\t\tUIDMappings: mapping,\n\t\t\t\tGIDMappings: mapping,\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"/dev/sda1\",\n\t\t\t\t\t\tDestination: \"/abs/path/\",\n\t\t\t\t\t\tDevice:      \"ext4\",\n\t\t\t\t\t\tIDMapping: &configs.MountIDMapping{\n\t\t\t\t\t\t\tUIDMappings: mapping,\n\t\t\t\t\t\t\tGIDMappings: mapping,\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{\n\t\t\tname:  \"idmap option non-bind mount\",\n\t\t\tisErr: true,\n\t\t\tconfig: &configs.Config{\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"/dev/sda1\",\n\t\t\t\t\t\tDestination: \"/abs/path/\",\n\t\t\t\t\t\tDevice:      \"ext4\",\n\t\t\t\t\t\tIDMapping:   &configs.MountIDMapping{},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname:  \"ridmap option non-bind mount\",\n\t\t\tisErr: true,\n\t\t\tconfig: &configs.Config{\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"/dev/sda1\",\n\t\t\t\t\t\tDestination: \"/abs/path/\",\n\t\t\t\t\t\tDevice:      \"ext4\",\n\t\t\t\t\t\tIDMapping: &configs.MountIDMapping{\n\t\t\t\t\t\t\tRecursive: true,\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{\n\t\t\tname:  \"idmap mount no uid mapping\",\n\t\t\tisErr: true,\n\t\t\tconfig: &configs.Config{\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"/abs/path/\",\n\t\t\t\t\t\tDestination: \"/abs/path/\",\n\t\t\t\t\t\tFlags:       unix.MS_BIND,\n\t\t\t\t\t\tIDMapping: &configs.MountIDMapping{\n\t\t\t\t\t\t\tGIDMappings: mapping,\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{\n\t\t\tname:  \"idmap mount no gid mapping\",\n\t\t\tisErr: true,\n\t\t\tconfig: &configs.Config{\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"/abs/path/\",\n\t\t\t\t\t\tDestination: \"/abs/path/\",\n\t\t\t\t\t\tFlags:       unix.MS_BIND,\n\t\t\t\t\t\tIDMapping: &configs.MountIDMapping{\n\t\t\t\t\t\t\tUIDMappings: mapping,\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{\n\t\t\tname:  \"rootless idmap mount\",\n\t\t\tisErr: true,\n\t\t\tconfig: &configs.Config{\n\t\t\t\tRootlessEUID: true,\n\t\t\t\tUIDMappings:  mapping,\n\t\t\t\tGIDMappings:  mapping,\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"/abs/path/\",\n\t\t\t\t\t\tDestination: \"/abs/path/\",\n\t\t\t\t\t\tFlags:       unix.MS_BIND,\n\t\t\t\t\t\tIDMapping: &configs.MountIDMapping{\n\t\t\t\t\t\t\tUIDMappings: mapping,\n\t\t\t\t\t\t\tGIDMappings: mapping,\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{\n\t\t\tname: \"idmap mounts without abs source path\",\n\t\t\tconfig: &configs.Config{\n\t\t\t\tUIDMappings: mapping,\n\t\t\t\tGIDMappings: mapping,\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"./rel/path/\",\n\t\t\t\t\t\tDestination: \"/abs/path/\",\n\t\t\t\t\t\tFlags:       unix.MS_BIND,\n\t\t\t\t\t\tIDMapping: &configs.MountIDMapping{\n\t\t\t\t\t\t\tUIDMappings: mapping,\n\t\t\t\t\t\t\tGIDMappings: mapping,\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{\n\t\t\tname: \"idmap mounts without abs dest path\",\n\t\t\tconfig: &configs.Config{\n\t\t\t\tUIDMappings: mapping,\n\t\t\t\tGIDMappings: mapping,\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"/abs/path/\",\n\t\t\t\t\t\tDestination: \"./rel/path/\",\n\t\t\t\t\t\tFlags:       unix.MS_BIND,\n\t\t\t\t\t\tIDMapping: &configs.MountIDMapping{\n\t\t\t\t\t\t\tUIDMappings: mapping,\n\t\t\t\t\t\t\tGIDMappings: mapping,\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{\n\t\t\tname: \"simple idmap mount\",\n\t\t\tconfig: &configs.Config{\n\t\t\t\tUIDMappings: mapping,\n\t\t\t\tGIDMappings: mapping,\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"/another-abs/path/\",\n\t\t\t\t\t\tDestination: \"/abs/path/\",\n\t\t\t\t\t\tFlags:       unix.MS_BIND,\n\t\t\t\t\t\tIDMapping: &configs.MountIDMapping{\n\t\t\t\t\t\t\tUIDMappings: mapping,\n\t\t\t\t\t\t\tGIDMappings: mapping,\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{\n\t\t\tname: \"idmap mount with more flags\",\n\t\t\tconfig: &configs.Config{\n\t\t\t\tUIDMappings: mapping,\n\t\t\t\tGIDMappings: mapping,\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"/another-abs/path/\",\n\t\t\t\t\t\tDestination: \"/abs/path/\",\n\t\t\t\t\t\tFlags:       unix.MS_BIND | unix.MS_RDONLY,\n\t\t\t\t\t\tIDMapping: &configs.MountIDMapping{\n\t\t\t\t\t\t\tUIDMappings: mapping,\n\t\t\t\t\t\t\tGIDMappings: mapping,\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{\n\t\t\tname: \"idmap mount without userns mappings\",\n\t\t\tconfig: &configs.Config{\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"/abs/path/\",\n\t\t\t\t\t\tDestination: \"/abs/path/\",\n\t\t\t\t\t\tFlags:       unix.MS_BIND,\n\t\t\t\t\t\tIDMapping: &configs.MountIDMapping{\n\t\t\t\t\t\t\tUIDMappings: mapping,\n\t\t\t\t\t\t\tGIDMappings: mapping,\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{\n\t\t\tname: \"idmap mounts with different userns and mount mappings\",\n\t\t\tconfig: &configs.Config{\n\t\t\t\tUIDMappings: mapping,\n\t\t\t\tGIDMappings: mapping,\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"/abs/path/\",\n\t\t\t\t\t\tDestination: \"/abs/path/\",\n\t\t\t\t\t\tFlags:       unix.MS_BIND,\n\t\t\t\t\t\tIDMapping: &configs.MountIDMapping{\n\t\t\t\t\t\t\tUIDMappings: []configs.IDMap{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tContainerID: 10,\n\t\t\t\t\t\t\t\t\tHostID:      10,\n\t\t\t\t\t\t\t\t\tSize:        1,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tGIDMappings: mapping,\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{\n\t\t\tname: \"idmap mounts with different userns and mount mappings\",\n\t\t\tconfig: &configs.Config{\n\t\t\t\tUIDMappings: mapping,\n\t\t\t\tGIDMappings: mapping,\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"/abs/path/\",\n\t\t\t\t\t\tDestination: \"/abs/path/\",\n\t\t\t\t\t\tFlags:       unix.MS_BIND,\n\t\t\t\t\t\tIDMapping: &configs.MountIDMapping{\n\t\t\t\t\t\t\tUIDMappings: mapping,\n\t\t\t\t\t\t\tGIDMappings: []configs.IDMap{\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tContainerID: 10,\n\t\t\t\t\t\t\t\t\tHostID:      10,\n\t\t\t\t\t\t\t\t\tSize:        1,\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},\n\t\t{\n\t\t\tname:  \"mount with 'idmap' option but no mappings\",\n\t\t\tisErr: true,\n\t\t\tconfig: &configs.Config{\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"/abs/path/\",\n\t\t\t\t\t\tDestination: \"/abs/path/\",\n\t\t\t\t\t\tFlags:       unix.MS_BIND,\n\t\t\t\t\t\tIDMapping:   &configs.MountIDMapping{},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname:  \"mount with 'ridmap' option but no mappings\",\n\t\t\tisErr: true,\n\t\t\tconfig: &configs.Config{\n\t\t\t\tMounts: []*configs.Mount{\n\t\t\t\t\t{\n\t\t\t\t\t\tSource:      \"/abs/path/\",\n\t\t\t\t\t\tDestination: \"/abs/path/\",\n\t\t\t\t\t\tFlags:       unix.MS_BIND,\n\t\t\t\t\t\tIDMapping: &configs.MountIDMapping{\n\t\t\t\t\t\t\tRecursive: true,\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\tfor _, tc := range testCases {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tconfig := tc.config\n\t\t\tconfig.Rootfs = \"/var\"\n\n\t\t\terr := mountsStrict(config)\n\t\t\tif tc.isErr && err == nil {\n\t\t\t\tt.Error(\"expected error, got nil\")\n\t\t\t}\n\n\t\t\tif !tc.isErr && err != nil {\n\t\t\t\tt.Error(err)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestValidateScheduler(t *testing.T) {\n\ttestCases := []struct {\n\t\tisErr     bool\n\t\tpolicy    string\n\t\tniceValue int32\n\t\tpriority  int32\n\t\truntime   uint64\n\t\tdeadline  uint64\n\t\tperiod    uint64\n\t}{\n\t\t{isErr: true, niceValue: 0},\n\t\t{isErr: false, policy: \"SCHED_OTHER\", niceValue: 19},\n\t\t{isErr: false, policy: \"SCHED_OTHER\", niceValue: -20},\n\t\t{isErr: true, policy: \"SCHED_OTHER\", niceValue: 20},\n\t\t{isErr: true, policy: \"SCHED_OTHER\", niceValue: -21},\n\t\t{isErr: true, policy: \"SCHED_OTHER\", priority: 100},\n\t\t{isErr: false, policy: \"SCHED_FIFO\", priority: 100},\n\t\t{isErr: true, policy: \"SCHED_FIFO\", runtime: 20},\n\t\t{isErr: true, policy: \"SCHED_BATCH\", deadline: 30},\n\t\t{isErr: true, policy: \"SCHED_IDLE\", period: 40},\n\t\t{isErr: true, policy: \"SCHED_DEADLINE\", priority: 100},\n\t\t{isErr: false, policy: \"SCHED_DEADLINE\", runtime: 200},\n\t\t{isErr: false, policy: \"SCHED_DEADLINE\", deadline: 300},\n\t\t{isErr: false, policy: \"SCHED_DEADLINE\", period: 400},\n\t\t{isErr: true, policy: \"SCHED_OTHER\", niceValue: 20},\n\t\t{isErr: true, policy: \"SCHED_OTHER\", niceValue: -21},\n\t\t{isErr: false, policy: \"SCHED_FIFO\", priority: 100, niceValue: 100},\n\t}\n\n\tfor _, tc := range testCases {\n\t\tscheduler := configs.Scheduler{\n\t\t\tPolicy:   specs.LinuxSchedulerPolicy(tc.policy),\n\t\t\tNice:     tc.niceValue,\n\t\t\tPriority: tc.priority,\n\t\t\tRuntime:  tc.runtime,\n\t\t\tDeadline: tc.deadline,\n\t\t\tPeriod:   tc.period,\n\t\t}\n\t\tconfig := &configs.Config{\n\t\t\tRootfs:    \"/var\",\n\t\t\tScheduler: &scheduler,\n\t\t}\n\n\t\terr := Validate(config)\n\t\tif tc.isErr && err == nil {\n\t\t\tt.Errorf(\"scheduler: %d, expected error, got nil\", tc.niceValue)\n\t\t}\n\t\tif !tc.isErr && err != nil {\n\t\t\tt.Errorf(\"scheduler: %d, expected nil, got error %v\", tc.niceValue, err)\n\t\t}\n\t}\n}\n\nfunc TestValidateIOPriority(t *testing.T) {\n\ttestCases := []struct {\n\t\tisErr    bool\n\t\tpriority int\n\t\tclass    specs.IOPriorityClass\n\t}{\n\t\t{isErr: false, priority: 0, class: specs.IOPRIO_CLASS_IDLE},\n\t\t{isErr: false, priority: 7, class: specs.IOPRIO_CLASS_RT},\n\t\t{isErr: false, priority: 3, class: specs.IOPRIO_CLASS_BE},\n\t\t// Invalid priority.\n\t\t{isErr: true, priority: -1, class: specs.IOPRIO_CLASS_BE},\n\t\t// Invalid class.\n\t\t{isErr: true, priority: 3, class: specs.IOPriorityClass(\"IOPRIO_CLASS_WOW\")},\n\t}\n\n\tfor _, tc := range testCases {\n\t\tioPriroty := configs.IOPriority{\n\t\t\tPriority: tc.priority,\n\t\t\tClass:    tc.class,\n\t\t}\n\t\tconfig := &configs.Config{\n\t\t\tRootfs:     \"/var\",\n\t\t\tIOPriority: &ioPriroty,\n\t\t}\n\n\t\terr := Validate(config)\n\t\tif tc.isErr && err == nil {\n\t\t\tt.Errorf(\"iopriority: %d, expected error, got nil\", tc.priority)\n\t\t}\n\t\tif !tc.isErr && err != nil {\n\t\t\tt.Errorf(\"iopriority: %d, expected nil, got error %v\", tc.priority, err)\n\t\t}\n\t}\n}\n\nfunc TestValidateNetDevices(t *testing.T) {\n\ttestCases := []struct {\n\t\tname   string\n\t\tisErr  bool\n\t\tconfig *configs.Config\n\t}{\n\t\t{\n\t\t\tname: \"network device with configured network namespace\",\n\t\t\tconfig: &configs.Config{\n\t\t\t\tNamespaces: configs.Namespaces(\n\t\t\t\t\t[]configs.Namespace{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tType: configs.NEWNET,\n\t\t\t\t\t\t\tPath: \"/var/run/netns/blue\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\tNetDevices: map[string]*configs.LinuxNetDevice{\n\t\t\t\t\t\"eth0\": {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"network device rename\",\n\t\t\tconfig: &configs.Config{\n\t\t\t\tNamespaces: configs.Namespaces(\n\t\t\t\t\t[]configs.Namespace{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tType: configs.NEWNET,\n\t\t\t\t\t\t\tPath: \"/var/run/netns/blue\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\tNetDevices: map[string]*configs.LinuxNetDevice{\n\t\t\t\t\t\"eth0\": {\n\t\t\t\t\t\tName: \"c0\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"network device network namespace created by runc\",\n\t\t\tconfig: &configs.Config{\n\t\t\t\tNamespaces: configs.Namespaces(\n\t\t\t\t\t[]configs.Namespace{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tType: configs.NEWNET,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\tNetDevices: map[string]*configs.LinuxNetDevice{\n\t\t\t\t\t\"eth0\": {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname:  \"network device network namespace empty\",\n\t\t\tisErr: true,\n\t\t\tconfig: &configs.Config{\n\t\t\t\tNamespaces: configs.Namespaces(\n\t\t\t\t\t[]configs.Namespace{},\n\t\t\t\t),\n\t\t\t\tNetDevices: map[string]*configs.LinuxNetDevice{\n\t\t\t\t\t\"eth0\": {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname:  \"network device rootless EUID\",\n\t\t\tisErr: true,\n\t\t\tconfig: &configs.Config{\n\t\t\t\tNamespaces: configs.Namespaces(\n\t\t\t\t\t[]configs.Namespace{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tType: configs.NEWNET,\n\t\t\t\t\t\t\tPath: \"/var/run/netns/blue\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\tRootlessEUID: true,\n\t\t\t\tNetDevices: map[string]*configs.LinuxNetDevice{\n\t\t\t\t\t\"eth0\": {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname:  \"network device rootless\",\n\t\t\tisErr: true,\n\t\t\tconfig: &configs.Config{\n\t\t\t\tNamespaces: configs.Namespaces(\n\t\t\t\t\t[]configs.Namespace{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tType: configs.NEWNET,\n\t\t\t\t\t\t\tPath: \"/var/run/netns/blue\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\tRootlessCgroups: true,\n\t\t\t\tNetDevices: map[string]*configs.LinuxNetDevice{\n\t\t\t\t\t\"eth0\": {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname:  \"network device bad name\",\n\t\t\tisErr: true,\n\t\t\tconfig: &configs.Config{\n\t\t\t\tNamespaces: configs.Namespaces(\n\t\t\t\t\t[]configs.Namespace{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tType: configs.NEWNET,\n\t\t\t\t\t\t\tPath: \"/var/run/netns/blue\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\tNetDevices: map[string]*configs.LinuxNetDevice{\n\t\t\t\t\t\"eth0\": {\n\t\t\t\t\t\tName: \"eth0/\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tfor _, tc := range testCases {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tconfig := tc.config\n\t\t\tconfig.Rootfs = \"/var\"\n\n\t\t\terr := Validate(config)\n\t\t\tif tc.isErr && err == nil {\n\t\t\t\tt.Error(\"expected error, got nil\")\n\t\t\t}\n\n\t\t\tif !tc.isErr && err != nil {\n\t\t\t\tt.Error(err)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestValidateUserSysctlWithUserNamespace(t *testing.T) {\n\tif _, err := os.Stat(\"/proc/self/ns/user\"); errors.Is(err, os.ErrNotExist) {\n\t\tt.Skip(\"Test requires userns.\")\n\t}\n\tconfig := &configs.Config{\n\t\tRootfs: \"/var\",\n\t\tSysctl: map[string]string{\"user.max_inotify_watches\": \"8192\"},\n\t\tNamespaces: configs.Namespaces(\n\t\t\t[]configs.Namespace{\n\t\t\t\t{Type: configs.NEWUSER},\n\t\t\t},\n\t\t),\n\t\tUIDMappings: []configs.IDMap{{HostID: 0, ContainerID: 123, Size: 100}},\n\t\tGIDMappings: []configs.IDMap{{HostID: 0, ContainerID: 123, Size: 100}},\n\t}\n\n\terr := Validate(config)\n\tif err != nil {\n\t\tt.Errorf(\"Expected error to not occur with user.* sysctl and NEWUSER namespace: %+v\", err)\n\t}\n}\n\nfunc TestValidateUserSysctlWithoutUserNamespace(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tRootfs: \"/var\",\n\t\tSysctl: map[string]string{\"user.max_inotify_watches\": \"8192\"},\n\t}\n\n\terr := Validate(config)\n\tif err == nil {\n\t\tt.Error(\"Expected error to occur with user.* sysctl without NEWUSER namespace but it was nil\")\n\t}\n}\n\nfunc TestDevValidName(t *testing.T) {\n\ttestCases := []struct {\n\t\tname  string\n\t\tvalid bool\n\t}{\n\t\t{name: \"\", valid: false},\n\t\t{name: \"a\", valid: true},\n\t\t{name: strings.Repeat(\"a\", unix.IFNAMSIZ), valid: true},\n\t\t{name: strings.Repeat(\"a\", unix.IFNAMSIZ+1), valid: false},\n\t\t{name: \".\", valid: false},\n\t\t{name: \"..\", valid: false},\n\t\t{name: \"dev/null\", valid: false},\n\t\t{name: \"valid:name\", valid: false},\n\t\t{name: \"valid name\", valid: false},\n\t}\n\tfor _, tc := range testCases {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tif devValidName(tc.name) != tc.valid {\n\t\t\t\tt.Fatalf(\"name %q, expected valid: %v\", tc.name, tc.valid)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "libcontainer/console_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\n\t\"github.com/containerd/console\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/internal/linux\"\n\t\"github.com/opencontainers/runc/internal/pathrs\"\n\t\"github.com/opencontainers/runc/internal/sys\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n)\n\n// checkPtmxHandle checks that the given file handle points to a real\n// /dev/pts/ptmx device inode on a real devpts mount. We cannot (trivially)\n// check that it is *the* /dev/pts for the container itself, but this is good\n// enough.\nfunc checkPtmxHandle(ptmx *os.File) error {\n\t//nolint:revive,staticcheck,nolintlint // ignore \"don't use ALL_CAPS\" warning // nolintlint is needed to work around the different lint configs\n\tconst (\n\t\tPTMX_MAJOR = 5 // from TTYAUX_MAJOR in <linux/major.h>\n\t\tPTMX_MINOR = 2 // from mknod_ptmx in fs/devpts/inode.c\n\t\tPTMX_INO   = 2 // from mknod_ptmx in fs/devpts/inode.c\n\t)\n\treturn sys.VerifyInode(ptmx, func(stat *unix.Stat_t, statfs *unix.Statfs_t) error {\n\t\tif statfs.Type != unix.DEVPTS_SUPER_MAGIC {\n\t\t\treturn fmt.Errorf(\"ptmx handle is not on a real devpts mount: super magic is %#x\", statfs.Type)\n\t\t}\n\t\tif stat.Ino != PTMX_INO {\n\t\t\treturn fmt.Errorf(\"ptmx handle has wrong inode number: %v\", stat.Ino)\n\t\t}\n\t\trdev := uint64(stat.Rdev) //nolint:unconvert // Rdev is uint32 on MIPS.\n\t\tif stat.Mode&unix.S_IFMT != unix.S_IFCHR || rdev != unix.Mkdev(PTMX_MAJOR, PTMX_MINOR) {\n\t\t\treturn fmt.Errorf(\"ptmx handle is not a real char ptmx device: ftype %#x %d:%d\",\n\t\t\t\tstat.Mode&unix.S_IFMT, unix.Major(rdev), unix.Minor(rdev))\n\t\t}\n\t\treturn nil\n\t})\n}\n\nfunc isPtyNoIoctlError(err error) bool {\n\t// The kernel converts -ENOIOCTLCMD to -ENOTTY automatically, but handle\n\t// -EINVAL just in case (which some drivers do, include pty).\n\treturn errors.Is(err, unix.EINVAL) || errors.Is(err, unix.ENOTTY)\n}\n\nfunc getPtyPeer(pty console.Console, unsafePeerPath string, flags int) (*os.File, error) {\n\tpeer, err := linux.GetPtyPeer(pty.Fd(), unsafePeerPath, flags)\n\tif err == nil || !isPtyNoIoctlError(err) {\n\t\treturn peer, err\n\t}\n\n\t// On pre-TIOCGPTPEER kernels (Linux < 4.13), we need to fallback to using\n\t// the /dev/pts/$n path generated using TIOCGPTN. We can do some validation\n\t// that the inode is correct because the Unix-98 pty has a consistent\n\t// numbering scheme for the device number of the peer.\n\n\tpeerNum, err := unix.IoctlGetUint32(int(pty.Fd()), unix.TIOCGPTN)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get peer number of pty: %w\", err)\n\t}\n\t//nolint:revive,staticcheck,nolintlint // ignore \"don't use ALL_CAPS\" warning // nolintlint is needed to work around the different lint configs\n\tconst (\n\t\tUNIX98_PTY_SLAVE_MAJOR = 136 // from <linux/major.h>\n\t)\n\twantPeerDev := unix.Mkdev(UNIX98_PTY_SLAVE_MAJOR, peerNum)\n\n\t// Use O_PATH to avoid opening a bad inode before we validate it.\n\tpeerHandle, err := os.OpenFile(unsafePeerPath, unix.O_PATH|unix.O_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer peerHandle.Close()\n\n\tif err := sys.VerifyInode(peerHandle, func(stat *unix.Stat_t, statfs *unix.Statfs_t) error {\n\t\tif statfs.Type != unix.DEVPTS_SUPER_MAGIC {\n\t\t\treturn fmt.Errorf(\"pty peer handle is not on a real devpts mount: super magic is %#x\", statfs.Type)\n\t\t}\n\t\trdev := uint64(stat.Rdev) //nolint:unconvert // Rdev is uint32 on MIPS.\n\t\tif stat.Mode&unix.S_IFMT != unix.S_IFCHR || rdev != wantPeerDev {\n\t\t\treturn fmt.Errorf(\"pty peer handle is not the real char device for pty %d: ftype %#x %d:%d\",\n\t\t\t\tpeerNum, stat.Mode&unix.S_IFMT, unix.Major(rdev), unix.Minor(rdev))\n\t\t}\n\t\treturn nil\n\t}); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn pathrs.Reopen(peerHandle, flags)\n}\n\n// safeAllocPty returns a new (ptmx, peer pty) allocation for use inside a\n// container.\nfunc safeAllocPty() (pty console.Console, peer *os.File, Err error) {\n\t// TODO: Use openat2(RESOLVE_NO_SYMLINKS|RESOLVE_NO_XDEV).\n\tptmxHandle, err := os.OpenFile(\"/dev/pts/ptmx\", unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer ptmxHandle.Close()\n\n\tif err := checkPtmxHandle(ptmxHandle); err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"verify ptmx handle: %w\", err)\n\t}\n\n\tptyFile, err := pathrs.Reopen(ptmxHandle, unix.O_RDWR|unix.O_NOCTTY)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"reopen ptmx to get new pty pair: %w\", err)\n\t}\n\t// On success, the ownership is transferred to pty.\n\tdefer func() {\n\t\tif Err != nil {\n\t\t\t_ = ptyFile.Close()\n\t\t}\n\t}()\n\n\tpty, unsafePeerPath, err := console.NewPtyFromFile(ptyFile)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer func() {\n\t\tif Err != nil {\n\t\t\t_ = pty.Close()\n\t\t}\n\t}()\n\n\tpeer, err = getPtyPeer(pty, unsafePeerPath, unix.O_RDWR|unix.O_NOCTTY)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"failed to get peer end of newly-allocated console: %w\", err)\n\t}\n\treturn pty, peer, nil\n}\n\n// mountConsole bind-mounts the provided pty on top of /dev/console so programs\n// that operate on /dev/console operate on the correct container pty.\nfunc mountConsole(peerPty *os.File) error {\n\tconsole, err := os.OpenFile(\"/dev/console\", unix.O_NOFOLLOW|unix.O_CREAT|unix.O_CLOEXEC, 0o666)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"create /dev/console mount target: %w\", err)\n\t}\n\tdefer console.Close()\n\n\tdstFd, closer := utils.ProcThreadSelfFd(console.Fd())\n\tdefer closer()\n\n\tmntSrc := &mountSource{\n\t\tType: mountSourcePlain,\n\t\tfile: peerPty,\n\t}\n\treturn mountViaFds(peerPty.Name(), mntSrc, \"/dev/console\", dstFd, \"bind\", unix.MS_BIND, \"\")\n}\n\n// dupStdio replaces stdio with the given peerPty.\nfunc dupStdio(peerPty *os.File) error {\n\tfor _, i := range []int{0, 1, 2} {\n\t\tif err := linux.Dup3(int(peerPty.Fd()), i, 0); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\truntime.KeepAlive(peerPty)\n\treturn nil\n}\n"
  },
  {
    "path": "libcontainer/container.go",
    "content": "// Package libcontainer provides a native Go implementation for creating containers\n// with namespaces, cgroups, capabilities, and filesystem access controls.\n// It allows you to manage the lifecycle of the container performing additional operations\n// after the container is created.\npackage libcontainer\n\nimport (\n\t\"time\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n)\n\n// Status is the status of a container.\ntype Status int\n\nconst (\n\t// Created is the status that denotes the container exists but has not been run yet.\n\tCreated Status = iota\n\t// Running is the status that denotes the container exists and is running.\n\tRunning\n\t// Paused is the status that denotes the container exists, but all its processes are paused.\n\tPaused\n\t// Stopped is the status that denotes the container does not have a created or running process.\n\tStopped\n)\n\nfunc (s Status) String() string {\n\tswitch s {\n\tcase Created:\n\t\treturn \"created\"\n\tcase Running:\n\t\treturn \"running\"\n\tcase Paused:\n\t\treturn \"paused\"\n\tcase Stopped:\n\t\treturn \"stopped\"\n\tdefault:\n\t\treturn \"unknown\"\n\t}\n}\n\n// BaseState represents the platform agnostic pieces relating to a\n// running container's state\ntype BaseState struct {\n\t// ID is the container ID.\n\tID string `json:\"id\"`\n\n\t// InitProcessPid is the init process id in the parent namespace.\n\tInitProcessPid int `json:\"init_process_pid\"`\n\n\t// InitProcessStartTime is the init process start time in clock cycles since boot time.\n\tInitProcessStartTime uint64 `json:\"init_process_start\"`\n\n\t// Created is the unix timestamp for the creation time of the container in UTC\n\tCreated time.Time `json:\"created\"`\n\n\t// Config is the container's configuration.\n\tConfig configs.Config `json:\"config\"`\n}\n"
  },
  {
    "path": "libcontainer/container_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\t\"github.com/sirupsen/logrus\"\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/exeseal\"\n\t\"github.com/opencontainers/runc/libcontainer/intelrdt\"\n\t\"github.com/opencontainers/runc/libcontainer/system\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n)\n\nconst stdioFdCount = 3\n\n// Container is a libcontainer container object.\ntype Container struct {\n\tid                   string\n\tstateDir             string\n\tconfig               *configs.Config\n\tcgroupManager        cgroups.Manager\n\tintelRdtManager      *intelrdt.Manager\n\tinitProcess          parentProcess\n\tinitProcessStartTime uint64\n\tm                    sync.Mutex\n\tcriuVersion          int\n\tstate                containerState\n\tcreated              time.Time\n\tfifo                 *os.File\n}\n\n// State represents a running container's state\ntype State struct {\n\tBaseState\n\n\t// Platform specific fields below.\n\n\t// Specified if the container was started under the rootless mode.\n\t// Set to true if BaseState.Config.RootlessEUID && BaseState.Config.RootlessCgroups\n\tRootless bool `json:\"rootless,omitempty\"`\n\n\t// Paths to all the container's cgroups, as returned by (*cgroups.Manager).GetPaths\n\t//\n\t// For cgroup v1, a key is cgroup subsystem name, and the value is the path\n\t// to the cgroup for this subsystem.\n\t//\n\t// For cgroup v2 unified hierarchy, a key is \"\", and the value is the unified path.\n\tCgroupPaths map[string]string `json:\"cgroup_paths,omitempty\"`\n\n\t// NamespacePaths are filepaths to the container's namespaces. Key is the namespace type\n\t// with the value as the path.\n\tNamespacePaths map[configs.NamespaceType]string `json:\"namespace_paths\"`\n\n\t// Container's standard descriptors (std{in,out,err}), needed for checkpoint and restore.\n\tExternalDescriptors []string `json:\"external_descriptors,omitempty\"`\n\n\t// Intel RDT \"resource control\" filesystem path.\n\tIntelRdtPath string `json:\"intel_rdt_path,omitempty\"`\n\n\t// Path of the container specific monitoring group in resctrl filesystem.\n\t// Empty if the container does not have aindividual dedicated monitoring\n\t// group.\n\tIntelRdtMonPath string `json:\"intel_rdt_mon_path,omitempty\"`\n}\n\n// ID returns the container's unique ID\nfunc (c *Container) ID() string {\n\treturn c.id\n}\n\n// Config returns the container's configuration\nfunc (c *Container) Config() configs.Config {\n\treturn *c.config\n}\n\n// Status returns the current status of the container.\nfunc (c *Container) Status() (Status, error) {\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\treturn c.currentStatus()\n}\n\n// State returns the current container's state information.\nfunc (c *Container) State() (*State, error) {\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\treturn c.currentState(), nil\n}\n\n// OCIState returns the current container's state information.\nfunc (c *Container) OCIState() (*specs.State, error) {\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\treturn c.currentOCIState()\n}\n\n// ignoreCgroupError filters out cgroup-related errors that can be ignored,\n// because the container is stopped and its cgroup is gone.\nfunc (c *Container) ignoreCgroupError(err error) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\tif errors.Is(err, os.ErrNotExist) && !c.hasInit() && !c.cgroupManager.Exists() {\n\t\treturn nil\n\t}\n\treturn err\n}\n\n// Processes returns the PIDs inside this container. The PIDs are in the\n// namespace of the calling process.\n//\n// Some of the returned PIDs may no longer refer to processes in the container,\n// unless the container state is PAUSED in which case every PID in the slice is\n// valid.\nfunc (c *Container) Processes() ([]int, error) {\n\tpids, err := c.cgroupManager.GetAllPids()\n\tif err = c.ignoreCgroupError(err); err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to get all container pids: %w\", err)\n\t}\n\treturn pids, nil\n}\n\n// Stats returns statistics for the container.\nfunc (c *Container) Stats() (*Stats, error) {\n\tvar (\n\t\terr   error\n\t\tstats = &Stats{}\n\t)\n\tif stats.CgroupStats, err = c.cgroupManager.GetStats(); err != nil {\n\t\treturn stats, fmt.Errorf(\"unable to get container cgroup stats: %w\", err)\n\t}\n\tif c.intelRdtManager != nil {\n\t\tif stats.IntelRdtStats, err = c.intelRdtManager.GetStats(); err != nil {\n\t\t\treturn stats, fmt.Errorf(\"unable to get container Intel RDT stats: %w\", err)\n\t\t}\n\t}\n\tfor _, iface := range c.config.Networks {\n\t\tswitch iface.Type {\n\t\tcase \"veth\":\n\t\t\tistats, err := getNetworkInterfaceStats(iface.HostInterfaceName)\n\t\t\tif err != nil {\n\t\t\t\treturn stats, fmt.Errorf(\"unable to get network stats for interface %q: %w\", iface.HostInterfaceName, err)\n\t\t\t}\n\t\t\tstats.Interfaces = append(stats.Interfaces, istats)\n\t\t}\n\t}\n\treturn stats, nil\n}\n\n// Set resources of container as configured. Can be used to change resources\n// when the container is running.\nfunc (c *Container) Set(config configs.Config) error {\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\tstatus, err := c.currentStatus()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif status == Stopped {\n\t\treturn ErrNotRunning\n\t}\n\tif err := c.cgroupManager.Set(config.Cgroups.Resources); err != nil {\n\t\t// Set configs back\n\t\tif err2 := c.cgroupManager.Set(c.config.Cgroups.Resources); err2 != nil {\n\t\t\tlogrus.Warnf(\"Setting back cgroup configs failed due to error: %v, your state.json and actual configs might be inconsistent.\", err2)\n\t\t}\n\t\treturn err\n\t}\n\tif c.intelRdtManager != nil {\n\t\tif err := c.intelRdtManager.Set(&config); err != nil {\n\t\t\t// Set configs back\n\t\t\tif err2 := c.cgroupManager.Set(c.config.Cgroups.Resources); err2 != nil {\n\t\t\t\tlogrus.Warnf(\"Setting back cgroup configs failed due to error: %v, your state.json and actual configs might be inconsistent.\", err2)\n\t\t\t}\n\t\t\tif err2 := c.intelRdtManager.Set(c.config); err2 != nil {\n\t\t\t\tlogrus.Warnf(\"Setting back intelrdt configs failed due to error: %v, your state.json and actual configs might be inconsistent.\", err2)\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\t// After config setting succeed, update config and states\n\tc.config = &config\n\t_, err = c.updateState(nil)\n\treturn err\n}\n\n// Start starts a process inside the container. Returns error if process fails\n// to start. You can track process lifecycle with passed Process structure.\nfunc (c *Container) Start(process *Process) error {\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\treturn c.start(process)\n}\n\n// Run immediately starts the process inside the container. Returns an error if\n// the process fails to start. It does not block waiting for the exec fifo\n// after start returns but opens the fifo after start returns.\nfunc (c *Container) Run(process *Process) error {\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\tif err := c.start(process); err != nil {\n\t\treturn err\n\t}\n\tif process.Init {\n\t\treturn c.exec()\n\t}\n\treturn nil\n}\n\n// Exec signals the container to exec the users process at the end of the init.\nfunc (c *Container) Exec() error {\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\treturn c.exec()\n}\n\nfunc (c *Container) exec() error {\n\tpath := filepath.Join(c.stateDir, execFifoFilename)\n\tpid := c.initProcess.pid()\n\tblockingFifoOpenCh := awaitFifoOpen(path)\n\tfor {\n\t\tselect {\n\t\tcase result := <-blockingFifoOpenCh:\n\t\t\treturn handleFifoResult(result)\n\n\t\tcase <-time.After(time.Millisecond * 100):\n\t\t\tstat, err := system.Stat(pid)\n\t\t\tif err != nil || stat.State == system.Zombie {\n\t\t\t\t// could be because process started, ran, and completed between our 100ms timeout and our system.Stat() check.\n\t\t\t\t// see if the fifo exists and has data (with a non-blocking open, which will succeed if the writing process is complete).\n\t\t\t\tif err := handleFifoResult(fifoOpen(path, false)); err != nil {\n\t\t\t\t\treturn errors.New(\"container process is already dead\")\n\t\t\t\t}\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc readFromExecFifo(execFifo io.Reader) error {\n\tdata, err := io.ReadAll(execFifo)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif len(data) <= 0 {\n\t\treturn errors.New(\"cannot start an already running container\")\n\t}\n\treturn nil\n}\n\nfunc awaitFifoOpen(path string) <-chan openResult {\n\tfifoOpened := make(chan openResult)\n\tgo func() {\n\t\tresult := fifoOpen(path, true)\n\t\tfifoOpened <- result\n\t}()\n\treturn fifoOpened\n}\n\nfunc fifoOpen(path string, block bool) openResult {\n\tflags := os.O_RDONLY\n\tif !block {\n\t\tflags |= unix.O_NONBLOCK\n\t}\n\tf, err := os.OpenFile(path, flags, 0)\n\tif err != nil {\n\t\treturn openResult{err: fmt.Errorf(\"exec fifo: %w\", err)}\n\t}\n\treturn openResult{file: f}\n}\n\nfunc handleFifoResult(result openResult) error {\n\tif result.err != nil {\n\t\treturn result.err\n\t}\n\tf := result.file\n\tdefer f.Close()\n\tif err := readFromExecFifo(f); err != nil {\n\t\treturn err\n\t}\n\terr := os.Remove(f.Name())\n\tif err == nil || errors.Is(err, os.ErrNotExist) {\n\t\treturn nil\n\t}\n\treturn err\n}\n\ntype openResult struct {\n\tfile *os.File\n\terr  error\n}\n\nfunc (c *Container) start(process *Process) (retErr error) {\n\tif c.config.Cgroups.Resources.SkipDevices {\n\t\treturn errors.New(\"can't start container with SkipDevices set\")\n\t}\n\n\tif c.config.RootlessEUID && len(process.AdditionalGroups) > 0 {\n\t\t// We cannot set any additional groups in a rootless container\n\t\t// and thus we bail if the user asked us to do so.\n\t\treturn errors.New(\"cannot set any additional groups in a rootless container\")\n\t}\n\n\tif process.Init {\n\t\tif c.initProcessStartTime != 0 {\n\t\t\treturn errors.New(\"container already has init process\")\n\t\t}\n\t\tif err := c.createExecFifo(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer func() {\n\t\t\tif retErr != nil {\n\t\t\t\tc.deleteExecFifo()\n\t\t\t}\n\t\t}()\n\t}\n\n\tparent, err := c.newParentProcess(process)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unable to create new parent process: %w\", err)\n\t}\n\t// We do not need the cloned binaries once the process is spawned.\n\tdefer process.closeClonedExes()\n\n\t// Before starting \"runc init\", mark all non-stdio open files as O_CLOEXEC\n\t// to make sure we don't leak any files into \"runc init\". Any files to be\n\t// passed to \"runc init\" through ExtraFiles will get dup2'd by the Go\n\t// runtime and thus their O_CLOEXEC flag will be cleared. This is some\n\t// additional protection against attacks like CVE-2024-21626, by making\n\t// sure we never leak files to \"runc init\" we didn't intend to.\n\tif err := utils.CloseExecFrom(3); err != nil {\n\t\treturn fmt.Errorf(\"unable to mark non-stdio fds as cloexec: %w\", err)\n\t}\n\n\tif logsDone := parent.forwardChildLogs(); logsDone != nil {\n\t\tdefer func() {\n\t\t\t// Wait for log forwarder to finish. This depends on\n\t\t\t// runc init closing the _LIBCONTAINER_LOGPIPE log fd.\n\t\t\terr := <-logsDone\n\t\t\tif err != nil {\n\t\t\t\t// runc init errors are important; make sure retErr has them.\n\t\t\t\terr = fmt.Errorf(\"runc init error(s): %w\", err)\n\t\t\t\tif retErr != nil {\n\t\t\t\t\tretErr = fmt.Errorf(\"%w; %w\", retErr, err)\n\t\t\t\t} else {\n\t\t\t\t\tretErr = err\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\t}\n\n\tif err := parent.start(); err != nil {\n\t\treturn fmt.Errorf(\"unable to start container process: %w\", err)\n\t}\n\n\tif process.Init {\n\t\tc.fifo.Close()\n\t\tif c.config.HasHook(configs.Poststart) {\n\t\t\ts, err := c.currentOCIState()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tif err := c.config.Hooks.Run(configs.Poststart, s); err != nil {\n\t\t\t\tif err := ignoreTerminateErrors(parent.terminate()); err != nil {\n\t\t\t\t\tlogrus.Warn(fmt.Errorf(\"error running poststart hook: %w\", err))\n\t\t\t\t}\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// Signal sends a specified signal to container's init.\n//\n// When s is SIGKILL and the container does not have its own PID namespace, all\n// the container's processes are killed. In this scenario, the libcontainer\n// user may be required to implement a proper child reaper.\nfunc (c *Container) Signal(s os.Signal) error {\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\n\t// When a container has its own PID namespace, inside it the init PID\n\t// is 1, and thus it is handled specially by the kernel. In particular,\n\t// killing init with SIGKILL from an ancestor namespace will also kill\n\t// all other processes in that PID namespace (see pid_namespaces(7)).\n\t//\n\t// OTOH, if PID namespace is shared, we should kill all pids to avoid\n\t// leftover processes. Handle this special case here.\n\tif s == unix.SIGKILL && !c.config.Namespaces.IsPrivate(configs.NEWPID) {\n\t\tif err := signalAllProcesses(c.cgroupManager, unix.SIGKILL); err != nil {\n\t\t\tif c.config.RootlessCgroups { // may not have an access to cgroup\n\t\t\t\tlogrus.WithError(err).Warn(\"failed to kill all processes, possibly due to lack of cgroup (Hint: enable cgroup v2 delegation)\")\n\t\t\t\t// Some processes may leak when cgroup is not delegated\n\t\t\t\t// https://github.com/opencontainers/runc/pull/4395#pullrequestreview-2291179652\n\t\t\t\treturn c.signal(s)\n\t\t\t}\n\t\t\t// For not rootless container, if there is no init process and no cgroup,\n\t\t\t// it means that the container is not running.\n\t\t\tif errors.Is(err, ErrCgroupNotExist) && !c.hasInit() {\n\t\t\t\terr = ErrNotRunning\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"unable to kill all processes: %w\", err)\n\t\t}\n\t\treturn nil\n\t}\n\n\treturn c.signal(s)\n}\n\nfunc (c *Container) signal(s os.Signal) error {\n\t// To avoid a PID reuse attack, don't kill non-running container.\n\tif !c.hasInit() {\n\t\treturn ErrNotRunning\n\t}\n\tif err := c.initProcess.signal(s); err != nil {\n\t\treturn fmt.Errorf(\"unable to signal init: %w\", err)\n\t}\n\tif s == unix.SIGKILL {\n\t\t// For cgroup v1, killing a process in a frozen cgroup\n\t\t// does nothing until it's thawed. Only thaw the cgroup\n\t\t// for SIGKILL.\n\t\tif paused, _ := c.isPaused(); paused {\n\t\t\t_ = c.cgroupManager.Freeze(cgroups.Thawed)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (c *Container) createExecFifo() (retErr error) {\n\trootuid, err := c.config.HostRootUID()\n\tif err != nil {\n\t\treturn err\n\t}\n\trootgid, err := c.config.HostRootGID()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfifoName := filepath.Join(c.stateDir, execFifoFilename)\n\tif err := unix.Mkfifo(fifoName, 0o622); err != nil {\n\t\treturn &os.PathError{Op: \"mkfifo\", Path: fifoName, Err: err}\n\t}\n\tdefer func() {\n\t\tif retErr != nil {\n\t\t\tos.Remove(fifoName)\n\t\t}\n\t}()\n\t// Ensure permission bits (can be different because of umask).\n\tif err := os.Chmod(fifoName, 0o622); err != nil {\n\t\treturn err\n\t}\n\treturn os.Chown(fifoName, rootuid, rootgid)\n}\n\nfunc (c *Container) deleteExecFifo() {\n\tfifoName := filepath.Join(c.stateDir, execFifoFilename)\n\tos.Remove(fifoName)\n}\n\n// includeExecFifo opens the container's execfifo as a pathfd, so that the\n// container cannot access the statedir (and the FIFO itself remains\n// un-opened). It then adds the FifoFd to the given exec.Cmd as an inherited\n// fd, with _LIBCONTAINER_FIFOFD set to its fd number.\nfunc (c *Container) includeExecFifo(cmd *exec.Cmd) error {\n\tfifoName := filepath.Join(c.stateDir, execFifoFilename)\n\tfifo, err := os.OpenFile(fifoName, unix.O_PATH|unix.O_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tc.fifo = fifo\n\n\tcmd.ExtraFiles = append(cmd.ExtraFiles, fifo)\n\tcmd.Env = append(cmd.Env,\n\t\t\"_LIBCONTAINER_FIFOFD=\"+strconv.Itoa(stdioFdCount+len(cmd.ExtraFiles)-1))\n\treturn nil\n}\n\nfunc (c *Container) newParentProcess(p *Process) (parentProcess, error) {\n\tcomm, err := newProcessComm()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Make sure we use a new safe copy of /proc/self/exe binary each time, this\n\t// is called to make sure that if a container manages to overwrite the file,\n\t// it cannot affect other containers on the system. For runc, this code will\n\t// only ever be called once, but libcontainer users might call this more than\n\t// once.\n\tp.closeClonedExes()\n\tvar (\n\t\texePath string\n\t\tsafeExe *os.File\n\t)\n\tif exeseal.IsSelfExeCloned() {\n\t\t// /proc/self/exe is already a cloned binary -- no need to do anything\n\t\tlogrus.Debug(\"skipping binary cloning -- /proc/self/exe is already cloned!\")\n\t\t// We don't need to use /proc/thread-self here because the exe mm of a\n\t\t// thread-group is guaranteed to be the same for all threads by\n\t\t// definition. This lets us avoid having to do runtime.LockOSThread.\n\t\texePath = \"/proc/self/exe\"\n\t} else {\n\t\tvar err error\n\t\tsafeExe, err = exeseal.CloneSelfExe(c.stateDir)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"unable to create safe /proc/self/exe clone for runc init: %w\", err)\n\t\t}\n\t\texePath = \"/proc/self/fd/\" + strconv.Itoa(int(safeExe.Fd()))\n\t\tp.clonedExes = append(p.clonedExes, safeExe)\n\t\tlogrus.Debug(\"runc exeseal: using /proc/self/exe clone\") // used for tests\n\t}\n\n\tcmd := exec.Command(exePath, \"init\")\n\t// Theoretically, exec.Command can set cmd.Err. Practically, this\n\t// should never happen (Linux, Go <= 1.26, exePath is absolute),\n\t// but in the unlikely case it just did, let's fail early.\n\tif cmd.Err != nil {\n\t\treturn nil, fmt.Errorf(\"exec.Command: %w\", cmd.Err)\n\t}\n\tcmd.Args[0] = os.Args[0]\n\tcmd.Stdin = p.Stdin\n\tcmd.Stdout = p.Stdout\n\tcmd.Stderr = p.Stderr\n\tcmd.Dir = c.config.Rootfs\n\tif cmd.SysProcAttr == nil {\n\t\tcmd.SysProcAttr = &unix.SysProcAttr{}\n\t}\n\tcmd.Env = append(cmd.Env, \"GOMAXPROCS=\"+os.Getenv(\"GOMAXPROCS\"))\n\tcmd.ExtraFiles = append(cmd.ExtraFiles, p.ExtraFiles...)\n\tif p.ConsoleSocket != nil {\n\t\tcmd.ExtraFiles = append(cmd.ExtraFiles, p.ConsoleSocket)\n\t\tcmd.Env = append(cmd.Env,\n\t\t\t\"_LIBCONTAINER_CONSOLE=\"+strconv.Itoa(stdioFdCount+len(cmd.ExtraFiles)-1),\n\t\t)\n\t}\n\n\tcmd.ExtraFiles = append(cmd.ExtraFiles, comm.initSockChild)\n\tcmd.Env = append(cmd.Env,\n\t\t\"_LIBCONTAINER_INITPIPE=\"+strconv.Itoa(stdioFdCount+len(cmd.ExtraFiles)-1),\n\t)\n\tcmd.ExtraFiles = append(cmd.ExtraFiles, comm.syncSockChild.File())\n\tcmd.Env = append(cmd.Env,\n\t\t\"_LIBCONTAINER_SYNCPIPE=\"+strconv.Itoa(stdioFdCount+len(cmd.ExtraFiles)-1),\n\t)\n\n\tcmd.ExtraFiles = append(cmd.ExtraFiles, comm.logPipeChild)\n\tcmd.Env = append(cmd.Env,\n\t\t\"_LIBCONTAINER_LOGPIPE=\"+strconv.Itoa(stdioFdCount+len(cmd.ExtraFiles)-1))\n\tif p.LogLevel != \"\" {\n\t\tcmd.Env = append(cmd.Env, \"_LIBCONTAINER_LOGLEVEL=\"+p.LogLevel)\n\t}\n\n\tif p.PidfdSocket != nil {\n\t\tcmd.ExtraFiles = append(cmd.ExtraFiles, p.PidfdSocket)\n\t\tcmd.Env = append(cmd.Env,\n\t\t\t\"_LIBCONTAINER_PIDFD_SOCK=\"+strconv.Itoa(stdioFdCount+len(cmd.ExtraFiles)-1),\n\t\t)\n\t}\n\n\t// TODO: After https://go-review.googlesource.com/c/go/+/515799 included\n\t// in go versions supported by us, we can remove this logic.\n\tif safeExe != nil {\n\t\t// Due to a Go stdlib bug, we need to add safeExe to the set of\n\t\t// ExtraFiles otherwise it is possible for the stdlib to clobber the fd\n\t\t// during forkAndExecInChild1 and replace it with some other file that\n\t\t// might be malicious. This is less than ideal (because the descriptor\n\t\t// will be non-O_CLOEXEC) however we have protections in \"runc init\" to\n\t\t// stop us from leaking extra file descriptors.\n\t\t//\n\t\t// See <https://github.com/golang/go/issues/61751>.\n\t\tcmd.ExtraFiles = append(cmd.ExtraFiles, safeExe)\n\n\t\t// There is a race situation when we are opening a file, if there is a\n\t\t// small fd was closed at that time, maybe it will be reused by safeExe.\n\t\t// Because of Go stdlib fds shuffling bug, if the fd of safeExe is too\n\t\t// small, go stdlib will dup3 it to another fd, or dup3 a other fd to this\n\t\t// fd, then it will cause the fd type cmd.Path refers to a random path,\n\t\t// and it can lead to an error \"permission denied\" when starting the process.\n\t\t// Please see #4294.\n\t\t// So we should not use the original fd of safeExe, but use the fd after\n\t\t// shuffled by Go stdlib. Because Go stdlib will guarantee this fd refers to\n\t\t// the correct file.\n\t\tcmd.Path = \"/proc/self/fd/\" + strconv.Itoa(stdioFdCount+len(cmd.ExtraFiles)-1)\n\t}\n\n\t// NOTE: when running a container with no PID namespace and the parent\n\t//       process spawning the container is PID1 the pdeathsig is being\n\t//       delivered to the container's init process by the kernel for some\n\t//       reason even with the parent still running.\n\tif c.config.ParentDeathSignal > 0 {\n\t\tcmd.SysProcAttr.Pdeathsig = unix.Signal(c.config.ParentDeathSignal)\n\t}\n\n\tif p.Init {\n\t\t// We only set up fifoFd if we're not doing a `runc exec`. The historic\n\t\t// reason for this is that previously we would pass a dirfd that allowed\n\t\t// for container rootfs escape (and not doing it in `runc exec` avoided\n\t\t// that problem), but we no longer do that. However, there's no need to do\n\t\t// this for `runc exec` so we just keep it this way to be safe.\n\t\tif err := c.includeExecFifo(cmd); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"unable to setup exec fifo: %w\", err)\n\t\t}\n\t\treturn c.newInitProcess(p, cmd, comm)\n\t}\n\treturn c.newSetnsProcess(p, cmd, comm)\n}\n\nfunc (c *Container) newInitProcess(p *Process, cmd *exec.Cmd, comm *processComm) (*initProcess, error) {\n\tcmd.Env = append(cmd.Env, \"_LIBCONTAINER_INITTYPE=\"+string(initStandard))\n\tnsMaps := make(map[configs.NamespaceType]string)\n\tfor _, ns := range c.config.Namespaces {\n\t\tif ns.Path != \"\" {\n\t\t\tnsMaps[ns.Type] = ns.Path\n\t\t}\n\t}\n\tdata, err := c.bootstrapData(c.config.Namespaces.CloneFlags(), nsMaps)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tinit := &initProcess{\n\t\tcontainerProcess: containerProcess{\n\t\t\tcmd:           cmd,\n\t\t\tcomm:          comm,\n\t\t\tmanager:       c.cgroupManager,\n\t\t\tconfig:        c.newInitConfig(p),\n\t\t\tprocess:       p,\n\t\t\tbootstrapData: data,\n\t\t\tcontainer:     c,\n\t\t},\n\t\tintelRdtManager: c.intelRdtManager,\n\t}\n\tc.initProcess = init\n\treturn init, nil\n}\n\nfunc (c *Container) newSetnsProcess(p *Process, cmd *exec.Cmd, comm *processComm) (*setnsProcess, error) {\n\tcmd.Env = append(cmd.Env, \"_LIBCONTAINER_INITTYPE=\"+string(initSetns))\n\tstate := c.currentState()\n\t// for setns process, we don't have to set cloneflags as the process namespaces\n\t// will only be set via setns syscall\n\tdata, err := c.bootstrapData(0, state.NamespacePaths)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tproc := &setnsProcess{\n\t\tcontainerProcess: containerProcess{\n\t\t\tcmd:           cmd,\n\t\t\tcomm:          comm,\n\t\t\tmanager:       c.cgroupManager,\n\t\t\tconfig:        c.newInitConfig(p),\n\t\t\tprocess:       p,\n\t\t\tbootstrapData: data,\n\t\t\tcontainer:     c,\n\t\t},\n\t\trootlessCgroups: c.config.RootlessCgroups,\n\t\tintelRdtPath:    state.IntelRdtPath,\n\t\tinitProcessPid:  state.InitProcessPid,\n\t}\n\treturn proc, nil\n}\n\nfunc (c *Container) newInitConfig(process *Process) *initConfig {\n\t// Set initial properties. For those properties that exist\n\t// both in the container config and the process, use the ones\n\t// from the container config first, and override them later.\n\tcfg := &initConfig{\n\t\tConfig:           c.config,\n\t\tArgs:             process.Args,\n\t\tEnv:              process.Env,\n\t\tUID:              process.UID,\n\t\tGID:              process.GID,\n\t\tAdditionalGroups: process.AdditionalGroups,\n\t\tCwd:              process.Cwd,\n\t\tCapabilities:     c.config.Capabilities,\n\t\tPassedFilesCount: len(process.ExtraFiles),\n\t\tContainerID:      c.ID(),\n\t\tNoNewPrivileges:  c.config.NoNewPrivileges,\n\t\tAppArmorProfile:  c.config.AppArmorProfile,\n\t\tProcessLabel:     c.config.ProcessLabel,\n\t\tRlimits:          c.config.Rlimits,\n\t\tIOPriority:       c.config.IOPriority,\n\t\tScheduler:        c.config.Scheduler,\n\t\tCPUAffinity:      c.config.ExecCPUAffinity,\n\t\tCreateConsole:    process.ConsoleSocket != nil,\n\t\tConsoleWidth:     process.ConsoleWidth,\n\t\tConsoleHeight:    process.ConsoleHeight,\n\t}\n\n\t// Overwrite config properties with ones from process.\n\n\tif process.Capabilities != nil {\n\t\tcfg.Capabilities = process.Capabilities\n\t}\n\tif process.NoNewPrivileges != nil {\n\t\tcfg.NoNewPrivileges = *process.NoNewPrivileges\n\t}\n\tif process.AppArmorProfile != \"\" {\n\t\tcfg.AppArmorProfile = process.AppArmorProfile\n\t}\n\tif process.Label != \"\" {\n\t\tcfg.ProcessLabel = process.Label\n\t}\n\tif len(process.Rlimits) > 0 {\n\t\tcfg.Rlimits = process.Rlimits\n\t}\n\tif process.IOPriority != nil {\n\t\tcfg.IOPriority = process.IOPriority\n\t}\n\tif process.Scheduler != nil {\n\t\tcfg.Scheduler = process.Scheduler\n\t}\n\tif process.CPUAffinity != nil {\n\t\tcfg.CPUAffinity = process.CPUAffinity\n\t}\n\n\t// Set misc properties.\n\n\tif cgroups.IsCgroup2UnifiedMode() {\n\t\tcfg.Cgroup2Path = c.cgroupManager.Path(\"\")\n\t}\n\n\treturn cfg\n}\n\n// Destroy destroys the container, if its in a valid state.\n//\n// Any event registrations are removed before the container is destroyed.\n// No error is returned if the container is already destroyed.\n//\n// Running containers must first be stopped using Signal.\n// Paused containers must first be resumed using Resume.\nfunc (c *Container) Destroy() error {\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\tif err := c.state.destroy(); err != nil {\n\t\treturn fmt.Errorf(\"unable to destroy container: %w\", err)\n\t}\n\treturn nil\n}\n\n// Pause pauses the container, if its state is RUNNING or CREATED, changing\n// its state to PAUSED. If the state is already PAUSED, does nothing.\nfunc (c *Container) Pause() error {\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\tstatus, err := c.currentStatus()\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch status {\n\tcase Running, Created:\n\t\tif err := c.cgroupManager.Freeze(cgroups.Frozen); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn c.state.transition(&pausedState{\n\t\t\tc: c,\n\t\t})\n\t}\n\treturn ErrNotRunning\n}\n\n// Resume resumes the execution of any user processes in the\n// container before setting the container state to RUNNING.\n// This is only performed if the current state is PAUSED.\n// If the Container state is RUNNING, does nothing.\nfunc (c *Container) Resume() error {\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\tstatus, err := c.currentStatus()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif status != Paused {\n\t\treturn ErrNotPaused\n\t}\n\tif err := c.cgroupManager.Freeze(cgroups.Thawed); err != nil {\n\t\treturn err\n\t}\n\treturn c.state.transition(&runningState{\n\t\tc: c,\n\t})\n}\n\n// NotifyOOM returns a read-only channel signaling when the container receives\n// an OOM notification.\nfunc (c *Container) NotifyOOM() (<-chan struct{}, error) {\n\t// XXX(cyphar): This requires cgroups.\n\tif c.config.RootlessCgroups {\n\t\tlogrus.Warn(\"getting OOM notifications may fail if you don't have the full access to cgroups\")\n\t}\n\tpath := c.cgroupManager.Path(\"memory\")\n\tif cgroups.IsCgroup2UnifiedMode() {\n\t\treturn notifyOnOOMV2(path)\n\t}\n\treturn notifyOnOOM(path)\n}\n\n// NotifyMemoryPressure returns a read-only channel signaling when the\n// container reaches a given pressure level.\nfunc (c *Container) NotifyMemoryPressure(level PressureLevel) (<-chan struct{}, error) {\n\t// XXX(cyphar): This requires cgroups.\n\tif c.config.RootlessCgroups {\n\t\tlogrus.Warn(\"getting memory pressure notifications may fail if you don't have the full access to cgroups\")\n\t}\n\treturn notifyMemoryPressure(c.cgroupManager.Path(\"memory\"), level)\n}\n\nfunc (c *Container) updateState(process parentProcess) (*State, error) {\n\tif process != nil {\n\t\tc.initProcess = process\n\t}\n\tstate := c.currentState()\n\tif err := c.saveState(state); err != nil {\n\t\treturn nil, err\n\t}\n\treturn state, nil\n}\n\nfunc (c *Container) saveState(s *State) (retErr error) {\n\ttmpFile, err := os.CreateTemp(c.stateDir, \"state-\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdefer func() {\n\t\tif retErr != nil {\n\t\t\ttmpFile.Close()\n\t\t\tos.Remove(tmpFile.Name())\n\t\t}\n\t}()\n\n\terr = utils.WriteJSON(tmpFile, s)\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = tmpFile.Close()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tstateFilePath := filepath.Join(c.stateDir, stateFilename)\n\treturn os.Rename(tmpFile.Name(), stateFilePath)\n}\n\nfunc (c *Container) currentStatus() (Status, error) {\n\tif err := c.refreshState(); err != nil {\n\t\treturn -1, err\n\t}\n\treturn c.state.status(), nil\n}\n\n// refreshState needs to be called to verify that the current state on the\n// container is what is true.  Because consumers of libcontainer can use it\n// out of process we need to verify the container's status based on runtime\n// information and not rely on our in process info.\nfunc (c *Container) refreshState() error {\n\tpaused, err := c.isPaused()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif paused {\n\t\treturn c.state.transition(&pausedState{c: c})\n\t}\n\tif !c.hasInit() {\n\t\treturn c.state.transition(&stoppedState{c: c})\n\t}\n\t// The presence of exec fifo helps to distinguish between\n\t// the created and the running states.\n\tif _, err := os.Stat(filepath.Join(c.stateDir, execFifoFilename)); err == nil {\n\t\treturn c.state.transition(&createdState{c: c})\n\t}\n\treturn c.state.transition(&runningState{c: c})\n}\n\n// hasInit tells whether the container init process exists.\nfunc (c *Container) hasInit() bool {\n\tif c.initProcess == nil {\n\t\treturn false\n\t}\n\tpid := c.initProcess.pid()\n\tstat, err := system.Stat(pid)\n\tif err != nil {\n\t\treturn false\n\t}\n\tif stat.StartTime != c.initProcessStartTime || stat.State == system.Zombie || stat.State == system.Dead {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc (c *Container) isPaused() (bool, error) {\n\tstate, err := c.cgroupManager.GetFreezerState()\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn state == cgroups.Frozen, nil\n}\n\nfunc (c *Container) currentState() *State {\n\tvar (\n\t\tstartTime           uint64\n\t\texternalDescriptors []string\n\t\tpid                 = -1\n\t)\n\tif c.initProcess != nil {\n\t\tpid = c.initProcess.pid()\n\t\tstartTime, _ = c.initProcess.startTime()\n\t\texternalDescriptors = c.initProcess.externalDescriptors()\n\t}\n\n\tintelRdtPath := \"\"\n\tintelRdtMonPath := \"\"\n\tif c.intelRdtManager != nil {\n\t\tintelRdtPath = c.intelRdtManager.GetPath()\n\t\tintelRdtMonPath = c.intelRdtManager.GetMonPath()\n\t}\n\tstate := &State{\n\t\tBaseState: BaseState{\n\t\t\tID:                   c.ID(),\n\t\t\tConfig:               *c.config,\n\t\t\tInitProcessPid:       pid,\n\t\t\tInitProcessStartTime: startTime,\n\t\t\tCreated:              c.created,\n\t\t},\n\t\tRootless:            c.config.RootlessEUID && c.config.RootlessCgroups,\n\t\tCgroupPaths:         c.cgroupManager.GetPaths(),\n\t\tIntelRdtPath:        intelRdtPath,\n\t\tIntelRdtMonPath:     intelRdtMonPath,\n\t\tNamespacePaths:      make(map[configs.NamespaceType]string),\n\t\tExternalDescriptors: externalDescriptors,\n\t}\n\tif pid > 0 {\n\t\tfor _, ns := range c.config.Namespaces {\n\t\t\tstate.NamespacePaths[ns.Type] = ns.GetPath(pid)\n\t\t}\n\t\tfor _, nsType := range configs.NamespaceTypes() {\n\t\t\tif !configs.IsNamespaceSupported(nsType) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif _, ok := state.NamespacePaths[nsType]; !ok {\n\t\t\t\tns := configs.Namespace{Type: nsType}\n\t\t\t\tstate.NamespacePaths[ns.Type] = ns.GetPath(pid)\n\t\t\t}\n\t\t}\n\t}\n\treturn state\n}\n\nfunc (c *Container) currentOCIState() (*specs.State, error) {\n\tbundle, annotations := utils.Annotations(c.config.Labels)\n\tstate := &specs.State{\n\t\tVersion:     specs.Version,\n\t\tID:          c.ID(),\n\t\tBundle:      bundle,\n\t\tAnnotations: annotations,\n\t}\n\tstatus, err := c.currentStatus()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tstate.Status = specs.ContainerState(status.String())\n\tif status != Stopped {\n\t\tif c.initProcess != nil {\n\t\t\tstate.Pid = c.initProcess.pid()\n\t\t}\n\t}\n\treturn state, nil\n}\n\n// orderNamespacePaths sorts namespace paths into a list of paths that we\n// can setns in order.\nfunc (c *Container) orderNamespacePaths(namespaces map[configs.NamespaceType]string) ([]string, error) {\n\tpaths := []string{}\n\tfor _, ns := range configs.NamespaceTypes() {\n\n\t\t// Remove namespaces that we don't need to join.\n\t\tif !c.config.Namespaces.Contains(ns) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif p, ok := namespaces[ns]; ok && p != \"\" {\n\t\t\t// check if the requested namespace is supported\n\t\t\tif !configs.IsNamespaceSupported(ns) {\n\t\t\t\treturn nil, fmt.Errorf(\"namespace %s is not supported\", ns)\n\t\t\t}\n\t\t\t// only set to join this namespace if it exists\n\t\t\tif _, err := os.Lstat(p); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"namespace path: %w\", err)\n\t\t\t}\n\t\t\t// do not allow namespace path with comma as we use it to separate\n\t\t\t// the namespace paths\n\t\t\tif strings.ContainsRune(p, ',') {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid namespace path %s\", p)\n\t\t\t}\n\t\t\tpaths = append(paths, fmt.Sprintf(\"%s:%s\", configs.NsName(ns), p))\n\t\t}\n\n\t}\n\n\treturn paths, nil\n}\n\nfunc encodeIDMapping(idMap []configs.IDMap) ([]byte, error) {\n\tdata := bytes.NewBuffer(nil)\n\tfor _, im := range idMap {\n\t\tline := fmt.Sprintf(\"%d %d %d\\n\", im.ContainerID, im.HostID, im.Size)\n\t\tif _, err := data.WriteString(line); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn data.Bytes(), nil\n}\n\n// netlinkError is an error wrapper type for use by custom netlink message\n// types. Panics with errors are wrapped in netlinkError so that the recover\n// in bootstrapData can distinguish intentional panics.\ntype netlinkError struct{ error }\n\n// bootstrapData encodes the necessary data in netlink binary format\n// as a io.Reader.\n// Consumer can write the data to a bootstrap program\n// such as one that uses nsenter package to bootstrap the container's\n// init process correctly, i.e. with correct namespaces, uid/gid\n// mapping etc.\nfunc (c *Container) bootstrapData(cloneFlags uintptr, nsMaps map[configs.NamespaceType]string) (_ io.Reader, Err error) {\n\t// create the netlink message\n\tr := nl.NewNetlinkRequest(int(InitMsg), 0)\n\n\t// Our custom messages cannot bubble up an error using returns, instead\n\t// they will panic with the specific error type, netlinkError. In that\n\t// case, recover from the panic and return that as an error.\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\tif e, ok := r.(netlinkError); ok {\n\t\t\t\tErr = e.error\n\t\t\t} else {\n\t\t\t\tpanic(r)\n\t\t\t}\n\t\t}\n\t}()\n\n\t// write cloneFlags\n\tr.AddData(&Int32msg{\n\t\tType:  CloneFlagsAttr,\n\t\tValue: uint32(cloneFlags),\n\t})\n\n\t// write custom namespace paths\n\tif len(nsMaps) > 0 {\n\t\tnsPaths, err := c.orderNamespacePaths(nsMaps)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tr.AddData(&Bytemsg{\n\t\t\tType:  NsPathsAttr,\n\t\t\tValue: []byte(strings.Join(nsPaths, \",\")),\n\t\t})\n\t}\n\n\t// write namespace paths only when we are not joining an existing user ns\n\t_, joinExistingUser := nsMaps[configs.NEWUSER]\n\tif !joinExistingUser {\n\t\t// write uid mappings\n\t\tif len(c.config.UIDMappings) > 0 {\n\t\t\tif c.config.RootlessEUID {\n\t\t\t\t// We resolve the paths for new{u,g}idmap from\n\t\t\t\t// the context of runc to avoid doing a path\n\t\t\t\t// lookup in the nsexec context.\n\t\t\t\tif path, err := exec.LookPath(\"newuidmap\"); err == nil {\n\t\t\t\t\tr.AddData(&Bytemsg{\n\t\t\t\t\t\tType:  UidmapPathAttr,\n\t\t\t\t\t\tValue: []byte(path),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tb, err := encodeIDMapping(c.config.UIDMappings)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tr.AddData(&Bytemsg{\n\t\t\t\tType:  UidmapAttr,\n\t\t\t\tValue: b,\n\t\t\t})\n\t\t}\n\n\t\t// write gid mappings\n\t\tif len(c.config.GIDMappings) > 0 {\n\t\t\tb, err := encodeIDMapping(c.config.GIDMappings)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tr.AddData(&Bytemsg{\n\t\t\t\tType:  GidmapAttr,\n\t\t\t\tValue: b,\n\t\t\t})\n\t\t\tif c.config.RootlessEUID {\n\t\t\t\tif path, err := exec.LookPath(\"newgidmap\"); err == nil {\n\t\t\t\t\tr.AddData(&Bytemsg{\n\t\t\t\t\t\tType:  GidmapPathAttr,\n\t\t\t\t\t\tValue: []byte(path),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tif requiresRootOrMappingTool(c.config) {\n\t\t\t\tr.AddData(&Boolmsg{\n\t\t\t\t\tType:  SetgroupAttr,\n\t\t\t\t\tValue: true,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\tif c.config.OomScoreAdj != nil {\n\t\t// write oom_score_adj\n\t\tr.AddData(&Bytemsg{\n\t\t\tType:  OomScoreAdjAttr,\n\t\t\tValue: []byte(strconv.Itoa(*c.config.OomScoreAdj)),\n\t\t})\n\t}\n\n\t// write rootless\n\tr.AddData(&Boolmsg{\n\t\tType:  RootlessEUIDAttr,\n\t\tValue: c.config.RootlessEUID,\n\t})\n\n\t// write boottime and monotonic time ns offsets only when we are not joining an existing time ns\n\t_, joinExistingTime := nsMaps[configs.NEWTIME]\n\tif !joinExistingTime && c.config.TimeOffsets != nil {\n\t\tvar offsetSpec bytes.Buffer\n\t\tfor clock, offset := range c.config.TimeOffsets {\n\t\t\tfmt.Fprintf(&offsetSpec, \"%s %d %d\\n\", clock, offset.Secs, offset.Nanosecs)\n\t\t}\n\t\tr.AddData(&Bytemsg{\n\t\t\tType:  TimeOffsetsAttr,\n\t\t\tValue: offsetSpec.Bytes(),\n\t\t})\n\t}\n\n\treturn bytes.NewReader(r.Serialize()), nil\n}\n\n// ignoreTerminateErrors returns nil if the given err matches an error known\n// to indicate that the terminate occurred successfully or err was nil, otherwise\n// err is returned unaltered.\nfunc ignoreTerminateErrors(err error) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\t// terminate() might return an error from either Kill or Wait.\n\t// The (*Cmd).Wait documentation says: \"If the command fails to run\n\t// or doesn't complete successfully, the error is of type *ExitError\".\n\t// Filter out such errors (like \"exit status 1\" or \"signal: killed\").\n\tvar exitErr *exec.ExitError\n\tif errors.As(err, &exitErr) {\n\t\treturn nil\n\t}\n\tif errors.Is(err, os.ErrProcessDone) {\n\t\treturn nil\n\t}\n\ts := err.Error()\n\tif strings.Contains(s, \"Wait was already called\") {\n\t\treturn nil\n\t}\n\treturn err\n}\n\nfunc requiresRootOrMappingTool(c *configs.Config) bool {\n\tgidMap := []configs.IDMap{\n\t\t{ContainerID: 0, HostID: int64(os.Getegid()), Size: 1},\n\t}\n\treturn !reflect.DeepEqual(c.GIDMappings, gidMap)\n}\n"
  },
  {
    "path": "libcontainer/container_linux_test.go",
    "content": "package libcontainer\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/system\"\n)\n\ntype mockCgroupManager struct {\n\tpids    []int\n\tallPids []int\n\tpaths   map[string]string\n}\n\nfunc (m *mockCgroupManager) GetPids() ([]int, error) {\n\treturn m.pids, nil\n}\n\nfunc (m *mockCgroupManager) GetAllPids() ([]int, error) {\n\treturn m.allPids, nil\n}\n\nfunc (m *mockCgroupManager) GetStats() (*cgroups.Stats, error) {\n\treturn nil, nil\n}\n\nfunc (m *mockCgroupManager) Apply(pid int) error {\n\treturn nil\n}\n\nfunc (m *mockCgroupManager) AddPid(_ string, _ int) error {\n\treturn nil\n}\n\nfunc (m *mockCgroupManager) Set(_ *cgroups.Resources) error {\n\treturn nil\n}\n\nfunc (m *mockCgroupManager) Destroy() error {\n\treturn nil\n}\n\nfunc (m *mockCgroupManager) Exists() bool {\n\t_, err := os.Lstat(m.Path(\"devices\"))\n\treturn err == nil\n}\n\nfunc (m *mockCgroupManager) OOMKillCount() (uint64, error) {\n\treturn 0, nil\n}\n\nfunc (m *mockCgroupManager) GetPaths() map[string]string {\n\treturn m.paths\n}\n\nfunc (m *mockCgroupManager) Path(subsys string) string {\n\treturn m.paths[subsys]\n}\n\nfunc (m *mockCgroupManager) Freeze(_ cgroups.FreezerState) error {\n\treturn nil\n}\n\nfunc (m *mockCgroupManager) GetCgroups() (*cgroups.Cgroup, error) {\n\treturn nil, nil\n}\n\nfunc (m *mockCgroupManager) GetFreezerState() (cgroups.FreezerState, error) {\n\treturn cgroups.Thawed, nil\n}\n\ntype mockProcess struct {\n\t_pid    int\n\tstarted uint64\n}\n\nfunc (m *mockProcess) terminate() error {\n\treturn nil\n}\n\nfunc (m *mockProcess) pid() int {\n\treturn m._pid\n}\n\nfunc (m *mockProcess) startTime() (uint64, error) {\n\treturn m.started, nil\n}\n\nfunc (m *mockProcess) start() error {\n\treturn nil\n}\n\nfunc (m *mockProcess) wait() (*os.ProcessState, error) {\n\treturn nil, nil\n}\n\nfunc (m *mockProcess) signal(_ os.Signal) error {\n\treturn nil\n}\n\nfunc (m *mockProcess) externalDescriptors() []string {\n\treturn []string{}\n}\n\nfunc (m *mockProcess) setExternalDescriptors(newFds []string) {\n}\n\nfunc (m *mockProcess) forwardChildLogs() chan error {\n\treturn nil\n}\n\nfunc TestGetContainerPids(t *testing.T) {\n\tpid := 1\n\tstat, err := system.Stat(pid)\n\tif err != nil {\n\t\tt.Fatalf(\"can't stat pid %d, got %v\", pid, err)\n\t}\n\tcontainer := &Container{\n\t\tid:     \"myid\",\n\t\tconfig: &configs.Config{},\n\t\tcgroupManager: &mockCgroupManager{\n\t\t\tallPids: []int{1, 2, 3},\n\t\t\tpaths: map[string]string{\n\t\t\t\t\"device\": \"/proc/self/cgroups\",\n\t\t\t},\n\t\t},\n\t\tinitProcess: &mockProcess{\n\t\t\t_pid:    1,\n\t\t\tstarted: 10,\n\t\t},\n\t\tinitProcessStartTime: stat.StartTime,\n\t}\n\tcontainer.state = &runningState{c: container}\n\tpids, err := container.Processes()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tfor i, expected := range []int{1, 2, 3} {\n\t\tif pids[i] != expected {\n\t\t\tt.Fatalf(\"expected pid %d but received %d\", expected, pids[i])\n\t\t}\n\t}\n}\n\nfunc TestGetContainerState(t *testing.T) {\n\tvar (\n\t\tpid                 = os.Getpid()\n\t\texpectedMemoryPath  = \"/sys/fs/cgroup/memory/myid\"\n\t\texpectedNetworkPath = fmt.Sprintf(\"/proc/%d/ns/net\", pid)\n\t)\n\tcontainer := &Container{\n\t\tid: \"myid\",\n\t\tconfig: &configs.Config{\n\t\t\tNamespaces: []configs.Namespace{\n\t\t\t\t{Type: configs.NEWPID},\n\t\t\t\t{Type: configs.NEWNS},\n\t\t\t\t{Type: configs.NEWNET, Path: expectedNetworkPath},\n\t\t\t\t{Type: configs.NEWUTS},\n\t\t\t\t// emulate host for IPC\n\t\t\t\t//{Type: configs.NEWIPC},\n\t\t\t\t{Type: configs.NEWCGROUP},\n\t\t\t},\n\t\t},\n\t\tinitProcess: &mockProcess{\n\t\t\t_pid:    pid,\n\t\t\tstarted: 10,\n\t\t},\n\t\tcgroupManager: &mockCgroupManager{\n\t\t\tpids: []int{1, 2, 3},\n\t\t\tpaths: map[string]string{\n\t\t\t\t\"memory\": expectedMemoryPath,\n\t\t\t},\n\t\t},\n\t}\n\tcontainer.state = &createdState{c: container}\n\tstate, err := container.State()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif state.InitProcessPid != pid {\n\t\tt.Fatalf(\"expected pid %d but received %d\", pid, state.InitProcessPid)\n\t}\n\tif state.InitProcessStartTime != 10 {\n\t\tt.Fatalf(\"expected process start time 10 but received %d\", state.InitProcessStartTime)\n\t}\n\tpaths := state.CgroupPaths\n\tif paths == nil {\n\t\tt.Fatal(\"cgroup paths should not be nil\")\n\t}\n\tif memPath := paths[\"memory\"]; memPath != expectedMemoryPath {\n\t\tt.Fatalf(\"expected memory path %q but received %q\", expectedMemoryPath, memPath)\n\t}\n\tfor _, ns := range container.config.Namespaces {\n\t\tpath := state.NamespacePaths[ns.Type]\n\t\tif path == \"\" {\n\t\t\tt.Fatalf(\"expected non nil namespace path for %s\", ns.Type)\n\t\t}\n\t\tif ns.Type == configs.NEWNET {\n\t\t\tif path != expectedNetworkPath {\n\t\t\t\tt.Fatalf(\"expected path %q but received %q\", expectedNetworkPath, path)\n\t\t\t}\n\t\t} else {\n\t\t\tfile := \"\"\n\t\t\tswitch ns.Type {\n\t\t\tcase configs.NEWNET:\n\t\t\t\tfile = \"net\"\n\t\t\tcase configs.NEWNS:\n\t\t\t\tfile = \"mnt\"\n\t\t\tcase configs.NEWPID:\n\t\t\t\tfile = \"pid\"\n\t\t\tcase configs.NEWIPC:\n\t\t\t\tfile = \"ipc\"\n\t\t\tcase configs.NEWUSER:\n\t\t\t\tfile = \"user\"\n\t\t\tcase configs.NEWUTS:\n\t\t\t\tfile = \"uts\"\n\t\t\tcase configs.NEWCGROUP:\n\t\t\t\tfile = \"cgroup\"\n\t\t\t}\n\t\t\texpected := fmt.Sprintf(\"/proc/%d/ns/%s\", pid, file)\n\t\t\tif expected != path {\n\t\t\t\tt.Fatalf(\"expected path %q but received %q\", expected, path)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestGetContainerStateAfterUpdate(t *testing.T) {\n\tpid := os.Getpid()\n\tstat, err := system.Stat(pid)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tcontainer := &Container{\n\t\tstateDir: t.TempDir(),\n\t\tid:       \"myid\",\n\t\tconfig: &configs.Config{\n\t\t\tNamespaces: []configs.Namespace{\n\t\t\t\t{Type: configs.NEWPID},\n\t\t\t\t{Type: configs.NEWNS},\n\t\t\t\t{Type: configs.NEWNET},\n\t\t\t\t{Type: configs.NEWUTS},\n\t\t\t\t{Type: configs.NEWIPC},\n\t\t\t},\n\t\t\tCgroups: &cgroups.Cgroup{\n\t\t\t\tResources: &cgroups.Resources{\n\t\t\t\t\tMemory: 1024,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tinitProcess: &mockProcess{\n\t\t\t_pid:    pid,\n\t\t\tstarted: stat.StartTime,\n\t\t},\n\t\tcgroupManager: &mockCgroupManager{},\n\t}\n\tcontainer.state = &createdState{c: container}\n\tstate, err := container.State()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif state.InitProcessPid != pid {\n\t\tt.Fatalf(\"expected pid %d but received %d\", pid, state.InitProcessPid)\n\t}\n\tif state.InitProcessStartTime != stat.StartTime {\n\t\tt.Fatalf(\"expected process start time %d but received %d\", stat.StartTime, state.InitProcessStartTime)\n\t}\n\tif state.Config.Cgroups.Resources.Memory != 1024 {\n\t\tt.Fatalf(\"expected Memory to be 1024 but received %q\", state.Config.Cgroups.Memory)\n\t}\n\n\t// Set initProcessStartTime so we fake to be running\n\tcontainer.initProcessStartTime = state.InitProcessStartTime\n\tcontainer.state = &runningState{c: container}\n\tnewConfig := container.Config()\n\tnewConfig.Cgroups.Resources.Memory = 2048\n\tif err := container.Set(newConfig); err != nil {\n\t\tt.Fatal(err)\n\t}\n\tstate, err = container.State()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif state.Config.Cgroups.Resources.Memory != 2048 {\n\t\tt.Fatalf(\"expected Memory to be 2048 but received %q\", state.Config.Cgroups.Memory)\n\t}\n}\n"
  },
  {
    "path": "libcontainer/criu_disabled_linux.go",
    "content": "//go:build runc_nocriu\n\npackage libcontainer\n\nimport \"errors\"\n\nvar ErrNoCR = errors.New(\"this runc binary has not been compiled with checkpoint/restore support enabled (runc_nocriu)\")\n\nfunc (c *Container) Restore(process *Process, criuOpts *CriuOpts) error {\n\treturn ErrNoCR\n}\n\nfunc (c *Container) Checkpoint(criuOpts *CriuOpts) error {\n\treturn ErrNoCR\n}\n"
  },
  {
    "path": "libcontainer/criu_linux.go",
    "content": "//go:build !runc_nocriu\n\npackage libcontainer\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode\"\n\n\t\"github.com/checkpoint-restore/go-criu/v7\"\n\tcriurpc \"github.com/checkpoint-restore/go-criu/v7/rpc\"\n\tsecurejoin \"github.com/cyphar/filepath-securejoin\"\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n\t\"google.golang.org/protobuf/proto\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/runc/internal/pathrs\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n)\n\nvar criuFeatures *criurpc.CriuFeatures\n\nvar ErrCriuMissingFeatures = errors.New(\"criu is missing features\")\n\nfunc (c *Container) checkCriuFeatures(criuOpts *CriuOpts, criuFeat *criurpc.CriuFeatures) error {\n\tt := criurpc.CriuReqType_FEATURE_CHECK\n\n\t// make sure the features we are looking for are really not from\n\t// some previous check\n\tcriuFeatures = nil\n\n\treq := &criurpc.CriuReq{\n\t\tType:     &t,\n\t\tFeatures: criuFeat,\n\t}\n\n\terr := c.criuSwrk(nil, req, criuOpts, nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"CRIU feature check failed: %w\", err)\n\t}\n\n\tvar missingFeatures []string\n\n\t// The outer if checks if the fields actually exist\n\tif (criuFeat.MemTrack != nil) &&\n\t\t(criuFeatures.MemTrack != nil) {\n\t\t// The inner if checks if they are set to true\n\t\tif *criuFeat.MemTrack && !*criuFeatures.MemTrack {\n\t\t\tmissingFeatures = append(missingFeatures, \"MemTrack\")\n\t\t\tlogrus.Debugf(\"CRIU does not support MemTrack\")\n\t\t}\n\t}\n\n\t// This needs to be repeated for every new feature check.\n\t// Is there a way to put this in a function. Reflection?\n\tif (criuFeat.LazyPages != nil) &&\n\t\t(criuFeatures.LazyPages != nil) {\n\t\tif *criuFeat.LazyPages && !*criuFeatures.LazyPages {\n\t\t\tmissingFeatures = append(missingFeatures, \"LazyPages\")\n\t\t\tlogrus.Debugf(\"CRIU does not support LazyPages\")\n\t\t}\n\t}\n\n\tif len(missingFeatures) != 0 {\n\t\treturn fmt.Errorf(\"%w: %v\", ErrCriuMissingFeatures, missingFeatures)\n\t}\n\n\treturn nil\n}\n\nfunc compareCriuVersion(criuVersion, minVersion int) error {\n\t// simple function to perform the actual version compare\n\tif criuVersion < minVersion {\n\t\treturn fmt.Errorf(\"CRIU version %d must be %d or higher\", criuVersion, minVersion)\n\t}\n\n\treturn nil\n}\n\n// checkCriuVersion checks CRIU version greater than or equal to minVersion.\nfunc (c *Container) checkCriuVersion(minVersion int) error {\n\t// If the version of criu has already been determined there is no need\n\t// to ask criu for the version again. Use the value from c.criuVersion.\n\tif c.criuVersion != 0 {\n\t\treturn compareCriuVersion(c.criuVersion, minVersion)\n\t}\n\n\tcriu := criu.MakeCriu()\n\tvar err error\n\tc.criuVersion, err = criu.GetCriuVersion()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"CRIU version check failed: %w\", err)\n\t}\n\n\treturn compareCriuVersion(c.criuVersion, minVersion)\n}\n\nconst descriptorsFilename = \"descriptors.json\"\n\nfunc (c *Container) addCriuDumpMount(req *criurpc.CriuReq, m *configs.Mount) {\n\tmountDest := strings.TrimPrefix(m.Destination, c.config.Rootfs)\n\tif dest, err := securejoin.SecureJoin(c.config.Rootfs, mountDest); err == nil {\n\t\tmountDest = dest[len(c.config.Rootfs):]\n\t}\n\textMnt := &criurpc.ExtMountMap{\n\t\tKey: proto.String(mountDest),\n\t\tVal: proto.String(mountDest),\n\t}\n\treq.Opts.ExtMnt = append(req.Opts.ExtMnt, extMnt)\n}\n\nfunc (c *Container) addMaskPaths(req *criurpc.CriuReq) error {\n\tfor _, path := range c.config.MaskPaths {\n\t\tfi, err := os.Stat(fmt.Sprintf(\"/proc/%d/root/%s\", c.initProcess.pid(), path))\n\t\tif err != nil {\n\t\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\tif fi.IsDir() {\n\t\t\tcontinue\n\t\t}\n\n\t\textMnt := &criurpc.ExtMountMap{\n\t\t\tKey: proto.String(path),\n\t\t\tVal: proto.String(\"/dev/null\"),\n\t\t}\n\t\treq.Opts.ExtMnt = append(req.Opts.ExtMnt, extMnt)\n\t}\n\treturn nil\n}\n\nfunc (c *Container) handleCriuConfigurationFile(rpcOpts *criurpc.CriuOpts) {\n\t// CRIU will evaluate a configuration starting with release 3.11.\n\t// Settings in the configuration file will overwrite RPC settings.\n\t// Look for annotations. The annotation 'org.criu.config'\n\t// specifies if CRIU should use a different, container specific\n\t// configuration file.\n\tconfigFile, exists := utils.SearchLabels(c.config.Labels, \"org.criu.config\")\n\tif exists {\n\t\t// If the annotation 'org.criu.config' exists and is set\n\t\t// to a non-empty string, tell CRIU to use that as a\n\t\t// configuration file. If the file does not exist, CRIU\n\t\t// will just ignore it.\n\t\tif configFile != \"\" {\n\t\t\trpcOpts.ConfigFile = proto.String(configFile)\n\t\t}\n\t\t// If 'org.criu.config' exists and is set to an empty\n\t\t// string, a runc specific CRIU configuration file will\n\t\t// be not set at all.\n\t} else {\n\t\t// If the mentioned annotation has not been found, specify\n\t\t// a default CRIU configuration file.\n\t\trpcOpts.ConfigFile = proto.String(\"/etc/criu/runc.conf\")\n\t}\n}\n\nfunc (c *Container) criuSupportsExtNS(t configs.NamespaceType) bool {\n\tvar minVersion int\n\tswitch t {\n\tcase configs.NEWNET:\n\t\t// CRIU supports different external namespace with different released CRIU versions.\n\t\t// For network namespaces to work we need at least criu 3.11.0 => 31100.\n\t\tminVersion = 31100\n\tcase configs.NEWPID:\n\t\t// For PID namespaces criu 31500 is needed.\n\t\tminVersion = 31500\n\tdefault:\n\t\treturn false\n\t}\n\treturn c.checkCriuVersion(minVersion) == nil\n}\n\nfunc criuNsToKey(t configs.NamespaceType) string {\n\t// Construct \"extRoot\" + capitalize(nsName) + \"NS\" without allocations.\n\t// Result format: \"extRootNetNS\", \"extRootPidNS\", etc.\n\tnsName := configs.NsName(t)\n\tout := make([]byte, 0, 32)\n\tout = append(out, \"extRoot\"...)\n\t// Capitalize the first character (this assumes it's in the a-z range).\n\tif len(nsName) > 0 {\n\t\tout = append(out, byte(unicode.ToUpper(rune(nsName[0]))))\n\t\tout = append(out, nsName[1:]...)\n\t}\n\tout = append(out, \"NS\"...)\n\n\treturn string(out)\n}\n\nfunc (c *Container) handleCheckpointingExternalNamespaces(rpcOpts *criurpc.CriuOpts, t configs.NamespaceType) error {\n\tif !c.criuSupportsExtNS(t) {\n\t\treturn fmt.Errorf(\"criu lacks support for external %s namespace during checkpointing process (old criu version?)\", configs.NsName(t))\n\t}\n\n\tnsPath := c.config.Namespaces.PathOf(t)\n\tif nsPath == \"\" {\n\t\treturn nil\n\t}\n\t// CRIU expects the information about an external namespace\n\t// like this: --external <TYPE>[<inode>]:<key>\n\t// This <key> is always 'extRoot<TYPE>NS'.\n\tvar ns unix.Stat_t\n\tif err := unix.Stat(nsPath, &ns); err != nil {\n\t\treturn err\n\t}\n\tcriuExternal := fmt.Sprintf(\"%s[%d]:%s\", configs.NsName(t), ns.Ino, criuNsToKey(t))\n\trpcOpts.External = append(rpcOpts.External, criuExternal)\n\n\treturn nil\n}\n\nfunc (c *Container) handleRestoringNamespaces(rpcOpts *criurpc.CriuOpts, extraFiles *[]*os.File) error {\n\tfor _, ns := range c.config.Namespaces {\n\t\tswitch ns.Type {\n\t\tcase configs.NEWNET, configs.NEWPID:\n\t\t\t// If the container is running in a network or PID namespace and has\n\t\t\t// a path to the network or PID namespace configured, we will dump\n\t\t\t// that network or PID namespace as an external namespace and we\n\t\t\t// will expect that the namespace exists during restore.\n\t\t\t// This basically means that CRIU will ignore the namespace\n\t\t\t// and expect it to be setup correctly.\n\t\t\tif err := c.handleRestoringExternalNamespaces(rpcOpts, extraFiles, ns.Type); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tdefault:\n\t\t\t// For all other namespaces except NET and PID CRIU has\n\t\t\t// a simpler way of joining the existing namespace if set\n\t\t\tnsPath := c.config.Namespaces.PathOf(ns.Type)\n\t\t\tif nsPath == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif ns.Type == configs.NEWCGROUP {\n\t\t\t\t// CRIU has no code to handle NEWCGROUP\n\t\t\t\treturn fmt.Errorf(\"Do not know how to handle namespace %v\", ns.Type)\n\t\t\t}\n\t\t\t// CRIU has code to handle NEWTIME, but it does not seem to be defined in runc\n\n\t\t\t// CRIU will issue a warning for NEWUSER:\n\t\t\t// criu/namespaces.c: 'join-ns with user-namespace is not fully tested and dangerous'\n\t\t\trpcOpts.JoinNs = append(rpcOpts.JoinNs, &criurpc.JoinNamespace{\n\t\t\t\tNs:     proto.String(configs.NsName(ns.Type)),\n\t\t\t\tNsFile: proto.String(nsPath),\n\t\t\t})\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (c *Container) handleRestoringExternalNamespaces(rpcOpts *criurpc.CriuOpts, extraFiles *[]*os.File, t configs.NamespaceType) error {\n\tif !c.criuSupportsExtNS(t) {\n\t\treturn fmt.Errorf(\"criu lacks support for external %s namespace during the restoration process (old criu version?)\", configs.NsName(t))\n\t}\n\n\tnsPath := c.config.Namespaces.PathOf(t)\n\tif nsPath == \"\" {\n\t\treturn nil\n\t}\n\t// CRIU wants the information about an existing namespace\n\t// like this: --inherit-fd fd[<fd>]:<key>\n\t// The <key> needs to be the same as during checkpointing.\n\t// We are always using 'extRoot<TYPE>NS' as the key in this.\n\tnsFd, err := os.Open(nsPath)\n\tif err != nil {\n\t\tlogrus.Errorf(\"If a specific network namespace is defined it must exist: %s\", err)\n\t\treturn fmt.Errorf(\"Requested network namespace %v does not exist\", nsPath)\n\t}\n\tinheritFd := &criurpc.InheritFd{\n\t\tKey: proto.String(criuNsToKey(t)),\n\t\t// The offset of four is necessary because 0, 1, 2 and 3 are\n\t\t// already used by stdin, stdout, stderr, 'criu swrk' socket.\n\t\tFd: proto.Int32(int32(4 + len(*extraFiles))),\n\t}\n\trpcOpts.InheritFd = append(rpcOpts.InheritFd, inheritFd)\n\t// All open FDs need to be transferred to CRIU via extraFiles\n\t*extraFiles = append(*extraFiles, nsFd)\n\n\treturn nil\n}\n\nfunc (c *Container) Checkpoint(criuOpts *CriuOpts) error {\n\tconst logFile = \"dump.log\"\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\n\t// Checkpoint is unlikely to work if os.Geteuid() != 0 || system.RunningInUserNS().\n\t// (CLI prints a warning)\n\t// TODO(avagin): Figure out how to make this work nicely. CRIU 2.0 has\n\t//               support for doing unprivileged dumps, but the setup of\n\t//               rootless containers might make this complicated.\n\n\t// We are relying on the CRIU version RPC which was introduced with CRIU 3.0.0\n\tif err := c.checkCriuVersion(30000); err != nil {\n\t\treturn err\n\t}\n\n\tif criuOpts.ImagesDirectory == \"\" {\n\t\treturn errors.New(\"invalid directory to save checkpoint\")\n\t}\n\n\tcgMode, err := criuCgMode(criuOpts.ManageCgroupsMode)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Since a container can be C/R'ed multiple times,\n\t// the checkpoint directory may already exist.\n\tif err := os.Mkdir(criuOpts.ImagesDirectory, 0o700); err != nil && !errors.Is(err, os.ErrExist) {\n\t\treturn err\n\t}\n\n\tlogDir := criuOpts.ImagesDirectory\n\timageDir, err := os.Open(criuOpts.ImagesDirectory)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer imageDir.Close()\n\n\trpcOpts := criurpc.CriuOpts{\n\t\tImagesDirFd:       proto.Int32(int32(imageDir.Fd())),\n\t\tLogLevel:          proto.Int32(4),\n\t\tLogFile:           proto.String(logFile),\n\t\tRoot:              proto.String(c.config.Rootfs),\n\t\tManageCgroups:     proto.Bool(true), // Obsoleted by ManageCgroupsMode.\n\t\tManageCgroupsMode: &cgMode,\n\t\tNotifyScripts:     proto.Bool(true),\n\t\tPid:               proto.Int32(int32(c.initProcess.pid())),\n\t\tShellJob:          proto.Bool(criuOpts.ShellJob),\n\t\tLeaveRunning:      proto.Bool(criuOpts.LeaveRunning),\n\t\tTcpEstablished:    proto.Bool(criuOpts.TcpEstablished),\n\t\tTcpSkipInFlight:   proto.Bool(criuOpts.TcpSkipInFlight),\n\t\tLinkRemap:         proto.Bool(criuOpts.LinkRemap),\n\t\tExtUnixSk:         proto.Bool(criuOpts.ExternalUnixConnections),\n\t\tFileLocks:         proto.Bool(criuOpts.FileLocks),\n\t\tEmptyNs:           proto.Uint32(criuOpts.EmptyNs),\n\t\tOrphanPtsMaster:   proto.Bool(true),\n\t\tAutoDedup:         proto.Bool(criuOpts.AutoDedup),\n\t\tLazyPages:         proto.Bool(criuOpts.LazyPages),\n\t}\n\n\t// if criuOpts.WorkDirectory is not set, criu default is used.\n\tif criuOpts.WorkDirectory != \"\" {\n\t\tif err := os.Mkdir(criuOpts.WorkDirectory, 0o700); err != nil && !errors.Is(err, os.ErrExist) {\n\t\t\treturn err\n\t\t}\n\t\tworkDir, err := os.Open(criuOpts.WorkDirectory)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer workDir.Close()\n\t\trpcOpts.WorkDirFd = proto.Int32(int32(workDir.Fd()))\n\t\tlogDir = criuOpts.WorkDirectory\n\t}\n\n\tc.handleCriuConfigurationFile(&rpcOpts)\n\n\t// If the container is running in a network namespace and has\n\t// a path to the network namespace configured, we will dump\n\t// that network namespace as an external namespace and we\n\t// will expect that the namespace exists during restore.\n\t// This basically means that CRIU will ignore the namespace\n\t// and expect to be setup correctly.\n\tif err := c.handleCheckpointingExternalNamespaces(&rpcOpts, configs.NEWNET); err != nil {\n\t\treturn err\n\t}\n\n\t// Same for possible external PID namespaces\n\tif err := c.handleCheckpointingExternalNamespaces(&rpcOpts, configs.NEWPID); err != nil {\n\t\treturn err\n\t}\n\n\t// CRIU can use cgroup freezer; when rpcOpts.FreezeCgroup\n\t// is not set, CRIU uses ptrace() to pause the processes.\n\t// Note cgroup v2 freezer is only supported since CRIU release 3.14.\n\tif !cgroups.IsCgroup2UnifiedMode() || c.checkCriuVersion(31400) == nil {\n\t\tif fcg := c.cgroupManager.Path(\"freezer\"); fcg != \"\" {\n\t\t\trpcOpts.FreezeCgroup = proto.String(fcg)\n\t\t}\n\t}\n\n\t// append optional criu opts, e.g., page-server and port\n\tif criuOpts.PageServer.Address != \"\" && criuOpts.PageServer.Port != 0 {\n\t\trpcOpts.Ps = &criurpc.CriuPageServerInfo{\n\t\t\tAddress: proto.String(criuOpts.PageServer.Address),\n\t\t\tPort:    proto.Int32(criuOpts.PageServer.Port),\n\t\t}\n\t}\n\n\t// pre-dump may need parentImage param to complete iterative migration\n\tif criuOpts.ParentImage != \"\" {\n\t\trpcOpts.ParentImg = proto.String(criuOpts.ParentImage)\n\t\trpcOpts.TrackMem = proto.Bool(true)\n\t}\n\n\tvar t criurpc.CriuReqType\n\tif criuOpts.PreDump {\n\t\tfeat := criurpc.CriuFeatures{\n\t\t\tMemTrack: proto.Bool(true),\n\t\t}\n\n\t\tif err := c.checkCriuFeatures(criuOpts, &feat); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tt = criurpc.CriuReqType_PRE_DUMP\n\t} else {\n\t\tt = criurpc.CriuReqType_DUMP\n\t}\n\n\tif criuOpts.LazyPages {\n\t\t// lazy migration requested; check if criu supports it\n\t\tfeat := criurpc.CriuFeatures{\n\t\t\tLazyPages: proto.Bool(true),\n\t\t}\n\t\tif err := c.checkCriuFeatures(criuOpts, &feat); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif fd := criuOpts.StatusFd; fd != -1 {\n\t\t\t// check that the FD is valid\n\t\t\tflags, err := unix.FcntlInt(uintptr(fd), unix.F_GETFL, 0)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"invalid --status-fd argument %d: %w\", fd, err)\n\t\t\t}\n\t\t\t// and writable\n\t\t\tif flags&unix.O_WRONLY == 0 {\n\t\t\t\treturn fmt.Errorf(\"invalid --status-fd argument %d: not writable\", fd)\n\t\t\t}\n\n\t\t\tif c.checkCriuVersion(31500) != nil {\n\t\t\t\t// For criu 3.15+, use notifications (see case \"status-ready\"\n\t\t\t\t// in criuNotifications). Otherwise, rely on criu status fd.\n\t\t\t\trpcOpts.StatusFd = proto.Int32(int32(fd))\n\t\t\t}\n\t\t}\n\t}\n\n\treq := &criurpc.CriuReq{\n\t\tType: &t,\n\t\tOpts: &rpcOpts,\n\t}\n\n\t// no need to dump all this in pre-dump\n\tif !criuOpts.PreDump {\n\t\thasCgroupns := c.config.Namespaces.Contains(configs.NEWCGROUP)\n\t\tfor _, m := range c.config.Mounts {\n\t\t\tswitch m.Device {\n\t\t\tcase \"bind\":\n\t\t\t\tc.addCriuDumpMount(req, m)\n\t\t\tcase \"cgroup\":\n\t\t\t\tif cgroups.IsCgroup2UnifiedMode() || hasCgroupns {\n\t\t\t\t\t// real mount(s)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t// a set of \"external\" bind mounts\n\t\t\t\tbinds, err := getCgroupMounts(m)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tfor _, b := range binds {\n\t\t\t\t\tc.addCriuDumpMount(req, b)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif err := c.addMaskPaths(req); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tfor _, node := range c.config.Devices {\n\t\t\tm := &configs.Mount{Destination: node.Path, Source: node.Path}\n\t\t\tc.addCriuDumpMount(req, m)\n\t\t}\n\n\t\t// Write the FD info to a file in the image directory\n\t\tfdsJSON, err := json.Marshal(c.initProcess.externalDescriptors())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\terr = os.WriteFile(filepath.Join(criuOpts.ImagesDirectory, descriptorsFilename), fdsJSON, 0o600)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\terr = c.criuSwrk(nil, req, criuOpts, nil)\n\tif err != nil {\n\t\tlogCriuErrors(logDir, logFile)\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (c *Container) addCriuRestoreMount(req *criurpc.CriuReq, m *configs.Mount) {\n\tmountDest := strings.TrimPrefix(m.Destination, c.config.Rootfs)\n\tif dest, err := securejoin.SecureJoin(c.config.Rootfs, mountDest); err == nil {\n\t\tmountDest = dest[len(c.config.Rootfs):]\n\t}\n\textMnt := &criurpc.ExtMountMap{\n\t\tKey: proto.String(mountDest),\n\t\tVal: proto.String(m.Source),\n\t}\n\treq.Opts.ExtMnt = append(req.Opts.ExtMnt, extMnt)\n}\n\nfunc (c *Container) restoreNetwork(req *criurpc.CriuReq, criuOpts *CriuOpts) {\n\tfor _, iface := range c.config.Networks {\n\t\tswitch iface.Type {\n\t\tcase \"veth\":\n\t\t\tveth := new(criurpc.CriuVethPair)\n\t\t\tveth.IfOut = proto.String(iface.HostInterfaceName)\n\t\t\tveth.IfIn = proto.String(iface.Name)\n\t\t\treq.Opts.Veths = append(req.Opts.Veths, veth)\n\t\tcase \"loopback\":\n\t\t\t// Do nothing\n\t\t}\n\t}\n\tfor _, i := range criuOpts.VethPairs {\n\t\tveth := new(criurpc.CriuVethPair)\n\t\tveth.IfOut = proto.String(i.HostInterfaceName)\n\t\tveth.IfIn = proto.String(i.ContainerInterfaceName)\n\t\treq.Opts.Veths = append(req.Opts.Veths, veth)\n\t}\n}\n\nfunc isOnTmpfs(path string, mounts []*configs.Mount) bool {\n\tfor _, m := range mounts {\n\t\tif m.Device == \"tmpfs\" && strings.HasPrefix(path, m.Destination+\"/\") {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// prepareCriuRestoreMounts tries to set up the rootfs of the\n// container to be restored in the same way runc does it for\n// initial container creation. Even for a read-only rootfs container\n// runc modifies the rootfs to add mountpoints which do not exist.\n// This function also creates missing mountpoints as long as they\n// are not on top of a tmpfs, as CRIU will restore tmpfs content anyway.\nfunc (c *Container) prepareCriuRestoreMounts(mounts []*configs.Mount) error {\n\tumounts := []string{}\n\tdefer func() {\n\t\tfor _, u := range umounts {\n\t\t\tmntFile, err := pathrs.OpenInRoot(c.config.Rootfs, u, unix.O_PATH)\n\t\t\tif err != nil {\n\t\t\t\tlogrus.Warnf(\"Error during cleanup unmounting %s: open handle: %v\", u, err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t_ = utils.WithProcfdFile(mntFile, func(procfd string) error {\n\t\t\t\tif err := unix.Unmount(procfd, unix.MNT_DETACH); err != nil {\n\t\t\t\t\tif err != unix.EINVAL {\n\t\t\t\t\t\t// Ignore EINVAL as it means 'target is not a mount point.'\n\t\t\t\t\t\t// It probably has already been unmounted.\n\t\t\t\t\t\tlogrus.Warnf(\"Error during cleanup unmounting of %s (%s): %v\", procfd, u, err)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn nil\n\t\t\t})\n\t\t\t_ = mntFile.Close()\n\t\t}\n\t}()\n\t// Now go through all mounts and create the required mountpoints.\n\tfor _, m := range mounts {\n\t\t// No cgroup mount point(s) need to be created:\n\t\t// * for v1, mount points are saved by CRIU because\n\t\t//   /sys/fs/cgroup is a tmpfs mount;\n\t\t// * for v2, /sys/fs/cgroup is a real mount, but\n\t\t//   the mountpoint appears as soon as /sys is mounted.\n\t\tif m.Device == \"cgroup\" {\n\t\t\tcontinue\n\t\t}\n\t\t// If the mountpoint is on a tmpfs, skip it as CRIU will\n\t\t// restore the complete tmpfs content from its checkpoint.\n\t\tif isOnTmpfs(m.Destination, mounts) {\n\t\t\tcontinue\n\t\t}\n\t\tme := mountEntry{Mount: m}\n\t\tif err := me.createOpenMountpoint(c.config.Rootfs); err != nil {\n\t\t\treturn fmt.Errorf(\"create criu restore mountpoint for %s mount: %w\", me.Destination, err)\n\t\t}\n\t\tif me.dstFile != nil {\n\t\t\tdefer me.dstFile.Close()\n\t\t}\n\t\t// If the mount point is a bind mount, we need to mount\n\t\t// it now so that runc can create the necessary mount\n\t\t// points for mounts in bind mounts.\n\t\t// This also happens during initial container creation.\n\t\t// Without this CRIU restore will fail\n\t\t// See: https://github.com/opencontainers/runc/issues/2748\n\t\t// It is also not necessary to order the mount points\n\t\t// because during initial container creation mounts are\n\t\t// set up in the order they are configured.\n\t\tif m.Device == \"bind\" {\n\t\t\tif err := utils.WithProcfdFile(me.dstFile, func(dstFd string) error {\n\t\t\t\treturn mountViaFds(m.Source, nil, m.Destination, dstFd, \"\", unix.MS_BIND|unix.MS_REC, \"\")\n\t\t\t}); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tumounts = append(umounts, m.Destination)\n\t\t}\n\t\tif me.dstFile != nil {\n\t\t\t// As this is being done in a loop, the defer earlier will be\n\t\t\t// delayed until all mountpoints are handled -- for a config with\n\t\t\t// many mountpoints this could result in a lot of open files. So we\n\t\t\t// opportunistically close the file as well as deferring it.\n\t\t\t_ = me.dstFile.Close()\n\t\t}\n\t}\n\treturn nil\n}\n\n// Restore restores the checkpointed container to a running state using the\n// criu(8) utility.\nfunc (c *Container) Restore(process *Process, criuOpts *CriuOpts) error {\n\tconst logFile = \"restore.log\"\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\n\tvar extraFiles []*os.File\n\n\t// Restore is unlikely to work if os.Geteuid() != 0 || system.RunningInUserNS().\n\t// (CLI prints a warning)\n\t// TODO(avagin): Figure out how to make this work nicely. CRIU doesn't have\n\t//               support for unprivileged restore at the moment.\n\n\t// We are relying on the CRIU version RPC which was introduced with CRIU 3.0.0\n\tif err := c.checkCriuVersion(30000); err != nil {\n\t\treturn err\n\t}\n\tif criuOpts.ImagesDirectory == \"\" {\n\t\treturn errors.New(\"invalid directory to restore checkpoint\")\n\t}\n\n\tcgMode, err := criuCgMode(criuOpts.ManageCgroupsMode)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tlogDir := criuOpts.ImagesDirectory\n\timageDir, err := os.Open(criuOpts.ImagesDirectory)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer imageDir.Close()\n\t// CRIU has a few requirements for a root directory:\n\t// * it must be a mount point\n\t// * its parent must not be overmounted\n\t// c.config.Rootfs is bind-mounted to a temporary directory\n\t// to satisfy these requirements.\n\troot := filepath.Join(c.stateDir, \"criu-root\")\n\tif err := os.Mkdir(root, 0o755); err != nil {\n\t\treturn err\n\t}\n\tdefer os.Remove(root)\n\troot, err = filepath.EvalSymlinks(root)\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = mount(c.config.Rootfs, root, \"\", unix.MS_BIND|unix.MS_REC, \"\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer unix.Unmount(root, unix.MNT_DETACH) //nolint: errcheck\n\tt := criurpc.CriuReqType_RESTORE\n\treq := &criurpc.CriuReq{\n\t\tType: &t,\n\t\tOpts: &criurpc.CriuOpts{\n\t\t\tImagesDirFd:       proto.Int32(int32(imageDir.Fd())),\n\t\t\tEvasiveDevices:    proto.Bool(true),\n\t\t\tLogLevel:          proto.Int32(4),\n\t\t\tLogFile:           proto.String(logFile),\n\t\t\tRstSibling:        proto.Bool(true),\n\t\t\tRoot:              proto.String(root),\n\t\t\tManageCgroups:     proto.Bool(true), // Obsoleted by ManageCgroupsMode.\n\t\t\tManageCgroupsMode: &cgMode,\n\t\t\tNotifyScripts:     proto.Bool(true),\n\t\t\tShellJob:          proto.Bool(criuOpts.ShellJob),\n\t\t\tExtUnixSk:         proto.Bool(criuOpts.ExternalUnixConnections),\n\t\t\tTcpEstablished:    proto.Bool(criuOpts.TcpEstablished),\n\t\t\tFileLocks:         proto.Bool(criuOpts.FileLocks),\n\t\t\tEmptyNs:           proto.Uint32(criuOpts.EmptyNs),\n\t\t\tOrphanPtsMaster:   proto.Bool(true),\n\t\t\tAutoDedup:         proto.Bool(criuOpts.AutoDedup),\n\t\t\tLazyPages:         proto.Bool(criuOpts.LazyPages),\n\t\t},\n\t}\n\n\tif criuOpts.LsmProfile != \"\" {\n\t\t// CRIU older than 3.16 has a bug which breaks the possibility\n\t\t// to set a different LSM profile.\n\t\tif err := c.checkCriuVersion(31600); err != nil {\n\t\t\treturn errors.New(\"--lsm-profile requires at least CRIU 3.16\")\n\t\t}\n\t\treq.Opts.LsmProfile = proto.String(criuOpts.LsmProfile)\n\t}\n\tif criuOpts.LsmMountContext != \"\" {\n\t\tif err := c.checkCriuVersion(31600); err != nil {\n\t\t\treturn errors.New(\"--lsm-mount-context requires at least CRIU 3.16\")\n\t\t}\n\t\treq.Opts.LsmMountContext = proto.String(criuOpts.LsmMountContext)\n\t}\n\n\tif criuOpts.WorkDirectory != \"\" {\n\t\t// Since a container can be C/R'ed multiple times,\n\t\t// the work directory may already exist.\n\t\tif err := os.Mkdir(criuOpts.WorkDirectory, 0o700); err != nil && !errors.Is(err, os.ErrExist) {\n\t\t\treturn err\n\t\t}\n\t\tworkDir, err := os.Open(criuOpts.WorkDirectory)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer workDir.Close()\n\t\treq.Opts.WorkDirFd = proto.Int32(int32(workDir.Fd()))\n\t\tlogDir = criuOpts.WorkDirectory\n\t}\n\tc.handleCriuConfigurationFile(req.Opts)\n\n\tif err := c.handleRestoringNamespaces(req.Opts, &extraFiles); err != nil {\n\t\treturn err\n\t}\n\n\t// This will modify the rootfs of the container in the same way runc\n\t// modifies the container during initial creation.\n\tif err := c.prepareCriuRestoreMounts(c.config.Mounts); err != nil {\n\t\treturn err\n\t}\n\n\thasCgroupns := c.config.Namespaces.Contains(configs.NEWCGROUP)\n\tfor _, m := range c.config.Mounts {\n\t\tswitch m.Device {\n\t\tcase \"bind\":\n\t\t\tc.addCriuRestoreMount(req, m)\n\t\tcase \"cgroup\":\n\t\t\tif cgroups.IsCgroup2UnifiedMode() || hasCgroupns {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// cgroup v1 is a set of bind mounts, unless cgroupns is used\n\t\t\tbinds, err := getCgroupMounts(m)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tfor _, b := range binds {\n\t\t\t\tc.addCriuRestoreMount(req, b)\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(c.config.MaskPaths) > 0 {\n\t\tm := &configs.Mount{Destination: \"/dev/null\", Source: \"/dev/null\"}\n\t\tc.addCriuRestoreMount(req, m)\n\t}\n\n\tfor _, node := range c.config.Devices {\n\t\tm := &configs.Mount{Destination: node.Path, Source: node.Path}\n\t\tc.addCriuRestoreMount(req, m)\n\t}\n\n\tif criuOpts.EmptyNs&unix.CLONE_NEWNET == 0 {\n\t\tc.restoreNetwork(req, criuOpts)\n\t}\n\n\tvar (\n\t\tfds    []string\n\t\tfdJSON []byte\n\t)\n\tif fdJSON, err = os.ReadFile(filepath.Join(criuOpts.ImagesDirectory, descriptorsFilename)); err != nil {\n\t\treturn err\n\t}\n\n\tif err := json.Unmarshal(fdJSON, &fds); err != nil {\n\t\treturn err\n\t}\n\tfor i := range fds {\n\t\tif s := fds[i]; strings.Contains(s, \"pipe:\") {\n\t\t\tinheritFd := new(criurpc.InheritFd)\n\t\t\tinheritFd.Key = proto.String(s)\n\t\t\tinheritFd.Fd = proto.Int32(int32(i))\n\t\t\treq.Opts.InheritFd = append(req.Opts.InheritFd, inheritFd)\n\t\t}\n\t}\n\terr = c.criuSwrk(process, req, criuOpts, extraFiles)\n\tif err != nil {\n\t\tlogCriuErrors(logDir, logFile)\n\t}\n\n\t// Now that CRIU is done let's close all opened FDs CRIU needed.\n\tfor _, fd := range extraFiles {\n\t\tfd.Close()\n\t}\n\n\treturn err\n}\n\n// logCriuErrors tries to find and log errors from a criu log file.\n// The output is similar to what \"grep -n -B5 Error\" does.\nfunc logCriuErrors(dir, file string) {\n\tlookFor := []byte(\"Error\") // Print the line that contains this...\n\tconst max = 5 + 1          // ... and a few preceding lines.\n\n\tlogFile := filepath.Join(dir, file)\n\tf, err := os.Open(logFile)\n\tif err != nil {\n\t\tlogrus.Warn(err)\n\t\treturn\n\t}\n\tdefer f.Close()\n\n\tvar lines [max][]byte\n\tvar idx, lineNo, printedLineNo int\n\ts := bufio.NewScanner(f)\n\tfor s.Scan() {\n\t\tlineNo++\n\t\tlines[idx] = s.Bytes()\n\t\tidx = (idx + 1) % max\n\t\tif !bytes.Contains(s.Bytes(), lookFor) {\n\t\t\tcontinue\n\t\t}\n\t\t// Found an error.\n\t\tif printedLineNo == 0 {\n\t\t\tlogrus.Warnf(\"--- Quoting %q\", logFile)\n\t\t} else if lineNo-max > printedLineNo {\n\t\t\t// Mark the gap.\n\t\t\tlogrus.Warn(\"...\")\n\t\t}\n\t\t// Print the last lines.\n\t\tfor add := range max {\n\t\t\ti := (idx + add) % max\n\t\t\ts := lines[i]\n\t\t\tactLineNo := lineNo + add - max + 1\n\t\t\tif len(s) > 0 && actLineNo > printedLineNo {\n\t\t\t\tlogrus.Warnf(\"%d:%s\", actLineNo, s)\n\t\t\t\tprintedLineNo = actLineNo\n\t\t\t}\n\t\t}\n\t}\n\tif printedLineNo != 0 {\n\t\tlogrus.Warn(\"---\") // End of \"Quoting ...\".\n\t}\n\tif err := s.Err(); err != nil {\n\t\tlogrus.Warnf(\"read %q: %v\", logFile, err)\n\t}\n}\n\nfunc (c *Container) criuApplyCgroups(pid int, req *criurpc.CriuReq) error {\n\t// need to apply cgroups only on restore\n\tif req.GetType() != criurpc.CriuReqType_RESTORE {\n\t\treturn nil\n\t}\n\n\t// XXX: Do we need to deal with this case? AFAIK criu still requires root.\n\tif err := c.cgroupManager.Apply(pid); err != nil {\n\t\treturn err\n\t}\n\n\tif err := c.cgroupManager.Set(c.config.Cgroups.Resources); err != nil {\n\t\treturn err\n\t}\n\n\t// TODO(@kolyshkin): should we use c.cgroupManager.GetPaths()\n\t// instead of reading /proc/pid/cgroup?\n\tpath := fmt.Sprintf(\"/proc/%d/cgroup\", pid)\n\tcgroupsPaths, err := cgroups.ParseCgroupFile(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor c, p := range cgroupsPaths {\n\t\tcgroupRoot := &criurpc.CgroupRoot{\n\t\t\tCtrl: proto.String(c),\n\t\t\tPath: proto.String(p),\n\t\t}\n\t\treq.Opts.CgRoot = append(req.Opts.CgRoot, cgroupRoot)\n\t}\n\n\treturn nil\n}\n\nfunc (c *Container) criuSwrk(process *Process, req *criurpc.CriuReq, opts *CriuOpts, extraFiles []*os.File) error {\n\tfds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_SEQPACKET|unix.SOCK_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcriuClient := os.NewFile(uintptr(fds[0]), \"criu-transport-client\")\n\tcriuClientFileCon, err := net.FileConn(criuClient)\n\tcriuClient.Close()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcriuClientCon := criuClientFileCon.(*net.UnixConn)\n\tdefer criuClientCon.Close()\n\n\tcriuServer := os.NewFile(uintptr(fds[1]), \"criu-transport-server\")\n\tdefer criuServer.Close()\n\n\tif c.criuVersion != 0 {\n\t\t// If the CRIU Version is still '0' then this is probably\n\t\t// the initial CRIU run to detect the version. Skip it.\n\t\tlogrus.Debugf(\"Using CRIU %d\", c.criuVersion)\n\t}\n\tcmd := exec.Command(\"criu\", \"swrk\", \"3\")\n\tif process != nil {\n\t\tcmd.Stdin = process.Stdin\n\t\tcmd.Stdout = process.Stdout\n\t\tcmd.Stderr = process.Stderr\n\t}\n\tcmd.ExtraFiles = append(cmd.ExtraFiles, criuServer)\n\tif extraFiles != nil {\n\t\tcmd.ExtraFiles = append(cmd.ExtraFiles, extraFiles...)\n\t}\n\n\tif err := cmd.Start(); err != nil {\n\t\treturn err\n\t}\n\t// we close criuServer so that even if CRIU crashes or unexpectedly exits, runc will not hang.\n\tcriuServer.Close()\n\t// cmd.Process will be replaced by a restored init.\n\tcriuProcess := cmd.Process\n\n\tvar criuProcessState *os.ProcessState\n\tdefer func() {\n\t\tif criuProcessState == nil {\n\t\t\tcriuClientCon.Close()\n\t\t\t_, err := criuProcess.Wait()\n\t\t\tif err != nil {\n\t\t\t\tlogrus.Warnf(\"wait on criuProcess returned %v\", err)\n\t\t\t}\n\t\t}\n\t}()\n\n\tif err := c.criuApplyCgroups(criuProcess.Pid, req); err != nil {\n\t\treturn err\n\t}\n\n\tvar extFds []string\n\tif process != nil {\n\t\textFds, err = getPipeFds(criuProcess.Pid)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tlogrus.Debugf(\"Using CRIU in %s mode\", req.GetType().String())\n\t// In the case of criurpc.CriuReqType_FEATURE_CHECK req.GetOpts()\n\t// should be empty. For older CRIU versions it still will be\n\t// available but empty. criurpc.CriuReqType_VERSION actually\n\t// has no req.GetOpts().\n\tif logrus.GetLevel() >= logrus.DebugLevel &&\n\t\t(req.GetType() != criurpc.CriuReqType_FEATURE_CHECK &&\n\t\t\treq.GetType() != criurpc.CriuReqType_VERSION) {\n\n\t\tval := reflect.ValueOf(req.GetOpts())\n\t\tv := reflect.Indirect(val)\n\t\tfor i := range v.NumField() {\n\t\t\tst := v.Type()\n\t\t\tname := st.Field(i).Name\n\t\t\tif 'A' <= name[0] && name[0] <= 'Z' {\n\t\t\t\tvalue := val.MethodByName(\"Get\" + name).Call([]reflect.Value{})\n\t\t\t\tlogrus.Debugf(\"CRIU option %s with value %v\", name, value[0])\n\t\t\t}\n\t\t}\n\t}\n\tdata, err := proto.Marshal(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = criuClientCon.Write(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbuf := make([]byte, 10*4096)\n\toob := make([]byte, 4096)\n\tfor {\n\t\tn, oobn, _, _, err := criuClientCon.ReadMsgUnix(buf, oob)\n\t\tif req.Opts != nil && req.Opts.StatusFd != nil {\n\t\t\t// Close status_fd as soon as we got something back from criu,\n\t\t\t// assuming it has consumed (reopened) it by this time.\n\t\t\t// Otherwise it will might be left open forever and whoever\n\t\t\t// is waiting on it will wait forever.\n\t\t\tfd := int(*req.Opts.StatusFd)\n\t\t\t_ = unix.Close(fd)\n\t\t\treq.Opts.StatusFd = nil\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif n == 0 {\n\t\t\treturn errors.New(\"unexpected EOF\")\n\t\t}\n\t\tif n == len(buf) {\n\t\t\treturn errors.New(\"buffer is too small\")\n\t\t}\n\n\t\tresp := new(criurpc.CriuResp)\n\t\terr = proto.Unmarshal(buf[:n], resp)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tt := resp.GetType()\n\t\tif !resp.GetSuccess() {\n\t\t\treturn fmt.Errorf(\"criu failed: type %s errno %d\", t, resp.GetCrErrno())\n\t\t}\n\n\t\tswitch t {\n\t\tcase criurpc.CriuReqType_FEATURE_CHECK:\n\t\t\tlogrus.Debugf(\"Feature check says: %s\", resp)\n\t\t\tcriuFeatures = resp.GetFeatures()\n\t\tcase criurpc.CriuReqType_NOTIFY:\n\t\t\tif err := c.criuNotifications(resp, process, cmd, opts, extFds, oob[:oobn]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treq = &criurpc.CriuReq{\n\t\t\t\tType:          &t,\n\t\t\t\tNotifySuccess: proto.Bool(true),\n\t\t\t}\n\t\t\tdata, err = proto.Marshal(req)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t_, err = criuClientCon.Write(data)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tcontinue\n\t\tcase criurpc.CriuReqType_RESTORE:\n\t\tcase criurpc.CriuReqType_DUMP:\n\t\tcase criurpc.CriuReqType_PRE_DUMP:\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unable to parse the response %s\", resp.String())\n\t\t}\n\n\t\tbreak\n\t}\n\n\t_ = criuClientCon.CloseWrite()\n\t// cmd.Wait() waits cmd.goroutines which are used for proxying file descriptors.\n\t// Here we want to wait only the CRIU process.\n\tcriuProcessState, err = criuProcess.Wait()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// In pre-dump mode CRIU is in a loop and waits for\n\t// the final DUMP command.\n\t// The current runc pre-dump approach, however, is\n\t// start criu in PRE_DUMP once for a single pre-dump\n\t// and not the whole series of pre-dump, pre-dump, ...m, dump\n\t// If we got the message CriuReqType_PRE_DUMP it means\n\t// CRIU was successful and we need to forcefully stop CRIU\n\tif !criuProcessState.Success() && *req.Type != criurpc.CriuReqType_PRE_DUMP {\n\t\treturn fmt.Errorf(\"criu failed: %s\", criuProcessState)\n\t}\n\treturn nil\n}\n\n// lockNetwork blocks any external network activity.\nfunc lockNetwork(config *configs.Config) error {\n\tfor _, config := range config.Networks {\n\t\tstrategy, err := getStrategy(config.Type)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif err := strategy.detach(config); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc unlockNetwork(config *configs.Config) error {\n\tfor _, config := range config.Networks {\n\t\tstrategy, err := getStrategy(config.Type)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err = strategy.attach(config); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (c *Container) criuNotifications(resp *criurpc.CriuResp, process *Process, cmd *exec.Cmd, opts *CriuOpts, fds []string, oob []byte) error {\n\tnotify := resp.GetNotify()\n\tif notify == nil {\n\t\treturn fmt.Errorf(\"invalid response: %s\", resp.String())\n\t}\n\tscript := notify.GetScript()\n\tlogrus.Debugf(\"notify: %s\\n\", script)\n\tswitch script {\n\tcase \"post-dump\":\n\t\tf, err := os.Create(filepath.Join(c.stateDir, \"checkpoint\")) //nolint:forbidigo // this is a host-side operation in a runc-controlled directory\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tf.Close()\n\tcase \"network-unlock\":\n\t\tif err := unlockNetwork(c.config); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase \"network-lock\":\n\t\tif err := lockNetwork(c.config); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase \"setup-namespaces\":\n\t\tif c.config.HasHook(configs.Prestart, configs.CreateRuntime) {\n\t\t\ts, err := c.currentOCIState()\n\t\t\tif err != nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\ts.Pid = int(notify.GetPid())\n\n\t\t\tif err := c.config.Hooks.Run(configs.Prestart, s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif err := c.config.Hooks.Run(configs.CreateRuntime, s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\tcase \"post-restore\":\n\t\tpid := notify.GetPid()\n\n\t\tp, err := os.FindProcess(int(pid))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcmd.Process = p\n\n\t\tr, err := newRestoredProcess(cmd, fds)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprocess.ops = r\n\t\tif err := c.state.transition(&restoredState{\n\t\t\timageDir: opts.ImagesDirectory,\n\t\t\tc:        c,\n\t\t}); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// create a timestamp indicating when the restored checkpoint was started\n\t\tc.created = time.Now().UTC()\n\t\tif !c.config.Namespaces.Contains(configs.NEWTIME) &&\n\t\t\tconfigs.IsNamespaceSupported(configs.NEWTIME) &&\n\t\t\tc.checkCriuVersion(31400) == nil {\n\t\t\t// CRIU restores processes into a time namespace.\n\t\t\tc.config.Namespaces = append(c.config.Namespaces,\n\t\t\t\tconfigs.Namespace{Type: configs.NEWTIME})\n\t\t}\n\t\tif _, err := c.updateState(r); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := os.Remove(filepath.Join(c.stateDir, \"checkpoint\")); err != nil {\n\t\t\tif !errors.Is(err, os.ErrNotExist) {\n\t\t\t\tlogrus.Error(err)\n\t\t\t}\n\t\t}\n\tcase \"orphan-pts-master\":\n\t\tscm, err := unix.ParseSocketControlMessage(oob)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfds, err := unix.ParseUnixRights(&scm[0])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tmaster := os.NewFile(uintptr(fds[0]), \"orphan-pts-master\")\n\t\tdefer master.Close()\n\n\t\t// While we can access console.master, using the API is a good idea.\n\t\tif err := utils.SendFile(process.ConsoleSocket, master); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase \"status-ready\":\n\t\tif opts.StatusFd != -1 {\n\t\t\t// write \\0 to status fd to notify that lazy page server is ready\n\t\t\t_, err := unix.Write(opts.StatusFd, []byte{0})\n\t\t\tif err != nil {\n\t\t\t\tlogrus.Warnf(\"can't write \\\\0 to status fd: %v\", err)\n\t\t\t}\n\t\t\t_ = unix.Close(opts.StatusFd)\n\t\t\topts.StatusFd = -1\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc criuCgMode(mode string) (criurpc.CriuCgMode, error) {\n\tswitch mode {\n\tcase \"\":\n\t\treturn criurpc.CriuCgMode_DEFAULT, nil\n\tcase \"soft\":\n\t\treturn criurpc.CriuCgMode_SOFT, nil\n\tcase \"full\":\n\t\treturn criurpc.CriuCgMode_FULL, nil\n\tcase \"strict\":\n\t\treturn criurpc.CriuCgMode_STRICT, nil\n\tcase \"ignore\":\n\t\treturn criurpc.CriuCgMode_IGNORE, nil\n\tdefault:\n\t\treturn 0, errors.New(\"invalid manage-cgroups-mode value\")\n\t}\n}\n"
  },
  {
    "path": "libcontainer/criu_opts_linux.go",
    "content": "package libcontainer\n\ntype CriuPageServerInfo struct {\n\tAddress string // IP address of CRIU page server\n\tPort    int32  // port number of CRIU page server\n}\n\ntype VethPairName struct {\n\tContainerInterfaceName string\n\tHostInterfaceName      string\n}\n\ntype CriuOpts struct {\n\tImagesDirectory         string             // directory for storing image files\n\tWorkDirectory           string             // directory to cd and write logs/pidfiles/stats to\n\tParentImage             string             // directory for storing parent image files in pre-dump and dump\n\tLeaveRunning            bool               // leave container in running state after checkpoint\n\tTcpEstablished          bool               // checkpoint/restore established TCP connections\n\tTcpSkipInFlight         bool               // skip in-flight TCP connections\n\tLinkRemap               bool               // allow one to link unlinked files back when possible\n\tExternalUnixConnections bool               // allow external unix connections\n\tShellJob                bool               // allow to dump and restore shell jobs\n\tFileLocks               bool               // handle file locks, for safety\n\tPreDump                 bool               // call criu predump to perform iterative checkpoint\n\tPageServer              CriuPageServerInfo // allow to dump to criu page server\n\tVethPairs               []VethPairName     // pass the veth to criu when restore\n\tEmptyNs                 uint32             // don't c/r properties for namespace from this mask\n\tAutoDedup               bool               // auto deduplication for incremental dumps\n\tLazyPages               bool               // restore memory pages lazily using userfaultfd\n\tStatusFd                int                // fd for feedback when lazy server is ready\n\tLsmProfile              string             // LSM profile used to restore the container\n\tLsmMountContext         string             // LSM mount context value to use during restore\n\n\t// ManageCgroupsMode tells how criu should manage cgroups during\n\t// checkpoint or restore. Possible values are: \"soft\", \"full\",\n\t// \"strict\", \"ignore\", or \"\" (empty string) for criu default.\n\t// See https://criu.org/CGroups for more details.\n\tManageCgroupsMode string\n}\n"
  },
  {
    "path": "libcontainer/devices/device_unix.go",
    "content": "//go:build !windows\n\npackage devices\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/opencontainers/cgroups/devices/config\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// ErrNotADevice denotes that a file is not a valid linux device.\nvar ErrNotADevice = errors.New(\"not a device node\")\n\n// Testing dependencies\nvar (\n\tunixLstat = unix.Lstat\n\tosReadDir = os.ReadDir\n)\n\n// DeviceFromPath takes the path to a device and its cgroup_permissions (which\n// cannot be easily queried) to look up the information about a linux device\n// and returns that information as a Device struct.\nfunc DeviceFromPath(path, permissions string) (*config.Device, error) {\n\tvar stat unix.Stat_t\n\terr := unixLstat(path, &stat)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar (\n\t\tdevType   config.Type\n\t\tmode      = stat.Mode\n\t\tdevNumber = uint64(stat.Rdev) //nolint:unconvert // Rdev is uint32 on e.g. MIPS.\n\t\tmajor     = unix.Major(devNumber)\n\t\tminor     = unix.Minor(devNumber)\n\t)\n\tswitch mode & unix.S_IFMT {\n\tcase unix.S_IFBLK:\n\t\tdevType = config.BlockDevice\n\tcase unix.S_IFCHR:\n\t\tdevType = config.CharDevice\n\tcase unix.S_IFIFO:\n\t\tdevType = config.FifoDevice\n\tdefault:\n\t\treturn nil, ErrNotADevice\n\t}\n\treturn &config.Device{\n\t\tRule: config.Rule{\n\t\t\tType:        devType,\n\t\t\tMajor:       int64(major),\n\t\t\tMinor:       int64(minor),\n\t\t\tPermissions: config.Permissions(permissions),\n\t\t},\n\t\tPath:     path,\n\t\tFileMode: os.FileMode(mode &^ unix.S_IFMT),\n\t\tUid:      stat.Uid,\n\t\tGid:      stat.Gid,\n\t}, nil\n}\n\n// HostDevices returns all devices that can be found under /dev directory.\nfunc HostDevices() ([]*config.Device, error) {\n\treturn GetDevices(\"/dev\")\n}\n\n// GetDevices recursively traverses a directory specified by path\n// and returns all devices found there.\nfunc GetDevices(path string) ([]*config.Device, error) {\n\tfiles, err := osReadDir(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar out []*config.Device\n\tfor _, f := range files {\n\t\tswitch {\n\t\tcase f.IsDir():\n\t\t\tswitch f.Name() {\n\t\t\t// \".lxc\" & \".lxd-mounts\" added to address https://github.com/lxc/lxd/issues/2825\n\t\t\t// \".udev\" added to address https://github.com/opencontainers/runc/issues/2093\n\t\t\tcase \"pts\", \"shm\", \"fd\", \"mqueue\", \".lxc\", \".lxd-mounts\", \".udev\":\n\t\t\t\tcontinue\n\t\t\tdefault:\n\t\t\t\tsub, err := GetDevices(filepath.Join(path, f.Name()))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\n\t\t\t\tout = append(out, sub...)\n\t\t\t\tcontinue\n\t\t\t}\n\t\tcase f.Name() == \"console\":\n\t\t\tcontinue\n\t\t}\n\t\tdevice, err := DeviceFromPath(filepath.Join(path, f.Name()), \"rwm\")\n\t\tif err != nil {\n\t\t\tif errors.Is(err, ErrNotADevice) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\t\tif device.Type == config.FifoDevice {\n\t\t\tcontinue\n\t\t}\n\t\tout = append(out, device)\n\t}\n\treturn out, nil\n}\n"
  },
  {
    "path": "libcontainer/devices/device_unix_test.go",
    "content": "//go:build !windows\n\npackage devices\n\nimport (\n\t\"errors\"\n\t\"io/fs\"\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/opencontainers/cgroups/devices/config\"\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc cleanupTest() {\n\tunixLstat = unix.Lstat\n\tosReadDir = os.ReadDir\n}\n\nfunc TestDeviceFromPathLstatFailure(t *testing.T) {\n\ttestError := errors.New(\"test error\")\n\n\t// Override unix.Lstat to inject error.\n\tunixLstat = func(path string, stat *unix.Stat_t) error {\n\t\treturn testError\n\t}\n\tdefer cleanupTest()\n\n\t_, err := DeviceFromPath(\"\", \"\")\n\tif !errors.Is(err, testError) {\n\t\tt.Fatalf(\"Unexpected error %v, expected %v\", err, testError)\n\t}\n}\n\nfunc TestHostDevicesIoutilReadDirFailure(t *testing.T) {\n\ttestError := errors.New(\"test error\")\n\n\t// Override os.ReadDir to inject error.\n\tosReadDir = func(dirname string) ([]fs.DirEntry, error) {\n\t\treturn nil, testError\n\t}\n\tdefer cleanupTest()\n\n\t_, err := HostDevices()\n\tif !errors.Is(err, testError) {\n\t\tt.Fatalf(\"Unexpected error %v, expected %v\", err, testError)\n\t}\n}\n\nfunc TestHostDevicesIoutilReadDirDeepFailure(t *testing.T) {\n\ttestError := errors.New(\"test error\")\n\tcalled := false\n\n\t// Override os.ReadDir to inject error after the first call.\n\tosReadDir = func(dirname string) ([]fs.DirEntry, error) {\n\t\tif called {\n\t\t\treturn nil, testError\n\t\t}\n\t\tcalled = true\n\n\t\t// Provoke a second call.\n\t\tfi, err := os.Lstat(\"/tmp\")\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error %v\", err)\n\t\t}\n\n\t\treturn []fs.DirEntry{fs.FileInfoToDirEntry(fi)}, nil\n\t}\n\tdefer cleanupTest()\n\n\t_, err := HostDevices()\n\tif !errors.Is(err, testError) {\n\t\tt.Fatalf(\"Unexpected error %v, expected %v\", err, testError)\n\t}\n}\n\nfunc TestHostDevicesAllValid(t *testing.T) {\n\tdevices, err := HostDevices()\n\tif err != nil {\n\t\tt.Fatalf(\"failed to get host devices: %v\", err)\n\t}\n\n\tfor _, device := range devices {\n\t\t// Devices can't have major number 0.\n\t\tif device.Major == 0 {\n\t\t\tt.Errorf(\"device entry %+v has zero major number\", device)\n\t\t}\n\t\tswitch device.Type {\n\t\tcase config.BlockDevice, config.CharDevice:\n\t\tcase config.FifoDevice:\n\t\t\tt.Logf(\"fifo devices shouldn't show up from HostDevices\")\n\t\t\tfallthrough\n\t\tdefault:\n\t\t\tt.Errorf(\"device entry %+v has unexpected type %v\", device, device.Type)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "libcontainer/devices/doc.go",
    "content": "// Package devices provides some helper functions for constructing device\n// configurations for runc. These are exclusively used by higher-level runtimes\n// that need to configure runc's device list based on existing devices.\npackage devices\n"
  },
  {
    "path": "libcontainer/env.go",
    "content": "package libcontainer\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"slices\"\n\t\"strings\"\n\n\t\"github.com/moby/sys/user\"\n\t\"github.com/sirupsen/logrus\"\n)\n\n// prepareEnv processes a list of environment variables, preparing it\n// for direct consumption by unix.Exec. In particular, it:\n//   - validates each variable is in the NAME=VALUE format and\n//     contains no \\0 (nil) bytes;\n//   - removes any duplicates (keeping only the last value for each key)\n//   - sets PATH for the current process, if found in the list;\n//   - adds HOME to returned environment, if not found in the list,\n//     or the value is empty.\n//\n// Returns the prepared environment.\nfunc prepareEnv(env []string, uid int) ([]string, error) {\n\tif env == nil {\n\t\treturn nil, nil\n\t}\n\tvar homeIsSet bool\n\n\t// Deduplication code based on dedupEnv from Go 1.22 os/exec.\n\n\t// Construct the output in reverse order, to preserve the\n\t// last occurrence of each key.\n\tout := make([]string, 0, len(env))\n\tsaw := make(map[string]bool, len(env))\n\tfor n := len(env); n > 0; n-- {\n\t\tkv := env[n-1]\n\t\ti := strings.IndexByte(kv, '=')\n\t\tif i == -1 {\n\t\t\treturn nil, errors.New(\"invalid environment variable: missing '='\")\n\t\t}\n\t\tif i == 0 {\n\t\t\treturn nil, errors.New(\"invalid environment variable: name cannot be empty\")\n\t\t}\n\t\tkey := kv[:i]\n\t\tval := kv[i+1:]\n\t\tif saw[key] { // Duplicate.\n\t\t\tcontinue\n\t\t}\n\t\tsaw[key] = true\n\t\tif strings.IndexByte(kv, 0) >= 0 {\n\t\t\treturn nil, fmt.Errorf(\"invalid environment variable %q: contains nul byte (\\\\x00)\", key)\n\t\t}\n\t\tif key == \"PATH\" {\n\t\t\t// Needs to be set as it is used for binary lookup.\n\t\t\tif err := os.Setenv(\"PATH\", val); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\tif key == \"HOME\" {\n\t\t\tif val != \"\" {\n\t\t\t\thomeIsSet = true\n\t\t\t} else {\n\t\t\t\t// Don't add empty HOME to the environment, we will override it later.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tout = append(out, kv)\n\t}\n\t// Restore the original order.\n\tslices.Reverse(out)\n\n\t// If HOME is not found in env, get it from container's /etc/passwd and add.\n\tif !homeIsSet {\n\t\thome, err := getUserHome(uid)\n\t\tif err != nil {\n\t\t\t// For backward compatibility, don't return an error, but merely log it.\n\t\t\tlogrus.WithError(err).Debugf(\"HOME not set in process.env, and getting UID %d homedir failed\", uid)\n\t\t}\n\n\t\tout = append(out, \"HOME=\"+home)\n\t}\n\n\treturn out, nil\n}\n\nfunc getUserHome(uid int) (string, error) {\n\tconst defaultHome = \"/\" // Default value, return this with any error.\n\n\tu, err := user.LookupUid(uid)\n\tif err != nil {\n\t\t// ErrNoPasswdEntries is kinda expected as any UID can be specified.\n\t\tif errors.Is(err, user.ErrNoPasswdEntries) {\n\t\t\terr = nil\n\t\t}\n\t\treturn defaultHome, err\n\t}\n\n\treturn u.Home, nil\n}\n"
  },
  {
    "path": "libcontainer/env_test.go",
    "content": "package libcontainer\n\nimport (\n\t\"os/user\"\n\t\"slices\"\n\t\"strconv\"\n\t\"testing\"\n)\n\nfunc TestPrepareEnv(t *testing.T) {\n\tu, err := user.Current()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\thome := \"HOME=\" + u.HomeDir\n\tuid, err := strconv.Atoi(u.Uid)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\ttests := []struct {\n\t\tenv, wantEnv []string\n\t}{\n\t\t{\n\t\t\tenv:     []string{},\n\t\t\twantEnv: []string{home},\n\t\t},\n\t\t{\n\t\t\tenv:     []string{\"HOME=/whoo\", \"FOO=bar\"},\n\t\t\twantEnv: []string{\"HOME=/whoo\", \"FOO=bar\"},\n\t\t},\n\t\t{\n\t\t\tenv:     []string{\"A=a\", \"A=b\", \"A=c\"},\n\t\t\twantEnv: []string{\"A=c\", home},\n\t\t},\n\t\t{\n\t\t\tenv:     []string{\"TERM=vt100\", \"HOME=/home/one\", \"HOME=/home/two\", \"TERM=xterm\", \"HOME=/home/three\", \"FOO=bar\"},\n\t\t\twantEnv: []string{\"TERM=xterm\", \"HOME=/home/three\", \"FOO=bar\"},\n\t\t},\n\t\t{\n\t\t\tenv:     []string{\"HOME=\", \"HOME=/foo\"},\n\t\t\twantEnv: []string{\"HOME=/foo\"},\n\t\t},\n\t\t{\n\t\t\tenv:     []string{\"HOME=\"},\n\t\t\twantEnv: []string{home},\n\t\t},\n\t\t{\n\t\t\tenv:     []string{\"HOME=/foo\", \"HOME=\"},\n\t\t\twantEnv: []string{home},\n\t\t},\n\t}\n\n\tfor _, tc := range tests {\n\t\tenv, err := prepareEnv(tc.env, uid)\n\t\tif err != nil {\n\t\t\tt.Error(err)\n\t\t\tcontinue\n\t\t}\n\t\tif !slices.Equal(env, tc.wantEnv) {\n\t\t\tt.Errorf(\"want %v, got %v\", tc.wantEnv, env)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "libcontainer/error.go",
    "content": "package libcontainer\n\nimport \"errors\"\n\nvar (\n\tErrExist          = errors.New(\"container with given ID already exists\")\n\tErrInvalidID      = errors.New(\"invalid container ID format\")\n\tErrNotExist       = errors.New(\"container does not exist\")\n\tErrPaused         = errors.New(\"container paused\")\n\tErrRunning        = errors.New(\"container still running\")\n\tErrNotRunning     = errors.New(\"container not running\")\n\tErrNotPaused      = errors.New(\"container not paused\")\n\tErrCgroupNotExist = errors.New(\"cgroup not exist\")\n)\n"
  },
  {
    "path": "libcontainer/example_test.go",
    "content": "package libcontainer_test\n\nimport (\n\t\"log\"\n\t\"os\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/devices/config\"\n\n\t// To enable device management code, import cgroups/devices package.\n\t// Without it, cgroup manager won't be able to set up device access rules,\n\t// and will fail if devices are specified in the container configuration.\n\t_ \"github.com/opencontainers/cgroups/devices\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/specconv\"\n\n\t// Required for container enter functionality.\n\t_ \"github.com/opencontainers/runc/libcontainer/nsenter\"\n)\n\nfunc Example_container() {\n\tconst defaultMountFlags = unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV\n\n\t// Default set of allowed devices.\n\tvar devices []*config.Rule\n\tfor _, device := range specconv.AllowedDevices {\n\t\tdevices = append(devices, &device.Rule)\n\t}\n\t// To create a container you first have to create a configuration\n\t// struct describing how the container is to be created.\n\tconfig := &configs.Config{\n\t\tRootfs: \"/your/path/to/rootfs\",\n\t\tCapabilities: &configs.Capabilities{\n\t\t\tBounding: []string{\n\t\t\t\t\"CAP_KILL\",\n\t\t\t\t\"CAP_AUDIT_WRITE\",\n\t\t\t},\n\t\t\tEffective: []string{\n\t\t\t\t\"CAP_KILL\",\n\t\t\t\t\"CAP_AUDIT_WRITE\",\n\t\t\t},\n\t\t\tPermitted: []string{\n\t\t\t\t\"CAP_KILL\",\n\t\t\t\t\"CAP_AUDIT_WRITE\",\n\t\t\t},\n\t\t},\n\t\tNamespaces: configs.Namespaces([]configs.Namespace{\n\t\t\t{Type: configs.NEWNS},\n\t\t\t{Type: configs.NEWUTS},\n\t\t\t{Type: configs.NEWIPC},\n\t\t\t{Type: configs.NEWPID},\n\t\t\t{Type: configs.NEWUSER},\n\t\t\t{Type: configs.NEWNET},\n\t\t\t{Type: configs.NEWCGROUP},\n\t\t}),\n\t\tCgroups: &cgroups.Cgroup{\n\t\t\tName:   \"test-container\",\n\t\t\tParent: \"system\",\n\t\t\tResources: &cgroups.Resources{\n\t\t\t\tMemorySwappiness: nil,\n\t\t\t\tDevices:          devices,\n\t\t\t},\n\t\t},\n\t\tMaskPaths: []string{\n\t\t\t\"/proc/kcore\",\n\t\t\t\"/sys/firmware\",\n\t\t},\n\t\tReadonlyPaths: []string{\n\t\t\t\"/proc/sys\", \"/proc/sysrq-trigger\", \"/proc/irq\", \"/proc/bus\",\n\t\t},\n\t\tDevices:  specconv.AllowedDevices,\n\t\tHostname: \"testing\",\n\t\tMounts: []*configs.Mount{\n\t\t\t{\n\t\t\t\tSource:      \"proc\",\n\t\t\t\tDestination: \"/proc\",\n\t\t\t\tDevice:      \"proc\",\n\t\t\t\tFlags:       defaultMountFlags,\n\t\t\t},\n\t\t\t{\n\t\t\t\tSource:      \"tmpfs\",\n\t\t\t\tDestination: \"/dev\",\n\t\t\t\tDevice:      \"tmpfs\",\n\t\t\t\tFlags:       unix.MS_NOSUID | unix.MS_STRICTATIME,\n\t\t\t\tData:        \"mode=755\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tSource:      \"devpts\",\n\t\t\t\tDestination: \"/dev/pts\",\n\t\t\t\tDevice:      \"devpts\",\n\t\t\t\tFlags:       unix.MS_NOSUID | unix.MS_NOEXEC,\n\t\t\t\tData:        \"newinstance,ptmxmode=0666,mode=0620,gid=5\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tDevice:      \"tmpfs\",\n\t\t\t\tSource:      \"shm\",\n\t\t\t\tDestination: \"/dev/shm\",\n\t\t\t\tData:        \"mode=1777,size=65536k\",\n\t\t\t\tFlags:       defaultMountFlags,\n\t\t\t},\n\t\t\t{\n\t\t\t\tSource:      \"mqueue\",\n\t\t\t\tDestination: \"/dev/mqueue\",\n\t\t\t\tDevice:      \"mqueue\",\n\t\t\t\tFlags:       defaultMountFlags,\n\t\t\t},\n\t\t\t{\n\t\t\t\tSource:      \"sysfs\",\n\t\t\t\tDestination: \"/sys\",\n\t\t\t\tDevice:      \"sysfs\",\n\t\t\t\tFlags:       defaultMountFlags | unix.MS_RDONLY,\n\t\t\t},\n\t\t},\n\t\tUIDMappings: []configs.IDMap{\n\t\t\t{\n\t\t\t\tContainerID: 0,\n\t\t\t\tHostID:      1000,\n\t\t\t\tSize:        65536,\n\t\t\t},\n\t\t},\n\t\tGIDMappings: []configs.IDMap{\n\t\t\t{\n\t\t\t\tContainerID: 0,\n\t\t\t\tHostID:      1000,\n\t\t\t\tSize:        65536,\n\t\t\t},\n\t\t},\n\t\tNetworks: []*configs.Network{\n\t\t\t{\n\t\t\t\tType:    \"loopback\",\n\t\t\t\tAddress: \"127.0.0.1/0\",\n\t\t\t\tGateway: \"localhost\",\n\t\t\t},\n\t\t},\n\t\tRlimits: []configs.Rlimit{\n\t\t\t{\n\t\t\t\tType: unix.RLIMIT_NOFILE,\n\t\t\t\tHard: uint64(1025),\n\t\t\t\tSoft: uint64(1025),\n\t\t\t},\n\t\t},\n\t}\n\n\t// Once you have the configuration populated you can create a container\n\t// with a specified ID under a specified state directory:\n\tcontainer, err := libcontainer.Create(\"/run/containers\", \"container-id\", config)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t\treturn\n\t}\n\n\t// To spawn bash as the initial process inside the container and have the\n\t// processes pid returned in order to wait, signal, or kill the process:\n\tprocess := &libcontainer.Process{\n\t\tArgs:   []string{\"/bin/bash\"},\n\t\tEnv:    []string{\"PATH=/bin\"},\n\t\tUID:    0,\n\t\tStdin:  os.Stdin,\n\t\tStdout: os.Stdout,\n\t\tStderr: os.Stderr,\n\t\tInit:   true,\n\t}\n\n\terr = container.Run(process)\n\tif err != nil {\n\t\t_ = container.Destroy()\n\t\tlog.Fatal(err)\n\t\treturn\n\t}\n\n\t// Wait for the process to finish.\n\t_, err = process.Wait()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t// Destroy the container.\n\terr = container.Destroy()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t// Additional ways to interact with a running container are:\n\n\t// Return all the pids for all processes running inside the container.\n\tprocesses, err := container.Processes()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tlog.Print(processes)\n\n\t// Get detailed cpu, memory, io, and network statistics for the container and\n\t// it's processes.\n\tstats, err := container.Stats()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tlog.Print(stats)\n\n\t// Pause all processes inside the container.\n\terr = container.Pause()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t// Resume all paused processes.\n\terr = container.Resume()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t// Send signal to container's init process.\n\terr = container.Signal(unix.SIGHUP)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t// Update container resource constraints.\n\terr = container.Set(*config)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t// Get current status of the container.\n\tstatus, err := container.Status()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tlog.Print(status)\n\n\t// Get current container's state information.\n\tstate, err := container.State()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tlog.Print(state)\n}\n"
  },
  {
    "path": "libcontainer/exeseal/cloned_binary_linux.go",
    "content": "package exeseal\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strconv\"\n\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/internal/pathrs\"\n\t\"github.com/opencontainers/runc/libcontainer/system\"\n)\n\ntype SealFunc func(**os.File) error\n\nvar (\n\t_ SealFunc = sealMemfd\n\t_ SealFunc = sealFile\n)\n\nfunc isExecutable(f *os.File) bool {\n\tif err := unix.Faccessat(int(f.Fd()), \"\", unix.X_OK, unix.AT_EACCESS|unix.AT_EMPTY_PATH); err == nil {\n\t\treturn true\n\t} else if err == unix.EACCES {\n\t\treturn false\n\t}\n\tpath := \"/proc/self/fd/\" + strconv.Itoa(int(f.Fd()))\n\tif err := unix.Access(path, unix.X_OK); err == nil {\n\t\treturn true\n\t} else if err == unix.EACCES {\n\t\treturn false\n\t}\n\t// Cannot check -- assume it's executable (if not, exec will fail).\n\tlogrus.Debugf(\"cannot do X_OK check on binary %s -- assuming it's executable\", f.Name())\n\treturn true\n}\n\nconst baseMemfdSeals = unix.F_SEAL_SEAL | unix.F_SEAL_SHRINK | unix.F_SEAL_GROW | unix.F_SEAL_WRITE\n\nfunc sealMemfd(f **os.File) error {\n\tif err := (*f).Chmod(0o511); err != nil {\n\t\treturn err\n\t}\n\t// Try to set the newer memfd sealing flags, but we ignore\n\t// errors because they are not needed and we want to continue\n\t// to work on older kernels.\n\tfd := (*f).Fd()\n\n\t// Skip F_SEAL_FUTURE_WRITE, it is not needed because we already use the\n\t// stronger F_SEAL_WRITE (and is buggy on Linux <5.5 -- see kernel commit\n\t// 05d351102dbe and <https://github.com/opencontainers/runc/pull/4640>).\n\n\t// F_SEAL_EXEC -- Linux 6.3\n\tconst F_SEAL_EXEC = 0x20 //nolint:revive // this matches the unix.* name\n\t_, _ = unix.FcntlInt(fd, unix.F_ADD_SEALS, F_SEAL_EXEC)\n\n\t// Apply all original memfd seals.\n\t_, err := unix.FcntlInt(fd, unix.F_ADD_SEALS, baseMemfdSeals)\n\treturn os.NewSyscallError(\"fcntl(F_ADD_SEALS)\", err)\n}\n\n// Memfd creates a sealable executable memfd (supported since Linux 3.17).\nfunc Memfd(comment string) (*os.File, SealFunc, error) {\n\tfile, err := system.ExecutableMemfd(\"runc_cloned:\"+comment, unix.MFD_ALLOW_SEALING|unix.MFD_CLOEXEC)\n\treturn file, sealMemfd, err\n}\n\nfunc sealFile(f **os.File) error {\n\t// When sealing an O_TMPFILE-style descriptor we need to\n\t// re-open the path as O_PATH to clear the existing write\n\t// handle we have.\n\topath, err := pathrs.Reopen(*f, unix.O_PATH|unix.O_CLOEXEC)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"reopen tmpfile: %w\", err)\n\t}\n\t_ = (*f).Close()\n\t*f = opath\n\treturn nil\n}\n\n// otmpfile creates an open(O_TMPFILE) file in the given directory (supported\n// since Linux 3.11).\nfunc otmpfile(dir string) (*os.File, SealFunc, error) {\n\tfile, err := os.OpenFile(dir, unix.O_TMPFILE|unix.O_RDWR|unix.O_EXCL|unix.O_CLOEXEC, 0o700)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"O_TMPFILE creation failed: %w\", err)\n\t}\n\t// Make sure we actually got an unlinked O_TMPFILE descriptor.\n\tvar stat unix.Stat_t\n\tif err := unix.Fstat(int(file.Fd()), &stat); err != nil {\n\t\tfile.Close()\n\t\treturn nil, nil, fmt.Errorf(\"cannot fstat O_TMPFILE fd: %w\", err)\n\t} else if stat.Nlink != 0 {\n\t\tfile.Close()\n\t\treturn nil, nil, errors.New(\"O_TMPFILE has non-zero nlink\")\n\t}\n\treturn file, sealFile, err\n}\n\n// mktemp creates a classic unlinked file in the given directory.\nfunc mktemp(dir string) (*os.File, SealFunc, error) {\n\tfile, err := os.CreateTemp(dir, \"runc.\")\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\t// Unlink the file and verify it was unlinked.\n\tif err := os.Remove(file.Name()); err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"unlinking classic tmpfile: %w\", err)\n\t}\n\tif err := file.Chmod(0o511); err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"chmod classic tmpfile: %w\", err)\n\t}\n\tvar stat unix.Stat_t\n\tif err := unix.Fstat(int(file.Fd()), &stat); err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"cannot fstat classic tmpfile: %w\", err)\n\t} else if stat.Nlink != 0 {\n\t\treturn nil, nil, fmt.Errorf(\"classic tmpfile %s has non-zero nlink after unlink\", file.Name())\n\t}\n\treturn file, sealFile, err\n}\n\nfunc getSealableFile(comment, tmpDir string) (file *os.File, sealFn SealFunc, err error) {\n\t// First, try an executable memfd (supported since Linux 3.17).\n\tfile, sealFn, err = Memfd(comment)\n\tif err == nil {\n\t\treturn file, sealFn, err\n\t}\n\tlogrus.Debugf(\"memfd cloned binary failed, falling back to O_TMPFILE: %v\", err)\n\n\t// The tmpDir here (c.root) might be mounted noexec, so we need a couple of\n\t// fallbacks to try. It's possible that none of these are writable and\n\t// executable, in which case there's nothing we can practically do (other\n\t// than mounting our own executable tmpfs, which would have its own\n\t// issues).\n\ttmpDirs := []string{\n\t\ttmpDir,\n\t\tos.TempDir(),\n\t\t\"/tmp\",\n\t\t\".\",\n\t\t\"/bin\",\n\t\t\"/\",\n\t}\n\n\t// Try to fallback to O_TMPFILE (supported since Linux 3.11).\n\tfor _, dir := range tmpDirs {\n\t\tfile, sealFn, err = otmpfile(dir)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif !isExecutable(file) {\n\t\t\tlogrus.Debugf(\"tmpdir %s is noexec -- trying a different tmpdir\", dir)\n\t\t\tfile.Close()\n\t\t\tcontinue\n\t\t}\n\t\treturn file, sealFn, err\n\t}\n\tlogrus.Debugf(\"O_TMPFILE cloned binary failed, falling back to mktemp(): %v\", err)\n\t// Finally, try a classic unlinked temporary file.\n\tfor _, dir := range tmpDirs {\n\t\tfile, sealFn, err = mktemp(dir)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif !isExecutable(file) {\n\t\t\tlogrus.Debugf(\"tmpdir %s is noexec -- trying a different tmpdir\", dir)\n\t\t\tfile.Close()\n\t\t\tcontinue\n\t\t}\n\t\treturn file, sealFn, err\n\t}\n\treturn nil, nil, fmt.Errorf(\"could not create sealable file for cloned binary: %w\", err)\n}\n\n// CloneBinary creates a \"sealed\" clone of a given binary, which can be used to\n// thwart attempts by the container process to gain access to host binaries\n// through procfs magic-link shenanigans. For more details on why this is\n// necessary, see CVE-2019-5736.\nfunc CloneBinary(src io.Reader, size int64, name, tmpDir string) (*os.File, error) {\n\tlogrus.Debugf(\"cloning %s binary (%d bytes)\", name, size)\n\tfile, sealFn, err := getSealableFile(name, tmpDir)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcopied, err := system.Copy(file, src)\n\tif err != nil {\n\t\tfile.Close()\n\t\treturn nil, fmt.Errorf(\"copy binary: %w\", err)\n\t} else if copied != size {\n\t\tfile.Close()\n\t\treturn nil, fmt.Errorf(\"copied binary size mismatch: %d != %d\", copied, size)\n\t}\n\tif err := sealFn(&file); err != nil {\n\t\tfile.Close()\n\t\treturn nil, fmt.Errorf(\"could not seal fd: %w\", err)\n\t}\n\treturn file, nil\n}\n\n// IsCloned returns whether the given file can be guaranteed to be a safe exe.\nfunc IsCloned(exe *os.File) bool {\n\tseals, err := unix.FcntlInt(exe.Fd(), unix.F_GET_SEALS, 0)\n\tif err != nil {\n\t\t// /proc/self/exe is probably not a memfd\n\t\tlogrus.Debugf(\"F_GET_SEALS on %s failed: %v\", exe.Name(), err)\n\t\treturn false\n\t}\n\t// The memfd must have all of the base seals applied.\n\tlogrus.Debugf(\"checking %s memfd seals: 0x%x\", exe.Name(), seals)\n\treturn seals&baseMemfdSeals == baseMemfdSeals\n}\n\n// CloneSelfExe makes a clone of the current process's binary (through\n// /proc/self/exe). This binary can then be used for \"runc init\" in order to\n// make sure the container process can never resolve the original runc binary.\n// For more details on why this is necessary, see CVE-2019-5736.\nfunc CloneSelfExe(tmpDir string) (*os.File, error) {\n\t// Try to create a temporary overlayfs to produce a readonly version of\n\t// /proc/self/exe that cannot be \"unwrapped\" by the container. In contrast\n\t// to CloneBinary, this technique does not require any extra memory usage\n\t// and does not have the (fairly noticeable) performance impact of copying\n\t// a large binary file into a memfd.\n\t//\n\t// Based on some basic performance testing, the overlayfs approach has\n\t// effectively no performance overhead (it is on par with both\n\t// MS_BIND+MS_RDONLY and no binary cloning at all) while memfd copying adds\n\t// around ~60% overhead during container startup.\n\toverlayFile, err := sealedOverlayfs(\"/proc/self/exe\", tmpDir)\n\tif err == nil {\n\t\tlogrus.Debug(\"runc exeseal: using overlayfs for sealed /proc/self/exe\") // used for tests\n\t\treturn overlayFile, nil\n\t}\n\tlogrus.WithError(err).Debugf(\"could not use overlayfs for /proc/self/exe sealing -- falling back to making a temporary copy\")\n\n\tselfExe, err := os.Open(\"/proc/self/exe\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"opening current binary: %w\", err)\n\t}\n\tdefer selfExe.Close()\n\n\tstat, err := selfExe.Stat()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"checking /proc/self/exe size: %w\", err)\n\t}\n\tsize := stat.Size()\n\n\treturn CloneBinary(selfExe, size, \"/proc/self/exe\", tmpDir)\n}\n\n// IsSelfExeCloned returns whether /proc/self/exe is a cloned binary that can\n// be guaranteed to be safe. This means that it must be a sealed memfd. Other\n// types of clones cannot be completely verified as safe.\nfunc IsSelfExeCloned() bool {\n\tselfExe, err := os.Open(\"/proc/self/exe\")\n\tif err != nil {\n\t\tlogrus.Debugf(\"open /proc/self/exe failed: %v\", err)\n\t\treturn false\n\t}\n\tdefer selfExe.Close()\n\treturn IsCloned(selfExe)\n}\n"
  },
  {
    "path": "libcontainer/exeseal/doc.go",
    "content": "// Package exeseal provides mechanisms for sealing /proc/self/exe and thus\n// protecting the runc binary against CVE-2019-5736-style attacks.\npackage exeseal\n"
  },
  {
    "path": "libcontainer/exeseal/overlayfs_linux.go",
    "content": "package exeseal\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n)\n\nfunc fsopen(fsName string, flags int) (*os.File, error) {\n\t// Make sure we always set O_CLOEXEC.\n\tflags |= unix.FSOPEN_CLOEXEC\n\tfd, err := unix.Fsopen(fsName, flags)\n\tif err != nil {\n\t\treturn nil, os.NewSyscallError(\"fsopen \"+fsName, err)\n\t}\n\treturn os.NewFile(uintptr(fd), \"fscontext:\"+fsName), nil\n}\n\nfunc fsmount(ctx *os.File, flags, mountAttrs int) (*os.File, error) {\n\t// Make sure we always set O_CLOEXEC.\n\tflags |= unix.FSMOUNT_CLOEXEC\n\tfd, err := unix.Fsmount(int(ctx.Fd()), flags, mountAttrs)\n\tif err != nil {\n\t\treturn nil, os.NewSyscallError(\"fsmount \"+ctx.Name(), err)\n\t}\n\truntime.KeepAlive(ctx) // make sure fd is kept alive while it's used\n\treturn os.NewFile(uintptr(fd), \"fsmount:\"+ctx.Name()), nil\n}\n\nfunc escapeOverlayLowerDir(path string) string {\n\t// If the lowerdir path contains \":\" we need to escape them, and if there\n\t// were any escape characters already (\\) we need to escape those first.\n\treturn strings.ReplaceAll(strings.ReplaceAll(path, `\\`, `\\\\`), `:`, `\\:`)\n}\n\n// sealedOverlayfs will create an internal overlayfs mount using fsopen() that\n// uses the directory containing the binary as a lowerdir and a temporary tmpfs\n// as an upperdir. There is no way to \"unwrap\" this (unlike MS_BIND+MS_RDONLY)\n// and so we can create a safe zero-copy sealed version of /proc/self/exe.\n// This only works for privileged users and on kernels with overlayfs and\n// fsopen() enabled.\n//\n// TODO: Since Linux 5.11, overlayfs can be created inside user namespaces so\n// it is technically possible to create an overlayfs even for rootless\n// containers. Unfortunately, this would require some ugly manual CGo+fork\n// magic so we can do this later if we feel it's really needed.\nfunc sealedOverlayfs(binPath, tmpDir string) (_ *os.File, Err error) {\n\t// Try to do the superblock creation first to bail out early if we can't\n\t// use this method.\n\toverlayCtx, err := fsopen(\"overlay\", unix.FSOPEN_CLOEXEC)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer overlayCtx.Close()\n\n\t// binPath is going to be /proc/self/exe, so do a readlink to get the real\n\t// path. overlayfs needs the real underlying directory for this protection\n\t// mode to work properly.\n\tif realPath, err := os.Readlink(binPath); err == nil {\n\t\tbinPath = realPath\n\t}\n\tbinLowerDirPath, binName := filepath.Split(binPath)\n\t// Escape any \":\"s or \"\\\"s in the path.\n\tbinLowerDirPath = escapeOverlayLowerDir(binLowerDirPath)\n\n\t// Overlayfs requires two lowerdirs in order to run in \"lower-only\" mode,\n\t// where writes are completely blocked. Ideally we would create a dummy\n\t// tmpfs for this, but it turns out that overlayfs doesn't allow for\n\t// anonymous mountns paths.\n\t// NOTE: I'm working on a patch to fix this but it won't be backported.\n\tdummyLowerDirPath := escapeOverlayLowerDir(tmpDir)\n\n\t// Configure the lowerdirs. The binary lowerdir needs to be on the top to\n\t// ensure that a file called \"runc\" (binName) in the dummy lowerdir doesn't\n\t// mask the binary.\n\tlowerDirStr := binLowerDirPath + \":\" + dummyLowerDirPath\n\tif err := unix.FsconfigSetString(int(overlayCtx.Fd()), \"lowerdir\", lowerDirStr); err != nil {\n\t\treturn nil, fmt.Errorf(\"fsconfig set overlayfs lowerdir=%s: %w\", lowerDirStr, err)\n\t}\n\n\t// We don't care about xino (Linux 4.17) but it will be auto-enabled on\n\t// some systems (if /run/runc and /usr/bin are on different filesystems)\n\t// and this produces spurious dmesg log entries. We can safely ignore\n\t// errors when disabling this because we don't actually care about the\n\t// setting and we're just opportunistically disabling it.\n\t_ = unix.FsconfigSetString(int(overlayCtx.Fd()), \"xino\", \"off\")\n\n\t// Get an actual handle to the overlayfs.\n\tif err := unix.FsconfigCreate(int(overlayCtx.Fd())); err != nil {\n\t\treturn nil, os.NewSyscallError(\"fsconfig create overlayfs\", err)\n\t}\n\toverlayFd, err := fsmount(overlayCtx, unix.FSMOUNT_CLOEXEC, unix.MS_RDONLY|unix.MS_NODEV|unix.MS_NOSUID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer overlayFd.Close()\n\n\t// Grab a handle to the binary through overlayfs.\n\texeFile, err := utils.Openat(overlayFd, binName, unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"open %s from overlayfs (lowerdir=%s): %w\", binName, lowerDirStr, err)\n\t}\n\t// NOTE: We would like to check that exeFile is the same as /proc/self/exe,\n\t// except this is a little difficult. Depending on what filesystems the\n\t// layers are on, overlayfs can remap the inode numbers (and it always\n\t// creates its own device numbers -- see ovl_map_dev_ino) so we can't do a\n\t// basic stat-based check. The only reasonable option would be to hash both\n\t// files and compare them, but this would require fully reading both files\n\t// which would produce a similar performance overhead to memfd cloning.\n\t//\n\t// Ultimately, there isn't a real attack to be worried about here. An\n\t// attacker would need to be able to modify files in /usr/sbin (or wherever\n\t// runc lives), at which point they could just replace the runc binary with\n\t// something malicious anyway.\n\treturn exeFile, nil\n}\n"
  },
  {
    "path": "libcontainer/factory_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\n\tsecurejoin \"github.com/cyphar/filepath-securejoin\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/manager\"\n\t\"github.com/opencontainers/runc/internal/pathrs\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/configs/validate\"\n\t\"github.com/opencontainers/runc/libcontainer/intelrdt\"\n)\n\nconst (\n\tstateFilename    = \"state.json\"\n\texecFifoFilename = \"exec.fifo\"\n)\n\n// Create creates a new container with the given id inside a given state\n// directory (root), and returns a Container object.\n//\n// The root is a state directory which many containers can share. It can be\n// used later to get the list of containers, or to get information about a\n// particular container (see Load).\n//\n// The id must not be empty and consist of only the following characters:\n// ASCII letters, digits, underscore, plus, minus, period. The id must be\n// unique and non-existent for the given root path.\nfunc Create(root, id string, config *configs.Config) (*Container, error) {\n\tif root == \"\" {\n\t\treturn nil, errors.New(\"root not set\")\n\t}\n\tif err := validateID(id); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := validate.Validate(config); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := os.MkdirAll(root, 0o700); err != nil {\n\t\treturn nil, err\n\t}\n\tstateDir, err := securejoin.SecureJoin(root, id)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif _, err := os.Stat(stateDir); err == nil {\n\t\treturn nil, ErrExist\n\t} else if !errors.Is(err, os.ErrNotExist) {\n\t\treturn nil, err\n\t}\n\n\tcm, err := manager.New(config.Cgroups)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Check that cgroup does not exist or empty (no processes).\n\t// Note for cgroup v1 this check is not thorough, as there are multiple\n\t// separate hierarchies, while both Exists() and GetAllPids() only use\n\t// one for \"devices\" controller (assuming others are the same, which is\n\t// probably true in almost all scenarios). Checking all the hierarchies\n\t// would be too expensive.\n\tif cm.Exists() {\n\t\tpids, err := cm.GetAllPids()\n\t\t// Reading PIDs can race with cgroups removal, so ignore ENOENT and ENODEV.\n\t\tif err != nil && !errors.Is(err, os.ErrNotExist) && !errors.Is(err, unix.ENODEV) {\n\t\t\treturn nil, fmt.Errorf(\"unable to get cgroup PIDs: %w\", err)\n\t\t}\n\t\tif len(pids) != 0 {\n\t\t\treturn nil, fmt.Errorf(\"container's cgroup is not empty: %d process(es) found\", len(pids))\n\t\t}\n\t}\n\n\t// Check that cgroup is not frozen. Do not use Exists() here\n\t// since in cgroup v1 it only checks \"devices\" controller.\n\tst, err := cm.GetFreezerState()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to get cgroup freezer state: %w\", err)\n\t}\n\tif st == cgroups.Frozen {\n\t\treturn nil, errors.New(\"container's cgroup unexpectedly frozen\")\n\t}\n\n\t// Parent directory is already created above, so Mkdir is enough.\n\tif err := os.Mkdir(stateDir, 0o711); err != nil {\n\t\treturn nil, err\n\t}\n\tc := &Container{\n\t\tid:              id,\n\t\tstateDir:        stateDir,\n\t\tconfig:          config,\n\t\tcgroupManager:   cm,\n\t\tintelRdtManager: intelrdt.NewManager(config, id, \"\"),\n\t}\n\tc.state = &stoppedState{c: c}\n\treturn c, nil\n}\n\n// Load takes a path to the state directory (root) and an id of an existing\n// container, and returns a Container object reconstructed from the saved\n// state. This presents a read only view of the container.\nfunc Load(root, id string) (*Container, error) {\n\tif root == \"\" {\n\t\treturn nil, errors.New(\"root not set\")\n\t}\n\t// when load, we need to check id is valid or not.\n\tif err := validateID(id); err != nil {\n\t\treturn nil, err\n\t}\n\tstateDir, err := securejoin.SecureJoin(root, id)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tstate, err := loadState(stateDir)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tr := &nonChildProcess{\n\t\tprocessPid:       state.InitProcessPid,\n\t\tprocessStartTime: state.InitProcessStartTime,\n\t\tfds:              state.ExternalDescriptors,\n\t}\n\tcm, err := manager.NewWithPaths(state.Config.Cgroups, state.CgroupPaths)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc := &Container{\n\t\tinitProcess:          r,\n\t\tinitProcessStartTime: state.InitProcessStartTime,\n\t\tid:                   id,\n\t\tconfig:               &state.Config,\n\t\tcgroupManager:        cm,\n\t\tintelRdtManager:      intelrdt.NewManager(&state.Config, id, state.IntelRdtPath),\n\t\tstateDir:             stateDir,\n\t\tcreated:              state.Created,\n\t}\n\tc.state = &loadedState{c: c}\n\tif err := c.refreshState(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn c, nil\n}\n\nfunc loadState(root string) (*State, error) {\n\tstateFilePath, err := securejoin.SecureJoin(root, stateFilename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tf, err := os.Open(stateFilePath)\n\tif err != nil {\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\treturn nil, ErrNotExist\n\t\t}\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\tvar state *State\n\tif err := json.NewDecoder(f).Decode(&state); err != nil {\n\t\treturn nil, err\n\t}\n\t// Cgroup v1 fs manager expect Resources to never be nil.\n\tif state.Config.Cgroups.Resources == nil {\n\t\tstate.Config.Cgroups.Resources = &cgroups.Resources{}\n\t}\n\treturn state, nil\n}\n\n// validateID checks if the supplied container ID is valid, returning\n// the ErrInvalidID in case it is not.\n//\n// The format of valid ID was never formally defined, instead the code\n// was modified to allow or disallow specific characters.\n//\n// Currently, a valid ID is a non-empty string consisting only of\n// the following characters:\n// - uppercase (A-Z) and lowercase (a-z) Latin letters;\n// - digits (0-9);\n// - underscore (_);\n// - plus sign (+);\n// - minus sign (-);\n// - period (.).\n//\n// In addition, IDs that can't be used to represent a file name\n// (such as . or ..) are rejected.\n\nfunc validateID(id string) error {\n\tif len(id) < 1 {\n\t\treturn ErrInvalidID\n\t}\n\n\t// Allowed characters: 0-9 A-Z a-z _ + - .\n\tfor i := range len(id) {\n\t\tc := id[i]\n\t\tswitch {\n\t\tcase c >= 'a' && c <= 'z':\n\t\tcase c >= 'A' && c <= 'Z':\n\t\tcase c >= '0' && c <= '9':\n\t\tcase c == '_':\n\t\tcase c == '+':\n\t\tcase c == '-':\n\t\tcase c == '.':\n\t\tdefault:\n\t\t\treturn ErrInvalidID\n\t\t}\n\n\t}\n\n\tif string(os.PathSeparator)+id != pathrs.LexicallyCleanPath(string(os.PathSeparator)+id) {\n\t\treturn ErrInvalidID\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "libcontainer/factory_linux_test.go",
    "content": "package libcontainer\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n)\n\nfunc TestFactoryLoadNotExists(t *testing.T) {\n\tstateDir := t.TempDir()\n\t_, err := Load(stateDir, \"nocontainer\")\n\tif err == nil {\n\t\tt.Fatal(\"expected nil error loading non-existing container\")\n\t}\n\tif !errors.Is(err, ErrNotExist) {\n\t\tt.Fatalf(\"expected ErrNotExist, got %v\", err)\n\t}\n}\n\nfunc TestFactoryLoadContainer(t *testing.T) {\n\troot := t.TempDir()\n\t// setup default container config and state for mocking\n\tvar (\n\t\tid            = \"1\"\n\t\texpectedHooks = configs.Hooks{\n\t\t\tconfigs.Prestart: configs.HookList{\n\t\t\t\tconfigs.CommandHook{Command: &configs.Command{Path: \"prestart-hook\"}},\n\t\t\t},\n\t\t\tconfigs.Poststart: configs.HookList{\n\t\t\t\tconfigs.CommandHook{Command: &configs.Command{Path: \"poststart-hook\"}},\n\t\t\t},\n\t\t\tconfigs.Poststop: configs.HookList{\n\t\t\t\tunserializableHook{},\n\t\t\t\tconfigs.CommandHook{Command: &configs.Command{Path: \"poststop-hook\"}},\n\t\t\t},\n\t\t}\n\t\texpectedConfig = &configs.Config{\n\t\t\tRootfs: \"/mycontainer/root\",\n\t\t\tHooks:  expectedHooks,\n\t\t\tCgroups: &cgroups.Cgroup{\n\t\t\t\tResources: &cgroups.Resources{},\n\t\t\t},\n\t\t}\n\t\texpectedState = &State{\n\t\t\tBaseState: BaseState{\n\t\t\t\tInitProcessPid: 1024,\n\t\t\t\tConfig:         *expectedConfig,\n\t\t\t},\n\t\t}\n\t)\n\tif err := os.Mkdir(filepath.Join(root, id), 0o700); err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif err := marshal(filepath.Join(root, id, stateFilename), expectedState); err != nil {\n\t\tt.Fatal(err)\n\t}\n\tcontainer, err := Load(root, id)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif container.ID() != id {\n\t\tt.Fatalf(\"expected container id %q but received %q\", id, container.ID())\n\t}\n\tconfig := container.Config()\n\tif config.Rootfs != expectedConfig.Rootfs {\n\t\tt.Fatalf(\"expected rootfs %q but received %q\", expectedConfig.Rootfs, config.Rootfs)\n\t}\n\texpectedHooks[configs.Poststop] = expectedHooks[configs.Poststop][1:] // expect unserializable hook to be skipped\n\tif !reflect.DeepEqual(config.Hooks, expectedHooks) {\n\t\tt.Fatalf(\"expects hooks %q but received %q\", expectedHooks, config.Hooks)\n\t}\n\tif container.initProcess.pid() != expectedState.InitProcessPid {\n\t\tt.Fatalf(\"expected init pid %d but received %d\", expectedState.InitProcessPid, container.initProcess.pid())\n\t}\n}\n\nfunc marshal(path string, v any) error {\n\tf, err := os.Create(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\treturn utils.WriteJSON(f, v)\n}\n\ntype unserializableHook struct{}\n\nfunc (unserializableHook) Run(*specs.State) error {\n\treturn nil\n}\n"
  },
  {
    "path": "libcontainer/init_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"runtime/debug\"\n\t\"strconv\"\n\t\"syscall\"\n\n\t\"github.com/containerd/console\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\t\"github.com/sirupsen/logrus\"\n\t\"github.com/vishvananda/netlink\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/runc/internal/linux\"\n\t\"github.com/opencontainers/runc/internal/pathrs\"\n\t\"github.com/opencontainers/runc/libcontainer/capabilities\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/system\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n)\n\ntype initType string\n\nconst (\n\tinitSetns    initType = \"setns\"\n\tinitStandard initType = \"standard\"\n)\n\ntype pid struct {\n\tPid           int `json:\"stage2_pid\"`\n\tPidFirstChild int `json:\"stage1_pid\"`\n}\n\n// network is an internal struct used to setup container networks.\ntype network struct {\n\tconfigs.Network\n\n\t// TempVethPeerName is a unique temporary veth peer name that was placed into\n\t// the container's namespace.\n\tTempVethPeerName string `json:\"temp_veth_peer_name\"`\n}\n\n// initConfig is used for transferring parameters from Exec() to Init().\n// It contains:\n//   - original container config;\n//   - some [Process] properties;\n//   - set of properties merged from the container config ([configs.Config])\n//     and the process ([Process]);\n//   - some properties that come from the container.\n//\n// When adding new fields, please make sure they go into the relevant section.\ntype initConfig struct {\n\t// Config is the original container config.\n\tConfig *configs.Config `json:\"config\"`\n\n\t// Properties that are unique to and come from [Process].\n\n\tArgs             []string `json:\"args\"`\n\tEnv              []string `json:\"env\"`\n\tUID              int      `json:\"uid\"`\n\tGID              int      `json:\"gid\"`\n\tAdditionalGroups []int    `json:\"additional_groups\"`\n\tCwd              string   `json:\"cwd\"`\n\tCreateConsole    bool     `json:\"create_console\"`\n\tConsoleWidth     uint16   `json:\"console_width\"`\n\tConsoleHeight    uint16   `json:\"console_height\"`\n\tPassedFilesCount int      `json:\"passed_files_count\"`\n\n\t// Properties that exists both in the container config and the process,\n\t// as merged by [Container.newInitConfig] (process properties has preference).\n\n\tAppArmorProfile string                `json:\"apparmor_profile\"`\n\tCapabilities    *configs.Capabilities `json:\"capabilities\"`\n\tNoNewPrivileges bool                  `json:\"no_new_privileges\"`\n\tProcessLabel    string                `json:\"process_label\"`\n\tRlimits         []configs.Rlimit      `json:\"rlimits\"`\n\tIOPriority      *configs.IOPriority   `json:\"io_priority,omitempty\"`\n\tScheduler       *configs.Scheduler    `json:\"scheduler,omitempty\"`\n\tCPUAffinity     *configs.CPUAffinity  `json:\"cpu_affinity,omitempty\"`\n\n\t// Miscellaneous properties, filled in by [Container.newInitConfig]\n\t// unless documented otherwise.\n\n\tContainerID string `json:\"containerid\"`\n\tCgroup2Path string `json:\"cgroup2_path,omitempty\"`\n\n\t// Networks is filled in from container config by [initProcess.createNetworkInterfaces].\n\tNetworks []*network `json:\"network\"`\n\n\t// SpecState is filled in by [initProcess.Start].\n\tSpecState *specs.State `json:\"spec_state,omitempty\"`\n}\n\n// Init is part of \"runc init\" implementation.\nfunc Init() {\n\truntime.GOMAXPROCS(1)\n\truntime.LockOSThread()\n\n\tif err := startInitialization(); err != nil {\n\t\t// If the error is returned, it was not communicated\n\t\t// back to the parent (which is not a common case),\n\t\t// so print it to stderr here as a last resort.\n\t\t//\n\t\t// Do not use logrus as we are not sure if it has been\n\t\t// set up yet, but most important, if the parent is\n\t\t// alive (and its log forwarding is working).\n\t\tfmt.Fprintln(os.Stderr, err)\n\t}\n\t// Normally, StartInitialization() never returns, meaning\n\t// if we are here, it had failed.\n\tos.Exit(255)\n}\n\n// Normally, this function does not return. If it returns, with or without an\n// error, it means the initialization has failed. If the error is returned,\n// it means the error can not be communicated back to the parent.\nfunc startInitialization() (retErr error) {\n\t// Get the synchronisation pipe.\n\tenvSyncPipe := os.Getenv(\"_LIBCONTAINER_SYNCPIPE\")\n\tsyncPipeFd, err := strconv.Atoi(envSyncPipe)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unable to convert _LIBCONTAINER_SYNCPIPE: %w\", err)\n\t}\n\tsyncPipe := newSyncSocket(os.NewFile(uintptr(syncPipeFd), \"sync\"))\n\tdefer syncPipe.Close()\n\n\tdefer func() {\n\t\t// If this defer is ever called, this means initialization has failed.\n\t\t// Send the error back to the parent process in the form of an initError\n\t\t// if the sync socket has not been closed.\n\t\tif syncPipe.isClosed() {\n\t\t\treturn\n\t\t}\n\t\tierr := initError{Message: retErr.Error()}\n\t\tif err := writeSyncArg(syncPipe, procError, ierr); err != nil {\n\t\t\tfmt.Fprintln(os.Stderr, err)\n\t\t\treturn\n\t\t}\n\t\t// The error is sent, no need to also return it (or it will be reported twice).\n\t\tretErr = nil\n\t}()\n\n\t// Get the INITPIPE.\n\tenvInitPipe := os.Getenv(\"_LIBCONTAINER_INITPIPE\")\n\tinitPipeFd, err := strconv.Atoi(envInitPipe)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unable to convert _LIBCONTAINER_INITPIPE: %w\", err)\n\t}\n\tinitPipe := os.NewFile(uintptr(initPipeFd), \"init\")\n\tdefer initPipe.Close()\n\n\t// Set up logging. This is used rarely, and mostly for init debugging.\n\n\t// Passing log level is optional; currently libcontainer/integration does not do it.\n\tif levelStr := os.Getenv(\"_LIBCONTAINER_LOGLEVEL\"); levelStr != \"\" {\n\t\tlogLevel, err := strconv.Atoi(levelStr)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"unable to convert _LIBCONTAINER_LOGLEVEL: %w\", err)\n\t\t}\n\t\tlogrus.SetLevel(logrus.Level(logLevel))\n\t}\n\n\tlogFd, err := strconv.Atoi(os.Getenv(\"_LIBCONTAINER_LOGPIPE\"))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unable to convert _LIBCONTAINER_LOGPIPE: %w\", err)\n\t}\n\tlogPipe := os.NewFile(uintptr(logFd), \"logpipe\")\n\tdefer logPipe.Close()\n\n\tlogrus.SetOutput(logPipe)\n\tlogrus.SetFormatter(new(logrus.JSONFormatter))\n\tlogrus.Debug(\"child process in init()\")\n\n\t// Only init processes have FIFOFD.\n\tvar fifoFile *os.File\n\tenvInitType := os.Getenv(\"_LIBCONTAINER_INITTYPE\")\n\tit := initType(envInitType)\n\tif it == initStandard {\n\t\tfifoFd, err := strconv.Atoi(os.Getenv(\"_LIBCONTAINER_FIFOFD\"))\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"unable to convert _LIBCONTAINER_FIFOFD: %w\", err)\n\t\t}\n\t\tfifoFile = os.NewFile(uintptr(fifoFd), \"initfifo\")\n\t\tdefer fifoFile.Close()\n\t}\n\n\tvar consoleSocket *os.File\n\tif envConsole := os.Getenv(\"_LIBCONTAINER_CONSOLE\"); envConsole != \"\" {\n\t\tconsole, err := strconv.Atoi(envConsole)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"unable to convert _LIBCONTAINER_CONSOLE: %w\", err)\n\t\t}\n\t\tconsoleSocket = os.NewFile(uintptr(console), \"console-socket\")\n\t\tdefer consoleSocket.Close()\n\t}\n\n\tvar pidfdSocket *os.File\n\tif envSockFd := os.Getenv(\"_LIBCONTAINER_PIDFD_SOCK\"); envSockFd != \"\" {\n\t\tsockFd, err := strconv.Atoi(envSockFd)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"unable to convert _LIBCONTAINER_PIDFD_SOCK: %w\", err)\n\t\t}\n\t\tpidfdSocket = os.NewFile(uintptr(sockFd), \"pidfd-socket\")\n\t\tdefer pidfdSocket.Close()\n\t}\n\n\t// From here on, we don't need current process environment. It is not\n\t// used directly anywhere below this point, but let's clear it anyway.\n\tos.Clearenv()\n\n\tdefer func() {\n\t\tif err := recover(); err != nil {\n\t\t\tif err2, ok := err.(error); ok {\n\t\t\t\tretErr = fmt.Errorf(\"panic from initialization: %w, %s\", err2, debug.Stack())\n\t\t\t} else {\n\t\t\t\tretErr = fmt.Errorf(\"panic from initialization: %v, %s\", err, debug.Stack())\n\t\t\t}\n\t\t}\n\t}()\n\n\tvar config initConfig\n\tif err := json.NewDecoder(initPipe).Decode(&config); err != nil {\n\t\treturn err\n\t}\n\n\t// If init succeeds, it will not return, hence none of the defers will be called.\n\treturn containerInit(it, &config, syncPipe, consoleSocket, pidfdSocket, fifoFile, logPipe)\n}\n\nfunc containerInit(t initType, config *initConfig, pipe *syncSocket, consoleSocket, pidfdSocket, fifoFile, logPipe *os.File) error {\n\t// Clean the RLIMIT_NOFILE cache in go runtime.\n\t// Issue: https://github.com/opencontainers/runc/issues/4195\n\tmaybeClearRlimitNofileCache(config.Rlimits)\n\n\tswitch t {\n\tcase initSetns:\n\t\ti := &linuxSetnsInit{\n\t\t\tpipe:          pipe,\n\t\t\tconsoleSocket: consoleSocket,\n\t\t\tpidfdSocket:   pidfdSocket,\n\t\t\tconfig:        config,\n\t\t\tlogPipe:       logPipe,\n\t\t}\n\t\treturn i.Init()\n\tcase initStandard:\n\t\ti := &linuxStandardInit{\n\t\t\tpipe:          pipe,\n\t\t\tconsoleSocket: consoleSocket,\n\t\t\tpidfdSocket:   pidfdSocket,\n\t\t\tparentPid:     unix.Getppid(),\n\t\t\tconfig:        config,\n\t\t\tfifoFile:      fifoFile,\n\t\t\tlogPipe:       logPipe,\n\t\t}\n\t\treturn i.Init()\n\t}\n\treturn fmt.Errorf(\"unknown init type %q\", t)\n}\n\n// verifyCwd ensures that the current directory is actually inside the mount\n// namespace root of the current process.\nfunc verifyCwd() error {\n\t// getcwd(2) on Linux detects if cwd is outside of the rootfs of the\n\t// current mount namespace root, and in that case prefixes \"(unreachable)\"\n\t// to the returned string. glibc's getcwd(3) and Go's Getwd() both detect\n\t// when this happens and return ENOENT rather than returning a non-absolute\n\t// path. In both cases we can therefore easily detect if we have an invalid\n\t// cwd by checking the return value of getcwd(3). See getcwd(3) for more\n\t// details, and CVE-2024-21626 for the security issue that motivated this\n\t// check.\n\t//\n\t// We do not use os.Getwd() here because it has a workaround for\n\t// $PWD which involves doing stat(.), which can fail if the current\n\t// directory is inaccessible to the container process.\n\tif wd, err := linux.Getwd(); errors.Is(err, unix.ENOENT) {\n\t\treturn errors.New(\"current working directory is outside of container mount namespace root -- possible container breakout detected\")\n\t} else if err != nil {\n\t\treturn fmt.Errorf(\"failed to verify if current working directory is safe: %w\", err)\n\t} else if !filepath.IsAbs(wd) {\n\t\t// We shouldn't ever hit this, but check just in case.\n\t\treturn fmt.Errorf(\"current working directory is not absolute -- possible container breakout detected: cwd is %q\", wd)\n\t}\n\treturn nil\n}\n\n// finalizeNamespace drops the caps, sets the correct user\n// and working dir, and closes any leaked file descriptors\n// before executing the command inside the namespace.\nfunc finalizeNamespace(config *initConfig) error {\n\t// Ensure that all unwanted fds we may have accidentally\n\t// inherited are marked close-on-exec so they stay out of the\n\t// container\n\tif err := utils.CloseExecFrom(config.PassedFilesCount + 3); err != nil {\n\t\treturn fmt.Errorf(\"error closing exec fds: %w\", err)\n\t}\n\n\t// we only do chdir if it's specified\n\tdoChdir := config.Cwd != \"\"\n\tif doChdir {\n\t\t// First, attempt the chdir before setting up the user.\n\t\t// This could allow us to access a directory that the user running runc can access\n\t\t// but the container user cannot.\n\t\terr := unix.Chdir(config.Cwd)\n\t\tswitch {\n\t\tcase err == nil:\n\t\t\tdoChdir = false\n\t\tcase errors.Is(err, os.ErrPermission):\n\t\t\t// If we hit an EPERM, we should attempt again after setting up user.\n\t\t\t// This will allow us to successfully chdir if the container user has access\n\t\t\t// to the directory, but the user running runc does not.\n\t\t\t// This is useful in cases where the cwd is also a volume that's been chowned to the container user.\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"chdir to cwd (%q) set in config.json failed: %w\", config.Cwd, err)\n\t\t}\n\t}\n\n\t// We should set envs after we are in the jail of the container.\n\t// Please see https://github.com/opencontainers/runc/issues/4688\n\tenv, err := prepareEnv(config.Env, config.UID)\n\tif err != nil {\n\t\treturn err\n\t}\n\tconfig.Env = env\n\n\tw, err := capabilities.New(config.Capabilities)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// drop capabilities in bounding set before changing user\n\tif err := w.ApplyBoundingSet(); err != nil {\n\t\treturn fmt.Errorf(\"unable to apply bounding set: %w\", err)\n\t}\n\t// preserve existing capabilities while we change users\n\tif err := system.SetKeepCaps(); err != nil {\n\t\treturn fmt.Errorf(\"unable to set keep caps: %w\", err)\n\t}\n\tif err := setupUser(config); err != nil {\n\t\treturn fmt.Errorf(\"unable to setup user: %w\", err)\n\t}\n\t// Change working directory AFTER the user has been set up, if we haven't done it yet.\n\tif doChdir {\n\t\tif err := unix.Chdir(config.Cwd); err != nil {\n\t\t\treturn fmt.Errorf(\"chdir to cwd (%q) set in config.json failed: %w\", config.Cwd, err)\n\t\t}\n\t}\n\t// Make sure our final working directory is inside the container.\n\tif err := verifyCwd(); err != nil {\n\t\treturn err\n\t}\n\tif err := system.ClearKeepCaps(); err != nil {\n\t\treturn fmt.Errorf(\"unable to clear keep caps: %w\", err)\n\t}\n\tif err := w.ApplyCaps(); err != nil {\n\t\treturn fmt.Errorf(\"unable to apply caps: %w\", err)\n\t}\n\treturn nil\n}\n\n// setupConsole sets up the console from inside the container, and sends the\n// master pty fd to the config.Pipe (using cmsg). This is done to ensure that\n// consoles are scoped to a container properly (see runc#814 and the many\n// issues related to that). This has to be run *after* we've pivoted to the new\n// rootfs (and the users' configuration is entirely set up).\nfunc setupConsole(socket *os.File, config *initConfig, mount bool) error {\n\tdefer socket.Close()\n\t// At this point, /dev/ptmx points to something that we would expect. We\n\t// used to change the owner of the slave path, but since the /dev/pts mount\n\t// can have gid=X set (at the users' option). So touching the owner of the\n\t// slave PTY is not necessary, as the kernel will handle that for us. Note\n\t// however, that setupUser (specifically fixStdioPermissions) *will* change\n\t// the UID owner of the console to be the user the process will run as (so\n\t// they can actually control their console).\n\n\tpty, peerPty, err := safeAllocPty()\n\tif err != nil {\n\t\treturn err\n\t}\n\t// After we return from here, we don't need the console anymore.\n\tdefer pty.Close()\n\tdefer peerPty.Close()\n\n\tif config.ConsoleHeight != 0 && config.ConsoleWidth != 0 {\n\t\terr = pty.Resize(console.WinSize{\n\t\t\tHeight: config.ConsoleHeight,\n\t\t\tWidth:  config.ConsoleWidth,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Mount the console inside our rootfs.\n\tif mount {\n\t\tif err := mountConsole(peerPty); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t// While we can access console.master, using the API is a good idea.\n\tif err := utils.SendRawFd(socket, pty.Name(), pty.Fd()); err != nil {\n\t\treturn err\n\t}\n\truntime.KeepAlive(pty)\n\n\t// Now, dup over all the things.\n\treturn dupStdio(peerPty)\n}\n\n// syncParentReady sends to the given pipe a JSON payload which indicates that\n// the init is ready to Exec the child process. It then waits for the parent to\n// indicate that it is cleared to Exec.\nfunc syncParentReady(pipe *syncSocket) error {\n\t// Tell parent.\n\tif err := writeSync(pipe, procReady); err != nil {\n\t\treturn err\n\t}\n\t// Wait for parent to give the all-clear.\n\treturn readSync(pipe, procRun)\n}\n\n// syncParentHooks sends to the given pipe a JSON payload which indicates that\n// the parent should execute pre-start hooks. It then waits for the parent to\n// indicate that it is cleared to resume.\nfunc syncParentHooks(pipe *syncSocket) error {\n\t// Tell parent.\n\tif err := writeSync(pipe, procHooks); err != nil {\n\t\treturn err\n\t}\n\t// Wait for parent to give the all-clear.\n\treturn readSync(pipe, procHooksDone)\n}\n\n// syncParentSeccomp sends the fd associated with the seccomp file descriptor\n// to the parent, and wait for the parent to do pidfd_getfd() to grab a copy.\nfunc syncParentSeccomp(pipe *syncSocket, seccompFd int) error {\n\tif seccompFd == -1 {\n\t\treturn nil\n\t}\n\tdefer unix.Close(seccompFd)\n\n\t// Tell parent to grab our fd.\n\t//\n\t// Notably, we do not use writeSyncFile here because a container might have\n\t// an SCMP_ACT_NOTIFY action on sendmsg(2) so we need to use the smallest\n\t// possible number of system calls here because all of those syscalls\n\t// cannot be used with SCMP_ACT_NOTIFY as a result (any syscall we use here\n\t// before the parent gets the file descriptor would deadlock \"runc init\" if\n\t// we allowed it for SCMP_ACT_NOTIFY). See seccomp.InitSeccomp() for more\n\t// details.\n\tif err := writeSyncArg(pipe, procSeccomp, seccompFd); err != nil {\n\t\treturn err\n\t}\n\t// Wait for parent to tell us they've grabbed the seccompfd.\n\treturn readSync(pipe, procSeccompDone)\n}\n\n// setupUser changes the groups, gid, and uid for the user inside the container.\nfunc setupUser(config *initConfig) error {\n\t// Before we change to the container's user make sure that the processes\n\t// STDIO is correctly owned by the user that we are switching to.\n\tif err := fixStdioPermissions(config.UID); err != nil {\n\t\treturn err\n\t}\n\n\t// We don't need to use /proc/thread-self here because setgroups is a\n\t// per-userns file and thus is global to all threads in a thread-group.\n\t// This lets us avoid having to do runtime.LockOSThread.\n\tvar setgroups []byte\n\tsetgroupsFile, err := pathrs.ProcSelfOpen(\"setgroups\", unix.O_RDONLY)\n\tif err == nil {\n\t\tsetgroups, err = io.ReadAll(setgroupsFile)\n\t\t_ = setgroupsFile.Close()\n\t}\n\tif err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\treturn err\n\t}\n\n\t// This isn't allowed in an unprivileged user namespace since Linux 3.19.\n\t// There's nothing we can do about /etc/group entries, so we silently\n\t// ignore setting groups here (since the user didn't explicitly ask us to\n\t// set the group).\n\tallowSupGroups := !config.Config.RootlessEUID && string(bytes.TrimSpace(setgroups)) != \"deny\"\n\n\tif allowSupGroups {\n\t\tif err := unix.Setgroups(config.AdditionalGroups); err != nil {\n\t\t\treturn &os.SyscallError{Syscall: \"setgroups\", Err: err}\n\t\t}\n\t}\n\n\tif err := unix.Setgid(config.GID); err != nil {\n\t\tif err == unix.EINVAL {\n\t\t\treturn fmt.Errorf(\"cannot setgid to unmapped gid %d in user namespace\", config.GID)\n\t\t}\n\t\treturn err\n\t}\n\tif err := unix.Setuid(config.UID); err != nil {\n\t\tif err == unix.EINVAL {\n\t\t\treturn fmt.Errorf(\"cannot setuid to unmapped uid %d in user namespace\", config.UID)\n\t\t}\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// fixStdioPermissions fixes the permissions of PID 1's STDIO within the container to the specified uid.\n// The ownership needs to match because it is created outside of the container and needs to be\n// localized.\nfunc fixStdioPermissions(uid int) error {\n\tfor _, file := range []*os.File{os.Stdin, os.Stdout, os.Stderr} {\n\t\tvar s unix.Stat_t\n\t\tif err := unix.Fstat(int(file.Fd()), &s); err != nil {\n\t\t\treturn &os.PathError{Op: \"fstat\", Path: file.Name(), Err: err}\n\t\t}\n\n\t\t// Skip chown if:\n\t\t// - uid is already the one we want, or\n\t\t// - fd is opened to /dev/null.\n\t\tif int(s.Uid) == uid || isDevNull(&s) {\n\t\t\tcontinue\n\t\t}\n\n\t\t// We only change the uid (as it is possible for the mount to\n\t\t// prefer a different gid, and there's no reason for us to change it).\n\t\t// The reason why we don't just leave the default uid=X mount setup is\n\t\t// that users expect to be able to actually use their console. Without\n\t\t// this code, you couldn't effectively run as a non-root user inside a\n\t\t// container and also have a console set up.\n\t\tif err := file.Chown(uid, -1); err != nil {\n\t\t\t// If we've hit an EPERM then the inode's current owner\n\t\t\t// is not mapped in our user namespace (in particular,\n\t\t\t// privileged_wrt_inode_uidgid() has failed). Read-only\n\t\t\t// /dev can result in EROFS error. In any case, it's\n\t\t\t// better for us to just not touch the stdio rather\n\t\t\t// than bail at this point.\n\t\t\t// EINVAL should never happen, as it would mean the uid\n\t\t\t// is not mapped, we expect this function to be called\n\t\t\t// with a mapped uid.\n\t\t\tif errors.Is(err, unix.EPERM) || errors.Is(err, unix.EROFS) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// setupNetwork sets up and initializes any network interface inside the container.\nfunc setupNetwork(config *initConfig) error {\n\tfor _, config := range config.Networks {\n\t\tstrategy, err := getStrategy(config.Type)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := strategy.initialize(config); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc setupRoute(config *configs.Config) error {\n\tfor _, config := range config.Routes {\n\t\t_, dst, err := net.ParseCIDR(config.Destination)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsrc := net.ParseIP(config.Source)\n\t\tif src == nil {\n\t\t\treturn fmt.Errorf(\"Invalid source for route: %s\", config.Source)\n\t\t}\n\t\tgw := net.ParseIP(config.Gateway)\n\t\tif gw == nil {\n\t\t\treturn fmt.Errorf(\"Invalid gateway for route: %s\", config.Gateway)\n\t\t}\n\t\tl, err := netlink.LinkByName(config.InterfaceName)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\troute := &netlink.Route{\n\t\t\tScope:     netlink.SCOPE_UNIVERSE,\n\t\t\tDst:       dst,\n\t\t\tSrc:       src,\n\t\t\tGw:        gw,\n\t\t\tLinkIndex: l.Attrs().Index,\n\t\t}\n\t\tif err := netlink.RouteAdd(route); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc maybeClearRlimitNofileCache(limits []configs.Rlimit) {\n\tfor _, rlimit := range limits {\n\t\tif rlimit.Type == syscall.RLIMIT_NOFILE {\n\t\t\tsystem.ClearRlimitNofileCache(&syscall.Rlimit{\n\t\t\t\tCur: rlimit.Soft,\n\t\t\t\tMax: rlimit.Hard,\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc setupRlimits(limits []configs.Rlimit, pid int) error {\n\tfor _, rlimit := range limits {\n\t\tif err := unix.Prlimit(pid, rlimit.Type, &unix.Rlimit{Max: rlimit.Hard, Cur: rlimit.Soft}, nil); err != nil {\n\t\t\treturn fmt.Errorf(\"error setting rlimit type %v: %w\", rlimit.Type, err)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc setupScheduler(config *initConfig) error {\n\tif config.Scheduler == nil {\n\t\treturn nil\n\t}\n\tattr, err := configs.ToSchedAttr(config.Scheduler)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := unix.SchedSetAttr(0, attr, 0); err != nil {\n\t\tif errors.Is(err, unix.EPERM) && config.Config.Cgroups.CpusetCpus != \"\" {\n\t\t\treturn errors.New(\"process scheduler can't be used together with AllowedCPUs\")\n\t\t}\n\t\treturn fmt.Errorf(\"error setting scheduler: %w\", err)\n\t}\n\treturn nil\n}\n\nfunc setupIOPriority(config *initConfig) error {\n\tconst ioprioWhoPgrp = 1\n\n\tioprio := config.IOPriority\n\tif ioprio == nil {\n\t\treturn nil\n\t}\n\tclass := 0\n\tswitch ioprio.Class {\n\tcase specs.IOPRIO_CLASS_RT:\n\t\tclass = 1\n\tcase specs.IOPRIO_CLASS_BE:\n\t\tclass = 2\n\tcase specs.IOPRIO_CLASS_IDLE:\n\t\tclass = 3\n\tdefault:\n\t\treturn fmt.Errorf(\"invalid io priority class: %s\", ioprio.Class)\n\t}\n\n\t// Combine class and priority into a single value\n\t// https://github.com/torvalds/linux/blob/v5.18/include/uapi/linux/ioprio.h#L5-L17\n\tiop := (class << 13) | ioprio.Priority\n\t_, _, errno := unix.RawSyscall(unix.SYS_IOPRIO_SET, ioprioWhoPgrp, 0, uintptr(iop))\n\tif errno != 0 {\n\t\treturn fmt.Errorf(\"failed to set io priority: %w\", errno)\n\t}\n\treturn nil\n}\n\nfunc setupMemoryPolicy(config *configs.Config) error {\n\tmpol := config.MemoryPolicy\n\tif mpol == nil {\n\t\treturn nil\n\t}\n\treturn linux.SetMempolicy(mpol.Mode|mpol.Flags, config.MemoryPolicy.Nodes)\n}\n\nfunc setupPersonality(config *configs.Config) error {\n\treturn system.SetLinuxPersonality(config.Personality.Domain)\n}\n\n// signalAllProcesses freezes then iterates over all the processes inside the\n// manager's cgroups sending the signal s to them.\nfunc signalAllProcesses(m cgroups.Manager, s unix.Signal) error {\n\tif !m.Exists() {\n\t\treturn ErrCgroupNotExist\n\t}\n\t// Use cgroup.kill, if available.\n\tif s == unix.SIGKILL {\n\t\tif p := m.Path(\"\"); p != \"\" { // Either cgroup v2 or hybrid.\n\t\t\terr := cgroups.WriteFile(p, \"cgroup.kill\", \"1\")\n\t\t\tif err == nil || !errors.Is(err, os.ErrNotExist) {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t// Fallback to old implementation.\n\t\t}\n\t}\n\n\tif err := m.Freeze(cgroups.Frozen); err != nil {\n\t\tlogrus.Warn(err)\n\t}\n\tpids, err := m.GetAllPids()\n\tif err != nil {\n\t\tif err := m.Freeze(cgroups.Thawed); err != nil {\n\t\t\tlogrus.Warn(err)\n\t\t}\n\t\treturn err\n\t}\n\tfor _, pid := range pids {\n\t\terr := unix.Kill(pid, s)\n\t\tif err != nil && err != unix.ESRCH {\n\t\t\tlogrus.Warnf(\"kill %d: %v\", pid, err)\n\t\t}\n\t}\n\tif err := m.Freeze(cgroups.Thawed); err != nil {\n\t\tlogrus.Warn(err)\n\t}\n\n\treturn nil\n}\n\n// setupPidfd opens a process file descriptor of init process, and sends the\n// file descriptor back to the socket.\nfunc setupPidfd(socket *os.File, initType string) error {\n\tdefer socket.Close()\n\n\tpidFd, err := unix.PidfdOpen(os.Getpid(), 0)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to pidfd_open: %w\", err)\n\t}\n\n\tif err := utils.SendRawFd(socket, initType, uintptr(pidFd)); err != nil {\n\t\tunix.Close(pidFd)\n\t\treturn fmt.Errorf(\"failed to send pidfd on socket: %w\", err)\n\t}\n\treturn unix.Close(pidFd)\n}\n"
  },
  {
    "path": "libcontainer/integration/bench_test.go",
    "content": "package integration\n\nimport (\n\t\"bytes\"\n\t\"math/rand\"\n\t\"os\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n)\n\nfunc BenchmarkExecTrue(b *testing.B) {\n\tconfig := newTemplateConfig(b, nil)\n\tcontainer, err := newContainer(b, config)\n\tok(b, err)\n\tdefer destroyContainer(container)\n\n\t// Execute a first process in the container\n\tstdinR, stdinW, err := os.Pipe()\n\tok(b, err)\n\tprocess := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\terr = container.Run(process)\n\t_ = stdinR.Close()\n\tdefer func() {\n\t\t_ = stdinW.Close()\n\t\twaitProcess(process, b)\n\t}()\n\tok(b, err)\n\n\tfor b.Loop() {\n\t\texec := &libcontainer.Process{\n\t\t\tCwd:      \"/\",\n\t\t\tArgs:     []string{\"/bin/true\"},\n\t\t\tEnv:      standardEnvironment,\n\t\t\tLogLevel: \"0\", // Minimize forwardChildLogs involvement.\n\t\t}\n\t\terr := container.Run(exec)\n\t\tok(b, err)\n\t\twaitProcess(exec, b)\n\t}\n\tb.StopTimer()\n}\n\nfunc genBigEnv(count int) []string {\n\trandStr := func(length int) string {\n\t\tconst charset = \"abcdefghijklmnopqrstuvwxyz0123456789_\"\n\t\tb := make([]byte, length)\n\t\tfor i := range b {\n\t\t\tb[i] = charset[rand.Intn(len(charset))]\n\t\t}\n\t\treturn string(b)\n\t}\n\n\tenvs := make([]string, count)\n\tfor i := range count {\n\t\tkey := strings.ToUpper(randStr(10))\n\t\tvalue := randStr(20)\n\t\tenvs[i] = key + \"=\" + value\n\t}\n\n\treturn envs\n}\n\nfunc BenchmarkExecInBigEnv(b *testing.B) {\n\tconfig := newTemplateConfig(b, nil)\n\tcontainer, err := newContainer(b, config)\n\tok(b, err)\n\tdefer destroyContainer(container)\n\n\t// Execute a first process in the container\n\tstdinR, stdinW, err := os.Pipe()\n\tok(b, err)\n\tprocess := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\terr = container.Run(process)\n\t_ = stdinR.Close()\n\tdefer func() {\n\t\t_ = stdinW.Close()\n\t\twaitProcess(process, b)\n\t}()\n\tok(b, err)\n\n\tconst numEnv = 5000\n\tenv := append(standardEnvironment, genBigEnv(numEnv)...)\n\t// Construct the expected output.\n\tvar wantOut bytes.Buffer\n\tfor _, e := range env {\n\t\twantOut.WriteString(e + \"\\n\")\n\t}\n\n\tfor b.Loop() {\n\t\tbuffers := newStdBuffers()\n\t\texec := &libcontainer.Process{\n\t\t\tCwd:    \"/\",\n\t\t\tArgs:   []string{\"env\"},\n\t\t\tEnv:    env,\n\t\t\tStdin:  buffers.Stdin,\n\t\t\tStdout: buffers.Stdout,\n\t\t\tStderr: buffers.Stderr,\n\t\t}\n\t\terr = container.Run(exec)\n\t\tok(b, err)\n\t\twaitProcess(exec, b)\n\t\tif !bytes.Equal(buffers.Stdout.Bytes(), wantOut.Bytes()) {\n\t\t\tb.Fatalf(\"unexpected output: %s (stderr: %s)\", buffers.Stdout, buffers.Stderr)\n\t\t}\n\t}\n\tb.StopTimer()\n}\n"
  },
  {
    "path": "libcontainer/integration/checkpoint_test.go",
    "content": "package integration\n\nimport (\n\t\"bytes\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc criuFeature(feature string) bool {\n\treturn exec.Command(\"criu\", \"check\", \"--feature\", feature).Run() == nil\n}\n\nfunc TestUsernsCheckpoint(t *testing.T) {\n\ttestCheckpoint(t, true)\n}\n\nfunc TestCheckpoint(t *testing.T) {\n\ttestCheckpoint(t, false)\n}\n\nfunc testCheckpoint(t *testing.T, userns bool) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tif _, err := exec.LookPath(\"criu\"); err != nil {\n\t\tt.Skipf(\"criu binary not found: %v\", err)\n\t}\n\n\t// Workaround for https://github.com/opencontainers/runc/issues/3532.\n\tout, err := exec.Command(\"rpm\", \"-q\", \"criu\").CombinedOutput()\n\tif err == nil && regexp.MustCompile(`^criu-3\\.17-[123]\\.el9`).Match(out) {\n\t\tt.Skip(\"Test requires criu >= 3.17-4 on CentOS Stream 9.\")\n\t}\n\n\tif userns && !criuFeature(\"userns\") {\n\t\tt.Skip(\"Test requires userns\")\n\t}\n\n\tconfig := newTemplateConfig(t, &tParam{userns: userns})\n\tstateDir := t.TempDir()\n\n\tcontainer, err := libcontainer.Create(stateDir, \"test\", config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\n\tvar stdout bytes.Buffer\n\n\tpconfig := libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"cat\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  stdinR,\n\t\tStdout: &stdout,\n\t\tInit:   true,\n\t}\n\n\terr = container.Run(&pconfig)\n\t_ = stdinR.Close()\n\tdefer stdinW.Close()\n\tok(t, err)\n\n\tpid, err := pconfig.Pid()\n\tok(t, err)\n\n\tprocess, err := os.FindProcess(pid)\n\tok(t, err)\n\n\ttmp := t.TempDir()\n\tvar parentImage string\n\n\t// Test pre-dump if mem_dirty_track is available.\n\tif criuFeature(\"mem_dirty_track\") {\n\t\tparentImage = \"../criu-parent\"\n\t\tparentDir := filepath.Join(tmp, \"criu-parent\")\n\t\tpreDumpOpts := &libcontainer.CriuOpts{\n\t\t\tImagesDirectory: parentDir,\n\t\t\tWorkDirectory:   parentDir,\n\t\t\tPreDump:         true,\n\t\t}\n\n\t\tif err := container.Checkpoint(preDumpOpts); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\n\t\tstate, err := container.Status()\n\t\tok(t, err)\n\n\t\tif state != libcontainer.Running {\n\t\t\tt.Fatal(\"Unexpected preDump state: \", state)\n\t\t}\n\t}\n\n\timagesDir := filepath.Join(tmp, \"criu\")\n\n\tcheckpointOpts := &libcontainer.CriuOpts{\n\t\tImagesDirectory: imagesDir,\n\t\tWorkDirectory:   imagesDir,\n\t\tParentImage:     parentImage,\n\t}\n\n\tif err := container.Checkpoint(checkpointOpts); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tstate, err := container.Status()\n\tok(t, err)\n\n\tif state != libcontainer.Stopped {\n\t\tt.Fatal(\"Unexpected state checkpoint: \", state)\n\t}\n\n\t_ = stdinW.Close()\n\t_, err = process.Wait()\n\tok(t, err)\n\n\t// reload the container\n\tcontainer, err = libcontainer.Load(stateDir, \"test\")\n\tok(t, err)\n\n\trestoreStdinR, restoreStdinW, err := os.Pipe()\n\tok(t, err)\n\n\tvar restoreStdout bytes.Buffer\n\trestoreProcessConfig := &libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tStdin:  restoreStdinR,\n\t\tStdout: &restoreStdout,\n\t\tInit:   true,\n\t}\n\n\terr = container.Restore(restoreProcessConfig, checkpointOpts)\n\t_ = restoreStdinR.Close()\n\tdefer restoreStdinW.Close()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tstate, err = container.Status()\n\tok(t, err)\n\tif state != libcontainer.Running {\n\t\tt.Fatal(\"Unexpected restore state: \", state)\n\t}\n\n\tpid, err = restoreProcessConfig.Pid()\n\tok(t, err)\n\n\terr = unix.Kill(pid, 0)\n\tok(t, err)\n\n\t_, err = restoreStdinW.WriteString(\"Hello!\")\n\tok(t, err)\n\n\t_ = restoreStdinW.Close()\n\twaitProcess(restoreProcessConfig, t)\n\n\toutput := restoreStdout.String()\n\tif !strings.Contains(output, \"Hello!\") {\n\t\tt.Fatal(\"Did not restore the pipe correctly:\", output)\n\t}\n}\n"
  },
  {
    "path": "libcontainer/integration/doc.go",
    "content": "// Package integration is used for integration testing of libcontainer.\npackage integration\n"
  },
  {
    "path": "libcontainer/integration/exec_test.go",
    "content": "package integration\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"slices\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\t\"testing\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/systemd\"\n\t\"github.com/opencontainers/runc/internal/linux\"\n\t\"github.com/opencontainers/runc/internal/pathrs\"\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/internal/userns\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc TestExecPS(t *testing.T) {\n\ttestExecPS(t, false)\n}\n\nfunc TestUsernsExecPS(t *testing.T) {\n\tneedUserNS(t)\n\ttestExecPS(t, true)\n}\n\nfunc testExecPS(t *testing.T, userns bool) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\tconfig := newTemplateConfig(t, &tParam{userns: userns})\n\n\tbuffers := runContainerOk(t, config, \"ps\", \"-o\", \"pid,user,comm\")\n\tlines := strings.Split(buffers.Stdout.String(), \"\\n\")\n\tif len(lines) < 2 {\n\t\tt.Fatalf(\"more than one process running for output %q\", buffers.Stdout.String())\n\t}\n\texpected := `1 root     ps`\n\tactual := strings.Trim(lines[1], \"\\n \")\n\tif actual != expected {\n\t\tt.Fatalf(\"expected output %q but received %q\", expected, actual)\n\t}\n}\n\nfunc TestIPCPrivate(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tl, err := os.Readlink(\"/proc/1/ns/ipc\")\n\tok(t, err)\n\n\tconfig := newTemplateConfig(t, nil)\n\tbuffers := runContainerOk(t, config, \"readlink\", \"/proc/self/ns/ipc\")\n\n\tif actual := strings.Trim(buffers.Stdout.String(), \"\\n\"); actual == l {\n\t\tt.Fatalf(\"ipc link should be private to the container but equals host %q %q\", actual, l)\n\t}\n}\n\nfunc TestIPCHost(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tl, err := os.Readlink(\"/proc/1/ns/ipc\")\n\tok(t, err)\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Namespaces.Remove(configs.NEWIPC)\n\tbuffers := runContainerOk(t, config, \"readlink\", \"/proc/self/ns/ipc\")\n\n\tif actual := strings.Trim(buffers.Stdout.String(), \"\\n\"); actual != l {\n\t\tt.Fatalf(\"ipc link not equal to host link %q %q\", actual, l)\n\t}\n}\n\nfunc TestIPCJoinPath(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tl, err := os.Readlink(\"/proc/1/ns/ipc\")\n\tok(t, err)\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Namespaces.Add(configs.NEWIPC, \"/proc/1/ns/ipc\")\n\tbuffers := runContainerOk(t, config, \"readlink\", \"/proc/self/ns/ipc\")\n\n\tif actual := strings.Trim(buffers.Stdout.String(), \"\\n\"); actual != l {\n\t\tt.Fatalf(\"ipc link not equal to host link %q %q\", actual, l)\n\t}\n}\n\nfunc TestIPCBadPath(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Namespaces.Add(configs.NEWIPC, \"/proc/1/ns/ipcc\")\n\n\tif _, _, err := runContainer(t, config, \"true\"); err == nil {\n\t\tt.Fatal(\"container succeeded with bad ipc path\")\n\t}\n}\n\nfunc TestRlimit(t *testing.T) {\n\ttestRlimit(t, false)\n}\n\nfunc TestUsernsRlimit(t *testing.T) {\n\tneedUserNS(t)\n\ttestRlimit(t, true)\n}\n\nfunc testRlimit(t *testing.T, userns bool) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, &tParam{userns: userns})\n\n\t// Ensure limit is lower than what the config requests to test that in a user namespace\n\t// the Setrlimit call happens early enough that we still have permissions to raise the limit.\n\t// Do not change the Cur value to be equal to the Max value, please see:\n\t// https://github.com/opencontainers/runc/pull/4265#discussion_r1589666444\n\tok(t, unix.Setrlimit(unix.RLIMIT_NOFILE, &unix.Rlimit{\n\t\tMax: 1024,\n\t\tCur: 512,\n\t}))\n\n\tout := runContainerOk(t, config, \"/bin/sh\", \"-c\", \"ulimit -n\")\n\tif limit := strings.TrimSpace(out.Stdout.String()); limit != \"1025\" {\n\t\tt.Fatalf(\"expected rlimit to be 1025, got %s\", limit)\n\t}\n}\n\nfunc TestEnter(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\t// Execute a first process in the container\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\n\tvar stdout, stdout2 bytes.Buffer\n\n\tpconfig := libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"sh\", \"-c\", \"cat && readlink /proc/self/ns/pid\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  stdinR,\n\t\tStdout: &stdout,\n\t\tInit:   true,\n\t}\n\terr = container.Run(&pconfig)\n\t_ = stdinR.Close()\n\tdefer stdinW.Close()\n\tok(t, err)\n\tpid, err := pconfig.Pid()\n\tok(t, err)\n\n\t// Execute another process in the container\n\tstdinR2, stdinW2, err := os.Pipe()\n\tok(t, err)\n\tpconfig2 := libcontainer.Process{\n\t\tCwd: \"/\",\n\t\tEnv: standardEnvironment,\n\t}\n\tpconfig2.Args = []string{\"sh\", \"-c\", \"cat && readlink /proc/self/ns/pid\"}\n\tpconfig2.Stdin = stdinR2\n\tpconfig2.Stdout = &stdout2\n\n\terr = container.Run(&pconfig2)\n\t_ = stdinR2.Close()\n\tdefer stdinW2.Close()\n\tok(t, err)\n\n\tpid2, err := pconfig2.Pid()\n\tok(t, err)\n\n\tprocesses, err := container.Processes()\n\tok(t, err)\n\n\tn := 0\n\tfor i := range processes {\n\t\tif processes[i] == pid || processes[i] == pid2 {\n\t\t\tn++\n\t\t}\n\t}\n\tif n != 2 {\n\t\tt.Fatal(\"unexpected number of processes\", processes, pid, pid2)\n\t}\n\n\t// Wait processes\n\t_ = stdinW2.Close()\n\twaitProcess(&pconfig2, t)\n\n\t_ = stdinW.Close()\n\twaitProcess(&pconfig, t)\n\n\t// Check that both processes live in the same pidns\n\tpidns := stdout.String()\n\tok(t, err)\n\n\tpidns2 := stdout2.String()\n\tok(t, err)\n\n\tif pidns != pidns2 {\n\t\tt.Fatal(\"The second process isn't in the required pid namespace\", pidns, pidns2)\n\t}\n}\n\nfunc TestProcessEnv(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tvar stdout bytes.Buffer\n\tpconfig := libcontainer.Process{\n\t\tCwd:  \"/\",\n\t\tArgs: []string{\"sh\", \"-c\", \"env\"},\n\t\tEnv: []string{\n\t\t\t\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n\t\t\t\"HOSTNAME=integration\",\n\t\t\t\"TERM=xterm\",\n\t\t\t\"FOO=BAR\",\n\t\t},\n\t\tStdin:  nil,\n\t\tStdout: &stdout,\n\t\tInit:   true,\n\t}\n\terr = container.Run(&pconfig)\n\tok(t, err)\n\n\t// Wait for process\n\twaitProcess(&pconfig, t)\n\n\toutputEnv := stdout.String()\n\n\t// Check that the environment has the key/value pair we added\n\tif !strings.Contains(outputEnv, \"FOO=BAR\") {\n\t\tt.Fatal(\"Environment doesn't have the expected FOO=BAR key/value pair: \", outputEnv)\n\t}\n\n\t// Make sure that HOME is set\n\tif !strings.Contains(outputEnv, \"HOME=/root\") {\n\t\tt.Fatal(\"Environment doesn't have HOME set: \", outputEnv)\n\t}\n}\n\nfunc TestProcessEmptyCaps(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Capabilities = nil\n\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tvar stdout bytes.Buffer\n\tpconfig := libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"sh\", \"-c\", \"cat /proc/self/status\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  nil,\n\t\tStdout: &stdout,\n\t\tInit:   true,\n\t}\n\terr = container.Run(&pconfig)\n\tok(t, err)\n\n\t// Wait for process\n\twaitProcess(&pconfig, t)\n\n\toutputStatus := stdout.String()\n\n\tlines := strings.Split(outputStatus, \"\\n\")\n\n\teffectiveCapsLine := \"\"\n\tfor _, l := range lines {\n\t\tline := strings.TrimSpace(l)\n\t\tif strings.Contains(line, \"CapEff:\") {\n\t\t\teffectiveCapsLine = line\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif effectiveCapsLine == \"\" {\n\t\tt.Fatal(\"Couldn't find effective caps: \", outputStatus)\n\t}\n}\n\nfunc TestProcessCaps(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tvar stdout bytes.Buffer\n\tpconfig := libcontainer.Process{\n\t\tCwd:          \"/\",\n\t\tArgs:         []string{\"sh\", \"-c\", \"cat /proc/self/status\"},\n\t\tEnv:          standardEnvironment,\n\t\tStdin:        nil,\n\t\tStdout:       &stdout,\n\t\tCapabilities: &configs.Capabilities{},\n\t\tInit:         true,\n\t}\n\tpconfig.Capabilities.Bounding = append(config.Capabilities.Bounding, \"CAP_NET_ADMIN\")\n\tpconfig.Capabilities.Permitted = append(config.Capabilities.Permitted, \"CAP_NET_ADMIN\")\n\tpconfig.Capabilities.Effective = append(config.Capabilities.Effective, \"CAP_NET_ADMIN\")\n\terr = container.Run(&pconfig)\n\tok(t, err)\n\n\t// Wait for process\n\twaitProcess(&pconfig, t)\n\n\toutputStatus := stdout.String()\n\n\tlines := strings.Split(outputStatus, \"\\n\")\n\n\teffectiveCapsLine := \"\"\n\tfor _, l := range lines {\n\t\tline := strings.TrimSpace(l)\n\t\tif strings.Contains(line, \"CapEff:\") {\n\t\t\teffectiveCapsLine = line\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif effectiveCapsLine == \"\" {\n\t\tt.Fatal(\"Couldn't find effective caps: \", outputStatus)\n\t}\n\n\tparts := strings.Split(effectiveCapsLine, \":\")\n\teffectiveCapsStr := strings.TrimSpace(parts[1])\n\n\teffectiveCaps, err := strconv.ParseUint(effectiveCapsStr, 16, 64)\n\tif err != nil {\n\t\tt.Fatal(\"Could not parse effective caps\", err)\n\t}\n\n\tconst netAdminMask = 1 << unix.CAP_NET_ADMIN\n\tif effectiveCaps&netAdminMask != netAdminMask {\n\t\tt.Fatal(\"CAP_NET_ADMIN is not set as expected\")\n\t}\n}\n\nfunc TestAdditionalGroups(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tvar stdout bytes.Buffer\n\tpconfig := libcontainer.Process{\n\t\tCwd:              \"/\",\n\t\tArgs:             []string{\"sh\", \"-c\", \"id\", \"-Gn\"},\n\t\tEnv:              standardEnvironment,\n\t\tStdin:            nil,\n\t\tStdout:           &stdout,\n\t\tAdditionalGroups: []int{3333, 99999},\n\t\tInit:             true,\n\t}\n\terr = container.Run(&pconfig)\n\tok(t, err)\n\n\t// Wait for process\n\twaitProcess(&pconfig, t)\n\n\toutputGroups := stdout.String()\n\n\t// Check that the groups output has the groups that we specified.\n\tfor _, gid := range pconfig.AdditionalGroups {\n\t\tif !strings.Contains(outputGroups, strconv.Itoa(gid)) {\n\t\t\tt.Errorf(\"Listed groups do not contain gid %d as expected: %v\", gid, outputGroups)\n\t\t}\n\t}\n}\n\nfunc TestFreeze(t *testing.T) {\n\tfor _, systemd := range []bool{true, false} {\n\t\tfor _, set := range []bool{true, false} {\n\t\t\tname := \"\"\n\t\t\tif systemd {\n\t\t\t\tname += \"Systemd\"\n\t\t\t} else {\n\t\t\t\tname += \"FS\"\n\t\t\t}\n\t\t\tif set {\n\t\t\t\tname += \"ViaSet\"\n\t\t\t} else {\n\t\t\t\tname += \"ViaPauseResume\"\n\t\t\t}\n\t\t\tt.Run(name, func(t *testing.T) {\n\t\t\t\ttestFreeze(t, systemd, set)\n\t\t\t})\n\t\t}\n\t}\n}\n\nfunc testFreeze(t *testing.T, withSystemd, useSet bool) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\tif withSystemd && !systemd.IsRunningSystemd() {\n\t\tt.Skip(\"Test requires systemd.\")\n\t}\n\n\tconfig := newTemplateConfig(t, &tParam{systemd: withSystemd})\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\n\tpconfig := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\terr = container.Run(pconfig)\n\t_ = stdinR.Close()\n\tdefer stdinW.Close()\n\tok(t, err)\n\n\tif !useSet {\n\t\terr = container.Pause()\n\t} else {\n\t\tconfig.Cgroups.Resources.Freezer = cgroups.Frozen\n\t\terr = container.Set(*config)\n\t}\n\tok(t, err)\n\n\tstate, err := container.Status()\n\tok(t, err)\n\tif state != libcontainer.Paused {\n\t\tt.Fatal(\"Unexpected state: \", state)\n\t}\n\n\tif !useSet {\n\t\terr = container.Resume()\n\t} else {\n\t\tconfig.Cgroups.Resources.Freezer = cgroups.Thawed\n\t\terr = container.Set(*config)\n\t}\n\tok(t, err)\n\n\t_ = stdinW.Close()\n\twaitProcess(pconfig, t)\n}\n\nfunc TestCpuShares(t *testing.T) {\n\ttestCpuShares(t, false)\n}\n\nfunc TestCpuSharesSystemd(t *testing.T) {\n\tif !systemd.IsRunningSystemd() {\n\t\tt.Skip(\"Test requires systemd.\")\n\t}\n\ttestCpuShares(t, true)\n}\n\nfunc testCpuShares(t *testing.T, systemd bool) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\tif cgroups.IsCgroup2UnifiedMode() {\n\t\tt.Skip(\"cgroup v2 does not support CpuShares\")\n\t}\n\n\tconfig := newTemplateConfig(t, &tParam{systemd: systemd})\n\tconfig.Cgroups.Resources.CpuShares = 1\n\n\tif _, _, err := runContainer(t, config, \"ps\"); err == nil {\n\t\tt.Fatal(\"runContainer should fail with invalid CpuShares\")\n\t}\n}\n\nfunc TestPids(t *testing.T) {\n\ttestPids(t, false)\n}\n\nfunc TestPidsSystemd(t *testing.T) {\n\tif !systemd.IsRunningSystemd() {\n\t\tt.Skip(\"Test requires systemd.\")\n\t}\n\ttestPids(t, true)\n}\n\nfunc mkPtr[T any](v T) *T { return &v }\n\nfunc testPids(t *testing.T, systemd bool) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, &tParam{systemd: systemd})\n\tconfig.Cgroups.Resources.PidsLimit = mkPtr[int64](-1)\n\n\t// Running multiple processes, expecting it to succeed with no pids limit.\n\trunContainerOk(t, config, \"/bin/sh\", \"-c\", \"/bin/true | /bin/true | /bin/true | /bin/true\")\n\n\t// Enforce a permissive limit. This needs to be fairly hand-wavey due to the\n\t// issues with running Go binaries with pids restrictions (see below).\n\tconfig.Cgroups.Resources.PidsLimit = mkPtr[int64](64)\n\trunContainerOk(t, config, \"/bin/sh\", \"-c\", `\n\t/bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true |\n\t/bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true |\n\t/bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true |\n\t/bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true`)\n\n\t// Enforce a restrictive limit. 64 * /bin/true + 1 * shell should cause\n\t// this to fail reliably.\n\tconfig.Cgroups.Resources.PidsLimit = mkPtr[int64](64)\n\tout, _, err := runContainer(t, config, \"/bin/sh\", \"-c\", `\n\t/bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true |\n\t/bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true |\n\t/bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true |\n\t/bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true |\n\t/bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true |\n\t/bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true |\n\t/bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true |\n\t/bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true`)\n\tif err != nil && !strings.Contains(out.String(), \"sh: can't fork\") {\n\t\tt.Fatal(err)\n\t}\n\n\tif err == nil {\n\t\tt.Fatal(\"expected fork() to fail with restrictive pids limit\")\n\t}\n\n\t// Minimal restrictions are not really supported, due to quirks in using Go\n\t// due to the fact that it spawns random processes. While we do our best with\n\t// late setting cgroup values, it's just too unreliable with very small pids.max.\n\t// As such, we don't test that case. YMMV.\n}\n\nfunc TestCgroupResourcesUnifiedErrorOnV1(t *testing.T) {\n\ttestCgroupResourcesUnifiedErrorOnV1(t, false)\n}\n\nfunc TestCgroupResourcesUnifiedErrorOnV1Systemd(t *testing.T) {\n\tif !systemd.IsRunningSystemd() {\n\t\tt.Skip(\"Test requires systemd.\")\n\t}\n\ttestCgroupResourcesUnifiedErrorOnV1(t, true)\n}\n\nfunc testCgroupResourcesUnifiedErrorOnV1(t *testing.T, systemd bool) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\tif cgroups.IsCgroup2UnifiedMode() {\n\t\tt.Skip(\"requires cgroup v1\")\n\t}\n\n\tconfig := newTemplateConfig(t, &tParam{systemd: systemd})\n\tconfig.Cgroups.Resources.Unified = map[string]string{\n\t\t\"memory.min\": \"10240\",\n\t}\n\t_, _, err := runContainer(t, config, \"true\")\n\tif !strings.Contains(err.Error(), cgroups.ErrV1NoUnified.Error()) {\n\t\tt.Fatalf(\"expected error to contain %v, got %v\", cgroups.ErrV1NoUnified, err)\n\t}\n}\n\nfunc TestCgroupResourcesUnified(t *testing.T) {\n\ttestCgroupResourcesUnified(t, false)\n}\n\nfunc TestCgroupResourcesUnifiedSystemd(t *testing.T) {\n\tif !systemd.IsRunningSystemd() {\n\t\tt.Skip(\"Test requires systemd.\")\n\t}\n\ttestCgroupResourcesUnified(t, true)\n}\n\nfunc testCgroupResourcesUnified(t *testing.T, systemd bool) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\tif !cgroups.IsCgroup2UnifiedMode() {\n\t\tt.Skip(\"requires cgroup v2\")\n\t}\n\n\tconfig := newTemplateConfig(t, &tParam{systemd: systemd})\n\tconfig.Cgroups.Resources.Memory = 536870912     // 512M\n\tconfig.Cgroups.Resources.MemorySwap = 536870912 // 512M, i.e. no swap\n\tconfig.Namespaces.Add(configs.NEWCGROUP, \"\")\n\n\ttestCases := []struct {\n\t\tname     string\n\t\tcfg      map[string]string\n\t\texpError string\n\t\tcmd      []string\n\t\texp      string\n\t}{\n\t\t{\n\t\t\tname: \"dummy\",\n\t\t\tcmd:  []string{\"true\"},\n\t\t\texp:  \"\",\n\t\t},\n\t\t{\n\t\t\tname: \"set memory.min\",\n\t\t\tcfg:  map[string]string{\"memory.min\": \"131072\"},\n\t\t\tcmd:  []string{\"cat\", \"/sys/fs/cgroup/memory.min\"},\n\t\t\texp:  \"131072\\n\",\n\t\t},\n\t\t{\n\t\t\tname: \"check memory.max\",\n\t\t\tcmd:  []string{\"cat\", \"/sys/fs/cgroup/memory.max\"},\n\t\t\texp:  strconv.Itoa(int(config.Cgroups.Resources.Memory)) + \"\\n\",\n\t\t},\n\n\t\t{\n\t\t\tname: \"overwrite memory.max\",\n\t\t\tcfg:  map[string]string{\"memory.max\": \"268435456\"},\n\t\t\tcmd:  []string{\"cat\", \"/sys/fs/cgroup/memory.max\"},\n\t\t\texp:  \"268435456\\n\",\n\t\t},\n\t\t{\n\t\t\tname:     \"no such controller error\",\n\t\t\tcfg:      map[string]string{\"privet.vsem\": \"vam\"},\n\t\t\texpError: \"controller \\\"privet\\\" not available\",\n\t\t},\n\t\t{\n\t\t\tname:     \"slash in key error\",\n\t\t\tcfg:      map[string]string{\"bad/key\": \"val\"},\n\t\t\texpError: \"must be a file name (no slashes)\",\n\t\t},\n\t\t{\n\t\t\tname:     \"no dot in key error\",\n\t\t\tcfg:      map[string]string{\"badkey\": \"val\"},\n\t\t\texpError: \"must be in the form CONTROLLER.PARAMETER\",\n\t\t},\n\t\t{\n\t\t\tname:     \"read-only parameter\",\n\t\t\tcfg:      map[string]string{\"pids.current\": \"42\"},\n\t\t\texpError: \"failed to write\",\n\t\t},\n\t}\n\n\tfor _, tc := range testCases {\n\t\tconfig.Cgroups.Resources.Unified = tc.cfg\n\t\tbuffers, ret, err := runContainer(t, config, tc.cmd...)\n\t\tif tc.expError != \"\" {\n\t\t\tif err == nil {\n\t\t\t\tt.Errorf(\"case %q failed: expected error, got nil\", tc.name)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !strings.Contains(err.Error(), tc.expError) {\n\t\t\t\tt.Errorf(\"case %q failed: expected error to contain %q, got %q\", tc.name, tc.expError, err)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\tt.Errorf(\"case %q failed: expected no error, got %v (command: %v, status: %d, stderr: %q)\",\n\t\t\t\ttc.name, err, tc.cmd, ret, buffers.Stderr.String())\n\t\t\tcontinue\n\t\t}\n\t\tif tc.exp != \"\" {\n\t\t\tout := buffers.Stdout.String()\n\t\t\tif out != tc.exp {\n\t\t\t\tt.Errorf(\"expected %q, got %q\", tc.exp, out)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestContainerState(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tl, err := os.Readlink(\"/proc/1/ns/ipc\")\n\tok(t, err)\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Namespaces = configs.Namespaces([]configs.Namespace{\n\t\t{Type: configs.NEWNS},\n\t\t{Type: configs.NEWUTS},\n\t\t// host for IPC\n\t\t// {Type: configs.NEWIPC},\n\t\t{Type: configs.NEWPID},\n\t\t{Type: configs.NEWNET},\n\t})\n\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\n\tp := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\terr = container.Run(p)\n\tok(t, err)\n\t_ = stdinR.Close()\n\tdefer stdinW.Close()\n\n\tst, err := container.State()\n\tok(t, err)\n\n\tl1, err := os.Readlink(st.NamespacePaths[configs.NEWIPC])\n\tok(t, err)\n\tif l1 != l {\n\t\tt.Fatal(\"Container using non-host ipc namespace\")\n\t}\n\t_ = stdinW.Close()\n\twaitProcess(p, t)\n}\n\nfunc TestPassExtraFiles(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tvar stdout bytes.Buffer\n\tpipeout1, pipein1, err := os.Pipe()\n\tok(t, err)\n\tpipeout2, pipein2, err := os.Pipe()\n\tok(t, err)\n\tprocess := libcontainer.Process{\n\t\tCwd:        \"/\",\n\t\tArgs:       []string{\"sh\", \"-c\", \"cd /proc/$$/fd; echo -n *; echo -n 1 >3; echo -n 2 >4\"},\n\t\tEnv:        []string{\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"},\n\t\tExtraFiles: []*os.File{pipein1, pipein2},\n\t\tStdin:      nil,\n\t\tStdout:     &stdout,\n\t\tInit:       true,\n\t}\n\terr = container.Run(&process)\n\tok(t, err)\n\n\twaitProcess(&process, t)\n\n\tout := stdout.String()\n\t// fd 5 is the directory handle for /proc/$$/fd\n\tif out != \"0 1 2 3 4 5\" {\n\t\tt.Fatalf(\"expected to have the file descriptors '0 1 2 3 4 5' passed to init, got '%s'\", out)\n\t}\n\tbuf := []byte{0}\n\t_, err = pipeout1.Read(buf)\n\tok(t, err)\n\tout1 := string(buf)\n\tif out1 != \"1\" {\n\t\tt.Fatalf(\"expected first pipe to receive '1', got '%s'\", out1)\n\t}\n\n\t_, err = pipeout2.Read(buf)\n\tok(t, err)\n\tout2 := string(buf)\n\tif out2 != \"2\" {\n\t\tt.Fatalf(\"expected second pipe to receive '2', got '%s'\", out2)\n\t}\n}\n\nfunc TestSysctl(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Sysctl = map[string]string{\n\t\t\"kernel.shmmni\": \"8192\",\n\t\t\"kernel/shmmax\": \"4194304\",\n\t}\n\tconst (\n\t\tcmd = \"cat shmmni shmmax\"\n\t\texp = \"8192\\n4194304\\n\"\n\t)\n\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tvar stdout bytes.Buffer\n\tpconfig := libcontainer.Process{\n\t\tCwd:    \"/proc/sys/kernel\",\n\t\tArgs:   []string{\"sh\", \"-c\", cmd},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  nil,\n\t\tStdout: &stdout,\n\t\tInit:   true,\n\t}\n\terr = container.Run(&pconfig)\n\tok(t, err)\n\n\t// Wait for process\n\twaitProcess(&pconfig, t)\n\n\tout := stdout.String()\n\tif out != exp {\n\t\tt.Fatalf(\"expected %s, got %s\", exp, out)\n\t}\n}\n\nfunc TestMountCgroupRO(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\tconfig := newTemplateConfig(t, nil)\n\tbuffers := runContainerOk(t, config, \"mount\")\n\n\tmountInfo := buffers.Stdout.String()\n\tlines := strings.SplitSeq(mountInfo, \"\\n\")\n\tfor l := range lines {\n\t\tif strings.HasPrefix(l, \"tmpfs on /sys/fs/cgroup\") {\n\t\t\tif !strings.Contains(l, \"ro\") ||\n\t\t\t\t!strings.Contains(l, \"nosuid\") ||\n\t\t\t\t!strings.Contains(l, \"nodev\") ||\n\t\t\t\t!strings.Contains(l, \"noexec\") {\n\t\t\t\tt.Fatalf(\"Mode expected to contain 'ro,nosuid,nodev,noexec': %s\", l)\n\t\t\t}\n\t\t\tif !strings.Contains(l, \"mode=755\") {\n\t\t\t\tt.Fatalf(\"Mode expected to contain 'mode=755': %s\", l)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif !strings.HasPrefix(l, \"cgroup\") {\n\t\t\tcontinue\n\t\t}\n\t\tif !strings.Contains(l, \"ro\") ||\n\t\t\t!strings.Contains(l, \"nosuid\") ||\n\t\t\t!strings.Contains(l, \"nodev\") ||\n\t\t\t!strings.Contains(l, \"noexec\") {\n\t\t\tt.Fatalf(\"Mode expected to contain 'ro,nosuid,nodev,noexec': %s\", l)\n\t\t}\n\t}\n}\n\nfunc TestMountCgroupRW(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\tconfig := newTemplateConfig(t, nil)\n\t// clear the RO flag from cgroup mount\n\tfor _, m := range config.Mounts {\n\t\tif m.Device == \"cgroup\" {\n\t\t\tm.Flags = defaultMountFlags\n\t\t\tbreak\n\t\t}\n\t}\n\n\tbuffers := runContainerOk(t, config, \"mount\")\n\n\tmountInfo := buffers.Stdout.String()\n\tlines := strings.SplitSeq(mountInfo, \"\\n\")\n\tfor l := range lines {\n\t\tif strings.HasPrefix(l, \"tmpfs on /sys/fs/cgroup\") {\n\t\t\tif !strings.Contains(l, \"rw\") ||\n\t\t\t\t!strings.Contains(l, \"nosuid\") ||\n\t\t\t\t!strings.Contains(l, \"nodev\") ||\n\t\t\t\t!strings.Contains(l, \"noexec\") {\n\t\t\t\tt.Fatalf(\"Mode expected to contain 'rw,nosuid,nodev,noexec': %s\", l)\n\t\t\t}\n\t\t\tif !strings.Contains(l, \"mode=755\") {\n\t\t\t\tt.Fatalf(\"Mode expected to contain 'mode=755': %s\", l)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif !strings.HasPrefix(l, \"cgroup\") {\n\t\t\tcontinue\n\t\t}\n\t\tif !strings.Contains(l, \"rw\") ||\n\t\t\t!strings.Contains(l, \"nosuid\") ||\n\t\t\t!strings.Contains(l, \"nodev\") ||\n\t\t\t!strings.Contains(l, \"noexec\") {\n\t\t\tt.Fatalf(\"Mode expected to contain 'rw,nosuid,nodev,noexec': %s\", l)\n\t\t}\n\t}\n}\n\nfunc TestOomScoreAdj(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.OomScoreAdj = ptrInt(200)\n\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tvar stdout bytes.Buffer\n\tpconfig := libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"sh\", \"-c\", \"cat /proc/self/oom_score_adj\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  nil,\n\t\tStdout: &stdout,\n\t\tInit:   true,\n\t}\n\terr = container.Run(&pconfig)\n\tok(t, err)\n\n\t// Wait for process\n\twaitProcess(&pconfig, t)\n\toutputOomScoreAdj := strings.TrimSpace(stdout.String())\n\n\t// Check that the oom_score_adj matches the value that was set as part of config.\n\tif outputOomScoreAdj != strconv.Itoa(*config.OomScoreAdj) {\n\t\tt.Fatalf(\"Expected oom_score_adj %d; got %q\", *config.OomScoreAdj, outputOomScoreAdj)\n\t}\n}\n\nfunc TestHook(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\texpectedBundle := t.TempDir()\n\tconfig.Labels = append(config.Labels, \"bundle=\"+expectedBundle)\n\n\tgetRootfsFromBundle := func(bundle string) (string, error) {\n\t\tf, err := os.Open(filepath.Join(bundle, \"config.json\"))\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\tvar config configs.Config\n\t\tif err = json.NewDecoder(f).Decode(&config); err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\treturn config.Rootfs, nil\n\t}\n\tcreateFileFromBundle := func(filename, bundle string) error {\n\t\troot, err := getRootfsFromBundle(bundle)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tf, err := os.Create(filepath.Join(root, filename))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn f.Close()\n\t}\n\n\t// Note FunctionHooks can't be serialized to json this means they won't be passed down to the container\n\t// For CreateContainer and StartContainer which run in the container namespace, this means we need to pass Command Hooks.\n\thookFiles := map[configs.HookName]string{\n\t\tconfigs.Prestart:        \"prestart\",\n\t\tconfigs.CreateRuntime:   \"createRuntime\",\n\t\tconfigs.CreateContainer: \"createContainer\",\n\t\tconfigs.StartContainer:  \"startContainer\",\n\t\tconfigs.Poststart:       \"poststart\",\n\t}\n\n\tconfig.Hooks = configs.Hooks{\n\t\tconfigs.Prestart: configs.HookList{\n\t\t\tconfigs.NewFunctionHook(func(s *specs.State) error {\n\t\t\t\tif s.Bundle != expectedBundle {\n\t\t\t\t\tt.Fatalf(\"Expected prestart hook bundlePath '%s'; got '%s'\", expectedBundle, s.Bundle)\n\t\t\t\t}\n\t\t\t\treturn createFileFromBundle(hookFiles[configs.Prestart], s.Bundle)\n\t\t\t}),\n\t\t},\n\t\tconfigs.CreateRuntime: configs.HookList{\n\t\t\tconfigs.NewFunctionHook(func(s *specs.State) error {\n\t\t\t\tif s.Bundle != expectedBundle {\n\t\t\t\t\tt.Fatalf(\"Expected createRuntime hook bundlePath '%s'; got '%s'\", expectedBundle, s.Bundle)\n\t\t\t\t}\n\t\t\t\treturn createFileFromBundle(hookFiles[configs.CreateRuntime], s.Bundle)\n\t\t\t}),\n\t\t},\n\t\tconfigs.CreateContainer: configs.HookList{\n\t\t\tconfigs.NewCommandHook(&configs.Command{\n\t\t\t\tPath: \"/bin/bash\",\n\t\t\t\tArgs: []string{\"/bin/bash\", \"-c\", fmt.Sprintf(\"touch ./%s\", hookFiles[configs.CreateContainer])},\n\t\t\t}),\n\t\t},\n\t\tconfigs.StartContainer: configs.HookList{\n\t\t\tconfigs.NewCommandHook(&configs.Command{\n\t\t\t\tPath: \"/bin/sh\",\n\t\t\t\tArgs: []string{\"/bin/sh\", \"-c\", fmt.Sprintf(\"touch /%s\", hookFiles[configs.StartContainer])},\n\t\t\t}),\n\t\t},\n\t\tconfigs.Poststart: configs.HookList{\n\t\t\tconfigs.NewFunctionHook(func(s *specs.State) error {\n\t\t\t\tif s.Bundle != expectedBundle {\n\t\t\t\t\tt.Fatalf(\"Expected poststart hook bundlePath '%s'; got '%s'\", expectedBundle, s.Bundle)\n\t\t\t\t}\n\t\t\t\treturn createFileFromBundle(hookFiles[configs.Poststart], s.Bundle)\n\t\t\t}),\n\t\t},\n\t\tconfigs.Poststop: configs.HookList{\n\t\t\tconfigs.NewFunctionHook(func(s *specs.State) error {\n\t\t\t\tif s.Bundle != expectedBundle {\n\t\t\t\t\tt.Fatalf(\"Expected poststop hook bundlePath '%s'; got '%s'\", expectedBundle, s.Bundle)\n\t\t\t\t}\n\n\t\t\t\troot, err := getRootfsFromBundle(s.Bundle)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\n\t\t\t\tfor _, hook := range hookFiles {\n\t\t\t\t\tif err = os.RemoveAll(filepath.Join(root, hook)); 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 nil\n\t\t\t}),\n\t\t},\n\t}\n\n\t// write config of json format into config.json under bundle\n\tf, err := os.OpenFile(filepath.Join(expectedBundle, \"config.json\"), os.O_CREATE|os.O_RDWR, 0o644)\n\tok(t, err)\n\tok(t, json.NewEncoder(f).Encode(config))\n\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\n\t// e.g: 'ls /prestart ...'\n\tvar cmd strings.Builder\n\tcmd.WriteString(\"ls \")\n\tfor _, hook := range hookFiles {\n\t\tcmd.WriteString(\"/\" + hook + \" \")\n\t}\n\n\tvar stdout bytes.Buffer\n\tpconfig := libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"sh\", \"-c\", cmd.String()},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  nil,\n\t\tStdout: &stdout,\n\t\tInit:   true,\n\t}\n\terr = container.Run(&pconfig)\n\tok(t, err)\n\n\t// Wait for process\n\twaitProcess(&pconfig, t)\n\n\tif err := container.Destroy(); err != nil {\n\t\tt.Fatalf(\"container destroy %s\", err)\n\t}\n\n\tfor _, hook := range []string{\"prestart\", \"createRuntime\", \"poststart\"} {\n\t\tfi, err := os.Stat(filepath.Join(config.Rootfs, hook))\n\t\tif err == nil || !errors.Is(err, os.ErrNotExist) {\n\t\t\tt.Fatalf(\"expected file '%s to not exists, but it does\", fi.Name())\n\t\t}\n\t}\n}\n\nfunc TestSTDIOPermissions(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tbuffers := runContainerOk(t, config, \"sh\", \"-c\", \"echo hi > /dev/stderr\")\n\n\tif actual := strings.Trim(buffers.Stderr.String(), \"\\n\"); actual != \"hi\" {\n\t\tt.Fatalf(\"stderr should equal be equal %q %q\", actual, \"hi\")\n\t}\n}\n\nfunc unmountOp(path string) {\n\t_ = unix.Unmount(path, unix.MNT_DETACH)\n}\n\n// Launch container with rootfsPropagation in rslave mode. Also\n// bind mount a volume /mnt1host at /mnt1cont at the time of launch. Now do\n// another mount on host (/mnt1host/mnt2host) and this new mount should\n// propagate to container (/mnt1cont/mnt2host)\nfunc TestRootfsPropagationSlaveMount(t *testing.T) {\n\tvar mountPropagated bool\n\tvar dir1cont string\n\tvar dir2cont string\n\n\tdir1cont = \"/root/mnt1cont\"\n\n\tif testing.Short() {\n\t\treturn\n\t}\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.RootPropagation = unix.MS_SLAVE | unix.MS_REC\n\n\t// Bind mount a volume.\n\tdir1host := t.TempDir()\n\n\t// Make this dir a \"shared\" mount point. This will make sure a\n\t// slave relationship can be established in container.\n\terr := unix.Mount(dir1host, dir1host, \"bind\", unix.MS_BIND|unix.MS_REC, \"\")\n\tok(t, err)\n\terr = unix.Mount(\"\", dir1host, \"\", unix.MS_SHARED|unix.MS_REC, \"\")\n\tok(t, err)\n\tdefer unmountOp(dir1host)\n\n\tconfig.Mounts = append(config.Mounts, &configs.Mount{\n\t\tSource:      dir1host,\n\t\tDestination: dir1cont,\n\t\tDevice:      \"bind\",\n\t\tFlags:       unix.MS_BIND | unix.MS_REC,\n\t})\n\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\n\tpconfig := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\n\terr = container.Run(pconfig)\n\t_ = stdinR.Close()\n\tdefer stdinW.Close()\n\tok(t, err)\n\n\t// Create mnt2host under dir1host and bind mount itself on top of it.\n\t// This should be visible in container.\n\tdir2host := filepath.Join(dir1host, \"mnt2host\")\n\terr = os.Mkdir(dir2host, 0o700)\n\tok(t, err)\n\tdefer remove(dir2host)\n\n\terr = unix.Mount(dir2host, dir2host, \"bind\", unix.MS_BIND, \"\")\n\tdefer unmountOp(dir2host)\n\tok(t, err)\n\n\t// Run \"cat /proc/self/mountinfo\" in container and look at mount points.\n\tvar stdout2 bytes.Buffer\n\n\tstdinR2, stdinW2, err := os.Pipe()\n\tok(t, err)\n\n\tpconfig2 := &libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"cat\", \"/proc/self/mountinfo\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  stdinR2,\n\t\tStdout: &stdout2,\n\t}\n\n\terr = container.Run(pconfig2)\n\t_ = stdinR2.Close()\n\tdefer stdinW2.Close()\n\tok(t, err)\n\n\t_ = stdinW2.Close()\n\twaitProcess(pconfig2, t)\n\t_ = stdinW.Close()\n\twaitProcess(pconfig, t)\n\n\tmountPropagated = false\n\tdir2cont = filepath.Join(dir1cont, filepath.Base(dir2host))\n\n\tpropagationInfo := stdout2.String()\n\tlines := strings.SplitSeq(propagationInfo, \"\\n\")\n\tfor l := range lines {\n\t\tlinefields := strings.Split(l, \" \")\n\t\tif len(linefields) < 5 {\n\t\t\tcontinue\n\t\t}\n\n\t\tif linefields[4] == dir2cont {\n\t\t\tmountPropagated = true\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif mountPropagated != true {\n\t\tt.Fatalf(\"Mount on host %s did not propagate in container at %s\\n\", dir2host, dir2cont)\n\t}\n}\n\n// Launch container with rootfsPropagation 0 so no propagation flags are\n// applied. Also bind mount a volume /mnt1host at /mnt1cont at the time of\n// launch. Now do a mount in container (/mnt1cont/mnt2cont) and this new\n// mount should propagate to host (/mnt1host/mnt2cont)\n\nfunc TestRootfsPropagationSharedMount(t *testing.T) {\n\tvar dir1cont string\n\tvar dir2cont string\n\n\tdir1cont = \"/root/mnt1cont\"\n\n\tif testing.Short() {\n\t\treturn\n\t}\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.RootPropagation = unix.MS_PRIVATE\n\n\t// Bind mount a volume.\n\tdir1host := t.TempDir()\n\n\t// Make this dir a \"shared\" mount point. This will make sure a\n\t// shared relationship can be established in container.\n\terr := unix.Mount(dir1host, dir1host, \"bind\", unix.MS_BIND|unix.MS_REC, \"\")\n\tok(t, err)\n\terr = unix.Mount(\"\", dir1host, \"\", unix.MS_SHARED|unix.MS_REC, \"\")\n\tok(t, err)\n\tdefer unmountOp(dir1host)\n\n\tconfig.Mounts = append(config.Mounts, &configs.Mount{\n\t\tSource:      dir1host,\n\t\tDestination: dir1cont,\n\t\tDevice:      \"bind\",\n\t\tFlags:       unix.MS_BIND | unix.MS_REC,\n\t})\n\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\n\tpconfig := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\n\terr = container.Run(pconfig)\n\t_ = stdinR.Close()\n\tdefer stdinW.Close()\n\tok(t, err)\n\n\t// Create mnt2cont under dir1host. This will become visible inside container\n\t// at mnt1cont/mnt2cont. Bind mount itself on top of it. This\n\t// should be visible on host now.\n\tdir2host := filepath.Join(dir1host, \"mnt2cont\")\n\terr = os.Mkdir(dir2host, 0o700)\n\tok(t, err)\n\tdefer remove(dir2host)\n\n\tdir2cont = filepath.Join(dir1cont, filepath.Base(dir2host))\n\n\t// Mount something in container and see if it is visible on host.\n\tvar stdout2 bytes.Buffer\n\n\tstdinR2, stdinW2, err := os.Pipe()\n\tok(t, err)\n\n\tpconfig2 := &libcontainer.Process{\n\t\tCwd:          \"/\",\n\t\tArgs:         []string{\"mount\", \"--bind\", dir2cont, dir2cont},\n\t\tEnv:          standardEnvironment,\n\t\tStdin:        stdinR2,\n\t\tStdout:       &stdout2,\n\t\tCapabilities: &configs.Capabilities{},\n\t}\n\n\t// Provide CAP_SYS_ADMIN\n\tpconfig2.Capabilities.Bounding = append(config.Capabilities.Bounding, \"CAP_SYS_ADMIN\")\n\tpconfig2.Capabilities.Permitted = append(config.Capabilities.Permitted, \"CAP_SYS_ADMIN\")\n\tpconfig2.Capabilities.Effective = append(config.Capabilities.Effective, \"CAP_SYS_ADMIN\")\n\n\terr = container.Run(pconfig2)\n\t_ = stdinR2.Close()\n\tdefer stdinW2.Close()\n\tok(t, err)\n\n\t// Wait for process\n\t_ = stdinW2.Close()\n\twaitProcess(pconfig2, t)\n\t_ = stdinW.Close()\n\twaitProcess(pconfig, t)\n\n\tdefer unmountOp(dir2host)\n\n\t// Check if mount is visible on host or not.\n\tout, err := exec.Command(\"findmnt\", \"-n\", \"-f\", \"-oTARGET\", dir2host).CombinedOutput()\n\touttrim := string(bytes.TrimSpace(out))\n\tif err != nil {\n\t\tt.Logf(\"findmnt error %q: %q\", err, outtrim)\n\t}\n\n\tif outtrim != dir2host {\n\t\tt.Fatalf(\"Mount in container on %s did not propagate to host on %s. finmnt output=%s\", dir2cont, dir2host, outtrim)\n\t}\n}\n\nfunc TestPIDHost(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tl, err := os.Readlink(\"/proc/1/ns/pid\")\n\tok(t, err)\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Namespaces.Remove(configs.NEWPID)\n\tbuffers := runContainerOk(t, config, \"readlink\", \"/proc/self/ns/pid\")\n\n\tif actual := strings.Trim(buffers.Stdout.String(), \"\\n\"); actual != l {\n\t\tt.Fatalf(\"ipc link not equal to host link %q %q\", actual, l)\n\t}\n}\n\nfunc TestHostPidnsInitKill(t *testing.T) {\n\tconfig := newTemplateConfig(t, nil)\n\t// Implicitly use host pid ns.\n\tconfig.Namespaces.Remove(configs.NEWPID)\n\ttestPidnsInitKill(t, config)\n}\n\nfunc TestSharedPidnsInitKill(t *testing.T) {\n\tconfig := newTemplateConfig(t, nil)\n\t// Explicitly use host pid ns.\n\tconfig.Namespaces.Add(configs.NEWPID, \"/proc/1/ns/pid\")\n\ttestPidnsInitKill(t, config)\n}\n\nfunc testPidnsInitKill(t *testing.T, config *configs.Config) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\t// Run a container with two long-running processes.\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tprocess1 := &libcontainer.Process{\n\t\tCwd:  \"/\",\n\t\tArgs: []string{\"sleep\", \"1h\"},\n\t\tEnv:  standardEnvironment,\n\t\tInit: true,\n\t}\n\terr = container.Run(process1)\n\tok(t, err)\n\n\tprocess2 := &libcontainer.Process{\n\t\tCwd:  \"/\",\n\t\tArgs: []string{\"sleep\", \"1h\"},\n\t\tEnv:  standardEnvironment,\n\t\tInit: false,\n\t}\n\terr = container.Run(process2)\n\tok(t, err)\n\n\t// Kill the container.\n\terr = container.Signal(syscall.SIGKILL)\n\tok(t, err)\n\t_, err = process1.Wait()\n\tif err == nil {\n\t\tt.Fatal(\"expected Wait to indicate failure\")\n\t}\n\n\t// The non-init process must've also been killed. If not,\n\t// the test will time out.\n\t_, err = process2.Wait()\n\tif err == nil {\n\t\tt.Fatal(\"expected Wait to indicate failure\")\n\t}\n}\n\nfunc TestInitJoinPID(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\t// Execute a long-running container\n\tconfig1 := newTemplateConfig(t, nil)\n\tcontainer1, err := newContainer(t, config1)\n\tok(t, err)\n\tdefer destroyContainer(container1)\n\n\tstdinR1, stdinW1, err := os.Pipe()\n\tok(t, err)\n\tinit1 := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR1,\n\t\tInit:  true,\n\t}\n\terr = container1.Run(init1)\n\t_ = stdinR1.Close()\n\tdefer stdinW1.Close()\n\tok(t, err)\n\n\t// get the state of the first container\n\tstate1, err := container1.State()\n\tok(t, err)\n\tpidns1 := state1.NamespacePaths[configs.NEWPID]\n\n\t// Run a container inside the existing pidns but with different cgroups\n\tconfig2 := newTemplateConfig(t, nil)\n\tconfig2.Namespaces.Add(configs.NEWPID, pidns1)\n\tconfig2.Cgroups.Path = \"integration/test2\"\n\tcontainer2, err := newContainer(t, config2)\n\tok(t, err)\n\tdefer destroyContainer(container2)\n\n\tstdinR2, stdinW2, err := os.Pipe()\n\tok(t, err)\n\tinit2 := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR2,\n\t\tInit:  true,\n\t}\n\terr = container2.Run(init2)\n\t_ = stdinR2.Close()\n\tdefer stdinW2.Close()\n\tok(t, err)\n\t// get the state of the second container\n\tstate2, err := container2.State()\n\tok(t, err)\n\n\tns1, err := os.Readlink(fmt.Sprintf(\"/proc/%d/ns/pid\", state1.InitProcessPid))\n\tok(t, err)\n\tns2, err := os.Readlink(fmt.Sprintf(\"/proc/%d/ns/pid\", state2.InitProcessPid))\n\tok(t, err)\n\tif ns1 != ns2 {\n\t\tt.Errorf(\"pidns(%s), wanted %s\", ns2, ns1)\n\t}\n\n\t// check that namespaces are not the same\n\tif reflect.DeepEqual(state2.NamespacePaths, state1.NamespacePaths) {\n\t\tt.Errorf(\"Namespaces(%v), original %v\", state2.NamespacePaths,\n\t\t\tstate1.NamespacePaths)\n\t}\n\t// check that pidns is joined correctly. The initial container process list\n\t// should contain the second container's init process\n\tbuffers := newStdBuffers()\n\tps := &libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"ps\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdout: buffers.Stdout,\n\t}\n\terr = container1.Run(ps)\n\tok(t, err)\n\twaitProcess(ps, t)\n\n\t// Stop init processes one by one. Stop the second container should\n\t// not stop the first.\n\t_ = stdinW2.Close()\n\twaitProcess(init2, t)\n\t_ = stdinW1.Close()\n\twaitProcess(init1, t)\n\n\tout := strings.TrimSpace(buffers.Stdout.String())\n\t// output of ps inside the initial PID namespace should have\n\t// 1 line of header,\n\t// 2 lines of init processes,\n\t// 1 line of ps process\n\tif len(strings.Split(out, \"\\n\")) != 4 {\n\t\tt.Errorf(\"unexpected running process, output %q\", out)\n\t}\n}\n\nfunc TestInitJoinNetworkAndUser(t *testing.T) {\n\tneedUserNS(t)\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\t// Execute a long-running container\n\tconfig1 := newTemplateConfig(t, &tParam{userns: true})\n\tcontainer1, err := newContainer(t, config1)\n\tok(t, err)\n\tdefer destroyContainer(container1)\n\n\tstdinR1, stdinW1, err := os.Pipe()\n\tok(t, err)\n\tinit1 := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR1,\n\t\tInit:  true,\n\t}\n\terr = container1.Run(init1)\n\t_ = stdinR1.Close()\n\tdefer stdinW1.Close()\n\tok(t, err)\n\n\t// get the state of the first container\n\tstate1, err := container1.State()\n\tok(t, err)\n\tnetns1 := state1.NamespacePaths[configs.NEWNET]\n\tuserns1 := state1.NamespacePaths[configs.NEWUSER]\n\n\t// Run a container inside the existing pidns but with different cgroups.\n\tconfig2 := newTemplateConfig(t, &tParam{userns: true})\n\tconfig2.Namespaces.Add(configs.NEWNET, netns1)\n\tconfig2.Namespaces.Add(configs.NEWUSER, userns1)\n\t// Emulate specconv.setupUserNamespace().\n\tuidMap, gidMap, err := userns.GetUserNamespaceMappings(userns1)\n\tok(t, err)\n\tconfig2.UIDMappings = uidMap\n\tconfig2.GIDMappings = gidMap\n\tconfig2.Cgroups.Path = \"integration/test2\"\n\tcontainer2, err := newContainer(t, config2)\n\tok(t, err)\n\tdefer destroyContainer(container2)\n\n\tstdinR2, stdinW2, err := os.Pipe()\n\tok(t, err)\n\tinit2 := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR2,\n\t\tInit:  true,\n\t}\n\terr = container2.Run(init2)\n\t_ = stdinR2.Close()\n\tdefer stdinW2.Close()\n\tok(t, err)\n\n\t// get the state of the second container\n\tstate2, err := container2.State()\n\tok(t, err)\n\n\tfor _, ns := range []string{\"net\", \"user\"} {\n\t\tns1, err := os.Readlink(fmt.Sprintf(\"/proc/%d/ns/%s\", state1.InitProcessPid, ns))\n\t\tok(t, err)\n\t\tns2, err := os.Readlink(fmt.Sprintf(\"/proc/%d/ns/%s\", state2.InitProcessPid, ns))\n\t\tok(t, err)\n\t\tif ns1 != ns2 {\n\t\t\tt.Errorf(\"%s(%s), wanted %s\", ns, ns2, ns1)\n\t\t}\n\t}\n\n\t// check that namespaces are not the same\n\tif reflect.DeepEqual(state2.NamespacePaths, state1.NamespacePaths) {\n\t\tt.Errorf(\"Namespaces(%v), original %v\", state2.NamespacePaths,\n\t\t\tstate1.NamespacePaths)\n\t}\n\t// Stop init processes one by one. Stop the second container should\n\t// not stop the first.\n\t_ = stdinW2.Close()\n\twaitProcess(init2, t)\n\t_ = stdinW1.Close()\n\twaitProcess(init1, t)\n}\n\nfunc TestTmpfsCopyUp(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Mounts = append(config.Mounts, &configs.Mount{\n\t\tSource:      \"tmpfs\",\n\t\tDestination: \"/etc\",\n\t\tDevice:      \"tmpfs\",\n\t\tExtensions:  configs.EXT_COPYUP,\n\t})\n\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tvar stdout bytes.Buffer\n\tpconfig := libcontainer.Process{\n\t\tArgs:   []string{\"ls\", \"/etc/passwd\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  nil,\n\t\tStdout: &stdout,\n\t\tInit:   true,\n\t}\n\terr = container.Run(&pconfig)\n\tok(t, err)\n\n\t// Wait for process\n\twaitProcess(&pconfig, t)\n\n\toutputLs := stdout.String()\n\n\t// Check that the ls output has /etc/passwd\n\tif !strings.Contains(outputLs, \"/etc/passwd\") {\n\t\tt.Fatalf(\"/etc/passwd not copied up as expected: %v\", outputLs)\n\t}\n}\n\nfunc TestCGROUPPrivate(t *testing.T) {\n\tif _, err := os.Stat(\"/proc/self/ns/cgroup\"); errors.Is(err, os.ErrNotExist) {\n\t\tt.Skip(\"Test requires cgroupns.\")\n\t}\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tl, err := os.Readlink(\"/proc/1/ns/cgroup\")\n\tok(t, err)\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Namespaces.Add(configs.NEWCGROUP, \"\")\n\tbuffers := runContainerOk(t, config, \"readlink\", \"/proc/self/ns/cgroup\")\n\n\tif actual := strings.Trim(buffers.Stdout.String(), \"\\n\"); actual == l {\n\t\tt.Fatalf(\"cgroup link should be private to the container but equals host %q %q\", actual, l)\n\t}\n}\n\nfunc TestCGROUPHost(t *testing.T) {\n\tif _, err := os.Stat(\"/proc/self/ns/cgroup\"); errors.Is(err, os.ErrNotExist) {\n\t\tt.Skip(\"Test requires cgroupns.\")\n\t}\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tl, err := os.Readlink(\"/proc/1/ns/cgroup\")\n\tok(t, err)\n\n\tconfig := newTemplateConfig(t, nil)\n\tbuffers := runContainerOk(t, config, \"readlink\", \"/proc/self/ns/cgroup\")\n\n\tif actual := strings.Trim(buffers.Stdout.String(), \"\\n\"); actual != l {\n\t\tt.Fatalf(\"cgroup link not equal to host link %q %q\", actual, l)\n\t}\n}\n\nfunc TestFdLeaks(t *testing.T) {\n\ttestFdLeaks(t, false)\n}\n\nfunc TestFdLeaksSystemd(t *testing.T) {\n\tif !systemd.IsRunningSystemd() {\n\t\tt.Skip(\"Test requires systemd.\")\n\t}\n\ttestFdLeaks(t, true)\n}\n\nfunc fdList(t *testing.T) []string {\n\tfdDir, closer, err := pathrs.ProcThreadSelfOpen(\"fd/\", unix.O_DIRECTORY|unix.O_CLOEXEC)\n\tok(t, err)\n\tdefer closer()\n\tdefer fdDir.Close()\n\n\tfds, err := fdDir.Readdirnames(-1)\n\tok(t, err)\n\n\t// Remove the fdDir fd.\n\textraFd := strconv.Itoa(int(fdDir.Fd()))\n\treturn slices.DeleteFunc(fds, func(fd string) bool {\n\t\treturn fd == extraFd\n\t})\n}\n\nfunc testFdLeaks(t *testing.T, systemd bool) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, &tParam{systemd: systemd})\n\t// Run a container once to exclude file descriptors that are only\n\t// opened once during the process lifetime by the library and are\n\t// never closed. Those are not considered leaks.\n\t//\n\t// Examples of this open-once file descriptors are:\n\t//  - /sys/fs/cgroup dirfd opened by prepareOpenat2 in libct/cgroups;\n\t//  - dbus connection opened by getConnection in libct/cgroups/systemd.\n\trunContainerOk(t, config, \"true\")\n\tfds0 := fdList(t)\n\n\trunContainerOk(t, config, \"true\")\n\tfds1 := fdList(t)\n\n\tif slices.Equal(fds0, fds1) {\n\t\treturn\n\t}\n\t// Show the extra opened files.\n\n\texcludedPaths := []string{\n\t\t\"anon_inode:bpf-prog\", // FIXME: see https://github.com/opencontainers/runc/issues/2366#issuecomment-776411392\n\t}\n\n\tcount := 0\n\n\tprocSelfFd, closer, err := pathrs.ProcThreadSelfOpen(\"fd/\", unix.O_DIRECTORY|unix.O_CLOEXEC)\n\tok(t, err)\n\tdefer closer()\n\tdefer procSelfFd.Close()\n\nnext_fd:\n\tfor _, fd1 := range fds1 {\n\t\tfor _, fd0 := range fds0 {\n\t\t\tif fd0 == fd1 {\n\t\t\t\tcontinue next_fd\n\t\t\t}\n\t\t}\n\t\tdst, _ := linux.Readlinkat(procSelfFd, fd1)\n\t\tfor _, ex := range excludedPaths {\n\t\t\tif ex == dst {\n\t\t\t\tcontinue next_fd\n\t\t\t}\n\t\t}\n\n\t\tcount++\n\t\tt.Logf(\"extra fd %s -> %s\", fd1, dst)\n\t}\n\tif count > 0 {\n\t\tt.Fatalf(\"found %d extra fds after container.Run\", count)\n\t}\n}\n\n// Test that a container using user namespaces is able to bind mount a folder\n// that does not have permissions for group/others.\nfunc TestBindMountAndUser(t *testing.T) {\n\tneedUserNS(t)\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\ttemphost := t.TempDir()\n\tdirhost := filepath.Join(temphost, \"inaccessible\", \"dir\")\n\n\terr := os.MkdirAll(dirhost, 0o755)\n\tok(t, err)\n\n\terr = os.WriteFile(filepath.Join(dirhost, \"foo.txt\"), []byte(\"Hello\"), 0o755)\n\tok(t, err)\n\n\t// Make this dir inaccessible to \"group,others\".\n\terr = os.Chmod(filepath.Join(temphost, \"inaccessible\"), 0o700)\n\tok(t, err)\n\n\tconfig := newTemplateConfig(t, &tParam{\n\t\tuserns: true,\n\t})\n\n\t// Set HostID to 1000 to avoid DAC_OVERRIDE bypassing the purpose of this test.\n\tconfig.UIDMappings[0].HostID = 1000\n\tconfig.GIDMappings[0].HostID = 1000\n\n\t// Set the owner of rootfs to the effective IDs in the host to avoid errors\n\t// while creating the folders to perform the mounts.\n\terr = os.Chown(config.Rootfs, 1000, 1000)\n\tok(t, err)\n\n\tconfig.Mounts = append(config.Mounts, &configs.Mount{\n\t\tSource:      dirhost,\n\t\tDestination: \"/tmp/mnt1cont\",\n\t\tDevice:      \"bind\",\n\t\tFlags:       unix.MS_BIND | unix.MS_REC,\n\t})\n\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tvar stdout bytes.Buffer\n\n\tpconfig := libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"sh\", \"-c\", \"stat /tmp/mnt1cont/foo.txt\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdout: &stdout,\n\t\tInit:   true,\n\t}\n\terr = container.Run(&pconfig)\n\tok(t, err)\n\n\twaitProcess(&pconfig, t)\n}\n"
  },
  {
    "path": "libcontainer/integration/execin_test.go",
    "content": "package integration\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"slices\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/containerd/console\"\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc TestExecIn(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\tconfig := newTemplateConfig(t, nil)\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\t// Execute a first process in the container\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\tprocess := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\terr = container.Run(process)\n\t_ = stdinR.Close()\n\tdefer stdinW.Close()\n\tok(t, err)\n\n\tbuffers := newStdBuffers()\n\tps := &libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"ps\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  buffers.Stdin,\n\t\tStdout: buffers.Stdout,\n\t\tStderr: buffers.Stderr,\n\t}\n\n\terr = container.Run(ps)\n\tok(t, err)\n\twaitProcess(ps, t)\n\t_ = stdinW.Close()\n\twaitProcess(process, t)\n\n\tout := buffers.Stdout.String()\n\tif !strings.Contains(out, \"cat\") || !strings.Contains(out, \"ps\") {\n\t\tt.Fatalf(\"unexpected running process, output %q\", out)\n\t}\n\tif strings.Contains(out, \"\\r\") {\n\t\tt.Fatalf(\"unexpected carriage-return in output %q\", out)\n\t}\n}\n\nfunc TestExecInUsernsRlimit(t *testing.T) {\n\tneedUserNS(t)\n\ttestExecInRlimit(t, true)\n}\n\nfunc TestExecInRlimit(t *testing.T) {\n\ttestExecInRlimit(t, false)\n}\n\nfunc testExecInRlimit(t *testing.T, userns bool) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, &tParam{userns: userns})\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\tprocess := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\terr = container.Run(process)\n\t_ = stdinR.Close()\n\tdefer stdinW.Close()\n\tok(t, err)\n\n\tbuffers := newStdBuffers()\n\tps := &libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"/bin/sh\", \"-c\", \"ulimit -n\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  buffers.Stdin,\n\t\tStdout: buffers.Stdout,\n\t\tStderr: buffers.Stderr,\n\t\tRlimits: []configs.Rlimit{\n\t\t\t// increase process rlimit higher than container rlimit to test per-process limit\n\t\t\t{Type: unix.RLIMIT_NOFILE, Hard: 1026, Soft: 1026},\n\t\t},\n\t}\n\terr = container.Run(ps)\n\tok(t, err)\n\twaitProcess(ps, t)\n\n\t_ = stdinW.Close()\n\twaitProcess(process, t)\n\n\tout := buffers.Stdout.String()\n\tif limit := strings.TrimSpace(out); limit != \"1026\" {\n\t\tt.Fatalf(\"expected rlimit to be 1026, got %s\", limit)\n\t}\n}\n\nfunc TestExecInAdditionalGroups(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\t// Execute a first process in the container\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\tprocess := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\terr = container.Run(process)\n\t_ = stdinR.Close()\n\tdefer stdinW.Close()\n\tok(t, err)\n\n\tvar stdout bytes.Buffer\n\tpconfig := libcontainer.Process{\n\t\tCwd:              \"/\",\n\t\tArgs:             []string{\"sh\", \"-c\", \"id\", \"-Gn\"},\n\t\tEnv:              standardEnvironment,\n\t\tStdin:            nil,\n\t\tStdout:           &stdout,\n\t\tAdditionalGroups: []int{4444, 87654},\n\t}\n\terr = container.Run(&pconfig)\n\tok(t, err)\n\n\t// Wait for process\n\twaitProcess(&pconfig, t)\n\n\t_ = stdinW.Close()\n\twaitProcess(process, t)\n\n\toutputGroups := stdout.String()\n\n\t// Check that the groups output has the groups that we specified.\n\tfor _, gid := range pconfig.AdditionalGroups {\n\t\tif !strings.Contains(outputGroups, strconv.Itoa(gid)) {\n\t\t\tt.Errorf(\"Listed groups do not contain gid %d as expected: %v\", gid, outputGroups)\n\t\t}\n\t}\n}\n\nfunc TestExecInError(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\tconfig := newTemplateConfig(t, nil)\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\t// Execute a first process in the container\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\tprocess := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\terr = container.Run(process)\n\t_ = stdinR.Close()\n\tdefer func() {\n\t\t_ = stdinW.Close()\n\t\tif _, err := process.Wait(); err != nil {\n\t\t\tt.Log(err)\n\t\t}\n\t}()\n\tok(t, err)\n\n\tfor range 42 {\n\t\tunexistent := &libcontainer.Process{\n\t\t\tCwd:  \"/\",\n\t\t\tArgs: []string{\"unexistent\"},\n\t\t\tEnv:  standardEnvironment,\n\t\t}\n\t\terr = container.Run(unexistent)\n\t\tif err == nil {\n\t\t\tt.Fatal(\"Should be an error\")\n\t\t}\n\t\tif !strings.Contains(err.Error(), \"executable file not found\") {\n\t\t\tt.Fatalf(\"Should be error about not found executable, got %s\", err)\n\t\t}\n\t}\n}\n\nfunc TestExecInTTY(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\tt.Skip(\"racy; see https://github.com/opencontainers/runc/issues/2425\")\n\tconfig := newTemplateConfig(t, nil)\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\t// Execute a first process in the container\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\tprocess := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\terr = container.Run(process)\n\t_ = stdinR.Close()\n\tdefer func() {\n\t\t_ = stdinW.Close()\n\t\tif _, err := process.Wait(); err != nil {\n\t\t\tt.Log(err)\n\t\t}\n\t}()\n\tok(t, err)\n\n\tps := &libcontainer.Process{\n\t\tCwd:  \"/\",\n\t\tArgs: []string{\"ps\"},\n\t\tEnv:  standardEnvironment,\n\t}\n\n\t// Repeat to increase chances to catch a race; see\n\t// https://github.com/opencontainers/runc/issues/2425.\n\tfor range 300 {\n\t\tvar stdout bytes.Buffer\n\n\t\tparent, child, err := utils.NewSockPair(\"console\")\n\t\tok(t, err)\n\t\tps.ConsoleSocket = child\n\n\t\tdone := make(chan (error))\n\t\tgo func() {\n\t\t\tf, err := utils.RecvFile(parent)\n\t\t\tif err != nil {\n\t\t\t\tdone <- fmt.Errorf(\"RecvFile: %w\", err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tc, err := console.ConsoleFromFile(f)\n\t\t\tif err != nil {\n\t\t\t\tdone <- fmt.Errorf(\"ConsoleFromFile: %w\", err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\terr = console.ClearONLCR(c.Fd())\n\t\t\tif err != nil {\n\t\t\t\tdone <- fmt.Errorf(\"ClearONLCR: %w\", err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// An error from io.Copy is expected once the terminal\n\t\t\t// is gone, so we deliberately ignore it.\n\t\t\t_, _ = io.Copy(&stdout, c)\n\t\t\tdone <- nil\n\t\t}()\n\n\t\terr = container.Run(ps)\n\t\tok(t, err)\n\n\t\tselect {\n\t\tcase <-time.After(5 * time.Second):\n\t\t\tt.Fatal(\"Waiting for copy timed out\")\n\t\tcase err := <-done:\n\t\t\tok(t, err)\n\t\t}\n\n\t\twaitProcess(ps, t)\n\t\t_ = parent.Close()\n\t\t_ = child.Close()\n\n\t\tout := stdout.String()\n\t\tif !strings.Contains(out, \"cat\") || !strings.Contains(out, \"ps\") {\n\t\t\tt.Fatalf(\"unexpected running process, output %q\", out)\n\t\t}\n\t\tif strings.Contains(out, \"\\r\") {\n\t\t\tt.Fatalf(\"unexpected carriage-return in output %q\", out)\n\t\t}\n\t}\n}\n\nfunc TestExecInEnvironment(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\tconfig := newTemplateConfig(t, nil)\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\t// Execute a first process in the container\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\tprocess := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\terr = container.Run(process)\n\t_ = stdinR.Close()\n\tdefer stdinW.Close()\n\tok(t, err)\n\n\texecEnv := []string{\n\t\t\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n\t\t// The below line is added to check the deduplication feature:\n\t\t// if a variable with the same name appears more than once,\n\t\t// only the last value should be added to the environment.\n\t\t\"DEBUG=true\",\n\t\t\"DEBUG=false\",\n\t\t\"ENV=test\",\n\t}\n\tbuffers := newStdBuffers()\n\tprocess2 := &libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"/bin/env\"},\n\t\tEnv:    execEnv,\n\t\tStdin:  buffers.Stdin,\n\t\tStdout: buffers.Stdout,\n\t\tStderr: buffers.Stderr,\n\t}\n\terr = container.Run(process2)\n\tok(t, err)\n\twaitProcess(process2, t)\n\n\t_ = stdinW.Close()\n\twaitProcess(process, t)\n\n\t// Check exec process environment.\n\tt.Logf(\"exec output:\\n%s\", buffers.Stdout.String())\n\tout := strings.Fields(buffers.Stdout.String())\n\t// If not present in the Process.Env, runc should add $HOME,\n\t// which is deduced by parsing container's /etc/passwd.\n\t// We use a known image in the test, so we know its value.\n\tfor _, e := range append(execEnv, \"HOME=/root\") {\n\t\tif e == \"DEBUG=true\" { // This one should be dedup'ed out.\n\t\t\tcontinue\n\t\t}\n\t\tif !slices.Contains(out, e) {\n\t\t\tt.Errorf(\"Expected env %s not found in exec output\", e)\n\t\t}\n\t}\n\t// Check that there are no extra variables. We have 1 env (\"DEBUG=true\")\n\t// removed and 1 env (\"HOME=root\") added, resulting in the same number.\n\tif got, want := len(out), len(execEnv); want != got {\n\t\tt.Errorf(\"Mismatched number of variables: want %d, got %d\", want, got)\n\t}\n}\n\nfunc TestExecinPassExtraFiles(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\tconfig := newTemplateConfig(t, nil)\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\t// Execute a first process in the container\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\tprocess := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\terr = container.Run(process)\n\t_ = stdinR.Close()\n\tdefer stdinW.Close()\n\tok(t, err)\n\n\tvar stdout bytes.Buffer\n\tpipeout1, pipein1, err := os.Pipe()\n\tok(t, err)\n\tpipeout2, pipein2, err := os.Pipe()\n\tok(t, err)\n\tinprocess := &libcontainer.Process{\n\t\tCwd:        \"/\",\n\t\tArgs:       []string{\"sh\", \"-c\", \"cd /proc/$$/fd; echo -n *; echo -n 1 >3; echo -n 2 >4\"},\n\t\tEnv:        []string{\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"},\n\t\tExtraFiles: []*os.File{pipein1, pipein2},\n\t\tStdin:      nil,\n\t\tStdout:     &stdout,\n\t}\n\terr = container.Run(inprocess)\n\tok(t, err)\n\n\twaitProcess(inprocess, t)\n\t_ = stdinW.Close()\n\twaitProcess(process, t)\n\n\tout := stdout.String()\n\t// fd 5 is the directory handle for /proc/$$/fd\n\tif out != \"0 1 2 3 4 5\" {\n\t\tt.Fatalf(\"expected to have the file descriptors '0 1 2 3 4 5' passed to exec, got '%s'\", out)\n\t}\n\tbuf := []byte{0}\n\t_, err = pipeout1.Read(buf)\n\tok(t, err)\n\tout1 := string(buf)\n\tif out1 != \"1\" {\n\t\tt.Fatalf(\"expected first pipe to receive '1', got '%s'\", out1)\n\t}\n\n\t_, err = pipeout2.Read(buf)\n\tok(t, err)\n\tout2 := string(buf)\n\tif out2 != \"2\" {\n\t\tt.Fatalf(\"expected second pipe to receive '2', got '%s'\", out2)\n\t}\n}\n\nfunc TestExecInOomScoreAdj(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.OomScoreAdj = ptrInt(200)\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\tprocess := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\terr = container.Run(process)\n\t_ = stdinR.Close()\n\tdefer stdinW.Close()\n\tok(t, err)\n\n\tbuffers := newStdBuffers()\n\tps := &libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"/bin/sh\", \"-c\", \"cat /proc/self/oom_score_adj\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  buffers.Stdin,\n\t\tStdout: buffers.Stdout,\n\t\tStderr: buffers.Stderr,\n\t}\n\terr = container.Run(ps)\n\tok(t, err)\n\twaitProcess(ps, t)\n\n\t_ = stdinW.Close()\n\twaitProcess(process, t)\n\n\tout := buffers.Stdout.String()\n\tif oomScoreAdj := strings.TrimSpace(out); oomScoreAdj != strconv.Itoa(*config.OomScoreAdj) {\n\t\tt.Fatalf(\"expected oomScoreAdj to be %d, got %s\", *config.OomScoreAdj, oomScoreAdj)\n\t}\n}\n\nfunc TestExecInUserns(t *testing.T) {\n\tneedUserNS(t)\n\tif testing.Short() {\n\t\treturn\n\t}\n\tconfig := newTemplateConfig(t, &tParam{userns: true})\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\t// Execute a first process in the container\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\n\tprocess := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\terr = container.Run(process)\n\t_ = stdinR.Close()\n\tdefer stdinW.Close()\n\tok(t, err)\n\n\tinitPID, err := process.Pid()\n\tok(t, err)\n\tinitUserns, err := os.Readlink(fmt.Sprintf(\"/proc/%d/ns/user\", initPID))\n\tok(t, err)\n\n\tbuffers := newStdBuffers()\n\tprocess2 := &libcontainer.Process{\n\t\tCwd:  \"/\",\n\t\tArgs: []string{\"readlink\", \"/proc/self/ns/user\"},\n\t\tEnv: []string{\n\t\t\t\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n\t\t},\n\t\tStdout: buffers.Stdout,\n\t\tStderr: os.Stderr,\n\t}\n\terr = container.Run(process2)\n\tok(t, err)\n\twaitProcess(process2, t)\n\t_ = stdinW.Close()\n\twaitProcess(process, t)\n\n\tif out := strings.TrimSpace(buffers.Stdout.String()); out != initUserns {\n\t\tt.Errorf(\"execin userns(%s), wanted %s\", out, initUserns)\n\t}\n}\n"
  },
  {
    "path": "libcontainer/integration/init_test.go",
    "content": "package integration\n\nimport (\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t//nolint:revive // Enable cgroup manager to manage devices\n\t_ \"github.com/opencontainers/cgroups/devices\"\n\t_ \"github.com/opencontainers/runc/libcontainer/nsenter\"\n)\n\n// Same as ../../init.go but for libcontainer/integration.\nfunc init() {\n\tif len(os.Args) > 1 && os.Args[1] == \"init\" {\n\t\tlibcontainer.Init()\n\t}\n}\n\nfunc TestMain(m *testing.M) {\n\tret := m.Run()\n\tos.Exit(ret)\n}\n"
  },
  {
    "path": "libcontainer/integration/seccomp_test.go",
    "content": "//go:build linux && cgo && seccomp\n\npackage integration\n\nimport (\n\t\"strings\"\n\t\"syscall\"\n\t\"testing\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\tlibseccomp \"github.com/seccomp/libseccomp-golang\"\n)\n\nfunc TestSeccompDenySyslogWithErrno(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\terrnoRet := uint(syscall.ESRCH)\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Seccomp = &configs.Seccomp{\n\t\tDefaultAction: configs.Allow,\n\t\tSyscalls: []*configs.Syscall{\n\t\t\t{\n\t\t\t\tName:     \"syslog\",\n\t\t\t\tAction:   configs.Errno,\n\t\t\t\tErrnoRet: &errnoRet,\n\t\t\t},\n\t\t},\n\t}\n\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tbuffers := newStdBuffers()\n\tpwd := &libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"dmesg\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  buffers.Stdin,\n\t\tStdout: buffers.Stdout,\n\t\tStderr: buffers.Stderr,\n\t\tInit:   true,\n\t}\n\n\terr = container.Run(pwd)\n\tok(t, err)\n\tps, err := pwd.Wait()\n\tif err == nil {\n\t\tt.Fatal(\"Expecting error (negative return code); instead exited cleanly!\")\n\t}\n\tif ps.Success() {\n\t\tt.Fatal(\"dmesg should fail with negative exit code, instead got 0!\")\n\t}\n\n\texpected := \"dmesg: klogctl: No such process\"\n\tactual := strings.Trim(buffers.Stderr.String(), \"\\n\")\n\tif actual != expected {\n\t\tt.Fatalf(\"Expected output %s but got %s\\n\", expected, actual)\n\t}\n}\n\nfunc TestSeccompDenySyslog(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Seccomp = &configs.Seccomp{\n\t\tDefaultAction: configs.Allow,\n\t\tSyscalls: []*configs.Syscall{\n\t\t\t{\n\t\t\t\tName:   \"syslog\",\n\t\t\t\tAction: configs.Errno,\n\t\t\t},\n\t\t},\n\t}\n\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tbuffers := newStdBuffers()\n\tpwd := &libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"dmesg\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  buffers.Stdin,\n\t\tStdout: buffers.Stdout,\n\t\tStderr: buffers.Stderr,\n\t\tInit:   true,\n\t}\n\n\terr = container.Run(pwd)\n\tok(t, err)\n\tps, err := pwd.Wait()\n\tif err == nil {\n\t\tt.Fatal(\"Expecting error (negative return code); instead exited cleanly!\")\n\t}\n\tif ps.Success() {\n\t\tt.Fatal(\"dmesg should fail with negative exit code, instead got 0!\")\n\t}\n\n\texpected := \"dmesg: klogctl: Operation not permitted\"\n\tactual := strings.Trim(buffers.Stderr.String(), \"\\n\")\n\tif actual != expected {\n\t\tt.Fatalf(\"Expected output %s but got %s\\n\", expected, actual)\n\t}\n}\n\nfunc TestSeccompPermitWriteConditional(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Seccomp = &configs.Seccomp{\n\t\tDefaultAction: configs.Allow,\n\t\tSyscalls: []*configs.Syscall{\n\t\t\t{\n\t\t\t\tName:   \"write\",\n\t\t\t\tAction: configs.Errno,\n\t\t\t\tArgs: []*configs.Arg{\n\t\t\t\t\t{\n\t\t\t\t\t\tIndex: 0,\n\t\t\t\t\t\tValue: 2,\n\t\t\t\t\t\tOp:    configs.EqualTo,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tbuffers := newStdBuffers()\n\tdmesg := &libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"busybox\", \"ls\", \"/\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  buffers.Stdin,\n\t\tStdout: buffers.Stdout,\n\t\tStderr: buffers.Stderr,\n\t\tInit:   true,\n\t}\n\n\terr = container.Run(dmesg)\n\tok(t, err)\n\tif _, err := dmesg.Wait(); err != nil {\n\t\tt.Fatalf(\"%s: %s\", err, buffers.Stderr)\n\t}\n}\n\nfunc TestSeccompDenyWriteConditional(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\t// Only test if library version is v2.2.1 or higher\n\t// Conditional filtering will always error in v2.2.0 and lower\n\tmajor, minor, micro := libseccomp.GetLibraryVersion()\n\tif (major == 2 && minor < 2) || (major == 2 && minor == 2 && micro < 1) {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Seccomp = &configs.Seccomp{\n\t\tDefaultAction: configs.Allow,\n\t\tSyscalls: []*configs.Syscall{\n\t\t\t{\n\t\t\t\tName:   \"write\",\n\t\t\t\tAction: configs.Errno,\n\t\t\t\tArgs: []*configs.Arg{\n\t\t\t\t\t{\n\t\t\t\t\t\tIndex: 0,\n\t\t\t\t\t\tValue: 2,\n\t\t\t\t\t\tOp:    configs.EqualTo,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\tbuffers := newStdBuffers()\n\tdmesg := &libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"busybox\", \"ls\", \"does_not_exist\"},\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  buffers.Stdin,\n\t\tStdout: buffers.Stdout,\n\t\tStderr: buffers.Stderr,\n\t\tInit:   true,\n\t}\n\n\terr = container.Run(dmesg)\n\tok(t, err)\n\n\tps, err := dmesg.Wait()\n\tif err == nil {\n\t\tt.Fatal(\"Expecting negative return, instead got 0!\")\n\t}\n\tif ps.Success() {\n\t\tt.Fatal(\"Busybox should fail with negative exit code, instead got 0!\")\n\t}\n\n\t// We're denying write to stderr, so we expect an empty buffer\n\texpected := \"\"\n\tactual := strings.Trim(buffers.Stderr.String(), \"\\n\")\n\tif actual != expected {\n\t\tt.Fatalf(\"Expected output %s but got %s\\n\", expected, actual)\n\t}\n}\n\nfunc TestSeccompPermitWriteMultipleConditions(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Seccomp = &configs.Seccomp{\n\t\tDefaultAction: configs.Allow,\n\t\tSyscalls: []*configs.Syscall{\n\t\t\t{\n\t\t\t\tName:   \"write\",\n\t\t\t\tAction: configs.Errno,\n\t\t\t\tArgs: []*configs.Arg{\n\t\t\t\t\t{\n\t\t\t\t\t\tIndex: 0,\n\t\t\t\t\t\tValue: 2,\n\t\t\t\t\t\tOp:    configs.EqualTo,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tIndex: 2,\n\t\t\t\t\t\tValue: 0,\n\t\t\t\t\t\tOp:    configs.NotEqualTo,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tbuffers := runContainerOk(t, config, \"ls\", \"/\")\n\t// We don't need to verify the actual thing printed\n\t// Just that something was written to stdout\n\tif len(buffers.Stdout.String()) == 0 {\n\t\tt.Fatalf(\"Nothing was written to stdout, write call failed!\\n\")\n\t}\n}\n\nfunc TestSeccompDenyWriteMultipleConditions(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\t// Only test if library version is v2.2.1 or higher\n\t// Conditional filtering will always error in v2.2.0 and lower\n\tmajor, minor, micro := libseccomp.GetLibraryVersion()\n\tif (major == 2 && minor < 2) || (major == 2 && minor == 2 && micro < 1) {\n\t\treturn\n\t}\n\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Seccomp = &configs.Seccomp{\n\t\tDefaultAction: configs.Allow,\n\t\tSyscalls: []*configs.Syscall{\n\t\t\t{\n\t\t\t\tName:   \"write\",\n\t\t\t\tAction: configs.Errno,\n\t\t\t\tArgs: []*configs.Arg{\n\t\t\t\t\t{\n\t\t\t\t\t\tIndex: 0,\n\t\t\t\t\t\tValue: 2,\n\t\t\t\t\t\tOp:    configs.EqualTo,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tIndex: 2,\n\t\t\t\t\t\tValue: 0,\n\t\t\t\t\t\tOp:    configs.NotEqualTo,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tbuffers, exitCode, err := runContainer(t, config, \"ls\", \"/does_not_exist\")\n\tif err == nil {\n\t\tt.Fatalf(\"Expecting error return, instead got 0\")\n\t}\n\tif exitCode == 0 {\n\t\tt.Fatalf(\"Busybox should fail with negative exit code, instead got %d!\", exitCode)\n\t}\n\n\texpected := \"\"\n\tactual := strings.Trim(buffers.Stderr.String(), \"\\n\")\n\tif actual != expected {\n\t\tt.Fatalf(\"Expected output %s but got %s\\n\", expected, actual)\n\t}\n}\n\nfunc TestSeccompMultipleConditionSameArgDeniesStdout(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\t// Prevent writing to both stdout and stderr.\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Seccomp = &configs.Seccomp{\n\t\tDefaultAction: configs.Allow,\n\t\tSyscalls: []*configs.Syscall{\n\t\t\t{\n\t\t\t\tName:   \"write\",\n\t\t\t\tAction: configs.Errno,\n\t\t\t\tArgs: []*configs.Arg{\n\t\t\t\t\t{\n\t\t\t\t\t\tIndex: 0,\n\t\t\t\t\t\tValue: 1,\n\t\t\t\t\t\tOp:    configs.EqualTo,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tIndex: 0,\n\t\t\t\t\t\tValue: 2,\n\t\t\t\t\t\tOp:    configs.EqualTo,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tbuffers := runContainerOk(t, config, \"ls\", \"/\")\n\t// Verify that nothing was printed\n\tif len(buffers.Stdout.String()) != 0 {\n\t\tt.Fatalf(\"Something was written to stdout, write call succeeded!\\n\")\n\t}\n}\n\nfunc TestSeccompMultipleConditionSameArgDeniesStderr(t *testing.T) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\n\t// Prevent writing to both stdout and stderr.\n\tconfig := newTemplateConfig(t, nil)\n\tconfig.Seccomp = &configs.Seccomp{\n\t\tDefaultAction: configs.Allow,\n\t\tSyscalls: []*configs.Syscall{\n\t\t\t{\n\t\t\t\tName:   \"write\",\n\t\t\t\tAction: configs.Errno,\n\t\t\t\tArgs: []*configs.Arg{\n\t\t\t\t\t{\n\t\t\t\t\t\tIndex: 0,\n\t\t\t\t\t\tValue: 1,\n\t\t\t\t\t\tOp:    configs.EqualTo,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tIndex: 0,\n\t\t\t\t\t\tValue: 2,\n\t\t\t\t\t\tOp:    configs.EqualTo,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tbuffers, exitCode, err := runContainer(t, config, \"ls\", \"/does_not_exist\")\n\tif err == nil {\n\t\tt.Fatalf(\"Expecting error return, instead got 0\")\n\t}\n\tif exitCode == 0 {\n\t\tt.Fatalf(\"Busybox should fail with negative exit code, instead got %d!\", exitCode)\n\t}\n\t// Verify nothing was printed\n\tif len(buffers.Stderr.String()) != 0 {\n\t\tt.Fatalf(\"Something was written to stderr, write call succeeded!\\n\")\n\t}\n}\n"
  },
  {
    "path": "libcontainer/integration/template_test.go",
    "content": "package integration\n\nimport (\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/opencontainers/cgroups\"\n\tdevices \"github.com/opencontainers/cgroups/devices/config\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/specconv\"\n\t\"golang.org/x/sys/unix\"\n)\n\nvar standardEnvironment = []string{\n\t\"HOME=/root\",\n\t\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n\t\"HOSTNAME=integration\",\n\t\"TERM=xterm\",\n}\n\nconst defaultMountFlags = unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV\n\ntype tParam struct {\n\tuserns  bool\n\tsystemd bool\n}\n\n// newTemplateConfig returns a base template for running a container.\n//\n// It uses a network strategy of just setting a loopback interface\n// and the default setup for devices.\n//\n// If p is nil, a default container is created.\nfunc newTemplateConfig(t testing.TB, p *tParam) *configs.Config {\n\tvar allowedDevices []*devices.Rule\n\tfor _, device := range specconv.AllowedDevices {\n\t\tallowedDevices = append(allowedDevices, &device.Rule)\n\t}\n\tif p == nil {\n\t\tp = &tParam{}\n\t}\n\tconfig := &configs.Config{\n\t\tRootfs: newRootfs(t),\n\t\tCapabilities: &configs.Capabilities{\n\t\t\tBounding: []string{\n\t\t\t\t\"CAP_CHOWN\",\n\t\t\t\t\"CAP_DAC_OVERRIDE\",\n\t\t\t\t\"CAP_FSETID\",\n\t\t\t\t\"CAP_FOWNER\",\n\t\t\t\t\"CAP_MKNOD\",\n\t\t\t\t\"CAP_NET_RAW\",\n\t\t\t\t\"CAP_SETGID\",\n\t\t\t\t\"CAP_SETUID\",\n\t\t\t\t\"CAP_SETFCAP\",\n\t\t\t\t\"CAP_SETPCAP\",\n\t\t\t\t\"CAP_NET_BIND_SERVICE\",\n\t\t\t\t\"CAP_SYS_CHROOT\",\n\t\t\t\t\"CAP_KILL\",\n\t\t\t\t\"CAP_AUDIT_WRITE\",\n\t\t\t},\n\t\t\tPermitted: []string{\n\t\t\t\t\"CAP_CHOWN\",\n\t\t\t\t\"CAP_DAC_OVERRIDE\",\n\t\t\t\t\"CAP_FSETID\",\n\t\t\t\t\"CAP_FOWNER\",\n\t\t\t\t\"CAP_MKNOD\",\n\t\t\t\t\"CAP_NET_RAW\",\n\t\t\t\t\"CAP_SETGID\",\n\t\t\t\t\"CAP_SETUID\",\n\t\t\t\t\"CAP_SETFCAP\",\n\t\t\t\t\"CAP_SETPCAP\",\n\t\t\t\t\"CAP_NET_BIND_SERVICE\",\n\t\t\t\t\"CAP_SYS_CHROOT\",\n\t\t\t\t\"CAP_KILL\",\n\t\t\t\t\"CAP_AUDIT_WRITE\",\n\t\t\t},\n\t\t\tEffective: []string{\n\t\t\t\t\"CAP_CHOWN\",\n\t\t\t\t\"CAP_DAC_OVERRIDE\",\n\t\t\t\t\"CAP_FSETID\",\n\t\t\t\t\"CAP_FOWNER\",\n\t\t\t\t\"CAP_MKNOD\",\n\t\t\t\t\"CAP_NET_RAW\",\n\t\t\t\t\"CAP_SETGID\",\n\t\t\t\t\"CAP_SETUID\",\n\t\t\t\t\"CAP_SETFCAP\",\n\t\t\t\t\"CAP_SETPCAP\",\n\t\t\t\t\"CAP_NET_BIND_SERVICE\",\n\t\t\t\t\"CAP_SYS_CHROOT\",\n\t\t\t\t\"CAP_KILL\",\n\t\t\t\t\"CAP_AUDIT_WRITE\",\n\t\t\t},\n\t\t},\n\t\tNamespaces: configs.Namespaces([]configs.Namespace{\n\t\t\t{Type: configs.NEWNS},\n\t\t\t{Type: configs.NEWUTS},\n\t\t\t{Type: configs.NEWIPC},\n\t\t\t{Type: configs.NEWPID},\n\t\t\t{Type: configs.NEWNET},\n\t\t}),\n\t\tCgroups: &cgroups.Cgroup{\n\t\t\tSystemd: p.systemd,\n\t\t\tResources: &cgroups.Resources{\n\t\t\t\tMemorySwappiness: nil,\n\t\t\t\tDevices:          allowedDevices,\n\t\t\t},\n\t\t},\n\t\tMaskPaths: []string{\n\t\t\t\"/proc/kcore\",\n\t\t\t\"/sys/firmware\",\n\t\t},\n\t\tReadonlyPaths: []string{\n\t\t\t\"/proc/sys\", \"/proc/sysrq-trigger\", \"/proc/irq\", \"/proc/bus\",\n\t\t},\n\t\tDevices:    specconv.AllowedDevices,\n\t\tHostname:   \"integration\",\n\t\tDomainname: \"integration\",\n\t\tMounts: []*configs.Mount{\n\t\t\t{\n\t\t\t\tSource:      \"proc\",\n\t\t\t\tDestination: \"/proc\",\n\t\t\t\tDevice:      \"proc\",\n\t\t\t\tFlags:       defaultMountFlags,\n\t\t\t},\n\t\t\t{\n\t\t\t\tSource:      \"tmpfs\",\n\t\t\t\tDestination: \"/dev\",\n\t\t\t\tDevice:      \"tmpfs\",\n\t\t\t\tFlags:       unix.MS_NOSUID | unix.MS_STRICTATIME,\n\t\t\t\tData:        \"mode=755\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tSource:      \"devpts\",\n\t\t\t\tDestination: \"/dev/pts\",\n\t\t\t\tDevice:      \"devpts\",\n\t\t\t\tFlags:       unix.MS_NOSUID | unix.MS_NOEXEC,\n\t\t\t\tData:        \"newinstance,ptmxmode=0666,mode=0620,gid=5\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tDevice:      \"tmpfs\",\n\t\t\t\tSource:      \"shm\",\n\t\t\t\tDestination: \"/dev/shm\",\n\t\t\t\tData:        \"mode=1777,size=65536k\",\n\t\t\t\tFlags:       defaultMountFlags,\n\t\t\t},\n\t\t\t/*\n\t\t\t\t            CI is broken on the debian based kernels with this\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSource:      \"mqueue\",\n\t\t\t\t\t\t\t\tDestination: \"/dev/mqueue\",\n\t\t\t\t\t\t\t\tDevice:      \"mqueue\",\n\t\t\t\t\t\t\t\tFlags:       defaultMountFlags,\n\t\t\t\t\t\t\t},\n\t\t\t*/\n\t\t\t{\n\t\t\t\tSource:      \"sysfs\",\n\t\t\t\tDestination: \"/sys\",\n\t\t\t\tDevice:      \"sysfs\",\n\t\t\t\tFlags:       defaultMountFlags | unix.MS_RDONLY,\n\t\t\t},\n\t\t},\n\t\tNetworks: []*configs.Network{\n\t\t\t{\n\t\t\t\tType:    \"loopback\",\n\t\t\t\tAddress: \"127.0.0.1/0\",\n\t\t\t\tGateway: \"localhost\",\n\t\t\t},\n\t\t},\n\t\tRlimits: []configs.Rlimit{\n\t\t\t{\n\t\t\t\tType: unix.RLIMIT_NOFILE,\n\t\t\t\tHard: uint64(1025),\n\t\t\t\tSoft: uint64(1025),\n\t\t\t},\n\t\t},\n\t}\n\n\tif p.userns {\n\t\tconfig.UIDMappings = []configs.IDMap{{HostID: 0, ContainerID: 0, Size: 1000}}\n\t\tconfig.GIDMappings = []configs.IDMap{{HostID: 0, ContainerID: 0, Size: 1000}}\n\t\tconfig.Namespaces = append(config.Namespaces, configs.Namespace{Type: configs.NEWUSER})\n\t} else {\n\t\tconfig.Mounts = append(config.Mounts, &configs.Mount{\n\t\t\tDestination: \"/sys/fs/cgroup\",\n\t\t\tDevice:      \"cgroup\",\n\t\t\tFlags:       defaultMountFlags | unix.MS_RDONLY,\n\t\t})\n\t}\n\n\tif p.systemd {\n\t\tid := strconv.FormatInt(-int64(time.Now().Nanosecond()), 36)\n\t\tconfig.Cgroups.Name = strings.ReplaceAll(t.Name(), \"/\", \"_\") + id\n\t\tconfig.Cgroups.Parent = \"system.slice\"\n\t\tconfig.Cgroups.ScopePrefix = \"runc-test\"\n\t} else {\n\t\tconfig.Cgroups.Path = \"/test/integration\"\n\t}\n\n\treturn config\n}\n"
  },
  {
    "path": "libcontainer/integration/update_test.go",
    "content": "package integration\n\nimport (\n\t\"bytes\"\n\t\"os\"\n\t\"strings\"\n\t\"testing\"\n\n\tdevices \"github.com/opencontainers/cgroups/devices/config\"\n\t\"github.com/opencontainers/cgroups/systemd\"\n\t\"github.com/opencontainers/runc/libcontainer\"\n)\n\nfunc testUpdateDevices(t *testing.T, systemd bool) {\n\tif testing.Short() {\n\t\treturn\n\t}\n\tconfig := newTemplateConfig(t, &tParam{systemd: systemd})\n\tcontainer, err := newContainer(t, config)\n\tok(t, err)\n\tdefer destroyContainer(container)\n\n\t// Execute a first process in the container\n\tstdinR, stdinW, err := os.Pipe()\n\tok(t, err)\n\tprocess := &libcontainer.Process{\n\t\tCwd:   \"/\",\n\t\tArgs:  []string{\"cat\"},\n\t\tEnv:   standardEnvironment,\n\t\tStdin: stdinR,\n\t\tInit:  true,\n\t}\n\terr = container.Run(process)\n\t_ = stdinR.Close()\n\tdefer func() {\n\t\t_ = stdinW.Close()\n\t\tif _, err := process.Wait(); err != nil {\n\t\t\tt.Log(err)\n\t\t}\n\t}()\n\tok(t, err)\n\n\tvar buf bytes.Buffer\n\tdevCheck := &libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   []string{\"/bin/sh\", \"-c\", \"echo > /dev/full; cat /dev/null; true\"},\n\t\tEnv:    standardEnvironment,\n\t\tStderr: &buf,\n\t}\n\tisAllowed := true\n\texpected := map[bool][]string{\n\t\ttrue: {\n\t\t\t\"write error: No space left on device\", // from write to /dev/full\n\t\t\t// no error from cat /dev/null\n\t\t},\n\t\tfalse: {\n\t\t\t\"/dev/full: Operation not permitted\",\n\t\t\t`cat: can't open '/dev/null': Operation not permitted`,\n\t\t},\n\t}\n\tdefaultDevices := config.Cgroups.Resources.Devices\n\n\tfor i := range 300 {\n\t\t// Check the access\n\t\tbuf.Reset()\n\t\terr = container.Run(devCheck)\n\t\tok(t, err)\n\t\twaitProcess(devCheck, t)\n\n\t\tfor _, exp := range expected[isAllowed] {\n\t\t\tif !strings.Contains(buf.String(), exp) {\n\t\t\t\tt.Fatalf(\"[%d] expected %q, got %q\", i, exp, buf.String())\n\t\t\t}\n\t\t}\n\n\t\t// Now flip the access permission\n\t\tisAllowed = !isAllowed\n\t\tif isAllowed {\n\t\t\tconfig.Cgroups.Resources.Devices = defaultDevices\n\t\t} else {\n\t\t\tconfig.Cgroups.Resources.Devices = []*devices.Rule{}\n\t\t}\n\t\tif err := container.Set(*config); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t}\n}\n\nfunc TestUpdateDevices(t *testing.T) {\n\ttestUpdateDevices(t, false)\n}\n\nfunc TestUpdateDevicesSystemd(t *testing.T) {\n\tif !systemd.IsRunningSystemd() {\n\t\tt.Skip(\"Test requires systemd.\")\n\t}\n\ttestUpdateDevices(t, true)\n}\n"
  },
  {
    "path": "libcontainer/integration/utils_test.go",
    "content": "package integration\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n)\n\nvar busyboxTar string\n\n// init makes sure the container images are downloaded,\n// and initializes busyboxTar. If images can't be downloaded,\n// we are unable to run any tests, so panic.\nfunc init() {\n\t// Figure out path to get-images.sh. Note it won't work\n\t// in case the compiled test binary is moved elsewhere.\n\t_, ex, _, _ := runtime.Caller(0)\n\tgetImages, err := filepath.Abs(filepath.Join(filepath.Dir(ex), \"..\", \"..\", \"tests\", \"integration\", \"get-images.sh\"))\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\t// Call it to make sure images are downloaded, and to get the paths.\n\tout, err := exec.Command(getImages).CombinedOutput()\n\tif err != nil {\n\t\tpanic(fmt.Errorf(\"getImages error %w (output: %s)\", err, out))\n\t}\n\t// Extract the value of BUSYBOX_IMAGE.\n\tfound := regexp.MustCompile(`(?m)^BUSYBOX_IMAGE=(.*)$`).FindSubmatchIndex(out)\n\tif len(found) < 4 {\n\t\tpanic(fmt.Errorf(\"unable to find BUSYBOX_IMAGE=<value> in %q\", out))\n\t}\n\tbusyboxTar = string(out[found[2]:found[3]])\n\t// Finally, check the file is present\n\tif _, err := os.Stat(busyboxTar); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc ptrInt(v int) *int {\n\treturn &v\n}\n\nfunc newStdBuffers() *stdBuffers {\n\treturn &stdBuffers{\n\t\tStdin:  bytes.NewBuffer(nil),\n\t\tStdout: bytes.NewBuffer(nil),\n\t\tStderr: bytes.NewBuffer(nil),\n\t}\n}\n\ntype stdBuffers struct {\n\tStdin  *bytes.Buffer\n\tStdout *bytes.Buffer\n\tStderr *bytes.Buffer\n}\n\nfunc (b *stdBuffers) String() string {\n\ts := []string{}\n\tif b.Stderr != nil {\n\t\ts = append(s, b.Stderr.String())\n\t}\n\tif b.Stdout != nil {\n\t\ts = append(s, b.Stdout.String())\n\t}\n\treturn strings.Join(s, \"|\")\n}\n\n// ok fails the test if an err is not nil.\nfunc ok(t testing.TB, err error) {\n\tt.Helper()\n\tif err != nil {\n\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t}\n}\n\nfunc waitProcess(p *libcontainer.Process, t testing.TB) {\n\tt.Helper()\n\tstatus, err := p.Wait()\n\tif err != nil {\n\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t}\n\n\tif !status.Success() {\n\t\tt.Fatalf(\"unexpected status: %v\", status)\n\t}\n}\n\n// newRootfs creates a new tmp directory and copies the busybox root\n// filesystem to it.\nfunc newRootfs(t testing.TB) string {\n\tt.Helper()\n\tdir := t.TempDir()\n\tif err := copyBusybox(dir); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\t// Make sure others can read+exec, so all tests (inside userns too) can\n\t// read the rootfs.\n\tif err := traversePath(dir); err != nil {\n\t\tt.Fatalf(\"Error making newRootfs path traversable by others: %v\", err)\n\t}\n\n\treturn dir\n}\n\n// traversePath gives read+execute permissions to others for all elements in tPath below\n// os.TempDir() and errors out if elements above it don't have read+exec permissions for others.\n// tPath MUST be a descendant of os.TempDir(). The path returned by testing.TempDir() usually is.\nfunc traversePath(tPath string) error {\n\t// Check the assumption that the argument is under os.TempDir().\n\ttempBase := os.TempDir()\n\tif !strings.HasPrefix(tPath, tempBase) {\n\t\treturn fmt.Errorf(\"traversePath: %q is not a descendant of %q\", tPath, tempBase)\n\t}\n\n\tvar path string\n\tfor _, p := range strings.SplitAfter(tPath, \"/\") {\n\t\tpath = path + p\n\t\tstats, err := os.Stat(path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tperm := stats.Mode().Perm()\n\n\t\tif perm&0o5 == 0o5 {\n\t\t\tcontinue\n\t\t}\n\n\t\tif strings.HasPrefix(tempBase, path) {\n\t\t\treturn fmt.Errorf(\"traversePath: directory %q MUST have read+exec permissions for others\", path)\n\t\t}\n\n\t\tif err := os.Chmod(path, perm|0o5); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc remove(dir string) {\n\t_ = os.RemoveAll(dir)\n}\n\n// copyBusybox copies the rootfs for a busybox container created for the test image\n// into the new directory for the specific test\nfunc copyBusybox(dest string) error {\n\tout, err := exec.Command(\"sh\", \"-c\", fmt.Sprintf(\"tar --exclude './dev/*' -C %q -xf %q\", dest, busyboxTar)).CombinedOutput()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"untar error %w: %q\", err, out)\n\t}\n\treturn nil\n}\n\nfunc newContainer(t testing.TB, config *configs.Config) (*libcontainer.Container, error) {\n\tname := strings.ReplaceAll(t.Name(), \"/\", \"_\") + strconv.FormatInt(-int64(time.Now().Nanosecond()), 35)\n\troot := t.TempDir()\n\n\treturn libcontainer.Create(root, name, config)\n}\n\n// runContainer runs the container with the specific config and arguments\n//\n// buffers are returned containing the STDOUT and STDERR output for the run\n// along with the exit code and any go error\nfunc runContainer(t testing.TB, config *configs.Config, args ...string) (buffers *stdBuffers, exitCode int, err error) {\n\tcontainer, err := newContainer(t, config)\n\tif err != nil {\n\t\treturn nil, -1, err\n\t}\n\tdefer destroyContainer(container)\n\tbuffers = newStdBuffers()\n\tprocess := &libcontainer.Process{\n\t\tCwd:    \"/\",\n\t\tArgs:   args,\n\t\tEnv:    standardEnvironment,\n\t\tStdin:  buffers.Stdin,\n\t\tStdout: buffers.Stdout,\n\t\tStderr: buffers.Stderr,\n\t\tInit:   true,\n\t}\n\n\terr = container.Run(process)\n\tif err != nil {\n\t\treturn buffers, -1, err\n\t}\n\tps, err := process.Wait()\n\tif err != nil {\n\t\treturn buffers, -1, err\n\t}\n\tstatus := ps.Sys().(syscall.WaitStatus)\n\tif status.Exited() {\n\t\texitCode = status.ExitStatus()\n\t} else if status.Signaled() {\n\t\texitCode = -int(status.Signal())\n\t} else {\n\t\treturn buffers, -1, err\n\t}\n\treturn buffers, exitCode, err\n}\n\n// runContainerOk is a wrapper for runContainer, simplifying its use for cases\n// when the run is expected to succeed and return exit code of 0.\nfunc runContainerOk(t testing.TB, config *configs.Config, args ...string) *stdBuffers {\n\tbuffers, exitCode, err := runContainer(t, config, args...)\n\n\tt.Helper()\n\tif err != nil {\n\t\tt.Fatalf(\"%s: %s\", buffers, err)\n\t}\n\tif exitCode != 0 {\n\t\tt.Fatalf(\"exit code not 0. code %d stderr %q\", exitCode, buffers.Stderr)\n\t}\n\n\treturn buffers\n}\n\nfunc destroyContainer(container *libcontainer.Container) {\n\t_ = container.Destroy()\n}\n\nfunc needUserNS(t testing.TB) {\n\tt.Helper()\n\tif _, err := os.Stat(\"/proc/self/ns/user\"); errors.Is(err, os.ErrNotExist) {\n\t\tt.Skip(\"Test requires userns.\")\n\t}\n}\n"
  },
  {
    "path": "libcontainer/intelrdt/cmt.go",
    "content": "package intelrdt\n\nvar cmtEnabled bool\n\n// IsCMTEnabled checks if Intel RDT/CMT is enabled.\nfunc IsCMTEnabled() bool {\n\tfeaturesInit()\n\treturn cmtEnabled\n}\n\nfunc getCMTNumaNodeStats(numaPath string) (*CMTNumaNodeStats, error) {\n\tstats := &CMTNumaNodeStats{}\n\n\tif enabledMonFeatures.llcOccupancy {\n\t\tllcOccupancy, err := getIntelRdtParamUint(numaPath, \"llc_occupancy\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tstats.LLCOccupancy = llcOccupancy\n\t}\n\n\treturn stats, nil\n}\n"
  },
  {
    "path": "libcontainer/intelrdt/cmt_test.go",
    "content": "package intelrdt\n\nimport (\n\t\"path/filepath\"\n\t\"testing\"\n)\n\nfunc TestGetCMTNumaNodeStats(t *testing.T) {\n\tmocksNUMANodesToCreate := []string{\"mon_l3_00\", \"mon_l3_01\"}\n\n\tmocksFilesToCreate := map[string]uint64{\n\t\t\"llc_occupancy\": 9123911,\n\t}\n\n\tmockedL3_MON := mockResctrlL3_MON(t, mocksNUMANodesToCreate, mocksFilesToCreate)\n\n\tt.Run(\"Gather mbm\", func(t *testing.T) {\n\t\tenabledMonFeatures.llcOccupancy = true\n\n\t\tstats := make([]CMTNumaNodeStats, 0, len(mocksNUMANodesToCreate))\n\t\tfor _, numa := range mocksNUMANodesToCreate {\n\t\t\tother, err := getCMTNumaNodeStats(filepath.Join(mockedL3_MON, \"mon_data\", numa))\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\t\tstats = append(stats, *other)\n\t\t}\n\n\t\texpectedStats := CMTNumaNodeStats{\n\t\t\tLLCOccupancy: mocksFilesToCreate[\"llc_occupancy\"],\n\t\t}\n\n\t\tcheckCMTStatCorrection(stats[0], expectedStats, t)\n\t\tcheckCMTStatCorrection(stats[1], expectedStats, t)\n\t})\n}\n\nfunc checkCMTStatCorrection(got, expected CMTNumaNodeStats, t *testing.T) {\n\tif got.LLCOccupancy != expected.LLCOccupancy {\n\t\tt.Fatalf(\"Wrong value of `llc_occupancy`. Expected: %v but got: %v\",\n\t\t\texpected.LLCOccupancy,\n\t\t\tgot.LLCOccupancy)\n\t}\n}\n"
  },
  {
    "path": "libcontainer/intelrdt/intelrdt.go",
    "content": "package intelrdt\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\tsecurejoin \"github.com/cyphar/filepath-securejoin\"\n\t\"github.com/moby/sys/mountinfo\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups/fscommon\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n)\n\n/*\n * About Intel RDT features:\n * Intel platforms with new Xeon CPU support Resource Director Technology (RDT).\n * Cache Allocation Technology (CAT) and Memory Bandwidth Allocation (MBA) are\n * two sub-features of RDT.\n *\n * Cache Allocation Technology (CAT) provides a way for the software to restrict\n * cache allocation to a defined 'subset' of L3 cache which may be overlapping\n * with other 'subsets'. The different subsets are identified by class of\n * service (CLOS) and each CLOS has a capacity bitmask (CBM).\n *\n * Memory Bandwidth Allocation (MBA) provides indirect and approximate throttle\n * over memory bandwidth for the software. A user controls the resource by\n * indicating the percentage of maximum memory bandwidth or memory bandwidth\n * limit in MBps unit if MBA Software Controller is enabled.\n *\n * More details about Intel RDT CAT and MBA can be found in the section 17.18\n * of Intel Software Developer Manual:\n * https://software.intel.com/en-us/articles/intel-sdm\n *\n * About Intel RDT kernel interface:\n * In Linux 4.10 kernel or newer, the interface is defined and exposed via\n * \"resource control\" filesystem, which is a \"cgroup-like\" interface.\n *\n * Comparing with cgroups, it has similar process management lifecycle and\n * interfaces in a container. But unlike cgroups' hierarchy, it has single level\n * filesystem layout.\n *\n * CAT and MBA features are introduced in Linux 4.10 and 4.12 kernel via\n * \"resource control\" filesystem.\n *\n * Intel RDT \"resource control\" filesystem hierarchy:\n * mount -t resctrl resctrl /sys/fs/resctrl\n * tree /sys/fs/resctrl\n * /sys/fs/resctrl/\n * |-- info\n * |   |-- L3\n * |   |   |-- cbm_mask\n * |   |   |-- min_cbm_bits\n * |   |   |-- num_closids\n * |   |-- L3_MON\n * |   |   |-- max_threshold_occupancy\n * |   |   |-- mon_features\n * |   |   |-- num_rmids\n * |   |-- MB\n * |       |-- bandwidth_gran\n * |       |-- delay_linear\n * |       |-- min_bandwidth\n * |       |-- num_closids\n * |-- ...\n * |-- schemata\n * |-- tasks\n * |-- <clos>\n *     |-- ...\n *     |-- schemata\n *     |-- tasks\n *\n * For runc, we can make use of `tasks` and `schemata` configuration for L3\n * cache and memory bandwidth resources constraints.\n *\n * The file `tasks` has a list of tasks that belongs to this group (e.g.,\n * <container_id>\" group). Tasks can be added to a group by writing the task ID\n * to the \"tasks\" file (which will automatically remove them from the previous\n * group to which they belonged). New tasks created by fork(2) and clone(2) are\n * added to the same group as their parent.\n *\n * The file `schemata` has a list of all the resources available to this group.\n * Each resource (L3 cache, memory bandwidth) has its own line and format.\n *\n * L3 cache schema:\n * It has allocation bitmasks/values for L3 cache on each socket, which\n * contains L3 cache id and capacity bitmask (CBM).\n * \tFormat: \"L3:<cache_id0>=<cbm0>;<cache_id1>=<cbm1>;...\"\n * For example, on a two-socket machine, the schema line could be \"L3:0=ff;1=c0\"\n * which means L3 cache id 0's CBM is 0xff, and L3 cache id 1's CBM is 0xc0.\n *\n * The valid L3 cache CBM is a *contiguous bits set* and number of bits that can\n * be set is less than the max bit. The max bits in the CBM is varied among\n * supported Intel CPU models. Kernel will check if it is valid when writing.\n * e.g., default value 0xfffff in root indicates the max bits of CBM is 20\n * bits, which mapping to entire L3 cache capacity. Some valid CBM values to\n * set in a group: 0xf, 0xf0, 0x3ff, 0x1f00 and etc.\n *\n * Memory bandwidth schema:\n * It has allocation values for memory bandwidth on each socket, which contains\n * L3 cache id and memory bandwidth.\n * \tFormat: \"MB:<cache_id0>=bandwidth0;<cache_id1>=bandwidth1;...\"\n * For example, on a two-socket machine, the schema line could be \"MB:0=20;1=70\"\n *\n * The minimum bandwidth percentage value for each CPU model is predefined and\n * can be looked up through \"info/MB/min_bandwidth\". The bandwidth granularity\n * that is allocated is also dependent on the CPU model and can be looked up at\n * \"info/MB/bandwidth_gran\". The available bandwidth control steps are:\n * min_bw + N * bw_gran. Intermediate values are rounded to the next control\n * step available on the hardware.\n *\n * If MBA Software Controller is enabled through mount option \"-o mba_MBps\":\n * mount -t resctrl resctrl -o mba_MBps /sys/fs/resctrl\n * We could specify memory bandwidth in \"MBps\" (Mega Bytes per second) unit\n * instead of \"percentages\". The kernel underneath would use a software feedback\n * mechanism or a \"Software Controller\" which reads the actual bandwidth using\n * MBM counters and adjust the memory bandwidth percentages to ensure:\n * \"actual memory bandwidth < user specified memory bandwidth\".\n *\n * For example, on a two-socket machine, the schema line could be\n * \"MB:0=5000;1=7000\" which means 5000 MBps memory bandwidth limit on socket 0\n * and 7000 MBps memory bandwidth limit on socket 1.\n *\n * For more information about Intel RDT kernel interface:\n * https://www.kernel.org/doc/Documentation/x86/intel_rdt_ui.txt\n *\n * An example for runc:\n * Consider a two-socket machine with two L3 caches where the default CBM is\n * 0x7ff and the max CBM length is 11 bits, and minimum memory bandwidth of 10%\n * with a memory bandwidth granularity of 10%.\n *\n * Tasks inside the container only have access to the \"upper\" 7/11 of L3 cache\n * on socket 0 and the \"lower\" 5/11 L3 cache on socket 1, and may use a\n * maximum memory bandwidth of 20% on socket 0 and 70% on socket 1.\n *\n * \"linux\": {\n *     \"intelRdt\": {\n *         \"l3CacheSchema\": \"L3:0=7f0;1=1f\",\n *         \"memBwSchema\": \"MB:0=20;1=70\"\n * \t}\n * }\n */\n\ntype Manager struct {\n\tmu               sync.Mutex\n\tconfig           *configs.Config\n\tid               string\n\tpath             string\n\tshouldCleanupDir bool\n}\n\n// NewManager returns a new instance of Manager, or nil if the Intel RDT\n// functionality is not specified in the config, available from hardware or\n// enabled in the kernel.\nfunc NewManager(config *configs.Config, id, path string) *Manager {\n\tif config.IntelRdt == nil {\n\t\treturn nil\n\t}\n\n\trootPath, err := Root()\n\tif err != nil {\n\t\treturn nil\n\t}\n\t// NOTE: Should we check if the path provided as arg matches the path\n\t// constructed below? If not, we're screwed as we've effectively lost resctrl\n\t// control of the container (e.g. because the resctrl fs was unmounted or\n\t// remounted elsewhere). All operations are deemed to fail.\n\tif path == \"\" {\n\t\tclos := id\n\t\tif config.IntelRdt.ClosID != \"\" {\n\t\t\tclos = config.IntelRdt.ClosID\n\t\t}\n\t\tif path, err = securejoin.SecureJoin(rootPath, clos); err != nil {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\treturn newManager(config, id, path)\n}\n\n// newManager is the same as NewManager, except it does not check if the feature\n// is actually available. Used by unit tests that mock intelrdt paths.\nfunc newManager(config *configs.Config, id, path string) *Manager {\n\treturn &Manager{\n\t\tconfig: config,\n\t\tid:     id,\n\t\tpath:   path,\n\t}\n}\n\nconst (\n\tintelRdtTasks = \"tasks\"\n)\n\nvar (\n\t// The flag to indicate if Intel RDT/CAT is enabled\n\tcatEnabled bool\n\t// The flag to indicate if Intel RDT/MBA is enabled\n\tmbaEnabled bool\n\n\t// For Intel RDT initialization\n\tinitOnce sync.Once\n\n\terrNotFound = errors.New(\"Intel RDT not available\")\n)\n\n// Check if Intel RDT sub-features are enabled in featuresInit()\nfunc featuresInit() {\n\tinitOnce.Do(func() {\n\t\t// 1. Check if Intel RDT \"resource control\" filesystem is available.\n\t\t// The user guarantees to mount the filesystem.\n\t\troot, err := Root()\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\n\t\t// 2. Check if Intel RDT sub-features are available in \"resource\n\t\t// control\" filesystem. Intel RDT sub-features can be\n\t\t// selectively disabled or enabled by kernel command line\n\t\t// (e.g., rdt=!l3cat,mba) in 4.14 and newer kernel\n\t\tif _, err := os.Stat(filepath.Join(root, \"info\", \"L3\")); err == nil {\n\t\t\tcatEnabled = true\n\t\t}\n\t\tif _, err := os.Stat(filepath.Join(root, \"info\", \"MB\")); err == nil {\n\t\t\tmbaEnabled = true\n\t\t}\n\t\tif _, err := os.Stat(filepath.Join(root, \"info\", \"L3_MON\")); err != nil {\n\t\t\treturn\n\t\t}\n\t\tenabledMonFeatures, err = getMonFeatures(root)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tif enabledMonFeatures.mbmTotalBytes || enabledMonFeatures.mbmLocalBytes {\n\t\t\tmbmEnabled = true\n\t\t}\n\t\tif enabledMonFeatures.llcOccupancy {\n\t\t\tcmtEnabled = true\n\t\t}\n\t})\n}\n\n// findIntelRdtMountpointDir returns the mount point of the Intel RDT \"resource control\" filesystem.\nfunc findIntelRdtMountpointDir() (string, error) {\n\tmi, err := mountinfo.GetMounts(func(m *mountinfo.Info) (bool, bool) {\n\t\t// similar to mountinfo.FSTypeFilter but stops after the first match\n\t\tif m.FSType == \"resctrl\" {\n\t\t\treturn false, true // don't skip, stop\n\t\t}\n\t\treturn true, false // skip, keep going\n\t})\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif len(mi) < 1 {\n\t\treturn \"\", errNotFound\n\t}\n\n\treturn mi[0].Mountpoint, nil\n}\n\n// For Root() use only.\nvar (\n\tintelRdtRoot    string\n\tintelRdtRootErr error\n\trootOnce        sync.Once\n)\n\n// The kernel creates this (empty) directory if resctrl is supported by the\n// hardware and kernel. The user is responsible for mounting the resctrl\n// filesystem, and they could mount it somewhere else if they wanted to.\nconst defaultResctrlMountpoint = \"/sys/fs/resctrl\"\n\n// Root returns the Intel RDT \"resource control\" filesystem mount point.\nfunc Root() (string, error) {\n\trootOnce.Do(func() {\n\t\t// Does this system support resctrl?\n\t\tvar statfs unix.Statfs_t\n\t\tif err := unix.Statfs(defaultResctrlMountpoint, &statfs); err != nil {\n\t\t\tif errors.Is(err, unix.ENOENT) {\n\t\t\t\terr = errNotFound\n\t\t\t}\n\t\t\tintelRdtRootErr = err\n\t\t\treturn\n\t\t}\n\n\t\t// Has the resctrl fs been mounted to the default mount point?\n\t\tif statfs.Type == unix.RDTGROUP_SUPER_MAGIC {\n\t\t\tintelRdtRoot = defaultResctrlMountpoint\n\t\t\treturn\n\t\t}\n\n\t\t// The resctrl fs could have been mounted somewhere nonstandard.\n\t\tintelRdtRoot, intelRdtRootErr = findIntelRdtMountpointDir()\n\t})\n\n\treturn intelRdtRoot, intelRdtRootErr\n}\n\n// Gets a single uint64 value from the specified file.\nfunc getIntelRdtParamUint(path, file string) (uint64, error) {\n\tfileName := filepath.Join(path, file)\n\tcontents, err := os.ReadFile(fileName)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tres, err := fscommon.ParseUint(string(bytes.TrimSpace(contents)), 10, 64)\n\tif err != nil {\n\t\treturn res, fmt.Errorf(\"unable to parse %q as a uint from file %q\", string(contents), fileName)\n\t}\n\treturn res, nil\n}\n\n// Gets a string value from the specified file\nfunc getIntelRdtParamString(path, file string) (string, error) {\n\tcontents, err := os.ReadFile(filepath.Join(path, file))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn string(bytes.TrimSpace(contents)), nil\n}\n\n// Get the read-only L3 cache information\nfunc getL3CacheInfo() (*L3CacheInfo, error) {\n\tl3CacheInfo := &L3CacheInfo{}\n\n\trootPath, err := Root()\n\tif err != nil {\n\t\treturn l3CacheInfo, err\n\t}\n\n\tpath := filepath.Join(rootPath, \"info\", \"L3\")\n\tcbmMask, err := getIntelRdtParamString(path, \"cbm_mask\")\n\tif err != nil {\n\t\treturn l3CacheInfo, err\n\t}\n\tminCbmBits, err := getIntelRdtParamUint(path, \"min_cbm_bits\")\n\tif err != nil {\n\t\treturn l3CacheInfo, err\n\t}\n\tnumClosids, err := getIntelRdtParamUint(path, \"num_closids\")\n\tif err != nil {\n\t\treturn l3CacheInfo, err\n\t}\n\n\tl3CacheInfo.CbmMask = cbmMask\n\tl3CacheInfo.MinCbmBits = minCbmBits\n\tl3CacheInfo.NumClosids = numClosids\n\n\treturn l3CacheInfo, nil\n}\n\n// Get the read-only memory bandwidth information\nfunc getMemBwInfo() (*MemBwInfo, error) {\n\tmemBwInfo := &MemBwInfo{}\n\n\trootPath, err := Root()\n\tif err != nil {\n\t\treturn memBwInfo, err\n\t}\n\n\tpath := filepath.Join(rootPath, \"info\", \"MB\")\n\tbandwidthGran, err := getIntelRdtParamUint(path, \"bandwidth_gran\")\n\tif err != nil {\n\t\treturn memBwInfo, err\n\t}\n\tdelayLinear, err := getIntelRdtParamUint(path, \"delay_linear\")\n\tif err != nil {\n\t\treturn memBwInfo, err\n\t}\n\tminBandwidth, err := getIntelRdtParamUint(path, \"min_bandwidth\")\n\tif err != nil {\n\t\treturn memBwInfo, err\n\t}\n\tnumClosids, err := getIntelRdtParamUint(path, \"num_closids\")\n\tif err != nil {\n\t\treturn memBwInfo, err\n\t}\n\n\tmemBwInfo.BandwidthGran = bandwidthGran\n\tmemBwInfo.DelayLinear = delayLinear\n\tmemBwInfo.MinBandwidth = minBandwidth\n\tmemBwInfo.NumClosids = numClosids\n\n\treturn memBwInfo, nil\n}\n\n// Get diagnostics for last filesystem operation error from file info/last_cmd_status\nfunc getLastCmdStatus() (string, error) {\n\trootPath, err := Root()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tpath := filepath.Join(rootPath, \"info\")\n\tlastCmdStatus, err := getIntelRdtParamString(path, \"last_cmd_status\")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn lastCmdStatus, nil\n}\n\n// WriteIntelRdtTasks writes the specified pid into the \"tasks\" file\nfunc WriteIntelRdtTasks(dir string, pid int) error {\n\tif dir == \"\" {\n\t\treturn fmt.Errorf(\"no such directory for %s\", intelRdtTasks)\n\t}\n\n\t// Don't attach any pid if -1 is specified as a pid\n\tif pid != -1 {\n\t\tif err := os.WriteFile(filepath.Join(dir, intelRdtTasks), []byte(strconv.Itoa(pid)), 0o600); err != nil {\n\t\t\treturn newLastCmdError(fmt.Errorf(\"intelrdt: unable to add pid %d: %w\", pid, err))\n\t\t}\n\t}\n\treturn nil\n}\n\n// IsEnabled checks if Intel RDT is enabled.\nfunc IsEnabled() bool {\n\tfsroot, err := Root()\n\treturn err == nil && fsroot != \"\"\n}\n\n// IsCATEnabled checks if Intel RDT/CAT is enabled.\nfunc IsCATEnabled() bool {\n\tfeaturesInit()\n\treturn catEnabled\n}\n\n// IsMBAEnabled checks if Intel RDT/MBA is enabled.\nfunc IsMBAEnabled() bool {\n\tfeaturesInit()\n\treturn mbaEnabled\n}\n\n// Apply applies Intel RDT configuration to the process with the specified pid.\nfunc (m *Manager) Apply(pid int) (err error) {\n\t// If intelRdt is not specified in config, we do nothing\n\tif m.config.IntelRdt == nil {\n\t\treturn nil\n\t}\n\n\tpath := m.GetPath()\n\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\n\tif m.config.IntelRdt.ClosID != \"\" && m.config.IntelRdt.L3CacheSchema == \"\" && m.config.IntelRdt.MemBwSchema == \"\" && len(m.config.IntelRdt.Schemata) == 0 {\n\t\t// Check that the CLOS exists, i.e. it has been pre-configured to\n\t\t// conform with the runtime spec\n\t\tif _, err := os.Stat(path); err != nil {\n\t\t\treturn fmt.Errorf(\"clos dir not accessible (must be pre-created when schemata, l3CacheSchema and memBwSchema are empty): %w\", err)\n\t\t}\n\t}\n\n\tif err := os.Mkdir(path, 0o755); err == nil || errors.Is(err, os.ErrExist) {\n\t\t// Only clean up the directory if we actually created it.\n\t\tm.shouldCleanupDir = err == nil\n\t} else {\n\t\treturn newLastCmdError(err)\n\t}\n\n\tif err := WriteIntelRdtTasks(path, pid); err != nil {\n\t\treturn newLastCmdError(err)\n\t}\n\n\t// Create MON group\n\tif monPath := m.GetMonPath(); monPath != \"\" {\n\t\tif err := os.Mkdir(monPath, 0o755); err != nil && !errors.Is(err, os.ErrExist) {\n\t\t\treturn newLastCmdError(err)\n\t\t}\n\t\tif err := WriteIntelRdtTasks(monPath, pid); err != nil {\n\t\t\treturn newLastCmdError(err)\n\t\t}\n\t}\n\n\tm.path = path\n\treturn nil\n}\n\n// Destroy destroys the Intel RDT container-specific container_id group.\nfunc (m *Manager) Destroy() error {\n\tif m.config.IntelRdt == nil {\n\t\treturn nil\n\t}\n\t// Don't remove resctrl group if closid has been explicitly specified. The\n\t// group is likely externally managed, i.e. by some other entity than us.\n\t// There are probably other containers/tasks sharing the same group. Also\n\t// only remove the directory if it was created by us.\n\tif m.config.IntelRdt.ClosID == \"\" && m.shouldCleanupDir {\n\t\tm.mu.Lock()\n\t\tdefer m.mu.Unlock()\n\t\tif err := os.Remove(m.GetPath()); err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\t\treturn err\n\t\t}\n\t\tm.path = \"\"\n\t} else if monPath := m.GetMonPath(); monPath != \"\" {\n\t\t// If ClosID is not specified the possible monintoring group was\n\t\t// removed with the CLOS above.\n\t\tif err := os.Remove(monPath); err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// GetPath returns Intel RDT path to save in a state file and to be able to\n// restore the object later.\nfunc (m *Manager) GetPath() string {\n\treturn m.path\n}\n\n// GetMonPath returns path of the monitoring group of the container. Returns an\n// empty string if the container does not have a individual dedicated\n// monitoring group.\nfunc (m *Manager) GetMonPath() string {\n\tif !m.config.IntelRdt.EnableMonitoring {\n\t\treturn \"\"\n\t}\n\tclosPath := m.GetPath()\n\tif closPath == \"\" {\n\t\treturn \"\"\n\t}\n\n\treturn filepath.Join(closPath, \"mon_groups\", m.id)\n}\n\n// GetStats returns statistics for Intel RDT.\nfunc (m *Manager) GetStats() (*Stats, error) {\n\t// If intelRdt is not specified in config\n\tif m.config.IntelRdt == nil {\n\t\treturn nil, nil\n\t}\n\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\tstats := newStats()\n\n\trootPath, err := Root()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t// The read-only L3 cache and memory bandwidth schemata in root\n\ttmpRootStrings, err := getIntelRdtParamString(rootPath, \"schemata\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tschemaRootStrings := strings.Split(tmpRootStrings, \"\\n\")\n\n\t// The L3 cache and memory bandwidth schemata in container's clos group\n\tcontainerPath := m.GetPath()\n\ttmpStrings, err := getIntelRdtParamString(containerPath, \"schemata\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tschemaStrings := strings.Split(tmpStrings, \"\\n\")\n\n\tstats.Schemata = schemaStrings\n\n\tif IsCATEnabled() {\n\t\t// The read-only L3 cache information\n\t\tl3CacheInfo, err := getL3CacheInfo()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tstats.L3CacheInfo = l3CacheInfo\n\n\t\t// The read-only L3 cache schema in root\n\t\tfor _, schemaRoot := range schemaRootStrings {\n\t\t\tif strings.Contains(schemaRoot, \"L3\") {\n\t\t\t\tstats.L3CacheSchemaRoot = strings.TrimSpace(schemaRoot)\n\t\t\t}\n\t\t}\n\n\t\t// The L3 cache schema in container's clos group\n\t\tfor _, schema := range schemaStrings {\n\t\t\tif strings.Contains(schema, \"L3\") {\n\t\t\t\tstats.L3CacheSchema = strings.TrimSpace(schema)\n\t\t\t}\n\t\t}\n\t}\n\n\tif IsMBAEnabled() {\n\t\t// The read-only memory bandwidth information\n\t\tmemBwInfo, err := getMemBwInfo()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tstats.MemBwInfo = memBwInfo\n\n\t\t// The read-only memory bandwidth information\n\t\tfor _, schemaRoot := range schemaRootStrings {\n\t\t\tif strings.Contains(schemaRoot, \"MB\") {\n\t\t\t\tstats.MemBwSchemaRoot = strings.TrimSpace(schemaRoot)\n\t\t\t}\n\t\t}\n\n\t\t// The memory bandwidth schema in container's clos group\n\t\tfor _, schema := range schemaStrings {\n\t\t\tif strings.Contains(schema, \"MB\") {\n\t\t\t\tstats.MemBwSchema = strings.TrimSpace(schema)\n\t\t\t}\n\t\t}\n\t}\n\n\tif IsMBMEnabled() || IsCMTEnabled() {\n\t\tmonPath := m.GetMonPath()\n\t\tif monPath == \"\" {\n\t\t\t// NOTE: If per-container monitoring is not enabled, the monitoring\n\t\t\t// data we get here might have little to do with this container as\n\t\t\t// there might be anything from this single container to the half\n\t\t\t// of the system assigned in the group. Should consider not\n\t\t\t// exposing stats in this case(?)\n\t\t\tmonPath = containerPath\n\t\t}\n\t\terr = getMonitoringStats(monPath, stats)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn stats, nil\n}\n\n// Set Intel RDT \"resource control\" filesystem as configured.\nfunc (m *Manager) Set(container *configs.Config) error {\n\t// About L3 cache schema:\n\t// It has allocation bitmasks/values for L3 cache on each socket,\n\t// which contains L3 cache id and capacity bitmask (CBM).\n\t// \tFormat: \"L3:<cache_id0>=<cbm0>;<cache_id1>=<cbm1>;...\"\n\t// For example, on a two-socket machine, the schema line could be:\n\t// \tL3:0=ff;1=c0\n\t// which means L3 cache id 0's CBM is 0xff, and L3 cache id 1's CBM\n\t// is 0xc0.\n\t//\n\t// The valid L3 cache CBM is a *contiguous bits set* and number of\n\t// bits that can be set is less than the max bit. The max bits in the\n\t// CBM is varied among supported Intel CPU models. Kernel will check\n\t// if it is valid when writing. e.g., default value 0xfffff in root\n\t// indicates the max bits of CBM is 20 bits, which mapping to entire\n\t// L3 cache capacity. Some valid CBM values to set in a group:\n\t// 0xf, 0xf0, 0x3ff, 0x1f00 and etc.\n\t//\n\t//\n\t// About memory bandwidth schema:\n\t// It has allocation values for memory bandwidth on each socket, which\n\t// contains L3 cache id and memory bandwidth.\n\t// \tFormat: \"MB:<cache_id0>=bandwidth0;<cache_id1>=bandwidth1;...\"\n\t// For example, on a two-socket machine, the schema line could be:\n\t// \t\"MB:0=20;1=70\"\n\t//\n\t// The minimum bandwidth percentage value for each CPU model is\n\t// predefined and can be looked up through \"info/MB/min_bandwidth\".\n\t// The bandwidth granularity that is allocated is also dependent on\n\t// the CPU model and can be looked up at \"info/MB/bandwidth_gran\".\n\t// The available bandwidth control steps are: min_bw + N * bw_gran.\n\t// Intermediate values are rounded to the next control step available\n\t// on the hardware.\n\t//\n\t// If MBA Software Controller is enabled through mount option\n\t// \"-o mba_MBps\": mount -t resctrl resctrl -o mba_MBps /sys/fs/resctrl\n\t// We could specify memory bandwidth in \"MBps\" (Mega Bytes per second)\n\t// unit instead of \"percentages\". The kernel underneath would use a\n\t// software feedback mechanism or a \"Software Controller\" which reads\n\t// the actual bandwidth using MBM counters and adjust the memory\n\t// bandwidth percentages to ensure:\n\t// \"actual memory bandwidth < user specified memory bandwidth\".\n\t//\n\t// For example, on a two-socket machine, the schema line could be\n\t// \"MB:0=5000;1=7000\" which means 5000 MBps memory bandwidth limit on\n\t// socket 0 and 7000 MBps memory bandwidth limit on socket 1.\n\tif r := container.IntelRdt; r != nil {\n\t\t// TODO: verify that l3CacheSchema and/or memBwSchema match the\n\t\t// existing schemata if ClosID has been specified. This is a more\n\t\t// involved than reading the file and doing plain string comparison as\n\t\t// the value written in does not necessarily match what gets read out\n\t\t// (leading zeros, cache id ordering etc).\n\t\tvar schemata strings.Builder\n\t\tfor _, s := range append([]string{r.L3CacheSchema, r.MemBwSchema}, r.Schemata...) {\n\t\t\tif s != \"\" {\n\t\t\t\tschemata.WriteString(s)\n\t\t\t\tschemata.WriteString(\"\\n\")\n\t\t\t}\n\t\t}\n\n\t\tif schemata.Len() > 0 {\n\t\t\tpath := filepath.Join(m.GetPath(), \"schemata\")\n\t\t\tif err := os.WriteFile(path, []byte(schemata.String()), 0o600); err != nil {\n\t\t\t\treturn newLastCmdError(fmt.Errorf(\"intelrdt: unable to write %q: %w\", schemata.String(), err))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc newLastCmdError(err error) error {\n\tstatus, err1 := getLastCmdStatus()\n\tif err1 == nil {\n\t\treturn fmt.Errorf(\"%w, last_cmd_status: %s\", err, status)\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "libcontainer/intelrdt/intelrdt_test.go",
    "content": "package intelrdt\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"slices\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n)\n\nfunc TestIntelRdtSet(t *testing.T) {\n\ttcs := []struct {\n\t\tname          string\n\t\tconfig        *configs.IntelRdt\n\t\tschemataAfter []string\n\t}{\n\t\t{\n\t\t\tname: \"L3\",\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tL3CacheSchema: \"L3:0=f0;1=f\",\n\t\t\t},\n\t\t\tschemataAfter: []string{\"L3:0=f0;1=f\"},\n\t\t},\n\t\t{\n\t\t\tname: \"MemBw\",\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tMemBwSchema: \"MB:0=70;1=20\",\n\t\t\t},\n\t\t\tschemataAfter: []string{\"MB:0=70;1=20\"},\n\t\t},\n\t\t{\n\t\t\tname: \"MemBwSc\",\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tMemBwSchema: \"MB:0=9000;1=4000\",\n\t\t\t},\n\t\t\tschemataAfter: []string{\"MB:0=9000;1=4000\"},\n\t\t},\n\t\t{\n\t\t\tname: \"L3 and MemBw\",\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tL3CacheSchema: \"L3:0=f0;1=f\",\n\t\t\t\tMemBwSchema:   \"MB:0=9000;1=4000\",\n\t\t\t},\n\t\t\tschemataAfter: []string{\n\t\t\t\t\"L3:0=f0;1=f\",\n\t\t\t\t\"MB:0=9000;1=4000\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"Schemata\",\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tSchemata: []string{\n\t\t\t\t\t\"L3CODE:0=ff;1=ff\",\n\t\t\t\t\t\"L3DATA:0=f;1=f0\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tschemataAfter: []string{\n\t\t\t\t\"L3CODE:0=ff;1=ff\",\n\t\t\t\t\"L3DATA:0=f;1=f0\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"Schemata and L3\",\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tL3CacheSchema: \"L3:0=f0;1=f\",\n\t\t\t\tSchemata:      []string{\"L2:0=ff00;1=ff\"},\n\t\t\t},\n\t\t\tschemataAfter: []string{\n\t\t\t\t\"L3:0=f0;1=f\",\n\t\t\t\t\"L2:0=ff00;1=ff\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"Schemata and MemBw\",\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tMemBwSchema: \"MB:0=2000;1=4000\",\n\t\t\t\tSchemata:    []string{\"L3:0=ff;1=ff\"},\n\t\t\t},\n\t\t\tschemataAfter: []string{\n\t\t\t\t\"MB:0=2000;1=4000\",\n\t\t\t\t\"L3:0=ff;1=ff\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"Schemata, L3 and MemBw\",\n\t\t\tconfig: &configs.IntelRdt{\n\t\t\t\tL3CacheSchema: \"L3:0=80;1=7f\",\n\t\t\t\tMemBwSchema:   \"MB:0=2000;1=4000\",\n\t\t\t\tSchemata: []string{\n\t\t\t\t\t\"L2:0=ff00;1=ff\",\n\t\t\t\t\t\"L3:0=c0;1=3f\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tschemataAfter: []string{\n\t\t\t\t\"L3:0=80;1=7f\",\n\t\t\t\t\"MB:0=2000;1=4000\",\n\t\t\t\t\"L2:0=ff00;1=ff\",\n\t\t\t\t\"L3:0=c0;1=3f\",\n\t\t\t},\n\t\t},\n\t}\n\n\tfor _, tc := range tcs {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\thelper := NewIntelRdtTestUtil(t)\n\t\t\thelper.config.IntelRdt = tc.config\n\n\t\t\tintelrdt := newManager(helper.config, \"\", helper.IntelRdtPath)\n\t\t\tif err := intelrdt.Set(helper.config); err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\n\t\t\ttmpStrings, err := getIntelRdtParamString(helper.IntelRdtPath, \"schemata\")\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"Failed to parse file 'schemata' - %s\", err)\n\t\t\t}\n\t\t\tvalues := strings.Split(tmpStrings, \"\\n\")\n\n\t\t\tif slices.Compare(values, tc.schemataAfter) != 0 {\n\t\t\t\tt.Fatalf(\"Got the wrong value, expected %v, got %v\", tc.schemataAfter, values)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestApply(t *testing.T) {\n\tconst pid = 1234\n\ttests := []struct {\n\t\tname            string\n\t\tconfig          configs.IntelRdt\n\t\tprecreateClos   bool\n\t\tisError         bool\n\t\tpostApplyAssert func(*Manager)\n\t}{\n\t\t{\n\t\t\tname: \"failure because non-pre-existing CLOS\",\n\t\t\tconfig: configs.IntelRdt{\n\t\t\t\tClosID: \"non-existing-clos\",\n\t\t\t},\n\t\t\tisError: true,\n\t\t\tpostApplyAssert: func(m *Manager) {\n\t\t\t\tif _, err := os.Stat(m.path); err == nil {\n\t\t\t\t\tt.Fatal(\"closid dir should not exist\")\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"CLOS dir should be created if some schema has been specified\",\n\t\t\tconfig: configs.IntelRdt{\n\t\t\t\tClosID:        \"clos-to-be-created\",\n\t\t\t\tL3CacheSchema: \"L3:0=f\",\n\t\t\t},\n\t\t\tpostApplyAssert: func(m *Manager) {\n\t\t\t\tpids, err := getIntelRdtParamString(m.path, \"tasks\")\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"failed to read tasks file: %v\", err)\n\t\t\t\t}\n\t\t\t\tif pids != strconv.Itoa(pid) {\n\t\t\t\t\tt.Fatalf(\"unexpected tasks file, expected '%d', got %q\", pid, pids)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"clos and monitoring group should be created if EnableMonitoring is true\",\n\t\t\tconfig: configs.IntelRdt{\n\t\t\t\tEnableMonitoring: true,\n\t\t\t},\n\t\t\tprecreateClos: true,\n\t\t\tpostApplyAssert: func(m *Manager) {\n\t\t\t\tpids, err := getIntelRdtParamString(m.path, \"tasks\")\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"failed to read tasks file: %v\", err)\n\t\t\t\t}\n\t\t\t\tif pids != strconv.Itoa(pid) {\n\t\t\t\t\tt.Fatalf(\"unexpected tasks file, expected '%d', got %q\", pid, pids)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t}\n\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tNewIntelRdtTestUtil(t)\n\t\t\tid := \"abcd-1234\"\n\t\t\tclosPath := filepath.Join(intelRdtRoot, id)\n\t\t\tif tt.config.ClosID != \"\" {\n\t\t\t\tclosPath = filepath.Join(intelRdtRoot, tt.config.ClosID)\n\t\t\t}\n\n\t\t\tif tt.precreateClos {\n\t\t\t\tif err := os.MkdirAll(filepath.Join(closPath, \"mon_groups\"), 0o755); err != nil {\n\t\t\t\t\tt.Fatal(err)\n\t\t\t\t}\n\t\t\t}\n\t\t\tm := newManager(&configs.Config{IntelRdt: &tt.config}, id, closPath)\n\t\t\terr := m.Apply(pid)\n\t\t\tif tt.isError && err == nil {\n\t\t\t\tt.Fatal(\"expected error, got nil\")\n\t\t\t} else if !tt.isError && err != nil {\n\t\t\t\tt.Fatalf(\"unexpected error: %v\", err)\n\t\t\t}\n\t\t\ttt.postApplyAssert(m)\n\t\t})\n\t}\n}\n\nfunc TestDestroy(t *testing.T) {\n\ttests := []struct {\n\t\tname     string\n\t\tconfig   configs.IntelRdt\n\t\ttestFunc func(*Manager)\n\t}{\n\t\t{\n\t\t\tname: \"per-container CLOS dir should be removed\",\n\t\t\ttestFunc: func(m *Manager) {\n\t\t\t\tclosPath := m.path\n\t\t\t\tif _, err := os.Stat(closPath); err != nil {\n\t\t\t\t\tt.Fatal(\"CLOS dir should exist\")\n\t\t\t\t}\n\t\t\t\t// Need to delete the tasks file so that the dir is empty\n\t\t\t\tif err := os.Remove(filepath.Join(closPath, \"tasks\")); err != nil {\n\t\t\t\t\tt.Fatalf(\"failed to remove tasks file: %v\", err)\n\t\t\t\t}\n\t\t\t\tif err := m.Destroy(); err != nil {\n\t\t\t\t\tt.Fatalf(\"Destroy() failed: %v\", err)\n\t\t\t\t}\n\t\t\t\tif _, err := os.Stat(closPath); err == nil {\n\t\t\t\t\tt.Fatal(\"CLOS dir should not exist\")\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"pre-existing CLOS should not be removed\",\n\t\t\tconfig: configs.IntelRdt{\n\t\t\t\tClosID: \"pre-existing-clos\",\n\t\t\t},\n\t\t\ttestFunc: func(m *Manager) {\n\t\t\t\tclosPath := m.path\n\n\t\t\t\tif _, err := os.Stat(closPath); err != nil {\n\t\t\t\t\tt.Fatal(\"CLOS dir should exist\")\n\t\t\t\t}\n\t\t\t\tif err := m.Destroy(); err != nil {\n\t\t\t\t\tt.Fatalf(\"Destroy() failed: %v\", err)\n\t\t\t\t}\n\t\t\t\tif _, err := os.Stat(closPath); err != nil {\n\t\t\t\t\tt.Fatal(\"CLOS dir should exist\")\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"per-container MON dir in pre-existing CLOS should be removed\",\n\t\t\tconfig: configs.IntelRdt{\n\t\t\t\tClosID:           \"pre-existing-clos\",\n\t\t\t\tEnableMonitoring: true,\n\t\t\t},\n\t\t\ttestFunc: func(m *Manager) {\n\t\t\t\tclosPath := m.path\n\n\t\t\t\tmonPath := filepath.Join(closPath, \"mon_groups\", m.id)\n\t\t\t\tif _, err := os.Stat(monPath); err != nil {\n\t\t\t\t\tt.Fatal(\"MON dir should exist\")\n\t\t\t\t}\n\t\t\t\t// Need to delete the tasks file so that the dir is empty\n\t\t\t\tos.Remove(filepath.Join(monPath, \"tasks\"))\n\t\t\t\tif err := m.Destroy(); err != nil {\n\t\t\t\t\tt.Fatalf(\"Destroy() failed: %v\", err)\n\t\t\t\t}\n\t\t\t\tif _, err := os.Stat(closPath); err != nil {\n\t\t\t\t\tt.Fatalf(\"CLOS dir should exist: %f\", err)\n\t\t\t\t}\n\t\t\t\tif _, err := os.Stat(monPath); err == nil {\n\t\t\t\t\tt.Fatal(\"MON dir should not exist\")\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t}\n\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tNewIntelRdtTestUtil(t)\n\n\t\t\tid := \"abcd-1234\"\n\t\t\tclosPath := filepath.Join(intelRdtRoot, id)\n\t\t\tif tt.config.ClosID != \"\" {\n\t\t\t\tclosPath = filepath.Join(intelRdtRoot, tt.config.ClosID)\n\t\t\t\t// Pre-create the CLOS directory\n\t\t\t\tif err := os.MkdirAll(filepath.Join(closPath, \"mon_groups\"), 0o755); err != nil {\n\t\t\t\t\tt.Fatal(err)\n\t\t\t\t}\n\t\t\t}\n\t\t\tm := newManager(&configs.Config{IntelRdt: &tt.config}, id, closPath)\n\t\t\tif err := m.Apply(1234); err != nil {\n\t\t\t\tt.Fatalf(\"Apply() failed: %v\", err)\n\t\t\t}\n\t\t\ttt.testFunc(m)\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "libcontainer/intelrdt/mbm.go",
    "content": "package intelrdt\n\n// The flag to indicate if Intel RDT/MBM is enabled\nvar mbmEnabled bool\n\n// IsMBMEnabled checks if Intel RDT/MBM is enabled.\nfunc IsMBMEnabled() bool {\n\tfeaturesInit()\n\treturn mbmEnabled\n}\n\nfunc getMBMNumaNodeStats(numaPath string) (*MBMNumaNodeStats, error) {\n\tstats := &MBMNumaNodeStats{}\n\tif enabledMonFeatures.mbmTotalBytes {\n\t\tmbmTotalBytes, err := getIntelRdtParamUint(numaPath, \"mbm_total_bytes\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tstats.MBMTotalBytes = mbmTotalBytes\n\t}\n\n\tif enabledMonFeatures.mbmLocalBytes {\n\t\tmbmLocalBytes, err := getIntelRdtParamUint(numaPath, \"mbm_local_bytes\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tstats.MBMLocalBytes = mbmLocalBytes\n\t}\n\n\treturn stats, nil\n}\n"
  },
  {
    "path": "libcontainer/intelrdt/mbm_test.go",
    "content": "package intelrdt\n\nimport (\n\t\"path/filepath\"\n\t\"testing\"\n)\n\nfunc TestGetMBMNumaNodeStats(t *testing.T) {\n\tmocksNUMANodesToCreate := []string{\"mon_l3_00\", \"mon_l3_01\"}\n\n\tmocksFilesToCreate := map[string]uint64{\n\t\t\"mbm_total_bytes\": 9123911,\n\t\t\"mbm_local_bytes\": 2361361,\n\t}\n\n\tmockedL3_MON := mockResctrlL3_MON(t, mocksNUMANodesToCreate, mocksFilesToCreate)\n\n\tt.Run(\"Gather mbm\", func(t *testing.T) {\n\t\tenabledMonFeatures.mbmTotalBytes = true\n\t\tenabledMonFeatures.mbmLocalBytes = true\n\n\t\tstats := make([]MBMNumaNodeStats, 0, len(mocksNUMANodesToCreate))\n\t\tfor _, numa := range mocksNUMANodesToCreate {\n\t\t\tother, err := getMBMNumaNodeStats(filepath.Join(mockedL3_MON, \"mon_data\", numa))\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\t\tstats = append(stats, *other)\n\t\t}\n\n\t\texpectedStats := MBMNumaNodeStats{\n\t\t\tMBMTotalBytes: mocksFilesToCreate[\"mbm_total_bytes\"],\n\t\t\tMBMLocalBytes: mocksFilesToCreate[\"mbm_local_bytes\"],\n\t\t}\n\n\t\tcheckMBMStatCorrection(stats[0], expectedStats, t)\n\t\tcheckMBMStatCorrection(stats[1], expectedStats, t)\n\t})\n}\n\nfunc checkMBMStatCorrection(got, expected MBMNumaNodeStats, t *testing.T) {\n\tif got.MBMTotalBytes != expected.MBMTotalBytes {\n\t\tt.Fatalf(\"Wrong value of mbm_total_bytes. Expected: %v but got: %v\",\n\t\t\texpected.MBMTotalBytes,\n\t\t\tgot.MBMTotalBytes)\n\t}\n\n\tif got.MBMLocalBytes != expected.MBMLocalBytes {\n\t\tt.Fatalf(\"Wrong value of mbm_local_bytes. Expected: %v but got: %v\",\n\t\t\texpected.MBMLocalBytes,\n\t\t\tgot.MBMLocalBytes)\n\t}\n}\n"
  },
  {
    "path": "libcontainer/intelrdt/monitoring.go",
    "content": "package intelrdt\n\nimport (\n\t\"bufio\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/sirupsen/logrus\"\n)\n\nvar enabledMonFeatures monFeatures\n\ntype monFeatures struct {\n\tmbmTotalBytes bool\n\tmbmLocalBytes bool\n\tllcOccupancy  bool\n}\n\nfunc getMonFeatures(intelRdtRoot string) (monFeatures, error) {\n\tfile, err := os.Open(filepath.Join(intelRdtRoot, \"info\", \"L3_MON\", \"mon_features\"))\n\tif err != nil {\n\t\treturn monFeatures{}, err\n\t}\n\tdefer file.Close()\n\treturn parseMonFeatures(file)\n}\n\nfunc parseMonFeatures(reader io.Reader) (monFeatures, error) {\n\tscanner := bufio.NewScanner(reader)\n\n\tmonFeatures := monFeatures{}\n\n\tfor scanner.Scan() {\n\t\tswitch feature := scanner.Text(); feature {\n\t\tcase \"mbm_total_bytes\":\n\t\t\tmonFeatures.mbmTotalBytes = true\n\t\tcase \"mbm_local_bytes\":\n\t\t\tmonFeatures.mbmLocalBytes = true\n\t\tcase \"llc_occupancy\":\n\t\t\tmonFeatures.llcOccupancy = true\n\t\tdefault:\n\t\t\tlogrus.Warnf(\"Unsupported Intel RDT monitoring feature: %s\", feature)\n\t\t}\n\t}\n\n\treturn monFeatures, scanner.Err()\n}\n\nfunc getMonitoringStats(containerPath string, stats *Stats) error {\n\tnumaFiles, err := os.ReadDir(filepath.Join(containerPath, \"mon_data\"))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar mbmStats []MBMNumaNodeStats\n\tvar cmtStats []CMTNumaNodeStats\n\n\tfor _, file := range numaFiles {\n\t\tif file.IsDir() {\n\t\t\tnumaPath := filepath.Join(containerPath, \"mon_data\", file.Name())\n\t\t\tif IsMBMEnabled() {\n\t\t\t\tnumaMBMStats, err := getMBMNumaNodeStats(numaPath)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tmbmStats = append(mbmStats, *numaMBMStats)\n\t\t\t}\n\t\t\tif IsCMTEnabled() {\n\t\t\t\tnumaCMTStats, err := getCMTNumaNodeStats(numaPath)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tcmtStats = append(cmtStats, *numaCMTStats)\n\t\t\t}\n\t\t}\n\t}\n\n\tstats.MBMStats = &mbmStats\n\tstats.CMTStats = &cmtStats\n\n\treturn err\n}\n"
  },
  {
    "path": "libcontainer/intelrdt/monitoring_test.go",
    "content": "package intelrdt\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc TestParseMonFeatures(t *testing.T) {\n\tt.Run(\"All features available\", func(t *testing.T) {\n\t\tparsedMonFeatures, err := parseMonFeatures(\n\t\t\tstrings.NewReader(\"mbm_total_bytes\\nmbm_local_bytes\\nllc_occupancy\"))\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Error while parsing mon features err = %v\", err)\n\t\t}\n\n\t\texpectedMonFeatures := monFeatures{true, true, true}\n\n\t\tif parsedMonFeatures != expectedMonFeatures {\n\t\t\tt.Error(\"Cannot gather all features!\")\n\t\t}\n\t})\n\n\tt.Run(\"No features available\", func(t *testing.T) {\n\t\tparsedMonFeatures, err := parseMonFeatures(strings.NewReader(\"\"))\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Error while parsing mon features err = %v\", err)\n\t\t}\n\n\t\texpectedMonFeatures := monFeatures{false, false, false}\n\n\t\tif parsedMonFeatures != expectedMonFeatures {\n\t\t\tt.Error(\"Expected no features available but there is any!\")\n\t\t}\n\t})\n}\n\nfunc mockResctrlL3_MON(t *testing.T, NUMANodes []string, mocks map[string]uint64) string {\n\tt.Helper()\n\ttestDir := t.TempDir()\n\tmonDataPath := filepath.Join(testDir, \"mon_data\")\n\n\tfor _, numa := range NUMANodes {\n\t\tnumaPath := filepath.Join(monDataPath, numa)\n\t\terr := os.MkdirAll(numaPath, 0o700)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\n\t\tfor fileName, value := range mocks {\n\t\t\terr := os.WriteFile(filepath.Join(numaPath, fileName), []byte(strconv.FormatUint(value, 10)), 0o644)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\t}\n\n\t}\n\n\treturn testDir\n}\n\nfunc TestGetMonitoringStats(t *testing.T) {\n\tenabledMonFeatures.mbmTotalBytes = true\n\tenabledMonFeatures.mbmLocalBytes = true\n\tenabledMonFeatures.llcOccupancy = true\n\tmbmEnabled = true\n\tcmtEnabled = true\n\n\tmocksNUMANodesToCreate := []string{\"mon_l3_00\", \"mon_l3_01\"}\n\n\tmocksFilesToCreate := map[string]uint64{\n\t\t\"mbm_total_bytes\": 9123911,\n\t\t\"mbm_local_bytes\": 2361361,\n\t\t\"llc_occupancy\":   123331,\n\t}\n\n\tmockedL3_MON := mockResctrlL3_MON(t, mocksNUMANodesToCreate, mocksFilesToCreate)\n\n\tt.Run(\"Gather monitoring stats\", func(t *testing.T) {\n\t\tvar stats Stats\n\t\terr := getMonitoringStats(mockedL3_MON, &stats)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\n\t\texpectedMBMStats := MBMNumaNodeStats{\n\t\t\tMBMTotalBytes: mocksFilesToCreate[\"mbm_total_bytes\"],\n\t\t\tMBMLocalBytes: mocksFilesToCreate[\"mbm_local_bytes\"],\n\t\t}\n\n\t\texpectedCMTStats := CMTNumaNodeStats{LLCOccupancy: mocksFilesToCreate[\"llc_occupancy\"]}\n\n\t\tfor _, gotMBMStat := range *stats.MBMStats {\n\t\t\tcheckMBMStatCorrection(gotMBMStat, expectedMBMStats, t)\n\t\t}\n\n\t\tfor _, gotCMTStat := range *stats.CMTStats {\n\t\t\tcheckCMTStatCorrection(gotCMTStat, expectedCMTStats, t)\n\t\t}\n\t})\n}\n"
  },
  {
    "path": "libcontainer/intelrdt/stats.go",
    "content": "package intelrdt\n\ntype L3CacheInfo struct {\n\tCbmMask    string `json:\"cbm_mask,omitempty\"`\n\tMinCbmBits uint64 `json:\"min_cbm_bits,omitempty\"`\n\tNumClosids uint64 `json:\"num_closids,omitempty\"`\n}\n\ntype MemBwInfo struct {\n\tBandwidthGran uint64 `json:\"bandwidth_gran,omitempty\"`\n\tDelayLinear   uint64 `json:\"delay_linear,omitempty\"`\n\tMinBandwidth  uint64 `json:\"min_bandwidth,omitempty\"`\n\tNumClosids    uint64 `json:\"num_closids,omitempty\"`\n}\n\ntype MBMNumaNodeStats struct {\n\t// The 'mbm_total_bytes' in 'container_id' group.\n\tMBMTotalBytes uint64 `json:\"mbm_total_bytes\"`\n\n\t// The 'mbm_local_bytes' in 'container_id' group.\n\tMBMLocalBytes uint64 `json:\"mbm_local_bytes\"`\n}\n\ntype CMTNumaNodeStats struct {\n\t// The 'llc_occupancy' in 'container_id' group.\n\tLLCOccupancy uint64 `json:\"llc_occupancy\"`\n}\n\ntype Stats struct {\n\t// The read-only L3 cache information\n\tL3CacheInfo *L3CacheInfo `json:\"l3_cache_info,omitempty\"`\n\n\t// The read-only L3 cache schema in root\n\tL3CacheSchemaRoot string `json:\"l3_cache_schema_root,omitempty\"`\n\n\t// The L3 cache schema in 'container_id' group\n\tL3CacheSchema string `json:\"l3_cache_schema,omitempty\"`\n\n\t// The read-only memory bandwidth information\n\tMemBwInfo *MemBwInfo `json:\"mem_bw_info,omitempty\"`\n\n\t// The read-only memory bandwidth schema in root\n\tMemBwSchemaRoot string `json:\"mem_bw_schema_root,omitempty\"`\n\n\t// The memory bandwidth schema in 'container_id' group\n\tMemBwSchema string `json:\"mem_bw_schema,omitempty\"`\n\n\t// Schemata contains the full schemata of the ClosID (resctrl group) that the container is assigned to.\n\tSchemata []string `json:\"schemata,omitempty\"`\n\n\t// The memory bandwidth monitoring statistics from NUMA nodes in 'container_id' group\n\tMBMStats *[]MBMNumaNodeStats `json:\"mbm_stats,omitempty\"`\n\n\t// The cache monitoring technology statistics from NUMA nodes in 'container_id' group\n\tCMTStats *[]CMTNumaNodeStats `json:\"cmt_stats,omitempty\"`\n}\n\nfunc newStats() *Stats {\n\treturn &Stats{}\n}\n"
  },
  {
    "path": "libcontainer/intelrdt/util_test.go",
    "content": "/*\n * Utility for testing Intel RDT operations.\n * Creates a mock of the Intel RDT \"resource control\" filesystem for the duration of the test.\n */\npackage intelrdt\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n)\n\ntype intelRdtTestUtil struct {\n\tconfig *configs.Config\n\n\t// Path to the mock Intel RDT \"resource control\" filesystem directory\n\tIntelRdtPath string\n\n\tt *testing.T\n}\n\n// Creates a new test util\nfunc NewIntelRdtTestUtil(t *testing.T) *intelRdtTestUtil {\n\tconfig := &configs.Config{\n\t\tIntelRdt: &configs.IntelRdt{},\n\t}\n\n\t// Assign fake intelRtdRoot value, returned by Root().\n\tintelRdtRoot = t.TempDir()\n\t// Make sure Root() won't even try to parse mountinfo.\n\trootOnce.Do(func() {})\n\n\ttestIntelRdtPath := filepath.Join(intelRdtRoot, \"resctrl\")\n\n\t// Ensure the full mock Intel RDT \"resource control\" filesystem path exists\n\tif err := os.MkdirAll(testIntelRdtPath, 0o755); err != nil {\n\t\tt.Fatal(err)\n\t}\n\treturn &intelRdtTestUtil{config: config, IntelRdtPath: testIntelRdtPath, t: t}\n}\n"
  },
  {
    "path": "libcontainer/internal/userns/doc.go",
    "content": "// Package userns provides helpers for interacting with Linux user namespaces.\npackage userns\n"
  },
  {
    "path": "libcontainer/internal/userns/userns_maps_linux.c",
    "content": "//go:build linux\n\n#define _GNU_SOURCE\n#include <fcntl.h>\n#include <sched.h>\n#include <stdio.h>\n#include <unistd.h>\n#include <stdarg.h>\n#include <stdlib.h>\n\n/*\n * All of the code here is run inside an aync-signal-safe context, so we need\n * to be careful to not call any functions that could cause issues. In theory,\n * since we are a Go program, there are fewer restrictions in practice, it's\n * better to be safe than sorry.\n *\n * The only exception is exit, which we need to call to make sure we don't\n * return into runc.\n */\n\nvoid bail(int pipefd, const char *fmt, ...)\n{\n\tva_list args;\n\n\tva_start(args, fmt);\n\tvdprintf(pipefd, fmt, args);\n\tva_end(args);\n\n\texit(1);\n}\n\nint spawn_userns_cat(char *userns_path, char *path, int outfd, int errfd)\n{\n\tchar buffer[4096] = { 0 };\n\n\tpid_t child = fork();\n\tif (child != 0)\n\t\treturn child;\n\t/* in child */\n\n\t/* Join the target userns. */\n\tint nsfd = open(userns_path, O_RDONLY);\n\tif (nsfd < 0)\n\t\tbail(errfd, \"open userns path %s failed: %m\", userns_path);\n\n\tint err = setns(nsfd, CLONE_NEWUSER);\n\tif (err < 0)\n\t\tbail(errfd, \"setns %s failed: %m\", userns_path);\n\n\tclose(nsfd);\n\n\t/* Pipe the requested file contents. */\n\tint fd = open(path, O_RDONLY);\n\tif (fd < 0)\n\t\tbail(errfd, \"open %s in userns %s failed: %m\", path, userns_path);\n\n\tint nread, ntotal = 0;\n\twhile ((nread = read(fd, buffer, sizeof(buffer))) != 0) {\n\t\tif (nread < 0)\n\t\t\tbail(errfd, \"read bytes from %s failed (after %d total bytes read): %m\", path, ntotal);\n\t\tntotal += nread;\n\n\t\tint nwritten = 0;\n\t\twhile (nwritten < nread) {\n\t\t\tint n = write(outfd, buffer, nread - nwritten);\n\t\t\tif (n < 0)\n\t\t\t\tbail(errfd, \"write %d bytes from %s failed (after %d bytes written): %m\",\n\t\t\t\t     nread - nwritten, path, nwritten);\n\t\t\tnwritten += n;\n\t\t}\n\t\tif (nread != nwritten)\n\t\t\tbail(errfd, \"mismatch for bytes read and written: %d read != %d written\", nread, nwritten);\n\t}\n\n\tclose(fd);\n\tclose(outfd);\n\tclose(errfd);\n\n\t/* We must exit here, otherwise we would return into a forked runc. */\n\texit(0);\n}\n"
  },
  {
    "path": "libcontainer/internal/userns/userns_maps_linux.go",
    "content": "//go:build linux\n\npackage userns\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"unsafe\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/sirupsen/logrus\"\n)\n\n/*\n#include <stdlib.h>\nextern int spawn_userns_cat(char *userns_path, char *path, int outfd, int errfd);\n*/\nimport \"C\"\n\nfunc parseIdmapData(data []byte) (ms []configs.IDMap, err error) {\n\tscanner := bufio.NewScanner(bytes.NewReader(data))\n\tfor scanner.Scan() {\n\t\tvar m configs.IDMap\n\t\tline := scanner.Text()\n\t\tif _, err := fmt.Sscanf(line, \"%d %d %d\", &m.ContainerID, &m.HostID, &m.Size); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"parsing id map failed: invalid format in line %q: %w\", line, err)\n\t\t}\n\t\tms = append(ms, m)\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, fmt.Errorf(\"parsing id map failed: %w\", err)\n\t}\n\treturn ms, nil\n}\n\n// Do something equivalent to nsenter --user=<nsPath> cat <path>, but more\n// efficiently. Returns the contents of the requested file from within the user\n// namespace.\nfunc spawnUserNamespaceCat(nsPath, path string) ([]byte, error) {\n\trdr, wtr, err := os.Pipe()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"create pipe for userns spawn failed: %w\", err)\n\t}\n\tdefer rdr.Close()\n\tdefer wtr.Close()\n\n\terrRdr, errWtr, err := os.Pipe()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"create error pipe for userns spawn failed: %w\", err)\n\t}\n\tdefer errRdr.Close()\n\tdefer errWtr.Close()\n\n\tcNsPath := C.CString(nsPath)\n\tdefer C.free(unsafe.Pointer(cNsPath))\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\tchildPid := C.spawn_userns_cat(cNsPath, cPath, C.int(wtr.Fd()), C.int(errWtr.Fd()))\n\n\tif childPid < 0 {\n\t\treturn nil, fmt.Errorf(\"failed to spawn fork for userns\")\n\t} else if childPid == 0 {\n\t\t// this should never happen\n\t\tpanic(\"runc executing inside fork child -- unsafe state!\")\n\t}\n\n\t// We are in the parent -- close the write end of the pipe before reading.\n\twtr.Close()\n\toutput, err := io.ReadAll(rdr)\n\trdr.Close()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"reading from userns spawn failed: %w\", err)\n\t}\n\n\t// Ditto for the error pipe.\n\terrWtr.Close()\n\terrOutput, err := io.ReadAll(errRdr)\n\terrRdr.Close()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"reading from userns spawn error pipe failed: %w\", err)\n\t}\n\terrOutput = bytes.TrimSpace(errOutput)\n\n\t// Clean up the child.\n\tchild, err := os.FindProcess(int(childPid))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"could not find userns spawn process: %w\", err)\n\t}\n\tstate, err := child.Wait()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to wait for userns spawn process: %w\", err)\n\t}\n\tif !state.Success() {\n\t\terrStr := string(errOutput)\n\t\tif errStr == \"\" {\n\t\t\terrStr = fmt.Sprintf(\"unknown error (status code %d)\", state.ExitCode())\n\t\t}\n\t\treturn nil, fmt.Errorf(\"userns spawn: %s\", errStr)\n\t} else if len(errOutput) > 0 {\n\t\t// We can just ignore weird output in the error pipe if the process\n\t\t// didn't bail(), but for completeness output for debugging.\n\t\tlogrus.Debugf(\"userns spawn succeeded but unexpected error message found: %s\", string(errOutput))\n\t}\n\t// The subprocess succeeded, return whatever it wrote to the pipe.\n\treturn output, nil\n}\n\nfunc GetUserNamespaceMappings(nsPath string) (uidMap, gidMap []configs.IDMap, err error) {\n\tvar (\n\t\tpid         int\n\t\textra       rune\n\t\ttryFastPath bool\n\t)\n\n\t// nsPath is usually of the form /proc/<pid>/ns/user, which means that we\n\t// already have a pid that is part of the user namespace and thus we can\n\t// just use the pid to read from /proc/<pid>/*id_map.\n\t//\n\t// Note that Sscanf doesn't consume the whole input, so we check for any\n\t// trailing data with %c. That way, we can be sure the pattern matched\n\t// /proc/$pid/ns/user _exactly_ iff n === 1.\n\tif n, _ := fmt.Sscanf(nsPath, \"/proc/%d/ns/user%c\", &pid, &extra); n == 1 {\n\t\ttryFastPath = pid > 0\n\t}\n\n\tfor _, mapType := range []struct {\n\t\tname  string\n\t\tidMap *[]configs.IDMap\n\t}{\n\t\t{\"uid_map\", &uidMap},\n\t\t{\"gid_map\", &gidMap},\n\t} {\n\t\tvar mapData []byte\n\n\t\tif tryFastPath {\n\t\t\tpath := fmt.Sprintf(\"/proc/%d/%s\", pid, mapType.name)\n\t\t\tdata, err := os.ReadFile(path)\n\t\t\tif err != nil {\n\t\t\t\t// Do not error out here -- we need to try the slow path if the\n\t\t\t\t// fast path failed.\n\t\t\t\tlogrus.Debugf(\"failed to use fast path to read %s from userns %s (error: %s), falling back to slow userns-join path\", mapType.name, nsPath, err)\n\t\t\t} else {\n\t\t\t\tmapData = data\n\t\t\t}\n\t\t} else {\n\t\t\tlogrus.Debugf(\"cannot use fast path to read %s from userns %s, falling back to slow userns-join path\", mapType.name, nsPath)\n\t\t}\n\n\t\tif mapData == nil {\n\t\t\t// We have to actually join the namespace if we cannot take the\n\t\t\t// fast path. The path is resolved with respect to the child\n\t\t\t// process, so just use /proc/self.\n\t\t\tdata, err := spawnUserNamespaceCat(nsPath, \"/proc/self/\"+mapType.name)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, nil, err\n\t\t\t}\n\t\t\tmapData = data\n\t\t}\n\t\tidMap, err := parseIdmapData(mapData)\n\t\tif err != nil {\n\t\t\treturn nil, nil, fmt.Errorf(\"failed to parse %s of userns %s: %w\", mapType.name, nsPath, err)\n\t\t}\n\t\t*mapType.idMap = idMap\n\t}\n\n\treturn uidMap, gidMap, nil\n}\n\n// IsSameMapping returns whether or not the two id mappings are the same. Note\n// that if the order of the mappings is different, or a mapping has been split,\n// the mappings will be considered different.\nfunc IsSameMapping(a, b []configs.IDMap) bool {\n\tif len(a) != len(b) {\n\t\treturn false\n\t}\n\tfor idx := range a {\n\t\tif a[idx] != b[idx] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "libcontainer/internal/userns/usernsfd_linux.go",
    "content": "package userns\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n)\n\ntype Mapping struct {\n\tUIDMappings []configs.IDMap\n\tGIDMappings []configs.IDMap\n}\n\nfunc (m Mapping) toSys() (uids, gids []syscall.SysProcIDMap) {\n\tfor _, uid := range m.UIDMappings {\n\t\tuids = append(uids, syscall.SysProcIDMap{\n\t\t\tContainerID: int(uid.ContainerID),\n\t\t\tHostID:      int(uid.HostID),\n\t\t\tSize:        int(uid.Size),\n\t\t})\n\t}\n\tfor _, gid := range m.GIDMappings {\n\t\tgids = append(gids, syscall.SysProcIDMap{\n\t\t\tContainerID: int(gid.ContainerID),\n\t\t\tHostID:      int(gid.HostID),\n\t\t\tSize:        int(gid.Size),\n\t\t})\n\t}\n\treturn uids, gids\n}\n\n// id returns a unique identifier for this mapping, agnostic of the order of\n// the uid and gid mappings (because the order doesn't matter to the kernel).\n// The set of userns handles is indexed using this ID.\nfunc (m Mapping) id() string {\n\tuids := make([]string, 0, len(m.UIDMappings))\n\tfor _, idmap := range m.UIDMappings {\n\t\tuids = append(uids, fmt.Sprintf(\"%d:%d:%d\", idmap.ContainerID, idmap.HostID, idmap.Size))\n\t}\n\tgids := make([]string, 0, len(m.GIDMappings))\n\tfor _, idmap := range m.GIDMappings {\n\t\tgids = append(gids, fmt.Sprintf(\"%d:%d:%d\", idmap.ContainerID, idmap.HostID, idmap.Size))\n\t}\n\t// We don't care about the sort order -- just sort them.\n\tsort.Strings(uids)\n\tsort.Strings(gids)\n\treturn \"uid=\" + strings.Join(uids, \",\") + \";gid=\" + strings.Join(gids, \",\")\n}\n\ntype Handles struct {\n\tm    sync.Mutex\n\tmaps map[string]*os.File\n}\n\n// Release all resources associated with this Handle. All existing files\n// returned from Get() will continue to work even after calling Release(). The\n// same Handles can be reused after calling Release().\nfunc (hs *Handles) Release() {\n\ths.m.Lock()\n\tdefer hs.m.Unlock()\n\n\t// Close the files for good measure, though GC will do that for us anyway.\n\tfor _, file := range hs.maps {\n\t\t_ = file.Close()\n\t}\n\ths.maps = nil\n}\n\nfunc spawnProc(req Mapping) (*os.Process, error) {\n\t// We need to spawn a subprocess with the requested mappings, which is\n\t// unfortunately quite expensive. The \"safe\" way of doing this is natively\n\t// with Go (and then spawning something like \"sleep infinity\"), but\n\t// execve() is a waste of cycles because we just need some process to have\n\t// the right mapping, we don't care what it's executing. The \"unsafe\"\n\t// option of doing a clone() behind the back of Go is probably okay in\n\t// theory as long as we just do kill(getpid(), SIGSTOP). However, if we\n\t// tell Go to put the new process into PTRACE_TRACEME mode, we can avoid\n\t// the exec and not have to faff around with the mappings.\n\t//\n\t// Note that Go's stdlib does not support newuidmap, but in the case of\n\t// id-mapped mounts, it seems incredibly unlikely that the user will be\n\t// requesting us to do a remapping as an unprivileged user with mappings\n\t// they have privileges over.\n\tlogrus.Debugf(\"spawning dummy process for id-mapping %s\", req.id())\n\tuidMappings, gidMappings := req.toSys()\n\t// We don't need to use /proc/thread-self here because the exe mm of a\n\t// thread-group is guaranteed to be the same for all threads by definition.\n\t// This lets us avoid having to do runtime.LockOSThread.\n\treturn os.StartProcess(\"/proc/self/exe\", []string{\"runc\", \"--help\"}, &os.ProcAttr{\n\t\tSys: &syscall.SysProcAttr{\n\t\t\tCloneflags:                 unix.CLONE_NEWUSER,\n\t\t\tUidMappings:                uidMappings,\n\t\t\tGidMappings:                gidMappings,\n\t\t\tGidMappingsEnableSetgroups: false,\n\t\t\t// Put the process into PTRACE_TRACEME mode to allow us to get the\n\t\t\t// userns without having a proper execve() target.\n\t\t\tPtrace: true,\n\t\t},\n\t})\n}\n\nfunc dupFile(f *os.File) (*os.File, error) {\n\tnewFd, err := unix.FcntlInt(f.Fd(), unix.F_DUPFD_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn nil, os.NewSyscallError(\"fcntl(F_DUPFD_CLOEXEC)\", err)\n\t}\n\treturn os.NewFile(uintptr(newFd), f.Name()), nil\n}\n\n// Get returns a handle to a /proc/$pid/ns/user nsfs file with the requested\n// mapping. The processes spawned to produce userns nsfds are cached, so if\n// equivalent user namespace mappings are requested, the same user namespace\n// will be returned. The caller is responsible for closing the returned file\n// descriptor.\nfunc (hs *Handles) Get(req Mapping) (file *os.File, err error) {\n\ths.m.Lock()\n\tdefer hs.m.Unlock()\n\n\tif hs.maps == nil {\n\t\ths.maps = make(map[string]*os.File)\n\t}\n\n\tfile, ok := hs.maps[req.id()]\n\tif !ok {\n\t\tproc, err := spawnProc(req)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to spawn dummy process for map %s: %w\", req.id(), err)\n\t\t}\n\t\t// Make sure we kill the helper process. We ignore errors because\n\t\t// there's not much we can do about them anyway, and ultimately\n\t\tdefer func() {\n\t\t\t_ = proc.Kill()\n\t\t\t_, _ = proc.Wait()\n\t\t}()\n\n\t\t// Stash away a handle to the userns file. This is neater than keeping\n\t\t// the process alive, because Go's GC can handle files much better than\n\t\t// leaked processes, and having long-living useless processes seems\n\t\t// less than ideal.\n\t\tfile, err = os.Open(fmt.Sprintf(\"/proc/%d/ns/user\", proc.Pid))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ths.maps[req.id()] = file\n\t}\n\t// Duplicate the file, to make sure the lifecycle of each *os.File we\n\t// return is independent.\n\treturn dupFile(file)\n}\n"
  },
  {
    "path": "libcontainer/internal/userns/usernsfd_linux_test.go",
    "content": "package userns\n\nimport (\n\t\"os\"\n\t\"testing\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n)\n\nfunc BenchmarkSpawnProc(b *testing.B) {\n\tif os.Geteuid() != 0 {\n\t\tb.Skip(\"spawning user namespaced processes requires root\")\n\t}\n\n\t// We can reuse the mapping as we call spawnProc() directly.\n\tmapping := Mapping{\n\t\tUIDMappings: []configs.IDMap{\n\t\t\t{ContainerID: 0, HostID: 1337, Size: 142},\n\t\t\t{ContainerID: 150, HostID: 0, Size: 1},\n\t\t\t{ContainerID: 442, HostID: 1111, Size: 12},\n\t\t\t{ContainerID: 1000, HostID: 9999, Size: 92},\n\t\t\t{ContainerID: 9999, HostID: 1000000, Size: 4},\n\t\t\t// Newer kernels support more than 5 entries, but stick to 5 here.\n\t\t},\n\t\tGIDMappings: []configs.IDMap{\n\t\t\t{ContainerID: 1, HostID: 2337, Size: 142},\n\t\t\t{ContainerID: 145, HostID: 6, Size: 1},\n\t\t\t{ContainerID: 200, HostID: 1000, Size: 12},\n\t\t\t{ContainerID: 1000, HostID: 9888, Size: 92},\n\t\t\t{ContainerID: 8999, HostID: 1000000, Size: 4},\n\t\t\t// Newer kernels support more than 5 entries, but stick to 5 here.\n\t\t},\n\t}\n\n\tprocs := make([]*os.Process, 0, b.N)\n\tb.Cleanup(func() {\n\t\tfor _, proc := range procs {\n\t\t\tif proc != nil {\n\t\t\t\t_ = proc.Kill()\n\t\t\t\t_, _ = proc.Wait()\n\t\t\t}\n\t\t}\n\t})\n\n\tfor b.Loop() {\n\t\tproc, err := spawnProc(mapping)\n\t\tif err != nil {\n\t\t\tb.Error(err)\n\t\t}\n\t\tprocs = append(procs, proc)\n\t}\n}\n"
  },
  {
    "path": "libcontainer/keys/keyctl.go",
    "content": "// Package keys provides helpers for Linux keyrings.\npackage keys\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\ntype KeySerial uint32\n\nfunc JoinSessionKeyring(name string) (KeySerial, error) {\n\tsessKeyID, err := unix.KeyctlJoinSessionKeyring(name)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"unable to create session key: %w\", err)\n\t}\n\treturn KeySerial(sessKeyID), nil\n}\n\n// ModKeyringPerm modifies permissions on a keyring by reading the current permissions,\n// anding the bits with the given mask (clearing permissions) and setting\n// additional permission bits\nfunc ModKeyringPerm(ringID KeySerial, mask, setbits uint32) error {\n\tdest, err := unix.KeyctlString(unix.KEYCTL_DESCRIBE, int(ringID))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tres := strings.Split(dest, \";\")\n\tif len(res) < 5 {\n\t\treturn errors.New(\"Destination buffer for key description is too small\")\n\t}\n\n\t// parse permissions\n\tperm64, err := strconv.ParseUint(res[3], 16, 32)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tperm := (uint32(perm64) & mask) | setbits\n\n\treturn unix.KeyctlSetperm(int(ringID), perm)\n}\n"
  },
  {
    "path": "libcontainer/logs/logs.go",
    "content": "// Package logs provides helpers for logging used within runc (specifically for\n// forwarding logs from \"runc init\" to the main runc process).\npackage logs\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"io\"\n\n\t\"github.com/sirupsen/logrus\"\n)\n\nvar fatalsSep = []byte(\"; \")\n\nfunc ForwardLogs(logPipe io.ReadCloser) chan error {\n\tdone := make(chan error, 1)\n\ts := bufio.NewScanner(logPipe)\n\n\tlogger := logrus.StandardLogger()\n\tif logger.ReportCaller {\n\t\t// Need a copy of the standard logger, but with ReportCaller\n\t\t// turned off, as the logs are merely forwarded and their\n\t\t// true source is not this file/line/function.\n\t\tlogNoCaller := *logrus.StandardLogger()\n\t\tlogNoCaller.ReportCaller = false\n\t\tlogger = &logNoCaller\n\t}\n\n\tgo func() {\n\t\tfatals := []byte{}\n\t\tfor s.Scan() {\n\t\t\tfatals = processEntry(s.Bytes(), logger, fatals)\n\t\t}\n\t\tif err := s.Err(); err != nil {\n\t\t\tlogrus.Errorf(\"error reading from log source: %v\", err)\n\t\t}\n\t\tif err := logPipe.Close(); err != nil {\n\t\t\tlogrus.Errorf(\"error closing log source: %v\", err)\n\t\t}\n\t\t// The only error we return is fatal messages from runc init.\n\t\tvar err error\n\t\tif len(fatals) > 0 {\n\t\t\terr = errors.New(string(bytes.TrimSuffix(fatals, fatalsSep)))\n\t\t}\n\t\tdone <- err\n\t\tclose(done)\n\t}()\n\n\treturn done\n}\n\n// processEntry parses the error and either logs it via the standard logger or,\n// if this is a fatal error, appends its text to fatals.\nfunc processEntry(text []byte, logger *logrus.Logger, fatals []byte) []byte {\n\tif len(text) == 0 {\n\t\treturn fatals\n\t}\n\n\tvar jl struct {\n\t\tLevel logrus.Level `json:\"level\"`\n\t\tMsg   string       `json:\"msg\"`\n\t}\n\tif err := json.Unmarshal(text, &jl); err != nil {\n\t\tlogrus.Errorf(\"failed to decode %q to json: %v\", text, err)\n\t\treturn fatals\n\t}\n\n\tif jl.Level == logrus.FatalLevel {\n\t\tfatals = append(fatals, jl.Msg...)\n\t\tfatals = append(fatals, fatalsSep...)\n\t} else {\n\t\tlogger.Log(jl.Level, jl.Msg)\n\t}\n\treturn fatals\n}\n"
  },
  {
    "path": "libcontainer/logs/logs_linux_test.go",
    "content": "package logs\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"os\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/sirupsen/logrus\"\n)\n\nconst msgErr = `\"level\":\"error\"`\n\nfunc TestLoggingToFile(t *testing.T) {\n\tl := runLogForwarding(t)\n\n\tmsg := `\"level\":\"info\",\"msg\":\"kitten\"`\n\tlogToLogWriter(t, l, msg)\n\tfinish(t, l)\n\tcheck(t, l, msg, msgErr)\n}\n\nfunc TestLogForwardingDoesNotStopOnJsonDecodeErr(t *testing.T) {\n\tl := runLogForwarding(t)\n\n\tlogToLogWriter(t, l, `\"invalid-json-with-kitten\"`)\n\tcheckWait(t, l, msgErr, \"\")\n\n\ttruncateLogFile(t, l.file)\n\n\tmsg := `\"level\":\"info\",\"msg\":\"puppy\"`\n\tlogToLogWriter(t, l, msg)\n\tfinish(t, l)\n\tcheck(t, l, msg, msgErr)\n}\n\nfunc TestLogForwardingDoesNotStopOnLogLevelParsingErr(t *testing.T) {\n\tl := runLogForwarding(t)\n\n\tmsg := `\"level\":\"alert\",\"msg\":\"puppy\"`\n\tlogToLogWriter(t, l, msg)\n\tcheckWait(t, l, msgErr, msg)\n\n\ttruncateLogFile(t, l.file)\n\n\tmsg = `\"level\":\"info\",\"msg\":\"puppy\"`\n\tlogToLogWriter(t, l, msg)\n\tfinish(t, l)\n\tcheck(t, l, msg, msgErr)\n}\n\nfunc TestLogForwardingStopsAfterClosingTheWriter(t *testing.T) {\n\tl := runLogForwarding(t)\n\n\tmsg := `\"level\":\"info\",\"msg\":\"sync\"`\n\tlogToLogWriter(t, l, msg)\n\n\t// Do not use finish() here as we check done pipe ourselves.\n\tl.w.Close()\n\tselect {\n\tcase <-l.done:\n\tcase <-time.After(10 * time.Second):\n\t\tt.Fatal(\"log forwarding did not stop after closing the pipe\")\n\t}\n\n\tcheck(t, l, msg, msgErr)\n}\n\nfunc logToLogWriter(t *testing.T, l *log, message string) {\n\tt.Helper()\n\t_, err := l.w.Write([]byte(\"{\" + message + \"}\\n\"))\n\tif err != nil {\n\t\tt.Fatalf(\"failed to write %q to log writer: %v\", message, err)\n\t}\n}\n\ntype log struct {\n\tw    io.WriteCloser\n\tfile *os.File\n\tdone chan error\n}\n\nfunc runLogForwarding(t *testing.T) *log {\n\tt.Helper()\n\tlogR, logW, err := os.Pipe()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tt.Cleanup(func() {\n\t\tlogR.Close()\n\t\tlogW.Close()\n\t})\n\n\ttempFile, err := os.CreateTemp(\"\", \"\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tt.Cleanup(func() {\n\t\ttempFile.Close()\n\t\tos.Remove(tempFile.Name())\n\t})\n\n\tlogrus.SetOutput(tempFile)\n\tlogrus.SetFormatter(&logrus.JSONFormatter{})\n\tdoneForwarding := ForwardLogs(logR)\n\n\treturn &log{w: logW, done: doneForwarding, file: tempFile}\n}\n\nfunc finish(t *testing.T, l *log) {\n\tt.Helper()\n\tl.w.Close()\n\tif err := <-l.done; err != nil {\n\t\tt.Fatalf(\"ForwardLogs: %v\", err)\n\t}\n}\n\nfunc truncateLogFile(t *testing.T, file *os.File) {\n\tt.Helper()\n\n\terr := file.Truncate(0)\n\tif err != nil {\n\t\tt.Fatalf(\"failed to truncate log file: %v\", err)\n\t}\n}\n\n// check checks that the file contains txt and does not contain notxt.\nfunc check(t *testing.T, l *log, txt, notxt string) {\n\tt.Helper()\n\tcontents, err := os.ReadFile(l.file.Name())\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif txt != \"\" && !bytes.Contains(contents, []byte(txt)) {\n\t\tt.Fatalf(\"%s does not contain %s\", contents, txt)\n\t}\n\tif notxt != \"\" && bytes.Contains(contents, []byte(notxt)) {\n\t\tt.Fatalf(\"%s does contain %s\", contents, notxt)\n\t}\n}\n\n// checkWait is like check, but if the file is empty,\n// it waits until it's not.\nfunc checkWait(t *testing.T, l *log, txt, notxt string) {\n\tt.Helper()\n\tconst (\n\t\tdelay = 100 * time.Millisecond\n\t\titer  = 3\n\t)\n\tfor i := 0; ; i++ {\n\t\tst, err := l.file.Stat()\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif st.Size() > 0 {\n\t\t\tbreak\n\t\t}\n\t\tif i == iter {\n\t\t\tt.Fatalf(\"waited %s for file %s to be non-empty but it still is\", iter*delay, l.file.Name())\n\t\t}\n\t\ttime.Sleep(delay)\n\t}\n\n\tcheck(t, l, txt, notxt)\n}\n"
  },
  {
    "path": "libcontainer/message_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// list of known message types we want to send to bootstrap program\n// The number is randomly chosen to not conflict with known netlink types\nconst (\n\tInitMsg          uint16 = 62000\n\tCloneFlagsAttr   uint16 = 27281\n\tNsPathsAttr      uint16 = 27282\n\tUidmapAttr       uint16 = 27283\n\tGidmapAttr       uint16 = 27284\n\tSetgroupAttr     uint16 = 27285\n\tOomScoreAdjAttr  uint16 = 27286\n\tRootlessEUIDAttr uint16 = 27287\n\tUidmapPathAttr   uint16 = 27288\n\tGidmapPathAttr   uint16 = 27289\n\tTimeOffsetsAttr  uint16 = 27290\n)\n\ntype Int32msg struct {\n\tType  uint16\n\tValue uint32\n}\n\n// Serialize serializes the message.\n// Int32msg has the following representation\n// | nlattr len | nlattr type |\n// | uint32 value             |\nfunc (msg *Int32msg) Serialize() []byte {\n\tbuf := make([]byte, msg.Len())\n\tnative := nl.NativeEndian()\n\tnative.PutUint16(buf[0:2], uint16(msg.Len()))\n\tnative.PutUint16(buf[2:4], msg.Type)\n\tnative.PutUint32(buf[4:8], msg.Value)\n\treturn buf\n}\n\nfunc (msg *Int32msg) Len() int {\n\treturn unix.NLA_HDRLEN + 4\n}\n\n// Bytemsg has the following representation\n// | nlattr len | nlattr type |\n// | value              | pad |\ntype Bytemsg struct {\n\tType  uint16\n\tValue []byte\n}\n\nfunc (msg *Bytemsg) Serialize() []byte {\n\tl := msg.Len()\n\tif l > math.MaxUint16 {\n\t\t// We cannot return nil nor an error here, so we panic with\n\t\t// a specific type instead, which is handled via recover in\n\t\t// bootstrapData.\n\t\tpanic(netlinkError{fmt.Errorf(\"netlink: cannot serialize bytemsg of length %d (larger than UINT16_MAX)\", l)})\n\t}\n\tbuf := make([]byte, (l+unix.NLA_ALIGNTO-1) & ^(unix.NLA_ALIGNTO-1))\n\tnative := nl.NativeEndian()\n\tnative.PutUint16(buf[0:2], uint16(l))\n\tnative.PutUint16(buf[2:4], msg.Type)\n\tcopy(buf[4:], msg.Value)\n\treturn buf\n}\n\nfunc (msg *Bytemsg) Len() int {\n\treturn unix.NLA_HDRLEN + len(msg.Value) + 1 // null-terminated\n}\n\ntype Boolmsg struct {\n\tType  uint16\n\tValue bool\n}\n\nfunc (msg *Boolmsg) Serialize() []byte {\n\tbuf := make([]byte, msg.Len())\n\tnative := nl.NativeEndian()\n\tnative.PutUint16(buf[0:2], uint16(msg.Len()))\n\tnative.PutUint16(buf[2:4], msg.Type)\n\tif msg.Value {\n\t\tnative.PutUint32(buf[4:8], uint32(1))\n\t} else {\n\t\tnative.PutUint32(buf[4:8], uint32(0))\n\t}\n\treturn buf\n}\n\nfunc (msg *Boolmsg) Len() int {\n\treturn unix.NLA_HDRLEN + 4 // alignment\n}\n"
  },
  {
    "path": "libcontainer/mount_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io/fs\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/internal/userns\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n)\n\n// mountSourceType indicates what type of file descriptor is being returned. It\n// is used to tell rootfs_linux.go whether or not to use move_mount(2) to\n// install the mount.\ntype mountSourceType string\n\nconst (\n\t// An open_tree(2)-style file descriptor that needs to be installed using\n\t// move_mount(2) to install.\n\tmountSourceOpenTree mountSourceType = \"open_tree\"\n\t// A plain file descriptor that can be mounted through /proc/thread-self/fd.\n\tmountSourcePlain mountSourceType = \"plain-open\"\n)\n\ntype mountSource struct {\n\tType mountSourceType `json:\"type\"`\n\tfile *os.File        `json:\"-\"`\n}\n\n// mountError holds an error from a failed mount or unmount operation.\ntype mountError struct {\n\top      string\n\tsource  string\n\tsrcFile *mountSource\n\ttarget  string\n\tdstFd   string\n\tflags   uintptr\n\tdata    string\n\terr     error\n}\n\n// int32plus is a collection of int types with >=32 bits.\ntype int32plus interface {\n\tint | uint | int32 | uint32 | int64 | uint64 | uintptr\n}\n\n// stringifyMountFlags converts mount(2) flags to a string that you can use in\n// error messages.\nfunc stringifyMountFlags[Int int32plus](flags Int) string {\n\tflagNames := []struct {\n\t\tname string\n\t\tbits Int\n\t}{\n\t\t{\"MS_RDONLY\", unix.MS_RDONLY},\n\t\t{\"MS_NOSUID\", unix.MS_NOSUID},\n\t\t{\"MS_NODEV\", unix.MS_NODEV},\n\t\t{\"MS_NOEXEC\", unix.MS_NOEXEC},\n\t\t{\"MS_SYNCHRONOUS\", unix.MS_SYNCHRONOUS},\n\t\t{\"MS_REMOUNT\", unix.MS_REMOUNT},\n\t\t{\"MS_MANDLOCK\", unix.MS_MANDLOCK},\n\t\t{\"MS_DIRSYNC\", unix.MS_DIRSYNC},\n\t\t{\"MS_NOSYMFOLLOW\", unix.MS_NOSYMFOLLOW},\n\t\t// No (1 << 9) flag.\n\t\t{\"MS_NOATIME\", unix.MS_NOATIME},\n\t\t{\"MS_NODIRATIME\", unix.MS_NODIRATIME},\n\t\t{\"MS_BIND\", unix.MS_BIND},\n\t\t{\"MS_MOVE\", unix.MS_MOVE},\n\t\t{\"MS_REC\", unix.MS_REC},\n\t\t// MS_VERBOSE was deprecated and swapped to MS_SILENT.\n\t\t{\"MS_SILENT\", unix.MS_SILENT},\n\t\t{\"MS_POSIXACL\", unix.MS_POSIXACL},\n\t\t{\"MS_UNBINDABLE\", unix.MS_UNBINDABLE},\n\t\t{\"MS_PRIVATE\", unix.MS_PRIVATE},\n\t\t{\"MS_SLAVE\", unix.MS_SLAVE},\n\t\t{\"MS_SHARED\", unix.MS_SHARED},\n\t\t{\"MS_RELATIME\", unix.MS_RELATIME},\n\t\t// MS_KERNMOUNT (1 << 22) is internal to the kernel.\n\t\t{\"MS_I_VERSION\", unix.MS_I_VERSION},\n\t\t{\"MS_STRICTATIME\", unix.MS_STRICTATIME},\n\t\t{\"MS_LAZYTIME\", unix.MS_LAZYTIME},\n\t}\n\tvar (\n\t\tflagSet  []string\n\t\tseenBits Int\n\t)\n\tfor _, flag := range flagNames {\n\t\tif flags&flag.bits == flag.bits {\n\t\t\tseenBits |= flag.bits\n\t\t\tflagSet = append(flagSet, flag.name)\n\t\t}\n\t}\n\t// If there were any remaining flags specified we don't know the name of,\n\t// just add them in an 0x... format.\n\tif remaining := flags &^ seenBits; remaining != 0 {\n\t\tflagSet = append(flagSet, \"0x\"+strconv.FormatUint(uint64(remaining), 16))\n\t}\n\treturn strings.Join(flagSet, \"|\")\n}\n\n// Error provides a string error representation.\nfunc (e *mountError) Error() string {\n\tout := e.op + \" \"\n\n\tif e.source != \"\" {\n\t\tout += \"src=\" + e.source + \", \"\n\t\tif e.srcFile != nil {\n\t\t\tout += \"srcType=\" + string(e.srcFile.Type) + \", \"\n\t\t\tout += \"srcFd=\" + strconv.Itoa(int(e.srcFile.file.Fd())) + \", \"\n\t\t}\n\t}\n\tout += \"dst=\" + e.target\n\tif e.dstFd != \"\" {\n\t\tout += \", dstFd=\" + e.dstFd\n\t}\n\n\tif e.flags != uintptr(0) {\n\t\tout += \", flags=\" + stringifyMountFlags(e.flags)\n\t}\n\tif e.data != \"\" {\n\t\tout += \", data=\" + e.data\n\t}\n\n\tout += \": \" + e.err.Error()\n\treturn out\n}\n\n// Unwrap returns the underlying error.\n// This is a convention used by Go 1.13+ standard library.\nfunc (e *mountError) Unwrap() error {\n\treturn e.err\n}\n\n// mount is a simple unix.Mount wrapper, returning an error with more context\n// in case it failed.\nfunc mount(source, target, fstype string, flags uintptr, data string) error {\n\treturn mountViaFds(source, nil, target, \"\", fstype, flags, data)\n}\n\n// mountViaFds is a unix.Mount wrapper which uses srcFile instead of source,\n// and dstFd instead of target, unless those are empty.\n//\n// If srcFile is non-nil and flags does not contain MS_REMOUNT, mountViaFds\n// will mount it according to the mountSourceType of the file descriptor.\n//\n// The dstFd argument, if non-empty, is expected to be in the form of a path to\n// an opened file descriptor on procfs (i.e. \"/proc/thread-self/fd/NN\").\n//\n// If a file descriptor is used instead of a source or a target path, the\n// corresponding path is only used to add context to an error in case the mount\n// operation has failed.\nfunc mountViaFds(source string, srcFile *mountSource, target, dstFd, fstype string, flags uintptr, data string) error {\n\t// MS_REMOUNT and srcFile don't make sense together.\n\tif srcFile != nil && flags&unix.MS_REMOUNT != 0 {\n\t\tlogrus.Debugf(\"mount source passed along with MS_REMOUNT -- ignoring srcFile\")\n\t\tsrcFile = nil\n\t}\n\tdst := target\n\tif dstFd != \"\" {\n\t\tdst = dstFd\n\t}\n\tsrc := source\n\tisMoveMount := srcFile != nil && srcFile.Type == mountSourceOpenTree\n\tif srcFile != nil {\n\t\t// If we're going to use the /proc/thread-self/... path for classic\n\t\t// mount(2), we need to get a safe handle to /proc/thread-self. This\n\t\t// isn't needed for move_mount(2) because in that case the path is just\n\t\t// a dummy string used for error info.\n\t\tsrcFileFd := srcFile.file.Fd()\n\t\tif isMoveMount {\n\t\t\tsrc = \"/proc/self/fd/\" + strconv.Itoa(int(srcFileFd))\n\t\t} else {\n\t\t\tvar closer utils.ProcThreadSelfCloser\n\t\t\tsrc, closer = utils.ProcThreadSelfFd(srcFileFd)\n\t\t\tdefer closer()\n\t\t}\n\t}\n\n\tvar op string\n\tvar err error\n\tif isMoveMount {\n\t\top = \"move_mount\"\n\t\terr = unix.MoveMount(int(srcFile.file.Fd()), \"\",\n\t\t\tunix.AT_FDCWD, dstFd,\n\t\t\tunix.MOVE_MOUNT_F_EMPTY_PATH|unix.MOVE_MOUNT_T_SYMLINKS)\n\t} else {\n\t\top = \"mount\"\n\t\terr = unix.Mount(src, dst, fstype, flags, data)\n\t}\n\tif err != nil {\n\t\treturn &mountError{\n\t\t\top:      op,\n\t\t\tsource:  source,\n\t\t\tsrcFile: srcFile,\n\t\t\ttarget:  target,\n\t\t\tdstFd:   dstFd,\n\t\t\tflags:   flags,\n\t\t\tdata:    data,\n\t\t\terr:     err,\n\t\t}\n\t}\n\treturn nil\n}\n\n// unmount is a simple unix.Unmount wrapper.\nfunc unmount(target string, flags int) error {\n\terr := unix.Unmount(target, flags)\n\tif err != nil {\n\t\treturn &mountError{\n\t\t\top:     \"unmount\",\n\t\t\ttarget: target,\n\t\t\tflags:  uintptr(flags),\n\t\t\terr:    err,\n\t\t}\n\t}\n\treturn nil\n}\n\n// syscallMode returns the syscall-specific mode bits from Go's portable mode bits.\n// Copy from https://cs.opensource.google/go/go/+/refs/tags/go1.20.7:src/os/file_posix.go;l=61-75\nfunc syscallMode(i fs.FileMode) (o uint32) {\n\to |= uint32(i.Perm())\n\tif i&fs.ModeSetuid != 0 {\n\t\to |= unix.S_ISUID\n\t}\n\tif i&fs.ModeSetgid != 0 {\n\t\to |= unix.S_ISGID\n\t}\n\tif i&fs.ModeSticky != 0 {\n\t\to |= unix.S_ISVTX\n\t}\n\t// No mapping for Go's ModeTemporary (plan9 only).\n\treturn o\n}\n\n// mountFd creates a \"mount source fd\" (either through open_tree(2) or just\n// open(O_PATH)) based on the provided configuration. This function must be\n// called from within the container's mount namespace.\n//\n// In the case of idmapped mount configurations, the returned mount source will\n// be an open_tree(2) file with MOUNT_ATTR_IDMAP applied. For other\n// bind-mounts, it will be an O_PATH. If the type of mount cannot be handled,\n// the returned mountSource will be nil, indicating that the container init\n// process will need to do an old-fashioned mount(2) themselves.\n//\n// This helper is only intended to be used by goCreateMountSources.\nfunc mountFd(nsHandles *userns.Handles, m *configs.Mount) (_ *mountSource, retErr error) {\n\tif !m.IsBind() {\n\t\treturn nil, errors.New(\"new mount api: only bind-mounts are supported\")\n\t}\n\tif nsHandles == nil {\n\t\tnsHandles = new(userns.Handles)\n\t\tdefer nsHandles.Release()\n\t}\n\n\tvar mountFile *os.File\n\tvar sourceType mountSourceType\n\tdefer func() {\n\t\tif retErr != nil && mountFile != nil {\n\t\t\tmountFile.Close()\n\t\t}\n\t}()\n\n\t// Ideally, we would use OPEN_TREE_CLONE for everything, because we can\n\t// be sure that the file descriptor cannot be used to escape outside of\n\t// the mount root. Unfortunately, OPEN_TREE_CLONE is far more expensive\n\t// than open(2) because it requires doing mounts inside a new anonymous\n\t// mount namespace. So we use open(2) for standard bind-mounts, and\n\t// OPEN_TREE_CLONE when we need to set mount attributes here.\n\t//\n\t// While passing open(2)'d paths from the host rootfs isn't exactly the\n\t// safest thing in the world, the files will not survive across\n\t// execve(2) and \"runc init\" is non-dumpable so it should not be\n\t// possible for a malicious container process to gain access to the\n\t// file descriptors. We also don't do any of this for \"runc exec\",\n\t// lessening the risk even further.\n\tif m.IsIDMapped() {\n\t\tflags := uint(unix.OPEN_TREE_CLONE | unix.OPEN_TREE_CLOEXEC)\n\t\tif m.Flags&unix.MS_REC == unix.MS_REC {\n\t\t\tflags |= unix.AT_RECURSIVE\n\t\t}\n\t\tfd, err := unix.OpenTree(unix.AT_FDCWD, m.Source, flags)\n\t\tif err != nil {\n\t\t\treturn nil, &os.PathError{Op: \"open_tree(OPEN_TREE_CLONE)\", Path: m.Source, Err: err}\n\t\t}\n\t\tmountFile = os.NewFile(uintptr(fd), m.Source)\n\t\tsourceType = mountSourceOpenTree\n\n\t\t// Configure the id mapping.\n\t\tvar usernsFile *os.File\n\t\tif m.IDMapping.UserNSPath == \"\" {\n\t\t\tusernsFile, err = nsHandles.Get(userns.Mapping{\n\t\t\t\tUIDMappings: m.IDMapping.UIDMappings,\n\t\t\t\tGIDMappings: m.IDMapping.GIDMappings,\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"failed to create userns for %s id-mapping: %w\", m.Source, err)\n\t\t\t}\n\t\t} else {\n\t\t\tusernsFile, err = os.Open(m.IDMapping.UserNSPath)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"failed to open existing userns for %s id-mapping: %w\", m.Source, err)\n\t\t\t}\n\t\t}\n\t\tdefer usernsFile.Close()\n\n\t\tsetAttrFlags := uint(unix.AT_EMPTY_PATH)\n\t\t// If the mount has \"ridmap\" set, we apply the configuration\n\t\t// recursively. This allows you to create \"rbind\" mounts where only\n\t\t// the top-level mount has an idmapping. I'm not sure why you'd\n\t\t// want that, but still...\n\t\tif m.IDMapping.Recursive {\n\t\t\tsetAttrFlags |= unix.AT_RECURSIVE\n\t\t}\n\t\tif err := unix.MountSetattr(int(mountFile.Fd()), \"\", setAttrFlags, &unix.MountAttr{\n\t\t\tAttr_set:  unix.MOUNT_ATTR_IDMAP,\n\t\t\tUserns_fd: uint64(usernsFile.Fd()),\n\t\t}); err != nil {\n\t\t\textraMsg := \"\"\n\t\t\tif err == unix.EINVAL {\n\t\t\t\textraMsg = \" (maybe the filesystem used doesn't support idmap mounts on this kernel?)\"\n\t\t\t}\n\n\t\t\treturn nil, fmt.Errorf(\"failed to set MOUNT_ATTR_IDMAP on %s: %w%s\", m.Source, err, extraMsg)\n\t\t}\n\t} else {\n\t\tvar err error\n\t\tmountFile, err = os.OpenFile(m.Source, unix.O_PATH|unix.O_CLOEXEC, 0)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tsourceType = mountSourcePlain\n\t}\n\treturn &mountSource{\n\t\tType: sourceType,\n\t\tfile: mountFile,\n\t}, nil\n}\n"
  },
  {
    "path": "libcontainer/mount_linux_test.go",
    "content": "package libcontainer\n\nimport (\n\t\"testing\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc TestStringifyMountFlags(t *testing.T) {\n\tfor _, test := range []struct {\n\t\tname     string\n\t\tflags    uintptr\n\t\texpected string\n\t}{\n\t\t{\"Empty\", 0, \"\"},\n\t\t// Single valid flags.\n\t\t{\"Single-MS_RDONLY\", unix.MS_RDONLY, \"MS_RDONLY\"},\n\t\t{\"Single-MS_NOSUID\", unix.MS_NOSUID, \"MS_NOSUID\"},\n\t\t{\"Single-MS_NODEV\", unix.MS_NODEV, \"MS_NODEV\"},\n\t\t{\"Single-MS_NOEXEC\", unix.MS_NOEXEC, \"MS_NOEXEC\"},\n\t\t{\"Single-MS_SYNCHRONOUS\", unix.MS_SYNCHRONOUS, \"MS_SYNCHRONOUS\"},\n\t\t{\"Single-MS_REMOUNT\", unix.MS_REMOUNT, \"MS_REMOUNT\"},\n\t\t{\"Single-MS_MANDLOCK\", unix.MS_MANDLOCK, \"MS_MANDLOCK\"},\n\t\t{\"Single-MS_DIRSYNC\", unix.MS_DIRSYNC, \"MS_DIRSYNC\"},\n\t\t{\"Single-MS_NOSYMFOLLOW\", unix.MS_NOSYMFOLLOW, \"MS_NOSYMFOLLOW\"},\n\t\t{\"Single-MS_NOATIME\", unix.MS_NOATIME, \"MS_NOATIME\"},\n\t\t{\"Single-MS_NODIRATIME\", unix.MS_NODIRATIME, \"MS_NODIRATIME\"},\n\t\t{\"Single-MS_BIND\", unix.MS_BIND, \"MS_BIND\"},\n\t\t{\"Single-MS_MOVE\", unix.MS_MOVE, \"MS_MOVE\"},\n\t\t{\"Single-MS_REC\", unix.MS_REC, \"MS_REC\"},\n\t\t{\"Single-MS_SILENT\", unix.MS_SILENT, \"MS_SILENT\"},\n\t\t{\"Single-MS_POSIXACL\", unix.MS_POSIXACL, \"MS_POSIXACL\"},\n\t\t{\"Single-MS_UNBINDABLE\", unix.MS_UNBINDABLE, \"MS_UNBINDABLE\"},\n\t\t{\"Single-MS_PRIVATE\", unix.MS_PRIVATE, \"MS_PRIVATE\"},\n\t\t{\"Single-MS_SLAVE\", unix.MS_SLAVE, \"MS_SLAVE\"},\n\t\t{\"Single-MS_SHARED\", unix.MS_SHARED, \"MS_SHARED\"},\n\t\t{\"Single-MS_RELATIME\", unix.MS_RELATIME, \"MS_RELATIME\"},\n\t\t{\"Single-MS_KERNMOUNT\", unix.MS_KERNMOUNT, \"0x400000\"},\n\t\t{\"Single-MS_I_VERSION\", unix.MS_I_VERSION, \"MS_I_VERSION\"},\n\t\t{\"Single-MS_STRICTATIME\", unix.MS_STRICTATIME, \"MS_STRICTATIME\"},\n\t\t{\"Single-MS_LAZYTIME\", unix.MS_LAZYTIME, \"MS_LAZYTIME\"},\n\t\t// Invalid flag value.\n\t\t{\"Unknown-512\", 1 << 9, \"0x200\"},\n\t\t// Multiple flag values at the same time.\n\t\t{\"Multiple-Valid1\", unix.MS_RDONLY | unix.MS_REC | unix.MS_BIND, \"MS_RDONLY|MS_BIND|MS_REC\"},\n\t\t{\"Multiple-Valid2\", unix.MS_NOSUID | unix.MS_NODEV | unix.MS_NOEXEC | unix.MS_REC | unix.MS_NODIRATIME | unix.MS_I_VERSION, \"MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_NODIRATIME|MS_REC|MS_I_VERSION\"},\n\t\t{\"Multiple-Mixed\", unix.MS_REC | unix.MS_BIND | (1 << 9) | (1 << 31), \"MS_BIND|MS_REC|0x80000200\"},\n\t} {\n\t\tgot := stringifyMountFlags(test.flags)\n\t\tif got != test.expected {\n\t\t\tt.Errorf(\"%s: stringifyMountFlags(0x%x) = %q, expected %q\", test.name, test.flags, got, test.expected)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "libcontainer/network_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/types\"\n\t\"github.com/sirupsen/logrus\"\n\t\"github.com/vishvananda/netlink\"\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"github.com/vishvananda/netns\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nvar strategies = map[string]networkStrategy{\n\t\"loopback\": &loopback{},\n}\n\n// networkStrategy represents a specific network configuration for\n// a container's networking stack\ntype networkStrategy interface {\n\tcreate(*network, int) error\n\tinitialize(*network) error\n\tdetach(*configs.Network) error\n\tattach(*configs.Network) error\n}\n\n// getStrategy returns the specific network strategy for the\n// provided type.\nfunc getStrategy(tpe string) (networkStrategy, error) {\n\ts, exists := strategies[tpe]\n\tif !exists {\n\t\treturn nil, fmt.Errorf(\"unknown strategy type %q\", tpe)\n\t}\n\treturn s, nil\n}\n\n// Returns the network statistics for the network interfaces represented by the NetworkRuntimeInfo.\nfunc getNetworkInterfaceStats(interfaceName string) (*types.NetworkInterface, error) {\n\tout := &types.NetworkInterface{Name: interfaceName}\n\t// This can happen if the network runtime information is missing - possible if the\n\t// container was created by an old version of libcontainer.\n\tif interfaceName == \"\" {\n\t\treturn out, nil\n\t}\n\ttype netStatsPair struct {\n\t\t// Where to write the output.\n\t\tOut *uint64\n\t\t// The network stats file to read.\n\t\tFile string\n\t}\n\t// Ingress for host veth is from the container. Hence tx_bytes stat on the host veth is actually number of bytes received by the container.\n\tnetStats := []netStatsPair{\n\t\t{Out: &out.RxBytes, File: \"tx_bytes\"},\n\t\t{Out: &out.RxPackets, File: \"tx_packets\"},\n\t\t{Out: &out.RxErrors, File: \"tx_errors\"},\n\t\t{Out: &out.RxDropped, File: \"tx_dropped\"},\n\n\t\t{Out: &out.TxBytes, File: \"rx_bytes\"},\n\t\t{Out: &out.TxPackets, File: \"rx_packets\"},\n\t\t{Out: &out.TxErrors, File: \"rx_errors\"},\n\t\t{Out: &out.TxDropped, File: \"rx_dropped\"},\n\t}\n\tfor _, netStat := range netStats {\n\t\tdata, err := readSysfsNetworkStats(interfaceName, netStat.File)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t*(netStat.Out) = data\n\t}\n\treturn out, nil\n}\n\n// Reads the specified statistics available under /sys/class/net/<EthInterface>/statistics\nfunc readSysfsNetworkStats(ethInterface, statsFile string) (uint64, error) {\n\tdata, err := os.ReadFile(filepath.Join(\"/sys/class/net\", ethInterface, \"statistics\", statsFile))\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn strconv.ParseUint(string(bytes.TrimSpace(data)), 10, 64)\n}\n\n// loopback is a network strategy that provides a basic loopback device\ntype loopback struct{}\n\nfunc (l *loopback) create(n *network, nspid int) error {\n\treturn nil\n}\n\nfunc (l *loopback) initialize(config *network) error {\n\treturn netlink.LinkSetUp(&netlink.Device{LinkAttrs: netlink.LinkAttrs{Name: \"lo\"}})\n}\n\nfunc (l *loopback) attach(n *configs.Network) (err error) {\n\treturn nil\n}\n\nfunc (l *loopback) detach(n *configs.Network) (err error) {\n\treturn nil\n}\n\n// devChangeNetNamespace allows to move a device given by name to a network namespace given by nsPath\n// and optionally change the device name.\n// The device name will be kept the same if device.Name is the zero value.\n// This function ensures that the move and rename operations occur atomically.\n// It preserves existing interface attributes, including global IP addresses.\nfunc devChangeNetNamespace(name, nsPath string, device configs.LinuxNetDevice) error {\n\tlogrus.Debugf(\"attaching network device %s with attrs %+v to network namespace %s\", name, device, nsPath)\n\tlink, err := netlink.LinkByName(name)\n\t// recover same behavior on vishvananda/netlink@1.2.1 and do not fail when the kernel returns NLM_F_DUMP_INTR.\n\tif err != nil && !errors.Is(err, netlink.ErrDumpInterrupted) {\n\t\treturn fmt.Errorf(\"link not found for interface %s on runtime namespace: %w\", name, err)\n\t}\n\n\t// Set the interface link state to DOWN before modifying attributes like namespace or name.\n\t// This prevents potential conflicts or disruptions on the host network during the transition,\n\t// particularly if other host components depend on this specific interface or its properties.\n\terr = netlink.LinkSetDown(link)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"fail to set link down: %w\", err)\n\t}\n\n\t// Get the existing IP addresses on the interface.\n\taddresses, err := netlink.AddrList(link, netlink.FAMILY_ALL)\n\t// recover same behavior on vishvananda/netlink@1.2.1 and do not fail when the kernel returns NLM_F_DUMP_INTR.\n\tif err != nil && !errors.Is(err, netlink.ErrDumpInterrupted) {\n\t\treturn fmt.Errorf(\"fail to get ip addresses: %w\", err)\n\t}\n\n\t// Do interface rename and namespace change in the same operation to avoid\n\t// possible conflicts with the interface name.\n\t// NLM_F_REQUEST: \"It must be set on all request messages.\"\n\t// NLM_F_ACK: \"Request for an acknowledgment on success.\"\n\t// netlink(7) man page: https://man7.org/linux/man-pages/man7/netlink.7.html\n\tflags := unix.NLM_F_REQUEST | unix.NLM_F_ACK\n\treq := nl.NewNetlinkRequest(unix.RTM_NEWLINK, flags)\n\n\t// Get a netlink socket in current namespace\n\tnlSock, err := nl.GetNetlinkSocketAt(netns.None(), netns.None(), unix.NETLINK_ROUTE)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"could not get network namespace handle: %w\", err)\n\t}\n\tdefer nlSock.Close()\n\n\treq.Sockets = map[int]*nl.SocketHandle{\n\t\tunix.NETLINK_ROUTE: {Socket: nlSock},\n\t}\n\n\t// Set the interface index.\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(link.Attrs().Index)\n\treq.AddData(msg)\n\n\t// Set the interface name, also rename if requested.\n\tnewName := name\n\tif device.Name != \"\" {\n\t\tnewName = device.Name\n\t}\n\tnameData := nl.NewRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(newName))\n\treq.AddData(nameData)\n\n\t// Get the new network namespace.\n\tns, err := netns.GetFromPath(nsPath)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"could not get network namespace from path %s for network device %s : %w\", nsPath, name, err)\n\t}\n\tdefer ns.Close()\n\n\tval := nl.Uint32Attr(uint32(ns))\n\tattr := nl.NewRtAttr(unix.IFLA_NET_NS_FD, val)\n\treq.AddData(attr)\n\n\t_, err = req.Execute(unix.NETLINK_ROUTE, 0)\n\t// recover same behavior on vishvananda/netlink@1.2.1 and do not fail when the kernel returns NLM_F_DUMP_INTR.\n\tif err != nil && !errors.Is(err, netlink.ErrDumpInterrupted) {\n\t\treturn fmt.Errorf(\"fail to move network device %s to network namespace %s: %w\", name, nsPath, err)\n\t}\n\n\t// To avoid us the husle with goroutines when joining a netns,\n\t// we let the library create the socket in the namespace for us.\n\tnhNs, err := netlink.NewHandleAt(ns)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer nhNs.Close()\n\n\tnsLink, err := nhNs.LinkByName(newName)\n\t// recover same behavior on vishvananda/netlink@1.2.1 and do not fail when the kernel returns NLM_F_DUMP_INTR.\n\tif err != nil && !errors.Is(err, netlink.ErrDumpInterrupted) {\n\t\treturn fmt.Errorf(\"link not found for interface %s on namespace %s : %w\", newName, nsPath, err)\n\t}\n\n\t// Re-add the original IP addresses to the interface in the new namespace.\n\t// The kernel removes IP addresses when an interface is moved between network namespaces.\n\tfor _, address := range addresses {\n\t\tlogrus.Debugf(\"processing address %s from network device %s\", address.String(), name)\n\t\t// Only move permanent IP addresses configured by the user, dynamic addresses are excluded because\n\t\t// their validity may rely on the original network namespace's context and they may have limited\n\t\t// lifetimes and are not guaranteed to be available in a new namespace.\n\t\t// Ref: https://www.ietf.org/rfc/rfc3549.txt\n\t\tif address.Flags&unix.IFA_F_PERMANENT == 0 {\n\t\t\tlogrus.Debugf(\"skipping address %s from network device %s: not a permanent address\", address.String(), name)\n\t\t\tcontinue\n\t\t}\n\t\t// Only move IP addresses with global scope because those are not host-specific, auto-configured,\n\t\t// or have limited network scope, making them unsuitable inside the container namespace.\n\t\t// Ref: https://www.ietf.org/rfc/rfc3549.txt\n\t\tif address.Scope != unix.RT_SCOPE_UNIVERSE {\n\t\t\tlogrus.Debugf(\"skipping address %s from network device %s: not an address with global scope\", address.String(), name)\n\t\t\tcontinue\n\t\t}\n\t\t// Remove the interface attribute of the original address\n\t\t// to avoid issues when the interface is renamed.\n\t\terr = nhNs.AddrAdd(nsLink, &netlink.Addr{IPNet: address.IPNet})\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"fail to set up address %s on namespace %s: %w\", address.String(), nsPath, err)\n\t\t}\n\t}\n\n\terr = nhNs.LinkSetUp(nsLink)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"fail to set up interface %s on namespace %s: %w\", nsLink.Attrs().Name, nsPath, err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "libcontainer/notify_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\ntype PressureLevel uint\n\nconst (\n\tLowPressure PressureLevel = iota\n\tMediumPressure\n\tCriticalPressure\n)\n\nfunc registerMemoryEvent(cgDir, evName, arg string) (<-chan struct{}, error) {\n\tevFile, err := os.Open(filepath.Join(cgDir, evName))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfd, err := unix.Eventfd(0, unix.EFD_CLOEXEC)\n\tif err != nil {\n\t\tevFile.Close()\n\t\treturn nil, err\n\t}\n\n\teventfd := os.NewFile(uintptr(fd), \"eventfd\")\n\n\teventControlPath := filepath.Join(cgDir, \"cgroup.event_control\")\n\tdata := fmt.Sprintf(\"%d %d %s\", eventfd.Fd(), evFile.Fd(), arg)\n\tif err := os.WriteFile(eventControlPath, []byte(data), 0o700); err != nil {\n\t\teventfd.Close()\n\t\tevFile.Close()\n\t\treturn nil, err\n\t}\n\tch := make(chan struct{})\n\tgo func() {\n\t\tdefer func() {\n\t\t\teventfd.Close()\n\t\t\tevFile.Close()\n\t\t\tclose(ch)\n\t\t}()\n\t\tbuf := make([]byte, 8)\n\t\tfor {\n\t\t\tif _, err := eventfd.Read(buf); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// When a cgroup is destroyed, an event is sent to eventfd.\n\t\t\t// So if the control path is gone, return instead of notifying.\n\t\t\tif _, err := os.Lstat(eventControlPath); errors.Is(err, os.ErrNotExist) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tch <- struct{}{}\n\t\t}\n\t}()\n\treturn ch, nil\n}\n\n// notifyOnOOM returns channel on which you can expect event about OOM,\n// if process died without OOM this channel will be closed.\nfunc notifyOnOOM(dir string) (<-chan struct{}, error) {\n\tif dir == \"\" {\n\t\treturn nil, errors.New(\"memory controller missing\")\n\t}\n\n\treturn registerMemoryEvent(dir, \"memory.oom_control\", \"\")\n}\n\nfunc notifyMemoryPressure(dir string, level PressureLevel) (<-chan struct{}, error) {\n\tif dir == \"\" {\n\t\treturn nil, errors.New(\"memory controller missing\")\n\t}\n\n\tif level > CriticalPressure {\n\t\treturn nil, fmt.Errorf(\"invalid pressure level %d\", level)\n\t}\n\n\tlevelStr := []string{\"low\", \"medium\", \"critical\"}[level]\n\treturn registerMemoryEvent(dir, \"memory.pressure_level\", levelStr)\n}\n"
  },
  {
    "path": "libcontainer/notify_linux_test.go",
    "content": "package libcontainer\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\t\"time\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\ntype notifyFunc func(path string) (<-chan struct{}, error)\n\nfunc testMemoryNotification(t *testing.T, evName string, notify notifyFunc, targ string) {\n\tmemoryPath := t.TempDir()\n\tevFile := filepath.Join(memoryPath, evName)\n\teventPath := filepath.Join(memoryPath, \"cgroup.event_control\")\n\tif err := os.WriteFile(evFile, []byte{}, 0o700); err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif err := os.WriteFile(eventPath, []byte{}, 0o700); err != nil {\n\t\tt.Fatal(err)\n\t}\n\tch, err := notify(memoryPath)\n\tif err != nil {\n\t\tt.Fatal(\"expected no error, got:\", err)\n\t}\n\n\tdata, err := os.ReadFile(eventPath)\n\tif err != nil {\n\t\tt.Fatal(\"couldn't read event control file:\", err)\n\t}\n\n\tvar eventFd, evFd int\n\tvar arg string\n\tif targ != \"\" {\n\t\t_, err = fmt.Sscanf(string(data), \"%d %d %s\", &eventFd, &evFd, &arg)\n\t} else {\n\t\t_, err = fmt.Sscanf(string(data), \"%d %d\", &eventFd, &evFd)\n\t}\n\tif err != nil || arg != targ {\n\t\tt.Fatalf(\"invalid control data %q: %s\", data, err)\n\t}\n\n\t// dup the eventfd\n\tefd, err := unix.Dup(eventFd)\n\tif err != nil {\n\t\tt.Fatal(\"unable to dup eventfd:\", err)\n\t}\n\tdefer unix.Close(efd)\n\n\tbuf := make([]byte, 8)\n\tbinary.LittleEndian.PutUint64(buf, 1)\n\n\tif _, err := unix.Write(efd, buf); err != nil {\n\t\tt.Fatal(\"unable to write to eventfd:\", err)\n\t}\n\n\tselect {\n\tcase <-ch:\n\tcase <-time.After(100 * time.Millisecond):\n\t\tt.Fatal(\"no notification on channel after 100ms\")\n\t}\n\n\t// simulate what happens when a cgroup is destroyed by cleaning up and then\n\t// writing to the eventfd.\n\tif err := os.RemoveAll(memoryPath); err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif _, err := unix.Write(efd, buf); err != nil {\n\t\tt.Fatal(\"unable to write to eventfd:\", err)\n\t}\n\n\t// give things a moment to shut down\n\tselect {\n\tcase _, ok := <-ch:\n\t\tif ok {\n\t\t\tt.Fatal(\"expected no notification to be triggered\")\n\t\t}\n\tcase <-time.After(100 * time.Millisecond):\n\t\tt.Fatal(\"channel not closed after 100ms\")\n\t}\n\n\tif _, _, err := unix.Syscall(unix.SYS_FCNTL, uintptr(evFd), unix.F_GETFD, 0); err != unix.EBADF {\n\t\tt.Errorf(\"expected event control to be closed, but received error %s\", err.Error())\n\t}\n\n\tif _, _, err := unix.Syscall(unix.SYS_FCNTL, uintptr(eventFd), unix.F_GETFD, 0); err != unix.EBADF {\n\t\tt.Errorf(\"expected event fd to be closed, but received error %s\", err.Error())\n\t}\n}\n\nfunc TestNotifyOnOOM(t *testing.T) {\n\tf := func(path string) (<-chan struct{}, error) {\n\t\treturn notifyOnOOM(path)\n\t}\n\n\ttestMemoryNotification(t, \"memory.oom_control\", f, \"\")\n}\n\nfunc TestNotifyMemoryPressure(t *testing.T) {\n\ttests := map[PressureLevel]string{\n\t\tLowPressure:      \"low\",\n\t\tMediumPressure:   \"medium\",\n\t\tCriticalPressure: \"critical\",\n\t}\n\n\tfor level, arg := range tests {\n\t\tf := func(path string) (<-chan struct{}, error) {\n\t\t\treturn notifyMemoryPressure(path, level)\n\t\t}\n\n\t\ttestMemoryNotification(t, \"memory.pressure_level\", f, arg)\n\t}\n}\n"
  },
  {
    "path": "libcontainer/notify_v2_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"unsafe\"\n\n\t\"github.com/opencontainers/cgroups/fscommon\"\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc registerMemoryEventV2(cgDir, evName, cgEvName string) (<-chan struct{}, error) {\n\tfd, err := unix.InotifyInit()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to init inotify: %w\", err)\n\t}\n\t// watching oom kill\n\tevFd, err := unix.InotifyAddWatch(fd, filepath.Join(cgDir, evName), unix.IN_MODIFY)\n\tif err != nil {\n\t\tunix.Close(fd)\n\t\treturn nil, fmt.Errorf(\"unable to add inotify watch: %w\", err)\n\t}\n\t// Because no `unix.IN_DELETE|unix.IN_DELETE_SELF` event for cgroup file system, so watching all process exited\n\tcgFd, err := unix.InotifyAddWatch(fd, filepath.Join(cgDir, cgEvName), unix.IN_MODIFY)\n\tif err != nil {\n\t\tunix.Close(fd)\n\t\treturn nil, fmt.Errorf(\"unable to add inotify watch: %w\", err)\n\t}\n\tch := make(chan struct{})\n\tgo func() {\n\t\tvar (\n\t\t\tbuffer [unix.SizeofInotifyEvent + unix.PathMax + 1]byte\n\t\t\toffset uint32\n\t\t)\n\t\tdefer func() {\n\t\t\tunix.Close(fd)\n\t\t\tclose(ch)\n\t\t}()\n\n\t\tfor {\n\t\t\tn, err := unix.Read(fd, buffer[:])\n\t\t\tif err == unix.EINTR { //nolint:errorlint // unix errors are bare\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\terr = os.NewSyscallError(\"read\", err)\n\t\t\t\tlogrus.Warnf(\"unable to read event data from inotify, got error: %v\", err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif n < unix.SizeofInotifyEvent {\n\t\t\t\tlogrus.Warnf(\"we should read at least %d bytes from inotify, but got %d bytes.\", unix.SizeofInotifyEvent, n)\n\t\t\t\treturn\n\t\t\t}\n\t\t\toffset = 0\n\t\t\tfor offset <= uint32(n-unix.SizeofInotifyEvent) {\n\t\t\t\trawEvent := (*unix.InotifyEvent)(unsafe.Pointer(&buffer[offset]))\n\t\t\t\toffset += unix.SizeofInotifyEvent + rawEvent.Len\n\t\t\t\tif rawEvent.Mask&unix.IN_MODIFY != unix.IN_MODIFY {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tswitch int(rawEvent.Wd) {\n\t\t\t\tcase evFd:\n\t\t\t\t\toom, err := fscommon.GetValueByKey(cgDir, evName, \"oom_kill\")\n\t\t\t\t\tif err != nil || oom > 0 {\n\t\t\t\t\t\tch <- struct{}{}\n\t\t\t\t\t}\n\t\t\t\tcase cgFd:\n\t\t\t\t\tpids, err := fscommon.GetValueByKey(cgDir, cgEvName, \"populated\")\n\t\t\t\t\tif err != nil || pids == 0 {\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}\n\t}()\n\treturn ch, nil\n}\n\n// notifyOnOOMV2 returns channel on which you can expect event about OOM,\n// if process died without OOM this channel will be closed.\nfunc notifyOnOOMV2(path string) (<-chan struct{}, error) {\n\treturn registerMemoryEventV2(path, \"memory.events\", \"cgroup.events\")\n}\n"
  },
  {
    "path": "libcontainer/nsenter/README.md",
    "content": "## nsenter\n\nThe `nsenter` package registers a special init constructor that is called before\nthe Go runtime has a chance to boot.  This provides us the ability to `setns` on\nexisting namespaces and avoid the issues that the Go runtime has with multiple\nthreads.  This constructor will be called if this package is registered,\nimported, in your go application.\n\nThe `nsenter` package will `import \"C\"` and it uses [cgo](https://golang.org/cmd/cgo/)\npackage. In cgo, if the import of \"C\" is immediately preceded by a comment, that comment,\ncalled the preamble, is used as a header when compiling the C parts of the package.\nSo every time we  import package `nsenter`, the C code function `nsexec()` would be\ncalled. And package `nsenter` is only imported in `init.go`, so every time the runc\n`init` command is invoked, that C code is run.\n\nBecause `nsexec()` must be run before the Go runtime in order to use the\nLinux kernel namespace, you must `import` this library into a package if\nyou plan to use `libcontainer` directly. Otherwise Go will not execute\nthe `nsexec()` constructor, which means that the re-exec will not cause\nthe namespaces to be joined. You can import it like this:\n\n```go\nimport _ \"github.com/opencontainers/runc/libcontainer/nsenter\"\n```\n\n`nsexec()` will first get the file descriptor number for the init pipe\nfrom the environment variable `_LIBCONTAINER_INITPIPE` (which was opened\nby the parent and kept open across the fork-exec of the `nsexec()` init\nprocess). The init pipe is used to read bootstrap data (namespace paths,\nclone flags, uid and gid mappings, and the console path) from the parent\nprocess. `nsexec()` will then call `setns(2)` to join the namespaces\nprovided in the bootstrap data (if available), `clone(2)` a child process\nwith the provided clone flags, update the user and group ID mappings, do\nsome further miscellaneous setup steps, and then send the PID of the\nchild process to the parent of the `nsexec()` \"caller\". Finally,\nthe parent `nsexec()` will exit and the child `nsexec()` process will\nreturn to allow the Go runtime take over.\n\nNOTE: We do both `setns(2)` and `clone(2)` even if we don't have any\n`CLONE_NEW*` clone flags because we must fork a new process in order to\nenter the PID namespace.\n\n\n\n"
  },
  {
    "path": "libcontainer/nsenter/escape.c",
    "content": "#include <stdlib.h>\n#include <string.h>\n\n#ifdef ESCAPE_TEST\n#  include <assert.h>\n#  define test_assert(arg) assert(arg)\n#else\n#  define test_assert(arg)\n#endif\n\n#define DEL '\\x7f'\n\n/*\n * Poor man version of itoa with base=16 and input number from 0 to 15,\n * represented by a char. Converts it to a single hex digit ('0' to 'f').\n */\nstatic char hex(char i)\n{\n\ttest_assert(i >= 0 && i < 16);\n\n\tif (i >= 0 && i < 10) {\n\t\treturn '0' + i;\n\t}\n\tif (i >= 10 && i < 16) {\n\t\treturn 'a' + i - 10;\n\t}\n\treturn '?';\n}\n\n/*\n * Given the character, tells how many _extra_ characters are needed\n * to JSON-escape it. If 0 is returned, the character does not need to\n * be escaped.\n */\nstatic int need_escape(char c)\n{\n\tswitch (c) {\n\tcase '\\\\':\n\tcase '\"':\n\tcase '\\b':\n\tcase '\\n':\n\tcase '\\r':\n\tcase '\\t':\n\tcase '\\f':\n\t\treturn 1;\n\tcase DEL:\t\t// -> \\u007f\n\t\treturn 5;\n\tdefault:\n\t\tif (c > 0 && c < ' ') {\n\t\t\t// ASCII decimal 01 to 31 -> \\u00xx\n\t\t\treturn 5;\n\t\t}\n\t\treturn 0;\n\t}\n}\n\n/*\n * Escape the string so it can be used as a JSON string (per RFC4627,\n * section 2.5 minimal requirements, plus the DEL (0x7f) character).\n *\n * It is expected that the argument is a string allocated via malloc.\n * In case no escaping is needed, the original string is returned as is;\n * otherwise, the original string is free'd, and the newly allocated\n * escaped string is returned. Thus, in any case, the value returned\n * need to be free'd by the caller.\n */\nchar *escape_json_string(char *s)\n{\n\tint i, j, len;\n\tchar *c, *out;\n\n\t/*\n\t * First, check if escaping is at all needed -- if not, we can avoid\n\t * malloc and return the argument as is.  While at it, count how much\n\t * extra space is required.\n\t *\n\t * XXX: the counting code must be in sync with the escaping code\n\t * (checked by test_assert()s below).\n\t */\n\tfor (i = j = 0; s[i] != '\\0'; i++) {\n\t\tj += need_escape(s[i]);\n\t}\n\tif (j == 0) {\n\t\t// nothing to escape\n\t\treturn s;\n\t}\n\n\tlen = i + j + 1;\n\tout = malloc(len);\n\tif (!out) {\n\t\tfree(s);\n\t\t// As malloc failed, strdup can fail, too, so in the worst case\n\t\t// scenario NULL will be returned from here.\n\t\treturn strdup(\"escape_json_string: out of memory\");\n\t}\n\tfor (c = s, j = 0; *c != '\\0'; c++) {\n\t\tswitch (*c) {\n\t\tcase '\"':\n\t\tcase '\\\\':\n\t\t\ttest_assert(need_escape(*c) == 1);\n\t\t\tout[j++] = '\\\\';\n\t\t\tout[j++] = *c;\n\t\t\tcontinue;\n\t\t}\n\t\tif ((*c < 0 || *c >= ' ') && (*c != DEL)) {\n\t\t\t// no escape needed\n\t\t\ttest_assert(need_escape(*c) == 0);\n\t\t\tout[j++] = *c;\n\t\t\tcontinue;\n\t\t}\n\t\tout[j++] = '\\\\';\n\t\tswitch (*c) {\n\t\tcase '\\b':\n\t\t\tout[j++] = 'b';\n\t\t\tbreak;\n\t\tcase '\\n':\n\t\t\tout[j++] = 'n';\n\t\t\tbreak;\n\t\tcase '\\r':\n\t\t\tout[j++] = 'r';\n\t\t\tbreak;\n\t\tcase '\\t':\n\t\t\tout[j++] = 't';\n\t\t\tbreak;\n\t\tcase '\\f':\n\t\t\tout[j++] = 'f';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ttest_assert(need_escape(*c) == 5);\n\t\t\tout[j++] = 'u';\n\t\t\tout[j++] = '0';\n\t\t\tout[j++] = '0';\n\t\t\tout[j++] = hex(*c >> 4);\n\t\t\tout[j++] = hex(*c & 0x0f);\n\t\t}\n\t}\n\ttest_assert(j + 1 == len);\n\tout[j] = '\\0';\n\n\tfree(s);\n\treturn out;\n}\n"
  },
  {
    "path": "libcontainer/nsenter/getenv.c",
    "content": "#define _GNU_SOURCE\n#include <errno.h>\n#include <stdlib.h>\n#include \"getenv.h\"\n#include \"log.h\"\n\nint getenv_int(const char *name)\n{\n\tchar *val, *endptr;\n\tint ret;\n\n\tval = getenv(name);\n\t/* Treat empty value as unset variable. */\n\tif (val == NULL || *val == '\\0')\n\t\treturn -ENOENT;\n\n\tret = strtol(val, &endptr, 10);\n\tif (val == endptr || *endptr != '\\0')\n\t\tbail(\"unable to parse %s=%s\", name, val);\n\t/*\n\t * Sanity check: this must be a non-negative number.\n\t */\n\tif (ret < 0)\n\t\tbail(\"bad value for %s=%s (%d)\", name, val, ret);\n\n\treturn ret;\n}\n"
  },
  {
    "path": "libcontainer/nsenter/getenv.h",
    "content": "#ifndef NSENTER_GETENV_H\n#define NSENTER_GETENV_H\n\n/*\n * Returns an environment variable value as a non-negative integer, or -ENOENT\n * if the variable was not found or has an empty value.\n *\n * If the value can not be converted to an integer, or the result is out of\n * range, the function bails out.\n */\nint getenv_int(const char *name);\n\n#endif /* NSENTER_GETENV_H */\n"
  },
  {
    "path": "libcontainer/nsenter/log.c",
    "content": "#define _GNU_SOURCE\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <unistd.h>\n\n#include \"log.h\"\n#include \"getenv.h\"\n\nstatic const char *level_str[] = { \"panic\", \"fatal\", \"error\", \"warning\", \"info\", \"debug\", \"trace\" };\n\nint logfd = -1;\nstatic int loglevel = DEBUG;\n\nextern char *escape_json_string(char *str);\nvoid setup_logpipe(void)\n{\n\tint i;\n\n\ti = getenv_int(\"_LIBCONTAINER_LOGPIPE\");\n\tif (i < 0) {\n\t\t/* We are not runc init, or log pipe was not provided. */\n\t\treturn;\n\t}\n\tlogfd = i;\n\n\ti = getenv_int(\"_LIBCONTAINER_LOGLEVEL\");\n\tif (i < 0)\n\t\treturn;\n\tloglevel = i;\n}\n\nbool log_enabled_for(int level)\n{\n\treturn (logfd >= 0 && level <= loglevel);\n}\n\n/* Defined in nsexec.c */\nextern int current_stage;\n\nvoid write_log(int level, const char *format, ...)\n{\n\tchar *message = NULL, *stage = NULL, *json = NULL;\n\tva_list args;\n\tint ret;\n\n\tif (!log_enabled_for(level))\n\t\treturn;\n\n\tva_start(args, format);\n\tret = vasprintf(&message, format, args);\n\tva_end(args);\n\tif (ret < 0) {\n\t\tmessage = NULL;\n\t\tgoto out;\n\t}\n\n\tmessage = escape_json_string(message);\n\n\tif (current_stage < 0) {\n\t\tstage = strdup(\"nsexec\");\n\t\tif (stage == NULL)\n\t\t\tgoto out;\n\t} else {\n\t\tret = asprintf(&stage, \"nsexec-%d\", current_stage);\n\t\tif (ret < 0) {\n\t\t\tstage = NULL;\n\t\t\tgoto out;\n\t\t}\n\t}\n\tret = asprintf(&json, \"{\\\"level\\\":\\\"%s\\\", \\\"msg\\\": \\\"%s[%d]: %s\\\"}\\n\",\n\t\t       level_str[level], stage, getpid(), message);\n\tif (ret < 0) {\n\t\tjson = NULL;\n\t\tgoto out;\n\t}\n\n\t/* This logging is on a best-effort basis. In case of a short or failed\n\t * write there is nothing we can do, so just ignore write() errors.\n\t */\n\tssize_t __attribute__((unused)) __res = write(logfd, json, ret);\n\nout:\n\tfree(message);\n\tfree(stage);\n\tfree(json);\n}\n"
  },
  {
    "path": "libcontainer/nsenter/log.h",
    "content": "#ifndef NSENTER_LOG_H\n#define NSENTER_LOG_H\n\n#include <stdbool.h>\n#include <stdio.h>\n\n/*\n * Log levels are the same as in logrus.\n */\n#define PANIC   0\n#define FATAL   1\n#define ERROR   2\n#define WARNING 3\n#define INFO    4\n#define DEBUG   5\n#define TRACE   6\n\n/*\n * Sets up logging by getting log fd and log level from the environment,\n * if available.\n */\nvoid setup_logpipe(void);\n\nbool log_enabled_for(int level);\n\nvoid write_log(int level, const char *format, ...) __attribute__((format(printf, 2, 3)));\n\nextern int logfd;\n\n/* bailx logs a message to logfd (or stderr, if logfd is not available)\n * and terminates the program.\n */\n#define bailx(fmt, ...)                                                     \\\n\tdo {                                                                \\\n\t\tif (logfd < 0)                                              \\\n\t\t\tfprintf(stderr, \"FATAL: \" fmt \"\\n\", ##__VA_ARGS__); \\\n\t\telse                                                        \\\n\t\t\twrite_log(FATAL, fmt, ##__VA_ARGS__);               \\\n\t\texit(1);                                                    \\\n\t} while(0)\n\n/* bail is the same as bailx, except it also adds \": %m\" (errno). */\n#define bail(fmt, ...) bailx(fmt \": %m\", ##__VA_ARGS__)\n\n#endif /* NSENTER_LOG_H */\n"
  },
  {
    "path": "libcontainer/nsenter/namespace.h",
    "content": "#ifndef NSENTER_NAMESPACE_H\n#define NSENTER_NAMESPACE_H\n\n#ifndef _GNU_SOURCE\n#\tdefine _GNU_SOURCE\n#endif\n#include <sched.h>\n\n/* All of these are taken from include/uapi/linux/sched.h */\n#ifndef CLONE_NEWNS\n#\tdefine CLONE_NEWNS 0x00020000 /* New mount namespace group */\n#endif\n#ifndef CLONE_NEWCGROUP\n#\tdefine CLONE_NEWCGROUP 0x02000000 /* New cgroup namespace */\n#endif\n#ifndef CLONE_NEWUTS\n#\tdefine CLONE_NEWUTS 0x04000000 /* New utsname namespace */\n#endif\n#ifndef CLONE_NEWIPC\n#\tdefine CLONE_NEWIPC 0x08000000 /* New ipc namespace */\n#endif\n#ifndef CLONE_NEWUSER\n#\tdefine CLONE_NEWUSER 0x10000000 /* New user namespace */\n#endif\n#ifndef CLONE_NEWPID\n#\tdefine CLONE_NEWPID 0x20000000 /* New pid namespace */\n#endif\n#ifndef CLONE_NEWNET\n#\tdefine CLONE_NEWNET 0x40000000 /* New network namespace */\n#endif\n#ifndef CLONE_NEWTIME\n#\tdefine CLONE_NEWTIME 0x00000080\t/* New time namespace */\n#endif\n\n#endif /* NSENTER_NAMESPACE_H */\n"
  },
  {
    "path": "libcontainer/nsenter/nsenter.go",
    "content": "//go:build linux && !gccgo\n\n// Package nsenter implements the namespace creation and joining logic of runc.\n//\n// This package registers a special CGo constructor that will run before the Go\n// runtime boots in order to provide a mechanism for runc to operate on\n// namespaces that require single-threaded program execution to work.\npackage nsenter\n\n/*\n#cgo CFLAGS: -Wall\nextern void nsexec();\nvoid __attribute__((constructor)) init(void) {\n\tnsexec();\n}\n*/\nimport \"C\"\n"
  },
  {
    "path": "libcontainer/nsenter/nsenter_gccgo.go",
    "content": "//go:build linux && gccgo\n\npackage nsenter\n\n/*\n#cgo CFLAGS: -Wall\nextern void nsexec();\nvoid __attribute__((constructor)) init(void) {\n\tnsexec();\n}\n*/\nimport \"C\"\n\n// AlwaysFalse is here to stay false\n// (and be exported so the compiler doesn't optimize out its reference)\nvar AlwaysFalse bool\n\nfunc init() {\n\tif AlwaysFalse {\n\t\t// by referencing this C init() in a noop test, it will ensure the compiler\n\t\t// links in the C function.\n\t\t// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65134\n\t\tC.init()\n\t}\n}\n"
  },
  {
    "path": "libcontainer/nsenter/nsenter_test.go",
    "content": "package nsenter\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc TestNsenterValidPaths(t *testing.T) {\n\targs := []string{\"nsenter-exec\"}\n\tparent, child := newPipe(t)\n\n\tnamespaces := []string{\n\t\t// join pid ns of the current process\n\t\tfmt.Sprintf(\"pid:/proc/%d/ns/pid\", os.Getpid()),\n\t}\n\tcmd := &exec.Cmd{\n\t\tPath:       os.Args[0],\n\t\tArgs:       args,\n\t\tExtraFiles: []*os.File{child},\n\t\tEnv:        []string{\"_LIBCONTAINER_INITPIPE=3\"},\n\t\tStdout:     os.Stdout,\n\t\tStderr:     os.Stderr,\n\t}\n\n\tif err := cmd.Start(); err != nil {\n\t\tt.Fatalf(\"nsenter failed to start: %v\", err)\n\t}\n\tchild.Close()\n\n\t// write cloneFlags\n\tr := nl.NewNetlinkRequest(int(libcontainer.InitMsg), 0)\n\tr.AddData(&libcontainer.Int32msg{\n\t\tType:  libcontainer.CloneFlagsAttr,\n\t\tValue: uint32(unix.CLONE_NEWNET),\n\t})\n\tr.AddData(&libcontainer.Bytemsg{\n\t\tType:  libcontainer.NsPathsAttr,\n\t\tValue: []byte(strings.Join(namespaces, \",\")),\n\t})\n\tif _, err := io.Copy(parent, bytes.NewReader(r.Serialize())); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tif err := cmd.Wait(); err != nil {\n\t\tt.Fatalf(\"nsenter error: %v\", err)\n\t}\n\n\treapChildren(t, parent)\n}\n\nfunc TestNsenterInvalidPaths(t *testing.T) {\n\targs := []string{\"nsenter-exec\"}\n\tparent, child := newPipe(t)\n\n\tnamespaces := []string{\n\t\tfmt.Sprintf(\"pid:/proc/%d/ns/pid\", -1),\n\t}\n\tcmd := &exec.Cmd{\n\t\tPath:       os.Args[0],\n\t\tArgs:       args,\n\t\tExtraFiles: []*os.File{child},\n\t\tEnv:        []string{\"_LIBCONTAINER_INITPIPE=3\"},\n\t}\n\n\tif err := cmd.Start(); err != nil {\n\t\tt.Fatalf(\"nsenter failed to start: %v\", err)\n\t}\n\tchild.Close()\n\n\t// write cloneFlags\n\tr := nl.NewNetlinkRequest(int(libcontainer.InitMsg), 0)\n\tr.AddData(&libcontainer.Int32msg{\n\t\tType:  libcontainer.CloneFlagsAttr,\n\t\tValue: uint32(unix.CLONE_NEWNET),\n\t})\n\tr.AddData(&libcontainer.Bytemsg{\n\t\tType:  libcontainer.NsPathsAttr,\n\t\tValue: []byte(strings.Join(namespaces, \",\")),\n\t})\n\tif _, err := io.Copy(parent, bytes.NewReader(r.Serialize())); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tif err := cmd.Wait(); err == nil {\n\t\tt.Fatalf(\"nsenter exits with a zero exit status\")\n\t}\n}\n\nfunc TestNsenterIncorrectPathType(t *testing.T) {\n\targs := []string{\"nsenter-exec\"}\n\tparent, child := newPipe(t)\n\n\tnamespaces := []string{\n\t\tfmt.Sprintf(\"net:/proc/%d/ns/pid\", os.Getpid()),\n\t}\n\tcmd := &exec.Cmd{\n\t\tPath:       os.Args[0],\n\t\tArgs:       args,\n\t\tExtraFiles: []*os.File{child},\n\t\tEnv:        []string{\"_LIBCONTAINER_INITPIPE=3\"},\n\t}\n\n\tif err := cmd.Start(); err != nil {\n\t\tt.Fatalf(\"nsenter failed to start: %v\", err)\n\t}\n\tchild.Close()\n\n\t// write cloneFlags\n\tr := nl.NewNetlinkRequest(int(libcontainer.InitMsg), 0)\n\tr.AddData(&libcontainer.Int32msg{\n\t\tType:  libcontainer.CloneFlagsAttr,\n\t\tValue: uint32(unix.CLONE_NEWNET),\n\t})\n\tr.AddData(&libcontainer.Bytemsg{\n\t\tType:  libcontainer.NsPathsAttr,\n\t\tValue: []byte(strings.Join(namespaces, \",\")),\n\t})\n\tif _, err := io.Copy(parent, bytes.NewReader(r.Serialize())); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tif err := cmd.Wait(); err == nil {\n\t\tt.Fatalf(\"nsenter error: %v\", err)\n\t}\n}\n\nfunc TestNsenterChildLogging(t *testing.T) {\n\targs := []string{\"nsenter-exec\"}\n\tparent, child := newPipe(t)\n\tlogread, logwrite := newPipe(t)\n\n\tnamespaces := []string{\n\t\t// join pid ns of the current process\n\t\tfmt.Sprintf(\"pid:/proc/%d/ns/pid\", os.Getpid()),\n\t}\n\tcmd := &exec.Cmd{\n\t\tPath:       os.Args[0],\n\t\tArgs:       args,\n\t\tExtraFiles: []*os.File{child, logwrite},\n\t\tEnv:        []string{\"_LIBCONTAINER_INITPIPE=3\", \"_LIBCONTAINER_LOGPIPE=4\"},\n\t\tStdout:     os.Stdout,\n\t\tStderr:     os.Stderr,\n\t}\n\n\tif err := cmd.Start(); err != nil {\n\t\tt.Fatalf(\"nsenter failed to start: %v\", err)\n\t}\n\tchild.Close()\n\tlogwrite.Close()\n\n\t// write cloneFlags\n\tr := nl.NewNetlinkRequest(int(libcontainer.InitMsg), 0)\n\tr.AddData(&libcontainer.Int32msg{\n\t\tType:  libcontainer.CloneFlagsAttr,\n\t\tValue: uint32(unix.CLONE_NEWNET),\n\t})\n\tr.AddData(&libcontainer.Bytemsg{\n\t\tType:  libcontainer.NsPathsAttr,\n\t\tValue: []byte(strings.Join(namespaces, \",\")),\n\t})\n\tif _, err := io.Copy(parent, bytes.NewReader(r.Serialize())); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tgetLogs(t, logread)\n\tif err := cmd.Wait(); err != nil {\n\t\tt.Fatalf(\"nsenter error: %v\", err)\n\t}\n\n\treapChildren(t, parent)\n}\n\nfunc init() {\n\tif strings.HasPrefix(os.Args[0], \"nsenter-\") {\n\t\tos.Exit(0)\n\t}\n}\n\nfunc newPipe(t *testing.T) (parent, child *os.File) {\n\tt.Helper()\n\tfds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_STREAM|unix.SOCK_CLOEXEC, 0)\n\tif err != nil {\n\t\tt.Fatal(\"socketpair failed:\", err)\n\t}\n\tparent = os.NewFile(uintptr(fds[1]), \"parent\")\n\tchild = os.NewFile(uintptr(fds[0]), \"child\")\n\tt.Cleanup(func() {\n\t\tparent.Close()\n\t\tchild.Close()\n\t})\n\treturn parent, child\n}\n\nfunc reapChildren(t *testing.T, parent *os.File) {\n\tt.Helper()\n\tdecoder := json.NewDecoder(parent)\n\tdecoder.DisallowUnknownFields()\n\tvar pid struct {\n\t\tPid2 int `json:\"stage2_pid\"`\n\t\tPid1 int `json:\"stage1_pid\"`\n\t}\n\tif err := decoder.Decode(&pid); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\t// Reap children.\n\t_, _ = unix.Wait4(pid.Pid1, nil, 0, nil)\n\t_, _ = unix.Wait4(pid.Pid2, nil, 0, nil)\n\n\t// Sanity check.\n\tif pid.Pid1 == 0 || pid.Pid2 == 0 {\n\t\tt.Fatal(\"got pids:\", pid)\n\t}\n}\n\nfunc getLogs(t *testing.T, logread *os.File) {\n\tlogsDecoder := json.NewDecoder(logread)\n\tlogsDecoder.DisallowUnknownFields()\n\tvar logentry struct {\n\t\tLevel string `json:\"level\"`\n\t\tMsg   string `json:\"msg\"`\n\t}\n\n\tfor {\n\t\tif err := logsDecoder.Decode(&logentry); err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tt.Fatal(\"init log decoding error:\", err)\n\t\t}\n\t\tt.Logf(\"logentry: %+v\", logentry)\n\t\tif logentry.Level == \"\" || logentry.Msg == \"\" {\n\t\t\tt.Fatalf(\"init log: empty log entry: %+v\", logentry)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "libcontainer/nsenter/nsexec.c",
    "content": "\n#define _GNU_SOURCE\n#include <endian.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <grp.h>\n#include <sched.h>\n#include <setjmp.h>\n#include <signal.h>\n#include <stdarg.h>\n#include <stdbool.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <stdbool.h>\n#include <string.h>\n#include <unistd.h>\n\n#include <sys/ioctl.h>\n#include <sys/prctl.h>\n#include <sys/socket.h>\n#include <sys/types.h>\n#include <sys/wait.h>\n\n#include <linux/limits.h>\n#include <linux/netlink.h>\n#include <linux/types.h>\n\n#include \"getenv.h\"\n#include \"log.h\"\n/* Get all of the CLONE_NEW* flags. */\n#include \"namespace.h\"\n\n/* Synchronisation values. */\nenum sync_t {\n\tSYNC_USERMAP_PLS = 0x40,\t/* Request parent to map our users. */\n\tSYNC_USERMAP_ACK = 0x41,\t/* Mapping finished by the parent. */\n\tSYNC_RECVPID_PLS = 0x42,\t/* Tell parent we're sending the PID. */\n\tSYNC_RECVPID_ACK = 0x43,\t/* PID was correctly received by parent. */\n\tSYNC_GRANDCHILD = 0x44,\t/* The grandchild is ready to run. */\n\tSYNC_CHILD_FINISH = 0x45,\t/* The child or grandchild has finished. */\n\tSYNC_TIMEOFFSETS_PLS = 0x46,\t/* Request parent to write timens offsets. */\n\tSYNC_TIMEOFFSETS_ACK = 0x47,\t/* Timens offsets were written. */\n};\n\n#define STAGE_SETUP  -1\n/* longjmp() arguments. */\n#define STAGE_PARENT  0\n#define STAGE_CHILD   1\n#define STAGE_INIT    2\n\n/* Stores the current stage of nsexec. */\nint current_stage = STAGE_SETUP;\n\n/* Assume the stack grows down, so arguments should be above it. */\nstruct clone_t {\n\t/*\n\t * Reserve some space for clone() to locate arguments\n\t * and retcode in this place\n\t */\n\tchar stack[4096] __attribute__((aligned(16)));\n\tchar stack_ptr[0];\n\n\t/* There's two children. This is used to execute the different code. */\n\tjmp_buf *env;\n\tint jmpval;\n};\n\nstruct nlconfig_t {\n\tchar *data;\n\n\t/* Process settings. */\n\tuint32_t cloneflags;\n\tchar *oom_score_adj;\n\tsize_t oom_score_adj_len;\n\n\t/* User namespace settings. */\n\tchar *uidmap;\n\tsize_t uidmap_len;\n\tchar *gidmap;\n\tsize_t gidmap_len;\n\tchar *namespaces;\n\tsize_t namespaces_len;\n\tuint8_t is_setgroup;\n\n\t/* Rootless container settings. */\n\tuint8_t is_rootless_euid;\t/* boolean */\n\tchar *uidmappath;\n\tsize_t uidmappath_len;\n\tchar *gidmappath;\n\tsize_t gidmappath_len;\n\n\t/* Time NS offsets. */\n\tchar *timensoffset;\n\tsize_t timensoffset_len;\n};\n\n/*\n * List of netlink message types sent to us as part of bootstrapping the init.\n * These constants are defined in libcontainer/message_linux.go.\n */\n#define INIT_MSG\t\t62000\n#define CLONE_FLAGS_ATTR\t27281\n#define NS_PATHS_ATTR\t\t27282\n#define UIDMAP_ATTR\t\t27283\n#define GIDMAP_ATTR\t\t27284\n#define SETGROUP_ATTR\t\t27285\n#define OOM_SCORE_ADJ_ATTR\t27286\n#define ROOTLESS_EUID_ATTR\t27287\n#define UIDMAPPATH_ATTR\t\t27288\n#define GIDMAPPATH_ATTR\t\t27289\n#define TIMENSOFFSET_ATTR\t27290\n\n/*\n * Use the raw syscall for versions of glibc which don't include a function for\n * it, namely (glibc 2.12).\n */\n#if __GLIBC__ == 2 && __GLIBC_MINOR__ < 14\n#  define _GNU_SOURCE\n#  include \"syscall.h\"\n#  if !defined(SYS_setns) && defined(__NR_setns)\n#    define SYS_setns __NR_setns\n#  endif\n\n#  ifndef SYS_setns\n#    error \"setns(2) syscall not supported by glibc version\"\n#  endif\n\nint setns(int fd, int nstype)\n{\n\treturn syscall(SYS_setns, fd, nstype);\n}\n#endif\n\n/* XXX: This is ugly. */\nstatic int syncfd = -1;\n\nstatic int write_file(char *data, size_t data_len, char *pathfmt, ...)\n{\n\tint fd, len, ret = 0;\n\tchar path[PATH_MAX];\n\n\tva_list ap;\n\tva_start(ap, pathfmt);\n\tlen = vsnprintf(path, PATH_MAX, pathfmt, ap);\n\tva_end(ap);\n\tif (len < 0)\n\t\treturn -1;\n\n\tfd = open(path, O_RDWR);\n\tif (fd < 0) {\n\t\treturn -1;\n\t}\n\n\tlen = write(fd, data, data_len);\n\tif (len != data_len) {\n\t\tret = -1;\n\t\tgoto out;\n\t}\n\nout:\n\tclose(fd);\n\treturn ret;\n}\n\nenum policy_t {\n\tSETGROUPS_DEFAULT = 0,\n\tSETGROUPS_ALLOW,\n\tSETGROUPS_DENY,\n};\n\n/* This *must* be called before we touch gid_map. */\nstatic void update_setgroups(int pid, enum policy_t setgroup)\n{\n\tchar *policy;\n\n\tswitch (setgroup) {\n\tcase SETGROUPS_ALLOW:\n\t\tpolicy = \"allow\";\n\t\tbreak;\n\tcase SETGROUPS_DENY:\n\t\tpolicy = \"deny\";\n\t\tbreak;\n\tcase SETGROUPS_DEFAULT:\n\tdefault:\n\t\t/* Nothing to do. */\n\t\treturn;\n\t}\n\n\tif (write_file(policy, strlen(policy), \"/proc/%d/setgroups\", pid) < 0) {\n\t\t/*\n\t\t * If the kernel is too old to support /proc/pid/setgroups,\n\t\t * open(2) or write(2) will return ENOENT. This is fine.\n\t\t */\n\t\tif (errno != ENOENT)\n\t\t\tbail(\"failed to write '%s' to /proc/%d/setgroups\", policy, pid);\n\t}\n}\n\nstatic int try_mapping_tool(const char *app, int pid, char *map, size_t map_len)\n{\n\tint child;\n\n\t/*\n\t * If @app is NULL, execve will segfault. Just check it here and bail (if\n\t * we're in this path, the caller is already getting desperate and there\n\t * isn't a backup to this failing). This usually would be a configuration\n\t * or programming issue.\n\t */\n\tif (!app)\n\t\tbailx(\"mapping tool not present\");\n\n\tchild = fork();\n\tif (child < 0)\n\t\tbail(\"failed to fork\");\n\n\tif (!child) {\n#define MAX_ARGV 20\n\t\tchar *argv[MAX_ARGV];\n\t\tchar *envp[] = { NULL };\n\t\tchar pid_fmt[16];\n\t\tint argc = 0;\n\t\tchar *next;\n\n\t\tsnprintf(pid_fmt, 16, \"%d\", pid);\n\n\t\targv[argc++] = (char *)app;\n\t\targv[argc++] = pid_fmt;\n\t\t/*\n\t\t * Convert the map string into a list of argument that\n\t\t * newuidmap/newgidmap can understand.\n\t\t */\n\n\t\twhile (argc < MAX_ARGV) {\n\t\t\tif (*map == '\\0') {\n\t\t\t\targv[argc++] = NULL;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\targv[argc++] = map;\n\t\t\tnext = strpbrk(map, \"\\n \");\n\t\t\tif (next == NULL)\n\t\t\t\tbreak;\n\t\t\t*next++ = '\\0';\n\t\t\tmap = next + strspn(next, \"\\n \");\n\t\t}\n\n\t\texecve(app, argv, envp);\n\t\tbail(\"failed to execv\");\n\t} else {\n\t\tint status;\n\n\t\twhile (true) {\n\t\t\tif (waitpid(child, &status, 0) < 0) {\n\t\t\t\tif (errno == EINTR)\n\t\t\t\t\tcontinue;\n\t\t\t\tbail(\"failed to waitpid\");\n\t\t\t}\n\t\t\tif (WIFEXITED(status) || WIFSIGNALED(status))\n\t\t\t\treturn WEXITSTATUS(status);\n\t\t}\n\t}\n\n\treturn -1;\n}\n\nstatic void update_uidmap(const char *path, int pid, char *map, size_t map_len)\n{\n\tif (map == NULL || map_len == 0)\n\t\treturn;\n\n\twrite_log(DEBUG, \"update /proc/%d/uid_map to '%s'\", pid, map);\n\tif (write_file(map, map_len, \"/proc/%d/uid_map\", pid) < 0) {\n\t\tif (errno != EPERM)\n\t\t\tbail(\"failed to update /proc/%d/uid_map\", pid);\n\t\twrite_log(DEBUG, \"update /proc/%d/uid_map got -EPERM (trying %s)\", pid, path);\n\t\tif (try_mapping_tool(path, pid, map, map_len))\n\t\t\tbailx(\"failed to use newuid map on %d\", pid);\n\t}\n}\n\nstatic void update_gidmap(const char *path, int pid, char *map, size_t map_len)\n{\n\tif (map == NULL || map_len == 0)\n\t\treturn;\n\n\twrite_log(DEBUG, \"update /proc/%d/gid_map to '%s'\", pid, map);\n\tif (write_file(map, map_len, \"/proc/%d/gid_map\", pid) < 0) {\n\t\tif (errno != EPERM)\n\t\t\tbail(\"failed to update /proc/%d/gid_map\", pid);\n\t\twrite_log(DEBUG, \"update /proc/%d/gid_map got -EPERM (trying %s)\", pid, path);\n\t\tif (try_mapping_tool(path, pid, map, map_len))\n\t\t\tbailx(\"failed to use newgid map on %d\", pid);\n\t}\n}\n\nstatic void update_oom_score_adj(char *data, size_t len)\n{\n\tif (data == NULL || len == 0)\n\t\treturn;\n\n\twrite_log(DEBUG, \"update /proc/self/oom_score_adj to '%s'\", data);\n\tif (write_file(data, len, \"/proc/self/oom_score_adj\") < 0)\n\t\tbail(\"failed to update /proc/self/oom_score_adj\");\n}\n\n/* A dummy function that just jumps to the given jumpval. */\nstatic int child_func(void *arg) __attribute__((noinline));\nstatic int child_func(void *arg)\n{\n\tstruct clone_t *ca = (struct clone_t *)arg;\n\tlongjmp(*ca->env, ca->jmpval);\n}\n\nstatic int clone_parent(jmp_buf *env, int jmpval) __attribute__((noinline));\nstatic int clone_parent(jmp_buf *env, int jmpval)\n{\n\tstruct clone_t ca = {\n\t\t.env = env,\n\t\t.jmpval = jmpval,\n\t};\n\n\treturn clone(child_func, ca.stack_ptr, CLONE_PARENT | SIGCHLD, &ca);\n}\n\nstatic uint32_t readint32(char *buf)\n{\n\treturn *(uint32_t *) buf;\n}\n\nstatic uint8_t readint8(char *buf)\n{\n\treturn *(uint8_t *) buf;\n}\n\nstatic inline void sane_kill(pid_t pid, int signum)\n{\n\tif (pid <= 0)\n\t\treturn;\n\n\tint saved_errno = errno;\n\tkill(pid, signum);\n\terrno = saved_errno;\n}\n\n__attribute__((noreturn))\nstatic void iobail(int got, int want, const char *errmsg, int pid1, int pid2)\n{\n\tsane_kill(pid1, SIGKILL);\n\tsane_kill(pid2, SIGKILL);\n\tif (got < 0)\n\t\tbail(\"%s\", errmsg);\n\t/* Short read or write. */\n\tbailx(\"%s (got %d of %d bytes)\", errmsg, got, want);\n}\n\nstatic void xread(int fd, void *buf, size_t nbytes, const char *errmsg, int pid1, int pid2)\n{\n\tssize_t len;\n\n\tlen = read(fd, buf, nbytes);\n\tif (len != nbytes)\n\t\tiobail(len, nbytes, errmsg, pid1, pid2);\n}\n\nstatic void xwrite(int fd, void *buf, size_t nbytes, const char *errmsg, int pid1, int pid2)\n{\n\tssize_t len;\n\n\tlen = write(fd, buf, nbytes);\n\tif (len != nbytes)\n\t\tiobail(len, nbytes, errmsg, pid1, pid2);\n}\n\nstatic void nl_parse(int fd, struct nlconfig_t *config)\n{\n\tsize_t size;\n\tstruct nlmsghdr hdr;\n\tchar *data, *current;\n\n\t/* Retrieve the netlink header. */\n\txread(fd, &hdr, NLMSG_HDRLEN, \"failed to read netlink header\", -1, -1);\n\n\tif (hdr.nlmsg_type == NLMSG_ERROR)\n\t\tbailx(\"failed to read netlink message\");\n\n\tif (hdr.nlmsg_type != INIT_MSG)\n\t\tbailx(\"unexpected msg type %d\", hdr.nlmsg_type);\n\n\t/* Retrieve data. */\n\tsize = NLMSG_PAYLOAD(&hdr, 0);\n\tcurrent = data = malloc(size);\n\tif (!data)\n\t\tbail(\"failed to allocate %zu bytes of memory for nl_payload\", size);\n\n\txread(fd, data, size, \"failed to read netlink payload\", -1, -1);\n\n\t/* Parse the netlink payload. */\n\tconfig->data = data;\n\twhile (current < data + size) {\n\t\tstruct nlattr *nlattr = (struct nlattr *)current;\n\t\tsize_t payload_len = nlattr->nla_len - NLA_HDRLEN;\n\n\t\t/* Advance to payload. */\n\t\tcurrent += NLA_HDRLEN;\n\n\t\t/* Handle payload. */\n\t\tswitch (nlattr->nla_type) {\n\t\tcase CLONE_FLAGS_ATTR:\n\t\t\tconfig->cloneflags = readint32(current);\n\t\t\tbreak;\n\t\tcase ROOTLESS_EUID_ATTR:\n\t\t\tconfig->is_rootless_euid = readint8(current);\t/* boolean */\n\t\t\tbreak;\n\t\tcase OOM_SCORE_ADJ_ATTR:\n\t\t\tconfig->oom_score_adj = current;\n\t\t\tconfig->oom_score_adj_len = payload_len;\n\t\t\tbreak;\n\t\tcase NS_PATHS_ATTR:\n\t\t\tconfig->namespaces = current;\n\t\t\tconfig->namespaces_len = payload_len;\n\t\t\tbreak;\n\t\tcase UIDMAP_ATTR:\n\t\t\tconfig->uidmap = current;\n\t\t\tconfig->uidmap_len = payload_len;\n\t\t\tbreak;\n\t\tcase GIDMAP_ATTR:\n\t\t\tconfig->gidmap = current;\n\t\t\tconfig->gidmap_len = payload_len;\n\t\t\tbreak;\n\t\tcase UIDMAPPATH_ATTR:\n\t\t\tconfig->uidmappath = current;\n\t\t\tconfig->uidmappath_len = payload_len;\n\t\t\tbreak;\n\t\tcase GIDMAPPATH_ATTR:\n\t\t\tconfig->gidmappath = current;\n\t\t\tconfig->gidmappath_len = payload_len;\n\t\t\tbreak;\n\t\tcase SETGROUP_ATTR:\n\t\t\tconfig->is_setgroup = readint8(current);\n\t\t\tbreak;\n\t\tcase TIMENSOFFSET_ATTR:\n\t\t\tconfig->timensoffset = current;\n\t\t\tconfig->timensoffset_len = payload_len;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbail(\"unknown netlink message type %d\", nlattr->nla_type);\n\t\t}\n\n\t\tcurrent += NLA_ALIGN(payload_len);\n\t}\n}\n\nvoid nl_free(struct nlconfig_t *config)\n{\n\tfree(config->data);\n}\n\nstruct namespace_t {\n\tint fd;\n\tchar type[PATH_MAX];\n\tchar path[PATH_MAX];\n};\n\ntypedef int nsset_t;\n\nstatic struct nstype_t {\n\tint type;\n\tchar *name;\n} all_ns_types[] = {\n\t{ CLONE_NEWCGROUP, \"cgroup\" },\n\t{ CLONE_NEWIPC, \"ipc\" },\n\t{ CLONE_NEWNS, \"mnt\" },\n\t{ CLONE_NEWNET, \"net\" },\n\t{ CLONE_NEWPID, \"pid\" },\n\t{ CLONE_NEWTIME, \"time\" },\n\t{ CLONE_NEWUSER, \"user\" },\n\t{ CLONE_NEWUTS, \"uts\" },\n\t{ },\t\t\t/* null terminator */\n};\n\n/* Returns the clone(2) flag for a namespace, given the name of a namespace. */\nstatic int nstype(char *name)\n{\n\tfor (struct nstype_t * ns = all_ns_types; ns->name != NULL; ns++)\n\t\tif (!strcmp(name, ns->name))\n\t\t\treturn ns->type;\n\t/*\n\t * setns(2) lets us join namespaces without knowing the type, but\n\t * namespaces usually require special handling of some kind (so joining\n\t * a namespace without knowing its type or joining a new namespace type\n\t * without corresponding handling could result in broken behaviour) and\n\t * the rest of runc doesn't allow unknown namespace types anyway.\n\t */\n\tbailx(\"unknown namespace type %s\", name);\n}\n\nstatic nsset_t __open_namespaces(char *nsspec, struct namespace_t **ns_list, size_t *ns_len)\n{\n\tint len = 0;\n\tnsset_t ns_to_join = 0;\n\tchar *namespace, *saveptr = NULL;\n\tstruct namespace_t *namespaces = NULL;\n\n\tnamespace = strtok_r(nsspec, \",\", &saveptr);\n\n\tif (!namespace || !strlen(namespace) || !strlen(nsspec))\n\t\tbailx(\"ns paths are empty\");\n\n\tdo {\n\t\tint fd;\n\t\tchar *path;\n\t\tstruct namespace_t *ns;\n\n\t\t/* Resize the namespace array. */\n\t\tnamespaces = realloc(namespaces, ++len * sizeof(struct namespace_t));\n\t\tif (!namespaces)\n\t\t\tbail(\"failed to reallocate namespace array\");\n\t\tns = &namespaces[len - 1];\n\n\t\t/* Split 'ns:path'. */\n\t\tpath = strstr(namespace, \":\");\n\t\tif (!path)\n\t\t\tbailx(\"failed to parse %s\", namespace);\n\t\t*path++ = '\\0';\n\n\t\tfd = open(path, O_RDONLY);\n\t\tif (fd < 0)\n\t\t\tbail(\"failed to open %s\", path);\n\n\t\tns->fd = fd;\n\t\tstrncpy(ns->type, namespace, PATH_MAX - 1);\n\t\tstrncpy(ns->path, path, PATH_MAX - 1);\n\t\tns->path[PATH_MAX - 1] = '\\0';\n\n\t\tns_to_join |= nstype(ns->type);\n\t} while ((namespace = strtok_r(NULL, \",\", &saveptr)) != NULL);\n\n\t*ns_list = namespaces;\n\t*ns_len = len;\n\treturn ns_to_join;\n}\n\n/*\n * Try to join all namespaces that are in the \"allow\" nsset, and return the\n * set we were able to successfully join. If a permission error is returned\n * from nsset(2), the namespace is skipped (non-permission errors are fatal).\n */\nstatic nsset_t __join_namespaces(nsset_t allow, struct namespace_t *ns_list, size_t ns_len)\n{\n\tnsset_t joined = 0;\n\n\tfor (size_t i = 0; i < ns_len; i++) {\n\t\tstruct namespace_t *ns = &ns_list[i];\n\t\tint type = nstype(ns->type);\n\t\tint err, saved_errno;\n\n\t\tif (!(type & allow))\n\t\t\tcontinue;\n\n\t\terr = setns(ns->fd, type);\n\t\tsaved_errno = errno;\n\t\twrite_log(DEBUG, \"setns(%#x) into %s namespace (with path %s): %s\",\n\t\t\t  type, ns->type, ns->path, strerror(errno));\n\t\tif (err < 0) {\n\t\t\t/* Skip permission errors. */\n\t\t\tif (saved_errno == EPERM)\n\t\t\t\tcontinue;\n\t\t\tbailx(\"failed to setns into %s namespace: %s\", ns->type, strerror(saved_errno));\n\t\t}\n\t\tjoined |= type;\n\n\t\t/*\n\t\t * If we change user namespaces, make sure we switch to root in the\n\t\t * namespace (this matches the logic for unshare(CLONE_NEWUSER)), lots\n\t\t * of things can break if we aren't the right user. See\n\t\t * <https://github.com/opencontainers/runc/issues/4466> for one example.\n\t\t */\n\t\tif (type == CLONE_NEWUSER) {\n\t\t\tif (setresuid(0, 0, 0) < 0)\n\t\t\t\tbail(\"failed to become root in user namespace\");\n\t\t}\n\n\t\tclose(ns->fd);\n\t\tns->fd = -1;\n\t}\n\treturn joined;\n}\n\nstatic char *strappend(char *dst, char *src)\n{\n\tif (!dst)\n\t\treturn strdup(src);\n\n\tsize_t len = strlen(dst) + strlen(src) + 1;\n\tdst = realloc(dst, len);\n\tstrncat(dst, src, len);\n\treturn dst;\n}\n\nstatic char *nsset_to_str(nsset_t nsset)\n{\n\tchar *str = NULL;\n\tfor (struct nstype_t * ns = all_ns_types; ns->name != NULL; ns++) {\n\t\tif (ns->type & nsset) {\n\t\t\tif (str)\n\t\t\t\tstr = strappend(str, \", \");\n\t\t\tstr = strappend(str, ns->name);\n\t\t}\n\t}\n\treturn str ? : strdup(\"\");\n}\n\nstatic void __close_namespaces(nsset_t to_join, nsset_t joined, struct namespace_t *ns_list, size_t ns_len)\n{\n\t/* We expect to have joined every namespace. */\n\tnsset_t failed_to_join = to_join & ~joined;\n\n\t/* Double-check that we used up (and thus joined) all of the nsfds. */\n\tfor (size_t i = 0; i < ns_len; i++) {\n\t\tstruct namespace_t *ns = &ns_list[i];\n\t\tint type = nstype(ns->type);\n\n\t\tif (ns->fd < 0)\n\t\t\tcontinue;\n\n\t\tfailed_to_join |= type;\n\t\twrite_log(FATAL, \"failed to setns(%#x) into %s namespace (with path %s): %s\",\n\t\t\t  type, ns->type, ns->path, strerror(EPERM));\n\t\tclose(ns->fd);\n\t\tns->fd = -1;\n\t}\n\n\t/* Make sure we joined the namespaces we planned to. */\n\tif (failed_to_join)\n\t\tbailx(\"failed to join {%s} namespaces: %s\", nsset_to_str(failed_to_join), strerror(EPERM));\n\n\tfree(ns_list);\n}\n\nvoid join_namespaces(char *nsspec)\n{\n\tnsset_t to_join = 0, joined = 0;\n\tstruct namespace_t *ns_list;\n\tsize_t ns_len;\n\n\t/*\n\t * We have to open the file descriptors first, since after we join the\n\t * mnt or user namespaces we might no longer be able to access the\n\t * paths.\n\t */\n\tto_join = __open_namespaces(nsspec, &ns_list, &ns_len);\n\n\t/*\n\t * We first try to join all non-userns namespaces to join any namespaces\n\t * that we might not be able to join once we switch credentials to the\n\t * container's userns. We then join the user namespace, and then try to\n\t * join any remaining namespaces (this last step is needed for rootless\n\t * containers -- we don't get setns(2) permissions until we join the userns\n\t * and get CAP_SYS_ADMIN).\n\t *\n\t * Splitting the joins this way is necessary for containers that are\n\t * configured to join some externally-created namespace but are also\n\t * configured to join an unrelated user namespace.\n\t *\n\t * This is similar to what nsenter(1) seems to do in practice.\n\t */\n\tjoined |= __join_namespaces(to_join & ~(joined | CLONE_NEWUSER), ns_list, ns_len);\n\tjoined |= __join_namespaces(CLONE_NEWUSER, ns_list, ns_len);\n\tjoined |= __join_namespaces(to_join & ~(joined | CLONE_NEWUSER), ns_list, ns_len);\n\n\t/* Verify that we joined all of the namespaces. */\n\t__close_namespaces(to_join, joined, ns_list, ns_len);\n}\n\nvoid try_unshare(int flags, const char *msg)\n{\n\twrite_log(DEBUG, \"unshare %s\", msg);\n\t/*\n\t * Kernels prior to v4.3 may return EINVAL on unshare when another process\n\t * reads runc's /proc/$PID/status or /proc/$PID/maps. To work around this,\n\t * retry on EINVAL a few times.\n\t */\n\tint retries = 5;\n\tfor (; retries > 0; retries--) {\n\t\tif (unshare(flags) == 0) {\n\t\t\treturn;\n\t\t}\n\t\tif (errno != EINVAL)\n\t\t\tbreak;\n\t}\n\tbail(\"failed to unshare %s\", msg);\n}\n\nstatic void update_timens_offsets(pid_t pid, char *map, size_t map_len)\n{\n\tif (map == NULL || map_len == 0)\n\t\treturn;\n\twrite_log(DEBUG, \"update /proc/%d/timens_offsets to '%s'\", pid, map);\n\tif (write_file(map, map_len, \"/proc/%d/timens_offsets\", pid) < 0)\n\t\tbail(\"failed to update /proc/%d/timens_offsets\", pid);\n}\n\nstatic void log_cpu_affinity()\n{\n\tcpu_set_t cpus = { };\n\tsize_t i, mask = 0;\n\n\tif (!log_enabled_for(DEBUG))\n\t\treturn;\n\n\tif (sched_getaffinity(0, sizeof(cpus), &cpus) < 0) {\n\t\twrite_log(WARNING, \"sched_getaffinity: %m\");\n\t\treturn;\n\t}\n\n\t/* Do not print the complete mask, we only need a few first CPUs. */\n\tfor (i = 0; i < sizeof(mask) * 8; i++) {\n\t\tif (CPU_ISSET(i, &cpus))\n\t\t\tmask |= 1 << i;\n\t}\n\n\twrite_log(DEBUG, \"affinity: 0x%zx\", mask);\n}\n\nvoid nsexec(void)\n{\n\tint pipenum;\n\tjmp_buf env;\n\tint sync_child_pipe[2], sync_grandchild_pipe[2];\n\tstruct nlconfig_t config = { 0 };\n\n\t/*\n\t * Setup a pipe to send logs to the parent. This should happen\n\t * first, because bail will use that pipe.\n\t */\n\tsetup_logpipe();\n\n\t/*\n\t * Get the init pipe fd from the environment. The init pipe is used to\n\t * read the bootstrap data and tell the parent what the new pids are\n\t * after the setup is done.\n\t */\n\tpipenum = getenv_int(\"_LIBCONTAINER_INITPIPE\");\n\tif (pipenum < 0) {\n\t\t/* We are not a runc init. Just return to go runtime. */\n\t\treturn;\n\t}\n\n\twrite_log(DEBUG, \"=> nsexec container setup\");\n\n\t/* Log initial CPU affinity, this is solely for the tests in\n\t * ../../tests/integration/cpu_affinity.bats.\n\t *\n\t * Logging this from Go code might be too late as some kernels\n\t * change the process' CPU affinity to that of container's cpuset\n\t * as soon as the process is moved into container's cgroup.\n\t */\n\tlog_cpu_affinity();\n\n\t/* Parse all of the netlink configuration. */\n\tnl_parse(pipenum, &config);\n\n\t/* Set oom_score_adj. This has to be done before !dumpable because\n\t * /proc/self/oom_score_adj is not writeable unless you're an privileged\n\t * user (if !dumpable is set). All children inherit their parent's\n\t * oom_score_adj value on fork(2) so this will always be propagated\n\t * properly.\n\t */\n\tupdate_oom_score_adj(config.oom_score_adj, config.oom_score_adj_len);\n\n\t/*\n\t * Make the process non-dumpable, to avoid various race conditions that\n\t * could cause processes in namespaces we're joining to access host\n\t * resources (or potentially execute code).\n\t *\n\t * However, if the number of namespaces we are joining is 0, we are not\n\t * going to be switching to a different security context. Thus setting\n\t * ourselves to be non-dumpable only breaks things (like rootless\n\t * containers), which is the recommendation from the kernel folks.\n\t */\n\tif (config.namespaces) {\n\t\twrite_log(DEBUG, \"set process as non-dumpable\");\n\t\tif (prctl(PR_SET_DUMPABLE, 0, 0, 0, 0) < 0)\n\t\t\tbail(\"failed to set process as non-dumpable\");\n\t}\n\n\t/* Pipe so we can tell the child when we've finished setting up. */\n\tif (socketpair(AF_LOCAL, SOCK_STREAM, 0, sync_child_pipe) < 0)\n\t\tbail(\"failed to setup sync pipe between parent and child\");\n\n\t/*\n\t * We need a new socketpair to sync with grandchild so we don't have\n\t * race condition with child.\n\t */\n\tif (socketpair(AF_LOCAL, SOCK_STREAM, 0, sync_grandchild_pipe) < 0)\n\t\tbail(\"failed to setup sync pipe between parent and grandchild\");\n\n\t/* TODO: Currently we aren't dealing with child deaths properly. */\n\n\t/*\n\t * Okay, so this is quite annoying.\n\t *\n\t * In order for this unsharing code to be more extensible we need to split\n\t * up unshare(CLONE_NEWUSER) and clone() in various ways. The ideal case\n\t * would be if we did clone(CLONE_NEWUSER) and the other namespaces\n\t * separately, but because of SELinux issues we cannot really do that. But\n\t * we cannot just dump the namespace flags into clone(...) because several\n\t * usecases (such as rootless containers) require more granularity around\n\t * the namespace setup. In addition, some older kernels had issues where\n\t * CLONE_NEWUSER wasn't handled before other namespaces (but we cannot\n\t * handle this while also dealing with SELinux so we choose SELinux support\n\t * over broken kernel support).\n\t *\n\t * However, if we unshare(2) the user namespace *before* we clone(2), then\n\t * all hell breaks loose.\n\t *\n\t * The parent no longer has permissions to do many things (unshare(2) drops\n\t * all capabilities in your old namespace), and the container cannot be set\n\t * up to have more than one {uid,gid} mapping. This is obviously less than\n\t * ideal. In order to fix this, we have to first clone(2) and then unshare.\n\t *\n\t * Unfortunately, it's not as simple as that. We have to fork to enter the\n\t * PID namespace (the PID namespace only applies to children). Since we'll\n\t * have to double-fork, this clone_parent() call won't be able to get the\n\t * PID of the _actual_ init process (without doing more synchronisation than\n\t * I can deal with at the moment). So we'll just get the parent to send it\n\t * for us, the only job of this process is to update\n\t * /proc/pid/{setgroups,uid_map,gid_map}.\n\t *\n\t * And as a result of the above, we also need to setns(2) in the first child\n\t * because if we join a PID namespace in the topmost parent then our child\n\t * will be in that namespace (and it will not be able to give us a PID value\n\t * that makes sense without resorting to sending things with cmsg).\n\t *\n\t * This also deals with an older issue caused by dumping cloneflags into\n\t * clone(2): On old kernels, CLONE_PARENT didn't work with CLONE_NEWPID, so\n\t * we have to unshare(2) before clone(2) in order to do this. This was fixed\n\t * in upstream commit 1f7f4dde5c945f41a7abc2285be43d918029ecc5, and was\n\t * introduced by 40a0d32d1eaffe6aac7324ca92604b6b3977eb0e. As far as we're\n\t * aware, the last mainline kernel which had this bug was Linux 3.12.\n\t * However, we cannot comment on which kernels the broken patch was\n\t * backported to.\n\t *\n\t * -- Aleksa \"what has my life come to?\" Sarai\n\t */\n\n\tswitch (setjmp(env)) {\n\t\t/*\n\t\t * Stage 0: We're in the parent. Our job is just to create a new child\n\t\t *          (stage 1: STAGE_CHILD) process and write its uid_map and\n\t\t *          gid_map. That process will go on to create a new process, then\n\t\t *          it will send us its PID which we will send to the bootstrap\n\t\t *          process.\n\t\t */\n\tcase STAGE_PARENT:{\n\t\t\tint len;\n\t\t\tpid_t stage1_pid = -1, stage2_pid = -1;\n\t\t\tbool stage1_complete, stage2_complete;\n\n\t\t\t/* For debugging. */\n\t\t\tcurrent_stage = STAGE_PARENT;\n\t\t\tprctl(PR_SET_NAME, (unsigned long)\"runc:[0:PARENT]\", 0, 0, 0);\n\t\t\twrite_log(DEBUG, \"~> nsexec stage-0\");\n\n\t\t\t/* Start the process of getting a container. */\n\t\t\twrite_log(DEBUG, \"spawn stage-1\");\n\t\t\tstage1_pid = clone_parent(&env, STAGE_CHILD);\n\t\t\tif (stage1_pid < 0)\n\t\t\t\tbail(\"unable to spawn stage-1\");\n\n\t\t\tsyncfd = sync_child_pipe[1];\n\t\t\tif (close(sync_child_pipe[0]) < 0) {\n\t\t\t\tsane_kill(stage1_pid, SIGKILL);\n\t\t\t\tbail(\"failed to close sync_child_pipe[0] fd\");\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * State machine for synchronisation with the children. We only\n\t\t\t * return once both the child and grandchild are ready.\n\t\t\t */\n\t\t\twrite_log(DEBUG, \"-> stage-1 synchronisation loop\");\n\t\t\tstage1_complete = false;\n\t\t\twhile (!stage1_complete) {\n\t\t\t\tenum sync_t s;\n\n\t\t\t\txread(syncfd, &s, sizeof(s),\n\t\t\t\t      \"failed to sync with stage-1: next state\", stage1_pid, stage2_pid);\n\n\t\t\t\tswitch (s) {\n\t\t\t\tcase SYNC_USERMAP_PLS:\n\t\t\t\t\twrite_log(DEBUG, \"stage-1 requested userns mappings\");\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Enable setgroups(2) if we've been asked to. But we also\n\t\t\t\t\t * have to explicitly disable setgroups(2) if we're\n\t\t\t\t\t * creating a rootless container for single-entry mapping.\n\t\t\t\t\t * i.e. config.is_setgroup == false.\n\t\t\t\t\t * (this is required since Linux 3.19).\n\t\t\t\t\t *\n\t\t\t\t\t * For rootless multi-entry mapping, config.is_setgroup shall be true and\n\t\t\t\t\t * newuidmap/newgidmap shall be used.\n\t\t\t\t\t */\n\t\t\t\t\tif (config.is_rootless_euid && !config.is_setgroup)\n\t\t\t\t\t\tupdate_setgroups(stage1_pid, SETGROUPS_DENY);\n\n\t\t\t\t\t/* Set up mappings. */\n\t\t\t\t\tupdate_uidmap(config.uidmappath, stage1_pid, config.uidmap, config.uidmap_len);\n\t\t\t\t\tupdate_gidmap(config.gidmappath, stage1_pid, config.gidmap, config.gidmap_len);\n\n\t\t\t\t\ts = SYNC_USERMAP_ACK;\n\t\t\t\t\txwrite(syncfd, &s, sizeof(s),\n\t\t\t\t\t       \"failed to sync with stage-1: write(SYNC_USERMAP_ACK)\", stage1_pid, -1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase SYNC_RECVPID_PLS:\n\t\t\t\t\twrite_log(DEBUG, \"stage-1 requested pid to be forwarded\");\n\n\t\t\t\t\t/* Get the stage-2 pid. */\n\t\t\t\t\txread(syncfd, &stage2_pid, sizeof(stage2_pid),\n\t\t\t\t\t      \"failed to sync with stage-1: read(stage2_pid)\", stage1_pid, -1);\n\n\t\t\t\t\t/* Send ACK. */\n\t\t\t\t\ts = SYNC_RECVPID_ACK;\n\t\t\t\t\txwrite(syncfd, &s, sizeof(s),\n\t\t\t\t\t       \"failed to sync with stage-1: write(SYNC_RECVPID_ACK)\",\n\t\t\t\t\t       stage1_pid, stage2_pid);\n\n\t\t\t\t\t/*\n\t\t\t\t\t * Send both the stage-1 and stage-2 pids back to runc.\n\t\t\t\t\t * runc needs the stage-2 to continue process management,\n\t\t\t\t\t * but because stage-1 was spawned with CLONE_PARENT we\n\t\t\t\t\t * cannot reap it within stage-0 and thus we need to ask\n\t\t\t\t\t * runc to reap the zombie for us.\n\t\t\t\t\t */\n\t\t\t\t\twrite_log(DEBUG, \"forward stage-1 (%d) and stage-2 (%d) pids to runc\",\n\t\t\t\t\t\t  stage1_pid, stage2_pid);\n\t\t\t\t\tlen =\n\t\t\t\t\t    dprintf(pipenum, \"{\\\"stage1_pid\\\":%d,\\\"stage2_pid\\\":%d}\\n\", stage1_pid,\n\t\t\t\t\t\t    stage2_pid);\n\t\t\t\t\tif (len < 0)\n\t\t\t\t\t\tiobail(len, len,\n\t\t\t\t\t\t       \"failed to sync with runc: write(pid-JSON)\",\n\t\t\t\t\t\t       stage1_pid, stage2_pid);\n\t\t\t\t\tbreak;\n\t\t\t\tcase SYNC_TIMEOFFSETS_PLS:\n\t\t\t\t\twrite_log(DEBUG, \"stage-1 requested timens offsets to be configured\");\n\t\t\t\t\tupdate_timens_offsets(stage1_pid, config.timensoffset, config.timensoffset_len);\n\t\t\t\t\ts = SYNC_TIMEOFFSETS_ACK;\n\t\t\t\t\txwrite(syncfd, &s, sizeof(s),\n\t\t\t\t\t       \"failed to sync with child: write(SYNC_TIMEOFFSETS_ACK)\",\n\t\t\t\t\t       stage1_pid, -1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase SYNC_CHILD_FINISH:\n\t\t\t\t\twrite_log(DEBUG, \"stage-1 complete\");\n\t\t\t\t\tstage1_complete = true;\n\t\t\t\t\tstage1_pid = -1;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsane_kill(stage1_pid, SIGKILL);\n\t\t\t\t\tsane_kill(stage2_pid, SIGKILL);\n\t\t\t\t\tbailx(\"unexpected sync value: %u\", s);\n\t\t\t\t}\n\t\t\t}\n\t\t\twrite_log(DEBUG, \"<- stage-1 synchronisation loop\");\n\n\t\t\t/* Now sync with grandchild. */\n\t\t\tsyncfd = sync_grandchild_pipe[1];\n\t\t\tif (close(sync_grandchild_pipe[0]) < 0) {\n\t\t\t\tsane_kill(stage2_pid, SIGKILL);\n\t\t\t\tbail(\"failed to close sync_grandchild_pipe[0] fd\");\n\t\t\t}\n\n\t\t\twrite_log(DEBUG, \"-> stage-2 synchronisation loop\");\n\t\t\tstage2_complete = false;\n\t\t\twhile (!stage2_complete) {\n\t\t\t\tenum sync_t s;\n\n\t\t\t\twrite_log(DEBUG, \"signalling stage-2 to run\");\n\t\t\t\ts = SYNC_GRANDCHILD;\n\t\t\t\txwrite(syncfd, &s, sizeof(s),\n\t\t\t\t       \"failed to sync with child: write(SYNC_GRANDCHILD)\", -1, stage2_pid);\n\n\t\t\t\txread(syncfd, &s, sizeof(s), \"failed to sync with child: next state\", -1, stage2_pid);\n\n\t\t\t\tswitch (s) {\n\t\t\t\tcase SYNC_CHILD_FINISH:\n\t\t\t\t\twrite_log(DEBUG, \"stage-2 complete\");\n\t\t\t\t\tstage2_complete = true;\n\t\t\t\t\tstage2_pid = -1;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsane_kill(stage2_pid, SIGKILL);\n\t\t\t\t\tbailx(\"unexpected sync value: %u\", s);\n\t\t\t\t}\n\t\t\t}\n\t\t\twrite_log(DEBUG, \"<- stage-2 synchronisation loop\");\n\t\t\twrite_log(DEBUG, \"<~ nsexec stage-0\");\n\t\t\texit(0);\n\t\t}\n\t\tbreak;\n\n\t\t/*\n\t\t * Stage 1: We're in the first child process. Our job is to join any\n\t\t *          provided namespaces in the netlink payload and unshare all of\n\t\t *          the requested namespaces. If we've been asked to CLONE_NEWUSER,\n\t\t *          we will ask our parent (stage 0) to set up our user mappings\n\t\t *          for us. Then, we create a new child (stage 2: STAGE_INIT) for\n\t\t *          PID namespace. We then send the child's PID to our parent\n\t\t *          (stage 0).\n\t\t */\n\tcase STAGE_CHILD:{\n\t\t\tpid_t stage2_pid = -1;\n\t\t\tenum sync_t s;\n\n\t\t\t/* For debugging. */\n\t\t\tcurrent_stage = STAGE_CHILD;\n\n\t\t\t/* We're in a child and thus need to tell the parent if we die. */\n\t\t\tsyncfd = sync_child_pipe[0];\n\t\t\tif (close(sync_child_pipe[1]) < 0)\n\t\t\t\tbail(\"failed to close sync_child_pipe[1] fd\");\n\n\t\t\t/* For debugging. */\n\t\t\tprctl(PR_SET_NAME, (unsigned long)\"runc:[1:CHILD]\", 0, 0, 0);\n\t\t\twrite_log(DEBUG, \"~> nsexec stage-1\");\n\n\t\t\t/*\n\t\t\t * We need to setns first. We cannot do this earlier (in stage 0)\n\t\t\t * because of the fact that we forked to get here (the PID of\n\t\t\t * [stage 2: STAGE_INIT]) would be meaningless). We could send it\n\t\t\t * using cmsg(3) but that's just annoying.\n\t\t\t */\n\t\t\tif (config.namespaces)\n\t\t\t\tjoin_namespaces(config.namespaces);\n\n\t\t\t/*\n\t\t\t * Deal with user namespaces first. They are quite special, as they\n\t\t\t * affect our ability to unshare other namespaces and are used as\n\t\t\t * context for privilege checks.\n\t\t\t *\n\t\t\t * We don't unshare all namespaces in one go. The reason for this\n\t\t\t * is that, while the kernel documentation may claim otherwise,\n\t\t\t * there are certain cases where unsharing all namespaces at once\n\t\t\t * will result in namespace objects being owned incorrectly.\n\t\t\t * Ideally we should just fix these kernel bugs, but it's better to\n\t\t\t * be safe than sorry, and fix them separately.\n\t\t\t *\n\t\t\t * A specific case of this is that the SELinux label of the\n\t\t\t * internal kern-mount that mqueue uses will be incorrect if the\n\t\t\t * UTS namespace is cloned before the USER namespace is mapped.\n\t\t\t * I've also heard of similar problems with the network namespace\n\t\t\t * in some scenarios. This also mirrors how LXC deals with this\n\t\t\t * problem.\n\t\t\t */\n\t\t\tif (config.cloneflags & CLONE_NEWUSER) {\n\t\t\t\ttry_unshare(CLONE_NEWUSER, \"user namespace\");\n\t\t\t\tconfig.cloneflags &= ~CLONE_NEWUSER;\n\n\t\t\t\t/*\n\t\t\t\t * We need to set ourselves as dumpable temporarily so that the\n\t\t\t\t * parent process can write to our procfs files.\n\t\t\t\t */\n\t\t\t\tif (config.namespaces) {\n\t\t\t\t\twrite_log(DEBUG, \"temporarily set process as dumpable\");\n\t\t\t\t\tif (prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) < 0)\n\t\t\t\t\t\tbail(\"failed to temporarily set process as dumpable\");\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * We don't have the privileges to do any mapping here (see the\n\t\t\t\t * clone_parent rant). So signal stage-0 to do the mapping for\n\t\t\t\t * us.\n\t\t\t\t */\n\t\t\t\twrite_log(DEBUG, \"request stage-0 to map user namespace\");\n\t\t\t\ts = SYNC_USERMAP_PLS;\n\t\t\t\txwrite(syncfd, &s, sizeof(s),\n\t\t\t\t       \"failed to sync with parent: write(SYNC_USERMAP_PLS)\", -1, -1);\n\n\t\t\t\t/* ... wait for mapping ... */\n\t\t\t\twrite_log(DEBUG, \"waiting stage-0 to complete the mapping of user namespace\");\n\t\t\t\txread(syncfd, &s, sizeof(s),\n\t\t\t\t      \"failed to sync with parent: read(SYNC_USERMAP_ACK)\", -1, -1);\n\t\t\t\tif (s != SYNC_USERMAP_ACK)\n\t\t\t\t\tbailx(\"failed to sync with parent: SYNC_USERMAP_ACK: got %u\", s);\n\n\t\t\t\t/* Revert temporary re-dumpable setting. */\n\t\t\t\tif (config.namespaces) {\n\t\t\t\t\twrite_log(DEBUG, \"re-set process as non-dumpable\");\n\t\t\t\t\tif (prctl(PR_SET_DUMPABLE, 0, 0, 0, 0) < 0)\n\t\t\t\t\t\tbail(\"failed to re-set process as non-dumpable\");\n\t\t\t\t}\n\n\t\t\t\t/* Become root in the namespace proper. */\n\t\t\t\tif (setresuid(0, 0, 0) < 0)\n\t\t\t\t\tbail(\"failed to become root in user namespace\");\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Unshare all of the namespaces. Now, it should be noted that this\n\t\t\t * ordering might break in the future (especially with rootless\n\t\t\t * containers). But for now, it's not possible to split this into\n\t\t\t * CLONE_NEWUSER + [the rest] because of some RHEL SELinux issues.\n\t\t\t *\n\t\t\t * Note that we don't merge this with clone() because there were\n\t\t\t * some old kernel versions where clone(CLONE_PARENT | CLONE_NEWPID)\n\t\t\t * was broken, so we'll just do it the long way anyway.\n\t\t\t */\n\t\t\ttry_unshare(config.cloneflags, \"remaining namespaces\");\n\n\t\t\tif (config.timensoffset) {\n\t\t\t\twrite_log(DEBUG, \"request stage-0 to write timens offsets\");\n\n\t\t\t\ts = SYNC_TIMEOFFSETS_PLS;\n\t\t\t\txwrite(syncfd, &s, sizeof(s),\n\t\t\t\t       \"failed to sync with parent: write(SYNC_TIMEOFFSETS_PLS)\", -1, -1);\n\n\t\t\t\txread(syncfd, &s, sizeof(s),\n\t\t\t\t      \"failed to sync with parent: read(SYNC_TIMEOFFSETS_ACK)\", -1, -1);\n\t\t\t\tif (s != SYNC_TIMEOFFSETS_ACK)\n\t\t\t\t\tbailx(\"failed to sync with parent: SYNC_TIMEOFFSETS_ACK: got %u\", s);\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * TODO: What about non-namespace clone flags that we're dropping here?\n\t\t\t *\n\t\t\t * We fork again because of PID namespace, setns(2) or unshare(2) don't\n\t\t\t * change the PID namespace of the calling process, because doing so\n\t\t\t * would change the caller's idea of its own PID (as reported by getpid()),\n\t\t\t * which would break many applications and libraries, so we must fork\n\t\t\t * to actually enter the new PID namespace.\n\t\t\t */\n\t\t\twrite_log(DEBUG, \"spawn stage-2\");\n\t\t\tstage2_pid = clone_parent(&env, STAGE_INIT);\n\t\t\tif (stage2_pid < 0)\n\t\t\t\tbail(\"unable to spawn stage-2\");\n\n\t\t\t/* Send the child to our parent, which knows what it's doing. */\n\t\t\twrite_log(DEBUG, \"request stage-0 to forward stage-2 pid (%d)\", stage2_pid);\n\t\t\ts = SYNC_RECVPID_PLS;\n\t\t\txwrite(syncfd, &s, sizeof(s),\n\t\t\t       \"failed to sync with parent: write(SYNC_RECVPID_PLS)\", -1, stage2_pid);\n\t\t\txwrite(syncfd, &stage2_pid, sizeof(stage2_pid),\n\t\t\t       \"failed to sync with parent: write(stage2_pid)\", -1, stage2_pid);\n\n\t\t\t/* ... wait for parent to get the pid ... */\n\t\t\txread(syncfd, &s, sizeof(s),\n\t\t\t      \"failed to sync with parent: read(SYNC_RECVPID_ACK)\", -1, stage2_pid);\n\t\t\tif (s != SYNC_RECVPID_ACK) {\n\t\t\t\tsane_kill(stage2_pid, SIGKILL);\n\t\t\t\tbailx(\"failed to sync with parent: SYNC_RECVPID_ACK: got %u\", s);\n\t\t\t}\n\n\t\t\twrite_log(DEBUG, \"signal completion to stage-0\");\n\t\t\ts = SYNC_CHILD_FINISH;\n\t\t\txwrite(syncfd, &s, sizeof(s),\n\t\t\t       \"failed to sync with parent: write(SYNC_CHILD_FINISH)\", -1, stage2_pid);\n\n\t\t\t/* Our work is done. [Stage 2: STAGE_INIT] is doing the rest of the work. */\n\t\t\twrite_log(DEBUG, \"<~ nsexec stage-1\");\n\t\t\texit(0);\n\t\t}\n\t\tbreak;\n\n\t\t/*\n\t\t * Stage 2: We're the final child process, and the only process that will\n\t\t *          actually return to the Go runtime. Our job is to just do the\n\t\t *          final cleanup steps and then return to the Go runtime to allow\n\t\t *          init_linux.go to run.\n\t\t */\n\tcase STAGE_INIT:{\n\t\t\t/*\n\t\t\t * We're inside the child now, having jumped from the\n\t\t\t * start_child() code after forking in the parent.\n\t\t\t */\n\t\t\tenum sync_t s;\n\n\t\t\t/* For debugging. */\n\t\t\tcurrent_stage = STAGE_INIT;\n\n\t\t\t/* We're in a child and thus need to tell the parent if we die. */\n\t\t\tsyncfd = sync_grandchild_pipe[0];\n\t\t\tif (close(sync_grandchild_pipe[1]) < 0)\n\t\t\t\tbail(\"failed to close sync_grandchild_pipe[1] fd\");\n\n\t\t\tif (close(sync_child_pipe[0]) < 0)\n\t\t\t\tbail(\"failed to close sync_child_pipe[0] fd\");\n\n\t\t\t/* For debugging. */\n\t\t\tprctl(PR_SET_NAME, (unsigned long)\"runc:[2:INIT]\", 0, 0, 0);\n\t\t\twrite_log(DEBUG, \"~> nsexec stage-2\");\n\n\t\t\txread(syncfd, &s, sizeof(s), \"failed to sync with parent: read(SYNC_GRANDCHILD)\", -1, -1);\n\t\t\tif (s != SYNC_GRANDCHILD)\n\t\t\t\tbailx(\"failed to sync with parent: SYNC_GRANDCHILD: got %u\", s);\n\n\t\t\tif (setsid() < 0)\n\t\t\t\tbail(\"setsid failed\");\n\n\t\t\tif (setuid(0) < 0)\n\t\t\t\tbail(\"setuid failed\");\n\n\t\t\tif (setgid(0) < 0)\n\t\t\t\tbail(\"setgid failed\");\n\n\t\t\tif (!config.is_rootless_euid && config.is_setgroup) {\n\t\t\t\tif (setgroups(0, NULL) < 0)\n\t\t\t\t\tbail(\"setgroups failed\");\n\t\t\t}\n\n\t\t\twrite_log(DEBUG, \"signal completion to stage-0\");\n\t\t\ts = SYNC_CHILD_FINISH;\n\t\t\txwrite(syncfd, &s, sizeof(s), \"failed to sync with parent: write(SYNC_CHILD_FINISH)\", -1, -1);\n\n\t\t\t/* Close sync pipes. */\n\t\t\tif (close(sync_grandchild_pipe[0]) < 0)\n\t\t\t\tbail(\"failed to close sync_grandchild_pipe[0] fd\");\n\n\t\t\t/* Free netlink data. */\n\t\t\tnl_free(&config);\n\n\t\t\t/* Finish executing, let the Go runtime take over. */\n\t\t\twrite_log(DEBUG, \"<= nsexec container setup\");\n\t\t\twrite_log(DEBUG, \"booting up go runtime ...\");\n\t\t\treturn;\n\t\t}\n\t\tbreak;\n\tdefault:\n\t\tbailx(\"unexpected jump value\");\n\t}\n\n\t/* Should never be reached. */\n\tbailx(\"should never be reached\");\n}\n"
  },
  {
    "path": "libcontainer/nsenter/test/escape.go",
    "content": "// Package escapetest is part of the escape_json_string unit test. It is in a\n// separate package so cgo can be used together with go test. Do not use this\n// package.\npackage escapetest\n\n// #include <stdlib.h>\n// extern char *escape_json_string(char *str);\n// #cgo CFLAGS: -DESCAPE_TEST=1\nimport \"C\"\n\nimport (\n\t\"testing\"\n\t\"unsafe\"\n)\n\nfunc testEscapeJSONString(t *testing.T, input, want string) {\n\tin := C.CString(input)\n\tout := C.escape_json_string(in)\n\tgot := C.GoString(out)\n\tC.free(unsafe.Pointer(out))\n\tt.Logf(\"input: %q, output: %q\", input, got)\n\tif got != want {\n\t\tt.Errorf(\"Failed on input: %q, want %q, got %q\", input, want, got)\n\t}\n}\n\nfunc testEscapeJSON(t *testing.T) {\n\ttestCases := []struct {\n\t\tinput, output string\n\t}{\n\t\t{\"\", \"\"},\n\t\t{\"abcdef\", \"abcdef\"},\n\t\t{`\\\\\\\\\\\\`, `\\\\\\\\\\\\\\\\\\\\\\\\`},\n\t\t{`with\"quote`, `with\\\"quote`},\n\t\t{\"\\n\\r\\b\\t\\f\\\\\", `\\n\\r\\b\\t\\f\\\\`},\n\t\t{\"\\007\", \"\\\\u0007\"},\n\t\t{\"\\017 \\020 \\037\", \"\\\\u000f \\\\u0010 \\\\u001f\"},\n\t\t{\"\\033\", \"\\\\u001b\"},\n\t\t{`<->`, `<->`},\n\t\t{\"\\176\\177\\200\", \"~\\\\u007f\\200\"},\n\t\t{\"\\000\", \"\"},\n\t\t{\"a\\x7fxc\", \"a\\\\u007fxc\"},\n\t\t{\"a\\033xc\", \"a\\\\u001bxc\"},\n\t\t{\"a\\nxc\", \"a\\\\nxc\"},\n\t\t{\"a\\\\xc\", \"a\\\\\\\\xc\"},\n\t\t{\"Barney B\\303\\244r\", \"Barney B\\303\\244r\"},\n\t}\n\n\tfor _, tc := range testCases {\n\t\ttestEscapeJSONString(t, tc.input, tc.output)\n\t}\n}\n"
  },
  {
    "path": "libcontainer/nsenter/test/escape_test.go",
    "content": "package escapetest\n\nimport \"testing\"\n\n// The actual test function is in escape.go\n// so that it can use cgo (import \"C\").\n// This wrapper is here for gotest to find.\n\nfunc TestEscapeJSON(t *testing.T) {\n\ttestEscapeJSON(t)\n}\n"
  },
  {
    "path": "libcontainer/process.go",
    "content": "package libcontainer\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"math\"\n\t\"os\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n)\n\nvar errInvalidProcess = errors.New(\"invalid process\")\n\ntype processOperations interface {\n\twait() (*os.ProcessState, error)\n\tsignal(sig os.Signal) error\n\tpid() int\n}\n\n// Process defines the configuration and IO for a process inside a container.\n//\n// Note that some Process properties are also present in container configuration\n// ([configs.Config]). In all such cases, Process properties take precedence\n// over container configuration ones.\ntype Process struct {\n\t// The command to be run followed by any arguments.\n\tArgs []string\n\n\t// Env specifies the environment variables for the process.\n\tEnv []string\n\n\t// UID and GID of the executing process running inside the container\n\t// local to the container's user and group configuration.\n\tUID, GID int\n\n\t// AdditionalGroups specifies the gids that should be added to supplementary groups\n\t// in addition to those that the user belongs to.\n\tAdditionalGroups []int\n\n\t// Cwd will change the process's current working directory inside the container's rootfs.\n\tCwd string\n\n\t// Stdin is a reader which provides the standard input stream.\n\tStdin io.Reader\n\n\t// Stdout is a writer which receives the standard output stream.\n\tStdout io.Writer\n\n\t// Stderr is a writer which receives the standard error stream.\n\tStderr io.Writer\n\n\t// ExtraFiles specifies additional open files to be inherited by the process.\n\tExtraFiles []*os.File\n\n\t// Open handles to cloned binaries -- see exeseal.CloneSelfExe for more details.\n\tclonedExes []*os.File\n\n\t// Initial size for the console.\n\tConsoleWidth  uint16\n\tConsoleHeight uint16\n\n\t// Capabilities specify the capabilities to keep when executing the process.\n\t// All capabilities not specified will be dropped from the processes capability mask.\n\t//\n\t// If not nil, takes precedence over container's [configs.Config.Capabilities].\n\tCapabilities *configs.Capabilities\n\n\t// AppArmorProfile specifies the profile to apply to the process and is\n\t// changed at the time the process is executed.\n\t//\n\t// If not empty, takes precedence over container's [configs.Config.AppArmorProfile].\n\tAppArmorProfile string\n\n\t// Label specifies the label to apply to the process. It is commonly used by selinux.\n\t//\n\t// If not empty, takes precedence over container's [configs.Config.ProcessLabel].\n\tLabel string\n\n\t// NoNewPrivileges controls whether processes can gain additional privileges.\n\t//\n\t// If not nil, takes precedence over container's [configs.Config.NoNewPrivileges].\n\tNoNewPrivileges *bool\n\n\t// Rlimits specifies the resource limits, such as max open files, to set for the process.\n\t// If unset, the process will inherit rlimits from the parent process.\n\t//\n\t// If not empty, takes precedence over container's [configs.Config.Rlimit].\n\tRlimits []configs.Rlimit\n\n\t// ConsoleSocket provides the masterfd console.\n\tConsoleSocket *os.File\n\n\t// PidfdSocket provides process file descriptor of it own.\n\tPidfdSocket *os.File\n\n\t// Init specifies whether the process is the first process in the container.\n\tInit bool\n\n\tops processOperations\n\n\t// LogLevel is a string containing a numeric representation of the current\n\t// log level (i.e. \"4\", but never \"info\"). It is passed on to runc init as\n\t// _LIBCONTAINER_LOGLEVEL environment variable.\n\tLogLevel string\n\n\t// SubCgroupPaths specifies sub-cgroups to run the process in.\n\t// Map keys are controller names, map values are paths (relative to\n\t// container's top-level cgroup).\n\t//\n\t// If empty, the default top-level container's cgroup is used.\n\t//\n\t// For cgroup v2, the only key allowed is \"\".\n\tSubCgroupPaths map[string]string\n\n\t// Scheduler represents the scheduling attributes for a process.\n\t//\n\t// If not empty, takes precedence over container's [configs.Config.Scheduler].\n\tScheduler *configs.Scheduler\n\n\t// IOPriority is a process I/O priority.\n\t//\n\t// If not empty, takes precedence over container's [configs.Config.IOPriority].\n\tIOPriority *configs.IOPriority\n\n\tCPUAffinity *configs.CPUAffinity\n}\n\n// Wait waits for the process to exit.\n// Wait releases any resources associated with the Process\nfunc (p *Process) Wait() (*os.ProcessState, error) {\n\tif p.ops == nil {\n\t\treturn nil, errInvalidProcess\n\t}\n\treturn p.ops.wait()\n}\n\n// Pid returns the process ID\nfunc (p *Process) Pid() (int, error) {\n\t// math.MinInt32 is returned here, because it's invalid value\n\t// for the kill() system call.\n\tif p.ops == nil {\n\t\treturn math.MinInt32, errInvalidProcess\n\t}\n\treturn p.ops.pid(), nil\n}\n\n// Signal sends a signal to the Process.\nfunc (p *Process) Signal(sig os.Signal) error {\n\tif p.ops == nil {\n\t\treturn errInvalidProcess\n\t}\n\treturn p.ops.signal(sig)\n}\n\n// closeClonedExes cleans up any existing cloned binaries associated with the\n// Process.\nfunc (p *Process) closeClonedExes() {\n\tfor _, exe := range p.clonedExes {\n\t\t_ = exe.Close()\n\t}\n\tp.clonedExes = nil\n}\n\n// IO holds the process's STDIO\ntype IO struct {\n\tStdin  io.WriteCloser\n\tStdout io.ReadCloser\n\tStderr io.ReadCloser\n}\n"
  },
  {
    "path": "libcontainer/process_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"maps\"\n\t\"net\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fs2\"\n\t\"github.com/opencontainers/runc/internal/linux\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/intelrdt\"\n\t\"github.com/opencontainers/runc/libcontainer/internal/userns\"\n\t\"github.com/opencontainers/runc/libcontainer/logs\"\n\t\"github.com/opencontainers/runc/libcontainer/system\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n)\n\ntype parentProcess interface {\n\t// pid returns the pid for the running process.\n\tpid() int\n\n\t// start starts the process execution.\n\tstart() error\n\n\t// send a SIGKILL to the process and wait for the exit.\n\tterminate() error\n\n\t// wait waits on the process returning the process state.\n\twait() (*os.ProcessState, error)\n\n\t// startTime returns the process start time.\n\tstartTime() (uint64, error)\n\tsignal(os.Signal) error\n\texternalDescriptors() []string\n\tsetExternalDescriptors(fds []string)\n\tforwardChildLogs() chan error\n}\n\ntype processComm struct {\n\t// Used to send initial configuration to \"runc init\" and for \"runc init\" to\n\t// indicate that it is ready.\n\tinitSockParent *os.File\n\tinitSockChild  *os.File\n\t// Used for control messages between parent and \"runc init\".\n\tsyncSockParent *syncSocket\n\tsyncSockChild  *syncSocket\n\t// Used for log forwarding from \"runc init\" to the parent.\n\tlogPipeParent *os.File\n\tlogPipeChild  *os.File\n}\n\nfunc newProcessComm() (_ *processComm, retErr error) {\n\tvar (\n\t\tcomm processComm\n\t\terr  error\n\t)\n\tcomm.initSockParent, comm.initSockChild, err = utils.NewSockPair(\"init\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to create init pipe: %w\", err)\n\t}\n\tdefer func() {\n\t\tif retErr != nil {\n\t\t\tcomm.initSockParent.Close()\n\t\t\tcomm.initSockChild.Close()\n\t\t}\n\t}()\n\n\tcomm.syncSockParent, comm.syncSockChild, err = newSyncSockpair(\"sync\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to create sync pipe: %w\", err)\n\t}\n\tdefer func() {\n\t\tif retErr != nil {\n\t\t\tcomm.syncSockParent.Close()\n\t\t\tcomm.syncSockChild.Close()\n\t\t}\n\t}()\n\n\tcomm.logPipeParent, comm.logPipeChild, err = os.Pipe()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to create log pipe: %w\", err)\n\t}\n\treturn &comm, nil\n}\n\nfunc (c *processComm) closeChild() {\n\t_ = c.initSockChild.Close()\n\t_ = c.syncSockChild.Close()\n\t_ = c.logPipeChild.Close()\n}\n\nfunc (c *processComm) closeParent() {\n\t_ = c.initSockParent.Close()\n\t_ = c.syncSockParent.Close()\n\t// c.logPipeParent is kept alive for ForwardLogs\n}\n\ntype containerProcess struct {\n\tcmd           *exec.Cmd\n\tcomm          *processComm\n\tconfig        *initConfig\n\tmanager       cgroups.Manager\n\tfds           []string\n\tprocess       *Process\n\tbootstrapData io.Reader\n\tcontainer     *Container\n}\n\nfunc (p *containerProcess) pid() int {\n\treturn p.cmd.Process.Pid\n}\n\nfunc (p *containerProcess) startTime() (uint64, error) {\n\tstat, err := system.Stat(p.pid())\n\treturn stat.StartTime, err\n}\n\nfunc (p *containerProcess) signal(sig os.Signal) error {\n\treturn p.cmd.Process.Signal(sig)\n}\n\nfunc (p *containerProcess) externalDescriptors() []string {\n\treturn p.fds\n}\n\nfunc (p *containerProcess) setExternalDescriptors(newFds []string) {\n\tp.fds = newFds\n}\n\nfunc (p *containerProcess) forwardChildLogs() chan error {\n\treturn logs.ForwardLogs(p.comm.logPipeParent)\n}\n\n// terminate sends a SIGKILL to the forked process for the setns routine then waits to\n// avoid the process becoming a zombie.\nfunc (p *containerProcess) terminate() error {\n\tif p.cmd.Process == nil {\n\t\treturn nil\n\t}\n\terr := p.cmd.Process.Kill()\n\tif _, werr := p.wait(); err == nil {\n\t\terr = werr\n\t}\n\treturn err\n}\n\nfunc (p *containerProcess) wait() (*os.ProcessState, error) { //nolint:unparam\n\terr := p.cmd.Wait()\n\n\t// Return actual ProcessState even on Wait error\n\treturn p.cmd.ProcessState, err\n}\n\ntype setnsProcess struct {\n\tcontainerProcess\n\trootlessCgroups bool\n\tintelRdtPath    string\n\tinitProcessPid  int\n}\n\n// tryResetCPUAffinity tries to reset the CPU affinity of the process\n// identified by pid to include all possible CPUs (notwithstanding cgroup\n// cpuset restrictions, isolated CPUs and CPU online status).\nfunc tryResetCPUAffinity(pid int) {\n\t// When resetting the CPU affinity, we want to allow all\n\t// possible CPUs in the system, including those not in\n\t// cpuset.cpus, online or even present (hot-plugged) at call\n\t// time. Using a cpumask any tighter this that may disallow\n\t// using those CPUs if they are added to cpuset.cpus later.\n\t//\n\t// Note that sched_setaffinity(2) will implicitly:\n\t//\n\t//  * Clamp the cpumask so that it matches the number of CPUs\n\t//    supported by the kernel.\n\t//\n\t//  * Mask out any CPUs that are not a member of the target task's\n\t//    configured cgroup cpuset. This is for task's effective affinity,\n\t//    without forgetting masked-out CPUs should the cgroup cpuset\n\t//    change later.\n\t//\n\t// Therefore, preparing the cpumask, we can avoid reading\n\t// /sys/devices/system/cpu/possible and kernel_max.\n\t// Instead, we use a huge buffer similarly to go 1.25 runtime in\n\t// getCPUCount().\n\tconst maxCPUs = 64 * 1024\n\tbuf := bytes.Repeat([]byte{0xff}, maxCPUs/8)\n\tif err := linux.SchedSetaffinity(pid, buf); err != nil {\n\t\tlogrus.WithError(err).Warnf(\"resetting the CPU affinity of pid %d failed -- the container process may inherit runc's CPU affinity\", pid)\n\t\treturn\n\t}\n}\n\n// Starts setns process with specified initial CPU affinity.\nfunc (p *setnsProcess) startWithCPUAffinity() error {\n\taff := p.config.CPUAffinity\n\tif aff == nil || aff.Initial == nil {\n\t\treturn p.cmd.Start()\n\t}\n\terrCh := make(chan error)\n\tdefer close(errCh)\n\n\t// Use a goroutine to dedicate an OS thread.\n\tgo func() {\n\t\truntime.LockOSThread()\n\t\t// Command inherits the CPU affinity.\n\t\tif err := unix.SchedSetaffinity(unix.Gettid(), aff.Initial); err != nil {\n\t\t\terrCh <- fmt.Errorf(\"error setting initial CPU affinity: %w\", err)\n\t\t\treturn\n\t\t}\n\n\t\terrCh <- p.cmd.Start()\n\t\t// Deliberately omit runtime.UnlockOSThread here.\n\t\t// https://pkg.go.dev/runtime#LockOSThread says:\n\t\t// \"If the calling goroutine exits without unlocking the\n\t\t// thread, the thread will be terminated\".\n\t}()\n\n\treturn <-errCh\n}\n\nfunc (p *setnsProcess) setFinalCPUAffinity() error {\n\taff := p.config.CPUAffinity\n\t// If there was no affinity configured at all, we want to reset\n\t// the affinity to make sure we don't inherit an unexpected one.\n\tif aff == nil || aff.Final == nil && aff.Initial == nil {\n\t\ttryResetCPUAffinity(p.pid())\n\t\treturn nil\n\t}\n\tif aff.Final == nil {\n\t\treturn nil\n\t}\n\tif err := unix.SchedSetaffinity(p.pid(), aff.Final); err != nil {\n\t\treturn fmt.Errorf(\"error setting final CPU affinity: %w\", err)\n\t}\n\treturn nil\n}\n\nfunc (p *setnsProcess) addIntoCgroupV1() error {\n\tif sub, ok := p.process.SubCgroupPaths[\"\"]; ok || len(p.process.SubCgroupPaths) == 0 {\n\t\t// Either same sub-cgroup for all paths, or no sub-cgroup.\n\t\terr := p.manager.AddPid(sub, p.pid())\n\t\tif err != nil && !p.rootlessCgroups {\n\t\t\treturn fmt.Errorf(\"error adding pid %d to cgroups: %w\", p.pid(), err)\n\t\t}\n\t\treturn nil\n\t}\n\n\t// Per-controller sub-cgroup paths. Not supported by AddPid (or systemd),\n\t// so we have to calculate and check all sub-cgroup paths, and write\n\t// directly to cgroupfs.\n\tpaths := maps.Clone(p.manager.GetPaths())\n\tfor ctrl, sub := range p.process.SubCgroupPaths {\n\t\tbase, ok := paths[ctrl]\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"unknown controller %s in SubCgroupPaths\", ctrl)\n\t\t}\n\t\tcgPath := path.Join(base, sub)\n\t\tif !strings.HasPrefix(cgPath, base) {\n\t\t\treturn fmt.Errorf(\"bad sub cgroup path: %s\", sub)\n\t\t}\n\t\tpaths[ctrl] = cgPath\n\t}\n\n\tfor _, path := range paths {\n\t\tif err := cgroups.WriteCgroupProc(path, p.pid()); err != nil && !p.rootlessCgroups {\n\t\t\treturn fmt.Errorf(\"error adding pid %d to cgroups: %w\", p.pid(), err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// initProcessCgroupPath returns container init's cgroup path,\n// as read from /proc/PID/cgroup. Only works for cgroup v2.\n// Returns empty string if the path can not be obtained.\n//\n// This is used by runc exec in these cases:\n//\n//  1. On cgroup v2 + nesting + domain controllers, adding to initial cgroup\n//     may fail with EBUSY (https://github.com/opencontainers/runc/issues/2356);\n//\n//  2. A container init process with no cgroupns and /sys/fs/cgroup rw access\n//     may move itself to any other cgroup, and the original cgroup will disappear.\nfunc (p *setnsProcess) initProcessCgroupPath() string {\n\tif p.initProcessPid == 0 || !cgroups.IsCgroup2UnifiedMode() {\n\t\treturn \"\"\n\t}\n\n\tcg, err := cgroups.ParseCgroupFile(\"/proc/\" + strconv.Itoa(p.initProcessPid) + \"/cgroup\")\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\tcgroup, ok := cg[\"\"]\n\tif !ok {\n\t\treturn \"\"\n\t}\n\n\treturn fs2.UnifiedMountpoint + cgroup\n}\n\nfunc (p *setnsProcess) addIntoCgroupV2() error {\n\tsub := p.process.SubCgroupPaths[\"\"]\n\terr := p.manager.AddPid(sub, p.pid())\n\tif err == nil {\n\t\treturn nil\n\t}\n\n\t// Failed to join the configured cgroup. Fall back to container init's cgroup\n\t// unless sub-cgroup is explicitly requested.\n\tvar path string\n\tif sub != \"\" {\n\t\tgoto fail\n\t}\n\tpath = p.initProcessCgroupPath()\n\tif path == \"\" {\n\t\tgoto fail\n\t}\n\tlogrus.Debugf(\"adding pid %d to configured cgroup failed (%v), will join container init cgroup %q\", p.pid(), err, path)\n\t// NOTE: path is not guaranteed to exist because we didn't pause the container.\n\terr = cgroups.WriteCgroupProc(path, p.pid())\n\tif err != nil {\n\t\tgoto fail\n\t}\n\treturn nil\n\nfail:\n\tif p.rootlessCgroups {\n\t\t// Ignore cgroup join errors when rootless.\n\t\treturn nil\n\t}\n\n\treturn fmt.Errorf(\"error adding pid %d to cgroups: %w\", p.pid(), err)\n}\n\nfunc (p *setnsProcess) addIntoCgroup() error {\n\tif p.cmd.SysProcAttr.UseCgroupFD {\n\t\t// We've used cgroupfd successfully, so the process is\n\t\t// already in the proper cgroup, nothing to do here.\n\t\treturn nil\n\t}\n\tif cgroups.IsCgroup2UnifiedMode() {\n\t\treturn p.addIntoCgroupV2()\n\t}\n\treturn p.addIntoCgroupV1()\n}\n\n// prepareCgroupFD sets up p.cmd to use clone3 with CLONE_INTO_CGROUP\n// to join cgroup early, in p.cmd.Start. Returns an *os.File which\n// must be closed by the caller after p.Cmd.Start return.\nfunc (p *setnsProcess) prepareCgroupFD() (*os.File, error) {\n\tconst openFlags = unix.O_PATH | unix.O_DIRECTORY | unix.O_CLOEXEC\n\n\tif !cgroups.IsCgroup2UnifiedMode() {\n\t\treturn nil, nil\n\t}\n\n\tbase := p.manager.Path(\"\")\n\tif base == \"\" { // No cgroup to join.\n\t\treturn nil, nil\n\t}\n\tsub := \"\"\n\tif p.process.SubCgroupPaths != nil {\n\t\tsub = p.process.SubCgroupPaths[\"\"]\n\t}\n\tcgroup := path.Join(base, sub)\n\tif !strings.HasPrefix(cgroup, base) {\n\t\treturn nil, fmt.Errorf(\"bad sub cgroup path: %s\", sub)\n\t}\n\n\tfd, err := cgroups.OpenFile(base, sub, openFlags)\n\tif err == nil {\n\t\tgoto success\n\t}\n\t// Failed to open the configured cgroup. Fall back to container init's cgroup\n\t// unless sub-cgroup is explicitly requested. The fallback logic should be\n\t// the same as in addIntoCgroupV2.\n\tif sub != \"\" {\n\t\tgoto fail\n\t}\n\tcgroup = p.initProcessCgroupPath()\n\tif cgroup == \"\" {\n\t\tgoto fail\n\t}\n\tlogrus.Debugf(\"failed to open configured cgroup (%v), will open container init cgroup %q\", err, cgroup)\n\t// NOTE: path is not guaranteed to exist because we didn't pause the container.\n\tfd, err = cgroups.OpenFile(cgroup, \"\", openFlags)\n\tif err != nil {\n\t\tgoto fail\n\t}\n\nsuccess:\n\tlogrus.Debugf(\"using CLONE_INTO_CGROUP %q\", cgroup)\n\tif p.cmd.SysProcAttr == nil {\n\t\tp.cmd.SysProcAttr = &syscall.SysProcAttr{}\n\t}\n\tp.cmd.SysProcAttr.UseCgroupFD = true\n\tp.cmd.SysProcAttr.CgroupFD = int(fd.Fd())\n\n\treturn fd, nil\n\nfail:\n\t// Ignore cgroup join error for rootless.\n\tif p.rootlessCgroups {\n\t\treturn nil, nil\n\t}\n\treturn nil, fmt.Errorf(\"can't open cgroup: %w\", err)\n}\n\n// startWithCgroupFD starts a process via clone3 with CLONE_INTO_CGROUP,\n// with a fallback if it fails (e.g. not available).\nfunc (p *setnsProcess) startWithCgroupFD() error {\n\t// Close the child side of the pipes.\n\tdefer p.comm.closeChild()\n\n\tfd, err := p.prepareCgroupFD()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif fd != nil {\n\t\tdefer fd.Close()\n\t}\n\n\tcmdCopy := cloneCmd(p.cmd)\n\terr = p.startWithCPUAffinity()\n\tif err != nil && p.cmd.SysProcAttr.UseCgroupFD {\n\t\tlogrus.Debugf(\"exec with CLONE_INTO_CGROUP failed: %v; retrying without\", err)\n\t\t// SysProcAttr.CgroupFD is never used when UseCgroupFD is unset.\n\t\tcmdCopy.SysProcAttr.UseCgroupFD = false\n\t\t// Must not reuse exec.Cmd.\n\t\tp.cmd = cmdCopy\n\t\terr = p.startWithCPUAffinity()\n\t}\n\n\treturn err\n}\n\nfunc (p *setnsProcess) start() (retErr error) {\n\tdefer p.comm.closeParent()\n\n\t// Get the \"before\" value of oom kill count.\n\toom, _ := p.manager.OOMKillCount()\n\n\tif err := p.startWithCgroupFD(); err != nil {\n\t\treturn fmt.Errorf(\"error starting setns process: %w\", err)\n\t}\n\n\tdefer func() {\n\t\tif retErr != nil {\n\t\t\tif newOom, err := p.manager.OOMKillCount(); err == nil && newOom != oom {\n\t\t\t\t// Someone in this cgroup was killed, this _might_ be us.\n\t\t\t\tretErr = fmt.Errorf(\"%w (possibly OOM-killed)\", retErr)\n\t\t\t}\n\t\t\terr := ignoreTerminateErrors(p.terminate())\n\t\t\tif err != nil {\n\t\t\t\tlogrus.WithError(err).Warn(\"unable to terminate setnsProcess\")\n\t\t\t}\n\t\t}\n\t}()\n\n\tif p.bootstrapData != nil {\n\t\tif _, err := io.Copy(p.comm.initSockParent, p.bootstrapData); err != nil {\n\t\t\treturn fmt.Errorf(\"error copying bootstrap data to pipe: %w\", err)\n\t\t}\n\t}\n\tif err := p.execSetns(); err != nil {\n\t\treturn fmt.Errorf(\"error executing setns process: %w\", err)\n\t}\n\tif err := p.addIntoCgroup(); err != nil {\n\t\treturn err\n\t}\n\t// Set final CPU affinity right after the process is moved into container's cgroup.\n\tif err := p.setFinalCPUAffinity(); err != nil {\n\t\treturn err\n\t}\n\tif p.intelRdtPath != \"\" {\n\t\t// if Intel RDT \"resource control\" filesystem path exists\n\t\t_, err := os.Stat(p.intelRdtPath)\n\t\tif err == nil {\n\t\t\tif err := intelrdt.WriteIntelRdtTasks(p.intelRdtPath, p.pid()); err != nil {\n\t\t\t\treturn fmt.Errorf(\"error adding pid %d to Intel RDT: %w\", p.pid(), err)\n\t\t\t}\n\t\t}\n\t}\n\n\tif err := utils.WriteJSON(p.comm.initSockParent, p.config); err != nil {\n\t\treturn fmt.Errorf(\"error writing config to pipe: %w\", err)\n\t}\n\n\tvar seenProcReady bool\n\tierr := parseSync(p.comm.syncSockParent, func(sync *syncT) error {\n\t\tswitch sync.Type {\n\t\tcase procReady:\n\t\t\tseenProcReady = true\n\t\t\t// Set rlimits, this has to be done here because we lose permissions\n\t\t\t// to raise the limits once we enter a user-namespace\n\t\t\tif err := setupRlimits(p.config.Rlimits, p.pid()); err != nil {\n\t\t\t\treturn fmt.Errorf(\"error setting rlimits for ready process: %w\", err)\n\t\t\t}\n\n\t\t\t// Sync with child.\n\t\t\tif err := writeSync(p.comm.syncSockParent, procRun); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase procHooks:\n\t\t\t// This shouldn't happen.\n\t\t\tpanic(\"unexpected procHooks in setns\")\n\t\tcase procMountPlease:\n\t\t\t// This shouldn't happen.\n\t\t\tpanic(\"unexpected procMountPlease in setns\")\n\t\tcase procSeccomp:\n\t\t\tif p.config.Config.Seccomp.ListenerPath == \"\" {\n\t\t\t\treturn errors.New(\"seccomp listenerPath is not set\")\n\t\t\t}\n\t\t\tif sync.Arg == nil {\n\t\t\t\treturn fmt.Errorf(\"sync %q is missing an argument\", sync.Type)\n\t\t\t}\n\t\t\tvar srcFd int\n\t\t\tif err := json.Unmarshal(*sync.Arg, &srcFd); err != nil {\n\t\t\t\treturn fmt.Errorf(\"sync %q passed invalid fd arg: %w\", sync.Type, err)\n\t\t\t}\n\t\t\tseccompFd, err := pidGetFd(p.pid(), srcFd)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"sync %q get fd %d from child failed: %w\", sync.Type, srcFd, err)\n\t\t\t}\n\t\t\tdefer seccompFd.Close()\n\t\t\t// We have a copy, the child can keep working. We don't need to\n\t\t\t// wait for the seccomp notify listener to get the fd before we\n\t\t\t// permit the child to continue because the child will happily wait\n\t\t\t// for the listener if it hits SCMP_ACT_NOTIFY.\n\t\t\tif err := writeSync(p.comm.syncSockParent, procSeccompDone); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tbundle, annotations := utils.Annotations(p.config.Config.Labels)\n\t\t\tcontainerProcessState := &specs.ContainerProcessState{\n\t\t\t\tVersion:  specs.Version,\n\t\t\t\tFds:      []string{specs.SeccompFdName},\n\t\t\t\tPid:      p.cmd.Process.Pid,\n\t\t\t\tMetadata: p.config.Config.Seccomp.ListenerMetadata,\n\t\t\t\tState: specs.State{\n\t\t\t\t\tVersion:     specs.Version,\n\t\t\t\t\tID:          p.config.ContainerID,\n\t\t\t\t\tStatus:      specs.StateRunning,\n\t\t\t\t\tPid:         p.initProcessPid,\n\t\t\t\t\tBundle:      bundle,\n\t\t\t\t\tAnnotations: annotations,\n\t\t\t\t},\n\t\t\t}\n\t\t\tif err := sendContainerProcessState(p.config.Config.Seccomp.ListenerPath,\n\t\t\t\tcontainerProcessState, seccompFd); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tdefault:\n\t\t\treturn errors.New(\"invalid JSON payload from child\")\n\t\t}\n\t\treturn nil\n\t})\n\n\tif err := p.comm.syncSockParent.Shutdown(unix.SHUT_WR); err != nil && ierr == nil {\n\t\treturn err\n\t}\n\tif !seenProcReady && ierr == nil {\n\t\tierr = errors.New(\"procReady not received\")\n\t}\n\t// Must be done after Shutdown so the child will exit and we can wait for it.\n\tif ierr != nil {\n\t\t_, _ = p.wait()\n\t\treturn ierr\n\t}\n\treturn nil\n}\n\n// execSetns runs the process that executes C code to perform the setns calls\n// because setns support requires the C process to fork off a child and perform the setns\n// before the go runtime boots, we wait on the process to die and receive the child's pid\n// over the provided pipe.\nfunc (p *setnsProcess) execSetns() error {\n\tstatus, err := p.cmd.Process.Wait()\n\tif err != nil {\n\t\t_ = p.cmd.Wait()\n\t\treturn fmt.Errorf(\"error waiting on setns process to finish: %w\", err)\n\t}\n\tif !status.Success() {\n\t\t_ = p.cmd.Wait()\n\t\treturn &exec.ExitError{ProcessState: status}\n\t}\n\tvar pid *pid\n\tif err := json.NewDecoder(p.comm.initSockParent).Decode(&pid); err != nil {\n\t\t_ = p.cmd.Wait()\n\t\treturn fmt.Errorf(\"error reading pid from init pipe: %w\", err)\n\t}\n\n\t// Clean up the zombie parent process\n\t// On Unix systems FindProcess always succeeds.\n\tfirstChildProcess, _ := os.FindProcess(pid.PidFirstChild)\n\n\t// Ignore the error in case the child has already been reaped for any reason\n\t_, _ = firstChildProcess.Wait()\n\n\tprocess, err := os.FindProcess(pid.Pid)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.cmd.Process = process\n\tp.process.ops = p\n\treturn nil\n}\n\ntype initProcess struct {\n\tcontainerProcess\n\tintelRdtManager *intelrdt.Manager\n}\n\n// getChildPid receives the final child's pid over the provided pipe.\nfunc (p *initProcess) getChildPid() (int, error) {\n\tvar pid pid\n\tif err := json.NewDecoder(p.comm.initSockParent).Decode(&pid); err != nil {\n\t\t_ = p.cmd.Wait()\n\t\treturn -1, err\n\t}\n\n\t// Clean up the zombie parent process\n\t// On Unix systems FindProcess always succeeds.\n\tfirstChildProcess, _ := os.FindProcess(pid.PidFirstChild)\n\n\t// Ignore the error in case the child has already been reaped for any reason\n\t_, _ = firstChildProcess.Wait()\n\n\treturn pid.Pid, nil\n}\n\nfunc (p *initProcess) waitForChildExit(childPid int) error {\n\tstatus, err := p.cmd.Process.Wait()\n\tif err != nil {\n\t\t_ = p.cmd.Wait()\n\t\treturn err\n\t}\n\tif !status.Success() {\n\t\t_ = p.cmd.Wait()\n\t\treturn &exec.ExitError{ProcessState: status}\n\t}\n\n\tprocess, err := os.FindProcess(childPid)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.cmd.Process = process\n\tp.process.ops = p\n\treturn nil\n}\n\ntype mountSourceRequestFn func(*configs.Mount) (*mountSource, error)\n\n// goCreateMountSources spawns a goroutine which creates open_tree(2)-style\n// mountfds based on the requested configs.Mount configuration. The returned\n// requestFn and cancelFn are used to interact with the goroutine.\n//\n// The caller of the returned mountSourceRequestFn is responsible for closing\n// the returned file.\nfunc (p *initProcess) goCreateMountSources(ctx context.Context) (mountSourceRequestFn, context.CancelFunc, error) {\n\ttype response struct {\n\t\tsrc *mountSource\n\t\terr error\n\t}\n\n\terrCh := make(chan error, 1)\n\trequestCh := make(chan *configs.Mount)\n\tresponseCh := make(chan response)\n\n\tctx, cancelFn := context.WithTimeout(ctx, 1*time.Minute)\n\tcontext.AfterFunc(ctx, func() { close(requestCh) })\n\n\tgo func() {\n\t\t// We lock this thread because we need to setns(2) here. There is no\n\t\t// UnlockOSThread() here, to ensure that the Go runtime will kill this\n\t\t// thread once this goroutine returns (ensuring no other goroutines run\n\t\t// in this context).\n\t\truntime.LockOSThread()\n\n\t\t// Detach from the shared fs of the rest of the Go process in order to\n\t\t// be able to CLONE_NEWNS.\n\t\tif err := unix.Unshare(unix.CLONE_FS); err != nil {\n\t\t\terr = os.NewSyscallError(\"unshare(CLONE_FS)\", err)\n\t\t\terrCh <- fmt.Errorf(\"mount source thread: %w\", err)\n\t\t\treturn\n\t\t}\n\n\t\t// Attach to the container's mount namespace.\n\t\tnsFd, err := os.Open(fmt.Sprintf(\"/proc/%d/ns/mnt\", p.pid()))\n\t\tif err != nil {\n\t\t\terrCh <- fmt.Errorf(\"mount source thread: open container mntns: %w\", err)\n\t\t\treturn\n\t\t}\n\t\tdefer nsFd.Close()\n\t\tif err := unix.Setns(int(nsFd.Fd()), unix.CLONE_NEWNS); err != nil {\n\t\t\terr = os.NewSyscallError(\"setns\", err)\n\t\t\terrCh <- fmt.Errorf(\"mount source thread: join container mntns: %w\", err)\n\t\t\treturn\n\t\t}\n\n\t\t// No errors during setup!\n\t\tclose(errCh)\n\t\tlogrus.Debugf(\"mount source thread: successfully running in container mntns\")\n\n\t\tnsHandles := new(userns.Handles)\n\t\tdefer nsHandles.Release()\n\tloop:\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase m, ok := <-requestCh:\n\t\t\t\tif !ok {\n\t\t\t\t\tbreak loop\n\t\t\t\t}\n\t\t\t\tsrc, err := mountFd(nsHandles, m)\n\t\t\t\tlogrus.Debugf(\"mount source thread: handling request for %q: %v %v\", m.Source, src, err)\n\t\t\t\tresponseCh <- response{\n\t\t\t\t\tsrc: src,\n\t\t\t\t\terr: err,\n\t\t\t\t}\n\t\t\tcase <-ctx.Done():\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t}\n\t\tlogrus.Debugf(\"mount source thread: closing thread: %v\", ctx.Err())\n\t\tclose(responseCh)\n\t}()\n\n\t// Check for setup errors.\n\terr := <-errCh\n\tif err != nil {\n\t\tcancelFn()\n\t\treturn nil, nil, err\n\t}\n\n\trequestFn := func(m *configs.Mount) (*mountSource, error) {\n\t\tvar err error\n\t\tselect {\n\t\tcase requestCh <- m:\n\t\t\tselect {\n\t\t\tcase resp, ok := <-responseCh:\n\t\t\t\tif ok {\n\t\t\t\t\treturn resp.src, resp.err\n\t\t\t\t}\n\t\t\t\terr = fmt.Errorf(\"response channel closed unexpectedly\")\n\t\t\tcase <-ctx.Done():\n\t\t\t\terr = fmt.Errorf(\"receive mount source context cancelled: %w\", ctx.Err())\n\t\t\t}\n\t\tcase <-ctx.Done():\n\t\t\terr = fmt.Errorf(\"send mount request cancelled: %w\", ctx.Err())\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn requestFn, cancelFn, nil\n}\n\nfunc (p *initProcess) start() (retErr error) {\n\tdefer p.comm.closeParent()\n\terr := p.cmd.Start()\n\tp.process.ops = p\n\t// close the child-side of the pipes (controlled by child)\n\tp.comm.closeChild()\n\tif err != nil {\n\t\tp.process.ops = nil\n\t\treturn fmt.Errorf(\"unable to start init: %w\", err)\n\t}\n\n\tdefer func() {\n\t\tif retErr != nil {\n\t\t\t// Find out if init is killed by the kernel's OOM killer.\n\t\t\t// Get the count before killing init as otherwise cgroup\n\t\t\t// might be removed by systemd.\n\t\t\toom, err := p.manager.OOMKillCount()\n\t\t\tif err != nil {\n\t\t\t\tlogrus.WithError(err).Warn(\"unable to get oom kill count\")\n\t\t\t} else if oom > 0 {\n\t\t\t\t// Does not matter what the particular error was,\n\t\t\t\t// its cause is most probably OOM, so report that.\n\t\t\t\tconst oomError = \"container init was OOM-killed (memory limit too low?)\"\n\n\t\t\t\tif logrus.GetLevel() >= logrus.DebugLevel {\n\t\t\t\t\t// Only show the original error if debug is set,\n\t\t\t\t\t// as it is not generally very useful.\n\t\t\t\t\tretErr = fmt.Errorf(oomError+\": %w\", retErr)\n\t\t\t\t} else {\n\t\t\t\t\tretErr = errors.New(oomError)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Terminate the process to ensure we can remove cgroups.\n\t\t\tif err := ignoreTerminateErrors(p.terminate()); err != nil {\n\t\t\t\tlogrus.WithError(err).Warn(\"unable to terminate initProcess\")\n\t\t\t}\n\n\t\t\t_ = p.manager.Destroy()\n\t\t\tif p.intelRdtManager != nil {\n\t\t\t\t_ = p.intelRdtManager.Destroy()\n\t\t\t}\n\t\t}\n\t}()\n\n\t// Do this before syncing with child so that no children can escape the\n\t// cgroup. We don't need to worry about not doing this and not being root\n\t// because we'd be using the rootless cgroup manager in that case.\n\tif err := p.manager.Apply(p.pid()); err != nil {\n\t\tif errors.Is(err, cgroups.ErrRootless) {\n\t\t\t// ErrRootless is to be ignored except when\n\t\t\t// the container doesn't have private pidns.\n\t\t\tif !p.config.Config.Namespaces.IsPrivate(configs.NEWPID) {\n\t\t\t\t// TODO: make this an error in runc 1.3.\n\t\t\t\tlogrus.Warn(\"Creating a rootless container with no cgroup and no private pid namespace. \" +\n\t\t\t\t\t\"Such configuration is strongly discouraged (as it is impossible to properly kill all container's processes) \" +\n\t\t\t\t\t\"and will result in an error in a future runc version.\")\n\t\t\t}\n\t\t} else {\n\t\t\treturn fmt.Errorf(\"unable to apply cgroup configuration: %w\", err)\n\t\t}\n\t}\n\t// Reset the CPU affinity after cgroups are configured to make sure it\n\t// matches any configured cpuset.\n\ttryResetCPUAffinity(p.pid())\n\tif p.intelRdtManager != nil {\n\t\tif err := p.intelRdtManager.Apply(p.pid()); err != nil {\n\t\t\treturn fmt.Errorf(\"unable to apply Intel RDT configuration: %w\", err)\n\t\t}\n\t}\n\tif _, err := io.Copy(p.comm.initSockParent, p.bootstrapData); err != nil {\n\t\treturn fmt.Errorf(\"can't copy bootstrap data to pipe: %w\", err)\n\t}\n\n\tchildPid, err := p.getChildPid()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"can't get final child's PID from pipe: %w\", err)\n\t}\n\n\t// Save the standard descriptor names before the container process\n\t// can potentially move them (e.g., via dup2()).  If we don't do this now,\n\t// we won't know at checkpoint time which file descriptor to look up.\n\tfds, err := getPipeFds(childPid)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error getting pipe fds for pid %d: %w\", childPid, err)\n\t}\n\tp.setExternalDescriptors(fds)\n\n\t// Wait for our first child to exit\n\tif err := p.waitForChildExit(childPid); err != nil {\n\t\treturn fmt.Errorf(\"error waiting for our first child to exit: %w\", err)\n\t}\n\n\t// Spin up a goroutine to handle remapping mount requests by runc init.\n\t// There is no point doing this for rootless containers because they cannot\n\t// configure MOUNT_ATTR_IDMAP, nor do OPEN_TREE_CLONE. We could just\n\t// service plain-open requests for plain bind-mounts but there's no need\n\t// (rootless containers will never have permission issues on a source mount\n\t// that the parent process can help with -- they are the same user).\n\tvar mountRequest mountSourceRequestFn\n\tif !p.container.config.RootlessEUID {\n\t\trequest, cancel, err := p.goCreateMountSources(context.Background())\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error spawning mount remapping thread: %w\", err)\n\t\t}\n\t\tdefer cancel()\n\t\tmountRequest = request\n\t}\n\n\tif err := p.createNetworkInterfaces(); err != nil {\n\t\treturn fmt.Errorf(\"error creating network interfaces: %w\", err)\n\t}\n\n\tif err := p.setupNetworkDevices(); err != nil {\n\t\treturn fmt.Errorf(\"error creating network interfaces: %w\", err)\n\t}\n\n\t// initConfig.SpecState is only needed to run hooks that are executed\n\t// inside a container, i.e. CreateContainer and StartContainer.\n\tif p.config.Config.HasHook(configs.CreateContainer, configs.StartContainer) {\n\t\tp.config.SpecState, err = p.container.currentOCIState()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error getting current state: %w\", err)\n\t\t}\n\t}\n\n\tif err := utils.WriteJSON(p.comm.initSockParent, p.config); err != nil {\n\t\treturn fmt.Errorf(\"error sending config to init process: %w\", err)\n\t}\n\n\tvar seenProcReady bool\n\tierr := parseSync(p.comm.syncSockParent, func(sync *syncT) error {\n\t\tswitch sync.Type {\n\t\tcase procMountPlease:\n\t\t\tif mountRequest == nil {\n\t\t\t\treturn fmt.Errorf(\"cannot fulfil mount requests as a rootless user\")\n\t\t\t}\n\t\t\tvar m *configs.Mount\n\t\t\tif sync.Arg == nil {\n\t\t\t\treturn fmt.Errorf(\"sync %q is missing an argument\", sync.Type)\n\t\t\t}\n\t\t\tif err := json.Unmarshal(*sync.Arg, &m); err != nil {\n\t\t\t\treturn fmt.Errorf(\"sync %q passed invalid mount arg: %w\", sync.Type, err)\n\t\t\t}\n\t\t\tmnt, err := mountRequest(m)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to fulfil mount request: %w\", err)\n\t\t\t}\n\t\t\tdefer mnt.file.Close()\n\n\t\t\targ, err := json.Marshal(mnt)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"sync %q failed to marshal mountSource: %w\", sync.Type, err)\n\t\t\t}\n\t\t\targMsg := json.RawMessage(arg)\n\t\t\tif err := doWriteSync(p.comm.syncSockParent, syncT{\n\t\t\t\tType: procMountFd,\n\t\t\t\tArg:  &argMsg,\n\t\t\t\tFile: mnt.file,\n\t\t\t}); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase procSeccomp:\n\t\t\tif p.config.Config.Seccomp.ListenerPath == \"\" {\n\t\t\t\treturn errors.New(\"seccomp listenerPath is not set\")\n\t\t\t}\n\t\t\tvar srcFd int\n\t\t\tif sync.Arg == nil {\n\t\t\t\treturn fmt.Errorf(\"sync %q is missing an argument\", sync.Type)\n\t\t\t}\n\t\t\tif err := json.Unmarshal(*sync.Arg, &srcFd); err != nil {\n\t\t\t\treturn fmt.Errorf(\"sync %q passed invalid fd arg: %w\", sync.Type, err)\n\t\t\t}\n\t\t\tseccompFd, err := pidGetFd(p.pid(), srcFd)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"sync %q get fd %d from child failed: %w\", sync.Type, srcFd, err)\n\t\t\t}\n\t\t\tdefer seccompFd.Close()\n\t\t\t// We have a copy, the child can keep working. We don't need to\n\t\t\t// wait for the seccomp notify listener to get the fd before we\n\t\t\t// permit the child to continue because the child will happily wait\n\t\t\t// for the listener if it hits SCMP_ACT_NOTIFY.\n\t\t\tif err := writeSync(p.comm.syncSockParent, procSeccompDone); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\ts, err := p.container.currentOCIState()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// initProcessStartTime hasn't been set yet.\n\t\t\ts.Pid = p.cmd.Process.Pid\n\t\t\ts.Status = specs.StateCreating\n\t\t\tcontainerProcessState := &specs.ContainerProcessState{\n\t\t\t\tVersion:  specs.Version,\n\t\t\t\tFds:      []string{specs.SeccompFdName},\n\t\t\t\tPid:      s.Pid,\n\t\t\t\tMetadata: p.config.Config.Seccomp.ListenerMetadata,\n\t\t\t\tState:    *s,\n\t\t\t}\n\t\t\tif err := sendContainerProcessState(p.config.Config.Seccomp.ListenerPath,\n\t\t\t\tcontainerProcessState, seccompFd); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase procReady:\n\t\t\tseenProcReady = true\n\t\t\t// Set rlimits, this has to be done here because we lose permissions\n\t\t\t// to raise the limits once we enter a user-namespace\n\t\t\tif err := setupRlimits(p.config.Rlimits, p.pid()); err != nil {\n\t\t\t\treturn fmt.Errorf(\"error setting rlimits for ready process: %w\", err)\n\t\t\t}\n\n\t\t\t// generate a timestamp indicating when the container was started\n\t\t\tp.container.created = time.Now().UTC()\n\t\t\tp.container.state = &createdState{\n\t\t\t\tc: p.container,\n\t\t\t}\n\n\t\t\t// NOTE: If the procRun state has been synced and the\n\t\t\t// runc-create process has been killed for some reason,\n\t\t\t// the runc-init[2:stage] process will be leaky. And\n\t\t\t// the runc command also fails to parse root directory\n\t\t\t// because the container doesn't have state.json.\n\t\t\t//\n\t\t\t// In order to cleanup the runc-init[2:stage] by\n\t\t\t// runc-delete/stop, we should store the status before\n\t\t\t// procRun sync.\n\t\t\tstate, uerr := p.container.updateState(p)\n\t\t\tif uerr != nil {\n\t\t\t\treturn fmt.Errorf(\"unable to store init state: %w\", uerr)\n\t\t\t}\n\t\t\tp.container.initProcessStartTime = state.InitProcessStartTime\n\n\t\t\t// Sync with child.\n\t\t\tif err := writeSync(p.comm.syncSockParent, procRun); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase procHooks:\n\t\t\t// Setup cgroup before prestart hook, so that the prestart hook could apply cgroup permissions.\n\t\t\tif err := p.manager.Set(p.config.Config.Cgroups.Resources); err != nil {\n\t\t\t\treturn fmt.Errorf(\"error setting cgroup config for procHooks process: %w\", err)\n\t\t\t}\n\t\t\tif p.intelRdtManager != nil {\n\t\t\t\tif err := p.intelRdtManager.Set(p.config.Config); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"error setting Intel RDT config for procHooks process: %w\", err)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p.config.Config.HasHook(configs.Prestart, configs.CreateRuntime) {\n\t\t\t\ts, err := p.container.currentOCIState()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\t// initProcessStartTime hasn't been set yet.\n\t\t\t\ts.Pid = p.cmd.Process.Pid\n\t\t\t\ts.Status = specs.StateCreating\n\t\t\t\thooks := p.config.Config.Hooks\n\n\t\t\t\tif err := hooks.Run(configs.Prestart, s); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := hooks.Run(configs.CreateRuntime, s); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Sync with child.\n\t\t\tif err := writeSync(p.comm.syncSockParent, procHooksDone); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tdefault:\n\t\t\treturn errors.New(\"invalid JSON payload from child\")\n\t\t}\n\t\treturn nil\n\t})\n\n\tif err := p.comm.syncSockParent.Shutdown(unix.SHUT_WR); err != nil && ierr == nil {\n\t\treturn err\n\t}\n\tif !seenProcReady && ierr == nil {\n\t\tierr = errors.New(\"procReady not received\")\n\t}\n\tif ierr != nil {\n\t\treturn fmt.Errorf(\"error during container init: %w\", ierr)\n\t}\n\treturn nil\n}\n\nfunc (p *initProcess) createNetworkInterfaces() error {\n\tfor _, config := range p.config.Config.Networks {\n\t\tstrategy, err := getStrategy(config.Type)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tn := &network{\n\t\t\tNetwork: *config,\n\t\t}\n\t\tif err := strategy.create(n, p.pid()); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tp.config.Networks = append(p.config.Networks, n)\n\t}\n\treturn nil\n}\n\n// setupNetworkDevices sets up and initializes any defined network interface inside the container.\nfunc (p *initProcess) setupNetworkDevices() error {\n\t// host network pods does not move network devices.\n\tif !p.config.Config.Namespaces.Contains(configs.NEWNET) {\n\t\treturn nil\n\t}\n\t// the container init process has already joined the provided net namespace,\n\t// so we can use the process's net ns path directly.\n\tnsPath := fmt.Sprintf(\"/proc/%d/ns/net\", p.pid())\n\n\t// If moving any of the network devices fails, we return an error immediately.\n\t// The runtime spec requires that the kernel handles moving back any devices\n\t// that were successfully moved before the failure occurred.\n\t// See: https://github.com/opencontainers/runtime-spec/blob/27cb0027fd92ef81eda1ea3a8153b8337f56d94a/config-linux.md#namespace-lifecycle-and-container-termination\n\tfor name, netDevice := range p.config.Config.NetDevices {\n\t\terr := devChangeNetNamespace(name, nsPath, *netDevice)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"move netDevice %s to namespace %s: %w\", name, nsPath, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc pidGetFd(pid, srcFd int) (*os.File, error) {\n\tpidFd, err := unix.PidfdOpen(pid, 0)\n\tif err != nil {\n\t\treturn nil, os.NewSyscallError(\"pidfd_open\", err)\n\t}\n\tdefer unix.Close(pidFd)\n\tfd, err := unix.PidfdGetfd(pidFd, srcFd, 0)\n\tif err != nil {\n\t\treturn nil, os.NewSyscallError(\"pidfd_getfd\", err)\n\t}\n\treturn os.NewFile(uintptr(fd), \"[pidfd_getfd]\"), nil\n}\n\nfunc sendContainerProcessState(listenerPath string, state *specs.ContainerProcessState, file *os.File) error {\n\tconn, err := net.Dial(\"unix\", listenerPath)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to connect with seccomp agent specified in the seccomp profile: %w\", err)\n\t}\n\tdefer conn.Close()\n\n\tsocket, err := conn.(*net.UnixConn).File()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot get seccomp socket: %w\", err)\n\t}\n\tdefer socket.Close()\n\n\tb, err := json.Marshal(state)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot marshall seccomp state: %w\", err)\n\t}\n\n\tif err := utils.SendRawFd(socket, string(b), file.Fd()); err != nil {\n\t\treturn fmt.Errorf(\"cannot send seccomp fd to %s: %w\", listenerPath, err)\n\t}\n\truntime.KeepAlive(file)\n\treturn nil\n}\n\nfunc getPipeFds(pid int) ([]string, error) {\n\tfds := make([]string, 3)\n\n\tdirPath := filepath.Join(\"/proc\", strconv.Itoa(pid), \"/fd\")\n\tfor i := range 3 {\n\t\t// XXX: This breaks if the path is not a valid symlink (which can\n\t\t//      happen in certain particularly unlucky mount namespace setups).\n\t\tf := filepath.Join(dirPath, strconv.Itoa(i))\n\t\ttarget, err := os.Readlink(f)\n\t\tif err != nil {\n\t\t\t// Ignore permission errors, for rootless containers and other\n\t\t\t// non-dumpable processes. if we can't get the fd for a particular\n\t\t\t// file, there's not much we can do.\n\t\t\tif errors.Is(err, os.ErrPermission) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn fds, err\n\t\t}\n\t\tfds[i] = target\n\t}\n\treturn fds, nil\n}\n\n// InitializeIO creates pipes for use with the process's stdio and returns the\n// opposite side for each. Do not use this if you want to have a pseudoterminal\n// set up for you by libcontainer (TODO: fix that too).\n// TODO: This is mostly unnecessary, and should be handled by clients.\nfunc (p *Process) InitializeIO(rootuid, rootgid int) (i *IO, err error) {\n\tvar fds []uintptr\n\ti = &IO{}\n\t// cleanup in case of an error\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tfor _, fd := range fds {\n\t\t\t\t_ = unix.Close(int(fd))\n\t\t\t}\n\t\t}\n\t}()\n\t// STDIN\n\tr, w, err := os.Pipe()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfds = append(fds, r.Fd(), w.Fd())\n\tp.Stdin, i.Stdin = r, w\n\t// STDOUT\n\tif r, w, err = os.Pipe(); err != nil {\n\t\treturn nil, err\n\t}\n\tfds = append(fds, r.Fd(), w.Fd())\n\tp.Stdout, i.Stdout = w, r\n\t// STDERR\n\tif r, w, err = os.Pipe(); err != nil {\n\t\treturn nil, err\n\t}\n\tfds = append(fds, r.Fd(), w.Fd())\n\tp.Stderr, i.Stderr = w, r\n\t// change ownership of the pipes in case we are in a user namespace\n\tfor _, fd := range fds {\n\t\tif err := unix.Fchown(int(fd), rootuid, rootgid); err != nil {\n\t\t\treturn nil, &os.PathError{Op: \"fchown\", Path: \"fd \" + strconv.Itoa(int(fd)), Err: err}\n\t\t}\n\t}\n\treturn i, nil\n}\n"
  },
  {
    "path": "libcontainer/restored_process.go",
    "content": "package libcontainer\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"os/exec\"\n\n\t\"github.com/opencontainers/runc/libcontainer/system\"\n)\n\nfunc newRestoredProcess(cmd *exec.Cmd, fds []string) (*restoredProcess, error) {\n\tvar err error\n\tpid := cmd.Process.Pid\n\tstat, err := system.Stat(pid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &restoredProcess{\n\t\tcmd:              cmd,\n\t\tprocessStartTime: stat.StartTime,\n\t\tfds:              fds,\n\t}, nil\n}\n\ntype restoredProcess struct {\n\tcmd              *exec.Cmd\n\tprocessStartTime uint64\n\tfds              []string\n}\n\nfunc (p *restoredProcess) start() error {\n\treturn errors.New(\"restored process cannot be started\")\n}\n\nfunc (p *restoredProcess) pid() int {\n\treturn p.cmd.Process.Pid\n}\n\nfunc (p *restoredProcess) terminate() error {\n\terr := p.cmd.Process.Kill()\n\tif _, werr := p.wait(); err == nil {\n\t\terr = werr\n\t}\n\treturn err\n}\n\nfunc (p *restoredProcess) wait() (*os.ProcessState, error) {\n\t// TODO: how do we wait on the actual process?\n\t// maybe use --exec-cmd in criu\n\terr := p.cmd.Wait()\n\tif err != nil {\n\t\tvar exitErr *exec.ExitError\n\t\tif !errors.As(err, &exitErr) {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tst := p.cmd.ProcessState\n\treturn st, nil\n}\n\nfunc (p *restoredProcess) startTime() (uint64, error) {\n\treturn p.processStartTime, nil\n}\n\nfunc (p *restoredProcess) signal(s os.Signal) error {\n\treturn p.cmd.Process.Signal(s)\n}\n\nfunc (p *restoredProcess) externalDescriptors() []string {\n\treturn p.fds\n}\n\nfunc (p *restoredProcess) setExternalDescriptors(newFds []string) {\n\tp.fds = newFds\n}\n\nfunc (p *restoredProcess) forwardChildLogs() chan error {\n\treturn nil\n}\n\n// nonChildProcess represents a process where the calling process is not\n// the parent process. This process is created when Load loads a container\n// from a persisted state.\ntype nonChildProcess struct {\n\tprocessPid       int\n\tprocessStartTime uint64\n\tfds              []string\n}\n\nfunc (p *nonChildProcess) start() error {\n\treturn errors.New(\"restored process cannot be started\")\n}\n\nfunc (p *nonChildProcess) pid() int {\n\treturn p.processPid\n}\n\nfunc (p *nonChildProcess) terminate() error {\n\treturn errors.New(\"restored process cannot be terminated\")\n}\n\nfunc (p *nonChildProcess) wait() (*os.ProcessState, error) {\n\treturn nil, errors.New(\"restored process cannot be waited on\")\n}\n\nfunc (p *nonChildProcess) startTime() (uint64, error) {\n\treturn p.processStartTime, nil\n}\n\nfunc (p *nonChildProcess) signal(s os.Signal) error {\n\tproc, err := os.FindProcess(p.processPid)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn proc.Signal(s)\n}\n\nfunc (p *nonChildProcess) externalDescriptors() []string {\n\treturn p.fds\n}\n\nfunc (p *nonChildProcess) setExternalDescriptors(newFds []string) {\n\tp.fds = newFds\n}\n\nfunc (p *nonChildProcess) forwardChildLogs() chan error {\n\treturn nil\n}\n"
  },
  {
    "path": "libcontainer/rootfs_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/procfs\"\n\t\"github.com/moby/sys/mountinfo\"\n\t\"github.com/moby/sys/userns\"\n\t\"github.com/mrunalp/fileutils\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\t\"github.com/opencontainers/selinux/go-selinux/label\"\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n\tdevices \"github.com/opencontainers/cgroups/devices/config\"\n\t\"github.com/opencontainers/cgroups/fs2\"\n\t\"github.com/opencontainers/runc/internal/linux\"\n\t\"github.com/opencontainers/runc/internal/pathrs\"\n\t\"github.com/opencontainers/runc/internal/sys\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n)\n\nconst defaultMountFlags = unix.MS_NOEXEC | unix.MS_NOSUID | unix.MS_NODEV\n\n// mountConfig contains mount data not specific to a mount point.\ntype mountConfig struct {\n\troot            string\n\tlabel           string\n\tcgroup2Path     string\n\trootlessCgroups bool\n\tcgroupns        bool\n}\n\n// mountEntry contains mount data specific to a mount point.\ntype mountEntry struct {\n\t*configs.Mount\n\tsrcFile *mountSource\n\tdstFile *os.File\n}\n\n// srcName is only meant for error messages, it returns a \"friendly\" name.\nfunc (m mountEntry) srcName() string {\n\tif m.srcFile != nil {\n\t\treturn m.srcFile.file.Name()\n\t}\n\treturn m.Source\n}\n\nfunc (m mountEntry) srcStat() (os.FileInfo, *syscall.Stat_t, error) {\n\tvar (\n\t\tst  os.FileInfo\n\t\terr error\n\t)\n\tif m.srcFile != nil {\n\t\tst, err = m.srcFile.file.Stat()\n\t} else {\n\t\tst, err = os.Stat(m.Source)\n\t}\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn st, st.Sys().(*syscall.Stat_t), nil\n}\n\nfunc (m mountEntry) srcStatfs() (*unix.Statfs_t, error) {\n\tvar st unix.Statfs_t\n\tif m.srcFile != nil {\n\t\tif err := unix.Fstatfs(int(m.srcFile.file.Fd()), &st); err != nil {\n\t\t\treturn nil, os.NewSyscallError(\"fstatfs\", err)\n\t\t}\n\t} else {\n\t\tif err := unix.Statfs(m.Source, &st); err != nil {\n\t\t\treturn nil, &os.PathError{Op: \"statfs\", Path: m.Source, Err: err}\n\t\t}\n\t}\n\treturn &st, nil\n}\n\n// needsSetupDev returns true if /dev needs to be set up.\nfunc needsSetupDev(config *configs.Config) bool {\n\tfor _, m := range config.Mounts {\n\t\tif m.Device == \"bind\" && pathrs.LexicallyCleanPath(m.Destination) == \"/dev\" {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// prepareRootfs sets up the devices, mount points, and filesystems for use\n// inside a new mount namespace. It doesn't set anything as ro. You must call\n// finalizeRootfs after this function to finish setting up the rootfs.\nfunc prepareRootfs(pipe *syncSocket, iConfig *initConfig) (err error) {\n\tconfig := iConfig.Config\n\tif err := prepareRoot(config); err != nil {\n\t\treturn fmt.Errorf(\"error preparing rootfs: %w\", err)\n\t}\n\n\tmountConfig := &mountConfig{\n\t\troot:            config.Rootfs,\n\t\tlabel:           config.MountLabel,\n\t\tcgroup2Path:     iConfig.Cgroup2Path,\n\t\trootlessCgroups: config.RootlessCgroups,\n\t\tcgroupns:        config.Namespaces.Contains(configs.NEWCGROUP),\n\t}\n\tfor _, m := range config.Mounts {\n\t\tentry := mountEntry{Mount: m}\n\t\t// Figure out whether we need to request runc to give us an\n\t\t// open_tree(2)-style mountfd. For idmapped mounts, this is always\n\t\t// necessary. For bind-mounts, this is only necessary if we cannot\n\t\t// resolve the parent mount (this is only hit if you are running in a\n\t\t// userns -- but for rootless the host-side thread can't help).\n\t\twantSourceFile := m.IsIDMapped()\n\t\tif m.IsBind() && !config.RootlessEUID {\n\t\t\tif _, err := os.Stat(m.Source); err != nil {\n\t\t\t\twantSourceFile = true\n\t\t\t}\n\t\t}\n\t\tif wantSourceFile {\n\t\t\t// Request a source file from the host.\n\t\t\tif err := writeSyncArg(pipe, procMountPlease, m); err != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to request mountfd for %q: %w\", m.Source, err)\n\t\t\t}\n\t\t\tsync, err := readSyncFull(pipe, procMountFd)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"mountfd request for %q failed: %w\", m.Source, err)\n\t\t\t}\n\t\t\tif sync.File == nil {\n\t\t\t\treturn fmt.Errorf(\"mountfd request for %q: response missing attached fd\", m.Source)\n\t\t\t}\n\t\t\tdefer sync.File.Close()\n\t\t\t// Sanity-check to make sure we didn't get the wrong fd back. Note\n\t\t\t// that while m.Source might contain symlinks, the (*os.File).Name\n\t\t\t// is based on the path provided to os.OpenFile, not what it\n\t\t\t// resolves to. So this should never happen.\n\t\t\tif sync.File.Name() != m.Source {\n\t\t\t\treturn fmt.Errorf(\"returned mountfd for %q doesn't match requested mount configuration: mountfd path is %q\", m.Source, sync.File.Name())\n\t\t\t}\n\t\t\t// Unmarshal the procMountFd argument (the file is sync.File).\n\t\t\tvar src *mountSource\n\t\t\tif sync.Arg == nil {\n\t\t\t\treturn fmt.Errorf(\"sync %q is missing an argument\", sync.Type)\n\t\t\t}\n\t\t\tif err := json.Unmarshal(*sync.Arg, &src); err != nil {\n\t\t\t\treturn fmt.Errorf(\"invalid mount fd response argument %q: %w\", string(*sync.Arg), err)\n\t\t\t}\n\t\t\tif src == nil {\n\t\t\t\treturn fmt.Errorf(\"mountfd request for %q: no mount source info received\", m.Source)\n\t\t\t}\n\t\t\tsrc.file = sync.File\n\t\t\tentry.srcFile = src\n\t\t}\n\t\tif err := mountToRootfs(mountConfig, entry); err != nil {\n\t\t\treturn fmt.Errorf(\"error mounting %q to rootfs at %q: %w\", m.Source, m.Destination, err)\n\t\t}\n\t}\n\n\tsetupDev := needsSetupDev(config)\n\tif setupDev {\n\t\tif err := createDevices(config); err != nil {\n\t\t\treturn fmt.Errorf(\"error creating device nodes: %w\", err)\n\t\t}\n\t\tif err := setupPtmx(config); err != nil {\n\t\t\treturn fmt.Errorf(\"error setting up ptmx: %w\", err)\n\t\t}\n\t\tif err := setupDevSymlinks(config.Rootfs); err != nil {\n\t\t\treturn fmt.Errorf(\"error setting up /dev symlinks: %w\", err)\n\t\t}\n\t}\n\n\t// Signal the parent to run the pre-start hooks.\n\t// The hooks are run after the mounts are setup, but before we switch to the new\n\t// root, so that the old root is still available in the hooks for any mount\n\t// manipulations.\n\t// Note that iConfig.Cwd is not guaranteed to exist here.\n\tif err := syncParentHooks(pipe); err != nil {\n\t\treturn err\n\t}\n\n\t// The reason these operations are done here rather than in finalizeRootfs\n\t// is because the console-handling code gets quite sticky if we have to set\n\t// up the console before doing the pivot_root(2). This is because the\n\t// Console API has to also work with the ExecIn case, which means that the\n\t// API must be able to deal with being inside as well as outside the\n\t// container. It's just cleaner to do this here (at the expense of the\n\t// operation not being perfectly split).\n\n\tif err := unix.Chdir(config.Rootfs); err != nil {\n\t\treturn &os.PathError{Op: \"chdir\", Path: config.Rootfs, Err: err}\n\t}\n\n\tif s := iConfig.SpecState; s != nil {\n\t\ts.Pid = unix.Getpid()\n\t\ts.Status = specs.StateCreating\n\t\tif err := iConfig.Config.Hooks.Run(configs.CreateContainer, s); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif config.NoPivotRoot {\n\t\terr = msMoveRoot(config.Rootfs)\n\t} else if config.Namespaces.Contains(configs.NEWNS) {\n\t\terr = pivotRoot(config.Rootfs)\n\t} else {\n\t\terr = chroot()\n\t}\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error jailing process inside rootfs: %w\", err)\n\t}\n\n\t// Apply root mount propagation flags.\n\t// This must be done after pivot_root/chroot because the mount propagation flag is applied\n\t// to the current root (\"/\"), and not to the old rootfs before it becomes \"/\". Applying the\n\t// flag in prepareRoot would affect the host mount namespace if the container's\n\t// root mount is shared.\n\t// MS_PRIVATE is skipped as rootfsParentMountPrivate() is already called.\n\tif config.RootPropagation != 0 && config.RootPropagation&unix.MS_PRIVATE == 0 {\n\t\tif err := mount(\"\", \"/\", \"\", uintptr(config.RootPropagation), \"\"); err != nil {\n\t\t\treturn fmt.Errorf(\"unable to apply root propagation flags: %w\", err)\n\t\t}\n\t}\n\n\tif setupDev {\n\t\tif err := reOpenDevNull(); err != nil {\n\t\t\treturn fmt.Errorf(\"error reopening /dev/null inside container: %w\", err)\n\t\t}\n\t}\n\n\tif cwd := iConfig.Cwd; cwd != \"\" {\n\t\t// Note that spec.Process.Cwd can contain unclean value like  \"../../../../foo/bar...\".\n\t\t// However, we are safe to call MkDirAll directly because we are in the jail here.\n\t\tif err := os.MkdirAll(cwd, 0o755); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// finalizeRootfs sets anything to ro if necessary. You must call\n// prepareRootfs first.\nfunc finalizeRootfs(config *configs.Config) (err error) {\n\t// All tmpfs mounts and /dev were previously mounted as rw\n\t// by mountPropagate. Remount them read-only as requested.\n\tfor _, m := range config.Mounts {\n\t\tif m.Flags&unix.MS_RDONLY != unix.MS_RDONLY {\n\t\t\tcontinue\n\t\t}\n\t\tif m.Device == \"tmpfs\" || pathrs.LexicallyCleanPath(m.Destination) == \"/dev\" {\n\t\t\tif err := remountReadonly(m); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\t// set rootfs ( / ) as readonly\n\tif config.Readonlyfs {\n\t\tif err := setReadonly(); err != nil {\n\t\t\treturn fmt.Errorf(\"error setting rootfs as readonly: %w\", err)\n\t\t}\n\t}\n\n\tif config.Umask != nil {\n\t\tunix.Umask(int(*config.Umask))\n\t} else {\n\t\tunix.Umask(0o022)\n\t}\n\treturn nil\n}\n\n// /tmp has to be mounted as private to allow MS_MOVE to work in all situations\nfunc prepareTmp(topTmpDir string) (string, error) {\n\ttmpdir, err := os.MkdirTemp(topTmpDir, \"runctop\")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif err := mount(tmpdir, tmpdir, \"bind\", unix.MS_BIND, \"\"); err != nil {\n\t\treturn \"\", err\n\t}\n\tif err := mount(\"\", tmpdir, \"\", uintptr(unix.MS_PRIVATE), \"\"); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn tmpdir, nil\n}\n\nfunc cleanupTmp(tmpdir string) {\n\t_ = unix.Unmount(tmpdir, 0)\n\t_ = os.RemoveAll(tmpdir)\n}\n\nfunc mountCgroupV1(m mountEntry, c *mountConfig) error {\n\tbinds, err := getCgroupMounts(m.Mount)\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar merged []string\n\tfor _, b := range binds {\n\t\tss := filepath.Base(b.Destination)\n\t\tif strings.Contains(ss, \",\") {\n\t\t\tmerged = append(merged, ss)\n\t\t}\n\t}\n\ttmpfs := &configs.Mount{\n\t\tSource:           \"tmpfs\",\n\t\tDevice:           \"tmpfs\",\n\t\tDestination:      m.Destination,\n\t\tFlags:            defaultMountFlags,\n\t\tData:             \"mode=755\",\n\t\tPropagationFlags: m.PropagationFlags,\n\t}\n\n\tif err := mountToRootfs(c, mountEntry{Mount: tmpfs}); err != nil {\n\t\treturn err\n\t}\n\n\tfor _, b := range binds {\n\t\tif c.cgroupns {\n\t\t\t// We just created the tmpfs, and so we can just use filepath.Join\n\t\t\t// here (not to mention we want to make sure we create the path\n\t\t\t// inside the tmpfs, so we don't want to resolve symlinks).\n\t\t\t// TODO: Why not just use b.Destination (c.root is the root here)?\n\t\t\tsubsystemPath := filepath.Join(c.root, b.Destination)\n\t\t\tsubsystemName := filepath.Base(b.Destination)\n\t\t\tsubsystemDir, err := pathrs.MkdirAllInRoot(c.root, subsystemPath, 0o755)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tdefer subsystemDir.Close()\n\t\t\tif err := utils.WithProcfdFile(subsystemDir, func(dstFd string) error {\n\t\t\t\tflags := defaultMountFlags\n\t\t\t\tif m.Flags&unix.MS_RDONLY != 0 {\n\t\t\t\t\tflags = flags | unix.MS_RDONLY\n\t\t\t\t}\n\t\t\t\tvar (\n\t\t\t\t\tsource = \"cgroup\"\n\t\t\t\t\tdata   = subsystemName\n\t\t\t\t)\n\t\t\t\tif data == \"systemd\" {\n\t\t\t\t\tdata = cgroups.CgroupNamePrefix + data\n\t\t\t\t\tsource = \"systemd\"\n\t\t\t\t}\n\t\t\t\treturn mountViaFds(source, nil, b.Destination, dstFd, \"cgroup\", uintptr(flags), data)\n\t\t\t}); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\tif err := mountToRootfs(c, mountEntry{Mount: b}); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\tfor _, mc := range merged {\n\t\tfor ss := range strings.SplitSeq(mc, \",\") {\n\t\t\t// symlink(2) is very dumb, it will just shove the path into\n\t\t\t// the link and doesn't do any checks or relative path\n\t\t\t// conversion. Also, don't error out if the cgroup already exists.\n\t\t\tif err := os.Symlink(mc, filepath.Join(c.root, m.Destination, ss)); err != nil && !errors.Is(err, os.ErrExist) {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc mountCgroupV2(m mountEntry, c *mountConfig) error {\n\terr := utils.WithProcfdFile(m.dstFile, func(dstFd string) error {\n\t\treturn mountViaFds(m.Source, nil, m.Destination, dstFd, \"cgroup2\", uintptr(m.Flags), m.Data)\n\t})\n\tif err == nil || (!errors.Is(err, unix.EPERM) && !errors.Is(err, unix.EBUSY)) {\n\t\treturn err\n\t}\n\n\t// When we are in UserNS but CgroupNS is not unshared, we cannot mount\n\t// cgroup2 (#2158), so fall back to bind mount.\n\tbindM := &configs.Mount{\n\t\tDevice:           \"bind\",\n\t\tSource:           fs2.UnifiedMountpoint,\n\t\tDestination:      m.Destination,\n\t\tFlags:            unix.MS_BIND | m.Flags,\n\t\tPropagationFlags: m.PropagationFlags,\n\t}\n\tif c.cgroupns && c.cgroup2Path != \"\" {\n\t\t// Emulate cgroupns by bind-mounting the container cgroup path\n\t\t// rather than the whole /sys/fs/cgroup.\n\t\tbindM.Source = c.cgroup2Path\n\t}\n\t// mountToRootfs() handles remounting for MS_RDONLY.\n\terr = mountToRootfs(c, mountEntry{Mount: bindM})\n\tif c.rootlessCgroups && errors.Is(err, unix.ENOENT) {\n\t\t// ENOENT (for `src = c.cgroup2Path`) happens when rootless runc is being executed\n\t\t// outside the userns+mountns.\n\t\t//\n\t\t// Mask `/sys/fs/cgroup` to ensure it is read-only, even when `/sys` is mounted\n\t\t// with `rbind,ro` (`runc spec --rootless` produces `rbind,ro` for `/sys`).\n\t\terr = utils.WithProcfdFile(m.dstFile, func(procfd string) error {\n\t\t\treturn maskPaths([]string{procfd}, c.label)\n\t\t})\n\t}\n\treturn err\n}\n\nfunc doTmpfsCopyUp(m mountEntry, mountLabel string) (Err error) {\n\t// Set up a scratch dir for the tmpfs on the host.\n\ttmpdir, err := prepareTmp(\"/tmp\")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"tmpcopyup: failed to setup tmpdir: %w\", err)\n\t}\n\tdefer cleanupTmp(tmpdir)\n\ttmpDir, err := os.MkdirTemp(tmpdir, \"runctmpdir\")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"tmpcopyup: failed to create tmpdir: %w\", err)\n\t}\n\tdefer os.RemoveAll(tmpDir)\n\n\ttmpDirFile, err := os.OpenFile(tmpDir, unix.O_DIRECTORY|unix.O_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"tmpcopyup: %w\", err)\n\t}\n\tdefer tmpDirFile.Close()\n\n\t// Configure the *host* tmpdir as if it's the container mount. We change\n\t// m.dstFile since we are going to mount *on the host*.\n\thostMount := mountEntry{\n\t\tMount:   m.Mount,\n\t\tdstFile: tmpDirFile,\n\t}\n\tif err := hostMount.mountPropagate(\"/\", mountLabel); err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif Err != nil {\n\t\t\tif err := unmount(tmpDir, unix.MNT_DETACH); err != nil {\n\t\t\t\tlogrus.Warnf(\"tmpcopyup: %v\", err)\n\t\t\t}\n\t\t}\n\t}()\n\n\treturn utils.WithProcfdFile(m.dstFile, func(dstFd string) (Err error) {\n\t\t// Copy the container data to the host tmpdir. We append \"/\" to force\n\t\t// CopyDirectory to resolve the symlink rather than trying to copy the\n\t\t// symlink itself.\n\t\tif err := fileutils.CopyDirectory(dstFd+\"/\", tmpDir); err != nil {\n\t\t\treturn fmt.Errorf(\"tmpcopyup: failed to copy %s to %s (%s): %w\", m.Destination, dstFd, tmpDir, err)\n\t\t}\n\t\t// Now move the mount into the container.\n\t\tif err := mountViaFds(tmpDir, nil, m.Destination, dstFd, \"\", unix.MS_MOVE, \"\"); err != nil {\n\t\t\treturn fmt.Errorf(\"tmpcopyup: failed to move mount: %w\", err)\n\t\t}\n\t\treturn nil\n\t})\n}\n\nconst (\n\t// The atime \"enum\" flags (which are mutually exclusive).\n\tmntAtimeEnumFlags = unix.MS_NOATIME | unix.MS_RELATIME | unix.MS_STRICTATIME\n\t// All atime-related flags.\n\tmntAtimeFlags = mntAtimeEnumFlags | unix.MS_NODIRATIME\n\t// Flags which can be locked when inheriting mounts in a different userns.\n\t// In the kernel, these are the mounts that are locked using MNT_LOCK_*.\n\tmntLockFlags = unix.MS_RDONLY | unix.MS_NODEV | unix.MS_NOEXEC |\n\t\tunix.MS_NOSUID | mntAtimeFlags\n)\n\nfunc statfsToMountFlags(st unix.Statfs_t) int {\n\t// From <linux/statfs.h>.\n\tconst ST_NOSYMFOLLOW = 0x2000 //nolint:revive\n\n\tvar flags int\n\tfor _, f := range []struct {\n\t\tst, ms int\n\t}{\n\t\t// See calculate_f_flags() in fs/statfs.c.\n\t\t{unix.ST_RDONLY, unix.MS_RDONLY},\n\t\t{unix.ST_NOSUID, unix.MS_NOSUID},\n\t\t{unix.ST_NODEV, unix.MS_NODEV},\n\t\t{unix.ST_NOEXEC, unix.MS_NOEXEC},\n\t\t{unix.ST_MANDLOCK, unix.MS_MANDLOCK},\n\t\t{unix.ST_SYNCHRONOUS, unix.MS_SYNCHRONOUS},\n\t\t{unix.ST_NOATIME, unix.MS_NOATIME},\n\t\t{unix.ST_NODIRATIME, unix.MS_NODIRATIME},\n\t\t{unix.ST_RELATIME, unix.MS_RELATIME},\n\t\t{ST_NOSYMFOLLOW, unix.MS_NOSYMFOLLOW},\n\t\t// There is no ST_STRICTATIME -- see below.\n\t} {\n\t\tif int(st.Flags)&f.st == f.st {\n\t\t\tflags |= f.ms\n\t\t}\n\t}\n\t// MS_STRICTATIME is a \"fake\" MS_* flag. It isn't stored in mnt->mnt_flags,\n\t// and so it doesn't show up in statfs(2). If none of the other flags in\n\t// atime enum are present, the mount is MS_STRICTATIME.\n\tif flags&mntAtimeEnumFlags == 0 {\n\t\tflags |= unix.MS_STRICTATIME\n\t}\n\treturn flags\n}\n\nfunc (m *mountEntry) createOpenMountpoint(rootfs string) (Err error) {\n\tunsafePath := pathrs.LexicallyStripRoot(rootfs, m.Destination)\n\tdstFile, err := pathrs.OpenInRoot(rootfs, unsafePath, unix.O_PATH)\n\tdefer func() {\n\t\tif dstFile != nil && Err != nil {\n\t\t\t_ = dstFile.Close()\n\t\t}\n\t}()\n\tif err == nil && m.Device == \"tmpfs\" {\n\t\t// If the original target exists, copy the mode for the tmpfs mount.\n\t\tstat, err := dstFile.Stat()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"check tmpfs source mode: %w\", err)\n\t\t}\n\t\tdt := fmt.Sprintf(\"mode=%04o\", syscallMode(stat.Mode()))\n\t\tif m.Data != \"\" {\n\t\t\tdt = dt + \",\" + m.Data\n\t\t}\n\t\tm.Data = dt\n\t}\n\tif err != nil {\n\t\tif !errors.Is(err, unix.ENOENT) {\n\t\t\treturn fmt.Errorf(\"lookup mountpoint target: %w\", err)\n\t\t}\n\n\t\t// If the mountpoint doesn't already exist, we want to create a mountpoint\n\t\t// that makes sense for the source. For file bind-mounts this is an empty\n\t\t// file, for everything else it's a directory.\n\t\tdstIsFile := false\n\t\tif m.Device == \"bind\" {\n\t\t\tfi, _, err := m.srcStat()\n\t\t\tif err != nil {\n\t\t\t\t// Error out if the source of a bind mount does not exist as we\n\t\t\t\t// will be unable to bind anything to it.\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tdstIsFile = !fi.IsDir()\n\t\t}\n\t\tif dstIsFile {\n\t\t\tdstFile, err = pathrs.CreateInRoot(rootfs, unsafePath, unix.O_CREAT|unix.O_EXCL|unix.O_NOFOLLOW, 0o644)\n\t\t} else {\n\t\t\tdstFile, err = pathrs.MkdirAllInRoot(rootfs, unsafePath, 0o755)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"make mountpoint %q: %w\", m.Destination, err)\n\t\t}\n\t}\n\n\tdstFullPath, err := procfs.ProcSelfFdReadlink(dstFile)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"get mount destination real path: %w\", err)\n\t}\n\tif !pathrs.IsLexicallyInRoot(rootfs, dstFullPath) {\n\t\treturn fmt.Errorf(\"mountpoint %q is outside of rootfs %q\", dstFullPath, rootfs)\n\t}\n\tif relPath, err := filepath.Rel(rootfs, dstFullPath); err != nil {\n\t\treturn fmt.Errorf(\"get relative path of %q: %w\", dstFullPath, err)\n\t} else if relPath == \".\" {\n\t\treturn fmt.Errorf(\"mountpoint %q is on the top of rootfs %q\", dstFullPath, rootfs)\n\t}\n\t// TODO: Make checkProcMount use dstFile directly to avoid the need to\n\t// operate on paths here.\n\tif err := checkProcMount(rootfs, dstFullPath, *m); err != nil {\n\t\treturn fmt.Errorf(\"check proc-safety of %s mount: %w\", m.Destination, err)\n\t}\n\t// Update mountEntry.\n\tm.dstFile = dstFile\n\treturn nil\n}\n\nfunc mountToRootfs(c *mountConfig, m mountEntry) error {\n\trootfs := c.root\n\tdefer func() {\n\t\tif m.dstFile != nil {\n\t\t\t_ = m.dstFile.Close()\n\t\t\tm.dstFile = nil\n\t\t}\n\t}()\n\n\t// procfs and sysfs are special because we need to ensure they are actually\n\t// mounted on a specific path in a container without any funny business.\n\tswitch m.Device {\n\tcase \"proc\", \"sysfs\":\n\t\t// If the destination already exists and is not a directory, we bail\n\t\t// out. This is to avoid mounting through a symlink or similar -- which\n\t\t// has been a \"fun\" attack scenario in the past.\n\t\t// TODO: This won't be necessary once we switch to libpathrs and we can\n\t\t//       stop all of these symlink-exchange attacks.\n\t\tdest := filepath.Clean(m.Destination)\n\t\tif !pathrs.IsLexicallyInRoot(rootfs, dest) {\n\t\t\t// Do not use securejoin as it resolves symlinks.\n\t\t\tdest = filepath.Join(rootfs, dest)\n\t\t}\n\t\tif err := checkProcMount(rootfs, dest, m); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif fi, err := os.Lstat(dest); err != nil {\n\t\t\tif !errors.Is(err, os.ErrNotExist) {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else if !fi.IsDir() {\n\t\t\treturn fmt.Errorf(\"filesystem %q must be mounted on ordinary directory\", m.Device)\n\t\t}\n\t\tdstFile, err := pathrs.MkdirAllInRoot(rootfs, dest, 0o755)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer dstFile.Close()\n\t\t// \"proc\" and \"sys\" mounts need special handling (without resolving the\n\t\t// destination) to avoid attacks.\n\t\tm.dstFile = dstFile\n\t\treturn m.mountPropagate(rootfs, \"\")\n\t}\n\n\tmountLabel := c.label\n\tif err := m.createOpenMountpoint(rootfs); err != nil {\n\t\treturn fmt.Errorf(\"create mountpoint for %s mount: %w\", m.Destination, err)\n\t}\n\n\tswitch m.Device {\n\tcase \"mqueue\":\n\t\tif err := m.mountPropagate(rootfs, \"\"); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn utils.WithProcfdFile(m.dstFile, func(dstFd string) error {\n\t\t\treturn label.SetFileLabel(dstFd, mountLabel)\n\t\t})\n\tcase \"tmpfs\":\n\t\tvar err error\n\t\tif m.Extensions&configs.EXT_COPYUP == configs.EXT_COPYUP {\n\t\t\terr = doTmpfsCopyUp(m, mountLabel)\n\t\t} else {\n\t\t\terr = m.mountPropagate(rootfs, mountLabel)\n\t\t}\n\t\treturn err\n\tcase \"bind\":\n\t\t// open_tree()-related shenanigans are all handled in mountViaFds.\n\t\tif err := m.mountPropagate(rootfs, mountLabel); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// The initial MS_BIND won't change the mount options, we need to do a\n\t\t// separate MS_BIND|MS_REMOUNT to apply the mount options. We skip\n\t\t// doing this if the user has not specified any mount flags at all\n\t\t// (including cleared flags) -- in which case we just keep the original\n\t\t// mount flags.\n\t\t//\n\t\t// Note that the fact we check whether any clearing flags are set is in\n\t\t// contrast to mount(8)'s current behaviour, but is what users probably\n\t\t// expect. See <https://github.com/util-linux/util-linux/issues/2433>.\n\t\tif m.Flags & ^(unix.MS_BIND|unix.MS_REC|unix.MS_REMOUNT) != 0 || m.ClearedFlags != 0 {\n\t\t\tif err := utils.WithProcfdFile(m.dstFile, func(dstFd string) error {\n\t\t\t\tflags := m.Flags | unix.MS_BIND | unix.MS_REMOUNT\n\t\t\t\t// The runtime-spec says we SHOULD map to the relevant mount(8)\n\t\t\t\t// behaviour. However, it's not clear whether we want the\n\t\t\t\t// \"mount --bind -o ...\" or \"mount --bind -o remount,...\"\n\t\t\t\t// behaviour here -- both of which are somewhat broken[1].\n\t\t\t\t//\n\t\t\t\t// So, if the user has passed \"remount\" as a mount option, we\n\t\t\t\t// implement the \"mount --bind -o remount\" behaviour, otherwise\n\t\t\t\t// we implement the spiritual intent of the \"mount --bind -o\"\n\t\t\t\t// behaviour, which should match what users expect. Maybe\n\t\t\t\t// mount(8) will eventually implement this behaviour too..\n\t\t\t\t//\n\t\t\t\t// [1]: https://github.com/util-linux/util-linux/issues/2433\n\n\t\t\t\t// Initially, we emulate \"mount --bind -o ...\" where we set\n\t\t\t\t// only the requested flags (clearing any existing flags). The\n\t\t\t\t// only difference from mount(8) is that we do this\n\t\t\t\t// unconditionally, regardless of whether any set-me mount\n\t\t\t\t// options have been requested.\n\t\t\t\t//\n\t\t\t\t// TODO: We are not doing any special handling of the atime\n\t\t\t\t// flags here, which means that the mount will inherit the old\n\t\t\t\t// atime flags if the user didn't explicitly request a\n\t\t\t\t// different set of flags. This also has the mount(8) bug where\n\t\t\t\t// \"nodiratime,norelatime\" will result in a\n\t\t\t\t// \"nodiratime,relatime\" mount.\n\t\t\t\tmountErr := mountViaFds(\"\", nil, m.Destination, dstFd, \"\", uintptr(flags), \"\")\n\t\t\t\tif mountErr == nil {\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\n\t\t\t\t// If the mount failed, the mount may contain locked mount\n\t\t\t\t// flags. In that case, we emulate \"mount --bind -o\n\t\t\t\t// remount,...\", where we take the existing mount flags of the\n\t\t\t\t// mount and apply the request flags (including clearing flags)\n\t\t\t\t// on top. The main divergence we have from mount(8) here is\n\t\t\t\t// that we handle atimes correctly to make sure we error out if\n\t\t\t\t// we cannot fulfil the requested mount flags.\n\n\t\t\t\tst, err := m.srcStatfs()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tsrcFlags := statfsToMountFlags(*st)\n\n\t\t\t\tlogrus.Debugf(\n\t\t\t\t\t\"working around failure to set vfs flags on bind-mount %s: srcFlags=%s flagsSet=%s flagsClr=%s: %v\",\n\t\t\t\t\tm.Destination, stringifyMountFlags(srcFlags),\n\t\t\t\t\tstringifyMountFlags(m.Flags), stringifyMountFlags(m.ClearedFlags), mountErr)\n\n\t\t\t\t// If the user explicitly request one of the locked flags *not*\n\t\t\t\t// be set, we need to return an error to avoid producing mounts\n\t\t\t\t// that don't match the user's request.\n\t\t\t\tif cannotClearFlags := srcFlags & m.ClearedFlags & mntLockFlags; cannotClearFlags != 0 {\n\t\t\t\t\treturn fmt.Errorf(\"cannot clear locked flags %s: %w\", stringifyMountFlags(cannotClearFlags), mountErr)\n\t\t\t\t}\n\n\t\t\t\t// If an MS_*ATIME flag was requested, it must match the\n\t\t\t\t// existing one. This handles two separate kernel bugs, and\n\t\t\t\t// matches the logic of can_change_locked_flags() but without\n\t\t\t\t// these bugs:\n\t\t\t\t//\n\t\t\t\t// * (2.6.30+) Since commit 613cbe3d4870 (\"Don't set relatime\n\t\t\t\t// when noatime is specified\"), MS_RELATIME is ignored when\n\t\t\t\t// MS_NOATIME is set. This means that us inheriting MS_NOATIME\n\t\t\t\t// from a mount while requesting MS_RELATIME would *silently*\n\t\t\t\t// produce an MS_NOATIME mount.\n\t\t\t\t//\n\t\t\t\t// * (2.6.30+) Since its introduction in commit d0adde574b84\n\t\t\t\t// (\"Add a strictatime mount option\"), MS_STRICTATIME has\n\t\t\t\t// caused any passed MS_RELATIME and MS_NOATIME flags to be\n\t\t\t\t// ignored which results in us *silently* producing\n\t\t\t\t// MS_STRICTATIME mounts even if the user requested MS_RELATIME\n\t\t\t\t// or MS_NOATIME.\n\t\t\t\tif m.Flags&mntAtimeFlags != 0 && m.Flags&mntAtimeFlags != srcFlags&mntAtimeFlags {\n\t\t\t\t\treturn fmt.Errorf(\"cannot change locked atime flags %s: %w\", stringifyMountFlags(srcFlags&mntAtimeFlags), mountErr)\n\t\t\t\t}\n\n\t\t\t\t// Retry the mount with the existing lockable mount flags\n\t\t\t\t// applied.\n\t\t\t\tflags |= srcFlags & mntLockFlags\n\t\t\t\tmountErr = mountViaFds(\"\", nil, m.Destination, dstFd, \"\", uintptr(flags), \"\")\n\t\t\t\tif mountErr != nil {\n\t\t\t\t\tmountErr = fmt.Errorf(\"remount with locked flags %s re-applied: %w\", stringifyMountFlags(srcFlags&mntLockFlags), mountErr)\n\t\t\t\t}\n\t\t\t\treturn mountErr\n\t\t\t}); err != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to set user-requested vfs flags on bind-mount: %w\", err)\n\t\t\t}\n\t\t}\n\t\treturn setRecAttr(m)\n\tcase \"cgroup\":\n\t\tif cgroups.IsCgroup2UnifiedMode() {\n\t\t\treturn mountCgroupV2(m, c)\n\t\t}\n\t\treturn mountCgroupV1(m, c)\n\tdefault:\n\t\treturn m.mountPropagate(rootfs, mountLabel)\n\t}\n}\n\nfunc getCgroupMounts(m *configs.Mount) ([]*configs.Mount, error) {\n\tmounts, err := cgroups.GetCgroupMounts(false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// We don't need to use /proc/thread-self here because runc always runs\n\t// with every thread in the same cgroup. This lets us avoid having to do\n\t// runtime.LockOSThread.\n\tcgroupPaths, err := cgroups.ParseCgroupFile(\"/proc/self/cgroup\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar binds []*configs.Mount\n\n\tfor _, mm := range mounts {\n\t\tdir, err := mm.GetOwnCgroup(cgroupPaths)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\trelDir, err := filepath.Rel(mm.Root, dir)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tbinds = append(binds, &configs.Mount{\n\t\t\tDevice:           \"bind\",\n\t\t\tSource:           filepath.Join(mm.Mountpoint, relDir),\n\t\t\tDestination:      filepath.Join(m.Destination, filepath.Base(mm.Mountpoint)),\n\t\t\tFlags:            unix.MS_BIND | unix.MS_REC | m.Flags,\n\t\t\tPropagationFlags: m.PropagationFlags,\n\t\t})\n\t}\n\n\treturn binds, nil\n}\n\n// Taken from <include/linux/proc_ns.h>. If a file is on a filesystem of type\n// PROC_SUPER_MAGIC, we're guaranteed that only the root of the superblock will\n// have this inode number.\nconst procRootIno = 1\n\n// checkProcMount checks to ensure that the mount destination is not over the top of /proc.\n// dest is required to be an abs path and have any symlinks resolved before calling this function.\n//\n// If m is nil, don't stat the filesystem.  This is used for restore of a checkpoint.\nfunc checkProcMount(rootfs, dest string, m mountEntry) error {\n\tconst procPath = \"/proc\"\n\tpath, err := filepath.Rel(filepath.Join(rootfs, procPath), dest)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// pass if the mount path is located outside of /proc\n\tif strings.HasPrefix(path, \"..\") {\n\t\treturn nil\n\t}\n\tif path == \".\" {\n\t\t// Only allow bind-mounts on top of /proc, and only if the source is a\n\t\t// procfs mount.\n\t\tif m.IsBind() {\n\t\t\tfsSt, err := m.srcStatfs()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif fsSt.Type == unix.PROC_SUPER_MAGIC {\n\t\t\t\tif _, uSt, err := m.srcStat(); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t} else if uSt.Ino != procRootIno {\n\t\t\t\t\t// We cannot error out in this case, because we've\n\t\t\t\t\t// supported these kinds of mounts for a long time.\n\t\t\t\t\t// However, we would expect users to bind-mount the root of\n\t\t\t\t\t// a real procfs on top of /proc in the container. We might\n\t\t\t\t\t// want to block this in the future.\n\t\t\t\t\tlogrus.Warnf(\"bind-mount %v (source %v) is of type procfs but is not the root of a procfs (inode %d). Future versions of runc might block this configuration -- please report an issue to <https://github.com/opencontainers/runc> if you see this warning.\", dest, m.srcName(), uSt.Ino)\n\t\t\t\t}\n\t\t\t\treturn nil\n\t\t\t}\n\t\t} else if m.Device == \"proc\" {\n\t\t\t// Fresh procfs-type mounts are always safe to mount on top of /proc.\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"%q cannot be mounted because it is not of type proc\", dest)\n\t}\n\n\t// Here dest is definitely under /proc. Do not allow those,\n\t// except for a few specific entries emulated by lxcfs.\n\tvalidProcMounts := []string{\n\t\t\"/proc/cpuinfo\",\n\t\t\"/proc/diskstats\",\n\t\t\"/proc/meminfo\",\n\t\t\"/proc/stat\",\n\t\t\"/proc/swaps\",\n\t\t\"/proc/uptime\",\n\t\t\"/proc/loadavg\",\n\t\t\"/proc/slabinfo\",\n\t\t\"/proc/sys/kernel/ns_last_pid\",\n\t\t\"/proc/sys/crypto/fips_enabled\",\n\t}\n\tfor _, valid := range validProcMounts {\n\t\tpath, err := filepath.Rel(filepath.Join(rootfs, valid), dest)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif path == \".\" {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\treturn fmt.Errorf(\"%q cannot be mounted because it is inside /proc\", dest)\n}\n\nfunc setupDevSymlinks(rootfs string) error {\n\t// In theory, these should be links to /proc/thread-self, but systems\n\t// expect these to be /proc/self and this matches how most distributions\n\t// work.\n\tlinks := [][2]string{\n\t\t{\"/proc/self/fd\", \"/dev/fd\"},\n\t\t{\"/proc/self/fd/0\", \"/dev/stdin\"},\n\t\t{\"/proc/self/fd/1\", \"/dev/stdout\"},\n\t\t{\"/proc/self/fd/2\", \"/dev/stderr\"},\n\t}\n\t// kcore support can be toggled with CONFIG_PROC_KCORE; only create a symlink\n\t// in /dev if it exists in /proc.\n\tif _, err := os.Stat(\"/proc/kcore\"); err == nil {\n\t\tlinks = append(links, [2]string{\"/proc/kcore\", \"/dev/core\"})\n\t}\n\tfor _, link := range links {\n\t\tvar (\n\t\t\tsrc = link[0]\n\t\t\tdst = filepath.Join(rootfs, link[1])\n\t\t)\n\t\tif err := os.Symlink(src, dst); err != nil && !errors.Is(err, os.ErrExist) {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// If stdin, stdout, and/or stderr are pointing to `/dev/null` in the parent's rootfs\n// this method will make them point to `/dev/null` in this container's rootfs.  This\n// needs to be called after we chroot/pivot into the container's rootfs so that any\n// symlinks are resolved locally.\nfunc reOpenDevNull() error {\n\tfile, err := os.OpenFile(\"/dev/null\", os.O_RDWR, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer file.Close()\n\tif err := verifyDevNull(file); err != nil {\n\t\treturn fmt.Errorf(\"can't reopen /dev/null: %w\", err)\n\t}\n\tfor fd := range 3 {\n\t\tvar stat unix.Stat_t\n\t\tif err := unix.Fstat(fd, &stat); err != nil {\n\t\t\treturn &os.PathError{Op: \"fstat\", Path: \"fd \" + strconv.Itoa(fd), Err: err}\n\t\t}\n\t\tif isDevNull(&stat) {\n\t\t\t// Close and re-open the fd.\n\t\t\tif err := linux.Dup3(int(file.Fd()), fd, 0); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// Create the device nodes in the container.\nfunc createDevices(config *configs.Config) error {\n\tuseBindMount := userns.RunningInUserNS() || config.Namespaces.Contains(configs.NEWUSER)\n\tfor _, node := range config.Devices {\n\n\t\t// The /dev/ptmx device is setup by setupPtmx()\n\t\tif pathrs.LexicallyCleanPath(node.Path) == \"/dev/ptmx\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// containers running in a user namespace are not allowed to mknod\n\t\t// devices so we can just bind mount it from the host.\n\t\tif err := createDeviceNode(config.Rootfs, node, useBindMount); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc bindMountDeviceNode(destDir *os.File, destName string, node *devices.Device) error {\n\tdstFile, err := utils.Openat(destDir, destName, unix.O_CREAT|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0o000)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"create device inode %s: %w\", node.Path, err)\n\t}\n\tdefer dstFile.Close()\n\n\treturn utils.WithProcfdFile(dstFile, func(dstFd string) error {\n\t\treturn mountViaFds(node.Path, nil, dstFile.Name(), dstFd, \"bind\", unix.MS_BIND, \"\")\n\t})\n}\n\n// Creates the device node in the rootfs of the container.\nfunc createDeviceNode(rootfs string, node *devices.Device, bind bool) error {\n\tif node.Path == \"\" {\n\t\t// The node only exists for cgroup reasons, ignore it here.\n\t\treturn nil\n\t}\n\tdestDir, destName, err := pathrs.MkdirAllParentInRoot(rootfs, node.Path, 0o755)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"mkdir parent of device inode %q: %w\", node.Path, err)\n\t}\n\tdefer destDir.Close()\n\n\tif bind {\n\t\treturn bindMountDeviceNode(destDir, destName, node)\n\t}\n\tif err := mknodDevice(destDir, destName, node); err != nil {\n\t\tif errors.Is(err, os.ErrExist) {\n\t\t\treturn nil\n\t\t} else if errors.Is(err, os.ErrPermission) {\n\t\t\treturn bindMountDeviceNode(destDir, destName, node)\n\t\t}\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc mknodDevice(destDir *os.File, destName string, node *devices.Device) error {\n\tfileMode := node.FileMode\n\tswitch node.Type {\n\tcase devices.BlockDevice:\n\t\tfileMode |= unix.S_IFBLK\n\tcase devices.CharDevice:\n\t\tfileMode |= unix.S_IFCHR\n\tcase devices.FifoDevice:\n\t\tfileMode |= unix.S_IFIFO\n\tdefault:\n\t\treturn fmt.Errorf(\"%c is not a valid device type for device %s\", node.Type, node.Path)\n\t}\n\tdev, err := node.Mkdev()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := unix.Mknodat(int(destDir.Fd()), destName, uint32(fileMode), int(dev)); err != nil {\n\t\treturn &os.PathError{Op: \"mknodat\", Path: filepath.Join(destDir.Name(), destName), Err: err}\n\t}\n\n\t// Get a handle and verify that it matches the expected inode type and\n\t// major:minor before we operate on it.\n\tdevFile, err := utils.Openat(destDir, destName, unix.O_NOFOLLOW|unix.O_PATH, 0)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"open new %c device inode %s: %w\", node.Type, node.Path, err)\n\t}\n\tdefer devFile.Close()\n\n\tif err := sys.VerifyInode(devFile, func(stat *unix.Stat_t, _ *unix.Statfs_t) error {\n\t\tif stat.Mode&unix.S_IFMT != uint32(fileMode)&unix.S_IFMT {\n\t\t\treturn fmt.Errorf(\"new %c device inode %s has incorrect ftype: %#x doesn't match expected %#v\",\n\t\t\t\tnode.Type, node.Path,\n\t\t\t\tstat.Mode&unix.S_IFMT, fileMode&unix.S_IFMT)\n\t\t}\n\t\tif rdev := uint64(stat.Rdev); rdev != dev { //nolint:unconvert // Rdev is uint32 on MIPS.\n\t\t\treturn fmt.Errorf(\"new %c device inode %s has incorrect major:minor: %d:%d doesn't match expected %d:%d\",\n\t\t\t\tnode.Type, node.Path,\n\t\t\t\tunix.Major(rdev), unix.Minor(rdev),\n\t\t\t\tunix.Major(dev), unix.Minor(dev))\n\t\t}\n\t\treturn nil\n\t}); err != nil {\n\t\treturn err\n\t}\n\n\t// Ensure permission bits (can be different because of umask).\n\tif err := sys.FchmodFile(devFile, uint32(fileMode)); err != nil {\n\t\treturn fmt.Errorf(\"update new %c device inode %s file mode: %w\", node.Type, node.Path, err)\n\t}\n\tif err := sys.FchownFile(devFile, int(node.Uid), int(node.Gid)); err != nil {\n\t\treturn fmt.Errorf(\"update new %c device inode %s owner: %w\", node.Type, node.Path, err)\n\t}\n\truntime.KeepAlive(devFile)\n\treturn nil\n}\n\n// rootfsParentMountPrivate ensures rootfs parent mount is private.\n// This is needed for two reasons:\n//   - pivot_root() will fail if parent mount is shared;\n//   - when we bind mount rootfs, if its parent is not private, the new mount\n//     will propagate (leak!) to parent namespace and we don't want that.\nfunc rootfsParentMountPrivate(path string) error {\n\tvar err error\n\t// Assuming path is absolute and clean (this is checked in\n\t// libcontainer/validate). Any error other than EINVAL means we failed,\n\t// and EINVAL means this is not a mount point, so traverse up until we\n\t// find one.\n\tfor {\n\t\terr = unix.Mount(\"\", path, \"\", unix.MS_PRIVATE, \"\")\n\t\tif err == nil {\n\t\t\treturn nil\n\t\t}\n\t\tif err != unix.EINVAL || path == \"/\" {\n\t\t\tbreak\n\t\t}\n\t\tpath = filepath.Dir(path)\n\t}\n\treturn &mountError{\n\t\top:     \"remount-private\",\n\t\ttarget: path,\n\t\tflags:  unix.MS_PRIVATE,\n\t\terr:    err,\n\t}\n}\n\nfunc prepareRoot(config *configs.Config) error {\n\tflag := unix.MS_SLAVE | unix.MS_REC\n\tif config.RootPropagation != 0 {\n\t\tflag = config.RootPropagation\n\t}\n\tif err := mount(\"\", \"/\", \"\", uintptr(flag), \"\"); err != nil {\n\t\treturn err\n\t}\n\n\tif err := rootfsParentMountPrivate(config.Rootfs); err != nil {\n\t\treturn err\n\t}\n\n\treturn mount(config.Rootfs, config.Rootfs, \"bind\", unix.MS_BIND|unix.MS_REC, \"\")\n}\n\nfunc setReadonly() error {\n\tflags := uintptr(unix.MS_BIND | unix.MS_REMOUNT | unix.MS_RDONLY)\n\n\terr := mount(\"\", \"/\", \"\", flags, \"\")\n\tif err == nil {\n\t\treturn nil\n\t}\n\tvar s unix.Statfs_t\n\tif err := unix.Statfs(\"/\", &s); err != nil {\n\t\treturn &os.PathError{Op: \"statfs\", Path: \"/\", Err: err}\n\t}\n\tflags |= uintptr(s.Flags)\n\treturn mount(\"\", \"/\", \"\", flags, \"\")\n}\n\nfunc setupPtmx(config *configs.Config) error {\n\tptmx := filepath.Join(config.Rootfs, \"dev/ptmx\")\n\tif err := os.Remove(ptmx); err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\treturn err\n\t}\n\tif err := os.Symlink(\"pts/ptmx\", ptmx); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// pivotRoot will call pivot_root such that rootfs becomes the new root\n// filesystem, and everything else is cleaned up.\nfunc pivotRoot(rootfs string) error {\n\t// While the documentation may claim otherwise, pivot_root(\".\", \".\") is\n\t// actually valid. What this results in is / being the new root but\n\t// /proc/self/cwd being the old root. Since we can play around with the cwd\n\t// with pivot_root this allows us to pivot without creating directories in\n\t// the rootfs. Shout-outs to the LXC developers for giving us this idea.\n\n\toldroot, err := linux.Open(\"/\", unix.O_DIRECTORY|unix.O_RDONLY, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer unix.Close(oldroot)\n\n\tnewroot, err := linux.Open(rootfs, unix.O_DIRECTORY|unix.O_RDONLY, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer unix.Close(newroot)\n\n\t// Change to the new root so that the pivot_root actually acts on it.\n\tif err := unix.Fchdir(newroot); err != nil {\n\t\treturn &os.PathError{Op: \"fchdir\", Path: \"fd \" + strconv.Itoa(newroot), Err: err}\n\t}\n\n\tif err := unix.PivotRoot(\".\", \".\"); err != nil {\n\t\treturn &os.PathError{Op: \"pivot_root\", Path: \".\", Err: err}\n\t}\n\n\t// Currently our \".\" is oldroot (according to the current kernel code).\n\t// However, purely for safety, we will fchdir(oldroot) since there isn't\n\t// really any guarantee from the kernel what /proc/self/cwd will be after a\n\t// pivot_root(2).\n\n\tif err := unix.Fchdir(oldroot); err != nil {\n\t\treturn &os.PathError{Op: \"fchdir\", Path: \"fd \" + strconv.Itoa(oldroot), Err: err}\n\t}\n\n\t// Make oldroot rslave to make sure our unmounts don't propagate to the\n\t// host (and thus bork the machine). We don't use rprivate because this is\n\t// known to cause issues due to races where we still have a reference to a\n\t// mount while a process in the host namespace are trying to operate on\n\t// something they think has no mounts (devicemapper in particular).\n\tif err := mount(\"\", \".\", \"\", unix.MS_SLAVE|unix.MS_REC, \"\"); err != nil {\n\t\treturn err\n\t}\n\t// Perform the unmount. MNT_DETACH allows us to unmount /proc/self/cwd.\n\tif err := unmount(\".\", unix.MNT_DETACH); err != nil {\n\t\treturn err\n\t}\n\n\t// Switch back to our shiny new root.\n\tif err := unix.Chdir(\"/\"); err != nil {\n\t\treturn &os.PathError{Op: \"chdir\", Path: \"/\", Err: err}\n\t}\n\treturn nil\n}\n\nfunc msMoveRoot(rootfs string) error {\n\t// Before we move the root and chroot we have to mask all \"full\" sysfs and\n\t// procfs mounts which exist on the host. This is because while the kernel\n\t// has protections against mounting procfs if it has masks, when using\n\t// chroot(2) the *host* procfs mount is still reachable in the mount\n\t// namespace and the kernel permits procfs mounts inside --no-pivot\n\t// containers.\n\t//\n\t// Users shouldn't be using --no-pivot except in exceptional circumstances,\n\t// but to avoid such a trivial security flaw we apply a best-effort\n\t// protection here. The kernel only allows a mount of a pseudo-filesystem\n\t// like procfs or sysfs if there is a *full* mount (the root of the\n\t// filesystem is mounted) without any other locked mount points covering a\n\t// subtree of the mount.\n\t//\n\t// So we try to unmount (or mount tmpfs on top of) any mountpoint which is\n\t// a full mount of either sysfs or procfs (since those are the most\n\t// concerning filesystems to us).\n\tmountinfos, err := mountinfo.GetMounts(func(info *mountinfo.Info) (skip, stop bool) {\n\t\t// Collect every sysfs and procfs filesystem, except for those which\n\t\t// are non-full mounts or are inside the rootfs of the container.\n\t\tif info.Root != \"/\" ||\n\t\t\t(info.FSType != \"proc\" && info.FSType != \"sysfs\") ||\n\t\t\tstrings.HasPrefix(info.Mountpoint, rootfs) {\n\t\t\tskip = true\n\t\t}\n\t\treturn skip, stop\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor _, info := range mountinfos {\n\t\tp := info.Mountpoint\n\t\t// Be sure umount events are not propagated to the host.\n\t\tif err := mount(\"\", p, \"\", unix.MS_SLAVE|unix.MS_REC, \"\"); err != nil {\n\t\t\tif errors.Is(err, unix.ENOENT) {\n\t\t\t\t// If the mountpoint doesn't exist that means that we've\n\t\t\t\t// already blasted away some parent directory of the mountpoint\n\t\t\t\t// and so we don't care about this error.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\tif err := unmount(p, unix.MNT_DETACH); err != nil {\n\t\t\tif !errors.Is(err, unix.EINVAL) && !errors.Is(err, unix.EPERM) {\n\t\t\t\treturn err\n\t\t\t} else {\n\t\t\t\t// If we have not privileges for umounting (e.g. rootless), then\n\t\t\t\t// cover the path.\n\t\t\t\tif err := mount(\"tmpfs\", p, \"tmpfs\", 0, \"\"); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Move the rootfs on top of \"/\" in our mount namespace.\n\tif err := mount(rootfs, \"/\", \"\", unix.MS_MOVE, \"\"); err != nil {\n\t\treturn err\n\t}\n\treturn chroot()\n}\n\nfunc chroot() error {\n\tif err := unix.Chroot(\".\"); err != nil {\n\t\treturn &os.PathError{Op: \"chroot\", Path: \".\", Err: err}\n\t}\n\tif err := unix.Chdir(\"/\"); err != nil {\n\t\treturn &os.PathError{Op: \"chdir\", Path: \"/\", Err: err}\n\t}\n\treturn nil\n}\n\n// readonlyPath will make a path read only.\nfunc readonlyPath(path string) error {\n\tif err := mount(path, path, \"\", unix.MS_BIND|unix.MS_REC, \"\"); err != nil {\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\n\tvar s unix.Statfs_t\n\tif err := unix.Statfs(path, &s); err != nil {\n\t\treturn &os.PathError{Op: \"statfs\", Path: path, Err: err}\n\t}\n\tflags := uintptr(s.Flags) & (unix.MS_NOSUID | unix.MS_NODEV | unix.MS_NOEXEC)\n\n\tif err := mount(path, path, \"\", flags|unix.MS_BIND|unix.MS_REMOUNT|unix.MS_RDONLY, \"\"); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// remountReadonly will remount an existing mount point and ensure that it is read-only.\nfunc remountReadonly(m *configs.Mount) error {\n\tvar (\n\t\tdest  = m.Destination\n\t\tflags = m.Flags\n\t)\n\tfor range 5 {\n\t\t// There is a special case in the kernel for\n\t\t// MS_REMOUNT | MS_BIND, which allows us to change only the\n\t\t// flags even as an unprivileged user (i.e. user namespace)\n\t\t// assuming we don't drop any security related flags (nodev,\n\t\t// nosuid, etc.). So, let's use that case so that we can do\n\t\t// this re-mount without failing in a userns.\n\t\tflags |= unix.MS_REMOUNT | unix.MS_BIND | unix.MS_RDONLY\n\t\tif err := mount(\"\", dest, \"\", uintptr(flags), \"\"); err != nil {\n\t\t\tif errors.Is(err, unix.EBUSY) {\n\t\t\t\ttime.Sleep(100 * time.Millisecond)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(\"unable to mount %s as readonly max retries reached\", dest)\n}\n\nfunc isDevNull(st *unix.Stat_t) bool {\n\t//nolint:unconvert // Rdev is uint32 on MIPS.\n\treturn st.Mode&unix.S_IFMT == unix.S_IFCHR && uint64(st.Rdev) == unix.Mkdev(1, 3)\n}\n\nfunc verifyDevNull(f *os.File) error {\n\treturn sys.VerifyInode(f, func(st *unix.Stat_t, _ *unix.Statfs_t) error {\n\t\tif !isDevNull(st) {\n\t\t\treturn errors.New(\"container's /dev/null is invalid\")\n\t\t}\n\t\treturn nil\n\t})\n}\n\n// maskPaths masks the top of the specified paths inside a container to avoid\n// security issues from processes reading information from non-namespace aware\n// mounts ( proc/kcore ).\n// For files, maskPath bind mounts /dev/null over the top of the specified path.\n// For directories, maskPath mounts read-only tmpfs over the top of the specified path.\nfunc maskPaths(paths []string, mountLabel string) error {\n\tdevNull, err := os.OpenFile(\"/dev/null\", unix.O_PATH, 0)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"can't mask paths: %w\", err)\n\t}\n\tdefer devNull.Close()\n\tif err := verifyDevNull(devNull); err != nil {\n\t\treturn fmt.Errorf(\"can't mask paths: %w\", err)\n\t}\n\tdevNullSrc := &mountSource{Type: mountSourcePlain, file: devNull}\n\tprocSelfFd, closer := utils.ProcThreadSelf(\"fd/\")\n\tdefer closer()\n\n\tfor _, path := range paths {\n\t\t// Open the target path; skip if it doesn't exist.\n\t\tdstFh, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC, 0)\n\t\tif err != nil {\n\t\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"can't mask path %q: %w\", path, err)\n\t\t}\n\t\tst, err := dstFh.Stat()\n\t\tif err != nil {\n\t\t\tdstFh.Close()\n\t\t\treturn fmt.Errorf(\"can't mask path %q: %w\", path, err)\n\t\t}\n\t\tvar dstType string\n\t\tif st.IsDir() {\n\t\t\t// Destination is a directory: bind mount a ro tmpfs over it.\n\t\t\tdstType = \"dir\"\n\t\t\terr = mount(\"tmpfs\", path, \"tmpfs\", unix.MS_RDONLY, label.FormatMountLabel(\"\", mountLabel))\n\t\t} else {\n\t\t\t// Destination is a file: mount it to /dev/null.\n\t\t\tdstType = \"path\"\n\t\t\tdstFd := filepath.Join(procSelfFd, strconv.Itoa(int(dstFh.Fd())))\n\t\t\terr = mountViaFds(\"\", devNullSrc, path, dstFd, \"\", unix.MS_BIND, \"\")\n\t\t}\n\t\tdstFh.Close()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"can't mask %s %q: %w\", dstType, path, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc reopenAfterMount(rootfs string, f *os.File, flags int) (_ *os.File, Err error) {\n\tfullPath, err := procfs.ProcSelfFdReadlink(f)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get full path: %w\", err)\n\t}\n\tif !pathrs.IsLexicallyInRoot(rootfs, fullPath) {\n\t\treturn nil, fmt.Errorf(\"mountpoint %q is outside of rootfs %q\", fullPath, rootfs)\n\t}\n\tunsafePath := pathrs.LexicallyStripRoot(rootfs, fullPath)\n\treopened, err := pathrs.OpenInRoot(rootfs, unsafePath, flags)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"re-open mountpoint %q: %w\", unsafePath, err)\n\t}\n\tdefer func() {\n\t\tif Err != nil {\n\t\t\t_ = reopened.Close()\n\t\t}\n\t}()\n\n\t// NOTE: The best we can do here is confirm that the new mountpoint handle\n\t// matches the original target handle, but an attacker could've swapped a\n\t// different path to replace it. In the worst case this could result in us\n\t// applying later vfsmount flags onto the wrong mount.\n\t//\n\t// This is far from ideal, but the only way of doing this in a race-free\n\t// way is to switch the new mount API (move_mount(2) does not require this\n\t// re-opening step, and thus no such races are possible).\n\treopenedFullPath, err := procfs.ProcSelfFdReadlink(reopened)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"check full path of re-opened mountpoint: %w\", err)\n\t}\n\tif reopenedFullPath != fullPath {\n\t\treturn nil, fmt.Errorf(\"mountpoint %q was moved while re-opening\", unsafePath)\n\t}\n\treturn reopened, nil\n}\n\n// Do the mount operation followed by additional mounts required to take care\n// of propagation flags. This will always be scoped inside the container rootfs.\nfunc (m *mountEntry) mountPropagate(rootfs, mountLabel string) error {\n\tvar (\n\t\tdata  = label.FormatMountLabel(m.Data, mountLabel)\n\t\tflags = m.Flags\n\t)\n\t// Delay mounting the filesystem read-only if we need to do further\n\t// operations on it. We need to set up files in \"/dev\", and other tmpfs\n\t// mounts may need to be chmod-ed after mounting. These mounts will be\n\t// remounted ro later in finalizeRootfs(), if necessary.\n\tif m.Device == \"tmpfs\" || pathrs.LexicallyCleanPath(m.Destination) == \"/dev\" {\n\t\tflags &= ^unix.MS_RDONLY\n\t}\n\n\tif err := utils.WithProcfdFile(m.dstFile, func(dstFd string) error {\n\t\treturn mountViaFds(m.Source, m.srcFile, m.Destination, dstFd, m.Device, uintptr(flags), data)\n\t}); err != nil {\n\t\treturn err\n\t}\n\n\t// We need to re-open the mountpoint after doing the mount, in order for us\n\t// to operate on the new mount we just created. However, we cannot use\n\t// pathrs.Reopen because we need to re-resolve from the parent directory to\n\t// get a new handle to the top mount.\n\t//\n\t// TODO: Use move_mount(2) on newer kernels so that this is no longer\n\t// necessary on modern systems.\n\tnewDstFile, err := reopenAfterMount(rootfs, m.dstFile, unix.O_PATH)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"reopen mountpoint after mount: %w\", err)\n\t}\n\t_ = m.dstFile.Close()\n\tm.dstFile = newDstFile\n\n\t// Apply the propagation flags on the new mount.\n\tif err := utils.WithProcfdFile(m.dstFile, func(dstFd string) error {\n\t\tfor _, pflag := range m.PropagationFlags {\n\t\t\tif err := mountViaFds(\"\", nil, m.Destination, dstFd, \"\", uintptr(pflag), \"\"); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}); err != nil {\n\t\treturn fmt.Errorf(\"change mount propagation through procfd: %w\", err)\n\t}\n\treturn nil\n}\n\nfunc setRecAttr(m mountEntry) error {\n\tif m.RecAttr == nil {\n\t\treturn nil\n\t}\n\treturn utils.WithProcfdFile(m.dstFile, func(procfd string) error {\n\t\treturn unix.MountSetattr(-1, procfd, unix.AT_RECURSIVE, m.RecAttr)\n\t})\n}\n"
  },
  {
    "path": "libcontainer/rootfs_linux_test.go",
    "content": "package libcontainer\n\nimport (\n\t\"testing\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc TestCheckMountDestInProc(t *testing.T) {\n\tm := mountEntry{\n\t\tMount: &configs.Mount{\n\t\t\tDestination: \"/proc/sys\",\n\t\t\tSource:      \"/proc/sys\",\n\t\t\tDevice:      \"bind\",\n\t\t\tFlags:       unix.MS_BIND,\n\t\t},\n\t}\n\tdest := \"/rootfs/proc/sys\"\n\terr := checkProcMount(\"/rootfs\", dest, m)\n\tif err == nil {\n\t\tt.Fatal(\"destination inside proc should return an error\")\n\t}\n}\n\nfunc TestCheckProcMountOnProc(t *testing.T) {\n\tm := mountEntry{\n\t\tMount: &configs.Mount{\n\t\t\tDestination: \"/proc\",\n\t\t\tSource:      \"foo\",\n\t\t\tDevice:      \"proc\",\n\t\t},\n\t}\n\tdest := \"/rootfs/proc/\"\n\terr := checkProcMount(\"/rootfs\", dest, m)\n\tif err != nil {\n\t\tt.Fatalf(\"procfs type mount on /proc should not return an error: %v\", err)\n\t}\n}\n\nfunc TestCheckBindMountOnProc(t *testing.T) {\n\tm := mountEntry{\n\t\tMount: &configs.Mount{\n\t\t\tDestination: \"/proc\",\n\t\t\tSource:      \"/proc/self\",\n\t\t\tDevice:      \"bind\",\n\t\t\tFlags:       unix.MS_BIND,\n\t\t},\n\t}\n\tdest := \"/rootfs/proc/\"\n\terr := checkProcMount(\"/rootfs\", dest, m)\n\tif err != nil {\n\t\tt.Fatalf(\"bind-mount of procfs on top of /proc should not return an error (for now): %v\", err)\n\t}\n}\n\nfunc TestCheckTrickyMountOnProc(t *testing.T) {\n\t// Make a non-bind mount that looks like a bit like a bind-mount.\n\tm := mountEntry{\n\t\tMount: &configs.Mount{\n\t\t\tDestination: \"/proc\",\n\t\t\tSource:      \"/proc\",\n\t\t\tDevice:      \"overlay\",\n\t\t\tData:        \"lowerdir=/tmp/fakeproc,upperdir=/tmp/fakeproc2,workdir=/tmp/work\",\n\t\t},\n\t}\n\tdest := \"/rootfs/proc/\"\n\terr := checkProcMount(\"/rootfs\", dest, m)\n\tif err == nil {\n\t\tt.Fatalf(\"dodgy overlayfs mount on top of /proc should return an error\")\n\t}\n}\n\nfunc TestCheckTrickyBindMountOnProc(t *testing.T) {\n\t// Make a bind mount that looks like it might be a procfs mount.\n\tm := mountEntry{\n\t\tMount: &configs.Mount{\n\t\t\tDestination: \"/proc\",\n\t\t\tSource:      \"/sys\",\n\t\t\tDevice:      \"proc\",\n\t\t\tFlags:       unix.MS_BIND,\n\t\t},\n\t}\n\tdest := \"/rootfs/proc/\"\n\terr := checkProcMount(\"/rootfs\", dest, m)\n\tif err == nil {\n\t\tt.Fatalf(\"dodgy bind-mount on top of /proc should return an error\")\n\t}\n}\n\nfunc TestCheckMountDestInSys(t *testing.T) {\n\tm := mountEntry{\n\t\tMount: &configs.Mount{\n\t\t\tDestination: \"/sys/fs/cgroup\",\n\t\t\tSource:      \"tmpfs\",\n\t\t\tDevice:      \"tmpfs\",\n\t\t},\n\t}\n\tdest := \"/rootfs//sys/fs/cgroup\"\n\terr := checkProcMount(\"/rootfs\", dest, m)\n\tif err != nil {\n\t\tt.Fatalf(\"destination inside /sys should not return an error: %v\", err)\n\t}\n}\n\nfunc TestCheckMountDestFalsePositive(t *testing.T) {\n\tm := mountEntry{\n\t\tMount: &configs.Mount{\n\t\t\tDestination: \"/sysfiles/fs/cgroup\",\n\t\t\tSource:      \"tmpfs\",\n\t\t\tDevice:      \"tmpfs\",\n\t\t},\n\t}\n\tdest := \"/rootfs/sysfiles/fs/cgroup\"\n\terr := checkProcMount(\"/rootfs\", dest, m)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n}\n\nfunc TestCheckMountDestNsLastPid(t *testing.T) {\n\tm := mountEntry{\n\t\tMount: &configs.Mount{\n\t\t\tDestination: \"/proc/sys/kernel/ns_last_pid\",\n\t\t\tSource:      \"lxcfs\",\n\t\t\tDevice:      \"fuse.lxcfs\",\n\t\t},\n\t}\n\tdest := \"/rootfs/proc/sys/kernel/ns_last_pid\"\n\terr := checkProcMount(\"/rootfs\", dest, m)\n\tif err != nil {\n\t\tt.Fatalf(\"/proc/sys/kernel/ns_last_pid should not return an error: %v\", err)\n\t}\n}\n\nfunc TestCheckCryptoFipsEnabled(t *testing.T) {\n\tm := mountEntry{\n\t\tMount: &configs.Mount{\n\t\t\tDestination: \"/proc/sys/crypto/fips_enabled\",\n\t\t\tSource:      \"tmpfs\",\n\t\t\tDevice:      \"tmpfs\",\n\t\t},\n\t}\n\tdest := \"/rootfs/proc/sys/crypto/fips_enabled\"\n\terr := checkProcMount(\"/rootfs\", dest, m)\n\tif err != nil {\n\t\tt.Fatalf(\"/proc/sys/crypto/fips_enabled should not return an error: %v\", err)\n\t}\n}\n\nfunc TestNeedsSetupDev(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tMounts: []*configs.Mount{\n\t\t\t{\n\t\t\t\tDevice:      \"bind\",\n\t\t\t\tSource:      \"/dev\",\n\t\t\t\tDestination: \"/dev\",\n\t\t\t},\n\t\t},\n\t}\n\tif needsSetupDev(config) {\n\t\tt.Fatal(\"expected needsSetupDev to be false, got true\")\n\t}\n}\n\nfunc TestNeedsSetupDevStrangeSource(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tMounts: []*configs.Mount{\n\t\t\t{\n\t\t\t\tDevice:      \"bind\",\n\t\t\t\tSource:      \"/devx\",\n\t\t\t\tDestination: \"/dev\",\n\t\t\t},\n\t\t},\n\t}\n\tif needsSetupDev(config) {\n\t\tt.Fatal(\"expected needsSetupDev to be false, got true\")\n\t}\n}\n\nfunc TestNeedsSetupDevStrangeDest(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tMounts: []*configs.Mount{\n\t\t\t{\n\t\t\t\tDevice:      \"bind\",\n\t\t\t\tSource:      \"/dev\",\n\t\t\t\tDestination: \"/devx\",\n\t\t\t},\n\t\t},\n\t}\n\tif !needsSetupDev(config) {\n\t\tt.Fatal(\"expected needsSetupDev to be true, got false\")\n\t}\n}\n\nfunc TestNeedsSetupDevStrangeSourceDest(t *testing.T) {\n\tconfig := &configs.Config{\n\t\tMounts: []*configs.Mount{\n\t\t\t{\n\t\t\t\tDevice:      \"bind\",\n\t\t\t\tSource:      \"/devx\",\n\t\t\t\tDestination: \"/devx\",\n\t\t\t},\n\t\t},\n\t}\n\tif !needsSetupDev(config) {\n\t\tt.Fatal(\"expected needsSetupDev to be true, got false\")\n\t}\n}\n"
  },
  {
    "path": "libcontainer/seccomp/config.go",
    "content": "package seccomp\n\nimport (\n\t\"fmt\"\n\t\"maps\"\n\t\"slices\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n)\n\n// flagTsync is recognized but ignored by runc, and it is not defined\n// in the runtime-spec.\nconst flagTsync = \"SECCOMP_FILTER_FLAG_TSYNC\"\n\nvar operators = map[string]configs.Operator{\n\t\"SCMP_CMP_NE\":        configs.NotEqualTo,\n\t\"SCMP_CMP_LT\":        configs.LessThan,\n\t\"SCMP_CMP_LE\":        configs.LessThanOrEqualTo,\n\t\"SCMP_CMP_EQ\":        configs.EqualTo,\n\t\"SCMP_CMP_GE\":        configs.GreaterThanOrEqualTo,\n\t\"SCMP_CMP_GT\":        configs.GreaterThan,\n\t\"SCMP_CMP_MASKED_EQ\": configs.MaskEqualTo,\n}\n\n// KnownOperators returns the list of the known operations.\n// Used by `runc features`.\nfunc KnownOperators() []string {\n\treturn slices.Sorted(maps.Keys(operators))\n}\n\nvar actions = map[string]configs.Action{\n\t\"SCMP_ACT_KILL\":         configs.Kill,\n\t\"SCMP_ACT_ERRNO\":        configs.Errno,\n\t\"SCMP_ACT_TRAP\":         configs.Trap,\n\t\"SCMP_ACT_ALLOW\":        configs.Allow,\n\t\"SCMP_ACT_TRACE\":        configs.Trace,\n\t\"SCMP_ACT_LOG\":          configs.Log,\n\t\"SCMP_ACT_NOTIFY\":       configs.Notify,\n\t\"SCMP_ACT_KILL_THREAD\":  configs.KillThread,\n\t\"SCMP_ACT_KILL_PROCESS\": configs.KillProcess,\n}\n\n// KnownActions returns the list of the known actions.\n// Used by `runc features`.\nfunc KnownActions() []string {\n\treturn slices.Sorted(maps.Keys(actions))\n}\n\nvar archs = map[string]string{\n\t\"SCMP_ARCH_X86\":         \"x86\",\n\t\"SCMP_ARCH_X86_64\":      \"amd64\",\n\t\"SCMP_ARCH_X32\":         \"x32\",\n\t\"SCMP_ARCH_ARM\":         \"arm\",\n\t\"SCMP_ARCH_AARCH64\":     \"arm64\",\n\t\"SCMP_ARCH_MIPS\":        \"mips\",\n\t\"SCMP_ARCH_MIPS64\":      \"mips64\",\n\t\"SCMP_ARCH_MIPS64N32\":   \"mips64n32\",\n\t\"SCMP_ARCH_MIPSEL\":      \"mipsel\",\n\t\"SCMP_ARCH_MIPSEL64\":    \"mipsel64\",\n\t\"SCMP_ARCH_MIPSEL64N32\": \"mipsel64n32\",\n\t\"SCMP_ARCH_PPC\":         \"ppc\",\n\t\"SCMP_ARCH_PPC64\":       \"ppc64\",\n\t\"SCMP_ARCH_PPC64LE\":     \"ppc64le\",\n\t\"SCMP_ARCH_RISCV64\":     \"riscv64\",\n\t\"SCMP_ARCH_S390\":        \"s390\",\n\t\"SCMP_ARCH_S390X\":       \"s390x\",\n\t\"SCMP_ARCH_LOONGARCH64\": \"loong64\",\n}\n\n// KnownArchs returns the list of the known archs.\n// Used by `runc features`.\nfunc KnownArchs() []string {\n\treturn slices.Sorted(maps.Keys(archs))\n}\n\n// ConvertStringToOperator converts a string into a Seccomp comparison operator.\n// Comparison operators use the names they are assigned by Libseccomp's header.\n// Attempting to convert a string that is not a valid operator results in an\n// error.\nfunc ConvertStringToOperator(in string) (configs.Operator, error) {\n\tif op, ok := operators[in]; ok {\n\t\treturn op, nil\n\t}\n\treturn 0, fmt.Errorf(\"string %s is not a valid operator for seccomp\", in)\n}\n\n// ConvertStringToAction converts a string into a Seccomp rule match action.\n// Actions use the names they are assigned in Libseccomp's header.\n// Attempting to convert a string that is not a valid action results in an\n// error.\nfunc ConvertStringToAction(in string) (configs.Action, error) {\n\tif act, ok := actions[in]; ok {\n\t\treturn act, nil\n\t}\n\treturn 0, fmt.Errorf(\"string %s is not a valid action for seccomp\", in)\n}\n\n// ConvertStringToArch converts a string into a Seccomp comparison arch.\nfunc ConvertStringToArch(in string) (string, error) {\n\tif arch, ok := archs[in]; ok {\n\t\treturn arch, nil\n\t}\n\treturn \"\", fmt.Errorf(\"string %s is not a valid arch for seccomp\", in)\n}\n\n// List of flags known to this version of runc.\nvar flags = []string{\n\tflagTsync,\n\tstring(specs.LinuxSeccompFlagSpecAllow),\n\tstring(specs.LinuxSeccompFlagLog),\n\tstring(specs.LinuxSeccompFlagWaitKillableRecv),\n}\n\n// KnownFlags returns the list of the known filter flags.\n// Used by `runc features`.\nfunc KnownFlags() []string {\n\treturn flags\n}\n\n// SupportedFlags returns the list of the supported filter flags.\n// This list may be a subset of one returned by KnownFlags due to\n// some flags not supported by the current kernel and/or libseccomp.\n// Used by `runc features`.\nfunc SupportedFlags() []string {\n\tif !Enabled {\n\t\treturn nil\n\t}\n\n\tvar res []string\n\tfor _, flag := range flags {\n\t\tif FlagSupported(specs.LinuxSeccompFlag(flag)) == nil {\n\t\t\tres = append(res, flag)\n\t\t}\n\t}\n\n\treturn res\n}\n"
  },
  {
    "path": "libcontainer/seccomp/doc.go",
    "content": "// Package seccomp provides runc-specific helpers for loading and managing\n// seccomp profiles.\npackage seccomp\n"
  },
  {
    "path": "libcontainer/seccomp/patchbpf/doc.go",
    "content": "// Package patchbpf provides utilities for patching libseccomp-generated cBPF\n// programs in order to handle unknown syscalls and ENOSYS more gracefully.\npackage patchbpf\n"
  },
  {
    "path": "libcontainer/seccomp/patchbpf/enosys_linux.go",
    "content": "//go:build cgo && seccomp\n\npackage patchbpf\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"runtime\"\n\t\"unsafe\"\n\n\tlibseccomp \"github.com/seccomp/libseccomp-golang\"\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/net/bpf\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n)\n\n// #cgo pkg-config: libseccomp\n/*\n#include <errno.h>\n#include <stdint.h>\n#include <seccomp.h>\n#include <linux/seccomp.h>\n\nconst uint32_t C_ACT_ERRNO_ENOSYS = SCMP_ACT_ERRNO(ENOSYS);\n\n// Copied from <linux/seccomp.h>.\n\n#ifndef SECCOMP_SET_MODE_FILTER\n#\tdefine SECCOMP_SET_MODE_FILTER 1\n#endif\nconst uintptr_t C_SET_MODE_FILTER = SECCOMP_SET_MODE_FILTER;\n\n#ifndef SECCOMP_FILTER_FLAG_LOG\n#\tdefine SECCOMP_FILTER_FLAG_LOG (1UL << 1)\n#endif\nconst uintptr_t C_FILTER_FLAG_LOG = SECCOMP_FILTER_FLAG_LOG;\n\n#ifndef SECCOMP_FILTER_FLAG_SPEC_ALLOW\n#\tdefine SECCOMP_FILTER_FLAG_SPEC_ALLOW (1UL << 2)\n#endif\nconst uintptr_t C_FILTER_FLAG_SPEC_ALLOW = SECCOMP_FILTER_FLAG_SPEC_ALLOW;\n\n#ifndef SECCOMP_FILTER_FLAG_NEW_LISTENER\n#\tdefine SECCOMP_FILTER_FLAG_NEW_LISTENER (1UL << 3)\n#endif\nconst uintptr_t C_FILTER_FLAG_NEW_LISTENER = SECCOMP_FILTER_FLAG_NEW_LISTENER;\n\n#ifndef SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV\n#\tdefine SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV (1UL << 5)\n#endif\nconst uintptr_t C_FILTER_FLAG_WAIT_KILLABLE_RECV = SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV;\n\n#ifndef AUDIT_ARCH_RISCV64\n#ifndef EM_RISCV\n#define EM_RISCV\t\t243\n#endif\n#define AUDIT_ARCH_RISCV64\t(EM_RISCV|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)\n#endif\n\n// TODO: If loongarch support is not fully merged, at some point we will want to remove this.\n#ifndef AUDIT_ARCH_LOONGARCH64\n#ifndef EM_LOONGARCH\n#define EM_LOONGARCH\t\t258\n#endif\n#define AUDIT_ARCH_LOONGARCH64\t(EM_LOONGARCH|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)\n#endif\n\n// We use the AUDIT_ARCH_* values because those are the ones used by the kernel\n// and SCMP_ARCH_* sometimes has fake values (such as SCMP_ARCH_X32). But we\n// use <seccomp.h> so we get libseccomp's fallback definitions of AUDIT_ARCH_*.\n\nconst uint32_t C_AUDIT_ARCH_I386         = AUDIT_ARCH_I386;\nconst uint32_t C_AUDIT_ARCH_X86_64       = AUDIT_ARCH_X86_64;\nconst uint32_t C_AUDIT_ARCH_ARM          = AUDIT_ARCH_ARM;\nconst uint32_t C_AUDIT_ARCH_AARCH64      = AUDIT_ARCH_AARCH64;\nconst uint32_t C_AUDIT_ARCH_MIPS         = AUDIT_ARCH_MIPS;\nconst uint32_t C_AUDIT_ARCH_MIPS64       = AUDIT_ARCH_MIPS64;\nconst uint32_t C_AUDIT_ARCH_MIPS64N32    = AUDIT_ARCH_MIPS64N32;\nconst uint32_t C_AUDIT_ARCH_MIPSEL       = AUDIT_ARCH_MIPSEL;\nconst uint32_t C_AUDIT_ARCH_MIPSEL64     = AUDIT_ARCH_MIPSEL64;\nconst uint32_t C_AUDIT_ARCH_MIPSEL64N32  = AUDIT_ARCH_MIPSEL64N32;\nconst uint32_t C_AUDIT_ARCH_PPC          = AUDIT_ARCH_PPC;\nconst uint32_t C_AUDIT_ARCH_PPC64        = AUDIT_ARCH_PPC64;\nconst uint32_t C_AUDIT_ARCH_PPC64LE      = AUDIT_ARCH_PPC64LE;\nconst uint32_t C_AUDIT_ARCH_S390         = AUDIT_ARCH_S390;\nconst uint32_t C_AUDIT_ARCH_S390X        = AUDIT_ARCH_S390X;\nconst uint32_t C_AUDIT_ARCH_RISCV64      = AUDIT_ARCH_RISCV64;\nconst uint32_t C_AUDIT_ARCH_LOONGARCH64  = AUDIT_ARCH_LOONGARCH64; //nolint:godot // C code, not Go comment.\n*/\nimport \"C\"\n\nvar retErrnoEnosys = uint32(C.C_ACT_ERRNO_ENOSYS)\n\n// Assume sizeof(int) == 4 in the BPF program.\nconst bpfSizeofInt = 4\n\n// This syscall is used for multiplexing \"large\" syscalls on s390(x). Unknown\n// syscalls will end up with this syscall number, so we need to explicitly\n// return -ENOSYS for this syscall on those architectures.\nconst s390xMultiplexSyscall libseccomp.ScmpSyscall = 0\n\nfunc isAllowAction(action configs.Action) bool {\n\tswitch action {\n\t// Trace is considered an \"allow\" action because a good tracer should\n\t// support future syscalls (by handling -ENOSYS on its own), and giving\n\t// -ENOSYS will be disruptive for emulation.\n\tcase configs.Allow, configs.Log, configs.Trace:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc parseProgram(rdr io.Reader) ([]bpf.RawInstruction, error) {\n\tvar program []bpf.RawInstruction\n\tfor {\n\t\t// Read the next instruction. We have to use NativeEndian because\n\t\t// seccomp_export_bpf outputs the program in *host* endian-ness.\n\t\tvar insn unix.SockFilter\n\t\tif err := binary.Read(rdr, binary.NativeEndian, &insn); err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Parsing complete.\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif errors.Is(err, io.ErrUnexpectedEOF) {\n\t\t\t\t// Parsing stopped mid-instruction.\n\t\t\t\treturn nil, fmt.Errorf(\"program parsing halted mid-instruction: %w\", err)\n\t\t\t}\n\t\t\t// All other errors.\n\t\t\treturn nil, fmt.Errorf(\"error parsing instructions: %w\", err)\n\t\t}\n\t\tprogram = append(program, bpf.RawInstruction{\n\t\t\tOp: insn.Code,\n\t\t\tJt: insn.Jt,\n\t\t\tJf: insn.Jf,\n\t\t\tK:  insn.K,\n\t\t})\n\t}\n\treturn program, nil\n}\n\nfunc disassembleFilter(filter *libseccomp.ScmpFilter) ([]bpf.Instruction, error) {\n\trdr, wtr, err := os.Pipe()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error creating scratch pipe: %w\", err)\n\t}\n\tdefer wtr.Close()\n\tdefer rdr.Close()\n\n\treaderBuffer := new(bytes.Buffer)\n\terrChan := make(chan error, 1)\n\tgo func() {\n\t\t_, err := io.Copy(readerBuffer, rdr)\n\t\terrChan <- err\n\t\tclose(errChan)\n\t}()\n\n\tif err := filter.ExportBPF(wtr); err != nil {\n\t\treturn nil, fmt.Errorf(\"error exporting BPF: %w\", err)\n\t}\n\t// Close so that the reader actually gets EOF.\n\t_ = wtr.Close()\n\n\tif copyErr := <-errChan; copyErr != nil {\n\t\treturn nil, fmt.Errorf(\"error reading from ExportBPF pipe: %w\", copyErr)\n\t}\n\n\t// Parse the instructions.\n\trawProgram, err := parseProgram(readerBuffer)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"parsing generated BPF filter: %w\", err)\n\t}\n\tprogram, ok := bpf.Disassemble(rawProgram)\n\tif !ok {\n\t\treturn nil, errors.New(\"could not disassemble entire BPF filter\")\n\t}\n\treturn program, nil\n}\n\ntype linuxAuditArch uint32\n\nconst invalidArch linuxAuditArch = 0\n\nfunc scmpArchToAuditArch(arch libseccomp.ScmpArch) (linuxAuditArch, error) {\n\tswitch arch {\n\tcase libseccomp.ArchNative:\n\t\t// Convert to actual native architecture.\n\t\tarch, err := libseccomp.GetNativeArch()\n\t\tif err != nil {\n\t\t\treturn invalidArch, fmt.Errorf(\"unable to get native arch: %w\", err)\n\t\t}\n\t\treturn scmpArchToAuditArch(arch)\n\tcase libseccomp.ArchX86:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_I386), nil\n\tcase libseccomp.ArchAMD64, libseccomp.ArchX32:\n\t\t// NOTE: x32 is treated like x86_64 except all x32 syscalls have the\n\t\t//       30th bit of the syscall number set to indicate that it's not a\n\t\t//       normal x86_64 syscall.\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_X86_64), nil\n\tcase libseccomp.ArchARM:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_ARM), nil\n\tcase libseccomp.ArchARM64:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_AARCH64), nil\n\tcase libseccomp.ArchMIPS:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_MIPS), nil\n\tcase libseccomp.ArchMIPS64:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_MIPS64), nil\n\tcase libseccomp.ArchMIPS64N32:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_MIPS64N32), nil\n\tcase libseccomp.ArchMIPSEL:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_MIPSEL), nil\n\tcase libseccomp.ArchMIPSEL64:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_MIPSEL64), nil\n\tcase libseccomp.ArchMIPSEL64N32:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_MIPSEL64N32), nil\n\tcase libseccomp.ArchPPC:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_PPC), nil\n\tcase libseccomp.ArchPPC64:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_PPC64), nil\n\tcase libseccomp.ArchPPC64LE:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_PPC64LE), nil\n\tcase libseccomp.ArchS390:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_S390), nil\n\tcase libseccomp.ArchS390X:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_S390X), nil\n\tcase libseccomp.ArchRISCV64:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_RISCV64), nil\n\tcase libseccomp.ArchLOONGARCH64:\n\t\treturn linuxAuditArch(C.C_AUDIT_ARCH_LOONGARCH64), nil\n\tdefault:\n\t\treturn invalidArch, fmt.Errorf(\"unknown architecture: %v\", arch)\n\t}\n}\n\ntype lastSyscallMap map[linuxAuditArch]map[libseccomp.ScmpArch]libseccomp.ScmpSyscall\n\n// Figure out largest syscall number referenced in the filter for each\n// architecture. We will be generating code based on the native architecture\n// representation, but SCMP_ARCH_X32 means we have to track cases where the\n// same architecture has different largest syscalls based on the mode.\nfunc findLastSyscalls(config *configs.Seccomp) (lastSyscallMap, error) {\n\tscmpArchs := make(map[libseccomp.ScmpArch]struct{})\n\tfor _, ociArch := range config.Architectures {\n\t\tarch, err := libseccomp.GetArchFromString(ociArch)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"unable to validate seccomp architecture: %w\", err)\n\t\t}\n\t\tscmpArchs[arch] = struct{}{}\n\t}\n\t// On architectures like ppc64le, Docker inexplicably doesn't include the\n\t// native architecture in the architecture list which results in no\n\t// architectures being present in the list at all (rendering the ENOSYS\n\t// stub a no-op). So, always include the native architecture.\n\tif nativeScmpArch, err := libseccomp.GetNativeArch(); err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to get native arch: %w\", err)\n\t} else if _, ok := scmpArchs[nativeScmpArch]; !ok {\n\t\tlogrus.Debugf(\"seccomp: adding implied native architecture %v to config set\", nativeScmpArch)\n\t\tscmpArchs[nativeScmpArch] = struct{}{}\n\t}\n\tlogrus.Debugf(\"seccomp: configured architecture set: %s\", scmpArchs)\n\n\t// Only loop over architectures which are present in the filter. Any other\n\t// architectures will get the libseccomp bad architecture action anyway.\n\tlastSyscalls := make(lastSyscallMap)\n\tfor arch := range scmpArchs {\n\t\tauditArch, err := scmpArchToAuditArch(arch)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"cannot map architecture %v to AUDIT_ARCH_ constant: %w\", arch, err)\n\t\t}\n\n\t\tif _, ok := lastSyscalls[auditArch]; !ok {\n\t\t\tlastSyscalls[auditArch] = map[libseccomp.ScmpArch]libseccomp.ScmpSyscall{}\n\t\t}\n\t\tif _, ok := lastSyscalls[auditArch][arch]; ok {\n\t\t\t// Because of ArchNative we may hit the same entry multiple times.\n\t\t\t// Just skip it if we've seen this (linuxAuditArch, ScmpArch)\n\t\t\t// combination before.\n\t\t\tcontinue\n\t\t}\n\n\t\t// Find the largest syscall in the filter for this architecture.\n\t\tvar largestSyscall libseccomp.ScmpSyscall\n\t\tfor _, rule := range config.Syscalls {\n\t\t\tsysno, err := libseccomp.GetSyscallFromNameByArch(rule.Name, arch)\n\t\t\tif err != nil {\n\t\t\t\t// Ignore unknown syscalls.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif sysno > largestSyscall {\n\t\t\t\tlargestSyscall = sysno\n\t\t\t}\n\t\t}\n\t\tif largestSyscall != 0 {\n\t\t\tlogrus.Debugf(\"seccomp: largest syscall number for arch %v is %v\", arch, largestSyscall)\n\t\t\tlastSyscalls[auditArch][arch] = largestSyscall\n\t\t} else {\n\t\t\tlogrus.Warnf(\"could not find any syscalls for arch %v\", arch)\n\t\t\tdelete(lastSyscalls[auditArch], arch)\n\t\t}\n\t}\n\treturn lastSyscalls, nil\n}\n\n// FIXME FIXME FIXME\n//\n// This solution is less than ideal. In the future it would be great to have\n// per-arch information about which syscalls were added in which kernel\n// versions so we can create far more accurate filter rules (handling holes in\n// the syscall table and determining -ENOSYS requirements based on kernel\n// minimum version alone.\n//\n// This implementation can in principle cause issues with syscalls like\n// close_range(2) which were added out-of-order in the syscall table between\n// kernel releases.\nfunc generateEnosysStub(lastSyscalls lastSyscallMap) ([]bpf.Instruction, error) {\n\t// A jump-table for each linuxAuditArch used to generate the initial\n\t// conditional jumps -- measured from the *END* of the program so they\n\t// remain valid after prepending to the tail.\n\tarchJumpTable := map[linuxAuditArch]uint32{}\n\n\t// Generate our own -ENOSYS rules for each architecture. They have to be\n\t// generated in reverse (prepended to the tail of the program) because the\n\t// JumpIf jumps need to be computed from the end of the program.\n\tprogramTail := []bpf.Instruction{\n\t\t// Fall-through rules jump into the filter.\n\t\tbpf.Jump{Skip: 1},\n\t\t// Rules which jump to here get -ENOSYS.\n\t\tbpf.RetConstant{Val: retErrnoEnosys},\n\t}\n\n\t// Generate the syscall -ENOSYS rules.\n\tfor auditArch, maxSyscalls := range lastSyscalls {\n\t\t// The number of instructions from the tail of this section which need\n\t\t// to be jumped in order to reach the -ENOSYS return. If the section\n\t\t// does not jump, it will fall through to the actual filter.\n\t\tbaseJumpEnosys := uint32(len(programTail) - 1)\n\t\tbaseJumpFilter := baseJumpEnosys + 1\n\n\t\t// Add the load instruction for the syscall number -- we jump here\n\t\t// directly from the arch code so we need to do it here. Sadly we can't\n\t\t// share this code between architecture branches.\n\t\tsection := []bpf.Instruction{\n\t\t\t// load [0] (syscall number)\n\t\t\tbpf.LoadAbsolute{Off: 0, Size: bpfSizeofInt},\n\t\t}\n\n\t\tswitch len(maxSyscalls) {\n\t\tcase 0:\n\t\t\t// No syscalls found for this arch -- skip it and move on.\n\t\t\tcontinue\n\t\tcase 1:\n\t\t\t// Get the only syscall and scmpArch in the map.\n\t\t\tvar (\n\t\t\t\tscmpArch libseccomp.ScmpArch\n\t\t\t\tsysno    libseccomp.ScmpSyscall\n\t\t\t)\n\t\t\tfor arch, no := range maxSyscalls {\n\t\t\t\tsysno = no\n\t\t\t\tscmpArch = arch\n\t\t\t}\n\n\t\t\tswitch scmpArch {\n\t\t\t// Return -ENOSYS for setup(2) on s390(x). This syscall is used for\n\t\t\t// multiplexing \"large syscall number\" syscalls, but if the syscall\n\t\t\t// number is not known to the kernel then the syscall number is\n\t\t\t// left unchanged (and because it is sysno=0, you'll end up with\n\t\t\t// EPERM for syscalls the kernel doesn't know about).\n\t\t\t//\n\t\t\t// The actual setup(2) syscall is never used by userspace anymore\n\t\t\t// (and hasn't existed for decades) outside of this multiplexing\n\t\t\t// scheme so returning -ENOSYS is fine.\n\t\t\tcase libseccomp.ArchS390, libseccomp.ArchS390X:\n\t\t\t\tsection = append(section, []bpf.Instruction{\n\t\t\t\t\t// jne [setup=0],1\n\t\t\t\t\tbpf.JumpIf{\n\t\t\t\t\t\tCond:     bpf.JumpNotEqual,\n\t\t\t\t\t\tVal:      uint32(s390xMultiplexSyscall),\n\t\t\t\t\t\tSkipTrue: 1,\n\t\t\t\t\t},\n\t\t\t\t\t// ret [ENOSYS]\n\t\t\t\t\tbpf.RetConstant{Val: retErrnoEnosys},\n\t\t\t\t}...)\n\t\t\t}\n\n\t\t\t// The simplest case just boils down to a single jgt instruction,\n\t\t\t// with special handling if baseJumpEnosys is larger than 255 (and\n\t\t\t// thus a long jump is required).\n\t\t\tvar sectionTail []bpf.Instruction\n\t\t\tif baseJumpEnosys+1 <= 255 {\n\t\t\t\tsectionTail = []bpf.Instruction{\n\t\t\t\t\t// jgt [syscall],[baseJumpEnosys+1]\n\t\t\t\t\tbpf.JumpIf{\n\t\t\t\t\t\tCond:     bpf.JumpGreaterThan,\n\t\t\t\t\t\tVal:      uint32(sysno),\n\t\t\t\t\t\tSkipTrue: uint8(baseJumpEnosys + 1),\n\t\t\t\t\t},\n\t\t\t\t\t// ja [baseJumpFilter]\n\t\t\t\t\tbpf.Jump{Skip: baseJumpFilter},\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsectionTail = []bpf.Instruction{\n\t\t\t\t\t// jle [syscall],1\n\t\t\t\t\tbpf.JumpIf{Cond: bpf.JumpLessOrEqual, Val: uint32(sysno), SkipTrue: 1},\n\t\t\t\t\t// ret [ENOSYS]\n\t\t\t\t\tbpf.RetConstant{Val: retErrnoEnosys},\n\t\t\t\t\t// ja [baseJumpFilter]\n\t\t\t\t\tbpf.Jump{Skip: baseJumpFilter},\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we're on x86 we need to add a check for x32 and if we're in\n\t\t\t// the wrong mode we jump over the section.\n\t\t\tif uint32(auditArch) == uint32(C.C_AUDIT_ARCH_X86_64) {\n\t\t\t\t// Generate a prefix to check the mode.\n\t\t\t\tswitch scmpArch {\n\t\t\t\tcase libseccomp.ArchAMD64:\n\t\t\t\t\tsectionTail = append([]bpf.Instruction{\n\t\t\t\t\t\t// jset (1<<30),[len(tail)-1]\n\t\t\t\t\t\tbpf.JumpIf{\n\t\t\t\t\t\t\tCond:     bpf.JumpBitsSet,\n\t\t\t\t\t\t\tVal:      1 << 30,\n\t\t\t\t\t\t\tSkipTrue: uint8(len(sectionTail) - 1),\n\t\t\t\t\t\t},\n\t\t\t\t\t}, sectionTail...)\n\t\t\t\tcase libseccomp.ArchX32:\n\t\t\t\t\tsectionTail = append([]bpf.Instruction{\n\t\t\t\t\t\t// jset (1<<30),0,[len(tail)-1]\n\t\t\t\t\t\tbpf.JumpIf{\n\t\t\t\t\t\t\tCond:     bpf.JumpBitsNotSet,\n\t\t\t\t\t\t\tVal:      1 << 30,\n\t\t\t\t\t\t\tSkipTrue: uint8(len(sectionTail) - 1),\n\t\t\t\t\t\t},\n\t\t\t\t\t}, sectionTail...)\n\t\t\t\tdefault:\n\t\t\t\t\treturn nil, fmt.Errorf(\"unknown amd64 native architecture %#x\", scmpArch)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsection = append(section, sectionTail...)\n\t\tcase 2:\n\t\t\t// x32 and x86_64 are a unique case, we can't handle any others.\n\t\t\tif uint32(auditArch) != uint32(C.C_AUDIT_ARCH_X86_64) {\n\t\t\t\treturn nil, fmt.Errorf(\"unknown architecture overlap on native arch %#x\", auditArch)\n\t\t\t}\n\n\t\t\tx32sysno, ok := maxSyscalls[libseccomp.ArchX32]\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"missing %v in overlapping x86_64 arch: %v\", libseccomp.ArchX32, maxSyscalls)\n\t\t\t}\n\t\t\tx86sysno, ok := maxSyscalls[libseccomp.ArchAMD64]\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"missing %v in overlapping x86_64 arch: %v\", libseccomp.ArchAMD64, maxSyscalls)\n\t\t\t}\n\n\t\t\t// The x32 ABI indicates that a syscall is being made by an x32\n\t\t\t// process by setting the 30th bit of the syscall number, but we\n\t\t\t// need to do some special-casing depending on whether we need to\n\t\t\t// do long jumps.\n\t\t\tif baseJumpEnosys+2 <= 255 {\n\t\t\t\t// For the simple case we want to have something like:\n\t\t\t\t//   jset (1<<30),1\n\t\t\t\t//   jgt [x86 syscall],[baseJumpEnosys+2],1\n\t\t\t\t//   jgt [x32 syscall],[baseJumpEnosys+1]\n\t\t\t\t//   ja [baseJumpFilter]\n\t\t\t\tsection = append(section, []bpf.Instruction{\n\t\t\t\t\t// jset (1<<30),1\n\t\t\t\t\tbpf.JumpIf{Cond: bpf.JumpBitsSet, Val: 1 << 30, SkipTrue: 1},\n\t\t\t\t\t// jgt [x86 syscall],[baseJumpEnosys+1],1\n\t\t\t\t\tbpf.JumpIf{\n\t\t\t\t\t\tCond:     bpf.JumpGreaterThan,\n\t\t\t\t\t\tVal:      uint32(x86sysno),\n\t\t\t\t\t\tSkipTrue: uint8(baseJumpEnosys + 2), SkipFalse: 1,\n\t\t\t\t\t},\n\t\t\t\t\t// jgt [x32 syscall],[baseJumpEnosys]\n\t\t\t\t\tbpf.JumpIf{\n\t\t\t\t\t\tCond:     bpf.JumpGreaterThan,\n\t\t\t\t\t\tVal:      uint32(x32sysno),\n\t\t\t\t\t\tSkipTrue: uint8(baseJumpEnosys + 1),\n\t\t\t\t\t},\n\t\t\t\t\t// ja [baseJumpFilter]\n\t\t\t\t\tbpf.Jump{Skip: baseJumpFilter},\n\t\t\t\t}...)\n\t\t\t} else {\n\t\t\t\t// But if the [baseJumpEnosys+2] jump is larger than 255 we\n\t\t\t\t// need to do a long jump like so:\n\t\t\t\t//   jset (1<<30),1\n\t\t\t\t//   jgt [x86 syscall],1,2\n\t\t\t\t//   jle [x32 syscall],1\n\t\t\t\t//   ret [ENOSYS]\n\t\t\t\t//   ja [baseJumpFilter]\n\t\t\t\tsection = append(section, []bpf.Instruction{\n\t\t\t\t\t// jset (1<<30),1\n\t\t\t\t\tbpf.JumpIf{Cond: bpf.JumpBitsSet, Val: 1 << 30, SkipTrue: 1},\n\t\t\t\t\t// jgt [x86 syscall],1,2\n\t\t\t\t\tbpf.JumpIf{\n\t\t\t\t\t\tCond:     bpf.JumpGreaterThan,\n\t\t\t\t\t\tVal:      uint32(x86sysno),\n\t\t\t\t\t\tSkipTrue: 1, SkipFalse: 2,\n\t\t\t\t\t},\n\t\t\t\t\t// jle [x32 syscall],1\n\t\t\t\t\tbpf.JumpIf{\n\t\t\t\t\t\tCond:     bpf.JumpLessOrEqual,\n\t\t\t\t\t\tVal:      uint32(x32sysno),\n\t\t\t\t\t\tSkipTrue: 1,\n\t\t\t\t\t},\n\t\t\t\t\t// ret [ENOSYS]\n\t\t\t\t\tbpf.RetConstant{Val: retErrnoEnosys},\n\t\t\t\t\t// ja [baseJumpFilter]\n\t\t\t\t\tbpf.Jump{Skip: baseJumpFilter},\n\t\t\t\t}...)\n\t\t\t}\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"invalid number of architecture overlaps: %v\", len(maxSyscalls))\n\t\t}\n\n\t\t// Prepend this section to the tail.\n\t\tprogramTail = append(section, programTail...)\n\n\t\t// Update jump table.\n\t\tarchJumpTable[auditArch] = uint32(len(programTail))\n\t}\n\n\t// Add a dummy \"jump to filter\" for any architecture we might miss below.\n\t// Such architectures will probably get the BadArch action of the filter\n\t// regardless.\n\tprogramTail = append([]bpf.Instruction{\n\t\t// ja [end of stub and start of filter]\n\t\tbpf.Jump{Skip: uint32(len(programTail))},\n\t}, programTail...)\n\n\t// Generate the jump rules for each architecture. This has to be done in\n\t// reverse as well for the same reason as above. We add to programTail\n\t// directly because the jumps are impacted by each architecture rule we add\n\t// as well.\n\t//\n\t// TODO: Maybe we want to optimise to avoid long jumps here? So sort the\n\t//       architectures based on how large the jumps are going to be, or\n\t//       re-sort the candidate architectures each time to make sure that we\n\t//       pick the largest jump which is going to be smaller than 255.\n\tfor auditArch := range lastSyscalls {\n\t\t// We jump forwards but the jump table is calculated from the *END*.\n\t\tjump := uint32(len(programTail)) - archJumpTable[auditArch]\n\n\t\t// Same routine as above -- this is a basic jeq check, complicated\n\t\t// slightly if it turns out that we need to do a long jump.\n\t\tif jump <= 255 {\n\t\t\tprogramTail = append([]bpf.Instruction{\n\t\t\t\t// jeq [arch],[jump]\n\t\t\t\tbpf.JumpIf{\n\t\t\t\t\tCond:     bpf.JumpEqual,\n\t\t\t\t\tVal:      uint32(auditArch),\n\t\t\t\t\tSkipTrue: uint8(jump),\n\t\t\t\t},\n\t\t\t}, programTail...)\n\t\t} else {\n\t\t\tprogramTail = append([]bpf.Instruction{\n\t\t\t\t// jne [arch],1\n\t\t\t\tbpf.JumpIf{\n\t\t\t\t\tCond:     bpf.JumpNotEqual,\n\t\t\t\t\tVal:      uint32(auditArch),\n\t\t\t\t\tSkipTrue: 1,\n\t\t\t\t},\n\t\t\t\t// ja [jump]\n\t\t\t\tbpf.Jump{Skip: jump},\n\t\t\t}, programTail...)\n\t\t}\n\t}\n\n\t// Prepend the load instruction for the architecture.\n\tprogramTail = append([]bpf.Instruction{\n\t\t// load [4] (architecture)\n\t\tbpf.LoadAbsolute{Off: bpfSizeofInt, Size: bpfSizeofInt},\n\t}, programTail...)\n\n\t// And that's all folks!\n\treturn programTail, nil\n}\n\nfunc assemble(program []bpf.Instruction) ([]unix.SockFilter, error) {\n\trawProgram, err := bpf.Assemble(program)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error assembling program: %w\", err)\n\t}\n\n\t// Convert to []unix.SockFilter for unix.SockFilter.\n\tvar filter []unix.SockFilter\n\tfor _, insn := range rawProgram {\n\t\tfilter = append(filter, unix.SockFilter{\n\t\t\tCode: insn.Op,\n\t\t\tJt:   insn.Jt,\n\t\t\tJf:   insn.Jf,\n\t\t\tK:    insn.K,\n\t\t})\n\t}\n\treturn filter, nil\n}\n\nfunc generatePatch(config *configs.Seccomp) ([]bpf.Instruction, error) {\n\t// Patch the generated cBPF only when there is not a defaultErrnoRet set\n\t// and it is different from ENOSYS\n\tif config.DefaultErrnoRet != nil && *config.DefaultErrnoRet == uint(retErrnoEnosys) {\n\t\treturn nil, nil\n\t}\n\t// We only add the stub if the default action is not permissive.\n\tif isAllowAction(config.DefaultAction) {\n\t\tlogrus.Debugf(\"seccomp: skipping -ENOSYS stub filter generation\")\n\t\treturn nil, nil\n\t}\n\n\tlastSyscalls, err := findLastSyscalls(config)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error finding last syscalls for -ENOSYS stub: %w\", err)\n\t}\n\tstubProgram, err := generateEnosysStub(lastSyscalls)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error generating -ENOSYS stub: %w\", err)\n\t}\n\treturn stubProgram, nil\n}\n\nfunc enosysPatchFilter(config *configs.Seccomp, filter *libseccomp.ScmpFilter) ([]unix.SockFilter, error) {\n\tprogram, err := disassembleFilter(filter)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error disassembling original filter: %w\", err)\n\t}\n\n\tpatch, err := generatePatch(config)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error generating patch for filter: %w\", err)\n\t}\n\tfullProgram := append(patch, program...)\n\n\tlogrus.Debugf(\"seccomp: prepending -ENOSYS stub filter to user filter...\")\n\tfor idx, insn := range patch {\n\t\tlogrus.Debugf(\"  [%4.1d] %s\", idx, insn)\n\t}\n\tlogrus.Debugf(\"  [....] --- original filter ---\")\n\n\tfprog, err := assemble(fullProgram)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error assembling modified filter: %w\", err)\n\t}\n\treturn fprog, nil\n}\n\nfunc filterFlags(config *configs.Seccomp, filter *libseccomp.ScmpFilter) (flags uint, noNewPrivs bool, err error) {\n\t// Ignore the error since pre-2.4 libseccomp is treated as API level 0.\n\tapiLevel, _ := libseccomp.GetAPI()\n\n\tnoNewPrivs, err = filter.GetNoNewPrivsBit()\n\tif err != nil {\n\t\treturn 0, false, fmt.Errorf(\"unable to fetch no_new_privs filter bit: %w\", err)\n\t}\n\n\tif apiLevel >= 3 {\n\t\tif logBit, err := filter.GetLogBit(); err != nil {\n\t\t\treturn 0, false, fmt.Errorf(\"unable to fetch SECCOMP_FILTER_FLAG_LOG bit: %w\", err)\n\t\t} else if logBit {\n\t\t\tflags |= uint(C.C_FILTER_FLAG_LOG)\n\t\t}\n\t}\n\tif apiLevel >= 4 {\n\t\tif ssb, err := filter.GetSSB(); err != nil {\n\t\t\treturn 0, false, fmt.Errorf(\"unable to fetch SECCOMP_FILTER_FLAG_SPEC_ALLOW bit: %w\", err)\n\t\t} else if ssb {\n\t\t\tflags |= uint(C.C_FILTER_FLAG_SPEC_ALLOW)\n\t\t}\n\t}\n\tif apiLevel >= 7 {\n\t\tif waitKill, err := filter.GetWaitKill(); err != nil {\n\t\t\treturn 0, false, fmt.Errorf(\"unable to fetch SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV bit: %w\", err)\n\t\t} else if waitKill {\n\t\t\tflags |= uint(C.C_FILTER_FLAG_WAIT_KILLABLE_RECV)\n\t\t}\n\t}\n\t// XXX: add newly supported filter flags above this line.\n\n\tfor _, call := range config.Syscalls {\n\t\tif call.Action == configs.Notify {\n\t\t\tflags |= uint(C.C_FILTER_FLAG_NEW_LISTENER)\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn flags, noNewPrivs, err\n}\n\nfunc sysSeccompSetFilter(flags uint, filter []unix.SockFilter) (fd int, err error) {\n\t// This debug output is validated in tests/integration/seccomp.bats\n\t// by the SECCOMP_FILTER_FLAG_* test.\n\tlogrus.Debugf(\"seccomp filter flags: %d\", flags)\n\tfprog := unix.SockFprog{\n\t\tLen:    uint16(len(filter)),\n\t\tFilter: &filter[0],\n\t}\n\tfd = -1 // only return a valid fd when C_FILTER_FLAG_NEW_LISTENER is set\n\t// If no seccomp flags were requested we can use the old-school prctl(2).\n\tif flags == 0 {\n\t\terr = unix.Prctl(unix.PR_SET_SECCOMP,\n\t\t\tunix.SECCOMP_MODE_FILTER,\n\t\t\tuintptr(unsafe.Pointer(&fprog)), 0, 0)\n\t} else {\n\t\tfdptr, _, errno := unix.RawSyscall(unix.SYS_SECCOMP,\n\t\t\tuintptr(C.C_SET_MODE_FILTER),\n\t\t\tuintptr(flags), uintptr(unsafe.Pointer(&fprog)))\n\t\tif errno != 0 {\n\t\t\terr = errno\n\t\t}\n\t\tif flags&uint(C.C_FILTER_FLAG_NEW_LISTENER) != 0 {\n\t\t\tfd = int(fdptr)\n\t\t}\n\t}\n\truntime.KeepAlive(filter)\n\truntime.KeepAlive(fprog)\n\treturn fd, err\n}\n\n// PatchAndLoad takes a seccomp configuration and a libseccomp filter which has\n// been pre-configured with the set of rules in the seccomp config. It then\n// patches said filter to handle -ENOSYS in a much nicer manner than the\n// default libseccomp default action behaviour, and loads the patched filter\n// into the kernel for the current process.\nfunc PatchAndLoad(config *configs.Seccomp, filter *libseccomp.ScmpFilter) (int, error) {\n\t// Generate a patched filter.\n\tfprog, err := enosysPatchFilter(config, filter)\n\tif err != nil {\n\t\treturn -1, fmt.Errorf(\"error patching filter: %w\", err)\n\t}\n\n\t// Get the set of libseccomp flags set.\n\tseccompFlags, noNewPrivs, err := filterFlags(config, filter)\n\tif err != nil {\n\t\treturn -1, fmt.Errorf(\"unable to fetch seccomp filter flags: %w\", err)\n\t}\n\n\t// Set no_new_privs if it was requested, though in runc we handle\n\t// no_new_privs separately so warn if we hit this path.\n\tif noNewPrivs {\n\t\tlogrus.Warnf(\"potentially misconfigured filter -- setting no_new_privs in seccomp path\")\n\t\tif err := unix.Prctl(unix.PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0); err != nil {\n\t\t\treturn -1, fmt.Errorf(\"error enabling no_new_privs bit: %w\", err)\n\t\t}\n\t}\n\n\t// Finally, load the filter.\n\tfd, err := sysSeccompSetFilter(seccompFlags, fprog)\n\tif err != nil {\n\t\treturn -1, fmt.Errorf(\"error loading seccomp filter: %w\", err)\n\t}\n\n\treturn fd, nil\n}\n"
  },
  {
    "path": "libcontainer/seccomp/patchbpf/enosys_linux_test.go",
    "content": "//go:build cgo && seccomp\n\npackage patchbpf\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\n\tlibseccomp \"github.com/seccomp/libseccomp-golang\"\n\t\"golang.org/x/net/bpf\"\n)\n\ntype seccompData struct {\n\tSyscall uint32 // NOTE: We assume sizeof(int) == 4.\n\tArch    uint32\n\tIP      uint64\n\tArgs    [6]uint64\n}\n\n// mockSyscallPayload creates a fake seccomp_data struct with the given data.\nfunc mockSyscallPayload(t *testing.T, sysno libseccomp.ScmpSyscall, arch linuxAuditArch, args ...uint64) []byte {\n\tvar buf bytes.Buffer\n\n\tdata := seccompData{\n\t\tSyscall: uint32(sysno),\n\t\tArch:    uint32(arch),\n\t\tIP:      0xDEADBEEFCAFE,\n\t}\n\n\tcopy(data.Args[:], args)\n\tif len(args) > 6 {\n\t\tt.Fatalf(\"bad syscall payload: linux only supports 6-argument syscalls\")\n\t}\n\n\t// NOTE: We use BigEndian here because golang.org/x/net/bpf assumes that\n\t//       all payloads are big-endian while seccomp uses host endianness.\n\tif err := binary.Write(&buf, binary.BigEndian, data); err != nil {\n\t\tt.Fatalf(\"bad syscall payload: cannot write data: %v\", err)\n\t}\n\treturn buf.Bytes()\n}\n\n// retFallthrough is returned by the mockFilter. If a the mock filter returns\n// this value, it indicates \"fallthrough to libseccomp-generated filter\".\nconst retFallthrough uint32 = 0xDEADBEEF\n\n// mockFilter returns a BPF VM that contains a mock filter with an -ENOSYS\n// stub. If the filter returns retFallthrough, the stub filter has permitted\n// the syscall to pass.\nfunc mockFilter(t *testing.T, config *configs.Seccomp) (*bpf.VM, []bpf.Instruction) {\n\tpatch, err := generatePatch(config)\n\tif err != nil {\n\t\tt.Fatalf(\"mock filter: generate enosys patch: %v\", err)\n\t}\n\n\tprogram := append(patch, bpf.RetConstant{Val: retFallthrough})\n\n\tvm, err := bpf.NewVM(program)\n\tif err != nil {\n\t\tt.Fatalf(\"mock filter: compile BPF VM: %v\", err)\n\t}\n\treturn vm, program\n}\n\n// fakeConfig generates a fake libcontainer seccomp configuration. The syscalls\n// are added with an action distinct from the default action.\nfunc fakeConfig(defaultAction configs.Action, explicitSyscalls, arches []string) *configs.Seccomp {\n\tconfig := configs.Seccomp{\n\t\tDefaultAction: defaultAction,\n\t\tArchitectures: arches,\n\t}\n\tsyscallAction := configs.Allow\n\tif syscallAction == defaultAction {\n\t\tsyscallAction = configs.Kill\n\t}\n\tfor _, syscall := range explicitSyscalls {\n\t\tconfig.Syscalls = append(config.Syscalls, &configs.Syscall{\n\t\t\tName:   syscall,\n\t\t\tAction: syscallAction,\n\t\t})\n\t}\n\treturn &config\n}\n\n// List copied from <libcontainer/seccomp/config.go>.\nvar testArches = []string{\n\t\"x86\",\n\t\"amd64\",\n\t\"x32\",\n\t\"arm\",\n\t\"arm64\",\n\t\"mips\",\n\t\"mips64\",\n\t\"mips64n32\",\n\t\"mipsel\",\n\t\"mipsel64\",\n\t\"mipsel64n32\",\n\t\"ppc\",\n\t\"ppc64\",\n\t\"ppc64le\",\n\t\"s390\",\n\t\"s390x\",\n\t// Dummy value to indicate a configuration with no architecture specified.\n\t\"native\",\n}\n\n// Used for the \"native\" architecture.\nvar (\n\tscmpNativeArch, _ = libseccomp.GetNativeArch()\n\tnativeArch        = scmpNativeArch.String()\n)\n\nfunc testEnosysStub(t *testing.T, defaultAction configs.Action, arches []string) {\n\texplicitSyscalls := []string{\n\t\t\"setns\",\n\t\t\"kcmp\",\n\t\t\"renameat2\",\n\t\t\"copy_file_range\",\n\t}\n\n\timplicitSyscalls := []string{\n\t\t\"clone\",\n\t\t\"openat\",\n\t\t\"read\",\n\t\t\"write\",\n\t}\n\n\tfutureSyscalls := []libseccomp.ScmpSyscall{1000, 7331}\n\n\t// Quick lookups for which arches are enabled.\n\tarchSet := map[string]bool{}\n\tfor _, arch := range arches {\n\t\tarchSet[arch] = true\n\t}\n\n\tfor _, test := range []struct {\n\t\tstart, end int\n\t}{\n\t\t{0, 1}, // [setns]\n\t\t{0, 2}, // [setns, process_vm_readv]\n\t\t{1, 2}, // [process_vm_readv]\n\t\t{1, 3}, // [process_vm_readv, renameat2, copy_file_range]\n\t\t{1, 4}, // [process_vm_readv, renameat2, copy_file_range]\n\t\t{3, 4}, // [copy_file_range]\n\t} {\n\t\tallowedSyscalls := explicitSyscalls[test.start:test.end]\n\t\tconfig := fakeConfig(defaultAction, allowedSyscalls, arches)\n\t\tfilter, program := mockFilter(t, config)\n\n\t\t// The syscalls are in increasing order of newness, so all syscalls\n\t\t// after the last allowed syscall will give -ENOSYS.\n\t\tenosysStart := test.end\n\n\t\tfor _, arch := range testArches {\n\t\t\ttype syscallTest struct {\n\t\t\t\tsysno    libseccomp.ScmpSyscall\n\t\t\t\tsyscall  string\n\t\t\t\texpected uint32\n\t\t\t}\n\n\t\t\tif arch == \"native\" {\n\t\t\t\tarch = nativeArch\n\t\t\t}\n\t\t\tscmpArch, err := libseccomp.GetArchFromString(arch)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"unknown libseccomp architecture %q: %v\", arch, err)\n\t\t\t}\n\n\t\t\tauditArch, err := scmpArchToAuditArch(scmpArch)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"unknown audit architecture %q: %v\", arch, err)\n\t\t\t}\n\n\t\t\tvar syscallTests []syscallTest\n\n\t\t\t// Add explicit syscalls (whether they will return -ENOSYS\n\t\t\t// depends on the filter rules).\n\t\t\tfor idx, syscall := range explicitSyscalls {\n\t\t\t\texpected := retFallthrough\n\t\t\t\tif idx >= enosysStart {\n\t\t\t\t\texpected = retErrnoEnosys\n\t\t\t\t}\n\t\t\t\tsysno, err := libseccomp.GetSyscallFromNameByArch(syscall, scmpArch)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unknown syscall %q on arch %q: %v\", syscall, arch, err)\n\t\t\t\t}\n\t\t\t\tsyscallTests = append(syscallTests, syscallTest{\n\t\t\t\t\tsysno:    sysno,\n\t\t\t\t\tsyscall:  syscall,\n\t\t\t\t\texpected: expected,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// Add implicit syscalls.\n\t\t\tfor _, syscall := range implicitSyscalls {\n\t\t\t\tsysno, err := libseccomp.GetSyscallFromNameByArch(syscall, scmpArch)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unknown syscall %q on arch %q: %v\", syscall, arch, err)\n\t\t\t\t}\n\t\t\t\tsyscallTests = append(syscallTests, syscallTest{\n\t\t\t\t\tsysno:    sysno,\n\t\t\t\t\tsyscall:  syscall,\n\t\t\t\t\texpected: retFallthrough,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// Add future syscalls.\n\t\t\tfor _, sysno := range futureSyscalls {\n\t\t\t\tbaseSysno, err := libseccomp.GetSyscallFromNameByArch(\"copy_file_range\", scmpArch)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"unknown syscall 'copy_file_range' on arch %q: %v\", arch, err)\n\t\t\t\t}\n\t\t\t\tsysno += baseSysno\n\n\t\t\t\tsyscallTests = append(syscallTests, syscallTest{\n\t\t\t\t\tsysno:    sysno,\n\t\t\t\t\tsyscall:  fmt.Sprintf(\"syscall_%#x\", sysno),\n\t\t\t\t\texpected: retErrnoEnosys,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// If we're on s390(x) make sure you get -ENOSYS for the \"setup\"\n\t\t\t// syscall (this is done to work around an issue with s390x's\n\t\t\t// syscall multiplexing which results in unknown syscalls being a\n\t\t\t// setup(2) invocation).\n\t\t\tswitch scmpArch {\n\t\t\tcase libseccomp.ArchS390, libseccomp.ArchS390X:\n\t\t\t\tsyscallTests = append(syscallTests, syscallTest{\n\t\t\t\t\tsysno:    s390xMultiplexSyscall,\n\t\t\t\t\tsyscall:  \"setup\",\n\t\t\t\t\texpected: retErrnoEnosys,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// Test syscalls in the explicit list.\n\t\t\tfor _, test := range syscallTests {\n\t\t\t\t// Override the expected value in the two special cases:\n\t\t\t\t//  1. If the default action is allow, the filter won't have\n\t\t\t\t//     the stub prepended so we expect a fallthrough.\n\t\t\t\t//  2. If the executing architecture is not in the architecture\n\t\t\t\t//     set, then the architecture is not handled by the stub --\n\t\t\t\t//     *except* in the case of the native architecture (which\n\t\t\t\t//     is always included in the stub).\n\t\t\t\tif isAllowAction(defaultAction) ||\n\t\t\t\t\t(!archSet[arch] && arch != nativeArch) {\n\t\t\t\t\ttest.expected = retFallthrough\n\t\t\t\t}\n\n\t\t\t\tpayload := mockSyscallPayload(t, test.sysno, auditArch, 0x1337, 0xF00BA5)\n\t\t\t\t// NOTE: golang.org/x/net/bpf returns int here rather\n\t\t\t\t// than uint32.\n\t\t\t\trawRet, err := filter.Run(payload)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"error running filter: %v\", err)\n\t\t\t\t}\n\t\t\t\tret := uint32(rawRet)\n\t\t\t\tif ret != test.expected {\n\t\t\t\t\tt.Logf(\"mock filter for %v %v:\", arches, allowedSyscalls)\n\t\t\t\t\tfor idx, insn := range program {\n\t\t\t\t\t\tt.Logf(\"  [%4.1d] %s\", idx, insn)\n\t\t\t\t\t}\n\t\t\t\t\tt.Logf(\"payload: %#v\", payload)\n\t\t\t\t\tt.Errorf(\"filter %s(%d) %q(%d): got %#x, want %#x\", arch, auditArch, test.syscall, test.sysno, ret, test.expected)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar testActions = map[string]configs.Action{\n\t\"allow\": configs.Allow,\n\t\"log\":   configs.Log,\n\t\"errno\": configs.Errno,\n\t\"kill\":  configs.Kill,\n}\n\nfunc TestEnosysStub_SingleArch(t *testing.T) {\n\tfor _, arch := range testArches {\n\t\tvar arches []string\n\t\t// \"native\" indicates a blank architecture field for seccomp, to test\n\t\t// the case where the running architecture was not included in the\n\t\t// architecture. Docker doesn't always set the architecture for some\n\t\t// reason (namely for ppc64le).\n\t\tif arch != \"native\" {\n\t\t\tarches = append(arches, arch)\n\t\t}\n\t\tt.Run(\"arch=\"+arch, func(t *testing.T) {\n\t\t\tfor name, action := range testActions {\n\t\t\t\tt.Run(\"action=\"+name, func(t *testing.T) {\n\t\t\t\t\ttestEnosysStub(t, action, arches)\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestEnosysStub_MultiArch(t *testing.T) {\n\tfor end := range len(testArches) {\n\t\tfor start := range end {\n\t\t\tvar arches []string\n\t\t\tfor _, arch := range testArches[start:end] {\n\t\t\t\t// \"native\" indicates a blank architecture field for seccomp, to test\n\t\t\t\t// the case where the running architecture was not included in the\n\t\t\t\t// architecture. Docker doesn't always set the architecture for some\n\t\t\t\t// reason (namely for ppc64le).\n\t\t\t\tif arch != \"native\" {\n\t\t\t\t\tarches = append(arches, arch)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(arches) <= 1 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor _, action := range testActions {\n\t\t\t\ttestEnosysStub(t, action, arches)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestDisassembleHugeFilterDoesNotHang(t *testing.T) {\n\thugeFilter, err := libseccomp.NewFilter(libseccomp.ActAllow)\n\tif err != nil {\n\t\tt.Fatalf(\"failed to create seccomp filter: %v\", err)\n\t}\n\n\tfor i := 1; i < 10000; i++ {\n\t\tif err := hugeFilter.AddRule(libseccomp.ScmpSyscall(i), libseccomp.ActKillThread); err != nil {\n\t\t\tt.Fatalf(\"failed to add rule to filter %d: %v\", i, err)\n\t\t}\n\t}\n\n\t_, err = disassembleFilter(hugeFilter)\n\tif err != nil {\n\t\tt.Fatalf(\"failed to disassembleFilter: %v\", err)\n\t}\n\n\t// if we exit, we did not hang\n}\n"
  },
  {
    "path": "libcontainer/seccomp/patchbpf/enosys_unsupported.go",
    "content": "//go:build !linux || !cgo || !seccomp\n\npackage patchbpf\n"
  },
  {
    "path": "libcontainer/seccomp/seccomp_linux.go",
    "content": "//go:build cgo && seccomp\n\npackage seccomp\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\tlibseccomp \"github.com/seccomp/libseccomp-golang\"\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/seccomp/patchbpf\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n)\n\nvar (\n\tactTrace = libseccomp.ActTrace.SetReturnCode(int16(unix.EPERM))\n\tactErrno = libseccomp.ActErrno.SetReturnCode(int16(unix.EPERM))\n)\n\nconst (\n\t// Linux system calls can have at most 6 arguments\n\tsyscallMaxArguments int = 6\n)\n\n// InitSeccomp installs the seccomp filters to be used in the container as\n// specified in config.\n// Returns the seccomp file descriptor if any of the filters include a\n// SCMP_ACT_NOTIFY action, otherwise returns -1.\nfunc InitSeccomp(config *configs.Seccomp) (int, error) {\n\tif config == nil {\n\t\treturn -1, errors.New(\"cannot initialize Seccomp - nil config passed\")\n\t}\n\n\tdefaultAction, err := getAction(config.DefaultAction, config.DefaultErrnoRet)\n\tif err != nil {\n\t\treturn -1, errors.New(\"error initializing seccomp - invalid default action\")\n\t}\n\n\t// Ignore the error since pre-2.4 libseccomp is treated as API level 0.\n\tapiLevel, _ := libseccomp.GetAPI()\n\tfor _, call := range config.Syscalls {\n\t\tif call.Action == configs.Notify {\n\t\t\tif apiLevel < 6 {\n\t\t\t\treturn -1, fmt.Errorf(\"seccomp notify unsupported: API level: got %d, want at least 6. Please try with libseccomp >= 2.5.0 and Linux >= 5.7\", apiLevel)\n\t\t\t}\n\n\t\t\t// We can't allow the write syscall to notify to the seccomp agent.\n\t\t\t// After InitSeccomp() is called, we need to syncParentSeccomp() to write the seccomp fd plain\n\t\t\t// number, so the parent sends it to the seccomp agent. If we use SCMP_ACT_NOTIFY on write, we\n\t\t\t// never can write the seccomp fd to the parent and therefore the seccomp agent never receives\n\t\t\t// the seccomp fd and runc is hang during initialization.\n\t\t\t//\n\t\t\t// Note that read()/close(), that are also used in syncParentSeccomp(), _can_ use SCMP_ACT_NOTIFY.\n\t\t\t// Because we write the seccomp fd on the pipe to the parent, the parent is able to proceed and\n\t\t\t// send the seccomp fd to the agent (it is another process and not subject to the seccomp\n\t\t\t// filter). We will be blocked on read()/close() inside syncParentSeccomp() but if the seccomp\n\t\t\t// agent allows those syscalls to proceed, initialization works just fine and the agent can\n\t\t\t// handle future read()/close() syscalls as it wanted.\n\t\t\tif call.Name == \"write\" {\n\t\t\t\treturn -1, errors.New(\"SCMP_ACT_NOTIFY cannot be used for the write syscall\")\n\t\t\t}\n\t\t}\n\t}\n\n\t// See comment on why write is not allowed. The same reason applies, as this can mean handling write too.\n\tif defaultAction == libseccomp.ActNotify {\n\t\treturn -1, errors.New(\"SCMP_ACT_NOTIFY cannot be used as default action\")\n\t}\n\n\tfilter, err := libseccomp.NewFilter(defaultAction)\n\tif err != nil {\n\t\treturn -1, fmt.Errorf(\"error creating filter: %w\", err)\n\t}\n\n\t// Add extra architectures\n\tfor _, arch := range config.Architectures {\n\t\tscmpArch, err := libseccomp.GetArchFromString(arch)\n\t\tif err != nil {\n\t\t\treturn -1, fmt.Errorf(\"error validating Seccomp architecture: %w\", err)\n\t\t}\n\t\tif err := filter.AddArch(scmpArch); err != nil {\n\t\t\treturn -1, fmt.Errorf(\"error adding architecture to seccomp filter: %w\", err)\n\t\t}\n\t}\n\n\t// Add extra flags.\n\tfor _, flag := range config.Flags {\n\t\tif err := setFlag(filter, flag); err != nil {\n\t\t\treturn -1, err\n\t\t}\n\t}\n\n\t// Enable libseccomp binary tree optimization for longer rulesets.\n\t//\n\t// The number below chosen semi-arbitrarily, considering the following:\n\t// 1. libseccomp <= 2.5.4 misbehaves when binary tree optimization\n\t// is enabled and there are 0 rules.\n\t// 2. All known libseccomp versions (2.5.0 to 2.5.4) generate a binary\n\t// tree with 4 syscalls per node.\n\tif len(config.Syscalls) > 32 {\n\t\tif err := filter.SetOptimize(2); err != nil {\n\t\t\t// The error is not fatal and is probably means we have older libseccomp.\n\t\t\tlogrus.Debugf(\"seccomp binary tree optimization not available: %v\", err)\n\t\t}\n\t}\n\n\t// Unset no new privs bit\n\tif err := filter.SetNoNewPrivsBit(false); err != nil {\n\t\treturn -1, fmt.Errorf(\"error setting no new privileges: %w\", err)\n\t}\n\n\t// Add a rule for each syscall\n\tfor _, call := range config.Syscalls {\n\t\tif call == nil {\n\t\t\treturn -1, errors.New(\"encountered nil syscall while initializing Seccomp\")\n\t\t}\n\n\t\tif err := matchCall(filter, call, defaultAction); err != nil {\n\t\t\treturn -1, err\n\t\t}\n\t}\n\n\tseccompFd, err := patchbpf.PatchAndLoad(config, filter)\n\tif err != nil {\n\t\treturn -1, fmt.Errorf(\"error loading seccomp filter into kernel: %w\", err)\n\t}\n\n\treturn seccompFd, nil\n}\n\ntype unknownFlagError struct {\n\tflag specs.LinuxSeccompFlag\n}\n\nfunc (e *unknownFlagError) Error() string {\n\treturn \"seccomp flag \" + string(e.flag) + \" is not known to runc\"\n}\n\nfunc setFlag(filter *libseccomp.ScmpFilter, flag specs.LinuxSeccompFlag) error {\n\tswitch flag {\n\tcase flagTsync:\n\t\t// libseccomp-golang always use filterAttrTsync when\n\t\t// possible so all goroutines will receive the same\n\t\t// rules, so there is nothing to do. It does not make\n\t\t// sense to apply the seccomp filter on only one\n\t\t// thread; other threads will be terminated after exec\n\t\t// anyway.\n\t\treturn nil\n\tcase specs.LinuxSeccompFlagLog:\n\t\tif err := filter.SetLogBit(true); err != nil {\n\t\t\treturn fmt.Errorf(\"error adding log flag to seccomp filter: %w\", err)\n\t\t}\n\t\treturn nil\n\tcase specs.LinuxSeccompFlagSpecAllow:\n\t\tif err := filter.SetSSB(true); err != nil {\n\t\t\treturn fmt.Errorf(\"error adding SSB flag to seccomp filter: %w\", err)\n\t\t}\n\t\treturn nil\n\tcase specs.LinuxSeccompFlagWaitKillableRecv:\n\t\tif err := filter.SetWaitKill(true); err != nil {\n\t\t\treturn fmt.Errorf(\"error adding WaitKill flag to seccomp filter: %w\", err)\n\t\t}\n\t\treturn nil\n\t}\n\t// NOTE when adding more flags above, do not forget to also:\n\t// - add new flags to `flags` slice in config.go;\n\t// - add new flag values to flags_value() in tests/integration/seccomp.bats;\n\t// - modify func filterFlags in patchbpf/ accordingly.\n\n\treturn &unknownFlagError{flag: flag}\n}\n\n// FlagSupported checks if the flag is known to runc and supported by\n// currently used libseccomp and kernel (i.e. it can be set).\nfunc FlagSupported(flag specs.LinuxSeccompFlag) error {\n\tfilter := &libseccomp.ScmpFilter{}\n\terr := setFlag(filter, flag)\n\n\t// For flags we don't know, setFlag returns unknownFlagError.\n\tvar uf *unknownFlagError\n\tif errors.As(err, &uf) {\n\t\treturn err\n\t}\n\t// For flags that are known to runc and libseccomp-golang but can not\n\t// be applied because either libseccomp or the kernel is too old,\n\t// seccomp.VersionError is returned.\n\tvar verErr *libseccomp.VersionError\n\tif errors.As(err, &verErr) {\n\t\t// Not supported by libseccomp or the kernel.\n\t\treturn err\n\t}\n\n\t// All other flags are known and supported.\n\treturn nil\n}\n\n// Convert Libcontainer Action to Libseccomp ScmpAction\nfunc getAction(act configs.Action, errnoRet *uint) (libseccomp.ScmpAction, error) {\n\tswitch act {\n\tcase configs.Kill, configs.KillThread:\n\t\treturn libseccomp.ActKillThread, nil\n\tcase configs.Errno:\n\t\tif errnoRet != nil {\n\t\t\treturn libseccomp.ActErrno.SetReturnCode(int16(*errnoRet)), nil\n\t\t}\n\t\treturn actErrno, nil\n\tcase configs.Trap:\n\t\treturn libseccomp.ActTrap, nil\n\tcase configs.Allow:\n\t\treturn libseccomp.ActAllow, nil\n\tcase configs.Trace:\n\t\tif errnoRet != nil {\n\t\t\treturn libseccomp.ActTrace.SetReturnCode(int16(*errnoRet)), nil\n\t\t}\n\t\treturn actTrace, nil\n\tcase configs.Log:\n\t\treturn libseccomp.ActLog, nil\n\tcase configs.Notify:\n\t\treturn libseccomp.ActNotify, nil\n\tcase configs.KillProcess:\n\t\treturn libseccomp.ActKillProcess, nil\n\tdefault:\n\t\treturn libseccomp.ActInvalid, errors.New(\"invalid action, cannot use in rule\")\n\t}\n}\n\n// Convert Libcontainer Operator to Libseccomp ScmpCompareOp\nfunc getOperator(op configs.Operator) (libseccomp.ScmpCompareOp, error) {\n\tswitch op {\n\tcase configs.EqualTo:\n\t\treturn libseccomp.CompareEqual, nil\n\tcase configs.NotEqualTo:\n\t\treturn libseccomp.CompareNotEqual, nil\n\tcase configs.GreaterThan:\n\t\treturn libseccomp.CompareGreater, nil\n\tcase configs.GreaterThanOrEqualTo:\n\t\treturn libseccomp.CompareGreaterEqual, nil\n\tcase configs.LessThan:\n\t\treturn libseccomp.CompareLess, nil\n\tcase configs.LessThanOrEqualTo:\n\t\treturn libseccomp.CompareLessOrEqual, nil\n\tcase configs.MaskEqualTo:\n\t\treturn libseccomp.CompareMaskedEqual, nil\n\tdefault:\n\t\treturn libseccomp.CompareInvalid, errors.New(\"invalid operator, cannot use in rule\")\n\t}\n}\n\n// Convert Libcontainer Arg to Libseccomp ScmpCondition\nfunc getCondition(arg *configs.Arg) (libseccomp.ScmpCondition, error) {\n\tcond := libseccomp.ScmpCondition{}\n\n\tif arg == nil {\n\t\treturn cond, errors.New(\"cannot convert nil to syscall condition\")\n\t}\n\n\top, err := getOperator(arg.Op)\n\tif err != nil {\n\t\treturn cond, err\n\t}\n\n\treturn libseccomp.MakeCondition(arg.Index, op, arg.Value, arg.ValueTwo)\n}\n\n// Add a rule to match a single syscall\nfunc matchCall(filter *libseccomp.ScmpFilter, call *configs.Syscall, defAct libseccomp.ScmpAction) error {\n\tif call == nil || filter == nil {\n\t\treturn errors.New(\"cannot use nil as syscall to block\")\n\t}\n\n\tif len(call.Name) == 0 {\n\t\treturn errors.New(\"empty string is not a valid syscall\")\n\t}\n\n\t// Convert the call's action to the libseccomp equivalent\n\tcallAct, err := getAction(call.Action, call.ErrnoRet)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"action in seccomp profile is invalid: %w\", err)\n\t}\n\tif callAct == defAct {\n\t\t// This rule is redundant, silently skip it\n\t\t// to avoid error from AddRule.\n\t\treturn nil\n\t}\n\n\t// If we can't resolve the syscall, assume it is not supported\n\t// by this kernel. Warn about it, don't error out.\n\tcallNum, err := libseccomp.GetSyscallFromName(call.Name)\n\tif err != nil {\n\t\tlogrus.Debugf(\"unknown seccomp syscall %q ignored\", call.Name)\n\t\treturn nil\n\t}\n\n\t// Unconditional match - just add the rule\n\tif len(call.Args) == 0 {\n\t\tif err := filter.AddRule(callNum, callAct); err != nil {\n\t\t\treturn fmt.Errorf(\"error adding seccomp filter rule for syscall %s: %w\", call.Name, err)\n\t\t}\n\t} else {\n\t\t// If two or more arguments have the same condition,\n\t\t// Revert to old behavior, adding each condition as a separate rule\n\t\targCounts := make([]uint, syscallMaxArguments)\n\t\tconditions := []libseccomp.ScmpCondition{}\n\n\t\tfor _, cond := range call.Args {\n\t\t\tnewCond, err := getCondition(cond)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"error creating seccomp syscall condition for syscall %s: %w\", call.Name, err)\n\t\t\t}\n\n\t\t\targCounts[cond.Index] += 1\n\n\t\t\tconditions = append(conditions, newCond)\n\t\t}\n\n\t\thasMultipleArgs := false\n\t\tfor _, count := range argCounts {\n\t\t\tif count > 1 {\n\t\t\t\thasMultipleArgs = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif hasMultipleArgs {\n\t\t\t// Revert to old behavior\n\t\t\t// Add each condition attached to a separate rule\n\t\t\tfor _, cond := range conditions {\n\t\t\t\tcondArr := []libseccomp.ScmpCondition{cond}\n\n\t\t\t\tif err := filter.AddRuleConditional(callNum, callAct, condArr); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"error adding seccomp rule for syscall %s: %w\", call.Name, err)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// No conditions share same argument\n\t\t\t// Use new, proper behavior\n\t\t\tif err := filter.AddRuleConditional(callNum, callAct, conditions); err != nil {\n\t\t\t\treturn fmt.Errorf(\"error adding seccomp rule for syscall %s: %w\", call.Name, err)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Version returns major, minor, and micro.\nfunc Version() (uint, uint, uint) {\n\treturn libseccomp.GetLibraryVersion()\n}\n\n// Enabled is true if seccomp support is compiled in.\nconst Enabled = true\n"
  },
  {
    "path": "libcontainer/seccomp/seccomp_unsupported.go",
    "content": "//go:build !linux || !cgo || !seccomp\n\npackage seccomp\n\nimport (\n\t\"errors\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n)\n\nvar ErrSeccompNotEnabled = errors.New(\"seccomp: config provided but seccomp not supported\")\n\n// InitSeccomp does nothing because seccomp is not supported.\nfunc InitSeccomp(config *configs.Seccomp) (int, error) {\n\tif config != nil {\n\t\treturn -1, ErrSeccompNotEnabled\n\t}\n\treturn -1, nil\n}\n\n// FlagSupported tells if a provided seccomp flag is supported.\nfunc FlagSupported(_ specs.LinuxSeccompFlag) error {\n\treturn ErrSeccompNotEnabled\n}\n\n// Version returns major, minor, and micro.\nfunc Version() (uint, uint, uint) {\n\treturn 0, 0, 0\n}\n\n// Enabled is true if seccomp support is compiled in.\nconst Enabled = false\n"
  },
  {
    "path": "libcontainer/setns_init_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\n\t\"github.com/opencontainers/selinux/go-selinux\"\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/internal/linux\"\n\t\"github.com/opencontainers/runc/libcontainer/apparmor\"\n\t\"github.com/opencontainers/runc/libcontainer/keys\"\n\t\"github.com/opencontainers/runc/libcontainer/seccomp\"\n\t\"github.com/opencontainers/runc/libcontainer/system\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n)\n\n// linuxSetnsInit performs the container's initialization for running a new process\n// inside an existing container.\ntype linuxSetnsInit struct {\n\tpipe          *syncSocket\n\tconsoleSocket *os.File\n\tpidfdSocket   *os.File\n\tconfig        *initConfig\n\tlogPipe       *os.File\n}\n\nfunc (l *linuxSetnsInit) getSessionRingName() string {\n\treturn \"_ses.\" + l.config.ContainerID\n}\n\nfunc (l *linuxSetnsInit) Init() error {\n\tif !l.config.Config.NoNewKeyring {\n\t\tif l.config.ProcessLabel != \"\" {\n\t\t\tif err := selinux.SetKeyLabel(l.config.ProcessLabel); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tdefer selinux.SetKeyLabel(\"\") //nolint: errcheck\n\t\t}\n\t\t// Do not inherit the parent's session keyring.\n\t\tif _, err := keys.JoinSessionKeyring(l.getSessionRingName()); err != nil {\n\t\t\tlogrus.Warnf(\"KeyctlJoinSessionKeyring: %v\", err)\n\t\t\t// Same justification as in standard_init_linux.go as to why we\n\t\t\t// don't bail on ENOSYS.\n\t\t\tif !errors.Is(err, unix.ENOSYS) {\n\t\t\t\treturn fmt.Errorf(\"unable to join session keyring: %w\", err)\n\t\t\t}\n\t\t}\n\t}\n\n\tif l.config.CreateConsole {\n\t\tif err := setupConsole(l.consoleSocket, l.config, false); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := system.Setctty(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif l.pidfdSocket != nil {\n\t\tif err := setupPidfd(l.pidfdSocket, \"setns\"); err != nil {\n\t\t\treturn fmt.Errorf(\"failed to setup pidfd: %w\", err)\n\t\t}\n\t}\n\tif l.config.NoNewPrivileges {\n\t\tif err := unix.Prctl(unix.PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif l.config.Config.Umask != nil {\n\t\tunix.Umask(int(*l.config.Config.Umask))\n\t}\n\n\tif err := setupScheduler(l.config); err != nil {\n\t\treturn err\n\t}\n\n\tif err := setupIOPriority(l.config); err != nil {\n\t\treturn err\n\t}\n\n\t// Set personality if specified.\n\tif l.config.Config.Personality != nil {\n\t\tif err := setupPersonality(l.config.Config); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif err := setupMemoryPolicy(l.config.Config); err != nil {\n\t\treturn err\n\t}\n\n\t// Tell our parent that we're ready to exec. This must be done before the\n\t// Seccomp rules have been applied, because we need to be able to read and\n\t// write to a socket.\n\tif err := syncParentReady(l.pipe); err != nil {\n\t\treturn fmt.Errorf(\"sync ready: %w\", err)\n\t}\n\tif l.config.ProcessLabel != \"\" {\n\t\tif err := selinux.SetExecLabel(l.config.ProcessLabel); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer selinux.SetExecLabel(\"\") //nolint: errcheck\n\t}\n\t// Without NoNewPrivileges seccomp is a privileged operation, so we need to\n\t// do this before dropping capabilities; otherwise do it as late as possible\n\t// just before execve so as few syscalls take place after it as possible.\n\tif l.config.Config.Seccomp != nil && !l.config.NoNewPrivileges {\n\t\tseccompFd, err := seccomp.InitSeccomp(l.config.Config.Seccomp)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := syncParentSeccomp(l.pipe, seccompFd); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif err := finalizeNamespace(l.config); err != nil {\n\t\treturn err\n\t}\n\tif err := apparmor.ApplyProfile(l.config.AppArmorProfile); err != nil {\n\t\treturn err\n\t}\n\t// Check for the arg early to make sure it exists.\n\tname, err := exec.LookPath(l.config.Args[0])\n\tif err != nil {\n\t\treturn err\n\t}\n\t// Set seccomp as close to execve as possible, so as few syscalls take\n\t// place afterward (reducing the amount of syscalls that users need to\n\t// enable in their seccomp profiles).\n\tif l.config.Config.Seccomp != nil && l.config.NoNewPrivileges {\n\t\tseccompFd, err := seccomp.InitSeccomp(l.config.Config.Seccomp)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"unable to init seccomp: %w\", err)\n\t\t}\n\t\tif err := syncParentSeccomp(l.pipe, seccompFd); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Close the pipe to signal that we have completed our init.\n\t// Please keep this because we don't want to get a pipe write error if\n\t// there is an error from `execve` after all fds closed.\n\t_ = l.pipe.Close()\n\n\t// Close the log pipe fd so the parent's ForwardLogs can exit.\n\tlogrus.Debugf(\"setns_init: about to exec\")\n\tif err := l.logPipe.Close(); err != nil {\n\t\treturn fmt.Errorf(\"close log pipe: %w\", err)\n\t}\n\n\t// Close all file descriptors we are not passing to the container. This is\n\t// necessary because the execve target could use internal runc fds as the\n\t// execve path, potentially giving access to binary files from the host\n\t// (which can then be opened by container processes, leading to container\n\t// escapes). Note that because this operation will close any open file\n\t// descriptors that are referenced by (*os.File) handles from underneath\n\t// the Go runtime, we must not do any file operations after this point\n\t// (otherwise the (*os.File) finaliser could close the wrong file). See\n\t// CVE-2024-21626 for more information as to why this protection is\n\t// necessary.\n\tif err := utils.UnsafeCloseFrom(l.config.PassedFilesCount + 3); err != nil {\n\t\treturn err\n\t}\n\treturn linux.Exec(name, l.config.Args, l.config.Env)\n}\n"
  },
  {
    "path": "libcontainer/specconv/example.go",
    "content": "package specconv\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n)\n\n// Example returns an example spec file, with many options set so a user can\n// see what a standard spec file looks like.\nfunc Example() *specs.Spec {\n\tspec := &specs.Spec{\n\t\tVersion: specs.Version,\n\t\tRoot: &specs.Root{\n\t\t\tPath:     \"rootfs\",\n\t\t\tReadonly: true,\n\t\t},\n\t\tProcess: &specs.Process{\n\t\t\tTerminal: true,\n\t\t\tUser:     specs.User{},\n\t\t\tArgs: []string{\n\t\t\t\t\"sh\",\n\t\t\t},\n\t\t\tEnv: []string{\n\t\t\t\t\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\",\n\t\t\t\t\"TERM=xterm\",\n\t\t\t},\n\t\t\tCwd:             \"/\",\n\t\t\tNoNewPrivileges: true,\n\t\t\tCapabilities: &specs.LinuxCapabilities{\n\t\t\t\tBounding: []string{\n\t\t\t\t\t\"CAP_AUDIT_WRITE\",\n\t\t\t\t\t\"CAP_KILL\",\n\t\t\t\t\t\"CAP_NET_BIND_SERVICE\",\n\t\t\t\t},\n\t\t\t\tPermitted: []string{\n\t\t\t\t\t\"CAP_AUDIT_WRITE\",\n\t\t\t\t\t\"CAP_KILL\",\n\t\t\t\t\t\"CAP_NET_BIND_SERVICE\",\n\t\t\t\t},\n\t\t\t\tEffective: []string{\n\t\t\t\t\t\"CAP_AUDIT_WRITE\",\n\t\t\t\t\t\"CAP_KILL\",\n\t\t\t\t\t\"CAP_NET_BIND_SERVICE\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tRlimits: []specs.POSIXRlimit{\n\t\t\t\t{\n\t\t\t\t\tType: \"RLIMIT_NOFILE\",\n\t\t\t\t\tHard: uint64(1024),\n\t\t\t\t\tSoft: uint64(1024),\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tHostname: \"runc\",\n\t\tMounts: []specs.Mount{\n\t\t\t{\n\t\t\t\tDestination: \"/proc\",\n\t\t\t\tType:        \"proc\",\n\t\t\t\tSource:      \"proc\",\n\t\t\t\tOptions:     nil,\n\t\t\t},\n\t\t\t{\n\t\t\t\tDestination: \"/dev\",\n\t\t\t\tType:        \"tmpfs\",\n\t\t\t\tSource:      \"tmpfs\",\n\t\t\t\tOptions:     []string{\"nosuid\", \"strictatime\", \"mode=755\", \"size=65536k\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tDestination: \"/dev/pts\",\n\t\t\t\tType:        \"devpts\",\n\t\t\t\tSource:      \"devpts\",\n\t\t\t\tOptions:     []string{\"nosuid\", \"noexec\", \"newinstance\", \"ptmxmode=0666\", \"mode=0620\", \"gid=5\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tDestination: \"/dev/shm\",\n\t\t\t\tType:        \"tmpfs\",\n\t\t\t\tSource:      \"shm\",\n\t\t\t\tOptions:     []string{\"nosuid\", \"noexec\", \"nodev\", \"mode=1777\", \"size=65536k\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tDestination: \"/dev/mqueue\",\n\t\t\t\tType:        \"mqueue\",\n\t\t\t\tSource:      \"mqueue\",\n\t\t\t\tOptions:     []string{\"nosuid\", \"noexec\", \"nodev\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tDestination: \"/sys\",\n\t\t\t\tType:        \"sysfs\",\n\t\t\t\tSource:      \"sysfs\",\n\t\t\t\tOptions:     []string{\"nosuid\", \"noexec\", \"nodev\", \"ro\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tDestination: \"/sys/fs/cgroup\",\n\t\t\t\tType:        \"cgroup\",\n\t\t\t\tSource:      \"cgroup\",\n\t\t\t\tOptions:     []string{\"nosuid\", \"noexec\", \"nodev\", \"relatime\", \"ro\"},\n\t\t\t},\n\t\t},\n\t\tLinux: &specs.Linux{\n\t\t\tMaskedPaths: []string{\n\t\t\t\t\"/proc/acpi\",\n\t\t\t\t\"/proc/asound\",\n\t\t\t\t\"/proc/kcore\",\n\t\t\t\t\"/proc/keys\",\n\t\t\t\t\"/proc/latency_stats\",\n\t\t\t\t\"/proc/timer_list\",\n\t\t\t\t\"/proc/timer_stats\",\n\t\t\t\t\"/proc/sched_debug\",\n\t\t\t\t\"/sys/firmware\",\n\t\t\t\t\"/proc/scsi\",\n\t\t\t},\n\t\t\tReadonlyPaths: []string{\n\t\t\t\t\"/proc/bus\",\n\t\t\t\t\"/proc/fs\",\n\t\t\t\t\"/proc/irq\",\n\t\t\t\t\"/proc/sys\",\n\t\t\t\t\"/proc/sysrq-trigger\",\n\t\t\t},\n\t\t\tResources: &specs.LinuxResources{\n\t\t\t\tDevices: []specs.LinuxDeviceCgroup{\n\t\t\t\t\t{\n\t\t\t\t\t\tAllow:  false,\n\t\t\t\t\t\tAccess: \"rwm\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tNamespaces: []specs.LinuxNamespace{\n\t\t\t\t{\n\t\t\t\t\tType: specs.PIDNamespace,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tType: specs.NetworkNamespace,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tType: specs.IPCNamespace,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tType: specs.UTSNamespace,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tType: specs.MountNamespace,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tif cgroups.IsCgroup2UnifiedMode() {\n\t\tspec.Linux.Namespaces = append(spec.Linux.Namespaces, specs.LinuxNamespace{\n\t\t\tType: specs.CgroupNamespace,\n\t\t})\n\t}\n\treturn spec\n}\n\n// ToRootless converts the given spec file into one that should work with\n// rootless containers (euid != 0), by removing incompatible options and adding others that\n// are needed.\nfunc ToRootless(spec *specs.Spec) {\n\tvar namespaces []specs.LinuxNamespace\n\n\t// Remove networkns from the spec.\n\tfor _, ns := range spec.Linux.Namespaces {\n\t\tswitch ns.Type {\n\t\tcase specs.NetworkNamespace, specs.UserNamespace:\n\t\t\t// Do nothing.\n\t\tdefault:\n\t\t\tnamespaces = append(namespaces, ns)\n\t\t}\n\t}\n\t// Add userns to the spec.\n\tnamespaces = append(namespaces, specs.LinuxNamespace{\n\t\tType: specs.UserNamespace,\n\t})\n\tspec.Linux.Namespaces = namespaces\n\n\t// Add mappings for the current user.\n\tspec.Linux.UIDMappings = []specs.LinuxIDMapping{{\n\t\tHostID:      uint32(os.Geteuid()),\n\t\tContainerID: 0,\n\t\tSize:        1,\n\t}}\n\tspec.Linux.GIDMappings = []specs.LinuxIDMapping{{\n\t\tHostID:      uint32(os.Getegid()),\n\t\tContainerID: 0,\n\t\tSize:        1,\n\t}}\n\n\t// Fix up mounts.\n\tvar mounts []specs.Mount\n\tfor _, mount := range spec.Mounts {\n\t\t// Replace the /sys mount with an rbind.\n\t\tif filepath.Clean(mount.Destination) == \"/sys\" {\n\t\t\tmounts = append(mounts, specs.Mount{\n\t\t\t\tSource:      \"/sys\",\n\t\t\t\tDestination: \"/sys\",\n\t\t\t\tType:        \"none\",\n\t\t\t\tOptions:     []string{\"rbind\", \"nosuid\", \"noexec\", \"nodev\", \"ro\"},\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\t// Remove all gid= and uid= mappings.\n\t\tvar options []string\n\t\tfor _, option := range mount.Options {\n\t\t\tif !strings.HasPrefix(option, \"gid=\") && !strings.HasPrefix(option, \"uid=\") {\n\t\t\t\toptions = append(options, option)\n\t\t\t}\n\t\t}\n\n\t\tmount.Options = options\n\t\tmounts = append(mounts, mount)\n\t}\n\tspec.Mounts = mounts\n\n\t// Remove cgroup settings.\n\tspec.Linux.Resources = nil\n}\n"
  },
  {
    "path": "libcontainer/specconv/spec_linux.go",
    "content": "// Package specconv implements conversion of specifications to libcontainer\n// configurations\npackage specconv\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"maps\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"slices\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\tsystemdDbus \"github.com/coreos/go-systemd/v22/dbus\"\n\tdbus \"github.com/godbus/dbus/v5\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n\tdevices \"github.com/opencontainers/cgroups/devices/config\"\n\t\"github.com/opencontainers/runc/internal/linux\"\n\t\"github.com/opencontainers/runc/internal/pathrs\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/internal/userns\"\n\t\"github.com/opencontainers/runc/libcontainer/seccomp\"\n)\n\nvar (\n\tinitMapsOnce            sync.Once\n\tnamespaceMapping        map[specs.LinuxNamespaceType]configs.NamespaceType\n\tmountPropagationMapping map[string]int\n\trecAttrFlags            map[string]struct {\n\t\tclear bool\n\t\tflag  uint64\n\t}\n\tmountFlags, extensionFlags map[string]struct {\n\t\tclear bool\n\t\tflag  int\n\t}\n\tcomplexFlags map[string]func(*configs.Mount)\n\tmpolModeMap  map[string]int\n\tmpolModeFMap map[string]int\n)\n\nfunc initMaps() {\n\tinitMapsOnce.Do(func() {\n\t\tnamespaceMapping = map[specs.LinuxNamespaceType]configs.NamespaceType{\n\t\t\tspecs.PIDNamespace:     configs.NEWPID,\n\t\t\tspecs.NetworkNamespace: configs.NEWNET,\n\t\t\tspecs.MountNamespace:   configs.NEWNS,\n\t\t\tspecs.UserNamespace:    configs.NEWUSER,\n\t\t\tspecs.IPCNamespace:     configs.NEWIPC,\n\t\t\tspecs.UTSNamespace:     configs.NEWUTS,\n\t\t\tspecs.CgroupNamespace:  configs.NEWCGROUP,\n\t\t\tspecs.TimeNamespace:    configs.NEWTIME,\n\t\t}\n\n\t\tmountPropagationMapping = map[string]int{\n\t\t\t\"rprivate\":    unix.MS_PRIVATE | unix.MS_REC,\n\t\t\t\"private\":     unix.MS_PRIVATE,\n\t\t\t\"rslave\":      unix.MS_SLAVE | unix.MS_REC,\n\t\t\t\"slave\":       unix.MS_SLAVE,\n\t\t\t\"rshared\":     unix.MS_SHARED | unix.MS_REC,\n\t\t\t\"shared\":      unix.MS_SHARED,\n\t\t\t\"runbindable\": unix.MS_UNBINDABLE | unix.MS_REC,\n\t\t\t\"unbindable\":  unix.MS_UNBINDABLE,\n\t\t}\n\n\t\tmountFlags = map[string]struct {\n\t\t\tclear bool\n\t\t\tflag  int\n\t\t}{\n\t\t\t// \"acl\" cannot be mapped to MS_POSIXACL: https://github.com/opencontainers/runc/issues/3738\n\t\t\t\"async\":         {true, unix.MS_SYNCHRONOUS},\n\t\t\t\"atime\":         {true, unix.MS_NOATIME},\n\t\t\t\"bind\":          {false, unix.MS_BIND},\n\t\t\t\"defaults\":      {false, 0},\n\t\t\t\"dev\":           {true, unix.MS_NODEV},\n\t\t\t\"diratime\":      {true, unix.MS_NODIRATIME},\n\t\t\t\"dirsync\":       {false, unix.MS_DIRSYNC},\n\t\t\t\"exec\":          {true, unix.MS_NOEXEC},\n\t\t\t\"iversion\":      {false, unix.MS_I_VERSION},\n\t\t\t\"lazytime\":      {false, unix.MS_LAZYTIME},\n\t\t\t\"loud\":          {true, unix.MS_SILENT},\n\t\t\t\"mand\":          {false, unix.MS_MANDLOCK},\n\t\t\t\"noatime\":       {false, unix.MS_NOATIME},\n\t\t\t\"nodev\":         {false, unix.MS_NODEV},\n\t\t\t\"nodiratime\":    {false, unix.MS_NODIRATIME},\n\t\t\t\"noexec\":        {false, unix.MS_NOEXEC},\n\t\t\t\"noiversion\":    {true, unix.MS_I_VERSION},\n\t\t\t\"nolazytime\":    {true, unix.MS_LAZYTIME},\n\t\t\t\"nomand\":        {true, unix.MS_MANDLOCK},\n\t\t\t\"norelatime\":    {true, unix.MS_RELATIME},\n\t\t\t\"nostrictatime\": {true, unix.MS_STRICTATIME},\n\t\t\t\"nosuid\":        {false, unix.MS_NOSUID},\n\t\t\t\"nosymfollow\":   {false, unix.MS_NOSYMFOLLOW}, // since kernel 5.10\n\t\t\t\"rbind\":         {false, unix.MS_BIND | unix.MS_REC},\n\t\t\t\"relatime\":      {false, unix.MS_RELATIME},\n\t\t\t\"remount\":       {false, unix.MS_REMOUNT},\n\t\t\t\"ro\":            {false, unix.MS_RDONLY},\n\t\t\t\"rw\":            {true, unix.MS_RDONLY},\n\t\t\t\"silent\":        {false, unix.MS_SILENT},\n\t\t\t\"strictatime\":   {false, unix.MS_STRICTATIME},\n\t\t\t\"suid\":          {true, unix.MS_NOSUID},\n\t\t\t\"sync\":          {false, unix.MS_SYNCHRONOUS},\n\t\t\t\"symfollow\":     {true, unix.MS_NOSYMFOLLOW}, // since kernel 5.10\n\t\t}\n\n\t\trecAttrFlags = map[string]struct {\n\t\t\tclear bool\n\t\t\tflag  uint64\n\t\t}{\n\t\t\t\"rro\":            {false, unix.MOUNT_ATTR_RDONLY},\n\t\t\t\"rrw\":            {true, unix.MOUNT_ATTR_RDONLY},\n\t\t\t\"rnosuid\":        {false, unix.MOUNT_ATTR_NOSUID},\n\t\t\t\"rsuid\":          {true, unix.MOUNT_ATTR_NOSUID},\n\t\t\t\"rnodev\":         {false, unix.MOUNT_ATTR_NODEV},\n\t\t\t\"rdev\":           {true, unix.MOUNT_ATTR_NODEV},\n\t\t\t\"rnoexec\":        {false, unix.MOUNT_ATTR_NOEXEC},\n\t\t\t\"rexec\":          {true, unix.MOUNT_ATTR_NOEXEC},\n\t\t\t\"rnodiratime\":    {false, unix.MOUNT_ATTR_NODIRATIME},\n\t\t\t\"rdiratime\":      {true, unix.MOUNT_ATTR_NODIRATIME},\n\t\t\t\"rrelatime\":      {false, unix.MOUNT_ATTR_RELATIME},\n\t\t\t\"rnorelatime\":    {true, unix.MOUNT_ATTR_RELATIME},\n\t\t\t\"rnoatime\":       {false, unix.MOUNT_ATTR_NOATIME},\n\t\t\t\"ratime\":         {true, unix.MOUNT_ATTR_NOATIME},\n\t\t\t\"rstrictatime\":   {false, unix.MOUNT_ATTR_STRICTATIME},\n\t\t\t\"rnostrictatime\": {true, unix.MOUNT_ATTR_STRICTATIME},\n\t\t\t\"rnosymfollow\":   {false, unix.MOUNT_ATTR_NOSYMFOLLOW}, // since kernel 5.14\n\t\t\t\"rsymfollow\":     {true, unix.MOUNT_ATTR_NOSYMFOLLOW},  // since kernel 5.14\n\t\t}\n\n\t\textensionFlags = map[string]struct {\n\t\t\tclear bool\n\t\t\tflag  int\n\t\t}{\n\t\t\t\"tmpcopyup\": {false, configs.EXT_COPYUP},\n\t\t}\n\n\t\tcomplexFlags = map[string]func(*configs.Mount){\n\t\t\t\"idmap\": func(m *configs.Mount) {\n\t\t\t\tm.IDMapping = new(configs.MountIDMapping)\n\t\t\t\tm.IDMapping.Recursive = false // noop\n\t\t\t},\n\t\t\t\"ridmap\": func(m *configs.Mount) {\n\t\t\t\tm.IDMapping = new(configs.MountIDMapping)\n\t\t\t\tm.IDMapping.Recursive = true\n\t\t\t},\n\t\t}\n\n\t\tmpolModeMap = map[string]int{\n\t\t\tstring(specs.MpolDefault):            unix.MPOL_DEFAULT,\n\t\t\tstring(specs.MpolPreferred):          unix.MPOL_PREFERRED,\n\t\t\tstring(specs.MpolBind):               unix.MPOL_BIND,\n\t\t\tstring(specs.MpolInterleave):         unix.MPOL_INTERLEAVE,\n\t\t\tstring(specs.MpolLocal):              unix.MPOL_LOCAL,\n\t\t\tstring(specs.MpolPreferredMany):      unix.MPOL_PREFERRED_MANY,\n\t\t\tstring(specs.MpolWeightedInterleave): unix.MPOL_WEIGHTED_INTERLEAVE,\n\t\t}\n\n\t\tmpolModeFMap = map[string]int{\n\t\t\tstring(specs.MpolFStaticNodes):   unix.MPOL_F_STATIC_NODES,\n\t\t\tstring(specs.MpolFRelativeNodes): unix.MPOL_F_RELATIVE_NODES,\n\t\t\tstring(specs.MpolFNumaBalancing): unix.MPOL_F_NUMA_BALANCING,\n\t\t}\n\t})\n}\n\n// KnownNamespaces returns the list of the known namespaces.\n// Used by `runc features`.\nfunc KnownNamespaces() []string {\n\tinitMaps()\n\tvar res []string\n\tfor k := range namespaceMapping {\n\t\tres = append(res, string(k))\n\t}\n\tsort.Strings(res)\n\treturn res\n}\n\n// KnownMountOptions returns the list of the known mount options.\n// Used by `runc features`.\nfunc KnownMountOptions() []string {\n\tinitMaps()\n\tvar res []string\n\tfor k := range mountFlags {\n\t\tres = append(res, k)\n\t}\n\tfor k := range mountPropagationMapping {\n\t\tres = append(res, k)\n\t}\n\tfor k := range recAttrFlags {\n\t\tres = append(res, k)\n\t}\n\tfor k := range extensionFlags {\n\t\tres = append(res, k)\n\t}\n\tsort.Strings(res)\n\treturn res\n}\n\n// KnownMemoryPolicyModes returns the list of the known memory policy modes.\n// Used by `runc features`.\nfunc KnownMemoryPolicyModes() []string {\n\tinitMaps()\n\treturn slices.Sorted(maps.Keys(mpolModeMap))\n}\n\n// KnownMemoryPolicyFlags returns the list of the known memory policy mode flags.\n// Used by `runc features`.\nfunc KnownMemoryPolicyFlags() []string {\n\tinitMaps()\n\treturn slices.Sorted(maps.Keys(mpolModeFMap))\n}\n\n// AllowedDevices is the set of devices which are automatically included for\n// all containers.\n//\n// # XXX (cyphar)\n//\n// This behaviour is at the very least \"questionable\" (if not outright\n// wrong) according to the runtime-spec.\n//\n// Yes, we have to include certain devices other than the ones the user\n// specifies, but several devices listed here are not part of the spec\n// (including \"mknod for any device\"?!). In addition, these rules are\n// appended to the user-provided set which means that users *cannot disable\n// this behaviour*.\n//\n// ... unfortunately I'm too scared to change this now because who knows how\n// many people depend on this (incorrect and arguably insecure) behaviour.\nvar AllowedDevices = []*devices.Device{\n\t// allow mknod for any device\n\t{\n\t\tRule: devices.Rule{\n\t\t\tType:        devices.CharDevice,\n\t\t\tMajor:       devices.Wildcard,\n\t\t\tMinor:       devices.Wildcard,\n\t\t\tPermissions: \"m\",\n\t\t\tAllow:       true,\n\t\t},\n\t},\n\t{\n\t\tRule: devices.Rule{\n\t\t\tType:        devices.BlockDevice,\n\t\t\tMajor:       devices.Wildcard,\n\t\t\tMinor:       devices.Wildcard,\n\t\t\tPermissions: \"m\",\n\t\t\tAllow:       true,\n\t\t},\n\t},\n\t{\n\t\tPath:     \"/dev/null\",\n\t\tFileMode: 0o666,\n\t\tUid:      0,\n\t\tGid:      0,\n\t\tRule: devices.Rule{\n\t\t\tType:        devices.CharDevice,\n\t\t\tMajor:       1,\n\t\t\tMinor:       3,\n\t\t\tPermissions: \"rwm\",\n\t\t\tAllow:       true,\n\t\t},\n\t},\n\t{\n\t\tPath:     \"/dev/random\",\n\t\tFileMode: 0o666,\n\t\tUid:      0,\n\t\tGid:      0,\n\t\tRule: devices.Rule{\n\t\t\tType:        devices.CharDevice,\n\t\t\tMajor:       1,\n\t\t\tMinor:       8,\n\t\t\tPermissions: \"rwm\",\n\t\t\tAllow:       true,\n\t\t},\n\t},\n\t{\n\t\tPath:     \"/dev/full\",\n\t\tFileMode: 0o666,\n\t\tUid:      0,\n\t\tGid:      0,\n\t\tRule: devices.Rule{\n\t\t\tType:        devices.CharDevice,\n\t\t\tMajor:       1,\n\t\t\tMinor:       7,\n\t\t\tPermissions: \"rwm\",\n\t\t\tAllow:       true,\n\t\t},\n\t},\n\t{\n\t\tPath:     \"/dev/tty\",\n\t\tFileMode: 0o666,\n\t\tUid:      0,\n\t\tGid:      0,\n\t\tRule: devices.Rule{\n\t\t\tType:        devices.CharDevice,\n\t\t\tMajor:       5,\n\t\t\tMinor:       0,\n\t\t\tPermissions: \"rwm\",\n\t\t\tAllow:       true,\n\t\t},\n\t},\n\t{\n\t\tPath:     \"/dev/zero\",\n\t\tFileMode: 0o666,\n\t\tUid:      0,\n\t\tGid:      0,\n\t\tRule: devices.Rule{\n\t\t\tType:        devices.CharDevice,\n\t\t\tMajor:       1,\n\t\t\tMinor:       5,\n\t\t\tPermissions: \"rwm\",\n\t\t\tAllow:       true,\n\t\t},\n\t},\n\t{\n\t\tPath:     \"/dev/urandom\",\n\t\tFileMode: 0o666,\n\t\tUid:      0,\n\t\tGid:      0,\n\t\tRule: devices.Rule{\n\t\t\tType:        devices.CharDevice,\n\t\t\tMajor:       1,\n\t\t\tMinor:       9,\n\t\t\tPermissions: \"rwm\",\n\t\t\tAllow:       true,\n\t\t},\n\t},\n\t// /dev/pts/ - pts namespaces are \"coming soon\"\n\t{\n\t\tRule: devices.Rule{\n\t\t\tType:        devices.CharDevice,\n\t\t\tMajor:       136,\n\t\t\tMinor:       devices.Wildcard,\n\t\t\tPermissions: \"rwm\",\n\t\t\tAllow:       true,\n\t\t},\n\t},\n\t{\n\t\tRule: devices.Rule{\n\t\t\tType:        devices.CharDevice,\n\t\t\tMajor:       5,\n\t\t\tMinor:       2,\n\t\t\tPermissions: \"rwm\",\n\t\t\tAllow:       true,\n\t\t},\n\t},\n\t// The following entry for /dev/net/tun device was there from the\n\t// very early days of Docker, but got removed in runc 1.2.0-rc1,\n\t// causing a number of regressions for users (see\n\t// https://github.com/opencontainers/runc/pull/3468).\n\t//\n\t// Some upper-level orcherstration tools makes it either impossible\n\t// or cumbersome to supply additional device rules, so we have to\n\t// keep this for the sake of backward compatibility.\n\t{\n\t\tRule: devices.Rule{\n\t\t\tType:        devices.CharDevice,\n\t\t\tMajor:       10,\n\t\t\tMinor:       200,\n\t\t\tPermissions: \"rwm\",\n\t\t\tAllow:       true,\n\t\t},\n\t},\n}\n\ntype CreateOpts struct {\n\tCgroupName       string\n\tUseSystemdCgroup bool\n\tNoPivotRoot      bool\n\tNoNewKeyring     bool\n\tSpec             *specs.Spec\n\tRootlessEUID     bool\n\tRootlessCgroups  bool\n}\n\n// CreateLibcontainerConfig creates a new libcontainer configuration from a\n// given specification and a cgroup name\nfunc CreateLibcontainerConfig(opts *CreateOpts) (*configs.Config, error) {\n\t// Runc's cwd will always be the bundle path.\n\t// Use the value from the kernel, which guarantees the returned value\n\t// to be absolute and clean.\n\tcwd, err := linux.Getwd()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tspec := opts.Spec\n\tif spec.Root == nil {\n\t\treturn nil, errors.New(\"root must be specified\")\n\t}\n\trootfsPath := spec.Root.Path\n\tif !filepath.IsAbs(rootfsPath) {\n\t\trootfsPath = filepath.Join(cwd, rootfsPath)\n\t}\n\tlabels := []string{}\n\tfor k, v := range spec.Annotations {\n\t\tlabels = append(labels, k+\"=\"+v)\n\t}\n\tconfig := &configs.Config{\n\t\tRootfs:          rootfsPath,\n\t\tNoPivotRoot:     opts.NoPivotRoot,\n\t\tReadonlyfs:      spec.Root.Readonly,\n\t\tHostname:        spec.Hostname,\n\t\tDomainname:      spec.Domainname,\n\t\tLabels:          append(labels, \"bundle=\"+cwd),\n\t\tNoNewKeyring:    opts.NoNewKeyring,\n\t\tRootlessEUID:    opts.RootlessEUID,\n\t\tRootlessCgroups: opts.RootlessCgroups,\n\t}\n\n\tfor _, m := range spec.Mounts {\n\t\tcm, err := createLibcontainerMount(cwd, m)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid mount %+v: %w\", m, err)\n\t\t}\n\t\tconfig.Mounts = append(config.Mounts, cm)\n\t}\n\n\tdefaultDevs, err := createDevices(spec, config)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tc, err := CreateCgroupConfig(opts, defaultDevs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tconfig.Cgroups = c\n\t// set linux-specific config\n\tif spec.Linux != nil {\n\t\tinitMaps()\n\n\t\tif spec.Linux.RootfsPropagation != \"\" {\n\t\t\tvar exists bool\n\t\t\tif config.RootPropagation, exists = mountPropagationMapping[spec.Linux.RootfsPropagation]; !exists {\n\t\t\t\treturn nil, fmt.Errorf(\"rootfsPropagation=%v is not supported\", spec.Linux.RootfsPropagation)\n\t\t\t}\n\t\t\tif config.NoPivotRoot && (config.RootPropagation&unix.MS_PRIVATE != 0) {\n\t\t\t\treturn nil, errors.New(\"rootfsPropagation of [r]private is not safe without pivot_root\")\n\t\t\t}\n\t\t}\n\n\t\tfor _, ns := range spec.Linux.Namespaces {\n\t\t\tt, exists := namespaceMapping[ns.Type]\n\t\t\tif !exists {\n\t\t\t\treturn nil, fmt.Errorf(\"namespace %q does not exist\", ns)\n\t\t\t}\n\t\t\tif config.Namespaces.Contains(t) {\n\t\t\t\treturn nil, fmt.Errorf(\"malformed spec file: duplicated ns %q\", ns)\n\t\t\t}\n\t\t\tconfig.Namespaces.Add(t, ns.Path)\n\t\t}\n\t\tif config.Namespaces.IsPrivate(configs.NEWNET) {\n\t\t\tconfig.Networks = []*configs.Network{\n\t\t\t\t{\n\t\t\t\t\tType: \"loopback\",\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tif config.Namespaces.Contains(configs.NEWUSER) {\n\t\t\tif err := setupUserNamespace(spec, config); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t// For idmap and ridmap mounts without explicit mappings, use the\n\t\t\t// ones from the container's userns. If we are joining another\n\t\t\t// userns, stash the path.\n\t\t\tfor _, m := range config.Mounts {\n\t\t\t\tif m.IDMapping != nil && m.IDMapping.UIDMappings == nil && m.IDMapping.GIDMappings == nil {\n\t\t\t\t\tif path := config.Namespaces.PathOf(configs.NEWUSER); path != \"\" {\n\t\t\t\t\t\tm.IDMapping.UserNSPath = path\n\t\t\t\t\t} else {\n\t\t\t\t\t\tm.IDMapping.UIDMappings = config.UIDMappings\n\t\t\t\t\t\tm.IDMapping.GIDMappings = config.GIDMappings\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconfig.MaskPaths = spec.Linux.MaskedPaths\n\t\tconfig.ReadonlyPaths = spec.Linux.ReadonlyPaths\n\t\tconfig.MountLabel = spec.Linux.MountLabel\n\t\tconfig.Sysctl = spec.Linux.Sysctl\n\t\tconfig.TimeOffsets = spec.Linux.TimeOffsets\n\t\tif spec.Linux.Seccomp != nil {\n\t\t\tseccomp, err := SetupSeccomp(spec.Linux.Seccomp)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tconfig.Seccomp = seccomp\n\t\t}\n\t\tif spec.Linux.IntelRdt != nil {\n\t\t\tconfig.IntelRdt = &configs.IntelRdt{\n\t\t\t\tClosID:           spec.Linux.IntelRdt.ClosID,\n\t\t\t\tSchemata:         spec.Linux.IntelRdt.Schemata,\n\t\t\t\tL3CacheSchema:    spec.Linux.IntelRdt.L3CacheSchema,\n\t\t\t\tMemBwSchema:      spec.Linux.IntelRdt.MemBwSchema,\n\t\t\t\tEnableMonitoring: spec.Linux.IntelRdt.EnableMonitoring,\n\t\t\t}\n\t\t}\n\t\tif spec.Linux.MemoryPolicy != nil {\n\t\t\tvar ok bool\n\t\t\tvar err error\n\t\t\tspecMp := spec.Linux.MemoryPolicy\n\t\t\tconfMp := &configs.LinuxMemoryPolicy{}\n\t\t\tconfMp.Mode, ok = mpolModeMap[string(specMp.Mode)]\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid memory policy mode %q\", specMp.Mode)\n\t\t\t}\n\t\t\tconfMp.Nodes, err = configs.ToCPUSet(specMp.Nodes)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid memory policy nodes %q: %w\", specMp.Nodes, err)\n\t\t\t}\n\t\t\tfor _, specFlag := range specMp.Flags {\n\t\t\t\tconfFlag, ok := mpolModeFMap[string(specFlag)]\n\t\t\t\tif !ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\"invalid memory policy flag %q\", specFlag)\n\t\t\t\t}\n\t\t\t\tconfMp.Flags |= confFlag\n\t\t\t}\n\t\t\tconfig.MemoryPolicy = confMp\n\t\t}\n\t\tif spec.Linux.Personality != nil {\n\t\t\tif len(spec.Linux.Personality.Flags) > 0 {\n\t\t\t\tlogrus.Warnf(\"ignoring unsupported personality flags: %+v because personality flag has not supported at this time\", spec.Linux.Personality.Flags)\n\t\t\t}\n\t\t\tdomain, err := getLinuxPersonalityFromStr(string(spec.Linux.Personality.Domain))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tconfig.Personality = &configs.LinuxPersonality{\n\t\t\t\tDomain: domain,\n\t\t\t}\n\t\t}\n\n\t\tfor name, netdev := range spec.Linux.NetDevices {\n\t\t\tif config.NetDevices == nil {\n\t\t\t\tconfig.NetDevices = make(map[string]*configs.LinuxNetDevice)\n\t\t\t}\n\t\t\tconfig.NetDevices[name] = &configs.LinuxNetDevice{\n\t\t\t\tName: netdev.Name,\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the host UID that should own the container's cgroup.\n\t// This must be performed after setupUserNamespace, so that\n\t// config.HostRootUID() returns the correct result.\n\t//\n\t// Only set it if the container will have its own cgroup\n\t// namespace and the cgroupfs will be mounted read/write.\n\t//\n\thasCgroupNS := config.Namespaces.IsPrivate(configs.NEWCGROUP)\n\thasRwCgroupfs := false\n\tif hasCgroupNS {\n\t\tfor _, m := range config.Mounts {\n\t\t\tif m.Source == \"cgroup\" && filepath.Clean(m.Destination) == \"/sys/fs/cgroup\" && (m.Flags&unix.MS_RDONLY) == 0 {\n\t\t\t\thasRwCgroupfs = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tprocessUid := 0\n\tif spec.Process != nil {\n\t\t// Chown the cgroup to the UID running the process,\n\t\t// which is not necessarily UID 0 in the container\n\t\t// namespace (e.g., an unprivileged UID in the host\n\t\t// user namespace).\n\t\tprocessUid = int(spec.Process.User.UID)\n\t}\n\tif hasCgroupNS && hasRwCgroupfs {\n\t\townerUid, err := config.HostUID(processUid)\n\t\t// There are two error cases; we can ignore both.\n\t\t//\n\t\t// 1. uidMappings is unset.  Either there is no user\n\t\t//    namespace (fine), or it is an error (which is\n\t\t//    checked elsewhere).\n\t\t//\n\t\t// 2. The user is unmapped in the user namespace.  This is an\n\t\t//    unusual configuration and might be an error.  But it too\n\t\t//    will be checked elsewhere, so we can ignore it here.\n\t\t//\n\t\tif err == nil {\n\t\t\tconfig.Cgroups.OwnerUID = &ownerUid\n\t\t}\n\t}\n\n\tif spec.Process != nil {\n\t\tconfig.OomScoreAdj = spec.Process.OOMScoreAdj\n\t\tconfig.NoNewPrivileges = spec.Process.NoNewPrivileges\n\t\tconfig.Umask = spec.Process.User.Umask\n\t\tconfig.ProcessLabel = spec.Process.SelinuxLabel\n\t\tif spec.Process.Capabilities != nil {\n\t\t\tconfig.Capabilities = &configs.Capabilities{\n\t\t\t\tBounding:    spec.Process.Capabilities.Bounding,\n\t\t\t\tEffective:   spec.Process.Capabilities.Effective,\n\t\t\t\tPermitted:   spec.Process.Capabilities.Permitted,\n\t\t\t\tInheritable: spec.Process.Capabilities.Inheritable,\n\t\t\t\tAmbient:     spec.Process.Capabilities.Ambient,\n\t\t\t}\n\t\t}\n\t\tif spec.Process.Scheduler != nil {\n\t\t\ts := *spec.Process.Scheduler\n\t\t\tconfig.Scheduler = &s\n\t\t}\n\n\t\tif spec.Process.IOPriority != nil {\n\t\t\tioPriority := *spec.Process.IOPriority\n\t\t\tconfig.IOPriority = &ioPriority\n\t\t}\n\t\tconfig.ExecCPUAffinity, err = configs.ConvertCPUAffinity(spec.Process.ExecCPUAffinity)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t}\n\tcreateHooks(spec, config)\n\tconfig.Version = specs.Version\n\treturn config, nil\n}\n\nfunc toConfigIDMap(specMaps []specs.LinuxIDMapping) []configs.IDMap {\n\tif specMaps == nil {\n\t\treturn nil\n\t}\n\tidmaps := make([]configs.IDMap, len(specMaps))\n\tfor i, id := range specMaps {\n\t\tidmaps[i] = configs.IDMap{\n\t\t\tContainerID: int64(id.ContainerID),\n\t\t\tHostID:      int64(id.HostID),\n\t\t\tSize:        int64(id.Size),\n\t\t}\n\t}\n\treturn idmaps\n}\n\nfunc createLibcontainerMount(cwd string, m specs.Mount) (*configs.Mount, error) {\n\tif !filepath.IsAbs(m.Destination) {\n\t\t// Relax validation for backward compatibility\n\t\t// TODO (runc v1.x.x): change warning to an error\n\t\t// return nil, fmt.Errorf(\"mount destination %s is not absolute\", m.Destination)\n\t\tlogrus.Warnf(\"mount destination %s is not absolute. Support for non-absolute mount destinations will be removed in a future release.\", m.Destination)\n\t}\n\tmnt := parseMountOptions(m.Options)\n\n\tmnt.Destination = m.Destination\n\tmnt.Source = m.Source\n\tmnt.Device = m.Type\n\tif mnt.Flags&unix.MS_BIND != 0 {\n\t\t// Any \"type\" the user specified is meaningless (and ignored) for\n\t\t// bind-mounts -- so we set it to \"bind\" because rootfs_linux.go\n\t\t// (incorrectly) relies on this for some checks.\n\t\tmnt.Device = \"bind\"\n\t\tif !filepath.IsAbs(mnt.Source) {\n\t\t\tmnt.Source = filepath.Join(cwd, m.Source)\n\t\t}\n\t}\n\n\tif m.UIDMappings != nil || m.GIDMappings != nil {\n\t\tif mnt.IDMapping == nil {\n\t\t\t// Neither \"idmap\" nor \"ridmap\" were specified.\n\t\t\tmnt.IDMapping = new(configs.MountIDMapping)\n\t\t}\n\t\tmnt.IDMapping.UIDMappings = toConfigIDMap(m.UIDMappings)\n\t\tmnt.IDMapping.GIDMappings = toConfigIDMap(m.GIDMappings)\n\t}\n\n\t// None of the mount arguments can contain a null byte. Normally such\n\t// strings would either cause some other failure or would just be truncated\n\t// when we hit the null byte, but because we serialise these strings as\n\t// netlink messages (which don't have special null-byte handling) we need\n\t// to block this as early as possible.\n\tif strings.IndexByte(mnt.Source, 0) >= 0 ||\n\t\tstrings.IndexByte(mnt.Destination, 0) >= 0 ||\n\t\tstrings.IndexByte(mnt.Device, 0) >= 0 {\n\t\treturn nil, errors.New(\"mount field contains null byte\")\n\t}\n\n\treturn mnt, nil\n}\n\n// checkPropertyName checks if systemd property name is valid. A valid name\n// should consist of latin letters only, and have least 3 of them.\nfunc checkPropertyName(s string) error {\n\tif len(s) < 3 {\n\t\treturn errors.New(\"too short\")\n\t}\n\t// Check ASCII characters rather than Unicode runes,\n\t// so we have to use indexes rather than range.\n\tfor i := range len(s) {\n\t\tch := s[i]\n\t\tif (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') {\n\t\t\tcontinue\n\t\t}\n\t\treturn errors.New(\"contains non-alphabetic character\")\n\t}\n\treturn nil\n}\n\n// getLinuxPersonalityFromStr converts the string domain received from spec to equivalent integer.\nfunc getLinuxPersonalityFromStr(domain string) (int, error) {\n\tif domain == string(specs.PerLinux32) {\n\t\treturn configs.PerLinux32, nil\n\t} else if domain == string(specs.PerLinux) {\n\t\treturn configs.PerLinux, nil\n\t}\n\treturn -1, fmt.Errorf(\"invalid personality domain %s\", domain)\n}\n\n// Some systemd properties are documented as having \"Sec\" suffix\n// (e.g. TimeoutStopSec) but are expected to have \"USec\" suffix\n// here, so let's provide conversion to improve compatibility.\nfunc convertSecToUSec(value dbus.Variant) (dbus.Variant, error) {\n\tvar sec uint64\n\tconst M = 1000000\n\tvi := value.Value()\n\tswitch value.Signature().String() {\n\tcase \"y\":\n\t\tsec = uint64(vi.(byte)) * M\n\tcase \"n\":\n\t\tsec = uint64(vi.(int16)) * M\n\tcase \"q\":\n\t\tsec = uint64(vi.(uint16)) * M\n\tcase \"i\":\n\t\tsec = uint64(vi.(int32)) * M\n\tcase \"u\":\n\t\tsec = uint64(vi.(uint32)) * M\n\tcase \"x\":\n\t\tsec = uint64(vi.(int64)) * M\n\tcase \"t\":\n\t\tsec = vi.(uint64) * M\n\tcase \"d\":\n\t\tsec = uint64(vi.(float64) * M)\n\tdefault:\n\t\treturn value, errors.New(\"not a number\")\n\t}\n\treturn dbus.MakeVariant(sec), nil\n}\n\nfunc initSystemdProps(spec *specs.Spec) ([]systemdDbus.Property, error) {\n\tconst keyPrefix = \"org.systemd.property.\"\n\tvar sp []systemdDbus.Property\n\n\tfor k, v := range spec.Annotations {\n\t\tname, ok := strings.CutPrefix(k, keyPrefix)\n\t\tif !ok { // prefix not there\n\t\t\tcontinue\n\t\t}\n\t\tif err := checkPropertyName(name); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"annotation %s name incorrect: %w\", k, err)\n\t\t}\n\t\tvalue, err := dbus.ParseVariant(v, dbus.Signature{})\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"annotation %s=%s value parse error: %w\", k, v, err)\n\t\t}\n\t\t// Check for Sec suffix.\n\t\tif trimName, ok := strings.CutSuffix(name, \"Sec\"); ok && len(trimName) > 0 {\n\t\t\t// Check for a lowercase ascii a-z just before Sec.\n\t\t\tif ch := trimName[len(trimName)-1]; ch >= 'a' && ch <= 'z' {\n\t\t\t\t// Convert from Sec to USec.\n\t\t\t\tname = trimName + \"USec\"\n\t\t\t\tvalue, err = convertSecToUSec(value)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"annotation %s=%s value parse error: %w\", k, v, err)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsp = append(sp, systemdDbus.Property{Name: name, Value: value})\n\t}\n\n\treturn sp, nil\n}\n\nfunc CreateCgroupConfig(opts *CreateOpts, defaultDevs []*devices.Device) (*cgroups.Cgroup, error) {\n\tvar (\n\t\tmyCgroupPath string\n\n\t\tspec             = opts.Spec\n\t\tuseSystemdCgroup = opts.UseSystemdCgroup\n\t\tname             = opts.CgroupName\n\t)\n\n\tc := &cgroups.Cgroup{\n\t\tSystemd:   useSystemdCgroup,\n\t\tRootless:  opts.RootlessCgroups,\n\t\tResources: &cgroups.Resources{},\n\t}\n\n\tif useSystemdCgroup {\n\t\tsp, err := initSystemdProps(spec)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tc.SystemdProps = sp\n\t}\n\n\tif spec.Linux != nil && spec.Linux.CgroupsPath != \"\" {\n\t\tif useSystemdCgroup {\n\t\t\tmyCgroupPath = spec.Linux.CgroupsPath\n\t\t} else {\n\t\t\tmyCgroupPath = pathrs.LexicallyCleanPath(spec.Linux.CgroupsPath)\n\t\t}\n\t}\n\n\tif useSystemdCgroup {\n\t\tif myCgroupPath == \"\" {\n\t\t\t// Default for c.Parent is set by systemd cgroup drivers.\n\t\t\tc.ScopePrefix = \"runc\"\n\t\t\tc.Name = name\n\t\t} else {\n\t\t\t// Parse the path from expected \"slice:prefix:name\"\n\t\t\t// for e.g. \"system.slice:docker:1234\"\n\t\t\tparts := strings.Split(myCgroupPath, \":\")\n\t\t\tif len(parts) != 3 {\n\t\t\t\treturn nil, fmt.Errorf(\"expected cgroupsPath to be of format \\\"slice:prefix:name\\\" for systemd cgroups, got %q instead\", myCgroupPath)\n\t\t\t}\n\t\t\tc.Parent = parts[0]\n\t\t\tc.ScopePrefix = parts[1]\n\t\t\tc.Name = parts[2]\n\t\t}\n\t} else {\n\t\tif myCgroupPath == \"\" {\n\t\t\tc.Name = name\n\t\t}\n\t\tc.Path = myCgroupPath\n\t}\n\n\t// In rootless containers, any attempt to make cgroup changes is likely to fail.\n\t// libcontainer will validate this but ignores the error.\n\tif spec.Linux != nil {\n\t\tr := spec.Linux.Resources\n\t\tif r != nil {\n\t\t\tfor i, d := range r.Devices {\n\t\t\t\tvar (\n\t\t\t\t\tt     = \"a\"\n\t\t\t\t\tmajor = int64(-1)\n\t\t\t\t\tminor = int64(-1)\n\t\t\t\t)\n\t\t\t\tif d.Type != \"\" {\n\t\t\t\t\tt = d.Type\n\t\t\t\t}\n\t\t\t\tif d.Major != nil {\n\t\t\t\t\tmajor = *d.Major\n\t\t\t\t}\n\t\t\t\tif d.Minor != nil {\n\t\t\t\t\tminor = *d.Minor\n\t\t\t\t}\n\t\t\t\tif d.Access == \"\" {\n\t\t\t\t\treturn nil, fmt.Errorf(\"device access at %d field cannot be empty\", i)\n\t\t\t\t}\n\t\t\t\tdt, err := stringToCgroupDeviceRune(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\tc.Resources.Devices = append(c.Resources.Devices, &devices.Rule{\n\t\t\t\t\tType:        dt,\n\t\t\t\t\tMajor:       major,\n\t\t\t\t\tMinor:       minor,\n\t\t\t\t\tPermissions: devices.Permissions(d.Access),\n\t\t\t\t\tAllow:       d.Allow,\n\t\t\t\t})\n\t\t\t}\n\t\t\tif r.Memory != nil {\n\t\t\t\tif r.Memory.Limit != nil {\n\t\t\t\t\tc.Resources.Memory = *r.Memory.Limit\n\t\t\t\t}\n\t\t\t\tif r.Memory.Reservation != nil {\n\t\t\t\t\tc.Resources.MemoryReservation = *r.Memory.Reservation\n\t\t\t\t}\n\t\t\t\tif r.Memory.Swap != nil {\n\t\t\t\t\tc.Resources.MemorySwap = *r.Memory.Swap\n\t\t\t\t}\n\t\t\t\tif r.Memory.Kernel != nil || r.Memory.KernelTCP != nil { //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility.\n\t\t\t\t\tlogrus.Warn(\"Kernel memory settings are ignored and will be removed\")\n\t\t\t\t}\n\t\t\t\tif r.Memory.Swappiness != nil {\n\t\t\t\t\tc.Resources.MemorySwappiness = r.Memory.Swappiness\n\t\t\t\t}\n\t\t\t\tif r.Memory.DisableOOMKiller != nil {\n\t\t\t\t\tc.Resources.OomKillDisable = *r.Memory.DisableOOMKiller\n\t\t\t\t}\n\t\t\t\tif r.Memory.CheckBeforeUpdate != nil {\n\t\t\t\t\tc.Resources.MemoryCheckBeforeUpdate = *r.Memory.CheckBeforeUpdate\n\t\t\t\t}\n\t\t\t}\n\t\t\tif r.CPU != nil {\n\t\t\t\tif r.CPU.Shares != nil {\n\t\t\t\t\tc.Resources.CpuShares = *r.CPU.Shares\n\n\t\t\t\t\t// CpuWeight is used for cgroupv2 and should be converted\n\t\t\t\t\tc.Resources.CpuWeight = cgroups.ConvertCPUSharesToCgroupV2Value(c.Resources.CpuShares)\n\t\t\t\t}\n\t\t\t\tif r.CPU.Quota != nil {\n\t\t\t\t\tc.Resources.CpuQuota = *r.CPU.Quota\n\t\t\t\t}\n\t\t\t\tif r.CPU.Burst != nil {\n\t\t\t\t\tc.Resources.CpuBurst = r.CPU.Burst\n\t\t\t\t}\n\t\t\t\tif r.CPU.Period != nil {\n\t\t\t\t\tc.Resources.CpuPeriod = *r.CPU.Period\n\t\t\t\t}\n\t\t\t\tif r.CPU.RealtimeRuntime != nil {\n\t\t\t\t\tc.Resources.CpuRtRuntime = *r.CPU.RealtimeRuntime\n\t\t\t\t}\n\t\t\t\tif r.CPU.RealtimePeriod != nil {\n\t\t\t\t\tc.Resources.CpuRtPeriod = *r.CPU.RealtimePeriod\n\t\t\t\t}\n\t\t\t\tc.Resources.CpusetCpus = r.CPU.Cpus\n\t\t\t\tc.Resources.CpusetMems = r.CPU.Mems\n\t\t\t\tc.Resources.CPUIdle = r.CPU.Idle\n\t\t\t}\n\t\t\tif r.Pids != nil {\n\t\t\t\tc.Resources.PidsLimit = r.Pids.Limit\n\t\t\t}\n\t\t\tif r.BlockIO != nil {\n\t\t\t\tif r.BlockIO.Weight != nil {\n\t\t\t\t\tc.Resources.BlkioWeight = *r.BlockIO.Weight\n\t\t\t\t}\n\t\t\t\tif r.BlockIO.LeafWeight != nil {\n\t\t\t\t\tc.Resources.BlkioLeafWeight = *r.BlockIO.LeafWeight\n\t\t\t\t}\n\t\t\t\tfor _, wd := range r.BlockIO.WeightDevice {\n\t\t\t\t\tvar weight, leafWeight uint16\n\t\t\t\t\tif wd.Weight != nil {\n\t\t\t\t\t\tweight = *wd.Weight\n\t\t\t\t\t}\n\t\t\t\t\tif wd.LeafWeight != nil {\n\t\t\t\t\t\tleafWeight = *wd.LeafWeight\n\t\t\t\t\t}\n\t\t\t\t\tweightDevice := cgroups.NewWeightDevice(wd.Major, wd.Minor, weight, leafWeight)\n\t\t\t\t\tc.Resources.BlkioWeightDevice = append(c.Resources.BlkioWeightDevice, weightDevice)\n\t\t\t\t}\n\t\t\t\tfor _, td := range r.BlockIO.ThrottleReadBpsDevice {\n\t\t\t\t\trate := td.Rate\n\t\t\t\t\tthrottleDevice := cgroups.NewThrottleDevice(td.Major, td.Minor, rate)\n\t\t\t\t\tc.Resources.BlkioThrottleReadBpsDevice = append(c.Resources.BlkioThrottleReadBpsDevice, throttleDevice)\n\t\t\t\t}\n\t\t\t\tfor _, td := range r.BlockIO.ThrottleWriteBpsDevice {\n\t\t\t\t\trate := td.Rate\n\t\t\t\t\tthrottleDevice := cgroups.NewThrottleDevice(td.Major, td.Minor, rate)\n\t\t\t\t\tc.Resources.BlkioThrottleWriteBpsDevice = append(c.Resources.BlkioThrottleWriteBpsDevice, throttleDevice)\n\t\t\t\t}\n\t\t\t\tfor _, td := range r.BlockIO.ThrottleReadIOPSDevice {\n\t\t\t\t\trate := td.Rate\n\t\t\t\t\tthrottleDevice := cgroups.NewThrottleDevice(td.Major, td.Minor, rate)\n\t\t\t\t\tc.Resources.BlkioThrottleReadIOPSDevice = append(c.Resources.BlkioThrottleReadIOPSDevice, throttleDevice)\n\t\t\t\t}\n\t\t\t\tfor _, td := range r.BlockIO.ThrottleWriteIOPSDevice {\n\t\t\t\t\trate := td.Rate\n\t\t\t\t\tthrottleDevice := cgroups.NewThrottleDevice(td.Major, td.Minor, rate)\n\t\t\t\t\tc.Resources.BlkioThrottleWriteIOPSDevice = append(c.Resources.BlkioThrottleWriteIOPSDevice, throttleDevice)\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor _, l := range r.HugepageLimits {\n\t\t\t\tc.Resources.HugetlbLimit = append(c.Resources.HugetlbLimit, &cgroups.HugepageLimit{\n\t\t\t\t\tPagesize: l.Pagesize,\n\t\t\t\t\tLimit:    l.Limit,\n\t\t\t\t})\n\t\t\t}\n\t\t\tif len(r.Rdma) > 0 {\n\t\t\t\tc.Resources.Rdma = make(map[string]cgroups.LinuxRdma, len(r.Rdma))\n\t\t\t\tfor k, v := range r.Rdma {\n\t\t\t\t\tc.Resources.Rdma[k] = cgroups.LinuxRdma{\n\t\t\t\t\t\tHcaHandles: v.HcaHandles,\n\t\t\t\t\t\tHcaObjects: v.HcaObjects,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif r.Network != nil {\n\t\t\t\tif r.Network.ClassID != nil {\n\t\t\t\t\tc.Resources.NetClsClassid = *r.Network.ClassID\n\t\t\t\t}\n\t\t\t\tfor _, m := range r.Network.Priorities {\n\t\t\t\t\tc.Resources.NetPrioIfpriomap = append(c.Resources.NetPrioIfpriomap, &cgroups.IfPrioMap{\n\t\t\t\t\t\tInterface: m.Name,\n\t\t\t\t\t\tPriority:  int64(m.Priority),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(r.Unified) > 0 {\n\t\t\t\tc.Resources.Unified = maps.Clone(r.Unified)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Append the default allowed devices to the end of the list.\n\tfor _, device := range defaultDevs {\n\t\tc.Resources.Devices = append(c.Resources.Devices, &device.Rule)\n\t}\n\treturn c, nil\n}\n\nfunc stringToCgroupDeviceRune(s string) (devices.Type, error) {\n\tswitch s {\n\tcase \"a\":\n\t\treturn devices.WildcardDevice, nil\n\tcase \"b\":\n\t\treturn devices.BlockDevice, nil\n\tcase \"c\":\n\t\treturn devices.CharDevice, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"invalid cgroup device type %q\", s)\n\t}\n}\n\nfunc stringToDeviceRune(s string) (devices.Type, error) {\n\tswitch s {\n\tcase \"p\":\n\t\treturn devices.FifoDevice, nil\n\tcase \"u\", \"c\":\n\t\treturn devices.CharDevice, nil\n\tcase \"b\":\n\t\treturn devices.BlockDevice, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"invalid device type %q\", s)\n\t}\n}\n\nfunc createDevices(spec *specs.Spec, config *configs.Config) ([]*devices.Device, error) {\n\t// If a spec device is redundant with a default device, remove that default\n\t// device (the spec one takes priority).\n\tdedupedAllowDevs := []*devices.Device{}\n\nnext:\n\tfor _, ad := range AllowedDevices {\n\t\tif ad.Path != \"\" && spec.Linux != nil {\n\t\t\tfor _, sd := range spec.Linux.Devices {\n\t\t\t\tif sd.Path == ad.Path {\n\t\t\t\t\tcontinue next\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdedupedAllowDevs = append(dedupedAllowDevs, ad)\n\t\tif ad.Path != \"\" {\n\t\t\tconfig.Devices = append(config.Devices, ad)\n\t\t}\n\t}\n\n\t// Merge in additional devices from the spec.\n\tif spec.Linux != nil {\n\t\tfor _, d := range spec.Linux.Devices {\n\t\t\tvar uid, gid uint32\n\t\t\tvar filemode os.FileMode = 0o666\n\n\t\t\tif d.UID != nil {\n\t\t\t\tuid = *d.UID\n\t\t\t}\n\t\t\tif d.GID != nil {\n\t\t\t\tgid = *d.GID\n\t\t\t}\n\t\t\tdt, err := stringToDeviceRune(d.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tif d.FileMode != nil {\n\t\t\t\tfilemode = *d.FileMode &^ unix.S_IFMT\n\t\t\t}\n\t\t\tdevice := &devices.Device{\n\t\t\t\tRule: devices.Rule{\n\t\t\t\t\tType:  dt,\n\t\t\t\t\tMajor: d.Major,\n\t\t\t\t\tMinor: d.Minor,\n\t\t\t\t},\n\t\t\t\tPath:     d.Path,\n\t\t\t\tFileMode: filemode,\n\t\t\t\tUid:      uid,\n\t\t\t\tGid:      gid,\n\t\t\t}\n\t\t\tconfig.Devices = append(config.Devices, device)\n\t\t}\n\t}\n\n\treturn dedupedAllowDevs, nil\n}\n\nfunc setupUserNamespace(spec *specs.Spec, config *configs.Config) error {\n\tif spec.Linux != nil {\n\t\tconfig.UIDMappings = toConfigIDMap(spec.Linux.UIDMappings)\n\t\tconfig.GIDMappings = toConfigIDMap(spec.Linux.GIDMappings)\n\t}\n\tif path := config.Namespaces.PathOf(configs.NEWUSER); path != \"\" {\n\t\t// Cache the current userns mappings in our configuration, so that we\n\t\t// can calculate uid and gid mappings within runc. These mappings are\n\t\t// never used for configuring the container if the path is set.\n\t\tuidMap, gidMap, err := userns.GetUserNamespaceMappings(path)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to cache mappings for userns: %w\", err)\n\t\t}\n\t\t// We cannot allow uid or gid mappings to be set if we are also asked\n\t\t// to join a userns.\n\t\tif config.UIDMappings != nil || config.GIDMappings != nil {\n\t\t\t// FIXME: It turns out that containerd and CRIO pass both a userns\n\t\t\t// path and the mappings of the namespace in the same config.json.\n\t\t\t// Such a configuration is technically not valid, but we used to\n\t\t\t// require mappings be specified, and thus users worked around our\n\t\t\t// bug -- so we can't regress it at the moment. But we also don't\n\t\t\t// want to produce broken behaviour if the mapping doesn't match\n\t\t\t// the userns. So (for now) we output a warning if the actual\n\t\t\t// userns mappings match the configuration, otherwise we return an\n\t\t\t// error.\n\t\t\tif !userns.IsSameMapping(uidMap, config.UIDMappings) ||\n\t\t\t\t!userns.IsSameMapping(gidMap, config.GIDMappings) {\n\t\t\t\treturn errors.New(\"user namespaces enabled, but both namespace path and non-matching mapping specified -- you may only provide one\")\n\t\t\t}\n\t\t\tlogrus.Warnf(\"config.json has both a userns path to join and a matching userns mapping specified -- you may only provide one. Future versions of runc may return an error with this configuration, please report a bug on <https://github.com/opencontainers/runc> if you see this warning and cannot update your configuration.\")\n\t\t}\n\n\t\tconfig.UIDMappings = uidMap\n\t\tconfig.GIDMappings = gidMap\n\t\tlogrus.WithFields(logrus.Fields{\n\t\t\t\"uid_map\": uidMap,\n\t\t\t\"gid_map\": gidMap,\n\t\t}).Debugf(\"config uses path-based userns configuration -- current uid and gid mappings cached\")\n\t}\n\trootUID, err := config.HostRootUID()\n\tif err != nil {\n\t\treturn err\n\t}\n\trootGID, err := config.HostRootGID()\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor _, node := range config.Devices {\n\t\tnode.Uid = uint32(rootUID)\n\t\tnode.Gid = uint32(rootGID)\n\t}\n\treturn nil\n}\n\n// parseMountOptions parses options and returns a configs.Mount\n// structure with fields that depends on options set accordingly.\nfunc parseMountOptions(options []string) *configs.Mount {\n\tvar (\n\t\tdata                   []string\n\t\tm                      configs.Mount\n\t\trecAttrSet, recAttrClr uint64\n\t)\n\tinitMaps()\n\tfor _, o := range options {\n\t\t// If the option does not exist in the mountFlags table,\n\t\t// or the flag is not supported on the platform,\n\t\t// then it is a data value for a specific fs type.\n\t\tif f, exists := mountFlags[o]; exists && f.flag != 0 {\n\t\t\t// FIXME: The *atime flags are special (they are more of an enum\n\t\t\t// with quite hairy semantics) and thus arguably setting some of\n\t\t\t// them should clear unrelated flags.\n\t\t\tif f.clear {\n\t\t\t\tm.Flags &= ^f.flag\n\t\t\t\tm.ClearedFlags |= f.flag\n\t\t\t} else {\n\t\t\t\tm.Flags |= f.flag\n\t\t\t\tm.ClearedFlags &= ^f.flag\n\t\t\t}\n\t\t} else if f, exists := mountPropagationMapping[o]; exists && f != 0 {\n\t\t\tm.PropagationFlags = append(m.PropagationFlags, f)\n\t\t} else if f, exists := recAttrFlags[o]; exists {\n\t\t\tif f.clear {\n\t\t\t\trecAttrClr |= f.flag\n\t\t\t\trecAttrSet &= ^f.flag\n\t\t\t} else {\n\t\t\t\trecAttrSet |= f.flag\n\t\t\t\trecAttrClr &= ^f.flag\n\t\t\t}\n\t\t\tif f.flag&unix.MOUNT_ATTR__ATIME == f.flag {\n\t\t\t\t// https://man7.org/linux/man-pages/man2/mount_setattr.2.html\n\t\t\t\t// \"cannot simply specify the access-time setting in attr_set, but must also include MOUNT_ATTR__ATIME in the attr_clr field.\"\n\t\t\t\trecAttrClr |= unix.MOUNT_ATTR__ATIME\n\t\t\t}\n\t\t} else if f, exists := extensionFlags[o]; exists {\n\t\t\tif f.clear {\n\t\t\t\tm.Extensions &= ^f.flag\n\t\t\t} else {\n\t\t\t\tm.Extensions |= f.flag\n\t\t\t}\n\t\t} else if fn, exists := complexFlags[o]; exists {\n\t\t\tfn(&m)\n\t\t} else {\n\t\t\tdata = append(data, o)\n\t\t}\n\t}\n\tm.Data = strings.Join(data, \",\")\n\tif recAttrSet != 0 || recAttrClr != 0 {\n\t\tm.RecAttr = &unix.MountAttr{\n\t\t\tAttr_set: recAttrSet,\n\t\t\tAttr_clr: recAttrClr,\n\t\t}\n\t}\n\treturn &m\n}\n\nfunc SetupSeccomp(config *specs.LinuxSeccomp) (*configs.Seccomp, error) {\n\tif config == nil {\n\t\treturn nil, nil\n\t}\n\n\t// No default action specified, no syscalls listed, assume seccomp disabled\n\tif config.DefaultAction == \"\" && len(config.Syscalls) == 0 {\n\t\treturn nil, nil\n\t}\n\n\tnewConfig := new(configs.Seccomp)\n\tnewConfig.Syscalls = []*configs.Syscall{}\n\n\t// The list of flags defined in runtime-spec is a subset of the flags\n\t// in the seccomp() syscall.\n\tif config.Flags == nil {\n\t\t// No flags are set explicitly (not even the empty set);\n\t\t// set the default of specs.LinuxSeccompFlagSpecAllow,\n\t\t// if it is supported by the libseccomp and the kernel.\n\t\tif err := seccomp.FlagSupported(specs.LinuxSeccompFlagSpecAllow); err == nil {\n\t\t\tnewConfig.Flags = []specs.LinuxSeccompFlag{specs.LinuxSeccompFlagSpecAllow}\n\t\t}\n\t} else {\n\t\t// Fail early if some flags are unknown or unsupported.\n\t\tfor _, flag := range config.Flags {\n\t\t\tif err := seccomp.FlagSupported(flag); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tnewConfig.Flags = append(newConfig.Flags, flag)\n\t\t}\n\t}\n\n\tif len(config.Architectures) > 0 {\n\t\tnewConfig.Architectures = []string{}\n\t\tfor _, arch := range config.Architectures {\n\t\t\tnewArch, err := seccomp.ConvertStringToArch(string(arch))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tnewConfig.Architectures = append(newConfig.Architectures, newArch)\n\t\t}\n\t}\n\n\t// Convert default action from string representation\n\tnewDefaultAction, err := seccomp.ConvertStringToAction(string(config.DefaultAction))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tnewConfig.DefaultAction = newDefaultAction\n\tnewConfig.DefaultErrnoRet = config.DefaultErrnoRet\n\n\tnewConfig.ListenerPath = config.ListenerPath\n\tnewConfig.ListenerMetadata = config.ListenerMetadata\n\n\t// Loop through all syscall blocks and convert them to libcontainer format\n\tfor _, call := range config.Syscalls {\n\t\tnewAction, err := seccomp.ConvertStringToAction(string(call.Action))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tfor _, name := range call.Names {\n\t\t\tnewCall := configs.Syscall{\n\t\t\t\tName:     name,\n\t\t\t\tAction:   newAction,\n\t\t\t\tErrnoRet: call.ErrnoRet,\n\t\t\t\tArgs:     []*configs.Arg{},\n\t\t\t}\n\t\t\t// Loop through all the arguments of the syscall and convert them\n\t\t\tfor _, arg := range call.Args {\n\t\t\t\tnewOp, err := seccomp.ConvertStringToOperator(string(arg.Op))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\n\t\t\t\tnewArg := configs.Arg{\n\t\t\t\t\tIndex:    arg.Index,\n\t\t\t\t\tValue:    arg.Value,\n\t\t\t\t\tValueTwo: arg.ValueTwo,\n\t\t\t\t\tOp:       newOp,\n\t\t\t\t}\n\n\t\t\t\tnewCall.Args = append(newCall.Args, &newArg)\n\t\t\t}\n\t\t\tnewConfig.Syscalls = append(newConfig.Syscalls, &newCall)\n\t\t}\n\t}\n\n\treturn newConfig, nil\n}\n\nfunc createHooks(rspec *specs.Spec, config *configs.Config) {\n\tconfig.Hooks = configs.Hooks{}\n\tif rspec.Hooks != nil {\n\t\tfor _, h := range rspec.Hooks.Prestart { //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility.\n\t\t\tcmd := createCommandHook(h)\n\t\t\tconfig.Hooks[configs.Prestart] = append(config.Hooks[configs.Prestart], configs.NewCommandHook(cmd))\n\t\t}\n\t\tfor _, h := range rspec.Hooks.CreateRuntime {\n\t\t\tcmd := createCommandHook(h)\n\t\t\tconfig.Hooks[configs.CreateRuntime] = append(config.Hooks[configs.CreateRuntime], configs.NewCommandHook(cmd))\n\t\t}\n\t\tfor _, h := range rspec.Hooks.CreateContainer {\n\t\t\tcmd := createCommandHook(h)\n\t\t\tconfig.Hooks[configs.CreateContainer] = append(config.Hooks[configs.CreateContainer], configs.NewCommandHook(cmd))\n\t\t}\n\t\tfor _, h := range rspec.Hooks.StartContainer {\n\t\t\tcmd := createCommandHook(h)\n\t\t\tconfig.Hooks[configs.StartContainer] = append(config.Hooks[configs.StartContainer], configs.NewCommandHook(cmd))\n\t\t}\n\t\tfor _, h := range rspec.Hooks.Poststart {\n\t\t\tcmd := createCommandHook(h)\n\t\t\tconfig.Hooks[configs.Poststart] = append(config.Hooks[configs.Poststart], configs.NewCommandHook(cmd))\n\t\t}\n\t\tfor _, h := range rspec.Hooks.Poststop {\n\t\t\tcmd := createCommandHook(h)\n\t\t\tconfig.Hooks[configs.Poststop] = append(config.Hooks[configs.Poststop], configs.NewCommandHook(cmd))\n\t\t}\n\t}\n}\n\nfunc createCommandHook(h specs.Hook) *configs.Command {\n\tcmd := &configs.Command{\n\t\tPath: h.Path,\n\t\tArgs: h.Args,\n\t\tEnv:  h.Env,\n\t}\n\tif h.Timeout != nil {\n\t\td := time.Duration(*h.Timeout) * time.Second\n\t\tcmd.Timeout = &d\n\t}\n\treturn cmd\n}\n"
  },
  {
    "path": "libcontainer/specconv/spec_linux_test.go",
    "content": "package specconv\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"strings\"\n\t\"testing\"\n\n\tdbus \"github.com/godbus/dbus/v5\"\n\tdevices \"github.com/opencontainers/cgroups/devices/config\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/configs/validate\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc TestCreateCommandHookTimeout(t *testing.T) {\n\ttimeout := 3600\n\thook := specs.Hook{\n\t\tPath:    \"/some/hook/path\",\n\t\tArgs:    []string{\"--some\", \"thing\"},\n\t\tEnv:     []string{\"SOME=value\"},\n\t\tTimeout: &timeout,\n\t}\n\tcommand := createCommandHook(hook)\n\ttimeoutStr := command.Timeout.String()\n\tif timeoutStr != \"1h0m0s\" {\n\t\tt.Errorf(\"Expected the Timeout to be 1h0m0s, got: %s\", timeoutStr)\n\t}\n}\n\nfunc TestCreateHooks(t *testing.T) {\n\trspec := &specs.Spec{\n\t\tHooks: &specs.Hooks{\n\t\t\tPrestart: []specs.Hook{\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook/path\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook2/path\",\n\t\t\t\t\tArgs: []string{\"--some\", \"thing\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCreateRuntime: []specs.Hook{\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook/path\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook2/path\",\n\t\t\t\t\tArgs: []string{\"--some\", \"thing\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCreateContainer: []specs.Hook{\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook/path\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook2/path\",\n\t\t\t\t\tArgs: []string{\"--some\", \"thing\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\tStartContainer: []specs.Hook{\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook/path\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook2/path\",\n\t\t\t\t\tArgs: []string{\"--some\", \"thing\"},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPoststart: []specs.Hook{\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook/path\",\n\t\t\t\t\tArgs: []string{\"--some\", \"thing\"},\n\t\t\t\t\tEnv:  []string{\"SOME=value\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook2/path\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook3/path\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tPoststop: []specs.Hook{\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook/path\",\n\t\t\t\t\tArgs: []string{\"--some\", \"thing\"},\n\t\t\t\t\tEnv:  []string{\"SOME=value\"},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook2/path\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook3/path\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tPath: \"/some/hook4/path\",\n\t\t\t\t\tArgs: []string{\"--some\", \"thing\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\tconf := &configs.Config{}\n\tcreateHooks(rspec, conf)\n\n\tprestart := conf.Hooks[configs.Prestart]\n\n\tif len(prestart) != 2 {\n\t\tt.Error(\"Expected 2 Prestart hooks\")\n\t}\n\n\tcreateRuntime := conf.Hooks[configs.CreateRuntime]\n\n\tif len(createRuntime) != 2 {\n\t\tt.Error(\"Expected 2 createRuntime hooks\")\n\t}\n\n\tcreateContainer := conf.Hooks[configs.CreateContainer]\n\n\tif len(createContainer) != 2 {\n\t\tt.Error(\"Expected 2 createContainer hooks\")\n\t}\n\n\tstartContainer := conf.Hooks[configs.StartContainer]\n\n\tif len(startContainer) != 2 {\n\t\tt.Error(\"Expected 2 startContainer hooks\")\n\t}\n\n\tpoststart := conf.Hooks[configs.Poststart]\n\n\tif len(poststart) != 3 {\n\t\tt.Error(\"Expected 3 Poststart hooks\")\n\t}\n\n\tpoststop := conf.Hooks[configs.Poststop]\n\n\tif len(poststop) != 4 {\n\t\tt.Error(\"Expected 4 Poststop hooks\")\n\t}\n}\n\nfunc TestSetupSeccompNil(t *testing.T) {\n\tseccomp, err := SetupSeccomp(nil)\n\tif err != nil {\n\t\tt.Error(\"Expected error to be nil\")\n\t}\n\n\tif seccomp != nil {\n\t\tt.Error(\"Expected seccomp to be nil\")\n\t}\n}\n\nfunc TestSetupSeccompEmpty(t *testing.T) {\n\tconf := &specs.LinuxSeccomp{}\n\tseccomp, err := SetupSeccomp(conf)\n\tif err != nil {\n\t\tt.Error(\"Expected error to be nil\")\n\t}\n\n\tif seccomp != nil {\n\t\tt.Error(\"Expected seccomp to be nil\")\n\t}\n}\n\n// TestSetupSeccompWrongAction tests that a wrong action triggers an error\nfunc TestSetupSeccompWrongAction(t *testing.T) {\n\tconf := &specs.LinuxSeccomp{\n\t\tDefaultAction: \"SCMP_ACT_NON_EXIXTENT_ACTION\",\n\t}\n\t_, err := SetupSeccomp(conf)\n\tif err == nil {\n\t\tt.Error(\"Expected error\")\n\t}\n}\n\n// TestSetupSeccompWrongArchitecture tests that a wrong architecture triggers an error\nfunc TestSetupSeccompWrongArchitecture(t *testing.T) {\n\tconf := &specs.LinuxSeccomp{\n\t\tDefaultAction: \"SCMP_ACT_ALLOW\",\n\t\tArchitectures: []specs.Arch{\"SCMP_ARCH_NON_EXISTENT_ARCH\"},\n\t}\n\t_, err := SetupSeccomp(conf)\n\tif err == nil {\n\t\tt.Error(\"Expected error\")\n\t}\n}\n\nfunc TestSetupSeccomp(t *testing.T) {\n\terrnoRet := uint(55)\n\tconf := &specs.LinuxSeccomp{\n\t\tDefaultAction:    \"SCMP_ACT_ERRNO\",\n\t\tArchitectures:    []specs.Arch{specs.ArchX86_64, specs.ArchARM},\n\t\tListenerPath:     \"/var/run/mysocket\",\n\t\tListenerMetadata: \"mymetadatastring\",\n\t\tSyscalls: []specs.LinuxSyscall{\n\t\t\t{\n\t\t\t\tNames:  []string{\"clone\"},\n\t\t\t\tAction: \"SCMP_ACT_ALLOW\",\n\t\t\t\tArgs: []specs.LinuxSeccompArg{\n\t\t\t\t\t{\n\t\t\t\t\t\tIndex:    0,\n\t\t\t\t\t\tValue:    unix.CLONE_NEWNS | unix.CLONE_NEWUTS | unix.CLONE_NEWIPC | unix.CLONE_NEWUSER | unix.CLONE_NEWPID | unix.CLONE_NEWNET | unix.CLONE_NEWCGROUP,\n\t\t\t\t\t\tValueTwo: 0,\n\t\t\t\t\t\tOp:       \"SCMP_CMP_MASKED_EQ\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tNames:  []string{\"semctl\"},\n\t\t\t\tAction: \"SCMP_ACT_KILL\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tNames:  []string{\"semget\"},\n\t\t\t\tAction: \"SCMP_ACT_ERRNO\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tNames:    []string{\"send\"},\n\t\t\t\tAction:   \"SCMP_ACT_ERRNO\",\n\t\t\t\tErrnoRet: &errnoRet,\n\t\t\t},\n\t\t\t{\n\t\t\t\tNames:  []string{\"lchown\"},\n\t\t\t\tAction: \"SCMP_ACT_TRAP\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tNames:  []string{\"lremovexattr\"},\n\t\t\t\tAction: \"SCMP_ACT_TRACE\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tNames:  []string{\"mbind\"},\n\t\t\t\tAction: \"SCMP_ACT_LOG\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tNames:  []string{\"mknod\"},\n\t\t\t\tAction: \"SCMP_ACT_NOTIFY\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tNames:  []string{\"rmdir\"},\n\t\t\t\tAction: \"SCMP_ACT_KILL_THREAD\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tNames:  []string{\"mkdir\"},\n\t\t\t\tAction: \"SCMP_ACT_KILL_PROCESS\",\n\t\t\t},\n\t\t},\n\t}\n\tseccomp, err := SetupSeccomp(conf)\n\tif err != nil {\n\t\tt.Errorf(\"Couldn't create Seccomp config: %v\", err)\n\t}\n\n\tif seccomp.DefaultAction != configs.Errno {\n\t\tt.Error(\"Wrong conversion for DefaultAction\")\n\t}\n\n\tif len(seccomp.Architectures) != 2 {\n\t\tt.Error(\"Wrong number of architectures\")\n\t}\n\n\tif seccomp.Architectures[0] != \"amd64\" || seccomp.Architectures[1] != \"arm\" {\n\t\tt.Error(\"Expected architectures are not found\")\n\t}\n\n\tif seccomp.ListenerPath != \"/var/run/mysocket\" {\n\t\tt.Error(\"Expected ListenerPath is wrong\")\n\t}\n\n\tif seccomp.ListenerMetadata != \"mymetadatastring\" {\n\t\tt.Error(\"Expected ListenerMetadata is wrong\")\n\t}\n\n\tcalls := seccomp.Syscalls\n\n\tif len(calls) != len(conf.Syscalls) {\n\t\tt.Error(\"Mismatched number of syscalls\")\n\t}\n\n\tfor _, call := range calls {\n\t\tswitch call.Name {\n\t\tcase \"clone\":\n\t\t\tif call.Action != configs.Allow {\n\t\t\t\tt.Error(\"Wrong conversion for the clone syscall action\")\n\t\t\t}\n\t\t\texpectedCloneSyscallArgs := configs.Arg{\n\t\t\t\tIndex:    0,\n\t\t\t\tOp:       configs.MaskEqualTo,\n\t\t\t\tValue:    unix.CLONE_NEWNS | unix.CLONE_NEWUTS | unix.CLONE_NEWIPC | unix.CLONE_NEWUSER | unix.CLONE_NEWPID | unix.CLONE_NEWNET | unix.CLONE_NEWCGROUP,\n\t\t\t\tValueTwo: 0,\n\t\t\t}\n\t\t\tif expectedCloneSyscallArgs != *call.Args[0] {\n\t\t\t\tt.Errorf(\"Wrong arguments conversion for the clone syscall under test\")\n\t\t\t}\n\t\tcase \"semctl\":\n\t\t\tif call.Action != configs.Kill {\n\t\t\t\tt.Errorf(\"Wrong conversion for the %s syscall action\", call.Name)\n\t\t\t}\n\t\tcase \"semget\":\n\t\t\tif call.Action != configs.Errno {\n\t\t\t\tt.Errorf(\"Wrong conversion for the %s syscall action\", call.Name)\n\t\t\t}\n\t\t\tif call.ErrnoRet != nil {\n\t\t\t\tt.Errorf(\"Wrong error ret for the %s syscall\", call.Name)\n\t\t\t}\n\t\tcase \"send\":\n\t\t\tif call.Action != configs.Errno {\n\t\t\t\tt.Errorf(\"Wrong conversion for the %s syscall action\", call.Name)\n\t\t\t}\n\t\t\tif *call.ErrnoRet != errnoRet {\n\t\t\t\tt.Errorf(\"Wrong error ret for the %s syscall\", call.Name)\n\t\t\t}\n\t\tcase \"lchown\":\n\t\t\tif call.Action != configs.Trap {\n\t\t\t\tt.Errorf(\"Wrong conversion for the %s syscall action\", call.Name)\n\t\t\t}\n\t\tcase \"lremovexattr\":\n\t\t\tif call.Action != configs.Trace {\n\t\t\t\tt.Errorf(\"Wrong conversion for the %s syscall action\", call.Name)\n\t\t\t}\n\t\tcase \"mbind\":\n\t\t\tif call.Action != configs.Log {\n\t\t\t\tt.Errorf(\"Wrong conversion for the %s syscall action\", call.Name)\n\t\t\t}\n\t\tcase \"mknod\":\n\t\t\tif call.Action != configs.Notify {\n\t\t\t\tt.Errorf(\"Wrong conversion for the %s syscall action\", call.Name)\n\t\t\t}\n\t\tcase \"rmdir\":\n\t\t\tif call.Action != configs.KillThread {\n\t\t\t\tt.Errorf(\"Wrong conversion for the %s syscall action\", call.Name)\n\t\t\t}\n\t\tcase \"mkdir\":\n\t\t\tif call.Action != configs.KillProcess {\n\t\t\t\tt.Errorf(\"Wrong conversion for the %s syscall action\", call.Name)\n\t\t\t}\n\t\tdefault:\n\t\t\tt.Errorf(\"Unexpected syscall %s found\", call.Name)\n\t\t}\n\t}\n}\n\nfunc TestLinuxCgroupWithMemoryResource(t *testing.T) {\n\tcgroupsPath := \"/user/cgroups/path/id\"\n\n\tspec := &specs.Spec{}\n\tdevices := []specs.LinuxDeviceCgroup{\n\t\t{\n\t\t\tAllow:  false,\n\t\t\tAccess: \"rwm\",\n\t\t},\n\t}\n\n\tlimit := int64(100)\n\treservation := int64(50)\n\tswap := int64(20)\n\tkernel := int64(40)\n\tkernelTCP := int64(45)\n\tswappiness := uint64(1)\n\tswappinessPtr := &swappiness\n\tdisableOOMKiller := true\n\tresources := &specs.LinuxResources{\n\t\tDevices: devices,\n\t\tMemory: &specs.LinuxMemory{\n\t\t\tLimit:            &limit,\n\t\t\tReservation:      &reservation,\n\t\t\tSwap:             &swap,\n\t\t\tKernel:           &kernel,\n\t\t\tKernelTCP:        &kernelTCP,\n\t\t\tSwappiness:       swappinessPtr,\n\t\t\tDisableOOMKiller: &disableOOMKiller,\n\t\t},\n\t}\n\tspec.Linux = &specs.Linux{\n\t\tCgroupsPath: cgroupsPath,\n\t\tResources:   resources,\n\t}\n\n\topts := &CreateOpts{\n\t\tCgroupName:       \"ContainerID\",\n\t\tUseSystemdCgroup: false,\n\t\tSpec:             spec,\n\t}\n\n\tcgroup, err := CreateCgroupConfig(opts, nil)\n\tif err != nil {\n\t\tt.Errorf(\"Couldn't create Cgroup config: %v\", err)\n\t}\n\n\tif cgroup.Path != cgroupsPath {\n\t\tt.Errorf(\"Wrong cgroupsPath, expected '%s' got '%s'\", cgroupsPath, cgroup.Path)\n\t}\n\tif cgroup.Resources.Memory != limit {\n\t\tt.Errorf(\"Expected to have %d as memory limit, got %d\", limit, cgroup.Resources.Memory)\n\t}\n\tif cgroup.Resources.MemoryReservation != reservation {\n\t\tt.Errorf(\"Expected to have %d as memory reservation, got %d\", reservation, cgroup.Resources.MemoryReservation)\n\t}\n\tif cgroup.Resources.MemorySwap != swap {\n\t\tt.Errorf(\"Expected to have %d as swap, got %d\", swap, cgroup.Resources.MemorySwap)\n\t}\n\tif cgroup.Resources.MemorySwappiness != swappinessPtr {\n\t\tt.Errorf(\"Expected to have %d as memory swappiness, got %d\", swappinessPtr, cgroup.Resources.MemorySwappiness)\n\t}\n\tif cgroup.Resources.OomKillDisable != disableOOMKiller {\n\t\tt.Errorf(\"The OOMKiller should be enabled\")\n\t}\n}\n\nfunc TestLinuxCgroupSystemd(t *testing.T) {\n\tcgroupsPath := \"parent:scopeprefix:name\"\n\n\tspec := &specs.Spec{}\n\tspec.Linux = &specs.Linux{\n\t\tCgroupsPath: cgroupsPath,\n\t}\n\n\topts := &CreateOpts{\n\t\tUseSystemdCgroup: true,\n\t\tSpec:             spec,\n\t}\n\n\tcgroup, err := CreateCgroupConfig(opts, nil)\n\tif err != nil {\n\t\tt.Errorf(\"Couldn't create Cgroup config: %v\", err)\n\t}\n\n\texpectedParent := \"parent\"\n\tif cgroup.Parent != expectedParent {\n\t\tt.Errorf(\"Expected to have %s as Parent instead of %s\", expectedParent, cgroup.Parent)\n\t}\n\n\texpectedScopePrefix := \"scopeprefix\"\n\tif cgroup.ScopePrefix != expectedScopePrefix {\n\t\tt.Errorf(\"Expected to have %s as ScopePrefix instead of %s\", expectedScopePrefix, cgroup.ScopePrefix)\n\t}\n\n\texpectedName := \"name\"\n\tif cgroup.Name != expectedName {\n\t\tt.Errorf(\"Expected to have %s as Name instead of %s\", expectedName, cgroup.Name)\n\t}\n}\n\nfunc TestLinuxCgroupSystemdWithEmptyPath(t *testing.T) {\n\tcgroupsPath := \"\"\n\n\tspec := &specs.Spec{}\n\tspec.Linux = &specs.Linux{\n\t\tCgroupsPath: cgroupsPath,\n\t}\n\n\topts := &CreateOpts{\n\t\tCgroupName:       \"ContainerID\",\n\t\tUseSystemdCgroup: true,\n\t\tSpec:             spec,\n\t}\n\n\tcgroup, err := CreateCgroupConfig(opts, nil)\n\tif err != nil {\n\t\tt.Errorf(\"Couldn't create Cgroup config: %v\", err)\n\t}\n\n\texpectedParent := \"\"\n\tif cgroup.Parent != expectedParent {\n\t\tt.Errorf(\"Expected to have %s as Parent instead of %s\", expectedParent, cgroup.Parent)\n\t}\n\n\texpectedScopePrefix := \"runc\"\n\tif cgroup.ScopePrefix != expectedScopePrefix {\n\t\tt.Errorf(\"Expected to have %s as ScopePrefix instead of %s\", expectedScopePrefix, cgroup.ScopePrefix)\n\t}\n\n\tif cgroup.Name != opts.CgroupName {\n\t\tt.Errorf(\"Expected to have %s as Name instead of %s\", opts.CgroupName, cgroup.Name)\n\t}\n}\n\nfunc TestLinuxCgroupSystemdWithInvalidPath(t *testing.T) {\n\tcgroupsPath := \"/user/cgroups/path/id\"\n\n\tspec := &specs.Spec{}\n\tspec.Linux = &specs.Linux{\n\t\tCgroupsPath: cgroupsPath,\n\t}\n\n\topts := &CreateOpts{\n\t\tCgroupName:       \"ContainerID\",\n\t\tUseSystemdCgroup: true,\n\t\tSpec:             spec,\n\t}\n\n\t_, err := CreateCgroupConfig(opts, nil)\n\tif err == nil {\n\t\tt.Error(\"Expected to produce an error if not using the correct format for cgroup paths belonging to systemd\")\n\t}\n}\n\nfunc TestLinuxCgroupsPathSpecified(t *testing.T) {\n\tcgroupsPath := \"/user/cgroups/path/id\"\n\n\tspec := &specs.Spec{}\n\tspec.Linux = &specs.Linux{\n\t\tCgroupsPath: cgroupsPath,\n\t}\n\n\topts := &CreateOpts{\n\t\tCgroupName:       \"ContainerID\",\n\t\tUseSystemdCgroup: false,\n\t\tSpec:             spec,\n\t}\n\n\tcgroup, err := CreateCgroupConfig(opts, nil)\n\tif err != nil {\n\t\tt.Errorf(\"Couldn't create Cgroup config: %v\", err)\n\t}\n\n\tif cgroup.Path != cgroupsPath {\n\t\tt.Errorf(\"Wrong cgroupsPath, expected '%s' got '%s'\", cgroupsPath, cgroup.Path)\n\t}\n}\n\nfunc TestLinuxCgroupsPathNotSpecified(t *testing.T) {\n\tspec := &specs.Spec{}\n\topts := &CreateOpts{\n\t\tCgroupName:       \"ContainerID\",\n\t\tUseSystemdCgroup: false,\n\t\tSpec:             spec,\n\t}\n\n\tcgroup, err := CreateCgroupConfig(opts, nil)\n\tif err != nil {\n\t\tt.Errorf(\"Couldn't create Cgroup config: %v\", err)\n\t}\n\n\tif cgroup.Path != \"\" {\n\t\tt.Errorf(\"Wrong cgroupsPath, expected it to be empty string, got '%s'\", cgroup.Path)\n\t}\n}\n\nfunc TestSpecconvExampleValidate(t *testing.T) {\n\tspec := Example()\n\tspec.Root.Path = \"/\"\n\n\topts := &CreateOpts{\n\t\tCgroupName:       \"ContainerID\",\n\t\tUseSystemdCgroup: false,\n\t\tSpec:             spec,\n\t}\n\n\tconfig, err := CreateLibcontainerConfig(opts)\n\tif err != nil {\n\t\tt.Errorf(\"Couldn't create libcontainer config: %v\", err)\n\t}\n\n\tif config.NoNewPrivileges != spec.Process.NoNewPrivileges {\n\t\tt.Errorf(\"specconv NoNewPrivileges mismatch. Expected %v got %v\",\n\t\t\tspec.Process.NoNewPrivileges, config.NoNewPrivileges)\n\t}\n\n\tif err := validate.Validate(config); err != nil {\n\t\tt.Errorf(\"Expected specconv to produce valid container config: %v\", err)\n\t}\n}\n\nfunc TestSpecconvNoLinuxSection(t *testing.T) {\n\tspec := Example()\n\tspec.Root.Path = \"/\"\n\tspec.Linux = nil\n\tspec.Hostname = \"\"\n\n\topts := &CreateOpts{\n\t\tCgroupName: \"ContainerID\",\n\t\tSpec:       spec,\n\t}\n\n\tconfig, err := CreateLibcontainerConfig(opts)\n\tif err != nil {\n\t\tt.Errorf(\"Couldn't create libcontainer config: %v\", err)\n\t}\n\n\tif err := validate.Validate(config); err != nil {\n\t\tt.Errorf(\"Expected specconv to produce valid container config: %v\", err)\n\t}\n}\n\nfunc TestDupNamespaces(t *testing.T) {\n\tspec := &specs.Spec{\n\t\tRoot: &specs.Root{\n\t\t\tPath: \"rootfs\",\n\t\t},\n\t\tLinux: &specs.Linux{\n\t\t\tNamespaces: []specs.LinuxNamespace{\n\t\t\t\t{\n\t\t\t\t\tType: \"pid\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tType: \"pid\",\n\t\t\t\t\tPath: \"/proc/1/ns/pid\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\t_, err := CreateLibcontainerConfig(&CreateOpts{\n\t\tSpec: spec,\n\t})\n\n\tif !strings.Contains(err.Error(), \"malformed spec file: duplicated ns\") {\n\t\tt.Errorf(\"Duplicated namespaces should be forbidden\")\n\t}\n}\n\nfunc TestUserNamespaceMappingAndPath(t *testing.T) {\n\tif _, err := os.Stat(\"/proc/self/ns/user\"); errors.Is(err, os.ErrNotExist) {\n\t\tt.Skip(\"Test requires userns.\")\n\t}\n\n\tspec := &specs.Spec{\n\t\tRoot: &specs.Root{\n\t\t\tPath: \"rootfs\",\n\t\t},\n\t\tLinux: &specs.Linux{\n\t\t\tUIDMappings: []specs.LinuxIDMapping{\n\t\t\t\t{ContainerID: 0, HostID: 1000, Size: 1000},\n\t\t\t},\n\t\t\tGIDMappings: []specs.LinuxIDMapping{\n\t\t\t\t{ContainerID: 0, HostID: 2000, Size: 1000},\n\t\t\t},\n\t\t\tNamespaces: []specs.LinuxNamespace{\n\t\t\t\t{\n\t\t\t\t\tType: \"user\",\n\t\t\t\t\tPath: \"/proc/1/ns/user\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\t_, err := CreateLibcontainerConfig(&CreateOpts{\n\t\tSpec: spec,\n\t})\n\n\tif !strings.Contains(err.Error(), \"both namespace path and non-matching mapping specified\") {\n\t\tt.Errorf(\"user namespace with path and non-matching mapping should be forbidden, got error %v\", err)\n\t}\n}\n\nfunc TestNonZeroEUIDCompatibleSpecconvValidate(t *testing.T) {\n\tif _, err := os.Stat(\"/proc/self/ns/user\"); errors.Is(err, os.ErrNotExist) {\n\t\tt.Skip(\"Test requires userns.\")\n\t}\n\n\tspec := Example()\n\tspec.Root.Path = \"/\"\n\tToRootless(spec)\n\n\topts := &CreateOpts{\n\t\tCgroupName:       \"ContainerID\",\n\t\tUseSystemdCgroup: false,\n\t\tSpec:             spec,\n\t\tRootlessEUID:     true,\n\t\tRootlessCgroups:  true,\n\t}\n\n\tconfig, err := CreateLibcontainerConfig(opts)\n\tif err != nil {\n\t\tt.Errorf(\"Couldn't create libcontainer config: %v\", err)\n\t}\n\n\tif err := validate.Validate(config); err != nil {\n\t\tt.Errorf(\"Expected specconv to produce valid rootless container config: %v\", err)\n\t}\n}\n\nfunc TestInitSystemdProps(t *testing.T) {\n\ttype inT struct {\n\t\tname, value string\n\t}\n\ttype expT struct {\n\t\tisErr bool\n\t\tname  string\n\t\tvalue any\n\t}\n\n\ttestCases := []struct {\n\t\tdesc string\n\t\tin   inT\n\t\texp  expT\n\t}{\n\t\t{\n\t\t\tdesc: \"convert USec to Sec (simple case)\",\n\t\t\tin:   inT{\"org.systemd.property.TimeoutStopUSec\", \"uint64 123456789\"},\n\t\t\texp:  expT{false, \"TimeoutStopUSec\", uint64(123456789)},\n\t\t},\n\t\t{\n\t\t\tdesc: \"convert USec to Sec (default numeric type)\",\n\t\t\tin:   inT{\"org.systemd.property.TimeoutStopSec\", \"456\"},\n\t\t\texp:  expT{false, \"TimeoutStopUSec\", uint64(456000000)},\n\t\t},\n\t\t{\n\t\t\tdesc: \"convert USec to Sec (byte)\",\n\t\t\tin:   inT{\"org.systemd.property.TimeoutStopSec\", \"byte 234\"},\n\t\t\texp:  expT{false, \"TimeoutStopUSec\", uint64(234000000)},\n\t\t},\n\t\t{\n\t\t\tdesc: \"convert USec to Sec (int16)\",\n\t\t\tin:   inT{\"org.systemd.property.TimeoutStopSec\", \"int16 234\"},\n\t\t\texp:  expT{false, \"TimeoutStopUSec\", uint64(234000000)},\n\t\t},\n\t\t{\n\t\t\tdesc: \"convert USec to Sec (uint16)\",\n\t\t\tin:   inT{\"org.systemd.property.TimeoutStopSec\", \"uint16 234\"},\n\t\t\texp:  expT{false, \"TimeoutStopUSec\", uint64(234000000)},\n\t\t},\n\t\t{\n\t\t\tdesc: \"convert USec to Sec (int32)\",\n\t\t\tin:   inT{\"org.systemd.property.TimeoutStopSec\", \"int32 234\"},\n\t\t\texp:  expT{false, \"TimeoutStopUSec\", uint64(234000000)},\n\t\t},\n\t\t{\n\t\t\tdesc: \"convert USec to Sec (uint32)\",\n\t\t\tin:   inT{\"org.systemd.property.TimeoutStopSec\", \"uint32 234\"},\n\t\t\texp:  expT{false, \"TimeoutStopUSec\", uint64(234000000)},\n\t\t},\n\t\t{\n\t\t\tdesc: \"convert USec to Sec (int64)\",\n\t\t\tin:   inT{\"org.systemd.property.TimeoutStopSec\", \"int64 234\"},\n\t\t\texp:  expT{false, \"TimeoutStopUSec\", uint64(234000000)},\n\t\t},\n\t\t{\n\t\t\tdesc: \"convert USec to Sec (uint64)\",\n\t\t\tin:   inT{\"org.systemd.property.TimeoutStopSec\", \"uint64 234\"},\n\t\t\texp:  expT{false, \"TimeoutStopUSec\", uint64(234000000)},\n\t\t},\n\t\t{\n\t\t\tdesc: \"convert USec to Sec (float)\",\n\t\t\tin:   inT{\"org.systemd.property.TimeoutStopSec\", \"234.789\"},\n\t\t\texp:  expT{false, \"TimeoutStopUSec\", uint64(234789000)},\n\t\t},\n\t\t{\n\t\t\tdesc: \"convert USec to Sec (bool -- invalid value)\",\n\t\t\tin:   inT{\"org.systemd.property.TimeoutStopSec\", \"false\"},\n\t\t\texp:  expT{true, \"\", \"\"},\n\t\t},\n\t\t{\n\t\t\tdesc: \"convert USec to Sec (string -- invalid value)\",\n\t\t\tin:   inT{\"org.systemd.property.TimeoutStopSec\", \"'covfefe'\"},\n\t\t\texp:  expT{true, \"\", \"\"},\n\t\t},\n\t\t{\n\t\t\tdesc: \"convert USec to Sec (bad variable name, no conversion)\",\n\t\t\tin:   inT{\"org.systemd.property.FOOSec\", \"123\"},\n\t\t\texp:  expT{false, \"FOOSec\", 123},\n\t\t},\n\t\t{\n\t\t\tdesc: \"convert USec to Sec (short name)\",\n\t\t\tin:   inT{\"org.systemd.property.Sec\", \"123\"},\n\t\t\texp:  expT{false, \"Sec\", 123},\n\t\t},\n\t\t{\n\t\t\tdesc: \"CollectMode\",\n\t\t\tin:   inT{\"org.systemd.property.CollectMode\", \"'inactive-or-failed'\"},\n\t\t\texp:  expT{false, \"CollectMode\", \"inactive-or-failed\"},\n\t\t},\n\t\t{\n\t\t\tdesc: \"unrelated property\",\n\t\t\tin:   inT{\"some.other.annotation\", \"0\"},\n\t\t\texp:  expT{false, \"\", \"\"},\n\t\t},\n\t\t{\n\t\t\tdesc: \"too short property name\",\n\t\t\tin:   inT{\"org.systemd.property.Xo\", \"1\"},\n\t\t\texp:  expT{true, \"\", \"\"},\n\t\t},\n\t\t{\n\t\t\tdesc: \"invalid character in property name\",\n\t\t\tin:   inT{\"org.systemd.property.Number1\", \"1\"},\n\t\t\texp:  expT{true, \"\", \"\"},\n\t\t},\n\t\t{\n\t\t\tdesc: \"invalid property value\",\n\t\t\tin:   inT{\"org.systemd.property.ValidName\", \"invalid-value\"},\n\t\t\texp:  expT{true, \"\", \"\"},\n\t\t},\n\t}\n\n\tspec := &specs.Spec{}\n\n\tfor _, tc := range testCases {\n\t\tt.Run(tc.desc, func(t *testing.T) {\n\t\t\tspec.Annotations = map[string]string{tc.in.name: tc.in.value}\n\n\t\t\toutMap, err := initSystemdProps(spec)\n\t\t\t// t.Logf(\"input %+v, expected %+v, got err:%v out:%+v\", tc.in, tc.exp, err, outMap)\n\n\t\t\tif tc.exp.isErr != (err != nil) {\n\t\t\t\tt.Errorf(\"input %+v, expecting error: %v, got %v\", tc.in, tc.exp.isErr, err)\n\t\t\t}\n\t\t\texpLen := 1 // expect a single item\n\t\t\tif tc.exp.name == \"\" {\n\t\t\t\texpLen = 0 // expect nothing\n\t\t\t}\n\t\t\tif len(outMap) != expLen {\n\t\t\t\tt.Fatalf(\"input %+v, expected %d, got %d entries: %v\", tc.in, expLen, len(outMap), outMap)\n\t\t\t}\n\t\t\tif expLen == 0 {\n\t\t\t\treturn // No more checks.\n\t\t\t}\n\n\t\t\tout := outMap[0]\n\t\t\tif tc.exp.name != out.Name {\n\t\t\t\tt.Errorf(\"input %+v, expecting name: %q, got %q\", tc.in, tc.exp.name, out.Name)\n\t\t\t}\n\t\t\texpValue := dbus.MakeVariant(tc.exp.value).String()\n\t\t\tif expValue != out.Value.String() {\n\t\t\t\tt.Errorf(\"input %+v, expecting value: %s, got %s\", tc.in, expValue, out.Value)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestCheckPropertyName(t *testing.T) {\n\ttestCases := []struct {\n\t\tin    string\n\t\tvalid bool\n\t}{\n\t\t{\"\", false},   // too short\n\t\t{\"xx\", false}, // too short\n\t\t{\"xxx\", true},\n\t\t{\"someValidName\", true},\n\t\t{\"A name\", false},  // space\n\t\t{\"3335\", false},    // numbers\n\t\t{\"Name1\", false},   // numbers\n\t\t{\"Кир\", false},     // non-ascii\n\t\t{\"მადლობა\", false}, // non-ascii\n\t\t{\"合い言葉\", false},    // non-ascii\n\t}\n\n\tfor _, tc := range testCases {\n\t\terr := checkPropertyName(tc.in)\n\t\tif (err == nil) != tc.valid {\n\t\t\tt.Errorf(\"case %q: expected valid: %v, got error: %v\", tc.in, tc.valid, err)\n\t\t}\n\t}\n}\n\nfunc BenchmarkCheckPropertyName(b *testing.B) {\n\tfor b.Loop() {\n\t\tfor _, s := range []string{\"\", \"xx\", \"xxx\", \"someValidName\", \"A name\", \"Кир\", \"მადლობა\", \"合い言葉\"} {\n\t\t\t_ = checkPropertyName(s)\n\t\t}\n\t}\n}\n\nfunc TestNullProcess(t *testing.T) {\n\tspec := Example()\n\tspec.Process = nil\n\n\t_, err := CreateLibcontainerConfig(&CreateOpts{\n\t\tSpec: spec,\n\t})\n\tif err != nil {\n\t\tt.Errorf(\"Null process should be forbidden\")\n\t}\n}\n\nfunc TestCreateDevices(t *testing.T) {\n\tspec := Example()\n\n\t// dummy uid/gid for /dev/tty; will enable the test to check if createDevices()\n\t// preferred the spec's device over the redundant default device\n\tttyUid := uint32(1000)\n\tttyGid := uint32(1000)\n\tfm := os.FileMode(0o666)\n\n\tspec.Linux = &specs.Linux{\n\t\tDevices: []specs.LinuxDevice{\n\t\t\t{\n\t\t\t\t// This is purposely redundant with one of runc's default devices\n\t\t\t\tPath:     \"/dev/tty\",\n\t\t\t\tType:     \"c\",\n\t\t\t\tMajor:    5,\n\t\t\t\tMinor:    0,\n\t\t\t\tFileMode: &fm,\n\t\t\t\tUID:      &ttyUid,\n\t\t\t\tGID:      &ttyGid,\n\t\t\t},\n\t\t\t{\n\t\t\t\t// This is purposely not redundant with one of runc's default devices\n\t\t\t\tPath:  \"/dev/ram0\",\n\t\t\t\tType:  \"b\",\n\t\t\t\tMajor: 1,\n\t\t\t\tMinor: 0,\n\t\t\t},\n\t\t},\n\t}\n\n\tconf := &configs.Config{}\n\n\tdefaultDevs, err := createDevices(spec, conf)\n\tif err != nil {\n\t\tt.Errorf(\"failed to create devices: %v\", err)\n\t}\n\n\t// Verify the returned default devices has the /dev/tty entry deduplicated\n\tfound := false\n\tfor _, d := range defaultDevs {\n\t\tif d.Path == \"/dev/tty\" {\n\t\t\tif found {\n\t\t\t\tt.Errorf(\"createDevices failed: returned a duplicated device entry: %v\", defaultDevs)\n\t\t\t}\n\t\t\tfound = true\n\t\t}\n\t}\n\n\t// Verify that createDevices() placed all default devices in the config\n\tfor _, allowedDev := range AllowedDevices {\n\t\tif allowedDev.Path == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tfound := false\n\t\tfor _, configDev := range conf.Devices {\n\t\t\tif configDev.Path == allowedDev.Path {\n\t\t\t\tfound = true\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tconfigDevPaths := []string{}\n\t\t\tfor _, configDev := range conf.Devices {\n\t\t\t\tconfigDevPaths = append(configDevPaths, configDev.Path)\n\t\t\t}\n\t\t\tt.Errorf(\"allowedDevice %s was not found in the config's devices: %v\", allowedDev.Path, configDevPaths)\n\t\t}\n\t}\n\n\t// Verify that createDevices() deduplicated the /dev/tty entry in the config\n\tfor _, configDev := range conf.Devices {\n\t\tif configDev.Path == \"/dev/tty\" {\n\t\t\twantDev := &devices.Device{\n\t\t\t\tPath:     \"/dev/tty\",\n\t\t\t\tFileMode: 0o666,\n\t\t\t\tUid:      1000,\n\t\t\t\tGid:      1000,\n\t\t\t\tRule: devices.Rule{\n\t\t\t\t\tType:  devices.CharDevice,\n\t\t\t\t\tMajor: 5,\n\t\t\t\t\tMinor: 0,\n\t\t\t\t},\n\t\t\t}\n\n\t\t\tif *configDev != *wantDev {\n\t\t\t\tt.Errorf(\"redundant dev was not deduplicated correctly: want %v, got %v\", wantDev, configDev)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Verify that createDevices() added the entry for /dev/ram0 in the config\n\tfound = false\n\tfor _, configDev := range conf.Devices {\n\t\tif configDev.Path == \"/dev/ram0\" {\n\t\t\tfound = true\n\t\t\tbreak\n\t\t}\n\t}\n\tif !found {\n\t\tt.Errorf(\"device /dev/ram0 not found in config devices; got %v\", conf.Devices)\n\t}\n}\n\nfunc TestCreateNetDevices(t *testing.T) {\n\ttestCases := []struct {\n\t\tname       string\n\t\tnetDevices map[string]specs.LinuxNetDevice\n\t}{\n\t\t{\n\t\t\tname: \"no network devices\",\n\t\t},\n\t\t{\n\t\t\tname: \"one network devices\",\n\t\t\tnetDevices: map[string]specs.LinuxNetDevice{\n\t\t\t\t\"eth1\": {},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"multiple network devices\",\n\t\t\tnetDevices: map[string]specs.LinuxNetDevice{\n\t\t\t\t\"eth1\": {},\n\t\t\t\t\"eth2\": {},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"multiple network devices and rename\",\n\t\t\tnetDevices: map[string]specs.LinuxNetDevice{\n\t\t\t\t\"eth1\": {},\n\t\t\t\t\"eth2\": {\n\t\t\t\t\tName: \"ctr_eth2\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\tfor _, tc := range testCases {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tspec := Example()\n\t\t\tspec.Linux.NetDevices = tc.netDevices\n\t\t\topts := &CreateOpts{\n\t\t\t\tCgroupName:       \"ContainerID\",\n\t\t\t\tUseSystemdCgroup: false,\n\t\t\t\tSpec:             spec,\n\t\t\t}\n\t\t\tconfig, err := CreateLibcontainerConfig(opts)\n\t\t\tif err != nil {\n\t\t\t\tt.Errorf(\"Couldn't create libcontainer config: %v\", err)\n\t\t\t}\n\t\t\tif len(config.NetDevices) != len(opts.Spec.Linux.NetDevices) {\n\t\t\t\tt.Fatalf(\"expected %d network devices and got %d\", len(config.NetDevices), len(opts.Spec.Linux.NetDevices))\n\t\t\t}\n\t\t\tfor name, netdev := range config.NetDevices {\n\t\t\t\tctrNetDev, ok := config.NetDevices[name]\n\t\t\t\tif !ok {\n\t\t\t\t\tt.Fatalf(\"network device %s not found in the configuration\", name)\n\t\t\t\t}\n\t\t\t\tif ctrNetDev.Name != netdev.Name {\n\t\t\t\t\tt.Fatalf(\"expected %s got %s\", ctrNetDev.Name, netdev.Name)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "libcontainer/standard_init_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\t\"github.com/opencontainers/selinux/go-selinux\"\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/internal/linux\"\n\t\"github.com/opencontainers/runc/internal/pathrs\"\n\t\"github.com/opencontainers/runc/internal/sys\"\n\t\"github.com/opencontainers/runc/libcontainer/apparmor\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/keys\"\n\t\"github.com/opencontainers/runc/libcontainer/seccomp\"\n\t\"github.com/opencontainers/runc/libcontainer/system\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n)\n\ntype linuxStandardInit struct {\n\tpipe          *syncSocket\n\tconsoleSocket *os.File\n\tpidfdSocket   *os.File\n\tparentPid     int\n\tfifoFile      *os.File\n\tlogPipe       *os.File\n\tconfig        *initConfig\n}\n\nfunc (l *linuxStandardInit) getSessionRingParams() (string, uint32, uint32) {\n\tvar newperms uint32\n\n\tif l.config.Config.Namespaces.Contains(configs.NEWUSER) {\n\t\t// With user ns we need 'other' search permissions.\n\t\tnewperms = 0x8\n\t} else {\n\t\t// Without user ns we need 'UID' search permissions.\n\t\tnewperms = 0x80000\n\t}\n\n\t// Create a unique per session container name that we can join in setns;\n\t// However, other containers can also join it.\n\treturn \"_ses.\" + l.config.ContainerID, 0xffffffff, newperms\n}\n\nfunc (l *linuxStandardInit) Init() error {\n\tif !l.config.Config.NoNewKeyring {\n\t\tif l.config.ProcessLabel != \"\" {\n\t\t\tif err := selinux.SetKeyLabel(l.config.ProcessLabel); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tdefer selinux.SetKeyLabel(\"\") //nolint: errcheck\n\t\t}\n\t\tringname, keepperms, newperms := l.getSessionRingParams()\n\n\t\t// Do not inherit the parent's session keyring.\n\t\tif sessKeyId, err := keys.JoinSessionKeyring(ringname); err != nil {\n\t\t\tlogrus.Warnf(\"KeyctlJoinSessionKeyring: %v\", err)\n\t\t\t// If keyrings aren't supported then it is likely we are on an\n\t\t\t// older kernel (or inside an LXC container). While we could bail,\n\t\t\t// the security feature we are using here is best-effort (it only\n\t\t\t// really provides marginal protection since VFS credentials are\n\t\t\t// the only significant protection of keyrings).\n\t\t\tif !errors.Is(err, unix.ENOSYS) {\n\t\t\t\treturn fmt.Errorf(\"unable to join session keyring: %w\", err)\n\t\t\t}\n\t\t} else {\n\t\t\t// Make session keyring searchable. If we've gotten this far we\n\t\t\t// bail on any error -- we don't want to have a keyring with bad\n\t\t\t// permissions.\n\t\t\tif err := keys.ModKeyringPerm(sessKeyId, keepperms, newperms); err != nil {\n\t\t\t\treturn fmt.Errorf(\"unable to mod keyring permissions: %w\", err)\n\t\t\t}\n\t\t}\n\t}\n\n\tif err := setupNetwork(l.config); err != nil {\n\t\treturn err\n\t}\n\tif err := setupRoute(l.config.Config); err != nil {\n\t\treturn err\n\t}\n\n\t// initialises the labeling system\n\tselinux.GetEnabled()\n\n\terr := prepareRootfs(l.pipe, l.config)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Set up the console. This has to be done *before* we finalize the rootfs,\n\t// but *after* we've given the user the chance to set up all of the mounts\n\t// they wanted.\n\tif l.config.CreateConsole {\n\t\tif err := setupConsole(l.consoleSocket, l.config, true); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := system.Setctty(); err != nil {\n\t\t\treturn &os.SyscallError{Syscall: \"ioctl(setctty)\", Err: err}\n\t\t}\n\t}\n\n\tif l.pidfdSocket != nil {\n\t\tif err := setupPidfd(l.pidfdSocket, \"standard\"); err != nil {\n\t\t\treturn fmt.Errorf(\"failed to setup pidfd: %w\", err)\n\t\t}\n\t}\n\n\t// Finish the rootfs setup.\n\tif l.config.Config.Namespaces.Contains(configs.NEWNS) {\n\t\tif err := finalizeRootfs(l.config.Config); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif hostname := l.config.Config.Hostname; hostname != \"\" {\n\t\tif err := unix.Sethostname([]byte(hostname)); err != nil {\n\t\t\treturn &os.SyscallError{Syscall: \"sethostname\", Err: err}\n\t\t}\n\t}\n\tif domainname := l.config.Config.Domainname; domainname != \"\" {\n\t\tif err := unix.Setdomainname([]byte(domainname)); err != nil {\n\t\t\treturn &os.SyscallError{Syscall: \"setdomainname\", Err: err}\n\t\t}\n\t}\n\tif err := apparmor.ApplyProfile(l.config.AppArmorProfile); err != nil {\n\t\treturn fmt.Errorf(\"unable to apply apparmor profile: %w\", err)\n\t}\n\n\tif err := sys.WriteSysctls(l.config.Config.Sysctl); err != nil {\n\t\treturn err\n\t}\n\tfor _, path := range l.config.Config.ReadonlyPaths {\n\t\tif err := readonlyPath(path); err != nil {\n\t\t\treturn fmt.Errorf(\"can't make %q read-only: %w\", path, err)\n\t\t}\n\t}\n\n\tif err := maskPaths(l.config.Config.MaskPaths, l.config.Config.MountLabel); err != nil {\n\t\treturn err\n\t}\n\tpdeath, err := system.GetParentDeathSignal()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"can't get pdeath signal: %w\", err)\n\t}\n\tif l.config.NoNewPrivileges {\n\t\tif err := unix.Prctl(unix.PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0); err != nil {\n\t\t\treturn &os.SyscallError{Syscall: \"prctl(SET_NO_NEW_PRIVS)\", Err: err}\n\t\t}\n\t}\n\n\tif err := setupScheduler(l.config); err != nil {\n\t\treturn err\n\t}\n\n\tif err := setupIOPriority(l.config); err != nil {\n\t\treturn err\n\t}\n\n\t// Set personality if specified.\n\tif l.config.Config.Personality != nil {\n\t\tif err := setupPersonality(l.config.Config); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif err := setupMemoryPolicy(l.config.Config); err != nil {\n\t\treturn err\n\t}\n\n\t// Tell our parent that we're ready to exec. This must be done before the\n\t// Seccomp rules have been applied, because we need to be able to read and\n\t// write to a socket.\n\tif err := syncParentReady(l.pipe); err != nil {\n\t\treturn fmt.Errorf(\"sync ready: %w\", err)\n\t}\n\tif l.config.ProcessLabel != \"\" {\n\t\tif err := selinux.SetExecLabel(l.config.ProcessLabel); err != nil {\n\t\t\treturn fmt.Errorf(\"can't set process label: %w\", err)\n\t\t}\n\t\tdefer selinux.SetExecLabel(\"\") //nolint: errcheck\n\t}\n\t// Without NoNewPrivileges seccomp is a privileged operation, so we need to\n\t// do this before dropping capabilities; otherwise do it as late as possible\n\t// just before execve so as few syscalls take place after it as possible.\n\tif l.config.Config.Seccomp != nil && !l.config.NoNewPrivileges {\n\t\tseccompFd, err := seccomp.InitSeccomp(l.config.Config.Seccomp)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif err := syncParentSeccomp(l.pipe, seccompFd); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif err := finalizeNamespace(l.config); err != nil {\n\t\treturn err\n\t}\n\t// finalizeNamespace can change user/group which clears the parent death\n\t// signal, so we restore it here.\n\tif err := pdeath.Restore(); err != nil {\n\t\treturn fmt.Errorf(\"can't restore pdeath signal: %w\", err)\n\t}\n\n\t// In case we have any StartContainer hooks to run, and they don't\n\t// have environment configured explicitly, make sure they will be run\n\t// with the same environment as container's init.\n\t//\n\t// NOTE the above described behavior is not part of runtime-spec, but\n\t// rather a de facto historical thing we afraid to change.\n\tif h := l.config.Config.Hooks[configs.StartContainer]; len(h) > 0 {\n\t\th.SetDefaultEnv(l.config.Env)\n\t}\n\n\t// Compare the parent from the initial start of the init process and make\n\t// sure that it did not change.  if the parent changes that means it died\n\t// and we were reparented to something else so we should just kill ourself\n\t// and not cause problems for someone else.\n\tif unix.Getppid() != l.parentPid {\n\t\treturn unix.Kill(unix.Getpid(), unix.SIGKILL)\n\t}\n\t// Check for the arg before waiting to make sure it exists and it is\n\t// returned as a create time error.\n\tname, err := exec.LookPath(l.config.Args[0])\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Set seccomp as close to execve as possible, so as few syscalls take\n\t// place afterward (reducing the amount of syscalls that users need to\n\t// enable in their seccomp profiles). However, this needs to be done\n\t// before closing the pipe since we need it to pass the seccompFd to\n\t// the parent.\n\tif l.config.Config.Seccomp != nil && l.config.NoNewPrivileges {\n\t\tseccompFd, err := seccomp.InitSeccomp(l.config.Config.Seccomp)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"unable to init seccomp: %w\", err)\n\t\t}\n\n\t\tif err := syncParentSeccomp(l.pipe, seccompFd); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Close the pipe to signal that we have completed our init.\n\tlogrus.Debugf(\"init: closing the pipe to signal completion\")\n\t_ = l.pipe.Close()\n\n\t// Close the log pipe fd so the parent's ForwardLogs can exit.\n\tlogrus.Debugf(\"init: about to wait on exec fifo\")\n\tif err := l.logPipe.Close(); err != nil {\n\t\treturn fmt.Errorf(\"close log pipe: %w\", err)\n\t}\n\n\t// Wait for the FIFO to be opened on the other side before exec-ing the\n\t// user process. We open it through /proc/self/fd/$fd, because the fd that\n\t// was given to us was an O_PATH fd to the fifo itself. Linux allows us to\n\t// re-open an O_PATH fd through /proc.\n\tfifoFile, err := pathrs.Reopen(l.fifoFile, unix.O_WRONLY|unix.O_CLOEXEC)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"reopen exec fifo: %w\", err)\n\t}\n\tdefer fifoFile.Close()\n\tif _, err := fifoFile.Write([]byte(\"0\")); err != nil {\n\t\treturn &os.PathError{Op: \"write exec fifo\", Path: fifoFile.Name(), Err: err}\n\t}\n\n\t// Close the O_PATH fifofd fd before exec because the kernel resets\n\t// dumpable in the wrong order. This has been fixed in newer kernels, but\n\t// we keep this to ensure CVE-2016-9962 doesn't re-emerge on older kernels.\n\t// N.B. the core issue itself (passing dirfds to the host filesystem) has\n\t// since been resolved.\n\t// https://github.com/torvalds/linux/blob/v4.9/fs/exec.c#L1290-L1318\n\t_ = fifoFile.Close()\n\t_ = l.fifoFile.Close()\n\n\tif s := l.config.SpecState; s != nil {\n\t\ts.Pid = unix.Getpid()\n\t\ts.Status = specs.StateCreated\n\t\tif err := l.config.Config.Hooks.Run(configs.StartContainer, s); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Close all file descriptors we are not passing to the container. This is\n\t// necessary because the execve target could use internal runc fds as the\n\t// execve path, potentially giving access to binary files from the host\n\t// (which can then be opened by container processes, leading to container\n\t// escapes). Note that because this operation will close any open file\n\t// descriptors that are referenced by (*os.File) handles from underneath\n\t// the Go runtime, we must not do any file operations after this point\n\t// (otherwise the (*os.File) finaliser could close the wrong file). See\n\t// CVE-2024-21626 for more information as to why this protection is\n\t// necessary.\n\tif err := utils.UnsafeCloseFrom(l.config.PassedFilesCount + 3); err != nil {\n\t\treturn err\n\t}\n\treturn linux.Exec(name, l.config.Args, l.config.Env)\n}\n"
  },
  {
    "path": "libcontainer/state_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc newStateTransitionError(from, to containerState) error {\n\treturn &stateTransitionError{\n\t\tFrom: from.status().String(),\n\t\tTo:   to.status().String(),\n\t}\n}\n\n// stateTransitionError is returned when an invalid state transition happens from one\n// state to another.\ntype stateTransitionError struct {\n\tFrom string\n\tTo   string\n}\n\nfunc (s *stateTransitionError) Error() string {\n\treturn fmt.Sprintf(\"invalid state transition from %s to %s\", s.From, s.To)\n}\n\ntype containerState interface {\n\ttransition(containerState) error\n\tdestroy() error\n\tstatus() Status\n}\n\nfunc destroy(c *Container) error {\n\t// Usually, when a container init is gone, all other processes in its\n\t// cgroup are killed by the kernel. This is not the case for a shared\n\t// PID namespace container, which may have some processes left after\n\t// its init is killed or exited.\n\t//\n\t// As the container without init process running is considered stopped,\n\t// and destroy is supposed to remove all the container resources, we need\n\t// to kill those processes here.\n\tif !c.config.Namespaces.IsPrivate(configs.NEWPID) {\n\t\t// Likely to fail when c.config.RootlessCgroups is true\n\t\t_ = signalAllProcesses(c.cgroupManager, unix.SIGKILL)\n\t}\n\tif err := c.cgroupManager.Destroy(); err != nil {\n\t\treturn fmt.Errorf(\"unable to remove container's cgroup: %w\", err)\n\t}\n\tif c.intelRdtManager != nil {\n\t\tif err := c.intelRdtManager.Destroy(); err != nil {\n\t\t\treturn fmt.Errorf(\"unable to remove container's IntelRDT group: %w\", err)\n\t\t}\n\t}\n\tif err := os.RemoveAll(c.stateDir); err != nil {\n\t\treturn fmt.Errorf(\"unable to remove container state dir: %w\", err)\n\t}\n\tc.initProcess = nil\n\terr := runPoststopHooks(c)\n\tc.state = &stoppedState{c: c}\n\treturn err\n}\n\nfunc runPoststopHooks(c *Container) error {\n\thooks := c.config.Hooks\n\tif hooks == nil {\n\t\treturn nil\n\t}\n\n\ts, err := c.currentOCIState()\n\tif err != nil {\n\t\treturn err\n\t}\n\ts.Status = specs.StateStopped\n\n\treturn hooks.Run(configs.Poststop, s)\n}\n\n// stoppedState represents a container is a stopped/destroyed state.\ntype stoppedState struct {\n\tc *Container\n}\n\nfunc (b *stoppedState) status() Status {\n\treturn Stopped\n}\n\nfunc (b *stoppedState) transition(s containerState) error {\n\tswitch s.(type) {\n\tcase *runningState, *restoredState:\n\t\tb.c.state = s\n\t\treturn nil\n\tcase *stoppedState:\n\t\treturn nil\n\t}\n\treturn newStateTransitionError(b, s)\n}\n\nfunc (b *stoppedState) destroy() error {\n\treturn destroy(b.c)\n}\n\n// runningState represents a container that is currently running.\ntype runningState struct {\n\tc *Container\n}\n\nfunc (r *runningState) status() Status {\n\treturn Running\n}\n\nfunc (r *runningState) transition(s containerState) error {\n\tswitch s.(type) {\n\tcase *stoppedState:\n\t\tif r.c.hasInit() {\n\t\t\treturn ErrRunning\n\t\t}\n\t\tr.c.state = s\n\t\treturn nil\n\tcase *pausedState:\n\t\tr.c.state = s\n\t\treturn nil\n\tcase *runningState:\n\t\treturn nil\n\t}\n\treturn newStateTransitionError(r, s)\n}\n\nfunc (r *runningState) destroy() error {\n\tif r.c.hasInit() {\n\t\treturn ErrRunning\n\t}\n\treturn destroy(r.c)\n}\n\ntype createdState struct {\n\tc *Container\n}\n\nfunc (i *createdState) status() Status {\n\treturn Created\n}\n\nfunc (i *createdState) transition(s containerState) error {\n\tswitch s.(type) {\n\tcase *runningState, *pausedState, *stoppedState:\n\t\ti.c.state = s\n\t\treturn nil\n\tcase *createdState:\n\t\treturn nil\n\t}\n\treturn newStateTransitionError(i, s)\n}\n\nfunc (i *createdState) destroy() error {\n\t_ = i.c.initProcess.signal(unix.SIGKILL)\n\treturn destroy(i.c)\n}\n\n// pausedState represents a container that is currently pause.  It cannot be destroyed in a\n// paused state and must transition back to running first.\ntype pausedState struct {\n\tc *Container\n}\n\nfunc (p *pausedState) status() Status {\n\treturn Paused\n}\n\nfunc (p *pausedState) transition(s containerState) error {\n\tswitch s.(type) {\n\tcase *runningState, *stoppedState:\n\t\tp.c.state = s\n\t\treturn nil\n\tcase *pausedState:\n\t\treturn nil\n\t}\n\treturn newStateTransitionError(p, s)\n}\n\nfunc (p *pausedState) destroy() error {\n\tif p.c.hasInit() {\n\t\treturn ErrPaused\n\t}\n\tif err := p.c.cgroupManager.Freeze(cgroups.Thawed); err != nil {\n\t\treturn err\n\t}\n\treturn destroy(p.c)\n}\n\n// restoredState is the same as the running state but also has associated checkpoint\n// information that maybe need destroyed when the container is stopped and destroy is called.\ntype restoredState struct {\n\timageDir string\n\tc        *Container\n}\n\nfunc (r *restoredState) status() Status {\n\treturn Running\n}\n\nfunc (r *restoredState) transition(s containerState) error {\n\tswitch s.(type) {\n\tcase *stoppedState, *runningState:\n\t\treturn nil\n\t}\n\treturn newStateTransitionError(r, s)\n}\n\nfunc (r *restoredState) destroy() error {\n\tif _, err := os.Stat(filepath.Join(r.c.stateDir, \"checkpoint\")); err != nil {\n\t\tif !errors.Is(err, os.ErrNotExist) {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn destroy(r.c)\n}\n\n// loadedState is used whenever a container is restored, loaded, or setting additional\n// processes inside and it should not be destroyed when it is exiting.\ntype loadedState struct {\n\tc *Container\n\ts Status\n}\n\nfunc (n *loadedState) status() Status {\n\treturn n.s\n}\n\nfunc (n *loadedState) transition(s containerState) error {\n\tn.c.state = s\n\treturn nil\n}\n\nfunc (n *loadedState) destroy() error {\n\tif err := n.c.refreshState(); err != nil {\n\t\treturn err\n\t}\n\treturn n.c.state.destroy()\n}\n"
  },
  {
    "path": "libcontainer/state_linux_test.go",
    "content": "package libcontainer\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n\t\"testing\"\n)\n\nvar states = map[containerState]Status{\n\t&createdState{}:          Created,\n\t&runningState{}:          Running,\n\t&restoredState{}:         Running,\n\t&pausedState{}:           Paused,\n\t&stoppedState{}:          Stopped,\n\t&loadedState{s: Running}: Running,\n}\n\nfunc TestStateStatus(t *testing.T) {\n\tfor s, status := range states {\n\t\tif s.status() != status {\n\t\t\tt.Fatalf(\"state returned %s but expected %s\", s.status(), status)\n\t\t}\n\t}\n}\n\nfunc testTransitions(t *testing.T, initialState containerState, valid []containerState) {\n\tvalidMap := map[reflect.Type]any{}\n\tfor _, validState := range valid {\n\t\tvalidMap[reflect.TypeOf(validState)] = nil\n\t\tt.Run(validState.status().String(), func(t *testing.T) {\n\t\t\tif err := initialState.transition(validState); err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\t})\n\t}\n\tfor state := range states {\n\t\tif _, ok := validMap[reflect.TypeOf(state)]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tt.Run(state.status().String(), func(t *testing.T) {\n\t\t\terr := initialState.transition(state)\n\t\t\tif err == nil {\n\t\t\t\tt.Fatal(\"transition should fail\")\n\t\t\t}\n\t\t\tvar stErr *stateTransitionError\n\t\t\tif !errors.As(err, &stErr) {\n\t\t\t\tt.Fatal(\"expected stateTransitionError\")\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestStoppedStateTransition(t *testing.T) {\n\ttestTransitions(\n\t\tt,\n\t\t&stoppedState{c: &Container{}},\n\t\t[]containerState{\n\t\t\t&stoppedState{},\n\t\t\t&runningState{},\n\t\t\t&restoredState{},\n\t\t},\n\t)\n}\n\nfunc TestPausedStateTransition(t *testing.T) {\n\ttestTransitions(\n\t\tt,\n\t\t&pausedState{c: &Container{}},\n\t\t[]containerState{\n\t\t\t&pausedState{},\n\t\t\t&runningState{},\n\t\t\t&stoppedState{},\n\t\t},\n\t)\n}\n\nfunc TestRestoredStateTransition(t *testing.T) {\n\ttestTransitions(\n\t\tt,\n\t\t&restoredState{c: &Container{}},\n\t\t[]containerState{\n\t\t\t&stoppedState{},\n\t\t\t&runningState{},\n\t\t},\n\t)\n}\n\nfunc TestRunningStateTransition(t *testing.T) {\n\ttestTransitions(\n\t\tt,\n\t\t&runningState{c: &Container{}},\n\t\t[]containerState{\n\t\t\t&stoppedState{},\n\t\t\t&pausedState{},\n\t\t\t&runningState{},\n\t\t},\n\t)\n}\n\nfunc TestCreatedStateTransition(t *testing.T) {\n\ttestTransitions(\n\t\tt,\n\t\t&createdState{c: &Container{}},\n\t\t[]containerState{\n\t\t\t&stoppedState{},\n\t\t\t&pausedState{},\n\t\t\t&runningState{},\n\t\t\t&createdState{},\n\t\t},\n\t)\n}\n"
  },
  {
    "path": "libcontainer/stats_linux.go",
    "content": "package libcontainer\n\nimport (\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/runc/libcontainer/intelrdt\"\n\t\"github.com/opencontainers/runc/types\"\n)\n\ntype Stats struct {\n\tInterfaces    []*types.NetworkInterface\n\tCgroupStats   *cgroups.Stats\n\tIntelRdtStats *intelrdt.Stats\n}\n"
  },
  {
    "path": "libcontainer/sync.go",
    "content": "package libcontainer\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strconv\"\n\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n\n\t\"github.com/sirupsen/logrus\"\n)\n\ntype syncType string\n\n// Constants that are used for synchronisation between the parent and child\n// during container setup. They come in pairs (with procError being a generic\n// response which is followed by an &initError).\n//\n//\t     [  child  ] <-> [   parent   ]\n//\n//\tprocMountPlease      --> [open(2) or open_tree(2) and configure mount]\n//\t  Arg: configs.Mount\n//\t                     <-- procMountFd\n//\t                           file: mountfd\n//\n//\tprocSeccomp         --> [forward fd to listenerPath]\n//\t  file: seccomp fd\n//\t                    --- no return synchronisation\n//\n//\tprocHooks --> [run hooks]\n//\t          <-- procHooksDone\n//\n//\tprocReady --> [final setup]\n//\t          <-- procRun\n//\n//\tprocSeccomp --> [grab seccomp fd with pidfd_getfd()]\n//\t            <-- procSeccompDone\nconst (\n\tprocError       syncType = \"procError\"\n\tprocReady       syncType = \"procReady\"\n\tprocRun         syncType = \"procRun\"\n\tprocHooks       syncType = \"procHooks\"\n\tprocHooksDone   syncType = \"procHooksDone\"\n\tprocMountPlease syncType = \"procMountPlease\"\n\tprocMountFd     syncType = \"procMountFd\"\n\tprocSeccomp     syncType = \"procSeccomp\"\n\tprocSeccompDone syncType = \"procSeccompDone\"\n)\n\ntype syncFlags int\n\nconst (\n\tsyncFlagHasFd syncFlags = (1 << iota)\n)\n\ntype syncT struct {\n\tType  syncType         `json:\"type\"`\n\tFlags syncFlags        `json:\"flags\"`\n\tArg   *json.RawMessage `json:\"arg,omitempty\"`\n\tFile  *os.File         `json:\"-\"` // passed oob through SCM_RIGHTS\n}\n\nfunc (s syncT) String() string {\n\tstr := \"type:\" + string(s.Type)\n\tif s.Flags != 0 {\n\t\tstr += \" flags:0b\" + strconv.FormatInt(int64(s.Flags), 2)\n\t}\n\tif s.Arg != nil {\n\t\tstr += \" arg:\" + string(*s.Arg)\n\t}\n\tif s.File != nil {\n\t\tstr += \" file:\" + s.File.Name() + \" (fd:\" + strconv.Itoa(int(s.File.Fd())) + \")\"\n\t}\n\treturn str\n}\n\n// initError is used to wrap errors for passing them via JSON,\n// as encoding/json can't unmarshal into error type.\ntype initError struct {\n\tMessage string `json:\"message,omitempty\"`\n}\n\nfunc (i initError) Error() string {\n\treturn i.Message\n}\n\nfunc doWriteSync(pipe *syncSocket, sync syncT) error {\n\tsync.Flags &= ^syncFlagHasFd\n\tif sync.File != nil {\n\t\tsync.Flags |= syncFlagHasFd\n\t}\n\tlogrus.Debugf(\"writing sync %s\", sync)\n\tdata, err := json.Marshal(sync)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"marshal sync %v: %w\", sync.Type, err)\n\t}\n\tif _, err := pipe.WritePacket(data); err != nil {\n\t\treturn fmt.Errorf(\"writing sync %v: %w\", sync.Type, err)\n\t}\n\tif sync.Flags&syncFlagHasFd != 0 {\n\t\tlogrus.Debugf(\"writing sync file %s\", sync)\n\t\tif err := utils.SendFile(pipe.File(), sync.File); err != nil {\n\t\t\treturn fmt.Errorf(\"sending file after sync %q: %w\", sync.Type, err)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc writeSync(pipe *syncSocket, sync syncType) error {\n\treturn doWriteSync(pipe, syncT{Type: sync})\n}\n\nfunc writeSyncArg(pipe *syncSocket, sync syncType, arg any) error {\n\targJSON, err := json.Marshal(arg)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"writing sync %v: marshal argument failed: %w\", sync, err)\n\t}\n\targJSONMsg := json.RawMessage(argJSON)\n\treturn doWriteSync(pipe, syncT{Type: sync, Arg: &argJSONMsg})\n}\n\nfunc doReadSync(pipe *syncSocket) (syncT, error) {\n\tvar sync syncT\n\tlogrus.Debugf(\"reading sync\")\n\tpacket, err := pipe.ReadPacket()\n\tif err != nil {\n\t\tif errors.Is(err, io.EOF) {\n\t\t\tlogrus.Debugf(\"sync pipe closed\")\n\t\t\treturn sync, err\n\t\t}\n\t\treturn sync, fmt.Errorf(\"reading from parent failed: %w\", err)\n\t}\n\tif err := json.Unmarshal(packet, &sync); err != nil {\n\t\treturn sync, fmt.Errorf(\"unmarshal sync from parent failed: %w\", err)\n\t}\n\tlogrus.Debugf(\"read sync %s\", sync)\n\tif sync.Type == procError {\n\t\tvar ierr initError\n\t\tif sync.Arg == nil {\n\t\t\treturn sync, errors.New(\"procError missing error payload\")\n\t\t}\n\t\tif err := json.Unmarshal(*sync.Arg, &ierr); err != nil {\n\t\t\treturn sync, fmt.Errorf(\"unmarshal procError failed: %w\", err)\n\t\t}\n\t\treturn sync, &ierr\n\t}\n\tif sync.Flags&syncFlagHasFd != 0 {\n\t\tlogrus.Debugf(\"reading sync file %s\", sync)\n\t\tfile, err := utils.RecvFile(pipe.File())\n\t\tif err != nil {\n\t\t\treturn sync, fmt.Errorf(\"receiving fd from sync %v failed: %w\", sync.Type, err)\n\t\t}\n\t\tsync.File = file\n\t}\n\treturn sync, nil\n}\n\nfunc readSyncFull(pipe *syncSocket, expected syncType) (syncT, error) {\n\tsync, err := doReadSync(pipe)\n\tif err != nil {\n\t\treturn sync, err\n\t}\n\tif sync.Type != expected {\n\t\treturn sync, fmt.Errorf(\"unexpected synchronisation flag: got %q, expected %q\", sync.Type, expected)\n\t}\n\treturn sync, nil\n}\n\nfunc readSync(pipe *syncSocket, expected syncType) error {\n\tsync, err := readSyncFull(pipe, expected)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif sync.Arg != nil {\n\t\treturn fmt.Errorf(\"sync %v had unexpected argument passed: %q\", expected, string(*sync.Arg))\n\t}\n\tif sync.File != nil {\n\t\t_ = sync.File.Close()\n\t\treturn fmt.Errorf(\"sync %v had unexpected file passed\", sync.Type)\n\t}\n\treturn nil\n}\n\n// parseSync runs the given callback function on each syncT received from the\n// child. It will return once io.EOF is returned from the given pipe.\nfunc parseSync(pipe *syncSocket, fn func(*syncT) error) error {\n\tfor {\n\t\tsync, err := doReadSync(pipe)\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\tif err := fn(&sync); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "libcontainer/sync_unix.go",
    "content": "package libcontainer\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"sync/atomic\"\n\n\t\"github.com/opencontainers/runc/internal/linux\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// syncSocket is a wrapper around a SOCK_SEQPACKET socket, providing\n// packet-oriented methods. This is needed because SOCK_SEQPACKET does not\n// allow for partial reads, but the Go stdlib treats it as a streamable source,\n// which ends up making things like json.Decoder hang forever if the packet is\n// bigger than the internal read buffer.\ntype syncSocket struct {\n\tf      *os.File\n\tclosed atomic.Bool\n}\n\nfunc newSyncSocket(f *os.File) *syncSocket {\n\treturn &syncSocket{f: f}\n}\n\nfunc (s *syncSocket) File() *os.File {\n\treturn s.f\n}\n\nfunc (s *syncSocket) Close() error {\n\t// Even with errors from Close(), we have to assume the pipe was closed.\n\ts.closed.Store(true)\n\treturn s.f.Close()\n}\n\nfunc (s *syncSocket) isClosed() bool {\n\treturn s.closed.Load()\n}\n\nfunc (s *syncSocket) WritePacket(b []byte) (int, error) {\n\treturn s.f.Write(b)\n}\n\nfunc (s *syncSocket) ReadPacket() ([]byte, error) {\n\tsize, _, err := linux.Recvfrom(int(s.f.Fd()), nil, unix.MSG_TRUNC|unix.MSG_PEEK)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"fetch packet length from socket: %w\", err)\n\t}\n\t// We will only get a zero size if the socket has been closed from the\n\t// other end (otherwise recvfrom(2) will block until a packet is ready). In\n\t// addition, SOCK_SEQPACKET is treated as a stream source by Go stdlib so\n\t// returning io.EOF here is correct from that perspective too.\n\tif size == 0 {\n\t\treturn nil, io.EOF\n\t}\n\tbuf := make([]byte, size)\n\tn, err := s.f.Read(buf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n != size {\n\t\treturn nil, fmt.Errorf(\"packet read too short: expected %d byte packet but only %d bytes read\", size, n)\n\t}\n\treturn buf, nil\n}\n\nfunc (s *syncSocket) Shutdown(how int) error {\n\tif err := unix.Shutdown(int(s.f.Fd()), how); err != nil {\n\t\treturn &os.PathError{Op: \"shutdown\", Path: s.f.Name() + \" (sync pipe)\", Err: err}\n\t}\n\treturn nil\n}\n\n// newSyncSockpair returns a new SOCK_SEQPACKET unix socket pair to be used for\n// runc-init synchronisation.\nfunc newSyncSockpair(name string) (parent, child *syncSocket, err error) {\n\tfds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_SEQPACKET|unix.SOCK_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tparentFile := os.NewFile(uintptr(fds[1]), name+\"-p\")\n\tchildFile := os.NewFile(uintptr(fds[0]), name+\"-c\")\n\treturn newSyncSocket(parentFile), newSyncSocket(childFile), nil\n}\n"
  },
  {
    "path": "libcontainer/system/doc.go",
    "content": "// Package system provides wrappers for Linux system operations.\npackage system\n"
  },
  {
    "path": "libcontainer/system/kernelversion/kernel_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   File copied and customized based on\n   https://github.com/moby/moby/tree/v20.10.14/profiles/seccomp/kernel_linux.go\n\n   File copied from\n   https://github.com/containerd/containerd/blob/v1.7.5/contrib/seccomp/kernelversion/kernel_linux.go\n*/\n\n// Package kernelversion provides a method to check whether the running kernel\n// version is at least a minimum kernel version.\npackage kernelversion\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"sync\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// KernelVersion holds information about the kernel.\ntype KernelVersion struct {\n\tKernel uint64 // Version of the Kernel (i.e., the \"4\" in \"4.1.2-generic\")\n\tMajor  uint64 // Major revision of the Kernel (i.e., the \"1\" in \"4.1.2-generic\")\n}\n\nfunc (k *KernelVersion) String() string {\n\tif k.Kernel > 0 || k.Major > 0 {\n\t\treturn fmt.Sprintf(\"%d.%d\", k.Kernel, k.Major)\n\t}\n\treturn \"\"\n}\n\nvar (\n\tcurrentKernelVersion *KernelVersion\n\tkernelVersionError   error\n\tonce                 sync.Once\n)\n\n// getKernelVersion gets the current kernel version.\nfunc getKernelVersion() (*KernelVersion, error) {\n\tonce.Do(func() {\n\t\tvar uts unix.Utsname\n\t\tif err := unix.Uname(&uts); err != nil {\n\t\t\treturn\n\t\t}\n\t\t// Remove the \\x00 from the release for Atoi to parse correctly\n\t\tcurrentKernelVersion, kernelVersionError = parseRelease(string(uts.Release[:bytes.IndexByte(uts.Release[:], 0)]))\n\t})\n\treturn currentKernelVersion, kernelVersionError\n}\n\n// parseRelease parses a string and creates a KernelVersion based on it.\nfunc parseRelease(release string) (*KernelVersion, error) {\n\tvar version KernelVersion\n\n\t// We're only make sure we get the \"kernel\" and \"major revision\". Sometimes we have\n\t// 3.12.25-gentoo, but sometimes we just have 3.12-1-amd64.\n\t_, err := fmt.Sscanf(release, \"%d.%d\", &version.Kernel, &version.Major)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse kernel version %q: %w\", release, err)\n\t}\n\treturn &version, nil\n}\n\n// GreaterEqualThan checks if the host's kernel version is greater than, or\n// equal to the given kernel version v. Only \"kernel version\" and \"major revision\"\n// can be specified (e.g., \"3.12\") and will be taken into account, which means\n// that 3.12.25-gentoo and 3.12-1-amd64 are considered equal (kernel: 3, major: 12).\nfunc GreaterEqualThan(minVersion KernelVersion) (bool, error) {\n\tkv, err := getKernelVersion()\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tif kv.Kernel > minVersion.Kernel {\n\t\treturn true, nil\n\t}\n\tif kv.Kernel == minVersion.Kernel && kv.Major >= minVersion.Major {\n\t\treturn true, nil\n\t}\n\treturn false, nil\n}\n"
  },
  {
    "path": "libcontainer/system/kernelversion/kernel_linux_test.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   File copied and customized based on\n   https://github.com/moby/moby/tree/v20.10.14/profiles/seccomp/kernel_linux_test.go\n*/\n\npackage kernelversion\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n)\n\nfunc TestGetKernelVersion(t *testing.T) {\n\tversion, err := getKernelVersion()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif version == nil {\n\t\tt.Fatal(\"version is nil\")\n\t}\n\tif version.Kernel == 0 {\n\t\tt.Fatal(\"no kernel version\")\n\t}\n}\n\nfunc TestParseRelease(t *testing.T) {\n\ttests := []struct {\n\t\tin          string\n\t\tout         KernelVersion\n\t\texpectedErr error\n\t}{\n\t\t{in: \"3.8\", out: KernelVersion{Kernel: 3, Major: 8}},\n\t\t{in: \"3.8.0\", out: KernelVersion{Kernel: 3, Major: 8}},\n\t\t{in: \"3.8.0-19-generic\", out: KernelVersion{Kernel: 3, Major: 8}},\n\t\t{in: \"3.4.54.longterm-1\", out: KernelVersion{Kernel: 3, Major: 4}},\n\t\t{in: \"3.10.0-862.2.3.el7.x86_64\", out: KernelVersion{Kernel: 3, Major: 10}},\n\t\t{in: \"3.12.8tag\", out: KernelVersion{Kernel: 3, Major: 12}},\n\t\t{in: \"3.12-1-amd64\", out: KernelVersion{Kernel: 3, Major: 12}},\n\t\t{in: \"3.12foobar\", out: KernelVersion{Kernel: 3, Major: 12}},\n\t\t{in: \"99.999.999-19-generic\", out: KernelVersion{Kernel: 99, Major: 999}},\n\t\t{in: \"\", expectedErr: fmt.Errorf(`failed to parse kernel version \"\": EOF`)},\n\t\t{in: \"3\", expectedErr: fmt.Errorf(`failed to parse kernel version \"3\": unexpected EOF`)},\n\t\t{in: \"3.\", expectedErr: fmt.Errorf(`failed to parse kernel version \"3.\": EOF`)},\n\t\t{in: \"3a\", expectedErr: fmt.Errorf(`failed to parse kernel version \"3a\": input does not match format`)},\n\t\t{in: \"3.a\", expectedErr: fmt.Errorf(`failed to parse kernel version \"3.a\": expected integer`)},\n\t\t{in: \"a\", expectedErr: fmt.Errorf(`failed to parse kernel version \"a\": expected integer`)},\n\t\t{in: \"a.a\", expectedErr: fmt.Errorf(`failed to parse kernel version \"a.a\": expected integer`)},\n\t\t{in: \"a.a.a-a\", expectedErr: fmt.Errorf(`failed to parse kernel version \"a.a.a-a\": expected integer`)},\n\t\t{in: \"-3\", expectedErr: fmt.Errorf(`failed to parse kernel version \"-3\": expected integer`)},\n\t\t{in: \"-3.\", expectedErr: fmt.Errorf(`failed to parse kernel version \"-3.\": expected integer`)},\n\t\t{in: \"-3.8\", expectedErr: fmt.Errorf(`failed to parse kernel version \"-3.8\": expected integer`)},\n\t\t{in: \"-3.-8\", expectedErr: fmt.Errorf(`failed to parse kernel version \"-3.-8\": expected integer`)},\n\t\t{in: \"3.-8\", expectedErr: fmt.Errorf(`failed to parse kernel version \"3.-8\": expected integer`)},\n\t}\n\tfor _, tc := range tests {\n\t\tt.Run(tc.in, func(t *testing.T) {\n\t\t\tversion, err := parseRelease(tc.in)\n\t\t\tif tc.expectedErr != nil {\n\t\t\t\tif err == nil {\n\t\t\t\t\tt.Fatal(\"expected an error\")\n\t\t\t\t}\n\t\t\t\tif err.Error() != tc.expectedErr.Error() {\n\t\t\t\t\tt.Fatalf(\"expected: %s, got: %s\", tc.expectedErr, err)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(\"unexpected error:\", err)\n\t\t\t}\n\t\t\tif version == nil {\n\t\t\t\tt.Fatal(\"version is nil\")\n\t\t\t}\n\t\t\tif version.Kernel != tc.out.Kernel || version.Major != tc.out.Major {\n\t\t\t\tt.Fatalf(\"expected: %d.%d, got: %d.%d\", tc.out.Kernel, tc.out.Major, version.Kernel, version.Major)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestGreaterEqualThan(t *testing.T) {\n\t// Get the current kernel version, so that we can make test relative to that\n\tv, err := getKernelVersion()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\ttests := []struct {\n\t\tdoc      string\n\t\tin       KernelVersion\n\t\texpected bool\n\t}{\n\t\t{\n\t\t\tdoc:      \"same version\",\n\t\t\tin:       KernelVersion{v.Kernel, v.Major},\n\t\t\texpected: true,\n\t\t},\n\t\t{\n\t\t\tdoc:      \"kernel minus one\",\n\t\t\tin:       KernelVersion{v.Kernel - 1, v.Major},\n\t\t\texpected: true,\n\t\t},\n\t\t{\n\t\t\tdoc:      \"kernel plus one\",\n\t\t\tin:       KernelVersion{v.Kernel + 1, v.Major},\n\t\t\texpected: false,\n\t\t},\n\t\t{\n\t\t\tdoc:      \"major plus one\",\n\t\t\tin:       KernelVersion{v.Kernel, v.Major + 1},\n\t\t\texpected: false,\n\t\t},\n\t}\n\tfor _, tc := range tests {\n\t\tt.Run(tc.doc+\": \"+tc.in.String(), func(t *testing.T) {\n\t\t\tok, err := GreaterEqualThan(tc.in)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(\"unexpected error:\", err)\n\t\t\t}\n\t\t\tif ok != tc.expected {\n\t\t\t\tt.Fatalf(\"expected: %v, got: %v\", tc.expected, ok)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "libcontainer/system/linux.go",
    "content": "//go:build linux\n\npackage system\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"unsafe\"\n\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n)\n\ntype ParentDeathSignal int\n\nfunc (p ParentDeathSignal) Restore() error {\n\tif p == 0 {\n\t\treturn nil\n\t}\n\tcurrent, err := GetParentDeathSignal()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif p == current {\n\t\treturn nil\n\t}\n\treturn p.Set()\n}\n\nfunc (p ParentDeathSignal) Set() error {\n\treturn SetParentDeathSignal(uintptr(p))\n}\n\nfunc SetParentDeathSignal(sig uintptr) error {\n\tif err := unix.Prctl(unix.PR_SET_PDEATHSIG, sig, 0, 0, 0); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc GetParentDeathSignal() (ParentDeathSignal, error) {\n\tvar sig int\n\tif err := unix.Prctl(unix.PR_GET_PDEATHSIG, uintptr(unsafe.Pointer(&sig)), 0, 0, 0); err != nil {\n\t\treturn -1, err\n\t}\n\treturn ParentDeathSignal(sig), nil\n}\n\nfunc SetKeepCaps() error {\n\tif err := unix.Prctl(unix.PR_SET_KEEPCAPS, 1, 0, 0, 0); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc ClearKeepCaps() error {\n\tif err := unix.Prctl(unix.PR_SET_KEEPCAPS, 0, 0, 0, 0); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc Setctty() error {\n\tif err := unix.IoctlSetInt(0, unix.TIOCSCTTY, 0); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// SetSubreaper sets the value i as the subreaper setting for the calling process\nfunc SetSubreaper(i int) error {\n\treturn unix.Prctl(unix.PR_SET_CHILD_SUBREAPER, uintptr(i), 0, 0, 0)\n}\n\n// GetSubreaper returns the subreaper setting for the calling process\nfunc GetSubreaper() (int, error) {\n\tvar i uintptr\n\n\tif err := unix.Prctl(unix.PR_GET_CHILD_SUBREAPER, uintptr(unsafe.Pointer(&i)), 0, 0, 0); err != nil {\n\t\treturn -1, err\n\t}\n\n\treturn int(i), nil\n}\n\nfunc ExecutableMemfd(comment string, flags int) (*os.File, error) {\n\t// Try to use MFD_EXEC first. On pre-6.3 kernels we get -EINVAL for this\n\t// flag. On post-6.3 kernels, with vm.memfd_noexec=1 this ensures we get an\n\t// executable memfd. For vm.memfd_noexec=2 this is a bit more complicated.\n\t// The original vm.memfd_noexec=2 implementation incorrectly silently\n\t// allowed MFD_EXEC[1] -- this should be fixed in 6.6. On 6.6 and newer\n\t// kernels, we will get -EACCES if we try to use MFD_EXEC with\n\t// vm.memfd_noexec=2 (for 6.3-6.5, -EINVAL was the intended return value).\n\t//\n\t// The upshot is we only need to retry without MFD_EXEC on -EINVAL because\n\t// it just so happens that passing MFD_EXEC bypasses vm.memfd_noexec=2 on\n\t// kernels where -EINVAL is actually a security denial.\n\tmemfd, err := unix.MemfdCreate(comment, flags|unix.MFD_EXEC)\n\tif err == unix.EINVAL {\n\t\tmemfd, err = unix.MemfdCreate(comment, flags)\n\t}\n\tif err != nil {\n\t\tif err == unix.EACCES {\n\t\t\tlogrus.Info(\"memfd_create(MFD_EXEC) failed, possibly due to vm.memfd_noexec=2 -- falling back to less secure O_TMPFILE\")\n\t\t}\n\t\terr := os.NewSyscallError(\"memfd_create\", err)\n\t\treturn nil, fmt.Errorf(\"failed to create executable memfd: %w\", err)\n\t}\n\treturn os.NewFile(uintptr(memfd), \"/memfd:\"+comment), nil\n}\n\n// Copy is like io.Copy except it uses sendfile(2) if the source and sink are\n// both (*os.File) as an optimisation to make copies faster.\nfunc Copy(dst io.Writer, src io.Reader) (copied int64, err error) {\n\tdstFile, _ := dst.(*os.File)\n\tsrcFile, _ := src.(*os.File)\n\n\tif dstFile != nil && srcFile != nil {\n\t\tfi, err := srcFile.Stat()\n\t\tif err != nil {\n\t\t\tgoto fallback\n\t\t}\n\t\tsize := fi.Size()\n\t\tfor size > 0 {\n\t\t\tn, err := unix.Sendfile(int(dstFile.Fd()), int(srcFile.Fd()), nil, int(size))\n\t\t\tif n > 0 {\n\t\t\t\tsize -= int64(n)\n\t\t\t\tcopied += int64(n)\n\t\t\t}\n\t\t\tif err == unix.EINTR {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\tif copied == 0 {\n\t\t\t\t\t// If we haven't copied anything so far, we can safely just\n\t\t\t\t\t// fallback to io.Copy. We could always do the fallback but\n\t\t\t\t\t// it's safer to error out in the case of a partial copy\n\t\t\t\t\t// followed by an error (which should never happen).\n\t\t\t\t\tgoto fallback\n\t\t\t\t}\n\t\t\t\treturn copied, fmt.Errorf(\"partial sendfile copy: %w\", err)\n\t\t\t}\n\t\t}\n\t\treturn copied, nil\n\t}\n\nfallback:\n\treturn io.Copy(dst, src)\n}\n\n// SetLinuxPersonality sets the Linux execution personality. For more information see the personality syscall documentation.\n// checkout getLinuxPersonalityFromStr() from libcontainer/specconv/spec_linux.go for type conversion.\nfunc SetLinuxPersonality(personality int) error {\n\t_, _, errno := unix.Syscall(unix.SYS_PERSONALITY, uintptr(personality), 0, 0)\n\tif errno != 0 {\n\t\treturn &os.SyscallError{Syscall: \"set_personality\", Err: errno}\n\t}\n\treturn nil\n}\n\n// GetPtyPeer is a wrapper for ioctl(TIOCGPTPEER).\nfunc GetPtyPeer(ptyFd uintptr, unsafePeerPath string, flags int) (*os.File, error) {\n\t// Make sure O_NOCTTY is always set -- otherwise runc might accidentally\n\t// gain it as a controlling terminal. O_CLOEXEC also needs to be set to\n\t// make sure we don't leak the handle either.\n\tflags |= unix.O_NOCTTY | unix.O_CLOEXEC\n\n\t// There is no nice wrapper for this kind of ioctl in unix.\n\tpeerFd, _, errno := unix.Syscall(\n\t\tunix.SYS_IOCTL,\n\t\tptyFd,\n\t\tuintptr(unix.TIOCGPTPEER),\n\t\tuintptr(flags),\n\t)\n\tif errno != 0 {\n\t\treturn nil, os.NewSyscallError(\"ioctl TIOCGPTPEER\", errno)\n\t}\n\treturn os.NewFile(peerFd, unsafePeerPath), nil\n}\n"
  },
  {
    "path": "libcontainer/system/proc.go",
    "content": "package system\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/runc/internal/pathrs\"\n)\n\n// State is the status of a process.\ntype State rune\n\nconst ( // Only values for Linux 3.14 and later are listed here\n\tDead        State = 'X'\n\tDiskSleep   State = 'D'\n\tRunning     State = 'R'\n\tSleeping    State = 'S'\n\tStopped     State = 'T'\n\tTracingStop State = 't'\n\tZombie      State = 'Z'\n\tParked      State = 'P'\n\tIdle        State = 'I'\n)\n\n// String forms of the state from proc(5)'s documentation for\n// /proc/[pid]/status' \"State\" field.\nfunc (s State) String() string {\n\tswitch s {\n\tcase Dead:\n\t\treturn \"dead\"\n\tcase DiskSleep:\n\t\treturn \"disk sleep\"\n\tcase Running:\n\t\treturn \"running\"\n\tcase Sleeping:\n\t\treturn \"sleeping\"\n\tcase Stopped:\n\t\treturn \"stopped\"\n\tcase TracingStop:\n\t\treturn \"tracing stop\"\n\tcase Zombie:\n\t\treturn \"zombie\"\n\tcase Parked:\n\t\treturn \"parked\"\n\tcase Idle:\n\t\treturn \"idle\" // kernel thread\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown (%c)\", s)\n\t}\n}\n\n// Stat_t represents the information from /proc/[pid]/stat, as\n// described in proc(5) with names based on the /proc/[pid]/status\n// fields.\ntype Stat_t struct {\n\t// Name is the command run by the process.\n\tName string\n\n\t// State is the state of the process.\n\tState State\n\n\t// StartTime is the number of clock ticks after system boot (since\n\t// Linux 2.6).\n\tStartTime uint64\n}\n\n// Stat returns a Stat_t instance for the specified process.\nfunc Stat(pid int) (Stat_t, error) {\n\tvar stat Stat_t\n\n\tstatFile, err := pathrs.ProcPidOpen(pid, \"stat\", os.O_RDONLY)\n\tif err != nil {\n\t\treturn stat, err\n\t}\n\tdefer statFile.Close()\n\n\tbytes, err := io.ReadAll(statFile)\n\tif err != nil {\n\t\treturn stat, err\n\t}\n\treturn parseStat(string(bytes))\n}\n\nfunc parseStat(data string) (stat Stat_t, err error) {\n\t// Example:\n\t// 89653 (gunicorn: maste) S 89630 89653 89653 0 -1 4194560 29689 28896 0 3 146 32 76 19 20 0 1 0 2971844 52965376 3920 18446744073709551615 1 1 0 0 0 0 0 16781312 137447943 0 0 0 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0\n\t// The fields are space-separated, see full description in proc(5).\n\t//\n\t// We are only interested in:\n\t//  * field 2: process name. It is the only field enclosed into\n\t//    parenthesis, as it can contain spaces (and parenthesis) inside.\n\t//  * field 3: process state, a single character (%c)\n\t//  * field 22: process start time, a long unsigned integer (%llu).\n\n\t// 1. Look for the first '(' and the last ')' first, what's in between is Name.\n\t//    We expect at least 20 fields and a space after the last one.\n\n\tconst minAfterName = 20*2 + 1 // the min field is '0 '.\n\n\tfirst := strings.IndexByte(data, '(')\n\tif first < 0 || first+minAfterName >= len(data) {\n\t\treturn stat, fmt.Errorf(\"invalid stat data (no comm or too short): %q\", data)\n\t}\n\n\tlast := strings.LastIndexByte(data, ')')\n\tif last <= first || last+minAfterName >= len(data) {\n\t\treturn stat, fmt.Errorf(\"invalid stat data (no comm or too short): %q\", data)\n\t}\n\n\tstat.Name = data[first+1 : last]\n\n\t// 2. Remove fields 1 and 2 and a space after. State is right after.\n\tdata = data[last+2:]\n\tstat.State = State(data[0])\n\n\t// 3. StartTime is field 22, data is at field 3 now, so we need to skip 19 spaces.\n\tskipSpaces := 22 - 3\n\tfor first = 0; skipSpaces > 0 && first < len(data); first++ {\n\t\tif data[first] == ' ' {\n\t\t\tskipSpaces--\n\t\t}\n\t}\n\t// Now first points to StartTime; look for space right after.\n\ti := strings.IndexByte(data[first:], ' ')\n\tif i < 0 {\n\t\treturn stat, fmt.Errorf(\"invalid stat data (too short): %q\", data)\n\t}\n\tstat.StartTime, err = strconv.ParseUint(data[first:first+i], 10, 64)\n\tif err != nil {\n\t\treturn stat, fmt.Errorf(\"invalid stat data (bad start time): %w\", err)\n\t}\n\n\treturn stat, nil\n}\n"
  },
  {
    "path": "libcontainer/system/proc_test.go",
    "content": "package system\n\nimport (\n\t\"errors\"\n\t\"math/bits\"\n\t\"os\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"testing\"\n)\n\nvar procdata = map[string]Stat_t{\n\t\"4902 (gunicorn: maste) S 4885 4902 4902 0 -1 4194560 29683 29929 61 83 78 16 96 17 20 0 1 0 9126532 52965376 1903 18446744073709551615 4194304 7461796 140733928751520 140733928698072 139816984959091 0 0 16781312 137447943 1 0 0 17 3 0 0 9 0 0 9559488 10071156 33050624 140733928758775 140733928758945 140733928758945 140733928759264 0\": {\n\t\tName:      \"gunicorn: maste\",\n\t\tState:     'S',\n\t\tStartTime: 9126532,\n\t},\n\t\"9534 (cat) R 9323 9534 9323 34828 9534 4194304 95 0 0 0 0 0 0 0 20 0 1 0 9214966 7626752 168 18446744073709551615 4194304 4240332 140732237651568 140732237650920 140570710391216 0 0 0 0 0 0 0 17 1 0 0 0 0 0 6340112 6341364 21553152 140732237653865 140732237653885 140732237653885 140732237656047 0\": {\n\t\tName:      \"cat\",\n\t\tState:     'R',\n\t\tStartTime: 9214966,\n\t},\n\t\"12345 ((ugly )pr()cess() R 9323 9534 9323 34828 9534 4194304 95 0 0 0 0 0 0 0 20 0 1 0 9214966 7626752 168 18446744073709551615 4194304 4240332 140732237651568 140732237650920 140570710391216 0 0 0 0 0 0 0 17 1 0 0 0 0 0 6340112 6341364 21553152 140732237653865 140732237653885 140732237653885 140732237656047 0\": {\n\t\tName:      \"(ugly )pr()cess(\",\n\t\tState:     'R',\n\t\tStartTime: 9214966,\n\t},\n\t\"24767 (irq/44-mei_me) S 2 0 0 0 -1 2129984 0 0 0 0 0 0 0 0 -51 0 1 0 8722075 0 0 18446744073709551615 0 0 0 0 0 0 0 2147483647 0 0 0 0 17 1 50 1 0 0 0 0 0 0 0 0 0 0 0\": {\n\t\tName:      \"irq/44-mei_me\",\n\t\tState:     'S',\n\t\tStartTime: 8722075,\n\t},\n\t\"0 () I 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\": {\n\t\tName:      \"\",\n\t\tState:     'I',\n\t\tStartTime: 0,\n\t},\n\t// Not entirely correct, but minimally viable input (StartTime and a space after).\n\t\"1 (woo hoo) S 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 \": {\n\t\tName:      \"woo hoo\",\n\t\tState:     'S',\n\t\tStartTime: 4,\n\t},\n}\n\nfunc TestParseStat(t *testing.T) {\n\tfor line, exp := range procdata {\n\t\tst, err := parseStat(line)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"input %q, unexpected error %v\", line, err)\n\t\t} else if !reflect.DeepEqual(st, exp) {\n\t\t\tt.Errorf(\"input %q, expected %+v, got %+v\", line, exp, st)\n\t\t}\n\t}\n}\n\nfunc TestParseStatBadInput(t *testing.T) {\n\tcases := []struct {\n\t\tdesc, input string\n\t}{\n\t\t{\n\t\t\t\"no (\",\n\t\t\t\"123 ) S 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\",\n\t\t},\n\t\t{\n\t\t\t\"no )\",\n\t\t\t\"123 ( S 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\",\n\t\t},\n\t\t{\n\t\t\t\") at end\",\n\t\t\t\"123 (cmd) S 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)\",\n\t\t},\n\t\t{\n\t\t\t\"misplaced ()\",\n\t\t\t\"123 )one( S 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\",\n\t\t},\n\t\t{\n\t\t\t\"misplaced empty ()\",\n\t\t\t\"123 )( S 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\",\n\t\t},\n\t\t{\n\t\t\t\"empty line\",\n\t\t\t\"\",\n\t\t},\n\t\t{\n\t\t\t\"short line\",\n\t\t\t\"123 (cmd) S 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\",\n\t\t},\n\t\t{\n\t\t\t\"short line (no space after stime)\",\n\t\t\t\"123 (cmd) S 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42\",\n\t\t},\n\t\t{\n\t\t\t\"bad stime\",\n\t\t\t\"123 (cmd) S 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 \",\n\t\t},\n\t\t{\n\t\t\t\"bad stime 2\", // would be valid if not -1\n\t\t\t\"123 (cmd) S                   -1 \",\n\t\t},\n\t\t{\n\t\t\t\"a tad short\",\n\t\t\t\"1234 (cmd) \",\n\t\t},\n\t\t{\n\t\t\t\"bad stime\",\n\t\t\t\"123 (cmd) S 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1\",\n\t\t},\n\t}\n\tfor _, c := range cases {\n\t\tst, err := parseStat(c.input)\n\t\tif err == nil {\n\t\t\tt.Errorf(\"case %q, expected error, got nil, %+v\", c.desc, st)\n\t\t}\n\t}\n}\n\nfunc BenchmarkParseStat(b *testing.B) {\n\tvar (\n\t\tst, exp Stat_t\n\t\tline    string\n\t\terr     error\n\t)\n\n\tfor i := 0; i != b.N; i++ {\n\t\tfor line, exp = range procdata {\n\t\t\tst, err = parseStat(line)\n\t\t}\n\t}\n\tif err != nil {\n\t\tb.Fatal(err)\n\t}\n\tif !reflect.DeepEqual(st, exp) {\n\t\tb.Fatal(\"wrong result\")\n\t}\n}\n\nfunc BenchmarkParseRealStat(b *testing.B) {\n\tvar (\n\t\tst    Stat_t\n\t\terr   error\n\t\ttotal int\n\t)\n\tb.StopTimer()\n\tfd, err := os.Open(\"/proc\")\n\tif err != nil {\n\t\tb.Fatal(err)\n\t}\n\tdefer fd.Close()\n\n\tfor i := 0; i != b.N; i++ {\n\t\tcount := 0\n\t\tif _, err := fd.Seek(0, 0); err != nil {\n\t\t\tb.Fatal(err)\n\t\t}\n\t\tnames, err := fd.Readdirnames(-1)\n\t\tif err != nil {\n\t\t\tb.Fatal(err)\n\t\t}\n\t\tfor _, n := range names {\n\t\t\tpid, err := strconv.ParseUint(n, 10, bits.UintSize)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tb.StartTimer()\n\t\t\tst, err = Stat(int(pid))\n\t\t\tb.StopTimer()\n\t\t\tif err != nil {\n\t\t\t\t// Ignore a process that just finished.\n\t\t\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tb.Fatal(err)\n\t\t\t}\n\t\t\tcount++\n\t\t}\n\t\ttotal += count\n\t}\n\tb.Logf(\"N: %d, parsed %d pids, last stat: %+v, err: %v\", b.N, total, st, err)\n}\n"
  },
  {
    "path": "libcontainer/system/rlimit_linux.go",
    "content": "package system\n\nimport (\n\t\"syscall\"\n)\n\n// ClearRlimitNofileCache clears go runtime's nofile rlimit cache. The argument\n// is process RLIMIT_NOFILE values. Relies on go.dev/cl/588076.\nfunc ClearRlimitNofileCache(lim *syscall.Rlimit) {\n\t// Ignore the return values since we only need to clean the cache,\n\t// the limit is going to be set via unix.Prlimit elsewhere.\n\t_ = syscall.Setrlimit(syscall.RLIMIT_NOFILE, lim)\n}\n"
  },
  {
    "path": "libcontainer/utils/cmsg.go",
    "content": "package utils\n\n/*\n * Copyright 2016, 2017 SUSE LLC\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\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\n\t\"github.com/opencontainers/runc/internal/linux\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// MaxNameLen is the maximum length of the name of a file descriptor being sent\n// using SendFile. The name of the file handle returned by RecvFile will never be\n// larger than this value.\nconst MaxNameLen = 4096\n\n// oobSpace is the size of the oob slice required to store a single FD. Note\n// that unix.UnixRights appears to make the assumption that fd is always int32,\n// so sizeof(fd) = 4.\nvar oobSpace = unix.CmsgSpace(4)\n\n// RecvFile waits for a file descriptor to be sent over the given AF_UNIX\n// socket. The file name of the remote file descriptor will be recreated\n// locally (it is sent as non-auxiliary data in the same payload).\nfunc RecvFile(socket *os.File) (_ *os.File, Err error) {\n\tname := make([]byte, MaxNameLen)\n\toob := make([]byte, oobSpace)\n\n\tsockfd := socket.Fd()\n\tvar (\n\t\tn, oobn int\n\t\terr     error\n\t)\n\n\tfor {\n\t\tn, oobn, _, _, err = unix.Recvmsg(int(sockfd), name, oob, unix.MSG_CMSG_CLOEXEC)\n\t\tif err != unix.EINTR {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif err != nil {\n\t\treturn nil, os.NewSyscallError(\"recvmsg\", err)\n\t}\n\tif n >= MaxNameLen || oobn != oobSpace {\n\t\treturn nil, fmt.Errorf(\"recvfile: incorrect number of bytes read (n=%d oobn=%d)\", n, oobn)\n\t}\n\t// Truncate.\n\tname = name[:n]\n\toob = oob[:oobn]\n\n\tscms, err := unix.ParseSocketControlMessage(oob)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// We cannot control how many SCM_RIGHTS we receive, and upon receiving\n\t// them all of the descriptors are installed in our fd table, so we need to\n\t// parse all of the SCM_RIGHTS we received in order to close all of the\n\t// descriptors on error.\n\tvar fds []int\n\tdefer func() {\n\t\tfor i, fd := range fds {\n\t\t\tif i == 0 && Err == nil {\n\t\t\t\t// Only close the first one on error.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// Always close extra ones.\n\t\t\t_ = unix.Close(fd)\n\t\t}\n\t}()\n\tvar lastErr error\n\tfor _, scm := range scms {\n\t\tif scm.Header.Type == unix.SCM_RIGHTS {\n\t\t\tscmFds, err := unix.ParseUnixRights(&scm)\n\t\t\tif err != nil {\n\t\t\t\tlastErr = err\n\t\t\t} else {\n\t\t\t\tfds = append(fds, scmFds...)\n\t\t\t}\n\t\t}\n\t}\n\tif lastErr != nil {\n\t\treturn nil, lastErr\n\t}\n\n\t// We do this after collecting the fds to make sure we close them all when\n\t// returning an error here.\n\tif len(scms) != 1 {\n\t\treturn nil, fmt.Errorf(\"recvfd: number of SCMs is not 1: %d\", len(scms))\n\t}\n\tif len(fds) != 1 {\n\t\treturn nil, fmt.Errorf(\"recvfd: number of fds is not 1: %d\", len(fds))\n\t}\n\treturn os.NewFile(uintptr(fds[0]), string(name)), nil\n}\n\n// SendFile sends a file over the given AF_UNIX socket. file.Name() is also\n// included so that if the other end uses RecvFile, the file will have the same\n// name information.\nfunc SendFile(socket, file *os.File) error {\n\tname := file.Name()\n\tif len(name) >= MaxNameLen {\n\t\treturn fmt.Errorf(\"sendfd: filename too long: %s\", name)\n\t}\n\terr := SendRawFd(socket, name, file.Fd())\n\truntime.KeepAlive(file)\n\treturn err\n}\n\n// SendRawFd sends a specific file descriptor over the given AF_UNIX socket.\nfunc SendRawFd(socket *os.File, msg string, fd uintptr) error {\n\toob := unix.UnixRights(int(fd))\n\treturn linux.Sendmsg(int(socket.Fd()), []byte(msg), oob, nil, 0)\n}\n"
  },
  {
    "path": "libcontainer/utils/utils.go",
    "content": "// Package utils provides general helper utilities used in libcontainer.\npackage utils\n\nimport (\n\t\"encoding/json\"\n\t\"io\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\texitSignalOffset = 128\n)\n\n// ExitStatus returns the correct exit status for a process based on if it\n// was signaled or exited cleanly\nfunc ExitStatus(status unix.WaitStatus) int {\n\tif status.Signaled() {\n\t\treturn exitSignalOffset + int(status.Signal())\n\t}\n\treturn status.ExitStatus()\n}\n\n// WriteJSON writes the provided struct v to w using standard json marshaling\n// without a trailing newline. This is used instead of json.Encoder because\n// there might be a problem in json decoder in some cases, see:\n// https://github.com/docker/docker/issues/14203#issuecomment-174177790\nfunc WriteJSON(w io.Writer, v any) error {\n\tdata, err := json.Marshal(v)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = w.Write(data)\n\treturn err\n}\n\n// SearchLabels searches through a list of key=value pairs for a given key,\n// returning its value, and the binary flag telling whether the key exist.\nfunc SearchLabels(labels []string, key string) (string, bool) {\n\tkey += \"=\"\n\tfor _, s := range labels {\n\t\tif val, ok := strings.CutPrefix(s, key); ok {\n\t\t\treturn val, true\n\t\t}\n\t}\n\treturn \"\", false\n}\n\n// Annotations returns the bundle path and user defined annotations from the\n// libcontainer state.  We need to remove the bundle because that is a label\n// added by libcontainer.\nfunc Annotations(labels []string) (bundle string, userAnnotations map[string]string) {\n\tuserAnnotations = make(map[string]string)\n\tfor _, l := range labels {\n\t\tname, value, ok := strings.Cut(l, \"=\")\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tif name == \"bundle\" {\n\t\t\tbundle = value\n\t\t} else {\n\t\t\tuserAnnotations[name] = value\n\t\t}\n\t}\n\treturn bundle, userAnnotations\n}\n"
  },
  {
    "path": "libcontainer/utils/utils_test.go",
    "content": "package utils\n\nimport (\n\t\"bytes\"\n\t\"testing\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nvar labelTest = []struct {\n\tlabels []string\n\tquery  string\n\texpVal string\n\texpOk  bool\n}{\n\t{[]string{\"bundle=/path/to/bundle\"}, \"bundle\", \"/path/to/bundle\", true},\n\t{[]string{\"test=a\", \"test=b\"}, \"bundle\", \"\", false},\n\t{[]string{\"bundle=a\", \"test=b\", \"bundle=c\"}, \"bundle\", \"a\", true},\n\t{[]string{\"\", \"test=a\", \"bundle=b\"}, \"bundle\", \"b\", true},\n\t{[]string{\"test\", \"bundle=a\"}, \"bundle\", \"a\", true},\n\t{[]string{\"test=a\", \"bundle=\"}, \"bundle\", \"\", true},\n}\n\nfunc TestSearchLabels(t *testing.T) {\n\tfor _, tt := range labelTest {\n\t\tv, ok := SearchLabels(tt.labels, tt.query)\n\t\tif ok != tt.expOk {\n\t\t\tt.Errorf(\"expected ok: %v, got %v\", tt.expOk, ok)\n\t\t\tcontinue\n\t\t}\n\t\tif v != tt.expVal {\n\t\t\tt.Errorf(\"expected value '%s' for query '%s'; got '%s'\", tt.expVal, tt.query, v)\n\t\t}\n\t}\n}\n\nfunc TestExitStatus(t *testing.T) {\n\tstatus := unix.WaitStatus(0)\n\tex := ExitStatus(status)\n\tif ex != 0 {\n\t\tt.Errorf(\"expected exit status to equal 0 and received %d\", ex)\n\t}\n}\n\nfunc TestExitStatusSignaled(t *testing.T) {\n\tstatus := unix.WaitStatus(2)\n\tex := ExitStatus(status)\n\tif ex != 130 {\n\t\tt.Errorf(\"expected exit status to equal 130 and received %d\", ex)\n\t}\n}\n\nfunc TestWriteJSON(t *testing.T) {\n\tperson := struct {\n\t\tName string\n\t\tAge  int\n\t}{\n\t\tName: \"Alice\",\n\t\tAge:  30,\n\t}\n\n\tvar b bytes.Buffer\n\terr := WriteJSON(&b, person)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\texpected := `{\"Name\":\"Alice\",\"Age\":30}`\n\tif b.String() != expected {\n\t\tt.Errorf(\"expected to write %s but was %s\", expected, b.String())\n\t}\n}\n"
  },
  {
    "path": "libcontainer/utils/utils_unix.go",
    "content": "//go:build !windows\n\npackage utils\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"sync\"\n\t_ \"unsafe\" // for go:linkname\n\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/internal/linux\"\n\t\"github.com/opencontainers/runc/internal/pathrs\"\n)\n\nvar (\n\thaveCloseRangeCloexecBool bool\n\thaveCloseRangeCloexecOnce sync.Once\n)\n\nfunc haveCloseRangeCloexec() bool {\n\thaveCloseRangeCloexecOnce.Do(func() {\n\t\t// Make sure we're not closing a random file descriptor.\n\t\ttmpFd, err := unix.FcntlInt(0, unix.F_DUPFD_CLOEXEC, 0)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tdefer unix.Close(tmpFd)\n\n\t\terr = unix.CloseRange(uint(tmpFd), uint(tmpFd), unix.CLOSE_RANGE_CLOEXEC)\n\t\t// Any error means we cannot use close_range(CLOSE_RANGE_CLOEXEC).\n\t\t// -ENOSYS and -EINVAL ultimately mean we don't have support, but any\n\t\t// other potential error would imply that even the most basic close\n\t\t// operation wouldn't work.\n\t\thaveCloseRangeCloexecBool = err == nil\n\t})\n\treturn haveCloseRangeCloexecBool\n}\n\ntype fdFunc func(fd int)\n\n// fdRangeFrom calls the passed fdFunc for each file descriptor that is open in\n// the current process.\nfunc fdRangeFrom(minFd int, fn fdFunc) error {\n\tfdDir, closer, err := pathrs.ProcThreadSelfOpen(\"fd/\", unix.O_DIRECTORY|unix.O_CLOEXEC)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"get handle to /proc/thread-self/fd: %w\", err)\n\t}\n\tdefer closer()\n\tdefer fdDir.Close()\n\n\tfdList, err := fdDir.Readdirnames(-1)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor _, fdStr := range fdList {\n\t\tfd, err := strconv.Atoi(fdStr)\n\t\t// Ignore non-numeric file names.\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\t// Ignore descriptors lower than our specified minimum.\n\t\tif fd < minFd {\n\t\t\tcontinue\n\t\t}\n\t\t// Ignore the file descriptor we used for readdir, as it will be closed\n\t\t// when we return.\n\t\tif uintptr(fd) == fdDir.Fd() {\n\t\t\tcontinue\n\t\t}\n\t\t// Run the closure.\n\t\tfn(fd)\n\t}\n\treturn nil\n}\n\n// CloseExecFrom sets the O_CLOEXEC flag on all file descriptors greater or\n// equal to minFd in the current process.\nfunc CloseExecFrom(minFd int) error {\n\t// Use close_range(CLOSE_RANGE_CLOEXEC) if possible.\n\tif haveCloseRangeCloexec() {\n\t\terr := unix.CloseRange(uint(minFd), math.MaxInt32, unix.CLOSE_RANGE_CLOEXEC)\n\t\tif err == nil {\n\t\t\treturn nil\n\t\t}\n\n\t\tlogrus.Debugf(\"close_range failed, closing range one at a time (error: %v)\", err)\n\n\t\t// If close_range fails, we fall back to the standard loop.\n\t}\n\t// Otherwise, fall back to the standard loop.\n\treturn fdRangeFrom(minFd, unix.CloseOnExec)\n}\n\n//go:linkname runtime_IsPollDescriptor internal/poll.IsPollDescriptor\n\n// In order to make sure we do not close the internal epoll descriptors the Go\n// runtime uses, we need to ensure that we skip descriptors that match\n// \"internal/poll\".IsPollDescriptor. Yes, this is a Go runtime internal thing,\n// unfortunately there's no other way to be sure we're only keeping the file\n// descriptors the Go runtime needs. Hopefully nothing blows up doing this...\nfunc runtime_IsPollDescriptor(fd uintptr) bool //nolint:revive\n\n// UnsafeCloseFrom closes all file descriptors greater or equal to minFd in the\n// current process, except for those critical to Go's runtime (such as the\n// netpoll management descriptors).\n//\n// NOTE: That this function is incredibly dangerous to use in most Go code, as\n// closing file descriptors from underneath *os.File handles can lead to very\n// bad behaviour (the closed file descriptor can be reused and then any\n// *os.File operations would apply to the wrong file). This function is only\n// intended to be called from the last stage of runc init.\nfunc UnsafeCloseFrom(minFd int) error {\n\t// We cannot use close_range(2) even if it is available, because we must\n\t// not close some file descriptors.\n\treturn fdRangeFrom(minFd, func(fd int) {\n\t\tif runtime_IsPollDescriptor(uintptr(fd)) {\n\t\t\t// These are the Go runtimes internal netpoll file descriptors.\n\t\t\t// These file descriptors are operated on deep in the Go scheduler,\n\t\t\t// and closing those files from underneath Go can result in panics.\n\t\t\t// There is no issue with keeping them because they are not\n\t\t\t// executable and are not useful to an attacker anyway. Also we\n\t\t\t// don't have any choice.\n\t\t\treturn\n\t\t}\n\t\t// There's nothing we can do about errors from close(2), and the\n\t\t// only likely error to be seen is EBADF which indicates the fd was\n\t\t// already closed (in which case, we got what we wanted).\n\t\t_ = unix.Close(fd)\n\t})\n}\n\n// NewSockPair returns a new SOCK_STREAM unix socket pair.\nfunc NewSockPair(name string) (parent, child *os.File, err error) {\n\tfds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_STREAM|unix.SOCK_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn os.NewFile(uintptr(fds[1]), name+\"-p\"), os.NewFile(uintptr(fds[0]), name+\"-c\"), nil\n}\n\n// WithProcfdFile is a very minimal wrapper around [ProcThreadSelfFd]. The\n// caller is responsible for making sure that the provided file handle is\n// actually safe to operate on.\n//\n// NOTE: THIS FUNCTION IS INTERNAL TO RUNC, DO NOT USE IT.\n//\n// TODO: Migrate the mount logic towards a more move_mount(2)-friendly design\n// where this is kind of /proc/self/... tomfoolery is only done in a fallback\n// path for old kernels.\nfunc WithProcfdFile(file *os.File, fn func(procfd string) error) error {\n\tfdpath, closer := ProcThreadSelfFd(file.Fd())\n\tdefer closer()\n\n\treturn fn(fdpath)\n}\n\ntype ProcThreadSelfCloser func()\n\nvar (\n\thaveProcThreadSelf     bool\n\thaveProcThreadSelfOnce sync.Once\n)\n\n// ProcThreadSelf returns a string that is equivalent to\n// /proc/thread-self/<subpath>, with a graceful fallback on older kernels where\n// /proc/thread-self doesn't exist. This method DOES NOT use SecureJoin,\n// meaning that the passed string needs to be trusted. The caller _must_ call\n// the returned procThreadSelfCloser function (which is runtime.UnlockOSThread)\n// *only once* after it has finished using the returned path string.\nfunc ProcThreadSelf(subpath string) (string, ProcThreadSelfCloser) {\n\thaveProcThreadSelfOnce.Do(func() {\n\t\tif _, err := os.Stat(\"/proc/thread-self/\"); err == nil {\n\t\t\thaveProcThreadSelf = true\n\t\t} else {\n\t\t\tlogrus.Debugf(\"cannot stat /proc/thread-self (%v), falling back to /proc/self/task/<tid>\", err)\n\t\t}\n\t})\n\n\t// We need to lock our thread until the caller is done with the path string\n\t// because any non-atomic operation on the path (such as opening a file,\n\t// then reading it) could be interrupted by the Go runtime where the\n\t// underlying thread is swapped out and the original thread is killed,\n\t// resulting in pull-your-hair-out-hard-to-debug issues in the caller. In\n\t// addition, the pre-3.17 fallback makes everything non-atomic because the\n\t// same thing could happen between unix.Gettid() and the path operations.\n\t//\n\t// In theory, we don't need to lock in the atomic user case when using\n\t// /proc/thread-self/, but it's better to be safe than sorry (and there are\n\t// only one or two truly atomic users of /proc/thread-self/).\n\truntime.LockOSThread()\n\n\tthreadSelf := \"/proc/thread-self/\"\n\tif !haveProcThreadSelf {\n\t\t// Pre-3.17 kernels did not have /proc/thread-self, so do it manually.\n\t\tthreadSelf = \"/proc/self/task/\" + strconv.Itoa(unix.Gettid()) + \"/\"\n\t\tif _, err := os.Stat(threadSelf); err != nil {\n\t\t\t// Unfortunately, this code is called from rootfs_linux.go where we\n\t\t\t// are running inside the pid namespace of the container but /proc\n\t\t\t// is the host's procfs. Unfortunately there is no real way to get\n\t\t\t// the correct tid to use here (the kernel age means we cannot do\n\t\t\t// things like set up a private fsopen(\"proc\") -- even scanning\n\t\t\t// NSpid in all of the tasks in /proc/self/task/*/status requires\n\t\t\t// Linux 4.1).\n\t\t\t//\n\t\t\t// So, we just have to assume that /proc/self is acceptable in this\n\t\t\t// one specific case.\n\t\t\tif os.Getpid() == 1 {\n\t\t\t\tlogrus.Debugf(\"/proc/thread-self (tid=%d) cannot be emulated inside the initial container setup -- using /proc/self instead: %v\", unix.Gettid(), err)\n\t\t\t} else {\n\t\t\t\t// This should never happen, but the fallback should work in most cases...\n\t\t\t\tlogrus.Warnf(\"/proc/thread-self could not be emulated for pid=%d (tid=%d) -- using more buggy /proc/self fallback instead: %v\", os.Getpid(), unix.Gettid(), err)\n\t\t\t}\n\t\t\tthreadSelf = \"/proc/self/\"\n\t\t}\n\t}\n\treturn threadSelf + subpath, runtime.UnlockOSThread\n}\n\n// ProcThreadSelfFd is small wrapper around ProcThreadSelf to make it easier to\n// create a /proc/thread-self handle for given file descriptor.\n//\n// It is basically equivalent to ProcThreadSelf(fmt.Sprintf(\"fd/%d\", fd)), but\n// without using fmt.Sprintf to avoid unneeded overhead.\nfunc ProcThreadSelfFd(fd uintptr) (string, ProcThreadSelfCloser) {\n\treturn ProcThreadSelf(\"fd/\" + strconv.FormatUint(uint64(fd), 10))\n}\n\n// Openat is a Go-friendly openat(2) wrapper.\nfunc Openat(dir *os.File, path string, flags int, mode uint32) (*os.File, error) {\n\tdirFd := unix.AT_FDCWD\n\tif dir != nil {\n\t\tdirFd = int(dir.Fd())\n\t}\n\tflags |= unix.O_CLOEXEC\n\n\tfd, err := linux.Openat(dirFd, path, flags, mode)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn os.NewFile(uintptr(fd), dir.Name()+\"/\"+path), nil\n}\n"
  },
  {
    "path": "list.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/user\"\n\t\"strconv\"\n\t\"syscall\"\n\t\"text/tabwriter\"\n\t\"time\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n\t\"github.com/urfave/cli\"\n)\n\nconst formatOptions = `table or json`\n\n// containerState represents the platform agnostic pieces relating to a\n// running container's status and state\ntype containerState struct {\n\t// Version is the OCI version for the container\n\tVersion string `json:\"ociVersion\"`\n\t// ID is the container ID\n\tID string `json:\"id\"`\n\t// InitProcessPid is the init process id in the parent namespace\n\tInitProcessPid int `json:\"pid\"`\n\t// Status is the current status of the container, running, paused, ...\n\tStatus string `json:\"status\"`\n\t// Bundle is the path on the filesystem to the bundle\n\tBundle string `json:\"bundle\"`\n\t// Rootfs is a path to a directory containing the container's root filesystem.\n\tRootfs string `json:\"rootfs\"`\n\t// Created is the unix timestamp for the creation time of the container in UTC\n\tCreated time.Time `json:\"created\"`\n\t// Annotations is the user defined annotations added to the config.\n\tAnnotations map[string]string `json:\"annotations,omitempty\"`\n\t// The owner of the state directory (the owner of the container).\n\tOwner string `json:\"owner\"`\n}\n\nvar listCommand = cli.Command{\n\tName:  \"list\",\n\tUsage: \"lists containers started by runc with the given root\",\n\tArgsUsage: `\n\nWhere the given root is specified via the global option \"--root\"\n(default: \"/run/runc\").\n\nEXAMPLE 1:\nTo list containers created via the default \"--root\":\n       # runc list\n\nEXAMPLE 2:\nTo list containers created using a non-default value for \"--root\":\n       # runc --root value list`,\n\tFlags: []cli.Flag{\n\t\tcli.StringFlag{\n\t\t\tName:  \"format, f\",\n\t\t\tValue: \"table\",\n\t\t\tUsage: `select one of: ` + formatOptions,\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"quiet, q\",\n\t\t\tUsage: \"display only container IDs\",\n\t\t},\n\t},\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 0, exactArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\ts, err := getContainers(context)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif context.Bool(\"quiet\") {\n\t\t\tfor _, item := range s {\n\t\t\t\tfmt.Println(item.ID)\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\n\t\tswitch context.String(\"format\") {\n\t\tcase \"table\":\n\t\t\tw := tabwriter.NewWriter(os.Stdout, 12, 1, 3, ' ', 0)\n\t\t\tfmt.Fprint(w, \"ID\\tPID\\tSTATUS\\tBUNDLE\\tCREATED\\tOWNER\\n\")\n\t\t\tfor _, item := range s {\n\t\t\t\tfmt.Fprintf(w, \"%s\\t%d\\t%s\\t%s\\t%s\\t%s\\n\",\n\t\t\t\t\titem.ID,\n\t\t\t\t\titem.InitProcessPid,\n\t\t\t\t\titem.Status,\n\t\t\t\t\titem.Bundle,\n\t\t\t\t\titem.Created.Format(time.RFC3339Nano),\n\t\t\t\t\titem.Owner)\n\t\t\t}\n\t\t\tif err := w.Flush(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase \"json\":\n\t\t\tif err := json.NewEncoder(os.Stdout).Encode(s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tdefault:\n\t\t\treturn errors.New(\"invalid format option\")\n\t\t}\n\t\treturn nil\n\t},\n}\n\nfunc getContainers(context *cli.Context) ([]containerState, error) {\n\troot := context.GlobalString(\"root\")\n\tlist, err := os.ReadDir(root)\n\tif err != nil {\n\t\tif errors.Is(err, os.ErrNotExist) && context.IsSet(\"root\") {\n\t\t\t// Ignore non-existing default root directory\n\t\t\t// (no containers created yet).\n\t\t\treturn nil, nil\n\t\t}\n\t\t// Report other errors, including non-existent custom --root.\n\t\treturn nil, err\n\t}\n\tvar s []containerState\n\tfor _, item := range list {\n\t\tif !item.IsDir() {\n\t\t\tcontinue\n\t\t}\n\t\tst, err := item.Info()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t\t// Possible race with runc delete.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\t\t// This cast is safe on Linux.\n\t\tuid := st.Sys().(*syscall.Stat_t).Uid\n\t\towner := \"#\" + strconv.Itoa(int(uid))\n\t\tu, err := user.LookupId(owner[1:])\n\t\tif err == nil {\n\t\t\towner = u.Username\n\t\t}\n\n\t\tcontainer, err := libcontainer.Load(root, item.Name())\n\t\tif err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"load container %s: %v\\n\", item.Name(), err)\n\t\t\tcontinue\n\t\t}\n\t\tcontainerStatus, err := container.Status()\n\t\tif err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"status for %s: %v\\n\", item.Name(), err)\n\t\t\tcontinue\n\t\t}\n\t\tstate, err := container.State()\n\t\tif err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"state for %s: %v\\n\", item.Name(), err)\n\t\t\tcontinue\n\t\t}\n\t\tpid := state.BaseState.InitProcessPid\n\t\tif containerStatus == libcontainer.Stopped {\n\t\t\tpid = 0\n\t\t}\n\t\tbundle, annotations := utils.Annotations(state.Config.Labels)\n\t\ts = append(s, containerState{\n\t\t\tVersion:        state.BaseState.Config.Version,\n\t\t\tID:             state.BaseState.ID,\n\t\t\tInitProcessPid: pid,\n\t\t\tStatus:         containerStatus.String(),\n\t\t\tBundle:         bundle,\n\t\t\tRootfs:         state.BaseState.Config.Rootfs,\n\t\t\tCreated:        state.BaseState.Created,\n\t\t\tAnnotations:    annotations,\n\t\t\tOwner:          owner,\n\t\t})\n\t}\n\treturn s, nil\n}\n"
  },
  {
    "path": "main.go",
    "content": "// runc is a command line client for running applications packaged according to\n// the Open Container Initiative (OCI) format and is a compliant implementation\n// of the Open Container Initiative specification.\npackage main\n\nimport (\n\t_ \"embed\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\n\t//nolint:revive // Enable cgroup manager to manage devices\n\t_ \"github.com/opencontainers/cgroups/devices\"\n\t\"github.com/opencontainers/runc/libcontainer/seccomp\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\n\t\"github.com/sirupsen/logrus\"\n\t\"github.com/urfave/cli\"\n)\n\n// version is set from the contents of VERSION file.\n//\n//go:embed VERSION\nvar version string\n\n// extraVersion is an optional suffix appended to runc version.\n// It can be set via Makefile (\"make EXTRA_VERSION=xxx\") or by\n// adding -X main.extraVersion=xxx option to the go build command.\nvar extraVersion = \"\"\n\n// gitCommit will be the hash that the binary was built from\n// and will be populated by the Makefile.\nvar gitCommit = \"\"\n\nfunc printVersion(c *cli.Context) {\n\tw := c.App.Writer\n\n\tfmt.Fprintln(w, \"runc version\", c.App.Version)\n\tif gitCommit != \"\" {\n\t\tfmt.Fprintln(w, \"commit:\", gitCommit)\n\t}\n\tfmt.Fprintln(w, \"spec:\", specs.Version)\n\tfmt.Fprintln(w, \"go:\", runtime.Version())\n\n\tmajor, minor, micro := seccomp.Version()\n\tif major+minor+micro > 0 {\n\t\tfmt.Fprintf(w, \"libseccomp: %d.%d.%d\\n\", major, minor, micro)\n\t}\n}\n\nconst (\n\tspecConfig = \"config.json\"\n\tusage      = `Open Container Initiative runtime\n\nrunc is a command line client for running applications packaged according to\nthe Open Container Initiative (OCI) format and is a compliant implementation of\nthe Open Container Initiative specification.\n\nrunc integrates well with existing process supervisors to provide a production\ncontainer runtime environment for applications. It can be used with your\nexisting process monitoring tools and the container will be spawned as a\ndirect child of the process supervisor.\n\nContainers are configured using bundles. A bundle for a container is a directory\nthat includes a specification file named \"` + specConfig + `\" and a root filesystem.\nThe root filesystem contains the contents of the container.\n\nTo start a new instance of a container:\n\n    # runc run [ -b bundle ] <container-id>\n\nWhere \"<container-id>\" is your name for the instance of the container that you\nare starting. The name you provide for the container instance must be unique on\nyour host. Providing the bundle directory using \"-b\" is optional. The default\nvalue for \"bundle\" is the current directory.`\n)\n\nfunc main() {\n\tapp := cli.NewApp()\n\tapp.Name = \"runc\"\n\tapp.Version = strings.TrimSpace(version) + extraVersion\n\tapp.Usage = usage\n\n\tcli.VersionPrinter = printVersion\n\n\troot := \"/run/runc\"\n\txdgDirUsed := false\n\txdgRuntimeDir := os.Getenv(\"XDG_RUNTIME_DIR\")\n\tif xdgRuntimeDir != \"\" && shouldHonorXDGRuntimeDir() {\n\t\troot = xdgRuntimeDir + \"/runc\"\n\t\txdgDirUsed = true\n\t}\n\n\tapp.Flags = []cli.Flag{\n\t\tcli.BoolFlag{\n\t\t\tName:  \"debug\",\n\t\t\tUsage: \"enable debug logging\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"log\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"set the log file to write runc logs to (default is '/dev/stderr')\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"log-format\",\n\t\t\tValue: \"text\",\n\t\t\tUsage: \"set the log format ('text' (default), or 'json')\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"root\",\n\t\t\tValue: root,\n\t\t\tUsage: \"root directory for storage of container state (this should be located in tmpfs)\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"systemd-cgroup\",\n\t\t\tUsage: \"enable systemd cgroup support, expects cgroupsPath to be of form \\\"slice:prefix:name\\\" for e.g. \\\"system.slice:runc:434234\\\"\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"rootless\",\n\t\t\tValue: \"auto\",\n\t\t\tUsage: \"ignore cgroup permission errors ('true', 'false', or 'auto')\",\n\t\t},\n\t}\n\tapp.Commands = []cli.Command{\n\t\tcheckpointCommand,\n\t\tcreateCommand,\n\t\tdeleteCommand,\n\t\teventsCommand,\n\t\texecCommand,\n\t\tkillCommand,\n\t\tlistCommand,\n\t\tpauseCommand,\n\t\tpsCommand,\n\t\trestoreCommand,\n\t\tresumeCommand,\n\t\trunCommand,\n\t\tspecCommand,\n\t\tstartCommand,\n\t\tstateCommand,\n\t\tupdateCommand,\n\t\tfeaturesCommand,\n\t}\n\tapp.Before = func(context *cli.Context) error {\n\t\tif !context.IsSet(\"root\") && xdgDirUsed {\n\t\t\t// According to the XDG specification, we need to set anything in\n\t\t\t// XDG_RUNTIME_DIR to have a sticky bit if we don't want it to get\n\t\t\t// auto-pruned.\n\t\t\tif err := os.MkdirAll(root, 0o700); err != nil {\n\t\t\t\tfmt.Fprintln(os.Stderr, \"the path in $XDG_RUNTIME_DIR must be writable by the user\")\n\t\t\t\tfatal(err)\n\t\t\t}\n\t\t\tif err := os.Chmod(root, os.FileMode(0o700)|os.ModeSticky); err != nil {\n\t\t\t\tfmt.Fprintln(os.Stderr, \"you should check permission of the path in $XDG_RUNTIME_DIR\")\n\t\t\t\tfatal(err)\n\t\t\t}\n\t\t}\n\t\tif err := reviseRootDir(context); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn configLogrus(context)\n\t}\n\n\t// If the command returns an error, cli takes upon itself to print\n\t// the error on cli.ErrWriter and exit.\n\t// Use our own writer here to ensure the log gets sent to the right location.\n\tcli.ErrWriter = &FatalWriter{cli.ErrWriter}\n\tif err := app.Run(os.Args); err != nil {\n\t\tfatal(err)\n\t}\n}\n\ntype FatalWriter struct {\n\tcliErrWriter io.Writer\n}\n\nfunc (f *FatalWriter) Write(p []byte) (n int, err error) {\n\tlogrus.Error(string(p))\n\tif !logrusToStderr() {\n\t\treturn f.cliErrWriter.Write(p)\n\t}\n\treturn len(p), nil\n}\n\nfunc configLogrus(context *cli.Context) error {\n\tif context.GlobalBool(\"debug\") {\n\t\tlogrus.SetLevel(logrus.DebugLevel)\n\t\tlogrus.SetReportCaller(true)\n\t\t// Shorten function and file names reported by the logger, by\n\t\t// trimming common \"github.com/opencontainers/runc\" prefix.\n\t\t// This is only done for text formatter.\n\t\t_, file, _, _ := runtime.Caller(0)\n\t\tprefix := filepath.Dir(file) + \"/\"\n\t\tlogrus.SetFormatter(&logrus.TextFormatter{\n\t\t\tCallerPrettyfier: func(f *runtime.Frame) (string, string) {\n\t\t\t\tfunction := strings.TrimPrefix(f.Function, prefix) + \"()\"\n\t\t\t\tfileLine := strings.TrimPrefix(f.File, prefix) + \":\" + strconv.Itoa(f.Line)\n\t\t\t\treturn function, fileLine\n\t\t\t},\n\t\t})\n\t}\n\n\tswitch f := context.GlobalString(\"log-format\"); f {\n\tcase \"\":\n\t\t// do nothing\n\tcase \"text\":\n\t\t// do nothing\n\tcase \"json\":\n\t\tlogrus.SetFormatter(new(logrus.JSONFormatter))\n\tdefault:\n\t\treturn errors.New(\"invalid log-format: \" + f)\n\t}\n\n\tif file := context.GlobalString(\"log\"); file != \"\" {\n\t\tf, err := os.OpenFile(file, os.O_CREATE|os.O_WRONLY|os.O_APPEND|os.O_SYNC, 0o644)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlogrus.SetOutput(f)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "man/README.md",
    "content": "runc man pages\n====================\n\nThis directory contains man pages for runc in markdown format.\n\nTo generate man pages from it, use this command\n\n    ./md2man-all.sh\n\nYou will see man pages generated under the man8 directory.\n\n"
  },
  {
    "path": "man/md2man-all.sh",
    "content": "#!/bin/bash\nset -e\n\n# get into this script's directory\ncd \"$(dirname \"$(readlink -f \"${BASH_SOURCE[0]}\")\")\"\n\n[ \"$1\" = '-q' ] || {\n\tset -x\n\tpwd\n}\n\nif ! type go-md2man; then\n\techo \"To install man pages, please install 'go-md2man'.\"\n\texit 0\nfi\n\nfor FILE in *.md; do\n\tbase=\"$(basename \"$FILE\")\"\n\tname=\"${base%.md}\"\n\tnum=\"${name##*.}\"\n\tif [ -z \"$num\" ] || [ \"$name\" = \"$num\" ]; then\n\t\t# skip files that aren't of the format xxxx.N.md (like README.md)\n\t\tcontinue\n\tfi\n\tmkdir -p \"./man${num}\"\n\tgo-md2man -in \"$FILE\" -out \"./man${num}/${name}\"\ndone\n"
  },
  {
    "path": "man/runc-checkpoint.8.md",
    "content": "% runc-checkpoint \"8\"\n\n# NAME\n**runc-checkpoint** - checkpoint a running container\n\n# SYNOPSIS\n**runc checkpoint** [_option_ ...] _container-id_\n\n# DESCRIPTION\nThe **checkpoint** command saves the state of the running container instance\nwith the help of **criu**(8) tool, to be restored later.\n\n# OPTIONS\n**--image-path** _path_\n: Set path for saving criu image files. The default is *./checkpoint*.\n\n**--work-path** _path_\n: Set path for saving criu work files and logs. The default is to reuse the\nimage files directory.\n\n**--parent-path** _path_\n: Set path for previous criu image files, in pre-dump.\n\n**--leave-running**\n: Leave the process running after checkpointing.\n\n**--tcp-established**\n: Allow checkpoint/restore of established TCP connections. See\n[criu --tcp-establised option](https://criu.org/CLI/opt/--tcp-established).\n\n**--tcp-skip-in-flight**\n: Skip in-flight TCP connections. See\n[criu --skip-in-flight option](https://criu.org/CLI/opt/--skip-in-flight).\n\n**--link-remap**\n: Allow one to link unlinked files back when possible. See\n[criu --link-remap option](https://criu.org/CLI/opt/--link-remap).\n\n**--ext-unix-sk**\n: Allow checkpoint/restore of external unix sockets. See\n[criu --ext-unix-sk option](https://criu.org/CLI/opt/--ext-unix-sk).\n\n**--shell-job**\n: Allow checkpoint/restore of shell jobs.\n\n**--lazy-pages**\n: Use lazy migration mechanism. See\n[criu --lazy-pages option](https://criu.org/CLI/opt/--lazy-pages).\n\n**--status-fd** _fd_\n: Pass a file descriptor _fd_ to **criu**. Once **lazy-pages** server is ready,\n**criu** writes **\\0** (a zero byte) to that _fd_. Used together with\n**--lazy-pages**.\n\n**--page-server** _IP-address_:_port_\n: Start a page server at the specified _IP-address_ and _port_. This is used\ntogether with **criu lazy-pages**. See\n[criu lazy migration](https://criu.org/Lazy_migration).\n\n**--file-locks**\n: Allow checkpoint/restore of file locks. See\n[criu --file-locks option](https://criu.org/CLI/opt/--file-locks).\n\n**--pre-dump**\n: Do a pre-dump, i.e. dump container's memory information only, leaving the\ncontainer running. See [criu iterative migration](https://criu.org/Iterative_migration).\n\n**--manage-cgroups-mode** **soft**|**full**|**strict**|**ignore**.\n: Cgroups mode. Default is **soft**. See\n[criu --manage-cgroups option](https://criu.org/CLI/opt/--manage-cgroups).\n\n**--empty-ns** _namespace_\n: Checkpoint a _namespace_, but don't save its properties. See\n[criu --empty-ns option](https://criu.org/CLI/opt/--empty-ns).\n\n**--auto-dedup**\n: Enable auto deduplication of memory images. See\n[criu --auto-dedup option](https://criu.org/CLI/opt/--auto-dedup).\n\n# SEE ALSO\n**criu**(8),\n**runc-restore**(8),\n**runc**(8),\n**criu**(8).\n"
  },
  {
    "path": "man/runc-create.8.md",
    "content": "% runc-create \"8\"\n\n# NAME\n**runc-create** - create a container\n\n# SYNOPSIS\n**runc create** [_option_ ...] _container-id_\n\n# DESCRIPTION\nThe **create** command creates an instance of a container from a bundle.\nThe bundle is a directory with a specification file named _config.json_,\nand a root filesystem.\n\n# OPTIONS\n\n**--bundle**|**-b** _path_\n: Path to the root of the bundle directory. Default is current directory.\n\n**--console-socket** _path_\n: Path to an **AF_UNIX**  socket which will receive a file descriptor\nreferencing the master end of the console's pseudoterminal.  See\n[docs/terminals](https://github.com/opencontainers/runc/blob/master/docs/terminals.md).\n\n**--pid-file** _path_\n: Specify the file to write the initial container process' PID to.\n\n**--no-pivot**\n: Do not use pivot root to jail process inside rootfs. This should not be used\nexcept in exceptional circumstances, and may be unsafe from the security\nstandpoint.\n\n**--no-new-keyring**\n: Do not create a new session keyring for the container. This will cause the\ncontainer to inherit the calling processes session key.\n\n**--preserve-fds** _N_\n: Pass _N_ additional file descriptors to the container (**stdio** +\n**$LISTEN_FDS** + _N_ in total). Default is **0**.\n\n# SEE ALSO\n\n**runc-spec**(8),\n**runc-start**(8),\n**runc**(8).\n"
  },
  {
    "path": "man/runc-delete.8.md",
    "content": "% runc-delete \"8\"\n\n# NAME\n**runc-delete** - delete any resources held by the container\n\n# SYNOPSIS\n**runc delete** [**--force**|**-f**] _container-id_\n\n# OPTIONS\n**--force**|**-f**\n: Forcibly delete the running container, using **SIGKILL** **signal**(7)\nto stop it first.\n\n# EXAMPLES\nIf the container id is **ubuntu01** and **runc list** currently shows\nits status as **stopped**, the following will delete resources held for\n**ubuntu01**, removing it from the **runc list**:\n\n\t# runc delete ubuntu01\n\n# SEE ALSO\n\n**runc-kill**(8),\n**runc**(8).\n"
  },
  {
    "path": "man/runc-events.8.md",
    "content": "% runc-events \"8\"\n\n# NAME\n**runc-events** - display container events and statistics.\n\n# SYNOPSIS\n**runc events** [_option_ ...] _container-id_\n\n# DESCRIPTION\nThe **events** command displays information about the container. By default,\nit works continuously, displaying stats every 5 seconds, and container events\nas they occur.\n\n# OPTIONS\n**--interval** _time_\n: Set the stats collection interval. Default is **5s**.\n\n**--stats**\n: Show the container's stats once then exit.\n\n# SEE ALSO\n\n**runc**(8).\n"
  },
  {
    "path": "man/runc-exec.8.md",
    "content": "% runc-exec \"8\"\n\n# NAME\n**runc-exec** - execute new process inside the container\n\n# SYNOPSIS\n**runc exec** [_option_ ...] _container-id_ [--] _command_ [_arg_ ...]\n\n**runc exec** [_option_ ...] **-p** _process.json_ _container-id_\n\n# OPTIONS\n**--console-socket** _path_\n: Path to an **AF_UNIX**  socket which will receive a file descriptor\nreferencing the master end of the console's pseudoterminal.  See\n[docs/terminals](https://github.com/opencontainers/runc/blob/master/docs/terminals.md).\n\n**--cwd** _path_\n: Change to _path_ in the container before executing the command.\n\n**--env**|**-e** _name_=_value_\n: Set an environment variable _name_ to _value_. Can be specified multiple times.\n\n**--tty**|**-t**\n: Allocate a pseudo-TTY.\n\n**--user**|**-u** _uid_[:_gid_]\n: Run the _command_ as a user (and, optionally, group) specified by _uid_ (and\n_gid_).\n\n**--additional-gids**|**-g** _gid_\n: Add additional group IDs. Can be specified multiple times.\n\n**--process**|**-p** _process.json_\n: Instead of specifying all the exec parameters directly on the command line,\nget them from a _process.json_, a JSON file containing the process\nspecification as defined by the\n[OCI runtime spec](https://github.com/opencontainers/runtime-spec/blob/master/config.md#process).\n\n**--detach**|**-d**\n: Detach from the container's process.\n\n**--pid-file** _path_\n: Specify the file to write the container process' PID to.\n\n**--process-label** _label_\n: Set the asm process label for the process commonly used with **selinux**(7).\n\n**--apparmor** _profile_\n: Set the **apparmor**(7) _profile_ for the process.\n\n**--no-new-privs**\n: Set the \"no new privileges\" value for the process.\n\n**--cap** _cap_\n: Add a capability to the bounding set for the process. Can be specified\nmultiple times.\n\n**--preserve-fds** _N_\n: Pass _N_ additional file descriptors to the container (**stdio** +\n**$LISTEN_FDS** + _N_ in total). Default is **0**.\n\n**--ignore-paused**\n: Allow exec in a paused container. By default, if a container is paused,\n**runc exec** errors out; this option can be used to override it.\nA paused container needs to be resumed for the exec to complete.\n\n**--cgroup** _path_ | _controller_[,_controller_...]:_path_\n: Execute a process in a sub-cgroup. If the specified cgroup does not exist, an\nerror is returned. Default is empty path, which means to use container's top\nlevel cgroup.\n: For cgroup v1 only, a particular _controller_ (or multiple comma-separated\ncontrollers) can be specified, and the option can be used multiple times to set\ndifferent paths for different controllers.\n: Note for cgroup v2, in case the process can't join the top level cgroup,\n**runc exec** fallback is to try joining the cgroup of container's init.\nThis fallback can be disabled by using **--cgroup /**.\n\n# EXIT STATUS\n\nExits with a status of _command_ (unless **-d** is used), or **255** if\nan error occurred.\n\n# EXAMPLES\nIf the container can run **ps**(1) command, the following\nwill output a list of processes running in the container:\n\n\t# runc exec <container-id> ps\n\n# SEE ALSO\n\n**runc**(8).\n"
  },
  {
    "path": "man/runc-kill.8.md",
    "content": "% runc-kill \"8\"\n\n# NAME\n**runc-kill** - send a specified signal to container\n\n# SYNOPSIS\n**runc kill** _container-id_ [_signal_]\n\n# DESCRIPTION\n\nBy default, **runc kill** sends **SIGTERM** to the container's initial process\nonly.\n\nA different signal can be specified either by its name (with or without the\n**SIG** prefix), or its numeric value. Use **kill**(1) with **-l** option\nto list available signals.\n\n# EXAMPLES\n\nThe following will send a **KILL** signal to the init process of the\n**ubuntu01** container:\n\n\t# runc kill ubuntu01 KILL\n\n# SEE ALSO\n\n**runc**(1).\n"
  },
  {
    "path": "man/runc-list.8.md",
    "content": "% runc-list \"8\"\n\n# NAME\n**runc-list** - lists containers\n\n# SYNOPSIS\n**runc list** [_option_ ...]\n\n# DESCRIPTION\n\nThe **list** commands lists containers. Note that a global **--root**\noption can be specified to change the default root. For the description\nof **--root**, see **runc**(8).\n\n# OPTIONS\n**--format**|**-f** **table**|**json**\n: Specify the format. Default is **table**. The **json** format provides\nmore details.\n\n**--quiet**|**-q**\n: Only display container IDs.\n\n# EXAMPLES\nTo list containers created with the default root:\n\n\t# runc list\n\nTo list containers in a human-readable JSON (with the help of **jq**(1)\nutility):\n\n\t# runc list -f json | jq\n\nTo list containers created with the root of **/tmp/myroot**:\n\n\t# runc --root /tmp/myroot\n\n# SEE ALSO\n\n**runc**(8).\n"
  },
  {
    "path": "man/runc-pause.8.md",
    "content": "% runc-pause \"8\"\n\n# NAME\n**runc-pause** - suspend all processes inside the container\n\n# SYNOPSIS\n**runc pause** _container-id_\n\n# DESCRIPTION\nThe **pause** command suspends all processes in the instance of the container\nidentified by _container-id_.\n\nUse **runc list** to identify instances of containers and their current status.\n\n# SEE ALSO\n**runc-list**(8),\n**runc-resume**(8),\n**runc**(8).\n"
  },
  {
    "path": "man/runc-ps.8.md",
    "content": "% runc-ps \"8\"\n\n# NAME\n**runc-ps** - display the processes inside a container\n\n# SYNOPSIS\n**runc ps** [_option_ ...] _container-id_ [_ps-option_ ...]\n\n# DESCRIPTION\nThe command **ps** is a wrapper around the stock **ps**(1) utility,\nwhich filters its output to only contain processes belonging to a specified\n_container-id_. Therefore, the PIDs shown are the host PIDs.\n\nAny **ps**(1) options can be used, but some might break the filtering.\nIn particular, if PID column is not available, an error is returned,\nand if there are columns with values containing spaces before the PID\ncolumn, the result is undefined.\n\n# OPTIONS\n**--format**|**-f** **table**|**json**\n: Output format. Default is **table**. The **json** format shows a mere array\nof PIDs belonging to a container; if used, all **ps** options are gnored.\n\n# SEE ALSO\n**runc-list**(8),\n**runc**(8).\n"
  },
  {
    "path": "man/runc-restore.8.md",
    "content": "% runc-restore \"8\"\n\n# NAME\n**runc-restore** - restore a container from a previous checkpoint\n\n# SYNOPSIS\n**runc restore** [_option_ ...] _container-id_\n\n# DESCRIPTION\nRestores the container instance from a previously performed **runc checkpoint**.\n\n# OPTIONS\n**--console-socket** _path_\n: Path to an **AF_UNIX**  socket which will receive a file descriptor\nreferencing the master end of the console's pseudoterminal.  See\n[docs/terminals](https://github.com/opencontainers/runc/blob/master/docs/terminals.md).\n\n**--image-path** _path_\n: Set path to get criu image files to restore from.\n\n**--work-path** _path_\n: Set path for saving criu work files and logs. The default is to reuse the\nimage files directory.\n\n**--tcp-established**\n: Allow checkpoint/restore of established TCP connections. See\n[criu --tcp-establised option](https://criu.org/CLI/opt/--tcp-established).\n\n**--ext-unix-sk**\n: Allow checkpoint/restore of external unix sockets. See\n[criu --ext-unix-sk option](https://criu.org/CLI/opt/--ext-unix-sk).\n\n**--shell-job**\n: Allow checkpoint/restore of shell jobs.\n\n**--file-locks**\n: Allow checkpoint/restore of file locks. See\n[criu --file-locks option](https://criu.org/CLI/opt/--file-locks).\n\n**--manage-cgroups-mode** **soft**|**full**|**strict**|**ignore**.\n: Cgroups mode. Default is **soft**. See\n[criu --manage-cgroups option](https://criu.org/CLI/opt/--manage-cgroups).\n\n: In particular, to restore the container into a different cgroup,\n**--manage-cgroups-mode ignore** must be used during both\n**checkpoint** and **restore**, and the _container_id_ (or\n**cgroupsPath** property in OCI config, if set) must be changed.\n\n**--bundle**|**-b** _path_\n: Path to the root of the bundle directory. Default is current directory.\n\n**--detach**|**-d**\n: Detach from the container's process.\n\n**--pid-file** _path_\n: Specify the file to write the initial container process' PID to.\n\n**--no-subreaper**\n: Disable the use of the subreaper used to reap reparented processes.\n\n**--no-pivot**\n: Do not use pivot root to jail process inside rootfs. This should not be used\nexcept in exceptional circumstances, and may be unsafe from the security\nstandpoint.\n\n**--empty-ns** _namespace_\n: Create a _namespace_, but don't restore its properties. See\n[criu --empty-ns option](https://criu.org/CLI/opt/--empty-ns).\n\n**--auto-dedup**\n: Enable auto deduplication of memory images. See\n[criu --auto-dedup option](https://criu.org/CLI/opt/--auto-dedup).\n\n**--lazy-pages**\n: Use lazy migration mechanism. This requires a running **criu lazy-pages**\ndaemon. See [criu --lazy-pages option](https://criu.org/CLI/opt/--lazy-pages).\n\n**--lsm-profile** _type_:_label_\n: Specify an LSM profile to be used during restore. Here _type_ can either be\n**apparamor** or **selinux**, and _label_ is a valid LSM label. For example,\n**--lsm-profile \"selinux:system_u:system_r:container_t:s0:c82,c137\"**.\nBy default, the checkpointed LSM profile is used upon restore.\n\n**--lsm-mount-context** _context_\n: Specify an LSM mount context to be used during restore. Only mounts with an\nexisting context will have their context replaced. With this option it is\npossible to change SELinux mount options. Instead of mounting with the\ncheckpointed context, the specified _context_ will be used.\nFor example, **--lsm-mount-context \"system_u:object_r:container_file_t:s0:c82,c137\"**.\n\n# SEE ALSO\n**criu**(8),\n**runc-checkpoint**(8),\n**runc**(8).\n"
  },
  {
    "path": "man/runc-resume.8.md",
    "content": "% runc-resume \"8\"\n\n# NAME\n**runc-resume** - resume all processes that have been previously paused\n\n# SYNOPSIS\n**runc resume** _container-id_\n\n# DESCRIPTION\nThe **resume** command resumes all processes in the instance of the container\nidentified by _container-id_.\n\nUse **runc list** to identify instances of containers and their current status.\n\n# SEE ALSO\n**runc-list**(8),\n**runc-pause**(8),\n**runc**(8).\n"
  },
  {
    "path": "man/runc-run.8.md",
    "content": "% runc-run \"8\"\n\n# NAME\n**runc-run** - create and start a container\n\n# SYNOPSIS\n**runc run** [_option_ ...] _container-id_\n\n# DESCRIPTION\nThe **run** command creates an instance of a container from a bundle, and\nstarts it.  You can think of **run** as a shortcut for **create** followed by\n**start**.\n\n# OPTIONS\n**--bundle**|**-b** _path_\n: Path to the root of the bundle directory. Default is current directory.\n\n**--console-socket** _path_\n: Path to an **AF_UNIX**  socket which will receive a file descriptor\nreferencing the master end of the console's pseudoterminal.  See\n[docs/terminals](https://github.com/opencontainers/runc/blob/master/docs/terminals.md).\n\n**--detach**|**-d**\n: Detach from the container's process.\n\n**--pid-file** _path_\n: Specify the file to write the initial container process' PID to.\n\n**--no-subreaper**\n: Disable the use of the subreaper used to reap reparented processes.\n\n**--no-pivot**\n: Do not use pivot root to jail process inside rootfs. This should not be used\nexcept in exceptional circumstances, and may be unsafe from the security\nstandpoint.\n\n**--no-new-keyring**\n: Do not create a new session keyring for the container. This will cause the\ncontainer to inherit the calling processes session key.\n\n**--preserve-fds** _N_\n: Pass _N_ additional file descriptors to the container (**stdio** +\n**$LISTEN_FDS** + _N_ in total). Default is **0**.\n\n**--keep**\n: Keep container's state directory and cgroup. This can be helpful if a user\nwants to check the state (e.g. of cgroup controllers) after the container has\nexited. If this option is used, a manual **runc delete** is needed afterwards\nto clean an exited container's artefacts.\n\n# SEE ALSO\n\n**runc**(8).\n"
  },
  {
    "path": "man/runc-spec.8.md",
    "content": "% runc-spec \"8\"\n\n# NAME\n**runc-spec** - create a new specification file\n\n# SYNOPSIS\n**runc spec** [_option_ ...]\n\n# DESCRIPTION\nThe **spec** command creates the new specification file named _config.json_ for\nthe bundle.\n\nThe spec generated is just a starter file. Editing of the spec is required to\nachieve desired results. For example, the newly generated spec includes an\n**args** parameter that is initially set to call the **sh** command when the\ncontainer is started. Calling **sh** may work for an ubuntu container or busybox,\nbut will not work for containers that do not include the **sh** binary.\n\n# OPTIONS\n**--bundle**|**-b** _path_\n: Set _path_ to the root of the bundle directory.\n\n**--rootless**\n: Generate a configuration for a rootless container. Note this option\nis entirely different from the global **--rootless** option.\n\n# EXAMPLES\nTo run a simple \"hello-world\" container, one needs to set the **args**\nparameter in the spec to call hello. This can be done using **sed**(1),\n**jq**(1), or a text editor.\n\nThe following commands will:\n - create a bundle for hello-world;\n - change the command to run in a container to **/hello** using **jq**(1);\n - run the **hello** command in a new hello-world container named **container1**.\n\n\tmkdir hello\n\tcd hello\n\tdocker pull hello-world\n\tdocker export $(docker create hello-world) > hello-world.tar\n\tmkdir rootfs\n\ttar -C rootfs -xf hello-world.tar\n\trunc spec\n\tjq '.process.args |= [\"/hello\"]' < config.json > new.json\n\tmv -f new.json config.json\n\trunc run container1\n\nIn the **run** command above, **container1** is the name for the instance of the\ncontainer that you are starting. The name you provide for the container instance\nmust be unique on your host.\n\nAn alternative for generating a customized spec config is to use\n**oci-runtime-tool**; its sub-command **oci-runtime-tool generate** has lots of\noptions that can be used to do any customizations as you want. See\n[runtime-tools](https://github.com/opencontainers/runtime-tools) to get more\ninformation.\n\nWhen starting a container through **runc**, the latter usually needs root\nprivileges. If not already running as root, you can use **sudo**(8), for\nexample:\n\n\tsudo runc start container1\n\nAlternatively, you can start a rootless container, which has the ability to run\nwithout root privileges.  For this to work, the specification file needs to be\nadjusted accordingly.  You can pass the **--rootless** option to this command\nto generate a proper rootless spec file.\n\n# SEE ALSO\n**runc-run**(8),\n**runc**(8).\n"
  },
  {
    "path": "man/runc-start.8.md",
    "content": "% runc-start \"8\"\n\n# NAME\n**runc start** - start a previously created container\n\n# SYNOPSIS\n**runc start** _container-id_\n\n# DESCRIPTION\nThe **start** command executes the process defined in _config.json_ in a\ncontainer previously created by **runc-create**(8).\n\n# SEE ALSO\n**runc-create**(8),\n**runc**(8).\n"
  },
  {
    "path": "man/runc-state.8.md",
    "content": "% runc-state \"8\"\n\n# NAME\n**runc-state** - show the state of a container\n\n# SYNOPSIS\n**runc state** _container-id_\n\n# DESCRIPTION\nThe **state** command outputs current state information for the specified\n_container-id_ in a JSON format.\n\n# SEE ALSO\n\n**runc**(8).\n"
  },
  {
    "path": "man/runc-update.8.md",
    "content": "% runc-update \"8\"\n\n# NAME\n**runc-update** - update running container resource constraints\n\n# SYNOPSIS\n**runc update** [_option_ ...] _container-id_\n\n**runc update** **-r** _resources.json_|**-**  _container-id_\n\n# DESCRIPTION\nThe **update** command change the resource constraints of a running container\ninstance.\n\nThe resources can be set using options, or, if **-r** is used, parsed from JSON\nprovided as a file or from stdin.\n\nIn case **-r** is used, the JSON format is like this:\n\n\t{\n\t\t\"memory\": {\n\t\t\t\"limit\": 0,\n\t\t\t\t\"reservation\": 0,\n\t\t\t\t\"swap\": 0,\n\t\t\t\t\"kernel\": 0,\n\t\t\t\t\"kernelTCP\": 0\n\t\t},\n\t\t\t\"cpu\": {\n\t\t\t\t\"shares\": 0,\n\t\t\t\t\"quota\": 0,\n\t\t\t\t\"burst\": 0,\n\t\t\t\t\"period\": 0,\n\t\t\t\t\"realtimeRuntime\": 0,\n\t\t\t\t\"realtimePeriod\": 0,\n\t\t\t\t\"cpus\": \"\",\n\t\t\t\t\"mems\": \"\"\n\t\t\t},\n\t\t\t\"blockIO\": {\n\t\t\t\t\"blkioWeight\": 0\n\t\t\t}\n\t}\n\n# OPTIONS\n**--resources**|**-r** _resources.json_\n: Read the new resource limits from _resources.json_. Use **-** to read from\nstdin. If this option is used, all other options are ignored.\n\n**--blkio-weight** _weight_\n: Set a new io weight.\n\n**--cpu-period** _num_\n: Set CPU CFS period to be used for hardcapping (in microseconds)\n\n**--cpu-quota** _num_\n: Set CPU usage limit within a given period (in microseconds).\n\n**--cpu-burst** _num_\n: Set CPU burst limit within a given period (in microseconds).\n\n**--cpu-rt-period** _num_\n: Set CPU realtime period to be used for hardcapping (in microseconds).\n\n**--cpu-rt-runtime** _num_\n: Set CPU realtime hardcap limit (in usecs). Allowed cpu time in a given period.\n\n**--cpu-share** _num_\n: Set CPU shares (relative weight vs. other containers).\n\n**--cpuset-cpus** _list_\n: Set CPU(s) to use. The _list_ can contain commas and ranges. For example:\n**0-3,7**.\n\n**--cpuset-mems** _list_\n: Set memory node(s) to use. The _list_ format is the same as for\n**--cpuset-cpus**.\n\n**--memory** _num_\n: Set memory limit to _num_ bytes.\n\n**--memory-reservation** _num_\n: Set memory reservation, or soft limit, to _num_ bytes.\n\n**--memory-swap** _num_\n: Set total memory + swap usage to _num_ bytes. Use **-1** to unset the limit\n(i.e. use unlimited swap).\n\n**--pids-limit** _num_\n: Set the maximum number of processes allowed in the container. Use **-1** to\nunset the limit.\n\n**--l3-cache-schema** _value_\n: Set the value for Intel RDT/CAT L3 cache schema.\n\n**--mem-bw-schema** _value_\n: Set the Intel RDT/MBA memory bandwidth schema.\n\n# SEE ALSO\n\n**runc**(8).\n"
  },
  {
    "path": "man/runc.8.md",
    "content": "% runc \"8\"\n\n# NAME\n**runc** - Open Container Initiative runtime\n\n# SYNOPSIS\n\n**runc** [_global-option_ ...] _command_ [_command-option_ ...] [_argument_ ...]\n\n# DESCRIPTION\nrunc is a command line client for running applications packaged according to\nthe Open Container Initiative (OCI) format and is a compliant implementation of the\nOpen Container Initiative specification.\n\nrunc integrates well with existing process supervisors to provide a production\ncontainer runtime environment for applications. It can be used with your\nexisting process monitoring tools and the container will be spawned as a\ndirect child of the process supervisor.\n\nContainers are configured using bundles. A bundle for a container is a directory\nthat includes a specification file named _config.json_ and a root filesystem.\nThe root filesystem contains the contents of the container.\n\nTo run a new instance of a container:\n\n\t# runc run [ -b bundle ] container-id\n\nWhere _container-id_ is your name for the instance of the container that you\nare starting. The name you provide for the container instance must be unique on\nyour host.\n\nProviding the bundle directory using **-b** is optional. The default\nvalue for _bundle_ is the current directory.\n\n# COMMANDS\n**checkpoint**\n: Checkpoint a running container. See **runc-checkpoint**(8).\n\n**create**\n: Create a container. See **runc-create**(8).\n\n**delete**\n: Delete any resources held by the container; often used with detached\ncontainers. See **runc-delete**(8).\n\n**events**\n: Display container events, such as OOM notifications, CPU, memory, I/O and\nnetwork statistics. See **runc-events**(8).\n\n**exec**\n: Execute a new process inside the container. See **runc-exec**(8).\n\n**kill**\n: Send a specified signal to the container's init process. See\n**runc-kill**(8).\n\n**list**\n: List containers started by runc with the given **--root**. See\n**runc-list**(8).\n\n**pause**\n: Suspend all processes inside the container. See **runc-pause**(8).\n\n**ps**\n: Show processes running inside the container. See **runc-ps**(8).\n\n**restore**\n: Restore a container from a previous checkpoint. See **runc-restore**(8).\n\n**resume**\n: Resume all processes that have been previously paused. See **runc-resume**(8).\n\n**run**\n: Create and start a container. See **runc-run**(8).\n\n**spec**\n: Create a new specification file (_config.json_). See **runc-spec**(8).\n\n**start**\n: Start a container previously created by **runc create**. See **runc-start**(8).\n\n**state**\n: Show the container state. See **runc-state**(8).\n\n**update**\n: Update container resource constraints. See **runc-update**(8).\n\n**help**, **h**\n: Show a list of commands or help for a particular command.\n\n# GLOBAL OPTIONS\n\nThese options can be used with any command, and must precede the **command**.\n\n**--debug**\n: Enable debug logging.\n\n**--log** _path_\n: Set the log destination to _path_. The default is to log to stderr.\n\n**--log-format** **text**|**json**\n: Set the log format (default is **text**).\n\n**--root** _path_\n: Set the root directory to store containers' state. The _path_ should be\nlocated on tmpfs. Default is */run/runc*, or *$XDG_RUNTIME_DIR/runc* for\nrootless containers.\n\n**--systemd-cgroup**\n: Enable systemd cgroup support. If this is set, the container spec\n(_config.json_) is expected to have **cgroupsPath** value in the\n*slice:prefix:name* form (e.g. **system.slice:runc:434234**).\n\n**--rootless** **true**|**false**|**auto**\n: Enable or disable rootless mode. Default is **auto**, meaning to auto-detect\nwhether rootless should be enabled.\n\n**--help**|**-h**\n: Show help.\n\n**--version**|**-v**\n: Show version.\n\n# SEE ALSO\n\n**runc-checkpoint**(8),\n**runc-create**(8),\n**runc-delete**(8),\n**runc-events**(8),\n**runc-exec**(8),\n**runc-kill**(8),\n**runc-list**(8),\n**runc-pause**(8),\n**runc-ps**(8),\n**runc-restore**(8),\n**runc-resume**(8),\n**runc-run**(8),\n**runc-spec**(8),\n**runc-start**(8),\n**runc-state**(8),\n**runc-update**(8).\n"
  },
  {
    "path": "notify_socket.go",
    "content": "package main\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n\t\"net\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/opencontainers/runc/internal/linux\"\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\t\"github.com/sirupsen/logrus\"\n\t\"github.com/urfave/cli\"\n\t\"golang.org/x/sys/unix\"\n)\n\ntype notifySocket struct {\n\tsocket     *net.UnixConn\n\thost       string\n\tsocketPath string\n}\n\nfunc newNotifySocket(context *cli.Context, notifySocketHost, id string) *notifySocket {\n\tif notifySocketHost == \"\" {\n\t\treturn nil\n\t}\n\n\troot := filepath.Join(context.GlobalString(\"root\"), id)\n\tsocketPath := filepath.Join(root, \"notify\", \"notify.sock\")\n\n\tnotifySocket := &notifySocket{\n\t\tsocket:     nil,\n\t\thost:       notifySocketHost,\n\t\tsocketPath: socketPath,\n\t}\n\n\treturn notifySocket\n}\n\nfunc (s *notifySocket) Close() error {\n\treturn s.socket.Close()\n}\n\n// If systemd is supporting sd_notify protocol, this function will add support\n// for sd_notify protocol from within the container.\nfunc (s *notifySocket) setupSpec(spec *specs.Spec) {\n\tpathInContainer := filepath.Join(\"/run/notify\", path.Base(s.socketPath))\n\tmount := specs.Mount{\n\t\tDestination: path.Dir(pathInContainer),\n\t\tSource:      path.Dir(s.socketPath),\n\t\tOptions:     []string{\"bind\", \"nosuid\", \"noexec\", \"nodev\", \"ro\"},\n\t}\n\tspec.Mounts = append(spec.Mounts, mount)\n\tspec.Process.Env = append(spec.Process.Env, \"NOTIFY_SOCKET=\"+pathInContainer)\n}\n\nfunc (s *notifySocket) bindSocket() error {\n\taddr := net.UnixAddr{\n\t\tName: s.socketPath,\n\t\tNet:  \"unixgram\",\n\t}\n\n\tsocket, err := net.ListenUnixgram(\"unixgram\", &addr)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = os.Chmod(s.socketPath, 0o777)\n\tif err != nil {\n\t\tsocket.Close()\n\t\treturn err\n\t}\n\n\ts.socket = socket\n\treturn nil\n}\n\nfunc (s *notifySocket) setupSocketDirectory() error {\n\treturn os.Mkdir(path.Dir(s.socketPath), 0o755)\n}\n\nfunc notifySocketStart(context *cli.Context, notifySocketHost, id string) (*notifySocket, error) {\n\tnotifySocket := newNotifySocket(context, notifySocketHost, id)\n\tif notifySocket == nil {\n\t\treturn nil, nil\n\t}\n\n\tif err := notifySocket.bindSocket(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn notifySocket, nil\n}\n\nfunc (s *notifySocket) waitForContainer(container *libcontainer.Container) error {\n\tstate, err := container.State()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn s.run(state.InitProcessPid)\n}\n\nfunc (s *notifySocket) run(pid1 int) error {\n\tif s.socket == nil {\n\t\treturn nil\n\t}\n\tnotifySocketHostAddr := net.UnixAddr{Name: s.host, Net: \"unixgram\"}\n\tclient, err := net.DialUnix(\"unixgram\", nil, &notifySocketHostAddr)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tticker := time.NewTicker(time.Millisecond * 100)\n\tdefer ticker.Stop()\n\n\tfileChan := make(chan []byte)\n\tgo func() {\n\t\tfor {\n\t\t\tbuf := make([]byte, 4096)\n\t\t\tr, err := s.socket.Read(buf)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tgot := buf[0:r]\n\t\t\t// systemd-ready sends a single datagram with the state string as payload,\n\t\t\t// so we don't need to worry about partial messages.\n\t\t\tfor line := range bytes.SplitSeq(got, []byte{'\\n'}) {\n\t\t\t\tif bytes.HasPrefix(got, []byte(\"READY=\")) {\n\t\t\t\t\tfileChan <- line\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}()\n\n\tfor {\n\t\tselect {\n\t\tcase <-ticker.C:\n\t\t\t_, err := os.Stat(filepath.Join(\"/proc\", strconv.Itoa(pid1)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase b := <-fileChan:\n\t\t\treturn notifyHost(client, b, pid1)\n\t\t}\n\t}\n}\n\n// notifyHost tells the host (usually systemd) that the container reported READY.\n// Also sends MAINPID and BARRIER.\nfunc notifyHost(client *net.UnixConn, ready []byte, pid1 int) error {\n\t_, err := client.Write(append(ready, '\\n'))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// now we can inform systemd to use pid1 as the pid to monitor\n\tnewPid := \"MAINPID=\" + strconv.Itoa(pid1)\n\t_, err = client.Write([]byte(newPid + \"\\n\"))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// wait for systemd to acknowledge the communication\n\treturn sdNotifyBarrier(client)\n}\n\n// errUnexpectedRead is reported when actual data was read from the pipe used\n// to synchronize with systemd. Usually, that pipe is only closed.\nvar errUnexpectedRead = errors.New(\"unexpected read from synchronization pipe\")\n\n// sdNotifyBarrier performs synchronization with systemd by means of the sd_notify_barrier protocol.\nfunc sdNotifyBarrier(client *net.UnixConn) (retErr error) {\n\t// Create a pipe for communicating with systemd daemon.\n\tpipeR, pipeW, err := os.Pipe()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif retErr != nil {\n\t\t\tpipeW.Close()\n\t\t\tpipeR.Close()\n\t\t}\n\t}()\n\n\t// Get the FD for the unix socket file to be able to use sendmsg.\n\tclientFd, err := client.File()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Send the write end of the pipe along with a BARRIER=1 message.\n\tfdRights := unix.UnixRights(int(pipeW.Fd()))\n\terr = linux.Sendmsg(int(clientFd.Fd()), []byte(\"BARRIER=1\"), fdRights, nil, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Close our copy of pipeW.\n\terr = pipeW.Close()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Expect the read end of the pipe to be closed after 30 seconds.\n\terr = pipeR.SetReadDeadline(time.Now().Add(30 * time.Second))\n\tif err != nil {\n\t\treturn nil\n\t}\n\n\t// Read a single byte expecting EOF.\n\tvar buf [1]byte\n\tn, err := pipeR.Read(buf[:])\n\tif n != 0 || err == nil {\n\t\treturn errUnexpectedRead\n\t} else if errors.Is(err, os.ErrDeadlineExceeded) {\n\t\t// Probably the other end doesn't support the sd_notify_barrier protocol.\n\t\tlogrus.Warn(\"Timeout after waiting 30s for barrier. Ignored.\")\n\t\treturn nil\n\t} else if err == io.EOF { //nolint:errorlint // https://github.com/polyfloyd/go-errorlint/issues/49\n\t\treturn nil\n\t} else {\n\t\treturn err\n\t}\n}\n"
  },
  {
    "path": "notify_socket_test.go",
    "content": "package main\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"net\"\n\t\"testing\"\n\t\"time\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// TestNotifyHost tests how runc reports container readiness to the host (usually systemd).\nfunc TestNotifyHost(t *testing.T) {\n\taddr := net.UnixAddr{\n\t\tName: t.TempDir() + \"/testsocket\",\n\t\tNet:  \"unixgram\",\n\t}\n\n\tserver, err := net.ListenUnixgram(\"unixgram\", &addr)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer server.Close()\n\n\tclient, err := net.DialUnix(\"unixgram\", nil, &addr)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer client.Close()\n\n\t// run notifyHost in a separate goroutine\n\tnotifyHostChan := make(chan error)\n\tgo func() {\n\t\tnotifyHostChan <- notifyHost(client, []byte(\"READY=42\"), 1337)\n\t}()\n\n\t// mock a host process listening for runc's notifications\n\texpectRead(t, server, \"READY=42\\n\")\n\texpectRead(t, server, \"MAINPID=1337\\n\")\n\texpectBarrier(t, server, notifyHostChan)\n}\n\nfunc expectRead(t *testing.T, r io.Reader, expected string) {\n\tvar buf [1024]byte\n\tn, err := r.Read(buf[:])\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif !bytes.Equal(buf[:n], []byte(expected)) {\n\t\tt.Fatalf(\"Expected to read '%s' but runc sent '%s' instead\", expected, buf[:n])\n\t}\n}\n\nfunc expectBarrier(t *testing.T, conn *net.UnixConn, notifyHostChan <-chan error) {\n\tvar msg, oob [1024]byte\n\tn, oobn, _, _, err := conn.ReadMsgUnix(msg[:], oob[:])\n\tif err != nil {\n\t\tt.Fatal(\"Failed to receive BARRIER message\", err)\n\t}\n\tif !bytes.Equal(msg[:n], []byte(\"BARRIER=1\")) {\n\t\tt.Fatalf(\"Expected to receive 'BARRIER=1' but got '%s' instead.\", msg[:n])\n\t}\n\n\tfd := mustExtractFd(t, oob[:oobn])\n\n\t// Test whether notifyHost actually honors the barrier\n\ttimer := time.NewTimer(500 * time.Millisecond)\n\tselect {\n\tcase <-timer.C:\n\t\t// this is the expected case\n\t\tbreak\n\tcase <-notifyHostChan:\n\t\tt.Fatal(\"runc has terminated before barrier was lifted\")\n\t}\n\n\t// Lift the barrier\n\terr = unix.Close(fd)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\t// Expect notifyHost to terminate now\n\terr = <-notifyHostChan\n\tif err != nil {\n\t\tt.Fatal(\"notifyHost function returned with error\", err)\n\t}\n}\n\nfunc mustExtractFd(t *testing.T, buf []byte) int {\n\tcmsgs, err := unix.ParseSocketControlMessage(buf)\n\tif err != nil {\n\t\tt.Fatal(\"Failed to parse control message\", err)\n\t}\n\n\tfd := 0\n\tseenScmRights := false\n\tfor _, cmsg := range cmsgs {\n\t\tif cmsg.Header.Type != unix.SCM_RIGHTS {\n\t\t\tcontinue\n\t\t}\n\t\tif seenScmRights {\n\t\t\tt.Fatal(\"Expected to see exactly one SCM_RIGHTS message, but got a second one\")\n\t\t}\n\t\tseenScmRights = true\n\t\tfds, err := unix.ParseUnixRights(&cmsg)\n\t\tif err != nil {\n\t\t\tt.Fatal(\"Failed to parse SCM_RIGHTS message\", err)\n\t\t}\n\t\tif len(fds) != 1 {\n\t\t\tt.Fatal(\"Expected to read exactly one file descriptor, but got\", len(fds))\n\t\t}\n\t\tfd = fds[0]\n\t}\n\tif !seenScmRights {\n\t\tt.Fatal(\"Control messages didn't contain an SCM_RIGHTS message\")\n\t}\n\n\treturn fd\n}\n"
  },
  {
    "path": "pause.go",
    "content": "package main\n\nimport (\n\t\"github.com/urfave/cli\"\n)\n\nvar pauseCommand = cli.Command{\n\tName:  \"pause\",\n\tUsage: \"pause suspends all processes inside the container\",\n\tArgsUsage: `<container-id>\n\nWhere \"<container-id>\" is the name for the instance of the container to be\npaused. `,\n\tDescription: `The pause command suspends all processes in the instance of the container.\n\nUse runc list to identify instances of containers and their current status.`,\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 1, exactArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcontainer, err := getContainer(context)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = container.Pause()\n\t\tif err != nil {\n\t\t\tmaybeLogCgroupWarning(\"pause\", err)\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t},\n}\n\nvar resumeCommand = cli.Command{\n\tName:  \"resume\",\n\tUsage: \"resumes all processes that have been previously paused\",\n\tArgsUsage: `<container-id>\n\nWhere \"<container-id>\" is the name for the instance of the container to be\nresumed.`,\n\tDescription: `The resume command resumes all processes in the instance of the container.\n\nUse runc list to identify instances of containers and their current status.`,\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 1, exactArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcontainer, err := getContainer(context)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = container.Resume()\n\t\tif err != nil {\n\t\t\tmaybeLogCgroupWarning(\"resume\", err)\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t},\n}\n"
  },
  {
    "path": "ps.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"slices\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/urfave/cli\"\n)\n\nvar psCommand = cli.Command{\n\tName:      \"ps\",\n\tUsage:     \"ps displays the processes running inside a container\",\n\tArgsUsage: `<container-id> [ps options]`,\n\tFlags: []cli.Flag{\n\t\tcli.StringFlag{\n\t\t\tName:  \"format, f\",\n\t\t\tValue: \"table\",\n\t\t\tUsage: `select one of: ` + formatOptions,\n\t\t},\n\t},\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 1, minArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tcontainer, err := getContainer(context)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tpids, err := container.Processes()\n\t\tif err != nil {\n\t\t\tmaybeLogCgroupWarning(\"ps\", err)\n\t\t\treturn err\n\t\t}\n\n\t\tswitch context.String(\"format\") {\n\t\tcase \"table\":\n\t\tcase \"json\":\n\t\t\treturn json.NewEncoder(os.Stdout).Encode(pids)\n\t\tdefault:\n\t\t\treturn errors.New(\"invalid format option\")\n\t\t}\n\n\t\t// [1:] is to remove command name, ex:\n\t\t// context.Args(): [container_id ps_arg1 ps_arg2 ...]\n\t\t// psArgs:         [ps_arg1 ps_arg2 ...]\n\t\t//\n\t\tpsArgs := context.Args()[1:]\n\t\tif len(psArgs) == 0 {\n\t\t\tpsArgs = []string{\"-ef\"}\n\t\t}\n\n\t\tcmd := exec.Command(\"ps\", psArgs...)\n\t\toutput, err := cmd.CombinedOutput()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"%w: %s\", err, output)\n\t\t}\n\n\t\tlines := strings.Split(string(output), \"\\n\")\n\t\tpidIndex, err := getPidIndex(lines[0])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tfmt.Println(lines[0])\n\t\tfor _, line := range lines[1:] {\n\t\t\tif len(line) == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfields := strings.Fields(line)\n\t\t\tp, err := strconv.Atoi(fields[pidIndex])\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"unable to parse pid: %w\", err)\n\t\t\t}\n\n\t\t\tif slices.Contains(pids, p) {\n\t\t\t\tfmt.Println(line)\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t},\n\tSkipArgReorder: true,\n}\n\nfunc getPidIndex(title string) (int, error) {\n\ttitles := strings.Fields(title)\n\n\tpidIndex := -1\n\tfor i, name := range titles {\n\t\tif name == \"PID\" {\n\t\t\treturn i, nil\n\t\t}\n\t}\n\n\treturn pidIndex, errors.New(\"couldn't find PID field in ps output\")\n}\n"
  },
  {
    "path": "restore.go",
    "content": "package main\n\nimport (\n\t\"os\"\n\n\t\"github.com/moby/sys/userns\"\n\t\"github.com/sirupsen/logrus\"\n\t\"github.com/urfave/cli\"\n)\n\nvar restoreCommand = cli.Command{\n\tName:  \"restore\",\n\tUsage: \"restore a container from a previous checkpoint\",\n\tArgsUsage: `<container-id>\n\nWhere \"<container-id>\" is the name for the instance of the container to be\nrestored.`,\n\tDescription: `Restores the saved state of the container instance that was previously saved\nusing the runc checkpoint command.`,\n\tFlags: []cli.Flag{\n\t\tcli.StringFlag{\n\t\t\tName:  \"console-socket\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"path to an AF_UNIX socket which will receive a file descriptor referencing the master end of the console's pseudoterminal\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"image-path\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"path to criu image files for restoring\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"work-path\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"path for saving work files and logs\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"tcp-established\",\n\t\t\tUsage: \"allow open tcp connections\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"ext-unix-sk\",\n\t\t\tUsage: \"allow external unix sockets\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"shell-job\",\n\t\t\tUsage: \"allow shell jobs\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"file-locks\",\n\t\t\tUsage: \"handle file locks, for safety\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"manage-cgroups-mode\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"cgroups mode: soft|full|strict|ignore (default: soft)\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"bundle, b\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"path to the root of the bundle directory\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"detach,d\",\n\t\t\tUsage: \"detach from the container's process\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"pid-file\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"specify the file to write the process id to\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"no-subreaper\",\n\t\t\tUsage: \"disable the use of the subreaper used to reap reparented processes\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"no-pivot\",\n\t\t\tUsage: \"do not use pivot root to jail process inside rootfs.  This should be used whenever the rootfs is on top of a ramdisk\",\n\t\t},\n\t\tcli.StringSliceFlag{\n\t\t\tName:  \"empty-ns\",\n\t\t\tUsage: \"create a namespace, but don't restore its properties\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"auto-dedup\",\n\t\t\tUsage: \"enable auto deduplication of memory images\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"lazy-pages\",\n\t\t\tUsage: \"use userfaultfd to lazily restore memory pages\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"lsm-profile\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"Specify an LSM profile to be used during restore in the form of TYPE:NAME.\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"lsm-mount-context\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"Specify an LSM mount context to be used during restore.\",\n\t\t},\n\t},\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 1, exactArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// XXX: Currently this is untested with rootless containers.\n\t\tif os.Geteuid() != 0 || userns.RunningInUserNS() {\n\t\t\tlogrus.Warn(\"runc checkpoint is untested with rootless containers\")\n\t\t}\n\n\t\toptions, err := criuOptions(context)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstatus, err := startContainer(context, CT_ACT_RESTORE, options)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// exit with the container's exit status so any external supervisor is\n\t\t// notified of the exit with the correct exit status.\n\t\tos.Exit(status)\n\t\treturn nil\n\t},\n}\n"
  },
  {
    "path": "rlimit_linux.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nvar rlimitMap = map[string]int{\n\t\"RLIMIT_CPU\":        unix.RLIMIT_CPU,\n\t\"RLIMIT_FSIZE\":      unix.RLIMIT_FSIZE,\n\t\"RLIMIT_DATA\":       unix.RLIMIT_DATA,\n\t\"RLIMIT_STACK\":      unix.RLIMIT_STACK,\n\t\"RLIMIT_CORE\":       unix.RLIMIT_CORE,\n\t\"RLIMIT_RSS\":        unix.RLIMIT_RSS,\n\t\"RLIMIT_NPROC\":      unix.RLIMIT_NPROC,\n\t\"RLIMIT_NOFILE\":     unix.RLIMIT_NOFILE,\n\t\"RLIMIT_MEMLOCK\":    unix.RLIMIT_MEMLOCK,\n\t\"RLIMIT_AS\":         unix.RLIMIT_AS,\n\t\"RLIMIT_LOCKS\":      unix.RLIMIT_LOCKS,\n\t\"RLIMIT_SIGPENDING\": unix.RLIMIT_SIGPENDING,\n\t\"RLIMIT_MSGQUEUE\":   unix.RLIMIT_MSGQUEUE,\n\t\"RLIMIT_NICE\":       unix.RLIMIT_NICE,\n\t\"RLIMIT_RTPRIO\":     unix.RLIMIT_RTPRIO,\n\t\"RLIMIT_RTTIME\":     unix.RLIMIT_RTTIME,\n}\n\nfunc strToRlimit(key string) (int, error) {\n\trl, ok := rlimitMap[key]\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"wrong rlimit value: %s\", key)\n\t}\n\treturn rl, nil\n}\n"
  },
  {
    "path": "rootless_linux.go",
    "content": "package main\n\nimport (\n\t\"os\"\n\n\t\"github.com/moby/sys/userns\"\n\t\"github.com/sirupsen/logrus\"\n\t\"github.com/urfave/cli\"\n\n\t\"github.com/opencontainers/cgroups/systemd\"\n)\n\nfunc shouldUseRootlessCgroupManager(context *cli.Context) (bool, error) {\n\tif context != nil {\n\t\tb, err := parseBoolOrAuto(context.GlobalString(\"rootless\"))\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\t// nil b stands for \"auto detect\"\n\t\tif b != nil {\n\t\t\treturn *b, nil\n\t\t}\n\t}\n\tif os.Geteuid() != 0 {\n\t\treturn true, nil\n\t}\n\tif !userns.RunningInUserNS() {\n\t\t// euid == 0 , in the initial ns (i.e. the real root)\n\t\treturn false, nil\n\t}\n\t// euid = 0, in a userns.\n\t//\n\t// [systemd driver]\n\t// We can call DetectUID() to parse the OwnerUID value from `busctl --user --no-pager status` result.\n\t// The value corresponds to sd_bus_creds_get_owner_uid(3).\n\t// If the value is 0, we have rootful systemd inside userns, so we do not need the rootless cgroup manager.\n\t//\n\t// On error, we assume we are root. An error may happen during shelling out to `busctl` CLI,\n\t// mostly when $DBUS_SESSION_BUS_ADDRESS is unset.\n\tif context.GlobalBool(\"systemd-cgroup\") {\n\t\townerUID, err := systemd.DetectUID()\n\t\tif err != nil {\n\t\t\tlogrus.WithError(err).Debug(\"failed to get the OwnerUID value, assuming the value to be 0\")\n\t\t\townerUID = 0\n\t\t}\n\t\treturn ownerUID != 0, nil\n\t}\n\t// [cgroupfs driver]\n\t// As we are unaware of cgroups path, we can't determine whether we have the full\n\t// access to the cgroups path.\n\t// Either way, we can safely decide to use the rootless cgroups manager.\n\treturn true, nil\n}\n\nfunc shouldHonorXDGRuntimeDir() bool {\n\tif os.Geteuid() != 0 {\n\t\treturn true\n\t}\n\tif !userns.RunningInUserNS() {\n\t\t// euid == 0 , in the initial ns (i.e. the real root)\n\t\t// in this case, we should use /run/runc and ignore\n\t\t// $XDG_RUNTIME_DIR (e.g. /run/user/0) for backward\n\t\t// compatibility.\n\t\treturn false\n\t}\n\t// euid = 0, in a userns.\n\tu, ok := os.LookupEnv(\"USER\")\n\treturn !ok || u != \"root\"\n}\n"
  },
  {
    "path": "run.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/urfave/cli\"\n)\n\n// default action is to start a container\nvar runCommand = cli.Command{\n\tName:  \"run\",\n\tUsage: \"create and run a container\",\n\tArgsUsage: `<container-id>\n\nWhere \"<container-id>\" is your name for the instance of the container that you\nare starting. The name you provide for the container instance must be unique on\nyour host.`,\n\tDescription: `The run command creates an instance of a container for a bundle. The bundle\nis a directory with a specification file named \"` + specConfig + `\" and a root\nfilesystem.\n\nThe specification file includes an args parameter. The args parameter is used\nto specify command(s) that get run when the container is started. To change the\ncommand(s) that get executed on start, edit the args parameter of the spec. See\n\"runc spec --help\" for more explanation.`,\n\tFlags: []cli.Flag{\n\t\tcli.StringFlag{\n\t\t\tName:  \"bundle, b\",\n\t\t\tValue: \"\",\n\t\t\tUsage: `path to the root of the bundle directory, defaults to the current directory`,\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"console-socket\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"path to an AF_UNIX socket which will receive a file descriptor referencing the master end of the console's pseudoterminal\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"pidfd-socket\",\n\t\t\tUsage: \"path to an AF_UNIX socket which will receive a file descriptor referencing the init process\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"detach, d\",\n\t\t\tUsage: \"detach from the container's process\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"keep\",\n\t\t\tUsage: \"do not delete the container after it exits\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"pid-file\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"specify the file to write the process id to\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"no-subreaper\",\n\t\t\tUsage: \"disable the use of the subreaper used to reap reparented processes\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"no-pivot\",\n\t\t\tUsage: \"do not use pivot root to jail process inside rootfs.  This should be used whenever the rootfs is on top of a ramdisk\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"no-new-keyring\",\n\t\t\tUsage: \"do not create a new session keyring for the container.  This will cause the container to inherit the calling processes session key\",\n\t\t},\n\t\tcli.IntFlag{\n\t\t\tName:  \"preserve-fds\",\n\t\t\tUsage: \"Pass N additional file descriptors to the container (stdio + $LISTEN_FDS + N in total)\",\n\t\t},\n\t},\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 1, exactArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstatus, err := startContainer(context, CT_ACT_RUN, nil)\n\t\tif err == nil {\n\t\t\t// exit with the container's exit status so any external supervisor is\n\t\t\t// notified of the exit with the correct exit status.\n\t\t\tos.Exit(status)\n\t\t}\n\t\treturn fmt.Errorf(\"runc run failed: %w\", err)\n\t},\n}\n"
  },
  {
    "path": "runc.keyring",
    "content": "pub   ed25519 2019-06-21 [C]\n      C9C370B246B09F6DBCFC744C34401015D1D2D386\nuid           [ultimate] Aleksa Sarai <cyphar@cyphar.com>\nsub   ed25519 2022-09-30 [S] [expires: 2030-03-25]\nsub   cv25519 2022-09-30 [E] [expires: 2030-03-25]\nsub   ed25519 2022-09-30 [A] [expires: 2030-03-25]\n\n-----BEGIN PGP PUBLIC KEY BLOCK-----\nComment: github=cyphar\n\nmDMEXQxvLxYJKwYBBAHaRw8BAQdArRQoZs9YzYtQIiPA1qdvUT8Q0wbPZyRV65Tz\nQNTIZla0IEFsZWtzYSBTYXJhaSA8Y3lwaGFyQGN5cGhhci5jb20+iJAEExYIADgF\nCwkIBwIGFQoJCAsCBBYCAwECHgECF4ACGwEWIQTJw3CyRrCfbbz8dEw0QBAV0dLT\nhgUCZa3xwQAKCRA0QBAV0dLThpQyAQDGzjZyyWWmd6Ykg5/lymp2MLIg1f2jG6ew\nAiPT4ATkBAD/RgdLDf1IQStEH7pHmQa1qvqyRq1jeEgF23KruXbbdQ64MwRdDMJS\nFgkrBgEEAdpHDwEBB0B2IGusH7LuDH3hNT6JYM30S7G92FGogA6a9WQzKRlqvIh4\nBCgWCgAgFiEEycNwskawn228/HRMNEAQFdHS04YFAmM2ukUCHQEACgkQNEAQFdHS\n04ZTQAEAjAT0fXVJHdRL6UMCxDYsgjG+QyH1mr7gKgbPvB8A5LgBAN4QDqCxIY3b\n8+X4Ud3C9yLfkbcsdgctU3fO/jHpKVIIiO8EGBYIACAWIQTJw3CyRrCfbbz8dEw0\nQBAV0dLThgUCXQzCUgIbAgCBCRA0QBAV0dLThnYgBBkWCAAdFiEEsWZunbXxPIMS\ny32KnZS5YyG50BIFAl0MwlIACgkQnZS5YyG50BLusQD/aPjX4NhlSYgzNV2x31aw\nx5AxTp+18xoQDwaU123grDgA/2B73RiaTO2boRK5UETxx6awdsA51hZubxo4LyxG\nSP8IW5gA/2JWrDg+7cSQrS71gHmtqvz0se+D7zmWdcnN8O3LoUZeAQDW3Pkq0cru\nYVbsXiTwzenLPUJrjGBAVaoFmYqFUelFDLg4BF0MwmoSCisGAQQBl1UBBQEBB0BL\nFI5mD555F7t6dovnw4DW19nkG/g/Vd5Zb/7qhMLWagMBCAeIeAQoFgoAIBYhBMnD\ncLJGsJ9tvPx0TDRAEBXR0tOGBQJjNrpFAh0BAAoJEDRAEBXR0tOGgPkA/1Z69M4e\nqU3ZM7czYOHKAbNHiRuAqzc6o90WBJLhgFJmAQCcKmpnnnTpbnGoXgkcRSr2y1wk\nuId1oVRwfRbN9h94Doh4BBgWCAAgFiEEycNwskawn228/HRMNEAQFdHS04YFAl0M\nwmoCGwwACgkQNEAQFdHS04aZWgD/d0gCCB7ytnRB9RBtns9RRrtGXOIrzzWKw+zx\nza6Y2zgBANoj7CUeH0MygzZkgMrCmKPNnMxEnHJaTuYZA4yBixkIuDMEXQzCjRYJ\nKwYBBAHaRw8BAQdAAiFh7AD1u/UhjVbGJkRflPhjHBKIsAuP4pkI/qjavwaIeAQo\nFgoAIBYhBMnDcLJGsJ9tvPx0TDRAEBXR0tOGBQJjNrpFAh0BAAoJEDRAEBXR0tOG\nAUgA/2ZDB3tCRBON1WjLBESkHZmNtplYcV03u/oshA/MVCzpAQDGusGcv/rf1ZI9\no7lcWozXFlQDOM7eoT4avvWOVcsaD4h4BBgWCAAgFiEEycNwskawn228/HRMNEAQ\nFdHS04YFAl0Mwo0CGyAACgkQNEAQFdHS04ajxQEAsZf1yDORUVYicREc/7z0U+51\nDJzeAexeJTYM+N+x13EA/0Ex+o7qQ7dZLGDn7x4LSbd39C+++suHsEaE4XwlX6cH\nuDMEYza6SxYJKwYBBAHaRw8BAQdAE3s7dZQFuImQX2tWshIdGjeUKZc7rlMcrZ6+\nq25gaH2I9QQYFgoAJgIbAhYhBMnDcLJGsJ9tvPx0TDRAEBXR0tOGBQJlrfJcBQkO\nEpjFAIF2IAQZFgoAHRYhBLZOSVWyn6PUY/KpBiiX+tK36URvBQJjNrpLAAoJECiX\n+tK36URv2hsBALyKPjIlNTtlwC1PHZkyOPwSiu4ZveS7pWlHLHX6nJBCAP9CBDtf\nUbvG3C5WljSQdiBrXKgosDbJxPwXw+tW0XukAwkQNEAQFdHS04bMkQEA9elVwA0A\n+ywDw+jnifIc98XqLI+KF3Xl0A9+lMuwthMBAO00DeAEjkryFMGp62GPNHqr/r6p\n+6DIeUjWgK4Sh8IMuDgEYza6YBIKKwYBBAGXVQEFAQEHQKECW5Y7nUGCka0/WcCM\nOerRY95Pm2DQVL76QzvhXD8tAwEIB4h+BBgWCgAmAhsMFiEEycNwskawn228/HRM\nNEAQFdHS04YFAmWt8lwFCQ4SmLAACgkQNEAQFdHS04apHgD+MIRj2kujpxtQt04D\nZB+hofBtHIEMo2tplFBYvhZ6KOMA/1q3aRv6jnWAv8woc50KitP4/+iPmfyzaBA/\n8XA5DdIKuDMEYza6bhYJKwYBBAHaRw8BAQdAgHXd0yf6MPXJZCZ3TFz8xLymyPsD\nTF2SQwwqM4+nYbeIfgQYFgoAJgIbIBYhBMnDcLJGsJ9tvPx0TDRAEBXR0tOGBQJl\nrfJcBQkOEpiiAAoJEDRAEBXR0tOGAUwA/jbaz04OXnV3PYC/yQUsUJsihCTqz4Ne\nlxxclgJYU604APsFzpoLD0oUlfMn5Fh75ftkKPrwiHpTj4rRU6oIQu1/Bg==\n=Ab7w\n-----END PGP PUBLIC KEY BLOCK-----\n\npub   rsa2048 2020-04-28 [SC] [expires: 2028-04-18]\n      C2428CD75720FACDCF76B6EA17DE5ECB75A1100E\nuid           [ultimate] Kir Kolyshkin <kolyshkin@gmail.com>\nsub   rsa2048 2020-04-28 [E] [expires: 2028-04-18]\n\n-----BEGIN PGP PUBLIC KEY BLOCK-----\nComment: github=kolyshkin\n\nmQENBF6ou34BCACow4f1kUqw0varU4pq+C91xhYeNb/0sGyFKCvYfiLY74yG8EXW\nrZ8n06AYDHzPv9oubkUhnFk/u25kXQVgLB6Z5SKRBCiFq1QZirXeNJ8Iss8AwDBV\nppTSiCl8/x/gKoXiJ+7MyvOZozUavkVHdim1NKCzwD014VOB8RXz+heUjS+HDXY9\n2IknlaZg2oGpQe6weVmXmEhxERapG/y+/Vo6t8UfhSv0gEeM00/yWhBJKSYPtzMg\nSbTL4jCsN/x0bq+ZNp4lunihVY5WqX+BGLcx7xPnJ0Rp9Ju1mAhKrbKUmOG3rkWu\nDIJuVP8HQfCoffsBLUKQ0V4fh18kfq1bo3JvABEBAAG0I0tpciBLb2x5c2hraW4g\nPGtvbHlzaGtpbkBnbWFpbC5jb20+iQFUBBMBCAA+AhsDBQsJCAcCBhUKCQgLAgQW\nAgMBAh4BAheAFiEEwkKM11cg+s3PdrbqF95ey3WhEA4FAmdcs+gFCQ7+0bIACgkQ\nF95ey3WhEA6rRwf8CxnbLB/uqPZfmmiTzTk7luWaIo6YxtnNz3bn2rTByEo+rBgO\ngbgtKaV4REYeKhtbdstkMTX3zr+zlqwuqaPaag/Cz20HLkD04bI+JCPoRH/dPadd\n3nOdbdRfdWZeDDSFKjVunVpXlLxwvZ1WaaYKCfF06U3F7/z7MTAuKHrHTG9SrNPJ\nUPJTy63dNnuiPpVNNtOyftLGEGgD1JH2tcosVEwEpAlXpIpJy4Lad9ajaRVoYNtT\nqZr26sRFYNOQqWgl25QM8LyLFyYry9HfEXkbilW0OpkAkUvv0yAe97UPZ0beP8D+\nd5rMbZps6Ph1TtosdE/Gx8xWs7ALNDmXyCI/F7kBDQReqLt+AQgAtKUDLyUFxQ9k\np8OwI/MsPTLLoYfjilJaXnmtzQjGYFrEuU3lt7omRUBldNChkjGghEukGTq0RD7Z\ns6Qv5PM5dtOypPJM0lmz2j7seun3AfDV44h/bjOFwTUjab3Nr9fQ52qESmRS03ik\n6+5YNwq2D/+2kHVJ2vkUoo6KvioA1vPU311oW/Yfky8dLS5NguikE3to6YElWW38\noqFUVdMScCbf9a6CPXSQEz/rH4TgAhwyTo6oegv+8L/szGFy5ToNGiA0D45HcFDc\nyXs1d+b3bYRuGfC1l/z+WZWwbeHt1fKEQ8pCLDLRre5y0hPRHeN2CG4U7iyI5B5h\n8LITPcZ66wARAQABiQE8BBgBCAAmAhsMFiEEwkKM11cg+s3PdrbqF95ey3WhEA4F\nAmdctAIFCQ7+0bIACgkQF95ey3WhEA7PDggAlZxK7mCYThh7Z75mWftIaT3ms5jR\ncuQcCQYy2Z7qCaNxJtRklhsaAwpO0NQdNdQEfVXlNYLXRuFDq+hemhZKMu4lzQbZ\n3atm5swWcB8+9q+aCMP5nppwUXxCxHdhp4VxIYEv+wNjTF/6Fxu66fYPQPDKVacS\nH9NLjHsVoDFSi9rvtAy/Bs2aVn0hZkwpxzHJNVPnNcMAEnYXfM+kXu3761J61FAr\no8zT9XXXnUYRuxHRAsrpa3atQj7jDHvFlcc3VfPmUFPs0aLRy19/44xRE1FZOSur\nf7jJ1HOKSJA9zx0xWaURRTRkMTIVuMnQKZofxC96GavBDVTtZlgLzeWVnQ==\n=eHgH\n-----END PGP PUBLIC KEY BLOCK-----\npub   rsa3072 2019-07-25 [SC] [expires: 2026-07-31]\n      C020EA876CE4E06C7AB95AEF49524C6F9F638F1A\nuid           [ unknown] Akihiro Suda <suda.kyoto@gmail.com>\nuid           [ unknown] Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>\nsub   rsa3072 2019-07-25 [E] [expires: 2026-07-31]\n      604B35B13047F7041179AAFB6937938CA64D95C4\n\n-----BEGIN PGP PUBLIC KEY BLOCK-----\nComment: github=AkihiroSuda\n\nmQGNBF06GR8BDADEpCHv9HzGbqzQ2RAqTWBGHUNsiHD89NVmbXx4nw56odXf5mAK\nQHxyh9tKkt0BIaKMLcxcU6+GXP5iSLdHnQvnxxbR0gW3CJ8bIWPUflE4hjv8QLbc\n5CSpqa3d7/tsntVYNLPFs6B0acTXB4YLK+u2aC42US6by5zO4KS+8/7RyXhdkYGY\nwy6dCU1ysnuG4QstxlObKJUtxcW/9vQkF/ZdqaqLf6HHL/kMasWUxWG1uvf+V/MO\nBRKu7zBW290XDE5Dd9DomyX4q2kqoWQBkpvkJlVsKWpW+AXnBizbVD+pX90VEQmk\nTvnr6U9OiArS6m2yVwZlu836l2yo3tX2tsgTNn8gtZugO4Qb3iZnDUexqgCwnLBx\ndsyq4W565jNRV/HWRUMR+LDIS1KiEalzDoID3aUXRHHLUQG0oqX8jqFJUqp1P9pO\n9nezuUDg8SsaBg8O4tyv/CZq/FeF3RMMc2EHTiO8HTERqmRMxUFZv3bkgA4GnjnA\n3wsZhLXQq+UaIJUAEQEAAbQsQWtpaGlybyBTdWRhIDxha2loaXJvLnN1ZGEuY3pA\naGNvLm50dC5jby5qcD6JAdQEEwEKAD4CGwMFCwkIBwIGFQoJCAsCBBYCAwECHgEC\nF4AWIQTAIOqHbOTgbHq5Wu9JUkxvn2OPGgUCaIsLuAUJDTImGQAKCRBJUkxvn2OP\nGpAODACbMT7NbsZm9Nn9TjUbMxdkReqwSTN9F2zR3J4KtFolQk/Hi38iXYgZQI4H\nM0Rdy2CDnHolVQTr4Zzo+6J0HlB5vc6TUbhyqfW40apIMOFmQbJLMxIMEUAESegX\nGfZklgBO6buPsfYVt8oWZGMZccyms/cF5r7NYrBaO928qovPGU84slm3bX0kcKDp\nNlafUGENs2GjD1kmGe4FCy7Sngz8bJsQbdL6mYLwnQ8mUCIB8QWfSrOwBjkE0Pbb\nk794ZOk0lUS2DsxEjokxklhJLKQ8KEtK4u6FZmB83xg8KgEFfCYU28gn76bf1OxW\nJ8USOsXgBgqowHPygZBfyRBLn2yDkP4jUegDHi43cSxbmRzRItre+PBk617OkIXu\ncn/U/AwCGP/4bHfF7MAS+84oW3mHHvwar/oHIyJ1adaolS3Ubz6AU6otQ+bemqnZ\naOn7zKrZ5kntEiiceON/PPKetotYltz33sA5tsWWBf6DM6bPbJu5CsB+R+rXAAAE\nciqwV0a0I0FraWhpcm8gU3VkYSA8c3VkYS5reW90b0BnbWFpbC5jb20+iQHUBBMB\nCgA+AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEEwCDqh2zk4Gx6uVrvSVJM\nb59jjxoFAmiLC7sFCQ0yJhkACgkQSVJMb59jjxo5wgv+JwOMgySrX/8ifx8sUnFj\ncPxt/vBHOPNeq0S8yHXBIqud07XAUM4v6xKd5TxRpOT2pC2R08aSnRH8XyiRQuiM\nWOJzyV4SWcStvTt9cTc3oIlAVTJbrhZ98oBUlcqmZo3oNmlPFrjr5a6krEB4YBMB\n1AJ4DIF5cZ+iEF8/+zcstvXA9nS3wIwHLx/4b/b72H47KIZIXMMuhy6VmSm8vC6o\noLXKn56RvtQcLTozjnDbmXxYU3LJaia/MQZJJcLgQEj07H8iT7oqalTKMjBpwRH5\nm9BUqdddWBiBiEFrB1rs1BIsL4W0eHZqvpwitXJeArFRoOpfDOBwFQvhuZf9rRz4\ntzmbhxICEaEBhfa5kRhQPworxAKsyWMMUThMo38quZj1vvJshIj/MLDj3g7Xf5N2\n7kMCQQsbOvY9/l3RySmENi8xpZx8TZWuHNEb0U8gOS7CDDvo1/mjtlDR/8vsn/6K\naXzjmBqbCtH3dMZviNru7K/fdg24hxKaXIpGu4RIX9rAuQGNBF06GR8BDACxpQ9c\ny72+/WZGon+CToNj+a24PiduyExfFv26E0D77ACS6UAC5jz71mSuLbHiauQ3MHj+\n786z4m4St8+HjDL9YrAe19MobxWsLHAFvBJ8UHfZdkLzBkIKPHz7TUqlhvFR13b6\nZAZVZk975hgCT3LpzA1miHBY2E5WDpVa3pe94xshVHL3iVf9Jv1a4hmM+eu0gxX4\niEw7RLq9LssTyjeuRVN23X+ojD4Mp3jQnPA+cjLF718KpCsw5r+tGZ98/5GZevmH\nQf6sg0b/k6/vkVveopeeH28zb/nnVuhgGSxcbiZUrFC9EfhX4/6NNFRhE300AjeF\nbP7SoXx3qRhr993BDSP32r44hy+kYLhZP5K5oXivcITJZuGcJh49P4QuYGrnODIL\ngEhedWeePcJXFcEz09teizlWKGzd+EA3uwYd/bQelflwXkGuCLaoNv4qcH3oJDp1\nvYI0zT7hGvnz3thRLg3SOWFq5cBhnfNGXPLsoNZBzWGn2cm5MJYSKjIM470AEQEA\nAYkBvAQYAQoAJgIbDBYhBMAg6ods5OBserla70lSTG+fY48aBQJoiwvJBQkNMiYq\nAAoJEElSTG+fY48aS54L/2t2DcWir5Y9G36yC6DFpUqOl03l2HwVYx4hfsItP/+4\nT299IiNmaAnTMTBVMS3fAAfYrwtf6zhAFTffPkiPU7jl2VQzx4uTC4ywf28Njiy5\nOzwL/kil96t67ot9rgOlZAc+Q8EOIeGHJMUlBq5YPY0QbuOiE7PlXZHhsbb7QdKb\naPNDUypHLf7DHxzi5XUrcV/IRvk3QFXPiF5o6p5JcUzJMCfatlHfUQU/Z0LfrwKk\niuFcUpxZ2QwNy/6jYZvjyLHQIn2YIoF2rg4KiTqgtRPr5AU3gmFjC225VZTQwQAz\n0xzdJgIDiB4meWoVN4hd4lFsk6JP9JzGBBJFUOmozxM/VC+9S+xzrJa6HQpI2kFC\nAwhvhfc4Em6tQYcF38W7okYCaz4izKMoT0Zff65xvLckrvx47wVu2SoCFv5avpfl\nIubFH+bmkYNUJNoY6HVUKgpF40zZwMPbD1IvffVvLZKBCrAnQMC6ZAoRmX58dJ2T\nr7LhafIgzEqVfBDNpdtqYA==\n=DrWF\n-----END PGP PUBLIC KEY BLOCK-----\n\n"
  },
  {
    "path": "script/build-libpathrs.sh",
    "content": "#!/bin/bash\n# Copyright (C) 2026 Open Containers 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\nset -xEeuo pipefail\n\n# shellcheck source=./script/lib.sh\nsource \"$(dirname \"${BASH_SOURCE[0]}\")/lib.sh\"\n\nPLATFORM=\"$(get_platform)\"\n\ndeclare -A GOARCH_TO_RUST_TARGET=(\n\t[\"386\"]=i686-unknown-linux-gnu\n\t[\"amd64\"]=x86_64-unknown-linux-gnu\n\t[\"arm64\"]=aarch64-unknown-linux-gnu\n\t[\"armel\"]=armv5te-unknown-linux-gnueabi\n\t[\"armhf\"]=armv7-unknown-linux-gnueabihf\n\t[\"ppc64le\"]=powerpc64le-unknown-linux-gnu\n\t[\"s390x\"]=s390x-unknown-linux-gnu\n\t[\"riscv64\"]=riscv64gc-unknown-linux-gnu\n)\n\ndeclare -A RUST_TARGET_TO_CC=(\n\t[\"i686-unknown-linux-gnu\"]=\"i686-${PLATFORM}-gcc\"\n\t[\"x86_64-unknown-linux-gnu\"]=\"x86_64-${PLATFORM}-gcc\"\n\t[\"aarch64-unknown-linux-gnu\"]=\"aarch64-${PLATFORM}-gcc\"\n\t[\"armv5te-unknown-linux-gnueabi\"]=\"arm-${PLATFORM}eabi-gcc\"\n\t[\"armv7-unknown-linux-gnueabihf\"]=\"arm-${PLATFORM}eabihf-gcc\"\n\t[\"powerpc64le-unknown-linux-gnu\"]=\"powerpc64le-${PLATFORM}-gcc\"\n\t[\"s390x-unknown-linux-gnu\"]=\"s390x-${PLATFORM}-gcc\"\n\t[\"riscv64gc-unknown-linux-gnu\"]=\"riscv64-${PLATFORM}-gcc\"\n)\n\n# sha256 checksums for libpathrs release tarballs.\ndeclare -A LIBPATHRS_SHA256=(\n\t[\"0.2.4\"]=45aca68e698b844fae0cf7c459bc441519b0e7b48397caa7d3936cfc68d73f77\n)\n\nfunction generate_cargo_config() {\n\tfor rust_target in \"${GOARCH_TO_RUST_TARGET[@]}\"; do\n\t\tlocal target_gcc=\"${RUST_TARGET_TO_CC[$rust_target]}\"\n\n\t\t# Based on <https://wiki.debian.org/Rust#Crosscompiling>.\n\t\tcat <<-EOF\n\t\t\t[target.$rust_target]\n\t\t\tlinker = \"$target_gcc\"\n\t\t\trustflags = [\"-L\", \"$(rustc --print sysroot)/lib/rustlib/$rust_target/lib\"]\n\t\tEOF\n\tdone\n}\n\n# Due to libpathrs being MPLv2/LGPLv3 we must include its sources, so\n# download, install and build against it.\n# Parameters:\n#  $1 -- libpathrs version to download and build.\n#  $2 -- destination directory.\n#  $@ -- additional architectures to cross-compile for (optional)\nfunction build_libpathrs() {\n\tlocal ver=\"$1\"\n\tshift\n\tlocal dest=\"$1\"\n\tshift\n\tlocal go_arches=(\"$@\")\n\tlocal tar=\"libpathrs-${ver}.tar.xz\"\n\n\t# Download, check, and extract.\n\twget \"https://github.com/cyphar/libpathrs/releases/download/v${ver}/${tar}\"{,.asc}\n\tsha256sum --strict --check - <<<\"${LIBPATHRS_SHA256[${ver}]} *${tar}\"\n\n\tlocal srcdir\n\tsrcdir=\"$(mktemp -d)\"\n\ttar xf \"$tar\" -C \"$srcdir\"\n\tpushd \"$srcdir/libpathrs-$ver\" || return\n\n\t# Use cargo-auditable if available.\n\tif cargo auditable --version &>/dev/null; then\n\t\texport CARGO=\"cargo auditable\"\n\tfi\n\tlocal extra_cargo_flags=(\"--locked\")\n\n\t# If we are being asked to install this in a system library directory\n\t# (i.e., --prefix=/usr or something similar), the correct place to put\n\t# libpathrs.so depends very strongly on the distro we are running on, and\n\t# detecting this in a generic way is quite difficult.\n\t#\n\t# The simplest solution is to use a disto-packaged binary to detect where\n\t# libc.so is installed and use the same import path, so we look at\n\t# /proc/self/maps and parse out the parent directory of the libc.so being\n\t# used.\n\tlocal native_libdir libdir=\n\tnative_libdir=\"$(awk '$NF ~ /\\/libc\\>.*\\.so/ { print $NF; }' /proc/self/maps |\n\t\tsort -u | head -n1 | xargs dirname)\"\n\tif [[ \"$native_libdir\" == \"$dest/\"* ]]; then\n\t\tlibdir=\"$native_libdir\"\n\tfi\n\n\t# Install native version for Dockerfile builds.\n\tmake \\\n\t\tEXTRA_CARGO_FLAGS=\"${extra_cargo_flags[*]}\" \\\n\t\trelease\n\t./install.sh \\\n\t\t--prefix=\"$dest\" \\\n\t\t--libdir=\"$libdir\"\n\tcargo clean\n\n\tlocal cargo_config\n\tcargo_config=\"$(mktemp --tmpdir runc-libpathrs-cargo.toml.XXXXXX)\"\n\t# shellcheck disable=SC2064 # We want to resolve the path here.\n\ttrap \"rm -f '$cargo_config'\" EXIT\n\n\t# Only use the cross-compile config when we actually need to cross-compile.\n\t# RedHat-based distros insist on calling their targets \"$ARCH-redhat-linux\"\n\t# which breaks our above logic, but we don't ever need to cross-compile on\n\t# RedHat distros so we can ignore this.\n\tgenerate_cargo_config >\"$cargo_config\"\n\textra_cargo_flags+=(\"--config=$cargo_config\")\n\n\tfor go_arch in \"${go_arches[@]}\"; do\n\t\tlocal rust_target=\"${GOARCH_TO_RUST_TARGET[$go_arch]}\"\n\t\tmake \\\n\t\t\tEXTRA_CARGO_FLAGS=\"${extra_cargo_flags[*]} --target=$rust_target\" \\\n\t\t\trelease\n\t\t./install.sh \\\n\t\t\t--rust-target=\"$rust_target\" \\\n\t\t\t--prefix=\"$dest/$go_arch\"\n\t\tcargo clean\n\tdone\n\n\t# Place the source tarball to $dest/src.\n\tpopd || return\n\tmkdir -p \"$dest\"/src\n\tmv \"$tar\"{,.asc} \"$dest\"/src\n}\n\nif [ $# -lt 2 ]; then\n\techo \"Usage: $0 <version> <dest-dir> [<extra-arch> ...]\" >&2\n\texit 1\nfi\n\nbuild_libpathrs \"$@\"\n"
  },
  {
    "path": "script/build-seccomp.sh",
    "content": "#!/bin/bash\n\nset -e -u -o pipefail\n\n# shellcheck source=./script/lib.sh\nsource \"$(dirname \"${BASH_SOURCE[0]}\")/lib.sh\"\n\n# sha256 checksums for seccomp release tarballs.\ndeclare -A SECCOMP_SHA256=(\n\t[\"2.5.5\"]=248a2c8a4d9b9858aa6baf52712c34afefcf9c9e94b76dce02c1c9aa25fb3375\n\t[\"2.5.6\"]=04c37d72965dce218a0c94519b056e1775cf786b5260ee2b7992956c4ee38633\n\t[\"2.6.0\"]=83b6085232d1588c379dc9b9cae47bb37407cf262e6e74993c61ba72d2a784dc\n)\n\n# Due to libseccomp being LGPL we must include its sources,\n# so download, install and build against it.\n# Parameters:\n#  $1 -- libseccomp version to download and build.\n#  $2 -- destination directory.\n#  $@ -- additional architectures to cross-compile for.\nfunction build_libseccomp() {\n\tlocal ver=\"$1\"\n\tshift\n\tlocal dest=\"$1\"\n\tshift\n\tlocal arches=(\"$@\")\n\tlocal tar=\"libseccomp-${ver}.tar.gz\"\n\n\t# Download, check, and extract.\n\twget \"https://github.com/seccomp/libseccomp/releases/download/v${ver}/${tar}\"{,.asc}\n\tsha256sum --strict --check - <<<\"${SECCOMP_SHA256[${ver}]} *${tar}\"\n\n\tlocal srcdir\n\tsrcdir=\"$(mktemp -d)\"\n\ttar xf \"$tar\" -C \"$srcdir\"\n\tpushd \"$srcdir/libseccomp-$ver\" || return\n\n\t# Install native version for Dockerfile builds.\n\t./configure \\\n\t\t--prefix=\"$dest\" --libdir=\"$dest/lib\" \\\n\t\t--enable-static --enable-shared\n\tmake install\n\tmake clean\n\n\t# Save the original cflags.\n\tlocal original_cflags=\"${CFLAGS:-}\"\n\n\t# Build and install for all requested architectures.\n\tlocal arch\n\tfor arch in \"${arches[@]}\"; do\n\t\t# Reset CFLAGS.\n\t\tCFLAGS=\"$original_cflags\"\n\t\tset_cross_vars \"$arch\"\n\t\t./configure --host \"$HOST\" \\\n\t\t\t--prefix=\"$dest/$arch\" --libdir=\"$dest/$arch/lib\" \\\n\t\t\t--enable-static --enable-shared\n\t\tmake install\n\t\tmake clean\n\tdone\n\n\t# Place the source tarball to $dest/src.\n\tpopd || return\n\tmkdir -p \"$dest\"/src\n\tmv \"$tar\"{,.asc} \"$dest\"/src\n}\n\nif [ $# -lt 2 ]; then\n\techo \"Usage: $0 <version> <dest-dir> [<extra-arch> ...]\" >&2\n\texit 1\nfi\n\nbuild_libseccomp \"$@\"\n"
  },
  {
    "path": "script/check-config.sh",
    "content": "#!/usr/bin/env bash\nset -e -u\n\n[ -t 1 ] || NO_COLOR=1\n\n# bits of this were adapted from check_config.sh in docker\n# see also https://github.com/docker/docker/blob/master/contrib/check-config.sh\n\npossibleConfigs=(\n\t'/proc/config.gz'\n\t\"/boot/config-$(uname -r)\"\n\t\"/usr/src/linux-$(uname -r)/.config\"\n\t'/usr/src/linux/.config'\n)\npossibleConfigFiles=(\n\t'config.gz'\n\t\"config-$(uname -r)\"\n\t'.config'\n)\n\nif ! command -v zgrep &>/dev/null; then\n\tzgrep() {\n\t\tzcat \"$2\" | grep \"$1\"\n\t}\nfi\n\nkernelVersion=\"$(uname -r)\"\nkernelMajor=\"${kernelVersion%%.*}\"\nkernelMinor=\"${kernelVersion#\"$kernelMajor\".}\"\nkernelMinor=\"${kernelMinor%%.*}\"\n\n# Usage: to check if kernel version is < 4.8, use\n# \tkernel_lt 4 8\n# (here \"lt\" stands for \"less than\").\nkernel_lt() {\n\t[ \"$kernelMajor\" -lt \"$1\" ] && return\n\t[ \"$kernelMajor\" -eq \"$1\" ] && [ \"$kernelMinor\" -lt \"$2\" ]\n}\n\n# Usage: to check if kernel version is >= 6.1, use\n#\tkernel_ge 6 1\n# (here \"ge\" stands for \"greater or equal\").\nkernel_ge() {\n\t! kernel_lt \"$1\" \"$2\"\n}\n\nis_set() {\n\tzgrep \"CONFIG_$1=[y|m]\" \"$CONFIG\" >/dev/null\n}\nis_set_in_kernel() {\n\tzgrep \"CONFIG_$1=y\" \"$CONFIG\" >/dev/null\n}\nis_set_as_module() {\n\tzgrep \"CONFIG_$1=m\" \"$CONFIG\" >/dev/null\n}\n\ncolor() {\n\t[ -n \"${NO_COLOR:-}\" ] && return\n\n\tlocal codes=()\n\tif [ \"$1\" = 'bold' ]; then\n\t\tcodes=(\"${codes[@]-}\" '1')\n\t\tshift\n\tfi\n\tif [ \"$#\" -gt 0 ]; then\n\t\tlocal code=''\n\t\tcase \"$1\" in\n\t\t# see https://en.wikipedia.org/wiki/ANSI_escape_code#Colors\n\t\tblack) code=30 ;;\n\t\tred) code=31 ;;\n\t\tgreen) code=32 ;;\n\t\tyellow) code=33 ;;\n\t\tblue) code=34 ;;\n\t\tmagenta) code=35 ;;\n\t\tcyan) code=36 ;;\n\t\twhite) code=37 ;;\n\t\tesac\n\t\tif [ \"$code\" ]; then\n\t\t\tcodes=(\"${codes[@]-}\" \"$code\")\n\t\tfi\n\tfi\n\tlocal IFS=';'\n\techo -en '\\033['\"${codes[*]-}\"'m'\n}\nwrap_color() {\n\ttext=\"$1\"\n\tshift\n\tcolor \"$@\"\n\techo -n \"$text\"\n\tcolor reset\n\techo\n}\n\nwrap_good() {\n\tlocal name=\"$1\"\n\tshift\n\tlocal val=\"$1\"\n\tshift\n\techo \"$(wrap_color \"$name\" white): $(wrap_color \"$val\" green)\" \"$@\"\n}\n\nwrap_bad() {\n\tlocal name=\"$1\"\n\tshift\n\tlocal val=\"$1\"\n\tshift\n\techo \"$(wrap_color \"$name\" bold): $(wrap_color \"$val\" bold red)\" \"$@\"\n}\nwrap_warning() {\n\twrap_color >&2 \"$*\" red\n}\n\ncheck_flag() {\n\tif is_set_in_kernel \"$1\"; then\n\t\twrap_good \"CONFIG_$1\" 'enabled'\n\telif is_set_as_module \"$1\"; then\n\t\twrap_good \"CONFIG_$1\" 'enabled (as module)'\n\telse\n\t\twrap_bad \"CONFIG_$1\" 'missing'\n\tfi\n}\n\ncheck_flags() {\n\tfor flag in \"$@\"; do\n\t\techo \"- $(check_flag \"$flag\")\"\n\tdone\n}\n\ncheck_distro_userns() {\n\t[ -r /etc/os-release ] || return 0\n\t# shellcheck source=/dev/null\n\t. /etc/os-release 2>/dev/null || return 0\n\tif [[ \"${ID}\" =~ ^(centos|rhel)$ && \"${VERSION_ID}\" =~ ^7 ]]; then\n\t\t# this is a CentOS7 or RHEL7 system\n\t\tgrep -q \"user_namespace.enable=1\" /proc/cmdline || {\n\t\t\t# no user namespace support enabled\n\t\t\twrap_bad \"  (RHEL7/CentOS7\" \"User namespaces disabled; add 'user_namespace.enable=1' to boot command line)\"\n\t\t}\n\tfi\n}\n\nis_config() {\n\tlocal config=\"$1\"\n\n\t# Todo: more check\n\t[[ -f \"$config\" ]] && return 0\n\treturn 1\n}\n\nsearch_config() {\n\tlocal target_dir=(\"${1:-${possibleConfigs[@]}}\")\n\n\tlocal tryConfig\n\tfor tryConfig in \"${target_dir[@]}\"; do\n\t\tis_config \"$tryConfig\" && {\n\t\t\tCONFIG=\"$tryConfig\"\n\t\t\treturn\n\t\t}\n\t\t[[ -d \"$tryConfig\" ]] && {\n\t\t\tfor tryFile in \"${possibleConfigFiles[@]}\"; do\n\t\t\t\tis_config \"$tryConfig/$tryFile\" && {\n\t\t\t\t\tCONFIG=\"$tryConfig/$tryFile\"\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\tdone\n\t\t}\n\tdone\n\n\twrap_warning \"error: cannot find kernel config\"\n\twrap_warning \"  try running this script again, specifying the kernel config:\"\n\twrap_warning \"    CONFIG=/path/to/kernel/.config $0 or $0 /path/to/kernel/.config\"\n\texit 1\n}\n\nCONFIG=\"${1:-}\"\n\nis_config \"$CONFIG\" || {\n\tif [[ ! \"$CONFIG\" ]]; then\n\t\twrap_color \"info: no config specified, searching for kernel config ...\" white\n\t\tsearch_config\n\telif [[ -d \"$CONFIG\" ]]; then\n\t\twrap_color \"info: input is a directory, searching for kernel config in this directory...\" white\n\t\tsearch_config \"$CONFIG\"\n\telse\n\t\twrap_warning \"warning: $CONFIG seems not a kernel config, searching other paths for kernel config ...\"\n\t\tsearch_config\n\tfi\n}\n\nwrap_color \"info: reading kernel config from $CONFIG ...\" white\necho\n\necho 'Generally Necessary:'\n\ncgroup=\"\"\necho -n '- '\nif [ \"$(stat -f -c %t /sys/fs/cgroup 2>/dev/null)\" = \"63677270\" ]; then\n\twrap_good 'cgroup hierarchy' 'cgroupv2'\n\tcgroup=\"v2\"\nelse\n\tcgroupSubsystemDir=\"$(awk '/[, ](cpu|cpuacct|cpuset|devices|freezer|memory)[, ]/ && $3 == \"cgroup\" { print $2 }' /proc/mounts | head -n1)\"\n\tcgroupDir=\"$(dirname \"$cgroupSubsystemDir\")\"\n\tif [ -d \"$cgroupDir/cpu\" ] || [ -d \"$cgroupDir/cpuacct\" ] || [ -d \"$cgroupDir/cpuset\" ] || [ -d \"$cgroupDir/devices\" ] || [ -d \"$cgroupDir/freezer\" ] || [ -d \"$cgroupDir/memory\" ]; then\n\t\twrap_good 'cgroup hierarchy' 'properly mounted' \"[$cgroupDir]\"\n\t\tcgroup=\"v1\"\n\telse\n\t\tif [ \"$cgroupSubsystemDir\" ]; then\n\t\t\twrap_bad 'cgroup hierarchy' 'single mountpoint!' \"[$cgroupSubsystemDir]\"\n\t\telse\n\t\t\twrap_bad 'cgroup hierarchy' 'nonexistent??'\n\t\tfi\n\t\twrap_color '    (see https://github.com/tianon/cgroupfs-mount)' yellow\n\tfi\nfi\n\nif [ \"$(cat /sys/module/apparmor/parameters/enabled 2>/dev/null)\" = 'Y' ]; then\n\techo -n '- '\n\tif command -v apparmor_parser &>/dev/null; then\n\t\twrap_good 'apparmor' 'enabled and tools installed'\n\telse\n\t\twrap_bad 'apparmor' 'enabled, but apparmor_parser missing'\n\t\techo -n '    '\n\t\tif command -v apt-get &>/dev/null; then\n\t\t\twrap_color '(use \"apt-get install apparmor\" to fix this)' yellow\n\t\telif command -v yum &>/dev/null; then\n\t\t\twrap_color '(your best bet is \"yum install apparmor-parser\")' yellow\n\t\telse\n\t\t\twrap_color '(look for an \"apparmor\" package for your distribution)' yellow\n\t\tfi\n\tfi\nfi\n\nflags=(\n\tNAMESPACES {NET,PID,IPC,UTS}_NS\n\tCGROUPS CGROUP_CPUACCT CGROUP_DEVICE CGROUP_FREEZER CGROUP_SCHED CPUSETS MEMCG\n\tKEYS\n\tVETH BRIDGE BRIDGE_NETFILTER\n\tIP_NF_FILTER IP_NF_TARGET_MASQUERADE\n\tNETFILTER_XT_MATCH_{ADDRTYPE,COMMENT,CONNTRACK,IPVS}\n\tIP_NF_NAT NF_NAT\n\n\t# required for bind-mounting /dev/mqueue into containers\n\tPOSIX_MQUEUE\n\n\t# Most containers use overlayfs, and now runc itself uses it.\n\tOVERLAY_FS\n)\ncheck_flags \"${flags[@]}\"\n\n# Linux kernel commit 3007098494be.\nif kernel_ge 4 10 && [ $cgroup = \"v2\" ]; then\n\tcheck_flags CGROUP_BPF\nfi\n\n# Linux kernel commit 3bf195ae6037.\nif kernel_lt 5 1; then\n\tcheck_flags NF_NAT_IPV4\nfi\n\n# Linux kernel commit 4806e975729f99c7.\nif kernel_lt 5 2; then\n\tcheck_flags NF_NAT_NEEDED\nfi\n\necho\n\necho 'Optional Features:'\n{\n\tcheck_flags USER_NS\n\tcheck_distro_userns\n\n\tcheck_flags SECCOMP\n\tcheck_flags SECCOMP_FILTER\n\tcheck_flags CGROUP_PIDS\n\n\t# Linux kernel commit e55b9f96860f.\n\tif kernel_lt 6 1; then\n\t\tcheck_flags MEMCG_SWAP\n\tfi\n\t# Linux kernel commit 2d1c498072de.\n\tif kernel_lt 5 8; then\n\t\tcheck_flags MEMCG_SWAP_ENABLED\n\t\tif is_set MEMCG_SWAP && ! is_set MEMCG_SWAP_ENABLED; then\n\t\t\twrap_color '    (note that cgroup swap accounting is not enabled in your kernel config, you can enable it by setting boot option \"swapaccount=1\")' bold black\n\t\tfi\n\tfi\n}\n\n# Linux kernel commit d886f4e483ce.\nif kernel_lt 4 5; then\n\tcheck_flags MEMCG_KMEM\nfi\n\n# Linux kernel commit 5b1efc027c0b.\nif kernel_lt 3 19; then\n\tcheck_flags RESOURCE_COUNTERS\nfi\n\n# Linux kernel commit 86f8515f9721.\nif kernel_lt 3 14; then\n\tnetprio=NETPRIO_CGROUP\nelse\n\tnetprio=CGROUP_NET_PRIO\nfi\n\n# Linux kernel commit f382fb0bcef4.\nif kernel_lt 5 0; then\n\tcheck_flags IOSCHED_CFQ CFQ_GROUP_IOSCHED\nfi\n\n# Linux kernel commit 7caa47151ab2.\nif kernel_ge 5 4; then\n\tcheck_flags BLK_CGROUP_IOCOST\nfi\n\nflags=(\n\tBLK_CGROUP BLK_DEV_THROTTLING\n\tCGROUP_PERF\n\tCGROUP_HUGETLB\n\tNET_CLS_CGROUP \"$netprio\"\n\tCFS_BANDWIDTH FAIR_GROUP_SCHED RT_GROUP_SCHED\n\tIP_NF_TARGET_REDIRECT\n\tIP_VS\n\tIP_VS_NFCT\n\tIP_VS_PROTO_TCP\n\tIP_VS_PROTO_UDP\n\tIP_VS_RR\n\tSECURITY_SELINUX\n\tSECURITY_APPARMOR\n\tCHECKPOINT_RESTORE\n)\ncheck_flags \"${flags[@]}\"\n"
  },
  {
    "path": "script/keyring_addkey.sh",
    "content": "#!/bin/bash\n# Copyright (C) 2023 SUSE LLC.\n# Copyright (C) 2023 Open Containers 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\nset -Eeuxo pipefail\n\nroot=\"$(readlink -f \"$(dirname \"${BASH_SOURCE[0]}\")/..\")\"\nkeyring_file=\"$root/runc.keyring\"\n\nfunction bail() {\n\techo \"$@\" >&2\n\texit 1\n}\n\n[[ \"$#\" -eq 2 ]] || bail \"usage: $0 <github-handle> <keyid>\"\n\ngithub_handle=\"${1}\"\ngpg_keyid=\"${2}\"\n\ncat >>\"$keyring_file\" <<EOF\n$(gpg --list-keys \"$gpg_keyid\")\n\n$(gpg --armor --comment=\"github=$github_handle\" --export --export-options=export-minimal,export-clean \"$gpg_keyid\")\n\nEOF\n"
  },
  {
    "path": "script/keyring_validate.sh",
    "content": "#!/bin/bash\n# Copyright (C) 2023 SUSE LLC.\n# Copyright (C) 2023 Open Containers 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\nset -Eeuo pipefail\n\nproject=\"runc\"\nroot=\"$(readlink -f \"$(dirname \"${BASH_SOURCE[0]}\")/..\")\"\n\nfunction log() {\n\techo \"[*]\" \"$@\" >&2\n}\n\nfunction bail() {\n\tlog \"$@\"\n\texit 1\n}\n\n# Temporary GPG keyring for messing around with.\ntmp_gpgdir=\"$(mktemp -d --tmpdir \"$project-validate-tmpkeyring.XXXXXX\")\"\ntrap 'rm -r \"$tmp_gpgdir\"' EXIT\n\nfunction gpg_user() {\n\tlocal user=$1\n\tshift\n\tgpg --homedir=\"$tmp_gpgdir\" --no-default-keyring --keyring=\"$user.keyring\" \"$@\"\n}\n\n# Get the set of MAINTAINERS.\nreadarray -t maintainers < <(sed -E 's|.* <.*> \\(@?(.*)\\)$|\\1|' <\"$root/MAINTAINERS\")\necho \"------------------------------------------------------------\"\necho \"$project maintainers:\"\nprintf \" * %s\\n\" \"${maintainers[@]}\"\necho \"------------------------------------------------------------\"\n\n# Create a dummy gpg keyring from the set of MAINTAINERS.\nwhile IFS=\"\" read -r username || [ -n \"$username\" ]; do\n\tkeydata=\"$(curl -sSL \"https://github.com/$username.gpg\")\"\n\tif ! gpg_user \"$username\" --import <<<\"$keydata\"; then\n\t\tlog \"WARNING: $username does not have any GPG keys on GitHub.\"\n\tfi\ndone < <(printf '%s\\n' \"${maintainers[@]}\")\n\n# Make sure all of the keys in the keyring have a github=... comment.\nawk <\"$root/$project.keyring\" '\n\t/^-----BEGIN PGP PUBLIC KEY BLOCK-----$/ { key_idx++; in_pgp=1; has_comment=0; }\n\n\t# PGP comments are never broken up over several lines, and we only have one\n\t# comment entry in our keyring file anyway.\n\tin_pgp && /^Comment:.* github=\\w+.*/ { has_comment=1 }\n\n\t/^-----END PGP PUBLIC KEY BLOCK-----$/ {\n\t\tif (!has_comment) {\n\t\t\tprint \"[!] Key\", key_idx, \"in '$project'.keyring is missing a github= comment.\"\n\t\t\texit 1\n\t\t}\n\t}\n'\n\necho \"------------------------------------------------------------\"\necho \"$project release managers:\"\nsed -En \"s|^Comment:.* github=(\\w+).*| * \\1|p\" <\"$root/$project.keyring\" | sort -u\necho \"------------------------------------------------------------\"\ngpg --show-keys <\"$root/$project.keyring\"\necho \"------------------------------------------------------------\"\n\n# Check that each entry in the keyring is actually a maintainer's key.\nwhile IFS=\"\" read -d $'\\0' -r block || [ -n \"$block\" ]; do\n\tusername=\"$(sed -En \"s|^Comment:.* github=(\\w+).*|\\1|p\" <<<\"$block\")\"\n\n\t# FIXME: This is to work around codespell thinking that f-p-r is a\n\t# misspelling of some other word, and the lack of support for inline\n\t# ignores in codespell.\n\tfprfield=\"f\"\"p\"\"r\"\n\n\t# Check the username is actually a maintainer. This is just a sanity check,\n\t# since you can put whatever you like in the Comment field.\n\t[ -f \"$tmp_gpgdir/$username.keyring\" ] || bail \"User $username in runc.keyring is not a maintainer!\"\n\tgrep \"(@$username)$\" \"$root/MAINTAINERS\" >/dev/null || bail \"User $username in runc.keyring is not a maintainer!\"\n\n\t# Check that the key in the block actually matches a known key for that\n\t# maintainer. Note that a block can contain multiple keys, so we need to\n\t# check all of them. Since we have to handle multiple keys anyway, we'll\n\t# also verify all of the subkeys (this is simpler to implement anyway since\n\t# the --with-colons format outputs fingerprints for both primary and\n\t# subkeys in the same way).\n\t#\n\t# Fingerprints have a field 1 of $fprfield and field 10 containing the\n\t# fingerprint. See <https://github.com/gpg/gnupg/blob/master/doc/DETAILS>\n\t# for more details.\n\twhile IFS=\"\" read -r key || [ -n \"$key\" ]; do\n\t\tgpg_user \"$username\" --list-keys --with-colons | grep \"$fprfield:::::::::$key:\" >/dev/null ||\n\t\t\tbail \"(Sub?)Key $key in $project.keyring is NOT actually one of $username's keys!\"\n\t\tlog \"Successfully verified $username's (sub?)key $key is legitimate.\"\n\tdone < <(gpg --show-keys --with-colons <<<\"$block\" |\n\t\tgrep \"^$fprfield:\" | cut -d: -f10)\ndone < <(awk <\"$root/$project.keyring\" '\n\t/^-----BEGIN PGP PUBLIC KEY BLOCK-----$/ { in_block=1 }\n\tin_block { print }\n\t/^-----END PGP PUBLIC KEY BLOCK-----$/   { in_block=0; printf(\"\\0\"); }\n')\n"
  },
  {
    "path": "script/lib.sh",
    "content": "#!/bin/bash\n\n# get_platform computes the platform section of target triples on this OS.\nfunction get_platform() {\n\t# Fedora doesn't have ID_LIKE and only has ID=fedora, so we need to\n\t# construct a fake ID_LIKE to treat AlmaLinux and Fedora the same way.\n\tlocal ID_LIKE\n\t# shellcheck source=/etc/os-release disable=SC1091 # outside our sources\n\tID_LIKE=\"$(\n\t\tsource /etc/os-release\n\t\techo \"${ID:-} ${ID_LIKE:-}\"\n\t)\"\n\n\tlocal PLATFORM\n\tcase \"$ID_LIKE\" in\n\t*suse*)\n\t\tPLATFORM=suse-linux\n\t\t;;\n\t*rhel* | *fedora* | *centos*)\n\t\tPLATFORM=redhat-linux\n\t\t;;\n\t*)\n\t\tPLATFORM=linux-gnu\n\t\t;;\n\tesac\n\techo \"$PLATFORM\"\n}\n\n# set_cross_vars sets a few environment variables used for cross-compiling,\n# based on the architecture specified in $1.\nfunction set_cross_vars() {\n\tGOARCH=\"$1\" # default, may be overridden below\n\tunset GOARM\n\n\tPLATFORM=\"$(get_platform)\"\n\t[[ \"$PLATFORM\" == *suse* ]] && is_suse=1\n\n\tcase \"$1\" in\n\t386)\n\t\t# Always use the 64-bit compiler to build the 386 binary, which works\n\t\t# for the more common cross-build method for x86 (namely, the\n\t\t# equivalent of dpkg --add-architecture).\n\t\tlocal cpu_type\n\t\tif [ -v is_suse ]; then\n\t\t\tcpu_type=i586\n\t\telse\n\t\t\tcpu_type=i686\n\t\tfi\n\t\tHOST=x86_64-${PLATFORM}\n\t\tCFLAGS=\"-m32 -march=$cpu_type ${CFLAGS[*]}\"\n\t\t;;\n\tamd64)\n\t\tHOST=x86_64-${PLATFORM}\n\t\t;;\n\tarm64)\n\t\tHOST=aarch64-${PLATFORM}\n\t\t;;\n\tarmel)\n\t\tHOST=arm-${PLATFORM}eabi\n\t\tGOARCH=arm\n\t\tGOARM=5\n\t\t;;\n\tarmhf)\n\t\tHOST=arm-${PLATFORM}eabihf\n\t\tGOARCH=arm\n\t\tGOARM=7\n\t\t;;\n\tppc64le)\n\t\tHOST=powerpc64le-${PLATFORM}\n\t\t;;\n\triscv64)\n\t\tHOST=riscv64-${PLATFORM}\n\t\t;;\n\ts390x)\n\t\tHOST=s390x-${PLATFORM}\n\t\t;;\n\t*)\n\t\techo \"set_cross_vars: unsupported architecture: $1\" >&2\n\t\texit 1\n\t\t;;\n\tesac\n\n\tCC=\"${HOST:+$HOST-}gcc\"\n\tSTRIP=\"${HOST:+$HOST-}strip\"\n\n\texport HOST CFLAGS GOARM GOARCH CC STRIP\n}\n"
  },
  {
    "path": "script/prepare-cgroup-v2.sh",
    "content": "#!/bin/bash\n#\n# This script is used from ../Dockerfile as the ENTRYPOINT. It sets up cgroup\n# delegation for cgroup v2 to make sure runc tests can be properly run inside\n# a container.\n\n# Only do this for cgroup v2.\nif [ -f /sys/fs/cgroup/cgroup.controllers ]; then\n\tset -x\n\t# Move the current process to a sub-cgroup.\n\tmkdir /sys/fs/cgroup/init\n\techo 0 >/sys/fs/cgroup/init/cgroup.procs\n\t# Enable all controllers.\n\tsed 's/\\b\\w/+\\0/g' <\"/sys/fs/cgroup/cgroup.controllers\" >\"/sys/fs/cgroup/cgroup.subtree_control\"\nfi\n\nexec \"$@\"\n"
  },
  {
    "path": "script/release_build.sh",
    "content": "#!/bin/bash\n# Copyright (C) 2017 SUSE LLC.\n# Copyright (C) 2017-2021 Open Containers 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\nset -e\n\n## --->\n# Project-specific options and functions. In *theory* you shouldn't need to\n# touch anything else in this script in order to use this elsewhere.\n: \"${LIBSECCOMP_VERSION:=2.6.0}\"\n: \"${LIBPATHRS_VERSION:=0.2.4}\"\nproject=\"runc\"\nroot=\"$(readlink -f \"$(dirname \"${BASH_SOURCE[0]}\")/..\")\"\n\n# shellcheck source=./script/lib.sh\nsource \"$root/script/lib.sh\"\n\n# This function takes an output path as an argument, where the built\n# (preferably static) binary should be placed.\n# Parameters:\n#   $1 -- destination directory to place build artefacts to.\n#   $2 -- native architecture (a .suffix for a native binary file name).\n#   $@ -- additional architectures to cross-build for.\nfunction build_project() {\n\tlocal builddir\n\tbuilddir=\"$(dirname \"$1\")\"\n\tshift\n\tlocal native_arch=\"$1\"\n\tshift\n\tlocal arches=(\"$@\")\n\n\t# Assume that if /opt/runc-dylibs exists, then we are running via\n\t# Dockerfile, and thus seccomp is already built. Otherwise, build it now.\n\tlocal dylibdir=/opt/runc-dylibs\n\tif ! [ -d \"$dylibdir\" ]; then\n\t\ttrap 'rm -rf \"$dylibdir\"' EXIT\n\t\tdylibdir=\"$(mktemp -d)\"\n\t\t# Download and build libseccomp.\n\t\t\"$root/script/build-seccomp.sh\" \"$LIBSECCOMP_VERSION\" \"$dylibdir\" \"${arches[@]}\"\n\t\t# Download and build libpathrs.\n\t\t\"$root/script/build-libpathrs.sh\" \"$LIBPATHRS_VERSION\" \"$dylibdir\" \"${arches[@]}\"\n\tfi\n\n\t# For reproducible builds, add these to EXTRA_LDFLAGS:\n\t#  -w to disable DWARF generation;\n\t#  -s to disable symbol table;\n\t#  -buildid= to remove variable build id.\n\tlocal ldflags=\"-w -s -buildid=\"\n\t# Add -a to go build flags to make sure it links against\n\t# the provided libseccomp, not the system one (otherwise\n\t# it can reuse cached pkg-config results).\n\tlocal make_args=(COMMIT_NO= EXTRA_FLAGS=\"-a\" EXTRA_LDFLAGS=\"${ldflags}\" static)\n\n\t# Save the original cflags.\n\tlocal original_cflags=\"${CFLAGS:-}\"\n\n\t# Build for all requested architectures.\n\tlocal arch\n\tfor arch in \"${arches[@]}\"; do\n\t\t# Reset CFLAGS.\n\t\tCFLAGS=\"$original_cflags\"\n\t\tset_cross_vars \"$arch\"\n\t\tmake -C \"$root\" \\\n\t\t\tPKG_CONFIG_PATH=\"$dylibdir/$arch/lib/pkgconfig\" \\\n\t\t\t\"${make_args[@]}\"\n\t\t\"$STRIP\" \"$root/$project\"\n\t\tmv \"$root/$project\" \"$builddir/$project.$arch\"\n\tdone\n\n\t# Sanity check: make sure libseccomp version is as expected.\n\tlocal ver\n\tver=$(\"$builddir/$project.$native_arch\" --version | awk '$1 == \"libseccomp:\" {print $2}')\n\tif [ \"$ver\" != \"$LIBSECCOMP_VERSION\" ]; then\n\t\techo >&2 \"libseccomp version mismatch: want $LIBSECCOMP_VERSION, got $ver\"\n\t\texit 1\n\tfi\n\n\t# Copy dylib source tarballs.\n\tcp \"$dylibdir\"/src/* \"$builddir\"\n}\n\n# End of the easy-to-configure portion.\n## <---\n\n# Print usage information.\nfunction usage() {\n\techo \"usage: release_build.sh [-a <cross-arch>]... [-c <commit-ish>] [-H <hashcmd>]\" >&2\n\techo \"                        [-r <release-dir>] [-v <version>]\" >&2\n\texit 1\n}\n\n# Log something to stderr.\nfunction log() {\n\techo \"[*] $*\" >&2\n}\n\n# Log something to stderr and then exit with 0.\nfunction bail() {\n\tlog \"$@\"\n\texit 0\n}\n\n# When creating releases we need to build static binaries, an archive of the\n# current commit, and generate detached signatures for both.\ncommit=\"HEAD\"\nversion=\"\"\nreleasedir=\"\"\nhashcmd=\"\"\n# Always build a native binary.\nnative_arch=\"$(go env GOARCH || echo \"amd64\")\"\narches=(\"$native_arch\")\n\nwhile getopts \"a:c:H:hr:v:\" opt; do\n\tcase \"$opt\" in\n\ta)\n\t\t# Add architecture if not already present in arches.\n\t\tif ! (printf \"%s\\0\" \"${arches[@]}\" | grep -zqxF \"$OPTARG\"); then\n\t\t\tarches+=(\"$OPTARG\")\n\t\tfi\n\t\t;;\n\tc)\n\t\tcommit=\"$OPTARG\"\n\t\t;;\n\tH)\n\t\thashcmd=\"$OPTARG\"\n\t\t;;\n\th)\n\t\tusage\n\t\t;;\n\tr)\n\t\treleasedir=\"$OPTARG\"\n\t\t;;\n\tv)\n\t\tversion=\"$OPTARG\"\n\t\t;;\n\t:)\n\t\techo \"Missing argument: -$OPTARG\" >&2\n\t\tusage\n\t\t;;\n\t\\?)\n\t\techo \"Invalid option: -$OPTARG\" >&2\n\t\tusage\n\t\t;;\n\tesac\ndone\n\nversion=\"${version:-$(<\"$root/VERSION\")}\"\nreleasedir=\"${releasedir:-release/$version}\"\nhashcmd=\"${hashcmd:-sha256sum}\"\n\nlog \"creating $project release in '$releasedir'\"\nlog \"  version: $version\"\nlog \"   commit: $commit\"\nlog \"     hash: $hashcmd\"\n\n# Make explicit what we're doing.\nset -x\n\n# Make the release directory.\nrm -rf \"$releasedir\" && mkdir -p \"$releasedir\"\n\n# Build project.\nbuild_project \"$releasedir/$project\" \"$native_arch\" \"${arches[@]}\"\n\n# Generate new archive.\ngit archive --format=tar --prefix=\"$project-$version/\" \"$commit\" | xz >\"$releasedir/$project-$version.tar.xz\"\n\n# Generate sha256 checksums for binaries and libseccomp tarball.\n(\n\tcd \"$releasedir\"\n\t# Add hash of all architecture binaries ($project.$arch).\n\t\"$hashcmd\" \"${arches[@]/#/$project.}\" >>\"$project.$hashcmd\"\n\t# Add hash of tarball ($project-$version.tar.xz).\n\t\"$hashcmd\" \"$project-$version.tar.xz\" >>\"$project.$hashcmd\"\n)\n"
  },
  {
    "path": "script/release_sign.sh",
    "content": "#!/bin/bash\n# Copyright (C) 2017-2023 SUSE LLC.\n# Copyright (C) 2017-2023 Open Containers 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\nset -Eeuo pipefail\n\nproject=\"runc\"\nroot=\"$(readlink -f \"$(dirname \"${BASH_SOURCE[0]}\")/..\")\"\n\n# Print usage information.\nfunction usage() {\n\techo \"usage: release_sign.sh [-S <gpg-key-id>] [-H <hashcmd>]\" >&2\n\techo \"                       [-r <release-dir>] [-v <version>]\" >&2\n\texit 1\n}\n\n# Log something to stderr.\nfunction log() {\n\techo \"[*]\" \"$@\" >&2\n}\n\n# Log something to stderr and then exit with 0.\nfunction quit() {\n\tlog \"$@\"\n\texit 0\n}\n\n# Log something to stderr and then exit with 1.\nfunction bail() {\n\tlog \"$@\"\n\texit 1\n}\n\n# Conduct a sanity-check to make sure that GPG provided with the given\n# arguments can sign something. Inability to sign things is not a fatal error.\nfunction gpg_cansign() {\n\tgpg \"$@\" --clear-sign </dev/null >/dev/null\n}\n\n# When creating releases we need to build static binaries, an archive of the\n# current commit, and generate detached signatures for both.\nkeyid=\"\"\nversion=\"\"\nreleasedir=\"\"\nhashcmd=\"\"\n\nwhile getopts \"H:hr:S:v:\" opt; do\n\tcase \"$opt\" in\n\tH)\n\t\thashcmd=\"$OPTARG\"\n\t\t;;\n\th)\n\t\tusage\n\t\t;;\n\tr)\n\t\treleasedir=\"$OPTARG\"\n\t\t;;\n\tS)\n\t\tkeyid=\"$OPTARG\"\n\t\t;;\n\tv)\n\t\tversion=\"$OPTARG\"\n\t\t;;\n\t:)\n\t\techo \"Missing argument: -$OPTARG\" >&2\n\t\tusage\n\t\t;;\n\t\\?)\n\t\techo \"Invalid option: -$OPTARG\" >&2\n\t\tusage\n\t\t;;\n\tesac\ndone\n\nversion=\"${version:-$(<\"$root/VERSION\")}\"\nreleasedir=\"${releasedir:-release/$version}\"\nhashcmd=\"${hashcmd:-sha256sum}\"\n\nlog \"signing $project release in '$releasedir'\"\nlog \"      key: ${keyid:-DEFAULT}\"\nlog \"     hash: $hashcmd\"\n\n# Set up the gpgflags.\ngpgflags=()\n[[ \"$keyid\" ]] && gpgflags=(--default-key \"$keyid\")\ngpg_cansign \"${gpgflags[@]}\" || quit \"Could not find suitable GPG key, skipping signing step.\"\n\n# Make explicit what we're doing.\nset -x\n\n# Check that the keyid is actually in the $project.keyring by signing a piece\n# of dummy text then verifying it against the list of keys in that keyring.\ntmp_gpgdir=\"$(mktemp -d --tmpdir \"$project-sign-tmpkeyring.XXXXXX\")\"\ntrap 'rm -r \"$tmp_gpgdir\"' EXIT\n\ntmp_runc_gpgflags=(\"--homedir=$tmp_gpgdir\" \"--no-default-keyring\" \"--keyring=$project.keyring\")\ngpg \"${tmp_runc_gpgflags[@]}\" --import <\"$root/$project.keyring\"\n\ntmp_seccomp_gpgflags=(\"--homedir=$tmp_gpgdir\" \"--no-default-keyring\" \"--keyring=seccomp.keyring\" \"--keyserver=keys.openpgp.org\")\ngpg \"${tmp_seccomp_gpgflags[@]}\" --recv-keys 0x47A68FCE37C7D7024FD65E11356CE62C2B524099\ngpg \"${tmp_seccomp_gpgflags[@]}\" --recv-keys 0x7100AADFAE6E6E940D2E0AD655E45A5AE8CA7C8A\n\ntmp_libpathrs_gpgflags=(\"--homedir=$tmp_gpgdir\" \"--no-default-keyring\" \"--keyring=libpathrs.keyring\" \"--keyserver=keys.openpgp.org\")\ngpg \"${tmp_libpathrs_gpgflags[@]}\" --recv-keys 0xC9C370B246B09F6DBCFC744C34401015D1D2D386\n\ngpg \"${gpgflags[@]}\" --clear-sign <<<\"[This is test text used for $project release scripts. $(date --rfc-email)]\" |\n\tgpg \"${tmp_runc_gpgflags[@]}\" --verify || bail \"Signing key ${keyid:-DEFAULT} is not in trusted $project.keyring list!\"\n\n# Make sure the signer is okay with the list of keys in the keyring (once this\n# release is signed, distributions will trust this keyring).\ncat >&2 <<EOF\n== PLEASE VERIFY THE FOLLOWING KEYS ==\n\nThe sources for this release will contain the following signing keys as\n\"trusted\", meaning that distributions may trust the keys to sign future\nreleases. Please make sure that only authorised users' keys are listed.\n\n$(gpg \"${tmp_runc_gpgflags[@]}\" --list-keys)\n\n[ Press ENTER to continue. ]\nEOF\nread -r\n\n# Only needed for local signing -- change the owner since by default it's built\n# inside a container which means it'll have the wrong owner and permissions.\n[ -w \"$releasedir\" ] || sudo chown -R \"$(id -u):$(id -g)\" \"$releasedir\"\n\n# Sign everything.\nfor bin in \"$releasedir/$project\"*; do\n\t[[ \"$(basename \"$bin\")\" == \"$project.$hashcmd\" ]] && continue # skip hash\n\tgpg \"${gpgflags[@]}\" --detach-sign --armor \"$bin\"\ndone\ngpg \"${gpgflags[@]}\" --clear-sign --armor \\\n\t--output \"$releasedir/$project.$hashcmd\"{.tmp,} &&\n\tmv \"$releasedir/$project.$hashcmd\"{.tmp,}\n\n# Verify that all the signatures and shasum are correct.\npushd \"$releasedir\"\n\n# Verify project-signed detached signatures.\nfind . -name \"$project.*.asc\" -print0 | xargs -0 -L1 gpg \"${tmp_runc_gpgflags[@]}\" --verify --\n\n# Verify shasum.\n\"$hashcmd\" -c \"$project.$hashcmd\"\ngpg \"${tmp_runc_gpgflags[@]}\" --verify \"$project.$hashcmd\"\n\n# Verify seccomp tarball.\ngpg \"${tmp_seccomp_gpgflags[@]}\" --verify libseccomp*.asc\n\n# Verify libpathrs tarball.\ngpg \"${tmp_libpathrs_gpgflags[@]}\" --verify libpathrs*.asc\n\npopd\n"
  },
  {
    "path": "script/setup_host_fedora.sh",
    "content": "#!/bin/bash\nset -eux -o pipefail\nDNF=(dnf -y --setopt=install_weak_deps=False --setopt=tsflags=nodocs --exclude=\"kernel,kernel-core\")\nRPMS=(bats git-core glibc-static golang jq libseccomp-devel cargo lld make wget)\n# Work around dnf mirror failures by retrying a few times.\nfor i in $(seq 0 2); do\n\tsleep \"$i\"\n\t\"${DNF[@]}\" update && \"${DNF[@]}\" install \"${RPMS[@]}\" && break\ndone\n\n# criu-4.1-1 has a known bug (https://github.com/checkpoint-restore/criu/issues/2650)\n# which is fixed in criu-4.1-2 (currently in updates-testing). TODO: remove this later.\nif [[ $(rpm -q criu) == \"criu-4.1-1.fc\"* ]]; then\n\t\"${DNF[@]}\" --enablerepo=updates-testing update criu\nfi\n\ndnf clean all\n\nSCRIPTDIR=\"$(dirname \"${BASH_SOURCE[0]}\")\"\n\nLIBPATHRS_VERSION=\"0.2.4\"\n\"$SCRIPTDIR\"/build-libpathrs.sh \"$LIBPATHRS_VERSION\" /usr\n\n# To avoid \"avc: denied { nosuid_transition }\" from SELinux as we run tests on /tmp.\nmount -o remount,suid /tmp\n\n# Setup rootless user.\n\"$SCRIPTDIR\"/setup_rootless.sh\n\n# Delegate cgroup v2 controllers to rootless user via --systemd-cgroup\nmkdir -p /etc/systemd/system/user@.service.d\ncat >/etc/systemd/system/user@.service.d/delegate.conf <<EOF\n[Service]\n# default: Delegate=pids memory\n# NOTE: delegation of cpuset requires systemd >= 244 (Fedora >= 32, Ubuntu >= 20.04).\nDelegate=yes\nEOF\nsystemctl daemon-reload\n"
  },
  {
    "path": "script/setup_rootless.sh",
    "content": "#!/bin/bash\nset -eux -o pipefail\n\n# Add a user for rootless tests.\nsudo useradd -u2000 -m -d/home/rootless -s/bin/bash rootless\n\n# Allow both the current user and rootless itself to use\n# ssh rootless@localhost in tests/rootless.sh.\n# shellcheck disable=SC2174 # Silence \"-m only applies to the deepest directory\".\nmkdir -p -m 0700 \"$HOME/.ssh\"\nssh-keygen -t ecdsa -N \"\" -f \"$HOME/.ssh/rootless.key\"\nsudo mkdir -p -m 0700 /home/rootless/.ssh\nsudo cp \"$HOME/.ssh/rootless.key\" /home/rootless/.ssh/id_ecdsa\nsudo cp \"$HOME/.ssh/rootless.key.pub\" /home/rootless/.ssh/authorized_keys\nsudo chown -R rootless:rootless /home/rootless\n"
  },
  {
    "path": "signals.go",
    "content": "package main\n\nimport (\n\t\"os\"\n\t\"os/signal\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/opencontainers/runc/libcontainer/system\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst signalBufferSize = 2048\n\n// newSignalHandler returns a signal handler for processing SIGCHLD and SIGWINCH signals\n// while still forwarding all other signals to the process.\n// If notifySocket is present, use it to read systemd notifications from the container and\n// forward them to notifySocketHost.\nfunc newSignalHandler(enableSubreaper bool, notifySocket *notifySocket) chan *signalHandler {\n\tif enableSubreaper {\n\t\t// set us as the subreaper before registering the signal handler for the container\n\t\tif err := system.SetSubreaper(1); err != nil {\n\t\t\tlogrus.Warn(err)\n\t\t}\n\t}\n\thandler := make(chan *signalHandler)\n\t// signal.Notify is actually quite expensive, as it has to configure the\n\t// signal mask and add signal handlers for all signals (all ~65 of them).\n\t// So, defer this to a background thread while doing the rest of the io/tty\n\t// setup.\n\tgo func() {\n\t\t// ensure that we have a large buffer size so that we do not miss any\n\t\t// signals in case we are not processing them fast enough.\n\t\ts := make(chan os.Signal, signalBufferSize)\n\t\t// handle all signals for the process.\n\t\tsignal.Notify(s)\n\t\thandler <- &signalHandler{\n\t\t\tsignals:      s,\n\t\t\tnotifySocket: notifySocket,\n\t\t}\n\t}()\n\treturn handler\n}\n\n// exit models a process exit status with the pid and\n// exit status.\ntype exit struct {\n\tpid    int\n\tstatus int\n}\n\ntype signalHandler struct {\n\tsignals      chan os.Signal\n\tnotifySocket *notifySocket\n}\n\n// forward handles the main signal event loop forwarding, resizing, or reaping depending\n// on the signal received.\nfunc (h *signalHandler) forward(process *libcontainer.Process, tty *tty, detach bool) (int, error) {\n\t// make sure we know the pid of our main process so that we can return\n\t// after it dies.\n\tif detach && h.notifySocket == nil {\n\t\treturn 0, nil\n\t}\n\n\tpid1, err := process.Pid()\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\tif h.notifySocket != nil {\n\t\tif detach {\n\t\t\t_ = h.notifySocket.run(pid1)\n\t\t\treturn 0, nil\n\t\t}\n\t\t_ = h.notifySocket.run(os.Getpid())\n\t\tgo func() { _ = h.notifySocket.run(0) }()\n\t}\n\n\t// Perform the initial tty resize. Always ignore errors resizing because\n\t// stdout might have disappeared (due to races with when SIGHUP is sent).\n\t_ = tty.resize()\n\t// Handle and forward signals.\n\tfor s := range h.signals {\n\t\tswitch s {\n\t\tcase unix.SIGWINCH:\n\t\t\t// Ignore errors resizing, as above.\n\t\t\t_ = tty.resize()\n\t\tcase unix.SIGCHLD:\n\t\t\texits, err := h.reap()\n\t\t\tif err != nil {\n\t\t\t\tlogrus.Error(err)\n\t\t\t}\n\t\t\tfor _, e := range exits {\n\t\t\t\tlogrus.WithFields(logrus.Fields{\n\t\t\t\t\t\"pid\":    e.pid,\n\t\t\t\t\t\"status\": e.status,\n\t\t\t\t}).Debug(\"process exited\")\n\t\t\t\tif e.pid == pid1 {\n\t\t\t\t\t// call Wait() on the process even though we already have the exit\n\t\t\t\t\t// status because we must ensure that any of the go specific process\n\t\t\t\t\t// fun such as flushing pipes are complete before we return.\n\t\t\t\t\t_, _ = process.Wait()\n\t\t\t\t\treturn e.status, nil\n\t\t\t\t}\n\t\t\t}\n\t\tcase unix.SIGURG:\n\t\t\t// SIGURG is used by go runtime for async preemptive\n\t\t\t// scheduling, so runc receives it from time to time,\n\t\t\t// and it should not be forwarded to the container.\n\t\t\t// Do nothing.\n\t\tdefault:\n\t\t\tus := s.(unix.Signal)\n\t\t\tlogrus.Debugf(\"forwarding signal %d (%s) to %d\", int(us), unix.SignalName(us), pid1)\n\t\t\tif err := process.Signal(s); err != nil {\n\t\t\t\tlogrus.Error(err)\n\t\t\t}\n\t\t}\n\t}\n\treturn -1, nil\n}\n\n// reap runs wait4 in a loop until we have finished processing any existing exits\n// then returns all exits to the main event loop for further processing.\nfunc (h *signalHandler) reap() (exits []exit, err error) {\n\tvar (\n\t\tws  unix.WaitStatus\n\t\trus unix.Rusage\n\t)\n\tfor {\n\t\tpid, err := unix.Wait4(-1, &ws, unix.WNOHANG, &rus)\n\t\tif err != nil {\n\t\t\tif err == unix.ECHILD {\n\t\t\t\treturn exits, nil\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\t\tif pid <= 0 {\n\t\t\treturn exits, nil\n\t\t}\n\t\texits = append(exits, exit{\n\t\t\tpid:    pid,\n\t\t\tstatus: utils.ExitStatus(ws),\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "spec.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/specconv\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\t\"github.com/urfave/cli\"\n)\n\nvar specCommand = cli.Command{\n\tName:      \"spec\",\n\tUsage:     \"create a new specification file\",\n\tArgsUsage: \"\",\n\tDescription: `The spec command creates the new specification file named \"` + specConfig + `\" for\nthe bundle.\n\nThe spec generated is just a starter file. Editing of the spec is required to\nachieve desired results. For example, the newly generated spec includes an args\nparameter that is initially set to call the \"sh\" command when the container is\nstarted. Calling \"sh\" may work for an ubuntu container or busybox, but will not\nwork for containers that do not include the \"sh\" program.\n\nEXAMPLE:\n  To run docker's hello-world container one needs to set the args parameter\nin the spec to call hello. This can be done using the sed command or a text\neditor. The following commands create a bundle for hello-world, change the\ndefault args parameter in the spec from \"sh\" to \"/hello\", then run the hello\ncommand in a new hello-world container named container1:\n\n    mkdir hello\n    cd hello\n    docker pull hello-world\n    docker export $(docker create hello-world) > hello-world.tar\n    mkdir rootfs\n    tar -C rootfs -xf hello-world.tar\n    runc spec\n    sed -i 's;\"sh\";\"/hello\";' ` + specConfig + `\n    runc run container1\n\nIn the run command above, \"container1\" is the name for the instance of the\ncontainer that you are starting. The name you provide for the container instance\nmust be unique on your host.\n\nAn alternative for generating a customized spec config is to use \"oci-runtime-tool\", the\nsub-command \"oci-runtime-tool generate\" has lots of options that can be used to do any\ncustomizations as you want, see runtime-tools (https://github.com/opencontainers/runtime-tools)\nto get more information.\n\nWhen starting a container through runc, runc needs root privilege. If not\nalready running as root, you can use sudo to give runc root privilege. For\nexample: \"sudo runc start container1\" will give runc root privilege to start the\ncontainer on your host.\n\nAlternatively, you can start a rootless container, which has the ability to run\nwithout root privileges. For this to work, the specification file needs to be\nadjusted accordingly. You can pass the parameter --rootless to this command to\ngenerate a proper rootless spec file.\n\nNote that --rootless is not needed when you execute runc as the root in a user namespace\ncreated by an unprivileged user.\n`,\n\tFlags: []cli.Flag{\n\t\tcli.StringFlag{\n\t\t\tName:  \"bundle, b\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"path to the root of the bundle directory\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"rootless\",\n\t\t\tUsage: \"generate a configuration for a rootless container\",\n\t\t},\n\t},\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 0, exactArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tspec := specconv.Example()\n\n\t\trootless := context.Bool(\"rootless\")\n\t\tif rootless {\n\t\t\tspecconv.ToRootless(spec)\n\t\t}\n\n\t\tcheckNoFile := func(name string) error {\n\t\t\t_, err := os.Stat(name)\n\t\t\tif err == nil {\n\t\t\t\treturn fmt.Errorf(\"File %s exists. Remove it first\", name)\n\t\t\t}\n\t\t\tif !errors.Is(err, os.ErrNotExist) {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t\tbundle := context.String(\"bundle\")\n\t\tif bundle != \"\" {\n\t\t\tif err := os.Chdir(bundle); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tif err := checkNoFile(specConfig); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdata, err := json.MarshalIndent(spec, \"\", \"\\t\")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn os.WriteFile(specConfig, data, 0o666)\n\t},\n}\n\n// loadSpec loads the specification from the provided path.\nfunc loadSpec(cPath string) (spec *specs.Spec, err error) {\n\tcf, err := os.Open(cPath)\n\tif err != nil {\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\treturn nil, fmt.Errorf(\"JSON specification file %s not found\", cPath)\n\t\t}\n\t\treturn nil, err\n\t}\n\tdefer cf.Close()\n\n\tif err = json.NewDecoder(cf).Decode(&spec); err != nil {\n\t\treturn nil, err\n\t}\n\tif spec == nil {\n\t\treturn nil, errors.New(\"config cannot be null\")\n\t}\n\treturn spec, validateProcessSpec(spec.Process)\n}\n\nfunc createLibContainerRlimit(rlimit specs.POSIXRlimit) (configs.Rlimit, error) {\n\trl, err := strToRlimit(rlimit.Type)\n\tif err != nil {\n\t\treturn configs.Rlimit{}, err\n\t}\n\treturn configs.Rlimit{\n\t\tType: rl,\n\t\tHard: rlimit.Hard,\n\t\tSoft: rlimit.Soft,\n\t}, nil\n}\n"
  },
  {
    "path": "start.go",
    "content": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/urfave/cli\"\n)\n\nvar startCommand = cli.Command{\n\tName:  \"start\",\n\tUsage: \"executes the user defined process in a created container\",\n\tArgsUsage: `<container-id>\n\nWhere \"<container-id>\" is your name for the instance of the container that you\nare starting. The name you provide for the container instance must be unique on\nyour host.`,\n\tDescription: `The start command executes the user defined process in a created container.`,\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 1, exactArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcontainer, err := getContainer(context)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstatus, err := container.Status()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch status {\n\t\tcase libcontainer.Created:\n\t\t\tnotifySocket, err := notifySocketStart(context, os.Getenv(\"NOTIFY_SOCKET\"), container.ID())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif err := container.Exec(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif notifySocket != nil {\n\t\t\t\treturn notifySocket.waitForContainer(container)\n\t\t\t}\n\t\t\treturn nil\n\t\tcase libcontainer.Stopped:\n\t\t\treturn errors.New(\"cannot start a container that has stopped\")\n\t\tcase libcontainer.Running:\n\t\t\treturn errors.New(\"cannot start an already running container\")\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"cannot start a container in the %s state\", status)\n\t\t}\n\t},\n}\n"
  },
  {
    "path": "state.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"os\"\n\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n\t\"github.com/urfave/cli\"\n)\n\nvar stateCommand = cli.Command{\n\tName:  \"state\",\n\tUsage: \"output the state of a container\",\n\tArgsUsage: `<container-id>\n\nWhere \"<container-id>\" is your name for the instance of the container.`,\n\tDescription: `The state command outputs current state information for the\ninstance of a container.`,\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 1, exactArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcontainer, err := getContainer(context)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcontainerStatus, err := container.Status()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstate, err := container.State()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpid := state.BaseState.InitProcessPid\n\t\tif containerStatus == libcontainer.Stopped {\n\t\t\tpid = 0\n\t\t}\n\t\tbundle, annotations := utils.Annotations(state.Config.Labels)\n\t\tcs := containerState{\n\t\t\tVersion:        state.BaseState.Config.Version,\n\t\t\tID:             state.BaseState.ID,\n\t\t\tInitProcessPid: pid,\n\t\t\tStatus:         containerStatus.String(),\n\t\t\tBundle:         bundle,\n\t\t\tRootfs:         state.BaseState.Config.Rootfs,\n\t\t\tCreated:        state.BaseState.Created,\n\t\t\tAnnotations:    annotations,\n\t\t}\n\t\tdata, err := json.MarshalIndent(cs, \"\", \"  \")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tos.Stdout.Write(data)\n\t\treturn nil\n\t},\n}\n"
  },
  {
    "path": "tests/cmd/README.md",
    "content": "These are helpers used by [integration tests](/tests/integration).\n\nThey are compiled from the top-level Makefile via `make test-binaries`,\nand the resulting binaries can be found in `./_bin`.\n"
  },
  {
    "path": "tests/cmd/fs-idmap/fs-idmap.go",
    "content": "// fs-idmap is a command-line tool to detect if a filesystem associated with a\n// given path supports id-mapped mounts.\n//\n// This tool is only intended to be used within runc's integration tests.\npackage main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"syscall\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc main() {\n\tif len(os.Args) != 2 {\n\t\tfmt.Fprintln(os.Stderr, \"usage:\", os.Args[0], \"path_to_mount_set_attr\")\n\t\tos.Exit(1)\n\t}\n\tsrc := os.Args[1]\n\tif err := supportsIDMap(src); err != nil {\n\t\tfmt.Fprintln(os.Stderr, \"fatal error:\", err)\n\t\tos.Exit(1)\n\t}\n}\n\nfunc supportsIDMap(src string) error {\n\ttreeFD, err := unix.OpenTree(unix.AT_FDCWD, src, uint(unix.OPEN_TREE_CLONE|unix.OPEN_TREE_CLOEXEC|unix.AT_EMPTY_PATH))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error calling open_tree %q: %w\", src, err)\n\t}\n\tdefer unix.Close(treeFD)\n\n\tcmd := exec.Command(\"sleep\", \"5\")\n\tcmd.SysProcAttr = &syscall.SysProcAttr{\n\t\tCloneflags:  syscall.CLONE_NEWUSER,\n\t\tUidMappings: []syscall.SysProcIDMap{{ContainerID: 0, HostID: 65536, Size: 65536}},\n\t\tGidMappings: []syscall.SysProcIDMap{{ContainerID: 0, HostID: 65536, Size: 65536}},\n\t}\n\tif err := cmd.Start(); err != nil {\n\t\treturn fmt.Errorf(\"failed to run the helper binary: %w\", err)\n\t}\n\tdefer func() {\n\t\t_ = cmd.Process.Kill()\n\t\t_ = cmd.Wait()\n\t}()\n\n\tpath := fmt.Sprintf(\"/proc/%d/ns/user\", cmd.Process.Pid)\n\tvar userNsFile *os.File\n\tif userNsFile, err = os.Open(path); err != nil {\n\t\treturn fmt.Errorf(\"unable to get user ns file descriptor: %w\", err)\n\t}\n\tdefer userNsFile.Close()\n\n\tattr := unix.MountAttr{\n\t\tAttr_set:  unix.MOUNT_ATTR_IDMAP,\n\t\tUserns_fd: uint64(userNsFile.Fd()),\n\t}\n\tif err := unix.MountSetattr(treeFD, \"\", unix.AT_EMPTY_PATH, &attr); err != nil {\n\t\treturn fmt.Errorf(\"error calling mount_setattr: %w\", err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "tests/cmd/key_label/key_label.go",
    "content": "// key_label is a simple program to print the current session keyring name and\n// its security label, to be run inside container (see selinux.bats). Can be\n// thought of poor man's keyctl. Written in Go so we can have a static binary\n// (a program in C would require libkeyutils which is usually provided only as\n// a dynamic library).\n//\n// This tool is only intended to be used within runc's integration tests.\npackage main\n\nimport (\n\t\"log\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc main() {\n\tid, err := unix.KeyctlGetKeyringID(unix.KEY_SPEC_SESSION_KEYRING, false)\n\tif err != nil {\n\t\tlog.Fatalf(\"GetKeyringID: %v\", err)\n\t}\n\n\tdesc, err := unix.KeyctlString(unix.KEYCTL_DESCRIBE, id)\n\tif err != nil {\n\t\tlog.Fatalf(\"KeyctlDescribe: %v\", err)\n\t}\n\t// keyring;1000;1000;3f030000;_ses\n\tname := desc[strings.LastIndexByte(desc, ';')+1:]\n\n\tlabel, err := unix.KeyctlString(unix.KEYCTL_GET_SECURITY, id)\n\tif err != nil {\n\t\tlog.Fatalf(\"KeyctlGetSecurity: %v\", err)\n\t}\n\n\tprintln(name, label)\n}\n"
  },
  {
    "path": "tests/cmd/pidfd-kill/pidfd-kill.go",
    "content": "// pidfd-kill is a command-line tool to send signals to processes using pidfds\n// passed through a unix socket.\n//\n// This tool is only intended to be used within runc's integration tests.\npackage main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"os/signal\"\n\n\t\"github.com/urfave/cli\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n)\n\nconst (\n\tusage = `Open Container Initiative tests/cmd/pidfd-kill\n\npidfd-kill is an implementation of a consumer of runC's --pidfd-socket API.\nAfter received SIGTERM, pidfd-kill sends the given signal to init process by\npidfd received from --pidfd-socket.\n\nTo use pidfd-kill, just specify a socket path at which you want to receive\npidfd:\n\n    $ pidfd-kill [--signal KILL] socket.sock\n`\n)\n\nfunc main() {\n\tapp := cli.NewApp()\n\tapp.Name = \"pidfd-kill\"\n\tapp.Usage = usage\n\n\tapp.Flags = []cli.Flag{\n\t\tcli.StringFlag{\n\t\t\tName:  \"signal\",\n\t\t\tValue: \"SIGKILL\",\n\t\t\tUsage: \"Signal to send to the init process\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"pid-file\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"Path to write the pidfd-kill process ID to\",\n\t\t},\n\t}\n\n\tapp.Action = func(ctx *cli.Context) error {\n\t\targs := ctx.Args()\n\t\tif len(args) != 1 {\n\t\t\treturn errors.New(\"required a single socket path\")\n\t\t}\n\n\t\tsocketFile := ctx.Args()[0]\n\n\t\tpidFile := ctx.String(\"pid-file\")\n\t\tif pidFile != \"\" {\n\t\t\tpid := fmt.Sprintf(\"%d\\n\", os.Getpid())\n\t\t\tif err := os.WriteFile(pidFile, []byte(pid), 0o644); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tdefer os.Remove(pidFile)\n\t\t}\n\n\t\tsigStr := ctx.String(\"signal\")\n\t\tif sigStr == \"\" {\n\t\t\tsigStr = \"SIGKILL\"\n\t\t}\n\t\tsig := unix.SignalNum(sigStr)\n\n\t\tpidfdFile, err := recvPidfd(socketFile)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer pidfdFile.Close()\n\n\t\tsignalCh := make(chan os.Signal, 16)\n\t\tsignal.Notify(signalCh, unix.SIGTERM)\n\t\t<-signalCh\n\n\t\treturn unix.PidfdSendSignal(int(pidfdFile.Fd()), sig, nil, 0)\n\t}\n\tif err := app.Run(os.Args); err != nil {\n\t\tfmt.Fprintln(os.Stderr, \"fatal error:\", err)\n\t\tos.Exit(1)\n\t}\n}\n\nfunc recvPidfd(socketFile string) (*os.File, error) {\n\tln, err := net.Listen(\"unix\", socketFile)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer ln.Close()\n\n\tconn, err := ln.Accept()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer conn.Close()\n\n\tsocket, err := conn.(*net.UnixConn).File()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer socket.Close()\n\n\treturn utils.RecvFile(socket)\n}\n"
  },
  {
    "path": "tests/cmd/recvtty/recvtty.go",
    "content": "/*\n * Copyright 2016 SUSE LLC\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// recvtty is a sample implementation of the consumer side of the\n// --console-socket interface for runc. It supports forwarding console events\n// to and from the container process, as well as acting like a /dev/null\n// black-hole.\n//\n// This tool is only really intended to be used within runc's integration\n// tests, but can be used as an example of how the --console-socket protocol\n// works.\npackage main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/containerd/console\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n\t\"github.com/urfave/cli\"\n)\n\n// version will be populated by the Makefile, read from\n// VERSION file of the source code.\nvar version = \"\"\n\n// gitCommit will be the hash that the binary was built from\n// and will be populated by the Makefile\nvar gitCommit = \"\"\n\nconst (\n\tusage = `Open Container Initiative tests/cmd/recvtty\n\nrecvtty is a reference implementation of a consumer of runC's --console-socket\nAPI. It has two main modes of operation:\n\n  * single: Only permit one terminal to be sent to the socket, which is\n\tthen hooked up to the stdio of the recvtty process. This is useful\n\tfor rudimentary shell management of a container.\n\n  * null: Permit as many terminals to be sent to the socket, but they\n\tare read to /dev/null. This is used for testing, and imitates the\n\told runC API's --console=/dev/pts/ptmx hack which would allow for a\n\tsimilar trick. This is probably not what you want to use, unless\n\tyou're doing something like our bats integration tests.\n\nTo use recvtty, just specify a socket path at which you want to receive\nterminals:\n\n    $ recvtty [--mode <single|null>] socket.sock\n`\n)\n\nfunc bail(err error) {\n\tfmt.Fprintf(os.Stderr, \"[recvtty] fatal error: %v\\n\", err)\n\tos.Exit(1)\n}\n\nfunc handleSingle(path string, noStdin bool) error {\n\t// Open a socket.\n\tln, err := net.Listen(\"unix\", path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer ln.Close()\n\n\t// We only accept a single connection, since we can only really have\n\t// one reader for os.Stdin. Plus this is all a PoC.\n\tconn, err := ln.Accept()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer conn.Close()\n\n\t// Close ln, to allow for other instances to take over.\n\tln.Close()\n\n\tsocket, err := conn.(*net.UnixConn).File()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer socket.Close()\n\n\t// Get the master file descriptor from runC.\n\tmaster, err := utils.RecvFile(socket)\n\tif err != nil {\n\t\treturn err\n\t}\n\tc, err := console.ConsoleFromFile(master)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := console.ClearONLCR(c.Fd()); err != nil {\n\t\treturn err\n\t}\n\n\t// Copy from our stdio to the master fd.\n\tvar (\n\t\twg            sync.WaitGroup\n\t\tinErr, outErr error\n\t)\n\twg.Add(1)\n\tgo func() {\n\t\t_, outErr = io.Copy(os.Stdout, c)\n\t\twg.Done()\n\t}()\n\tif !noStdin {\n\t\twg.Add(1)\n\t\tgo func() {\n\t\t\t_, inErr = io.Copy(c, os.Stdin)\n\t\t\twg.Done()\n\t\t}()\n\t}\n\n\t// Only close the master fd once we've stopped copying.\n\twg.Wait()\n\tc.Close()\n\n\tif outErr != nil {\n\t\treturn outErr\n\t}\n\n\treturn inErr\n}\n\nfunc handleNull(path string) error {\n\t// Open a socket.\n\tln, err := net.Listen(\"unix\", path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer ln.Close()\n\n\t// As opposed to handleSingle we accept as many connections as we get, but\n\t// we don't interact with Stdin at all (and we copy stdout to /dev/null).\n\tfor {\n\t\tconn, err := ln.Accept()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tgo func(conn net.Conn) {\n\t\t\t// Don't leave references lying around.\n\t\t\tdefer conn.Close()\n\n\t\t\tsocket, err := conn.(*net.UnixConn).File()\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tdefer socket.Close()\n\n\t\t\t// Get the master file descriptor from runC.\n\t\t\tmaster, err := utils.RecvFile(socket)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t_, _ = io.Copy(io.Discard, master)\n\t\t}(conn)\n\t}\n}\n\nfunc main() {\n\tapp := cli.NewApp()\n\tapp.Name = \"recvtty\"\n\tapp.Usage = usage\n\n\t// Set version to be the same as runC.\n\tvar v []string\n\tif version != \"\" {\n\t\tv = append(v, version)\n\t}\n\tif gitCommit != \"\" {\n\t\tv = append(v, \"commit: \"+gitCommit)\n\t}\n\tapp.Version = strings.Join(v, \"\\n\")\n\n\t// Set the flags.\n\tapp.Flags = []cli.Flag{\n\t\tcli.StringFlag{\n\t\t\tName:  \"mode, m\",\n\t\t\tValue: \"single\",\n\t\t\tUsage: \"Mode of operation (single or null)\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"pid-file\",\n\t\t\tValue: \"\",\n\t\t\tUsage: \"Path to write daemon process ID to\",\n\t\t},\n\t\tcli.BoolFlag{\n\t\t\tName:  \"no-stdin\",\n\t\t\tUsage: \"Disable stdin handling (no-op for null mode)\",\n\t\t},\n\t}\n\n\tapp.Action = func(ctx *cli.Context) error {\n\t\targs := ctx.Args()\n\t\tif len(args) != 1 {\n\t\t\treturn errors.New(\"need to specify a single socket path\")\n\t\t}\n\t\tpath := ctx.Args()[0]\n\n\t\tpidPath := ctx.String(\"pid-file\")\n\t\tif pidPath != \"\" {\n\t\t\tpid := fmt.Sprintf(\"%d\\n\", os.Getpid())\n\t\t\tif err := os.WriteFile(pidPath, []byte(pid), 0o644); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tnoStdin := ctx.Bool(\"no-stdin\")\n\t\tswitch ctx.String(\"mode\") {\n\t\tcase \"single\":\n\t\t\tif err := handleSingle(path, noStdin); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase \"null\":\n\t\t\tif err := handleNull(path); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"need to select a valid mode: %s\", ctx.String(\"mode\"))\n\t\t}\n\t\treturn nil\n\t}\n\tif err := app.Run(os.Args); err != nil {\n\t\tbail(err)\n\t}\n}\n"
  },
  {
    "path": "tests/cmd/remap-rootfs/remap-rootfs.go",
    "content": "// remap-rootfs is a command-line tool to remap the ownership of an OCI\n// bundle's rootfs to match the user namespace id-mapping of the bundle's\n// config.json.\n//\n// This tool is only intended to be used within runc's integration tests.\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"syscall\"\n\n\t\"github.com/urfave/cli\"\n\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n)\n\nconst usage = `tests/cmd/remap-rootfs\n\nremap-rootfs is a helper tool to remap the root filesystem of a Open Container\nInitiative bundle using user namespaces such that the file owners are remapped\nfrom \"host\" mappings to the user namespace's mappings.\n\nEffectively, this is a slightly more complicated 'chown -R', and is primarily\nused within runc's integration tests to remap the test filesystem to match the\ntest user namespace. Note that calling remap-rootfs multiple times, or changing\nthe mapping and then calling remap-rootfs will likely produce incorrect results\nbecause we do not \"un-map\" any pre-applied mappings from previous remap-rootfs\ncalls.\n\nNote that the bundle is assumed to be produced by a trusted source, and thus\nmalicious configuration files will likely not be handled safely.\n\nTo use remap-rootfs, simply pass it the path to an OCI bundle (a directory\ncontaining a config.json):\n\n    $ sudo remap-rootfs ./bundle\n`\n\nfunc toHostID(mappings []specs.LinuxIDMapping, id uint32) (int, bool) {\n\tfor _, m := range mappings {\n\t\tif m.ContainerID <= id && id < m.ContainerID+m.Size {\n\t\t\treturn int(m.HostID + id), true\n\t\t}\n\t}\n\treturn -1, false\n}\n\ntype inodeID struct {\n\tDev, Ino uint64\n}\n\nfunc toInodeID(st *syscall.Stat_t) inodeID {\n\treturn inodeID{Dev: uint64(st.Dev), Ino: st.Ino} //nolint:unconvert // Dev is uint32 on e.g. MIPS.\n}\n\nfunc remapRootfs(root string, uidMap, gidMap []specs.LinuxIDMapping) error {\n\tseenInodes := make(map[inodeID]struct{})\n\treturn filepath.Walk(root, func(path string, info os.FileInfo, err error) error {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tmode := info.Mode()\n\t\tst := info.Sys().(*syscall.Stat_t)\n\n\t\t// Skip symlinks.\n\t\tif mode.Type() == os.ModeSymlink {\n\t\t\treturn nil\n\t\t}\n\t\t// Skip hard-links to files we've already remapped.\n\t\tid := toInodeID(st)\n\t\tif _, seen := seenInodes[id]; seen {\n\t\t\treturn nil\n\t\t}\n\t\tseenInodes[id] = struct{}{}\n\n\t\t// Calculate the new uid:gid.\n\t\tuid := st.Uid\n\t\tnewUID, ok1 := toHostID(uidMap, uid)\n\t\tgid := st.Gid\n\t\tnewGID, ok2 := toHostID(gidMap, gid)\n\n\t\t// Skip files that cannot be mapped.\n\t\tif !ok1 || !ok2 {\n\t\t\tniceName := path\n\t\t\tif relName, err := filepath.Rel(root, path); err == nil {\n\t\t\t\tniceName = \"/\" + relName\n\t\t\t}\n\t\t\tfmt.Printf(\"skipping file %s: cannot remap user %d:%d -> %d:%d\\n\", niceName, uid, gid, newUID, newGID)\n\t\t\treturn nil\n\t\t}\n\t\tif err := os.Lchown(path, newUID, newGID); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Re-apply any setid bits that would be cleared due to chown(2).\n\t\treturn os.Chmod(path, mode)\n\t})\n}\n\nfunc main() {\n\tapp := cli.NewApp()\n\tapp.Name = \"remap-rootfs\"\n\tapp.Usage = usage\n\n\tapp.Action = func(ctx *cli.Context) error {\n\t\targs := ctx.Args()\n\t\tif len(args) != 1 {\n\t\t\treturn errors.New(\"exactly one bundle argument must be provided\")\n\t\t}\n\t\tbundle := args[0]\n\n\t\tconfigFile, err := os.Open(filepath.Join(bundle, \"config.json\"))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer configFile.Close()\n\n\t\tvar spec specs.Spec\n\t\tif err := json.NewDecoder(configFile).Decode(&spec); err != nil {\n\t\t\treturn fmt.Errorf(\"parsing config.json: %w\", err)\n\t\t}\n\n\t\tif spec.Root == nil {\n\t\t\treturn errors.New(\"invalid config.json: root section is null\")\n\t\t}\n\t\trootfs := filepath.Join(bundle, spec.Root.Path)\n\n\t\tif spec.Linux == nil {\n\t\t\treturn errors.New(\"invalid config.json: linux section is null\")\n\t\t}\n\t\tuidMap := spec.Linux.UIDMappings\n\t\tgidMap := spec.Linux.GIDMappings\n\t\tif len(uidMap) == 0 && len(gidMap) == 0 {\n\t\t\tfmt.Println(\"skipping remapping -- no userns mappings specified\")\n\t\t\treturn nil\n\t\t}\n\n\t\treturn remapRootfs(rootfs, uidMap, gidMap)\n\t}\n\tif err := app.Run(os.Args); err != nil {\n\t\tfmt.Fprintln(os.Stderr, \"error:\", err)\n\t\tos.Exit(1)\n\t}\n}\n"
  },
  {
    "path": "tests/cmd/sd-helper/helper.go",
    "content": "// sd-helper is a command-line tool to provide some very minimal helpers to\n// communicate with systemd.\n//\n// This tool is only intended to be used within runc's integration tests.\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/sirupsen/logrus\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/systemd\"\n)\n\nfunc usage() {\n\tfmt.Print(`Open Container Initiative tests/cmd/sd-helper\n\nsd-helper is a tool that uses github.com/opencontainers/groups/systemd package\nfunctionality to communicate to systemd in order to perform various operations.\nCurrently this is limited to starting and stopping systemd transient slice\nunits.\n\nUsage:\n\tsd-helper [-debug] [-parent <pname>] {start|stop} <name>\n\nExample:\n\tsd-helper -parent system.slice start system-pod123.slice\n`)\n\tos.Exit(1)\n}\n\nvar (\n\tdebug  = flag.Bool(\"debug\", false, \"enable debug output\")\n\tparent = flag.String(\"parent\", \"\", \"parent unit name\")\n)\n\nfunc main() {\n\tif !systemd.IsRunningSystemd() {\n\t\tlogrus.Fatal(\"systemd is required\")\n\t}\n\n\t// Set the flags.\n\tflag.Parse()\n\tif *debug {\n\t\tlogrus.SetLevel(logrus.DebugLevel)\n\t}\n\tif flag.NArg() != 2 {\n\t\tusage()\n\t}\n\n\tcmd := flag.Arg(0)\n\tunit := flag.Arg(1)\n\n\terr := unitCommand(cmd, unit, *parent)\n\tif err != nil {\n\t\tlogrus.Fatal(err)\n\t}\n}\n\nfunc newManager(config *cgroups.Cgroup) (cgroups.Manager, error) {\n\tif cgroups.IsCgroup2UnifiedMode() {\n\t\treturn systemd.NewUnifiedManager(config, \"\")\n\t}\n\treturn systemd.NewLegacyManager(config, nil)\n}\n\nfunc unitCommand(cmd, name, parent string) error {\n\tpodConfig := &cgroups.Cgroup{\n\t\tName:      name,\n\t\tParent:    parent,\n\t\tResources: &cgroups.Resources{},\n\t}\n\tpm, err := newManager(podConfig)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch cmd {\n\tcase \"start\":\n\t\treturn pm.Apply(-1)\n\tcase \"stop\":\n\t\treturn pm.Destroy()\n\t}\n\n\treturn fmt.Errorf(\"unknown command: %s\", cmd)\n}\n"
  },
  {
    "path": "tests/cmd/seccompagent/README.md",
    "content": "# Seccomp Agent\n\n## Warning\n\nPlease note this is an example agent, as such it is possible that specially\ncrafted messages can produce bad behaviour. Please use it as an example only.\n\nAlso, this agent is used for integration tests. Be aware that changing the\nbehaviour can break the integration tests.\n\n## Get started\n\nCompile runc and seccompagent:\n```bash\nmake runc seccompagent\n```\n\nRun the seccomp agent in the background:\n```bash\nsudo ./tests/cmd/_bin/seccompagent &\n```\n\nPrepare a container:\n```bash\nmkdir container-seccomp-notify\ncd container-seccomp-notify\nmkdir rootfs\ndocker export $(docker create busybox) | tar -C rootfs -xvf -\n```\n\nThen, generate a config.json by running the script gen-seccomp-example-cfg.sh\nfrom the directory where this README.md is in the container directory you\nprepared earlier (`container-seccomp-notify`).\n\nThen start the container:\n```bash\nrunc run mycontainerid\n```\n\nThe container will output something like this:\n```bash\n+ cd /dev/shm\n+ mkdir test-dir\n+ touch test-file\n+ chmod 777 test-file\nchmod: changing permissions of 'test-file': No medium found\n+ stat /dev/shm/test-dir-foo\n  File: /dev/shm/test-dir-foo\n  Size: 40        \tBlocks: 0          IO Block: 4096   directory\nDevice: 3eh/62d\tInode: 2           Links: 2\nAccess: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)\nAccess: 2021-09-09 15:03:13.043716040 +0000\nModify: 2021-09-09 15:03:13.043716040 +0000\nChange: 2021-09-09 15:03:13.043716040 +0000\n Birth: -\n+ ls -l /dev/shm\ntotal 0\ndrwxr-xr-x 2 root root 40 Sep  9 15:03 test-dir-foo\n-rw-r--r-- 1 root root  0 Sep  9 15:03 test-file\n+ echo Note the agent added a suffix for the directory name and chmod fails\nNote the agent added a suffix for the directory name and chmod fails\n```\n\nThis shows a simple example that runs in /dev/shm just because it is a tmpfs in\nthe example config.json.\n\nThe agent makes all chmod calls fail with ENOMEDIUM, as the example output shows.\n\nFor mkdir, the agent adds a \"-foo\" suffix: the container runs \"mkdir test-dir\"\nbut the directory created is \"test-dir-foo\".\n"
  },
  {
    "path": "tests/cmd/seccompagent/gen-seccomp-example-cfg.sh",
    "content": "#!/usr/bin/env bash\n# Detect if we are running inside bats (i.e. inside integration tests) or just\n# called by an end-user\n# bats-core v1.2.1 defines BATS_RUN_TMPDIR\nif [ -z \"$BATS_RUN_TMPDIR\" ]; then\n\t# When not running in bats, we create the config.json\n\tset -e\n\trunc spec\nfi\n\n# We can't source $(dirname $0)/../../../tests/integration/helpers.bash as that\n# exits when not running inside bats. We can do hacks, but just to redefine\n# update_config() seems clearer. We don't even really need to keep them in sync.\nfunction update_config() {\n\tjq \"$1\" \"./config.json\" | awk 'BEGIN{RS=\"\";getline<\"-\";print>ARGV[1]}' \"./config.json\"\n}\n\nupdate_config '.linux.seccomp = {\n                        \"defaultAction\": \"SCMP_ACT_ALLOW\",\n                        \"listenerPath\": \"/run/seccomp-agent.socket\",\n                        \"listenerMetadata\": \"foo\",\n                        \"architectures\": [ \"SCMP_ARCH_X86\", \"SCMP_ARCH_X32\", \"SCMP_ARCH_X86_64\" ],\n                        \"syscalls\": [\n                                {\n                                        \"names\": [ \"chmod\", \"fchmod\", \"fchmodat\", \"mkdir\" ],\n                                        \"action\": \"SCMP_ACT_NOTIFY\"\n                                }\n\t\t\t]\n\t\t}'\n\nupdate_config '.process.args = [\n\t\t\t\t\"sh\",\n\t\t\t\t\"-c\",\n\t\t\t\t\"set -x; cd /dev/shm; mkdir test-dir; touch test-file; chmod 777 test-file; stat /dev/shm/test-dir-foo && ls -l /dev/shm && echo \\\"Note the agent added a suffix for the directory name and chmod fails\\\" \"\n\t\t\t\t]'\n"
  },
  {
    "path": "tests/cmd/seccompagent/seccompagent.go",
    "content": "//go:build linux && seccomp\n\n// seccompagent is an example implementation of a seccomp-agent for the seccomp\n// user notification feature. It intercepts a handful of system calls and\n// emulates them.\n//\n// This tool is only intended to be used within runc's integration tests.\npackage main\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\tsecurejoin \"github.com/cyphar/filepath-securejoin\"\n\t\"github.com/opencontainers/runc/internal/linux\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\tlibseccomp \"github.com/seccomp/libseccomp-golang\"\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n)\n\nvar (\n\tsocketFile string\n\tpidFile    string\n)\n\nfunc closeStateFds(recvFds []int) {\n\tfor _, fd := range recvFds {\n\t\t_ = unix.Close(fd)\n\t}\n}\n\n// parseStateFds returns the seccomp-fd and closes the rest of the fds in recvFds.\n// In case of error, no fd is closed.\n// StateFds is assumed to be formatted as specs.ContainerProcessState.Fds and\n// recvFds the corresponding list of received fds in the same SCM_RIGHT message.\nfunc parseStateFds(stateFds []string, recvFds []int) (uintptr, error) {\n\t// Let's find the index in stateFds of the seccomp-fd.\n\tidx := -1\n\terr := false\n\n\tfor i, name := range stateFds {\n\t\tif name == specs.SeccompFdName && idx == -1 {\n\t\t\tidx = i\n\t\t\tcontinue\n\t\t}\n\n\t\t// We found the seccompFdName twice. Error out!\n\t\tif name == specs.SeccompFdName && idx != -1 {\n\t\t\terr = true\n\t\t}\n\t}\n\n\tif idx == -1 || err {\n\t\treturn 0, errors.New(\"seccomp fd not found or malformed containerProcessState.Fds\")\n\t}\n\n\tif idx >= len(recvFds) || idx < 0 {\n\t\treturn 0, errors.New(\"seccomp fd index out of range\")\n\t}\n\n\tfd := uintptr(recvFds[idx])\n\n\tfor i := range recvFds {\n\t\tif i == idx {\n\t\t\tcontinue\n\t\t}\n\n\t\tunix.Close(recvFds[i])\n\t}\n\n\treturn fd, nil\n}\n\nfunc handleNewMessage(sockfd int) (uintptr, string, error) {\n\tconst maxNameLen = 4096\n\tstateBuf := make([]byte, maxNameLen)\n\toobSpace := unix.CmsgSpace(4)\n\toob := make([]byte, oobSpace)\n\n\tn, oobn, _, _, err := unix.Recvmsg(sockfd, stateBuf, oob, 0)\n\tif err != nil {\n\t\treturn 0, \"\", err\n\t}\n\tif n >= maxNameLen || oobn != oobSpace {\n\t\treturn 0, \"\", fmt.Errorf(\"recvfd: incorrect number of bytes read (n=%d oobn=%d)\", n, oobn)\n\t}\n\n\t// Truncate.\n\tstateBuf = stateBuf[:n]\n\toob = oob[:oobn]\n\n\tscms, err := unix.ParseSocketControlMessage(oob)\n\tif err != nil {\n\t\treturn 0, \"\", err\n\t}\n\tif len(scms) != 1 {\n\t\treturn 0, \"\", fmt.Errorf(\"recvfd: number of SCMs is not 1: %d\", len(scms))\n\t}\n\tscm := scms[0]\n\n\tfds, err := unix.ParseUnixRights(&scm)\n\tif err != nil {\n\t\treturn 0, \"\", err\n\t}\n\n\tcontainerProcessState := &specs.ContainerProcessState{}\n\terr = json.Unmarshal(stateBuf, containerProcessState)\n\tif err != nil {\n\t\tcloseStateFds(fds)\n\t\treturn 0, \"\", fmt.Errorf(\"cannot parse OCI state: %w\", err)\n\t}\n\n\tfd, err := parseStateFds(containerProcessState.Fds, fds)\n\tif err != nil {\n\t\tcloseStateFds(fds)\n\t\treturn 0, \"\", err\n\t}\n\n\treturn fd, containerProcessState.Metadata, nil\n}\n\nfunc readArgString(pid uint32, offset int64) (string, error) {\n\tbuffer := make([]byte, 4096) // PATH_MAX\n\n\tmemfd, err := linux.Open(fmt.Sprintf(\"/proc/%d/mem\", pid), unix.O_RDONLY, 0o777)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer unix.Close(memfd)\n\n\t_, err = unix.Pread(memfd, buffer, offset)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tbuffer[len(buffer)-1] = 0\n\ts := buffer[:bytes.IndexByte(buffer, 0)]\n\treturn string(s), nil\n}\n\nfunc runMkdirForContainer(pid uint32, fileName string, mode uint32, metadata string) error {\n\t// We validated before that metadata is not a string that can make\n\t// newFile a file in a different location other than root.\n\tnewFile := fmt.Sprintf(\"%s-%s\", fileName, metadata)\n\troot := fmt.Sprintf(\"/proc/%d/cwd/\", pid)\n\n\tif strings.HasPrefix(fileName, \"/\") {\n\t\t// If it starts with /, use the rootfs as base\n\t\troot = fmt.Sprintf(\"/proc/%d/root/\", pid)\n\t}\n\n\tpath, err := securejoin.SecureJoin(root, newFile)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn unix.Mkdir(path, mode)\n}\n\n// notifHandler handles seccomp notifications and responses\nfunc notifHandler(fd libseccomp.ScmpFd, metadata string) {\n\tdefer unix.Close(int(fd))\n\tfor {\n\t\treq, err := libseccomp.NotifReceive(fd)\n\t\tif err != nil {\n\t\t\tlogrus.Errorf(\"Error in NotifReceive(): %s\", err)\n\t\t\tcontinue\n\t\t}\n\t\tsyscallName, err := req.Data.Syscall.GetName()\n\t\tif err != nil {\n\t\t\tlogrus.Errorf(\"Error decoding syscall %v(): %s\", req.Data.Syscall, err)\n\t\t\tcontinue\n\t\t}\n\t\tlogrus.Debugf(\"Received syscall %q, pid %v, arch %q, args %+v\", syscallName, req.Pid, req.Data.Arch, req.Data.Args)\n\n\t\tresp := &libseccomp.ScmpNotifResp{\n\t\t\tID:    req.ID,\n\t\t\tError: 0,\n\t\t\tVal:   0,\n\t\t\tFlags: libseccomp.NotifRespFlagContinue,\n\t\t}\n\n\t\t// TOCTOU check\n\t\tif err := libseccomp.NotifIDValid(fd, req.ID); err != nil {\n\t\t\tlogrus.Errorf(\"TOCTOU check failed: req.ID is no longer valid: %s\", err)\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch syscallName {\n\t\tcase \"mkdir\":\n\t\t\tfileName, err := readArgString(req.Pid, int64(req.Data.Args[0]))\n\t\t\tif err != nil {\n\t\t\t\tlogrus.Errorf(\"Cannot read argument: %s\", err)\n\t\t\t\tresp.Error = int32(unix.ENOSYS)\n\t\t\t\tresp.Val = ^uint64(0) // -1\n\t\t\t\tgoto sendResponse\n\t\t\t}\n\n\t\t\tlogrus.Debugf(\"mkdir: %q\", fileName)\n\n\t\t\t// TOCTOU check\n\t\t\tif err := libseccomp.NotifIDValid(fd, req.ID); err != nil {\n\t\t\t\tlogrus.Errorf(\"TOCTOU check failed: req.ID is no longer valid: %s\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\terr = runMkdirForContainer(req.Pid, fileName, uint32(req.Data.Args[1]), metadata)\n\t\t\tif err != nil {\n\t\t\t\tresp.Error = int32(unix.ENOSYS)\n\t\t\t\tresp.Val = ^uint64(0) // -1\n\t\t\t}\n\t\t\tresp.Flags = 0\n\t\tcase \"chmod\", \"fchmod\", \"fchmodat\":\n\t\t\tresp.Error = int32(unix.ENOMEDIUM)\n\t\t\tresp.Val = ^uint64(0) // -1\n\t\t\tresp.Flags = 0\n\t\t}\n\n\tsendResponse:\n\t\tif err = libseccomp.NotifRespond(fd, resp); err != nil {\n\t\t\tlogrus.Errorf(\"Error in notification response: %s\", err)\n\t\t\tcontinue\n\t\t}\n\t}\n}\n\nfunc main() {\n\tflag.StringVar(&socketFile, \"socketfile\", \"/run/seccomp-agent.socket\", \"Socket file\")\n\tflag.StringVar(&pidFile, \"pid-file\", \"\", \"Pid file\")\n\tlogrus.SetLevel(logrus.DebugLevel)\n\n\t// Parse arguments\n\tflag.Parse()\n\tif flag.NArg() > 0 {\n\t\tflag.PrintDefaults()\n\t\tlogrus.Fatal(\"Invalid command\")\n\t}\n\n\tif err := os.Remove(socketFile); err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\tlogrus.Fatalf(\"Cannot cleanup socket file: %v\", err)\n\t}\n\n\tif pidFile != \"\" {\n\t\tpid := fmt.Sprintf(\"%d\", os.Getpid())\n\t\tif err := os.WriteFile(pidFile, []byte(pid), 0o644); err != nil {\n\t\t\tlogrus.Fatalf(\"Cannot write pid file: %v\", err)\n\t\t}\n\t}\n\n\tlogrus.Info(\"Waiting for seccomp file descriptors\")\n\tl, err := net.Listen(\"unix\", socketFile)\n\tif err != nil {\n\t\tlogrus.Fatalf(\"Cannot listen: %s\", err)\n\t}\n\tdefer l.Close()\n\n\tfor {\n\t\tconn, err := l.Accept()\n\t\tif err != nil {\n\t\t\tlogrus.Errorf(\"Cannot accept connection: %s\", err)\n\t\t\tcontinue\n\t\t}\n\t\tsocket, err := conn.(*net.UnixConn).File()\n\t\tconn.Close()\n\t\tif err != nil {\n\t\t\tlogrus.Errorf(\"Cannot get socket: %v\", err)\n\t\t\tcontinue\n\t\t}\n\t\tnewFd, metadata, err := handleNewMessage(int(socket.Fd()))\n\t\tsocket.Close()\n\t\tif err != nil {\n\t\t\tlogrus.Errorf(\"Error receiving seccomp file descriptor: %v\", err)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Make sure we don't allow strings like \"/../p\", as that means\n\t\t// a file in a different location than expected. We just want\n\t\t// safe things to use as a suffix for a file name.\n\t\tmetadata = filepath.Base(metadata)\n\t\tif strings.Contains(metadata, \"/\") {\n\t\t\t// Fallback to a safe string.\n\t\t\tmetadata = \"agent-generated-suffix\"\n\t\t}\n\n\t\tlogrus.Infof(\"Received new seccomp fd: %v\", newFd)\n\t\tgo notifHandler(libseccomp.ScmpFd(newFd), metadata)\n\t}\n}\n"
  },
  {
    "path": "tests/cmd/seccompagent/unsupported.go",
    "content": "//go:build !linux || !seccomp\n\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n\tfmt.Println(\"Not supported, to use this compile with build tag: seccomp.\")\n}\n"
  },
  {
    "path": "tests/fuzzing/oss_fuzz_build.sh",
    "content": "#!/usr/bin/env bash\n\n# This file is only meant to be run by OSS-fuzz and will not work\n# if run outside of it.\n# The api, compile_go_fuzzer() is provided by the OSS-fuzz\n# environment and is a high level helper function for a series\n# of compilation and linking steps to build the fuzzers in the\n# OSS-fuzz environment.\n# More info about compile_go_fuzzer() can be found here:\n#     https://google.github.io/oss-fuzz/getting-started/new-project-guide/go-lang/#buildsh\ncompile_go_fuzzer github.com/opencontainers/runc/libcontainer/user FuzzUser user_fuzzer\ncompile_go_fuzzer github.com/opencontainers/runc/libcontainer/configs FuzzUnmarshalJSON configs_fuzzer\n"
  },
  {
    "path": "tests/integration/README.md",
    "content": "# runc Integration Tests\n\nIntegration tests provide end-to-end testing of runc.\n\nNote that integration tests do **not** replace unit tests.\n\nAs a rule of thumb, code should be tested thoroughly with unit tests.\nIntegration tests on the other hand are meant to test a specific feature end\nto end.\n\nIntegration tests are written in *bash* using the\n[bats (Bash Automated Testing System)](https://github.com/bats-core/bats-core)\nframework. Please see\n[bats documentation](https://bats-core.readthedocs.io/en/stable/index.html)\nfor more details.\n\n## Running integration tests\n\nThe easiest way to run integration tests is with Docker:\n```bash\nmake integration\n```\nAlternatively, you can run integration tests directly on your host through make:\n```bash\nsudo make localintegration\n```\nOr you can just run them directly using bats\n```bash\nsudo bats tests/integration\n```\nTo run a single test bucket:\n```bash\nmake integration TESTPATH=\"/checkpoint.bats\"\n```\n\n\nTo run them on your host, you need to set up a development environment plus\n[bats (Bash Automated Testing System)](https://github.com/bats-core/bats-core#installing-bats-from-source).\n\nFor example:\n```bash\ncd ~/go/src/github.com\ngit clone https://github.com/bats-core/bats-core.git\ncd bats-core\n./install.sh /usr/local\n```\n\n## Writing integration tests\n\n[Helper functions](https://github.com/opencontainers/runc/blob/master/tests/integration/helpers.bash)\nare provided in order to facilitate writing tests.\n\nPlease see existing tests for examples.\n"
  },
  {
    "path": "tests/integration/bootstrap-get-images.sh",
    "content": "#!/usr/bin/env bash\nset -Eeuo pipefail\n\n# This script generates \"get-images.sh\" using Official Images tooling.\n#\n#   ./bootstrap-get-images.sh > get-images.sh\n#\n# This script requires \"bashbrew\". To get the latest version, visit\n# https://github.com/docker-library/bashbrew/releases\n\nimages=(\n\t# https://github.com/docker-library/official-images/commits/HEAD/library/busybox\n\t'https://github.com/docker-library/official-images/raw/67f09d75e7915359c2216cb12cf6fc1150d42a26/library/busybox:glibc'\n\n\t# pinned to an older Debian Buster which has more architectures than the latest does (Buster transitioned from the Debian Security Team to the LTS Team which supports a smaller set)\n\t'https://github.com/docker-library/official-images/raw/ce10f6b60289c0c0b5de6f785528b8725f225a58/library/debian:buster-slim'\n)\n\ncat <<'EOH'\n#!/bin/bash\n\n# DO NOT EDIT!  Generated by \"bootstrap-get-images.sh\"\n\n# This script checks if container images needed for tests (currently\n# busybox and Debian 10 \"Buster\") are available locally, and downloads\n# them to testdata directory if not.\n#\n# The script is self-contained/standalone and is used from a few places\n# that need to ensure the images are downloaded. Its output is suitable\n# for consumption by shell via eval (see helpers.bash).\n\nset -e -u -o pipefail\n\n# Root directory of integration tests.\nINTEGRATION_ROOT=$(dirname \"$(readlink -f \"${BASH_SOURCE[0]}\")\")\n# Test data path.\nTESTDATA=\"${INTEGRATION_ROOT}/testdata\"\n# Sanity check: $TESTDATA directory must exist.\nif [ ! -d \"$TESTDATA\" ]; then\n\techo \"Bad TESTDATA directory: $TESTDATA. Aborting\" >&2\n\texit 1\nfi\n\nfunction get() {\n\tlocal dest=\"$1\" url=\"$2\"\n\n\t[ -e \"$dest\" ] && return\n\n\t# Sanity check: $TESTDATA directory must be writable.\n\tif [ ! -w \"$TESTDATA\" ]; then\n\t\techo \"TESTDATA directory ($TESTDATA) not writable. Aborting\" >&2\n\t\texit 1\n\tfi\n\n\tif ! curl -o \"$dest\" -fsSL --retry 5 \"$url\"; then\n\t\techo \"Failed to get $url\" 1>&2\n\t\texit 1\n\tfi\n}\n\narch=$(go env GOARCH)\nif [ \"$arch\" = 'arm' ]; then\n\tarm=$(go env GOARM)\n\t: \"${arm:=7}\"\n\tarch=${arch}v$arm\nfi\nEOH\n\n# shellcheck disable=SC2016 # this generates shell code intentionally (and many of the '$' in here are intended for \"text/template\" not the end shell anyhow)\nbashbrew cat --format '\n\t{{- \"\\n\" -}}\n\t{{- \"case $arch in\\n\" -}}\n\n\t{{- range .TagEntry.Architectures -}}\n\t\t{{- $repo := $.TagEntry.ArchGitRepo . | trimSuffixes \".git\" -}}\n\t\t{{- $branch := $.TagEntry.ArchGitFetch . | trimPrefixes \"refs/heads/\" -}}\n\t\t{{- $commit := $.TagEntry.ArchGitCommit . -}}\n\t\t{{- $dir := $.TagEntry.ArchDirectory . -}}\n\t\t{{- $tarball := eq $.RepoName \"debian\" | ternary \"rootfs.tar.xz\" \"rootfs.tar.gz\" -}}\n\n\t\t{{ . | replace \"arm64v8\" \"arm64\" \"arm32\" \"arm\" \"i386\" \"386\" }} {{- \")\\n\" -}}\n\t\t{{- \"\\t\" -}}# {{ $repo }}/tree/{{ $branch }}{{- \"\\n\" -}}\n\t\t{{- \"\\t\" -}}# {{ $repo }}/tree/{{ $commit }}/{{ $dir }}{{- \"\\n\" -}}\n\t\t{{- \"\\t\" -}} url=\"{{ $repo }}/raw/{{ $commit }}/{{ $dir }}/{{ $tarball }}\"{{- \"\\n\" -}}\n\t\t{{- \"\\t\" -}} ;; {{- \"\\n\" -}}\n\t\t{{- \"\\n\" -}}\n\t{{- end -}}\n\n\t*){{- \"\\n\" -}}\n\t{{- \"\\t\" -}}echo >&2 \"error: unsupported {{ $.RepoName }} architecture: $arch\"{{- \"\\n\" -}}\n\t{{- \"\\t\" -}}exit 1{{- \"\\n\" -}}\n\t{{- \"\\t\" -}};;{{- \"\\n\" -}}\n\n\t{{- \"esac\\n\" -}}\n\t{{- printf `rootfs=\"$TESTDATA/%s-${arch}.tar.xz\"` $.RepoName -}}{{- \"\\n\" -}}\n\t{{- `get \"$rootfs\" \"$url\"` -}}{{- \"\\n\" -}}\n\t{{- printf \"var=%s_image\\n\" $.RepoName -}}\n\t{{- `echo \"${var^^}=$rootfs\"` -}}\n' \"${images[@]}\"\n"
  },
  {
    "path": "tests/integration/capabilities.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n\tupdate_config '.process.args = [\"/bin/cat\", \"/proc/self/status\"]'\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc run no capability\" {\n\trunc run test_no_caps\n\t[ \"$status\" -eq 0 ]\n\n\t[[ \"${output}\" == *\"CapInh:\t0000000000000000\"* ]]\n\t[[ \"${output}\" == *\"CapAmb:\t0000000000000000\"* ]]\n\t[[ \"${output}\" == *\"NoNewPrivs:\t1\"* ]]\n}\n\n@test \"runc run with unknown capability\" {\n\tupdate_config '.process.capabilities.bounding = [\"CAP_UNKNOWN\", \"UNKNOWN_CAP\"]'\n\trunc run test_unknown_caps\n\t[ \"$status\" -eq 0 ]\n\n\t[[ \"${output}\" == *\"CapInh:\t0000000000000000\"* ]]\n\t[[ \"${output}\" == *\"CapAmb:\t0000000000000000\"* ]]\n\t[[ \"${output}\" == *\"NoNewPrivs:\t1\"* ]]\n}\n\n@test \"runc run with new privileges\" {\n\tif [ \"$(awk '$1 == \"NoNewPrivs:\" { print $2; exit }' /proc/self/status)\" -ne 0 ]; then\n\t\tskip \"requires unset NoNewPrivs\"\n\tfi\n\tupdate_config '.process.noNewPrivileges = false'\n\trunc run test_new_privileges\n\t[ \"$status\" -eq 0 ]\n\n\t[[ \"${output}\" == *\"CapInh:\t0000000000000000\"* ]]\n\t[[ \"${output}\" == *\"CapAmb:\t0000000000000000\"* ]]\n\t[[ \"${output}\" == *\"NoNewPrivs:\t0\"* ]]\n}\n\n@test \"runc run with some capabilities\" {\n\tupdate_config '.process.user = {\"uid\":0}'\n\tupdate_config '.process.capabilities.bounding = [\"CAP_SYS_ADMIN\"]'\n\tupdate_config '.process.capabilities.permitted = [\"CAP_SYS_ADMIN\", \"CAP_AUDIT_WRITE\", \"CAP_KILL\", \"CAP_NET_BIND_SERVICE\"]'\n\trunc run test_some_caps\n\t[ \"$status\" -eq 0 ]\n\n\t[[ \"${output}\" == *\"CapInh:\t0000000000000000\"* ]]\n\t[[ \"${output}\" == *\"CapBnd:\t0000000000200000\"* ]]\n\t[[ \"${output}\" == *\"CapEff:\t0000000000200000\"* ]]\n\t[[ \"${output}\" == *\"CapPrm:\t0000000000200000\"* ]]\n\t[[ \"${output}\" == *\"NoNewPrivs:\t1\"* ]]\n}\n\n@test \"runc exec --cap\" {\n\tupdate_config '\t  .process.args = [\"/bin/sh\"]\n\t\t\t| .process.capabilities = {}'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_exec_cap\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_exec_cap cat /proc/self/status\n\t[ \"$status\" -eq 0 ]\n\t# Check no capabilities are set.\n\t[[ \"${output}\" == *\"CapInh:\t0000000000000000\"* ]]\n\t[[ \"${output}\" == *\"CapPrm:\t0000000000000000\"* ]]\n\t[[ \"${output}\" == *\"CapEff:\t0000000000000000\"* ]]\n\t[[ \"${output}\" == *\"CapBnd:\t0000000000000000\"* ]]\n\t[[ \"${output}\" == *\"CapAmb:\t0000000000000000\"* ]]\n\n\trunc exec --cap CAP_KILL --cap CAP_AUDIT_WRITE test_exec_cap cat /proc/self/status\n\t[ \"$status\" -eq 0 ]\n\t# Check capabilities are added into bounding/effective/permitted only,\n\t# but not to inheritable or ambient.\n\t#\n\t# CAP_KILL is 5, the bit mask is 0x20 (1 << 5).\n\t# CAP_AUDIT_WRITE is 26, the bit mask is 0x20000000 (1 << 26).\n\t[[ \"${output}\" == *\"CapInh:\t0000000000000000\"* ]]\n\t[[ \"${output}\" == *\"CapPrm:\t0000000020000020\"* ]]\n\t[[ \"${output}\" == *\"CapEff:\t0000000020000020\"* ]]\n\t[[ \"${output}\" == *\"CapBnd:\t0000000020000020\"* ]]\n\t[[ \"${output}\" == *\"CapAmb:\t0000000000000000\"* ]]\n}\n\n@test \"runc exec --cap [ambient is set from spec]\" {\n\tupdate_config '\t  .process.args = [\"/bin/sh\"]\n\t\t\t| .process.capabilities.inheritable = [\"CAP_CHOWN\", \"CAP_SYSLOG\"]\n\t\t\t| .process.capabilities.permitted = [\"CAP_KILL\", \"CAP_CHOWN\"]\n\t\t\t| .process.capabilities.effective = [\"CAP_KILL\"]\n\t\t\t| .process.capabilities.bounding = [\"CAP_KILL\", \"CAP_CHOWN\", \"CAP_SYSLOG\"]\n\t\t\t| .process.capabilities.ambient = [\"CAP_CHOWN\"]'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_some_caps\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_some_caps cat /proc/self/status\n\t[ \"$status\" -eq 0 ]\n\t# Check that capabilities are as set in spec.\n\t#\n\t# CAP_CHOWN is 0, the bit mask is 0x1 (1 << 0)\n\t# CAP_KILL is 5, the bit mask is 0x20 (1 << 5).\n\t# CAP_SYSLOG is 34, the bit mask is 0x400000000 (1 << 34).\n\t[[ \"${output}\" == *\"CapInh:\t0000000400000001\"* ]]\n\t[[ \"${output}\" == *\"CapPrm:\t0000000000000021\"* ]]\n\t[[ \"${output}\" == *\"CapEff:\t0000000000000021\"* ]]\n\t[[ \"${output}\" == *\"CapBnd:\t0000000400000021\"* ]]\n\t[[ \"${output}\" == *\"CapAmb:\t0000000000000001\"* ]]\n\n\t# Check that if config.json has an inheritable capability set,\n\t# runc exec --cap adds ambient capabilities.\n\trunc exec --cap CAP_SYSLOG test_some_caps cat /proc/self/status\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${output}\" == *\"CapInh:\t0000000400000001\"* ]]\n\t[[ \"${output}\" == *\"CapPrm:\t0000000400000021\"* ]]\n\t[[ \"${output}\" == *\"CapEff:\t0000000400000021\"* ]]\n\t[[ \"${output}\" == *\"CapBnd:\t0000000400000021\"* ]]\n\t[[ \"${output}\" == *\"CapAmb:\t0000000400000001\"* ]]\n}\n\n@test \"runc run [ambient caps not set in inheritable result in a warning]\" {\n\tupdate_config '   .process.capabilities.inheritable = [\"CAP_KILL\"]\n                       | .process.capabilities.ambient = [\"CAP_KILL\", \"CAP_CHOWN\"]'\n\trunc run test_amb\n\t[ \"$status\" -eq 0 ]\n\t# This should result in CAP_KILL set in ambient,\n\t# and a warning about inability to set CAP_CHOWN.\n\t#\n\t# CAP_CHOWN is 0, the bit mask is 0x1 (1 << 0)\n\t# CAP_KILL is 5, the bit mask is 0x20 (1 << 5).\n\t[[ \"$output\" == *\"can't raise ambient capability CAP_CHOWN: \"* ]]\n\t[[ \"${output}\" == *\"CapAmb:\t0000000000000020\"* ]]\n}\n"
  },
  {
    "path": "tests/integration/cgroup_delegation.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction teardown() {\n\tteardown_bundle\n}\n\nfunction setup() {\n\trequires root cgroups_v2 systemd\n\n\tsetup_busybox\n\n\t# chown test temp dir to allow host user to read it\n\tchown 100000 \"$ROOT\"\n\n\t# chown rootfs to allow host user to mkdir mount points\n\tchown 100000 \"$ROOT\"/bundle/rootfs\n\n\tset_cgroups_path\n\n\t# configure a user namespace\n\tupdate_config '   .linux.namespaces += [{\"type\": \"user\"}]\n\t\t\t| .linux.uidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65536}]\n\t\t\t| .linux.gidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65536}]\n\t\t\t'\n}\n\n@test \"runc exec (cgroup v2, ro cgroupfs, new cgroupns) does not chown cgroup\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroup_chown\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_cgroup_chown sh -c \"stat -c %U /sys/fs/cgroup\"\n\t[ \"$status\" -eq 0 ]\n\t[ \"$output\" = \"nobody\" ] # /sys/fs/cgroup owned by unmapped user\n}\n\n@test \"runc exec (cgroup v2, rw cgroupfs, inherit cgroupns) does not chown cgroup\" {\n\tset_cgroup_mount_writable\n\n\t# inherit cgroup namespace (remove cgroup from namespaces list)\n\tupdate_config '.linux.namespaces |= map(select(.type != \"cgroup\"))'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroup_chown\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_cgroup_chown sh -c \"stat -c %U /sys/fs/cgroup\"\n\t[ \"$status\" -eq 0 ]\n\t[ \"$output\" = \"nobody\" ] # /sys/fs/cgroup owned by unmapped user\n}\n\n@test \"runc exec (cgroup v2, rw cgroupfs, new cgroupns) does chown cgroup\" {\n\tset_cgroup_mount_writable\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroup_chown\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_cgroup_chown sh -c \"stat -c %U /sys/fs/cgroup\"\n\t[ \"$status\" -eq 0 ]\n\t[ \"$output\" = \"root\" ] # /sys/fs/cgroup owned by root (of user namespace)\n}\n"
  },
  {
    "path": "tests/integration/cgroups.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction teardown() {\n\tteardown_bundle\n\tteardown_loopdevs\n}\n\nfunction setup() {\n\tsetup_busybox\n}\n\n@test \"runc create (no limits + no cgrouppath + no permission) succeeds\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroups_permissions\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc create (rootless + no limits + cgrouppath + no permission) fails with permission error\" {\n\trequires rootless rootless_no_cgroup\n\n\tset_cgroups_path\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroups_permissions\n\t[ \"$status\" -eq 1 ]\n\t[[ \"$output\" == *\"unable to apply cgroup configuration\"*\"permission denied\"* ]]\n}\n\n@test \"runc create (rootless + limits + no cgrouppath + no permission) fails with informative error\" {\n\trequires rootless rootless_no_cgroup\n\n\tset_resources_limit\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroups_permissions\n\t[ \"$status\" -eq 1 ]\n\t[[ \"$output\" == *\"rootless needs no limits + no cgrouppath when no permission is granted for cgroups\"* ]] ||\n\t\t[[ \"$output\" == *\"cannot set pids limit: container could not join or create cgroup\"* ]]\n}\n\n@test \"runc create (limits + cgrouppath + permission on the cgroup dir) succeeds\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tset_cgroups_path\n\tset_resources_limit\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroups_permissions\n\t[ \"$status\" -eq 0 ]\n\tif [ -v CGROUP_V2 ]; then\n\t\tif [ -v RUNC_USE_SYSTEMD ]; then\n\t\t\tif [ $EUID -eq 0 ]; then\n\t\t\t\tcheck_cgroup_value \"cgroup.controllers\" \"$(cat /sys/fs/cgroup/machine.slice/cgroup.controllers)\"\n\t\t\telse\n\t\t\t\t# Filter out controllers that systemd is unable to delegate.\n\t\t\t\tcheck_cgroup_value \"cgroup.controllers\" \"$(sed 's/ \\(dmem\\|hugetlb\\|misc\\|rdma\\)//g' </sys/fs/cgroup/user.slice/user-${EUID}.slice/cgroup.controllers)\"\n\t\t\tfi\n\t\telse\n\t\t\tcheck_cgroup_value \"cgroup.controllers\" \"$(cat /sys/fs/cgroup/cgroup.controllers)\"\n\t\tfi\n\tfi\n}\n\n@test \"runc exec (limits + cgrouppath + permission on the cgroup dir) succeeds\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tset_cgroups_path\n\tset_resources_limit\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroups_permissions\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_cgroups_permissions echo \"cgroups_exec\"\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} == *\"cgroups_exec\"* ]]\n}\n\n@test \"runc exec (cgroup v2 + init process in non-root cgroup) succeeds\" {\n\trequires root cgroups_v2\n\n\tset_cgroups_path\n\tset_cgroup_mount_writable\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroups_group\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_cgroups_group cat /sys/fs/cgroup/cgroup.controllers\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} == *\"memory\"* ]]\n\n\trunc exec test_cgroups_group cat /proc/self/cgroup\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} = \"0::/\" ]]\n\n\trunc exec test_cgroups_group mkdir /sys/fs/cgroup/foo\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_cgroups_group sh -c \"echo 1 > /sys/fs/cgroup/foo/cgroup.procs\"\n\t[ \"$status\" -eq 0 ]\n\n\t# the init process is now in \"/foo\", but an exec process can still join \"/\"\n\t# because we haven't enabled any domain controller.\n\trunc exec test_cgroups_group cat /proc/self/cgroup\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} = \"0::/\" ]]\n\n\t# turn on a domain controller (memory)\n\trunc exec test_cgroups_group sh -euxc 'echo $$ > /sys/fs/cgroup/foo/cgroup.procs; echo +memory > /sys/fs/cgroup/cgroup.subtree_control'\n\t[ \"$status\" -eq 0 ]\n\n\t# an exec process can no longer join \"/\" after turning on a domain controller.\n\t# falls back to \"/foo\".\n\trunc exec test_cgroups_group cat /proc/self/cgroup\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} = \"0::/foo\" ]]\n\n\t# teardown: remove \"/foo\"\n\tcat <<'EOF' | runc exec test_cgroups_group sh -eux\necho -memory > /sys/fs/cgroup/cgroup.subtree_control\nfor pid in $(cat /sys/fs/cgroup/foo/cgroup.procs); do\n\techo $pid > /sys/fs/cgroup/cgroup.procs || true\ndone\nrmdir /sys/fs/cgroup/foo\nEOF\n\trunc exec test_cgroups_group test ! -d /sys/fs/cgroup/foo\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc run (cgroup v1 + unified resources should fail)\" {\n\trequires root cgroups_v1\n\n\tset_cgroups_path\n\tset_resources_limit\n\tupdate_config '.linux.resources.unified |= {\"memory.min\": \"131072\"}'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroups_unified\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *'invalid configuration'* ]]\n}\n\n@test \"runc run (blkio weight)\" {\n\trequires cgroups_v2 cgroups_io_weight\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tset_cgroups_path\n\tupdate_config '.linux.resources.blockIO |= {\"weight\": 750}'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroups_unified\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_cgroups_unified sh -c 'cat /sys/fs/cgroup/io.bfq.weight'\n\tif [[ \"$status\" -eq 0 ]]; then\n\t\t[ \"$output\" = 'default 750' ]\n\telse\n\t\trunc exec test_cgroups_unified sh -c 'cat /sys/fs/cgroup/io.weight'\n\t\t[ \"$output\" = 'default 7475' ]\n\tfi\n}\n\n@test \"runc run (per-device io weight for bfq)\" {\n\trequires root # to create a loop device\n\n\tdev=\"$(setup_loopdev)\"\n\n\t# Some distributions (like openSUSE) have udev configured to forcefully\n\t# reset the scheduler for loopN devices to be \"none\", which breaks this\n\t# test. We cannot modify the udev behaviour of the host, but since this is\n\t# usually triggered by the \"change\" event from losetup, we can wait for a\n\t# little bit before continuing the test. For more details, see\n\t# <https://github.com/opencontainers/runc/issues/4781>.\n\tsleep 2s\n\n\t# See if BFQ scheduler is available.\n\tif ! { grep -qw bfq \"/sys/block/${dev#/dev/}/queue/scheduler\" &&\n\t\techo bfq >\"/sys/block/${dev#/dev/}/queue/scheduler\"; }; then\n\t\tskip \"BFQ scheduler not available\"\n\tfi\n\n\t# Check that the device still has the right scheduler, in case we lost the\n\t# race above...\n\tif ! grep -qw '\\[bfq\\]' \"/sys/block/${dev#/dev/}/queue/scheduler\"; then\n\t\tskip \"udev is configured to reset loop device io scheduler\"\n\tfi\n\n\tset_cgroups_path\n\n\tIFS=$' \\t:' read -r major minor <<<\"$(lsblk -nd -o MAJ:MIN \"$dev\")\"\n\tupdate_config '\t  .linux.devices += [{path: \"'\"$dev\"'\", type: \"b\", major: '\"$major\"', minor: '\"$minor\"'}]\n\t\t\t| .linux.resources.blockIO.weight |= 333\n\t\t\t| .linux.resources.blockIO.weightDevice |= [\n\t\t\t\t{ major: '\"$major\"', minor: '\"$minor\"', weight: 444 }\n\t\t\t]'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_dev_weight\n\t[ \"$status\" -eq 0 ]\n\n\tif [ -v CGROUP_V2 ]; then\n\t\tfile=\"io.bfq.weight\"\n\telse\n\t\tfile=\"blkio.bfq.weight_device\"\n\tfi\n\tweights1=$(get_cgroup_value $file)\n\n\t# Check that runc update works.\n\trunc update -r - test_dev_weight <<EOF\n{\n  \"blockIO\": {\n    \"weight\": 111,\n    \"weightDevice\": [\n      {\n        \"major\": $major,\n        \"minor\": $minor,\n        \"weight\": 222\n      }\n    ]\n  }\n}\nEOF\n\tweights2=$(get_cgroup_value $file)\n\n\t# Check original values.\n\tgrep '^default 333$' <<<\"$weights1\"\n\tgrep \"^$major:$minor 444$\" <<<\"$weights1\"\n\t# Check updated values.\n\tgrep '^default 111$' <<<\"$weights2\"\n\tgrep \"^$major:$minor 222$\" <<<\"$weights2\"\n\n}\n\n@test \"runc run (per-device multiple iops via unified)\" {\n\trequires root cgroups_v2\n\n\tdev1=\"$(setup_loopdev)\"\n\tdev2=\"$(setup_loopdev)\"\n\n\tset_cgroups_path\n\n\tIFS=$' \\t:' read -r major1 minor1 <<<\"$(lsblk -nd -o MAJ:MIN \"$dev1\")\"\n\tIFS=$' \\t:' read -r major2 minor2 <<<\"$(lsblk -nd -o MAJ:MIN \"$dev2\")\"\n\tupdate_config '\t  .linux.devices += [\n\t\t\t\t{path: \"'\"$dev1\"'\", type: \"b\", major: '\"$major1\"', minor: '\"$minor1\"'},\n\t\t\t\t{path: \"'\"$dev2\"'\", type: \"b\", major: '\"$major2\"', minor: '\"$minor2\"'}\n\t\t\t   ]\n\t\t\t| .linux.resources.unified |=\n\t\t\t\t{\"io.max\": \"'\"$major1\"':'\"$minor1\"' riops=333 wiops=444\\n'\"$major2\"':'\"$minor2\"' riops=555 wiops=666\\n\"}'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_dev_weight\n\t[ \"$status\" -eq 0 ]\n\n\tweights=$(get_cgroup_value \"io.max\")\n\tgrep \"^$major1:$minor1 .* riops=333 wiops=444$\" <<<\"$weights\"\n\tgrep \"^$major2:$minor2 .* riops=555 wiops=666$\" <<<\"$weights\"\n}\n\n@test \"runc run (cpu.idle)\" {\n\trequires cgroups_cpu_idle\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tset_cgroups_path\n\tupdate_config '.linux.resources.cpu.idle = 1'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroups_unified\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value \"cpu.idle\" \"1\"\n}\n\n# Convert size in KB to hugetlb size suffix.\nconvert_hugetlb_size() {\n\tlocal size=$1\n\tlocal units=(\"KB\" \"MB\" \"GB\")\n\tlocal idx=0\n\n\twhile ((size >= 1024)); do\n\t\t((size /= 1024))\n\t\t((idx++))\n\tdone\n\n\techo \"$size${units[$idx]}\"\n}\n\n@test \"runc run (hugetlb limits)\" {\n\trequires cgroups_hugetlb\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\t# shellcheck disable=SC2012 # ls is fine here.\n\tmapfile -t sizes_kb < <(ls /sys/kernel/mm/hugepages/ | sed -e 's/.*hugepages-//' -e 's/kB$//') #\n\tif [ \"${#sizes_kb[@]}\" -lt 1 ]; then\n\t\tskip \"requires hugetlb\"\n\tfi\n\n\t# Create two arrays:\n\t#  - sizes: hugetlb cgroup file suffixes;\n\t#  - limits: limits for each size.\n\tfor size in \"${sizes_kb[@]}\"; do\n\t\tsizes+=(\"$(convert_hugetlb_size \"$size\")\")\n\t\t# Limit to 1 page.\n\t\tlimits+=(\"$((size * 1024))\")\n\tdone\n\n\t# Set per-size limits.\n\tfor ((i = 0; i < ${#sizes[@]}; i++)); do\n\t\tsize=\"${sizes[$i]}\"\n\t\tlimit=\"${limits[$i]}\"\n\t\tupdate_config '.linux.resources.hugepageLimits += [{ pagesize: \"'\"$size\"'\", limit: '\"$limit\"' }]'\n\tdone\n\n\tset_cgroups_path\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_hugetlb\n\t[ \"$status\" -eq 0 ]\n\n\tlim=\"max\"\n\t[ -v CGROUP_V1 ] && lim=\"limit_in_bytes\"\n\n\toptional=(\"\")\n\t# Add rsvd, if available.\n\tif test -f \"$(get_cgroup_path hugetlb)/hugetlb.${sizes[0]}.rsvd.$lim\"; then\n\t\toptional+=(\".rsvd\")\n\tfi\n\n\t# Check if the limits are as expected.\n\tfor ((i = 0; i < ${#sizes[@]}; i++)); do\n\t\tsize=\"${sizes[$i]}\"\n\t\tlimit=\"${limits[$i]}\"\n\t\tfor rsvd in \"${optional[@]}\"; do\n\t\t\tparam=\"hugetlb.${size}${rsvd}.$lim\"\n\t\t\techo \"checking $param\"\n\t\t\tcheck_cgroup_value \"$param\" \"$limit\"\n\t\tdone\n\tdone\n}\n\n# https://github.com/opencontainers/runc/issues/4014.\n@test \"runc run (pids.limit=0 means 1)\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\trequires cgroups_pids\n\n\tset_cgroups_path\n\tupdate_config '.linux.resources.pids.limit = 0'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_pids\n\t[ \"$status\" -eq 0 ]\n\t# systemd doesn't support TasksMax=0 so runc will silently remap it to 1\n\t# (for consistency, we do this for systemd *and* cgroupfs).\n\tcheck_cgroup_value \"pids.max\" \"1\"\n\tcheck_systemd_value \"TasksMax\" \"1\"\n}\n\n# https://github.com/opencontainers/runc/issues/4014.\n@test \"runc run (pids.limit=-1 means unlimited)\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\trequires cgroups_pids\n\n\tset_cgroups_path\n\tupdate_config '.linux.resources.pids.limit = -1'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_pids\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value \"pids.max\" \"max\"\n\t# systemd < v227 shows UINT64_MAX instead of \"infinity\".\n\tcheck_systemd_value \"TasksMax\" \"infinity\" \"18446744073709551615\"\n}\n\n@test \"runc run (cgroup v2 resources.unified only)\" {\n\trequires root cgroups_v2\n\n\tset_cgroups_path\n\tupdate_config ' .linux.resources.unified |= {\n\t\t\t\t\"memory.min\":   \"131072\",\n\t\t\t\t\"memory.low\":   \"524288\",\n\t\t\t\t\"memory.high\": \"5242880\",\n\t\t\t\t\"memory.max\": \"10485760\",\n\t\t\t\t\"pids.max\": \"99\",\n\t\t\t\t\"cpu.max\": \"10000 100000\",\n\t\t\t\t\"cpu.weight\": \"42\"\n\t\t\t}'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroups_unified\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_cgroups_unified sh -c 'cd /sys/fs/cgroup && grep . *.min *.max *.low *.high'\n\t[ \"$status\" -eq 0 ]\n\techo \"$output\"\n\n\techo \"$output\" | grep -q '^memory.min:131072$'\n\techo \"$output\" | grep -q '^memory.low:524288$'\n\techo \"$output\" | grep -q '^memory.high:5242880$'\n\techo \"$output\" | grep -q '^memory.max:10485760$'\n\techo \"$output\" | grep -q '^pids.max:99$'\n\techo \"$output\" | grep -q '^cpu.max:10000 100000$'\n\n\tcheck_systemd_value \"MemoryMin\" 131072\n\tcheck_systemd_value \"MemoryLow\" 524288\n\tcheck_systemd_value \"MemoryHigh\" 5242880\n\tcheck_systemd_value \"MemoryMax\" 10485760\n\tcheck_systemd_value \"TasksMax\" 99\n\tcheck_cpu_quota 10000 100000\n\tcheck_cpu_weight 42\n}\n\n@test \"runc run (cgroup v2 resources.unified swap)\" {\n\trequires root cgroups_v2 cgroups_swap\n\n\tset_cgroups_path\n\tupdate_config ' .linux.resources.unified |= {\n\t\t\t\t\"memory.max\": \"20512768\",\n\t\t\t\t\"memory.swap.max\": \"20971520\"\n\t\t\t}'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroups_unified\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_cgroups_unified sh -c 'cd /sys/fs/cgroup && grep . *.max'\n\t[ \"$status\" -eq 0 ]\n\techo \"$output\"\n\n\techo \"$output\" | grep -q '^memory.max:20512768$'\n\techo \"$output\" | grep -q '^memory.swap.max:20971520$'\n\n\tcheck_systemd_value \"MemoryMax\" 20512768\n\tcheck_systemd_value \"MemorySwapMax\" 20971520\n}\n\n@test \"runc run (cgroup v2 resources.unified override)\" {\n\trequires root cgroups_v2\n\n\tset_cgroups_path\n\t# CPU shares of 3333 corresponds to CPU weight of 128.\n\tupdate_config '   .linux.resources.memory |= {\"limit\": 33554432}\n\t\t\t| .linux.resources.cpu |= {\n\t\t\t\t\"shares\": 3333,\n\t\t\t\t\"quota\": 40000,\n\t\t\t\t\"period\": 100000\n\t\t\t}\n\t\t\t| .linux.resources.unified |= {\n\t\t\t\t\"memory.min\": \"131072\",\n\t\t\t\t\"memory.max\": \"10485760\",\n\t\t\t\t\"pids.max\": \"42\",\n\t\t\t\t\"cpu.max\": \"5000 50000\",\n\t\t\t\t\"cpu.weight\": \"42\"\n\t\t\t}'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroups_unified\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_cgroups_unified cat /sys/fs/cgroup/memory.min\n\t[ \"$status\" -eq 0 ]\n\t[ \"$output\" = '131072' ]\n\n\trunc exec test_cgroups_unified cat /sys/fs/cgroup/memory.max\n\t[ \"$status\" -eq 0 ]\n\t[ \"$output\" = '10485760' ]\n\n\trunc exec test_cgroups_unified cat /sys/fs/cgroup/pids.max\n\t[ \"$status\" -eq 0 ]\n\t[ \"$output\" = '42' ]\n\tcheck_systemd_value \"TasksMax\" 42\n\n\tcheck_cpu_quota 5000 50000\n\n\tcheck_cpu_weight 42\n}\n\n@test \"runc run (cgroupv2 mount inside container)\" {\n\trequires cgroups_v2\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tset_cgroups_path\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_cgroups_unified\n\t[ \"$status\" -eq 0 ]\n\n\t# Make sure we don't have any extra cgroups inside\n\trunc exec test_cgroups_unified find /sys/fs/cgroup/ -type d\n\t[ \"$status\" -eq 0 ]\n\t[ \"$(wc -l <<<\"$output\")\" -eq 1 ]\n}\n\n@test \"runc exec (cgroup v1+hybrid joins correct cgroup)\" {\n\trequires root cgroups_hybrid\n\n\tset_cgroups_path\n\n\trunc run --pid-file pid.txt -d --console-socket \"$CONSOLE_SOCKET\" test_cgroups_group\n\t[ \"$status\" -eq 0 ]\n\n\tpid=$(cat pid.txt)\n\trun_cgroup=$(tail -1 </proc/\"$pid\"/cgroup)\n\t[[ \"$run_cgroup\" == *\"runc-cgroups-integration-test\"* ]]\n\n\trunc exec test_cgroups_group cat /proc/self/cgroup\n\t[ \"$status\" -eq 0 ]\n\texec_cgroup=${lines[-1]}\n\t[[ $exec_cgroup == *\"runc-cgroups-integration-test\"* ]]\n\n\t# check that the cgroups v2 path is the same for both processes\n\t[ \"$run_cgroup\" = \"$exec_cgroup\" ]\n}\n\n@test \"runc exec should refuse a paused container\" {\n\trequires cgroups_freezer\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tset_cgroups_path\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" ct1\n\t[ \"$status\" -eq 0 ]\n\trunc pause ct1\n\t[ \"$status\" -eq 0 ]\n\n\t# Exec should not timeout or succeed.\n\trunc exec ct1 echo ok\n\t[ \"$status\" -eq 255 ]\n\t[[ \"$output\" == *\"cannot exec in a paused container\"* ]]\n}\n\n@test \"runc exec --ignore-paused\" {\n\trequires cgroups_freezer\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tset_cgroups_path\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" ct1\n\t[ \"$status\" -eq 0 ]\n\trunc pause ct1\n\t[ \"$status\" -eq 0 ]\n\n\t# Resume the container a bit later.\n\t(\n\t\tsleep 2\n\t\trunc resume ct1\n\t) &\n\n\t# Exec should succeed (once the container is resumed).\n\trunc exec --ignore-paused ct1 echo ok\n\t[ \"$status\" -eq 0 ]\n\t[ \"$output\" = \"ok\" ]\n}\n\n@test \"runc run/create should error for a non-empty cgroup\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tset_cgroups_path\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" ct1\n\t[ \"$status\" -eq 0 ]\n\n\t# Run a second container sharing the cgroup with the first one.\n\trunc --debug run -d --console-socket \"$CONSOLE_SOCKET\" ct2\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"container's cgroup is not empty\"* ]]\n\n\t# Same but using runc create.\n\trunc create --console-socket \"$CONSOLE_SOCKET\" ct3\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"container's cgroup is not empty\"* ]]\n}\n\n@test \"runc run/create should refuse pre-existing frozen cgroup\" {\n\trequires cgroups_freezer\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tset_cgroups_path\n\n\tif [ -v CGROUP_V1 ]; then\n\t\tFREEZER_DIR=\"${CGROUP_FREEZER_BASE_PATH}/${REL_CGROUPS_PATH}\"\n\t\tFREEZER=\"${FREEZER_DIR}/freezer.state\"\n\t\tSTATE=\"FROZEN\"\n\telse\n\t\tFREEZER_DIR=\"${CGROUP_V2_PATH}\"\n\t\tFREEZER=\"${FREEZER_DIR}/cgroup.freeze\"\n\t\tSTATE=\"1\"\n\tfi\n\n\t# Create and freeze the cgroup.\n\tmkdir -p \"$FREEZER_DIR\"\n\techo \"$STATE\" >\"$FREEZER\"\n\n\t# Start a container.\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" ct1\n\t[ \"$status\" -eq 1 ]\n\t# A warning should be printed.\n\t[[ \"$output\" == *\"container's cgroup unexpectedly frozen\"* ]]\n\n\t# Same check for runc create.\n\trunc create --console-socket \"$CONSOLE_SOCKET\" ct2\n\t[ \"$status\" -eq 1 ]\n\t# A warning should be printed.\n\t[[ \"$output\" == *\"container's cgroup unexpectedly frozen\"* ]]\n\n\t# Cleanup.\n\trmdir \"$FREEZER_DIR\"\n}\n"
  },
  {
    "path": "tests/integration/checkpoint.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction create_netns() {\n\t# Create a temporary name for the test network namespace.\n\ttmp=$(mktemp -u)\n\tns_name=$(basename \"$tmp\")\n\n\t# Create the network namespace.\n\tip netns add \"$ns_name\"\n\tns_path=$(ip netns add \"$ns_name\" 2>&1 | sed -e 's/.*\"\\(.*\\)\".*/\\1/')\n}\n\nfunction delete_netns() {\n\t# Delete the namespace only if the ns_name variable is set.\n\t[ -v ns_name ] && ip netns del \"$ns_name\"\n}\n\nfunction setup() {\n\t# XXX: currently criu require root containers.\n\trequires criu root\n\n\tsetup_busybox\n\n\t# Create a dummy interface to move to the container.\n\tip link add dummy0 type dummy\n}\n\nfunction teardown() {\n\tip link del dev dummy0\n\tdelete_netns\n\tteardown_bundle\n}\n\nfunction setup_pipes() {\n\t# The changes to 'terminal' are needed for running in detached mode\n\t# shellcheck disable=SC2016\n\tupdate_config ' (.. | select(.terminal? != null)) .terminal |= false\n\t\t\t| (.. | select(.[]? == \"sh\")) += [\"-c\", \"for i in `seq 10`; do read xxx || continue; echo ponG $xxx; done\"]'\n\n\t# Create three sets of pipes for __runc run.\n\t# for stderr\n\texec {pipe}<> <(:)\n\texec {err_r}</proc/self/fd/$pipe\n\texec {err_w}>/proc/self/fd/$pipe\n\texec {pipe}>&-\n\t# for stdout\n\texec {pipe}<> <(:)\n\texec {out_r}</proc/self/fd/$pipe\n\texec {out_w}>/proc/self/fd/$pipe\n\texec {pipe}>&-\n\t# for stdin\n\texec {pipe}<> <(:)\n\texec {in_r}</proc/self/fd/$pipe\n\texec {in_w}>/proc/self/fd/$pipe\n\texec {pipe}>&-\n}\n\nfunction check_pipes() {\n\tlocal output stderr\n\n\techo Ping >&${in_w}\n\texec {in_w}>&-\n\texec {out_w}>&-\n\texec {err_w}>&-\n\n\texec {in_r}>&-\n\toutput=$(cat <&${out_r})\n\texec {out_r}>&-\n\tstderr=$(cat <&${err_r})\n\texec {err_r}>&-\n\n\t[[ \"${output}\" == *\"ponG Ping\"* ]]\n\tif [ -n \"$stderr\" ]; then\n\t\tfail \"runc stderr: $stderr\"\n\tfi\n}\n\n# Usage: runc_run_with_pipes container-name\nfunction runc_run_with_pipes() {\n\t# Start a container to be checkpointed, with stdin/stdout redirected\n\t# so that check_pipes can be used to check it's working fine.\n\t# We have to redirect stderr as well because otherwise it is\n\t# redirected to a bats log file, which is not accessible to CRIU\n\t# (i.e. outside of container) so checkpointing will fail.\n\tret=0\n\t__runc run -d \"$1\" <&${in_r} >&${out_w} 2>&${err_w} || ret=$?\n\tif [ \"$ret\" -ne 0 ]; then\n\t\techo \"runc run -d $1 (status: $ret):\"\n\t\texec {err_w}>&-\n\t\tcat <&${err_r}\n\t\tfail \"runc run failed\"\n\tfi\n\n\ttestcontainer \"$1\" running\n}\n\n# Usage: runc_restore_with_pipes work-dir container-name [optional-arguments ...]\nfunction runc_restore_with_pipes() {\n\tworkdir=\"$1\"\n\tshift\n\tname=\"$1\"\n\tshift\n\n\tret=0\n\t__runc restore -d --work-path \"$workdir\" --image-path ./image-dir \"$@\" \"$name\" <&${in_r} >&${out_w} 2>&${err_w} || ret=$?\n\tif [ \"$ret\" -ne 0 ]; then\n\t\techo \"__runc restore $name failed (status: $ret)\"\n\t\texec {err_w}>&-\n\t\tcat <&${err_r}\n\t\tfail \"runc restore failed\"\n\tfi\n\n\ttestcontainer \"$name\" running\n\n\trunc exec --cwd /bin \"$name\" echo ok\n\t[ \"$status\" -eq 0 ]\n\t[ \"$output\" = \"ok\" ]\n}\n\nfunction simple_cr() {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\tfor _ in $(seq 2); do\n\t\trunc \"$@\" checkpoint --work-path ./work-dir test_busybox\n\t\t[ \"$status\" -eq 0 ]\n\n\t\ttestcontainer test_busybox checkpointed\n\n\t\trunc \"$@\" restore -d --work-path ./work-dir --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t\t[ \"$status\" -eq 0 ]\n\n\t\ttestcontainer test_busybox running\n\tdone\n}\n\nfunction simple_cr_with_netdevice() {\n\t# Set custom parameters to the netdevice to validate those are respected\n\tmtu_value=1789\n\tmac_address=\"00:11:22:33:44:55\"\n\tglobal_ip=\"169.254.169.77/32\"\n\n\tip link set mtu \"$mtu_value\" dev dummy0\n\tip link set address \"$mac_address\" dev dummy0\n\tip address add \"$global_ip\" dev dummy0\n\n\t# Tell runc which network namespace to use.\n\tcreate_netns\n\tupdate_config '(.. | select(.type? == \"network\")) .path |= \"'\"$ns_path\"'\"'\n\tupdate_config ' .linux.netDevices |= {\"dummy0\": {} }'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox_netdevice\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox_netdevice running\n\trunc exec test_busybox_netdevice ip address show dev dummy0\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\" $global_ip \"* ]]\n\t[[ \"$output\" == *\"ether $mac_address \"* ]]\n\t[[ \"$output\" == *\"mtu $mtu_value \"* ]]\n\n\tfor _ in $(seq 2); do\n\t\trunc \"$@\" checkpoint --work-path ./work-dir test_busybox_netdevice\n\t\t[ \"$status\" -eq 0 ]\n\n\t\ttestcontainer test_busybox_netdevice checkpointed\n\n\t\trunc \"$@\" restore -d --work-path ./work-dir --console-socket \"$CONSOLE_SOCKET\" test_busybox_netdevice\n\t\t[ \"$status\" -eq 0 ]\n\n\t\ttestcontainer test_busybox_netdevice running\n\t\trunc exec test_busybox_netdevice ip address show dev dummy0\n\t\t[ \"$status\" -eq 0 ]\n\t\t[[ \"$output\" == *\" $global_ip \"* ]]\n\t\t[[ \"$output\" == *\"ether $mac_address \"* ]]\n\t\t[[ \"$output\" == *\"mtu $mtu_value \"* ]]\n\tdone\n}\n\n@test \"checkpoint and restore\" {\n\tsimple_cr\n}\n\n@test \"checkpoint and restore (bind mount, destination is symlink)\" {\n\tmkdir -p rootfs/real/conf\n\tln -s /real/conf rootfs/conf\n\tupdate_config '\t  .mounts += [{\n\t\t\t\t\tsource: \".\",\n\t\t\t\t\tdestination: \"/conf\",\n\t\t\t\t\toptions: [\"bind\"]\n\t\t\t\t}]'\n\tsimple_cr\n}\n\n@test \"checkpoint and restore (with --debug)\" {\n\tsimple_cr --debug\n}\n\n@test \"checkpoint and restore (cgroupns)\" {\n\t# cgroupv2 already enables cgroupns so this case was tested above already\n\trequires cgroups_v1 cgroupns\n\n\t# enable CGROUPNS\n\tupdate_config '.linux.namespaces += [{\"type\": \"cgroup\"}]'\n\n\tsimple_cr\n}\n\n@test \"checkpoint and restore with netdevice\" {\n\tsimple_cr_with_netdevice\n}\n\n@test \"checkpoint and restore with netdevice (bind mount, destination is symlink)\" {\n\tmkdir -p rootfs/real/conf\n\tln -s /real/conf rootfs/conf\n\tupdate_config '\t  .mounts += [{\n\t\t\t\t\tsource: \".\",\n\t\t\t\t\tdestination: \"/conf\",\n\t\t\t\t\toptions: [\"bind\"]\n\t\t\t\t}]'\n\tsimple_cr_with_netdevice\n}\n\n@test \"checkpoint and restore with netdevice (with --debug)\" {\n\tsimple_cr_with_netdevice --debug\n}\n\n@test \"checkpoint and restore with netdevice (cgroupns)\" {\n\t# cgroupv2 already enables cgroupns so this case was tested above already\n\trequires cgroups_v1 cgroupns\n\n\t# enable CGROUPNS\n\tupdate_config '.linux.namespaces += [{\"type\": \"cgroup\"}]'\n\n\tsimple_cr_with_netdevice\n}\n\n@test \"checkpoint --pre-dump (bad --parent-path)\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\t# runc should fail with absolute parent image path.\n\trunc checkpoint --parent-path \"$(pwd)\"/parent-dir --work-path ./work-dir --image-path ./image-dir test_busybox\n\t[[ \"${output}\" == *\"--parent-path\"* ]]\n\t[ \"$status\" -ne 0 ]\n\n\t# runc should fail with invalid parent image path.\n\trunc checkpoint --parent-path ./parent-dir --work-path ./work-dir --image-path ./image-dir test_busybox\n\t[[ \"${output}\" == *\"--parent-path\"* ]]\n\t[ \"$status\" -ne 0 ]\n}\n\n@test \"checkpoint --pre-dump and restore\" {\n\t# Requires kernel dirty memory tracking (missing on ARM, see\n\t# https://github.com/checkpoint-restore/criu/issues/1729).\n\trequires criu_feature_mem_dirty_track\n\n\tsetup_pipes\n\trunc_run_with_pipes test_busybox\n\n\tmkdir parent-dir\n\trunc checkpoint --pre-dump --image-path ./parent-dir test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\tmkdir image-dir\n\tmkdir work-dir\n\trunc checkpoint --parent-path ../parent-dir --work-path ./work-dir --image-path ./image-dir test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# check parent path is valid\n\t[ -e ./image-dir/parent ]\n\n\ttestcontainer test_busybox checkpointed\n\n\trunc_restore_with_pipes ./work-dir test_busybox\n\tcheck_pipes\n}\n\n@test \"checkpoint --lazy-pages and restore\" {\n\t# Requires lazy-pages support.\n\trequires criu_feature_uffd-noncoop\n\n\tsetup_pipes\n\trunc_run_with_pipes test_busybox\n\n\tmkdir image-dir\n\tmkdir work-dir\n\n\t# For lazy migration we need to know when CRIU is ready to serve\n\t# the memory pages via TCP.\n\texec {pipe}<> <(:)\n\t# shellcheck disable=SC2094\n\texec {lazy_r}</proc/self/fd/$pipe {lazy_w}>/proc/self/fd/$pipe\n\texec {pipe}>&-\n\n\t# TCP port for lazy migration\n\tport=27277\n\n\t__runc checkpoint \\\n\t\t--lazy-pages \\\n\t\t--page-server 0.0.0.0:${port} \\\n\t\t--status-fd ${lazy_w} \\\n\t\t--manage-cgroups-mode=ignore \\\n\t\t--work-path ./work-dir \\\n\t\t--image-path ./image-dir \\\n\t\ttest_busybox &\n\tcpt_pid=$!\n\n\t# wait for lazy page server to be ready\n\tout=$(timeout 2 dd if=/proc/self/fd/${lazy_r} bs=1 count=1 2>/dev/null | od)\n\texec {lazy_r}>&-\n\texec {lazy_w}>&-\n\t# shellcheck disable=SC2116,SC2086\n\tout=$(echo $out) # rm newlines\n\t# expecting \\0 which od prints as\n\t[ \"$out\" = \"0000000 000000 0000001\" ]\n\n\t# Check if inventory.img was written\n\t[ -e image-dir/inventory.img ]\n\n\t# Start CRIU in lazy-daemon mode\n\tcriu lazy-pages --page-server --address 127.0.0.1 --port ${port} -D image-dir &\n\tlp_pid=$!\n\n\t# Restore lazily from checkpoint.\n\t#\n\t# The restored container needs a different name and a different cgroup\n\t# (and a different systemd unit name, in case systemd cgroup driver is\n\t# used) as the checkpointed container is not yet destroyed. It is only\n\t# destroyed at that point in time when the last page is lazily\n\t# transferred to the destination.\n\t#\n\t# Killing the CRIU on the checkpoint side will let the container\n\t# continue to run if the migration failed at some point.\n\trunc_restore_with_pipes ./image-dir test_busybox_restore \\\n\t\t--lazy-pages \\\n\t\t--manage-cgroups-mode=ignore\n\n\twait $cpt_pid\n\n\twait $lp_pid\n\n\tcheck_pipes\n}\n\n@test \"checkpoint and restore in external network namespace\" {\n\t# Requires external network namespaces (criu >= 3.10).\n\trequires criu_feature_external_net_ns\n\n\t# create a temporary name for the test network namespace\n\ttmp=$(mktemp)\n\trm -f \"$tmp\"\n\tns_name=$(basename \"$tmp\")\n\t# create network namespace\n\tip netns add \"$ns_name\"\n\tns_path=$(ip netns add \"$ns_name\" 2>&1 | sed -e 's/.*\"\\(.*\\)\".*/\\1/')\n\t# shellcheck disable=SC2012\n\tns_inode=$(ls -iL \"$ns_path\" | awk '{ print $1 }')\n\n\t# tell runc which network namespace to use\n\tupdate_config '(.. | select(.type? == \"network\")) .path |= \"'\"$ns_path\"'\"'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\tfor _ in $(seq 2); do\n\t\t# checkpoint the running container; this automatically tells CRIU to\n\t\t# handle the network namespace defined in config.json as an external\n\t\trunc checkpoint --work-path ./work-dir test_busybox\n\t\t[ \"$status\" -eq 0 ]\n\n\t\ttestcontainer test_busybox checkpointed\n\n\t\t# restore from checkpoint; this should restore the container into the existing network namespace\n\t\trunc restore -d --work-path ./work-dir --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t\t[ \"$status\" -eq 0 ]\n\n\t\ttestcontainer test_busybox running\n\n\t\t# container should be running in same network namespace as before\n\t\tpid=$(__runc state test_busybox | jq '.pid')\n\t\tns_inode_new=$(readlink /proc/\"$pid\"/ns/net | sed -e 's/.*\\[\\(.*\\)\\]/\\1/')\n\t\techo \"old network namespace inode $ns_inode\"\n\t\techo \"new network namespace inode $ns_inode_new\"\n\t\t[ \"$ns_inode\" -eq \"$ns_inode_new\" ]\n\tdone\n\tip netns del \"$ns_name\"\n}\n\n@test \"checkpoint and restore with container specific CRIU config\" {\n\ttmp=$(mktemp /tmp/runc-criu-XXXXXX.conf)\n\t# This is the file we write to /etc/criu/default.conf\n\ttmplog1=$(mktemp /tmp/runc-criu-log-XXXXXX.log)\n\tunlink \"$tmplog1\"\n\ttmplog1=$(basename \"$tmplog1\")\n\t# That is the actual configuration file to be used\n\ttmplog2=$(mktemp /tmp/runc-criu-log-XXXXXX.log)\n\tunlink \"$tmplog2\"\n\ttmplog2=$(basename \"$tmplog2\")\n\t# This adds the annotation 'org.criu.config' to set a container\n\t# specific CRIU config file.\n\tupdate_config '.annotations += {\"org.criu.config\": \"'\"$tmp\"'\"}'\n\n\t# Tell CRIU to use another configuration file\n\tmkdir -p /etc/criu\n\techo \"log-file=$tmplog1\" >/etc/criu/default.conf\n\t# Make sure the RPC defined configuration file overwrites the previous\n\techo \"log-file=$tmplog2\" >\"$tmp\"\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\trunc checkpoint --work-path ./work-dir test_busybox\n\t[ \"$status\" -eq 0 ]\n\trun ! test -f ./work-dir/\"$tmplog1\"\n\ttest -f ./work-dir/\"$tmplog2\"\n\n\ttestcontainer test_busybox checkpointed\n\n\ttest -f ./work-dir/\"$tmplog2\" && unlink ./work-dir/\"$tmplog2\"\n\n\trunc restore -d --work-path ./work-dir --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\trun ! test -f ./work-dir/\"$tmplog1\"\n\ttest -f ./work-dir/\"$tmplog2\"\n\n\ttestcontainer test_busybox running\n\tunlink \"$tmp\"\n\ttest -f ./work-dir/\"$tmplog2\" && unlink ./work-dir/\"$tmplog2\"\n}\n\n@test \"checkpoint and restore with nested bind mounts\" {\n\tbind1=$(mktemp -d -p .)\n\tbind2=$(mktemp -d -p .)\n\tupdate_config '\t  .mounts += [{\n\t\t\t\t\ttype: \"bind\",\n\t\t\t\t\tsource: \"'\"$bind1\"'\",\n\t\t\t\t\tdestination: \"/test\",\n\t\t\t\t\toptions: [\"rw\", \"bind\"]\n\t\t\t\t},\n\t                        {\n\t\t\t\t\ttype: \"bind\",\n\t\t\t\t\tsource: \"'\"$bind2\"'\",\n\t\t\t\t\tdestination: \"/test/for/nested\",\n\t\t\t\t\toptions: [\"rw\", \"bind\"]\n\t\t\t\t}]'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\trunc checkpoint --work-path ./work-dir test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox checkpointed\n\n\t# cleanup mountpoints created by runc during creation\n\t# the mountpoints should be recreated during restore - that is the actual thing tested here\n\trm -rf \"${bind1:?}\"/*\n\n\trunc restore -d --work-path ./work-dir --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n}\n\n@test \"checkpoint then restore into a different cgroup (via --manage-cgroups-mode ignore)\" {\n\tset_resources_limit\n\tset_cgroups_path\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\ttestcontainer test_busybox running\n\n\tlocal orig_path\n\torig_path=$(get_cgroup_path \"pids\")\n\t# Check that the cgroup exists.\n\ttest -d \"$orig_path\"\n\n\trunc checkpoint --work-path ./work-dir --manage-cgroups-mode ignore test_busybox\n\t[ \"$status\" -eq 0 ]\n\ttestcontainer test_busybox checkpointed\n\t# Check that the cgroup is gone.\n\trun ! test -d \"$orig_path\"\n\n\t# Restore into a different cgroup.\n\tset_cgroups_path # Changes the path.\n\trunc restore -d --manage-cgroups-mode ignore --pid-file pid \\\n\t\t--work-path ./work-dir --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\ttestcontainer test_busybox running\n\n\t# Check that the old cgroup path doesn't exist.\n\trun ! test -d \"$orig_path\"\n\n\t# Check that the new path exists.\n\tlocal new_path\n\tnew_path=$(get_cgroup_path \"pids\")\n\ttest -d \"$new_path\"\n\n\t# Check that container's init is in the new cgroup.\n\tlocal pid\n\tpid=$(cat \"pid\")\n\tgrep -q \"${REL_CGROUPS_PATH}$\" \"/proc/$pid/cgroup\"\n}\n\n@test \"checkpoint/restore and exec\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\tlocal execed_pid=\"\"\n\tfor _ in $(seq 2); do\n\t\trunc checkpoint --work-path ./work-dir test_busybox\n\t\t[ \"$status\" -eq 0 ]\n\n\t\ttestcontainer test_busybox checkpointed\n\n\t\trunc restore -d --work-path ./work-dir --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t\t[ \"$status\" -eq 0 ]\n\n\t\ttestcontainer test_busybox running\n\n\t\t# verify that previously exec'd process is restored.\n\t\tif [ -n \"$execed_pid\" ]; then\n\t\t\trunc exec test_busybox ls -ld \"/proc/$execed_pid\"\n\t\t\t[ \"$status\" -eq 0 ]\n\t\tfi\n\n\t\t# exec a new background process.\n\t\trunc exec test_busybox sh -c 'sleep 1000 < /dev/null &> /dev/null & echo $!'\n\t\t[ \"$status\" -eq 0 ]\n\t\texeced_pid=$output\n\tdone\n}\n"
  },
  {
    "path": "tests/integration/cpu_affinity.bats",
    "content": "#!/usr/bin/env bats\n# Exec CPU affinity tests. For more details, see:\n#  - https://github.com/opencontainers/runtime-spec/pull/1253\n\nload helpers\n\nINITIAL_CPU_MASK=\"$(grep -F Cpus_allowed_list: /proc/self/status | awk '{ print $2 }')\"\n\nfunction setup() {\n\trequires smp cgroups_cpuset\n\tsetup_busybox\n\n\techo \"Initial CPU mask: $INITIAL_CPU_MASK\" >&2\n\techo \"---\" >&2\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\nfunction first_cpu() {\n\tsed 's/[-,].*//g' </sys/devices/system/cpu/online\n}\n\n# Convert list of cpus (\"0,1\" or \"0-1\") to mask as printed by nsexec.\n# NOTE the range conversion is not proper, merely sufficient for tests here.\nfunction cpus_to_mask() {\n\tlocal cpus=$* mask=0\n\n\tcpus=${cpus//,/-} # 1. \",\" --> \"-\".\n\tcpus=${cpus//-/ } # 2. \"-\" --> \" \".\n\n\tfor c in $cpus; do\n\t\tmask=$((mask | 1 << c))\n\tdone\n\n\tprintf \"0x%x\" $mask\n}\n\n@test \"runc exec [CPU affinity, only initial set from process.json]\" {\n\tfirst=\"$(first_cpu)\"\n\tsecond=$((first + 1)) # Hacky; might not work in all environments.\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" ct1\n\t[ \"$status\" -eq 0 ]\n\n\tfor cpus in \"$second\" \"$first-$second\" \"$first,$second\" \"$first\"; do\n\t\tproc='\n{\n    \"terminal\": false,\n    \"execCPUAffinity\": {\n\t    \"initial\": \"'$cpus'\"\n    },\n    \"args\": [ \"/bin/true\" ],\n    \"cwd\": \"/\"\n}'\n\t\tmask=$(cpus_to_mask \"$cpus\")\n\t\techo \"CPUS: $cpus, mask: $mask\"\n\t\trunc --debug exec --process <(echo \"$proc\") ct1\n\t\t[[ \"$output\" == *\"nsexec\"*\": affinity: $mask\"* ]]\n\tdone\n}\n\n@test \"runc exec [CPU affinity, initial and final set from process.json]\" {\n\tfirst=\"$(first_cpu)\"\n\tsecond=$((first + 1)) # Hacky; might not work in all environments.\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" ct1\n\t[ \"$status\" -eq 0 ]\n\n\tfor cpus in \"$second\" \"$first-$second\" \"$first,$second\" \"$first\"; do\n\t\tproc='\n{\n    \"terminal\": false,\n    \"execCPUAffinity\": {\n\t    \"initial\": \"'$cpus'\",\n\t    \"final\": \"'$cpus'\"\n    },\n    \"args\": [ \"/bin/grep\", \"-F\", \"Cpus_allowed_list:\", \"/proc/self/status\" ],\n    \"cwd\": \"/\"\n}'\n\t\tmask=$(cpus_to_mask \"$cpus\")\n\t\texp=${cpus//,/-} # \",\" --> \"-\".\n\t\techo \"CPUS: $cpus, mask: $mask, final: $exp\"\n\t\trunc --debug exec --process <(echo \"$proc\") ct1\n\t\t[[ \"$output\" == *\"nsexec\"*\": affinity: $mask\"* ]]\n\t\t[[ \"$output\" == *\"Cpus_allowed_list:\t$exp\"* ]] # Mind the literal tab.\n\tdone\n}\n\n@test \"runc exec [CPU affinity, initial and final set from config.json]\" {\n\tinitial=\"$(first_cpu)\"\n\tfinal=$((initial + 1)) # Hacky; might not work in all environments.\n\n\tupdate_config \"\t  .process.execCPUAffinity.initial = \\\"$initial\\\"\n\t\t\t| .process.execCPUAffinity.final = \\\"$final\\\"\"\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" ct1\n\t[ \"$status\" -eq 0 ]\n\n\trunc --debug exec ct1 grep \"Cpus_allowed_list:\" /proc/self/status\n\t[ \"$status\" -eq 0 ]\n\tmask=$(cpus_to_mask \"$initial\")\n\t[[ \"$output\" == *\"nsexec\"*\": affinity: $mask\"* ]]\n\t[[ \"$output\" == *\"Cpus_allowed_list:\t$final\"* ]] # Mind the literal tab.\n}\n\n@test \"runc run [CPU affinity should reset]\" {\n\t# We need to use RUNC_CMDLINE since taskset requires a proper binary, not a\n\t# bash function (which is what runc and __runc are).\n\tsetup_runc_cmdline\n\n\tfirst=\"$(first_cpu)\"\n\n\t# Running without cpuset should result in an affinity for all CPUs.\n\tupdate_config '.process.args = [ \"/bin/grep\", \"-F\", \"Cpus_allowed_list:\", \"/proc/self/status\" ]'\n\tupdate_config 'del(.linux.resources.cpu)'\n\tsane_run taskset -c \"$first\" \"${RUNC_CMDLINE[@]}\" run ctr\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" != $'Cpus_allowed_list:\\t'\"$first\" ]]\n\t[[ \"$output\" == $'Cpus_allowed_list:\\t'\"$INITIAL_CPU_MASK\" ]]\n}\n\n@test \"runc run [CPU affinity should reset to cgroup cpuset]\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\tset_cgroups_path\n\n\t# We need to use RUNC_CMDLINE since taskset requires a proper binary, not a\n\t# bash function (which is what runc and __runc are).\n\tsetup_runc_cmdline\n\n\tfirst=\"$(first_cpu)\"\n\tsecond=\"$((first + 1))\" # Hacky; might not work in all environments.\n\n\t# Running with a cpuset should result in an affinity that matches.\n\tupdate_config '.process.args = [ \"/bin/grep\", \"-F\", \"Cpus_allowed_list:\", \"/proc/self/status\" ]'\n\tupdate_config '.linux.resources.cpu = {\"mems\": \"0\", \"cpus\": \"'\"$first-$second\"'\"}'\n\tsane_run taskset -c \"$first\" \"${RUNC_CMDLINE[@]}\" run ctr\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" != $'Cpus_allowed_list:\\t'\"$first\" ]]\n\t# XXX: For some reason, systemd-cgroup leads to us using the all-set\n\t#      cpumask rather than the cpuset we configured?\n\t[ -v RUNC_USE_SYSTEMD ] || [[ \"$output\" == $'Cpus_allowed_list:\\t'\"$first-$second\" ]]\n\n\t# Ditto for a cpuset that has no overlap with the original cpumask.\n\tupdate_config '.linux.resources.cpu = {\"mems\": \"0\", \"cpus\": \"'\"$second\"'\"}'\n\tsane_run taskset -c \"$first\" \"${RUNC_CMDLINE[@]}\" run ctr\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" != $'Cpus_allowed_list:\\t'\"$first\" ]]\n\t# XXX: For some reason, systemd-cgroup leads to us using the all-set\n\t#      cpumask rather than the cpuset we configured?\n\t[ -v RUNC_USE_SYSTEMD ] || [[ \"$output\" == $'Cpus_allowed_list:\\t'\"$second\" ]]\n}\n\n@test \"runc exec [default CPU affinity should reset]\" {\n\t# We need to use RUNC_CMDLINE since taskset requires a proper binary, not a\n\t# bash function (which is what runc and __runc are).\n\tsetup_runc_cmdline\n\n\tfirst=\"$(first_cpu)\"\n\n\t# Running without cpuset should result in an affinity for all CPUs.\n\tupdate_config '.process.args = [ \"/bin/sleep\", \"infinity\" ]'\n\tupdate_config 'del(.linux.resources.cpu)'\n\tsane_run taskset -c \"$first\" \"${RUNC_CMDLINE[@]}\" run -d --console-socket \"$CONSOLE_SOCKET\" ctr3\n\t[ \"$status\" -eq 0 ]\n\tsane_run taskset -c \"$first\" \"${RUNC_CMDLINE[@]}\" exec ctr3 grep -F Cpus_allowed_list: /proc/self/status\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" != $'Cpus_allowed_list:\\t'\"$first\" ]]\n\t[[ \"$output\" == $'Cpus_allowed_list:\\t'\"$INITIAL_CPU_MASK\" ]]\n}\n\n@test \"runc exec [default CPU affinity should reset to cgroup cpuset]\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\tset_cgroups_path\n\n\t# We need to use RUNC_CMDLINE since taskset requires a proper binary, not a\n\t# bash function (which is what runc and __runc are).\n\tsetup_runc_cmdline\n\n\tfirst=\"$(first_cpu)\"\n\tsecond=\"$((first + 1))\" # Hacky; might not work in all environments.\n\n\t# Running with a cpuset should result in an affinity that matches.\n\tupdate_config '.process.args = [ \"/bin/sleep\", \"infinity\" ]'\n\tupdate_config '.linux.resources.cpu = {\"mems\": \"0\", \"cpus\": \"'\"$first-$second\"'\"}'\n\tsane_run taskset -c \"$first\" \"${RUNC_CMDLINE[@]}\" run -d --console-socket \"$CONSOLE_SOCKET\" ctr\n\t[ \"$status\" -eq 0 ]\n\tsane_run taskset -c \"$first\" \"${RUNC_CMDLINE[@]}\" exec ctr grep -F Cpus_allowed_list: /proc/self/status\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" != $'Cpus_allowed_list:\\t'\"$first\" ]]\n\t# XXX: For some reason, systemd-cgroup leads to us using the all-set\n\t#      cpumask rather than the cpuset we configured?\n\t[ -v RUNC_USE_SYSTEMD ] || [[ \"$output\" == $'Cpus_allowed_list:\\t'\"$first-$second\" ]]\n\n\t# Stop the container so we can reconfigure it.\n\trunc delete -f ctr\n\t[ \"$status\" -eq 0 ]\n\n\t# Ditto for a cpuset that has no overlap with the original cpumask.\n\tupdate_config '.linux.resources.cpu = {\"mems\": \"0\", \"cpus\": \"'\"$second\"'\"}'\n\tsane_run taskset -c \"$first\" \"${RUNC_CMDLINE[@]}\" run -d --console-socket \"$CONSOLE_SOCKET\" ctr\n\t[ \"$status\" -eq 0 ]\n\tsane_run taskset -c \"$first\" \"${RUNC_CMDLINE[@]}\" exec ctr grep -F Cpus_allowed_list: /proc/self/status\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" != $'Cpus_allowed_list:\\t'\"$first\" ]]\n\t# XXX: For some reason, systemd-cgroup leads to us using the all-set\n\t#      cpumask rather than the cpuset we configured?\n\t[ -v RUNC_USE_SYSTEMD ] || [[ \"$output\" == $'Cpus_allowed_list:\\t'\"$second\" ]]\n}\n"
  },
  {
    "path": "tests/integration/create.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n# is_allowed_fdtarget checks whether the target of a file descriptor symlink\n# conforms to the allowed whitelist.\n#\n# This whitelist reflects the set of file descriptors that runc legitimately\n# opens during container lifecycle operations (e.g., exec, create, and run).\n# If runc's internal behavior changes (e.g., new FD types are introduced),\n# this function MUST be updated accordingly to avoid false positives.\n#\nis_allowed_fdtarget() {\n\tlocal target=\"$1\"\n\t{\n\t\t# pty devices for stdio\n\t\tgrep -Ex \"/dev/pts/[0-9]+\" <<<\"$target\" ||\n\t\t\t# eventfd, eventpoll, signalfd, etc.\n\t\t\tgrep -Ex \"anon_inode:\\[.+\\]\" <<<\"$target\" ||\n\t\t\t# procfs handle cache (pathrs-lite / libpathrs)\n\t\t\tgrep -Ex \"/(proc)?\" <<<\"$target\" ||\n\t\t\t# anonymous sockets used for IPC\n\t\t\tgrep -Ex \"socket:\\[[0-9]+\\]\" <<<\"$target\" ||\n\t\t\t# anonymous pipes used for I/O forwarding\n\t\t\tgrep -Ex \"pipe:\\[[0-9]+\\]\" <<<\"$target\" ||\n\t\t\t# \"runc start\" synchronisation barrier FIFO\n\t\t\tgrep -Ex \".*/exec\\.fifo\" <<<\"$target\" ||\n\t\t\t# temporary internal fd used in exec.fifo FIFO reopen (pathrs-lite / libpathrs)\n\t\t\tgrep -Ex \"(/proc)?/1/task/1/fd\" <<<\"$target\" ||\n\t\t\t# overlayfs binary reference (CVE-2019-5736)\n\t\t\tgrep -Ex \"/runc\" <<<\"$target\" ||\n\t\t\t# memfd cloned binary (CVE-2019-5736)\n\t\t\tgrep -Fx \"/memfd:runc_cloned:/proc/self/exe (deleted)\" <<<\"$target\"\n\t} >/dev/null\n\treturn \"$?\"\n}\n\n@test \"runc create[detect fd leak as comprehensively as possible]\" {\n\trunc create --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox created\n\n\tpid=$(__runc state test_busybox | jq '.pid')\n\tviolation_found=0\n\n\twhile IFS= read -rd '' link; do\n\t\tfd_name=$(basename \"$link\")\n\t\t# Skip . and ..\n\t\tif [[ \"$fd_name\" == \".\" || \"$fd_name\" == \"..\" ]]; then\n\t\t\tcontinue\n\t\tfi\n\n\t\t# Resolve symlink target (use readlink)\n\t\ttarget=$(readlink \"$link\" 2>/dev/null)\n\t\tif [[ -z \"$target\" ]]; then\n\t\t\techo \"Warning: Cannot read target of $link\"\n\t\t\tcontinue\n\t\tfi\n\n\t\tif ! is_allowed_fdtarget \"$target\"; then\n\t\t\techo \"Violation: FD $fd_name -> '$target'\"\n\t\t\tviolation_found=1\n\t\telse\n\t\t\techo \"Permitted: FD $fd_name -> '$target'\"\n\t\tfi\n\tdone < <(find \"/proc/$pid/fd\" -type l -print0)\n\t[ \"$violation_found\" -eq 0 ]\n}\n\n@test \"runc create\" {\n\trunc create --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox created\n\n\trunc start test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n}\n\n@test \"runc create exec\" {\n\trunc create --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox created\n\n\trunc exec test_busybox true\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox created\n\n\trunc start test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n}\n\n@test \"runc create --pid-file\" {\n\trunc create --pid-file pid.txt --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox created\n\n\t[ -e pid.txt ]\n\t[[ $(cat pid.txt) = $(__runc state test_busybox | jq '.pid') ]]\n\n\trunc start test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n}\n\n@test \"runc create --pid-file with new CWD\" {\n\tbundle=\"$(pwd)\"\n\tmkdir pid_file\n\tcd pid_file\n\n\trunc create --pid-file pid.txt -b \"$bundle\" --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox created\n\n\t[ -e pid.txt ]\n\t[[ $(cat pid.txt) = $(__runc state test_busybox | jq '.pid') ]]\n\n\trunc start test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n}\n\n# https://github.com/opencontainers/runc/issues/4394#issuecomment-2334926257\n@test \"runc create [shared pidns + rootless]\" {\n\t# Remove pidns so it's shared with the host.\n\tupdate_config '\t  .linux.namespaces -= [{\"type\": \"pid\"}]'\n\tif [ $EUID -ne 0 ]; then\n\t\tif rootless_cgroup; then\n\t\t\t# Rootless containers have empty cgroup path by default.\n\t\t\tset_cgroups_path\n\t\tfi\n\t\t# Can't mount real /proc when rootless + no pidns,\n\t\t# so change it to a bind-mounted one from the host.\n\t\tupdate_config '\t  .mounts |= map((select(.type == \"proc\")\n                                | .type = \"none\"\n                                | .source = \"/proc\"\n                                | .options = [\"rbind\", \"nosuid\", \"nodev\", \"noexec\"]\n                          ) // .)'\n\tfi\n\n\texp=\"Such configuration is strongly discouraged\"\n\trunc create --console-socket \"$CONSOLE_SOCKET\" test\n\t[ \"$status\" -eq 0 ]\n\tif [ $EUID -ne 0 ] && ! rootless_cgroup; then\n\t\t[[ \"$output\" = *\"$exp\"* ]]\n\telse\n\t\t[[ \"$output\" != *\"$exp\"* ]]\n\tfi\n}\n"
  },
  {
    "path": "tests/integration/cwd.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n# Test case for https://github.com/opencontainers/runc/pull/2086\n@test \"runc exec --user with no access to cwd\" {\n\trequires root\n\n\tchown 42 rootfs/root\n\tchmod 700 rootfs/root\n\n\tupdate_config '\t  .process.cwd = \"/root\"\n\t\t\t| .process.user.uid = 42\n\t\t\t| .process.args |= [\"sleep\", \"1h\"]'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec --user 0 test_busybox true\n\t[ \"$status\" -eq 0 ]\n}\n\n# Verify a cwd owned by the container user can be chdir'd to,\n# even if runc doesn't have the privilege to do so.\n@test \"runc create sets up user before chdir to cwd if needed\" {\n\trequires rootless rootless_idmap\n\n\t# Some setup for this test (AUX_DIR and AUX_UID) is done\n\t# by rootless.sh. Check that setup is done...\n\tif [[ ! -v AUX_UID || ! -v AUX_DIR || ! -d \"$AUX_DIR\" ]]; then\n\t\tskip \"bad/unset AUX_DIR/AUX_UID\"\n\tfi\n\t# ... and is correct, i.e. the current user\n\t# does not have permission to access AUX_DIR.\n\tif ls -l \"$AUX_DIR\" 2>/dev/null; then\n\t\tskip \"bad AUX_DIR permissions\"\n\tfi\n\n\tupdate_config '   .mounts += [{\n\t\t\t\tsource: \"'\"$AUX_DIR\"'\",\n\t\t\t\tdestination: \"'\"$AUX_DIR\"'\",\n\t\t\t\toptions: [\"bind\"]\n\t\t\t    }]\n\t\t\t| .process.user.uid = '\"$AUX_UID\"'\n\t\t\t| .process.cwd = \"'\"$AUX_DIR\"'\"\n\t\t\t| .process.args |= [\"ls\", \"'\"$AUX_DIR\"'\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n# Verify a cwd not owned by the container user can be chdir'd to,\n# if runc does have the privilege to do so.\n@test \"runc create can chdir if runc has access\" {\n\trequires root\n\n\tmkdir -p rootfs/home/nonroot\n\tchmod 700 rootfs/home/nonroot\n\n\tupdate_config '\t  .process.cwd = \"/root\"\n\t\t\t| .process.user.uid = 42\n\t\t\t| .process.args |= [\"ls\", \"/tmp\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n"
  },
  {
    "path": "tests/integration/debug.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n\tupdate_config '.process.args = [\"/bin/echo\", \"Hello World\"]'\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\nfunction check_debug() {\n\t[[ \"$*\" == *\"nsexec container setup\"* ]]\n\t[[ \"$*\" == *\"child process in init()\"* ]]\n\t[[ \"$*\" == *\"init: closing the pipe to signal completion\"* ]]\n}\n\n@test \"global --debug\" {\n\trunc --debug run test_hello\n\t[ \"$status\" -eq 0 ]\n\n\t# check expected debug output was sent to stderr\n\t[[ \"${output}\" == *\"level=debug\"* ]]\n\tcheck_debug \"$output\"\n}\n\n@test \"global --debug to --log\" {\n\trunc --log log.out --debug run test_hello\n\t[ \"$status\" -eq 0 ]\n\n\t# check output does not include debug info\n\t[[ \"${output}\" != *\"level=debug\"* ]]\n\n\tcat log.out >&2\n\t# check expected debug output was sent to log.out\n\toutput=$(cat log.out)\n\t[[ \"${output}\" == *\"level=debug\"* ]]\n\tcheck_debug \"$output\"\n}\n\n@test \"global --debug to --log --log-format 'text'\" {\n\trunc --log log.out --log-format \"text\" --debug run test_hello\n\t[ \"$status\" -eq 0 ]\n\n\t# check output does not include debug info\n\t[[ \"${output}\" != *\"level=debug\"* ]]\n\n\tcat log.out >&2\n\t# check expected debug output was sent to log.out\n\toutput=$(cat log.out)\n\t[[ \"${output}\" == *\"level=debug\"* ]]\n\tcheck_debug \"$output\"\n}\n\n@test \"global --debug to --log --log-format 'json'\" {\n\trunc --log log.out --log-format \"json\" --debug run test_hello\n\t[ \"$status\" -eq 0 ]\n\n\t# check output does not include debug info\n\t[[ \"${output}\" != *\"level=debug\"* ]]\n\n\tcat log.out >&2\n\t# check expected debug output was sent to log.out\n\toutput=$(cat log.out)\n\t[[ \"${output}\" == *'\"level\":\"debug\"'* ]]\n\tcheck_debug \"$output\"\n}\n"
  },
  {
    "path": "tests/integration/delete.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n# See also: \"kill KILL [host pidns + init gone]\" test in kill.bats.\n#\n# This needs to be placed at the top of the bats file to work around\n# a shellcheck bug. See <https://github.com/koalaman/shellcheck/issues/2873>.\nfunction test_runc_delete_host_pidns() {\n\trequires cgroups_freezer\n\n\tupdate_config '\t  .linux.namespaces -= [{\"type\": \"pid\"}]'\n\tset_cgroups_path\n\tif [ $EUID -ne 0 ]; then\n\t\trequires rootless_cgroup\n\t\t# Apparently, for rootless test, when using systemd cgroup manager,\n\t\t# newer versions of systemd clean up the container as soon as its init\n\t\t# process is gone. This is all fine and dandy, except it prevents us to\n\t\t# test this case, thus we skip the test.\n\t\t#\n\t\t# It is not entirely clear which systemd version got this feature:\n\t\t# v245 works fine, and v249 does not.\n\t\tif [ -v RUNC_USE_SYSTEMD ] && [ \"$(systemd_version)\" -gt 245 ]; then\n\t\t\tskip \"rootless+systemd conflicts with systemd > 245\"\n\t\tfi\n\t\t# Can't mount real /proc when rootless + no pidns,\n\t\t# so change it to a bind-mounted one from the host.\n\t\tupdate_config '\t  .mounts |= map((select(.type == \"proc\")\n\t\t\t\t\t| .type = \"none\"\n\t\t\t\t\t| .source = \"/proc\"\n\t\t\t\t\t| .options = [\"rbind\", \"nosuid\", \"nodev\", \"noexec\"]\n\t\t\t\t  ) // .)'\n\tfi\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\tcgpath=$(get_cgroup_path \"pids\")\n\tinit_pid=$(cat \"$cgpath\"/cgroup.procs)\n\n\t# Start a few more processes.\n\tfor _ in 1 2 3 4 5; do\n\t\t__runc exec -d test_busybox sleep 1h\n\tdone\n\n\t# Now kill the container's init process. Since the container do\n\t# not have own PID ns, its init is no special and the container\n\t# will still be up and running.\n\tkill -9 \"$init_pid\"\n\twait_pids_gone 10 0.2 \"$init_pid\"\n\n\t# Get the list of all container processes.\n\tmapfile -t pids < <(cat \"$cgpath\"/cgroup.procs)\n\techo \"pids:\" \"${pids[@]}\"\n\t# Sanity check -- make sure all processes exist.\n\tfor p in \"${pids[@]}\"; do\n\t\tkill -0 \"$p\"\n\tdone\n\n\t# Must kill those processes and remove container.\n\trunc delete \"$@\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc state test_busybox\n\t[ \"$status\" -ne 0 ] # \"Container does not exist\"\n\n\t# Wait and check that all the processes are gone.\n\twait_pids_gone 10 0.2 \"${pids[@]}\"\n\n\t# Make sure cgroup.procs is empty.\n\tmapfile -t pids < <(cat \"$cgpath\"/cgroup.procs || true)\n\tif [ ${#pids[@]} -gt 0 ]; then\n\t\techo \"expected empty cgroup.procs, got:\" \"${pids[@]}\" 1>&2\n\t\treturn 1\n\tfi\n}\n\n@test \"runc delete\" {\n\t# Need a permission to create a cgroup.\n\t# XXX(@kolyshkin): currently this test does not handle rootless when\n\t# fs cgroup driver is used, because in this case cgroup (with a\n\t# predefined name) is created by tests/rootless.sh, not by runc.\n\t[ $EUID -ne 0 ] && requires systemd\n\tset_resources_limit\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" testbusyboxdelete\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer testbusyboxdelete running\n\t# Ensure the find statement used later is correct.\n\toutput=$(find /sys/fs/cgroup -name testbusyboxdelete -o -name \\*-testbusyboxdelete.scope 2>/dev/null || true)\n\tif [ -z \"$output\" ]; then\n\t\tfail \"expected cgroup not found\"\n\tfi\n\n\trunc kill testbusyboxdelete KILL\n\t[ \"$status\" -eq 0 ]\n\twait_for_container 10 1 testbusyboxdelete stopped\n\n\trunc delete testbusyboxdelete\n\t[ \"$status\" -eq 0 ]\n\n\trunc state testbusyboxdelete\n\t[ \"$status\" -ne 0 ]\n\n\toutput=$(find /sys/fs/cgroup -name testbusyboxdelete -o -name \\*-testbusyboxdelete.scope 2>/dev/null || true)\n\t[ \"$output\" = \"\" ] || fail \"cgroup not cleaned up correctly: $output\"\n}\n\n@test \"runc delete --force\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\trunc delete --force test_busybox\n\n\trunc state test_busybox\n\t[ \"$status\" -ne 0 ]\n}\n\n@test \"runc delete --force ignore not exist\" {\n\trunc delete --force notexists\n\t[ \"$status\" -eq 0 ]\n}\n\n# Issue 4047, case \"runc delete\".\n@test \"runc delete [host pidns + init gone]\" {\n\ttest_runc_delete_host_pidns\n}\n\n# Issue 4047, case \"runc delete --force\" (different code path).\n@test \"runc delete --force [host pidns + init gone]\" {\n\ttest_runc_delete_host_pidns --force\n}\n\n@test \"runc delete --force [paused container]\" {\n\trequires cgroups_freezer\n\tif [ $EUID -ne 0 ]; then\n\t\trequires rootless_cgroup\n\t\t# Rootless containers have no default cgroup path.\n\t\tset_cgroups_path\n\tfi\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" ct1\n\t[ \"$status\" -eq 0 ]\n\ttestcontainer ct1 running\n\n\trunc pause ct1\n\t[ \"$status\" -eq 0 ]\n\trunc delete --force ct1\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc delete --force in cgroupv1 with subcgroups\" {\n\trequires cgroups_v1 root cgroupns\n\tset_cgroups_path\n\tset_cgroup_mount_writable\n\t# enable cgroupns\n\tupdate_config '.linux.namespaces += [{\"type\": \"cgroup\"}]'\n\n\tlocal subsystems=\"memory freezer\"\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\t__runc exec -d test_busybox sleep 1d\n\n\t# find the pid of sleep\n\tpid=$(__runc exec test_busybox ps -a | grep 1d | awk '{print $1}')\n\t[[ ${pid} =~ [0-9]+ ]]\n\n\t# create a sub-cgroup\n\tcat <<EOF | runc exec test_busybox sh\nset -e -u -x\nfor s in ${subsystems}; do\n  cd /sys/fs/cgroup/\\$s\n  mkdir foo\n  cd foo\n  echo ${pid} > tasks\n  cat tasks\ndone\nEOF\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" =~ [0-9]+ ]]\n\n\tfor s in ${subsystems}; do\n\t\tname=CGROUP_${s^^}_BASE_PATH\n\t\teval path=\\$\"${name}${REL_CGROUPS_PATH}/foo\"\n\t\t# shellcheck disable=SC2154\n\t\t[ -d \"${path}\" ] || fail \"test failed to create memory sub-cgroup ($path not found)\"\n\tdone\n\n\trunc delete --force test_busybox\n\n\trunc state test_busybox\n\t[ \"$status\" -ne 0 ]\n\n\toutput=$(find /sys/fs/cgroup -wholename '*testbusyboxdelete*' -type d 2>/dev/null || true)\n\t[ \"$output\" = \"\" ] || fail \"cgroup not cleaned up correctly: $output\"\n}\n\n@test \"runc delete --force in cgroupv2 with subcgroups\" {\n\trequires cgroups_v2 root\n\tset_cgroups_path\n\tset_cgroup_mount_writable\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\t# create a sub process\n\t__runc exec -d test_busybox sleep 1d\n\n\t# find the pid of sleep\n\tpid=$(__runc exec test_busybox ps -a | grep 1d | awk '{print $1}')\n\t[[ ${pid} =~ [0-9]+ ]]\n\n\t# create subcgroups\n\tcat <<EOF >nest.sh\n  set -e -u -x\n  cd /sys/fs/cgroup\n  echo +pids > cgroup.subtree_control\n  mkdir foo\n  cd foo\n  echo threaded > cgroup.type\n  echo ${pid} > cgroup.threads\n  cat cgroup.threads\nEOF\n\trunc exec test_busybox sh <nest.sh\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" =~ [0-9]+ ]]\n\n\t# check create subcgroups success\n\t[ -d \"$CGROUP_V2_PATH\"/foo ]\n\n\t# force delete test_busybox\n\trunc delete --force test_busybox\n\n\trunc state test_busybox\n\t[ \"$status\" -ne 0 ]\n\n\t# check delete subcgroups success\n\t[ ! -d \"$CGROUP_V2_PATH\"/foo ]\n}\n\n@test \"runc delete removes failed systemd unit\" {\n\trequires systemd_v244 # Older systemd lacks RuntimeMaxSec support.\n\n\tset_cgroups_path\n\tupdate_config '\t  .annotations += {\n\t\t\t\t\"org.systemd.property.RuntimeMaxSec\": \"2\",\n\t\t\t\t\"org.systemd.property.TimeoutStopSec\": \"1\"\n\t\t\t   }\n\t\t\t| .process.args |= [\"/bin/sleep\", \"10\"]'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test-failed-unit\n\t[ \"$status\" -eq 0 ]\n\n\twait_for_container 10 1 test-failed-unit stopped\n\n\tlocal user=\"\"\n\t[ $EUID -ne 0 ] && user=\"--user\"\n\n\t# Expect \"unit is not active\" exit code.\n\trun -3 systemctl status $user \"$SD_UNIT_NAME\"\n\n\trunc delete test-failed-unit\n\t# Expect \"no such unit\" exit code.\n\trun -4 systemctl status $user \"$SD_UNIT_NAME\"\n}\n"
  },
  {
    "path": "tests/integration/dev.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc run [redundant default /dev/tty]\" {\n\tupdate_config ' .linux.devices += [{\"path\": \"/dev/tty\", \"type\": \"c\", \"major\": 5, \"minor\": 0}]\n\t\t      | .process.args |= [\"ls\", \"-lLn\", \"/dev/tty\"]'\n\n\trunc run test_dev\n\t[ \"$status\" -eq 0 ]\n\n\tif [ $EUID -ne 0 ]; then\n\t\t[[ \"${lines[0]}\" =~ \"crw-rw-rw\".+\"1\".+\"65534\".+\"65534\".+\"5,\".+\"0\".+\"/dev/tty\" ]]\n\telse\n\t\t[[ \"${lines[0]}\" =~ \"crw-rw-rw\".+\"1\".+\"0\".+\"0\".+\"5,\".+\"0\".+\"/dev/tty\" ]]\n\tfi\n}\n\n@test \"runc run [redundant default /dev/ptmx]\" {\n\tupdate_config ' .linux.devices += [{\"path\": \"/dev/ptmx\", \"type\": \"c\", \"major\": 5, \"minor\": 2}]\n\t\t      | .process.args |= [\"ls\", \"-lLn\", \"/dev/ptmx\"]'\n\n\trunc run test_dev\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" =~ \"crw-rw-rw\".+\"1\".+\"0\".+\"0\".+\"5,\".+\"2\".+\"/dev/ptmx\" ]]\n}\n\n@test \"runc run/update [device cgroup deny]\" {\n\trequires root\n\n\tupdate_config ' .linux.resources.devices = [{\"allow\": false, \"access\": \"rwm\"}]\n\t\t\t| .linux.devices = [{\"path\": \"/dev/kmsg\", \"type\": \"c\", \"major\": 1, \"minor\": 11}]\n\t\t\t| .process.capabilities.bounding += [\"CAP_SYSLOG\"]\n\t\t\t| .process.capabilities.effective += [\"CAP_SYSLOG\"]\n\t\t\t| .process.capabilities.permitted += [\"CAP_SYSLOG\"]\n\t\t\t| .process.args |= [\"sh\"]'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_deny\n\t[ \"$status\" -eq 0 ]\n\n\t# test write\n\trunc exec test_deny sh -c 'hostname | tee /dev/kmsg'\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *'Operation not permitted'* ]]\n\n\t# test read\n\trunc exec test_deny sh -c 'head -n 1 /dev/kmsg'\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *'Operation not permitted'* ]]\n\n\trunc update test_deny --pids-limit 42\n\n\t# test write\n\trunc exec test_deny sh -c 'hostname | tee /dev/kmsg'\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *'Operation not permitted'* ]]\n\n\t# test read\n\trunc exec test_deny sh -c 'head -n 1 /dev/kmsg'\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *'Operation not permitted'* ]]\n}\n\n@test \"runc run [device cgroup allow rw char device]\" {\n\trequires root\n\n\tupdate_config ' .linux.resources.devices = [{\"allow\": false, \"access\": \"rwm\"},{\"allow\": true, \"type\": \"c\", \"major\": 1, \"minor\": 11, \"access\": \"rw\"}]\n\t\t\t| .linux.devices = [{\"path\": \"/dev/kmsg\", \"type\": \"c\", \"major\": 1, \"minor\": 11}]\n\t\t\t| .process.args |= [\"sh\"]\n\t\t\t| .process.capabilities.bounding += [\"CAP_SYSLOG\"]\n\t\t\t| .process.capabilities.effective += [\"CAP_SYSLOG\"]\n\t\t\t| .process.capabilities.permitted += [\"CAP_SYSLOG\"]\n\t\t\t| .hostname = \"myhostname\"'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_allow_char\n\t[ \"$status\" -eq 0 ]\n\n\t# test write\n\trunc exec test_allow_char sh -c 'hostname | tee /dev/kmsg'\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == *'myhostname'* ]]\n\n\t# test read\n\trunc exec test_allow_char sh -c 'head -n 1 /dev/kmsg'\n\t[ \"$status\" -eq 0 ]\n\n\t# test access\n\tTEST_NAME=\"dev_access_test\"\n\tgcc -static -o \"rootfs/bin/${TEST_NAME}\" \"${TESTDATA}/${TEST_NAME}.c\"\n\trunc exec test_allow_char sh -c \"${TEST_NAME} /dev/kmsg\"\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc run [device cgroup allow rm block device]\" {\n\trequires root\n\n\t# Get the first block device.\n\tIFS=$' \\t:' read -r device major minor <<<\"$(lsblk -nd -o NAME,MAJ:MIN)\"\n\t# Could have used -o PATH but lsblk from CentOS 7 does not have it.\n\tdevice=\"/dev/$device\"\n\n\tupdate_config ' .linux.resources.devices = [{\"allow\": false, \"access\": \"rwm\"},{\"allow\": true, \"type\": \"b\", \"major\": '\"$major\"', \"minor\": '\"$minor\"', \"access\": \"rwm\"}]\n\t\t\t| .linux.devices = [{\"path\": \"'\"$device\"'\", \"type\": \"b\", \"major\": '\"$major\"', \"minor\": '\"$minor\"'}]\n\t\t\t| .process.args |= [\"sh\"]\n\t\t\t| .process.capabilities.bounding += [\"CAP_MKNOD\"]\n\t\t\t| .process.capabilities.effective += [\"CAP_MKNOD\"]\n\t\t\t| .process.capabilities.permitted += [\"CAP_MKNOD\"]'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_allow_block\n\t[ \"$status\" -eq 0 ]\n\n\t# test mknod\n\trunc exec test_allow_block sh -c 'mknod /dev/fooblock b '\"$major\"' '\"$minor\"''\n\t[ \"$status\" -eq 0 ]\n\n\t# test read\n\trunc exec test_allow_block sh -c 'fdisk -l '\"$device\"''\n\t[ \"$status\" -eq 0 ]\n}\n\n# https://github.com/opencontainers/runc/issues/3551\n@test \"runc exec vs systemctl daemon-reload\" {\n\trequires systemd root\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_exec\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec -t test_exec sh -c \"ls -l /proc/self/fd/0; echo 123\"\n\t[ \"$status\" -eq 0 ]\n\n\tsystemctl daemon-reload\n\n\trunc exec -t test_exec sh -c \"ls -l /proc/self/fd/0; echo 123\"\n\t[ \"$status\" -eq 0 ]\n}\n\n# https://github.com/opencontainers/runc/issues/4568\n@test \"runc run [devices vs systemd NeedDaemonReload]\" {\n\t# The systemd bug is there since v230, see\n\t# https://github.com/systemd/systemd/pull/3170/commits/ab932a622d57fd327ef95992c343fd4425324088\n\t# and https://github.com/systemd/systemd/issues/35710.\n\trequires systemd_v230\n\n\tset_cgroups_path\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_need_reload\n\tcheck_systemd_value \"NeedDaemonReload\" \"no\"\n}\n"
  },
  {
    "path": "tests/integration/env.bats",
    "content": "#!/usr/bin/env bats\n# shellcheck disable=SC2016\n# This disables the check for shell variables inside single quotes\n# We do that all the time in this file, as we are testing env vars.\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n# Several of these tests are inspired on regressions caught by Docker, besides other tests that\n# check the behavior we already had in runc:\n# https://github.com/moby/moby/blob/843e51459f14ebc964d349eba1013dc8a3e9d52e/integration-cli/docker_cli_links_test.go#L197-L204\n# https://github.com/moby/moby/blob/843e51459f14ebc964d349eba1013dc8a3e9d52e/integration-cli/docker_cli_run_test.go#L822-L843\n#\n\n@test \"non-empty HOME env is used\" {\n\tupdate_config ' .process.env += [\"HOME=/override\"]'\n\tupdate_config ' .process.args += [\"-c\", \"echo $HOME\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == '/override' ]]\n}\n\n@test \"empty HOME env var is overridden\" {\n\tupdate_config ' .process.env += [\"HOME=\"]'\n\tupdate_config ' .process.args += [\"-c\", \"echo $HOME\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == '/root' ]]\n}\n\n@test \"empty HOME env var is overridden with multiple overrides\" {\n\tupdate_config ' .process.env += [\"HOME=/override\", \"HOME=\"]'\n\tupdate_config ' .process.args += [\"-c\", \"echo $HOME\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == '/root' ]]\n}\n\n@test \"env var HOME is set only once\" {\n\t# env will show if an env var is set multiple times.\n\tupdate_config ' .process.args = [\"env\"]'\n\tupdate_config ' .process.env = [\"HOME=\", \"PATH=/usr/bin:/bin\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# There should be 2 words/env-vars: HOME and PATH.\n\t[ \"$(wc -w <<<\"$output\")\" -eq 2 ]\n}\n\n@test \"env var override is set only once\" {\n\t# env will show if an env var is set multiple times.\n\tupdate_config ' .process.args = [\"env\"]'\n\tupdate_config ' .process.env = [\"ONE=two\", \"ONE=\", \"PATH=/usr/bin:/bin\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# There should be 3 words/env-vars: ONE, PATH and HOME.\n\t[ \"$(wc -w <<<\"$output\")\" -eq 3 ]\n}\n\n@test \"env var override\" {\n\tupdate_config ' .process.env += [\"ONE=two\", \"ONE=three\"]'\n\tupdate_config ' .process.args += [\"-c\", \"echo ONE=\\\"$ONE\\\"\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == \"ONE=three\" ]]\n}\n\n@test \"env var with new-line is honored\" {\n\tupdate_config ' .process.env = [\"NEW_LINE_ENV=\\n\", \"PATH=/usr/bin:/bin\"]'\n\tupdate_config ' .process.args = [\"env\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# There should be 4 lines\n\t# NEW_LINE is a \\n and when printed, it takes another line:\n\t# 1. HOME=...\n\t# 2. PATH=...\n\t# 3. NEW_LINE_ENV=\n\t# 4.\n\t#\n\t[ \"$(wc -l <<<\"$output\")\" -eq 4 ]\n}\n"
  },
  {
    "path": "tests/integration/events.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n# This needs to be placed at the top of the bats file to work around\n# a shellcheck bug. See <https://github.com/koalaman/shellcheck/issues/2873>.\nfunction test_events() {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\tset_cgroups_path\n\n\tlocal status interval retry_every=1\n\tif [ $# -eq 2 ]; then\n\t\tinterval=\"$1\"\n\t\tretry_every=\"$2\"\n\tfi\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# Spawn two subshels:\n\t# 1. Event logger that sends stats events to events.log.\n\t(__runc events ${interval:+ --interval \"$interval\"} test_busybox >events.log) &\n\t# 2. Waits for an event that includes test_busybox then kills the\n\t#    test_busybox container which causes the event logger to exit.\n\t(\n\t\tretry 10 \"$retry_every\" grep -q test_busybox events.log\n\t\t__runc delete -f test_busybox\n\t) &\n\twait # for both subshells to finish\n\n\t[ -e events.log ]\n\n\toutput=$(head -1 events.log)\n\t[[ \"$output\" == [\\{]\"\\\"type\\\"\"[:]\"\\\"stats\\\"\"[,]\"\\\"id\\\"\"[:]\"\\\"test_busybox\\\"\"[,]* ]]\n\t[[ \"$output\" == *\"data\"* ]]\n}\n\n@test \"events --stats\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\tinit_cgroup_paths\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# generate stats\n\trunc events --stats test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == [\\{]\"\\\"type\\\"\"[:]\"\\\"stats\\\"\"[,]\"\\\"id\\\"\"[:]\"\\\"test_busybox\\\"\"[,]* ]]\n\t[[ \"${lines[0]}\" == *\"data\"* ]]\n}\n\n@test \"events --stats with psi data\" {\n\t# XXX: CPU PSI avg data only available to root.\n\trequires root cgroups_v2 psi\n\tinit_cgroup_paths\n\n\tupdate_config '.linux.resources.cpu |= { \"quota\": 1000 }'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# Stress the CPU a bit. Need something that runs for more than 10s.\n\trunc exec test_busybox dd if=/dev/zero bs=1 count=128K of=/dev/null\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_busybox sh -c 'tail /sys/fs/cgroup/*.pressure'\n\n\trunc events --stats test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# Check PSI metrics.\n\tjq '.data.cpu.psi' <<<\"${lines[0]}\"\n\tfor psi_type in some full; do\n\t\tfor psi_metric in avg10 avg60 avg300 total; do\n\t\t\techo -n \"checking .data.cpu.psi.$psi_type.$psi_metric != 0: \"\n\t\t\tjq -e '.data.cpu.psi.'$psi_type.$psi_metric' != 0' <<<\"${lines[0]}\"\n\t\tdone\n\tdone\n}\n\n# See https://github.com/opencontainers/cgroups/pull/24\n@test \"events --stats with hugetlb\" {\n\trequires cgroups_v2 cgroups_hugetlb\n\tinit_cgroup_paths\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc events --stats test_busybox\n\t[ \"$status\" -eq 0 ]\n\t# Ensure hugetlb node is present.\n\tjq -e '.data.hugetlb // empty' <<<\"${lines[0]}\"\n}\n\n@test \"events --interval default\" {\n\ttest_events\n}\n\n@test \"events --interval 1s\" {\n\ttest_events 1s 1\n}\n\n@test \"events --interval 100ms\" {\n\ttest_events 100ms 0.1\n}\n\n@test \"events oom\" {\n\t# XXX: oom is not triggered for rootless containers.\n\trequires root cgroups_swap\n\tinit_cgroup_paths\n\n\t# we need the container to hit OOM, so disable swap\n\tupdate_config '(.. | select(.resources? != null)) .resources.memory |= {\"limit\": 33554432, \"swap\": 33554432}'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# spawn two sub processes (shells)\n\t# the first sub process is an event logger that sends stats events to events.log\n\t# the second sub process exec a memory hog process to cause a oom condition\n\t# and waits for an oom event\n\t(__runc events test_busybox >events.log) &\n\t(\n\t\tretry 10 1 grep -q test_busybox events.log\n\t\t# shellcheck disable=SC2016\n\t\t__runc exec -d test_busybox sh -c 'test=$(dd if=/dev/urandom ibs=5120k)'\n\t\tretry 30 1 grep -q oom events.log\n\t\t__runc delete -f test_busybox\n\t) &\n\twait # wait for the above sub shells to finish\n\n\tgrep -q '{\"type\":\"oom\",\"id\":\"test_busybox\"}' events.log\n}\n"
  },
  {
    "path": "tests/integration/exec.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc exec\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_busybox echo Hello from exec\n\t[ \"$status\" -eq 0 ]\n\techo text echoed = \"'\"\"${output}\"\"'\"\n\t[[ \"${output}\" == *\"Hello from exec\"* ]]\n}\n\n@test \"runc exec [exit codes]\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_busybox false\n\t[ \"$status\" -eq 1 ]\n\n\trunc exec test_busybox sh -c \"exit 42\"\n\t[ \"$status\" -eq 42 ]\n\n\trunc exec --pid-file /non-existent/directory test_busybox true\n\t[ \"$status\" -eq 255 ]\n\n\trunc exec test_busybox no-such-binary\n\t[ \"$status\" -eq 255 ]\n\n\trunc exec no_such_container true\n\t[ \"$status\" -eq 255 ]\n}\n\n@test \"runc exec --pid-file\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec --pid-file pid.txt test_busybox echo Hello from exec\n\t[ \"$status\" -eq 0 ]\n\techo text echoed = \"'\"\"${output}\"\"'\"\n\t[[ \"${output}\" == *\"Hello from exec\"* ]]\n\n\t[ -e pid.txt ]\n\toutput=$(cat pid.txt)\n\t[[ \"$output\" =~ [0-9]+ ]]\n\t[[ \"$output\" != $(__runc state test_busybox | jq '.pid') ]]\n}\n\n@test \"runc exec --pid-file with new CWD\" {\n\tbundle=\"$(pwd)\"\n\tmkdir pid_file\n\tcd pid_file\n\n\trunc run -d -b \"$bundle\" --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec --pid-file pid.txt test_busybox echo Hello from exec\n\t[ \"$status\" -eq 0 ]\n\techo text echoed = \"'\"\"${output}\"\"'\"\n\t[[ \"${output}\" == *\"Hello from exec\"* ]]\n\n\t[ -e pid.txt ]\n\toutput=$(cat pid.txt)\n\t[[ \"$output\" =~ [0-9]+ ]]\n\t[[ \"$output\" != $(__runc state test_busybox | jq '.pid') ]]\n}\n\n@test \"runc exec ls -la\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_busybox ls -la\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} == *\"total\"* ]]\n\t[[ ${lines[1]} == *\".\"* ]]\n\t[[ ${lines[2]} == *\"..\"* ]]\n}\n\n@test \"runc exec ls -la with --cwd\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec --cwd /bin test_busybox pwd\n\t[ \"$status\" -eq 0 ]\n\t[[ ${output} == \"/bin\"* ]]\n}\n\n@test \"runc exec --env\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec --env RUNC_EXEC_TEST=true test_busybox env\n\t[ \"$status\" -eq 0 ]\n\n\t[[ ${output} == *\"RUNC_EXEC_TEST=true\"* ]]\n}\n\n@test \"runc exec --user\" {\n\t# --user can't work in rootless containers that don't have idmap.\n\t[ $EUID -ne 0 ] && requires rootless_idmap\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec --user 1000:1000 test_busybox id\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${output}\" == \"uid=1000 gid=1000\"* ]]\n\n\t# Check the default value of HOME (\"/\") is set even in case when\n\t#  - HOME is not set in process.Env, and\n\t#  - there is no entry in container's /etc/passwd for a given UID.\n\t#\n\t# NOTE this is not a standard runtime feature, but rather\n\t# a historical de facto behavior we're afraid to change.\n\n\t# shellcheck disable=SC2016\n\trunc exec --user 1000 test_busybox sh -u -c 'echo $HOME'\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" = \"/\" ]]\n}\n\n# https://github.com/opencontainers/runc/issues/3674.\n@test \"runc exec --user vs /dev/null ownership\" {\n\trequires root\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\tls -l /dev/null\n\t__runc exec -d --user 1000:1000 test_busybox id </dev/null\n\tls -l /dev/null\n\tUG=$(stat -c %u:%g /dev/null)\n\n\t# Host's /dev/null must be owned by root.\n\t[ \"$UG\" = \"0:0\" ]\n}\n\n@test \"runc exec --additional-gids\" {\n\trequires root\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\twait_for_container 15 1 test_busybox\n\n\trunc exec --user 1000:1000 --additional-gids 100 --additional-gids 65534 test_busybox id -G\n\t[ \"$status\" -eq 0 ]\n\t[ \"$output\" = \"1000 100 65534\" ]\n}\n\n@test \"runc exec --preserve-fds\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\techo hello >preserve-fds.test\n\t# fd 3 is used by bats, so we use 4\n\texec 4<preserve-fds.test\n\trunc exec --preserve-fds=2 test_busybox cat /proc/self/fd/4\n\t[ \"$status\" -eq 0 ]\n\t[ \"${output}\" = \"hello\" ]\n}\n\nfunction check_exec_debug() {\n\t[[ \"$*\" == *\"nsexec container setup\"* ]]\n\t[[ \"$*\" == *\"child process in init()\"* ]]\n\t[[ \"$*\" == *\"setns_init: about to exec\"* ]]\n}\n\n@test \"runc --debug exec\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test\n\t[ \"$status\" -eq 0 ]\n\n\trunc --debug exec test true\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${output}\" == *\"level=debug\"* ]]\n\tcheck_exec_debug \"$output\"\n}\n\n@test \"runc --debug --log exec\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test\n\t[ \"$status\" -eq 0 ]\n\n\trunc --debug --log log.out exec test true\n\t# check output does not include debug info\n\t[[ \"${output}\" != *\"level=debug\"* ]]\n\n\tcat log.out >&2\n\t# check expected debug output was sent to log.out\n\toutput=$(cat log.out)\n\t[[ \"${output}\" == *\"level=debug\"* ]]\n\tcheck_exec_debug \"$output\"\n}\n\n@test \"runc exec --cgroup sub-cgroups [v1]\" {\n\trequires root cgroups_v1\n\n\tset_cgroups_path\n\tset_cgroup_mount_writable\n\n\t__runc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\ttestcontainer test_busybox running\n\n\t# Check we can't join parent cgroup.\n\trunc exec --cgroup \"..\" test_busybox cat /proc/self/cgroup\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"bad sub cgroup path\"* ]]\n\n\t# Check we can't join non-existing subcgroup.\n\trunc exec --cgroup nonexistent test_busybox cat /proc/self/cgroup\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\" adding pid \"*\"o such file or directory\"* ]]\n\n\t# Check we can't join non-existing subcgroup (for a particular controller).\n\trunc exec --cgroup cpu:nonexistent test_busybox cat /proc/self/cgroup\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\" adding pid \"*\"o such file or directory\"* ]]\n\n\t# Check we can't specify non-existent controller.\n\trunc exec --cgroup whaaat:/ test_busybox true\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"unknown controller \"* ]]\n\n\t# Check we can join top-level cgroup (implicit).\n\trunc exec test_busybox cat /proc/self/cgroup\n\t[ \"$status\" -eq 0 ]\n\trun ! grep -v \":$REL_CGROUPS_PATH\\$\" <<<\"$output\"\n\n\t# Check we can join top-level cgroup (explicit).\n\trunc exec --cgroup / test_busybox cat /proc/self/cgroup\n\t[ \"$status\" -eq 0 ]\n\trun ! grep -v \":$REL_CGROUPS_PATH\\$\" <<<\"$output\"\n\n\t# Create a few subcgroups.\n\t# Note that cpu,cpuacct may be mounted together or separate.\n\trunc exec test_busybox sh -euc \"mkdir -p /sys/fs/cgroup/memory/submem /sys/fs/cgroup/cpu/subcpu /sys/fs/cgroup/cpuacct/subcpu\"\n\t[ \"$status\" -eq 0 ]\n\n\t# Check that explicit --cgroup works.\n\trunc exec --cgroup memory:submem --cgroup cpu,cpuacct:subcpu test_busybox cat /proc/self/cgroup\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\":memory:$REL_CGROUPS_PATH/submem\"* ]]\n\t[[ \"$output\" == *\":cpu\"*\":$REL_CGROUPS_PATH/subcpu\"* ]]\n}\n\n@test \"runc exec --cgroup subcgroup [v2]\" {\n\trequires root cgroups_v2\n\n\tset_cgroups_path\n\tset_cgroup_mount_writable\n\n\t__runc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\ttestcontainer test_busybox running\n\n\t# Check we can't join parent cgroup.\n\trunc exec --cgroup \"..\" test_busybox cat /proc/self/cgroup\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"bad sub cgroup path\"* ]]\n\n\t# Check we can't join non-existing subcgroup.\n\trunc exec --cgroup nonexistent test_busybox cat /proc/self/cgroup\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\" cgroup\"*\"o such file or directory\"* ]]\n\n\t# Check we can join top-level cgroup (implicit).\n\trunc exec test_busybox grep '^0::/$' /proc/self/cgroup\n\t[ \"$status\" -eq 0 ]\n\n\t# Check we can join top-level cgroup (explicit).\n\trunc exec --cgroup / test_busybox grep '^0::/$' /proc/self/cgroup\n\t[ \"$status\" -eq 0 ]\n\n\t# Now move \"init\" to a subcgroup, and check it was moved.\n\trunc exec test_busybox sh -euc \"mkdir /sys/fs/cgroup/foobar \\\n\t\t&& echo 1 > /sys/fs/cgroup/foobar/cgroup.procs \\\n\t\t&& grep -w foobar /proc/1/cgroup\"\n\t[ \"$status\" -eq 0 ]\n\n\t# The following part is taken from\n\t# @test \"runc exec (cgroup v2 + init process in non-root cgroup) succeeds\"\n\n\t# The init process is now in \"/foo\", but an exec process can still\n\t# join \"/\" because we haven't enabled any domain controller yet.\n\trunc exec test_busybox grep '^0::/$' /proc/self/cgroup\n\t[ \"$status\" -eq 0 ]\n\n\t# Turn on a domain controller (memory).\n\trunc exec test_busybox sh -euc 'echo $$ > /sys/fs/cgroup/foobar/cgroup.procs; echo +memory > /sys/fs/cgroup/cgroup.subtree_control'\n\t[ \"$status\" -eq 0 ]\n\n\t# An exec process can no longer join \"/\" after turning on a domain\n\t# controller.  Check that cgroup v2 fallback to init cgroup works.\n\trunc exec test_busybox sh -euc \"cat /proc/self/cgroup && grep '^0::/foobar$' /proc/self/cgroup\"\n\t[ \"$status\" -eq 0 ]\n\n\t# Check that --cgroup / disables the init cgroup fallback.\n\trunc exec --cgroup / test_busybox true\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\" adding pid \"*\" to cgroups\"*\"evice or resource busy\"* ]]\n\n\t# Check that explicit --cgroup foobar works.\n\trunc exec --cgroup foobar test_busybox grep '^0::/foobar$' /proc/self/cgroup\n\t[ \"$status\" -eq 0 ]\n\n\t# Check all processes is in foobar (this check is redundant).\n\trunc exec --cgroup foobar test_busybox sh -euc '! grep -vwH foobar /proc/*/cgroup'\n\t[ \"$status\" -eq 0 ]\n\n\t# Add a second subcgroup, check we're in it.\n\trunc exec --cgroup foobar test_busybox mkdir /sys/fs/cgroup/second\n\t[ \"$status\" -eq 0 ]\n\trunc exec --cgroup second test_busybox grep -w second /proc/self/cgroup\n\t[ \"$status\" -eq 0 ]\n}\n\n# https://github.com/opencontainers/runc/issues/5089\n@test \"runc exec [init changes cgroup]\" {\n\trequires root cgroups_v2\n\n\tNEW_CGROUP_REL=/runc-tst-$$\n\tNEW_CGROUP=/sys/fs/cgroup$NEW_CGROUP_REL\n\tmkdir $NEW_CGROUP\n\n\t# The container is placed into a $CGROUP_V2_PATH cgroup.\n\tset_cgroups_path\n\t# And upon the start it moves itself into $NEW_CGROUP.\n\tset_cgroup_mount_writable\n\tupdate_config '\t  .linux.namespaces -= [{\"type\": \"cgroup\"}]\n\t\t\t| .process.args = [\"sh\", \"-c\", \"echo 1 > '$NEW_CGROUP'/cgroup.procs && exec sleep 1h\"]'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ $status -eq 0 ]\n\ttestcontainer test_busybox running\n\tsleep 1\n\t# Remove the original container cgroup. If systemd cgroup manager is used by runc,\n\t# the cgroup might have already be deleted by systemd, so we ignore rmdir errors.\n\trmdir \"$CGROUP_V2_PATH\" || true\n\ttest -d \"$CGROUP_V2_PATH\" && false\n\n\t# Test that runc exec is able to fallback to container's init cgroup\n\t# even if the original cgroup is gone.\n\trunc exec test_busybox cat /proc/self/cgroup\n\t[ $status -eq 0 ]\n\t[ \"$output\" = \"0::$NEW_CGROUP_REL\" ]\n\n\t# Cleanup.\n\trunc delete -f test_busybox\n\trmdir \"$NEW_CGROUP\"\n}\n\n@test \"runc exec [execve error]\" {\n\tcat <<EOF >rootfs/run.sh\n#!/mmnnttbb foo bar\nsh\nEOF\n\tchmod +x rootfs/run.sh\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\trunc exec -t test_busybox /run.sh\n\t[ \"$status\" -ne 0 ]\n\n\t# After the sync socket closed, we should not send error to parent\n\t# process, or else we will get a unnecessary error log(#4171).\n\t# Although we never close the sync socket when doing exec,\n\t# but we need to keep this test to ensure this behavior is always right.\n\t[ ${#lines[@]} -eq 1 ]\n\t[[ ${lines[0]} = *\"exec /run.sh: no such file or directory\"* ]]\n}\n\n# https://github.com/opencontainers/runc/issues/4688\n@test \"runc exec check default home\" {\n\t# --user can't work in rootless containers that don't have idmap.\n\t[ $EUID -ne 0 ] && requires rootless_idmap\n\techo 'tempuser:x:2000:2000:tempuser:/home/tempuser:/bin/sh' >>rootfs/etc/passwd\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec -u 2000 test sh -c \"echo \\$HOME\"\n\t[ \"$status\" -eq 0 ]\n\t[ \"${lines[0]}\" = \"/home/tempuser\" ]\n}\n"
  },
  {
    "path": "tests/integration/get-images.sh",
    "content": "#!/bin/bash\n\n# DO NOT EDIT!  Generated by \"bootstrap-get-images.sh\"\n\n# This script checks if container images needed for tests (currently\n# busybox and Debian 10 \"Buster\") are available locally, and downloads\n# them to testdata directory if not.\n#\n# The script is self-contained/standalone and is used from a few places\n# that need to ensure the images are downloaded. Its output is suitable\n# for consumption by shell via eval (see helpers.bash).\n\nset -e -u -o pipefail\n\n# Root directory of integration tests.\nINTEGRATION_ROOT=$(dirname \"$(readlink -f \"${BASH_SOURCE[0]}\")\")\n# Test data path.\nTESTDATA=\"${INTEGRATION_ROOT}/testdata\"\n# Sanity check: $TESTDATA directory must exist.\nif [ ! -d \"$TESTDATA\" ]; then\n\techo \"Bad TESTDATA directory: $TESTDATA. Aborting\" >&2\n\texit 1\nfi\n\nfunction get() {\n\tlocal dest=\"$1\" url=\"$2\"\n\n\t[ -e \"$dest\" ] && return\n\n\t# Sanity check: $TESTDATA directory must be writable.\n\tif [ ! -w \"$TESTDATA\" ]; then\n\t\techo \"TESTDATA directory ($TESTDATA) not writable. Aborting\" >&2\n\t\texit 1\n\tfi\n\n\tif ! curl -o \"$dest\" -fsSL --retry 5 \"$url\"; then\n\t\techo \"Failed to get $url\" 1>&2\n\t\texit 1\n\tfi\n}\n\narch=$(go env GOARCH)\nif [ \"$arch\" = 'arm' ]; then\n\tarm=$(go env GOARM)\n\t: \"${arm:=7}\"\n\tarch=${arch}v$arm\nfi\n\ncase $arch in\namd64)\n\t# https://github.com/docker-library/busybox/tree/dist-amd64\n\t# https://github.com/docker-library/busybox/tree/9c2d0c6fbaaf2ca1b4c19027fa515d9e797e7199/latest/glibc/amd64\n\turl=\"https://github.com/docker-library/busybox/raw/9c2d0c6fbaaf2ca1b4c19027fa515d9e797e7199/latest/glibc/amd64/rootfs.tar.gz\"\n\t;;\n\narmv5)\n\t# https://github.com/docker-library/busybox/tree/dist-arm32v5\n\t# https://github.com/docker-library/busybox/tree/d687cd5484009bdf2ee3e79a78600f01a7edc912/latest/glibc/arm32v5\n\turl=\"https://github.com/docker-library/busybox/raw/d687cd5484009bdf2ee3e79a78600f01a7edc912/latest/glibc/arm32v5/rootfs.tar.gz\"\n\t;;\n\narmv7)\n\t# https://github.com/docker-library/busybox/tree/dist-arm32v7\n\t# https://github.com/docker-library/busybox/tree/c773a028ec0e18dc92e89e0bc57898883897ef8d/latest/glibc/arm32v7\n\turl=\"https://github.com/docker-library/busybox/raw/c773a028ec0e18dc92e89e0bc57898883897ef8d/latest/glibc/arm32v7/rootfs.tar.gz\"\n\t;;\n\narm64)\n\t# https://github.com/docker-library/busybox/tree/dist-arm64v8\n\t# https://github.com/docker-library/busybox/tree/8141f5b047a1fbeefd842388244c045825a61c90/latest/glibc/arm64v8\n\turl=\"https://github.com/docker-library/busybox/raw/8141f5b047a1fbeefd842388244c045825a61c90/latest/glibc/arm64v8/rootfs.tar.gz\"\n\t;;\n\n386)\n\t# https://github.com/docker-library/busybox/tree/dist-i386\n\t# https://github.com/docker-library/busybox/tree/ddcda848177fffa1df68fbed9cda06bd17757dad/latest/glibc/i386\n\turl=\"https://github.com/docker-library/busybox/raw/ddcda848177fffa1df68fbed9cda06bd17757dad/latest/glibc/i386/rootfs.tar.gz\"\n\t;;\n\nppc64le)\n\t# https://github.com/docker-library/busybox/tree/dist-ppc64le\n\t# https://github.com/docker-library/busybox/tree/ddb1ced9350261eb7aa6d117052d04a5ad8dd1b7/latest/glibc/ppc64le\n\turl=\"https://github.com/docker-library/busybox/raw/ddb1ced9350261eb7aa6d117052d04a5ad8dd1b7/latest/glibc/ppc64le/rootfs.tar.gz\"\n\t;;\n\nriscv64)\n\t# https://github.com/docker-library/busybox/tree/dist-riscv64\n\t# https://github.com/docker-library/busybox/tree/aa4b2b5fc1583c52a2806f38772d2f684f3c3185/latest/glibc/riscv64\n\turl=\"https://github.com/docker-library/busybox/raw/aa4b2b5fc1583c52a2806f38772d2f684f3c3185/latest/glibc/riscv64/rootfs.tar.gz\"\n\t;;\n\ns390x)\n\t# https://github.com/docker-library/busybox/tree/dist-s390x\n\t# https://github.com/docker-library/busybox/tree/52d5ab6b9089780aaa39f36c7d4562ee0f7ce3d5/latest/glibc/s390x\n\turl=\"https://github.com/docker-library/busybox/raw/52d5ab6b9089780aaa39f36c7d4562ee0f7ce3d5/latest/glibc/s390x/rootfs.tar.gz\"\n\t;;\n\n*)\n\techo >&2 \"error: unsupported busybox architecture: $arch\"\n\texit 1\n\t;;\nesac\nrootfs=\"$TESTDATA/busybox-${arch}.tar.xz\"\nget \"$rootfs\" \"$url\"\nvar=busybox_image\necho \"${var^^}=$rootfs\"\n\ncase $arch in\namd64)\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/dist-amd64\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/686d9f6eaada08a754bc7abf6f6184c65c5b378f/buster/slim\n\turl=\"https://github.com/debuerreotype/docker-debian-artifacts/raw/686d9f6eaada08a754bc7abf6f6184c65c5b378f/buster/slim/rootfs.tar.xz\"\n\t;;\n\narmv5)\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/dist-arm32v5\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/155640b6e2e249dfaeee8795d5de539ef3e49417/buster/slim\n\turl=\"https://github.com/debuerreotype/docker-debian-artifacts/raw/155640b6e2e249dfaeee8795d5de539ef3e49417/buster/slim/rootfs.tar.xz\"\n\t;;\n\narmv7)\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/dist-arm32v7\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/60ff0c2c6ce9556e5d8a2758dd2b3f3731716a6f/buster/slim\n\turl=\"https://github.com/debuerreotype/docker-debian-artifacts/raw/60ff0c2c6ce9556e5d8a2758dd2b3f3731716a6f/buster/slim/rootfs.tar.xz\"\n\t;;\n\narm64)\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/dist-arm64v8\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/2f108af35e22064c848b8628a7cac56192246dba/buster/slim\n\turl=\"https://github.com/debuerreotype/docker-debian-artifacts/raw/2f108af35e22064c848b8628a7cac56192246dba/buster/slim/rootfs.tar.xz\"\n\t;;\n\n386)\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/dist-i386\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/e4db8aa97f4366e6f27ddbdeaed0773fe0288d47/buster/slim\n\turl=\"https://github.com/debuerreotype/docker-debian-artifacts/raw/e4db8aa97f4366e6f27ddbdeaed0773fe0288d47/buster/slim/rootfs.tar.xz\"\n\t;;\n\nmips64le)\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/dist-mips64le\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/e28cbd76dcfba10446b1722aebb5a996121e3d27/buster/slim\n\turl=\"https://github.com/debuerreotype/docker-debian-artifacts/raw/e28cbd76dcfba10446b1722aebb5a996121e3d27/buster/slim/rootfs.tar.xz\"\n\t;;\n\nppc64le)\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/dist-ppc64le\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/3ba08903ca3fd48fe59ba92b02744a2f5d4d9d6f/buster/slim\n\turl=\"https://github.com/debuerreotype/docker-debian-artifacts/raw/3ba08903ca3fd48fe59ba92b02744a2f5d4d9d6f/buster/slim/rootfs.tar.xz\"\n\t;;\n\ns390x)\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/dist-s390x\n\t# https://github.com/debuerreotype/docker-debian-artifacts/tree/2fddbf8fe632fc5865b140341b68a1358586fff2/buster/slim\n\turl=\"https://github.com/debuerreotype/docker-debian-artifacts/raw/2fddbf8fe632fc5865b140341b68a1358586fff2/buster/slim/rootfs.tar.xz\"\n\t;;\n\n*)\n\techo >&2 \"error: unsupported debian architecture: $arch\"\n\texit 1\n\t;;\nesac\nrootfs=\"$TESTDATA/debian-${arch}.tar.xz\"\nget \"$rootfs\" \"$url\"\nvar=debian_image\necho \"${var^^}=$rootfs\"\n"
  },
  {
    "path": "tests/integration/help.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\t# It does not make sense to repeat these trivial tests for non-root.\n\t# Also, they fail due to $ROOT not being set and XDG_RUNTIME_DIR\n\t# pointing to another user's directory after sudo rootless.\n\trequires root\n}\n\n@test \"runc -h\" {\n\trunc -h\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} =~ NAME:+ ]]\n\t[[ ${lines[1]} =~ runc\\ '-'\\ Open\\ Container\\ Initiative\\ runtime+ ]]\n\n\trunc --help\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} =~ NAME:+ ]]\n\t[[ ${lines[1]} =~ runc\\ '-'\\ Open\\ Container\\ Initiative\\ runtime+ ]]\n}\n\n@test \"runc command -h\" {\n\tlocal runc\n\t# shellcheck disable=SC2153\n\trunc=\"$(basename \"$RUNC\")\"\n\tlocal cmds=(\n\t\tcheckpoint\n\t\tcreate\n\t\tdelete\n\t\tevents\n\t\texec\n\t\tkill\n\t\tlist\n\t\tpause\n\t\tps\n\t\trestore\n\t\tresume\n\t\trun\n\t\tspec\n\t\tstart\n\t\tstate\n\t\tupdate\n\t\tfeatures\n\t)\n\n\tfor cmd in \"${cmds[@]}\"; do\n\t\tfor arg in \"-h\" \"--help\"; do\n\t\t\trunc \"$cmd\" \"$arg\"\n\t\t\t[ \"$status\" -eq 0 ]\n\t\t\t[[ ${lines[0]} =~ NAME:+ ]]\n\t\t\t[[ ${lines[1]} =~ $runc\\ $cmd+ ]]\n\t\tdone\n\tdone\n}\n\n@test \"runc foo -h\" {\n\trunc foo -h\n\t[ \"$status\" -ne 0 ]\n\t[[ \"${output}\" == *\"No help topic for 'foo'\"* ]]\n}\n"
  },
  {
    "path": "tests/integration/helpers.bash",
    "content": "#!/bin/bash\n\nset -u\n\nbats_require_minimum_version 1.5.0\n\n# Root directory of integration tests.\nINTEGRATION_ROOT=$(dirname \"$(readlink -f \"${BASH_SOURCE[0]}\")\")\n\n# Download images, get *_IMAGE variables.\nIMAGES=$(\"${INTEGRATION_ROOT}\"/get-images.sh)\neval \"$IMAGES\"\nunset IMAGES\n\n: \"${RUNC:=\"${INTEGRATION_ROOT}/../../runc\"}\"\n\n# Path to binaries compiled from packages in tests/cmd by \"make test-binaries\").\nTESTBINDIR=${INTEGRATION_ROOT}/../cmd/_bin\n\n# Some variables may not always be set. Set those to empty value,\n# if unset, to avoid \"unbound variable\" error.\n: \"${ROOTLESS_FEATURES:=}\"\n\n# Test data path.\n# shellcheck disable=SC2034\nTESTDATA=\"${INTEGRATION_ROOT}/testdata\"\n\n# Kernel version\nKERNEL_VERSION=\"$(uname -r)\"\nKERNEL_MAJOR=\"${KERNEL_VERSION%%.*}\"\nKERNEL_MINOR=\"${KERNEL_VERSION#\"$KERNEL_MAJOR\".}\"\nKERNEL_MINOR=\"${KERNEL_MINOR%%.*}\"\n\nARCH=$(uname -m)\n\n# Seccomp agent socket.\nSECCCOMP_AGENT_SOCKET=\"$BATS_TMPDIR/seccomp-agent.sock\"\n\n# Wrapper around \"run\" that logs output to make tests easier to debug.\nfunction sane_run() {\n\tlocal cmd=\"$1\"\n\tlocal cmdname=\"${CMDNAME:-$(basename \"$cmd\")}\"\n\tshift\n\n\trun \"$cmd\" \"$@\"\n\n\t# Some debug information to make life easier. bats will only print it if the\n\t# test failed, in which case the output is useful.\n\t# shellcheck disable=SC2154\n\techo \"$cmdname $* (status=$status)\" >&2\n\t# shellcheck disable=SC2154\n\techo \"$output\" >&2\n}\n\n# Wrapper for runc.\nfunction runc() {\n\tCMDNAME=\"$(basename \"$RUNC\")\" sane_run __runc \"$@\"\n}\n\nfunction setup_runc_cmdline() {\n\tRUNC_CMDLINE=(\"$RUNC\")\n\t[[ -v RUNC_USE_SYSTEMD ]] && RUNC_CMDLINE+=(\"--systemd-cgroup\")\n\t[[ -n \"${ROOT:-}\" ]] && RUNC_CMDLINE+=(\"--root\" \"$ROOT/state\")\n\texport RUNC_CMDLINE\n}\n\n# Raw wrapper for runc.\nfunction __runc() {\n\tsetup_runc_cmdline\n\t\"${RUNC_CMDLINE[@]}\" \"$@\"\n}\n\n# Wrapper for runc spec.\nfunction runc_spec() {\n\tlocal rootless=\"\"\n\t[ $EUID -ne 0 ] && rootless=\"--rootless\"\n\n\trunc spec $rootless\n\n\t# Always add additional mappings if we have idmaps.\n\tif [[ $EUID -ne 0 && \"$ROOTLESS_FEATURES\" == *\"idmap\"* ]]; then\n\t\trunc_rootless_idmap\n\tfi\n}\n\n# Helper function to reformat config.json file. Input uses jq syntax.\nfunction update_config() {\n\tjq \"$@\" \"./config.json\" | awk 'BEGIN{RS=\"\";getline<\"-\";print>ARGV[1]}' \"./config.json\"\n}\n\n# Shortcut to add additional uids and gids, based on the values set as part of\n# a rootless configuration.\nfunction runc_rootless_idmap() {\n\tupdate_config ' .mounts |= map((select(.type == \"devpts\") | .options += [\"gid=5\"]) // .)\n\t\t\t| .linux.uidMappings += [{\"hostID\": '\"$ROOTLESS_UIDMAP_START\"', \"containerID\": 1000, \"size\": '\"$ROOTLESS_UIDMAP_LENGTH\"'}]\n\t\t\t| .linux.gidMappings += [{\"hostID\": '\"$ROOTLESS_GIDMAP_START\"', \"containerID\": 100, \"size\": 1}]\n\t\t\t| .linux.gidMappings += [{\"hostID\": '\"$((ROOTLESS_GIDMAP_START + 10))\"', \"containerID\": 1, \"size\": 20}]\n\t\t\t| .linux.gidMappings += [{\"hostID\": '\"$((ROOTLESS_GIDMAP_START + 100))\"', \"containerID\": 1000, \"size\": '\"$((ROOTLESS_GIDMAP_LENGTH - 1000))\"'}]'\n}\n\n# Returns systemd version as a number (-1 if systemd is not enabled/supported).\nfunction systemd_version() {\n\tif [ -v RUNC_USE_SYSTEMD ]; then\n\t\tsystemctl --version | awk '/^systemd / {print $2; exit}'\n\t\treturn\n\tfi\n\n\techo \"-1\"\n}\n\nfunction init_cgroup_paths() {\n\t# init once\n\t[[ -v CGROUP_V1 || -v CGROUP_V2 ]] && return\n\n\tif stat -f -c %t /sys/fs/cgroup | grep -qFw 63677270; then\n\t\tCGROUP_V2=yes\n\t\tlocal controllers=\"/sys/fs/cgroup/cgroup.controllers\"\n\t\t# For rootless + systemd case, controllers delegation is required,\n\t\t# so check the controllers that the current user has, not the top one.\n\t\t# NOTE: delegation of cpuset requires systemd >= 244 (Fedora >= 32, Ubuntu >= 20.04).\n\t\tif [[ $EUID -ne 0 && -v RUNC_USE_SYSTEMD ]]; then\n\t\t\tcontrollers=\"/sys/fs/cgroup/user.slice/user-${UID}.slice/user@${UID}.service/cgroup.controllers\"\n\t\tfi\n\n\t\t# \"pseudo\" controllers do not appear in /sys/fs/cgroup/cgroup.controllers.\n\t\t# - devices (since kernel 4.15) we must assume to be supported because\n\t\t#   it's quite hard to test.\n\t\t# - freezer (since kernel 5.2) we can auto-detect by looking for the\n\t\t#   \"cgroup.freeze\" file a *non-root* cgroup.\n\t\tCGROUP_SUBSYSTEMS=$(\n\t\t\tcat \"$controllers\"\n\t\t\techo devices\n\t\t)\n\t\tCGROUP_BASE_PATH=/sys/fs/cgroup\n\n\t\t# Find any cgroup.freeze files...\n\t\tif [ -n \"$(find \"$CGROUP_BASE_PATH\" -maxdepth 2 -type f -name \"cgroup.freeze\" -print -quit)\" ]; then\n\t\t\tCGROUP_SUBSYSTEMS+=\" freezer\"\n\t\tfi\n\telse\n\t\tif stat -f -c %t /sys/fs/cgroup/unified 2>/dev/null | grep -qFw 63677270; then\n\t\t\tCGROUP_HYBRID=yes\n\t\tfi\n\t\tCGROUP_V1=yes\n\t\tCGROUP_SUBSYSTEMS=$(awk '!/^#/ {print $1}' /proc/cgroups)\n\t\tlocal g base_path\n\t\tfor g in ${CGROUP_SUBSYSTEMS}; do\n\t\t\t# This uses gawk-specific feature (\\< ... \\>).\n\t\t\tbase_path=$(gawk '$(NF-2) == \"cgroup\" && $NF ~ /\\<'\"${g}\"'\\>/ { print $5; exit }' /proc/self/mountinfo)\n\t\t\ttest -z \"$base_path\" && continue\n\t\t\teval CGROUP_\"${g^^}\"_BASE_PATH=\"${base_path}\"\n\t\tdone\n\tfi\n}\n\nfunction create_parent() {\n\tif [ -v RUNC_USE_SYSTEMD ]; then\n\t\t[ ! -v SD_PARENT_NAME ] && return\n\t\t\"$TESTBINDIR/sd-helper\" --parent machine.slice start \"$SD_PARENT_NAME\"\n\telse\n\t\t[ ! -v REL_PARENT_PATH ] && return\n\t\tif [ -v CGROUP_V2 ]; then\n\t\t\tmkdir \"/sys/fs/cgroup$REL_PARENT_PATH\"\n\t\telse\n\t\t\tlocal subsys\n\t\t\tfor subsys in ${CGROUP_SUBSYSTEMS}; do\n\t\t\t\t# Have to ignore EEXIST (-p) as some subsystems\n\t\t\t\t# are mounted together (e.g. cpu,cpuacct), so\n\t\t\t\t# the path is created more than once.\n\t\t\t\tmkdir -p \"/sys/fs/cgroup/$subsys$REL_PARENT_PATH\"\n\t\t\tdone\n\t\tfi\n\tfi\n}\n\nfunction remove_parent() {\n\tif [ -v RUNC_USE_SYSTEMD ]; then\n\t\t[ ! -v SD_PARENT_NAME ] && return\n\t\t\"$TESTBINDIR/sd-helper\" --parent machine.slice stop \"$SD_PARENT_NAME\"\n\telse\n\t\t[ ! -v REL_PARENT_PATH ] && return\n\t\tif [ -v CGROUP_V2 ]; then\n\t\t\trmdir \"/sys/fs/cgroup/$REL_PARENT_PATH\"\n\t\telse\n\t\t\tlocal subsys\n\t\t\tfor subsys in ${CGROUP_SUBSYSTEMS} systemd; do\n\t\t\t\trmdir \"/sys/fs/cgroup/$subsys/$REL_PARENT_PATH\"\n\t\t\tdone\n\t\tfi\n\tfi\n\tunset SD_PARENT_NAME\n\tunset REL_PARENT_PATH\n}\n\nfunction set_parent_systemd_properties() {\n\t[ ! -v SD_PARENT_NAME ] && return\n\tlocal user=\"\"\n\t[ $EUID -ne 0 ] && user=\"--user\"\n\tsystemctl set-property $user \"$SD_PARENT_NAME\" \"$@\"\n}\n\n# Randomize cgroup path(s), and update cgroupsPath in config.json.\n# This function also sets a few cgroup-related variables that are used\n# by other cgroup-related functions.\n#\n# If this function is not called (and cgroupsPath is not set in config),\n# runc uses default container's cgroup path derived from the container's name\n# (except for rootless containers, that have no default cgroup path).\n#\n# Optional parameter $1 is a pod/parent name. If set, a parent/pod cgroup is\n# created, and variables $REL_PARENT_PATH and $SD_PARENT_NAME can be used to\n# refer to it.\nfunction set_cgroups_path() {\n\tinit_cgroup_paths\n\tlocal pod dash_pod=\"\" slash_pod=\"\" pod_slice=\"\"\n\tif [ \"$#\" -ne 0 ] && [ \"$1\" != \"\" ]; then\n\t\t# Set up a parent/pod cgroup.\n\t\tpod=\"$1\"\n\t\tdash_pod=\"-$pod\"\n\t\tslash_pod=\"/$pod\"\n\t\tSD_PARENT_NAME=\"machine-${pod}.slice\"\n\t\tpod_slice=\"/$SD_PARENT_NAME\"\n\tfi\n\n\tlocal rnd=\"$RANDOM\"\n\tif [ -v RUNC_USE_SYSTEMD ]; then\n\t\tSD_UNIT_NAME=\"runc-cgroups-integration-test-${rnd}.scope\"\n\t\tif [ $EUID -eq 0 ]; then\n\t\t\tREL_PARENT_PATH=\"/machine.slice${pod_slice}\"\n\t\t\tOCI_CGROUPS_PATH=\"machine${dash_pod}.slice:runc-cgroups:integration-test-${rnd}\"\n\t\telse\n\t\t\tREL_PARENT_PATH=\"/user.slice/user-${UID}.slice/user@${UID}.service/machine.slice${pod_slice}\"\n\t\t\t# OCI path doesn't contain \"/user.slice/user-${UID}.slice/user@${UID}.service/\" prefix\n\t\t\tOCI_CGROUPS_PATH=\"machine${dash_pod}.slice:runc-cgroups:integration-test-${rnd}\"\n\t\tfi\n\t\tREL_CGROUPS_PATH=\"$REL_PARENT_PATH/$SD_UNIT_NAME\"\n\telse\n\t\tREL_PARENT_PATH=\"/runc-cgroups-integration-test${slash_pod}\"\n\t\tREL_CGROUPS_PATH=\"$REL_PARENT_PATH/test-cgroup-${rnd}\"\n\t\tOCI_CGROUPS_PATH=$REL_CGROUPS_PATH\n\tfi\n\n\t# Absolute path to container's cgroup v2.\n\tif [ -v CGROUP_V2 ]; then\n\t\tCGROUP_V2_PATH=${CGROUP_BASE_PATH}${REL_CGROUPS_PATH}\n\tfi\n\n\t[ -v pod ] && create_parent\n\n\tupdate_config '.linux.cgroupsPath |= \"'\"${OCI_CGROUPS_PATH}\"'\"'\n}\n\n# Get a path to cgroup directory, based on controller name.\n# Parameters:\n#  $1: controller name (like \"pids\") or a file name (like \"pids.max\").\nfunction get_cgroup_path() {\n\tif [ -v CGROUP_V2 ]; then\n\t\techo \"$CGROUP_V2_PATH\"\n\t\treturn\n\tfi\n\n\tlocal var cgroup\n\tvar=${1%%.*}                  # controller name (e.g. memory)\n\tvar=CGROUP_${var^^}_BASE_PATH # variable name (e.g. CGROUP_MEMORY_BASE_PATH)\n\teval cgroup=\\$\"${var}${REL_CGROUPS_PATH}\"\n\techo \"$cgroup\"\n}\n\n# Get a value from a cgroup file.\nfunction get_cgroup_value() {\n\tlocal cgroup\n\tcgroup=\"$(get_cgroup_path \"$1\")\"\n\tcat \"$cgroup/$1\"\n}\n\n# Check if a value in a cgroup file $1 matches $2 or $3 (if specified).\nfunction check_cgroup_value() {\n\tlocal got\n\tgot=\"$(get_cgroup_value \"$1\")\"\n\tlocal want=$2\n\tlocal want2=\"${3:-}\"\n\n\techo \"$1: got $got, want $want $want2\"\n\t[ \"$got\" = \"$want\" ] || [[ -n \"$want2\" && \"$got\" = \"$want2\" ]]\n}\n\n# Check if a value of systemd unit property $1 matches $2 or $3 (if specified).\nfunction check_systemd_value() {\n\t[ ! -v RUNC_USE_SYSTEMD ] && return\n\tlocal source=\"$1\"\n\t[ \"$source\" = \"unsupported\" ] && return\n\tlocal want=\"$2\"\n\tlocal want2=\"${3:-}\"\n\tlocal user=\"\"\n\t[ $EUID -ne 0 ] && user=\"--user\"\n\n\tgot=$(systemctl show $user --property \"$source\" \"$SD_UNIT_NAME\" | awk -F= '{print $2}')\n\techo \"systemd $source: got $got, want $want $want2\"\n\t[ \"$got\" = \"$want\" ] || [[ -n \"$want2\" && \"$got\" = \"$want2\" ]]\n}\n\nfunction check_cpu_quota() {\n\tlocal quota=$1\n\tlocal period=$2\n\tlocal sd_quota\n\n\tif [ -v RUNC_USE_SYSTEMD ]; then\n\t\tif [ \"$quota\" = \"-1\" ]; then\n\t\t\tsd_quota=\"infinity\"\n\t\telse\n\t\t\t# In systemd world, quota (CPUQuotaPerSec) is measured in ms\n\t\t\t# (per second), and systemd rounds it up to 10ms. For example,\n\t\t\t# given quota=4000 and period=10000, systemd value is 400ms.\n\t\t\t#\n\t\t\t# Calculate milliseconds (quota/period * 1000).\n\t\t\t# First multiply by 1000 to get milliseconds,\n\t\t\t# then add half of period for proper rounding.\n\t\t\tlocal ms=$(((quota * 1000 + period / 2) / period))\n\t\t\t# Round up to nearest 10ms.\n\t\t\tms=$(((ms + 5) / 10 * 10))\n\t\t\tsd_quota=\"${ms}ms\"\n\n\t\t\t# Recalculate quota based on systemd value.\n\t\t\t# Convert ms back to quota units.\n\t\t\tquota=$((ms * period / 1000))\n\n\t\tfi\n\n\t\t# Systemd values are the same for v1 and v2.\n\t\tcheck_systemd_value \"CPUQuotaPerSecUSec\" \"$sd_quota\"\n\tfi\n\n\tif [ -v CGROUP_V2 ]; then\n\t\tif [ \"$quota\" = \"-1\" ]; then\n\t\t\tquota=\"max\"\n\t\tfi\n\t\tcheck_cgroup_value \"cpu.max\" \"$quota $period\"\n\telse\n\t\tcheck_cgroup_value \"cpu.cfs_quota_us\" \"$quota\"\n\t\tcheck_cgroup_value \"cpu.cfs_period_us\" \"$period\"\n\tfi\n\n\t# CPUQuotaPeriodUSec requires systemd >= v242\n\t[ \"$(systemd_version)\" -lt 242 ] && return\n\n\tlocal sd_period=$((period / 1000))ms\n\t[ \"$sd_period\" = \"1000ms\" ] && sd_period=\"1s\"\n\tlocal sd_infinity=\"\"\n\t# 100ms is the default value, and if not set, shown as infinity\n\t[ \"$sd_period\" = \"100ms\" ] && sd_infinity=\"infinity\"\n\tcheck_systemd_value \"CPUQuotaPeriodUSec\" $sd_period $sd_infinity\n}\n\nfunction check_cpu_burst() {\n\tlocal burst=$1\n\tif [ -v CGROUP_V2 ]; then\n\t\t# Due to a kernel bug (fixed by commit 49217ea147df, see\n\t\t# https://lore.kernel.org/all/20240424132438.514720-1-serein.chengyu@huawei.com/),\n\t\t# older kernels printed value divided by 1000. Check for both.\n\t\tcheck_cgroup_value \"cpu.max.burst\" \"$burst\" \"$((burst / 1000))\"\n\telse\n\t\tcheck_cgroup_value \"cpu.cfs_burst_us\" \"$burst\"\n\tfi\n}\n\n# Works for cgroup v1 and v2, accepts v1 shares as an argument.\nfunction check_cpu_shares() {\n\tlocal shares=$1\n\n\tif [ -v CGROUP_V2 ]; then\n\t\t# Same formula as ConvertCPUSharesToCgroupV2Value.\n\t\tlocal weight\n\t\tweight=$(awk -v shares=\"$shares\" '\n\t\tBEGIN {\n\t\t\tif (shares == 0) { print 0; exit }\n\t\t\tif (shares <= 2) { print 1; exit }\n\t\t\tif (shares >= 262144) { print 10000; exit }\n\t\t\tl = log(shares) / log(2)\n\t\t\texponent = (l*l + 125*l) / 612.0 - 7.0/34.0\n\t\t\tprint int(exp(exponent * log(10)) + 0.99)\n\t\t}')\n\n\t\tcheck_cpu_weight \"$weight\"\n\telse\n\t\tcheck_cgroup_value \"cpu.shares\" \"$shares\"\n\t\tcheck_systemd_value \"CPUShares\" \"$shares\"\n\tfi\n}\n\n# Works only for cgroup v2, accept v2 weight.\nfunction check_cpu_weight() {\n\tlocal weight=$1\n\n\tcheck_cgroup_value \"cpu.weight\" \"$weight\"\n\tcheck_systemd_value \"CPUWeight\" \"$weight\"\n}\n\nfunction check_cgroup_dev_iops() {\n\tlocal dev=$1 rbps=$2 wbps=$3 riops=$4 wiops=$5\n\n\tif [ -v CGROUP_V2 ]; then\n\t\tiops=$(get_cgroup_value \"io.max\")\n\t\tprintf \"== io.max ==\\n%s\\n\" \"$iops\"\n\t\tgrep \"^$dev rbps=$rbps wbps=$wbps riops=$riops wiops=$wiops$\" <<<\"$iops\"\n\t\treturn\n\tfi\n\n\tgrep \"^$dev ${rbps}$\" <<<\"$(get_cgroup_value blkio.throttle.read_bps_device)\"\n\tgrep \"^$dev ${wbps}$\" <<<\"$(get_cgroup_value blkio.throttle.write_bps_device)\"\n\tgrep \"^$dev ${riops}$\" <<<\"$(get_cgroup_value blkio.throttle.read_iops_device)\"\n\tgrep \"^$dev ${wiops}$\" <<<\"$(get_cgroup_value blkio.throttle.write_iops_device)\"\n}\n\n# Helper function to set a resources limit\nfunction set_resources_limit() {\n\tupdate_config '.linux.resources.pids.limit |= 100'\n}\n\n# Helper function to make /sys/fs/cgroup writable\nfunction set_cgroup_mount_writable() {\n\tupdate_config '.mounts |= map((select(.type == \"cgroup\") | .options -= [\"ro\"]) // .)'\n}\n\n# Fails the current test, providing the error given.\nfunction fail() {\n\techo \"$@\" >&2\n\texit 1\n}\n\n# Check whether rootless runc can use cgroups.\nfunction rootless_cgroup() {\n\t[[ \"$ROOTLESS_FEATURES\" == *\"cgroup\"* || -v RUNC_USE_SYSTEMD ]]\n}\n\nfunction in_userns() {\n\t# The kernel guarantees the root userns inode number (and thus the value of\n\t# the magic-link) is always the same value (PROC_USER_INIT_INO).\n\t[[ \"$(readlink /proc/self/ns/user)\" != \"user:[$((0xEFFFFFFD))]\" ]]\n}\n\nfunction can_fsopen() {\n\tfstype=\"$1\"\n\n\t# At the very least you need 5.1 for fsopen() and the filesystem needs to\n\t# be supported by the running kernel.\n\tif ! is_kernel_gte 5.1 || ! grep -qFw \"$fstype\" /proc/filesystems; then\n\t\treturn 1\n\tfi\n\n\t# You need to be root to use fsopen.\n\tif [ \"$EUID\" -ne 0 ]; then\n\t\treturn 1\n\tfi\n\n\t# If we're root in the initial userns, we're done.\n\tif ! in_userns; then\n\t\treturn 0\n\tfi\n\n\t# If we are running in a userns, then the filesystem needs to support\n\t# FS_USERNS_MOUNT, which is a per-filesystem flag that depends on the\n\t# kernel version.\n\tcase \"$fstype\" in\n\toverlay)\n\t\t# 459c7c565ac3 (\"ovl: unprivieged mounts\")\n\t\tis_kernel_gte 5.11 || return 2\n\t\t;;\n\tfuse)\n\t\t# 4ad769f3c346 (\"fuse: Allow fully unprivileged mounts\")\n\t\tis_kernel_gte 4.18 || return 2\n\t\t;;\n\tramfs | tmpfs)\n\t\t# b3c6761d9b5c (\"userns: Allow the userns root to mount ramfs.\")\n\t\t# 2b8576cb09a7 (\"userns: Allow the userns root to mount tmpfs.\")\n\t\tis_kernel_gte 3.9 || return 2\n\t\t;;\n\t*)\n\t\t# If we don't know about the filesystem, return an error.\n\t\tfail \"can_fsopen: unknown filesystem $fstype\"\n\t\t;;\n\tesac\n}\n\n# Check if criu is available and working.\nfunction have_criu() {\n\tcommand -v criu &>/dev/null || return 1\n\n\t# Workaround for https://github.com/opencontainers/runc/issues/3532.\n\tlocal ver\n\tver=$(rpm -q criu 2>/dev/null || true)\n\trun ! grep -q '^criu-3\\.17-[123]\\.el9' <<<\"$ver\"\n}\n\n# Allows a test to specify what things it requires. If the environment can't\n# support it, the test is skipped with a message.\nfunction requires() {\n\tfor var in \"$@\"; do\n\t\tlocal skip_me\n\t\tcase $var in\n\t\tcriu)\n\t\t\tif ! have_criu; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tcriu_feature_*)\n\t\t\tvar=${var#criu_feature_}\n\t\t\tif ! criu check --feature \"$var\"; then\n\t\t\t\tskip \"requires CRIU feature ${var}\"\n\t\t\tfi\n\t\t\t;;\n\t\troot)\n\t\t\tif [ $EUID -ne 0 ] || in_userns; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\trootless)\n\t\t\tif [ $EUID -eq 0 ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\trootless_idmap)\n\t\t\tif [[ \"$ROOTLESS_FEATURES\" != *\"idmap\"* ]]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\trootless_cgroup)\n\t\t\tif ! rootless_cgroup; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\trootless_no_cgroup)\n\t\t\tif rootless_cgroup; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\trootless_no_features)\n\t\t\tif [ -n \"$ROOTLESS_FEATURES\" ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tcgroups_rt)\n\t\t\tinit_cgroup_paths\n\t\t\tif [ ! -e \"${CGROUP_CPU_BASE_PATH}/cpu.rt_period_us\" ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tcgroups_swap)\n\t\t\tinit_cgroup_paths\n\t\t\tif [ -v CGROUP_V1 ]; then\n\t\t\t\tif [ ! -e \"${CGROUP_MEMORY_BASE_PATH}/memory.memsw.limit_in_bytes\" ]; then\n\t\t\t\t\tskip_me=1\n\t\t\t\tfi\n\t\t\telif [ -v CGROUP_V2 ]; then\n\t\t\t\tif [ -z \"$(find \"$CGROUP_BASE_PATH\" -maxdepth 2 -type f -name memory.swap.max -print -quit)\" ]; then\n\t\t\t\t\tskip_me=1\n\t\t\t\tfi\n\t\t\tfi\n\t\t\t;;\n\t\tcgroups_cpu_idle)\n\t\t\tlocal p\n\t\t\tinit_cgroup_paths\n\t\t\t[ -v CGROUP_V1 ] && p=\"$CGROUP_CPU_BASE_PATH\"\n\t\t\t[ -v CGROUP_V2 ] && p=\"$CGROUP_BASE_PATH\"\n\t\t\tif [ -z \"$(find \"$p\" -maxdepth 2 -type f -name cpu.idle -print -quit)\" ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tcgroups_cpu_burst)\n\t\t\tlocal p f\n\t\t\tinit_cgroup_paths\n\t\t\tif [ -v CGROUP_V1 ]; then\n\t\t\t\tp=\"$CGROUP_CPU_BASE_PATH\"\n\t\t\t\tf=\"cpu.cfs_burst_us\"\n\t\t\telif [ -v CGROUP_V2 ]; then\n\t\t\t\t# https://github.com/torvalds/linux/commit/f4183717b370ad28dd0c0d74760142b20e6e7931\n\t\t\t\trequires_kernel 5.14\n\t\t\t\tp=\"$CGROUP_BASE_PATH\"\n\t\t\t\tf=\"cpu.max.burst\"\n\t\t\tfi\n\t\t\tif [ -z \"$(find \"$p\" -maxdepth 2 -type f -name \"$f\" -print -quit)\" ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tcgroups_io_weight)\n\t\t\tlocal p f1 f2\n\t\t\tinit_cgroup_paths\n\t\t\tif [ -v CGROUP_V1 ]; then\n\t\t\t\tp=\"$CGROUP_CPU_BASE_PATH\"\n\t\t\t\tf1=\"blkio.weight\"\n\t\t\t\tf2=\"blkio.bfq.weight\"\n\t\t\telif [ -v CGROUP_V2 ]; then\n\t\t\t\tp=\"$CGROUP_BASE_PATH\"\n\t\t\t\tf1=\"io.weight\"\n\t\t\t\tf2=\"io.bfq.weight\"\n\t\t\tfi\n\t\t\tif [ -z \"$(find \"$p\" -type f \\( -name \"$f1\" -o -name \"$f2\" \\) -print -quit)\" ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tcgroupns)\n\t\t\tif [ ! -e \"/proc/self/ns/cgroup\" ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\ttimens)\n\t\t\tif [ ! -e \"/proc/self/ns/time\" ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tcgroups_v1)\n\t\t\tinit_cgroup_paths\n\t\t\tif [ ! -v CGROUP_V1 ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tcgroups_v2)\n\t\t\tinit_cgroup_paths\n\t\t\tif [ ! -v CGROUP_V2 ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tcgroups_hybrid)\n\t\t\tinit_cgroup_paths\n\t\t\tif [ ! -v CGROUP_HYBRID ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tcgroups_*)\n\t\t\tinit_cgroup_paths\n\t\t\tvar=${var#cgroups_}\n\t\t\tif [[ \"$CGROUP_SUBSYSTEMS\" != *\"$var\"* ]]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tsmp)\n\t\t\tlocal cpus\n\t\t\tcpus=$(grep -c '^processor' /proc/cpuinfo)\n\t\t\tif [ \"$cpus\" -lt 2 ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tsystemd)\n\t\t\tif [ ! -v RUNC_USE_SYSTEMD ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tsystemd_v*)\n\t\t\tvar=${var#systemd_v}\n\t\t\tif [ \"$(systemd_version)\" -lt \"$var\" ]; then\n\t\t\t\tskip \"requires systemd >= v${var}\"\n\t\t\tfi\n\t\t\t;;\n\t\tno_systemd)\n\t\t\tif [ -v RUNC_USE_SYSTEMD ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tarch_x86_64)\n\t\t\tif [ \"$ARCH\" != \"x86_64\" ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tmore_than_8_core)\n\t\t\tlocal cpus\n\t\t\tcpus=$(grep -c '^processor' /proc/cpuinfo)\n\t\t\tif [ \"$cpus\" -le 8 ]; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\tpsi)\n\t\t\t# If PSI is not compiled in the kernel, the file will not exist.\n\t\t\t# If PSI is compiled, but not enabled, read will fail with ENOTSUPP.\n\t\t\tif ! cat /sys/fs/cgroup/cpu.pressure &>/dev/null; then\n\t\t\t\tskip_me=1\n\t\t\tfi\n\t\t\t;;\n\t\t*)\n\t\t\tfail \"BUG: Invalid requires $var.\"\n\t\t\t;;\n\t\tesac\n\t\tif [ -v skip_me ]; then\n\t\t\tskip \"test requires $var\"\n\t\tfi\n\tdone\n}\n\n# Allow a test to specify that it will not work properly on a given OS. The\n# fingerprint for the OS used for this test is $ID-$VERSION_ID, using the\n# variables in /etc/os-release. The arguments are regular expressions, and any\n# match will cause the test to be skipped.\nfunction exclude_os() {\n\tlocal host\n\thost=\"$(sh -c '. /etc/os-release ; echo \"$ID-$VERSION_ID\"')\"\n\tfor bad_os in \"$@\"; do\n\t\tif [[ \"$host\" =~ ^$bad_os$ ]]; then\n\t\t\tskip \"test doesn't work on $bad_os\"\n\t\tfi\n\tdone\n}\n\n# Retry a command $1 times until it succeeds. Wait $2 seconds between retries.\nfunction retry() {\n\tlocal attempts=$1\n\tshift\n\tlocal delay=$1\n\tshift\n\tlocal i\n\n\tfor ((i = 0; i < attempts; i++)); do\n\t\trun \"$@\"\n\t\tif [[ \"$status\" -eq 0 ]]; then\n\t\t\treturn 0\n\t\tfi\n\t\tsleep \"$delay\"\n\tdone\n\n\techo \"Command \\\"$*\\\" failed $attempts times. Output: $output\"\n\tfalse\n}\n\n# retry until the given container has state\nfunction wait_for_container() {\n\tif [ $# -eq 3 ]; then\n\t\tretry \"$1\" \"$2\" __runc state \"$3\"\n\telif [ $# -eq 4 ]; then\n\t\tretry \"$1\" \"$2\" eval \"__runc state $3 | grep -qw $4\"\n\telse\n\t\techo \"Usage: wait_for_container ATTEMPTS DELAY ID [STATUS]\" 1>&2\n\t\treturn 1\n\tfi\n}\n\nfunction testcontainer() {\n\t# test state of container\n\trunc state \"$1\"\n\tif [ \"$2\" = \"checkpointed\" ]; then\n\t\t[ \"$status\" -eq 1 ]\n\t\treturn\n\tfi\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${output}\" == *\"$2\"* ]]\n}\n\n# Check that all the listed processes are gone. Use after kill/stop etc.\nfunction wait_pids_gone() {\n\tif [ $# -lt 3 ]; then\n\t\techo \"Usage: wait_pids_gone ITERATIONS SLEEP PID [PID ...]\"\n\t\treturn 1\n\tfi\n\tlocal iter=$1\n\tshift\n\tlocal sleep=$1\n\tshift\n\tlocal pids=(\"$@\")\n\n\twhile true; do\n\t\tfor i in \"${!pids[@]}\"; do\n\t\t\t# Check if the pid is there; if not, remove it from the list.\n\t\t\tkill -0 \"${pids[i]}\" 2>/dev/null || unset \"pids[i]\"\n\t\tdone\n\t\t[ ${#pids[@]} -eq 0 ] && return 0\n\t\t# Rebuild pids array to avoid sparse array issues.\n\t\tpids=(\"${pids[@]}\")\n\n\t\t((--iter > 0)) || break\n\n\t\tsleep \"$sleep\"\n\tdone\n\n\techo \"Expected all PIDs to be gone, but some are still there:\" \"${pids[@]}\" 1>&2\n\treturn 1\n}\n\nfunction setup_recvtty() {\n\t[ ! -v ROOT ] && return 1 # must not be called without ROOT set\n\tlocal dir=\"$ROOT/tty\"\n\n\tmkdir \"$dir\"\n\texport CONSOLE_SOCKET=\"$dir/sock\"\n\n\t# We need to start recvtty in the background, so we double fork in the shell.\n\t(\"$TESTBINDIR/recvtty\" --pid-file \"$dir/pid\" --mode null \"$CONSOLE_SOCKET\" &) &\n}\n\nfunction teardown_recvtty() {\n\t[ ! -v ROOT ] && return 0 # nothing to teardown\n\tlocal dir=\"$ROOT/tty\"\n\n\t# When we kill recvtty, the container will also be killed.\n\tif [ -f \"$dir/pid\" ]; then\n\t\tkill -9 \"$(cat \"$dir/pid\")\"\n\tfi\n\n\t# Clean up the files that might be left over.\n\trm -rf \"$dir\"\n}\n\nfunction setup_seccompagent() {\n\t(\"$TESTBINDIR/seccompagent\" -socketfile=\"$SECCCOMP_AGENT_SOCKET\" -pid-file \"$BATS_TMPDIR/seccompagent.pid\" &) &\n}\n\nfunction teardown_seccompagent() {\n\tif [ -f \"$BATS_TMPDIR/seccompagent.pid\" ]; then\n\t\tkill -9 \"$(cat \"$BATS_TMPDIR/seccompagent.pid\")\"\n\tfi\n\trm -f \"$BATS_TMPDIR/seccompagent.pid\"\n\trm -f \"$SECCCOMP_AGENT_SOCKET\"\n}\n\nLOOPBACK_DEVICE_LIST=\"$(mktemp \"$BATS_TMPDIR/losetup.XXXXXX\")\"\n\nfunction setup_loopdev() {\n\tlocal backing dev\n\tbacking=\"$(mktemp \"$BATS_RUN_TMPDIR/backing.img.XXXXXX\")\"\n\ttruncate --size=4K \"$backing\"\n\n\tdev=\"$(losetup --find --show \"$backing\")\" || skip \"unable to create a loop device\"\n\techo \"$dev\" >>\"$LOOPBACK_DEVICE_LIST\"\n\n\tunlink \"$backing\"\n\techo \"$dev\"\n}\n\nfunction teardown_loopdevs() {\n\t[ -s \"$LOOPBACK_DEVICE_LIST\" ] || return 0\n\twhile IFS= read -r dev; do\n\t\techo \"losetup -d '$dev'\" >&2\n\t\tlosetup -d \"$dev\"\n\tdone <\"$LOOPBACK_DEVICE_LIST\"\n\ttruncate --size=0 \"$LOOPBACK_DEVICE_LIST\"\n}\n\nfunction setup_bundle() {\n\tlocal image=\"$1\"\n\n\t# Root for various container directories (state, tty, bundle).\n\tROOT=$(mktemp -d \"$BATS_RUN_TMPDIR/runc.XXXXXX\")\n\tmkdir -p \"$ROOT/state\" \"$ROOT/bundle/rootfs\"\n\n\t# Directories created by mktemp -d have 0700 permission bits. Tests\n\t# running inside userns (see userns.bats) need to access the directory\n\t# as a different user to mount the rootfs. Since kernel v5.12, parent\n\t# directories are also checked. Give a+x for these tests to work.\n\tchmod a+x \"$ROOT\" \"$BATS_RUN_TMPDIR\"\n\n\tsetup_recvtty\n\tcd \"$ROOT/bundle\" || return\n\n\ttar --exclude './dev/*' -C rootfs -xf \"$image\"\n\n\trunc_spec\n}\n\nfunction setup_busybox() {\n\tsetup_bundle \"$BUSYBOX_IMAGE\"\n}\n\nfunction setup_debian() {\n\tsetup_bundle \"$DEBIAN_IMAGE\"\n}\n\nfunction teardown_bundle() {\n\t[ ! -v ROOT ] && return 0 # nothing to teardown\n\n\tcd \"$INTEGRATION_ROOT\" || return\n\techo \"--- teardown ---\" >&2\n\n\tteardown_recvtty\n\tlocal ct\n\tfor ct in $(__runc list -q); do\n\t\t__runc delete -f \"$ct\"\n\tdone\n\trm -rf \"$ROOT\"\n\tremove_parent\n}\n\nfunction remap_rootfs() {\n\t[ ! -v ROOT ] && return 0 # nothing to remap\n\n\t\"$TESTBINDIR/remap-rootfs\" \"$ROOT/bundle\"\n}\n\nfunction is_kernel_gte() {\n\tlocal major_required minor_required\n\tmajor_required=$(echo \"$1\" | cut -d. -f1)\n\tminor_required=$(echo \"$1\" | cut -d. -f2)\n\t[[ \"$KERNEL_MAJOR\" -gt $major_required || (\"$KERNEL_MAJOR\" -eq $major_required && \"$KERNEL_MINOR\" -ge $minor_required) ]]\n}\n\nfunction requires_kernel() {\n\tif ! is_kernel_gte \"$@\"; then\n\t\tskip \"requires kernel >= $1\"\n\tfi\n}\n\nfunction requires_idmap_fs() {\n\tlocal fs\n\tfs=$1\n\n\t# We need to \"|| true\" it to avoid CI failure as this binary may return with\n\t# something different than 0.\n\tstderr=$(\"$TESTBINDIR/fs-idmap\" \"$fs\" 2>&1 >/dev/null || true)\n\n\tcase $stderr in\n\t*invalid\\ argument)\n\t\tskip \"$fs underlying file system does not support ID map mounts\"\n\t\t;;\n\t*operation\\ not\\ permitted)\n\t\tif uname -r | grep -q el9; then\n\t\t\t# Older EL9 kernels did not permit using ID map mounts\n\t\t\t# due to a specific patch added to their sources:\n\t\t\t# \thttps://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/131\n\t\t\t#\n\t\t\t# That patch was reverted in:\n\t\t\t# \thttps://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/2179\n\t\t\t#\n\t\t\t# The above revert is included into the kernel 5.14.0-334.el9.\n\t\t\tskip \"Needs kernel >= 5.14.0-334.el9\"\n\t\tfi\n\t\t;;\n\tesac\n\t# If we have another error, the integration test will fail and report it.\n}\n\n# setup_pidfd_kill runs pidfd-kill process in background and receives the\n# SIGTERM as signal to send the given signal to init process.\nfunction setup_pidfd_kill() {\n\tlocal signal=$1\n\n\t[ ! -v ROOT ] && return 1\n\tlocal dir=\"${ROOT}/pidfd\"\n\n\tmkdir \"${dir}\"\n\texport PIDFD_SOCKET=\"${dir}/sock\"\n\n\t(\"$TESTBINDIR/pidfd-kill\" --pid-file \"${dir}/pid\" --signal \"${signal}\" \"${PIDFD_SOCKET}\" &) &\n\n\t# ensure socket is ready\n\tretry 10 1 stat \"${PIDFD_SOCKET}\"\n}\n\n# teardown_pidfd_kill cleanups all the resources related to pidfd-kill.\nfunction teardown_pidfd_kill() {\n\t[ ! -v ROOT ] && return 0\n\n\tlocal dir=\"${ROOT}/pidfd\"\n\n\tif [ -f \"${dir}/pid\" ]; then\n\t\tkill -9 \"$(cat \"${dir}/pid\")\"\n\tfi\n\n\trm -rf \"${dir}\"\n}\n\n# pidfd_kill sends the signal to init process.\nfunction pidfd_kill() {\n\t[ ! -v ROOT ] && return 0\n\n\tlocal dir=\"${ROOT}/pidfd\"\n\n\tif [ -f \"${dir}/pid\" ]; then\n\t\tkill \"$(cat \"${dir}/pid\")\"\n\tfi\n}\n"
  },
  {
    "path": "tests/integration/hooks.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc create [second createRuntime hook fails]\" {\n\tupdate_config '.hooks |= {\"createRuntime\": [{\"path\": \"/bin/true\"}, {\"path\": \"/bin/false\"}]}'\n\n\trunc create --console-socket \"$CONSOLE_SOCKET\" test_hooks\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"error running createRuntime hook #1:\"* ]]\n}\n\n@test \"runc create [hook fails]\" {\n\tfor hook in prestart createRuntime createContainer; do\n\t\techo \"testing hook $hook\"\n\t\tupdate_config '.hooks |= {\"'$hook'\": [{\"path\": \"/bin/true\"}, {\"path\": \"/bin/false\"}]}'\n\t\trunc create --console-socket \"$CONSOLE_SOCKET\" test_hooks\n\t\t[ \"$status\" -ne 0 ]\n\t\t[[ \"$output\" == *\"error running $hook hook #1:\"* ]]\n\tdone\n}\n\n@test \"runc run [hook fails]\" {\n\tupdate_config '.process.args = [\"/bin/echo\", \"Hello World\"]'\n\t# All hooks except Poststop.\n\tfor hook in prestart createRuntime createContainer startContainer poststart; do\n\t\techo \"testing hook $hook\"\n\t\tupdate_config '.hooks |= {\"'$hook'\": [{\"path\": \"/bin/true\"}, {\"path\": \"/bin/false\"}]}'\n\t\trunc run \"test_hook-$hook\"\n\t\t[[ \"$output\" != \"Hello World\" ]]\n\t\t[ \"$status\" -ne 0 ]\n\t\t[[ \"$output\" == *\"error running $hook hook #1:\"* ]]\n\tdone\n}\n\n# While runtime-spec does not say what environment variables hooks should have,\n# if not explicitly specified, historically the StartContainer hook inherited\n# the process environment specified for init.\n#\n# Check this behavior is preserved.\n@test \"runc run [startContainer hook should inherit process environment]\" {\n\tcat >\"rootfs/check-env.sh\" <<-'EOF'\n\t\t#!/bin/sh -ue\n\t\ttest $ONE = two\n\t\ttest $FOO = bar\n\t\techo $HOME # Test HOME is set w/o checking the value.\n\tEOF\n\tchmod +x \"rootfs/check-env.sh\"\n\n\tupdate_config '\t  .process.args = [\"/bin/true\"]\n\t\t\t| .process.env = [\"ONE=two\", \"FOO=bar\"]\n\t\t\t| .hooks |= {\"startContainer\": [{\"path\": \"/check-env.sh\"}]}'\n\trunc run ct1\n\t[ \"$status\" -eq 0 ]\n}\n\n# https://github.com/opencontainers/runc/issues/1663\n@test \"runc run [hook's argv is preserved]\" {\n\t# Check that argv[0] and argv[1] passed to the hook's binary\n\t# exactly as set in config.json.\n\tupdate_config '.hooks |= {\"startContainer\": [{\"path\": \"/bin/busybox\", \"args\": [\"cat\", \"/nosuchfile\"]}]}'\n\trunc run ct1\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"cat: can't open\"*\"/nosuchfile\"* ]]\n\n\t# Busybox also accepts commands where argv[0] is \"busybox\",\n\t# and argv[1] is applet name. Test this as well.\n\tupdate_config '.hooks |= {\"startContainer\": [{\"path\": \"/bin/busybox\", \"args\": [\"busybox\", \"cat\", \"/nosuchfile\"]}]}'\n\trunc run ct1\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"cat: can't open\"*\"/nosuchfile\"* ]]\n}\n"
  },
  {
    "path": "tests/integration/hooks_so.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\trequires root no_systemd\n\n\tsetup_debian\n\t# CR = CreateRuntime, CC = CreateContainer\n\tHOOKLIBCR=librunc-hooks-create-runtime.so\n\tHOOKLIBCC=librunc-hooks-create-container.so\n\tLIBPATH=\"$(pwd)/rootfs/lib/\"\n}\n\nfunction teardown() {\n\tif [ -v LIBPATH ]; then\n\t\tumount \"$LIBPATH/$HOOKLIBCR\".1.0.0 &>/dev/null || true\n\t\tumount \"$LIBPATH/$HOOKLIBCC\".1.0.0 &>/dev/null || true\n\t\trm -f \"$HOOKLIBCR\".1.0.0 \"$HOOKLIBCC\".1.0.0\n\t\tunset LIBPATH HOOKLIBCR HOOKLIBCC\n\tfi\n\tteardown_bundle\n}\n\n@test \"runc run (hooks library tests)\" {\n\t# setup some dummy libs\n\tgcc -shared -Wl,-soname,\"$HOOKLIBCR.1\" -o \"$HOOKLIBCR.1.0.0\"\n\tgcc -shared -Wl,-soname,\"$HOOKLIBCC.1\" -o \"$HOOKLIBCC.1.0.0\"\n\n\tbundle=$(pwd)\n\n\t# To mount $HOOKLIBCR we need to do that in the container namespace\n\tcreate_runtime_hook=\"pid=\\$(cat - | jq -r '.pid'); touch \"$LIBPATH/$HOOKLIBCR.1.0.0\" && \\\n\t\tnsenter -m \\$ns -t \\$pid mount --bind \"$bundle/$HOOKLIBCR.1.0.0\" \"$LIBPATH/$HOOKLIBCR.1.0.0\"\"\n\n\tcreate_container_hook=\"touch ./lib/$HOOKLIBCC.1.0.0 && mount --bind $bundle/$HOOKLIBCC.1.0.0 ./lib/$HOOKLIBCC.1.0.0\"\n\n\t# shellcheck disable=SC2016\n\tupdate_config --arg create_runtime_hook \"$create_runtime_hook\" --arg create_container_hook \"$create_container_hook\" '\n\t\t.hooks |= . + {\"createRuntime\": [{\"path\": \"/bin/sh\", \"args\": [\"/bin/sh\", \"-c\", $create_runtime_hook]}]} |\n\t\t.hooks |= . + {\"createContainer\": [{\"path\": \"/bin/sh\", \"args\": [\"/bin/sh\", \"-c\", $create_container_hook]}]} |\n\t\t.hooks |= . + {\"startContainer\": [{\"path\": \"/bin/sh\", \"args\": [\"/bin/sh\", \"-c\", \"ldconfig\"]}]} |\n\t\t.root.readonly |= false |\n\t\t.process.args = [\"/bin/sh\", \"-c\", \"ldconfig -p | grep librunc\"]'\n\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\n\techo \"Checking create-runtime library\"\n\techo \"$output\" | grep \"$HOOKLIBCR\"\n\n\techo \"Checking create-container library\"\n\techo \"$output\" | grep \"$HOOKLIBCC\"\n}\n"
  },
  {
    "path": "tests/integration/host-mntns.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\trequires root\n\tsetup_busybox\n}\n\nfunction teardown() {\n\t[ ! -v ROOT ] && return 0 # nothing to teardown\n\n\t# XXX runc does not unmount a container which\n\t# shares mount namespace with the host.\n\tumount -R --lazy \"$ROOT\"/bundle/rootfs\n\n\tteardown_bundle\n}\n\n@test \"runc run [host mount ns + hooks]\" {\n\tupdate_config '\t  .process.args = [\"/bin/echo\", \"Hello World\"]\n\t\t\t| .hooks |= . + {\"createRuntime\": [{\"path\": \"/bin/sh\", \"args\": [\"/bin/sh\", \"-c\", \"touch createRuntimeHook.$$\"]}]}\n\t\t\t| .linux.namespaces -= [{\"type\": \"mount\"}]\n\t\t\t| .linux.maskedPaths = []\n\t\t\t| .linux.readonlyPaths = []'\n\trunc run test_host_mntns\n\t[ \"$status\" -eq 0 ]\n\trunc delete -f test_host_mntns\n\n\t# There should be one such file.\n\trun -0 ls createRuntimeHook.*\n\t[ \"$(echo \"$output\" | wc -w)\" -eq 1 ]\n}\n"
  },
  {
    "path": "tests/integration/idmap.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tOVERFLOW_UID=\"$(cat /proc/sys/kernel/overflowuid)\"\n\tOVERFLOW_GID=\"$(cat /proc/sys/kernel/overflowgid)\"\n\trequires root\n\trequires_kernel 5.12\n\n\tsetup_debian\n\trequires_idmap_fs .\n\n\t# Prepare source folders for mounts.\n\tmkdir -p source-{1,2,multi{1,2,3}}/\n\ttouch source-{1,2,multi{1,2,3}}/foo.txt\n\ttouch source-multi{1,2,3}/{bar,baz}.txt\n\n\t# Change the owners for everything other than source-1.\n\tchown 1:1 source-2/foo.txt\n\n\t# A source with multiple users owning files.\n\tchown 100:211 source-multi1/foo.txt\n\tchown 101:222 source-multi1/bar.txt\n\tchown 102:233 source-multi1/baz.txt\n\n\t# Same gids as multi1, different uids.\n\tchown 200:211 source-multi2/foo.txt\n\tchown 201:222 source-multi2/bar.txt\n\tchown 202:233 source-multi2/baz.txt\n\n\t# Even more users -- 1000 uids, 500 gids.\n\tchown 5000528:6000491 source-multi3/foo.txt\n\tchown 5000133:6000337 source-multi3/bar.txt\n\tchown 5000999:6000444 source-multi3/baz.txt\n\n\t# Add a symlink-containing source.\n\tln -s source-multi1 source-multi1-symlink\n\n\t# Add some top-level files in the mount tree.\n\tmkdir -p mnt-subtree/multi{1,2}\n\ttouch mnt-subtree/{foo,bar,baz}.txt\n\tchown 100:211 mnt-subtree/foo.txt\n\tchown 200:222 mnt-subtree/bar.txt\n\tchown 300:233 mnt-subtree/baz.txt\n\n\tmounts_file=\"$PWD/.all-mounts\"\n\techo -n >\"$mounts_file\"\n}\n\nfunction teardown() {\n\tif [ -v mounts_file ]; then\n\t\txargs -n 1 -a \"$mounts_file\" -- umount -l\n\t\trm -f \"$mounts_file\"\n\tfi\n\tteardown_bundle\n}\n\nfunction setup_host_bind_mount() {\n\tsrc=\"$1\"\n\tdst=\"$2\"\n\n\tmount --bind \"$src\" \"$dst\"\n\techo \"$dst\" >>\"$mounts_file\"\n}\n\nfunction setup_idmap_userns() {\n\tupdate_config '.linux.namespaces += [{\"type\": \"user\"}]\n\t\t| .linux.uidMappings += [{\"containerID\": 0, \"hostID\": 100000, \"size\": 65536}]\n\t\t| .linux.gidMappings += [{\"containerID\": 0, \"hostID\": 100000, \"size\": 65536}]'\n\tremap_rootfs\n}\n\nfunction setup_bind_mount() {\n\tmountname=\"${1:-1}\"\n\tupdate_config '.mounts += [\n\t\t\t{\n\t\t\t\t\"source\": \"source-'\"$mountname\"'/\",\n\t\t\t\t\"destination\": \"/tmp/bind-mount-'\"$mountname\"'\",\n\t\t\t\t\"options\": [\"bind\"]\n\t\t\t}\n\t\t]'\n}\n\nfunction setup_idmap_single_mount() {\n\tuidmap=\"$1\" # ctr:host:size\n\tgidmap=\"$2\" # ctr:host:size\n\tmountname=\"$3\"\n\tdestname=\"${4:-$mountname}\"\n\n\tread -r uid_containerID uid_hostID uid_size <<<\"$(tr : ' ' <<<\"$uidmap\")\"\n\tread -r gid_containerID gid_hostID gid_size <<<\"$(tr : ' ' <<<\"$gidmap\")\"\n\n\tupdate_config '.mounts += [\n\t\t\t{\n\t\t\t\t\"source\": \"source-'\"$mountname\"'/\",\n\t\t\t\t\"destination\": \"/tmp/mount-'\"$destname\"'\",\n\t\t\t\t\"options\": [\"bind\"],\n\t\t\t\t\"uidMappings\": [{\"containerID\": '\"$uid_containerID\"', \"hostID\": '\"$uid_hostID\"', \"size\": '\"$uid_size\"'}],\n\t\t\t\t\"gidMappings\": [{\"containerID\": '\"$gid_containerID\"', \"hostID\": '\"$gid_hostID\"', \"size\": '\"$gid_size\"'}]\n\t\t\t}\n\t\t]'\n}\n\nfunction setup_idmap_basic_mount() {\n\tmountname=\"${1:-1}\"\n\tsetup_idmap_single_mount 0:100000:65536 0:100000:65536 \"$mountname\"\n}\n\n@test \"simple idmap mount [userns]\" {\n\tsetup_idmap_userns\n\tsetup_idmap_basic_mount\n\n\tupdate_config '.process.args = [\"sh\", \"-c\", \"stat -c =%u=%g= /tmp/mount-1/foo.txt\"]'\n\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=0=0=\"* ]]\n}\n\n@test \"simple idmap mount [no userns]\" {\n\tsetup_idmap_basic_mount\n\n\tupdate_config '.process.args = [\"sh\", \"-c\", \"stat -c =%u=%g= /tmp/mount-1/foo.txt\"]'\n\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=100000=100000=\"* ]]\n}\n\n@test \"write to an idmap mount [userns]\" {\n\tsetup_idmap_userns\n\tsetup_idmap_basic_mount\n\n\tupdate_config '.process.args = [\"sh\", \"-c\", \"touch /tmp/mount-1/bar && stat -c =%u=%g= /tmp/mount-1/bar\"]'\n\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=0=0=\"* ]]\n}\n\n@test \"write to an idmap mount [no userns]\" {\n\tsetup_idmap_basic_mount\n\n\tupdate_config '.process.args = [\"sh\", \"-c\", \"touch /tmp/mount-1/bar && stat -c =%u=%g= /tmp/mount-1/bar\"]'\n\n\trunc run test_debian\n\t# The write must fail because the user is unmapped.\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"Value too large for defined data type\"* ]] # ERANGE\n}\n\n@test \"idmap mount with propagation flag [userns]\" {\n\tsetup_idmap_userns\n\tsetup_idmap_basic_mount\n\n\tupdate_config '.process.args = [\"sh\", \"-c\", \"findmnt -o PROPAGATION /tmp/mount-1\"]'\n\t# Add the shared option to the idmap mount.\n\tupdate_config '.mounts |= map((select(.source == \"source-1/\") | .options += [\"shared\"]) // .)'\n\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"shared\"* ]]\n}\n\n@test \"idmap mount with relative path [userns]\" {\n\tsetup_idmap_userns\n\tsetup_idmap_basic_mount\n\n\tupdate_config '.process.args = [\"sh\", \"-c\", \"stat -c =%u=%g= /tmp/mount-1/foo.txt\"]'\n\t# Switch the mount to have a relative mount destination.\n\tupdate_config '.mounts |= map((select(.source == \"source-1/\") | .destination = \"tmp/mount-1\") // .)'\n\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=0=0=\"* ]]\n}\n\n@test \"idmap mount with bind mount [userns]\" {\n\tsetup_idmap_userns\n\tsetup_idmap_basic_mount\n\tsetup_bind_mount\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/{,bind-}mount-1/foo.txt\"]'\n\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-1/foo.txt:0=0=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/bind-mount-1/foo.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n}\n\n@test \"idmap mount with bind mount [no userns]\" {\n\tsetup_idmap_basic_mount\n\tsetup_bind_mount\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/{,bind-}mount-1/foo.txt\"]'\n\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-1/foo.txt:100000=100000=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/bind-mount-1/foo.txt:0=0=\"* ]]\n}\n\n@test \"two idmap mounts (same mapping) with two bind mounts [userns]\" {\n\tsetup_idmap_userns\n\n\tsetup_idmap_basic_mount 1\n\tsetup_bind_mount 1\n\tsetup_bind_mount 2\n\tsetup_idmap_basic_mount 2\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-[12]/foo.txt\"]'\n\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-1/foo.txt:0=0=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-2/foo.txt:1=1=\"* ]]\n}\n\n@test \"same idmap mount (different mappings) [userns]\" {\n\tsetup_idmap_userns\n\n\t# Mount the same directory with different mappings. Make sure we also use\n\t# different mappings for uids and gids.\n\tsetup_idmap_single_mount 100:100000:100 200:100000:100 multi1\n\tsetup_idmap_single_mount 100:101000:100 200:102000:100 multi1 multi1-alt\n\tsetup_idmap_single_mount 100:102000:100 200:103000:100 multi1-symlink multi1-alt-sym\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-multi1{,-alt{,-sym}}/{foo,bar,baz}.txt\"]'\n\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/foo.txt:0=11=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/bar.txt:1=22=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/baz.txt:2=33=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1-alt/foo.txt:1000=2011=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1-alt/bar.txt:1001=2022=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1-alt/baz.txt:1002=2033=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1-alt-sym/foo.txt:2000=3011=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1-alt-sym/bar.txt:2001=3022=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1-alt-sym/baz.txt:2002=3033=\"* ]]\n}\n\n@test \"same idmap mount (different mappings) [no userns]\" {\n\t# Mount the same directory with different mappings. Make sure we also use\n\t# different mappings for uids and gids.\n\tsetup_idmap_single_mount 100:100000:100 200:100000:100 multi1\n\tsetup_idmap_single_mount 100:101000:100 200:102000:100 multi1 multi1-alt\n\tsetup_idmap_single_mount 100:102000:100 200:103000:100 multi1-symlink multi1-alt-sym\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-multi1{,-alt{,-sym}}/{foo,bar,baz}.txt\"]'\n\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/foo.txt:100000=100011=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/bar.txt:100001=100022=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/baz.txt:100002=100033=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1-alt/foo.txt:101000=102011=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1-alt/bar.txt:101001=102022=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1-alt/baz.txt:101002=102033=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1-alt-sym/foo.txt:102000=103011=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1-alt-sym/bar.txt:102001=103022=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1-alt-sym/baz.txt:102002=103033=\"* ]]\n}\n\n@test \"multiple idmap mounts (different mappings) [userns]\" {\n\tsetup_idmap_userns\n\n\t# Make sure we use different mappings for uids and gids.\n\tsetup_idmap_single_mount 100:101100:3 200:101900:50 multi1\n\tsetup_idmap_single_mount 200:102200:3 200:102900:100 multi2\n\tsetup_idmap_single_mount 5000000:103000:1000 6000000:103000:500 multi3\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-multi[123]/{foo,bar,baz}.txt\"]'\n\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/foo.txt:1100=1911=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/bar.txt:1101=1922=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/baz.txt:1102=1933=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi2/foo.txt:2200=2911=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi2/bar.txt:2201=2922=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi2/baz.txt:2202=2933=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi3/foo.txt:3528=3491=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi3/bar.txt:3133=3337=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi3/baz.txt:3999=3444=\"* ]]\n}\n\n@test \"multiple idmap mounts (different mappings) [no userns]\" {\n\t# Make sure we use different mappings for uids and gids.\n\tsetup_idmap_single_mount 100:1100:3 200:1900:50 multi1\n\tsetup_idmap_single_mount 200:2200:3 200:2900:100 multi2\n\tsetup_idmap_single_mount 5000000:3000:1000 6000000:3000:500 multi3\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-multi[123]/{foo,bar,baz}.txt\"]'\n\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/foo.txt:1100=1911=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/bar.txt:1101=1922=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/baz.txt:1102=1933=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi2/foo.txt:2200=2911=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi2/bar.txt:2201=2922=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi2/baz.txt:2202=2933=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi3/foo.txt:3528=3491=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi3/bar.txt:3133=3337=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi3/baz.txt:3999=3444=\"* ]]\n}\n\n@test \"idmap mount (complicated mapping) [userns]\" {\n\tsetup_idmap_userns\n\n\tupdate_config '.mounts += [\n\t\t\t{\n\t\t\t\t\"source\": \"source-multi1/\",\n\t\t\t\t\"destination\": \"/tmp/mount-multi1\",\n\t\t\t\t\"options\": [\"bind\"],\n\t\t\t\t\"uidMappings\": [\n\t\t\t\t\t{\"containerID\": 100, \"hostID\": 101000, \"size\": 1},\n\t\t\t\t\t{\"containerID\": 101, \"hostID\": 102000, \"size\": 1},\n\t\t\t\t\t{\"containerID\": 102, \"hostID\": 103000, \"size\": 1}\n\t\t\t\t],\n\t\t\t\t\"gidMappings\": [\n\t\t\t\t\t{\"containerID\": 210, \"hostID\": 101100, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 220, \"hostID\": 102200, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 230, \"hostID\": 103300, \"size\": 10}\n\t\t\t\t]\n\t\t\t}\n\t\t]'\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-multi1/{foo,bar,baz}.txt\"]'\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/foo.txt:1000=1101=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/bar.txt:2000=2202=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/baz.txt:3000=3303=\"* ]]\n}\n\n@test \"idmap mount (complicated mapping) [no userns]\" {\n\tupdate_config '.mounts += [\n\t\t\t{\n\t\t\t\t\"source\": \"source-multi1/\",\n\t\t\t\t\"destination\": \"/tmp/mount-multi1\",\n\t\t\t\t\"options\": [\"bind\"],\n\t\t\t\t\"uidMappings\": [\n\t\t\t\t\t{\"containerID\": 100, \"hostID\": 1000, \"size\": 1},\n\t\t\t\t\t{\"containerID\": 101, \"hostID\": 2000, \"size\": 1},\n\t\t\t\t\t{\"containerID\": 102, \"hostID\": 3000, \"size\": 1}\n\t\t\t\t],\n\t\t\t\t\"gidMappings\": [\n\t\t\t\t\t{\"containerID\": 210, \"hostID\": 1100, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 220, \"hostID\": 2200, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 230, \"hostID\": 3300, \"size\": 10}\n\t\t\t\t]\n\t\t\t}\n\t\t]'\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-multi1/{foo,bar,baz}.txt\"]'\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/foo.txt:1000=1101=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/bar.txt:2000=2202=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-multi1/baz.txt:3000=3303=\"* ]]\n}\n\n@test \"idmap mount (non-recursive idmap) [userns]\" {\n\tsetup_idmap_userns\n\n\tsetup_host_bind_mount \"source-multi1/\" \"mnt-subtree/multi1\"\n\tsetup_host_bind_mount \"source-multi2/\" \"mnt-subtree/multi2\"\n\n\tupdate_config '.mounts += [\n\t\t\t{\n\t\t\t\t\"source\": \"mnt-subtree/\",\n\t\t\t\t\"destination\": \"/tmp/mount-tree\",\n\t\t\t\t\"options\": [\"rbind\"],\n\t\t\t\t\"uidMappings\": [\n\t\t\t\t\t{\"containerID\": 100, \"hostID\": 101000, \"size\": 3},\n\t\t\t\t\t{\"containerID\": 200, \"hostID\": 102000, \"size\": 3},\n\t\t\t\t\t{\"containerID\": 300, \"hostID\": 103000, \"size\": 3}\n\t\t\t\t],\n\t\t\t\t\"gidMappings\": [\n\t\t\t\t\t{\"containerID\": 210, \"hostID\": 101100, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 220, \"hostID\": 102200, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 230, \"hostID\": 103300, \"size\": 10}\n\t\t\t\t]\n\t\t\t}\n\t\t]'\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-tree{,/multi1,/multi2}/{foo,bar,baz}.txt\"]'\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/foo.txt:1000=1101=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/bar.txt:2000=2202=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/baz.txt:3000=3303=\"* ]]\n\t# Because we used \"idmap\", the child mounts were not remapped recursively.\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/foo.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/bar.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/baz.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/foo.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/bar.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/baz.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n}\n\n@test \"idmap mount (non-recursive idmap) [no userns]\" {\n\tsetup_host_bind_mount \"source-multi1/\" \"mnt-subtree/multi1\"\n\tsetup_host_bind_mount \"source-multi2/\" \"mnt-subtree/multi2\"\n\n\tupdate_config '.mounts += [\n\t\t\t{\n\t\t\t\t\"source\": \"mnt-subtree/\",\n\t\t\t\t\"destination\": \"/tmp/mount-tree\",\n\t\t\t\t\"options\": [\"rbind\"],\n\t\t\t\t\"uidMappings\": [\n\t\t\t\t\t{\"containerID\": 100, \"hostID\": 101000, \"size\": 3},\n\t\t\t\t\t{\"containerID\": 200, \"hostID\": 102000, \"size\": 3},\n\t\t\t\t\t{\"containerID\": 300, \"hostID\": 103000, \"size\": 3}\n\t\t\t\t],\n\t\t\t\t\"gidMappings\": [\n\t\t\t\t\t{\"containerID\": 210, \"hostID\": 101100, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 220, \"hostID\": 102200, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 230, \"hostID\": 103300, \"size\": 10}\n\t\t\t\t]\n\t\t\t}\n\t\t]'\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-tree{,/multi1,/multi2}/{foo,bar,baz}.txt\"]'\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/foo.txt:101000=101101=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/bar.txt:102000=102202=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/baz.txt:103000=103303=\"* ]]\n\t# Because we used \"idmap\", the child mounts were not remapped recursively.\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/foo.txt:100=211=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/bar.txt:101=222=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/baz.txt:102=233=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/foo.txt:200=211=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/bar.txt:201=222=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/baz.txt:202=233=\"* ]]\n}\n\n@test \"idmap mount (idmap flag) [userns]\" {\n\tsetup_idmap_userns\n\n\tsetup_host_bind_mount \"source-multi1/\" \"mnt-subtree/multi1\"\n\tsetup_host_bind_mount \"source-multi2/\" \"mnt-subtree/multi2\"\n\n\tupdate_config '.mounts += [\n\t\t\t{\n\t\t\t\t\"source\": \"mnt-subtree/\",\n\t\t\t\t\"destination\": \"/tmp/mount-tree\",\n\t\t\t\t\"options\": [\"rbind\", \"idmap\"],\n\t\t\t\t\"uidMappings\": [\n\t\t\t\t\t{\"containerID\": 100, \"hostID\": 101000, \"size\": 3},\n\t\t\t\t\t{\"containerID\": 200, \"hostID\": 102000, \"size\": 3},\n\t\t\t\t\t{\"containerID\": 300, \"hostID\": 103000, \"size\": 3}\n\t\t\t\t],\n\t\t\t\t\"gidMappings\": [\n\t\t\t\t\t{\"containerID\": 210, \"hostID\": 101100, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 220, \"hostID\": 102200, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 230, \"hostID\": 103300, \"size\": 10}\n\t\t\t\t]\n\t\t\t}\n\t\t]'\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-tree{,/multi1,/multi2}/{foo,bar,baz}.txt\"]'\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/foo.txt:1000=1101=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/bar.txt:2000=2202=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/baz.txt:3000=3303=\"* ]]\n\t# Because we used \"idmap\", the child mounts were not remapped recursively.\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/foo.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/bar.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/baz.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/foo.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/bar.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/baz.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n}\n\n@test \"idmap mount (idmap flag) [no userns]\" {\n\tsetup_host_bind_mount \"source-multi1/\" \"mnt-subtree/multi1\"\n\tsetup_host_bind_mount \"source-multi2/\" \"mnt-subtree/multi2\"\n\n\tupdate_config '.mounts += [\n\t\t\t{\n\t\t\t\t\"source\": \"mnt-subtree/\",\n\t\t\t\t\"destination\": \"/tmp/mount-tree\",\n\t\t\t\t\"options\": [\"rbind\", \"idmap\"],\n\t\t\t\t\"uidMappings\": [\n\t\t\t\t\t{\"containerID\": 100, \"hostID\": 101000, \"size\": 3},\n\t\t\t\t\t{\"containerID\": 200, \"hostID\": 102000, \"size\": 3},\n\t\t\t\t\t{\"containerID\": 300, \"hostID\": 103000, \"size\": 3}\n\t\t\t\t],\n\t\t\t\t\"gidMappings\": [\n\t\t\t\t\t{\"containerID\": 210, \"hostID\": 101100, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 220, \"hostID\": 102200, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 230, \"hostID\": 103300, \"size\": 10}\n\t\t\t\t]\n\t\t\t}\n\t\t]'\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-tree{,/multi1,/multi2}/{foo,bar,baz}.txt\"]'\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/foo.txt:101000=101101=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/bar.txt:102000=102202=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/baz.txt:103000=103303=\"* ]]\n\t# Because we used \"idmap\", the child mounts were not remapped recursively.\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/foo.txt:100=211=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/bar.txt:101=222=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/baz.txt:102=233=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/foo.txt:200=211=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/bar.txt:201=222=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/baz.txt:202=233=\"* ]]\n}\n\n@test \"idmap mount (ridmap flag) [userns]\" {\n\tsetup_idmap_userns\n\n\tsetup_host_bind_mount \"source-multi1/\" \"mnt-subtree/multi1\"\n\tsetup_host_bind_mount \"source-multi2/\" \"mnt-subtree/multi2\"\n\n\tupdate_config '.mounts += [\n\t\t\t{\n\t\t\t\t\"source\": \"mnt-subtree/\",\n\t\t\t\t\"destination\": \"/tmp/mount-tree\",\n\t\t\t\t\"options\": [\"rbind\", \"ridmap\"],\n\t\t\t\t\"uidMappings\": [\n\t\t\t\t\t{\"containerID\": 100, \"hostID\": 101000, \"size\": 3},\n\t\t\t\t\t{\"containerID\": 200, \"hostID\": 102000, \"size\": 3},\n\t\t\t\t\t{\"containerID\": 300, \"hostID\": 103000, \"size\": 3}\n\t\t\t\t],\n\t\t\t\t\"gidMappings\": [\n\t\t\t\t\t{\"containerID\": 210, \"hostID\": 101100, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 220, \"hostID\": 102200, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 230, \"hostID\": 103300, \"size\": 10}\n\t\t\t\t]\n\t\t\t}\n\t\t]'\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-tree{,/multi1,/multi2}/{foo,bar,baz}.txt\"]'\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/foo.txt:1000=1101=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/bar.txt:2000=2202=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/baz.txt:3000=3303=\"* ]]\n\t# The child mounts have the same mapping applied.\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/foo.txt:1000=1101=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/bar.txt:1001=2202=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/baz.txt:1002=3303=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/foo.txt:2000=1101=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/bar.txt:2001=2202=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/baz.txt:2002=3303=\"* ]]\n}\n\n@test \"idmap mount (ridmap flag) [no userns]\" {\n\tsetup_host_bind_mount \"source-multi1/\" \"mnt-subtree/multi1\"\n\tsetup_host_bind_mount \"source-multi2/\" \"mnt-subtree/multi2\"\n\n\tupdate_config '.mounts += [\n\t\t\t{\n\t\t\t\t\"source\": \"mnt-subtree/\",\n\t\t\t\t\"destination\": \"/tmp/mount-tree\",\n\t\t\t\t\"options\": [\"rbind\", \"ridmap\"],\n\t\t\t\t\"uidMappings\": [\n\t\t\t\t\t{\"containerID\": 100, \"hostID\": 101000, \"size\": 3},\n\t\t\t\t\t{\"containerID\": 200, \"hostID\": 102000, \"size\": 3},\n\t\t\t\t\t{\"containerID\": 300, \"hostID\": 103000, \"size\": 3}\n\t\t\t\t],\n\t\t\t\t\"gidMappings\": [\n\t\t\t\t\t{\"containerID\": 210, \"hostID\": 101100, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 220, \"hostID\": 102200, \"size\": 10},\n\t\t\t\t\t{\"containerID\": 230, \"hostID\": 103300, \"size\": 10}\n\t\t\t\t]\n\t\t\t}\n\t\t]'\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-tree{,/multi1,/multi2}/{foo,bar,baz}.txt\"]'\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/foo.txt:101000=101101=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/bar.txt:102000=102202=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/baz.txt:103000=103303=\"* ]]\n\t# The child mounts have the same mapping applied.\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/foo.txt:101000=101101=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/bar.txt:101001=102202=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/baz.txt:101002=103303=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/foo.txt:102000=101101=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/bar.txt:102001=102202=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/baz.txt:102002=103303=\"* ]]\n}\n\n@test \"idmap mount (idmap flag, implied mapping) [userns]\" {\n\tsetup_idmap_userns\n\n\tsetup_host_bind_mount \"source-multi1/\" \"mnt-subtree/multi1\"\n\tsetup_host_bind_mount \"source-multi2/\" \"mnt-subtree/multi2\"\n\n\tupdate_config '.mounts += [\n\t\t\t{\n\t\t\t\t\"source\": \"mnt-subtree/\",\n\t\t\t\t\"destination\": \"/tmp/mount-tree\",\n\t\t\t\t\"options\": [\"rbind\", \"idmap\"],\n\t\t\t}\n\t\t]'\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-tree{,/multi1,/multi2}/{foo,bar,baz}.txt\"]'\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/foo.txt:100=211=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/bar.txt:200=222=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/baz.txt:300=233=\"* ]]\n\t# Because we used \"idmap\", the child mounts were not remapped recursively.\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/foo.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/bar.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/baz.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/foo.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/bar.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/baz.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n}\n\n@test \"idmap mount (ridmap flag, implied mapping) [userns]\" {\n\tsetup_idmap_userns\n\n\tsetup_host_bind_mount \"source-multi1/\" \"mnt-subtree/multi1\"\n\tsetup_host_bind_mount \"source-multi2/\" \"mnt-subtree/multi2\"\n\n\tupdate_config '.mounts += [\n\t\t\t{\n\t\t\t\t\"source\": \"mnt-subtree/\",\n\t\t\t\t\"destination\": \"/tmp/mount-tree\",\n\t\t\t\t\"options\": [\"rbind\", \"ridmap\"],\n\t\t\t}\n\t\t]'\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-tree{,/multi1,/multi2}/{foo,bar,baz}.txt\"]'\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/foo.txt:100=211=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/bar.txt:200=222=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/baz.txt:300=233=\"* ]]\n\t# The child mounts have the same mapping applied.\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/foo.txt:100=211=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/bar.txt:101=222=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/baz.txt:102=233=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/foo.txt:200=211=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/bar.txt:201=222=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/baz.txt:202=233=\"* ]]\n}\n\n@test \"idmap mount (idmap flag, implied mapping, userns join) [userns]\" {\n\t# Create a detached container with the id-mapping we want.\n\tcp config.json config.json.bak\n\tupdate_config '.linux.namespaces += [{\"type\": \"user\"}]\n\t\t| .linux.uidMappings += [{\"containerID\": 0, \"hostID\": 100000, \"size\": 65536}]\n\t\t| .linux.gidMappings += [{\"containerID\": 0, \"hostID\": 100000, \"size\": 65536}]'\n\tupdate_config '.process.args = [\"sleep\", \"infinity\"]'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" target_userns\n\t[ \"$status\" -eq 0 ]\n\n\t# Configure our container to attach to the first container's userns.\n\ttarget_pid=\"$(__runc state target_userns | jq .pid)\"\n\tupdate_config '.linux.namespaces |= map(if .type == \"user\" then (.path = \"/proc/'\"$target_pid\"'/ns/\" + .type) else . end)'\n\tupdate_config 'del(.linux.uidMappings) | del(.linux.gidMappings)'\n\n\tsetup_host_bind_mount \"source-multi1/\" \"mnt-subtree/multi1\"\n\tsetup_host_bind_mount \"source-multi2/\" \"mnt-subtree/multi2\"\n\n\tupdate_config '.mounts += [\n\t\t\t{\n\t\t\t\t\"source\": \"mnt-subtree/\",\n\t\t\t\t\"destination\": \"/tmp/mount-tree\",\n\t\t\t\t\"options\": [\"rbind\", \"idmap\"],\n\t\t\t}\n\t\t]'\n\n\tupdate_config '.process.args = [\"bash\", \"-c\", \"stat -c =%n:%u=%g= /tmp/mount-tree{,/multi1,/multi2}/{foo,bar,baz}.txt\"]'\n\trunc run test_debian\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/foo.txt:100=211=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/bar.txt:200=222=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/baz.txt:300=233=\"* ]]\n\t# Because we used \"idmap\", the child mounts were not remapped recursively.\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/foo.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/bar.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi1/baz.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/foo.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/bar.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n\t[[ \"$output\" == *\"=/tmp/mount-tree/multi2/baz.txt:$OVERFLOW_UID=$OVERFLOW_GID=\"* ]]\n}\n"
  },
  {
    "path": "tests/integration/ioprio.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_debian\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"ioprio_set is applied to process group\" {\n\t# Create a container with a specific I/O priority.\n\tupdate_config '.process.ioPriority = {\"class\": \"IOPRIO_CLASS_BE\", \"priority\": 4}'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_ioprio\n\t[ \"$status\" -eq 0 ]\n\n\t# Check the init process.\n\trunc exec test_ioprio ionice -p 1\n\t[ \"$status\" -eq 0 ]\n\t[ \"${lines[0]}\" = 'best-effort: prio 4' ]\n\n\t# Check an exec process, which should derive ioprio from config.json.\n\trunc exec test_ioprio ionice\n\t[ \"$status\" -eq 0 ]\n\t[ \"${lines[0]}\" = 'best-effort: prio 4' ]\n\n\t# Check an exec with a priority taken from process.json,\n\t# which should override the ioprio in config.json.\n\tproc='\n{\n\t\"terminal\": false,\n\t\"ioPriority\": {\n\t\t\"class\": \"IOPRIO_CLASS_IDLE\"\n\t},\n\t\"args\": [ \"/usr/bin/ionice\" ],\n\t\"cwd\": \"/\"\n}'\n\trunc exec --process <(echo \"$proc\") test_ioprio\n\t[ \"$status\" -eq 0 ]\n\t[ \"${lines[0]}\" = 'idle' ]\n}\n"
  },
  {
    "path": "tests/integration/kill.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n# This needs to be placed at the top of the bats file to work around\n# a shellcheck bug. See <https://github.com/koalaman/shellcheck/issues/2873>.\ntest_host_pidns_kill() {\n\trequires cgroups_freezer\n\n\tupdate_config '\t  .linux.namespaces -= [{\"type\": \"pid\"}]'\n\tset_cgroups_path\n\tif [ $EUID -ne 0 ]; then\n\t\trequires rootless_cgroup\n\t\t# Can't mount real /proc when rootless + no pidns,\n\t\t# so change it to a bind-mounted one from the host.\n\t\tupdate_config '\t  .mounts |= map((select(.type == \"proc\")\n\t\t\t\t\t| .type = \"none\"\n\t\t\t\t\t| .source = \"/proc\"\n\t\t\t\t\t| .options = [\"rbind\", \"nosuid\", \"nodev\", \"noexec\"]\n\t\t\t\t  ) // .)'\n\tfi\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\tcgpath=$(get_cgroup_path \"pids\")\n\tinit_pid=$(cat \"$cgpath\"/cgroup.procs)\n\n\t# Start a few more processes.\n\tfor _ in 1 2 3 4 5; do\n\t\t__runc exec -d test_busybox sleep 1h\n\tdone\n\n\tif [ -v KILL_INIT ]; then\n\t\t# Now kill the container's init process. Since the container do\n\t\t# not have own PID ns, its init is no special and the container\n\t\t# will still be up and running (except for rootless container\n\t\t# AND systemd cgroup driver AND systemd > v245, when systemd\n\t\t# kills the container; see \"kill KILL [host pidns + init gone]\"\n\t\t# below).\n\t\tkill -9 \"$init_pid\"\n\t\twait_pids_gone 10 0.2 \"$init_pid\"\n\tfi\n\n\t# Get the list of all container processes.\n\tmapfile -t pids < <(cat \"$cgpath\"/cgroup.procs)\n\techo \"pids:\" \"${pids[@]}\"\n\t# Sanity check -- make sure all processes exist.\n\tfor p in \"${pids[@]}\"; do\n\t\tkill -0 \"$p\"\n\tdone\n\n\trunc kill test_busybox KILL\n\t[ \"$status\" -eq 0 ]\n\t# Wait and check that all processes are gone.\n\twait_pids_gone 10 0.2 \"${pids[@]}\"\n\n\t# Make sure the container is in stopped state. Note if KILL_INIT\n\t# is set, container was already stopped by killing its $init_pid\n\t# and so this check is NOP/redundant.\n\ttestcontainer test_busybox stopped\n\n\t# Make sure cgroup.procs is empty.\n\tmapfile -t pids < <(cat \"$cgpath\"/cgroup.procs || true)\n\tif [ ${#pids[@]} -gt 0 ]; then\n\t\techo \"expected empty cgroup.procs, got:\" \"${pids[@]}\" 1>&2\n\t\treturn 1\n\tfi\n}\n\n@test \"kill detached busybox\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\trunc kill test_busybox KILL\n\t[ \"$status\" -eq 0 ]\n\twait_for_container 10 1 test_busybox stopped\n\n\t# Check that kill errors on a stopped container.\n\trunc kill test_busybox 0\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"container not running\"* ]]\n\n\t# Check that -a (now obsoleted) makes kill return no error for a stopped container.\n\trunc kill -a test_busybox 0\n\t[ \"$status\" -eq 0 ]\n\n\trunc delete test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n# This is roughly the same as TestPIDHostInitProcessWait in libcontainer/integration.\n# The differences are:\n#\n# 1. Here we use separate processes to create and to kill a container, so the\n#    processes inside a container are not children of \"runc kill\".\n#\n# 2. We hit different codepaths (nonChildProcess.signal rather than initProcess.signal).\n@test \"kill KILL [host pidns]\" {\n\tunset KILL_INIT\n\ttest_host_pidns_kill\n}\n\n# Same as above plus:\n#\n# 3. Test runc kill on a container whose init process is gone.\n#\n# Issue 4047, case \"runc kill\".\n# See also: \"runc delete --force [host pidns + init gone]\" test in delete.bats.\n@test \"kill KILL [host pidns + init gone]\" {\n\t# Apparently, for rootless test, when using systemd cgroup manager,\n\t# newer versions of systemd clean up the container as soon as its init\n\t# process is gone. This is all fine and dandy, except it prevents us to\n\t# test this case, thus we skip the test.\n\t#\n\t# It is not entirely clear which systemd version got this feature:\n\t# v245 works fine, and v249 does not.\n\tif [ $EUID -ne 0 ] && [ -v RUNC_USE_SYSTEMD ] && [ \"$(systemd_version)\" -gt 245 ]; then\n\t\tskip \"rootless+systemd conflicts with systemd > 245\"\n\tfi\n\tKILL_INIT=1\n\ttest_host_pidns_kill\n\tunset KILL_INIT\n}\n\n# https://github.com/opencontainers/runc/issues/4394 (cgroup v1, rootless)\n@test \"kill KILL [shared pidns]\" {\n\tupdate_config '.process.args = [\"sleep\", \"infinity\"]'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" target_ctr\n\t[ \"$status\" -eq 0 ]\n\ttestcontainer target_ctr running\n\ttarget_pid=\"$(__runc state target_ctr | jq .pid)\"\n\tupdate_config '.linux.namespaces |= map(if .type == \"user\" or .type == \"pid\" then (.path = \"/proc/'\"$target_pid\"'/ns/\" + .type) else . end) | del(.linux.uidMappings) | del(.linux.gidMappings)'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" attached_ctr\n\t[ \"$status\" -eq 0 ]\n\ttestcontainer attached_ctr running\n\n\trunc kill attached_ctr 9\n\t[ \"$status\" -eq 0 ]\n\n\trunc delete --force attached_ctr\n\t[ \"$status\" -eq 0 ]\n\n\trunc delete --force target_ctr\n\t[ \"$status\" -eq 0 ]\n}\n"
  },
  {
    "path": "tests/integration/list.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n\tALT_ROOT=\"$ROOT/alt\"\n\tmkdir -p \"$ALT_ROOT/state\"\n}\n\nfunction teardown() {\n\tROOT=\"$ALT_ROOT\" teardown_bundle\n\tunset ALT_ROOT\n\tteardown_bundle\n}\n\n@test \"list\" {\n\tbundle=$(pwd)\n\tROOT=$ALT_ROOT runc run -d --console-socket \"$CONSOLE_SOCKET\" test_box1\n\t[ \"$status\" -eq 0 ]\n\n\tROOT=$ALT_ROOT runc run -d --console-socket \"$CONSOLE_SOCKET\" test_box2\n\t[ \"$status\" -eq 0 ]\n\n\tROOT=$ALT_ROOT runc run -d --console-socket \"$CONSOLE_SOCKET\" test_box3\n\t[ \"$status\" -eq 0 ]\n\n\tROOT=$ALT_ROOT runc list\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} =~ ID\\ +PID\\ +STATUS\\ +BUNDLE\\ +CREATED+ ]]\n\t[[ \"${lines[1]}\" == *\"test_box1\"*[0-9]*\"running\"*$bundle*[0-9]* ]]\n\t[[ \"${lines[2]}\" == *\"test_box2\"*[0-9]*\"running\"*$bundle*[0-9]* ]]\n\t[[ \"${lines[3]}\" == *\"test_box3\"*[0-9]*\"running\"*$bundle*[0-9]* ]]\n\n\tROOT=$ALT_ROOT runc list -q\n\t[ \"$status\" -eq 0 ]\n\t[ \"${lines[0]}\" = \"test_box1\" ]\n\t[ \"${lines[1]}\" = \"test_box2\" ]\n\t[ \"${lines[2]}\" = \"test_box3\" ]\n\n\tROOT=$ALT_ROOT runc list --format table\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} =~ ID\\ +PID\\ +STATUS\\ +BUNDLE\\ +CREATED+ ]]\n\t[[ \"${lines[1]}\" == *\"test_box1\"*[0-9]*\"running\"*$bundle*[0-9]* ]]\n\t[[ \"${lines[2]}\" == *\"test_box2\"*[0-9]*\"running\"*$bundle*[0-9]* ]]\n\t[[ \"${lines[3]}\" == *\"test_box3\"*[0-9]*\"running\"*$bundle*[0-9]* ]]\n\n\tROOT=$ALT_ROOT runc list --format json\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == [\\[][\\{]\"\\\"ociVersion\\\"\"[:]\"\\\"\"*[0-9][\\.]*[0-9][\\.]*[0-9]*\"\\\"\"[,]\"\\\"id\\\"\"[:]\"\\\"test_box1\\\"\"[,]\"\\\"pid\\\"\"[:]*[0-9][,]\"\\\"status\\\"\"[:]*\"\\\"running\\\"\"[,]\"\\\"bundle\\\"\"[:]*$bundle*[,]\"\\\"rootfs\\\"\"[:]\"\\\"\"*\"\\\"\"[,]\"\\\"created\\\"\"[:]*[0-9]*[\\}]* ]]\n\t[[ \"${lines[0]}\" == *[,][\\{]\"\\\"ociVersion\\\"\"[:]\"\\\"\"*[0-9][\\.]*[0-9][\\.]*[0-9]*\"\\\"\"[,]\"\\\"id\\\"\"[:]\"\\\"test_box2\\\"\"[,]\"\\\"pid\\\"\"[:]*[0-9][,]\"\\\"status\\\"\"[:]*\"\\\"running\\\"\"[,]\"\\\"bundle\\\"\"[:]*$bundle*[,]\"\\\"rootfs\\\"\"[:]\"\\\"\"*\"\\\"\"[,]\"\\\"created\\\"\"[:]*[0-9]*[\\}]* ]]\n\t[[ \"${lines[0]}\" == *[,][\\{]\"\\\"ociVersion\\\"\"[:]\"\\\"\"*[0-9][\\.]*[0-9][\\.]*[0-9]*\"\\\"\"[,]\"\\\"id\\\"\"[:]\"\\\"test_box3\\\"\"[,]\"\\\"pid\\\"\"[:]*[0-9][,]\"\\\"status\\\"\"[:]*\"\\\"running\\\"\"[,]\"\\\"bundle\\\"\"[:]*$bundle*[,]\"\\\"rootfs\\\"\"[:]\"\\\"\"*\"\\\"\"[,]\"\\\"created\\\"\"[:]*[0-9]*[\\}][\\]] ]]\n}\n"
  },
  {
    "path": "tests/integration/mask.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n\n\t# Create fake rootfs.\n\tmkdir rootfs/testdir\n\techo \"Forbidden information!\" >rootfs/testfile\n\n\t# add extra masked paths\n\tupdate_config '(.. | select(.maskedPaths? != null)) .maskedPaths += [\"/testdir\", \"/testfile\"]'\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"mask paths [file]\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_busybox cat /testfile\n\t[ \"$status\" -eq 0 ]\n\t[ -z \"$output\" ]\n\n\trunc exec test_busybox rm -f /testfile\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *\"Read-only file system\"* ]]\n\n\trunc exec test_busybox umount /testfile\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *\"Operation not permitted\"* ]]\n}\n\n@test \"mask paths [directory]\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_busybox ls /testdir\n\t[ \"$status\" -eq 0 ]\n\t[ -z \"$output\" ]\n\n\trunc exec test_busybox touch /testdir/foo\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *\"Read-only file system\"* ]]\n\n\trunc exec test_busybox rm -rf /testdir\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *\"Read-only file system\"* ]]\n\n\trunc exec test_busybox umount /testdir\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *\"Operation not permitted\"* ]]\n}\n\n@test \"mask paths [prohibit symlink /proc]\" {\n\tln -s /symlink rootfs/proc\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *\"must be mounted on ordinary directory\"* ]]\n}\n\n@test \"mask paths [prohibit symlink /sys]\" {\n\t# In rootless containers, /sys is a bind mount not a real sysfs.\n\trequires root\n\n\tln -s /symlink rootfs/sys\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 1 ]\n\t# On cgroup v1, this may fail before checking if /sys is a symlink,\n\t# so we merely check that it fails, and do not check the exact error\n\t# message like for /proc above.\n}\n"
  },
  {
    "path": "tests/integration/memorypolicy.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc run memory policy interleave without flags\" {\n\tupdate_config '\n\t.process.args = [\"/bin/sh\", \"-c\", \"head -n 1 /proc/self/numa_maps | cut -d \\\" \\\" -f 2\"]\n\t| .linux.memoryPolicy = {\n\t\t\"mode\": \"MPOL_INTERLEAVE\",\n\t\t\"nodes\": \"0\"\n\t}'\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == \"interleave:0\" ]]\n}\n\n@test \"runc run memory policy bind static\" {\n\tupdate_config '\n\t.process.args = [\"/bin/sh\", \"-c\", \"head -n 1 /proc/self/numa_maps | cut -d \\\" \\\" -f 2\"]\n\t| .linux.memoryPolicy = {\n\t\t\"mode\": \"MPOL_BIND\",\n\t\t\"nodes\": \"0\",\n\t\t\"flags\": [\"MPOL_F_STATIC_NODES\"]\n\t}'\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == \"bind\"*\"static\"*\"0\" ]]\n}\n\n@test \"runc run and exec memory policy prefer relative\" {\n\tupdate_config '\n\t.linux.memoryPolicy = {\n\t\t\"mode\": \"MPOL_PREFERRED\",\n\t\t\"nodes\": \"0\",\n\t\t\"flags\": [\"MPOL_F_RELATIVE_NODES\"]\n\t}'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_busybox /bin/sh -c \"head -n 1 /proc/self/numa_maps | cut -d \\\" \\\" -f 2\"\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == \"prefer\"*\"relative\"*\"0\" ]]\n}\n\n@test \"runc run empty memory policy\" {\n\tupdate_config '\n\t.process.args = [\"/bin/sh\", \"-c\", \"head -n 1 /proc/self/numa_maps | cut -d \\\" \\\" -f 2\"]\n\t| .linux.memoryPolicy = {\n\t}'\n\trunc run test_busybox\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${lines[0]}\" == *\"invalid memory policy\"* ]]\n}\n\n@test \"runc run memory policy with non-existing mode\" {\n\tupdate_config '\n\t.process.args = [\"/bin/sh\", \"-c\", \"head -n 1 /proc/self/numa_maps | cut -d \\\" \\\" -f 2\"]\n\t| .linux.memoryPolicy = {\n\t\t\"mode\": \"INTERLEAVE\",\n\t\t\"nodes\": \"0\"\n\t}'\n\trunc run test_busybox\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${lines[0]}\" == *\"invalid memory policy\"* ]]\n}\n\n@test \"runc run memory policy with invalid flag\" {\n\tupdate_config '\n\t.process.args = [\"/bin/sh\", \"-c\", \"head -n 1 /proc/self/numa_maps | cut -d \\\" \\\" -f 2\"]\n\t| .linux.memoryPolicy = {\n\t\t\"mode\": \"MPOL_PREFERRED\",\n\t\t\"nodes\": \"0\",\n\t\t\"flags\": [\"MPOL_F_RELATIVE_NODES\", \"badflag\"]\n\t}'\n\trunc run test_busybox\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${lines[0]}\" == *\"invalid memory policy flag\"* ]]\n}\n\n@test \"runc run memory policy default with missing nodes\" {\n\tupdate_config '\n\t.process.args = [\"/bin/sh\", \"-c\", \"head -n 1 /proc/self/numa_maps | cut -d \\\" \\\" -f 2\"]\n\t| .linux.memoryPolicy = {\n\t\t\"mode\": \"MPOL_DEFAULT\"\n\t}'\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == *\"default\"* ]]\n}\n\n@test \"runc run memory policy with missing mode\" {\n\tupdate_config '\n\t.process.args = [\"/bin/sh\", \"-c\", \"head -n 1 /proc/self/numa_maps | cut -d \\\" \\\" -f 2\"]\n\t| .linux.memoryPolicy = {\n\t\t\"nodes\": \"0-7\"\n\t}'\n\trunc run test_busybox\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${lines[0]}\" == *\"invalid memory policy mode\"* ]]\n}\n\n@test \"runc run memory policy calls syscall with invalid arguments\" {\n\tupdate_config '\n\t.process.args = [\"/bin/sh\", \"-c\", \"head -n 1 /proc/self/numa_maps | cut -d \\\" \\\" -f 2\"]\n\t| .linux.memoryPolicy = {\n\t\t\"mode\": \"MPOL_DEFAULT\",\n\t\t\"nodes\": \"0-7\",\n\t}'\n\trunc run test_busybox\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${lines[*]}\" == *\"mode requires 0 nodes but got 8\"* ]]\n}\n\n@test \"runc run memory policy bind way too large a node number\" {\n\tupdate_config '\n\t.process.args = [\"/bin/sh\", \"-c\", \"head -n 1 /proc/self/numa_maps | cut -d \\\" \\\" -f 2\"]\n\t| .linux.memoryPolicy = {\n\t\t\"mode\": \"MPOL_BIND\",\n\t\t\"nodes\": \"0-9876543210\",\n\t\t\"flags\": []\n\t}'\n\trunc run test_busybox\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${lines[0]}\" == *\"invalid memory policy node\"* ]]\n}\n"
  },
  {
    "path": "tests/integration/mounts.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n# https://github.com/opencontainers/runc/security/advisories/GHSA-m8cg-xc2p-r3fc\n#\n# This needs to be placed at the top of the bats file to work around\n# a shellcheck bug. See <https://github.com/koalaman/shellcheck/issues/2873>.\nfunction test_ro_cgroup_mount() {\n\tlocal lines status\n\t# shellcheck disable=SC2016\n\tupdate_config '.process.args |= [\"sh\", \"-euc\", \"for f in `grep /sys/fs/cgroup /proc/mounts | awk \\\"{print \\\\\\\\$2}\\\"| uniq`; do test -e $f && grep -w $f /proc/mounts | tail -n1; done\"]'\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[ \"${#lines[@]}\" -ne 0 ]\n\tfor line in \"${lines[@]}\"; do [[ \"${line}\" == *'ro,'* ]]; done\n}\n\n# Parse an \"optstring\" of the form foo,bar into $is_foo and $is_bar variables.\n# Usage: parse_optstring foo,bar foo bar baz\nfunction parse_optstring() {\n\toptstring=\"$1\"\n\tshift\n\n\tfor flag in \"$@\"; do\n\t\tis_set=\n\t\tif grep -wq \"$flag\" <<<\"$optstring\"; then\n\t\t\tis_set=1\n\t\tfi\n\t\teval \"is_$flag=$is_set\"\n\tdone\n}\n\nfunction config_add_bind_mount() {\n\tsrc=\"$1\"\n\tdst=\"$2\"\n\tparse_optstring \"${3:-}\" rbind idmap\n\n\tbindtype=bind\n\tif [ -n \"$is_rbind\" ]; then\n\t\tbindtype=rbind\n\tfi\n\n\tmappings=\"\"\n\tif [ -n \"$is_idmap\" ]; then\n\t\tmappings='\n\t\t\t\"uidMappings\": [{\"containerID\": 0, \"hostID\": 100000, \"size\": 65536}],\n\t\t\t\"gidMappings\": [{\"containerID\": 0, \"hostID\": 100000, \"size\": 65536}],\n\t\t'\n\tfi\n\n\tupdate_config '.mounts += [{\n\t\t\"source\": \"'\"$src\"'\",\n\t\t\"destination\": \"'\"$dst\"'\",\n\t\t\"type\": \"bind\",\n\t\t'\"$mappings\"'\n\t\t\"options\": [ \"'\"$bindtype\"'\", \"rprivate\" ]\n\t}]'\n}\n\n# This needs to be placed at the top of the bats file to work around\n# a shellcheck bug. See <https://github.com/koalaman/shellcheck/issues/2873>.\nfunction test_mount_order() {\n\tparse_optstring \"${1:-}\" userns idmap\n\n\tif [ -n \"$is_userns\" ]; then\n\t\trequires root\n\n\t\tupdate_config '.linux.namespaces += [{\"type\": \"user\"}]\n\t\t\t| .linux.uidMappings += [{\"containerID\": 0, \"hostID\": 100000, \"size\": 65536}]\n\t\t\t| .linux.gidMappings += [{\"containerID\": 0, \"hostID\": 100000, \"size\": 65536}]'\n\t\tremap_rootfs\n\tfi\n\n\tctr_src_opts=\"rbind\"\n\tif [ -n \"$is_idmap\" ]; then\n\t\trequires root\n\t\trequires_kernel 5.12\n\t\trequires_idmap_fs .\n\n\t\tctr_src_opts+=\",idmap\"\n\tfi\n\n\tmkdir -p rootfs/{mnt,final}\n\t# Create a set of directories we can create a mount tree with.\n\tfor subdir in a/x b/y c/z; do\n\t\tdir=\"bind-src/$subdir\"\n\t\tmkdir -p \"$dir\"\n\t\techo \"$subdir\" >\"$dir/file\"\n\t\t# Add a symlink to make sure\n\t\ttopdir=\"$(dirname \"$subdir\")\"\n\t\tln -s \"$topdir\" \"bind-src/sym-$topdir\"\n\tdone\n\t# In userns tests, make sure that the source directory cannot be accessed,\n\t# to make sure we're exercising the bind-mount source fd logic.\n\tchmod o-rwx bind-src\n\n\trootfs=\"$(pwd)/rootfs\"\n\trm -rf rootfs/mnt\n\tmkdir rootfs/mnt\n\n\t# Create a bind-mount tree.\n\tconfig_add_bind_mount \"$PWD/bind-src/a\" \"/mnt\"\n\tconfig_add_bind_mount \"$PWD/bind-src/sym-b\" \"/mnt/x\"\n\tconfig_add_bind_mount \"$PWD/bind-src/c\" \"/mnt/x/y\"\n\tconfig_add_bind_mount \"$PWD/bind-src/sym-a\" \"/mnt/x/y/z\"\n\t# Create a recursive bind-mount that uses part of the current tree in the\n\t# container.\n\tconfig_add_bind_mount \"$rootfs/mnt/x\" \"$rootfs/mnt/x/y/z/x\" \"$ctr_src_opts\"\n\tconfig_add_bind_mount \"$rootfs/mnt/x/y\" \"$rootfs/mnt/x/y/z\" \"$ctr_src_opts\"\n\t# Finally, bind-mount the whole thing on top of /final.\n\tconfig_add_bind_mount \"$rootfs/mnt\" \"$rootfs/final\" \"$ctr_src_opts\"\n\n\t# Check that the entire tree was copied and the mounts were done in the\n\t# expected order.\n\tupdate_config '.process.args = [\"cat\", \"/final/x/y/z/z/x/y/z/x/file\"]'\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"a/x\"* ]] # the final \"file\" was from a/x.\n}\n\n# This needs to be placed at the top of the bats file to work around\n# a shellcheck bug. See <https://github.com/koalaman/shellcheck/issues/2873>.\ntest_mount_target() {\n\tsrc=\"$1\"\n\tdst=\"$2\"\n\treal_dst=\"${3:-$dst}\"\n\n\techo \"== $src -> $dst (=> $real_dst) ==\"\n\n\told_config=\"$(mktemp ./config.json.bak.XXXXXX)\"\n\tcp ./config.json \"$old_config\"\n\n\tupdate_config '.mounts += [{\n\t\tsource: \"'\"$src\"'\",\n\t\tdestination: \"'\"$dst\"'\",\n\t\toptions: [\"bind\"]\n\t}]'\n\n\t# Make sure the target path is at the right spot and is actually a\n\t# bind-mount of the correct inode.\n\tupdate_config '.process.args = [\"stat\", \"-c\", \"%n %d:%i\", \"--\", \"'\"$real_dst\"'\"]'\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == \"$real_dst $(stat -c \"%d:%i\" -- \"$src\")\" ]]\n\n\t# Make sure there is a mount entry for the target path.\n\t# shellcheck disable=SC2016\n\tupdate_config '.process.args = [\"awk\", \"-F\", \"PATH='\"$real_dst\"'\", \"$2 == PATH\", \"/proc/self/mounts\"]'\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"$real_dst\"* ]]\n\n\t# Switch back the old config so this function can be called multiple times.\n\tmv \"$old_config\" \"./config.json\"\n}\n\n# https://github.com/opencontainers/runc/issues/3991\n@test \"runc run [tmpcopyup]\" {\n\tmkdir -p rootfs/dir1/dir2\n\tchmod 777 rootfs/dir1/dir2\n\tupdate_config '\t  .mounts += [{\n\t\t\t\t\tsource: \"tmpfs\",\n\t\t\t\t\tdestination: \"/dir1\",\n\t\t\t\t\ttype: \"tmpfs\",\n\t\t\t\t\toptions: [\"tmpcopyup\"]\n\t\t\t\t}]\n\t\t\t| .process.args |= [\"ls\", \"-ld\", \"/dir1/dir2\"]'\n\n\tumask 022\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == *'drwxrwxrwx'* ]]\n}\n\n@test \"runc run [bind mount]\" {\n\tupdate_config '\t  .mounts += [{\n\t\t\t\t\tsource: \".\",\n\t\t\t\t\tdestination: \"/tmp/bind\",\n\t\t\t\t\toptions: [\"bind\"]\n\t\t\t\t}]\n\t\t\t| .process.args |= [\"ls\", \"/tmp/bind/config.json\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == *'/tmp/bind/config.json'* ]]\n}\n\n# https://github.com/opencontainers/runc/issues/2246\n@test \"runc run [ro tmpfs mount]\" {\n\tupdate_config '\t  .mounts += [{\n\t\t\t\t\tsource: \"tmpfs\",\n\t\t\t\t\tdestination: \"/mnt\",\n\t\t\t\t\ttype: \"tmpfs\",\n\t\t\t\t\toptions: [\"ro\", \"nodev\", \"nosuid\", \"mode=755\"]\n\t\t\t\t}]\n\t\t\t| .process.args |= [\"grep\", \"^tmpfs /mnt\", \"/proc/mounts\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == *'ro,'* ]]\n}\n\n# https://github.com/opencontainers/runc/issues/3248\n@test \"runc run [ro /dev mount]\" {\n\tupdate_config '   .mounts |= map((select(.destination == \"/dev\") | .options += [\"ro\"]) // .)\n\t\t\t| .process.args |= [\"grep\", \"^tmpfs /dev\", \"/proc/mounts\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == *'ro,'* ]]\n}\n\n# https://github.com/opencontainers/runc/issues/2683\n@test \"runc run [tmpfs mount with absolute symlink]\" {\n\t# in container, /conf -> /real/conf\n\tmkdir -p rootfs/real/conf\n\tln -s /real/conf rootfs/conf\n\tupdate_config '\t  .mounts += [{\n\t\t\t\t\ttype: \"tmpfs\",\n\t\t\t\t\tsource: \"tmpfs\",\n\t\t\t\t\tdestination: \"/conf/stack\",\n\t\t\t\t\toptions: [\"ro\", \"nodev\", \"nosuid\"]\n\t\t\t\t}]\n\t\t\t| .process.args |= [\"true\"]'\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n# CVE-2023-27561 CVE-2019-19921\n@test \"runc run [/proc is a symlink]\" {\n\t# Make /proc in the container a symlink.\n\trm -rf rootfs/proc\n\tmkdir -p rootfs/bad-proc\n\tln -sf /bad-proc rootfs/proc\n\t# This should fail.\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"must be mounted on ordinary directory\"* ]]\n}\n\n# https://github.com/opencontainers/runc/issues/4401\n@test \"runc run [setgid / + mkdirall]\" {\n\tmkdir rootfs/setgid\n\tchmod '=7755' rootfs/setgid\n\n\tupdate_config '.mounts += [{\n\t\ttype: \"tmpfs\",\n\t\tsource: \"tmpfs\",\n\t\tdestination: \"/setgid/a/b/c\",\n\t\toptions: [\"ro\", \"nodev\", \"nosuid\"]\n\t}]'\n\tupdate_config '.process.args |= [\"true\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# Verify that the setgid bit is inherited.\n\t[[ \"$(stat -c %a rootfs/setgid)\" == 7755 ]]\n\t[[ \"$(stat -c %a rootfs/setgid/a)\" == 2755 ]]\n\t[[ \"$(stat -c %a rootfs/setgid/a/b)\" == 2755 ]]\n\t[[ \"$(stat -c %a rootfs/setgid/a/b/c)\" == 2755 ]]\n}\n\n# https://github.com/opencontainers/runc/issues/4971\n@test \"runc run [tmpfs mount mode= inherit]\" {\n\tmkdir rootfs/tmpfs\n\tchmod \"=0710\" rootfs/tmpfs\n\n\tupdate_config '.mounts += [{\n\t\ttype: \"tmpfs\",\n\t\tsource: \"tmpfs\",\n\t\tdestination: \"/tmpfs\",\n\t\toptions: [\"rw\", \"nodev\", \"nosuid\"]\n\t}]'\n\tupdate_config '.process.args = [\"stat\", \"-c\", \"%a\", \"/tmpfs\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == \"710\" ]]\n\n\tupdate_config '.process.args = [\"cat\", \"/proc/self/mounts\"]'\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\tgrep -Ex \"tmpfs /tmpfs tmpfs [^ ]*\\bmode=710\\b[^ ]* .*\" <<<\"$output\"\n}\n\n# https://github.com/opencontainers/runc/issues/4971\n@test \"runc run [tmpfs mount explicit mode=]\" {\n\tmkdir rootfs/tmpfs\n\tchmod \"=0710\" rootfs/tmpfs\n\n\tupdate_config '.mounts += [{\n\t\ttype: \"tmpfs\",\n\t\tsource: \"tmpfs\",\n\t\tdestination: \"/tmpfs\",\n\t\toptions: [\"rw\", \"nodev\", \"nosuid\", \"mode=1500\"]\n\t}]'\n\tupdate_config '.process.args = [\"stat\", \"-c\", \"%a\", \"/tmpfs\"]'\n\n\t# Explicitly setting mode= overrides whatever mode we would've inherited.\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == \"1500\" ]]\n\n\tupdate_config '.process.args = [\"cat\", \"/proc/self/mounts\"]'\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\tgrep -Ex \"tmpfs /tmpfs tmpfs [^ ]*\\bmode=1500\\b[^ ]* .*\" <<<\"$output\"\n\n\t# Verify that the actual directory was not chmod-ed.\n\t[[ \"$(stat -c %a rootfs/tmpfs)\" == 710 ]]\n}\n\n# https://github.com/opencontainers/runc/issues/4971\n@test \"runc run [tmpfs mount mode=1777 default]\" {\n\tupdate_config '.mounts += [{\n\t\ttype: \"tmpfs\",\n\t\tsource: \"tmpfs\",\n\t\tdestination: \"/non-existent/foo/bar/baz\",\n\t\toptions: [\"rw\", \"nodev\", \"nosuid\"]\n\t}]'\n\tupdate_config '.process.args = [\"stat\", \"-c\", \"%a\", \"/non-existent/foo/bar/baz\"]'\n\n\trm -rf rootfs/non-existent\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == \"1777\" ]]\n\n\tupdate_config '.process.args = [\"cat\", \"/proc/self/mounts\"]'\n\n\trm -rf rootfs/non-existent\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t# We don't explicitly set a mode= in this case, it is just the tmpfs default.\n\tgrep -Ex \"tmpfs /non-existent/foo/bar/baz tmpfs .*\" <<<\"$output\"\n\trun ! grep -Ex \"tmpfs /non-existent/foo/bar/baz tmpfs [^ ]*\\bmode=[0-7]+\\b[^ ]* .*\" <<<\"$output\"\n\n\t# Verify that the actual modes are *not* 1777.\n\t[[ \"$(stat -c %a rootfs/non-existent)\" == 755 ]]\n\t[[ \"$(stat -c %a rootfs/non-existent/foo)\" == 755 ]]\n\t[[ \"$(stat -c %a rootfs/non-existent/foo/bar)\" == 755 ]]\n\t[[ \"$(stat -c %a rootfs/non-existent/foo/bar/baz)\" == 755 ]]\n}\n\n@test \"runc run [ro /sys/fs/cgroup mounts]\" {\n\t# Without cgroup namespace.\n\tupdate_config '.linux.namespaces -= [{\"type\": \"cgroup\"}]'\n\ttest_ro_cgroup_mount\n}\n\n@test \"runc run [ro /sys/fs/cgroup mounts + cgroupns]\" {\n\trequires cgroupns\n\t# With cgroup namespace.\n\tupdate_config '.linux.namespaces |= if index({\"type\": \"cgroup\"}) then . else . + [{\"type\": \"cgroup\"}] end'\n\ttest_ro_cgroup_mount\n}\n\n@test \"runc run [mount order, container bind-mount source]\" {\n\ttest_mount_order\n}\n\n@test \"runc run [mount order, container bind-mount source] (userns)\" {\n\ttest_mount_order userns\n}\n\n@test \"runc run [mount order, container idmap source]\" {\n\ttest_mount_order idmap\n}\n\n@test \"runc run [mount order, container idmap source] (userns)\" {\n\ttest_mount_order userns,idmap\n}\n\n@test \"runc run [bind mount through a dangling symlink component]\" {\n\trm -rf rootfs/etc/hosts\n\tln -s /tmp/foo/bar rootfs/jump\n\tln -s /jump/baz/hosts rootfs/etc/hosts\n\n\trm -rf rootfs/tmp/foo\n\ttest_mount_target ./config.json /etc/hosts /tmp/foo/bar/baz/hosts\n}\n\n@test \"runc run [bind mount through a trailing dangling symlink]\" {\n\trm -rf rootfs/etc/hosts\n\tln -s /tmp/hosts rootfs/etc/hosts\n\n\t# File.\n\trm -rf rootfs/tmp/hosts\n\ttest_mount_target ./config.json /etc/hosts /tmp/hosts\n\n\t# Directory.\n\trm -rf rootfs/tmp/hosts\n\ttest_mount_target . /etc/hosts /tmp/hosts\n}\n"
  },
  {
    "path": "tests/integration/mounts_propagation.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\trequires root\n\tsetup_debian\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc run [rootfsPropagation shared]\" {\n\tupdate_config ' .linux.rootfsPropagation = \"shared\" '\n\n\tupdate_config ' .process.args = [\"findmnt\", \"--noheadings\", \"-o\", \"PROPAGATION\", \"/\"] '\n\n\trunc run test_shared_rootfs\n\t[ \"$status\" -eq 0 ]\n\t[ \"$output\" = \"shared\" ]\n}\n"
  },
  {
    "path": "tests/integration/mounts_recursive.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nTESTVOLUME=\"${BATS_RUN_TMPDIR}/mounts_recursive\"\n\nfunction setup_volume() {\n\t# requires root (in the current user namespace) to mount tmpfs outside runc\n\trequires root\n\n\tmkdir -p \"${TESTVOLUME}\"\n\tmount -t tmpfs none \"${TESTVOLUME}\"\n\techo \"foo\" >\"${TESTVOLUME}/foo\"\n\n\tmkdir \"${TESTVOLUME}/subvol\"\n\tmount -t tmpfs none \"${TESTVOLUME}/subvol\"\n\techo \"bar\" >\"${TESTVOLUME}/subvol/bar\"\n}\n\nfunction teardown_volume() {\n\tumount -R \"${TESTVOLUME}\"\n}\n\nfunction setup() {\n\tsetup_volume\n\tsetup_debian\n}\n\nfunction teardown() {\n\tteardown_volume\n\tteardown_bundle\n}\n\n@test \"runc run [rbind,ro mount is read-only but not recursively]\" {\n\tupdate_config \".mounts += [{source: \\\"${TESTVOLUME}\\\" , destination: \\\"/mnt\\\", options: [\\\"rbind\\\",\\\"ro\\\"]}]\"\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_rbind_ro\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_rbind_ro touch /mnt/foo\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *\"Read-only file system\"* ]]\n\n\trunc exec test_rbind_ro touch /mnt/subvol/bar\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc run [rbind,rro mount is recursively read-only]\" {\n\trequires_kernel 5.12\n\tupdate_config \".mounts += [{source: \\\"${TESTVOLUME}\\\" , destination: \\\"/mnt\\\", options: [\\\"rbind\\\",\\\"rro\\\"]}]\"\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_rbind_rro\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_rbind_rro touch /mnt/foo\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *\"Read-only file system\"* ]]\n\n\trunc exec test_rbind_rro touch /mnt/subvol/bar\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *\"Read-only file system\"* ]]\n}\n\n@test \"runc run [rbind,ro,rro mount is recursively read-only too]\" {\n\trequires_kernel 5.12\n\tupdate_config \".mounts += [{source: \\\"${TESTVOLUME}\\\" , destination: \\\"/mnt\\\", options: [\\\"rbind\\\",\\\"ro\\\",\\\"rro\\\"]}]\"\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_rbind_ro_rro\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_rbind_ro_rro touch /mnt/foo\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *\"Read-only file system\"* ]]\n\n\trunc exec test_rbind_ro_rro touch /mnt/subvol/bar\n\t[ \"$status\" -eq 1 ]\n\t[[ \"${output}\" == *\"Read-only file system\"* ]]\n}\n\n# https://github.com/opencontainers/runc/issues/5095\n@test \"runc run [ check rbind,r*atime mounts]\" {\n\trequires_kernel 5.12\n\tupdate_config \".mounts += [{source: \\\"${TESTVOLUME}\\\" , destination: \\\"/mnt1\\\", options: [\\\"rbind\\\",\\\"ratime\\\"]}]\"\n\tupdate_config \".mounts += [{source: \\\"${TESTVOLUME}\\\" , destination: \\\"/mnt2\\\", options: [\\\"rbind\\\",\\\"rnoatime\\\"]}]\"\n\tupdate_config \".mounts += [{source: \\\"${TESTVOLUME}\\\" , destination: \\\"/mnt3\\\", options: [\\\"rbind\\\",\\\"rstrictatime\\\"]}]\"\n\tupdate_config \".mounts += [{source: \\\"${TESTVOLUME}\\\" , destination: \\\"/mnt4\\\", options: [\\\"rbind\\\",\\\"rnostrictatime\\\"]}]\"\n\tupdate_config \".mounts += [{source: \\\"${TESTVOLUME}\\\" , destination: \\\"/mnt5\\\", options: [\\\"rbind\\\",\\\"rrelatime\\\"]}]\"\n\tupdate_config \".mounts += [{source: \\\"${TESTVOLUME}\\\" , destination: \\\"/mnt6\\\", options: [\\\"rbind\\\",\\\"rnorelatime\\\"]}]\"\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_rbind_ratime\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_rbind_ratime findmnt --noheadings -o options /mnt1\n\t[[ \"${output}\" == \"rw,relatime,\"* ]]\n\n\trunc exec test_rbind_ratime findmnt --noheadings -o options /mnt1/subvol\n\t[[ \"${output}\" == \"rw,relatime,\"* ]]\n\n\trunc exec test_rbind_ratime findmnt --noheadings -o options /mnt2\n\t[[ \"${output}\" == \"rw,noatime,\"* ]]\n\n\trunc exec test_rbind_ratime findmnt --noheadings -o options /mnt2/subvol\n\t[[ \"${output}\" == \"rw,noatime,\"* ]]\n\n\trunc exec test_rbind_ratime findmnt --noheadings -o options /mnt3\n\t[[ \"${output}\" == \"rw,\"* ]]\n\n\trunc exec test_rbind_ratime findmnt --noheadings -o options /mnt3/subvol\n\t[[ \"${output}\" == \"rw,\"* ]]\n\n\trunc exec test_rbind_ratime findmnt --noheadings -o options /mnt4\n\t[[ \"${output}\" == \"rw,relatime,\"* ]]\n\n\trunc exec test_rbind_ratime findmnt --noheadings -o options /mnt4/subvol\n\t[[ \"${output}\" == \"rw,relatime,\"* ]]\n\n\trunc exec test_rbind_ratime findmnt --noheadings -o options /mnt5\n\t[[ \"${output}\" == \"rw,relatime,\"* ]]\n\n\trunc exec test_rbind_ratime findmnt --noheadings -o options /mnt5/subvol\n\t[[ \"${output}\" == \"rw,relatime,\"* ]]\n\n\trunc exec test_rbind_ratime findmnt --noheadings -o options /mnt6\n\t[[ \"${output}\" == \"rw,relatime,\"* ]]\n\n\trunc exec test_rbind_ratime findmnt --noheadings -o options /mnt6/subvol\n\t[[ \"${output}\" == \"rw,relatime,\"* ]]\n}\n"
  },
  {
    "path": "tests/integration/mounts_sshfs.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tif [ -v DIR ]; then\n\t\t# Some distros do not have fusermount installed\n\t\t# as a dependency of fuse-sshfs, and good ol' umount works.\n\t\tfusermount -u \"$DIR\" || umount \"$DIR\"\n\t\tunset DIR\n\tfi\n\n\tteardown_bundle\n}\n\nfunction sshfs_has_flag() {\n\tif [ -v DIR ]; then\n\t\tawk '$2 == \"'\"$DIR\"'\" { print $4 }' </proc/self/mounts | grep -E \"\\b$1\\b\"\n\t\treturn \"$?\"\n\tfi\n}\n\nfunction setup_sshfs() {\n\t# Create a fuse-sshfs mount (or, failing that, a tmpfs mount).\n\tlocal sshfs=\"sshfs\n\t\t-o UserKnownHostsFile=/dev/null\n\t\t-o StrictHostKeyChecking=no\n\t\t-o PasswordAuthentication=no\"\n\n\tif ! [ -v DIR ]; then\n\t\tDIR=\"$BATS_RUN_TMPDIR/fuse-sshfs\"\n\t\tmkdir -p \"$DIR\"\n\t\t# Make sure we clear all superblock flags to make sure bind-mounts can\n\t\t# unset these flags.\n\t\tif ! $sshfs -o rw,suid,dev,exec,atime rootless@localhost: \"$DIR\"; then\n\t\t\t# fallback to tmpfs if running in without sshfs\n\t\t\tmount -t tmpfs -o rw,suid,dev,exec,diratime,strictatime tmpfs \"$DIR\"\n\t\tfi\n\tfi\n\t# Reset atime flags. \"diratime\" is quite a strange flag, so we need to make\n\t# sure it's cleared before we apply the requested flags.\n\tmount --bind -o remount,diratime,atime,strictatime \"$DIR\"\n\t# We need to set the mount flags separately on the mount because some mount\n\t# flags (such as \"ro\") are set on the superblock if you do them in the\n\t# initial mount, which means that they cannot be cleared by bind-mounts.\n\t#\n\t# This also lets us reconfigure the per-mount settings on each call.\n\tmount --bind -o \"remount,$1\" \"$DIR\"\n\techo \"configured $DIR with mount --bind -o remount,$1\" >&2\n\tawk '$2 == \"'\"$DIR\"'\"' </proc/self/mounts >&2\n}\n\nfunction setup_sshfs_bind_flags() {\n\thost_flags=\"$1\" # ro,nodev,nosuid\n\tbind_flags=\"$2\" # ro,nosuid,bind\n\n\tsetup_sshfs \"$host_flags\"\n\n\tcat >\"rootfs/find-tmp.awk\" <<-'EOF'\n\t\t#!/bin/awk -f\n\t\t$2 == \"/mnt\" { print $4 }\n\tEOF\n\tchmod +x \"rootfs/find-tmp.awk\"\n\n\tupdate_config '.process.args = [\"sh\", \"-c\", \"/find-tmp.awk </proc/self/mounts\"]'\n\tupdate_config '.mounts = (.mounts | map(select(.destination != \"/mnt\"))) + [{\n\t\t\t\"source\": \"'\"$DIR\"'\",\n\t\t\t\"destination\": \"/mnt\",\n\t\t\t\"type\": \"bind\",\n\t\t\t\"options\": '\"$(jq -cRM 'split(\",\")' <<<\"$bind_flags\")\"'\n\t\t}]'\n}\n\nfunction pass_sshfs_bind_flags() {\n\tsetup_sshfs_bind_flags \"$@\"\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\tmnt_flags=\"$output\"\n}\n\nfunction fail_sshfs_bind_flags() {\n\tsetup_sshfs_bind_flags \"$@\"\n\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"runc run failed: unable to start container process: error during container init: error mounting\"*\"operation not permitted\"* ]]\n}\n\n@test \"runc run [mount(8)-like behaviour: --bind with no options]\" {\n\trequires root\n\n\tpass_sshfs_bind_flags \"ro,noexec,nosymfollow,nodiratime\" \"bind\"\n\t# If no flags were specified alongside bind, we keep all existing flags.\n\t# Unspecified flags must be cleared (rw default).\n\trun -0 grep -wq ro <<<\"$mnt_flags\"\n\trun ! grep -wq rw <<<\"$mnt_flags\"\n\trun -0 grep -wq noexec <<<\"$mnt_flags\"\n\trun -0 grep -wq nodiratime <<<\"$mnt_flags\"\n\t# On old systems, mount doesn't know about nosymfollow, which turns the\n\t# flag into a data argument (which is ignored by MS_REMOUNT).\n\tif sshfs_has_flag nosymfollow; then run -0 grep -wq nosymfollow <<<\"$mnt_flags\"; fi\n\n\t# Now try with a user namespace. The results should be the same as above.\n\tupdate_config ' .linux.namespaces += [{\"type\": \"user\"}]\n\t\t| .linux.uidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}]\n\t\t| .linux.gidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}] '\n\n\tpass_sshfs_bind_flags \"ro,noexec,nosymfollow,nodiratime\" \"bind\"\n\t# If no flags were specified alongside bind, we keep all existing flags.\n\t# Unspecified flags must be cleared (rw default).\n\trun -0 grep -wq ro <<<\"$mnt_flags\"\n\trun ! grep -wq rw <<<\"$mnt_flags\"\n\trun -0 grep -wq noexec <<<\"$mnt_flags\"\n\trun -0 grep -wq nodiratime <<<\"$mnt_flags\"\n\t# On old systems, mount doesn't know about nosymfollow, which turns the\n\t# flag into a data argument (which is ignored by MS_REMOUNT).\n\tif sshfs_has_flag nosymfollow; then run -0 grep -wq nosymfollow <<<\"$mnt_flags\"; fi\n}\n\n# This behaviour does not match mount(8), but is preferable to the alternative.\n# See <https://github.com/util-linux/util-linux/issues/2433>.\n@test \"runc run [mount(8)-unlike behaviour: --bind with clearing flag]\" {\n\trequires root\n\n\tpass_sshfs_bind_flags \"ro,noexec,nosymfollow,nodiratime\" \"bind,dev\"\n\t# Unspecified flags must be cleared as well.\n\trun ! grep -wq ro <<<\"$mnt_flags\"\n\trun -0 grep -wq rw <<<\"$mnt_flags\"\n\trun ! grep -wq noexec <<<\"$mnt_flags\"\n\trun ! grep -wq nosymfollow <<<\"$mnt_flags\"\n\t# FIXME FIXME: As with mount(8), trying to clear an atime flag the \"naive\"\n\t# way will be ignored!\n\trun -0 grep -wq nodiratime <<<\"$mnt_flags\"\n\n\t# Now try with a user namespace.\n\tupdate_config ' .linux.namespaces += [{\"type\": \"user\"}]\n\t\t| .linux.uidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}]\n\t\t| .linux.gidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}] '\n\n\tpass_sshfs_bind_flags \"ro,noexec,nosymfollow,nodiratime\" \"bind,dev\"\n\t# Lockable flags must be kept, because we didn't request them explicitly.\n\trun -0 grep -wq ro <<<\"$mnt_flags\"\n\trun ! grep -wq rw <<<\"$mnt_flags\"\n\trun -0 grep -wq noexec <<<\"$mnt_flags\"\n\trun -0 grep -wq nodiratime <<<\"$mnt_flags\"\n\t# nosymfollow is not lockable, so it must be cleared.\n\trun ! grep -wq nosymfollow <<<\"$mnt_flags\"\n}\n\n@test \"runc run [implied-rw bind mount of a ro fuse sshfs mount]\" {\n\trequires root\n\n\tpass_sshfs_bind_flags \"ro\" \"bind,nosuid,nodev,rprivate\"\n\t# Unspecified flags must be cleared (rw default).\n\trun ! grep -wq ro <<<\"$mnt_flags\"\n\trun -0 grep -wq rw <<<\"$mnt_flags\"\n\t# The new flags must be applied.\n\trun -0 grep -wq nosuid <<<\"$mnt_flags\"\n\trun -0 grep -wq nodev <<<\"$mnt_flags\"\n\n\t# Now try with a user namespace. The results should be the same as above.\n\tupdate_config ' .linux.namespaces += [{\"type\": \"user\"}]\n\t\t| .linux.uidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}]\n\t\t| .linux.gidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}] '\n\n\tpass_sshfs_bind_flags \"ro\" \"bind,nosuid,nodev,rprivate\"\n\t# \"ro\" must still be set (inherited).\n\trun -0 grep -wq ro <<<\"$mnt_flags\"\n\t# The new flags must be applied.\n\trun -0 grep -wq nosuid <<<\"$mnt_flags\"\n\trun -0 grep -wq nodev <<<\"$mnt_flags\"\n}\n\n@test \"runc run [explicit-rw bind mount of a ro fuse sshfs mount]\" {\n\trequires root\n\n\t# Try to overwrite MS_RDONLY. As we are running in a userns-less container,\n\t# we can overwrite MNT_LOCKED flags.\n\tpass_sshfs_bind_flags \"ro\" \"bind,rw,nosuid,nodev,rprivate\"\n\t# \"ro\" must be cleared and replaced with \"rw\".\n\trun ! grep -wq ro <<<\"$mnt_flags\"\n\trun -0 grep -wq rw <<<\"$mnt_flags\"\n\t# The new flags must be applied.\n\trun -0 grep -wq nosuid <<<\"$mnt_flags\"\n\trun -0 grep -wq nodev <<<\"$mnt_flags\"\n\n\t# Now try with a user namespace.\n\tupdate_config ' .linux.namespaces += [{\"type\": \"user\"}]\n\t\t| .linux.uidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}]\n\t\t| .linux.gidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}] '\n\n\t# This must fail because we explicitly requested a mount with a MNT_LOCKED\n\t# mount option cleared (when the source mount has those mounts enabled),\n\t# namely MS_RDONLY.\n\tfail_sshfs_bind_flags \"ro\" \"bind,rw,nosuid,nodev,rprivate\"\n}\n\n@test \"runc run [dev,exec,suid,atime bind mount of a nodev,nosuid,noexec,noatime fuse sshfs mount]\" {\n\trequires root\n\n\t# When running without userns, overwriting host flags should work.\n\tpass_sshfs_bind_flags \"nosuid,nodev,noexec,noatime\" \"bind,dev,suid,exec,atime\"\n\t# Unspecified flags must be cleared (rw default).\n\trun ! grep -wq ro <<<\"$mnt_flags\"\n\trun -0 grep -wq rw <<<\"$mnt_flags\"\n\t# Check that the flags were actually cleared by the mount.\n\trun ! grep -wq nosuid <<<\"$mnt_flags\"\n\trun ! grep -wq nodev <<<\"$mnt_flags\"\n\trun ! grep -wq noexec <<<\"$mnt_flags\"\n\t# FIXME FIXME: As with mount(8), trying to clear an atime flag the \"naive\"\n\t# way will be ignored!\n\trun -0 grep -wq noatime <<<\"$mnt_flags\"\n\n\t# Now try with a user namespace.\n\tupdate_config ' .linux.namespaces += [{\"type\": \"user\"}]\n\t\t| .linux.uidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}]\n\t\t| .linux.gidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}] '\n\n\t# This must fail because we explicitly requested a mount with MNT_LOCKED\n\t# mount options cleared (when the source mount has those mounts enabled).\n\tfail_sshfs_bind_flags \"nodev,nosuid,nosuid,noatime\" \"bind,dev,suid,exec,atime\"\n}\n\n# Test to ensure we don't regress bind-mounting /etc/resolv.conf with\n# containerd <https://github.com/containerd/containerd/pull/8309>.\n@test \"runc run [ro bind mount of a nodev,nosuid,noexec fuse sshfs mount]\" {\n\trequires root\n\n\t# Setting flags that are not locked should work.\n\tpass_sshfs_bind_flags \"rw,nodev,nosuid,nodev,noexec,noatime\" \"bind,ro\"\n\t# The flagset should be the union of the two.\n\trun -0 grep -wq ro <<<\"$mnt_flags\"\n\t# Unspecified flags must be cleared.\n\trun ! grep -wq nosuid <<<\"$mnt_flags\"\n\trun ! grep -wq nodev <<<\"$mnt_flags\"\n\trun ! grep -wq noexec <<<\"$mnt_flags\"\n\n\t# Now try with a user namespace.\n\tupdate_config ' .linux.namespaces += [{\"type\": \"user\"}]\n\t\t| .linux.uidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}]\n\t\t| .linux.gidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}] '\n\n\t# Setting flags that are not locked should work.\n\tpass_sshfs_bind_flags \"rw,nodev,nosuid,nodev,noexec,noatime\" \"bind,ro\"\n\t# The flagset should be the union of the two.\n\trun -0 grep -wq ro <<<\"$mnt_flags\"\n\t# (Unspecified MNT_LOCKED flags are inherited.)\n\trun -0 grep -wq nosuid <<<\"$mnt_flags\"\n\trun -0 grep -wq nodev <<<\"$mnt_flags\"\n\trun -0 grep -wq noexec <<<\"$mnt_flags\"\n}\n\n@test \"runc run [ro,symfollow bind mount of a rw,nodev,nosymfollow fuse sshfs mount]\" {\n\trequires root\n\n\tpass_sshfs_bind_flags \"rw,nodev,nosymfollow\" \"bind,ro,symfollow\"\n\t# Must switch to ro.\n\trun -0 grep -wq ro <<<\"$mnt_flags\"\n\trun ! grep -wq rw <<<\"$mnt_flags\"\n\t# Unspecified flags must be cleared.\n\trun ! grep -wq nodev <<<\"$mnt_flags\"\n\t# nosymfollow must also be cleared.\n\trun ! grep -wq nosymfollow <<<\"$mnt_flags\"\n\n\t# Now try with a user namespace.\n\tupdate_config ' .linux.namespaces += [{\"type\": \"user\"}]\n\t\t| .linux.uidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}]\n\t\t| .linux.gidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}] '\n\n\t# Unsetting flags that are not lockable should work.\n\tpass_sshfs_bind_flags \"rw,nodev,nosymfollow\" \"bind,ro,symfollow\"\n\t# The flagset should be the union of the two.\n\trun -0 grep -wq ro <<<\"$mnt_flags\"\n\trun -0 grep -wq nodev <<<\"$mnt_flags\"\n\t# nosymfollow is not lockable, so it must be cleared.\n\trun ! grep -wq nosymfollow <<<\"$mnt_flags\"\n\n\t# Implied unsetting of non-lockable flags should also work.\n\tpass_sshfs_bind_flags \"rw,nodev,nosymfollow\" \"bind,rw\"\n\t# The flagset should be the union of the two.\n\trun -0 grep -wq rw <<<\"$mnt_flags\"\n\trun -0 grep -wq nodev <<<\"$mnt_flags\"\n\t# nosymfollow is not lockable, so it must be cleared.\n\trun ! grep -wq nosymfollow <<<\"$mnt_flags\"\n}\n\n@test \"runc run [ro,noexec bind mount of a nosuid,noatime fuse sshfs mount]\" {\n\trequires root\n\n\t# Setting flags that are not locked should work.\n\tpass_sshfs_bind_flags \"nodev,nosuid,noatime\" \"bind,ro,exec\"\n\t# The flagset must match the requested set.\n\trun -0 grep -wq ro <<<\"$mnt_flags\"\n\trun ! grep -wq noexec <<<\"$mnt_flags\"\n\t# Unspecified flags must be cleared.\n\trun ! grep -wq nosuid <<<\"$mnt_flags\"\n\trun ! grep -wq nodev <<<\"$mnt_flags\"\n\t# FIXME: As with mount(8), runc keeps the old atime setting by default.\n\trun -0 grep -wq noatime <<<\"$mnt_flags\"\n\n\t# Now try with a user namespace.\n\tupdate_config ' .linux.namespaces += [{\"type\": \"user\"}]\n\t\t| .linux.uidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}]\n\t\t| .linux.gidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}] '\n\n\t# Setting flags that are not locked should work.\n\tpass_sshfs_bind_flags \"nodev,nosuid,noatime\" \"bind,ro,exec\"\n\t# The flagset should be the union of the two.\n\trun -0 grep -wq ro <<<\"$mnt_flags\"\n\trun ! grep -wq noexec <<<\"$mnt_flags\"\n\t# (Unspecified MNT_LOCKED flags are inherited.)\n\trun -0 grep -wq nosuid <<<\"$mnt_flags\"\n\trun -0 grep -wq nodev <<<\"$mnt_flags\"\n\trun -0 grep -wq noatime <<<\"$mnt_flags\"\n}\n\n@test \"runc run [bind mount {no,rel,strict}atime semantics]\" {\n\trequires root\n\n\tfunction is_strictatime() {\n\t\t# There is no \"strictatime\" in /proc/self/mounts.\n\t\trun ! grep -wq noatime <<<\"${1:-$mnt_flags}\"\n\t\trun ! grep -wq relatime <<<\"${1:-$mnt_flags}\"\n\t\trun ! grep -wq nodiratime <<<\"${1:-$mnt_flags}\"\n\t}\n\n\t# FIXME: As with mount(8), runc keeps the old atime setting by default.\n\tpass_sshfs_bind_flags \"noatime\" \"bind\"\n\trun -0 grep -wq noatime <<<\"$mnt_flags\"\n\trun ! grep -wq relatime <<<\"$mnt_flags\"\n\n\t# FIXME: As with mount(8), runc keeps the old atime setting by default.\n\tpass_sshfs_bind_flags \"noatime\" \"bind,norelatime\"\n\trun -0 grep -wq noatime <<<\"$mnt_flags\"\n\trun ! grep -wq relatime <<<\"$mnt_flags\"\n\n\t# FIXME FIXME: As with mount(8), trying to clear an atime flag the \"naive\"\n\t# way will be ignored!\n\tpass_sshfs_bind_flags \"noatime\" \"bind,atime\"\n\trun -0 grep -wq noatime <<<\"$mnt_flags\"\n\trun ! grep -wq relatime <<<\"$mnt_flags\"\n\n\t# ... but explicitly setting a different flag works.\n\tpass_sshfs_bind_flags \"noatime\" \"bind,relatime\"\n\trun ! grep -wq noatime <<<\"$mnt_flags\"\n\trun -0 grep -wq relatime <<<\"$mnt_flags\"\n\n\t# Setting a flag that mount(8) would combine should result in only the\n\t# requested flag being set.\n\tpass_sshfs_bind_flags \"noatime\" \"bind,nodiratime\"\n\trun ! grep -wq noatime <<<\"$mnt_flags\"\n\trun -0 grep -wq nodiratime <<<\"$mnt_flags\"\n\t# MS_DIRATIME implies MS_RELATIME by default.\n\trun -0 grep -wq relatime <<<\"$mnt_flags\"\n\n\t# Clearing flags that mount(8) would not clear works.\n\tpass_sshfs_bind_flags \"nodiratime\" \"bind,strictatime\"\n\tis_strictatime \"$mnt_flags\"\n\n\t# nodiratime is a little weird -- it implies relatime unless you set\n\t# another option (noatime or strictatime). But, runc also has norelatime --\n\t# so nodiratime,norelatime should _probably_ result in the same thing as\n\t# nodiratime,strictatime.\n\tpass_sshfs_bind_flags \"noatime\" \"bind,nodiratime,strictatime\"\n\trun ! grep -wq noatime <<<\"$mnt_flags\"\n\trun -0 grep -wq nodiratime <<<\"$mnt_flags\"\n\trun ! grep -wq relatime <<<\"$mnt_flags\"\n\t# FIXME FIXME: relatime should not be set in this case.\n\tpass_sshfs_bind_flags \"noatime\" \"bind,nodiratime,norelatime\"\n\trun ! grep -wq noatime <<<\"$mnt_flags\"\n\trun -0 grep -wq nodiratime <<<\"$mnt_flags\"\n\trun -0 grep -wq relatime <<<\"$mnt_flags\"\n\n\t# Now try with a user namespace.\n\tupdate_config ' .linux.namespaces += [{\"type\": \"user\"}]\n\t\t| .linux.uidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}]\n\t\t| .linux.gidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}] '\n\n\t# Requesting a mount without specifying any preference for atime works, and\n\t# inherits the original flags.\n\n\tpass_sshfs_bind_flags \"strictatime\" \"bind\"\n\tis_strictatime \"$mnt_flags\"\n\n\tpass_sshfs_bind_flags \"relatime\" \"bind\"\n\trun -0 grep -wq relatime <<<\"$mnt_flags\"\n\n\tpass_sshfs_bind_flags \"nodiratime\" \"bind\"\n\trun -0 grep -wq nodiratime <<<\"$mnt_flags\"\n\t# MS_DIRATIME implies MS_RELATIME by default.\n\t# Let's check either relatime is set or no other option that removes\n\t# relatime semantics is set.\n\t# The latter case is needed in debian. For more info, see issue: #4093\n\trun -0 grep -wq relatime <<<\"$mnt_flags\" ||\n\t\t(run ! grep -wqE 'strictatime|norelatime|noatime' <<<\"$mnt_flags\")\n\n\tpass_sshfs_bind_flags \"noatime,nodiratime\" \"bind\"\n\trun -0 grep -wq noatime <<<\"$mnt_flags\"\n\trun -0 grep -wq nodiratime <<<\"$mnt_flags\"\n\n\t# An unrelated clear flag has no effect.\n\tpass_sshfs_bind_flags \"noatime,nodiratime\" \"bind,norelatime\"\n\trun -0 grep -wq noatime <<<\"$mnt_flags\"\n\trun -0 grep -wq nodiratime <<<\"$mnt_flags\"\n\n\t# Attempting to change most *atime flags will fail with user namespaces\n\t# because *atime flags are all MNT_LOCKED.\n\tfail_sshfs_bind_flags \"nodiratime\" \"bind,strictatime\"\n\tfail_sshfs_bind_flags \"relatime\" \"bind,strictatime\"\n\tfail_sshfs_bind_flags \"noatime\" \"bind,strictatime\"\n\tfail_sshfs_bind_flags \"nodiratime\" \"bind,noatime\"\n\tfail_sshfs_bind_flags \"relatime\" \"bind,noatime\"\n\tfail_sshfs_bind_flags \"relatime\" \"bind,nodiratime\"\n\t# Make sure strictatime sources are correctly handled by runc (the kernel\n\t# ignores some other mount flags when passing MS_STRICTATIME). See\n\t# remount() in rootfs_linux.go for details.\n\tfail_sshfs_bind_flags \"strictatime\" \"bind,relatime\"\n\tfail_sshfs_bind_flags \"strictatime\" \"bind,noatime\"\n\tfail_sshfs_bind_flags \"strictatime\" \"bind,nodiratime\"\n\t# Make sure that runc correctly handles the MS_NOATIME|MS_RELATIME kernel\n\t# bug. See remount() in rootfs_linux.go for more details.\n\tfail_sshfs_bind_flags \"noatime\" \"bind,relatime\"\n\n\t# Attempting to bind-mount a mount with a request to clear the atime\n\t# setting that would normally inherited must not work.\n\t# FIXME FIXME: All of these cases should fail.\n\tpass_sshfs_bind_flags \"strictatime\" \"bind,nostrictatime\"\n\tis_strictatime \"$mnt_flags\"\n\tpass_sshfs_bind_flags \"nodiratime\" \"bind,diratime\"\n\trun -0 grep -wq nodiratime <<<\"$mnt_flags\"\n\tpass_sshfs_bind_flags \"nodiratime\" \"bind,norelatime\" # MS_DIRATIME implies MS_RELATIME\n\trun -0 grep -wq nodiratime <<<\"$mnt_flags\"\n\tpass_sshfs_bind_flags \"relatime\" \"bind,norelatime\"\n\trun -0 grep -wq relatime <<<\"$mnt_flags\"\n\tpass_sshfs_bind_flags \"noatime\" \"bind,atime\"\n\trun -0 grep -wq noatime <<<\"$mnt_flags\"\n\tpass_sshfs_bind_flags \"noatime,nodiratime\" \"bind,atime\"\n\trun -0 grep -wq noatime <<<\"$mnt_flags\"\n\trun -0 grep -wq nodiratime <<<\"$mnt_flags\"\n}\n"
  },
  {
    "path": "tests/integration/netdev.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup_netns() {\n\tlocal tmp\n\n\t# Create a temporary name for the test network namespace.\n\ttmp=$(mktemp -u)\n\tns_name=$(basename \"$tmp\")\n\n\t# Create the network namespace.\n\tip netns add \"$ns_name\"\n\tns_path=$(ip netns add \"$ns_name\" 2>&1 | sed -e 's/.*\"\\(.*\\)\".*/\\1/')\n\n\t# Tell runc to use it.\n\tupdate_config '(.. | select(.type? == \"network\")) .path |= \"'\"$ns_path\"'\"'\n}\n\nfunction delete_netns() {\n\t# Delete the namespace only if the ns_name variable is set.\n\t[ -v ns_name ] && ip netns del \"$ns_name\"\n}\n\nfunction setup() {\n\trequires root\n\tsetup_busybox\n\n\t# Create a dummy interface to move to the container.\n\tip link add dummy0 type dummy\n}\n\nfunction teardown() {\n\tip link del dev dummy0\n\tdelete_netns\n\tteardown_bundle\n}\n\n@test \"move network device to container network namespace\" {\n\tupdate_config ' .linux.netDevices |= {\"dummy0\": {} }\n      \t\t| .process.args |= [\"ip\", \"address\", \"show\", \"dev\", \"dummy0\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"move network device to container network namespace and restore it back\" {\n\tsetup_netns\n\tupdate_config ' .linux.netDevices |= {\"dummy0\": {} }'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# The network namespace owner controls the lifecycle of the interface.\n\t# The interface should remain on the namespace after the container was killed.\n\trunc delete --force test_busybox\n\n\t# Move back the interface to the root namespace (pid 1).\n\tip netns exec \"$ns_name\" ip link set dev dummy0 netns 1\n\n\t# Verify the interface is back in the root network namespace.\n\tip address show dev dummy0\n}\n\n@test \"move network device to precreated container network namespace\" {\n\tsetup_netns\n\tupdate_config ' .linux.netDevices |= {\"dummy0\": {} }\n      \t\t| .process.args |= [\"ip\", \"address\", \"show\", \"dev\", \"dummy0\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# Verify the interface is still present in the network namespace.\n\tip netns exec \"$ns_name\" ip address show dev dummy0\n}\n\n@test \"move network device to precreated container network namespace and set ip address with global scope\" {\n\tsetup_netns\n\tupdate_config ' .linux.netDevices |= {\"dummy0\": {} }\n      \t\t| .process.args |= [\"ip\", \"address\", \"show\", \"dev\", \"dummy0\"]'\n\n\tglobal_ip=\"169.254.169.77/32\"\n\n\t# Set the interface down to avoid possible network problems.\n\t# Set a custom address to the interface.\n\tip link set down dev dummy0\n\tip address add \"$global_ip\" dev dummy0\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"$global_ip \"* ]]\n\n\t# Verify the interface is still present in the network namespace.\n\trun -0 ip netns exec \"$ns_name\" ip address show dev dummy0\n\t[[ \"$output\" == *\"$global_ip \"* ]]\n}\n\n@test \"move network device to precreated container network namespace and set ip address without global scope\" {\n\tsetup_netns\n\tupdate_config ' .linux.netDevices |= {\"dummy0\": {} }\n      \t\t| .process.args |= [\"ip\", \"address\", \"show\", \"dev\", \"dummy0\"]'\n\n\tnon_global_ip=\"127.0.0.33\"\n\n\t# Set the interface down to avoid possible network problems.\n\t# Set a custom address to the interface.\n\tip link set down dev dummy0\n\tip address add \"$non_global_ip\" dev dummy0\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" != *\" $non_global_ip \"* ]]\n\n\t# Verify the interface is still present in the network namespace.\n\tip netns exec \"$ns_name\" ip address show dev dummy0\n}\n\n@test \"move network device to precreated container network namespace and set mtu\" {\n\tsetup_netns\n\tupdate_config ' .linux.netDevices |= {\"dummy0\": {} }\n      \t\t| .process.args |= [\"ip\", \"address\", \"show\", \"dev\", \"dummy0\"]'\n\n\tmtu_value=1789\n\t# Set a custom mtu to the interface.\n\tip link set mtu \"$mtu_value\" dev dummy0\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"mtu $mtu_value \"* ]]\n\n\t# Verify the interface is still present in the network namespace.\n\trun -0 ip netns exec \"$ns_name\" ip address show dev dummy0\n\t[[ \"$output\" == *\"mtu $mtu_value \"* ]]\n}\n\n@test \"move network device to precreated container network namespace and set mac address\" {\n\tsetup_netns\n\tupdate_config ' .linux.netDevices |= {\"dummy0\": {} }\n      \t\t| .process.args |= [\"ip\", \"address\", \"show\", \"dev\", \"dummy0\"]'\n\n\tmac_address=\"00:11:22:33:44:55\"\n\t# set a custom mac address to the interface\n\tip link set address \"$mac_address\" dev dummy0\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"ether $mac_address \"* ]]\n\n\t# Verify the interface is still present in the network namespace.\n\trun -0 ip netns exec \"$ns_name\" ip address show dev dummy0\n\t[[ \"$output\" == *\"ether $mac_address \"* ]]\n}\n\n@test \"move network device to precreated container network namespace and rename\" {\n\tsetup_netns\n\tupdate_config ' .linux.netDevices |= { \"dummy0\": { \"name\" : \"ctr_dummy0\" } }\n      \t\t| .process.args |= [\"ip\", \"address\", \"show\", \"dev\", \"ctr_dummy0\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# Verify the interface is still present in the network namespace.\n\tip netns exec \"$ns_name\" ip address show dev ctr_dummy0\n}\n\n@test \"move network device to precreated container network namespace and rename and set mtu and mac and ip address\" {\n\tsetup_netns\n\tupdate_config ' .linux.netDevices |= { \"dummy0\": { \"name\" : \"ctr_dummy0\" } }\n\t    \t\t| .process.args |= [\"ip\", \"address\", \"show\", \"dev\", \"ctr_dummy0\"]'\n\n\tmtu_value=1789\n\tmac_address=\"00:11:22:33:44:55\"\n\tglobal_ip=\"169.254.169.77/32\"\n\n\t# Set a custom mtu to the interface.\n\tip link set mtu \"$mtu_value\" dev dummy0\n\t# Set a custom mac address to the interface.\n\tip link set address \"$mac_address\" dev dummy0\n\t# Set a custom ip address to the interface.\n\tip address add \"$global_ip\" dev dummy0\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\" $global_ip \"* ]]\n\t[[ \"$output\" == *\"ether $mac_address \"* ]]\n\t[[ \"$output\" == *\"mtu $mtu_value \"* ]]\n\n\t# Verify the interface is still present in the network namespace.\n\trun -0 ip netns exec \"$ns_name\" ip address show dev ctr_dummy0\n\t[[ \"$output\" == *\" $global_ip \"* ]]\n\t[[ \"$output\" == *\"ether $mac_address \"* ]]\n\t[[ \"$output\" == *\"mtu $mtu_value \"* ]]\n}\n"
  },
  {
    "path": "tests/integration/no_pivot.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc run --no-pivot must not expose bare /proc\" {\n\trequires root\n\n\tupdate_config '\t  .process.args |= [\"unshare\", \"-mrpf\", \"sh\", \"-euxc\", \"mount -t proc none /proc && echo h > /proc/sysrq-trigger\"]\n\t\t\t| .process.capabilities.bounding += [\"CAP_SETFCAP\"]\n\t\t\t| .process.capabilities.permitted += [\"CAP_SETFCAP\"]'\n\n\trunc run --no-pivot test_no_pivot\n\t[ \"$status\" -eq 1 ]\n\t[[ \"$output\" == *\"mount: permission denied\"* ]]\n}\n"
  },
  {
    "path": "tests/integration/pause.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc pause and resume\" {\n\trequires cgroups_freezer\n\tif [ $EUID -ne 0 ]; then\n\t\trequires rootless_cgroup\n\t\tset_cgroups_path\n\tfi\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\trunc pause test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox paused\n\n\trunc resume test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n}\n\n@test \"runc pause and resume with nonexist container\" {\n\trequires cgroups_freezer\n\tif [ $EUID -ne 0 ]; then\n\t\trequires rootless_cgroup\n\t\tset_cgroups_path\n\tfi\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\trunc pause test_busybox\n\t[ \"$status\" -eq 0 ]\n\trunc pause nonexistent\n\t[ \"$status\" -ne 0 ]\n\n\ttestcontainer test_busybox paused\n\n\trunc resume test_busybox\n\t[ \"$status\" -eq 0 ]\n\trunc resume nonexistent\n\t[ \"$status\" -ne 0 ]\n\n\ttestcontainer test_busybox running\n\n\trunc delete --force test_busybox\n\n\trunc state test_busybox\n\t[ \"$status\" -ne 0 ]\n}\n"
  },
  {
    "path": "tests/integration/personality.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\trequires arch_x86_64\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc run personality for i686\" {\n\tupdate_config '\n      .process.args = [\"/bin/sh\", \"-c\", \"uname -a\"]\n\t\t\t| .linux.personality = {\n                \"domain\": \"LINUX32\",\n                \"flags\": []\n\t\t\t}'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"i686\"* ]]\n}\n\n@test \"runc run personality with exec for i686\" {\n\tupdate_config '\n      .linux.personality = {\n                \"domain\": \"LINUX32\",\n      }'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\trunc exec test_busybox /bin/sh -c \"uname -a\"\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"i686\"* ]]\n}\n\n@test \"runc run personality for x86_64\" {\n\tupdate_config '\n      .process.args = [\"/bin/sh\", \"-c\", \"uname -a\"]\n\t\t\t| .linux.personality = {\n                \"domain\": \"LINUX\",\n                \"flags\": []\n\t\t\t}'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"x86_64\"* ]]\n}\n\n@test \"runc run personality with exec for x86_64\" {\n\tupdate_config '\n      .linux.personality = {\n                \"domain\": \"LINUX\",\n      }'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\trunc exec test_busybox /bin/sh -c \"uname -a\"\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"x86_64\"* ]]\n}\n\n# check that personality can be set when the personality syscall is blocked by seccomp\n@test \"runc run with personality syscall blocked by seccomp\" {\n\tupdate_config '\n      .linux.personality = {\n                \"domain\": \"LINUX\",\n      }\n\t  | .linux.seccomp = {\n                \"defaultAction\":\"SCMP_ACT_ALLOW\",\n                \"syscalls\":[{\"names\":[\"personality\"], \"action\":\"SCMP_ACT_ERRNO\"}]\n\t  }'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\trunc exec test_busybox /bin/sh -c \"uname -a\"\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"x86_64\"* ]]\n}\n"
  },
  {
    "path": "tests/integration/pidfd-socket.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\trequires root\n\trequires_kernel 5.3\n\tsetup_busybox\n\tupdate_config '.process.args = [\"/bin/sleep\", \"1d\"]'\n}\n\nfunction teardown() {\n\tteardown_pidfd_kill\n\tteardown_bundle\n}\n\n@test \"runc create [ --pidfd-socket ] \" {\n\tsetup_pidfd_kill \"SIGTERM\"\n\n\trunc create --console-socket \"$CONSOLE_SOCKET\" --pidfd-socket \"${PIDFD_SOCKET}\" test_pidfd\n\t[ \"$status\" -eq 0 ]\n\ttestcontainer test_pidfd created\n\n\tpidfd_kill\n\twait_for_container 10 1 test_pidfd stopped\n}\n\n@test \"runc run [ --pidfd-socket ] \" {\n\tsetup_pidfd_kill \"SIGKILL\"\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" --pidfd-socket \"${PIDFD_SOCKET}\" test_pidfd\n\t[ \"$status\" -eq 0 ]\n\ttestcontainer test_pidfd running\n\n\tpidfd_kill\n\twait_for_container 10 1 test_pidfd stopped\n}\n\n@test \"runc exec [ --pidfd-socket ] [cgroups_v1] \" {\n\trequires cgroups_v1\n\n\tset_cgroups_path\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_pidfd\n\t[ \"$status\" -eq 0 ]\n\ttestcontainer test_pidfd running\n\n\t# Use sub-cgroup to ensure that exec process has been killed\n\ttest_pidfd_cgroup_path=$(get_cgroup_path \"pids\")\n\tmkdir \"${test_pidfd_cgroup_path}/exec_pidfd\"\n\n\tsetup_pidfd_kill \"SIGKILL\"\n\n\t__runc exec -d --cgroup \"pids:exec_pidfd\" --pid-file \"exec_pid.txt\" --pidfd-socket \"${PIDFD_SOCKET}\" test_pidfd sleep 1d\n\n\texec_pid=$(cat exec_pid.txt)\n\texec_pid_in_cgroup=$(cat \"${test_pidfd_cgroup_path}/exec_pidfd/cgroup.procs\")\n\t[ \"${exec_pid}\" -eq \"${exec_pid_in_cgroup}\" ]\n\n\tpidfd_kill\n\n\t# ensure exec process has been reaped\n\tretry 10 1 rmdir \"${test_pidfd_cgroup_path}/exec_pidfd\"\n\n\ttestcontainer test_pidfd running\n}\n\n@test \"runc exec [ --pidfd-socket ] [cgroups_v2] \" {\n\trequires cgroups_v2\n\n\tset_cgroups_path\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_pidfd\n\t[ \"$status\" -eq 0 ]\n\ttestcontainer test_pidfd running\n\n\t# Use sub-cgroup to ensure that exec process has been killed\n\ttest_pidfd_cgroup_path=$(get_cgroup_path \"pids\")\n\tmkdir \"${test_pidfd_cgroup_path}/exec_pidfd\"\n\n\tsetup_pidfd_kill \"SIGKILL\"\n\n\t__runc exec -d --cgroup \"exec_pidfd\" --pid-file \"exec_pid.txt\" --pidfd-socket \"${PIDFD_SOCKET}\" test_pidfd sleep 1d\n\n\texec_pid=$(cat exec_pid.txt)\n\texec_pid_in_cgroup=$(cat \"${test_pidfd_cgroup_path}/exec_pidfd/cgroup.procs\")\n\t[ \"${exec_pid}\" -eq \"${exec_pid_in_cgroup}\" ]\n\n\tpidfd_kill\n\n\t# ensure exec process has been reaped\n\tretry 10 1 rmdir \"${test_pidfd_cgroup_path}/exec_pidfd\"\n\n\ttestcontainer test_pidfd running\n}\n"
  },
  {
    "path": "tests/integration/ps.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\t# ps requires cgroups\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tsetup_busybox\n\n\t# Rootless does not have default cgroup path.\n\t[ $EUID -ne 0 ] && set_cgroups_path\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\ttestcontainer test_busybox running\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"ps\" {\n\trunc ps test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" =~ UID\\ +PID\\ +PPID\\ +C\\ +STIME\\ +TTY\\ +TIME\\ +CMD+ ]]\n\t[[ \"$output\" == *\"$(id -un 2>/dev/null)\"*[0-9]* ]]\n}\n\n@test \"ps -f json\" {\n\trunc ps -f json test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" =~ [0-9]+ ]]\n}\n\n@test \"ps -e -x\" {\n\trunc ps test_busybox -e -x\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" =~ \\ +PID\\ +TTY\\ +STAT\\ +TIME\\ +COMMAND+ ]]\n\t[[ \"$output\" =~ [0-9]+ ]]\n}\n\n@test \"ps after the container stopped\" {\n\trunc ps test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc kill test_busybox KILL\n\t[ \"$status\" -eq 0 ]\n\twait_for_container 10 1 test_busybox stopped\n\n\trunc ps test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n"
  },
  {
    "path": "tests/integration/rlimits.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\t# Do not change the Cur value to be equal to the Max value\n\t# Because in some environments, the soft and hard nofile limit have the same value.\n\t[ $EUID -eq 0 ] && prlimit --nofile=1024:65536 -p $$\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n# Set and check rlimit_nofile for runc run. Arguments are:\n#  $1: soft limit;\n#  $2: hard limit.\nfunction run_check_nofile() {\n\tsoft=\"$1\"\n\thard=\"$2\"\n\tupdate_config \".process.rlimits = [{\\\"type\\\": \\\"RLIMIT_NOFILE\\\", \\\"soft\\\": ${soft}, \\\"hard\\\": ${hard}}]\"\n\tupdate_config '.process.args = [\"/bin/sh\", \"-c\", \"ulimit -n; ulimit -H -n\"]'\n\n\trunc run test_rlimit\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == \"${soft}\" ]]\n\t[[ \"${lines[1]}\" == \"${hard}\" ]]\n}\n\n# Set and check rlimit_nofile for runc exec. Arguments are:\n#  $1: soft limit;\n#  $2: hard limit.\nfunction exec_check_nofile() {\n\tsoft=\"$1\"\n\thard=\"$2\"\n\tupdate_config \".process.rlimits = [{\\\"type\\\": \\\"RLIMIT_NOFILE\\\", \\\"soft\\\": ${soft}, \\\"hard\\\": ${hard}}]\"\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_rlimit\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_rlimit /bin/sh -c \"ulimit -n; ulimit -H -n\"\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == \"${soft}\" ]]\n\t[[ \"${lines[1]}\" == \"${hard}\" ]]\n}\n\n@test \"runc run with RLIMIT_NOFILE(The same as system's hard value)\" {\n\thard=$(ulimit -n -H)\n\tsoft=\"$hard\"\n\trun_check_nofile \"$soft\" \"$hard\"\n}\n\n@test \"runc run with RLIMIT_NOFILE(Bigger than system's hard value)\" {\n\trequires root\n\tlimit=$(ulimit -n -H)\n\tsoft=$((limit + 1))\n\thard=$soft\n\trun_check_nofile \"$soft\" \"$hard\"\n}\n\n@test \"runc run with RLIMIT_NOFILE(Smaller than system's hard value)\" {\n\tlimit=$(ulimit -n -H)\n\tsoft=$((limit - 1))\n\thard=$soft\n\trun_check_nofile \"$soft\" \"$hard\"\n}\n\n@test \"runc exec with RLIMIT_NOFILE(The same as system's hard value)\" {\n\thard=$(ulimit -n -H)\n\tsoft=\"$hard\"\n\texec_check_nofile \"$soft\" \"$hard\"\n}\n\n@test \"runc exec with RLIMIT_NOFILE(Bigger than system's hard value)\" {\n\trequires root\n\tlimit=$(ulimit -n -H)\n\tsoft=$((limit + 1))\n\thard=$soft\n\texec_check_nofile \"$soft\" \"$hard\"\n}\n\n@test \"runc exec with RLIMIT_NOFILE(Smaller than system's hard value)\" {\n\tlimit=$(ulimit -n -H)\n\tsoft=$((limit - 1))\n\thard=$soft\n\texec_check_nofile \"$soft\" \"$hard\"\n}\n"
  },
  {
    "path": "tests/integration/root.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n\tALT_ROOT=\"$ROOT/alt\"\n\tmkdir -p \"$ALT_ROOT/state\"\n}\n\nfunction teardown() {\n\tROOT=$ALT_ROOT __runc delete -f test_dotbox\n\tunset ALT_ROOT\n\tteardown_bundle\n}\n\n@test \"global --root\" {\n\t# run busybox detached using $ALT_ROOT for state\n\tROOT=$ALT_ROOT runc run -d --console-socket \"$CONSOLE_SOCKET\" test_dotbox\n\t[ \"$status\" -eq 0 ]\n\n\t# run busybox detached in default root\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc state test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${output}\" == *\"running\"* ]]\n\n\tROOT=$ALT_ROOT runc state test_dotbox\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${output}\" == *\"running\"* ]]\n\n\tROOT=$ALT_ROOT runc state test_busybox\n\t[ \"$status\" -ne 0 ]\n\n\trunc state test_dotbox\n\t[ \"$status\" -ne 0 ]\n\n\trunc kill test_busybox KILL\n\t[ \"$status\" -eq 0 ]\n\twait_for_container 10 1 test_busybox stopped\n\trunc delete test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\tROOT=$ALT_ROOT runc kill test_dotbox KILL\n\t[ \"$status\" -eq 0 ]\n\tROOT=$ALT_ROOT wait_for_container 10 1 test_dotbox stopped\n\tROOT=$ALT_ROOT runc delete test_dotbox\n\t[ \"$status\" -eq 0 ]\n}\n"
  },
  {
    "path": "tests/integration/run.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n\tupdate_config '.process.args = [\"/bin/echo\", \"Hello World\"]'\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc run\" {\n\trunc run test_hello\n\t[ \"$status\" -eq 0 ]\n\n\trunc state test_hello\n\t[ \"$status\" -ne 0 ]\n}\n\n@test \"runc run --keep\" {\n\trunc run --keep test_run_keep\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_run_keep stopped\n\n\trunc state test_run_keep\n\t[ \"$status\" -eq 0 ]\n\n\trunc delete test_run_keep\n\n\trunc state test_run_keep\n\t[ \"$status\" -ne 0 ]\n}\n\n@test \"runc run --keep (check cgroup exists)\" {\n\t# for systemd driver, the unit's cgroup path will be auto removed if container's all processes exited\n\trequires no_systemd\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tset_cgroups_path\n\n\trunc run --keep test_run_keep\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_run_keep stopped\n\n\trunc state test_run_keep\n\t[ \"$status\" -eq 0 ]\n\n\t# check that cgroup exists\n\tcheck_cgroup_value \"pids.max\" \"max\"\n\n\trunc delete test_run_keep\n\n\trunc state test_run_keep\n\t[ \"$status\" -ne 0 ]\n}\n\n@test \"runc run [hostname domainname]\" {\n\tupdate_config ' .process.args |= [\"sh\"]\n\t\t\t| .hostname = \"myhostname\"\n\t\t\t| .domainname= \"mydomainname\"'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_utc\n\t[ \"$status\" -eq 0 ]\n\n\t# test hostname\n\trunc exec test_utc hostname\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == *'myhostname'* ]]\n\n\t# test domainname\n\trunc exec test_utc cat /proc/sys/kernel/domainname\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == *'mydomainname'* ]]\n}\n\n# https://github.com/opencontainers/runc/issues/3952\n@test \"runc run with tmpfs\" {\n\trequires root\n\n\tchmod 'a=rwx,ug+s,+t' rootfs/tmp # set all bits\n\tmode=$(stat -c %A rootfs/tmp)\n\n\tupdate_config '.process.args = [\"sh\", \"-c\", \"stat -c %A /tmp\"]'\n\tupdate_config '.mounts += [{\"destination\": \"/tmp\", \"type\": \"tmpfs\", \"source\": \"tmpfs\", \"options\":[\"noexec\",\"nosuid\",\"nodev\",\"rprivate\"]}]'\n\n\trunc run test_tmpfs\n\t[ \"$status\" -eq 0 ]\n\t[ \"${lines[0]}\" = \"$mode\" ]\n}\n\n@test \"runc run with tmpfs perms\" {\n\tupdate_config '.process.args = [\"sh\", \"-c\", \"stat -c %a /tmp/test\"]'\n\tupdate_config '.mounts += [{\"destination\": \"/tmp/test\", \"type\": \"tmpfs\", \"source\": \"tmpfs\", \"options\": [\"mode=0444\"]}]'\n\n\t# Directory is to be created by runc.\n\trunc run test_tmpfs\n\t[ \"$status\" -eq 0 ]\n\t[ \"${lines[0]}\" = \"444\" ]\n\n\t# Run a 2nd time with the pre-existing directory.\n\t# Ref: https://github.com/opencontainers/runc/issues/3911\n\trunc run test_tmpfs\n\t[ \"$status\" -eq 0 ]\n\t[ \"${lines[0]}\" = \"444\" ]\n\n\t# Existing directory, custom perms, no mode on the mount,\n\t# so it should use the directory's perms.\n\tupdate_config '.mounts[-1].options = []'\n\tchmod 0710 rootfs/tmp/test\n\trunc run test_tmpfs\n\t[ \"$status\" -eq 0 ]\n\t[ \"${lines[0]}\" = \"710\" ]\n\n\t# Add back the mode on the mount, and it should use that instead.\n\t# Just for fun, use different perms than was used earlier.\n\tupdate_config '.mounts[-1].options = [\"mode=0410\"]'\n\trunc run test_tmpfs\n\t[ \"$status\" -eq 0 ]\n\t[ \"${lines[0]}\" = \"410\" ]\n}\n\n@test \"runc run [/proc/self/exe clone]\" {\n\trunc --debug run test_hello\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" = *\"Hello World\"* ]]\n\t[[ \"$output\" = *\"runc exeseal: using /proc/self/exe clone\"* ]]\n\t# runc will use fsopen(\"overlay\") if it can.\n\tif can_fsopen overlay; then\n\t\t[[ \"$output\" = *\"runc exeseal: using overlayfs for sealed /proc/self/exe\"* ]]\n\tfi\n}\n\n@test \"runc run [joining existing container namespaces]\" {\n\trequires timens\n\n\t# Create a detached container with the namespaces we want. We notably want\n\t# to include both userns and timens, which require config-related\n\t# configuration.\n\tif [ $EUID -eq 0 ]; then\n\t\tupdate_config '.linux.namespaces += [{\"type\": \"user\"}]\n\t\t\t| .linux.uidMappings += [{\"containerID\": 0, \"hostID\": 100000, \"size\": 100}]\n\t\t\t| .linux.gidMappings += [{\"containerID\": 0, \"hostID\": 200000, \"size\": 200}]'\n\t\tremap_rootfs\n\tfi\n\tupdate_config '.linux.namespaces += [{\"type\": \"time\"}]\n\t\t| .linux.timeOffsets = {\n\t\t\t\"monotonic\": { \"secs\": 7881, \"nanosecs\": 2718281 },\n\t\t\t\"boottime\": { \"secs\": 1337, \"nanosecs\": 3141519 }\n\t\t}'\n\tupdate_config '.process.args = [\"sleep\", \"infinity\"]'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" target_ctr\n\t[ \"$status\" -eq 0 ]\n\n\t# Modify our container's configuration such that it is just going to\n\t# inherit all of the namespaces of the target container.\n\t#\n\t# NOTE: We cannot join the mount namespace of another container because of\n\t# some quirks of the runtime-spec. In particular, we MUST pivot_root into\n\t# root.path and root.path MUST be set in the config, so runc cannot just\n\t# ignore root.path when joining namespaces (and root.path doesn't exist\n\t# inside root.path, for obvious reasons).\n\t#\n\t# We could hack around this (create a copy of the rootfs inside the rootfs,\n\t# or use a simpler mount namespace target), but those wouldn't be similar\n\t# tests to the other namespace joining tests.\n\ttarget_pid=\"$(__runc state target_ctr | jq .pid)\"\n\tupdate_config '.linux.namespaces |= map_values(.path = if .type == \"mount\" then \"\" else \"/proc/'\"$target_pid\"'/ns/\" + ({\"network\": \"net\", \"mount\": \"mnt\"}[.type] // .type) end)'\n\t# Remove the userns and timens configuration (they cannot be changed).\n\tupdate_config '.linux |= (del(.uidMappings) | del(.gidMappings) | del(.timeOffsets))'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" attached_ctr\n\t[ \"$status\" -eq 0 ]\n\n\t# Make sure there are two sleep processes in our container.\n\trunc exec attached_ctr ps aux\n\t[ \"$status\" -eq 0 ]\n\trun -0 grep \"sleep infinity\" <<<\"$output\"\n\t[ \"${#lines[@]}\" -eq 2 ]\n\n\t# ... that the userns mappings are the same...\n\trunc exec attached_ctr cat /proc/self/uid_map\n\t[ \"$status\" -eq 0 ]\n\tif [ $EUID -eq 0 ]; then\n\t\tgrep -E '^\\s+0\\s+100000\\s+100$' <<<\"$output\"\n\telse\n\t\tgrep -E '^\\s+0\\s+'$EUID'\\s+1$' <<<\"$output\"\n\tfi\n\trunc exec attached_ctr cat /proc/self/gid_map\n\t[ \"$status\" -eq 0 ]\n\tif [ $EUID -eq 0 ]; then\n\t\tgrep -E '^\\s+0\\s+200000\\s+200$' <<<\"$output\"\n\telse\n\t\tgrep -E '^\\s+0\\s+'$EUID'\\s+1$' <<<\"$output\"\n\tfi\n\n\t# ... as well as the timens offsets.\n\trunc exec attached_ctr cat /proc/self/timens_offsets\n\tgrep -E '^monotonic\\s+7881\\s+2718281$' <<<\"$output\"\n\tgrep -E '^boottime\\s+1337\\s+3141519$' <<<\"$output\"\n}\n\n@test \"runc run [execve error]\" {\n\tcat <<EOF >rootfs/run.sh\n#!/mmnnttbb foo bar\nsh\nEOF\n\tchmod +x rootfs/run.sh\n\tupdate_config '.process.args = [ \"/run.sh\" ]'\n\trunc run test_hello\n\t[ \"$status\" -ne 0 ]\n\n\t# After the sync socket closed, we should not send error to parent\n\t# process, or else we will get a unnecessary error log(#4171).\n\t[ ${#lines[@]} -eq 1 ]\n\t[[ ${lines[0]} = \"exec /run.sh: no such file or directory\" ]]\n}\n\n# https://github.com/opencontainers/runc/issues/4688\n@test \"runc run check default home\" {\n\t# cannot start containers as another user in rootless setup without idmap\n\t[ $EUID -ne 0 ] && requires rootless_idmap\n\techo 'tempuser:x:2000:2000:tempuser:/home/tempuser:/bin/sh' >>rootfs/etc/passwd\n\n\t# shellcheck disable=SC2016\n\tupdate_config '\t  .process.cwd = \"/root\"\n\t\t\t| .process.user.uid = 2000\n\t\t\t| .process.args |= [\"sh\", \"-c\", \"echo $HOME\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[ \"${lines[0]}\" = \"/home/tempuser\" ]\n}\n"
  },
  {
    "path": "tests/integration/scheduler.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\trequires root\n\tsetup_debian\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"scheduler is applied\" {\n\tupdate_config ' .process.scheduler = {\n\t\t\"policy\": \"SCHED_BATCH\",\n\t\t\"priority\": 0,\n\t\t\"nice\": 19\n\t}'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_scheduler\n\t[ \"$status\" -eq 0 ]\n\n\t# Check init settings.\n\trunc exec test_scheduler chrt -p 1\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == *\"scheduling policy: SCHED_BATCH\" ]]\n\t[[ \"${lines[1]}\" == *\"priority: 0\" ]]\n\n\t# Check exec settings derived from config.json.\n\trunc exec test_scheduler sh -c 'chrt -p $$'\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${lines[0]}\" == *\"scheduling policy: SCHED_BATCH\" ]]\n\t[[ \"${lines[1]}\" == *\"priority: 0\" ]]\n\n\t# Another exec, with different scheduler settings.\n\tproc='\n{\n\t\"terminal\": false,\n\t\"args\": [ \"/bin/sleep\", \"600\" ],\n\t\"cwd\": \"/\",\n\t\"scheduler\": {\n\t\t\"policy\": \"SCHED_DEADLINE\",\n\t\t\"flags\": [ \"SCHED_FLAG_RESET_ON_FORK\" ],\n\t\t\"nice\": 19,\n\t\t\"priority\": 0,\n\t\t\"runtime\": 42000,\n\t\t\"deadline\": 100000,\n\t\t\"period\": 1000000\n\t}\n}'\n\t__runc exec -d --pid-file pid.txt --process <(echo \"$proc\") test_scheduler\n\n\trun -0 chrt -p \"$(cat pid.txt)\"\n\t[[ \"${lines[0]}\" == *\"scheduling policy: SCHED_DEADLINE|SCHED_RESET_ON_FORK\" ]]\n\t[[ \"${lines[1]}\" == *\"priority: 0\" ]]\n\t[[ \"${lines[2]}\" == *\"runtime/deadline/period parameters: 42000/100000/1000000\" ]]\n}\n\n# Checks that runc emits a specific error when scheduling policy is used\n# together with specific CPUs. As documented in sched_setattr(2):\n#\n#   ERRORS:\n#   ...\n#        EPERM  The CPU affinity mask of the thread specified by pid does not\n#        include all CPUs  in  the  system (see sched_setaffinity(2)).\n#\n@test \"scheduler vs cpus\" {\n\trequires smp\n\n\tupdate_config ' .linux.resources.cpu.cpus = \"0\"\n\t\t| .process.scheduler = {\"policy\": \"SCHED_DEADLINE\", \"nice\": 19, \"runtime\": 42000, \"deadline\": 1000000, \"period\": 1000000, }'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_scheduler\n\t[ \"$status\" -eq 1 ]\n\t[[ \"$output\" == *\"process scheduler can't be used together with AllowedCPUs\"* ]]\n}\n"
  },
  {
    "path": "tests/integration/seccomp-notify-compat.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tif is_kernel_gte 5.6; then\n\t\tskip \"requires kernel < 5.6\"\n\tfi\n\n\trequires arch_x86_64\n\n\tsetup_seccompagent\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_seccompagent\n\tteardown_bundle\n}\n\n# Support for seccomp notify requires Linux > 5.6, check that on older kernels\n# return an error.\n@test \"runc run [seccomp] (SCMP_ACT_NOTIFY old kernel)\" {\n\t# Use just any seccomp profile with a notify action.\n\tupdate_config ' .linux.seccomp = {\n\t\t\t\t\"defaultAction\": \"SCMP_ACT_ALLOW\",\n\t\t\t\t\"listenerPath\": \"'\"$SECCCOMP_AGENT_SOCKET\"'\",\n\t\t\t\t\"architectures\": [ \"SCMP_ARCH_X86\",\"SCMP_ARCH_X32\", \"SCMP_ARCH_X86_64\" ],\n\t\t\t\t\"syscalls\": [{ \"names\": [ \"mkdir\" ], \"action\": \"SCMP_ACT_NOTIFY\" }]\n\t\t\t}'\n\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"seccomp notify unsupported:\"* ]]\n}\n"
  },
  {
    "path": "tests/integration/seccomp-notify.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\n# Support for seccomp notify requires Linux > 5.6 because\n# runc uses the pidfd_getfd system call to fetch the seccomp fd.\n# https://github.com/torvalds/linux/commit/8649c322f75c96e7ced2fec201e123b2b073bf09\n# We also require arch x86_64, to not make this fail when people run tests\n# locally on other archs.\nfunction setup() {\n\trequires_kernel 5.6\n\trequires arch_x86_64\n\n\tsetup_seccompagent\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_seccompagent\n\tteardown_bundle\n}\n\n# Create config.json template with SCMP_ACT_NOTIFY actions\n# $1: command to run\n# $2: noNewPrivileges (false/true)\n# $3: list of syscalls\nfunction scmp_act_notify_template() {\n\t# The agent intercepts mkdir syscalls and creates the folder appending\n\t# \"-bar\" (listenerMetadata below) to the name.\n\tupdate_config '   .process.args = [\"/bin/sh\", \"-c\", \"'\"$1\"'\"]\n\t\t\t| .process.noNewPrivileges = '\"$2\"'\n\t\t\t| .linux.seccomp = {\n\t\t\t\t\"defaultAction\":\"SCMP_ACT_ALLOW\",\n\t\t\t\t\"listenerPath\": \"'\"$SECCCOMP_AGENT_SOCKET\"'\",\n\t\t\t\t\"listenerMetadata\": \"bar\",\n\t\t\t\t\"architectures\": [ \"SCMP_ARCH_X86\",\"SCMP_ARCH_X32\", \"SCMP_ARCH_X86_64\" ],\n\t\t\t\t\"syscalls\": [{ \"names\": ['\"$3\"'], \"action\": \"SCMP_ACT_NOTIFY\" }]\n\t\t\t}'\n}\n\n# The call to seccomp is done at different places according to the value of\n# noNewPrivileges, for this reason many of the following cases are tested with\n# both values.\n\n# Test basic actions handled by the agent work fine. noNewPrivileges FALSE.\n@test \"runc run [seccomp] (SCMP_ACT_NOTIFY noNewPrivileges false)\" {\n\tscmp_act_notify_template \"mkdir /dev/shm/foo && stat /dev/shm/foo-bar\" false '\"mkdir\"'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n# Test basic actions handled by the agent work fine. noNewPrivileges TRUE.\n@test \"runc run [seccomp] (SCMP_ACT_NOTIFY noNewPrivileges true)\" {\n\tscmp_act_notify_template \"mkdir /dev/shm/foo && stat /dev/shm/foo-bar\" true '\"mkdir\"'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc run [seccomp] (SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV)\" {\n\tscmp_act_notify_template \"mkdir /dev/shm/foo && stat /dev/shm/foo-bar\" false '\"mkdir\"'\n\tupdate_config '.linux.seccomp.flags = [ \"SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV\" ]'\n\n\trunc --debug run test_busybox\n\tif [ \"$status\" -ne 0 ]; then\n\t\t# Older libseccomp or kernel?\n\t\tif [[ \"$output\" == *\"error adding WaitKill flag to seccomp filter: SetWaitKill requires \"* ]]; then\n\t\t\tskip \"$(sed -e 's/^.*SetWaitKill //' -e 's/\" func=.*$//' <<<\"$output\")\"\n\t\tfi\n\t\t# Otherwise, fail.\n\t\t[ \"$status\" -eq 0 ]\n\tfi\n\t# Check the numeric flags value, as printed in the debug log, is as expected.\n\t# 32: SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV\n\t#  8: SECCOMP_FILTER_FLAG_NEW_LISTENER\n\texp='\"seccomp filter flags: 40\"'\n\techo \"expecting $exp\"\n\t[[ \"$output\" == *\"$exp\"* ]]\n}\n\n# Test actions not-handled by the agent work fine. noNewPrivileges FALSE.\n@test \"runc exec [seccomp] (SCMP_ACT_NOTIFY noNewPrivileges false)\" {\n\trequires root\n\n\tscmp_act_notify_template \"sleep infinity\" false '\"mkdir\"'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_busybox /bin/sh -c \"mkdir /dev/shm/foo && stat /dev/shm/foo-bar\"\n\t[ \"$status\" -eq 0 ]\n}\n\n# Test actions not-handled by the agent work fine. noNewPrivileges TRUE.\n@test \"runc exec [seccomp] (SCMP_ACT_NOTIFY noNewPrivileges true)\" {\n\trequires root\n\n\tscmp_act_notify_template \"sleep infinity\" true '\"mkdir\"'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\trunc exec test_busybox /bin/sh -c \"mkdir /dev/shm/foo && stat /dev/shm/foo-bar\"\n\t[ \"$status\" -eq 0 ]\n}\n\n# Test important syscalls (some might be executed by runc) work fine when handled by the agent. noNewPrivileges FALSE.\n# fcntl: https://github.com/opencontainers/runc/issues/4328\n@test \"runc run [seccomp] (SCMP_ACT_NOTIFY important syscalls noNewPrivileges false)\" {\n\tscmp_act_notify_template \"/bin/true\" false '\"execve\",\"openat\",\"open\",\"read\",\"close\",\"fcntl\"'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n# Test important syscalls (some might be executed by runc) work fine when handled by the agent. noNewPrivileges TRUE.\n@test \"runc run [seccomp] (SCMP_ACT_NOTIFY important syscalls noNewPrivileges true)\" {\n\tscmp_act_notify_template \"/bin/true\" true '\"execve\",\"openat\",\"open\",\"read\",\"close\",\"fcntl\"'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n# Ignore listenerPath if the profile doesn't use seccomp notify actions.\n@test \"runc run [seccomp] (ignore listener path if no notify act)\" {\n\tupdate_config '   .process.args = [\"/bin/sh\", \"-c\", \"mkdir /dev/shm/foo && stat /dev/shm/foo\"]\n\t\t\t| .linux.seccomp = {\n\t\t\t\t\"defaultAction\":\"SCMP_ACT_ALLOW\",\n\t\t\t\t\"listenerPath\": \"'\"$SECCCOMP_AGENT_SOCKET\"'\",\n\t\t\t\t\"listenerMetadata\": \"bar\",\n\t\t\t}'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n# Ensure listenerPath is present if the profile uses seccomp notify actions.\n@test \"runc run [seccomp] (SCMP_ACT_NOTIFY empty listener path and notify act)\" {\n\tscmp_act_notify_template \"/bin/true\" false '\"mkdir\"'\n\tupdate_config '.linux.seccomp.listenerPath = \"\"'\n\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n}\n\n# Test using an invalid socket (none listening) as listenerPath fails.\n@test \"runc run [seccomp] (SCMP_ACT_NOTIFY wrong listener path)\" {\n\tscmp_act_notify_template \"/bin/true\" false '\"mkdir\"'\n\tupdate_config '.linux.seccomp.listenerPath = \"/some-non-existing-listener-path.sock\"'\n\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n}\n\n# Test using an invalid abstract socket as listenerPath fails.\n@test \"runc run [seccomp] (SCMP_ACT_NOTIFY wrong abstract listener path)\" {\n\tscmp_act_notify_template \"/bin/true\" false '\"mkdir\"'\n\tupdate_config '.linux.seccomp.listenerPath = \"@mysocketishere\"'\n\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n}\n\n# Check that killing the seccompagent doesn't block syscalls in\n# the container. They should return ENOSYS instead.\n@test \"runc run [seccomp] (SCMP_ACT_NOTIFY kill seccompagent)\" {\n\tscmp_act_notify_template \"sleep 4 && mkdir /dev/shm/foo\" false '\"mkdir\"'\n\n\tsleep 2 && teardown_seccompagent &\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"mkdir:\"*\"/dev/shm/foo\"*\"Function not implemented\"* ]]\n}\n\n# Check that starting with no seccomp agent running fails with a clear error.\n@test \"runc run [seccomp] (SCMP_ACT_NOTIFY no seccompagent)\" {\n\tteardown_seccompagent\n\n\tscmp_act_notify_template \"/bin/true\" false '\"mkdir\"'\n\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"failed to connect with seccomp agent\"* ]]\n}\n\n# Check that agent-returned error for the syscall works.\n@test \"runc run [seccomp] (SCMP_ACT_NOTIFY error chmod)\" {\n\tscmp_act_notify_template \"touch /dev/shm/foo && chmod 777 /dev/shm/foo\" false '\"chmod\", \"fchmod\", \"fchmodat\"'\n\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"chmod:\"*\"/dev/shm/foo\"*\"No medium found\"* ]]\n}\n\n# check that trying to use SCMP_ACT_NOTIFY with write() gives a meaningful error.\n@test \"runc run [seccomp] (SCMP_ACT_NOTIFY write)\" {\n\tscmp_act_notify_template \"/bin/true\" false '\"write\"'\n\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"SCMP_ACT_NOTIFY cannot be used for the write syscall\"* ]]\n}\n\n# check that a startContainer hook doesn't get any extra file descriptor.\n@test \"runc run [seccomp] (SCMP_ACT_NOTIFY startContainer hook)\" {\n\t# shellcheck disable=SC2016\n\t# We use single quotes to properly delimit the $1 param to\n\t# update_config(), but shellcheck is quite silly and fails if the\n\t# multi-line string includes some $var (even when it is properly outside of the\n\t# single quotes) or when we use this syntax to execute commands in the\n\t# string: $(command).\n\t# So, just disable this check for our usage of update_config().\n\tupdate_config '   .process.args = [\"/bin/true\"]\n\t\t\t| .linux.seccomp = {\n\t\t\t\t\"defaultAction\":\"SCMP_ACT_ALLOW\",\n\t\t\t\t\"listenerPath\": \"'\"$SECCCOMP_AGENT_SOCKET\"'\",\n\t\t\t\t\"architectures\": [ \"SCMP_ARCH_X86\", \"SCMP_ARCH_X32\", \"SCMP_ARCH_X86_64\" ],\n\t\t\t\t\"syscalls\":[{ \"names\": [ \"mkdir\" ], \"action\": \"SCMP_ACT_NOTIFY\" }]\n\t\t\t}\n\t\t\t|.hooks = {\n\t\t\t\t\"startContainer\": [ {\n\t\t\t\t\t\t\"path\": \"/bin/sh\",\n\t\t\t\t\t\t\"args\": [\n\t\t\t\t\t\t\t\"sh\",\n\t\t\t\t\t\t\t\"-c\",\n\t\t\t\t\t\t\t\"if [ $(ls /proc/self/fd/ | wc -l) -ne 4 ]; then echo \\\"File descriptors is not 4\\\". && ls /proc/self/fd/ | wc -l && exit 1; fi\"\n\t\t\t\t\t\t],\n\t\t\t\t} ]\n\t\t\t}'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n# Check that example config in the seccomp agent dir works.\n@test \"runc run [seccomp] (SCMP_ACT_NOTIFY example config)\" {\n\t# Run the script used in the seccomp agent example.\n\t# This takes a bare config.json and modifies it to run an example.\n\t\"${INTEGRATION_ROOT}/../../tests/cmd/seccompagent/gen-seccomp-example-cfg.sh\"\n\n\t# The listenerPath the previous command uses is the default used by the\n\t# seccomp agent. However, inside bats the socket is in a bats tmp dir.\n\tupdate_config '.linux.seccomp.listenerPath = \"'\"$SECCCOMP_AGENT_SOCKET\"'\"'\n\n\trunc run test_busybox\n\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == *\"chmod:\"*\"test-file\"*\"No medium found\"* ]]\n}\n"
  },
  {
    "path": "tests/integration/seccomp.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc run [seccomp -ENOSYS handling]\" {\n\tTEST_NAME=\"seccomp_syscall_test1\"\n\n\t# Compile the test binary and update the config to run it.\n\tgcc -static -o rootfs/seccomp_test \"${TESTDATA}/${TEST_NAME}.c\"\n\tupdate_config \".linux.seccomp = $(<\"${TESTDATA}/${TEST_NAME}.json\")\"\n\tupdate_config '.process.args = [\"/seccomp_test\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc run [seccomp defaultErrnoRet=ENXIO]\" {\n\tTEST_NAME=\"seccomp_syscall_test2\"\n\n\t# Compile the test binary and update the config to run it.\n\tgcc -static -o rootfs/seccomp_test2 \"${TESTDATA}/${TEST_NAME}.c\"\n\tupdate_config \".linux.seccomp = $(<\"${TESTDATA}/${TEST_NAME}.json\")\"\n\tupdate_config '.process.args = [\"/seccomp_test2\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n# TODO:\n# - Test other actions like SCMP_ACT_TRAP, SCMP_ACT_TRACE, SCMP_ACT_LOG.\n# - Test args (index, value, valueTwo, etc).\n\n@test \"runc run [seccomp] (SCMP_ACT_ERRNO default)\" {\n\tupdate_config '   .process.args = [\"/bin/sh\", \"-c\", \"mkdir /dev/shm/foo\"]\n\t\t\t| .process.noNewPrivileges = false\n\t\t\t| .linux.seccomp = {\n\t\t\t\t\"defaultAction\":\"SCMP_ACT_ALLOW\",\n\t\t\t\t\"architectures\":[\"SCMP_ARCH_X86\",\"SCMP_ARCH_X32\",\"SCMP_ARCH_X86_64\",\"SCMP_ARCH_AARCH64\",\"SCMP_ARCH_ARM\"],\n\t\t\t\t\"syscalls\":[{\"names\":[\"mkdir\",\"mkdirat\"], \"action\":\"SCMP_ACT_ERRNO\"}]\n\t\t\t}'\n\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"mkdir:\"*\"/dev/shm/foo\"*\"Operation not permitted\"* ]]\n}\n\n@test \"runc run [seccomp] (SCMP_ACT_ERRNO explicit errno)\" {\n\tupdate_config '   .process.args = [\"/bin/sh\", \"-c\", \"mkdir /dev/shm/foo\"]\n\t\t\t| .process.noNewPrivileges = false\n\t\t\t| .linux.seccomp = {\n\t\t\t\t\"defaultAction\":\"SCMP_ACT_ALLOW\",\n\t\t\t\t\"architectures\":[\"SCMP_ARCH_X86\",\"SCMP_ARCH_X32\",\"SCMP_ARCH_X86_64\",\"SCMP_ARCH_AARCH64\",\"SCMP_ARCH_ARM\"],\n\t\t\t\t\"syscalls\":[{\"names\":[\"mkdir\",\"mkdirat\"], \"action\":\"SCMP_ACT_ERRNO\", \"errnoRet\": 100}]\n\t\t\t}'\n\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"Network is down\"* ]]\n}\n\n# Prints the numeric value of provided seccomp flags combination.\n# The parameter is flags string, as supplied in OCI spec, for example\n# '\"SECCOMP_FILTER_FLAG_TSYNC\",\"SECCOMP_FILTER_FLAG_LOG\"'.\nfunction flags_value() {\n\t# Numeric values of seccomp flags.\n\tdeclare -A values=(\n\t\t['\"SECCOMP_FILTER_FLAG_TSYNC\"']=0 # Supported but ignored by runc, thus 0.\n\t\t['\"SECCOMP_FILTER_FLAG_LOG\"']=2\n\t\t['\"SECCOMP_FILTER_FLAG_SPEC_ALLOW\"']=4\n\t\t# XXX: add new values above this line.\n\t)\n\t# Split the flags.\n\tIFS=',' read -ra flags <<<\"$1\"\n\n\tlocal flag v sum=0\n\tfor flag in \"${flags[@]}\"; do\n\t\t# This will produce \"values[$flag]: unbound variable\"\n\t\t# error for a new flag yet unknown to the test.\n\t\tv=${values[$flag]}\n\t\t((sum += v)) || true\n\tdone\n\n\techo $sum\n}\n\n@test \"runc run [seccomp] (SECCOMP_FILTER_FLAG_*)\" {\n\tupdate_config '   .process.args = [\"/bin/sh\", \"-c\", \"mkdir /dev/shm/foo\"]\n\t\t\t| .process.noNewPrivileges = false\n\t\t\t| .linux.seccomp = {\n\t\t\t\t\"defaultAction\":\"SCMP_ACT_ALLOW\",\n\t\t\t\t\"architectures\":[\"SCMP_ARCH_X86\",\"SCMP_ARCH_X32\",\"SCMP_ARCH_X86_64\",\"SCMP_ARCH_AARCH64\",\"SCMP_ARCH_ARM\"],\n\t\t\t\t\"syscalls\":[{\"names\":[\"mkdir\", \"mkdirat\"], \"action\":\"SCMP_ACT_ERRNO\"}]\n\t\t\t}'\n\n\t# Get the list of flags supported by runc/seccomp/kernel,\n\t# or \"null\" if no flags are supported or runc is too old.\n\t#\n\t# Filter out WAIT_KILLABLE_RECV as it requires a listener,\n\t# and thus tested separately in seccomp-notify.bats.\n\tmapfile -t flags < <(__runc features | jq -c '.linux.seccomp.supportedFlags' |\n\t\ttr -d '[]\\n' | tr ',' '\\n' | grep -v 'WAIT_KILLABLE_RECV')\n\n\t# This is a set of all possible flag combinations to test.\n\tdeclare -A TEST_CASES=(\n\t\t['EMPTY']=0  # Special value: empty set of flags.\n\t\t['REMOVE']=0 # Special value: no flags set.\n\t)\n\n\t# If supported, runc should set SPEC_ALLOW if no flags are set.\n\tif [[ \" ${flags[*]} \" == *' \"SECCOMP_FILTER_FLAG_SPEC_ALLOW\" '* ]]; then\n\t\tTEST_CASES['REMOVE']=$(flags_value '\"SECCOMP_FILTER_FLAG_SPEC_ALLOW\"')\n\tfi\n\n\t# Add all possible combinations of seccomp flags\n\t# and their expected numeric values to TEST_CASES.\n\tif [ \"${flags[0]}\" != \"null\" ]; then\n\t\t# Use shell {a,}{b,}{c,} to generate the powerset.\n\t\tfor fc in $(eval echo \"$(printf \"{'%s,',}\" \"${flags[@]}\")\"); do\n\t\t\t# Remove the last comma.\n\t\t\tfc=\"${fc/%,/}\"\n\t\t\tTEST_CASES[$fc]=$(flags_value \"$fc\")\n\t\tdone\n\tfi\n\n\t# Finally, run the tests.\n\tfor key in \"${!TEST_CASES[@]}\"; do\n\t\tcase \"$key\" in\n\t\t'REMOVE')\n\t\t\tupdate_config ' del(.linux.seccomp.flags)'\n\t\t\t;;\n\t\t'EMPTY')\n\t\t\tupdate_config ' .linux.seccomp.flags = []'\n\t\t\t;;\n\t\t*)\n\t\t\tupdate_config ' .linux.seccomp.flags = [ '\"${key}\"' ]'\n\t\t\t;;\n\t\tesac\n\n\t\trunc --debug run test_busybox\n\t\t[ \"$status\" -ne 0 ]\n\t\t[[ \"$output\" == *\"mkdir:\"*\"/dev/shm/foo\"*\"Operation not permitted\"* ]]\n\n\t\t# Check the numeric flags value, as printed in the debug log, is as expected.\n\t\texp=\"\\\"seccomp filter flags: ${TEST_CASES[$key]}\\\"\"\n\t\techo \"flags $key, expecting $exp\"\n\t\t[[ \"$output\" == *\"$exp\"* ]]\n\tdone\n}\n\n@test \"runc run [seccomp] (SCMP_ACT_KILL)\" {\n\tupdate_config '  .process.args = [\"/bin/sh\", \"-c\", \"mkdir /dev/shm/foo\"]\n\t\t\t| .process.noNewPrivileges = false\n\t\t\t| .process.rlimits = [{\"type\": \"RLIMIT_CORE\", \"soft\": 0, \"hard\": 0}]\n\t\t\t| .linux.seccomp = {\n\t\t\t\t\"defaultAction\":\"SCMP_ACT_ALLOW\",\n\t\t\t\t\"architectures\":[\"SCMP_ARCH_X86\",\"SCMP_ARCH_X32\",\"SCMP_ARCH_X86_64\",\"SCMP_ARCH_AARCH64\",\"SCMP_ARCH_ARM\"],\n\t\t\t\t\"syscalls\":[{\"names\":[\"mkdir\",\"mkdirat\"], \"action\":\"SCMP_ACT_KILL\"}]\n\t\t\t}'\n\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n}\n\n# check that a startContainer hook is run with the seccomp filters applied\n@test \"runc run [seccomp] (startContainer hook)\" {\n\tupdate_config '   .process.args = [\"/bin/true\"]\n\t\t\t| .linux.seccomp = {\n\t\t\t\t\"defaultAction\":\"SCMP_ACT_ALLOW\",\n\t\t\t\t\"architectures\":[\"SCMP_ARCH_X86\",\"SCMP_ARCH_X32\",\"SCMP_ARCH_X86_64\",\"SCMP_ARCH_AARCH64\",\"SCMP_ARCH_ARM\"],\n\t\t\t\t\"syscalls\":[{\"names\":[\"mkdir\",\"mkdirat\"], \"action\":\"SCMP_ACT_KILL\"}]\n\t\t\t}\n\t\t\t| .process.rlimits = [{\"type\": \"RLIMIT_CORE\", \"soft\": 0, \"hard\": 0}]\n\t\t\t| .hooks = {\n\t\t\t\t\"startContainer\": [ {\n\t\t\t\t\t\t\"path\": \"/bin/sh\",\n\t\t\t\t\t\t\"args\": [\"sh\", \"-c\", \"mkdir /dev/shm/foo\"]\n\t\t\t\t} ]\n\t\t\t}'\n\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"error running startContainer hook\"* ]]\n\t[[ \"$output\" == *\"bad system call\"* ]]\n}\n\n@test \"runc run [seccomp] (verify syscall compatibility after seccomp enforcement)\" {\n\tupdate_config '   .process.args = [\"true\"]\n\t\t\t| .process.noNewPrivileges = false\n\t\t\t| .linux.seccomp = {\n\t\t\t\t\"defaultAction\":\"SCMP_ACT_ALLOW\",\n\t\t\t\t\"architectures\":[\"SCMP_ARCH_X86\",\"SCMP_ARCH_X32\",\"SCMP_ARCH_X86_64\",\"SCMP_ARCH_AARCH64\",\"SCMP_ARCH_ARM\"],\n\t\t\t\t\"syscalls\":[{\"names\":[\"close_range\", \"fsopen\", \"fsconfig\", \"fspick\", \"openat2\", \"open_tree\", \"move_mount\", \"mount_setattr\"], \"action\":\"SCMP_ACT_ERRNO\", \"errnoRet\": 38}]\n\t\t\t}'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n"
  },
  {
    "path": "tests/integration/selinux.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\trequires root # for chcon\n\tif ! selinuxenabled; then\n\t\tskip \"requires SELinux enabled\"\n\tfi\n\n\tsetup_busybox\n\n\t# Use a copy of runc binary with proper selinux label set.\n\tcp \"$RUNC\" ./runc\n\texport RUNC=\"$PWD/runc\"\n\tchcon -u system_u -r object_r -t container_runtime_exec_t \"$RUNC\"\n\n\t# Label container fs.\n\tchcon -u system_u -r object_r -t container_file_t -R rootfs\n\n\t# Save the start date and time for ausearch.\n\tAU_DD=\"$(date +%x)\"\n\tAU_TT=\"$(date +%H:%M:%S)\"\n}\n\nfunction teardown() {\n\tteardown_bundle\n\t# Show any avc denials.\n\tif [[ -v AU_DD && -v AU_TT ]] && command -v ausearch &>/dev/null; then\n\t\tausearch -ts \"$AU_DD\" \"$AU_TT\" -i -m avc,user_avc || true\n\tfi\n}\n\n# This needs to be placed at the top of the bats file to work around\n# a shellcheck bug. See <https://github.com/koalaman/shellcheck/issues/2873>.\nfunction run_check_label() {\n\tHELPER=\"key_label\"\n\tcp \"${TESTBINDIR}/${HELPER}\" rootfs/bin/\n\n\tLABEL=\"system_u:system_r:container_t:s0:c4,c5\"\n\tupdate_config '\t  .process.selinuxLabel |= \"'\"$LABEL\"'\"\n\t\t\t| .process.args = [\"/bin/'\"$HELPER\"'\"]'\n\trunc run tst\n\t[ \"$status\" -eq 0 ]\n\t# Key name is _ses.$CONTAINER_NAME.\n\tKEY=_ses.tst\n\t[ \"$output\" == \"$KEY $LABEL\" ]\n}\n\n# This needs to be placed at the top of the bats file to work around\n# a shellcheck bug. See <https://github.com/koalaman/shellcheck/issues/2873>.\nfunction exec_check_label() {\n\tHELPER=\"key_label\"\n\tcp \"${TESTBINDIR}/${HELPER}\" rootfs/bin/\n\n\tLABEL=\"system_u:system_r:container_t:s0:c4,c5\"\n\tupdate_config '\t  .process.selinuxLabel |= \"'\"$LABEL\"'\"\n\t\t\t| .process.args = [\"/bin/sh\"]'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" tst\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec tst \"/bin/$HELPER\"\n\t[ \"$status\" -eq 0 ]\n\t# Key name is _ses.$CONTAINER_NAME.\n\tKEY=_ses.tst\n\t[ \"$output\" == \"$KEY $LABEL\" ]\n}\n\nfunction enable_userns() {\n\tupdate_config '\t  .linux.namespaces += [{\"type\": \"user\"}]\n\t\t\t| .linux.uidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}]\n\t\t\t| .linux.gidMappings += [{\"hostID\": 200000, \"containerID\": 0, \"size\": 65534}]'\n\tremap_rootfs\n}\n\n# Baseline test, to check that runc works with selinux enabled.\n@test \"runc run (no selinux label)\" {\n\tupdate_config '\t  .process.args = [\"/bin/true\"]'\n\trunc run tst\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc run (custom selinux label)\" {\n\tupdate_config '\t  .process.selinuxLabel |= \"system_u:system_r:container_t:s0:c4,c5\"\n\t\t\t| .process.args = [\"/bin/true\"]'\n\trunc run tst\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc run (session keyring security label)\" {\n\trun_check_label\n}\n\n@test \"runc exec (session keyring security label)\" {\n\texec_check_label\n}\n\n@test \"runc run (session keyring security label + userns)\" {\n\tenable_userns\n\trun_check_label\n}\n\n@test \"runc exec (session keyring security label + userns)\" {\n\tenable_userns\n\texec_check_label\n}\n"
  },
  {
    "path": "tests/integration/spec.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n\tupdate_config '.process.args = [\"/bin/echo\", \"Hello World\"]'\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"spec generation cwd\" {\n\trunc run test_hello\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"spec generation --bundle\" {\n\trunc run --bundle \"$(pwd)\" test_hello\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"spec validator\" {\n\trequires rootless_no_features\n\n\tSPEC_VERSION=$(awk '$1 == \"github.com/opencontainers/runtime-spec\" {print $2}' \"$BATS_TEST_DIRNAME\"/../../go.mod)\n\t# Will look like this when not pinned to specific tag: \"v0.0.0-20190207185410-29686dbc5559\", otherwise \"v1.0.0\"\n\tSPEC_COMMIT=$(cut -d \"-\" -f 3 <<<\"$SPEC_VERSION\")\n\tSPEC_REF=$([[ -z \"$SPEC_COMMIT\" ]] && echo \"$SPEC_VERSION\" || echo \"$SPEC_COMMIT\")\n\n\tgit clone https://github.com/opencontainers/runtime-spec.git\n\t(cd runtime-spec && git reset --hard \"$SPEC_REF\")\n\n\tcd runtime-spec/schema\n\tgo mod init runtime-spec\n\tgo mod tidy\n\tgo build ./validate.go\n\n\t./validate config-schema.json ../../config.json\n}\n"
  },
  {
    "path": "tests/integration/start.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc start\" {\n\trunc create --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox created\n\n\trunc start test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\trunc delete --force test_busybox\n\n\trunc state test_busybox\n\t[ \"$status\" -ne 0 ]\n}\n"
  },
  {
    "path": "tests/integration/start_detached.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc run detached\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\ttestcontainer test_busybox running\n}\n\n@test \"runc run detached ({u,g}id != 0)\" {\n\t# cannot start containers as another user in rootless setup without idmap\n\t[ $EUID -ne 0 ] && requires rootless_idmap\n\n\t# replace \"uid\": 0 with \"uid\": 1000\n\t# and do a similar thing for gid.\n\tupdate_config ' (.. | select(.uid? == 0)) .uid |= 1000\n\t\t| (.. | select(.gid? == 0)) .gid |= 100'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n}\n\n@test \"runc run detached --pid-file\" {\n\trunc run --pid-file pid.txt -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\t[ -e pid.txt ]\n\t[[ \"$(cat pid.txt)\" == $(__runc state test_busybox | jq '.pid') ]]\n}\n\n@test \"runc run detached --pid-file with new CWD\" {\n\tbundle=\"$(pwd)\"\n\tmkdir pid_file\n\tcd pid_file\n\n\trunc run --pid-file pid.txt -d -b \"$bundle\" --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\t[ -e pid.txt ]\n\t[[ \"$(cat pid.txt)\" == $(__runc state test_busybox | jq '.pid') ]]\n}\n"
  },
  {
    "path": "tests/integration/start_hello.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n\tupdate_config '.process.args = [\"/bin/echo\", \"Hello World\"]'\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc run\" {\n\trunc run test_hello\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${output}\" == *\"Hello\"* ]]\n}\n\n@test \"runc run ({u,g}id != 0)\" {\n\t# cannot start containers as another user in rootless setup without idmap\n\t[ $EUID -ne 0 ] && requires rootless_idmap\n\n\t# replace \"uid\": 0 with \"uid\": 1000\n\t# and do a similar thing for gid.\n\tupdate_config ' (.. | select(.uid? == 0)) .uid |= 1000\n\t\t| (.. | select(.gid? == 0)) .gid |= 100'\n\n\trunc run test_hello\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${output}\" == *\"Hello\"* ]]\n}\n\n# https://github.com/opencontainers/runc/issues/3715.\n#\n# Fails when using Go 1.20 < 1.20.2, the reasons is https://go.dev/issue/58552.\n@test \"runc run as user with no exec bit but CAP_DAC_OVERRIDE set\" {\n\trequires root # Can't chown/chmod otherwise.\n\n\t# Remove exec perm for everyone but owner (root).\n\tchown 0 rootfs/bin/echo\n\tchmod go-x rootfs/bin/echo\n\n\t# Replace \"uid\": 0 with \"uid\": 1000 and do a similar thing for gid.\n\tupdate_config '\t  (.. | select(.uid? == 0)) .uid |= 1000\n\t\t\t| (.. | select(.gid? == 0)) .gid |= 100'\n\n\t# Sanity check: make sure we can't run the container w/o CAP_DAC_OVERRIDE.\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n\n\t# Enable CAP_DAC_OVERRIDE.\n\tupdate_config '\t  .process.capabilities.bounding += [\"CAP_DAC_OVERRIDE\"]\n\t\t\t| .process.capabilities.effective += [\"CAP_DAC_OVERRIDE\"]\n\t\t\t| .process.capabilities.inheritable += [\"CAP_DAC_OVERRIDE\"]\n\t\t\t| .process.capabilities.ambient += [\"CAP_DAC_OVERRIDE\"]\n\t\t\t| .process.capabilities.permitted += [\"CAP_DAC_OVERRIDE\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc run with rootfs set to .\" {\n\tcp config.json rootfs/.\n\trm config.json\n\tcd rootfs\n\tupdate_config '(.. | select(. == \"rootfs\")) |= \".\"'\n\n\trunc run test_hello\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${output}\" == *\"Hello\"* ]]\n}\n\n@test \"runc run --pid-file\" {\n\trunc run --pid-file pid.txt test_hello\n\t[ \"$status\" -eq 0 ]\n\t[[ \"${output}\" == *\"Hello\"* ]]\n\n\t[ -e pid.txt ]\n\t[[ \"$(cat pid.txt)\" =~ [0-9]+ ]]\n}\n\n# https://github.com/opencontainers/runc/pull/2897\n@test \"runc run [rootless with host pidns]\" {\n\trequires rootless_no_features\n\n\t# Remove pid namespace, and replace /proc mount\n\t# with a bind mount from the host.\n\tupdate_config '\t  .linux.namespaces -= [{\"type\": \"pid\"}]\n\t\t\t| .mounts |= map((select(.type == \"proc\")\n\t\t\t\t| .type = \"none\"\n\t\t\t\t| .source = \"/proc\"\n\t\t\t\t| .options = [\"rbind\", \"nosuid\", \"nodev\", \"noexec\"]\n\t\t\t  ) // .)'\n\n\trunc run test_hello\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc run [redundant seccomp rules]\" {\n\tupdate_config '\t  .linux.seccomp = {\n\t\t\t\t\"defaultAction\": \"SCMP_ACT_ALLOW\",\n\t\t\t\t\"syscalls\": [{\n\t\t\t\t\t\"names\": [\"bdflush\"],\n\t\t\t\t\t\"action\": \"SCMP_ACT_ALLOW\",\n\t\t\t\t}]\n\t\t\t    }'\n\trunc run test_hello\n\t[ \"$status\" -eq 0 ]\n}\n"
  },
  {
    "path": "tests/integration/state.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"state (kill + delete)\" {\n\trunc state test_busybox\n\t[ \"$status\" -ne 0 ]\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\trunc kill test_busybox KILL\n\t[ \"$status\" -eq 0 ]\n\twait_for_container 10 1 test_busybox stopped\n\n\trunc delete test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc state test_busybox\n\t[ \"$status\" -ne 0 ]\n}\n\n@test \"state (pause + resume)\" {\n\t# XXX: pause and resume require cgroups.\n\trequires root\n\n\trunc state test_busybox\n\t[ \"$status\" -ne 0 ]\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\trunc pause test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox paused\n\n\trunc resume test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n}\n"
  },
  {
    "path": "tests/integration/testdata/.gitignore",
    "content": "busybox-*.tar.xz\ndebian-*.tar.xz\n"
  },
  {
    "path": "tests/integration/testdata/dev_access_test.c",
    "content": "#include <stdio.h>\n#include <unistd.h>\n\nint main(int argc, char *argv[])\n{\n\tconst char *dev_name = \"/dev/kmsg\";\n\n\tif (argc > 1)\n\t\tdev_name = argv[1];\n\n\tif (access(dev_name, F_OK) < 0) {\n\t\tperror(dev_name);\n\t\treturn 1;\n\t}\n\n\treturn 0;\n}\n"
  },
  {
    "path": "tests/integration/testdata/seccomp_syscall_test1.c",
    "content": "#define _GNU_SOURCE\n#include <stdio.h>\n#include <stdlib.h>\n#include <unistd.h>\n#include <assert.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <sched.h>\n\n#include <sys/types.h>\n#include <sys/socket.h>\n#include <sys/syscall.h>\n\nstatic int exit_code = 0;\n\n/*\n * We need raw wrappers around each syscall so that glibc won't rewrite the\n * errno value when it is returned from the seccomp filter (glibc has a habit\n * of hiding -ENOSYS if possible -- which counters what we're trying to test).\n */\n#define raw(name, ...) \\\n\tsyscall(SYS_ ## name, ##__VA_ARGS__)\n\n#define syscall_assert(sval, rval)\t\t\t\t\t\\\n\tdo {\t\t\t\t\t\t\t\t\\\n\t\tint L = (sval), R = (rval);\t\t\t\t\\\n\t\tif (L < 0)\t\t\t\t\t\t\\\n\t\t\tL = -errno;\t\t\t\t\t\\\n\t\tif (L != R) {\t\t\t\t\t\t\\\n\t\t\tprintf(\"syscall_assert(%s == %s) failed: %d != %d\\n\", #sval, #rval, L, R); \\\n\t\t\texit_code = 32;\t\t\t\t\t\\\n\t\t}\t\t\t\t\t\t\t\\\n\t} while (0)\n\nint main(void)\n{\n\t// Basic permitted syscalls.\n\tsyscall_assert(write(-1, NULL, 0), -EBADF);\n\n\t// Basic syscall with masked rules.\n\tsyscall_assert(raw(socket, AF_UNIX, SOCK_STREAM, 0x000), 3);\n\tsyscall_assert(raw(socket, AF_UNIX, SOCK_STREAM, 0x0FF), -EPROTONOSUPPORT);\n\tsyscall_assert(raw(socket, AF_UNIX, SOCK_STREAM, 0x001), 4);\n\tsyscall_assert(raw(socket, AF_UNIX, SOCK_STREAM, 0x100), -EPERM);\n\tsyscall_assert(raw(socket, AF_UNIX, SOCK_STREAM, 0xC00), -EPERM);\n\n\t// Multiple arguments with OR rules.\n\tsyscall_assert(raw(process_vm_readv, 100, NULL, 0, NULL, 0, ~0), -EINVAL);\n\tsyscall_assert(raw(process_vm_readv, 9001, NULL, 0, NULL, 0, ~0), -EINVAL);\n\tsyscall_assert(raw(process_vm_readv, 0, NULL, 0, NULL, 0, ~0), -EPERM);\n\tsyscall_assert(raw(process_vm_readv, 0, NULL, 0, NULL, 0, ~0), -EPERM);\n\n\t// Multiple arguments with OR rules -- rule is ERRNO(-ENOANO).\n\tsyscall_assert(raw(process_vm_writev, 1337, NULL, 0, NULL, 0, ~0), -ENOANO);\n\tsyscall_assert(raw(process_vm_writev, 2020, NULL, 0, NULL, 0, ~0), -ENOANO);\n\tsyscall_assert(raw(process_vm_writev, 0, NULL, 0, NULL, 0, ~0), -EPERM);\n\tsyscall_assert(raw(process_vm_writev, 0, NULL, 0, NULL, 0, ~0), -EPERM);\n\n\t// Multiple arguments with AND rules.\n\tsyscall_assert(raw(ftruncate, 123456789, 1337), -EBADF);\n\tsyscall_assert(raw(ftruncate, 123456789, 0), -EPERM);\n\tsyscall_assert(raw(ftruncate, 500, 1337), -EPERM);\n\tsyscall_assert(raw(ftruncate, 500, 500), -EPERM);\n\n\t// Multiple rules for the same syscall.\n\tsyscall_assert(raw(dup3, 0, -100, 0xFFFF), -EPERM);\n\tsyscall_assert(raw(dup3, 1, -100, 0xFFFF), -EINVAL);\n\tsyscall_assert(raw(dup3, 2, -100, 0xFFFF), -EPERM);\n\tsyscall_assert(raw(dup3, 3, -100, 0xFFFF), -EINVAL);\n\n\t// Explicitly denied syscalls (those in Linux 3.0) get -EPERM.\n\tsyscall_assert(raw(unshare, 0), -EPERM);\n\tsyscall_assert(raw(setns, 0, 0), -EPERM);\n\n\t// Out-of-bounds fake syscall.\n\tsyscall_assert(syscall(1000, 0xDEADBEEF, 0xCAFEFEED, 0x1337), -ENOSYS);\n\n\treturn exit_code;\n}\n"
  },
  {
    "path": "tests/integration/testdata/seccomp_syscall_test1.json",
    "content": "{\n\t\"defaultAction\": \"SCMP_ACT_ERRNO\",\n\t\"architectures\": [\n\t\t\"SCMP_ARCH_X86\",\n\t\t\"SCMP_ARCH_X32\",\n\t\t\"SCMP_ARCH_X86_64\",\n\t\t\"SCMP_ARCH_AARCH64\",\n\t\t\"SCMP_ARCH_ARM\"\n\t],\n\t\"syscalls\": [\n\t\t{\n\t\t\t\"action\": \"SCMP_ACT_ALLOW\",\n\t\t\t\"names\": [\n\t\t\t\t\"accept\",\n\t\t\t\t\"accept4\",\n\t\t\t\t\"access\",\n\t\t\t\t\"adjtimex\",\n\t\t\t\t\"alarm\",\n\t\t\t\t\"arch_prctl\",\n\t\t\t\t\"bind\",\n\t\t\t\t\"brk\",\n\t\t\t\t\"capget\",\n\t\t\t\t\"capset\",\n\t\t\t\t\"chdir\",\n\t\t\t\t\"chmod\",\n\t\t\t\t\"chown\",\n\t\t\t\t\"chown32\",\n\t\t\t\t\"clock_adjtime\",\n\t\t\t\t\"clock_adjtime64\",\n\t\t\t\t\"clock_getres\",\n\t\t\t\t\"clock_getres_time64\",\n\t\t\t\t\"clock_gettime\",\n\t\t\t\t\"clock_gettime64\",\n\t\t\t\t\"clock_nanosleep\",\n\t\t\t\t\"clock_nanosleep_time64\",\n\t\t\t\t\"close\",\n\t\t\t\t\"connect\",\n\t\t\t\t\"copy_file_range\",\n\t\t\t\t\"creat\",\n\t\t\t\t\"dup\",\n\t\t\t\t\"dup2\",\n\t\t\t\t\"epoll_create\",\n\t\t\t\t\"epoll_create1\",\n\t\t\t\t\"epoll_ctl\",\n\t\t\t\t\"epoll_ctl_old\",\n\t\t\t\t\"epoll_pwait\",\n\t\t\t\t\"epoll_wait\",\n\t\t\t\t\"epoll_wait_old\",\n\t\t\t\t\"eventfd\",\n\t\t\t\t\"eventfd2\",\n\t\t\t\t\"execve\",\n\t\t\t\t\"execveat\",\n\t\t\t\t\"exit\",\n\t\t\t\t\"exit_group\",\n\t\t\t\t\"faccessat\",\n\t\t\t\t\"faccessat2\",\n\t\t\t\t\"fadvise64\",\n\t\t\t\t\"fadvise64_64\",\n\t\t\t\t\"fallocate\",\n\t\t\t\t\"fanotify_mark\",\n\t\t\t\t\"fchdir\",\n\t\t\t\t\"fchmod\",\n\t\t\t\t\"fchmodat\",\n\t\t\t\t\"fchown\",\n\t\t\t\t\"fchown32\",\n\t\t\t\t\"fchownat\",\n\t\t\t\t\"fcntl\",\n\t\t\t\t\"fcntl64\",\n\t\t\t\t\"fdatasync\",\n\t\t\t\t\"fgetxattr\",\n\t\t\t\t\"flistxattr\",\n\t\t\t\t\"flock\",\n\t\t\t\t\"fork\",\n\t\t\t\t\"fremovexattr\",\n\t\t\t\t\"fsetxattr\",\n\t\t\t\t\"fstat\",\n\t\t\t\t\"fstat64\",\n\t\t\t\t\"fstatat64\",\n\t\t\t\t\"fstatfs\",\n\t\t\t\t\"fstatfs64\",\n\t\t\t\t\"fsync\",\n\t\t\t\t\"futex\",\n\t\t\t\t\"futex_time64\",\n\t\t\t\t\"futimesat\",\n\t\t\t\t\"getcpu\",\n\t\t\t\t\"getcwd\",\n\t\t\t\t\"getdents\",\n\t\t\t\t\"getdents64\",\n\t\t\t\t\"getegid\",\n\t\t\t\t\"getegid32\",\n\t\t\t\t\"geteuid\",\n\t\t\t\t\"geteuid32\",\n\t\t\t\t\"getgid\",\n\t\t\t\t\"getgid32\",\n\t\t\t\t\"getgroups\",\n\t\t\t\t\"getgroups32\",\n\t\t\t\t\"getitimer\",\n\t\t\t\t\"getpeername\",\n\t\t\t\t\"getpgid\",\n\t\t\t\t\"getpgrp\",\n\t\t\t\t\"getpid\",\n\t\t\t\t\"getppid\",\n\t\t\t\t\"getpriority\",\n\t\t\t\t\"getrandom\",\n\t\t\t\t\"getresgid\",\n\t\t\t\t\"getresgid32\",\n\t\t\t\t\"getresuid\",\n\t\t\t\t\"getresuid32\",\n\t\t\t\t\"getrlimit\",\n\t\t\t\t\"get_robust_list\",\n\t\t\t\t\"getrusage\",\n\t\t\t\t\"getsid\",\n\t\t\t\t\"getsockname\",\n\t\t\t\t\"getsockopt\",\n\t\t\t\t\"get_thread_area\",\n\t\t\t\t\"gettid\",\n\t\t\t\t\"gettimeofday\",\n\t\t\t\t\"getuid\",\n\t\t\t\t\"getuid32\",\n\t\t\t\t\"getxattr\",\n\t\t\t\t\"inotify_add_watch\",\n\t\t\t\t\"inotify_init\",\n\t\t\t\t\"inotify_init1\",\n\t\t\t\t\"inotify_rm_watch\",\n\t\t\t\t\"io_cancel\",\n\t\t\t\t\"ioctl\",\n\t\t\t\t\"io_destroy\",\n\t\t\t\t\"io_getevents\",\n\t\t\t\t\"io_pgetevents\",\n\t\t\t\t\"io_pgetevents_time64\",\n\t\t\t\t\"ioprio_get\",\n\t\t\t\t\"ioprio_set\",\n\t\t\t\t\"io_setup\",\n\t\t\t\t\"io_submit\",\n\t\t\t\t\"io_uring_enter\",\n\t\t\t\t\"io_uring_register\",\n\t\t\t\t\"io_uring_setup\",\n\t\t\t\t\"ipc\",\n\t\t\t\t\"kill\",\n\t\t\t\t\"lchown\",\n\t\t\t\t\"lchown32\",\n\t\t\t\t\"lgetxattr\",\n\t\t\t\t\"link\",\n\t\t\t\t\"linkat\",\n\t\t\t\t\"listen\",\n\t\t\t\t\"listxattr\",\n\t\t\t\t\"llistxattr\",\n\t\t\t\t\"_llseek\",\n\t\t\t\t\"lremovexattr\",\n\t\t\t\t\"lseek\",\n\t\t\t\t\"lsetxattr\",\n\t\t\t\t\"lstat\",\n\t\t\t\t\"lstat64\",\n\t\t\t\t\"madvise\",\n\t\t\t\t\"membarrier\",\n\t\t\t\t\"memfd_create\",\n\t\t\t\t\"mincore\",\n\t\t\t\t\"mkdir\",\n\t\t\t\t\"mkdirat\",\n\t\t\t\t\"mknod\",\n\t\t\t\t\"mknodat\",\n\t\t\t\t\"mlock\",\n\t\t\t\t\"mlock2\",\n\t\t\t\t\"mlockall\",\n\t\t\t\t\"mmap\",\n\t\t\t\t\"mmap2\",\n\t\t\t\t\"modify_ldt\",\n\t\t\t\t\"mprotect\",\n\t\t\t\t\"mq_getsetattr\",\n\t\t\t\t\"mq_notify\",\n\t\t\t\t\"mq_open\",\n\t\t\t\t\"mq_timedreceive\",\n\t\t\t\t\"mq_timedreceive_time64\",\n\t\t\t\t\"mq_timedsend\",\n\t\t\t\t\"mq_timedsend_time64\",\n\t\t\t\t\"mq_unlink\",\n\t\t\t\t\"mremap\",\n\t\t\t\t\"msgctl\",\n\t\t\t\t\"msgget\",\n\t\t\t\t\"msgrcv\",\n\t\t\t\t\"msgsnd\",\n\t\t\t\t\"msync\",\n\t\t\t\t\"munlock\",\n\t\t\t\t\"munlockall\",\n\t\t\t\t\"munmap\",\n\t\t\t\t\"nanosleep\",\n\t\t\t\t\"newfstatat\",\n\t\t\t\t\"_newselect\",\n\t\t\t\t\"open\",\n\t\t\t\t\"openat\",\n\t\t\t\t\"openat2\",\n\t\t\t\t\"pause\",\n\t\t\t\t\"pidfd_open\",\n\t\t\t\t\"pidfd_send_signal\",\n\t\t\t\t\"pipe\",\n\t\t\t\t\"pipe2\",\n\t\t\t\t\"poll\",\n\t\t\t\t\"ppoll\",\n\t\t\t\t\"ppoll_time64\",\n\t\t\t\t\"prctl\",\n\t\t\t\t\"pread64\",\n\t\t\t\t\"preadv\",\n\t\t\t\t\"preadv2\",\n\t\t\t\t\"prlimit64\",\n\t\t\t\t\"pselect6\",\n\t\t\t\t\"pselect6_time64\",\n\t\t\t\t\"pwrite64\",\n\t\t\t\t\"pwritev\",\n\t\t\t\t\"pwritev2\",\n\t\t\t\t\"read\",\n\t\t\t\t\"readahead\",\n\t\t\t\t\"readlink\",\n\t\t\t\t\"readlinkat\",\n\t\t\t\t\"readv\",\n\t\t\t\t\"recv\",\n\t\t\t\t\"recvfrom\",\n\t\t\t\t\"recvmmsg\",\n\t\t\t\t\"recvmmsg_time64\",\n\t\t\t\t\"recvmsg\",\n\t\t\t\t\"remap_file_pages\",\n\t\t\t\t\"removexattr\",\n\t\t\t\t\"rename\",\n\t\t\t\t\"renameat\",\n\t\t\t\t\"renameat2\",\n\t\t\t\t\"restart_syscall\",\n\t\t\t\t\"rmdir\",\n\t\t\t\t\"rseq\",\n\t\t\t\t\"rt_sigaction\",\n\t\t\t\t\"rt_sigpending\",\n\t\t\t\t\"rt_sigprocmask\",\n\t\t\t\t\"rt_sigqueueinfo\",\n\t\t\t\t\"rt_sigreturn\",\n\t\t\t\t\"rt_sigsuspend\",\n\t\t\t\t\"rt_sigtimedwait\",\n\t\t\t\t\"rt_sigtimedwait_time64\",\n\t\t\t\t\"rt_tgsigqueueinfo\",\n\t\t\t\t\"sched_getaffinity\",\n\t\t\t\t\"sched_getattr\",\n\t\t\t\t\"sched_getparam\",\n\t\t\t\t\"sched_get_priority_max\",\n\t\t\t\t\"sched_get_priority_min\",\n\t\t\t\t\"sched_getscheduler\",\n\t\t\t\t\"sched_rr_get_interval\",\n\t\t\t\t\"sched_rr_get_interval_time64\",\n\t\t\t\t\"sched_setaffinity\",\n\t\t\t\t\"sched_setattr\",\n\t\t\t\t\"sched_setparam\",\n\t\t\t\t\"sched_setscheduler\",\n\t\t\t\t\"sched_yield\",\n\t\t\t\t\"seccomp\",\n\t\t\t\t\"select\",\n\t\t\t\t\"semctl\",\n\t\t\t\t\"semget\",\n\t\t\t\t\"semop\",\n\t\t\t\t\"semtimedop\",\n\t\t\t\t\"semtimedop_time64\",\n\t\t\t\t\"send\",\n\t\t\t\t\"sendfile\",\n\t\t\t\t\"sendfile64\",\n\t\t\t\t\"sendmmsg\",\n\t\t\t\t\"sendmsg\",\n\t\t\t\t\"sendto\",\n\t\t\t\t\"setfsgid\",\n\t\t\t\t\"setfsgid32\",\n\t\t\t\t\"setfsuid\",\n\t\t\t\t\"setfsuid32\",\n\t\t\t\t\"setgid\",\n\t\t\t\t\"setgid32\",\n\t\t\t\t\"setgroups\",\n\t\t\t\t\"setgroups32\",\n\t\t\t\t\"setitimer\",\n\t\t\t\t\"setpgid\",\n\t\t\t\t\"setpriority\",\n\t\t\t\t\"setregid\",\n\t\t\t\t\"setregid32\",\n\t\t\t\t\"setresgid\",\n\t\t\t\t\"setresgid32\",\n\t\t\t\t\"setresuid\",\n\t\t\t\t\"setresuid32\",\n\t\t\t\t\"setreuid\",\n\t\t\t\t\"setreuid32\",\n\t\t\t\t\"setrlimit\",\n\t\t\t\t\"set_robust_list\",\n\t\t\t\t\"setsid\",\n\t\t\t\t\"setsockopt\",\n\t\t\t\t\"set_thread_area\",\n\t\t\t\t\"set_tid_address\",\n\t\t\t\t\"setuid\",\n\t\t\t\t\"setuid32\",\n\t\t\t\t\"setxattr\",\n\t\t\t\t\"shmat\",\n\t\t\t\t\"shmctl\",\n\t\t\t\t\"shmdt\",\n\t\t\t\t\"shmget\",\n\t\t\t\t\"shutdown\",\n\t\t\t\t\"sigaltstack\",\n\t\t\t\t\"signalfd\",\n\t\t\t\t\"signalfd4\",\n\t\t\t\t\"sigprocmask\",\n\t\t\t\t\"sigreturn\",\n\t\t\t\t\"socketcall\",\n\t\t\t\t\"socketpair\",\n\t\t\t\t\"splice\",\n\t\t\t\t\"stat\",\n\t\t\t\t\"stat64\",\n\t\t\t\t\"statfs\",\n\t\t\t\t\"statfs64\",\n\t\t\t\t\"statx\",\n\t\t\t\t\"symlink\",\n\t\t\t\t\"symlinkat\",\n\t\t\t\t\"sync\",\n\t\t\t\t\"sync_file_range\",\n\t\t\t\t\"syncfs\",\n\t\t\t\t\"sysinfo\",\n\t\t\t\t\"tee\",\n\t\t\t\t\"tgkill\",\n\t\t\t\t\"time\",\n\t\t\t\t\"timer_create\",\n\t\t\t\t\"timer_delete\",\n\t\t\t\t\"timer_getoverrun\",\n\t\t\t\t\"timer_gettime\",\n\t\t\t\t\"timer_gettime64\",\n\t\t\t\t\"timer_settime\",\n\t\t\t\t\"timer_settime64\",\n\t\t\t\t\"timerfd_create\",\n\t\t\t\t\"timerfd_gettime\",\n\t\t\t\t\"timerfd_gettime64\",\n\t\t\t\t\"timerfd_settime\",\n\t\t\t\t\"timerfd_settime64\",\n\t\t\t\t\"times\",\n\t\t\t\t\"tkill\",\n\t\t\t\t\"truncate\",\n\t\t\t\t\"truncate64\",\n\t\t\t\t\"ugetrlimit\",\n\t\t\t\t\"umask\",\n\t\t\t\t\"uname\",\n\t\t\t\t\"unlink\",\n\t\t\t\t\"unlinkat\",\n\t\t\t\t\"utime\",\n\t\t\t\t\"utimensat\",\n\t\t\t\t\"utimensat_time64\",\n\t\t\t\t\"utimes\",\n\t\t\t\t\"vfork\",\n\t\t\t\t\"vmsplice\",\n\t\t\t\t\"wait4\",\n\t\t\t\t\"waitid\",\n\t\t\t\t\"waitpid\",\n\t\t\t\t\"write\",\n\t\t\t\t\"writev\"\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"action\": \"SCMP_ACT_ALLOW\",\n\t\t\t\"names\": [\n\t\t\t\t\"dup3\"\n\t\t\t],\n\t\t\t\"args\": [\n\t\t\t\t{\n\t\t\t\t\t\"index\": 0,\n\t\t\t\t\t\"value\": 1,\n\t\t\t\t\t\"op\": \"SCMP_CMP_EQ\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"action\": \"SCMP_ACT_ALLOW\",\n\t\t\t\"names\": [\n\t\t\t\t\"dup3\"\n\t\t\t],\n\t\t\t\"args\": [\n\t\t\t\t{\n\t\t\t\t\t\"index\": 0,\n\t\t\t\t\t\"value\": 2,\n\t\t\t\t\t\"op\": \"SCMP_CMP_GT\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"action\": \"SCMP_ACT_ALLOW\",\n\t\t\t\"names\": [\n\t\t\t\t\"ftruncate\",\n\t\t\t\t\"ftruncate64\"\n\t\t\t],\n\t\t\t\"args\": [\n\t\t\t\t{\n\t\t\t\t\t\"index\": 0,\n\t\t\t\t\t\"value\": 123456789,\n\t\t\t\t\t\"op\": \"SCMP_CMP_EQ\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"index\": 1,\n\t\t\t\t\t\"value\": 1337,\n\t\t\t\t\t\"op\": \"SCMP_CMP_EQ\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"action\": \"SCMP_ACT_ALLOW\",\n\t\t\t\"names\": [\n\t\t\t\t\"process_vm_readv\"\n\t\t\t],\n\t\t\t\"args\": [\n\t\t\t\t{\n\t\t\t\t\t\"index\": 0,\n\t\t\t\t\t\"value\": 100,\n\t\t\t\t\t\"op\": \"SCMP_CMP_EQ\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"index\": 0,\n\t\t\t\t\t\"value\": 9001,\n\t\t\t\t\t\"op\": \"SCMP_CMP_EQ\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"action\": \"SCMP_ACT_ERRNO\",\n\t\t\t\"errnoRet\": 55,\n\t\t\t\"names\": [\n\t\t\t\t\"process_vm_writev\"\n\t\t\t],\n\t\t\t\"args\": [\n\t\t\t\t{\n\t\t\t\t\t\"index\": 0,\n\t\t\t\t\t\"value\": 1337,\n\t\t\t\t\t\"op\": \"SCMP_CMP_EQ\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"index\": 0,\n\t\t\t\t\t\"value\": 2020,\n\t\t\t\t\t\"op\": \"SCMP_CMP_EQ\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"action\": \"SCMP_ACT_ALLOW\",\n\t\t\t\"names\": [\n\t\t\t\t\"clone\"\n\t\t\t],\n\t\t\t\"args\": [\n\t\t\t\t{\n\t\t\t\t\t\"index\": 0,\n\t\t\t\t\t\"value\": 2114060288,\n\t\t\t\t\t\"op\": \"SCMP_CMP_MASKED_EQ\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"action\": \"SCMP_ACT_ALLOW\",\n\t\t\t\"names\": [\n\t\t\t\t\"socket\"\n\t\t\t],\n\t\t\t\"args\": [\n\t\t\t\t{\n\t\t\t\t\t\"index\": 2,\n\t\t\t\t\t\"value\": 3840,\n\t\t\t\t\t\"valueTwo\": 0,\n\t\t\t\t\t\"op\": \"SCMP_CMP_MASKED_EQ\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n}\n\n"
  },
  {
    "path": "tests/integration/testdata/seccomp_syscall_test2.c",
    "content": "#include <unistd.h>\n#include <errno.h>\n#include <stdio.h>\n#include <stdlib.h>\n\nint main()\n{\n\tif (chdir(\"/\") < 0 && errno == ENXIO)\n\t\texit(EXIT_SUCCESS);\n\tfprintf(stderr, \"got errno=%m\\n\");\n\texit(EXIT_FAILURE);\n}\n"
  },
  {
    "path": "tests/integration/testdata/seccomp_syscall_test2.json",
    "content": "{\n\t\"defaultAction\": \"SCMP_ACT_ERRNO\",\n\t\"defaultErrnoRet\": 6,\n\t\"architectures\": [\n\t\t\"SCMP_ARCH_X86\",\n\t\t\"SCMP_ARCH_X32\",\n\t\t\"SCMP_ARCH_X86_64\",\n\t\t\"SCMP_ARCH_AARCH64\",\n\t\t\"SCMP_ARCH_ARM\"\n\t],\n\t\"syscalls\": [\n\t\t{\n\t\t\t\"action\": \"SCMP_ACT_ALLOW\",\n\t\t\t\"names\": [\n\t\t\t\t\"accept\",\n\t\t\t\t\"accept4\",\n\t\t\t\t\"access\",\n\t\t\t\t\"adjtimex\",\n\t\t\t\t\"alarm\",\n\t\t\t\t\"arch_prctl\",\n\t\t\t\t\"bind\",\n\t\t\t\t\"brk\",\n\t\t\t\t\"capget\",\n\t\t\t\t\"capset\",\n\t\t\t\t\"chmod\",\n\t\t\t\t\"chown\",\n\t\t\t\t\"chown32\",\n\t\t\t\t\"clock_adjtime\",\n\t\t\t\t\"clock_adjtime64\",\n\t\t\t\t\"clock_getres\",\n\t\t\t\t\"clock_getres_time64\",\n\t\t\t\t\"clock_gettime\",\n\t\t\t\t\"clock_gettime64\",\n\t\t\t\t\"clock_nanosleep\",\n\t\t\t\t\"clock_nanosleep_time64\",\n\t\t\t\t\"close\",\n\t\t\t\t\"connect\",\n\t\t\t\t\"copy_file_range\",\n\t\t\t\t\"creat\",\n\t\t\t\t\"dup\",\n\t\t\t\t\"dup2\",\n\t\t\t\t\"epoll_create\",\n\t\t\t\t\"epoll_create1\",\n\t\t\t\t\"epoll_ctl\",\n\t\t\t\t\"epoll_ctl_old\",\n\t\t\t\t\"epoll_pwait\",\n\t\t\t\t\"epoll_wait\",\n\t\t\t\t\"epoll_wait_old\",\n\t\t\t\t\"eventfd\",\n\t\t\t\t\"eventfd2\",\n\t\t\t\t\"execve\",\n\t\t\t\t\"execveat\",\n\t\t\t\t\"exit\",\n\t\t\t\t\"exit_group\",\n\t\t\t\t\"faccessat\",\n\t\t\t\t\"faccessat2\",\n\t\t\t\t\"fadvise64\",\n\t\t\t\t\"fadvise64_64\",\n\t\t\t\t\"fallocate\",\n\t\t\t\t\"fanotify_mark\",\n\t\t\t\t\"fchdir\",\n\t\t\t\t\"fchmod\",\n\t\t\t\t\"fchmodat\",\n\t\t\t\t\"fchown\",\n\t\t\t\t\"fchown32\",\n\t\t\t\t\"fchownat\",\n\t\t\t\t\"fcntl\",\n\t\t\t\t\"fcntl64\",\n\t\t\t\t\"fdatasync\",\n\t\t\t\t\"fgetxattr\",\n\t\t\t\t\"flistxattr\",\n\t\t\t\t\"flock\",\n\t\t\t\t\"fork\",\n\t\t\t\t\"fremovexattr\",\n\t\t\t\t\"fsetxattr\",\n\t\t\t\t\"fstat\",\n\t\t\t\t\"fstat64\",\n\t\t\t\t\"fstatat64\",\n\t\t\t\t\"fstatfs\",\n\t\t\t\t\"fstatfs64\",\n\t\t\t\t\"fsync\",\n\t\t\t\t\"ftruncate\",\n\t\t\t\t\"ftruncate64\",\n\t\t\t\t\"futex\",\n\t\t\t\t\"futex_time64\",\n\t\t\t\t\"futimesat\",\n\t\t\t\t\"getcpu\",\n\t\t\t\t\"getcwd\",\n\t\t\t\t\"getdents\",\n\t\t\t\t\"getdents64\",\n\t\t\t\t\"getegid\",\n\t\t\t\t\"getegid32\",\n\t\t\t\t\"geteuid\",\n\t\t\t\t\"geteuid32\",\n\t\t\t\t\"getgid\",\n\t\t\t\t\"getgid32\",\n\t\t\t\t\"getgroups\",\n\t\t\t\t\"getgroups32\",\n\t\t\t\t\"getitimer\",\n\t\t\t\t\"getpeername\",\n\t\t\t\t\"getpgid\",\n\t\t\t\t\"getpgrp\",\n\t\t\t\t\"getpid\",\n\t\t\t\t\"getppid\",\n\t\t\t\t\"getpriority\",\n\t\t\t\t\"getrandom\",\n\t\t\t\t\"getresgid\",\n\t\t\t\t\"getresgid32\",\n\t\t\t\t\"getresuid\",\n\t\t\t\t\"getresuid32\",\n\t\t\t\t\"getrlimit\",\n\t\t\t\t\"get_robust_list\",\n\t\t\t\t\"getrusage\",\n\t\t\t\t\"getsid\",\n\t\t\t\t\"getsockname\",\n\t\t\t\t\"getsockopt\",\n\t\t\t\t\"get_thread_area\",\n\t\t\t\t\"gettid\",\n\t\t\t\t\"gettimeofday\",\n\t\t\t\t\"getuid\",\n\t\t\t\t\"getuid32\",\n\t\t\t\t\"getxattr\",\n\t\t\t\t\"inotify_add_watch\",\n\t\t\t\t\"inotify_init\",\n\t\t\t\t\"inotify_init1\",\n\t\t\t\t\"inotify_rm_watch\",\n\t\t\t\t\"io_cancel\",\n\t\t\t\t\"ioctl\",\n\t\t\t\t\"io_destroy\",\n\t\t\t\t\"io_getevents\",\n\t\t\t\t\"io_pgetevents\",\n\t\t\t\t\"io_pgetevents_time64\",\n\t\t\t\t\"ioprio_get\",\n\t\t\t\t\"ioprio_set\",\n\t\t\t\t\"io_setup\",\n\t\t\t\t\"io_submit\",\n\t\t\t\t\"io_uring_enter\",\n\t\t\t\t\"io_uring_register\",\n\t\t\t\t\"io_uring_setup\",\n\t\t\t\t\"ipc\",\n\t\t\t\t\"kill\",\n\t\t\t\t\"lchown\",\n\t\t\t\t\"lchown32\",\n\t\t\t\t\"lgetxattr\",\n\t\t\t\t\"link\",\n\t\t\t\t\"linkat\",\n\t\t\t\t\"listen\",\n\t\t\t\t\"listxattr\",\n\t\t\t\t\"llistxattr\",\n\t\t\t\t\"_llseek\",\n\t\t\t\t\"lremovexattr\",\n\t\t\t\t\"lseek\",\n\t\t\t\t\"lsetxattr\",\n\t\t\t\t\"lstat\",\n\t\t\t\t\"lstat64\",\n\t\t\t\t\"madvise\",\n\t\t\t\t\"membarrier\",\n\t\t\t\t\"memfd_create\",\n\t\t\t\t\"mincore\",\n\t\t\t\t\"mkdir\",\n\t\t\t\t\"mkdirat\",\n\t\t\t\t\"mknod\",\n\t\t\t\t\"mknodat\",\n\t\t\t\t\"mlock\",\n\t\t\t\t\"mlock2\",\n\t\t\t\t\"mlockall\",\n\t\t\t\t\"mmap\",\n\t\t\t\t\"mmap2\",\n\t\t\t\t\"modify_ldt\",\n\t\t\t\t\"mprotect\",\n\t\t\t\t\"mq_getsetattr\",\n\t\t\t\t\"mq_notify\",\n\t\t\t\t\"mq_open\",\n\t\t\t\t\"mq_timedreceive\",\n\t\t\t\t\"mq_timedreceive_time64\",\n\t\t\t\t\"mq_timedsend\",\n\t\t\t\t\"mq_timedsend_time64\",\n\t\t\t\t\"mq_unlink\",\n\t\t\t\t\"mremap\",\n\t\t\t\t\"msgctl\",\n\t\t\t\t\"msgget\",\n\t\t\t\t\"msgrcv\",\n\t\t\t\t\"msgsnd\",\n\t\t\t\t\"msync\",\n\t\t\t\t\"munlock\",\n\t\t\t\t\"munlockall\",\n\t\t\t\t\"munmap\",\n\t\t\t\t\"nanosleep\",\n\t\t\t\t\"newfstatat\",\n\t\t\t\t\"_newselect\",\n\t\t\t\t\"open\",\n\t\t\t\t\"openat\",\n\t\t\t\t\"openat2\",\n\t\t\t\t\"pause\",\n\t\t\t\t\"pidfd_open\",\n\t\t\t\t\"pidfd_send_signal\",\n\t\t\t\t\"pipe\",\n\t\t\t\t\"pipe2\",\n\t\t\t\t\"poll\",\n\t\t\t\t\"ppoll\",\n\t\t\t\t\"ppoll_time64\",\n\t\t\t\t\"prctl\",\n\t\t\t\t\"pread64\",\n\t\t\t\t\"preadv\",\n\t\t\t\t\"preadv2\",\n\t\t\t\t\"prlimit64\",\n\t\t\t\t\"pselect6\",\n\t\t\t\t\"pselect6_time64\",\n\t\t\t\t\"pwrite64\",\n\t\t\t\t\"pwritev\",\n\t\t\t\t\"pwritev2\",\n\t\t\t\t\"read\",\n\t\t\t\t\"readahead\",\n\t\t\t\t\"readlink\",\n\t\t\t\t\"readlinkat\",\n\t\t\t\t\"readv\",\n\t\t\t\t\"recv\",\n\t\t\t\t\"recvfrom\",\n\t\t\t\t\"recvmmsg\",\n\t\t\t\t\"recvmmsg_time64\",\n\t\t\t\t\"recvmsg\",\n\t\t\t\t\"remap_file_pages\",\n\t\t\t\t\"removexattr\",\n\t\t\t\t\"rename\",\n\t\t\t\t\"renameat\",\n\t\t\t\t\"renameat2\",\n\t\t\t\t\"restart_syscall\",\n\t\t\t\t\"rmdir\",\n\t\t\t\t\"rseq\",\n\t\t\t\t\"rt_sigaction\",\n\t\t\t\t\"rt_sigpending\",\n\t\t\t\t\"rt_sigprocmask\",\n\t\t\t\t\"rt_sigqueueinfo\",\n\t\t\t\t\"rt_sigreturn\",\n\t\t\t\t\"rt_sigsuspend\",\n\t\t\t\t\"rt_sigtimedwait\",\n\t\t\t\t\"rt_sigtimedwait_time64\",\n\t\t\t\t\"rt_tgsigqueueinfo\",\n\t\t\t\t\"sched_getaffinity\",\n\t\t\t\t\"sched_getattr\",\n\t\t\t\t\"sched_getparam\",\n\t\t\t\t\"sched_get_priority_max\",\n\t\t\t\t\"sched_get_priority_min\",\n\t\t\t\t\"sched_getscheduler\",\n\t\t\t\t\"sched_rr_get_interval\",\n\t\t\t\t\"sched_rr_get_interval_time64\",\n\t\t\t\t\"sched_setaffinity\",\n\t\t\t\t\"sched_setattr\",\n\t\t\t\t\"sched_setparam\",\n\t\t\t\t\"sched_setscheduler\",\n\t\t\t\t\"sched_yield\",\n\t\t\t\t\"seccomp\",\n\t\t\t\t\"select\",\n\t\t\t\t\"semctl\",\n\t\t\t\t\"semget\",\n\t\t\t\t\"semop\",\n\t\t\t\t\"semtimedop\",\n\t\t\t\t\"semtimedop_time64\",\n\t\t\t\t\"send\",\n\t\t\t\t\"sendfile\",\n\t\t\t\t\"sendfile64\",\n\t\t\t\t\"sendmmsg\",\n\t\t\t\t\"sendmsg\",\n\t\t\t\t\"sendto\",\n\t\t\t\t\"setfsgid\",\n\t\t\t\t\"setfsgid32\",\n\t\t\t\t\"setfsuid\",\n\t\t\t\t\"setfsuid32\",\n\t\t\t\t\"setgid\",\n\t\t\t\t\"setgid32\",\n\t\t\t\t\"setgroups\",\n\t\t\t\t\"setgroups32\",\n\t\t\t\t\"setitimer\",\n\t\t\t\t\"setpgid\",\n\t\t\t\t\"setpriority\",\n\t\t\t\t\"setregid\",\n\t\t\t\t\"setregid32\",\n\t\t\t\t\"setresgid\",\n\t\t\t\t\"setresgid32\",\n\t\t\t\t\"setresuid\",\n\t\t\t\t\"setresuid32\",\n\t\t\t\t\"setreuid\",\n\t\t\t\t\"setreuid32\",\n\t\t\t\t\"setrlimit\",\n\t\t\t\t\"set_robust_list\",\n\t\t\t\t\"setsid\",\n\t\t\t\t\"setsockopt\",\n\t\t\t\t\"set_thread_area\",\n\t\t\t\t\"set_tid_address\",\n\t\t\t\t\"setuid\",\n\t\t\t\t\"setuid32\",\n\t\t\t\t\"setxattr\",\n\t\t\t\t\"shmat\",\n\t\t\t\t\"shmctl\",\n\t\t\t\t\"shmdt\",\n\t\t\t\t\"shmget\",\n\t\t\t\t\"shutdown\",\n\t\t\t\t\"sigaltstack\",\n\t\t\t\t\"signalfd\",\n\t\t\t\t\"signalfd4\",\n\t\t\t\t\"sigprocmask\",\n\t\t\t\t\"sigreturn\",\n\t\t\t\t\"socketcall\",\n\t\t\t\t\"socketpair\",\n\t\t\t\t\"splice\",\n\t\t\t\t\"stat\",\n\t\t\t\t\"stat64\",\n\t\t\t\t\"statfs\",\n\t\t\t\t\"statfs64\",\n\t\t\t\t\"statx\",\n\t\t\t\t\"symlink\",\n\t\t\t\t\"symlinkat\",\n\t\t\t\t\"sync\",\n\t\t\t\t\"sync_file_range\",\n\t\t\t\t\"syncfs\",\n\t\t\t\t\"sysinfo\",\n\t\t\t\t\"tee\",\n\t\t\t\t\"tgkill\",\n\t\t\t\t\"time\",\n\t\t\t\t\"timer_create\",\n\t\t\t\t\"timer_delete\",\n\t\t\t\t\"timer_getoverrun\",\n\t\t\t\t\"timer_gettime\",\n\t\t\t\t\"timer_gettime64\",\n\t\t\t\t\"timer_settime\",\n\t\t\t\t\"timer_settime64\",\n\t\t\t\t\"timerfd_create\",\n\t\t\t\t\"timerfd_gettime\",\n\t\t\t\t\"timerfd_gettime64\",\n\t\t\t\t\"timerfd_settime\",\n\t\t\t\t\"timerfd_settime64\",\n\t\t\t\t\"times\",\n\t\t\t\t\"tkill\",\n\t\t\t\t\"truncate\",\n\t\t\t\t\"truncate64\",\n\t\t\t\t\"ugetrlimit\",\n\t\t\t\t\"umask\",\n\t\t\t\t\"uname\",\n\t\t\t\t\"unlink\",\n\t\t\t\t\"unlinkat\",\n\t\t\t\t\"utime\",\n\t\t\t\t\"utimensat\",\n\t\t\t\t\"utimensat_time64\",\n\t\t\t\t\"utimes\",\n\t\t\t\t\"vfork\",\n\t\t\t\t\"vmsplice\",\n\t\t\t\t\"wait4\",\n\t\t\t\t\"waitid\",\n\t\t\t\t\"waitpid\",\n\t\t\t\t\"write\",\n\t\t\t\t\"writev\"\n\t\t\t]\n\t\t}\n\t]\n}\n\n"
  },
  {
    "path": "tests/integration/timens.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc run [timens offsets with no timens]\" {\n\trequires timens\n\n\tupdate_config '.process.args = [\"cat\", \"/proc/self/timens_offsets\"]'\n\tupdate_config '.linux.namespaces = .linux.namespace | map(select(.type != \"time\"))'\n\tupdate_config '.linux.timeOffsets = {\n\t\t\t\"monotonic\": { \"secs\": 7881, \"nanosecs\": 2718281 },\n\t\t\t\"boottime\": { \"secs\": 1337, \"nanosecs\": 3141519 }\n\t\t}'\n\n\trunc run test_busybox\n\t[ \"$status\" -ne 0 ]\n}\n\n@test \"runc run [timens with no offsets]\" {\n\trequires timens\n\n\tupdate_config '.process.args = [\"cat\", \"/proc/self/timens_offsets\"]'\n\tupdate_config '.linux.namespaces += [{\"type\": \"time\"}]\n\t\t| .linux.timeOffsets = null'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t# Default offsets are 0.\n\tgrep -E '^monotonic\\s+0\\s+0$' <<<\"$output\"\n\tgrep -E '^boottime\\s+0\\s+0$' <<<\"$output\"\n}\n\n@test \"runc run [simple timens]\" {\n\trequires timens\n\n\tupdate_config '.process.args = [\"cat\", \"/proc/self/timens_offsets\"]'\n\tupdate_config '.linux.namespaces += [{\"type\": \"time\"}]\n\t\t| .linux.timeOffsets = {\n\t\t\t\"monotonic\": { \"secs\": 7881, \"nanosecs\": 2718281 },\n\t\t\t\"boottime\": { \"secs\": 1337, \"nanosecs\": 3141519 }\n\t\t}'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\tgrep -E '^monotonic\\s+7881\\s+2718281$' <<<\"$output\"\n\tgrep -E '^boottime\\s+1337\\s+3141519$' <<<\"$output\"\n}\n\n# https://github.com/opencontainers/runc/issues/4635\n@test \"runc exec [simple timens]\" {\n\trequires timens\n\n\tupdate_config '.process.args = [\"sleep\", \"inf\"]'\n\tupdate_config '.linux.namespaces += [{\"type\": \"time\"}]\n\t\t| .linux.timeOffsets = {\n\t\t\t\"monotonic\": { \"secs\": 7881, \"nanosecs\": 2718281 },\n\t\t\t\"boottime\": { \"secs\": 1337, \"nanosecs\": 3141519 }\n\t\t}'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_busybox cat /proc/self/timens_offsets\n\t[ \"$status\" -eq 0 ]\n\tgrep -E '^monotonic\\s+7881\\s+2718281$' <<<\"$output\"\n\tgrep -E '^boottime\\s+1337\\s+3141519$' <<<\"$output\"\n}\n\n@test \"runc run [simple timens + userns]\" {\n\trequires root\n\trequires timens\n\n\tupdate_config ' .linux.namespaces += [{\"type\": \"user\"}]\n\t\t| .linux.uidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}]\n\t\t| .linux.gidMappings += [{\"hostID\": 200000, \"containerID\": 0, \"size\": 65534}] '\n\tremap_rootfs\n\n\tupdate_config '.process.args = [\"cat\", \"/proc/self/timens_offsets\"]'\n\tupdate_config '.linux.namespaces += [{\"type\": \"time\"}]\n\t\t| .linux.timeOffsets = {\n\t\t\t\"monotonic\": { \"secs\": 7881, \"nanosecs\": 2718281 },\n\t\t\t\"boottime\": { \"secs\": 1337, \"nanosecs\": 3141519 }\n\t\t}'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\tgrep -E '^monotonic\\s+7881\\s+2718281$' <<<\"$output\"\n\tgrep -E '^boottime\\s+1337\\s+3141519$' <<<\"$output\"\n}\n"
  },
  {
    "path": "tests/integration/tty.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"runc run [stdin not a tty]\" {\n\t# stty size fails without a tty\n\tupdate_config '(.. | select(.[]? == \"sh\")) += [\"-c\", \"stty size\"]'\n\t# note that stdout/stderr are already redirected by bats' run\n\trunc run test_busybox </dev/null\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc run [tty ptsname]\" {\n\t# Replace sh script with readlink.\n\t# shellcheck disable=SC2016\n\tupdate_config '(.. | select(.[]? == \"sh\")) += [\"-c\", \"for file in /proc/self/fd/[012]; do readlink $file; done\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} =~ /dev/pts/+ ]]\n\t[[ ${lines[1]} =~ /dev/pts/+ ]]\n\t[[ ${lines[2]} =~ /dev/pts/+ ]]\n}\n\n@test \"runc run [tty owner]\" {\n\t# tty chmod is not doable in rootless containers without idmap.\n\t# TODO: this can be made as a change to the gid test.\n\t[ $EUID -ne 0 ] && requires rootless_idmap\n\n\t# Replace sh script with stat.\n\t# shellcheck disable=SC2016\n\tupdate_config '(.. | select(.[]? == \"sh\")) += [\"-c\", \"stat -c %u:%g $(tty) | tr : \\\\\\\\n\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} =~ 0 ]]\n\t# This is set by the default config.json (it corresponds to the standard tty group).\n\t[[ ${lines[1]} =~ 5 ]]\n}\n\n@test \"runc run [tty owner] ({u,g}id != 0)\" {\n\t# tty chmod is not doable in rootless containers without idmap.\n\t[ $EUID -ne 0 ] && requires rootless_idmap\n\n\t# replace \"uid\": 0 with \"uid\": 1000\n\t# and do a similar thing for gid.\n\t# Replace sh script with stat.\n\t# shellcheck disable=SC2016\n\tupdate_config ' (.. | select(.uid? == 0)) .uid |= 1000\n\t\t\t| (.. | select(.gid? == 0)) .gid |= 100\n\t\t\t| (.. | select(.[]? == \"sh\")) += [\"-c\", \"stat -c %u:%g $(tty) | tr : \\\\\\\\n\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} =~ 1000 ]]\n\t# This is set by the default config.json (it corresponds to the standard tty group).\n\t[[ ${lines[1]} =~ 5 ]]\n}\n\n@test \"runc exec [stdin not a tty]\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\t# note that stdout/stderr are already redirected by bats' run\n\trunc exec -t test_busybox sh -c \"stty size\" </dev/null\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc exec [tty ptsname]\" {\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\t# shellcheck disable=SC2016\n\trunc exec -t test_busybox sh -c 'for file in /proc/self/fd/[012]; do readlink $file; done'\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} =~ /dev/pts/+ ]]\n\t[[ ${lines[1]} =~ /dev/pts/+ ]]\n\t[[ ${lines[2]} =~ /dev/pts/+ ]]\n}\n\n@test \"runc exec [tty owner]\" {\n\t# tty chmod is not doable in rootless containers without idmap.\n\t# TODO: this can be made as a change to the gid test.\n\t[ $EUID -ne 0 ] && requires rootless_idmap\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\t# shellcheck disable=SC2016\n\trunc exec -t test_busybox sh -c 'stat -c %u:%g $(tty) | tr : \\\\n'\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} =~ 0 ]]\n\t[[ ${lines[1]} =~ 5 ]]\n}\n\n@test \"runc exec [tty owner] ({u,g}id != 0)\" {\n\t# tty chmod is not doable in rootless containers without idmap.\n\t[ $EUID -ne 0 ] && requires rootless_idmap\n\n\t# replace \"uid\": 0 with \"uid\": 1000\n\t# and do a similar thing for gid.\n\tupdate_config ' (.. | select(.uid? == 0)) .uid |= 1000\n\t\t\t| (.. | select(.gid? == 0)) .gid |= 100'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\t# shellcheck disable=SC2016\n\trunc exec -t test_busybox sh -c 'stat -c %u:%g $(tty) | tr : \\\\n'\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} =~ 1000 ]]\n\t[[ ${lines[1]} =~ 5 ]]\n}\n\n@test \"runc exec [tty consolesize]\" {\n\t# allow writing to filesystem\n\tupdate_config '(.. | select(.readonly? != null)) .readonly |= false'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\ttty_info_with_consize_size='\n{\n    \"terminal\": true,\n    \"consoleSize\": {\n\t    \"height\": 10,\n\t    \"width\": 110\n    },\n    \"args\": [\n\t    \"/bin/sh\",\n\t    \"-c\",\n\t    \"/bin/stty -a > /tmp/tty-info\"\n    ],\n    \"cwd\": \"/\"\n}'\n\n\t# Run the detached exec.\n\trunc exec -t --pid-file pid.txt -d --console-socket \"$CONSOLE_SOCKET\" -p <(echo \"$tty_info_with_consize_size\") test_busybox\n\t[ \"$status\" -eq 0 ]\n\t[ -e pid.txt ]\n\n\t# Wait for the exec to finish.\n\twait_pids_gone 100 0.5 \"$(cat pid.txt)\"\n\n\ttty_info='\n{\n    \"args\": [\n\t\"/bin/cat\",\n\t\"/tmp/tty-info\"\n    ],\n    \"cwd\": \"/\"\n}'\n\n\trunc exec -t -p <(echo \"$tty_info\") test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# test tty width and height against original process.json\n\t[[ ${lines[0]} =~ \"rows 10; columns 110\" ]]\n}\n\n@test \"runc create [terminal=false]\" {\n\t# Disable terminal creation.\n\t# Replace sh script with sleep.\n\tupdate_config ' (.. | select(.terminal? != null)) .terminal |= false\n\t\t\t| (.. | select(.[]? == \"sh\")) += [\"sleep\", \"1000s\"]\n\t\t\t| del(.. | select(.? == \"sh\"))'\n\n\t# Make sure that the handling of detached IO is done properly. See #1354.\n\t__runc create test_busybox\n\n\trunc start test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\ttestcontainer test_busybox running\n\n\trunc kill test_busybox KILL\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc run [terminal=false]\" {\n\t# Disable terminal creation.\n\t# Replace sh script with sleep.\n\tupdate_config ' (.. | select(.terminal? != null)) .terminal |= false\n\t\t\t| (.. | select(.[]? == \"sh\")) += [\"sleep\", \"1000s\"]\n\t\t\t| del(.. | select(.? == \"sh\"))'\n\n\t# Make sure that the handling of non-detached IO is done properly. See #1354.\n\t(\n\t\t__runc run test_busybox\n\t) &\n\n\twait_for_container 15 1 test_busybox running\n\ttestcontainer test_busybox running\n\n\trunc kill test_busybox KILL\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"runc run -d [terminal=false]\" {\n\t# Disable terminal creation.\n\t# Replace sh script with sleep.\n\tupdate_config ' (.. | select(.terminal? != null)) .terminal |= false\n\t\t\t| (.. | select(.[]? == \"sh\")) += [\"sleep\", \"1000s\"]\n\t\t\t| del(.. | select(.? == \"sh\"))'\n\n\t# Make sure that the handling of detached IO is done properly. See #1354.\n\t__runc run -d test_busybox\n\n\ttestcontainer test_busybox running\n\n\trunc kill test_busybox KILL\n\t[ \"$status\" -eq 0 ]\n}\n"
  },
  {
    "path": "tests/integration/umask.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n}\n\nfunction teardown() {\n\tteardown_bundle\n}\n\n@test \"umask\" {\n\tupdate_config '.process.user += {\"umask\":63}'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_busybox grep '^Umask:' \"/proc/1/status\"\n\t[ \"$status\" -eq 0 ]\n\t# umask 63 decimal = umask 77 octal\n\t[[ \"${output}\" == *\"77\"* ]]\n\n\trunc exec test_busybox grep '^Umask:' \"/proc/self/status\"\n\t[ \"$status\" -eq 0 ]\n\t# umask 63 decimal = umask 77 octal\n\t[[ \"${output}\" == *\"77\"* ]]\n}\n"
  },
  {
    "path": "tests/integration/update.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction teardown() {\n\trm -f \"$BATS_RUN_TMPDIR\"/runc-cgroups-integration-test.json\n\tteardown_bundle\n}\n\nfunction setup() {\n\tsetup_busybox\n\n\tset_cgroups_path\n\n\t# Set some initial known values\n\tupdate_config ' .linux.resources.memory |= {\"limit\": 33554432, \"reservation\": 25165824}\n\t\t\t| .linux.resources.cpu |= {\"shares\": 100, \"quota\": 500000, \"period\": 1000000}\n\t\t\t| .linux.resources.pids |= {\"limit\": 20}'\n}\n\n# Tests whatever limits are (more or less) common between cgroup\n# v1 and v2: memory/swap, pids, and cpuset.\n@test \"update cgroup v1/v2 common limits\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\trequires cgroups_memory cgroups_pids cgroups_cpuset\n\tinit_cgroup_paths\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\n\t# Set a few variables to make the code below work for both v1 and v2\n\tif [ -v CGROUP_V1 ]; then\n\t\tMEM_LIMIT=\"memory.limit_in_bytes\"\n\t\tSD_MEM_LIMIT=\"MemoryLimit\"\n\t\tMEM_RESERVE=\"memory.soft_limit_in_bytes\"\n\t\tSD_MEM_RESERVE=\"unsupported\"\n\t\tMEM_SWAP=\"memory.memsw.limit_in_bytes\"\n\t\tSD_MEM_SWAP=\"unsupported\"\n\t\tSYSTEM_MEM=$(cat \"${CGROUP_MEMORY_BASE_PATH}/${MEM_LIMIT}\")\n\telse\n\t\tMEM_LIMIT=\"memory.max\"\n\t\tSD_MEM_LIMIT=\"MemoryMax\"\n\t\tMEM_RESERVE=\"memory.low\"\n\t\tSD_MEM_RESERVE=\"MemoryLow\"\n\t\tMEM_SWAP=\"memory.swap.max\"\n\t\tSD_MEM_SWAP=\"MemorySwapMax\"\n\t\tSYSTEM_MEM=\"max\"\n\tfi\n\n\tunset HAVE_SWAP\n\tget_cgroup_value $MEM_SWAP >/dev/null && HAVE_SWAP=yes\n\n\tSD_UNLIMITED=\"infinity\"\n\tSD_VERSION=$(systemctl --version | awk '{print $2; exit}')\n\tif [ \"$SD_VERSION\" -lt 227 ]; then\n\t\tSD_UNLIMITED=\"18446744073709551615\"\n\tfi\n\n\t# check that initial values were properly set\n\tcheck_cgroup_value $MEM_LIMIT 33554432\n\tcheck_systemd_value $SD_MEM_LIMIT 33554432\n\n\tcheck_cgroup_value $MEM_RESERVE 25165824\n\tcheck_systemd_value $SD_MEM_RESERVE 25165824\n\n\tcheck_cgroup_value \"pids.max\" 20\n\tcheck_systemd_value \"TasksMax\" 20\n\n\t# update cpuset if possible (i.e. we're running on a multicore cpu)\n\tcpu_count=$(grep -c '^processor' /proc/cpuinfo)\n\tif [ \"$cpu_count\" -gt 1 ]; then\n\t\trunc update test_update --cpuset-cpus \"1\"\n\t\t[ \"$status\" -eq 0 ]\n\t\tcheck_cgroup_value \"cpuset.cpus\" 1\n\tfi\n\n\t# update memory limit\n\trunc update test_update --memory 67108864\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value $MEM_LIMIT 67108864\n\tcheck_systemd_value $SD_MEM_LIMIT 67108864\n\n\trunc update test_update --memory 50M\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value $MEM_LIMIT 52428800\n\tcheck_systemd_value $SD_MEM_LIMIT 52428800\n\n\t# update memory soft limit\n\trunc update test_update --memory-reservation 33554432\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value \"$MEM_RESERVE\" 33554432\n\tcheck_systemd_value \"$SD_MEM_RESERVE\" 33554432\n\n\t# Run swap memory tests if swap is available.\n\tif [ -v HAVE_SWAP ]; then\n\t\t# try to remove memory swap limit\n\t\trunc update test_update --memory-swap -1\n\t\t[ \"$status\" -eq 0 ]\n\t\tcheck_cgroup_value \"$MEM_SWAP\" \"$SYSTEM_MEM\"\n\t\tcheck_systemd_value \"$SD_MEM_SWAP\" \"$SD_UNLIMITED\"\n\n\t\t# update memory swap\n\t\tif [ -v CGROUP_V2 ]; then\n\t\t\t# for cgroupv2, memory and swap can only be set together\n\t\t\trunc update test_update --memory 52428800 --memory-swap 96468992\n\t\t\t[ \"$status\" -eq 0 ]\n\t\t\t# for cgroupv2, swap is a separate limit (it does not include mem)\n\t\t\tcheck_cgroup_value \"$MEM_SWAP\" $((96468992 - 52428800))\n\t\t\tcheck_systemd_value \"$SD_MEM_SWAP\" $((96468992 - 52428800))\n\t\telse\n\t\t\trunc update test_update --memory-swap 96468992\n\t\t\t[ \"$status\" -eq 0 ]\n\t\t\tcheck_cgroup_value \"$MEM_SWAP\" 96468992\n\t\t\tcheck_systemd_value \"$SD_MEM_SWAP\" 96468992\n\t\tfi\n\tfi\n\n\t# try to remove memory limit\n\trunc update test_update --memory -1\n\t[ \"$status\" -eq 0 ]\n\n\t# check memory limit is gone\n\tcheck_cgroup_value \"$MEM_LIMIT\" \"$SYSTEM_MEM\"\n\tcheck_systemd_value \"$SD_MEM_LIMIT\" \"$SD_UNLIMITED\"\n\n\t# check swap memory limited is gone\n\tif [ -v HAVE_SWAP ]; then\n\t\tcheck_cgroup_value \"$MEM_SWAP\" \"$SYSTEM_MEM\"\n\t\tcheck_systemd_value \"$SD_MEM_SWAP\" \"$SD_UNLIMITED\"\n\tfi\n\n\t# update pids limit\n\trunc update test_update --pids-limit 10\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value \"pids.max\" 10\n\tcheck_systemd_value \"TasksMax\" 10\n\n\t# unlimited\n\trunc update test_update --pids-limit -1\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value \"pids.max\" max\n\tcheck_systemd_value \"TasksMax\" $SD_UNLIMITED\n\n\t# Revert to the test initial value via json on stdin\n\trunc update -r - test_update <<EOF\n{\n  \"memory\": {\n    \"limit\": 33554432,\n    \"reservation\": 25165824\n  },\n  \"cpu\": {\n    \"shares\": 100,\n    \"quota\": 500000,\n    \"period\": 1000000,\n    \"cpus\": \"0\"\n  },\n  \"pids\": {\n    \"limit\": 20\n  }\n}\nEOF\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value \"cpuset.cpus\" 0\n\n\tcheck_cgroup_value $MEM_LIMIT 33554432\n\tcheck_systemd_value $SD_MEM_LIMIT 33554432\n\n\tcheck_cgroup_value $MEM_RESERVE 25165824\n\tcheck_systemd_value $SD_MEM_RESERVE 25165824\n\n\tcheck_cgroup_value \"pids.max\" 20\n\tcheck_systemd_value \"TasksMax\" 20\n\n\t# redo all the changes at once\n\trunc update test_update \\\n\t\t--cpu-period 900000 --cpu-quota 600000 --cpu-share 200 \\\n\t\t--memory 67108864 --memory-reservation 33554432 \\\n\t\t--pids-limit 10\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value $MEM_LIMIT 67108864\n\tcheck_systemd_value $SD_MEM_LIMIT 67108864\n\n\tcheck_cgroup_value $MEM_RESERVE 33554432\n\tcheck_systemd_value $SD_MEM_RESERVE 33554432\n\n\tcheck_cgroup_value \"pids.max\" 10\n\tcheck_systemd_value \"TasksMax\" 10\n\n\t# reset to initial test value via json file\n\tcat <<EOF >\"$BATS_RUN_TMPDIR\"/runc-cgroups-integration-test.json\n{\n  \"memory\": {\n    \"limit\": 33554432,\n    \"reservation\": 25165824\n  },\n  \"cpu\": {\n    \"shares\": 100,\n    \"quota\": 500000,\n    \"period\": 1000000,\n    \"cpus\": \"0\"\n  },\n  \"pids\": {\n    \"limit\": 20\n  }\n}\nEOF\n\n\trunc update -r \"$BATS_RUN_TMPDIR\"/runc-cgroups-integration-test.json test_update\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value \"cpuset.cpus\" 0\n\n\tcheck_cgroup_value $MEM_LIMIT 33554432\n\tcheck_systemd_value $SD_MEM_LIMIT 33554432\n\n\tcheck_cgroup_value $MEM_RESERVE 25165824\n\tcheck_systemd_value $SD_MEM_RESERVE 25165824\n\n\tcheck_cgroup_value \"pids.max\" 20\n\tcheck_systemd_value \"TasksMax\" 20\n\n\tif [ -v HAVE_SWAP ]; then\n\t\t# Test case for https://github.com/opencontainers/runc/pull/592,\n\t\t# checking github.com/opencontainers/cgroups/fs/memory.go:setMemoryAndSwap.\n\n\t\trunc update test_update --memory 30M --memory-swap 50M\n\t\t[ \"$status\" -eq 0 ]\n\n\t\tcheck_cgroup_value $MEM_LIMIT $((30 * 1024 * 1024))\n\t\tcheck_systemd_value $SD_MEM_LIMIT $((30 * 1024 * 1024))\n\n\t\tif [ -v CGROUP_V2 ]; then\n\t\t\t# for cgroupv2, swap does not include mem\n\t\t\tcheck_cgroup_value \"$MEM_SWAP\" $((20 * 1024 * 1024))\n\t\t\tcheck_systemd_value \"$SD_MEM_SWAP\" $((20 * 1024 * 1024))\n\t\telse\n\t\t\tcheck_cgroup_value \"$MEM_SWAP\" $((50 * 1024 * 1024))\n\t\t\tcheck_systemd_value \"$SD_MEM_SWAP\" $((50 * 1024 * 1024))\n\t\tfi\n\n\t\t# Now, set new memory to more than old swap\n\t\trunc update test_update --memory 60M --memory-swap 80M\n\t\t[ \"$status\" -eq 0 ]\n\n\t\tcheck_cgroup_value $MEM_LIMIT $((60 * 1024 * 1024))\n\t\tcheck_systemd_value $SD_MEM_LIMIT $((60 * 1024 * 1024))\n\n\t\tif [ -v CGROUP_V2 ]; then\n\t\t\t# for cgroupv2, swap does not include mem\n\t\t\tcheck_cgroup_value \"$MEM_SWAP\" $((20 * 1024 * 1024))\n\t\t\tcheck_systemd_value \"$SD_MEM_SWAP\" $((20 * 1024 * 1024))\n\t\telse\n\t\t\tcheck_cgroup_value \"$MEM_SWAP\" $((80 * 1024 * 1024))\n\t\t\tcheck_systemd_value \"$SD_MEM_SWAP\" $((80 * 1024 * 1024))\n\t\tfi\n\tfi\n}\n\n@test \"update cgroup cpu limits\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\n\t# Check that initial values were properly set.\n\tcheck_cpu_quota 500000 1000000\n\tcheck_cpu_shares 100\n\n\t# Update cpu period.\n\trunc update test_update --cpu-period 900000\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_quota 500000 900000\n\n\t# Update cpu quota.\n\trunc update test_update --cpu-quota 600000\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_quota 600000 900000\n\n\t# Remove cpu quota.\n\trunc update test_update --cpu-quota -1\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_quota -1 900000\n\n\t# Update cpu-shares.\n\trunc update test_update --cpu-share 200\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_shares 200\n\n\t# Revert to the test initial value via json on stding\n\trunc update -r - test_update <<EOF\n{\n  \"cpu\": {\n    \"shares\": 100,\n    \"quota\": 500000,\n    \"period\": 1000000\n  }\n}\nEOF\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_quota 500000 1000000\n\n\t# Redo all the changes at once.\n\trunc update test_update \\\n\t\t--cpu-period 900000 --cpu-quota 600000 --cpu-share 200\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_quota 600000 900000\n\tcheck_cpu_shares 200\n\n\t# Remove cpu quota and reset the period.\n\trunc update test_update --cpu-quota -1 --cpu-period 100000\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_quota -1 100000\n\n\t# Reset to initial test values via json file.\n\tcat <<EOF >\"$BATS_RUN_TMPDIR\"/runc-cgroups-integration-test.json\n{\n  \"cpu\": {\n    \"shares\": 100,\n    \"quota\": 500000,\n    \"period\": 1000000\n  }\n}\nEOF\n\n\trunc update -r \"$BATS_RUN_TMPDIR\"/runc-cgroups-integration-test.json test_update\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_quota 500000 1000000\n\tcheck_cpu_shares 100\n}\n\n@test \"update pids.limit\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\trequires cgroups_pids\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\n\tcheck_cgroup_value \"pids.max\" 20\n\tcheck_systemd_value \"TasksMax\" 20\n\n\trunc update test_update --pids-limit 12345\n\t[ \"$status\" -eq 0 ]\n\n\tcheck_cgroup_value \"pids.max\" \"12345\"\n\tcheck_systemd_value \"TasksMax\" \"12345\"\n\n\trunc update test_update --pids-limit -1\n\t[ \"$status\" -eq 0 ]\n\n\tcheck_cgroup_value \"pids.max\" \"max\"\n\t# systemd < v227 shows UINT64_MAX instead of \"infinity\".\n\tcheck_systemd_value \"TasksMax\" \"infinity\" \"18446744073709551615\"\n\n\trunc update test_update --pids-limit 0\n\t[ \"$status\" -eq 0 ]\n\n\t# systemd doesn't support TasksMax=0 so runc will silently remap it to 1.\n\tcheck_cgroup_value \"pids.max\" \"1\"\n\tcheck_systemd_value \"TasksMax\" \"1\"\n}\n\n@test \"cpu burst\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\trequires cgroups_cpu_burst\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_burst 0\n\n\trunc update test_update --cpu-period 900000 --cpu-burst 500000\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_burst 500000\n\n\t# issue: https://github.com/opencontainers/runc/issues/4210\n\t# for systemd, cpu-burst value will be cleared, it's a known issue.\n\tif [ ! -v RUNC_USE_SYSTEMD ]; then\n\t\trunc update test_update --memory 100M\n\t\t[ \"$status\" -eq 0 ]\n\t\tcheck_cpu_burst 500000\n\tfi\n\n\trunc update test_update --cpu-period 900000 --cpu-burst 0\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_burst 0\n}\n\n@test \"set cpu period with no quota\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tupdate_config '.linux.resources.cpu |= { \"period\": 1000000 }'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\n\tcheck_cpu_quota -1 1000000\n}\n\n@test \"set cpu period with no quota (invalid period)\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tupdate_config '.linux.resources.cpu |= { \"period\": 100 }'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 1 ]\n}\n\n@test \"set cpu quota with no period\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tupdate_config '.linux.resources.cpu |= { \"quota\": 5000 }'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_quota 5000 100000\n}\n\n@test \"update cpu period with no previous period/quota set\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tupdate_config '.linux.resources.cpu |= {}'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\n\t# Update the period alone, no old values were set.\n\trunc update --cpu-period 50000 test_update\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_quota -1 50000\n}\n\n@test \"update cpu quota with no previous period/quota set\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tupdate_config '.linux.resources.cpu |= {}'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\n\t# Update the quota alone, no old values were set.\n\trunc update --cpu-quota 30000 test_update\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_quota 30000 100000\n}\n\n@test \"update cpu period in a pod cgroup with pod limit set\" {\n\trequires cgroups_v1\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\tset_cgroups_path \"pod_${RANDOM}\"\n\n\t# Set parent/pod CPU quota limit to 50%.\n\tif [ -v RUNC_USE_SYSTEMD ]; then\n\t\tset_parent_systemd_properties CPUQuota=\"50%\"\n\telse\n\t\techo 50000 >\"/sys/fs/cgroup/cpu/$REL_PARENT_PATH/cpu.cfs_quota_us\"\n\tfi\n\t# Sanity checks.\n\trun -0 cat \"/sys/fs/cgroup/cpu$REL_PARENT_PATH/cpu.cfs_period_us\"\n\t[ \"$output\" -eq 100000 ]\n\trun -0 cat \"/sys/fs/cgroup/cpu$REL_PARENT_PATH/cpu.cfs_quota_us\"\n\t[ \"$output\" -eq 50000 ]\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\t# Get the current period.\n\tlocal cur\n\tcur=$(get_cgroup_value cpu.cfs_period_us)\n\n\t# Sanity check: as the parent cgroup sets the limit to 50%,\n\t# setting a higher limit (e.g. 60%) is expected to fail.\n\trunc update --cpu-quota $((cur * 6 / 10)) test_update\n\t[ \"$status\" -eq 1 ]\n\n\t# Finally, the test itself: set 30% limit but with lower period.\n\trunc update --cpu-period 10000 --cpu-quota 3000 test_update\n\t[ \"$status\" -eq 0 ]\n\tcheck_cpu_quota 3000 10000\n}\n\n@test \"update cgroup cpu.idle\" {\n\trequires cgroups_cpu_idle\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\n\tcheck_cgroup_value \"cpu.idle\" \"0\"\n\n\tlocal val\n\tfor val in 1 0 1; do\n\t\trunc update -r - test_update <<EOF\n{\n  \"cpu\": {\n    \"idle\": $val\n  }\n}\nEOF\n\t\t[ \"$status\" -eq 0 ]\n\t\tcheck_cgroup_value \"cpu.idle\" \"$val\"\n\tdone\n\n\tfor val in 1 0 1; do\n\t\trunc update --cpu-idle \"$val\" test_update\n\n\t\t[ \"$status\" -eq 0 ]\n\t\tcheck_cgroup_value \"cpu.idle\" \"$val\"\n\tdone\n\n\t# Values other than 1 or 0 are ignored by the kernel, see\n\t# sched_group_set_idle() in kernel/sched/fair.c.\n\t#\n\t# If this ever fails, it means that the kernel now accepts values\n\t# other than 0 or 1, and runc needs to adopt.\n\tfor val in -1 2 3; do\n\t\trunc update --cpu-idle \"$val\" test_update\n\t\t[ \"$status\" -ne 0 ]\n\t\tcheck_cgroup_value \"cpu.idle\" \"1\"\n\tdone\n\n\t# https://github.com/opencontainers/runc/issues/3786\n\t[ \"$(systemd_version)\" -ge 252 ] && return\n\t# test update other option won't impact on cpu.idle\n\trunc update --cpu-period 10000 test_update\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value \"cpu.idle\" \"1\"\n}\n\n@test \"update cgroup cpu.idle via systemd v252+\" {\n\trequires cgroups_v2 systemd_v252 cgroups_cpu_idle\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value \"cpu.idle\" \"0\"\n\n\t# If cpu-idle is set, cpu-share (converted to CPUWeight) can't be set via systemd.\n\trunc update --cpu-share 200 --cpu-idle 1 test_update\n\t[[ \"$output\" == *\"unable to apply both\"* ]]\n\tcheck_cgroup_value \"cpu.idle\" \"1\"\n\n\t# Changing cpu-shares (converted to CPU weight) resets cpu.idle to 0.\n\trunc update --cpu-share 200 test_update\n\tcheck_cgroup_value \"cpu.idle\" \"0\"\n\n\t# Setting values via unified map.\n\n\t# If cpu.idle is set, cpu.weight is ignored.\n\trunc update -r - test_update <<EOF\n{\n  \"unified\": {\n    \"cpu.idle\": \"1\",\n    \"cpu.weight\": \"8\"\n  }\n}\nEOF\n\t[[ \"$output\" == *\"unable to apply both\"* ]]\n\tcheck_cgroup_value \"cpu.idle\" \"1\"\n\n\t# Setting any cpu.weight should reset cpu.idle to 0.\n\trunc update -r - test_update <<EOF\n{\n  \"unified\": {\n    \"cpu.weight\": \"8\"\n  }\n}\nEOF\n\tcheck_cgroup_value \"cpu.idle\" \"0\"\n}\n\n@test \"update cgroup v2 resources via unified map\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\trequires cgroups_v2\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\n\t# Check that initial values (from setup) were properly set.\n\tcheck_cpu_quota 500000 1000000\n\tcheck_cpu_shares 100\n\tcheck_systemd_value \"TasksMax\" 20\n\n\trunc update -r - test_update <<EOF\n{\n  \"unified\": {\n    \"cpu.max\": \"max 100000\",\n    \"cpu.weight\": \"16\",\n    \"pids.max\": \"10\"\n  }\n}\nEOF\n\n\t# Check the updated systemd unit properties.\n\tcheck_cpu_quota -1 100000\n\tcheck_cpu_weight 16\n\tcheck_systemd_value \"TasksMax\" 10\n}\n\n@test \"update cpuset parameters via resources.CPU\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\trequires smp cgroups_cpuset\n\n\tlocal AllowedCPUs='AllowedCPUs' AllowedMemoryNodes='AllowedMemoryNodes'\n\t# these properties require systemd >= v244\n\tif [ \"$(systemd_version)\" -lt 244 ]; then\n\t\t# a hack to skip checks, see check_systemd_value()\n\t\tAllowedCPUs='unsupported'\n\t\tAllowedMemoryNodes='unsupported'\n\tfi\n\n\tupdate_config ' .linux.resources.CPU |= {\n\t\t\t\t\"Cpus\": \"0\",\n\t\t\t\t\"Mems\": \"0\"\n\t\t\t}'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\n\t# check that initial values were properly set\n\tcheck_systemd_value \"$AllowedCPUs\" 0\n\tcheck_systemd_value \"$AllowedMemoryNodes\" 0\n\n\trunc update -r - test_update <<EOF\n{\n  \"CPU\": {\n    \"Cpus\": \"1\"\n  }\n}\nEOF\n\t[ \"$status\" -eq 0 ]\n\n\t# check the updated systemd unit properties\n\tcheck_systemd_value \"$AllowedCPUs\" 1\n\n\t# More than 1 numa memory node is required to test this\n\tfile=\"/sys/fs/cgroup/cpuset.mems.effective\"\n\tif ! test -r $file || grep -q '^0$' $file; then\n\t\t# skip the rest of it\n\t\treturn 0\n\tfi\n\n\trunc update -r - test_update <<EOF\n{\n  \"CPU\": {\n    \"Mems\": \"1\"\n  }\n}\nEOF\n\t[ \"$status\" -eq 0 ]\n\n\t# check the updated systemd unit properties\n\tcheck_systemd_value \"$AllowedMemoryNodes\" 1\n}\n\n@test \"update cpuset parameters via v2 unified map\" {\n\t# This test assumes systemd >= v244\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\trequires cgroups_v2 smp cgroups_cpuset\n\n\tupdate_config ' .linux.resources.unified |= {\n\t\t\t\t\"cpuset.cpus\": \"0\",\n\t\t\t\t\"cpuset.mems\": \"0\"\n\t\t\t}'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\n\t# check that initial values were properly set\n\tcheck_systemd_value \"AllowedCPUs\" 0\n\tcheck_systemd_value \"AllowedMemoryNodes\" 0\n\n\trunc update -r - test_update <<EOF\n{\n  \"unified\": {\n    \"cpuset.cpus\": \"1\"\n  }\n}\nEOF\n\t[ \"$status\" -eq 0 ]\n\n\t# check the updated systemd unit properties\n\tcheck_systemd_value \"AllowedCPUs\" 1\n\n\t# More than 1 numa memory node is required to test this\n\tfile=\"/sys/fs/cgroup/cpuset.mems.effective\"\n\tif ! test -r $file || grep -q '^0$' $file; then\n\t\t# skip the rest of it\n\t\treturn 0\n\tfi\n\n\trunc update -r - test_update <<EOF\n{\n  \"unified\": {\n    \"cpuset.mems\": \"1\"\n  }\n}\nEOF\n\t[ \"$status\" -eq 0 ]\n\n\t# check the updated systemd unit properties\n\tcheck_systemd_value \"AllowedMemoryNodes\" 1\n}\n\n@test \"update cpuset cpus range via v2 unified map\" {\n\t# This test assumes systemd >= v244\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\trequires systemd cgroups_v2 more_than_8_core cgroups_cpuset\n\n\tupdate_config ' .linux.resources.unified |= {\n\t\t\t\t\"cpuset.cpus\": \"0-5\",\n\t\t\t}'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\n\t# check that the initial value was properly set\n\tcheck_systemd_value \"AllowedCPUs\" \"0-5\"\n\n\trunc update -r - test_update <<EOF\n{\n  \"unified\": {\n    \"cpuset.cpus\": \"5-8\"\n  }\n}\nEOF\n\t[ \"$status\" -eq 0 ]\n\n\t# check the updated systemd unit property, the value should not be affected by byte order\n\tcheck_systemd_value \"AllowedCPUs\" \"5-8\"\n}\n\n@test \"update rt period and runtime\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\trequires cgroups_v1 cgroups_rt no_systemd\n\n\tlocal cgroup_cpu=\"${CGROUP_CPU_BASE_PATH}/${REL_CGROUPS_PATH}\"\n\n\t# By default, \"${cgroup_cpu}/cpu.rt_runtime_us\" is set to 0, which inhibits\n\t# setting the container's realtimeRuntime. (#2046)\n\t#\n\t# When ${cgroup_cpu} is \"/sys/fs/cgroup/cpu,cpuacct/runc-cgroups-integration-test/test-cgroup\",\n\t# we write the values of /sys/fs/cgroup/cpu,cpuacct/cpu.rt_{period,runtime}_us to:\n\t# - sys/fs/cgroup/cpu,cpuacct/runc-cgroups-integration-test/cpu.rt_{period,runtime}_us\n\t# - sys/fs/cgroup/cpu,cpuacct/runc-cgroups-integration-test/test-cgroup/cpu.rt_{period,runtime}_us\n\t#\n\t# Typically period=1000000 runtime=950000 .\n\t#\n\t# TODO: support systemd\n\tmkdir -p \"$cgroup_cpu\"\n\tlocal root_period root_runtime\n\troot_period=$(cat \"${CGROUP_CPU_BASE_PATH}/cpu.rt_period_us\")\n\troot_runtime=$(cat \"${CGROUP_CPU_BASE_PATH}/cpu.rt_runtime_us\")\n\t# the following IFS magic sets dirs=(\"runc-cgroups-integration-test\" \"test-cgroup\")\n\tIFS='/' read -r -a dirs <<<\"${REL_CGROUPS_PATH#/}\"\n\tfor ((i = 0; i < ${#dirs[@]}; i++)); do\n\t\tlocal target=\"$CGROUP_CPU_BASE_PATH\"\n\t\tfor ((j = 0; j <= i; j++)); do\n\t\t\ttarget=\"${target}/${dirs[$j]}\"\n\t\tdone\n\t\ttarget_period=\"${target}/cpu.rt_period_us\"\n\t\techo \"Writing ${root_period} to ${target_period}\"\n\t\techo \"$root_period\" >\"$target_period\"\n\t\ttarget_runtime=\"${target}/cpu.rt_runtime_us\"\n\t\techo \"Writing ${root_runtime} to ${target_runtime}\"\n\t\techo \"$root_runtime\" >\"$target_runtime\"\n\tdone\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update_rt\n\t[ \"$status\" -eq 0 ]\n\n\trunc update -r - test_update_rt <<EOF\n{\n  \"cpu\": {\n    \"realtimeRuntime\": 500001\n  }\n}\nEOF\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value \"cpu.rt_period_us\" \"$root_period\"\n\tcheck_cgroup_value \"cpu.rt_runtime_us\" 500001\n\n\trunc update -r - test_update_rt <<EOF\n{\n  \"cpu\": {\n    \"realtimePeriod\": 800001,\n    \"realtimeRuntime\": 500001\n  }\n}\nEOF\n\tcheck_cgroup_value \"cpu.rt_period_us\" 800001\n\tcheck_cgroup_value \"cpu.rt_runtime_us\" 500001\n\n\trunc update test_update_rt --cpu-rt-period 900001 --cpu-rt-runtime 600001\n\t[ \"$status\" -eq 0 ]\n\n\tcheck_cgroup_value \"cpu.rt_period_us\" 900001\n\tcheck_cgroup_value \"cpu.rt_runtime_us\" 600001\n\n\t# https://github.com/opencontainers/runc/issues/4094\n\trunc update test_update_rt --cpu-rt-period 10000 --cpu-rt-runtime 3000\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value \"cpu.rt_period_us\" 10000\n\tcheck_cgroup_value \"cpu.rt_runtime_us\" 3000\n\n\trunc update test_update_rt --cpu-rt-period 100000 --cpu-rt-runtime 20000\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_value \"cpu.rt_period_us\" 100000\n\tcheck_cgroup_value \"cpu.rt_runtime_us\" 20000\n}\n\n@test \"update devices [minimal transition rules]\" {\n\trequires root\n\n\t# Run a basic shell script that tries to read from /dev/kmsg, but\n\t# due to lack of permissions, it prints the error message to /dev/null.\n\t# If any data is read from /dev/kmsg, it will be printed to stdout, and the\n\t# test will fail. In the same way, if access to /dev/null is denied, the\n\t# error will be printed to stderr, and the test will also fail.\n\t#\n\t# \"runc update\" makes use of minimal transition rules, updates should not cause\n\t# writes to fail at any point. For systemd cgroup driver on cgroup v1, the cgroup\n\t# is frozen to ensure this.\n\tupdate_config ' .linux.resources.devices = [{\"allow\": false, \"access\": \"rwm\"}, {\"allow\": false, \"type\": \"c\", \"major\": 1, \"minor\": 11, \"access\": \"rwa\"}]\n\t\t\t| .linux.devices = [{\"path\": \"/dev/kmsg\", \"type\": \"c\", \"major\": 1, \"minor\": 11}]\n\t\t\t| .process.capabilities.bounding += [\"CAP_SYSLOG\"]\n\t\t\t| .process.capabilities.effective += [\"CAP_SYSLOG\"]\n\t\t\t| .process.capabilities.permitted += [\"CAP_SYSLOG\"]\n\t\t\t| .process.args |= [\"sh\", \"-c\", \"while true; do head -c 100 /dev/kmsg 2> /dev/null; done\"]'\n\n\t# Set up a temporary console socket and recvtty so we can get the stdio.\n\tTMP_RECVTTY_DIR=\"$(mktemp -d \"$BATS_RUN_TMPDIR/runc-tmp-recvtty.XXXXXX\")\"\n\tTMP_RECVTTY_PID=\"$TMP_RECVTTY_DIR/recvtty.pid\"\n\tTMP_CONSOLE_SOCKET=\"$TMP_RECVTTY_DIR/console.sock\"\n\tCONTAINER_OUTPUT=\"$TMP_RECVTTY_DIR/output\"\n\t(\"$TESTBINDIR/recvtty\" --no-stdin --pid-file \"$TMP_RECVTTY_PID\" \\\n\t\t--mode single \"$TMP_CONSOLE_SOCKET\" &>\"$CONTAINER_OUTPUT\") &\n\tretry 10 0.1 [ -e \"$TMP_CONSOLE_SOCKET\" ]\n\n\t# Run the container in the background.\n\trunc run -d --console-socket \"$TMP_CONSOLE_SOCKET\" test_update\n\tcat \"$CONTAINER_OUTPUT\"\n\t[ \"$status\" -eq 0 ]\n\n\t# Trigger an update. This update doesn't actually change the device rules,\n\t# but it will trigger the devices cgroup code to reapply the current rules.\n\t# We trigger the update a few times to make sure we hit the race.\n\tfor _ in {1..30}; do\n\t\t# TODO: Update \"runc update\" so we can change the device rules.\n\t\trunc update --pids-limit 30 test_update\n\t\t[ \"$status\" -eq 0 ]\n\tdone\n\n\t# Kill recvtty.\n\tkill -9 \"$(<\"$TMP_RECVTTY_PID\")\"\n\n\t# There should've been no output from the container.\n\tcat \"$CONTAINER_OUTPUT\"\n\t[ -z \"$(<\"$CONTAINER_OUTPUT\")\" ]\n}\n\n@test \"update paused container\" {\n\trequires cgroups_freezer\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\t# Run the container in the background.\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\n\t# Pause the container.\n\trunc pause test_update\n\t[ \"$status\" -eq 0 ]\n\n\t# Trigger an unrelated update.\n\trunc update --pids-limit 30 test_update\n\t[ \"$status\" -eq 0 ]\n\n\t# The container should still be paused.\n\ttestcontainer test_update paused\n\n\t# Resume the container.\n\trunc resume test_update\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"update memory vs CheckBeforeUpdate\" {\n\texclude_os almalinux-9.4 # See https://github.com/opencontainers/runc/issues/4454\n\n\trequires cgroups_v2\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\n\t# Setting memory to low value with checkBeforeUpdate=true should fail.\n\trunc update -r - test_update <<EOF\n{\n  \"memory\": {\n    \"limit\": 1024,\n    \"checkBeforeUpdate\": true\n  }\n}\nEOF\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"rejecting memory limit\"* ]]\n\ttestcontainer test_update running\n\n\t# Setting memory+swap to low value with checkBeforeUpdate=true should fail.\n\trunc update -r - test_update <<EOF\n{\n  \"memory\": {\n    \"limit\": 1024,\n    \"swap\": 2048,\n    \"checkBeforeUpdate\": true\n  }\n}\nEOF\n\t[ \"$status\" -ne 0 ]\n\t[[ \"$output\" == *\"rejecting memory+swap limit\"* ]]\n\ttestcontainer test_update running\n\n\t# The container will be OOM killed, and runc might either succeed\n\t# or fail depending on the timing, so we don't check its exit code.\n\trunc update test_update --memory 1024\n\twait_for_container 10 1 test_update stopped\n}\n\n@test \"update per-device iops/bps values\" {\n\t[ $EUID -ne 0 ] && requires rootless_cgroup\n\n\t# Need major:minor for any block device (but not a partition).\n\tdev=$(lsblk -dno MAJ:MIN | head -1 | tr -d ' \\t\\n')\n\tif [ -z \"$dev\" ]; then\n\t\techo \"=== lsblk -d ===\" >&2\n\t\tlsblk -d >&2\n\t\techo \"===\" >&2\n\t\tfail \"can't get device from lsblk\"\n\tfi\n\tIFS=':' read -r major minor <<<\"$dev\"\n\n\t# Add an entry to check that\n\t#   - existing devices can be updated;\n\t#   - duplicates are handled properly;\n\t# (see func upsert* in update.go).\n\tupdate_config '\t  .linux.resources.blockIO.throttleReadBpsDevice |= [\n\t\t\t\t{ major: '\"$major\"', minor: '\"$minor\"', rate: 485760 },\n\t\t\t\t{ major: '\"$major\"', minor: '\"$minor\"', rate: 485760 }\n\t\t\t]'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_update\n\t[ \"$status\" -eq 0 ]\n\n\trunc update -r - test_update <<EOF\n{\n  \"blockIO\": {\n    \"throttleReadBpsDevice\": [\n      {\n        \"major\": $major,\n        \"minor\": $minor,\n        \"rate\": 10485760\n      }\n    ],\n    \"throttleWriteBpsDevice\": [\n      {\n        \"major\": $major,\n        \"minor\": $minor,\n        \"rate\": 9437184\n      }\n    ],\n    \"throttleReadIOPSDevice\": [\n      {\n        \"major\": $major,\n        \"minor\": $minor,\n        \"rate\": 1000\n      }\n    ],\n    \"throttleWriteIOPSDevice\": [\n      {\n        \"major\": $major,\n        \"minor\": $minor,\n        \"rate\": 900\n      }\n    ]\n  }\n}\nEOF\n\t[ \"$status\" -eq 0 ]\n\tcheck_cgroup_dev_iops \"$dev\" 10485760 9437184 1000 900\n}\n"
  },
  {
    "path": "tests/integration/userns.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\nfunction setup() {\n\tsetup_busybox\n\n\t# Prepare source folders for bind mount\n\tmkdir -p source-{accessible,inaccessible-1,inaccessible-2}/dir\n\ttouch source-{accessible,inaccessible-1,inaccessible-2}/dir/foo.txt\n\n\t# Permissions only to the owner, it is inaccessible to group/others\n\tchmod 700 source-inaccessible-{1,2}\n\n\tmkdir -p rootfs/tmp/mount-{1,2}\n\n\tto_umount_list=\"$(mktemp \"$BATS_RUN_TMPDIR/userns-mounts.XXXXXX\")\"\n\tif [ $EUID -eq 0 ]; then\n\t\tupdate_config ' .linux.namespaces += [{\"type\": \"user\"}]\n\t\t\t| .linux.uidMappings += [{\"hostID\": 100000, \"containerID\": 0, \"size\": 65534}]\n\t\t\t| .linux.gidMappings += [{\"hostID\": 200000, \"containerID\": 0, \"size\": 65534}] '\n\t\tremap_rootfs\n\tfi\n}\n\nfunction teardown() {\n\tteardown_bundle\n\n\tif [ -v to_umount_list ]; then\n\t\twhile read -r mount_path; do\n\t\t\tumount -l \"$mount_path\" || :\n\t\t\trm -rf \"$mount_path\"\n\t\tdone <\"$to_umount_list\"\n\t\trm -f \"$to_umount_list\"\n\t\tunset to_umount_list\n\tfi\n}\n\n@test \"userns with simple mount\" {\n\tupdate_config ' .process.args += [\"-c\", \"stat /tmp/mount-1/foo.txt\"]\n\t\t| .mounts += [{\"source\": \"source-accessible/dir\", \"destination\": \"/tmp/mount-1\", \"options\": [\"bind\"]}] '\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n# We had bugs where 1 mount worked but not 2+, test with 2 as it is a more\n# general case.\n@test \"userns with 2 inaccessible mounts\" {\n\tupdate_config '   .process.args += [\"-c\", \"stat /tmp/mount-1/foo.txt /tmp/mount-2/foo.txt\"]\n\t\t\t| .mounts += [\t{ \"source\": \"source-inaccessible-1/dir\", \"destination\": \"/tmp/mount-1\", \"options\": [\"bind\"] },\n\t\t\t                { \"source\": \"source-inaccessible-2/dir\", \"destination\": \"/tmp/mount-2\", \"options\": [\"bind\"] }\n\t\t\t           ]'\n\n\t# When not running rootless, this should work: while\n\t# \"source-inaccessible-1\" can't be read by the uid in the userns, the fd\n\t# is opened before changing to the userns and sent over via SCM_RIGHTs\n\t# (with env var _LIBCONTAINER_MOUNT_FDS). Idem for\n\t# source-inaccessible-2.\n\t# On rootless, the owner is the same so it is accessible.\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n}\n\n# exec + bindmounts + user ns is a special case in the code. Test that it works.\n@test \"userns with inaccessible mount + exec\" {\n\tupdate_config ' .mounts += [ \t{ \"source\": \"source-inaccessible-1/dir\", \"destination\": \"/tmp/mount-1\", \"options\": [\"bind\"] },\n\t\t\t\t\t{ \"source\": \"source-inaccessible-2/dir\", \"destination\": \"/tmp/mount-2\", \"options\": [\"bind\"] }\n\t\t\t         ]'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec test_busybox stat /tmp/mount-1/foo.txt /tmp/mount-2/foo.txt\n\t[ \"$status\" -eq 0 ]\n}\n\n# Issue fixed by https://github.com/opencontainers/runc/pull/3510.\n@test \"userns with bind mount before a cgroupfs mount\" {\n\t# This can only be reproduced on cgroup v1 (and no cgroupns) due to the\n\t# way it is mounted in such case (a bunch of of bind mounts).\n\trequires cgroups_v1\n\n\t# Add a bind mount right before the /sys/fs/cgroup mount,\n\t# and make sure cgroupns is not enabled.\n\tupdate_config '\t  .mounts |= map(if .destination == \"/sys/fs/cgroup\" then ({\"source\": \"source-accessible/dir\", \"destination\": \"/tmp/mount-1\", \"options\": [\"bind\"]}, .) else . end)\n\t\t\t| .linux.namespaces -= [{\"type\": \"cgroup\"}]'\n\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# Make sure this is real cgroupfs.\n\trunc exec test_busybox cat /sys/fs/cgroup/{pids,memory}/tasks\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"userns join other container userns\" {\n\t# Create a detached container with the id-mapping we want.\n\tupdate_config '.process.args = [\"sleep\", \"infinity\"]'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" target_userns\n\t[ \"$status\" -eq 0 ]\n\n\t# Configure our container to attach to the first container's userns.\n\ttarget_pid=\"$(__runc state target_userns | jq .pid)\"\n\tupdate_config '.linux.namespaces |= map(if .type == \"user\" then (.path = \"/proc/'\"$target_pid\"'/ns/\" + .type) else . end)\n\t\t| del(.linux.uidMappings)\n\t\t| del(.linux.gidMappings)'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" in_userns\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec in_userns cat /proc/self/uid_map\n\t[ \"$status\" -eq 0 ]\n\tif [ $EUID -eq 0 ]; then\n\t\tgrep -E '^\\s+0\\s+100000\\s+65534$' <<<\"$output\"\n\telse\n\t\tgrep -E '^\\s+0\\s+'$EUID'\\s+1$' <<<\"$output\"\n\tfi\n\n\trunc exec in_userns cat /proc/self/gid_map\n\t[ \"$status\" -eq 0 ]\n\tif [ $EUID -eq 0 ]; then\n\t\tgrep -E '^\\s+0\\s+200000\\s+65534$' <<<\"$output\"\n\telse\n\t\tgrep -E '^\\s+0\\s+'$EUID'\\s+1$' <<<\"$output\"\n\tfi\n}\n\n# issue: https://github.com/opencontainers/runc/issues/4466\n@test \"userns join other container userns[selinux enabled]\" {\n\tif ! selinuxenabled; then\n\t\tskip \"requires SELinux enabled and in enforcing mode\"\n\tfi\n\t# Create a detached container with the id-mapping we want.\n\tupdate_config '.process.args = [\"sleep\", \"infinity\"]'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" target_userns\n\t[ \"$status\" -eq 0 ]\n\n\t# Configure our container to attach to the first container's userns.\n\ttarget_pid=\"$(__runc state target_userns | jq .pid)\"\n\tupdate_config '.linux.namespaces |= map(if .type == \"user\" then (.path = \"/proc/'\"$target_pid\"'/ns/\" + .type) else . end)\n\t\t| del(.linux.uidMappings)\n\t\t| del(.linux.gidMappings)\n\t\t| .linux.mountLabel=\"system_u:object_r:container_file_t:s0:c344,c805\"'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" in_userns\n\t[ \"$status\" -eq 0 ]\n}\n\n@test \"userns join other container userns [bind-mounted nsfd]\" {\n\trequires root\n\n\t# Create a detached container with the id-mapping we want.\n\tupdate_config '.process.args = [\"sleep\", \"infinity\"]'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" target_userns\n\t[ \"$status\" -eq 0 ]\n\n\t# Bind-mount the first containers userns nsfd to a different path, to\n\t# exercise the non-fast-path (where runc has to join the userns to get the\n\t# mappings).\n\ttarget_pid=\"$(__runc state target_userns | jq .pid)\"\n\tuserns_path=$(mktemp \"$BATS_RUN_TMPDIR/userns.XXXXXX\")\n\tmount --bind \"/proc/$target_pid/ns/user\" \"$userns_path\"\n\techo \"$userns_path\" >>\"$to_umount_list\"\n\n\t# Configure our container to attach to the first container's userns.\n\tupdate_config '.linux.namespaces |= map(if .type == \"user\" then (.path = \"'\"$userns_path\"'\") else . end)\n\t\t| del(.linux.uidMappings)\n\t\t| del(.linux.gidMappings)'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" in_userns\n\t[ \"$status\" -eq 0 ]\n\n\trunc exec in_userns cat /proc/self/uid_map\n\t[ \"$status\" -eq 0 ]\n\tif [ $EUID -eq 0 ]; then\n\t\tgrep -E '^\\s+0\\s+100000\\s+65534$' <<<\"$output\"\n\telse\n\t\tgrep -E '^\\s+0\\s+'$EUID'\\s+1$' <<<\"$output\"\n\tfi\n\n\trunc exec in_userns cat /proc/self/gid_map\n\t[ \"$status\" -eq 0 ]\n\tif [ $EUID -eq 0 ]; then\n\t\tgrep -E '^\\s+0\\s+200000\\s+65534$' <<<\"$output\"\n\telse\n\t\tgrep -E '^\\s+0\\s+'$EUID'\\s+1$' <<<\"$output\"\n\tfi\n}\n\n# <https://github.com/opencontainers/runc/issues/4390>\n@test \"userns join external namespaces [wrong userns owner]\" {\n\trequires root\n\n\t# Create an external user namespace for us to join. It seems on some\n\t# operating systems (AlmaLinux in particular) \"unshare -U\" will\n\t# automatically use an identity mapping (which breaks this test) so we need\n\t# to use runc to create the userns.\n\tupdate_config '.process.args = [\"sleep\", \"infinity\"]'\n\trunc run -d --console-socket \"$CONSOLE_SOCKET\" target_userns\n\t[ \"$status\" -eq 0 ]\n\n\t# Bind-mount the first containers userns nsfd to a different path, to\n\t# exercise the non-fast-path (where runc has to join the userns to get the\n\t# mappings).\n\tuserns_pid=\"$(__runc state target_userns | jq .pid)\"\n\tuserns_path=\"$(mktemp \"$BATS_RUN_TMPDIR/userns.XXXXXX\")\"\n\tmount --bind \"/proc/$userns_pid/ns/user\" \"$userns_path\"\n\techo \"$userns_path\" >>\"$to_umount_list\"\n\n\t# Kill the container -- we have the userns bind-mounted.\n\trunc delete -f target_userns\n\t[ \"$status\" -eq 0 ]\n\n\t# Configure our container to attach to the external userns.\n\tupdate_config '.linux.namespaces |= map(if .type == \"user\" then (.path = \"'\"$userns_path\"'\") else . end)\n\t\t| del(.linux.uidMappings)\n\t\t| del(.linux.gidMappings)'\n\n\t# Also create a network namespace that *is not owned* by the above userns.\n\t# NOTE: Having no permissions in a namespaces makes it necessary to modify\n\t# the config so that we don't get mount errors (for reference: no netns\n\t# permissions == no sysfs mounts, no pidns permissions == no procfs mounts,\n\t# no utsns permissions == no sethostname(2), no ipc permissions == no\n\t# mqueue mounts, etc).\n\tnetns_path=\"$(mktemp \"$BATS_RUN_TMPDIR/netns.XXXXXX\")\"\n\tunshare -i -- mount --bind \"/proc/self/ns/net\" \"$netns_path\"\n\techo \"$netns_path\" >>\"$to_umount_list\"\n\t# Configure our container to attach to the external netns.\n\tupdate_config '.linux.namespaces |= map(if .type == \"network\" then (.path = \"'\"$netns_path\"'\") else . end)'\n\n\t# Convert sysfs mounts to a bind-mount from the host, to avoid permission\n\t# issues due to the netns setup we have.\n\tupdate_config '.mounts |= map((select(.type == \"sysfs\") | { \"source\": \"/sys\", \"destination\": .destination, \"type\": \"bind\", \"options\": [\"rbind\"] }) // .)'\n\n\t# Create a detached container to verify the namespaces are correct.\n\tupdate_config '.process.args = [\"sleep\", \"infinity\"]'\n\trunc --debug run -d --console-socket \"$CONSOLE_SOCKET\" ctr\n\t[ \"$status\" -eq 0 ]\n\n\tuserns_id=\"user:[$(stat -c \"%i\" \"$userns_path\")]\"\n\tnetns_id=\"net:[$(stat -c \"%i\" \"$netns_path\")]\"\n\n\trunc exec ctr readlink /proc/self/ns/user\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == \"$userns_id\" ]]\n\n\trunc exec ctr readlink /proc/self/ns/net\n\t[ \"$status\" -eq 0 ]\n\t[[ \"$output\" == \"$netns_id\" ]]\n}\n\n@test \"userns with network interface\" {\n\trequires root\n\n\t# Create a dummy interface to move to the container.\n\tip link add dummy0 type dummy\n\n\tupdate_config ' .linux.netDevices |= {\"dummy0\": {} }\n\t\t| .process.args |= [\"ip\", \"address\", \"show\", \"dev\", \"dummy0\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# The interface is virtual and should not exist because\n\t# is deleted during the namespace cleanup.\n\trun ! ip link del dummy0\n}\n\n@test \"userns with network interface renamed\" {\n\trequires root\n\n\t# Create a dummy interface to move to the container.\n\tip link add dummy0 type dummy\n\n\tupdate_config ' .linux.netDevices |= { \"dummy0\": { \"name\" : \"ctr_dummy0\" } }\n\t\t| .process.args |= [\"ip\", \"address\", \"show\", \"dev\", \"ctr_dummy0\"]'\n\n\trunc run test_busybox\n\t[ \"$status\" -eq 0 ]\n\n\t# The interface is virtual and should not exist because\n\t# is deleted during the namespace cleanup.\n\trun ! ip link del dummy0\n}\n"
  },
  {
    "path": "tests/integration/version.bats",
    "content": "#!/usr/bin/env bats\n\nload helpers\n\n@test \"runc version\" {\n\trunc -v\n\t[ \"$status\" -eq 0 ]\n\t[[ ${lines[0]} =~ runc\\ version\\ [0-9]+\\.[0-9]+\\.[0-9]+ ]]\n\t[[ ${lines[1]} =~ commit:+ ]]\n\t[[ ${lines[2]} =~ spec:\\ [0-9]+\\.[0-9]+\\.[0-9]+ ]]\n}\n"
  },
  {
    "path": "tests/rootless.sh",
    "content": "#!/bin/bash\n# Copyright (C) 2017 SUSE LLC\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# rootless.sh -- Runner for rootless container tests. The purpose of this\n# script is to allow for the addition (and testing) of \"opportunistic\" features\n# to rootless containers while still testing the base features. In order to add\n# a new feature, please match the existing style. Add an entry to $ALL_FEATURES,\n# and add an enable_* and disable_* hook.\n\nset -e -u -o pipefail\n: \"${ROOTLESS_TESTPATH:=}\"\n\nALL_FEATURES=(\"idmap\" \"cgroup\")\n# cgroup is managed by systemd when RUNC_USE_SYSTEMD is set.\nif [ -v RUNC_USE_SYSTEMD ]; then\n\tALL_FEATURES=(\"idmap\")\nfi\nROOT=\"$(readlink -f \"$(dirname \"${BASH_SOURCE[0]}\")/..\")\"\n\n# FEATURE: Opportunistic new{uid,gid}map support, allowing a rootless container\n#          to be set up with the usage of helper setuid binaries.\n\nfunction enable_idmap() {\n\texport ROOTLESS_UIDMAP_START=100000 ROOTLESS_UIDMAP_LENGTH=65536\n\texport ROOTLESS_GIDMAP_START=200000 ROOTLESS_GIDMAP_LENGTH=65536\n\n\t# Set up sub{uid,gid} mappings.\n\t[ -e /etc/subuid.tmp ] && mv /etc/subuid{.tmp,}\n\t(\n\t\tgrep -v '^rootless' /etc/subuid\n\t\techo \"rootless:$ROOTLESS_UIDMAP_START:$ROOTLESS_UIDMAP_LENGTH\"\n\t) >/etc/subuid.tmp\n\tmv /etc/subuid{.tmp,}\n\t[ -e /etc/subgid.tmp ] && mv /etc/subgid{.tmp,}\n\t(\n\t\tgrep -v '^rootless' /etc/subgid\n\t\techo \"rootless:$ROOTLESS_GIDMAP_START:$ROOTLESS_GIDMAP_LENGTH\"\n\t) >/etc/subgid.tmp\n\tmv /etc/subgid{.tmp,}\n\n\t# Reactivate new{uid,gid}map helpers if applicable.\n\t[ -e /usr/bin/unused-newuidmap ] && mv /usr/bin/{unused-,}newuidmap\n\t[ -e /usr/bin/unused-newgidmap ] && mv /usr/bin/{unused-,}newgidmap\n\n\t# Create a directory owned by $AUX_UID inside container, to be used\n\t# by a test case in cwd.bats. This setup can't be done by the test itself,\n\t# as it needs root for chown.\n\texport AUX_UID=1024\n\tAUX_DIR=\"$(mktemp -d)\"\n\t# 1000 is linux.uidMappings.containerID value,\n\t# as set by runc_rootless_idmap\n\tchown \"$((ROOTLESS_UIDMAP_START - 1000 + AUX_UID))\" \"$AUX_DIR\"\n\texport AUX_DIR\n}\n\nfunction disable_idmap() {\n\texport ROOTLESS_UIDMAP_START ROOTLESS_UIDMAP_LENGTH\n\texport ROOTLESS_GIDMAP_START ROOTLESS_GIDMAP_LENGTH\n\n\t# Deactivate sub{uid,gid} mappings.\n\t[ -e /etc/subuid ] && mv /etc/subuid{,.tmp}\n\t[ -e /etc/subgid ] && mv /etc/subgid{,.tmp}\n\n\t# Deactivate new{uid,gid}map helpers. setuid is preserved with mv(1).\n\t[ -e /usr/bin/newuidmap ] && mv /usr/bin/{,unused-}newuidmap\n\t[ -e /usr/bin/newgidmap ] && mv /usr/bin/{,unused-}newgidmap\n\n\treturn 0\n}\n\nfunction cleanup() {\n\tif [ -v AUX_DIR ]; then\n\t\trmdir \"$AUX_DIR\"\n\t\tunset AUX_DIX\n\tfi\n}\n\n# FEATURE: Opportunistic cgroups support, allowing a rootless container to set\n#          resource limits on condition that cgroupsPath is set to a path the\n#          rootless user has permissions on.\n\n# List of cgroups. We handle name= cgroups as well as combined\n# (comma-separated) cgroups and correctly split and/or strip them.\n# shellcheck disable=SC2207\nALL_CGROUPS=($(cut -d: -f2 </proc/self/cgroup | sed -E '{s/^name=//;s/,/\\n/;/^$/D}'))\nCGROUP_MOUNT=\"/sys/fs/cgroup\"\nCGROUP_PATH=\"/runc-cgroups-integration-test\"\nCGROUP_PIN_PID=-1\n\nfunction enable_cgroup() {\n\t# cgroup v2\n\tif [[ -e \"$CGROUP_MOUNT/cgroup.controllers\" ]]; then\n\t\t# Enable controllers. Some controller (e.g. memory) may fail on containerized environment.\n\t\tset -x\n\t\t# shellcheck disable=SC2013\n\t\tfor f in $(cat \"$CGROUP_MOUNT/cgroup.controllers\"); do echo \"+$f\" >\"$CGROUP_MOUNT/cgroup.subtree_control\"; done\n\t\tset +x\n\t\t# Create the cgroup.\n\t\tmkdir -p \"$CGROUP_MOUNT/$CGROUP_PATH\"\n\t\t# chown/chmod dir + cgroup.subtree_control + cgroup.procs + parent's cgroup.procs.\n\t\t# See https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#delegation-containment\n\t\tchown root:rootless \"$CGROUP_MOUNT/$CGROUP_PATH\" \"$CGROUP_MOUNT/$CGROUP_PATH/cgroup.subtree_control\" \"$CGROUP_MOUNT/$CGROUP_PATH/cgroup.procs\" \"$CGROUP_MOUNT/cgroup.procs\"\n\t\tchmod g+rwx \"$CGROUP_MOUNT/$CGROUP_PATH\"\n\t\tchmod g+rw \"$CGROUP_MOUNT/$CGROUP_PATH/cgroup.subtree_control\" \"$CGROUP_MOUNT/$CGROUP_PATH/cgroup.procs\" \"$CGROUP_MOUNT/cgroup.procs\"\n\telse\n\t\t# On some systems (e.g., AlmaLinux 8), systemd automatically removes cgroup paths\n\t\t# when they become empty (i.e., contain no processes). To prevent this, we spawn\n\t\t# a dummy process to pin the cgroup in place.\n\t\t# See: https://github.com/opencontainers/runc/issues/5003\n\t\tsleep inf &\n\t\tCGROUP_PIN_PID=$!\n\t\t# Set up cgroups for use in rootless containers.\n\t\tfor cg in \"${ALL_CGROUPS[@]}\"; do\n\t\t\tmkdir -p \"$CGROUP_MOUNT/$cg$CGROUP_PATH\"\n\t\t\t# TODO: Consider retrying on \"No space left on device\" errors.\n\t\t\techo \"$CGROUP_PIN_PID\" >\"$CGROUP_MOUNT/$cg$CGROUP_PATH/cgroup.procs\" || true\n\t\t\t# We only need to allow write access to {cgroup.procs,tasks} and the\n\t\t\t# directory. Rather than changing the owner entirely, we just change\n\t\t\t# the group and then allow write access to the group (in order to\n\t\t\t# further limit the possible DAC permissions that runc could use).\n\t\t\tchown root:rootless \"$CGROUP_MOUNT/$cg$CGROUP_PATH/\"{,cgroup.procs,tasks}\n\t\t\tchmod g+rwx \"$CGROUP_MOUNT/$cg$CGROUP_PATH/\"{,cgroup.procs,tasks}\n\t\t\t# Due to cpuset's semantics we need to give extra permissions to allow\n\t\t\t# for runc to set up the hierarchy. XXX: This really shouldn't be\n\t\t\t# necessary, and might actually be a bug in our impl of cgroup\n\t\t\t# handling.\n\t\t\t[ \"$cg\" = \"cpuset\" ] && chown rootless:rootless \"$CGROUP_MOUNT/$cg$CGROUP_PATH/cpuset.\"{cpus,mems}\n\t\t\t# The following is required by \"update rt period and runtime\".\n\t\t\tif [ \"$cg\" = \"cpu\" ]; then\n\t\t\t\tif [[ -e \"$CGROUP_MOUNT/$cg$CGROUP_PATH/cpu.rt_period_us\" ]]; then\n\t\t\t\t\tchown rootless:rootless \"$CGROUP_MOUNT/$cg$CGROUP_PATH/cpu.rt_period_us\"\n\t\t\t\tfi\n\t\t\t\tif [[ -e \"$CGROUP_MOUNT/$cg$CGROUP_PATH/cpu.rt_runtime_us\" ]]; then\n\t\t\t\t\tchown rootless:rootless \"$CGROUP_MOUNT/$cg$CGROUP_PATH/cpu.rt_runtime_us\"\n\t\t\t\tfi\n\t\t\tfi\n\t\tdone\n\tfi\n}\n\nfunction disable_cgroup() {\n\tif [ $CGROUP_PIN_PID -ne -1 ]; then\n\t\tkill -9 \"$CGROUP_PIN_PID\" || true\n\t\twait \"$CGROUP_PIN_PID\" 2>/dev/null || true\n\t\tCGROUP_PIN_PID=-1\n\tfi\n\t# Remove cgroups used in rootless containers.\n\tfor cg in \"${ALL_CGROUPS[@]}\"; do\n\t\t[ -d \"$CGROUP_MOUNT/$cg$CGROUP_PATH\" ] && rmdir \"$CGROUP_MOUNT/$cg$CGROUP_PATH\"\n\tdone\n\t# cgroup v2\n\t[ -d \"$CGROUP_MOUNT/$CGROUP_PATH\" ] && rmdir \"$CGROUP_MOUNT/$CGROUP_PATH\"\n\n\treturn 0\n}\n\n# Create a powerset of $ALL_FEATURES (the set of all subsets of $ALL_FEATURES).\n# We test all of the possible combinations (as long as we don't add too many\n# feature knobs this shouldn't take too long -- but the number of tested\n# combinations is O(2^n)).\nfunction powerset() {\n\teval printf '%s' \"$(printf '{,%s+}' \"$@\")\":\n}\nfeatures_powerset=\"$(powerset \"${ALL_FEATURES[@]}\")\"\n\n# Make sure we have container images downloaded, as otherwise\n# rootless user won't be able to write to $TESTDATA.\n\"$ROOT\"/tests/integration/get-images.sh >/dev/null\n\n# Iterate over the powerset of all features.\nIFS=:\nidx=0\nfor enabled_features in $features_powerset; do\n\t((++idx))\n\tprintf \"[%.2d] run rootless tests ... (${enabled_features%%+})\\n\" \"$idx\"\n\n\tunset IFS\n\tfor feature in \"${ALL_FEATURES[@]}\"; do\n\t\thook_func=\"disable_$feature\"\n\t\tgrep -E \"(^|\\+)$feature(\\+|$)\" <<<\"$enabled_features\" &>/dev/null && hook_func=\"enable_$feature\"\n\t\t\"$hook_func\"\n\tdone\n\n\t# Run the test suite!\n\techo \"path: $PATH\"\n\texport ROOTLESS_FEATURES=\"$enabled_features\"\n\tif [ -v RUNC_USE_SYSTEMD ]; then\n\t\t# We use `ssh rootless@localhost` instead of `sudo -u rootless` for creating systemd user session.\n\t\t# Alternatively we could use `machinectl shell`, but it is known not to work well on SELinux-enabled hosts as of April 2020:\n\t\t# https://bugzilla.redhat.com/show_bug.cgi?id=1788616\n\t\tssh -t -t -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i \"$HOME/.ssh/rootless.key\" rootless@localhost -- PATH=\"$PATH\" RUNC_USE_SYSTEMD=\"$RUNC_USE_SYSTEMD\" bats -t \"$ROOT/tests/integration$ROOTLESS_TESTPATH\"\n\telse\n\t\tsudo -HE -u rootless PATH=\"$PATH\" \"$(which bats)\" -t \"$ROOT/tests/integration$ROOTLESS_TESTPATH\"\n\tfi\n\tcleanup\ndone\n"
  },
  {
    "path": "tty.go",
    "content": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/signal\"\n\t\"sync\"\n\n\t\"github.com/containerd/console\"\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n)\n\ntype tty struct {\n\tepoller     *console.Epoller\n\tconsole     *console.EpollConsole\n\thostConsole console.Console\n\tclosers     []io.Closer\n\tpostStart   []io.Closer\n\twg          sync.WaitGroup\n\tconsoleC    chan error\n}\n\nfunc (t *tty) copyIO(w io.Writer, r io.ReadCloser) {\n\tdefer t.wg.Done()\n\t_, _ = io.Copy(w, r)\n\t_ = r.Close()\n}\n\n// setup pipes for the process so that advanced features like c/r are able to easily checkpoint\n// and restore the process's IO without depending on a host specific path or device\nfunc setupProcessPipes(p *libcontainer.Process, rootuid, rootgid int) (*tty, error) {\n\ti, err := p.InitializeIO(rootuid, rootgid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tt := &tty{\n\t\tclosers: []io.Closer{\n\t\t\ti.Stdin,\n\t\t\ti.Stdout,\n\t\t\ti.Stderr,\n\t\t},\n\t}\n\t// add the process's io to the post start closers if they support close\n\tfor _, cc := range []any{\n\t\tp.Stdin,\n\t\tp.Stdout,\n\t\tp.Stderr,\n\t} {\n\t\tif c, ok := cc.(io.Closer); ok {\n\t\t\tt.postStart = append(t.postStart, c)\n\t\t}\n\t}\n\tgo func() {\n\t\t_, _ = io.Copy(i.Stdin, os.Stdin)\n\t\t_ = i.Stdin.Close()\n\t}()\n\tt.wg.Add(2)\n\tgo t.copyIO(os.Stdout, i.Stdout)\n\tgo t.copyIO(os.Stderr, i.Stderr)\n\treturn t, nil\n}\n\nfunc inheritStdio(process *libcontainer.Process) {\n\tprocess.Stdin = os.Stdin\n\tprocess.Stdout = os.Stdout\n\tprocess.Stderr = os.Stderr\n}\n\nfunc (t *tty) initHostConsole() error {\n\t// Usually all three (stdin, stdout, and stderr) streams are open to\n\t// the terminal, but they might be redirected, so try them all.\n\tfor _, s := range []*os.File{os.Stderr, os.Stdout, os.Stdin} {\n\t\tc, err := console.ConsoleFromFile(s)\n\t\tif err == nil {\n\t\t\tt.hostConsole = c\n\t\t\treturn nil\n\t\t}\n\t\tif errors.Is(err, console.ErrNotAConsole) {\n\t\t\tcontinue\n\t\t}\n\t\t// should not happen\n\t\treturn fmt.Errorf(\"unable to get console: %w\", err)\n\t}\n\t// If all streams are redirected, but we still have a controlling\n\t// terminal, it can be obtained by opening /dev/tty.\n\ttty, err := os.Open(\"/dev/tty\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tc, err := console.ConsoleFromFile(tty)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unable to get console: %w\", err)\n\t}\n\n\tt.hostConsole = c\n\treturn nil\n}\n\nfunc (t *tty) recvtty(socket *os.File) (Err error) {\n\tf, err := utils.RecvFile(socket)\n\tif err != nil {\n\t\treturn err\n\t}\n\tcons, err := console.ConsoleFromFile(f)\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = console.ClearONLCR(cons.Fd())\n\tif err != nil {\n\t\treturn err\n\t}\n\tepoller, err := console.NewEpoller()\n\tif err != nil {\n\t\treturn err\n\t}\n\tepollConsole, err := epoller.Add(cons)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tif Err != nil {\n\t\t\t_ = epollConsole.Close()\n\t\t}\n\t}()\n\tgo func() { _ = epoller.Wait() }()\n\tgo func() { _, _ = io.Copy(epollConsole, os.Stdin) }()\n\tt.wg.Add(1)\n\tgo t.copyIO(os.Stdout, epollConsole)\n\n\t// Set raw mode for the controlling terminal.\n\tif err := t.hostConsole.SetRaw(); err != nil {\n\t\treturn fmt.Errorf(\"failed to set the terminal from the stdin: %w\", err)\n\t}\n\tgo handleInterrupt(t.hostConsole)\n\n\tt.epoller = epoller\n\tt.console = epollConsole\n\tt.closers = []io.Closer{epollConsole}\n\treturn nil\n}\n\nfunc handleInterrupt(c console.Console) {\n\tsigchan := make(chan os.Signal, 1)\n\tsignal.Notify(sigchan, os.Interrupt)\n\t<-sigchan\n\t_ = c.Reset()\n\tos.Exit(0)\n}\n\nfunc (t *tty) waitConsole() error {\n\tif t.consoleC != nil {\n\t\treturn <-t.consoleC\n\t}\n\treturn nil\n}\n\n// ClosePostStart closes any fds that are provided to the container and dup2'd\n// so that we no longer have copy in our process.\nfunc (t *tty) ClosePostStart() {\n\tfor _, c := range t.postStart {\n\t\t_ = c.Close()\n\t}\n}\n\n// Close closes all open fds for the tty and/or restores the original\n// stdin state to what it was prior to the container execution\nfunc (t *tty) Close() {\n\t// ensure that our side of the fds are always closed\n\tfor _, c := range t.postStart {\n\t\t_ = c.Close()\n\t}\n\t// the process is gone at this point, shutting down the console if we have\n\t// one and wait for all IO to be finished\n\tif t.console != nil && t.epoller != nil {\n\t\t_ = t.console.Shutdown(t.epoller.CloseConsole)\n\t}\n\tt.wg.Wait()\n\tfor _, c := range t.closers {\n\t\t_ = c.Close()\n\t}\n\tif t.hostConsole != nil {\n\t\t_ = t.hostConsole.Reset()\n\t}\n}\n\nfunc (t *tty) resize() error {\n\tif t.console == nil || t.hostConsole == nil {\n\t\treturn nil\n\t}\n\treturn t.console.ResizeFrom(t.hostConsole)\n}\n"
  },
  {
    "path": "types/events.go",
    "content": "// Package types defines the types used for the cgroup-related events APIs\n// provided by \"runc events\".\npackage types\n\nimport (\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/runc/libcontainer/intelrdt\"\n)\n\n// Event struct for encoding the event data to json.\ntype Event struct {\n\tType string `json:\"type\"`\n\tID   string `json:\"id\"`\n\tData any    `json:\"data,omitempty\"`\n}\n\n// Stats is the runc specific stats structure for stability when encoding and decoding stats.\ntype Stats struct {\n\tCPU               Cpu                 `json:\"cpu\"`\n\tCPUSet            CPUSet              `json:\"cpuset\"`\n\tMemory            Memory              `json:\"memory\"`\n\tPids              Pids                `json:\"pids\"`\n\tBlkio             Blkio               `json:\"blkio\"`\n\tHugetlb           map[string]Hugetlb  `json:\"hugetlb\"`\n\tIntelRdt          IntelRdt            `json:\"intel_rdt\"`\n\tNetworkInterfaces []*NetworkInterface `json:\"network_interfaces\"`\n}\n\ntype PSIData = cgroups.PSIData\n\ntype PSIStats = cgroups.PSIStats\n\ntype Hugetlb struct {\n\tUsage   uint64 `json:\"usage,omitempty\"`\n\tMax     uint64 `json:\"max,omitempty\"`\n\tFailcnt uint64 `json:\"failcnt\"`\n}\n\ntype BlkioEntry struct {\n\tMajor uint64 `json:\"major,omitempty\"`\n\tMinor uint64 `json:\"minor,omitempty\"`\n\tOp    string `json:\"op,omitempty\"`\n\tValue uint64 `json:\"value,omitempty\"`\n}\n\ntype Blkio struct {\n\tIoServiceBytesRecursive []BlkioEntry `json:\"ioServiceBytesRecursive,omitempty\"`\n\tIoServicedRecursive     []BlkioEntry `json:\"ioServicedRecursive,omitempty\"`\n\tIoQueuedRecursive       []BlkioEntry `json:\"ioQueueRecursive,omitempty\"`\n\tIoServiceTimeRecursive  []BlkioEntry `json:\"ioServiceTimeRecursive,omitempty\"`\n\tIoWaitTimeRecursive     []BlkioEntry `json:\"ioWaitTimeRecursive,omitempty\"`\n\tIoMergedRecursive       []BlkioEntry `json:\"ioMergedRecursive,omitempty\"`\n\tIoTimeRecursive         []BlkioEntry `json:\"ioTimeRecursive,omitempty\"`\n\tSectorsRecursive        []BlkioEntry `json:\"sectorsRecursive,omitempty\"`\n\tPSI                     *PSIStats    `json:\"psi,omitempty\"`\n}\n\ntype Pids struct {\n\tCurrent uint64 `json:\"current,omitempty\"`\n\tLimit   uint64 `json:\"limit,omitempty\"`\n}\n\ntype Throttling struct {\n\tPeriods          uint64 `json:\"periods,omitempty\"`\n\tThrottledPeriods uint64 `json:\"throttledPeriods,omitempty\"`\n\tThrottledTime    uint64 `json:\"throttledTime,omitempty\"`\n}\n\ntype CpuUsage struct {\n\t// Units: nanoseconds.\n\tTotal        uint64   `json:\"total,omitempty\"`\n\tPercpu       []uint64 `json:\"percpu,omitempty\"`\n\tPercpuKernel []uint64 `json:\"percpu_kernel,omitempty\"`\n\tPercpuUser   []uint64 `json:\"percpu_user,omitempty\"`\n\tKernel       uint64   `json:\"kernel\"`\n\tUser         uint64   `json:\"user\"`\n}\n\ntype Cpu struct {\n\tUsage      CpuUsage   `json:\"usage,omitzero\"`\n\tThrottling Throttling `json:\"throttling,omitzero\"`\n\tPSI        *PSIStats  `json:\"psi,omitempty\"`\n}\n\ntype CPUSet struct {\n\tCPUs                  []uint16 `json:\"cpus,omitempty\"`\n\tCPUExclusive          uint64   `json:\"cpu_exclusive\"`\n\tMems                  []uint16 `json:\"mems,omitempty\"`\n\tMemHardwall           uint64   `json:\"mem_hardwall\"`\n\tMemExclusive          uint64   `json:\"mem_exclusive\"`\n\tMemoryMigrate         uint64   `json:\"memory_migrate\"`\n\tMemorySpreadPage      uint64   `json:\"memory_spread_page\"`\n\tMemorySpreadSlab      uint64   `json:\"memory_spread_slab\"`\n\tMemoryPressure        uint64   `json:\"memory_pressure\"`\n\tSchedLoadBalance      uint64   `json:\"sched_load_balance\"`\n\tSchedRelaxDomainLevel int64    `json:\"sched_relax_domain_level\"`\n}\n\ntype MemoryEntry struct {\n\tLimit   uint64 `json:\"limit\"`\n\tUsage   uint64 `json:\"usage,omitempty\"`\n\tMax     uint64 `json:\"max,omitempty\"`\n\tFailcnt uint64 `json:\"failcnt\"`\n}\n\ntype Memory struct {\n\tCache     uint64            `json:\"cache,omitempty\"`\n\tUsage     MemoryEntry       `json:\"usage,omitzero\"`\n\tSwap      MemoryEntry       `json:\"swap,omitzero\"`\n\tKernel    MemoryEntry       `json:\"kernel,omitzero\"`\n\tKernelTCP MemoryEntry       `json:\"kernelTCP,omitzero\"`\n\tRaw       map[string]uint64 `json:\"raw,omitempty\"`\n\tPSI       *PSIStats         `json:\"psi,omitempty\"`\n}\n\ntype L3CacheInfo struct {\n\tCbmMask    string `json:\"cbm_mask,omitempty\"`\n\tMinCbmBits uint64 `json:\"min_cbm_bits,omitempty\"`\n\tNumClosids uint64 `json:\"num_closids,omitempty\"`\n}\n\ntype MemBwInfo struct {\n\tBandwidthGran uint64 `json:\"bandwidth_gran,omitempty\"`\n\tDelayLinear   uint64 `json:\"delay_linear,omitempty\"`\n\tMinBandwidth  uint64 `json:\"min_bandwidth,omitempty\"`\n\tNumClosids    uint64 `json:\"num_closids,omitempty\"`\n}\n\ntype IntelRdt struct {\n\t// The read-only L3 cache information\n\tL3CacheInfo *L3CacheInfo `json:\"l3_cache_info,omitempty\"`\n\n\t// The read-only L3 cache schema in root\n\tL3CacheSchemaRoot string `json:\"l3_cache_schema_root,omitempty\"`\n\n\t// The L3 cache schema in 'container_id' group\n\tL3CacheSchema string `json:\"l3_cache_schema,omitempty\"`\n\n\t// The read-only memory bandwidth information\n\tMemBwInfo *MemBwInfo `json:\"mem_bw_info,omitempty\"`\n\n\t// The read-only memory bandwidth schema in root\n\tMemBwSchemaRoot string `json:\"mem_bw_schema_root,omitempty\"`\n\n\t// The memory bandwidth schema in 'container_id' group\n\tMemBwSchema string `json:\"mem_bw_schema,omitempty\"`\n\n\t// Schemata contains the full schemata of the ClosID (resctrl group) that the container is assigned to.\n\tSchemata []string `json:\"schemata,omitempty\"`\n\n\t// The memory bandwidth monitoring statistics from NUMA nodes in 'container_id' group\n\tMBMStats *[]intelrdt.MBMNumaNodeStats `json:\"mbm_stats,omitempty\"`\n\n\t// The cache monitoring technology statistics from NUMA nodes in 'container_id' group\n\tCMTStats *[]intelrdt.CMTNumaNodeStats `json:\"cmt_stats,omitempty\"`\n}\n\ntype NetworkInterface struct {\n\t// Name is the name of the network interface.\n\tName string\n\n\tRxBytes   uint64\n\tRxPackets uint64\n\tRxErrors  uint64\n\tRxDropped uint64\n\tTxBytes   uint64\n\tTxPackets uint64\n\tTxErrors  uint64\n\tTxDropped uint64\n}\n"
  },
  {
    "path": "types/features/features.go",
    "content": "// Package features provides the annotations for [github.com/opencontainers/runtime-spec/specs-go/features].\npackage features\n\nconst (\n\t// AnnotationRuncVersion represents the version of runc, e.g., \"1.2.3\", \"1.2.3+dev\", \"1.2.3-rc.4.\", \"1.2.3-rc.4+dev\".\n\t// Third party implementations such as crun and runsc MAY use this annotation to report the most compatible runc version,\n\t// however, parsing this annotation value is discouraged.\n\tAnnotationRuncVersion = \"org.opencontainers.runc.version\"\n\n\t// AnnotationRuncCommit corresponds to the output of `git describe --dirty --long --always` in the runc repo.\n\t// Third party implementations such as crun and runsc SHOULD NOT use this annotation, as their repo is different from the runc repo.\n\t// Parsing this annotation value is discouraged.\n\tAnnotationRuncCommit = \"org.opencontainers.runc.commit\"\n\n\t// AnnotationRuncCheckpointEnabled is set to \"true\" if CRIU-based checkpointing is supported.\n\t// Unrelated to whether the host supports CRIU or not.\n\t// Always set to \"true\" in the current version of runc.\n\t// This is defined as an annotation because checkpointing is a runc-specific feature that is not defined in the OCI Runtime Spec.\n\t// Third party implementations such as crun and runsc MAY use this annotation.\n\tAnnotationRuncCheckpointEnabled = \"org.opencontainers.runc.checkpoint.enabled\"\n\n\t// AnnotationLibseccompVersion is the version of libseccomp, e.g., \"2.5.1\".\n\t// Note that the runtime MAY support seccomp even when this annotation is not present.\n\tAnnotationLibseccompVersion = \"io.github.seccomp.libseccomp.version\"\n)\n"
  },
  {
    "path": "update.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"slices\"\n\t\"strconv\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/sirupsen/logrus\"\n\n\t\"github.com/docker/go-units\"\n\t\"github.com/opencontainers/runc/libcontainer/intelrdt\"\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\t\"github.com/urfave/cli\"\n)\n\nfunc mkPtr[T any](v T) *T { return &v }\n\nvar updateCommand = cli.Command{\n\tName:      \"update\",\n\tUsage:     \"update container resource constraints\",\n\tArgsUsage: `<container-id>`,\n\tFlags: []cli.Flag{\n\t\tcli.StringFlag{\n\t\t\tName:  \"resources, r\",\n\t\t\tValue: \"\",\n\t\t\tUsage: `path to the file containing the resources to update or '-' to read from the standard input\n\nThe accepted format is as follow (unchanged values can be omitted):\n\n{\n  \"memory\": {\n    \"limit\": 0,\n    \"reservation\": 0,\n    \"swap\": 0,\n    \"checkBeforeUpdate\": true\n  },\n  \"cpu\": {\n    \"shares\": 0,\n    \"quota\": 0,\n    \"burst\": 0,\n    \"period\": 0,\n    \"realtimeRuntime\": 0,\n    \"realtimePeriod\": 0,\n    \"cpus\": \"\",\n    \"mems\": \"\",\n    \"idle\": 0\n  },\n  \"blockIO\": {\n    \"weight\": 0\n  }\n}\n\nNote: if data is to be read from a file or the standard input, all\nother options are ignored.\n`,\n\t\t},\n\n\t\tcli.IntFlag{\n\t\t\tName:  \"blkio-weight\",\n\t\t\tUsage: \"Specifies per cgroup weight, range is from 10 to 1000\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"cpu-period\",\n\t\t\tUsage: \"CPU CFS period to be used for hardcapping (in usecs). 0 to use system default\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"cpu-quota\",\n\t\t\tUsage: \"CPU CFS hardcap limit (in usecs). Allowed cpu time in a given period\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"cpu-burst\",\n\t\t\tUsage: \"CPU CFS hardcap burst limit (in usecs). Allowed accumulated cpu time additionally for burst a given period\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"cpu-share\",\n\t\t\tUsage: \"CPU shares (relative weight vs. other containers)\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"cpu-rt-period\",\n\t\t\tUsage: \"CPU realtime period to be used for hardcapping (in usecs). 0 to use system default\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"cpu-rt-runtime\",\n\t\t\tUsage: \"CPU realtime hardcap limit (in usecs). Allowed cpu time in a given period\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"cpuset-cpus\",\n\t\t\tUsage: \"CPU(s) to use\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"cpuset-mems\",\n\t\t\tUsage: \"Memory node(s) to use\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:   \"kernel-memory\",\n\t\t\tUsage:  \"(obsoleted; do not use)\",\n\t\t\tHidden: true,\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:   \"kernel-memory-tcp\",\n\t\t\tUsage:  \"(obsoleted; do not use)\",\n\t\t\tHidden: true,\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"memory\",\n\t\t\tUsage: \"Memory limit (in bytes)\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"cpu-idle\",\n\t\t\tUsage: \"set cgroup SCHED_IDLE or not, 0: default behavior, 1: SCHED_IDLE\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"memory-reservation\",\n\t\t\tUsage: \"Memory reservation or soft_limit (in bytes)\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"memory-swap\",\n\t\t\tUsage: \"Total memory usage (memory + swap); set '-1' to enable unlimited swap\",\n\t\t},\n\t\tcli.IntFlag{\n\t\t\tName:  \"pids-limit\",\n\t\t\tUsage: \"Maximum number of pids allowed in the container\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"l3-cache-schema\",\n\t\t\tUsage: \"The string of Intel RDT/CAT L3 cache schema\",\n\t\t},\n\t\tcli.StringFlag{\n\t\t\tName:  \"mem-bw-schema\",\n\t\t\tUsage: \"The string of Intel RDT/MBA memory bandwidth schema\",\n\t\t},\n\t},\n\tAction: func(context *cli.Context) error {\n\t\tif err := checkArgs(context, 1, exactArgs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcontainer, err := getContainer(context)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tr := specs.LinuxResources{\n\t\t\t// nil and mkPtr(0) are not interchangeable\n\t\t\tMemory: &specs.LinuxMemory{\n\t\t\t\tCheckBeforeUpdate: mkPtr(false), // constant\n\t\t\t},\n\t\t\tCPU:     &specs.LinuxCPU{},\n\t\t\tBlockIO: &specs.LinuxBlockIO{},\n\t\t\tPids:    &specs.LinuxPids{},\n\t\t}\n\n\t\tconfig := container.Config()\n\n\t\tif in := context.String(\"resources\"); in != \"\" {\n\t\t\tvar (\n\t\t\t\tf   *os.File\n\t\t\t\terr error\n\t\t\t)\n\t\t\tswitch in {\n\t\t\tcase \"-\":\n\t\t\t\tf = os.Stdin\n\t\t\tdefault:\n\t\t\t\tf, err = os.Open(in)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tdefer f.Close()\n\t\t\t}\n\t\t\terr = json.NewDecoder(f).Decode(&r)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\tif val := context.Int(\"blkio-weight\"); val != 0 {\n\t\t\t\tr.BlockIO.Weight = mkPtr(uint16(val))\n\t\t\t}\n\t\t\tif val := context.String(\"cpuset-cpus\"); val != \"\" {\n\t\t\t\tr.CPU.Cpus = val\n\t\t\t}\n\t\t\tif val := context.String(\"cpuset-mems\"); val != \"\" {\n\t\t\t\tr.CPU.Mems = val\n\t\t\t}\n\t\t\tif val := context.String(\"cpu-idle\"); val != \"\" {\n\t\t\t\tidle, err := strconv.ParseInt(val, 10, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"invalid value for cpu-idle: %w\", err)\n\t\t\t\t}\n\t\t\t\tr.CPU.Idle = mkPtr(idle)\n\t\t\t}\n\n\t\t\tfor _, pair := range []struct {\n\t\t\t\topt  string\n\t\t\t\tdest **uint64\n\t\t\t}{\n\t\t\t\t{\"cpu-burst\", &r.CPU.Burst},\n\t\t\t\t{\"cpu-period\", &r.CPU.Period},\n\t\t\t\t{\"cpu-rt-period\", &r.CPU.RealtimePeriod},\n\t\t\t\t{\"cpu-share\", &r.CPU.Shares},\n\t\t\t} {\n\t\t\t\tif val := context.String(pair.opt); val != \"\" {\n\t\t\t\t\tv, err := strconv.ParseUint(val, 10, 64)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn fmt.Errorf(\"invalid value for %s: %w\", pair.opt, err)\n\t\t\t\t\t}\n\t\t\t\t\t*pair.dest = &v\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor _, pair := range []struct {\n\t\t\t\topt  string\n\t\t\t\tdest **int64\n\t\t\t}{\n\t\t\t\t{\"cpu-quota\", &r.CPU.Quota},\n\t\t\t\t{\"cpu-rt-runtime\", &r.CPU.RealtimeRuntime},\n\t\t\t} {\n\t\t\t\tif val := context.String(pair.opt); val != \"\" {\n\t\t\t\t\tv, err := strconv.ParseInt(val, 10, 64)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn fmt.Errorf(\"invalid value for %s: %w\", pair.opt, err)\n\t\t\t\t\t}\n\t\t\t\t\t*pair.dest = &v\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor _, pair := range []struct {\n\t\t\t\topt  string\n\t\t\t\tdest **int64\n\t\t\t}{\n\t\t\t\t{\"memory\", &r.Memory.Limit},\n\t\t\t\t{\"memory-swap\", &r.Memory.Swap},\n\t\t\t\t{\"kernel-memory\", &r.Memory.Kernel}, //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility.\n\t\t\t\t{\"kernel-memory-tcp\", &r.Memory.KernelTCP},\n\t\t\t\t{\"memory-reservation\", &r.Memory.Reservation},\n\t\t\t} {\n\t\t\t\tif val := context.String(pair.opt); val != \"\" {\n\t\t\t\t\tvar v int64\n\n\t\t\t\t\tif val != \"-1\" {\n\t\t\t\t\t\tv, err = units.RAMInBytes(val)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn fmt.Errorf(\"invalid value for %s: %w\", pair.opt, err)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tv = -1\n\t\t\t\t\t}\n\t\t\t\t\t*pair.dest = &v\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif context.IsSet(\"pids-limit\") {\n\t\t\t\tr.Pids.Limit = mkPtr(int64(context.Int(\"pids-limit\")))\n\t\t\t}\n\t\t}\n\n\t\t// Fix up values\n\t\tif r.Memory.Limit != nil && *r.Memory.Limit == -1 && r.Memory.Swap == nil {\n\t\t\t// To avoid error \"unable to set swap limit without memory limit\"\n\t\t\tr.Memory.Swap = mkPtr[int64](0)\n\t\t}\n\t\tif r.CPU.Idle != nil && r.CPU.Shares == nil {\n\t\t\t// To avoid error \"failed to write \\\"4\\\": write /sys/fs/cgroup/runc-cgroups-integration-test/test-cgroup-7341/cpu.weight: invalid argument\"\n\t\t\tr.CPU.Shares = mkPtr[uint64](0)\n\t\t}\n\n\t\tif (r.Memory.Kernel != nil) || (r.Memory.KernelTCP != nil) { //nolint:staticcheck // Ignore SA1019. Need to keep deprecated package for compatibility.\n\t\t\tlogrus.Warn(\"Kernel memory settings are ignored and will be removed\")\n\t\t}\n\n\t\t// Update the values\n\t\tif r.BlockIO.Weight != nil {\n\t\t\tconfig.Cgroups.Resources.BlkioWeight = *r.BlockIO.Weight\n\t\t}\n\t\tif r.BlockIO.LeafWeight != nil {\n\t\t\tconfig.Cgroups.Resources.BlkioLeafWeight = *r.BlockIO.LeafWeight\n\t\t}\n\t\t// For devices, we either update an existing one, or insert a new one.\n\t\tfor _, wd := range r.BlockIO.WeightDevice {\n\t\t\tconfig.Cgroups.Resources.BlkioWeightDevice = upsertWeightDevice(config.Cgroups.Resources.BlkioWeightDevice, wd)\n\t\t}\n\t\tfor _, td := range r.BlockIO.ThrottleReadBpsDevice {\n\t\t\tconfig.Cgroups.Resources.BlkioThrottleReadBpsDevice = upsertThrottleDevice(config.Cgroups.Resources.BlkioThrottleReadBpsDevice, td)\n\t\t}\n\t\tfor _, td := range r.BlockIO.ThrottleWriteBpsDevice {\n\t\t\tconfig.Cgroups.Resources.BlkioThrottleWriteBpsDevice = upsertThrottleDevice(config.Cgroups.Resources.BlkioThrottleWriteBpsDevice, td)\n\t\t}\n\t\tfor _, td := range r.BlockIO.ThrottleReadIOPSDevice {\n\t\t\tconfig.Cgroups.Resources.BlkioThrottleReadIOPSDevice = upsertThrottleDevice(config.Cgroups.Resources.BlkioThrottleReadIOPSDevice, td)\n\t\t}\n\t\tfor _, td := range r.BlockIO.ThrottleWriteIOPSDevice {\n\t\t\tconfig.Cgroups.Resources.BlkioThrottleWriteIOPSDevice = upsertThrottleDevice(config.Cgroups.Resources.BlkioThrottleWriteIOPSDevice, td)\n\t\t}\n\n\t\t// Setting CPU quota and period independently does not make much sense,\n\t\t// but historically runc allowed it and this needs to be supported\n\t\t// to not break compatibility.\n\t\t//\n\t\t// For systemd cgroup drivers to set CPU quota/period correctly,\n\t\t// it needs to know both values. For fs2 cgroup driver to be compatible\n\t\t// with the fs driver, it also needs to know both values.\n\t\t//\n\t\t// Here in update, previously set values are available from config.\n\t\t// If only one of {quota,period} is set and the other is not, leave\n\t\t// the unset parameter at the old value (don't overwrite config).\n\t\tvar (\n\t\t\tp uint64\n\t\t\tq int64\n\t\t)\n\t\tif r.CPU.Period != nil {\n\t\t\tp = *r.CPU.Period\n\t\t}\n\t\tif r.CPU.Quota != nil {\n\t\t\tq = *r.CPU.Quota\n\t\t}\n\t\tif (p == 0 && q == 0) || (p != 0 && q != 0) {\n\t\t\t// both values are either set or unset (0)\n\t\t\tconfig.Cgroups.Resources.CpuPeriod = p\n\t\t\tconfig.Cgroups.Resources.CpuQuota = q\n\t\t} else {\n\t\t\t// one is set and the other is not\n\t\t\tif p != 0 {\n\t\t\t\t// set new period, leave quota at old value\n\t\t\t\tconfig.Cgroups.Resources.CpuPeriod = p\n\t\t\t} else if q != 0 {\n\t\t\t\t// set new quota, leave period at old value\n\t\t\t\tconfig.Cgroups.Resources.CpuQuota = q\n\t\t\t}\n\t\t}\n\n\t\tconfig.Cgroups.Resources.CpuBurst = r.CPU.Burst // can be nil\n\t\tif r.CPU.Shares != nil {\n\t\t\tconfig.Cgroups.Resources.CpuShares = *r.CPU.Shares\n\t\t\t// CpuWeight is used for cgroupv2 and should be converted\n\t\t\tconfig.Cgroups.Resources.CpuWeight = cgroups.ConvertCPUSharesToCgroupV2Value(*r.CPU.Shares)\n\t\t}\n\t\tif r.CPU.RealtimePeriod != nil {\n\t\t\tconfig.Cgroups.Resources.CpuRtPeriod = *r.CPU.RealtimePeriod\n\t\t}\n\t\tif r.CPU.RealtimeRuntime != nil {\n\t\t\tconfig.Cgroups.Resources.CpuRtRuntime = *r.CPU.RealtimeRuntime\n\t\t}\n\t\tconfig.Cgroups.Resources.CpusetCpus = r.CPU.Cpus\n\t\tconfig.Cgroups.Resources.CpusetMems = r.CPU.Mems\n\t\tif r.Memory.Limit != nil {\n\t\t\tconfig.Cgroups.Resources.Memory = *r.Memory.Limit\n\t\t}\n\t\tconfig.Cgroups.Resources.CPUIdle = r.CPU.Idle\n\t\tif r.Memory.Reservation != nil {\n\t\t\tconfig.Cgroups.Resources.MemoryReservation = *r.Memory.Reservation\n\t\t}\n\t\tif r.Memory.Swap != nil {\n\t\t\tconfig.Cgroups.Resources.MemorySwap = *r.Memory.Swap\n\t\t}\n\t\tif r.Memory.CheckBeforeUpdate != nil {\n\t\t\tconfig.Cgroups.Resources.MemoryCheckBeforeUpdate = *r.Memory.CheckBeforeUpdate\n\t\t}\n\t\tconfig.Cgroups.Resources.PidsLimit = r.Pids.Limit\n\t\tconfig.Cgroups.Resources.Unified = r.Unified\n\n\t\t// Update Intel RDT\n\t\tl3CacheSchema := context.String(\"l3-cache-schema\")\n\t\tmemBwSchema := context.String(\"mem-bw-schema\")\n\t\tif l3CacheSchema != \"\" && !intelrdt.IsCATEnabled() {\n\t\t\treturn errors.New(\"Intel RDT/CAT: l3 cache schema is not enabled\")\n\t\t}\n\n\t\tif memBwSchema != \"\" && !intelrdt.IsMBAEnabled() {\n\t\t\treturn errors.New(\"Intel RDT/MBA: memory bandwidth schema is not enabled\")\n\t\t}\n\n\t\tif l3CacheSchema != \"\" || memBwSchema != \"\" {\n\t\t\t// If intelRdt is not specified in original configuration, we just don't\n\t\t\t// Apply() to create intelRdt group or attach tasks for this container.\n\t\t\t// In update command, we could re-enable through IntelRdtManager.Apply()\n\t\t\t// and then update intelrdt constraint.\n\t\t\tif config.IntelRdt == nil {\n\t\t\t\treturn errors.New(\"updating a non-existent Intel RDT configuration is not supported\")\n\t\t\t}\n\t\t\tif l3CacheSchema != \"\" {\n\t\t\t\tconfig.IntelRdt.L3CacheSchema = l3CacheSchema\n\t\t\t}\n\t\t\tif memBwSchema != \"\" {\n\t\t\t\tconfig.IntelRdt.MemBwSchema = memBwSchema\n\t\t\t}\n\t\t}\n\n\t\t// XXX(kolyshkin@): currently \"runc update\" is unable to change\n\t\t// device configuration, so add this to skip device update.\n\t\t// This helps in case an extra plugin (nvidia GPU) applies some\n\t\t// configuration on top of what runc does.\n\t\t// Note this field is not saved into container's state.json.\n\t\tconfig.Cgroups.SkipDevices = true\n\n\t\treturn container.Set(config)\n\t},\n}\n\nfunc upsertWeightDevice(devices []*cgroups.WeightDevice, wd specs.LinuxWeightDevice) []*cgroups.WeightDevice {\n\t// Iterate backwards because in case of a duplicate\n\t// the last one will be used.\n\tfor i, dev := range slices.Backward(devices) {\n\t\tif dev.Major != wd.Major || dev.Minor != wd.Minor {\n\t\t\tcontinue\n\t\t}\n\t\t// Update weights for existing device.\n\t\tif wd.Weight != nil {\n\t\t\tdevices[i].Weight = *wd.Weight\n\t\t}\n\t\tif wd.LeafWeight != nil {\n\t\t\tdevices[i].LeafWeight = *wd.LeafWeight\n\t\t}\n\t\treturn devices\n\t}\n\n\t// New device -- append it.\n\tvar weight, leafWeight uint16\n\tif wd.Weight != nil {\n\t\tweight = *wd.Weight\n\t}\n\tif wd.LeafWeight != nil {\n\t\tleafWeight = *wd.LeafWeight\n\t}\n\n\treturn append(devices, cgroups.NewWeightDevice(wd.Major, wd.Minor, weight, leafWeight))\n}\n\nfunc upsertThrottleDevice(devices []*cgroups.ThrottleDevice, td specs.LinuxThrottleDevice) []*cgroups.ThrottleDevice {\n\t// Iterate backwards because in case of a duplicate\n\t// the last one will be used.\n\tfor i, dev := range slices.Backward(devices) {\n\t\tif dev.Major == td.Major && dev.Minor == td.Minor {\n\t\t\tdevices[i].Rate = td.Rate\n\t\t\treturn devices\n\t\t}\n\t}\n\n\treturn append(devices, cgroups.NewThrottleDevice(td.Major, td.Minor, td.Rate))\n}\n"
  },
  {
    "path": "utils.go",
    "content": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\n\t\"github.com/sirupsen/logrus\"\n\t\"github.com/urfave/cli\"\n)\n\nconst (\n\texactArgs = iota\n\tminArgs\n\tmaxArgs\n)\n\nfunc checkArgs(context *cli.Context, expected, checkType int) error {\n\tvar err error\n\tcmdName := context.Command.Name\n\tswitch checkType {\n\tcase exactArgs:\n\t\tif context.NArg() != expected {\n\t\t\terr = fmt.Errorf(\"%s: %q requires exactly %d argument(s)\", os.Args[0], cmdName, expected)\n\t\t}\n\tcase minArgs:\n\t\tif context.NArg() < expected {\n\t\t\terr = fmt.Errorf(\"%s: %q requires a minimum of %d argument(s)\", os.Args[0], cmdName, expected)\n\t\t}\n\tcase maxArgs:\n\t\tif context.NArg() > expected {\n\t\t\terr = fmt.Errorf(\"%s: %q requires a maximum of %d argument(s)\", os.Args[0], cmdName, expected)\n\t\t}\n\t}\n\n\tif err != nil {\n\t\tfmt.Printf(\"Incorrect Usage.\\n\\n\")\n\t\t_ = cli.ShowCommandHelp(context, cmdName)\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc logrusToStderr() bool {\n\tl, ok := logrus.StandardLogger().Out.(*os.File)\n\treturn ok && l.Fd() == os.Stderr.Fd()\n}\n\n// fatal prints the error's details if it is a libcontainer specific error type\n// then exits the program with an exit status of 1.\nfunc fatal(err error) {\n\tfatalWithCode(err, 1)\n}\n\nfunc fatalWithCode(err error, ret int) {\n\t// Make sure the error is written to the logger.\n\tlogrus.Error(err)\n\tif !logrusToStderr() {\n\t\tfmt.Fprintln(os.Stderr, err)\n\t}\n\n\tos.Exit(ret)\n}\n\n// setupSpec performs initial setup based on the cli.Context for the container\nfunc setupSpec(context *cli.Context) (*specs.Spec, error) {\n\tbundle := context.String(\"bundle\")\n\tif bundle != \"\" {\n\t\tif err := os.Chdir(bundle); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tspec, err := loadSpec(specConfig)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn spec, nil\n}\n\nfunc revisePidFile(context *cli.Context) error {\n\tpidFile := context.String(\"pid-file\")\n\tif pidFile == \"\" {\n\t\treturn nil\n\t}\n\n\t// convert pid-file to an absolute path so we can write to the right\n\t// file after chdir to bundle\n\tpidFile, err := filepath.Abs(pidFile)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn context.Set(\"pid-file\", pidFile)\n}\n\n// reviseRootDir ensures that the --root option argument,\n// if specified, is converted to an absolute and cleaned path,\n// and that this path is sane.\nfunc reviseRootDir(context *cli.Context) error {\n\tif !context.IsSet(\"root\") {\n\t\treturn nil\n\t}\n\troot, err := filepath.Abs(context.GlobalString(\"root\"))\n\tif err != nil {\n\t\treturn err\n\t}\n\tif root == \"/\" {\n\t\t// This can happen if --root argument is\n\t\t//  - \"\" (i.e. empty);\n\t\t//  - \".\" (and the CWD is /);\n\t\t//  - \"../../..\" (enough to get to /);\n\t\t//  - \"/\" (the actual /).\n\t\treturn errors.New(\"Option --root argument should not be set to /\")\n\t}\n\n\treturn context.GlobalSet(\"root\", root)\n}\n\n// parseBoolOrAuto returns (nil, nil) if s is empty or \"auto\"\nfunc parseBoolOrAuto(s string) (*bool, error) {\n\tif s == \"\" || strings.ToLower(s) == \"auto\" {\n\t\treturn nil, nil\n\t}\n\tb, err := strconv.ParseBool(s)\n\treturn &b, err\n}\n"
  },
  {
    "path": "utils_linux.go",
    "content": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io/fs\"\n\t\"net\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\n\t\"github.com/opencontainers/runtime-spec/specs-go\"\n\tselinux \"github.com/opencontainers/selinux/go-selinux\"\n\t\"github.com/sirupsen/logrus\"\n\t\"github.com/urfave/cli\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/runc/internal/pathrs\"\n\t\"github.com/opencontainers/runc/internal/third_party/systemd/activation\"\n\t\"github.com/opencontainers/runc/libcontainer\"\n\t\"github.com/opencontainers/runc/libcontainer/configs\"\n\t\"github.com/opencontainers/runc/libcontainer/specconv\"\n\t\"github.com/opencontainers/runc/libcontainer/system/kernelversion\"\n\t\"github.com/opencontainers/runc/libcontainer/utils\"\n)\n\nvar errEmptyID = errors.New(\"container id cannot be empty\")\n\n// getContainer returns the specified container instance by loading it from\n// a state directory (root).\nfunc getContainer(context *cli.Context) (*libcontainer.Container, error) {\n\tid := context.Args().First()\n\tif id == \"\" {\n\t\treturn nil, errEmptyID\n\t}\n\troot := context.GlobalString(\"root\")\n\treturn libcontainer.Load(root, id)\n}\n\nfunc getDefaultImagePath() string {\n\tcwd, err := os.Getwd()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn filepath.Join(cwd, \"checkpoint\")\n}\n\n// newProcess converts [specs.Process] to [libcontainer.Process].\nfunc newProcess(p *specs.Process) (*libcontainer.Process, error) {\n\tlp := &libcontainer.Process{\n\t\tArgs:            p.Args,\n\t\tEnv:             p.Env,\n\t\tUID:             int(p.User.UID),\n\t\tGID:             int(p.User.GID),\n\t\tCwd:             p.Cwd,\n\t\tLabel:           p.SelinuxLabel,\n\t\tNoNewPrivileges: &p.NoNewPrivileges,\n\t\tAppArmorProfile: p.ApparmorProfile,\n\t\tScheduler:       p.Scheduler,\n\t\tIOPriority:      p.IOPriority,\n\t}\n\n\tif p.ConsoleSize != nil {\n\t\tlp.ConsoleWidth = uint16(p.ConsoleSize.Width)\n\t\tlp.ConsoleHeight = uint16(p.ConsoleSize.Height)\n\t}\n\n\tif p.Capabilities != nil {\n\t\tlp.Capabilities = &configs.Capabilities{}\n\t\tlp.Capabilities.Bounding = p.Capabilities.Bounding\n\t\tlp.Capabilities.Effective = p.Capabilities.Effective\n\t\tlp.Capabilities.Inheritable = p.Capabilities.Inheritable\n\t\tlp.Capabilities.Permitted = p.Capabilities.Permitted\n\t\tlp.Capabilities.Ambient = p.Capabilities.Ambient\n\t}\n\tif l := len(p.User.AdditionalGids); l > 0 {\n\t\tlp.AdditionalGroups = make([]int, l)\n\t\tfor i, g := range p.User.AdditionalGids {\n\t\t\tlp.AdditionalGroups[i] = int(g)\n\t\t}\n\t}\n\tfor _, rlimit := range p.Rlimits {\n\t\trl, err := createLibContainerRlimit(rlimit)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tlp.Rlimits = append(lp.Rlimits, rl)\n\t}\n\taff, err := configs.ConvertCPUAffinity(p.ExecCPUAffinity)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tlp.CPUAffinity = aff\n\n\treturn lp, nil\n}\n\n// setupIO modifies the given process config according to the options.\nfunc setupIO(process *libcontainer.Process, container *libcontainer.Container, createTTY, detach bool, sockpath string) (_ *tty, Err error) {\n\tif createTTY {\n\t\tprocess.Stdin = nil\n\t\tprocess.Stdout = nil\n\t\tprocess.Stderr = nil\n\t\tt := &tty{}\n\t\tif !detach {\n\t\t\tif err := t.initHostConsole(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tparent, child, err := utils.NewSockPair(\"console\")\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tprocess.ConsoleSocket = child\n\t\t\tt.postStart = append(t.postStart, parent, child)\n\t\t\tt.consoleC = make(chan error, 1)\n\t\t\tgo func() {\n\t\t\t\tt.consoleC <- t.recvtty(parent)\n\t\t\t}()\n\t\t} else {\n\t\t\t// the caller of runc will handle receiving the console master\n\t\t\tconn, err := net.Dial(\"unix\", sockpath)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tdefer func() {\n\t\t\t\tif Err != nil {\n\t\t\t\t\tconn.Close()\n\t\t\t\t}\n\t\t\t}()\n\t\t\tt.postStart = append(t.postStart, conn)\n\t\t\tsocket, err := conn.(*net.UnixConn).File()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tt.postStart = append(t.postStart, socket)\n\t\t\tprocess.ConsoleSocket = socket\n\t\t}\n\t\treturn t, nil\n\t}\n\t// when runc will detach the caller provides the stdio to runc via runc's 0,1,2\n\t// and the container's process inherits runc's stdio.\n\tif detach {\n\t\tinheritStdio(process)\n\t\treturn &tty{}, nil\n\t}\n\n\tconfig := container.Config()\n\trootuid, err := config.HostRootUID()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\trootgid, err := config.HostRootGID()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn setupProcessPipes(process, rootuid, rootgid)\n}\n\n// createPidFile creates a file containing the PID,\n// doing so atomically (via create and rename).\nfunc createPidFile(path string, process *libcontainer.Process) error {\n\tpid, err := process.Pid()\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar (\n\t\ttmpDir  = filepath.Dir(path)\n\t\ttmpName = filepath.Join(tmpDir, \".\"+filepath.Base(path))\n\t)\n\tf, err := os.OpenFile(tmpName, os.O_RDWR|os.O_CREATE|os.O_EXCL|os.O_SYNC, 0o666)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = f.WriteString(strconv.Itoa(pid))\n\tf.Close()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn os.Rename(tmpName, path)\n}\n\nfunc createContainer(context *cli.Context, id string, spec *specs.Spec) (*libcontainer.Container, error) {\n\trootlessCg, err := shouldUseRootlessCgroupManager(context)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tconfig, err := specconv.CreateLibcontainerConfig(&specconv.CreateOpts{\n\t\tCgroupName:       id,\n\t\tUseSystemdCgroup: context.GlobalBool(\"systemd-cgroup\"),\n\t\tNoPivotRoot:      context.Bool(\"no-pivot\"),\n\t\tNoNewKeyring:     context.Bool(\"no-new-keyring\"),\n\t\tSpec:             spec,\n\t\tRootlessEUID:     os.Geteuid() != 0,\n\t\tRootlessCgroups:  rootlessCg,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\troot := context.GlobalString(\"root\")\n\treturn libcontainer.Create(root, id, config)\n}\n\ntype runner struct {\n\tinit            bool\n\tenableSubreaper bool\n\tshouldDestroy   bool\n\tdetach          bool\n\tlistenFDs       []*os.File\n\tpreserveFDs     int\n\tpidFile         string\n\tconsoleSocket   string\n\tpidfdSocket     string\n\tcontainer       *libcontainer.Container\n\taction          CtAct\n\tnotifySocket    *notifySocket\n\tcriuOpts        *libcontainer.CriuOpts\n\tsubCgroupPaths  map[string]string\n}\n\nfunc (r *runner) run(config *specs.Process) (int, error) {\n\tvar err error\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tr.destroy()\n\t\t}\n\t}()\n\tif err = r.checkTerminal(config); err != nil {\n\t\treturn -1, err\n\t}\n\tprocess, err := newProcess(config)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\tprocess.LogLevel = strconv.Itoa(int(logrus.GetLevel()))\n\t// Populate the fields that come from runner.\n\tprocess.Init = r.init\n\tprocess.SubCgroupPaths = r.subCgroupPaths\n\tif len(r.listenFDs) > 0 {\n\t\tprocess.Env = append(process.Env, \"LISTEN_FDS=\"+strconv.Itoa(len(r.listenFDs)), \"LISTEN_PID=1\")\n\t\tprocess.ExtraFiles = append(process.ExtraFiles, r.listenFDs...)\n\t}\n\tbaseFd := 3 + len(process.ExtraFiles)\n\tprocSelfFd, closer, err := pathrs.ProcThreadSelfOpen(\"fd/\", unix.O_DIRECTORY|unix.O_CLOEXEC)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\tdefer closer()\n\tdefer procSelfFd.Close()\n\tfor i := baseFd; i < baseFd+r.preserveFDs; i++ {\n\t\terr := unix.Faccessat(int(procSelfFd.Fd()), strconv.Itoa(i), unix.F_OK, 0)\n\t\tif err != nil {\n\t\t\treturn -1, fmt.Errorf(\"unable to stat preserved-fd %d (of %d): %w\", i-baseFd, r.preserveFDs, err)\n\t\t}\n\t\tprocess.ExtraFiles = append(process.ExtraFiles, os.NewFile(uintptr(i), \"PreserveFD:\"+strconv.Itoa(i)))\n\t}\n\tdetach := r.detach || (r.action == CT_ACT_CREATE)\n\t// Setting up IO is a two stage process. We need to modify process to deal\n\t// with detaching containers, and then we get a tty after the container has\n\t// started.\n\thandlerCh := newSignalHandler(r.enableSubreaper, r.notifySocket)\n\ttty, err := setupIO(process, r.container, config.Terminal, detach, r.consoleSocket)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\tdefer tty.Close()\n\n\tif r.pidfdSocket != \"\" {\n\t\tconnClose, err := setupPidfdSocket(process, r.pidfdSocket)\n\t\tif err != nil {\n\t\t\treturn -1, err\n\t\t}\n\t\tdefer connClose()\n\t}\n\n\tswitch r.action {\n\tcase CT_ACT_CREATE:\n\t\terr = r.container.Start(process)\n\tcase CT_ACT_RESTORE:\n\t\terr = r.container.Restore(process, r.criuOpts)\n\tcase CT_ACT_RUN:\n\t\terr = r.container.Run(process)\n\tdefault:\n\t\tpanic(\"Unknown action\")\n\t}\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\tif err = tty.waitConsole(); err != nil {\n\t\tr.terminate(process)\n\t\treturn -1, err\n\t}\n\ttty.ClosePostStart()\n\tif r.pidFile != \"\" {\n\t\tif err = createPidFile(r.pidFile, process); err != nil {\n\t\t\tr.terminate(process)\n\t\t\treturn -1, err\n\t\t}\n\t}\n\thandler := <-handlerCh\n\tstatus, err := handler.forward(process, tty, detach)\n\tif err != nil {\n\t\tr.terminate(process)\n\t}\n\tif detach {\n\t\treturn 0, nil\n\t}\n\tif err == nil {\n\t\tr.destroy()\n\t}\n\treturn status, err\n}\n\nfunc (r *runner) destroy() {\n\tif r.shouldDestroy {\n\t\tif err := r.container.Destroy(); err != nil {\n\t\t\tlogrus.Warn(err)\n\t\t}\n\t}\n}\n\nfunc (r *runner) terminate(p *libcontainer.Process) {\n\t_ = p.Signal(unix.SIGKILL)\n\t_, _ = p.Wait()\n}\n\nfunc (r *runner) checkTerminal(config *specs.Process) error {\n\tdetach := r.detach || (r.action == CT_ACT_CREATE)\n\t// Check command-line for sanity.\n\tif detach && config.Terminal && r.consoleSocket == \"\" {\n\t\treturn errors.New(\"cannot allocate tty if runc will detach without setting console socket\")\n\t}\n\tif (!detach || !config.Terminal) && r.consoleSocket != \"\" {\n\t\treturn errors.New(\"cannot use console socket if runc will not detach or allocate tty\")\n\t}\n\treturn nil\n}\n\nfunc validateProcessSpec(spec *specs.Process) error {\n\tif spec == nil {\n\t\treturn errors.New(\"process property must not be empty\")\n\t}\n\tif spec.Cwd == \"\" {\n\t\treturn errors.New(\"Cwd property must not be empty\")\n\t}\n\tif !filepath.IsAbs(spec.Cwd) {\n\t\treturn errors.New(\"Cwd must be an absolute path\")\n\t}\n\tif len(spec.Args) == 0 {\n\t\treturn errors.New(\"args must not be empty\")\n\t}\n\tif spec.SelinuxLabel != \"\" && !selinux.GetEnabled() {\n\t\treturn errors.New(\"selinux label is specified in config, but selinux is disabled or not supported\")\n\t}\n\treturn nil\n}\n\ntype CtAct uint8\n\nconst (\n\tCT_ACT_CREATE CtAct = iota + 1\n\tCT_ACT_RUN\n\tCT_ACT_RESTORE\n)\n\nfunc startContainer(context *cli.Context, action CtAct, criuOpts *libcontainer.CriuOpts) (int, error) {\n\tif err := revisePidFile(context); err != nil {\n\t\treturn -1, err\n\t}\n\tspec, err := setupSpec(context)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\tid := context.Args().First()\n\tif id == \"\" {\n\t\treturn -1, errEmptyID\n\t}\n\n\tnotifySocket := newNotifySocket(context, os.Getenv(\"NOTIFY_SOCKET\"), id)\n\tif notifySocket != nil {\n\t\tnotifySocket.setupSpec(spec)\n\t}\n\n\tcontainer, err := createContainer(context, id, spec)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\tif notifySocket != nil {\n\t\tif err := notifySocket.setupSocketDirectory(); err != nil {\n\t\t\treturn -1, err\n\t\t}\n\t\tif action == CT_ACT_RUN {\n\t\t\tif err := notifySocket.bindSocket(); err != nil {\n\t\t\t\treturn -1, err\n\t\t\t}\n\t\t}\n\t}\n\n\tr := &runner{\n\t\tenableSubreaper: !context.Bool(\"no-subreaper\"),\n\t\tshouldDestroy:   !context.Bool(\"keep\"),\n\t\tcontainer:       container,\n\t\tlistenFDs:       activation.Files(), // On-demand socket activation.\n\t\tnotifySocket:    notifySocket,\n\t\tconsoleSocket:   context.String(\"console-socket\"),\n\t\tpidfdSocket:     context.String(\"pidfd-socket\"),\n\t\tdetach:          context.Bool(\"detach\"),\n\t\tpidFile:         context.String(\"pid-file\"),\n\t\tpreserveFDs:     context.Int(\"preserve-fds\"),\n\t\taction:          action,\n\t\tcriuOpts:        criuOpts,\n\t\tinit:            true,\n\t}\n\treturn r.run(spec.Process)\n}\n\nfunc setupPidfdSocket(process *libcontainer.Process, sockpath string) (_clean func(), _ error) {\n\tlinux530 := kernelversion.KernelVersion{Kernel: 5, Major: 3}\n\tok, err := kernelversion.GreaterEqualThan(linux530)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"--pidfd-socket requires >= v5.3 kernel\")\n\t}\n\n\tconn, err := net.Dial(\"unix\", sockpath)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to dail %s: %w\", sockpath, err)\n\t}\n\n\tsocket, err := conn.(*net.UnixConn).File()\n\tif err != nil {\n\t\tconn.Close()\n\t\treturn nil, fmt.Errorf(\"failed to dup socket: %w\", err)\n\t}\n\n\tprocess.PidfdSocket = socket\n\treturn func() {\n\t\tconn.Close()\n\t}, nil\n}\n\nfunc maybeLogCgroupWarning(op string, err error) {\n\tif errors.Is(err, fs.ErrPermission) {\n\t\tlogrus.Warn(\"runc \" + op + \" failure might be caused by lack of full access to cgroups\")\n\t}\n}\n"
  },
  {
    "path": "vendor/cyphar.com/go-pathrs/.golangci.yml",
    "content": "# SPDX-License-Identifier: MPL-2.0\n#\n# libpathrs: safe path resolution on Linux\n# Copyright (C) 2019-2025 SUSE LLC\n# Copyright (C) 2026 Aleksa Sarai <cyphar@cyphar.com>\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 https://mozilla.org/MPL/2.0/.\n\nversion: \"2\"\nlinters:\n  enable:\n    - bidichk\n    - cyclop\n    - errname\n    - errorlint\n    - exhaustive\n    - goconst\n    - godot\n    - gomoddirectives\n    - gosec\n    - mirror\n    - misspell\n    - mnd\n    - nilerr\n    - nilnil\n    - perfsprint\n    - prealloc\n    - reassign\n    - revive\n    - unconvert\n    - unparam\n    - usestdlibvars\n    - wastedassign\nformatters:\n  enable:\n    - gofumpt\n    - goimports\n  settings:\n    goimports:\n      local-prefixes:\n        - cyphar.com/go-pathrs\n"
  },
  {
    "path": "vendor/cyphar.com/go-pathrs/COPYING",
    "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 https://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/cyphar.com/go-pathrs/doc.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 2019-2025 SUSE LLC\n * Copyright (C) 2026 Aleksa Sarai <cyphar@cyphar.com>\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 https://mozilla.org/MPL/2.0/.\n */\n\n// Package pathrs provides bindings for libpathrs, a library for safe path\n// resolution on Linux.\npackage pathrs\n"
  },
  {
    "path": "vendor/cyphar.com/go-pathrs/handle_linux.go",
    "content": "//go:build linux\n\n// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 2019-2025 SUSE LLC\n * Copyright (C) 2026 Aleksa Sarai <cyphar@cyphar.com>\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 https://mozilla.org/MPL/2.0/.\n */\n\npackage pathrs\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"cyphar.com/go-pathrs/internal/fdutils\"\n\t\"cyphar.com/go-pathrs/internal/libpathrs\"\n)\n\n// Handle is a handle for a path within a given [Root]. This handle references\n// an already-resolved path which can be used for only one purpose -- to\n// \"re-open\" the handle and get an actual [os.File] which can be used for\n// ordinary operations.\n//\n// If you wish to open a file without having an intermediate [Handle] object,\n// you can try to use [Root.Open] or [Root.OpenFile].\n//\n// It is critical that perform all relevant operations through this [Handle]\n// (rather than fetching the underlying [os.File] yourself with [Handle.IntoFile]),\n// because the security properties of libpathrs depend on users doing all\n// relevant filesystem operations through libpathrs.\ntype Handle struct {\n\tinner *os.File\n}\n\n// HandleFromFile creates a new [Handle] from an existing file handle. The\n// handle will be copied by this method, so the original handle should still be\n// freed by the caller.\n//\n// This is effectively the inverse operation of [Handle.IntoFile], and is used\n// for \"deserialising\" pathrs root handles.\nfunc HandleFromFile(file *os.File) (*Handle, error) {\n\tnewFile, err := fdutils.DupFile(file)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"duplicate handle fd: %w\", err)\n\t}\n\treturn &Handle{inner: newFile}, nil\n}\n\n// Open creates an \"upgraded\" file handle to the file referenced by the\n// [Handle]. Note that the original [Handle] is not consumed by this operation,\n// and can be opened multiple times.\n//\n// The handle returned is only usable for reading, and this is method is\n// shorthand for [Handle.OpenFile] with os.O_RDONLY.\n//\n// TODO: Rename these to \"Reopen\" or something.\nfunc (h *Handle) Open() (*os.File, error) {\n\treturn h.OpenFile(os.O_RDONLY)\n}\n\n// OpenFile creates an \"upgraded\" file handle to the file referenced by the\n// [Handle]. Note that the original [Handle] is not consumed by this operation,\n// and can be opened multiple times.\n//\n// The provided flags indicate which open(2) flags are used to create the new\n// handle.\n//\n// TODO: Rename these to \"Reopen\" or something.\nfunc (h *Handle) OpenFile(flags int) (*os.File, error) {\n\treturn fdutils.WithFileFd(h.inner, func(fd uintptr) (*os.File, error) {\n\t\tnewFd, err := libpathrs.Reopen(fd, flags)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn os.NewFile(newFd, h.inner.Name()), nil\n\t})\n}\n\n// IntoFile unwraps the [Handle] into its underlying [os.File].\n//\n// You almost certainly want to use [Handle.OpenFile] to get a non-O_PATH\n// version of this [Handle].\n//\n// This operation returns the internal [os.File] of the [Handle] directly, so\n// calling [Handle.Close] will also close any copies of the returned [os.File].\n// If you want to get an independent copy, use [Handle.Clone] followed by\n// [Handle.IntoFile] on the cloned [Handle].\nfunc (h *Handle) IntoFile() *os.File {\n\t// TODO: Figure out if we really don't want to make a copy.\n\t// TODO: We almost certainly want to clear r.inner here, but we can't do\n\t//       that easily atomically (we could use atomic.Value but that'll make\n\t//       things quite a bit uglier).\n\treturn h.inner\n}\n\n// Clone creates a copy of a [Handle], such that it has a separate lifetime to\n// the original (while referring to the same underlying file).\nfunc (h *Handle) Clone() (*Handle, error) {\n\treturn HandleFromFile(h.inner)\n}\n\n// Close frees all of the resources used by the [Handle].\nfunc (h *Handle) Close() error {\n\treturn h.inner.Close()\n}\n"
  },
  {
    "path": "vendor/cyphar.com/go-pathrs/internal/fdutils/fd_linux.go",
    "content": "//go:build linux\n\n// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 2019-2025 SUSE LLC\n * Copyright (C) 2026 Aleksa Sarai <cyphar@cyphar.com>\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 https://mozilla.org/MPL/2.0/.\n */\n\n// Package fdutils contains a few helper methods when dealing with *os.File and\n// file descriptors.\npackage fdutils\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"cyphar.com/go-pathrs/internal/libpathrs\"\n)\n\n// DupFd makes a duplicate of the given fd.\nfunc DupFd(fd uintptr, name string) (*os.File, error) {\n\tnewFd, err := unix.FcntlInt(fd, unix.F_DUPFD_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"fcntl(F_DUPFD_CLOEXEC): %w\", err)\n\t}\n\treturn os.NewFile(uintptr(newFd), name), nil\n}\n\n// WithFileFd is a more ergonomic wrapper around file.SyscallConn().Control().\nfunc WithFileFd[T any](file *os.File, fn func(fd uintptr) (T, error)) (T, error) {\n\tconn, err := file.SyscallConn()\n\tif err != nil {\n\t\treturn *new(T), err\n\t}\n\tvar (\n\t\tret      T\n\t\tinnerErr error\n\t)\n\tif err := conn.Control(func(fd uintptr) {\n\t\tret, innerErr = fn(fd)\n\t}); err != nil {\n\t\treturn *new(T), err\n\t}\n\treturn ret, innerErr\n}\n\n// DupFile makes a duplicate of the given file.\nfunc DupFile(file *os.File) (*os.File, error) {\n\treturn WithFileFd(file, func(fd uintptr) (*os.File, error) {\n\t\treturn DupFd(fd, file.Name())\n\t})\n}\n\n// MkFile creates a new *os.File from the provided file descriptor. However,\n// unlike os.NewFile, the file's Name is based on the real path (provided by\n// /proc/self/fd/$n).\nfunc MkFile(fd uintptr) (*os.File, error) {\n\tfdPath := fmt.Sprintf(\"fd/%d\", fd)\n\tfdName, err := libpathrs.ProcReadlinkat(libpathrs.ProcDefaultRootFd, libpathrs.ProcThreadSelf, fdPath)\n\tif err != nil {\n\t\t_ = unix.Close(int(fd))\n\t\treturn nil, fmt.Errorf(\"failed to fetch real name of fd %d: %w\", fd, err)\n\t}\n\t// TODO: Maybe we should prefix this name with something to indicate to\n\t// users that they must not use this path as a \"safe\" path. Something like\n\t// \"//pathrs-handle:/foo/bar\"?\n\treturn os.NewFile(fd, fdName), nil\n}\n"
  },
  {
    "path": "vendor/cyphar.com/go-pathrs/internal/libpathrs/error_unix.go",
    "content": "//go:build linux\n\n// TODO: Use \"go:build unix\" once we bump the minimum Go version 1.19.\n\n// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 2019-2025 SUSE LLC\n * Copyright (C) 2026 Aleksa Sarai <cyphar@cyphar.com>\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 https://mozilla.org/MPL/2.0/.\n */\n\npackage libpathrs\n\nimport (\n\t\"syscall\"\n)\n\n// Error represents an underlying libpathrs error.\ntype Error struct {\n\tdescription string\n\terrno       syscall.Errno\n}\n\n// Error returns a textual description of the error.\nfunc (err *Error) Error() string {\n\treturn err.description\n}\n\n// Unwrap returns the underlying error which was wrapped by this error (if\n// applicable).\nfunc (err *Error) Unwrap() error {\n\tif err.errno != 0 {\n\t\treturn err.errno\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/cyphar.com/go-pathrs/internal/libpathrs/libpathrs_linux.go",
    "content": "//go:build linux\n\n// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 2019-2025 SUSE LLC\n * Copyright (C) 2026 Aleksa Sarai <cyphar@cyphar.com>\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 https://mozilla.org/MPL/2.0/.\n */\n\n// Package libpathrs is an internal thin wrapper around the libpathrs C API.\npackage libpathrs\n\nimport (\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n/*\n// TODO: Figure out if we need to add support for linking against libpathrs\n//       statically even if in dynamically linked builds in order to make\n//       packaging a bit easier (using \"-Wl,-Bstatic -lpathrs -Wl,-Bdynamic\" or\n//       \"-l:pathrs.a\").\n#cgo pkg-config: pathrs\n#include <pathrs.h>\n\n// This is a workaround for unsafe.Pointer() not working for non-void pointers.\nchar *cast_ptr(void *ptr) { return ptr; }\n*/\nimport \"C\"\n\nfunc fetchError(errID C.int) error {\n\tif errID >= C.__PATHRS_MAX_ERR_VALUE {\n\t\treturn nil\n\t}\n\tcErr := C.pathrs_errorinfo(errID)\n\tdefer C.pathrs_errorinfo_free(cErr)\n\n\tvar err error\n\tif cErr != nil {\n\t\terr = &Error{\n\t\t\terrno:       syscall.Errno(cErr.saved_errno),\n\t\t\tdescription: C.GoString(cErr.description),\n\t\t}\n\t}\n\treturn err\n}\n\n// OpenRoot wraps pathrs_open_root.\nfunc OpenRoot(path string) (uintptr, error) {\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\tfd := C.pathrs_open_root(cPath)\n\treturn uintptr(fd), fetchError(fd)\n}\n\n// Reopen wraps pathrs_reopen.\nfunc Reopen(fd uintptr, flags int) (uintptr, error) {\n\tnewFd := C.pathrs_reopen(C.int(fd), C.int(flags))\n\treturn uintptr(newFd), fetchError(newFd)\n}\n\n// InRootResolve wraps pathrs_inroot_resolve.\nfunc InRootResolve(rootFd uintptr, path string) (uintptr, error) {\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\tfd := C.pathrs_inroot_resolve(C.int(rootFd), cPath)\n\treturn uintptr(fd), fetchError(fd)\n}\n\n// InRootResolveNoFollow wraps pathrs_inroot_resolve_nofollow.\nfunc InRootResolveNoFollow(rootFd uintptr, path string) (uintptr, error) {\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\tfd := C.pathrs_inroot_resolve_nofollow(C.int(rootFd), cPath)\n\treturn uintptr(fd), fetchError(fd)\n}\n\n// InRootOpen wraps pathrs_inroot_open.\nfunc InRootOpen(rootFd uintptr, path string, flags int) (uintptr, error) {\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\tfd := C.pathrs_inroot_open(C.int(rootFd), cPath, C.int(flags))\n\treturn uintptr(fd), fetchError(fd)\n}\n\n// InRootReadlink wraps pathrs_inroot_readlink.\nfunc InRootReadlink(rootFd uintptr, path string) (string, error) {\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\tsize := 128\n\tfor {\n\t\tlinkBuf := make([]byte, size)\n\t\tn := C.pathrs_inroot_readlink(C.int(rootFd), cPath, C.cast_ptr(unsafe.Pointer(&linkBuf[0])), C.size_t(len(linkBuf)))\n\t\tswitch {\n\t\tcase int(n) < C.__PATHRS_MAX_ERR_VALUE:\n\t\t\treturn \"\", fetchError(n)\n\t\tcase int(n) <= len(linkBuf):\n\t\t\treturn string(linkBuf[:int(n)]), nil\n\t\tdefault:\n\t\t\t// The contents were truncated. Unlike readlinkat, pathrs returns\n\t\t\t// the size of the link when it checked. So use the returned size\n\t\t\t// as a basis for the reallocated size (but in order to avoid a DoS\n\t\t\t// where a magic-link is growing by a single byte each iteration,\n\t\t\t// make sure we are a fair bit larger).\n\t\t\tsize += int(n)\n\t\t}\n\t}\n}\n\n// InRootRmdir wraps pathrs_inroot_rmdir.\nfunc InRootRmdir(rootFd uintptr, path string) error {\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\terr := C.pathrs_inroot_rmdir(C.int(rootFd), cPath)\n\treturn fetchError(err)\n}\n\n// InRootUnlink wraps pathrs_inroot_unlink.\nfunc InRootUnlink(rootFd uintptr, path string) error {\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\terr := C.pathrs_inroot_unlink(C.int(rootFd), cPath)\n\treturn fetchError(err)\n}\n\n// InRootRemoveAll wraps pathrs_inroot_remove_all.\nfunc InRootRemoveAll(rootFd uintptr, path string) error {\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\terr := C.pathrs_inroot_remove_all(C.int(rootFd), cPath)\n\treturn fetchError(err)\n}\n\n// InRootCreat wraps pathrs_inroot_creat.\nfunc InRootCreat(rootFd uintptr, path string, flags int, mode uint32) (uintptr, error) {\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\tfd := C.pathrs_inroot_creat(C.int(rootFd), cPath, C.int(flags), C.uint(mode))\n\treturn uintptr(fd), fetchError(fd)\n}\n\n// InRootRename wraps pathrs_inroot_rename.\nfunc InRootRename(rootFd uintptr, src, dst string, flags uint) error {\n\tcSrc := C.CString(src)\n\tdefer C.free(unsafe.Pointer(cSrc))\n\n\tcDst := C.CString(dst)\n\tdefer C.free(unsafe.Pointer(cDst))\n\n\terr := C.pathrs_inroot_rename(C.int(rootFd), cSrc, cDst, C.uint(flags))\n\treturn fetchError(err)\n}\n\n// InRootMkdir wraps pathrs_inroot_mkdir.\nfunc InRootMkdir(rootFd uintptr, path string, mode uint32) error {\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\terr := C.pathrs_inroot_mkdir(C.int(rootFd), cPath, C.uint(mode))\n\treturn fetchError(err)\n}\n\n// InRootMkdirAll wraps pathrs_inroot_mkdir_all.\nfunc InRootMkdirAll(rootFd uintptr, path string, mode uint32) (uintptr, error) {\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\tfd := C.pathrs_inroot_mkdir_all(C.int(rootFd), cPath, C.uint(mode))\n\treturn uintptr(fd), fetchError(fd)\n}\n\n// InRootMknod wraps pathrs_inroot_mknod.\nfunc InRootMknod(rootFd uintptr, path string, mode uint32, dev uint64) error {\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\terr := C.pathrs_inroot_mknod(C.int(rootFd), cPath, C.uint(mode), C.dev_t(dev))\n\treturn fetchError(err)\n}\n\n// InRootSymlink wraps pathrs_inroot_symlink.\nfunc InRootSymlink(rootFd uintptr, path, target string) error {\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\tcTarget := C.CString(target)\n\tdefer C.free(unsafe.Pointer(cTarget))\n\n\terr := C.pathrs_inroot_symlink(C.int(rootFd), cPath, cTarget)\n\treturn fetchError(err)\n}\n\n// InRootHardlink wraps pathrs_inroot_hardlink.\nfunc InRootHardlink(rootFd uintptr, path, target string) error {\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\tcTarget := C.CString(target)\n\tdefer C.free(unsafe.Pointer(cTarget))\n\n\terr := C.pathrs_inroot_hardlink(C.int(rootFd), cPath, cTarget)\n\treturn fetchError(err)\n}\n\n// ProcBase is pathrs_proc_base_t (uint64_t).\ntype ProcBase C.pathrs_proc_base_t\n\n// FIXME: We need to open-code the constants because CGo unfortunately will\n// implicitly convert any non-literal constants (i.e. those resolved using gcc)\n// to signed integers. See <https://github.com/golang/go/issues/39136> for some\n// more information on the underlying issue (though.\nconst (\n\t// ProcRoot is PATHRS_PROC_ROOT.\n\tProcRoot ProcBase = 0xFFFF_FFFE_7072_6F63 // C.PATHRS_PROC_ROOT\n\t// ProcSelf is PATHRS_PROC_SELF.\n\tProcSelf ProcBase = 0xFFFF_FFFE_091D_5E1F // C.PATHRS_PROC_SELF\n\t// ProcThreadSelf is PATHRS_PROC_THREAD_SELF.\n\tProcThreadSelf ProcBase = 0xFFFF_FFFE_3EAD_5E1F // C.PATHRS_PROC_THREAD_SELF\n\n\t// ProcBaseTypeMask is __PATHRS_PROC_TYPE_MASK.\n\tProcBaseTypeMask ProcBase = 0xFFFF_FFFF_0000_0000 // C.__PATHRS_PROC_TYPE_MASK\n\t// ProcBaseTypePid is __PATHRS_PROC_TYPE_PID.\n\tProcBaseTypePid ProcBase = 0x8000_0000_0000_0000 // C.__PATHRS_PROC_TYPE_PID\n\n\t// ProcDefaultRootFd is PATHRS_PROC_DEFAULT_ROOTFD.\n\tProcDefaultRootFd = -int(syscall.EBADF) // C.PATHRS_PROC_DEFAULT_ROOTFD\n)\n\nfunc assertEqual[T comparable](a, b T, msg string) {\n\tif a != b {\n\t\tpanic(fmt.Sprintf(\"%s ((%T) %#v != (%T) %#v)\", msg, a, a, b, b))\n\t}\n}\n\n// Verify that the values above match the actual C values. Unfortunately, Go\n// only allows us to forcefully cast int64 to uint64 if you use a temporary\n// variable, which means we cannot do it in a const context and thus need to do\n// it at runtime (even though it is a check that fundamentally could be done at\n// compile-time)...\nfunc init() {\n\tvar (\n\t\tactualProcRoot       int64 = C.PATHRS_PROC_ROOT\n\t\tactualProcSelf       int64 = C.PATHRS_PROC_SELF\n\t\tactualProcThreadSelf int64 = C.PATHRS_PROC_THREAD_SELF\n\t)\n\n\tassertEqual(ProcRoot, ProcBase(actualProcRoot), \"PATHRS_PROC_ROOT\")\n\tassertEqual(ProcSelf, ProcBase(actualProcSelf), \"PATHRS_PROC_SELF\")\n\tassertEqual(ProcThreadSelf, ProcBase(actualProcThreadSelf), \"PATHRS_PROC_THREAD_SELF\")\n\n\tvar (\n\t\tactualProcBaseTypeMask uint64 = C.__PATHRS_PROC_TYPE_MASK\n\t\tactualProcBaseTypePid  uint64 = C.__PATHRS_PROC_TYPE_PID\n\t)\n\n\tassertEqual(ProcBaseTypeMask, ProcBase(actualProcBaseTypeMask), \"__PATHRS_PROC_TYPE_MASK\")\n\tassertEqual(ProcBaseTypePid, ProcBase(actualProcBaseTypePid), \"__PATHRS_PROC_TYPE_PID\")\n\n\tassertEqual(ProcDefaultRootFd, int(C.PATHRS_PROC_DEFAULT_ROOTFD), \"PATHRS_PROC_DEFAULT_ROOTFD\")\n}\n\n// ProcPid reimplements the PROC_PID(x) conversion.\nfunc ProcPid(pid uint32) ProcBase { return ProcBaseTypePid | ProcBase(pid) }\n\n// ProcOpenat wraps pathrs_proc_openat.\nfunc ProcOpenat(procRootFd int, base ProcBase, path string, flags int) (uintptr, error) {\n\tcBase := C.pathrs_proc_base_t(base)\n\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\tfd := C.pathrs_proc_openat(C.int(procRootFd), cBase, cPath, C.int(flags))\n\treturn uintptr(fd), fetchError(fd)\n}\n\n// ProcReadlinkat wraps pathrs_proc_readlinkat.\nfunc ProcReadlinkat(procRootFd int, base ProcBase, path string) (string, error) {\n\t// TODO: See if we can unify this code with InRootReadlink.\n\n\tcBase := C.pathrs_proc_base_t(base)\n\n\tcPath := C.CString(path)\n\tdefer C.free(unsafe.Pointer(cPath))\n\n\tsize := 128\n\tfor {\n\t\tlinkBuf := make([]byte, size)\n\t\tn := C.pathrs_proc_readlinkat(\n\t\t\tC.int(procRootFd), cBase, cPath,\n\t\t\tC.cast_ptr(unsafe.Pointer(&linkBuf[0])), C.size_t(len(linkBuf)))\n\t\tswitch {\n\t\tcase int(n) < C.__PATHRS_MAX_ERR_VALUE:\n\t\t\treturn \"\", fetchError(n)\n\t\tcase int(n) <= len(linkBuf):\n\t\t\treturn string(linkBuf[:int(n)]), nil\n\t\tdefault:\n\t\t\t// The contents were truncated. Unlike readlinkat, pathrs returns\n\t\t\t// the size of the link when it checked. So use the returned size\n\t\t\t// as a basis for the reallocated size (but in order to avoid a DoS\n\t\t\t// where a magic-link is growing by a single byte each iteration,\n\t\t\t// make sure we are a fair bit larger).\n\t\t\tsize += int(n)\n\t\t}\n\t}\n}\n\n// ProcfsOpenHow is pathrs_procfs_open_how (struct).\ntype ProcfsOpenHow C.pathrs_procfs_open_how\n\nconst (\n\t// ProcfsNewUnmasked is PATHRS_PROCFS_NEW_UNMASKED.\n\tProcfsNewUnmasked = C.PATHRS_PROCFS_NEW_UNMASKED\n)\n\n// Flags returns a pointer to the internal flags field to allow other packages\n// to modify structure fields that are internal due to Go's visibility model.\nfunc (how *ProcfsOpenHow) Flags() *C.uint64_t { return &how.flags }\n\n// ProcfsOpen is pathrs_procfs_open (sizeof(*how) is passed automatically).\nfunc ProcfsOpen(how *ProcfsOpenHow) (uintptr, error) {\n\tfd := C.pathrs_procfs_open((*C.pathrs_procfs_open_how)(how), C.size_t(unsafe.Sizeof(*how)))\n\treturn uintptr(fd), fetchError(fd)\n}\n"
  },
  {
    "path": "vendor/cyphar.com/go-pathrs/procfs/procfs_linux.go",
    "content": "//go:build linux\n\n// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 2019-2025 SUSE LLC\n * Copyright (C) 2026 Aleksa Sarai <cyphar@cyphar.com>\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 https://mozilla.org/MPL/2.0/.\n */\n\n// Package procfs provides a safe API for operating on /proc on Linux.\npackage procfs\n\nimport (\n\t\"os\"\n\t\"runtime\"\n\n\t\"cyphar.com/go-pathrs/internal/fdutils\"\n\t\"cyphar.com/go-pathrs/internal/libpathrs\"\n)\n\n// ProcBase is used with [ProcReadlink] and related functions to indicate what\n// /proc subpath path operations should be done relative to.\ntype ProcBase struct {\n\tinner libpathrs.ProcBase\n}\n\nvar (\n\t// ProcRoot indicates to use /proc. Note that this mode may be more\n\t// expensive because we have to take steps to try to avoid leaking unmasked\n\t// procfs handles, so you should use [ProcBaseSelf] if you can.\n\tProcRoot = ProcBase{inner: libpathrs.ProcRoot}\n\t// ProcSelf indicates to use /proc/self. For most programs, this is the\n\t// standard choice.\n\tProcSelf = ProcBase{inner: libpathrs.ProcSelf}\n\t// ProcThreadSelf indicates to use /proc/thread-self. In multi-threaded\n\t// programs where one thread has a different CLONE_FS, it is possible for\n\t// /proc/self to point the wrong thread and so /proc/thread-self may be\n\t// necessary.\n\tProcThreadSelf = ProcBase{inner: libpathrs.ProcThreadSelf}\n)\n\n// ProcPid returns a ProcBase which indicates to use /proc/$pid for the given\n// PID (or TID). Be aware that due to PID recycling, using this is generally\n// not safe except in certain circumstances. Namely:\n//\n//   - PID 1 (the init process), as that PID cannot ever get recycled.\n//   - Your current PID (though you should just use [ProcBaseSelf]).\n//   - Your current TID if you have used [runtime.LockOSThread] (though you\n//     should just use [ProcBaseThreadSelf]).\n//   - PIDs of child processes (as long as you are sure that no other part of\n//     your program incorrectly catches or ignores SIGCHLD, and that you do it\n//     *before* you call wait(2)or any equivalent method that could reap\n//     zombies).\nfunc ProcPid(pid int) ProcBase {\n\tif pid < 0 || uint64(pid) >= 1<<31 {\n\t\tpanic(\"invalid ProcBasePid value\") // TODO: should this be an error?\n\t}\n\tpid32 := uint32(pid) //nolint:gosec // G115 false positive <https://github.com/securego/gosec/issues/1212>\n\treturn ProcBase{inner: libpathrs.ProcPid(pid32)}\n}\n\n// ThreadCloser is a callback that needs to be called when you are done\n// operating on an [os.File] fetched using [Handle.OpenThreadSelf].\ntype ThreadCloser func()\n\n// Handle is a wrapper around an *os.File handle to \"/proc\", which can be\n// used to do further procfs-related operations in a safe way.\ntype Handle struct {\n\tinner *os.File\n}\n\n// Close releases all internal resources for this [Handle].\n//\n// Note that if the handle is actually the global cached handle, this operation\n// is a no-op.\nfunc (proc *Handle) Close() error {\n\tvar err error\n\tif proc.inner != nil {\n\t\terr = proc.inner.Close()\n\t}\n\treturn err\n}\n\n// OpenOption is a configuration function passed as an argument to [Open].\ntype OpenOption func(*libpathrs.ProcfsOpenHow) error\n\n// UnmaskedProcRoot can be passed to [Open] to request an unmasked procfs\n// handle be created.\n//\n//\tprocfs, err := procfs.OpenRoot(procfs.UnmaskedProcRoot)\nfunc UnmaskedProcRoot(how *libpathrs.ProcfsOpenHow) error {\n\t*how.Flags() |= libpathrs.ProcfsNewUnmasked\n\treturn nil\n}\n\n// Open creates a new [Handle] to a safe \"/proc\", based on the passed\n// configuration options (in the form of a series of [OpenOption]s).\nfunc Open(opts ...OpenOption) (*Handle, error) {\n\tvar how libpathrs.ProcfsOpenHow\n\tfor _, opt := range opts {\n\t\tif err := opt(&how); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tfd, err := libpathrs.ProcfsOpen(&how)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar procFile *os.File\n\tif int(fd) >= 0 {\n\t\tprocFile = os.NewFile(fd, \"/proc\")\n\t}\n\t// TODO: Check that fd == PATHRS_PROC_DEFAULT_ROOTFD in the <0 case?\n\treturn &Handle{inner: procFile}, nil\n}\n\n// TODO: Switch to something fdutils.WithFileFd-like.\nfunc (proc *Handle) fd() int {\n\tif proc.inner != nil {\n\t\treturn int(proc.inner.Fd())\n\t}\n\treturn libpathrs.ProcDefaultRootFd\n}\n\n// TODO: Should we expose open?\nfunc (proc *Handle) open(base ProcBase, path string, flags int) (_ *os.File, Closer ThreadCloser, Err error) {\n\tvar closer ThreadCloser\n\tif base == ProcThreadSelf {\n\t\truntime.LockOSThread()\n\t\tcloser = runtime.UnlockOSThread\n\t}\n\tdefer func() {\n\t\tif closer != nil && Err != nil {\n\t\t\tcloser()\n\t\t\tCloser = nil\n\t\t}\n\t}()\n\n\tfd, err := libpathrs.ProcOpenat(proc.fd(), base.inner, path, flags)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tfile, err := fdutils.MkFile(fd)\n\treturn file, closer, err\n}\n\n// OpenRoot safely opens a given path from inside /proc/.\n//\n// This function must only be used for accessing global information from procfs\n// (such as /proc/cpuinfo) or information about other processes (such as\n// /proc/1). Accessing your own process information should be done using\n// [Handle.OpenSelf] or [Handle.OpenThreadSelf].\nfunc (proc *Handle) OpenRoot(path string, flags int) (*os.File, error) {\n\tfile, closer, err := proc.open(ProcRoot, path, flags)\n\tif closer != nil {\n\t\t// should not happen\n\t\tpanic(\"non-zero closer returned from procOpen(ProcRoot)\")\n\t}\n\treturn file, err\n}\n\n// OpenSelf safely opens a given path from inside /proc/self/.\n//\n// This method is recommend for getting process information about the current\n// process for almost all Go processes *except* for cases where there are\n// [runtime.LockOSThread] threads that have changed some aspect of their state\n// (such as through unshare(CLONE_FS) or changing namespaces).\n//\n// For such non-heterogeneous processes, /proc/self may reference to a task\n// that has different state from the current goroutine and so it may be\n// preferable to use [Handle.OpenThreadSelf]. The same is true if a user\n// really wants to inspect the current OS thread's information (such as\n// /proc/thread-self/stack or /proc/thread-self/status which is always uniquely\n// per-thread).\n//\n// Unlike [Handle.OpenThreadSelf], this method does not involve locking\n// the goroutine to the current OS thread and so is simpler to use and\n// theoretically has slightly less overhead.\nfunc (proc *Handle) OpenSelf(path string, flags int) (*os.File, error) {\n\tfile, closer, err := proc.open(ProcSelf, path, flags)\n\tif closer != nil {\n\t\t// should not happen\n\t\tpanic(\"non-zero closer returned from procOpen(ProcSelf)\")\n\t}\n\treturn file, err\n}\n\n// OpenPid safely opens a given path from inside /proc/$pid/, where pid can be\n// either a PID or TID.\n//\n// This is effectively equivalent to calling [Handle.OpenRoot] with the\n// pid prefixed to the subpath.\n//\n// Be aware that due to PID recycling, using this is generally not safe except\n// in certain circumstances. See the documentation of [ProcPid] for more\n// details.\nfunc (proc *Handle) OpenPid(pid int, path string, flags int) (*os.File, error) {\n\tfile, closer, err := proc.open(ProcPid(pid), path, flags)\n\tif closer != nil {\n\t\t// should not happen\n\t\tpanic(\"non-zero closer returned from procOpen(ProcPidOpen)\")\n\t}\n\treturn file, err\n}\n\n// OpenThreadSelf safely opens a given path from inside /proc/thread-self/.\n//\n// Most Go processes have heterogeneous threads (all threads have most of the\n// same kernel state such as CLONE_FS) and so [Handle.OpenSelf] is\n// preferable for most users.\n//\n// For non-heterogeneous threads, or users that actually want thread-specific\n// information (such as /proc/thread-self/stack or /proc/thread-self/status),\n// this method is necessary.\n//\n// Because Go can change the running OS thread of your goroutine without notice\n// (and then subsequently kill the old thread), this method will lock the\n// current goroutine to the OS thread (with [runtime.LockOSThread]) and the\n// caller is responsible for unlocking the the OS thread with the\n// [ThreadCloser] callback once they are done using the returned file. This\n// callback MUST be called AFTER you have finished using the returned\n// [os.File]. This callback is completely separate to [os.File.Close], so it\n// must be called regardless of how you close the handle.\nfunc (proc *Handle) OpenThreadSelf(path string, flags int) (*os.File, ThreadCloser, error) {\n\treturn proc.open(ProcThreadSelf, path, flags)\n}\n\n// Readlink safely reads the contents of a symlink from the given procfs base.\n//\n// This is effectively equivalent to doing an Open*(O_PATH|O_NOFOLLOW) of the\n// path and then doing unix.Readlinkat(fd, \"\"), but with the benefit that\n// thread locking is not necessary for [ProcThreadSelf].\nfunc (proc *Handle) Readlink(base ProcBase, path string) (string, error) {\n\treturn libpathrs.ProcReadlinkat(proc.fd(), base.inner, path)\n}\n"
  },
  {
    "path": "vendor/cyphar.com/go-pathrs/root_linux.go",
    "content": "//go:build linux\n\n// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 2019-2025 SUSE LLC\n * Copyright (C) 2026 Aleksa Sarai <cyphar@cyphar.com>\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 https://mozilla.org/MPL/2.0/.\n */\n\npackage pathrs\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"syscall\"\n\n\t\"cyphar.com/go-pathrs/internal/fdutils\"\n\t\"cyphar.com/go-pathrs/internal/libpathrs\"\n)\n\n// Root is a handle to the root of a directory tree to resolve within. The only\n// purpose of this \"root handle\" is to perform operations within the directory\n// tree, or to get a [Handle] to inodes within the directory tree.\n//\n// At time of writing, it is considered a *VERY BAD IDEA* to open a [Root]\n// inside a possibly-attacker-controlled directory tree. While we do have\n// protections that should defend against it, it's far more dangerous than just\n// opening a directory tree which is not inside a potentially-untrusted\n// directory.\ntype Root struct {\n\tinner *os.File\n}\n\n// OpenRoot creates a new [Root] handle to the directory at the given path.\nfunc OpenRoot(path string) (*Root, error) {\n\tfd, err := libpathrs.OpenRoot(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfile, err := fdutils.MkFile(fd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Root{inner: file}, nil\n}\n\n// RootFromFile creates a new [Root] handle from an [os.File] referencing a\n// directory. The provided file will be duplicated, so the original file should\n// still be closed by the caller.\n//\n// This is effectively the inverse operation of [Root.IntoFile].\nfunc RootFromFile(file *os.File) (*Root, error) {\n\tnewFile, err := fdutils.DupFile(file)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"duplicate root fd: %w\", err)\n\t}\n\treturn &Root{inner: newFile}, nil\n}\n\n// Resolve resolves the given path within the [Root]'s directory tree, and\n// returns a [Handle] to the resolved path. The path must already exist,\n// otherwise an error will occur.\n//\n// All symlinks (including trailing symlinks) are followed, but they are\n// resolved within the rootfs. If you wish to open a handle to the symlink\n// itself, use [ResolveNoFollow].\nfunc (r *Root) Resolve(path string) (*Handle, error) {\n\treturn fdutils.WithFileFd(r.inner, func(rootFd uintptr) (*Handle, error) {\n\t\thandleFd, err := libpathrs.InRootResolve(rootFd, path)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\thandleFile, err := fdutils.MkFile(handleFd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &Handle{inner: handleFile}, nil\n\t})\n}\n\n// ResolveNoFollow is effectively an O_NOFOLLOW version of [Resolve]. Their\n// behaviour is identical, except that *trailing* symlinks will not be\n// followed. If the final component is a trailing symlink, an O_PATH|O_NOFOLLOW\n// handle to the symlink itself is returned.\nfunc (r *Root) ResolveNoFollow(path string) (*Handle, error) {\n\treturn fdutils.WithFileFd(r.inner, func(rootFd uintptr) (*Handle, error) {\n\t\thandleFd, err := libpathrs.InRootResolveNoFollow(rootFd, path)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\thandleFile, err := fdutils.MkFile(handleFd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &Handle{inner: handleFile}, nil\n\t})\n}\n\n// Open is effectively shorthand for [Resolve] followed by [Handle.Open], but\n// can be slightly more efficient (it reduces CGo overhead and the number of\n// syscalls used when using the openat2-based resolver) and is arguably more\n// ergonomic to use.\n//\n// This is effectively equivalent to [os.Open].\nfunc (r *Root) Open(path string) (*os.File, error) {\n\treturn r.OpenFile(path, os.O_RDONLY)\n}\n\n// OpenFile is effectively shorthand for [Resolve] followed by\n// [Handle.OpenFile], but can be slightly more efficient (it reduces CGo\n// overhead and the number of syscalls used when using the openat2-based\n// resolver) and is arguably more ergonomic to use.\n//\n// However, if flags contains os.O_NOFOLLOW and the path is a symlink, then\n// OpenFile's behaviour will match that of openat2. In most cases an error will\n// be returned, but if os.O_PATH is provided along with os.O_NOFOLLOW then a\n// file equivalent to [ResolveNoFollow] will be returned instead.\n//\n// This is effectively equivalent to [os.OpenFile], except that os.O_CREAT is\n// not supported.\nfunc (r *Root) OpenFile(path string, flags int) (*os.File, error) {\n\treturn fdutils.WithFileFd(r.inner, func(rootFd uintptr) (*os.File, error) {\n\t\tfd, err := libpathrs.InRootOpen(rootFd, path, flags)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn fdutils.MkFile(fd)\n\t})\n}\n\n// Create creates a file within the [Root]'s directory tree at the given path,\n// and returns a handle to the file. The provided mode is used for the new file\n// (the process's umask applies).\n//\n// Unlike [os.Create], if the file already exists an error is created rather\n// than the file being opened and truncated.\nfunc (r *Root) Create(path string, flags int, mode os.FileMode) (*os.File, error) {\n\tunixMode, err := toUnixMode(mode, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn fdutils.WithFileFd(r.inner, func(rootFd uintptr) (*os.File, error) {\n\t\thandleFd, err := libpathrs.InRootCreat(rootFd, path, flags, unixMode)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn fdutils.MkFile(handleFd)\n\t})\n}\n\n// Rename two paths within a [Root]'s directory tree. The flags argument is\n// identical to the RENAME_* flags to the renameat2(2) system call.\nfunc (r *Root) Rename(src, dst string, flags uint) error {\n\t_, err := fdutils.WithFileFd(r.inner, func(rootFd uintptr) (struct{}, error) {\n\t\terr := libpathrs.InRootRename(rootFd, src, dst, flags)\n\t\treturn struct{}{}, err\n\t})\n\treturn err\n}\n\n// RemoveDir removes the named empty directory within a [Root]'s directory\n// tree.\nfunc (r *Root) RemoveDir(path string) error {\n\t_, err := fdutils.WithFileFd(r.inner, func(rootFd uintptr) (struct{}, error) {\n\t\terr := libpathrs.InRootRmdir(rootFd, path)\n\t\treturn struct{}{}, err\n\t})\n\treturn err\n}\n\n// RemoveFile removes the named file within a [Root]'s directory tree.\nfunc (r *Root) RemoveFile(path string) error {\n\t_, err := fdutils.WithFileFd(r.inner, func(rootFd uintptr) (struct{}, error) {\n\t\terr := libpathrs.InRootUnlink(rootFd, path)\n\t\treturn struct{}{}, err\n\t})\n\treturn err\n}\n\n// Remove removes the named file or (empty) directory within a [Root]'s\n// directory tree.\n//\n// This is effectively equivalent to [os.Remove].\nfunc (r *Root) Remove(path string) error {\n\t// In order to match os.Remove's implementation we need to also do both\n\t// syscalls unconditionally and adjust the error based on whether\n\t// pathrs_inroot_rmdir() returned ENOTDIR.\n\tunlinkErr := r.RemoveFile(path)\n\tif unlinkErr == nil {\n\t\treturn nil\n\t}\n\trmdirErr := r.RemoveDir(path)\n\tif rmdirErr == nil {\n\t\treturn nil\n\t}\n\t// Both failed, adjust the error in the same way that os.Remove does.\n\terr := rmdirErr\n\tif errors.Is(err, syscall.ENOTDIR) {\n\t\terr = unlinkErr\n\t}\n\treturn err\n}\n\n// RemoveAll recursively deletes a path and all of its children.\n//\n// This is effectively equivalent to [os.RemoveAll].\nfunc (r *Root) RemoveAll(path string) error {\n\t_, err := fdutils.WithFileFd(r.inner, func(rootFd uintptr) (struct{}, error) {\n\t\terr := libpathrs.InRootRemoveAll(rootFd, path)\n\t\treturn struct{}{}, err\n\t})\n\treturn err\n}\n\n// Mkdir creates a directory within a [Root]'s directory tree. The provided\n// mode is used for the new directory (the process's umask applies).\n//\n// This is effectively equivalent to [os.Mkdir].\nfunc (r *Root) Mkdir(path string, mode os.FileMode) error {\n\tunixMode, err := toUnixMode(mode, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, err = fdutils.WithFileFd(r.inner, func(rootFd uintptr) (struct{}, error) {\n\t\terr := libpathrs.InRootMkdir(rootFd, path, unixMode)\n\t\treturn struct{}{}, err\n\t})\n\treturn err\n}\n\n// MkdirAll creates a directory (and any parent path components if they don't\n// exist) within a [Root]'s directory tree. The provided mode is used for any\n// directories created by this function (the process's umask applies).\n//\n// This is effectively equivalent to [os.MkdirAll].\nfunc (r *Root) MkdirAll(path string, mode os.FileMode) (*Handle, error) {\n\tunixMode, err := toUnixMode(mode, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn fdutils.WithFileFd(r.inner, func(rootFd uintptr) (*Handle, error) {\n\t\thandleFd, err := libpathrs.InRootMkdirAll(rootFd, path, unixMode)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\thandleFile, err := fdutils.MkFile(handleFd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &Handle{inner: handleFile}, err\n\t})\n}\n\n// Mknod creates a new device inode of the given type within a [Root]'s\n// directory tree. The provided mode is used for the new directory (the\n// process's umask applies).\n//\n// This is effectively equivalent to [golang.org/x/sys/unix.Mknod].\nfunc (r *Root) Mknod(path string, mode os.FileMode, dev uint64) error {\n\tunixMode, err := toUnixMode(mode, true)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, err = fdutils.WithFileFd(r.inner, func(rootFd uintptr) (struct{}, error) {\n\t\terr := libpathrs.InRootMknod(rootFd, path, unixMode, dev)\n\t\treturn struct{}{}, err\n\t})\n\treturn err\n}\n\n// Symlink creates a symlink within a [Root]'s directory tree. The symlink is\n// created at path and is a link to target.\n//\n// This is effectively equivalent to [os.Symlink].\nfunc (r *Root) Symlink(path, target string) error {\n\t_, err := fdutils.WithFileFd(r.inner, func(rootFd uintptr) (struct{}, error) {\n\t\terr := libpathrs.InRootSymlink(rootFd, path, target)\n\t\treturn struct{}{}, err\n\t})\n\treturn err\n}\n\n// Hardlink creates a hardlink within a [Root]'s directory tree. The hardlink\n// is created at path and is a link to target. Both paths are within the\n// [Root]'s directory tree (you cannot hardlink to a different [Root] or the\n// host).\n//\n// This is effectively equivalent to [os.Link].\nfunc (r *Root) Hardlink(path, target string) error {\n\t_, err := fdutils.WithFileFd(r.inner, func(rootFd uintptr) (struct{}, error) {\n\t\terr := libpathrs.InRootHardlink(rootFd, path, target)\n\t\treturn struct{}{}, err\n\t})\n\treturn err\n}\n\n// Readlink returns the target of a symlink with a [Root]'s directory tree.\n//\n// This is effectively equivalent to [os.Readlink].\nfunc (r *Root) Readlink(path string) (string, error) {\n\treturn fdutils.WithFileFd(r.inner, func(rootFd uintptr) (string, error) {\n\t\treturn libpathrs.InRootReadlink(rootFd, path)\n\t})\n}\n\n// IntoFile unwraps the [Root] into its underlying [os.File].\n//\n// It is critical that you do not operate on this file descriptor yourself,\n// because the security properties of libpathrs depend on users doing all\n// relevant filesystem operations through libpathrs.\n//\n// This operation returns the internal [os.File] of the [Root] directly, so\n// calling [Root.Close] will also close any copies of the returned [os.File].\n// If you want to get an independent copy, use [Root.Clone] followed by\n// [Root.IntoFile] on the cloned [Root].\nfunc (r *Root) IntoFile() *os.File {\n\t// TODO: Figure out if we really don't want to make a copy.\n\t// TODO: We almost certainly want to clear r.inner here, but we can't do\n\t//       that easily atomically (we could use atomic.Value but that'll make\n\t//       things quite a bit uglier).\n\treturn r.inner\n}\n\n// Clone creates a copy of a [Root] handle, such that it has a separate\n// lifetime to the original (while referring to the same underlying directory).\nfunc (r *Root) Clone() (*Root, error) {\n\treturn RootFromFile(r.inner)\n}\n\n// Close frees all of the resources used by the [Root] handle.\nfunc (r *Root) Close() error {\n\treturn r.inner.Close()\n}\n"
  },
  {
    "path": "vendor/cyphar.com/go-pathrs/utils_linux.go",
    "content": "//go:build linux\n\n// SPDX-License-Identifier: MPL-2.0\n/*\n * libpathrs: safe path resolution on Linux\n * Copyright (C) 2019-2025 SUSE LLC\n * Copyright (C) 2026 Aleksa Sarai <cyphar@cyphar.com>\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 https://mozilla.org/MPL/2.0/.\n */\n\npackage pathrs\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n//nolint:cyclop // this function needs to handle a lot of cases\nfunc toUnixMode(mode os.FileMode, needsType bool) (uint32, error) {\n\tsysMode := uint32(mode.Perm())\n\tswitch mode & os.ModeType { //nolint:exhaustive // we only care about ModeType bits\n\tcase 0:\n\t\tif needsType {\n\t\t\tsysMode |= unix.S_IFREG\n\t\t}\n\tcase os.ModeDir:\n\t\tsysMode |= unix.S_IFDIR\n\tcase os.ModeSymlink:\n\t\tsysMode |= unix.S_IFLNK\n\tcase os.ModeCharDevice | os.ModeDevice:\n\t\tsysMode |= unix.S_IFCHR\n\tcase os.ModeDevice:\n\t\tsysMode |= unix.S_IFBLK\n\tcase os.ModeNamedPipe:\n\t\tsysMode |= unix.S_IFIFO\n\tcase os.ModeSocket:\n\t\tsysMode |= unix.S_IFSOCK\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"invalid mode filetype %+o\", mode)\n\t}\n\tif mode&os.ModeSetuid != 0 {\n\t\tsysMode |= unix.S_ISUID\n\t}\n\tif mode&os.ModeSetgid != 0 {\n\t\tsysMode |= unix.S_ISGID\n\t}\n\tif mode&os.ModeSticky != 0 {\n\t\tsysMode |= unix.S_ISVTX\n\t}\n\treturn sysMode, nil\n}\n"
  },
  {
    "path": "vendor/github.com/checkpoint-restore/go-criu/v7/.gitignore",
    "content": "test/test\ntest/test.coverage\ntest/piggie/piggie\ntest/phaul/phaul\ntest/phaul/phaul.coverage\ntest/loop/loop\ntest/mmapper/mmapper\ntest/crit/crit-test\ntest/crit/test-imgs\ntest/crit/crit-test.coverage\ntest/.coverage/\nimage\nscripts/magic-gen/*.h\nscripts/magic-gen/expected.go\nscripts/magic-gen/output.go\ncrit/bin\ncrit/test-imgs/\n__pycache__\n"
  },
  {
    "path": "vendor/github.com/checkpoint-restore/go-criu/v7/.golangci.yml",
    "content": "linters:\n  presets:\n    - bugs\n    - performance\n    - unused\n    - format\n  disable:\n    - musttag\n  enable:\n    - whitespace\n    - misspell\n    - dupl\n    - gosimple\n    - stylecheck\n\nlinters-settings:\n  exhaustive:\n    default-signifies-exhaustive: true\n  gosec:\n    excludes:\n      # https://github.com/securego/gosec/issues/1185\n      - G115\n"
  },
  {
    "path": "vendor/github.com/checkpoint-restore/go-criu/v7/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/checkpoint-restore/go-criu/v7/MAINTAINERS",
    "content": "Adrian Reber <areber@redhat.com>\nKir Kolyshkin <kolyshkin@gmail.com>\nPrajwal S N <prajwalnadig21@gmail.com>\nRadostin Stoyanov <rstoyanov@fedoraproject.org>\n"
  },
  {
    "path": "vendor/github.com/checkpoint-restore/go-criu/v7/Makefile",
    "content": "SHELL = /bin/bash\nGO ?= go\nCC ?= gcc\n\nall: build\n\nlint:\n\tgolangci-lint run ./...\n\nbuild: rpc/rpc.pb.go stats/stats.pb.go\n\t$(GO) build -v ./...\n\t# Build crit binary\n\t$(MAKE) -C crit bin/crit\n\ntest: build\n\t$(MAKE) -C test\n\ncoverage:\n\t$(MAKE) -C test coverage\n\nrpc/rpc.proto:\n\tcurl -sSL https://raw.githubusercontent.com/checkpoint-restore/criu/master/images/rpc.proto -o $@\n\nrpc/rpc.pb.go: rpc/rpc.proto\n\tprotoc --go_out=. --go_opt=M$^=rpc/ $^\n\nstats/stats.proto:\n\tcurl -sSL https://raw.githubusercontent.com/checkpoint-restore/criu/master/images/stats.proto -o $@\n\nstats/stats.pb.go: stats/stats.proto\n\tprotoc --go_out=. --go_opt=M$^=stats/ $^\n\nvendor:\n\t$(GO) mod tidy\n\t$(GO) mod vendor\n\t$(GO) mod verify\n\nclean:\n\t$(MAKE) -C crit/ clean\n\t$(MAKE) -C test/ clean\n\n.PHONY: build test lint vendor coverage clean\n"
  },
  {
    "path": "vendor/github.com/checkpoint-restore/go-criu/v7/README.md",
    "content": "<!-- markdownlint-configure-file { \"no-hard-tabs\": { \"code_blocks\": false } } -->\n# go-criu -- Go bindings for CRIU\n\n[![test](https://github.com/checkpoint-restore/go-criu/workflows/ci/badge.svg?branch=master)](https://github.com/checkpoint-restore/go-criu/actions?query=workflow%3Aci)\n[![verify](https://github.com/checkpoint-restore/go-criu/workflows/verify/badge.svg?branch=master)](https://github.com/checkpoint-restore/go-criu/actions?query=workflow%3Averify)\n[![Go Reference](https://pkg.go.dev/badge/github.com/checkpoint-restore/go-criu.svg)](https://pkg.go.dev/github.com/checkpoint-restore/go-criu)\n\nThis repository provides Go bindings for [CRIU](https://criu.org/).\nThe code is based on the Go-based PHaul implementation from the CRIU repository.\nFor easier inclusion into other Go projects, the CRIU Go bindings have been\nmoved to this repository.\n\n## CRIU\n\nThe Go bindings provide an easy way to use the CRIU RPC calls from Go without\nthe need to set up all the infrastructure to make the actual RPC connection to CRIU.\n\nThe following example would print the version of CRIU:\n\n```go\nimport (\n\t\"log\"\n\n\t\"github.com/checkpoint-restore/go-criu/v7\"\n)\n\nfunc main() {\n\tc := criu.MakeCriu()\n\tversion, err := c.GetCriuVersion()\n\tif err != nil {\n\t\tlog.Fatalln(err)\n\t}\n\tlog.Println(version)\n}\n```\n\nor to just check if at least a certain CRIU version is installed:\n\n```go\n\tc := criu.MakeCriu()\n\tresult, err := c.IsCriuAtLeast(31100)\n```\n\n## CRIT\n\nThe `crit` package provides bindings to decode, encode, and manipulate\nCRIU image files natively within Go. It also provides a CLI tool similar\nto the original CRIT Python tool. To get started with this, see the docs\nat [CRIT (Go library)](https://criu.org/CRIT_%28Go_library%29).\n\n## Releases\n\nThe first go-criu release was 3.11 based on CRIU 3.11. The initial plan\nwas to follow CRIU so that go-criu would carry the same version number as\nCRIU.\n\nAs go-criu is imported in other projects and as Go modules are expected\nto follow Semantic Versioning go-criu will also follow Semantic Versioning\nstarting with the 4.0.0 release.\n\nThe following table shows the relation between go-criu and criu versions:\n\n| Major version  | Latest release | CRIU version |\n| -------------- | -------------- | ------------ |\n| v7             | 7.2.0          | 3.19         |\n| v7             | 7.0.0          | 3.18         |\n| v6             | 6.3.0          | 3.17         |\n| v5             | 5.3.0          | 3.16         |\n| v5             | 5.0.0          | 3.15         |\n| v4             | 4.1.0          | 3.14         |\n\n## How to contribute\n\nWhile bug fixes can first be identified via an \"issue\", that is not required.\nIt's ok to just open up a PR with the fix, but make sure you include the same\ninformation you would have included in an issue - like how to reproduce it.\n\nPRs for new features should include some background on what use cases the\nnew code is trying to address. When possible and when it makes sense, try to\nbreak-up larger PRs into smaller ones - it's easier to review smaller\ncode changes. But only if those smaller ones make sense as stand-alone PRs.\n\nRegardless of the type of PR, all PRs should include:\n\n* well documented code changes\n* additional testcases. Ideally, they should fail w/o your code change applied\n* documentation changes\n\nSquash your commits into logical pieces of work that might want to be reviewed\nseparate from the rest of the PRs. Ideally, each commit should implement a\nsingle idea, and the PR branch should pass the tests at every commit. GitHub\nmakes it easy to review the cumulative effect of many commits; so, when in\ndoubt, use smaller commits.\n\nPRs that fix issues should include a reference like `Closes #XXXX` in the\ncommit message so that github will automatically close the referenced issue\nwhen the PR is merged.\n\nContributors must assert that they are in compliance with the [Developer\nCertificate of Origin 1.1](http://developercertificate.org/). This is achieved\nby adding a \"Signed-off-by\" line containing the contributor's name and e-mail\nto every commit message. Your signature certifies that you wrote the patch or\notherwise have the right to pass it on as an open-source patch.\n\n## License and copyright\n\nUnless mentioned otherwise in a specific file's header, all code in\nthis project is released under the Apache 2.0 license.\n\nThe author of a change remains the copyright holder of their code\n(no copyright assignment). The list of authors and contributors can be\nretrieved from the git commit history and in some cases, the file headers.\n"
  },
  {
    "path": "vendor/github.com/checkpoint-restore/go-criu/v7/codecov.yml",
    "content": "ignore:\n  - \"test\"\n"
  },
  {
    "path": "vendor/github.com/checkpoint-restore/go-criu/v7/features.go",
    "content": "package criu\n\nimport (\n\t\"errors\"\n\n\t\"github.com/checkpoint-restore/go-criu/v7/rpc\"\n)\n\n// Feature checking in go-criu is based on the libcriu feature checking function.\n\n// Feature checking allows the user to check if CRIU supports\n// certain features. There are CRIU features which do not depend\n// on the version of CRIU but on kernel features or architecture.\n//\n// One example is memory tracking. Memory tracking can be disabled\n// in the kernel or there are architectures which do not support\n// it (aarch64 for example). By using the feature check a libcriu\n// user can easily query CRIU if a certain feature is available.\n//\n// The features which should be checked can be marked in the\n// structure 'struct criu_feature_check'. Each structure member\n// that is set to true will result in CRIU checking for the\n// availability of that feature in the current combination of\n// CRIU/kernel/architecture.\n//\n// Available features will be set to true when the function\n// returns successfully. Missing features will be set to false.\n\nfunc (c *Criu) FeatureCheck(features *rpc.CriuFeatures) (*rpc.CriuFeatures, error) {\n\tresp, err := c.doSwrkWithResp(\n\t\trpc.CriuReqType_FEATURE_CHECK,\n\t\tnil,\n\t\tnil,\n\t\tfeatures,\n\t)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif resp.GetType() != rpc.CriuReqType_FEATURE_CHECK {\n\t\treturn nil, errors.New(\"unexpected CRIU RPC response\")\n\t}\n\n\treturn features, nil\n}\n"
  },
  {
    "path": "vendor/github.com/checkpoint-restore/go-criu/v7/main.go",
    "content": "package criu\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"syscall\"\n\n\t\"github.com/checkpoint-restore/go-criu/v7/rpc\"\n\t\"google.golang.org/protobuf/proto\"\n)\n\n// Criu struct\ntype Criu struct {\n\tswrkCmd  *exec.Cmd\n\tswrkSk   *os.File\n\tswrkPath string\n}\n\n// MakeCriu returns the Criu object required for most operations\nfunc MakeCriu() *Criu {\n\treturn &Criu{\n\t\tswrkPath: \"criu\",\n\t}\n}\n\n// SetCriuPath allows setting the path to the CRIU binary\n// if it is in a non standard location\nfunc (c *Criu) SetCriuPath(path string) {\n\tc.swrkPath = path\n}\n\n// Prepare sets up everything for the RPC communication to CRIU\nfunc (c *Criu) Prepare() error {\n\tfds, err := syscall.Socketpair(syscall.AF_LOCAL, syscall.SOCK_SEQPACKET, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcln := os.NewFile(uintptr(fds[0]), \"criu-xprt-cln\")\n\tsyscall.CloseOnExec(fds[0])\n\tsrv := os.NewFile(uintptr(fds[1]), \"criu-xprt-srv\")\n\tdefer srv.Close()\n\n\targs := []string{\"swrk\", strconv.Itoa(fds[1])}\n\t// #nosec G204\n\tcmd := exec.Command(c.swrkPath, args...)\n\n\terr = cmd.Start()\n\tif err != nil {\n\t\tcln.Close()\n\t\treturn err\n\t}\n\n\tc.swrkCmd = cmd\n\tc.swrkSk = cln\n\n\treturn nil\n}\n\n// Cleanup cleans up\nfunc (c *Criu) Cleanup() error {\n\tvar errs []error\n\tif c.swrkCmd != nil {\n\t\tif err := c.swrkSk.Close(); err != nil {\n\t\t\terrs = append(errs, err)\n\t\t}\n\t\tc.swrkSk = nil\n\t\tif err := c.swrkCmd.Wait(); err != nil {\n\t\t\terrs = append(errs, fmt.Errorf(\"criu swrk failed: %w\", err))\n\t\t}\n\t\tc.swrkCmd = nil\n\t}\n\treturn errors.Join(errs...)\n}\n\nfunc (c *Criu) sendAndRecv(reqB []byte) ([]byte, int, error) {\n\tcln := c.swrkSk\n\t_, err := cln.Write(reqB)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\trespB := make([]byte, 2*4096)\n\tn, err := cln.Read(respB)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\treturn respB, n, nil\n}\n\nfunc (c *Criu) doSwrk(reqType rpc.CriuReqType, opts *rpc.CriuOpts, nfy Notify) error {\n\tresp, err := c.doSwrkWithResp(reqType, opts, nfy, nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\trespType := resp.GetType()\n\tif respType != reqType {\n\t\treturn errors.New(\"unexpected CRIU RPC response\")\n\t}\n\n\treturn nil\n}\n\nfunc (c *Criu) doSwrkWithResp(reqType rpc.CriuReqType, opts *rpc.CriuOpts, nfy Notify, features *rpc.CriuFeatures) (resp *rpc.CriuResp, retErr error) {\n\treq := rpc.CriuReq{\n\t\tType: &reqType,\n\t\tOpts: opts,\n\t}\n\n\tif nfy != nil {\n\t\topts.NotifyScripts = proto.Bool(true)\n\t}\n\n\tif features != nil {\n\t\treq.Features = features\n\t}\n\n\tif c.swrkCmd == nil {\n\t\terr := c.Prepare()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tdefer func() {\n\t\t\t// append any cleanup errors to the returned error\n\t\t\terr := c.Cleanup()\n\t\t\tif err != nil {\n\t\t\t\tretErr = errors.Join(retErr, err)\n\t\t\t}\n\t\t}()\n\t}\n\n\tfor {\n\t\treqB, err := proto.Marshal(&req)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\trespB, respS, err := c.sendAndRecv(reqB)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tresp = &rpc.CriuResp{}\n\t\terr = proto.Unmarshal(respB[:respS], resp)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif !resp.GetSuccess() {\n\t\t\treturn resp, fmt.Errorf(\"operation failed (msg:%s err:%d)\",\n\t\t\t\tresp.GetCrErrmsg(), resp.GetCrErrno())\n\t\t}\n\n\t\trespType := resp.GetType()\n\t\tif respType != rpc.CriuReqType_NOTIFY {\n\t\t\tbreak\n\t\t}\n\t\tif nfy == nil {\n\t\t\treturn resp, errors.New(\"unexpected notify\")\n\t\t}\n\n\t\tnotify := resp.GetNotify()\n\t\tswitch notify.GetScript() {\n\t\tcase \"pre-dump\":\n\t\t\terr = nfy.PreDump()\n\t\tcase \"post-dump\":\n\t\t\terr = nfy.PostDump()\n\t\tcase \"pre-restore\":\n\t\t\terr = nfy.PreRestore()\n\t\tcase \"post-restore\":\n\t\t\terr = nfy.PostRestore(notify.GetPid())\n\t\tcase \"network-lock\":\n\t\t\terr = nfy.NetworkLock()\n\t\tcase \"network-unlock\":\n\t\t\terr = nfy.NetworkUnlock()\n\t\tcase \"setup-namespaces\":\n\t\t\terr = nfy.SetupNamespaces(notify.GetPid())\n\t\tcase \"post-setup-namespaces\":\n\t\t\terr = nfy.PostSetupNamespaces()\n\t\tcase \"post-resume\":\n\t\t\terr = nfy.PostResume()\n\t\tdefault:\n\t\t\terr = nil\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn resp, err\n\t\t}\n\n\t\treq = rpc.CriuReq{\n\t\t\tType:          &respType,\n\t\t\tNotifySuccess: proto.Bool(true),\n\t\t}\n\t}\n\n\treturn resp, nil\n}\n\n// Dump dumps a process\nfunc (c *Criu) Dump(opts *rpc.CriuOpts, nfy Notify) error {\n\treturn c.doSwrk(rpc.CriuReqType_DUMP, opts, nfy)\n}\n\n// Restore restores a process\nfunc (c *Criu) Restore(opts *rpc.CriuOpts, nfy Notify) error {\n\treturn c.doSwrk(rpc.CriuReqType_RESTORE, opts, nfy)\n}\n\n// PreDump does a pre-dump\nfunc (c *Criu) PreDump(opts *rpc.CriuOpts, nfy Notify) error {\n\treturn c.doSwrk(rpc.CriuReqType_PRE_DUMP, opts, nfy)\n}\n\n// StartPageServer starts the page server\nfunc (c *Criu) StartPageServer(opts *rpc.CriuOpts) error {\n\treturn c.doSwrk(rpc.CriuReqType_PAGE_SERVER, opts, nil)\n}\n\n// StartPageServerChld starts the page server and returns PID and port\nfunc (c *Criu) StartPageServerChld(opts *rpc.CriuOpts) (int, int, error) {\n\tresp, err := c.doSwrkWithResp(rpc.CriuReqType_PAGE_SERVER_CHLD, opts, nil, nil)\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\n\treturn int(resp.GetPs().GetPid()), int(resp.GetPs().GetPort()), nil\n}\n\n// GetCriuVersion executes the VERSION RPC call and returns the version\n// as an integer. Major * 10000 + Minor * 100 + SubLevel\nfunc (c *Criu) GetCriuVersion() (int, error) {\n\tresp, err := c.doSwrkWithResp(rpc.CriuReqType_VERSION, nil, nil, nil)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tif resp.GetType() != rpc.CriuReqType_VERSION {\n\t\treturn 0, errors.New(\"unexpected CRIU RPC response\")\n\t}\n\n\tversion := resp.GetVersion().GetMajorNumber() * 10000\n\tversion += resp.GetVersion().GetMinorNumber() * 100\n\tif resp.GetVersion().GetSublevel() != 0 {\n\t\tversion += resp.GetVersion().GetSublevel()\n\t}\n\n\tif resp.GetVersion().GetGitid() != \"\" {\n\t\t// taken from runc: if it is a git release -> increase minor by 1\n\t\tversion -= (version % 100)\n\t\tversion += 100\n\t}\n\n\treturn int(version), nil\n}\n\n// IsCriuAtLeast checks if the version is at least the same\n// as the parameter version\nfunc (c *Criu) IsCriuAtLeast(version int) (bool, error) {\n\tcriuVersion, err := c.GetCriuVersion()\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\tif criuVersion >= version {\n\t\treturn true, nil\n\t}\n\n\treturn false, nil\n}\n"
  },
  {
    "path": "vendor/github.com/checkpoint-restore/go-criu/v7/notify.go",
    "content": "package criu\n\n// Notify interface\ntype Notify interface {\n\tPreDump() error\n\tPostDump() error\n\tPreRestore() error\n\tPostRestore(pid int32) error\n\tNetworkLock() error\n\tNetworkUnlock() error\n\tSetupNamespaces(pid int32) error\n\tPostSetupNamespaces() error\n\tPostResume() error\n}\n\n// NoNotify struct\ntype NoNotify struct{}\n\n// PreDump NoNotify\nfunc (c NoNotify) PreDump() error {\n\treturn nil\n}\n\n// PostDump NoNotify\nfunc (c NoNotify) PostDump() error {\n\treturn nil\n}\n\n// PreRestore NoNotify\nfunc (c NoNotify) PreRestore() error {\n\treturn nil\n}\n\n// PostRestore NoNotify\nfunc (c NoNotify) PostRestore(pid int32) error {\n\treturn nil\n}\n\n// NetworkLock NoNotify\nfunc (c NoNotify) NetworkLock() error {\n\treturn nil\n}\n\n// NetworkUnlock NoNotify\nfunc (c NoNotify) NetworkUnlock() error {\n\treturn nil\n}\n\n// SetupNamespaces NoNotify\nfunc (c NoNotify) SetupNamespaces(pid int32) error {\n\treturn nil\n}\n\n// PostSetupNamespaces NoNotify\nfunc (c NoNotify) PostSetupNamespaces() error {\n\treturn nil\n}\n\n// PostResume NoNotify\nfunc (c NoNotify) PostResume() error {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/checkpoint-restore/go-criu/v7/rpc/rpc.pb.go",
    "content": "// SPDX-License-Identifier: MIT\n\n// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.30.0\n// \tprotoc        v4.23.4\n// source: rpc/rpc.proto\n\npackage rpc\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n\tprotoimpl \"google.golang.org/protobuf/runtime/protoimpl\"\n\treflect \"reflect\"\n\tsync \"sync\"\n)\n\nconst (\n\t// Verify that this generated code is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)\n\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)\n)\n\ntype CriuCgMode int32\n\nconst (\n\tCriuCgMode_IGNORE  CriuCgMode = 0\n\tCriuCgMode_CG_NONE CriuCgMode = 1\n\tCriuCgMode_PROPS   CriuCgMode = 2\n\tCriuCgMode_SOFT    CriuCgMode = 3\n\tCriuCgMode_FULL    CriuCgMode = 4\n\tCriuCgMode_STRICT  CriuCgMode = 5\n\tCriuCgMode_DEFAULT CriuCgMode = 6\n)\n\n// Enum value maps for CriuCgMode.\nvar (\n\tCriuCgMode_name = map[int32]string{\n\t\t0: \"IGNORE\",\n\t\t1: \"CG_NONE\",\n\t\t2: \"PROPS\",\n\t\t3: \"SOFT\",\n\t\t4: \"FULL\",\n\t\t5: \"STRICT\",\n\t\t6: \"DEFAULT\",\n\t}\n\tCriuCgMode_value = map[string]int32{\n\t\t\"IGNORE\":  0,\n\t\t\"CG_NONE\": 1,\n\t\t\"PROPS\":   2,\n\t\t\"SOFT\":    3,\n\t\t\"FULL\":    4,\n\t\t\"STRICT\":  5,\n\t\t\"DEFAULT\": 6,\n\t}\n)\n\nfunc (x CriuCgMode) Enum() *CriuCgMode {\n\tp := new(CriuCgMode)\n\t*p = x\n\treturn p\n}\n\nfunc (x CriuCgMode) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (CriuCgMode) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_rpc_rpc_proto_enumTypes[0].Descriptor()\n}\n\nfunc (CriuCgMode) Type() protoreflect.EnumType {\n\treturn &file_rpc_rpc_proto_enumTypes[0]\n}\n\nfunc (x CriuCgMode) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Do not use.\nfunc (x *CriuCgMode) UnmarshalJSON(b []byte) error {\n\tnum, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = CriuCgMode(num)\n\treturn nil\n}\n\n// Deprecated: Use CriuCgMode.Descriptor instead.\nfunc (CriuCgMode) EnumDescriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{0}\n}\n\ntype CriuNetworkLockMethod int32\n\nconst (\n\tCriuNetworkLockMethod_IPTABLES CriuNetworkLockMethod = 1\n\tCriuNetworkLockMethod_NFTABLES CriuNetworkLockMethod = 2\n\tCriuNetworkLockMethod_SKIP     CriuNetworkLockMethod = 3\n)\n\n// Enum value maps for CriuNetworkLockMethod.\nvar (\n\tCriuNetworkLockMethod_name = map[int32]string{\n\t\t1: \"IPTABLES\",\n\t\t2: \"NFTABLES\",\n\t\t3: \"SKIP\",\n\t}\n\tCriuNetworkLockMethod_value = map[string]int32{\n\t\t\"IPTABLES\": 1,\n\t\t\"NFTABLES\": 2,\n\t\t\"SKIP\":     3,\n\t}\n)\n\nfunc (x CriuNetworkLockMethod) Enum() *CriuNetworkLockMethod {\n\tp := new(CriuNetworkLockMethod)\n\t*p = x\n\treturn p\n}\n\nfunc (x CriuNetworkLockMethod) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (CriuNetworkLockMethod) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_rpc_rpc_proto_enumTypes[1].Descriptor()\n}\n\nfunc (CriuNetworkLockMethod) Type() protoreflect.EnumType {\n\treturn &file_rpc_rpc_proto_enumTypes[1]\n}\n\nfunc (x CriuNetworkLockMethod) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Do not use.\nfunc (x *CriuNetworkLockMethod) UnmarshalJSON(b []byte) error {\n\tnum, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = CriuNetworkLockMethod(num)\n\treturn nil\n}\n\n// Deprecated: Use CriuNetworkLockMethod.Descriptor instead.\nfunc (CriuNetworkLockMethod) EnumDescriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{1}\n}\n\ntype CriuPreDumpMode int32\n\nconst (\n\tCriuPreDumpMode_SPLICE  CriuPreDumpMode = 1\n\tCriuPreDumpMode_VM_READ CriuPreDumpMode = 2\n)\n\n// Enum value maps for CriuPreDumpMode.\nvar (\n\tCriuPreDumpMode_name = map[int32]string{\n\t\t1: \"SPLICE\",\n\t\t2: \"VM_READ\",\n\t}\n\tCriuPreDumpMode_value = map[string]int32{\n\t\t\"SPLICE\":  1,\n\t\t\"VM_READ\": 2,\n\t}\n)\n\nfunc (x CriuPreDumpMode) Enum() *CriuPreDumpMode {\n\tp := new(CriuPreDumpMode)\n\t*p = x\n\treturn p\n}\n\nfunc (x CriuPreDumpMode) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (CriuPreDumpMode) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_rpc_rpc_proto_enumTypes[2].Descriptor()\n}\n\nfunc (CriuPreDumpMode) Type() protoreflect.EnumType {\n\treturn &file_rpc_rpc_proto_enumTypes[2]\n}\n\nfunc (x CriuPreDumpMode) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Do not use.\nfunc (x *CriuPreDumpMode) UnmarshalJSON(b []byte) error {\n\tnum, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = CriuPreDumpMode(num)\n\treturn nil\n}\n\n// Deprecated: Use CriuPreDumpMode.Descriptor instead.\nfunc (CriuPreDumpMode) EnumDescriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{2}\n}\n\ntype CriuReqType int32\n\nconst (\n\tCriuReqType_EMPTY            CriuReqType = 0\n\tCriuReqType_DUMP             CriuReqType = 1\n\tCriuReqType_RESTORE          CriuReqType = 2\n\tCriuReqType_CHECK            CriuReqType = 3\n\tCriuReqType_PRE_DUMP         CriuReqType = 4\n\tCriuReqType_PAGE_SERVER      CriuReqType = 5\n\tCriuReqType_NOTIFY           CriuReqType = 6\n\tCriuReqType_CPUINFO_DUMP     CriuReqType = 7\n\tCriuReqType_CPUINFO_CHECK    CriuReqType = 8\n\tCriuReqType_FEATURE_CHECK    CriuReqType = 9\n\tCriuReqType_VERSION          CriuReqType = 10\n\tCriuReqType_WAIT_PID         CriuReqType = 11\n\tCriuReqType_PAGE_SERVER_CHLD CriuReqType = 12\n\tCriuReqType_SINGLE_PRE_DUMP  CriuReqType = 13\n)\n\n// Enum value maps for CriuReqType.\nvar (\n\tCriuReqType_name = map[int32]string{\n\t\t0:  \"EMPTY\",\n\t\t1:  \"DUMP\",\n\t\t2:  \"RESTORE\",\n\t\t3:  \"CHECK\",\n\t\t4:  \"PRE_DUMP\",\n\t\t5:  \"PAGE_SERVER\",\n\t\t6:  \"NOTIFY\",\n\t\t7:  \"CPUINFO_DUMP\",\n\t\t8:  \"CPUINFO_CHECK\",\n\t\t9:  \"FEATURE_CHECK\",\n\t\t10: \"VERSION\",\n\t\t11: \"WAIT_PID\",\n\t\t12: \"PAGE_SERVER_CHLD\",\n\t\t13: \"SINGLE_PRE_DUMP\",\n\t}\n\tCriuReqType_value = map[string]int32{\n\t\t\"EMPTY\":            0,\n\t\t\"DUMP\":             1,\n\t\t\"RESTORE\":          2,\n\t\t\"CHECK\":            3,\n\t\t\"PRE_DUMP\":         4,\n\t\t\"PAGE_SERVER\":      5,\n\t\t\"NOTIFY\":           6,\n\t\t\"CPUINFO_DUMP\":     7,\n\t\t\"CPUINFO_CHECK\":    8,\n\t\t\"FEATURE_CHECK\":    9,\n\t\t\"VERSION\":          10,\n\t\t\"WAIT_PID\":         11,\n\t\t\"PAGE_SERVER_CHLD\": 12,\n\t\t\"SINGLE_PRE_DUMP\":  13,\n\t}\n)\n\nfunc (x CriuReqType) Enum() *CriuReqType {\n\tp := new(CriuReqType)\n\t*p = x\n\treturn p\n}\n\nfunc (x CriuReqType) String() string {\n\treturn protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))\n}\n\nfunc (CriuReqType) Descriptor() protoreflect.EnumDescriptor {\n\treturn file_rpc_rpc_proto_enumTypes[3].Descriptor()\n}\n\nfunc (CriuReqType) Type() protoreflect.EnumType {\n\treturn &file_rpc_rpc_proto_enumTypes[3]\n}\n\nfunc (x CriuReqType) Number() protoreflect.EnumNumber {\n\treturn protoreflect.EnumNumber(x)\n}\n\n// Deprecated: Do not use.\nfunc (x *CriuReqType) UnmarshalJSON(b []byte) error {\n\tnum, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = CriuReqType(num)\n\treturn nil\n}\n\n// Deprecated: Use CriuReqType.Descriptor instead.\nfunc (CriuReqType) EnumDescriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{3}\n}\n\ntype CriuPageServerInfo struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tAddress *string `protobuf:\"bytes,1,opt,name=address\" json:\"address,omitempty\"`\n\tPort    *int32  `protobuf:\"varint,2,opt,name=port\" json:\"port,omitempty\"`\n\tPid     *int32  `protobuf:\"varint,3,opt,name=pid\" json:\"pid,omitempty\"`\n\tFd      *int32  `protobuf:\"varint,4,opt,name=fd\" json:\"fd,omitempty\"`\n}\n\nfunc (x *CriuPageServerInfo) Reset() {\n\t*x = CriuPageServerInfo{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[0]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *CriuPageServerInfo) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*CriuPageServerInfo) ProtoMessage() {}\n\nfunc (x *CriuPageServerInfo) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[0]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use CriuPageServerInfo.ProtoReflect.Descriptor instead.\nfunc (*CriuPageServerInfo) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{0}\n}\n\nfunc (x *CriuPageServerInfo) GetAddress() string {\n\tif x != nil && x.Address != nil {\n\t\treturn *x.Address\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuPageServerInfo) GetPort() int32 {\n\tif x != nil && x.Port != nil {\n\t\treturn *x.Port\n\t}\n\treturn 0\n}\n\nfunc (x *CriuPageServerInfo) GetPid() int32 {\n\tif x != nil && x.Pid != nil {\n\t\treturn *x.Pid\n\t}\n\treturn 0\n}\n\nfunc (x *CriuPageServerInfo) GetFd() int32 {\n\tif x != nil && x.Fd != nil {\n\t\treturn *x.Fd\n\t}\n\treturn 0\n}\n\ntype CriuVethPair struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tIfIn  *string `protobuf:\"bytes,1,req,name=if_in,json=ifIn\" json:\"if_in,omitempty\"`\n\tIfOut *string `protobuf:\"bytes,2,req,name=if_out,json=ifOut\" json:\"if_out,omitempty\"`\n}\n\nfunc (x *CriuVethPair) Reset() {\n\t*x = CriuVethPair{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[1]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *CriuVethPair) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*CriuVethPair) ProtoMessage() {}\n\nfunc (x *CriuVethPair) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[1]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use CriuVethPair.ProtoReflect.Descriptor instead.\nfunc (*CriuVethPair) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{1}\n}\n\nfunc (x *CriuVethPair) GetIfIn() string {\n\tif x != nil && x.IfIn != nil {\n\t\treturn *x.IfIn\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuVethPair) GetIfOut() string {\n\tif x != nil && x.IfOut != nil {\n\t\treturn *x.IfOut\n\t}\n\treturn \"\"\n}\n\ntype ExtMountMap struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tKey *string `protobuf:\"bytes,1,req,name=key\" json:\"key,omitempty\"`\n\tVal *string `protobuf:\"bytes,2,req,name=val\" json:\"val,omitempty\"`\n}\n\nfunc (x *ExtMountMap) Reset() {\n\t*x = ExtMountMap{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[2]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *ExtMountMap) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*ExtMountMap) ProtoMessage() {}\n\nfunc (x *ExtMountMap) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[2]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use ExtMountMap.ProtoReflect.Descriptor instead.\nfunc (*ExtMountMap) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{2}\n}\n\nfunc (x *ExtMountMap) GetKey() string {\n\tif x != nil && x.Key != nil {\n\t\treturn *x.Key\n\t}\n\treturn \"\"\n}\n\nfunc (x *ExtMountMap) GetVal() string {\n\tif x != nil && x.Val != nil {\n\t\treturn *x.Val\n\t}\n\treturn \"\"\n}\n\ntype JoinNamespace struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tNs       *string `protobuf:\"bytes,1,req,name=ns\" json:\"ns,omitempty\"`\n\tNsFile   *string `protobuf:\"bytes,2,req,name=ns_file,json=nsFile\" json:\"ns_file,omitempty\"`\n\tExtraOpt *string `protobuf:\"bytes,3,opt,name=extra_opt,json=extraOpt\" json:\"extra_opt,omitempty\"`\n}\n\nfunc (x *JoinNamespace) Reset() {\n\t*x = JoinNamespace{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[3]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *JoinNamespace) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*JoinNamespace) ProtoMessage() {}\n\nfunc (x *JoinNamespace) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[3]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use JoinNamespace.ProtoReflect.Descriptor instead.\nfunc (*JoinNamespace) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{3}\n}\n\nfunc (x *JoinNamespace) GetNs() string {\n\tif x != nil && x.Ns != nil {\n\t\treturn *x.Ns\n\t}\n\treturn \"\"\n}\n\nfunc (x *JoinNamespace) GetNsFile() string {\n\tif x != nil && x.NsFile != nil {\n\t\treturn *x.NsFile\n\t}\n\treturn \"\"\n}\n\nfunc (x *JoinNamespace) GetExtraOpt() string {\n\tif x != nil && x.ExtraOpt != nil {\n\t\treturn *x.ExtraOpt\n\t}\n\treturn \"\"\n}\n\ntype InheritFd struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tKey *string `protobuf:\"bytes,1,req,name=key\" json:\"key,omitempty\"`\n\tFd  *int32  `protobuf:\"varint,2,req,name=fd\" json:\"fd,omitempty\"`\n}\n\nfunc (x *InheritFd) Reset() {\n\t*x = InheritFd{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[4]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *InheritFd) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*InheritFd) ProtoMessage() {}\n\nfunc (x *InheritFd) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[4]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use InheritFd.ProtoReflect.Descriptor instead.\nfunc (*InheritFd) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{4}\n}\n\nfunc (x *InheritFd) GetKey() string {\n\tif x != nil && x.Key != nil {\n\t\treturn *x.Key\n\t}\n\treturn \"\"\n}\n\nfunc (x *InheritFd) GetFd() int32 {\n\tif x != nil && x.Fd != nil {\n\t\treturn *x.Fd\n\t}\n\treturn 0\n}\n\ntype CgroupRoot struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tCtrl *string `protobuf:\"bytes,1,opt,name=ctrl\" json:\"ctrl,omitempty\"`\n\tPath *string `protobuf:\"bytes,2,req,name=path\" json:\"path,omitempty\"`\n}\n\nfunc (x *CgroupRoot) Reset() {\n\t*x = CgroupRoot{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[5]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *CgroupRoot) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*CgroupRoot) ProtoMessage() {}\n\nfunc (x *CgroupRoot) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[5]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use CgroupRoot.ProtoReflect.Descriptor instead.\nfunc (*CgroupRoot) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{5}\n}\n\nfunc (x *CgroupRoot) GetCtrl() string {\n\tif x != nil && x.Ctrl != nil {\n\t\treturn *x.Ctrl\n\t}\n\treturn \"\"\n}\n\nfunc (x *CgroupRoot) GetPath() string {\n\tif x != nil && x.Path != nil {\n\t\treturn *x.Path\n\t}\n\treturn \"\"\n}\n\ntype UnixSk struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tInode *uint32 `protobuf:\"varint,1,req,name=inode\" json:\"inode,omitempty\"`\n}\n\nfunc (x *UnixSk) Reset() {\n\t*x = UnixSk{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[6]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *UnixSk) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*UnixSk) ProtoMessage() {}\n\nfunc (x *UnixSk) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[6]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use UnixSk.ProtoReflect.Descriptor instead.\nfunc (*UnixSk) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{6}\n}\n\nfunc (x *UnixSk) GetInode() uint32 {\n\tif x != nil && x.Inode != nil {\n\t\treturn *x.Inode\n\t}\n\treturn 0\n}\n\ntype CriuOpts struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tImagesDirFd          *int32                 `protobuf:\"varint,1,req,name=images_dir_fd,json=imagesDirFd,def=-1\" json:\"images_dir_fd,omitempty\"`\n\tImagesDir            *string                `protobuf:\"bytes,68,opt,name=images_dir,json=imagesDir\" json:\"images_dir,omitempty\"` // used only if images_dir_fd == -1\n\tPid                  *int32                 `protobuf:\"varint,2,opt,name=pid\" json:\"pid,omitempty\"`                              // if not set on dump, will dump requesting process\n\tLeaveRunning         *bool                  `protobuf:\"varint,3,opt,name=leave_running,json=leaveRunning\" json:\"leave_running,omitempty\"`\n\tExtUnixSk            *bool                  `protobuf:\"varint,4,opt,name=ext_unix_sk,json=extUnixSk\" json:\"ext_unix_sk,omitempty\"`\n\tTcpEstablished       *bool                  `protobuf:\"varint,5,opt,name=tcp_established,json=tcpEstablished\" json:\"tcp_established,omitempty\"`\n\tEvasiveDevices       *bool                  `protobuf:\"varint,6,opt,name=evasive_devices,json=evasiveDevices\" json:\"evasive_devices,omitempty\"`\n\tShellJob             *bool                  `protobuf:\"varint,7,opt,name=shell_job,json=shellJob\" json:\"shell_job,omitempty\"`\n\tFileLocks            *bool                  `protobuf:\"varint,8,opt,name=file_locks,json=fileLocks\" json:\"file_locks,omitempty\"`\n\tLogLevel             *int32                 `protobuf:\"varint,9,opt,name=log_level,json=logLevel,def=2\" json:\"log_level,omitempty\"`\n\tLogFile              *string                `protobuf:\"bytes,10,opt,name=log_file,json=logFile\" json:\"log_file,omitempty\"` // No subdirs are allowed. Consider using work-dir\n\tPs                   *CriuPageServerInfo    `protobuf:\"bytes,11,opt,name=ps\" json:\"ps,omitempty\"`\n\tNotifyScripts        *bool                  `protobuf:\"varint,12,opt,name=notify_scripts,json=notifyScripts\" json:\"notify_scripts,omitempty\"`\n\tRoot                 *string                `protobuf:\"bytes,13,opt,name=root\" json:\"root,omitempty\"`\n\tParentImg            *string                `protobuf:\"bytes,14,opt,name=parent_img,json=parentImg\" json:\"parent_img,omitempty\"`\n\tTrackMem             *bool                  `protobuf:\"varint,15,opt,name=track_mem,json=trackMem\" json:\"track_mem,omitempty\"`\n\tAutoDedup            *bool                  `protobuf:\"varint,16,opt,name=auto_dedup,json=autoDedup\" json:\"auto_dedup,omitempty\"`\n\tWorkDirFd            *int32                 `protobuf:\"varint,17,opt,name=work_dir_fd,json=workDirFd\" json:\"work_dir_fd,omitempty\"`\n\tLinkRemap            *bool                  `protobuf:\"varint,18,opt,name=link_remap,json=linkRemap\" json:\"link_remap,omitempty\"`\n\tVeths                []*CriuVethPair        `protobuf:\"bytes,19,rep,name=veths\" json:\"veths,omitempty\"` // DEPRECATED, use external instead\n\tCpuCap               *uint32                `protobuf:\"varint,20,opt,name=cpu_cap,json=cpuCap,def=4294967295\" json:\"cpu_cap,omitempty\"`\n\tForceIrmap           *bool                  `protobuf:\"varint,21,opt,name=force_irmap,json=forceIrmap\" json:\"force_irmap,omitempty\"`\n\tExecCmd              []string               `protobuf:\"bytes,22,rep,name=exec_cmd,json=execCmd\" json:\"exec_cmd,omitempty\"`\n\tExtMnt               []*ExtMountMap         `protobuf:\"bytes,23,rep,name=ext_mnt,json=extMnt\" json:\"ext_mnt,omitempty\"`                       // DEPRECATED, use external instead\n\tManageCgroups        *bool                  `protobuf:\"varint,24,opt,name=manage_cgroups,json=manageCgroups\" json:\"manage_cgroups,omitempty\"` // backward compatibility\n\tCgRoot               []*CgroupRoot          `protobuf:\"bytes,25,rep,name=cg_root,json=cgRoot\" json:\"cg_root,omitempty\"`\n\tRstSibling           *bool                  `protobuf:\"varint,26,opt,name=rst_sibling,json=rstSibling\" json:\"rst_sibling,omitempty\"` // swrk only\n\tInheritFd            []*InheritFd           `protobuf:\"bytes,27,rep,name=inherit_fd,json=inheritFd\" json:\"inherit_fd,omitempty\"`     // swrk only\n\tAutoExtMnt           *bool                  `protobuf:\"varint,28,opt,name=auto_ext_mnt,json=autoExtMnt\" json:\"auto_ext_mnt,omitempty\"`\n\tExtSharing           *bool                  `protobuf:\"varint,29,opt,name=ext_sharing,json=extSharing\" json:\"ext_sharing,omitempty\"`\n\tExtMasters           *bool                  `protobuf:\"varint,30,opt,name=ext_masters,json=extMasters\" json:\"ext_masters,omitempty\"`\n\tSkipMnt              []string               `protobuf:\"bytes,31,rep,name=skip_mnt,json=skipMnt\" json:\"skip_mnt,omitempty\"`\n\tEnableFs             []string               `protobuf:\"bytes,32,rep,name=enable_fs,json=enableFs\" json:\"enable_fs,omitempty\"`\n\tUnixSkIno            []*UnixSk              `protobuf:\"bytes,33,rep,name=unix_sk_ino,json=unixSkIno\" json:\"unix_sk_ino,omitempty\"` // DEPRECATED, use external instead\n\tManageCgroupsMode    *CriuCgMode            `protobuf:\"varint,34,opt,name=manage_cgroups_mode,json=manageCgroupsMode,enum=CriuCgMode\" json:\"manage_cgroups_mode,omitempty\"`\n\tGhostLimit           *uint32                `protobuf:\"varint,35,opt,name=ghost_limit,json=ghostLimit,def=1048576\" json:\"ghost_limit,omitempty\"`\n\tIrmapScanPaths       []string               `protobuf:\"bytes,36,rep,name=irmap_scan_paths,json=irmapScanPaths\" json:\"irmap_scan_paths,omitempty\"`\n\tExternal             []string               `protobuf:\"bytes,37,rep,name=external\" json:\"external,omitempty\"`\n\tEmptyNs              *uint32                `protobuf:\"varint,38,opt,name=empty_ns,json=emptyNs\" json:\"empty_ns,omitempty\"`\n\tJoinNs               []*JoinNamespace       `protobuf:\"bytes,39,rep,name=join_ns,json=joinNs\" json:\"join_ns,omitempty\"`\n\tCgroupProps          *string                `protobuf:\"bytes,41,opt,name=cgroup_props,json=cgroupProps\" json:\"cgroup_props,omitempty\"`\n\tCgroupPropsFile      *string                `protobuf:\"bytes,42,opt,name=cgroup_props_file,json=cgroupPropsFile\" json:\"cgroup_props_file,omitempty\"`\n\tCgroupDumpController []string               `protobuf:\"bytes,43,rep,name=cgroup_dump_controller,json=cgroupDumpController\" json:\"cgroup_dump_controller,omitempty\"`\n\tFreezeCgroup         *string                `protobuf:\"bytes,44,opt,name=freeze_cgroup,json=freezeCgroup\" json:\"freeze_cgroup,omitempty\"`\n\tTimeout              *uint32                `protobuf:\"varint,45,opt,name=timeout\" json:\"timeout,omitempty\"`\n\tTcpSkipInFlight      *bool                  `protobuf:\"varint,46,opt,name=tcp_skip_in_flight,json=tcpSkipInFlight\" json:\"tcp_skip_in_flight,omitempty\"`\n\tWeakSysctls          *bool                  `protobuf:\"varint,47,opt,name=weak_sysctls,json=weakSysctls\" json:\"weak_sysctls,omitempty\"`\n\tLazyPages            *bool                  `protobuf:\"varint,48,opt,name=lazy_pages,json=lazyPages\" json:\"lazy_pages,omitempty\"`\n\tStatusFd             *int32                 `protobuf:\"varint,49,opt,name=status_fd,json=statusFd\" json:\"status_fd,omitempty\"`\n\tOrphanPtsMaster      *bool                  `protobuf:\"varint,50,opt,name=orphan_pts_master,json=orphanPtsMaster\" json:\"orphan_pts_master,omitempty\"`\n\tConfigFile           *string                `protobuf:\"bytes,51,opt,name=config_file,json=configFile\" json:\"config_file,omitempty\"`\n\tTcpClose             *bool                  `protobuf:\"varint,52,opt,name=tcp_close,json=tcpClose\" json:\"tcp_close,omitempty\"`\n\tLsmProfile           *string                `protobuf:\"bytes,53,opt,name=lsm_profile,json=lsmProfile\" json:\"lsm_profile,omitempty\"`\n\tTlsCacert            *string                `protobuf:\"bytes,54,opt,name=tls_cacert,json=tlsCacert\" json:\"tls_cacert,omitempty\"`\n\tTlsCacrl             *string                `protobuf:\"bytes,55,opt,name=tls_cacrl,json=tlsCacrl\" json:\"tls_cacrl,omitempty\"`\n\tTlsCert              *string                `protobuf:\"bytes,56,opt,name=tls_cert,json=tlsCert\" json:\"tls_cert,omitempty\"`\n\tTlsKey               *string                `protobuf:\"bytes,57,opt,name=tls_key,json=tlsKey\" json:\"tls_key,omitempty\"`\n\tTls                  *bool                  `protobuf:\"varint,58,opt,name=tls\" json:\"tls,omitempty\"`\n\tTlsNoCnVerify        *bool                  `protobuf:\"varint,59,opt,name=tls_no_cn_verify,json=tlsNoCnVerify\" json:\"tls_no_cn_verify,omitempty\"`\n\tCgroupYard           *string                `protobuf:\"bytes,60,opt,name=cgroup_yard,json=cgroupYard\" json:\"cgroup_yard,omitempty\"`\n\tPreDumpMode          *CriuPreDumpMode       `protobuf:\"varint,61,opt,name=pre_dump_mode,json=preDumpMode,enum=CriuPreDumpMode,def=1\" json:\"pre_dump_mode,omitempty\"`\n\tPidfdStoreSk         *int32                 `protobuf:\"varint,62,opt,name=pidfd_store_sk,json=pidfdStoreSk\" json:\"pidfd_store_sk,omitempty\"`\n\tLsmMountContext      *string                `protobuf:\"bytes,63,opt,name=lsm_mount_context,json=lsmMountContext\" json:\"lsm_mount_context,omitempty\"`\n\tNetworkLock          *CriuNetworkLockMethod `protobuf:\"varint,64,opt,name=network_lock,json=networkLock,enum=CriuNetworkLockMethod,def=1\" json:\"network_lock,omitempty\"`\n\tMntnsCompatMode      *bool                  `protobuf:\"varint,65,opt,name=mntns_compat_mode,json=mntnsCompatMode\" json:\"mntns_compat_mode,omitempty\"`\n\tSkipFileRwxCheck     *bool                  `protobuf:\"varint,66,opt,name=skip_file_rwx_check,json=skipFileRwxCheck\" json:\"skip_file_rwx_check,omitempty\"`\n\tUnprivileged         *bool                  `protobuf:\"varint,67,opt,name=unprivileged\" json:\"unprivileged,omitempty\"`\n\tLeaveStopped         *bool                  `protobuf:\"varint,69,opt,name=leave_stopped,json=leaveStopped\" json:\"leave_stopped,omitempty\"`\n\tDisplayStats         *bool                  `protobuf:\"varint,70,opt,name=display_stats,json=displayStats\" json:\"display_stats,omitempty\"`\n\tLogToStderr          *bool                  `protobuf:\"varint,71,opt,name=log_to_stderr,json=logToStderr\" json:\"log_to_stderr,omitempty\"` //\toptional bool\t\t\tcheck_mounts\t\t= 128;\n}\n\n// Default values for CriuOpts fields.\nconst (\n\tDefault_CriuOpts_ImagesDirFd = int32(-1)\n\tDefault_CriuOpts_LogLevel    = int32(2)\n\tDefault_CriuOpts_CpuCap      = uint32(4294967295)\n\tDefault_CriuOpts_GhostLimit  = uint32(1048576)\n\tDefault_CriuOpts_PreDumpMode = CriuPreDumpMode_SPLICE\n\tDefault_CriuOpts_NetworkLock = CriuNetworkLockMethod_IPTABLES\n)\n\nfunc (x *CriuOpts) Reset() {\n\t*x = CriuOpts{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[7]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *CriuOpts) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*CriuOpts) ProtoMessage() {}\n\nfunc (x *CriuOpts) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[7]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use CriuOpts.ProtoReflect.Descriptor instead.\nfunc (*CriuOpts) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{7}\n}\n\nfunc (x *CriuOpts) GetImagesDirFd() int32 {\n\tif x != nil && x.ImagesDirFd != nil {\n\t\treturn *x.ImagesDirFd\n\t}\n\treturn Default_CriuOpts_ImagesDirFd\n}\n\nfunc (x *CriuOpts) GetImagesDir() string {\n\tif x != nil && x.ImagesDir != nil {\n\t\treturn *x.ImagesDir\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetPid() int32 {\n\tif x != nil && x.Pid != nil {\n\t\treturn *x.Pid\n\t}\n\treturn 0\n}\n\nfunc (x *CriuOpts) GetLeaveRunning() bool {\n\tif x != nil && x.LeaveRunning != nil {\n\t\treturn *x.LeaveRunning\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetExtUnixSk() bool {\n\tif x != nil && x.ExtUnixSk != nil {\n\t\treturn *x.ExtUnixSk\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetTcpEstablished() bool {\n\tif x != nil && x.TcpEstablished != nil {\n\t\treturn *x.TcpEstablished\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetEvasiveDevices() bool {\n\tif x != nil && x.EvasiveDevices != nil {\n\t\treturn *x.EvasiveDevices\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetShellJob() bool {\n\tif x != nil && x.ShellJob != nil {\n\t\treturn *x.ShellJob\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetFileLocks() bool {\n\tif x != nil && x.FileLocks != nil {\n\t\treturn *x.FileLocks\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetLogLevel() int32 {\n\tif x != nil && x.LogLevel != nil {\n\t\treturn *x.LogLevel\n\t}\n\treturn Default_CriuOpts_LogLevel\n}\n\nfunc (x *CriuOpts) GetLogFile() string {\n\tif x != nil && x.LogFile != nil {\n\t\treturn *x.LogFile\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetPs() *CriuPageServerInfo {\n\tif x != nil {\n\t\treturn x.Ps\n\t}\n\treturn nil\n}\n\nfunc (x *CriuOpts) GetNotifyScripts() bool {\n\tif x != nil && x.NotifyScripts != nil {\n\t\treturn *x.NotifyScripts\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetRoot() string {\n\tif x != nil && x.Root != nil {\n\t\treturn *x.Root\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetParentImg() string {\n\tif x != nil && x.ParentImg != nil {\n\t\treturn *x.ParentImg\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetTrackMem() bool {\n\tif x != nil && x.TrackMem != nil {\n\t\treturn *x.TrackMem\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetAutoDedup() bool {\n\tif x != nil && x.AutoDedup != nil {\n\t\treturn *x.AutoDedup\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetWorkDirFd() int32 {\n\tif x != nil && x.WorkDirFd != nil {\n\t\treturn *x.WorkDirFd\n\t}\n\treturn 0\n}\n\nfunc (x *CriuOpts) GetLinkRemap() bool {\n\tif x != nil && x.LinkRemap != nil {\n\t\treturn *x.LinkRemap\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetVeths() []*CriuVethPair {\n\tif x != nil {\n\t\treturn x.Veths\n\t}\n\treturn nil\n}\n\nfunc (x *CriuOpts) GetCpuCap() uint32 {\n\tif x != nil && x.CpuCap != nil {\n\t\treturn *x.CpuCap\n\t}\n\treturn Default_CriuOpts_CpuCap\n}\n\nfunc (x *CriuOpts) GetForceIrmap() bool {\n\tif x != nil && x.ForceIrmap != nil {\n\t\treturn *x.ForceIrmap\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetExecCmd() []string {\n\tif x != nil {\n\t\treturn x.ExecCmd\n\t}\n\treturn nil\n}\n\nfunc (x *CriuOpts) GetExtMnt() []*ExtMountMap {\n\tif x != nil {\n\t\treturn x.ExtMnt\n\t}\n\treturn nil\n}\n\nfunc (x *CriuOpts) GetManageCgroups() bool {\n\tif x != nil && x.ManageCgroups != nil {\n\t\treturn *x.ManageCgroups\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetCgRoot() []*CgroupRoot {\n\tif x != nil {\n\t\treturn x.CgRoot\n\t}\n\treturn nil\n}\n\nfunc (x *CriuOpts) GetRstSibling() bool {\n\tif x != nil && x.RstSibling != nil {\n\t\treturn *x.RstSibling\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetInheritFd() []*InheritFd {\n\tif x != nil {\n\t\treturn x.InheritFd\n\t}\n\treturn nil\n}\n\nfunc (x *CriuOpts) GetAutoExtMnt() bool {\n\tif x != nil && x.AutoExtMnt != nil {\n\t\treturn *x.AutoExtMnt\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetExtSharing() bool {\n\tif x != nil && x.ExtSharing != nil {\n\t\treturn *x.ExtSharing\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetExtMasters() bool {\n\tif x != nil && x.ExtMasters != nil {\n\t\treturn *x.ExtMasters\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetSkipMnt() []string {\n\tif x != nil {\n\t\treturn x.SkipMnt\n\t}\n\treturn nil\n}\n\nfunc (x *CriuOpts) GetEnableFs() []string {\n\tif x != nil {\n\t\treturn x.EnableFs\n\t}\n\treturn nil\n}\n\nfunc (x *CriuOpts) GetUnixSkIno() []*UnixSk {\n\tif x != nil {\n\t\treturn x.UnixSkIno\n\t}\n\treturn nil\n}\n\nfunc (x *CriuOpts) GetManageCgroupsMode() CriuCgMode {\n\tif x != nil && x.ManageCgroupsMode != nil {\n\t\treturn *x.ManageCgroupsMode\n\t}\n\treturn CriuCgMode_IGNORE\n}\n\nfunc (x *CriuOpts) GetGhostLimit() uint32 {\n\tif x != nil && x.GhostLimit != nil {\n\t\treturn *x.GhostLimit\n\t}\n\treturn Default_CriuOpts_GhostLimit\n}\n\nfunc (x *CriuOpts) GetIrmapScanPaths() []string {\n\tif x != nil {\n\t\treturn x.IrmapScanPaths\n\t}\n\treturn nil\n}\n\nfunc (x *CriuOpts) GetExternal() []string {\n\tif x != nil {\n\t\treturn x.External\n\t}\n\treturn nil\n}\n\nfunc (x *CriuOpts) GetEmptyNs() uint32 {\n\tif x != nil && x.EmptyNs != nil {\n\t\treturn *x.EmptyNs\n\t}\n\treturn 0\n}\n\nfunc (x *CriuOpts) GetJoinNs() []*JoinNamespace {\n\tif x != nil {\n\t\treturn x.JoinNs\n\t}\n\treturn nil\n}\n\nfunc (x *CriuOpts) GetCgroupProps() string {\n\tif x != nil && x.CgroupProps != nil {\n\t\treturn *x.CgroupProps\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetCgroupPropsFile() string {\n\tif x != nil && x.CgroupPropsFile != nil {\n\t\treturn *x.CgroupPropsFile\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetCgroupDumpController() []string {\n\tif x != nil {\n\t\treturn x.CgroupDumpController\n\t}\n\treturn nil\n}\n\nfunc (x *CriuOpts) GetFreezeCgroup() string {\n\tif x != nil && x.FreezeCgroup != nil {\n\t\treturn *x.FreezeCgroup\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetTimeout() uint32 {\n\tif x != nil && x.Timeout != nil {\n\t\treturn *x.Timeout\n\t}\n\treturn 0\n}\n\nfunc (x *CriuOpts) GetTcpSkipInFlight() bool {\n\tif x != nil && x.TcpSkipInFlight != nil {\n\t\treturn *x.TcpSkipInFlight\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetWeakSysctls() bool {\n\tif x != nil && x.WeakSysctls != nil {\n\t\treturn *x.WeakSysctls\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetLazyPages() bool {\n\tif x != nil && x.LazyPages != nil {\n\t\treturn *x.LazyPages\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetStatusFd() int32 {\n\tif x != nil && x.StatusFd != nil {\n\t\treturn *x.StatusFd\n\t}\n\treturn 0\n}\n\nfunc (x *CriuOpts) GetOrphanPtsMaster() bool {\n\tif x != nil && x.OrphanPtsMaster != nil {\n\t\treturn *x.OrphanPtsMaster\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetConfigFile() string {\n\tif x != nil && x.ConfigFile != nil {\n\t\treturn *x.ConfigFile\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetTcpClose() bool {\n\tif x != nil && x.TcpClose != nil {\n\t\treturn *x.TcpClose\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetLsmProfile() string {\n\tif x != nil && x.LsmProfile != nil {\n\t\treturn *x.LsmProfile\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetTlsCacert() string {\n\tif x != nil && x.TlsCacert != nil {\n\t\treturn *x.TlsCacert\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetTlsCacrl() string {\n\tif x != nil && x.TlsCacrl != nil {\n\t\treturn *x.TlsCacrl\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetTlsCert() string {\n\tif x != nil && x.TlsCert != nil {\n\t\treturn *x.TlsCert\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetTlsKey() string {\n\tif x != nil && x.TlsKey != nil {\n\t\treturn *x.TlsKey\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetTls() bool {\n\tif x != nil && x.Tls != nil {\n\t\treturn *x.Tls\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetTlsNoCnVerify() bool {\n\tif x != nil && x.TlsNoCnVerify != nil {\n\t\treturn *x.TlsNoCnVerify\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetCgroupYard() string {\n\tif x != nil && x.CgroupYard != nil {\n\t\treturn *x.CgroupYard\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetPreDumpMode() CriuPreDumpMode {\n\tif x != nil && x.PreDumpMode != nil {\n\t\treturn *x.PreDumpMode\n\t}\n\treturn Default_CriuOpts_PreDumpMode\n}\n\nfunc (x *CriuOpts) GetPidfdStoreSk() int32 {\n\tif x != nil && x.PidfdStoreSk != nil {\n\t\treturn *x.PidfdStoreSk\n\t}\n\treturn 0\n}\n\nfunc (x *CriuOpts) GetLsmMountContext() string {\n\tif x != nil && x.LsmMountContext != nil {\n\t\treturn *x.LsmMountContext\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuOpts) GetNetworkLock() CriuNetworkLockMethod {\n\tif x != nil && x.NetworkLock != nil {\n\t\treturn *x.NetworkLock\n\t}\n\treturn Default_CriuOpts_NetworkLock\n}\n\nfunc (x *CriuOpts) GetMntnsCompatMode() bool {\n\tif x != nil && x.MntnsCompatMode != nil {\n\t\treturn *x.MntnsCompatMode\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetSkipFileRwxCheck() bool {\n\tif x != nil && x.SkipFileRwxCheck != nil {\n\t\treturn *x.SkipFileRwxCheck\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetUnprivileged() bool {\n\tif x != nil && x.Unprivileged != nil {\n\t\treturn *x.Unprivileged\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetLeaveStopped() bool {\n\tif x != nil && x.LeaveStopped != nil {\n\t\treturn *x.LeaveStopped\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetDisplayStats() bool {\n\tif x != nil && x.DisplayStats != nil {\n\t\treturn *x.DisplayStats\n\t}\n\treturn false\n}\n\nfunc (x *CriuOpts) GetLogToStderr() bool {\n\tif x != nil && x.LogToStderr != nil {\n\t\treturn *x.LogToStderr\n\t}\n\treturn false\n}\n\ntype CriuDumpResp struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tRestored *bool `protobuf:\"varint,1,opt,name=restored\" json:\"restored,omitempty\"`\n}\n\nfunc (x *CriuDumpResp) Reset() {\n\t*x = CriuDumpResp{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[8]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *CriuDumpResp) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*CriuDumpResp) ProtoMessage() {}\n\nfunc (x *CriuDumpResp) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[8]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use CriuDumpResp.ProtoReflect.Descriptor instead.\nfunc (*CriuDumpResp) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{8}\n}\n\nfunc (x *CriuDumpResp) GetRestored() bool {\n\tif x != nil && x.Restored != nil {\n\t\treturn *x.Restored\n\t}\n\treturn false\n}\n\ntype CriuRestoreResp struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tPid *int32 `protobuf:\"varint,1,req,name=pid\" json:\"pid,omitempty\"`\n}\n\nfunc (x *CriuRestoreResp) Reset() {\n\t*x = CriuRestoreResp{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[9]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *CriuRestoreResp) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*CriuRestoreResp) ProtoMessage() {}\n\nfunc (x *CriuRestoreResp) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[9]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use CriuRestoreResp.ProtoReflect.Descriptor instead.\nfunc (*CriuRestoreResp) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{9}\n}\n\nfunc (x *CriuRestoreResp) GetPid() int32 {\n\tif x != nil && x.Pid != nil {\n\t\treturn *x.Pid\n\t}\n\treturn 0\n}\n\ntype CriuNotify struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tScript *string `protobuf:\"bytes,1,opt,name=script\" json:\"script,omitempty\"`\n\tPid    *int32  `protobuf:\"varint,2,opt,name=pid\" json:\"pid,omitempty\"`\n}\n\nfunc (x *CriuNotify) Reset() {\n\t*x = CriuNotify{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[10]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *CriuNotify) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*CriuNotify) ProtoMessage() {}\n\nfunc (x *CriuNotify) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[10]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use CriuNotify.ProtoReflect.Descriptor instead.\nfunc (*CriuNotify) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{10}\n}\n\nfunc (x *CriuNotify) GetScript() string {\n\tif x != nil && x.Script != nil {\n\t\treturn *x.Script\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuNotify) GetPid() int32 {\n\tif x != nil && x.Pid != nil {\n\t\treturn *x.Pid\n\t}\n\treturn 0\n}\n\n// List of features which can queried via\n// CRIU_REQ_TYPE__FEATURE_CHECK\ntype CriuFeatures struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tMemTrack   *bool `protobuf:\"varint,1,opt,name=mem_track,json=memTrack\" json:\"mem_track,omitempty\"`\n\tLazyPages  *bool `protobuf:\"varint,2,opt,name=lazy_pages,json=lazyPages\" json:\"lazy_pages,omitempty\"`\n\tPidfdStore *bool `protobuf:\"varint,3,opt,name=pidfd_store,json=pidfdStore\" json:\"pidfd_store,omitempty\"`\n}\n\nfunc (x *CriuFeatures) Reset() {\n\t*x = CriuFeatures{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[11]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *CriuFeatures) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*CriuFeatures) ProtoMessage() {}\n\nfunc (x *CriuFeatures) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[11]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use CriuFeatures.ProtoReflect.Descriptor instead.\nfunc (*CriuFeatures) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{11}\n}\n\nfunc (x *CriuFeatures) GetMemTrack() bool {\n\tif x != nil && x.MemTrack != nil {\n\t\treturn *x.MemTrack\n\t}\n\treturn false\n}\n\nfunc (x *CriuFeatures) GetLazyPages() bool {\n\tif x != nil && x.LazyPages != nil {\n\t\treturn *x.LazyPages\n\t}\n\treturn false\n}\n\nfunc (x *CriuFeatures) GetPidfdStore() bool {\n\tif x != nil && x.PidfdStore != nil {\n\t\treturn *x.PidfdStore\n\t}\n\treturn false\n}\n\ntype CriuReq struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tType          *CriuReqType `protobuf:\"varint,1,req,name=type,enum=CriuReqType\" json:\"type,omitempty\"`\n\tOpts          *CriuOpts    `protobuf:\"bytes,2,opt,name=opts\" json:\"opts,omitempty\"`\n\tNotifySuccess *bool        `protobuf:\"varint,3,opt,name=notify_success,json=notifySuccess\" json:\"notify_success,omitempty\"`\n\t// When set service won't close the connection but\n\t// will wait for more req-s to appear. Works not\n\t// for all request types.\n\tKeepOpen *bool `protobuf:\"varint,4,opt,name=keep_open,json=keepOpen\" json:\"keep_open,omitempty\"`\n\t// 'features' can be used to query which features\n\t// are supported by the installed criu/kernel\n\t// via RPC.\n\tFeatures *CriuFeatures `protobuf:\"bytes,5,opt,name=features\" json:\"features,omitempty\"`\n\t// 'pid' is used for WAIT_PID\n\tPid *uint32 `protobuf:\"varint,6,opt,name=pid\" json:\"pid,omitempty\"`\n}\n\nfunc (x *CriuReq) Reset() {\n\t*x = CriuReq{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[12]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *CriuReq) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*CriuReq) ProtoMessage() {}\n\nfunc (x *CriuReq) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[12]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use CriuReq.ProtoReflect.Descriptor instead.\nfunc (*CriuReq) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{12}\n}\n\nfunc (x *CriuReq) GetType() CriuReqType {\n\tif x != nil && x.Type != nil {\n\t\treturn *x.Type\n\t}\n\treturn CriuReqType_EMPTY\n}\n\nfunc (x *CriuReq) GetOpts() *CriuOpts {\n\tif x != nil {\n\t\treturn x.Opts\n\t}\n\treturn nil\n}\n\nfunc (x *CriuReq) GetNotifySuccess() bool {\n\tif x != nil && x.NotifySuccess != nil {\n\t\treturn *x.NotifySuccess\n\t}\n\treturn false\n}\n\nfunc (x *CriuReq) GetKeepOpen() bool {\n\tif x != nil && x.KeepOpen != nil {\n\t\treturn *x.KeepOpen\n\t}\n\treturn false\n}\n\nfunc (x *CriuReq) GetFeatures() *CriuFeatures {\n\tif x != nil {\n\t\treturn x.Features\n\t}\n\treturn nil\n}\n\nfunc (x *CriuReq) GetPid() uint32 {\n\tif x != nil && x.Pid != nil {\n\t\treturn *x.Pid\n\t}\n\treturn 0\n}\n\ntype CriuResp struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tType     *CriuReqType        `protobuf:\"varint,1,req,name=type,enum=CriuReqType\" json:\"type,omitempty\"`\n\tSuccess  *bool               `protobuf:\"varint,2,req,name=success\" json:\"success,omitempty\"`\n\tDump     *CriuDumpResp       `protobuf:\"bytes,3,opt,name=dump\" json:\"dump,omitempty\"`\n\tRestore  *CriuRestoreResp    `protobuf:\"bytes,4,opt,name=restore\" json:\"restore,omitempty\"`\n\tNotify   *CriuNotify         `protobuf:\"bytes,5,opt,name=notify\" json:\"notify,omitempty\"`\n\tPs       *CriuPageServerInfo `protobuf:\"bytes,6,opt,name=ps\" json:\"ps,omitempty\"`\n\tCrErrno  *int32              `protobuf:\"varint,7,opt,name=cr_errno,json=crErrno\" json:\"cr_errno,omitempty\"`\n\tFeatures *CriuFeatures       `protobuf:\"bytes,8,opt,name=features\" json:\"features,omitempty\"`\n\tCrErrmsg *string             `protobuf:\"bytes,9,opt,name=cr_errmsg,json=crErrmsg\" json:\"cr_errmsg,omitempty\"`\n\tVersion  *CriuVersion        `protobuf:\"bytes,10,opt,name=version\" json:\"version,omitempty\"`\n\tStatus   *int32              `protobuf:\"varint,11,opt,name=status\" json:\"status,omitempty\"`\n}\n\nfunc (x *CriuResp) Reset() {\n\t*x = CriuResp{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[13]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *CriuResp) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*CriuResp) ProtoMessage() {}\n\nfunc (x *CriuResp) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[13]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use CriuResp.ProtoReflect.Descriptor instead.\nfunc (*CriuResp) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{13}\n}\n\nfunc (x *CriuResp) GetType() CriuReqType {\n\tif x != nil && x.Type != nil {\n\t\treturn *x.Type\n\t}\n\treturn CriuReqType_EMPTY\n}\n\nfunc (x *CriuResp) GetSuccess() bool {\n\tif x != nil && x.Success != nil {\n\t\treturn *x.Success\n\t}\n\treturn false\n}\n\nfunc (x *CriuResp) GetDump() *CriuDumpResp {\n\tif x != nil {\n\t\treturn x.Dump\n\t}\n\treturn nil\n}\n\nfunc (x *CriuResp) GetRestore() *CriuRestoreResp {\n\tif x != nil {\n\t\treturn x.Restore\n\t}\n\treturn nil\n}\n\nfunc (x *CriuResp) GetNotify() *CriuNotify {\n\tif x != nil {\n\t\treturn x.Notify\n\t}\n\treturn nil\n}\n\nfunc (x *CriuResp) GetPs() *CriuPageServerInfo {\n\tif x != nil {\n\t\treturn x.Ps\n\t}\n\treturn nil\n}\n\nfunc (x *CriuResp) GetCrErrno() int32 {\n\tif x != nil && x.CrErrno != nil {\n\t\treturn *x.CrErrno\n\t}\n\treturn 0\n}\n\nfunc (x *CriuResp) GetFeatures() *CriuFeatures {\n\tif x != nil {\n\t\treturn x.Features\n\t}\n\treturn nil\n}\n\nfunc (x *CriuResp) GetCrErrmsg() string {\n\tif x != nil && x.CrErrmsg != nil {\n\t\treturn *x.CrErrmsg\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuResp) GetVersion() *CriuVersion {\n\tif x != nil {\n\t\treturn x.Version\n\t}\n\treturn nil\n}\n\nfunc (x *CriuResp) GetStatus() int32 {\n\tif x != nil && x.Status != nil {\n\t\treturn *x.Status\n\t}\n\treturn 0\n}\n\n// Answer for criu_req_type.VERSION requests\ntype CriuVersion struct {\n\tstate         protoimpl.MessageState\n\tsizeCache     protoimpl.SizeCache\n\tunknownFields protoimpl.UnknownFields\n\n\tMajorNumber *int32  `protobuf:\"varint,1,req,name=major_number,json=majorNumber\" json:\"major_number,omitempty\"`\n\tMinorNumber *int32  `protobuf:\"varint,2,req,name=minor_number,json=minorNumber\" json:\"minor_number,omitempty\"`\n\tGitid       *string `protobuf:\"bytes,3,opt,name=gitid\" json:\"gitid,omitempty\"`\n\tSublevel    *int32  `protobuf:\"varint,4,opt,name=sublevel\" json:\"sublevel,omitempty\"`\n\tExtra       *int32  `protobuf:\"varint,5,opt,name=extra\" json:\"extra,omitempty\"`\n\tName        *string `protobuf:\"bytes,6,opt,name=name\" json:\"name,omitempty\"`\n}\n\nfunc (x *CriuVersion) Reset() {\n\t*x = CriuVersion{}\n\tif protoimpl.UnsafeEnabled {\n\t\tmi := &file_rpc_rpc_proto_msgTypes[14]\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tms.StoreMessageInfo(mi)\n\t}\n}\n\nfunc (x *CriuVersion) String() string {\n\treturn protoimpl.X.MessageStringOf(x)\n}\n\nfunc (*CriuVersion) ProtoMessage() {}\n\nfunc (x *CriuVersion) ProtoReflect() protoreflect.Message {\n\tmi := &file_rpc_rpc_proto_msgTypes[14]\n\tif protoimpl.UnsafeEnabled && x != nil {\n\t\tms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))\n\t\tif ms.LoadMessageInfo() == nil {\n\t\t\tms.StoreMessageInfo(mi)\n\t\t}\n\t\treturn ms\n\t}\n\treturn mi.MessageOf(x)\n}\n\n// Deprecated: Use CriuVersion.ProtoReflect.Descriptor instead.\nfunc (*CriuVersion) Descriptor() ([]byte, []int) {\n\treturn file_rpc_rpc_proto_rawDescGZIP(), []int{14}\n}\n\nfunc (x *CriuVersion) GetMajorNumber() int32 {\n\tif x != nil && x.MajorNumber != nil {\n\t\treturn *x.MajorNumber\n\t}\n\treturn 0\n}\n\nfunc (x *CriuVersion) GetMinorNumber() int32 {\n\tif x != nil && x.MinorNumber != nil {\n\t\treturn *x.MinorNumber\n\t}\n\treturn 0\n}\n\nfunc (x *CriuVersion) GetGitid() string {\n\tif x != nil && x.Gitid != nil {\n\t\treturn *x.Gitid\n\t}\n\treturn \"\"\n}\n\nfunc (x *CriuVersion) GetSublevel() int32 {\n\tif x != nil && x.Sublevel != nil {\n\t\treturn *x.Sublevel\n\t}\n\treturn 0\n}\n\nfunc (x *CriuVersion) GetExtra() int32 {\n\tif x != nil && x.Extra != nil {\n\t\treturn *x.Extra\n\t}\n\treturn 0\n}\n\nfunc (x *CriuVersion) GetName() string {\n\tif x != nil && x.Name != nil {\n\t\treturn *x.Name\n\t}\n\treturn \"\"\n}\n\nvar File_rpc_rpc_proto protoreflect.FileDescriptor\n\nvar file_rpc_rpc_proto_rawDesc = []byte{\n\t0x0a, 0x0d, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,\n\t0x67, 0x0a, 0x15, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x72,\n\t0x76, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72,\n\t0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65,\n\t0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,\n\t0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x03, 0x20,\n\t0x01, 0x28, 0x05, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x66, 0x64, 0x18, 0x04,\n\t0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x66, 0x64, 0x22, 0x3c, 0x0a, 0x0e, 0x63, 0x72, 0x69, 0x75,\n\t0x5f, 0x76, 0x65, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x12, 0x13, 0x0a, 0x05, 0x69, 0x66,\n\t0x5f, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x04, 0x69, 0x66, 0x49, 0x6e, 0x12,\n\t0x15, 0x0a, 0x06, 0x69, 0x66, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x02, 0x28, 0x09, 0x52,\n\t0x05, 0x69, 0x66, 0x4f, 0x75, 0x74, 0x22, 0x33, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x5f, 0x6d, 0x6f,\n\t0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,\n\t0x20, 0x02, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c,\n\t0x18, 0x02, 0x20, 0x02, 0x28, 0x09, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x56, 0x0a, 0x0e, 0x6a,\n\t0x6f, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a,\n\t0x02, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x02, 0x6e, 0x73, 0x12, 0x17, 0x0a,\n\t0x07, 0x6e, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x09, 0x52, 0x06,\n\t0x6e, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f,\n\t0x6f, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x74, 0x72, 0x61,\n\t0x4f, 0x70, 0x74, 0x22, 0x2e, 0x0a, 0x0a, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x5f, 0x66,\n\t0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x03,\n\t0x6b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x66, 0x64, 0x18, 0x02, 0x20, 0x02, 0x28, 0x05, 0x52,\n\t0x02, 0x66, 0x64, 0x22, 0x35, 0x0a, 0x0b, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x72, 0x6f,\n\t0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x74, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x04, 0x63, 0x74, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02,\n\t0x20, 0x02, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x1f, 0x0a, 0x07, 0x75, 0x6e,\n\t0x69, 0x78, 0x5f, 0x73, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01,\n\t0x20, 0x02, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0xe4, 0x13, 0x0a, 0x09,\n\t0x63, 0x72, 0x69, 0x75, 0x5f, 0x6f, 0x70, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0d, 0x69, 0x6d, 0x61,\n\t0x67, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x5f, 0x66, 0x64, 0x18, 0x01, 0x20, 0x02, 0x28, 0x05,\n\t0x3a, 0x02, 0x2d, 0x31, 0x52, 0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x72, 0x46,\n\t0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x18,\n\t0x44, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x72,\n\t0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x70,\n\t0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x6e,\n\t0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6c, 0x65, 0x61, 0x76, 0x65,\n\t0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x0b, 0x65, 0x78, 0x74, 0x5f, 0x75,\n\t0x6e, 0x69, 0x78, 0x5f, 0x73, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x65, 0x78,\n\t0x74, 0x55, 0x6e, 0x69, 0x78, 0x53, 0x6b, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x63, 0x70, 0x5f, 0x65,\n\t0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08,\n\t0x52, 0x0e, 0x74, 0x63, 0x70, 0x45, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64,\n\t0x12, 0x27, 0x0a, 0x0f, 0x65, 0x76, 0x61, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x76, 0x69,\n\t0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x65, 0x76, 0x61, 0x73, 0x69,\n\t0x76, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x68, 0x65,\n\t0x6c, 0x6c, 0x5f, 0x6a, 0x6f, 0x62, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x68,\n\t0x65, 0x6c, 0x6c, 0x4a, 0x6f, 0x62, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6c,\n\t0x6f, 0x63, 0x6b, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65,\n\t0x4c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x1e, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76,\n\t0x65, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x01, 0x32, 0x52, 0x08, 0x6c, 0x6f, 0x67,\n\t0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x67, 0x5f, 0x66, 0x69, 0x6c,\n\t0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65,\n\t0x12, 0x26, 0x0a, 0x02, 0x70, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63,\n\t0x72, 0x69, 0x75, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f,\n\t0x69, 0x6e, 0x66, 0x6f, 0x52, 0x02, 0x70, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x69,\n\t0x66, 0x79, 0x5f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08,\n\t0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x12,\n\t0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72,\n\t0x6f, 0x6f, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6d,\n\t0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49,\n\t0x6d, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x5f, 0x6d, 0x65, 0x6d, 0x18,\n\t0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x4d, 0x65, 0x6d, 0x12,\n\t0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x64, 0x65, 0x64, 0x75, 0x70, 0x18, 0x10, 0x20,\n\t0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x44, 0x65, 0x64, 0x75, 0x70, 0x12, 0x1e,\n\t0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x64, 0x69, 0x72, 0x5f, 0x66, 0x64, 0x18, 0x11, 0x20,\n\t0x01, 0x28, 0x05, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x69, 0x72, 0x46, 0x64, 0x12, 0x1d,\n\t0x0a, 0x0a, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x72, 0x65, 0x6d, 0x61, 0x70, 0x18, 0x12, 0x20, 0x01,\n\t0x28, 0x08, 0x52, 0x09, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x65, 0x6d, 0x61, 0x70, 0x12, 0x25, 0x0a,\n\t0x05, 0x76, 0x65, 0x74, 0x68, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63,\n\t0x72, 0x69, 0x75, 0x5f, 0x76, 0x65, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x52, 0x05, 0x76,\n\t0x65, 0x74, 0x68, 0x73, 0x12, 0x23, 0x0a, 0x07, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x61, 0x70, 0x18,\n\t0x14, 0x20, 0x01, 0x28, 0x0d, 0x3a, 0x0a, 0x34, 0x32, 0x39, 0x34, 0x39, 0x36, 0x37, 0x32, 0x39,\n\t0x35, 0x52, 0x06, 0x63, 0x70, 0x75, 0x43, 0x61, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x6f, 0x72,\n\t0x63, 0x65, 0x5f, 0x69, 0x72, 0x6d, 0x61, 0x70, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a,\n\t0x66, 0x6f, 0x72, 0x63, 0x65, 0x49, 0x72, 0x6d, 0x61, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x78,\n\t0x65, 0x63, 0x5f, 0x63, 0x6d, 0x64, 0x18, 0x16, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78,\n\t0x65, 0x63, 0x43, 0x6d, 0x64, 0x12, 0x27, 0x0a, 0x07, 0x65, 0x78, 0x74, 0x5f, 0x6d, 0x6e, 0x74,\n\t0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x78, 0x74, 0x5f, 0x6d, 0x6f, 0x75,\n\t0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x52, 0x06, 0x65, 0x78, 0x74, 0x4d, 0x6e, 0x74, 0x12, 0x25,\n\t0x0a, 0x0e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73,\n\t0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x43, 0x67,\n\t0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x25, 0x0a, 0x07, 0x63, 0x67, 0x5f, 0x72, 0x6f, 0x6f, 0x74,\n\t0x18, 0x19, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f,\n\t0x72, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x63, 0x67, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x1f, 0x0a, 0x0b,\n\t0x72, 0x73, 0x74, 0x5f, 0x73, 0x69, 0x62, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x1a, 0x20, 0x01, 0x28,\n\t0x08, 0x52, 0x0a, 0x72, 0x73, 0x74, 0x53, 0x69, 0x62, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x2a, 0x0a,\n\t0x0a, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x5f, 0x66, 0x64, 0x18, 0x1b, 0x20, 0x03, 0x28,\n\t0x0b, 0x32, 0x0b, 0x2e, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x5f, 0x66, 0x64, 0x52, 0x09,\n\t0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x46, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x61, 0x75, 0x74,\n\t0x6f, 0x5f, 0x65, 0x78, 0x74, 0x5f, 0x6d, 0x6e, 0x74, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52,\n\t0x0a, 0x61, 0x75, 0x74, 0x6f, 0x45, 0x78, 0x74, 0x4d, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x65,\n\t0x78, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x08,\n\t0x52, 0x0a, 0x65, 0x78, 0x74, 0x53, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b,\n\t0x65, 0x78, 0x74, 0x5f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28,\n\t0x08, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a,\n\t0x08, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x6d, 0x6e, 0x74, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x09, 0x52,\n\t0x07, 0x73, 0x6b, 0x69, 0x70, 0x4d, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x61, 0x62,\n\t0x6c, 0x65, 0x5f, 0x66, 0x73, 0x18, 0x20, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x61,\n\t0x62, 0x6c, 0x65, 0x46, 0x73, 0x12, 0x28, 0x0a, 0x0b, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x73, 0x6b,\n\t0x5f, 0x69, 0x6e, 0x6f, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x75, 0x6e, 0x69,\n\t0x78, 0x5f, 0x73, 0x6b, 0x52, 0x09, 0x75, 0x6e, 0x69, 0x78, 0x53, 0x6b, 0x49, 0x6e, 0x6f, 0x12,\n\t0x3d, 0x0a, 0x13, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70,\n\t0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x63,\n\t0x72, 0x69, 0x75, 0x5f, 0x63, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x52, 0x11, 0x6d, 0x61, 0x6e,\n\t0x61, 0x67, 0x65, 0x43, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x28,\n\t0x0a, 0x0b, 0x67, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x23, 0x20,\n\t0x01, 0x28, 0x0d, 0x3a, 0x07, 0x31, 0x30, 0x34, 0x38, 0x35, 0x37, 0x36, 0x52, 0x0a, 0x67, 0x68,\n\t0x6f, 0x73, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x72, 0x6d, 0x61,\n\t0x70, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x24, 0x20, 0x03,\n\t0x28, 0x09, 0x52, 0x0e, 0x69, 0x72, 0x6d, 0x61, 0x70, 0x53, 0x63, 0x61, 0x6e, 0x50, 0x61, 0x74,\n\t0x68, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x25,\n\t0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x19,\n\t0x0a, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x6e, 0x73, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0d,\n\t0x52, 0x07, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x4e, 0x73, 0x12, 0x28, 0x0a, 0x07, 0x6a, 0x6f, 0x69,\n\t0x6e, 0x5f, 0x6e, 0x73, 0x18, 0x27, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6a, 0x6f, 0x69,\n\t0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x06, 0x6a, 0x6f, 0x69,\n\t0x6e, 0x4e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x70, 0x72,\n\t0x6f, 0x70, 0x73, 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x67, 0x72, 0x6f, 0x75,\n\t0x70, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70,\n\t0x5f, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28,\n\t0x09, 0x52, 0x0f, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x46, 0x69,\n\t0x6c, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x64, 0x75, 0x6d,\n\t0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x2b, 0x20, 0x03,\n\t0x28, 0x09, 0x52, 0x14, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x75, 0x6d, 0x70, 0x43, 0x6f,\n\t0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x65, 0x65,\n\t0x7a, 0x65, 0x5f, 0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x52,\n\t0x0c, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x43, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a,\n\t0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07,\n\t0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x2b, 0x0a, 0x12, 0x74, 0x63, 0x70, 0x5f, 0x73,\n\t0x6b, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x5f, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x18, 0x2e, 0x20,\n\t0x01, 0x28, 0x08, 0x52, 0x0f, 0x74, 0x63, 0x70, 0x53, 0x6b, 0x69, 0x70, 0x49, 0x6e, 0x46, 0x6c,\n\t0x69, 0x67, 0x68, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x65, 0x61, 0x6b, 0x5f, 0x73, 0x79, 0x73,\n\t0x63, 0x74, 0x6c, 0x73, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x77, 0x65, 0x61, 0x6b,\n\t0x53, 0x79, 0x73, 0x63, 0x74, 0x6c, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x61, 0x7a, 0x79, 0x5f,\n\t0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x30, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6c, 0x61, 0x7a,\n\t0x79, 0x50, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,\n\t0x5f, 0x66, 0x64, 0x18, 0x31, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75,\n\t0x73, 0x46, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x5f, 0x70, 0x74,\n\t0x73, 0x5f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x18, 0x32, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f,\n\t0x6f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x50, 0x74, 0x73, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x12,\n\t0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x33,\n\t0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x46, 0x69, 0x6c, 0x65,\n\t0x12, 0x1b, 0x0a, 0x09, 0x74, 0x63, 0x70, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x34, 0x20,\n\t0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x63, 0x70, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x1f, 0x0a,\n\t0x0b, 0x6c, 0x73, 0x6d, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x35, 0x20, 0x01,\n\t0x28, 0x09, 0x52, 0x0a, 0x6c, 0x73, 0x6d, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1d,\n\t0x0a, 0x0a, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x61, 0x63, 0x65, 0x72, 0x74, 0x18, 0x36, 0x20, 0x01,\n\t0x28, 0x09, 0x52, 0x09, 0x74, 0x6c, 0x73, 0x43, 0x61, 0x63, 0x65, 0x72, 0x74, 0x12, 0x1b, 0x0a,\n\t0x09, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x61, 0x63, 0x72, 0x6c, 0x18, 0x37, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x08, 0x74, 0x6c, 0x73, 0x43, 0x61, 0x63, 0x72, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6c,\n\t0x73, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, 0x38, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x6c,\n\t0x73, 0x43, 0x65, 0x72, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6c, 0x73, 0x5f, 0x6b, 0x65, 0x79,\n\t0x18, 0x39, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6c, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x10,\n\t0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x74, 0x6c, 0x73,\n\t0x12, 0x27, 0x0a, 0x10, 0x74, 0x6c, 0x73, 0x5f, 0x6e, 0x6f, 0x5f, 0x63, 0x6e, 0x5f, 0x76, 0x65,\n\t0x72, 0x69, 0x66, 0x79, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x74, 0x6c, 0x73, 0x4e,\n\t0x6f, 0x43, 0x6e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x67, 0x72,\n\t0x6f, 0x75, 0x70, 0x5f, 0x79, 0x61, 0x72, 0x64, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,\n\t0x63, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x59, 0x61, 0x72, 0x64, 0x12, 0x3f, 0x0a, 0x0d, 0x70, 0x72,\n\t0x65, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x3d, 0x20, 0x01, 0x28,\n\t0x0e, 0x32, 0x13, 0x2e, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x70, 0x72, 0x65, 0x5f, 0x64, 0x75, 0x6d,\n\t0x70, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x3a, 0x06, 0x53, 0x50, 0x4c, 0x49, 0x43, 0x45, 0x52, 0x0b,\n\t0x70, 0x72, 0x65, 0x44, 0x75, 0x6d, 0x70, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x70,\n\t0x69, 0x64, 0x66, 0x64, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x6b, 0x18, 0x3e, 0x20,\n\t0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x69, 0x64, 0x66, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53,\n\t0x6b, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x73, 0x6d, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x63,\n\t0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x73,\n\t0x6d, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x46, 0x0a,\n\t0x0c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x40, 0x20,\n\t0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f,\n\t0x72, 0x6b, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3a, 0x08,\n\t0x49, 0x50, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x52, 0x0b, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,\n\t0x6b, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x6e, 0x74, 0x6e, 0x73, 0x5f, 0x63,\n\t0x6f, 0x6d, 0x70, 0x61, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x41, 0x20, 0x01, 0x28, 0x08,\n\t0x52, 0x0f, 0x6d, 0x6e, 0x74, 0x6e, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x4d, 0x6f, 0x64,\n\t0x65, 0x12, 0x2d, 0x0a, 0x13, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x72,\n\t0x77, 0x78, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x42, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10,\n\t0x73, 0x6b, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x77, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b,\n\t0x12, 0x22, 0x0a, 0x0c, 0x75, 0x6e, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64,\n\t0x18, 0x43, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x75, 0x6e, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c,\n\t0x65, 0x67, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x5f, 0x73, 0x74,\n\t0x6f, 0x70, 0x70, 0x65, 0x64, 0x18, 0x45, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6c, 0x65, 0x61,\n\t0x76, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x69, 0x73,\n\t0x70, 0x6c, 0x61, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x46, 0x20, 0x01, 0x28, 0x08,\n\t0x52, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x22,\n\t0x0a, 0x0d, 0x6c, 0x6f, 0x67, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18,\n\t0x47, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6c, 0x6f, 0x67, 0x54, 0x6f, 0x53, 0x74, 0x64, 0x65,\n\t0x72, 0x72, 0x22, 0x2c, 0x0a, 0x0e, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f,\n\t0x72, 0x65, 0x73, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64,\n\t0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64,\n\t0x22, 0x25, 0x0a, 0x11, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65,\n\t0x5f, 0x72, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x02,\n\t0x28, 0x05, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x37, 0x0a, 0x0b, 0x63, 0x72, 0x69, 0x75, 0x5f,\n\t0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,\n\t0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x10,\n\t0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x70, 0x69, 0x64,\n\t0x22, 0x6c, 0x0a, 0x0d, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65,\n\t0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x01,\n\t0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x1d,\n\t0x0a, 0x0a, 0x6c, 0x61, 0x7a, 0x79, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01,\n\t0x28, 0x08, 0x52, 0x09, 0x6c, 0x61, 0x7a, 0x79, 0x50, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1f, 0x0a,\n\t0x0b, 0x70, 0x69, 0x64, 0x66, 0x64, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01,\n\t0x28, 0x08, 0x52, 0x0a, 0x70, 0x69, 0x64, 0x66, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, 0xd0,\n\t0x01, 0x0a, 0x08, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x72, 0x65, 0x71, 0x12, 0x22, 0x0a, 0x04, 0x74,\n\t0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x72, 0x69, 0x75,\n\t0x5f, 0x72, 0x65, 0x71, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12,\n\t0x1e, 0x0a, 0x04, 0x6f, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e,\n\t0x63, 0x72, 0x69, 0x75, 0x5f, 0x6f, 0x70, 0x74, 0x73, 0x52, 0x04, 0x6f, 0x70, 0x74, 0x73, 0x12,\n\t0x25, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73,\n\t0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x53,\n\t0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x6f,\n\t0x70, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6b, 0x65, 0x65, 0x70, 0x4f,\n\t0x70, 0x65, 0x6e, 0x12, 0x2a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18,\n\t0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x66, 0x65, 0x61,\n\t0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12,\n\t0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69,\n\t0x64, 0x22, 0x8f, 0x03, 0x0a, 0x09, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x12,\n\t0x22, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0e, 0x32, 0x0e, 0x2e,\n\t0x63, 0x72, 0x69, 0x75, 0x5f, 0x72, 0x65, 0x71, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74,\n\t0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02,\n\t0x20, 0x02, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a,\n\t0x04, 0x64, 0x75, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x72,\n\t0x69, 0x75, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x52, 0x04, 0x64, 0x75,\n\t0x6d, 0x70, 0x12, 0x2c, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20,\n\t0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x72, 0x65, 0x73, 0x74, 0x6f,\n\t0x72, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x52, 0x07, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65,\n\t0x12, 0x24, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,\n\t0x32, 0x0c, 0x2e, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x52, 0x06,\n\t0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x12, 0x26, 0x0a, 0x02, 0x70, 0x73, 0x18, 0x06, 0x20, 0x01,\n\t0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73,\n\t0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x52, 0x02, 0x70, 0x73, 0x12, 0x19,\n\t0x0a, 0x08, 0x63, 0x72, 0x5f, 0x65, 0x72, 0x72, 0x6e, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05,\n\t0x52, 0x07, 0x63, 0x72, 0x45, 0x72, 0x72, 0x6e, 0x6f, 0x12, 0x2a, 0x0a, 0x08, 0x66, 0x65, 0x61,\n\t0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x72,\n\t0x69, 0x75, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61,\n\t0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x72, 0x5f, 0x65, 0x72, 0x72, 0x6d,\n\t0x73, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x72, 0x45, 0x72, 0x72, 0x6d,\n\t0x73, 0x67, 0x12, 0x27, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20,\n\t0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69,\n\t0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73,\n\t0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61,\n\t0x74, 0x75, 0x73, 0x22, 0xb0, 0x01, 0x0a, 0x0c, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x76, 0x65, 0x72,\n\t0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x6e, 0x75,\n\t0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x02, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x61, 0x6a, 0x6f,\n\t0x72, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x6f, 0x72,\n\t0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x02, 0x28, 0x05, 0x52, 0x0b, 0x6d,\n\t0x69, 0x6e, 0x6f, 0x72, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x69,\n\t0x74, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x69, 0x74, 0x69, 0x64,\n\t0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01,\n\t0x28, 0x05, 0x52, 0x08, 0x73, 0x75, 0x62, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x05,\n\t0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x65, 0x78, 0x74,\n\t0x72, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,\n\t0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x2a, 0x5f, 0x0a, 0x0c, 0x63, 0x72, 0x69, 0x75, 0x5f, 0x63,\n\t0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45,\n\t0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x47, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x12,\n\t0x09, 0x0a, 0x05, 0x50, 0x52, 0x4f, 0x50, 0x53, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x4f,\n\t0x46, 0x54, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x0a,\n\t0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x43, 0x54, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45,\n\t0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x06, 0x2a, 0x40, 0x0a, 0x18, 0x63, 0x72, 0x69, 0x75, 0x5f,\n\t0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x65, 0x74,\n\t0x68, 0x6f, 0x64, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x50, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x10,\n\t0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x46, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x10, 0x02, 0x12,\n\t0x08, 0x0a, 0x04, 0x53, 0x4b, 0x49, 0x50, 0x10, 0x03, 0x2a, 0x2d, 0x0a, 0x12, 0x63, 0x72, 0x69,\n\t0x75, 0x5f, 0x70, 0x72, 0x65, 0x5f, 0x64, 0x75, 0x6d, 0x70, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x12,\n\t0x0a, 0x0a, 0x06, 0x53, 0x50, 0x4c, 0x49, 0x43, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x56,\n\t0x4d, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x02, 0x2a, 0xe5, 0x01, 0x0a, 0x0d, 0x63, 0x72, 0x69,\n\t0x75, 0x5f, 0x72, 0x65, 0x71, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d,\n\t0x50, 0x54, 0x59, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x55, 0x4d, 0x50, 0x10, 0x01, 0x12,\n\t0x0b, 0x0a, 0x07, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05,\n\t0x43, 0x48, 0x45, 0x43, 0x4b, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x52, 0x45, 0x5f, 0x44,\n\t0x55, 0x4d, 0x50, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x45,\n\t0x52, 0x56, 0x45, 0x52, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x59,\n\t0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x50, 0x55, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x44, 0x55,\n\t0x4d, 0x50, 0x10, 0x07, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x50, 0x55, 0x49, 0x4e, 0x46, 0x4f, 0x5f,\n\t0x43, 0x48, 0x45, 0x43, 0x4b, 0x10, 0x08, 0x12, 0x11, 0x0a, 0x0d, 0x46, 0x45, 0x41, 0x54, 0x55,\n\t0x52, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x10, 0x09, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x45,\n\t0x52, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x41, 0x49, 0x54, 0x5f,\n\t0x50, 0x49, 0x44, 0x10, 0x0b, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x45,\n\t0x52, 0x56, 0x45, 0x52, 0x5f, 0x43, 0x48, 0x4c, 0x44, 0x10, 0x0c, 0x12, 0x13, 0x0a, 0x0f, 0x53,\n\t0x49, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x5f, 0x44, 0x55, 0x4d, 0x50, 0x10, 0x0d,\n}\n\nvar (\n\tfile_rpc_rpc_proto_rawDescOnce sync.Once\n\tfile_rpc_rpc_proto_rawDescData = file_rpc_rpc_proto_rawDesc\n)\n\nfunc file_rpc_rpc_proto_rawDescGZIP() []byte {\n\tfile_rpc_rpc_proto_rawDescOnce.Do(func() {\n\t\tfile_rpc_rpc_proto_rawDescData = protoimpl.X.CompressGZIP(file_rpc_rpc_proto_rawDescData)\n\t})\n\treturn file_rpc_rpc_proto_rawDescData\n}\n\nvar file_rpc_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 4)\nvar file_rpc_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 15)\nvar file_rpc_rpc_proto_goTypes = []interface{}{\n\t(CriuCgMode)(0),            // 0: criu_cg_mode\n\t(CriuNetworkLockMethod)(0), // 1: criu_network_lock_method\n\t(CriuPreDumpMode)(0),       // 2: criu_pre_dump_mode\n\t(CriuReqType)(0),           // 3: criu_req_type\n\t(*CriuPageServerInfo)(nil), // 4: criu_page_server_info\n\t(*CriuVethPair)(nil),       // 5: criu_veth_pair\n\t(*ExtMountMap)(nil),        // 6: ext_mount_map\n\t(*JoinNamespace)(nil),      // 7: join_namespace\n\t(*InheritFd)(nil),          // 8: inherit_fd\n\t(*CgroupRoot)(nil),         // 9: cgroup_root\n\t(*UnixSk)(nil),             // 10: unix_sk\n\t(*CriuOpts)(nil),           // 11: criu_opts\n\t(*CriuDumpResp)(nil),       // 12: criu_dump_resp\n\t(*CriuRestoreResp)(nil),    // 13: criu_restore_resp\n\t(*CriuNotify)(nil),         // 14: criu_notify\n\t(*CriuFeatures)(nil),       // 15: criu_features\n\t(*CriuReq)(nil),            // 16: criu_req\n\t(*CriuResp)(nil),           // 17: criu_resp\n\t(*CriuVersion)(nil),        // 18: criu_version\n}\nvar file_rpc_rpc_proto_depIdxs = []int32{\n\t4,  // 0: criu_opts.ps:type_name -> criu_page_server_info\n\t5,  // 1: criu_opts.veths:type_name -> criu_veth_pair\n\t6,  // 2: criu_opts.ext_mnt:type_name -> ext_mount_map\n\t9,  // 3: criu_opts.cg_root:type_name -> cgroup_root\n\t8,  // 4: criu_opts.inherit_fd:type_name -> inherit_fd\n\t10, // 5: criu_opts.unix_sk_ino:type_name -> unix_sk\n\t0,  // 6: criu_opts.manage_cgroups_mode:type_name -> criu_cg_mode\n\t7,  // 7: criu_opts.join_ns:type_name -> join_namespace\n\t2,  // 8: criu_opts.pre_dump_mode:type_name -> criu_pre_dump_mode\n\t1,  // 9: criu_opts.network_lock:type_name -> criu_network_lock_method\n\t3,  // 10: criu_req.type:type_name -> criu_req_type\n\t11, // 11: criu_req.opts:type_name -> criu_opts\n\t15, // 12: criu_req.features:type_name -> criu_features\n\t3,  // 13: criu_resp.type:type_name -> criu_req_type\n\t12, // 14: criu_resp.dump:type_name -> criu_dump_resp\n\t13, // 15: criu_resp.restore:type_name -> criu_restore_resp\n\t14, // 16: criu_resp.notify:type_name -> criu_notify\n\t4,  // 17: criu_resp.ps:type_name -> criu_page_server_info\n\t15, // 18: criu_resp.features:type_name -> criu_features\n\t18, // 19: criu_resp.version:type_name -> criu_version\n\t20, // [20:20] is the sub-list for method output_type\n\t20, // [20:20] is the sub-list for method input_type\n\t20, // [20:20] is the sub-list for extension type_name\n\t20, // [20:20] is the sub-list for extension extendee\n\t0,  // [0:20] is the sub-list for field type_name\n}\n\nfunc init() { file_rpc_rpc_proto_init() }\nfunc file_rpc_rpc_proto_init() {\n\tif File_rpc_rpc_proto != nil {\n\t\treturn\n\t}\n\tif !protoimpl.UnsafeEnabled {\n\t\tfile_rpc_rpc_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*CriuPageServerInfo); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tfile_rpc_rpc_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*CriuVethPair); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tfile_rpc_rpc_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*ExtMountMap); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tfile_rpc_rpc_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*JoinNamespace); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tfile_rpc_rpc_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*InheritFd); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tfile_rpc_rpc_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*CgroupRoot); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tfile_rpc_rpc_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*UnixSk); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tfile_rpc_rpc_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*CriuOpts); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tfile_rpc_rpc_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*CriuDumpResp); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tfile_rpc_rpc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*CriuRestoreResp); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tfile_rpc_rpc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*CriuNotify); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tfile_rpc_rpc_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*CriuFeatures); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tfile_rpc_rpc_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*CriuReq); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tfile_rpc_rpc_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*CriuResp); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tfile_rpc_rpc_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {\n\t\t\tswitch v := v.(*CriuVersion); i {\n\t\t\tcase 0:\n\t\t\t\treturn &v.state\n\t\t\tcase 1:\n\t\t\t\treturn &v.sizeCache\n\t\t\tcase 2:\n\t\t\t\treturn &v.unknownFields\n\t\t\tdefault:\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t}\n\ttype x struct{}\n\tout := protoimpl.TypeBuilder{\n\t\tFile: protoimpl.DescBuilder{\n\t\t\tGoPackagePath: reflect.TypeOf(x{}).PkgPath(),\n\t\t\tRawDescriptor: file_rpc_rpc_proto_rawDesc,\n\t\t\tNumEnums:      4,\n\t\t\tNumMessages:   15,\n\t\t\tNumExtensions: 0,\n\t\t\tNumServices:   0,\n\t\t},\n\t\tGoTypes:           file_rpc_rpc_proto_goTypes,\n\t\tDependencyIndexes: file_rpc_rpc_proto_depIdxs,\n\t\tEnumInfos:         file_rpc_rpc_proto_enumTypes,\n\t\tMessageInfos:      file_rpc_rpc_proto_msgTypes,\n\t}.Build()\n\tFile_rpc_rpc_proto = out.File\n\tfile_rpc_rpc_proto_rawDesc = nil\n\tfile_rpc_rpc_proto_goTypes = nil\n\tfile_rpc_rpc_proto_depIdxs = nil\n}\n"
  },
  {
    "path": "vendor/github.com/checkpoint-restore/go-criu/v7/rpc/rpc.proto",
    "content": "// SPDX-License-Identifier: MIT\n\nsyntax = \"proto2\";\n\nmessage criu_page_server_info {\n\toptional string\t\taddress\t= 1;\n\toptional int32\t\tport\t= 2;\n\toptional int32\t\tpid\t= 3;\n\toptional int32\t\tfd\t= 4;\n}\n\nmessage criu_veth_pair {\n\trequired string\t\tif_in\t= 1;\n\trequired string\t\tif_out\t= 2;\n};\n\nmessage ext_mount_map {\n\trequired string\t\tkey\t= 1;\n\trequired string\t\tval\t= 2;\n};\n\nmessage join_namespace {\n\trequired string\t\tns\t\t= 1;\n\trequired string\t\tns_file\t\t= 2;\n\toptional string\t\textra_opt\t= 3;\n}\n\nmessage inherit_fd {\n\trequired string\t\tkey\t= 1;\n\trequired int32\t\tfd\t= 2;\n};\n\nmessage cgroup_root {\n\toptional string\t\tctrl\t= 1;\n\trequired string\t\tpath\t= 2;\n};\n\nmessage unix_sk {\n\trequired uint32\t\tinode \t= 1;\n};\n\nenum criu_cg_mode {\n\tIGNORE\t= 0;\n\tCG_NONE\t= 1;\n\tPROPS\t= 2;\n\tSOFT\t= 3;\n\tFULL\t= 4;\n\tSTRICT\t= 5;\n\tDEFAULT = 6;\n};\n\nenum criu_network_lock_method {\n\tIPTABLES = \t1;\n\tNFTABLES = \t2;\n\tSKIP =  \t3;\n};\n\nenum criu_pre_dump_mode {\n\tSPLICE = \t1;\n\tVM_READ =\t2;\n};\n\nmessage criu_opts {\n\trequired int32\t\t\timages_dir_fd\t= 1 [default = -1];\n\toptional string\t\t\timages_dir\t= 68; /* used only if images_dir_fd == -1 */\n\toptional int32\t\t\tpid\t\t= 2; /* if not set on dump, will dump requesting process */\n\n\toptional bool\t\t\tleave_running\t= 3;\n\toptional bool\t\t\text_unix_sk\t= 4;\n\toptional bool\t\t\ttcp_established\t= 5;\n\toptional bool\t\t\tevasive_devices\t= 6;\n\toptional bool\t\t\tshell_job\t= 7;\n\toptional bool\t\t\tfile_locks\t= 8;\n\toptional int32\t\t\tlog_level\t= 9 [default = 2];\n\toptional string\t\t\tlog_file\t= 10; /* No subdirs are allowed. Consider using work-dir */\n\n\toptional criu_page_server_info\tps\t\t= 11;\n\n\toptional bool\t\t\tnotify_scripts\t= 12;\n\n\toptional string\t\t\troot\t\t= 13;\n\toptional string\t\t\tparent_img\t= 14;\n\toptional bool\t\t\ttrack_mem\t= 15;\n\toptional bool\t\t\tauto_dedup\t= 16;\n\n\toptional int32\t\t\twork_dir_fd\t= 17;\n\toptional bool\t\t\tlink_remap\t= 18;\n\trepeated criu_veth_pair\t\tveths\t\t= 19; /* DEPRECATED, use external instead */\n\n\toptional uint32\t\t\tcpu_cap\t\t= 20 [default = 0xffffffff];\n\toptional bool\t\t\tforce_irmap\t= 21;\n\trepeated string\t\t\texec_cmd\t= 22;\n\n\trepeated ext_mount_map\t\text_mnt\t\t= 23; /* DEPRECATED, use external instead */\n\toptional bool\t\t\tmanage_cgroups\t= 24; /* backward compatibility */\n\trepeated cgroup_root\t\tcg_root\t\t= 25;\n\n\toptional bool\t\t\trst_sibling\t= 26; /* swrk only */\n\trepeated inherit_fd\t\tinherit_fd\t= 27; /* swrk only */\n\n\toptional bool\t\t\tauto_ext_mnt\t= 28;\n\toptional bool\t\t\text_sharing \t= 29;\n\toptional bool\t\t\text_masters\t= 30;\n\n\trepeated string\t\t\tskip_mnt\t= 31;\n\trepeated string\t\t\tenable_fs\t= 32;\n\n\trepeated unix_sk                unix_sk_ino     = 33; /* DEPRECATED, use external instead */\n\n\toptional criu_cg_mode\t\tmanage_cgroups_mode = 34;\n\toptional uint32\t\t\tghost_limit\t= 35 [default = 0x100000];\n\trepeated string\t\t\tirmap_scan_paths = 36;\n\trepeated string\t\t\texternal\t= 37;\n\toptional uint32\t\t\tempty_ns\t= 38;\n\trepeated join_namespace\t\tjoin_ns\t\t= 39;\n\n\toptional string\t\t\tcgroup_props\t\t= 41;\n\toptional string\t\t\tcgroup_props_file\t= 42;\n\trepeated string\t\t\tcgroup_dump_controller\t= 43;\n\n\toptional string\t\t\tfreeze_cgroup\t\t= 44;\n\toptional uint32\t\t\ttimeout\t\t\t= 45;\n\toptional bool\t\t\ttcp_skip_in_flight\t= 46;\n\toptional bool\t\t\tweak_sysctls\t\t= 47;\n\toptional bool\t\t\tlazy_pages\t\t= 48;\n\toptional int32\t\t\tstatus_fd\t\t= 49;\n\toptional bool\t\t\torphan_pts_master\t= 50;\n\toptional string\t\t\tconfig_file\t\t= 51;\n\toptional bool\t\t\ttcp_close\t\t= 52;\n\toptional string\t\t\tlsm_profile\t\t= 53;\n\toptional string\t\t\ttls_cacert\t\t= 54;\n\toptional string\t\t\ttls_cacrl\t\t= 55;\n\toptional string\t\t\ttls_cert\t\t= 56;\n\toptional string\t\t\ttls_key\t\t\t= 57;\n\toptional bool\t\t\ttls\t\t\t= 58;\n\toptional bool\t\t\ttls_no_cn_verify\t= 59;\n\toptional string\t\t\tcgroup_yard\t\t= 60;\n\toptional criu_pre_dump_mode\tpre_dump_mode\t\t= 61 [default = SPLICE];\n\toptional int32\t\t\tpidfd_store_sk\t\t= 62;\n\toptional string\t\t\tlsm_mount_context\t= 63;\n\toptional criu_network_lock_method\tnetwork_lock\t\t= 64 [default = IPTABLES];\n\toptional bool\t\t\tmntns_compat_mode\t= 65;\n\toptional bool\t\t\tskip_file_rwx_check\t= 66;\n\toptional bool\t\t\tunprivileged\t\t= 67;\n\toptional bool\t\t\tleave_stopped\t\t= 69;\n\toptional bool\t\t\tdisplay_stats\t\t= 70;\n\toptional bool\t\t\tlog_to_stderr\t\t= 71;\n/*\toptional bool\t\t\tcheck_mounts\t\t= 128;\t*/\n}\n\nmessage criu_dump_resp {\n\toptional bool restored\t\t= 1;\n}\n\nmessage criu_restore_resp {\n\trequired int32 pid\t\t= 1;\n}\n\nmessage criu_notify {\n\toptional string script\t\t= 1;\n\toptional int32\tpid\t\t= 2;\n}\n\nenum criu_req_type {\n\tEMPTY\t\t= 0;\n\tDUMP\t\t= 1;\n\tRESTORE\t\t= 2;\n\tCHECK\t\t= 3;\n\tPRE_DUMP\t= 4;\n\tPAGE_SERVER\t= 5;\n\n\tNOTIFY\t\t= 6;\n\n\tCPUINFO_DUMP\t= 7;\n\tCPUINFO_CHECK\t= 8;\n\n\tFEATURE_CHECK\t= 9;\n\n\tVERSION\t\t= 10;\n\n\tWAIT_PID\t= 11;\n\tPAGE_SERVER_CHLD = 12;\n\n\tSINGLE_PRE_DUMP = 13;\n}\n\n/*\n * List of features which can queried via\n * CRIU_REQ_TYPE__FEATURE_CHECK\n */\nmessage criu_features {\n\toptional bool\t\t\tmem_track\t= 1;\n\toptional bool\t\t\tlazy_pages\t= 2;\n\toptional bool\t\t\tpidfd_store\t= 3;\n}\n\n/*\n * Request -- each type corresponds to must-be-there\n * request arguments of respective type\n */\n\nmessage criu_req {\n\trequired criu_req_type\t\ttype\t\t= 1;\n\n\toptional criu_opts\t\topts\t\t= 2;\n\toptional bool\t\t\tnotify_success\t= 3;\n\n\t/*\n\t * When set service won't close the connection but\n\t * will wait for more req-s to appear. Works not\n\t * for all request types.\n\t */\n\toptional bool\t\t\tkeep_open\t= 4;\n\t/*\n\t * 'features' can be used to query which features\n\t * are supported by the installed criu/kernel\n\t * via RPC.\n\t */\n\toptional criu_features\t\tfeatures\t= 5;\n\n\t/* 'pid' is used for WAIT_PID */\n\toptional uint32\t\t\tpid\t\t= 6;\n}\n\n/*\n * Response -- it states whether the request was served\n * and additional request-specific information\n */\n\nmessage criu_resp {\n\trequired criu_req_type\t\ttype\t\t= 1;\n\trequired bool\t\t\tsuccess\t\t= 2;\n\n\toptional criu_dump_resp\t\tdump\t\t= 3;\n\toptional criu_restore_resp\trestore\t\t= 4;\n\toptional criu_notify\t\tnotify\t\t= 5;\n\toptional criu_page_server_info\tps\t\t= 6;\n\n\toptional int32\t\t\tcr_errno\t= 7;\n\toptional criu_features\t\tfeatures\t= 8;\n\toptional string\t\t\tcr_errmsg\t= 9;\n\toptional criu_version\t\tversion\t\t= 10;\n\n\toptional int32\t\t\tstatus\t\t= 11;\n}\n\n/* Answer for criu_req_type.VERSION requests */\nmessage criu_version {\n\trequired int32\t\t\tmajor_number\t= 1;\n\trequired int32\t\t\tminor_number\t= 2;\n\toptional string\t\t\tgitid\t\t= 3;\n\toptional int32\t\t\tsublevel\t= 4;\n\toptional int32\t\t\textra\t\t= 5;\n\toptional string\t\t\tname\t\t= 6;\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/.clang-format",
    "content": "---\nLanguage:        Cpp\nBasedOnStyle:    LLVM\nAlignAfterOpenBracket: DontAlign\nAlignConsecutiveAssignments: true\nAlignEscapedNewlines: DontAlign\n# mkdocs annotations in source code are written as trailing comments\n# and alignment pushes these really far away from the content.\nAlignTrailingComments: false\nAlwaysBreakBeforeMultilineStrings: true\nAlwaysBreakTemplateDeclarations: false\nAllowAllParametersOfDeclarationOnNextLine: false\nAllowShortFunctionsOnASingleLine: false\nBreakBeforeBraces: Attach\nIndentWidth:     4\nKeepEmptyLinesAtTheStartOfBlocks: false\nTabWidth:        4\nUseTab:          ForContinuationAndIndentation\nColumnLimit:     1000\n# Go compiler comments need to stay unindented.\nCommentPragmas: '^go:.*'\n# linux/bpf.h needs to be included before bpf/bpf_helpers.h for types like __u64\n# and sorting makes this impossible.\nSortIncludes: false\n...\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/.gitattributes",
    "content": "internal/sys/types.go linguist-generated=false\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/.gitignore",
    "content": "# Binaries for programs and plugins\n*.exe\n*.exe~\n*.dll\n*.so\n*.dylib\n*.o\n!*_bpf*.o\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/cilium/ebpf/.golangci.yaml",
    "content": "---\nlinters:\n  disable-all: true\n  enable:\n    - goimports\n    - gosimple\n    - govet\n    - ineffassign\n    - misspell\n    - staticcheck\n    - typecheck\n    - unused\n    - gofmt\n    - depguard\nlinters-settings:\n  goimports:\n    # A comma-separated list of prefixes, which, if set, checks import paths\n    # with the given prefixes are grouped after 3rd-party packages.\n    # Default: \"\"\n    local-prefixes: github.com/cilium/ebpf\n  depguard:\n    rules:\n      no-x-sys-unix:\n        files:\n          # Filenames are matched against absolute paths, include **/ at the start.\n          - '!**/internal/unix/*.go'\n          - '!**/examples/**/*.go'\n          - '!**/docs/**/*.go'\n        deny:\n          - pkg: golang.org/x/sys/unix\n            desc: use internal/unix instead\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/.vimto.toml",
    "content": "kernel=\"ghcr.io/cilium/ci-kernels:stable\"\nsmp=\"cpus=2\"\nmemory=\"1G\"\nuser=\"root\"\nsetup=[\n  \"mount -t cgroup2 -o nosuid,noexec,nodev cgroup2 /sys/fs/cgroup\",\n  \"/bin/sh -c 'modprobe bpf_testmod || true'\",\n  \"dmesg --clear\",\n]\nteardown=[\n  \"dmesg --read-clear\",\n]\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/CODEOWNERS",
    "content": "* @cilium/ebpf-lib-maintainers\n\nfeatures/ @rgo3\nlink/ @mmat11\n\nperf/ @florianl\nringbuf/ @florianl\n\nbtf/ @dylandreimerink\n\ncmd/bpf2go/ @mejedi\n\ndocs/ @ti-mo\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/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 nathanjsweet at gmail dot com or i at lmb dot io. 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/github.com/cilium/ebpf/CONTRIBUTING.md",
    "content": "# Contributing to ebpf-go\n\nWant to contribute to ebpf-go? There are a few things you need to know.\n\nWe wrote a [contribution guide](https://ebpf-go.dev/contributing/) to help you get started.\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 Nathan Sweet\nCopyright (c) 2018, 2019 Cloudflare\nCopyright (c) 2019 Authors of Cilium\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/cilium/ebpf/MAINTAINERS.md",
    "content": "# Maintainers\n\nMaintainers can be found in the [Cilium Maintainers file](https://github.com/cilium/community/blob/main/roles/Maintainers.md)\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/Makefile",
    "content": "# The development version of clang is distributed as the 'clang' binary,\n# while stable/released versions have a version number attached.\n# Pin the default clang to a stable version.\nCLANG ?= clang-17\nSTRIP ?= llvm-strip-17\nOBJCOPY ?= llvm-objcopy-17\nCFLAGS := -O2 -g -Wall -Werror $(CFLAGS)\n\nCI_KERNEL_URL ?= https://github.com/cilium/ci-kernels/raw/master/\n\n# Obtain an absolute path to the directory of the Makefile.\n# Assume the Makefile is in the root of the repository.\nREPODIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))\nUIDGID := $(shell stat -c '%u:%g' ${REPODIR})\n\n# Prefer podman if installed, otherwise use docker.\n# Note: Setting the var at runtime will always override.\nCONTAINER_ENGINE ?= $(if $(shell command -v podman), podman, docker)\nCONTAINER_RUN_ARGS ?= $(if $(filter ${CONTAINER_ENGINE}, podman), --log-driver=none, --user \"${UIDGID}\")\n\nIMAGE := $(shell cat ${REPODIR}/testdata/docker/IMAGE)\nVERSION := $(shell cat ${REPODIR}/testdata/docker/VERSION)\n\nTARGETS := \\\n\ttestdata/loader-clang-11 \\\n\ttestdata/loader-clang-14 \\\n\ttestdata/loader-$(CLANG) \\\n\ttestdata/manyprogs \\\n\ttestdata/btf_map_init \\\n\ttestdata/invalid_map \\\n\ttestdata/raw_tracepoint \\\n\ttestdata/invalid_map_static \\\n\ttestdata/invalid_btf_map_init \\\n\ttestdata/strings \\\n\ttestdata/freplace \\\n\ttestdata/fentry_fexit \\\n\ttestdata/iproute2_map_compat \\\n\ttestdata/map_spin_lock \\\n\ttestdata/subprog_reloc \\\n\ttestdata/fwd_decl \\\n\ttestdata/kconfig \\\n\ttestdata/ksym \\\n\ttestdata/kfunc \\\n\ttestdata/invalid-kfunc \\\n\ttestdata/kfunc-kmod \\\n\ttestdata/constants \\\n\ttestdata/errors \\\n\ttestdata/variables \\\n\tbtf/testdata/relocs \\\n\tbtf/testdata/relocs_read \\\n\tbtf/testdata/relocs_read_tgt \\\n\tbtf/testdata/relocs_enum \\\n\tbtf/testdata/tags \\\n\tcmd/bpf2go/testdata/minimal\n\n.PHONY: all clean container-all container-shell generate\n\n.DEFAULT_TARGET = container-all\n\n# Build all ELF binaries using a containerized LLVM toolchain.\ncontainer-all:\n\t+${CONTAINER_ENGINE} run --rm -ti ${CONTAINER_RUN_ARGS} \\\n\t\t-v \"${REPODIR}\":/ebpf -w /ebpf --env MAKEFLAGS \\\n\t\t--env HOME=\"/tmp\" \\\n\t\t--env BPF2GO_CC=\"$(CLANG)\" \\\n\t\t--env BPF2GO_FLAGS=\"-fdebug-prefix-map=/ebpf=. $(CFLAGS)\" \\\n\t\t\"${IMAGE}:${VERSION}\" \\\n\t\tmake all\n\n# (debug) Drop the user into a shell inside the container as root.\n# Set BPF2GO_ envs to make 'make generate' just work.\ncontainer-shell:\n\t${CONTAINER_ENGINE} run --rm -ti \\\n\t\t-v \"${REPODIR}\":/ebpf -w /ebpf \\\n\t\t--env BPF2GO_CC=\"$(CLANG)\" \\\n\t\t--env BPF2GO_FLAGS=\"-fdebug-prefix-map=/ebpf=. $(CFLAGS)\" \\\n\t\t\"${IMAGE}:${VERSION}\"\n\nclean:\n\tfind \"$(CURDIR)\" -name \"*.elf\" -delete\n\tfind \"$(CURDIR)\" -name \"*.o\" -delete\n\nformat:\n\tfind . -type f -name \"*.c\" | xargs clang-format -i\n\nall: format $(addsuffix -el.elf,$(TARGETS)) $(addsuffix -eb.elf,$(TARGETS)) generate\n\tln -srf testdata/loader-$(CLANG)-el.elf testdata/loader-el.elf\n\tln -srf testdata/loader-$(CLANG)-eb.elf testdata/loader-eb.elf\n\ngenerate:\n\tgo generate -run \"internal/cmd/gentypes\" ./...\n\tgo generate -skip \"internal/cmd/gentypes\" ./...\n\ntestdata/loader-%-el.elf: testdata/loader.c\n\t$* $(CFLAGS) -target bpfel -c $< -o $@\n\t$(STRIP) -g $@\n\ntestdata/loader-%-eb.elf: testdata/loader.c\n\t$* $(CFLAGS) -target bpfeb -c $< -o $@\n\t$(STRIP) -g $@\n\n%-el.elf: %.c\n\t$(CLANG) $(CFLAGS) -target bpfel -c $< -o $@\n\t$(STRIP) -g $@\n\n%-eb.elf : %.c\n\t$(CLANG) $(CFLAGS) -target bpfeb -c $< -o $@\n\t$(STRIP) -g $@\n\n.PHONY: update-kernel-deps\nupdate-kernel-deps: export KERNEL_VERSION?=6.8\nupdate-kernel-deps:\n\t./testdata/sh/update-kernel-deps.sh\n\t$(MAKE) container-all\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/README.md",
    "content": "# eBPF\n\n[![PkgGoDev](https://pkg.go.dev/badge/github.com/cilium/ebpf)](https://pkg.go.dev/github.com/cilium/ebpf)\n\n![HoneyGopher](docs/ebpf/ebpf-go.png)\n\nebpf-go is a pure Go library that provides utilities for loading, compiling, and\ndebugging eBPF programs. It has minimal external dependencies and is intended to\nbe used in long running processes.\n\nSee [ebpf.io](https://ebpf.io) for complementary projects from the wider eBPF\necosystem.\n\n## Getting Started\n\nPlease take a look at our [Getting Started] guide.\n\n[Contributions](https://ebpf-go.dev/contributing) are highly encouraged, as they highlight certain use cases of\neBPF and the library, and help shape the future of the project.\n\n## Getting Help\n\nThe community actively monitors our [GitHub Discussions](https://github.com/cilium/ebpf/discussions) page.\nPlease search for existing threads before starting a new one. Refrain from\nopening issues on the bug tracker if you're just starting out or if you're not\nsure if something is a bug in the library code.\n\nAlternatively, [join](https://ebpf.io/slack) the\n[#ebpf-go](https://cilium.slack.com/messages/ebpf-go) channel on Slack if you\nhave other questions regarding the project. Note that this channel is ephemeral\nand has its history erased past a certain point, which is less helpful for\nothers running into the same problem later.\n\n## Packages\n\nThis library includes the following packages:\n\n* [asm](https://pkg.go.dev/github.com/cilium/ebpf/asm) contains a basic\n  assembler, allowing you to write eBPF assembly instructions directly\n  within your Go code. (You don't need to use this if you prefer to write your eBPF program in C.)\n* [cmd/bpf2go](https://pkg.go.dev/github.com/cilium/ebpf/cmd/bpf2go) allows\n  compiling and embedding eBPF programs written in C within Go code. As well as\n  compiling the C code, it auto-generates Go code for loading and manipulating\n  the eBPF program and map objects.\n* [link](https://pkg.go.dev/github.com/cilium/ebpf/link) allows attaching eBPF\n  to various hooks\n* [perf](https://pkg.go.dev/github.com/cilium/ebpf/perf) allows reading from a\n  `PERF_EVENT_ARRAY`\n* [ringbuf](https://pkg.go.dev/github.com/cilium/ebpf/ringbuf) allows reading from a\n  `BPF_MAP_TYPE_RINGBUF` map\n* [features](https://pkg.go.dev/github.com/cilium/ebpf/features) implements the equivalent\n  of `bpftool feature probe` for discovering BPF-related kernel features using native Go.\n* [rlimit](https://pkg.go.dev/github.com/cilium/ebpf/rlimit) provides a convenient API to lift\n  the `RLIMIT_MEMLOCK` constraint on kernels before 5.11.\n* [btf](https://pkg.go.dev/github.com/cilium/ebpf/btf) allows reading the BPF Type Format.\n* [pin](https://pkg.go.dev/github.com/cilium/ebpf/pin) provides APIs for working with pinned objects on bpffs.\n\n## Requirements\n\n* A version of Go that is [supported by\n  upstream](https://golang.org/doc/devel/release.html#policy)\n* CI is run against kernel.org LTS releases. >= 4.4 should work but EOL'ed versions\n  are not supported.\n\n## License\n\nMIT\n\n### eBPF Gopher\n\nThe eBPF honeygopher is based on the Go gopher designed by Renee French.\n\n[Getting Started]: https://ebpf-go.dev/guides/getting-started/\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/alu.go",
    "content": "package asm\n\n//go:generate go run golang.org/x/tools/cmd/stringer@latest -output alu_string.go -type=Source,Endianness,ALUOp\n\n// Source of ALU / ALU64 / Branch operations\n//\n//\tmsb              lsb\n//\t+------------+-+---+\n//\t|     op     |S|cls|\n//\t+------------+-+---+\ntype Source uint16\n\nconst sourceMask OpCode = 0x0008\n\n// Source bitmask\nconst (\n\t// InvalidSource is returned by getters when invoked\n\t// on non ALU / branch OpCodes.\n\tInvalidSource Source = 0xffff\n\t// ImmSource src is from constant\n\tImmSource Source = 0x0000\n\t// RegSource src is from register\n\tRegSource Source = 0x0008\n)\n\n// The Endianness of a byte swap instruction.\ntype Endianness uint8\n\nconst endianMask = sourceMask\n\n// Endian flags\nconst (\n\tInvalidEndian Endianness = 0xff\n\t// Convert to little endian\n\tLE Endianness = 0x00\n\t// Convert to big endian\n\tBE Endianness = 0x08\n)\n\n// ALUOp are ALU / ALU64 operations\n//\n//\tmsb              lsb\n//\t+-------+----+-+---+\n//\t|  EXT  | OP |s|cls|\n//\t+-------+----+-+---+\ntype ALUOp uint16\n\nconst aluMask OpCode = 0x3ff0\n\nconst (\n\t// InvalidALUOp is returned by getters when invoked\n\t// on non ALU OpCodes\n\tInvalidALUOp ALUOp = 0xffff\n\t// Add - addition\n\tAdd ALUOp = 0x0000\n\t// Sub - subtraction\n\tSub ALUOp = 0x0010\n\t// Mul - multiplication\n\tMul ALUOp = 0x0020\n\t// Div - division\n\tDiv ALUOp = 0x0030\n\t// SDiv - signed division\n\tSDiv ALUOp = Div + 0x0100\n\t// Or - bitwise or\n\tOr ALUOp = 0x0040\n\t// And - bitwise and\n\tAnd ALUOp = 0x0050\n\t// LSh - bitwise shift left\n\tLSh ALUOp = 0x0060\n\t// RSh - bitwise shift right\n\tRSh ALUOp = 0x0070\n\t// Neg - sign/unsign signing bit\n\tNeg ALUOp = 0x0080\n\t// Mod - modulo\n\tMod ALUOp = 0x0090\n\t// SMod - signed modulo\n\tSMod ALUOp = Mod + 0x0100\n\t// Xor - bitwise xor\n\tXor ALUOp = 0x00a0\n\t// Mov - move value from one place to another\n\tMov ALUOp = 0x00b0\n\t// MovSX8 - move lower 8 bits, sign extended upper bits of target\n\tMovSX8 ALUOp = Mov + 0x0100\n\t// MovSX16 - move lower 16 bits, sign extended upper bits of target\n\tMovSX16 ALUOp = Mov + 0x0200\n\t// MovSX32 - move lower 32 bits, sign extended upper bits of target\n\tMovSX32 ALUOp = Mov + 0x0300\n\t// ArSh - arithmetic shift\n\tArSh ALUOp = 0x00c0\n\t// Swap - endian conversions\n\tSwap ALUOp = 0x00d0\n)\n\n// HostTo converts from host to another endianness.\nfunc HostTo(endian Endianness, dst Register, size Size) Instruction {\n\tvar imm int64\n\tswitch size {\n\tcase Half:\n\t\timm = 16\n\tcase Word:\n\t\timm = 32\n\tcase DWord:\n\t\timm = 64\n\tdefault:\n\t\treturn Instruction{OpCode: InvalidOpCode}\n\t}\n\n\treturn Instruction{\n\t\tOpCode:   OpCode(ALUClass).SetALUOp(Swap).SetSource(Source(endian)),\n\t\tDst:      dst,\n\t\tConstant: imm,\n\t}\n}\n\n// BSwap unconditionally reverses the order of bytes in a register.\nfunc BSwap(dst Register, size Size) Instruction {\n\tvar imm int64\n\tswitch size {\n\tcase Half:\n\t\timm = 16\n\tcase Word:\n\t\timm = 32\n\tcase DWord:\n\t\timm = 64\n\tdefault:\n\t\treturn Instruction{OpCode: InvalidOpCode}\n\t}\n\n\treturn Instruction{\n\t\tOpCode:   OpCode(ALU64Class).SetALUOp(Swap),\n\t\tDst:      dst,\n\t\tConstant: imm,\n\t}\n}\n\n// Op returns the OpCode for an ALU operation with a given source.\nfunc (op ALUOp) Op(source Source) OpCode {\n\treturn OpCode(ALU64Class).SetALUOp(op).SetSource(source)\n}\n\n// Reg emits `dst (op) src`.\nfunc (op ALUOp) Reg(dst, src Register) Instruction {\n\treturn Instruction{\n\t\tOpCode: op.Op(RegSource),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t}\n}\n\n// Imm emits `dst (op) value`.\nfunc (op ALUOp) Imm(dst Register, value int32) Instruction {\n\treturn Instruction{\n\t\tOpCode:   op.Op(ImmSource),\n\t\tDst:      dst,\n\t\tConstant: int64(value),\n\t}\n}\n\n// Op32 returns the OpCode for a 32-bit ALU operation with a given source.\nfunc (op ALUOp) Op32(source Source) OpCode {\n\treturn OpCode(ALUClass).SetALUOp(op).SetSource(source)\n}\n\n// Reg32 emits `dst (op) src`, zeroing the upper 32 bit of dst.\nfunc (op ALUOp) Reg32(dst, src Register) Instruction {\n\treturn Instruction{\n\t\tOpCode: op.Op32(RegSource),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t}\n}\n\n// Imm32 emits `dst (op) value`, zeroing the upper 32 bit of dst.\nfunc (op ALUOp) Imm32(dst Register, value int32) Instruction {\n\treturn Instruction{\n\t\tOpCode:   op.Op32(ImmSource),\n\t\tDst:      dst,\n\t\tConstant: int64(value),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/alu_string.go",
    "content": "// Code generated by \"stringer -output alu_string.go -type=Source,Endianness,ALUOp\"; DO NOT EDIT.\n\npackage asm\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[InvalidSource-65535]\n\t_ = x[ImmSource-0]\n\t_ = x[RegSource-8]\n}\n\nconst (\n\t_Source_name_0 = \"ImmSource\"\n\t_Source_name_1 = \"RegSource\"\n\t_Source_name_2 = \"InvalidSource\"\n)\n\nfunc (i Source) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _Source_name_0\n\tcase i == 8:\n\t\treturn _Source_name_1\n\tcase i == 65535:\n\t\treturn _Source_name_2\n\tdefault:\n\t\treturn \"Source(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\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[InvalidEndian-255]\n\t_ = x[LE-0]\n\t_ = x[BE-8]\n}\n\nconst (\n\t_Endianness_name_0 = \"LE\"\n\t_Endianness_name_1 = \"BE\"\n\t_Endianness_name_2 = \"InvalidEndian\"\n)\n\nfunc (i Endianness) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _Endianness_name_0\n\tcase i == 8:\n\t\treturn _Endianness_name_1\n\tcase i == 255:\n\t\treturn _Endianness_name_2\n\tdefault:\n\t\treturn \"Endianness(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\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[InvalidALUOp-65535]\n\t_ = x[Add-0]\n\t_ = x[Sub-16]\n\t_ = x[Mul-32]\n\t_ = x[Div-48]\n\t_ = x[SDiv-304]\n\t_ = x[Or-64]\n\t_ = x[And-80]\n\t_ = x[LSh-96]\n\t_ = x[RSh-112]\n\t_ = x[Neg-128]\n\t_ = x[Mod-144]\n\t_ = x[SMod-400]\n\t_ = x[Xor-160]\n\t_ = x[Mov-176]\n\t_ = x[MovSX8-432]\n\t_ = x[MovSX16-688]\n\t_ = x[MovSX32-944]\n\t_ = x[ArSh-192]\n\t_ = x[Swap-208]\n}\n\nconst _ALUOp_name = \"AddSubMulDivOrAndLShRShNegModXorMovArShSwapSDivSModMovSX8MovSX16MovSX32InvalidALUOp\"\n\nvar _ALUOp_map = map[ALUOp]string{\n\t0:     _ALUOp_name[0:3],\n\t16:    _ALUOp_name[3:6],\n\t32:    _ALUOp_name[6:9],\n\t48:    _ALUOp_name[9:12],\n\t64:    _ALUOp_name[12:14],\n\t80:    _ALUOp_name[14:17],\n\t96:    _ALUOp_name[17:20],\n\t112:   _ALUOp_name[20:23],\n\t128:   _ALUOp_name[23:26],\n\t144:   _ALUOp_name[26:29],\n\t160:   _ALUOp_name[29:32],\n\t176:   _ALUOp_name[32:35],\n\t192:   _ALUOp_name[35:39],\n\t208:   _ALUOp_name[39:43],\n\t304:   _ALUOp_name[43:47],\n\t400:   _ALUOp_name[47:51],\n\t432:   _ALUOp_name[51:57],\n\t688:   _ALUOp_name[57:64],\n\t944:   _ALUOp_name[64:71],\n\t65535: _ALUOp_name[71:83],\n}\n\nfunc (i ALUOp) String() string {\n\tif str, ok := _ALUOp_map[i]; ok {\n\t\treturn str\n\t}\n\treturn \"ALUOp(\" + strconv.FormatInt(int64(i), 10) + \")\"\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/doc.go",
    "content": "// Package asm is an assembler for eBPF bytecode.\npackage asm\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/func.go",
    "content": "package asm\n\n//go:generate go run golang.org/x/tools/cmd/stringer@latest -output func_string.go -type=BuiltinFunc\n\n// BuiltinFunc is a built-in eBPF function.\ntype BuiltinFunc int32\n\n// eBPF built-in functions\n//\n// You can regenerate this list using the following gawk script:\n//\n//\t/FN\\(.+\\),/ {\n//\t  match($1, /\\(([a-z_0-9]+),/, r)\n//\t  split(r[1], p, \"_\")\n//\t  printf \"Fn\"\n//\t  for (i in p) {\n//\t    printf \"%s%s\", toupper(substr(p[i], 1, 1)), substr(p[i], 2)\n//\t  }\n//\t  print \"\"\n//\t}\n//\n// The script expects include/uapi/linux/bpf.h as it's input.\nconst (\n\tFnUnspec BuiltinFunc = iota\n\tFnMapLookupElem\n\tFnMapUpdateElem\n\tFnMapDeleteElem\n\tFnProbeRead\n\tFnKtimeGetNs\n\tFnTracePrintk\n\tFnGetPrandomU32\n\tFnGetSmpProcessorId\n\tFnSkbStoreBytes\n\tFnL3CsumReplace\n\tFnL4CsumReplace\n\tFnTailCall\n\tFnCloneRedirect\n\tFnGetCurrentPidTgid\n\tFnGetCurrentUidGid\n\tFnGetCurrentComm\n\tFnGetCgroupClassid\n\tFnSkbVlanPush\n\tFnSkbVlanPop\n\tFnSkbGetTunnelKey\n\tFnSkbSetTunnelKey\n\tFnPerfEventRead\n\tFnRedirect\n\tFnGetRouteRealm\n\tFnPerfEventOutput\n\tFnSkbLoadBytes\n\tFnGetStackid\n\tFnCsumDiff\n\tFnSkbGetTunnelOpt\n\tFnSkbSetTunnelOpt\n\tFnSkbChangeProto\n\tFnSkbChangeType\n\tFnSkbUnderCgroup\n\tFnGetHashRecalc\n\tFnGetCurrentTask\n\tFnProbeWriteUser\n\tFnCurrentTaskUnderCgroup\n\tFnSkbChangeTail\n\tFnSkbPullData\n\tFnCsumUpdate\n\tFnSetHashInvalid\n\tFnGetNumaNodeId\n\tFnSkbChangeHead\n\tFnXdpAdjustHead\n\tFnProbeReadStr\n\tFnGetSocketCookie\n\tFnGetSocketUid\n\tFnSetHash\n\tFnSetsockopt\n\tFnSkbAdjustRoom\n\tFnRedirectMap\n\tFnSkRedirectMap\n\tFnSockMapUpdate\n\tFnXdpAdjustMeta\n\tFnPerfEventReadValue\n\tFnPerfProgReadValue\n\tFnGetsockopt\n\tFnOverrideReturn\n\tFnSockOpsCbFlagsSet\n\tFnMsgRedirectMap\n\tFnMsgApplyBytes\n\tFnMsgCorkBytes\n\tFnMsgPullData\n\tFnBind\n\tFnXdpAdjustTail\n\tFnSkbGetXfrmState\n\tFnGetStack\n\tFnSkbLoadBytesRelative\n\tFnFibLookup\n\tFnSockHashUpdate\n\tFnMsgRedirectHash\n\tFnSkRedirectHash\n\tFnLwtPushEncap\n\tFnLwtSeg6StoreBytes\n\tFnLwtSeg6AdjustSrh\n\tFnLwtSeg6Action\n\tFnRcRepeat\n\tFnRcKeydown\n\tFnSkbCgroupId\n\tFnGetCurrentCgroupId\n\tFnGetLocalStorage\n\tFnSkSelectReuseport\n\tFnSkbAncestorCgroupId\n\tFnSkLookupTcp\n\tFnSkLookupUdp\n\tFnSkRelease\n\tFnMapPushElem\n\tFnMapPopElem\n\tFnMapPeekElem\n\tFnMsgPushData\n\tFnMsgPopData\n\tFnRcPointerRel\n\tFnSpinLock\n\tFnSpinUnlock\n\tFnSkFullsock\n\tFnTcpSock\n\tFnSkbEcnSetCe\n\tFnGetListenerSock\n\tFnSkcLookupTcp\n\tFnTcpCheckSyncookie\n\tFnSysctlGetName\n\tFnSysctlGetCurrentValue\n\tFnSysctlGetNewValue\n\tFnSysctlSetNewValue\n\tFnStrtol\n\tFnStrtoul\n\tFnSkStorageGet\n\tFnSkStorageDelete\n\tFnSendSignal\n\tFnTcpGenSyncookie\n\tFnSkbOutput\n\tFnProbeReadUser\n\tFnProbeReadKernel\n\tFnProbeReadUserStr\n\tFnProbeReadKernelStr\n\tFnTcpSendAck\n\tFnSendSignalThread\n\tFnJiffies64\n\tFnReadBranchRecords\n\tFnGetNsCurrentPidTgid\n\tFnXdpOutput\n\tFnGetNetnsCookie\n\tFnGetCurrentAncestorCgroupId\n\tFnSkAssign\n\tFnKtimeGetBootNs\n\tFnSeqPrintf\n\tFnSeqWrite\n\tFnSkCgroupId\n\tFnSkAncestorCgroupId\n\tFnRingbufOutput\n\tFnRingbufReserve\n\tFnRingbufSubmit\n\tFnRingbufDiscard\n\tFnRingbufQuery\n\tFnCsumLevel\n\tFnSkcToTcp6Sock\n\tFnSkcToTcpSock\n\tFnSkcToTcpTimewaitSock\n\tFnSkcToTcpRequestSock\n\tFnSkcToUdp6Sock\n\tFnGetTaskStack\n\tFnLoadHdrOpt\n\tFnStoreHdrOpt\n\tFnReserveHdrOpt\n\tFnInodeStorageGet\n\tFnInodeStorageDelete\n\tFnDPath\n\tFnCopyFromUser\n\tFnSnprintfBtf\n\tFnSeqPrintfBtf\n\tFnSkbCgroupClassid\n\tFnRedirectNeigh\n\tFnPerCpuPtr\n\tFnThisCpuPtr\n\tFnRedirectPeer\n\tFnTaskStorageGet\n\tFnTaskStorageDelete\n\tFnGetCurrentTaskBtf\n\tFnBprmOptsSet\n\tFnKtimeGetCoarseNs\n\tFnImaInodeHash\n\tFnSockFromFile\n\tFnCheckMtu\n\tFnForEachMapElem\n\tFnSnprintf\n\tFnSysBpf\n\tFnBtfFindByNameKind\n\tFnSysClose\n\tFnTimerInit\n\tFnTimerSetCallback\n\tFnTimerStart\n\tFnTimerCancel\n\tFnGetFuncIp\n\tFnGetAttachCookie\n\tFnTaskPtRegs\n\tFnGetBranchSnapshot\n\tFnTraceVprintk\n\tFnSkcToUnixSock\n\tFnKallsymsLookupName\n\tFnFindVma\n\tFnLoop\n\tFnStrncmp\n\tFnGetFuncArg\n\tFnGetFuncRet\n\tFnGetFuncArgCnt\n\tFnGetRetval\n\tFnSetRetval\n\tFnXdpGetBuffLen\n\tFnXdpLoadBytes\n\tFnXdpStoreBytes\n\tFnCopyFromUserTask\n\tFnSkbSetTstamp\n\tFnImaFileHash\n\tFnKptrXchg\n\tFnMapLookupPercpuElem\n\tFnSkcToMptcpSock\n\tFnDynptrFromMem\n\tFnRingbufReserveDynptr\n\tFnRingbufSubmitDynptr\n\tFnRingbufDiscardDynptr\n\tFnDynptrRead\n\tFnDynptrWrite\n\tFnDynptrData\n\tFnTcpRawGenSyncookieIpv4\n\tFnTcpRawGenSyncookieIpv6\n\tFnTcpRawCheckSyncookieIpv4\n\tFnTcpRawCheckSyncookieIpv6\n\tFnKtimeGetTaiNs\n\tFnUserRingbufDrain\n\tFnCgrpStorageGet\n\tFnCgrpStorageDelete\n)\n\n// Call emits a function call.\nfunc (fn BuiltinFunc) Call() Instruction {\n\treturn Instruction{\n\t\tOpCode:   OpCode(JumpClass).SetJumpOp(Call),\n\t\tConstant: int64(fn),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/func_string.go",
    "content": "// Code generated by \"stringer -output func_string.go -type=BuiltinFunc\"; DO NOT EDIT.\n\npackage asm\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[FnUnspec-0]\n\t_ = x[FnMapLookupElem-1]\n\t_ = x[FnMapUpdateElem-2]\n\t_ = x[FnMapDeleteElem-3]\n\t_ = x[FnProbeRead-4]\n\t_ = x[FnKtimeGetNs-5]\n\t_ = x[FnTracePrintk-6]\n\t_ = x[FnGetPrandomU32-7]\n\t_ = x[FnGetSmpProcessorId-8]\n\t_ = x[FnSkbStoreBytes-9]\n\t_ = x[FnL3CsumReplace-10]\n\t_ = x[FnL4CsumReplace-11]\n\t_ = x[FnTailCall-12]\n\t_ = x[FnCloneRedirect-13]\n\t_ = x[FnGetCurrentPidTgid-14]\n\t_ = x[FnGetCurrentUidGid-15]\n\t_ = x[FnGetCurrentComm-16]\n\t_ = x[FnGetCgroupClassid-17]\n\t_ = x[FnSkbVlanPush-18]\n\t_ = x[FnSkbVlanPop-19]\n\t_ = x[FnSkbGetTunnelKey-20]\n\t_ = x[FnSkbSetTunnelKey-21]\n\t_ = x[FnPerfEventRead-22]\n\t_ = x[FnRedirect-23]\n\t_ = x[FnGetRouteRealm-24]\n\t_ = x[FnPerfEventOutput-25]\n\t_ = x[FnSkbLoadBytes-26]\n\t_ = x[FnGetStackid-27]\n\t_ = x[FnCsumDiff-28]\n\t_ = x[FnSkbGetTunnelOpt-29]\n\t_ = x[FnSkbSetTunnelOpt-30]\n\t_ = x[FnSkbChangeProto-31]\n\t_ = x[FnSkbChangeType-32]\n\t_ = x[FnSkbUnderCgroup-33]\n\t_ = x[FnGetHashRecalc-34]\n\t_ = x[FnGetCurrentTask-35]\n\t_ = x[FnProbeWriteUser-36]\n\t_ = x[FnCurrentTaskUnderCgroup-37]\n\t_ = x[FnSkbChangeTail-38]\n\t_ = x[FnSkbPullData-39]\n\t_ = x[FnCsumUpdate-40]\n\t_ = x[FnSetHashInvalid-41]\n\t_ = x[FnGetNumaNodeId-42]\n\t_ = x[FnSkbChangeHead-43]\n\t_ = x[FnXdpAdjustHead-44]\n\t_ = x[FnProbeReadStr-45]\n\t_ = x[FnGetSocketCookie-46]\n\t_ = x[FnGetSocketUid-47]\n\t_ = x[FnSetHash-48]\n\t_ = x[FnSetsockopt-49]\n\t_ = x[FnSkbAdjustRoom-50]\n\t_ = x[FnRedirectMap-51]\n\t_ = x[FnSkRedirectMap-52]\n\t_ = x[FnSockMapUpdate-53]\n\t_ = x[FnXdpAdjustMeta-54]\n\t_ = x[FnPerfEventReadValue-55]\n\t_ = x[FnPerfProgReadValue-56]\n\t_ = x[FnGetsockopt-57]\n\t_ = x[FnOverrideReturn-58]\n\t_ = x[FnSockOpsCbFlagsSet-59]\n\t_ = x[FnMsgRedirectMap-60]\n\t_ = x[FnMsgApplyBytes-61]\n\t_ = x[FnMsgCorkBytes-62]\n\t_ = x[FnMsgPullData-63]\n\t_ = x[FnBind-64]\n\t_ = x[FnXdpAdjustTail-65]\n\t_ = x[FnSkbGetXfrmState-66]\n\t_ = x[FnGetStack-67]\n\t_ = x[FnSkbLoadBytesRelative-68]\n\t_ = x[FnFibLookup-69]\n\t_ = x[FnSockHashUpdate-70]\n\t_ = x[FnMsgRedirectHash-71]\n\t_ = x[FnSkRedirectHash-72]\n\t_ = x[FnLwtPushEncap-73]\n\t_ = x[FnLwtSeg6StoreBytes-74]\n\t_ = x[FnLwtSeg6AdjustSrh-75]\n\t_ = x[FnLwtSeg6Action-76]\n\t_ = x[FnRcRepeat-77]\n\t_ = x[FnRcKeydown-78]\n\t_ = x[FnSkbCgroupId-79]\n\t_ = x[FnGetCurrentCgroupId-80]\n\t_ = x[FnGetLocalStorage-81]\n\t_ = x[FnSkSelectReuseport-82]\n\t_ = x[FnSkbAncestorCgroupId-83]\n\t_ = x[FnSkLookupTcp-84]\n\t_ = x[FnSkLookupUdp-85]\n\t_ = x[FnSkRelease-86]\n\t_ = x[FnMapPushElem-87]\n\t_ = x[FnMapPopElem-88]\n\t_ = x[FnMapPeekElem-89]\n\t_ = x[FnMsgPushData-90]\n\t_ = x[FnMsgPopData-91]\n\t_ = x[FnRcPointerRel-92]\n\t_ = x[FnSpinLock-93]\n\t_ = x[FnSpinUnlock-94]\n\t_ = x[FnSkFullsock-95]\n\t_ = x[FnTcpSock-96]\n\t_ = x[FnSkbEcnSetCe-97]\n\t_ = x[FnGetListenerSock-98]\n\t_ = x[FnSkcLookupTcp-99]\n\t_ = x[FnTcpCheckSyncookie-100]\n\t_ = x[FnSysctlGetName-101]\n\t_ = x[FnSysctlGetCurrentValue-102]\n\t_ = x[FnSysctlGetNewValue-103]\n\t_ = x[FnSysctlSetNewValue-104]\n\t_ = x[FnStrtol-105]\n\t_ = x[FnStrtoul-106]\n\t_ = x[FnSkStorageGet-107]\n\t_ = x[FnSkStorageDelete-108]\n\t_ = x[FnSendSignal-109]\n\t_ = x[FnTcpGenSyncookie-110]\n\t_ = x[FnSkbOutput-111]\n\t_ = x[FnProbeReadUser-112]\n\t_ = x[FnProbeReadKernel-113]\n\t_ = x[FnProbeReadUserStr-114]\n\t_ = x[FnProbeReadKernelStr-115]\n\t_ = x[FnTcpSendAck-116]\n\t_ = x[FnSendSignalThread-117]\n\t_ = x[FnJiffies64-118]\n\t_ = x[FnReadBranchRecords-119]\n\t_ = x[FnGetNsCurrentPidTgid-120]\n\t_ = x[FnXdpOutput-121]\n\t_ = x[FnGetNetnsCookie-122]\n\t_ = x[FnGetCurrentAncestorCgroupId-123]\n\t_ = x[FnSkAssign-124]\n\t_ = x[FnKtimeGetBootNs-125]\n\t_ = x[FnSeqPrintf-126]\n\t_ = x[FnSeqWrite-127]\n\t_ = x[FnSkCgroupId-128]\n\t_ = x[FnSkAncestorCgroupId-129]\n\t_ = x[FnRingbufOutput-130]\n\t_ = x[FnRingbufReserve-131]\n\t_ = x[FnRingbufSubmit-132]\n\t_ = x[FnRingbufDiscard-133]\n\t_ = x[FnRingbufQuery-134]\n\t_ = x[FnCsumLevel-135]\n\t_ = x[FnSkcToTcp6Sock-136]\n\t_ = x[FnSkcToTcpSock-137]\n\t_ = x[FnSkcToTcpTimewaitSock-138]\n\t_ = x[FnSkcToTcpRequestSock-139]\n\t_ = x[FnSkcToUdp6Sock-140]\n\t_ = x[FnGetTaskStack-141]\n\t_ = x[FnLoadHdrOpt-142]\n\t_ = x[FnStoreHdrOpt-143]\n\t_ = x[FnReserveHdrOpt-144]\n\t_ = x[FnInodeStorageGet-145]\n\t_ = x[FnInodeStorageDelete-146]\n\t_ = x[FnDPath-147]\n\t_ = x[FnCopyFromUser-148]\n\t_ = x[FnSnprintfBtf-149]\n\t_ = x[FnSeqPrintfBtf-150]\n\t_ = x[FnSkbCgroupClassid-151]\n\t_ = x[FnRedirectNeigh-152]\n\t_ = x[FnPerCpuPtr-153]\n\t_ = x[FnThisCpuPtr-154]\n\t_ = x[FnRedirectPeer-155]\n\t_ = x[FnTaskStorageGet-156]\n\t_ = x[FnTaskStorageDelete-157]\n\t_ = x[FnGetCurrentTaskBtf-158]\n\t_ = x[FnBprmOptsSet-159]\n\t_ = x[FnKtimeGetCoarseNs-160]\n\t_ = x[FnImaInodeHash-161]\n\t_ = x[FnSockFromFile-162]\n\t_ = x[FnCheckMtu-163]\n\t_ = x[FnForEachMapElem-164]\n\t_ = x[FnSnprintf-165]\n\t_ = x[FnSysBpf-166]\n\t_ = x[FnBtfFindByNameKind-167]\n\t_ = x[FnSysClose-168]\n\t_ = x[FnTimerInit-169]\n\t_ = x[FnTimerSetCallback-170]\n\t_ = x[FnTimerStart-171]\n\t_ = x[FnTimerCancel-172]\n\t_ = x[FnGetFuncIp-173]\n\t_ = x[FnGetAttachCookie-174]\n\t_ = x[FnTaskPtRegs-175]\n\t_ = x[FnGetBranchSnapshot-176]\n\t_ = x[FnTraceVprintk-177]\n\t_ = x[FnSkcToUnixSock-178]\n\t_ = x[FnKallsymsLookupName-179]\n\t_ = x[FnFindVma-180]\n\t_ = x[FnLoop-181]\n\t_ = x[FnStrncmp-182]\n\t_ = x[FnGetFuncArg-183]\n\t_ = x[FnGetFuncRet-184]\n\t_ = x[FnGetFuncArgCnt-185]\n\t_ = x[FnGetRetval-186]\n\t_ = x[FnSetRetval-187]\n\t_ = x[FnXdpGetBuffLen-188]\n\t_ = x[FnXdpLoadBytes-189]\n\t_ = x[FnXdpStoreBytes-190]\n\t_ = x[FnCopyFromUserTask-191]\n\t_ = x[FnSkbSetTstamp-192]\n\t_ = x[FnImaFileHash-193]\n\t_ = x[FnKptrXchg-194]\n\t_ = x[FnMapLookupPercpuElem-195]\n\t_ = x[FnSkcToMptcpSock-196]\n\t_ = x[FnDynptrFromMem-197]\n\t_ = x[FnRingbufReserveDynptr-198]\n\t_ = x[FnRingbufSubmitDynptr-199]\n\t_ = x[FnRingbufDiscardDynptr-200]\n\t_ = x[FnDynptrRead-201]\n\t_ = x[FnDynptrWrite-202]\n\t_ = x[FnDynptrData-203]\n\t_ = x[FnTcpRawGenSyncookieIpv4-204]\n\t_ = x[FnTcpRawGenSyncookieIpv6-205]\n\t_ = x[FnTcpRawCheckSyncookieIpv4-206]\n\t_ = x[FnTcpRawCheckSyncookieIpv6-207]\n\t_ = x[FnKtimeGetTaiNs-208]\n\t_ = x[FnUserRingbufDrain-209]\n\t_ = x[FnCgrpStorageGet-210]\n\t_ = x[FnCgrpStorageDelete-211]\n}\n\nconst _BuiltinFunc_name = \"FnUnspecFnMapLookupElemFnMapUpdateElemFnMapDeleteElemFnProbeReadFnKtimeGetNsFnTracePrintkFnGetPrandomU32FnGetSmpProcessorIdFnSkbStoreBytesFnL3CsumReplaceFnL4CsumReplaceFnTailCallFnCloneRedirectFnGetCurrentPidTgidFnGetCurrentUidGidFnGetCurrentCommFnGetCgroupClassidFnSkbVlanPushFnSkbVlanPopFnSkbGetTunnelKeyFnSkbSetTunnelKeyFnPerfEventReadFnRedirectFnGetRouteRealmFnPerfEventOutputFnSkbLoadBytesFnGetStackidFnCsumDiffFnSkbGetTunnelOptFnSkbSetTunnelOptFnSkbChangeProtoFnSkbChangeTypeFnSkbUnderCgroupFnGetHashRecalcFnGetCurrentTaskFnProbeWriteUserFnCurrentTaskUnderCgroupFnSkbChangeTailFnSkbPullDataFnCsumUpdateFnSetHashInvalidFnGetNumaNodeIdFnSkbChangeHeadFnXdpAdjustHeadFnProbeReadStrFnGetSocketCookieFnGetSocketUidFnSetHashFnSetsockoptFnSkbAdjustRoomFnRedirectMapFnSkRedirectMapFnSockMapUpdateFnXdpAdjustMetaFnPerfEventReadValueFnPerfProgReadValueFnGetsockoptFnOverrideReturnFnSockOpsCbFlagsSetFnMsgRedirectMapFnMsgApplyBytesFnMsgCorkBytesFnMsgPullDataFnBindFnXdpAdjustTailFnSkbGetXfrmStateFnGetStackFnSkbLoadBytesRelativeFnFibLookupFnSockHashUpdateFnMsgRedirectHashFnSkRedirectHashFnLwtPushEncapFnLwtSeg6StoreBytesFnLwtSeg6AdjustSrhFnLwtSeg6ActionFnRcRepeatFnRcKeydownFnSkbCgroupIdFnGetCurrentCgroupIdFnGetLocalStorageFnSkSelectReuseportFnSkbAncestorCgroupIdFnSkLookupTcpFnSkLookupUdpFnSkReleaseFnMapPushElemFnMapPopElemFnMapPeekElemFnMsgPushDataFnMsgPopDataFnRcPointerRelFnSpinLockFnSpinUnlockFnSkFullsockFnTcpSockFnSkbEcnSetCeFnGetListenerSockFnSkcLookupTcpFnTcpCheckSyncookieFnSysctlGetNameFnSysctlGetCurrentValueFnSysctlGetNewValueFnSysctlSetNewValueFnStrtolFnStrtoulFnSkStorageGetFnSkStorageDeleteFnSendSignalFnTcpGenSyncookieFnSkbOutputFnProbeReadUserFnProbeReadKernelFnProbeReadUserStrFnProbeReadKernelStrFnTcpSendAckFnSendSignalThreadFnJiffies64FnReadBranchRecordsFnGetNsCurrentPidTgidFnXdpOutputFnGetNetnsCookieFnGetCurrentAncestorCgroupIdFnSkAssignFnKtimeGetBootNsFnSeqPrintfFnSeqWriteFnSkCgroupIdFnSkAncestorCgroupIdFnRingbufOutputFnRingbufReserveFnRingbufSubmitFnRingbufDiscardFnRingbufQueryFnCsumLevelFnSkcToTcp6SockFnSkcToTcpSockFnSkcToTcpTimewaitSockFnSkcToTcpRequestSockFnSkcToUdp6SockFnGetTaskStackFnLoadHdrOptFnStoreHdrOptFnReserveHdrOptFnInodeStorageGetFnInodeStorageDeleteFnDPathFnCopyFromUserFnSnprintfBtfFnSeqPrintfBtfFnSkbCgroupClassidFnRedirectNeighFnPerCpuPtrFnThisCpuPtrFnRedirectPeerFnTaskStorageGetFnTaskStorageDeleteFnGetCurrentTaskBtfFnBprmOptsSetFnKtimeGetCoarseNsFnImaInodeHashFnSockFromFileFnCheckMtuFnForEachMapElemFnSnprintfFnSysBpfFnBtfFindByNameKindFnSysCloseFnTimerInitFnTimerSetCallbackFnTimerStartFnTimerCancelFnGetFuncIpFnGetAttachCookieFnTaskPtRegsFnGetBranchSnapshotFnTraceVprintkFnSkcToUnixSockFnKallsymsLookupNameFnFindVmaFnLoopFnStrncmpFnGetFuncArgFnGetFuncRetFnGetFuncArgCntFnGetRetvalFnSetRetvalFnXdpGetBuffLenFnXdpLoadBytesFnXdpStoreBytesFnCopyFromUserTaskFnSkbSetTstampFnImaFileHashFnKptrXchgFnMapLookupPercpuElemFnSkcToMptcpSockFnDynptrFromMemFnRingbufReserveDynptrFnRingbufSubmitDynptrFnRingbufDiscardDynptrFnDynptrReadFnDynptrWriteFnDynptrDataFnTcpRawGenSyncookieIpv4FnTcpRawGenSyncookieIpv6FnTcpRawCheckSyncookieIpv4FnTcpRawCheckSyncookieIpv6FnKtimeGetTaiNsFnUserRingbufDrainFnCgrpStorageGetFnCgrpStorageDelete\"\n\nvar _BuiltinFunc_index = [...]uint16{0, 8, 23, 38, 53, 64, 76, 89, 104, 123, 138, 153, 168, 178, 193, 212, 230, 246, 264, 277, 289, 306, 323, 338, 348, 363, 380, 394, 406, 416, 433, 450, 466, 481, 497, 512, 528, 544, 568, 583, 596, 608, 624, 639, 654, 669, 683, 700, 714, 723, 735, 750, 763, 778, 793, 808, 828, 847, 859, 875, 894, 910, 925, 939, 952, 958, 973, 990, 1000, 1022, 1033, 1049, 1066, 1082, 1096, 1115, 1133, 1148, 1158, 1169, 1182, 1202, 1219, 1238, 1259, 1272, 1285, 1296, 1309, 1321, 1334, 1347, 1359, 1373, 1383, 1395, 1407, 1416, 1429, 1446, 1460, 1479, 1494, 1517, 1536, 1555, 1563, 1572, 1586, 1603, 1615, 1632, 1643, 1658, 1675, 1693, 1713, 1725, 1743, 1754, 1773, 1794, 1805, 1821, 1849, 1859, 1875, 1886, 1896, 1908, 1928, 1943, 1959, 1974, 1990, 2004, 2015, 2030, 2044, 2066, 2087, 2102, 2116, 2128, 2141, 2156, 2173, 2193, 2200, 2214, 2227, 2241, 2259, 2274, 2285, 2297, 2311, 2327, 2346, 2365, 2378, 2396, 2410, 2424, 2434, 2450, 2460, 2468, 2487, 2497, 2508, 2526, 2538, 2551, 2562, 2579, 2591, 2610, 2624, 2639, 2659, 2668, 2674, 2683, 2695, 2707, 2722, 2733, 2744, 2759, 2773, 2788, 2806, 2820, 2833, 2843, 2864, 2880, 2895, 2917, 2938, 2960, 2972, 2985, 2997, 3021, 3045, 3071, 3097, 3112, 3130, 3146, 3165}\n\nfunc (i BuiltinFunc) String() string {\n\tif i < 0 || i >= BuiltinFunc(len(_BuiltinFunc_index)-1) {\n\t\treturn \"BuiltinFunc(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _BuiltinFunc_name[_BuiltinFunc_index[i]:_BuiltinFunc_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/instruction.go",
    "content": "package asm\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\n// InstructionSize is the size of a BPF instruction in bytes\nconst InstructionSize = 8\n\n// RawInstructionOffset is an offset in units of raw BPF instructions.\ntype RawInstructionOffset uint64\n\nvar ErrUnreferencedSymbol = errors.New(\"unreferenced symbol\")\nvar ErrUnsatisfiedMapReference = errors.New(\"unsatisfied map reference\")\nvar ErrUnsatisfiedProgramReference = errors.New(\"unsatisfied program reference\")\n\n// Bytes returns the offset of an instruction in bytes.\nfunc (rio RawInstructionOffset) Bytes() uint64 {\n\treturn uint64(rio) * InstructionSize\n}\n\n// Instruction is a single eBPF instruction.\ntype Instruction struct {\n\tOpCode   OpCode\n\tDst      Register\n\tSrc      Register\n\tOffset   int16\n\tConstant int64\n\n\t// Metadata contains optional metadata about this instruction.\n\tMetadata Metadata\n}\n\n// Unmarshal decodes a BPF instruction.\nfunc (ins *Instruction) Unmarshal(r io.Reader, bo binary.ByteOrder) (uint64, error) {\n\tdata := make([]byte, InstructionSize)\n\tif _, err := io.ReadFull(r, data); err != nil {\n\t\treturn 0, err\n\t}\n\n\tins.OpCode = OpCode(data[0])\n\n\tregs := data[1]\n\tswitch bo {\n\tcase binary.LittleEndian:\n\t\tins.Dst, ins.Src = Register(regs&0xF), Register(regs>>4)\n\tcase binary.BigEndian:\n\t\tins.Dst, ins.Src = Register(regs>>4), Register(regs&0xf)\n\t}\n\n\tins.Offset = int16(bo.Uint16(data[2:4]))\n\n\tif ins.OpCode.Class().IsALU() {\n\t\tswitch ins.OpCode.ALUOp() {\n\t\tcase Div:\n\t\t\tif ins.Offset == 1 {\n\t\t\t\tins.OpCode = ins.OpCode.SetALUOp(SDiv)\n\t\t\t\tins.Offset = 0\n\t\t\t}\n\t\tcase Mod:\n\t\t\tif ins.Offset == 1 {\n\t\t\t\tins.OpCode = ins.OpCode.SetALUOp(SMod)\n\t\t\t\tins.Offset = 0\n\t\t\t}\n\t\tcase Mov:\n\t\t\tswitch ins.Offset {\n\t\t\tcase 8:\n\t\t\t\tins.OpCode = ins.OpCode.SetALUOp(MovSX8)\n\t\t\t\tins.Offset = 0\n\t\t\tcase 16:\n\t\t\t\tins.OpCode = ins.OpCode.SetALUOp(MovSX16)\n\t\t\t\tins.Offset = 0\n\t\t\tcase 32:\n\t\t\t\tins.OpCode = ins.OpCode.SetALUOp(MovSX32)\n\t\t\t\tins.Offset = 0\n\t\t\t}\n\t\t}\n\t}\n\n\t// Convert to int32 before widening to int64\n\t// to ensure the signed bit is carried over.\n\tins.Constant = int64(int32(bo.Uint32(data[4:8])))\n\n\tif !ins.OpCode.IsDWordLoad() {\n\t\treturn InstructionSize, nil\n\t}\n\n\t// Pull another instruction from the stream to retrieve the second\n\t// half of the 64-bit immediate value.\n\tif _, err := io.ReadFull(r, data); err != nil {\n\t\t// No Wrap, to avoid io.EOF clash\n\t\treturn 0, errors.New(\"64bit immediate is missing second half\")\n\t}\n\n\t// Require that all fields other than the value are zero.\n\tif bo.Uint32(data[0:4]) != 0 {\n\t\treturn 0, errors.New(\"64bit immediate has non-zero fields\")\n\t}\n\n\tcons1 := uint32(ins.Constant)\n\tcons2 := int32(bo.Uint32(data[4:8]))\n\tins.Constant = int64(cons2)<<32 | int64(cons1)\n\n\treturn 2 * InstructionSize, nil\n}\n\n// Marshal encodes a BPF instruction.\nfunc (ins Instruction) Marshal(w io.Writer, bo binary.ByteOrder) (uint64, error) {\n\tif ins.OpCode == InvalidOpCode {\n\t\treturn 0, errors.New(\"invalid opcode\")\n\t}\n\n\tisDWordLoad := ins.OpCode.IsDWordLoad()\n\n\tcons := int32(ins.Constant)\n\tif isDWordLoad {\n\t\t// Encode least significant 32bit first for 64bit operations.\n\t\tcons = int32(uint32(ins.Constant))\n\t}\n\n\tregs, err := newBPFRegisters(ins.Dst, ins.Src, bo)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"can't marshal registers: %s\", err)\n\t}\n\n\tif ins.OpCode.Class().IsALU() {\n\t\tnewOffset := int16(0)\n\t\tswitch ins.OpCode.ALUOp() {\n\t\tcase SDiv:\n\t\t\tins.OpCode = ins.OpCode.SetALUOp(Div)\n\t\t\tnewOffset = 1\n\t\tcase SMod:\n\t\t\tins.OpCode = ins.OpCode.SetALUOp(Mod)\n\t\t\tnewOffset = 1\n\t\tcase MovSX8:\n\t\t\tins.OpCode = ins.OpCode.SetALUOp(Mov)\n\t\t\tnewOffset = 8\n\t\tcase MovSX16:\n\t\t\tins.OpCode = ins.OpCode.SetALUOp(Mov)\n\t\t\tnewOffset = 16\n\t\tcase MovSX32:\n\t\t\tins.OpCode = ins.OpCode.SetALUOp(Mov)\n\t\t\tnewOffset = 32\n\t\t}\n\t\tif newOffset != 0 && ins.Offset != 0 {\n\t\t\treturn 0, fmt.Errorf(\"extended ALU opcodes should have an .Offset of 0: %s\", ins)\n\t\t}\n\t\tins.Offset = newOffset\n\t}\n\n\top, err := ins.OpCode.bpfOpCode()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tdata := make([]byte, InstructionSize)\n\tdata[0] = op\n\tdata[1] = byte(regs)\n\tbo.PutUint16(data[2:4], uint16(ins.Offset))\n\tbo.PutUint32(data[4:8], uint32(cons))\n\tif _, err := w.Write(data); err != nil {\n\t\treturn 0, err\n\t}\n\n\tif !isDWordLoad {\n\t\treturn InstructionSize, nil\n\t}\n\n\t// The first half of the second part of a double-wide instruction\n\t// must be zero. The second half carries the value.\n\tbo.PutUint32(data[0:4], 0)\n\tbo.PutUint32(data[4:8], uint32(ins.Constant>>32))\n\tif _, err := w.Write(data); err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn 2 * InstructionSize, nil\n}\n\n// AssociateMap associates a Map with this Instruction.\n//\n// Implicitly clears the Instruction's Reference field.\n//\n// Returns an error if the Instruction is not a map load.\nfunc (ins *Instruction) AssociateMap(m FDer) error {\n\tif !ins.IsLoadFromMap() {\n\t\treturn errors.New(\"not a load from a map\")\n\t}\n\n\tins.Metadata.Set(referenceMeta{}, nil)\n\tins.Metadata.Set(mapMeta{}, m)\n\n\treturn nil\n}\n\n// RewriteMapPtr changes an instruction to use a new map fd.\n//\n// Returns an error if the instruction doesn't load a map.\n//\n// Deprecated: use AssociateMap instead. If you cannot provide a Map,\n// wrap an fd in a type implementing FDer.\nfunc (ins *Instruction) RewriteMapPtr(fd int) error {\n\tif !ins.IsLoadFromMap() {\n\t\treturn errors.New(\"not a load from a map\")\n\t}\n\n\tins.encodeMapFD(fd)\n\n\treturn nil\n}\n\nfunc (ins *Instruction) encodeMapFD(fd int) {\n\t// Preserve the offset value for direct map loads.\n\toffset := uint64(ins.Constant) & (math.MaxUint32 << 32)\n\trawFd := uint64(uint32(fd))\n\tins.Constant = int64(offset | rawFd)\n}\n\n// MapPtr returns the map fd for this instruction.\n//\n// The result is undefined if the instruction is not a load from a map,\n// see IsLoadFromMap.\n//\n// Deprecated: use Map() instead.\nfunc (ins *Instruction) MapPtr() int {\n\t// If there is a map associated with the instruction, return its FD.\n\tif fd := ins.Metadata.Get(mapMeta{}); fd != nil {\n\t\treturn fd.(FDer).FD()\n\t}\n\n\t// Fall back to the fd stored in the Constant field\n\treturn ins.mapFd()\n}\n\n// mapFd returns the map file descriptor stored in the 32 least significant\n// bits of ins' Constant field.\nfunc (ins *Instruction) mapFd() int {\n\treturn int(int32(ins.Constant))\n}\n\n// RewriteMapOffset changes the offset of a direct load from a map.\n//\n// Returns an error if the instruction is not a direct load.\nfunc (ins *Instruction) RewriteMapOffset(offset uint32) error {\n\tif !ins.OpCode.IsDWordLoad() {\n\t\treturn fmt.Errorf(\"%s is not a 64 bit load\", ins.OpCode)\n\t}\n\n\tif ins.Src != PseudoMapValue {\n\t\treturn errors.New(\"not a direct load from a map\")\n\t}\n\n\tfd := uint64(ins.Constant) & math.MaxUint32\n\tins.Constant = int64(uint64(offset)<<32 | fd)\n\treturn nil\n}\n\nfunc (ins *Instruction) mapOffset() uint32 {\n\treturn uint32(uint64(ins.Constant) >> 32)\n}\n\n// IsLoadFromMap returns true if the instruction loads from a map.\n//\n// This covers both loading the map pointer and direct map value loads.\nfunc (ins *Instruction) IsLoadFromMap() bool {\n\treturn ins.OpCode == LoadImmOp(DWord) && (ins.Src == PseudoMapFD || ins.Src == PseudoMapValue)\n}\n\n// IsFunctionCall returns true if the instruction calls another BPF function.\n//\n// This is not the same thing as a BPF helper call.\nfunc (ins *Instruction) IsFunctionCall() bool {\n\treturn ins.OpCode.JumpOp() == Call && ins.Src == PseudoCall\n}\n\n// IsKfuncCall returns true if the instruction calls a kfunc.\n//\n// This is not the same thing as a BPF helper call.\nfunc (ins *Instruction) IsKfuncCall() bool {\n\treturn ins.OpCode.JumpOp() == Call && ins.Src == PseudoKfuncCall\n}\n\n// IsLoadOfFunctionPointer returns true if the instruction loads a function pointer.\nfunc (ins *Instruction) IsLoadOfFunctionPointer() bool {\n\treturn ins.OpCode.IsDWordLoad() && ins.Src == PseudoFunc\n}\n\n// IsFunctionReference returns true if the instruction references another BPF\n// function, either by invoking a Call jump operation or by loading a function\n// pointer.\nfunc (ins *Instruction) IsFunctionReference() bool {\n\treturn ins.IsFunctionCall() || ins.IsLoadOfFunctionPointer()\n}\n\n// IsBuiltinCall returns true if the instruction is a built-in call, i.e. BPF helper call.\nfunc (ins *Instruction) IsBuiltinCall() bool {\n\treturn ins.OpCode.JumpOp() == Call && ins.Src == R0 && ins.Dst == R0\n}\n\n// IsConstantLoad returns true if the instruction loads a constant of the\n// given size.\nfunc (ins *Instruction) IsConstantLoad(size Size) bool {\n\treturn ins.OpCode == LoadImmOp(size) && ins.Src == R0 && ins.Offset == 0\n}\n\n// Format implements fmt.Formatter.\nfunc (ins Instruction) Format(f fmt.State, c rune) {\n\tif c != 'v' {\n\t\tfmt.Fprintf(f, \"{UNRECOGNIZED: %c}\", c)\n\t\treturn\n\t}\n\n\top := ins.OpCode\n\n\tif op == InvalidOpCode {\n\t\tfmt.Fprint(f, \"INVALID\")\n\t\treturn\n\t}\n\n\t// Omit trailing space for Exit\n\tif op.JumpOp() == Exit {\n\t\tfmt.Fprint(f, op)\n\t\treturn\n\t}\n\n\tif ins.IsLoadFromMap() {\n\t\tfd := ins.mapFd()\n\t\tm := ins.Map()\n\t\tswitch ins.Src {\n\t\tcase PseudoMapFD:\n\t\t\tif m != nil {\n\t\t\t\tfmt.Fprintf(f, \"LoadMapPtr dst: %s map: %s\", ins.Dst, m)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(f, \"LoadMapPtr dst: %s fd: %d\", ins.Dst, fd)\n\t\t\t}\n\n\t\tcase PseudoMapValue:\n\t\t\tif m != nil {\n\t\t\t\tfmt.Fprintf(f, \"LoadMapValue dst: %s, map: %s off: %d\", ins.Dst, m, ins.mapOffset())\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(f, \"LoadMapValue dst: %s, fd: %d off: %d\", ins.Dst, fd, ins.mapOffset())\n\t\t\t}\n\t\t}\n\n\t\tgoto ref\n\t}\n\n\tswitch cls := op.Class(); {\n\tcase cls.isLoadOrStore():\n\t\tfmt.Fprintf(f, \"%v \", op)\n\t\tswitch op.Mode() {\n\t\tcase ImmMode:\n\t\t\tfmt.Fprintf(f, \"dst: %s imm: %d\", ins.Dst, ins.Constant)\n\t\tcase AbsMode:\n\t\t\tfmt.Fprintf(f, \"imm: %d\", ins.Constant)\n\t\tcase IndMode:\n\t\t\tfmt.Fprintf(f, \"dst: %s src: %s imm: %d\", ins.Dst, ins.Src, ins.Constant)\n\t\tcase MemMode, MemSXMode:\n\t\t\tfmt.Fprintf(f, \"dst: %s src: %s off: %d imm: %d\", ins.Dst, ins.Src, ins.Offset, ins.Constant)\n\t\tcase XAddMode:\n\t\t\tfmt.Fprintf(f, \"dst: %s src: %s\", ins.Dst, ins.Src)\n\t\t}\n\n\tcase cls.IsALU():\n\t\tfmt.Fprintf(f, \"%v\", op)\n\t\tif op == Swap.Op(ImmSource) {\n\t\t\tfmt.Fprintf(f, \"%d\", ins.Constant)\n\t\t}\n\n\t\tfmt.Fprintf(f, \" dst: %s \", ins.Dst)\n\t\tswitch {\n\t\tcase op.ALUOp() == Swap:\n\t\t\tbreak\n\t\tcase op.Source() == ImmSource:\n\t\t\tfmt.Fprintf(f, \"imm: %d\", ins.Constant)\n\t\tdefault:\n\t\t\tfmt.Fprintf(f, \"src: %s\", ins.Src)\n\t\t}\n\n\tcase cls.IsJump():\n\t\tfmt.Fprintf(f, \"%v \", op)\n\t\tswitch jop := op.JumpOp(); jop {\n\t\tcase Call:\n\t\t\tswitch ins.Src {\n\t\t\tcase PseudoCall:\n\t\t\t\t// bpf-to-bpf call\n\t\t\t\tfmt.Fprint(f, ins.Constant)\n\t\t\tcase PseudoKfuncCall:\n\t\t\t\t// kfunc call\n\t\t\t\tfmt.Fprintf(f, \"Kfunc(%d)\", ins.Constant)\n\t\t\tdefault:\n\t\t\t\tfmt.Fprint(f, BuiltinFunc(ins.Constant))\n\t\t\t}\n\n\t\tcase Ja:\n\t\t\tif ins.OpCode.Class() == Jump32Class {\n\t\t\t\tfmt.Fprintf(f, \"imm: %d\", ins.Constant)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(f, \"off: %d\", ins.Offset)\n\t\t\t}\n\n\t\tdefault:\n\t\t\tfmt.Fprintf(f, \"dst: %s off: %d \", ins.Dst, ins.Offset)\n\t\t\tif op.Source() == ImmSource {\n\t\t\t\tfmt.Fprintf(f, \"imm: %d\", ins.Constant)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(f, \"src: %s\", ins.Src)\n\t\t\t}\n\t\t}\n\tdefault:\n\t\tfmt.Fprintf(f, \"%v \", op)\n\t}\n\nref:\n\tif ins.Reference() != \"\" {\n\t\tfmt.Fprintf(f, \" <%s>\", ins.Reference())\n\t}\n}\n\nfunc (ins Instruction) equal(other Instruction) bool {\n\treturn ins.OpCode == other.OpCode &&\n\t\tins.Dst == other.Dst &&\n\t\tins.Src == other.Src &&\n\t\tins.Offset == other.Offset &&\n\t\tins.Constant == other.Constant\n}\n\n// Size returns the amount of bytes ins would occupy in binary form.\nfunc (ins Instruction) Size() uint64 {\n\treturn uint64(InstructionSize * ins.OpCode.rawInstructions())\n}\n\n// WithMetadata sets the given Metadata on the Instruction. e.g. to copy\n// Metadata from another Instruction when replacing it.\nfunc (ins Instruction) WithMetadata(meta Metadata) Instruction {\n\tins.Metadata = meta\n\treturn ins\n}\n\ntype symbolMeta struct{}\n\n// WithSymbol marks the Instruction as a Symbol, which other Instructions\n// can point to using corresponding calls to WithReference.\nfunc (ins Instruction) WithSymbol(name string) Instruction {\n\tins.Metadata.Set(symbolMeta{}, name)\n\treturn ins\n}\n\n// Sym creates a symbol.\n//\n// Deprecated: use WithSymbol instead.\nfunc (ins Instruction) Sym(name string) Instruction {\n\treturn ins.WithSymbol(name)\n}\n\n// Symbol returns the value ins has been marked with using WithSymbol,\n// otherwise returns an empty string. A symbol is often an Instruction\n// at the start of a function body.\nfunc (ins Instruction) Symbol() string {\n\tsym, _ := ins.Metadata.Get(symbolMeta{}).(string)\n\treturn sym\n}\n\ntype referenceMeta struct{}\n\n// WithReference makes ins reference another Symbol or map by name.\nfunc (ins Instruction) WithReference(ref string) Instruction {\n\tins.Metadata.Set(referenceMeta{}, ref)\n\treturn ins\n}\n\n// Reference returns the Symbol or map name referenced by ins, if any.\nfunc (ins Instruction) Reference() string {\n\tref, _ := ins.Metadata.Get(referenceMeta{}).(string)\n\treturn ref\n}\n\ntype mapMeta struct{}\n\n// Map returns the Map referenced by ins, if any.\n// An Instruction will contain a Map if e.g. it references an existing,\n// pinned map that was opened during ELF loading.\nfunc (ins Instruction) Map() FDer {\n\tfd, _ := ins.Metadata.Get(mapMeta{}).(FDer)\n\treturn fd\n}\n\ntype sourceMeta struct{}\n\n// WithSource adds source information about the Instruction.\nfunc (ins Instruction) WithSource(src fmt.Stringer) Instruction {\n\tins.Metadata.Set(sourceMeta{}, src)\n\treturn ins\n}\n\n// Source returns source information about the Instruction. The field is\n// present when the compiler emits BTF line info about the Instruction and\n// usually contains the line of source code responsible for it.\nfunc (ins Instruction) Source() fmt.Stringer {\n\tstr, _ := ins.Metadata.Get(sourceMeta{}).(fmt.Stringer)\n\treturn str\n}\n\n// A Comment can be passed to Instruction.WithSource to add a comment\n// to an instruction.\ntype Comment string\n\nfunc (s Comment) String() string {\n\treturn string(s)\n}\n\n// FDer represents a resource tied to an underlying file descriptor.\n// Used as a stand-in for e.g. ebpf.Map since that type cannot be\n// imported here and FD() is the only method we rely on.\ntype FDer interface {\n\tFD() int\n}\n\n// Instructions is an eBPF program.\ntype Instructions []Instruction\n\n// Unmarshal unmarshals an Instructions from a binary instruction stream.\n// All instructions in insns are replaced by instructions decoded from r.\nfunc (insns *Instructions) Unmarshal(r io.Reader, bo binary.ByteOrder) error {\n\tif len(*insns) > 0 {\n\t\t*insns = nil\n\t}\n\n\tvar offset uint64\n\tfor {\n\t\tvar ins Instruction\n\t\tn, err := ins.Unmarshal(r, bo)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"offset %d: %w\", offset, err)\n\t\t}\n\n\t\t*insns = append(*insns, ins)\n\t\toffset += n\n\t}\n\n\treturn nil\n}\n\n// Name returns the name of the function insns belongs to, if any.\nfunc (insns Instructions) Name() string {\n\tif len(insns) == 0 {\n\t\treturn \"\"\n\t}\n\treturn insns[0].Symbol()\n}\n\nfunc (insns Instructions) String() string {\n\treturn fmt.Sprint(insns)\n}\n\n// Size returns the amount of bytes insns would occupy in binary form.\nfunc (insns Instructions) Size() uint64 {\n\tvar sum uint64\n\tfor _, ins := range insns {\n\t\tsum += ins.Size()\n\t}\n\treturn sum\n}\n\n// AssociateMap updates all Instructions that Reference the given symbol\n// to point to an existing Map m instead.\n//\n// Returns ErrUnreferencedSymbol error if no references to symbol are found\n// in insns. If symbol is anything else than the symbol name of map (e.g.\n// a bpf2bpf subprogram), an error is returned.\nfunc (insns Instructions) AssociateMap(symbol string, m FDer) error {\n\tif symbol == \"\" {\n\t\treturn errors.New(\"empty symbol\")\n\t}\n\n\tvar found bool\n\tfor i := range insns {\n\t\tins := &insns[i]\n\t\tif ins.Reference() != symbol {\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := ins.AssociateMap(m); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tfound = true\n\t}\n\n\tif !found {\n\t\treturn fmt.Errorf(\"symbol %s: %w\", symbol, ErrUnreferencedSymbol)\n\t}\n\n\treturn nil\n}\n\n// RewriteMapPtr rewrites all loads of a specific map pointer to a new fd.\n//\n// Returns ErrUnreferencedSymbol if the symbol isn't used.\n//\n// Deprecated: use AssociateMap instead.\nfunc (insns Instructions) RewriteMapPtr(symbol string, fd int) error {\n\tif symbol == \"\" {\n\t\treturn errors.New(\"empty symbol\")\n\t}\n\n\tvar found bool\n\tfor i := range insns {\n\t\tins := &insns[i]\n\t\tif ins.Reference() != symbol {\n\t\t\tcontinue\n\t\t}\n\n\t\tif !ins.IsLoadFromMap() {\n\t\t\treturn errors.New(\"not a load from a map\")\n\t\t}\n\n\t\tins.encodeMapFD(fd)\n\n\t\tfound = true\n\t}\n\n\tif !found {\n\t\treturn fmt.Errorf(\"symbol %s: %w\", symbol, ErrUnreferencedSymbol)\n\t}\n\n\treturn nil\n}\n\n// SymbolOffsets returns the set of symbols and their offset in\n// the instructions.\nfunc (insns Instructions) SymbolOffsets() (map[string]int, error) {\n\toffsets := make(map[string]int)\n\n\tfor i, ins := range insns {\n\t\tif ins.Symbol() == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tif _, ok := offsets[ins.Symbol()]; ok {\n\t\t\treturn nil, fmt.Errorf(\"duplicate symbol %s\", ins.Symbol())\n\t\t}\n\n\t\toffsets[ins.Symbol()] = i\n\t}\n\n\treturn offsets, nil\n}\n\n// FunctionReferences returns a set of symbol names these Instructions make\n// bpf-to-bpf calls to.\nfunc (insns Instructions) FunctionReferences() []string {\n\tcalls := make(map[string]struct{})\n\tfor _, ins := range insns {\n\t\tif ins.Constant != -1 {\n\t\t\t// BPF-to-BPF calls have -1 constants.\n\t\t\tcontinue\n\t\t}\n\n\t\tif ins.Reference() == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tif !ins.IsFunctionReference() {\n\t\t\tcontinue\n\t\t}\n\n\t\tcalls[ins.Reference()] = struct{}{}\n\t}\n\n\tresult := make([]string, 0, len(calls))\n\tfor call := range calls {\n\t\tresult = append(result, call)\n\t}\n\n\tsort.Strings(result)\n\treturn result\n}\n\n// ReferenceOffsets returns the set of references and their offset in\n// the instructions.\nfunc (insns Instructions) ReferenceOffsets() map[string][]int {\n\toffsets := make(map[string][]int)\n\n\tfor i, ins := range insns {\n\t\tif ins.Reference() == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\toffsets[ins.Reference()] = append(offsets[ins.Reference()], i)\n\t}\n\n\treturn offsets\n}\n\n// Format implements fmt.Formatter.\n//\n// You can control indentation of symbols by\n// specifying a width. Setting a precision controls the indentation of\n// instructions.\n// The default character is a tab, which can be overridden by specifying\n// the ' ' space flag.\nfunc (insns Instructions) Format(f fmt.State, c rune) {\n\tif c != 's' && c != 'v' {\n\t\tfmt.Fprintf(f, \"{UNKNOWN FORMAT '%c'}\", c)\n\t\treturn\n\t}\n\n\t// Precision is better in this case, because it allows\n\t// specifying 0 padding easily.\n\tpadding, ok := f.Precision()\n\tif !ok {\n\t\tpadding = 1\n\t}\n\n\tindent := strings.Repeat(\"\\t\", padding)\n\tif f.Flag(' ') {\n\t\tindent = strings.Repeat(\" \", padding)\n\t}\n\n\tsymPadding, ok := f.Width()\n\tif !ok {\n\t\tsymPadding = padding - 1\n\t}\n\tif symPadding < 0 {\n\t\tsymPadding = 0\n\t}\n\n\tsymIndent := strings.Repeat(\"\\t\", symPadding)\n\tif f.Flag(' ') {\n\t\tsymIndent = strings.Repeat(\" \", symPadding)\n\t}\n\n\t// Guess how many digits we need at most, by assuming that all instructions\n\t// are double wide.\n\thighestOffset := len(insns) * 2\n\toffsetWidth := int(math.Ceil(math.Log10(float64(highestOffset))))\n\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tif iter.Ins.Symbol() != \"\" {\n\t\t\tfmt.Fprintf(f, \"%s%s:\\n\", symIndent, iter.Ins.Symbol())\n\t\t}\n\t\tif src := iter.Ins.Source(); src != nil {\n\t\t\tline := strings.TrimSpace(src.String())\n\t\t\tif line != \"\" {\n\t\t\t\tfmt.Fprintf(f, \"%s%*s; %s\\n\", indent, offsetWidth, \" \", line)\n\t\t\t}\n\t\t}\n\t\tfmt.Fprintf(f, \"%s%*d: %v\\n\", indent, offsetWidth, iter.Offset, iter.Ins)\n\t}\n}\n\n// Marshal encodes a BPF program into the kernel format.\n//\n// insns may be modified if there are unresolved jumps or bpf2bpf calls.\n//\n// Returns ErrUnsatisfiedProgramReference if there is a Reference Instruction\n// without a matching Symbol Instruction within insns.\nfunc (insns Instructions) Marshal(w io.Writer, bo binary.ByteOrder) error {\n\tif err := insns.encodeFunctionReferences(); err != nil {\n\t\treturn err\n\t}\n\n\tif err := insns.encodeMapPointers(); err != nil {\n\t\treturn err\n\t}\n\n\tfor i, ins := range insns {\n\t\tif _, err := ins.Marshal(w, bo); err != nil {\n\t\t\treturn fmt.Errorf(\"instruction %d: %w\", i, err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// Tag calculates the kernel tag for a series of instructions.\n//\n// It mirrors bpf_prog_calc_tag in the kernel and so can be compared\n// to ProgramInfo.Tag to figure out whether a loaded program matches\n// certain instructions.\nfunc (insns Instructions) Tag(bo binary.ByteOrder) (string, error) {\n\th := sha1.New()\n\tfor i, ins := range insns {\n\t\tif ins.IsLoadFromMap() {\n\t\t\tins.Constant = 0\n\t\t}\n\t\t_, err := ins.Marshal(h, bo)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"instruction %d: %w\", i, err)\n\t\t}\n\t}\n\treturn hex.EncodeToString(h.Sum(nil)[:sys.BPF_TAG_SIZE]), nil\n}\n\n// encodeFunctionReferences populates the Offset (or Constant, depending on\n// the instruction type) field of instructions with a Reference field to point\n// to the offset of the corresponding instruction with a matching Symbol field.\n//\n// Only Reference Instructions that are either jumps or BPF function references\n// (calls or function pointer loads) are populated.\n//\n// Returns ErrUnsatisfiedProgramReference if there is a Reference Instruction\n// without at least one corresponding Symbol Instruction within insns.\nfunc (insns Instructions) encodeFunctionReferences() error {\n\t// Index the offsets of instructions tagged as a symbol.\n\tsymbolOffsets := make(map[string]RawInstructionOffset)\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tins := iter.Ins\n\n\t\tif ins.Symbol() == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tif _, ok := symbolOffsets[ins.Symbol()]; ok {\n\t\t\treturn fmt.Errorf(\"duplicate symbol %s\", ins.Symbol())\n\t\t}\n\n\t\tsymbolOffsets[ins.Symbol()] = iter.Offset\n\t}\n\n\t// Find all instructions tagged as references to other symbols.\n\t// Depending on the instruction type, populate their constant or offset\n\t// fields to point to the symbol they refer to within the insn stream.\n\titer = insns.Iterate()\n\tfor iter.Next() {\n\t\ti := iter.Index\n\t\toffset := iter.Offset\n\t\tins := iter.Ins\n\n\t\tif ins.Reference() == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch {\n\t\tcase ins.IsFunctionReference() && ins.Constant == -1,\n\t\t\tins.OpCode == Ja.opCode(Jump32Class, ImmSource) && ins.Constant == -1:\n\t\t\tsymOffset, ok := symbolOffsets[ins.Reference()]\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"%s at insn %d: symbol %q: %w\", ins.OpCode, i, ins.Reference(), ErrUnsatisfiedProgramReference)\n\t\t\t}\n\n\t\t\tins.Constant = int64(symOffset - offset - 1)\n\n\t\tcase ins.OpCode.Class().IsJump() && ins.Offset == -1:\n\t\t\tsymOffset, ok := symbolOffsets[ins.Reference()]\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"%s at insn %d: symbol %q: %w\", ins.OpCode, i, ins.Reference(), ErrUnsatisfiedProgramReference)\n\t\t\t}\n\n\t\t\tins.Offset = int16(symOffset - offset - 1)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// encodeMapPointers finds all Map Instructions and encodes their FDs\n// into their Constant fields.\nfunc (insns Instructions) encodeMapPointers() error {\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tins := iter.Ins\n\n\t\tif !ins.IsLoadFromMap() {\n\t\t\tcontinue\n\t\t}\n\n\t\tm := ins.Map()\n\t\tif m == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tfd := m.FD()\n\t\tif fd < 0 {\n\t\t\treturn fmt.Errorf(\"map %s: %w\", m, sys.ErrClosedFd)\n\t\t}\n\n\t\tins.encodeMapFD(m.FD())\n\t}\n\n\treturn nil\n}\n\n// Iterate allows iterating a BPF program while keeping track of\n// various offsets.\n//\n// Modifying the instruction slice will lead to undefined behaviour.\nfunc (insns Instructions) Iterate() *InstructionIterator {\n\treturn &InstructionIterator{insns: insns}\n}\n\n// InstructionIterator iterates over a BPF program.\ntype InstructionIterator struct {\n\tinsns Instructions\n\t// The instruction in question.\n\tIns *Instruction\n\t// The index of the instruction in the original instruction slice.\n\tIndex int\n\t// The offset of the instruction in raw BPF instructions. This accounts\n\t// for double-wide instructions.\n\tOffset RawInstructionOffset\n}\n\n// Next returns true as long as there are any instructions remaining.\nfunc (iter *InstructionIterator) Next() bool {\n\tif len(iter.insns) == 0 {\n\t\treturn false\n\t}\n\n\tif iter.Ins != nil {\n\t\titer.Index++\n\t\titer.Offset += RawInstructionOffset(iter.Ins.OpCode.rawInstructions())\n\t}\n\titer.Ins = &iter.insns[0]\n\titer.insns = iter.insns[1:]\n\treturn true\n}\n\ntype bpfRegisters uint8\n\nfunc newBPFRegisters(dst, src Register, bo binary.ByteOrder) (bpfRegisters, error) {\n\tswitch bo {\n\tcase binary.LittleEndian:\n\t\treturn bpfRegisters((src << 4) | (dst & 0xF)), nil\n\tcase binary.BigEndian:\n\t\treturn bpfRegisters((dst << 4) | (src & 0xF)), nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unrecognized ByteOrder %T\", bo)\n\t}\n}\n\n// IsUnreferencedSymbol returns true if err was caused by\n// an unreferenced symbol.\n//\n// Deprecated: use errors.Is(err, asm.ErrUnreferencedSymbol).\nfunc IsUnreferencedSymbol(err error) bool {\n\treturn errors.Is(err, ErrUnreferencedSymbol)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/jump.go",
    "content": "package asm\n\n//go:generate go run golang.org/x/tools/cmd/stringer@latest -output jump_string.go -type=JumpOp\n\n// JumpOp affect control flow.\n//\n//\tmsb      lsb\n//\t+----+-+---+\n//\t|OP  |s|cls|\n//\t+----+-+---+\ntype JumpOp uint8\n\nconst jumpMask OpCode = 0xf0\n\nconst (\n\t// InvalidJumpOp is returned by getters when invoked\n\t// on non branch OpCodes\n\tInvalidJumpOp JumpOp = 0xff\n\t// Ja jumps by offset unconditionally\n\tJa JumpOp = 0x00\n\t// JEq jumps by offset if r == imm\n\tJEq JumpOp = 0x10\n\t// JGT jumps by offset if r > imm\n\tJGT JumpOp = 0x20\n\t// JGE jumps by offset if r >= imm\n\tJGE JumpOp = 0x30\n\t// JSet jumps by offset if r & imm\n\tJSet JumpOp = 0x40\n\t// JNE jumps by offset if r != imm\n\tJNE JumpOp = 0x50\n\t// JSGT jumps by offset if signed r > signed imm\n\tJSGT JumpOp = 0x60\n\t// JSGE jumps by offset if signed r >= signed imm\n\tJSGE JumpOp = 0x70\n\t// Call builtin or user defined function from imm\n\tCall JumpOp = 0x80\n\t// Exit ends execution, with value in r0\n\tExit JumpOp = 0x90\n\t// JLT jumps by offset if r < imm\n\tJLT JumpOp = 0xa0\n\t// JLE jumps by offset if r <= imm\n\tJLE JumpOp = 0xb0\n\t// JSLT jumps by offset if signed r < signed imm\n\tJSLT JumpOp = 0xc0\n\t// JSLE jumps by offset if signed r <= signed imm\n\tJSLE JumpOp = 0xd0\n)\n\n// Return emits an exit instruction.\n//\n// Requires a return value in R0.\nfunc Return() Instruction {\n\treturn Instruction{\n\t\tOpCode: OpCode(JumpClass).SetJumpOp(Exit),\n\t}\n}\n\n// Op returns the OpCode for a given jump source.\nfunc (op JumpOp) Op(source Source) OpCode {\n\treturn OpCode(JumpClass).SetJumpOp(op).SetSource(source)\n}\n\n// Imm compares 64 bit dst to 64 bit value (sign extended), and adjusts PC by offset if the condition is fulfilled.\nfunc (op JumpOp) Imm(dst Register, value int32, label string) Instruction {\n\treturn Instruction{\n\t\tOpCode:   op.opCode(JumpClass, ImmSource),\n\t\tDst:      dst,\n\t\tOffset:   -1,\n\t\tConstant: int64(value),\n\t}.WithReference(label)\n}\n\n// Imm32 compares 32 bit dst to 32 bit value, and adjusts PC by offset if the condition is fulfilled.\n// Requires kernel 5.1.\nfunc (op JumpOp) Imm32(dst Register, value int32, label string) Instruction {\n\treturn Instruction{\n\t\tOpCode:   op.opCode(Jump32Class, ImmSource),\n\t\tDst:      dst,\n\t\tOffset:   -1,\n\t\tConstant: int64(value),\n\t}.WithReference(label)\n}\n\n// Reg compares 64 bit dst to 64 bit src, and adjusts PC by offset if the condition is fulfilled.\nfunc (op JumpOp) Reg(dst, src Register, label string) Instruction {\n\treturn Instruction{\n\t\tOpCode: op.opCode(JumpClass, RegSource),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t\tOffset: -1,\n\t}.WithReference(label)\n}\n\n// Reg32 compares 32 bit dst to 32 bit src, and adjusts PC by offset if the condition is fulfilled.\n// Requires kernel 5.1.\nfunc (op JumpOp) Reg32(dst, src Register, label string) Instruction {\n\treturn Instruction{\n\t\tOpCode: op.opCode(Jump32Class, RegSource),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t\tOffset: -1,\n\t}.WithReference(label)\n}\n\nfunc (op JumpOp) opCode(class Class, source Source) OpCode {\n\tif op == Exit || op == Call {\n\t\treturn InvalidOpCode\n\t}\n\n\treturn OpCode(class).SetJumpOp(op).SetSource(source)\n}\n\n// LongJump returns a jump always instruction with a range of [-2^31, 2^31 - 1].\nfunc LongJump(label string) Instruction {\n\treturn Instruction{\n\t\tOpCode:   Ja.opCode(Jump32Class, ImmSource),\n\t\tConstant: -1,\n\t}.WithReference(label)\n}\n\n// Label adjusts PC to the address of the label.\nfunc (op JumpOp) Label(label string) Instruction {\n\tif op == Call {\n\t\treturn Instruction{\n\t\t\tOpCode:   OpCode(JumpClass).SetJumpOp(Call),\n\t\t\tSrc:      PseudoCall,\n\t\t\tConstant: -1,\n\t\t}.WithReference(label)\n\t}\n\n\treturn Instruction{\n\t\tOpCode: OpCode(JumpClass).SetJumpOp(op),\n\t\tOffset: -1,\n\t}.WithReference(label)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/jump_string.go",
    "content": "// Code generated by \"stringer -output jump_string.go -type=JumpOp\"; DO NOT EDIT.\n\npackage asm\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[InvalidJumpOp-255]\n\t_ = x[Ja-0]\n\t_ = x[JEq-16]\n\t_ = x[JGT-32]\n\t_ = x[JGE-48]\n\t_ = x[JSet-64]\n\t_ = x[JNE-80]\n\t_ = x[JSGT-96]\n\t_ = x[JSGE-112]\n\t_ = x[Call-128]\n\t_ = x[Exit-144]\n\t_ = x[JLT-160]\n\t_ = x[JLE-176]\n\t_ = x[JSLT-192]\n\t_ = x[JSLE-208]\n}\n\nconst _JumpOp_name = \"JaJEqJGTJGEJSetJNEJSGTJSGECallExitJLTJLEJSLTJSLEInvalidJumpOp\"\n\nvar _JumpOp_map = map[JumpOp]string{\n\t0:   _JumpOp_name[0:2],\n\t16:  _JumpOp_name[2:5],\n\t32:  _JumpOp_name[5:8],\n\t48:  _JumpOp_name[8:11],\n\t64:  _JumpOp_name[11:15],\n\t80:  _JumpOp_name[15:18],\n\t96:  _JumpOp_name[18:22],\n\t112: _JumpOp_name[22:26],\n\t128: _JumpOp_name[26:30],\n\t144: _JumpOp_name[30:34],\n\t160: _JumpOp_name[34:37],\n\t176: _JumpOp_name[37:40],\n\t192: _JumpOp_name[40:44],\n\t208: _JumpOp_name[44:48],\n\t255: _JumpOp_name[48:61],\n}\n\nfunc (i JumpOp) String() string {\n\tif str, ok := _JumpOp_map[i]; ok {\n\t\treturn str\n\t}\n\treturn \"JumpOp(\" + strconv.FormatInt(int64(i), 10) + \")\"\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/load_store.go",
    "content": "package asm\n\n//go:generate go run golang.org/x/tools/cmd/stringer@latest -output load_store_string.go -type=Mode,Size\n\n// Mode for load and store operations\n//\n//\tmsb      lsb\n//\t+---+--+---+\n//\t|MDE|sz|cls|\n//\t+---+--+---+\ntype Mode uint8\n\nconst modeMask OpCode = 0xe0\n\nconst (\n\t// InvalidMode is returned by getters when invoked\n\t// on non load / store OpCodes\n\tInvalidMode Mode = 0xff\n\t// ImmMode - immediate value\n\tImmMode Mode = 0x00\n\t// AbsMode - immediate value + offset\n\tAbsMode Mode = 0x20\n\t// IndMode - indirect (imm+src)\n\tIndMode Mode = 0x40\n\t// MemMode - load from memory\n\tMemMode Mode = 0x60\n\t// MemSXMode - load from memory, sign extension\n\tMemSXMode Mode = 0x80\n\t// XAddMode - add atomically across processors.\n\tXAddMode Mode = 0xc0\n)\n\n// Size of load and store operations\n//\n//\tmsb      lsb\n//\t+---+--+---+\n//\t|mde|SZ|cls|\n//\t+---+--+---+\ntype Size uint8\n\nconst sizeMask OpCode = 0x18\n\nconst (\n\t// InvalidSize is returned by getters when invoked\n\t// on non load / store OpCodes\n\tInvalidSize Size = 0xff\n\t// DWord - double word; 64 bits\n\tDWord Size = 0x18\n\t// Word - word; 32 bits\n\tWord Size = 0x00\n\t// Half - half-word; 16 bits\n\tHalf Size = 0x08\n\t// Byte - byte; 8 bits\n\tByte Size = 0x10\n)\n\n// Sizeof returns the size in bytes.\nfunc (s Size) Sizeof() int {\n\tswitch s {\n\tcase DWord:\n\t\treturn 8\n\tcase Word:\n\t\treturn 4\n\tcase Half:\n\t\treturn 2\n\tcase Byte:\n\t\treturn 1\n\tdefault:\n\t\treturn -1\n\t}\n}\n\n// LoadMemOp returns the OpCode to load a value of given size from memory.\nfunc LoadMemOp(size Size) OpCode {\n\treturn OpCode(LdXClass).SetMode(MemMode).SetSize(size)\n}\n\n// LoadMemSXOp returns the OpCode to load a value of given size from memory sign extended.\nfunc LoadMemSXOp(size Size) OpCode {\n\treturn OpCode(LdXClass).SetMode(MemSXMode).SetSize(size)\n}\n\n// LoadMem emits `dst = *(size *)(src + offset)`.\nfunc LoadMem(dst, src Register, offset int16, size Size) Instruction {\n\treturn Instruction{\n\t\tOpCode: LoadMemOp(size),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t\tOffset: offset,\n\t}\n}\n\n// LoadMemSX emits `dst = *(size *)(src + offset)` but sign extends dst.\nfunc LoadMemSX(dst, src Register, offset int16, size Size) Instruction {\n\tif size == DWord {\n\t\treturn Instruction{OpCode: InvalidOpCode}\n\t}\n\n\treturn Instruction{\n\t\tOpCode: LoadMemSXOp(size),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t\tOffset: offset,\n\t}\n}\n\n// LoadImmOp returns the OpCode to load an immediate of given size.\n//\n// As of kernel 4.20, only DWord size is accepted.\nfunc LoadImmOp(size Size) OpCode {\n\treturn OpCode(LdClass).SetMode(ImmMode).SetSize(size)\n}\n\n// LoadImm emits `dst = (size)value`.\n//\n// As of kernel 4.20, only DWord size is accepted.\nfunc LoadImm(dst Register, value int64, size Size) Instruction {\n\treturn Instruction{\n\t\tOpCode:   LoadImmOp(size),\n\t\tDst:      dst,\n\t\tConstant: value,\n\t}\n}\n\n// LoadMapPtr stores a pointer to a map in dst.\nfunc LoadMapPtr(dst Register, fd int) Instruction {\n\tif fd < 0 {\n\t\treturn Instruction{OpCode: InvalidOpCode}\n\t}\n\n\treturn Instruction{\n\t\tOpCode:   LoadImmOp(DWord),\n\t\tDst:      dst,\n\t\tSrc:      PseudoMapFD,\n\t\tConstant: int64(uint32(fd)),\n\t}\n}\n\n// LoadMapValue stores a pointer to the value at a certain offset of a map.\nfunc LoadMapValue(dst Register, fd int, offset uint32) Instruction {\n\tif fd < 0 {\n\t\treturn Instruction{OpCode: InvalidOpCode}\n\t}\n\n\tfdAndOffset := (uint64(offset) << 32) | uint64(uint32(fd))\n\treturn Instruction{\n\t\tOpCode:   LoadImmOp(DWord),\n\t\tDst:      dst,\n\t\tSrc:      PseudoMapValue,\n\t\tConstant: int64(fdAndOffset),\n\t}\n}\n\n// LoadIndOp returns the OpCode for loading a value of given size from an sk_buff.\nfunc LoadIndOp(size Size) OpCode {\n\treturn OpCode(LdClass).SetMode(IndMode).SetSize(size)\n}\n\n// LoadInd emits `dst = ntoh(*(size *)(((sk_buff *)R6)->data + src + offset))`.\nfunc LoadInd(dst, src Register, offset int32, size Size) Instruction {\n\treturn Instruction{\n\t\tOpCode:   LoadIndOp(size),\n\t\tDst:      dst,\n\t\tSrc:      src,\n\t\tConstant: int64(offset),\n\t}\n}\n\n// LoadAbsOp returns the OpCode for loading a value of given size from an sk_buff.\nfunc LoadAbsOp(size Size) OpCode {\n\treturn OpCode(LdClass).SetMode(AbsMode).SetSize(size)\n}\n\n// LoadAbs emits `r0 = ntoh(*(size *)(((sk_buff *)R6)->data + offset))`.\nfunc LoadAbs(offset int32, size Size) Instruction {\n\treturn Instruction{\n\t\tOpCode:   LoadAbsOp(size),\n\t\tDst:      R0,\n\t\tConstant: int64(offset),\n\t}\n}\n\n// StoreMemOp returns the OpCode for storing a register of given size in memory.\nfunc StoreMemOp(size Size) OpCode {\n\treturn OpCode(StXClass).SetMode(MemMode).SetSize(size)\n}\n\n// StoreMem emits `*(size *)(dst + offset) = src`\nfunc StoreMem(dst Register, offset int16, src Register, size Size) Instruction {\n\treturn Instruction{\n\t\tOpCode: StoreMemOp(size),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t\tOffset: offset,\n\t}\n}\n\n// StoreImmOp returns the OpCode for storing an immediate of given size in memory.\nfunc StoreImmOp(size Size) OpCode {\n\treturn OpCode(StClass).SetMode(MemMode).SetSize(size)\n}\n\n// StoreImm emits `*(size *)(dst + offset) = value`.\nfunc StoreImm(dst Register, offset int16, value int64, size Size) Instruction {\n\treturn Instruction{\n\t\tOpCode:   StoreImmOp(size),\n\t\tDst:      dst,\n\t\tOffset:   offset,\n\t\tConstant: value,\n\t}\n}\n\n// StoreXAddOp returns the OpCode to atomically add a register to a value in memory.\nfunc StoreXAddOp(size Size) OpCode {\n\treturn OpCode(StXClass).SetMode(XAddMode).SetSize(size)\n}\n\n// StoreXAdd atomically adds src to *dst.\nfunc StoreXAdd(dst, src Register, size Size) Instruction {\n\treturn Instruction{\n\t\tOpCode: StoreXAddOp(size),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/load_store_string.go",
    "content": "// Code generated by \"stringer -output load_store_string.go -type=Mode,Size\"; DO NOT EDIT.\n\npackage asm\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[InvalidMode-255]\n\t_ = x[ImmMode-0]\n\t_ = x[AbsMode-32]\n\t_ = x[IndMode-64]\n\t_ = x[MemMode-96]\n\t_ = x[MemSXMode-128]\n\t_ = x[XAddMode-192]\n}\n\nconst (\n\t_Mode_name_0 = \"ImmMode\"\n\t_Mode_name_1 = \"AbsMode\"\n\t_Mode_name_2 = \"IndMode\"\n\t_Mode_name_3 = \"MemMode\"\n\t_Mode_name_4 = \"MemSXMode\"\n\t_Mode_name_5 = \"XAddMode\"\n\t_Mode_name_6 = \"InvalidMode\"\n)\n\nfunc (i Mode) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _Mode_name_0\n\tcase i == 32:\n\t\treturn _Mode_name_1\n\tcase i == 64:\n\t\treturn _Mode_name_2\n\tcase i == 96:\n\t\treturn _Mode_name_3\n\tcase i == 128:\n\t\treturn _Mode_name_4\n\tcase i == 192:\n\t\treturn _Mode_name_5\n\tcase i == 255:\n\t\treturn _Mode_name_6\n\tdefault:\n\t\treturn \"Mode(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\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[InvalidSize-255]\n\t_ = x[DWord-24]\n\t_ = x[Word-0]\n\t_ = x[Half-8]\n\t_ = x[Byte-16]\n}\n\nconst (\n\t_Size_name_0 = \"Word\"\n\t_Size_name_1 = \"Half\"\n\t_Size_name_2 = \"Byte\"\n\t_Size_name_3 = \"DWord\"\n\t_Size_name_4 = \"InvalidSize\"\n)\n\nfunc (i Size) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _Size_name_0\n\tcase i == 8:\n\t\treturn _Size_name_1\n\tcase i == 16:\n\t\treturn _Size_name_2\n\tcase i == 24:\n\t\treturn _Size_name_3\n\tcase i == 255:\n\t\treturn _Size_name_4\n\tdefault:\n\t\treturn \"Size(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/metadata.go",
    "content": "package asm\n\n// Metadata contains metadata about an instruction.\ntype Metadata struct {\n\thead *metaElement\n}\n\ntype metaElement struct {\n\tnext       *metaElement\n\tkey, value interface{}\n}\n\n// Find the element containing key.\n//\n// Returns nil if there is no such element.\nfunc (m *Metadata) find(key interface{}) *metaElement {\n\tfor e := m.head; e != nil; e = e.next {\n\t\tif e.key == key {\n\t\t\treturn e\n\t\t}\n\t}\n\treturn nil\n}\n\n// Remove an element from the linked list.\n//\n// Copies as many elements of the list as necessary to remove r, but doesn't\n// perform a full copy.\nfunc (m *Metadata) remove(r *metaElement) {\n\tcurrent := &m.head\n\tfor e := m.head; e != nil; e = e.next {\n\t\tif e == r {\n\t\t\t// We've found the element we want to remove.\n\t\t\t*current = e.next\n\n\t\t\t// No need to copy the tail.\n\t\t\treturn\n\t\t}\n\n\t\t// There is another element in front of the one we want to remove.\n\t\t// We have to copy it to be able to change metaElement.next.\n\t\tcpy := &metaElement{key: e.key, value: e.value}\n\t\t*current = cpy\n\t\tcurrent = &cpy.next\n\t}\n}\n\n// Set a key to a value.\n//\n// If value is nil, the key is removed. Avoids modifying old metadata by\n// copying if necessary.\nfunc (m *Metadata) Set(key, value interface{}) {\n\tif e := m.find(key); e != nil {\n\t\tif e.value == value {\n\t\t\t// Key is present and the value is the same. Nothing to do.\n\t\t\treturn\n\t\t}\n\n\t\t// Key is present with a different value. Create a copy of the list\n\t\t// which doesn't have the element in it.\n\t\tm.remove(e)\n\t}\n\n\t// m.head is now a linked list that doesn't contain key.\n\tif value == nil {\n\t\treturn\n\t}\n\n\tm.head = &metaElement{key: key, value: value, next: m.head}\n}\n\n// Get the value of a key.\n//\n// Returns nil if no value with the given key is present.\nfunc (m *Metadata) Get(key interface{}) interface{} {\n\tif e := m.find(key); e != nil {\n\t\treturn e.value\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/opcode.go",
    "content": "package asm\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n//go:generate go run golang.org/x/tools/cmd/stringer@latest -output opcode_string.go -type=Class\n\n// Class of operations\n//\n//\tmsb      lsb\n//\t+---+--+---+\n//\t|  ??  |CLS|\n//\t+---+--+---+\ntype Class uint8\n\nconst classMask OpCode = 0x07\n\nconst (\n\t// LdClass loads immediate values into registers.\n\t// Also used for non-standard load operations from cBPF.\n\tLdClass Class = 0x00\n\t// LdXClass loads memory into registers.\n\tLdXClass Class = 0x01\n\t// StClass stores immediate values to memory.\n\tStClass Class = 0x02\n\t// StXClass stores registers to memory.\n\tStXClass Class = 0x03\n\t// ALUClass describes arithmetic operators.\n\tALUClass Class = 0x04\n\t// JumpClass describes jump operators.\n\tJumpClass Class = 0x05\n\t// Jump32Class describes jump operators with 32-bit comparisons.\n\t// Requires kernel 5.1.\n\tJump32Class Class = 0x06\n\t// ALU64Class describes arithmetic operators in 64-bit mode.\n\tALU64Class Class = 0x07\n)\n\n// IsLoad checks if this is either LdClass or LdXClass.\nfunc (cls Class) IsLoad() bool {\n\treturn cls == LdClass || cls == LdXClass\n}\n\n// IsStore checks if this is either StClass or StXClass.\nfunc (cls Class) IsStore() bool {\n\treturn cls == StClass || cls == StXClass\n}\n\nfunc (cls Class) isLoadOrStore() bool {\n\treturn cls.IsLoad() || cls.IsStore()\n}\n\n// IsALU checks if this is either ALUClass or ALU64Class.\nfunc (cls Class) IsALU() bool {\n\treturn cls == ALUClass || cls == ALU64Class\n}\n\n// IsJump checks if this is either JumpClass or Jump32Class.\nfunc (cls Class) IsJump() bool {\n\treturn cls == JumpClass || cls == Jump32Class\n}\n\nfunc (cls Class) isJumpOrALU() bool {\n\treturn cls.IsJump() || cls.IsALU()\n}\n\n// OpCode represents a single operation.\n// It is not a 1:1 mapping to real eBPF opcodes.\n//\n// The encoding varies based on a 3-bit Class:\n//\n//\t7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0\n//\t           ???           | CLS\n//\n// For ALUClass and ALUCLass32:\n//\n//\t7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0\n//\t           OPC         |S| CLS\n//\n// For LdClass, LdXclass, StClass and StXClass:\n//\n//\t7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0\n//\t        0      | MDE |SIZ| CLS\n//\n// For JumpClass, Jump32Class:\n//\n//\t7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0\n//\t        0      |  OPC  |S| CLS\ntype OpCode uint16\n\n// InvalidOpCode is returned by setters on OpCode\nconst InvalidOpCode OpCode = 0xffff\n\n// bpfOpCode returns the actual BPF opcode.\nfunc (op OpCode) bpfOpCode() (byte, error) {\n\tconst opCodeMask = 0xff\n\n\tif !valid(op, opCodeMask) {\n\t\treturn 0, fmt.Errorf(\"invalid opcode %x\", op)\n\t}\n\n\treturn byte(op & opCodeMask), nil\n}\n\n// rawInstructions returns the number of BPF instructions required\n// to encode this opcode.\nfunc (op OpCode) rawInstructions() int {\n\tif op.IsDWordLoad() {\n\t\treturn 2\n\t}\n\treturn 1\n}\n\nfunc (op OpCode) IsDWordLoad() bool {\n\treturn op == LoadImmOp(DWord)\n}\n\n// Class returns the class of operation.\nfunc (op OpCode) Class() Class {\n\treturn Class(op & classMask)\n}\n\n// Mode returns the mode for load and store operations.\nfunc (op OpCode) Mode() Mode {\n\tif !op.Class().isLoadOrStore() {\n\t\treturn InvalidMode\n\t}\n\treturn Mode(op & modeMask)\n}\n\n// Size returns the size for load and store operations.\nfunc (op OpCode) Size() Size {\n\tif !op.Class().isLoadOrStore() {\n\t\treturn InvalidSize\n\t}\n\treturn Size(op & sizeMask)\n}\n\n// Source returns the source for branch and ALU operations.\nfunc (op OpCode) Source() Source {\n\tif !op.Class().isJumpOrALU() || op.ALUOp() == Swap {\n\t\treturn InvalidSource\n\t}\n\treturn Source(op & sourceMask)\n}\n\n// ALUOp returns the ALUOp.\nfunc (op OpCode) ALUOp() ALUOp {\n\tif !op.Class().IsALU() {\n\t\treturn InvalidALUOp\n\t}\n\treturn ALUOp(op & aluMask)\n}\n\n// Endianness returns the Endianness for a byte swap instruction.\nfunc (op OpCode) Endianness() Endianness {\n\tif op.ALUOp() != Swap {\n\t\treturn InvalidEndian\n\t}\n\treturn Endianness(op & endianMask)\n}\n\n// JumpOp returns the JumpOp.\n// Returns InvalidJumpOp if it doesn't encode a jump.\nfunc (op OpCode) JumpOp() JumpOp {\n\tif !op.Class().IsJump() {\n\t\treturn InvalidJumpOp\n\t}\n\n\tjumpOp := JumpOp(op & jumpMask)\n\n\t// Some JumpOps are only supported by JumpClass, not Jump32Class.\n\tif op.Class() == Jump32Class && (jumpOp == Exit || jumpOp == Call) {\n\t\treturn InvalidJumpOp\n\t}\n\n\treturn jumpOp\n}\n\n// SetMode sets the mode on load and store operations.\n//\n// Returns InvalidOpCode if op is of the wrong class.\nfunc (op OpCode) SetMode(mode Mode) OpCode {\n\tif !op.Class().isLoadOrStore() || !valid(OpCode(mode), modeMask) {\n\t\treturn InvalidOpCode\n\t}\n\treturn (op & ^modeMask) | OpCode(mode)\n}\n\n// SetSize sets the size on load and store operations.\n//\n// Returns InvalidOpCode if op is of the wrong class.\nfunc (op OpCode) SetSize(size Size) OpCode {\n\tif !op.Class().isLoadOrStore() || !valid(OpCode(size), sizeMask) {\n\t\treturn InvalidOpCode\n\t}\n\treturn (op & ^sizeMask) | OpCode(size)\n}\n\n// SetSource sets the source on jump and ALU operations.\n//\n// Returns InvalidOpCode if op is of the wrong class.\nfunc (op OpCode) SetSource(source Source) OpCode {\n\tif !op.Class().isJumpOrALU() || !valid(OpCode(source), sourceMask) {\n\t\treturn InvalidOpCode\n\t}\n\treturn (op & ^sourceMask) | OpCode(source)\n}\n\n// SetALUOp sets the ALUOp on ALU operations.\n//\n// Returns InvalidOpCode if op is of the wrong class.\nfunc (op OpCode) SetALUOp(alu ALUOp) OpCode {\n\tif !op.Class().IsALU() || !valid(OpCode(alu), aluMask) {\n\t\treturn InvalidOpCode\n\t}\n\treturn (op & ^aluMask) | OpCode(alu)\n}\n\n// SetJumpOp sets the JumpOp on jump operations.\n//\n// Returns InvalidOpCode if op is of the wrong class.\nfunc (op OpCode) SetJumpOp(jump JumpOp) OpCode {\n\tif !op.Class().IsJump() || !valid(OpCode(jump), jumpMask) {\n\t\treturn InvalidOpCode\n\t}\n\n\tnewOp := (op & ^jumpMask) | OpCode(jump)\n\n\t// Check newOp is legal.\n\tif newOp.JumpOp() == InvalidJumpOp {\n\t\treturn InvalidOpCode\n\t}\n\n\treturn newOp\n}\n\nfunc (op OpCode) String() string {\n\tvar f strings.Builder\n\n\tswitch class := op.Class(); {\n\tcase class.isLoadOrStore():\n\t\tf.WriteString(strings.TrimSuffix(class.String(), \"Class\"))\n\n\t\tmode := op.Mode()\n\t\tf.WriteString(strings.TrimSuffix(mode.String(), \"Mode\"))\n\n\t\tswitch op.Size() {\n\t\tcase DWord:\n\t\t\tf.WriteString(\"DW\")\n\t\tcase Word:\n\t\t\tf.WriteString(\"W\")\n\t\tcase Half:\n\t\t\tf.WriteString(\"H\")\n\t\tcase Byte:\n\t\t\tf.WriteString(\"B\")\n\t\t}\n\n\tcase class.IsALU():\n\t\tif op.ALUOp() == Swap && op.Class() == ALU64Class {\n\t\t\t// B to make BSwap, uncontitional byte swap\n\t\t\tf.WriteString(\"B\")\n\t\t}\n\n\t\tf.WriteString(op.ALUOp().String())\n\n\t\tif op.ALUOp() == Swap {\n\t\t\tif op.Class() == ALUClass {\n\t\t\t\t// Width for Endian is controlled by Constant\n\t\t\t\tf.WriteString(op.Endianness().String())\n\t\t\t}\n\t\t} else {\n\t\t\tf.WriteString(strings.TrimSuffix(op.Source().String(), \"Source\"))\n\n\t\t\tif class == ALUClass {\n\t\t\t\tf.WriteString(\"32\")\n\t\t\t}\n\t\t}\n\n\tcase class.IsJump():\n\t\tf.WriteString(op.JumpOp().String())\n\n\t\tif class == Jump32Class {\n\t\t\tf.WriteString(\"32\")\n\t\t}\n\n\t\tif jop := op.JumpOp(); jop != Exit && jop != Call && jop != Ja {\n\t\t\tf.WriteString(strings.TrimSuffix(op.Source().String(), \"Source\"))\n\t\t}\n\n\tdefault:\n\t\tfmt.Fprintf(&f, \"OpCode(%#x)\", uint8(op))\n\t}\n\n\treturn f.String()\n}\n\n// valid returns true if all bits in value are covered by mask.\nfunc valid(value, mask OpCode) bool {\n\treturn value & ^mask == 0\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/opcode_string.go",
    "content": "// Code generated by \"stringer -output opcode_string.go -type=Class\"; DO NOT EDIT.\n\npackage asm\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[LdClass-0]\n\t_ = x[LdXClass-1]\n\t_ = x[StClass-2]\n\t_ = x[StXClass-3]\n\t_ = x[ALUClass-4]\n\t_ = x[JumpClass-5]\n\t_ = x[Jump32Class-6]\n\t_ = x[ALU64Class-7]\n}\n\nconst _Class_name = \"LdClassLdXClassStClassStXClassALUClassJumpClassJump32ClassALU64Class\"\n\nvar _Class_index = [...]uint8{0, 7, 15, 22, 30, 38, 47, 58, 68}\n\nfunc (i Class) String() string {\n\tif i >= Class(len(_Class_index)-1) {\n\t\treturn \"Class(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _Class_name[_Class_index[i]:_Class_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/register.go",
    "content": "package asm\n\nimport (\n\t\"fmt\"\n)\n\n// Register is the source or destination of most operations.\ntype Register uint8\n\n// R0 contains return values.\nconst R0 Register = 0\n\n// Registers for function arguments.\nconst (\n\tR1 Register = R0 + 1 + iota\n\tR2\n\tR3\n\tR4\n\tR5\n)\n\n// Callee saved registers preserved by function calls.\nconst (\n\tR6 Register = R5 + 1 + iota\n\tR7\n\tR8\n\tR9\n)\n\n// Read-only frame pointer to access stack.\nconst (\n\tR10 Register = R9 + 1\n\tRFP          = R10\n)\n\n// Pseudo registers used by 64bit loads and jumps\nconst (\n\tPseudoMapFD     = R1 // BPF_PSEUDO_MAP_FD\n\tPseudoMapValue  = R2 // BPF_PSEUDO_MAP_VALUE\n\tPseudoCall      = R1 // BPF_PSEUDO_CALL\n\tPseudoFunc      = R4 // BPF_PSEUDO_FUNC\n\tPseudoKfuncCall = R2 // BPF_PSEUDO_KFUNC_CALL\n)\n\nfunc (r Register) String() string {\n\tv := uint8(r)\n\tif v == 10 {\n\t\treturn \"rfp\"\n\t}\n\treturn fmt.Sprintf(\"r%d\", v)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/attachtype_string.go",
    "content": "// Code generated by \"stringer -type AttachType -trimprefix Attach\"; DO NOT EDIT.\n\npackage ebpf\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[AttachNone-0]\n\t_ = x[AttachCGroupInetIngress-0]\n\t_ = x[AttachCGroupInetEgress-1]\n\t_ = x[AttachCGroupInetSockCreate-2]\n\t_ = x[AttachCGroupSockOps-3]\n\t_ = x[AttachSkSKBStreamParser-4]\n\t_ = x[AttachSkSKBStreamVerdict-5]\n\t_ = x[AttachCGroupDevice-6]\n\t_ = x[AttachSkMsgVerdict-7]\n\t_ = x[AttachCGroupInet4Bind-8]\n\t_ = x[AttachCGroupInet6Bind-9]\n\t_ = x[AttachCGroupInet4Connect-10]\n\t_ = x[AttachCGroupInet6Connect-11]\n\t_ = x[AttachCGroupInet4PostBind-12]\n\t_ = x[AttachCGroupInet6PostBind-13]\n\t_ = x[AttachCGroupUDP4Sendmsg-14]\n\t_ = x[AttachCGroupUDP6Sendmsg-15]\n\t_ = x[AttachLircMode2-16]\n\t_ = x[AttachFlowDissector-17]\n\t_ = x[AttachCGroupSysctl-18]\n\t_ = x[AttachCGroupUDP4Recvmsg-19]\n\t_ = x[AttachCGroupUDP6Recvmsg-20]\n\t_ = x[AttachCGroupGetsockopt-21]\n\t_ = x[AttachCGroupSetsockopt-22]\n\t_ = x[AttachTraceRawTp-23]\n\t_ = x[AttachTraceFEntry-24]\n\t_ = x[AttachTraceFExit-25]\n\t_ = x[AttachModifyReturn-26]\n\t_ = x[AttachLSMMac-27]\n\t_ = x[AttachTraceIter-28]\n\t_ = x[AttachCgroupInet4GetPeername-29]\n\t_ = x[AttachCgroupInet6GetPeername-30]\n\t_ = x[AttachCgroupInet4GetSockname-31]\n\t_ = x[AttachCgroupInet6GetSockname-32]\n\t_ = x[AttachXDPDevMap-33]\n\t_ = x[AttachCgroupInetSockRelease-34]\n\t_ = x[AttachXDPCPUMap-35]\n\t_ = x[AttachSkLookup-36]\n\t_ = x[AttachXDP-37]\n\t_ = x[AttachSkSKBVerdict-38]\n\t_ = x[AttachSkReuseportSelect-39]\n\t_ = x[AttachSkReuseportSelectOrMigrate-40]\n\t_ = x[AttachPerfEvent-41]\n\t_ = x[AttachTraceKprobeMulti-42]\n\t_ = x[AttachTraceKprobeSession-56]\n\t_ = x[AttachLSMCgroup-43]\n\t_ = x[AttachStructOps-44]\n\t_ = x[AttachNetfilter-45]\n\t_ = x[AttachTCXIngress-46]\n\t_ = x[AttachTCXEgress-47]\n\t_ = x[AttachTraceUprobeMulti-48]\n\t_ = x[AttachCgroupUnixConnect-49]\n\t_ = x[AttachCgroupUnixSendmsg-50]\n\t_ = x[AttachCgroupUnixRecvmsg-51]\n\t_ = x[AttachCgroupUnixGetpeername-52]\n\t_ = x[AttachCgroupUnixGetsockname-53]\n\t_ = x[AttachNetkitPrimary-54]\n\t_ = x[AttachNetkitPeer-55]\n}\n\nconst _AttachType_name = \"NoneCGroupInetEgressCGroupInetSockCreateCGroupSockOpsSkSKBStreamParserSkSKBStreamVerdictCGroupDeviceSkMsgVerdictCGroupInet4BindCGroupInet6BindCGroupInet4ConnectCGroupInet6ConnectCGroupInet4PostBindCGroupInet6PostBindCGroupUDP4SendmsgCGroupUDP6SendmsgLircMode2FlowDissectorCGroupSysctlCGroupUDP4RecvmsgCGroupUDP6RecvmsgCGroupGetsockoptCGroupSetsockoptTraceRawTpTraceFEntryTraceFExitModifyReturnLSMMacTraceIterCgroupInet4GetPeernameCgroupInet6GetPeernameCgroupInet4GetSocknameCgroupInet6GetSocknameXDPDevMapCgroupInetSockReleaseXDPCPUMapSkLookupXDPSkSKBVerdictSkReuseportSelectSkReuseportSelectOrMigratePerfEventTraceKprobeMultiLSMCgroupStructOpsNetfilterTCXIngressTCXEgressTraceUprobeMultiCgroupUnixConnectCgroupUnixSendmsgCgroupUnixRecvmsgCgroupUnixGetpeernameCgroupUnixGetsocknameNetkitPrimaryNetkitPeerTraceKprobeSession\"\n\nvar _AttachType_index = [...]uint16{0, 4, 20, 40, 53, 70, 88, 100, 112, 127, 142, 160, 178, 197, 216, 233, 250, 259, 272, 284, 301, 318, 334, 350, 360, 371, 381, 393, 399, 408, 430, 452, 474, 496, 505, 526, 535, 543, 546, 558, 575, 601, 610, 626, 635, 644, 653, 663, 672, 688, 705, 722, 739, 760, 781, 794, 804, 822}\n\nfunc (i AttachType) String() string {\n\tif i >= AttachType(len(_AttachType_index)-1) {\n\t\treturn \"AttachType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _AttachType_name[_AttachType_index[i]:_AttachType_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/btf.go",
    "content": "package btf\n\nimport (\n\t\"bufio\"\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"os\"\n\t\"reflect\"\n\t\"sync\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\nconst btfMagic = 0xeB9F\n\n// Errors returned by BTF functions.\nvar (\n\tErrNotSupported    = internal.ErrNotSupported\n\tErrNotFound        = errors.New(\"not found\")\n\tErrNoExtendedInfo  = errors.New(\"no extended info\")\n\tErrMultipleMatches = errors.New(\"multiple matching types\")\n)\n\n// ID represents the unique ID of a BTF object.\ntype ID = sys.BTFID\n\n// immutableTypes is a set of types which musn't be changed.\ntype immutableTypes struct {\n\t// All types contained by the spec, not including types from the base in\n\t// case the spec was parsed from split BTF.\n\ttypes []Type\n\n\t// Type IDs indexed by type.\n\ttypeIDs map[Type]TypeID\n\n\t// The ID of the first type in types.\n\tfirstTypeID TypeID\n\n\t// Types indexed by essential name.\n\t// Includes all struct flavors and types with the same name.\n\tnamedTypes map[essentialName][]TypeID\n\n\t// Byte order of the types. This affects things like struct member order\n\t// when using bitfields.\n\tbyteOrder binary.ByteOrder\n}\n\nfunc (s *immutableTypes) typeByID(id TypeID) (Type, bool) {\n\tif id < s.firstTypeID {\n\t\treturn nil, false\n\t}\n\n\tindex := int(id - s.firstTypeID)\n\tif index >= len(s.types) {\n\t\treturn nil, false\n\t}\n\n\treturn s.types[index], true\n}\n\n// mutableTypes is a set of types which may be changed.\ntype mutableTypes struct {\n\timm           immutableTypes\n\tmu            sync.RWMutex    // protects copies below\n\tcopies        map[Type]Type   // map[orig]copy\n\tcopiedTypeIDs map[Type]TypeID // map[copy]origID\n}\n\n// add a type to the set of mutable types.\n//\n// Copies type and all of its children once. Repeated calls with the same type\n// do not copy again.\nfunc (mt *mutableTypes) add(typ Type, typeIDs map[Type]TypeID) Type {\n\tmt.mu.RLock()\n\tcpy, ok := mt.copies[typ]\n\tmt.mu.RUnlock()\n\n\tif ok {\n\t\t// Fast path: the type has been copied before.\n\t\treturn cpy\n\t}\n\n\t// modifyGraphPreorder copies the type graph node by node, so we can't drop\n\t// the lock in between.\n\tmt.mu.Lock()\n\tdefer mt.mu.Unlock()\n\n\treturn copyType(typ, typeIDs, mt.copies, mt.copiedTypeIDs)\n}\n\n// copy a set of mutable types.\nfunc (mt *mutableTypes) copy() *mutableTypes {\n\tif mt == nil {\n\t\treturn nil\n\t}\n\n\t// Prevent concurrent modification of mt.copiedTypeIDs.\n\tmt.mu.RLock()\n\tdefer mt.mu.RUnlock()\n\n\tmtCopy := &mutableTypes{\n\t\tmt.imm,\n\t\tsync.RWMutex{},\n\t\tmake(map[Type]Type, len(mt.copies)),\n\t\tmake(map[Type]TypeID, len(mt.copiedTypeIDs)),\n\t}\n\n\tcopiesOfCopies := make(map[Type]Type, len(mt.copies))\n\tfor orig, copy := range mt.copies {\n\t\t// NB: We make a copy of copy, not orig, so that changes to mutable types\n\t\t// are preserved.\n\t\tcopyOfCopy := copyType(copy, mt.copiedTypeIDs, copiesOfCopies, mtCopy.copiedTypeIDs)\n\t\tmtCopy.copies[orig] = copyOfCopy\n\t}\n\n\treturn mtCopy\n}\n\nfunc (mt *mutableTypes) typeID(typ Type) (TypeID, error) {\n\tif _, ok := typ.(*Void); ok {\n\t\t// Equality is weird for void, since it is a zero sized type.\n\t\treturn 0, nil\n\t}\n\n\tmt.mu.RLock()\n\tdefer mt.mu.RUnlock()\n\n\tid, ok := mt.copiedTypeIDs[typ]\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"no ID for type %s: %w\", typ, ErrNotFound)\n\t}\n\n\treturn id, nil\n}\n\nfunc (mt *mutableTypes) typeByID(id TypeID) (Type, bool) {\n\timmT, ok := mt.imm.typeByID(id)\n\tif !ok {\n\t\treturn nil, false\n\t}\n\n\treturn mt.add(immT, mt.imm.typeIDs), true\n}\n\nfunc (mt *mutableTypes) anyTypesByName(name string) ([]Type, error) {\n\timmTypes := mt.imm.namedTypes[newEssentialName(name)]\n\tif len(immTypes) == 0 {\n\t\treturn nil, fmt.Errorf(\"type name %s: %w\", name, ErrNotFound)\n\t}\n\n\t// Return a copy to prevent changes to namedTypes.\n\tresult := make([]Type, 0, len(immTypes))\n\tfor _, id := range immTypes {\n\t\timmT, ok := mt.imm.typeByID(id)\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"no type with ID %d\", id)\n\t\t}\n\n\t\t// Match against the full name, not just the essential one\n\t\t// in case the type being looked up is a struct flavor.\n\t\tif immT.TypeName() == name {\n\t\t\tresult = append(result, mt.add(immT, mt.imm.typeIDs))\n\t\t}\n\t}\n\treturn result, nil\n}\n\n// Spec allows querying a set of Types and loading the set into the\n// kernel.\ntype Spec struct {\n\t*mutableTypes\n\n\t// String table from ELF.\n\tstrings *stringTable\n}\n\n// LoadSpec opens file and calls LoadSpecFromReader on it.\nfunc LoadSpec(file string) (*Spec, error) {\n\tfh, err := os.Open(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer fh.Close()\n\n\treturn LoadSpecFromReader(fh)\n}\n\n// LoadSpecFromReader reads from an ELF or a raw BTF blob.\n//\n// Returns ErrNotFound if reading from an ELF which contains no BTF. ExtInfos\n// may be nil.\nfunc LoadSpecFromReader(rd io.ReaderAt) (*Spec, error) {\n\tfile, err := internal.NewSafeELFFile(rd)\n\tif err != nil {\n\t\tif bo := guessRawBTFByteOrder(rd); bo != nil {\n\t\t\treturn loadRawSpec(io.NewSectionReader(rd, 0, math.MaxInt64), bo, nil)\n\t\t}\n\n\t\treturn nil, err\n\t}\n\n\treturn loadSpecFromELF(file)\n}\n\n// LoadSpecAndExtInfosFromReader reads from an ELF.\n//\n// ExtInfos may be nil if the ELF doesn't contain section metadata.\n// Returns ErrNotFound if the ELF contains no BTF.\nfunc LoadSpecAndExtInfosFromReader(rd io.ReaderAt) (*Spec, *ExtInfos, error) {\n\tfile, err := internal.NewSafeELFFile(rd)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tspec, err := loadSpecFromELF(file)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\textInfos, err := loadExtInfosFromELF(file, spec)\n\tif err != nil && !errors.Is(err, ErrNotFound) {\n\t\treturn nil, nil, err\n\t}\n\n\treturn spec, extInfos, nil\n}\n\n// symbolOffsets extracts all symbols offsets from an ELF and indexes them by\n// section and variable name.\n//\n// References to variables in BTF data sections carry unsigned 32-bit offsets.\n// Some ELF symbols (e.g. in vmlinux) may point to virtual memory that is well\n// beyond this range. Since these symbols cannot be described by BTF info,\n// ignore them here.\nfunc symbolOffsets(file *internal.SafeELFFile) (map[symbol]uint32, error) {\n\tsymbols, err := file.Symbols()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't read symbols: %v\", err)\n\t}\n\n\toffsets := make(map[symbol]uint32)\n\tfor _, sym := range symbols {\n\t\tif idx := sym.Section; idx >= elf.SHN_LORESERVE && idx <= elf.SHN_HIRESERVE {\n\t\t\t// Ignore things like SHN_ABS\n\t\t\tcontinue\n\t\t}\n\n\t\tif sym.Value > math.MaxUint32 {\n\t\t\t// VarSecinfo offset is u32, cannot reference symbols in higher regions.\n\t\t\tcontinue\n\t\t}\n\n\t\tif int(sym.Section) >= len(file.Sections) {\n\t\t\treturn nil, fmt.Errorf(\"symbol %s: invalid section %d\", sym.Name, sym.Section)\n\t\t}\n\n\t\tsecName := file.Sections[sym.Section].Name\n\t\toffsets[symbol{secName, sym.Name}] = uint32(sym.Value)\n\t}\n\n\treturn offsets, nil\n}\n\nfunc loadSpecFromELF(file *internal.SafeELFFile) (*Spec, error) {\n\tvar (\n\t\tbtfSection   *elf.Section\n\t\tsectionSizes = make(map[string]uint32)\n\t)\n\n\tfor _, sec := range file.Sections {\n\t\tswitch sec.Name {\n\t\tcase \".BTF\":\n\t\t\tbtfSection = sec\n\t\tdefault:\n\t\t\tif sec.Type != elf.SHT_PROGBITS && sec.Type != elf.SHT_NOBITS {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tif sec.Size > math.MaxUint32 {\n\t\t\t\treturn nil, fmt.Errorf(\"section %s exceeds maximum size\", sec.Name)\n\t\t\t}\n\n\t\t\tsectionSizes[sec.Name] = uint32(sec.Size)\n\t\t}\n\t}\n\n\tif btfSection == nil {\n\t\treturn nil, fmt.Errorf(\"btf: %w\", ErrNotFound)\n\t}\n\n\toffsets, err := symbolOffsets(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif btfSection.ReaderAt == nil {\n\t\treturn nil, fmt.Errorf(\"compressed BTF is not supported\")\n\t}\n\n\tspec, err := loadRawSpec(btfSection.ReaderAt, file.ByteOrder, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = fixupDatasec(spec.imm.types, sectionSizes, offsets)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn spec, nil\n}\n\nfunc loadRawSpec(btf io.ReaderAt, bo binary.ByteOrder, base *Spec) (*Spec, error) {\n\tvar (\n\t\tbaseStrings *stringTable\n\t\tfirstTypeID TypeID\n\t\terr         error\n\t)\n\n\tif base != nil {\n\t\tif base.imm.firstTypeID != 0 {\n\t\t\treturn nil, fmt.Errorf(\"can't use split BTF as base\")\n\t\t}\n\n\t\tbaseStrings = base.strings\n\n\t\tfirstTypeID, err = base.nextTypeID()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\ttypes, rawStrings, err := parseBTF(btf, bo, baseStrings, base)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttypeIDs, typesByName := indexTypes(types, firstTypeID)\n\n\treturn &Spec{\n\t\t&mutableTypes{\n\t\t\timmutableTypes{\n\t\t\t\ttypes,\n\t\t\t\ttypeIDs,\n\t\t\t\tfirstTypeID,\n\t\t\t\ttypesByName,\n\t\t\t\tbo,\n\t\t\t},\n\t\t\tsync.RWMutex{},\n\t\t\tmake(map[Type]Type),\n\t\t\tmake(map[Type]TypeID),\n\t\t},\n\t\trawStrings,\n\t}, nil\n}\n\nfunc indexTypes(types []Type, firstTypeID TypeID) (map[Type]TypeID, map[essentialName][]TypeID) {\n\tnamedTypes := 0\n\tfor _, typ := range types {\n\t\tif typ.TypeName() != \"\" {\n\t\t\t// Do a pre-pass to figure out how big types by name has to be.\n\t\t\t// Most types have unique names, so it's OK to ignore essentialName\n\t\t\t// here.\n\t\t\tnamedTypes++\n\t\t}\n\t}\n\n\ttypeIDs := make(map[Type]TypeID, len(types))\n\ttypesByName := make(map[essentialName][]TypeID, namedTypes)\n\n\tfor i, typ := range types {\n\t\tid := firstTypeID + TypeID(i)\n\t\ttypeIDs[typ] = id\n\n\t\tif name := newEssentialName(typ.TypeName()); name != \"\" {\n\t\t\ttypesByName[name] = append(typesByName[name], id)\n\t\t}\n\t}\n\n\treturn typeIDs, typesByName\n}\n\nfunc guessRawBTFByteOrder(r io.ReaderAt) binary.ByteOrder {\n\tbuf := new(bufio.Reader)\n\tfor _, bo := range []binary.ByteOrder{\n\t\tbinary.LittleEndian,\n\t\tbinary.BigEndian,\n\t} {\n\t\tbuf.Reset(io.NewSectionReader(r, 0, math.MaxInt64))\n\t\tif _, err := parseBTFHeader(buf, bo); err == nil {\n\t\t\treturn bo\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// parseBTF reads a .BTF section into memory and parses it into a list of\n// raw types and a string table.\nfunc parseBTF(btf io.ReaderAt, bo binary.ByteOrder, baseStrings *stringTable, base *Spec) ([]Type, *stringTable, error) {\n\tbuf := internal.NewBufferedSectionReader(btf, 0, math.MaxInt64)\n\theader, err := parseBTFHeader(buf, bo)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"parsing .BTF header: %v\", err)\n\t}\n\n\trawStrings, err := readStringTable(io.NewSectionReader(btf, header.stringStart(), int64(header.StringLen)),\n\t\tbaseStrings)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"can't read type names: %w\", err)\n\t}\n\n\tbuf.Reset(io.NewSectionReader(btf, header.typeStart(), int64(header.TypeLen)))\n\ttypes, err := readAndInflateTypes(buf, bo, header.TypeLen, rawStrings, base)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\treturn types, rawStrings, nil\n}\n\ntype symbol struct {\n\tsection string\n\tname    string\n}\n\n// fixupDatasec attempts to patch up missing info in Datasecs and its members by\n// supplementing them with information from the ELF headers and symbol table.\nfunc fixupDatasec(types []Type, sectionSizes map[string]uint32, offsets map[symbol]uint32) error {\n\tfor _, typ := range types {\n\t\tds, ok := typ.(*Datasec)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tname := ds.Name\n\n\t\t// Some Datasecs are virtual and don't have corresponding ELF sections.\n\t\tswitch name {\n\t\tcase \".ksyms\":\n\t\t\t// .ksyms describes forward declarations of kfunc signatures, as well as\n\t\t\t// references to kernel symbols.\n\t\t\t// Nothing to fix up, all sizes and offsets are 0.\n\t\t\tfor _, vsi := range ds.Vars {\n\t\t\t\tswitch t := vsi.Type.(type) {\n\t\t\t\tcase *Func:\n\t\t\t\t\tcontinue\n\t\t\t\tcase *Var:\n\t\t\t\t\tif _, ok := t.Type.(*Void); !ok {\n\t\t\t\t\t\treturn fmt.Errorf(\"data section %s: expected %s to be *Void, not %T: %w\", name, vsi.Type.TypeName(), vsi.Type, ErrNotSupported)\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\treturn fmt.Errorf(\"data section %s: expected to be either *btf.Func or *btf.Var, not %T: %w\", name, vsi.Type, ErrNotSupported)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontinue\n\t\tcase \".kconfig\":\n\t\t\t// .kconfig has a size of 0 and has all members' offsets set to 0.\n\t\t\t// Fix up all offsets and set the Datasec's size.\n\t\t\tif err := fixupDatasecLayout(ds); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Fix up extern to global linkage to avoid a BTF verifier error.\n\t\t\tfor _, vsi := range ds.Vars {\n\t\t\t\tvsi.Type.(*Var).Linkage = GlobalVar\n\t\t\t}\n\n\t\t\tcontinue\n\t\t}\n\n\t\tif ds.Size != 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tds.Size, ok = sectionSizes[name]\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"data section %s: missing size\", name)\n\t\t}\n\n\t\tfor i := range ds.Vars {\n\t\t\tsymName := ds.Vars[i].Type.TypeName()\n\t\t\tds.Vars[i].Offset, ok = offsets[symbol{name, symName}]\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"data section %s: missing offset for symbol %s\", name, symName)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// fixupDatasecLayout populates ds.Vars[].Offset according to var sizes and\n// alignment. Calculate and set ds.Size.\nfunc fixupDatasecLayout(ds *Datasec) error {\n\tvar off uint32\n\n\tfor i, vsi := range ds.Vars {\n\t\tv, ok := vsi.Type.(*Var)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"member %d: unsupported type %T\", i, vsi.Type)\n\t\t}\n\n\t\tsize, err := Sizeof(v.Type)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"variable %s: getting size: %w\", v.Name, err)\n\t\t}\n\t\talign, err := alignof(v.Type)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"variable %s: getting alignment: %w\", v.Name, err)\n\t\t}\n\n\t\t// Align the current member based on the offset of the end of the previous\n\t\t// member and the alignment of the current member.\n\t\toff = internal.Align(off, uint32(align))\n\n\t\tds.Vars[i].Offset = off\n\n\t\toff += uint32(size)\n\t}\n\n\tds.Size = off\n\n\treturn nil\n}\n\n// Copy creates a copy of Spec.\nfunc (s *Spec) Copy() *Spec {\n\tif s == nil {\n\t\treturn nil\n\t}\n\n\treturn &Spec{\n\t\ts.mutableTypes.copy(),\n\t\ts.strings,\n\t}\n}\n\ntype sliceWriter []byte\n\nfunc (sw sliceWriter) Write(p []byte) (int, error) {\n\tif len(p) != len(sw) {\n\t\treturn 0, errors.New(\"size doesn't match\")\n\t}\n\n\treturn copy(sw, p), nil\n}\n\n// nextTypeID returns the next unallocated type ID or an error if there are no\n// more type IDs.\nfunc (s *Spec) nextTypeID() (TypeID, error) {\n\tid := s.imm.firstTypeID + TypeID(len(s.imm.types))\n\tif id < s.imm.firstTypeID {\n\t\treturn 0, fmt.Errorf(\"no more type IDs\")\n\t}\n\treturn id, nil\n}\n\n// TypeByID returns the BTF Type with the given type ID.\n//\n// Returns an error wrapping ErrNotFound if a Type with the given ID\n// does not exist in the Spec.\nfunc (s *Spec) TypeByID(id TypeID) (Type, error) {\n\ttyp, ok := s.typeByID(id)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"look up type with ID %d (first ID is %d): %w\", id, s.imm.firstTypeID, ErrNotFound)\n\t}\n\n\treturn typ, nil\n}\n\n// TypeID returns the ID for a given Type.\n//\n// Returns an error wrapping [ErrNotFound] if the type isn't part of the Spec.\nfunc (s *Spec) TypeID(typ Type) (TypeID, error) {\n\treturn s.mutableTypes.typeID(typ)\n}\n\n// AnyTypesByName returns a list of BTF Types with the given name.\n//\n// If the BTF blob describes multiple compilation units like vmlinux, multiple\n// Types with the same name and kind can exist, but might not describe the same\n// data structure.\n//\n// Returns an error wrapping ErrNotFound if no matching Type exists in the Spec.\nfunc (s *Spec) AnyTypesByName(name string) ([]Type, error) {\n\treturn s.mutableTypes.anyTypesByName(name)\n}\n\n// AnyTypeByName returns a Type with the given name.\n//\n// Returns an error if multiple types of that name exist.\nfunc (s *Spec) AnyTypeByName(name string) (Type, error) {\n\ttypes, err := s.AnyTypesByName(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(types) > 1 {\n\t\treturn nil, fmt.Errorf(\"found multiple types: %v\", types)\n\t}\n\n\treturn types[0], nil\n}\n\n// TypeByName searches for a Type with a specific name. Since multiple Types\n// with the same name can exist, the parameter typ is taken to narrow down the\n// search in case of a clash.\n//\n// typ must be a non-nil pointer to an implementation of a Type. On success, the\n// address of the found Type will be copied to typ.\n//\n// Returns an error wrapping ErrNotFound if no matching Type exists in the Spec.\n// Returns an error wrapping ErrMultipleTypes if multiple candidates are found.\nfunc (s *Spec) TypeByName(name string, typ interface{}) error {\n\ttypeInterface := reflect.TypeOf((*Type)(nil)).Elem()\n\n\t// typ may be **T or *Type\n\ttypValue := reflect.ValueOf(typ)\n\tif typValue.Kind() != reflect.Ptr {\n\t\treturn fmt.Errorf(\"%T is not a pointer\", typ)\n\t}\n\n\ttypPtr := typValue.Elem()\n\tif !typPtr.CanSet() {\n\t\treturn fmt.Errorf(\"%T cannot be set\", typ)\n\t}\n\n\twanted := typPtr.Type()\n\tif wanted == typeInterface {\n\t\t// This is *Type. Unwrap the value's type.\n\t\twanted = typPtr.Elem().Type()\n\t}\n\n\tif !wanted.AssignableTo(typeInterface) {\n\t\treturn fmt.Errorf(\"%T does not satisfy Type interface\", typ)\n\t}\n\n\ttypes, err := s.AnyTypesByName(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar candidate Type\n\tfor _, typ := range types {\n\t\tif reflect.TypeOf(typ) != wanted {\n\t\t\tcontinue\n\t\t}\n\n\t\tif candidate != nil {\n\t\t\treturn fmt.Errorf(\"type %s(%T): %w\", name, typ, ErrMultipleMatches)\n\t\t}\n\n\t\tcandidate = typ\n\t}\n\n\tif candidate == nil {\n\t\treturn fmt.Errorf(\"%s %s: %w\", wanted, name, ErrNotFound)\n\t}\n\n\ttypPtr.Set(reflect.ValueOf(candidate))\n\n\treturn nil\n}\n\n// LoadSplitSpecFromReader loads split BTF from a reader.\n//\n// Types from base are used to resolve references in the split BTF.\n// The returned Spec only contains types from the split BTF, not from the base.\nfunc LoadSplitSpecFromReader(r io.ReaderAt, base *Spec) (*Spec, error) {\n\treturn loadRawSpec(r, internal.NativeEndian, base)\n}\n\n// TypesIterator iterates over types of a given spec.\ntype TypesIterator struct {\n\tspec *Spec\n\tid   TypeID\n\tdone bool\n\t// The last visited type in the spec.\n\tType Type\n}\n\n// Iterate returns the types iterator.\nfunc (s *Spec) Iterate() *TypesIterator {\n\treturn &TypesIterator{spec: s, id: s.imm.firstTypeID}\n}\n\n// Next returns true as long as there are any remaining types.\nfunc (iter *TypesIterator) Next() bool {\n\tif iter.done {\n\t\treturn false\n\t}\n\n\tvar ok bool\n\titer.Type, ok = iter.spec.typeByID(iter.id)\n\titer.id++\n\titer.done = !ok\n\tif !iter.done {\n\t\t// Skip declTags, during unmarshaling declTags become `Tags` fields of other types.\n\t\t// We keep them in the spec to avoid holes in the ID space, but for the purposes of\n\t\t// iteration, they are not useful to the user.\n\t\tif _, ok := iter.Type.(*declTag); ok {\n\t\t\treturn iter.Next()\n\t\t}\n\t}\n\treturn !iter.done\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/btf_types.go",
    "content": "package btf\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/internal\"\n)\n\n//go:generate go run golang.org/x/tools/cmd/stringer@latest -linecomment -output=btf_types_string.go -type=FuncLinkage,VarLinkage,btfKind\n\n// btfKind describes a Type.\ntype btfKind uint8\n\n// Equivalents of the BTF_KIND_* constants.\nconst (\n\tkindUnknown  btfKind = iota // Unknown\n\tkindInt                     // Int\n\tkindPointer                 // Pointer\n\tkindArray                   // Array\n\tkindStruct                  // Struct\n\tkindUnion                   // Union\n\tkindEnum                    // Enum\n\tkindForward                 // Forward\n\tkindTypedef                 // Typedef\n\tkindVolatile                // Volatile\n\tkindConst                   // Const\n\tkindRestrict                // Restrict\n\t// Added ~4.20\n\tkindFunc      // Func\n\tkindFuncProto // FuncProto\n\t// Added ~5.1\n\tkindVar     // Var\n\tkindDatasec // Datasec\n\t// Added ~5.13\n\tkindFloat // Float\n\t// Added 5.16\n\tkindDeclTag // DeclTag\n\t// Added 5.17\n\tkindTypeTag // TypeTag\n\t// Added 6.0\n\tkindEnum64 // Enum64\n)\n\n// FuncLinkage describes BTF function linkage metadata.\ntype FuncLinkage int\n\n// Equivalent of enum btf_func_linkage.\nconst (\n\tStaticFunc FuncLinkage = iota // static\n\tGlobalFunc                    // global\n\tExternFunc                    // extern\n)\n\n// VarLinkage describes BTF variable linkage metadata.\ntype VarLinkage int\n\nconst (\n\tStaticVar VarLinkage = iota // static\n\tGlobalVar                   // global\n\tExternVar                   // extern\n)\n\nconst (\n\tbtfTypeKindShift     = 24\n\tbtfTypeKindLen       = 5\n\tbtfTypeVlenShift     = 0\n\tbtfTypeVlenMask      = 16\n\tbtfTypeKindFlagShift = 31\n\tbtfTypeKindFlagMask  = 1\n)\n\nvar btfHeaderLen = binary.Size(&btfHeader{})\n\ntype btfHeader struct {\n\tMagic   uint16\n\tVersion uint8\n\tFlags   uint8\n\tHdrLen  uint32\n\n\tTypeOff   uint32\n\tTypeLen   uint32\n\tStringOff uint32\n\tStringLen uint32\n}\n\n// typeStart returns the offset from the beginning of the .BTF section\n// to the start of its type entries.\nfunc (h *btfHeader) typeStart() int64 {\n\treturn int64(h.HdrLen + h.TypeOff)\n}\n\n// stringStart returns the offset from the beginning of the .BTF section\n// to the start of its string table.\nfunc (h *btfHeader) stringStart() int64 {\n\treturn int64(h.HdrLen + h.StringOff)\n}\n\n// parseBTFHeader parses the header of the .BTF section.\nfunc parseBTFHeader(r io.Reader, bo binary.ByteOrder) (*btfHeader, error) {\n\tvar header btfHeader\n\tif err := binary.Read(r, bo, &header); err != nil {\n\t\treturn nil, fmt.Errorf(\"can't read header: %v\", err)\n\t}\n\n\tif header.Magic != btfMagic {\n\t\treturn nil, fmt.Errorf(\"incorrect magic value %v\", header.Magic)\n\t}\n\n\tif header.Version != 1 {\n\t\treturn nil, fmt.Errorf(\"unexpected version %v\", header.Version)\n\t}\n\n\tif header.Flags != 0 {\n\t\treturn nil, fmt.Errorf(\"unsupported flags %v\", header.Flags)\n\t}\n\n\tremainder := int64(header.HdrLen) - int64(binary.Size(&header))\n\tif remainder < 0 {\n\t\treturn nil, errors.New(\"header length shorter than btfHeader size\")\n\t}\n\n\tif _, err := io.CopyN(internal.DiscardZeroes{}, r, remainder); err != nil {\n\t\treturn nil, fmt.Errorf(\"header padding: %v\", err)\n\t}\n\n\treturn &header, nil\n}\n\nvar btfTypeLen = binary.Size(btfType{})\n\n// btfType is equivalent to struct btf_type in Documentation/bpf/btf.rst.\ntype btfType struct {\n\tNameOff uint32\n\t/* \"info\" bits arrangement\n\t * bits  0-15: vlen (e.g. # of struct's members), linkage\n\t * bits 16-23: unused\n\t * bits 24-28: kind (e.g. int, ptr, array...etc)\n\t * bits 29-30: unused\n\t * bit     31: kind_flag, currently used by\n\t *             struct, union and fwd\n\t */\n\tInfo uint32\n\t/* \"size\" is used by INT, ENUM, STRUCT and UNION.\n\t * \"size\" tells the size of the type it is describing.\n\t *\n\t * \"type\" is used by PTR, TYPEDEF, VOLATILE, CONST, RESTRICT,\n\t * FUNC and FUNC_PROTO.\n\t * \"type\" is a type_id referring to another type.\n\t */\n\tSizeType uint32\n}\n\nvar btfTypeSize = int(unsafe.Sizeof(btfType{}))\n\nfunc unmarshalBtfType(bt *btfType, b []byte, bo binary.ByteOrder) (int, error) {\n\tif len(b) < btfTypeSize {\n\t\treturn 0, fmt.Errorf(\"not enough bytes to unmarshal btfType\")\n\t}\n\n\tbt.NameOff = bo.Uint32(b[0:])\n\tbt.Info = bo.Uint32(b[4:])\n\tbt.SizeType = bo.Uint32(b[8:])\n\treturn btfTypeSize, nil\n}\n\nfunc mask(len uint32) uint32 {\n\treturn (1 << len) - 1\n}\n\nfunc readBits(value, len, shift uint32) uint32 {\n\treturn (value >> shift) & mask(len)\n}\n\nfunc writeBits(value, len, shift, new uint32) uint32 {\n\tvalue &^= mask(len) << shift\n\tvalue |= (new & mask(len)) << shift\n\treturn value\n}\n\nfunc (bt *btfType) info(len, shift uint32) uint32 {\n\treturn readBits(bt.Info, len, shift)\n}\n\nfunc (bt *btfType) setInfo(value, len, shift uint32) {\n\tbt.Info = writeBits(bt.Info, len, shift, value)\n}\n\nfunc (bt *btfType) Kind() btfKind {\n\treturn btfKind(bt.info(btfTypeKindLen, btfTypeKindShift))\n}\n\nfunc (bt *btfType) SetKind(kind btfKind) {\n\tbt.setInfo(uint32(kind), btfTypeKindLen, btfTypeKindShift)\n}\n\nfunc (bt *btfType) Vlen() int {\n\treturn int(bt.info(btfTypeVlenMask, btfTypeVlenShift))\n}\n\nfunc (bt *btfType) SetVlen(vlen int) {\n\tbt.setInfo(uint32(vlen), btfTypeVlenMask, btfTypeVlenShift)\n}\n\nfunc (bt *btfType) kindFlagBool() bool {\n\treturn bt.info(btfTypeKindFlagMask, btfTypeKindFlagShift) == 1\n}\n\nfunc (bt *btfType) setKindFlagBool(set bool) {\n\tvar value uint32\n\tif set {\n\t\tvalue = 1\n\t}\n\tbt.setInfo(value, btfTypeKindFlagMask, btfTypeKindFlagShift)\n}\n\n// Bitfield returns true if the struct or union contain a bitfield.\nfunc (bt *btfType) Bitfield() bool {\n\treturn bt.kindFlagBool()\n}\n\nfunc (bt *btfType) SetBitfield(isBitfield bool) {\n\tbt.setKindFlagBool(isBitfield)\n}\n\nfunc (bt *btfType) FwdKind() FwdKind {\n\treturn FwdKind(bt.info(btfTypeKindFlagMask, btfTypeKindFlagShift))\n}\n\nfunc (bt *btfType) SetFwdKind(kind FwdKind) {\n\tbt.setInfo(uint32(kind), btfTypeKindFlagMask, btfTypeKindFlagShift)\n}\n\nfunc (bt *btfType) Signed() bool {\n\treturn bt.kindFlagBool()\n}\n\nfunc (bt *btfType) SetSigned(signed bool) {\n\tbt.setKindFlagBool(signed)\n}\n\nfunc (bt *btfType) Linkage() FuncLinkage {\n\treturn FuncLinkage(bt.info(btfTypeVlenMask, btfTypeVlenShift))\n}\n\nfunc (bt *btfType) SetLinkage(linkage FuncLinkage) {\n\tbt.setInfo(uint32(linkage), btfTypeVlenMask, btfTypeVlenShift)\n}\n\nfunc (bt *btfType) Type() TypeID {\n\t// TODO: Panic here if wrong kind?\n\treturn TypeID(bt.SizeType)\n}\n\nfunc (bt *btfType) SetType(id TypeID) {\n\tbt.SizeType = uint32(id)\n}\n\nfunc (bt *btfType) Size() uint32 {\n\t// TODO: Panic here if wrong kind?\n\treturn bt.SizeType\n}\n\nfunc (bt *btfType) SetSize(size uint32) {\n\tbt.SizeType = size\n}\n\nfunc (bt *btfType) Marshal(w io.Writer, bo binary.ByteOrder) error {\n\tbuf := make([]byte, unsafe.Sizeof(*bt))\n\tbo.PutUint32(buf[0:], bt.NameOff)\n\tbo.PutUint32(buf[4:], bt.Info)\n\tbo.PutUint32(buf[8:], bt.SizeType)\n\t_, err := w.Write(buf)\n\treturn err\n}\n\ntype rawType struct {\n\tbtfType\n\tdata interface{}\n}\n\nfunc (rt *rawType) Marshal(w io.Writer, bo binary.ByteOrder) error {\n\tif err := rt.btfType.Marshal(w, bo); err != nil {\n\t\treturn err\n\t}\n\n\tif rt.data == nil {\n\t\treturn nil\n\t}\n\n\treturn binary.Write(w, bo, rt.data)\n}\n\n// btfInt encodes additional data for integers.\n//\n//\t? ? ? ? e e e e o o o o o o o o ? ? ? ? ? ? ? ? b b b b b b b b\n//\t? = undefined\n//\te = encoding\n//\to = offset (bitfields?)\n//\tb = bits (bitfields)\ntype btfInt struct {\n\tRaw uint32\n}\n\nconst (\n\tbtfIntEncodingLen   = 4\n\tbtfIntEncodingShift = 24\n\tbtfIntOffsetLen     = 8\n\tbtfIntOffsetShift   = 16\n\tbtfIntBitsLen       = 8\n\tbtfIntBitsShift     = 0\n)\n\nvar btfIntLen = int(unsafe.Sizeof(btfInt{}))\n\nfunc unmarshalBtfInt(bi *btfInt, b []byte, bo binary.ByteOrder) (int, error) {\n\tif len(b) < btfIntLen {\n\t\treturn 0, fmt.Errorf(\"not enough bytes to unmarshal btfInt\")\n\t}\n\n\tbi.Raw = bo.Uint32(b[0:])\n\treturn btfIntLen, nil\n}\n\nfunc (bi btfInt) Encoding() IntEncoding {\n\treturn IntEncoding(readBits(bi.Raw, btfIntEncodingLen, btfIntEncodingShift))\n}\n\nfunc (bi *btfInt) SetEncoding(e IntEncoding) {\n\tbi.Raw = writeBits(uint32(bi.Raw), btfIntEncodingLen, btfIntEncodingShift, uint32(e))\n}\n\nfunc (bi btfInt) Offset() Bits {\n\treturn Bits(readBits(bi.Raw, btfIntOffsetLen, btfIntOffsetShift))\n}\n\nfunc (bi *btfInt) SetOffset(offset uint32) {\n\tbi.Raw = writeBits(bi.Raw, btfIntOffsetLen, btfIntOffsetShift, offset)\n}\n\nfunc (bi btfInt) Bits() Bits {\n\treturn Bits(readBits(bi.Raw, btfIntBitsLen, btfIntBitsShift))\n}\n\nfunc (bi *btfInt) SetBits(bits byte) {\n\tbi.Raw = writeBits(bi.Raw, btfIntBitsLen, btfIntBitsShift, uint32(bits))\n}\n\ntype btfArray struct {\n\tType      TypeID\n\tIndexType TypeID\n\tNelems    uint32\n}\n\nvar btfArrayLen = int(unsafe.Sizeof(btfArray{}))\n\nfunc unmarshalBtfArray(ba *btfArray, b []byte, bo binary.ByteOrder) (int, error) {\n\tif len(b) < btfArrayLen {\n\t\treturn 0, fmt.Errorf(\"not enough bytes to unmarshal btfArray\")\n\t}\n\n\tba.Type = TypeID(bo.Uint32(b[0:]))\n\tba.IndexType = TypeID(bo.Uint32(b[4:]))\n\tba.Nelems = bo.Uint32(b[8:])\n\treturn btfArrayLen, nil\n}\n\ntype btfMember struct {\n\tNameOff uint32\n\tType    TypeID\n\tOffset  uint32\n}\n\nvar btfMemberLen = int(unsafe.Sizeof(btfMember{}))\n\nfunc unmarshalBtfMembers(members []btfMember, b []byte, bo binary.ByteOrder) (int, error) {\n\toff := 0\n\tfor i := range members {\n\t\tif off+btfMemberLen > len(b) {\n\t\t\treturn 0, fmt.Errorf(\"not enough bytes to unmarshal btfMember %d\", i)\n\t\t}\n\n\t\tmembers[i].NameOff = bo.Uint32(b[off+0:])\n\t\tmembers[i].Type = TypeID(bo.Uint32(b[off+4:]))\n\t\tmembers[i].Offset = bo.Uint32(b[off+8:])\n\n\t\toff += btfMemberLen\n\t}\n\n\treturn off, nil\n}\n\ntype btfVarSecinfo struct {\n\tType   TypeID\n\tOffset uint32\n\tSize   uint32\n}\n\nvar btfVarSecinfoLen = int(unsafe.Sizeof(btfVarSecinfo{}))\n\nfunc unmarshalBtfVarSecInfos(secinfos []btfVarSecinfo, b []byte, bo binary.ByteOrder) (int, error) {\n\toff := 0\n\tfor i := range secinfos {\n\t\tif off+btfVarSecinfoLen > len(b) {\n\t\t\treturn 0, fmt.Errorf(\"not enough bytes to unmarshal btfVarSecinfo %d\", i)\n\t\t}\n\n\t\tsecinfos[i].Type = TypeID(bo.Uint32(b[off+0:]))\n\t\tsecinfos[i].Offset = bo.Uint32(b[off+4:])\n\t\tsecinfos[i].Size = bo.Uint32(b[off+8:])\n\n\t\toff += btfVarSecinfoLen\n\t}\n\n\treturn off, nil\n}\n\ntype btfVariable struct {\n\tLinkage uint32\n}\n\nvar btfVariableLen = int(unsafe.Sizeof(btfVariable{}))\n\nfunc unmarshalBtfVariable(bv *btfVariable, b []byte, bo binary.ByteOrder) (int, error) {\n\tif len(b) < btfVariableLen {\n\t\treturn 0, fmt.Errorf(\"not enough bytes to unmarshal btfVariable\")\n\t}\n\n\tbv.Linkage = bo.Uint32(b[0:])\n\treturn btfVariableLen, nil\n}\n\ntype btfEnum struct {\n\tNameOff uint32\n\tVal     uint32\n}\n\nvar btfEnumLen = int(unsafe.Sizeof(btfEnum{}))\n\nfunc unmarshalBtfEnums(enums []btfEnum, b []byte, bo binary.ByteOrder) (int, error) {\n\toff := 0\n\tfor i := range enums {\n\t\tif off+btfEnumLen > len(b) {\n\t\t\treturn 0, fmt.Errorf(\"not enough bytes to unmarshal btfEnum %d\", i)\n\t\t}\n\n\t\tenums[i].NameOff = bo.Uint32(b[off+0:])\n\t\tenums[i].Val = bo.Uint32(b[off+4:])\n\n\t\toff += btfEnumLen\n\t}\n\n\treturn off, nil\n}\n\ntype btfEnum64 struct {\n\tNameOff uint32\n\tValLo32 uint32\n\tValHi32 uint32\n}\n\nvar btfEnum64Len = int(unsafe.Sizeof(btfEnum64{}))\n\nfunc unmarshalBtfEnums64(enums []btfEnum64, b []byte, bo binary.ByteOrder) (int, error) {\n\toff := 0\n\tfor i := range enums {\n\t\tif off+btfEnum64Len > len(b) {\n\t\t\treturn 0, fmt.Errorf(\"not enough bytes to unmarshal btfEnum64 %d\", i)\n\t\t}\n\n\t\tenums[i].NameOff = bo.Uint32(b[off+0:])\n\t\tenums[i].ValLo32 = bo.Uint32(b[off+4:])\n\t\tenums[i].ValHi32 = bo.Uint32(b[off+8:])\n\n\t\toff += btfEnum64Len\n\t}\n\n\treturn off, nil\n}\n\ntype btfParam struct {\n\tNameOff uint32\n\tType    TypeID\n}\n\nvar btfParamLen = int(unsafe.Sizeof(btfParam{}))\n\nfunc unmarshalBtfParams(params []btfParam, b []byte, bo binary.ByteOrder) (int, error) {\n\toff := 0\n\tfor i := range params {\n\t\tif off+btfParamLen > len(b) {\n\t\t\treturn 0, fmt.Errorf(\"not enough bytes to unmarshal btfParam %d\", i)\n\t\t}\n\n\t\tparams[i].NameOff = bo.Uint32(b[off+0:])\n\t\tparams[i].Type = TypeID(bo.Uint32(b[off+4:]))\n\n\t\toff += btfParamLen\n\t}\n\n\treturn off, nil\n}\n\ntype btfDeclTag struct {\n\tComponentIdx uint32\n}\n\nvar btfDeclTagLen = int(unsafe.Sizeof(btfDeclTag{}))\n\nfunc unmarshalBtfDeclTag(bdt *btfDeclTag, b []byte, bo binary.ByteOrder) (int, error) {\n\tif len(b) < btfDeclTagLen {\n\t\treturn 0, fmt.Errorf(\"not enough bytes to unmarshal btfDeclTag\")\n\t}\n\n\tbdt.ComponentIdx = bo.Uint32(b[0:])\n\treturn btfDeclTagLen, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/btf_types_string.go",
    "content": "// Code generated by \"stringer -linecomment -output=btf_types_string.go -type=FuncLinkage,VarLinkage,btfKind\"; DO NOT EDIT.\n\npackage btf\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[StaticFunc-0]\n\t_ = x[GlobalFunc-1]\n\t_ = x[ExternFunc-2]\n}\n\nconst _FuncLinkage_name = \"staticglobalextern\"\n\nvar _FuncLinkage_index = [...]uint8{0, 6, 12, 18}\n\nfunc (i FuncLinkage) String() string {\n\tif i < 0 || i >= FuncLinkage(len(_FuncLinkage_index)-1) {\n\t\treturn \"FuncLinkage(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _FuncLinkage_name[_FuncLinkage_index[i]:_FuncLinkage_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[StaticVar-0]\n\t_ = x[GlobalVar-1]\n\t_ = x[ExternVar-2]\n}\n\nconst _VarLinkage_name = \"staticglobalextern\"\n\nvar _VarLinkage_index = [...]uint8{0, 6, 12, 18}\n\nfunc (i VarLinkage) String() string {\n\tif i < 0 || i >= VarLinkage(len(_VarLinkage_index)-1) {\n\t\treturn \"VarLinkage(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _VarLinkage_name[_VarLinkage_index[i]:_VarLinkage_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[kindUnknown-0]\n\t_ = x[kindInt-1]\n\t_ = x[kindPointer-2]\n\t_ = x[kindArray-3]\n\t_ = x[kindStruct-4]\n\t_ = x[kindUnion-5]\n\t_ = x[kindEnum-6]\n\t_ = x[kindForward-7]\n\t_ = x[kindTypedef-8]\n\t_ = x[kindVolatile-9]\n\t_ = x[kindConst-10]\n\t_ = x[kindRestrict-11]\n\t_ = x[kindFunc-12]\n\t_ = x[kindFuncProto-13]\n\t_ = x[kindVar-14]\n\t_ = x[kindDatasec-15]\n\t_ = x[kindFloat-16]\n\t_ = x[kindDeclTag-17]\n\t_ = x[kindTypeTag-18]\n\t_ = x[kindEnum64-19]\n}\n\nconst _btfKind_name = \"UnknownIntPointerArrayStructUnionEnumForwardTypedefVolatileConstRestrictFuncFuncProtoVarDatasecFloatDeclTagTypeTagEnum64\"\n\nvar _btfKind_index = [...]uint8{0, 7, 10, 17, 22, 28, 33, 37, 44, 51, 59, 64, 72, 76, 85, 88, 95, 100, 107, 114, 120}\n\nfunc (i btfKind) String() string {\n\tif i >= btfKind(len(_btfKind_index)-1) {\n\t\treturn \"btfKind(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _btfKind_name[_btfKind_index[i]:_btfKind_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/core.go",
    "content": "package btf\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"slices\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/asm\"\n)\n\n// Code in this file is derived from libbpf, which is available under a BSD\n// 2-Clause license.\n\n// A constant used when CO-RE relocation has to remove instructions.\n//\n// Taken from libbpf.\nconst COREBadRelocationSentinel = 0xbad2310\n\n// COREFixup is the result of computing a CO-RE relocation for a target.\ntype COREFixup struct {\n\tkind   coreKind\n\tlocal  uint64\n\ttarget uint64\n\t// True if there is no valid fixup. The instruction is replaced with an\n\t// invalid dummy.\n\tpoison bool\n\t// True if the validation of the local value should be skipped. Used by\n\t// some kinds of bitfield relocations.\n\tskipLocalValidation bool\n}\n\nfunc (f *COREFixup) equal(other COREFixup) bool {\n\treturn f.local == other.local && f.target == other.target\n}\n\nfunc (f *COREFixup) String() string {\n\tif f.poison {\n\t\treturn fmt.Sprintf(\"%s=poison\", f.kind)\n\t}\n\treturn fmt.Sprintf(\"%s=%d->%d\", f.kind, f.local, f.target)\n}\n\nfunc (f *COREFixup) Apply(ins *asm.Instruction) error {\n\tif f.poison {\n\t\t// Relocation is poisoned, replace the instruction with an invalid one.\n\t\tif ins.OpCode.IsDWordLoad() {\n\t\t\t// Replace a dword load with a invalid dword load to preserve instruction size.\n\t\t\t*ins = asm.LoadImm(asm.R10, COREBadRelocationSentinel, asm.DWord)\n\t\t} else {\n\t\t\t// Replace all single size instruction with a invalid call instruction.\n\t\t\t*ins = asm.BuiltinFunc(COREBadRelocationSentinel).Call()\n\t\t}\n\n\t\t// Add context to the kernel verifier output.\n\t\tif source := ins.Source(); source != nil {\n\t\t\t*ins = ins.WithSource(asm.Comment(fmt.Sprintf(\"instruction poisoned by CO-RE: %s\", source)))\n\t\t} else {\n\t\t\t*ins = ins.WithSource(asm.Comment(\"instruction poisoned by CO-RE\"))\n\t\t}\n\n\t\treturn nil\n\t}\n\n\tswitch class := ins.OpCode.Class(); class {\n\tcase asm.LdXClass, asm.StClass, asm.StXClass:\n\t\tif want := int16(f.local); !f.skipLocalValidation && want != ins.Offset {\n\t\t\treturn fmt.Errorf(\"invalid offset %d, expected %d\", ins.Offset, f.local)\n\t\t}\n\n\t\tif f.target > math.MaxInt16 {\n\t\t\treturn fmt.Errorf(\"offset %d exceeds MaxInt16\", f.target)\n\t\t}\n\n\t\tins.Offset = int16(f.target)\n\n\tcase asm.LdClass:\n\t\tif !ins.IsConstantLoad(asm.DWord) {\n\t\t\treturn fmt.Errorf(\"not a dword-sized immediate load\")\n\t\t}\n\n\t\tif want := int64(f.local); !f.skipLocalValidation && want != ins.Constant {\n\t\t\treturn fmt.Errorf(\"invalid immediate %d, expected %d (fixup: %v)\", ins.Constant, want, f)\n\t\t}\n\n\t\tins.Constant = int64(f.target)\n\n\tcase asm.ALUClass:\n\t\tif ins.OpCode.ALUOp() == asm.Swap {\n\t\t\treturn fmt.Errorf(\"relocation against swap\")\n\t\t}\n\n\t\tfallthrough\n\n\tcase asm.ALU64Class:\n\t\tif src := ins.OpCode.Source(); src != asm.ImmSource {\n\t\t\treturn fmt.Errorf(\"invalid source %s\", src)\n\t\t}\n\n\t\tif want := int64(f.local); !f.skipLocalValidation && want != ins.Constant {\n\t\t\treturn fmt.Errorf(\"invalid immediate %d, expected %d (fixup: %v, kind: %v, ins: %v)\", ins.Constant, want, f, f.kind, ins)\n\t\t}\n\n\t\tif f.target > math.MaxInt32 {\n\t\t\treturn fmt.Errorf(\"immediate %d exceeds MaxInt32\", f.target)\n\t\t}\n\n\t\tins.Constant = int64(f.target)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"invalid class %s\", class)\n\t}\n\n\treturn nil\n}\n\nfunc (f COREFixup) isNonExistant() bool {\n\treturn f.kind.checksForExistence() && f.target == 0\n}\n\n// coreKind is the type of CO-RE relocation as specified in BPF source code.\ntype coreKind uint32\n\nconst (\n\treloFieldByteOffset coreKind = iota /* field byte offset */\n\treloFieldByteSize                   /* field size in bytes */\n\treloFieldExists                     /* field existence in target kernel */\n\treloFieldSigned                     /* field signedness (0 - unsigned, 1 - signed) */\n\treloFieldLShiftU64                  /* bitfield-specific left bitshift */\n\treloFieldRShiftU64                  /* bitfield-specific right bitshift */\n\treloTypeIDLocal                     /* type ID in local BPF object */\n\treloTypeIDTarget                    /* type ID in target kernel */\n\treloTypeExists                      /* type existence in target kernel */\n\treloTypeSize                        /* type size in bytes */\n\treloEnumvalExists                   /* enum value existence in target kernel */\n\treloEnumvalValue                    /* enum value integer value */\n\treloTypeMatches                     /* type matches kernel type */\n)\n\nfunc (k coreKind) checksForExistence() bool {\n\treturn k == reloEnumvalExists || k == reloTypeExists || k == reloFieldExists || k == reloTypeMatches\n}\n\nfunc (k coreKind) String() string {\n\tswitch k {\n\tcase reloFieldByteOffset:\n\t\treturn \"byte_off\"\n\tcase reloFieldByteSize:\n\t\treturn \"byte_sz\"\n\tcase reloFieldExists:\n\t\treturn \"field_exists\"\n\tcase reloFieldSigned:\n\t\treturn \"signed\"\n\tcase reloFieldLShiftU64:\n\t\treturn \"lshift_u64\"\n\tcase reloFieldRShiftU64:\n\t\treturn \"rshift_u64\"\n\tcase reloTypeIDLocal:\n\t\treturn \"local_type_id\"\n\tcase reloTypeIDTarget:\n\t\treturn \"target_type_id\"\n\tcase reloTypeExists:\n\t\treturn \"type_exists\"\n\tcase reloTypeSize:\n\t\treturn \"type_size\"\n\tcase reloEnumvalExists:\n\t\treturn \"enumval_exists\"\n\tcase reloEnumvalValue:\n\t\treturn \"enumval_value\"\n\tcase reloTypeMatches:\n\t\treturn \"type_matches\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown (%d)\", k)\n\t}\n}\n\n// CORERelocate calculates changes needed to adjust eBPF instructions for differences\n// in types.\n//\n// targets forms the set of types to relocate against. The first element has to be\n// BTF for vmlinux, the following must be types for kernel modules.\n//\n// resolveLocalTypeID is called for each local type which requires a stable TypeID.\n// Calling the function with the same type multiple times must produce the same\n// result. It is the callers responsibility to ensure that the relocated instructions\n// are loaded with matching BTF.\n//\n// Returns a list of fixups which can be applied to instructions to make them\n// match the target type(s).\n//\n// Fixups are returned in the order of relos, e.g. fixup[i] is the solution\n// for relos[i].\nfunc CORERelocate(relos []*CORERelocation, targets []*Spec, bo binary.ByteOrder, resolveLocalTypeID func(Type) (TypeID, error)) ([]COREFixup, error) {\n\tif len(targets) == 0 {\n\t\t// Explicitly check for nil here since the argument used to be optional.\n\t\treturn nil, fmt.Errorf(\"targets must be provided\")\n\t}\n\n\t// We can't encode type IDs that aren't for vmlinux into instructions at the\n\t// moment.\n\tresolveTargetTypeID := targets[0].TypeID\n\n\tfor _, target := range targets {\n\t\tif bo != target.imm.byteOrder {\n\t\t\treturn nil, fmt.Errorf(\"can't relocate %s against %s\", bo, target.imm.byteOrder)\n\t\t}\n\t}\n\n\ttype reloGroup struct {\n\t\trelos []*CORERelocation\n\t\t// Position of each relocation in relos.\n\t\tindices []int\n\t}\n\n\t// Split relocations into per Type lists.\n\trelosByType := make(map[Type]*reloGroup)\n\tresult := make([]COREFixup, len(relos))\n\tfor i, relo := range relos {\n\t\tif relo.kind == reloTypeIDLocal {\n\t\t\t// Filtering out reloTypeIDLocal here makes our lives a lot easier\n\t\t\t// down the line, since it doesn't have a target at all.\n\t\t\tif len(relo.accessor) > 1 || relo.accessor[0] != 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"%s: unexpected accessor %v\", relo.kind, relo.accessor)\n\t\t\t}\n\n\t\t\tid, err := resolveLocalTypeID(relo.typ)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"%s: get type id: %w\", relo.kind, err)\n\t\t\t}\n\n\t\t\tresult[i] = COREFixup{\n\t\t\t\tkind:   relo.kind,\n\t\t\t\tlocal:  uint64(relo.id),\n\t\t\t\ttarget: uint64(id),\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tgroup, ok := relosByType[relo.typ]\n\t\tif !ok {\n\t\t\tgroup = &reloGroup{}\n\t\t\trelosByType[relo.typ] = group\n\t\t}\n\t\tgroup.relos = append(group.relos, relo)\n\t\tgroup.indices = append(group.indices, i)\n\t}\n\n\tfor localType, group := range relosByType {\n\t\tlocalTypeName := localType.TypeName()\n\t\tif localTypeName == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"relocate unnamed or anonymous type %s: %w\", localType, ErrNotSupported)\n\t\t}\n\n\t\tessentialName := newEssentialName(localTypeName)\n\n\t\tvar targetTypes []Type\n\t\tfor _, target := range targets {\n\t\t\tnamedTypeIDs := target.imm.namedTypes[essentialName]\n\t\t\ttargetTypes = slices.Grow(targetTypes, len(namedTypeIDs))\n\t\t\tfor _, id := range namedTypeIDs {\n\t\t\t\ttyp, err := target.TypeByID(id)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\n\t\t\t\ttargetTypes = append(targetTypes, typ)\n\t\t\t}\n\t\t}\n\n\t\tfixups, err := coreCalculateFixups(group.relos, targetTypes, bo, resolveTargetTypeID)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"relocate %s: %w\", localType, err)\n\t\t}\n\n\t\tfor j, index := range group.indices {\n\t\t\tresult[index] = fixups[j]\n\t\t}\n\t}\n\n\treturn result, nil\n}\n\nvar errAmbiguousRelocation = errors.New(\"ambiguous relocation\")\nvar errImpossibleRelocation = errors.New(\"impossible relocation\")\nvar errIncompatibleTypes = errors.New(\"incompatible types\")\n\n// coreCalculateFixups finds the target type that best matches all relocations.\n//\n// All relos must target the same type.\n//\n// The best target is determined by scoring: the less poisoning we have to do\n// the better the target is.\nfunc coreCalculateFixups(relos []*CORERelocation, targets []Type, bo binary.ByteOrder, resolveTargetTypeID func(Type) (TypeID, error)) ([]COREFixup, error) {\n\tbestScore := len(relos)\n\tvar bestFixups []COREFixup\n\tfor _, target := range targets {\n\t\tscore := 0 // lower is better\n\t\tfixups := make([]COREFixup, 0, len(relos))\n\t\tfor _, relo := range relos {\n\t\t\tfixup, err := coreCalculateFixup(relo, target, bo, resolveTargetTypeID)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"target %s: %s: %w\", target, relo.kind, err)\n\t\t\t}\n\t\t\tif fixup.poison || fixup.isNonExistant() {\n\t\t\t\tscore++\n\t\t\t}\n\t\t\tfixups = append(fixups, fixup)\n\t\t}\n\n\t\tif score > bestScore {\n\t\t\t// We have a better target already, ignore this one.\n\t\t\tcontinue\n\t\t}\n\n\t\tif score < bestScore {\n\t\t\t// This is the best target yet, use it.\n\t\t\tbestScore = score\n\t\t\tbestFixups = fixups\n\t\t\tcontinue\n\t\t}\n\n\t\t// Some other target has the same score as the current one. Make sure\n\t\t// the fixups agree with each other.\n\t\tfor i, fixup := range bestFixups {\n\t\t\tif !fixup.equal(fixups[i]) {\n\t\t\t\treturn nil, fmt.Errorf(\"%s: multiple types match: %w\", fixup.kind, errAmbiguousRelocation)\n\t\t\t}\n\t\t}\n\t}\n\n\tif bestFixups == nil {\n\t\t// Nothing at all matched, probably because there are no suitable\n\t\t// targets at all.\n\t\t//\n\t\t// Poison everything except checksForExistence.\n\t\tbestFixups = make([]COREFixup, len(relos))\n\t\tfor i, relo := range relos {\n\t\t\tif relo.kind.checksForExistence() {\n\t\t\t\tbestFixups[i] = COREFixup{kind: relo.kind, local: 1, target: 0}\n\t\t\t} else {\n\t\t\t\tbestFixups[i] = COREFixup{kind: relo.kind, poison: true}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn bestFixups, nil\n}\n\nvar errNoSignedness = errors.New(\"no signedness\")\n\n// coreCalculateFixup calculates the fixup given a relocation and a target type.\nfunc coreCalculateFixup(relo *CORERelocation, target Type, bo binary.ByteOrder, resolveTargetTypeID func(Type) (TypeID, error)) (COREFixup, error) {\n\tfixup := func(local, target uint64) (COREFixup, error) {\n\t\treturn COREFixup{kind: relo.kind, local: local, target: target}, nil\n\t}\n\tfixupWithoutValidation := func(local, target uint64) (COREFixup, error) {\n\t\treturn COREFixup{kind: relo.kind, local: local, target: target, skipLocalValidation: true}, nil\n\t}\n\tpoison := func() (COREFixup, error) {\n\t\tif relo.kind.checksForExistence() {\n\t\t\treturn fixup(1, 0)\n\t\t}\n\t\treturn COREFixup{kind: relo.kind, poison: true}, nil\n\t}\n\tzero := COREFixup{}\n\n\tlocal := relo.typ\n\n\tswitch relo.kind {\n\tcase reloTypeMatches:\n\t\tif len(relo.accessor) > 1 || relo.accessor[0] != 0 {\n\t\t\treturn zero, fmt.Errorf(\"unexpected accessor %v\", relo.accessor)\n\t\t}\n\n\t\terr := coreTypesMatch(local, target, nil)\n\t\tif errors.Is(err, errIncompatibleTypes) {\n\t\t\treturn poison()\n\t\t}\n\t\tif err != nil {\n\t\t\treturn zero, err\n\t\t}\n\n\t\treturn fixup(1, 1)\n\n\tcase reloTypeIDTarget, reloTypeSize, reloTypeExists:\n\t\tif len(relo.accessor) > 1 || relo.accessor[0] != 0 {\n\t\t\treturn zero, fmt.Errorf(\"unexpected accessor %v\", relo.accessor)\n\t\t}\n\n\t\terr := CheckTypeCompatibility(local, target)\n\t\tif errors.Is(err, errIncompatibleTypes) {\n\t\t\treturn poison()\n\t\t}\n\t\tif err != nil {\n\t\t\treturn zero, err\n\t\t}\n\n\t\tswitch relo.kind {\n\t\tcase reloTypeExists:\n\t\t\treturn fixup(1, 1)\n\n\t\tcase reloTypeIDTarget:\n\t\t\ttargetID, err := resolveTargetTypeID(target)\n\t\t\tif errors.Is(err, ErrNotFound) {\n\t\t\t\t// Probably a relocation trying to get the ID\n\t\t\t\t// of a type from a kmod.\n\t\t\t\treturn poison()\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn zero, err\n\t\t\t}\n\t\t\treturn fixup(uint64(relo.id), uint64(targetID))\n\n\t\tcase reloTypeSize:\n\t\t\tlocalSize, err := Sizeof(local)\n\t\t\tif err != nil {\n\t\t\t\treturn zero, err\n\t\t\t}\n\n\t\t\ttargetSize, err := Sizeof(target)\n\t\t\tif err != nil {\n\t\t\t\treturn zero, err\n\t\t\t}\n\n\t\t\treturn fixup(uint64(localSize), uint64(targetSize))\n\t\t}\n\n\tcase reloEnumvalValue, reloEnumvalExists:\n\t\tlocalValue, targetValue, err := coreFindEnumValue(local, relo.accessor, target)\n\t\tif errors.Is(err, errImpossibleRelocation) {\n\t\t\treturn poison()\n\t\t}\n\t\tif err != nil {\n\t\t\treturn zero, err\n\t\t}\n\n\t\tswitch relo.kind {\n\t\tcase reloEnumvalExists:\n\t\t\treturn fixup(1, 1)\n\n\t\tcase reloEnumvalValue:\n\t\t\treturn fixup(localValue.Value, targetValue.Value)\n\t\t}\n\n\tcase reloFieldByteOffset, reloFieldByteSize, reloFieldExists, reloFieldLShiftU64, reloFieldRShiftU64, reloFieldSigned:\n\t\tif _, ok := As[*Fwd](target); ok {\n\t\t\t// We can't relocate fields using a forward declaration, so\n\t\t\t// skip it. If a non-forward declaration is present in the BTF\n\t\t\t// we'll find it in one of the other iterations.\n\t\t\treturn poison()\n\t\t}\n\n\t\tlocalField, targetField, err := coreFindField(local, relo.accessor, target)\n\t\tif errors.Is(err, errImpossibleRelocation) {\n\t\t\treturn poison()\n\t\t}\n\t\tif err != nil {\n\t\t\treturn zero, err\n\t\t}\n\n\t\tmaybeSkipValidation := func(f COREFixup, err error) (COREFixup, error) {\n\t\t\tf.skipLocalValidation = localField.bitfieldSize > 0\n\t\t\treturn f, err\n\t\t}\n\n\t\tswitch relo.kind {\n\t\tcase reloFieldExists:\n\t\t\treturn fixup(1, 1)\n\n\t\tcase reloFieldByteOffset:\n\t\t\treturn maybeSkipValidation(fixup(uint64(localField.offset), uint64(targetField.offset)))\n\n\t\tcase reloFieldByteSize:\n\t\t\tlocalSize, err := Sizeof(localField.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn zero, err\n\t\t\t}\n\n\t\t\ttargetSize, err := Sizeof(targetField.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn zero, err\n\t\t\t}\n\t\t\treturn maybeSkipValidation(fixup(uint64(localSize), uint64(targetSize)))\n\n\t\tcase reloFieldLShiftU64:\n\t\t\tvar target uint64\n\t\t\tif bo == binary.LittleEndian {\n\t\t\t\ttargetSize, err := targetField.sizeBits()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn zero, err\n\t\t\t\t}\n\n\t\t\t\ttarget = uint64(64 - targetField.bitfieldOffset - targetSize)\n\t\t\t} else {\n\t\t\t\tloadWidth, err := Sizeof(targetField.Type)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn zero, err\n\t\t\t\t}\n\n\t\t\t\ttarget = uint64(64 - Bits(loadWidth*8) + targetField.bitfieldOffset)\n\t\t\t}\n\t\t\treturn fixupWithoutValidation(0, target)\n\n\t\tcase reloFieldRShiftU64:\n\t\t\ttargetSize, err := targetField.sizeBits()\n\t\t\tif err != nil {\n\t\t\t\treturn zero, err\n\t\t\t}\n\n\t\t\treturn fixupWithoutValidation(0, uint64(64-targetSize))\n\n\t\tcase reloFieldSigned:\n\t\t\tswitch local := UnderlyingType(localField.Type).(type) {\n\t\t\tcase *Enum:\n\t\t\t\ttarget, ok := As[*Enum](targetField.Type)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn zero, fmt.Errorf(\"target isn't *Enum but %T\", targetField.Type)\n\t\t\t\t}\n\n\t\t\t\treturn fixup(boolToUint64(local.Signed), boolToUint64(target.Signed))\n\t\t\tcase *Int:\n\t\t\t\ttarget, ok := As[*Int](targetField.Type)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn zero, fmt.Errorf(\"target isn't *Int but %T\", targetField.Type)\n\t\t\t\t}\n\n\t\t\t\treturn fixup(\n\t\t\t\t\tuint64(local.Encoding&Signed),\n\t\t\t\t\tuint64(target.Encoding&Signed),\n\t\t\t\t)\n\t\t\tdefault:\n\t\t\t\treturn zero, fmt.Errorf(\"type %T: %w\", local, errNoSignedness)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn zero, ErrNotSupported\n}\n\nfunc boolToUint64(val bool) uint64 {\n\tif val {\n\t\treturn 1\n\t}\n\treturn 0\n}\n\n/* coreAccessor contains a path through a struct. It contains at least one index.\n *\n * The interpretation depends on the kind of the relocation. The following is\n * taken from struct bpf_core_relo in libbpf_internal.h:\n *\n * - for field-based relocations, string encodes an accessed field using\n *   a sequence of field and array indices, separated by colon (:). It's\n *   conceptually very close to LLVM's getelementptr ([0]) instruction's\n *   arguments for identifying offset to a field.\n * - for type-based relocations, strings is expected to be just \"0\";\n * - for enum value-based relocations, string contains an index of enum\n *   value within its enum type;\n *\n * Example to provide a better feel.\n *\n *   struct sample {\n *       int a;\n *       struct {\n *           int b[10];\n *       };\n *   };\n *\n *   struct sample s = ...;\n *   int x = &s->a;     // encoded as \"0:0\" (a is field #0)\n *   int y = &s->b[5];  // encoded as \"0:1:0:5\" (anon struct is field #1,\n *                      // b is field #0 inside anon struct, accessing elem #5)\n *   int z = &s[10]->b; // encoded as \"10:1\" (ptr is used as an array)\n */\ntype coreAccessor []int\n\nfunc parseCOREAccessor(accessor string) (coreAccessor, error) {\n\tif accessor == \"\" {\n\t\treturn nil, fmt.Errorf(\"empty accessor\")\n\t}\n\n\tparts := strings.Split(accessor, \":\")\n\tresult := make(coreAccessor, 0, len(parts))\n\tfor _, part := range parts {\n\t\t// 31 bits to avoid overflowing int on 32 bit platforms.\n\t\tindex, err := strconv.ParseUint(part, 10, 31)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"accessor index %q: %s\", part, err)\n\t\t}\n\n\t\tresult = append(result, int(index))\n\t}\n\n\treturn result, nil\n}\n\nfunc (ca coreAccessor) String() string {\n\tstrs := make([]string, 0, len(ca))\n\tfor _, i := range ca {\n\t\tstrs = append(strs, strconv.Itoa(i))\n\t}\n\treturn strings.Join(strs, \":\")\n}\n\nfunc (ca coreAccessor) enumValue(t Type) (*EnumValue, error) {\n\te, ok := As[*Enum](t)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"not an enum: %s\", t)\n\t}\n\n\tif len(ca) > 1 {\n\t\treturn nil, fmt.Errorf(\"invalid accessor %s for enum\", ca)\n\t}\n\n\ti := ca[0]\n\tif i >= len(e.Values) {\n\t\treturn nil, fmt.Errorf(\"invalid index %d for %s\", i, e)\n\t}\n\n\treturn &e.Values[i], nil\n}\n\n// coreField represents the position of a \"child\" of a composite type from the\n// start of that type.\n//\n//\t/- start of composite\n//\t| offset * 8 | bitfieldOffset | bitfieldSize | ... |\n//\t             \\- start of field       end of field -/\ntype coreField struct {\n\tType Type\n\n\t// The position of the field from the start of the composite type in bytes.\n\toffset uint32\n\n\t// The offset of the bitfield in bits from the start of the field.\n\tbitfieldOffset Bits\n\n\t// The size of the bitfield in bits.\n\t//\n\t// Zero if the field is not a bitfield.\n\tbitfieldSize Bits\n}\n\nfunc (cf *coreField) adjustOffsetToNthElement(n int) error {\n\tif n == 0 {\n\t\treturn nil\n\t}\n\n\tsize, err := Sizeof(cf.Type)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcf.offset += uint32(n) * uint32(size)\n\treturn nil\n}\n\nfunc (cf *coreField) adjustOffsetBits(offset Bits) error {\n\talign, err := alignof(cf.Type)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// We can compute the load offset by:\n\t// 1) converting the bit offset to bytes with a flooring division.\n\t// 2) dividing and multiplying that offset by the alignment, yielding the\n\t//    load size aligned offset.\n\toffsetBytes := uint32(offset/8) / uint32(align) * uint32(align)\n\n\t// The number of bits remaining is the bit offset less the number of bits\n\t// we can \"skip\" with the aligned offset.\n\tcf.bitfieldOffset = offset - Bits(offsetBytes*8)\n\n\t// We know that cf.offset is aligned at to at least align since we get it\n\t// from the compiler via BTF. Adding an aligned offsetBytes preserves the\n\t// alignment.\n\tcf.offset += offsetBytes\n\treturn nil\n}\n\nfunc (cf *coreField) sizeBits() (Bits, error) {\n\tif cf.bitfieldSize > 0 {\n\t\treturn cf.bitfieldSize, nil\n\t}\n\n\t// Someone is trying to access a non-bitfield via a bit shift relocation.\n\t// This happens when a field changes from a bitfield to a regular field\n\t// between kernel versions. Synthesise the size to make the shifts work.\n\tsize, err := Sizeof(cf.Type)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn Bits(size * 8), nil\n}\n\n// coreFindField descends into the local type using the accessor and tries to\n// find an equivalent field in target at each step.\n//\n// Returns the field and the offset of the field from the start of\n// target in bits.\nfunc coreFindField(localT Type, localAcc coreAccessor, targetT Type) (coreField, coreField, error) {\n\tlocal := coreField{Type: localT}\n\ttarget := coreField{Type: targetT}\n\n\tif err := coreAreMembersCompatible(local.Type, target.Type); err != nil {\n\t\treturn coreField{}, coreField{}, fmt.Errorf(\"fields: %w\", err)\n\t}\n\n\t// The first index is used to offset a pointer of the base type like\n\t// when accessing an array.\n\tif err := local.adjustOffsetToNthElement(localAcc[0]); err != nil {\n\t\treturn coreField{}, coreField{}, err\n\t}\n\n\tif err := target.adjustOffsetToNthElement(localAcc[0]); err != nil {\n\t\treturn coreField{}, coreField{}, err\n\t}\n\n\tvar localMaybeFlex, targetMaybeFlex bool\n\tfor i, acc := range localAcc[1:] {\n\t\tswitch localType := UnderlyingType(local.Type).(type) {\n\t\tcase composite:\n\t\t\t// For composite types acc is used to find the field in the local type,\n\t\t\t// and then we try to find a field in target with the same name.\n\t\t\tlocalMembers := localType.members()\n\t\t\tif acc >= len(localMembers) {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"invalid accessor %d for %s\", acc, localType)\n\t\t\t}\n\n\t\t\tlocalMember := localMembers[acc]\n\t\t\tif localMember.Name == \"\" {\n\t\t\t\tlocalMemberType, ok := As[composite](localMember.Type)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"unnamed field with type %s: %s\", localMember.Type, ErrNotSupported)\n\t\t\t\t}\n\n\t\t\t\t// This is an anonymous struct or union, ignore it.\n\t\t\t\tlocal = coreField{\n\t\t\t\t\tType:   localMemberType,\n\t\t\t\t\toffset: local.offset + localMember.Offset.Bytes(),\n\t\t\t\t}\n\t\t\t\tlocalMaybeFlex = false\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttargetType, ok := As[composite](target.Type)\n\t\t\tif !ok {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"target not composite: %w\", errImpossibleRelocation)\n\t\t\t}\n\n\t\t\ttargetMember, last, err := coreFindMember(targetType, localMember.Name)\n\t\t\tif err != nil {\n\t\t\t\treturn coreField{}, coreField{}, err\n\t\t\t}\n\n\t\t\tlocal = coreField{\n\t\t\t\tType:         localMember.Type,\n\t\t\t\toffset:       local.offset,\n\t\t\t\tbitfieldSize: localMember.BitfieldSize,\n\t\t\t}\n\t\t\tlocalMaybeFlex = acc == len(localMembers)-1\n\n\t\t\ttarget = coreField{\n\t\t\t\tType:         targetMember.Type,\n\t\t\t\toffset:       target.offset,\n\t\t\t\tbitfieldSize: targetMember.BitfieldSize,\n\t\t\t}\n\t\t\ttargetMaybeFlex = last\n\n\t\t\tif local.bitfieldSize == 0 && target.bitfieldSize == 0 {\n\t\t\t\tlocal.offset += localMember.Offset.Bytes()\n\t\t\t\ttarget.offset += targetMember.Offset.Bytes()\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Either of the members is a bitfield. Make sure we're at the\n\t\t\t// end of the accessor.\n\t\t\tif next := i + 1; next < len(localAcc[1:]) {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"can't descend into bitfield\")\n\t\t\t}\n\n\t\t\tif err := local.adjustOffsetBits(localMember.Offset); err != nil {\n\t\t\t\treturn coreField{}, coreField{}, err\n\t\t\t}\n\n\t\t\tif err := target.adjustOffsetBits(targetMember.Offset); err != nil {\n\t\t\t\treturn coreField{}, coreField{}, err\n\t\t\t}\n\n\t\tcase *Array:\n\t\t\t// For arrays, acc is the index in the target.\n\t\t\ttargetType, ok := As[*Array](target.Type)\n\t\t\tif !ok {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"target not array: %w\", errImpossibleRelocation)\n\t\t\t}\n\n\t\t\tif localType.Nelems == 0 && !localMaybeFlex {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"local type has invalid flexible array\")\n\t\t\t}\n\t\t\tif targetType.Nelems == 0 && !targetMaybeFlex {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"target type has invalid flexible array\")\n\t\t\t}\n\n\t\t\tif localType.Nelems > 0 && acc >= int(localType.Nelems) {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"invalid access of %s at index %d\", localType, acc)\n\t\t\t}\n\t\t\tif targetType.Nelems > 0 && acc >= int(targetType.Nelems) {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"out of bounds access of target: %w\", errImpossibleRelocation)\n\t\t\t}\n\n\t\t\tlocal = coreField{\n\t\t\t\tType:   localType.Type,\n\t\t\t\toffset: local.offset,\n\t\t\t}\n\t\t\tlocalMaybeFlex = false\n\n\t\t\tif err := local.adjustOffsetToNthElement(acc); err != nil {\n\t\t\t\treturn coreField{}, coreField{}, err\n\t\t\t}\n\n\t\t\ttarget = coreField{\n\t\t\t\tType:   targetType.Type,\n\t\t\t\toffset: target.offset,\n\t\t\t}\n\t\t\ttargetMaybeFlex = false\n\n\t\t\tif err := target.adjustOffsetToNthElement(acc); err != nil {\n\t\t\t\treturn coreField{}, coreField{}, err\n\t\t\t}\n\n\t\tdefault:\n\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"relocate field of %T: %w\", localType, ErrNotSupported)\n\t\t}\n\n\t\tif err := coreAreMembersCompatible(local.Type, target.Type); err != nil {\n\t\t\treturn coreField{}, coreField{}, err\n\t\t}\n\t}\n\n\treturn local, target, nil\n}\n\n// coreFindMember finds a member in a composite type while handling anonymous\n// structs and unions.\nfunc coreFindMember(typ composite, name string) (Member, bool, error) {\n\tif name == \"\" {\n\t\treturn Member{}, false, errors.New(\"can't search for anonymous member\")\n\t}\n\n\ttype offsetTarget struct {\n\t\tcomposite\n\t\toffset Bits\n\t}\n\n\ttargets := []offsetTarget{{typ, 0}}\n\tvisited := make(map[composite]bool)\n\n\tfor i := 0; i < len(targets); i++ {\n\t\ttarget := targets[i]\n\n\t\t// Only visit targets once to prevent infinite recursion.\n\t\tif visited[target] {\n\t\t\tcontinue\n\t\t}\n\t\tif len(visited) >= maxResolveDepth {\n\t\t\t// This check is different than libbpf, which restricts the entire\n\t\t\t// path to BPF_CORE_SPEC_MAX_LEN items.\n\t\t\treturn Member{}, false, fmt.Errorf(\"type is nested too deep\")\n\t\t}\n\t\tvisited[target] = true\n\n\t\tmembers := target.members()\n\t\tfor j, member := range members {\n\t\t\tif member.Name == name {\n\t\t\t\t// NB: This is safe because member is a copy.\n\t\t\t\tmember.Offset += target.offset\n\t\t\t\treturn member, j == len(members)-1, nil\n\t\t\t}\n\n\t\t\t// The names don't match, but this member could be an anonymous struct\n\t\t\t// or union.\n\t\t\tif member.Name != \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tcomp, ok := As[composite](member.Type)\n\t\t\tif !ok {\n\t\t\t\treturn Member{}, false, fmt.Errorf(\"anonymous non-composite type %T not allowed\", member.Type)\n\t\t\t}\n\n\t\t\ttargets = append(targets, offsetTarget{comp, target.offset + member.Offset})\n\t\t}\n\t}\n\n\treturn Member{}, false, fmt.Errorf(\"no matching member: %w\", errImpossibleRelocation)\n}\n\n// coreFindEnumValue follows localAcc to find the equivalent enum value in target.\nfunc coreFindEnumValue(local Type, localAcc coreAccessor, target Type) (localValue, targetValue *EnumValue, _ error) {\n\tlocalValue, err := localAcc.enumValue(local)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\ttargetEnum, ok := As[*Enum](target)\n\tif !ok {\n\t\treturn nil, nil, errImpossibleRelocation\n\t}\n\n\tlocalName := newEssentialName(localValue.Name)\n\tfor i, targetValue := range targetEnum.Values {\n\t\tif newEssentialName(targetValue.Name) != localName {\n\t\t\tcontinue\n\t\t}\n\n\t\treturn localValue, &targetEnum.Values[i], nil\n\t}\n\n\treturn nil, nil, errImpossibleRelocation\n}\n\n// CheckTypeCompatibility checks local and target types for Compatibility according to CO-RE rules.\n//\n// Only layout compatibility is checked, ignoring names of the root type.\nfunc CheckTypeCompatibility(localType Type, targetType Type) error {\n\treturn coreAreTypesCompatible(localType, targetType, nil)\n}\n\ntype pair struct {\n\tA, B Type\n}\n\n/* The comment below is from bpf_core_types_are_compat in libbpf.c:\n *\n * Check local and target types for compatibility. This check is used for\n * type-based CO-RE relocations and follow slightly different rules than\n * field-based relocations. This function assumes that root types were already\n * checked for name match. Beyond that initial root-level name check, names\n * are completely ignored. Compatibility rules are as follows:\n *   - any two STRUCTs/UNIONs/FWDs/ENUMs/INTs are considered compatible, but\n *     kind should match for local and target types (i.e., STRUCT is not\n *     compatible with UNION);\n *   - for ENUMs, the size is ignored;\n *   - for INT, size and signedness are ignored;\n *   - for ARRAY, dimensionality is ignored, element types are checked for\n *     compatibility recursively;\n *   - CONST/VOLATILE/RESTRICT modifiers are ignored;\n *   - TYPEDEFs/PTRs are compatible if types they pointing to are compatible;\n *   - FUNC_PROTOs are compatible if they have compatible signature: same\n *     number of input args and compatible return and argument types.\n * These rules are not set in stone and probably will be adjusted as we get\n * more experience with using BPF CO-RE relocations.\n *\n * Returns errIncompatibleTypes if types are not compatible.\n */\nfunc coreAreTypesCompatible(localType Type, targetType Type, visited map[pair]struct{}) error {\n\tlocalType = UnderlyingType(localType)\n\ttargetType = UnderlyingType(targetType)\n\n\tif reflect.TypeOf(localType) != reflect.TypeOf(targetType) {\n\t\treturn fmt.Errorf(\"type mismatch between %v and %v: %w\", localType, targetType, errIncompatibleTypes)\n\t}\n\n\tif _, ok := visited[pair{localType, targetType}]; ok {\n\t\treturn nil\n\t}\n\tif visited == nil {\n\t\tvisited = make(map[pair]struct{})\n\t}\n\tvisited[pair{localType, targetType}] = struct{}{}\n\n\tswitch lv := localType.(type) {\n\tcase *Void, *Struct, *Union, *Enum, *Fwd, *Int:\n\t\treturn nil\n\n\tcase *Pointer:\n\t\ttv := targetType.(*Pointer)\n\t\treturn coreAreTypesCompatible(lv.Target, tv.Target, visited)\n\n\tcase *Array:\n\t\ttv := targetType.(*Array)\n\t\tif err := coreAreTypesCompatible(lv.Index, tv.Index, visited); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn coreAreTypesCompatible(lv.Type, tv.Type, visited)\n\n\tcase *FuncProto:\n\t\ttv := targetType.(*FuncProto)\n\t\tif err := coreAreTypesCompatible(lv.Return, tv.Return, visited); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif len(lv.Params) != len(tv.Params) {\n\t\t\treturn fmt.Errorf(\"function param mismatch: %w\", errIncompatibleTypes)\n\t\t}\n\n\t\tfor i, localParam := range lv.Params {\n\t\t\ttargetParam := tv.Params[i]\n\t\t\tif err := coreAreTypesCompatible(localParam.Type, targetParam.Type, visited); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\treturn nil\n\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported type %T\", localType)\n\t}\n}\n\n/* coreAreMembersCompatible checks two types for field-based relocation compatibility.\n *\n * The comment below is from bpf_core_fields_are_compat in libbpf.c:\n *\n * Check two types for compatibility for the purpose of field access\n * relocation. const/volatile/restrict and typedefs are skipped to ensure we\n * are relocating semantically compatible entities:\n *   - any two STRUCTs/UNIONs are compatible and can be mixed;\n *   - any two FWDs are compatible, if their names match (modulo flavor suffix);\n *   - any two PTRs are always compatible;\n *   - for ENUMs, names should be the same (ignoring flavor suffix) or at\n *     least one of enums should be anonymous;\n *   - for ENUMs, check sizes, names are ignored;\n *   - for INT, size and signedness are ignored;\n *   - any two FLOATs are always compatible;\n *   - for ARRAY, dimensionality is ignored, element types are checked for\n *     compatibility recursively;\n *     [ NB: coreAreMembersCompatible doesn't recurse, this check is done\n *       by coreFindField. ]\n *   - everything else shouldn't be ever a target of relocation.\n * These rules are not set in stone and probably will be adjusted as we get\n * more experience with using BPF CO-RE relocations.\n *\n * Returns errImpossibleRelocation if the members are not compatible.\n */\nfunc coreAreMembersCompatible(localType Type, targetType Type) error {\n\tlocalType = UnderlyingType(localType)\n\ttargetType = UnderlyingType(targetType)\n\n\t_, lok := localType.(composite)\n\t_, tok := targetType.(composite)\n\tif lok && tok {\n\t\treturn nil\n\t}\n\n\tif reflect.TypeOf(localType) != reflect.TypeOf(targetType) {\n\t\treturn fmt.Errorf(\"type mismatch: %w\", errImpossibleRelocation)\n\t}\n\n\tswitch lv := localType.(type) {\n\tcase *Array, *Pointer, *Float, *Int:\n\t\treturn nil\n\n\tcase *Enum:\n\t\ttv := targetType.(*Enum)\n\t\tif !coreEssentialNamesMatch(lv.Name, tv.Name) {\n\t\t\treturn fmt.Errorf(\"names %q and %q don't match: %w\", lv.Name, tv.Name, errImpossibleRelocation)\n\t\t}\n\n\t\treturn nil\n\n\tcase *Fwd:\n\t\ttv := targetType.(*Fwd)\n\t\tif !coreEssentialNamesMatch(lv.Name, tv.Name) {\n\t\t\treturn fmt.Errorf(\"names %q and %q don't match: %w\", lv.Name, tv.Name, errImpossibleRelocation)\n\t\t}\n\n\t\treturn nil\n\n\tdefault:\n\t\treturn fmt.Errorf(\"type %s: %w\", localType, ErrNotSupported)\n\t}\n}\n\n// coreEssentialNamesMatch compares two names while ignoring their flavour suffix.\n//\n// This should only be used on names which are in the global scope, like struct\n// names, typedefs or enum values.\nfunc coreEssentialNamesMatch(a, b string) bool {\n\tif a == \"\" || b == \"\" {\n\t\t// allow anonymous and named type to match\n\t\treturn true\n\t}\n\n\treturn newEssentialName(a) == newEssentialName(b)\n}\n\n/* The comment below is from __bpf_core_types_match in relo_core.c:\n *\n * Check that two types \"match\". This function assumes that root types were\n * already checked for name match.\n *\n * The matching relation is defined as follows:\n * - modifiers and typedefs are stripped (and, hence, effectively ignored)\n * - generally speaking types need to be of same kind (struct vs. struct, union\n *   vs. union, etc.)\n *   - exceptions are struct/union behind a pointer which could also match a\n *     forward declaration of a struct or union, respectively, and enum vs.\n *     enum64 (see below)\n * Then, depending on type:\n * - integers:\n *   - match if size and signedness match\n * - arrays & pointers:\n *   - target types are recursively matched\n * - structs & unions:\n *   - local members need to exist in target with the same name\n *   - for each member we recursively check match unless it is already behind a\n *     pointer, in which case we only check matching names and compatible kind\n * - enums:\n *   - local variants have to have a match in target by symbolic name (but not\n *     numeric value)\n *   - size has to match (but enum may match enum64 and vice versa)\n * - function pointers:\n *   - number and position of arguments in local type has to match target\n *   - for each argument and the return value we recursively check match\n */\nfunc coreTypesMatch(localType Type, targetType Type, visited map[pair]struct{}) error {\n\tlocalType = UnderlyingType(localType)\n\ttargetType = UnderlyingType(targetType)\n\n\tif !coreEssentialNamesMatch(localType.TypeName(), targetType.TypeName()) {\n\t\treturn fmt.Errorf(\"type name %q don't match %q: %w\", localType.TypeName(), targetType.TypeName(), errIncompatibleTypes)\n\t}\n\n\tif reflect.TypeOf(localType) != reflect.TypeOf(targetType) {\n\t\treturn fmt.Errorf(\"type mismatch between %v and %v: %w\", localType, targetType, errIncompatibleTypes)\n\t}\n\n\tif _, ok := visited[pair{localType, targetType}]; ok {\n\t\treturn nil\n\t}\n\tif visited == nil {\n\t\tvisited = make(map[pair]struct{})\n\t}\n\tvisited[pair{localType, targetType}] = struct{}{}\n\n\tswitch lv := (localType).(type) {\n\tcase *Void:\n\n\tcase *Fwd:\n\t\tif targetType.(*Fwd).Kind != lv.Kind {\n\t\t\treturn fmt.Errorf(\"fwd kind mismatch between %v and %v: %w\", localType, targetType, errIncompatibleTypes)\n\t\t}\n\n\tcase *Enum:\n\t\treturn coreEnumsMatch(lv, targetType.(*Enum))\n\n\tcase composite:\n\t\ttv := targetType.(composite)\n\n\t\tif len(lv.members()) > len(tv.members()) {\n\t\t\treturn errIncompatibleTypes\n\t\t}\n\n\t\tlocalMembers := lv.members()\n\t\ttargetMembers := map[string]Member{}\n\t\tfor _, member := range tv.members() {\n\t\t\ttargetMembers[member.Name] = member\n\t\t}\n\n\t\tfor _, localMember := range localMembers {\n\t\t\ttargetMember, found := targetMembers[localMember.Name]\n\t\t\tif !found {\n\t\t\t\treturn fmt.Errorf(\"no field %q in %v: %w\", localMember.Name, targetType, errIncompatibleTypes)\n\t\t\t}\n\n\t\t\terr := coreTypesMatch(localMember.Type, targetMember.Type, visited)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\tcase *Int:\n\t\tif !coreEncodingMatches(lv, targetType.(*Int)) {\n\t\t\treturn fmt.Errorf(\"int mismatch between %v and %v: %w\", localType, targetType, errIncompatibleTypes)\n\t\t}\n\n\tcase *Pointer:\n\t\ttv := targetType.(*Pointer)\n\n\t\t// Allow a pointer to a forward declaration to match a struct\n\t\t// or union.\n\t\tif fwd, ok := As[*Fwd](lv.Target); ok && fwd.matches(tv.Target) {\n\t\t\treturn nil\n\t\t}\n\n\t\tif fwd, ok := As[*Fwd](tv.Target); ok && fwd.matches(lv.Target) {\n\t\t\treturn nil\n\t\t}\n\n\t\treturn coreTypesMatch(lv.Target, tv.Target, visited)\n\n\tcase *Array:\n\t\ttv := targetType.(*Array)\n\n\t\tif lv.Nelems != tv.Nelems {\n\t\t\treturn fmt.Errorf(\"array mismatch between %v and %v: %w\", localType, targetType, errIncompatibleTypes)\n\t\t}\n\n\t\treturn coreTypesMatch(lv.Type, tv.Type, visited)\n\n\tcase *FuncProto:\n\t\ttv := targetType.(*FuncProto)\n\n\t\tif len(lv.Params) != len(tv.Params) {\n\t\t\treturn fmt.Errorf(\"function param mismatch: %w\", errIncompatibleTypes)\n\t\t}\n\n\t\tfor i, lparam := range lv.Params {\n\t\t\tif err := coreTypesMatch(lparam.Type, tv.Params[i].Type, visited); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\treturn coreTypesMatch(lv.Return, tv.Return, visited)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported type %T\", localType)\n\t}\n\n\treturn nil\n}\n\n// coreEncodingMatches returns true if both ints have the same size and signedness.\n// All encodings other than `Signed` are considered unsigned.\nfunc coreEncodingMatches(local, target *Int) bool {\n\treturn local.Size == target.Size && (local.Encoding == Signed) == (target.Encoding == Signed)\n}\n\n// coreEnumsMatch checks two enums match, which is considered to be the case if the following is true:\n// - size has to match (but enum may match enum64 and vice versa)\n// - local variants have to have a match in target by symbolic name (but not numeric value)\nfunc coreEnumsMatch(local *Enum, target *Enum) error {\n\tif local.Size != target.Size {\n\t\treturn fmt.Errorf(\"size mismatch between %v and %v: %w\", local, target, errIncompatibleTypes)\n\t}\n\n\t// If there are more values in the local than the target, there must be at least one value in the local\n\t// that isn't in the target, and therefor the types are incompatible.\n\tif len(local.Values) > len(target.Values) {\n\t\treturn fmt.Errorf(\"local has more values than target: %w\", errIncompatibleTypes)\n\t}\n\nouter:\n\tfor _, lv := range local.Values {\n\t\tfor _, rv := range target.Values {\n\t\t\tif coreEssentialNamesMatch(lv.Name, rv.Name) {\n\t\t\t\tcontinue outer\n\t\t\t}\n\t\t}\n\n\t\treturn fmt.Errorf(\"no match for %v in %v: %w\", lv, target, errIncompatibleTypes)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/doc.go",
    "content": "// Package btf handles data encoded according to the BPF Type Format.\n//\n// The canonical documentation lives in the Linux kernel repository and is\n// available at https://www.kernel.org/doc/html/latest/bpf/btf.html\npackage btf\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/ext_info.go",
    "content": "package btf\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/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/internal\"\n)\n\n// ExtInfos contains ELF section metadata.\ntype ExtInfos struct {\n\t// The slices are sorted by offset in ascending order.\n\tfuncInfos       map[string]FuncOffsets\n\tlineInfos       map[string]LineOffsets\n\trelocationInfos map[string]CORERelocationInfos\n}\n\n// loadExtInfosFromELF parses ext infos from the .BTF.ext section in an ELF.\n//\n// Returns an error wrapping ErrNotFound if no ext infos are present.\nfunc loadExtInfosFromELF(file *internal.SafeELFFile, spec *Spec) (*ExtInfos, error) {\n\tsection := file.Section(\".BTF.ext\")\n\tif section == nil {\n\t\treturn nil, fmt.Errorf(\"btf ext infos: %w\", ErrNotFound)\n\t}\n\n\tif section.ReaderAt == nil {\n\t\treturn nil, fmt.Errorf(\"compressed ext_info is not supported\")\n\t}\n\n\treturn loadExtInfos(section.ReaderAt, file.ByteOrder, spec)\n}\n\n// loadExtInfos parses bare ext infos.\nfunc loadExtInfos(r io.ReaderAt, bo binary.ByteOrder, spec *Spec) (*ExtInfos, error) {\n\t// Open unbuffered section reader. binary.Read() calls io.ReadFull on\n\t// the header structs, resulting in one syscall per header.\n\theaderRd := io.NewSectionReader(r, 0, math.MaxInt64)\n\textHeader, err := parseBTFExtHeader(headerRd, bo)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"parsing BTF extension header: %w\", err)\n\t}\n\n\tcoreHeader, err := parseBTFExtCOREHeader(headerRd, bo, extHeader)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"parsing BTF CO-RE header: %w\", err)\n\t}\n\n\tbuf := internal.NewBufferedSectionReader(r, extHeader.funcInfoStart(), int64(extHeader.FuncInfoLen))\n\tbtfFuncInfos, err := parseFuncInfos(buf, bo, spec.strings)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"parsing BTF function info: %w\", err)\n\t}\n\n\tfuncInfos := make(map[string]FuncOffsets, len(btfFuncInfos))\n\tfor section, bfis := range btfFuncInfos {\n\t\tfuncInfos[section], err = newFuncOffsets(bfis, spec)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"section %s: func infos: %w\", section, err)\n\t\t}\n\t}\n\n\tbuf = internal.NewBufferedSectionReader(r, extHeader.lineInfoStart(), int64(extHeader.LineInfoLen))\n\tbtfLineInfos, err := parseLineInfos(buf, bo, spec.strings)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"parsing BTF line info: %w\", err)\n\t}\n\n\tlineInfos := make(map[string]LineOffsets, len(btfLineInfos))\n\tfor section, blis := range btfLineInfos {\n\t\tlineInfos[section], err = newLineInfos(blis, spec.strings)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"section %s: line infos: %w\", section, err)\n\t\t}\n\t}\n\n\tif coreHeader == nil || coreHeader.COREReloLen == 0 {\n\t\treturn &ExtInfos{funcInfos, lineInfos, nil}, nil\n\t}\n\n\tvar btfCORERelos map[string][]bpfCORERelo\n\tbuf = internal.NewBufferedSectionReader(r, extHeader.coreReloStart(coreHeader), int64(coreHeader.COREReloLen))\n\tbtfCORERelos, err = parseCORERelos(buf, bo, spec.strings)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"parsing CO-RE relocation info: %w\", err)\n\t}\n\n\tcoreRelos := make(map[string]CORERelocationInfos, len(btfCORERelos))\n\tfor section, brs := range btfCORERelos {\n\t\tcoreRelos[section], err = newRelocationInfos(brs, spec, spec.strings)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"section %s: CO-RE relocations: %w\", section, err)\n\t\t}\n\t}\n\n\treturn &ExtInfos{funcInfos, lineInfos, coreRelos}, nil\n}\n\ntype (\n\tfuncInfoMeta       struct{}\n\tcoreRelocationMeta struct{}\n)\n\n// Assign per-section metadata from BTF to a section's instructions.\nfunc (ei *ExtInfos) Assign(insns asm.Instructions, section string) {\n\tfuncInfos := ei.funcInfos[section]\n\tlineInfos := ei.lineInfos[section]\n\treloInfos := ei.relocationInfos[section]\n\n\tAssignMetadataToInstructions(insns, funcInfos, lineInfos, reloInfos)\n}\n\n// Assign per-instruction metadata to the instructions in insns.\nfunc AssignMetadataToInstructions(\n\tinsns asm.Instructions,\n\tfuncInfos FuncOffsets,\n\tlineInfos LineOffsets,\n\treloInfos CORERelocationInfos,\n) {\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tif len(funcInfos) > 0 && funcInfos[0].Offset == iter.Offset {\n\t\t\t*iter.Ins = WithFuncMetadata(*iter.Ins, funcInfos[0].Func)\n\t\t\tfuncInfos = funcInfos[1:]\n\t\t}\n\n\t\tif len(lineInfos) > 0 && lineInfos[0].Offset == iter.Offset {\n\t\t\t*iter.Ins = iter.Ins.WithSource(lineInfos[0].Line)\n\t\t\tlineInfos = lineInfos[1:]\n\t\t}\n\n\t\tif len(reloInfos.infos) > 0 && reloInfos.infos[0].offset == iter.Offset {\n\t\t\titer.Ins.Metadata.Set(coreRelocationMeta{}, reloInfos.infos[0].relo)\n\t\t\treloInfos.infos = reloInfos.infos[1:]\n\t\t}\n\t}\n}\n\n// MarshalExtInfos encodes function and line info embedded in insns into kernel\n// wire format.\n//\n// If an instruction has an [asm.Comment], it will be synthesized into a mostly\n// empty line info.\nfunc MarshalExtInfos(insns asm.Instructions, b *Builder) (funcInfos, lineInfos []byte, _ error) {\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tif iter.Ins.Source() != nil || FuncMetadata(iter.Ins) != nil {\n\t\t\tgoto marshal\n\t\t}\n\t}\n\n\treturn nil, nil, nil\n\nmarshal:\n\tvar fiBuf, liBuf bytes.Buffer\n\tfor {\n\t\tif fn := FuncMetadata(iter.Ins); fn != nil {\n\t\t\tfi := &FuncOffset{\n\t\t\t\tFunc:   fn,\n\t\t\t\tOffset: iter.Offset,\n\t\t\t}\n\t\t\tif err := fi.marshal(&fiBuf, b); err != nil {\n\t\t\t\treturn nil, nil, fmt.Errorf(\"write func info: %w\", err)\n\t\t\t}\n\t\t}\n\n\t\tif source := iter.Ins.Source(); source != nil {\n\t\t\tvar line *Line\n\t\t\tif l, ok := source.(*Line); ok {\n\t\t\t\tline = l\n\t\t\t} else {\n\t\t\t\tline = &Line{\n\t\t\t\t\tline: source.String(),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tli := &LineOffset{\n\t\t\t\tOffset: iter.Offset,\n\t\t\t\tLine:   line,\n\t\t\t}\n\t\t\tif err := li.marshal(&liBuf, b); err != nil {\n\t\t\t\treturn nil, nil, fmt.Errorf(\"write line info: %w\", err)\n\t\t\t}\n\t\t}\n\n\t\tif !iter.Next() {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn fiBuf.Bytes(), liBuf.Bytes(), nil\n}\n\n// btfExtHeader is found at the start of the .BTF.ext section.\ntype btfExtHeader struct {\n\tMagic   uint16\n\tVersion uint8\n\tFlags   uint8\n\n\t// HdrLen is larger than the size of struct btfExtHeader when it is\n\t// immediately followed by a btfExtCOREHeader.\n\tHdrLen uint32\n\n\tFuncInfoOff uint32\n\tFuncInfoLen uint32\n\tLineInfoOff uint32\n\tLineInfoLen uint32\n}\n\n// parseBTFExtHeader parses the header of the .BTF.ext section.\nfunc parseBTFExtHeader(r io.Reader, bo binary.ByteOrder) (*btfExtHeader, error) {\n\tvar header btfExtHeader\n\tif err := binary.Read(r, bo, &header); err != nil {\n\t\treturn nil, fmt.Errorf(\"can't read header: %v\", err)\n\t}\n\n\tif header.Magic != btfMagic {\n\t\treturn nil, fmt.Errorf(\"incorrect magic value %v\", header.Magic)\n\t}\n\n\tif header.Version != 1 {\n\t\treturn nil, fmt.Errorf(\"unexpected version %v\", header.Version)\n\t}\n\n\tif header.Flags != 0 {\n\t\treturn nil, fmt.Errorf(\"unsupported flags %v\", header.Flags)\n\t}\n\n\tif int64(header.HdrLen) < int64(binary.Size(&header)) {\n\t\treturn nil, fmt.Errorf(\"header length shorter than btfExtHeader size\")\n\t}\n\n\treturn &header, nil\n}\n\n// funcInfoStart returns the offset from the beginning of the .BTF.ext section\n// to the start of its func_info entries.\nfunc (h *btfExtHeader) funcInfoStart() int64 {\n\treturn int64(h.HdrLen + h.FuncInfoOff)\n}\n\n// lineInfoStart returns the offset from the beginning of the .BTF.ext section\n// to the start of its line_info entries.\nfunc (h *btfExtHeader) lineInfoStart() int64 {\n\treturn int64(h.HdrLen + h.LineInfoOff)\n}\n\n// coreReloStart returns the offset from the beginning of the .BTF.ext section\n// to the start of its CO-RE relocation entries.\nfunc (h *btfExtHeader) coreReloStart(ch *btfExtCOREHeader) int64 {\n\treturn int64(h.HdrLen + ch.COREReloOff)\n}\n\n// btfExtCOREHeader is found right after the btfExtHeader when its HdrLen\n// field is larger than its size.\ntype btfExtCOREHeader struct {\n\tCOREReloOff uint32\n\tCOREReloLen uint32\n}\n\n// parseBTFExtCOREHeader parses the tail of the .BTF.ext header. If additional\n// header bytes are present, extHeader.HdrLen will be larger than the struct,\n// indicating the presence of a CO-RE extension header.\nfunc parseBTFExtCOREHeader(r io.Reader, bo binary.ByteOrder, extHeader *btfExtHeader) (*btfExtCOREHeader, error) {\n\textHdrSize := int64(binary.Size(&extHeader))\n\tremainder := int64(extHeader.HdrLen) - extHdrSize\n\n\tif remainder == 0 {\n\t\treturn nil, nil\n\t}\n\n\tvar coreHeader btfExtCOREHeader\n\tif err := binary.Read(r, bo, &coreHeader); err != nil {\n\t\treturn nil, fmt.Errorf(\"can't read header: %v\", err)\n\t}\n\n\treturn &coreHeader, nil\n}\n\ntype btfExtInfoSec struct {\n\tSecNameOff uint32\n\tNumInfo    uint32\n}\n\n// parseExtInfoSec parses a btf_ext_info_sec header within .BTF.ext,\n// appearing within func_info and line_info sub-sections.\n// These headers appear once for each program section in the ELF and are\n// followed by one or more func/line_info records for the section.\nfunc parseExtInfoSec(r io.Reader, bo binary.ByteOrder, strings *stringTable) (string, *btfExtInfoSec, error) {\n\tvar infoHeader btfExtInfoSec\n\tif err := binary.Read(r, bo, &infoHeader); err != nil {\n\t\treturn \"\", nil, fmt.Errorf(\"read ext info header: %w\", err)\n\t}\n\n\tsecName, err := strings.Lookup(infoHeader.SecNameOff)\n\tif err != nil {\n\t\treturn \"\", nil, fmt.Errorf(\"get section name: %w\", err)\n\t}\n\tif secName == \"\" {\n\t\treturn \"\", nil, fmt.Errorf(\"extinfo header refers to empty section name\")\n\t}\n\n\tif infoHeader.NumInfo == 0 {\n\t\treturn \"\", nil, fmt.Errorf(\"section %s has zero records\", secName)\n\t}\n\n\treturn secName, &infoHeader, nil\n}\n\n// parseExtInfoRecordSize parses the uint32 at the beginning of a func_infos\n// or line_infos segment that describes the length of all extInfoRecords in\n// that segment.\nfunc parseExtInfoRecordSize(r io.Reader, bo binary.ByteOrder) (uint32, error) {\n\tconst maxRecordSize = 256\n\n\tvar recordSize uint32\n\tif err := binary.Read(r, bo, &recordSize); err != nil {\n\t\treturn 0, fmt.Errorf(\"can't read record size: %v\", err)\n\t}\n\n\tif recordSize < 4 {\n\t\t// Need at least InsnOff worth of bytes per record.\n\t\treturn 0, errors.New(\"record size too short\")\n\t}\n\tif recordSize > maxRecordSize {\n\t\treturn 0, fmt.Errorf(\"record size %v exceeds %v\", recordSize, maxRecordSize)\n\t}\n\n\treturn recordSize, nil\n}\n\n// FuncOffsets is a sorted slice of FuncOffset.\ntype FuncOffsets []FuncOffset\n\n// The size of a FuncInfo in BTF wire format.\nvar FuncInfoSize = uint32(binary.Size(bpfFuncInfo{}))\n\n// FuncOffset represents a [btf.Func] and its raw instruction offset within a\n// BPF program.\ntype FuncOffset struct {\n\tOffset asm.RawInstructionOffset\n\tFunc   *Func\n}\n\ntype bpfFuncInfo struct {\n\t// Instruction offset of the function within an ELF section.\n\tInsnOff uint32\n\tTypeID  TypeID\n}\n\nfunc newFuncOffset(fi bpfFuncInfo, spec *Spec) (*FuncOffset, error) {\n\ttyp, err := spec.TypeByID(fi.TypeID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfn, ok := typ.(*Func)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"type ID %d is a %T, but expected a Func\", fi.TypeID, typ)\n\t}\n\n\t// C doesn't have anonymous functions, but check just in case.\n\tif fn.Name == \"\" {\n\t\treturn nil, fmt.Errorf(\"func with type ID %d doesn't have a name\", fi.TypeID)\n\t}\n\n\treturn &FuncOffset{\n\t\tasm.RawInstructionOffset(fi.InsnOff),\n\t\tfn,\n\t}, nil\n}\n\nfunc newFuncOffsets(bfis []bpfFuncInfo, spec *Spec) (FuncOffsets, error) {\n\tfos := make(FuncOffsets, 0, len(bfis))\n\n\tfor _, bfi := range bfis {\n\t\tfi, err := newFuncOffset(bfi, spec)\n\t\tif err != nil {\n\t\t\treturn FuncOffsets{}, fmt.Errorf(\"offset %d: %w\", bfi.InsnOff, err)\n\t\t}\n\t\tfos = append(fos, *fi)\n\t}\n\tsort.Slice(fos, func(i, j int) bool {\n\t\treturn fos[i].Offset <= fos[j].Offset\n\t})\n\treturn fos, nil\n}\n\n// LoadFuncInfos parses BTF func info from kernel wire format into a\n// [FuncOffsets], a sorted slice of [btf.Func]s of (sub)programs within a BPF\n// program with their corresponding raw instruction offsets.\nfunc LoadFuncInfos(reader io.Reader, bo binary.ByteOrder, recordNum uint32, spec *Spec) (FuncOffsets, error) {\n\tfis, err := parseFuncInfoRecords(\n\t\treader,\n\t\tbo,\n\t\tFuncInfoSize,\n\t\trecordNum,\n\t\tfalse,\n\t)\n\tif err != nil {\n\t\treturn FuncOffsets{}, fmt.Errorf(\"parsing BTF func info: %w\", err)\n\t}\n\n\treturn newFuncOffsets(fis, spec)\n}\n\n// marshal into the BTF wire format.\nfunc (fi *FuncOffset) marshal(w *bytes.Buffer, b *Builder) error {\n\tid, err := b.Add(fi.Func)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbfi := bpfFuncInfo{\n\t\tInsnOff: uint32(fi.Offset),\n\t\tTypeID:  id,\n\t}\n\tbuf := make([]byte, FuncInfoSize)\n\tinternal.NativeEndian.PutUint32(buf, bfi.InsnOff)\n\tinternal.NativeEndian.PutUint32(buf[4:], uint32(bfi.TypeID))\n\t_, err = w.Write(buf)\n\treturn err\n}\n\n// parseFuncInfos parses a func_info sub-section within .BTF.ext ito a map of\n// func infos indexed by section name.\nfunc parseFuncInfos(r io.Reader, bo binary.ByteOrder, strings *stringTable) (map[string][]bpfFuncInfo, error) {\n\trecordSize, err := parseExtInfoRecordSize(r, bo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresult := make(map[string][]bpfFuncInfo)\n\tfor {\n\t\tsecName, infoHeader, err := parseExtInfoSec(r, bo, strings)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\treturn result, nil\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\trecords, err := parseFuncInfoRecords(r, bo, recordSize, infoHeader.NumInfo, true)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"section %v: %w\", secName, err)\n\t\t}\n\n\t\tresult[secName] = records\n\t}\n}\n\n// parseFuncInfoRecords parses a stream of func_infos into a funcInfos.\n// These records appear after a btf_ext_info_sec header in the func_info\n// sub-section of .BTF.ext.\nfunc parseFuncInfoRecords(r io.Reader, bo binary.ByteOrder, recordSize uint32, recordNum uint32, offsetInBytes bool) ([]bpfFuncInfo, error) {\n\tvar out []bpfFuncInfo\n\tvar fi bpfFuncInfo\n\n\tif exp, got := FuncInfoSize, recordSize; exp != got {\n\t\t// BTF blob's record size is longer than we know how to parse.\n\t\treturn nil, fmt.Errorf(\"expected FuncInfo record size %d, but BTF blob contains %d\", exp, got)\n\t}\n\n\tfor i := uint32(0); i < recordNum; i++ {\n\t\tif err := binary.Read(r, bo, &fi); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"can't read function info: %v\", err)\n\t\t}\n\n\t\tif offsetInBytes {\n\t\t\tif fi.InsnOff%asm.InstructionSize != 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"offset %v is not aligned with instruction size\", fi.InsnOff)\n\t\t\t}\n\n\t\t\t// ELF tracks offset in bytes, the kernel expects raw BPF instructions.\n\t\t\t// Convert as early as possible.\n\t\t\tfi.InsnOff /= asm.InstructionSize\n\t\t}\n\n\t\tout = append(out, fi)\n\t}\n\n\treturn out, nil\n}\n\nvar LineInfoSize = uint32(binary.Size(bpfLineInfo{}))\n\n// Line represents the location and contents of a single line of source\n// code a BPF ELF was compiled from.\ntype Line struct {\n\tfileName   string\n\tline       string\n\tlineNumber uint32\n\tlineColumn uint32\n}\n\nfunc (li *Line) FileName() string {\n\treturn li.fileName\n}\n\nfunc (li *Line) Line() string {\n\treturn li.line\n}\n\nfunc (li *Line) LineNumber() uint32 {\n\treturn li.lineNumber\n}\n\nfunc (li *Line) LineColumn() uint32 {\n\treturn li.lineColumn\n}\n\nfunc (li *Line) String() string {\n\treturn li.line\n}\n\n// LineOffsets contains a sorted list of line infos.\ntype LineOffsets []LineOffset\n\n// LineOffset represents a line info and its raw instruction offset.\ntype LineOffset struct {\n\tOffset asm.RawInstructionOffset\n\tLine   *Line\n}\n\n// Constants for the format of bpfLineInfo.LineCol.\nconst (\n\tbpfLineShift = 10\n\tbpfLineMax   = (1 << (32 - bpfLineShift)) - 1\n\tbpfColumnMax = (1 << bpfLineShift) - 1\n)\n\ntype bpfLineInfo struct {\n\t// Instruction offset of the line within the whole instruction stream, in instructions.\n\tInsnOff     uint32\n\tFileNameOff uint32\n\tLineOff     uint32\n\tLineCol     uint32\n}\n\n// LoadLineInfos parses BTF line info in kernel wire format.\nfunc LoadLineInfos(reader io.Reader, bo binary.ByteOrder, recordNum uint32, spec *Spec) (LineOffsets, error) {\n\tlis, err := parseLineInfoRecords(\n\t\treader,\n\t\tbo,\n\t\tLineInfoSize,\n\t\trecordNum,\n\t\tfalse,\n\t)\n\tif err != nil {\n\t\treturn LineOffsets{}, fmt.Errorf(\"parsing BTF line info: %w\", err)\n\t}\n\n\treturn newLineInfos(lis, spec.strings)\n}\n\nfunc newLineInfo(li bpfLineInfo, strings *stringTable) (LineOffset, error) {\n\tline, err := strings.Lookup(li.LineOff)\n\tif err != nil {\n\t\treturn LineOffset{}, fmt.Errorf(\"lookup of line: %w\", err)\n\t}\n\n\tfileName, err := strings.Lookup(li.FileNameOff)\n\tif err != nil {\n\t\treturn LineOffset{}, fmt.Errorf(\"lookup of filename: %w\", err)\n\t}\n\n\tlineNumber := li.LineCol >> bpfLineShift\n\tlineColumn := li.LineCol & bpfColumnMax\n\n\treturn LineOffset{\n\t\tasm.RawInstructionOffset(li.InsnOff),\n\t\t&Line{\n\t\t\tfileName,\n\t\t\tline,\n\t\t\tlineNumber,\n\t\t\tlineColumn,\n\t\t},\n\t}, nil\n}\n\nfunc newLineInfos(blis []bpfLineInfo, strings *stringTable) (LineOffsets, error) {\n\tlis := make([]LineOffset, 0, len(blis))\n\tfor _, bli := range blis {\n\t\tli, err := newLineInfo(bli, strings)\n\t\tif err != nil {\n\t\t\treturn LineOffsets{}, fmt.Errorf(\"offset %d: %w\", bli.InsnOff, err)\n\t\t}\n\t\tlis = append(lis, li)\n\t}\n\tsort.Slice(lis, func(i, j int) bool {\n\t\treturn lis[i].Offset <= lis[j].Offset\n\t})\n\treturn lis, nil\n}\n\n// marshal writes the binary representation of the LineInfo to w.\nfunc (li *LineOffset) marshal(w *bytes.Buffer, b *Builder) error {\n\tline := li.Line\n\tif line.lineNumber > bpfLineMax {\n\t\treturn fmt.Errorf(\"line %d exceeds %d\", line.lineNumber, bpfLineMax)\n\t}\n\n\tif line.lineColumn > bpfColumnMax {\n\t\treturn fmt.Errorf(\"column %d exceeds %d\", line.lineColumn, bpfColumnMax)\n\t}\n\n\tfileNameOff, err := b.addString(line.fileName)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"file name %q: %w\", line.fileName, err)\n\t}\n\n\tlineOff, err := b.addString(line.line)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"line %q: %w\", line.line, err)\n\t}\n\n\tbli := bpfLineInfo{\n\t\tuint32(li.Offset),\n\t\tfileNameOff,\n\t\tlineOff,\n\t\t(line.lineNumber << bpfLineShift) | line.lineColumn,\n\t}\n\n\tbuf := make([]byte, LineInfoSize)\n\tinternal.NativeEndian.PutUint32(buf, bli.InsnOff)\n\tinternal.NativeEndian.PutUint32(buf[4:], bli.FileNameOff)\n\tinternal.NativeEndian.PutUint32(buf[8:], bli.LineOff)\n\tinternal.NativeEndian.PutUint32(buf[12:], bli.LineCol)\n\t_, err = w.Write(buf)\n\treturn err\n}\n\n// parseLineInfos parses a line_info sub-section within .BTF.ext ito a map of\n// line infos indexed by section name.\nfunc parseLineInfos(r io.Reader, bo binary.ByteOrder, strings *stringTable) (map[string][]bpfLineInfo, error) {\n\trecordSize, err := parseExtInfoRecordSize(r, bo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresult := make(map[string][]bpfLineInfo)\n\tfor {\n\t\tsecName, infoHeader, err := parseExtInfoSec(r, bo, strings)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\treturn result, nil\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\trecords, err := parseLineInfoRecords(r, bo, recordSize, infoHeader.NumInfo, true)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"section %v: %w\", secName, err)\n\t\t}\n\n\t\tresult[secName] = records\n\t}\n}\n\n// parseLineInfoRecords parses a stream of line_infos into a lineInfos.\n// These records appear after a btf_ext_info_sec header in the line_info\n// sub-section of .BTF.ext.\nfunc parseLineInfoRecords(r io.Reader, bo binary.ByteOrder, recordSize uint32, recordNum uint32, offsetInBytes bool) ([]bpfLineInfo, error) {\n\tif exp, got := uint32(binary.Size(bpfLineInfo{})), recordSize; exp != got {\n\t\t// BTF blob's record size is longer than we know how to parse.\n\t\treturn nil, fmt.Errorf(\"expected LineInfo record size %d, but BTF blob contains %d\", exp, got)\n\t}\n\n\tout := make([]bpfLineInfo, recordNum)\n\tif err := binary.Read(r, bo, out); err != nil {\n\t\treturn nil, fmt.Errorf(\"can't read line info: %v\", err)\n\t}\n\n\tif offsetInBytes {\n\t\tfor i := range out {\n\t\t\tli := &out[i]\n\t\t\tif li.InsnOff%asm.InstructionSize != 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"offset %v is not aligned with instruction size\", li.InsnOff)\n\t\t\t}\n\n\t\t\t// ELF tracks offset in bytes, the kernel expects raw BPF instructions.\n\t\t\t// Convert as early as possible.\n\t\t\tli.InsnOff /= asm.InstructionSize\n\t\t}\n\t}\n\n\treturn out, nil\n}\n\n// bpfCORERelo matches the kernel's struct bpf_core_relo.\ntype bpfCORERelo struct {\n\tInsnOff      uint32\n\tTypeID       TypeID\n\tAccessStrOff uint32\n\tKind         coreKind\n}\n\ntype CORERelocation struct {\n\t// The local type of the relocation, stripped of typedefs and qualifiers.\n\ttyp      Type\n\taccessor coreAccessor\n\tkind     coreKind\n\t// The ID of the local type in the source BTF.\n\tid TypeID\n}\n\nfunc (cr *CORERelocation) String() string {\n\treturn fmt.Sprintf(\"CORERelocation(%s, %s[%s], local_id=%d)\", cr.kind, cr.typ, cr.accessor, cr.id)\n}\n\nfunc CORERelocationMetadata(ins *asm.Instruction) *CORERelocation {\n\trelo, _ := ins.Metadata.Get(coreRelocationMeta{}).(*CORERelocation)\n\treturn relo\n}\n\n// CORERelocationInfos contains a sorted list of co:re relocation infos.\ntype CORERelocationInfos struct {\n\tinfos []coreRelocationInfo\n}\n\ntype coreRelocationInfo struct {\n\trelo   *CORERelocation\n\toffset asm.RawInstructionOffset\n}\n\nfunc newRelocationInfo(relo bpfCORERelo, spec *Spec, strings *stringTable) (*coreRelocationInfo, error) {\n\ttyp, err := spec.TypeByID(relo.TypeID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\taccessorStr, err := strings.Lookup(relo.AccessStrOff)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\taccessor, err := parseCOREAccessor(accessorStr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"accessor %q: %s\", accessorStr, err)\n\t}\n\n\treturn &coreRelocationInfo{\n\t\t&CORERelocation{\n\t\t\ttyp,\n\t\t\taccessor,\n\t\t\trelo.Kind,\n\t\t\trelo.TypeID,\n\t\t},\n\t\tasm.RawInstructionOffset(relo.InsnOff),\n\t}, nil\n}\n\nfunc newRelocationInfos(brs []bpfCORERelo, spec *Spec, strings *stringTable) (CORERelocationInfos, error) {\n\trs := CORERelocationInfos{\n\t\tinfos: make([]coreRelocationInfo, 0, len(brs)),\n\t}\n\tfor _, br := range brs {\n\t\trelo, err := newRelocationInfo(br, spec, strings)\n\t\tif err != nil {\n\t\t\treturn CORERelocationInfos{}, fmt.Errorf(\"offset %d: %w\", br.InsnOff, err)\n\t\t}\n\t\trs.infos = append(rs.infos, *relo)\n\t}\n\tsort.Slice(rs.infos, func(i, j int) bool {\n\t\treturn rs.infos[i].offset < rs.infos[j].offset\n\t})\n\treturn rs, nil\n}\n\nvar extInfoReloSize = binary.Size(bpfCORERelo{})\n\n// parseCORERelos parses a core_relos sub-section within .BTF.ext ito a map of\n// CO-RE relocations indexed by section name.\nfunc parseCORERelos(r io.Reader, bo binary.ByteOrder, strings *stringTable) (map[string][]bpfCORERelo, error) {\n\trecordSize, err := parseExtInfoRecordSize(r, bo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif recordSize != uint32(extInfoReloSize) {\n\t\treturn nil, fmt.Errorf(\"expected record size %d, got %d\", extInfoReloSize, recordSize)\n\t}\n\n\tresult := make(map[string][]bpfCORERelo)\n\tfor {\n\t\tsecName, infoHeader, err := parseExtInfoSec(r, bo, strings)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\treturn result, nil\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\trecords, err := parseCOREReloRecords(r, bo, infoHeader.NumInfo)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"section %v: %w\", secName, err)\n\t\t}\n\n\t\tresult[secName] = records\n\t}\n}\n\n// parseCOREReloRecords parses a stream of CO-RE relocation entries into a\n// coreRelos. These records appear after a btf_ext_info_sec header in the\n// core_relos sub-section of .BTF.ext.\nfunc parseCOREReloRecords(r io.Reader, bo binary.ByteOrder, recordNum uint32) ([]bpfCORERelo, error) {\n\tvar out []bpfCORERelo\n\n\tvar relo bpfCORERelo\n\tfor i := uint32(0); i < recordNum; i++ {\n\t\tif err := binary.Read(r, bo, &relo); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"can't read CO-RE relocation: %v\", err)\n\t\t}\n\n\t\tif relo.InsnOff%asm.InstructionSize != 0 {\n\t\t\treturn nil, fmt.Errorf(\"offset %v is not aligned with instruction size\", relo.InsnOff)\n\t\t}\n\n\t\t// ELF tracks offset in bytes, the kernel expects raw BPF instructions.\n\t\t// Convert as early as possible.\n\t\trelo.InsnOff /= asm.InstructionSize\n\n\t\tout = append(out, relo)\n\t}\n\n\treturn out, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/feature.go",
    "content": "package btf\n\nimport (\n\t\"errors\"\n\t\"math\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// haveBTF attempts to load a BTF blob containing an Int. It should pass on any\n// kernel that supports BPF_BTF_LOAD.\nvar haveBTF = internal.NewFeatureTest(\"BTF\", func() error {\n\t// 0-length anonymous integer\n\terr := probeBTF(&Int{})\n\tif errors.Is(err, unix.EINVAL) || errors.Is(err, unix.EPERM) {\n\t\treturn internal.ErrNotSupported\n\t}\n\treturn err\n}, \"4.18\")\n\n// haveMapBTF attempts to load a minimal BTF blob containing a Var. It is\n// used as a proxy for .bss, .data and .rodata map support, which generally\n// come with a Var and Datasec. These were introduced in Linux 5.2.\nvar haveMapBTF = internal.NewFeatureTest(\"Map BTF (Var/Datasec)\", func() error {\n\tif err := haveBTF(); err != nil {\n\t\treturn err\n\t}\n\n\tv := &Var{\n\t\tName: \"a\",\n\t\tType: &Pointer{(*Void)(nil)},\n\t}\n\n\terr := probeBTF(v)\n\tif errors.Is(err, unix.EINVAL) || errors.Is(err, unix.EPERM) {\n\t\t// Treat both EINVAL and EPERM as not supported: creating the map may still\n\t\t// succeed without Btf* attrs.\n\t\treturn internal.ErrNotSupported\n\t}\n\treturn err\n}, \"5.2\")\n\n// haveProgBTF attempts to load a BTF blob containing a Func and FuncProto. It\n// is used as a proxy for ext_info (func_info) support, which depends on\n// Func(Proto) by definition.\nvar haveProgBTF = internal.NewFeatureTest(\"Program BTF (func/line_info)\", func() error {\n\tif err := haveBTF(); err != nil {\n\t\treturn err\n\t}\n\n\tfn := &Func{\n\t\tName: \"a\",\n\t\tType: &FuncProto{Return: (*Void)(nil)},\n\t}\n\n\terr := probeBTF(fn)\n\tif errors.Is(err, unix.EINVAL) || errors.Is(err, unix.EPERM) {\n\t\treturn internal.ErrNotSupported\n\t}\n\treturn err\n}, \"5.0\")\n\nvar haveFuncLinkage = internal.NewFeatureTest(\"BTF func linkage\", func() error {\n\tif err := haveProgBTF(); err != nil {\n\t\treturn err\n\t}\n\n\tfn := &Func{\n\t\tName:    \"a\",\n\t\tType:    &FuncProto{Return: (*Void)(nil)},\n\t\tLinkage: GlobalFunc,\n\t}\n\n\terr := probeBTF(fn)\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\treturn err\n}, \"5.6\")\n\nvar haveDeclTags = internal.NewFeatureTest(\"BTF decl tags\", func() error {\n\tif err := haveBTF(); err != nil {\n\t\treturn err\n\t}\n\n\tt := &Typedef{\n\t\tName: \"a\",\n\t\tType: &Int{},\n\t\tTags: []string{\"a\"},\n\t}\n\n\terr := probeBTF(t)\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\treturn err\n}, \"5.16\")\n\nvar haveTypeTags = internal.NewFeatureTest(\"BTF type tags\", func() error {\n\tif err := haveBTF(); err != nil {\n\t\treturn err\n\t}\n\n\tt := &TypeTag{\n\t\tType:  &Int{},\n\t\tValue: \"a\",\n\t}\n\n\terr := probeBTF(t)\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\treturn err\n}, \"5.17\")\n\nvar haveEnum64 = internal.NewFeatureTest(\"ENUM64\", func() error {\n\tif err := haveBTF(); err != nil {\n\t\treturn err\n\t}\n\n\tenum := &Enum{\n\t\tSize: 8,\n\t\tValues: []EnumValue{\n\t\t\t{\"TEST\", math.MaxUint32 + 1},\n\t\t},\n\t}\n\n\terr := probeBTF(enum)\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\treturn err\n}, \"6.0\")\n\nfunc probeBTF(typ Type) error {\n\tb, err := NewBuilder([]Type{typ})\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbuf, err := b.Marshal(nil, nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfd, err := sys.BtfLoad(&sys.BtfLoadAttr{\n\t\tBtf:     sys.NewSlicePointer(buf),\n\t\tBtfSize: uint32(len(buf)),\n\t})\n\n\tif err == nil {\n\t\tfd.Close()\n\t}\n\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/format.go",
    "content": "package btf\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n)\n\nvar errNestedTooDeep = errors.New(\"nested too deep\")\n\n// GoFormatter converts a Type to Go syntax.\n//\n// A zero GoFormatter is valid to use.\ntype GoFormatter struct {\n\tw strings.Builder\n\n\t// Types present in this map are referred to using the given name if they\n\t// are encountered when outputting another type.\n\tNames map[Type]string\n\n\t// Identifier is called for each field of struct-like types. By default the\n\t// field name is used as is.\n\tIdentifier func(string) string\n\n\t// EnumIdentifier is called for each element of an enum. By default the\n\t// name of the enum type is concatenated with Identifier(element).\n\tEnumIdentifier func(name, element string) string\n}\n\n// TypeDeclaration generates a Go type declaration for a BTF type.\nfunc (gf *GoFormatter) TypeDeclaration(name string, typ Type) (string, error) {\n\tgf.w.Reset()\n\tif err := gf.writeTypeDecl(name, typ); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn gf.w.String(), nil\n}\n\nfunc (gf *GoFormatter) identifier(s string) string {\n\tif gf.Identifier != nil {\n\t\treturn gf.Identifier(s)\n\t}\n\n\treturn s\n}\n\nfunc (gf *GoFormatter) enumIdentifier(name, element string) string {\n\tif gf.EnumIdentifier != nil {\n\t\treturn gf.EnumIdentifier(name, element)\n\t}\n\n\treturn name + gf.identifier(element)\n}\n\n// writeTypeDecl outputs a declaration of the given type.\n//\n// It encodes https://golang.org/ref/spec#Type_declarations:\n//\n//\ttype foo struct { bar uint32; }\n//\ttype bar int32\nfunc (gf *GoFormatter) writeTypeDecl(name string, typ Type) error {\n\tif name == \"\" {\n\t\treturn fmt.Errorf(\"need a name for type %s\", typ)\n\t}\n\n\ttyp = skipQualifiers(typ)\n\tfmt.Fprintf(&gf.w, \"type %s \", name)\n\tif err := gf.writeTypeLit(typ, 0); err != nil {\n\t\treturn err\n\t}\n\n\te, ok := typ.(*Enum)\n\tif !ok || len(e.Values) == 0 {\n\t\treturn nil\n\t}\n\n\tgf.w.WriteString(\"; const ( \")\n\tfor _, ev := range e.Values {\n\t\tid := gf.enumIdentifier(name, ev.Name)\n\t\tvar value any\n\t\tif e.Signed {\n\t\t\tvalue = int64(ev.Value)\n\t\t} else {\n\t\t\tvalue = ev.Value\n\t\t}\n\t\tfmt.Fprintf(&gf.w, \"%s %s = %d; \", id, name, value)\n\t}\n\tgf.w.WriteString(\")\")\n\n\treturn nil\n}\n\n// writeType outputs the name of a named type or a literal describing the type.\n//\n// It encodes https://golang.org/ref/spec#Types.\n//\n//\tfoo                  (if foo is a named type)\n//\tuint32\nfunc (gf *GoFormatter) writeType(typ Type, depth int) error {\n\ttyp = skipQualifiers(typ)\n\n\tname := gf.Names[typ]\n\tif name != \"\" {\n\t\tgf.w.WriteString(name)\n\t\treturn nil\n\t}\n\n\treturn gf.writeTypeLit(typ, depth)\n}\n\n// writeTypeLit outputs a literal describing the type.\n//\n// The function ignores named types.\n//\n// It encodes https://golang.org/ref/spec#TypeLit.\n//\n//\tstruct { bar uint32; }\n//\tuint32\nfunc (gf *GoFormatter) writeTypeLit(typ Type, depth int) error {\n\tdepth++\n\tif depth > maxResolveDepth {\n\t\treturn errNestedTooDeep\n\t}\n\n\tvar err error\n\tswitch v := skipQualifiers(typ).(type) {\n\tcase *Int:\n\t\terr = gf.writeIntLit(v)\n\n\tcase *Enum:\n\t\tif !v.Signed {\n\t\t\tgf.w.WriteRune('u')\n\t\t}\n\t\tswitch v.Size {\n\t\tcase 1:\n\t\t\tgf.w.WriteString(\"int8\")\n\t\tcase 2:\n\t\t\tgf.w.WriteString(\"int16\")\n\t\tcase 4:\n\t\t\tgf.w.WriteString(\"int32\")\n\t\tcase 8:\n\t\t\tgf.w.WriteString(\"int64\")\n\t\tdefault:\n\t\t\terr = fmt.Errorf(\"invalid enum size %d\", v.Size)\n\t\t}\n\n\tcase *Typedef:\n\t\terr = gf.writeType(v.Type, depth)\n\n\tcase *Array:\n\t\tfmt.Fprintf(&gf.w, \"[%d]\", v.Nelems)\n\t\terr = gf.writeType(v.Type, depth)\n\n\tcase *Struct:\n\t\terr = gf.writeStructLit(v.Size, v.Members, depth)\n\n\tcase *Union:\n\t\t// Always choose the first member to represent the union in Go.\n\t\terr = gf.writeStructLit(v.Size, v.Members[:1], depth)\n\n\tcase *Datasec:\n\t\terr = gf.writeDatasecLit(v, depth)\n\n\tcase *Var:\n\t\terr = gf.writeTypeLit(v.Type, depth)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"type %T: %w\", v, ErrNotSupported)\n\t}\n\n\tif err != nil {\n\t\treturn fmt.Errorf(\"%s: %w\", typ, err)\n\t}\n\n\treturn nil\n}\n\nfunc (gf *GoFormatter) writeIntLit(i *Int) error {\n\tbits := i.Size * 8\n\tswitch i.Encoding {\n\tcase Bool:\n\t\tif i.Size != 1 {\n\t\t\treturn fmt.Errorf(\"bool with size %d\", i.Size)\n\t\t}\n\t\tgf.w.WriteString(\"bool\")\n\tcase Char:\n\t\tif i.Size != 1 {\n\t\t\treturn fmt.Errorf(\"char with size %d\", i.Size)\n\t\t}\n\t\t// BTF doesn't have a way to specify the signedness of a char. Assume\n\t\t// we are dealing with unsigned, since this works nicely with []byte\n\t\t// in Go code.\n\t\tfallthrough\n\tcase Unsigned, Signed:\n\t\tstem := \"uint\"\n\t\tif i.Encoding == Signed {\n\t\t\tstem = \"int\"\n\t\t}\n\t\tif i.Size > 8 {\n\t\t\tfmt.Fprintf(&gf.w, \"[%d]byte /* %s%d */\", i.Size, stem, i.Size*8)\n\t\t} else {\n\t\t\tfmt.Fprintf(&gf.w, \"%s%d\", stem, bits)\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"can't encode %s\", i.Encoding)\n\t}\n\treturn nil\n}\n\nfunc (gf *GoFormatter) writeStructLit(size uint32, members []Member, depth int) error {\n\tgf.w.WriteString(\"struct { \")\n\n\tprevOffset := uint32(0)\n\tskippedBitfield := false\n\tfor i, m := range members {\n\t\tif m.BitfieldSize > 0 {\n\t\t\tskippedBitfield = true\n\t\t\tcontinue\n\t\t}\n\n\t\toffset := m.Offset.Bytes()\n\t\tif n := offset - prevOffset; skippedBitfield && n > 0 {\n\t\t\tfmt.Fprintf(&gf.w, \"_ [%d]byte /* unsupported bitfield */; \", n)\n\t\t} else {\n\t\t\tgf.writePadding(n)\n\t\t}\n\n\t\tfieldSize, err := Sizeof(m.Type)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"field %d: %w\", i, err)\n\t\t}\n\n\t\tprevOffset = offset + uint32(fieldSize)\n\t\tif prevOffset > size {\n\t\t\treturn fmt.Errorf(\"field %d of size %d exceeds type size %d\", i, fieldSize, size)\n\t\t}\n\n\t\tif err := gf.writeStructField(m, depth); err != nil {\n\t\t\treturn fmt.Errorf(\"field %d: %w\", i, err)\n\t\t}\n\t}\n\n\tgf.writePadding(size - prevOffset)\n\tgf.w.WriteString(\"}\")\n\treturn nil\n}\n\nfunc (gf *GoFormatter) writeStructField(m Member, depth int) error {\n\tif m.BitfieldSize > 0 {\n\t\treturn fmt.Errorf(\"bitfields are not supported\")\n\t}\n\tif m.Offset%8 != 0 {\n\t\treturn fmt.Errorf(\"unsupported offset %d\", m.Offset)\n\t}\n\n\tif m.Name == \"\" {\n\t\t// Special case a nested anonymous union like\n\t\t//     struct foo { union { int bar; int baz }; }\n\t\t// by replacing the whole union with its first member.\n\t\tunion, ok := m.Type.(*Union)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"anonymous fields are not supported\")\n\n\t\t}\n\n\t\tif len(union.Members) == 0 {\n\t\t\treturn errors.New(\"empty anonymous union\")\n\t\t}\n\n\t\tdepth++\n\t\tif depth > maxResolveDepth {\n\t\t\treturn errNestedTooDeep\n\t\t}\n\n\t\tm := union.Members[0]\n\t\tsize, err := Sizeof(m.Type)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif err := gf.writeStructField(m, depth); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tgf.writePadding(union.Size - uint32(size))\n\t\treturn nil\n\n\t}\n\n\tfmt.Fprintf(&gf.w, \"%s \", gf.identifier(m.Name))\n\n\tif err := gf.writeType(m.Type, depth); err != nil {\n\t\treturn err\n\t}\n\n\tgf.w.WriteString(\"; \")\n\treturn nil\n}\n\nfunc (gf *GoFormatter) writeDatasecLit(ds *Datasec, depth int) error {\n\tgf.w.WriteString(\"struct { \")\n\n\tprevOffset := uint32(0)\n\tfor i, vsi := range ds.Vars {\n\t\tv, ok := vsi.Type.(*Var)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"can't format %s as part of data section\", vsi.Type)\n\t\t}\n\n\t\tif v.Linkage != GlobalVar {\n\t\t\t// Ignore static, extern, etc. for now.\n\t\t\tcontinue\n\t\t}\n\n\t\tif v.Name == \"\" {\n\t\t\treturn fmt.Errorf(\"variable %d: empty name\", i)\n\t\t}\n\n\t\tgf.writePadding(vsi.Offset - prevOffset)\n\t\tprevOffset = vsi.Offset + vsi.Size\n\n\t\tfmt.Fprintf(&gf.w, \"%s \", gf.identifier(v.Name))\n\n\t\tif err := gf.writeType(v.Type, depth); err != nil {\n\t\t\treturn fmt.Errorf(\"variable %d: %w\", i, err)\n\t\t}\n\n\t\tgf.w.WriteString(\"; \")\n\t}\n\n\tgf.writePadding(ds.Size - prevOffset)\n\tgf.w.WriteString(\"}\")\n\treturn nil\n}\n\nfunc (gf *GoFormatter) writePadding(bytes uint32) {\n\tif bytes > 0 {\n\t\tfmt.Fprintf(&gf.w, \"_ [%d]byte; \", bytes)\n\t}\n}\n\nfunc skipQualifiers(typ Type) Type {\n\tresult := typ\n\tfor depth := 0; depth <= maxResolveDepth; depth++ {\n\t\tswitch v := (result).(type) {\n\t\tcase qualifier:\n\t\t\tresult = v.qualify()\n\t\tdefault:\n\t\t\treturn result\n\t\t}\n\t}\n\treturn &cycle{typ}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/handle.go",
    "content": "package btf\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// Handle is a reference to BTF loaded into the kernel.\ntype Handle struct {\n\tfd *sys.FD\n\n\t// Size of the raw BTF in bytes.\n\tsize uint32\n\n\tneedsKernelBase bool\n}\n\n// NewHandle loads the contents of a [Builder] into the kernel.\n//\n// Returns an error wrapping ErrNotSupported if the kernel doesn't support BTF.\nfunc NewHandle(b *Builder) (*Handle, error) {\n\tsmall := getByteSlice()\n\tdefer putByteSlice(small)\n\n\tbuf, err := b.Marshal(*small, KernelMarshalOptions())\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"marshal BTF: %w\", err)\n\t}\n\n\treturn NewHandleFromRawBTF(buf)\n}\n\n// NewHandleFromRawBTF loads raw BTF into the kernel.\n//\n// Returns an error wrapping ErrNotSupported if the kernel doesn't support BTF.\nfunc NewHandleFromRawBTF(btf []byte) (*Handle, error) {\n\tconst minLogSize = 64 * 1024\n\n\tif uint64(len(btf)) > math.MaxUint32 {\n\t\treturn nil, errors.New(\"BTF exceeds the maximum size\")\n\t}\n\n\tattr := &sys.BtfLoadAttr{\n\t\tBtf:     sys.NewSlicePointer(btf),\n\t\tBtfSize: uint32(len(btf)),\n\t}\n\n\tvar (\n\t\tlogBuf []byte\n\t\terr    error\n\t)\n\tfor {\n\t\tvar fd *sys.FD\n\t\tfd, err = sys.BtfLoad(attr)\n\t\tif err == nil {\n\t\t\treturn &Handle{fd, attr.BtfSize, false}, nil\n\t\t}\n\n\t\tif attr.BtfLogTrueSize != 0 && attr.BtfLogSize >= attr.BtfLogTrueSize {\n\t\t\t// The log buffer already has the correct size.\n\t\t\tbreak\n\t\t}\n\n\t\tif attr.BtfLogSize != 0 && !errors.Is(err, unix.ENOSPC) {\n\t\t\t// Up until at least kernel 6.0, the BTF verifier does not return ENOSPC\n\t\t\t// if there are other verification errors. ENOSPC is only returned when\n\t\t\t// the BTF blob is correct, a log was requested, and the provided buffer\n\t\t\t// is too small. We're therefore not sure whether we got the full\n\t\t\t// log or not.\n\t\t\tbreak\n\t\t}\n\n\t\t// Make an educated guess how large the buffer should be. Start\n\t\t// at a reasonable minimum and then double the size.\n\t\tlogSize := uint32(max(len(logBuf)*2, minLogSize))\n\t\tif int(logSize) < len(logBuf) {\n\t\t\treturn nil, errors.New(\"overflow while probing log buffer size\")\n\t\t}\n\n\t\tif attr.BtfLogTrueSize != 0 {\n\t\t\t// The kernel has given us a hint how large the log buffer has to be.\n\t\t\tlogSize = attr.BtfLogTrueSize\n\t\t}\n\n\t\tlogBuf = make([]byte, logSize)\n\t\tattr.BtfLogSize = logSize\n\t\tattr.BtfLogBuf = sys.NewSlicePointer(logBuf)\n\t\tattr.BtfLogLevel = 1\n\t}\n\n\tif err := haveBTF(); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn nil, internal.ErrorWithLog(\"load btf\", err, logBuf)\n}\n\n// NewHandleFromID returns the BTF handle for a given id.\n//\n// Prefer calling [ebpf.Program.Handle] or [ebpf.Map.Handle] if possible.\n//\n// Returns ErrNotExist, if there is no BTF with the given id.\n//\n// Requires CAP_SYS_ADMIN.\nfunc NewHandleFromID(id ID) (*Handle, error) {\n\tfd, err := sys.BtfGetFdById(&sys.BtfGetFdByIdAttr{\n\t\tId: uint32(id),\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get FD for ID %d: %w\", id, err)\n\t}\n\n\tinfo, err := newHandleInfoFromFD(fd)\n\tif err != nil {\n\t\t_ = fd.Close()\n\t\treturn nil, err\n\t}\n\n\treturn &Handle{fd, info.size, info.IsModule()}, nil\n}\n\n// Spec parses the kernel BTF into Go types.\n//\n// base must contain type information for vmlinux if the handle is for\n// a kernel module. It may be nil otherwise.\nfunc (h *Handle) Spec(base *Spec) (*Spec, error) {\n\tvar btfInfo sys.BtfInfo\n\tbtfBuffer := make([]byte, h.size)\n\tbtfInfo.Btf, btfInfo.BtfSize = sys.NewSlicePointerLen(btfBuffer)\n\n\tif err := sys.ObjInfo(h.fd, &btfInfo); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif h.needsKernelBase && base == nil {\n\t\treturn nil, fmt.Errorf(\"missing base types\")\n\t}\n\n\treturn loadRawSpec(bytes.NewReader(btfBuffer), internal.NativeEndian, base)\n}\n\n// Close destroys the handle.\n//\n// Subsequent calls to FD will return an invalid value.\nfunc (h *Handle) Close() error {\n\tif h == nil {\n\t\treturn nil\n\t}\n\n\treturn h.fd.Close()\n}\n\n// FD returns the file descriptor for the handle.\nfunc (h *Handle) FD() int {\n\treturn h.fd.Int()\n}\n\n// Info returns metadata about the handle.\nfunc (h *Handle) Info() (*HandleInfo, error) {\n\treturn newHandleInfoFromFD(h.fd)\n}\n\n// HandleInfo describes a Handle.\ntype HandleInfo struct {\n\t// ID of this handle in the kernel. The ID is only valid as long as the\n\t// associated handle is kept alive.\n\tID ID\n\n\t// Name is an identifying name for the BTF, currently only used by the\n\t// kernel.\n\tName string\n\n\t// IsKernel is true if the BTF originated with the kernel and not\n\t// userspace.\n\tIsKernel bool\n\n\t// Size of the raw BTF in bytes.\n\tsize uint32\n}\n\nfunc newHandleInfoFromFD(fd *sys.FD) (*HandleInfo, error) {\n\t// We invoke the syscall once with a empty BTF and name buffers to get size\n\t// information to allocate buffers. Then we invoke it a second time with\n\t// buffers to receive the data.\n\tvar btfInfo sys.BtfInfo\n\tif err := sys.ObjInfo(fd, &btfInfo); err != nil {\n\t\treturn nil, fmt.Errorf(\"get BTF info for fd %s: %w\", fd, err)\n\t}\n\n\tif btfInfo.NameLen > 0 {\n\t\t// NameLen doesn't account for the terminating NUL.\n\t\tbtfInfo.NameLen++\n\t}\n\n\t// Don't pull raw BTF by default, since it may be quite large.\n\tbtfSize := btfInfo.BtfSize\n\tbtfInfo.BtfSize = 0\n\n\tnameBuffer := make([]byte, btfInfo.NameLen)\n\tbtfInfo.Name, btfInfo.NameLen = sys.NewSlicePointerLen(nameBuffer)\n\tif err := sys.ObjInfo(fd, &btfInfo); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &HandleInfo{\n\t\tID:       ID(btfInfo.Id),\n\t\tName:     unix.ByteSliceToString(nameBuffer),\n\t\tIsKernel: btfInfo.KernelBtf != 0,\n\t\tsize:     btfSize,\n\t}, nil\n}\n\n// IsVmlinux returns true if the BTF is for the kernel itself.\nfunc (i *HandleInfo) IsVmlinux() bool {\n\treturn i.IsKernel && i.Name == \"vmlinux\"\n}\n\n// IsModule returns true if the BTF is for a kernel module.\nfunc (i *HandleInfo) IsModule() bool {\n\treturn i.IsKernel && i.Name != \"vmlinux\"\n}\n\n// HandleIterator allows enumerating BTF blobs loaded into the kernel.\ntype HandleIterator struct {\n\t// The ID of the current handle. Only valid after a call to Next.\n\tID ID\n\t// The current Handle. Only valid until a call to Next.\n\t// See Take if you want to retain the handle.\n\tHandle *Handle\n\terr    error\n}\n\n// Next retrieves a handle for the next BTF object.\n//\n// Returns true if another BTF object was found. Call [HandleIterator.Err] after\n// the function returns false.\nfunc (it *HandleIterator) Next() bool {\n\tid := it.ID\n\tfor {\n\t\tattr := &sys.BtfGetNextIdAttr{Id: id}\n\t\terr := sys.BtfGetNextId(attr)\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t// There are no more BTF objects.\n\t\t\tbreak\n\t\t} else if err != nil {\n\t\t\tit.err = fmt.Errorf(\"get next BTF ID: %w\", err)\n\t\t\tbreak\n\t\t}\n\n\t\tid = attr.NextId\n\t\thandle, err := NewHandleFromID(id)\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t// Try again with the next ID.\n\t\t\tcontinue\n\t\t} else if err != nil {\n\t\t\tit.err = fmt.Errorf(\"retrieve handle for ID %d: %w\", id, err)\n\t\t\tbreak\n\t\t}\n\n\t\tit.Handle.Close()\n\t\tit.ID, it.Handle = id, handle\n\t\treturn true\n\t}\n\n\t// No more handles or we encountered an error.\n\tit.Handle.Close()\n\tit.Handle = nil\n\treturn false\n}\n\n// Take the ownership of the current handle.\n//\n// It's the callers responsibility to close the handle.\nfunc (it *HandleIterator) Take() *Handle {\n\thandle := it.Handle\n\tit.Handle = nil\n\treturn handle\n}\n\n// Err returns an error if iteration failed for some reason.\nfunc (it *HandleIterator) Err() error {\n\treturn it.err\n}\n\n// FindHandle returns the first handle for which predicate returns true.\n//\n// Requires CAP_SYS_ADMIN.\n//\n// Returns an error wrapping ErrNotFound if predicate never returns true or if\n// there is no BTF loaded into the kernel.\nfunc FindHandle(predicate func(info *HandleInfo) bool) (*Handle, error) {\n\tit := new(HandleIterator)\n\tdefer it.Handle.Close()\n\n\tfor it.Next() {\n\t\tinfo, err := it.Handle.Info()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"info for ID %d: %w\", it.ID, err)\n\t\t}\n\n\t\tif predicate(info) {\n\t\t\treturn it.Take(), nil\n\t\t}\n\t}\n\tif err := it.Err(); err != nil {\n\t\treturn nil, fmt.Errorf(\"iterate handles: %w\", err)\n\t}\n\n\treturn nil, fmt.Errorf(\"find handle: %w\", ErrNotFound)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/kernel.go",
    "content": "package btf\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sync\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/linux\"\n)\n\nvar kernelBTF = struct {\n\tsync.RWMutex\n\tkernel  *Spec\n\tmodules map[string]*Spec\n}{\n\tmodules: make(map[string]*Spec),\n}\n\n// FlushKernelSpec removes any cached kernel type information.\nfunc FlushKernelSpec() {\n\tkernelBTF.Lock()\n\tdefer kernelBTF.Unlock()\n\n\tkernelBTF.kernel = nil\n\tkernelBTF.modules = make(map[string]*Spec)\n}\n\n// LoadKernelSpec returns the current kernel's BTF information.\n//\n// Defaults to /sys/kernel/btf/vmlinux and falls back to scanning the file system\n// for vmlinux ELFs. Returns an error wrapping ErrNotSupported if BTF is not enabled.\nfunc LoadKernelSpec() (*Spec, error) {\n\tkernelBTF.RLock()\n\tspec := kernelBTF.kernel\n\tkernelBTF.RUnlock()\n\n\tif spec == nil {\n\t\tkernelBTF.Lock()\n\t\tdefer kernelBTF.Unlock()\n\n\t\tspec = kernelBTF.kernel\n\t}\n\n\tif spec != nil {\n\t\treturn spec.Copy(), nil\n\t}\n\n\tspec, _, err := loadKernelSpec()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tkernelBTF.kernel = spec\n\treturn spec.Copy(), nil\n}\n\n// LoadKernelModuleSpec returns the BTF information for the named kernel module.\n//\n// Defaults to /sys/kernel/btf/<module>.\n// Returns an error wrapping ErrNotSupported if BTF is not enabled.\n// Returns an error wrapping fs.ErrNotExist if BTF for the specific module doesn't exist.\nfunc LoadKernelModuleSpec(module string) (*Spec, error) {\n\tkernelBTF.RLock()\n\tspec := kernelBTF.modules[module]\n\tkernelBTF.RUnlock()\n\n\tif spec != nil {\n\t\treturn spec.Copy(), nil\n\t}\n\n\tbase, err := LoadKernelSpec()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"load kernel spec: %w\", err)\n\t}\n\n\tkernelBTF.Lock()\n\tdefer kernelBTF.Unlock()\n\n\tif spec = kernelBTF.modules[module]; spec != nil {\n\t\treturn spec.Copy(), nil\n\t}\n\n\tspec, err = loadKernelModuleSpec(module, base)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tkernelBTF.modules[module] = spec\n\treturn spec.Copy(), nil\n}\n\nfunc loadKernelSpec() (_ *Spec, fallback bool, _ error) {\n\tfh, err := os.Open(\"/sys/kernel/btf/vmlinux\")\n\tif err == nil {\n\t\tdefer fh.Close()\n\n\t\tspec, err := loadRawSpec(fh, internal.NativeEndian, nil)\n\t\treturn spec, false, err\n\t}\n\n\tfile, err := findVMLinux()\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\tdefer file.Close()\n\n\tspec, err := LoadSpecFromReader(file)\n\treturn spec, true, err\n}\n\nfunc loadKernelModuleSpec(module string, base *Spec) (*Spec, error) {\n\tdir, file := filepath.Split(module)\n\tif dir != \"\" || filepath.Ext(file) != \"\" {\n\t\treturn nil, fmt.Errorf(\"invalid module name %q\", module)\n\t}\n\n\tfh, err := os.Open(filepath.Join(\"/sys/kernel/btf\", module))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer fh.Close()\n\n\treturn loadRawSpec(fh, internal.NativeEndian, base)\n}\n\n// findVMLinux scans multiple well-known paths for vmlinux kernel images.\nfunc findVMLinux() (*os.File, error) {\n\trelease, err := linux.KernelRelease()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// use same list of locations as libbpf\n\t// https://github.com/libbpf/libbpf/blob/9a3a42608dbe3731256a5682a125ac1e23bced8f/src/btf.c#L3114-L3122\n\tlocations := []string{\n\t\t\"/boot/vmlinux-%s\",\n\t\t\"/lib/modules/%s/vmlinux-%[1]s\",\n\t\t\"/lib/modules/%s/build/vmlinux\",\n\t\t\"/usr/lib/modules/%s/kernel/vmlinux\",\n\t\t\"/usr/lib/debug/boot/vmlinux-%s\",\n\t\t\"/usr/lib/debug/boot/vmlinux-%s.debug\",\n\t\t\"/usr/lib/debug/lib/modules/%s/vmlinux\",\n\t}\n\n\tfor _, loc := range locations {\n\t\tfile, err := os.Open(fmt.Sprintf(loc, release))\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\tcontinue\n\t\t}\n\t\treturn file, err\n\t}\n\n\treturn nil, fmt.Errorf(\"no BTF found for kernel version %s: %w\", release, internal.ErrNotSupported)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/marshal.go",
    "content": "package btf\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"maps\"\n\t\"math\"\n\t\"slices\"\n\t\"sync\"\n\n\t\"github.com/cilium/ebpf/internal\"\n)\n\ntype MarshalOptions struct {\n\t// Target byte order. Defaults to the system's native endianness.\n\tOrder binary.ByteOrder\n\t// Remove function linkage information for compatibility with <5.6 kernels.\n\tStripFuncLinkage bool\n\t// Replace decl tags with a placeholder for compatibility with <5.16 kernels.\n\tReplaceDeclTags bool\n\t// Replace TypeTags with a placeholder for compatibility with <5.17 kernels.\n\tReplaceTypeTags bool\n\t// Replace Enum64 with a placeholder for compatibility with <6.0 kernels.\n\tReplaceEnum64 bool\n\t// Prevent the \"No type found\" error when loading BTF without any types.\n\tPreventNoTypeFound bool\n}\n\n// KernelMarshalOptions will generate BTF suitable for the current kernel.\nfunc KernelMarshalOptions() *MarshalOptions {\n\treturn &MarshalOptions{\n\t\tOrder:              internal.NativeEndian,\n\t\tStripFuncLinkage:   haveFuncLinkage() != nil,\n\t\tReplaceDeclTags:    haveDeclTags() != nil,\n\t\tReplaceTypeTags:    haveTypeTags() != nil,\n\t\tReplaceEnum64:      haveEnum64() != nil,\n\t\tPreventNoTypeFound: true, // All current kernels require this.\n\t}\n}\n\n// encoder turns Types into raw BTF.\ntype encoder struct {\n\tMarshalOptions\n\n\tpending internal.Deque[Type]\n\tbuf     *bytes.Buffer\n\tstrings *stringTableBuilder\n\tids     map[Type]TypeID\n\tvisited map[Type]struct{}\n\tlastID  TypeID\n}\n\nvar bufferPool = sync.Pool{\n\tNew: func() any {\n\t\tbuf := make([]byte, btfHeaderLen+128)\n\t\treturn &buf\n\t},\n}\n\nfunc getByteSlice() *[]byte {\n\treturn bufferPool.Get().(*[]byte)\n}\n\nfunc putByteSlice(buf *[]byte) {\n\t*buf = (*buf)[:0]\n\tbufferPool.Put(buf)\n}\n\n// Builder turns Types into raw BTF.\n//\n// The default value may be used and represents an empty BTF blob. Void is\n// added implicitly if necessary.\ntype Builder struct {\n\t// Explicitly added types.\n\ttypes []Type\n\t// IDs for all added types which the user knows about.\n\tstableIDs map[Type]TypeID\n\t// Explicitly added strings.\n\tstrings *stringTableBuilder\n}\n\n// NewBuilder creates a Builder from a list of types.\n//\n// It is more efficient than calling [Add] individually.\n//\n// Returns an error if adding any of the types fails.\nfunc NewBuilder(types []Type) (*Builder, error) {\n\tb := &Builder{\n\t\tmake([]Type, 0, len(types)),\n\t\tmake(map[Type]TypeID, len(types)),\n\t\tnil,\n\t}\n\n\tfor _, typ := range types {\n\t\t_, err := b.Add(typ)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"add %s: %w\", typ, err)\n\t\t}\n\t}\n\n\treturn b, nil\n}\n\n// Empty returns true if neither types nor strings have been added.\nfunc (b *Builder) Empty() bool {\n\treturn len(b.types) == 0 && (b.strings == nil || b.strings.Length() == 0)\n}\n\n// Add a Type and allocate a stable ID for it.\n//\n// Adding the identical Type multiple times is valid and will return the same ID.\n//\n// See [Type] for details on identity.\nfunc (b *Builder) Add(typ Type) (TypeID, error) {\n\tif b.stableIDs == nil {\n\t\tb.stableIDs = make(map[Type]TypeID)\n\t}\n\n\tif _, ok := typ.(*Void); ok {\n\t\t// Equality is weird for void, since it is a zero sized type.\n\t\treturn 0, nil\n\t}\n\n\tif ds, ok := typ.(*Datasec); ok {\n\t\tif err := datasecResolveWorkaround(b, ds); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\n\tid, ok := b.stableIDs[typ]\n\tif ok {\n\t\treturn id, nil\n\t}\n\n\tb.types = append(b.types, typ)\n\n\tid = TypeID(len(b.types))\n\tif int(id) != len(b.types) {\n\t\treturn 0, fmt.Errorf(\"no more type IDs\")\n\t}\n\n\tb.stableIDs[typ] = id\n\treturn id, nil\n}\n\n// Marshal encodes all types in the Marshaler into BTF wire format.\n//\n// opts may be nil.\nfunc (b *Builder) Marshal(buf []byte, opts *MarshalOptions) ([]byte, error) {\n\tstb := b.strings\n\tif stb == nil {\n\t\t// Assume that most types are named. This makes encoding large BTF like\n\t\t// vmlinux a lot cheaper.\n\t\tstb = newStringTableBuilder(len(b.types))\n\t} else {\n\t\t// Avoid modifying the Builder's string table.\n\t\tstb = b.strings.Copy()\n\t}\n\n\tif opts == nil {\n\t\topts = &MarshalOptions{Order: internal.NativeEndian}\n\t}\n\n\t// Reserve space for the BTF header.\n\tbuf = slices.Grow(buf, btfHeaderLen)[:btfHeaderLen]\n\n\tw := internal.NewBuffer(buf)\n\tdefer internal.PutBuffer(w)\n\n\te := encoder{\n\t\tMarshalOptions: *opts,\n\t\tbuf:            w,\n\t\tstrings:        stb,\n\t\tlastID:         TypeID(len(b.types)),\n\t\tvisited:        make(map[Type]struct{}, len(b.types)),\n\t\tids:            maps.Clone(b.stableIDs),\n\t}\n\n\tif e.ids == nil {\n\t\te.ids = make(map[Type]TypeID)\n\t}\n\n\ttypes := b.types\n\tif len(types) == 0 && stb.Length() > 0 && opts.PreventNoTypeFound {\n\t\t// We have strings that need to be written out,\n\t\t// but no types (besides the implicit Void).\n\t\t// Kernels as recent as v6.7 refuse to load such BTF\n\t\t// with a \"No type found\" error in the log.\n\t\t// Fix this by adding a dummy type.\n\t\ttypes = []Type{&Int{Size: 0}}\n\t}\n\n\t// Ensure that types are marshaled in the exact order they were Add()ed.\n\t// Otherwise the ID returned from Add() won't match.\n\te.pending.Grow(len(types))\n\tfor _, typ := range types {\n\t\te.pending.Push(typ)\n\t}\n\n\tif err := e.deflatePending(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tlength := e.buf.Len()\n\ttypeLen := uint32(length - btfHeaderLen)\n\n\tstringLen := e.strings.Length()\n\tbuf = e.strings.AppendEncoded(e.buf.Bytes())\n\n\t// Fill out the header, and write it out.\n\theader := &btfHeader{\n\t\tMagic:     btfMagic,\n\t\tVersion:   1,\n\t\tFlags:     0,\n\t\tHdrLen:    uint32(btfHeaderLen),\n\t\tTypeOff:   0,\n\t\tTypeLen:   typeLen,\n\t\tStringOff: typeLen,\n\t\tStringLen: uint32(stringLen),\n\t}\n\n\terr := binary.Write(sliceWriter(buf[:btfHeaderLen]), e.Order, header)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"write header: %v\", err)\n\t}\n\n\treturn buf, nil\n}\n\n// addString adds a string to the resulting BTF.\n//\n// Adding the same string multiple times will return the same result.\n//\n// Returns an identifier into the string table or an error if the string\n// contains invalid characters.\nfunc (b *Builder) addString(str string) (uint32, error) {\n\tif b.strings == nil {\n\t\tb.strings = newStringTableBuilder(0)\n\t}\n\n\treturn b.strings.Add(str)\n}\n\nfunc (e *encoder) allocateIDs(root Type) (err error) {\n\tvisitInPostorder(root, e.visited, func(typ Type) bool {\n\t\tif _, ok := typ.(*Void); ok {\n\t\t\treturn true\n\t\t}\n\n\t\tif _, ok := e.ids[typ]; ok {\n\t\t\treturn true\n\t\t}\n\n\t\tid := e.lastID + 1\n\t\tif id < e.lastID {\n\t\t\terr = errors.New(\"type ID overflow\")\n\t\t\treturn false\n\t\t}\n\n\t\te.pending.Push(typ)\n\t\te.ids[typ] = id\n\t\te.lastID = id\n\t\treturn true\n\t})\n\treturn\n}\n\n// id returns the ID for the given type or panics with an error.\nfunc (e *encoder) id(typ Type) TypeID {\n\tif _, ok := typ.(*Void); ok {\n\t\treturn 0\n\t}\n\n\tid, ok := e.ids[typ]\n\tif !ok {\n\t\tpanic(fmt.Errorf(\"no ID for type %v\", typ))\n\t}\n\n\treturn id\n}\n\nfunc (e *encoder) deflatePending() error {\n\t// Declare root outside of the loop to avoid repeated heap allocations.\n\tvar root Type\n\n\tfor !e.pending.Empty() {\n\t\troot = e.pending.Shift()\n\n\t\t// Allocate IDs for all children of typ, including transitive dependencies.\n\t\tif err := e.allocateIDs(root); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif err := e.deflateType(root); err != nil {\n\t\t\tid := e.ids[root]\n\t\t\treturn fmt.Errorf(\"deflate %v with ID %d: %w\", root, id, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (e *encoder) deflateType(typ Type) (err error) {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\tvar ok bool\n\t\t\terr, ok = r.(error)\n\t\t\tif !ok {\n\t\t\t\tpanic(r)\n\t\t\t}\n\t\t}\n\t}()\n\n\tvar raw rawType\n\traw.NameOff, err = e.strings.Add(typ.TypeName())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch v := typ.(type) {\n\tcase *Void:\n\t\treturn errors.New(\"Void is implicit in BTF wire format\")\n\n\tcase *Int:\n\t\te.deflateInt(&raw, v)\n\n\tcase *Pointer:\n\t\traw.SetKind(kindPointer)\n\t\traw.SetType(e.id(v.Target))\n\n\tcase *Array:\n\t\traw.SetKind(kindArray)\n\t\traw.data = &btfArray{\n\t\t\te.id(v.Type),\n\t\t\te.id(v.Index),\n\t\t\tv.Nelems,\n\t\t}\n\n\tcase *Struct:\n\t\traw.SetKind(kindStruct)\n\t\traw.SetSize(v.Size)\n\t\traw.data, err = e.convertMembers(&raw.btfType, v.Members)\n\n\tcase *Union:\n\t\terr = e.deflateUnion(&raw, v)\n\n\tcase *Enum:\n\t\tif v.Size == 8 {\n\t\t\terr = e.deflateEnum64(&raw, v)\n\t\t} else {\n\t\t\terr = e.deflateEnum(&raw, v)\n\t\t}\n\n\tcase *Fwd:\n\t\traw.SetKind(kindForward)\n\t\traw.SetFwdKind(v.Kind)\n\n\tcase *Typedef:\n\t\traw.SetKind(kindTypedef)\n\t\traw.SetType(e.id(v.Type))\n\n\tcase *Volatile:\n\t\traw.SetKind(kindVolatile)\n\t\traw.SetType(e.id(v.Type))\n\n\tcase *Const:\n\t\te.deflateConst(&raw, v)\n\n\tcase *Restrict:\n\t\traw.SetKind(kindRestrict)\n\t\traw.SetType(e.id(v.Type))\n\n\tcase *Func:\n\t\traw.SetKind(kindFunc)\n\t\traw.SetType(e.id(v.Type))\n\t\tif !e.StripFuncLinkage {\n\t\t\traw.SetLinkage(v.Linkage)\n\t\t}\n\n\tcase *FuncProto:\n\t\traw.SetKind(kindFuncProto)\n\t\traw.SetType(e.id(v.Return))\n\t\traw.SetVlen(len(v.Params))\n\t\traw.data, err = e.deflateFuncParams(v.Params)\n\n\tcase *Var:\n\t\traw.SetKind(kindVar)\n\t\traw.SetType(e.id(v.Type))\n\t\traw.data = btfVariable{uint32(v.Linkage)}\n\n\tcase *Datasec:\n\t\traw.SetKind(kindDatasec)\n\t\traw.SetSize(v.Size)\n\t\traw.SetVlen(len(v.Vars))\n\t\traw.data = e.deflateVarSecinfos(v.Vars)\n\n\tcase *Float:\n\t\traw.SetKind(kindFloat)\n\t\traw.SetSize(v.Size)\n\n\tcase *declTag:\n\t\terr = e.deflateDeclTag(&raw, v)\n\n\tcase *TypeTag:\n\t\terr = e.deflateTypeTag(&raw, v)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"don't know how to deflate %T\", v)\n\t}\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn raw.Marshal(e.buf, e.Order)\n}\n\nfunc (e *encoder) deflateInt(raw *rawType, i *Int) {\n\traw.SetKind(kindInt)\n\traw.SetSize(i.Size)\n\n\tvar bi btfInt\n\tbi.SetEncoding(i.Encoding)\n\t// We need to set bits in addition to size, since btf_type_int_is_regular\n\t// otherwise flags this as a bitfield.\n\tbi.SetBits(byte(i.Size) * 8)\n\traw.data = bi\n}\n\nfunc (e *encoder) deflateDeclTag(raw *rawType, tag *declTag) (err error) {\n\t// Replace a decl tag with an integer for compatibility with <5.16 kernels,\n\t// following libbpf behaviour.\n\tif e.ReplaceDeclTags {\n\t\ttyp := &Int{\"decl_tag_placeholder\", 1, Unsigned}\n\t\te.deflateInt(raw, typ)\n\n\t\t// Add the placeholder type name to the string table. The encoder added the\n\t\t// original type name before this call.\n\t\traw.NameOff, err = e.strings.Add(typ.TypeName())\n\t\treturn\n\t}\n\n\traw.SetKind(kindDeclTag)\n\traw.SetType(e.id(tag.Type))\n\traw.data = &btfDeclTag{uint32(tag.Index)}\n\traw.NameOff, err = e.strings.Add(tag.Value)\n\treturn\n}\n\nfunc (e *encoder) deflateConst(raw *rawType, c *Const) {\n\traw.SetKind(kindConst)\n\traw.SetType(e.id(c.Type))\n}\n\nfunc (e *encoder) deflateTypeTag(raw *rawType, tag *TypeTag) (err error) {\n\t// Replace a type tag with a const qualifier for compatibility with <5.17\n\t// kernels, following libbpf behaviour.\n\tif e.ReplaceTypeTags {\n\t\te.deflateConst(raw, &Const{tag.Type})\n\t\treturn\n\t}\n\n\traw.SetKind(kindTypeTag)\n\traw.SetType(e.id(tag.Type))\n\traw.NameOff, err = e.strings.Add(tag.Value)\n\treturn\n}\n\nfunc (e *encoder) deflateUnion(raw *rawType, union *Union) (err error) {\n\traw.SetKind(kindUnion)\n\traw.SetSize(union.Size)\n\traw.data, err = e.convertMembers(&raw.btfType, union.Members)\n\treturn\n}\n\nfunc (e *encoder) convertMembers(header *btfType, members []Member) ([]btfMember, error) {\n\tbms := make([]btfMember, 0, len(members))\n\tisBitfield := false\n\tfor _, member := range members {\n\t\tisBitfield = isBitfield || member.BitfieldSize > 0\n\n\t\toffset := member.Offset\n\t\tif isBitfield {\n\t\t\toffset = member.BitfieldSize<<24 | (member.Offset & 0xffffff)\n\t\t}\n\n\t\tnameOff, err := e.strings.Add(member.Name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tbms = append(bms, btfMember{\n\t\t\tnameOff,\n\t\t\te.id(member.Type),\n\t\t\tuint32(offset),\n\t\t})\n\t}\n\n\theader.SetVlen(len(members))\n\theader.SetBitfield(isBitfield)\n\treturn bms, nil\n}\n\nfunc (e *encoder) deflateEnum(raw *rawType, enum *Enum) (err error) {\n\traw.SetKind(kindEnum)\n\traw.SetSize(enum.Size)\n\traw.SetVlen(len(enum.Values))\n\t// Signedness appeared together with ENUM64 support.\n\traw.SetSigned(enum.Signed && !e.ReplaceEnum64)\n\traw.data, err = e.deflateEnumValues(enum)\n\treturn\n}\n\nfunc (e *encoder) deflateEnumValues(enum *Enum) ([]btfEnum, error) {\n\tbes := make([]btfEnum, 0, len(enum.Values))\n\tfor _, value := range enum.Values {\n\t\tnameOff, err := e.strings.Add(value.Name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif enum.Signed {\n\t\t\tif signedValue := int64(value.Value); signedValue < math.MinInt32 || signedValue > math.MaxInt32 {\n\t\t\t\treturn nil, fmt.Errorf(\"value %d of enum %q exceeds 32 bits\", signedValue, value.Name)\n\t\t\t}\n\t\t} else {\n\t\t\tif value.Value > math.MaxUint32 {\n\t\t\t\treturn nil, fmt.Errorf(\"value %d of enum %q exceeds 32 bits\", value.Value, value.Name)\n\t\t\t}\n\t\t}\n\n\t\tbes = append(bes, btfEnum{\n\t\t\tnameOff,\n\t\t\tuint32(value.Value),\n\t\t})\n\t}\n\n\treturn bes, nil\n}\n\nfunc (e *encoder) deflateEnum64(raw *rawType, enum *Enum) (err error) {\n\tif e.ReplaceEnum64 {\n\t\t// Replace the ENUM64 with a union of fields with the correct size.\n\t\t// This matches libbpf behaviour on purpose.\n\t\tplaceholder := &Int{\n\t\t\t\"enum64_placeholder\",\n\t\t\tenum.Size,\n\t\t\tUnsigned,\n\t\t}\n\t\tif enum.Signed {\n\t\t\tplaceholder.Encoding = Signed\n\t\t}\n\t\tif err := e.allocateIDs(placeholder); err != nil {\n\t\t\treturn fmt.Errorf(\"add enum64 placeholder: %w\", err)\n\t\t}\n\n\t\tmembers := make([]Member, 0, len(enum.Values))\n\t\tfor _, v := range enum.Values {\n\t\t\tmembers = append(members, Member{\n\t\t\t\tName: v.Name,\n\t\t\t\tType: placeholder,\n\t\t\t})\n\t\t}\n\n\t\treturn e.deflateUnion(raw, &Union{enum.Name, enum.Size, members, nil})\n\t}\n\n\traw.SetKind(kindEnum64)\n\traw.SetSize(enum.Size)\n\traw.SetVlen(len(enum.Values))\n\traw.SetSigned(enum.Signed)\n\traw.data, err = e.deflateEnum64Values(enum.Values)\n\treturn\n}\n\nfunc (e *encoder) deflateEnum64Values(values []EnumValue) ([]btfEnum64, error) {\n\tbes := make([]btfEnum64, 0, len(values))\n\tfor _, value := range values {\n\t\tnameOff, err := e.strings.Add(value.Name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tbes = append(bes, btfEnum64{\n\t\t\tnameOff,\n\t\t\tuint32(value.Value),\n\t\t\tuint32(value.Value >> 32),\n\t\t})\n\t}\n\n\treturn bes, nil\n}\n\nfunc (e *encoder) deflateFuncParams(params []FuncParam) ([]btfParam, error) {\n\tbps := make([]btfParam, 0, len(params))\n\tfor _, param := range params {\n\t\tnameOff, err := e.strings.Add(param.Name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tbps = append(bps, btfParam{\n\t\t\tnameOff,\n\t\t\te.id(param.Type),\n\t\t})\n\t}\n\treturn bps, nil\n}\n\nfunc (e *encoder) deflateVarSecinfos(vars []VarSecinfo) []btfVarSecinfo {\n\tvsis := make([]btfVarSecinfo, 0, len(vars))\n\tfor _, v := range vars {\n\t\tvsis = append(vsis, btfVarSecinfo{\n\t\t\te.id(v.Type),\n\t\t\tv.Offset,\n\t\t\tv.Size,\n\t\t})\n\t}\n\treturn vsis\n}\n\n// MarshalMapKV creates a BTF object containing a map key and value.\n//\n// The function is intended for the use of the ebpf package and may be removed\n// at any point in time.\nfunc MarshalMapKV(key, value Type) (_ *Handle, keyID, valueID TypeID, err error) {\n\tvar b Builder\n\n\tif key != nil {\n\t\tkeyID, err = b.Add(key)\n\t\tif err != nil {\n\t\t\treturn nil, 0, 0, fmt.Errorf(\"add key type: %w\", err)\n\t\t}\n\t}\n\n\tif value != nil {\n\t\tvalueID, err = b.Add(value)\n\t\tif err != nil {\n\t\t\treturn nil, 0, 0, fmt.Errorf(\"add value type: %w\", err)\n\t\t}\n\t}\n\n\thandle, err := NewHandle(&b)\n\tif err != nil {\n\t\t// Check for 'full' map BTF support, since kernels between 4.18 and 5.2\n\t\t// already support BTF blobs for maps without Var or Datasec just fine.\n\t\tif err := haveMapBTF(); err != nil {\n\t\t\treturn nil, 0, 0, err\n\t\t}\n\t}\n\treturn handle, keyID, valueID, err\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/strings.go",
    "content": "package btf\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"maps\"\n\t\"slices\"\n\t\"strings\"\n)\n\ntype stringTable struct {\n\tbase    *stringTable\n\toffsets []uint32\n\tprevIdx int\n\tstrings []string\n}\n\n// sizedReader is implemented by bytes.Reader, io.SectionReader, strings.Reader, etc.\ntype sizedReader interface {\n\tio.Reader\n\tSize() int64\n}\n\nfunc readStringTable(r sizedReader, base *stringTable) (*stringTable, error) {\n\t// When parsing split BTF's string table, the first entry offset is derived\n\t// from the last entry offset of the base BTF.\n\tfirstStringOffset := uint32(0)\n\tif base != nil {\n\t\tidx := len(base.offsets) - 1\n\t\tfirstStringOffset = base.offsets[idx] + uint32(len(base.strings[idx])) + 1\n\t}\n\n\t// Derived from vmlinux BTF.\n\tconst averageStringLength = 16\n\n\tn := int(r.Size() / averageStringLength)\n\toffsets := make([]uint32, 0, n)\n\tstrings := make([]string, 0, n)\n\n\toffset := firstStringOffset\n\tscanner := bufio.NewScanner(r)\n\tscanner.Split(splitNull)\n\tfor scanner.Scan() {\n\t\tstr := scanner.Text()\n\t\toffsets = append(offsets, offset)\n\t\tstrings = append(strings, str)\n\t\toffset += uint32(len(str)) + 1\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(strings) == 0 {\n\t\treturn nil, errors.New(\"string table is empty\")\n\t}\n\n\tif firstStringOffset == 0 && strings[0] != \"\" {\n\t\treturn nil, errors.New(\"first item in string table is non-empty\")\n\t}\n\n\treturn &stringTable{base, offsets, 0, strings}, nil\n}\n\nfunc splitNull(data []byte, atEOF bool) (advance int, token []byte, err error) {\n\ti := bytes.IndexByte(data, 0)\n\tif i == -1 {\n\t\tif atEOF && len(data) > 0 {\n\t\t\treturn 0, nil, errors.New(\"string table isn't null terminated\")\n\t\t}\n\t\treturn 0, nil, nil\n\t}\n\n\treturn i + 1, data[:i], nil\n}\n\nfunc (st *stringTable) Lookup(offset uint32) (string, error) {\n\tif st.base != nil && offset <= st.base.offsets[len(st.base.offsets)-1] {\n\t\treturn st.base.lookup(offset)\n\t}\n\treturn st.lookup(offset)\n}\n\nfunc (st *stringTable) lookup(offset uint32) (string, error) {\n\t// Fast path: zero offset is the empty string, looked up frequently.\n\tif offset == 0 && st.base == nil {\n\t\treturn \"\", nil\n\t}\n\n\t// Accesses tend to be globally increasing, so check if the next string is\n\t// the one we want. This skips the binary search in about 50% of cases.\n\tif st.prevIdx+1 < len(st.offsets) && st.offsets[st.prevIdx+1] == offset {\n\t\tst.prevIdx++\n\t\treturn st.strings[st.prevIdx], nil\n\t}\n\n\ti, found := slices.BinarySearch(st.offsets, offset)\n\tif !found {\n\t\treturn \"\", fmt.Errorf(\"offset %d isn't start of a string\", offset)\n\t}\n\n\t// Set the new increment index, but only if its greater than the current.\n\tif i > st.prevIdx+1 {\n\t\tst.prevIdx = i\n\t}\n\n\treturn st.strings[i], nil\n}\n\n// Num returns the number of strings in the table.\nfunc (st *stringTable) Num() int {\n\treturn len(st.strings)\n}\n\n// stringTableBuilder builds BTF string tables.\ntype stringTableBuilder struct {\n\tlength  uint32\n\tstrings map[string]uint32\n}\n\n// newStringTableBuilder creates a builder with the given capacity.\n//\n// capacity may be zero.\nfunc newStringTableBuilder(capacity int) *stringTableBuilder {\n\tvar stb stringTableBuilder\n\n\tif capacity == 0 {\n\t\t// Use the runtime's small default size.\n\t\tstb.strings = make(map[string]uint32)\n\t} else {\n\t\tstb.strings = make(map[string]uint32, capacity)\n\t}\n\n\t// Ensure that the empty string is at index 0.\n\tstb.append(\"\")\n\treturn &stb\n}\n\n// Add a string to the table.\n//\n// Adding the same string multiple times will only store it once.\nfunc (stb *stringTableBuilder) Add(str string) (uint32, error) {\n\tif strings.IndexByte(str, 0) != -1 {\n\t\treturn 0, fmt.Errorf(\"string contains null: %q\", str)\n\t}\n\n\toffset, ok := stb.strings[str]\n\tif ok {\n\t\treturn offset, nil\n\t}\n\n\treturn stb.append(str), nil\n}\n\nfunc (stb *stringTableBuilder) append(str string) uint32 {\n\toffset := stb.length\n\tstb.length += uint32(len(str)) + 1\n\tstb.strings[str] = offset\n\treturn offset\n}\n\n// Lookup finds the offset of a string in the table.\n//\n// Returns an error if str hasn't been added yet.\nfunc (stb *stringTableBuilder) Lookup(str string) (uint32, error) {\n\toffset, ok := stb.strings[str]\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"string %q is not in table\", str)\n\t}\n\n\treturn offset, nil\n}\n\n// Length returns the length in bytes.\nfunc (stb *stringTableBuilder) Length() int {\n\treturn int(stb.length)\n}\n\n// AppendEncoded appends the string table to the end of the provided buffer.\nfunc (stb *stringTableBuilder) AppendEncoded(buf []byte) []byte {\n\tn := len(buf)\n\tbuf = append(buf, make([]byte, stb.Length())...)\n\tstrings := buf[n:]\n\tfor str, offset := range stb.strings {\n\t\tcopy(strings[offset:], str)\n\t}\n\treturn buf\n}\n\n// Copy the string table builder.\nfunc (stb *stringTableBuilder) Copy() *stringTableBuilder {\n\treturn &stringTableBuilder{\n\t\tstb.length,\n\t\tmaps.Clone(stb.strings),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/traversal.go",
    "content": "package btf\n\nimport (\n\t\"fmt\"\n)\n\n// Functions to traverse a cyclic graph of types. The below was very useful:\n// https://eli.thegreenplace.net/2015/directed-graph-traversal-orderings-and-applications-to-data-flow-analysis/#post-order-and-reverse-post-order\n\n// Visit all types reachable from root in postorder.\n//\n// Traversal stops if yield returns false.\n//\n// Returns false if traversal was aborted.\nfunc visitInPostorder(root Type, visited map[Type]struct{}, yield func(typ Type) bool) bool {\n\tif _, ok := visited[root]; ok {\n\t\treturn true\n\t}\n\tif visited == nil {\n\t\tvisited = make(map[Type]struct{})\n\t}\n\tvisited[root] = struct{}{}\n\n\tcont := children(root, func(child *Type) bool {\n\t\treturn visitInPostorder(*child, visited, yield)\n\t})\n\tif !cont {\n\t\treturn false\n\t}\n\n\treturn yield(root)\n}\n\n// children calls yield on each child of typ.\n//\n// Traversal stops if yield returns false.\n//\n// Returns false if traversal was aborted.\nfunc children(typ Type, yield func(child *Type) bool) bool {\n\t// Explicitly type switch on the most common types to allow the inliner to\n\t// do its work. This avoids allocating intermediate slices from walk() on\n\t// the heap.\n\tvar tags []string\n\tswitch v := typ.(type) {\n\tcase *Void, *Int, *Enum, *Fwd, *Float, *declTag:\n\t\t// No children to traverse.\n\t\t// declTags is declared as a leaf type since it's parsed into .Tags fields of other types\n\t\t// during unmarshaling.\n\tcase *Pointer:\n\t\tif !yield(&v.Target) {\n\t\t\treturn false\n\t\t}\n\tcase *Array:\n\t\tif !yield(&v.Index) {\n\t\t\treturn false\n\t\t}\n\t\tif !yield(&v.Type) {\n\t\t\treturn false\n\t\t}\n\tcase *Struct:\n\t\tfor i := range v.Members {\n\t\t\tif !yield(&v.Members[i].Type) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tfor _, t := range v.Members[i].Tags {\n\t\t\t\tvar tag Type = &declTag{v, t, i}\n\t\t\t\tif !yield(&tag) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttags = v.Tags\n\tcase *Union:\n\t\tfor i := range v.Members {\n\t\t\tif !yield(&v.Members[i].Type) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tfor _, t := range v.Members[i].Tags {\n\t\t\t\tvar tag Type = &declTag{v, t, i}\n\t\t\t\tif !yield(&tag) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttags = v.Tags\n\tcase *Typedef:\n\t\tif !yield(&v.Type) {\n\t\t\treturn false\n\t\t}\n\t\ttags = v.Tags\n\tcase *Volatile:\n\t\tif !yield(&v.Type) {\n\t\t\treturn false\n\t\t}\n\tcase *Const:\n\t\tif !yield(&v.Type) {\n\t\t\treturn false\n\t\t}\n\tcase *Restrict:\n\t\tif !yield(&v.Type) {\n\t\t\treturn false\n\t\t}\n\tcase *Func:\n\t\tif !yield(&v.Type) {\n\t\t\treturn false\n\t\t}\n\t\tif fp, ok := v.Type.(*FuncProto); ok {\n\t\t\tfor i := range fp.Params {\n\t\t\t\tif len(v.ParamTags) <= i {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor _, t := range v.ParamTags[i] {\n\t\t\t\t\tvar tag Type = &declTag{v, t, i}\n\t\t\t\t\tif !yield(&tag) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttags = v.Tags\n\tcase *FuncProto:\n\t\tif !yield(&v.Return) {\n\t\t\treturn false\n\t\t}\n\t\tfor i := range v.Params {\n\t\t\tif !yield(&v.Params[i].Type) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\tcase *Var:\n\t\tif !yield(&v.Type) {\n\t\t\treturn false\n\t\t}\n\t\ttags = v.Tags\n\tcase *Datasec:\n\t\tfor i := range v.Vars {\n\t\t\tif !yield(&v.Vars[i].Type) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\tcase *TypeTag:\n\t\tif !yield(&v.Type) {\n\t\t\treturn false\n\t\t}\n\tcase *cycle:\n\t\t// cycle has children, but we ignore them deliberately.\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"don't know how to walk Type %T\", v))\n\t}\n\n\tfor _, t := range tags {\n\t\tvar tag Type = &declTag{typ, t, -1}\n\t\tif !yield(&tag) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/types.go",
    "content": "package btf\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"slices\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\n// Mirrors MAX_RESOLVE_DEPTH in libbpf.\n// https://github.com/libbpf/libbpf/blob/e26b84dc330c9644c07428c271ab491b0f01f4e1/src/btf.c#L761\nconst maxResolveDepth = 32\n\n// TypeID identifies a type in a BTF section.\ntype TypeID = sys.TypeID\n\n// Type represents a type described by BTF.\n//\n// Identity of Type follows the [Go specification]: two Types are considered\n// equal if they have the same concrete type and the same dynamic value, aka\n// they point at the same location in memory. This means that the following\n// Types are considered distinct even though they have the same \"shape\".\n//\n//\ta := &Int{Size: 1}\n//\tb := &Int{Size: 1}\n//\ta != b\n//\n// [Go specification]: https://go.dev/ref/spec#Comparison_operators\ntype Type interface {\n\t// Type can be formatted using the %s and %v verbs. %s outputs only the\n\t// identity of the type, without any detail. %v outputs additional detail.\n\t//\n\t// Use the '+' flag to include the address of the type.\n\t//\n\t// Use the width to specify how many levels of detail to output, for example\n\t// %1v will output detail for the root type and a short description of its\n\t// children. %2v would output details of the root type and its children\n\t// as well as a short description of the grandchildren.\n\tfmt.Formatter\n\n\t// Name of the type, empty for anonymous types and types that cannot\n\t// carry a name, like Void and Pointer.\n\tTypeName() string\n\n\t// Make a copy of the type, without copying Type members.\n\tcopy() Type\n\n\t// New implementations must update walkType.\n}\n\nvar (\n\t_ Type = (*Int)(nil)\n\t_ Type = (*Struct)(nil)\n\t_ Type = (*Union)(nil)\n\t_ Type = (*Enum)(nil)\n\t_ Type = (*Fwd)(nil)\n\t_ Type = (*Func)(nil)\n\t_ Type = (*Typedef)(nil)\n\t_ Type = (*Var)(nil)\n\t_ Type = (*Datasec)(nil)\n\t_ Type = (*Float)(nil)\n\t_ Type = (*declTag)(nil)\n\t_ Type = (*TypeTag)(nil)\n\t_ Type = (*cycle)(nil)\n)\n\n// Void is the unit type of BTF.\ntype Void struct{}\n\nfunc (v *Void) Format(fs fmt.State, verb rune) { formatType(fs, verb, v) }\nfunc (v *Void) TypeName() string               { return \"\" }\nfunc (v *Void) size() uint32                   { return 0 }\nfunc (v *Void) copy() Type                     { return (*Void)(nil) }\n\ntype IntEncoding byte\n\n// Valid IntEncodings.\n//\n// These may look like they are flags, but they aren't.\nconst (\n\tUnsigned IntEncoding = 0\n\tSigned   IntEncoding = 1\n\tChar     IntEncoding = 2\n\tBool     IntEncoding = 4\n)\n\nfunc (ie IntEncoding) String() string {\n\tswitch ie {\n\tcase Char:\n\t\t// NB: There is no way to determine signedness for char.\n\t\treturn \"char\"\n\tcase Bool:\n\t\treturn \"bool\"\n\tcase Signed:\n\t\treturn \"signed\"\n\tcase Unsigned:\n\t\treturn \"unsigned\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"IntEncoding(%d)\", byte(ie))\n\t}\n}\n\n// Int is an integer of a given length.\n//\n// See https://www.kernel.org/doc/html/latest/bpf/btf.html#btf-kind-int\ntype Int struct {\n\tName string\n\n\t// The size of the integer in bytes.\n\tSize     uint32\n\tEncoding IntEncoding\n}\n\nfunc (i *Int) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, i, i.Encoding, \"size=\", i.Size)\n}\n\nfunc (i *Int) TypeName() string { return i.Name }\nfunc (i *Int) size() uint32     { return i.Size }\nfunc (i *Int) copy() Type {\n\tcpy := *i\n\treturn &cpy\n}\n\n// Pointer is a pointer to another type.\ntype Pointer struct {\n\tTarget Type\n}\n\nfunc (p *Pointer) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, p, \"target=\", p.Target)\n}\n\nfunc (p *Pointer) TypeName() string { return \"\" }\nfunc (p *Pointer) size() uint32     { return 8 }\nfunc (p *Pointer) copy() Type {\n\tcpy := *p\n\treturn &cpy\n}\n\n// Array is an array with a fixed number of elements.\ntype Array struct {\n\tIndex  Type\n\tType   Type\n\tNelems uint32\n}\n\nfunc (arr *Array) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, arr, \"index=\", arr.Index, \"type=\", arr.Type, \"n=\", arr.Nelems)\n}\n\nfunc (arr *Array) TypeName() string { return \"\" }\n\nfunc (arr *Array) copy() Type {\n\tcpy := *arr\n\treturn &cpy\n}\n\n// Struct is a compound type of consecutive members.\ntype Struct struct {\n\tName string\n\t// The size of the struct including padding, in bytes\n\tSize    uint32\n\tMembers []Member\n\tTags    []string\n}\n\nfunc (s *Struct) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, s, \"fields=\", len(s.Members))\n}\n\nfunc (s *Struct) TypeName() string { return s.Name }\n\nfunc (s *Struct) size() uint32 { return s.Size }\n\nfunc (s *Struct) copy() Type {\n\tcpy := *s\n\tcpy.Members = copyMembers(s.Members)\n\tcpy.Tags = copyTags(cpy.Tags)\n\treturn &cpy\n}\n\nfunc (s *Struct) members() []Member {\n\treturn s.Members\n}\n\n// Union is a compound type where members occupy the same memory.\ntype Union struct {\n\tName string\n\t// The size of the union including padding, in bytes.\n\tSize    uint32\n\tMembers []Member\n\tTags    []string\n}\n\nfunc (u *Union) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, u, \"fields=\", len(u.Members))\n}\n\nfunc (u *Union) TypeName() string { return u.Name }\n\nfunc (u *Union) size() uint32 { return u.Size }\n\nfunc (u *Union) copy() Type {\n\tcpy := *u\n\tcpy.Members = copyMembers(u.Members)\n\tcpy.Tags = copyTags(cpy.Tags)\n\treturn &cpy\n}\n\nfunc (u *Union) members() []Member {\n\treturn u.Members\n}\n\nfunc copyMembers(orig []Member) []Member {\n\tcpy := make([]Member, len(orig))\n\tcopy(cpy, orig)\n\tfor i, member := range cpy {\n\t\tcpy[i].Tags = copyTags(member.Tags)\n\t}\n\treturn cpy\n}\n\nfunc copyTags(orig []string) []string {\n\tif orig == nil { // preserve nil vs zero-len slice distinction\n\t\treturn nil\n\t}\n\tcpy := make([]string, len(orig))\n\tcopy(cpy, orig)\n\treturn cpy\n}\n\ntype composite interface {\n\tType\n\tmembers() []Member\n}\n\nvar (\n\t_ composite = (*Struct)(nil)\n\t_ composite = (*Union)(nil)\n)\n\n// A value in bits.\ntype Bits uint32\n\n// Bytes converts a bit value into bytes.\nfunc (b Bits) Bytes() uint32 {\n\treturn uint32(b / 8)\n}\n\n// Member is part of a Struct or Union.\n//\n// It is not a valid Type.\ntype Member struct {\n\tName         string\n\tType         Type\n\tOffset       Bits\n\tBitfieldSize Bits\n\tTags         []string\n}\n\n// Enum lists possible values.\ntype Enum struct {\n\tName string\n\t// Size of the enum value in bytes.\n\tSize uint32\n\t// True if the values should be interpreted as signed integers.\n\tSigned bool\n\tValues []EnumValue\n}\n\nfunc (e *Enum) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, e, \"size=\", e.Size, \"values=\", len(e.Values))\n}\n\nfunc (e *Enum) TypeName() string { return e.Name }\n\n// EnumValue is part of an Enum\n//\n// Is is not a valid Type\ntype EnumValue struct {\n\tName  string\n\tValue uint64\n}\n\nfunc (e *Enum) size() uint32 { return e.Size }\nfunc (e *Enum) copy() Type {\n\tcpy := *e\n\tcpy.Values = make([]EnumValue, len(e.Values))\n\tcopy(cpy.Values, e.Values)\n\treturn &cpy\n}\n\n// FwdKind is the type of forward declaration.\ntype FwdKind int\n\n// Valid types of forward declaration.\nconst (\n\tFwdStruct FwdKind = iota\n\tFwdUnion\n)\n\nfunc (fk FwdKind) String() string {\n\tswitch fk {\n\tcase FwdStruct:\n\t\treturn \"struct\"\n\tcase FwdUnion:\n\t\treturn \"union\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"%T(%d)\", fk, int(fk))\n\t}\n}\n\n// Fwd is a forward declaration of a Type.\ntype Fwd struct {\n\tName string\n\tKind FwdKind\n}\n\nfunc (f *Fwd) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, f, f.Kind)\n}\n\nfunc (f *Fwd) TypeName() string { return f.Name }\n\nfunc (f *Fwd) copy() Type {\n\tcpy := *f\n\treturn &cpy\n}\n\nfunc (f *Fwd) matches(typ Type) bool {\n\tif _, ok := As[*Struct](typ); ok && f.Kind == FwdStruct {\n\t\treturn true\n\t}\n\n\tif _, ok := As[*Union](typ); ok && f.Kind == FwdUnion {\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// Typedef is an alias of a Type.\ntype Typedef struct {\n\tName string\n\tType Type\n\tTags []string\n}\n\nfunc (td *Typedef) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, td, td.Type)\n}\n\nfunc (td *Typedef) TypeName() string { return td.Name }\n\nfunc (td *Typedef) copy() Type {\n\tcpy := *td\n\tcpy.Tags = copyTags(td.Tags)\n\treturn &cpy\n}\n\n// Volatile is a qualifier.\ntype Volatile struct {\n\tType Type\n}\n\nfunc (v *Volatile) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, v, v.Type)\n}\n\nfunc (v *Volatile) TypeName() string { return \"\" }\n\nfunc (v *Volatile) qualify() Type { return v.Type }\nfunc (v *Volatile) copy() Type {\n\tcpy := *v\n\treturn &cpy\n}\n\n// Const is a qualifier.\ntype Const struct {\n\tType Type\n}\n\nfunc (c *Const) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, c, c.Type)\n}\n\nfunc (c *Const) TypeName() string { return \"\" }\n\nfunc (c *Const) qualify() Type { return c.Type }\nfunc (c *Const) copy() Type {\n\tcpy := *c\n\treturn &cpy\n}\n\n// Restrict is a qualifier.\ntype Restrict struct {\n\tType Type\n}\n\nfunc (r *Restrict) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, r, r.Type)\n}\n\nfunc (r *Restrict) TypeName() string { return \"\" }\n\nfunc (r *Restrict) qualify() Type { return r.Type }\nfunc (r *Restrict) copy() Type {\n\tcpy := *r\n\treturn &cpy\n}\n\n// Func is a function definition.\ntype Func struct {\n\tName    string\n\tType    Type\n\tLinkage FuncLinkage\n\tTags    []string\n\t// ParamTags holds a list of tags for each parameter of the FuncProto to which `Type` points.\n\t// If no tags are present for any param, the outer slice will be nil/len(ParamTags)==0.\n\t// If at least 1 param has a tag, the outer slice will have the same length as the number of params.\n\t// The inner slice contains the tags and may be nil/len(ParamTags[i])==0 if no tags are present for that param.\n\tParamTags [][]string\n}\n\nfunc FuncMetadata(ins *asm.Instruction) *Func {\n\tfn, _ := ins.Metadata.Get(funcInfoMeta{}).(*Func)\n\treturn fn\n}\n\n// WithFuncMetadata adds a btf.Func to the Metadata of asm.Instruction.\nfunc WithFuncMetadata(ins asm.Instruction, fn *Func) asm.Instruction {\n\tins.Metadata.Set(funcInfoMeta{}, fn)\n\treturn ins\n}\n\nfunc (f *Func) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, f, f.Linkage, \"proto=\", f.Type)\n}\n\nfunc (f *Func) TypeName() string { return f.Name }\n\nfunc (f *Func) copy() Type {\n\tcpy := *f\n\tcpy.Tags = copyTags(f.Tags)\n\tif f.ParamTags != nil { // preserve nil vs zero-len slice distinction\n\t\tptCopy := make([][]string, len(f.ParamTags))\n\t\tfor i, tags := range f.ParamTags {\n\t\t\tptCopy[i] = copyTags(tags)\n\t\t}\n\t\tcpy.ParamTags = ptCopy\n\t}\n\treturn &cpy\n}\n\n// FuncProto is a function declaration.\ntype FuncProto struct {\n\tReturn Type\n\tParams []FuncParam\n}\n\nfunc (fp *FuncProto) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, fp, \"args=\", len(fp.Params), \"return=\", fp.Return)\n}\n\nfunc (fp *FuncProto) TypeName() string { return \"\" }\n\nfunc (fp *FuncProto) copy() Type {\n\tcpy := *fp\n\tcpy.Params = make([]FuncParam, len(fp.Params))\n\tcopy(cpy.Params, fp.Params)\n\treturn &cpy\n}\n\ntype FuncParam struct {\n\tName string\n\tType Type\n}\n\n// Var is a global variable.\ntype Var struct {\n\tName    string\n\tType    Type\n\tLinkage VarLinkage\n\tTags    []string\n}\n\nfunc (v *Var) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, v, v.Linkage)\n}\n\nfunc (v *Var) TypeName() string { return v.Name }\n\nfunc (v *Var) copy() Type {\n\tcpy := *v\n\tcpy.Tags = copyTags(v.Tags)\n\treturn &cpy\n}\n\n// Datasec is a global program section containing data.\ntype Datasec struct {\n\tName string\n\tSize uint32\n\tVars []VarSecinfo\n}\n\nfunc (ds *Datasec) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, ds)\n}\n\nfunc (ds *Datasec) TypeName() string { return ds.Name }\n\nfunc (ds *Datasec) size() uint32 { return ds.Size }\n\nfunc (ds *Datasec) copy() Type {\n\tcpy := *ds\n\tcpy.Vars = make([]VarSecinfo, len(ds.Vars))\n\tcopy(cpy.Vars, ds.Vars)\n\treturn &cpy\n}\n\n// VarSecinfo describes variable in a Datasec.\n//\n// It is not a valid Type.\ntype VarSecinfo struct {\n\t// Var or Func.\n\tType   Type\n\tOffset uint32\n\tSize   uint32\n}\n\n// Float is a float of a given length.\ntype Float struct {\n\tName string\n\n\t// The size of the float in bytes.\n\tSize uint32\n}\n\nfunc (f *Float) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, f, \"size=\", f.Size*8)\n}\n\nfunc (f *Float) TypeName() string { return f.Name }\nfunc (f *Float) size() uint32     { return f.Size }\nfunc (f *Float) copy() Type {\n\tcpy := *f\n\treturn &cpy\n}\n\n// declTag associates metadata with a declaration.\ntype declTag struct {\n\tType  Type\n\tValue string\n\t// The index this tag refers to in the target type. For composite types,\n\t// a value of -1 indicates that the tag refers to the whole type. Otherwise\n\t// it indicates which member or argument the tag applies to.\n\tIndex int\n}\n\nfunc (dt *declTag) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, dt, \"type=\", dt.Type, \"value=\", dt.Value, \"index=\", dt.Index)\n}\n\nfunc (dt *declTag) TypeName() string { return \"\" }\nfunc (dt *declTag) copy() Type {\n\tcpy := *dt\n\treturn &cpy\n}\n\n// TypeTag associates metadata with a pointer type. Tag types act as a custom\n// modifier(const, restrict, volatile) for the target type. Unlike declTags,\n// TypeTags are ordered so the order in which they are added matters.\n//\n// One of their uses is to mark pointers as `__kptr` meaning a pointer points\n// to kernel memory. Adding a `__kptr` to pointers in map values allows you\n// to store pointers to kernel memory in maps.\ntype TypeTag struct {\n\tType  Type\n\tValue string\n}\n\nfunc (tt *TypeTag) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, tt, \"type=\", tt.Type, \"value=\", tt.Value)\n}\n\nfunc (tt *TypeTag) TypeName() string { return \"\" }\nfunc (tt *TypeTag) qualify() Type    { return tt.Type }\nfunc (tt *TypeTag) copy() Type {\n\tcpy := *tt\n\treturn &cpy\n}\n\n// cycle is a type which had to be elided since it exceeded maxTypeDepth.\ntype cycle struct {\n\troot Type\n}\n\nfunc (c *cycle) ID() TypeID                     { return math.MaxUint32 }\nfunc (c *cycle) Format(fs fmt.State, verb rune) { formatType(fs, verb, c, \"root=\", c.root) }\nfunc (c *cycle) TypeName() string               { return \"\" }\nfunc (c *cycle) copy() Type {\n\tcpy := *c\n\treturn &cpy\n}\n\ntype sizer interface {\n\tsize() uint32\n}\n\nvar (\n\t_ sizer = (*Int)(nil)\n\t_ sizer = (*Pointer)(nil)\n\t_ sizer = (*Struct)(nil)\n\t_ sizer = (*Union)(nil)\n\t_ sizer = (*Enum)(nil)\n\t_ sizer = (*Datasec)(nil)\n)\n\ntype qualifier interface {\n\tqualify() Type\n}\n\nvar (\n\t_ qualifier = (*Const)(nil)\n\t_ qualifier = (*Restrict)(nil)\n\t_ qualifier = (*Volatile)(nil)\n\t_ qualifier = (*TypeTag)(nil)\n)\n\nvar errUnsizedType = errors.New(\"type is unsized\")\n\n// Sizeof returns the size of a type in bytes.\n//\n// Returns an error if the size can't be computed.\nfunc Sizeof(typ Type) (int, error) {\n\tvar (\n\t\tn    = int64(1)\n\t\telem int64\n\t)\n\n\tfor i := 0; i < maxResolveDepth; i++ {\n\t\tswitch v := typ.(type) {\n\t\tcase *Array:\n\t\t\tif n > 0 && int64(v.Nelems) > math.MaxInt64/n {\n\t\t\t\treturn 0, fmt.Errorf(\"type %s: overflow\", typ)\n\t\t\t}\n\n\t\t\t// Arrays may be of zero length, which allows\n\t\t\t// n to be zero as well.\n\t\t\tn *= int64(v.Nelems)\n\t\t\ttyp = v.Type\n\t\t\tcontinue\n\n\t\tcase sizer:\n\t\t\telem = int64(v.size())\n\n\t\tcase *Typedef:\n\t\t\ttyp = v.Type\n\t\t\tcontinue\n\n\t\tcase qualifier:\n\t\t\ttyp = v.qualify()\n\t\t\tcontinue\n\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"type %T: %w\", typ, errUnsizedType)\n\t\t}\n\n\t\tif n > 0 && elem > math.MaxInt64/n {\n\t\t\treturn 0, fmt.Errorf(\"type %s: overflow\", typ)\n\t\t}\n\n\t\tsize := n * elem\n\t\tif int64(int(size)) != size {\n\t\t\treturn 0, fmt.Errorf(\"type %s: overflow\", typ)\n\t\t}\n\n\t\treturn int(size), nil\n\t}\n\n\treturn 0, fmt.Errorf(\"type %s: exceeded type depth\", typ)\n}\n\n// alignof returns the alignment of a type.\n//\n// Returns an error if the Type can't be aligned, like an integer with an uneven\n// size. Currently only supports the subset of types necessary for bitfield\n// relocations.\nfunc alignof(typ Type) (int, error) {\n\tvar n int\n\n\tswitch t := UnderlyingType(typ).(type) {\n\tcase *Enum:\n\t\tn = int(t.size())\n\tcase *Int:\n\t\tn = int(t.Size)\n\tcase *Array:\n\t\treturn alignof(t.Type)\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"can't calculate alignment of %T\", t)\n\t}\n\n\tif !internal.IsPow(n) {\n\t\treturn 0, fmt.Errorf(\"alignment value %d is not a power of two\", n)\n\t}\n\n\treturn n, nil\n}\n\n// Copy a Type recursively.\n//\n// typ may form a cycle.\nfunc Copy(typ Type) Type {\n\treturn copyType(typ, nil, make(map[Type]Type), nil)\n}\n\nfunc copyType(typ Type, ids map[Type]TypeID, copies map[Type]Type, copiedIDs map[Type]TypeID) Type {\n\tif typ == nil {\n\t\treturn nil\n\t}\n\n\tcpy, ok := copies[typ]\n\tif ok {\n\t\t// This has been copied previously, no need to continue.\n\t\treturn cpy\n\t}\n\n\tcpy = typ.copy()\n\tcopies[typ] = cpy\n\n\tif id, ok := ids[typ]; ok {\n\t\tcopiedIDs[cpy] = id\n\t}\n\n\tchildren(cpy, func(child *Type) bool {\n\t\t*child = copyType(*child, ids, copies, copiedIDs)\n\t\treturn true\n\t})\n\n\treturn cpy\n}\n\ntype typeDeque = internal.Deque[*Type]\n\n// readAndInflateTypes reads the raw btf type info and turns it into a graph\n// of Types connected via pointers.\n//\n// If base is provided, then the types are considered to be of a split BTF\n// (e.g., a kernel module).\n//\n// Returns a slice of types indexed by TypeID. Since BTF ignores compilation\n// units, multiple types may share the same name. A Type may form a cyclic graph\n// by pointing at itself.\nfunc readAndInflateTypes(r io.Reader, bo binary.ByteOrder, typeLen uint32, rawStrings *stringTable, base *Spec) ([]Type, error) {\n\t// because of the interleaving between types and struct members it is difficult to\n\t// precompute the numbers of raw types this will parse\n\t// this \"guess\" is a good first estimation\n\tsizeOfbtfType := uintptr(btfTypeLen)\n\ttyMaxCount := uintptr(typeLen) / sizeOfbtfType / 2\n\ttypes := make([]Type, 0, tyMaxCount)\n\n\t// Void is defined to always be type ID 0, and is thus omitted from BTF.\n\ttypes = append(types, (*Void)(nil))\n\n\tfirstTypeID := TypeID(0)\n\tif base != nil {\n\t\tvar err error\n\t\tfirstTypeID, err = base.nextTypeID()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Split BTF doesn't contain Void.\n\t\ttypes = types[:0]\n\t}\n\n\ttype fixupDef struct {\n\t\tid  TypeID\n\t\ttyp *Type\n\t}\n\n\tvar fixups []fixupDef\n\tfixup := func(id TypeID, typ *Type) {\n\t\tif id < firstTypeID {\n\t\t\tif baseType, err := base.TypeByID(id); err == nil {\n\t\t\t\t*typ = baseType\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tidx := int(id - firstTypeID)\n\t\tif idx < len(types) {\n\t\t\t// We've already inflated this type, fix it up immediately.\n\t\t\t*typ = types[idx]\n\t\t\treturn\n\t\t}\n\n\t\tfixups = append(fixups, fixupDef{id, typ})\n\t}\n\n\ttype bitfieldFixupDef struct {\n\t\tid TypeID\n\t\tm  *Member\n\t}\n\n\tvar (\n\t\tlegacyBitfields = make(map[TypeID][2]Bits) // offset, size\n\t\tbitfieldFixups  []bitfieldFixupDef\n\t)\n\tconvertMembers := func(raw []btfMember, kindFlag bool) ([]Member, error) {\n\t\t// NB: The fixup below relies on pre-allocating this array to\n\t\t// work, since otherwise append might re-allocate members.\n\t\tmembers := make([]Member, 0, len(raw))\n\t\tfor i, btfMember := range raw {\n\t\t\tname, err := rawStrings.Lookup(btfMember.NameOff)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get name for member %d: %w\", i, err)\n\t\t\t}\n\n\t\t\tmembers = append(members, Member{\n\t\t\t\tName:   name,\n\t\t\t\tOffset: Bits(btfMember.Offset),\n\t\t\t})\n\n\t\t\tm := &members[i]\n\t\t\tfixup(raw[i].Type, &m.Type)\n\n\t\t\tif kindFlag {\n\t\t\t\tm.BitfieldSize = Bits(btfMember.Offset >> 24)\n\t\t\t\tm.Offset &= 0xffffff\n\t\t\t\t// We ignore legacy bitfield definitions if the current composite\n\t\t\t\t// is a new-style bitfield. This is kind of safe since offset and\n\t\t\t\t// size on the type of the member must be zero if kindFlat is set\n\t\t\t\t// according to spec.\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// This may be a legacy bitfield, try to fix it up.\n\t\t\tdata, ok := legacyBitfields[raw[i].Type]\n\t\t\tif ok {\n\t\t\t\t// Bingo!\n\t\t\t\tm.Offset += data[0]\n\t\t\t\tm.BitfieldSize = data[1]\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif m.Type != nil {\n\t\t\t\t// We couldn't find a legacy bitfield, but we know that the member's\n\t\t\t\t// type has already been inflated. Hence we know that it can't be\n\t\t\t\t// a legacy bitfield and there is nothing left to do.\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// We don't have fixup data, and the type we're pointing\n\t\t\t// at hasn't been inflated yet. No choice but to defer\n\t\t\t// the fixup.\n\t\t\tbitfieldFixups = append(bitfieldFixups, bitfieldFixupDef{\n\t\t\t\traw[i].Type,\n\t\t\t\tm,\n\t\t\t})\n\t\t}\n\t\treturn members, nil\n\t}\n\n\tvar (\n\t\tbuf       = make([]byte, 1024)\n\t\theader    btfType\n\t\tbInt      btfInt\n\t\tbArr      btfArray\n\t\tbMembers  []btfMember\n\t\tbEnums    []btfEnum\n\t\tbParams   []btfParam\n\t\tbVariable btfVariable\n\t\tbSecInfos []btfVarSecinfo\n\t\tbDeclTag  btfDeclTag\n\t\tbEnums64  []btfEnum64\n\t)\n\n\tvar declTags []*declTag\n\tfor {\n\t\tvar (\n\t\t\tid  = firstTypeID + TypeID(len(types))\n\t\t\ttyp Type\n\t\t)\n\n\t\tif _, err := io.ReadFull(r, buf[:btfTypeLen]); err == io.EOF {\n\t\t\tbreak\n\t\t} else if err != nil {\n\t\t\treturn nil, fmt.Errorf(\"can't read type info for id %v: %v\", id, err)\n\t\t}\n\n\t\tif _, err := unmarshalBtfType(&header, buf[:btfTypeLen], bo); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"can't unmarshal type info for id %v: %v\", id, err)\n\t\t}\n\n\t\tif id < firstTypeID {\n\t\t\treturn nil, fmt.Errorf(\"no more type IDs\")\n\t\t}\n\n\t\tname, err := rawStrings.Lookup(header.NameOff)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"get name for type id %d: %w\", id, err)\n\t\t}\n\n\t\tswitch header.Kind() {\n\t\tcase kindInt:\n\t\t\tsize := header.Size()\n\t\t\tbuf = buf[:btfIntLen]\n\t\t\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't read btfInt, id: %d: %w\", id, err)\n\t\t\t}\n\t\t\tif _, err := unmarshalBtfInt(&bInt, buf, bo); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't unmarshal btfInt, id: %d: %w\", id, err)\n\t\t\t}\n\t\t\tif bInt.Offset() > 0 || bInt.Bits().Bytes() != size {\n\t\t\t\tlegacyBitfields[id] = [2]Bits{bInt.Offset(), bInt.Bits()}\n\t\t\t}\n\t\t\ttyp = &Int{name, header.Size(), bInt.Encoding()}\n\n\t\tcase kindPointer:\n\t\t\tptr := &Pointer{nil}\n\t\t\tfixup(header.Type(), &ptr.Target)\n\t\t\ttyp = ptr\n\n\t\tcase kindArray:\n\t\t\tbuf = buf[:btfArrayLen]\n\t\t\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't read btfArray, id: %d: %w\", id, err)\n\t\t\t}\n\t\t\tif _, err := unmarshalBtfArray(&bArr, buf, bo); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't unmarshal btfArray, id: %d: %w\", id, err)\n\t\t\t}\n\n\t\t\tarr := &Array{nil, nil, bArr.Nelems}\n\t\t\tfixup(bArr.IndexType, &arr.Index)\n\t\t\tfixup(bArr.Type, &arr.Type)\n\t\t\ttyp = arr\n\n\t\tcase kindStruct:\n\t\t\tvlen := header.Vlen()\n\t\t\tbMembers = slices.Grow(bMembers[:0], vlen)[:vlen]\n\t\t\tbuf = slices.Grow(buf[:0], vlen*btfMemberLen)[:vlen*btfMemberLen]\n\t\t\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't read btfMembers, id: %d: %w\", id, err)\n\t\t\t}\n\t\t\tif _, err := unmarshalBtfMembers(bMembers, buf, bo); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't unmarshal btfMembers, id: %d: %w\", id, err)\n\t\t\t}\n\n\t\t\tmembers, err := convertMembers(bMembers, header.Bitfield())\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"struct %s (id %d): %w\", name, id, err)\n\t\t\t}\n\t\t\ttyp = &Struct{name, header.Size(), members, nil}\n\n\t\tcase kindUnion:\n\t\t\tvlen := header.Vlen()\n\t\t\tbMembers = slices.Grow(bMembers[:0], vlen)[:vlen]\n\t\t\tbuf = slices.Grow(buf[:0], vlen*btfMemberLen)[:vlen*btfMemberLen]\n\t\t\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't read btfMembers, id: %d: %w\", id, err)\n\t\t\t}\n\t\t\tif _, err := unmarshalBtfMembers(bMembers, buf, bo); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't unmarshal btfMembers, id: %d: %w\", id, err)\n\t\t\t}\n\n\t\t\tmembers, err := convertMembers(bMembers, header.Bitfield())\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"union %s (id %d): %w\", name, id, err)\n\t\t\t}\n\t\t\ttyp = &Union{name, header.Size(), members, nil}\n\n\t\tcase kindEnum:\n\t\t\tvlen := header.Vlen()\n\t\t\tbEnums = slices.Grow(bEnums[:0], vlen)[:vlen]\n\t\t\tbuf = slices.Grow(buf[:0], vlen*btfEnumLen)[:vlen*btfEnumLen]\n\t\t\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't read btfEnums, id: %d: %w\", id, err)\n\t\t\t}\n\t\t\tif _, err := unmarshalBtfEnums(bEnums, buf, bo); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't unmarshal btfEnums, id: %d: %w\", id, err)\n\t\t\t}\n\n\t\t\tvals := make([]EnumValue, 0, vlen)\n\t\t\tsigned := header.Signed()\n\t\t\tfor i, btfVal := range bEnums {\n\t\t\t\tname, err := rawStrings.Lookup(btfVal.NameOff)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"get name for enum value %d: %s\", i, err)\n\t\t\t\t}\n\t\t\t\tvalue := uint64(btfVal.Val)\n\t\t\t\tif signed {\n\t\t\t\t\t// Sign extend values to 64 bit.\n\t\t\t\t\tvalue = uint64(int32(btfVal.Val))\n\t\t\t\t}\n\t\t\t\tvals = append(vals, EnumValue{name, value})\n\t\t\t}\n\t\t\ttyp = &Enum{name, header.Size(), signed, vals}\n\n\t\tcase kindForward:\n\t\t\ttyp = &Fwd{name, header.FwdKind()}\n\n\t\tcase kindTypedef:\n\t\t\ttypedef := &Typedef{name, nil, nil}\n\t\t\tfixup(header.Type(), &typedef.Type)\n\t\t\ttyp = typedef\n\n\t\tcase kindVolatile:\n\t\t\tvolatile := &Volatile{nil}\n\t\t\tfixup(header.Type(), &volatile.Type)\n\t\t\ttyp = volatile\n\n\t\tcase kindConst:\n\t\t\tcnst := &Const{nil}\n\t\t\tfixup(header.Type(), &cnst.Type)\n\t\t\ttyp = cnst\n\n\t\tcase kindRestrict:\n\t\t\trestrict := &Restrict{nil}\n\t\t\tfixup(header.Type(), &restrict.Type)\n\t\t\ttyp = restrict\n\n\t\tcase kindFunc:\n\t\t\tfn := &Func{name, nil, header.Linkage(), nil, nil}\n\t\t\tfixup(header.Type(), &fn.Type)\n\t\t\ttyp = fn\n\n\t\tcase kindFuncProto:\n\t\t\tvlen := header.Vlen()\n\t\t\tbParams = slices.Grow(bParams[:0], vlen)[:vlen]\n\t\t\tbuf = slices.Grow(buf[:0], vlen*btfParamLen)[:vlen*btfParamLen]\n\t\t\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't read btfParams, id: %d: %w\", id, err)\n\t\t\t}\n\t\t\tif _, err := unmarshalBtfParams(bParams, buf, bo); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't unmarshal btfParams, id: %d: %w\", id, err)\n\t\t\t}\n\n\t\t\tparams := make([]FuncParam, 0, vlen)\n\t\t\tfor i, param := range bParams {\n\t\t\t\tname, err := rawStrings.Lookup(param.NameOff)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"get name for func proto parameter %d: %s\", i, err)\n\t\t\t\t}\n\t\t\t\tparams = append(params, FuncParam{\n\t\t\t\t\tName: name,\n\t\t\t\t})\n\t\t\t}\n\t\t\tfor i := range params {\n\t\t\t\tfixup(bParams[i].Type, &params[i].Type)\n\t\t\t}\n\n\t\t\tfp := &FuncProto{nil, params}\n\t\t\tfixup(header.Type(), &fp.Return)\n\t\t\ttyp = fp\n\n\t\tcase kindVar:\n\t\t\tbuf = buf[:btfVariableLen]\n\t\t\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't read btfVariable, id: %d: %w\", id, err)\n\t\t\t}\n\t\t\tif _, err := unmarshalBtfVariable(&bVariable, buf, bo); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't read btfVariable, id: %d: %w\", id, err)\n\t\t\t}\n\n\t\t\tv := &Var{name, nil, VarLinkage(bVariable.Linkage), nil}\n\t\t\tfixup(header.Type(), &v.Type)\n\t\t\ttyp = v\n\n\t\tcase kindDatasec:\n\t\t\tvlen := header.Vlen()\n\t\t\tbSecInfos = slices.Grow(bSecInfos[:0], vlen)[:vlen]\n\t\t\tbuf = slices.Grow(buf[:0], vlen*btfVarSecinfoLen)[:vlen*btfVarSecinfoLen]\n\t\t\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't read btfVarSecInfos, id: %d: %w\", id, err)\n\t\t\t}\n\t\t\tif _, err := unmarshalBtfVarSecInfos(bSecInfos, buf, bo); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't unmarshal btfVarSecInfos, id: %d: %w\", id, err)\n\t\t\t}\n\n\t\t\tvars := make([]VarSecinfo, 0, vlen)\n\t\t\tfor _, btfVar := range bSecInfos {\n\t\t\t\tvars = append(vars, VarSecinfo{\n\t\t\t\t\tOffset: btfVar.Offset,\n\t\t\t\t\tSize:   btfVar.Size,\n\t\t\t\t})\n\t\t\t}\n\t\t\tfor i := range vars {\n\t\t\t\tfixup(bSecInfos[i].Type, &vars[i].Type)\n\t\t\t}\n\t\t\ttyp = &Datasec{name, header.Size(), vars}\n\n\t\tcase kindFloat:\n\t\t\ttyp = &Float{name, header.Size()}\n\n\t\tcase kindDeclTag:\n\t\t\tbuf = buf[:btfDeclTagLen]\n\t\t\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't read btfDeclTag, id: %d: %w\", id, err)\n\t\t\t}\n\t\t\tif _, err := unmarshalBtfDeclTag(&bDeclTag, buf, bo); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't read btfDeclTag, id: %d: %w\", id, err)\n\t\t\t}\n\n\t\t\tbtfIndex := bDeclTag.ComponentIdx\n\t\t\tif uint64(btfIndex) > math.MaxInt {\n\t\t\t\treturn nil, fmt.Errorf(\"type id %d: index exceeds int\", id)\n\t\t\t}\n\n\t\t\tdt := &declTag{nil, name, int(int32(btfIndex))}\n\t\t\tfixup(header.Type(), &dt.Type)\n\t\t\ttyp = dt\n\n\t\t\tdeclTags = append(declTags, dt)\n\n\t\tcase kindTypeTag:\n\t\t\ttt := &TypeTag{nil, name}\n\t\t\tfixup(header.Type(), &tt.Type)\n\t\t\ttyp = tt\n\n\t\tcase kindEnum64:\n\t\t\tvlen := header.Vlen()\n\t\t\tbEnums64 = slices.Grow(bEnums64[:0], vlen)[:vlen]\n\t\t\tbuf = slices.Grow(buf[:0], vlen*btfEnum64Len)[:vlen*btfEnum64Len]\n\t\t\tif _, err := io.ReadFull(r, buf); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't read btfEnum64s, id: %d: %w\", id, err)\n\t\t\t}\n\t\t\tif _, err := unmarshalBtfEnums64(bEnums64, buf, bo); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't unmarshal btfEnum64s, id: %d: %w\", id, err)\n\t\t\t}\n\n\t\t\tvals := make([]EnumValue, 0, vlen)\n\t\t\tfor i, btfVal := range bEnums64 {\n\t\t\t\tname, err := rawStrings.Lookup(btfVal.NameOff)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"get name for enum64 value %d: %s\", i, err)\n\t\t\t\t}\n\t\t\t\tvalue := (uint64(btfVal.ValHi32) << 32) | uint64(btfVal.ValLo32)\n\t\t\t\tvals = append(vals, EnumValue{name, value})\n\t\t\t}\n\t\t\ttyp = &Enum{name, header.Size(), header.Signed(), vals}\n\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"type id %d: unknown kind: %v\", id, header.Kind())\n\t\t}\n\n\t\ttypes = append(types, typ)\n\t}\n\n\tfor _, fixup := range fixups {\n\t\tif fixup.id < firstTypeID {\n\t\t\treturn nil, fmt.Errorf(\"fixup for base type id %d is not expected\", fixup.id)\n\t\t}\n\n\t\tidx := int(fixup.id - firstTypeID)\n\t\tif idx >= len(types) {\n\t\t\treturn nil, fmt.Errorf(\"reference to invalid type id: %d\", fixup.id)\n\t\t}\n\n\t\t*fixup.typ = types[idx]\n\t}\n\n\tfor _, bitfieldFixup := range bitfieldFixups {\n\t\tif bitfieldFixup.id < firstTypeID {\n\t\t\treturn nil, fmt.Errorf(\"bitfield fixup from split to base types is not expected\")\n\t\t}\n\n\t\tdata, ok := legacyBitfields[bitfieldFixup.id]\n\t\tif ok {\n\t\t\t// This is indeed a legacy bitfield, fix it up.\n\t\t\tbitfieldFixup.m.Offset += data[0]\n\t\t\tbitfieldFixup.m.BitfieldSize = data[1]\n\t\t}\n\t}\n\n\tfor _, dt := range declTags {\n\t\tswitch t := dt.Type.(type) {\n\t\tcase *Var:\n\t\t\tif dt.Index != -1 {\n\t\t\t\treturn nil, fmt.Errorf(\"type %s: component idx %d is not -1\", dt, dt.Index)\n\t\t\t}\n\t\t\tt.Tags = append(t.Tags, dt.Value)\n\n\t\tcase *Typedef:\n\t\t\tif dt.Index != -1 {\n\t\t\t\treturn nil, fmt.Errorf(\"type %s: component idx %d is not -1\", dt, dt.Index)\n\t\t\t}\n\t\t\tt.Tags = append(t.Tags, dt.Value)\n\n\t\tcase composite:\n\t\t\tif dt.Index >= 0 {\n\t\t\t\tmembers := t.members()\n\t\t\t\tif dt.Index >= len(members) {\n\t\t\t\t\treturn nil, fmt.Errorf(\"type %s: component idx %d exceeds members of %s\", dt, dt.Index, t)\n\t\t\t\t}\n\n\t\t\t\tmembers[dt.Index].Tags = append(members[dt.Index].Tags, dt.Value)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif dt.Index == -1 {\n\t\t\t\tswitch t2 := t.(type) {\n\t\t\t\tcase *Struct:\n\t\t\t\t\tt2.Tags = append(t2.Tags, dt.Value)\n\t\t\t\tcase *Union:\n\t\t\t\t\tt2.Tags = append(t2.Tags, dt.Value)\n\t\t\t\t}\n\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\treturn nil, fmt.Errorf(\"type %s: decl tag for type %s has invalid component idx\", dt, t)\n\n\t\tcase *Func:\n\t\t\tfp, ok := t.Type.(*FuncProto)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"type %s: %s is not a FuncProto\", dt, t.Type)\n\t\t\t}\n\n\t\t\t// Ensure the number of argument tag lists equals the number of arguments\n\t\t\tif len(t.ParamTags) == 0 {\n\t\t\t\tt.ParamTags = make([][]string, len(fp.Params))\n\t\t\t}\n\n\t\t\tif dt.Index >= 0 {\n\t\t\t\tif dt.Index >= len(fp.Params) {\n\t\t\t\t\treturn nil, fmt.Errorf(\"type %s: component idx %d exceeds params of %s\", dt, dt.Index, t)\n\t\t\t\t}\n\n\t\t\t\tt.ParamTags[dt.Index] = append(t.ParamTags[dt.Index], dt.Value)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif dt.Index == -1 {\n\t\t\t\tt.Tags = append(t.Tags, dt.Value)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\treturn nil, fmt.Errorf(\"type %s: decl tag for type %s has invalid component idx\", dt, t)\n\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"type %s: decl tag for type %s is not supported\", dt, t)\n\t\t}\n\t}\n\n\treturn types, nil\n}\n\n// essentialName represents the name of a BTF type stripped of any flavor\n// suffixes after a ___ delimiter.\ntype essentialName string\n\n// newEssentialName returns name without a ___ suffix.\n//\n// CO-RE has the concept of 'struct flavors', which are used to deal with\n// changes in kernel data structures. Anything after three underscores\n// in a type name is ignored for the purpose of finding a candidate type\n// in the kernel's BTF.\nfunc newEssentialName(name string) essentialName {\n\tif name == \"\" {\n\t\treturn \"\"\n\t}\n\tlastIdx := strings.LastIndex(name, \"___\")\n\tif lastIdx > 0 {\n\t\treturn essentialName(name[:lastIdx])\n\t}\n\treturn essentialName(name)\n}\n\n// UnderlyingType skips qualifiers and Typedefs.\nfunc UnderlyingType(typ Type) Type {\n\tresult := typ\n\tfor depth := 0; depth <= maxResolveDepth; depth++ {\n\t\tswitch v := (result).(type) {\n\t\tcase qualifier:\n\t\t\tresult = v.qualify()\n\t\tcase *Typedef:\n\t\t\tresult = v.Type\n\t\tdefault:\n\t\t\treturn result\n\t\t}\n\t}\n\treturn &cycle{typ}\n}\n\n// QualifiedType returns the type with all qualifiers removed.\nfunc QualifiedType(typ Type) Type {\n\tresult := typ\n\tfor depth := 0; depth <= maxResolveDepth; depth++ {\n\t\tswitch v := (result).(type) {\n\t\tcase qualifier:\n\t\t\tresult = v.qualify()\n\t\tdefault:\n\t\t\treturn result\n\t\t}\n\t}\n\treturn &cycle{typ}\n}\n\n// As returns typ if is of type T. Otherwise it peels qualifiers and Typedefs\n// until it finds a T.\n//\n// Returns the zero value and false if there is no T or if the type is nested\n// too deeply.\nfunc As[T Type](typ Type) (T, bool) {\n\t// NB: We can't make this function return (*T) since then\n\t// we can't assert that a type matches an interface which\n\t// embeds Type: as[composite](T).\n\tfor depth := 0; depth <= maxResolveDepth; depth++ {\n\t\tswitch v := (typ).(type) {\n\t\tcase T:\n\t\t\treturn v, true\n\t\tcase qualifier:\n\t\t\ttyp = v.qualify()\n\t\tcase *Typedef:\n\t\t\ttyp = v.Type\n\t\tdefault:\n\t\t\tgoto notFound\n\t\t}\n\t}\nnotFound:\n\tvar zero T\n\treturn zero, false\n}\n\ntype formatState struct {\n\tfmt.State\n\tdepth int\n}\n\n// formattableType is a subset of Type, to ease unit testing of formatType.\ntype formattableType interface {\n\tfmt.Formatter\n\tTypeName() string\n}\n\n// formatType formats a type in a canonical form.\n//\n// Handles cyclical types by only printing cycles up to a certain depth. Elements\n// in extra are separated by spaces unless the preceding element is a string\n// ending in '='.\nfunc formatType(f fmt.State, verb rune, t formattableType, extra ...interface{}) {\n\tif verb != 'v' && verb != 's' {\n\t\tfmt.Fprintf(f, \"{UNRECOGNIZED: %c}\", verb)\n\t\treturn\n\t}\n\n\t_, _ = io.WriteString(f, internal.GoTypeName(t))\n\n\tif name := t.TypeName(); name != \"\" {\n\t\t// Output BTF type name if present.\n\t\tfmt.Fprintf(f, \":%q\", name)\n\t}\n\n\tif f.Flag('+') {\n\t\t// Output address if requested.\n\t\tfmt.Fprintf(f, \":%#p\", t)\n\t}\n\n\tif verb == 's' {\n\t\t// %s omits details.\n\t\treturn\n\t}\n\n\tvar depth int\n\tif ps, ok := f.(*formatState); ok {\n\t\tdepth = ps.depth\n\t\tf = ps.State\n\t}\n\n\tmaxDepth, ok := f.Width()\n\tif !ok {\n\t\tmaxDepth = 0\n\t}\n\n\tif depth > maxDepth {\n\t\t// We've reached the maximum depth. This avoids infinite recursion even\n\t\t// for cyclical types.\n\t\treturn\n\t}\n\n\tif len(extra) == 0 {\n\t\treturn\n\t}\n\n\twantSpace := false\n\t_, _ = io.WriteString(f, \"[\")\n\tfor _, arg := range extra {\n\t\tif wantSpace {\n\t\t\t_, _ = io.WriteString(f, \" \")\n\t\t}\n\n\t\tswitch v := arg.(type) {\n\t\tcase string:\n\t\t\t_, _ = io.WriteString(f, v)\n\t\t\twantSpace = len(v) > 0 && v[len(v)-1] != '='\n\t\t\tcontinue\n\n\t\tcase formattableType:\n\t\t\tv.Format(&formatState{f, depth + 1}, verb)\n\n\t\tdefault:\n\t\t\tfmt.Fprint(f, arg)\n\t\t}\n\n\t\twantSpace = true\n\t}\n\t_, _ = io.WriteString(f, \"]\")\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/workarounds.go",
    "content": "package btf\n\n// datasecResolveWorkaround ensures that certain vars in a Datasec are added\n// to a Spec before the Datasec. This avoids a bug in kernel BTF validation.\n//\n// See https://lore.kernel.org/bpf/20230302123440.1193507-1-lmb@isovalent.com/\nfunc datasecResolveWorkaround(b *Builder, ds *Datasec) error {\n\tfor _, vsi := range ds.Vars {\n\t\tv, ok := vsi.Type.(*Var)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch v.Type.(type) {\n\t\tcase *Typedef, *Volatile, *Const, *Restrict, *TypeTag:\n\t\t\t// NB: We must never call Add on a Datasec, otherwise we risk\n\t\t\t// infinite recursion.\n\t\t\t_, err := b.Add(v.Type)\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"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/collection.go",
    "content": "package ebpf\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/kallsyms\"\n\t\"github.com/cilium/ebpf/internal/kconfig\"\n\t\"github.com/cilium/ebpf/internal/linux\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\n// CollectionOptions control loading a collection into the kernel.\n//\n// Maps and Programs are passed to NewMapWithOptions and NewProgramsWithOptions.\ntype CollectionOptions struct {\n\tMaps     MapOptions\n\tPrograms ProgramOptions\n\n\t// MapReplacements takes a set of Maps that will be used instead of\n\t// creating new ones when loading the CollectionSpec.\n\t//\n\t// For each given Map, there must be a corresponding MapSpec in\n\t// CollectionSpec.Maps, and its type, key/value size, max entries and flags\n\t// must match the values of the MapSpec.\n\t//\n\t// The given Maps are Clone()d before being used in the Collection, so the\n\t// caller can Close() them freely when they are no longer needed.\n\tMapReplacements map[string]*Map\n}\n\n// CollectionSpec describes a collection.\ntype CollectionSpec struct {\n\tMaps     map[string]*MapSpec\n\tPrograms map[string]*ProgramSpec\n\n\t// Variables refer to global variables declared in the ELF. They can be read\n\t// and modified freely before loading the Collection. Modifying them after\n\t// loading has no effect on a running eBPF program.\n\tVariables map[string]*VariableSpec\n\n\t// Types holds type information about Maps and Programs.\n\t// Modifications to Types are currently undefined behaviour.\n\tTypes *btf.Spec\n\n\t// ByteOrder specifies whether the ELF was compiled for\n\t// big-endian or little-endian architectures.\n\tByteOrder binary.ByteOrder\n}\n\n// Copy returns a recursive copy of the spec.\nfunc (cs *CollectionSpec) Copy() *CollectionSpec {\n\tif cs == nil {\n\t\treturn nil\n\t}\n\n\tcpy := CollectionSpec{\n\t\tMaps:      make(map[string]*MapSpec, len(cs.Maps)),\n\t\tPrograms:  make(map[string]*ProgramSpec, len(cs.Programs)),\n\t\tVariables: make(map[string]*VariableSpec, len(cs.Variables)),\n\t\tByteOrder: cs.ByteOrder,\n\t\tTypes:     cs.Types.Copy(),\n\t}\n\n\tfor name, spec := range cs.Maps {\n\t\tcpy.Maps[name] = spec.Copy()\n\t}\n\n\tfor name, spec := range cs.Programs {\n\t\tcpy.Programs[name] = spec.Copy()\n\t}\n\n\tfor name, spec := range cs.Variables {\n\t\tcpy.Variables[name] = spec.copy(&cpy)\n\t}\n\n\treturn &cpy\n}\n\n// RewriteMaps replaces all references to specific maps.\n//\n// Use this function to use pre-existing maps instead of creating new ones\n// when calling NewCollection. Any named maps are removed from CollectionSpec.Maps.\n//\n// Returns an error if a named map isn't used in at least one program.\n//\n// Deprecated: Pass CollectionOptions.MapReplacements when loading the Collection\n// instead.\nfunc (cs *CollectionSpec) RewriteMaps(maps map[string]*Map) error {\n\tfor symbol, m := range maps {\n\t\t// have we seen a program that uses this symbol / map\n\t\tseen := false\n\t\tfor progName, progSpec := range cs.Programs {\n\t\t\terr := progSpec.Instructions.AssociateMap(symbol, m)\n\n\t\t\tswitch {\n\t\t\tcase err == nil:\n\t\t\t\tseen = true\n\n\t\t\tcase errors.Is(err, asm.ErrUnreferencedSymbol):\n\t\t\t\t// Not all programs need to use the map\n\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"program %s: %w\", progName, err)\n\t\t\t}\n\t\t}\n\n\t\tif !seen {\n\t\t\treturn fmt.Errorf(\"map %s not referenced by any programs\", symbol)\n\t\t}\n\n\t\t// Prevent NewCollection from creating rewritten maps\n\t\tdelete(cs.Maps, symbol)\n\t}\n\n\treturn nil\n}\n\n// MissingConstantsError is returned by [CollectionSpec.RewriteConstants].\ntype MissingConstantsError struct {\n\t// The constants missing from .rodata.\n\tConstants []string\n}\n\nfunc (m *MissingConstantsError) Error() string {\n\treturn fmt.Sprintf(\"some constants are missing from .rodata: %s\", strings.Join(m.Constants, \", \"))\n}\n\n// RewriteConstants replaces the value of multiple constants.\n//\n// The constant must be defined like so in the C program:\n//\n//\tvolatile const type foobar;\n//\tvolatile const type foobar = default;\n//\n// Replacement values must be of the same length as the C sizeof(type).\n// If necessary, they are marshalled according to the same rules as\n// map values.\n//\n// From Linux 5.5 the verifier will use constants to eliminate dead code.\n//\n// Returns an error wrapping [MissingConstantsError] if a constant doesn't exist.\n//\n// Deprecated: Use [CollectionSpec.Variables] to interact with constants instead.\n// RewriteConstants is now a wrapper around the VariableSpec API.\nfunc (cs *CollectionSpec) RewriteConstants(consts map[string]interface{}) error {\n\tvar missing []string\n\tfor n, c := range consts {\n\t\tv, ok := cs.Variables[n]\n\t\tif !ok {\n\t\t\tmissing = append(missing, n)\n\t\t\tcontinue\n\t\t}\n\n\t\tif !v.Constant() {\n\t\t\treturn fmt.Errorf(\"variable %s is not a constant\", n)\n\t\t}\n\n\t\tif err := v.Set(c); err != nil {\n\t\t\treturn fmt.Errorf(\"rewriting constant %s: %w\", n, err)\n\t\t}\n\t}\n\n\tif len(missing) != 0 {\n\t\treturn fmt.Errorf(\"rewrite constants: %w\", &MissingConstantsError{Constants: missing})\n\t}\n\n\treturn nil\n}\n\n// Assign the contents of a CollectionSpec to a struct.\n//\n// This function is a shortcut to manually checking the presence\n// of maps and programs in a CollectionSpec. Consider using bpf2go\n// if this sounds useful.\n//\n// 'to' must be a pointer to a struct. A field of the\n// struct is updated with values from Programs, Maps or Variables if it\n// has an `ebpf` tag and its type is *ProgramSpec, *MapSpec or *VariableSpec.\n// The tag's value specifies the name of the program or map as\n// found in the CollectionSpec.\n//\n//\tstruct {\n//\t    Foo     *ebpf.ProgramSpec  `ebpf:\"xdp_foo\"`\n//\t    Bar     *ebpf.MapSpec      `ebpf:\"bar_map\"`\n//\t    Var     *ebpf.VariableSpec `ebpf:\"some_var\"`\n//\t    Ignored int\n//\t}\n//\n// Returns an error if any of the eBPF objects can't be found, or\n// if the same Spec is assigned multiple times.\nfunc (cs *CollectionSpec) Assign(to interface{}) error {\n\tgetValue := func(typ reflect.Type, name string) (interface{}, error) {\n\t\tswitch typ {\n\t\tcase reflect.TypeOf((*ProgramSpec)(nil)):\n\t\t\tif p := cs.Programs[name]; p != nil {\n\t\t\t\treturn p, nil\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"missing program %q\", name)\n\n\t\tcase reflect.TypeOf((*MapSpec)(nil)):\n\t\t\tif m := cs.Maps[name]; m != nil {\n\t\t\t\treturn m, nil\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"missing map %q\", name)\n\n\t\tcase reflect.TypeOf((*VariableSpec)(nil)):\n\t\t\tif v := cs.Variables[name]; v != nil {\n\t\t\t\treturn v, nil\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"missing variable %q\", name)\n\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unsupported type %s\", typ)\n\t\t}\n\t}\n\n\treturn assignValues(to, getValue)\n}\n\n// LoadAndAssign loads Maps and Programs into the kernel and assigns them\n// to a struct.\n//\n// Omitting Map/Program.Close() during application shutdown is an error.\n// See the package documentation for details around Map and Program lifecycle.\n//\n// This function is a shortcut to manually checking the presence\n// of maps and programs in a CollectionSpec. Consider using bpf2go\n// if this sounds useful.\n//\n// 'to' must be a pointer to a struct. A field of the struct is updated with\n// a Program or Map if it has an `ebpf` tag and its type is *Program or *Map.\n// The tag's value specifies the name of the program or map as found in the\n// CollectionSpec. Before updating the struct, the requested objects and their\n// dependent resources are loaded into the kernel and populated with values if\n// specified.\n//\n//\tstruct {\n//\t    Foo     *ebpf.Program `ebpf:\"xdp_foo\"`\n//\t    Bar     *ebpf.Map     `ebpf:\"bar_map\"`\n//\t    Ignored int\n//\t}\n//\n// opts may be nil.\n//\n// Returns an error if any of the fields can't be found, or\n// if the same Map or Program is assigned multiple times.\nfunc (cs *CollectionSpec) LoadAndAssign(to interface{}, opts *CollectionOptions) error {\n\tloader, err := newCollectionLoader(cs, opts)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer loader.close()\n\n\t// Support assigning Programs and Maps, lazy-loading the required objects.\n\tassignedMaps := make(map[string]bool)\n\tassignedProgs := make(map[string]bool)\n\tassignedVars := make(map[string]bool)\n\n\tgetValue := func(typ reflect.Type, name string) (interface{}, error) {\n\t\tswitch typ {\n\n\t\tcase reflect.TypeOf((*Program)(nil)):\n\t\t\tassignedProgs[name] = true\n\t\t\treturn loader.loadProgram(name)\n\n\t\tcase reflect.TypeOf((*Map)(nil)):\n\t\t\tassignedMaps[name] = true\n\t\t\treturn loader.loadMap(name)\n\n\t\tcase reflect.TypeOf((*Variable)(nil)):\n\t\t\tassignedVars[name] = true\n\t\t\treturn loader.loadVariable(name)\n\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unsupported type %s\", typ)\n\t\t}\n\t}\n\n\t// Load the Maps and Programs requested by the annotated struct.\n\tif err := assignValues(to, getValue); err != nil {\n\t\treturn err\n\t}\n\n\t// Populate the requested maps. Has a chance of lazy-loading other dependent maps.\n\tif err := loader.populateDeferredMaps(); err != nil {\n\t\treturn err\n\t}\n\n\t// Evaluate the loader's objects after all (lazy)loading has taken place.\n\tfor n, m := range loader.maps {\n\t\tswitch m.typ {\n\t\tcase ProgramArray:\n\t\t\t// Require all lazy-loaded ProgramArrays to be assigned to the given object.\n\t\t\t// The kernel empties a ProgramArray once the last user space reference\n\t\t\t// to it closes, which leads to failed tail calls. Combined with the library\n\t\t\t// closing map fds via GC finalizers this can lead to surprising behaviour.\n\t\t\t// Only allow unassigned ProgramArrays when the library hasn't pre-populated\n\t\t\t// any entries from static value declarations. At this point, we know the map\n\t\t\t// is empty and there's no way for the caller to interact with the map going\n\t\t\t// forward.\n\t\t\tif !assignedMaps[n] && len(cs.Maps[n].Contents) > 0 {\n\t\t\t\treturn fmt.Errorf(\"ProgramArray %s must be assigned to prevent missed tail calls\", n)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Prevent loader.cleanup() from closing assigned Maps and Programs.\n\tfor m := range assignedMaps {\n\t\tdelete(loader.maps, m)\n\t}\n\tfor p := range assignedProgs {\n\t\tdelete(loader.programs, p)\n\t}\n\tfor p := range assignedVars {\n\t\tdelete(loader.vars, p)\n\t}\n\n\treturn nil\n}\n\n// Collection is a collection of live BPF resources present in the kernel.\ntype Collection struct {\n\tPrograms map[string]*Program\n\tMaps     map[string]*Map\n\n\t// Variables contains global variables used by the Collection's program(s). On\n\t// kernels older than 5.5, most interactions with Variables return\n\t// [ErrNotSupported].\n\tVariables map[string]*Variable\n}\n\n// NewCollection creates a Collection from the given spec, creating and\n// loading its declared resources into the kernel.\n//\n// Omitting Collection.Close() during application shutdown is an error.\n// See the package documentation for details around Map and Program lifecycle.\nfunc NewCollection(spec *CollectionSpec) (*Collection, error) {\n\treturn NewCollectionWithOptions(spec, CollectionOptions{})\n}\n\n// NewCollectionWithOptions creates a Collection from the given spec using\n// options, creating and loading its declared resources into the kernel.\n//\n// Omitting Collection.Close() during application shutdown is an error.\n// See the package documentation for details around Map and Program lifecycle.\nfunc NewCollectionWithOptions(spec *CollectionSpec, opts CollectionOptions) (*Collection, error) {\n\tloader, err := newCollectionLoader(spec, &opts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer loader.close()\n\n\t// Create maps first, as their fds need to be linked into programs.\n\tfor mapName := range spec.Maps {\n\t\tif _, err := loader.loadMap(mapName); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tfor progName, prog := range spec.Programs {\n\t\tif prog.Type == UnspecifiedProgram {\n\t\t\tcontinue\n\t\t}\n\n\t\tif _, err := loader.loadProgram(progName); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tfor varName := range spec.Variables {\n\t\tif _, err := loader.loadVariable(varName); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Maps can contain Program and Map stubs, so populate them after\n\t// all Maps and Programs have been successfully loaded.\n\tif err := loader.populateDeferredMaps(); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Prevent loader.cleanup from closing maps, programs and vars.\n\tmaps, progs, vars := loader.maps, loader.programs, loader.vars\n\tloader.maps, loader.programs, loader.vars = nil, nil, nil\n\n\treturn &Collection{\n\t\tprogs,\n\t\tmaps,\n\t\tvars,\n\t}, nil\n}\n\ntype collectionLoader struct {\n\tcoll     *CollectionSpec\n\topts     *CollectionOptions\n\tmaps     map[string]*Map\n\tprograms map[string]*Program\n\tvars     map[string]*Variable\n}\n\nfunc newCollectionLoader(coll *CollectionSpec, opts *CollectionOptions) (*collectionLoader, error) {\n\tif opts == nil {\n\t\topts = &CollectionOptions{}\n\t}\n\n\t// Check for existing MapSpecs in the CollectionSpec for all provided replacement maps.\n\tfor name := range opts.MapReplacements {\n\t\tif _, ok := coll.Maps[name]; !ok {\n\t\t\treturn nil, fmt.Errorf(\"replacement map %s not found in CollectionSpec\", name)\n\t\t}\n\t}\n\n\tif err := populateKallsyms(coll.Programs); err != nil {\n\t\treturn nil, fmt.Errorf(\"populating kallsyms caches: %w\", err)\n\t}\n\n\treturn &collectionLoader{\n\t\tcoll,\n\t\topts,\n\t\tmake(map[string]*Map),\n\t\tmake(map[string]*Program),\n\t\tmake(map[string]*Variable),\n\t}, nil\n}\n\n// populateKallsyms populates kallsyms caches, making lookups cheaper later on\n// during individual program loading. Since we have less context available\n// at those stages, we batch the lookups here instead to avoid redundant work.\nfunc populateKallsyms(progs map[string]*ProgramSpec) error {\n\t// Look up associated kernel modules for all symbols referenced by\n\t// ProgramSpec.AttachTo for program types that support attaching to kmods.\n\tmods := make(map[string]string)\n\tfor _, p := range progs {\n\t\tif p.AttachTo != \"\" && p.targetsKernelModule() {\n\t\t\tmods[p.AttachTo] = \"\"\n\t\t}\n\t}\n\tif len(mods) != 0 {\n\t\tif err := kallsyms.AssignModules(mods); err != nil {\n\t\t\treturn fmt.Errorf(\"getting modules from kallsyms: %w\", err)\n\t\t}\n\t}\n\n\t// Look up addresses of all kernel symbols referenced by all programs.\n\taddrs := make(map[string]uint64)\n\tfor _, p := range progs {\n\t\titer := p.Instructions.Iterate()\n\t\tfor iter.Next() {\n\t\t\tins := iter.Ins\n\t\t\tmeta, _ := ins.Metadata.Get(ksymMetaKey{}).(*ksymMeta)\n\t\t\tif meta != nil {\n\t\t\t\taddrs[meta.Name] = 0\n\t\t\t}\n\t\t}\n\t}\n\tif len(addrs) != 0 {\n\t\tif err := kallsyms.AssignAddresses(addrs); err != nil {\n\t\t\treturn fmt.Errorf(\"getting addresses from kallsyms: %w\", err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// close all resources left over in the collectionLoader.\nfunc (cl *collectionLoader) close() {\n\tfor _, m := range cl.maps {\n\t\tm.Close()\n\t}\n\tfor _, p := range cl.programs {\n\t\tp.Close()\n\t}\n}\n\nfunc (cl *collectionLoader) loadMap(mapName string) (*Map, error) {\n\tif m := cl.maps[mapName]; m != nil {\n\t\treturn m, nil\n\t}\n\n\tmapSpec := cl.coll.Maps[mapName]\n\tif mapSpec == nil {\n\t\treturn nil, fmt.Errorf(\"missing map %s\", mapName)\n\t}\n\n\tmapSpec = mapSpec.Copy()\n\n\t// Defer setting the mmapable flag on maps until load time. This avoids the\n\t// MapSpec having different flags on some kernel versions. Also avoid running\n\t// syscalls during ELF loading, so platforms like wasm can also parse an ELF.\n\tif isDataSection(mapSpec.Name) && haveMmapableMaps() == nil {\n\t\tmapSpec.Flags |= sys.BPF_F_MMAPABLE\n\t}\n\n\tif replaceMap, ok := cl.opts.MapReplacements[mapName]; ok {\n\t\t// Check compatibility with the replacement map after setting\n\t\t// feature-dependent map flags.\n\t\tif err := mapSpec.Compatible(replaceMap); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"using replacement map %s: %w\", mapSpec.Name, err)\n\t\t}\n\n\t\t// Clone the map to avoid closing user's map later on.\n\t\tm, err := replaceMap.Clone()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tcl.maps[mapName] = m\n\t\treturn m, nil\n\t}\n\n\tm, err := newMapWithOptions(mapSpec, cl.opts.Maps)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"map %s: %w\", mapName, err)\n\t}\n\n\t// Finalize 'scalar' maps that don't refer to any other eBPF resources\n\t// potentially pending creation. This is needed for frozen maps like .rodata\n\t// that need to be finalized before invoking the verifier.\n\tif !mapSpec.Type.canStoreMapOrProgram() {\n\t\tif err := m.finalize(mapSpec); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"finalizing map %s: %w\", mapName, err)\n\t\t}\n\t}\n\n\tcl.maps[mapName] = m\n\treturn m, nil\n}\n\nfunc (cl *collectionLoader) loadProgram(progName string) (*Program, error) {\n\tif prog := cl.programs[progName]; prog != nil {\n\t\treturn prog, nil\n\t}\n\n\tprogSpec := cl.coll.Programs[progName]\n\tif progSpec == nil {\n\t\treturn nil, fmt.Errorf(\"unknown program %s\", progName)\n\t}\n\n\t// Bail out early if we know the kernel is going to reject the program.\n\t// This skips loading map dependencies, saving some cleanup work later.\n\tif progSpec.Type == UnspecifiedProgram {\n\t\treturn nil, fmt.Errorf(\"cannot load program %s: program type is unspecified\", progName)\n\t}\n\n\tprogSpec = progSpec.Copy()\n\n\t// Rewrite any reference to a valid map in the program's instructions,\n\t// which includes all of its dependencies.\n\tfor i := range progSpec.Instructions {\n\t\tins := &progSpec.Instructions[i]\n\n\t\tif !ins.IsLoadFromMap() || ins.Reference() == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Don't overwrite map loads containing non-zero map fd's,\n\t\t// they can be manually included by the caller.\n\t\t// Map FDs/IDs are placed in the lower 32 bits of Constant.\n\t\tif int32(ins.Constant) > 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tm, err := cl.loadMap(ins.Reference())\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"program %s: %w\", progName, err)\n\t\t}\n\n\t\tif err := ins.AssociateMap(m); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"program %s: map %s: %w\", progName, ins.Reference(), err)\n\t\t}\n\t}\n\n\tprog, err := newProgramWithOptions(progSpec, cl.opts.Programs)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"program %s: %w\", progName, err)\n\t}\n\n\tcl.programs[progName] = prog\n\treturn prog, nil\n}\n\nfunc (cl *collectionLoader) loadVariable(varName string) (*Variable, error) {\n\tif v := cl.vars[varName]; v != nil {\n\t\treturn v, nil\n\t}\n\n\tvarSpec := cl.coll.Variables[varName]\n\tif varSpec == nil {\n\t\treturn nil, fmt.Errorf(\"unknown variable %s\", varName)\n\t}\n\n\t// Get the key of the VariableSpec's MapSpec in the CollectionSpec.\n\tvar mapName string\n\tfor n, ms := range cl.coll.Maps {\n\t\tif ms == varSpec.m {\n\t\t\tmapName = n\n\t\t\tbreak\n\t\t}\n\t}\n\tif mapName == \"\" {\n\t\treturn nil, fmt.Errorf(\"variable %s: underlying MapSpec %s was removed from CollectionSpec\", varName, varSpec.m.Name)\n\t}\n\n\tm, err := cl.loadMap(mapName)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"variable %s: %w\", varName, err)\n\t}\n\n\t// If the kernel is too old or the underlying map was created without\n\t// BPF_F_MMAPABLE, [Map.Memory] will return ErrNotSupported. In this case,\n\t// emit a Variable with a nil Memory. This keeps Collection{Spec}.Variables\n\t// consistent across systems with different feature sets without breaking\n\t// LoadAndAssign.\n\tmm, err := m.Memory()\n\tif err != nil && !errors.Is(err, ErrNotSupported) {\n\t\treturn nil, fmt.Errorf(\"variable %s: getting memory for map %s: %w\", varName, mapName, err)\n\t}\n\n\tv, err := newVariable(\n\t\tvarSpec.name,\n\t\tvarSpec.offset,\n\t\tvarSpec.size,\n\t\tvarSpec.t,\n\t\tmm,\n\t)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"variable %s: %w\", varName, err)\n\t}\n\n\tcl.vars[varName] = v\n\treturn v, nil\n}\n\n// populateDeferredMaps iterates maps holding programs or other maps and loads\n// any dependencies. Populates all maps in cl and freezes them if specified.\nfunc (cl *collectionLoader) populateDeferredMaps() error {\n\tfor mapName, m := range cl.maps {\n\t\tmapSpec, ok := cl.coll.Maps[mapName]\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"missing map spec %s\", mapName)\n\t\t}\n\n\t\t// Scalar maps without Map or Program references are finalized during\n\t\t// creation. Don't finalize them again.\n\t\tif !mapSpec.Type.canStoreMapOrProgram() {\n\t\t\tcontinue\n\t\t}\n\n\t\tmapSpec = mapSpec.Copy()\n\n\t\t// MapSpecs that refer to inner maps or programs within the same\n\t\t// CollectionSpec do so using strings. These strings are used as the key\n\t\t// to look up the respective object in the Maps or Programs fields.\n\t\t// Resolve those references to actual Map or Program resources that\n\t\t// have been loaded into the kernel.\n\t\tfor i, kv := range mapSpec.Contents {\n\t\t\tobjName, ok := kv.Value.(string)\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tswitch t := mapSpec.Type; {\n\t\t\tcase t.canStoreProgram():\n\t\t\t\t// loadProgram is idempotent and could return an existing Program.\n\t\t\t\tprog, err := cl.loadProgram(objName)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"loading program %s, for map %s: %w\", objName, mapName, err)\n\t\t\t\t}\n\t\t\t\tmapSpec.Contents[i] = MapKV{kv.Key, prog}\n\n\t\t\tcase t.canStoreMap():\n\t\t\t\t// loadMap is idempotent and could return an existing Map.\n\t\t\t\tinnerMap, err := cl.loadMap(objName)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"loading inner map %s, for map %s: %w\", objName, mapName, err)\n\t\t\t\t}\n\t\t\t\tmapSpec.Contents[i] = MapKV{kv.Key, innerMap}\n\t\t\t}\n\t\t}\n\n\t\t// Populate and freeze the map if specified.\n\t\tif err := m.finalize(mapSpec); err != nil {\n\t\t\treturn fmt.Errorf(\"populating map %s: %w\", mapName, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// resolveKconfig resolves all variables declared in .kconfig and populates\n// m.Contents. Does nothing if the given m.Contents is non-empty.\nfunc resolveKconfig(m *MapSpec) error {\n\tds, ok := m.Value.(*btf.Datasec)\n\tif !ok {\n\t\treturn errors.New(\"map value is not a Datasec\")\n\t}\n\n\ttype configInfo struct {\n\t\toffset uint32\n\t\tsize   uint32\n\t\ttyp    btf.Type\n\t}\n\n\tconfigs := make(map[string]configInfo)\n\n\tdata := make([]byte, ds.Size)\n\tfor _, vsi := range ds.Vars {\n\t\tv := vsi.Type.(*btf.Var)\n\t\tn := v.TypeName()\n\n\t\tswitch n {\n\t\tcase \"LINUX_KERNEL_VERSION\":\n\t\t\tif integer, ok := v.Type.(*btf.Int); !ok || integer.Size != 4 {\n\t\t\t\treturn fmt.Errorf(\"variable %s must be a 32 bits integer, got %s\", n, v.Type)\n\t\t\t}\n\n\t\t\tkv, err := linux.KernelVersion()\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"getting kernel version: %w\", err)\n\t\t\t}\n\t\t\tinternal.NativeEndian.PutUint32(data[vsi.Offset:], kv.Kernel())\n\n\t\tcase \"LINUX_HAS_SYSCALL_WRAPPER\":\n\t\t\tinteger, ok := v.Type.(*btf.Int)\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"variable %s must be an integer, got %s\", n, v.Type)\n\t\t\t}\n\t\t\tvar value uint64 = 1\n\t\t\tif err := haveSyscallWrapper(); errors.Is(err, ErrNotSupported) {\n\t\t\t\tvalue = 0\n\t\t\t} else if err != nil {\n\t\t\t\treturn fmt.Errorf(\"unable to derive a value for LINUX_HAS_SYSCALL_WRAPPER: %w\", err)\n\t\t\t}\n\n\t\t\tif err := kconfig.PutInteger(data[vsi.Offset:], integer, value); err != nil {\n\t\t\t\treturn fmt.Errorf(\"set LINUX_HAS_SYSCALL_WRAPPER: %w\", err)\n\t\t\t}\n\n\t\tdefault: // Catch CONFIG_*.\n\t\t\tconfigs[n] = configInfo{\n\t\t\t\toffset: vsi.Offset,\n\t\t\t\tsize:   vsi.Size,\n\t\t\t\ttyp:    v.Type,\n\t\t\t}\n\t\t}\n\t}\n\n\t// We only parse kconfig file if a CONFIG_* variable was found.\n\tif len(configs) > 0 {\n\t\tf, err := linux.FindKConfig()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"cannot find a kconfig file: %w\", err)\n\t\t}\n\t\tdefer f.Close()\n\n\t\tfilter := make(map[string]struct{}, len(configs))\n\t\tfor config := range configs {\n\t\t\tfilter[config] = struct{}{}\n\t\t}\n\n\t\tkernelConfig, err := kconfig.Parse(f, filter)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"cannot parse kconfig file: %w\", err)\n\t\t}\n\n\t\tfor n, info := range configs {\n\t\t\tvalue, ok := kernelConfig[n]\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"config option %q does not exist on this kernel\", n)\n\t\t\t}\n\n\t\t\terr := kconfig.PutValue(data[info.offset:info.offset+info.size], info.typ, value)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"problem adding value for %s: %w\", n, err)\n\t\t\t}\n\t\t}\n\t}\n\n\tm.Contents = []MapKV{{uint32(0), data}}\n\n\treturn nil\n}\n\n// LoadCollection reads an object file and creates and loads its declared\n// resources into the kernel.\n//\n// Omitting Collection.Close() during application shutdown is an error.\n// See the package documentation for details around Map and Program lifecycle.\nfunc LoadCollection(file string) (*Collection, error) {\n\tspec, err := LoadCollectionSpec(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewCollection(spec)\n}\n\n// Assign the contents of a Collection to a struct.\n//\n// This function bridges functionality between bpf2go generated\n// code and any functionality better implemented in Collection.\n//\n// 'to' must be a pointer to a struct. A field of the\n// struct is updated with values from Programs or Maps if it\n// has an `ebpf` tag and its type is *Program or *Map.\n// The tag's value specifies the name of the program or map as\n// found in the CollectionSpec.\n//\n//\tstruct {\n//\t    Foo     *ebpf.Program `ebpf:\"xdp_foo\"`\n//\t    Bar     *ebpf.Map     `ebpf:\"bar_map\"`\n//\t    Ignored int\n//\t}\n//\n// Returns an error if any of the eBPF objects can't be found, or\n// if the same Map or Program is assigned multiple times.\n//\n// Ownership and Close()ing responsibility is transferred to `to`\n// for any successful assigns. On error `to` is left in an undefined state.\nfunc (coll *Collection) Assign(to interface{}) error {\n\tassignedMaps := make(map[string]bool)\n\tassignedProgs := make(map[string]bool)\n\tassignedVars := make(map[string]bool)\n\n\t// Assign() only transfers already-loaded Maps and Programs. No extra\n\t// loading is done.\n\tgetValue := func(typ reflect.Type, name string) (interface{}, error) {\n\t\tswitch typ {\n\n\t\tcase reflect.TypeOf((*Program)(nil)):\n\t\t\tif p := coll.Programs[name]; p != nil {\n\t\t\t\tassignedProgs[name] = true\n\t\t\t\treturn p, nil\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"missing program %q\", name)\n\n\t\tcase reflect.TypeOf((*Map)(nil)):\n\t\t\tif m := coll.Maps[name]; m != nil {\n\t\t\t\tassignedMaps[name] = true\n\t\t\t\treturn m, nil\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"missing map %q\", name)\n\n\t\tcase reflect.TypeOf((*Variable)(nil)):\n\t\t\tif v := coll.Variables[name]; v != nil {\n\t\t\t\tassignedVars[name] = true\n\t\t\t\treturn v, nil\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"missing variable %q\", name)\n\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unsupported type %s\", typ)\n\t\t}\n\t}\n\n\tif err := assignValues(to, getValue); err != nil {\n\t\treturn err\n\t}\n\n\t// Finalize ownership transfer\n\tfor p := range assignedProgs {\n\t\tdelete(coll.Programs, p)\n\t}\n\tfor m := range assignedMaps {\n\t\tdelete(coll.Maps, m)\n\t}\n\tfor s := range assignedVars {\n\t\tdelete(coll.Variables, s)\n\t}\n\n\treturn nil\n}\n\n// Close frees all maps and programs associated with the collection.\n//\n// The collection mustn't be used afterwards.\nfunc (coll *Collection) Close() {\n\tfor _, prog := range coll.Programs {\n\t\tprog.Close()\n\t}\n\tfor _, m := range coll.Maps {\n\t\tm.Close()\n\t}\n}\n\n// DetachMap removes the named map from the Collection.\n//\n// This means that a later call to Close() will not affect this map.\n//\n// Returns nil if no map of that name exists.\nfunc (coll *Collection) DetachMap(name string) *Map {\n\tm := coll.Maps[name]\n\tdelete(coll.Maps, name)\n\treturn m\n}\n\n// DetachProgram removes the named program from the Collection.\n//\n// This means that a later call to Close() will not affect this program.\n//\n// Returns nil if no program of that name exists.\nfunc (coll *Collection) DetachProgram(name string) *Program {\n\tp := coll.Programs[name]\n\tdelete(coll.Programs, name)\n\treturn p\n}\n\n// structField represents a struct field containing the ebpf struct tag.\ntype structField struct {\n\treflect.StructField\n\tvalue reflect.Value\n}\n\n// ebpfFields extracts field names tagged with 'ebpf' from a struct type.\n// Keep track of visited types to avoid infinite recursion.\nfunc ebpfFields(structVal reflect.Value, visited map[reflect.Type]bool) ([]structField, error) {\n\tif visited == nil {\n\t\tvisited = make(map[reflect.Type]bool)\n\t}\n\n\tstructType := structVal.Type()\n\tif structType.Kind() != reflect.Struct {\n\t\treturn nil, fmt.Errorf(\"%s is not a struct\", structType)\n\t}\n\n\tif visited[structType] {\n\t\treturn nil, fmt.Errorf(\"recursion on type %s\", structType)\n\t}\n\n\tfields := make([]structField, 0, structType.NumField())\n\tfor i := 0; i < structType.NumField(); i++ {\n\t\tfield := structField{structType.Field(i), structVal.Field(i)}\n\n\t\t// If the field is tagged, gather it and move on.\n\t\tname := field.Tag.Get(\"ebpf\")\n\t\tif name != \"\" {\n\t\t\tfields = append(fields, field)\n\t\t\tcontinue\n\t\t}\n\n\t\t// If the field does not have an ebpf tag, but is a struct or a pointer\n\t\t// to a struct, attempt to gather its fields as well.\n\t\tvar v reflect.Value\n\t\tswitch field.Type.Kind() {\n\t\tcase reflect.Ptr:\n\t\t\tif field.Type.Elem().Kind() != reflect.Struct {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif field.value.IsNil() {\n\t\t\t\treturn nil, fmt.Errorf(\"nil pointer to %s\", structType)\n\t\t\t}\n\n\t\t\t// Obtain the destination type of the pointer.\n\t\t\tv = field.value.Elem()\n\n\t\tcase reflect.Struct:\n\t\t\t// Reference the value's type directly.\n\t\t\tv = field.value\n\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\n\t\tinner, err := ebpfFields(v, visited)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"field %s: %w\", field.Name, err)\n\t\t}\n\n\t\tfields = append(fields, inner...)\n\t}\n\n\treturn fields, nil\n}\n\n// assignValues attempts to populate all fields of 'to' tagged with 'ebpf'.\n//\n// getValue is called for every tagged field of 'to' and must return the value\n// to be assigned to the field with the given typ and name.\nfunc assignValues(to interface{},\n\tgetValue func(typ reflect.Type, name string) (interface{}, error)) error {\n\n\ttoValue := reflect.ValueOf(to)\n\tif toValue.Type().Kind() != reflect.Ptr {\n\t\treturn fmt.Errorf(\"%T is not a pointer to struct\", to)\n\t}\n\n\tif toValue.IsNil() {\n\t\treturn fmt.Errorf(\"nil pointer to %T\", to)\n\t}\n\n\tfields, err := ebpfFields(toValue.Elem(), nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\ttype elem struct {\n\t\t// Either *Map or *Program\n\t\ttyp  reflect.Type\n\t\tname string\n\t}\n\n\tassigned := make(map[elem]string)\n\tfor _, field := range fields {\n\t\t// Get string value the field is tagged with.\n\t\ttag := field.Tag.Get(\"ebpf\")\n\t\tif strings.Contains(tag, \",\") {\n\t\t\treturn fmt.Errorf(\"field %s: ebpf tag contains a comma\", field.Name)\n\t\t}\n\n\t\t// Check if the eBPF object with the requested\n\t\t// type and tag was already assigned elsewhere.\n\t\te := elem{field.Type, tag}\n\t\tif af := assigned[e]; af != \"\" {\n\t\t\treturn fmt.Errorf(\"field %s: object %q was already assigned to %s\", field.Name, tag, af)\n\t\t}\n\n\t\t// Get the eBPF object referred to by the tag.\n\t\tvalue, err := getValue(field.Type, tag)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"field %s: %w\", field.Name, err)\n\t\t}\n\n\t\tif !field.value.CanSet() {\n\t\t\treturn fmt.Errorf(\"field %s: can't set value\", field.Name)\n\t\t}\n\t\tfield.value.Set(reflect.ValueOf(value))\n\n\t\tassigned[e] = field.Name\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/cpu.go",
    "content": "package ebpf\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n)\n\nvar possibleCPU = sync.OnceValues(func() (int, error) {\n\treturn parseCPUsFromFile(\"/sys/devices/system/cpu/possible\")\n})\n\n// PossibleCPU returns the max number of CPUs a system may possibly have\n// Logical CPU numbers must be of the form 0-n\nfunc PossibleCPU() (int, error) {\n\treturn possibleCPU()\n}\n\n// MustPossibleCPU is a helper that wraps a call to PossibleCPU and panics if\n// the error is non-nil.\nfunc MustPossibleCPU() int {\n\tcpus, err := PossibleCPU()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn cpus\n}\n\nfunc parseCPUsFromFile(path string) (int, error) {\n\tspec, err := os.ReadFile(path)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tn, err := parseCPUs(string(spec))\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"can't parse %s: %v\", path, err)\n\t}\n\n\treturn n, nil\n}\n\n// parseCPUs parses the number of cpus from a string produced\n// by bitmap_list_string() in the Linux kernel.\n// Multiple ranges are rejected, since they can't be unified\n// into a single number.\n// This is the format of /sys/devices/system/cpu/possible, it\n// is not suitable for /sys/devices/system/cpu/online, etc.\nfunc parseCPUs(spec string) (int, error) {\n\tif strings.Trim(spec, \"\\n\") == \"0\" {\n\t\treturn 1, nil\n\t}\n\n\tvar low, high int\n\tn, err := fmt.Sscanf(spec, \"%d-%d\\n\", &low, &high)\n\tif n != 2 || err != nil {\n\t\treturn 0, fmt.Errorf(\"invalid format: %s\", spec)\n\t}\n\tif low != 0 {\n\t\treturn 0, fmt.Errorf(\"CPU spec doesn't start at zero: %s\", spec)\n\t}\n\n\t// cpus is 0 indexed\n\treturn high + 1, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/doc.go",
    "content": "// Package ebpf is a toolkit for working with eBPF programs.\n//\n// eBPF programs are small snippets of code which are executed directly\n// in a VM in the Linux kernel, which makes them very fast and flexible.\n// Many Linux subsystems now accept eBPF programs. This makes it possible\n// to implement highly application specific logic inside the kernel,\n// without having to modify the actual kernel itself.\n//\n// This package is designed for long-running processes which\n// want to use eBPF to implement part of their application logic. It has no\n// run-time dependencies outside of the library and the Linux kernel itself.\n// eBPF code should be compiled ahead of time using clang, and shipped with\n// your application as any other resource.\n//\n// Use the link subpackage to attach a loaded program to a hook in the kernel.\n//\n// Note that losing all references to Map and Program resources will cause\n// their underlying file descriptors to be closed, potentially removing those\n// objects from the kernel. Always retain a reference by e.g. deferring a\n// Close() of a Collection or LoadAndAssign object until application exit.\n//\n// Special care needs to be taken when handling maps of type ProgramArray,\n// as the kernel erases its contents when the last userspace or bpffs\n// reference disappears, regardless of the map being in active use.\npackage ebpf\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/elf_reader.go",
    "content": "package ebpf\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\ntype kconfigMetaKey struct{}\n\ntype kconfigMeta struct {\n\tMap    *MapSpec\n\tOffset uint32\n}\n\ntype kfuncMetaKey struct{}\n\ntype kfuncMeta struct {\n\tBinding elf.SymBind\n\tFunc    *btf.Func\n}\n\ntype ksymMetaKey struct{}\n\ntype ksymMeta struct {\n\tBinding elf.SymBind\n\tName    string\n}\n\n// elfCode is a convenience to reduce the amount of arguments that have to\n// be passed around explicitly. You should treat its contents as immutable.\ntype elfCode struct {\n\t*internal.SafeELFFile\n\tsections map[elf.SectionIndex]*elfSection\n\tlicense  string\n\tversion  uint32\n\tbtf      *btf.Spec\n\textInfo  *btf.ExtInfos\n\tmaps     map[string]*MapSpec\n\tvars     map[string]*VariableSpec\n\tkfuncs   map[string]*btf.Func\n\tksyms    map[string]struct{}\n\tkconfig  *MapSpec\n}\n\n// LoadCollectionSpec parses an ELF file into a CollectionSpec.\nfunc LoadCollectionSpec(file string) (*CollectionSpec, error) {\n\tf, err := os.Open(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tspec, err := LoadCollectionSpecFromReader(f)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"file %s: %w\", file, err)\n\t}\n\treturn spec, nil\n}\n\n// LoadCollectionSpecFromReader parses an ELF file into a CollectionSpec.\nfunc LoadCollectionSpecFromReader(rd io.ReaderAt) (*CollectionSpec, error) {\n\tf, err := internal.NewSafeELFFile(rd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Checks if the ELF file is for BPF data.\n\t// Old LLVM versions set e_machine to EM_NONE.\n\tif f.File.Machine != elf.EM_NONE && f.File.Machine != elf.EM_BPF {\n\t\treturn nil, fmt.Errorf(\"unexpected machine type for BPF ELF: %s\", f.File.Machine)\n\t}\n\n\tvar (\n\t\tlicenseSection *elf.Section\n\t\tversionSection *elf.Section\n\t\tsections       = make(map[elf.SectionIndex]*elfSection)\n\t\trelSections    = make(map[elf.SectionIndex]*elf.Section)\n\t)\n\n\t// This is the target of relocations generated by inline assembly.\n\tsections[elf.SHN_UNDEF] = newElfSection(new(elf.Section), undefSection)\n\n\t// Collect all the sections we're interested in. This includes relocations\n\t// which we parse later.\n\t//\n\t// Keep the documentation at docs/ebpf/loading/elf-sections.md up-to-date.\n\tfor i, sec := range f.Sections {\n\t\tidx := elf.SectionIndex(i)\n\n\t\tswitch {\n\t\tcase strings.HasPrefix(sec.Name, \"license\"):\n\t\t\tlicenseSection = sec\n\t\tcase strings.HasPrefix(sec.Name, \"version\"):\n\t\t\tversionSection = sec\n\t\tcase strings.HasPrefix(sec.Name, \"maps\"):\n\t\t\tsections[idx] = newElfSection(sec, mapSection)\n\t\tcase sec.Name == \".maps\":\n\t\t\tsections[idx] = newElfSection(sec, btfMapSection)\n\t\tcase isDataSection(sec.Name):\n\t\t\tsections[idx] = newElfSection(sec, dataSection)\n\t\tcase sec.Type == elf.SHT_REL:\n\t\t\t// Store relocations under the section index of the target\n\t\t\trelSections[elf.SectionIndex(sec.Info)] = sec\n\t\tcase sec.Type == elf.SHT_PROGBITS && (sec.Flags&elf.SHF_EXECINSTR) != 0 && sec.Size > 0:\n\t\t\tsections[idx] = newElfSection(sec, programSection)\n\t\t}\n\t}\n\n\tlicense, err := loadLicense(licenseSection)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"load license: %w\", err)\n\t}\n\n\tversion, err := loadVersion(versionSection, f.ByteOrder)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"load version: %w\", err)\n\t}\n\n\tbtfSpec, btfExtInfo, err := btf.LoadSpecAndExtInfosFromReader(rd)\n\tif err != nil && !errors.Is(err, btf.ErrNotFound) {\n\t\treturn nil, fmt.Errorf(\"load BTF: %w\", err)\n\t}\n\n\tec := &elfCode{\n\t\tSafeELFFile: f,\n\t\tsections:    sections,\n\t\tlicense:     license,\n\t\tversion:     version,\n\t\tbtf:         btfSpec,\n\t\textInfo:     btfExtInfo,\n\t\tmaps:        make(map[string]*MapSpec),\n\t\tvars:        make(map[string]*VariableSpec),\n\t\tkfuncs:      make(map[string]*btf.Func),\n\t\tksyms:       make(map[string]struct{}),\n\t}\n\n\tsymbols, err := f.Symbols()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"load symbols: %v\", err)\n\t}\n\n\tec.assignSymbols(symbols)\n\n\tif err := ec.loadRelocations(relSections, symbols); err != nil {\n\t\treturn nil, fmt.Errorf(\"load relocations: %w\", err)\n\t}\n\n\tif err := ec.loadMaps(); err != nil {\n\t\treturn nil, fmt.Errorf(\"load maps: %w\", err)\n\t}\n\n\tif err := ec.loadBTFMaps(); err != nil {\n\t\treturn nil, fmt.Errorf(\"load BTF maps: %w\", err)\n\t}\n\n\tif err := ec.loadDataSections(); err != nil {\n\t\treturn nil, fmt.Errorf(\"load data sections: %w\", err)\n\t}\n\n\tif err := ec.loadKconfigSection(); err != nil {\n\t\treturn nil, fmt.Errorf(\"load virtual .kconfig section: %w\", err)\n\t}\n\n\tif err := ec.loadKsymsSection(); err != nil {\n\t\treturn nil, fmt.Errorf(\"load virtual .ksyms section: %w\", err)\n\t}\n\n\t// Finally, collect programs and link them.\n\tprogs, err := ec.loadProgramSections()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"load programs: %w\", err)\n\t}\n\n\treturn &CollectionSpec{ec.maps, progs, ec.vars, btfSpec, ec.ByteOrder}, nil\n}\n\nfunc loadLicense(sec *elf.Section) (string, error) {\n\tif sec == nil {\n\t\treturn \"\", nil\n\t}\n\n\tdata, err := sec.Data()\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"section %s: %v\", sec.Name, err)\n\t}\n\treturn string(bytes.TrimRight(data, \"\\000\")), nil\n}\n\nfunc loadVersion(sec *elf.Section, bo binary.ByteOrder) (uint32, error) {\n\tif sec == nil {\n\t\treturn 0, nil\n\t}\n\n\tvar version uint32\n\tif err := binary.Read(sec.Open(), bo, &version); err != nil {\n\t\treturn 0, fmt.Errorf(\"section %s: %v\", sec.Name, err)\n\t}\n\treturn version, nil\n}\n\nfunc isDataSection(name string) bool {\n\treturn name == \".bss\" || strings.HasPrefix(name, \".data\") || strings.HasPrefix(name, \".rodata\")\n}\n\nfunc isConstantDataSection(name string) bool {\n\treturn strings.HasPrefix(name, \".rodata\")\n}\n\nfunc isKconfigSection(name string) bool {\n\treturn name == \".kconfig\"\n}\n\ntype elfSectionKind int\n\nconst (\n\tundefSection elfSectionKind = iota\n\tmapSection\n\tbtfMapSection\n\tprogramSection\n\tdataSection\n)\n\ntype elfSection struct {\n\t*elf.Section\n\tkind elfSectionKind\n\t// Offset from the start of the section to a symbol\n\tsymbols map[uint64]elf.Symbol\n\t// Offset from the start of the section to a relocation, which points at\n\t// a symbol in another section.\n\trelocations map[uint64]elf.Symbol\n\t// The number of relocations pointing at this section.\n\treferences int\n}\n\nfunc newElfSection(section *elf.Section, kind elfSectionKind) *elfSection {\n\treturn &elfSection{\n\t\tsection,\n\t\tkind,\n\t\tmake(map[uint64]elf.Symbol),\n\t\tmake(map[uint64]elf.Symbol),\n\t\t0,\n\t}\n}\n\n// assignSymbols takes a list of symbols and assigns them to their\n// respective sections, indexed by name.\nfunc (ec *elfCode) assignSymbols(symbols []elf.Symbol) {\n\tfor _, symbol := range symbols {\n\t\tsymType := elf.ST_TYPE(symbol.Info)\n\t\tsymSection := ec.sections[symbol.Section]\n\t\tif symSection == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Anonymous symbols only occur in debug sections which we don't process\n\t\t// relocations for. Anonymous symbols are not referenced from other sections.\n\t\tif symbol.Name == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Older versions of LLVM don't tag symbols correctly, so keep\n\t\t// all NOTYPE ones.\n\t\tswitch symSection.kind {\n\t\tcase mapSection, btfMapSection, dataSection:\n\t\t\tif symType != elf.STT_NOTYPE && symType != elf.STT_OBJECT {\n\t\t\t\tcontinue\n\t\t\t}\n\t\tcase programSection:\n\t\t\tif symType != elf.STT_NOTYPE && symType != elf.STT_FUNC {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// LLVM emits LBB_ (Local Basic Block) symbols that seem to be jump\n\t\t\t// targets within sections, but BPF has no use for them.\n\t\t\tif symType == elf.STT_NOTYPE && elf.ST_BIND(symbol.Info) == elf.STB_LOCAL &&\n\t\t\t\tstrings.HasPrefix(symbol.Name, \"LBB\") {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t// Only collect symbols that occur in program/maps/data sections.\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\n\t\tsymSection.symbols[symbol.Value] = symbol\n\t}\n}\n\n// loadRelocations iterates .rel* sections and extracts relocation entries for\n// sections of interest. Makes sure relocations point at valid sections.\nfunc (ec *elfCode) loadRelocations(relSections map[elf.SectionIndex]*elf.Section, symbols []elf.Symbol) error {\n\tfor idx, relSection := range relSections {\n\t\tsection := ec.sections[idx]\n\t\tif section == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\trels, err := ec.loadSectionRelocations(relSection, symbols)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"relocation for section %q: %w\", section.Name, err)\n\t\t}\n\n\t\tfor _, rel := range rels {\n\t\t\ttarget := ec.sections[rel.Section]\n\t\t\tif target == nil {\n\t\t\t\treturn fmt.Errorf(\"section %q: reference to %q in section %s: %w\", section.Name, rel.Name, rel.Section, ErrNotSupported)\n\t\t\t}\n\n\t\t\ttarget.references++\n\t\t}\n\n\t\tsection.relocations = rels\n\t}\n\n\treturn nil\n}\n\n// loadProgramSections iterates ec's sections and emits a ProgramSpec\n// for each function it finds.\n//\n// The resulting map is indexed by function name.\nfunc (ec *elfCode) loadProgramSections() (map[string]*ProgramSpec, error) {\n\n\tprogs := make(map[string]*ProgramSpec)\n\n\t// Generate a ProgramSpec for each function found in each program section.\n\tvar export []string\n\tfor _, sec := range ec.sections {\n\t\tif sec.kind != programSection {\n\t\t\tcontinue\n\t\t}\n\n\t\tif len(sec.symbols) == 0 {\n\t\t\treturn nil, fmt.Errorf(\"section %v: missing symbols\", sec.Name)\n\t\t}\n\n\t\tfuncs, err := ec.loadFunctions(sec)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"section %v: %w\", sec.Name, err)\n\t\t}\n\n\t\tprogType, attachType, progFlags, attachTo := getProgType(sec.Name)\n\n\t\tfor name, insns := range funcs {\n\t\t\tspec := &ProgramSpec{\n\t\t\t\tName:          name,\n\t\t\t\tType:          progType,\n\t\t\t\tFlags:         progFlags,\n\t\t\t\tAttachType:    attachType,\n\t\t\t\tAttachTo:      attachTo,\n\t\t\t\tSectionName:   sec.Name,\n\t\t\t\tLicense:       ec.license,\n\t\t\t\tKernelVersion: ec.version,\n\t\t\t\tInstructions:  insns,\n\t\t\t\tByteOrder:     ec.ByteOrder,\n\t\t\t}\n\n\t\t\t// Function names must be unique within a single ELF blob.\n\t\t\tif progs[name] != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"duplicate program name %s\", name)\n\t\t\t}\n\t\t\tprogs[name] = spec\n\n\t\t\tif spec.SectionName != \".text\" {\n\t\t\t\texport = append(export, name)\n\t\t\t}\n\t\t}\n\t}\n\n\tflattenPrograms(progs, export)\n\n\t// Hide programs (e.g. library functions) that were not explicitly emitted\n\t// to an ELF section. These could be exposed in a separate CollectionSpec\n\t// field later to allow them to be modified.\n\tfor n, p := range progs {\n\t\tif p.SectionName == \".text\" {\n\t\t\tdelete(progs, n)\n\t\t}\n\t}\n\n\treturn progs, nil\n}\n\n// loadFunctions extracts instruction streams from the given program section\n// starting at each symbol in the section. The section's symbols must already\n// be narrowed down to STT_NOTYPE (emitted by clang <8) or STT_FUNC.\n//\n// The resulting map is indexed by function name.\nfunc (ec *elfCode) loadFunctions(section *elfSection) (map[string]asm.Instructions, error) {\n\tr := bufio.NewReader(section.Open())\n\n\t// Decode the section's instruction stream.\n\tinsns := make(asm.Instructions, 0, section.Size/asm.InstructionSize)\n\tif err := insns.Unmarshal(r, ec.ByteOrder); err != nil {\n\t\treturn nil, fmt.Errorf(\"decoding instructions for section %s: %w\", section.Name, err)\n\t}\n\tif len(insns) == 0 {\n\t\treturn nil, fmt.Errorf(\"no instructions found in section %s\", section.Name)\n\t}\n\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tins := iter.Ins\n\t\toffset := iter.Offset.Bytes()\n\n\t\t// Tag Symbol Instructions.\n\t\tif sym, ok := section.symbols[offset]; ok {\n\t\t\t*ins = ins.WithSymbol(sym.Name)\n\t\t}\n\n\t\t// Apply any relocations for the current instruction.\n\t\t// If no relocation is present, resolve any section-relative function calls.\n\t\tif rel, ok := section.relocations[offset]; ok {\n\t\t\tif err := ec.relocateInstruction(ins, rel); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"offset %d: relocating instruction: %w\", offset, err)\n\t\t\t}\n\t\t} else {\n\t\t\tif err := referenceRelativeJump(ins, offset, section.symbols); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"offset %d: resolving relative jump: %w\", offset, err)\n\t\t\t}\n\t\t}\n\t}\n\n\tif ec.extInfo != nil {\n\t\tec.extInfo.Assign(insns, section.Name)\n\t}\n\n\treturn splitSymbols(insns)\n}\n\n// referenceRelativeJump turns a relative jump to another bpf subprogram within\n// the same ELF section into a Reference Instruction.\n//\n// Up to LLVM 9, calls to subprograms within the same ELF section are sometimes\n// encoded using relative jumps instead of relocation entries. These jumps go\n// out of bounds of the current program, so their targets must be memoized\n// before the section's instruction stream is split.\n//\n// The relative jump Constant is blinded to -1 and the target Symbol is set as\n// the Instruction's Reference so it can be resolved by the linker.\nfunc referenceRelativeJump(ins *asm.Instruction, offset uint64, symbols map[uint64]elf.Symbol) error {\n\tif !ins.IsFunctionReference() || ins.Constant == -1 {\n\t\treturn nil\n\t}\n\n\ttgt := jumpTarget(offset, *ins)\n\tsym := symbols[tgt].Name\n\tif sym == \"\" {\n\t\treturn fmt.Errorf(\"no jump target found at offset %d\", tgt)\n\t}\n\n\t*ins = ins.WithReference(sym)\n\tins.Constant = -1\n\n\treturn nil\n}\n\n// jumpTarget takes ins' offset within an instruction stream (in bytes)\n// and returns its absolute jump destination (in bytes) within the\n// instruction stream.\nfunc jumpTarget(offset uint64, ins asm.Instruction) uint64 {\n\t// A relative jump instruction describes the amount of raw BPF instructions\n\t// to jump, convert the offset into bytes.\n\tdest := ins.Constant * asm.InstructionSize\n\n\t// The starting point of the jump is the end of the current instruction.\n\tdest += int64(offset + asm.InstructionSize)\n\n\tif dest < 0 {\n\t\treturn 0\n\t}\n\n\treturn uint64(dest)\n}\n\nvar errUnsupportedBinding = errors.New(\"unsupported binding\")\n\nfunc (ec *elfCode) relocateInstruction(ins *asm.Instruction, rel elf.Symbol) error {\n\tvar (\n\t\ttyp  = elf.ST_TYPE(rel.Info)\n\t\tbind = elf.ST_BIND(rel.Info)\n\t\tname = rel.Name\n\t)\n\n\ttarget := ec.sections[rel.Section]\n\n\tswitch target.kind {\n\tcase mapSection, btfMapSection:\n\t\tif bind == elf.STB_LOCAL {\n\t\t\treturn fmt.Errorf(\"possible erroneous static qualifier on map definition: found reference to %q\", name)\n\t\t}\n\n\t\tif bind != elf.STB_GLOBAL {\n\t\t\treturn fmt.Errorf(\"map %q: %w: %s\", name, errUnsupportedBinding, bind)\n\t\t}\n\n\t\tif typ != elf.STT_OBJECT && typ != elf.STT_NOTYPE {\n\t\t\t// STT_NOTYPE is generated on clang < 8 which doesn't tag\n\t\t\t// relocations appropriately.\n\t\t\treturn fmt.Errorf(\"map load: incorrect relocation type %v\", typ)\n\t\t}\n\n\t\tins.Src = asm.PseudoMapFD\n\n\tcase dataSection:\n\t\tvar offset uint32\n\t\tswitch typ {\n\t\tcase elf.STT_SECTION:\n\t\t\tif bind != elf.STB_LOCAL {\n\t\t\t\treturn fmt.Errorf(\"direct load: %s: %w: %s\", name, errUnsupportedBinding, bind)\n\t\t\t}\n\n\t\t\t// This is really a reference to a static symbol, which clang doesn't\n\t\t\t// emit a symbol table entry for. Instead it encodes the offset in\n\t\t\t// the instruction itself.\n\t\t\toffset = uint32(uint64(ins.Constant))\n\n\t\tcase elf.STT_OBJECT:\n\t\t\t// LLVM 9 emits OBJECT-LOCAL symbols for anonymous constants.\n\t\t\tif bind != elf.STB_GLOBAL && bind != elf.STB_LOCAL && bind != elf.STB_WEAK {\n\t\t\t\treturn fmt.Errorf(\"direct load: %s: %w: %s\", name, errUnsupportedBinding, bind)\n\t\t\t}\n\n\t\t\toffset = uint32(rel.Value)\n\n\t\tcase elf.STT_NOTYPE:\n\t\t\t// LLVM 7 emits NOTYPE-LOCAL symbols for anonymous constants.\n\t\t\tif bind != elf.STB_LOCAL {\n\t\t\t\treturn fmt.Errorf(\"direct load: %s: %w: %s\", name, errUnsupportedBinding, bind)\n\t\t\t}\n\n\t\t\toffset = uint32(rel.Value)\n\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"incorrect relocation type %v for direct map load\", typ)\n\t\t}\n\n\t\t// We rely on using the name of the data section as the reference. It\n\t\t// would be nicer to keep the real name in case of an STT_OBJECT, but\n\t\t// it's not clear how to encode that into Instruction.\n\t\tname = target.Name\n\n\t\t// The kernel expects the offset in the second basic BPF instruction.\n\t\tins.Constant = int64(uint64(offset) << 32)\n\t\tins.Src = asm.PseudoMapValue\n\n\tcase programSection:\n\t\tswitch opCode := ins.OpCode; {\n\t\tcase opCode.JumpOp() == asm.Call:\n\t\t\tif ins.Src != asm.PseudoCall {\n\t\t\t\treturn fmt.Errorf(\"call: %s: incorrect source register\", name)\n\t\t\t}\n\n\t\t\tswitch typ {\n\t\t\tcase elf.STT_NOTYPE, elf.STT_FUNC:\n\t\t\t\tif bind != elf.STB_GLOBAL {\n\t\t\t\t\treturn fmt.Errorf(\"call: %s: %w: %s\", name, errUnsupportedBinding, bind)\n\t\t\t\t}\n\n\t\t\tcase elf.STT_SECTION:\n\t\t\t\tif bind != elf.STB_LOCAL {\n\t\t\t\t\treturn fmt.Errorf(\"call: %s: %w: %s\", name, errUnsupportedBinding, bind)\n\t\t\t\t}\n\n\t\t\t\t// The function we want to call is in the indicated section,\n\t\t\t\t// at the offset encoded in the instruction itself. Reverse\n\t\t\t\t// the calculation to find the real function we're looking for.\n\t\t\t\t// A value of -1 references the first instruction in the section.\n\t\t\t\toffset := int64(int32(ins.Constant)+1) * asm.InstructionSize\n\t\t\t\tsym, ok := target.symbols[uint64(offset)]\n\t\t\t\tif !ok {\n\t\t\t\t\treturn fmt.Errorf(\"call: no symbol at offset %d\", offset)\n\t\t\t\t}\n\n\t\t\t\tname = sym.Name\n\t\t\t\tins.Constant = -1\n\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"call: %s: invalid symbol type %s\", name, typ)\n\t\t\t}\n\t\tcase opCode.IsDWordLoad():\n\t\t\tswitch typ {\n\t\t\tcase elf.STT_FUNC:\n\t\t\t\tif bind != elf.STB_GLOBAL {\n\t\t\t\t\treturn fmt.Errorf(\"load: %s: %w: %s\", name, errUnsupportedBinding, bind)\n\t\t\t\t}\n\n\t\t\tcase elf.STT_SECTION:\n\t\t\t\tif bind != elf.STB_LOCAL {\n\t\t\t\t\treturn fmt.Errorf(\"load: %s: %w: %s\", name, errUnsupportedBinding, bind)\n\t\t\t\t}\n\n\t\t\t\t// ins.Constant already contains the offset in bytes from the\n\t\t\t\t// start of the section. This is different than a call to a\n\t\t\t\t// static function.\n\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"load: %s: invalid symbol type %s\", name, typ)\n\t\t\t}\n\n\t\t\tsym, ok := target.symbols[uint64(ins.Constant)]\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"load: no symbol at offset %d\", ins.Constant)\n\t\t\t}\n\n\t\t\tname = sym.Name\n\t\t\tins.Constant = -1\n\t\t\tins.Src = asm.PseudoFunc\n\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"neither a call nor a load instruction: %v\", ins)\n\t\t}\n\n\t// The Undefined section is used for 'virtual' symbols that aren't backed by\n\t// an ELF section. This includes symbol references from inline asm, forward\n\t// function declarations, as well as extern kfunc declarations using __ksym\n\t// and extern kconfig variables declared using __kconfig.\n\tcase undefSection:\n\t\tif bind != elf.STB_GLOBAL && bind != elf.STB_WEAK {\n\t\t\treturn fmt.Errorf(\"asm relocation: %s: %w: %s\", name, errUnsupportedBinding, bind)\n\t\t}\n\n\t\tif typ != elf.STT_NOTYPE {\n\t\t\treturn fmt.Errorf(\"asm relocation: %s: unsupported type %s\", name, typ)\n\t\t}\n\n\t\tkf := ec.kfuncs[name]\n\t\t_, ks := ec.ksyms[name]\n\n\t\tswitch {\n\t\t// If a Call / DWordLoad instruction is found and the datasec has a btf.Func with a Name\n\t\t// that matches the symbol name we mark the instruction as a referencing a kfunc.\n\t\tcase kf != nil && ins.OpCode.JumpOp() == asm.Call:\n\t\t\tins.Metadata.Set(kfuncMetaKey{}, &kfuncMeta{\n\t\t\t\tFunc:    kf,\n\t\t\t\tBinding: bind,\n\t\t\t})\n\n\t\t\tins.Src = asm.PseudoKfuncCall\n\t\t\tins.Constant = -1\n\n\t\tcase kf != nil && ins.OpCode.IsDWordLoad():\n\t\t\tins.Metadata.Set(kfuncMetaKey{}, &kfuncMeta{\n\t\t\t\tFunc:    kf,\n\t\t\t\tBinding: bind,\n\t\t\t})\n\n\t\t\tins.Constant = 0\n\n\t\tcase ks && ins.OpCode.IsDWordLoad():\n\t\t\tif bind != elf.STB_GLOBAL && bind != elf.STB_WEAK {\n\t\t\t\treturn fmt.Errorf(\"asm relocation: %s: %w: %s\", name, errUnsupportedBinding, bind)\n\t\t\t}\n\t\t\tins.Metadata.Set(ksymMetaKey{}, &ksymMeta{\n\t\t\t\tBinding: bind,\n\t\t\t\tName:    name,\n\t\t\t})\n\n\t\t// If no kconfig map is found, this must be a symbol reference from inline\n\t\t// asm (see testdata/loader.c:asm_relocation()) or a call to a forward\n\t\t// function declaration (see testdata/fwd_decl.c). Don't interfere, These\n\t\t// remain standard symbol references.\n\t\t// extern __kconfig reads are represented as dword loads that need to be\n\t\t// rewritten to pseudo map loads from .kconfig. If the map is present,\n\t\t// require it to contain the symbol to disambiguate between inline asm\n\t\t// relos and kconfigs.\n\t\tcase ec.kconfig != nil && ins.OpCode.IsDWordLoad():\n\t\t\tif bind != elf.STB_GLOBAL {\n\t\t\t\treturn fmt.Errorf(\"asm relocation: %s: %w: %s\", name, errUnsupportedBinding, bind)\n\t\t\t}\n\n\t\t\tfor _, vsi := range ec.kconfig.Value.(*btf.Datasec).Vars {\n\t\t\t\tif vsi.Type.(*btf.Var).Name != rel.Name {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tins.Src = asm.PseudoMapValue\n\t\t\t\tins.Metadata.Set(kconfigMetaKey{}, &kconfigMeta{ec.kconfig, vsi.Offset})\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\treturn fmt.Errorf(\"kconfig %s not found in .kconfig\", rel.Name)\n\t\t}\n\n\tdefault:\n\t\treturn fmt.Errorf(\"relocation to %q: %w\", target.Name, ErrNotSupported)\n\t}\n\n\t*ins = ins.WithReference(name)\n\treturn nil\n}\n\nfunc (ec *elfCode) loadMaps() error {\n\tfor _, sec := range ec.sections {\n\t\tif sec.kind != mapSection {\n\t\t\tcontinue\n\t\t}\n\n\t\tnSym := len(sec.symbols)\n\t\tif nSym == 0 {\n\t\t\treturn fmt.Errorf(\"section %v: no symbols\", sec.Name)\n\t\t}\n\n\t\tif sec.Size%uint64(nSym) != 0 {\n\t\t\treturn fmt.Errorf(\"section %v: map descriptors are not of equal size\", sec.Name)\n\t\t}\n\n\t\tvar (\n\t\t\tr    = bufio.NewReader(sec.Open())\n\t\t\tsize = sec.Size / uint64(nSym)\n\t\t)\n\t\tfor i, offset := 0, uint64(0); i < nSym; i, offset = i+1, offset+size {\n\t\t\tmapSym, ok := sec.symbols[offset]\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"section %s: missing symbol for map at offset %d\", sec.Name, offset)\n\t\t\t}\n\n\t\t\tmapName := mapSym.Name\n\t\t\tif ec.maps[mapName] != nil {\n\t\t\t\treturn fmt.Errorf(\"section %v: map %v already exists\", sec.Name, mapSym)\n\t\t\t}\n\n\t\t\tlr := io.LimitReader(r, int64(size))\n\n\t\t\tspec := MapSpec{\n\t\t\t\tName: SanitizeName(mapName, -1),\n\t\t\t}\n\t\t\tswitch {\n\t\t\tcase binary.Read(lr, ec.ByteOrder, &spec.Type) != nil:\n\t\t\t\treturn fmt.Errorf(\"map %s: missing type\", mapName)\n\t\t\tcase binary.Read(lr, ec.ByteOrder, &spec.KeySize) != nil:\n\t\t\t\treturn fmt.Errorf(\"map %s: missing key size\", mapName)\n\t\t\tcase binary.Read(lr, ec.ByteOrder, &spec.ValueSize) != nil:\n\t\t\t\treturn fmt.Errorf(\"map %s: missing value size\", mapName)\n\t\t\tcase binary.Read(lr, ec.ByteOrder, &spec.MaxEntries) != nil:\n\t\t\t\treturn fmt.Errorf(\"map %s: missing max entries\", mapName)\n\t\t\tcase binary.Read(lr, ec.ByteOrder, &spec.Flags) != nil:\n\t\t\t\treturn fmt.Errorf(\"map %s: missing flags\", mapName)\n\t\t\t}\n\n\t\t\textra, err := io.ReadAll(lr)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"map %s: reading map tail: %w\", mapName, err)\n\t\t\t}\n\t\t\tif len(extra) > 0 {\n\t\t\t\tspec.Extra = bytes.NewReader(extra)\n\t\t\t}\n\n\t\t\tec.maps[mapName] = &spec\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// loadBTFMaps iterates over all ELF sections marked as BTF map sections\n// (like .maps) and parses them into MapSpecs. Dump the .maps section and\n// any relocations with `readelf -x .maps -r <elf_file>`.\nfunc (ec *elfCode) loadBTFMaps() error {\n\tfor _, sec := range ec.sections {\n\t\tif sec.kind != btfMapSection {\n\t\t\tcontinue\n\t\t}\n\n\t\tif ec.btf == nil {\n\t\t\treturn fmt.Errorf(\"missing BTF\")\n\t\t}\n\n\t\t// Each section must appear as a DataSec in the ELF's BTF blob.\n\t\tvar ds *btf.Datasec\n\t\tif err := ec.btf.TypeByName(sec.Name, &ds); err != nil {\n\t\t\treturn fmt.Errorf(\"cannot find section '%s' in BTF: %w\", sec.Name, err)\n\t\t}\n\n\t\t// Open a Reader to the ELF's raw section bytes so we can assert that all\n\t\t// of them are zero on a per-map (per-Var) basis. For now, the section's\n\t\t// sole purpose is to receive relocations, so all must be zero.\n\t\trs := sec.Open()\n\n\t\tfor _, vs := range ds.Vars {\n\t\t\t// BPF maps are declared as and assigned to global variables,\n\t\t\t// so iterate over each Var in the DataSec and validate their types.\n\t\t\tv, ok := vs.Type.(*btf.Var)\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"section %v: unexpected type %s\", sec.Name, vs.Type)\n\t\t\t}\n\t\t\tname := string(v.Name)\n\n\t\t\t// The BTF metadata for each Var contains the full length of the map\n\t\t\t// declaration, so read the corresponding amount of bytes from the ELF.\n\t\t\t// This way, we can pinpoint which map declaration contains unexpected\n\t\t\t// (and therefore unsupported) data.\n\t\t\t_, err := io.Copy(internal.DiscardZeroes{}, io.LimitReader(rs, int64(vs.Size)))\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"section %v: map %s: initializing BTF map definitions: %w\", sec.Name, name, internal.ErrNotSupported)\n\t\t\t}\n\n\t\t\tif ec.maps[name] != nil {\n\t\t\t\treturn fmt.Errorf(\"section %v: map %s already exists\", sec.Name, name)\n\t\t\t}\n\n\t\t\t// Each Var representing a BTF map definition contains a Struct.\n\t\t\tmapStruct, ok := btf.UnderlyingType(v.Type).(*btf.Struct)\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"expected struct, got %s\", v.Type)\n\t\t\t}\n\n\t\t\tmapSpec, err := mapSpecFromBTF(sec, &vs, mapStruct, ec.btf, name, false)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"map %v: %w\", name, err)\n\t\t\t}\n\n\t\t\tec.maps[name] = mapSpec\n\t\t}\n\n\t\t// Drain the ELF section reader to make sure all bytes are accounted for\n\t\t// with BTF metadata.\n\t\ti, err := io.Copy(io.Discard, rs)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"section %v: unexpected error reading remainder of ELF section: %w\", sec.Name, err)\n\t\t}\n\t\tif i > 0 {\n\t\t\treturn fmt.Errorf(\"section %v: %d unexpected remaining bytes in ELF section, invalid BTF?\", sec.Name, i)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// mapSpecFromBTF produces a MapSpec based on a btf.Struct def representing\n// a BTF map definition. The name and spec arguments will be copied to the\n// resulting MapSpec, and inner must be true on any recursive invocations.\nfunc mapSpecFromBTF(es *elfSection, vs *btf.VarSecinfo, def *btf.Struct, spec *btf.Spec, name string, inner bool) (*MapSpec, error) {\n\tvar (\n\t\tkey, value         btf.Type\n\t\tkeySize, valueSize uint32\n\t\tmapType            MapType\n\t\tflags, maxEntries  uint32\n\t\tpinType            PinType\n\t\tinnerMapSpec       *MapSpec\n\t\tcontents           []MapKV\n\t\terr                error\n\t)\n\n\tfor i, member := range def.Members {\n\t\tswitch member.Name {\n\t\tcase \"type\":\n\t\t\tmt, err := uintFromBTF(member.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get type: %w\", err)\n\t\t\t}\n\t\t\tmapType = MapType(mt)\n\n\t\tcase \"map_flags\":\n\t\t\tflags, err = uintFromBTF(member.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get BTF map flags: %w\", err)\n\t\t\t}\n\n\t\tcase \"max_entries\":\n\t\t\tmaxEntries, err = uintFromBTF(member.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get BTF map max entries: %w\", err)\n\t\t\t}\n\n\t\tcase \"key\":\n\t\t\tif keySize != 0 {\n\t\t\t\treturn nil, errors.New(\"both key and key_size given\")\n\t\t\t}\n\n\t\t\tpk, ok := member.Type.(*btf.Pointer)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"key type is not a pointer: %T\", member.Type)\n\t\t\t}\n\n\t\t\tkey = pk.Target\n\n\t\t\tsize, err := btf.Sizeof(pk.Target)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get size of BTF key: %w\", err)\n\t\t\t}\n\n\t\t\tkeySize = uint32(size)\n\n\t\tcase \"value\":\n\t\t\tif valueSize != 0 {\n\t\t\t\treturn nil, errors.New(\"both value and value_size given\")\n\t\t\t}\n\n\t\t\tvk, ok := member.Type.(*btf.Pointer)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"value type is not a pointer: %T\", member.Type)\n\t\t\t}\n\n\t\t\tvalue = vk.Target\n\n\t\t\tsize, err := btf.Sizeof(vk.Target)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get size of BTF value: %w\", err)\n\t\t\t}\n\n\t\t\tvalueSize = uint32(size)\n\n\t\tcase \"key_size\":\n\t\t\t// Key needs to be nil and keySize needs to be 0 for key_size to be\n\t\t\t// considered a valid member.\n\t\t\tif key != nil || keySize != 0 {\n\t\t\t\treturn nil, errors.New(\"both key and key_size given\")\n\t\t\t}\n\n\t\t\tkeySize, err = uintFromBTF(member.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get BTF key size: %w\", err)\n\t\t\t}\n\n\t\tcase \"value_size\":\n\t\t\t// Value needs to be nil and valueSize needs to be 0 for value_size to be\n\t\t\t// considered a valid member.\n\t\t\tif value != nil || valueSize != 0 {\n\t\t\t\treturn nil, errors.New(\"both value and value_size given\")\n\t\t\t}\n\n\t\t\tvalueSize, err = uintFromBTF(member.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get BTF value size: %w\", err)\n\t\t\t}\n\n\t\tcase \"pinning\":\n\t\t\tif inner {\n\t\t\t\treturn nil, errors.New(\"inner maps can't be pinned\")\n\t\t\t}\n\n\t\t\tpinning, err := uintFromBTF(member.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get pinning: %w\", err)\n\t\t\t}\n\n\t\t\tpinType = PinType(pinning)\n\n\t\tcase \"values\":\n\t\t\t// The 'values' field in BTF map definitions is used for declaring map\n\t\t\t// value types that are references to other BPF objects, like other maps\n\t\t\t// or programs. It is always expected to be an array of pointers.\n\t\t\tif i != len(def.Members)-1 {\n\t\t\t\treturn nil, errors.New(\"'values' must be the last member in a BTF map definition\")\n\t\t\t}\n\n\t\t\tif valueSize != 0 && valueSize != 4 {\n\t\t\t\treturn nil, errors.New(\"value_size must be 0 or 4\")\n\t\t\t}\n\t\t\tvalueSize = 4\n\n\t\t\tvalueType, err := resolveBTFArrayMacro(member.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't resolve type of member 'values': %w\", err)\n\t\t\t}\n\n\t\t\tswitch t := valueType.(type) {\n\t\t\tcase *btf.Struct:\n\t\t\t\t// The values member pointing to an array of structs means we're expecting\n\t\t\t\t// a map-in-map declaration.\n\t\t\t\tif mapType != ArrayOfMaps && mapType != HashOfMaps {\n\t\t\t\t\treturn nil, errors.New(\"outer map needs to be an array or a hash of maps\")\n\t\t\t\t}\n\t\t\t\tif inner {\n\t\t\t\t\treturn nil, fmt.Errorf(\"nested inner maps are not supported\")\n\t\t\t\t}\n\n\t\t\t\t// This inner map spec is used as a map template, but it needs to be\n\t\t\t\t// created as a traditional map before it can be used to do so.\n\t\t\t\t// libbpf names the inner map template '<outer_name>.inner', but we\n\t\t\t\t// opted for _inner to simplify validation logic. (dots only supported\n\t\t\t\t// on kernels 5.2 and up)\n\t\t\t\t// Pass the BTF spec from the parent object, since both parent and\n\t\t\t\t// child must be created from the same BTF blob (on kernels that support BTF).\n\t\t\t\tinnerMapSpec, err = mapSpecFromBTF(es, vs, t, spec, name+\"_inner\", true)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"can't parse BTF map definition of inner map: %w\", err)\n\t\t\t\t}\n\n\t\t\tcase *btf.FuncProto:\n\t\t\t\t// The values member contains an array of function pointers, meaning an\n\t\t\t\t// autopopulated PROG_ARRAY.\n\t\t\t\tif mapType != ProgramArray {\n\t\t\t\t\treturn nil, errors.New(\"map needs to be a program array\")\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\"unsupported value type %q in 'values' field\", t)\n\t\t\t}\n\n\t\t\tcontents, err = resolveBTFValuesContents(es, vs, member)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"resolving values contents: %w\", err)\n\t\t\t}\n\n\t\tcase \"map_extra\":\n\t\t\treturn nil, fmt.Errorf(\"BTF map definition: field %s: %w\", member.Name, ErrNotSupported)\n\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unrecognized field %s in BTF map definition\", member.Name)\n\t\t}\n\t}\n\n\t// Some maps don't support value sizes, but annotating their map definitions\n\t// with __type macros can still be useful, especially to let bpf2go generate\n\t// type definitions for them.\n\tif value != nil && !mapType.canHaveValueSize() {\n\t\tvalueSize = 0\n\t}\n\n\treturn &MapSpec{\n\t\tName:       SanitizeName(name, -1),\n\t\tType:       MapType(mapType),\n\t\tKeySize:    keySize,\n\t\tValueSize:  valueSize,\n\t\tMaxEntries: maxEntries,\n\t\tFlags:      flags,\n\t\tKey:        key,\n\t\tValue:      value,\n\t\tPinning:    pinType,\n\t\tInnerMap:   innerMapSpec,\n\t\tContents:   contents,\n\t}, nil\n}\n\n// uintFromBTF resolves the __uint macro, which is a pointer to a sized\n// array, e.g. for int (*foo)[10], this function will return 10.\nfunc uintFromBTF(typ btf.Type) (uint32, error) {\n\tptr, ok := typ.(*btf.Pointer)\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"not a pointer: %v\", typ)\n\t}\n\n\tarr, ok := ptr.Target.(*btf.Array)\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"not a pointer to array: %v\", typ)\n\t}\n\n\treturn arr.Nelems, nil\n}\n\n// resolveBTFArrayMacro resolves the __array macro, which declares an array\n// of pointers to a given type. This function returns the target Type of\n// the pointers in the array.\nfunc resolveBTFArrayMacro(typ btf.Type) (btf.Type, error) {\n\tarr, ok := typ.(*btf.Array)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"not an array: %v\", typ)\n\t}\n\n\tptr, ok := arr.Type.(*btf.Pointer)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"not an array of pointers: %v\", typ)\n\t}\n\n\treturn ptr.Target, nil\n}\n\n// resolveBTFValuesContents resolves relocations into ELF sections belonging\n// to btf.VarSecinfo's. This can be used on the 'values' member in BTF map\n// definitions to extract static declarations of map contents.\nfunc resolveBTFValuesContents(es *elfSection, vs *btf.VarSecinfo, member btf.Member) ([]MapKV, error) {\n\t// The elements of a .values pointer array are not encoded in BTF.\n\t// Instead, relocations are generated into each array index.\n\t// However, it's possible to leave certain array indices empty, so all\n\t// indices' offsets need to be checked for emitted relocations.\n\n\t// The offset of the 'values' member within the _struct_ (in bits)\n\t// is the starting point of the array. Convert to bytes. Add VarSecinfo\n\t// offset to get the absolute position in the ELF blob.\n\tstart := member.Offset.Bytes() + vs.Offset\n\t// 'values' is encoded in BTF as a zero (variable) length struct\n\t// member, and its contents run until the end of the VarSecinfo.\n\t// Add VarSecinfo offset to get the absolute position in the ELF blob.\n\tend := vs.Size + vs.Offset\n\t// The size of an address in this section. This determines the width of\n\t// an index in the array.\n\talign := uint32(es.SectionHeader.Addralign)\n\n\t// Check if variable-length section is aligned.\n\tif (end-start)%align != 0 {\n\t\treturn nil, errors.New(\"unaligned static values section\")\n\t}\n\telems := (end - start) / align\n\n\tif elems == 0 {\n\t\treturn nil, nil\n\t}\n\n\tcontents := make([]MapKV, 0, elems)\n\n\t// k is the array index, off is its corresponding ELF section offset.\n\tfor k, off := uint32(0), start; k < elems; k, off = k+1, off+align {\n\t\tr, ok := es.relocations[uint64(off)]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Relocation exists for the current offset in the ELF section.\n\t\t// Emit a value stub based on the type of relocation to be replaced by\n\t\t// a real fd later in the pipeline before populating the map.\n\t\t// Map keys are encoded in MapKV entries, so empty array indices are\n\t\t// skipped here.\n\t\tswitch t := elf.ST_TYPE(r.Info); t {\n\t\tcase elf.STT_FUNC:\n\t\t\tcontents = append(contents, MapKV{uint32(k), r.Name})\n\t\tcase elf.STT_OBJECT:\n\t\t\tcontents = append(contents, MapKV{uint32(k), r.Name})\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unknown relocation type %v for symbol %s\", t, r.Name)\n\t\t}\n\t}\n\n\treturn contents, nil\n}\n\nfunc (ec *elfCode) loadDataSections() error {\n\tfor _, sec := range ec.sections {\n\t\tif sec.kind != dataSection {\n\t\t\tcontinue\n\t\t}\n\n\t\t// If a section has no references, it will be freed as soon as the\n\t\t// Collection closes, so creating and populating it is wasteful. If it has\n\t\t// no symbols, it is likely an ephemeral section used during compilation\n\t\t// that wasn't sanitized by the bpf linker. (like .rodata.str1.1)\n\t\t//\n\t\t// No symbols means no VariableSpecs can be generated from it, making it\n\t\t// pointless to emit a data section for.\n\t\tif sec.references == 0 && len(sec.symbols) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tif sec.Size > math.MaxUint32 {\n\t\t\treturn fmt.Errorf(\"data section %s: contents exceed maximum size\", sec.Name)\n\t\t}\n\n\t\tmapSpec := &MapSpec{\n\t\t\tName:       SanitizeName(sec.Name, -1),\n\t\t\tType:       Array,\n\t\t\tKeySize:    4,\n\t\t\tValueSize:  uint32(sec.Size),\n\t\t\tMaxEntries: 1,\n\t\t}\n\n\t\tif isConstantDataSection(sec.Name) {\n\t\t\tmapSpec.Flags = sys.BPF_F_RDONLY_PROG\n\t\t}\n\n\t\tswitch sec.Type {\n\t\t// Only open the section if we know there's actual data to be read.\n\t\tcase elf.SHT_PROGBITS:\n\t\t\tdata, err := sec.Data()\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"data section %s: can't get contents: %w\", sec.Name, err)\n\t\t\t}\n\t\t\tmapSpec.Contents = []MapKV{{uint32(0), data}}\n\n\t\tcase elf.SHT_NOBITS:\n\t\t\t// NOBITS sections like .bss contain only zeroes and are not allocated in\n\t\t\t// the ELF. Since data sections are Arrays, the kernel can preallocate\n\t\t\t// them. Don't attempt reading zeroes from the ELF, instead allocate the\n\t\t\t// zeroed memory to support getting and setting VariableSpecs for sections\n\t\t\t// like .bss.\n\t\t\tmapSpec.Contents = []MapKV{{uint32(0), make([]byte, sec.Size)}}\n\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"data section %s: unknown section type %s\", sec.Name, sec.Type)\n\t\t}\n\n\t\tfor off, sym := range sec.symbols {\n\t\t\t// Skip symbols marked with the 'hidden' attribute.\n\t\t\tif elf.ST_VISIBILITY(sym.Other) == elf.STV_HIDDEN ||\n\t\t\t\telf.ST_VISIBILITY(sym.Other) == elf.STV_INTERNAL {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Only accept symbols with global or weak bindings. The common\n\t\t\t// alternative is STB_LOCAL, which are either function-scoped or declared\n\t\t\t// 'static'.\n\t\t\tif elf.ST_BIND(sym.Info) != elf.STB_GLOBAL &&\n\t\t\t\telf.ST_BIND(sym.Info) != elf.STB_WEAK {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif ec.vars[sym.Name] != nil {\n\t\t\t\treturn fmt.Errorf(\"data section %s: duplicate variable %s\", sec.Name, sym.Name)\n\t\t\t}\n\n\t\t\t// Skip symbols starting with a dot, they are compiler-internal symbols\n\t\t\t// emitted by clang 11 and earlier and are not cleaned up by the bpf\n\t\t\t// compiler backend (e.g. symbols named .Lconstinit.1 in sections like\n\t\t\t// .rodata.cst32). Variables in C cannot start with a dot, so filter these\n\t\t\t// out.\n\t\t\tif strings.HasPrefix(sym.Name, \".\") {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tec.vars[sym.Name] = &VariableSpec{\n\t\t\t\tname:   sym.Name,\n\t\t\t\toffset: off,\n\t\t\t\tsize:   sym.Size,\n\t\t\t\tm:      mapSpec,\n\t\t\t}\n\t\t}\n\n\t\t// It is possible for a data section to exist without a corresponding BTF Datasec\n\t\t// if it only contains anonymous values like macro-defined arrays.\n\t\tif ec.btf != nil {\n\t\t\tvar ds *btf.Datasec\n\t\t\tif ec.btf.TypeByName(sec.Name, &ds) == nil {\n\t\t\t\t// Assign the spec's key and BTF only if the Datasec lookup was successful.\n\t\t\t\tmapSpec.Key = &btf.Void{}\n\t\t\t\tmapSpec.Value = ds\n\n\t\t\t\t// Populate VariableSpecs with type information, if available.\n\t\t\t\tfor _, v := range ds.Vars {\n\t\t\t\t\tname := v.Type.TypeName()\n\t\t\t\t\tif name == \"\" {\n\t\t\t\t\t\treturn fmt.Errorf(\"data section %s: anonymous variable %v\", sec.Name, v)\n\t\t\t\t\t}\n\n\t\t\t\t\tvt, ok := v.Type.(*btf.Var)\n\t\t\t\t\tif !ok {\n\t\t\t\t\t\treturn fmt.Errorf(\"data section %s: unexpected type %T for variable %s\", sec.Name, v.Type, name)\n\t\t\t\t\t}\n\n\t\t\t\t\tev := ec.vars[name]\n\t\t\t\t\tif ev == nil {\n\t\t\t\t\t\t// Hidden symbols appear in the BTF Datasec but don't receive a VariableSpec.\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tif uint64(v.Offset) != ev.offset {\n\t\t\t\t\t\treturn fmt.Errorf(\"data section %s: variable %s datasec offset (%d) doesn't match ELF symbol offset (%d)\", sec.Name, name, v.Offset, ev.offset)\n\t\t\t\t\t}\n\n\t\t\t\t\tif uint64(v.Size) != ev.size {\n\t\t\t\t\t\treturn fmt.Errorf(\"data section %s: variable %s size in datasec (%d) doesn't match ELF symbol size (%d)\", sec.Name, name, v.Size, ev.size)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Decouple the Var in the VariableSpec from the underlying DataSec in\n\t\t\t\t\t// the MapSpec to avoid modifications from affecting map loads later on.\n\t\t\t\t\tev.t = btf.Copy(vt).(*btf.Var)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tec.maps[sec.Name] = mapSpec\n\t}\n\n\treturn nil\n}\n\n// loadKconfigSection handles the 'virtual' Datasec .kconfig that doesn't\n// have a corresponding ELF section and exist purely in BTF.\nfunc (ec *elfCode) loadKconfigSection() error {\n\tif ec.btf == nil {\n\t\treturn nil\n\t}\n\n\tvar ds *btf.Datasec\n\terr := ec.btf.TypeByName(\".kconfig\", &ds)\n\tif errors.Is(err, btf.ErrNotFound) {\n\t\treturn nil\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif ds.Size == 0 {\n\t\treturn errors.New(\"zero-length .kconfig\")\n\t}\n\n\tec.kconfig = &MapSpec{\n\t\tName:       \".kconfig\",\n\t\tType:       Array,\n\t\tKeySize:    uint32(4),\n\t\tValueSize:  ds.Size,\n\t\tMaxEntries: 1,\n\t\tFlags:      sys.BPF_F_RDONLY_PROG,\n\t\tKey:        &btf.Int{Size: 4},\n\t\tValue:      ds,\n\t}\n\n\treturn nil\n}\n\n// loadKsymsSection handles the 'virtual' Datasec .ksyms that doesn't\n// have a corresponding ELF section and exist purely in BTF.\nfunc (ec *elfCode) loadKsymsSection() error {\n\tif ec.btf == nil {\n\t\treturn nil\n\t}\n\n\tvar ds *btf.Datasec\n\terr := ec.btf.TypeByName(\".ksyms\", &ds)\n\tif errors.Is(err, btf.ErrNotFound) {\n\t\treturn nil\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, v := range ds.Vars {\n\t\tswitch t := v.Type.(type) {\n\t\tcase *btf.Func:\n\t\t\tec.kfuncs[t.TypeName()] = t\n\t\tcase *btf.Var:\n\t\t\tec.ksyms[t.TypeName()] = struct{}{}\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unexpected variable type in .ksyms: %T\", v)\n\t\t}\n\t}\n\n\treturn nil\n}\n\ntype libbpfElfSectionDef struct {\n\tpattern     string\n\tprogramType sys.ProgType\n\tattachType  sys.AttachType\n\tflags       libbpfElfSectionFlag\n}\n\ntype libbpfElfSectionFlag uint32\n\n// The values correspond to enum sec_def_flags in libbpf.\nconst (\n\t_SEC_NONE libbpfElfSectionFlag = 0\n\n\t_SEC_EXP_ATTACH_OPT libbpfElfSectionFlag = 1 << (iota - 1)\n\t_SEC_ATTACHABLE\n\t_SEC_ATTACH_BTF\n\t_SEC_SLEEPABLE\n\t_SEC_XDP_FRAGS\n\t_SEC_USDT\n\n\t// Ignore any present extra in order to preserve backwards compatibility\n\t// with earlier versions of the library.\n\tignoreExtra\n\n\t_SEC_ATTACHABLE_OPT = _SEC_ATTACHABLE | _SEC_EXP_ATTACH_OPT\n)\n\nfunc init() {\n\t// Compatibility with older versions of the library.\n\t// We prepend libbpf definitions since they contain a prefix match\n\t// for \"xdp\".\n\telfSectionDefs = append([]libbpfElfSectionDef{\n\t\t{\"xdp.frags/\", sys.BPF_PROG_TYPE_XDP, sys.BPF_XDP, _SEC_XDP_FRAGS | ignoreExtra},\n\t\t{\"xdp.frags_devmap/\", sys.BPF_PROG_TYPE_XDP, sys.BPF_XDP_DEVMAP, _SEC_XDP_FRAGS},\n\t\t{\"xdp_devmap/\", sys.BPF_PROG_TYPE_XDP, sys.BPF_XDP_DEVMAP, 0},\n\t\t{\"xdp.frags_cpumap/\", sys.BPF_PROG_TYPE_XDP, sys.BPF_XDP_CPUMAP, _SEC_XDP_FRAGS},\n\t\t{\"xdp_cpumap/\", sys.BPF_PROG_TYPE_XDP, sys.BPF_XDP_CPUMAP, 0},\n\t\t// This has been in the library since the beginning of time. Not sure\n\t\t// where it came from.\n\t\t{\"seccomp\", sys.BPF_PROG_TYPE_SOCKET_FILTER, 0, _SEC_NONE},\n\t}, elfSectionDefs...)\n}\n\nfunc getProgType(sectionName string) (ProgramType, AttachType, uint32, string) {\n\t// Skip optional program marking for now.\n\tsectionName = strings.TrimPrefix(sectionName, \"?\")\n\n\tfor _, t := range elfSectionDefs {\n\t\textra, ok := matchSectionName(sectionName, t.pattern)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tprogramType := ProgramType(t.programType)\n\t\tattachType := AttachType(t.attachType)\n\n\t\tvar flags uint32\n\t\tif t.flags&_SEC_SLEEPABLE > 0 {\n\t\t\tflags |= sys.BPF_F_SLEEPABLE\n\t\t}\n\t\tif t.flags&_SEC_XDP_FRAGS > 0 {\n\t\t\tflags |= sys.BPF_F_XDP_HAS_FRAGS\n\t\t}\n\t\tif t.flags&_SEC_EXP_ATTACH_OPT > 0 {\n\t\t\tif programType == XDP {\n\t\t\t\t// The library doesn't yet have code to fallback to not specifying\n\t\t\t\t// attach type. Only do this for XDP since we've enforced correct\n\t\t\t\t// attach type for all other program types.\n\t\t\t\tattachType = AttachNone\n\t\t\t}\n\t\t}\n\t\tif t.flags&ignoreExtra > 0 {\n\t\t\textra = \"\"\n\t\t}\n\n\t\treturn programType, attachType, flags, extra\n\t}\n\n\treturn UnspecifiedProgram, AttachNone, 0, \"\"\n}\n\n// matchSectionName checks a section name against a pattern.\n//\n// It's behaviour mirrors that of libbpf's sec_def_matches.\nfunc matchSectionName(sectionName, pattern string) (extra string, found bool) {\n\thave, extra, found := strings.Cut(sectionName, \"/\")\n\twant := strings.TrimRight(pattern, \"+/\")\n\n\tif strings.HasSuffix(pattern, \"/\") {\n\t\t// Section name must have a slash and extra may be empty.\n\t\treturn extra, have == want && found\n\t} else if strings.HasSuffix(pattern, \"+\") {\n\t\t// Section name may have a slash and extra may be empty.\n\t\treturn extra, have == want\n\t}\n\n\t// Section name must have a prefix. extra is ignored.\n\treturn \"\", strings.HasPrefix(sectionName, pattern)\n}\n\nfunc (ec *elfCode) loadSectionRelocations(sec *elf.Section, symbols []elf.Symbol) (map[uint64]elf.Symbol, error) {\n\trels := make(map[uint64]elf.Symbol)\n\n\tif sec.Entsize < 16 {\n\t\treturn nil, fmt.Errorf(\"section %s: relocations are less than 16 bytes\", sec.Name)\n\t}\n\n\tr := bufio.NewReader(sec.Open())\n\tfor off := uint64(0); off < sec.Size; off += sec.Entsize {\n\t\tent := io.LimitReader(r, int64(sec.Entsize))\n\n\t\tvar rel elf.Rel64\n\t\tif binary.Read(ent, ec.ByteOrder, &rel) != nil {\n\t\t\treturn nil, fmt.Errorf(\"can't parse relocation at offset %v\", off)\n\t\t}\n\n\t\tsymNo := int(elf.R_SYM64(rel.Info) - 1)\n\t\tif symNo >= len(symbols) {\n\t\t\treturn nil, fmt.Errorf(\"offset %d: symbol %d doesn't exist\", off, symNo)\n\t\t}\n\n\t\tsymbol := symbols[symNo]\n\t\trels[rel.Off] = symbol\n\t}\n\n\treturn rels, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/elf_sections.go",
    "content": "// Code generated by internal/cmd/gensections.awk; DO NOT EDIT.\n\npackage ebpf\n\n// Code in this file is derived from libbpf, available under BSD-2-Clause.\n\nimport \"github.com/cilium/ebpf/internal/sys\"\n\nvar elfSectionDefs = []libbpfElfSectionDef{\n\t{\"socket\", sys.BPF_PROG_TYPE_SOCKET_FILTER, 0, _SEC_NONE},\n\t{\"sk_reuseport/migrate\", sys.BPF_PROG_TYPE_SK_REUSEPORT, sys.BPF_SK_REUSEPORT_SELECT_OR_MIGRATE, _SEC_ATTACHABLE},\n\t{\"sk_reuseport\", sys.BPF_PROG_TYPE_SK_REUSEPORT, sys.BPF_SK_REUSEPORT_SELECT, _SEC_ATTACHABLE},\n\t{\"kprobe+\", sys.BPF_PROG_TYPE_KPROBE, 0, _SEC_NONE},\n\t{\"uprobe+\", sys.BPF_PROG_TYPE_KPROBE, 0, _SEC_NONE},\n\t{\"uprobe.s+\", sys.BPF_PROG_TYPE_KPROBE, 0, _SEC_SLEEPABLE},\n\t{\"kretprobe+\", sys.BPF_PROG_TYPE_KPROBE, 0, _SEC_NONE},\n\t{\"uretprobe+\", sys.BPF_PROG_TYPE_KPROBE, 0, _SEC_NONE},\n\t{\"uretprobe.s+\", sys.BPF_PROG_TYPE_KPROBE, 0, _SEC_SLEEPABLE},\n\t{\"kprobe.multi+\", sys.BPF_PROG_TYPE_KPROBE, sys.BPF_TRACE_KPROBE_MULTI, _SEC_NONE},\n\t{\"kretprobe.multi+\", sys.BPF_PROG_TYPE_KPROBE, sys.BPF_TRACE_KPROBE_MULTI, _SEC_NONE},\n\t{\"kprobe.session+\", sys.BPF_PROG_TYPE_KPROBE, sys.BPF_TRACE_KPROBE_SESSION, _SEC_NONE},\n\t{\"uprobe.multi+\", sys.BPF_PROG_TYPE_KPROBE, sys.BPF_TRACE_UPROBE_MULTI, _SEC_NONE},\n\t{\"uretprobe.multi+\", sys.BPF_PROG_TYPE_KPROBE, sys.BPF_TRACE_UPROBE_MULTI, _SEC_NONE},\n\t{\"uprobe.multi.s+\", sys.BPF_PROG_TYPE_KPROBE, sys.BPF_TRACE_UPROBE_MULTI, _SEC_SLEEPABLE},\n\t{\"uretprobe.multi.s+\", sys.BPF_PROG_TYPE_KPROBE, sys.BPF_TRACE_UPROBE_MULTI, _SEC_SLEEPABLE},\n\t{\"ksyscall+\", sys.BPF_PROG_TYPE_KPROBE, 0, _SEC_NONE},\n\t{\"kretsyscall+\", sys.BPF_PROG_TYPE_KPROBE, 0, _SEC_NONE},\n\t{\"usdt+\", sys.BPF_PROG_TYPE_KPROBE, 0, _SEC_USDT},\n\t{\"usdt.s+\", sys.BPF_PROG_TYPE_KPROBE, 0, _SEC_USDT | _SEC_SLEEPABLE},\n\t{\"tc/ingress\", sys.BPF_PROG_TYPE_SCHED_CLS, sys.BPF_TCX_INGRESS, _SEC_NONE},\n\t{\"tc/egress\", sys.BPF_PROG_TYPE_SCHED_CLS, sys.BPF_TCX_EGRESS, _SEC_NONE},\n\t{\"tcx/ingress\", sys.BPF_PROG_TYPE_SCHED_CLS, sys.BPF_TCX_INGRESS, _SEC_NONE},\n\t{\"tcx/egress\", sys.BPF_PROG_TYPE_SCHED_CLS, sys.BPF_TCX_EGRESS, _SEC_NONE},\n\t{\"tc\", sys.BPF_PROG_TYPE_SCHED_CLS, 0, _SEC_NONE},\n\t{\"classifier\", sys.BPF_PROG_TYPE_SCHED_CLS, 0, _SEC_NONE},\n\t{\"action\", sys.BPF_PROG_TYPE_SCHED_ACT, 0, _SEC_NONE},\n\t{\"netkit/primary\", sys.BPF_PROG_TYPE_SCHED_CLS, sys.BPF_NETKIT_PRIMARY, _SEC_NONE},\n\t{\"netkit/peer\", sys.BPF_PROG_TYPE_SCHED_CLS, sys.BPF_NETKIT_PEER, _SEC_NONE},\n\t{\"tracepoint+\", sys.BPF_PROG_TYPE_TRACEPOINT, 0, _SEC_NONE},\n\t{\"tp+\", sys.BPF_PROG_TYPE_TRACEPOINT, 0, _SEC_NONE},\n\t{\"raw_tracepoint+\", sys.BPF_PROG_TYPE_RAW_TRACEPOINT, 0, _SEC_NONE},\n\t{\"raw_tp+\", sys.BPF_PROG_TYPE_RAW_TRACEPOINT, 0, _SEC_NONE},\n\t{\"raw_tracepoint.w+\", sys.BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE, 0, _SEC_NONE},\n\t{\"raw_tp.w+\", sys.BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE, 0, _SEC_NONE},\n\t{\"tp_btf+\", sys.BPF_PROG_TYPE_TRACING, sys.BPF_TRACE_RAW_TP, _SEC_ATTACH_BTF},\n\t{\"fentry+\", sys.BPF_PROG_TYPE_TRACING, sys.BPF_TRACE_FENTRY, _SEC_ATTACH_BTF},\n\t{\"fmod_ret+\", sys.BPF_PROG_TYPE_TRACING, sys.BPF_MODIFY_RETURN, _SEC_ATTACH_BTF},\n\t{\"fexit+\", sys.BPF_PROG_TYPE_TRACING, sys.BPF_TRACE_FEXIT, _SEC_ATTACH_BTF},\n\t{\"fentry.s+\", sys.BPF_PROG_TYPE_TRACING, sys.BPF_TRACE_FENTRY, _SEC_ATTACH_BTF | _SEC_SLEEPABLE},\n\t{\"fmod_ret.s+\", sys.BPF_PROG_TYPE_TRACING, sys.BPF_MODIFY_RETURN, _SEC_ATTACH_BTF | _SEC_SLEEPABLE},\n\t{\"fexit.s+\", sys.BPF_PROG_TYPE_TRACING, sys.BPF_TRACE_FEXIT, _SEC_ATTACH_BTF | _SEC_SLEEPABLE},\n\t{\"freplace+\", sys.BPF_PROG_TYPE_EXT, 0, _SEC_ATTACH_BTF},\n\t{\"lsm+\", sys.BPF_PROG_TYPE_LSM, sys.BPF_LSM_MAC, _SEC_ATTACH_BTF},\n\t{\"lsm.s+\", sys.BPF_PROG_TYPE_LSM, sys.BPF_LSM_MAC, _SEC_ATTACH_BTF | _SEC_SLEEPABLE},\n\t{\"lsm_cgroup+\", sys.BPF_PROG_TYPE_LSM, sys.BPF_LSM_CGROUP, _SEC_ATTACH_BTF},\n\t{\"iter+\", sys.BPF_PROG_TYPE_TRACING, sys.BPF_TRACE_ITER, _SEC_ATTACH_BTF},\n\t{\"iter.s+\", sys.BPF_PROG_TYPE_TRACING, sys.BPF_TRACE_ITER, _SEC_ATTACH_BTF | _SEC_SLEEPABLE},\n\t{\"syscall\", sys.BPF_PROG_TYPE_SYSCALL, 0, _SEC_SLEEPABLE},\n\t{\"xdp.frags/devmap\", sys.BPF_PROG_TYPE_XDP, sys.BPF_XDP_DEVMAP, _SEC_XDP_FRAGS},\n\t{\"xdp/devmap\", sys.BPF_PROG_TYPE_XDP, sys.BPF_XDP_DEVMAP, _SEC_ATTACHABLE},\n\t{\"xdp.frags/cpumap\", sys.BPF_PROG_TYPE_XDP, sys.BPF_XDP_CPUMAP, _SEC_XDP_FRAGS},\n\t{\"xdp/cpumap\", sys.BPF_PROG_TYPE_XDP, sys.BPF_XDP_CPUMAP, _SEC_ATTACHABLE},\n\t{\"xdp.frags\", sys.BPF_PROG_TYPE_XDP, sys.BPF_XDP, _SEC_XDP_FRAGS},\n\t{\"xdp\", sys.BPF_PROG_TYPE_XDP, sys.BPF_XDP, _SEC_ATTACHABLE_OPT},\n\t{\"perf_event\", sys.BPF_PROG_TYPE_PERF_EVENT, 0, _SEC_NONE},\n\t{\"lwt_in\", sys.BPF_PROG_TYPE_LWT_IN, 0, _SEC_NONE},\n\t{\"lwt_out\", sys.BPF_PROG_TYPE_LWT_OUT, 0, _SEC_NONE},\n\t{\"lwt_xmit\", sys.BPF_PROG_TYPE_LWT_XMIT, 0, _SEC_NONE},\n\t{\"lwt_seg6local\", sys.BPF_PROG_TYPE_LWT_SEG6LOCAL, 0, _SEC_NONE},\n\t{\"sockops\", sys.BPF_PROG_TYPE_SOCK_OPS, sys.BPF_CGROUP_SOCK_OPS, _SEC_ATTACHABLE_OPT},\n\t{\"sk_skb/stream_parser\", sys.BPF_PROG_TYPE_SK_SKB, sys.BPF_SK_SKB_STREAM_PARSER, _SEC_ATTACHABLE_OPT},\n\t{\"sk_skb/stream_verdict\", sys.BPF_PROG_TYPE_SK_SKB, sys.BPF_SK_SKB_STREAM_VERDICT, _SEC_ATTACHABLE_OPT},\n\t{\"sk_skb/verdict\", sys.BPF_PROG_TYPE_SK_SKB, sys.BPF_SK_SKB_VERDICT, _SEC_ATTACHABLE_OPT},\n\t{\"sk_skb\", sys.BPF_PROG_TYPE_SK_SKB, 0, _SEC_NONE},\n\t{\"sk_msg\", sys.BPF_PROG_TYPE_SK_MSG, sys.BPF_SK_MSG_VERDICT, _SEC_ATTACHABLE_OPT},\n\t{\"lirc_mode2\", sys.BPF_PROG_TYPE_LIRC_MODE2, sys.BPF_LIRC_MODE2, _SEC_ATTACHABLE_OPT},\n\t{\"flow_dissector\", sys.BPF_PROG_TYPE_FLOW_DISSECTOR, sys.BPF_FLOW_DISSECTOR, _SEC_ATTACHABLE_OPT},\n\t{\"cgroup_skb/ingress\", sys.BPF_PROG_TYPE_CGROUP_SKB, sys.BPF_CGROUP_INET_INGRESS, _SEC_ATTACHABLE_OPT},\n\t{\"cgroup_skb/egress\", sys.BPF_PROG_TYPE_CGROUP_SKB, sys.BPF_CGROUP_INET_EGRESS, _SEC_ATTACHABLE_OPT},\n\t{\"cgroup/skb\", sys.BPF_PROG_TYPE_CGROUP_SKB, 0, _SEC_NONE},\n\t{\"cgroup/sock_create\", sys.BPF_PROG_TYPE_CGROUP_SOCK, sys.BPF_CGROUP_INET_SOCK_CREATE, _SEC_ATTACHABLE},\n\t{\"cgroup/sock_release\", sys.BPF_PROG_TYPE_CGROUP_SOCK, sys.BPF_CGROUP_INET_SOCK_RELEASE, _SEC_ATTACHABLE},\n\t{\"cgroup/sock\", sys.BPF_PROG_TYPE_CGROUP_SOCK, sys.BPF_CGROUP_INET_SOCK_CREATE, _SEC_ATTACHABLE_OPT},\n\t{\"cgroup/post_bind4\", sys.BPF_PROG_TYPE_CGROUP_SOCK, sys.BPF_CGROUP_INET4_POST_BIND, _SEC_ATTACHABLE},\n\t{\"cgroup/post_bind6\", sys.BPF_PROG_TYPE_CGROUP_SOCK, sys.BPF_CGROUP_INET6_POST_BIND, _SEC_ATTACHABLE},\n\t{\"cgroup/bind4\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_INET4_BIND, _SEC_ATTACHABLE},\n\t{\"cgroup/bind6\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_INET6_BIND, _SEC_ATTACHABLE},\n\t{\"cgroup/connect4\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_INET4_CONNECT, _SEC_ATTACHABLE},\n\t{\"cgroup/connect6\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_INET6_CONNECT, _SEC_ATTACHABLE},\n\t{\"cgroup/connect_unix\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_UNIX_CONNECT, _SEC_ATTACHABLE},\n\t{\"cgroup/sendmsg4\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_UDP4_SENDMSG, _SEC_ATTACHABLE},\n\t{\"cgroup/sendmsg6\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_UDP6_SENDMSG, _SEC_ATTACHABLE},\n\t{\"cgroup/sendmsg_unix\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_UNIX_SENDMSG, _SEC_ATTACHABLE},\n\t{\"cgroup/recvmsg4\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_UDP4_RECVMSG, _SEC_ATTACHABLE},\n\t{\"cgroup/recvmsg6\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_UDP6_RECVMSG, _SEC_ATTACHABLE},\n\t{\"cgroup/recvmsg_unix\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_UNIX_RECVMSG, _SEC_ATTACHABLE},\n\t{\"cgroup/getpeername4\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_INET4_GETPEERNAME, _SEC_ATTACHABLE},\n\t{\"cgroup/getpeername6\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_INET6_GETPEERNAME, _SEC_ATTACHABLE},\n\t{\"cgroup/getpeername_unix\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_UNIX_GETPEERNAME, _SEC_ATTACHABLE},\n\t{\"cgroup/getsockname4\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_INET4_GETSOCKNAME, _SEC_ATTACHABLE},\n\t{\"cgroup/getsockname6\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_INET6_GETSOCKNAME, _SEC_ATTACHABLE},\n\t{\"cgroup/getsockname_unix\", sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR, sys.BPF_CGROUP_UNIX_GETSOCKNAME, _SEC_ATTACHABLE},\n\t{\"cgroup/sysctl\", sys.BPF_PROG_TYPE_CGROUP_SYSCTL, sys.BPF_CGROUP_SYSCTL, _SEC_ATTACHABLE},\n\t{\"cgroup/getsockopt\", sys.BPF_PROG_TYPE_CGROUP_SOCKOPT, sys.BPF_CGROUP_GETSOCKOPT, _SEC_ATTACHABLE},\n\t{\"cgroup/setsockopt\", sys.BPF_PROG_TYPE_CGROUP_SOCKOPT, sys.BPF_CGROUP_SETSOCKOPT, _SEC_ATTACHABLE},\n\t{\"cgroup/dev\", sys.BPF_PROG_TYPE_CGROUP_DEVICE, sys.BPF_CGROUP_DEVICE, _SEC_ATTACHABLE_OPT},\n\t{\"struct_ops+\", sys.BPF_PROG_TYPE_STRUCT_OPS, 0, _SEC_NONE},\n\t{\"struct_ops.s+\", sys.BPF_PROG_TYPE_STRUCT_OPS, 0, _SEC_SLEEPABLE},\n\t{\"sk_lookup\", sys.BPF_PROG_TYPE_SK_LOOKUP, sys.BPF_SK_LOOKUP, _SEC_ATTACHABLE},\n\t{\"netfilter\", sys.BPF_PROG_TYPE_NETFILTER, sys.BPF_NETFILTER, _SEC_NONE},\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/info.go",
    "content": "package ebpf\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"reflect\"\n\t\"strings\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// The *Info structs expose metadata about a program or map. Most\n// fields are exposed via a getter:\n//\n//     func (*MapInfo) ID() (MapID, bool)\n//\n// This is because the metadata available changes based on kernel version.\n// The second boolean return value indicates whether a particular field is\n// available on the current kernel.\n//\n// Always add new metadata as such a getter, unless you can somehow get the\n// value of the field on all supported kernels. Also document which version\n// a particular field first appeared in.\n//\n// Some metadata is a buffer which needs additional parsing. In this case,\n// store the undecoded data in the Info struct and provide a getter which\n// decodes it when necessary. See ProgramInfo.Instructions for an example.\n\n// MapInfo describes a map.\ntype MapInfo struct {\n\t// Type of the map.\n\tType MapType\n\t// KeySize is the size of the map key in bytes.\n\tKeySize uint32\n\t// ValueSize is the size of the map value in bytes.\n\tValueSize uint32\n\t// MaxEntries is the maximum number of entries the map can hold. Its meaning\n\t// is map-specific.\n\tMaxEntries uint32\n\t// Flags used during map creation.\n\tFlags uint32\n\t// Name as supplied by user space at load time. Available from 4.15.\n\tName string\n\n\tid       MapID\n\tbtf      btf.ID\n\tmapExtra uint64\n\tmemlock  uint64\n\tfrozen   bool\n}\n\n// newMapInfoFromFd queries map information about the given fd. [sys.ObjInfo] is\n// attempted first, supplementing any missing values with information from\n// /proc/self/fdinfo. Ignores EINVAL from ObjInfo as well as ErrNotSupported\n// from reading fdinfo (indicating the file exists, but no fields of interest\n// were found). If both fail, an error is always returned.\nfunc newMapInfoFromFd(fd *sys.FD) (*MapInfo, error) {\n\tvar info sys.MapInfo\n\terr1 := sys.ObjInfo(fd, &info)\n\t// EINVAL means the kernel doesn't support BPF_OBJ_GET_INFO_BY_FD. Continue\n\t// with fdinfo if that's the case.\n\tif err1 != nil && !errors.Is(err1, unix.EINVAL) {\n\t\treturn nil, fmt.Errorf(\"getting object info: %w\", err1)\n\t}\n\n\tmi := &MapInfo{\n\t\tMapType(info.Type),\n\t\tinfo.KeySize,\n\t\tinfo.ValueSize,\n\t\tinfo.MaxEntries,\n\t\tuint32(info.MapFlags),\n\t\tunix.ByteSliceToString(info.Name[:]),\n\t\tMapID(info.Id),\n\t\tbtf.ID(info.BtfId),\n\t\tinfo.MapExtra,\n\t\t0,\n\t\tfalse,\n\t}\n\n\t// Supplement OBJ_INFO with data from /proc/self/fdinfo. It contains fields\n\t// like memlock and frozen that are not present in OBJ_INFO.\n\terr2 := readMapInfoFromProc(fd, mi)\n\tif err2 != nil && !errors.Is(err2, ErrNotSupported) {\n\t\treturn nil, fmt.Errorf(\"getting map info from fdinfo: %w\", err2)\n\t}\n\n\tif err1 != nil && err2 != nil {\n\t\treturn nil, fmt.Errorf(\"ObjInfo and fdinfo both failed: objinfo: %w, fdinfo: %w\", err1, err2)\n\t}\n\n\treturn mi, nil\n}\n\n// readMapInfoFromProc queries map information about the given fd from\n// /proc/self/fdinfo. It only writes data into fields that have a zero value.\nfunc readMapInfoFromProc(fd *sys.FD, mi *MapInfo) error {\n\treturn scanFdInfo(fd, map[string]interface{}{\n\t\t\"map_type\":    &mi.Type,\n\t\t\"map_id\":      &mi.id,\n\t\t\"key_size\":    &mi.KeySize,\n\t\t\"value_size\":  &mi.ValueSize,\n\t\t\"max_entries\": &mi.MaxEntries,\n\t\t\"map_flags\":   &mi.Flags,\n\t\t\"map_extra\":   &mi.mapExtra,\n\t\t\"memlock\":     &mi.memlock,\n\t\t\"frozen\":      &mi.frozen,\n\t})\n}\n\n// ID returns the map ID.\n//\n// Available from 4.13.\n//\n// The bool return value indicates whether this optional field is available.\nfunc (mi *MapInfo) ID() (MapID, bool) {\n\treturn mi.id, mi.id > 0\n}\n\n// BTFID returns the BTF ID associated with the Map.\n//\n// The ID is only valid as long as the associated Map is kept alive.\n// Available from 4.18.\n//\n// The bool return value indicates whether this optional field is available and\n// populated. (The field may be available but not populated if the kernel\n// supports the field but the Map was loaded without BTF information.)\nfunc (mi *MapInfo) BTFID() (btf.ID, bool) {\n\treturn mi.btf, mi.btf > 0\n}\n\n// MapExtra returns an opaque field whose meaning is map-specific.\n//\n// Available from 5.16.\n//\n// The bool return value indicates whether this optional field is available and\n// populated, if it was specified during Map creation.\nfunc (mi *MapInfo) MapExtra() (uint64, bool) {\n\treturn mi.mapExtra, mi.mapExtra > 0\n}\n\n// Memlock returns an approximate number of bytes allocated to this map.\n//\n// Available from 4.10.\n//\n// The bool return value indicates whether this optional field is available.\nfunc (mi *MapInfo) Memlock() (uint64, bool) {\n\treturn mi.memlock, mi.memlock > 0\n}\n\n// Frozen indicates whether [Map.Freeze] was called on this map. If true,\n// modifications from user space are not allowed.\n//\n// Available from 5.2. Requires access to procfs.\n//\n// If the kernel doesn't support map freezing, this field will always be false.\nfunc (mi *MapInfo) Frozen() bool {\n\treturn mi.frozen\n}\n\n// programStats holds statistics of a program.\ntype programStats struct {\n\t// Total accumulated runtime of the program ins ns.\n\truntime time.Duration\n\t// Total number of times the program was called.\n\trunCount uint64\n\t// Total number of times the programm was NOT called.\n\t// Added in commit 9ed9e9ba2337 (\"bpf: Count the number of times recursion was prevented\").\n\trecursionMisses uint64\n}\n\n// programJitedInfo holds information about JITed info of a program.\ntype programJitedInfo struct {\n\t// ksyms holds the ksym addresses of the BPF program, including those of its\n\t// subprograms.\n\t//\n\t// Available from 4.18.\n\tksyms    []uint64\n\tnumKsyms uint32\n\n\t// insns holds the JITed machine native instructions of the program,\n\t// including those of its subprograms.\n\t//\n\t// Available from 4.13.\n\tinsns    []byte\n\tnumInsns uint32\n\n\t// lineInfos holds the JITed line infos, which are kernel addresses.\n\t//\n\t// Available from 5.0.\n\tlineInfos    []uint64\n\tnumLineInfos uint32\n\n\t// lineInfoRecSize is the size of a single line info record.\n\t//\n\t// Available from 5.0.\n\tlineInfoRecSize uint32\n\n\t// funcLens holds the insns length of each function.\n\t//\n\t// Available from 4.18.\n\tfuncLens    []uint32\n\tnumFuncLens uint32\n}\n\n// ProgramInfo describes a program.\ntype ProgramInfo struct {\n\tType ProgramType\n\tid   ProgramID\n\t// Truncated hash of the BPF bytecode. Available from 4.13.\n\tTag string\n\t// Name as supplied by user space at load time. Available from 4.15.\n\tName string\n\n\tcreatedByUID     uint32\n\thaveCreatedByUID bool\n\tbtf              btf.ID\n\tstats            *programStats\n\tloadTime         time.Duration\n\n\tmaps                 []MapID\n\tinsns                []byte\n\tjitedSize            uint32\n\tverifiedInstructions uint32\n\n\tjitedInfo programJitedInfo\n\n\tlineInfos    []byte\n\tnumLineInfos uint32\n\tfuncInfos    []byte\n\tnumFuncInfos uint32\n}\n\nfunc newProgramInfoFromFd(fd *sys.FD) (*ProgramInfo, error) {\n\tvar info sys.ProgInfo\n\terr := sys.ObjInfo(fd, &info)\n\tif errors.Is(err, syscall.EINVAL) {\n\t\treturn newProgramInfoFromProc(fd)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpi := ProgramInfo{\n\t\tType: ProgramType(info.Type),\n\t\tid:   ProgramID(info.Id),\n\t\tTag:  hex.EncodeToString(info.Tag[:]),\n\t\tName: unix.ByteSliceToString(info.Name[:]),\n\t\tbtf:  btf.ID(info.BtfId),\n\t\tstats: &programStats{\n\t\t\truntime:         time.Duration(info.RunTimeNs),\n\t\t\trunCount:        info.RunCnt,\n\t\t\trecursionMisses: info.RecursionMisses,\n\t\t},\n\t\tjitedSize:            info.JitedProgLen,\n\t\tloadTime:             time.Duration(info.LoadTime),\n\t\tverifiedInstructions: info.VerifiedInsns,\n\t}\n\n\t// Start with a clean struct for the second call, otherwise we may get EFAULT.\n\tvar info2 sys.ProgInfo\n\n\tmakeSecondCall := false\n\n\tif info.NrMapIds > 0 {\n\t\tpi.maps = make([]MapID, info.NrMapIds)\n\t\tinfo2.NrMapIds = info.NrMapIds\n\t\tinfo2.MapIds = sys.NewSlicePointer(pi.maps)\n\t\tmakeSecondCall = true\n\t} else if haveProgramInfoMapIDs() == nil {\n\t\t// This program really has no associated maps.\n\t\tpi.maps = make([]MapID, 0)\n\t} else {\n\t\t// The kernel doesn't report associated maps.\n\t\tpi.maps = nil\n\t}\n\n\t// createdByUID and NrMapIds were introduced in the same kernel version.\n\tif pi.maps != nil {\n\t\tpi.createdByUID = info.CreatedByUid\n\t\tpi.haveCreatedByUID = true\n\t}\n\n\tif info.XlatedProgLen > 0 {\n\t\tpi.insns = make([]byte, info.XlatedProgLen)\n\t\tinfo2.XlatedProgLen = info.XlatedProgLen\n\t\tinfo2.XlatedProgInsns = sys.NewSlicePointer(pi.insns)\n\t\tmakeSecondCall = true\n\t}\n\n\tif info.NrLineInfo > 0 {\n\t\tpi.lineInfos = make([]byte, btf.LineInfoSize*info.NrLineInfo)\n\t\tinfo2.LineInfo = sys.NewSlicePointer(pi.lineInfos)\n\t\tinfo2.LineInfoRecSize = btf.LineInfoSize\n\t\tinfo2.NrLineInfo = info.NrLineInfo\n\t\tpi.numLineInfos = info.NrLineInfo\n\t\tmakeSecondCall = true\n\t}\n\n\tif info.NrFuncInfo > 0 {\n\t\tpi.funcInfos = make([]byte, btf.FuncInfoSize*info.NrFuncInfo)\n\t\tinfo2.FuncInfo = sys.NewSlicePointer(pi.funcInfos)\n\t\tinfo2.FuncInfoRecSize = btf.FuncInfoSize\n\t\tinfo2.NrFuncInfo = info.NrFuncInfo\n\t\tpi.numFuncInfos = info.NrFuncInfo\n\t\tmakeSecondCall = true\n\t}\n\n\tpi.jitedInfo.lineInfoRecSize = info.JitedLineInfoRecSize\n\tif info.JitedProgLen > 0 {\n\t\tpi.jitedInfo.numInsns = info.JitedProgLen\n\t\tpi.jitedInfo.insns = make([]byte, info.JitedProgLen)\n\t\tinfo2.JitedProgLen = info.JitedProgLen\n\t\tinfo2.JitedProgInsns = sys.NewSlicePointer(pi.jitedInfo.insns)\n\t\tmakeSecondCall = true\n\t}\n\n\tif info.NrJitedFuncLens > 0 {\n\t\tpi.jitedInfo.numFuncLens = info.NrJitedFuncLens\n\t\tpi.jitedInfo.funcLens = make([]uint32, info.NrJitedFuncLens)\n\t\tinfo2.NrJitedFuncLens = info.NrJitedFuncLens\n\t\tinfo2.JitedFuncLens = sys.NewSlicePointer(pi.jitedInfo.funcLens)\n\t\tmakeSecondCall = true\n\t}\n\n\tif info.NrJitedLineInfo > 0 {\n\t\tpi.jitedInfo.numLineInfos = info.NrJitedLineInfo\n\t\tpi.jitedInfo.lineInfos = make([]uint64, info.NrJitedLineInfo)\n\t\tinfo2.NrJitedLineInfo = info.NrJitedLineInfo\n\t\tinfo2.JitedLineInfo = sys.NewSlicePointer(pi.jitedInfo.lineInfos)\n\t\tinfo2.JitedLineInfoRecSize = info.JitedLineInfoRecSize\n\t\tmakeSecondCall = true\n\t}\n\n\tif info.NrJitedKsyms > 0 {\n\t\tpi.jitedInfo.numKsyms = info.NrJitedKsyms\n\t\tpi.jitedInfo.ksyms = make([]uint64, info.NrJitedKsyms)\n\t\tinfo2.JitedKsyms = sys.NewSlicePointer(pi.jitedInfo.ksyms)\n\t\tinfo2.NrJitedKsyms = info.NrJitedKsyms\n\t\tmakeSecondCall = true\n\t}\n\n\tif makeSecondCall {\n\t\tif err := sys.ObjInfo(fd, &info2); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn &pi, nil\n}\n\nfunc newProgramInfoFromProc(fd *sys.FD) (*ProgramInfo, error) {\n\tvar info ProgramInfo\n\terr := scanFdInfo(fd, map[string]interface{}{\n\t\t\"prog_type\": &info.Type,\n\t\t\"prog_tag\":  &info.Tag,\n\t})\n\tif errors.Is(err, ErrNotSupported) {\n\t\treturn nil, &internal.UnsupportedFeatureError{\n\t\t\tName:           \"reading program info from /proc/self/fdinfo\",\n\t\t\tMinimumVersion: internal.Version{4, 10, 0},\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &info, nil\n}\n\n// ID returns the program ID.\n//\n// Available from 4.13.\n//\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) ID() (ProgramID, bool) {\n\treturn pi.id, pi.id > 0\n}\n\n// CreatedByUID returns the Uid that created the program.\n//\n// Available from 4.15.\n//\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) CreatedByUID() (uint32, bool) {\n\treturn pi.createdByUID, pi.haveCreatedByUID\n}\n\n// BTFID returns the BTF ID associated with the program.\n//\n// The ID is only valid as long as the associated program is kept alive.\n// Available from 5.0.\n//\n// The bool return value indicates whether this optional field is available and\n// populated. (The field may be available but not populated if the kernel\n// supports the field but the program was loaded without BTF information.)\nfunc (pi *ProgramInfo) BTFID() (btf.ID, bool) {\n\treturn pi.btf, pi.btf > 0\n}\n\n// RunCount returns the total number of times the program was called.\n//\n// Can return 0 if the collection of statistics is not enabled. See EnableStats().\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) RunCount() (uint64, bool) {\n\tif pi.stats != nil {\n\t\treturn pi.stats.runCount, true\n\t}\n\treturn 0, false\n}\n\n// Runtime returns the total accumulated runtime of the program.\n//\n// Can return 0 if the collection of statistics is not enabled. See EnableStats().\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) Runtime() (time.Duration, bool) {\n\tif pi.stats != nil {\n\t\treturn pi.stats.runtime, true\n\t}\n\treturn time.Duration(0), false\n}\n\n// RecursionMisses returns the total number of times the program was NOT called.\n// This can happen when another bpf program is already running on the cpu, which\n// is likely to happen for example when you interrupt bpf program execution.\nfunc (pi *ProgramInfo) RecursionMisses() (uint64, bool) {\n\tif pi.stats != nil {\n\t\treturn pi.stats.recursionMisses, true\n\t}\n\treturn 0, false\n}\n\n// btfSpec returns the BTF spec associated with the program.\nfunc (pi *ProgramInfo) btfSpec() (*btf.Spec, error) {\n\tid, ok := pi.BTFID()\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"program created without BTF or unsupported kernel: %w\", ErrNotSupported)\n\t}\n\n\th, err := btf.NewHandleFromID(id)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get BTF handle: %w\", err)\n\t}\n\tdefer h.Close()\n\n\tspec, err := h.Spec(nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get BTF spec: %w\", err)\n\t}\n\n\treturn spec, nil\n}\n\n// LineInfos returns the BTF line information of the program.\n//\n// Available from 5.0.\n//\n// Requires CAP_SYS_ADMIN or equivalent for reading BTF information. Returns\n// ErrNotSupported if the program was created without BTF or if the kernel\n// doesn't support the field.\nfunc (pi *ProgramInfo) LineInfos() (btf.LineOffsets, error) {\n\tif len(pi.lineInfos) == 0 {\n\t\treturn nil, fmt.Errorf(\"insufficient permissions or unsupported kernel: %w\", ErrNotSupported)\n\t}\n\n\tspec, err := pi.btfSpec()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn btf.LoadLineInfos(\n\t\tbytes.NewReader(pi.lineInfos),\n\t\tinternal.NativeEndian,\n\t\tpi.numLineInfos,\n\t\tspec,\n\t)\n}\n\n// Instructions returns the 'xlated' instruction stream of the program\n// after it has been verified and rewritten by the kernel. These instructions\n// cannot be loaded back into the kernel as-is, this is mainly used for\n// inspecting loaded programs for troubleshooting, dumping, etc.\n//\n// For example, map accesses are made to reference their kernel map IDs,\n// not the FDs they had when the program was inserted. Note that before\n// the introduction of bpf_insn_prepare_dump in kernel 4.16, xlated\n// instructions were not sanitized, making the output even less reusable\n// and less likely to round-trip or evaluate to the same program Tag.\n//\n// The first instruction is marked as a symbol using the Program's name.\n//\n// If available, the instructions will be annotated with metadata from the\n// BTF. This includes line information and function information. Reading\n// this metadata requires CAP_SYS_ADMIN or equivalent. If capability is\n// unavailable, the instructions will be returned without metadata.\n//\n// Available from 4.13. Requires CAP_BPF or equivalent for plain instructions.\n// Requires CAP_SYS_ADMIN for instructions with metadata.\nfunc (pi *ProgramInfo) Instructions() (asm.Instructions, error) {\n\t// If the calling process is not BPF-capable or if the kernel doesn't\n\t// support getting xlated instructions, the field will be zero.\n\tif len(pi.insns) == 0 {\n\t\treturn nil, fmt.Errorf(\"insufficient permissions or unsupported kernel: %w\", ErrNotSupported)\n\t}\n\n\tr := bytes.NewReader(pi.insns)\n\tvar insns asm.Instructions\n\tif err := insns.Unmarshal(r, internal.NativeEndian); err != nil {\n\t\treturn nil, fmt.Errorf(\"unmarshaling instructions: %w\", err)\n\t}\n\n\tif pi.btf != 0 {\n\t\tbtfh, err := btf.NewHandleFromID(pi.btf)\n\t\tif err != nil {\n\t\t\t// Getting a BTF handle requires CAP_SYS_ADMIN, if not available we get an -EPERM.\n\t\t\t// Ignore it and fall back to instructions without metadata.\n\t\t\tif !errors.Is(err, unix.EPERM) {\n\t\t\t\treturn nil, fmt.Errorf(\"unable to get BTF handle: %w\", err)\n\t\t\t}\n\t\t}\n\n\t\t// If we have a BTF handle, we can use it to assign metadata to the instructions.\n\t\tif btfh != nil {\n\t\t\tdefer btfh.Close()\n\n\t\t\tspec, err := btfh.Spec(nil)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"unable to get BTF spec: %w\", err)\n\t\t\t}\n\n\t\t\tlineInfos, err := btf.LoadLineInfos(\n\t\t\t\tbytes.NewReader(pi.lineInfos),\n\t\t\t\tinternal.NativeEndian,\n\t\t\t\tpi.numLineInfos,\n\t\t\t\tspec,\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"parse line info: %w\", err)\n\t\t\t}\n\n\t\t\tfuncInfos, err := btf.LoadFuncInfos(\n\t\t\t\tbytes.NewReader(pi.funcInfos),\n\t\t\t\tinternal.NativeEndian,\n\t\t\t\tpi.numFuncInfos,\n\t\t\t\tspec,\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"parse func info: %w\", err)\n\t\t\t}\n\n\t\t\tbtf.AssignMetadataToInstructions(insns, funcInfos, lineInfos, btf.CORERelocationInfos{})\n\t\t}\n\t}\n\n\tfn := btf.FuncMetadata(&insns[0])\n\tname := pi.Name\n\tif fn != nil {\n\t\tname = fn.Name\n\t}\n\tinsns[0] = insns[0].WithSymbol(name)\n\n\treturn insns, nil\n}\n\n// JitedSize returns the size of the program's JIT-compiled machine code in bytes, which is the\n// actual code executed on the host's CPU. This field requires the BPF JIT compiler to be enabled.\n//\n// Available from 4.13. Reading this metadata requires CAP_BPF or equivalent.\nfunc (pi *ProgramInfo) JitedSize() (uint32, error) {\n\tif pi.jitedSize == 0 {\n\t\treturn 0, fmt.Errorf(\"insufficient permissions, unsupported kernel, or JIT compiler disabled: %w\", ErrNotSupported)\n\t}\n\treturn pi.jitedSize, nil\n}\n\n// TranslatedSize returns the size of the program's translated instructions in bytes, after it has\n// been verified and rewritten by the kernel.\n//\n// Available from 4.13. Reading this metadata requires CAP_BPF or equivalent.\nfunc (pi *ProgramInfo) TranslatedSize() (int, error) {\n\tinsns := len(pi.insns)\n\tif insns == 0 {\n\t\treturn 0, fmt.Errorf(\"insufficient permissions or unsupported kernel: %w\", ErrNotSupported)\n\t}\n\treturn insns, nil\n}\n\n// MapIDs returns the maps related to the program.\n//\n// Available from 4.15.\n//\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) MapIDs() ([]MapID, bool) {\n\treturn pi.maps, pi.maps != nil\n}\n\n// LoadTime returns when the program was loaded since boot time.\n//\n// Available from 4.15.\n//\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) LoadTime() (time.Duration, bool) {\n\t// loadTime and NrMapIds were introduced in the same kernel version.\n\treturn pi.loadTime, pi.loadTime > 0\n}\n\n// VerifiedInstructions returns the number verified instructions in the program.\n//\n// Available from 5.16.\n//\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) VerifiedInstructions() (uint32, bool) {\n\treturn pi.verifiedInstructions, pi.verifiedInstructions > 0\n}\n\n// JitedKsymAddrs returns the ksym addresses of the BPF program, including its\n// subprograms. The addresses correspond to their symbols in /proc/kallsyms.\n//\n// Available from 4.18. Note that before 5.x, this field can be empty for\n// programs without subprograms (bpf2bpf calls).\n//\n// The bool return value indicates whether this optional field is available.\n//\n// When a kernel address can't fit into uintptr (which is usually the case when\n// running 32 bit program on a 64 bit kernel), this returns an empty slice and\n// a false.\nfunc (pi *ProgramInfo) JitedKsymAddrs() ([]uintptr, bool) {\n\tksyms := make([]uintptr, 0, len(pi.jitedInfo.ksyms))\n\tif cap(ksyms) == 0 {\n\t\treturn ksyms, false\n\t}\n\t// Check if a kernel address fits into uintptr (it might not when\n\t// using a 32 bit binary on a 64 bit kernel). This check should work\n\t// with any kernel address, since they have 1s at the highest bits.\n\tif a := pi.jitedInfo.ksyms[0]; uint64(uintptr(a)) != a {\n\t\treturn nil, false\n\t}\n\tfor _, ksym := range pi.jitedInfo.ksyms {\n\t\tksyms = append(ksyms, uintptr(ksym))\n\t}\n\treturn ksyms, true\n}\n\n// JitedInsns returns the JITed machine native instructions of the program.\n//\n// Available from 4.13.\n//\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) JitedInsns() ([]byte, bool) {\n\treturn pi.jitedInfo.insns, len(pi.jitedInfo.insns) > 0\n}\n\n// JitedLineInfos returns the JITed line infos of the program.\n//\n// Available from 5.0.\n//\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) JitedLineInfos() ([]uint64, bool) {\n\treturn pi.jitedInfo.lineInfos, len(pi.jitedInfo.lineInfos) > 0\n}\n\n// JitedFuncLens returns the insns length of each function in the JITed program.\n//\n// Available from 4.18.\n//\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) JitedFuncLens() ([]uint32, bool) {\n\treturn pi.jitedInfo.funcLens, len(pi.jitedInfo.funcLens) > 0\n}\n\n// FuncInfos returns the offset and function information of all (sub)programs in\n// a BPF program.\n//\n// Available from 5.0.\n//\n// Requires CAP_SYS_ADMIN or equivalent for reading BTF information. Returns\n// ErrNotSupported if the program was created without BTF or if the kernel\n// doesn't support the field.\nfunc (pi *ProgramInfo) FuncInfos() (btf.FuncOffsets, error) {\n\tif len(pi.funcInfos) == 0 {\n\t\treturn nil, fmt.Errorf(\"insufficient permissions or unsupported kernel: %w\", ErrNotSupported)\n\t}\n\n\tspec, err := pi.btfSpec()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn btf.LoadFuncInfos(\n\t\tbytes.NewReader(pi.funcInfos),\n\t\tinternal.NativeEndian,\n\t\tpi.numFuncInfos,\n\t\tspec,\n\t)\n}\n\nfunc scanFdInfo(fd *sys.FD, fields map[string]interface{}) error {\n\tfh, err := os.Open(fmt.Sprintf(\"/proc/self/fdinfo/%d\", fd.Int()))\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer fh.Close()\n\n\tif err := scanFdInfoReader(fh, fields); err != nil {\n\t\treturn fmt.Errorf(\"%s: %w\", fh.Name(), err)\n\t}\n\treturn nil\n}\n\nfunc scanFdInfoReader(r io.Reader, fields map[string]interface{}) error {\n\tvar (\n\t\tscanner = bufio.NewScanner(r)\n\t\tscanned int\n\t)\n\n\tfor scanner.Scan() {\n\t\tparts := strings.SplitN(scanner.Text(), \"\\t\", 2)\n\t\tif len(parts) != 2 {\n\t\t\tcontinue\n\t\t}\n\n\t\tname := strings.TrimSuffix(parts[0], \":\")\n\t\tfield, ok := fields[string(name)]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// If field already contains a non-zero value, don't overwrite it with fdinfo.\n\t\tif zero(field) {\n\t\t\tif n, err := fmt.Sscanln(parts[1], field); err != nil || n != 1 {\n\t\t\t\treturn fmt.Errorf(\"can't parse field %s: %v\", name, err)\n\t\t\t}\n\t\t}\n\n\t\tscanned++\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\treturn fmt.Errorf(\"scanning fdinfo: %w\", err)\n\t}\n\n\tif len(fields) > 0 && scanned == 0 {\n\t\treturn ErrNotSupported\n\t}\n\n\treturn nil\n}\n\nfunc zero(arg any) bool {\n\tv := reflect.ValueOf(arg)\n\n\t// Unwrap pointers and interfaces.\n\tfor v.Kind() == reflect.Pointer ||\n\t\tv.Kind() == reflect.Interface {\n\t\tv = v.Elem()\n\t}\n\n\treturn v.IsZero()\n}\n\n// EnableStats starts the measuring of the runtime\n// and run counts of eBPF programs.\n//\n// Collecting statistics can have an impact on the performance.\n//\n// Requires at least 5.8.\nfunc EnableStats(which uint32) (io.Closer, error) {\n\tfd, err := sys.EnableStats(&sys.EnableStatsAttr{\n\t\tType: which,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn fd, nil\n}\n\nvar haveProgramInfoMapIDs = internal.NewFeatureTest(\"map IDs in program info\", func() error {\n\tprog, err := progLoad(asm.Instructions{\n\t\tasm.LoadImm(asm.R0, 0, asm.DWord),\n\t\tasm.Return(),\n\t}, SocketFilter, \"MIT\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer prog.Close()\n\n\terr = sys.ObjInfo(prog, &sys.ProgInfo{\n\t\t// NB: Don't need to allocate MapIds since the program isn't using\n\t\t// any maps.\n\t\tNrMapIds: 1,\n\t})\n\tif errors.Is(err, unix.EINVAL) {\n\t\t// Most likely the syscall doesn't exist.\n\t\treturn internal.ErrNotSupported\n\t}\n\tif errors.Is(err, unix.E2BIG) {\n\t\t// We've hit check_uarg_tail_zero on older kernels.\n\t\treturn internal.ErrNotSupported\n\t}\n\n\treturn err\n}, \"4.15\")\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/buffer.go",
    "content": "package internal\n\nimport (\n\t\"bytes\"\n\t\"sync\"\n)\n\nvar bytesBufferPool = sync.Pool{\n\tNew: func() interface{} {\n\t\treturn new(bytes.Buffer)\n\t},\n}\n\n// NewBuffer retrieves a [bytes.Buffer] from a pool an re-initialises it.\n//\n// The returned buffer should be passed to [PutBuffer].\nfunc NewBuffer(buf []byte) *bytes.Buffer {\n\twr := bytesBufferPool.Get().(*bytes.Buffer)\n\t// Reinitialize the Buffer with a new backing slice since it is returned to\n\t// the caller by wr.Bytes() below. Pooling is faster despite calling\n\t// NewBuffer. The pooled alloc is still reused, it only needs to be zeroed.\n\t*wr = *bytes.NewBuffer(buf)\n\treturn wr\n}\n\n// PutBuffer releases a buffer to the pool.\nfunc PutBuffer(buf *bytes.Buffer) {\n\t// Release reference to the backing buffer.\n\t*buf = *bytes.NewBuffer(nil)\n\tbytesBufferPool.Put(buf)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/deque.go",
    "content": "package internal\n\nimport \"math/bits\"\n\n// Deque implements a double ended queue.\ntype Deque[T any] struct {\n\telems       []T\n\tread, write uint64\n\tmask        uint64\n}\n\n// Reset clears the contents of the deque while retaining the backing buffer.\nfunc (dq *Deque[T]) Reset() {\n\tvar zero T\n\n\tfor i := dq.read; i < dq.write; i++ {\n\t\tdq.elems[i&dq.mask] = zero\n\t}\n\n\tdq.read, dq.write = 0, 0\n}\n\nfunc (dq *Deque[T]) Empty() bool {\n\treturn dq.read == dq.write\n}\n\n// Push adds an element to the end.\nfunc (dq *Deque[T]) Push(e T) {\n\tdq.Grow(1)\n\tdq.elems[dq.write&dq.mask] = e\n\tdq.write++\n}\n\n// Shift returns the first element or the zero value.\nfunc (dq *Deque[T]) Shift() T {\n\tvar zero T\n\n\tif dq.Empty() {\n\t\treturn zero\n\t}\n\n\tindex := dq.read & dq.mask\n\tt := dq.elems[index]\n\tdq.elems[index] = zero\n\tdq.read++\n\treturn t\n}\n\n// Pop returns the last element or the zero value.\nfunc (dq *Deque[T]) Pop() T {\n\tvar zero T\n\n\tif dq.Empty() {\n\t\treturn zero\n\t}\n\n\tdq.write--\n\tindex := dq.write & dq.mask\n\tt := dq.elems[index]\n\tdq.elems[index] = zero\n\treturn t\n}\n\n// Grow the deque's capacity, if necessary, to guarantee space for another n\n// elements.\nfunc (dq *Deque[T]) Grow(n int) {\n\thave := dq.write - dq.read\n\tneed := have + uint64(n)\n\tif need < have {\n\t\tpanic(\"overflow\")\n\t}\n\tif uint64(len(dq.elems)) >= need {\n\t\treturn\n\t}\n\n\t// Round up to the new power of two which is at least 8.\n\t// See https://jameshfisher.com/2018/03/30/round-up-power-2/\n\tcapacity := 1 << (64 - bits.LeadingZeros64(need-1))\n\tif capacity < 8 {\n\t\tcapacity = 8\n\t}\n\n\telems := make([]T, have, capacity)\n\tpivot := dq.read & dq.mask\n\tcopied := copy(elems, dq.elems[pivot:])\n\tcopy(elems[copied:], dq.elems[:pivot])\n\n\tdq.elems = elems[:capacity]\n\tdq.mask = uint64(capacity) - 1\n\tdq.read, dq.write = 0, have\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/elf.go",
    "content": "package internal\n\nimport (\n\t\"debug/elf\"\n\t\"fmt\"\n\t\"io\"\n)\n\ntype SafeELFFile struct {\n\t*elf.File\n}\n\n// NewSafeELFFile reads an ELF safely.\n//\n// Any panic during parsing is turned into an error. This is necessary since\n// there are a bunch of unfixed bugs in debug/elf.\n//\n// https://github.com/golang/go/issues?q=is%3Aissue+is%3Aopen+debug%2Felf+in%3Atitle\nfunc NewSafeELFFile(r io.ReaderAt) (safe *SafeELFFile, err error) {\n\tdefer func() {\n\t\tr := recover()\n\t\tif r == nil {\n\t\t\treturn\n\t\t}\n\n\t\tsafe = nil\n\t\terr = fmt.Errorf(\"reading ELF file panicked: %s\", r)\n\t}()\n\n\tfile, err := elf.NewFile(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &SafeELFFile{file}, nil\n}\n\n// OpenSafeELFFile reads an ELF from a file.\n//\n// It works like NewSafeELFFile, with the exception that safe.Close will\n// close the underlying file.\nfunc OpenSafeELFFile(path string) (safe *SafeELFFile, err error) {\n\tdefer func() {\n\t\tr := recover()\n\t\tif r == nil {\n\t\t\treturn\n\t\t}\n\n\t\tsafe = nil\n\t\terr = fmt.Errorf(\"reading ELF file panicked: %s\", r)\n\t}()\n\n\tfile, err := elf.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &SafeELFFile{file}, nil\n}\n\n// Symbols is the safe version of elf.File.Symbols.\nfunc (se *SafeELFFile) Symbols() (syms []elf.Symbol, err error) {\n\tdefer func() {\n\t\tr := recover()\n\t\tif r == nil {\n\t\t\treturn\n\t\t}\n\n\t\tsyms = nil\n\t\terr = fmt.Errorf(\"reading ELF symbols panicked: %s\", r)\n\t}()\n\n\tsyms, err = se.File.Symbols()\n\treturn\n}\n\n// DynamicSymbols is the safe version of elf.File.DynamicSymbols.\nfunc (se *SafeELFFile) DynamicSymbols() (syms []elf.Symbol, err error) {\n\tdefer func() {\n\t\tr := recover()\n\t\tif r == nil {\n\t\t\treturn\n\t\t}\n\n\t\tsyms = nil\n\t\terr = fmt.Errorf(\"reading ELF dynamic symbols panicked: %s\", r)\n\t}()\n\n\tsyms, err = se.File.DynamicSymbols()\n\treturn\n}\n\n// SectionsByType returns all sections in the file with the specified section type.\nfunc (se *SafeELFFile) SectionsByType(typ elf.SectionType) []*elf.Section {\n\tsections := make([]*elf.Section, 0, 1)\n\tfor _, section := range se.Sections {\n\t\tif section.Type == typ {\n\t\t\tsections = append(sections, section)\n\t\t}\n\t}\n\treturn sections\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/endian_be.go",
    "content": "//go:build armbe || arm64be || mips || mips64 || mips64p32 || ppc64 || s390 || s390x || sparc || sparc64\n\npackage internal\n\nimport \"encoding/binary\"\n\n// NativeEndian is set to either binary.BigEndian or binary.LittleEndian,\n// depending on the host's endianness.\nvar NativeEndian = binary.BigEndian\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/endian_le.go",
    "content": "//go:build 386 || amd64 || amd64p32 || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || ppc64le || riscv64\n\npackage internal\n\nimport \"encoding/binary\"\n\n// NativeEndian is set to either binary.BigEndian or binary.LittleEndian,\n// depending on the host's endianness.\nvar NativeEndian = binary.LittleEndian\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/errors.go",
    "content": "package internal\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n)\n\n// ErrorWithLog wraps err in a VerifierError that includes the parsed verifier\n// log buffer.\n//\n// The default error output is a summary of the full log. The latter can be\n// accessed via VerifierError.Log or by formatting the error, see Format.\nfunc ErrorWithLog(source string, err error, log []byte) *VerifierError {\n\tconst whitespace = \"\\t\\r\\v\\n \"\n\n\t// Convert verifier log C string by truncating it on the first 0 byte\n\t// and trimming trailing whitespace before interpreting as a Go string.\n\tif i := bytes.IndexByte(log, 0); i != -1 {\n\t\tlog = log[:i]\n\t}\n\n\tlog = bytes.Trim(log, whitespace)\n\tif len(log) == 0 {\n\t\treturn &VerifierError{source, err, nil}\n\t}\n\n\tlogLines := bytes.Split(log, []byte{'\\n'})\n\tlines := make([]string, 0, len(logLines))\n\tfor _, line := range logLines {\n\t\t// Don't remove leading white space on individual lines. We rely on it\n\t\t// when outputting logs.\n\t\tlines = append(lines, string(bytes.TrimRight(line, whitespace)))\n\t}\n\n\treturn &VerifierError{source, err, lines}\n}\n\n// VerifierError includes information from the eBPF verifier.\n//\n// It summarises the log output, see Format if you want to output the full contents.\ntype VerifierError struct {\n\tsource string\n\t// The error which caused this error.\n\tCause error\n\t// The verifier output split into lines.\n\tLog []string\n}\n\nfunc (le *VerifierError) Unwrap() error {\n\treturn le.Cause\n}\n\nfunc (le *VerifierError) Error() string {\n\tlog := le.Log\n\tif n := len(log); n > 0 && strings.HasPrefix(log[n-1], \"processed \") {\n\t\t// Get rid of \"processed 39 insns (limit 1000000) ...\" from summary.\n\t\tlog = log[:n-1]\n\t}\n\n\tvar b strings.Builder\n\tfmt.Fprintf(&b, \"%s: %s\", le.source, le.Cause.Error())\n\n\tn := len(log)\n\tif n == 0 {\n\t\treturn b.String()\n\t}\n\n\tlines := log[n-1:]\n\tif n >= 2 && includePreviousLine(log[n-1]) {\n\t\t// Add one more line of context if it aids understanding the error.\n\t\tlines = log[n-2:]\n\t}\n\n\tfor _, line := range lines {\n\t\tb.WriteString(\": \")\n\t\tb.WriteString(strings.TrimSpace(line))\n\t}\n\n\tomitted := len(le.Log) - len(lines)\n\tif omitted > 0 {\n\t\tfmt.Fprintf(&b, \" (%d line(s) omitted)\", omitted)\n\t}\n\n\treturn b.String()\n}\n\n// includePreviousLine returns true if the given line likely is better\n// understood with additional context from the preceding line.\nfunc includePreviousLine(line string) bool {\n\t// We need to find a good trade off between understandable error messages\n\t// and too much complexity here. Checking the string prefix is ok, requiring\n\t// regular expressions to do it is probably overkill.\n\n\tif strings.HasPrefix(line, \"\\t\") {\n\t\t// [13] STRUCT drm_rect size=16 vlen=4\n\t\t// \\tx1 type_id=2\n\t\treturn true\n\t}\n\n\tif len(line) >= 2 && line[0] == 'R' && line[1] >= '0' && line[1] <= '9' {\n\t\t// 0: (95) exit\n\t\t// R0 !read_ok\n\t\treturn true\n\t}\n\n\tif strings.HasPrefix(line, \"invalid bpf_context access\") {\n\t\t// 0: (79) r6 = *(u64 *)(r1 +0)\n\t\t// func '__x64_sys_recvfrom' arg0 type FWD is not a struct\n\t\t// invalid bpf_context access off=0 size=8\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// Format the error.\n//\n// Understood verbs are %s and %v, which are equivalent to calling Error(). %v\n// allows outputting additional information using the following flags:\n//\n//\t%+<width>v: Output the first <width> lines, or all lines if no width is given.\n//\t%-<width>v: Output the last <width> lines, or all lines if no width is given.\n//\n// Use width to specify how many lines to output. Use the '-' flag to output\n// lines from the end of the log instead of the beginning.\nfunc (le *VerifierError) Format(f fmt.State, verb rune) {\n\tswitch verb {\n\tcase 's':\n\t\t_, _ = io.WriteString(f, le.Error())\n\n\tcase 'v':\n\t\tn, haveWidth := f.Width()\n\t\tif !haveWidth || n > len(le.Log) {\n\t\t\tn = len(le.Log)\n\t\t}\n\n\t\tif !f.Flag('+') && !f.Flag('-') {\n\t\t\tif haveWidth {\n\t\t\t\t_, _ = io.WriteString(f, \"%!v(BADWIDTH)\")\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t_, _ = io.WriteString(f, le.Error())\n\t\t\treturn\n\t\t}\n\n\t\tif f.Flag('+') && f.Flag('-') {\n\t\t\t_, _ = io.WriteString(f, \"%!v(BADFLAG)\")\n\t\t\treturn\n\t\t}\n\n\t\tfmt.Fprintf(f, \"%s: %s:\", le.source, le.Cause.Error())\n\n\t\tomitted := len(le.Log) - n\n\t\tlines := le.Log[:n]\n\t\tif f.Flag('-') {\n\t\t\t// Print last instead of first lines.\n\t\t\tlines = le.Log[len(le.Log)-n:]\n\t\t\tif omitted > 0 {\n\t\t\t\tfmt.Fprintf(f, \"\\n\\t(%d line(s) omitted)\", omitted)\n\t\t\t}\n\t\t}\n\n\t\tfor _, line := range lines {\n\t\t\tfmt.Fprintf(f, \"\\n\\t%s\", line)\n\t\t}\n\n\t\tif !f.Flag('-') {\n\t\t\tif omitted > 0 {\n\t\t\t\tfmt.Fprintf(f, \"\\n\\t(%d line(s) omitted)\", omitted)\n\t\t\t}\n\t\t}\n\n\tdefault:\n\t\tfmt.Fprintf(f, \"%%!%c(BADVERB)\", verb)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/feature.go",
    "content": "package internal\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"runtime\"\n\t\"strings\"\n\t\"sync\"\n)\n\n// ErrNotSupported indicates that a feature is not supported.\nvar ErrNotSupported = errors.New(\"not supported\")\n\n// ErrNotSupportedOnOS indicates that a feature is not supported on the current\n// operating system.\nvar ErrNotSupportedOnOS = fmt.Errorf(\"%w on %s\", ErrNotSupported, runtime.GOOS)\n\n// UnsupportedFeatureError is returned by FeatureTest() functions.\ntype UnsupportedFeatureError struct {\n\t// The minimum version required for this feature.\n\t//\n\t// On Linux this refers to the mainline kernel version, on other platforms\n\t// to the version of the runtime.\n\t//\n\t// Used for the error string, and for sanity checking during testing.\n\tMinimumVersion Version\n\n\t// The name of the feature that isn't supported.\n\tName string\n}\n\nfunc (ufe *UnsupportedFeatureError) Error() string {\n\tif ufe.MinimumVersion.Unspecified() {\n\t\treturn fmt.Sprintf(\"%s not supported\", ufe.Name)\n\t}\n\treturn fmt.Sprintf(\"%s not supported (requires >= %s)\", ufe.Name, ufe.MinimumVersion)\n}\n\n// Is indicates that UnsupportedFeatureError is ErrNotSupported.\nfunc (ufe *UnsupportedFeatureError) Is(target error) bool {\n\treturn target == ErrNotSupported\n}\n\n// FeatureTest caches the result of a [FeatureTestFn].\n//\n// Fields should not be modified after creation.\ntype FeatureTest struct {\n\t// The name of the feature being detected.\n\tName string\n\t// Version in the form Major.Minor[.Patch].\n\tVersion string\n\t// The feature test itself.\n\tFn FeatureTestFn\n\n\tmu     sync.RWMutex\n\tdone   bool\n\tresult error\n}\n\n// FeatureTestFn is used to determine whether the kernel supports\n// a certain feature.\n//\n// The return values have the following semantics:\n//\n//\terr == ErrNotSupported: the feature is not available\n//\terr == nil: the feature is available\n//\terr != nil: the test couldn't be executed\ntype FeatureTestFn func() error\n\n// NewFeatureTest is a convenient way to create a single [FeatureTest].\n//\n// versions specifies in which version of a BPF runtime a feature appeared.\n// The format is \"GOOS:Major.Minor[.Patch]\". GOOS may be omitted when targeting\n// Linux. Returns [ErrNotSupportedOnOS] if there is no version specified for the\n// current OS.\nfunc NewFeatureTest(name string, fn FeatureTestFn, versions ...string) func() error {\n\tconst nativePrefix = runtime.GOOS + \":\"\n\n\tif len(versions) == 0 {\n\t\treturn func() error {\n\t\t\treturn fmt.Errorf(\"feature test %q: no versions specified\", name)\n\t\t}\n\t}\n\n\tft := &FeatureTest{\n\t\tName: name,\n\t\tFn:   fn,\n\t}\n\n\tfor _, version := range versions {\n\t\tif strings.HasPrefix(version, nativePrefix) {\n\t\t\tft.Version = strings.TrimPrefix(version, nativePrefix)\n\t\t\tbreak\n\t\t}\n\n\t\tif OnLinux && !strings.ContainsRune(version, ':') {\n\t\t\t// Allow version numbers without a GOOS prefix on Linux.\n\t\t\tft.Version = version\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif ft.Version == \"\" {\n\t\treturn func() error {\n\t\t\t// We don't return an UnsupportedFeatureError here, since that will\n\t\t\t// trigger version checks which don't make sense.\n\t\t\treturn fmt.Errorf(\"%s: %w\", name, ErrNotSupportedOnOS)\n\t\t}\n\t}\n\n\treturn ft.execute\n}\n\n// execute the feature test.\n//\n// The result is cached if the test is conclusive.\n//\n// See [FeatureTestFn] for the meaning of the returned error.\nfunc (ft *FeatureTest) execute() error {\n\tft.mu.RLock()\n\tresult, done := ft.result, ft.done\n\tft.mu.RUnlock()\n\n\tif done {\n\t\treturn result\n\t}\n\n\tft.mu.Lock()\n\tdefer ft.mu.Unlock()\n\n\t// The test may have been executed by another caller while we were\n\t// waiting to acquire ft.mu.\n\tif ft.done {\n\t\treturn ft.result\n\t}\n\n\terr := ft.Fn()\n\tif err == nil {\n\t\tft.done = true\n\t\treturn nil\n\t}\n\n\tif errors.Is(err, ErrNotSupported) {\n\t\tvar v Version\n\t\tif ft.Version != \"\" {\n\t\t\tv, err = NewVersion(ft.Version)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"feature %s: %w\", ft.Name, err)\n\t\t\t}\n\t\t}\n\n\t\tft.done = true\n\t\tft.result = &UnsupportedFeatureError{\n\t\t\tMinimumVersion: v,\n\t\t\tName:           ft.Name,\n\t\t}\n\n\t\treturn ft.result\n\t}\n\n\t// We couldn't execute the feature test to a point\n\t// where it could make a determination.\n\t// Don't cache the result, just return it.\n\treturn fmt.Errorf(\"detect support for %s: %w\", ft.Name, err)\n}\n\n// FeatureMatrix groups multiple related feature tests into a map.\n//\n// Useful when there is a small number of discrete features which are known\n// at compile time.\n//\n// It must not be modified concurrently with calling [FeatureMatrix.Result].\ntype FeatureMatrix[K comparable] map[K]*FeatureTest\n\n// Result returns the outcome of the feature test for the given key.\n//\n// It's safe to call this function concurrently.\nfunc (fm FeatureMatrix[K]) Result(key K) error {\n\tft, ok := fm[key]\n\tif !ok {\n\t\treturn fmt.Errorf(\"no feature probe for %v\", key)\n\t}\n\n\treturn ft.execute()\n}\n\n// FeatureCache caches a potentially unlimited number of feature probes.\n//\n// Useful when there is a high cardinality for a feature test.\ntype FeatureCache[K comparable] struct {\n\tmu       sync.RWMutex\n\tnewTest  func(K) *FeatureTest\n\tfeatures map[K]*FeatureTest\n}\n\nfunc NewFeatureCache[K comparable](newTest func(K) *FeatureTest) *FeatureCache[K] {\n\treturn &FeatureCache[K]{\n\t\tnewTest:  newTest,\n\t\tfeatures: make(map[K]*FeatureTest),\n\t}\n}\n\nfunc (fc *FeatureCache[K]) Result(key K) error {\n\t// NB: Executing the feature test happens without fc.mu taken.\n\treturn fc.retrieve(key).execute()\n}\n\nfunc (fc *FeatureCache[K]) retrieve(key K) *FeatureTest {\n\tfc.mu.RLock()\n\tft := fc.features[key]\n\tfc.mu.RUnlock()\n\n\tif ft != nil {\n\t\treturn ft\n\t}\n\n\tfc.mu.Lock()\n\tdefer fc.mu.Unlock()\n\n\tif ft := fc.features[key]; ft != nil {\n\t\treturn ft\n\t}\n\n\tft = fc.newTest(key)\n\tfc.features[key] = ft\n\treturn ft\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/goos.go",
    "content": "package internal\n\nimport \"runtime\"\n\nconst (\n\tOnLinux = runtime.GOOS == \"linux\"\n)\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/io.go",
    "content": "package internal\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sync\"\n)\n\n// NewBufferedSectionReader wraps an io.ReaderAt in an appropriately-sized\n// buffered reader. It is a convenience function for reading subsections of\n// ELF sections while minimizing the amount of read() syscalls made.\n//\n// Syscall overhead is non-negligible in continuous integration context\n// where ELFs might be accessed over virtual filesystems with poor random\n// access performance. Buffering reads makes sense because (sub)sections\n// end up being read completely anyway.\n//\n// Use instead of the r.Seek() + io.LimitReader() pattern.\nfunc NewBufferedSectionReader(ra io.ReaderAt, off, n int64) *bufio.Reader {\n\t// Clamp the size of the buffer to one page to avoid slurping large parts\n\t// of a file into memory. bufio.NewReader uses a hardcoded default buffer\n\t// of 4096. Allow arches with larger pages to allocate more, but don't\n\t// allocate a fixed 4k buffer if we only need to read a small segment.\n\tbuf := n\n\tif ps := int64(os.Getpagesize()); n > ps {\n\t\tbuf = ps\n\t}\n\n\treturn bufio.NewReaderSize(io.NewSectionReader(ra, off, n), int(buf))\n}\n\n// DiscardZeroes makes sure that all written bytes are zero\n// before discarding them.\ntype DiscardZeroes struct{}\n\nfunc (DiscardZeroes) Write(p []byte) (int, error) {\n\tfor _, b := range p {\n\t\tif b != 0 {\n\t\t\treturn 0, errors.New(\"encountered non-zero byte\")\n\t\t}\n\t}\n\treturn len(p), nil\n}\n\n// ReadAllCompressed decompresses a gzipped file into memory.\nfunc ReadAllCompressed(file string) ([]byte, error) {\n\tfh, err := os.Open(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer fh.Close()\n\n\tgz, err := gzip.NewReader(fh)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer gz.Close()\n\n\treturn io.ReadAll(gz)\n}\n\n// ReadUint64FromFile reads a uint64 from a file.\n//\n// format specifies the contents of the file in fmt.Scanf syntax.\nfunc ReadUint64FromFile(format string, path ...string) (uint64, error) {\n\tfilename := filepath.Join(path...)\n\tdata, err := os.ReadFile(filename)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"reading file %q: %w\", filename, err)\n\t}\n\n\tvar value uint64\n\tn, err := fmt.Fscanf(bytes.NewReader(data), format, &value)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"parsing file %q: %w\", filename, err)\n\t}\n\tif n != 1 {\n\t\treturn 0, fmt.Errorf(\"parsing file %q: expected 1 item, got %d\", filename, n)\n\t}\n\n\treturn value, nil\n}\n\ntype uint64FromFileKey struct {\n\tformat, path string\n}\n\nvar uint64FromFileCache = struct {\n\tsync.RWMutex\n\tvalues map[uint64FromFileKey]uint64\n}{\n\tvalues: map[uint64FromFileKey]uint64{},\n}\n\n// ReadUint64FromFileOnce is like readUint64FromFile but memoizes the result.\nfunc ReadUint64FromFileOnce(format string, path ...string) (uint64, error) {\n\tfilename := filepath.Join(path...)\n\tkey := uint64FromFileKey{format, filename}\n\n\tuint64FromFileCache.RLock()\n\tif value, ok := uint64FromFileCache.values[key]; ok {\n\t\tuint64FromFileCache.RUnlock()\n\t\treturn value, nil\n\t}\n\tuint64FromFileCache.RUnlock()\n\n\tvalue, err := ReadUint64FromFile(format, filename)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tuint64FromFileCache.Lock()\n\tdefer uint64FromFileCache.Unlock()\n\n\tif value, ok := uint64FromFileCache.values[key]; ok {\n\t\t// Someone else got here before us, use what is cached.\n\t\treturn value, nil\n\t}\n\n\tuint64FromFileCache.values[key] = value\n\treturn value, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/kallsyms/cache.go",
    "content": "package kallsyms\n\nimport \"sync\"\n\ntype cache[K, V comparable] struct {\n\tm sync.Map\n}\n\nfunc (c *cache[K, V]) Load(key K) (value V, _ bool) {\n\tv, ok := c.m.Load(key)\n\tif !ok {\n\t\treturn value, false\n\t}\n\tvalue = v.(V)\n\treturn value, true\n}\n\nfunc (c *cache[K, V]) Store(key K, value V) {\n\tc.m.Store(key, value)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/kallsyms/kallsyms.go",
    "content": "package kallsyms\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"slices\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/internal\"\n)\n\nvar errAmbiguousKsym = errors.New(\"multiple kernel symbols with the same name\")\n\nvar symAddrs cache[string, uint64]\nvar symModules cache[string, string]\n\n// Module returns the kernel module providing the given symbol in the kernel, if\n// any. Returns an empty string and no error if the symbol is not present in the\n// kernel. Only function symbols are considered. Returns an error if multiple\n// symbols with the same name were found.\n//\n// Consider [AssignModules] if you need to resolve multiple symbols, as it will\n// only perform one iteration over /proc/kallsyms.\nfunc Module(name string) (string, error) {\n\tif name == \"\" {\n\t\treturn \"\", nil\n\t}\n\n\tif mod, ok := symModules.Load(name); ok {\n\t\treturn mod, nil\n\t}\n\n\trequest := map[string]string{name: \"\"}\n\tif err := AssignModules(request); err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn request[name], nil\n}\n\n// AssignModules looks up the kernel module providing each given symbol, if any,\n// and assigns them to their corresponding values in the symbols map. Only\n// function symbols are considered. Results of all lookups are cached,\n// successful or otherwise.\n//\n// Any symbols missing in the kernel are ignored. Returns an error if multiple\n// symbols with a given name were found.\nfunc AssignModules(symbols map[string]string) error {\n\tif !internal.OnLinux {\n\t\treturn fmt.Errorf(\"read /proc/kallsyms: %w\", internal.ErrNotSupportedOnOS)\n\t}\n\n\tif len(symbols) == 0 {\n\t\treturn nil\n\t}\n\n\t// Attempt to fetch symbols from cache.\n\trequest := make(map[string]string)\n\tfor name := range symbols {\n\t\tif mod, ok := symModules.Load(name); ok {\n\t\t\tsymbols[name] = mod\n\t\t\tcontinue\n\t\t}\n\n\t\t// Mark the symbol to be read from /proc/kallsyms.\n\t\trequest[name] = \"\"\n\t}\n\tif len(request) == 0 {\n\t\t// All symbols satisfied from cache.\n\t\treturn nil\n\t}\n\n\tf, err := os.Open(\"/proc/kallsyms\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\tif err := assignModules(f, request); err != nil {\n\t\treturn fmt.Errorf(\"assigning symbol modules: %w\", err)\n\t}\n\n\t// Update the cache with the new symbols. Cache all requested symbols, even if\n\t// they're missing or don't belong to a module.\n\tfor name, mod := range request {\n\t\tsymModules.Store(name, mod)\n\t\tsymbols[name] = mod\n\t}\n\n\treturn nil\n}\n\n// assignModules assigns kernel symbol modules read from f to values requested\n// by symbols. Always scans the whole input to make sure the user didn't request\n// an ambiguous symbol.\nfunc assignModules(f io.Reader, symbols map[string]string) error {\n\tif len(symbols) == 0 {\n\t\treturn nil\n\t}\n\n\tfound := make(map[string]struct{})\n\tr := newReader(f)\n\tfor r.Line() {\n\t\t// Only look for function symbols in the kernel's text section (tT).\n\t\ts, err, skip := parseSymbol(r, []rune{'t', 'T'})\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"parsing kallsyms line: %w\", err)\n\t\t}\n\t\tif skip {\n\t\t\tcontinue\n\t\t}\n\n\t\tif _, requested := symbols[s.name]; !requested {\n\t\t\tcontinue\n\t\t}\n\n\t\tif _, ok := found[s.name]; ok {\n\t\t\t// We've already seen this symbol. Return an error to avoid silently\n\t\t\t// attaching to a symbol in the wrong module. libbpf also rejects\n\t\t\t// referring to ambiguous symbols.\n\t\t\t//\n\t\t\t// We can't simply check if we already have a value for the given symbol,\n\t\t\t// since many won't have an associated kernel module.\n\t\t\treturn fmt.Errorf(\"symbol %s: duplicate found at address 0x%x (module %q): %w\",\n\t\t\t\ts.name, s.addr, s.mod, errAmbiguousKsym)\n\t\t}\n\n\t\tsymbols[s.name] = s.mod\n\t\tfound[s.name] = struct{}{}\n\t}\n\tif err := r.Err(); err != nil {\n\t\treturn fmt.Errorf(\"reading kallsyms: %w\", err)\n\t}\n\n\treturn nil\n}\n\n// Address returns the address of the given symbol in the kernel. Returns 0 and\n// no error if the symbol is not present. Returns an error if multiple addresses\n// were found for a symbol.\n//\n// Consider [AssignAddresses] if you need to resolve multiple symbols, as it\n// will only perform one iteration over /proc/kallsyms.\nfunc Address(symbol string) (uint64, error) {\n\tif symbol == \"\" {\n\t\treturn 0, nil\n\t}\n\n\tif addr, ok := symAddrs.Load(symbol); ok {\n\t\treturn addr, nil\n\t}\n\n\trequest := map[string]uint64{symbol: 0}\n\tif err := AssignAddresses(request); err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn request[symbol], nil\n}\n\n// AssignAddresses looks up the addresses of the requested symbols in the kernel\n// and assigns them to their corresponding values in the symbols map. Results\n// of all lookups are cached, successful or otherwise.\n//\n// Any symbols missing in the kernel are ignored. Returns an error if multiple\n// addresses were found for a symbol.\nfunc AssignAddresses(symbols map[string]uint64) error {\n\tif !internal.OnLinux {\n\t\treturn fmt.Errorf(\"read /proc/kallsyms: %w\", internal.ErrNotSupportedOnOS)\n\t}\n\n\tif len(symbols) == 0 {\n\t\treturn nil\n\t}\n\n\t// Attempt to fetch symbols from cache.\n\trequest := make(map[string]uint64)\n\tfor name := range symbols {\n\t\tif addr, ok := symAddrs.Load(name); ok {\n\t\t\tsymbols[name] = addr\n\t\t\tcontinue\n\t\t}\n\n\t\t// Mark the symbol to be read from /proc/kallsyms.\n\t\trequest[name] = 0\n\t}\n\tif len(request) == 0 {\n\t\t// All symbols satisfied from cache.\n\t\treturn nil\n\t}\n\n\tf, err := os.Open(\"/proc/kallsyms\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\tif err := assignAddresses(f, request); err != nil {\n\t\treturn fmt.Errorf(\"loading symbol addresses: %w\", err)\n\t}\n\n\t// Update the cache with the new symbols. Cache all requested symbols even if\n\t// they weren't found, to avoid repeated lookups.\n\tfor name, addr := range request {\n\t\tsymAddrs.Store(name, addr)\n\t\tsymbols[name] = addr\n\t}\n\n\treturn nil\n}\n\n// assignAddresses assigns kernel symbol addresses read from f to values\n// requested by symbols. Always scans the whole input to make sure the user\n// didn't request an ambiguous symbol.\nfunc assignAddresses(f io.Reader, symbols map[string]uint64) error {\n\tif len(symbols) == 0 {\n\t\treturn nil\n\t}\n\tr := newReader(f)\n\tfor r.Line() {\n\t\ts, err, skip := parseSymbol(r, nil)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"parsing kallsyms line: %w\", err)\n\t\t}\n\t\tif skip {\n\t\t\tcontinue\n\t\t}\n\n\t\texisting, requested := symbols[s.name]\n\t\tif existing != 0 {\n\t\t\t// Multiple addresses for a symbol have been found. Return a friendly\n\t\t\t// error to avoid silently attaching to the wrong symbol. libbpf also\n\t\t\t// rejects referring to ambiguous symbols.\n\t\t\treturn fmt.Errorf(\"symbol %s(0x%x): duplicate found at address 0x%x: %w\", s.name, existing, s.addr, errAmbiguousKsym)\n\t\t}\n\t\tif requested {\n\t\t\tsymbols[s.name] = s.addr\n\t\t}\n\t}\n\tif err := r.Err(); err != nil {\n\t\treturn fmt.Errorf(\"reading kallsyms: %w\", err)\n\t}\n\n\treturn nil\n}\n\ntype ksym struct {\n\taddr uint64\n\tname string\n\tmod  string\n}\n\n// parseSymbol parses a line from /proc/kallsyms into an address, type, name and\n// module. Skip will be true if the symbol doesn't match any of the given symbol\n// types. See `man 1 nm` for all available types.\n//\n// Example line: `ffffffffc1682010 T nf_nat_init  [nf_nat]`\nfunc parseSymbol(r *reader, types []rune) (s ksym, err error, skip bool) {\n\tfor i := 0; r.Word(); i++ {\n\t\tswitch i {\n\t\t// Address of the symbol.\n\t\tcase 0:\n\t\t\ts.addr, err = strconv.ParseUint(r.Text(), 16, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn s, fmt.Errorf(\"parsing address: %w\", err), false\n\t\t\t}\n\t\t// Type of the symbol. Assume the character is ASCII-encoded by converting\n\t\t// it directly to a rune, since it's a fixed field controlled by the kernel.\n\t\tcase 1:\n\t\t\tif len(types) > 0 && !slices.Contains(types, rune(r.Bytes()[0])) {\n\t\t\t\treturn s, nil, true\n\t\t\t}\n\t\t// Name of the symbol.\n\t\tcase 2:\n\t\t\ts.name = r.Text()\n\t\t// Kernel module the symbol is provided by.\n\t\tcase 3:\n\t\t\ts.mod = strings.Trim(r.Text(), \"[]\")\n\t\t// Ignore any future fields.\n\t\tdefault:\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/kallsyms/reader.go",
    "content": "package kallsyms\n\nimport (\n\t\"bufio\"\n\t\"io\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\n// reader is a line and word-oriented reader built for reading /proc/kallsyms.\n// It takes an io.Reader and iterates its contents line by line, then word by\n// word.\n//\n// It's designed to allow partial reading of lines without paying the cost of\n// allocating objects that will never be accessed, resulting in less work for\n// the garbage collector.\ntype reader struct {\n\ts    *bufio.Scanner\n\tline []byte\n\tword []byte\n\n\terr error\n}\n\nfunc newReader(r io.Reader) *reader {\n\treturn &reader{\n\t\ts: bufio.NewScanner(r),\n\t}\n}\n\n// Bytes returns the current word as a byte slice.\nfunc (r *reader) Bytes() []byte {\n\treturn r.word\n}\n\n// Text returns the output of Bytes as a string.\nfunc (r *reader) Text() string {\n\treturn string(r.Bytes())\n}\n\n// Line advances the reader to the next line in the input. Calling Line resets\n// the current word, making [reader.Bytes] and [reader.Text] return empty\n// values. Follow this up with a call to [reader.Word].\n//\n// Like [bufio.Scanner], [reader.Err] needs to be checked after Line returns\n// false to determine if an error occurred during reading.\n//\n// Returns true if Line can be called again. Returns false if all lines in the\n// input have been read.\nfunc (r *reader) Line() bool {\n\tfor r.s.Scan() {\n\t\tline := r.s.Bytes()\n\t\tif len(line) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tr.line = line\n\t\tr.word = nil\n\n\t\treturn true\n\t}\n\tif err := r.s.Err(); err != nil {\n\t\tr.err = err\n\t}\n\n\treturn false\n}\n\n// Word advances the reader to the next word in the current line.\n//\n// Returns true if a word is found and Word should be called again. Returns\n// false when all words on the line have been read.\nfunc (r *reader) Word() bool {\n\tif len(r.line) == 0 {\n\t\treturn false\n\t}\n\n\t// Find next word start, skipping leading spaces.\n\tstart := 0\n\tfor width := 0; start < len(r.line); start += width {\n\t\tvar c rune\n\t\tc, width = utf8.DecodeRune(r.line[start:])\n\t\tif !unicode.IsSpace(c) {\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// Whitespace scanning reached the end of the line due to trailing whitespace,\n\t// meaning there are no more words to read\n\tif start == len(r.line) {\n\t\treturn false\n\t}\n\n\t// Find next word end.\n\tfor width, i := 0, start; i < len(r.line); i += width {\n\t\tvar c rune\n\t\tc, width = utf8.DecodeRune(r.line[i:])\n\t\tif unicode.IsSpace(c) {\n\t\t\tr.word = r.line[start:i]\n\t\t\tr.line = r.line[i:]\n\t\t\treturn true\n\t\t}\n\t}\n\n\t// The line contains data, but no end-of-word boundary was found. This is the\n\t// last, unterminated word in the line.\n\tif len(r.line) > start {\n\t\tr.word = r.line[start:]\n\t\tr.line = nil\n\t\treturn true\n\t}\n\n\treturn false\n}\n\nfunc (r *reader) Err() error {\n\treturn r.err\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/kconfig/kconfig.go",
    "content": "// Package kconfig implements a parser for the format of Linux's .config file.\npackage kconfig\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n)\n\n// Parse parses the kconfig file for which a reader is given.\n// All the CONFIG_* which are in filter and which are set set will be\n// put in the returned map as key with their corresponding value as map value.\n// If filter is nil, no filtering will occur.\n// If the kconfig file is not valid, error will be returned.\nfunc Parse(source io.ReaderAt, filter map[string]struct{}) (map[string]string, error) {\n\tvar r io.Reader\n\tzr, err := gzip.NewReader(io.NewSectionReader(source, 0, math.MaxInt64))\n\tif err != nil {\n\t\tr = io.NewSectionReader(source, 0, math.MaxInt64)\n\t} else {\n\t\t// Source is gzip compressed, transparently decompress.\n\t\tr = zr\n\t}\n\n\tret := make(map[string]string, len(filter))\n\n\ts := bufio.NewScanner(r)\n\n\tfor s.Scan() {\n\t\tline := s.Bytes()\n\t\terr = processKconfigLine(line, ret, filter)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"cannot parse line: %w\", err)\n\t\t}\n\n\t\tif filter != nil && len(ret) == len(filter) {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif err := s.Err(); err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot parse: %w\", err)\n\t}\n\n\tif zr != nil {\n\t\treturn ret, zr.Close()\n\t}\n\n\treturn ret, nil\n}\n\n// Golang translation of libbpf bpf_object__process_kconfig_line():\n// https://github.com/libbpf/libbpf/blob/fbd60dbff51c870f5e80a17c4f2fd639eb80af90/src/libbpf.c#L1874\n// It does the same checks but does not put the data inside the BPF map.\nfunc processKconfigLine(line []byte, m map[string]string, filter map[string]struct{}) error {\n\t// Ignore empty lines and \"# CONFIG_* is not set\".\n\tif !bytes.HasPrefix(line, []byte(\"CONFIG_\")) {\n\t\treturn nil\n\t}\n\n\tkey, value, found := bytes.Cut(line, []byte{'='})\n\tif !found {\n\t\treturn fmt.Errorf(\"line %q does not contain separator '='\", line)\n\t}\n\n\tif len(value) == 0 {\n\t\treturn fmt.Errorf(\"line %q has no value\", line)\n\t}\n\n\tif filter != nil {\n\t\t// NB: map[string(key)] gets special optimisation help from the compiler\n\t\t// and doesn't allocate. Don't turn this into a variable.\n\t\t_, ok := filter[string(key)]\n\t\tif !ok {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t// This can seem odd, but libbpf only sets the value the first time the key is\n\t// met:\n\t// https://github.com/torvalds/linux/blob/0d85b27b0cc6/tools/lib/bpf/libbpf.c#L1906-L1908\n\t_, ok := m[string(key)]\n\tif !ok {\n\t\tm[string(key)] = string(value)\n\t}\n\n\treturn nil\n}\n\n// PutValue translates the value given as parameter depending on the BTF\n// type, the translated value is then written to the byte array.\nfunc PutValue(data []byte, typ btf.Type, value string) error {\n\ttyp = btf.UnderlyingType(typ)\n\n\tswitch value {\n\tcase \"y\", \"n\", \"m\":\n\t\treturn putValueTri(data, typ, value)\n\t}\n\n\tif strings.HasPrefix(value, `\"`) {\n\t\treturn putValueString(data, typ, value)\n\t}\n\n\treturn putValueNumber(data, typ, value)\n}\n\n// Golang translation of libbpf_tristate enum:\n// https://github.com/libbpf/libbpf/blob/fbd60dbff51c870f5e80a17c4f2fd639eb80af90/src/bpf_helpers.h#L169\ntype triState int\n\nconst (\n\tTriNo     triState = 0\n\tTriYes    triState = 1\n\tTriModule triState = 2\n)\n\nfunc putValueTri(data []byte, typ btf.Type, value string) error {\n\tswitch v := typ.(type) {\n\tcase *btf.Int:\n\t\tif v.Encoding != btf.Bool {\n\t\t\treturn fmt.Errorf(\"cannot add tri value, expected btf.Bool, got: %v\", v.Encoding)\n\t\t}\n\n\t\tif v.Size != 1 {\n\t\t\treturn fmt.Errorf(\"cannot add tri value, expected size of 1 byte, got: %d\", v.Size)\n\t\t}\n\n\t\tswitch value {\n\t\tcase \"y\":\n\t\t\tdata[0] = 1\n\t\tcase \"n\":\n\t\t\tdata[0] = 0\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"cannot use %q for btf.Bool\", value)\n\t\t}\n\tcase *btf.Enum:\n\t\tif v.Name != \"libbpf_tristate\" {\n\t\t\treturn fmt.Errorf(\"cannot use enum %q, only libbpf_tristate is supported\", v.Name)\n\t\t}\n\n\t\tif len(data) != 4 {\n\t\t\treturn fmt.Errorf(\"expected enum value to occupy 4 bytes in datasec, got: %d\", len(data))\n\t\t}\n\n\t\tvar tri triState\n\t\tswitch value {\n\t\tcase \"y\":\n\t\t\ttri = TriYes\n\t\tcase \"m\":\n\t\t\ttri = TriModule\n\t\tcase \"n\":\n\t\t\ttri = TriNo\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"value %q is not supported for libbpf_tristate\", value)\n\t\t}\n\n\t\tinternal.NativeEndian.PutUint32(data, uint32(tri))\n\tdefault:\n\t\treturn fmt.Errorf(\"cannot add number value, expected btf.Int or btf.Enum, got: %T\", v)\n\t}\n\n\treturn nil\n}\n\nfunc putValueString(data []byte, typ btf.Type, value string) error {\n\tarray, ok := typ.(*btf.Array)\n\tif !ok {\n\t\treturn fmt.Errorf(\"cannot add string value, expected btf.Array, got %T\", array)\n\t}\n\n\tcontentType, ok := btf.UnderlyingType(array.Type).(*btf.Int)\n\tif !ok {\n\t\treturn fmt.Errorf(\"cannot add string value, expected array of btf.Int, got %T\", contentType)\n\t}\n\n\t// Any Int, which is not bool, of one byte could be used to store char:\n\t// https://github.com/torvalds/linux/blob/1a5304fecee5/tools/lib/bpf/libbpf.c#L3637-L3638\n\tif contentType.Size != 1 && contentType.Encoding != btf.Bool {\n\t\treturn fmt.Errorf(\"cannot add string value, expected array of btf.Int of size 1, got array of btf.Int of size: %v\", contentType.Size)\n\t}\n\n\tif !strings.HasPrefix(value, `\"`) || !strings.HasSuffix(value, `\"`) {\n\t\treturn fmt.Errorf(`value %q must start and finish with '\"'`, value)\n\t}\n\n\tstr := strings.Trim(value, `\"`)\n\n\t// We need to trim string if the bpf array is smaller.\n\tif uint32(len(str)) >= array.Nelems {\n\t\tstr = str[:array.Nelems]\n\t}\n\n\t// Write the string content to .kconfig.\n\tcopy(data, str)\n\n\treturn nil\n}\n\nfunc putValueNumber(data []byte, typ btf.Type, value string) error {\n\tinteger, ok := typ.(*btf.Int)\n\tif !ok {\n\t\treturn fmt.Errorf(\"cannot add number value, expected *btf.Int, got: %T\", integer)\n\t}\n\n\tsize := integer.Size\n\tsizeInBits := size * 8\n\n\tvar n uint64\n\tvar err error\n\tif integer.Encoding == btf.Signed {\n\t\tparsed, e := strconv.ParseInt(value, 0, int(sizeInBits))\n\n\t\tn = uint64(parsed)\n\t\terr = e\n\t} else {\n\t\tparsed, e := strconv.ParseUint(value, 0, int(sizeInBits))\n\n\t\tn = uint64(parsed)\n\t\terr = e\n\t}\n\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot parse value: %w\", err)\n\t}\n\n\treturn PutInteger(data, integer, n)\n}\n\n// PutInteger writes n into data.\n//\n// integer determines how much is written into data and what the valid values\n// are.\nfunc PutInteger(data []byte, integer *btf.Int, n uint64) error {\n\t// This function should match set_kcfg_value_num in libbpf.\n\tif integer.Encoding == btf.Bool && n > 1 {\n\t\treturn fmt.Errorf(\"invalid boolean value: %d\", n)\n\t}\n\n\tif len(data) < int(integer.Size) {\n\t\treturn fmt.Errorf(\"can't fit an integer of size %d into a byte slice of length %d\", integer.Size, len(data))\n\t}\n\n\tswitch integer.Size {\n\tcase 1:\n\t\tif integer.Encoding == btf.Signed && (int64(n) > math.MaxInt8 || int64(n) < math.MinInt8) {\n\t\t\treturn fmt.Errorf(\"can't represent %d as a signed integer of size %d\", int64(n), integer.Size)\n\t\t}\n\t\tdata[0] = byte(n)\n\tcase 2:\n\t\tif integer.Encoding == btf.Signed && (int64(n) > math.MaxInt16 || int64(n) < math.MinInt16) {\n\t\t\treturn fmt.Errorf(\"can't represent %d as a signed integer of size %d\", int64(n), integer.Size)\n\t\t}\n\t\tinternal.NativeEndian.PutUint16(data, uint16(n))\n\tcase 4:\n\t\tif integer.Encoding == btf.Signed && (int64(n) > math.MaxInt32 || int64(n) < math.MinInt32) {\n\t\t\treturn fmt.Errorf(\"can't represent %d as a signed integer of size %d\", int64(n), integer.Size)\n\t\t}\n\t\tinternal.NativeEndian.PutUint32(data, uint32(n))\n\tcase 8:\n\t\tinternal.NativeEndian.PutUint64(data, uint64(n))\n\tdefault:\n\t\treturn fmt.Errorf(\"size (%d) is not valid, expected: 1, 2, 4 or 8\", integer.Size)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/linux/auxv.go",
    "content": "package linux\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\ntype auxvPairReader interface {\n\tClose() error\n\tReadAuxvPair() (uint64, uint64, error)\n}\n\n// See https://elixir.bootlin.com/linux/v6.5.5/source/include/uapi/linux/auxvec.h\nconst (\n\t_AT_NULL         = 0  // End of vector\n\t_AT_SYSINFO_EHDR = 33 // Offset to vDSO blob in process image\n)\n\ntype auxvRuntimeReader struct {\n\tdata  [][2]uintptr\n\tindex int\n}\n\nfunc (r *auxvRuntimeReader) Close() error {\n\treturn nil\n}\n\nfunc (r *auxvRuntimeReader) ReadAuxvPair() (uint64, uint64, error) {\n\tif r.index >= len(r.data)+2 {\n\t\treturn 0, 0, io.EOF\n\t}\n\n\t// we manually add the (_AT_NULL, _AT_NULL) pair at the end\n\t// that is not provided by the go runtime\n\tvar tag, value uintptr\n\tif r.index < len(r.data) {\n\t\ttag, value = r.data[r.index][0], r.data[r.index][1]\n\t} else {\n\t\ttag, value = _AT_NULL, _AT_NULL\n\t}\n\tr.index += 1\n\treturn uint64(tag), uint64(value), nil\n}\n\nfunc newAuxvRuntimeReader() (auxvPairReader, error) {\n\tif !internal.OnLinux {\n\t\treturn nil, fmt.Errorf(\"read auxv from runtime: %w\", internal.ErrNotSupportedOnOS)\n\t}\n\n\tdata, err := unix.Auxv()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"read auxv from runtime: %w\", err)\n\t}\n\n\treturn &auxvRuntimeReader{\n\t\tdata:  data,\n\t\tindex: 0,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/linux/doc.go",
    "content": "// Package linux contains OS specific wrappers around package unix.\npackage linux\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/linux/kconfig.go",
    "content": "package linux\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\n// FindKConfig searches for a kconfig file on the host.\n//\n// It first reads from /boot/config- of the current running kernel and tries\n// /proc/config.gz if nothing was found in /boot.\n// If none of the file provide a kconfig, it returns an error.\nfunc FindKConfig() (*os.File, error) {\n\tkernelRelease, err := KernelRelease()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot get kernel release: %w\", err)\n\t}\n\n\tpath := \"/boot/config-\" + kernelRelease\n\tf, err := os.Open(path)\n\tif err == nil {\n\t\treturn f, nil\n\t}\n\n\tf, err = os.Open(\"/proc/config.gz\")\n\tif err == nil {\n\t\treturn f, nil\n\t}\n\n\treturn nil, fmt.Errorf(\"neither %s nor /proc/config.gz provide a kconfig\", path)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/linux/platform.go",
    "content": "package linux\n\nimport (\n\t\"runtime\"\n)\n\n// PlatformPrefix returns the platform-dependent syscall wrapper prefix used by\n// the linux kernel.\n//\n// Based on https://github.com/golang/go/blob/master/src/go/build/syslist.go\n// and https://github.com/libbpf/libbpf/blob/master/src/libbpf.c#L10047\nfunc PlatformPrefix() string {\n\tswitch runtime.GOARCH {\n\tcase \"386\":\n\t\treturn \"__ia32_\"\n\tcase \"amd64\", \"amd64p32\":\n\t\treturn \"__x64_\"\n\n\tcase \"arm\", \"armbe\":\n\t\treturn \"__arm_\"\n\tcase \"arm64\", \"arm64be\":\n\t\treturn \"__arm64_\"\n\n\tcase \"mips\", \"mipsle\", \"mips64\", \"mips64le\", \"mips64p32\", \"mips64p32le\":\n\t\treturn \"__mips_\"\n\n\tcase \"s390\":\n\t\treturn \"__s390_\"\n\tcase \"s390x\":\n\t\treturn \"__s390x_\"\n\n\tcase \"riscv\", \"riscv64\":\n\t\treturn \"__riscv_\"\n\n\tcase \"ppc\":\n\t\treturn \"__powerpc_\"\n\tcase \"ppc64\", \"ppc64le\":\n\t\treturn \"__powerpc64_\"\n\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/linux/statfs.go",
    "content": "package linux\n\nimport (\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nfunc FSType(path string) (int64, error) {\n\tvar statfs unix.Statfs_t\n\tif err := unix.Statfs(path, &statfs); err != nil {\n\t\treturn 0, err\n\t}\n\n\tfsType := int64(statfs.Type)\n\tif unsafe.Sizeof(statfs.Type) == 4 {\n\t\t// We're on a 32 bit arch, where statfs.Type is int32. bpfFSType is a\n\t\t// negative number when interpreted as int32 so we need to cast via\n\t\t// uint32 to avoid sign extension.\n\t\tfsType = int64(uint32(statfs.Type))\n\t}\n\treturn fsType, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/linux/vdso.go",
    "content": "package linux\n\nimport (\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"os\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nvar (\n\terrAuxvNoVDSO = errors.New(\"no vdso address found in auxv\")\n)\n\n// vdsoVersion returns the LINUX_VERSION_CODE embedded in the vDSO library\n// linked into the current process image.\nfunc vdsoVersion() (uint32, error) {\n\tav, err := newAuxvRuntimeReader()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tdefer av.Close()\n\n\tvdsoAddr, err := vdsoMemoryAddress(av)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"finding vDSO memory address: %w\", err)\n\t}\n\n\t// Use /proc/self/mem rather than unsafe.Pointer tricks.\n\tmem, err := os.Open(\"/proc/self/mem\")\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"opening mem: %w\", err)\n\t}\n\tdefer mem.Close()\n\n\t// Open ELF at provided memory address, as offset into /proc/self/mem.\n\tc, err := vdsoLinuxVersionCode(io.NewSectionReader(mem, int64(vdsoAddr), math.MaxInt64))\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"reading linux version code: %w\", err)\n\t}\n\n\treturn c, nil\n}\n\n// vdsoMemoryAddress returns the memory address of the vDSO library\n// linked into the current process image. r is an io.Reader into an auxv blob.\nfunc vdsoMemoryAddress(r auxvPairReader) (uintptr, error) {\n\t// Loop through all tag/value pairs in auxv until we find `AT_SYSINFO_EHDR`,\n\t// the address of a page containing the virtual Dynamic Shared Object (vDSO).\n\tfor {\n\t\ttag, value, err := r.ReadAuxvPair()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\tswitch tag {\n\t\tcase _AT_SYSINFO_EHDR:\n\t\t\tif value != 0 {\n\t\t\t\treturn uintptr(value), nil\n\t\t\t}\n\t\t\treturn 0, fmt.Errorf(\"invalid vDSO address in auxv\")\n\t\t// _AT_NULL is always the last tag/val pair in the aux vector\n\t\t// and can be treated like EOF.\n\t\tcase _AT_NULL:\n\t\t\treturn 0, errAuxvNoVDSO\n\t\t}\n\t}\n}\n\n// format described at https://www.man7.org/linux/man-pages/man5/elf.5.html in section 'Notes (Nhdr)'\ntype elfNoteHeader struct {\n\tNameSize int32\n\tDescSize int32\n\tType     int32\n}\n\n// vdsoLinuxVersionCode returns the LINUX_VERSION_CODE embedded in\n// the ELF notes section of the binary provided by the reader.\nfunc vdsoLinuxVersionCode(r io.ReaderAt) (uint32, error) {\n\thdr, err := internal.NewSafeELFFile(r)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"reading vDSO ELF: %w\", err)\n\t}\n\n\tsections := hdr.SectionsByType(elf.SHT_NOTE)\n\tif len(sections) == 0 {\n\t\treturn 0, fmt.Errorf(\"no note section found in vDSO ELF\")\n\t}\n\n\tfor _, sec := range sections {\n\t\tsr := sec.Open()\n\t\tvar n elfNoteHeader\n\n\t\t// Read notes until we find one named 'Linux'.\n\t\tfor {\n\t\t\tif err := binary.Read(sr, hdr.ByteOrder, &n); err != nil {\n\t\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t\t// We looked at all the notes in this section\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\treturn 0, fmt.Errorf(\"reading note header: %w\", err)\n\t\t\t}\n\n\t\t\t// If a note name is defined, it follows the note header.\n\t\t\tvar name string\n\t\t\tif n.NameSize > 0 {\n\t\t\t\t// Read the note name, aligned to 4 bytes.\n\t\t\t\tbuf := make([]byte, internal.Align(n.NameSize, 4))\n\t\t\t\tif err := binary.Read(sr, hdr.ByteOrder, &buf); err != nil {\n\t\t\t\t\treturn 0, fmt.Errorf(\"reading note name: %w\", err)\n\t\t\t\t}\n\n\t\t\t\t// Read nul-terminated string.\n\t\t\t\tname = unix.ByteSliceToString(buf[:n.NameSize])\n\t\t\t}\n\n\t\t\t// If a note descriptor is defined, it follows the name.\n\t\t\t// It is possible for a note to have a descriptor but not a name.\n\t\t\tif n.DescSize > 0 {\n\t\t\t\t// LINUX_VERSION_CODE is a uint32 value.\n\t\t\t\tif name == \"Linux\" && n.DescSize == 4 && n.Type == 0 {\n\t\t\t\t\tvar version uint32\n\t\t\t\t\tif err := binary.Read(sr, hdr.ByteOrder, &version); err != nil {\n\t\t\t\t\t\treturn 0, fmt.Errorf(\"reading note descriptor: %w\", err)\n\t\t\t\t\t}\n\t\t\t\t\treturn version, nil\n\t\t\t\t}\n\n\t\t\t\t// Discard the note descriptor if it exists but we're not interested in it.\n\t\t\t\tif _, err := io.CopyN(io.Discard, sr, int64(internal.Align(n.DescSize, 4))); err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn 0, fmt.Errorf(\"no Linux note in ELF\")\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/linux/version.go",
    "content": "package linux\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// KernelVersion returns the version of the currently running kernel.\nvar KernelVersion = sync.OnceValues(detectKernelVersion)\n\n// detectKernelVersion returns the version of the running kernel.\nfunc detectKernelVersion() (internal.Version, error) {\n\tvc, err := vdsoVersion()\n\tif err != nil {\n\t\treturn internal.Version{}, err\n\t}\n\treturn internal.NewVersionFromCode(vc), nil\n}\n\n// KernelRelease returns the release string of the running kernel.\n// Its format depends on the Linux distribution and corresponds to directory\n// names in /lib/modules by convention. Some examples are 5.15.17-1-lts and\n// 4.19.0-16-amd64.\nfunc KernelRelease() (string, error) {\n\tvar uname unix.Utsname\n\tif err := unix.Uname(&uname); err != nil {\n\t\treturn \"\", fmt.Errorf(\"uname failed: %w\", err)\n\t}\n\n\treturn unix.ByteSliceToString(uname.Release[:]), nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/math.go",
    "content": "package internal\n\n// Align returns 'n' updated to 'alignment' boundary.\nfunc Align[I Integer](n, alignment I) I {\n\treturn (n + alignment - 1) / alignment * alignment\n}\n\n// IsPow returns true if n is a power of two.\nfunc IsPow[I Integer](n I) bool {\n\treturn n != 0 && (n&(n-1)) == 0\n}\n\n// Between returns the value clamped between a and b.\nfunc Between[I Integer](val, a, b I) I {\n\tlower, upper := a, b\n\tif lower > upper {\n\t\tupper, lower = a, b\n\t}\n\n\tval = min(val, upper)\n\treturn max(val, lower)\n}\n\n// Integer represents all possible integer types.\n// Remove when x/exp/constraints is moved to the standard library.\ntype Integer interface {\n\t~int | ~int8 | ~int16 | ~int32 | ~int64 | ~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr\n}\n\n// List of integer types known by the Go compiler. Used by TestIntegerConstraint\n// to warn if a new integer type is introduced. Remove when x/exp/constraints\n// is moved to the standard library.\nvar integers = []string{\"int\", \"int8\", \"int16\", \"int32\", \"int64\", \"uint\", \"uint8\", \"uint16\", \"uint32\", \"uint64\", \"uintptr\"}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/output.go",
    "content": "package internal\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"go/format\"\n\t\"go/scanner\"\n\t\"io\"\n\t\"reflect\"\n\t\"strings\"\n\t\"unicode\"\n)\n\n// Identifier turns a C style type or field name into an exportable Go equivalent.\nfunc Identifier(str string) string {\n\tprev := rune(-1)\n\treturn strings.Map(func(r rune) rune {\n\t\t// See https://golang.org/ref/spec#Identifiers\n\t\tswitch {\n\t\tcase unicode.IsLetter(r):\n\t\t\tif prev == -1 {\n\t\t\t\tr = unicode.ToUpper(r)\n\t\t\t}\n\n\t\tcase r == '_':\n\t\t\tswitch {\n\t\t\t// The previous rune was deleted, or we are at the\n\t\t\t// beginning of the string.\n\t\t\tcase prev == -1:\n\t\t\t\tfallthrough\n\n\t\t\t// The previous rune is a lower case letter or a digit.\n\t\t\tcase unicode.IsDigit(prev) || (unicode.IsLetter(prev) && unicode.IsLower(prev)):\n\t\t\t\t// delete the current rune, and force the\n\t\t\t\t// next character to be uppercased.\n\t\t\t\tr = -1\n\t\t\t}\n\n\t\tcase unicode.IsDigit(r):\n\n\t\tdefault:\n\t\t\t// Delete the current rune. prev is unchanged.\n\t\t\treturn -1\n\t\t}\n\n\t\tprev = r\n\t\treturn r\n\t}, str)\n}\n\n// WriteFormatted outputs a formatted src into out.\n//\n// If formatting fails it returns an informative error message.\nfunc WriteFormatted(src []byte, out io.Writer) error {\n\tformatted, err := format.Source(src)\n\tif err == nil {\n\t\t_, err = out.Write(formatted)\n\t\treturn err\n\t}\n\n\tvar el scanner.ErrorList\n\tif !errors.As(err, &el) {\n\t\treturn err\n\t}\n\n\tvar nel scanner.ErrorList\n\tfor _, err := range el {\n\t\tif !err.Pos.IsValid() {\n\t\t\tnel = append(nel, err)\n\t\t\tcontinue\n\t\t}\n\n\t\tbuf := src[err.Pos.Offset:]\n\t\tnl := bytes.IndexRune(buf, '\\n')\n\t\tif nl == -1 {\n\t\t\tnel = append(nel, err)\n\t\t\tcontinue\n\t\t}\n\n\t\terr.Msg += \": \" + string(buf[:nl])\n\t\tnel = append(nel, err)\n\t}\n\n\treturn nel\n}\n\n// GoTypeName is like %T, but elides the package name.\n//\n// Pointers to a type are peeled off.\nfunc GoTypeName(t any) string {\n\trT := reflect.TypeOf(t)\n\tfor rT.Kind() == reflect.Pointer {\n\t\trT = rT.Elem()\n\t}\n\t// Doesn't return the correct Name for generic types due to https://github.com/golang/go/issues/55924\n\treturn rT.Name()\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/prog.go",
    "content": "package internal\n\n// EmptyBPFContext is the smallest-possible BPF input context to be used for\n// invoking `Program.{Run,Benchmark,Test}`.\n//\n// Programs require a context input buffer of at least 15 bytes. Looking in\n// net/bpf/test_run.c, bpf_test_init() requires that the input is at least\n// ETH_HLEN (14) bytes. As of Linux commit fd18942 (\"bpf: Don't redirect packets\n// with invalid pkt_len\"), it also requires the skb to be non-empty after\n// removing the Layer 2 header.\nvar EmptyBPFContext = make([]byte, 15)\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/doc.go",
    "content": "// Package sys contains bindings for the BPF syscall.\npackage sys\n\n// Regenerate types.go by invoking go generate in the current directory.\n\n//go:generate go run github.com/cilium/ebpf/internal/cmd/gentypes ../../btf/testdata/vmlinux.btf.gz\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/fd.go",
    "content": "package sys\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/internal/testutils/fdtrace\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nvar ErrClosedFd = unix.EBADF\n\ntype FD struct {\n\traw int\n}\n\nfunc newFD(value int) *FD {\n\tfdtrace.TraceFD(value, 1)\n\n\tfd := &FD{value}\n\truntime.SetFinalizer(fd, (*FD).finalize)\n\treturn fd\n}\n\n// finalize is set as the FD's runtime finalizer and\n// sends a leak trace before calling FD.Close().\nfunc (fd *FD) finalize() {\n\tif fd.raw < 0 {\n\t\treturn\n\t}\n\n\tfdtrace.LeakFD(fd.raw)\n\n\t_ = fd.Close()\n}\n\n// NewFD wraps a raw fd with a finalizer.\n//\n// You must not use the raw fd after calling this function, since the underlying\n// file descriptor number may change. This is because the BPF UAPI assumes that\n// zero is not a valid fd value.\nfunc NewFD(value int) (*FD, error) {\n\tif value < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid fd %d\", value)\n\t}\n\n\tfd := newFD(value)\n\tif value != 0 {\n\t\treturn fd, nil\n\t}\n\n\tdup, err := fd.Dup()\n\t_ = fd.Close()\n\treturn dup, err\n}\n\nfunc (fd *FD) String() string {\n\treturn strconv.FormatInt(int64(fd.raw), 10)\n}\n\nfunc (fd *FD) Int() int {\n\treturn fd.raw\n}\n\nfunc (fd *FD) Uint() uint32 {\n\tif fd.raw < 0 || int64(fd.raw) > math.MaxUint32 {\n\t\t// Best effort: this is the number most likely to be an invalid file\n\t\t// descriptor. It is equal to -1 (on two's complement arches).\n\t\treturn math.MaxUint32\n\t}\n\treturn uint32(fd.raw)\n}\n\nfunc (fd *FD) Close() error {\n\tif fd.raw < 0 {\n\t\treturn nil\n\t}\n\n\treturn unix.Close(fd.Disown())\n}\n\n// Disown destroys the FD and returns its raw file descriptor without closing\n// it. After this call, the underlying fd is no longer tied to the FD's\n// lifecycle.\nfunc (fd *FD) Disown() int {\n\tvalue := fd.raw\n\tfdtrace.ForgetFD(value)\n\tfd.raw = -1\n\n\truntime.SetFinalizer(fd, nil)\n\treturn value\n}\n\nfunc (fd *FD) Dup() (*FD, error) {\n\tif fd.raw < 0 {\n\t\treturn nil, ErrClosedFd\n\t}\n\n\t// Always require the fd to be larger than zero: the BPF API treats the value\n\t// as \"no argument provided\".\n\tdup, err := unix.FcntlInt(uintptr(fd.raw), unix.F_DUPFD_CLOEXEC, 1)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't dup fd: %v\", err)\n\t}\n\n\treturn newFD(dup), nil\n}\n\n// File takes ownership of FD and turns it into an [*os.File].\n//\n// You must not use the FD after the call returns.\n//\n// Returns nil if the FD is not valid.\nfunc (fd *FD) File(name string) *os.File {\n\tif fd.raw < 0 {\n\t\treturn nil\n\t}\n\n\treturn os.NewFile(uintptr(fd.Disown()), name)\n}\n\n// ObjGetTyped wraps [ObjGet] with a readlink call to extract the type of the\n// underlying bpf object.\nfunc ObjGetTyped(attr *ObjGetAttr) (*FD, ObjType, error) {\n\tfd, err := ObjGet(attr)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\ttyp, err := readType(fd)\n\tif err != nil {\n\t\t_ = fd.Close()\n\t\treturn nil, 0, fmt.Errorf(\"reading fd type: %w\", err)\n\t}\n\n\treturn fd, typ, nil\n}\n\n// readType returns the bpf object type of the file descriptor by calling\n// readlink(3). Returns an error if the file descriptor does not represent a bpf\n// object.\nfunc readType(fd *FD) (ObjType, error) {\n\ts, err := os.Readlink(filepath.Join(\"/proc/self/fd/\", fd.String()))\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"readlink fd %d: %w\", fd.Int(), err)\n\t}\n\n\ts = strings.TrimPrefix(s, \"anon_inode:\")\n\n\tswitch s {\n\tcase \"bpf-map\":\n\t\treturn BPF_TYPE_MAP, nil\n\tcase \"bpf-prog\":\n\t\treturn BPF_TYPE_PROG, nil\n\tcase \"bpf-link\":\n\t\treturn BPF_TYPE_LINK, nil\n\t}\n\n\treturn 0, fmt.Errorf(\"unknown type %s of fd %d\", s, fd.Int())\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/pinning.go",
    "content": "package sys\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\n\t\"github.com/cilium/ebpf/internal/linux\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nfunc Pin(currentPath, newPath string, fd *FD) error {\n\tif newPath == \"\" {\n\t\treturn errors.New(\"given pinning path cannot be empty\")\n\t}\n\tif currentPath == newPath {\n\t\treturn nil\n\t}\n\n\tfsType, err := linux.FSType(filepath.Dir(newPath))\n\tif err != nil {\n\t\treturn err\n\t}\n\tif fsType != unix.BPF_FS_MAGIC {\n\t\treturn fmt.Errorf(\"%s is not on a bpf filesystem\", newPath)\n\t}\n\n\tdefer runtime.KeepAlive(fd)\n\n\tif currentPath == \"\" {\n\t\treturn ObjPin(&ObjPinAttr{\n\t\t\tPathname: NewStringPointer(newPath),\n\t\t\tBpfFd:    fd.Uint(),\n\t\t})\n\t}\n\n\t// Renameat2 is used instead of os.Rename to disallow the new path replacing\n\t// an existing path.\n\terr = unix.Renameat2(unix.AT_FDCWD, currentPath, unix.AT_FDCWD, newPath, unix.RENAME_NOREPLACE)\n\tif err == nil {\n\t\t// Object is now moved to the new pinning path.\n\t\treturn nil\n\t}\n\tif !os.IsNotExist(err) {\n\t\treturn fmt.Errorf(\"unable to move pinned object to new path %v: %w\", newPath, err)\n\t}\n\t// Internal state not in sync with the file system so let's fix it.\n\treturn ObjPin(&ObjPinAttr{\n\t\tPathname: NewStringPointer(newPath),\n\t\tBpfFd:    fd.Uint(),\n\t})\n}\n\nfunc Unpin(pinnedPath string) error {\n\tif pinnedPath == \"\" {\n\t\treturn nil\n\t}\n\terr := os.Remove(pinnedPath)\n\tif err == nil || os.IsNotExist(err) {\n\t\treturn nil\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/ptr.go",
    "content": "package sys\n\nimport (\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// NewPointer creates a 64-bit pointer from an unsafe Pointer.\nfunc NewPointer(ptr unsafe.Pointer) Pointer {\n\treturn Pointer{ptr: ptr}\n}\n\n// NewSlicePointer creates a 64-bit pointer from a slice.\nfunc NewSlicePointer[T comparable](buf []T) Pointer {\n\tif len(buf) == 0 {\n\t\treturn Pointer{}\n\t}\n\n\treturn Pointer{ptr: unsafe.Pointer(unsafe.SliceData(buf))}\n}\n\n// NewSlicePointerLen creates a 64-bit pointer from a byte slice.\n//\n// Useful to assign both the pointer and the length in one go.\nfunc NewSlicePointerLen(buf []byte) (Pointer, uint32) {\n\treturn NewSlicePointer(buf), uint32(len(buf))\n}\n\n// NewStringPointer creates a 64-bit pointer from a string.\nfunc NewStringPointer(str string) Pointer {\n\tp, err := unix.BytePtrFromString(str)\n\tif err != nil {\n\t\treturn Pointer{}\n\t}\n\n\treturn Pointer{ptr: unsafe.Pointer(p)}\n}\n\n// NewStringSlicePointer allocates an array of Pointers to each string in the\n// given slice of strings and returns a 64-bit pointer to the start of the\n// resulting array.\n//\n// Use this function to pass arrays of strings as syscall arguments.\nfunc NewStringSlicePointer(strings []string) Pointer {\n\tsp := make([]Pointer, 0, len(strings))\n\tfor _, s := range strings {\n\t\tsp = append(sp, NewStringPointer(s))\n\t}\n\n\treturn Pointer{ptr: unsafe.Pointer(&sp[0])}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/ptr_32_be.go",
    "content": "//go:build armbe || mips || mips64p32\n\npackage sys\n\nimport (\n\t\"unsafe\"\n)\n\n// Pointer wraps an unsafe.Pointer to be 64bit to\n// conform to the syscall specification.\ntype Pointer struct {\n\tpad uint32\n\tptr unsafe.Pointer\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/ptr_32_le.go",
    "content": "//go:build 386 || amd64p32 || arm || mipsle || mips64p32le\n\npackage sys\n\nimport (\n\t\"unsafe\"\n)\n\n// Pointer wraps an unsafe.Pointer to be 64bit to\n// conform to the syscall specification.\ntype Pointer struct {\n\tptr unsafe.Pointer\n\tpad uint32\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/ptr_64.go",
    "content": "//go:build !386 && !amd64p32 && !arm && !mipsle && !mips64p32le && !armbe && !mips && !mips64p32\n\npackage sys\n\nimport (\n\t\"unsafe\"\n)\n\n// Pointer wraps an unsafe.Pointer to be 64bit to\n// conform to the syscall specification.\ntype Pointer struct {\n\tptr unsafe.Pointer\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/signals.go",
    "content": "package sys\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// A sigset containing only SIGPROF.\nvar profSet unix.Sigset_t\n\nfunc init() {\n\t// See sigsetAdd for details on the implementation. Open coded here so\n\t// that the compiler will check the constant calculations for us.\n\tprofSet.Val[sigprofBit/wordBits] |= 1 << (sigprofBit % wordBits)\n}\n\n// maskProfilerSignal locks the calling goroutine to its underlying OS thread\n// and adds SIGPROF to the thread's signal mask. This prevents pprof from\n// interrupting expensive syscalls like e.g. BPF_PROG_LOAD.\n//\n// The caller must defer unmaskProfilerSignal() to reverse the operation.\nfunc maskProfilerSignal() {\n\truntime.LockOSThread()\n\n\tif err := unix.PthreadSigmask(unix.SIG_BLOCK, &profSet, nil); err != nil {\n\t\truntime.UnlockOSThread()\n\t\tpanic(fmt.Errorf(\"masking profiler signal: %w\", err))\n\t}\n}\n\n// unmaskProfilerSignal removes SIGPROF from the underlying thread's signal\n// mask, allowing it to be interrupted for profiling once again.\n//\n// It also unlocks the current goroutine from its underlying OS thread.\nfunc unmaskProfilerSignal() {\n\tdefer runtime.UnlockOSThread()\n\n\tif err := unix.PthreadSigmask(unix.SIG_UNBLOCK, &profSet, nil); err != nil {\n\t\tpanic(fmt.Errorf(\"unmasking profiler signal: %w\", err))\n\t}\n}\n\nconst (\n\t// Signal is the nth bit in the bitfield.\n\tsigprofBit = int(unix.SIGPROF - 1)\n\t// The number of bits in one Sigset_t word.\n\twordBits = int(unsafe.Sizeof(unix.Sigset_t{}.Val[0])) * 8\n)\n\n// sigsetAdd adds signal to set.\n//\n// Note: Sigset_t.Val's value type is uint32 or uint64 depending on the arch.\n// This function must be able to deal with both and so must avoid any direct\n// references to u32 or u64 types.\nfunc sigsetAdd(set *unix.Sigset_t, signal unix.Signal) error {\n\tif signal < 1 {\n\t\treturn fmt.Errorf(\"signal %d must be larger than 0\", signal)\n\t}\n\n\t// For amd64, runtime.sigaddset() performs the following operation:\n\t// set[(signal-1)/32] |= 1 << ((uint32(signal) - 1) & 31)\n\t//\n\t// This trick depends on sigset being two u32's, causing a signal in the\n\t// bottom 31 bits to be written to the low word if bit 32 is low, or the high\n\t// word if bit 32 is high.\n\n\t// Signal is the nth bit in the bitfield.\n\tbit := int(signal - 1)\n\t// Word within the sigset the bit needs to be written to.\n\tword := bit / wordBits\n\n\tif word >= len(set.Val) {\n\t\treturn fmt.Errorf(\"signal %d does not fit within unix.Sigset_t\", signal)\n\t}\n\n\t// Write the signal bit into its corresponding word at the corrected offset.\n\tset.Val[word] |= 1 << (bit % wordBits)\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/syscall.go",
    "content": "package sys\n\nimport (\n\t\"runtime\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// ENOTSUPP is a Linux internal error code that has leaked into UAPI.\n//\n// It is not the same as ENOTSUP or EOPNOTSUPP.\nconst ENOTSUPP = unix.Errno(524)\n\n// BPF wraps SYS_BPF.\n//\n// Any pointers contained in attr must use the Pointer type from this package.\nfunc BPF(cmd Cmd, attr unsafe.Pointer, size uintptr) (uintptr, error) {\n\t// Prevent the Go profiler from repeatedly interrupting the verifier,\n\t// which could otherwise lead to a livelock due to receiving EAGAIN.\n\tif cmd == BPF_PROG_LOAD || cmd == BPF_PROG_RUN {\n\t\tmaskProfilerSignal()\n\t\tdefer unmaskProfilerSignal()\n\t}\n\n\tfor {\n\t\tr1, _, errNo := unix.Syscall(unix.SYS_BPF, uintptr(cmd), uintptr(attr), size)\n\t\truntime.KeepAlive(attr)\n\n\t\t// As of ~4.20 the verifier can be interrupted by a signal,\n\t\t// and returns EAGAIN in that case.\n\t\tif errNo == unix.EAGAIN && cmd == BPF_PROG_LOAD {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar err error\n\t\tif errNo != 0 {\n\t\t\terr = wrappedErrno{errNo}\n\t\t}\n\n\t\treturn r1, err\n\t}\n}\n\n// Info is implemented by all structs that can be passed to the ObjInfo syscall.\n//\n//\tMapInfo\n//\tProgInfo\n//\tLinkInfo\n//\tBtfInfo\ntype Info interface {\n\tinfo() (unsafe.Pointer, uint32)\n}\n\nvar _ Info = (*MapInfo)(nil)\n\nfunc (i *MapInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nvar _ Info = (*ProgInfo)(nil)\n\nfunc (i *ProgInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nvar _ Info = (*LinkInfo)(nil)\n\nfunc (i *LinkInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nfunc (i *TracingLinkInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nfunc (i *CgroupLinkInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nfunc (i *NetNsLinkInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nfunc (i *XDPLinkInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nfunc (i *TcxLinkInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nfunc (i *NetfilterLinkInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nfunc (i *NetkitLinkInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nfunc (i *KprobeMultiLinkInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nfunc (i *KprobeLinkInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nvar _ Info = (*BtfInfo)(nil)\n\nfunc (i *BtfInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nfunc (i *PerfEventLinkInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\n// ObjInfo retrieves information about a BPF Fd.\n//\n// info may be one of MapInfo, ProgInfo, LinkInfo and BtfInfo.\nfunc ObjInfo(fd *FD, info Info) error {\n\tptr, len := info.info()\n\terr := ObjGetInfoByFd(&ObjGetInfoByFdAttr{\n\t\tBpfFd:   fd.Uint(),\n\t\tInfoLen: len,\n\t\tInfo:    NewPointer(ptr),\n\t})\n\truntime.KeepAlive(fd)\n\treturn err\n}\n\n// BPFObjName is a null-terminated string made up of\n// 'A-Za-z0-9_' characters.\ntype ObjName [BPF_OBJ_NAME_LEN]byte\n\n// NewObjName truncates the result if it is too long.\nfunc NewObjName(name string) ObjName {\n\tvar result ObjName\n\tcopy(result[:BPF_OBJ_NAME_LEN-1], name)\n\treturn result\n}\n\n// LogLevel controls the verbosity of the kernel's eBPF program verifier.\ntype LogLevel uint32\n\nconst (\n\tBPF_LOG_LEVEL1 LogLevel = 1 << iota\n\tBPF_LOG_LEVEL2\n\tBPF_LOG_STATS\n)\n\n// LinkID uniquely identifies a bpf_link.\ntype LinkID uint32\n\n// BTFID uniquely identifies a BTF blob loaded into the kernel.\ntype BTFID uint32\n\n// TypeID identifies a type in a BTF blob.\ntype TypeID uint32\n\n// Flags used by bpf_mprog.\nconst (\n\tBPF_F_REPLACE = 1 << (iota + 2)\n\tBPF_F_BEFORE\n\tBPF_F_AFTER\n\tBPF_F_ID\n\tBPF_F_LINK_MPROG = 1 << 13 // aka BPF_F_LINK\n)\n\n// Flags used by BPF_PROG_LOAD.\nconst (\n\tBPF_F_SLEEPABLE          = 1 << 4\n\tBPF_F_XDP_HAS_FRAGS      = 1 << 5\n\tBPF_F_XDP_DEV_BOUND_ONLY = 1 << 6\n)\n\nconst BPF_TAG_SIZE = 8\nconst BPF_OBJ_NAME_LEN = 16\n\n// wrappedErrno wraps [unix.Errno] to prevent direct comparisons with\n// syscall.E* or unix.E* constants.\n//\n// You should never export an error of this type.\ntype wrappedErrno struct {\n\tunix.Errno\n}\n\nfunc (we wrappedErrno) Unwrap() error {\n\treturn we.Errno\n}\n\nfunc (we wrappedErrno) Error() string {\n\tif we.Errno == ENOTSUPP {\n\t\treturn \"operation not supported\"\n\t}\n\treturn we.Errno.Error()\n}\n\ntype syscallError struct {\n\terror\n\terrno unix.Errno\n}\n\nfunc Error(err error, errno unix.Errno) error {\n\treturn &syscallError{err, errno}\n}\n\nfunc (se *syscallError) Is(target error) bool {\n\treturn target == se.error\n}\n\nfunc (se *syscallError) Unwrap() error {\n\treturn se.errno\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/types.go",
    "content": "// Code generated by internal/cmd/gentypes; DO NOT EDIT.\n\npackage sys\n\nimport (\n\t\"unsafe\"\n)\n\nconst (\n\tBPF_ADJ_ROOM_ENCAP_L2_MASK                 = 255\n\tBPF_ADJ_ROOM_ENCAP_L2_SHIFT                = 56\n\tBPF_ANY                                    = 0\n\tBPF_CSUM_LEVEL_DEC                         = 2\n\tBPF_CSUM_LEVEL_INC                         = 1\n\tBPF_CSUM_LEVEL_QUERY                       = 0\n\tBPF_CSUM_LEVEL_RESET                       = 3\n\tBPF_EXIST                                  = 2\n\tBPF_FIB_LKUP_RET_BLACKHOLE                 = 1\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED               = 8\n\tBPF_FIB_LKUP_RET_FWD_DISABLED              = 5\n\tBPF_FIB_LKUP_RET_NOT_FWDED                 = 4\n\tBPF_FIB_LKUP_RET_NO_NEIGH                  = 7\n\tBPF_FIB_LKUP_RET_NO_SRC_ADDR               = 9\n\tBPF_FIB_LKUP_RET_PROHIBIT                  = 3\n\tBPF_FIB_LKUP_RET_SUCCESS                   = 0\n\tBPF_FIB_LKUP_RET_UNREACHABLE               = 2\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT                = 6\n\tBPF_FIB_LOOKUP_DIRECT                      = 1\n\tBPF_FIB_LOOKUP_MARK                        = 32\n\tBPF_FIB_LOOKUP_OUTPUT                      = 2\n\tBPF_FIB_LOOKUP_SKIP_NEIGH                  = 4\n\tBPF_FIB_LOOKUP_SRC                         = 16\n\tBPF_FIB_LOOKUP_TBID                        = 8\n\tBPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG        = 1\n\tBPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP         = 4\n\tBPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL    = 2\n\tBPF_F_ADJ_ROOM_DECAP_L3_IPV4               = 128\n\tBPF_F_ADJ_ROOM_DECAP_L3_IPV6               = 256\n\tBPF_F_ADJ_ROOM_ENCAP_L2_ETH                = 64\n\tBPF_F_ADJ_ROOM_ENCAP_L3_IPV4               = 2\n\tBPF_F_ADJ_ROOM_ENCAP_L3_IPV6               = 4\n\tBPF_F_ADJ_ROOM_ENCAP_L4_GRE                = 8\n\tBPF_F_ADJ_ROOM_ENCAP_L4_UDP                = 16\n\tBPF_F_ADJ_ROOM_FIXED_GSO                   = 1\n\tBPF_F_ADJ_ROOM_NO_CSUM_RESET               = 32\n\tBPF_F_BPRM_SECUREEXEC                      = 1\n\tBPF_F_BROADCAST                            = 8\n\tBPF_F_CLONE                                = 512\n\tBPF_F_CTXLEN_MASK                          = 4503595332403200\n\tBPF_F_CURRENT_CPU                          = 4294967295\n\tBPF_F_CURRENT_NETNS                        = 18446744073709551615\n\tBPF_F_DONT_FRAGMENT                        = 4\n\tBPF_F_EXCLUDE_INGRESS                      = 16\n\tBPF_F_FAST_STACK_CMP                       = 512\n\tBPF_F_GET_BRANCH_RECORDS_SIZE              = 1\n\tBPF_F_HDR_FIELD_MASK                       = 15\n\tBPF_F_INDEX_MASK                           = 4294967295\n\tBPF_F_INGRESS                              = 1\n\tBPF_F_INNER_MAP                            = 4096\n\tBPF_F_INVALIDATE_HASH                      = 2\n\tBPF_F_KPROBE_MULTI_RETURN                  = 1\n\tBPF_F_LINK                                 = 8192\n\tBPF_F_LOCK                                 = 4\n\tBPF_F_MARK_ENFORCE                         = 64\n\tBPF_F_MARK_MANGLED_0                       = 32\n\tBPF_F_MMAPABLE                             = 1024\n\tBPF_F_NEIGH                                = 2\n\tBPF_F_NEXTHOP                              = 8\n\tBPF_F_NO_COMMON_LRU                        = 2\n\tBPF_F_NO_PREALLOC                          = 1\n\tBPF_F_NO_TUNNEL_KEY                        = 16\n\tBPF_F_NO_USER_CONV                         = 262144\n\tBPF_F_NUMA_NODE                            = 4\n\tBPF_F_PATH_FD                              = 16384\n\tBPF_F_PEER                                 = 4\n\tBPF_F_PRESERVE_ELEMS                       = 2048\n\tBPF_F_PSEUDO_HDR                           = 16\n\tBPF_F_RDONLY                               = 8\n\tBPF_F_RDONLY_PROG                          = 128\n\tBPF_F_RECOMPUTE_CSUM                       = 1\n\tBPF_F_REUSE_STACKID                        = 1024\n\tBPF_F_SEGV_ON_FAULT                        = 131072\n\tBPF_F_SEQ_NUMBER                           = 8\n\tBPF_F_SKIP_FIELD_MASK                      = 255\n\tBPF_F_STACK_BUILD_ID                       = 32\n\tBPF_F_SYSCTL_BASE_NAME                     = 1\n\tBPF_F_TIMER_ABS                            = 1\n\tBPF_F_TIMER_CPU_PIN                        = 2\n\tBPF_F_TOKEN_FD                             = 65536\n\tBPF_F_TUNINFO_FLAGS                        = 16\n\tBPF_F_TUNINFO_IPV6                         = 1\n\tBPF_F_UPROBE_MULTI_RETURN                  = 1\n\tBPF_F_USER_BUILD_ID                        = 2048\n\tBPF_F_USER_STACK                           = 256\n\tBPF_F_VTYPE_BTF_OBJ_FD                     = 32768\n\tBPF_F_WRONLY                               = 16\n\tBPF_F_WRONLY_PROG                          = 256\n\tBPF_F_ZERO_CSUM_TX                         = 2\n\tBPF_F_ZERO_SEED                            = 64\n\tBPF_LOAD_HDR_OPT_TCP_SYN                   = 1\n\tBPF_LOCAL_STORAGE_GET_F_CREATE             = 1\n\tBPF_MAX_LOOPS                              = 8388608\n\tBPF_MAX_TRAMP_LINKS                        = 38\n\tBPF_NOEXIST                                = 1\n\tBPF_RB_AVAIL_DATA                          = 0\n\tBPF_RB_CONS_POS                            = 2\n\tBPF_RB_FORCE_WAKEUP                        = 2\n\tBPF_RB_NO_WAKEUP                           = 1\n\tBPF_RB_PROD_POS                            = 3\n\tBPF_RB_RING_SIZE                           = 1\n\tBPF_REG_0                                  = 0\n\tBPF_REG_1                                  = 1\n\tBPF_REG_10                                 = 10\n\tBPF_REG_2                                  = 2\n\tBPF_REG_3                                  = 3\n\tBPF_REG_4                                  = 4\n\tBPF_REG_5                                  = 5\n\tBPF_REG_6                                  = 6\n\tBPF_REG_7                                  = 7\n\tBPF_REG_8                                  = 8\n\tBPF_REG_9                                  = 9\n\tBPF_RINGBUF_BUSY_BIT                       = 2147483648\n\tBPF_RINGBUF_DISCARD_BIT                    = 1073741824\n\tBPF_RINGBUF_HDR_SZ                         = 8\n\tBPF_SKB_CLOCK_MONOTONIC                    = 1\n\tBPF_SKB_CLOCK_REALTIME                     = 0\n\tBPF_SKB_CLOCK_TAI                          = 2\n\tBPF_SKB_TSTAMP_DELIVERY_MONO               = 1\n\tBPF_SKB_TSTAMP_UNSPEC                      = 0\n\tBPF_SK_LOOKUP_F_NO_REUSEPORT               = 2\n\tBPF_SK_LOOKUP_F_REPLACE                    = 1\n\tBPF_SK_STORAGE_GET_F_CREATE                = 1\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB         = 4\n\tBPF_SOCK_OPS_ALL_CB_FLAGS                  = 127\n\tBPF_SOCK_OPS_BASE_RTT                      = 7\n\tBPF_SOCK_OPS_HDR_OPT_LEN_CB                = 14\n\tBPF_SOCK_OPS_NEEDS_ECN                     = 6\n\tBPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG     = 16\n\tBPF_SOCK_OPS_PARSE_HDR_OPT_CB              = 13\n\tBPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 32\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB        = 5\n\tBPF_SOCK_OPS_RETRANS_CB                    = 9\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG               = 2\n\tBPF_SOCK_OPS_RTO_CB                        = 8\n\tBPF_SOCK_OPS_RTO_CB_FLAG                   = 1\n\tBPF_SOCK_OPS_RTT_CB                        = 12\n\tBPF_SOCK_OPS_RTT_CB_FLAG                   = 8\n\tBPF_SOCK_OPS_RWND_INIT                     = 2\n\tBPF_SOCK_OPS_STATE_CB                      = 10\n\tBPF_SOCK_OPS_STATE_CB_FLAG                 = 4\n\tBPF_SOCK_OPS_TCP_CONNECT_CB                = 3\n\tBPF_SOCK_OPS_TCP_LISTEN_CB                 = 11\n\tBPF_SOCK_OPS_TIMEOUT_INIT                  = 1\n\tBPF_SOCK_OPS_VOID                          = 0\n\tBPF_SOCK_OPS_WRITE_HDR_OPT_CB              = 15\n\tBPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG         = 64\n\tBPF_TASK_ITER_ALL_PROCS                    = 0\n\tBPF_TASK_ITER_ALL_THREADS                  = 1\n\tBPF_TASK_ITER_PROC_THREADS                 = 2\n\tBPF_TCP_BOUND_INACTIVE                     = 13\n\tBPF_TCP_CLOSE                              = 7\n\tBPF_TCP_CLOSE_WAIT                         = 8\n\tBPF_TCP_CLOSING                            = 11\n\tBPF_TCP_ESTABLISHED                        = 1\n\tBPF_TCP_FIN_WAIT1                          = 4\n\tBPF_TCP_FIN_WAIT2                          = 5\n\tBPF_TCP_LAST_ACK                           = 9\n\tBPF_TCP_LISTEN                             = 10\n\tBPF_TCP_MAX_STATES                         = 14\n\tBPF_TCP_NEW_SYN_RECV                       = 12\n\tBPF_TCP_SYN_RECV                           = 3\n\tBPF_TCP_SYN_SENT                           = 2\n\tBPF_TCP_TIME_WAIT                          = 6\n\tBPF_WRITE_HDR_TCP_CURRENT_MSS              = 1\n\tBPF_WRITE_HDR_TCP_SYNACK_COOKIE            = 2\n\tBPF_XFRM_STATE_OPTS_SZ                     = 36\n)\n\ntype AdjRoomMode uint32\n\nconst (\n\tBPF_ADJ_ROOM_NET AdjRoomMode = 0\n\tBPF_ADJ_ROOM_MAC AdjRoomMode = 1\n)\n\ntype AttachType uint32\n\nconst (\n\tBPF_CGROUP_INET_INGRESS            AttachType = 0\n\tBPF_CGROUP_INET_EGRESS             AttachType = 1\n\tBPF_CGROUP_INET_SOCK_CREATE        AttachType = 2\n\tBPF_CGROUP_SOCK_OPS                AttachType = 3\n\tBPF_SK_SKB_STREAM_PARSER           AttachType = 4\n\tBPF_SK_SKB_STREAM_VERDICT          AttachType = 5\n\tBPF_CGROUP_DEVICE                  AttachType = 6\n\tBPF_SK_MSG_VERDICT                 AttachType = 7\n\tBPF_CGROUP_INET4_BIND              AttachType = 8\n\tBPF_CGROUP_INET6_BIND              AttachType = 9\n\tBPF_CGROUP_INET4_CONNECT           AttachType = 10\n\tBPF_CGROUP_INET6_CONNECT           AttachType = 11\n\tBPF_CGROUP_INET4_POST_BIND         AttachType = 12\n\tBPF_CGROUP_INET6_POST_BIND         AttachType = 13\n\tBPF_CGROUP_UDP4_SENDMSG            AttachType = 14\n\tBPF_CGROUP_UDP6_SENDMSG            AttachType = 15\n\tBPF_LIRC_MODE2                     AttachType = 16\n\tBPF_FLOW_DISSECTOR                 AttachType = 17\n\tBPF_CGROUP_SYSCTL                  AttachType = 18\n\tBPF_CGROUP_UDP4_RECVMSG            AttachType = 19\n\tBPF_CGROUP_UDP6_RECVMSG            AttachType = 20\n\tBPF_CGROUP_GETSOCKOPT              AttachType = 21\n\tBPF_CGROUP_SETSOCKOPT              AttachType = 22\n\tBPF_TRACE_RAW_TP                   AttachType = 23\n\tBPF_TRACE_FENTRY                   AttachType = 24\n\tBPF_TRACE_FEXIT                    AttachType = 25\n\tBPF_MODIFY_RETURN                  AttachType = 26\n\tBPF_LSM_MAC                        AttachType = 27\n\tBPF_TRACE_ITER                     AttachType = 28\n\tBPF_CGROUP_INET4_GETPEERNAME       AttachType = 29\n\tBPF_CGROUP_INET6_GETPEERNAME       AttachType = 30\n\tBPF_CGROUP_INET4_GETSOCKNAME       AttachType = 31\n\tBPF_CGROUP_INET6_GETSOCKNAME       AttachType = 32\n\tBPF_XDP_DEVMAP                     AttachType = 33\n\tBPF_CGROUP_INET_SOCK_RELEASE       AttachType = 34\n\tBPF_XDP_CPUMAP                     AttachType = 35\n\tBPF_SK_LOOKUP                      AttachType = 36\n\tBPF_XDP                            AttachType = 37\n\tBPF_SK_SKB_VERDICT                 AttachType = 38\n\tBPF_SK_REUSEPORT_SELECT            AttachType = 39\n\tBPF_SK_REUSEPORT_SELECT_OR_MIGRATE AttachType = 40\n\tBPF_PERF_EVENT                     AttachType = 41\n\tBPF_TRACE_KPROBE_MULTI             AttachType = 42\n\tBPF_LSM_CGROUP                     AttachType = 43\n\tBPF_STRUCT_OPS                     AttachType = 44\n\tBPF_NETFILTER                      AttachType = 45\n\tBPF_TCX_INGRESS                    AttachType = 46\n\tBPF_TCX_EGRESS                     AttachType = 47\n\tBPF_TRACE_UPROBE_MULTI             AttachType = 48\n\tBPF_CGROUP_UNIX_CONNECT            AttachType = 49\n\tBPF_CGROUP_UNIX_SENDMSG            AttachType = 50\n\tBPF_CGROUP_UNIX_RECVMSG            AttachType = 51\n\tBPF_CGROUP_UNIX_GETPEERNAME        AttachType = 52\n\tBPF_CGROUP_UNIX_GETSOCKNAME        AttachType = 53\n\tBPF_NETKIT_PRIMARY                 AttachType = 54\n\tBPF_NETKIT_PEER                    AttachType = 55\n\tBPF_TRACE_KPROBE_SESSION           AttachType = 56\n\t__MAX_BPF_ATTACH_TYPE              AttachType = 57\n)\n\ntype Cmd uint32\n\nconst (\n\tBPF_MAP_CREATE                  Cmd = 0\n\tBPF_MAP_LOOKUP_ELEM             Cmd = 1\n\tBPF_MAP_UPDATE_ELEM             Cmd = 2\n\tBPF_MAP_DELETE_ELEM             Cmd = 3\n\tBPF_MAP_GET_NEXT_KEY            Cmd = 4\n\tBPF_PROG_LOAD                   Cmd = 5\n\tBPF_OBJ_PIN                     Cmd = 6\n\tBPF_OBJ_GET                     Cmd = 7\n\tBPF_PROG_ATTACH                 Cmd = 8\n\tBPF_PROG_DETACH                 Cmd = 9\n\tBPF_PROG_TEST_RUN               Cmd = 10\n\tBPF_PROG_RUN                    Cmd = 10\n\tBPF_PROG_GET_NEXT_ID            Cmd = 11\n\tBPF_MAP_GET_NEXT_ID             Cmd = 12\n\tBPF_PROG_GET_FD_BY_ID           Cmd = 13\n\tBPF_MAP_GET_FD_BY_ID            Cmd = 14\n\tBPF_OBJ_GET_INFO_BY_FD          Cmd = 15\n\tBPF_PROG_QUERY                  Cmd = 16\n\tBPF_RAW_TRACEPOINT_OPEN         Cmd = 17\n\tBPF_BTF_LOAD                    Cmd = 18\n\tBPF_BTF_GET_FD_BY_ID            Cmd = 19\n\tBPF_TASK_FD_QUERY               Cmd = 20\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM  Cmd = 21\n\tBPF_MAP_FREEZE                  Cmd = 22\n\tBPF_BTF_GET_NEXT_ID             Cmd = 23\n\tBPF_MAP_LOOKUP_BATCH            Cmd = 24\n\tBPF_MAP_LOOKUP_AND_DELETE_BATCH Cmd = 25\n\tBPF_MAP_UPDATE_BATCH            Cmd = 26\n\tBPF_MAP_DELETE_BATCH            Cmd = 27\n\tBPF_LINK_CREATE                 Cmd = 28\n\tBPF_LINK_UPDATE                 Cmd = 29\n\tBPF_LINK_GET_FD_BY_ID           Cmd = 30\n\tBPF_LINK_GET_NEXT_ID            Cmd = 31\n\tBPF_ENABLE_STATS                Cmd = 32\n\tBPF_ITER_CREATE                 Cmd = 33\n\tBPF_LINK_DETACH                 Cmd = 34\n\tBPF_PROG_BIND_MAP               Cmd = 35\n\tBPF_TOKEN_CREATE                Cmd = 36\n\t__MAX_BPF_CMD                   Cmd = 37\n)\n\ntype FunctionId uint32\n\nconst (\n\tBPF_FUNC_unspec                         FunctionId = 0\n\tBPF_FUNC_map_lookup_elem                FunctionId = 1\n\tBPF_FUNC_map_update_elem                FunctionId = 2\n\tBPF_FUNC_map_delete_elem                FunctionId = 3\n\tBPF_FUNC_probe_read                     FunctionId = 4\n\tBPF_FUNC_ktime_get_ns                   FunctionId = 5\n\tBPF_FUNC_trace_printk                   FunctionId = 6\n\tBPF_FUNC_get_prandom_u32                FunctionId = 7\n\tBPF_FUNC_get_smp_processor_id           FunctionId = 8\n\tBPF_FUNC_skb_store_bytes                FunctionId = 9\n\tBPF_FUNC_l3_csum_replace                FunctionId = 10\n\tBPF_FUNC_l4_csum_replace                FunctionId = 11\n\tBPF_FUNC_tail_call                      FunctionId = 12\n\tBPF_FUNC_clone_redirect                 FunctionId = 13\n\tBPF_FUNC_get_current_pid_tgid           FunctionId = 14\n\tBPF_FUNC_get_current_uid_gid            FunctionId = 15\n\tBPF_FUNC_get_current_comm               FunctionId = 16\n\tBPF_FUNC_get_cgroup_classid             FunctionId = 17\n\tBPF_FUNC_skb_vlan_push                  FunctionId = 18\n\tBPF_FUNC_skb_vlan_pop                   FunctionId = 19\n\tBPF_FUNC_skb_get_tunnel_key             FunctionId = 20\n\tBPF_FUNC_skb_set_tunnel_key             FunctionId = 21\n\tBPF_FUNC_perf_event_read                FunctionId = 22\n\tBPF_FUNC_redirect                       FunctionId = 23\n\tBPF_FUNC_get_route_realm                FunctionId = 24\n\tBPF_FUNC_perf_event_output              FunctionId = 25\n\tBPF_FUNC_skb_load_bytes                 FunctionId = 26\n\tBPF_FUNC_get_stackid                    FunctionId = 27\n\tBPF_FUNC_csum_diff                      FunctionId = 28\n\tBPF_FUNC_skb_get_tunnel_opt             FunctionId = 29\n\tBPF_FUNC_skb_set_tunnel_opt             FunctionId = 30\n\tBPF_FUNC_skb_change_proto               FunctionId = 31\n\tBPF_FUNC_skb_change_type                FunctionId = 32\n\tBPF_FUNC_skb_under_cgroup               FunctionId = 33\n\tBPF_FUNC_get_hash_recalc                FunctionId = 34\n\tBPF_FUNC_get_current_task               FunctionId = 35\n\tBPF_FUNC_probe_write_user               FunctionId = 36\n\tBPF_FUNC_current_task_under_cgroup      FunctionId = 37\n\tBPF_FUNC_skb_change_tail                FunctionId = 38\n\tBPF_FUNC_skb_pull_data                  FunctionId = 39\n\tBPF_FUNC_csum_update                    FunctionId = 40\n\tBPF_FUNC_set_hash_invalid               FunctionId = 41\n\tBPF_FUNC_get_numa_node_id               FunctionId = 42\n\tBPF_FUNC_skb_change_head                FunctionId = 43\n\tBPF_FUNC_xdp_adjust_head                FunctionId = 44\n\tBPF_FUNC_probe_read_str                 FunctionId = 45\n\tBPF_FUNC_get_socket_cookie              FunctionId = 46\n\tBPF_FUNC_get_socket_uid                 FunctionId = 47\n\tBPF_FUNC_set_hash                       FunctionId = 48\n\tBPF_FUNC_setsockopt                     FunctionId = 49\n\tBPF_FUNC_skb_adjust_room                FunctionId = 50\n\tBPF_FUNC_redirect_map                   FunctionId = 51\n\tBPF_FUNC_sk_redirect_map                FunctionId = 52\n\tBPF_FUNC_sock_map_update                FunctionId = 53\n\tBPF_FUNC_xdp_adjust_meta                FunctionId = 54\n\tBPF_FUNC_perf_event_read_value          FunctionId = 55\n\tBPF_FUNC_perf_prog_read_value           FunctionId = 56\n\tBPF_FUNC_getsockopt                     FunctionId = 57\n\tBPF_FUNC_override_return                FunctionId = 58\n\tBPF_FUNC_sock_ops_cb_flags_set          FunctionId = 59\n\tBPF_FUNC_msg_redirect_map               FunctionId = 60\n\tBPF_FUNC_msg_apply_bytes                FunctionId = 61\n\tBPF_FUNC_msg_cork_bytes                 FunctionId = 62\n\tBPF_FUNC_msg_pull_data                  FunctionId = 63\n\tBPF_FUNC_bind                           FunctionId = 64\n\tBPF_FUNC_xdp_adjust_tail                FunctionId = 65\n\tBPF_FUNC_skb_get_xfrm_state             FunctionId = 66\n\tBPF_FUNC_get_stack                      FunctionId = 67\n\tBPF_FUNC_skb_load_bytes_relative        FunctionId = 68\n\tBPF_FUNC_fib_lookup                     FunctionId = 69\n\tBPF_FUNC_sock_hash_update               FunctionId = 70\n\tBPF_FUNC_msg_redirect_hash              FunctionId = 71\n\tBPF_FUNC_sk_redirect_hash               FunctionId = 72\n\tBPF_FUNC_lwt_push_encap                 FunctionId = 73\n\tBPF_FUNC_lwt_seg6_store_bytes           FunctionId = 74\n\tBPF_FUNC_lwt_seg6_adjust_srh            FunctionId = 75\n\tBPF_FUNC_lwt_seg6_action                FunctionId = 76\n\tBPF_FUNC_rc_repeat                      FunctionId = 77\n\tBPF_FUNC_rc_keydown                     FunctionId = 78\n\tBPF_FUNC_skb_cgroup_id                  FunctionId = 79\n\tBPF_FUNC_get_current_cgroup_id          FunctionId = 80\n\tBPF_FUNC_get_local_storage              FunctionId = 81\n\tBPF_FUNC_sk_select_reuseport            FunctionId = 82\n\tBPF_FUNC_skb_ancestor_cgroup_id         FunctionId = 83\n\tBPF_FUNC_sk_lookup_tcp                  FunctionId = 84\n\tBPF_FUNC_sk_lookup_udp                  FunctionId = 85\n\tBPF_FUNC_sk_release                     FunctionId = 86\n\tBPF_FUNC_map_push_elem                  FunctionId = 87\n\tBPF_FUNC_map_pop_elem                   FunctionId = 88\n\tBPF_FUNC_map_peek_elem                  FunctionId = 89\n\tBPF_FUNC_msg_push_data                  FunctionId = 90\n\tBPF_FUNC_msg_pop_data                   FunctionId = 91\n\tBPF_FUNC_rc_pointer_rel                 FunctionId = 92\n\tBPF_FUNC_spin_lock                      FunctionId = 93\n\tBPF_FUNC_spin_unlock                    FunctionId = 94\n\tBPF_FUNC_sk_fullsock                    FunctionId = 95\n\tBPF_FUNC_tcp_sock                       FunctionId = 96\n\tBPF_FUNC_skb_ecn_set_ce                 FunctionId = 97\n\tBPF_FUNC_get_listener_sock              FunctionId = 98\n\tBPF_FUNC_skc_lookup_tcp                 FunctionId = 99\n\tBPF_FUNC_tcp_check_syncookie            FunctionId = 100\n\tBPF_FUNC_sysctl_get_name                FunctionId = 101\n\tBPF_FUNC_sysctl_get_current_value       FunctionId = 102\n\tBPF_FUNC_sysctl_get_new_value           FunctionId = 103\n\tBPF_FUNC_sysctl_set_new_value           FunctionId = 104\n\tBPF_FUNC_strtol                         FunctionId = 105\n\tBPF_FUNC_strtoul                        FunctionId = 106\n\tBPF_FUNC_sk_storage_get                 FunctionId = 107\n\tBPF_FUNC_sk_storage_delete              FunctionId = 108\n\tBPF_FUNC_send_signal                    FunctionId = 109\n\tBPF_FUNC_tcp_gen_syncookie              FunctionId = 110\n\tBPF_FUNC_skb_output                     FunctionId = 111\n\tBPF_FUNC_probe_read_user                FunctionId = 112\n\tBPF_FUNC_probe_read_kernel              FunctionId = 113\n\tBPF_FUNC_probe_read_user_str            FunctionId = 114\n\tBPF_FUNC_probe_read_kernel_str          FunctionId = 115\n\tBPF_FUNC_tcp_send_ack                   FunctionId = 116\n\tBPF_FUNC_send_signal_thread             FunctionId = 117\n\tBPF_FUNC_jiffies64                      FunctionId = 118\n\tBPF_FUNC_read_branch_records            FunctionId = 119\n\tBPF_FUNC_get_ns_current_pid_tgid        FunctionId = 120\n\tBPF_FUNC_xdp_output                     FunctionId = 121\n\tBPF_FUNC_get_netns_cookie               FunctionId = 122\n\tBPF_FUNC_get_current_ancestor_cgroup_id FunctionId = 123\n\tBPF_FUNC_sk_assign                      FunctionId = 124\n\tBPF_FUNC_ktime_get_boot_ns              FunctionId = 125\n\tBPF_FUNC_seq_printf                     FunctionId = 126\n\tBPF_FUNC_seq_write                      FunctionId = 127\n\tBPF_FUNC_sk_cgroup_id                   FunctionId = 128\n\tBPF_FUNC_sk_ancestor_cgroup_id          FunctionId = 129\n\tBPF_FUNC_ringbuf_output                 FunctionId = 130\n\tBPF_FUNC_ringbuf_reserve                FunctionId = 131\n\tBPF_FUNC_ringbuf_submit                 FunctionId = 132\n\tBPF_FUNC_ringbuf_discard                FunctionId = 133\n\tBPF_FUNC_ringbuf_query                  FunctionId = 134\n\tBPF_FUNC_csum_level                     FunctionId = 135\n\tBPF_FUNC_skc_to_tcp6_sock               FunctionId = 136\n\tBPF_FUNC_skc_to_tcp_sock                FunctionId = 137\n\tBPF_FUNC_skc_to_tcp_timewait_sock       FunctionId = 138\n\tBPF_FUNC_skc_to_tcp_request_sock        FunctionId = 139\n\tBPF_FUNC_skc_to_udp6_sock               FunctionId = 140\n\tBPF_FUNC_get_task_stack                 FunctionId = 141\n\tBPF_FUNC_load_hdr_opt                   FunctionId = 142\n\tBPF_FUNC_store_hdr_opt                  FunctionId = 143\n\tBPF_FUNC_reserve_hdr_opt                FunctionId = 144\n\tBPF_FUNC_inode_storage_get              FunctionId = 145\n\tBPF_FUNC_inode_storage_delete           FunctionId = 146\n\tBPF_FUNC_d_path                         FunctionId = 147\n\tBPF_FUNC_copy_from_user                 FunctionId = 148\n\tBPF_FUNC_snprintf_btf                   FunctionId = 149\n\tBPF_FUNC_seq_printf_btf                 FunctionId = 150\n\tBPF_FUNC_skb_cgroup_classid             FunctionId = 151\n\tBPF_FUNC_redirect_neigh                 FunctionId = 152\n\tBPF_FUNC_per_cpu_ptr                    FunctionId = 153\n\tBPF_FUNC_this_cpu_ptr                   FunctionId = 154\n\tBPF_FUNC_redirect_peer                  FunctionId = 155\n\tBPF_FUNC_task_storage_get               FunctionId = 156\n\tBPF_FUNC_task_storage_delete            FunctionId = 157\n\tBPF_FUNC_get_current_task_btf           FunctionId = 158\n\tBPF_FUNC_bprm_opts_set                  FunctionId = 159\n\tBPF_FUNC_ktime_get_coarse_ns            FunctionId = 160\n\tBPF_FUNC_ima_inode_hash                 FunctionId = 161\n\tBPF_FUNC_sock_from_file                 FunctionId = 162\n\tBPF_FUNC_check_mtu                      FunctionId = 163\n\tBPF_FUNC_for_each_map_elem              FunctionId = 164\n\tBPF_FUNC_snprintf                       FunctionId = 165\n\tBPF_FUNC_sys_bpf                        FunctionId = 166\n\tBPF_FUNC_btf_find_by_name_kind          FunctionId = 167\n\tBPF_FUNC_sys_close                      FunctionId = 168\n\tBPF_FUNC_timer_init                     FunctionId = 169\n\tBPF_FUNC_timer_set_callback             FunctionId = 170\n\tBPF_FUNC_timer_start                    FunctionId = 171\n\tBPF_FUNC_timer_cancel                   FunctionId = 172\n\tBPF_FUNC_get_func_ip                    FunctionId = 173\n\tBPF_FUNC_get_attach_cookie              FunctionId = 174\n\tBPF_FUNC_task_pt_regs                   FunctionId = 175\n\tBPF_FUNC_get_branch_snapshot            FunctionId = 176\n\tBPF_FUNC_trace_vprintk                  FunctionId = 177\n\tBPF_FUNC_skc_to_unix_sock               FunctionId = 178\n\tBPF_FUNC_kallsyms_lookup_name           FunctionId = 179\n\tBPF_FUNC_find_vma                       FunctionId = 180\n\tBPF_FUNC_loop                           FunctionId = 181\n\tBPF_FUNC_strncmp                        FunctionId = 182\n\tBPF_FUNC_get_func_arg                   FunctionId = 183\n\tBPF_FUNC_get_func_ret                   FunctionId = 184\n\tBPF_FUNC_get_func_arg_cnt               FunctionId = 185\n\tBPF_FUNC_get_retval                     FunctionId = 186\n\tBPF_FUNC_set_retval                     FunctionId = 187\n\tBPF_FUNC_xdp_get_buff_len               FunctionId = 188\n\tBPF_FUNC_xdp_load_bytes                 FunctionId = 189\n\tBPF_FUNC_xdp_store_bytes                FunctionId = 190\n\tBPF_FUNC_copy_from_user_task            FunctionId = 191\n\tBPF_FUNC_skb_set_tstamp                 FunctionId = 192\n\tBPF_FUNC_ima_file_hash                  FunctionId = 193\n\tBPF_FUNC_kptr_xchg                      FunctionId = 194\n\tBPF_FUNC_map_lookup_percpu_elem         FunctionId = 195\n\tBPF_FUNC_skc_to_mptcp_sock              FunctionId = 196\n\tBPF_FUNC_dynptr_from_mem                FunctionId = 197\n\tBPF_FUNC_ringbuf_reserve_dynptr         FunctionId = 198\n\tBPF_FUNC_ringbuf_submit_dynptr          FunctionId = 199\n\tBPF_FUNC_ringbuf_discard_dynptr         FunctionId = 200\n\tBPF_FUNC_dynptr_read                    FunctionId = 201\n\tBPF_FUNC_dynptr_write                   FunctionId = 202\n\tBPF_FUNC_dynptr_data                    FunctionId = 203\n\tBPF_FUNC_tcp_raw_gen_syncookie_ipv4     FunctionId = 204\n\tBPF_FUNC_tcp_raw_gen_syncookie_ipv6     FunctionId = 205\n\tBPF_FUNC_tcp_raw_check_syncookie_ipv4   FunctionId = 206\n\tBPF_FUNC_tcp_raw_check_syncookie_ipv6   FunctionId = 207\n\tBPF_FUNC_ktime_get_tai_ns               FunctionId = 208\n\tBPF_FUNC_user_ringbuf_drain             FunctionId = 209\n\tBPF_FUNC_cgrp_storage_get               FunctionId = 210\n\tBPF_FUNC_cgrp_storage_delete            FunctionId = 211\n\t__BPF_FUNC_MAX_ID                       FunctionId = 212\n)\n\ntype HdrStartOff uint32\n\nconst (\n\tBPF_HDR_START_MAC HdrStartOff = 0\n\tBPF_HDR_START_NET HdrStartOff = 1\n)\n\ntype LinkType uint32\n\nconst (\n\tBPF_LINK_TYPE_UNSPEC         LinkType = 0\n\tBPF_LINK_TYPE_RAW_TRACEPOINT LinkType = 1\n\tBPF_LINK_TYPE_TRACING        LinkType = 2\n\tBPF_LINK_TYPE_CGROUP         LinkType = 3\n\tBPF_LINK_TYPE_ITER           LinkType = 4\n\tBPF_LINK_TYPE_NETNS          LinkType = 5\n\tBPF_LINK_TYPE_XDP            LinkType = 6\n\tBPF_LINK_TYPE_PERF_EVENT     LinkType = 7\n\tBPF_LINK_TYPE_KPROBE_MULTI   LinkType = 8\n\tBPF_LINK_TYPE_STRUCT_OPS     LinkType = 9\n\tBPF_LINK_TYPE_NETFILTER      LinkType = 10\n\tBPF_LINK_TYPE_TCX            LinkType = 11\n\tBPF_LINK_TYPE_UPROBE_MULTI   LinkType = 12\n\tBPF_LINK_TYPE_NETKIT         LinkType = 13\n\tBPF_LINK_TYPE_SOCKMAP        LinkType = 14\n\t__MAX_BPF_LINK_TYPE          LinkType = 15\n)\n\ntype MapType uint32\n\nconst (\n\tBPF_MAP_TYPE_UNSPEC                           MapType = 0\n\tBPF_MAP_TYPE_HASH                             MapType = 1\n\tBPF_MAP_TYPE_ARRAY                            MapType = 2\n\tBPF_MAP_TYPE_PROG_ARRAY                       MapType = 3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY                 MapType = 4\n\tBPF_MAP_TYPE_PERCPU_HASH                      MapType = 5\n\tBPF_MAP_TYPE_PERCPU_ARRAY                     MapType = 6\n\tBPF_MAP_TYPE_STACK_TRACE                      MapType = 7\n\tBPF_MAP_TYPE_CGROUP_ARRAY                     MapType = 8\n\tBPF_MAP_TYPE_LRU_HASH                         MapType = 9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH                  MapType = 10\n\tBPF_MAP_TYPE_LPM_TRIE                         MapType = 11\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS                    MapType = 12\n\tBPF_MAP_TYPE_HASH_OF_MAPS                     MapType = 13\n\tBPF_MAP_TYPE_DEVMAP                           MapType = 14\n\tBPF_MAP_TYPE_SOCKMAP                          MapType = 15\n\tBPF_MAP_TYPE_CPUMAP                           MapType = 16\n\tBPF_MAP_TYPE_XSKMAP                           MapType = 17\n\tBPF_MAP_TYPE_SOCKHASH                         MapType = 18\n\tBPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED        MapType = 19\n\tBPF_MAP_TYPE_CGROUP_STORAGE                   MapType = 19\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY              MapType = 20\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE_DEPRECATED MapType = 21\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE            MapType = 21\n\tBPF_MAP_TYPE_QUEUE                            MapType = 22\n\tBPF_MAP_TYPE_STACK                            MapType = 23\n\tBPF_MAP_TYPE_SK_STORAGE                       MapType = 24\n\tBPF_MAP_TYPE_DEVMAP_HASH                      MapType = 25\n\tBPF_MAP_TYPE_STRUCT_OPS                       MapType = 26\n\tBPF_MAP_TYPE_RINGBUF                          MapType = 27\n\tBPF_MAP_TYPE_INODE_STORAGE                    MapType = 28\n\tBPF_MAP_TYPE_TASK_STORAGE                     MapType = 29\n\tBPF_MAP_TYPE_BLOOM_FILTER                     MapType = 30\n\tBPF_MAP_TYPE_USER_RINGBUF                     MapType = 31\n\tBPF_MAP_TYPE_CGRP_STORAGE                     MapType = 32\n\tBPF_MAP_TYPE_ARENA                            MapType = 33\n\t__MAX_BPF_MAP_TYPE                            MapType = 34\n)\n\ntype ObjType uint32\n\nconst (\n\tBPF_TYPE_UNSPEC ObjType = 0\n\tBPF_TYPE_PROG   ObjType = 1\n\tBPF_TYPE_MAP    ObjType = 2\n\tBPF_TYPE_LINK   ObjType = 3\n)\n\ntype PerfEventType uint32\n\nconst (\n\tBPF_PERF_EVENT_UNSPEC     PerfEventType = 0\n\tBPF_PERF_EVENT_UPROBE     PerfEventType = 1\n\tBPF_PERF_EVENT_URETPROBE  PerfEventType = 2\n\tBPF_PERF_EVENT_KPROBE     PerfEventType = 3\n\tBPF_PERF_EVENT_KRETPROBE  PerfEventType = 4\n\tBPF_PERF_EVENT_TRACEPOINT PerfEventType = 5\n\tBPF_PERF_EVENT_EVENT      PerfEventType = 6\n)\n\ntype ProgType uint32\n\nconst (\n\tBPF_PROG_TYPE_UNSPEC                  ProgType = 0\n\tBPF_PROG_TYPE_SOCKET_FILTER           ProgType = 1\n\tBPF_PROG_TYPE_KPROBE                  ProgType = 2\n\tBPF_PROG_TYPE_SCHED_CLS               ProgType = 3\n\tBPF_PROG_TYPE_SCHED_ACT               ProgType = 4\n\tBPF_PROG_TYPE_TRACEPOINT              ProgType = 5\n\tBPF_PROG_TYPE_XDP                     ProgType = 6\n\tBPF_PROG_TYPE_PERF_EVENT              ProgType = 7\n\tBPF_PROG_TYPE_CGROUP_SKB              ProgType = 8\n\tBPF_PROG_TYPE_CGROUP_SOCK             ProgType = 9\n\tBPF_PROG_TYPE_LWT_IN                  ProgType = 10\n\tBPF_PROG_TYPE_LWT_OUT                 ProgType = 11\n\tBPF_PROG_TYPE_LWT_XMIT                ProgType = 12\n\tBPF_PROG_TYPE_SOCK_OPS                ProgType = 13\n\tBPF_PROG_TYPE_SK_SKB                  ProgType = 14\n\tBPF_PROG_TYPE_CGROUP_DEVICE           ProgType = 15\n\tBPF_PROG_TYPE_SK_MSG                  ProgType = 16\n\tBPF_PROG_TYPE_RAW_TRACEPOINT          ProgType = 17\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR        ProgType = 18\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL           ProgType = 19\n\tBPF_PROG_TYPE_LIRC_MODE2              ProgType = 20\n\tBPF_PROG_TYPE_SK_REUSEPORT            ProgType = 21\n\tBPF_PROG_TYPE_FLOW_DISSECTOR          ProgType = 22\n\tBPF_PROG_TYPE_CGROUP_SYSCTL           ProgType = 23\n\tBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE ProgType = 24\n\tBPF_PROG_TYPE_CGROUP_SOCKOPT          ProgType = 25\n\tBPF_PROG_TYPE_TRACING                 ProgType = 26\n\tBPF_PROG_TYPE_STRUCT_OPS              ProgType = 27\n\tBPF_PROG_TYPE_EXT                     ProgType = 28\n\tBPF_PROG_TYPE_LSM                     ProgType = 29\n\tBPF_PROG_TYPE_SK_LOOKUP               ProgType = 30\n\tBPF_PROG_TYPE_SYSCALL                 ProgType = 31\n\tBPF_PROG_TYPE_NETFILTER               ProgType = 32\n\t__MAX_BPF_PROG_TYPE                   ProgType = 33\n)\n\ntype RetCode uint32\n\nconst (\n\tBPF_OK                      RetCode = 0\n\tBPF_DROP                    RetCode = 2\n\tBPF_REDIRECT                RetCode = 7\n\tBPF_LWT_REROUTE             RetCode = 128\n\tBPF_FLOW_DISSECTOR_CONTINUE RetCode = 129\n)\n\ntype SkAction uint32\n\nconst (\n\tSK_DROP SkAction = 0\n\tSK_PASS SkAction = 1\n)\n\ntype StackBuildIdStatus uint32\n\nconst (\n\tBPF_STACK_BUILD_ID_EMPTY StackBuildIdStatus = 0\n\tBPF_STACK_BUILD_ID_VALID StackBuildIdStatus = 1\n\tBPF_STACK_BUILD_ID_IP    StackBuildIdStatus = 2\n)\n\ntype StatsType uint32\n\nconst (\n\tBPF_STATS_RUN_TIME StatsType = 0\n)\n\ntype TcxActionBase int32\n\nconst (\n\tTCX_NEXT     TcxActionBase = -1\n\tTCX_PASS     TcxActionBase = 0\n\tTCX_DROP     TcxActionBase = 2\n\tTCX_REDIRECT TcxActionBase = 7\n)\n\ntype XdpAction uint32\n\nconst (\n\tXDP_ABORTED  XdpAction = 0\n\tXDP_DROP     XdpAction = 1\n\tXDP_PASS     XdpAction = 2\n\tXDP_TX       XdpAction = 3\n\tXDP_REDIRECT XdpAction = 4\n)\n\ntype BtfInfo struct {\n\tBtf       Pointer\n\tBtfSize   uint32\n\tId        BTFID\n\tName      Pointer\n\tNameLen   uint32\n\tKernelBtf uint32\n}\n\ntype FuncInfo struct {\n\tInsnOff uint32\n\tTypeId  uint32\n}\n\ntype LineInfo struct {\n\tInsnOff     uint32\n\tFileNameOff uint32\n\tLineOff     uint32\n\tLineCol     uint32\n}\n\ntype LinkInfo struct {\n\tType   LinkType\n\tId     LinkID\n\tProgId uint32\n\t_      [4]byte\n\tExtra  [48]uint8\n}\n\ntype MapInfo struct {\n\tType                  uint32\n\tId                    uint32\n\tKeySize               uint32\n\tValueSize             uint32\n\tMaxEntries            uint32\n\tMapFlags              uint32\n\tName                  ObjName\n\tIfindex               uint32\n\tBtfVmlinuxValueTypeId TypeID\n\tNetnsDev              uint64\n\tNetnsIno              uint64\n\tBtfId                 uint32\n\tBtfKeyTypeId          TypeID\n\tBtfValueTypeId        TypeID\n\tBtfVmlinuxId          uint32\n\tMapExtra              uint64\n}\n\ntype ProgInfo struct {\n\tType                 uint32\n\tId                   uint32\n\tTag                  [8]uint8\n\tJitedProgLen         uint32\n\tXlatedProgLen        uint32\n\tJitedProgInsns       Pointer\n\tXlatedProgInsns      Pointer\n\tLoadTime             uint64\n\tCreatedByUid         uint32\n\tNrMapIds             uint32\n\tMapIds               Pointer\n\tName                 ObjName\n\tIfindex              uint32\n\t_                    [4]byte /* unsupported bitfield */\n\tNetnsDev             uint64\n\tNetnsIno             uint64\n\tNrJitedKsyms         uint32\n\tNrJitedFuncLens      uint32\n\tJitedKsyms           Pointer\n\tJitedFuncLens        Pointer\n\tBtfId                BTFID\n\tFuncInfoRecSize      uint32\n\tFuncInfo             Pointer\n\tNrFuncInfo           uint32\n\tNrLineInfo           uint32\n\tLineInfo             Pointer\n\tJitedLineInfo        Pointer\n\tNrJitedLineInfo      uint32\n\tLineInfoRecSize      uint32\n\tJitedLineInfoRecSize uint32\n\tNrProgTags           uint32\n\tProgTags             uint64\n\tRunTimeNs            uint64\n\tRunCnt               uint64\n\tRecursionMisses      uint64\n\tVerifiedInsns        uint32\n\tAttachBtfObjId       BTFID\n\tAttachBtfId          TypeID\n\t_                    [4]byte\n}\n\ntype SkLookup struct {\n\tCookie         uint64\n\tFamily         uint32\n\tProtocol       uint32\n\tRemoteIp4      [4]uint8\n\tRemoteIp6      [16]uint8\n\tRemotePort     uint16\n\t_              [2]byte\n\tLocalIp4       [4]uint8\n\tLocalIp6       [16]uint8\n\tLocalPort      uint32\n\tIngressIfindex uint32\n\t_              [4]byte\n}\n\ntype XdpMd struct {\n\tData           uint32\n\tDataEnd        uint32\n\tDataMeta       uint32\n\tIngressIfindex uint32\n\tRxQueueIndex   uint32\n\tEgressIfindex  uint32\n}\n\ntype BtfGetFdByIdAttr struct{ Id uint32 }\n\nfunc BtfGetFdById(attr *BtfGetFdByIdAttr) (*FD, error) {\n\tfd, err := BPF(BPF_BTF_GET_FD_BY_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype BtfGetNextIdAttr struct {\n\tId     BTFID\n\tNextId BTFID\n}\n\nfunc BtfGetNextId(attr *BtfGetNextIdAttr) error {\n\t_, err := BPF(BPF_BTF_GET_NEXT_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype BtfLoadAttr struct {\n\tBtf            Pointer\n\tBtfLogBuf      Pointer\n\tBtfSize        uint32\n\tBtfLogSize     uint32\n\tBtfLogLevel    uint32\n\tBtfLogTrueSize uint32\n\tBtfFlags       uint32\n\tBtfTokenFd     int32\n}\n\nfunc BtfLoad(attr *BtfLoadAttr) (*FD, error) {\n\tfd, err := BPF(BPF_BTF_LOAD, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype EnableStatsAttr struct{ Type uint32 }\n\nfunc EnableStats(attr *EnableStatsAttr) (*FD, error) {\n\tfd, err := BPF(BPF_ENABLE_STATS, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype IterCreateAttr struct {\n\tLinkFd uint32\n\tFlags  uint32\n}\n\nfunc IterCreate(attr *IterCreateAttr) (*FD, error) {\n\tfd, err := BPF(BPF_ITER_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkCreateAttr struct {\n\tProgFd      uint32\n\tTargetFd    uint32\n\tAttachType  AttachType\n\tFlags       uint32\n\tTargetBtfId TypeID\n\t_           [44]byte\n}\n\nfunc LinkCreate(attr *LinkCreateAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkCreateIterAttr struct {\n\tProgFd      uint32\n\tTargetFd    uint32\n\tAttachType  AttachType\n\tFlags       uint32\n\tIterInfo    Pointer\n\tIterInfoLen uint32\n\t_           [36]byte\n}\n\nfunc LinkCreateIter(attr *LinkCreateIterAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkCreateKprobeMultiAttr struct {\n\tProgFd           uint32\n\tTargetFd         uint32\n\tAttachType       AttachType\n\tFlags            uint32\n\tKprobeMultiFlags uint32\n\tCount            uint32\n\tSyms             Pointer\n\tAddrs            Pointer\n\tCookies          Pointer\n\t_                [16]byte\n}\n\nfunc LinkCreateKprobeMulti(attr *LinkCreateKprobeMultiAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkCreateNetfilterAttr struct {\n\tProgFd         uint32\n\tTargetFd       uint32\n\tAttachType     AttachType\n\tFlags          uint32\n\tPf             uint32\n\tHooknum        uint32\n\tPriority       int32\n\tNetfilterFlags uint32\n\t_              [32]byte\n}\n\nfunc LinkCreateNetfilter(attr *LinkCreateNetfilterAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkCreateNetkitAttr struct {\n\tProgFd           uint32\n\tTargetIfindex    uint32\n\tAttachType       AttachType\n\tFlags            uint32\n\tRelativeFdOrId   uint32\n\t_                [4]byte\n\tExpectedRevision uint64\n\t_                [32]byte\n}\n\nfunc LinkCreateNetkit(attr *LinkCreateNetkitAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkCreatePerfEventAttr struct {\n\tProgFd     uint32\n\tTargetFd   uint32\n\tAttachType AttachType\n\tFlags      uint32\n\tBpfCookie  uint64\n\t_          [40]byte\n}\n\nfunc LinkCreatePerfEvent(attr *LinkCreatePerfEventAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkCreateTcxAttr struct {\n\tProgFd           uint32\n\tTargetIfindex    uint32\n\tAttachType       AttachType\n\tFlags            uint32\n\tRelativeFdOrId   uint32\n\t_                [4]byte\n\tExpectedRevision uint64\n\t_                [32]byte\n}\n\nfunc LinkCreateTcx(attr *LinkCreateTcxAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkCreateTracingAttr struct {\n\tProgFd      uint32\n\tTargetFd    uint32\n\tAttachType  AttachType\n\tFlags       uint32\n\tTargetBtfId BTFID\n\t_           [4]byte\n\tCookie      uint64\n\t_           [32]byte\n}\n\nfunc LinkCreateTracing(attr *LinkCreateTracingAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkCreateUprobeMultiAttr struct {\n\tProgFd           uint32\n\tTargetFd         uint32\n\tAttachType       AttachType\n\tFlags            uint32\n\tPath             Pointer\n\tOffsets          Pointer\n\tRefCtrOffsets    Pointer\n\tCookies          Pointer\n\tCount            uint32\n\tUprobeMultiFlags uint32\n\tPid              uint32\n\t_                [4]byte\n}\n\nfunc LinkCreateUprobeMulti(attr *LinkCreateUprobeMultiAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkGetFdByIdAttr struct{ Id LinkID }\n\nfunc LinkGetFdById(attr *LinkGetFdByIdAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_GET_FD_BY_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkGetNextIdAttr struct {\n\tId     LinkID\n\tNextId LinkID\n}\n\nfunc LinkGetNextId(attr *LinkGetNextIdAttr) error {\n\t_, err := BPF(BPF_LINK_GET_NEXT_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype LinkUpdateAttr struct {\n\tLinkFd    uint32\n\tNewProgFd uint32\n\tFlags     uint32\n\tOldProgFd uint32\n}\n\nfunc LinkUpdate(attr *LinkUpdateAttr) error {\n\t_, err := BPF(BPF_LINK_UPDATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapCreateAttr struct {\n\tMapType               MapType\n\tKeySize               uint32\n\tValueSize             uint32\n\tMaxEntries            uint32\n\tMapFlags              uint32\n\tInnerMapFd            uint32\n\tNumaNode              uint32\n\tMapName               ObjName\n\tMapIfindex            uint32\n\tBtfFd                 uint32\n\tBtfKeyTypeId          TypeID\n\tBtfValueTypeId        TypeID\n\tBtfVmlinuxValueTypeId TypeID\n\tMapExtra              uint64\n\tValueTypeBtfObjFd     int32\n\tMapTokenFd            int32\n}\n\nfunc MapCreate(attr *MapCreateAttr) (*FD, error) {\n\tfd, err := BPF(BPF_MAP_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype MapDeleteBatchAttr struct {\n\tInBatch   Pointer\n\tOutBatch  Pointer\n\tKeys      Pointer\n\tValues    Pointer\n\tCount     uint32\n\tMapFd     uint32\n\tElemFlags uint64\n\tFlags     uint64\n}\n\nfunc MapDeleteBatch(attr *MapDeleteBatchAttr) error {\n\t_, err := BPF(BPF_MAP_DELETE_BATCH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapDeleteElemAttr struct {\n\tMapFd uint32\n\t_     [4]byte\n\tKey   Pointer\n\tValue Pointer\n\tFlags uint64\n}\n\nfunc MapDeleteElem(attr *MapDeleteElemAttr) error {\n\t_, err := BPF(BPF_MAP_DELETE_ELEM, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapFreezeAttr struct{ MapFd uint32 }\n\nfunc MapFreeze(attr *MapFreezeAttr) error {\n\t_, err := BPF(BPF_MAP_FREEZE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapGetFdByIdAttr struct{ Id uint32 }\n\nfunc MapGetFdById(attr *MapGetFdByIdAttr) (*FD, error) {\n\tfd, err := BPF(BPF_MAP_GET_FD_BY_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype MapGetNextIdAttr struct {\n\tId     uint32\n\tNextId uint32\n}\n\nfunc MapGetNextId(attr *MapGetNextIdAttr) error {\n\t_, err := BPF(BPF_MAP_GET_NEXT_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapGetNextKeyAttr struct {\n\tMapFd   uint32\n\t_       [4]byte\n\tKey     Pointer\n\tNextKey Pointer\n}\n\nfunc MapGetNextKey(attr *MapGetNextKeyAttr) error {\n\t_, err := BPF(BPF_MAP_GET_NEXT_KEY, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapLookupAndDeleteBatchAttr struct {\n\tInBatch   Pointer\n\tOutBatch  Pointer\n\tKeys      Pointer\n\tValues    Pointer\n\tCount     uint32\n\tMapFd     uint32\n\tElemFlags uint64\n\tFlags     uint64\n}\n\nfunc MapLookupAndDeleteBatch(attr *MapLookupAndDeleteBatchAttr) error {\n\t_, err := BPF(BPF_MAP_LOOKUP_AND_DELETE_BATCH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapLookupAndDeleteElemAttr struct {\n\tMapFd uint32\n\t_     [4]byte\n\tKey   Pointer\n\tValue Pointer\n\tFlags uint64\n}\n\nfunc MapLookupAndDeleteElem(attr *MapLookupAndDeleteElemAttr) error {\n\t_, err := BPF(BPF_MAP_LOOKUP_AND_DELETE_ELEM, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapLookupBatchAttr struct {\n\tInBatch   Pointer\n\tOutBatch  Pointer\n\tKeys      Pointer\n\tValues    Pointer\n\tCount     uint32\n\tMapFd     uint32\n\tElemFlags uint64\n\tFlags     uint64\n}\n\nfunc MapLookupBatch(attr *MapLookupBatchAttr) error {\n\t_, err := BPF(BPF_MAP_LOOKUP_BATCH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapLookupElemAttr struct {\n\tMapFd uint32\n\t_     [4]byte\n\tKey   Pointer\n\tValue Pointer\n\tFlags uint64\n}\n\nfunc MapLookupElem(attr *MapLookupElemAttr) error {\n\t_, err := BPF(BPF_MAP_LOOKUP_ELEM, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapUpdateBatchAttr struct {\n\tInBatch   Pointer\n\tOutBatch  Pointer\n\tKeys      Pointer\n\tValues    Pointer\n\tCount     uint32\n\tMapFd     uint32\n\tElemFlags uint64\n\tFlags     uint64\n}\n\nfunc MapUpdateBatch(attr *MapUpdateBatchAttr) error {\n\t_, err := BPF(BPF_MAP_UPDATE_BATCH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapUpdateElemAttr struct {\n\tMapFd uint32\n\t_     [4]byte\n\tKey   Pointer\n\tValue Pointer\n\tFlags uint64\n}\n\nfunc MapUpdateElem(attr *MapUpdateElemAttr) error {\n\t_, err := BPF(BPF_MAP_UPDATE_ELEM, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ObjGetAttr struct {\n\tPathname  Pointer\n\tBpfFd     uint32\n\tFileFlags uint32\n\tPathFd    int32\n\t_         [4]byte\n}\n\nfunc ObjGet(attr *ObjGetAttr) (*FD, error) {\n\tfd, err := BPF(BPF_OBJ_GET, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype ObjGetInfoByFdAttr struct {\n\tBpfFd   uint32\n\tInfoLen uint32\n\tInfo    Pointer\n}\n\nfunc ObjGetInfoByFd(attr *ObjGetInfoByFdAttr) error {\n\t_, err := BPF(BPF_OBJ_GET_INFO_BY_FD, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ObjPinAttr struct {\n\tPathname  Pointer\n\tBpfFd     uint32\n\tFileFlags uint32\n\tPathFd    int32\n\t_         [4]byte\n}\n\nfunc ObjPin(attr *ObjPinAttr) error {\n\t_, err := BPF(BPF_OBJ_PIN, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ProgAttachAttr struct {\n\tTargetFdOrIfindex uint32\n\tAttachBpfFd       uint32\n\tAttachType        uint32\n\tAttachFlags       uint32\n\tReplaceBpfFd      uint32\n\tRelativeFdOrId    uint32\n\tExpectedRevision  uint64\n}\n\nfunc ProgAttach(attr *ProgAttachAttr) error {\n\t_, err := BPF(BPF_PROG_ATTACH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ProgBindMapAttr struct {\n\tProgFd uint32\n\tMapFd  uint32\n\tFlags  uint32\n}\n\nfunc ProgBindMap(attr *ProgBindMapAttr) error {\n\t_, err := BPF(BPF_PROG_BIND_MAP, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ProgDetachAttr struct {\n\tTargetFdOrIfindex uint32\n\tAttachBpfFd       uint32\n\tAttachType        uint32\n\tAttachFlags       uint32\n\t_                 [4]byte\n\tRelativeFdOrId    uint32\n\tExpectedRevision  uint64\n}\n\nfunc ProgDetach(attr *ProgDetachAttr) error {\n\t_, err := BPF(BPF_PROG_DETACH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ProgGetFdByIdAttr struct{ Id uint32 }\n\nfunc ProgGetFdById(attr *ProgGetFdByIdAttr) (*FD, error) {\n\tfd, err := BPF(BPF_PROG_GET_FD_BY_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype ProgGetNextIdAttr struct {\n\tId     uint32\n\tNextId uint32\n}\n\nfunc ProgGetNextId(attr *ProgGetNextIdAttr) error {\n\t_, err := BPF(BPF_PROG_GET_NEXT_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ProgLoadAttr struct {\n\tProgType           ProgType\n\tInsnCnt            uint32\n\tInsns              Pointer\n\tLicense            Pointer\n\tLogLevel           LogLevel\n\tLogSize            uint32\n\tLogBuf             Pointer\n\tKernVersion        uint32\n\tProgFlags          uint32\n\tProgName           ObjName\n\tProgIfindex        uint32\n\tExpectedAttachType AttachType\n\tProgBtfFd          uint32\n\tFuncInfoRecSize    uint32\n\tFuncInfo           Pointer\n\tFuncInfoCnt        uint32\n\tLineInfoRecSize    uint32\n\tLineInfo           Pointer\n\tLineInfoCnt        uint32\n\tAttachBtfId        TypeID\n\tAttachBtfObjFd     uint32\n\tCoreReloCnt        uint32\n\tFdArray            Pointer\n\tCoreRelos          Pointer\n\tCoreReloRecSize    uint32\n\tLogTrueSize        uint32\n\tProgTokenFd        int32\n\t_                  [4]byte\n}\n\nfunc ProgLoad(attr *ProgLoadAttr) (*FD, error) {\n\tfd, err := BPF(BPF_PROG_LOAD, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype ProgQueryAttr struct {\n\tTargetFdOrIfindex uint32\n\tAttachType        AttachType\n\tQueryFlags        uint32\n\tAttachFlags       uint32\n\tProgIds           Pointer\n\tCount             uint32\n\t_                 [4]byte\n\tProgAttachFlags   Pointer\n\tLinkIds           Pointer\n\tLinkAttachFlags   Pointer\n\tRevision          uint64\n}\n\nfunc ProgQuery(attr *ProgQueryAttr) error {\n\t_, err := BPF(BPF_PROG_QUERY, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ProgRunAttr struct {\n\tProgFd      uint32\n\tRetval      uint32\n\tDataSizeIn  uint32\n\tDataSizeOut uint32\n\tDataIn      Pointer\n\tDataOut     Pointer\n\tRepeat      uint32\n\tDuration    uint32\n\tCtxSizeIn   uint32\n\tCtxSizeOut  uint32\n\tCtxIn       Pointer\n\tCtxOut      Pointer\n\tFlags       uint32\n\tCpu         uint32\n\tBatchSize   uint32\n\t_           [4]byte\n}\n\nfunc ProgRun(attr *ProgRunAttr) error {\n\t_, err := BPF(BPF_PROG_TEST_RUN, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype RawTracepointOpenAttr struct {\n\tName   Pointer\n\tProgFd uint32\n\t_      [4]byte\n\tCookie uint64\n}\n\nfunc RawTracepointOpen(attr *RawTracepointOpenAttr) (*FD, error) {\n\tfd, err := BPF(BPF_RAW_TRACEPOINT_OPEN, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype CgroupLinkInfo struct {\n\tType       LinkType\n\tId         LinkID\n\tProgId     uint32\n\t_          [4]byte\n\tCgroupId   uint64\n\tAttachType AttachType\n\t_          [36]byte\n}\n\ntype IterLinkInfo struct {\n\tType          LinkType\n\tId            LinkID\n\tProgId        uint32\n\t_             [4]byte\n\tTargetName    Pointer\n\tTargetNameLen uint32\n}\n\ntype KprobeLinkInfo struct {\n\tType          LinkType\n\tId            LinkID\n\tProgId        uint32\n\t_             [4]byte\n\tPerfEventType PerfEventType\n\t_             [4]byte\n\tFuncName      Pointer\n\tNameLen       uint32\n\tOffset        uint32\n\tAddr          uint64\n\tMissed        uint64\n\tCookie        uint64\n}\n\ntype KprobeMultiLinkInfo struct {\n\tType    LinkType\n\tId      LinkID\n\tProgId  uint32\n\t_       [4]byte\n\tAddrs   Pointer\n\tCount   uint32\n\tFlags   uint32\n\tMissed  uint64\n\tCookies uint64\n\t_       [16]byte\n}\n\ntype NetNsLinkInfo struct {\n\tType       LinkType\n\tId         LinkID\n\tProgId     uint32\n\t_          [4]byte\n\tNetnsIno   uint32\n\tAttachType AttachType\n\t_          [40]byte\n}\n\ntype NetfilterLinkInfo struct {\n\tType     LinkType\n\tId       LinkID\n\tProgId   uint32\n\t_        [4]byte\n\tPf       uint32\n\tHooknum  uint32\n\tPriority int32\n\tFlags    uint32\n\t_        [32]byte\n}\n\ntype NetkitLinkInfo struct {\n\tType       LinkType\n\tId         LinkID\n\tProgId     uint32\n\t_          [4]byte\n\tIfindex    uint32\n\tAttachType AttachType\n\t_          [40]byte\n}\n\ntype PerfEventLinkInfo struct {\n\tType          LinkType\n\tId            LinkID\n\tProgId        uint32\n\t_             [4]byte\n\tPerfEventType PerfEventType\n}\n\ntype RawTracepointLinkInfo struct {\n\tType      LinkType\n\tId        LinkID\n\tProgId    uint32\n\t_         [4]byte\n\tTpName    Pointer\n\tTpNameLen uint32\n\t_         [36]byte\n}\n\ntype TcxLinkInfo struct {\n\tType       LinkType\n\tId         LinkID\n\tProgId     uint32\n\t_          [4]byte\n\tIfindex    uint32\n\tAttachType AttachType\n\t_          [40]byte\n}\n\ntype TracingLinkInfo struct {\n\tType        LinkType\n\tId          LinkID\n\tProgId      uint32\n\t_           [4]byte\n\tAttachType  AttachType\n\tTargetObjId uint32\n\tTargetBtfId TypeID\n\t_           [36]byte\n}\n\ntype XDPLinkInfo struct {\n\tType    LinkType\n\tId      LinkID\n\tProgId  uint32\n\t_       [4]byte\n\tIfindex uint32\n\t_       [44]byte\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sysenc/buffer.go",
    "content": "package sysenc\n\nimport (\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\ntype Buffer struct {\n\tptr unsafe.Pointer\n\t// Size of the buffer. syscallPointerOnly if created from UnsafeBuffer or when using\n\t// zero-copy unmarshaling.\n\tsize int\n}\n\nconst syscallPointerOnly = -1\n\nfunc newBuffer(buf []byte) Buffer {\n\tif len(buf) == 0 {\n\t\treturn Buffer{}\n\t}\n\treturn Buffer{unsafe.Pointer(&buf[0]), len(buf)}\n}\n\n// UnsafeBuffer constructs a Buffer for zero-copy unmarshaling.\n//\n// [Pointer] is the only valid method to call on such a Buffer.\n// Use [SyscallBuffer] instead if possible.\nfunc UnsafeBuffer(ptr unsafe.Pointer) Buffer {\n\treturn Buffer{ptr, syscallPointerOnly}\n}\n\n// SyscallOutput prepares a Buffer for a syscall to write into.\n//\n// size is the length of the desired buffer in bytes.\n// The buffer may point at the underlying memory of dst, in which case [Unmarshal]\n// becomes a no-op.\n//\n// The contents of the buffer are undefined and may be non-zero.\nfunc SyscallOutput(dst any, size int) Buffer {\n\tif dstBuf := unsafeBackingMemory(dst); len(dstBuf) == size {\n\t\tbuf := newBuffer(dstBuf)\n\t\tbuf.size = syscallPointerOnly\n\t\treturn buf\n\t}\n\n\treturn newBuffer(make([]byte, size))\n}\n\n// CopyTo copies the buffer into dst.\n//\n// Returns the number of copied bytes.\nfunc (b Buffer) CopyTo(dst []byte) int {\n\treturn copy(dst, b.Bytes())\n}\n\n// AppendTo appends the buffer onto dst.\nfunc (b Buffer) AppendTo(dst []byte) []byte {\n\treturn append(dst, b.Bytes()...)\n}\n\n// Pointer returns the location where a syscall should write.\nfunc (b Buffer) Pointer() sys.Pointer {\n\t// NB: This deliberately ignores b.length to support zero-copy\n\t// marshaling / unmarshaling using unsafe.Pointer.\n\treturn sys.NewPointer(b.ptr)\n}\n\n// Unmarshal the buffer into the provided value.\nfunc (b Buffer) Unmarshal(data any) error {\n\tif b.size == syscallPointerOnly {\n\t\treturn nil\n\t}\n\n\treturn Unmarshal(data, b.Bytes())\n}\n\n// Bytes returns the buffer as a byte slice. Returns nil if the Buffer was\n// created using UnsafeBuffer or by zero-copy unmarshaling.\nfunc (b Buffer) Bytes() []byte {\n\tif b.size == syscallPointerOnly {\n\t\treturn nil\n\t}\n\treturn unsafe.Slice((*byte)(b.ptr), b.size)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sysenc/doc.go",
    "content": "// Package sysenc provides efficient conversion of Go values to system\n// call interfaces.\npackage sysenc\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sysenc/layout.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 at https://go.dev/LICENSE.\n\npackage sysenc\n\nimport (\n\t\"reflect\"\n\t\"sync\"\n)\n\nvar hasUnexportedFieldsCache sync.Map // map[reflect.Type]bool\n\nfunc hasUnexportedFields(typ reflect.Type) bool {\n\tswitch typ.Kind() {\n\tcase reflect.Slice, reflect.Array, reflect.Pointer:\n\t\treturn hasUnexportedFields(typ.Elem())\n\n\tcase reflect.Struct:\n\t\tif unexported, ok := hasUnexportedFieldsCache.Load(typ); ok {\n\t\t\treturn unexported.(bool)\n\t\t}\n\n\t\tunexported := false\n\t\tfor i, n := 0, typ.NumField(); i < n; i++ {\n\t\t\tfield := typ.Field(i)\n\t\t\t// Package binary allows _ fields but always writes zeroes into them.\n\t\t\tif (!field.IsExported() && field.Name != \"_\") || hasUnexportedFields(field.Type) {\n\t\t\t\tunexported = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\thasUnexportedFieldsCache.Store(typ, unexported)\n\t\treturn unexported\n\n\tdefault:\n\t\t// NB: It's not clear what this means for Chan and so on.\n\t\treturn false\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sysenc/marshal.go",
    "content": "package sysenc\n\nimport (\n\t\"bytes\"\n\t\"encoding\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"slices\"\n\t\"sync\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/internal\"\n)\n\n// Marshal turns data into a byte slice using the system's native endianness.\n//\n// If possible, avoids allocations by directly using the backing memory\n// of data. This means that the variable must not be modified for the lifetime\n// of the returned [Buffer].\n//\n// Returns an error if the data can't be turned into a byte slice according to\n// the behaviour of [binary.Write].\nfunc Marshal(data any, size int) (Buffer, error) {\n\tif data == nil {\n\t\treturn Buffer{}, errors.New(\"can't marshal a nil value\")\n\t}\n\n\tvar buf []byte\n\tvar err error\n\tswitch value := data.(type) {\n\tcase encoding.BinaryMarshaler:\n\t\tbuf, err = value.MarshalBinary()\n\tcase string:\n\t\tbuf = unsafe.Slice(unsafe.StringData(value), len(value))\n\tcase []byte:\n\t\tbuf = value\n\tcase int16:\n\t\tbuf = internal.NativeEndian.AppendUint16(make([]byte, 0, 2), uint16(value))\n\tcase uint16:\n\t\tbuf = internal.NativeEndian.AppendUint16(make([]byte, 0, 2), value)\n\tcase int32:\n\t\tbuf = internal.NativeEndian.AppendUint32(make([]byte, 0, 4), uint32(value))\n\tcase uint32:\n\t\tbuf = internal.NativeEndian.AppendUint32(make([]byte, 0, 4), value)\n\tcase int64:\n\t\tbuf = internal.NativeEndian.AppendUint64(make([]byte, 0, 8), uint64(value))\n\tcase uint64:\n\t\tbuf = internal.NativeEndian.AppendUint64(make([]byte, 0, 8), value)\n\tdefault:\n\t\tif buf := unsafeBackingMemory(data); len(buf) == size {\n\t\t\treturn newBuffer(buf), nil\n\t\t}\n\n\t\twr := internal.NewBuffer(make([]byte, 0, size))\n\t\tdefer internal.PutBuffer(wr)\n\n\t\terr = binary.Write(wr, internal.NativeEndian, value)\n\t\tbuf = wr.Bytes()\n\t}\n\tif err != nil {\n\t\treturn Buffer{}, err\n\t}\n\n\tif len(buf) != size {\n\t\treturn Buffer{}, fmt.Errorf(\"%T doesn't marshal to %d bytes\", data, size)\n\t}\n\n\treturn newBuffer(buf), nil\n}\n\nvar bytesReaderPool = sync.Pool{\n\tNew: func() interface{} {\n\t\treturn new(bytes.Reader)\n\t},\n}\n\n// Unmarshal a byte slice in the system's native endianness into data.\n//\n// Returns an error if buf can't be unmarshalled according to the behaviour\n// of [binary.Read].\nfunc Unmarshal(data interface{}, buf []byte) error {\n\tswitch value := data.(type) {\n\tcase encoding.BinaryUnmarshaler:\n\t\treturn value.UnmarshalBinary(buf)\n\n\tcase *string:\n\t\t*value = string(buf)\n\t\treturn nil\n\n\tcase *[]byte:\n\t\t// Backwards compat: unmarshaling into a slice replaces the whole slice.\n\t\t*value = slices.Clone(buf)\n\t\treturn nil\n\n\tdefault:\n\t\tif dataBuf := unsafeBackingMemory(data); len(dataBuf) == len(buf) {\n\t\t\tcopy(dataBuf, buf)\n\t\t\treturn nil\n\t\t}\n\n\t\trd := bytesReaderPool.Get().(*bytes.Reader)\n\t\tdefer bytesReaderPool.Put(rd)\n\n\t\trd.Reset(buf)\n\n\t\tif err := binary.Read(rd, internal.NativeEndian, value); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif rd.Len() != 0 {\n\t\t\treturn fmt.Errorf(\"unmarshaling %T doesn't consume all data\", data)\n\t\t}\n\n\t\treturn nil\n\t}\n}\n\n// unsafeBackingMemory returns the backing memory of data if it can be used\n// instead of calling into package binary.\n//\n// Returns nil if the value is not a pointer or a slice, or if it contains\n// padding or unexported fields.\nfunc unsafeBackingMemory(data any) []byte {\n\tif data == nil {\n\t\treturn nil\n\t}\n\n\tvalue := reflect.ValueOf(data)\n\tvar valueSize int\n\tswitch value.Kind() {\n\tcase reflect.Pointer:\n\t\tif value.IsNil() {\n\t\t\treturn nil\n\t\t}\n\n\t\tif elemType := value.Type().Elem(); elemType.Kind() != reflect.Slice {\n\t\t\tvalueSize = int(elemType.Size())\n\t\t\tbreak\n\t\t}\n\n\t\t// We're dealing with a pointer to a slice. Dereference and\n\t\t// handle it like a regular slice.\n\t\tvalue = value.Elem()\n\t\tfallthrough\n\n\tcase reflect.Slice:\n\t\tvalueSize = int(value.Type().Elem().Size()) * value.Len()\n\n\tdefault:\n\t\t// Prevent Value.UnsafePointer from panicking.\n\t\treturn nil\n\t}\n\n\t// Some nil pointer types currently crash binary.Size. Call it after our own\n\t// code so that the panic isn't reachable.\n\t// See https://github.com/golang/go/issues/60892\n\tif size := binary.Size(data); size == -1 || size != valueSize {\n\t\t// The type contains padding or unsupported types.\n\t\treturn nil\n\t}\n\n\tif hasUnexportedFields(reflect.TypeOf(data)) {\n\t\treturn nil\n\t}\n\n\t// Reinterpret the pointer as a byte slice. This violates the unsafe.Pointer\n\t// rules because it's very unlikely that the source data has \"an equivalent\n\t// memory layout\". However, we can make it safe-ish because of the\n\t// following reasons:\n\t//  - There is no alignment mismatch since we cast to a type with an\n\t//    alignment of 1.\n\t//  - There are no pointers in the source type so we don't upset the GC.\n\t//  - The length is verified at runtime.\n\treturn unsafe.Slice((*byte)(value.UnsafePointer()), valueSize)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/testutils/fdtrace/fd_trace.go",
    "content": "package fdtrace\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\n// foundLeak is atomic since the GC may collect objects in parallel.\nvar foundLeak atomic.Bool\n\nfunc onLeakFD(fs *runtime.Frames) {\n\tfoundLeak.Store(true)\n\tfmt.Fprintln(os.Stderr, \"leaked fd created at:\")\n\tfmt.Fprintln(os.Stderr, formatFrames(fs))\n}\n\n// fds is a registry of all file descriptors wrapped into sys.fds that were\n// created while an fd tracer was active.\nvar fds *sync.Map // map[int]*runtime.Frames\n\n// TraceFD associates raw with the current execution stack.\n//\n// skip controls how many entries of the stack the function should skip.\nfunc TraceFD(raw int, skip int) {\n\tif fds == nil {\n\t\treturn\n\t}\n\n\t// Attempt to store the caller's stack for the given fd value.\n\t// Panic if fds contains an existing stack for the fd.\n\told, exist := fds.LoadOrStore(raw, callersFrames(skip))\n\tif exist {\n\t\tf := old.(*runtime.Frames)\n\t\tpanic(fmt.Sprintf(\"found existing stack for fd %d:\\n%s\", raw, formatFrames(f)))\n\t}\n}\n\n// ForgetFD removes any existing association for raw.\nfunc ForgetFD(raw int) {\n\tif fds != nil {\n\t\tfds.Delete(raw)\n\t}\n}\n\n// LeakFD indicates that raw was leaked.\n//\n// Calling the function with a value that was not passed to [TraceFD] before\n// is undefined.\nfunc LeakFD(raw int) {\n\tif fds == nil {\n\t\treturn\n\t}\n\n\t// Invoke the fd leak callback. Calls LoadAndDelete to guarantee the callback\n\t// is invoked at most once for one sys.FD allocation, runtime.Frames can only\n\t// be unwound once.\n\tf, ok := fds.LoadAndDelete(raw)\n\tif ok {\n\t\tonLeakFD(f.(*runtime.Frames))\n\t}\n}\n\n// flushFrames removes all elements from fds and returns them as a slice. This\n// deals with the fact that a runtime.Frames can only be unwound once using\n// Next().\nfunc flushFrames() []*runtime.Frames {\n\tvar frames []*runtime.Frames\n\tfds.Range(func(key, value any) bool {\n\t\tframes = append(frames, value.(*runtime.Frames))\n\t\tfds.Delete(key)\n\t\treturn true\n\t})\n\treturn frames\n}\n\nfunc callersFrames(skip int) *runtime.Frames {\n\tc := make([]uintptr, 32)\n\n\t// Skip runtime.Callers and this function.\n\ti := runtime.Callers(skip+2, c)\n\tif i == 0 {\n\t\treturn nil\n\t}\n\n\treturn runtime.CallersFrames(c)\n}\n\n// formatFrames formats a runtime.Frames as a human-readable string.\nfunc formatFrames(fs *runtime.Frames) string {\n\tvar b bytes.Buffer\n\tfor {\n\t\tf, more := fs.Next()\n\t\tb.WriteString(fmt.Sprintf(\"\\t%s+%#x\\n\\t\\t%s:%d\\n\", f.Function, f.PC-f.Entry, f.File, f.Line))\n\t\tif !more {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn b.String()\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/testutils/fdtrace/main.go",
    "content": "package fdtrace\n\nimport (\n\t\"os\"\n\t\"sync\"\n)\n\ntype testingM interface {\n\tRun() int\n}\n\n// TestMain runs m with fd tracing enabled.\n//\n// The function calls [os.Exit] and does not return.\nfunc TestMain(m testingM) {\n\tfds = new(sync.Map)\n\n\tret := m.Run()\n\n\tif fs := flushFrames(); len(fs) != 0 {\n\t\tfor _, f := range fs {\n\t\t\tonLeakFD(f)\n\t\t}\n\t}\n\n\tif foundLeak.Load() {\n\t\tret = 99\n\t}\n\n\tos.Exit(ret)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/tracefs/kprobe.go",
    "content": "package tracefs\n\nimport (\n\t\"crypto/rand\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/linux\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nvar (\n\tErrInvalidInput = errors.New(\"invalid input\")\n\n\tErrInvalidMaxActive = errors.New(\"can only set maxactive on kretprobes\")\n)\n\n//go:generate go run golang.org/x/tools/cmd/stringer@latest -type=ProbeType -linecomment\n\ntype ProbeType uint8\n\nconst (\n\tKprobe ProbeType = iota // kprobe\n\tUprobe                  // uprobe\n)\n\nfunc (pt ProbeType) eventsFile() (*os.File, error) {\n\tpath, err := sanitizeTracefsPath(fmt.Sprintf(\"%s_events\", pt.String()))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn os.OpenFile(path, os.O_APPEND|os.O_WRONLY, 0666)\n}\n\ntype ProbeArgs struct {\n\tType                         ProbeType\n\tSymbol, Group, Path          string\n\tOffset, RefCtrOffset, Cookie uint64\n\tPid, RetprobeMaxActive       int\n\tRet                          bool\n}\n\n// RandomGroup generates a pseudorandom string for use as a tracefs group name.\n// Returns an error when the output string would exceed 63 characters (kernel\n// limitation), when rand.Read() fails or when prefix contains characters not\n// allowed by IsValidTraceID.\nfunc RandomGroup(prefix string) (string, error) {\n\tif !validIdentifier(prefix) {\n\t\treturn \"\", fmt.Errorf(\"prefix '%s' must be alphanumeric or underscore: %w\", prefix, ErrInvalidInput)\n\t}\n\n\tb := make([]byte, 8)\n\tif _, err := rand.Read(b); err != nil {\n\t\treturn \"\", fmt.Errorf(\"reading random bytes: %w\", err)\n\t}\n\n\tgroup := fmt.Sprintf(\"%s_%x\", prefix, b)\n\tif len(group) > 63 {\n\t\treturn \"\", fmt.Errorf(\"group name '%s' cannot be longer than 63 characters: %w\", group, ErrInvalidInput)\n\t}\n\n\treturn group, nil\n}\n\n// validIdentifier implements the equivalent of a regex match\n// against \"^[a-zA-Z_][0-9a-zA-Z_]*$\".\n//\n// Trace event groups, names and kernel symbols must adhere to this set\n// of characters. Non-empty, first character must not be a number, all\n// characters must be alphanumeric or underscore.\nfunc validIdentifier(s string) bool {\n\tif len(s) < 1 {\n\t\treturn false\n\t}\n\tfor i, c := range []byte(s) {\n\t\tswitch {\n\t\tcase c >= 'a' && c <= 'z':\n\t\tcase c >= 'A' && c <= 'Z':\n\t\tcase c == '_':\n\t\tcase i > 0 && c >= '0' && c <= '9':\n\n\t\tdefault:\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc sanitizeTracefsPath(path ...string) (string, error) {\n\tbase, err := getTracefsPath()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tl := filepath.Join(path...)\n\tp := filepath.Join(base, l)\n\tif !strings.HasPrefix(p, base) {\n\t\treturn \"\", fmt.Errorf(\"path '%s' attempts to escape base path '%s': %w\", l, base, ErrInvalidInput)\n\t}\n\treturn p, nil\n}\n\n// getTracefsPath will return a correct path to the tracefs mount point.\n// Since kernel 4.1 tracefs should be mounted by default at /sys/kernel/tracing,\n// but may be also be available at /sys/kernel/debug/tracing if debugfs is mounted.\n// The available tracefs paths will depends on distribution choices.\nvar getTracefsPath = sync.OnceValues(func() (string, error) {\n\tif !internal.OnLinux {\n\t\treturn \"\", fmt.Errorf(\"tracefs: %w\", internal.ErrNotSupportedOnOS)\n\t}\n\n\tfor _, p := range []struct {\n\t\tpath   string\n\t\tfsType int64\n\t}{\n\t\t{\"/sys/kernel/tracing\", unix.TRACEFS_MAGIC},\n\t\t{\"/sys/kernel/debug/tracing\", unix.TRACEFS_MAGIC},\n\t\t// RHEL/CentOS\n\t\t{\"/sys/kernel/debug/tracing\", unix.DEBUGFS_MAGIC},\n\t} {\n\t\tif fsType, err := linux.FSType(p.path); err == nil && fsType == p.fsType {\n\t\t\treturn p.path, nil\n\t\t}\n\t}\n\n\treturn \"\", errors.New(\"neither debugfs nor tracefs are mounted\")\n})\n\n// sanitizeIdentifier replaces every invalid character for the tracefs api with an underscore.\n//\n// It is equivalent to calling regexp.MustCompile(\"[^a-zA-Z0-9]+\").ReplaceAllString(\"_\").\nfunc sanitizeIdentifier(s string) string {\n\tvar skip bool\n\treturn strings.Map(func(c rune) rune {\n\t\tswitch {\n\t\tcase c >= 'a' && c <= 'z',\n\t\t\tc >= 'A' && c <= 'Z',\n\t\t\tc >= '0' && c <= '9':\n\t\t\tskip = false\n\t\t\treturn c\n\n\t\tcase skip:\n\t\t\treturn -1\n\n\t\tdefault:\n\t\t\tskip = true\n\t\t\treturn '_'\n\t\t}\n\t}, s)\n}\n\n// EventID reads a trace event's ID from tracefs given its group and name.\n// The kernel requires group and name to be alphanumeric or underscore.\nfunc EventID(group, name string) (uint64, error) {\n\tif !validIdentifier(group) {\n\t\treturn 0, fmt.Errorf(\"invalid tracefs group: %q\", group)\n\t}\n\n\tif !validIdentifier(name) {\n\t\treturn 0, fmt.Errorf(\"invalid tracefs name: %q\", name)\n\t}\n\n\tpath, err := sanitizeTracefsPath(\"events\", group, name, \"id\")\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\ttid, err := internal.ReadUint64FromFile(\"%d\\n\", path)\n\tif errors.Is(err, os.ErrNotExist) {\n\t\treturn 0, err\n\t}\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"reading trace event ID of %s/%s: %w\", group, name, err)\n\t}\n\n\treturn tid, nil\n}\n\nfunc probePrefix(ret bool, maxActive int) string {\n\tif ret {\n\t\tif maxActive > 0 {\n\t\t\treturn fmt.Sprintf(\"r%d\", maxActive)\n\t\t}\n\t\treturn \"r\"\n\t}\n\treturn \"p\"\n}\n\n// Event represents an entry in a tracefs probe events file.\ntype Event struct {\n\ttyp         ProbeType\n\tgroup, name string\n\t// event id allocated by the kernel. 0 if the event has already been removed.\n\tid uint64\n}\n\n// NewEvent creates a new ephemeral trace event.\n//\n// Returns os.ErrNotExist if symbol is not a valid\n// kernel symbol, or if it is not traceable with kprobes. Returns os.ErrExist\n// if a probe with the same group and symbol already exists. Returns an error if\n// args.RetprobeMaxActive is used on non kprobe types. Returns ErrNotSupported if\n// the kernel is too old to support kretprobe maxactive.\nfunc NewEvent(args ProbeArgs) (*Event, error) {\n\t// Before attempting to create a trace event through tracefs,\n\t// check if an event with the same group and name already exists.\n\t// Kernels 4.x and earlier don't return os.ErrExist on writing a duplicate\n\t// entry, so we need to rely on reads for detecting uniqueness.\n\teventName := sanitizeIdentifier(args.Symbol)\n\t_, err := EventID(args.Group, eventName)\n\tif err == nil {\n\t\treturn nil, fmt.Errorf(\"trace event %s/%s: %w\", args.Group, eventName, os.ErrExist)\n\t}\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn nil, fmt.Errorf(\"trace event %s/%s: %w (unknown symbol?)\", args.Group, eventName, err)\n\t}\n\tif !errors.Is(err, os.ErrNotExist) {\n\t\treturn nil, fmt.Errorf(\"checking trace event %s/%s: %w\", args.Group, eventName, err)\n\t}\n\n\t// Open the kprobe_events file in tracefs.\n\tf, err := args.Type.eventsFile()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tvar pe, token string\n\tswitch args.Type {\n\tcase Kprobe:\n\t\t// The kprobe_events syntax is as follows (see Documentation/trace/kprobetrace.txt):\n\t\t// p[:[GRP/]EVENT] [MOD:]SYM[+offs]|MEMADDR [FETCHARGS] : Set a probe\n\t\t// r[MAXACTIVE][:[GRP/]EVENT] [MOD:]SYM[+0] [FETCHARGS] : Set a return probe\n\t\t// -:[GRP/]EVENT                                        : Clear a probe\n\t\t//\n\t\t// Some examples:\n\t\t// r:ebpf_1234/r_my_kretprobe nf_conntrack_destroy\n\t\t// p:ebpf_5678/p_my_kprobe __x64_sys_execve\n\t\t//\n\t\t// Leaving the kretprobe's MAXACTIVE set to 0 (or absent) will make the\n\t\t// kernel default to NR_CPUS. This is desired in most eBPF cases since\n\t\t// subsampling or rate limiting logic can be more accurately implemented in\n\t\t// the eBPF program itself.\n\t\t// See Documentation/kprobes.txt for more details.\n\t\tif args.RetprobeMaxActive != 0 && !args.Ret {\n\t\t\treturn nil, ErrInvalidMaxActive\n\t\t}\n\t\ttoken = KprobeToken(args)\n\t\tpe = fmt.Sprintf(\"%s:%s/%s %s\", probePrefix(args.Ret, args.RetprobeMaxActive), args.Group, eventName, token)\n\tcase Uprobe:\n\t\t// The uprobe_events syntax is as follows:\n\t\t// p[:[GRP/]EVENT] PATH:OFFSET [FETCHARGS] : Set a probe\n\t\t// r[:[GRP/]EVENT] PATH:OFFSET [FETCHARGS] : Set a return probe\n\t\t// -:[GRP/]EVENT                           : Clear a probe\n\t\t//\n\t\t// Some examples:\n\t\t// r:ebpf_1234/readline /bin/bash:0x12345\n\t\t// p:ebpf_5678/main_mySymbol /bin/mybin:0x12345(0x123)\n\t\t//\n\t\t// See Documentation/trace/uprobetracer.txt for more details.\n\t\tif args.RetprobeMaxActive != 0 {\n\t\t\treturn nil, ErrInvalidMaxActive\n\t\t}\n\t\ttoken = UprobeToken(args)\n\t\tpe = fmt.Sprintf(\"%s:%s/%s %s\", probePrefix(args.Ret, 0), args.Group, eventName, token)\n\t}\n\t_, err = f.WriteString(pe)\n\n\t// Since commit 97c753e62e6c, ENOENT is correctly returned instead of EINVAL\n\t// when trying to create a retprobe for a missing symbol.\n\tif errors.Is(err, os.ErrNotExist) {\n\t\treturn nil, fmt.Errorf(\"token %s: not found: %w\", token, err)\n\t}\n\t// Since commit ab105a4fb894, EILSEQ is returned when a kprobe sym+offset is resolved\n\t// to an invalid insn boundary. The exact conditions that trigger this error are\n\t// arch specific however.\n\tif errors.Is(err, syscall.EILSEQ) {\n\t\treturn nil, fmt.Errorf(\"token %s: bad insn boundary: %w\", token, os.ErrNotExist)\n\t}\n\t// ERANGE is returned when the `SYM[+offs]` token is too big and cannot\n\t// be resolved.\n\tif errors.Is(err, syscall.ERANGE) {\n\t\treturn nil, fmt.Errorf(\"token %s: offset too big: %w\", token, os.ErrNotExist)\n\t}\n\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"token %s: writing '%s': %w\", token, pe, err)\n\t}\n\n\t// Get the newly-created trace event's id.\n\ttid, err := EventID(args.Group, eventName)\n\tif args.RetprobeMaxActive != 0 && errors.Is(err, os.ErrNotExist) {\n\t\t// Kernels < 4.12 don't support maxactive and therefore auto generate\n\t\t// group and event names from the symbol and offset. The symbol is used\n\t\t// without any sanitization.\n\t\t// See https://elixir.bootlin.com/linux/v4.10/source/kernel/trace/trace_kprobe.c#L712\n\t\tevent := fmt.Sprintf(\"kprobes/r_%s_%d\", args.Symbol, args.Offset)\n\t\tif err := removeEvent(args.Type, event); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to remove spurious maxactive event: %s\", err)\n\t\t}\n\t\treturn nil, fmt.Errorf(\"create trace event with non-default maxactive: %w\", internal.ErrNotSupported)\n\t}\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get trace event id: %w\", err)\n\t}\n\n\tevt := &Event{args.Type, args.Group, eventName, tid}\n\truntime.SetFinalizer(evt, (*Event).Close)\n\treturn evt, nil\n}\n\n// Close removes the event from tracefs.\n//\n// Returns os.ErrClosed if the event has already been closed before.\nfunc (evt *Event) Close() error {\n\tif evt.id == 0 {\n\t\treturn os.ErrClosed\n\t}\n\n\tevt.id = 0\n\truntime.SetFinalizer(evt, nil)\n\tpe := fmt.Sprintf(\"%s/%s\", evt.group, evt.name)\n\treturn removeEvent(evt.typ, pe)\n}\n\nfunc removeEvent(typ ProbeType, pe string) error {\n\tf, err := typ.eventsFile()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\t// See [k,u]probe_events syntax above. The probe type does not need to be specified\n\t// for removals.\n\tif _, err = f.WriteString(\"-:\" + pe); err != nil {\n\t\treturn fmt.Errorf(\"remove event %q from %s: %w\", pe, f.Name(), err)\n\t}\n\n\treturn nil\n}\n\n// ID returns the tracefs ID associated with the event.\nfunc (evt *Event) ID() uint64 {\n\treturn evt.id\n}\n\n// Group returns the tracefs group used by the event.\nfunc (evt *Event) Group() string {\n\treturn evt.group\n}\n\n// KprobeToken creates the SYM[+offs] token for the tracefs api.\nfunc KprobeToken(args ProbeArgs) string {\n\tpo := args.Symbol\n\n\tif args.Offset != 0 {\n\t\tpo += fmt.Sprintf(\"+%#x\", args.Offset)\n\t}\n\n\treturn po\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/tracefs/probetype_string.go",
    "content": "// Code generated by \"stringer -type=ProbeType -linecomment\"; DO NOT EDIT.\n\npackage tracefs\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[Kprobe-0]\n\t_ = x[Uprobe-1]\n}\n\nconst _ProbeType_name = \"kprobeuprobe\"\n\nvar _ProbeType_index = [...]uint8{0, 6, 12}\n\nfunc (i ProbeType) String() string {\n\tif i >= ProbeType(len(_ProbeType_index)-1) {\n\t\treturn \"ProbeType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _ProbeType_name[_ProbeType_index[i]:_ProbeType_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/tracefs/uprobe.go",
    "content": "package tracefs\n\nimport \"fmt\"\n\n// UprobeToken creates the PATH:OFFSET(REF_CTR_OFFSET) token for the tracefs api.\nfunc UprobeToken(args ProbeArgs) string {\n\tpo := fmt.Sprintf(\"%s:%#x\", args.Path, args.Offset)\n\n\tif args.RefCtrOffset != 0 {\n\t\t// This is not documented in Documentation/trace/uprobetracer.txt.\n\t\t// elixir.bootlin.com/linux/v5.15-rc7/source/kernel/trace/trace.c#L5564\n\t\tpo += fmt.Sprintf(\"(%#x)\", args.RefCtrOffset)\n\t}\n\n\treturn po\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/unix/doc.go",
    "content": "// Package unix re-exports Linux specific parts of golang.org/x/sys/unix.\n//\n// It avoids breaking compilation on other OS by providing stubs as follows:\n//   - Invoking a function always returns an error.\n//   - Errnos have distinct, non-zero values.\n//   - Constants have distinct but meaningless values.\n//   - Types use the same names for members, but may or may not follow the\n//     Linux layout.\npackage unix\n\n// Note: please don't add any custom API to this package. Use internal/sys instead.\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/unix/errno_linux.go",
    "content": "package unix\n\nimport (\n\t\"syscall\"\n\n\tlinux \"golang.org/x/sys/unix\"\n)\n\ntype Errno = syscall.Errno\n\nconst (\n\tE2BIG      = linux.E2BIG\n\tEACCES     = linux.EACCES\n\tEAGAIN     = linux.EAGAIN\n\tEBADF      = linux.EBADF\n\tEEXIST     = linux.EEXIST\n\tEFAULT     = linux.EFAULT\n\tEILSEQ     = linux.EILSEQ\n\tEINTR      = linux.EINTR\n\tEINVAL     = linux.EINVAL\n\tENODEV     = linux.ENODEV\n\tENOENT     = linux.ENOENT\n\tENOSPC     = linux.ENOSPC\n\tEOPNOTSUPP = linux.EOPNOTSUPP\n\tEPERM      = linux.EPERM\n\tEPOLLIN    = linux.EPOLLIN\n\tESRCH      = linux.ESRCH\n\tESTALE     = linux.ESTALE\n)\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/unix/errno_other.go",
    "content": "//go:build !linux && !windows\n\npackage unix\n\nimport \"syscall\"\n\ntype Errno = syscall.Errno\n\n// Errnos are distinct and non-zero.\nconst (\n\tE2BIG Errno = iota + 1\n\tEACCES\n\tEAGAIN\n\tEBADF\n\tEEXIST\n\tEFAULT\n\tEILSEQ\n\tEINTR\n\tEINVAL\n\tENODEV\n\tENOENT\n\tENOSPC\n\tENOTSUP\n\tENOTSUPP\n\tEOPNOTSUPP\n\tEPERM\n\tESRCH\n\tESTALE\n)\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/unix/errno_string_windows.go",
    "content": "// Code generated by \"stringer -type=Errno -tags=windows -output=errno_string_windows.go\"; DO NOT EDIT.\n\npackage unix\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[EPERM-1]\n\t_ = x[ENOENT-2]\n\t_ = x[ESRCH-3]\n\t_ = x[EINTR-4]\n\t_ = x[E2BIG-7]\n\t_ = x[EBADF-9]\n\t_ = x[EAGAIN-11]\n\t_ = x[EACCES-13]\n\t_ = x[EFAULT-14]\n\t_ = x[EEXIST-17]\n\t_ = x[ENODEV-19]\n\t_ = x[EINVAL-22]\n\t_ = x[ENOSPC-28]\n\t_ = x[EILSEQ-42]\n\t_ = x[ENOTSUP-129]\n\t_ = x[EOPNOTSUPP-130]\n\t_ = x[ENOTSUPP-536870912]\n\t_ = x[ESTALE-536870913]\n}\n\nconst _Errno_name = \"EPERMENOENTESRCHEINTRE2BIGEBADFEAGAINEACCESEFAULTEEXISTENODEVEINVALENOSPCEILSEQENOTSUPEOPNOTSUPPENOTSUPPESTALE\"\n\nvar _Errno_map = map[Errno]string{\n\t1:         _Errno_name[0:5],\n\t2:         _Errno_name[5:11],\n\t3:         _Errno_name[11:16],\n\t4:         _Errno_name[16:21],\n\t7:         _Errno_name[21:26],\n\t9:         _Errno_name[26:31],\n\t11:        _Errno_name[31:37],\n\t13:        _Errno_name[37:43],\n\t14:        _Errno_name[43:49],\n\t17:        _Errno_name[49:55],\n\t19:        _Errno_name[55:61],\n\t22:        _Errno_name[61:67],\n\t28:        _Errno_name[67:73],\n\t42:        _Errno_name[73:79],\n\t129:       _Errno_name[79:86],\n\t130:       _Errno_name[86:96],\n\t536870912: _Errno_name[96:104],\n\t536870913: _Errno_name[104:110],\n}\n\nfunc (i Errno) String() string {\n\tif str, ok := _Errno_map[i]; ok {\n\t\treturn str\n\t}\n\treturn \"Errno(\" + strconv.FormatInt(int64(i), 10) + \")\"\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/unix/errno_windows.go",
    "content": "package unix\n\n// The code in this file is derived from syscall_unix.go in the Go source code,\n// licensed under the MIT license.\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"syscall\"\n)\n\n//go:generate go run golang.org/x/tools/cmd/stringer@latest -type=Errno -tags=windows -output=errno_string_windows.go\n\n// Windows specific constants for Unix errnos.\n//\n// The values do not always match Linux, for example EILSEQ and EOPNOTSUPP.\n//\n// See https://learn.microsoft.com/en-us/cpp/c-runtime-library/errno-constants?view=msvc-170\nconst (\n\tEPERM       Errno = 1\n\tENOENT      Errno = 2\n\tESRCH       Errno = 3\n\tEINTR       Errno = 4\n\tE2BIG       Errno = 7\n\tEBADF       Errno = 9\n\tEAGAIN      Errno = 11\n\tEACCES      Errno = 13\n\tEFAULT      Errno = 14\n\tEEXIST      Errno = 17\n\tENODEV      Errno = 19\n\tEINVAL      Errno = 22\n\tENFILE      Errno = 23\n\tEMFILE      Errno = 24\n\tENOSPC      Errno = 28\n\tENOSYS      Errno = 40\n\tENOTEMPTY   Errno = 41\n\tEILSEQ      Errno = 42\n\tENOTSUP     Errno = 129\n\tEOPNOTSUPP  Errno = 130\n\tETIMEDOUT   Errno = 138\n\tEWOULDBLOCK Errno = 140\n)\n\n// These constants do not exist on Windows and therefore have a non-zero\n// dummy value.\nconst (\n\tENOTSUPP Errno = Errno(syscall.APPLICATION_ERROR) + iota\n\tESTALE\n)\n\n// Errno is a Windows compatibility shim for Unix errnos.\ntype Errno uintptr\n\nfunc (e Errno) Error() string {\n\treturn e.String()\n}\n\nfunc (e Errno) Is(target error) bool {\n\tswitch target {\n\tcase os.ErrPermission:\n\t\treturn e == EACCES || e == EPERM\n\tcase os.ErrExist:\n\t\treturn e == EEXIST || e == ENOTEMPTY\n\tcase os.ErrNotExist:\n\t\treturn e == ENOENT\n\tcase errors.ErrUnsupported:\n\t\treturn e == ENOSYS || e == ENOTSUP || e == EOPNOTSUPP\n\t}\n\treturn false\n}\n\nfunc (e Errno) Temporary() bool {\n\treturn e == EINTR || e == EMFILE || e == ENFILE || e.Timeout()\n}\n\nfunc (e Errno) Timeout() bool {\n\treturn e == EAGAIN || e == EWOULDBLOCK || e == ETIMEDOUT\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/unix/error.go",
    "content": "package unix\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/internal\"\n)\n\n// errNonLinux returns an error which wraps [internal.ErrNotSupportedOnOS] and\n// includes the name of the calling function.\nfunc errNonLinux() error {\n\tname := \"unknown\"\n\tpc, _, _, ok := runtime.Caller(1)\n\tif ok {\n\t\tname = runtime.FuncForPC(pc).Name()\n\t\tif pos := strings.LastIndexByte(name, '.'); pos != -1 {\n\t\t\tname = name[pos+1:]\n\t\t}\n\t}\n\treturn fmt.Errorf(\"unix: %s: %w\", name, internal.ErrNotSupportedOnOS)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/unix/strings_other.go",
    "content": "//go:build !linux && !windows\n\npackage unix\n\nfunc BytePtrFromString(s string) (*byte, error) {\n\treturn nil, errNonLinux()\n}\n\nfunc ByteSliceToString(s []byte) string {\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/unix/strings_windows.go",
    "content": "package unix\n\nimport (\n\t\"syscall\"\n\n\t\"golang.org/x/sys/windows\"\n)\n\nfunc BytePtrFromString(s string) (*byte, error) {\n\tp, err := windows.BytePtrFromString(s)\n\tif err == syscall.EINVAL {\n\t\terr = EINVAL\n\t}\n\treturn p, err\n}\n\nfunc ByteSliceToString(s []byte) string {\n\treturn windows.ByteSliceToString(s)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/unix/types_linux.go",
    "content": "//go:build linux\n\npackage unix\n\nimport (\n\t\"syscall\"\n\n\tlinux \"golang.org/x/sys/unix\"\n)\n\nconst (\n\tBPF_F_NO_PREALLOC         = linux.BPF_F_NO_PREALLOC\n\tBPF_F_NUMA_NODE           = linux.BPF_F_NUMA_NODE\n\tBPF_F_RDONLY              = linux.BPF_F_RDONLY\n\tBPF_F_WRONLY              = linux.BPF_F_WRONLY\n\tBPF_F_RDONLY_PROG         = linux.BPF_F_RDONLY_PROG\n\tBPF_F_WRONLY_PROG         = linux.BPF_F_WRONLY_PROG\n\tBPF_F_SLEEPABLE           = linux.BPF_F_SLEEPABLE\n\tBPF_F_XDP_HAS_FRAGS       = linux.BPF_F_XDP_HAS_FRAGS\n\tBPF_F_MMAPABLE            = linux.BPF_F_MMAPABLE\n\tBPF_F_INNER_MAP           = linux.BPF_F_INNER_MAP\n\tBPF_F_KPROBE_MULTI_RETURN = linux.BPF_F_KPROBE_MULTI_RETURN\n\tBPF_F_UPROBE_MULTI_RETURN = linux.BPF_F_UPROBE_MULTI_RETURN\n\tBPF_F_LOCK                = linux.BPF_F_LOCK\n\tBPF_OBJ_NAME_LEN          = linux.BPF_OBJ_NAME_LEN\n\tBPF_TAG_SIZE              = linux.BPF_TAG_SIZE\n\tBPF_RINGBUF_BUSY_BIT      = linux.BPF_RINGBUF_BUSY_BIT\n\tBPF_RINGBUF_DISCARD_BIT   = linux.BPF_RINGBUF_DISCARD_BIT\n\tBPF_RINGBUF_HDR_SZ        = linux.BPF_RINGBUF_HDR_SZ\n\tSYS_BPF                   = linux.SYS_BPF\n\tF_DUPFD_CLOEXEC           = linux.F_DUPFD_CLOEXEC\n\tEPOLL_CTL_ADD             = linux.EPOLL_CTL_ADD\n\tEPOLL_CLOEXEC             = linux.EPOLL_CLOEXEC\n\tO_CLOEXEC                 = linux.O_CLOEXEC\n\tO_NONBLOCK                = linux.O_NONBLOCK\n\tPROT_NONE                 = linux.PROT_NONE\n\tPROT_READ                 = linux.PROT_READ\n\tPROT_WRITE                = linux.PROT_WRITE\n\tMAP_ANON                  = linux.MAP_ANON\n\tMAP_SHARED                = linux.MAP_SHARED\n\tMAP_PRIVATE               = linux.MAP_PRIVATE\n\tPERF_ATTR_SIZE_VER1       = linux.PERF_ATTR_SIZE_VER1\n\tPERF_TYPE_SOFTWARE        = linux.PERF_TYPE_SOFTWARE\n\tPERF_TYPE_TRACEPOINT      = linux.PERF_TYPE_TRACEPOINT\n\tPERF_COUNT_SW_BPF_OUTPUT  = linux.PERF_COUNT_SW_BPF_OUTPUT\n\tPERF_EVENT_IOC_DISABLE    = linux.PERF_EVENT_IOC_DISABLE\n\tPERF_EVENT_IOC_ENABLE     = linux.PERF_EVENT_IOC_ENABLE\n\tPERF_EVENT_IOC_SET_BPF    = linux.PERF_EVENT_IOC_SET_BPF\n\tPerfBitWatermark          = linux.PerfBitWatermark\n\tPerfBitWriteBackward      = linux.PerfBitWriteBackward\n\tPERF_SAMPLE_RAW           = linux.PERF_SAMPLE_RAW\n\tPERF_FLAG_FD_CLOEXEC      = linux.PERF_FLAG_FD_CLOEXEC\n\tRLIM_INFINITY             = linux.RLIM_INFINITY\n\tRLIMIT_MEMLOCK            = linux.RLIMIT_MEMLOCK\n\tBPF_STATS_RUN_TIME        = linux.BPF_STATS_RUN_TIME\n\tPERF_RECORD_LOST          = linux.PERF_RECORD_LOST\n\tPERF_RECORD_SAMPLE        = linux.PERF_RECORD_SAMPLE\n\tAT_FDCWD                  = linux.AT_FDCWD\n\tRENAME_NOREPLACE          = linux.RENAME_NOREPLACE\n\tSO_ATTACH_BPF             = linux.SO_ATTACH_BPF\n\tSO_DETACH_BPF             = linux.SO_DETACH_BPF\n\tSOL_SOCKET                = linux.SOL_SOCKET\n\tSIGPROF                   = linux.SIGPROF\n\tSIGUSR1                   = linux.SIGUSR1\n\tSIG_BLOCK                 = linux.SIG_BLOCK\n\tSIG_UNBLOCK               = linux.SIG_UNBLOCK\n\tBPF_FS_MAGIC              = linux.BPF_FS_MAGIC\n\tTRACEFS_MAGIC             = linux.TRACEFS_MAGIC\n\tDEBUGFS_MAGIC             = linux.DEBUGFS_MAGIC\n\tBPF_RB_NO_WAKEUP          = linux.BPF_RB_NO_WAKEUP\n\tBPF_RB_FORCE_WAKEUP       = linux.BPF_RB_FORCE_WAKEUP\n\tAF_UNSPEC                 = linux.AF_UNSPEC\n\tIFF_UP                    = linux.IFF_UP\n)\n\ntype Statfs_t = linux.Statfs_t\ntype Stat_t = linux.Stat_t\ntype Rlimit = linux.Rlimit\ntype Signal = linux.Signal\ntype Sigset_t = linux.Sigset_t\ntype PerfEventMmapPage = linux.PerfEventMmapPage\ntype EpollEvent = linux.EpollEvent\ntype PerfEventAttr = linux.PerfEventAttr\ntype Utsname = linux.Utsname\ntype CPUSet = linux.CPUSet\n\nfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn linux.Syscall(trap, a1, a2, a3)\n}\n\nfunc PthreadSigmask(how int, set, oldset *Sigset_t) error {\n\treturn linux.PthreadSigmask(how, set, oldset)\n}\n\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\treturn linux.FcntlInt(fd, cmd, arg)\n}\n\nfunc IoctlSetInt(fd int, req uint, value int) error {\n\treturn linux.IoctlSetInt(fd, req, value)\n}\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\treturn linux.Statfs(path, buf)\n}\n\nfunc Close(fd int) (err error) {\n\treturn linux.Close(fd)\n}\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\treturn linux.EpollWait(epfd, events, msec)\n}\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\treturn linux.EpollCtl(epfd, op, fd, event)\n}\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\treturn linux.Eventfd(initval, flags)\n}\n\nfunc Write(fd int, p []byte) (n int, err error) {\n\treturn linux.Write(fd, p)\n}\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\treturn linux.EpollCreate1(flag)\n}\n\nfunc SetNonblock(fd int, nonblocking bool) (err error) {\n\treturn linux.SetNonblock(fd, nonblocking)\n}\n\nfunc Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\treturn linux.Mmap(fd, offset, length, prot, flags)\n}\n\nfunc Munmap(b []byte) (err error) {\n\treturn linux.Munmap(b)\n}\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\treturn linux.PerfEventOpen(attr, pid, cpu, groupFd, flags)\n}\n\nfunc Uname(buf *Utsname) (err error) {\n\treturn linux.Uname(buf)\n}\n\nfunc Getpid() int {\n\treturn linux.Getpid()\n}\n\nfunc Gettid() int {\n\treturn linux.Gettid()\n}\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\treturn linux.Tgkill(tgid, tid, sig)\n}\n\nfunc BytePtrFromString(s string) (*byte, error) {\n\treturn linux.BytePtrFromString(s)\n}\n\nfunc ByteSliceToString(s []byte) string {\n\treturn linux.ByteSliceToString(s)\n}\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) error {\n\treturn linux.Renameat2(olddirfd, oldpath, newdirfd, newpath, flags)\n}\n\nfunc Prlimit(pid, resource int, new, old *Rlimit) error {\n\treturn linux.Prlimit(pid, resource, new, old)\n}\n\nfunc Open(path string, mode int, perm uint32) (int, error) {\n\treturn linux.Open(path, mode, perm)\n}\n\nfunc Fstat(fd int, stat *Stat_t) error {\n\treturn linux.Fstat(fd, stat)\n}\n\nfunc SetsockoptInt(fd, level, opt, value int) error {\n\treturn linux.SetsockoptInt(fd, level, opt, value)\n}\n\nfunc SchedSetaffinity(pid int, set *CPUSet) error {\n\treturn linux.SchedSetaffinity(pid, set)\n}\n\nfunc SchedGetaffinity(pid int, set *CPUSet) error {\n\treturn linux.SchedGetaffinity(pid, set)\n}\n\nfunc Auxv() ([][2]uintptr, error) {\n\treturn linux.Auxv()\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/unix/types_other.go",
    "content": "//go:build !linux\n\npackage unix\n\nimport (\n\t\"syscall\"\n)\n\n// Constants are distinct to avoid breaking switch statements.\nconst (\n\tBPF_F_NO_PREALLOC = iota\n\tBPF_F_NUMA_NODE\n\tBPF_F_RDONLY\n\tBPF_F_WRONLY\n\tBPF_F_RDONLY_PROG\n\tBPF_F_WRONLY_PROG\n\tBPF_F_SLEEPABLE\n\tBPF_F_MMAPABLE\n\tBPF_F_INNER_MAP\n\tBPF_F_KPROBE_MULTI_RETURN\n\tBPF_F_UPROBE_MULTI_RETURN\n\tBPF_F_XDP_HAS_FRAGS\n\tBPF_OBJ_NAME_LEN\n\tBPF_TAG_SIZE\n\tBPF_RINGBUF_BUSY_BIT\n\tBPF_RINGBUF_DISCARD_BIT\n\tBPF_RINGBUF_HDR_SZ\n\tSYS_BPF\n\tF_DUPFD_CLOEXEC\n\tEPOLLIN\n\tEPOLL_CTL_ADD\n\tEPOLL_CLOEXEC\n\tO_CLOEXEC\n\tO_NONBLOCK\n\tPROT_NONE\n\tPROT_READ\n\tPROT_WRITE\n\tMAP_ANON\n\tMAP_SHARED\n\tMAP_PRIVATE\n\tPERF_ATTR_SIZE_VER1\n\tPERF_TYPE_SOFTWARE\n\tPERF_TYPE_TRACEPOINT\n\tPERF_COUNT_SW_BPF_OUTPUT\n\tPERF_EVENT_IOC_DISABLE\n\tPERF_EVENT_IOC_ENABLE\n\tPERF_EVENT_IOC_SET_BPF\n\tPerfBitWatermark\n\tPerfBitWriteBackward\n\tPERF_SAMPLE_RAW\n\tPERF_FLAG_FD_CLOEXEC\n\tRLIM_INFINITY\n\tRLIMIT_MEMLOCK\n\tBPF_STATS_RUN_TIME\n\tPERF_RECORD_LOST\n\tPERF_RECORD_SAMPLE\n\tAT_FDCWD\n\tRENAME_NOREPLACE\n\tSO_ATTACH_BPF\n\tSO_DETACH_BPF\n\tSOL_SOCKET\n\tSIGPROF\n\tSIGUSR1\n\tSIG_BLOCK\n\tSIG_UNBLOCK\n\tBPF_FS_MAGIC\n\tTRACEFS_MAGIC\n\tDEBUGFS_MAGIC\n\tBPF_RB_NO_WAKEUP\n\tBPF_RB_FORCE_WAKEUP\n\tBPF_F_LOCK\n\tAF_UNSPEC\n\tIFF_UP\n)\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    [2]int32\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint32\n\tUid     uint32\n\tGid     uint32\n\t_       int32\n\tRdev    uint64\n\tSize    int64\n\tBlksize int64\n\tBlocks  int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype Signal int\n\ntype Sigset_t struct {\n\tVal [4]uint64\n}\n\nfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) {\n\treturn 0, 0, ENOTSUP\n}\n\nfunc PthreadSigmask(how int, set, oldset *Sigset_t) error {\n\treturn errNonLinux()\n}\n\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\treturn -1, errNonLinux()\n}\n\nfunc IoctlSetInt(fd int, req uint, value int) error {\n\treturn errNonLinux()\n}\n\nfunc Statfs(path string, buf *Statfs_t) error {\n\treturn errNonLinux()\n}\n\nfunc Close(fd int) (err error) {\n\treturn errNonLinux()\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tFd     int32\n\tPad    int32\n}\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\treturn 0, errNonLinux()\n}\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\treturn errNonLinux()\n}\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\treturn 0, errNonLinux()\n}\n\nfunc Write(fd int, p []byte) (n int, err error) {\n\treturn 0, errNonLinux()\n}\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\treturn 0, errNonLinux()\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\n\tData_head   uint64\n\tData_tail   uint64\n\tData_offset uint64\n\tData_size   uint64\n\tAux_head    uint64\n\tAux_tail    uint64\n\tAux_offset  uint64\n\tAux_size    uint64\n}\n\nfunc SetNonblock(fd int, nonblocking bool) (err error) {\n\treturn errNonLinux()\n}\n\nfunc Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\treturn []byte{}, errNonLinux()\n}\n\nfunc Munmap(b []byte) (err error) {\n\treturn errNonLinux()\n}\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n}\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\treturn 0, errNonLinux()\n}\n\ntype Utsname struct {\n\tRelease [65]byte\n\tVersion [65]byte\n}\n\nfunc Uname(buf *Utsname) (err error) {\n\treturn errNonLinux()\n}\n\nfunc Getpid() int {\n\treturn -1\n}\n\nfunc Gettid() int {\n\treturn -1\n}\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\treturn errNonLinux()\n}\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) error {\n\treturn errNonLinux()\n}\n\nfunc Prlimit(pid, resource int, new, old *Rlimit) error {\n\treturn errNonLinux()\n}\n\nfunc Open(path string, mode int, perm uint32) (int, error) {\n\treturn -1, errNonLinux()\n}\n\nfunc Fstat(fd int, stat *Stat_t) error {\n\treturn errNonLinux()\n}\n\nfunc SetsockoptInt(fd, level, opt, value int) error {\n\treturn errNonLinux()\n}\n\ntype CPUSet struct{}\n\nfunc (*CPUSet) Set(int) {}\n\nfunc SchedSetaffinity(pid int, set *CPUSet) error {\n\treturn errNonLinux()\n}\n\nfunc SchedGetaffinity(pid int, set *CPUSet) error {\n\treturn errNonLinux()\n}\n\nfunc Auxv() ([][2]uintptr, error) {\n\treturn nil, errNonLinux()\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/version.go",
    "content": "package internal\n\nimport (\n\t\"fmt\"\n)\n\nconst (\n\t// Version constant used in ELF binaries indicating that the loader needs to\n\t// substitute the eBPF program's version with the value of the kernel's\n\t// KERNEL_VERSION compile-time macro. Used for compatibility with BCC, gobpf\n\t// and RedSift.\n\tMagicKernelVersion = 0xFFFFFFFE\n)\n\n// A Version in the form Major.Minor.Patch.\ntype Version [3]uint16\n\n// NewVersion creates a version from a string like \"Major.Minor.Patch\".\n//\n// Patch is optional.\nfunc NewVersion(ver string) (Version, error) {\n\tvar major, minor, patch uint16\n\tn, _ := fmt.Sscanf(ver, \"%d.%d.%d\", &major, &minor, &patch)\n\tif n < 2 {\n\t\treturn Version{}, fmt.Errorf(\"invalid version: %s\", ver)\n\t}\n\treturn Version{major, minor, patch}, nil\n}\n\n// NewVersionFromCode creates a version from a LINUX_VERSION_CODE.\nfunc NewVersionFromCode(code uint32) Version {\n\treturn Version{\n\t\tuint16(uint8(code >> 16)),\n\t\tuint16(uint8(code >> 8)),\n\t\tuint16(uint8(code)),\n\t}\n}\n\nfunc (v Version) String() string {\n\tif v[2] == 0 {\n\t\treturn fmt.Sprintf(\"v%d.%d\", v[0], v[1])\n\t}\n\treturn fmt.Sprintf(\"v%d.%d.%d\", v[0], v[1], v[2])\n}\n\n// Less returns true if the version is less than another version.\nfunc (v Version) Less(other Version) bool {\n\tfor i, a := range v {\n\t\tif a == other[i] {\n\t\t\tcontinue\n\t\t}\n\t\treturn a < other[i]\n\t}\n\treturn false\n}\n\n// Unspecified returns true if the version is all zero.\nfunc (v Version) Unspecified() bool {\n\treturn v[0] == 0 && v[1] == 0 && v[2] == 0\n}\n\n// Kernel implements the kernel's KERNEL_VERSION macro from linux/version.h.\n// It represents the kernel version and patch level as a single value.\nfunc (v Version) Kernel() uint32 {\n\n\t// Kernels 4.4 and 4.9 have their SUBLEVEL clamped to 255 to avoid\n\t// overflowing into PATCHLEVEL.\n\t// See kernel commit 9b82f13e7ef3 (\"kbuild: clamp SUBLEVEL to 255\").\n\ts := v[2]\n\tif s > 255 {\n\t\ts = 255\n\t}\n\n\t// Truncate members to uint8 to prevent them from spilling over into\n\t// each other when overflowing 8 bits.\n\treturn uint32(uint8(v[0]))<<16 | uint32(uint8(v[1]))<<8 | uint32(uint8(s))\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/anchor.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\nconst anchorFlags = sys.BPF_F_REPLACE |\n\tsys.BPF_F_BEFORE |\n\tsys.BPF_F_AFTER |\n\tsys.BPF_F_ID |\n\tsys.BPF_F_LINK_MPROG\n\n// Anchor is a reference to a link or program.\n//\n// It is used to describe where an attachment or detachment should take place\n// for link types which support multiple attachment.\ntype Anchor interface {\n\t// anchor returns an fd or ID and a set of flags.\n\t//\n\t// By default fdOrID is taken to reference a program, but BPF_F_LINK_MPROG\n\t// changes this to refer to a link instead.\n\t//\n\t// BPF_F_BEFORE, BPF_F_AFTER, BPF_F_REPLACE modify where a link or program\n\t// is attached. The default behaviour if none of these flags is specified\n\t// matches BPF_F_AFTER.\n\tanchor() (fdOrID, flags uint32, _ error)\n}\n\ntype firstAnchor struct{}\n\nfunc (firstAnchor) anchor() (fdOrID, flags uint32, _ error) {\n\treturn 0, sys.BPF_F_BEFORE, nil\n}\n\n// Head is the position before all other programs or links.\nfunc Head() Anchor {\n\treturn firstAnchor{}\n}\n\ntype lastAnchor struct{}\n\nfunc (lastAnchor) anchor() (fdOrID, flags uint32, _ error) {\n\treturn 0, sys.BPF_F_AFTER, nil\n}\n\n// Tail is the position after all other programs or links.\nfunc Tail() Anchor {\n\treturn lastAnchor{}\n}\n\n// Before is the position just in front of target.\nfunc BeforeLink(target Link) Anchor {\n\treturn anchor{target, sys.BPF_F_BEFORE}\n}\n\n// After is the position just after target.\nfunc AfterLink(target Link) Anchor {\n\treturn anchor{target, sys.BPF_F_AFTER}\n}\n\n// Before is the position just in front of target.\nfunc BeforeLinkByID(target ID) Anchor {\n\treturn anchor{target, sys.BPF_F_BEFORE}\n}\n\n// After is the position just after target.\nfunc AfterLinkByID(target ID) Anchor {\n\treturn anchor{target, sys.BPF_F_AFTER}\n}\n\n// Before is the position just in front of target.\nfunc BeforeProgram(target *ebpf.Program) Anchor {\n\treturn anchor{target, sys.BPF_F_BEFORE}\n}\n\n// After is the position just after target.\nfunc AfterProgram(target *ebpf.Program) Anchor {\n\treturn anchor{target, sys.BPF_F_AFTER}\n}\n\n// Replace the target itself.\nfunc ReplaceProgram(target *ebpf.Program) Anchor {\n\treturn anchor{target, sys.BPF_F_REPLACE}\n}\n\n// Before is the position just in front of target.\nfunc BeforeProgramByID(target ebpf.ProgramID) Anchor {\n\treturn anchor{target, sys.BPF_F_BEFORE}\n}\n\n// After is the position just after target.\nfunc AfterProgramByID(target ebpf.ProgramID) Anchor {\n\treturn anchor{target, sys.BPF_F_AFTER}\n}\n\n// Replace the target itself.\nfunc ReplaceProgramByID(target ebpf.ProgramID) Anchor {\n\treturn anchor{target, sys.BPF_F_REPLACE}\n}\n\ntype anchor struct {\n\ttarget   any\n\tposition uint32\n}\n\nfunc (ap anchor) anchor() (fdOrID, flags uint32, _ error) {\n\tvar typeFlag uint32\n\tswitch target := ap.target.(type) {\n\tcase *ebpf.Program:\n\t\tfd := target.FD()\n\t\tif fd < 0 {\n\t\t\treturn 0, 0, sys.ErrClosedFd\n\t\t}\n\t\tfdOrID = uint32(fd)\n\t\ttypeFlag = 0\n\tcase ebpf.ProgramID:\n\t\tfdOrID = uint32(target)\n\t\ttypeFlag = sys.BPF_F_ID\n\tcase interface{ FD() int }:\n\t\tfd := target.FD()\n\t\tif fd < 0 {\n\t\t\treturn 0, 0, sys.ErrClosedFd\n\t\t}\n\t\tfdOrID = uint32(fd)\n\t\ttypeFlag = sys.BPF_F_LINK_MPROG\n\tcase ID:\n\t\tfdOrID = uint32(target)\n\t\ttypeFlag = sys.BPF_F_LINK_MPROG | sys.BPF_F_ID\n\tdefault:\n\t\treturn 0, 0, fmt.Errorf(\"invalid target %T\", ap.target)\n\t}\n\n\treturn fdOrID, ap.position | typeFlag, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/cgroup.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\ntype cgroupAttachFlags uint32\n\nconst (\n\t// Allow programs attached to sub-cgroups to override the verdict of this\n\t// program.\n\tflagAllowOverride cgroupAttachFlags = 1 << iota\n\t// Allow attaching multiple programs to the cgroup. Only works if the cgroup\n\t// has zero or more programs attached using the Multi flag. Implies override.\n\tflagAllowMulti\n\t// Set automatically by progAttachCgroup.Update(). Used for updating a\n\t// specific given program attached in multi-mode.\n\tflagReplace\n)\n\ntype CgroupOptions struct {\n\t// Path to a cgroupv2 folder.\n\tPath string\n\t// One of the AttachCgroup* constants\n\tAttach ebpf.AttachType\n\t// Program must be of type CGroup*, and the attach type must match Attach.\n\tProgram *ebpf.Program\n}\n\n// AttachCgroup links a BPF program to a cgroup.\n//\n// If the running kernel doesn't support bpf_link, attempts to emulate its\n// semantics using the legacy PROG_ATTACH mechanism. If bpf_link is not\n// available, the returned [Link] will not support pinning to bpffs.\n//\n// If you need more control over attachment flags or the attachment mechanism\n// used, look at [RawAttachProgram] and [AttachRawLink] instead.\nfunc AttachCgroup(opts CgroupOptions) (cg Link, err error) {\n\tcgroup, err := os.Open(opts.Path)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't open cgroup: %s\", err)\n\t}\n\tdefer func() {\n\t\tif _, ok := cg.(*progAttachCgroup); ok {\n\t\t\t// Skip closing the cgroup handle if we return a valid progAttachCgroup,\n\t\t\t// where the handle is retained to implement Update().\n\t\t\treturn\n\t\t}\n\t\tcgroup.Close()\n\t}()\n\n\tcg, err = newLinkCgroup(cgroup, opts.Attach, opts.Program)\n\tif err == nil {\n\t\treturn cg, nil\n\t}\n\n\tif errors.Is(err, ErrNotSupported) {\n\t\tcg, err = newProgAttachCgroup(cgroup, opts.Attach, opts.Program, flagAllowMulti)\n\t}\n\tif errors.Is(err, ErrNotSupported) {\n\t\tcg, err = newProgAttachCgroup(cgroup, opts.Attach, opts.Program, flagAllowOverride)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn cg, nil\n}\n\ntype progAttachCgroup struct {\n\tcgroup     *os.File\n\tcurrent    *ebpf.Program\n\tattachType ebpf.AttachType\n\tflags      cgroupAttachFlags\n}\n\nvar _ Link = (*progAttachCgroup)(nil)\n\nfunc (cg *progAttachCgroup) isLink() {}\n\n// newProgAttachCgroup attaches prog to cgroup using BPF_PROG_ATTACH.\n// cgroup and prog are retained by [progAttachCgroup].\nfunc newProgAttachCgroup(cgroup *os.File, attach ebpf.AttachType, prog *ebpf.Program, flags cgroupAttachFlags) (*progAttachCgroup, error) {\n\tif flags&flagAllowMulti > 0 {\n\t\tif err := haveProgAttachReplace(); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"can't support multiple programs: %w\", err)\n\t\t}\n\t}\n\n\t// Use a program handle that cannot be closed by the caller.\n\tclone, err := prog.Clone()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = RawAttachProgram(RawAttachProgramOptions{\n\t\tTarget:  int(cgroup.Fd()),\n\t\tProgram: clone,\n\t\tFlags:   uint32(flags),\n\t\tAttach:  attach,\n\t})\n\tif err != nil {\n\t\tclone.Close()\n\t\treturn nil, fmt.Errorf(\"cgroup: %w\", err)\n\t}\n\n\treturn &progAttachCgroup{cgroup, clone, attach, flags}, nil\n}\n\nfunc (cg *progAttachCgroup) Close() error {\n\tdefer cg.cgroup.Close()\n\tdefer cg.current.Close()\n\n\terr := RawDetachProgram(RawDetachProgramOptions{\n\t\tTarget:  int(cg.cgroup.Fd()),\n\t\tProgram: cg.current,\n\t\tAttach:  cg.attachType,\n\t})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"close cgroup: %s\", err)\n\t}\n\treturn nil\n}\n\nfunc (cg *progAttachCgroup) Update(prog *ebpf.Program) error {\n\tnew, err := prog.Clone()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\targs := RawAttachProgramOptions{\n\t\tTarget:  int(cg.cgroup.Fd()),\n\t\tProgram: prog,\n\t\tAttach:  cg.attachType,\n\t\tFlags:   uint32(cg.flags),\n\t}\n\n\tif cg.flags&flagAllowMulti > 0 {\n\t\t// Atomically replacing multiple programs requires at least\n\t\t// 5.5 (commit 7dd68b3279f17921 \"bpf: Support replacing cgroup-bpf\n\t\t// program in MULTI mode\")\n\t\targs.Anchor = ReplaceProgram(cg.current)\n\t}\n\n\tif err := RawAttachProgram(args); err != nil {\n\t\tnew.Close()\n\t\treturn fmt.Errorf(\"can't update cgroup: %s\", err)\n\t}\n\n\tcg.current.Close()\n\tcg.current = new\n\treturn nil\n}\n\nfunc (cg *progAttachCgroup) Pin(string) error {\n\treturn fmt.Errorf(\"can't pin cgroup: %w\", ErrNotSupported)\n}\n\nfunc (cg *progAttachCgroup) Unpin() error {\n\treturn fmt.Errorf(\"can't unpin cgroup: %w\", ErrNotSupported)\n}\n\nfunc (cg *progAttachCgroup) Info() (*Info, error) {\n\treturn nil, fmt.Errorf(\"can't get cgroup info: %w\", ErrNotSupported)\n}\n\ntype linkCgroup struct {\n\tRawLink\n}\n\nvar _ Link = (*linkCgroup)(nil)\n\n// newLinkCgroup attaches prog to cgroup using BPF_LINK_CREATE.\nfunc newLinkCgroup(cgroup *os.File, attach ebpf.AttachType, prog *ebpf.Program) (*linkCgroup, error) {\n\tlink, err := AttachRawLink(RawLinkOptions{\n\t\tTarget:  int(cgroup.Fd()),\n\t\tProgram: prog,\n\t\tAttach:  attach,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &linkCgroup{*link}, err\n}\n\nfunc (cg *linkCgroup) Info() (*Info, error) {\n\tvar info sys.CgroupLinkInfo\n\tif err := sys.ObjInfo(cg.fd, &info); err != nil {\n\t\treturn nil, fmt.Errorf(\"cgroup link info: %s\", err)\n\t}\n\textra := &CgroupInfo{\n\t\tCgroupId:   info.CgroupId,\n\t\tAttachType: info.AttachType,\n\t}\n\n\treturn &Info{\n\t\tinfo.Type,\n\t\tinfo.Id,\n\t\tebpf.ProgramID(info.ProgId),\n\t\textra,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/doc.go",
    "content": "// Package link allows attaching eBPF programs to various kernel hooks.\npackage link\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/iter.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\ntype IterOptions struct {\n\t// Program must be of type Tracing with attach type\n\t// AttachTraceIter. The kind of iterator to attach to is\n\t// determined at load time via the AttachTo field.\n\t//\n\t// AttachTo requires the kernel to include BTF of itself,\n\t// and it to be compiled with a recent pahole (>= 1.16).\n\tProgram *ebpf.Program\n\n\t// Map specifies the target map for bpf_map_elem and sockmap iterators.\n\t// It may be nil.\n\tMap *ebpf.Map\n}\n\n// AttachIter attaches a BPF seq_file iterator.\nfunc AttachIter(opts IterOptions) (*Iter, error) {\n\tprogFd := opts.Program.FD()\n\tif progFd < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid program: %s\", sys.ErrClosedFd)\n\t}\n\n\tvar info bpfIterLinkInfoMap\n\tif opts.Map != nil {\n\t\tmapFd := opts.Map.FD()\n\t\tif mapFd < 0 {\n\t\t\treturn nil, fmt.Errorf(\"invalid map: %w\", sys.ErrClosedFd)\n\t\t}\n\t\tinfo.map_fd = uint32(mapFd)\n\t}\n\n\tattr := sys.LinkCreateIterAttr{\n\t\tProgFd:      uint32(progFd),\n\t\tAttachType:  sys.AttachType(ebpf.AttachTraceIter),\n\t\tIterInfo:    sys.NewPointer(unsafe.Pointer(&info)),\n\t\tIterInfoLen: uint32(unsafe.Sizeof(info)),\n\t}\n\n\tfd, err := sys.LinkCreateIter(&attr)\n\tif err != nil {\n\t\tif haveFeatErr := haveBPFLink(); haveFeatErr != nil {\n\t\t\treturn nil, haveFeatErr\n\t\t}\n\t\treturn nil, fmt.Errorf(\"can't link iterator: %w\", err)\n\t}\n\n\treturn &Iter{RawLink{fd, \"\"}}, err\n}\n\n// Iter represents an attached bpf_iter.\ntype Iter struct {\n\tRawLink\n}\n\n// Open creates a new instance of the iterator.\n//\n// Reading from the returned reader triggers the BPF program.\nfunc (it *Iter) Open() (io.ReadCloser, error) {\n\tattr := &sys.IterCreateAttr{\n\t\tLinkFd: it.fd.Uint(),\n\t}\n\n\tfd, err := sys.IterCreate(attr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't create iterator: %w\", err)\n\t}\n\n\treturn fd.File(\"bpf_iter\"), nil\n}\n\n// union bpf_iter_link_info.map\ntype bpfIterLinkInfoMap struct {\n\tmap_fd uint32\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/kprobe.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"strings\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/linux\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/tracefs\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// KprobeOptions defines additional parameters that will be used\n// when loading Kprobes.\ntype KprobeOptions struct {\n\t// Arbitrary value that can be fetched from an eBPF program\n\t// via `bpf_get_attach_cookie()`.\n\t//\n\t// Needs kernel 5.15+.\n\tCookie uint64\n\t// Offset of the kprobe relative to the traced symbol.\n\t// Can be used to insert kprobes at arbitrary offsets in kernel functions,\n\t// e.g. in places where functions have been inlined.\n\tOffset uint64\n\t// Increase the maximum number of concurrent invocations of a kretprobe.\n\t// Required when tracing some long running functions in the kernel.\n\t//\n\t// Deprecated: this setting forces the use of an outdated kernel API and is not portable\n\t// across kernel versions.\n\tRetprobeMaxActive int\n\t// Prefix used for the event name if the kprobe must be attached using tracefs.\n\t// The group name will be formatted as `<prefix>_<randomstr>`.\n\t// The default empty string is equivalent to \"ebpf\" as the prefix.\n\tTraceFSPrefix string\n}\n\nfunc (ko *KprobeOptions) cookie() uint64 {\n\tif ko == nil {\n\t\treturn 0\n\t}\n\treturn ko.Cookie\n}\n\n// Kprobe attaches the given eBPF program to a perf event that fires when the\n// given kernel symbol starts executing. See /proc/kallsyms for available\n// symbols. For example, printk():\n//\n//\tkp, err := Kprobe(\"printk\", prog, nil)\n//\n// Losing the reference to the resulting Link (kp) will close the Kprobe\n// and prevent further execution of prog. The Link must be Closed during\n// program shutdown to avoid leaking system resources.\n//\n// If attaching to symbol fails, automatically retries with the running\n// platform's syscall prefix (e.g. __x64_) to support attaching to syscalls\n// in a portable fashion.\n//\n// On kernels 6.11 and later, setting a kprobe on a nonexistent symbol using\n// tracefs incorrectly returns [unix.EINVAL] instead of [os.ErrNotExist].\n//\n// The returned Link may implement [PerfEvent].\nfunc Kprobe(symbol string, prog *ebpf.Program, opts *KprobeOptions) (Link, error) {\n\tk, err := kprobe(symbol, prog, opts, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlnk, err := attachPerfEvent(k, prog, opts.cookie())\n\tif err != nil {\n\t\tk.Close()\n\t\treturn nil, err\n\t}\n\n\treturn lnk, nil\n}\n\n// Kretprobe attaches the given eBPF program to a perf event that fires right\n// before the given kernel symbol exits, with the function stack left intact.\n// See /proc/kallsyms for available symbols. For example, printk():\n//\n//\tkp, err := Kretprobe(\"printk\", prog, nil)\n//\n// Losing the reference to the resulting Link (kp) will close the Kretprobe\n// and prevent further execution of prog. The Link must be Closed during\n// program shutdown to avoid leaking system resources.\n//\n// If attaching to symbol fails, automatically retries with the running\n// platform's syscall prefix (e.g. __x64_) to support attaching to syscalls\n// in a portable fashion.\n//\n// On kernels 5.10 and earlier, setting a kretprobe on a nonexistent symbol\n// incorrectly returns [unix.EINVAL] instead of [os.ErrNotExist].\n//\n// The returned Link may implement [PerfEvent].\nfunc Kretprobe(symbol string, prog *ebpf.Program, opts *KprobeOptions) (Link, error) {\n\tk, err := kprobe(symbol, prog, opts, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlnk, err := attachPerfEvent(k, prog, opts.cookie())\n\tif err != nil {\n\t\tk.Close()\n\t\treturn nil, err\n\t}\n\n\treturn lnk, nil\n}\n\n// isValidKprobeSymbol implements the equivalent of a regex match\n// against \"^[a-zA-Z_][0-9a-zA-Z_.]*$\".\nfunc isValidKprobeSymbol(s string) bool {\n\tif len(s) < 1 {\n\t\treturn false\n\t}\n\n\tfor i, c := range []byte(s) {\n\t\tswitch {\n\t\tcase c >= 'a' && c <= 'z':\n\t\tcase c >= 'A' && c <= 'Z':\n\t\tcase c == '_':\n\t\tcase i > 0 && c >= '0' && c <= '9':\n\n\t\t// Allow `.` in symbol name. GCC-compiled kernel may change symbol name\n\t\t// to have a `.isra.$n` suffix, like `udp_send_skb.isra.52`.\n\t\t// See: https://gcc.gnu.org/gcc-10/changes.html\n\t\tcase i > 0 && c == '.':\n\n\t\tdefault:\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// kprobe opens a perf event on the given symbol and attaches prog to it.\n// If ret is true, create a kretprobe.\nfunc kprobe(symbol string, prog *ebpf.Program, opts *KprobeOptions, ret bool) (*perfEvent, error) {\n\tif symbol == \"\" {\n\t\treturn nil, fmt.Errorf(\"symbol name cannot be empty: %w\", errInvalidInput)\n\t}\n\tif prog == nil {\n\t\treturn nil, fmt.Errorf(\"prog cannot be nil: %w\", errInvalidInput)\n\t}\n\tif !isValidKprobeSymbol(symbol) {\n\t\treturn nil, fmt.Errorf(\"symbol '%s' must be a valid symbol in /proc/kallsyms: %w\", symbol, errInvalidInput)\n\t}\n\tif prog.Type() != ebpf.Kprobe {\n\t\treturn nil, fmt.Errorf(\"eBPF program type %s is not a Kprobe: %w\", prog.Type(), errInvalidInput)\n\t}\n\n\targs := tracefs.ProbeArgs{\n\t\tType:   tracefs.Kprobe,\n\t\tPid:    perfAllThreads,\n\t\tSymbol: symbol,\n\t\tRet:    ret,\n\t}\n\n\tif opts != nil {\n\t\targs.RetprobeMaxActive = opts.RetprobeMaxActive\n\t\targs.Cookie = opts.Cookie\n\t\targs.Offset = opts.Offset\n\t\targs.Group = opts.TraceFSPrefix\n\t}\n\n\t// Use kprobe PMU if the kernel has it available.\n\ttp, err := pmuProbe(args)\n\tif errors.Is(err, os.ErrNotExist) || errors.Is(err, unix.EINVAL) {\n\t\tif prefix := linux.PlatformPrefix(); prefix != \"\" {\n\t\t\targs.Symbol = prefix + symbol\n\t\t\ttp, err = pmuProbe(args)\n\t\t}\n\t}\n\tif err == nil {\n\t\treturn tp, nil\n\t}\n\tif !errors.Is(err, ErrNotSupported) {\n\t\treturn nil, fmt.Errorf(\"creating perf_kprobe PMU (arch-specific fallback for %q): %w\", symbol, err)\n\t}\n\n\t// Use tracefs if kprobe PMU is missing.\n\targs.Symbol = symbol\n\ttp, err = tracefsProbe(args)\n\tif errors.Is(err, os.ErrNotExist) || errors.Is(err, unix.EINVAL) {\n\t\tif prefix := linux.PlatformPrefix(); prefix != \"\" {\n\t\t\targs.Symbol = prefix + symbol\n\t\t\ttp, err = tracefsProbe(args)\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating tracefs event (arch-specific fallback for %q): %w\", symbol, err)\n\t}\n\n\treturn tp, nil\n}\n\n// pmuProbe opens a perf event based on a Performance Monitoring Unit.\n//\n// Requires at least a 4.17 kernel.\n// e12f03d7031a \"perf/core: Implement the 'perf_kprobe' PMU\"\n// 33ea4b24277b \"perf/core: Implement the 'perf_uprobe' PMU\"\n//\n// Returns ErrNotSupported if the kernel doesn't support perf_[k,u]probe PMU\nfunc pmuProbe(args tracefs.ProbeArgs) (*perfEvent, error) {\n\t// Getting the PMU type will fail if the kernel doesn't support\n\t// the perf_[k,u]probe PMU.\n\teventType, err := internal.ReadUint64FromFileOnce(\"%d\\n\", \"/sys/bus/event_source/devices\", args.Type.String(), \"type\")\n\tif errors.Is(err, os.ErrNotExist) {\n\t\treturn nil, fmt.Errorf(\"%s: %w\", args.Type, ErrNotSupported)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Use tracefs if we want to set kretprobe's retprobeMaxActive.\n\tif args.RetprobeMaxActive != 0 {\n\t\treturn nil, fmt.Errorf(\"pmu probe: non-zero retprobeMaxActive: %w\", ErrNotSupported)\n\t}\n\n\tvar config uint64\n\tif args.Ret {\n\t\tbit, err := internal.ReadUint64FromFileOnce(\"config:%d\\n\", \"/sys/bus/event_source/devices\", args.Type.String(), \"/format/retprobe\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tconfig |= 1 << bit\n\t}\n\n\tvar (\n\t\tattr  unix.PerfEventAttr\n\t\tsp    unsafe.Pointer\n\t\ttoken string\n\t)\n\tswitch args.Type {\n\tcase tracefs.Kprobe:\n\t\t// Create a pointer to a NUL-terminated string for the kernel.\n\t\tsp, err = unsafeStringPtr(args.Symbol)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\ttoken = tracefs.KprobeToken(args)\n\n\t\tattr = unix.PerfEventAttr{\n\t\t\t// The minimum size required for PMU kprobes is PERF_ATTR_SIZE_VER1,\n\t\t\t// since it added the config2 (Ext2) field. Use Ext2 as probe_offset.\n\t\t\tSize:   unix.PERF_ATTR_SIZE_VER1,\n\t\t\tType:   uint32(eventType),   // PMU event type read from sysfs\n\t\t\tExt1:   uint64(uintptr(sp)), // Kernel symbol to trace\n\t\t\tExt2:   args.Offset,         // Kernel symbol offset\n\t\t\tConfig: config,              // Retprobe flag\n\t\t}\n\tcase tracefs.Uprobe:\n\t\tsp, err = unsafeStringPtr(args.Path)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif args.RefCtrOffset != 0 {\n\t\t\tconfig |= args.RefCtrOffset << uprobeRefCtrOffsetShift\n\t\t}\n\n\t\ttoken = tracefs.UprobeToken(args)\n\n\t\tattr = unix.PerfEventAttr{\n\t\t\t// The minimum size required for PMU uprobes is PERF_ATTR_SIZE_VER1,\n\t\t\t// since it added the config2 (Ext2) field. The Size field controls the\n\t\t\t// size of the internal buffer the kernel allocates for reading the\n\t\t\t// perf_event_attr argument from userspace.\n\t\t\tSize:   unix.PERF_ATTR_SIZE_VER1,\n\t\t\tType:   uint32(eventType),   // PMU event type read from sysfs\n\t\t\tExt1:   uint64(uintptr(sp)), // Uprobe path\n\t\t\tExt2:   args.Offset,         // Uprobe offset\n\t\t\tConfig: config,              // RefCtrOffset, Retprobe flag\n\t\t}\n\t}\n\n\tcpu := 0\n\tif args.Pid != perfAllThreads {\n\t\tcpu = -1\n\t}\n\trawFd, err := unix.PerfEventOpen(&attr, args.Pid, cpu, -1, unix.PERF_FLAG_FD_CLOEXEC)\n\n\t// On some old kernels, kprobe PMU doesn't allow `.` in symbol names and\n\t// return -EINVAL. Return ErrNotSupported to allow falling back to tracefs.\n\t// https://github.com/torvalds/linux/blob/94710cac0ef4/kernel/trace/trace_kprobe.c#L340-L343\n\tif errors.Is(err, unix.EINVAL) && strings.Contains(args.Symbol, \".\") {\n\t\treturn nil, fmt.Errorf(\"token %s: older kernels don't accept dots: %w\", token, ErrNotSupported)\n\t}\n\t// Since commit 97c753e62e6c, ENOENT is correctly returned instead of EINVAL\n\t// when trying to create a retprobe for a missing symbol.\n\tif errors.Is(err, os.ErrNotExist) {\n\t\treturn nil, fmt.Errorf(\"token %s: not found: %w\", token, err)\n\t}\n\t// Since commit ab105a4fb894, EILSEQ is returned when a kprobe sym+offset is resolved\n\t// to an invalid insn boundary. The exact conditions that trigger this error are\n\t// arch specific however.\n\tif errors.Is(err, unix.EILSEQ) {\n\t\treturn nil, fmt.Errorf(\"token %s: bad insn boundary: %w\", token, os.ErrNotExist)\n\t}\n\t// Since at least commit cb9a19fe4aa51, ENOTSUPP is returned\n\t// when attempting to set a uprobe on a trap instruction.\n\tif errors.Is(err, sys.ENOTSUPP) {\n\t\treturn nil, fmt.Errorf(\"token %s: failed setting uprobe on offset %#x (possible trap insn): %w\", token, args.Offset, err)\n\t}\n\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"token %s: opening perf event: %w\", token, err)\n\t}\n\n\t// Ensure the string pointer is not collected before PerfEventOpen returns.\n\truntime.KeepAlive(sp)\n\n\tfd, err := sys.NewFD(rawFd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Kernel has perf_[k,u]probe PMU available, initialize perf event.\n\treturn newPerfEvent(fd, nil), nil\n}\n\n// tracefsProbe creates a trace event by writing an entry to <tracefs>/[k,u]probe_events.\n// A new trace event group name is generated on every call to support creating\n// multiple trace events for the same kernel or userspace symbol.\n// Path and offset are only set in the case of uprobe(s) and are used to set\n// the executable/library path on the filesystem and the offset where the probe is inserted.\n// A perf event is then opened on the newly-created trace event and returned to the caller.\nfunc tracefsProbe(args tracefs.ProbeArgs) (*perfEvent, error) {\n\tgroupPrefix := \"ebpf\"\n\tif args.Group != \"\" {\n\t\tgroupPrefix = args.Group\n\t}\n\n\t// Generate a random string for each trace event we attempt to create.\n\t// This value is used as the 'group' token in tracefs to allow creating\n\t// multiple kprobe trace events with the same name.\n\tgroup, err := tracefs.RandomGroup(groupPrefix)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"randomizing group name: %w\", err)\n\t}\n\targs.Group = group\n\n\t// Create the [k,u]probe trace event using tracefs.\n\tevt, err := tracefs.NewEvent(args)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating probe entry on tracefs: %w\", err)\n\t}\n\n\t// Kprobes are ephemeral tracepoints and share the same perf event type.\n\tfd, err := openTracepointPerfEvent(evt.ID(), args.Pid)\n\tif err != nil {\n\t\t// Make sure we clean up the created tracefs event when we return error.\n\t\t// If a livepatch handler is already active on the symbol, the write to\n\t\t// tracefs will succeed, a trace event will show up, but creating the\n\t\t// perf event will fail with EBUSY.\n\t\t_ = evt.Close()\n\t\treturn nil, err\n\t}\n\n\treturn newPerfEvent(fd, evt), nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/kprobe_multi.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// KprobeMultiOptions defines additional parameters that will be used\n// when opening a KprobeMulti Link.\ntype KprobeMultiOptions struct {\n\t// Symbols takes a list of kernel symbol names to attach an ebpf program to.\n\t//\n\t// Mutually exclusive with Addresses.\n\tSymbols []string\n\n\t// Addresses takes a list of kernel symbol addresses in case they can not\n\t// be referred to by name.\n\t//\n\t// Note that only start addresses can be specified, since the fprobe API\n\t// limits the attach point to the function entry or return.\n\t//\n\t// Mutually exclusive with Symbols.\n\tAddresses []uintptr\n\n\t// Cookies specifies arbitrary values that can be fetched from an eBPF\n\t// program via `bpf_get_attach_cookie()`.\n\t//\n\t// If set, its length should be equal to the length of Symbols or Addresses.\n\t// Each Cookie is assigned to the Symbol or Address specified at the\n\t// corresponding slice index.\n\tCookies []uint64\n\n\t// Session must be true when attaching Programs with the\n\t// [ebpf.AttachTraceKprobeSession] attach type.\n\t//\n\t// This makes a Kprobe execute on both function entry and return. The entry\n\t// program can share a cookie value with the return program and can decide\n\t// whether the return program gets executed.\n\tSession bool\n}\n\n// KprobeMulti attaches the given eBPF program to the entry point of a given set\n// of kernel symbols.\n//\n// The difference with Kprobe() is that multi-kprobe accomplishes this in a\n// single system call, making it significantly faster than attaching many\n// probes one at a time.\n//\n// Requires at least Linux 5.18.\nfunc KprobeMulti(prog *ebpf.Program, opts KprobeMultiOptions) (Link, error) {\n\treturn kprobeMulti(prog, opts, 0)\n}\n\n// KretprobeMulti attaches the given eBPF program to the return point of a given\n// set of kernel symbols.\n//\n// The difference with Kretprobe() is that multi-kprobe accomplishes this in a\n// single system call, making it significantly faster than attaching many\n// probes one at a time.\n//\n// Requires at least Linux 5.18.\nfunc KretprobeMulti(prog *ebpf.Program, opts KprobeMultiOptions) (Link, error) {\n\treturn kprobeMulti(prog, opts, sys.BPF_F_KPROBE_MULTI_RETURN)\n}\n\nfunc kprobeMulti(prog *ebpf.Program, opts KprobeMultiOptions, flags uint32) (Link, error) {\n\tif prog == nil {\n\t\treturn nil, errors.New(\"cannot attach a nil program\")\n\t}\n\n\tsyms := uint32(len(opts.Symbols))\n\taddrs := uint32(len(opts.Addresses))\n\tcookies := uint32(len(opts.Cookies))\n\n\tif syms == 0 && addrs == 0 {\n\t\treturn nil, fmt.Errorf(\"one of Symbols or Addresses is required: %w\", errInvalidInput)\n\t}\n\tif syms != 0 && addrs != 0 {\n\t\treturn nil, fmt.Errorf(\"Symbols and Addresses are mutually exclusive: %w\", errInvalidInput)\n\t}\n\tif cookies > 0 && cookies != syms && cookies != addrs {\n\t\treturn nil, fmt.Errorf(\"Cookies must be exactly Symbols or Addresses in length: %w\", errInvalidInput)\n\t}\n\n\tattachType := sys.BPF_TRACE_KPROBE_MULTI\n\tif opts.Session {\n\t\tattachType = sys.BPF_TRACE_KPROBE_SESSION\n\t}\n\n\tattr := &sys.LinkCreateKprobeMultiAttr{\n\t\tProgFd:           uint32(prog.FD()),\n\t\tAttachType:       attachType,\n\t\tKprobeMultiFlags: flags,\n\t}\n\n\tswitch {\n\tcase syms != 0:\n\t\tattr.Count = syms\n\t\tattr.Syms = sys.NewStringSlicePointer(opts.Symbols)\n\n\tcase addrs != 0:\n\t\tattr.Count = addrs\n\t\tattr.Addrs = sys.NewPointer(unsafe.Pointer(&opts.Addresses[0]))\n\t}\n\n\tif cookies != 0 {\n\t\tattr.Cookies = sys.NewPointer(unsafe.Pointer(&opts.Cookies[0]))\n\t}\n\n\tfd, err := sys.LinkCreateKprobeMulti(attr)\n\tif err == nil {\n\t\treturn &kprobeMultiLink{RawLink{fd, \"\"}}, nil\n\t}\n\n\tif errors.Is(err, unix.ESRCH) {\n\t\treturn nil, fmt.Errorf(\"couldn't find one or more symbols: %w\", os.ErrNotExist)\n\t}\n\n\tif opts.Session {\n\t\tif haveFeatErr := haveBPFLinkKprobeSession(); haveFeatErr != nil {\n\t\t\treturn nil, haveFeatErr\n\t\t}\n\t} else {\n\t\tif haveFeatErr := haveBPFLinkKprobeMulti(); haveFeatErr != nil {\n\t\t\treturn nil, haveFeatErr\n\t\t}\n\t}\n\n\t// Check EINVAL after running feature probes, since it's also returned when\n\t// the kernel doesn't support the multi/session attach types.\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn nil, fmt.Errorf(\"%w (missing kernel symbol or prog's AttachType not %s?)\", err, ebpf.AttachType(attachType))\n\t}\n\n\treturn nil, err\n}\n\ntype kprobeMultiLink struct {\n\tRawLink\n}\n\nvar _ Link = (*kprobeMultiLink)(nil)\n\nfunc (kml *kprobeMultiLink) Update(_ *ebpf.Program) error {\n\treturn fmt.Errorf(\"update kprobe_multi: %w\", ErrNotSupported)\n}\n\nfunc (kml *kprobeMultiLink) Info() (*Info, error) {\n\tvar info sys.KprobeMultiLinkInfo\n\tif err := sys.ObjInfo(kml.fd, &info); err != nil {\n\t\treturn nil, fmt.Errorf(\"kprobe multi link info: %s\", err)\n\t}\n\textra := &KprobeMultiInfo{\n\t\tcount:  info.Count,\n\t\tflags:  info.Flags,\n\t\tmissed: info.Missed,\n\t}\n\n\treturn &Info{\n\t\tinfo.Type,\n\t\tinfo.Id,\n\t\tebpf.ProgramID(info.ProgId),\n\t\textra,\n\t}, nil\n}\n\nvar haveBPFLinkKprobeMulti = internal.NewFeatureTest(\"bpf_link_kprobe_multi\", func() error {\n\tprog, err := ebpf.NewProgram(&ebpf.ProgramSpec{\n\t\tName: \"probe_kpm_link\",\n\t\tType: ebpf.Kprobe,\n\t\tInstructions: asm.Instructions{\n\t\t\tasm.Mov.Imm(asm.R0, 0),\n\t\t\tasm.Return(),\n\t\t},\n\t\tAttachType: ebpf.AttachTraceKprobeMulti,\n\t\tLicense:    \"MIT\",\n\t})\n\tif errors.Is(err, unix.E2BIG) {\n\t\t// Kernel doesn't support AttachType field.\n\t\treturn internal.ErrNotSupported\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer prog.Close()\n\n\tfd, err := sys.LinkCreateKprobeMulti(&sys.LinkCreateKprobeMultiAttr{\n\t\tProgFd:     uint32(prog.FD()),\n\t\tAttachType: sys.BPF_TRACE_KPROBE_MULTI,\n\t\tCount:      1,\n\t\tSyms:       sys.NewStringSlicePointer([]string{\"vprintk\"}),\n\t})\n\tswitch {\n\tcase errors.Is(err, unix.EINVAL):\n\t\treturn internal.ErrNotSupported\n\t// If CONFIG_FPROBE isn't set.\n\tcase errors.Is(err, unix.EOPNOTSUPP):\n\t\treturn internal.ErrNotSupported\n\tcase err != nil:\n\t\treturn err\n\t}\n\n\tfd.Close()\n\n\treturn nil\n}, \"5.18\")\n\nvar haveBPFLinkKprobeSession = internal.NewFeatureTest(\"bpf_link_kprobe_session\", func() error {\n\tprog, err := ebpf.NewProgram(&ebpf.ProgramSpec{\n\t\tName: \"probe_kps_link\",\n\t\tType: ebpf.Kprobe,\n\t\tInstructions: asm.Instructions{\n\t\t\tasm.Mov.Imm(asm.R0, 0),\n\t\t\tasm.Return(),\n\t\t},\n\t\tAttachType: ebpf.AttachTraceKprobeSession,\n\t\tLicense:    \"MIT\",\n\t})\n\tif errors.Is(err, unix.E2BIG) {\n\t\t// Kernel doesn't support AttachType field.\n\t\treturn internal.ErrNotSupported\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer prog.Close()\n\n\tfd, err := sys.LinkCreateKprobeMulti(&sys.LinkCreateKprobeMultiAttr{\n\t\tProgFd:     uint32(prog.FD()),\n\t\tAttachType: sys.BPF_TRACE_KPROBE_SESSION,\n\t\tCount:      1,\n\t\tSyms:       sys.NewStringSlicePointer([]string{\"vprintk\"}),\n\t})\n\tswitch {\n\tcase errors.Is(err, unix.EINVAL):\n\t\treturn internal.ErrNotSupported\n\t// If CONFIG_FPROBE isn't set.\n\tcase errors.Is(err, unix.EOPNOTSUPP):\n\t\treturn internal.ErrNotSupported\n\tcase err != nil:\n\t\treturn err\n\t}\n\n\tfd.Close()\n\n\treturn nil\n}, \"6.10\")\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/link.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\nvar ErrNotSupported = internal.ErrNotSupported\n\n// Link represents a Program attached to a BPF hook.\ntype Link interface {\n\t// Replace the current program with a new program.\n\t//\n\t// Passing a nil program is an error. May return an error wrapping ErrNotSupported.\n\tUpdate(*ebpf.Program) error\n\n\t// Persist a link by pinning it into a bpffs.\n\t//\n\t// May return an error wrapping ErrNotSupported.\n\tPin(string) error\n\n\t// Undo a previous call to Pin.\n\t//\n\t// May return an error wrapping ErrNotSupported.\n\tUnpin() error\n\n\t// Close frees resources.\n\t//\n\t// The link will be broken unless it has been successfully pinned.\n\t// A link may continue past the lifetime of the process if Close is\n\t// not called.\n\tClose() error\n\n\t// Info returns metadata on a link.\n\t//\n\t// May return an error wrapping ErrNotSupported.\n\tInfo() (*Info, error)\n\n\t// Prevent external users from implementing this interface.\n\tisLink()\n}\n\n// NewLinkFromFD creates a link from a raw fd.\n//\n// Deprecated: use [NewFromFD] instead.\nfunc NewLinkFromFD(fd int) (Link, error) {\n\treturn NewFromFD(fd)\n}\n\n// NewFromFD creates a link from a raw fd.\n//\n// You should not use fd after calling this function.\nfunc NewFromFD(fd int) (Link, error) {\n\tsysFD, err := sys.NewFD(fd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn wrapRawLink(&RawLink{fd: sysFD})\n}\n\n// NewFromID returns the link associated with the given id.\n//\n// Returns ErrNotExist if there is no link with the given id.\nfunc NewFromID(id ID) (Link, error) {\n\tgetFdAttr := &sys.LinkGetFdByIdAttr{Id: id}\n\tfd, err := sys.LinkGetFdById(getFdAttr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get link fd from ID %d: %w\", id, err)\n\t}\n\n\treturn wrapRawLink(&RawLink{fd, \"\"})\n}\n\n// LoadPinnedLink loads a Link from a pin (file) on the BPF virtual filesystem.\n//\n// Requires at least Linux 5.7.\nfunc LoadPinnedLink(fileName string, opts *ebpf.LoadPinOptions) (Link, error) {\n\traw, err := loadPinnedRawLink(fileName, opts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn wrapRawLink(raw)\n}\n\n// wrap a RawLink in a more specific type if possible.\n//\n// The function takes ownership of raw and closes it on error.\nfunc wrapRawLink(raw *RawLink) (_ Link, err error) {\n\tdefer func() {\n\t\tif err != nil {\n\t\t\traw.Close()\n\t\t}\n\t}()\n\n\tinfo, err := raw.Info()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tswitch info.Type {\n\tcase RawTracepointType:\n\t\treturn &rawTracepoint{*raw}, nil\n\tcase TracingType:\n\t\treturn &tracing{*raw}, nil\n\tcase CgroupType:\n\t\treturn &linkCgroup{*raw}, nil\n\tcase IterType:\n\t\treturn &Iter{*raw}, nil\n\tcase NetNsType:\n\t\treturn &NetNsLink{*raw}, nil\n\tcase KprobeMultiType:\n\t\treturn &kprobeMultiLink{*raw}, nil\n\tcase UprobeMultiType:\n\t\treturn &uprobeMultiLink{*raw}, nil\n\tcase PerfEventType:\n\t\treturn &perfEventLink{*raw, nil}, nil\n\tcase TCXType:\n\t\treturn &tcxLink{*raw}, nil\n\tcase NetfilterType:\n\t\treturn &netfilterLink{*raw}, nil\n\tcase NetkitType:\n\t\treturn &netkitLink{*raw}, nil\n\tcase XDPType:\n\t\treturn &xdpLink{*raw}, nil\n\tdefault:\n\t\treturn raw, nil\n\t}\n}\n\n// ID uniquely identifies a BPF link.\ntype ID = sys.LinkID\n\n// RawLinkOptions control the creation of a raw link.\ntype RawLinkOptions struct {\n\t// File descriptor to attach to. This differs for each attach type.\n\tTarget int\n\t// Program to attach.\n\tProgram *ebpf.Program\n\t// Attach must match the attach type of Program.\n\tAttach ebpf.AttachType\n\t// BTF is the BTF of the attachment target.\n\tBTF btf.TypeID\n\t// Flags control the attach behaviour.\n\tFlags uint32\n}\n\n// Info contains metadata on a link.\ntype Info struct {\n\tType    Type\n\tID      ID\n\tProgram ebpf.ProgramID\n\textra   interface{}\n}\n\ntype TracingInfo struct {\n\tAttachType  sys.AttachType\n\tTargetObjId uint32\n\tTargetBtfId sys.TypeID\n}\n\ntype CgroupInfo struct {\n\tCgroupId   uint64\n\tAttachType sys.AttachType\n\t_          [4]byte\n}\n\ntype NetNsInfo struct {\n\tNetnsIno   uint32\n\tAttachType sys.AttachType\n}\n\ntype TCXInfo struct {\n\tIfindex    uint32\n\tAttachType sys.AttachType\n}\n\ntype XDPInfo struct {\n\tIfindex uint32\n}\n\ntype NetfilterInfo struct {\n\tPf       uint32\n\tHooknum  uint32\n\tPriority int32\n\tFlags    uint32\n}\n\ntype NetkitInfo struct {\n\tIfindex    uint32\n\tAttachType sys.AttachType\n}\n\ntype KprobeMultiInfo struct {\n\tcount  uint32\n\tflags  uint32\n\tmissed uint64\n}\n\n// AddressCount is the number of addresses hooked by the kprobe.\nfunc (kpm *KprobeMultiInfo) AddressCount() (uint32, bool) {\n\treturn kpm.count, kpm.count > 0\n}\n\nfunc (kpm *KprobeMultiInfo) Flags() (uint32, bool) {\n\treturn kpm.flags, kpm.count > 0\n}\n\nfunc (kpm *KprobeMultiInfo) Missed() (uint64, bool) {\n\treturn kpm.missed, kpm.count > 0\n}\n\ntype PerfEventInfo struct {\n\tType  sys.PerfEventType\n\textra interface{}\n}\n\nfunc (r *PerfEventInfo) Kprobe() *KprobeInfo {\n\te, _ := r.extra.(*KprobeInfo)\n\treturn e\n}\n\ntype KprobeInfo struct {\n\taddress uint64\n\tmissed  uint64\n}\n\nfunc (kp *KprobeInfo) Address() (uint64, bool) {\n\treturn kp.address, kp.address > 0\n}\n\nfunc (kp *KprobeInfo) Missed() (uint64, bool) {\n\treturn kp.missed, kp.address > 0\n}\n\n// Tracing returns tracing type-specific link info.\n//\n// Returns nil if the type-specific link info isn't available.\nfunc (r Info) Tracing() *TracingInfo {\n\te, _ := r.extra.(*TracingInfo)\n\treturn e\n}\n\n// Cgroup returns cgroup type-specific link info.\n//\n// Returns nil if the type-specific link info isn't available.\nfunc (r Info) Cgroup() *CgroupInfo {\n\te, _ := r.extra.(*CgroupInfo)\n\treturn e\n}\n\n// NetNs returns netns type-specific link info.\n//\n// Returns nil if the type-specific link info isn't available.\nfunc (r Info) NetNs() *NetNsInfo {\n\te, _ := r.extra.(*NetNsInfo)\n\treturn e\n}\n\n// XDP returns XDP type-specific link info.\n//\n// Returns nil if the type-specific link info isn't available.\nfunc (r Info) XDP() *XDPInfo {\n\te, _ := r.extra.(*XDPInfo)\n\treturn e\n}\n\n// TCX returns TCX type-specific link info.\n//\n// Returns nil if the type-specific link info isn't available.\nfunc (r Info) TCX() *TCXInfo {\n\te, _ := r.extra.(*TCXInfo)\n\treturn e\n}\n\n// Netfilter returns netfilter type-specific link info.\n//\n// Returns nil if the type-specific link info isn't available.\nfunc (r Info) Netfilter() *NetfilterInfo {\n\te, _ := r.extra.(*NetfilterInfo)\n\treturn e\n}\n\n// Netkit returns netkit type-specific link info.\n//\n// Returns nil if the type-specific link info isn't available.\nfunc (r Info) Netkit() *NetkitInfo {\n\te, _ := r.extra.(*NetkitInfo)\n\treturn e\n}\n\n// KprobeMulti returns kprobe-multi type-specific link info.\n//\n// Returns nil if the type-specific link info isn't available.\nfunc (r Info) KprobeMulti() *KprobeMultiInfo {\n\te, _ := r.extra.(*KprobeMultiInfo)\n\treturn e\n}\n\n// PerfEvent returns perf-event type-specific link info.\n//\n// Returns nil if the type-specific link info isn't available.\nfunc (r Info) PerfEvent() *PerfEventInfo {\n\te, _ := r.extra.(*PerfEventInfo)\n\treturn e\n}\n\n// RawLink is the low-level API to bpf_link.\n//\n// You should consider using the higher level interfaces in this\n// package instead.\ntype RawLink struct {\n\tfd         *sys.FD\n\tpinnedPath string\n}\n\n// AttachRawLink creates a raw link.\nfunc AttachRawLink(opts RawLinkOptions) (*RawLink, error) {\n\tif err := haveBPFLink(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif opts.Target < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid target: %s\", sys.ErrClosedFd)\n\t}\n\n\tprogFd := opts.Program.FD()\n\tif progFd < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid program: %s\", sys.ErrClosedFd)\n\t}\n\n\tattr := sys.LinkCreateAttr{\n\t\tTargetFd:    uint32(opts.Target),\n\t\tProgFd:      uint32(progFd),\n\t\tAttachType:  sys.AttachType(opts.Attach),\n\t\tTargetBtfId: opts.BTF,\n\t\tFlags:       opts.Flags,\n\t}\n\tfd, err := sys.LinkCreate(&attr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"create link: %w\", err)\n\t}\n\n\treturn &RawLink{fd, \"\"}, nil\n}\n\nfunc loadPinnedRawLink(fileName string, opts *ebpf.LoadPinOptions) (*RawLink, error) {\n\tfd, typ, err := sys.ObjGetTyped(&sys.ObjGetAttr{\n\t\tPathname:  sys.NewStringPointer(fileName),\n\t\tFileFlags: opts.Marshal(),\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"load pinned link: %w\", err)\n\t}\n\n\tif typ != sys.BPF_TYPE_LINK {\n\t\t_ = fd.Close()\n\t\treturn nil, fmt.Errorf(\"%s is not a Link\", fileName)\n\t}\n\n\treturn &RawLink{fd, fileName}, nil\n}\n\nfunc (l *RawLink) isLink() {}\n\n// FD returns the raw file descriptor.\nfunc (l *RawLink) FD() int {\n\treturn l.fd.Int()\n}\n\n// Close breaks the link.\n//\n// Use Pin if you want to make the link persistent.\nfunc (l *RawLink) Close() error {\n\treturn l.fd.Close()\n}\n\n// Pin persists a link past the lifetime of the process.\n//\n// Calling Close on a pinned Link will not break the link\n// until the pin is removed.\nfunc (l *RawLink) Pin(fileName string) error {\n\tif err := sys.Pin(l.pinnedPath, fileName, l.fd); err != nil {\n\t\treturn err\n\t}\n\tl.pinnedPath = fileName\n\treturn nil\n}\n\n// Unpin implements the Link interface.\nfunc (l *RawLink) Unpin() error {\n\tif err := sys.Unpin(l.pinnedPath); err != nil {\n\t\treturn err\n\t}\n\tl.pinnedPath = \"\"\n\treturn nil\n}\n\n// IsPinned returns true if the Link has a non-empty pinned path.\nfunc (l *RawLink) IsPinned() bool {\n\treturn l.pinnedPath != \"\"\n}\n\n// Update implements the Link interface.\nfunc (l *RawLink) Update(new *ebpf.Program) error {\n\treturn l.UpdateArgs(RawLinkUpdateOptions{\n\t\tNew: new,\n\t})\n}\n\n// RawLinkUpdateOptions control the behaviour of RawLink.UpdateArgs.\ntype RawLinkUpdateOptions struct {\n\tNew   *ebpf.Program\n\tOld   *ebpf.Program\n\tFlags uint32\n}\n\n// UpdateArgs updates a link based on args.\nfunc (l *RawLink) UpdateArgs(opts RawLinkUpdateOptions) error {\n\tnewFd := opts.New.FD()\n\tif newFd < 0 {\n\t\treturn fmt.Errorf(\"invalid program: %s\", sys.ErrClosedFd)\n\t}\n\n\tvar oldFd int\n\tif opts.Old != nil {\n\t\toldFd = opts.Old.FD()\n\t\tif oldFd < 0 {\n\t\t\treturn fmt.Errorf(\"invalid replacement program: %s\", sys.ErrClosedFd)\n\t\t}\n\t}\n\n\tattr := sys.LinkUpdateAttr{\n\t\tLinkFd:    l.fd.Uint(),\n\t\tNewProgFd: uint32(newFd),\n\t\tOldProgFd: uint32(oldFd),\n\t\tFlags:     opts.Flags,\n\t}\n\treturn sys.LinkUpdate(&attr)\n}\n\n// Info returns metadata about the link.\n//\n// Linktype specific metadata is not included and can be retrieved\n// via the linktype specific Info() method.\nfunc (l *RawLink) Info() (*Info, error) {\n\tvar info sys.LinkInfo\n\n\tif err := sys.ObjInfo(l.fd, &info); err != nil {\n\t\treturn nil, fmt.Errorf(\"link info: %s\", err)\n\t}\n\n\treturn &Info{\n\t\tinfo.Type,\n\t\tinfo.Id,\n\t\tebpf.ProgramID(info.ProgId),\n\t\tnil,\n\t}, nil\n}\n\n// Iterator allows iterating over links attached into the kernel.\ntype Iterator struct {\n\t// The ID of the current link. Only valid after a call to Next\n\tID ID\n\t// The current link. Only valid until a call to Next.\n\t// See Take if you want to retain the link.\n\tLink Link\n\terr  error\n}\n\n// Next retrieves the next link.\n//\n// Returns true if another link was found. Call [Iterator.Err] after the function returns false.\nfunc (it *Iterator) Next() bool {\n\tid := it.ID\n\tfor {\n\t\tgetIdAttr := &sys.LinkGetNextIdAttr{Id: id}\n\t\terr := sys.LinkGetNextId(getIdAttr)\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t// There are no more links.\n\t\t\tbreak\n\t\t} else if err != nil {\n\t\t\tit.err = fmt.Errorf(\"get next link ID: %w\", err)\n\t\t\tbreak\n\t\t}\n\n\t\tid = getIdAttr.NextId\n\t\tl, err := NewFromID(id)\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t// Couldn't load the link fast enough. Try next ID.\n\t\t\tcontinue\n\t\t} else if err != nil {\n\t\t\tit.err = fmt.Errorf(\"get link for ID %d: %w\", id, err)\n\t\t\tbreak\n\t\t}\n\n\t\tif it.Link != nil {\n\t\t\tit.Link.Close()\n\t\t}\n\t\tit.ID, it.Link = id, l\n\t\treturn true\n\t}\n\n\t// No more links or we encountered an error.\n\tif it.Link != nil {\n\t\tit.Link.Close()\n\t}\n\tit.Link = nil\n\treturn false\n}\n\n// Take the ownership of the current link.\n//\n// It's the callers responsibility to close the link.\nfunc (it *Iterator) Take() Link {\n\tl := it.Link\n\tit.Link = nil\n\treturn l\n}\n\n// Err returns an error if iteration failed for some reason.\nfunc (it *Iterator) Err() error {\n\treturn it.err\n}\n\nfunc (it *Iterator) Close() {\n\tif it.Link != nil {\n\t\tit.Link.Close()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/netfilter.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\nconst NetfilterIPDefrag NetfilterAttachFlags = 0 // Enable IP packet defragmentation\n\ntype NetfilterAttachFlags uint32\n\ntype NetfilterOptions struct {\n\t// Program must be a netfilter BPF program.\n\tProgram *ebpf.Program\n\t// The protocol family.\n\tProtocolFamily uint32\n\t// The number of the hook you are interested in.\n\tHookNumber uint32\n\t// Priority within hook\n\tPriority int32\n\t// Extra link flags\n\tFlags uint32\n\t// Netfilter flags\n\tNetfilterFlags NetfilterAttachFlags\n}\n\ntype netfilterLink struct {\n\tRawLink\n}\n\n// AttachNetfilter links a netfilter BPF program to a netfilter hook.\nfunc AttachNetfilter(opts NetfilterOptions) (Link, error) {\n\tif opts.Program == nil {\n\t\treturn nil, fmt.Errorf(\"netfilter program is nil\")\n\t}\n\n\tif t := opts.Program.Type(); t != ebpf.Netfilter {\n\t\treturn nil, fmt.Errorf(\"invalid program type %s, expected netfilter\", t)\n\t}\n\n\tprogFd := opts.Program.FD()\n\tif progFd < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid program: %s\", sys.ErrClosedFd)\n\t}\n\n\tattr := sys.LinkCreateNetfilterAttr{\n\t\tProgFd:         uint32(opts.Program.FD()),\n\t\tAttachType:     sys.BPF_NETFILTER,\n\t\tFlags:          opts.Flags,\n\t\tPf:             uint32(opts.ProtocolFamily),\n\t\tHooknum:        uint32(opts.HookNumber),\n\t\tPriority:       opts.Priority,\n\t\tNetfilterFlags: uint32(opts.NetfilterFlags),\n\t}\n\n\tfd, err := sys.LinkCreateNetfilter(&attr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"attach netfilter link: %w\", err)\n\t}\n\n\treturn &netfilterLink{RawLink{fd, \"\"}}, nil\n}\n\nfunc (*netfilterLink) Update(_ *ebpf.Program) error {\n\treturn fmt.Errorf(\"netfilter update: %w\", ErrNotSupported)\n}\n\nfunc (nf *netfilterLink) Info() (*Info, error) {\n\tvar info sys.NetfilterLinkInfo\n\tif err := sys.ObjInfo(nf.fd, &info); err != nil {\n\t\treturn nil, fmt.Errorf(\"netfilter link info: %s\", err)\n\t}\n\textra := &NetfilterInfo{\n\t\tPf:       info.Pf,\n\t\tHooknum:  info.Hooknum,\n\t\tPriority: info.Priority,\n\t\tFlags:    info.Flags,\n\t}\n\n\treturn &Info{\n\t\tinfo.Type,\n\t\tinfo.Id,\n\t\tebpf.ProgramID(info.ProgId),\n\t\textra,\n\t}, nil\n}\n\nvar _ Link = (*netfilterLink)(nil)\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/netkit.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\ntype NetkitOptions struct {\n\t// Index of the interface to attach to.\n\tInterface int\n\t// Program to attach.\n\tProgram *ebpf.Program\n\t// One of the AttachNetkit* constants.\n\tAttach ebpf.AttachType\n\t// Attach relative to an anchor. Optional.\n\tAnchor Anchor\n\t// Only attach if the expected revision matches.\n\tExpectedRevision uint64\n\t// Flags control the attach behaviour. Specify an Anchor instead of\n\t// F_LINK, F_ID, F_BEFORE, F_AFTER and R_REPLACE. Optional.\n\tFlags uint32\n}\n\nfunc AttachNetkit(opts NetkitOptions) (Link, error) {\n\tif opts.Interface < 0 {\n\t\treturn nil, fmt.Errorf(\"interface %d is out of bounds\", opts.Interface)\n\t}\n\n\tif opts.Flags&anchorFlags != 0 {\n\t\treturn nil, fmt.Errorf(\"disallowed flags: use Anchor to specify attach target\")\n\t}\n\n\tattr := sys.LinkCreateNetkitAttr{\n\t\tProgFd:           uint32(opts.Program.FD()),\n\t\tAttachType:       sys.AttachType(opts.Attach),\n\t\tTargetIfindex:    uint32(opts.Interface),\n\t\tExpectedRevision: opts.ExpectedRevision,\n\t\tFlags:            opts.Flags,\n\t}\n\n\tif opts.Anchor != nil {\n\t\tfdOrID, flags, err := opts.Anchor.anchor()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"attach netkit link: %w\", err)\n\t\t}\n\n\t\tattr.RelativeFdOrId = fdOrID\n\t\tattr.Flags |= flags\n\t}\n\n\tfd, err := sys.LinkCreateNetkit(&attr)\n\truntime.KeepAlive(opts.Program)\n\truntime.KeepAlive(opts.Anchor)\n\tif err != nil {\n\t\tif haveFeatErr := haveNetkit(); haveFeatErr != nil {\n\t\t\treturn nil, haveFeatErr\n\t\t}\n\t\treturn nil, fmt.Errorf(\"attach netkit link: %w\", err)\n\t}\n\n\treturn &netkitLink{RawLink{fd, \"\"}}, nil\n}\n\ntype netkitLink struct {\n\tRawLink\n}\n\nvar _ Link = (*netkitLink)(nil)\n\nfunc (netkit *netkitLink) Info() (*Info, error) {\n\tvar info sys.NetkitLinkInfo\n\tif err := sys.ObjInfo(netkit.fd, &info); err != nil {\n\t\treturn nil, fmt.Errorf(\"netkit link info: %s\", err)\n\t}\n\textra := &NetkitInfo{\n\t\tIfindex:    info.Ifindex,\n\t\tAttachType: info.AttachType,\n\t}\n\n\treturn &Info{\n\t\tinfo.Type,\n\t\tinfo.Id,\n\t\tebpf.ProgramID(info.ProgId),\n\t\textra,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/netns.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\n// NetNsLink is a program attached to a network namespace.\ntype NetNsLink struct {\n\tRawLink\n}\n\n// AttachNetNs attaches a program to a network namespace.\nfunc AttachNetNs(ns int, prog *ebpf.Program) (*NetNsLink, error) {\n\tvar attach ebpf.AttachType\n\tswitch t := prog.Type(); t {\n\tcase ebpf.FlowDissector:\n\t\tattach = ebpf.AttachFlowDissector\n\tcase ebpf.SkLookup:\n\t\tattach = ebpf.AttachSkLookup\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"can't attach %v to network namespace\", t)\n\t}\n\n\tlink, err := AttachRawLink(RawLinkOptions{\n\t\tTarget:  ns,\n\t\tProgram: prog,\n\t\tAttach:  attach,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &NetNsLink{*link}, nil\n}\n\nfunc (ns *NetNsLink) Info() (*Info, error) {\n\tvar info sys.NetNsLinkInfo\n\tif err := sys.ObjInfo(ns.fd, &info); err != nil {\n\t\treturn nil, fmt.Errorf(\"netns link info: %s\", err)\n\t}\n\textra := &NetNsInfo{\n\t\tNetnsIno:   info.NetnsIno,\n\t\tAttachType: info.AttachType,\n\t}\n\n\treturn &Info{\n\t\tinfo.Type,\n\t\tinfo.Id,\n\t\tebpf.ProgramID(info.ProgId),\n\t\textra,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/perf_event.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/tracefs\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// Getting the terminology right is usually the hardest part. For posterity and\n// for staying sane during implementation:\n//\n// - trace event: Representation of a kernel runtime hook. Filesystem entries\n//   under <tracefs>/events. Can be tracepoints (static), kprobes or uprobes.\n//   Can be instantiated into perf events (see below).\n// - tracepoint: A predetermined hook point in the kernel. Exposed as trace\n//   events in (sub)directories under <tracefs>/events. Cannot be closed or\n//   removed, they are static.\n// - k(ret)probe: Ephemeral trace events based on entry or exit points of\n//   exported kernel symbols. kprobe-based (tracefs) trace events can be\n//   created system-wide by writing to the <tracefs>/kprobe_events file, or\n//   they can be scoped to the current process by creating PMU perf events.\n// - u(ret)probe: Ephemeral trace events based on user provides ELF binaries\n//   and offsets. uprobe-based (tracefs) trace events can be\n//   created system-wide by writing to the <tracefs>/uprobe_events file, or\n//   they can be scoped to the current process by creating PMU perf events.\n// - perf event: An object instantiated based on an existing trace event or\n//   kernel symbol. Referred to by fd in userspace.\n//   Exactly one eBPF program can be attached to a perf event. Multiple perf\n//   events can be created from a single trace event. Closing a perf event\n//   stops any further invocations of the attached eBPF program.\n\nvar (\n\terrInvalidInput = tracefs.ErrInvalidInput\n)\n\nconst (\n\tperfAllThreads = -1\n)\n\n// A perfEvent represents a perf event kernel object. Exactly one eBPF program\n// can be attached to it. It is created based on a tracefs trace event or a\n// Performance Monitoring Unit (PMU).\ntype perfEvent struct {\n\t// Trace event backing this perfEvent. May be nil.\n\ttracefsEvent *tracefs.Event\n\n\t// This is the perf event FD.\n\tfd *sys.FD\n}\n\nfunc newPerfEvent(fd *sys.FD, event *tracefs.Event) *perfEvent {\n\tpe := &perfEvent{event, fd}\n\t// Both event and fd have their own finalizer, but we want to\n\t// guarantee that they are closed in a certain order.\n\truntime.SetFinalizer(pe, (*perfEvent).Close)\n\treturn pe\n}\n\nfunc (pe *perfEvent) Close() error {\n\truntime.SetFinalizer(pe, nil)\n\n\tif err := pe.fd.Close(); err != nil {\n\t\treturn fmt.Errorf(\"closing perf event fd: %w\", err)\n\t}\n\n\tif pe.tracefsEvent != nil {\n\t\treturn pe.tracefsEvent.Close()\n\t}\n\n\treturn nil\n}\n\n// PerfEvent is implemented by some Link types which use a perf event under\n// the hood.\ntype PerfEvent interface {\n\t// PerfEvent returns a file for the underlying perf event.\n\t//\n\t// It is the callers responsibility to close the returned file.\n\t//\n\t// Making changes to the associated perf event lead to\n\t// undefined behaviour.\n\tPerfEvent() (*os.File, error)\n}\n\n// perfEventLink represents a bpf perf link.\ntype perfEventLink struct {\n\tRawLink\n\tpe *perfEvent\n}\n\nfunc (pl *perfEventLink) isLink() {}\n\nfunc (pl *perfEventLink) Close() error {\n\tif err := pl.fd.Close(); err != nil {\n\t\treturn fmt.Errorf(\"perf link close: %w\", err)\n\t}\n\n\t// when created from pinned link\n\tif pl.pe == nil {\n\t\treturn nil\n\t}\n\n\tif err := pl.pe.Close(); err != nil {\n\t\treturn fmt.Errorf(\"perf event close: %w\", err)\n\t}\n\treturn nil\n}\n\nfunc (pl *perfEventLink) Update(_ *ebpf.Program) error {\n\treturn fmt.Errorf(\"perf event link update: %w\", ErrNotSupported)\n}\n\nvar _ PerfEvent = (*perfEventLink)(nil)\n\nfunc (pl *perfEventLink) PerfEvent() (*os.File, error) {\n\t// when created from pinned link\n\tif pl.pe == nil {\n\t\treturn nil, ErrNotSupported\n\t}\n\n\tfd, err := pl.pe.fd.Dup()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn fd.File(\"perf-event\"), nil\n}\n\nfunc (pl *perfEventLink) Info() (*Info, error) {\n\tvar info sys.PerfEventLinkInfo\n\tif err := sys.ObjInfo(pl.fd, &info); err != nil {\n\t\treturn nil, fmt.Errorf(\"perf event link info: %s\", err)\n\t}\n\n\tvar extra2 interface{}\n\tswitch info.PerfEventType {\n\tcase sys.BPF_PERF_EVENT_KPROBE, sys.BPF_PERF_EVENT_KRETPROBE:\n\t\tvar kprobeInfo sys.KprobeLinkInfo\n\t\tif err := sys.ObjInfo(pl.fd, &kprobeInfo); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"kprobe link info: %s\", err)\n\t\t}\n\t\textra2 = &KprobeInfo{\n\t\t\taddress: kprobeInfo.Addr,\n\t\t\tmissed:  kprobeInfo.Missed,\n\t\t}\n\t}\n\n\textra := &PerfEventInfo{\n\t\tType:  info.PerfEventType,\n\t\textra: extra2,\n\t}\n\n\treturn &Info{\n\t\tinfo.Type,\n\t\tinfo.Id,\n\t\tebpf.ProgramID(info.ProgId),\n\t\textra,\n\t}, nil\n}\n\n// perfEventIoctl implements Link and handles the perf event lifecycle\n// via ioctl().\ntype perfEventIoctl struct {\n\t*perfEvent\n}\n\nfunc (pi *perfEventIoctl) isLink() {}\n\n// Since 4.15 (e87c6bc3852b \"bpf: permit multiple bpf attachments for a single perf event\"),\n// calling PERF_EVENT_IOC_SET_BPF appends the given program to a prog_array\n// owned by the perf event, which means multiple programs can be attached\n// simultaneously.\n//\n// Before 4.15, calling PERF_EVENT_IOC_SET_BPF more than once on a perf event\n// returns EEXIST.\n//\n// Detaching a program from a perf event is currently not possible, so a\n// program replacement mechanism cannot be implemented for perf events.\nfunc (pi *perfEventIoctl) Update(_ *ebpf.Program) error {\n\treturn fmt.Errorf(\"perf event ioctl update: %w\", ErrNotSupported)\n}\n\nfunc (pi *perfEventIoctl) Pin(string) error {\n\treturn fmt.Errorf(\"perf event ioctl pin: %w\", ErrNotSupported)\n}\n\nfunc (pi *perfEventIoctl) Unpin() error {\n\treturn fmt.Errorf(\"perf event ioctl unpin: %w\", ErrNotSupported)\n}\n\nfunc (pi *perfEventIoctl) Info() (*Info, error) {\n\treturn nil, fmt.Errorf(\"perf event ioctl info: %w\", ErrNotSupported)\n}\n\nvar _ PerfEvent = (*perfEventIoctl)(nil)\n\nfunc (pi *perfEventIoctl) PerfEvent() (*os.File, error) {\n\tfd, err := pi.fd.Dup()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn fd.File(\"perf-event\"), nil\n}\n\n// attach the given eBPF prog to the perf event stored in pe.\n// pe must contain a valid perf event fd.\n// prog's type must match the program type stored in pe.\nfunc attachPerfEvent(pe *perfEvent, prog *ebpf.Program, cookie uint64) (Link, error) {\n\tif prog == nil {\n\t\treturn nil, errors.New(\"cannot attach a nil program\")\n\t}\n\tif prog.FD() < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid program: %w\", sys.ErrClosedFd)\n\t}\n\n\tif err := haveBPFLinkPerfEvent(); err == nil {\n\t\treturn attachPerfEventLink(pe, prog, cookie)\n\t}\n\n\tif cookie != 0 {\n\t\treturn nil, fmt.Errorf(\"cookies are not supported: %w\", ErrNotSupported)\n\t}\n\n\treturn attachPerfEventIoctl(pe, prog)\n}\n\nfunc attachPerfEventIoctl(pe *perfEvent, prog *ebpf.Program) (*perfEventIoctl, error) {\n\t// Assign the eBPF program to the perf event.\n\terr := unix.IoctlSetInt(pe.fd.Int(), unix.PERF_EVENT_IOC_SET_BPF, prog.FD())\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"setting perf event bpf program: %w\", err)\n\t}\n\n\t// PERF_EVENT_IOC_ENABLE and _DISABLE ignore their given values.\n\tif err := unix.IoctlSetInt(pe.fd.Int(), unix.PERF_EVENT_IOC_ENABLE, 0); err != nil {\n\t\treturn nil, fmt.Errorf(\"enable perf event: %s\", err)\n\t}\n\n\treturn &perfEventIoctl{pe}, nil\n}\n\n// Use the bpf api to attach the perf event (BPF_LINK_TYPE_PERF_EVENT, 5.15+).\n//\n// https://github.com/torvalds/linux/commit/b89fbfbb854c9afc3047e8273cc3a694650b802e\nfunc attachPerfEventLink(pe *perfEvent, prog *ebpf.Program, cookie uint64) (*perfEventLink, error) {\n\tfd, err := sys.LinkCreatePerfEvent(&sys.LinkCreatePerfEventAttr{\n\t\tProgFd:     uint32(prog.FD()),\n\t\tTargetFd:   pe.fd.Uint(),\n\t\tAttachType: sys.BPF_PERF_EVENT,\n\t\tBpfCookie:  cookie,\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot create bpf perf link: %v\", err)\n\t}\n\n\treturn &perfEventLink{RawLink{fd: fd}, pe}, nil\n}\n\n// unsafeStringPtr returns an unsafe.Pointer to a NUL-terminated copy of str.\nfunc unsafeStringPtr(str string) (unsafe.Pointer, error) {\n\tp, err := unix.BytePtrFromString(str)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn unsafe.Pointer(p), nil\n}\n\n// openTracepointPerfEvent opens a tracepoint-type perf event. System-wide\n// [k,u]probes created by writing to <tracefs>/[k,u]probe_events are tracepoints\n// behind the scenes, and can be attached to using these perf events.\nfunc openTracepointPerfEvent(tid uint64, pid int) (*sys.FD, error) {\n\tattr := unix.PerfEventAttr{\n\t\tType:        unix.PERF_TYPE_TRACEPOINT,\n\t\tConfig:      tid,\n\t\tSample_type: unix.PERF_SAMPLE_RAW,\n\t\tSample:      1,\n\t\tWakeup:      1,\n\t}\n\n\tcpu := 0\n\tif pid != perfAllThreads {\n\t\tcpu = -1\n\t}\n\tfd, err := unix.PerfEventOpen(&attr, pid, cpu, -1, unix.PERF_FLAG_FD_CLOEXEC)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"opening tracepoint perf event: %w\", err)\n\t}\n\n\treturn sys.NewFD(fd)\n}\n\n// Probe BPF perf link.\n//\n// https://elixir.bootlin.com/linux/v5.16.8/source/kernel/bpf/syscall.c#L4307\n// https://github.com/torvalds/linux/commit/b89fbfbb854c9afc3047e8273cc3a694650b802e\nvar haveBPFLinkPerfEvent = internal.NewFeatureTest(\"bpf_link_perf_event\", func() error {\n\tprog, err := ebpf.NewProgram(&ebpf.ProgramSpec{\n\t\tName: \"probe_bpf_perf_link\",\n\t\tType: ebpf.Kprobe,\n\t\tInstructions: asm.Instructions{\n\t\t\tasm.Mov.Imm(asm.R0, 0),\n\t\t\tasm.Return(),\n\t\t},\n\t\tLicense: \"MIT\",\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer prog.Close()\n\n\t_, err = sys.LinkCreatePerfEvent(&sys.LinkCreatePerfEventAttr{\n\t\tProgFd:     uint32(prog.FD()),\n\t\tAttachType: sys.BPF_PERF_EVENT,\n\t})\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\tif errors.Is(err, unix.EBADF) {\n\t\treturn nil\n\t}\n\treturn err\n}, \"5.15\")\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/program.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\ntype RawAttachProgramOptions struct {\n\t// Target to query. This is usually a file descriptor but may refer to\n\t// something else based on the attach type.\n\tTarget int\n\t// Program to attach.\n\tProgram *ebpf.Program\n\t// Attach must match the attach type of Program.\n\tAttach ebpf.AttachType\n\t// Attach relative to an anchor. Optional.\n\tAnchor Anchor\n\t// Flags control the attach behaviour. Specify an Anchor instead of\n\t// F_LINK, F_ID, F_BEFORE, F_AFTER and F_REPLACE. Optional.\n\tFlags uint32\n\t// Only attach if the internal revision matches the given value.\n\tExpectedRevision uint64\n}\n\n// RawAttachProgram is a low level wrapper around BPF_PROG_ATTACH.\n//\n// You should use one of the higher level abstractions available in this\n// package if possible.\nfunc RawAttachProgram(opts RawAttachProgramOptions) error {\n\tif opts.Flags&anchorFlags != 0 {\n\t\treturn fmt.Errorf(\"disallowed flags: use Anchor to specify attach target\")\n\t}\n\n\tattr := sys.ProgAttachAttr{\n\t\tTargetFdOrIfindex: uint32(opts.Target),\n\t\tAttachBpfFd:       uint32(opts.Program.FD()),\n\t\tAttachType:        uint32(opts.Attach),\n\t\tAttachFlags:       uint32(opts.Flags),\n\t\tExpectedRevision:  opts.ExpectedRevision,\n\t}\n\n\tif opts.Anchor != nil {\n\t\tfdOrID, flags, err := opts.Anchor.anchor()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"attach program: %w\", err)\n\t\t}\n\n\t\tif flags == sys.BPF_F_REPLACE {\n\t\t\t// Ensure that replacing a program works on old kernels.\n\t\t\tattr.ReplaceBpfFd = fdOrID\n\t\t} else {\n\t\t\tattr.RelativeFdOrId = fdOrID\n\t\t\tattr.AttachFlags |= flags\n\t\t}\n\t}\n\n\tif err := sys.ProgAttach(&attr); err != nil {\n\t\tif haveFeatErr := haveProgAttach(); haveFeatErr != nil {\n\t\t\treturn haveFeatErr\n\t\t}\n\t\treturn fmt.Errorf(\"attach program: %w\", err)\n\t}\n\truntime.KeepAlive(opts.Program)\n\n\treturn nil\n}\n\ntype RawDetachProgramOptions RawAttachProgramOptions\n\n// RawDetachProgram is a low level wrapper around BPF_PROG_DETACH.\n//\n// You should use one of the higher level abstractions available in this\n// package if possible.\nfunc RawDetachProgram(opts RawDetachProgramOptions) error {\n\tif opts.Flags&anchorFlags != 0 {\n\t\treturn fmt.Errorf(\"disallowed flags: use Anchor to specify attach target\")\n\t}\n\n\tattr := sys.ProgDetachAttr{\n\t\tTargetFdOrIfindex: uint32(opts.Target),\n\t\tAttachBpfFd:       uint32(opts.Program.FD()),\n\t\tAttachType:        uint32(opts.Attach),\n\t\tExpectedRevision:  opts.ExpectedRevision,\n\t}\n\n\tif opts.Anchor != nil {\n\t\tfdOrID, flags, err := opts.Anchor.anchor()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"detach program: %w\", err)\n\t\t}\n\n\t\tattr.RelativeFdOrId = fdOrID\n\t\tattr.AttachFlags |= flags\n\t}\n\n\tif err := sys.ProgDetach(&attr); err != nil {\n\t\tif haveFeatErr := haveProgAttach(); haveFeatErr != nil {\n\t\t\treturn haveFeatErr\n\t\t}\n\t\treturn fmt.Errorf(\"can't detach program: %w\", err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/query.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\n// QueryOptions defines additional parameters when querying for programs.\ntype QueryOptions struct {\n\t// Target to query. This is usually a file descriptor but may refer to\n\t// something else based on the attach type.\n\tTarget int\n\t// Attach specifies the AttachType of the programs queried for\n\tAttach ebpf.AttachType\n\t// QueryFlags are flags for BPF_PROG_QUERY, e.g. BPF_F_QUERY_EFFECTIVE\n\tQueryFlags uint32\n}\n\n// QueryResult describes which programs and links are active.\ntype QueryResult struct {\n\t// List of attached programs.\n\tPrograms []AttachedProgram\n\n\t// Incremented by one every time the set of attached programs changes.\n\t// May be zero if not supported by the [ebpf.AttachType].\n\tRevision uint64\n}\n\n// HaveLinkInfo returns true if the kernel supports querying link information\n// for a particular [ebpf.AttachType].\nfunc (qr *QueryResult) HaveLinkInfo() bool {\n\treturn qr.Revision > 0\n}\n\ntype AttachedProgram struct {\n\tID     ebpf.ProgramID\n\tlinkID ID\n}\n\n// LinkID returns the ID associated with the program.\n//\n// Returns 0, false if the kernel doesn't support retrieving the ID or if the\n// program wasn't attached via a link. See [QueryResult.HaveLinkInfo] if you\n// need to tell the two apart.\nfunc (ap *AttachedProgram) LinkID() (ID, bool) {\n\treturn ap.linkID, ap.linkID != 0\n}\n\n// QueryPrograms retrieves a list of programs for the given AttachType.\n//\n// Returns a slice of attached programs, which may be empty.\n// revision counts how many times the set of attached programs has changed and\n// may be zero if not supported by the [ebpf.AttachType].\n// Returns ErrNotSupportd on a kernel without BPF_PROG_QUERY\nfunc QueryPrograms(opts QueryOptions) (*QueryResult, error) {\n\t// query the number of programs to allocate correct slice size\n\tattr := sys.ProgQueryAttr{\n\t\tTargetFdOrIfindex: uint32(opts.Target),\n\t\tAttachType:        sys.AttachType(opts.Attach),\n\t\tQueryFlags:        opts.QueryFlags,\n\t}\n\terr := sys.ProgQuery(&attr)\n\tif err != nil {\n\t\tif haveFeatErr := haveProgQuery(); haveFeatErr != nil {\n\t\t\treturn nil, fmt.Errorf(\"query programs: %w\", haveFeatErr)\n\t\t}\n\t\treturn nil, fmt.Errorf(\"query programs: %w\", err)\n\t}\n\tif attr.Count == 0 {\n\t\treturn &QueryResult{Revision: attr.Revision}, nil\n\t}\n\n\t// The minimum bpf_mprog revision is 1, so we can use the field to detect\n\t// whether the attach type supports link ids.\n\thaveLinkIDs := attr.Revision != 0\n\n\tcount := attr.Count\n\tprogIds := make([]ebpf.ProgramID, count)\n\tattr = sys.ProgQueryAttr{\n\t\tTargetFdOrIfindex: uint32(opts.Target),\n\t\tAttachType:        sys.AttachType(opts.Attach),\n\t\tQueryFlags:        opts.QueryFlags,\n\t\tCount:             count,\n\t\tProgIds:           sys.NewPointer(unsafe.Pointer(&progIds[0])),\n\t}\n\n\tvar linkIds []ID\n\tif haveLinkIDs {\n\t\tlinkIds = make([]ID, count)\n\t\tattr.LinkIds = sys.NewPointer(unsafe.Pointer(&linkIds[0]))\n\t}\n\n\tif err := sys.ProgQuery(&attr); err != nil {\n\t\treturn nil, fmt.Errorf(\"query programs: %w\", err)\n\t}\n\n\t// NB: attr.Count might have changed between the two syscalls.\n\tvar programs []AttachedProgram\n\tfor i, id := range progIds[:attr.Count] {\n\t\tap := AttachedProgram{ID: id}\n\t\tif haveLinkIDs {\n\t\t\tap.linkID = linkIds[i]\n\t\t}\n\t\tprograms = append(programs, ap)\n\t}\n\n\treturn &QueryResult{programs, attr.Revision}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/raw_tracepoint.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\ntype RawTracepointOptions struct {\n\t// Tracepoint name.\n\tName string\n\t// Program must be of type RawTracepoint*\n\tProgram *ebpf.Program\n}\n\n// AttachRawTracepoint links a BPF program to a raw_tracepoint.\n//\n// Requires at least Linux 4.17.\nfunc AttachRawTracepoint(opts RawTracepointOptions) (Link, error) {\n\tif t := opts.Program.Type(); t != ebpf.RawTracepoint && t != ebpf.RawTracepointWritable {\n\t\treturn nil, fmt.Errorf(\"invalid program type %s, expected RawTracepoint(Writable)\", t)\n\t}\n\tif opts.Program.FD() < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid program: %w\", sys.ErrClosedFd)\n\t}\n\n\tfd, err := sys.RawTracepointOpen(&sys.RawTracepointOpenAttr{\n\t\tName:   sys.NewStringPointer(opts.Name),\n\t\tProgFd: uint32(opts.Program.FD()),\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = haveBPFLink()\n\tif errors.Is(err, ErrNotSupported) {\n\t\t// Prior to commit 70ed506c3bbc (\"bpf: Introduce pinnable bpf_link abstraction\")\n\t\t// raw_tracepoints are just a plain fd.\n\t\treturn &simpleRawTracepoint{fd}, nil\n\t}\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &rawTracepoint{RawLink{fd: fd}}, nil\n}\n\ntype simpleRawTracepoint struct {\n\tfd *sys.FD\n}\n\nvar _ Link = (*simpleRawTracepoint)(nil)\n\nfunc (frt *simpleRawTracepoint) isLink() {}\n\nfunc (frt *simpleRawTracepoint) Close() error {\n\treturn frt.fd.Close()\n}\n\nfunc (frt *simpleRawTracepoint) Update(_ *ebpf.Program) error {\n\treturn fmt.Errorf(\"update raw_tracepoint: %w\", ErrNotSupported)\n}\n\nfunc (frt *simpleRawTracepoint) Pin(string) error {\n\treturn fmt.Errorf(\"pin raw_tracepoint: %w\", ErrNotSupported)\n}\n\nfunc (frt *simpleRawTracepoint) Unpin() error {\n\treturn fmt.Errorf(\"unpin raw_tracepoint: %w\", ErrNotSupported)\n}\n\nfunc (frt *simpleRawTracepoint) Info() (*Info, error) {\n\treturn nil, fmt.Errorf(\"can't get raw_tracepoint info: %w\", ErrNotSupported)\n}\n\ntype rawTracepoint struct {\n\tRawLink\n}\n\nvar _ Link = (*rawTracepoint)(nil)\n\nfunc (rt *rawTracepoint) Update(_ *ebpf.Program) error {\n\treturn fmt.Errorf(\"update raw_tracepoint: %w\", ErrNotSupported)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/socket_filter.go",
    "content": "package link\n\nimport (\n\t\"syscall\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// AttachSocketFilter attaches a SocketFilter BPF program to a socket.\nfunc AttachSocketFilter(conn syscall.Conn, program *ebpf.Program) error {\n\trawConn, err := conn.SyscallConn()\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar ssoErr error\n\terr = rawConn.Control(func(fd uintptr) {\n\t\tssoErr = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_ATTACH_BPF, program.FD())\n\t})\n\tif ssoErr != nil {\n\t\treturn ssoErr\n\t}\n\treturn err\n}\n\n// DetachSocketFilter detaches a SocketFilter BPF program from a socket.\nfunc DetachSocketFilter(conn syscall.Conn) error {\n\trawConn, err := conn.SyscallConn()\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar ssoErr error\n\terr = rawConn.Control(func(fd uintptr) {\n\t\tssoErr = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_DETACH_BPF, 0)\n\t})\n\tif ssoErr != nil {\n\t\treturn ssoErr\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/syscalls.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// Type is the kind of link.\ntype Type = sys.LinkType\n\n// Valid link types.\nconst (\n\tUnspecifiedType   = sys.BPF_LINK_TYPE_UNSPEC\n\tRawTracepointType = sys.BPF_LINK_TYPE_RAW_TRACEPOINT\n\tTracingType       = sys.BPF_LINK_TYPE_TRACING\n\tCgroupType        = sys.BPF_LINK_TYPE_CGROUP\n\tIterType          = sys.BPF_LINK_TYPE_ITER\n\tNetNsType         = sys.BPF_LINK_TYPE_NETNS\n\tXDPType           = sys.BPF_LINK_TYPE_XDP\n\tPerfEventType     = sys.BPF_LINK_TYPE_PERF_EVENT\n\tKprobeMultiType   = sys.BPF_LINK_TYPE_KPROBE_MULTI\n\tTCXType           = sys.BPF_LINK_TYPE_TCX\n\tUprobeMultiType   = sys.BPF_LINK_TYPE_UPROBE_MULTI\n\tNetfilterType     = sys.BPF_LINK_TYPE_NETFILTER\n\tNetkitType        = sys.BPF_LINK_TYPE_NETKIT\n)\n\nvar haveProgAttach = internal.NewFeatureTest(\"BPF_PROG_ATTACH\", func() error {\n\tprog, err := ebpf.NewProgram(&ebpf.ProgramSpec{\n\t\tType:    ebpf.CGroupSKB,\n\t\tLicense: \"MIT\",\n\t\tInstructions: asm.Instructions{\n\t\t\tasm.Mov.Imm(asm.R0, 0),\n\t\t\tasm.Return(),\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\n\t// BPF_PROG_ATTACH was introduced at the same time as CGgroupSKB,\n\t// so being able to load the program is enough to infer that we\n\t// have the syscall.\n\tprog.Close()\n\treturn nil\n}, \"4.10\")\n\nvar haveProgAttachReplace = internal.NewFeatureTest(\"BPF_PROG_ATTACH atomic replacement of MULTI progs\", func() error {\n\tif err := haveProgAttach(); err != nil {\n\t\treturn err\n\t}\n\n\tprog, err := ebpf.NewProgram(&ebpf.ProgramSpec{\n\t\tType:       ebpf.CGroupSKB,\n\t\tAttachType: ebpf.AttachCGroupInetIngress,\n\t\tLicense:    \"MIT\",\n\t\tInstructions: asm.Instructions{\n\t\t\tasm.Mov.Imm(asm.R0, 0),\n\t\t\tasm.Return(),\n\t\t},\n\t})\n\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\n\tdefer prog.Close()\n\n\t// We know that we have BPF_PROG_ATTACH since we can load CGroupSKB programs.\n\t// If passing BPF_F_REPLACE gives us EINVAL we know that the feature isn't\n\t// present.\n\tattr := sys.ProgAttachAttr{\n\t\t// We rely on this being checked after attachFlags.\n\t\tTargetFdOrIfindex: ^uint32(0),\n\t\tAttachBpfFd:       uint32(prog.FD()),\n\t\tAttachType:        uint32(ebpf.AttachCGroupInetIngress),\n\t\tAttachFlags:       uint32(flagReplace),\n\t}\n\n\terr = sys.ProgAttach(&attr)\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\tif errors.Is(err, unix.EBADF) {\n\t\treturn nil\n\t}\n\treturn err\n}, \"5.5\")\n\nvar haveBPFLink = internal.NewFeatureTest(\"bpf_link\", func() error {\n\tattr := sys.LinkCreateAttr{\n\t\t// This is a hopefully invalid file descriptor, which triggers EBADF.\n\t\tTargetFd:   ^uint32(0),\n\t\tProgFd:     ^uint32(0),\n\t\tAttachType: sys.AttachType(ebpf.AttachCGroupInetIngress),\n\t}\n\t_, err := sys.LinkCreate(&attr)\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\tif errors.Is(err, unix.EBADF) {\n\t\treturn nil\n\t}\n\treturn err\n}, \"5.7\")\n\nvar haveProgQuery = internal.NewFeatureTest(\"BPF_PROG_QUERY\", func() error {\n\tattr := sys.ProgQueryAttr{\n\t\t// We rely on this being checked during the syscall.\n\t\t// With an otherwise correct payload we expect EBADF here\n\t\t// as an indication that the feature is present.\n\t\tTargetFdOrIfindex: ^uint32(0),\n\t\tAttachType:        sys.AttachType(ebpf.AttachCGroupInetIngress),\n\t}\n\n\terr := sys.ProgQuery(&attr)\n\n\tif errors.Is(err, unix.EBADF) {\n\t\treturn nil\n\t}\n\tif err != nil {\n\t\treturn ErrNotSupported\n\t}\n\treturn errors.New(\"syscall succeeded unexpectedly\")\n}, \"4.15\")\n\nvar haveTCX = internal.NewFeatureTest(\"tcx\", func() error {\n\tprog, err := ebpf.NewProgram(&ebpf.ProgramSpec{\n\t\tType:    ebpf.SchedCLS,\n\t\tLicense: \"MIT\",\n\t\tInstructions: asm.Instructions{\n\t\t\tasm.Mov.Imm(asm.R0, 0),\n\t\t\tasm.Return(),\n\t\t},\n\t})\n\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\n\tdefer prog.Close()\n\tattr := sys.LinkCreateTcxAttr{\n\t\t// We rely on this being checked during the syscall.\n\t\t// With an otherwise correct payload we expect ENODEV here\n\t\t// as an indication that the feature is present.\n\t\tTargetIfindex: ^uint32(0),\n\t\tProgFd:        uint32(prog.FD()),\n\t\tAttachType:    sys.AttachType(ebpf.AttachTCXIngress),\n\t}\n\n\t_, err = sys.LinkCreateTcx(&attr)\n\n\tif errors.Is(err, unix.ENODEV) {\n\t\treturn nil\n\t}\n\tif err != nil {\n\t\treturn ErrNotSupported\n\t}\n\treturn errors.New(\"syscall succeeded unexpectedly\")\n}, \"6.6\")\n\nvar haveNetkit = internal.NewFeatureTest(\"netkit\", func() error {\n\tprog, err := ebpf.NewProgram(&ebpf.ProgramSpec{\n\t\tType:    ebpf.SchedCLS,\n\t\tLicense: \"MIT\",\n\t\tInstructions: asm.Instructions{\n\t\t\tasm.Mov.Imm(asm.R0, 0),\n\t\t\tasm.Return(),\n\t\t},\n\t})\n\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\n\tdefer prog.Close()\n\tattr := sys.LinkCreateNetkitAttr{\n\t\t// We rely on this being checked during the syscall.\n\t\t// With an otherwise correct payload we expect ENODEV here\n\t\t// as an indication that the feature is present.\n\t\tTargetIfindex: ^uint32(0),\n\t\tProgFd:        uint32(prog.FD()),\n\t\tAttachType:    sys.AttachType(ebpf.AttachNetkitPrimary),\n\t}\n\n\t_, err = sys.LinkCreateNetkit(&attr)\n\n\tif errors.Is(err, unix.ENODEV) {\n\t\treturn nil\n\t}\n\tif err != nil {\n\t\treturn ErrNotSupported\n\t}\n\treturn errors.New(\"syscall succeeded unexpectedly\")\n}, \"6.7\")\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/tcx.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\ntype TCXOptions struct {\n\t// Index of the interface to attach to.\n\tInterface int\n\t// Program to attach.\n\tProgram *ebpf.Program\n\t// One of the AttachTCX* constants.\n\tAttach ebpf.AttachType\n\t// Attach relative to an anchor. Optional.\n\tAnchor Anchor\n\t// Only attach if the expected revision matches.\n\tExpectedRevision uint64\n\t// Flags control the attach behaviour. Specify an Anchor instead of\n\t// F_LINK, F_ID, F_BEFORE, F_AFTER and R_REPLACE. Optional.\n\tFlags uint32\n}\n\nfunc AttachTCX(opts TCXOptions) (Link, error) {\n\tif opts.Interface < 0 {\n\t\treturn nil, fmt.Errorf(\"interface %d is out of bounds\", opts.Interface)\n\t}\n\n\tif opts.Flags&anchorFlags != 0 {\n\t\treturn nil, fmt.Errorf(\"disallowed flags: use Anchor to specify attach target\")\n\t}\n\n\tattr := sys.LinkCreateTcxAttr{\n\t\tProgFd:           uint32(opts.Program.FD()),\n\t\tAttachType:       sys.AttachType(opts.Attach),\n\t\tTargetIfindex:    uint32(opts.Interface),\n\t\tExpectedRevision: opts.ExpectedRevision,\n\t\tFlags:            opts.Flags,\n\t}\n\n\tif opts.Anchor != nil {\n\t\tfdOrID, flags, err := opts.Anchor.anchor()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"attach tcx link: %w\", err)\n\t\t}\n\n\t\tattr.RelativeFdOrId = fdOrID\n\t\tattr.Flags |= flags\n\t}\n\n\tfd, err := sys.LinkCreateTcx(&attr)\n\truntime.KeepAlive(opts.Program)\n\truntime.KeepAlive(opts.Anchor)\n\tif err != nil {\n\t\tif haveFeatErr := haveTCX(); haveFeatErr != nil {\n\t\t\treturn nil, haveFeatErr\n\t\t}\n\t\treturn nil, fmt.Errorf(\"attach tcx link: %w\", err)\n\t}\n\n\treturn &tcxLink{RawLink{fd, \"\"}}, nil\n}\n\ntype tcxLink struct {\n\tRawLink\n}\n\nvar _ Link = (*tcxLink)(nil)\n\nfunc (tcx *tcxLink) Info() (*Info, error) {\n\tvar info sys.TcxLinkInfo\n\tif err := sys.ObjInfo(tcx.fd, &info); err != nil {\n\t\treturn nil, fmt.Errorf(\"tcx link info: %s\", err)\n\t}\n\textra := &TCXInfo{\n\t\tIfindex:    info.Ifindex,\n\t\tAttachType: info.AttachType,\n\t}\n\n\treturn &Info{\n\t\tinfo.Type,\n\t\tinfo.Id,\n\t\tebpf.ProgramID(info.ProgId),\n\t\textra,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/tracepoint.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/tracefs\"\n)\n\n// TracepointOptions defines additional parameters that will be used\n// when loading Tracepoints.\ntype TracepointOptions struct {\n\t// Arbitrary value that can be fetched from an eBPF program\n\t// via `bpf_get_attach_cookie()`.\n\t//\n\t// Needs kernel 5.15+.\n\tCookie uint64\n}\n\n// Tracepoint attaches the given eBPF program to the tracepoint with the given\n// group and name. See /sys/kernel/tracing/events to find available\n// tracepoints. The top-level directory is the group, the event's subdirectory\n// is the name. Example:\n//\n//\ttp, err := Tracepoint(\"syscalls\", \"sys_enter_fork\", prog, nil)\n//\n// Losing the reference to the resulting Link (tp) will close the Tracepoint\n// and prevent further execution of prog. The Link must be Closed during\n// program shutdown to avoid leaking system resources.\n//\n// Note that attaching eBPF programs to syscalls (sys_enter_*/sys_exit_*) is\n// only possible as of kernel 4.14 (commit cf5f5ce).\n//\n// The returned Link may implement [PerfEvent].\nfunc Tracepoint(group, name string, prog *ebpf.Program, opts *TracepointOptions) (Link, error) {\n\tif group == \"\" || name == \"\" {\n\t\treturn nil, fmt.Errorf(\"group and name cannot be empty: %w\", errInvalidInput)\n\t}\n\tif prog == nil {\n\t\treturn nil, fmt.Errorf(\"prog cannot be nil: %w\", errInvalidInput)\n\t}\n\tif prog.Type() != ebpf.TracePoint {\n\t\treturn nil, fmt.Errorf(\"eBPF program type %s is not a Tracepoint: %w\", prog.Type(), errInvalidInput)\n\t}\n\n\ttid, err := tracefs.EventID(group, name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfd, err := openTracepointPerfEvent(tid, perfAllThreads)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar cookie uint64\n\tif opts != nil {\n\t\tcookie = opts.Cookie\n\t}\n\n\tpe := newPerfEvent(fd, nil)\n\n\tlnk, err := attachPerfEvent(pe, prog, cookie)\n\tif err != nil {\n\t\tpe.Close()\n\t\treturn nil, err\n\t}\n\n\treturn lnk, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/tracing.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\ntype tracing struct {\n\tRawLink\n}\n\nfunc (f *tracing) Update(_ *ebpf.Program) error {\n\treturn fmt.Errorf(\"tracing update: %w\", ErrNotSupported)\n}\n\nfunc (f *tracing) Info() (*Info, error) {\n\tvar info sys.TracingLinkInfo\n\tif err := sys.ObjInfo(f.fd, &info); err != nil {\n\t\treturn nil, fmt.Errorf(\"tracing link info: %s\", err)\n\t}\n\textra := &TracingInfo{\n\t\tTargetObjId: info.TargetObjId,\n\t\tTargetBtfId: info.TargetBtfId,\n\t\tAttachType:  info.AttachType,\n\t}\n\n\treturn &Info{\n\t\tinfo.Type,\n\t\tinfo.Id,\n\t\tebpf.ProgramID(info.ProgId),\n\t\textra,\n\t}, nil\n}\n\n// AttachFreplace attaches the given eBPF program to the function it replaces.\n//\n// The program and name can either be provided at link time, or can be provided\n// at program load time. If they were provided at load time, they should be nil\n// and empty respectively here, as they will be ignored by the kernel.\n// Examples:\n//\n//\tAttachFreplace(dispatcher, \"function\", replacement)\n//\tAttachFreplace(nil, \"\", replacement)\nfunc AttachFreplace(targetProg *ebpf.Program, name string, prog *ebpf.Program) (Link, error) {\n\tif (name == \"\") != (targetProg == nil) {\n\t\treturn nil, fmt.Errorf(\"must provide both or neither of name and targetProg: %w\", errInvalidInput)\n\t}\n\tif prog == nil {\n\t\treturn nil, fmt.Errorf(\"prog cannot be nil: %w\", errInvalidInput)\n\t}\n\tif prog.Type() != ebpf.Extension {\n\t\treturn nil, fmt.Errorf(\"eBPF program type %s is not an Extension: %w\", prog.Type(), errInvalidInput)\n\t}\n\n\tvar (\n\t\ttarget int\n\t\ttypeID btf.TypeID\n\t)\n\tif targetProg != nil {\n\t\tbtfHandle, err := targetProg.Handle()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdefer btfHandle.Close()\n\n\t\tspec, err := btfHandle.Spec(nil)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvar function *btf.Func\n\t\tif err := spec.TypeByName(name, &function); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\ttarget = targetProg.FD()\n\t\ttypeID, err = spec.TypeID(function)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tlink, err := AttachRawLink(RawLinkOptions{\n\t\tTarget:  target,\n\t\tProgram: prog,\n\t\tAttach:  ebpf.AttachNone,\n\t\tBTF:     typeID,\n\t})\n\tif errors.Is(err, sys.ENOTSUPP) {\n\t\t// This may be returned by bpf_tracing_prog_attach via bpf_arch_text_poke.\n\t\treturn nil, fmt.Errorf(\"create raw tracepoint: %w\", ErrNotSupported)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &tracing{*link}, nil\n}\n\ntype TracingOptions struct {\n\t// Program must be of type Tracing with attach type\n\t// AttachTraceFEntry/AttachTraceFExit/AttachModifyReturn or\n\t// AttachTraceRawTp.\n\tProgram *ebpf.Program\n\t// Program attach type. Can be one of:\n\t// \t- AttachTraceFEntry\n\t// \t- AttachTraceFExit\n\t// \t- AttachModifyReturn\n\t// \t- AttachTraceRawTp\n\t// This field is optional.\n\tAttachType ebpf.AttachType\n\t// Arbitrary value that can be fetched from an eBPF program\n\t// via `bpf_get_attach_cookie()`.\n\tCookie uint64\n}\n\ntype LSMOptions struct {\n\t// Program must be of type LSM with attach type\n\t// AttachLSMMac.\n\tProgram *ebpf.Program\n\t// Arbitrary value that can be fetched from an eBPF program\n\t// via `bpf_get_attach_cookie()`.\n\tCookie uint64\n}\n\n// attachBTFID links all BPF program types (Tracing/LSM) that they attach to a btf_id.\nfunc attachBTFID(program *ebpf.Program, at ebpf.AttachType, cookie uint64) (Link, error) {\n\tif program.FD() < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid program %w\", sys.ErrClosedFd)\n\t}\n\n\tvar (\n\t\tfd  *sys.FD\n\t\terr error\n\t)\n\tswitch at {\n\tcase ebpf.AttachTraceFEntry, ebpf.AttachTraceFExit, ebpf.AttachTraceRawTp,\n\t\tebpf.AttachModifyReturn, ebpf.AttachLSMMac:\n\t\t// Attach via BPF link\n\t\tfd, err = sys.LinkCreateTracing(&sys.LinkCreateTracingAttr{\n\t\t\tProgFd:     uint32(program.FD()),\n\t\t\tAttachType: sys.AttachType(at),\n\t\t\tCookie:     cookie,\n\t\t})\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tif !errors.Is(err, unix.EINVAL) && !errors.Is(err, sys.ENOTSUPP) {\n\t\t\treturn nil, fmt.Errorf(\"create tracing link: %w\", err)\n\t\t}\n\t\tfallthrough\n\tcase ebpf.AttachNone:\n\t\t// Attach via RawTracepointOpen\n\t\tif cookie > 0 {\n\t\t\treturn nil, fmt.Errorf(\"create raw tracepoint with cookie: %w\", ErrNotSupported)\n\t\t}\n\n\t\tfd, err = sys.RawTracepointOpen(&sys.RawTracepointOpenAttr{\n\t\t\tProgFd: uint32(program.FD()),\n\t\t})\n\t\tif errors.Is(err, sys.ENOTSUPP) {\n\t\t\t// This may be returned by bpf_tracing_prog_attach via bpf_arch_text_poke.\n\t\t\treturn nil, fmt.Errorf(\"create raw tracepoint: %w\", ErrNotSupported)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"create raw tracepoint: %w\", err)\n\t\t}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"invalid attach type: %s\", at.String())\n\t}\n\n\traw := RawLink{fd: fd}\n\tinfo, err := raw.Info()\n\tif err != nil {\n\t\traw.Close()\n\t\treturn nil, err\n\t}\n\n\tif info.Type == RawTracepointType {\n\t\t// Sadness upon sadness: a Tracing program with AttachRawTp returns\n\t\t// a raw_tracepoint link. Other types return a tracing link.\n\t\treturn &rawTracepoint{raw}, nil\n\t}\n\treturn &tracing{raw}, nil\n}\n\n// AttachTracing links a tracing (fentry/fexit/fmod_ret) BPF program or\n// a BTF-powered raw tracepoint (tp_btf) BPF Program to a BPF hook defined\n// in kernel modules.\nfunc AttachTracing(opts TracingOptions) (Link, error) {\n\tif t := opts.Program.Type(); t != ebpf.Tracing {\n\t\treturn nil, fmt.Errorf(\"invalid program type %s, expected Tracing\", t)\n\t}\n\n\tswitch opts.AttachType {\n\tcase ebpf.AttachTraceFEntry, ebpf.AttachTraceFExit, ebpf.AttachModifyReturn,\n\t\tebpf.AttachTraceRawTp, ebpf.AttachNone:\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"invalid attach type: %s\", opts.AttachType.String())\n\t}\n\n\treturn attachBTFID(opts.Program, opts.AttachType, opts.Cookie)\n}\n\n// AttachLSM links a Linux security module (LSM) BPF Program to a BPF\n// hook defined in kernel modules.\nfunc AttachLSM(opts LSMOptions) (Link, error) {\n\tif t := opts.Program.Type(); t != ebpf.LSM {\n\t\treturn nil, fmt.Errorf(\"invalid program type %s, expected LSM\", t)\n\t}\n\n\treturn attachBTFID(opts.Program, ebpf.AttachLSMMac, opts.Cookie)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/uprobe.go",
    "content": "package link\n\nimport (\n\t\"debug/elf\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"sync\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/tracefs\"\n)\n\nvar (\n\tuprobeRefCtrOffsetPMUPath = \"/sys/bus/event_source/devices/uprobe/format/ref_ctr_offset\"\n\t// elixir.bootlin.com/linux/v5.15-rc7/source/kernel/events/core.c#L9799\n\tuprobeRefCtrOffsetShift = 32\n\thaveRefCtrOffsetPMU     = internal.NewFeatureTest(\"RefCtrOffsetPMU\", func() error {\n\t\t_, err := os.Stat(uprobeRefCtrOffsetPMUPath)\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\treturn internal.ErrNotSupported\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}, \"4.20\")\n\n\t// ErrNoSymbol indicates that the given symbol was not found\n\t// in the ELF symbols table.\n\tErrNoSymbol = errors.New(\"not found\")\n)\n\n// Executable defines an executable program on the filesystem.\ntype Executable struct {\n\t// Path of the executable on the filesystem.\n\tpath string\n\t// Parsed ELF and dynamic symbols' cachedAddresses.\n\tcachedAddresses map[string]uint64\n\t// Keep track of symbol table lazy load.\n\tcacheAddressesOnce sync.Once\n}\n\n// UprobeOptions defines additional parameters that will be used\n// when loading Uprobes.\ntype UprobeOptions struct {\n\t// Symbol address. Must be provided in case of external symbols (shared libs).\n\t// If set, overrides the address eventually parsed from the executable.\n\tAddress uint64\n\t// The offset relative to given symbol. Useful when tracing an arbitrary point\n\t// inside the frame of given symbol.\n\t//\n\t// Note: this field changed from being an absolute offset to being relative\n\t// to Address.\n\tOffset uint64\n\t// Only set the uprobe on the given process ID. Useful when tracing\n\t// shared library calls or programs that have many running instances.\n\tPID int\n\t// Automatically manage SDT reference counts (semaphores).\n\t//\n\t// If this field is set, the Kernel will increment/decrement the\n\t// semaphore located in the process memory at the provided address on\n\t// probe attach/detach.\n\t//\n\t// See also:\n\t// sourceware.org/systemtap/wiki/UserSpaceProbeImplementation (Semaphore Handling)\n\t// github.com/torvalds/linux/commit/1cc33161a83d\n\t// github.com/torvalds/linux/commit/a6ca88b241d5\n\tRefCtrOffset uint64\n\t// Arbitrary value that can be fetched from an eBPF program\n\t// via `bpf_get_attach_cookie()`.\n\t//\n\t// Needs kernel 5.15+.\n\tCookie uint64\n\t// Prefix used for the event name if the uprobe must be attached using tracefs.\n\t// The group name will be formatted as `<prefix>_<randomstr>`.\n\t// The default empty string is equivalent to \"ebpf\" as the prefix.\n\tTraceFSPrefix string\n}\n\nfunc (uo *UprobeOptions) cookie() uint64 {\n\tif uo == nil {\n\t\treturn 0\n\t}\n\treturn uo.Cookie\n}\n\n// To open a new Executable, use:\n//\n//\tOpenExecutable(\"/bin/bash\")\n//\n// The returned value can then be used to open Uprobe(s).\nfunc OpenExecutable(path string) (*Executable, error) {\n\tif path == \"\" {\n\t\treturn nil, fmt.Errorf(\"path cannot be empty\")\n\t}\n\n\tf, err := internal.OpenSafeELFFile(path)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"parse ELF file: %w\", err)\n\t}\n\tdefer f.Close()\n\n\tif f.Type != elf.ET_EXEC && f.Type != elf.ET_DYN {\n\t\t// ELF is not an executable or a shared object.\n\t\treturn nil, errors.New(\"the given file is not an executable or a shared object\")\n\t}\n\n\treturn &Executable{\n\t\tpath:            path,\n\t\tcachedAddresses: make(map[string]uint64),\n\t}, nil\n}\n\nfunc (ex *Executable) load(f *internal.SafeELFFile) error {\n\tsyms, err := f.Symbols()\n\tif err != nil && !errors.Is(err, elf.ErrNoSymbols) {\n\t\treturn err\n\t}\n\n\tdynsyms, err := f.DynamicSymbols()\n\tif err != nil && !errors.Is(err, elf.ErrNoSymbols) {\n\t\treturn err\n\t}\n\n\tsyms = append(syms, dynsyms...)\n\n\tfor _, s := range syms {\n\t\tif elf.ST_TYPE(s.Info) != elf.STT_FUNC {\n\t\t\t// Symbol not associated with a function or other executable code.\n\t\t\tcontinue\n\t\t}\n\n\t\taddress := s.Value\n\n\t\t// Loop over ELF segments.\n\t\tfor _, prog := range f.Progs {\n\t\t\t// Skip uninteresting segments.\n\t\t\tif prog.Type != elf.PT_LOAD || (prog.Flags&elf.PF_X) == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif prog.Vaddr <= s.Value && s.Value < (prog.Vaddr+prog.Memsz) {\n\t\t\t\t// If the symbol value is contained in the segment, calculate\n\t\t\t\t// the symbol offset.\n\t\t\t\t//\n\t\t\t\t// fn symbol offset = fn symbol VA - .text VA + .text offset\n\t\t\t\t//\n\t\t\t\t// stackoverflow.com/a/40249502\n\t\t\t\taddress = s.Value - prog.Vaddr + prog.Off\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tex.cachedAddresses[s.Name] = address\n\t}\n\n\treturn nil\n}\n\n// address calculates the address of a symbol in the executable.\n//\n// opts must not be nil.\nfunc (ex *Executable) address(symbol string, address, offset uint64) (uint64, error) {\n\tif address > 0 {\n\t\treturn address + offset, nil\n\t}\n\n\tvar err error\n\tex.cacheAddressesOnce.Do(func() {\n\t\tvar f *internal.SafeELFFile\n\t\tf, err = internal.OpenSafeELFFile(ex.path)\n\t\tif err != nil {\n\t\t\terr = fmt.Errorf(\"parse ELF file: %w\", err)\n\t\t\treturn\n\t\t}\n\t\tdefer f.Close()\n\n\t\terr = ex.load(f)\n\t})\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"lazy load symbols: %w\", err)\n\t}\n\n\taddress, ok := ex.cachedAddresses[symbol]\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"symbol %s: %w\", symbol, ErrNoSymbol)\n\t}\n\n\t// Symbols with location 0 from section undef are shared library calls and\n\t// are relocated before the binary is executed. Dynamic linking is not\n\t// implemented by the library, so mark this as unsupported for now.\n\t//\n\t// Since only offset values are stored and not elf.Symbol, if the value is 0,\n\t// assume it's an external symbol.\n\tif address == 0 {\n\t\treturn 0, fmt.Errorf(\"cannot resolve %s library call '%s': %w \"+\n\t\t\t\"(consider providing UprobeOptions.Address)\", ex.path, symbol, ErrNotSupported)\n\t}\n\n\treturn address + offset, nil\n}\n\n// Uprobe attaches the given eBPF program to a perf event that fires when the\n// given symbol starts executing in the given Executable.\n// For example, /bin/bash::main():\n//\n//\tex, _ = OpenExecutable(\"/bin/bash\")\n//\tex.Uprobe(\"main\", prog, nil)\n//\n// When using symbols which belongs to shared libraries,\n// an offset must be provided via options:\n//\n//\tup, err := ex.Uprobe(\"main\", prog, &UprobeOptions{Offset: 0x123})\n//\n// Note: Setting the Offset field in the options supersedes the symbol's offset.\n//\n// Losing the reference to the resulting Link (up) will close the Uprobe\n// and prevent further execution of prog. The Link must be Closed during\n// program shutdown to avoid leaking system resources.\n//\n// Functions provided by shared libraries can currently not be traced and\n// will result in an ErrNotSupported.\n//\n// The returned Link may implement [PerfEvent].\nfunc (ex *Executable) Uprobe(symbol string, prog *ebpf.Program, opts *UprobeOptions) (Link, error) {\n\tu, err := ex.uprobe(symbol, prog, opts, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlnk, err := attachPerfEvent(u, prog, opts.cookie())\n\tif err != nil {\n\t\tu.Close()\n\t\treturn nil, err\n\t}\n\n\treturn lnk, nil\n}\n\n// Uretprobe attaches the given eBPF program to a perf event that fires right\n// before the given symbol exits. For example, /bin/bash::main():\n//\n//\tex, _ = OpenExecutable(\"/bin/bash\")\n//\tex.Uretprobe(\"main\", prog, nil)\n//\n// When using symbols which belongs to shared libraries,\n// an offset must be provided via options:\n//\n//\tup, err := ex.Uretprobe(\"main\", prog, &UprobeOptions{Offset: 0x123})\n//\n// Note: Setting the Offset field in the options supersedes the symbol's offset.\n//\n// Losing the reference to the resulting Link (up) will close the Uprobe\n// and prevent further execution of prog. The Link must be Closed during\n// program shutdown to avoid leaking system resources.\n//\n// Functions provided by shared libraries can currently not be traced and\n// will result in an ErrNotSupported.\n//\n// The returned Link may implement [PerfEvent].\nfunc (ex *Executable) Uretprobe(symbol string, prog *ebpf.Program, opts *UprobeOptions) (Link, error) {\n\tu, err := ex.uprobe(symbol, prog, opts, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlnk, err := attachPerfEvent(u, prog, opts.cookie())\n\tif err != nil {\n\t\tu.Close()\n\t\treturn nil, err\n\t}\n\n\treturn lnk, nil\n}\n\n// uprobe opens a perf event for the given binary/symbol and attaches prog to it.\n// If ret is true, create a uretprobe.\nfunc (ex *Executable) uprobe(symbol string, prog *ebpf.Program, opts *UprobeOptions, ret bool) (*perfEvent, error) {\n\tif prog == nil {\n\t\treturn nil, fmt.Errorf(\"prog cannot be nil: %w\", errInvalidInput)\n\t}\n\tif prog.Type() != ebpf.Kprobe {\n\t\treturn nil, fmt.Errorf(\"eBPF program type %s is not Kprobe: %w\", prog.Type(), errInvalidInput)\n\t}\n\tif opts == nil {\n\t\topts = &UprobeOptions{}\n\t}\n\n\toffset, err := ex.address(symbol, opts.Address, opts.Offset)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpid := opts.PID\n\tif pid == 0 {\n\t\tpid = perfAllThreads\n\t}\n\n\tif opts.RefCtrOffset != 0 {\n\t\tif err := haveRefCtrOffsetPMU(); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"uprobe ref_ctr_offset: %w\", err)\n\t\t}\n\t}\n\n\targs := tracefs.ProbeArgs{\n\t\tType:         tracefs.Uprobe,\n\t\tSymbol:       symbol,\n\t\tPath:         ex.path,\n\t\tOffset:       offset,\n\t\tPid:          pid,\n\t\tRefCtrOffset: opts.RefCtrOffset,\n\t\tRet:          ret,\n\t\tCookie:       opts.Cookie,\n\t\tGroup:        opts.TraceFSPrefix,\n\t}\n\n\t// Use uprobe PMU if the kernel has it available.\n\ttp, err := pmuProbe(args)\n\tif err == nil {\n\t\treturn tp, nil\n\t}\n\tif !errors.Is(err, ErrNotSupported) {\n\t\treturn nil, fmt.Errorf(\"creating perf_uprobe PMU: %w\", err)\n\t}\n\n\t// Use tracefs if uprobe PMU is missing.\n\ttp, err = tracefsProbe(args)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating trace event '%s:%s' in tracefs: %w\", ex.path, symbol, err)\n\t}\n\n\treturn tp, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/uprobe_multi.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// UprobeMultiOptions defines additional parameters that will be used\n// when opening a UprobeMulti Link.\ntype UprobeMultiOptions struct {\n\t// Symbol addresses. If set, overrides the addresses eventually parsed from\n\t// the executable. Mutually exclusive with UprobeMulti's symbols argument.\n\tAddresses []uint64\n\n\t// Offsets into functions provided by UprobeMulti's symbols argument.\n\t// For example: to set uprobes to main+5 and _start+10, call UprobeMulti\n\t// with:\n\t//     symbols: \"main\", \"_start\"\n\t//     opt.Offsets: 5, 10\n\tOffsets []uint64\n\n\t// Optional list of associated ref counter offsets.\n\tRefCtrOffsets []uint64\n\n\t// Optional list of associated BPF cookies.\n\tCookies []uint64\n\n\t// Only set the uprobe_multi link on the given process ID, zero PID means\n\t// system-wide.\n\tPID uint32\n}\n\nfunc (ex *Executable) UprobeMulti(symbols []string, prog *ebpf.Program, opts *UprobeMultiOptions) (Link, error) {\n\treturn ex.uprobeMulti(symbols, prog, opts, 0)\n}\n\nfunc (ex *Executable) UretprobeMulti(symbols []string, prog *ebpf.Program, opts *UprobeMultiOptions) (Link, error) {\n\n\t// The return probe is not limited for symbols entry, so there's no special\n\t// setup for return uprobes (other than the extra flag). The symbols, opts.Offsets\n\t// and opts.Addresses arrays follow the same logic as for entry uprobes.\n\treturn ex.uprobeMulti(symbols, prog, opts, sys.BPF_F_UPROBE_MULTI_RETURN)\n}\n\nfunc (ex *Executable) uprobeMulti(symbols []string, prog *ebpf.Program, opts *UprobeMultiOptions, flags uint32) (Link, error) {\n\tif prog == nil {\n\t\treturn nil, errors.New(\"cannot attach a nil program\")\n\t}\n\n\tif opts == nil {\n\t\topts = &UprobeMultiOptions{}\n\t}\n\n\taddresses, err := ex.addresses(symbols, opts.Addresses, opts.Offsets)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\taddrs := len(addresses)\n\tcookies := len(opts.Cookies)\n\trefCtrOffsets := len(opts.RefCtrOffsets)\n\n\tif addrs == 0 {\n\t\treturn nil, fmt.Errorf(\"Addresses are required: %w\", errInvalidInput)\n\t}\n\tif refCtrOffsets > 0 && refCtrOffsets != addrs {\n\t\treturn nil, fmt.Errorf(\"RefCtrOffsets must be exactly Addresses in length: %w\", errInvalidInput)\n\t}\n\tif cookies > 0 && cookies != addrs {\n\t\treturn nil, fmt.Errorf(\"Cookies must be exactly Addresses in length: %w\", errInvalidInput)\n\t}\n\n\tattr := &sys.LinkCreateUprobeMultiAttr{\n\t\tPath:             sys.NewStringPointer(ex.path),\n\t\tProgFd:           uint32(prog.FD()),\n\t\tAttachType:       sys.BPF_TRACE_UPROBE_MULTI,\n\t\tUprobeMultiFlags: flags,\n\t\tCount:            uint32(addrs),\n\t\tOffsets:          sys.NewPointer(unsafe.Pointer(&addresses[0])),\n\t\tPid:              opts.PID,\n\t}\n\n\tif refCtrOffsets != 0 {\n\t\tattr.RefCtrOffsets = sys.NewPointer(unsafe.Pointer(&opts.RefCtrOffsets[0]))\n\t}\n\tif cookies != 0 {\n\t\tattr.Cookies = sys.NewPointer(unsafe.Pointer(&opts.Cookies[0]))\n\t}\n\n\tfd, err := sys.LinkCreateUprobeMulti(attr)\n\tif errors.Is(err, unix.ESRCH) {\n\t\treturn nil, fmt.Errorf(\"%w (specified pid not found?)\", os.ErrNotExist)\n\t}\n\t// Since Linux commit 46ba0e49b642 (\"bpf: fix multi-uprobe PID filtering\n\t// logic\"), if the provided pid overflows MaxInt32 (turning it negative), the\n\t// kernel will return EINVAL instead of ESRCH.\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn nil, fmt.Errorf(\"%w (invalid pid, missing symbol or prog's AttachType not AttachTraceUprobeMulti?)\", err)\n\t}\n\n\tif err != nil {\n\t\tif haveFeatErr := haveBPFLinkUprobeMulti(); haveFeatErr != nil {\n\t\t\treturn nil, haveFeatErr\n\t\t}\n\t\treturn nil, err\n\t}\n\n\treturn &uprobeMultiLink{RawLink{fd, \"\"}}, nil\n}\n\nfunc (ex *Executable) addresses(symbols []string, addresses, offsets []uint64) ([]uint64, error) {\n\tn := len(symbols)\n\tif n == 0 {\n\t\tn = len(addresses)\n\t}\n\n\tif n == 0 {\n\t\treturn nil, fmt.Errorf(\"%w: neither symbols nor addresses given\", errInvalidInput)\n\t}\n\n\tif symbols != nil && len(symbols) != n {\n\t\treturn nil, fmt.Errorf(\"%w: have %d symbols but want %d\", errInvalidInput, len(symbols), n)\n\t}\n\n\tif addresses != nil && len(addresses) != n {\n\t\treturn nil, fmt.Errorf(\"%w: have %d addresses but want %d\", errInvalidInput, len(addresses), n)\n\t}\n\n\tif offsets != nil && len(offsets) != n {\n\t\treturn nil, fmt.Errorf(\"%w: have %d offsets but want %d\", errInvalidInput, len(offsets), n)\n\t}\n\n\tresults := make([]uint64, 0, n)\n\tfor i := 0; i < n; i++ {\n\t\tvar sym string\n\t\tif symbols != nil {\n\t\t\tsym = symbols[i]\n\t\t}\n\n\t\tvar addr, off uint64\n\t\tif addresses != nil {\n\t\t\taddr = addresses[i]\n\t\t}\n\n\t\tif offsets != nil {\n\t\t\toff = offsets[i]\n\t\t}\n\n\t\tresult, err := ex.address(sym, addr, off)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tresults = append(results, result)\n\t}\n\n\treturn results, nil\n}\n\ntype uprobeMultiLink struct {\n\tRawLink\n}\n\nvar _ Link = (*uprobeMultiLink)(nil)\n\nfunc (kml *uprobeMultiLink) Update(_ *ebpf.Program) error {\n\treturn fmt.Errorf(\"update uprobe_multi: %w\", ErrNotSupported)\n}\n\nvar haveBPFLinkUprobeMulti = internal.NewFeatureTest(\"bpf_link_uprobe_multi\", func() error {\n\tprog, err := ebpf.NewProgram(&ebpf.ProgramSpec{\n\t\tName: \"probe_upm_link\",\n\t\tType: ebpf.Kprobe,\n\t\tInstructions: asm.Instructions{\n\t\t\tasm.Mov.Imm(asm.R0, 0),\n\t\t\tasm.Return(),\n\t\t},\n\t\tAttachType: ebpf.AttachTraceUprobeMulti,\n\t\tLicense:    \"MIT\",\n\t})\n\tif errors.Is(err, unix.E2BIG) {\n\t\t// Kernel doesn't support AttachType field.\n\t\treturn internal.ErrNotSupported\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer prog.Close()\n\n\t// We try to create uprobe multi link on '/' path which results in\n\t// error with -EBADF in case uprobe multi link is supported.\n\tfd, err := sys.LinkCreateUprobeMulti(&sys.LinkCreateUprobeMultiAttr{\n\t\tProgFd:     uint32(prog.FD()),\n\t\tAttachType: sys.BPF_TRACE_UPROBE_MULTI,\n\t\tPath:       sys.NewStringPointer(\"/\"),\n\t\tOffsets:    sys.NewPointer(unsafe.Pointer(&[]uint64{0})),\n\t\tCount:      1,\n\t})\n\tswitch {\n\tcase errors.Is(err, unix.EBADF):\n\t\treturn nil\n\tcase errors.Is(err, unix.EINVAL):\n\t\treturn internal.ErrNotSupported\n\tcase err != nil:\n\t\treturn err\n\t}\n\n\t// should not happen\n\tfd.Close()\n\treturn errors.New(\"successfully attached uprobe_multi to /, kernel bug?\")\n}, \"6.6\")\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/xdp.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\n// XDPAttachFlags represents how XDP program will be attached to interface.\ntype XDPAttachFlags uint32\n\nconst (\n\t// XDPGenericMode (SKB) links XDP BPF program for drivers which do\n\t// not yet support native XDP.\n\tXDPGenericMode XDPAttachFlags = 1 << (iota + 1)\n\t// XDPDriverMode links XDP BPF program into the driver’s receive path.\n\tXDPDriverMode\n\t// XDPOffloadMode offloads the entire XDP BPF program into hardware.\n\tXDPOffloadMode\n)\n\ntype XDPOptions struct {\n\t// Program must be an XDP BPF program.\n\tProgram *ebpf.Program\n\n\t// Interface is the interface index to attach program to.\n\tInterface int\n\n\t// Flags is one of XDPAttachFlags (optional).\n\t//\n\t// Only one XDP mode should be set, without flag defaults\n\t// to driver/generic mode (best effort).\n\tFlags XDPAttachFlags\n}\n\n// AttachXDP links an XDP BPF program to an XDP hook.\nfunc AttachXDP(opts XDPOptions) (Link, error) {\n\tif t := opts.Program.Type(); t != ebpf.XDP {\n\t\treturn nil, fmt.Errorf(\"invalid program type %s, expected XDP\", t)\n\t}\n\n\tif opts.Interface < 1 {\n\t\treturn nil, fmt.Errorf(\"invalid interface index: %d\", opts.Interface)\n\t}\n\n\trawLink, err := AttachRawLink(RawLinkOptions{\n\t\tProgram: opts.Program,\n\t\tAttach:  ebpf.AttachXDP,\n\t\tTarget:  opts.Interface,\n\t\tFlags:   uint32(opts.Flags),\n\t})\n\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to attach link: %w\", err)\n\t}\n\n\treturn &xdpLink{*rawLink}, nil\n}\n\ntype xdpLink struct {\n\tRawLink\n}\n\nfunc (xdp *xdpLink) Info() (*Info, error) {\n\tvar info sys.XDPLinkInfo\n\tif err := sys.ObjInfo(xdp.fd, &info); err != nil {\n\t\treturn nil, fmt.Errorf(\"xdp link info: %s\", err)\n\t}\n\textra := &XDPInfo{\n\t\tIfindex: info.Ifindex,\n\t}\n\n\treturn &Info{\n\t\tinfo.Type,\n\t\tinfo.Id,\n\t\tebpf.ProgramID(info.ProgId),\n\t\textra,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/linker.go",
    "content": "package ebpf\n\nimport (\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/fs\"\n\t\"math\"\n\t\"slices\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/kallsyms\"\n)\n\n// handles stores handle objects to avoid gc cleanup\ntype handles []*btf.Handle\n\nfunc (hs *handles) add(h *btf.Handle) (int, error) {\n\tif h == nil {\n\t\treturn 0, nil\n\t}\n\n\tif len(*hs) == math.MaxInt16 {\n\t\treturn 0, fmt.Errorf(\"can't add more than %d module FDs to fdArray\", math.MaxInt16)\n\t}\n\n\t*hs = append(*hs, h)\n\n\t// return length of slice so that indexes start at 1\n\treturn len(*hs), nil\n}\n\nfunc (hs handles) fdArray() []int32 {\n\t// first element of fda is reserved as no module can be indexed with 0\n\tfda := []int32{0}\n\tfor _, h := range hs {\n\t\tfda = append(fda, int32(h.FD()))\n\t}\n\n\treturn fda\n}\n\nfunc (hs *handles) Close() error {\n\tvar errs []error\n\tfor _, h := range *hs {\n\t\terrs = append(errs, h.Close())\n\t}\n\treturn errors.Join(errs...)\n}\n\n// splitSymbols splits insns into subsections delimited by Symbol Instructions.\n// insns cannot be empty and must start with a Symbol Instruction.\n//\n// The resulting map is indexed by Symbol name.\nfunc splitSymbols(insns asm.Instructions) (map[string]asm.Instructions, error) {\n\tif len(insns) == 0 {\n\t\treturn nil, errors.New(\"insns is empty\")\n\t}\n\n\tcurrentSym := insns[0].Symbol()\n\tif currentSym == \"\" {\n\t\treturn nil, errors.New(\"insns must start with a Symbol\")\n\t}\n\n\tstart := 0\n\tprogs := make(map[string]asm.Instructions)\n\tfor i, ins := range insns[1:] {\n\t\ti := i + 1\n\n\t\tsym := ins.Symbol()\n\t\tif sym == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// New symbol, flush the old one out.\n\t\tprogs[currentSym] = slices.Clone(insns[start:i])\n\n\t\tif progs[sym] != nil {\n\t\t\treturn nil, fmt.Errorf(\"insns contains duplicate Symbol %s\", sym)\n\t\t}\n\t\tcurrentSym = sym\n\t\tstart = i\n\t}\n\n\tif tail := insns[start:]; len(tail) > 0 {\n\t\tprogs[currentSym] = slices.Clone(tail)\n\t}\n\n\treturn progs, nil\n}\n\n// The linker is responsible for resolving bpf-to-bpf calls between programs\n// within an ELF. Each BPF program must be a self-contained binary blob,\n// so when an instruction in one ELF program section wants to jump to\n// a function in another, the linker needs to pull in the bytecode\n// (and BTF info) of the target function and concatenate the instruction\n// streams.\n//\n// Later on in the pipeline, all call sites are fixed up with relative jumps\n// within this newly-created instruction stream to then finally hand off to\n// the kernel with BPF_PROG_LOAD.\n//\n// Each function is denoted by an ELF symbol and the compiler takes care of\n// register setup before each jump instruction.\n\n// hasFunctionReferences returns true if insns contains one or more bpf2bpf\n// function references.\nfunc hasFunctionReferences(insns asm.Instructions) bool {\n\tfor _, i := range insns {\n\t\tif i.IsFunctionReference() {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// applyRelocations collects and applies any CO-RE relocations in insns.\n//\n// Passing a nil target will relocate against the running kernel. insns are\n// modified in place.\nfunc applyRelocations(insns asm.Instructions, targets []*btf.Spec, kmodName string, bo binary.ByteOrder, b *btf.Builder) error {\n\tvar relos []*btf.CORERelocation\n\tvar reloInsns []*asm.Instruction\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tif relo := btf.CORERelocationMetadata(iter.Ins); relo != nil {\n\t\t\trelos = append(relos, relo)\n\t\t\treloInsns = append(reloInsns, iter.Ins)\n\t\t}\n\t}\n\n\tif len(relos) == 0 {\n\t\treturn nil\n\t}\n\n\tif bo == nil {\n\t\tbo = internal.NativeEndian\n\t}\n\n\tif len(targets) == 0 {\n\t\tkernelTarget, err := btf.LoadKernelSpec()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"load kernel spec: %w\", err)\n\t\t}\n\t\ttargets = append(targets, kernelTarget)\n\n\t\tif kmodName != \"\" {\n\t\t\tkmodTarget, err := btf.LoadKernelModuleSpec(kmodName)\n\t\t\t// Ignore ErrNotExists to cater to kernels which have CONFIG_DEBUG_INFO_BTF_MODULES disabled.\n\t\t\tif err != nil && !errors.Is(err, fs.ErrNotExist) {\n\t\t\t\treturn fmt.Errorf(\"load kernel module spec: %w\", err)\n\t\t\t}\n\t\t\tif err == nil {\n\t\t\t\ttargets = append(targets, kmodTarget)\n\t\t\t}\n\t\t}\n\t}\n\n\tfixups, err := btf.CORERelocate(relos, targets, bo, b.Add)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor i, fixup := range fixups {\n\t\tif err := fixup.Apply(reloInsns[i]); err != nil {\n\t\t\treturn fmt.Errorf(\"fixup for %s: %w\", relos[i], err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// flattenPrograms resolves bpf-to-bpf calls for a set of programs.\n//\n// Links all programs in names by modifying their ProgramSpec in progs.\nfunc flattenPrograms(progs map[string]*ProgramSpec, names []string) {\n\t// Pre-calculate all function references.\n\trefs := make(map[*ProgramSpec][]string)\n\tfor _, prog := range progs {\n\t\trefs[prog] = prog.Instructions.FunctionReferences()\n\t}\n\n\t// Create a flattened instruction stream, but don't modify progs yet to\n\t// avoid linking multiple times.\n\tflattened := make([]asm.Instructions, 0, len(names))\n\tfor _, name := range names {\n\t\tflattened = append(flattened, flattenInstructions(name, progs, refs))\n\t}\n\n\t// Finally, assign the flattened instructions.\n\tfor i, name := range names {\n\t\tprogs[name].Instructions = flattened[i]\n\t}\n}\n\n// flattenInstructions resolves bpf-to-bpf calls for a single program.\n//\n// Flattens the instructions of prog by concatenating the instructions of all\n// direct and indirect dependencies.\n//\n// progs contains all referenceable programs, while refs contain the direct\n// dependencies of each program.\nfunc flattenInstructions(name string, progs map[string]*ProgramSpec, refs map[*ProgramSpec][]string) asm.Instructions {\n\tprog := progs[name]\n\tprogRefs := refs[prog]\n\n\tif len(progRefs) == 0 {\n\t\t// No references, nothing to do.\n\t\treturn prog.Instructions\n\t}\n\n\tinsns := make(asm.Instructions, len(prog.Instructions))\n\tcopy(insns, prog.Instructions)\n\n\t// Add all direct references of prog to the list of to be linked programs.\n\tpending := make([]string, len(progRefs))\n\tcopy(pending, progRefs)\n\n\t// All references for which we've appended instructions.\n\tlinked := make(map[string]bool)\n\n\t// Iterate all pending references. We can't use a range since pending is\n\t// modified in the body below.\n\tfor len(pending) > 0 {\n\t\tvar ref string\n\t\tref, pending = pending[0], pending[1:]\n\n\t\tif linked[ref] {\n\t\t\t// We've already linked this ref, don't append instructions again.\n\t\t\tcontinue\n\t\t}\n\n\t\tprogRef := progs[ref]\n\t\tif progRef == nil {\n\t\t\t// We don't have instructions that go with this reference. This\n\t\t\t// happens when calling extern functions.\n\t\t\tcontinue\n\t\t}\n\n\t\tinsns = append(insns, progRef.Instructions...)\n\t\tlinked[ref] = true\n\n\t\t// Make sure we link indirect references.\n\t\tpending = append(pending, refs[progRef]...)\n\t}\n\n\treturn insns\n}\n\n// fixupAndValidate is called by the ELF reader right before marshaling the\n// instruction stream. It performs last-minute adjustments to the program and\n// runs some sanity checks before sending it off to the kernel.\nfunc fixupAndValidate(insns asm.Instructions) error {\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tins := iter.Ins\n\n\t\t// Map load was tagged with a Reference, but does not contain a Map pointer.\n\t\tneedsMap := ins.Reference() != \"\" || ins.Metadata.Get(kconfigMetaKey{}) != nil\n\t\tif ins.IsLoadFromMap() && needsMap && ins.Map() == nil {\n\t\t\treturn fmt.Errorf(\"instruction %d: %w\", iter.Index, asm.ErrUnsatisfiedMapReference)\n\t\t}\n\n\t\tfixupProbeReadKernel(ins)\n\t}\n\n\treturn nil\n}\n\n// POISON_CALL_KFUNC_BASE in libbpf.\n// https://github.com/libbpf/libbpf/blob/2778cbce609aa1e2747a69349f7f46a2f94f0522/src/libbpf.c#L5767\nconst kfuncCallPoisonBase = 2002000000\n\n// fixupKfuncs loops over all instructions in search for kfunc calls.\n// If at least one is found, the current kernels BTF and module BTFis are searched to set Instruction.Constant\n// and Instruction.Offset to the correct values.\nfunc fixupKfuncs(insns asm.Instructions) (_ handles, err error) {\n\tcloseOnError := func(c io.Closer) {\n\t\tif err != nil {\n\t\t\tc.Close()\n\t\t}\n\t}\n\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tins := iter.Ins\n\t\tif metadata := ins.Metadata.Get(kfuncMetaKey{}); metadata != nil {\n\t\t\tgoto fixups\n\t\t}\n\t}\n\n\treturn nil, nil\n\nfixups:\n\t// only load the kernel spec if we found at least one kfunc call\n\tkernelSpec, err := btf.LoadKernelSpec()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfdArray := make(handles, 0)\n\tdefer closeOnError(&fdArray)\n\n\tfor {\n\t\tins := iter.Ins\n\n\t\tmetadata := ins.Metadata.Get(kfuncMetaKey{})\n\t\tif metadata == nil {\n\t\t\tif !iter.Next() {\n\t\t\t\t// break loop if this was the last instruction in the stream.\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// check meta, if no meta return err\n\t\tkfm, _ := metadata.(*kfuncMeta)\n\t\tif kfm == nil {\n\t\t\treturn nil, fmt.Errorf(\"kfuncMetaKey doesn't contain kfuncMeta\")\n\t\t}\n\n\t\ttarget := btf.Type((*btf.Func)(nil))\n\t\tspec, module, err := findTargetInKernel(kernelSpec, kfm.Func.Name, &target)\n\t\tif kfm.Binding == elf.STB_WEAK && errors.Is(err, btf.ErrNotFound) {\n\t\t\tif ins.IsKfuncCall() {\n\t\t\t\t// If the kfunc call is weak and not found, poison the call. Use a recognizable constant\n\t\t\t\t// to make it easier to debug. And set src to zero so the verifier doesn't complain\n\t\t\t\t// about the invalid imm/offset values before dead-code elimination.\n\t\t\t\tins.Constant = kfuncCallPoisonBase\n\t\t\t\tins.Src = 0\n\t\t\t} else if ins.OpCode.IsDWordLoad() {\n\t\t\t\t// If the kfunc DWordLoad is weak and not found, set its address to 0.\n\t\t\t\tins.Constant = 0\n\t\t\t\tins.Src = 0\n\t\t\t} else {\n\t\t\t\treturn nil, fmt.Errorf(\"only kfunc calls and dword loads may have kfunc metadata\")\n\t\t\t}\n\n\t\t\titer.Next()\n\t\t\tcontinue\n\t\t}\n\t\t// Error on non-weak kfunc not found.\n\t\tif errors.Is(err, btf.ErrNotFound) {\n\t\t\treturn nil, fmt.Errorf(\"kfunc %q: %w\", kfm.Func.Name, ErrNotSupported)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tidx, err := fdArray.add(module)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif err := btf.CheckTypeCompatibility(kfm.Func.Type, target.(*btf.Func).Type); err != nil {\n\t\t\treturn nil, &incompatibleKfuncError{kfm.Func.Name, err}\n\t\t}\n\n\t\tid, err := spec.TypeID(target)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tins.Constant = int64(id)\n\t\tins.Offset = int16(idx)\n\n\t\tif !iter.Next() {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn fdArray, nil\n}\n\ntype incompatibleKfuncError struct {\n\tname string\n\terr  error\n}\n\nfunc (ike *incompatibleKfuncError) Error() string {\n\treturn fmt.Sprintf(\"kfunc %q: %s\", ike.name, ike.err)\n}\n\n// fixupProbeReadKernel replaces calls to bpf_probe_read_{kernel,user}(_str)\n// with bpf_probe_read(_str) on kernels that don't support it yet.\nfunc fixupProbeReadKernel(ins *asm.Instruction) {\n\tif !ins.IsBuiltinCall() {\n\t\treturn\n\t}\n\n\t// Kernel supports bpf_probe_read_kernel, nothing to do.\n\tif haveProbeReadKernel() == nil {\n\t\treturn\n\t}\n\n\tswitch asm.BuiltinFunc(ins.Constant) {\n\tcase asm.FnProbeReadKernel, asm.FnProbeReadUser:\n\t\tins.Constant = int64(asm.FnProbeRead)\n\tcase asm.FnProbeReadKernelStr, asm.FnProbeReadUserStr:\n\t\tins.Constant = int64(asm.FnProbeReadStr)\n\t}\n}\n\n// resolveKconfigReferences creates and populates a .kconfig map if necessary.\n//\n// Returns a nil Map and no error if no references exist.\nfunc resolveKconfigReferences(insns asm.Instructions) (_ *Map, err error) {\n\tcloseOnError := func(c io.Closer) {\n\t\tif err != nil {\n\t\t\tc.Close()\n\t\t}\n\t}\n\n\tvar spec *MapSpec\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tmeta, _ := iter.Ins.Metadata.Get(kconfigMetaKey{}).(*kconfigMeta)\n\t\tif meta != nil {\n\t\t\tspec = meta.Map\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif spec == nil {\n\t\treturn nil, nil\n\t}\n\n\tcpy := spec.Copy()\n\tif err := resolveKconfig(cpy); err != nil {\n\t\treturn nil, err\n\t}\n\n\tkconfig, err := NewMap(cpy)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer closeOnError(kconfig)\n\n\t// Resolve all instructions which load from .kconfig map with actual map\n\t// and offset inside it.\n\titer = insns.Iterate()\n\tfor iter.Next() {\n\t\tmeta, _ := iter.Ins.Metadata.Get(kconfigMetaKey{}).(*kconfigMeta)\n\t\tif meta == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tif meta.Map != spec {\n\t\t\treturn nil, fmt.Errorf(\"instruction %d: reference to multiple .kconfig maps is not allowed\", iter.Index)\n\t\t}\n\n\t\tif err := iter.Ins.AssociateMap(kconfig); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"instruction %d: %w\", iter.Index, err)\n\t\t}\n\n\t\t// Encode a map read at the offset of the var in the datasec.\n\t\titer.Ins.Constant = int64(uint64(meta.Offset) << 32)\n\t\titer.Ins.Metadata.Set(kconfigMetaKey{}, nil)\n\t}\n\n\treturn kconfig, nil\n}\n\nfunc resolveKsymReferences(insns asm.Instructions) error {\n\tvar missing []string\n\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tins := iter.Ins\n\t\tmeta, _ := ins.Metadata.Get(ksymMetaKey{}).(*ksymMeta)\n\t\tif meta == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\taddr, err := kallsyms.Address(meta.Name)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"resolve ksym %s: %w\", meta.Name, err)\n\t\t}\n\t\tif addr != 0 {\n\t\t\tins.Constant = int64(addr)\n\t\t\tcontinue\n\t\t}\n\n\t\tif meta.Binding == elf.STB_WEAK {\n\t\t\t// A weak ksym variable in eBPF C means its resolution is optional.\n\t\t\t// Set a zero constant explicitly for clarity.\n\t\t\tins.Constant = 0\n\t\t\tcontinue\n\t\t}\n\n\t\tif !slices.Contains(missing, meta.Name) {\n\t\t\tmissing = append(missing, meta.Name)\n\t\t}\n\t}\n\n\tif len(missing) > 0 {\n\t\treturn fmt.Errorf(\"kernel is missing symbol: %s\", strings.Join(missing, \",\"))\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/map.go",
    "content": "package ebpf\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/rand\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"slices\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/sysenc\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// Errors returned by Map and MapIterator methods.\nvar (\n\tErrKeyNotExist      = errors.New(\"key does not exist\")\n\tErrKeyExist         = errors.New(\"key already exists\")\n\tErrIterationAborted = errors.New(\"iteration aborted\")\n\tErrMapIncompatible  = errors.New(\"map spec is incompatible with existing map\")\n\terrMapNoBTFValue    = errors.New(\"map spec does not contain a BTF Value\")\n\n\t// pre-allocating these errors here since they may get called in hot code paths\n\t// and cause unnecessary memory allocations\n\terrMapLookupKeyNotExist = fmt.Errorf(\"lookup: %w\", sysErrKeyNotExist)\n)\n\n// MapOptions control loading a map into the kernel.\ntype MapOptions struct {\n\t// The base path to pin maps in if requested via PinByName.\n\t// Existing maps will be re-used if they are compatible, otherwise an\n\t// error is returned.\n\tPinPath        string\n\tLoadPinOptions LoadPinOptions\n}\n\n// MapID represents the unique ID of an eBPF map\ntype MapID uint32\n\n// MapSpec defines a Map.\ntype MapSpec struct {\n\t// Name is passed to the kernel as a debug aid. Must only contain\n\t// alpha numeric and '_' characters.\n\tName       string\n\tType       MapType\n\tKeySize    uint32\n\tValueSize  uint32\n\tMaxEntries uint32\n\n\t// Flags is passed to the kernel and specifies additional map\n\t// creation attributes.\n\tFlags uint32\n\n\t// Automatically pin and load a map from MapOptions.PinPath.\n\t// Generates an error if an existing pinned map is incompatible with the MapSpec.\n\tPinning PinType\n\n\t// Specify numa node during map creation\n\t// (effective only if sys.BPF_F_NUMA_NODE flag is set,\n\t// which can be imported from golang.org/x/sys/unix)\n\tNumaNode uint32\n\n\t// The initial contents of the map. May be nil.\n\tContents []MapKV\n\n\t// InnerMap is used as a template for ArrayOfMaps and HashOfMaps\n\tInnerMap *MapSpec\n\n\t// Extra trailing bytes found in the ELF map definition when using structs\n\t// larger than libbpf's bpf_map_def. nil if no trailing bytes were present.\n\t// Must be nil or empty before instantiating the MapSpec into a Map.\n\tExtra *bytes.Reader\n\n\t// The key and value type of this map. May be nil.\n\tKey, Value btf.Type\n}\n\nfunc (ms *MapSpec) String() string {\n\treturn fmt.Sprintf(\"%s(keySize=%d, valueSize=%d, maxEntries=%d, flags=%d)\", ms.Type, ms.KeySize, ms.ValueSize, ms.MaxEntries, ms.Flags)\n}\n\n// Copy returns a copy of the spec.\n//\n// MapSpec.Contents is a shallow copy.\nfunc (ms *MapSpec) Copy() *MapSpec {\n\tif ms == nil {\n\t\treturn nil\n\t}\n\n\tcpy := *ms\n\tcpy.Contents = slices.Clone(cpy.Contents)\n\tcpy.Key = btf.Copy(cpy.Key)\n\tcpy.Value = btf.Copy(cpy.Value)\n\n\tif cpy.InnerMap == ms {\n\t\tcpy.InnerMap = &cpy\n\t} else {\n\t\tcpy.InnerMap = ms.InnerMap.Copy()\n\t}\n\n\tif cpy.Extra != nil {\n\t\textra := *cpy.Extra\n\t\tcpy.Extra = &extra\n\t}\n\n\treturn &cpy\n}\n\n// fixupMagicFields fills fields of MapSpec which are usually\n// left empty in ELF or which depend on runtime information.\n//\n// The method doesn't modify Spec, instead returning a copy.\n// The copy is only performed if fixups are necessary, so callers mustn't mutate\n// the returned spec.\nfunc (spec *MapSpec) fixupMagicFields() (*MapSpec, error) {\n\tswitch spec.Type {\n\tcase ArrayOfMaps, HashOfMaps:\n\t\tif spec.ValueSize != 0 && spec.ValueSize != 4 {\n\t\t\treturn nil, errors.New(\"ValueSize must be zero or four for map of map\")\n\t\t}\n\n\t\tspec = spec.Copy()\n\t\tspec.ValueSize = 4\n\n\tcase PerfEventArray:\n\t\tif spec.KeySize != 0 && spec.KeySize != 4 {\n\t\t\treturn nil, errors.New(\"KeySize must be zero or four for perf event array\")\n\t\t}\n\n\t\tif spec.ValueSize != 0 && spec.ValueSize != 4 {\n\t\t\treturn nil, errors.New(\"ValueSize must be zero or four for perf event array\")\n\t\t}\n\n\t\tspec = spec.Copy()\n\t\tspec.KeySize = 4\n\t\tspec.ValueSize = 4\n\n\t\tn, err := PossibleCPU()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"fixup perf event array: %w\", err)\n\t\t}\n\n\t\tif n := uint32(n); spec.MaxEntries == 0 || spec.MaxEntries > n {\n\t\t\t// MaxEntries should be zero most of the time, but there is code\n\t\t\t// out there which hardcodes large constants. Clamp the number\n\t\t\t// of entries to the number of CPUs at most. Allow creating maps with\n\t\t\t// less than n items since some kernel selftests relied on this\n\t\t\t// behaviour in the past.\n\t\t\tspec.MaxEntries = n\n\t\t}\n\n\tcase CPUMap:\n\t\tn, err := PossibleCPU()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"fixup cpu map: %w\", err)\n\t\t}\n\n\t\tif n := uint32(n); spec.MaxEntries == 0 || spec.MaxEntries > n {\n\t\t\t// Perform clamping similar to PerfEventArray.\n\t\t\tspec.MaxEntries = n\n\t\t}\n\t}\n\n\treturn spec, nil\n}\n\n// dataSection returns the contents and BTF Datasec descriptor of the spec.\nfunc (ms *MapSpec) dataSection() ([]byte, *btf.Datasec, error) {\n\tif ms.Value == nil {\n\t\treturn nil, nil, errMapNoBTFValue\n\t}\n\n\tds, ok := ms.Value.(*btf.Datasec)\n\tif !ok {\n\t\treturn nil, nil, fmt.Errorf(\"map value BTF is a %T, not a *btf.Datasec\", ms.Value)\n\t}\n\n\tif n := len(ms.Contents); n != 1 {\n\t\treturn nil, nil, fmt.Errorf(\"expected one key, found %d\", n)\n\t}\n\n\tkv := ms.Contents[0]\n\tvalue, ok := kv.Value.([]byte)\n\tif !ok {\n\t\treturn nil, nil, fmt.Errorf(\"value at first map key is %T, not []byte\", kv.Value)\n\t}\n\n\treturn value, ds, nil\n}\n\nfunc (ms *MapSpec) readOnly() bool {\n\treturn (ms.Flags & sys.BPF_F_RDONLY_PROG) > 0\n}\n\nfunc (ms *MapSpec) writeOnly() bool {\n\treturn (ms.Flags & sys.BPF_F_WRONLY_PROG) > 0\n}\n\n// MapKV is used to initialize the contents of a Map.\ntype MapKV struct {\n\tKey   interface{}\n\tValue interface{}\n}\n\n// Compatible returns nil if an existing map may be used instead of creating\n// one from the spec.\n//\n// Returns an error wrapping [ErrMapIncompatible] otherwise.\nfunc (ms *MapSpec) Compatible(m *Map) error {\n\tms, err := ms.fixupMagicFields()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdiffs := []string{}\n\tif m.typ != ms.Type {\n\t\tdiffs = append(diffs, fmt.Sprintf(\"Type: %s changed to %s\", m.typ, ms.Type))\n\t}\n\tif m.keySize != ms.KeySize {\n\t\tdiffs = append(diffs, fmt.Sprintf(\"KeySize: %d changed to %d\", m.keySize, ms.KeySize))\n\t}\n\tif m.valueSize != ms.ValueSize {\n\t\tdiffs = append(diffs, fmt.Sprintf(\"ValueSize: %d changed to %d\", m.valueSize, ms.ValueSize))\n\t}\n\tif m.maxEntries != ms.MaxEntries {\n\t\tdiffs = append(diffs, fmt.Sprintf(\"MaxEntries: %d changed to %d\", m.maxEntries, ms.MaxEntries))\n\t}\n\n\t// BPF_F_RDONLY_PROG is set unconditionally for devmaps. Explicitly allow this\n\t// mismatch.\n\tif !((ms.Type == DevMap || ms.Type == DevMapHash) && m.flags^ms.Flags == sys.BPF_F_RDONLY_PROG) &&\n\t\tm.flags != ms.Flags {\n\t\tdiffs = append(diffs, fmt.Sprintf(\"Flags: %d changed to %d\", m.flags, ms.Flags))\n\t}\n\n\tif len(diffs) == 0 {\n\t\treturn nil\n\t}\n\n\treturn fmt.Errorf(\"%s: %w\", strings.Join(diffs, \", \"), ErrMapIncompatible)\n}\n\n// Map represents a Map file descriptor.\n//\n// It is not safe to close a map which is used by other goroutines.\n//\n// Methods which take interface{} arguments by default encode\n// them using binary.Read/Write in the machine's native endianness.\n//\n// Implement encoding.BinaryMarshaler or encoding.BinaryUnmarshaler\n// if you require custom encoding.\ntype Map struct {\n\tname       string\n\tfd         *sys.FD\n\ttyp        MapType\n\tkeySize    uint32\n\tvalueSize  uint32\n\tmaxEntries uint32\n\tflags      uint32\n\tpinnedPath string\n\t// Per CPU maps return values larger than the size in the spec\n\tfullValueSize int\n\n\tmemory *Memory\n}\n\n// NewMapFromFD creates a map from a raw fd.\n//\n// You should not use fd after calling this function.\nfunc NewMapFromFD(fd int) (*Map, error) {\n\tf, err := sys.NewFD(fd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn newMapFromFD(f)\n}\n\nfunc newMapFromFD(fd *sys.FD) (*Map, error) {\n\tinfo, err := newMapInfoFromFd(fd)\n\tif err != nil {\n\t\tfd.Close()\n\t\treturn nil, fmt.Errorf(\"get map info: %w\", err)\n\t}\n\n\treturn newMap(fd, info.Name, info.Type, info.KeySize, info.ValueSize, info.MaxEntries, info.Flags)\n}\n\n// NewMap creates a new Map.\n//\n// It's equivalent to calling NewMapWithOptions with default options.\nfunc NewMap(spec *MapSpec) (*Map, error) {\n\treturn NewMapWithOptions(spec, MapOptions{})\n}\n\n// NewMapWithOptions creates a new Map.\n//\n// Creating a map for the first time will perform feature detection\n// by creating small, temporary maps.\n//\n// The caller is responsible for ensuring the process' rlimit is set\n// sufficiently high for locking memory during map creation. This can be done\n// by calling rlimit.RemoveMemlock() prior to calling NewMapWithOptions.\n//\n// May return an error wrapping ErrMapIncompatible.\nfunc NewMapWithOptions(spec *MapSpec, opts MapOptions) (*Map, error) {\n\tm, err := newMapWithOptions(spec, opts)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating map: %w\", err)\n\t}\n\n\tif err := m.finalize(spec); err != nil {\n\t\tm.Close()\n\t\treturn nil, fmt.Errorf(\"populating map: %w\", err)\n\t}\n\n\treturn m, nil\n}\n\nfunc newMapWithOptions(spec *MapSpec, opts MapOptions) (_ *Map, err error) {\n\tcloseOnError := func(c io.Closer) {\n\t\tif err != nil {\n\t\t\tc.Close()\n\t\t}\n\t}\n\n\tswitch spec.Pinning {\n\tcase PinByName:\n\t\tif spec.Name == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"pin by name: missing Name\")\n\t\t}\n\n\t\tif opts.PinPath == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"pin by name: missing MapOptions.PinPath\")\n\t\t}\n\n\t\tpath := filepath.Join(opts.PinPath, spec.Name)\n\t\tm, err := LoadPinnedMap(path, &opts.LoadPinOptions)\n\t\tif errors.Is(err, unix.ENOENT) {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"load pinned map: %w\", err)\n\t\t}\n\t\tdefer closeOnError(m)\n\n\t\tif err := spec.Compatible(m); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"use pinned map %s: %w\", spec.Name, err)\n\t\t}\n\n\t\treturn m, nil\n\n\tcase PinNone:\n\t\t// Nothing to do here\n\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"pin type %d: %w\", int(spec.Pinning), ErrNotSupported)\n\t}\n\n\tvar innerFd *sys.FD\n\tif spec.Type == ArrayOfMaps || spec.Type == HashOfMaps {\n\t\tif spec.InnerMap == nil {\n\t\t\treturn nil, fmt.Errorf(\"%s requires InnerMap\", spec.Type)\n\t\t}\n\n\t\tif spec.InnerMap.Pinning != PinNone {\n\t\t\treturn nil, errors.New(\"inner maps cannot be pinned\")\n\t\t}\n\n\t\ttemplate, err := spec.InnerMap.createMap(nil)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"inner map: %w\", err)\n\t\t}\n\t\tdefer template.Close()\n\n\t\t// Intentionally skip populating and freezing (finalizing)\n\t\t// the inner map template since it will be removed shortly.\n\n\t\tinnerFd = template.fd\n\t}\n\n\tm, err := spec.createMap(innerFd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer closeOnError(m)\n\n\tif spec.Pinning == PinByName {\n\t\tpath := filepath.Join(opts.PinPath, spec.Name)\n\t\tif err := m.Pin(path); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"pin map to %s: %w\", path, err)\n\t\t}\n\t}\n\n\treturn m, nil\n}\n\n// Memory returns a memory-mapped region for the Map. The Map must have been\n// created with the BPF_F_MMAPABLE flag. Repeated calls to Memory return the\n// same mapping. Callers are responsible for coordinating access to Memory.\nfunc (m *Map) Memory() (*Memory, error) {\n\tif m.memory != nil {\n\t\treturn m.memory, nil\n\t}\n\n\tif m.flags&sys.BPF_F_MMAPABLE == 0 {\n\t\treturn nil, fmt.Errorf(\"Map was not created with the BPF_F_MMAPABLE flag: %w\", ErrNotSupported)\n\t}\n\n\tsize, err := m.memorySize()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tmm, err := newMemory(m.FD(), size)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating new Memory: %w\", err)\n\t}\n\n\tm.memory = mm\n\n\treturn mm, nil\n}\n\nfunc (m *Map) memorySize() (int, error) {\n\tswitch m.Type() {\n\tcase Array:\n\t\t// In Arrays, values are always laid out on 8-byte boundaries regardless of\n\t\t// architecture. Multiply by MaxEntries and align the result to the host's\n\t\t// page size.\n\t\tsize := int(internal.Align(m.ValueSize(), 8) * m.MaxEntries())\n\t\tsize = internal.Align(size, os.Getpagesize())\n\t\treturn size, nil\n\tcase Arena:\n\t\t// For Arenas, MaxEntries denotes the maximum number of pages available to\n\t\t// the arena.\n\t\treturn int(m.MaxEntries()) * os.Getpagesize(), nil\n\t}\n\n\treturn 0, fmt.Errorf(\"determine memory size of map type %s: %w\", m.Type(), ErrNotSupported)\n}\n\n// createMap validates the spec's properties and creates the map in the kernel\n// using the given opts. It does not populate or freeze the map.\nfunc (spec *MapSpec) createMap(inner *sys.FD) (_ *Map, err error) {\n\tcloseOnError := func(closer io.Closer) {\n\t\tif err != nil {\n\t\t\tcloser.Close()\n\t\t}\n\t}\n\n\t// Kernels 4.13 through 5.4 used a struct bpf_map_def that contained\n\t// additional 'inner_map_idx' and later 'numa_node' fields.\n\t// In order to support loading these definitions, tolerate the presence of\n\t// extra bytes, but require them to be zeroes.\n\tif spec.Extra != nil {\n\t\tif _, err := io.Copy(internal.DiscardZeroes{}, spec.Extra); err != nil {\n\t\t\treturn nil, errors.New(\"extra contains unhandled non-zero bytes, drain before creating map\")\n\t\t}\n\t}\n\n\tspec, err = spec.fixupMagicFields()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tattr := sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(spec.Type),\n\t\tKeySize:    spec.KeySize,\n\t\tValueSize:  spec.ValueSize,\n\t\tMaxEntries: spec.MaxEntries,\n\t\tMapFlags:   spec.Flags,\n\t\tNumaNode:   spec.NumaNode,\n\t}\n\n\tif inner != nil {\n\t\tattr.InnerMapFd = inner.Uint()\n\t}\n\n\tif haveObjName() == nil {\n\t\tattr.MapName = sys.NewObjName(spec.Name)\n\t}\n\n\tif spec.Key != nil || spec.Value != nil {\n\t\thandle, keyTypeID, valueTypeID, err := btf.MarshalMapKV(spec.Key, spec.Value)\n\t\tif err != nil && !errors.Is(err, btf.ErrNotSupported) {\n\t\t\treturn nil, fmt.Errorf(\"load BTF: %w\", err)\n\t\t}\n\n\t\tif handle != nil {\n\t\t\tdefer handle.Close()\n\n\t\t\t// Use BTF k/v during map creation.\n\t\t\tattr.BtfFd = uint32(handle.FD())\n\t\t\tattr.BtfKeyTypeId = keyTypeID\n\t\t\tattr.BtfValueTypeId = valueTypeID\n\t\t}\n\t}\n\n\tfd, err := sys.MapCreate(&attr)\n\n\t// Some map types don't support BTF k/v in earlier kernel versions.\n\t// Remove BTF metadata and retry map creation.\n\tif (errors.Is(err, sys.ENOTSUPP) || errors.Is(err, unix.EINVAL)) && attr.BtfFd != 0 {\n\t\tattr.BtfFd, attr.BtfKeyTypeId, attr.BtfValueTypeId = 0, 0, 0\n\t\tfd, err = sys.MapCreate(&attr)\n\t}\n\tif err != nil {\n\t\treturn nil, handleMapCreateError(attr, spec, err)\n\t}\n\n\tdefer closeOnError(fd)\n\tm, err := newMap(fd, spec.Name, spec.Type, spec.KeySize, spec.ValueSize, spec.MaxEntries, spec.Flags)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"map create: %w\", err)\n\t}\n\treturn m, nil\n}\n\nfunc handleMapCreateError(attr sys.MapCreateAttr, spec *MapSpec, err error) error {\n\tif errors.Is(err, unix.EPERM) {\n\t\treturn fmt.Errorf(\"map create: %w (MEMLOCK may be too low, consider rlimit.RemoveMemlock)\", err)\n\t}\n\tif errors.Is(err, unix.EINVAL) && spec.MaxEntries == 0 {\n\t\treturn fmt.Errorf(\"map create: %w (MaxEntries may be incorrectly set to zero)\", err)\n\t}\n\tif errors.Is(err, unix.EINVAL) && spec.Type == UnspecifiedMap {\n\t\treturn fmt.Errorf(\"map create: cannot use type %s\", UnspecifiedMap)\n\t}\n\tif errors.Is(err, unix.EINVAL) && spec.Flags&sys.BPF_F_NO_PREALLOC > 0 {\n\t\treturn fmt.Errorf(\"map create: %w (noPrealloc flag may be incompatible with map type %s)\", err, spec.Type)\n\t}\n\n\tif spec.Type.canStoreMap() {\n\t\tif haveFeatErr := haveNestedMaps(); haveFeatErr != nil {\n\t\t\treturn fmt.Errorf(\"map create: %w\", haveFeatErr)\n\t\t}\n\t}\n\n\tif spec.readOnly() || spec.writeOnly() {\n\t\tif haveFeatErr := haveMapMutabilityModifiers(); haveFeatErr != nil {\n\t\t\treturn fmt.Errorf(\"map create: %w\", haveFeatErr)\n\t\t}\n\t}\n\tif spec.Flags&sys.BPF_F_MMAPABLE > 0 {\n\t\tif haveFeatErr := haveMmapableMaps(); haveFeatErr != nil {\n\t\t\treturn fmt.Errorf(\"map create: %w\", haveFeatErr)\n\t\t}\n\t}\n\tif spec.Flags&sys.BPF_F_INNER_MAP > 0 {\n\t\tif haveFeatErr := haveInnerMaps(); haveFeatErr != nil {\n\t\t\treturn fmt.Errorf(\"map create: %w\", haveFeatErr)\n\t\t}\n\t}\n\tif spec.Flags&sys.BPF_F_NO_PREALLOC > 0 {\n\t\tif haveFeatErr := haveNoPreallocMaps(); haveFeatErr != nil {\n\t\t\treturn fmt.Errorf(\"map create: %w\", haveFeatErr)\n\t\t}\n\t}\n\t// BPF_MAP_TYPE_RINGBUF's max_entries must be a power-of-2 multiple of kernel's page size.\n\tif errors.Is(err, unix.EINVAL) &&\n\t\t(attr.MapType == sys.BPF_MAP_TYPE_RINGBUF || attr.MapType == sys.BPF_MAP_TYPE_USER_RINGBUF) {\n\t\tpageSize := uint32(os.Getpagesize())\n\t\tmaxEntries := attr.MaxEntries\n\t\tif maxEntries%pageSize != 0 || !internal.IsPow(maxEntries) {\n\t\t\treturn fmt.Errorf(\"map create: %w (ring map size %d not a multiple of page size %d)\", err, maxEntries, pageSize)\n\t\t}\n\t}\n\n\treturn fmt.Errorf(\"map create: %w\", err)\n}\n\n// newMap allocates and returns a new Map structure.\n// Sets the fullValueSize on per-CPU maps.\nfunc newMap(fd *sys.FD, name string, typ MapType, keySize, valueSize, maxEntries, flags uint32) (*Map, error) {\n\tm := &Map{\n\t\tname,\n\t\tfd,\n\t\ttyp,\n\t\tkeySize,\n\t\tvalueSize,\n\t\tmaxEntries,\n\t\tflags,\n\t\t\"\",\n\t\tint(valueSize),\n\t\tnil,\n\t}\n\n\tif !typ.hasPerCPUValue() {\n\t\treturn m, nil\n\t}\n\n\tpossibleCPUs, err := PossibleCPU()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tm.fullValueSize = int(internal.Align(valueSize, 8)) * possibleCPUs\n\treturn m, nil\n}\n\nfunc (m *Map) String() string {\n\tif m.name != \"\" {\n\t\treturn fmt.Sprintf(\"%s(%s)#%v\", m.typ, m.name, m.fd)\n\t}\n\treturn fmt.Sprintf(\"%s#%v\", m.typ, m.fd)\n}\n\n// Type returns the underlying type of the map.\nfunc (m *Map) Type() MapType {\n\treturn m.typ\n}\n\n// KeySize returns the size of the map key in bytes.\nfunc (m *Map) KeySize() uint32 {\n\treturn m.keySize\n}\n\n// ValueSize returns the size of the map value in bytes.\nfunc (m *Map) ValueSize() uint32 {\n\treturn m.valueSize\n}\n\n// MaxEntries returns the maximum number of elements the map can hold.\nfunc (m *Map) MaxEntries() uint32 {\n\treturn m.maxEntries\n}\n\n// Flags returns the flags of the map.\nfunc (m *Map) Flags() uint32 {\n\treturn m.flags\n}\n\n// Info returns metadata about the map. This was first introduced in Linux 4.5,\n// but newer kernels support more MapInfo fields with the introduction of more\n// features. See [MapInfo] and its methods for more details.\n//\n// Returns an error wrapping ErrNotSupported if the kernel supports neither\n// BPF_OBJ_GET_INFO_BY_FD nor reading map information from /proc/self/fdinfo.\nfunc (m *Map) Info() (*MapInfo, error) {\n\treturn newMapInfoFromFd(m.fd)\n}\n\n// Handle returns a reference to the Map's type information in the kernel.\n//\n// Returns ErrNotSupported if the kernel has no BTF support, or if there is no\n// BTF associated with the Map.\nfunc (m *Map) Handle() (*btf.Handle, error) {\n\tinfo, err := m.Info()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tid, ok := info.BTFID()\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"map %s: retrieve BTF ID: %w\", m, ErrNotSupported)\n\t}\n\n\treturn btf.NewHandleFromID(id)\n}\n\n// MapLookupFlags controls the behaviour of the map lookup calls.\ntype MapLookupFlags uint64\n\n// LookupLock look up the value of a spin-locked map.\nconst LookupLock MapLookupFlags = sys.BPF_F_LOCK\n\n// Lookup retrieves a value from a Map.\n//\n// Calls Close() on valueOut if it is of type **Map or **Program,\n// and *valueOut is not nil.\n//\n// Returns an error if the key doesn't exist, see ErrKeyNotExist.\nfunc (m *Map) Lookup(key, valueOut interface{}) error {\n\treturn m.LookupWithFlags(key, valueOut, 0)\n}\n\n// LookupWithFlags retrieves a value from a Map with flags.\n//\n// Passing LookupLock flag will look up the value of a spin-locked\n// map without returning the lock. This must be specified if the\n// elements contain a spinlock.\n//\n// Calls Close() on valueOut if it is of type **Map or **Program,\n// and *valueOut is not nil.\n//\n// Returns an error if the key doesn't exist, see ErrKeyNotExist.\nfunc (m *Map) LookupWithFlags(key, valueOut interface{}, flags MapLookupFlags) error {\n\tif m.typ.hasPerCPUValue() {\n\t\treturn m.lookupPerCPU(key, valueOut, flags)\n\t}\n\n\tvalueBytes := makeMapSyscallOutput(valueOut, m.fullValueSize)\n\tif err := m.lookup(key, valueBytes.Pointer(), flags); err != nil {\n\t\treturn err\n\t}\n\n\treturn m.unmarshalValue(valueOut, valueBytes)\n}\n\n// LookupAndDelete retrieves and deletes a value from a Map.\n//\n// Returns ErrKeyNotExist if the key doesn't exist.\nfunc (m *Map) LookupAndDelete(key, valueOut interface{}) error {\n\treturn m.LookupAndDeleteWithFlags(key, valueOut, 0)\n}\n\n// LookupAndDeleteWithFlags retrieves and deletes a value from a Map.\n//\n// Passing LookupLock flag will look up and delete the value of a spin-locked\n// map without returning the lock. This must be specified if the elements\n// contain a spinlock.\n//\n// Returns ErrKeyNotExist if the key doesn't exist.\nfunc (m *Map) LookupAndDeleteWithFlags(key, valueOut interface{}, flags MapLookupFlags) error {\n\tif m.typ.hasPerCPUValue() {\n\t\treturn m.lookupAndDeletePerCPU(key, valueOut, flags)\n\t}\n\n\tvalueBytes := makeMapSyscallOutput(valueOut, m.fullValueSize)\n\tif err := m.lookupAndDelete(key, valueBytes.Pointer(), flags); err != nil {\n\t\treturn err\n\t}\n\treturn m.unmarshalValue(valueOut, valueBytes)\n}\n\n// LookupBytes gets a value from Map.\n//\n// Returns a nil value if a key doesn't exist.\nfunc (m *Map) LookupBytes(key interface{}) ([]byte, error) {\n\tvalueBytes := make([]byte, m.fullValueSize)\n\tvaluePtr := sys.NewSlicePointer(valueBytes)\n\n\terr := m.lookup(key, valuePtr, 0)\n\tif errors.Is(err, ErrKeyNotExist) {\n\t\treturn nil, nil\n\t}\n\n\treturn valueBytes, err\n}\n\nfunc (m *Map) lookupPerCPU(key, valueOut any, flags MapLookupFlags) error {\n\tslice, err := ensurePerCPUSlice(valueOut)\n\tif err != nil {\n\t\treturn err\n\t}\n\tvalueBytes := make([]byte, m.fullValueSize)\n\tif err := m.lookup(key, sys.NewSlicePointer(valueBytes), flags); err != nil {\n\t\treturn err\n\t}\n\treturn unmarshalPerCPUValue(slice, int(m.valueSize), valueBytes)\n}\n\nfunc (m *Map) lookup(key interface{}, valueOut sys.Pointer, flags MapLookupFlags) error {\n\tkeyPtr, err := m.marshalKey(key)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"can't marshal key: %w\", err)\n\t}\n\n\tattr := sys.MapLookupElemAttr{\n\t\tMapFd: m.fd.Uint(),\n\t\tKey:   keyPtr,\n\t\tValue: valueOut,\n\t\tFlags: uint64(flags),\n\t}\n\n\tif err = sys.MapLookupElem(&attr); err != nil {\n\t\tif errors.Is(err, unix.ENOENT) {\n\t\t\treturn errMapLookupKeyNotExist\n\t\t}\n\t\treturn fmt.Errorf(\"lookup: %w\", wrapMapError(err))\n\t}\n\treturn nil\n}\n\nfunc (m *Map) lookupAndDeletePerCPU(key, valueOut any, flags MapLookupFlags) error {\n\tslice, err := ensurePerCPUSlice(valueOut)\n\tif err != nil {\n\t\treturn err\n\t}\n\tvalueBytes := make([]byte, m.fullValueSize)\n\tif err := m.lookupAndDelete(key, sys.NewSlicePointer(valueBytes), flags); err != nil {\n\t\treturn err\n\t}\n\treturn unmarshalPerCPUValue(slice, int(m.valueSize), valueBytes)\n}\n\n// ensurePerCPUSlice allocates a slice for a per-CPU value if necessary.\nfunc ensurePerCPUSlice(sliceOrPtr any) (any, error) {\n\tsliceOrPtrType := reflect.TypeOf(sliceOrPtr)\n\tif sliceOrPtrType.Kind() == reflect.Slice {\n\t\t// The target is a slice, the caller is responsible for ensuring that\n\t\t// size is correct.\n\t\treturn sliceOrPtr, nil\n\t}\n\n\tslicePtrType := sliceOrPtrType\n\tif slicePtrType.Kind() != reflect.Ptr || slicePtrType.Elem().Kind() != reflect.Slice {\n\t\treturn nil, fmt.Errorf(\"per-cpu value requires a slice or a pointer to slice\")\n\t}\n\n\tpossibleCPUs, err := PossibleCPU()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tsliceType := slicePtrType.Elem()\n\tslice := reflect.MakeSlice(sliceType, possibleCPUs, possibleCPUs)\n\n\tsliceElemType := sliceType.Elem()\n\tsliceElemIsPointer := sliceElemType.Kind() == reflect.Ptr\n\treflect.ValueOf(sliceOrPtr).Elem().Set(slice)\n\tif !sliceElemIsPointer {\n\t\treturn slice.Interface(), nil\n\t}\n\tsliceElemType = sliceElemType.Elem()\n\n\tfor i := 0; i < possibleCPUs; i++ {\n\t\tnewElem := reflect.New(sliceElemType)\n\t\tslice.Index(i).Set(newElem)\n\t}\n\n\treturn slice.Interface(), nil\n}\n\nfunc (m *Map) lookupAndDelete(key any, valuePtr sys.Pointer, flags MapLookupFlags) error {\n\tkeyPtr, err := m.marshalKey(key)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"can't marshal key: %w\", err)\n\t}\n\n\tattr := sys.MapLookupAndDeleteElemAttr{\n\t\tMapFd: m.fd.Uint(),\n\t\tKey:   keyPtr,\n\t\tValue: valuePtr,\n\t\tFlags: uint64(flags),\n\t}\n\n\tif err := sys.MapLookupAndDeleteElem(&attr); err != nil {\n\t\treturn fmt.Errorf(\"lookup and delete: %w\", wrapMapError(err))\n\t}\n\n\treturn nil\n}\n\n// MapUpdateFlags controls the behaviour of the Map.Update call.\n//\n// The exact semantics depend on the specific MapType.\ntype MapUpdateFlags uint64\n\nconst (\n\t// UpdateAny creates a new element or update an existing one.\n\tUpdateAny MapUpdateFlags = iota\n\t// UpdateNoExist creates a new element.\n\tUpdateNoExist MapUpdateFlags = 1 << (iota - 1)\n\t// UpdateExist updates an existing element.\n\tUpdateExist\n\t// UpdateLock updates elements under bpf_spin_lock.\n\tUpdateLock\n)\n\n// Put replaces or creates a value in map.\n//\n// It is equivalent to calling Update with UpdateAny.\nfunc (m *Map) Put(key, value interface{}) error {\n\treturn m.Update(key, value, UpdateAny)\n}\n\n// Update changes the value of a key.\nfunc (m *Map) Update(key, value any, flags MapUpdateFlags) error {\n\tif m.typ.hasPerCPUValue() {\n\t\treturn m.updatePerCPU(key, value, flags)\n\t}\n\n\tvaluePtr, err := m.marshalValue(value)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"marshal value: %w\", err)\n\t}\n\n\treturn m.update(key, valuePtr, flags)\n}\n\nfunc (m *Map) updatePerCPU(key, value any, flags MapUpdateFlags) error {\n\tvaluePtr, err := marshalPerCPUValue(value, int(m.valueSize))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"marshal value: %w\", err)\n\t}\n\n\treturn m.update(key, valuePtr, flags)\n}\n\nfunc (m *Map) update(key any, valuePtr sys.Pointer, flags MapUpdateFlags) error {\n\tkeyPtr, err := m.marshalKey(key)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"marshal key: %w\", err)\n\t}\n\n\tattr := sys.MapUpdateElemAttr{\n\t\tMapFd: m.fd.Uint(),\n\t\tKey:   keyPtr,\n\t\tValue: valuePtr,\n\t\tFlags: uint64(flags),\n\t}\n\n\tif err = sys.MapUpdateElem(&attr); err != nil {\n\t\treturn fmt.Errorf(\"update: %w\", wrapMapError(err))\n\t}\n\n\treturn nil\n}\n\n// Delete removes a value.\n//\n// Returns ErrKeyNotExist if the key does not exist.\nfunc (m *Map) Delete(key interface{}) error {\n\tkeyPtr, err := m.marshalKey(key)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"can't marshal key: %w\", err)\n\t}\n\n\tattr := sys.MapDeleteElemAttr{\n\t\tMapFd: m.fd.Uint(),\n\t\tKey:   keyPtr,\n\t}\n\n\tif err = sys.MapDeleteElem(&attr); err != nil {\n\t\treturn fmt.Errorf(\"delete: %w\", wrapMapError(err))\n\t}\n\treturn nil\n}\n\n// NextKey finds the key following an initial key.\n//\n// See NextKeyBytes for details.\n//\n// Returns ErrKeyNotExist if there is no next key.\nfunc (m *Map) NextKey(key, nextKeyOut interface{}) error {\n\tnextKeyBytes := makeMapSyscallOutput(nextKeyOut, int(m.keySize))\n\n\tif err := m.nextKey(key, nextKeyBytes.Pointer()); err != nil {\n\t\treturn err\n\t}\n\n\tif err := nextKeyBytes.Unmarshal(nextKeyOut); err != nil {\n\t\treturn fmt.Errorf(\"can't unmarshal next key: %w\", err)\n\t}\n\treturn nil\n}\n\n// NextKeyBytes returns the key following an initial key as a byte slice.\n//\n// Passing nil will return the first key.\n//\n// Use Iterate if you want to traverse all entries in the map.\n//\n// Returns nil if there are no more keys.\nfunc (m *Map) NextKeyBytes(key interface{}) ([]byte, error) {\n\tnextKey := make([]byte, m.keySize)\n\tnextKeyPtr := sys.NewSlicePointer(nextKey)\n\n\terr := m.nextKey(key, nextKeyPtr)\n\tif errors.Is(err, ErrKeyNotExist) {\n\t\treturn nil, nil\n\t}\n\n\treturn nextKey, err\n}\n\nfunc (m *Map) nextKey(key interface{}, nextKeyOut sys.Pointer) error {\n\tvar (\n\t\tkeyPtr sys.Pointer\n\t\terr    error\n\t)\n\n\tif key != nil {\n\t\tkeyPtr, err = m.marshalKey(key)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"can't marshal key: %w\", err)\n\t\t}\n\t}\n\n\tattr := sys.MapGetNextKeyAttr{\n\t\tMapFd:   m.fd.Uint(),\n\t\tKey:     keyPtr,\n\t\tNextKey: nextKeyOut,\n\t}\n\n\tif err = sys.MapGetNextKey(&attr); err != nil {\n\t\t// Kernels 4.4.131 and earlier return EFAULT instead of a pointer to the\n\t\t// first map element when a nil key pointer is specified.\n\t\tif key == nil && errors.Is(err, unix.EFAULT) {\n\t\t\tvar guessKey []byte\n\t\t\tguessKey, err = m.guessNonExistentKey()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Retry the syscall with a valid non-existing key.\n\t\t\tattr.Key = sys.NewSlicePointer(guessKey)\n\t\t\tif err = sys.MapGetNextKey(&attr); err == nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\n\t\treturn fmt.Errorf(\"next key: %w\", wrapMapError(err))\n\t}\n\n\treturn nil\n}\n\nvar mmapProtectedPage = sync.OnceValues(func() ([]byte, error) {\n\treturn unix.Mmap(-1, 0, os.Getpagesize(), unix.PROT_NONE, unix.MAP_ANON|unix.MAP_SHARED)\n})\n\n// guessNonExistentKey attempts to perform a map lookup that returns ENOENT.\n// This is necessary on kernels before 4.4.132, since those don't support\n// iterating maps from the start by providing an invalid key pointer.\nfunc (m *Map) guessNonExistentKey() ([]byte, error) {\n\t// Map a protected page and use that as the value pointer. This saves some\n\t// work copying out the value, which we're not interested in.\n\tpage, err := mmapProtectedPage()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvaluePtr := sys.NewSlicePointer(page)\n\n\trandKey := make([]byte, int(m.keySize))\n\n\tfor i := 0; i < 4; i++ {\n\t\tswitch i {\n\t\t// For hash maps, the 0 key is less likely to be occupied. They're often\n\t\t// used for storing data related to pointers, and their access pattern is\n\t\t// generally scattered across the keyspace.\n\t\tcase 0:\n\t\t// An all-0xff key is guaranteed to be out of bounds of any array, since\n\t\t// those have a fixed key size of 4 bytes. The only corner case being\n\t\t// arrays with 2^32 max entries, but those are prohibitively expensive\n\t\t// in many environments.\n\t\tcase 1:\n\t\t\tfor r := range randKey {\n\t\t\t\trandKey[r] = 0xff\n\t\t\t}\n\t\t// Inspired by BCC, 0x55 is an alternating binary pattern (0101), so\n\t\t// is unlikely to be taken.\n\t\tcase 2:\n\t\t\tfor r := range randKey {\n\t\t\t\trandKey[r] = 0x55\n\t\t\t}\n\t\t// Last ditch effort, generate a random key.\n\t\tcase 3:\n\t\t\trand.New(rand.NewSource(time.Now().UnixNano())).Read(randKey)\n\t\t}\n\n\t\terr := m.lookup(randKey, valuePtr, 0)\n\t\tif errors.Is(err, ErrKeyNotExist) {\n\t\t\treturn randKey, nil\n\t\t}\n\t}\n\n\treturn nil, errors.New(\"couldn't find non-existing key\")\n}\n\n// BatchLookup looks up many elements in a map at once.\n//\n// \"keysOut\" and \"valuesOut\" must be of type slice, a pointer\n// to a slice or buffer will not work.\n// \"cursor\" is an pointer to an opaque handle. It must be non-nil. Pass\n// \"cursor\" to subsequent calls of this function to continue the batching\n// operation in the case of chunking.\n//\n// Warning: This API is not very safe to use as the kernel implementation for\n// batching relies on the user to be aware of subtle details with regarding to\n// different map type implementations.\n//\n// ErrKeyNotExist is returned when the batch lookup has reached\n// the end of all possible results, even when partial results\n// are returned. It should be used to evaluate when lookup is \"done\".\nfunc (m *Map) BatchLookup(cursor *MapBatchCursor, keysOut, valuesOut interface{}, opts *BatchOptions) (int, error) {\n\tn, err := m.batchLookup(sys.BPF_MAP_LOOKUP_BATCH, cursor, keysOut, valuesOut, opts)\n\tif err != nil {\n\t\treturn n, fmt.Errorf(\"map batch lookup: %w\", err)\n\t}\n\treturn n, nil\n}\n\n// BatchLookupAndDelete looks up many elements in a map at once,\n//\n// It then deletes all those elements.\n// \"keysOut\" and \"valuesOut\" must be of type slice, a pointer\n// to a slice or buffer will not work.\n// \"cursor\" is an pointer to an opaque handle. It must be non-nil. Pass\n// \"cursor\" to subsequent calls of this function to continue the batching\n// operation in the case of chunking.\n//\n// Warning: This API is not very safe to use as the kernel implementation for\n// batching relies on the user to be aware of subtle details with regarding to\n// different map type implementations.\n//\n// ErrKeyNotExist is returned when the batch lookup has reached\n// the end of all possible results, even when partial results\n// are returned. It should be used to evaluate when lookup is \"done\".\nfunc (m *Map) BatchLookupAndDelete(cursor *MapBatchCursor, keysOut, valuesOut interface{}, opts *BatchOptions) (int, error) {\n\tn, err := m.batchLookup(sys.BPF_MAP_LOOKUP_AND_DELETE_BATCH, cursor, keysOut, valuesOut, opts)\n\tif err != nil {\n\t\treturn n, fmt.Errorf(\"map batch lookup and delete: %w\", err)\n\t}\n\treturn n, nil\n}\n\n// MapBatchCursor represents a starting point for a batch operation.\ntype MapBatchCursor struct {\n\tm      *Map\n\topaque []byte\n}\n\nfunc (m *Map) batchLookup(cmd sys.Cmd, cursor *MapBatchCursor, keysOut, valuesOut interface{}, opts *BatchOptions) (int, error) {\n\tif m.typ.hasPerCPUValue() {\n\t\treturn m.batchLookupPerCPU(cmd, cursor, keysOut, valuesOut, opts)\n\t}\n\n\tcount, err := batchCount(keysOut, valuesOut)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tvalueBuf := sysenc.SyscallOutput(valuesOut, count*int(m.fullValueSize))\n\n\tn, err := m.batchLookupCmd(cmd, cursor, count, keysOut, valueBuf.Pointer(), opts)\n\tif errors.Is(err, unix.ENOSPC) {\n\t\t// Hash tables return ENOSPC when the size of the batch is smaller than\n\t\t// any bucket.\n\t\treturn n, fmt.Errorf(\"%w (batch size too small?)\", err)\n\t} else if err != nil {\n\t\treturn n, err\n\t}\n\n\terr = valueBuf.Unmarshal(valuesOut)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn n, nil\n}\n\nfunc (m *Map) batchLookupPerCPU(cmd sys.Cmd, cursor *MapBatchCursor, keysOut, valuesOut interface{}, opts *BatchOptions) (int, error) {\n\tcount, err := sliceLen(keysOut)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"keys: %w\", err)\n\t}\n\n\tvalueBuf := make([]byte, count*int(m.fullValueSize))\n\tvaluePtr := sys.NewSlicePointer(valueBuf)\n\n\tn, sysErr := m.batchLookupCmd(cmd, cursor, count, keysOut, valuePtr, opts)\n\tif sysErr != nil && !errors.Is(sysErr, unix.ENOENT) {\n\t\treturn 0, err\n\t}\n\n\terr = unmarshalBatchPerCPUValue(valuesOut, count, int(m.valueSize), valueBuf)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn n, sysErr\n}\n\nfunc (m *Map) batchLookupCmd(cmd sys.Cmd, cursor *MapBatchCursor, count int, keysOut any, valuePtr sys.Pointer, opts *BatchOptions) (int, error) {\n\tcursorLen := int(m.keySize)\n\tif cursorLen < 4 {\n\t\t// * generic_map_lookup_batch requires that batch_out is key_size bytes.\n\t\t//   This is used by array and LPM maps.\n\t\t//\n\t\t// * __htab_map_lookup_and_delete_batch requires u32. This is used by the\n\t\t//   various hash maps.\n\t\t//\n\t\t// Use a minimum of 4 bytes to avoid having to distinguish between the two.\n\t\tcursorLen = 4\n\t}\n\n\tinBatch := cursor.opaque\n\tif inBatch == nil {\n\t\t// This is the first lookup, allocate a buffer to hold the cursor.\n\t\tcursor.opaque = make([]byte, cursorLen)\n\t\tcursor.m = m\n\t} else if cursor.m != m {\n\t\t// Prevent reuse of a cursor across maps. First, it's unlikely to work.\n\t\t// Second, the maps may require different cursorLen and cursor.opaque\n\t\t// may therefore be too short. This could lead to the kernel clobbering\n\t\t// user space memory.\n\t\treturn 0, errors.New(\"a cursor may not be reused across maps\")\n\t}\n\n\tif err := haveBatchAPI(); err != nil {\n\t\treturn 0, err\n\t}\n\n\tkeyBuf := sysenc.SyscallOutput(keysOut, count*int(m.keySize))\n\n\tattr := sys.MapLookupBatchAttr{\n\t\tMapFd:    m.fd.Uint(),\n\t\tKeys:     keyBuf.Pointer(),\n\t\tValues:   valuePtr,\n\t\tCount:    uint32(count),\n\t\tInBatch:  sys.NewSlicePointer(inBatch),\n\t\tOutBatch: sys.NewSlicePointer(cursor.opaque),\n\t}\n\n\tif opts != nil {\n\t\tattr.ElemFlags = opts.ElemFlags\n\t\tattr.Flags = opts.Flags\n\t}\n\n\t_, sysErr := sys.BPF(cmd, unsafe.Pointer(&attr), unsafe.Sizeof(attr))\n\tsysErr = wrapMapError(sysErr)\n\tif sysErr != nil && !errors.Is(sysErr, unix.ENOENT) {\n\t\treturn 0, sysErr\n\t}\n\n\tif err := keyBuf.Unmarshal(keysOut); err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn int(attr.Count), sysErr\n}\n\n// BatchUpdate updates the map with multiple keys and values\n// simultaneously.\n// \"keys\" and \"values\" must be of type slice, a pointer\n// to a slice or buffer will not work.\nfunc (m *Map) BatchUpdate(keys, values interface{}, opts *BatchOptions) (int, error) {\n\tif m.typ.hasPerCPUValue() {\n\t\treturn m.batchUpdatePerCPU(keys, values, opts)\n\t}\n\n\tcount, err := batchCount(keys, values)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tvaluePtr, err := marshalMapSyscallInput(values, count*int(m.valueSize))\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn m.batchUpdate(count, keys, valuePtr, opts)\n}\n\nfunc (m *Map) batchUpdate(count int, keys any, valuePtr sys.Pointer, opts *BatchOptions) (int, error) {\n\tkeyPtr, err := marshalMapSyscallInput(keys, count*int(m.keySize))\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tattr := sys.MapUpdateBatchAttr{\n\t\tMapFd:  m.fd.Uint(),\n\t\tKeys:   keyPtr,\n\t\tValues: valuePtr,\n\t\tCount:  uint32(count),\n\t}\n\tif opts != nil {\n\t\tattr.ElemFlags = opts.ElemFlags\n\t\tattr.Flags = opts.Flags\n\t}\n\n\terr = sys.MapUpdateBatch(&attr)\n\tif err != nil {\n\t\tif haveFeatErr := haveBatchAPI(); haveFeatErr != nil {\n\t\t\treturn 0, haveFeatErr\n\t\t}\n\t\treturn int(attr.Count), fmt.Errorf(\"batch update: %w\", wrapMapError(err))\n\t}\n\n\treturn int(attr.Count), nil\n}\n\nfunc (m *Map) batchUpdatePerCPU(keys, values any, opts *BatchOptions) (int, error) {\n\tcount, err := sliceLen(keys)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"keys: %w\", err)\n\t}\n\n\tvalueBuf, err := marshalBatchPerCPUValue(values, count, int(m.valueSize))\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn m.batchUpdate(count, keys, sys.NewSlicePointer(valueBuf), opts)\n}\n\n// BatchDelete batch deletes entries in the map by keys.\n// \"keys\" must be of type slice, a pointer to a slice or buffer will not work.\nfunc (m *Map) BatchDelete(keys interface{}, opts *BatchOptions) (int, error) {\n\tcount, err := sliceLen(keys)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"keys: %w\", err)\n\t}\n\n\tkeyPtr, err := marshalMapSyscallInput(keys, count*int(m.keySize))\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"cannot marshal keys: %v\", err)\n\t}\n\n\tattr := sys.MapDeleteBatchAttr{\n\t\tMapFd: m.fd.Uint(),\n\t\tKeys:  keyPtr,\n\t\tCount: uint32(count),\n\t}\n\n\tif opts != nil {\n\t\tattr.ElemFlags = opts.ElemFlags\n\t\tattr.Flags = opts.Flags\n\t}\n\n\tif err = sys.MapDeleteBatch(&attr); err != nil {\n\t\tif haveFeatErr := haveBatchAPI(); haveFeatErr != nil {\n\t\t\treturn 0, haveFeatErr\n\t\t}\n\t\treturn int(attr.Count), fmt.Errorf(\"batch delete: %w\", wrapMapError(err))\n\t}\n\n\treturn int(attr.Count), nil\n}\n\nfunc batchCount(keys, values any) (int, error) {\n\tkeysLen, err := sliceLen(keys)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"keys: %w\", err)\n\t}\n\n\tvaluesLen, err := sliceLen(values)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"values: %w\", err)\n\t}\n\n\tif keysLen != valuesLen {\n\t\treturn 0, fmt.Errorf(\"keys and values must have the same length\")\n\t}\n\n\treturn keysLen, nil\n}\n\n// Iterate traverses a map.\n//\n// It's safe to create multiple iterators at the same time.\n//\n// It's not possible to guarantee that all keys in a map will be\n// returned if there are concurrent modifications to the map.\nfunc (m *Map) Iterate() *MapIterator {\n\treturn newMapIterator(m)\n}\n\n// Close the Map's underlying file descriptor, which could unload the\n// Map from the kernel if it is not pinned or in use by a loaded Program.\nfunc (m *Map) Close() error {\n\tif m == nil {\n\t\t// This makes it easier to clean up when iterating maps\n\t\t// of maps / programs.\n\t\treturn nil\n\t}\n\n\treturn m.fd.Close()\n}\n\n// FD gets the file descriptor of the Map.\n//\n// Calling this function is invalid after Close has been called.\nfunc (m *Map) FD() int {\n\treturn m.fd.Int()\n}\n\n// Clone creates a duplicate of the Map.\n//\n// Closing the duplicate does not affect the original, and vice versa.\n// Changes made to the map are reflected by both instances however.\n// If the original map was pinned, the cloned map will not be pinned by default.\n//\n// Cloning a nil Map returns nil.\nfunc (m *Map) Clone() (*Map, error) {\n\tif m == nil {\n\t\treturn nil, nil\n\t}\n\n\tdup, err := m.fd.Dup()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't clone map: %w\", err)\n\t}\n\n\treturn &Map{\n\t\tm.name,\n\t\tdup,\n\t\tm.typ,\n\t\tm.keySize,\n\t\tm.valueSize,\n\t\tm.maxEntries,\n\t\tm.flags,\n\t\t\"\",\n\t\tm.fullValueSize,\n\t\tnil,\n\t}, nil\n}\n\n// Pin persists the map on the BPF virtual file system past the lifetime of\n// the process that created it .\n//\n// Calling Pin on a previously pinned map will overwrite the path, except when\n// the new path already exists. Re-pinning across filesystems is not supported.\n// You can Clone a map to pin it to a different path.\n//\n// This requires bpffs to be mounted above fileName.\n// See https://docs.cilium.io/en/stable/network/kubernetes/configuration/#mounting-bpffs-with-systemd\nfunc (m *Map) Pin(fileName string) error {\n\tif err := sys.Pin(m.pinnedPath, fileName, m.fd); err != nil {\n\t\treturn err\n\t}\n\tm.pinnedPath = fileName\n\treturn nil\n}\n\n// Unpin removes the persisted state for the map from the BPF virtual filesystem.\n//\n// Failed calls to Unpin will not alter the state returned by IsPinned.\n//\n// Unpinning an unpinned Map returns nil.\nfunc (m *Map) Unpin() error {\n\tif err := sys.Unpin(m.pinnedPath); err != nil {\n\t\treturn err\n\t}\n\tm.pinnedPath = \"\"\n\treturn nil\n}\n\n// IsPinned returns true if the map has a non-empty pinned path.\nfunc (m *Map) IsPinned() bool {\n\treturn m.pinnedPath != \"\"\n}\n\n// Freeze prevents a map to be modified from user space.\n//\n// It makes no changes to kernel-side restrictions.\nfunc (m *Map) Freeze() error {\n\tattr := sys.MapFreezeAttr{\n\t\tMapFd: m.fd.Uint(),\n\t}\n\n\tif err := sys.MapFreeze(&attr); err != nil {\n\t\tif haveFeatErr := haveMapMutabilityModifiers(); haveFeatErr != nil {\n\t\t\treturn fmt.Errorf(\"can't freeze map: %w\", haveFeatErr)\n\t\t}\n\t\treturn fmt.Errorf(\"can't freeze map: %w\", err)\n\t}\n\treturn nil\n}\n\n// finalize populates the Map according to the Contents specified\n// in spec and freezes the Map if requested by spec.\nfunc (m *Map) finalize(spec *MapSpec) error {\n\tfor _, kv := range spec.Contents {\n\t\tif err := m.Put(kv.Key, kv.Value); err != nil {\n\t\t\treturn fmt.Errorf(\"putting value: key %v: %w\", kv.Key, err)\n\t\t}\n\t}\n\n\tif isConstantDataSection(spec.Name) || isKconfigSection(spec.Name) {\n\t\tif err := m.Freeze(); err != nil {\n\t\t\treturn fmt.Errorf(\"freezing map: %w\", err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (m *Map) marshalKey(data interface{}) (sys.Pointer, error) {\n\tif data == nil {\n\t\tif m.keySize == 0 {\n\t\t\t// Queues have a key length of zero, so passing nil here is valid.\n\t\t\treturn sys.NewPointer(nil), nil\n\t\t}\n\t\treturn sys.Pointer{}, errors.New(\"can't use nil as key of map\")\n\t}\n\n\treturn marshalMapSyscallInput(data, int(m.keySize))\n}\n\nfunc (m *Map) marshalValue(data interface{}) (sys.Pointer, error) {\n\tvar (\n\t\tbuf []byte\n\t\terr error\n\t)\n\n\tswitch value := data.(type) {\n\tcase *Map:\n\t\tif !m.typ.canStoreMap() {\n\t\t\treturn sys.Pointer{}, fmt.Errorf(\"can't store map in %s\", m.typ)\n\t\t}\n\t\tbuf, err = marshalMap(value, int(m.valueSize))\n\n\tcase *Program:\n\t\tif !m.typ.canStoreProgram() {\n\t\t\treturn sys.Pointer{}, fmt.Errorf(\"can't store program in %s\", m.typ)\n\t\t}\n\t\tbuf, err = marshalProgram(value, int(m.valueSize))\n\n\tdefault:\n\t\treturn marshalMapSyscallInput(data, int(m.valueSize))\n\t}\n\n\tif err != nil {\n\t\treturn sys.Pointer{}, err\n\t}\n\n\treturn sys.NewSlicePointer(buf), nil\n}\n\nfunc (m *Map) unmarshalValue(value any, buf sysenc.Buffer) error {\n\tswitch value := value.(type) {\n\tcase **Map:\n\t\tif !m.typ.canStoreMap() {\n\t\t\treturn fmt.Errorf(\"can't read a map from %s\", m.typ)\n\t\t}\n\n\t\tother, err := unmarshalMap(buf)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// The caller might close the map externally, so ignore errors.\n\t\t_ = (*value).Close()\n\n\t\t*value = other\n\t\treturn nil\n\n\tcase *Map:\n\t\tif !m.typ.canStoreMap() {\n\t\t\treturn fmt.Errorf(\"can't read a map from %s\", m.typ)\n\t\t}\n\t\treturn errors.New(\"require pointer to *Map\")\n\n\tcase **Program:\n\t\tif !m.typ.canStoreProgram() {\n\t\t\treturn fmt.Errorf(\"can't read a program from %s\", m.typ)\n\t\t}\n\n\t\tother, err := unmarshalProgram(buf)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// The caller might close the program externally, so ignore errors.\n\t\t_ = (*value).Close()\n\n\t\t*value = other\n\t\treturn nil\n\n\tcase *Program:\n\t\tif !m.typ.canStoreProgram() {\n\t\t\treturn fmt.Errorf(\"can't read a program from %s\", m.typ)\n\t\t}\n\t\treturn errors.New(\"require pointer to *Program\")\n\t}\n\n\treturn buf.Unmarshal(value)\n}\n\n// LoadPinnedMap opens a Map from a pin (file) on the BPF virtual filesystem.\n//\n// Requires at least Linux 4.5.\nfunc LoadPinnedMap(fileName string, opts *LoadPinOptions) (*Map, error) {\n\tfd, typ, err := sys.ObjGetTyped(&sys.ObjGetAttr{\n\t\tPathname:  sys.NewStringPointer(fileName),\n\t\tFileFlags: opts.Marshal(),\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif typ != sys.BPF_TYPE_MAP {\n\t\t_ = fd.Close()\n\t\treturn nil, fmt.Errorf(\"%s is not a Map\", fileName)\n\t}\n\n\tm, err := newMapFromFD(fd)\n\tif err == nil {\n\t\tm.pinnedPath = fileName\n\t}\n\n\treturn m, err\n}\n\n// unmarshalMap creates a map from a map ID encoded in host endianness.\nfunc unmarshalMap(buf sysenc.Buffer) (*Map, error) {\n\tvar id uint32\n\tif err := buf.Unmarshal(&id); err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewMapFromID(MapID(id))\n}\n\n// marshalMap marshals the fd of a map into a buffer in host endianness.\nfunc marshalMap(m *Map, length int) ([]byte, error) {\n\tif m == nil {\n\t\treturn nil, errors.New(\"can't marshal a nil Map\")\n\t}\n\n\tif length != 4 {\n\t\treturn nil, fmt.Errorf(\"can't marshal map to %d bytes\", length)\n\t}\n\n\tbuf := make([]byte, 4)\n\tinternal.NativeEndian.PutUint32(buf, m.fd.Uint())\n\treturn buf, nil\n}\n\n// MapIterator iterates a Map.\n//\n// See Map.Iterate.\ntype MapIterator struct {\n\ttarget *Map\n\t// Temporary storage to avoid allocations in Next(). This is any instead\n\t// of []byte to avoid allocations.\n\tcursor            any\n\tcount, maxEntries uint32\n\tdone              bool\n\terr               error\n}\n\nfunc newMapIterator(target *Map) *MapIterator {\n\treturn &MapIterator{\n\t\ttarget:     target,\n\t\tmaxEntries: target.maxEntries,\n\t}\n}\n\n// Next decodes the next key and value.\n//\n// Iterating a hash map from which keys are being deleted is not\n// safe. You may see the same key multiple times. Iteration may\n// also abort with an error, see IsIterationAborted.\n//\n// Returns false if there are no more entries. You must check\n// the result of Err afterwards.\n//\n// See Map.Get for further caveats around valueOut.\nfunc (mi *MapIterator) Next(keyOut, valueOut interface{}) bool {\n\tif mi.err != nil || mi.done {\n\t\treturn false\n\t}\n\n\t// For array-like maps NextKey returns nil only after maxEntries\n\t// iterations.\n\tfor mi.count <= mi.maxEntries {\n\t\tif mi.cursor == nil {\n\t\t\t// Pass nil interface to NextKey to make sure the Map's first key\n\t\t\t// is returned. If we pass an uninitialized []byte instead, it'll see a\n\t\t\t// non-nil interface and try to marshal it.\n\t\t\tmi.cursor = make([]byte, mi.target.keySize)\n\t\t\tmi.err = mi.target.NextKey(nil, mi.cursor)\n\t\t} else {\n\t\t\tmi.err = mi.target.NextKey(mi.cursor, mi.cursor)\n\t\t}\n\n\t\tif errors.Is(mi.err, ErrKeyNotExist) {\n\t\t\tmi.done = true\n\t\t\tmi.err = nil\n\t\t\treturn false\n\t\t} else if mi.err != nil {\n\t\t\tmi.err = fmt.Errorf(\"get next key: %w\", mi.err)\n\t\t\treturn false\n\t\t}\n\n\t\tmi.count++\n\t\tmi.err = mi.target.Lookup(mi.cursor, valueOut)\n\t\tif errors.Is(mi.err, ErrKeyNotExist) {\n\t\t\t// Even though the key should be valid, we couldn't look up\n\t\t\t// its value. If we're iterating a hash map this is probably\n\t\t\t// because a concurrent delete removed the value before we\n\t\t\t// could get it. This means that the next call to NextKeyBytes\n\t\t\t// is very likely to restart iteration.\n\t\t\t// If we're iterating one of the fd maps like\n\t\t\t// ProgramArray it means that a given slot doesn't have\n\t\t\t// a valid fd associated. It's OK to continue to the next slot.\n\t\t\tcontinue\n\t\t}\n\t\tif mi.err != nil {\n\t\t\tmi.err = fmt.Errorf(\"look up next key: %w\", mi.err)\n\t\t\treturn false\n\t\t}\n\n\t\tbuf := mi.cursor.([]byte)\n\t\tif ptr, ok := keyOut.(unsafe.Pointer); ok {\n\t\t\tcopy(unsafe.Slice((*byte)(ptr), len(buf)), buf)\n\t\t} else {\n\t\t\tmi.err = sysenc.Unmarshal(keyOut, buf)\n\t\t}\n\n\t\treturn mi.err == nil\n\t}\n\n\tmi.err = fmt.Errorf(\"%w\", ErrIterationAborted)\n\treturn false\n}\n\n// Err returns any encountered error.\n//\n// The method must be called after Next returns nil.\n//\n// Returns ErrIterationAborted if it wasn't possible to do a full iteration.\nfunc (mi *MapIterator) Err() error {\n\treturn mi.err\n}\n\n// MapGetNextID returns the ID of the next eBPF map.\n//\n// Returns ErrNotExist, if there is no next eBPF map.\nfunc MapGetNextID(startID MapID) (MapID, error) {\n\tattr := &sys.MapGetNextIdAttr{Id: uint32(startID)}\n\treturn MapID(attr.NextId), sys.MapGetNextId(attr)\n}\n\n// NewMapFromID returns the map for a given id.\n//\n// Returns ErrNotExist, if there is no eBPF map with the given id.\nfunc NewMapFromID(id MapID) (*Map, error) {\n\tfd, err := sys.MapGetFdById(&sys.MapGetFdByIdAttr{\n\t\tId: uint32(id),\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn newMapFromFD(fd)\n}\n\n// sliceLen returns the length if the value is a slice or an error otherwise.\nfunc sliceLen(slice any) (int, error) {\n\tsliceValue := reflect.ValueOf(slice)\n\tif sliceValue.Kind() != reflect.Slice {\n\t\treturn 0, fmt.Errorf(\"%T is not a slice\", slice)\n\t}\n\treturn sliceValue.Len(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/marshalers.go",
    "content": "package ebpf\n\nimport (\n\t\"encoding\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"slices\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/sysenc\"\n)\n\n// marshalMapSyscallInput converts an arbitrary value into a pointer suitable\n// to be passed to the kernel.\n//\n// As an optimization, it returns the original value if it is an\n// unsafe.Pointer.\nfunc marshalMapSyscallInput(data any, length int) (sys.Pointer, error) {\n\tif ptr, ok := data.(unsafe.Pointer); ok {\n\t\treturn sys.NewPointer(ptr), nil\n\t}\n\n\tbuf, err := sysenc.Marshal(data, length)\n\tif err != nil {\n\t\treturn sys.Pointer{}, err\n\t}\n\n\treturn buf.Pointer(), nil\n}\n\nfunc makeMapSyscallOutput(dst any, length int) sysenc.Buffer {\n\tif ptr, ok := dst.(unsafe.Pointer); ok {\n\t\treturn sysenc.UnsafeBuffer(ptr)\n\t}\n\n\t_, ok := dst.(encoding.BinaryUnmarshaler)\n\tif ok {\n\t\treturn sysenc.SyscallOutput(nil, length)\n\t}\n\n\treturn sysenc.SyscallOutput(dst, length)\n}\n\n// appendPerCPUSlice encodes a slice containing one value per\n// possible CPU into a buffer of bytes.\n//\n// Values are initialized to zero if the slice has less elements than CPUs.\nfunc appendPerCPUSlice(buf []byte, slice any, possibleCPUs, elemLength, alignedElemLength int) ([]byte, error) {\n\tsliceType := reflect.TypeOf(slice)\n\tif sliceType.Kind() != reflect.Slice {\n\t\treturn nil, errors.New(\"per-CPU value requires slice\")\n\t}\n\n\tsliceValue := reflect.ValueOf(slice)\n\tsliceLen := sliceValue.Len()\n\tif sliceLen > possibleCPUs {\n\t\treturn nil, fmt.Errorf(\"per-CPU value greater than number of CPUs\")\n\t}\n\n\t// Grow increases the slice's capacity, _if_necessary_\n\tbuf = slices.Grow(buf, alignedElemLength*possibleCPUs)\n\tfor i := 0; i < sliceLen; i++ {\n\t\telem := sliceValue.Index(i).Interface()\n\t\telemBytes, err := sysenc.Marshal(elem, elemLength)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tbuf = elemBytes.AppendTo(buf)\n\t\tbuf = append(buf, make([]byte, alignedElemLength-elemLength)...)\n\t}\n\n\t// Ensure buf is zero-padded full size.\n\tbuf = append(buf, make([]byte, (possibleCPUs-sliceLen)*alignedElemLength)...)\n\n\treturn buf, nil\n}\n\n// marshalPerCPUValue encodes a slice containing one value per\n// possible CPU into a buffer of bytes.\n//\n// Values are initialized to zero if the slice has less elements than CPUs.\nfunc marshalPerCPUValue(slice any, elemLength int) (sys.Pointer, error) {\n\tpossibleCPUs, err := PossibleCPU()\n\tif err != nil {\n\t\treturn sys.Pointer{}, err\n\t}\n\n\talignedElemLength := internal.Align(elemLength, 8)\n\tbuf := make([]byte, 0, alignedElemLength*possibleCPUs)\n\tbuf, err = appendPerCPUSlice(buf, slice, possibleCPUs, elemLength, alignedElemLength)\n\tif err != nil {\n\t\treturn sys.Pointer{}, err\n\t}\n\n\treturn sys.NewSlicePointer(buf), nil\n}\n\n// marshalBatchPerCPUValue encodes a batch-sized slice of slices containing\n// one value per possible CPU into a buffer of bytes.\nfunc marshalBatchPerCPUValue(slice any, batchLen, elemLength int) ([]byte, error) {\n\tsliceType := reflect.TypeOf(slice)\n\tif sliceType.Kind() != reflect.Slice {\n\t\treturn nil, fmt.Errorf(\"batch value requires a slice\")\n\t}\n\tsliceValue := reflect.ValueOf(slice)\n\n\tpossibleCPUs, err := PossibleCPU()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif sliceValue.Len() != batchLen*possibleCPUs {\n\t\treturn nil, fmt.Errorf(\"per-CPU slice has incorrect length, expected %d, got %d\",\n\t\t\tbatchLen*possibleCPUs, sliceValue.Len())\n\t}\n\talignedElemLength := internal.Align(elemLength, 8)\n\tbuf := make([]byte, 0, batchLen*alignedElemLength*possibleCPUs)\n\tfor i := 0; i < batchLen; i++ {\n\t\tbatch := sliceValue.Slice(i*possibleCPUs, (i+1)*possibleCPUs).Interface()\n\t\tbuf, err = appendPerCPUSlice(buf, batch, possibleCPUs, elemLength, alignedElemLength)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"batch %d: %w\", i, err)\n\t\t}\n\t}\n\treturn buf, nil\n}\n\n// unmarshalPerCPUValue decodes a buffer into a slice containing one value per\n// possible CPU.\n//\n// slice must be a literal slice and not a pointer.\nfunc unmarshalPerCPUValue(slice any, elemLength int, buf []byte) error {\n\tsliceType := reflect.TypeOf(slice)\n\tif sliceType.Kind() != reflect.Slice {\n\t\treturn fmt.Errorf(\"per-CPU value requires a slice\")\n\t}\n\n\tpossibleCPUs, err := PossibleCPU()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tsliceValue := reflect.ValueOf(slice)\n\tif sliceValue.Len() != possibleCPUs {\n\t\treturn fmt.Errorf(\"per-CPU slice has incorrect length, expected %d, got %d\",\n\t\t\tpossibleCPUs, sliceValue.Len())\n\t}\n\n\tsliceElemType := sliceType.Elem()\n\tsliceElemIsPointer := sliceElemType.Kind() == reflect.Ptr\n\tstride := internal.Align(elemLength, 8)\n\tfor i := 0; i < possibleCPUs; i++ {\n\t\tvar elem any\n\t\tv := sliceValue.Index(i)\n\t\tif sliceElemIsPointer {\n\t\t\tif !v.Elem().CanAddr() {\n\t\t\t\treturn fmt.Errorf(\"per-CPU slice elements cannot be nil\")\n\t\t\t}\n\t\t\telem = v.Elem().Addr().Interface()\n\t\t} else {\n\t\t\telem = v.Addr().Interface()\n\t\t}\n\t\terr := sysenc.Unmarshal(elem, buf[:elemLength])\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"cpu %d: %w\", i, err)\n\t\t}\n\n\t\tbuf = buf[stride:]\n\t}\n\treturn nil\n}\n\n// unmarshalBatchPerCPUValue decodes a buffer into a batch-sized slice\n// containing one value per possible CPU.\n//\n// slice must have length batchLen * PossibleCPUs().\nfunc unmarshalBatchPerCPUValue(slice any, batchLen, elemLength int, buf []byte) error {\n\tsliceType := reflect.TypeOf(slice)\n\tif sliceType.Kind() != reflect.Slice {\n\t\treturn fmt.Errorf(\"batch requires a slice\")\n\t}\n\n\tsliceValue := reflect.ValueOf(slice)\n\tpossibleCPUs, err := PossibleCPU()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif sliceValue.Len() != batchLen*possibleCPUs {\n\t\treturn fmt.Errorf(\"per-CPU slice has incorrect length, expected %d, got %d\",\n\t\t\tsliceValue.Len(), batchLen*possibleCPUs)\n\t}\n\n\tfullValueSize := possibleCPUs * internal.Align(elemLength, 8)\n\tif len(buf) != batchLen*fullValueSize {\n\t\treturn fmt.Errorf(\"input buffer has incorrect length, expected %d, got %d\",\n\t\t\tlen(buf), batchLen*fullValueSize)\n\t}\n\n\tfor i := 0; i < batchLen; i++ {\n\t\telem := sliceValue.Slice(i*possibleCPUs, (i+1)*possibleCPUs).Interface()\n\t\tif err := unmarshalPerCPUValue(elem, elemLength, buf[:fullValueSize]); err != nil {\n\t\t\treturn fmt.Errorf(\"batch %d: %w\", i, err)\n\t\t}\n\t\tbuf = buf[fullValueSize:]\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/memory.go",
    "content": "package ebpf\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"runtime\"\n\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// Memory is the building block for accessing the memory of specific bpf map\n// types (Array and Arena at the time of writing) without going through the bpf\n// syscall interface.\n//\n// Given the fd of a bpf map created with the BPF_F_MMAPABLE flag, a shared\n// 'file'-based memory-mapped region can be allocated in the process' address\n// space, exposing the bpf map's memory by simply accessing a memory location.\n\nvar ErrReadOnly = errors.New(\"resource is read-only\")\n\n// Memory implements accessing a Map's memory without making any syscalls.\n// Pay attention to the difference between Go and C struct alignment rules. Use\n// [structs.HostLayout] on supported Go versions to help with alignment.\n//\n// Note on memory coherence: avoid using packed structs in memory shared between\n// user space and eBPF C programs. This drops a struct's memory alignment to 1,\n// forcing the compiler to use single-byte loads and stores for field accesses.\n// This may lead to partially-written data to be observed from user space.\n//\n// On most architectures, the memmove implementation used by Go's copy() will\n// access data in word-sized chunks. If paired with a matching access pattern on\n// the eBPF C side (and if using default memory alignment), accessing shared\n// memory without atomics or other synchronization primitives should be sound\n// for individual values. For accesses beyond a single value, the usual\n// concurrent programming rules apply.\ntype Memory struct {\n\tb  []byte\n\tro bool\n}\n\nfunc newMemory(fd, size int) (*Memory, error) {\n\t// Typically, maps created with BPF_F_RDONLY_PROG remain writable from user\n\t// space until frozen. As a security precaution, the kernel doesn't allow\n\t// mapping bpf map memory as read-write into user space if the bpf map was\n\t// frozen, or if it was created using the RDONLY_PROG flag.\n\t//\n\t// The user would be able to write to the map after freezing (since the kernel\n\t// can't change the protection mode of an already-mapped page), while the\n\t// verifier assumes the contents to be immutable.\n\tb, err := unix.Mmap(fd, 0, size, unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED)\n\n\t// If the map is frozen when an rw mapping is requested, expect EPERM. If the\n\t// map was created with BPF_F_RDONLY_PROG, expect EACCES.\n\tvar ro bool\n\tif errors.Is(err, unix.EPERM) || errors.Is(err, unix.EACCES) {\n\t\tro = true\n\t\tb, err = unix.Mmap(fd, 0, size, unix.PROT_READ, unix.MAP_SHARED)\n\t}\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"setting up memory-mapped region: %w\", err)\n\t}\n\n\tmm := &Memory{\n\t\tb,\n\t\tro,\n\t}\n\truntime.SetFinalizer(mm, (*Memory).close)\n\n\treturn mm, nil\n}\n\nfunc (mm *Memory) close() {\n\tif err := unix.Munmap(mm.b); err != nil {\n\t\tpanic(fmt.Errorf(\"unmapping memory: %w\", err))\n\t}\n\tmm.b = nil\n}\n\n// Size returns the size of the memory-mapped region in bytes.\nfunc (mm *Memory) Size() int {\n\treturn len(mm.b)\n}\n\n// ReadOnly returns true if the memory-mapped region is read-only.\nfunc (mm *Memory) ReadOnly() bool {\n\treturn mm.ro\n}\n\n// bounds returns true if an access at off of the given size is within bounds.\nfunc (mm *Memory) bounds(off uint64, size uint64) bool {\n\treturn off+size < uint64(len(mm.b))\n}\n\n// ReadAt implements [io.ReaderAt]. Useful for creating a new [io.OffsetWriter].\n//\n// See [Memory] for details around memory coherence.\nfunc (mm *Memory) ReadAt(p []byte, off int64) (int, error) {\n\tif mm.b == nil {\n\t\treturn 0, fmt.Errorf(\"memory-mapped region closed\")\n\t}\n\n\tif p == nil {\n\t\treturn 0, fmt.Errorf(\"input buffer p is nil\")\n\t}\n\n\tif off < 0 || off >= int64(len(mm.b)) {\n\t\treturn 0, fmt.Errorf(\"read offset out of range\")\n\t}\n\n\tn := copy(p, mm.b[off:])\n\tif n < len(p) {\n\t\treturn n, io.EOF\n\t}\n\n\treturn n, nil\n}\n\n// WriteAt implements [io.WriterAt]. Useful for creating a new\n// [io.SectionReader].\n//\n// See [Memory] for details around memory coherence.\nfunc (mm *Memory) WriteAt(p []byte, off int64) (int, error) {\n\tif mm.b == nil {\n\t\treturn 0, fmt.Errorf(\"memory-mapped region closed\")\n\t}\n\tif mm.ro {\n\t\treturn 0, fmt.Errorf(\"memory-mapped region not writable: %w\", ErrReadOnly)\n\t}\n\n\tif p == nil {\n\t\treturn 0, fmt.Errorf(\"output buffer p is nil\")\n\t}\n\n\tif off < 0 || off >= int64(len(mm.b)) {\n\t\treturn 0, fmt.Errorf(\"write offset out of range\")\n\t}\n\n\tn := copy(mm.b[off:], p)\n\tif n < len(p) {\n\t\treturn n, io.EOF\n\t}\n\n\treturn n, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/netlify.toml",
    "content": "[build]\n  base = \"docs/\"\n  publish = \"site/\"\n  command = \"mkdocs build\"\n  environment = { PYTHON_VERSION = \"3.13\" }\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/prog.go",
    "content": "package ebpf\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/kallsyms\"\n\t\"github.com/cilium/ebpf/internal/linux\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/sysenc\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// ErrNotSupported is returned whenever the kernel doesn't support a feature.\nvar ErrNotSupported = internal.ErrNotSupported\n\n// errBadRelocation is returned when the verifier rejects a program due to a\n// bad CO-RE relocation.\n//\n// This error is detected based on heuristics and therefore may not be reliable.\nvar errBadRelocation = errors.New(\"bad CO-RE relocation\")\n\n// errUnknownKfunc is returned when the verifier rejects a program due to an\n// unknown kfunc.\n//\n// This error is detected based on heuristics and therefore may not be reliable.\nvar errUnknownKfunc = errors.New(\"unknown kfunc\")\n\n// ProgramID represents the unique ID of an eBPF program.\ntype ProgramID uint32\n\nconst (\n\t// Number of bytes to pad the output buffer for BPF_PROG_TEST_RUN.\n\t// This is currently the maximum of spare space allocated for SKB\n\t// and XDP programs, and equal to XDP_PACKET_HEADROOM + NET_IP_ALIGN.\n\toutputPad = 256 + 2\n)\n\n// minVerifierLogSize is the default number of bytes allocated for the\n// verifier log.\nconst minVerifierLogSize = 64 * 1024\n\n// maxVerifierLogSize is the maximum size of verifier log buffer the kernel\n// will accept before returning EINVAL. May be increased to MaxUint32 in the\n// future, but avoid the unnecessary EINVAL for now.\nconst maxVerifierLogSize = math.MaxUint32 >> 2\n\n// ProgramOptions control loading a program into the kernel.\ntype ProgramOptions struct {\n\t// Bitmap controlling the detail emitted by the kernel's eBPF verifier log.\n\t// LogLevel-type values can be ORed together to request specific kinds of\n\t// verifier output. See the documentation on [ebpf.LogLevel] for details.\n\t//\n\t//  opts.LogLevel = (ebpf.LogLevelBranch | ebpf.LogLevelStats)\n\t//\n\t// If left to its default value, the program will first be loaded without\n\t// verifier output enabled. Upon error, the program load will be repeated\n\t// with LogLevelBranch and the given (or default) LogSize value.\n\t//\n\t// Unless LogDisabled is set, setting this to a non-zero value will enable the verifier\n\t// log, populating the [ebpf.Program.VerifierLog] field on successful loads\n\t// and including detailed verifier errors if the program is rejected. This\n\t// will always allocate an output buffer, but will result in only a single\n\t// attempt at loading the program.\n\tLogLevel LogLevel\n\n\t// Starting size of the verifier log buffer. If the verifier log is larger\n\t// than this size, the buffer will be grown to fit the entire log. Leave at\n\t// its default value unless troubleshooting.\n\tLogSizeStart uint32\n\n\t// Disables the verifier log completely, regardless of other options.\n\tLogDisabled bool\n\n\t// Type information used for CO-RE relocations.\n\t//\n\t// This is useful in environments where the kernel BTF is not available\n\t// (containers) or where it is in a non-standard location. Defaults to\n\t// use the kernel BTF from a well-known location if nil.\n\tKernelTypes *btf.Spec\n\n\t// Type information used for CO-RE relocations of kernel modules,\n\t// indexed by module name.\n\t//\n\t// This is useful in environments where the kernel BTF is not available\n\t// (containers) or where it is in a non-standard location. Defaults to\n\t// use the kernel module BTF from a well-known location if nil.\n\tKernelModuleTypes map[string]*btf.Spec\n}\n\n// ProgramSpec defines a Program.\ntype ProgramSpec struct {\n\t// Name is passed to the kernel as a debug aid. Must only contain\n\t// alpha numeric and '_' characters.\n\tName string\n\n\t// Type determines at which hook in the kernel a program will run.\n\tType ProgramType\n\n\t// AttachType of the program, needed to differentiate allowed context\n\t// accesses in some newer program types like CGroupSockAddr.\n\t//\n\t// Available on kernels 4.17 and later.\n\tAttachType AttachType\n\n\t// Name of a kernel data structure or function to attach to. Its\n\t// interpretation depends on Type and AttachType.\n\tAttachTo string\n\n\t// The program to attach to. Must be provided manually.\n\tAttachTarget *Program\n\n\t// The name of the ELF section this program originated from.\n\tSectionName string\n\n\tInstructions asm.Instructions\n\n\t// Flags is passed to the kernel and specifies additional program\n\t// load attributes.\n\tFlags uint32\n\n\t// License of the program. Some helpers are only available if\n\t// the license is deemed compatible with the GPL.\n\t//\n\t// See https://www.kernel.org/doc/html/latest/process/license-rules.html#id1\n\tLicense string\n\n\t// Version used by Kprobe programs.\n\t//\n\t// Deprecated on kernels 5.0 and later. Leave empty to let the library\n\t// detect this value automatically.\n\tKernelVersion uint32\n\n\t// The byte order this program was compiled for, may be nil.\n\tByteOrder binary.ByteOrder\n}\n\n// Copy returns a copy of the spec.\nfunc (ps *ProgramSpec) Copy() *ProgramSpec {\n\tif ps == nil {\n\t\treturn nil\n\t}\n\n\tcpy := *ps\n\tcpy.Instructions = make(asm.Instructions, len(ps.Instructions))\n\tcopy(cpy.Instructions, ps.Instructions)\n\treturn &cpy\n}\n\n// Tag calculates the kernel tag for a series of instructions.\n//\n// Use asm.Instructions.Tag if you need to calculate for non-native endianness.\nfunc (ps *ProgramSpec) Tag() (string, error) {\n\treturn ps.Instructions.Tag(internal.NativeEndian)\n}\n\n// kernelModule returns the kernel module providing the symbol in\n// ProgramSpec.AttachTo, if any. Returns an empty string if the symbol is not\n// present or not part of a kernel module.\nfunc (ps *ProgramSpec) kernelModule() (string, error) {\n\tif ps.targetsKernelModule() {\n\t\treturn kallsyms.Module(ps.AttachTo)\n\t}\n\n\treturn \"\", nil\n}\n\n// targetsKernelModule returns true if the program supports being attached to a\n// symbol provided by a kernel module.\nfunc (ps *ProgramSpec) targetsKernelModule() bool {\n\tif ps.AttachTo == \"\" {\n\t\treturn false\n\t}\n\n\tswitch ps.Type {\n\tcase Tracing:\n\t\tswitch ps.AttachType {\n\t\tcase AttachTraceFEntry, AttachTraceFExit:\n\t\t\treturn true\n\t\t}\n\tcase Kprobe:\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// VerifierError is returned by [NewProgram] and [NewProgramWithOptions] if a\n// program is rejected by the verifier.\n//\n// Use [errors.As] to access the error.\ntype VerifierError = internal.VerifierError\n\n// Program represents BPF program loaded into the kernel.\n//\n// It is not safe to close a Program which is used by other goroutines.\ntype Program struct {\n\t// Contains the output of the kernel verifier if enabled,\n\t// otherwise it is empty.\n\tVerifierLog string\n\n\tfd         *sys.FD\n\tname       string\n\tpinnedPath string\n\ttyp        ProgramType\n}\n\n// NewProgram creates a new Program.\n//\n// See [NewProgramWithOptions] for details.\n//\n// Returns a [VerifierError] containing the full verifier log if the program is\n// rejected by the kernel.\nfunc NewProgram(spec *ProgramSpec) (*Program, error) {\n\treturn NewProgramWithOptions(spec, ProgramOptions{})\n}\n\n// NewProgramWithOptions creates a new Program.\n//\n// Loading a program for the first time will perform\n// feature detection by loading small, temporary programs.\n//\n// Returns a [VerifierError] containing the full verifier log if the program is\n// rejected by the kernel.\nfunc NewProgramWithOptions(spec *ProgramSpec, opts ProgramOptions) (*Program, error) {\n\tif spec == nil {\n\t\treturn nil, errors.New(\"can't load a program from a nil spec\")\n\t}\n\n\tprog, err := newProgramWithOptions(spec, opts)\n\tif errors.Is(err, asm.ErrUnsatisfiedMapReference) {\n\t\treturn nil, fmt.Errorf(\"cannot load program without loading its whole collection: %w\", err)\n\t}\n\treturn prog, err\n}\n\nvar (\n\tcoreBadLoad = []byte(fmt.Sprintf(\"(18) r10 = 0x%x\\n\", btf.COREBadRelocationSentinel))\n\t// This log message was introduced by ebb676daa1a3 (\"bpf: Print function name in\n\t// addition to function id\") which first appeared in v4.10 and has remained\n\t// unchanged since.\n\tcoreBadCall  = []byte(fmt.Sprintf(\"invalid func unknown#%d\\n\", btf.COREBadRelocationSentinel))\n\tkfuncBadCall = []byte(fmt.Sprintf(\"invalid func unknown#%d\\n\", kfuncCallPoisonBase))\n)\n\nfunc newProgramWithOptions(spec *ProgramSpec, opts ProgramOptions) (*Program, error) {\n\tif len(spec.Instructions) == 0 {\n\t\treturn nil, errors.New(\"instructions cannot be empty\")\n\t}\n\n\tif spec.Type == UnspecifiedProgram {\n\t\treturn nil, errors.New(\"can't load program of unspecified type\")\n\t}\n\n\tif spec.ByteOrder != nil && spec.ByteOrder != internal.NativeEndian {\n\t\treturn nil, fmt.Errorf(\"can't load %s program on %s\", spec.ByteOrder, internal.NativeEndian)\n\t}\n\n\t// Kernels before 5.0 (6c4fc209fcf9 \"bpf: remove useless version check for prog load\")\n\t// require the version field to be set to the value of the KERNEL_VERSION\n\t// macro for kprobe-type programs.\n\t// Overwrite Kprobe program version if set to zero or the magic version constant.\n\tkv := spec.KernelVersion\n\tif spec.Type == Kprobe && (kv == 0 || kv == internal.MagicKernelVersion) {\n\t\tv, err := linux.KernelVersion()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"detecting kernel version: %w\", err)\n\t\t}\n\t\tkv = v.Kernel()\n\t}\n\n\tattr := &sys.ProgLoadAttr{\n\t\tProgType:           sys.ProgType(spec.Type),\n\t\tProgFlags:          spec.Flags,\n\t\tExpectedAttachType: sys.AttachType(spec.AttachType),\n\t\tLicense:            sys.NewStringPointer(spec.License),\n\t\tKernVersion:        kv,\n\t}\n\n\tif haveObjName() == nil {\n\t\tattr.ProgName = sys.NewObjName(spec.Name)\n\t}\n\n\tinsns := make(asm.Instructions, len(spec.Instructions))\n\tcopy(insns, spec.Instructions)\n\n\tkmodName, err := spec.kernelModule()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"kernel module search: %w\", err)\n\t}\n\n\tvar targets []*btf.Spec\n\tif opts.KernelTypes != nil {\n\t\ttargets = append(targets, opts.KernelTypes)\n\t}\n\tif kmodName != \"\" && opts.KernelModuleTypes != nil {\n\t\tif modBTF, ok := opts.KernelModuleTypes[kmodName]; ok {\n\t\t\ttargets = append(targets, modBTF)\n\t\t}\n\t}\n\n\tvar b btf.Builder\n\tif err := applyRelocations(insns, targets, kmodName, spec.ByteOrder, &b); err != nil {\n\t\treturn nil, fmt.Errorf(\"apply CO-RE relocations: %w\", err)\n\t}\n\n\terrExtInfos := haveProgramExtInfos()\n\tif !b.Empty() && errors.Is(errExtInfos, ErrNotSupported) {\n\t\t// There is at least one CO-RE relocation which relies on a stable local\n\t\t// type ID.\n\t\t// Return ErrNotSupported instead of E2BIG if there is no BTF support.\n\t\treturn nil, errExtInfos\n\t}\n\n\tif errExtInfos == nil {\n\t\t// Only add func and line info if the kernel supports it. This allows\n\t\t// BPF compiled with modern toolchains to work on old kernels.\n\t\tfib, lib, err := btf.MarshalExtInfos(insns, &b)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"marshal ext_infos: %w\", err)\n\t\t}\n\n\t\tattr.FuncInfoRecSize = btf.FuncInfoSize\n\t\tattr.FuncInfoCnt = uint32(len(fib)) / btf.FuncInfoSize\n\t\tattr.FuncInfo = sys.NewSlicePointer(fib)\n\n\t\tattr.LineInfoRecSize = btf.LineInfoSize\n\t\tattr.LineInfoCnt = uint32(len(lib)) / btf.LineInfoSize\n\t\tattr.LineInfo = sys.NewSlicePointer(lib)\n\t}\n\n\tif !b.Empty() {\n\t\thandle, err := btf.NewHandle(&b)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"load BTF: %w\", err)\n\t\t}\n\t\tdefer handle.Close()\n\n\t\tattr.ProgBtfFd = uint32(handle.FD())\n\t}\n\n\tkconfig, err := resolveKconfigReferences(insns)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"resolve .kconfig: %w\", err)\n\t}\n\tdefer kconfig.Close()\n\n\tif err := resolveKsymReferences(insns); err != nil {\n\t\treturn nil, fmt.Errorf(\"resolve .ksyms: %w\", err)\n\t}\n\n\tif err := fixupAndValidate(insns); err != nil {\n\t\treturn nil, err\n\t}\n\n\thandles, err := fixupKfuncs(insns)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"fixing up kfuncs: %w\", err)\n\t}\n\tdefer handles.Close()\n\n\tif len(handles) > 0 {\n\t\tfdArray := handles.fdArray()\n\t\tattr.FdArray = sys.NewPointer(unsafe.Pointer(&fdArray[0]))\n\t}\n\n\tbuf := bytes.NewBuffer(make([]byte, 0, insns.Size()))\n\terr = insns.Marshal(buf, internal.NativeEndian)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbytecode := buf.Bytes()\n\tattr.Insns = sys.NewSlicePointer(bytecode)\n\tattr.InsnCnt = uint32(len(bytecode) / asm.InstructionSize)\n\n\tif spec.AttachTarget != nil {\n\t\ttargetID, err := findTargetInProgram(spec.AttachTarget, spec.AttachTo, spec.Type, spec.AttachType)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"attach %s/%s: %w\", spec.Type, spec.AttachType, err)\n\t\t}\n\n\t\tattr.AttachBtfId = targetID\n\t\tattr.AttachBtfObjFd = uint32(spec.AttachTarget.FD())\n\t\tdefer runtime.KeepAlive(spec.AttachTarget)\n\t} else if spec.AttachTo != \"\" {\n\t\tmodule, targetID, err := findProgramTargetInKernel(spec.AttachTo, spec.Type, spec.AttachType)\n\t\tif err != nil && !errors.Is(err, errUnrecognizedAttachType) {\n\t\t\t// We ignore errUnrecognizedAttachType since AttachTo may be non-empty\n\t\t\t// for programs that don't attach anywhere.\n\t\t\treturn nil, fmt.Errorf(\"attach %s/%s: %w\", spec.Type, spec.AttachType, err)\n\t\t}\n\n\t\tattr.AttachBtfId = targetID\n\t\tif module != nil {\n\t\t\tattr.AttachBtfObjFd = uint32(module.FD())\n\t\t\tdefer module.Close()\n\t\t}\n\t}\n\n\t// The caller requested a specific verifier log level. Set up the log buffer\n\t// so that there is a chance of loading the program in a single shot.\n\tlogSize := internal.Between(opts.LogSizeStart, minVerifierLogSize, maxVerifierLogSize)\n\tvar logBuf []byte\n\tif !opts.LogDisabled && opts.LogLevel != 0 {\n\t\tlogBuf = make([]byte, logSize)\n\t\tattr.LogLevel = opts.LogLevel\n\t\tattr.LogSize = uint32(len(logBuf))\n\t\tattr.LogBuf = sys.NewSlicePointer(logBuf)\n\t}\n\n\tfor {\n\t\tvar fd *sys.FD\n\t\tfd, err = sys.ProgLoad(attr)\n\t\tif err == nil {\n\t\t\treturn &Program{unix.ByteSliceToString(logBuf), fd, spec.Name, \"\", spec.Type}, nil\n\t\t}\n\n\t\tif opts.LogDisabled {\n\t\t\tbreak\n\t\t}\n\n\t\tif attr.LogTrueSize != 0 && attr.LogSize >= attr.LogTrueSize {\n\t\t\t// The log buffer already has the correct size.\n\t\t\tbreak\n\t\t}\n\n\t\tif attr.LogSize != 0 && !errors.Is(err, unix.ENOSPC) {\n\t\t\t// Logging is enabled and the error is not ENOSPC, so we can infer\n\t\t\t// that the log buffer is large enough.\n\t\t\tbreak\n\t\t}\n\n\t\tif attr.LogLevel == 0 {\n\t\t\t// Logging is not enabled but loading the program failed. Enable\n\t\t\t// basic logging.\n\t\t\tattr.LogLevel = LogLevelBranch\n\t\t}\n\n\t\t// Make an educated guess how large the buffer should be by multiplying.\n\t\t// Ensure the size doesn't overflow.\n\t\tconst factor = 2\n\t\tlogSize = internal.Between(logSize, minVerifierLogSize, maxVerifierLogSize/factor)\n\t\tlogSize *= factor\n\n\t\tif attr.LogTrueSize != 0 {\n\t\t\t// The kernel has given us a hint how large the log buffer has to be.\n\t\t\tlogSize = attr.LogTrueSize\n\t\t}\n\n\t\tlogBuf = make([]byte, logSize)\n\t\tattr.LogSize = logSize\n\t\tattr.LogBuf = sys.NewSlicePointer(logBuf)\n\t}\n\n\tend := bytes.IndexByte(logBuf, 0)\n\tif end < 0 {\n\t\tend = len(logBuf)\n\t}\n\n\ttail := logBuf[max(end-256, 0):end]\n\tswitch {\n\tcase errors.Is(err, unix.EPERM):\n\t\tif len(logBuf) > 0 && logBuf[0] == 0 {\n\t\t\t// EPERM due to RLIMIT_MEMLOCK happens before the verifier, so we can\n\t\t\t// check that the log is empty to reduce false positives.\n\t\t\treturn nil, fmt.Errorf(\"load program: %w (MEMLOCK may be too low, consider rlimit.RemoveMemlock)\", err)\n\t\t}\n\n\tcase errors.Is(err, unix.EFAULT):\n\t\t// EFAULT is returned when the kernel hits a verifier bug, and always\n\t\t// overrides ENOSPC, defeating the buffer growth strategy. Warn the user\n\t\t// that they may need to increase the buffer size manually.\n\t\treturn nil, fmt.Errorf(\"load program: %w (hit verifier bug, increase LogSizeStart to fit the log and check dmesg)\", err)\n\n\tcase errors.Is(err, unix.EINVAL):\n\t\tif bytes.Contains(tail, coreBadCall) {\n\t\t\terr = errBadRelocation\n\t\t\tbreak\n\t\t} else if bytes.Contains(tail, kfuncBadCall) {\n\t\t\terr = errUnknownKfunc\n\t\t\tbreak\n\t\t}\n\n\tcase errors.Is(err, unix.EACCES):\n\t\tif bytes.Contains(tail, coreBadLoad) {\n\t\t\terr = errBadRelocation\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// hasFunctionReferences may be expensive, so check it last.\n\tif (errors.Is(err, unix.EINVAL) || errors.Is(err, unix.EPERM)) &&\n\t\thasFunctionReferences(spec.Instructions) {\n\t\tif err := haveBPFToBPFCalls(); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"load program: %w\", err)\n\t\t}\n\t}\n\n\treturn nil, internal.ErrorWithLog(\"load program\", err, logBuf)\n}\n\n// NewProgramFromFD creates a program from a raw fd.\n//\n// You should not use fd after calling this function.\n//\n// Requires at least Linux 4.10.\nfunc NewProgramFromFD(fd int) (*Program, error) {\n\tf, err := sys.NewFD(fd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn newProgramFromFD(f)\n}\n\n// NewProgramFromID returns the program for a given id.\n//\n// Returns ErrNotExist, if there is no eBPF program with the given id.\nfunc NewProgramFromID(id ProgramID) (*Program, error) {\n\tfd, err := sys.ProgGetFdById(&sys.ProgGetFdByIdAttr{\n\t\tId: uint32(id),\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get program by id: %w\", err)\n\t}\n\n\treturn newProgramFromFD(fd)\n}\n\nfunc newProgramFromFD(fd *sys.FD) (*Program, error) {\n\tinfo, err := newProgramInfoFromFd(fd)\n\tif err != nil {\n\t\tfd.Close()\n\t\treturn nil, fmt.Errorf(\"discover program type: %w\", err)\n\t}\n\n\treturn &Program{\"\", fd, info.Name, \"\", info.Type}, nil\n}\n\nfunc (p *Program) String() string {\n\tif p.name != \"\" {\n\t\treturn fmt.Sprintf(\"%s(%s)#%v\", p.typ, p.name, p.fd)\n\t}\n\treturn fmt.Sprintf(\"%s(%v)\", p.typ, p.fd)\n}\n\n// Type returns the underlying type of the program.\nfunc (p *Program) Type() ProgramType {\n\treturn p.typ\n}\n\n// Info returns metadata about the program.\n//\n// Requires at least 4.10.\nfunc (p *Program) Info() (*ProgramInfo, error) {\n\treturn newProgramInfoFromFd(p.fd)\n}\n\n// Handle returns a reference to the program's type information in the kernel.\n//\n// Returns ErrNotSupported if the kernel has no BTF support, or if there is no\n// BTF associated with the program.\nfunc (p *Program) Handle() (*btf.Handle, error) {\n\tinfo, err := p.Info()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tid, ok := info.BTFID()\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"program %s: retrieve BTF ID: %w\", p, ErrNotSupported)\n\t}\n\n\treturn btf.NewHandleFromID(id)\n}\n\n// FD gets the file descriptor of the Program.\n//\n// It is invalid to call this function after Close has been called.\nfunc (p *Program) FD() int {\n\treturn p.fd.Int()\n}\n\n// Clone creates a duplicate of the Program.\n//\n// Closing the duplicate does not affect the original, and vice versa.\n//\n// Cloning a nil Program returns nil.\nfunc (p *Program) Clone() (*Program, error) {\n\tif p == nil {\n\t\treturn nil, nil\n\t}\n\n\tdup, err := p.fd.Dup()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't clone program: %w\", err)\n\t}\n\n\treturn &Program{p.VerifierLog, dup, p.name, \"\", p.typ}, nil\n}\n\n// Pin persists the Program on the BPF virtual file system past the lifetime of\n// the process that created it\n//\n// Calling Pin on a previously pinned program will overwrite the path, except when\n// the new path already exists. Re-pinning across filesystems is not supported.\n//\n// This requires bpffs to be mounted above fileName.\n// See https://docs.cilium.io/en/stable/network/kubernetes/configuration/#mounting-bpffs-with-systemd\nfunc (p *Program) Pin(fileName string) error {\n\tif err := sys.Pin(p.pinnedPath, fileName, p.fd); err != nil {\n\t\treturn err\n\t}\n\tp.pinnedPath = fileName\n\treturn nil\n}\n\n// Unpin removes the persisted state for the Program from the BPF virtual filesystem.\n//\n// Failed calls to Unpin will not alter the state returned by IsPinned.\n//\n// Unpinning an unpinned Program returns nil.\nfunc (p *Program) Unpin() error {\n\tif err := sys.Unpin(p.pinnedPath); err != nil {\n\t\treturn err\n\t}\n\tp.pinnedPath = \"\"\n\treturn nil\n}\n\n// IsPinned returns true if the Program has a non-empty pinned path.\nfunc (p *Program) IsPinned() bool {\n\treturn p.pinnedPath != \"\"\n}\n\n// Close the Program's underlying file descriptor, which could unload\n// the program from the kernel if it is not pinned or attached to a\n// kernel hook.\nfunc (p *Program) Close() error {\n\tif p == nil {\n\t\treturn nil\n\t}\n\n\treturn p.fd.Close()\n}\n\n// Various options for Run'ing a Program\ntype RunOptions struct {\n\t// Program's data input. Required field.\n\t//\n\t// The kernel expects at least 14 bytes input for an ethernet header for\n\t// XDP and SKB programs.\n\tData []byte\n\t// Program's data after Program has run. Caller must allocate. Optional field.\n\tDataOut []byte\n\t// Program's context input. Optional field.\n\tContext interface{}\n\t// Program's context after Program has run. Must be a pointer or slice. Optional field.\n\tContextOut interface{}\n\t// Minimum number of times to run Program. Optional field. Defaults to 1.\n\t//\n\t// The program may be executed more often than this due to interruptions, e.g.\n\t// when runtime.AllThreadsSyscall is invoked.\n\tRepeat uint32\n\t// Optional flags.\n\tFlags uint32\n\t// CPU to run Program on. Optional field.\n\t// Note not all program types support this field.\n\tCPU uint32\n\t// Called whenever the syscall is interrupted, and should be set to testing.B.ResetTimer\n\t// or similar. Typically used during benchmarking. Optional field.\n\t//\n\t// Deprecated: use [testing.B.ReportMetric] with unit \"ns/op\" instead.\n\tReset func()\n}\n\n// Test runs the Program in the kernel with the given input and returns the\n// value returned by the eBPF program.\n//\n// Note: the kernel expects at least 14 bytes input for an ethernet header for\n// XDP and SKB programs.\n//\n// This function requires at least Linux 4.12.\nfunc (p *Program) Test(in []byte) (uint32, []byte, error) {\n\t// Older kernels ignore the dataSizeOut argument when copying to user space.\n\t// Combined with things like bpf_xdp_adjust_head() we don't really know what the final\n\t// size will be. Hence we allocate an output buffer which we hope will always be large\n\t// enough, and panic if the kernel wrote past the end of the allocation.\n\t// See https://patchwork.ozlabs.org/cover/1006822/\n\tvar out []byte\n\tif len(in) > 0 {\n\t\tout = make([]byte, len(in)+outputPad)\n\t}\n\n\topts := RunOptions{\n\t\tData:    in,\n\t\tDataOut: out,\n\t\tRepeat:  1,\n\t}\n\n\tret, _, err := p.run(&opts)\n\tif err != nil {\n\t\treturn ret, nil, fmt.Errorf(\"test program: %w\", err)\n\t}\n\treturn ret, opts.DataOut, nil\n}\n\n// Run runs the Program in kernel with given RunOptions.\n//\n// Note: the same restrictions from Test apply.\nfunc (p *Program) Run(opts *RunOptions) (uint32, error) {\n\tif opts == nil {\n\t\topts = &RunOptions{}\n\t}\n\n\tret, _, err := p.run(opts)\n\tif err != nil {\n\t\treturn ret, fmt.Errorf(\"run program: %w\", err)\n\t}\n\treturn ret, nil\n}\n\n// Benchmark runs the Program with the given input for a number of times\n// and returns the time taken per iteration.\n//\n// Returns the result of the last execution of the program and the time per\n// run or an error. reset is called whenever the benchmark syscall is\n// interrupted, and should be set to testing.B.ResetTimer or similar.\n//\n// This function requires at least Linux 4.12.\nfunc (p *Program) Benchmark(in []byte, repeat int, reset func()) (uint32, time.Duration, error) {\n\tif uint(repeat) > math.MaxUint32 {\n\t\treturn 0, 0, fmt.Errorf(\"repeat is too high\")\n\t}\n\n\topts := RunOptions{\n\t\tData:   in,\n\t\tRepeat: uint32(repeat),\n\t\tReset:  reset,\n\t}\n\n\tret, total, err := p.run(&opts)\n\tif err != nil {\n\t\treturn ret, total, fmt.Errorf(\"benchmark program: %w\", err)\n\t}\n\treturn ret, total, nil\n}\n\nvar haveProgRun = internal.NewFeatureTest(\"BPF_PROG_RUN\", func() error {\n\tprog, err := NewProgram(&ProgramSpec{\n\t\t// SocketFilter does not require privileges on newer kernels.\n\t\tType: SocketFilter,\n\t\tInstructions: asm.Instructions{\n\t\t\tasm.LoadImm(asm.R0, 0, asm.DWord),\n\t\t\tasm.Return(),\n\t\t},\n\t\tLicense: \"MIT\",\n\t})\n\tif err != nil {\n\t\t// This may be because we lack sufficient permissions, etc.\n\t\treturn err\n\t}\n\tdefer prog.Close()\n\n\tin := internal.EmptyBPFContext\n\tattr := sys.ProgRunAttr{\n\t\tProgFd:     uint32(prog.FD()),\n\t\tDataSizeIn: uint32(len(in)),\n\t\tDataIn:     sys.NewSlicePointer(in),\n\t}\n\n\terr = sys.ProgRun(&attr)\n\tswitch {\n\tcase errors.Is(err, unix.EINVAL):\n\t\t// Check for EINVAL specifically, rather than err != nil since we\n\t\t// otherwise misdetect due to insufficient permissions.\n\t\treturn internal.ErrNotSupported\n\n\tcase errors.Is(err, unix.EINTR):\n\t\t// We know that PROG_TEST_RUN is supported if we get EINTR.\n\t\treturn nil\n\n\tcase errors.Is(err, sys.ENOTSUPP):\n\t\t// The first PROG_TEST_RUN patches shipped in 4.12 didn't include\n\t\t// a test runner for SocketFilter. ENOTSUPP means PROG_TEST_RUN is\n\t\t// supported, but not for the program type used in the probe.\n\t\treturn nil\n\t}\n\n\treturn err\n}, \"4.12\")\n\nfunc (p *Program) run(opts *RunOptions) (uint32, time.Duration, error) {\n\tif uint(len(opts.Data)) > math.MaxUint32 {\n\t\treturn 0, 0, fmt.Errorf(\"input is too long\")\n\t}\n\n\tif err := haveProgRun(); err != nil {\n\t\treturn 0, 0, err\n\t}\n\n\tvar ctxBytes []byte\n\tif opts.Context != nil {\n\t\tctx := new(bytes.Buffer)\n\t\tif err := binary.Write(ctx, internal.NativeEndian, opts.Context); err != nil {\n\t\t\treturn 0, 0, fmt.Errorf(\"cannot serialize context: %v\", err)\n\t\t}\n\t\tctxBytes = ctx.Bytes()\n\t}\n\n\tvar ctxOut []byte\n\tif opts.ContextOut != nil {\n\t\tctxOut = make([]byte, binary.Size(opts.ContextOut))\n\t}\n\n\tattr := sys.ProgRunAttr{\n\t\tProgFd:      p.fd.Uint(),\n\t\tDataSizeIn:  uint32(len(opts.Data)),\n\t\tDataSizeOut: uint32(len(opts.DataOut)),\n\t\tDataIn:      sys.NewSlicePointer(opts.Data),\n\t\tDataOut:     sys.NewSlicePointer(opts.DataOut),\n\t\tRepeat:      uint32(opts.Repeat),\n\t\tCtxSizeIn:   uint32(len(ctxBytes)),\n\t\tCtxSizeOut:  uint32(len(ctxOut)),\n\t\tCtxIn:       sys.NewSlicePointer(ctxBytes),\n\t\tCtxOut:      sys.NewSlicePointer(ctxOut),\n\t\tFlags:       opts.Flags,\n\t\tCpu:         opts.CPU,\n\t}\n\nretry:\n\tfor {\n\t\terr := sys.ProgRun(&attr)\n\t\tif err == nil {\n\t\t\tbreak retry\n\t\t}\n\n\t\tif errors.Is(err, unix.EINTR) {\n\t\t\tif attr.Repeat <= 1 {\n\t\t\t\t// Older kernels check whether enough repetitions have been\n\t\t\t\t// executed only after checking for pending signals.\n\t\t\t\t//\n\t\t\t\t//     run signal? done? run ...\n\t\t\t\t//\n\t\t\t\t// As a result we can get EINTR for repeat==1 even though\n\t\t\t\t// the program was run exactly once. Treat this as a\n\t\t\t\t// successful run instead.\n\t\t\t\t//\n\t\t\t\t// Since commit 607b9cc92bd7 (\"bpf: Consolidate shared test timing code\")\n\t\t\t\t// the conditions are reversed:\n\t\t\t\t//     run done? signal? ...\n\t\t\t\tbreak retry\n\t\t\t}\n\n\t\t\tif opts.Reset != nil {\n\t\t\t\topts.Reset()\n\t\t\t}\n\t\t\tcontinue retry\n\t\t}\n\n\t\tif errors.Is(err, sys.ENOTSUPP) {\n\t\t\treturn 0, 0, fmt.Errorf(\"kernel doesn't support running %s: %w\", p.Type(), ErrNotSupported)\n\t\t}\n\n\t\treturn 0, 0, err\n\t}\n\n\tif opts.DataOut != nil {\n\t\tif int(attr.DataSizeOut) > cap(opts.DataOut) {\n\t\t\t// Houston, we have a problem. The program created more data than we allocated,\n\t\t\t// and the kernel wrote past the end of our buffer.\n\t\t\tpanic(\"kernel wrote past end of output buffer\")\n\t\t}\n\t\topts.DataOut = opts.DataOut[:int(attr.DataSizeOut)]\n\t}\n\n\tif len(ctxOut) != 0 {\n\t\tb := bytes.NewReader(ctxOut)\n\t\tif err := binary.Read(b, internal.NativeEndian, opts.ContextOut); err != nil {\n\t\t\treturn 0, 0, fmt.Errorf(\"failed to decode ContextOut: %v\", err)\n\t\t}\n\t}\n\n\ttotal := time.Duration(attr.Duration) * time.Nanosecond\n\treturn attr.Retval, total, nil\n}\n\nfunc unmarshalProgram(buf sysenc.Buffer) (*Program, error) {\n\tvar id uint32\n\tif err := buf.Unmarshal(&id); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Looking up an entry in a nested map or prog array returns an id,\n\t// not an fd.\n\treturn NewProgramFromID(ProgramID(id))\n}\n\nfunc marshalProgram(p *Program, length int) ([]byte, error) {\n\tif p == nil {\n\t\treturn nil, errors.New(\"can't marshal a nil Program\")\n\t}\n\n\tif length != 4 {\n\t\treturn nil, fmt.Errorf(\"can't marshal program to %d bytes\", length)\n\t}\n\n\tbuf := make([]byte, 4)\n\tinternal.NativeEndian.PutUint32(buf, p.fd.Uint())\n\treturn buf, nil\n}\n\n// LoadPinnedProgram loads a Program from a pin (file) on the BPF virtual\n// filesystem.\n//\n// Requires at least Linux 4.11.\nfunc LoadPinnedProgram(fileName string, opts *LoadPinOptions) (*Program, error) {\n\tfd, typ, err := sys.ObjGetTyped(&sys.ObjGetAttr{\n\t\tPathname:  sys.NewStringPointer(fileName),\n\t\tFileFlags: opts.Marshal(),\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif typ != sys.BPF_TYPE_PROG {\n\t\t_ = fd.Close()\n\t\treturn nil, fmt.Errorf(\"%s is not a Program\", fileName)\n\t}\n\n\tinfo, err := newProgramInfoFromFd(fd)\n\tif err != nil {\n\t\t_ = fd.Close()\n\t\treturn nil, fmt.Errorf(\"info for %s: %w\", fileName, err)\n\t}\n\n\tvar progName string\n\tif haveObjName() == nil {\n\t\tprogName = info.Name\n\t} else {\n\t\tprogName = filepath.Base(fileName)\n\t}\n\n\treturn &Program{\"\", fd, progName, fileName, info.Type}, nil\n}\n\n// SanitizeName replaces all invalid characters in name with replacement.\n// Passing a negative value for replacement will delete characters instead\n// of replacing them. Use this to automatically generate valid names for maps\n// and programs at runtime.\n//\n// The set of allowed characters depends on the running kernel version.\n// Dots are only allowed as of kernel 5.2.\nfunc SanitizeName(name string, replacement rune) string {\n\treturn strings.Map(func(char rune) rune {\n\t\tif invalidBPFObjNameChar(char) {\n\t\t\treturn replacement\n\t\t}\n\t\treturn char\n\t}, name)\n}\n\n// ProgramGetNextID returns the ID of the next eBPF program.\n//\n// Returns ErrNotExist, if there is no next eBPF program.\nfunc ProgramGetNextID(startID ProgramID) (ProgramID, error) {\n\tattr := &sys.ProgGetNextIdAttr{Id: uint32(startID)}\n\treturn ProgramID(attr.NextId), sys.ProgGetNextId(attr)\n}\n\n// BindMap binds map to the program and is only released once program is released.\n//\n// This may be used in cases where metadata should be associated with the program\n// which otherwise does not contain any references to the map.\nfunc (p *Program) BindMap(m *Map) error {\n\tattr := &sys.ProgBindMapAttr{\n\t\tProgFd: uint32(p.FD()),\n\t\tMapFd:  uint32(m.FD()),\n\t}\n\n\treturn sys.ProgBindMap(attr)\n}\n\nvar errUnrecognizedAttachType = errors.New(\"unrecognized attach type\")\n\n// find an attach target type in the kernel.\n//\n// name, progType and attachType determine which type we need to attach to.\n//\n// The attach target may be in a loaded kernel module.\n// In that case the returned handle will be non-nil.\n// The caller is responsible for closing the handle.\n//\n// Returns errUnrecognizedAttachType if the combination of progType and attachType\n// is not recognised.\nfunc findProgramTargetInKernel(name string, progType ProgramType, attachType AttachType) (*btf.Handle, btf.TypeID, error) {\n\ttype match struct {\n\t\tp ProgramType\n\t\ta AttachType\n\t}\n\n\tvar (\n\t\ttypeName, featureName string\n\t\ttarget                btf.Type\n\t)\n\n\tswitch (match{progType, attachType}) {\n\tcase match{LSM, AttachLSMMac}:\n\t\ttypeName = \"bpf_lsm_\" + name\n\t\tfeatureName = name + \" LSM hook\"\n\t\ttarget = (*btf.Func)(nil)\n\tcase match{Tracing, AttachTraceIter}:\n\t\ttypeName = \"bpf_iter_\" + name\n\t\tfeatureName = name + \" iterator\"\n\t\ttarget = (*btf.Func)(nil)\n\tcase match{Tracing, AttachTraceFEntry}:\n\t\ttypeName = name\n\t\tfeatureName = fmt.Sprintf(\"fentry %s\", name)\n\t\ttarget = (*btf.Func)(nil)\n\tcase match{Tracing, AttachTraceFExit}:\n\t\ttypeName = name\n\t\tfeatureName = fmt.Sprintf(\"fexit %s\", name)\n\t\ttarget = (*btf.Func)(nil)\n\tcase match{Tracing, AttachModifyReturn}:\n\t\ttypeName = name\n\t\tfeatureName = fmt.Sprintf(\"fmod_ret %s\", name)\n\t\ttarget = (*btf.Func)(nil)\n\tcase match{Tracing, AttachTraceRawTp}:\n\t\ttypeName = fmt.Sprintf(\"btf_trace_%s\", name)\n\t\tfeatureName = fmt.Sprintf(\"raw_tp %s\", name)\n\t\ttarget = (*btf.Typedef)(nil)\n\tdefault:\n\t\treturn nil, 0, errUnrecognizedAttachType\n\t}\n\n\tspec, err := btf.LoadKernelSpec()\n\tif err != nil {\n\t\treturn nil, 0, fmt.Errorf(\"load kernel spec: %w\", err)\n\t}\n\n\tspec, module, err := findTargetInKernel(spec, typeName, &target)\n\tif errors.Is(err, btf.ErrNotFound) {\n\t\treturn nil, 0, &internal.UnsupportedFeatureError{Name: featureName}\n\t}\n\t// See cilium/ebpf#894. Until we can disambiguate between equally-named kernel\n\t// symbols, we should explicitly refuse program loads. They will not reliably\n\t// do what the caller intended.\n\tif errors.Is(err, btf.ErrMultipleMatches) {\n\t\treturn nil, 0, fmt.Errorf(\"attaching to ambiguous kernel symbol is not supported: %w\", err)\n\t}\n\tif err != nil {\n\t\treturn nil, 0, fmt.Errorf(\"find target for %s: %w\", featureName, err)\n\t}\n\n\tid, err := spec.TypeID(target)\n\tif err != nil {\n\t\tmodule.Close()\n\t\treturn nil, 0, err\n\t}\n\n\treturn module, id, nil\n}\n\n// findTargetInKernel attempts to find a named type in the current kernel.\n//\n// target will point at the found type after a successful call. Searches both\n// vmlinux and any loaded modules.\n//\n// Returns a non-nil handle if the type was found in a module, or btf.ErrNotFound\n// if the type wasn't found at all.\nfunc findTargetInKernel(kernelSpec *btf.Spec, typeName string, target *btf.Type) (*btf.Spec, *btf.Handle, error) {\n\terr := kernelSpec.TypeByName(typeName, target)\n\tif errors.Is(err, btf.ErrNotFound) {\n\t\tspec, module, err := findTargetInModule(kernelSpec, typeName, target)\n\t\tif err != nil {\n\t\t\treturn nil, nil, fmt.Errorf(\"find target in modules: %w\", err)\n\t\t}\n\t\treturn spec, module, nil\n\t}\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"find target in vmlinux: %w\", err)\n\t}\n\treturn kernelSpec, nil, err\n}\n\n// findTargetInModule attempts to find a named type in any loaded module.\n//\n// base must contain the kernel's types and is used to parse kmod BTF. Modules\n// are searched in the order they were loaded.\n//\n// Returns btf.ErrNotFound if the target can't be found in any module.\nfunc findTargetInModule(base *btf.Spec, typeName string, target *btf.Type) (*btf.Spec, *btf.Handle, error) {\n\tit := new(btf.HandleIterator)\n\tdefer it.Handle.Close()\n\n\tfor it.Next() {\n\t\tinfo, err := it.Handle.Info()\n\t\tif err != nil {\n\t\t\treturn nil, nil, fmt.Errorf(\"get info for BTF ID %d: %w\", it.ID, err)\n\t\t}\n\n\t\tif !info.IsModule() {\n\t\t\tcontinue\n\t\t}\n\n\t\tspec, err := it.Handle.Spec(base)\n\t\tif err != nil {\n\t\t\treturn nil, nil, fmt.Errorf(\"parse types for module %s: %w\", info.Name, err)\n\t\t}\n\n\t\terr = spec.TypeByName(typeName, target)\n\t\tif errors.Is(err, btf.ErrNotFound) {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, nil, fmt.Errorf(\"lookup type in module %s: %w\", info.Name, err)\n\t\t}\n\n\t\treturn spec, it.Take(), nil\n\t}\n\tif err := it.Err(); err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"iterate modules: %w\", err)\n\t}\n\n\treturn nil, nil, btf.ErrNotFound\n}\n\n// find an attach target type in a program.\n//\n// Returns errUnrecognizedAttachType.\nfunc findTargetInProgram(prog *Program, name string, progType ProgramType, attachType AttachType) (btf.TypeID, error) {\n\ttype match struct {\n\t\tp ProgramType\n\t\ta AttachType\n\t}\n\n\tvar typeName string\n\tswitch (match{progType, attachType}) {\n\tcase match{Extension, AttachNone},\n\t\tmatch{Tracing, AttachTraceFEntry},\n\t\tmatch{Tracing, AttachTraceFExit}:\n\t\ttypeName = name\n\tdefault:\n\t\treturn 0, errUnrecognizedAttachType\n\t}\n\n\tbtfHandle, err := prog.Handle()\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"load target BTF: %w\", err)\n\t}\n\tdefer btfHandle.Close()\n\n\tspec, err := btfHandle.Spec(nil)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tvar targetFunc *btf.Func\n\terr = spec.TypeByName(typeName, &targetFunc)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"find target %s: %w\", typeName, err)\n\t}\n\n\treturn spec.TypeID(targetFunc)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/syscalls.go",
    "content": "package ebpf\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"runtime\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/linux\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/tracefs\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nvar (\n\t// pre-allocating these here since they may\n\t// get called in hot code paths and cause\n\t// unnecessary memory allocations\n\tsysErrKeyNotExist  = sys.Error(ErrKeyNotExist, unix.ENOENT)\n\tsysErrKeyExist     = sys.Error(ErrKeyExist, unix.EEXIST)\n\tsysErrNotSupported = sys.Error(ErrNotSupported, sys.ENOTSUPP)\n)\n\n// invalidBPFObjNameChar returns true if char may not appear in\n// a BPF object name.\nfunc invalidBPFObjNameChar(char rune) bool {\n\tdotAllowed := objNameAllowsDot() == nil\n\n\tswitch {\n\tcase char >= 'A' && char <= 'Z':\n\t\treturn false\n\tcase char >= 'a' && char <= 'z':\n\t\treturn false\n\tcase char >= '0' && char <= '9':\n\t\treturn false\n\tcase dotAllowed && char == '.':\n\t\treturn false\n\tcase char == '_':\n\t\treturn false\n\tdefault:\n\t\treturn true\n\t}\n}\n\nfunc progLoad(insns asm.Instructions, typ ProgramType, license string) (*sys.FD, error) {\n\tbuf := bytes.NewBuffer(make([]byte, 0, insns.Size()))\n\tif err := insns.Marshal(buf, internal.NativeEndian); err != nil {\n\t\treturn nil, err\n\t}\n\tbytecode := buf.Bytes()\n\n\treturn sys.ProgLoad(&sys.ProgLoadAttr{\n\t\tProgType: sys.ProgType(typ),\n\t\tLicense:  sys.NewStringPointer(license),\n\t\tInsns:    sys.NewSlicePointer(bytecode),\n\t\tInsnCnt:  uint32(len(bytecode) / asm.InstructionSize),\n\t})\n}\n\nvar haveNestedMaps = internal.NewFeatureTest(\"nested maps\", func() error {\n\t_, err := sys.MapCreate(&sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(ArrayOfMaps),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t\t// Invalid file descriptor.\n\t\tInnerMapFd: ^uint32(0),\n\t})\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\tif errors.Is(err, unix.EBADF) {\n\t\treturn nil\n\t}\n\treturn err\n}, \"4.12\")\n\nvar haveMapMutabilityModifiers = internal.NewFeatureTest(\"read- and write-only maps\", func() error {\n\t// This checks BPF_F_RDONLY_PROG and BPF_F_WRONLY_PROG. Since\n\t// BPF_MAP_FREEZE appeared in 5.2 as well we don't do a separate check.\n\tm, err := sys.MapCreate(&sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(Array),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t\tMapFlags:   sys.BPF_F_RDONLY_PROG,\n\t})\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\t_ = m.Close()\n\treturn nil\n}, \"5.2\")\n\nvar haveMmapableMaps = internal.NewFeatureTest(\"mmapable maps\", func() error {\n\t// This checks BPF_F_MMAPABLE, which appeared in 5.5 for array maps.\n\tm, err := sys.MapCreate(&sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(Array),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t\tMapFlags:   sys.BPF_F_MMAPABLE,\n\t})\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\t_ = m.Close()\n\treturn nil\n}, \"5.5\")\n\nvar haveInnerMaps = internal.NewFeatureTest(\"inner maps\", func() error {\n\t// This checks BPF_F_INNER_MAP, which appeared in 5.10.\n\tm, err := sys.MapCreate(&sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(Array),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t\tMapFlags:   sys.BPF_F_INNER_MAP,\n\t})\n\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\t_ = m.Close()\n\treturn nil\n}, \"5.10\")\n\nvar haveNoPreallocMaps = internal.NewFeatureTest(\"prealloc maps\", func() error {\n\t// This checks BPF_F_NO_PREALLOC, which appeared in 4.6.\n\tm, err := sys.MapCreate(&sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(Hash),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t\tMapFlags:   sys.BPF_F_NO_PREALLOC,\n\t})\n\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\t_ = m.Close()\n\treturn nil\n}, \"4.6\")\n\nfunc wrapMapError(err error) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\n\tif errors.Is(err, unix.ENOENT) {\n\t\treturn sysErrKeyNotExist\n\t}\n\n\tif errors.Is(err, unix.EEXIST) {\n\t\treturn sysErrKeyExist\n\t}\n\n\tif errors.Is(err, sys.ENOTSUPP) {\n\t\treturn sysErrNotSupported\n\t}\n\n\tif errors.Is(err, unix.E2BIG) {\n\t\treturn fmt.Errorf(\"key too big for map: %w\", err)\n\t}\n\n\treturn err\n}\n\nvar haveObjName = internal.NewFeatureTest(\"object names\", func() error {\n\tattr := sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(Array),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t\tMapName:    sys.NewObjName(\"feature_test\"),\n\t}\n\n\t// Tolerate EPERM as this runs during ELF loading which is potentially\n\t// unprivileged. Only EINVAL is conclusive, thrown from CHECK_ATTR.\n\tfd, err := sys.MapCreate(&attr)\n\tif errors.Is(err, unix.EPERM) {\n\t\treturn nil\n\t}\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_ = fd.Close()\n\treturn nil\n}, \"4.15\")\n\nvar objNameAllowsDot = internal.NewFeatureTest(\"dot in object names\", func() error {\n\tif err := haveObjName(); err != nil {\n\t\treturn err\n\t}\n\n\tattr := sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(Array),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t\tMapName:    sys.NewObjName(\".test\"),\n\t}\n\n\t// Tolerate EPERM, otherwise MapSpec.Name has its dots removed when run by\n\t// unprivileged tools. (bpf2go, other code gen). Only EINVAL is conclusive,\n\t// thrown from bpf_obj_name_cpy().\n\tfd, err := sys.MapCreate(&attr)\n\tif errors.Is(err, unix.EPERM) {\n\t\treturn nil\n\t}\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_ = fd.Close()\n\treturn nil\n}, \"5.2\")\n\nvar haveBatchAPI = internal.NewFeatureTest(\"map batch api\", func() error {\n\tvar maxEntries uint32 = 2\n\tattr := sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(Hash),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: maxEntries,\n\t}\n\n\tfd, err := sys.MapCreate(&attr)\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\tdefer fd.Close()\n\n\tkeys := []uint32{1, 2}\n\tvalues := []uint32{3, 4}\n\tkp, _ := marshalMapSyscallInput(keys, 8)\n\tvp, _ := marshalMapSyscallInput(values, 8)\n\n\terr = sys.MapUpdateBatch(&sys.MapUpdateBatchAttr{\n\t\tMapFd:  fd.Uint(),\n\t\tKeys:   kp,\n\t\tValues: vp,\n\t\tCount:  maxEntries,\n\t})\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\treturn nil\n}, \"5.6\")\n\nvar haveProbeReadKernel = internal.NewFeatureTest(\"bpf_probe_read_kernel\", func() error {\n\tinsns := asm.Instructions{\n\t\tasm.Mov.Reg(asm.R1, asm.R10),\n\t\tasm.Add.Imm(asm.R1, -8),\n\t\tasm.Mov.Imm(asm.R2, 8),\n\t\tasm.Mov.Imm(asm.R3, 0),\n\t\tasm.FnProbeReadKernel.Call(),\n\t\tasm.Return(),\n\t}\n\n\tfd, err := progLoad(insns, Kprobe, \"GPL\")\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\t_ = fd.Close()\n\treturn nil\n}, \"5.5\")\n\nvar haveBPFToBPFCalls = internal.NewFeatureTest(\"bpf2bpf calls\", func() error {\n\tinsns := asm.Instructions{\n\t\tasm.Call.Label(\"prog2\").WithSymbol(\"prog1\"),\n\t\tasm.Return(),\n\t\tasm.Mov.Imm(asm.R0, 0).WithSymbol(\"prog2\"),\n\t\tasm.Return(),\n\t}\n\n\tfd, err := progLoad(insns, SocketFilter, \"MIT\")\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\t_ = fd.Close()\n\treturn nil\n}, \"4.16\")\n\nvar haveSyscallWrapper = internal.NewFeatureTest(\"syscall wrapper\", func() error {\n\tprefix := linux.PlatformPrefix()\n\tif prefix == \"\" {\n\t\treturn fmt.Errorf(\"unable to find the platform prefix for (%s)\", runtime.GOARCH)\n\t}\n\n\targs := tracefs.ProbeArgs{\n\t\tType:   tracefs.Kprobe,\n\t\tSymbol: prefix + \"sys_bpf\",\n\t\tPid:    -1,\n\t}\n\n\tvar err error\n\targs.Group, err = tracefs.RandomGroup(\"ebpf_probe\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tevt, err := tracefs.NewEvent(args)\n\tif errors.Is(err, os.ErrNotExist) {\n\t\treturn internal.ErrNotSupported\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn evt.Close()\n}, \"4.17\")\n\nvar haveProgramExtInfos = internal.NewFeatureTest(\"program ext_infos\", func() error {\n\tinsns := asm.Instructions{\n\t\tasm.Mov.Imm(asm.R0, 0),\n\t\tasm.Return(),\n\t}\n\n\tbuf := bytes.NewBuffer(make([]byte, 0, insns.Size()))\n\tif err := insns.Marshal(buf, internal.NativeEndian); err != nil {\n\t\treturn err\n\t}\n\tbytecode := buf.Bytes()\n\n\t_, err := sys.ProgLoad(&sys.ProgLoadAttr{\n\t\tProgType:    sys.ProgType(SocketFilter),\n\t\tLicense:     sys.NewStringPointer(\"MIT\"),\n\t\tInsns:       sys.NewSlicePointer(bytecode),\n\t\tInsnCnt:     uint32(len(bytecode) / asm.InstructionSize),\n\t\tFuncInfoCnt: 1,\n\t\tProgBtfFd:   math.MaxUint32,\n\t})\n\n\tif errors.Is(err, unix.EBADF) {\n\t\treturn nil\n\t}\n\n\tif errors.Is(err, unix.E2BIG) {\n\t\treturn ErrNotSupported\n\t}\n\n\treturn err\n}, \"5.0\")\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/types.go",
    "content": "package ebpf\n\nimport (\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\n//go:generate go run golang.org/x/tools/cmd/stringer@latest -output types_string.go -type=MapType,ProgramType,PinType\n\n// MapType indicates the type map structure\n// that will be initialized in the kernel.\ntype MapType uint32\n\n// All the various map types that can be created\nconst (\n\tUnspecifiedMap MapType = iota\n\t// Hash is a hash map\n\tHash\n\t// Array is an array map\n\tArray\n\t// ProgramArray - A program array map is a special kind of array map whose map\n\t// values contain only file descriptors referring to other eBPF\n\t// programs.  Thus, both the key_size and value_size must be\n\t// exactly four bytes.  This map is used in conjunction with the\n\t// TailCall helper.\n\tProgramArray\n\t// PerfEventArray - A perf event array is used in conjunction with PerfEventRead\n\t// and PerfEventOutput calls, to read the raw bpf_perf_data from the registers.\n\tPerfEventArray\n\t// PerCPUHash - This data structure is useful for people who have high performance\n\t// network needs and can reconcile adds at the end of some cycle, so that\n\t// hashes can be lock free without the use of XAdd, which can be costly.\n\tPerCPUHash\n\t// PerCPUArray - This data structure is useful for people who have high performance\n\t// network needs and can reconcile adds at the end of some cycle, so that\n\t// hashes can be lock free without the use of XAdd, which can be costly.\n\t// Each CPU gets a copy of this hash, the contents of all of which can be reconciled\n\t// later.\n\tPerCPUArray\n\t// StackTrace - This holds whole user and kernel stack traces, it can be retrieved with\n\t// GetStackID\n\tStackTrace\n\t// CGroupArray - This is a very niche structure used to help SKBInCGroup determine\n\t// if an skb is from a socket belonging to a specific cgroup\n\tCGroupArray\n\t// LRUHash - This allows you to create a small hash structure that will purge the\n\t// least recently used items rather than throw an error when you run out of memory\n\tLRUHash\n\t// LRUCPUHash - This is NOT like PerCPUHash, this structure is shared among the CPUs,\n\t// it has more to do with including the CPU id with the LRU calculation so that if a\n\t// particular CPU is using a value over-and-over again, then it will be saved, but if\n\t// a value is being retrieved a lot but sparsely across CPUs it is not as important, basically\n\t// giving weight to CPU locality over overall usage.\n\tLRUCPUHash\n\t// LPMTrie - This is an implementation of Longest-Prefix-Match Trie structure. It is useful,\n\t// for storing things like IP addresses which can be bit masked allowing for keys of differing\n\t// values to refer to the same reference based on their masks. See wikipedia for more details.\n\tLPMTrie\n\t// ArrayOfMaps - Each item in the array is another map. The inner map mustn't be a map of maps\n\t// itself.\n\tArrayOfMaps\n\t// HashOfMaps - Each item in the hash map is another map. The inner map mustn't be a map of maps\n\t// itself.\n\tHashOfMaps\n\t// DevMap - Specialized map to store references to network devices.\n\tDevMap\n\t// SockMap - Specialized map to store references to sockets.\n\tSockMap\n\t// CPUMap - Specialized map to store references to CPUs.\n\tCPUMap\n\t// XSKMap - Specialized map for XDP programs to store references to open sockets.\n\tXSKMap\n\t// SockHash - Specialized hash to store references to sockets.\n\tSockHash\n\t// CGroupStorage - Special map for CGroups.\n\tCGroupStorage\n\t// ReusePortSockArray - Specialized map to store references to sockets that can be reused.\n\tReusePortSockArray\n\t// PerCPUCGroupStorage - Special per CPU map for CGroups.\n\tPerCPUCGroupStorage\n\t// Queue - FIFO storage for BPF programs.\n\tQueue\n\t// Stack - LIFO storage for BPF programs.\n\tStack\n\t// SkStorage - Specialized map for local storage at SK for BPF programs.\n\tSkStorage\n\t// DevMapHash - Hash-based indexing scheme for references to network devices.\n\tDevMapHash\n\t// StructOpsMap - This map holds a kernel struct with its function pointer implemented in a BPF\n\t// program.\n\tStructOpsMap\n\t// RingBuf - Similar to PerfEventArray, but shared across all CPUs.\n\tRingBuf\n\t// InodeStorage - Specialized local storage map for inodes.\n\tInodeStorage\n\t// TaskStorage - Specialized local storage map for task_struct.\n\tTaskStorage\n\t// BloomFilter - Space-efficient data structure to quickly test whether an element exists in a set.\n\tBloomFilter\n\t// UserRingbuf - The reverse of RingBuf, used to send messages from user space to BPF programs.\n\tUserRingbuf\n\t// CgroupStorage - Store data keyed on a cgroup. If the cgroup disappears, the key is automatically removed.\n\tCgroupStorage\n\t// Arena - Sparse shared memory region between a BPF program and user space.\n\tArena\n)\n\n// hasPerCPUValue returns true if the Map stores a value per CPU.\nfunc (mt MapType) hasPerCPUValue() bool {\n\treturn mt == PerCPUHash || mt == PerCPUArray || mt == LRUCPUHash || mt == PerCPUCGroupStorage\n}\n\n// canStoreMapOrProgram returns true if the Map stores references to another Map\n// or Program.\nfunc (mt MapType) canStoreMapOrProgram() bool {\n\treturn mt.canStoreMap() || mt.canStoreProgram()\n}\n\n// canStoreMap returns true if the map type accepts a map fd\n// for update and returns a map id for lookup.\nfunc (mt MapType) canStoreMap() bool {\n\treturn mt == ArrayOfMaps || mt == HashOfMaps\n}\n\n// canStoreProgram returns true if the map type accepts a program fd\n// for update and returns a program id for lookup.\nfunc (mt MapType) canStoreProgram() bool {\n\treturn mt == ProgramArray\n}\n\n// canHaveValueSize returns true if the map type supports setting a value size.\nfunc (mt MapType) canHaveValueSize() bool {\n\tswitch mt {\n\tcase RingBuf, Arena:\n\t\treturn false\n\n\t// Special-case perf events since they require a value size of either 0 or 4\n\t// for historical reasons. Let the library fix this up later.\n\tcase PerfEventArray:\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// ProgramType of the eBPF program\ntype ProgramType uint32\n\n// eBPF program types\nconst (\n\tUnspecifiedProgram    = ProgramType(sys.BPF_PROG_TYPE_UNSPEC)\n\tSocketFilter          = ProgramType(sys.BPF_PROG_TYPE_SOCKET_FILTER)\n\tKprobe                = ProgramType(sys.BPF_PROG_TYPE_KPROBE)\n\tSchedCLS              = ProgramType(sys.BPF_PROG_TYPE_SCHED_CLS)\n\tSchedACT              = ProgramType(sys.BPF_PROG_TYPE_SCHED_ACT)\n\tTracePoint            = ProgramType(sys.BPF_PROG_TYPE_TRACEPOINT)\n\tXDP                   = ProgramType(sys.BPF_PROG_TYPE_XDP)\n\tPerfEvent             = ProgramType(sys.BPF_PROG_TYPE_PERF_EVENT)\n\tCGroupSKB             = ProgramType(sys.BPF_PROG_TYPE_CGROUP_SKB)\n\tCGroupSock            = ProgramType(sys.BPF_PROG_TYPE_CGROUP_SOCK)\n\tLWTIn                 = ProgramType(sys.BPF_PROG_TYPE_LWT_IN)\n\tLWTOut                = ProgramType(sys.BPF_PROG_TYPE_LWT_OUT)\n\tLWTXmit               = ProgramType(sys.BPF_PROG_TYPE_LWT_XMIT)\n\tSockOps               = ProgramType(sys.BPF_PROG_TYPE_SOCK_OPS)\n\tSkSKB                 = ProgramType(sys.BPF_PROG_TYPE_SK_SKB)\n\tCGroupDevice          = ProgramType(sys.BPF_PROG_TYPE_CGROUP_DEVICE)\n\tSkMsg                 = ProgramType(sys.BPF_PROG_TYPE_SK_MSG)\n\tRawTracepoint         = ProgramType(sys.BPF_PROG_TYPE_RAW_TRACEPOINT)\n\tCGroupSockAddr        = ProgramType(sys.BPF_PROG_TYPE_CGROUP_SOCK_ADDR)\n\tLWTSeg6Local          = ProgramType(sys.BPF_PROG_TYPE_LWT_SEG6LOCAL)\n\tLircMode2             = ProgramType(sys.BPF_PROG_TYPE_LIRC_MODE2)\n\tSkReuseport           = ProgramType(sys.BPF_PROG_TYPE_SK_REUSEPORT)\n\tFlowDissector         = ProgramType(sys.BPF_PROG_TYPE_FLOW_DISSECTOR)\n\tCGroupSysctl          = ProgramType(sys.BPF_PROG_TYPE_CGROUP_SYSCTL)\n\tRawTracepointWritable = ProgramType(sys.BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE)\n\tCGroupSockopt         = ProgramType(sys.BPF_PROG_TYPE_CGROUP_SOCKOPT)\n\tTracing               = ProgramType(sys.BPF_PROG_TYPE_TRACING)\n\tStructOps             = ProgramType(sys.BPF_PROG_TYPE_STRUCT_OPS)\n\tExtension             = ProgramType(sys.BPF_PROG_TYPE_EXT)\n\tLSM                   = ProgramType(sys.BPF_PROG_TYPE_LSM)\n\tSkLookup              = ProgramType(sys.BPF_PROG_TYPE_SK_LOOKUP)\n\tSyscall               = ProgramType(sys.BPF_PROG_TYPE_SYSCALL)\n\tNetfilter             = ProgramType(sys.BPF_PROG_TYPE_NETFILTER)\n)\n\n// AttachType of the eBPF program, needed to differentiate allowed context accesses in\n// some newer program types like CGroupSockAddr. Should be set to AttachNone if not required.\n// Will cause invalid argument (EINVAL) at program load time if set incorrectly.\ntype AttachType uint32\n\n//go:generate go run golang.org/x/tools/cmd/stringer@latest -type AttachType -trimprefix Attach\n\n// AttachNone is an alias for AttachCGroupInetIngress for readability reasons.\nconst AttachNone AttachType = 0\n\nconst (\n\tAttachCGroupInetIngress          = AttachType(sys.BPF_CGROUP_INET_INGRESS)\n\tAttachCGroupInetEgress           = AttachType(sys.BPF_CGROUP_INET_EGRESS)\n\tAttachCGroupInetSockCreate       = AttachType(sys.BPF_CGROUP_INET_SOCK_CREATE)\n\tAttachCGroupSockOps              = AttachType(sys.BPF_CGROUP_SOCK_OPS)\n\tAttachSkSKBStreamParser          = AttachType(sys.BPF_SK_SKB_STREAM_PARSER)\n\tAttachSkSKBStreamVerdict         = AttachType(sys.BPF_SK_SKB_STREAM_VERDICT)\n\tAttachCGroupDevice               = AttachType(sys.BPF_CGROUP_DEVICE)\n\tAttachSkMsgVerdict               = AttachType(sys.BPF_SK_MSG_VERDICT)\n\tAttachCGroupInet4Bind            = AttachType(sys.BPF_CGROUP_INET4_BIND)\n\tAttachCGroupInet6Bind            = AttachType(sys.BPF_CGROUP_INET6_BIND)\n\tAttachCGroupInet4Connect         = AttachType(sys.BPF_CGROUP_INET4_CONNECT)\n\tAttachCGroupInet6Connect         = AttachType(sys.BPF_CGROUP_INET6_CONNECT)\n\tAttachCGroupInet4PostBind        = AttachType(sys.BPF_CGROUP_INET4_POST_BIND)\n\tAttachCGroupInet6PostBind        = AttachType(sys.BPF_CGROUP_INET6_POST_BIND)\n\tAttachCGroupUDP4Sendmsg          = AttachType(sys.BPF_CGROUP_UDP4_SENDMSG)\n\tAttachCGroupUDP6Sendmsg          = AttachType(sys.BPF_CGROUP_UDP6_SENDMSG)\n\tAttachLircMode2                  = AttachType(sys.BPF_LIRC_MODE2)\n\tAttachFlowDissector              = AttachType(sys.BPF_FLOW_DISSECTOR)\n\tAttachCGroupSysctl               = AttachType(sys.BPF_CGROUP_SYSCTL)\n\tAttachCGroupUDP4Recvmsg          = AttachType(sys.BPF_CGROUP_UDP4_RECVMSG)\n\tAttachCGroupUDP6Recvmsg          = AttachType(sys.BPF_CGROUP_UDP6_RECVMSG)\n\tAttachCGroupGetsockopt           = AttachType(sys.BPF_CGROUP_GETSOCKOPT)\n\tAttachCGroupSetsockopt           = AttachType(sys.BPF_CGROUP_SETSOCKOPT)\n\tAttachTraceRawTp                 = AttachType(sys.BPF_TRACE_RAW_TP)\n\tAttachTraceFEntry                = AttachType(sys.BPF_TRACE_FENTRY)\n\tAttachTraceFExit                 = AttachType(sys.BPF_TRACE_FEXIT)\n\tAttachModifyReturn               = AttachType(sys.BPF_MODIFY_RETURN)\n\tAttachLSMMac                     = AttachType(sys.BPF_LSM_MAC)\n\tAttachTraceIter                  = AttachType(sys.BPF_TRACE_ITER)\n\tAttachCgroupInet4GetPeername     = AttachType(sys.BPF_CGROUP_INET4_GETPEERNAME)\n\tAttachCgroupInet6GetPeername     = AttachType(sys.BPF_CGROUP_INET6_GETPEERNAME)\n\tAttachCgroupInet4GetSockname     = AttachType(sys.BPF_CGROUP_INET4_GETSOCKNAME)\n\tAttachCgroupInet6GetSockname     = AttachType(sys.BPF_CGROUP_INET6_GETSOCKNAME)\n\tAttachXDPDevMap                  = AttachType(sys.BPF_XDP_DEVMAP)\n\tAttachCgroupInetSockRelease      = AttachType(sys.BPF_CGROUP_INET_SOCK_RELEASE)\n\tAttachXDPCPUMap                  = AttachType(sys.BPF_XDP_CPUMAP)\n\tAttachSkLookup                   = AttachType(sys.BPF_SK_LOOKUP)\n\tAttachXDP                        = AttachType(sys.BPF_XDP)\n\tAttachSkSKBVerdict               = AttachType(sys.BPF_SK_SKB_VERDICT)\n\tAttachSkReuseportSelect          = AttachType(sys.BPF_SK_REUSEPORT_SELECT)\n\tAttachSkReuseportSelectOrMigrate = AttachType(sys.BPF_SK_REUSEPORT_SELECT_OR_MIGRATE)\n\tAttachPerfEvent                  = AttachType(sys.BPF_PERF_EVENT)\n\tAttachTraceKprobeMulti           = AttachType(sys.BPF_TRACE_KPROBE_MULTI)\n\tAttachTraceKprobeSession         = AttachType(sys.BPF_TRACE_KPROBE_SESSION)\n\tAttachLSMCgroup                  = AttachType(sys.BPF_LSM_CGROUP)\n\tAttachStructOps                  = AttachType(sys.BPF_STRUCT_OPS)\n\tAttachNetfilter                  = AttachType(sys.BPF_NETFILTER)\n\tAttachTCXIngress                 = AttachType(sys.BPF_TCX_INGRESS)\n\tAttachTCXEgress                  = AttachType(sys.BPF_TCX_EGRESS)\n\tAttachTraceUprobeMulti           = AttachType(sys.BPF_TRACE_UPROBE_MULTI)\n\tAttachCgroupUnixConnect          = AttachType(sys.BPF_CGROUP_UNIX_CONNECT)\n\tAttachCgroupUnixSendmsg          = AttachType(sys.BPF_CGROUP_UNIX_SENDMSG)\n\tAttachCgroupUnixRecvmsg          = AttachType(sys.BPF_CGROUP_UNIX_RECVMSG)\n\tAttachCgroupUnixGetpeername      = AttachType(sys.BPF_CGROUP_UNIX_GETPEERNAME)\n\tAttachCgroupUnixGetsockname      = AttachType(sys.BPF_CGROUP_UNIX_GETSOCKNAME)\n\tAttachNetkitPrimary              = AttachType(sys.BPF_NETKIT_PRIMARY)\n\tAttachNetkitPeer                 = AttachType(sys.BPF_NETKIT_PEER)\n)\n\n// AttachFlags of the eBPF program used in BPF_PROG_ATTACH command\ntype AttachFlags uint32\n\n// PinType determines whether a map is pinned into a BPFFS.\ntype PinType uint32\n\n// Valid pin types.\n//\n// Mirrors enum libbpf_pin_type.\nconst (\n\tPinNone PinType = iota\n\t// Pin an object by using its name as the filename.\n\tPinByName\n)\n\n// LoadPinOptions control how a pinned object is loaded.\ntype LoadPinOptions struct {\n\t// Request a read-only or write-only object. The default is a read-write\n\t// object. Only one of the flags may be set.\n\tReadOnly  bool\n\tWriteOnly bool\n\n\t// Raw flags for the syscall. Other fields of this struct take precedence.\n\tFlags uint32\n}\n\n// Marshal returns a value suitable for BPF_OBJ_GET syscall file_flags parameter.\nfunc (lpo *LoadPinOptions) Marshal() uint32 {\n\tif lpo == nil {\n\t\treturn 0\n\t}\n\n\tflags := lpo.Flags\n\tif lpo.ReadOnly {\n\t\tflags |= sys.BPF_F_RDONLY\n\t}\n\tif lpo.WriteOnly {\n\t\tflags |= sys.BPF_F_WRONLY\n\t}\n\treturn flags\n}\n\n// BatchOptions batch map operations options\n//\n// Mirrors libbpf struct bpf_map_batch_opts\n// Currently BPF_F_FLAG is the only supported\n// flag (for ElemFlags).\ntype BatchOptions struct {\n\tElemFlags uint64\n\tFlags     uint64\n}\n\n// LogLevel controls the verbosity of the kernel's eBPF program verifier.\n// These constants can be used for the ProgramOptions.LogLevel field.\ntype LogLevel = sys.LogLevel\n\nconst (\n\t// Print verifier state at branch points.\n\tLogLevelBranch = sys.BPF_LOG_LEVEL1\n\n\t// Print verifier state for every instruction.\n\t// Available since Linux v5.2.\n\tLogLevelInstruction = sys.BPF_LOG_LEVEL2\n\n\t// Print verifier errors and stats at the end of the verification process.\n\t// Available since Linux v5.2.\n\tLogLevelStats = sys.BPF_LOG_STATS\n)\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/types_string.go",
    "content": "// Code generated by \"stringer -output types_string.go -type=MapType,ProgramType,PinType\"; DO NOT EDIT.\n\npackage ebpf\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[UnspecifiedMap-0]\n\t_ = x[Hash-1]\n\t_ = x[Array-2]\n\t_ = x[ProgramArray-3]\n\t_ = x[PerfEventArray-4]\n\t_ = x[PerCPUHash-5]\n\t_ = x[PerCPUArray-6]\n\t_ = x[StackTrace-7]\n\t_ = x[CGroupArray-8]\n\t_ = x[LRUHash-9]\n\t_ = x[LRUCPUHash-10]\n\t_ = x[LPMTrie-11]\n\t_ = x[ArrayOfMaps-12]\n\t_ = x[HashOfMaps-13]\n\t_ = x[DevMap-14]\n\t_ = x[SockMap-15]\n\t_ = x[CPUMap-16]\n\t_ = x[XSKMap-17]\n\t_ = x[SockHash-18]\n\t_ = x[CGroupStorage-19]\n\t_ = x[ReusePortSockArray-20]\n\t_ = x[PerCPUCGroupStorage-21]\n\t_ = x[Queue-22]\n\t_ = x[Stack-23]\n\t_ = x[SkStorage-24]\n\t_ = x[DevMapHash-25]\n\t_ = x[StructOpsMap-26]\n\t_ = x[RingBuf-27]\n\t_ = x[InodeStorage-28]\n\t_ = x[TaskStorage-29]\n\t_ = x[BloomFilter-30]\n\t_ = x[UserRingbuf-31]\n\t_ = x[CgroupStorage-32]\n\t_ = x[Arena-33]\n}\n\nconst _MapType_name = \"UnspecifiedMapHashArrayProgramArrayPerfEventArrayPerCPUHashPerCPUArrayStackTraceCGroupArrayLRUHashLRUCPUHashLPMTrieArrayOfMapsHashOfMapsDevMapSockMapCPUMapXSKMapSockHashCGroupStorageReusePortSockArrayPerCPUCGroupStorageQueueStackSkStorageDevMapHashStructOpsMapRingBufInodeStorageTaskStorageBloomFilterUserRingbufCgroupStorageArena\"\n\nvar _MapType_index = [...]uint16{0, 14, 18, 23, 35, 49, 59, 70, 80, 91, 98, 108, 115, 126, 136, 142, 149, 155, 161, 169, 182, 200, 219, 224, 229, 238, 248, 260, 267, 279, 290, 301, 312, 325, 330}\n\nfunc (i MapType) String() string {\n\tif i >= MapType(len(_MapType_index)-1) {\n\t\treturn \"MapType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _MapType_name[_MapType_index[i]:_MapType_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[UnspecifiedProgram-0]\n\t_ = x[SocketFilter-1]\n\t_ = x[Kprobe-2]\n\t_ = x[SchedCLS-3]\n\t_ = x[SchedACT-4]\n\t_ = x[TracePoint-5]\n\t_ = x[XDP-6]\n\t_ = x[PerfEvent-7]\n\t_ = x[CGroupSKB-8]\n\t_ = x[CGroupSock-9]\n\t_ = x[LWTIn-10]\n\t_ = x[LWTOut-11]\n\t_ = x[LWTXmit-12]\n\t_ = x[SockOps-13]\n\t_ = x[SkSKB-14]\n\t_ = x[CGroupDevice-15]\n\t_ = x[SkMsg-16]\n\t_ = x[RawTracepoint-17]\n\t_ = x[CGroupSockAddr-18]\n\t_ = x[LWTSeg6Local-19]\n\t_ = x[LircMode2-20]\n\t_ = x[SkReuseport-21]\n\t_ = x[FlowDissector-22]\n\t_ = x[CGroupSysctl-23]\n\t_ = x[RawTracepointWritable-24]\n\t_ = x[CGroupSockopt-25]\n\t_ = x[Tracing-26]\n\t_ = x[StructOps-27]\n\t_ = x[Extension-28]\n\t_ = x[LSM-29]\n\t_ = x[SkLookup-30]\n\t_ = x[Syscall-31]\n\t_ = x[Netfilter-32]\n}\n\nconst _ProgramType_name = \"UnspecifiedProgramSocketFilterKprobeSchedCLSSchedACTTracePointXDPPerfEventCGroupSKBCGroupSockLWTInLWTOutLWTXmitSockOpsSkSKBCGroupDeviceSkMsgRawTracepointCGroupSockAddrLWTSeg6LocalLircMode2SkReuseportFlowDissectorCGroupSysctlRawTracepointWritableCGroupSockoptTracingStructOpsExtensionLSMSkLookupSyscallNetfilter\"\n\nvar _ProgramType_index = [...]uint16{0, 18, 30, 36, 44, 52, 62, 65, 74, 83, 93, 98, 104, 111, 118, 123, 135, 140, 153, 167, 179, 188, 199, 212, 224, 245, 258, 265, 274, 283, 286, 294, 301, 310}\n\nfunc (i ProgramType) String() string {\n\tif i >= ProgramType(len(_ProgramType_index)-1) {\n\t\treturn \"ProgramType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _ProgramType_name[_ProgramType_index[i]:_ProgramType_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[PinNone-0]\n\t_ = x[PinByName-1]\n}\n\nconst _PinType_name = \"PinNonePinByName\"\n\nvar _PinType_index = [...]uint8{0, 7, 16}\n\nfunc (i PinType) String() string {\n\tif i >= PinType(len(_PinType_index)-1) {\n\t\treturn \"PinType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _PinType_name[_PinType_index[i]:_PinType_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/variable.go",
    "content": "package ebpf\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal/sysenc\"\n)\n\n// VariableSpec is a convenience wrapper for modifying global variables of a\n// CollectionSpec before loading it into the kernel.\n//\n// All operations on a VariableSpec's underlying MapSpec are performed in the\n// host's native endianness.\ntype VariableSpec struct {\n\tname   string\n\toffset uint64\n\tsize   uint64\n\n\tm *MapSpec\n\tt *btf.Var\n}\n\n// Set sets the value of the VariableSpec to the provided input using the host's\n// native endianness.\nfunc (s *VariableSpec) Set(in any) error {\n\tbuf, err := sysenc.Marshal(in, int(s.size))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"marshaling value %s: %w\", s.name, err)\n\t}\n\n\tb, _, err := s.m.dataSection()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"getting data section of map %s: %w\", s.m.Name, err)\n\t}\n\n\tif int(s.offset+s.size) > len(b) {\n\t\treturn fmt.Errorf(\"offset %d(+%d) for variable %s is out of bounds\", s.offset, s.size, s.name)\n\t}\n\n\t// MapSpec.Copy() performs a shallow copy. Fully copy the byte slice\n\t// to avoid any changes affecting other copies of the MapSpec.\n\tcpy := make([]byte, len(b))\n\tcopy(cpy, b)\n\n\tbuf.CopyTo(cpy[s.offset : s.offset+s.size])\n\n\ts.m.Contents[0] = MapKV{Key: uint32(0), Value: cpy}\n\n\treturn nil\n}\n\n// Get writes the value of the VariableSpec to the provided output using the\n// host's native endianness.\nfunc (s *VariableSpec) Get(out any) error {\n\tb, _, err := s.m.dataSection()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"getting data section of map %s: %w\", s.m.Name, err)\n\t}\n\n\tif int(s.offset+s.size) > len(b) {\n\t\treturn fmt.Errorf(\"offset %d(+%d) for variable %s is out of bounds\", s.offset, s.size, s.name)\n\t}\n\n\tif err := sysenc.Unmarshal(out, b[s.offset:s.offset+s.size]); err != nil {\n\t\treturn fmt.Errorf(\"unmarshaling value: %w\", err)\n\t}\n\n\treturn nil\n}\n\n// Size returns the size of the variable in bytes.\nfunc (s *VariableSpec) Size() uint64 {\n\treturn s.size\n}\n\n// MapName returns the name of the underlying MapSpec.\nfunc (s *VariableSpec) MapName() string {\n\treturn s.m.Name\n}\n\n// Offset returns the offset of the variable in the underlying MapSpec.\nfunc (s *VariableSpec) Offset() uint64 {\n\treturn s.offset\n}\n\n// Constant returns true if the VariableSpec represents a variable that is\n// read-only from the perspective of the BPF program.\nfunc (s *VariableSpec) Constant() bool {\n\treturn s.m.readOnly()\n}\n\n// Type returns the [btf.Var] representing the variable in its data section.\n// This is useful for inspecting the variable's decl tags and the type\n// information of the inner type.\n//\n// Returns nil if the original ELF object did not contain BTF information.\nfunc (s *VariableSpec) Type() *btf.Var {\n\treturn s.t\n}\n\nfunc (s *VariableSpec) String() string {\n\treturn fmt.Sprintf(\"%s (type=%v, map=%s, offset=%d, size=%d)\", s.name, s.t, s.m.Name, s.offset, s.size)\n}\n\n// copy returns a new VariableSpec with the same values as the original,\n// but with a different underlying MapSpec. This is useful when copying a\n// CollectionSpec. Returns nil if a MapSpec with the same name is not found.\nfunc (s *VariableSpec) copy(cpy *CollectionSpec) *VariableSpec {\n\tout := &VariableSpec{\n\t\tname:   s.name,\n\t\toffset: s.offset,\n\t\tsize:   s.size,\n\t}\n\tif s.t != nil {\n\t\tout.t = btf.Copy(s.t).(*btf.Var)\n\t}\n\n\t// Attempt to find a MapSpec with the same name in the copied CollectionSpec.\n\tfor _, m := range cpy.Maps {\n\t\tif m.Name == s.m.Name {\n\t\t\tout.m = m\n\t\t\treturn out\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Variable is a convenience wrapper for modifying global variables of a\n// Collection after loading it into the kernel. Operations on a Variable are\n// performed using direct memory access, bypassing the BPF map syscall API.\n//\n// On kernels older than 5.5, most interactions with Variable return\n// [ErrNotSupported].\ntype Variable struct {\n\tname   string\n\toffset uint64\n\tsize   uint64\n\tt      *btf.Var\n\n\tmm *Memory\n}\n\nfunc newVariable(name string, offset, size uint64, t *btf.Var, mm *Memory) (*Variable, error) {\n\tif mm != nil {\n\t\tif int(offset+size) > mm.Size() {\n\t\t\treturn nil, fmt.Errorf(\"offset %d(+%d) is out of bounds\", offset, size)\n\t\t}\n\t}\n\n\treturn &Variable{\n\t\tname:   name,\n\t\toffset: offset,\n\t\tsize:   size,\n\t\tt:      t,\n\t\tmm:     mm,\n\t}, nil\n}\n\n// Size returns the size of the variable.\nfunc (v *Variable) Size() uint64 {\n\treturn v.size\n}\n\n// ReadOnly returns true if the Variable represents a variable that is read-only\n// after loading the Collection into the kernel.\n//\n// On systems without BPF_F_MMAPABLE support, ReadOnly always returns true.\nfunc (v *Variable) ReadOnly() bool {\n\tif v.mm == nil {\n\t\treturn true\n\t}\n\treturn v.mm.ReadOnly()\n}\n\n// Type returns the [btf.Var] representing the variable in its data section.\n// This is useful for inspecting the variable's decl tags and the type\n// information of the inner type.\n//\n// Returns nil if the original ELF object did not contain BTF information.\nfunc (v *Variable) Type() *btf.Var {\n\treturn v.t\n}\n\nfunc (v *Variable) String() string {\n\treturn fmt.Sprintf(\"%s (type=%v)\", v.name, v.t)\n}\n\n// Set the value of the Variable to the provided input. The input must marshal\n// to the same length as the size of the Variable.\nfunc (v *Variable) Set(in any) error {\n\tif v.mm == nil {\n\t\treturn fmt.Errorf(\"variable %s: direct access requires Linux 5.5 or later: %w\", v.name, ErrNotSupported)\n\t}\n\n\tif v.ReadOnly() {\n\t\treturn fmt.Errorf(\"variable %s: %w\", v.name, ErrReadOnly)\n\t}\n\n\tbuf, err := sysenc.Marshal(in, int(v.size))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"marshaling value %s: %w\", v.name, err)\n\t}\n\n\tif _, err := v.mm.WriteAt(buf.Bytes(), int64(v.offset)); err != nil {\n\t\treturn fmt.Errorf(\"writing value to %s: %w\", v.name, err)\n\t}\n\n\treturn nil\n}\n\n// Get writes the value of the Variable to the provided output. The output must\n// be a pointer to a value whose size matches the Variable.\nfunc (v *Variable) Get(out any) error {\n\tif v.mm == nil {\n\t\treturn fmt.Errorf(\"variable %s: direct access requires Linux 5.5 or later: %w\", v.name, ErrNotSupported)\n\t}\n\n\tif !v.mm.bounds(v.offset, v.size) {\n\t\treturn fmt.Errorf(\"variable %s: access out of bounds: %w\", v.name, io.EOF)\n\t}\n\n\tif err := sysenc.Unmarshal(out, v.mm.b[v.offset:v.offset+v.size]); err != nil {\n\t\treturn fmt.Errorf(\"unmarshaling value %s: %w\", v.name, err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/.golangci.yml",
    "content": "linters:\n  enable:\n    - gofmt\n    - goimports\n    - ineffassign\n    - misspell\n    - revive\n    - staticcheck\n    - structcheck\n    - unconvert\n    - unused\n    - varcheck\n    - vet\n  disable:\n    - errcheck\n\nrun:\n  timeout: 3m\n  skip-dirs:\n    - vendor\n"
  },
  {
    "path": "vendor/github.com/containerd/console/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/console/README.md",
    "content": "# console\n\n[![PkgGoDev](https://pkg.go.dev/badge/github.com/containerd/console)](https://pkg.go.dev/github.com/containerd/console)\n[![Build Status](https://github.com/containerd/console/workflows/CI/badge.svg)](https://github.com/containerd/console/actions?query=workflow%3ACI)\n[![Go Report Card](https://goreportcard.com/badge/github.com/containerd/console)](https://goreportcard.com/report/github.com/containerd/console)\n\nGolang package for dealing with consoles.  Light on deps and a simple API.\n\n## Modifying the current process\n\n```go\ncurrent := console.Current()\ndefer current.Reset()\n\nif err := current.SetRaw(); err != nil {\n}\nws, err := current.Size()\ncurrent.Resize(ws)\n```\n\n## Project details\n\nconsole 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"
  },
  {
    "path": "vendor/github.com/containerd/console/console.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 console\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"os\"\n)\n\nvar (\n\tErrNotAConsole    = errors.New(\"provided file is not a console\")\n\tErrNotImplemented = errors.New(\"not implemented\")\n)\n\ntype File interface {\n\tio.ReadWriteCloser\n\n\t// Fd returns its file descriptor\n\tFd() uintptr\n\t// Name returns its file name\n\tName() string\n}\n\ntype Console interface {\n\tFile\n\n\t// Resize resizes the console to the provided window size\n\tResize(WinSize) error\n\t// ResizeFrom resizes the calling console to the size of the\n\t// provided console\n\tResizeFrom(Console) error\n\t// SetRaw sets the console in raw mode\n\tSetRaw() error\n\t// DisableEcho disables echo on the console\n\tDisableEcho() error\n\t// Reset restores the console to its original state\n\tReset() error\n\t// Size returns the window size of the console\n\tSize() (WinSize, error)\n}\n\n// WinSize specifies the window size of the console\ntype WinSize struct {\n\t// Height of the console\n\tHeight uint16\n\t// Width of the console\n\tWidth uint16\n\tx     uint16\n\ty     uint16\n}\n\n// Current returns the current process' console\nfunc Current() (c Console) {\n\tvar err error\n\t// Usually all three streams (stdin, stdout, and stderr)\n\t// are open to the same console, but some might be redirected,\n\t// so try all three.\n\tfor _, s := range []*os.File{os.Stderr, os.Stdout, os.Stdin} {\n\t\tif c, err = ConsoleFromFile(s); err == nil {\n\t\t\treturn c\n\t\t}\n\t}\n\t// One of the std streams should always be a console\n\t// for the design of this function.\n\tpanic(err)\n}\n\n// ConsoleFromFile returns a console using the provided file\n// nolint:revive\nfunc ConsoleFromFile(f File) (Console, error) {\n\tif err := checkConsole(f); err != nil {\n\t\treturn nil, err\n\t}\n\treturn newMaster(f)\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/console_linux.go",
    "content": "//go:build linux\n// +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 console\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"sync\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tmaxEvents = 128\n)\n\n// Epoller manages multiple epoll consoles using edge-triggered epoll api so we\n// dont have to deal with repeated wake-up of EPOLLER or EPOLLHUP.\n// For more details, see:\n// - https://github.com/systemd/systemd/pull/4262\n// - https://github.com/moby/moby/issues/27202\n//\n// Example usage of Epoller and EpollConsole can be as follow:\n//\n//\tepoller, _ := NewEpoller()\n//\tepollConsole, _ := epoller.Add(console)\n//\tgo epoller.Wait()\n//\tvar (\n//\t\tb  bytes.Buffer\n//\t\twg sync.WaitGroup\n//\t)\n//\twg.Add(1)\n//\tgo func() {\n//\t\tio.Copy(&b, epollConsole)\n//\t\twg.Done()\n//\t}()\n//\t// perform I/O on the console\n//\tepollConsole.Shutdown(epoller.CloseConsole)\n//\twg.Wait()\n//\tepollConsole.Close()\ntype Epoller struct {\n\tefd       int\n\tmu        sync.Mutex\n\tfdMapping map[int]*EpollConsole\n\tcloseOnce sync.Once\n}\n\n// NewEpoller returns an instance of epoller with a valid epoll fd.\nfunc NewEpoller() (*Epoller, error) {\n\tefd, err := unix.EpollCreate1(unix.EPOLL_CLOEXEC)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Epoller{\n\t\tefd:       efd,\n\t\tfdMapping: make(map[int]*EpollConsole),\n\t}, nil\n}\n\n// Add creates an epoll console based on the provided console. The console will\n// be registered with EPOLLET (i.e. using edge-triggered notification) and its\n// file descriptor will be set to non-blocking mode. After this, user should use\n// the return console to perform I/O.\nfunc (e *Epoller) Add(console Console) (*EpollConsole, error) {\n\tsysfd := int(console.Fd())\n\t// Set sysfd to non-blocking mode\n\tif err := unix.SetNonblock(sysfd, true); err != nil {\n\t\treturn nil, err\n\t}\n\n\tev := unix.EpollEvent{\n\t\tEvents: unix.EPOLLIN | unix.EPOLLOUT | unix.EPOLLRDHUP | unix.EPOLLET,\n\t\tFd:     int32(sysfd),\n\t}\n\tif err := unix.EpollCtl(e.efd, unix.EPOLL_CTL_ADD, sysfd, &ev); err != nil {\n\t\treturn nil, err\n\t}\n\tef := &EpollConsole{\n\t\tConsole: console,\n\t\tsysfd:   sysfd,\n\t\treadc:   sync.NewCond(&sync.Mutex{}),\n\t\twritec:  sync.NewCond(&sync.Mutex{}),\n\t}\n\te.mu.Lock()\n\te.fdMapping[sysfd] = ef\n\te.mu.Unlock()\n\treturn ef, nil\n}\n\n// Wait starts the loop to wait for its consoles' notifications and signal\n// appropriate console that it can perform I/O.\nfunc (e *Epoller) Wait() error {\n\tevents := make([]unix.EpollEvent, maxEvents)\n\tfor {\n\t\tn, err := unix.EpollWait(e.efd, events, -1)\n\t\tif err != nil {\n\t\t\t// EINTR: The call was interrupted by a signal handler before either\n\t\t\t// any of the requested events occurred or the timeout expired\n\t\t\tif err == unix.EINTR {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\tfor i := 0; i < n; i++ {\n\t\t\tev := &events[i]\n\t\t\t// the console is ready to be read from\n\t\t\tif ev.Events&(unix.EPOLLIN|unix.EPOLLHUP|unix.EPOLLERR) != 0 {\n\t\t\t\tif epfile := e.getConsole(int(ev.Fd)); epfile != nil {\n\t\t\t\t\tepfile.signalRead()\n\t\t\t\t}\n\t\t\t}\n\t\t\t// the console is ready to be written to\n\t\t\tif ev.Events&(unix.EPOLLOUT|unix.EPOLLHUP|unix.EPOLLERR) != 0 {\n\t\t\t\tif epfile := e.getConsole(int(ev.Fd)); epfile != nil {\n\t\t\t\t\tepfile.signalWrite()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n// CloseConsole unregisters the console's file descriptor from epoll interface\nfunc (e *Epoller) CloseConsole(fd int) error {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\tdelete(e.fdMapping, fd)\n\treturn unix.EpollCtl(e.efd, unix.EPOLL_CTL_DEL, fd, &unix.EpollEvent{})\n}\n\nfunc (e *Epoller) getConsole(sysfd int) *EpollConsole {\n\te.mu.Lock()\n\tf := e.fdMapping[sysfd]\n\te.mu.Unlock()\n\treturn f\n}\n\n// Close closes the epoll fd\nfunc (e *Epoller) Close() error {\n\tcloseErr := os.ErrClosed // default to \"file already closed\"\n\te.closeOnce.Do(func() {\n\t\tcloseErr = unix.Close(e.efd)\n\t})\n\treturn closeErr\n}\n\n// EpollConsole acts like a console but registers its file descriptor with an\n// epoll fd and uses epoll API to perform I/O.\ntype EpollConsole struct {\n\tConsole\n\treadc  *sync.Cond\n\twritec *sync.Cond\n\tsysfd  int\n\tclosed bool\n}\n\n// Read reads up to len(p) bytes into p. It returns the number of bytes read\n// (0 <= n <= len(p)) and any error encountered.\n//\n// If the console's read returns EAGAIN or EIO, we assume that it's a\n// temporary error because the other side went away and wait for the signal\n// generated by epoll event to continue.\nfunc (ec *EpollConsole) Read(p []byte) (n int, err error) {\n\tvar read int\n\tec.readc.L.Lock()\n\tdefer ec.readc.L.Unlock()\n\tfor {\n\t\tread, err = ec.Console.Read(p[n:])\n\t\tn += read\n\t\tif err != nil {\n\t\t\tvar hangup bool\n\t\t\tif perr, ok := err.(*os.PathError); ok {\n\t\t\t\thangup = (perr.Err == unix.EAGAIN || perr.Err == unix.EIO)\n\t\t\t} else {\n\t\t\t\thangup = (err == unix.EAGAIN || err == unix.EIO)\n\t\t\t}\n\t\t\t// if the other end disappear, assume this is temporary and wait for the\n\t\t\t// signal to continue again. Unless we didnt read anything and the\n\t\t\t// console is already marked as closed then we should exit\n\t\t\tif hangup && !(n == 0 && len(p) > 0 && ec.closed) {\n\t\t\t\tec.readc.Wait()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tbreak\n\t}\n\t// if we didnt read anything then return io.EOF to end gracefully\n\tif n == 0 && len(p) > 0 && err == nil {\n\t\terr = io.EOF\n\t}\n\t// signal for others that we finished the read\n\tec.readc.Signal()\n\treturn n, err\n}\n\n// Writes len(p) bytes from p to the console. It returns the number of bytes\n// written from p (0 <= n <= len(p)) and any error encountered that caused\n// the write to stop early.\n//\n// If writes to the console returns EAGAIN or EIO, we assume that it's a\n// temporary error because the other side went away and wait for the signal\n// generated by epoll event to continue.\nfunc (ec *EpollConsole) Write(p []byte) (n int, err error) {\n\tvar written int\n\tec.writec.L.Lock()\n\tdefer ec.writec.L.Unlock()\n\tfor {\n\t\twritten, err = ec.Console.Write(p[n:])\n\t\tn += written\n\t\tif err != nil {\n\t\t\tvar hangup bool\n\t\t\tif perr, ok := err.(*os.PathError); ok {\n\t\t\t\thangup = (perr.Err == unix.EAGAIN || perr.Err == unix.EIO)\n\t\t\t} else {\n\t\t\t\thangup = (err == unix.EAGAIN || err == unix.EIO)\n\t\t\t}\n\t\t\t// if the other end disappears, assume this is temporary and wait for the\n\t\t\t// signal to continue again.\n\t\t\tif hangup {\n\t\t\t\tec.writec.Wait()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\t// unrecoverable error, break the loop and return the error\n\t\tbreak\n\t}\n\tif n < len(p) && err == nil {\n\t\terr = io.ErrShortWrite\n\t}\n\t// signal for others that we finished the write\n\tec.writec.Signal()\n\treturn n, err\n}\n\n// Shutdown closes the file descriptor and signals call waiters for this fd.\n// It accepts a callback which will be called with the console's fd. The\n// callback typically will be used to do further cleanup such as unregister the\n// console's fd from the epoll interface.\n// User should call Shutdown and wait for all I/O operation to be finished\n// before closing the console.\nfunc (ec *EpollConsole) Shutdown(close func(int) error) error {\n\tec.readc.L.Lock()\n\tdefer ec.readc.L.Unlock()\n\tec.writec.L.Lock()\n\tdefer ec.writec.L.Unlock()\n\n\tec.readc.Broadcast()\n\tec.writec.Broadcast()\n\tec.closed = true\n\treturn close(ec.sysfd)\n}\n\n// signalRead signals that the console is readable.\nfunc (ec *EpollConsole) signalRead() {\n\tec.readc.L.Lock()\n\tec.readc.Signal()\n\tec.readc.L.Unlock()\n}\n\n// signalWrite signals that the console is writable.\nfunc (ec *EpollConsole) signalWrite() {\n\tec.writec.L.Lock()\n\tec.writec.Signal()\n\tec.writec.L.Unlock()\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/console_other.go",
    "content": "//go:build !darwin && !freebsd && !linux && !netbsd && !openbsd && !windows && !zos\n// +build !darwin,!freebsd,!linux,!netbsd,!openbsd,!windows,!zos\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 console\n\n// NewPty creates a new pty pair\n// The master is returned as the first console and a string\n// with the path to the pty slave is returned as the second\nfunc NewPty() (Console, string, error) {\n\treturn nil, \"\", ErrNotImplemented\n}\n\n// checkConsole checks if the provided file is a console\nfunc checkConsole(f File) error {\n\treturn ErrNotAConsole\n}\n\nfunc newMaster(f File) (Console, error) {\n\treturn nil, ErrNotImplemented\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/console_unix.go",
    "content": "//go:build darwin || freebsd || linux || netbsd || openbsd || zos\n// +build darwin freebsd linux netbsd openbsd zos\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 console\n\nimport (\n\t\"golang.org/x/sys/unix\"\n)\n\n// NewPty creates a new pty pair\n// The master is returned as the first console and a string\n// with the path to the pty slave is returned as the second\nfunc NewPty() (Console, string, error) {\n\tf, err := openpt()\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\treturn NewPtyFromFile(f)\n}\n\n// NewPtyFromFile creates a new pty pair, just like [NewPty] except that the\n// provided [os.File] is used as the master rather than automatically creating\n// a new master from /dev/ptmx. The ownership of [os.File] is passed to the\n// returned [Console], so the caller must be careful to not call Close on the\n// underlying file.\nfunc NewPtyFromFile(f File) (Console, string, error) {\n\tslave, err := ptsname(f)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\tif err := unlockpt(f); err != nil {\n\t\treturn nil, \"\", err\n\t}\n\tm, err := newMaster(f)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\treturn m, slave, nil\n}\n\ntype master struct {\n\tf        File\n\toriginal *unix.Termios\n}\n\nfunc (m *master) Read(b []byte) (int, error) {\n\treturn m.f.Read(b)\n}\n\nfunc (m *master) Write(b []byte) (int, error) {\n\treturn m.f.Write(b)\n}\n\nfunc (m *master) Close() error {\n\treturn m.f.Close()\n}\n\nfunc (m *master) Resize(ws WinSize) error {\n\treturn tcswinsz(m.f.Fd(), ws)\n}\n\nfunc (m *master) ResizeFrom(c Console) error {\n\tws, err := c.Size()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn m.Resize(ws)\n}\n\nfunc (m *master) Reset() error {\n\tif m.original == nil {\n\t\treturn nil\n\t}\n\treturn tcset(m.f.Fd(), m.original)\n}\n\nfunc (m *master) getCurrent() (unix.Termios, error) {\n\tvar termios unix.Termios\n\tif err := tcget(m.f.Fd(), &termios); err != nil {\n\t\treturn unix.Termios{}, err\n\t}\n\treturn termios, nil\n}\n\nfunc (m *master) SetRaw() error {\n\trawState, err := m.getCurrent()\n\tif err != nil {\n\t\treturn err\n\t}\n\trawState = cfmakeraw(rawState)\n\trawState.Oflag = rawState.Oflag | unix.OPOST\n\treturn tcset(m.f.Fd(), &rawState)\n}\n\nfunc (m *master) DisableEcho() error {\n\trawState, err := m.getCurrent()\n\tif err != nil {\n\t\treturn err\n\t}\n\trawState.Lflag = rawState.Lflag &^ unix.ECHO\n\treturn tcset(m.f.Fd(), &rawState)\n}\n\nfunc (m *master) Size() (WinSize, error) {\n\treturn tcgwinsz(m.f.Fd())\n}\n\nfunc (m *master) Fd() uintptr {\n\treturn m.f.Fd()\n}\n\nfunc (m *master) Name() string {\n\treturn m.f.Name()\n}\n\n// checkConsole checks if the provided file is a console\nfunc checkConsole(f File) error {\n\tvar termios unix.Termios\n\tif tcget(f.Fd(), &termios) != nil {\n\t\treturn ErrNotAConsole\n\t}\n\treturn nil\n}\n\nfunc newMaster(f File) (Console, error) {\n\tm := &master{\n\t\tf: f,\n\t}\n\tt, err := m.getCurrent()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tm.original = &t\n\treturn m, nil\n}\n\n// ClearONLCR sets the necessary tty_ioctl(4)s to ensure that a pty pair\n// created by us acts normally. In particular, a not-very-well-known default of\n// Linux unix98 ptys is that they have +onlcr by default. While this isn't a\n// problem for terminal emulators, because we relay data from the terminal we\n// also relay that funky line discipline.\nfunc ClearONLCR(fd uintptr) error {\n\treturn setONLCR(fd, false)\n}\n\n// SetONLCR sets the necessary tty_ioctl(4)s to ensure that a pty pair\n// created by us acts as intended for a terminal emulator.\nfunc SetONLCR(fd uintptr) error {\n\treturn setONLCR(fd, true)\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/console_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 console\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"golang.org/x/sys/windows\"\n)\n\nvar vtInputSupported bool\n\nfunc (m *master) initStdios() {\n\t// Note: We discard console mode warnings, because in/out can be redirected.\n\t//\n\t// TODO: Investigate opening CONOUT$/CONIN$ to handle this correctly\n\n\tm.in = windows.Handle(os.Stdin.Fd())\n\tif err := windows.GetConsoleMode(m.in, &m.inMode); err == nil {\n\t\t// Validate that windows.ENABLE_VIRTUAL_TERMINAL_INPUT is supported, but do not set it.\n\t\tif err = windows.SetConsoleMode(m.in, m.inMode|windows.ENABLE_VIRTUAL_TERMINAL_INPUT); err == nil {\n\t\t\tvtInputSupported = true\n\t\t}\n\t\t// Unconditionally set the console mode back even on failure because SetConsoleMode\n\t\t// remembers invalid bits on input handles.\n\t\twindows.SetConsoleMode(m.in, m.inMode)\n\t}\n\n\tm.out = windows.Handle(os.Stdout.Fd())\n\tif err := windows.GetConsoleMode(m.out, &m.outMode); err == nil {\n\t\tif err := windows.SetConsoleMode(m.out, m.outMode|windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING); err == nil {\n\t\t\tm.outMode |= windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING\n\t\t} else {\n\t\t\twindows.SetConsoleMode(m.out, m.outMode)\n\t\t}\n\t}\n\n\tm.err = windows.Handle(os.Stderr.Fd())\n\tif err := windows.GetConsoleMode(m.err, &m.errMode); err == nil {\n\t\tif err := windows.SetConsoleMode(m.err, m.errMode|windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING); err == nil {\n\t\t\tm.errMode |= windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING\n\t\t} else {\n\t\t\twindows.SetConsoleMode(m.err, m.errMode)\n\t\t}\n\t}\n}\n\ntype master struct {\n\tin     windows.Handle\n\tinMode uint32\n\n\tout     windows.Handle\n\toutMode uint32\n\n\terr     windows.Handle\n\terrMode uint32\n}\n\nfunc (m *master) SetRaw() error {\n\tif err := makeInputRaw(m.in, m.inMode); err != nil {\n\t\treturn err\n\t}\n\n\t// Set StdOut and StdErr to raw mode, we ignore failures since\n\t// windows.DISABLE_NEWLINE_AUTO_RETURN might not be supported on this version of\n\t// Windows.\n\n\twindows.SetConsoleMode(m.out, m.outMode|windows.DISABLE_NEWLINE_AUTO_RETURN)\n\n\twindows.SetConsoleMode(m.err, m.errMode|windows.DISABLE_NEWLINE_AUTO_RETURN)\n\n\treturn nil\n}\n\nfunc (m *master) Reset() error {\n\tvar errs []error\n\n\tfor _, s := range []struct {\n\t\tfd   windows.Handle\n\t\tmode uint32\n\t}{\n\t\t{m.in, m.inMode},\n\t\t{m.out, m.outMode},\n\t\t{m.err, m.errMode},\n\t} {\n\t\tif err := windows.SetConsoleMode(s.fd, s.mode); err != nil {\n\t\t\t// we can't just abort on the first error, otherwise we might leave\n\t\t\t// the console in an unexpected state.\n\t\t\terrs = append(errs, fmt.Errorf(\"unable to restore console mode: %w\", err))\n\t\t}\n\t}\n\n\tif len(errs) > 0 {\n\t\treturn errs[0]\n\t}\n\n\treturn nil\n}\n\nfunc (m *master) Size() (WinSize, error) {\n\tvar info windows.ConsoleScreenBufferInfo\n\terr := windows.GetConsoleScreenBufferInfo(m.out, &info)\n\tif err != nil {\n\t\treturn WinSize{}, fmt.Errorf(\"unable to get console info: %w\", err)\n\t}\n\n\twinsize := WinSize{\n\t\tWidth:  uint16(info.Window.Right - info.Window.Left + 1),\n\t\tHeight: uint16(info.Window.Bottom - info.Window.Top + 1),\n\t}\n\n\treturn winsize, nil\n}\n\nfunc (m *master) Resize(ws WinSize) error {\n\treturn ErrNotImplemented\n}\n\nfunc (m *master) ResizeFrom(c Console) error {\n\treturn ErrNotImplemented\n}\n\nfunc (m *master) DisableEcho() error {\n\tmode := m.inMode &^ windows.ENABLE_ECHO_INPUT\n\tmode |= windows.ENABLE_PROCESSED_INPUT\n\tmode |= windows.ENABLE_LINE_INPUT\n\n\tif err := windows.SetConsoleMode(m.in, mode); err != nil {\n\t\treturn fmt.Errorf(\"unable to set console to disable echo: %w\", err)\n\t}\n\n\treturn nil\n}\n\nfunc (m *master) Close() error {\n\treturn nil\n}\n\nfunc (m *master) Read(b []byte) (int, error) {\n\treturn os.Stdin.Read(b)\n}\n\nfunc (m *master) Write(b []byte) (int, error) {\n\treturn os.Stdout.Write(b)\n}\n\nfunc (m *master) Fd() uintptr {\n\treturn uintptr(m.in)\n}\n\n// on windows, console can only be made from os.Std{in,out,err}, hence there\n// isnt a single name here we can use. Return a dummy \"console\" value in this\n// case should be sufficient.\nfunc (m *master) Name() string {\n\treturn \"console\"\n}\n\n// makeInputRaw puts the terminal (Windows Console) connected to the given\n// file descriptor into raw mode\nfunc makeInputRaw(fd windows.Handle, mode uint32) error {\n\t// See\n\t// -- https://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx\n\t// -- https://msdn.microsoft.com/en-us/library/windows/desktop/ms683462(v=vs.85).aspx\n\n\t// Disable these modes\n\tmode &^= windows.ENABLE_ECHO_INPUT\n\tmode &^= windows.ENABLE_LINE_INPUT\n\tmode &^= windows.ENABLE_MOUSE_INPUT\n\tmode &^= windows.ENABLE_WINDOW_INPUT\n\tmode &^= windows.ENABLE_PROCESSED_INPUT\n\n\t// Enable these modes\n\tmode |= windows.ENABLE_EXTENDED_FLAGS\n\tmode |= windows.ENABLE_INSERT_MODE\n\tmode |= windows.ENABLE_QUICK_EDIT_MODE\n\n\tif vtInputSupported {\n\t\tmode |= windows.ENABLE_VIRTUAL_TERMINAL_INPUT\n\t}\n\n\tif err := windows.SetConsoleMode(fd, mode); err != nil {\n\t\treturn fmt.Errorf(\"unable to set console to raw mode: %w\", err)\n\t}\n\n\treturn nil\n}\n\nfunc checkConsole(f File) error {\n\tvar mode uint32\n\tif err := windows.GetConsoleMode(windows.Handle(f.Fd()), &mode); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc newMaster(f File) (Console, error) {\n\tif f != os.Stdin && f != os.Stdout && f != os.Stderr {\n\t\treturn nil, errors.New(\"creating a console from a file is not supported on windows\")\n\t}\n\tm := &master{}\n\tm.initStdios()\n\treturn m, nil\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/pty_freebsd_cgo.go",
    "content": "//go:build freebsd && cgo\n// +build freebsd,cgo\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 console\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\n/*\n#include <fcntl.h>\n#include <stdlib.h>\n#include <unistd.h>\n*/\nimport \"C\"\n\n// openpt allocates a new pseudo-terminal and establishes a connection with its\n// control device.\nfunc openpt() (*os.File, error) {\n\tfd, err := C.posix_openpt(C.O_RDWR)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"posix_openpt: %w\", err)\n\t}\n\tif _, err := C.grantpt(fd); err != nil {\n\t\tC.close(fd)\n\t\treturn nil, fmt.Errorf(\"grantpt: %w\", err)\n\t}\n\treturn os.NewFile(uintptr(fd), \"\"), nil\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/pty_freebsd_nocgo.go",
    "content": "//go:build freebsd && !cgo\n// +build freebsd,!cgo\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 console\n\nimport (\n\t\"os\"\n)\n\n//\n// Implementing the functions below requires cgo support.  Non-cgo stubs\n// versions are defined below to enable cross-compilation of source code\n// that depends on these functions, but the resultant cross-compiled\n// binaries cannot actually be used.  If the stub function(s) below are\n// actually invoked they will display an error message and cause the\n// calling process to exit.\n//\n\nfunc openpt() (*os.File, error) {\n\tpanic(\"openpt() support requires cgo.\")\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/pty_unix.go",
    "content": "//go:build darwin || linux || netbsd || openbsd\n// +build darwin linux netbsd openbsd\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 console\n\nimport (\n\t\"os\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// openpt allocates a new pseudo-terminal by opening the /dev/ptmx device\nfunc openpt() (*os.File, error) {\n\treturn os.OpenFile(\"/dev/ptmx\", unix.O_RDWR|unix.O_NOCTTY|unix.O_CLOEXEC, 0)\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/pty_zos.go",
    "content": "//go:build zos\n// +build zos\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 console\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\n// openpt allocates a new pseudo-terminal by opening the first available /dev/ptypXX device\nfunc openpt() (*os.File, error) {\n\tvar f *os.File\n\tvar err error\n\tfor i := 0; ; i++ {\n\t\tptyp := fmt.Sprintf(\"/dev/ptyp%04d\", i)\n\t\tf, err = os.OpenFile(ptyp, os.O_RDWR, 0600)\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tif os.IsNotExist(err) {\n\t\t\treturn nil, err\n\t\t}\n\t\t// else probably Resource Busy\n\t}\n\treturn f, nil\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/tc_darwin.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 console\n\nimport (\n\t\"fmt\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tcmdTcGet = unix.TIOCGETA\n\tcmdTcSet = unix.TIOCSETA\n)\n\n// unlockpt unlocks the slave pseudoterminal device corresponding to the master pseudoterminal referred to by f.\n// unlockpt should be called before opening the slave side of a pty.\nfunc unlockpt(f File) error {\n\treturn unix.IoctlSetPointerInt(int(f.Fd()), unix.TIOCPTYUNLK, 0)\n}\n\n// ptsname retrieves the name of the first available pts for the given master.\nfunc ptsname(f File) (string, error) {\n\tn, err := unix.IoctlGetInt(int(f.Fd()), unix.TIOCPTYGNAME)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn fmt.Sprintf(\"/dev/pts/%d\", n), nil\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/tc_freebsd_cgo.go",
    "content": "//go:build freebsd && cgo\n// +build freebsd,cgo\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 console\n\nimport (\n\t\"fmt\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n/*\n#include <stdlib.h>\n#include <unistd.h>\n*/\nimport \"C\"\n\nconst (\n\tcmdTcGet = unix.TIOCGETA\n\tcmdTcSet = unix.TIOCSETA\n)\n\n// unlockpt unlocks the slave pseudoterminal device corresponding to the master pseudoterminal referred to by f.\n// unlockpt should be called before opening the slave side of a pty.\nfunc unlockpt(f File) error {\n\tfd := C.int(f.Fd())\n\tif _, err := C.unlockpt(fd); err != nil {\n\t\tC.close(fd)\n\t\treturn fmt.Errorf(\"unlockpt: %w\", err)\n\t}\n\treturn nil\n}\n\n// ptsname retrieves the name of the first available pts for the given master.\nfunc ptsname(f File) (string, error) {\n\tn, err := unix.IoctlGetInt(int(f.Fd()), unix.TIOCGPTN)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn fmt.Sprintf(\"/dev/pts/%d\", n), nil\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/tc_freebsd_nocgo.go",
    "content": "//go:build freebsd && !cgo\n// +build freebsd,!cgo\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 console\n\nimport (\n\t\"fmt\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tcmdTcGet = unix.TIOCGETA\n\tcmdTcSet = unix.TIOCSETA\n)\n\n//\n// Implementing the functions below requires cgo support.  Non-cgo stubs\n// versions are defined below to enable cross-compilation of source code\n// that depends on these functions, but the resultant cross-compiled\n// binaries cannot actually be used.  If the stub function(s) below are\n// actually invoked they will display an error message and cause the\n// calling process to exit.\n//\n\n// unlockpt unlocks the slave pseudoterminal device corresponding to the master pseudoterminal referred to by f.\n// unlockpt should be called before opening the slave side of a pty.\nfunc unlockpt(f File) error {\n\tpanic(\"unlockpt() support requires cgo.\")\n}\n\n// ptsname retrieves the name of the first available pts for the given master.\nfunc ptsname(f File) (string, error) {\n\tn, err := unix.IoctlGetInt(int(f.Fd()), unix.TIOCGPTN)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn fmt.Sprintf(\"/dev/pts/%d\", n), nil\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/tc_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 console\n\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tcmdTcGet = unix.TCGETS\n\tcmdTcSet = unix.TCSETS\n)\n\n// unlockpt unlocks the slave pseudoterminal device corresponding to the master pseudoterminal referred to by f.\n// unlockpt should be called before opening the slave side of a pty.\nfunc unlockpt(f File) error {\n\tvar u int32\n\t// XXX do not use unix.IoctlSetPointerInt here, see commit dbd69c59b81.\n\tif _, _, err := unix.Syscall(unix.SYS_IOCTL, f.Fd(), unix.TIOCSPTLCK, uintptr(unsafe.Pointer(&u))); err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// ptsname retrieves the name of the first available pts for the given master.\nfunc ptsname(f File) (string, error) {\n\tvar u uint32\n\t// XXX do not use unix.IoctlGetInt here, see commit dbd69c59b81.\n\tif _, _, err := unix.Syscall(unix.SYS_IOCTL, f.Fd(), unix.TIOCGPTN, uintptr(unsafe.Pointer(&u))); err != 0 {\n\t\treturn \"\", err\n\t}\n\treturn fmt.Sprintf(\"/dev/pts/%d\", u), nil\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/tc_netbsd.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 console\n\nimport (\n\t\"bytes\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tcmdTcGet = unix.TIOCGETA\n\tcmdTcSet = unix.TIOCSETA\n)\n\n// unlockpt unlocks the slave pseudoterminal device corresponding to the master pseudoterminal referred to by f.\n// unlockpt should be called before opening the slave side of a pty.\n// This does not exist on NetBSD, it does not allocate controlling terminals on open\nfunc unlockpt(f File) error {\n\treturn nil\n}\n\n// ptsname retrieves the name of the first available pts for the given master.\nfunc ptsname(f File) (string, error) {\n\tptm, err := unix.IoctlGetPtmget(int(f.Fd()), unix.TIOCPTSNAME)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(ptm.Sn[:bytes.IndexByte(ptm.Sn[:], 0)]), nil\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/tc_openbsd_cgo.go",
    "content": "//go:build openbsd && cgo\n// +build openbsd,cgo\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 console\n\nimport (\n\t\"golang.org/x/sys/unix\"\n)\n\n//#include <stdlib.h>\nimport \"C\"\n\nconst (\n\tcmdTcGet = unix.TIOCGETA\n\tcmdTcSet = unix.TIOCSETA\n)\n\n// ptsname retrieves the name of the first available pts for the given master.\nfunc ptsname(f File) (string, error) {\n\tptspath, err := C.ptsname(C.int(f.Fd()))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn C.GoString(ptspath), nil\n}\n\n// unlockpt unlocks the slave pseudoterminal device corresponding to the master pseudoterminal referred to by f.\n// unlockpt should be called before opening the slave side of a pty.\nfunc unlockpt(f File) error {\n\tif _, err := C.grantpt(C.int(f.Fd())); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/tc_openbsd_nocgo.go",
    "content": "//go:build openbsd && !cgo\n// +build openbsd,!cgo\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\n//\n// Implementing the functions below requires cgo support.  Non-cgo stubs\n// versions are defined below to enable cross-compilation of source code\n// that depends on these functions, but the resultant cross-compiled\n// binaries cannot actually be used.  If the stub function(s) below are\n// actually invoked they will display an error message and cause the\n// calling process to exit.\n//\n\npackage console\n\nimport (\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tcmdTcGet = unix.TIOCGETA\n\tcmdTcSet = unix.TIOCSETA\n)\n\nfunc ptsname(f File) (string, error) {\n\tpanic(\"ptsname() support requires cgo.\")\n}\n\nfunc unlockpt(f File) error {\n\tpanic(\"unlockpt() support requires cgo.\")\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/tc_unix.go",
    "content": "//go:build darwin || freebsd || linux || netbsd || openbsd || zos\n// +build darwin freebsd linux netbsd openbsd zos\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 console\n\nimport (\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc tcget(fd uintptr, p *unix.Termios) error {\n\ttermios, err := unix.IoctlGetTermios(int(fd), cmdTcGet)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*p = *termios\n\treturn nil\n}\n\nfunc tcset(fd uintptr, p *unix.Termios) error {\n\treturn unix.IoctlSetTermios(int(fd), cmdTcSet, p)\n}\n\nfunc tcgwinsz(fd uintptr) (WinSize, error) {\n\tvar ws WinSize\n\n\tuws, err := unix.IoctlGetWinsize(int(fd), unix.TIOCGWINSZ)\n\tif err != nil {\n\t\treturn ws, err\n\t}\n\n\t// Translate from unix.Winsize to console.WinSize\n\tws.Height = uws.Row\n\tws.Width = uws.Col\n\tws.x = uws.Xpixel\n\tws.y = uws.Ypixel\n\treturn ws, nil\n}\n\nfunc tcswinsz(fd uintptr, ws WinSize) error {\n\t// Translate from console.WinSize to unix.Winsize\n\n\tvar uws unix.Winsize\n\tuws.Row = ws.Height\n\tuws.Col = ws.Width\n\tuws.Xpixel = ws.x\n\tuws.Ypixel = ws.y\n\n\treturn unix.IoctlSetWinsize(int(fd), unix.TIOCSWINSZ, &uws)\n}\n\nfunc setONLCR(fd uintptr, enable bool) error {\n\tvar termios unix.Termios\n\tif err := tcget(fd, &termios); err != nil {\n\t\treturn err\n\t}\n\tif enable {\n\t\t// Set +onlcr so we can act like a real terminal\n\t\ttermios.Oflag |= unix.ONLCR\n\t} else {\n\t\t// Set -onlcr so we don't have to deal with \\r.\n\t\ttermios.Oflag &^= unix.ONLCR\n\t}\n\treturn tcset(fd, &termios)\n}\n\nfunc cfmakeraw(t unix.Termios) unix.Termios {\n\tt.Iflag &^= (unix.IGNBRK | unix.BRKINT | unix.PARMRK | unix.ISTRIP | unix.INLCR | unix.IGNCR | unix.ICRNL | unix.IXON)\n\tt.Oflag &^= unix.OPOST\n\tt.Lflag &^= (unix.ECHO | unix.ECHONL | unix.ICANON | unix.ISIG | unix.IEXTEN)\n\tt.Cflag &^= (unix.CSIZE | unix.PARENB)\n\tt.Cflag |= unix.CS8\n\tt.Cc[unix.VMIN] = 1\n\tt.Cc[unix.VTIME] = 0\n\n\treturn t\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/console/tc_zos.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 console\n\nimport (\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tcmdTcGet = unix.TCGETS\n\tcmdTcSet = unix.TCSETS\n)\n\n// unlockpt is a no-op on zos.\nfunc unlockpt(File) error {\n\treturn nil\n}\n\n// ptsname retrieves the name of the first available pts for the given master.\nfunc ptsname(f File) (string, error) {\n\treturn \"/dev/ttyp\" + strings.TrimPrefix(f.Name(), \"/dev/ptyp\"), nil\n}\n"
  },
  {
    "path": "vendor/github.com/coreos/go-systemd/v22/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 [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/coreos/go-systemd/v22/NOTICE",
    "content": "CoreOS Project\nCopyright 2018 CoreOS, Inc\n\nThis product includes software developed at CoreOS, Inc.\n(http://www.coreos.com/).\n"
  },
  {
    "path": "vendor/github.com/coreos/go-systemd/v22/dbus/dbus.go",
    "content": "// Copyright 2015 CoreOS, 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// Package dbus provides integration with the systemd D-Bus API.\n// See http://www.freedesktop.org/wiki/Software/systemd/dbus/\npackage dbus\n\nimport (\n\t\"context\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/godbus/dbus/v5\"\n)\n\nconst (\n\talpha        = `abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`\n\tnum          = `0123456789`\n\talphanum     = alpha + num\n\tsignalBuffer = 100\n)\n\n// needsEscape checks whether a byte in a potential dbus ObjectPath needs to be escaped\nfunc needsEscape(i int, b byte) bool {\n\t// Escape everything that is not a-z-A-Z-0-9\n\t// Also escape 0-9 if it's the first character\n\treturn strings.IndexByte(alphanum, b) == -1 ||\n\t\t(i == 0 && strings.IndexByte(num, b) != -1)\n}\n\n// PathBusEscape sanitizes a constituent string of a dbus ObjectPath using the\n// rules that systemd uses for serializing special characters.\nfunc PathBusEscape(path string) string {\n\t// Special case the empty string\n\tif len(path) == 0 {\n\t\treturn \"_\"\n\t}\n\tn := []byte{}\n\tfor i := 0; i < len(path); i++ {\n\t\tc := path[i]\n\t\tif needsEscape(i, c) {\n\t\t\te := fmt.Sprintf(\"_%x\", c)\n\t\t\tn = append(n, []byte(e)...)\n\t\t} else {\n\t\t\tn = append(n, c)\n\t\t}\n\t}\n\treturn string(n)\n}\n\n// pathBusUnescape is the inverse of PathBusEscape.\nfunc pathBusUnescape(path string) string {\n\tif path == \"_\" {\n\t\treturn \"\"\n\t}\n\tn := []byte{}\n\tfor i := 0; i < len(path); i++ {\n\t\tc := path[i]\n\t\tif c == '_' && i+2 < len(path) {\n\t\t\tres, err := hex.DecodeString(path[i+1 : i+3])\n\t\t\tif err == nil {\n\t\t\t\tn = append(n, res...)\n\t\t\t}\n\t\t\ti += 2\n\t\t} else {\n\t\t\tn = append(n, c)\n\t\t}\n\t}\n\treturn string(n)\n}\n\n// Conn is a connection to systemd's dbus endpoint.\ntype Conn struct {\n\t// sysconn/sysobj are only used to call dbus methods\n\tsysconn *dbus.Conn\n\tsysobj  dbus.BusObject\n\n\t// sigconn/sigobj are only used to receive dbus signals\n\tsigconn *dbus.Conn\n\tsigobj  dbus.BusObject\n\n\tjobListener struct {\n\t\tjobs map[dbus.ObjectPath][]chan<- string\n\t\tsync.Mutex\n\t}\n\tsubStateSubscriber struct {\n\t\tupdateCh chan<- *SubStateUpdate\n\t\terrCh    chan<- error\n\t\tsync.Mutex\n\t\tignore      map[dbus.ObjectPath]int64\n\t\tcleanIgnore int64\n\t}\n\tpropertiesSubscriber struct {\n\t\tupdateCh chan<- *PropertiesUpdate\n\t\terrCh    chan<- error\n\t\tsync.Mutex\n\t}\n}\n\n// Deprecated: use NewWithContext instead.\nfunc New() (*Conn, error) {\n\treturn NewWithContext(context.Background())\n}\n\n// NewWithContext establishes a connection to any available bus and authenticates.\n// Callers should call Close() when done with the connection.\nfunc NewWithContext(ctx context.Context) (*Conn, error) {\n\tconn, err := NewSystemConnectionContext(ctx)\n\tif err != nil && os.Geteuid() == 0 {\n\t\treturn NewSystemdConnectionContext(ctx)\n\t}\n\treturn conn, err\n}\n\n// Deprecated: use NewSystemConnectionContext instead.\nfunc NewSystemConnection() (*Conn, error) {\n\treturn NewSystemConnectionContext(context.Background())\n}\n\n// NewSystemConnectionContext establishes a connection to the system bus and authenticates.\n// Callers should call Close() when done with the connection.\nfunc NewSystemConnectionContext(ctx context.Context) (*Conn, error) {\n\treturn NewConnection(func() (*dbus.Conn, error) {\n\t\treturn dbusAuthHelloConnection(ctx, dbus.SystemBusPrivate)\n\t})\n}\n\n// Deprecated: use NewUserConnectionContext instead.\nfunc NewUserConnection() (*Conn, error) {\n\treturn NewUserConnectionContext(context.Background())\n}\n\n// NewUserConnectionContext establishes a connection to the session bus and\n// authenticates. This can be used to connect to systemd user instances.\n// Callers should call Close() when done with the connection.\nfunc NewUserConnectionContext(ctx context.Context) (*Conn, error) {\n\treturn NewConnection(func() (*dbus.Conn, error) {\n\t\treturn dbusAuthHelloConnection(ctx, dbus.SessionBusPrivate)\n\t})\n}\n\n// Deprecated: use NewSystemdConnectionContext instead.\nfunc NewSystemdConnection() (*Conn, error) {\n\treturn NewSystemdConnectionContext(context.Background())\n}\n\n// NewSystemdConnectionContext establishes a private, direct connection to systemd.\n// This can be used for communicating with systemd without a dbus daemon.\n// Callers should call Close() when done with the connection.\nfunc NewSystemdConnectionContext(ctx context.Context) (*Conn, error) {\n\treturn NewConnection(func() (*dbus.Conn, error) {\n\t\t// We skip Hello when talking directly to systemd.\n\t\treturn dbusAuthConnection(ctx, func(opts ...dbus.ConnOption) (*dbus.Conn, error) {\n\t\t\treturn dbus.Dial(\"unix:path=/run/systemd/private\", opts...)\n\t\t})\n\t})\n}\n\n// Close closes an established connection.\nfunc (c *Conn) Close() {\n\tc.sysconn.Close()\n\tc.sigconn.Close()\n}\n\n// Connected returns whether conn is connected\nfunc (c *Conn) Connected() bool {\n\treturn c.sysconn.Connected() && c.sigconn.Connected()\n}\n\n// NewConnection establishes a connection to a bus using a caller-supplied function.\n// This allows connecting to remote buses through a user-supplied mechanism.\n// The supplied function may be called multiple times, and should return independent connections.\n// The returned connection must be fully initialised: the org.freedesktop.DBus.Hello call must have succeeded,\n// and any authentication should be handled by the function.\nfunc NewConnection(dialBus func() (*dbus.Conn, error)) (*Conn, error) {\n\tsysconn, err := dialBus()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tsigconn, err := dialBus()\n\tif err != nil {\n\t\tsysconn.Close()\n\t\treturn nil, err\n\t}\n\n\tc := &Conn{\n\t\tsysconn: sysconn,\n\t\tsysobj:  systemdObject(sysconn),\n\t\tsigconn: sigconn,\n\t\tsigobj:  systemdObject(sigconn),\n\t}\n\n\tc.subStateSubscriber.ignore = make(map[dbus.ObjectPath]int64)\n\tc.jobListener.jobs = make(map[dbus.ObjectPath][]chan<- string)\n\n\t// Setup the listeners on jobs so that we can get completions\n\tc.sigconn.BusObject().Call(\"org.freedesktop.DBus.AddMatch\", 0,\n\t\t\"type='signal', interface='org.freedesktop.systemd1.Manager', member='JobRemoved'\")\n\n\tc.dispatch()\n\treturn c, nil\n}\n\n// GetManagerProperty returns the value of a property on the org.freedesktop.systemd1.Manager\n// interface. The value is returned in its string representation, as defined at\n// https://developer.gnome.org/glib/unstable/gvariant-text.html.\nfunc (c *Conn) GetManagerProperty(prop string) (string, error) {\n\tvariant, err := c.sysobj.GetProperty(\"org.freedesktop.systemd1.Manager.\" + prop)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn variant.String(), nil\n}\n\nfunc dbusAuthConnection(ctx context.Context, createBus func(opts ...dbus.ConnOption) (*dbus.Conn, error)) (*dbus.Conn, error) {\n\tconn, err := createBus(dbus.WithContext(ctx))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Only use EXTERNAL method, and hardcode the uid (not username)\n\t// to avoid a username lookup (which requires a dynamically linked\n\t// libc)\n\tmethods := []dbus.Auth{dbus.AuthExternal(strconv.Itoa(os.Getuid()))}\n\n\terr = conn.Auth(methods)\n\tif err != nil {\n\t\tconn.Close()\n\t\treturn nil, err\n\t}\n\n\treturn conn, nil\n}\n\nfunc dbusAuthHelloConnection(ctx context.Context, createBus func(opts ...dbus.ConnOption) (*dbus.Conn, error)) (*dbus.Conn, error) {\n\tconn, err := dbusAuthConnection(ctx, createBus)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err = conn.Hello(); err != nil {\n\t\tconn.Close()\n\t\treturn nil, err\n\t}\n\n\treturn conn, nil\n}\n\nfunc systemdObject(conn *dbus.Conn) dbus.BusObject {\n\treturn conn.Object(\"org.freedesktop.systemd1\", dbus.ObjectPath(\"/org/freedesktop/systemd1\"))\n}\n"
  },
  {
    "path": "vendor/github.com/coreos/go-systemd/v22/dbus/methods.go",
    "content": "// Copyright 2015, 2018 CoreOS, 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\npackage dbus\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"path\"\n\t\"strconv\"\n\n\t\"github.com/godbus/dbus/v5\"\n)\n\n// Who specifies which process to send a signal to via the [Conn.KillUnitWithTarget].\ntype Who string\n\nconst (\n\t// All sends the signal to all processes in the unit.\n\tAll Who = \"all\"\n\t// Main sends the signal to the main process of the unit.\n\tMain Who = \"main\"\n\t// Control sends the signal to the control process of the unit.\n\tControl Who = \"control\"\n)\n\nfunc (c *Conn) jobComplete(signal *dbus.Signal) {\n\tvar id uint32\n\tvar job dbus.ObjectPath\n\tvar unit string\n\tvar result string\n\n\t_ = dbus.Store(signal.Body, &id, &job, &unit, &result)\n\tc.jobListener.Lock()\n\tfor _, out := range c.jobListener.jobs[job] {\n\t\tout <- result\n\t}\n\tdelete(c.jobListener.jobs, job)\n\tc.jobListener.Unlock()\n}\n\nfunc (c *Conn) startJob(ctx context.Context, ch chan<- string, job string, args ...any) (int, error) {\n\tif ch != nil {\n\t\tc.jobListener.Lock()\n\t\tdefer c.jobListener.Unlock()\n\t}\n\n\tvar p dbus.ObjectPath\n\terr := c.sysobj.CallWithContext(ctx, job, 0, args...).Store(&p)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tif ch != nil {\n\t\tc.jobListener.jobs[p] = append(c.jobListener.jobs[p], ch)\n\t}\n\n\t// ignore error since 0 is fine if conversion fails\n\tjobID, _ := strconv.Atoi(path.Base(string(p)))\n\n\treturn jobID, nil\n}\n\n// Deprecated: use StartUnitContext instead.\nfunc (c *Conn) StartUnit(name string, mode string, ch chan<- string) (int, error) {\n\treturn c.StartUnitContext(context.Background(), name, mode, ch)\n}\n\n// StartUnitContext enqueues a start job and depending jobs, if any (unless otherwise\n// specified by the mode string).\n//\n// Takes the unit to activate, plus a mode string. The mode needs to be one of\n// replace, fail, isolate, ignore-dependencies, ignore-requirements. If\n// \"replace\" the call will start the unit and its dependencies, possibly\n// replacing already queued jobs that conflict with this. If \"fail\" the call\n// will start the unit and its dependencies, but will fail if this would change\n// an already queued job. If \"isolate\" the call will start the unit in question\n// and terminate all units that aren't dependencies of it. If\n// \"ignore-dependencies\" it will start a unit but ignore all its dependencies.\n// If \"ignore-requirements\" it will start a unit but only ignore the\n// requirement dependencies. It is not recommended to make use of the latter\n// two options.\n//\n// If the provided channel is non-nil, a result string will be sent to it upon\n// job completion: one of done, canceled, timeout, failed, dependency, skipped.\n// done indicates successful execution of a job. canceled indicates that a job\n// has been canceled  before it finished execution. timeout indicates that the\n// job timeout was reached. failed indicates that the job failed. dependency\n// indicates that a job this job has been depending on failed and the job hence\n// has been removed too. skipped indicates that a job was skipped because it\n// didn't apply to the units current state.\n//\n// Important: It is the caller's responsibility to unblock the provided channel write,\n// either by reading from the channel or by using a buffered channel. Until the write\n// is unblocked, the Conn object cannot handle other jobs.\n//\n// If no error occurs, the ID of the underlying systemd job will be returned. There\n// does exist the possibility for no error to be returned, but for the returned job\n// ID to be 0. In this case, the actual underlying ID is not 0 and this datapoint\n// should not be considered authoritative.\n//\n// If an error does occur, it will be returned to the user alongside a job ID of 0.\nfunc (c *Conn) StartUnitContext(ctx context.Context, name string, mode string, ch chan<- string) (int, error) {\n\treturn c.startJob(ctx, ch, \"org.freedesktop.systemd1.Manager.StartUnit\", name, mode)\n}\n\n// Deprecated: use StopUnitContext instead.\nfunc (c *Conn) StopUnit(name string, mode string, ch chan<- string) (int, error) {\n\treturn c.StopUnitContext(context.Background(), name, mode, ch)\n}\n\n// StopUnitContext is similar to StartUnitContext, but stops the specified unit\n// rather than starting it.\nfunc (c *Conn) StopUnitContext(ctx context.Context, name string, mode string, ch chan<- string) (int, error) {\n\treturn c.startJob(ctx, ch, \"org.freedesktop.systemd1.Manager.StopUnit\", name, mode)\n}\n\n// Deprecated: use ReloadUnitContext instead.\nfunc (c *Conn) ReloadUnit(name string, mode string, ch chan<- string) (int, error) {\n\treturn c.ReloadUnitContext(context.Background(), name, mode, ch)\n}\n\n// ReloadUnitContext reloads a unit. Reloading is done only if the unit\n// is already running, and fails otherwise.\nfunc (c *Conn) ReloadUnitContext(ctx context.Context, name string, mode string, ch chan<- string) (int, error) {\n\treturn c.startJob(ctx, ch, \"org.freedesktop.systemd1.Manager.ReloadUnit\", name, mode)\n}\n\n// Deprecated: use RestartUnitContext instead.\nfunc (c *Conn) RestartUnit(name string, mode string, ch chan<- string) (int, error) {\n\treturn c.RestartUnitContext(context.Background(), name, mode, ch)\n}\n\n// RestartUnitContext restarts a service. If a service is restarted that isn't\n// running it will be started.\nfunc (c *Conn) RestartUnitContext(ctx context.Context, name string, mode string, ch chan<- string) (int, error) {\n\treturn c.startJob(ctx, ch, \"org.freedesktop.systemd1.Manager.RestartUnit\", name, mode)\n}\n\n// Deprecated: use TryRestartUnitContext instead.\nfunc (c *Conn) TryRestartUnit(name string, mode string, ch chan<- string) (int, error) {\n\treturn c.TryRestartUnitContext(context.Background(), name, mode, ch)\n}\n\n// TryRestartUnitContext is like RestartUnitContext, except that a service that\n// isn't running is not affected by the restart.\nfunc (c *Conn) TryRestartUnitContext(ctx context.Context, name string, mode string, ch chan<- string) (int, error) {\n\treturn c.startJob(ctx, ch, \"org.freedesktop.systemd1.Manager.TryRestartUnit\", name, mode)\n}\n\n// Deprecated: use ReloadOrRestartUnitContext instead.\nfunc (c *Conn) ReloadOrRestartUnit(name string, mode string, ch chan<- string) (int, error) {\n\treturn c.ReloadOrRestartUnitContext(context.Background(), name, mode, ch)\n}\n\n// ReloadOrRestartUnitContext attempts a reload if the unit supports it and use\n// a restart otherwise.\nfunc (c *Conn) ReloadOrRestartUnitContext(ctx context.Context, name string, mode string, ch chan<- string) (int, error) {\n\treturn c.startJob(ctx, ch, \"org.freedesktop.systemd1.Manager.ReloadOrRestartUnit\", name, mode)\n}\n\n// Deprecated: use ReloadOrTryRestartUnitContext instead.\nfunc (c *Conn) ReloadOrTryRestartUnit(name string, mode string, ch chan<- string) (int, error) {\n\treturn c.ReloadOrTryRestartUnitContext(context.Background(), name, mode, ch)\n}\n\n// ReloadOrTryRestartUnitContext attempts a reload if the unit supports it,\n// and use a \"Try\" flavored restart otherwise.\nfunc (c *Conn) ReloadOrTryRestartUnitContext(ctx context.Context, name string, mode string, ch chan<- string) (int, error) {\n\treturn c.startJob(ctx, ch, \"org.freedesktop.systemd1.Manager.ReloadOrTryRestartUnit\", name, mode)\n}\n\n// Deprecated: use StartTransientUnitContext instead.\nfunc (c *Conn) StartTransientUnit(name string, mode string, properties []Property, ch chan<- string) (int, error) {\n\treturn c.StartTransientUnitContext(context.Background(), name, mode, properties, ch)\n}\n\n// StartTransientUnitContext may be used to create and start a transient unit, which\n// will be released as soon as it is not running or referenced anymore or the\n// system is rebooted. name is the unit name including suffix, and must be\n// unique. mode is the same as in StartUnitContext, properties contains properties\n// of the unit.\nfunc (c *Conn) StartTransientUnitContext(ctx context.Context, name string, mode string, properties []Property, ch chan<- string) (int, error) {\n\treturn c.StartTransientUnitAux(ctx, name, mode, properties, make([]PropertyCollection, 0), ch)\n}\n\n// StartTransientUnitAux is the same as StartTransientUnitContext but allows passing\n// auxiliary units in the aux parameter.\nfunc (c *Conn) StartTransientUnitAux(ctx context.Context, name string, mode string, properties []Property, aux []PropertyCollection, ch chan<- string) (int, error) {\n\treturn c.startJob(ctx, ch, \"org.freedesktop.systemd1.Manager.StartTransientUnit\", name, mode, properties, aux)\n}\n\n// Deprecated: use [Conn.KillUnitWithTarget] instead.\nfunc (c *Conn) KillUnit(name string, signal int32) {\n\tc.KillUnitContext(context.Background(), name, signal)\n}\n\n// KillUnitContext takes the unit name and a UNIX signal number to send.\n// All of the unit's processes are killed.\n//\n// Deprecated: use [Conn.KillUnitWithTarget] instead, with target argument set to [All].\nfunc (c *Conn) KillUnitContext(ctx context.Context, name string, signal int32) {\n\t_ = c.KillUnitWithTarget(ctx, name, All, signal)\n}\n\n// KillUnitWithTarget sends a signal to the specified unit.\n// The target argument can be one of [All], [Main], or [Control].\nfunc (c *Conn) KillUnitWithTarget(ctx context.Context, name string, target Who, signal int32) error {\n\treturn c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.KillUnit\", 0, name, string(target), signal).Store()\n}\n\n// Deprecated: use ResetFailedUnitContext instead.\nfunc (c *Conn) ResetFailedUnit(name string) error {\n\treturn c.ResetFailedUnitContext(context.Background(), name)\n}\n\n// ResetFailedUnitContext resets the \"failed\" state of a specific unit.\nfunc (c *Conn) ResetFailedUnitContext(ctx context.Context, name string) error {\n\treturn c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.ResetFailedUnit\", 0, name).Store()\n}\n\n// Deprecated: use SystemStateContext instead.\nfunc (c *Conn) SystemState() (*Property, error) {\n\treturn c.SystemStateContext(context.Background())\n}\n\n// SystemStateContext returns the systemd state. Equivalent to\n// systemctl is-system-running.\nfunc (c *Conn) SystemStateContext(ctx context.Context) (*Property, error) {\n\tvar err error\n\tvar prop dbus.Variant\n\n\tobj := c.sysconn.Object(\"org.freedesktop.systemd1\", \"/org/freedesktop/systemd1\")\n\terr = obj.CallWithContext(ctx, \"org.freedesktop.DBus.Properties.Get\", 0, \"org.freedesktop.systemd1.Manager\", \"SystemState\").Store(&prop)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &Property{Name: \"SystemState\", Value: prop}, nil\n}\n\n// getProperties takes the unit path and returns all of its dbus object properties, for the given dbus interface.\nfunc (c *Conn) getProperties(ctx context.Context, path dbus.ObjectPath, dbusInterface string) (map[string]any, error) {\n\tvar err error\n\tvar props map[string]dbus.Variant\n\n\tif !path.IsValid() {\n\t\treturn nil, fmt.Errorf(\"invalid unit name: %v\", path)\n\t}\n\n\tobj := c.sysconn.Object(\"org.freedesktop.systemd1\", path)\n\terr = obj.CallWithContext(ctx, \"org.freedesktop.DBus.Properties.GetAll\", 0, dbusInterface).Store(&props)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tout := make(map[string]any, len(props))\n\tfor k, v := range props {\n\t\tout[k] = v.Value()\n\t}\n\n\treturn out, nil\n}\n\n// Deprecated: use GetUnitPropertiesContext instead.\nfunc (c *Conn) GetUnitProperties(unit string) (map[string]any, error) {\n\treturn c.GetUnitPropertiesContext(context.Background(), unit)\n}\n\n// GetUnitPropertiesContext takes the (unescaped) unit name and returns all of\n// its dbus object properties.\nfunc (c *Conn) GetUnitPropertiesContext(ctx context.Context, unit string) (map[string]any, error) {\n\tpath := unitPath(unit)\n\treturn c.getProperties(ctx, path, \"org.freedesktop.systemd1.Unit\")\n}\n\n// Deprecated: use GetUnitPathPropertiesContext instead.\nfunc (c *Conn) GetUnitPathProperties(path dbus.ObjectPath) (map[string]any, error) {\n\treturn c.GetUnitPathPropertiesContext(context.Background(), path)\n}\n\n// GetUnitPathPropertiesContext takes the (escaped) unit path and returns all\n// of its dbus object properties.\nfunc (c *Conn) GetUnitPathPropertiesContext(ctx context.Context, path dbus.ObjectPath) (map[string]any, error) {\n\treturn c.getProperties(ctx, path, \"org.freedesktop.systemd1.Unit\")\n}\n\n// Deprecated: use GetAllPropertiesContext instead.\nfunc (c *Conn) GetAllProperties(unit string) (map[string]any, error) {\n\treturn c.GetAllPropertiesContext(context.Background(), unit)\n}\n\n// GetAllPropertiesContext takes the (unescaped) unit name and returns all of\n// its dbus object properties.\nfunc (c *Conn) GetAllPropertiesContext(ctx context.Context, unit string) (map[string]any, error) {\n\tpath := unitPath(unit)\n\treturn c.getProperties(ctx, path, \"\")\n}\n\nfunc (c *Conn) getProperty(ctx context.Context, unit string, dbusInterface string, propertyName string) (*Property, error) {\n\tvar err error\n\tvar prop dbus.Variant\n\n\tpath := unitPath(unit)\n\tif !path.IsValid() {\n\t\treturn nil, errors.New(\"invalid unit name: \" + unit)\n\t}\n\n\tobj := c.sysconn.Object(\"org.freedesktop.systemd1\", path)\n\terr = obj.CallWithContext(ctx, \"org.freedesktop.DBus.Properties.Get\", 0, dbusInterface, propertyName).Store(&prop)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &Property{Name: propertyName, Value: prop}, nil\n}\n\n// Deprecated: use GetUnitPropertyContext instead.\nfunc (c *Conn) GetUnitProperty(unit string, propertyName string) (*Property, error) {\n\treturn c.GetUnitPropertyContext(context.Background(), unit, propertyName)\n}\n\n// GetUnitPropertyContext takes an (unescaped) unit name, and a property name,\n// and returns the property value.\nfunc (c *Conn) GetUnitPropertyContext(ctx context.Context, unit string, propertyName string) (*Property, error) {\n\treturn c.getProperty(ctx, unit, \"org.freedesktop.systemd1.Unit\", propertyName)\n}\n\n// Deprecated: use GetServicePropertyContext instead.\nfunc (c *Conn) GetServiceProperty(service string, propertyName string) (*Property, error) {\n\treturn c.GetServicePropertyContext(context.Background(), service, propertyName)\n}\n\n// GetServicePropertyContext returns property for given service name and property name.\nfunc (c *Conn) GetServicePropertyContext(ctx context.Context, service string, propertyName string) (*Property, error) {\n\treturn c.getProperty(ctx, service, \"org.freedesktop.systemd1.Service\", propertyName)\n}\n\n// Deprecated: use GetUnitTypePropertiesContext instead.\nfunc (c *Conn) GetUnitTypeProperties(unit string, unitType string) (map[string]any, error) {\n\treturn c.GetUnitTypePropertiesContext(context.Background(), unit, unitType)\n}\n\n// GetUnitTypePropertiesContext returns the extra properties for a unit, specific to the unit type.\n// Valid values for unitType: Service, Socket, Target, Device, Mount, Automount, Snapshot, Timer, Swap, Path, Slice, Scope.\n// Returns \"dbus.Error: Unknown interface\" error if the unitType is not the correct type of the unit.\nfunc (c *Conn) GetUnitTypePropertiesContext(ctx context.Context, unit string, unitType string) (map[string]any, error) {\n\tpath := unitPath(unit)\n\treturn c.getProperties(ctx, path, \"org.freedesktop.systemd1.\"+unitType)\n}\n\n// Deprecated: use SetUnitPropertiesContext instead.\nfunc (c *Conn) SetUnitProperties(name string, runtime bool, properties ...Property) error {\n\treturn c.SetUnitPropertiesContext(context.Background(), name, runtime, properties...)\n}\n\n// SetUnitPropertiesContext may be used to modify certain unit properties at runtime.\n// Not all properties may be changed at runtime, but many resource management\n// settings (primarily those in systemd.cgroup(5)) may. The changes are applied\n// instantly, and stored on disk for future boots, unless runtime is true, in which\n// case the settings only apply until the next reboot. name is the name of the unit\n// to modify. properties are the settings to set, encoded as an array of property\n// name and value pairs.\nfunc (c *Conn) SetUnitPropertiesContext(ctx context.Context, name string, runtime bool, properties ...Property) error {\n\treturn c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.SetUnitProperties\", 0, name, runtime, properties).Store()\n}\n\n// Deprecated: use GetUnitTypePropertyContext instead.\nfunc (c *Conn) GetUnitTypeProperty(unit string, unitType string, propertyName string) (*Property, error) {\n\treturn c.GetUnitTypePropertyContext(context.Background(), unit, unitType, propertyName)\n}\n\n// GetUnitTypePropertyContext takes a property name, a unit name, and a unit type,\n// and returns a property value. For valid values of unitType, see GetUnitTypePropertiesContext.\nfunc (c *Conn) GetUnitTypePropertyContext(ctx context.Context, unit string, unitType string, propertyName string) (*Property, error) {\n\treturn c.getProperty(ctx, unit, \"org.freedesktop.systemd1.\"+unitType, propertyName)\n}\n\ntype UnitStatus struct {\n\tName        string          // The primary unit name as string\n\tDescription string          // The human readable description string\n\tLoadState   string          // The load state (i.e. whether the unit file has been loaded successfully)\n\tActiveState string          // The active state (i.e. whether the unit is currently started or not)\n\tSubState    string          // The sub state (a more fine-grained version of the active state that is specific to the unit type, which the active state is not)\n\tFollowed    string          // A unit that is being followed in its state by this unit, if there is any, otherwise the empty string.\n\tPath        dbus.ObjectPath // The unit object path\n\tJobId       uint32          // If there is a job queued for the job unit the numeric job id, 0 otherwise\n\tJobType     string          // The job type as string\n\tJobPath     dbus.ObjectPath // The job object path\n}\n\ntype storeFunc func(retvalues ...any) error\n\n// convertSlice converts a []any result into a slice of the target type T\n// using dbus.Store to handle the type conversion.\nfunc convertSlice[T any](result []any) ([]T, error) {\n\tconverted := make([]T, len(result))\n\tconvertedInterface := make([]any, len(converted))\n\tfor i := range converted {\n\t\tconvertedInterface[i] = &converted[i]\n\t}\n\n\terr := dbus.Store(result, convertedInterface...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn converted, nil\n}\n\n// storeSlice fetches D-Bus array results via the provided storeFunc\n// and converts them into a slice of the target type T.\nfunc storeSlice[T any](f storeFunc) ([]T, error) {\n\tvar result []any\n\terr := f(&result)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn convertSlice[T](result)\n}\n\n// GetUnitByPID returns the unit object path of the unit a process ID\n// belongs to. It takes a UNIX PID and returns the object path. The PID must\n// refer to an existing system process\nfunc (c *Conn) GetUnitByPID(ctx context.Context, pid uint32) (dbus.ObjectPath, error) {\n\tvar result dbus.ObjectPath\n\n\terr := c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.GetUnitByPID\", 0, pid).Store(&result)\n\n\treturn result, err\n}\n\n// GetUnitNameByPID returns the name of the unit a process ID belongs to. It\n// takes a UNIX PID and returns the object path. The PID must refer to an\n// existing system process\nfunc (c *Conn) GetUnitNameByPID(ctx context.Context, pid uint32) (string, error) {\n\tpath, err := c.GetUnitByPID(ctx, pid)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn unitName(path), nil\n}\n\n// Deprecated: use ListUnitsContext instead.\nfunc (c *Conn) ListUnits() ([]UnitStatus, error) {\n\treturn c.ListUnitsContext(context.Background())\n}\n\n// ListUnitsContext returns an array with all currently loaded units. Note that\n// units may be known by multiple names at the same time, and hence there might\n// be more unit names loaded than actual units behind them.\n// Also note that a unit is only loaded if it is active and/or enabled.\n// Units that are both disabled and inactive will thus not be returned.\nfunc (c *Conn) ListUnitsContext(ctx context.Context) ([]UnitStatus, error) {\n\treturn storeSlice[UnitStatus](c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.ListUnits\", 0).Store)\n}\n\n// Deprecated: use ListUnitsFilteredContext instead.\nfunc (c *Conn) ListUnitsFiltered(states []string) ([]UnitStatus, error) {\n\treturn c.ListUnitsFilteredContext(context.Background(), states)\n}\n\n// ListUnitsFilteredContext returns an array with units filtered by state.\n// It takes a list of units' statuses to filter.\nfunc (c *Conn) ListUnitsFilteredContext(ctx context.Context, states []string) ([]UnitStatus, error) {\n\treturn storeSlice[UnitStatus](c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.ListUnitsFiltered\", 0, states).Store)\n}\n\n// Deprecated: use ListUnitsByPatternsContext instead.\nfunc (c *Conn) ListUnitsByPatterns(states []string, patterns []string) ([]UnitStatus, error) {\n\treturn c.ListUnitsByPatternsContext(context.Background(), states, patterns)\n}\n\n// ListUnitsByPatternsContext returns an array with units.\n// It takes a list of units' statuses and names to filter.\n// Note that units may be known by multiple names at the same time,\n// and hence there might be more unit names loaded than actual units behind them.\nfunc (c *Conn) ListUnitsByPatternsContext(ctx context.Context, states []string, patterns []string) ([]UnitStatus, error) {\n\treturn storeSlice[UnitStatus](c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.ListUnitsByPatterns\", 0, states, patterns).Store)\n}\n\n// Deprecated: use ListUnitsByNamesContext instead.\nfunc (c *Conn) ListUnitsByNames(units []string) ([]UnitStatus, error) {\n\treturn c.ListUnitsByNamesContext(context.Background(), units)\n}\n\n// ListUnitsByNamesContext returns an array with units. It takes a list of units'\n// names and returns an UnitStatus array. Comparing to ListUnitsByPatternsContext\n// method, this method returns statuses even for inactive or non-existing\n// units. Input array should contain exact unit names, but not patterns.\n//\n// Requires systemd v230 or higher.\nfunc (c *Conn) ListUnitsByNamesContext(ctx context.Context, units []string) ([]UnitStatus, error) {\n\treturn storeSlice[UnitStatus](c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.ListUnitsByNames\", 0, units).Store)\n}\n\ntype UnitFile struct {\n\tPath string\n\tType string\n}\n\n// Deprecated: use ListUnitFilesContext instead.\nfunc (c *Conn) ListUnitFiles() ([]UnitFile, error) {\n\treturn c.ListUnitFilesContext(context.Background())\n}\n\n// ListUnitFilesContext returns an array of all available units on disk.\nfunc (c *Conn) ListUnitFilesContext(ctx context.Context) ([]UnitFile, error) {\n\treturn storeSlice[UnitFile](c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.ListUnitFiles\", 0).Store)\n}\n\n// Deprecated: use ListUnitFilesByPatternsContext instead.\nfunc (c *Conn) ListUnitFilesByPatterns(states []string, patterns []string) ([]UnitFile, error) {\n\treturn c.ListUnitFilesByPatternsContext(context.Background(), states, patterns)\n}\n\n// ListUnitFilesByPatternsContext returns an array of all available units on disk matched the patterns.\nfunc (c *Conn) ListUnitFilesByPatternsContext(ctx context.Context, states []string, patterns []string) ([]UnitFile, error) {\n\treturn storeSlice[UnitFile](c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.ListUnitFilesByPatterns\", 0, states, patterns).Store)\n}\n\ntype LinkUnitFileChange EnableUnitFileChange\n\n// Deprecated: use LinkUnitFilesContext instead.\nfunc (c *Conn) LinkUnitFiles(files []string, runtime bool, force bool) ([]LinkUnitFileChange, error) {\n\treturn c.LinkUnitFilesContext(context.Background(), files, runtime, force)\n}\n\n// LinkUnitFilesContext links unit files (that are located outside of the\n// usual unit search paths) into the unit search path.\n//\n// It takes a list of absolute paths to unit files to link and two\n// booleans.\n//\n// The first boolean controls whether the unit shall be\n// enabled for runtime only (true, /run), or persistently (false,\n// /etc).\n//\n// The second controls whether symlinks pointing to other units shall\n// be replaced if necessary.\n//\n// This call returns a list of the changes made. The list consists of\n// structures with three strings: the type of the change (one of symlink\n// or unlink), the file name of the symlink and the destination of the\n// symlink.\nfunc (c *Conn) LinkUnitFilesContext(ctx context.Context, files []string, runtime bool, force bool) ([]LinkUnitFileChange, error) {\n\treturn storeSlice[LinkUnitFileChange](c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.LinkUnitFiles\", 0, files, runtime, force).Store)\n}\n\n// Deprecated: use EnableUnitFilesContext instead.\nfunc (c *Conn) EnableUnitFiles(files []string, runtime bool, force bool) (bool, []EnableUnitFileChange, error) {\n\treturn c.EnableUnitFilesContext(context.Background(), files, runtime, force)\n}\n\n// EnableUnitFilesContext may be used to enable one or more units in the system\n// (by creating symlinks to them in /etc or /run).\n//\n// It takes a list of unit files to enable (either just file names or full\n// absolute paths if the unit files are residing outside the usual unit\n// search paths), and two booleans: the first controls whether the unit shall\n// be enabled for runtime only (true, /run), or persistently (false, /etc).\n// The second one controls whether symlinks pointing to other units shall\n// be replaced if necessary.\n//\n// This call returns one boolean and an array with the changes made. The\n// boolean signals whether the unit files contained any enablement\n// information (i.e. an [Install]) section. The changes list consists of\n// structures with three strings: the type of the change (one of symlink\n// or unlink), the file name of the symlink and the destination of the\n// symlink.\nfunc (c *Conn) EnableUnitFilesContext(ctx context.Context, files []string, runtime bool, force bool) (bool, []EnableUnitFileChange, error) {\n\tvar carries_install_info bool\n\tvar result []any\n\n\terr := c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.EnableUnitFiles\", 0, files, runtime, force).Store(&carries_install_info, &result)\n\tif err != nil {\n\t\treturn false, nil, err\n\t}\n\n\tchanges, err := convertSlice[EnableUnitFileChange](result)\n\tif err != nil {\n\t\treturn false, nil, err\n\t}\n\n\treturn carries_install_info, changes, nil\n}\n\ntype EnableUnitFileChange struct {\n\tType        string // Type of the change (one of symlink or unlink)\n\tFilename    string // File name of the symlink\n\tDestination string // Destination of the symlink\n}\n\n// Deprecated: use DisableUnitFilesContext instead.\nfunc (c *Conn) DisableUnitFiles(files []string, runtime bool) ([]DisableUnitFileChange, error) {\n\treturn c.DisableUnitFilesContext(context.Background(), files, runtime)\n}\n\n// DisableUnitFilesContext may be used to disable one or more units in the\n// system (by removing symlinks to them from /etc or /run).\n//\n// It takes a list of unit files to disable (either just file names or full\n// absolute paths if the unit files are residing outside the usual unit\n// search paths), and one boolean: whether the unit was enabled for runtime\n// only (true, /run), or persistently (false, /etc).\n//\n// This call returns an array with the changes made. The changes list\n// consists of structures with three strings: the type of the change (one of\n// symlink or unlink), the file name of the symlink and the destination of the\n// symlink.\nfunc (c *Conn) DisableUnitFilesContext(ctx context.Context, files []string, runtime bool) ([]DisableUnitFileChange, error) {\n\treturn storeSlice[DisableUnitFileChange](c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.DisableUnitFiles\", 0, files, runtime).Store)\n}\n\ntype DisableUnitFileChange struct {\n\tType        string // Type of the change (one of symlink or unlink)\n\tFilename    string // File name of the symlink\n\tDestination string // Destination of the symlink\n}\n\n// Deprecated: use MaskUnitFilesContext instead.\nfunc (c *Conn) MaskUnitFiles(files []string, runtime bool, force bool) ([]MaskUnitFileChange, error) {\n\treturn c.MaskUnitFilesContext(context.Background(), files, runtime, force)\n}\n\n// MaskUnitFilesContext masks one or more units in the system.\n//\n// The files argument contains a  list of units to mask (either just file names\n// or full absolute paths if the unit files are residing outside the usual unit\n// search paths).\n//\n// The runtime argument is used to specify whether the unit was enabled for\n// runtime only (true, /run/systemd/..), or persistently (false,\n// /etc/systemd/..).\nfunc (c *Conn) MaskUnitFilesContext(ctx context.Context, files []string, runtime bool, force bool) ([]MaskUnitFileChange, error) {\n\treturn storeSlice[MaskUnitFileChange](c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.MaskUnitFiles\", 0, files, runtime, force).Store)\n}\n\ntype MaskUnitFileChange struct {\n\tType        string // Type of the change (one of symlink or unlink)\n\tFilename    string // File name of the symlink\n\tDestination string // Destination of the symlink\n}\n\n// Deprecated: use UnmaskUnitFilesContext instead.\nfunc (c *Conn) UnmaskUnitFiles(files []string, runtime bool) ([]UnmaskUnitFileChange, error) {\n\treturn c.UnmaskUnitFilesContext(context.Background(), files, runtime)\n}\n\n// UnmaskUnitFilesContext unmasks one or more units in the system.\n//\n// It takes the list of unit files to mask (either just file names or full\n// absolute paths if the unit files are residing outside the usual unit search\n// paths), and a boolean runtime flag to specify whether the unit was enabled\n// for runtime only (true, /run/systemd/..), or persistently (false,\n// /etc/systemd/..).\nfunc (c *Conn) UnmaskUnitFilesContext(ctx context.Context, files []string, runtime bool) ([]UnmaskUnitFileChange, error) {\n\treturn storeSlice[UnmaskUnitFileChange](c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.UnmaskUnitFiles\", 0, files, runtime).Store)\n}\n\ntype UnmaskUnitFileChange struct {\n\tType        string // Type of the change (one of symlink or unlink)\n\tFilename    string // File name of the symlink\n\tDestination string // Destination of the symlink\n}\n\n// Deprecated: use ReloadContext instead.\nfunc (c *Conn) Reload() error {\n\treturn c.ReloadContext(context.Background())\n}\n\n// ReloadContext instructs systemd to scan for and reload unit files. This is\n// an equivalent to systemctl daemon-reload.\nfunc (c *Conn) ReloadContext(ctx context.Context) error {\n\treturn c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.Reload\", 0).Store()\n}\n\nfunc unitPath(name string) dbus.ObjectPath {\n\treturn dbus.ObjectPath(\"/org/freedesktop/systemd1/unit/\" + PathBusEscape(name))\n}\n\n// unitName returns the unescaped base element of the supplied escaped path.\nfunc unitName(dpath dbus.ObjectPath) string {\n\treturn pathBusUnescape(path.Base(string(dpath)))\n}\n\n// JobStatus holds a currently queued job definition.\ntype JobStatus struct {\n\tId       uint32          // The numeric job id\n\tUnit     string          // The primary unit name for this job\n\tJobType  string          // The job type as string\n\tStatus   string          // The job state as string\n\tJobPath  dbus.ObjectPath // The job object path\n\tUnitPath dbus.ObjectPath // The unit object path\n}\n\n// Deprecated: use ListJobsContext instead.\nfunc (c *Conn) ListJobs() ([]JobStatus, error) {\n\treturn c.ListJobsContext(context.Background())\n}\n\n// ListJobsContext returns an array with all currently queued jobs.\nfunc (c *Conn) ListJobsContext(ctx context.Context) ([]JobStatus, error) {\n\treturn storeSlice[JobStatus](c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.ListJobs\", 0).Store)\n}\n\n// FreezeUnit freezes the cgroup associated with the unit.\n// Note that FreezeUnit and [Conn.ThawUnit] are only supported on systems running with cgroup v2.\nfunc (c *Conn) FreezeUnit(ctx context.Context, unit string) error {\n\treturn c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.FreezeUnit\", 0, unit).Store()\n}\n\n// ThawUnit unfreezes the cgroup associated with the unit.\nfunc (c *Conn) ThawUnit(ctx context.Context, unit string) error {\n\treturn c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.ThawUnit\", 0, unit).Store()\n}\n\n// AttachProcessesToUnit moves existing processes, identified by pids, into an existing systemd unit.\nfunc (c *Conn) AttachProcessesToUnit(ctx context.Context, unit, subcgroup string, pids []uint32) error {\n\treturn c.sysobj.CallWithContext(ctx, \"org.freedesktop.systemd1.Manager.AttachProcessesToUnit\", 0, unit, subcgroup, pids).Store()\n}\n"
  },
  {
    "path": "vendor/github.com/coreos/go-systemd/v22/dbus/properties.go",
    "content": "// Copyright 2015 CoreOS, 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\npackage dbus\n\nimport (\n\t\"github.com/godbus/dbus/v5\"\n)\n\n// From the systemd docs:\n//\n// The properties array of StartTransientUnit() may take many of the settings\n// that may also be configured in unit files. Not all parameters are currently\n// accepted though, but we plan to cover more properties with future release.\n// Currently you may set the Description, Slice and all dependency types of\n// units, as well as RemainAfterExit, ExecStart for service units,\n// TimeoutStopUSec and PIDs for scope units, and CPUAccounting, CPUShares,\n// BlockIOAccounting, BlockIOWeight, BlockIOReadBandwidth,\n// BlockIOWriteBandwidth, BlockIODeviceWeight, MemoryAccounting, MemoryLimit,\n// DevicePolicy, DeviceAllow for services/scopes/slices. These fields map\n// directly to their counterparts in unit files and as normal D-Bus object\n// properties. The exception here is the PIDs field of scope units which is\n// used for construction of the scope only and specifies the initial PIDs to\n// add to the scope object.\n\ntype Property struct {\n\tName  string\n\tValue dbus.Variant\n}\n\ntype PropertyCollection struct {\n\tName       string\n\tProperties []Property\n}\n\ntype execStart struct {\n\tPath             string   // the binary path to execute\n\tArgs             []string // an array with all arguments to pass to the executed command, starting with argument 0\n\tUncleanIsFailure bool     // a boolean whether it should be considered a failure if the process exits uncleanly\n}\n\n// PropExecStart sets the ExecStart service property.  The first argument is a\n// slice with the binary path to execute followed by the arguments to pass to\n// the executed command. See\n// http://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart=\nfunc PropExecStart(command []string, uncleanIsFailure bool) Property {\n\texecStarts := []execStart{\n\t\t{\n\t\t\tPath:             command[0],\n\t\t\tArgs:             command,\n\t\t\tUncleanIsFailure: uncleanIsFailure,\n\t\t},\n\t}\n\n\treturn Property{\n\t\tName:  \"ExecStart\",\n\t\tValue: dbus.MakeVariant(execStarts),\n\t}\n}\n\n// PropRemainAfterExit sets the RemainAfterExit service property. See\n// http://www.freedesktop.org/software/systemd/man/systemd.service.html#RemainAfterExit=\nfunc PropRemainAfterExit(b bool) Property {\n\treturn Property{\n\t\tName:  \"RemainAfterExit\",\n\t\tValue: dbus.MakeVariant(b),\n\t}\n}\n\n// PropType sets the Type service property. See\n// http://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=\nfunc PropType(t string) Property {\n\treturn Property{\n\t\tName:  \"Type\",\n\t\tValue: dbus.MakeVariant(t),\n\t}\n}\n\n// PropDescription sets the Description unit property. See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit#Description=\nfunc PropDescription(desc string) Property {\n\treturn Property{\n\t\tName:  \"Description\",\n\t\tValue: dbus.MakeVariant(desc),\n\t}\n}\n\nfunc propDependency(name string, units []string) Property {\n\treturn Property{\n\t\tName:  name,\n\t\tValue: dbus.MakeVariant(units),\n\t}\n}\n\n// PropRequires sets the Requires unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Requires=\nfunc PropRequires(units ...string) Property {\n\treturn propDependency(\"Requires\", units)\n}\n\n// PropRequiresOverridable sets the RequiresOverridable unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#RequiresOverridable=\nfunc PropRequiresOverridable(units ...string) Property {\n\treturn propDependency(\"RequiresOverridable\", units)\n}\n\n// PropRequisite sets the Requisite unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Requisite=\nfunc PropRequisite(units ...string) Property {\n\treturn propDependency(\"Requisite\", units)\n}\n\n// PropRequisiteOverridable sets the RequisiteOverridable unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#RequisiteOverridable=\nfunc PropRequisiteOverridable(units ...string) Property {\n\treturn propDependency(\"RequisiteOverridable\", units)\n}\n\n// PropWants sets the Wants unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Wants=\nfunc PropWants(units ...string) Property {\n\treturn propDependency(\"Wants\", units)\n}\n\n// PropBindsTo sets the BindsTo unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#BindsTo=\nfunc PropBindsTo(units ...string) Property {\n\treturn propDependency(\"BindsTo\", units)\n}\n\n// PropRequiredBy sets the RequiredBy unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#RequiredBy=\nfunc PropRequiredBy(units ...string) Property {\n\treturn propDependency(\"RequiredBy\", units)\n}\n\n// PropRequiredByOverridable sets the RequiredByOverridable unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#RequiredByOverridable=\nfunc PropRequiredByOverridable(units ...string) Property {\n\treturn propDependency(\"RequiredByOverridable\", units)\n}\n\n// PropWantedBy sets the WantedBy unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#WantedBy=\nfunc PropWantedBy(units ...string) Property {\n\treturn propDependency(\"WantedBy\", units)\n}\n\n// PropBoundBy sets the BoundBy unit property.  See\n// http://www.freedesktop.org/software/systemd/main/systemd.unit.html#BoundBy=\nfunc PropBoundBy(units ...string) Property {\n\treturn propDependency(\"BoundBy\", units)\n}\n\n// PropConflicts sets the Conflicts unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Conflicts=\nfunc PropConflicts(units ...string) Property {\n\treturn propDependency(\"Conflicts\", units)\n}\n\n// PropConflictedBy sets the ConflictedBy unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#ConflictedBy=\nfunc PropConflictedBy(units ...string) Property {\n\treturn propDependency(\"ConflictedBy\", units)\n}\n\n// PropBefore sets the Before unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Before=\nfunc PropBefore(units ...string) Property {\n\treturn propDependency(\"Before\", units)\n}\n\n// PropAfter sets the After unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#After=\nfunc PropAfter(units ...string) Property {\n\treturn propDependency(\"After\", units)\n}\n\n// PropOnFailure sets the OnFailure unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#OnFailure=\nfunc PropOnFailure(units ...string) Property {\n\treturn propDependency(\"OnFailure\", units)\n}\n\n// PropTriggers sets the Triggers unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Triggers=\nfunc PropTriggers(units ...string) Property {\n\treturn propDependency(\"Triggers\", units)\n}\n\n// PropTriggeredBy sets the TriggeredBy unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#TriggeredBy=\nfunc PropTriggeredBy(units ...string) Property {\n\treturn propDependency(\"TriggeredBy\", units)\n}\n\n// PropPropagatesReloadTo sets the PropagatesReloadTo unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#PropagatesReloadTo=\nfunc PropPropagatesReloadTo(units ...string) Property {\n\treturn propDependency(\"PropagatesReloadTo\", units)\n}\n\n// PropRequiresMountsFor sets the RequiresMountsFor unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.unit.html#RequiresMountsFor=\nfunc PropRequiresMountsFor(units ...string) Property {\n\treturn propDependency(\"RequiresMountsFor\", units)\n}\n\n// PropSlice sets the Slice unit property.  See\n// http://www.freedesktop.org/software/systemd/man/systemd.resource-control.html#Slice=\nfunc PropSlice(slice string) Property {\n\treturn Property{\n\t\tName:  \"Slice\",\n\t\tValue: dbus.MakeVariant(slice),\n\t}\n}\n\n// PropPids sets the PIDs field of scope units used in the initial construction\n// of the scope only and specifies the initial PIDs to add to the scope object.\n// See https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/#properties\nfunc PropPids(pids ...uint32) Property {\n\treturn Property{\n\t\tName:  \"PIDs\",\n\t\tValue: dbus.MakeVariant(pids),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/coreos/go-systemd/v22/dbus/set.go",
    "content": "// Copyright 2015 CoreOS, 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\npackage dbus\n\nimport (\n\t\"sync\"\n)\n\ntype set struct {\n\tdata map[string]bool\n\tmu   sync.Mutex\n}\n\nfunc (s *set) Add(value string) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\ts.data[value] = true\n}\n\nfunc (s *set) Remove(value string) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\tdelete(s.data, value)\n}\n\nfunc (s *set) Contains(value string) (exists bool) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\t_, exists = s.data[value]\n\treturn\n}\n\nfunc (s *set) Length() int {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\treturn len(s.data)\n}\n\nfunc (s *set) Values() (values []string) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\tfor val := range s.data {\n\t\tvalues = append(values, val)\n\t}\n\treturn\n}\n\nfunc newSet() *set {\n\treturn &set{data: make(map[string]bool)}\n}\n"
  },
  {
    "path": "vendor/github.com/coreos/go-systemd/v22/dbus/subscription.go",
    "content": "// Copyright 2015 CoreOS, 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\npackage dbus\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"log\"\n\t\"time\"\n\n\t\"github.com/godbus/dbus/v5\"\n)\n\nconst (\n\tcleanIgnoreInterval = int64(10 * time.Second)\n\tignoreInterval      = int64(30 * time.Millisecond)\n)\n\n// Subscribe sets up this connection to subscribe to all systemd dbus events.\n// This is required before calling SubscribeUnits. When the connection closes\n// systemd will automatically stop sending signals so there is no need to\n// explicitly call Unsubscribe().\nfunc (c *Conn) Subscribe() error {\n\tc.sigconn.BusObject().Call(\"org.freedesktop.DBus.AddMatch\", 0,\n\t\t\"type='signal',interface='org.freedesktop.systemd1.Manager',member='UnitNew'\")\n\tc.sigconn.BusObject().Call(\"org.freedesktop.DBus.AddMatch\", 0,\n\t\t\"type='signal',interface='org.freedesktop.DBus.Properties',member='PropertiesChanged'\")\n\n\treturn c.sigobj.Call(\"org.freedesktop.systemd1.Manager.Subscribe\", 0).Store()\n}\n\n// Unsubscribe this connection from systemd dbus events.\nfunc (c *Conn) Unsubscribe() error {\n\treturn c.sigobj.Call(\"org.freedesktop.systemd1.Manager.Unsubscribe\", 0).Store()\n}\n\nfunc (c *Conn) dispatch() {\n\tch := make(chan *dbus.Signal, signalBuffer)\n\n\tc.sigconn.Signal(ch)\n\n\tgo func() {\n\t\tfor {\n\t\t\tsignal, ok := <-ch\n\t\t\tif !ok {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif signal.Name == \"org.freedesktop.systemd1.Manager.JobRemoved\" {\n\t\t\t\tc.jobComplete(signal)\n\t\t\t}\n\n\t\t\tif c.subStateSubscriber.updateCh == nil &&\n\t\t\t\tc.propertiesSubscriber.updateCh == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar unitPath dbus.ObjectPath\n\t\t\tswitch signal.Name {\n\t\t\tcase \"org.freedesktop.systemd1.Manager.JobRemoved\":\n\t\t\t\tunitName := signal.Body[2].(string)\n\t\t\t\t_ = c.sysobj.Call(\"org.freedesktop.systemd1.Manager.GetUnit\", 0, unitName).Store(&unitPath)\n\t\t\tcase \"org.freedesktop.systemd1.Manager.UnitNew\":\n\t\t\t\tunitPath = signal.Body[1].(dbus.ObjectPath)\n\t\t\tcase \"org.freedesktop.DBus.Properties.PropertiesChanged\":\n\t\t\t\tif signal.Body[0].(string) == \"org.freedesktop.systemd1.Unit\" {\n\t\t\t\t\tunitPath = signal.Path\n\n\t\t\t\t\tif len(signal.Body) >= 2 {\n\t\t\t\t\t\tif changed, ok := signal.Body[1].(map[string]dbus.Variant); ok {\n\t\t\t\t\t\t\tc.sendPropertiesUpdate(unitPath, changed)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif unitPath == dbus.ObjectPath(\"\") {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tc.sendSubStateUpdate(unitPath)\n\t\t}\n\t}()\n}\n\n// Deprecated: use SubscribeUnitsContext instead.\nfunc (c *Conn) SubscribeUnits(interval time.Duration) (<-chan map[string]*UnitStatus, <-chan error) {\n\treturn c.SubscribeUnitsContext(context.Background(), interval)\n}\n\n// SubscribeUnitsContext returns two unbuffered channels which will receive all changed units every\n// interval.  Deleted units are sent as nil.\nfunc (c *Conn) SubscribeUnitsContext(ctx context.Context, interval time.Duration) (<-chan map[string]*UnitStatus, <-chan error) {\n\treturn c.SubscribeUnitsCustomContext(ctx, interval, 0, func(u1, u2 *UnitStatus) bool { return *u1 != *u2 }, nil)\n}\n\n// Deprecated: use SubscribeUnitsCustomContext instead.\nfunc (c *Conn) SubscribeUnitsCustom(interval time.Duration, buffer int, isChanged func(*UnitStatus, *UnitStatus) bool, filterUnit func(string) bool) (<-chan map[string]*UnitStatus, <-chan error) {\n\treturn c.SubscribeUnitsCustomContext(context.Background(), interval, buffer, isChanged, filterUnit)\n}\n\n// SubscribeUnitsCustomContext is like [Conn.SubscribeUnitsContext] but lets you specify the buffer\n// size of the channels, the comparison function for detecting changes and a filter\n// function for cutting down on the noise that your channel receives.\nfunc (c *Conn) SubscribeUnitsCustomContext(ctx context.Context, interval time.Duration, buffer int, isChanged func(*UnitStatus, *UnitStatus) bool, filterUnit func(string) bool) (<-chan map[string]*UnitStatus, <-chan error) {\n\told := make(map[string]*UnitStatus)\n\tstatusChan := make(chan map[string]*UnitStatus, buffer)\n\terrChan := make(chan error, buffer)\n\n\tgo func() {\n\t\tfor {\n\t\t\ttimerChan := time.After(interval)\n\n\t\t\tunits, err := c.ListUnitsContext(ctx)\n\t\t\tif err == nil {\n\t\t\t\tcur := make(map[string]*UnitStatus)\n\t\t\t\tfor i := range units {\n\t\t\t\t\tif filterUnit != nil && filterUnit(units[i].Name) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tcur[units[i].Name] = &units[i]\n\t\t\t\t}\n\n\t\t\t\t// add all new or changed units\n\t\t\t\tchanged := make(map[string]*UnitStatus)\n\t\t\t\tfor n, u := range cur {\n\t\t\t\t\tif oldU, ok := old[n]; !ok || isChanged(oldU, u) {\n\t\t\t\t\t\tchanged[n] = u\n\t\t\t\t\t}\n\t\t\t\t\tdelete(old, n)\n\t\t\t\t}\n\n\t\t\t\t// add all deleted units\n\t\t\t\tfor oldN := range old {\n\t\t\t\t\tchanged[oldN] = nil\n\t\t\t\t}\n\n\t\t\t\told = cur\n\n\t\t\t\tif len(changed) != 0 {\n\t\t\t\t\tstatusChan <- changed\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\terrChan <- err\n\t\t\t}\n\n\t\t\tselect {\n\t\t\tcase <-timerChan:\n\t\t\t\tcontinue\n\t\t\tcase <-ctx.Done():\n\t\t\t\tclose(statusChan)\n\t\t\t\tclose(errChan)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}()\n\n\treturn statusChan, errChan\n}\n\ntype SubStateUpdate struct {\n\tUnitName string\n\tSubState string\n}\n\n// SetSubStateSubscriber writes to updateCh when any unit's substate changes.\n// Although this writes to updateCh on every state change, the reported state\n// may be more recent than the change that generated it (due to an unavoidable\n// race in the systemd dbus interface).  That is, this method provides a good\n// way to keep a current view of all units' states, but is not guaranteed to\n// show every state transition they go through.  Furthermore, state changes\n// will only be written to the channel with non-blocking writes.  If updateCh\n// is full, it attempts to write an error to errCh; if errCh is full, the error\n// passes silently.\nfunc (c *Conn) SetSubStateSubscriber(updateCh chan<- *SubStateUpdate, errCh chan<- error) {\n\tif c == nil {\n\t\tmsg := \"nil receiver\"\n\t\tselect {\n\t\tcase errCh <- errors.New(msg):\n\t\tdefault:\n\t\t\tlog.Printf(\"full error channel while reporting: %s\\n\", msg)\n\t\t}\n\t\treturn\n\t}\n\n\tc.subStateSubscriber.Lock()\n\tdefer c.subStateSubscriber.Unlock()\n\tc.subStateSubscriber.updateCh = updateCh\n\tc.subStateSubscriber.errCh = errCh\n}\n\nfunc (c *Conn) sendSubStateUpdate(unitPath dbus.ObjectPath) {\n\tc.subStateSubscriber.Lock()\n\tdefer c.subStateSubscriber.Unlock()\n\n\tif c.subStateSubscriber.updateCh == nil {\n\t\treturn\n\t}\n\n\tisIgnored := c.shouldIgnore(unitPath)\n\tdefer c.cleanIgnore()\n\tif isIgnored {\n\t\treturn\n\t}\n\n\tinfo, err := c.GetUnitPathProperties(unitPath)\n\tif err != nil {\n\t\tselect {\n\t\tcase c.subStateSubscriber.errCh <- err:\n\t\tdefault:\n\t\t\tlog.Printf(\"full error channel while reporting: %s\\n\", err)\n\t\t}\n\t\treturn\n\t}\n\tdefer c.updateIgnore(unitPath, info)\n\n\tname, ok := info[\"Id\"].(string)\n\tif !ok {\n\t\tmsg := \"failed to cast info.Id\"\n\t\tselect {\n\t\tcase c.subStateSubscriber.errCh <- errors.New(msg):\n\t\tdefault:\n\t\t\tlog.Printf(\"full error channel while reporting: %s\\n\", err)\n\t\t}\n\t\treturn\n\t}\n\tsubstate, ok := info[\"SubState\"].(string)\n\tif !ok {\n\t\tmsg := \"failed to cast info.SubState\"\n\t\tselect {\n\t\tcase c.subStateSubscriber.errCh <- errors.New(msg):\n\t\tdefault:\n\t\t\tlog.Printf(\"full error channel while reporting: %s\\n\", msg)\n\t\t}\n\t\treturn\n\t}\n\n\tupdate := &SubStateUpdate{name, substate}\n\tselect {\n\tcase c.subStateSubscriber.updateCh <- update:\n\tdefault:\n\t\tmsg := \"update channel is full\"\n\t\tselect {\n\t\tcase c.subStateSubscriber.errCh <- errors.New(msg):\n\t\tdefault:\n\t\t\tlog.Printf(\"full error channel while reporting: %s\\n\", msg)\n\t\t}\n\t\treturn\n\t}\n}\n\n// The ignore functions work around a wart in the systemd dbus interface.\n// Requesting the properties of an unloaded unit will cause systemd to send a\n// pair of UnitNew/UnitRemoved signals.  Because we need to get a unit's\n// properties on UnitNew (as that's the only indication of a new unit coming up\n// for the first time), we would enter an infinite loop if we did not attempt\n// to detect and ignore these spurious signals.  The signal themselves are\n// indistinguishable from relevant ones, so we (somewhat hackishly) ignore an\n// unloaded unit's signals for a short time after requesting its properties.\n// This means that we will miss e.g. a transient unit being restarted\n// *immediately* upon failure and also a transient unit being started\n// immediately after requesting its status (with systemctl status, for example,\n// because this causes a UnitNew signal to be sent which then causes us to fetch\n// the properties).\n\nfunc (c *Conn) shouldIgnore(path dbus.ObjectPath) bool {\n\tt, ok := c.subStateSubscriber.ignore[path]\n\treturn ok && t >= time.Now().UnixNano()\n}\n\nfunc (c *Conn) updateIgnore(path dbus.ObjectPath, info map[string]any) {\n\tloadState, ok := info[\"LoadState\"].(string)\n\tif !ok {\n\t\treturn\n\t}\n\n\t// unit is unloaded - it will trigger bad systemd dbus behavior\n\tif loadState == \"not-found\" {\n\t\tc.subStateSubscriber.ignore[path] = time.Now().UnixNano() + ignoreInterval\n\t}\n}\n\n// without this, ignore would grow unboundedly over time\nfunc (c *Conn) cleanIgnore() {\n\tnow := time.Now().UnixNano()\n\tif c.subStateSubscriber.cleanIgnore < now {\n\t\tc.subStateSubscriber.cleanIgnore = now + cleanIgnoreInterval\n\n\t\tfor p, t := range c.subStateSubscriber.ignore {\n\t\t\tif t < now {\n\t\t\t\tdelete(c.subStateSubscriber.ignore, p)\n\t\t\t}\n\t\t}\n\t}\n}\n\n// PropertiesUpdate holds a map of a unit's changed properties\ntype PropertiesUpdate struct {\n\tUnitName string\n\tChanged  map[string]dbus.Variant\n}\n\n// SetPropertiesSubscriber writes to updateCh when any unit's properties\n// change. Every property change reported by systemd will be sent; that is, no\n// transitions will be \"missed\" (as they might be with SetSubStateSubscriber).\n// However, state changes will only be written to the channel with non-blocking\n// writes.  If updateCh is full, it attempts to write an error to errCh; if\n// errCh is full, the error passes silently.\nfunc (c *Conn) SetPropertiesSubscriber(updateCh chan<- *PropertiesUpdate, errCh chan<- error) {\n\tc.propertiesSubscriber.Lock()\n\tdefer c.propertiesSubscriber.Unlock()\n\tc.propertiesSubscriber.updateCh = updateCh\n\tc.propertiesSubscriber.errCh = errCh\n}\n\n// we don't need to worry about shouldIgnore() here because\n// sendPropertiesUpdate doesn't call GetProperties()\nfunc (c *Conn) sendPropertiesUpdate(unitPath dbus.ObjectPath, changedProps map[string]dbus.Variant) {\n\tc.propertiesSubscriber.Lock()\n\tdefer c.propertiesSubscriber.Unlock()\n\n\tif c.propertiesSubscriber.updateCh == nil {\n\t\treturn\n\t}\n\n\tupdate := &PropertiesUpdate{unitName(unitPath), changedProps}\n\n\tselect {\n\tcase c.propertiesSubscriber.updateCh <- update:\n\tdefault:\n\t\tmsg := \"update channel is full\"\n\t\tselect {\n\t\tcase c.propertiesSubscriber.errCh <- errors.New(msg):\n\t\tdefault:\n\t\t\tlog.Printf(\"full error channel while reporting: %s\\n\", msg)\n\t\t}\n\t\treturn\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/coreos/go-systemd/v22/dbus/subscription_set.go",
    "content": "// Copyright 2015 CoreOS, 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\npackage dbus\n\nimport (\n\t\"context\"\n\t\"time\"\n)\n\n// SubscriptionSet returns a subscription set which is like conn.Subscribe but\n// can filter to only return events for a set of units.\ntype SubscriptionSet struct {\n\t*set\n\tconn *Conn\n}\n\nfunc (s *SubscriptionSet) filter(unit string) bool {\n\treturn !s.Contains(unit)\n}\n\n// SubscribeContext starts listening for dbus events for all of the units in the set.\n// Returns channels identical to conn.SubscribeUnits.\nfunc (s *SubscriptionSet) SubscribeContext(ctx context.Context) (<-chan map[string]*UnitStatus, <-chan error) {\n\t// TODO: Make fully evented by using systemd 209 with properties changed values\n\treturn s.conn.SubscribeUnitsCustomContext(ctx, time.Second, 0,\n\t\tmismatchUnitStatus,\n\t\tfunc(unit string) bool { return s.filter(unit) },\n\t)\n}\n\n// Deprecated: use SubscribeContext instead.\nfunc (s *SubscriptionSet) Subscribe() (<-chan map[string]*UnitStatus, <-chan error) {\n\treturn s.SubscribeContext(context.Background())\n}\n\n// NewSubscriptionSet returns a new subscription set.\nfunc (c *Conn) NewSubscriptionSet() *SubscriptionSet {\n\treturn &SubscriptionSet{newSet(), c}\n}\n\n// mismatchUnitStatus returns true if the provided UnitStatus objects\n// are not equivalent. false is returned if the objects are equivalent.\n// Only the Name, Description and state-related fields are used in\n// the comparison.\nfunc mismatchUnitStatus(u1, u2 *UnitStatus) bool {\n\treturn u1.Name != u2.Name ||\n\t\tu1.Description != u2.Description ||\n\t\tu1.LoadState != u2.LoadState ||\n\t\tu1.ActiveState != u2.ActiveState ||\n\t\tu1.SubState != u2.SubState\n}\n"
  },
  {
    "path": "vendor/github.com/cpuguy83/go-md2man/v2/LICENSE.md",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 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.\n"
  },
  {
    "path": "vendor/github.com/cpuguy83/go-md2man/v2/md2man/debug.go",
    "content": "package md2man\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/russross/blackfriday/v2\"\n)\n\nfunc fmtListFlags(flags blackfriday.ListType) string {\n\tknownFlags := []struct {\n\t\tname string\n\t\tflag blackfriday.ListType\n\t}{\n\t\t{\"ListTypeOrdered\", blackfriday.ListTypeOrdered},\n\t\t{\"ListTypeDefinition\", blackfriday.ListTypeDefinition},\n\t\t{\"ListTypeTerm\", blackfriday.ListTypeTerm},\n\t\t{\"ListItemContainsBlock\", blackfriday.ListItemContainsBlock},\n\t\t{\"ListItemBeginningOfList\", blackfriday.ListItemBeginningOfList},\n\t\t{\"ListItemEndOfList\", blackfriday.ListItemEndOfList},\n\t}\n\n\tvar f []string\n\tfor _, kf := range knownFlags {\n\t\tif flags&kf.flag != 0 {\n\t\t\tf = append(f, kf.name)\n\t\t\tflags &^= kf.flag\n\t\t}\n\t}\n\tif flags != 0 {\n\t\tf = append(f, fmt.Sprintf(\"Unknown(%#x)\", flags))\n\t}\n\treturn strings.Join(f, \"|\")\n}\n\ntype debugDecorator struct {\n\tblackfriday.Renderer\n}\n\nfunc depth(node *blackfriday.Node) int {\n\td := 0\n\tfor n := node.Parent; n != nil; n = n.Parent {\n\t\td++\n\t}\n\treturn d\n}\n\nfunc (d *debugDecorator) RenderNode(w io.Writer, node *blackfriday.Node, entering bool) blackfriday.WalkStatus {\n\tfmt.Fprintf(os.Stderr, \"%s%s %v %v\\n\",\n\t\tstrings.Repeat(\"  \", depth(node)),\n\t\tmap[bool]string{true: \"+\", false: \"-\"}[entering],\n\t\tnode,\n\t\tfmtListFlags(node.ListFlags))\n\tvar b strings.Builder\n\tstatus := d.Renderer.RenderNode(io.MultiWriter(&b, w), node, entering)\n\tif b.Len() > 0 {\n\t\tfmt.Fprintf(os.Stderr, \">> %q\\n\", b.String())\n\t}\n\treturn status\n}\n"
  },
  {
    "path": "vendor/github.com/cpuguy83/go-md2man/v2/md2man/md2man.go",
    "content": "// Package md2man aims in converting markdown into roff (man pages).\npackage md2man\n\nimport (\n\t\"os\"\n\t\"strconv\"\n\n\t\"github.com/russross/blackfriday/v2\"\n)\n\n// Render converts a markdown document into a roff formatted document.\nfunc Render(doc []byte) []byte {\n\trenderer := NewRoffRenderer()\n\tvar r blackfriday.Renderer = renderer\n\tif v, _ := strconv.ParseBool(os.Getenv(\"MD2MAN_DEBUG\")); v {\n\t\tr = &debugDecorator{Renderer: r}\n\t}\n\n\treturn blackfriday.Run(doc,\n\t\t[]blackfriday.Option{\n\t\t\tblackfriday.WithRenderer(r),\n\t\t\tblackfriday.WithExtensions(renderer.GetExtensions()),\n\t\t}...)\n}\n"
  },
  {
    "path": "vendor/github.com/cpuguy83/go-md2man/v2/md2man/roff.go",
    "content": "package md2man\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/russross/blackfriday/v2\"\n)\n\n// roffRenderer implements the blackfriday.Renderer interface for creating\n// roff format (manpages) from markdown text\ntype roffRenderer struct {\n\tlistCounters []int\n\tfirstHeader  bool\n\tlistDepth    int\n}\n\nconst (\n\ttitleHeader       = \".TH \"\n\ttopLevelHeader    = \"\\n\\n.SH \"\n\tsecondLevelHdr    = \"\\n.SH \"\n\totherHeader       = \"\\n.SS \"\n\tcrTag             = \"\\n\"\n\temphTag           = \"\\\\fI\"\n\temphCloseTag      = \"\\\\fP\"\n\tstrongTag         = \"\\\\fB\"\n\tstrongCloseTag    = \"\\\\fP\"\n\tbreakTag          = \"\\n.br\\n\"\n\tparaTag           = \"\\n.PP\\n\"\n\thruleTag          = \"\\n.ti 0\\n\\\\l'\\\\n(.lu'\\n\"\n\tlinkTag           = \"\\n\\\\[la]\"\n\tlinkCloseTag      = \"\\\\[ra]\"\n\tcodespanTag       = \"\\\\fB\"\n\tcodespanCloseTag  = \"\\\\fR\"\n\tcodeTag           = \"\\n.EX\\n\"\n\tcodeCloseTag      = \".EE\\n\" // Do not prepend a newline character since code blocks, by definition, include a newline already (or at least as how blackfriday gives us on).\n\tquoteTag          = \"\\n.PP\\n.RS\\n\"\n\tquoteCloseTag     = \"\\n.RE\\n\"\n\tlistTag           = \"\\n.RS\\n\"\n\tlistCloseTag      = \".RE\\n\"\n\tdtTag             = \"\\n.TP\\n\"\n\tdd2Tag            = \"\\n\"\n\ttableStart        = \"\\n.TS\\nallbox;\\n\"\n\ttableEnd          = \".TE\\n\"\n\ttableCellStart    = \"T{\\n\"\n\ttableCellEnd      = \"\\nT}\"\n\ttablePreprocessor = `'\\\" t`\n)\n\n// NewRoffRenderer creates a new blackfriday Renderer for generating roff documents\n// from markdown\nfunc NewRoffRenderer() *roffRenderer {\n\treturn &roffRenderer{}\n}\n\n// GetExtensions returns the list of extensions used by this renderer implementation\nfunc (*roffRenderer) GetExtensions() blackfriday.Extensions {\n\treturn blackfriday.NoIntraEmphasis |\n\t\tblackfriday.Tables |\n\t\tblackfriday.FencedCode |\n\t\tblackfriday.SpaceHeadings |\n\t\tblackfriday.Footnotes |\n\t\tblackfriday.Titleblock |\n\t\tblackfriday.DefinitionLists\n}\n\n// RenderHeader handles outputting the header at document start\nfunc (r *roffRenderer) RenderHeader(w io.Writer, ast *blackfriday.Node) {\n\t// We need to walk the tree to check if there are any tables.\n\t// If there are, we need to enable the roff table preprocessor.\n\tast.Walk(func(node *blackfriday.Node, entering bool) blackfriday.WalkStatus {\n\t\tif node.Type == blackfriday.Table {\n\t\t\tout(w, tablePreprocessor+\"\\n\")\n\t\t\treturn blackfriday.Terminate\n\t\t}\n\t\treturn blackfriday.GoToNext\n\t})\n\n\t// disable hyphenation\n\tout(w, \".nh\\n\")\n}\n\n// RenderFooter handles outputting the footer at the document end; the roff\n// renderer has no footer information\nfunc (r *roffRenderer) RenderFooter(w io.Writer, ast *blackfriday.Node) {\n}\n\n// RenderNode is called for each node in a markdown document; based on the node\n// type the equivalent roff output is sent to the writer\nfunc (r *roffRenderer) RenderNode(w io.Writer, node *blackfriday.Node, entering bool) blackfriday.WalkStatus {\n\twalkAction := blackfriday.GoToNext\n\n\tswitch node.Type {\n\tcase blackfriday.Text:\n\t\t// Special case: format the NAME section as required for proper whatis parsing.\n\t\t// Refer to the lexgrog(1) and groff_man(7) manual pages for details.\n\t\tif node.Parent != nil &&\n\t\t\tnode.Parent.Type == blackfriday.Paragraph &&\n\t\t\tnode.Parent.Prev != nil &&\n\t\t\tnode.Parent.Prev.Type == blackfriday.Heading &&\n\t\t\tnode.Parent.Prev.FirstChild != nil &&\n\t\t\tbytes.EqualFold(node.Parent.Prev.FirstChild.Literal, []byte(\"NAME\")) {\n\t\t\tbefore, after, found := bytesCut(node.Literal, []byte(\" - \"))\n\t\t\tescapeSpecialChars(w, before)\n\t\t\tif found {\n\t\t\t\tout(w, ` \\- `)\n\t\t\t\tescapeSpecialChars(w, after)\n\t\t\t}\n\t\t} else {\n\t\t\tescapeSpecialChars(w, node.Literal)\n\t\t}\n\tcase blackfriday.Softbreak:\n\t\tout(w, crTag)\n\tcase blackfriday.Hardbreak:\n\t\tout(w, breakTag)\n\tcase blackfriday.Emph:\n\t\tif entering {\n\t\t\tout(w, emphTag)\n\t\t} else {\n\t\t\tout(w, emphCloseTag)\n\t\t}\n\tcase blackfriday.Strong:\n\t\tif entering {\n\t\t\tout(w, strongTag)\n\t\t} else {\n\t\t\tout(w, strongCloseTag)\n\t\t}\n\tcase blackfriday.Link:\n\t\t// Don't render the link text for automatic links, because this\n\t\t// will only duplicate the URL in the roff output.\n\t\t// See https://daringfireball.net/projects/markdown/syntax#autolink\n\t\tif !bytes.Equal(node.LinkData.Destination, node.FirstChild.Literal) {\n\t\t\tout(w, string(node.FirstChild.Literal))\n\t\t}\n\t\t// Hyphens in a link must be escaped to avoid word-wrap in the rendered man page.\n\t\tescapedLink := strings.ReplaceAll(string(node.LinkData.Destination), \"-\", \"\\\\-\")\n\t\tout(w, linkTag+escapedLink+linkCloseTag)\n\t\twalkAction = blackfriday.SkipChildren\n\tcase blackfriday.Image:\n\t\t// ignore images\n\t\twalkAction = blackfriday.SkipChildren\n\tcase blackfriday.Code:\n\t\tout(w, codespanTag)\n\t\tescapeSpecialChars(w, node.Literal)\n\t\tout(w, codespanCloseTag)\n\tcase blackfriday.Document:\n\t\tbreak\n\tcase blackfriday.Paragraph:\n\t\tif entering {\n\t\t\tif r.listDepth > 0 {\n\t\t\t\t// roff .PP markers break lists\n\t\t\t\tif node.Prev != nil { // continued paragraph\n\t\t\t\t\tif node.Prev.Type == blackfriday.List && node.Prev.ListFlags&blackfriday.ListTypeDefinition == 0 {\n\t\t\t\t\t\tout(w, \".IP\\n\")\n\t\t\t\t\t} else {\n\t\t\t\t\t\tout(w, crTag)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if node.Prev != nil && node.Prev.Type == blackfriday.Heading {\n\t\t\t\tout(w, crTag)\n\t\t\t} else {\n\t\t\t\tout(w, paraTag)\n\t\t\t}\n\t\t} else {\n\t\t\tif node.Next == nil || node.Next.Type != blackfriday.List {\n\t\t\t\tout(w, crTag)\n\t\t\t}\n\t\t}\n\tcase blackfriday.BlockQuote:\n\t\tif entering {\n\t\t\tout(w, quoteTag)\n\t\t} else {\n\t\t\tout(w, quoteCloseTag)\n\t\t}\n\tcase blackfriday.Heading:\n\t\tr.handleHeading(w, node, entering)\n\tcase blackfriday.HorizontalRule:\n\t\tout(w, hruleTag)\n\tcase blackfriday.List:\n\t\tr.handleList(w, node, entering)\n\tcase blackfriday.Item:\n\t\tr.handleItem(w, node, entering)\n\tcase blackfriday.CodeBlock:\n\t\tout(w, codeTag)\n\t\tescapeSpecialChars(w, node.Literal)\n\t\tout(w, codeCloseTag)\n\tcase blackfriday.Table:\n\t\tr.handleTable(w, node, entering)\n\tcase blackfriday.TableHead:\n\tcase blackfriday.TableBody:\n\tcase blackfriday.TableRow:\n\t\t// no action as cell entries do all the nroff formatting\n\t\treturn blackfriday.GoToNext\n\tcase blackfriday.TableCell:\n\t\tr.handleTableCell(w, node, entering)\n\tcase blackfriday.HTMLSpan:\n\t\t// ignore other HTML tags\n\tcase blackfriday.HTMLBlock:\n\t\tif bytes.HasPrefix(node.Literal, []byte(\"<!--\")) {\n\t\t\tbreak // ignore comments, no warning\n\t\t}\n\t\tfmt.Fprintln(os.Stderr, \"WARNING: go-md2man does not handle node type \"+node.Type.String())\n\tdefault:\n\t\tfmt.Fprintln(os.Stderr, \"WARNING: go-md2man does not handle node type \"+node.Type.String())\n\t}\n\treturn walkAction\n}\n\nfunc (r *roffRenderer) handleHeading(w io.Writer, node *blackfriday.Node, entering bool) {\n\tif entering {\n\t\tswitch node.Level {\n\t\tcase 1:\n\t\t\tif !r.firstHeader {\n\t\t\t\tout(w, titleHeader)\n\t\t\t\tr.firstHeader = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tout(w, topLevelHeader)\n\t\tcase 2:\n\t\t\tout(w, secondLevelHdr)\n\t\tdefault:\n\t\t\tout(w, otherHeader)\n\t\t}\n\t}\n}\n\nfunc (r *roffRenderer) handleList(w io.Writer, node *blackfriday.Node, entering bool) {\n\topenTag := listTag\n\tcloseTag := listCloseTag\n\tif (entering && r.listDepth == 0) || (!entering && r.listDepth == 1) {\n\t\topenTag = crTag\n\t\tcloseTag = \"\"\n\t}\n\tif node.ListFlags&blackfriday.ListTypeDefinition != 0 {\n\t\t// tags for definition lists handled within Item node\n\t\topenTag = \"\"\n\t\tcloseTag = \"\"\n\t}\n\tif entering {\n\t\tr.listDepth++\n\t\tif node.ListFlags&blackfriday.ListTypeOrdered != 0 {\n\t\t\tr.listCounters = append(r.listCounters, 1)\n\t\t}\n\t\tout(w, openTag)\n\t} else {\n\t\tif node.ListFlags&blackfriday.ListTypeOrdered != 0 {\n\t\t\tr.listCounters = r.listCounters[:len(r.listCounters)-1]\n\t\t}\n\t\tout(w, closeTag)\n\t\tr.listDepth--\n\t}\n}\n\nfunc (r *roffRenderer) handleItem(w io.Writer, node *blackfriday.Node, entering bool) {\n\tif entering {\n\t\tif node.ListFlags&blackfriday.ListTypeOrdered != 0 {\n\t\t\tout(w, fmt.Sprintf(\".IP \\\"%3d.\\\" 5\\n\", r.listCounters[len(r.listCounters)-1]))\n\t\t\tr.listCounters[len(r.listCounters)-1]++\n\t\t} else if node.ListFlags&blackfriday.ListTypeTerm != 0 {\n\t\t\t// DT (definition term): line just before DD (see below).\n\t\t\tout(w, dtTag)\n\t\t} else if node.ListFlags&blackfriday.ListTypeDefinition != 0 {\n\t\t\t// DD (definition description): line that starts with \": \".\n\t\t\t//\n\t\t\t// We have to distinguish between the first DD and the\n\t\t\t// subsequent ones, as there should be no vertical\n\t\t\t// whitespace between the DT and the first DD.\n\t\t\tif node.Prev != nil && node.Prev.ListFlags&(blackfriday.ListTypeTerm|blackfriday.ListTypeDefinition) == blackfriday.ListTypeDefinition {\n\t\t\t\tif node.Prev.Type == blackfriday.Item &&\n\t\t\t\t\tnode.Prev.LastChild != nil &&\n\t\t\t\t\tnode.Prev.LastChild.Type == blackfriday.List &&\n\t\t\t\t\tnode.Prev.LastChild.ListFlags&blackfriday.ListTypeDefinition == 0 {\n\t\t\t\t\tout(w, \".IP\\n\")\n\t\t\t\t} else {\n\t\t\t\t\tout(w, dd2Tag)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tout(w, \".IP \\\\(bu 2\\n\")\n\t\t}\n\t}\n}\n\nfunc (r *roffRenderer) handleTable(w io.Writer, node *blackfriday.Node, entering bool) {\n\tif entering {\n\t\tout(w, tableStart)\n\t\t// call walker to count cells (and rows?) so format section can be produced\n\t\tcolumns := countColumns(node)\n\t\tout(w, strings.Repeat(\"l \", columns)+\"\\n\")\n\t\tout(w, strings.Repeat(\"l \", columns)+\".\\n\")\n\t} else {\n\t\tout(w, tableEnd)\n\t}\n}\n\nfunc (r *roffRenderer) handleTableCell(w io.Writer, node *blackfriday.Node, entering bool) {\n\tif entering {\n\t\tvar start string\n\t\tif node.Prev != nil && node.Prev.Type == blackfriday.TableCell {\n\t\t\tstart = \"\\t\"\n\t\t}\n\t\tif node.IsHeader {\n\t\t\tstart += strongTag\n\t\t} else if nodeLiteralSize(node) > 30 {\n\t\t\tstart += tableCellStart\n\t\t}\n\t\tout(w, start)\n\t} else {\n\t\tvar end string\n\t\tif node.IsHeader {\n\t\t\tend = strongCloseTag\n\t\t} else if nodeLiteralSize(node) > 30 {\n\t\t\tend = tableCellEnd\n\t\t}\n\t\tif node.Next == nil {\n\t\t\t// Last cell: need to carriage return if we are at the end of the header row.\n\t\t\tend += crTag\n\t\t}\n\t\tout(w, end)\n\t}\n}\n\nfunc nodeLiteralSize(node *blackfriday.Node) int {\n\ttotal := 0\n\tfor n := node.FirstChild; n != nil; n = n.FirstChild {\n\t\ttotal += len(n.Literal)\n\t}\n\treturn total\n}\n\n// because roff format requires knowing the column count before outputting any table\n// data we need to walk a table tree and count the columns\nfunc countColumns(node *blackfriday.Node) int {\n\tvar columns int\n\n\tnode.Walk(func(node *blackfriday.Node, entering bool) blackfriday.WalkStatus {\n\t\tswitch node.Type {\n\t\tcase blackfriday.TableRow:\n\t\t\tif !entering {\n\t\t\t\treturn blackfriday.Terminate\n\t\t\t}\n\t\tcase blackfriday.TableCell:\n\t\t\tif entering {\n\t\t\t\tcolumns++\n\t\t\t}\n\t\tdefault:\n\t\t}\n\t\treturn blackfriday.GoToNext\n\t})\n\treturn columns\n}\n\nfunc out(w io.Writer, output string) {\n\tio.WriteString(w, output) //nolint:errcheck\n}\n\nfunc escapeSpecialChars(w io.Writer, text []byte) {\n\tscanner := bufio.NewScanner(bytes.NewReader(text))\n\n\t// count the number of lines in the text\n\t// we need to know this to avoid adding a newline after the last line\n\tn := bytes.Count(text, []byte{'\\n'})\n\tidx := 0\n\n\tfor scanner.Scan() {\n\t\tdt := scanner.Bytes()\n\t\tif idx < n {\n\t\t\tidx++\n\t\t\tdt = append(dt, '\\n')\n\t\t}\n\t\tescapeSpecialCharsLine(w, dt)\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc escapeSpecialCharsLine(w io.Writer, text []byte) {\n\tfor i := 0; i < len(text); i++ {\n\t\t// escape initial apostrophe or period\n\t\tif len(text) >= 1 && (text[0] == '\\'' || text[0] == '.') {\n\t\t\tout(w, \"\\\\&\")\n\t\t}\n\n\t\t// directly copy normal characters\n\t\torg := i\n\n\t\tfor i < len(text) && text[i] != '\\\\' {\n\t\t\ti++\n\t\t}\n\t\tif i > org {\n\t\t\tw.Write(text[org:i]) //nolint:errcheck\n\t\t}\n\n\t\t// escape a character\n\t\tif i >= len(text) {\n\t\t\tbreak\n\t\t}\n\n\t\tw.Write([]byte{'\\\\', text[i]}) //nolint:errcheck\n\t}\n}\n\n// bytesCut is a copy of [bytes.Cut] to provide compatibility with go1.17\n// and older. We can remove this once we drop support  for go1.17 and older.\nfunc bytesCut(s, sep []byte) (before, after []byte, found bool) {\n\tif i := bytes.Index(s, sep); i >= 0 {\n\t\treturn s[:i], s[i+len(sep):], true\n\t}\n\treturn s, nil, false\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/.golangci.yml",
    "content": "# SPDX-License-Identifier: MPL-2.0\n\n# Copyright (C) 2025 Aleksa Sarai <cyphar@cyphar.com>\n# Copyright (C) 2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\nversion: \"2\"\n\nrun:\n  build-tags:\n    - libpathrs\n\nlinters:\n  enable:\n    - asasalint\n    - asciicheck\n    - containedctx\n    - contextcheck\n    - errcheck\n    - errorlint\n    - exhaustive\n    - forcetypeassert\n    - godot\n    - goprintffuncname\n    - govet\n    - importas\n    - ineffassign\n    - makezero\n    - misspell\n    - musttag\n    - nilerr\n    - nilnesserr\n    - nilnil\n    - noctx\n    - prealloc\n    - revive\n    - staticcheck\n    - testifylint\n    - unconvert\n    - unparam\n    - unused\n    - usetesting\n  settings:\n    govet:\n      enable:\n        - nilness\n    testifylint:\n      enable-all: true\n\nformatters:\n  enable:\n    - gofumpt\n    - goimports\n  settings:\n    goimports:\n      local-prefixes:\n        - github.com/cyphar/filepath-securejoin\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md",
    "content": "# Changelog #\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/)\nand this project adheres to [Semantic Versioning](http://semver.org/).\n\n## [Unreleased] ##\n\n## [0.6.1] - 2025-11-19 ##\n\n> At last up jumped the cunning spider, and fiercely held her fast.\n\n### Fixed ###\n- Our logic for deciding whether to use `openat2(2)` or fallback to an `O_PATH`\n  resolver would cache the result to avoid doing needless test runs of\n  `openat2(2)`. However, this causes issues when `pathrs-lite` is being used by\n  a program that applies new seccomp-bpf filters onto itself -- if the filter\n  denies `openat2(2)` then we would return that error rather than falling back\n  to the `O_PATH` resolver. To resolve this issue, we no longer cache the\n  result if `openat2(2)` was successful, only if there was an error.\n- A file descriptor leak in our `openat2` wrapper (when doing the necessary\n  `dup` for `RESOLVE_IN_ROOT`) has been removed.\n\n## [0.5.2] - 2025-11-19 ##\n\n> \"Will you walk into my parlour?\" said a spider to a fly.\n\n### Fixed ###\n- Our logic for deciding whether to use `openat2(2)` or fallback to an `O_PATH`\n  resolver would cache the result to avoid doing needless test runs of\n  `openat2(2)`. However, this causes issues when `pathrs-lite` is being used by\n  a program that applies new seccomp-bpf filters onto itself -- if the filter\n  denies `openat2(2)` then we would return that error rather than falling back\n  to the `O_PATH` resolver. To resolve this issue, we no longer cache the\n  result if `openat2(2)` was successful, only if there was an error.\n- A file descriptor leak in our `openat2` wrapper (when doing the necessary\n  `dup` for `RESOLVE_IN_ROOT`) has been removed.\n\n## [0.6.0] - 2025-11-03 ##\n\n> By the Power of Greyskull!\n\n### Breaking ###\n- The deprecated `MkdirAll`, `MkdirAllHandle`, `OpenInRoot`, `OpenatInRoot` and\n  `Reopen` wrappers have been removed. Please switch to using `pathrs-lite`\n  directly.\n\n### Added ###\n- `pathrs-lite` now has support for using libpathrs as a backend. This is\n  opt-in and can be enabled at build time with the `libpathrs` build tag. The\n  intention is to allow for downstream libraries and other projects to make use\n  of the pure-Go `github.com/cyphar/filepath-securejoin/pathrs-lite` package\n  and distributors can then opt-in to using `libpathrs` for the entire binary\n  if they wish.\n\n## [0.5.1] - 2025-10-31 ##\n\n> Spooky scary skeletons send shivers down your spine!\n\n### Changed ###\n- `openat2` can return `-EAGAIN` if it detects a possible attack in certain\n  scenarios (namely if there was a rename or mount while walking a path with a\n  `..` component). While this is necessary to avoid a denial-of-service in the\n  kernel, it does require retry loops in userspace.\n\n  In previous versions, `pathrs-lite` would retry `openat2` 32 times before\n  returning an error, but we've received user reports that this limit can be\n  hit on systems with very heavy load. In some synthetic benchmarks (testing\n  the worst-case of an attacker doing renames in a tight loop on every core of\n  a 16-core machine) we managed to get a ~3% failure rate in runc. We have\n  improved this situation in two ways:\n\n  * We have now increased this limit to 128, which should be good enough for\n    most use-cases without becoming a denial-of-service vector (the number of\n    syscalls called by the `O_PATH` resolver in a typical case is within the\n    same ballpark). The same benchmarks show a failure rate of ~0.12% which\n    (while not zero) is probably sufficient for most users.\n\n  * In addition, we now return a `unix.EAGAIN` error that is bubbled up and can\n    be detected by callers. This means that callers with stricter requirements\n    to avoid spurious errors can choose to do their own infinite `EAGAIN` retry\n    loop (though we would strongly recommend users use time-based deadlines in\n    such retry loops to avoid potentially unbounded denials-of-service).\n\n## [0.5.0] - 2025-09-26 ##\n\n> Let the past die. Kill it if you have to.\n\n> **NOTE**: With this release, some parts of\n> `github.com/cyphar/filepath-securejoin` are now licensed under the Mozilla\n> Public License (version 2). Please see [COPYING.md][] as well as the the\n> license header in each file for more details.\n\n[COPYING.md]: ./COPYING.md\n\n### Breaking ###\n- The new API introduced in the [0.3.0][] release has been moved to a new\n  subpackage called `pathrs-lite`. This was primarily done to better indicate\n  the split between the new and old APIs, as well as indicate to users the\n  purpose of this subpackage (it is a less complete version of [libpathrs][]).\n\n  We have added some wrappers to the top-level package to ease the transition,\n  but those are deprecated and will be removed in the next minor release of\n  filepath-securejoin. Users should update their import paths.\n\n  This new subpackage has also been relicensed under the Mozilla Public License\n  (version 2), please see [COPYING.md][] for more details.\n\n### Added ###\n- Most of the key bits the safe `procfs` API have now been exported and are\n  available in `github.com/cyphar/filepath-securejoin/pathrs-lite/procfs`. At\n  the moment this primarily consists of a new `procfs.Handle` API:\n\n   * `OpenProcRoot` returns a new handle to `/proc`, endeavouring to make it\n     safe if possible (`subset=pid` to protect against mistaken write attacks\n     and leaks, as well as using `fsopen(2)` to avoid racing mount attacks).\n\n     `OpenUnsafeProcRoot` returns a handle without attempting to create one\n     with `subset=pid`, which makes it more dangerous to leak. Most users\n     should use `OpenProcRoot` (even if you need to use `ProcRoot` as the base\n     of an operation, as filepath-securejoin will internally open a handle when\n     necessary).\n\n   * The `(*procfs.Handle).Open*` family of methods lets you get a safe\n     `O_PATH` handle to subpaths within `/proc` for certain subpaths.\n\n     For `OpenThreadSelf`, the returned `ProcThreadSelfCloser` needs to be\n     called after you completely finish using the handle (this is necessary\n     because Go is multi-threaded and `ProcThreadSelf` references\n     `/proc/thread-self` which may disappear if we do not\n     `runtime.LockOSThread` -- `ProcThreadSelfCloser` is currently equivalent\n     to `runtime.UnlockOSThread`).\n\n     Note that you cannot open any `procfs` symlinks (most notably magic-links)\n     using this API. At the moment, filepath-securejoin does not support this\n     feature (but [libpathrs][] does).\n\n   * `ProcSelfFdReadlink` lets you get the in-kernel path representation of a\n     file descriptor (think `readlink(\"/proc/self/fd/...\")`), except that we\n     verify that there aren't any tricky overmounts that could fool the\n     process.\n\n     Please be aware that the returned string is simply a snapshot at that\n     particular moment, and an attacker could move the file being pointed to.\n     In addition, complex namespace configurations could result in non-sensical\n     or confusing paths to be returned. The value received from this function\n     should only be used as secondary verification of some security property,\n     not as proof that a particular handle has a particular path.\n\n  The procfs handle used internally by the API is the same as the rest of\n  `filepath-securejoin` (for privileged programs this is usually a private\n  in-process `procfs` instance created with `fsopen(2)`).\n\n  As before, this is intended as a stop-gap before users migrate to\n  [libpathrs][], which provides a far more extensive safe `procfs` API and is\n  generally more robust.\n\n- Previously, the hardened procfs implementation (used internally within\n  `Reopen` and `Open(at)InRoot`) only protected against overmount attacks on\n  systems with `openat2(2)` (Linux 5.6) or systems with `fsopen(2)` or\n  `open_tree(2)` (Linux 5.2) and programs with privileges to use them (with\n  some caveats about locked mounts that probably affect very few users). For\n  other users, an attacker with the ability to create malicious mounts (on most\n  systems, a sysadmin) could trick you into operating on files you didn't\n  expect. This attack only really makes sense in the context of container\n  runtime implementations.\n\n  This was considered a reasonable trade-off, as the long-term intention was to\n  get all users to just switch to [libpathrs][] if they wanted to use the safe\n  `procfs` API (which had more extensive protections, and is what these new\n  protections in `filepath-securejoin` are based on). However, as the API\n  is now being exported it seems unwise to advertise the API as \"safe\" if we do\n  not protect against known attacks.\n\n  The procfs API is now more protected against attackers on systems lacking the\n  aforementioned protections. However, the most comprehensive of these\n  protections effectively rely on [`statx(STATX_MNT_ID)`][statx.2] (Linux 5.8).\n  On older kernel versions, there is no effective protection (there is some\n  minimal protection against non-`procfs` filesystem components but a\n  sufficiently clever attacker can work around those). In addition,\n  `STATX_MNT_ID` is vulnerable to mount ID reuse attacks by sufficiently\n  motivated and privileged attackers -- this problem is mitigated with\n  `STATX_MNT_ID_UNIQUE` (Linux 6.8) but that raises the minimum kernel version\n  for more protection.\n\n  The fact that these protections are quite limited despite needing a fair bit\n  of extra code to handle was one of the primary reasons we did not initially\n  implement this in `filepath-securejoin` ([libpathrs][] supports all of this,\n  of course).\n\n### Fixed ###\n- RHEL 8 kernels have backports of `fsopen(2)` but in some testing we've found\n  that it has very bad (and very difficult to debug) performance issues, and so\n  we will explicitly refuse to use `fsopen(2)` if the running kernel version is\n  pre-5.2 and will instead fallback to `open(\"/proc\")`.\n\n[CVE-2024-21626]: https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv\n[libpathrs]: https://github.com/cyphar/libpathrs\n[statx.2]: https://www.man7.org/linux/man-pages/man2/statx.2.html\n\n## [0.4.1] - 2025-01-28 ##\n\n### Fixed ###\n- The restrictions added for `root` paths passed to `SecureJoin` in 0.4.0 was\n  found to be too strict and caused some regressions when folks tried to\n  update, so this restriction has been relaxed to only return an error if the\n  path contains a `..` component. We still recommend users use `filepath.Clean`\n  (and even `filepath.EvalSymlinks`) on the `root` path they are using, but at\n  least you will no longer be punished for \"trivial\" unclean paths.\n\n## [0.4.0] - 2025-01-13 ##\n\n### Breaking ####\n- `SecureJoin(VFS)` will now return an error if the provided `root` is not a\n  `filepath.Clean`'d path.\n\n  While it is ultimately the responsibility of the caller to ensure the root is\n  a safe path to use, passing a path like `/symlink/..` as a root would result\n  in the `SecureJoin`'d path being placed in `/` even though `/symlink/..`\n  might be a different directory, and so we should more strongly discourage\n  such usage.\n\n  All major users of `securejoin.SecureJoin` already ensure that the paths they\n  provide are safe (and this is ultimately a question of user error), but\n  removing this foot-gun is probably a good idea. Of course, this is\n  necessarily a breaking API change (though we expect no real users to be\n  affected by it).\n\n  Thanks to [Erik Sjölund](https://github.com/eriksjolund), who initially\n  reported this issue as a possible security issue.\n\n- `MkdirAll` and `MkdirHandle` now take an `os.FileMode`-style mode argument\n  instead of a raw `unix.S_*`-style mode argument, which may cause compile-time\n  type errors depending on how you use `filepath-securejoin`. For most users,\n  there will be no change in behaviour aside from the type change (as the\n  bottom `0o777` bits are the same in both formats, and most users are probably\n  only using those bits).\n\n  However, if you were using `unix.S_ISVTX` to set the sticky bit with\n  `MkdirAll(Handle)` you will need to switch to `os.ModeSticky` otherwise you\n  will get a runtime error with this update. In addition, the error message you\n  will get from passing `unix.S_ISUID` and `unix.S_ISGID` will be different as\n  they are treated as invalid bits now (note that previously passing said bits\n  was also an error).\n\n## [0.3.6] - 2024-12-17 ##\n\n### Compatibility ###\n- The minimum Go version requirement for `filepath-securejoin` is now Go 1.18\n  (we use generics internally).\n\n  For reference, `filepath-securejoin@v0.3.0` somewhat-arbitrarily bumped the\n  Go version requirement to 1.21.\n\n  While we did make some use of Go 1.21 stdlib features (and in principle Go\n  versions <= 1.21 are no longer even supported by upstream anymore), some\n  downstreams have complained that the version bump has meant that they have to\n  do workarounds when backporting fixes that use the new `filepath-securejoin`\n  API onto old branches. This is not an ideal situation, but since using this\n  library is probably better for most downstreams than a hand-rolled\n  workaround, we now have compatibility shims that allow us to build on older\n  Go versions.\n- Lower minimum version requirement for `golang.org/x/sys` to `v0.18.0` (we\n  need the wrappers for `fsconfig(2)`), which should also make backporting\n  patches to older branches easier.\n\n## [0.3.5] - 2024-12-06 ##\n\n### Fixed ###\n- `MkdirAll` will now no longer return an `EEXIST` error if two racing\n  processes are creating the same directory. We will still verify that the path\n  is a directory, but this will avoid spurious errors when multiple threads or\n  programs are trying to `MkdirAll` the same path. opencontainers/runc#4543\n\n## [0.3.4] - 2024-10-09 ##\n\n### Fixed ###\n- Previously, some testing mocks we had resulted in us doing `import \"testing\"`\n  in non-`_test.go` code, which made some downstreams like Kubernetes unhappy.\n  This has been fixed. (#32)\n\n## [0.3.3] - 2024-09-30 ##\n\n### Fixed ###\n- The mode and owner verification logic in `MkdirAll` has been removed. This\n  was originally intended to protect against some theoretical attacks but upon\n  further consideration these protections don't actually buy us anything and\n  they were causing spurious errors with more complicated filesystem setups.\n- The \"is the created directory empty\" logic in `MkdirAll` has also been\n  removed. This was not causing us issues yet, but some pseudofilesystems (such\n  as `cgroup`) create non-empty directories and so this logic would've been\n  wrong for such cases.\n\n## [0.3.2] - 2024-09-13 ##\n\n### Changed ###\n- Passing the `S_ISUID` or `S_ISGID` modes to `MkdirAllInRoot` will now return\n  an explicit error saying that those bits are ignored by `mkdirat(2)`. In the\n  past a different error was returned, but since the silent ignoring behaviour\n  is codified in the man pages a more explicit error seems apt. While silently\n  ignoring these bits would be the most compatible option, it could lead to\n  users thinking their code sets these bits when it doesn't. Programs that need\n  to deal with compatibility can mask the bits themselves. (#23, #25)\n\n### Fixed ###\n- If a directory has `S_ISGID` set, then all child directories will have\n  `S_ISGID` set when created and a different gid will be used for any inode\n  created under the directory. Previously, the \"expected owner and mode\"\n  validation in `securejoin.MkdirAll` did not correctly handle this. We now\n  correctly handle this case. (#24, #25)\n\n## [0.3.1] - 2024-07-23 ##\n\n### Changed ###\n- By allowing `Open(at)InRoot` to opt-out of the extra work done by `MkdirAll`\n  to do the necessary \"partial lookups\", `Open(at)InRoot` now does less work\n  for both implementations (resulting in a many-fold decrease in the number of\n  operations for `openat2`, and a modest improvement for non-`openat2`) and is\n  far more guaranteed to match the correct `openat2(RESOLVE_IN_ROOT)`\n  behaviour.\n- We now use `readlinkat(fd, \"\")` where possible. For `Open(at)InRoot` this\n  effectively just means that we no longer risk getting spurious errors during\n  rename races. However, for our hardened procfs handler, this in theory should\n  prevent mount attacks from tricking us when doing magic-link readlinks (even\n  when using the unsafe host `/proc` handle). Unfortunately `Reopen` is still\n  potentially vulnerable to those kinds of somewhat-esoteric attacks.\n\n  Technically this [will only work on post-2.6.39 kernels][linux-readlinkat-emptypath]\n  but it seems incredibly unlikely anyone is using `filepath-securejoin` on a\n  pre-2011 kernel.\n\n### Fixed ###\n- Several improvements were made to the errors returned by `Open(at)InRoot` and\n  `MkdirAll` when dealing with invalid paths under the emulated (ie.\n  non-`openat2`) implementation. Previously, some paths would return the wrong\n  error (`ENOENT` when the last component was a non-directory), and other paths\n  would be returned as though they were acceptable (trailing-slash components\n  after a non-directory would be ignored by `Open(at)InRoot`).\n\n  These changes were done to match `openat2`'s behaviour and purely is a\n  consistency fix (most users are going to be using `openat2` anyway).\n\n[linux-readlinkat-emptypath]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=65cfc6722361570bfe255698d9cd4dccaf47570d\n\n## [0.3.0] - 2024-07-11 ##\n\n### Added ###\n- A new set of `*os.File`-based APIs have been added. These are adapted from\n  [libpathrs][] and we strongly suggest using them if possible (as they provide\n  far more protection against attacks than `SecureJoin`):\n\n   - `Open(at)InRoot` resolves a path inside a rootfs and returns an `*os.File`\n     handle to the path. Note that the handle returned is an `O_PATH` handle,\n     which cannot be used for reading or writing (as well as some other\n     operations -- [see open(2) for more details][open.2])\n\n   - `Reopen` takes an `O_PATH` file handle and safely re-opens it to upgrade\n     it to a regular handle. This can also be used with non-`O_PATH` handles,\n     but `O_PATH` is the most obvious application.\n\n   - `MkdirAll` is an implementation of `os.MkdirAll` that is safe to use to\n     create a directory tree within a rootfs.\n\n  As these are new APIs, they may change in the future. However, they should be\n  safe to start migrating to as we have extensive tests ensuring they behave\n  correctly and are safe against various races and other attacks.\n\n[libpathrs]: https://github.com/cyphar/libpathrs\n[open.2]: https://www.man7.org/linux/man-pages/man2/open.2.html\n\n## [0.2.5] - 2024-05-03 ##\n\n### Changed ###\n- Some minor changes were made to how lexical components (like `..` and `.`)\n  are handled during path generation in `SecureJoin`. There is no behaviour\n  change as a result of this fix (the resulting paths are the same).\n\n### Fixed ###\n- The error returned when we hit a symlink loop now references the correct\n  path. (#10)\n\n## [0.2.4] - 2023-09-06 ##\n\n### Security ###\n- This release fixes a potential security issue in filepath-securejoin when\n  used on Windows ([GHSA-6xv5-86q9-7xr8][], which could be used to generate\n  paths outside of the provided rootfs in certain cases), as well as improving\n  the overall behaviour of filepath-securejoin when dealing with Windows paths\n  that contain volume names. Thanks to Paulo Gomes for discovering and fixing\n  these issues.\n\n### Fixed ###\n- Switch to GitHub Actions for CI so we can test on Windows as well as Linux\n  and MacOS.\n\n[GHSA-6xv5-86q9-7xr8]: https://github.com/advisories/GHSA-6xv5-86q9-7xr8\n\n## [0.2.3] - 2021-06-04 ##\n\n### Changed ###\n- Switch to Go 1.13-style `%w` error wrapping, letting us drop the dependency\n  on `github.com/pkg/errors`.\n\n## [0.2.2] - 2018-09-05 ##\n\n### Changed ###\n- Use `syscall.ELOOP` as the base error for symlink loops, rather than our own\n  (internal) error. This allows callers to more easily use `errors.Is` to check\n  for this case.\n\n## [0.2.1] - 2018-09-05 ##\n\n### Fixed ###\n- Use our own `IsNotExist` implementation, which lets us handle `ENOTDIR`\n  properly within `SecureJoin`.\n\n## [0.2.0] - 2017-07-19 ##\n\nWe now have 100% test coverage!\n\n### Added ###\n- Add a `SecureJoinVFS` API that can be used for mocking (as we do in our new\n  tests) or for implementing custom handling of lookup operations (such as for\n  rootless containers, where work is necessary to access directories with weird\n  modes because we don't have `CAP_DAC_READ_SEARCH` or `CAP_DAC_OVERRIDE`).\n\n## 0.1.0 - 2017-07-19\n\nThis is our first release of `github.com/cyphar/filepath-securejoin`,\ncontaining a full implementation with a coverage of 93.5% (the only missing\ncases are the error cases, which are hard to mocktest at the moment).\n\n[Unreleased]: https://github.com/cyphar/filepath-securejoin/compare/v0.6.1...HEAD\n[0.6.1]: https://github.com/cyphar/filepath-securejoin/compare/v0.6.0...v0.6.1\n[0.6.0]: https://github.com/cyphar/filepath-securejoin/compare/v0.5.0...v0.6.0\n[0.5.2]: https://github.com/cyphar/filepath-securejoin/compare/v0.5.1...v0.5.2\n[0.5.1]: https://github.com/cyphar/filepath-securejoin/compare/v0.5.0...v0.5.1\n[0.5.0]: https://github.com/cyphar/filepath-securejoin/compare/v0.4.1...v0.5.0\n[0.4.1]: https://github.com/cyphar/filepath-securejoin/compare/v0.4.0...v0.4.1\n[0.4.0]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.6...v0.4.0\n[0.3.6]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.5...v0.3.6\n[0.3.5]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.4...v0.3.5\n[0.3.4]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.3...v0.3.4\n[0.3.3]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.2...v0.3.3\n[0.3.2]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.1...v0.3.2\n[0.3.1]: https://github.com/cyphar/filepath-securejoin/compare/v0.3.0...v0.3.1\n[0.3.0]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.5...v0.3.0\n[0.2.5]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.4...v0.2.5\n[0.2.4]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.3...v0.2.4\n[0.2.3]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.2...v0.2.3\n[0.2.2]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.1...v0.2.2\n[0.2.1]: https://github.com/cyphar/filepath-securejoin/compare/v0.2.0...v0.2.1\n[0.2.0]: https://github.com/cyphar/filepath-securejoin/compare/v0.1.0...v0.2.0\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/COPYING.md",
    "content": "## COPYING ##\n\n`SPDX-License-Identifier: BSD-3-Clause AND MPL-2.0`\n\nThis project is made up of code licensed under different licenses. Which code\nyou use will have an impact on whether only one or both licenses apply to your\nusage of this library.\n\nNote that **each file** in this project individually has a code comment at the\nstart describing the license of that particular file -- this is the most\naccurate license information of this project; in case there is any conflict\nbetween this document and the comment at the start of a file, the comment shall\ntake precedence. The only purpose of this document is to work around [a known\ntechnical limitation of pkg.go.dev's license checking tool when dealing with\nnon-trivial project licenses][go75067].\n\n[go75067]: https://go.dev/issue/75067\n\n### `BSD-3-Clause` ###\n\nAt time of writing, the following files and directories are licensed under the\nBSD-3-Clause license:\n\n * `doc.go`\n * `join*.go`\n * `vfs.go`\n * `internal/consts/*.go`\n * `pathrs-lite/internal/gocompat/*.go`\n * `pathrs-lite/internal/kernelversion/*.go`\n\nThe text of the BSD-3-Clause license used by this project is the following (the\ntext is also available from the [`LICENSE.BSD`](./LICENSE.BSD) file):\n\n```\nCopyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved.\nCopyright (C) 2017-2024 SUSE LLC. 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### `MPL-2.0` ###\n\nAll other files (unless otherwise marked) are licensed under the Mozilla Public\nLicense (version 2.0).\n\nThe text of the Mozilla Public License (version 2.0) is the following (the text\nis also available from the [`LICENSE.MPL-2.0`](./LICENSE.MPL-2.0) file):\n\n```\nMozilla 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 https://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```\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/LICENSE.BSD",
    "content": "Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved.\nCopyright (C) 2017-2024 SUSE LLC. 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/cyphar/filepath-securejoin/LICENSE.MPL-2.0",
    "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 https://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/cyphar/filepath-securejoin/README.md",
    "content": "## `filepath-securejoin` ##\n\n[![Go Documentation](https://pkg.go.dev/badge/github.com/cyphar/filepath-securejoin.svg)](https://pkg.go.dev/github.com/cyphar/filepath-securejoin)\n[![Build Status](https://github.com/cyphar/filepath-securejoin/actions/workflows/ci.yml/badge.svg)](https://github.com/cyphar/filepath-securejoin/actions/workflows/ci.yml)\n\n### Old API ###\n\nThis library was originally just an implementation of `SecureJoin` which was\n[intended to be included in the Go standard library][go#20126] as a safer\n`filepath.Join` that would restrict the path lookup to be inside a root\ndirectory.\n\nThe implementation was based on code that existed in several container\nruntimes. Unfortunately, this API is **fundamentally unsafe** against attackers\nthat can modify path components after `SecureJoin` returns and before the\ncaller uses the path, allowing for some fairly trivial TOCTOU attacks.\n\n`SecureJoin` (and `SecureJoinVFS`) are still provided by this library to\nsupport legacy users, but new users are strongly suggested to avoid using\n`SecureJoin` and instead use the [new api](#new-api) or switch to\n[libpathrs][libpathrs].\n\nWith the above limitations in mind, this library guarantees the following:\n\n* If no error is set, the resulting string **must** be a child path of\n  `root` and will not contain any symlink path components (they will all be\n  expanded).\n\n* When expanding symlinks, all symlink path components **must** be resolved\n  relative to the provided root. In particular, this can be considered a\n  userspace implementation of how `chroot(2)` operates on file paths. Note that\n  these symlinks will **not** be expanded lexically (`filepath.Clean` is not\n  called on the input before processing).\n\n* Non-existent path components are unaffected by `SecureJoin` (similar to\n  `filepath.EvalSymlinks`'s semantics).\n\n* The returned path will always be `filepath.Clean`ed and thus not contain any\n  `..` components.\n\nA (trivial) implementation of this function on GNU/Linux systems could be done\nwith the following (note that this requires root privileges and is far more\nopaque than the implementation in this library, and also requires that\n`readlink` is inside the `root` path and is trustworthy):\n\n```go\npackage securejoin\n\nimport (\n\t\"os/exec\"\n\t\"path/filepath\"\n)\n\nfunc SecureJoin(root, unsafePath string) (string, error) {\n\tunsafePath = string(filepath.Separator) + unsafePath\n\tcmd := exec.Command(\"chroot\", root,\n\t\t\"readlink\", \"--canonicalize-missing\", \"--no-newline\", unsafePath)\n\toutput, err := cmd.CombinedOutput()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\texpanded := string(output)\n\treturn filepath.Join(root, expanded), nil\n}\n```\n\n[libpathrs]: https://github.com/openSUSE/libpathrs\n[go#20126]: https://github.com/golang/go/issues/20126\n\n### <a name=\"new-api\" /> New API ###\n[#new-api]: #new-api\n\nWhile we recommend users switch to [libpathrs][libpathrs] as soon as it has a\nstable release, some methods implemented by libpathrs have been ported to this\nlibrary to ease the transition. These APIs are only supported on Linux.\n\nThese APIs are implemented such that `filepath-securejoin` will\nopportunistically use certain newer kernel APIs that make these operations far\nmore secure. In particular:\n\n* All of the lookup operations will use [`openat2`][openat2.2] on new enough\n  kernels (Linux 5.6 or later) to restrict lookups through magic-links and\n  bind-mounts (for certain operations) and to make use of `RESOLVE_IN_ROOT` to\n  efficiently resolve symlinks within a rootfs.\n\n* The APIs provide hardening against a malicious `/proc` mount to either detect\n  or avoid being tricked by a `/proc` that is not legitimate. This is done\n  using [`openat2`][openat2.2] for all users, and privileged users will also be\n  further protected by using [`fsopen`][fsopen.2] and [`open_tree`][open_tree.2]\n  (Linux 5.2 or later).\n\n[openat2.2]: https://www.man7.org/linux/man-pages/man2/openat2.2.html\n[fsopen.2]: https://github.com/brauner/man-pages-md/blob/main/fsopen.md\n[open_tree.2]: https://github.com/brauner/man-pages-md/blob/main/open_tree.md\n\n#### `OpenInRoot` ####\n\n```go\nfunc OpenInRoot(root, unsafePath string) (*os.File, error)\nfunc OpenatInRoot(root *os.File, unsafePath string) (*os.File, error)\nfunc Reopen(handle *os.File, flags int) (*os.File, error)\n```\n\n`OpenInRoot` is a much safer version of\n\n```go\npath, err := securejoin.SecureJoin(root, unsafePath)\nfile, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC)\n```\n\nthat protects against various race attacks that could lead to serious security\nissues, depending on the application. Note that the returned `*os.File` is an\n`O_PATH` file descriptor, which is quite restricted. Callers will probably need\nto use `Reopen` to get a more usable handle (this split is done to provide\nuseful features like PTY spawning and to avoid users accidentally opening bad\ninodes that could cause a DoS).\n\nCallers need to be careful in how they use the returned `*os.File`. Usually it\nis only safe to operate on the handle directly, and it is very easy to create a\nsecurity issue. [libpathrs][libpathrs] provides far more helpers to make using\nthese handles safer -- there is currently no plan to port them to\n`filepath-securejoin`.\n\n`OpenatInRoot` is like `OpenInRoot` except that the root is provided using an\n`*os.File`. This allows you to ensure that multiple `OpenatInRoot` (or\n`MkdirAllHandle`) calls are operating on the same rootfs.\n\n> **NOTE**: Unlike `SecureJoin`, `OpenInRoot` will error out as soon as it hits\n> a dangling symlink or non-existent path. This is in contrast to `SecureJoin`\n> which treated non-existent components as though they were real directories,\n> and would allow for partial resolution of dangling symlinks. These behaviours\n> are at odds with how Linux treats non-existent paths and dangling symlinks,\n> and so these are no longer allowed.\n\n#### `MkdirAll` ####\n\n```go\nfunc MkdirAll(root, unsafePath string, mode int) error\nfunc MkdirAllHandle(root *os.File, unsafePath string, mode int) (*os.File, error)\n```\n\n`MkdirAll` is a much safer version of\n\n```go\npath, err := securejoin.SecureJoin(root, unsafePath)\nerr = os.MkdirAll(path, mode)\n```\n\nthat protects against the same kinds of races that `OpenInRoot` protects\nagainst.\n\n`MkdirAllHandle` is like `MkdirAll` except that the root is provided using an\n`*os.File` (the reason for this is the same as with `OpenatInRoot`) and an\n`*os.File` of the final created directory is returned (this directory is\nguaranteed to be effectively identical to the directory created by\n`MkdirAllHandle`, which is not possible to ensure by just using `OpenatInRoot`\nafter `MkdirAll`).\n\n> **NOTE**: Unlike `SecureJoin`, `MkdirAll` will error out as soon as it hits\n> a dangling symlink or non-existent path. This is in contrast to `SecureJoin`\n> which treated non-existent components as though they were real directories,\n> and would allow for partial resolution of dangling symlinks. These behaviours\n> are at odds with how Linux treats non-existent paths and dangling symlinks,\n> and so these are no longer allowed. This means that `MkdirAll` will not\n> create non-existent directories referenced by a dangling symlink.\n\n### License ###\n\n`SPDX-License-Identifier: BSD-3-Clause AND MPL-2.0`\n\nSome of the code in this project is derived from Go, and is licensed under a\nBSD 3-clause license (available in `LICENSE.BSD`). Other files (many of which\nare derived from [libpathrs][libpathrs]) are licensed under the Mozilla Public\nLicense version 2.0 (available in `LICENSE.MPL-2.0`). If you are using the\n[\"New API\" described above][#new-api], you are probably using code from files\nreleased under this license.\n\nEvery source file in this project has a copyright header describing its\nlicense. Please check the license headers of each file to see what license\napplies to it.\n\nSee [COPYING.md](./COPYING.md) for some more details.\n\n[umoci]: https://github.com/opencontainers/umoci\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/VERSION",
    "content": "0.6.1\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/codecov.yml",
    "content": "# SPDX-License-Identifier: MPL-2.0\n\n# Copyright (C) 2025 Aleksa Sarai <cyphar@cyphar.com>\n# Copyright (C) 2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\ncomment:\n  layout: \"condensed_header, reach, diff, components, condensed_files, condensed_footer\"\n  require_changes: true\n  branches:\n    - main\n\ncoverage:\n  range: 60..100\n  status:\n    project:\n      default:\n        target: 85%\n        threshold: 0%\n    patch:\n      default:\n        target: auto\n        informational: true\n\ngithub_checks:\n  annotations: false\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/doc.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n\n// Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved.\n// Copyright (C) 2017-2024 SUSE LLC. All rights reserved.\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 securejoin implements a set of helpers to make it easier to write Go\n// code that is safe against symlink-related escape attacks. The primary idea\n// is to let you resolve a path within a rootfs directory as if the rootfs was\n// a chroot.\n//\n// securejoin has two APIs, a \"legacy\" API and a \"modern\" API.\n//\n// The legacy API is [SecureJoin] and [SecureJoinVFS]. These methods are\n// **not** safe against race conditions where an attacker changes the\n// filesystem after (or during) the [SecureJoin] operation.\n//\n// The new API is available in the [pathrs-lite] subpackage, and provide\n// protections against racing attackers as well as several other key\n// protections against attacks often seen by container runtimes. As the name\n// suggests, [pathrs-lite] is a stripped down (pure Go) reimplementation of\n// [libpathrs]. The main APIs provided are [OpenInRoot], [MkdirAll], and\n// [procfs.Handle] -- other APIs are not planned to be ported. The long-term\n// goal is for users to migrate to [libpathrs] which is more fully-featured.\n//\n// securejoin has been used by several container runtimes (Docker, runc,\n// Kubernetes, etc) for quite a few years as a de-facto standard for operating\n// on container filesystem paths \"safely\". However, most users still use the\n// legacy API which is unsafe against various attacks (there is a fairly long\n// history of CVEs in dependent as a result). Users should switch to the modern\n// API as soon as possible (or even better, switch to libpathrs).\n//\n// This project was initially intended to be included in the Go standard\n// library, but it was rejected (see https://go.dev/issue/20126). Much later,\n// [os.Root] was added to the Go stdlib that shares some of the goals of\n// filepath-securejoin. However, its design is intended to work like\n// openat2(RESOLVE_BENEATH) which does not fit the usecase of container\n// runtimes and most system tools.\n//\n// [pathrs-lite]: https://pkg.go.dev/github.com/cyphar/filepath-securejoin/pathrs-lite\n// [libpathrs]: https://github.com/openSUSE/libpathrs\n// [OpenInRoot]: https://pkg.go.dev/github.com/cyphar/filepath-securejoin/pathrs-lite#OpenInRoot\n// [MkdirAll]: https://pkg.go.dev/github.com/cyphar/filepath-securejoin/pathrs-lite#MkdirAll\n// [procfs.Handle]: https://pkg.go.dev/github.com/cyphar/filepath-securejoin/pathrs-lite/procfs#Handle\n// [os.Root]: https:///pkg.go.dev/os#Root\npackage securejoin\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/internal/consts/consts.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n\n// Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved.\n// Copyright (C) 2017-2025 SUSE LLC. All rights reserved.\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 consts contains the definitions of internal constants used\n// throughout filepath-securejoin.\npackage consts\n\n// MaxSymlinkLimit is the maximum number of symlinks that can be encountered\n// during a single lookup before returning -ELOOP. At time of writing, Linux\n// has an internal limit of 40.\nconst MaxSymlinkLimit = 255\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/join.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n\n// Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved.\n// Copyright (C) 2017-2025 SUSE LLC. All rights 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 securejoin\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/cyphar/filepath-securejoin/internal/consts\"\n)\n\n// IsNotExist tells you if err is an error that implies that either the path\n// accessed does not exist (or path components don't exist). This is\n// effectively a more broad version of [os.IsNotExist].\nfunc IsNotExist(err error) bool {\n\t// Check that it's not actually an ENOTDIR, which in some cases is a more\n\t// convoluted case of ENOENT (usually involving weird paths).\n\treturn errors.Is(err, os.ErrNotExist) || errors.Is(err, syscall.ENOTDIR) || errors.Is(err, syscall.ENOENT)\n}\n\n// errUnsafeRoot is returned if the user provides SecureJoinVFS with a path\n// that contains \"..\" components.\nvar errUnsafeRoot = errors.New(\"root path provided to SecureJoin contains '..' components\")\n\n// stripVolume just gets rid of the Windows volume included in a path. Based on\n// some godbolt tests, the Go compiler is smart enough to make this a no-op on\n// Linux.\nfunc stripVolume(path string) string {\n\treturn path[len(filepath.VolumeName(path)):]\n}\n\n// hasDotDot checks if the path contains \"..\" components in a platform-agnostic\n// way.\nfunc hasDotDot(path string) bool {\n\t// If we are on Windows, strip any volume letters. It turns out that\n\t// C:..\\foo may (or may not) be a valid pathname and we need to handle that\n\t// leading \"..\".\n\tpath = stripVolume(path)\n\t// Look for \"/../\" in the path, but we need to handle leading and trailing\n\t// \"..\"s by adding separators. Doing this with filepath.Separator is ugly\n\t// so just convert to Unix-style \"/\" first.\n\tpath = filepath.ToSlash(path)\n\treturn strings.Contains(\"/\"+path+\"/\", \"/../\")\n}\n\n// SecureJoinVFS joins the two given path components (similar to\n// [filepath.Join]) except that the returned path is guaranteed to be scoped\n// inside the provided root path (when evaluated). Any symbolic links in the\n// path are evaluated with the given root treated as the root of the\n// filesystem, similar to a chroot. The filesystem state is evaluated through\n// the given [VFS] interface (if nil, the standard [os].* family of functions\n// are used).\n//\n// Note that the guarantees provided by this function only apply if the path\n// components in the returned string are not modified (in other words are not\n// replaced with symlinks on the filesystem) after this function has returned.\n// Such a symlink race is necessarily out-of-scope of SecureJoinVFS.\n//\n// NOTE: Due to the above limitation, Linux users are strongly encouraged to\n// use [OpenInRoot] instead, which does safely protect against these kinds of\n// attacks. There is no way to solve this problem with SecureJoinVFS because\n// the API is fundamentally wrong (you cannot return a \"safe\" path string and\n// guarantee it won't be modified afterwards).\n//\n// Volume names in unsafePath are always discarded, regardless if they are\n// provided via direct input or when evaluating symlinks. Therefore:\n//\n// \"C:\\Temp\" + \"D:\\path\\to\\file.txt\" results in \"C:\\Temp\\path\\to\\file.txt\"\n//\n// If the provided root is not [filepath.Clean] then an error will be returned,\n// as such root paths are bordering on somewhat unsafe and using such paths is\n// not best practice. We also strongly suggest that any root path is first\n// fully resolved using [filepath.EvalSymlinks] or otherwise constructed to\n// avoid containing symlink components. Of course, the root also *must not* be\n// attacker-controlled.\nfunc SecureJoinVFS(root, unsafePath string, vfs VFS) (string, error) { //nolint:revive // name is part of public API\n\t// The root path must not contain \"..\" components, otherwise when we join\n\t// the subpath we will end up with a weird path. We could work around this\n\t// in other ways but users shouldn't be giving us non-lexical root paths in\n\t// the first place.\n\tif hasDotDot(root) {\n\t\treturn \"\", errUnsafeRoot\n\t}\n\n\t// Use the os.* VFS implementation if none was specified.\n\tif vfs == nil {\n\t\tvfs = osVFS{}\n\t}\n\n\tunsafePath = filepath.FromSlash(unsafePath)\n\tvar (\n\t\tcurrentPath   string\n\t\tremainingPath = unsafePath\n\t\tlinksWalked   int\n\t)\n\tfor remainingPath != \"\" {\n\t\t// On Windows, if we managed to end up at a path referencing a volume,\n\t\t// drop the volume to make sure we don't end up with broken paths or\n\t\t// escaping the root volume.\n\t\tremainingPath = stripVolume(remainingPath)\n\n\t\t// Get the next path component.\n\t\tvar part string\n\t\tif i := strings.IndexRune(remainingPath, filepath.Separator); i == -1 {\n\t\t\tpart, remainingPath = remainingPath, \"\"\n\t\t} else {\n\t\t\tpart, remainingPath = remainingPath[:i], remainingPath[i+1:]\n\t\t}\n\n\t\t// Apply the component lexically to the path we are building.\n\t\t// currentPath does not contain any symlinks, and we are lexically\n\t\t// dealing with a single component, so it's okay to do a filepath.Clean\n\t\t// here.\n\t\tnextPath := filepath.Join(string(filepath.Separator), currentPath, part)\n\t\tif nextPath == string(filepath.Separator) {\n\t\t\tcurrentPath = \"\"\n\t\t\tcontinue\n\t\t}\n\t\tfullPath := root + string(filepath.Separator) + nextPath\n\n\t\t// Figure out whether the path is a symlink.\n\t\tfi, err := vfs.Lstat(fullPath)\n\t\tif err != nil && !IsNotExist(err) {\n\t\t\treturn \"\", err\n\t\t}\n\t\t// Treat non-existent path components the same as non-symlinks (we\n\t\t// can't do any better here).\n\t\tif IsNotExist(err) || fi.Mode()&os.ModeSymlink == 0 {\n\t\t\tcurrentPath = nextPath\n\t\t\tcontinue\n\t\t}\n\n\t\t// It's a symlink, so get its contents and expand it by prepending it\n\t\t// to the yet-unparsed path.\n\t\tlinksWalked++\n\t\tif linksWalked > consts.MaxSymlinkLimit {\n\t\t\treturn \"\", &os.PathError{Op: \"SecureJoin\", Path: root + string(filepath.Separator) + unsafePath, Err: syscall.ELOOP}\n\t\t}\n\n\t\tdest, err := vfs.Readlink(fullPath)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tremainingPath = dest + string(filepath.Separator) + remainingPath\n\t\t// Absolute symlinks reset any work we've already done.\n\t\tif filepath.IsAbs(dest) {\n\t\t\tcurrentPath = \"\"\n\t\t}\n\t}\n\n\t// There should be no lexical components like \"..\" left in the path here,\n\t// but for safety clean up the path before joining it to the root.\n\tfinalPath := filepath.Join(string(filepath.Separator), currentPath)\n\treturn filepath.Join(root, finalPath), nil\n}\n\n// SecureJoin is a wrapper around [SecureJoinVFS] that just uses the [os].* library\n// of functions as the [VFS]. If in doubt, use this function over [SecureJoinVFS].\nfunc SecureJoin(root, unsafePath string) (string, error) {\n\treturn SecureJoinVFS(root, unsafePath, nil)\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/README.md",
    "content": "## `pathrs-lite` ##\n\n`github.com/cyphar/filepath-securejoin/pathrs-lite` provides a minimal **pure\nGo** implementation of the core bits of [libpathrs][]. This is not intended to\nbe a complete replacement for libpathrs, instead it is mainly intended to be\nuseful as a transition tool for existing Go projects.\n\n`pathrs-lite` also provides a very easy way to switch to `libpathrs` (even for\ndownstreams where `pathrs-lite` is being used in a third-party package and is\nnot interested in using CGo). At build time, if you use the `libpathrs` build\ntag then `pathrs-lite` will use `libpathrs` directly instead of the pure Go\nimplementation. The two backends are functionally equivalent (and we have\nintegration tests to verify this), so this migration should be very easy with\nno user-visible impact.\n\n[libpathrs]: https://github.com/cyphar/libpathrs\n\n### License ###\n\nMost of this subpackage is licensed under the Mozilla Public License (version\n2.0). For more information, see the top-level [COPYING.md][] and\n[LICENSE.MPL-2.0][] files, as well as the individual license headers for each\nfile.\n\n```\nCopyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\nCopyright (C) 2024-2025 SUSE LLC\n\nThis Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, You can obtain one at https://mozilla.org/MPL/2.0/.\n```\n\n[COPYING.md]: ../COPYING.md\n[LICENSE.MPL-2.0]: ../LICENSE.MPL-2.0\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/doc.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\n// Package pathrs (pathrs-lite) is a less complete pure Go implementation of\n// some of the APIs provided by [libpathrs].\n//\n// [libpathrs]: https://github.com/cyphar/libpathrs\npackage pathrs\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/assert/assert.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n// Copyright (C) 2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\n// Package assert provides some basic assertion helpers for Go.\npackage assert\n\nimport (\n\t\"fmt\"\n)\n\n// Assert panics if the predicate is false with the provided argument.\nfunc Assert(predicate bool, msg any) {\n\tif !predicate {\n\t\tpanic(msg)\n\t}\n}\n\n// Assertf panics if the predicate is false and formats the message using the\n// same formatting as [fmt.Printf].\n//\n// [fmt.Printf]: https://pkg.go.dev/fmt#Printf\nfunc Assertf(predicate bool, fmtMsg string, args ...any) {\n\tAssert(predicate, fmt.Sprintf(fmtMsg, args...))\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/errors_linux.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\n// Package internal contains unexported common code for filepath-securejoin.\npackage internal\n\nimport (\n\t\"errors\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\ntype xdevErrorish struct {\n\tdescription string\n}\n\nfunc (err xdevErrorish) Error() string        { return err.description }\nfunc (err xdevErrorish) Is(target error) bool { return target == unix.EXDEV }\n\nvar (\n\t// ErrPossibleAttack indicates that some attack was detected.\n\tErrPossibleAttack error = xdevErrorish{\"possible attack detected\"}\n\n\t// ErrPossibleBreakout indicates that during an operation we ended up in a\n\t// state that could be a breakout but we detected it.\n\tErrPossibleBreakout error = xdevErrorish{\"possible breakout detected\"}\n\n\t// ErrInvalidDirectory indicates an unlinked directory.\n\tErrInvalidDirectory = errors.New(\"wandered into deleted directory\")\n\n\t// ErrDeletedInode indicates an unlinked file (non-directory).\n\tErrDeletedInode = errors.New(\"cannot verify path of deleted inode\")\n)\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/fd/at_linux.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage fd\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat\"\n)\n\n// prepareAtWith returns -EBADF (an invalid fd) if dir is nil, otherwise using\n// the dir.Fd(). We use -EBADF because in filepath-securejoin we generally\n// don't want to allow relative-to-cwd paths. The returned path is an\n// *informational* string that describes a reasonable pathname for the given\n// *at(2) arguments. You must not use the full path for any actual filesystem\n// operations.\nfunc prepareAt(dir Fd, path string) (dirFd int, unsafeUnmaskedPath string) {\n\tdirFd, dirPath := -int(unix.EBADF), \".\"\n\tif dir != nil {\n\t\tdirFd, dirPath = int(dir.Fd()), dir.Name()\n\t}\n\tif !filepath.IsAbs(path) {\n\t\t// only prepend the dirfd path for relative paths\n\t\tpath = dirPath + \"/\" + path\n\t}\n\t// NOTE: If path is \".\" or \"\", the returned path won't be filepath.Clean,\n\t// but that's okay since this path is either used for errors (in which case\n\t// a trailing \"/\" or \"/.\" is important information) or will be\n\t// filepath.Clean'd later (in the case of fd.Openat).\n\treturn dirFd, path\n}\n\n// Openat is an [Fd]-based wrapper around unix.Openat.\nfunc Openat(dir Fd, path string, flags int, mode int) (*os.File, error) { //nolint:unparam // wrapper func\n\tdirFd, fullPath := prepareAt(dir, path)\n\t// Make sure we always set O_CLOEXEC.\n\tflags |= unix.O_CLOEXEC\n\tfd, err := unix.Openat(dirFd, path, flags, uint32(mode))\n\tif err != nil {\n\t\treturn nil, &os.PathError{Op: \"openat\", Path: fullPath, Err: err}\n\t}\n\truntime.KeepAlive(dir)\n\t// openat is only used with lexically-safe paths so we can use\n\t// filepath.Clean here, and also the path itself is not going to be used\n\t// for actual path operations.\n\tfullPath = filepath.Clean(fullPath)\n\treturn os.NewFile(uintptr(fd), fullPath), nil\n}\n\n// Fstatat is an [Fd]-based wrapper around unix.Fstatat.\nfunc Fstatat(dir Fd, path string, flags int) (unix.Stat_t, error) {\n\tdirFd, fullPath := prepareAt(dir, path)\n\tvar stat unix.Stat_t\n\tif err := unix.Fstatat(dirFd, path, &stat, flags); err != nil {\n\t\treturn stat, &os.PathError{Op: \"fstatat\", Path: fullPath, Err: err}\n\t}\n\truntime.KeepAlive(dir)\n\treturn stat, nil\n}\n\n// Faccessat is an [Fd]-based wrapper around unix.Faccessat.\nfunc Faccessat(dir Fd, path string, mode uint32, flags int) error {\n\tdirFd, fullPath := prepareAt(dir, path)\n\terr := unix.Faccessat(dirFd, path, mode, flags)\n\tif err != nil {\n\t\terr = &os.PathError{Op: \"faccessat\", Path: fullPath, Err: err}\n\t}\n\truntime.KeepAlive(dir)\n\treturn err\n}\n\n// Readlinkat is an [Fd]-based wrapper around unix.Readlinkat.\nfunc Readlinkat(dir Fd, path string) (string, error) {\n\tdirFd, fullPath := prepareAt(dir, path)\n\tsize := 4096\n\tfor {\n\t\tlinkBuf := make([]byte, size)\n\t\tn, err := unix.Readlinkat(dirFd, path, linkBuf)\n\t\tif err != nil {\n\t\t\treturn \"\", &os.PathError{Op: \"readlinkat\", Path: fullPath, Err: err}\n\t\t}\n\t\truntime.KeepAlive(dir)\n\t\tif n != size {\n\t\t\treturn string(linkBuf[:n]), nil\n\t\t}\n\t\t// Possible truncation, resize the buffer.\n\t\tsize *= 2\n\t}\n}\n\nconst (\n\t// STATX_MNT_ID_UNIQUE is provided in golang.org/x/sys@v0.20.0, but in order to\n\t// avoid bumping the requirement for a single constant we can just define it\n\t// ourselves.\n\t_STATX_MNT_ID_UNIQUE = 0x4000 //nolint:revive // unix.* name\n\n\t// We don't care which mount ID we get. The kernel will give us the unique\n\t// one if it is supported. If the kernel doesn't support\n\t// STATX_MNT_ID_UNIQUE, the bit is ignored and the returned request mask\n\t// will only contain STATX_MNT_ID (if supported).\n\twantStatxMntMask = _STATX_MNT_ID_UNIQUE | unix.STATX_MNT_ID\n)\n\nvar hasStatxMountID = gocompat.SyncOnceValue(func() bool {\n\tvar stx unix.Statx_t\n\terr := unix.Statx(-int(unix.EBADF), \"/\", 0, wantStatxMntMask, &stx)\n\treturn err == nil && stx.Mask&wantStatxMntMask != 0\n})\n\n// GetMountID gets the mount identifier associated with the fd and path\n// combination. It is effectively a wrapper around fetching\n// STATX_MNT_ID{,_UNIQUE} with unix.Statx, but with a fallback to 0 if the\n// kernel doesn't support the feature.\nfunc GetMountID(dir Fd, path string) (uint64, error) {\n\t// If we don't have statx(STATX_MNT_ID*) support, we can't do anything.\n\tif !hasStatxMountID() {\n\t\treturn 0, nil\n\t}\n\n\tdirFd, fullPath := prepareAt(dir, path)\n\n\tvar stx unix.Statx_t\n\terr := unix.Statx(dirFd, path, unix.AT_EMPTY_PATH|unix.AT_SYMLINK_NOFOLLOW, wantStatxMntMask, &stx)\n\tif stx.Mask&wantStatxMntMask == 0 {\n\t\t// It's not a kernel limitation, for some reason we couldn't get a\n\t\t// mount ID. Assume it's some kind of attack.\n\t\terr = fmt.Errorf(\"could not get mount id: %w\", err)\n\t}\n\tif err != nil {\n\t\treturn 0, &os.PathError{Op: \"statx(STATX_MNT_ID_...)\", Path: fullPath, Err: err}\n\t}\n\truntime.KeepAlive(dir)\n\treturn stx.Mnt_id, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/fd/fd.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n// Copyright (C) 2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\n// Package fd provides a drop-in interface-based replacement of [*os.File] that\n// allows for things like noop-Close wrappers to be used.\n//\n// [*os.File]: https://pkg.go.dev/os#File\npackage fd\n\nimport (\n\t\"io\"\n\t\"os\"\n)\n\n// Fd is an interface that mirrors most of the API of [*os.File], allowing you\n// to create wrappers that can be used in place of [*os.File].\n//\n// [*os.File]: https://pkg.go.dev/os#File\ntype Fd interface {\n\tio.Closer\n\tName() string\n\tFd() uintptr\n}\n\n// Compile-time interface checks.\nvar (\n\t_ Fd = (*os.File)(nil)\n\t_ Fd = noClose{}\n)\n\ntype noClose struct{ inner Fd }\n\nfunc (f noClose) Name() string { return f.inner.Name() }\nfunc (f noClose) Fd() uintptr  { return f.inner.Fd() }\n\nfunc (f noClose) Close() error { return nil }\n\n// NopCloser returns an [*os.File]-like object where the [Close] method is now\n// a no-op.\n//\n// Note that for [*os.File] and similar objects, the Go garbage collector will\n// still call [Close] on the underlying file unless you use\n// [runtime.SetFinalizer] to disable this behaviour. This is up to the caller\n// to do (if necessary).\n//\n// [*os.File]: https://pkg.go.dev/os#File\n// [Close]: https://pkg.go.dev/io#Closer\n// [runtime.SetFinalizer]: https://pkg.go.dev/runtime#SetFinalizer\nfunc NopCloser(f Fd) Fd { return noClose{inner: f} }\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/fd/fd_linux.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage fd\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal\"\n)\n\n// DupWithName creates a new file descriptor referencing the same underlying\n// file, but with the provided name instead of fd.Name().\nfunc DupWithName(fd Fd, name string) (*os.File, error) {\n\tfd2, err := unix.FcntlInt(fd.Fd(), unix.F_DUPFD_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn nil, os.NewSyscallError(\"fcntl(F_DUPFD_CLOEXEC)\", err)\n\t}\n\truntime.KeepAlive(fd)\n\treturn os.NewFile(uintptr(fd2), name), nil\n}\n\n// Dup creates a new file description referencing the same underlying file.\nfunc Dup(fd Fd) (*os.File, error) {\n\treturn DupWithName(fd, fd.Name())\n}\n\n// Fstat is an [Fd]-based wrapper around unix.Fstat.\nfunc Fstat(fd Fd) (unix.Stat_t, error) {\n\tvar stat unix.Stat_t\n\tif err := unix.Fstat(int(fd.Fd()), &stat); err != nil {\n\t\treturn stat, &os.PathError{Op: \"fstat\", Path: fd.Name(), Err: err}\n\t}\n\truntime.KeepAlive(fd)\n\treturn stat, nil\n}\n\n// Fstatfs is an [Fd]-based wrapper around unix.Fstatfs.\nfunc Fstatfs(fd Fd) (unix.Statfs_t, error) {\n\tvar statfs unix.Statfs_t\n\tif err := unix.Fstatfs(int(fd.Fd()), &statfs); err != nil {\n\t\treturn statfs, &os.PathError{Op: \"fstatfs\", Path: fd.Name(), Err: err}\n\t}\n\truntime.KeepAlive(fd)\n\treturn statfs, nil\n}\n\n// IsDeadInode detects whether the file has been unlinked from a filesystem and\n// is thus a \"dead inode\" from the kernel's perspective.\nfunc IsDeadInode(file Fd) error {\n\t// If the nlink of a file drops to 0, there is an attacker deleting\n\t// directories during our walk, which could result in weird /proc values.\n\t// It's better to error out in this case.\n\tstat, err := Fstat(file)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"check for dead inode: %w\", err)\n\t}\n\tif stat.Nlink == 0 {\n\t\terr := internal.ErrDeletedInode\n\t\tif stat.Mode&unix.S_IFMT == unix.S_IFDIR {\n\t\t\terr = internal.ErrInvalidDirectory\n\t\t}\n\t\treturn fmt.Errorf(\"%w %q\", err, file.Name())\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/fd/mount_linux.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage fd\n\nimport (\n\t\"os\"\n\t\"runtime\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// Fsopen is an [Fd]-based wrapper around unix.Fsopen.\nfunc Fsopen(fsName string, flags int) (*os.File, error) {\n\t// Make sure we always set O_CLOEXEC.\n\tflags |= unix.FSOPEN_CLOEXEC\n\tfd, err := unix.Fsopen(fsName, flags)\n\tif err != nil {\n\t\treturn nil, os.NewSyscallError(\"fsopen \"+fsName, err)\n\t}\n\treturn os.NewFile(uintptr(fd), \"fscontext:\"+fsName), nil\n}\n\n// Fsmount is an [Fd]-based wrapper around unix.Fsmount.\nfunc Fsmount(ctx Fd, flags, mountAttrs int) (*os.File, error) {\n\t// Make sure we always set O_CLOEXEC.\n\tflags |= unix.FSMOUNT_CLOEXEC\n\tfd, err := unix.Fsmount(int(ctx.Fd()), flags, mountAttrs)\n\tif err != nil {\n\t\treturn nil, os.NewSyscallError(\"fsmount \"+ctx.Name(), err)\n\t}\n\treturn os.NewFile(uintptr(fd), \"fsmount:\"+ctx.Name()), nil\n}\n\n// OpenTree is an [Fd]-based wrapper around unix.OpenTree.\nfunc OpenTree(dir Fd, path string, flags uint) (*os.File, error) {\n\tdirFd, fullPath := prepareAt(dir, path)\n\t// Make sure we always set O_CLOEXEC.\n\tflags |= unix.OPEN_TREE_CLOEXEC\n\tfd, err := unix.OpenTree(dirFd, path, flags)\n\tif err != nil {\n\t\treturn nil, &os.PathError{Op: \"open_tree\", Path: fullPath, Err: err}\n\t}\n\truntime.KeepAlive(dir)\n\treturn os.NewFile(uintptr(fd), fullPath), nil\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/fd/openat2_linux.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage fd\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"runtime\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc scopedLookupShouldRetry(how *unix.OpenHow, err error) bool {\n\t// RESOLVE_IN_ROOT (and RESOLVE_BENEATH) can return -EAGAIN if we resolve\n\t// \"..\" while a mount or rename occurs anywhere on the system. This could\n\t// happen spuriously, or as the result of an attacker trying to mess with\n\t// us during lookup.\n\t//\n\t// In addition, scoped lookups have a \"safety check\" at the end of\n\t// complete_walk which will return -EXDEV if the final path is not in the\n\t// root.\n\treturn how.Resolve&(unix.RESOLVE_IN_ROOT|unix.RESOLVE_BENEATH) != 0 &&\n\t\t(errors.Is(err, unix.EAGAIN) || errors.Is(err, unix.EXDEV))\n}\n\n// This is a fairly arbitrary limit we have just to avoid an attacker being\n// able to make us spin in an infinite retry loop -- callers can choose to\n// retry on EAGAIN if they prefer.\nconst scopedLookupMaxRetries = 128\n\n// Openat2 is an [Fd]-based wrapper around unix.Openat2, but with some retry\n// logic in case of EAGAIN errors.\n//\n// NOTE: This is a variable so that the lookup tests can force openat2 to fail.\nvar Openat2 = func(dir Fd, path string, how *unix.OpenHow) (*os.File, error) {\n\tdirFd, fullPath := prepareAt(dir, path)\n\t// Make sure we always set O_CLOEXEC.\n\thow.Flags |= unix.O_CLOEXEC\n\tvar tries int\n\tfor {\n\t\tfd, err := unix.Openat2(dirFd, path, how)\n\t\tif err != nil {\n\t\t\tif scopedLookupShouldRetry(how, err) && tries < scopedLookupMaxRetries {\n\t\t\t\t// We retry a couple of times to avoid the spurious errors, and\n\t\t\t\t// if we are being attacked then returning -EAGAIN is the best\n\t\t\t\t// we can do.\n\t\t\t\ttries++\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn nil, &os.PathError{Op: \"openat2\", Path: fullPath, Err: err}\n\t\t}\n\t\truntime.KeepAlive(dir)\n\t\treturn os.NewFile(uintptr(fd), fullPath), nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat/README.md",
    "content": "## gocompat ##\n\nThis directory contains backports of stdlib functions from later Go versions so\nthe filepath-securejoin can continue to be used by projects that are stuck with\nGo 1.18 support. Note that often filepath-securejoin is added in security\npatches for old releases, so avoiding the need to bump Go compiler requirements\nis a huge plus to downstreams.\n\nThe source code is licensed under the same license as the Go stdlib. See the\nsource files for the precise license information.\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat/doc.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build linux && go1.20\n\n// Copyright (C) 2025 SUSE LLC. All rights reserved.\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 gocompat includes compatibility shims (backported from future Go\n// stdlib versions) to permit filepath-securejoin to be used with older Go\n// versions (often filepath-securejoin is added in security patches for old\n// releases, so avoiding the need to bump Go compiler requirements is a huge\n// plus to downstreams).\npackage gocompat\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat/gocompat_atomic_go119.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n\n//go:build linux && go1.19\n\n// 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 gocompat\n\nimport (\n\t\"sync/atomic\"\n)\n\n// A Bool is an atomic boolean value.\n// The zero value is false.\n//\n// Bool must not be copied after first use.\ntype Bool = atomic.Bool\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat/gocompat_atomic_unsupported.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n\n//go:build linux && !go1.19\n\n// Copyright (C) 2024-2025 SUSE LLC. All rights 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 gocompat\n\nimport (\n\t\"sync/atomic\"\n)\n\n// noCopy may be added to structs which must not be copied\n// after the first use.\n//\n// See https://golang.org/issues/8005#issuecomment-190753527\n// for details.\n//\n// Note that it must not be embedded, due to the Lock and Unlock methods.\ntype noCopy struct{}\n\n// Lock is a no-op used by -copylocks checker from `go vet`.\nfunc (*noCopy) Lock() {}\n\n// b32 returns a uint32 0 or 1 representing b.\nfunc b32(b bool) uint32 {\n\tif b {\n\t\treturn 1\n\t}\n\treturn 0\n}\n\n// A Bool is an atomic boolean value.\n// The zero value is false.\n//\n// Bool must not be copied after first use.\ntype Bool struct {\n\t_ noCopy\n\tv uint32\n}\n\n// Load atomically loads and returns the value stored in x.\nfunc (x *Bool) Load() bool { return atomic.LoadUint32(&x.v) != 0 }\n\n// Store atomically stores val into x.\nfunc (x *Bool) Store(val bool) { atomic.StoreUint32(&x.v, b32(val)) }\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat/gocompat_errors_go120.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build linux && go1.20\n\n// Copyright (C) 2024 SUSE LLC. All rights 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 gocompat\n\nimport (\n\t\"fmt\"\n)\n\n// WrapBaseError is a helper that is equivalent to fmt.Errorf(\"%w: %w\"), except\n// that on pre-1.20 Go versions only errors.Is() works properly (errors.Unwrap)\n// is only guaranteed to give you baseErr.\nfunc WrapBaseError(baseErr, extraErr error) error {\n\treturn fmt.Errorf(\"%w: %w\", extraErr, baseErr)\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat/gocompat_errors_unsupported.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n\n//go:build linux && !go1.20\n\n// Copyright (C) 2024 SUSE LLC. All rights 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 gocompat\n\nimport (\n\t\"fmt\"\n)\n\ntype wrappedError struct {\n\tinner   error\n\tisError error\n}\n\nfunc (err wrappedError) Is(target error) bool {\n\treturn err.isError == target\n}\n\nfunc (err wrappedError) Unwrap() error {\n\treturn err.inner\n}\n\nfunc (err wrappedError) Error() string {\n\treturn fmt.Sprintf(\"%v: %v\", err.isError, err.inner)\n}\n\n// WrapBaseError is a helper that is equivalent to fmt.Errorf(\"%w: %w\"), except\n// that on pre-1.20 Go versions only errors.Is() works properly (errors.Unwrap)\n// is only guaranteed to give you baseErr.\nfunc WrapBaseError(baseErr, extraErr error) error {\n\treturn wrappedError{\n\t\tinner:   baseErr,\n\t\tisError: extraErr,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat/gocompat_generics_go121.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n\n//go:build linux && go1.21\n\n// Copyright (C) 2024-2025 SUSE LLC. All rights 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 gocompat\n\nimport (\n\t\"cmp\"\n\t\"slices\"\n\t\"sync\"\n)\n\n// SlicesDeleteFunc is equivalent to Go 1.21's slices.DeleteFunc.\nfunc SlicesDeleteFunc[S ~[]E, E any](slice S, delFn func(E) bool) S {\n\treturn slices.DeleteFunc(slice, delFn)\n}\n\n// SlicesContains is equivalent to Go 1.21's slices.Contains.\nfunc SlicesContains[S ~[]E, E comparable](slice S, val E) bool {\n\treturn slices.Contains(slice, val)\n}\n\n// SlicesClone is equivalent to Go 1.21's slices.Clone.\nfunc SlicesClone[S ~[]E, E any](slice S) S {\n\treturn slices.Clone(slice)\n}\n\n// SyncOnceValue is equivalent to Go 1.21's sync.OnceValue.\nfunc SyncOnceValue[T any](f func() T) func() T {\n\treturn sync.OnceValue(f)\n}\n\n// SyncOnceValues is equivalent to Go 1.21's sync.OnceValues.\nfunc SyncOnceValues[T1, T2 any](f func() (T1, T2)) func() (T1, T2) {\n\treturn sync.OnceValues(f)\n}\n\n// CmpOrdered is equivalent to Go 1.21's cmp.Ordered generic type definition.\ntype CmpOrdered = cmp.Ordered\n\n// CmpCompare is equivalent to Go 1.21's cmp.Compare.\nfunc CmpCompare[T CmpOrdered](x, y T) int {\n\treturn cmp.Compare(x, y)\n}\n\n// Max2 is equivalent to Go 1.21's max builtin (but only for two parameters).\nfunc Max2[T CmpOrdered](x, y T) T {\n\treturn max(x, y)\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat/gocompat_generics_unsupported.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n\n//go:build linux && !go1.21\n\n// Copyright (C) 2021, 2022 The Go Authors. All rights reserved.\n// Copyright (C) 2024-2025 SUSE LLC. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.BSD file.\n\npackage gocompat\n\nimport (\n\t\"sync\"\n)\n\n// These are very minimal implementations of functions that appear in Go 1.21's\n// stdlib, included so that we can build on older Go versions. Most are\n// borrowed directly from the stdlib, and a few are modified to be \"obviously\n// correct\" without needing to copy too many other helpers.\n\n// clearSlice is equivalent to Go 1.21's builtin clear.\n// Copied from the Go 1.24 stdlib implementation.\nfunc clearSlice[S ~[]E, E any](slice S) {\n\tvar zero E\n\tfor i := range slice {\n\t\tslice[i] = zero\n\t}\n}\n\n// slicesIndexFunc is equivalent to Go 1.21's slices.IndexFunc.\n// Copied from the Go 1.24 stdlib implementation.\nfunc slicesIndexFunc[S ~[]E, E any](s S, f func(E) bool) int {\n\tfor i := range s {\n\t\tif f(s[i]) {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\n// SlicesDeleteFunc is equivalent to Go 1.21's slices.DeleteFunc.\n// Copied from the Go 1.24 stdlib implementation.\nfunc SlicesDeleteFunc[S ~[]E, E any](s S, del func(E) bool) S {\n\ti := slicesIndexFunc(s, del)\n\tif i == -1 {\n\t\treturn s\n\t}\n\t// Don't start copying elements until we find one to delete.\n\tfor j := i + 1; j < len(s); j++ {\n\t\tif v := s[j]; !del(v) {\n\t\t\ts[i] = v\n\t\t\ti++\n\t\t}\n\t}\n\tclearSlice(s[i:]) // zero/nil out the obsolete elements, for GC\n\treturn s[:i]\n}\n\n// SlicesContains is equivalent to Go 1.21's slices.Contains.\n// Similar to the stdlib slices.Contains, except that we don't have\n// slices.Index so we need to use slices.IndexFunc for this non-Func helper.\nfunc SlicesContains[S ~[]E, E comparable](s S, v E) bool {\n\treturn slicesIndexFunc(s, func(e E) bool { return e == v }) >= 0\n}\n\n// SlicesClone is equivalent to Go 1.21's slices.Clone.\n// Copied from the Go 1.24 stdlib implementation.\nfunc SlicesClone[S ~[]E, E any](s S) S {\n\t// Preserve nil in case it matters.\n\tif s == nil {\n\t\treturn nil\n\t}\n\treturn append(S([]E{}), s...)\n}\n\n// SyncOnceValue is equivalent to Go 1.21's sync.OnceValue.\n// Copied from the Go 1.25 stdlib implementation.\nfunc SyncOnceValue[T any](f func() T) func() T {\n\t// Use a struct so that there's a single heap allocation.\n\td := struct {\n\t\tf      func() T\n\t\tonce   sync.Once\n\t\tvalid  bool\n\t\tp      any\n\t\tresult T\n\t}{\n\t\tf: f,\n\t}\n\treturn func() T {\n\t\td.once.Do(func() {\n\t\t\tdefer func() {\n\t\t\t\td.f = nil\n\t\t\t\td.p = recover()\n\t\t\t\tif !d.valid {\n\t\t\t\t\tpanic(d.p)\n\t\t\t\t}\n\t\t\t}()\n\t\t\td.result = d.f()\n\t\t\td.valid = true\n\t\t})\n\t\tif !d.valid {\n\t\t\tpanic(d.p)\n\t\t}\n\t\treturn d.result\n\t}\n}\n\n// SyncOnceValues is equivalent to Go 1.21's sync.OnceValues.\n// Copied from the Go 1.25 stdlib implementation.\nfunc SyncOnceValues[T1, T2 any](f func() (T1, T2)) func() (T1, T2) {\n\t// Use a struct so that there's a single heap allocation.\n\td := struct {\n\t\tf     func() (T1, T2)\n\t\tonce  sync.Once\n\t\tvalid bool\n\t\tp     any\n\t\tr1    T1\n\t\tr2    T2\n\t}{\n\t\tf: f,\n\t}\n\treturn func() (T1, T2) {\n\t\td.once.Do(func() {\n\t\t\tdefer func() {\n\t\t\t\td.f = nil\n\t\t\t\td.p = recover()\n\t\t\t\tif !d.valid {\n\t\t\t\t\tpanic(d.p)\n\t\t\t\t}\n\t\t\t}()\n\t\t\td.r1, d.r2 = d.f()\n\t\t\td.valid = true\n\t\t})\n\t\tif !d.valid {\n\t\t\tpanic(d.p)\n\t\t}\n\t\treturn d.r1, d.r2\n\t}\n}\n\n// CmpOrdered is equivalent to Go 1.21's cmp.Ordered generic type definition.\n// Copied from the Go 1.25 stdlib implementation.\ntype CmpOrdered interface {\n\t~int | ~int8 | ~int16 | ~int32 | ~int64 |\n\t\t~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr |\n\t\t~float32 | ~float64 |\n\t\t~string\n}\n\n// isNaN reports whether x is a NaN without requiring the math package.\n// This will always return false if T is not floating-point.\n// Copied from the Go 1.25 stdlib implementation.\nfunc isNaN[T CmpOrdered](x T) bool {\n\treturn x != x\n}\n\n// CmpCompare is equivalent to Go 1.21's cmp.Compare.\n// Copied from the Go 1.25 stdlib implementation.\nfunc CmpCompare[T CmpOrdered](x, y T) int {\n\txNaN := isNaN(x)\n\tyNaN := isNaN(y)\n\tif xNaN {\n\t\tif yNaN {\n\t\t\treturn 0\n\t\t}\n\t\treturn -1\n\t}\n\tif yNaN {\n\t\treturn +1\n\t}\n\tif x < y {\n\t\treturn -1\n\t}\n\tif x > y {\n\t\treturn +1\n\t}\n\treturn 0\n}\n\n// Max2 is equivalent to Go 1.21's max builtin for two parameters.\nfunc Max2[T CmpOrdered](x, y T) T {\n\tm := x\n\tif y > m {\n\t\tm = y\n\t}\n\treturn m\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gopathrs/doc.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\n// Package gopathrs is a less complete pure Go implementation of some of the\n// APIs provided by [libpathrs].\n//\n// [libpathrs]: https://github.com/cyphar/libpathrs\npackage gopathrs\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gopathrs/lookup_linux.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage gopathrs\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/cyphar/filepath-securejoin/internal/consts\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/fd\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/linux\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/procfs\"\n)\n\ntype symlinkStackEntry struct {\n\t// (dir, remainingPath) is what we would've returned if the link didn't\n\t// exist. This matches what openat2(RESOLVE_IN_ROOT) would return in\n\t// this case.\n\tdir           *os.File\n\tremainingPath string\n\t// linkUnwalked is the remaining path components from the original\n\t// Readlink which we have yet to walk. When this slice is empty, we\n\t// drop the link from the stack.\n\tlinkUnwalked []string\n}\n\nfunc (se symlinkStackEntry) String() string {\n\treturn fmt.Sprintf(\"<%s>/%s [->%s]\", se.dir.Name(), se.remainingPath, strings.Join(se.linkUnwalked, \"/\"))\n}\n\nfunc (se symlinkStackEntry) Close() {\n\t_ = se.dir.Close()\n}\n\ntype symlinkStack []*symlinkStackEntry\n\nfunc (s *symlinkStack) IsEmpty() bool {\n\treturn s == nil || len(*s) == 0\n}\n\nfunc (s *symlinkStack) Close() {\n\tif s != nil {\n\t\tfor _, link := range *s {\n\t\t\tlink.Close()\n\t\t}\n\t\t// TODO: Switch to clear once we switch to Go 1.21.\n\t\t*s = nil\n\t}\n}\n\nvar (\n\terrEmptyStack         = errors.New(\"[internal] stack is empty\")\n\terrBrokenSymlinkStack = errors.New(\"[internal error] broken symlink stack\")\n)\n\nfunc (s *symlinkStack) popPart(part string) error {\n\tif s == nil || s.IsEmpty() {\n\t\t// If there is nothing in the symlink stack, then the part was from the\n\t\t// real path provided by the user, and this is a no-op.\n\t\treturn errEmptyStack\n\t}\n\tif part == \".\" {\n\t\t// \".\" components are no-ops -- we drop them when doing SwapLink.\n\t\treturn nil\n\t}\n\n\ttailEntry := (*s)[len(*s)-1]\n\n\t// Double-check that we are popping the component we expect.\n\tif len(tailEntry.linkUnwalked) == 0 {\n\t\treturn fmt.Errorf(\"%w: trying to pop component %q of empty stack entry %s\", errBrokenSymlinkStack, part, tailEntry)\n\t}\n\theadPart := tailEntry.linkUnwalked[0]\n\tif headPart != part {\n\t\treturn fmt.Errorf(\"%w: trying to pop component %q but the last stack entry is %s (%q)\", errBrokenSymlinkStack, part, tailEntry, headPart)\n\t}\n\n\t// Drop the component, but keep the entry around in case we are dealing\n\t// with a \"tail-chained\" symlink.\n\ttailEntry.linkUnwalked = tailEntry.linkUnwalked[1:]\n\treturn nil\n}\n\nfunc (s *symlinkStack) PopPart(part string) error {\n\tif err := s.popPart(part); err != nil {\n\t\tif errors.Is(err, errEmptyStack) {\n\t\t\t// Skip empty stacks.\n\t\t\terr = nil\n\t\t}\n\t\treturn err\n\t}\n\n\t// Clean up any of the trailing stack entries that are empty.\n\tfor lastGood := len(*s) - 1; lastGood >= 0; lastGood-- {\n\t\tentry := (*s)[lastGood]\n\t\tif len(entry.linkUnwalked) > 0 {\n\t\t\tbreak\n\t\t}\n\t\tentry.Close()\n\t\t(*s) = (*s)[:lastGood]\n\t}\n\treturn nil\n}\n\nfunc (s *symlinkStack) push(dir *os.File, remainingPath, linkTarget string) error {\n\tif s == nil {\n\t\treturn nil\n\t}\n\t// Split the link target and clean up any \"\" parts.\n\tlinkTargetParts := gocompat.SlicesDeleteFunc(\n\t\tstrings.Split(linkTarget, \"/\"),\n\t\tfunc(part string) bool { return part == \"\" || part == \".\" })\n\n\t// Copy the directory so the caller doesn't close our copy.\n\tdirCopy, err := fd.Dup(dir)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Add to the stack.\n\t*s = append(*s, &symlinkStackEntry{\n\t\tdir:           dirCopy,\n\t\tremainingPath: remainingPath,\n\t\tlinkUnwalked:  linkTargetParts,\n\t})\n\treturn nil\n}\n\nfunc (s *symlinkStack) SwapLink(linkPart string, dir *os.File, remainingPath, linkTarget string) error {\n\t// If we are currently inside a symlink resolution, remove the symlink\n\t// component from the last symlink entry, but don't remove the entry even\n\t// if it's empty. If we are a \"tail-chained\" symlink (a trailing symlink we\n\t// hit during a symlink resolution) we need to keep the old symlink until\n\t// we finish the resolution.\n\tif err := s.popPart(linkPart); err != nil {\n\t\tif !errors.Is(err, errEmptyStack) {\n\t\t\treturn err\n\t\t}\n\t\t// Push the component regardless of whether the stack was empty.\n\t}\n\treturn s.push(dir, remainingPath, linkTarget)\n}\n\nfunc (s *symlinkStack) PopTopSymlink() (*os.File, string, bool) {\n\tif s == nil || s.IsEmpty() {\n\t\treturn nil, \"\", false\n\t}\n\ttailEntry := (*s)[0]\n\t*s = (*s)[1:]\n\treturn tailEntry.dir, tailEntry.remainingPath, true\n}\n\n// PartialLookupInRoot tries to lookup as much of the request path as possible\n// within the provided root (a-la RESOLVE_IN_ROOT) and opens the final existing\n// component of the requested path, returning a file handle to the final\n// existing component and a string containing the remaining path components.\nfunc PartialLookupInRoot(root fd.Fd, unsafePath string) (*os.File, string, error) {\n\treturn lookupInRoot(root, unsafePath, true)\n}\n\nfunc completeLookupInRoot(root fd.Fd, unsafePath string) (*os.File, error) {\n\thandle, remainingPath, err := lookupInRoot(root, unsafePath, false)\n\tif remainingPath != \"\" && err == nil {\n\t\t// should never happen\n\t\terr = fmt.Errorf(\"[bug] non-empty remaining path when doing a non-partial lookup: %q\", remainingPath)\n\t}\n\t// lookupInRoot(partial=false) will always close the handle if an error is\n\t// returned, so no need to double-check here.\n\treturn handle, err\n}\n\nfunc lookupInRoot(root fd.Fd, unsafePath string, partial bool) (Handle *os.File, _ string, _ error) {\n\tunsafePath = filepath.ToSlash(unsafePath) // noop\n\n\t// This is very similar to SecureJoin, except that we operate on the\n\t// components using file descriptors. We then return the last component we\n\t// managed open, along with the remaining path components not opened.\n\n\t// Try to use openat2 if possible.\n\t//\n\t// NOTE: If openat2(2) works normally but fails for this lookup, it is\n\t// probably not a good idea to fall-back to the O_PATH resolver. An\n\t// attacker could find a bug in the O_PATH resolver and uncontionally\n\t// falling back to the O_PATH resolver would form a downgrade attack.\n\tif handle, remainingPath, err := lookupOpenat2(root, unsafePath, partial); err == nil || linux.HasOpenat2() {\n\t\treturn handle, remainingPath, err\n\t}\n\n\t// Get the \"actual\" root path from /proc/self/fd. This is necessary if the\n\t// root is some magic-link like /proc/$pid/root, in which case we want to\n\t// make sure when we do procfs.CheckProcSelfFdPath that we are using the\n\t// correct root path.\n\tlogicalRootPath, err := procfs.ProcSelfFdReadlink(root)\n\tif err != nil {\n\t\treturn nil, \"\", fmt.Errorf(\"get real root path: %w\", err)\n\t}\n\n\tcurrentDir, err := fd.Dup(root)\n\tif err != nil {\n\t\treturn nil, \"\", fmt.Errorf(\"clone root fd: %w\", err)\n\t}\n\tdefer func() {\n\t\t// If a handle is not returned, close the internal handle.\n\t\tif Handle == nil {\n\t\t\t_ = currentDir.Close()\n\t\t}\n\t}()\n\n\t// symlinkStack is used to emulate how openat2(RESOLVE_IN_ROOT) treats\n\t// dangling symlinks. If we hit a non-existent path while resolving a\n\t// symlink, we need to return the (dir, remainingPath) that we had when we\n\t// hit the symlink (treating the symlink as though it were a regular file).\n\t// The set of (dir, remainingPath) sets is stored within the symlinkStack\n\t// and we add and remove parts when we hit symlink and non-symlink\n\t// components respectively. We need a stack because of recursive symlinks\n\t// (symlinks that contain symlink components in their target).\n\t//\n\t// Note that the stack is ONLY used for book-keeping. All of the actual\n\t// path walking logic is still based on currentPath/remainingPath and\n\t// currentDir (as in SecureJoin).\n\tvar symStack *symlinkStack\n\tif partial {\n\t\tsymStack = new(symlinkStack)\n\t\tdefer symStack.Close()\n\t}\n\n\tvar (\n\t\tlinksWalked   int\n\t\tcurrentPath   string\n\t\tremainingPath = unsafePath\n\t)\n\tfor remainingPath != \"\" {\n\t\t// Save the current remaining path so if the part is not real we can\n\t\t// return the path including the component.\n\t\toldRemainingPath := remainingPath\n\n\t\t// Get the next path component.\n\t\tvar part string\n\t\tif i := strings.IndexByte(remainingPath, '/'); i == -1 {\n\t\t\tpart, remainingPath = remainingPath, \"\"\n\t\t} else {\n\t\t\tpart, remainingPath = remainingPath[:i], remainingPath[i+1:]\n\t\t}\n\t\t// If we hit an empty component, we need to treat it as though it is\n\t\t// \".\" so that trailing \"/\" and \"//\" components on a non-directory\n\t\t// correctly return the right error code.\n\t\tif part == \"\" {\n\t\t\tpart = \".\"\n\t\t}\n\n\t\t// Apply the component lexically to the path we are building.\n\t\t// currentPath does not contain any symlinks, and we are lexically\n\t\t// dealing with a single component, so it's okay to do a filepath.Clean\n\t\t// here.\n\t\tnextPath := path.Join(\"/\", currentPath, part)\n\t\t// If we logically hit the root, just clone the root rather than\n\t\t// opening the part and doing all of the other checks.\n\t\tif nextPath == \"/\" {\n\t\t\tif err := symStack.PopPart(part); err != nil {\n\t\t\t\treturn nil, \"\", fmt.Errorf(\"walking into root with part %q failed: %w\", part, err)\n\t\t\t}\n\t\t\t// Jump to root.\n\t\t\trootClone, err := fd.Dup(root)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, \"\", fmt.Errorf(\"clone root fd: %w\", err)\n\t\t\t}\n\t\t\t_ = currentDir.Close()\n\t\t\tcurrentDir = rootClone\n\t\t\tcurrentPath = nextPath\n\t\t\tcontinue\n\t\t}\n\n\t\t// Try to open the next component.\n\t\tnextDir, err := fd.Openat(currentDir, part, unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0)\n\t\tswitch err {\n\t\tcase nil:\n\t\t\tst, err := nextDir.Stat()\n\t\t\tif err != nil {\n\t\t\t\t_ = nextDir.Close()\n\t\t\t\treturn nil, \"\", fmt.Errorf(\"stat component %q: %w\", part, err)\n\t\t\t}\n\n\t\t\tswitch st.Mode() & os.ModeType { //nolint:exhaustive // just a glorified if statement\n\t\t\tcase os.ModeSymlink:\n\t\t\t\t// readlinkat implies AT_EMPTY_PATH since Linux 2.6.39. See\n\t\t\t\t// Linux commit 65cfc6722361 (\"readlinkat(), fchownat() and\n\t\t\t\t// fstatat() with empty relative pathnames\").\n\t\t\t\tlinkDest, err := fd.Readlinkat(nextDir, \"\")\n\t\t\t\t// We don't need the handle anymore.\n\t\t\t\t_ = nextDir.Close()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, \"\", err\n\t\t\t\t}\n\n\t\t\t\tlinksWalked++\n\t\t\t\tif linksWalked > consts.MaxSymlinkLimit {\n\t\t\t\t\treturn nil, \"\", &os.PathError{Op: \"securejoin.lookupInRoot\", Path: logicalRootPath + \"/\" + unsafePath, Err: unix.ELOOP}\n\t\t\t\t}\n\n\t\t\t\t// Swap out the symlink's component for the link entry itself.\n\t\t\t\tif err := symStack.SwapLink(part, currentDir, oldRemainingPath, linkDest); err != nil {\n\t\t\t\t\treturn nil, \"\", fmt.Errorf(\"walking into symlink %q failed: push symlink: %w\", part, err)\n\t\t\t\t}\n\n\t\t\t\t// Update our logical remaining path.\n\t\t\t\tremainingPath = linkDest + \"/\" + remainingPath\n\t\t\t\t// Absolute symlinks reset any work we've already done.\n\t\t\t\tif path.IsAbs(linkDest) {\n\t\t\t\t\t// Jump to root.\n\t\t\t\t\trootClone, err := fd.Dup(root)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, \"\", fmt.Errorf(\"clone root fd: %w\", err)\n\t\t\t\t\t}\n\t\t\t\t\t_ = currentDir.Close()\n\t\t\t\t\tcurrentDir = rootClone\n\t\t\t\t\tcurrentPath = \"/\"\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\t// If we are dealing with a directory, simply walk into it.\n\t\t\t\t_ = currentDir.Close()\n\t\t\t\tcurrentDir = nextDir\n\t\t\t\tcurrentPath = nextPath\n\n\t\t\t\t// The part was real, so drop it from the symlink stack.\n\t\t\t\tif err := symStack.PopPart(part); err != nil {\n\t\t\t\t\treturn nil, \"\", fmt.Errorf(\"walking into directory %q failed: %w\", part, err)\n\t\t\t\t}\n\n\t\t\t\t// If we are operating on a .., make sure we haven't escaped.\n\t\t\t\t// We only have to check for \"..\" here because walking down\n\t\t\t\t// into a regular component component cannot cause you to\n\t\t\t\t// escape. This mirrors the logic in RESOLVE_IN_ROOT, except we\n\t\t\t\t// have to check every \"..\" rather than only checking after a\n\t\t\t\t// rename or mount on the system.\n\t\t\t\tif part == \"..\" {\n\t\t\t\t\t// Make sure the root hasn't moved.\n\t\t\t\t\tif err := procfs.CheckProcSelfFdPath(logicalRootPath, root); err != nil {\n\t\t\t\t\t\treturn nil, \"\", fmt.Errorf(\"root path moved during lookup: %w\", err)\n\t\t\t\t\t}\n\t\t\t\t\t// Make sure the path is what we expect.\n\t\t\t\t\tfullPath := logicalRootPath + nextPath\n\t\t\t\t\tif err := procfs.CheckProcSelfFdPath(fullPath, currentDir); err != nil {\n\t\t\t\t\t\treturn nil, \"\", fmt.Errorf(\"walking into %q had unexpected result: %w\", part, err)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\tdefault:\n\t\t\tif !partial {\n\t\t\t\treturn nil, \"\", err\n\t\t\t}\n\t\t\t// If there are any remaining components in the symlink stack, we\n\t\t\t// are still within a symlink resolution and thus we hit a dangling\n\t\t\t// symlink. So pretend that the first symlink in the stack we hit\n\t\t\t// was an ENOENT (to match openat2).\n\t\t\tif oldDir, remainingPath, ok := symStack.PopTopSymlink(); ok {\n\t\t\t\t_ = currentDir.Close()\n\t\t\t\treturn oldDir, remainingPath, err\n\t\t\t}\n\t\t\t// We have hit a final component that doesn't exist, so we have our\n\t\t\t// partial open result. Note that we have to use the OLD remaining\n\t\t\t// path, since the lookup failed.\n\t\t\treturn currentDir, oldRemainingPath, err\n\t\t}\n\t}\n\n\t// If the unsafePath had a trailing slash, we need to make sure we try to\n\t// do a relative \".\" open so that we will correctly return an error when\n\t// the final component is a non-directory (to match openat2). In the\n\t// context of openat2, a trailing slash and a trailing \"/.\" are completely\n\t// equivalent.\n\tif strings.HasSuffix(unsafePath, \"/\") {\n\t\tnextDir, err := fd.Openat(currentDir, \".\", unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0)\n\t\tif err != nil {\n\t\t\tif !partial {\n\t\t\t\t_ = currentDir.Close()\n\t\t\t\tcurrentDir = nil\n\t\t\t}\n\t\t\treturn currentDir, \"\", err\n\t\t}\n\t\t_ = currentDir.Close()\n\t\tcurrentDir = nextDir\n\t}\n\n\t// All of the components existed!\n\treturn currentDir, \"\", nil\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gopathrs/mkdir_linux.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage gopathrs\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/fd\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/linux\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/procfs\"\n)\n\n// ErrInvalidMode is returned from [MkdirAll] when the requested mode is\n// invalid.\nvar ErrInvalidMode = errors.New(\"invalid permission mode\")\n\n// modePermExt is like os.ModePerm except that it also includes the set[ug]id\n// and sticky bits.\nconst modePermExt = os.ModePerm | os.ModeSetuid | os.ModeSetgid | os.ModeSticky\n\n//nolint:cyclop // this function needs to handle a lot of cases\nfunc toUnixMode(mode os.FileMode) (uint32, error) {\n\tsysMode := uint32(mode.Perm())\n\tif mode&os.ModeSetuid != 0 {\n\t\tsysMode |= unix.S_ISUID\n\t}\n\tif mode&os.ModeSetgid != 0 {\n\t\tsysMode |= unix.S_ISGID\n\t}\n\tif mode&os.ModeSticky != 0 {\n\t\tsysMode |= unix.S_ISVTX\n\t}\n\t// We don't allow file type bits.\n\tif mode&os.ModeType != 0 {\n\t\treturn 0, fmt.Errorf(\"%w %+.3o (%s): type bits not permitted\", ErrInvalidMode, mode, mode)\n\t}\n\t// We don't allow other unknown modes.\n\tif mode&^modePermExt != 0 || sysMode&unix.S_IFMT != 0 {\n\t\treturn 0, fmt.Errorf(\"%w %+.3o (%s): unknown mode bits\", ErrInvalidMode, mode, mode)\n\t}\n\treturn sysMode, nil\n}\n\n// MkdirAllHandle is equivalent to [MkdirAll], except that it is safer to use\n// in two respects:\n//\n//   - The caller provides the root directory as an *[os.File] (preferably O_PATH)\n//     handle. This means that the caller can be sure which root directory is\n//     being used. Note that this can be emulated by using /proc/self/fd/... as\n//     the root path with [os.MkdirAll].\n//\n//   - Once all of the directories have been created, an *[os.File] O_PATH handle\n//     to the directory at unsafePath is returned to the caller. This is done in\n//     an effectively-race-free way (an attacker would only be able to swap the\n//     final directory component), which is not possible to emulate with\n//     [MkdirAll].\n//\n// In addition, the returned handle is obtained far more efficiently than doing\n// a brand new lookup of unsafePath (such as with [SecureJoin] or openat2) after\n// doing [MkdirAll]. If you intend to open the directory after creating it, you\n// should use MkdirAllHandle.\n//\n// [SecureJoin]: https://pkg.go.dev/github.com/cyphar/filepath-securejoin#SecureJoin\nfunc MkdirAllHandle(root *os.File, unsafePath string, mode os.FileMode) (_ *os.File, Err error) {\n\tunixMode, err := toUnixMode(mode)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t// On Linux, mkdirat(2) (and os.Mkdir) silently ignore the suid and sgid\n\t// bits. We could also silently ignore them but since we have very few\n\t// users it seems more prudent to return an error so users notice that\n\t// these bits will not be set.\n\tif unixMode&^0o1777 != 0 {\n\t\treturn nil, fmt.Errorf(\"%w for mkdir %+.3o: suid and sgid are ignored by mkdir\", ErrInvalidMode, mode)\n\t}\n\n\t// Try to open as much of the path as possible.\n\tcurrentDir, remainingPath, err := PartialLookupInRoot(root, unsafePath)\n\tdefer func() {\n\t\tif Err != nil {\n\t\t\t_ = currentDir.Close()\n\t\t}\n\t}()\n\tif err != nil && !errors.Is(err, unix.ENOENT) {\n\t\treturn nil, fmt.Errorf(\"find existing subpath of %q: %w\", unsafePath, err)\n\t}\n\n\t// If there is an attacker deleting directories as we walk into them,\n\t// detect this proactively. Note this is guaranteed to detect if the\n\t// attacker deleted any part of the tree up to currentDir.\n\t//\n\t// Once we walk into a dead directory, partialLookupInRoot would not be\n\t// able to walk further down the tree (directories must be empty before\n\t// they are deleted), and if the attacker has removed the entire tree we\n\t// can be sure that anything that was originally inside a dead directory\n\t// must also be deleted and thus is a dead directory in its own right.\n\t//\n\t// This is mostly a quality-of-life check, because mkdir will simply fail\n\t// later if the attacker deletes the tree after this check.\n\tif err := fd.IsDeadInode(currentDir); err != nil {\n\t\treturn nil, fmt.Errorf(\"finding existing subpath of %q: %w\", unsafePath, err)\n\t}\n\n\t// Re-open the path to match the O_DIRECTORY reopen loop later (so that we\n\t// always return a non-O_PATH handle). We also check that we actually got a\n\t// directory.\n\tif reopenDir, err := procfs.ReopenFd(currentDir, unix.O_DIRECTORY|unix.O_CLOEXEC); errors.Is(err, unix.ENOTDIR) {\n\t\treturn nil, fmt.Errorf(\"cannot create subdirectories in %q: %w\", currentDir.Name(), unix.ENOTDIR)\n\t} else if err != nil {\n\t\treturn nil, fmt.Errorf(\"re-opening handle to %q: %w\", currentDir.Name(), err)\n\t} else { //nolint:revive // indent-error-flow lint doesn't make sense here\n\t\t_ = currentDir.Close()\n\t\tcurrentDir = reopenDir\n\t}\n\n\tremainingParts := strings.Split(remainingPath, string(filepath.Separator))\n\tif gocompat.SlicesContains(remainingParts, \"..\") {\n\t\t// The path contained \"..\" components after the end of the \"real\"\n\t\t// components. We could try to safely resolve \"..\" here but that would\n\t\t// add a bunch of extra logic for something that it's not clear even\n\t\t// needs to be supported. So just return an error.\n\t\t//\n\t\t// If we do filepath.Clean(remainingPath) then we end up with the\n\t\t// problem that \"..\" can erase a trailing dangling symlink and produce\n\t\t// a path that doesn't quite match what the user asked for.\n\t\treturn nil, fmt.Errorf(\"%w: yet-to-be-created path %q contains '..' components\", unix.ENOENT, remainingPath)\n\t}\n\n\t// Create the remaining components.\n\tfor _, part := range remainingParts {\n\t\tswitch part {\n\t\tcase \"\", \".\":\n\t\t\t// Skip over no-op paths.\n\t\t\tcontinue\n\t\t}\n\n\t\t// NOTE: mkdir(2) will not follow trailing symlinks, so we can safely\n\t\t// create the final component without worrying about symlink-exchange\n\t\t// attacks.\n\t\t//\n\t\t// If we get -EEXIST, it's possible that another program created the\n\t\t// directory at the same time as us. In that case, just continue on as\n\t\t// if we created it (if the created inode is not a directory, the\n\t\t// following open call will fail).\n\t\tif err := unix.Mkdirat(int(currentDir.Fd()), part, unixMode); err != nil && !errors.Is(err, unix.EEXIST) {\n\t\t\terr = &os.PathError{Op: \"mkdirat\", Path: currentDir.Name() + \"/\" + part, Err: err}\n\t\t\t// Make the error a bit nicer if the directory is dead.\n\t\t\tif deadErr := fd.IsDeadInode(currentDir); deadErr != nil {\n\t\t\t\t// TODO: Once we bump the minimum Go version to 1.20, we can use\n\t\t\t\t// multiple %w verbs for this wrapping. For now we need to use a\n\t\t\t\t// compatibility shim for older Go versions.\n\t\t\t\t// err = fmt.Errorf(\"%w (%w)\", err, deadErr)\n\t\t\t\terr = gocompat.WrapBaseError(err, deadErr)\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Get a handle to the next component. O_DIRECTORY means we don't need\n\t\t// to use O_PATH.\n\t\tvar nextDir *os.File\n\t\tif linux.HasOpenat2() {\n\t\t\tnextDir, err = openat2(currentDir, part, &unix.OpenHow{\n\t\t\t\tFlags:   unix.O_NOFOLLOW | unix.O_DIRECTORY | unix.O_CLOEXEC,\n\t\t\t\tResolve: unix.RESOLVE_BENEATH | unix.RESOLVE_NO_SYMLINKS | unix.RESOLVE_NO_XDEV,\n\t\t\t})\n\t\t} else {\n\t\t\tnextDir, err = fd.Openat(currentDir, part, unix.O_NOFOLLOW|unix.O_DIRECTORY|unix.O_CLOEXEC, 0)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t_ = currentDir.Close()\n\t\tcurrentDir = nextDir\n\n\t\t// It's possible that the directory we just opened was swapped by an\n\t\t// attacker. Unfortunately there isn't much we can do to protect\n\t\t// against this, and MkdirAll's behaviour is that we will reuse\n\t\t// existing directories anyway so the need to protect against this is\n\t\t// incredibly limited (and arguably doesn't even deserve mention here).\n\t\t//\n\t\t// Ideally we might want to check that the owner and mode match what we\n\t\t// would've created -- unfortunately, it is non-trivial to verify that\n\t\t// the owner and mode of the created directory match. While plain Unix\n\t\t// DAC rules seem simple enough to emulate, there are a bunch of other\n\t\t// factors that can change the mode or owner of created directories\n\t\t// (default POSIX ACLs, mount options like uid=1,gid=2,umask=0 on\n\t\t// filesystems like vfat, etc etc). We used to try to verify this but\n\t\t// it just lead to a series of spurious errors.\n\t\t//\n\t\t// We could also check that the directory is non-empty, but\n\t\t// unfortunately some pseduofilesystems (like cgroupfs) create\n\t\t// non-empty directories, which would result in different spurious\n\t\t// errors.\n\t}\n\treturn currentDir, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gopathrs/open_linux.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage gopathrs\n\nimport (\n\t\"os\"\n)\n\n// OpenatInRoot is equivalent to [OpenInRoot], except that the root is provided\n// using an *[os.File] handle, to ensure that the correct root directory is used.\nfunc OpenatInRoot(root *os.File, unsafePath string) (*os.File, error) {\n\thandle, err := completeLookupInRoot(root, unsafePath)\n\tif err != nil {\n\t\treturn nil, &os.PathError{Op: \"securejoin.OpenInRoot\", Path: unsafePath, Err: err}\n\t}\n\treturn handle, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gopathrs/openat2_linux.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage gopathrs\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/fd\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/procfs\"\n)\n\nfunc openat2(dir fd.Fd, path string, how *unix.OpenHow) (*os.File, error) {\n\tfile, err := fd.Openat2(dir, path, how)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t// If we are using RESOLVE_IN_ROOT, the name we generated may be wrong.\n\tif how.Resolve&unix.RESOLVE_IN_ROOT == unix.RESOLVE_IN_ROOT {\n\t\tif actualPath, err := procfs.ProcSelfFdReadlink(file); err == nil {\n\t\t\t// TODO: Ideally we would not need to dup the fd, but you cannot\n\t\t\t//       easily just swap an *os.File with one from the same fd\n\t\t\t//       (the GC will close the old one, and you cannot clear the\n\t\t\t//       finaliser easily because it is associated with an internal\n\t\t\t//       field of *os.File not *os.File itself).\n\t\t\tnewFile, err := fd.DupWithName(file, actualPath)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t_ = file.Close()\n\t\t\tfile = newFile\n\t\t}\n\t}\n\treturn file, nil\n}\n\nfunc lookupOpenat2(root fd.Fd, unsafePath string, partial bool) (*os.File, string, error) {\n\tif !partial {\n\t\tfile, err := openat2(root, unsafePath, &unix.OpenHow{\n\t\t\tFlags:   unix.O_PATH | unix.O_CLOEXEC,\n\t\t\tResolve: unix.RESOLVE_IN_ROOT | unix.RESOLVE_NO_MAGICLINKS,\n\t\t})\n\t\treturn file, \"\", err\n\t}\n\treturn partialLookupOpenat2(root, unsafePath)\n}\n\n// partialLookupOpenat2 is an alternative implementation of\n// partialLookupInRoot, using openat2(RESOLVE_IN_ROOT) to more safely get a\n// handle to the deepest existing child of the requested path within the root.\nfunc partialLookupOpenat2(root fd.Fd, unsafePath string) (*os.File, string, error) {\n\t// TODO: Implement this as a git-bisect-like binary search.\n\n\tunsafePath = filepath.ToSlash(unsafePath) // noop\n\tendIdx := len(unsafePath)\n\tvar lastError error\n\tfor endIdx > 0 {\n\t\tsubpath := unsafePath[:endIdx]\n\n\t\thandle, err := openat2(root, subpath, &unix.OpenHow{\n\t\t\tFlags:   unix.O_PATH | unix.O_CLOEXEC,\n\t\t\tResolve: unix.RESOLVE_IN_ROOT | unix.RESOLVE_NO_MAGICLINKS,\n\t\t})\n\t\tif err == nil {\n\t\t\t// Jump over the slash if we have a non-\"\" remainingPath.\n\t\t\tif endIdx < len(unsafePath) {\n\t\t\t\tendIdx++\n\t\t\t}\n\t\t\t// We found a subpath!\n\t\t\treturn handle, unsafePath[endIdx:], lastError\n\t\t}\n\t\tif errors.Is(err, unix.ENOENT) || errors.Is(err, unix.ENOTDIR) {\n\t\t\t// That path doesn't exist, let's try the next directory up.\n\t\t\tendIdx = strings.LastIndexByte(subpath, '/')\n\t\t\tlastError = err\n\t\t\tcontinue\n\t\t}\n\t\treturn nil, \"\", fmt.Errorf(\"open subpath: %w\", err)\n\t}\n\t// If we couldn't open anything, the whole subpath is missing. Return a\n\t// copy of the root fd so that the caller doesn't close this one by\n\t// accident.\n\trootClone, err := fd.Dup(root)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\treturn rootClone, unsafePath, lastError\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/kernelversion/kernel_linux.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n\n// Copyright (C) 2022 The Go Authors. All rights reserved.\n// Copyright (C) 2025 SUSE LLC. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.BSD file.\n\n// The parsing logic is very loosely based on the Go stdlib's\n// src/internal/syscall/unix/kernel_version_linux.go but with an API that looks\n// a bit like runc's libcontainer/system/kernelversion.\n//\n// TODO(cyphar): This API has been copied around to a lot of different projects\n// (Docker, containerd, runc, and now filepath-securejoin) -- maybe we should\n// put it in a separate project?\n\n// Package kernelversion provides a simple mechanism for checking whether the\n// running kernel is at least as new as some baseline kernel version. This is\n// often useful when checking for features that would be too complicated to\n// test support for (or in cases where we know that some kernel features in\n// backport-heavy kernels are broken and need to be avoided).\npackage kernelversion\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat\"\n)\n\n// KernelVersion is a numeric representation of the key numerical elements of a\n// kernel version (for instance, \"4.1.2-default-1\" would be represented as\n// KernelVersion{4, 1, 2}).\ntype KernelVersion []uint64\n\nfunc (kver KernelVersion) String() string {\n\tvar str strings.Builder\n\tfor idx, elem := range kver {\n\t\tif idx != 0 {\n\t\t\t_, _ = str.WriteRune('.')\n\t\t}\n\t\t_, _ = str.WriteString(strconv.FormatUint(elem, 10))\n\t}\n\treturn str.String()\n}\n\nvar errInvalidKernelVersion = errors.New(\"invalid kernel version\")\n\n// parseKernelVersion parses a string and creates a KernelVersion based on it.\nfunc parseKernelVersion(kverStr string) (KernelVersion, error) {\n\tkver := make(KernelVersion, 1, 3)\n\tfor idx, ch := range kverStr {\n\t\tif '0' <= ch && ch <= '9' {\n\t\t\tv := &kver[len(kver)-1]\n\t\t\t*v = (*v * 10) + uint64(ch-'0')\n\t\t} else {\n\t\t\tif idx == 0 || kverStr[idx-1] < '0' || '9' < kverStr[idx-1] {\n\t\t\t\t// \".\" must be preceded by a digit while in version section\n\t\t\t\treturn nil, fmt.Errorf(\"%w %q: kernel version has dot(s) followed by non-digit in version section\", errInvalidKernelVersion, kverStr)\n\t\t\t}\n\t\t\tif ch != '.' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tkver = append(kver, 0)\n\t\t}\n\t}\n\tif len(kver) < 2 {\n\t\treturn nil, fmt.Errorf(\"%w %q: kernel versions must contain at least two components\", errInvalidKernelVersion, kverStr)\n\t}\n\treturn kver, nil\n}\n\n// getKernelVersion gets the current kernel version.\nvar getKernelVersion = gocompat.SyncOnceValues(func() (KernelVersion, error) {\n\tvar uts unix.Utsname\n\tif err := unix.Uname(&uts); err != nil {\n\t\treturn nil, err\n\t}\n\t// Remove the \\x00 from the release.\n\trelease := uts.Release[:]\n\treturn parseKernelVersion(string(release[:bytes.IndexByte(release, 0)]))\n})\n\n// GreaterEqualThan returns true if the the host kernel version is greater than\n// or equal to the provided [KernelVersion]. When doing this comparison, any\n// non-numerical suffixes of the host kernel version are ignored.\n//\n// If the number of components provided is not equal to the number of numerical\n// components of the host kernel version, any missing components are treated as\n// 0. This means that GreaterEqualThan(KernelVersion{4}) will be treated the\n// same as GreaterEqualThan(KernelVersion{4, 0, 0, ..., 0, 0}), and that if the\n// host kernel version is \"4\" then GreaterEqualThan(KernelVersion{4, 1}) will\n// return false (because the host version will be treated as \"4.0\").\nfunc GreaterEqualThan(wantKver KernelVersion) (bool, error) {\n\thostKver, err := getKernelVersion()\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\t// Pad out the kernel version lengths to match one another.\n\tcmpLen := gocompat.Max2(len(hostKver), len(wantKver))\n\thostKver = append(hostKver, make(KernelVersion, cmpLen-len(hostKver))...)\n\twantKver = append(wantKver, make(KernelVersion, cmpLen-len(wantKver))...)\n\n\tfor i := 0; i < cmpLen; i++ {\n\t\tswitch gocompat.CmpCompare(hostKver[i], wantKver[i]) {\n\t\tcase -1:\n\t\t\t// host < want\n\t\t\treturn false, nil\n\t\tcase +1:\n\t\t\t// host > want\n\t\t\treturn true, nil\n\t\tcase 0:\n\t\t\tcontinue\n\t\t}\n\t}\n\t// equal version values\n\treturn true, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/linux/doc.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\n// Package linux returns information about what features are supported on the\n// running kernel.\npackage linux\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/linux/mount_linux.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage linux\n\nimport (\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/kernelversion\"\n)\n\n// HasNewMountAPI returns whether the new fsopen(2) mount API is supported on\n// the running kernel.\nvar HasNewMountAPI = gocompat.SyncOnceValue(func() bool {\n\t// All of the pieces of the new mount API we use (fsopen, fsconfig,\n\t// fsmount, open_tree) were added together in Linux 5.2[1,2], so we can\n\t// just check for one of the syscalls and the others should also be\n\t// available.\n\t//\n\t// Just try to use open_tree(2) to open a file without OPEN_TREE_CLONE.\n\t// This is equivalent to openat(2), but tells us if open_tree is\n\t// available (and thus all of the other basic new mount API syscalls).\n\t// open_tree(2) is most light-weight syscall to test here.\n\t//\n\t// [1]: merge commit 400913252d09\n\t// [2]: <https://lore.kernel.org/lkml/153754740781.17872.7869536526927736855.stgit@warthog.procyon.org.uk/>\n\tfd, err := unix.OpenTree(-int(unix.EBADF), \"/\", unix.OPEN_TREE_CLOEXEC)\n\tif err != nil {\n\t\treturn false\n\t}\n\t_ = unix.Close(fd)\n\n\t// RHEL 8 has a backport of fsopen(2) that appears to have some very\n\t// difficult to debug performance pathology. As such, it seems prudent to\n\t// simply reject pre-5.2 kernels.\n\tisNotBackport, _ := kernelversion.GreaterEqualThan(kernelversion.KernelVersion{5, 2})\n\treturn isNotBackport\n})\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/linux/openat2_linux.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage linux\n\nimport (\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat\"\n)\n\n// sawOpenat2Error stores whether we have seen an error from HasOpenat2. This\n// is a one-way toggle, so as soon as we see an error we \"lock\" into that mode.\n// We cannot use sync.OnceValue to store the success/fail state once because it\n// is possible for the program we are running in to apply a seccomp-bpf filter\n// and thus disable openat2 during execution.\nvar sawOpenat2Error gocompat.Bool\n\n// HasOpenat2 returns whether openat2(2) is supported on the running kernel.\nvar HasOpenat2 = func() bool {\n\tif sawOpenat2Error.Load() {\n\t\treturn false\n\t}\n\n\tfd, err := unix.Openat2(unix.AT_FDCWD, \".\", &unix.OpenHow{\n\t\tFlags:   unix.O_PATH | unix.O_CLOEXEC,\n\t\tResolve: unix.RESOLVE_NO_SYMLINKS | unix.RESOLVE_IN_ROOT,\n\t})\n\tif err != nil {\n\t\tsawOpenat2Error.Store(true) // doesn't matter if we race here\n\t\treturn false\n\t}\n\t_ = unix.Close(fd)\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/procfs/procfs_linux.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\n// Package procfs provides a safe API for operating on /proc on Linux. Note\n// that this is the *internal* procfs API, mainy needed due to Go's\n// restrictions on cyclic dependencies and its incredibly minimal visibility\n// system without making a separate internal/ package.\npackage procfs\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"runtime\"\n\t\"strconv\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/assert\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/fd\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/linux\"\n)\n\n// The kernel guarantees that the root inode of a procfs mount has an\n// f_type of PROC_SUPER_MAGIC and st_ino of PROC_ROOT_INO.\nconst (\n\tprocSuperMagic = 0x9fa0 // PROC_SUPER_MAGIC\n\tprocRootIno    = 1      // PROC_ROOT_INO\n)\n\n// verifyProcHandle checks that the handle is from a procfs filesystem.\n// Contrast this to [verifyProcRoot], which also verifies that the handle is\n// the root of a procfs mount.\nfunc verifyProcHandle(procHandle fd.Fd) error {\n\tif statfs, err := fd.Fstatfs(procHandle); err != nil {\n\t\treturn err\n\t} else if statfs.Type != procSuperMagic {\n\t\treturn fmt.Errorf(\"%w: incorrect procfs root filesystem type 0x%x\", errUnsafeProcfs, statfs.Type)\n\t}\n\treturn nil\n}\n\n// verifyProcRoot verifies that the handle is the root of a procfs filesystem.\n// Contrast this to [verifyProcHandle], which only verifies if the handle is\n// some file on procfs (regardless of what file it is).\nfunc verifyProcRoot(procRoot fd.Fd) error {\n\tif err := verifyProcHandle(procRoot); err != nil {\n\t\treturn err\n\t}\n\tif stat, err := fd.Fstat(procRoot); err != nil {\n\t\treturn err\n\t} else if stat.Ino != procRootIno {\n\t\treturn fmt.Errorf(\"%w: incorrect procfs root inode number %d\", errUnsafeProcfs, stat.Ino)\n\t}\n\treturn nil\n}\n\ntype procfsFeatures struct {\n\t// hasSubsetPid was added in Linux 5.8, along with hidepid=ptraceable (and\n\t// string-based hidepid= values). Before this patchset, it was not really\n\t// safe to try to modify procfs superblock flags because the superblock was\n\t// shared -- so if this feature is not available, **you should not set any\n\t// superblock flags**.\n\t//\n\t// 6814ef2d992a (\"proc: add option to mount only a pids subset\")\n\t// fa10fed30f25 (\"proc: allow to mount many instances of proc in one pid namespace\")\n\t// 24a71ce5c47f (\"proc: instantiate only pids that we can ptrace on 'hidepid=4' mount option\")\n\t// 1c6c4d112e81 (\"proc: use human-readable values for hidepid\")\n\t// 9ff7258575d5 (\"Merge branch 'proc-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace\")\n\thasSubsetPid bool\n}\n\nvar getProcfsFeatures = gocompat.SyncOnceValue(func() procfsFeatures {\n\tif !linux.HasNewMountAPI() {\n\t\treturn procfsFeatures{}\n\t}\n\tprocfsCtx, err := fd.Fsopen(\"proc\", unix.FSOPEN_CLOEXEC)\n\tif err != nil {\n\t\treturn procfsFeatures{}\n\t}\n\tdefer procfsCtx.Close() //nolint:errcheck // close failures aren't critical here\n\n\treturn procfsFeatures{\n\t\thasSubsetPid: unix.FsconfigSetString(int(procfsCtx.Fd()), \"subset\", \"pid\") == nil,\n\t}\n})\n\nfunc newPrivateProcMount(subset bool) (_ *Handle, Err error) {\n\tprocfsCtx, err := fd.Fsopen(\"proc\", unix.FSOPEN_CLOEXEC)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer procfsCtx.Close() //nolint:errcheck // close failures aren't critical here\n\n\tif subset && getProcfsFeatures().hasSubsetPid {\n\t\t// Try to configure hidepid=ptraceable,subset=pid if possible, but\n\t\t// ignore errors.\n\t\t_ = unix.FsconfigSetString(int(procfsCtx.Fd()), \"hidepid\", \"ptraceable\")\n\t\t_ = unix.FsconfigSetString(int(procfsCtx.Fd()), \"subset\", \"pid\")\n\t}\n\n\t// Get an actual handle.\n\tif err := unix.FsconfigCreate(int(procfsCtx.Fd())); err != nil {\n\t\treturn nil, os.NewSyscallError(\"fsconfig create procfs\", err)\n\t}\n\t// TODO: Output any information from the fscontext log to debug logs.\n\tprocRoot, err := fd.Fsmount(procfsCtx, unix.FSMOUNT_CLOEXEC, unix.MS_NODEV|unix.MS_NOEXEC|unix.MS_NOSUID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer func() {\n\t\tif Err != nil {\n\t\t\t_ = procRoot.Close()\n\t\t}\n\t}()\n\treturn newHandle(procRoot)\n}\n\nfunc clonePrivateProcMount() (_ *Handle, Err error) {\n\t// Try to make a clone without using AT_RECURSIVE if we can. If this works,\n\t// we can be sure there are no over-mounts and so if the root is valid then\n\t// we're golden. Otherwise, we have to deal with over-mounts.\n\tprocRoot, err := fd.OpenTree(nil, \"/proc\", unix.OPEN_TREE_CLONE)\n\tif err != nil || hookForcePrivateProcRootOpenTreeAtRecursive(procRoot) {\n\t\tprocRoot, err = fd.OpenTree(nil, \"/proc\", unix.OPEN_TREE_CLONE|unix.AT_RECURSIVE)\n\t}\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating a detached procfs clone: %w\", err)\n\t}\n\tdefer func() {\n\t\tif Err != nil {\n\t\t\t_ = procRoot.Close()\n\t\t}\n\t}()\n\treturn newHandle(procRoot)\n}\n\nfunc privateProcRoot(subset bool) (*Handle, error) {\n\tif !linux.HasNewMountAPI() || hookForceGetProcRootUnsafe() {\n\t\treturn nil, fmt.Errorf(\"new mount api: %w\", unix.ENOTSUP)\n\t}\n\t// Try to create a new procfs mount from scratch if we can. This ensures we\n\t// can get a procfs mount even if /proc is fake (for whatever reason).\n\tprocRoot, err := newPrivateProcMount(subset)\n\tif err != nil || hookForcePrivateProcRootOpenTree(procRoot) {\n\t\t// Try to clone /proc then...\n\t\tprocRoot, err = clonePrivateProcMount()\n\t}\n\treturn procRoot, err\n}\n\nfunc unsafeHostProcRoot() (_ *Handle, Err error) {\n\tprocRoot, err := os.OpenFile(\"/proc\", unix.O_PATH|unix.O_NOFOLLOW|unix.O_DIRECTORY|unix.O_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer func() {\n\t\tif Err != nil {\n\t\t\t_ = procRoot.Close()\n\t\t}\n\t}()\n\treturn newHandle(procRoot)\n}\n\n// Handle is a wrapper around an *os.File handle to \"/proc\", which can be used\n// to do further procfs-related operations in a safe way.\ntype Handle struct {\n\tInner fd.Fd\n\t// Does this handle have subset=pid set?\n\tisSubset bool\n}\n\nfunc newHandle(procRoot fd.Fd) (*Handle, error) {\n\tif err := verifyProcRoot(procRoot); err != nil {\n\t\t// This is only used in methods that\n\t\t_ = procRoot.Close()\n\t\treturn nil, err\n\t}\n\tproc := &Handle{Inner: procRoot}\n\t// With subset=pid we can be sure that /proc/uptime will not exist.\n\tif err := fd.Faccessat(proc.Inner, \"uptime\", unix.F_OK, unix.AT_SYMLINK_NOFOLLOW); err != nil {\n\t\tproc.isSubset = errors.Is(err, os.ErrNotExist)\n\t}\n\treturn proc, nil\n}\n\n// Close closes the underlying file for the Handle.\nfunc (proc *Handle) Close() error { return proc.Inner.Close() }\n\nvar getCachedProcRoot = gocompat.SyncOnceValue(func() *Handle {\n\tprocRoot, err := getProcRoot(true)\n\tif err != nil {\n\t\treturn nil // just don't cache if we see an error\n\t}\n\tif !procRoot.isSubset {\n\t\treturn nil // we only cache verified subset=pid handles\n\t}\n\n\t// Disarm (*Handle).Close() to stop someone from accidentally closing\n\t// the global handle.\n\tprocRoot.Inner = fd.NopCloser(procRoot.Inner)\n\treturn procRoot\n})\n\n// OpenProcRoot tries to open a \"safer\" handle to \"/proc\".\nfunc OpenProcRoot() (*Handle, error) {\n\tif proc := getCachedProcRoot(); proc != nil {\n\t\treturn proc, nil\n\t}\n\treturn getProcRoot(true)\n}\n\n// OpenUnsafeProcRoot opens a handle to \"/proc\" without any overmounts or\n// masked paths (but also without \"subset=pid\").\nfunc OpenUnsafeProcRoot() (*Handle, error) { return getProcRoot(false) }\n\nfunc getProcRoot(subset bool) (*Handle, error) {\n\tproc, err := privateProcRoot(subset)\n\tif err != nil {\n\t\t// Fall back to using a /proc handle if making a private mount failed.\n\t\t// If we have openat2, at least we can avoid some kinds of over-mount\n\t\t// attacks, but without openat2 there's not much we can do.\n\t\tproc, err = unsafeHostProcRoot()\n\t}\n\treturn proc, err\n}\n\nvar hasProcThreadSelf = gocompat.SyncOnceValue(func() bool {\n\treturn unix.Access(\"/proc/thread-self/\", unix.F_OK) == nil\n})\n\nvar errUnsafeProcfs = errors.New(\"unsafe procfs detected\")\n\n// lookup is a very minimal wrapper around [procfsLookupInRoot] which is\n// intended to be called from the external API.\nfunc (proc *Handle) lookup(subpath string) (*os.File, error) {\n\thandle, err := procfsLookupInRoot(proc.Inner, subpath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn handle, nil\n}\n\n// procfsBase is an enum indicating the prefix of a subpath in operations\n// involving [Handle]s.\ntype procfsBase string\n\nconst (\n\t// ProcRoot refers to the root of the procfs (i.e., \"/proc/<subpath>\").\n\tProcRoot procfsBase = \"/proc\"\n\t// ProcSelf refers to the current process' subdirectory (i.e.,\n\t// \"/proc/self/<subpath>\").\n\tProcSelf procfsBase = \"/proc/self\"\n\t// ProcThreadSelf refers to the current thread's subdirectory (i.e.,\n\t// \"/proc/thread-self/<subpath>\"). In multi-threaded programs (i.e., all Go\n\t// programs) where one thread has a different CLONE_FS, it is possible for\n\t// \"/proc/self\" to point the wrong thread and so \"/proc/thread-self\" may be\n\t// necessary. Note that on pre-3.17 kernels, \"/proc/thread-self\" doesn't\n\t// exist and so a fallback will be used in that case.\n\tProcThreadSelf procfsBase = \"/proc/thread-self\"\n\t// TODO: Switch to an interface setup so we can have a more type-safe\n\t// version of ProcPid and remove the need to worry about invalid string\n\t// values.\n)\n\n// prefix returns a prefix that can be used with the given [Handle].\nfunc (base procfsBase) prefix(proc *Handle) (string, error) {\n\tswitch base {\n\tcase ProcRoot:\n\t\treturn \".\", nil\n\tcase ProcSelf:\n\t\treturn \"self\", nil\n\tcase ProcThreadSelf:\n\t\tthreadSelf := \"thread-self\"\n\t\tif !hasProcThreadSelf() || hookForceProcSelfTask() {\n\t\t\t// Pre-3.17 kernels don't have /proc/thread-self, so do it\n\t\t\t// manually.\n\t\t\tthreadSelf = \"self/task/\" + strconv.Itoa(unix.Gettid())\n\t\t\tif err := fd.Faccessat(proc.Inner, threadSelf, unix.F_OK, unix.AT_SYMLINK_NOFOLLOW); err != nil || hookForceProcSelf() {\n\t\t\t\t// In this case, we running in a pid namespace that doesn't\n\t\t\t\t// match the /proc mount we have. This can happen inside runc.\n\t\t\t\t//\n\t\t\t\t// Unfortunately, there is no nice way to get the correct TID\n\t\t\t\t// to use here because of the age of the kernel, so we have to\n\t\t\t\t// just use /proc/self and hope that it works.\n\t\t\t\tthreadSelf = \"self\"\n\t\t\t}\n\t\t}\n\t\treturn threadSelf, nil\n\t}\n\treturn \"\", fmt.Errorf(\"invalid procfs base %q\", base)\n}\n\n// ProcThreadSelfCloser is a callback that needs to be called when you are done\n// operating on an [os.File] fetched using [ProcThreadSelf].\n//\n// [os.File]: https://pkg.go.dev/os#File\ntype ProcThreadSelfCloser func()\n\n// open is the core lookup operation for [Handle]. It returns a handle to\n// \"/proc/<base>/<subpath>\". If the returned [ProcThreadSelfCloser] is non-nil,\n// you should call it after you are done interacting with the returned handle.\n//\n// In general you should use prefer to use the other helpers, as they remove\n// the need to interact with [procfsBase] and do not return a nil\n// [ProcThreadSelfCloser] for [procfsBase] values other than [ProcThreadSelf]\n// where it is necessary.\nfunc (proc *Handle) open(base procfsBase, subpath string) (_ *os.File, closer ProcThreadSelfCloser, Err error) {\n\tprefix, err := base.prefix(proc)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tsubpath = prefix + \"/\" + subpath\n\n\tswitch base {\n\tcase ProcRoot:\n\t\tfile, err := proc.lookup(subpath)\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t// The Handle handle in use might be a subset=pid one, which will\n\t\t\t// result in spurious errors. In this case, just open a temporary\n\t\t\t// unmasked procfs handle for this operation.\n\t\t\tproc, err2 := OpenUnsafeProcRoot() // !subset=pid\n\t\t\tif err2 != nil {\n\t\t\t\treturn nil, nil, err\n\t\t\t}\n\t\t\tdefer proc.Close() //nolint:errcheck // close failures aren't critical here\n\n\t\t\tfile, err = proc.lookup(subpath)\n\t\t}\n\t\treturn file, nil, err\n\n\tcase ProcSelf:\n\t\tfile, err := proc.lookup(subpath)\n\t\treturn file, nil, err\n\n\tcase ProcThreadSelf:\n\t\t// We need to lock our thread until the caller is done with the handle\n\t\t// because between getting the handle and using it we could get\n\t\t// interrupted by the Go runtime and hit the case where the underlying\n\t\t// thread is swapped out and the original thread is killed, resulting\n\t\t// in pull-your-hair-out-hard-to-debug issues in the caller.\n\t\truntime.LockOSThread()\n\t\tdefer func() {\n\t\t\tif Err != nil {\n\t\t\t\truntime.UnlockOSThread()\n\t\t\t\tcloser = nil\n\t\t\t}\n\t\t}()\n\n\t\tfile, err := proc.lookup(subpath)\n\t\treturn file, runtime.UnlockOSThread, err\n\t}\n\t// should never be reached\n\treturn nil, nil, fmt.Errorf(\"[internal error] invalid procfs base %q\", base)\n}\n\n// OpenThreadSelf returns a handle to \"/proc/thread-self/<subpath>\" (or an\n// equivalent handle on older kernels where \"/proc/thread-self\" doesn't exist).\n// Once finished with the handle, you must call the returned closer function\n// (runtime.UnlockOSThread). You must not pass the returned *os.File to other\n// Go threads or use the handle after calling the closer.\nfunc (proc *Handle) OpenThreadSelf(subpath string) (_ *os.File, _ ProcThreadSelfCloser, Err error) {\n\treturn proc.open(ProcThreadSelf, subpath)\n}\n\n// OpenSelf returns a handle to /proc/self/<subpath>.\nfunc (proc *Handle) OpenSelf(subpath string) (*os.File, error) {\n\tfile, closer, err := proc.open(ProcSelf, subpath)\n\tassert.Assert(closer == nil, \"closer for ProcSelf must be nil\")\n\treturn file, err\n}\n\n// OpenRoot returns a handle to /proc/<subpath>.\nfunc (proc *Handle) OpenRoot(subpath string) (*os.File, error) {\n\tfile, closer, err := proc.open(ProcRoot, subpath)\n\tassert.Assert(closer == nil, \"closer for ProcRoot must be nil\")\n\treturn file, err\n}\n\n// OpenPid returns a handle to /proc/$pid/<subpath> (pid can be a pid or tid).\n// This is mainly intended for usage when operating on other processes.\nfunc (proc *Handle) OpenPid(pid int, subpath string) (*os.File, error) {\n\treturn proc.OpenRoot(strconv.Itoa(pid) + \"/\" + subpath)\n}\n\n// checkSubpathOvermount checks if the dirfd and path combination is on the\n// same mount as the given root.\nfunc checkSubpathOvermount(root, dir fd.Fd, path string) error {\n\t// Get the mntID of our procfs handle.\n\texpectedMountID, err := fd.GetMountID(root, \"\")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"get root mount id: %w\", err)\n\t}\n\t// Get the mntID of the target magic-link.\n\tgotMountID, err := fd.GetMountID(dir, path)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"get subpath mount id: %w\", err)\n\t}\n\t// As long as the directory mount is alive, even with wrapping mount IDs,\n\t// we would expect to see a different mount ID here. (Of course, if we're\n\t// using unsafeHostProcRoot() then an attaker could change this after we\n\t// did this check.)\n\tif expectedMountID != gotMountID {\n\t\treturn fmt.Errorf(\"%w: subpath %s/%s has an overmount obscuring the real path (mount ids do not match %d != %d)\",\n\t\t\terrUnsafeProcfs, dir.Name(), path, expectedMountID, gotMountID)\n\t}\n\treturn nil\n}\n\n// Readlink performs a readlink operation on \"/proc/<base>/<subpath>\" in a way\n// that should be free from race attacks. This is most commonly used to get the\n// real path of a file by looking at \"/proc/self/fd/$n\", with the same safety\n// protections as [Open] (as well as some additional checks against\n// overmounts).\nfunc (proc *Handle) Readlink(base procfsBase, subpath string) (string, error) {\n\tlink, closer, err := proc.open(base, subpath)\n\tif closer != nil {\n\t\tdefer closer()\n\t}\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"get safe %s/%s handle: %w\", base, subpath, err)\n\t}\n\tdefer link.Close() //nolint:errcheck // close failures aren't critical here\n\n\t// Try to detect if there is a mount on top of the magic-link. This should\n\t// be safe in general (a mount on top of the path afterwards would not\n\t// affect the handle itself) and will definitely be safe if we are using\n\t// privateProcRoot() (at least since Linux 5.12[1], when anonymous mount\n\t// namespaces were completely isolated from external mounts including mount\n\t// propagation events).\n\t//\n\t// [1]: Linux commit ee2e3f50629f (\"mount: fix mounting of detached mounts\n\t// onto targets that reside on shared mounts\").\n\tif err := checkSubpathOvermount(proc.Inner, link, \"\"); err != nil {\n\t\treturn \"\", fmt.Errorf(\"check safety of %s/%s magiclink: %w\", base, subpath, err)\n\t}\n\n\t// readlinkat implies AT_EMPTY_PATH since Linux 2.6.39. See Linux commit\n\t// 65cfc6722361 (\"readlinkat(), fchownat() and fstatat() with empty\n\t// relative pathnames\").\n\treturn fd.Readlinkat(link, \"\")\n}\n\n// ProcSelfFdReadlink gets the real path of the given file by looking at\n// readlink(/proc/thread-self/fd/$n).\n//\n// This is just a wrapper around [Handle.Readlink].\nfunc ProcSelfFdReadlink(fd fd.Fd) (string, error) {\n\tprocRoot, err := OpenProcRoot() // subset=pid\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer procRoot.Close() //nolint:errcheck // close failures aren't critical here\n\n\tfdPath := \"fd/\" + strconv.Itoa(int(fd.Fd()))\n\treturn procRoot.Readlink(ProcThreadSelf, fdPath)\n}\n\n// CheckProcSelfFdPath returns whether the given file handle matches the\n// expected path. (This is inherently racy.)\nfunc CheckProcSelfFdPath(path string, file fd.Fd) error {\n\tif err := fd.IsDeadInode(file); err != nil {\n\t\treturn err\n\t}\n\tactualPath, err := ProcSelfFdReadlink(file)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"get path of handle: %w\", err)\n\t}\n\tif actualPath != path {\n\t\treturn fmt.Errorf(\"%w: handle path %q doesn't match expected path %q\", internal.ErrPossibleBreakout, actualPath, path)\n\t}\n\treturn nil\n}\n\n// ReopenFd takes an existing file descriptor and \"re-opens\" it through\n// /proc/thread-self/fd/<fd>. This allows for O_PATH file descriptors to be\n// upgraded to regular file descriptors, as well as changing the open mode of a\n// regular file descriptor. Some filesystems have unique handling of open(2)\n// which make this incredibly useful (such as /dev/ptmx).\nfunc ReopenFd(handle fd.Fd, flags int) (*os.File, error) {\n\tprocRoot, err := OpenProcRoot() // subset=pid\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer procRoot.Close() //nolint:errcheck // close failures aren't critical here\n\n\t// We can't operate on /proc/thread-self/fd/$n directly when doing a\n\t// re-open, so we need to open /proc/thread-self/fd and then open a single\n\t// final component.\n\tprocFdDir, closer, err := procRoot.OpenThreadSelf(\"fd/\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get safe /proc/thread-self/fd handle: %w\", err)\n\t}\n\tdefer procFdDir.Close() //nolint:errcheck // close failures aren't critical here\n\tdefer closer()\n\n\t// Try to detect if there is a mount on top of the magic-link we are about\n\t// to open. If we are using unsafeHostProcRoot(), this could change after\n\t// we check it (and there's nothing we can do about that) but for\n\t// privateProcRoot() this should be guaranteed to be safe (at least since\n\t// Linux 5.12[1], when anonymous mount namespaces were completely isolated\n\t// from external mounts including mount propagation events).\n\t//\n\t// [1]: Linux commit ee2e3f50629f (\"mount: fix mounting of detached mounts\n\t// onto targets that reside on shared mounts\").\n\tfdStr := strconv.Itoa(int(handle.Fd()))\n\tif err := checkSubpathOvermount(procRoot.Inner, procFdDir, fdStr); err != nil {\n\t\treturn nil, fmt.Errorf(\"check safety of /proc/thread-self/fd/%s magiclink: %w\", fdStr, err)\n\t}\n\n\tflags |= unix.O_CLOEXEC\n\t// Rather than just wrapping fd.Openat, open-code it so we can copy\n\t// handle.Name().\n\treopenFd, err := unix.Openat(int(procFdDir.Fd()), fdStr, flags, 0)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"reopen fd %d: %w\", handle.Fd(), err)\n\t}\n\treturn os.NewFile(uintptr(reopenFd), handle.Name()), nil\n}\n\n// Test hooks used in the procfs tests to verify that the fallback logic works.\n// See testing_mocks_linux_test.go and procfs_linux_test.go for more details.\nvar (\n\thookForcePrivateProcRootOpenTree            = hookDummyFile\n\thookForcePrivateProcRootOpenTreeAtRecursive = hookDummyFile\n\thookForceGetProcRootUnsafe                  = hookDummy\n\n\thookForceProcSelfTask = hookDummy\n\thookForceProcSelf     = hookDummy\n)\n\nfunc hookDummy() bool                { return false }\nfunc hookDummyFile(_ io.Closer) bool { return false }\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/internal/procfs/procfs_lookup_linux.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\n// This code is adapted to be a minimal version of the libpathrs proc resolver\n// <https://github.com/opensuse/libpathrs/blob/v0.1.3/src/resolvers/procfs.rs>.\n// As we only need O_PATH|O_NOFOLLOW support, this is not too much to port.\n\npackage procfs\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/cyphar/filepath-securejoin/internal/consts\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/fd\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/linux\"\n)\n\n// procfsLookupInRoot is a stripped down version of completeLookupInRoot,\n// entirely designed to support the very small set of features necessary to\n// make procfs handling work. Unlike completeLookupInRoot, we always have\n// O_PATH|O_NOFOLLOW behaviour for trailing symlinks.\n//\n// The main restrictions are:\n//\n//   - \"..\" is not supported (as it requires either os.Root-style replays,\n//     which is more bug-prone; or procfs verification, which is not possible\n//     due to re-entrancy issues).\n//   - Absolute symlinks for the same reason (and all absolute symlinks in\n//     procfs are magic-links, which we want to skip anyway).\n//   - If statx is supported (checkSymlinkOvermount), any mount-point crossings\n//     (which is the main attack of concern against /proc).\n//   - Partial lookups are not supported, so the symlink stack is not needed.\n//   - Trailing slash special handling is not necessary in most cases (if we\n//     operating on procfs, it's usually with programmer-controlled strings\n//     that will then be re-opened), so we skip it since whatever re-opens it\n//     can deal with it. It's a creature comfort anyway.\n//\n// If the system supports openat2(), this is implemented using equivalent flags\n// (RESOLVE_BENEATH | RESOLVE_NO_XDEV | RESOLVE_NO_MAGICLINKS).\nfunc procfsLookupInRoot(procRoot fd.Fd, unsafePath string) (Handle *os.File, _ error) {\n\tunsafePath = filepath.ToSlash(unsafePath) // noop\n\n\t// Make sure that an empty unsafe path still returns something sane, even\n\t// with openat2 (which doesn't have AT_EMPTY_PATH semantics yet).\n\tif unsafePath == \"\" {\n\t\tunsafePath = \".\"\n\t}\n\n\t// This is already checked by getProcRoot, but make sure here since the\n\t// core security of this lookup is based on this assumption.\n\tif err := verifyProcRoot(procRoot); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif linux.HasOpenat2() {\n\t\t// We prefer being able to use RESOLVE_NO_XDEV if we can, to be\n\t\t// absolutely sure we are operating on a clean /proc handle that\n\t\t// doesn't have any cheeky overmounts that could trick us (including\n\t\t// symlink mounts on top of /proc/thread-self). RESOLVE_BENEATH isn't\n\t\t// strictly needed, but just use it since we have it.\n\t\t//\n\t\t// NOTE: /proc/self is technically a magic-link (the contents of the\n\t\t//       symlink are generated dynamically), but it doesn't use\n\t\t//       nd_jump_link() so RESOLVE_NO_MAGICLINKS allows it.\n\t\t//\n\t\t// TODO: It would be nice to have RESOLVE_NO_DOTDOT, purely for\n\t\t//       self-consistency with the backup O_PATH resolver.\n\t\thandle, err := fd.Openat2(procRoot, unsafePath, &unix.OpenHow{\n\t\t\tFlags:   unix.O_PATH | unix.O_NOFOLLOW | unix.O_CLOEXEC,\n\t\t\tResolve: unix.RESOLVE_BENEATH | unix.RESOLVE_NO_XDEV | unix.RESOLVE_NO_MAGICLINKS,\n\t\t})\n\t\tif err != nil {\n\t\t\t// TODO: Once we bump the minimum Go version to 1.20, we can use\n\t\t\t// multiple %w verbs for this wrapping. For now we need to use a\n\t\t\t// compatibility shim for older Go versions.\n\t\t\t// err = fmt.Errorf(\"%w: %w\", errUnsafeProcfs, err)\n\t\t\treturn nil, gocompat.WrapBaseError(err, errUnsafeProcfs)\n\t\t}\n\t\treturn handle, nil\n\t}\n\n\t// To mirror openat2(RESOLVE_BENEATH), we need to return an error if the\n\t// path is absolute.\n\tif path.IsAbs(unsafePath) {\n\t\treturn nil, fmt.Errorf(\"%w: cannot resolve absolute paths in procfs resolver\", internal.ErrPossibleBreakout)\n\t}\n\n\tcurrentDir, err := fd.Dup(procRoot)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"clone root fd: %w\", err)\n\t}\n\tdefer func() {\n\t\t// If a handle is not returned, close the internal handle.\n\t\tif Handle == nil {\n\t\t\t_ = currentDir.Close()\n\t\t}\n\t}()\n\n\tvar (\n\t\tlinksWalked   int\n\t\tcurrentPath   string\n\t\tremainingPath = unsafePath\n\t)\n\tfor remainingPath != \"\" {\n\t\t// Get the next path component.\n\t\tvar part string\n\t\tif i := strings.IndexByte(remainingPath, '/'); i == -1 {\n\t\t\tpart, remainingPath = remainingPath, \"\"\n\t\t} else {\n\t\t\tpart, remainingPath = remainingPath[:i], remainingPath[i+1:]\n\t\t}\n\t\tif part == \"\" {\n\t\t\t// no-op component, but treat it the same as \".\"\n\t\t\tpart = \".\"\n\t\t}\n\t\tif part == \"..\" {\n\t\t\t// not permitted\n\t\t\treturn nil, fmt.Errorf(\"%w: cannot walk into '..' in procfs resolver\", internal.ErrPossibleBreakout)\n\t\t}\n\n\t\t// Apply the component lexically to the path we are building.\n\t\t// currentPath does not contain any symlinks, and we are lexically\n\t\t// dealing with a single component, so it's okay to do a filepath.Clean\n\t\t// here. (Not to mention that \"..\" isn't allowed.)\n\t\tnextPath := path.Join(\"/\", currentPath, part)\n\t\t// If we logically hit the root, just clone the root rather than\n\t\t// opening the part and doing all of the other checks.\n\t\tif nextPath == \"/\" {\n\t\t\t// Jump to root.\n\t\t\trootClone, err := fd.Dup(procRoot)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"clone root fd: %w\", err)\n\t\t\t}\n\t\t\t_ = currentDir.Close()\n\t\t\tcurrentDir = rootClone\n\t\t\tcurrentPath = nextPath\n\t\t\tcontinue\n\t\t}\n\n\t\t// Try to open the next component.\n\t\tnextDir, err := fd.Openat(currentDir, part, unix.O_PATH|unix.O_NOFOLLOW|unix.O_CLOEXEC, 0)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Make sure we are still on procfs and haven't crossed mounts.\n\t\tif err := verifyProcHandle(nextDir); err != nil {\n\t\t\t_ = nextDir.Close()\n\t\t\treturn nil, fmt.Errorf(\"check %q component is on procfs: %w\", part, err)\n\t\t}\n\t\tif err := checkSubpathOvermount(procRoot, nextDir, \"\"); err != nil {\n\t\t\t_ = nextDir.Close()\n\t\t\treturn nil, fmt.Errorf(\"check %q component is not overmounted: %w\", part, err)\n\t\t}\n\n\t\t// We are emulating O_PATH|O_NOFOLLOW, so we only need to traverse into\n\t\t// trailing symlinks if we are not the final component. Otherwise we\n\t\t// can just return the currentDir.\n\t\tif remainingPath != \"\" {\n\t\t\tst, err := nextDir.Stat()\n\t\t\tif err != nil {\n\t\t\t\t_ = nextDir.Close()\n\t\t\t\treturn nil, fmt.Errorf(\"stat component %q: %w\", part, err)\n\t\t\t}\n\n\t\t\tif st.Mode()&os.ModeType == os.ModeSymlink {\n\t\t\t\t// readlinkat implies AT_EMPTY_PATH since Linux 2.6.39. See\n\t\t\t\t// Linux commit 65cfc6722361 (\"readlinkat(), fchownat() and\n\t\t\t\t// fstatat() with empty relative pathnames\").\n\t\t\t\tlinkDest, err := fd.Readlinkat(nextDir, \"\")\n\t\t\t\t// We don't need the handle anymore.\n\t\t\t\t_ = nextDir.Close()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\n\t\t\t\tlinksWalked++\n\t\t\t\tif linksWalked > consts.MaxSymlinkLimit {\n\t\t\t\t\treturn nil, &os.PathError{Op: \"securejoin.procfsLookupInRoot\", Path: \"/proc/\" + unsafePath, Err: unix.ELOOP}\n\t\t\t\t}\n\n\t\t\t\t// Update our logical remaining path.\n\t\t\t\tremainingPath = linkDest + \"/\" + remainingPath\n\t\t\t\t// Absolute symlinks are probably magiclinks, we reject them.\n\t\t\t\tif path.IsAbs(linkDest) {\n\t\t\t\t\treturn nil, fmt.Errorf(\"%w: cannot jump to / in procfs resolver -- possible magiclink\", internal.ErrPossibleBreakout)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// Walk into the next component.\n\t\t_ = currentDir.Close()\n\t\tcurrentDir = nextDir\n\t\tcurrentPath = nextPath\n\t}\n\n\t// One final sanity-check.\n\tif err := verifyProcHandle(currentDir); err != nil {\n\t\treturn nil, fmt.Errorf(\"check final handle is on procfs: %w\", err)\n\t}\n\tif err := checkSubpathOvermount(procRoot, currentDir, \"\"); err != nil {\n\t\treturn nil, fmt.Errorf(\"check final handle is not overmounted: %w\", err)\n\t}\n\treturn currentDir, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/mkdir.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage pathrs\n\nimport (\n\t\"os\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// MkdirAll is a race-safe alternative to the [os.MkdirAll] function,\n// where the new directory is guaranteed to be within the root directory (if an\n// attacker can move directories from inside the root to outside the root, the\n// created directory tree might be outside of the root but the key constraint\n// is that at no point will we walk outside of the directory tree we are\n// creating).\n//\n// Effectively, MkdirAll(root, unsafePath, mode) is equivalent to\n//\n//\tpath, _ := securejoin.SecureJoin(root, unsafePath)\n//\terr := os.MkdirAll(path, mode)\n//\n// But is much safer. The above implementation is unsafe because if an attacker\n// can modify the filesystem tree between [SecureJoin] and [os.MkdirAll], it is\n// possible for MkdirAll to resolve unsafe symlink components and create\n// directories outside of the root.\n//\n// If you plan to open the directory after you have created it or want to use\n// an open directory handle as the root, you should use [MkdirAllHandle] instead.\n// This function is a wrapper around [MkdirAllHandle].\n//\n// [SecureJoin]: https://pkg.go.dev/github.com/cyphar/filepath-securejoin#SecureJoin\nfunc MkdirAll(root, unsafePath string, mode os.FileMode) error {\n\trootDir, err := os.OpenFile(root, unix.O_PATH|unix.O_DIRECTORY|unix.O_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer rootDir.Close() //nolint:errcheck // close failures aren't critical here\n\n\tf, err := MkdirAllHandle(rootDir, unsafePath, mode)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_ = f.Close()\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/mkdir_libpathrs.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build libpathrs\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage pathrs\n\nimport (\n\t\"os\"\n\n\t\"cyphar.com/go-pathrs\"\n)\n\n// MkdirAllHandle is equivalent to [MkdirAll], except that it is safer to use\n// in two respects:\n//\n//   - The caller provides the root directory as an *[os.File] (preferably O_PATH)\n//     handle. This means that the caller can be sure which root directory is\n//     being used. Note that this can be emulated by using /proc/self/fd/... as\n//     the root path with [os.MkdirAll].\n//\n//   - Once all of the directories have been created, an *[os.File] O_PATH handle\n//     to the directory at unsafePath is returned to the caller. This is done in\n//     an effectively-race-free way (an attacker would only be able to swap the\n//     final directory component), which is not possible to emulate with\n//     [MkdirAll].\n//\n// In addition, the returned handle is obtained far more efficiently than doing\n// a brand new lookup of unsafePath (such as with [SecureJoin] or openat2) after\n// doing [MkdirAll]. If you intend to open the directory after creating it, you\n// should use MkdirAllHandle.\n//\n// [SecureJoin]: https://pkg.go.dev/github.com/cyphar/filepath-securejoin#SecureJoin\nfunc MkdirAllHandle(root *os.File, unsafePath string, mode os.FileMode) (*os.File, error) {\n\trootRef, err := pathrs.RootFromFile(root)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer rootRef.Close() //nolint:errcheck // close failures aren't critical here\n\n\thandle, err := rootRef.MkdirAll(unsafePath, mode)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn handle.IntoFile(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/mkdir_purego.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux && !libpathrs\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage pathrs\n\nimport (\n\t\"os\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gopathrs\"\n)\n\n// MkdirAllHandle is equivalent to [MkdirAll], except that it is safer to use\n// in two respects:\n//\n//   - The caller provides the root directory as an *[os.File] (preferably O_PATH)\n//     handle. This means that the caller can be sure which root directory is\n//     being used. Note that this can be emulated by using /proc/self/fd/... as\n//     the root path with [os.MkdirAll].\n//\n//   - Once all of the directories have been created, an *[os.File] O_PATH handle\n//     to the directory at unsafePath is returned to the caller. This is done in\n//     an effectively-race-free way (an attacker would only be able to swap the\n//     final directory component), which is not possible to emulate with\n//     [MkdirAll].\n//\n// In addition, the returned handle is obtained far more efficiently than doing\n// a brand new lookup of unsafePath (such as with [SecureJoin] or openat2) after\n// doing [MkdirAll]. If you intend to open the directory after creating it, you\n// should use MkdirAllHandle.\n//\n// [SecureJoin]: https://pkg.go.dev/github.com/cyphar/filepath-securejoin#SecureJoin\nfunc MkdirAllHandle(root *os.File, unsafePath string, mode os.FileMode) (*os.File, error) {\n\treturn gopathrs.MkdirAllHandle(root, unsafePath, mode)\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/open.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage pathrs\n\nimport (\n\t\"os\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// OpenInRoot safely opens the provided unsafePath within the root.\n// Effectively, OpenInRoot(root, unsafePath) is equivalent to\n//\n//\tpath, _ := securejoin.SecureJoin(root, unsafePath)\n//\thandle, err := os.OpenFile(path, unix.O_PATH|unix.O_CLOEXEC)\n//\n// But is much safer. The above implementation is unsafe because if an attacker\n// can modify the filesystem tree between [SecureJoin] and [os.OpenFile], it is\n// possible for the returned file to be outside of the root.\n//\n// Note that the returned handle is an O_PATH handle, meaning that only a very\n// limited set of operations will work on the handle. This is done to avoid\n// accidentally opening an untrusted file that could cause issues (such as a\n// disconnected TTY that could cause a DoS, or some other issue). In order to\n// use the returned handle, you can \"upgrade\" it to a proper handle using\n// [Reopen].\n//\n// [SecureJoin]: https://pkg.go.dev/github.com/cyphar/filepath-securejoin#SecureJoin\nfunc OpenInRoot(root, unsafePath string) (*os.File, error) {\n\trootDir, err := os.OpenFile(root, unix.O_PATH|unix.O_DIRECTORY|unix.O_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer rootDir.Close() //nolint:errcheck // close failures aren't critical here\n\treturn OpenatInRoot(rootDir, unsafePath)\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/open_libpathrs.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build libpathrs\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage pathrs\n\nimport (\n\t\"os\"\n\n\t\"cyphar.com/go-pathrs\"\n)\n\n// OpenatInRoot is equivalent to [OpenInRoot], except that the root is provided\n// using an *[os.File] handle, to ensure that the correct root directory is used.\nfunc OpenatInRoot(root *os.File, unsafePath string) (*os.File, error) {\n\trootRef, err := pathrs.RootFromFile(root)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer rootRef.Close() //nolint:errcheck // close failures aren't critical here\n\n\thandle, err := rootRef.Resolve(unsafePath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn handle.IntoFile(), nil\n}\n\n// Reopen takes an *[os.File] handle and re-opens it through /proc/self/fd.\n// Reopen(file, flags) is effectively equivalent to\n//\n//\tfdPath := fmt.Sprintf(\"/proc/self/fd/%d\", file.Fd())\n//\tos.OpenFile(fdPath, flags|unix.O_CLOEXEC)\n//\n// But with some extra hardenings to ensure that we are not tricked by a\n// maliciously-configured /proc mount. While this attack scenario is not\n// common, in container runtimes it is possible for higher-level runtimes to be\n// tricked into configuring an unsafe /proc that can be used to attack file\n// operations. See [CVE-2019-19921] for more details.\n//\n// [CVE-2019-19921]: https://github.com/advisories/GHSA-fh74-hm69-rqjw\nfunc Reopen(file *os.File, flags int) (*os.File, error) {\n\thandle, err := pathrs.HandleFromFile(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer handle.Close() //nolint:errcheck // close failures aren't critical here\n\n\treturn handle.OpenFile(flags)\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/open_purego.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux && !libpathrs\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\npackage pathrs\n\nimport (\n\t\"os\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/gopathrs\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/procfs\"\n)\n\n// OpenatInRoot is equivalent to [OpenInRoot], except that the root is provided\n// using an *[os.File] handle, to ensure that the correct root directory is used.\nfunc OpenatInRoot(root *os.File, unsafePath string) (*os.File, error) {\n\treturn gopathrs.OpenatInRoot(root, unsafePath)\n}\n\n// Reopen takes an *[os.File] handle and re-opens it through /proc/self/fd.\n// Reopen(file, flags) is effectively equivalent to\n//\n//\tfdPath := fmt.Sprintf(\"/proc/self/fd/%d\", file.Fd())\n//\tos.OpenFile(fdPath, flags|unix.O_CLOEXEC)\n//\n// But with some extra hardenings to ensure that we are not tricked by a\n// maliciously-configured /proc mount. While this attack scenario is not\n// common, in container runtimes it is possible for higher-level runtimes to be\n// tricked into configuring an unsafe /proc that can be used to attack file\n// operations. See [CVE-2019-19921] for more details.\n//\n// [CVE-2019-19921]: https://github.com/advisories/GHSA-fh74-hm69-rqjw\nfunc Reopen(handle *os.File, flags int) (*os.File, error) {\n\treturn procfs.ReopenFd(handle, flags)\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/procfs/procfs_libpathrs.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build libpathrs\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\n// Package procfs provides a safe API for operating on /proc on Linux.\npackage procfs\n\nimport (\n\t\"os\"\n\t\"strconv\"\n\n\t\"cyphar.com/go-pathrs/procfs\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// ProcThreadSelfCloser is a callback that needs to be called when you are done\n// operating on an [os.File] fetched using [Handle.OpenThreadSelf].\n//\n// [os.File]: https://pkg.go.dev/os#File\ntype ProcThreadSelfCloser = procfs.ThreadCloser\n\n// Handle is a wrapper around an *os.File handle to \"/proc\", which can be used\n// to do further procfs-related operations in a safe way.\ntype Handle struct {\n\tinner *procfs.Handle\n}\n\n// Close close the resources associated with this [Handle]. Note that if this\n// [Handle] was created with [OpenProcRoot], on some kernels the underlying\n// procfs handle is cached and so this Close operation may be a no-op. However,\n// you should always call Close on [Handle]s once you are done with them.\nfunc (proc *Handle) Close() error { return proc.inner.Close() }\n\n// OpenProcRoot tries to open a \"safer\" handle to \"/proc\" (i.e., one with the\n// \"subset=pid\" mount option applied, available from Linux 5.8). Unless you\n// plan to do many [Handle.OpenRoot] operations, users should prefer to use\n// this over [OpenUnsafeProcRoot] which is far more dangerous to keep open.\n//\n// If a safe handle cannot be opened, OpenProcRoot will fall back to opening a\n// regular \"/proc\" handle.\n//\n// Note that using [Handle.OpenRoot] will still work with handles returned by\n// this function. If a subpath cannot be operated on with a safe \"/proc\"\n// handle, then [OpenUnsafeProcRoot] will be called internally and a temporary\n// unsafe handle will be used.\nfunc OpenProcRoot() (*Handle, error) {\n\tproc, err := procfs.Open()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Handle{inner: proc}, nil\n}\n\n// OpenUnsafeProcRoot opens a handle to \"/proc\" without any overmounts or\n// masked paths. You must be extremely careful to make sure this handle is\n// never leaked to a container and that you program cannot be tricked into\n// writing to arbitrary paths within it.\n//\n// This is not necessary if you just wish to use [Handle.OpenRoot], as handles\n// returned by [OpenProcRoot] will fall back to using a *temporary* unsafe\n// handle in that case. You should only really use this if you need to do many\n// operations with [Handle.OpenRoot] and the performance overhead of making\n// many procfs handles is an issue. If you do use OpenUnsafeProcRoot, you\n// should make sure to close the handle as soon as possible to avoid\n// known-fd-number attacks.\nfunc OpenUnsafeProcRoot() (*Handle, error) {\n\tproc, err := procfs.Open(procfs.UnmaskedProcRoot)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Handle{inner: proc}, nil\n}\n\n// OpenThreadSelf returns a handle to \"/proc/thread-self/<subpath>\" (or an\n// equivalent handle on older kernels where \"/proc/thread-self\" doesn't exist).\n// Once finished with the handle, you must call the returned closer function\n// ([runtime.UnlockOSThread]). You must not pass the returned *os.File to other\n// Go threads or use the handle after calling the closer.\n//\n// [runtime.UnlockOSThread]: https://pkg.go.dev/runtime#UnlockOSThread\nfunc (proc *Handle) OpenThreadSelf(subpath string) (*os.File, ProcThreadSelfCloser, error) {\n\treturn proc.inner.OpenThreadSelf(subpath, unix.O_PATH|unix.O_NOFOLLOW)\n}\n\n// OpenSelf returns a handle to /proc/self/<subpath>.\n//\n// Note that in Go programs with non-homogenous threads, this may result in\n// spurious errors. If you are monkeying around with APIs that are\n// thread-specific, you probably want to use [Handle.OpenThreadSelf] instead\n// which will guarantee that the handle refers to the same thread as the caller\n// is executing on.\nfunc (proc *Handle) OpenSelf(subpath string) (*os.File, error) {\n\treturn proc.inner.OpenSelf(subpath, unix.O_PATH|unix.O_NOFOLLOW)\n}\n\n// OpenRoot returns a handle to /proc/<subpath>.\n//\n// You should only use this when you need to operate on global procfs files\n// (such as sysctls in /proc/sys). Unlike [Handle.OpenThreadSelf],\n// [Handle.OpenSelf], and [Handle.OpenPid], the procfs handle used internally\n// for this operation will never use \"subset=pid\", which makes it a more juicy\n// target for [CVE-2024-21626]-style attacks (and doing something like opening\n// a directory with OpenRoot effectively leaks [OpenUnsafeProcRoot] as long as\n// the file descriptor is open).\n//\n// [CVE-2024-21626]: https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv\nfunc (proc *Handle) OpenRoot(subpath string) (*os.File, error) {\n\treturn proc.inner.OpenRoot(subpath, unix.O_PATH|unix.O_NOFOLLOW)\n}\n\n// OpenPid returns a handle to /proc/$pid/<subpath> (pid can be a pid or tid).\n// This is mainly intended for usage when operating on other processes.\n//\n// You should not use this for the current thread, as special handling is\n// needed for /proc/thread-self (or /proc/self/task/<tid>) when dealing with\n// goroutine scheduling -- use [Handle.OpenThreadSelf] instead.\n//\n// To refer to the current thread-group, you should use prefer\n// [Handle.OpenSelf] to passing os.Getpid as the pid argument.\nfunc (proc *Handle) OpenPid(pid int, subpath string) (*os.File, error) {\n\treturn proc.inner.OpenPid(pid, subpath, unix.O_PATH|unix.O_NOFOLLOW)\n}\n\n// ProcSelfFdReadlink gets the real path of the given file by looking at\n// /proc/self/fd/<fd> with [readlink]. It is effectively just shorthand for\n// something along the lines of:\n//\n//\tproc, err := procfs.OpenProcRoot()\n//\tif err != nil {\n//\t\treturn err\n//\t}\n//\tlink, err := proc.OpenThreadSelf(fmt.Sprintf(\"fd/%d\", f.Fd()))\n//\tif err != nil {\n//\t\treturn err\n//\t}\n//\tdefer link.Close()\n//\tvar buf [4096]byte\n//\tn, err := unix.Readlinkat(int(link.Fd()), \"\", buf[:])\n//\tif err != nil {\n//\t\treturn err\n//\t}\n//\tpathname := buf[:n]\n//\n// [readlink]: https://pkg.go.dev/golang.org/x/sys/unix#Readlinkat\nfunc ProcSelfFdReadlink(f *os.File) (string, error) {\n\tproc, err := procfs.Open()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer proc.Close() //nolint:errcheck // close failures aren't critical here\n\n\tfdPath := \"fd/\" + strconv.Itoa(int(f.Fd()))\n\treturn proc.Readlink(procfs.ProcThreadSelf, fdPath)\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/pathrs-lite/procfs/procfs_purego.go",
    "content": "// SPDX-License-Identifier: MPL-2.0\n\n//go:build linux && !libpathrs\n\n// Copyright (C) 2024-2025 Aleksa Sarai <cyphar@cyphar.com>\n// Copyright (C) 2024-2025 SUSE LLC\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 https://mozilla.org/MPL/2.0/.\n\n// Package procfs provides a safe API for operating on /proc on Linux.\npackage procfs\n\nimport (\n\t\"os\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/internal/procfs\"\n)\n\n// This package mostly just wraps internal/procfs APIs. This is necessary\n// because we are forced to export some things from internal/procfs in order to\n// avoid some dependency cycle issues, but we don't want users to see or use\n// them.\n\n// ProcThreadSelfCloser is a callback that needs to be called when you are done\n// operating on an [os.File] fetched using [Handle.OpenThreadSelf].\n//\n// [os.File]: https://pkg.go.dev/os#File\ntype ProcThreadSelfCloser = procfs.ProcThreadSelfCloser\n\n// Handle is a wrapper around an *os.File handle to \"/proc\", which can be used\n// to do further procfs-related operations in a safe way.\ntype Handle struct {\n\tinner *procfs.Handle\n}\n\n// Close close the resources associated with this [Handle]. Note that if this\n// [Handle] was created with [OpenProcRoot], on some kernels the underlying\n// procfs handle is cached and so this Close operation may be a no-op. However,\n// you should always call Close on [Handle]s once you are done with them.\nfunc (proc *Handle) Close() error { return proc.inner.Close() }\n\n// OpenProcRoot tries to open a \"safer\" handle to \"/proc\" (i.e., one with the\n// \"subset=pid\" mount option applied, available from Linux 5.8). Unless you\n// plan to do many [Handle.OpenRoot] operations, users should prefer to use\n// this over [OpenUnsafeProcRoot] which is far more dangerous to keep open.\n//\n// If a safe handle cannot be opened, OpenProcRoot will fall back to opening a\n// regular \"/proc\" handle.\n//\n// Note that using [Handle.OpenRoot] will still work with handles returned by\n// this function. If a subpath cannot be operated on with a safe \"/proc\"\n// handle, then [OpenUnsafeProcRoot] will be called internally and a temporary\n// unsafe handle will be used.\nfunc OpenProcRoot() (*Handle, error) {\n\tproc, err := procfs.OpenProcRoot()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Handle{inner: proc}, nil\n}\n\n// OpenUnsafeProcRoot opens a handle to \"/proc\" without any overmounts or\n// masked paths. You must be extremely careful to make sure this handle is\n// never leaked to a container and that you program cannot be tricked into\n// writing to arbitrary paths within it.\n//\n// This is not necessary if you just wish to use [Handle.OpenRoot], as handles\n// returned by [OpenProcRoot] will fall back to using a *temporary* unsafe\n// handle in that case. You should only really use this if you need to do many\n// operations with [Handle.OpenRoot] and the performance overhead of making\n// many procfs handles is an issue. If you do use OpenUnsafeProcRoot, you\n// should make sure to close the handle as soon as possible to avoid\n// known-fd-number attacks.\nfunc OpenUnsafeProcRoot() (*Handle, error) {\n\tproc, err := procfs.OpenUnsafeProcRoot()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Handle{inner: proc}, nil\n}\n\n// OpenThreadSelf returns a handle to \"/proc/thread-self/<subpath>\" (or an\n// equivalent handle on older kernels where \"/proc/thread-self\" doesn't exist).\n// Once finished with the handle, you must call the returned closer function\n// ([runtime.UnlockOSThread]). You must not pass the returned *os.File to other\n// Go threads or use the handle after calling the closer.\n//\n// [runtime.UnlockOSThread]: https://pkg.go.dev/runtime#UnlockOSThread\nfunc (proc *Handle) OpenThreadSelf(subpath string) (*os.File, ProcThreadSelfCloser, error) {\n\treturn proc.inner.OpenThreadSelf(subpath)\n}\n\n// OpenSelf returns a handle to /proc/self/<subpath>.\n//\n// Note that in Go programs with non-homogenous threads, this may result in\n// spurious errors. If you are monkeying around with APIs that are\n// thread-specific, you probably want to use [Handle.OpenThreadSelf] instead\n// which will guarantee that the handle refers to the same thread as the caller\n// is executing on.\nfunc (proc *Handle) OpenSelf(subpath string) (*os.File, error) {\n\treturn proc.inner.OpenSelf(subpath)\n}\n\n// OpenRoot returns a handle to /proc/<subpath>.\n//\n// You should only use this when you need to operate on global procfs files\n// (such as sysctls in /proc/sys). Unlike [Handle.OpenThreadSelf],\n// [Handle.OpenSelf], and [Handle.OpenPid], the procfs handle used internally\n// for this operation will never use \"subset=pid\", which makes it a more juicy\n// target for [CVE-2024-21626]-style attacks (and doing something like opening\n// a directory with OpenRoot effectively leaks [OpenUnsafeProcRoot] as long as\n// the file descriptor is open).\n//\n// [CVE-2024-21626]: https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv\nfunc (proc *Handle) OpenRoot(subpath string) (*os.File, error) {\n\treturn proc.inner.OpenRoot(subpath)\n}\n\n// OpenPid returns a handle to /proc/$pid/<subpath> (pid can be a pid or tid).\n// This is mainly intended for usage when operating on other processes.\n//\n// You should not use this for the current thread, as special handling is\n// needed for /proc/thread-self (or /proc/self/task/<tid>) when dealing with\n// goroutine scheduling -- use [Handle.OpenThreadSelf] instead.\n//\n// To refer to the current thread-group, you should use prefer\n// [Handle.OpenSelf] to passing os.Getpid as the pid argument.\nfunc (proc *Handle) OpenPid(pid int, subpath string) (*os.File, error) {\n\treturn proc.inner.OpenPid(pid, subpath)\n}\n\n// ProcSelfFdReadlink gets the real path of the given file by looking at\n// /proc/self/fd/<fd> with [readlink]. It is effectively just shorthand for\n// something along the lines of:\n//\n//\tproc, err := procfs.OpenProcRoot()\n//\tif err != nil {\n//\t\treturn err\n//\t}\n//\tlink, err := proc.OpenThreadSelf(fmt.Sprintf(\"fd/%d\", f.Fd()))\n//\tif err != nil {\n//\t\treturn err\n//\t}\n//\tdefer link.Close()\n//\tvar buf [4096]byte\n//\tn, err := unix.Readlinkat(int(link.Fd()), \"\", buf[:])\n//\tif err != nil {\n//\t\treturn err\n//\t}\n//\tpathname := buf[:n]\n//\n// [readlink]: https://pkg.go.dev/golang.org/x/sys/unix#Readlinkat\nfunc ProcSelfFdReadlink(f *os.File) (string, error) {\n\treturn procfs.ProcSelfFdReadlink(f)\n}\n"
  },
  {
    "path": "vendor/github.com/cyphar/filepath-securejoin/vfs.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n\n// Copyright (C) 2017-2024 SUSE LLC. All rights 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 securejoin\n\nimport \"os\"\n\n// In future this should be moved into a separate package, because now there\n// are several projects (umoci and go-mtree) that are using this sort of\n// interface.\n\n// VFS is the minimal interface necessary to use [SecureJoinVFS]. A nil VFS is\n// equivalent to using the standard [os].* family of functions. This is mainly\n// used for the purposes of mock testing, but also can be used to otherwise use\n// [SecureJoinVFS] with VFS-like system.\ntype VFS interface {\n\t// Lstat returns an [os.FileInfo] describing the named file. If the\n\t// file is a symbolic link, the returned [os.FileInfo] describes the\n\t// symbolic link. Lstat makes no attempt to follow the link.\n\t// The semantics are identical to [os.Lstat].\n\tLstat(name string) (os.FileInfo, error)\n\n\t// Readlink returns the destination of the named symbolic link.\n\t// The semantics are identical to [os.Readlink].\n\tReadlink(name string) (string, error)\n}\n\n// osVFS is the \"nil\" VFS, in that it just passes everything through to the os\n// module.\ntype osVFS struct{}\n\nfunc (o osVFS) Lstat(name string) (os.FileInfo, error) { return os.Lstat(name) }\n\nfunc (o osVFS) Readlink(name string) (string, error) { return os.Readlink(name) }\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/godbus/dbus/v5/.cirrus.yml",
    "content": "# See https://cirrus-ci.org/guide/FreeBSD/\nfreebsd_instance:\n  image_family: freebsd-14-3\n\ntask:\n  name: Test on FreeBSD\n  install_script: pkg install -y go125 dbus\n  test_script: |\n    /usr/local/etc/rc.d/dbus onestart && \\\n    eval `dbus-launch --sh-syntax` && \\\n    go125 test -v ./...\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/.golangci.yml",
    "content": "version: \"2\"\n\nlinters:\n  enable:\n    - unconvert\n    - unparam\n  exclusions:\n    presets:\n      - std-error-handling\n\nformatters:\n  enable:\n    - gofumpt\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/CONTRIBUTING.md",
    "content": "# How to Contribute\n\n## Getting Started\n\n- Fork the repository on GitHub\n- Read the [README](README.markdown) for build and test instructions\n- Play with the project, submit bugs, submit patches!\n\n## Contribution Flow\n\nThis is a rough outline of what a contributor's workflow looks like:\n\n- Create a topic branch from where you want to base your work (usually master).\n- Make commits of logical units.\n- Make sure your commit messages are in the proper format (see below).\n- Push your changes to a topic branch in your fork of the repository.\n- Make sure the tests pass, and add any new tests as appropriate.\n- Submit a pull request to the original repository.\n\nThanks for your contributions!\n\n### Format of the Commit Message\n\nWe follow a rough convention for commit messages that is designed to answer two\nquestions: what changed and why. The subject line should feature the what and\nthe body of the commit should describe the why.\n\n```\nscripts: add the test-cluster command\n\nthis uses tmux to setup a test cluster that you can easily kill and\nstart for debugging.\n\nFixes #38\n```\n\nThe format can be described more formally as follows:\n\n```\n<subsystem>: <what changed>\n<BLANK LINE>\n<why this change was made>\n<BLANK LINE>\n<footer>\n```\n\nThe first line is the subject and should be no longer than 70 characters, the\nsecond line is always blank, and other lines should be wrapped at 80 characters.\nThis allows the message to be easier to read on GitHub as well as in various\ngit tools.\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/LICENSE",
    "content": "Copyright (c) 2013, Georg Reinke (<guelfey at gmail dot com>), Google\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n\n1. Redistributions of source code must retain the above copyright notice,\nthis list of conditions and the following disclaimer.\n\n2. 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\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\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/godbus/dbus/v5/MAINTAINERS",
    "content": "Brandon Philips <brandon@ifup.org> (@philips)\nBrian Waldon <brian@waldon.cc> (@bcwaldon)\nJohn Southworth <jsouthwo@brocade.com> (@jsouthworth)\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/README.md",
    "content": "![Build Status](https://github.com/godbus/dbus/workflows/Go/badge.svg)\n\ndbus\n----\n\ndbus is a simple library that implements native Go client bindings for the\nD-Bus message bus system.\n\n### Features\n\n* Complete native implementation of the D-Bus message protocol\n* Go-like API (channels for signals / asynchronous method calls, Goroutine-safe connections)\n* Subpackages that help with the introspection / property interfaces\n\n### Installation\n\nThis packages requires Go 1.20 or later. It can be installed by running the command below:\n\n```\ngo get github.com/godbus/dbus/v5\n```\n\n### Usage\n\nThe complete package documentation and some simple examples are available at\n[pkg.go.dev](https://pkg.go.dev/github.com/godbus/dbus/v5). Also, the\n[_examples](https://github.com/godbus/dbus/tree/master/_examples) directory\ngives a short overview over the basic usage. \n\n#### Projects using godbus\n- [fyne](https://github.com/fyne-io/fyne) a cross platform GUI in Go inspired by Material Design.\n- [fynedesk](https://github.com/fyne-io/fynedesk) a full desktop environment for Linux/Unix using Fyne.\n- [go-bluetooth](https://github.com/muka/go-bluetooth) provides a bluetooth client over bluez dbus API.\n- [iwd](https://github.com/shibumi/iwd) go bindings for the internet wireless daemon \"iwd\".\n- [notify](https://github.com/esiqveland/notify) provides desktop notifications over dbus into a library.\n- [playerbm](https://github.com/altdesktop/playerbm) a bookmark utility for media players.\n- [rpic](https://github.com/stephenhu/rpic) lightweight web app and RESTful API for managing a Raspberry Pi\n\nPlease note that the API is considered unstable for now and may change without\nfurther notice.\n\n### License\n\ngo.dbus is available under the Simplified BSD License; see LICENSE for the full\ntext.\n\nNearly all of the credit for this library goes to github.com/guelfey/go.dbus.\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/SECURITY.md",
    "content": "# Security Policy\n\n## Supported Versions\n\nSecurity updates are applied only to the latest release.\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/godbus/dbus/security/advisories/new).\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/godbus/dbus/v5/auth.go",
    "content": "package dbus\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n\t\"os\"\n\t\"strconv\"\n)\n\n// AuthStatus represents the Status of an authentication mechanism.\ntype AuthStatus byte\n\nconst (\n\t// AuthOk signals that authentication is finished; the next command\n\t// from the server should be an OK.\n\tAuthOk AuthStatus = iota\n\n\t// AuthContinue signals that additional data is needed; the next command\n\t// from the server should be a DATA.\n\tAuthContinue\n\n\t// AuthError signals an error; the server sent invalid data or some\n\t// other unexpected thing happened and the current authentication\n\t// process should be aborted.\n\tAuthError\n)\n\ntype authState byte\n\nconst (\n\twaitingForData authState = iota\n\twaitingForOk\n\twaitingForReject\n)\n\n// Auth defines the behaviour of an authentication mechanism.\ntype Auth interface {\n\t// Return the name of the mechanism, the argument to the first AUTH command\n\t// and the next status.\n\tFirstData() (name, resp []byte, status AuthStatus)\n\n\t// Process the given DATA command, and return the argument to the DATA\n\t// command and the next status. If len(resp) == 0, no DATA command is sent.\n\tHandleData(data []byte) (resp []byte, status AuthStatus)\n}\n\n// Auth authenticates the connection, trying the given list of authentication\n// mechanisms (in that order). If nil is passed, the EXTERNAL and\n// DBUS_COOKIE_SHA1 mechanisms are tried for the current user. For private\n// connections, this method must be called before sending any messages to the\n// bus. Auth must not be called on shared connections.\nfunc (conn *Conn) Auth(methods []Auth) error {\n\tif methods == nil {\n\t\tuid := strconv.Itoa(os.Geteuid())\n\t\tmethods = getDefaultAuthMethods(uid)\n\t}\n\tin := bufio.NewReader(conn.transport)\n\terr := conn.SendNullByte()\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = authWriteLine(conn.transport, []byte(\"AUTH\"))\n\tif err != nil {\n\t\treturn err\n\t}\n\ts, err := authReadLine(in)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif len(s) < 2 || !bytes.Equal(s[0], []byte(\"REJECTED\")) {\n\t\treturn errors.New(\"dbus: authentication protocol error\")\n\t}\n\ts = s[1:]\n\tfor _, v := range s {\n\t\tfor _, m := range methods {\n\t\t\tif name, _, status := m.FirstData(); bytes.Equal(v, name) {\n\t\t\t\tvar ok bool\n\t\t\t\terr = authWriteLine(conn.transport, []byte(\"AUTH\"), v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tswitch status {\n\t\t\t\tcase AuthOk:\n\t\t\t\t\tok, err = conn.tryAuth(m, waitingForOk, in)\n\t\t\t\tcase AuthContinue:\n\t\t\t\t\tok, err = conn.tryAuth(m, waitingForData, in)\n\t\t\t\tdefault:\n\t\t\t\t\tpanic(\"dbus: invalid authentication status\")\n\t\t\t\t}\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif ok {\n\t\t\t\t\tif conn.transport.SupportsUnixFDs() {\n\t\t\t\t\t\terr = authWriteLine(conn, []byte(\"NEGOTIATE_UNIX_FD\"))\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\tline, err := authReadLine(in)\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\tswitch {\n\t\t\t\t\t\tcase bytes.Equal(line[0], []byte(\"AGREE_UNIX_FD\")):\n\t\t\t\t\t\t\tconn.EnableUnixFDs()\n\t\t\t\t\t\t\tconn.unixFD = true\n\t\t\t\t\t\tcase bytes.Equal(line[0], []byte(\"ERROR\")):\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn errors.New(\"dbus: authentication protocol error\")\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\terr = authWriteLine(conn.transport, []byte(\"BEGIN\"))\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\tgo conn.inWorker()\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn errors.New(\"dbus: authentication failed\")\n}\n\n// tryAuth tries to authenticate with m as the mechanism, using state as the\n// initial authState and in for reading input. It returns (true, nil) on\n// success, (false, nil) on a REJECTED and (false, someErr) if some other\n// error occurred.\nfunc (conn *Conn) tryAuth(m Auth, state authState, in *bufio.Reader) (bool, error) {\n\tfor {\n\t\ts, err := authReadLine(in)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tswitch {\n\t\tcase state == waitingForData && string(s[0]) == \"DATA\":\n\t\t\tif len(s) != 2 {\n\t\t\t\terr = authWriteLine(conn.transport, []byte(\"ERROR\"))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn false, err\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tdata, status := m.HandleData(s[1])\n\t\t\tswitch status {\n\t\t\tcase AuthOk, AuthContinue:\n\t\t\t\tif len(data) != 0 {\n\t\t\t\t\terr = authWriteLine(conn.transport, []byte(\"DATA\"), data)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn false, err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif status == AuthOk {\n\t\t\t\t\tstate = waitingForOk\n\t\t\t\t}\n\t\t\tcase AuthError:\n\t\t\t\terr = authWriteLine(conn.transport, []byte(\"ERROR\"))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn false, err\n\t\t\t\t}\n\t\t\t}\n\t\tcase state == waitingForData && string(s[0]) == \"REJECTED\":\n\t\t\treturn false, nil\n\t\tcase state == waitingForData && string(s[0]) == \"ERROR\":\n\t\t\terr = authWriteLine(conn.transport, []byte(\"CANCEL\"))\n\t\t\tif err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t\tstate = waitingForReject\n\t\tcase state == waitingForData && string(s[0]) == \"OK\":\n\t\t\tif len(s) != 2 {\n\t\t\t\terr = authWriteLine(conn.transport, []byte(\"CANCEL\"))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn false, err\n\t\t\t\t}\n\t\t\t\tstate = waitingForReject\n\t\t\t} else {\n\t\t\t\tconn.uuid = string(s[1])\n\t\t\t\treturn true, nil\n\t\t\t}\n\t\tcase state == waitingForData:\n\t\t\terr = authWriteLine(conn.transport, []byte(\"ERROR\"))\n\t\t\tif err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\tcase state == waitingForOk && string(s[0]) == \"OK\":\n\t\t\tif len(s) != 2 {\n\t\t\t\terr = authWriteLine(conn.transport, []byte(\"CANCEL\"))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn false, err\n\t\t\t\t}\n\t\t\t\tstate = waitingForReject\n\t\t\t} else {\n\t\t\t\tconn.uuid = string(s[1])\n\t\t\t\treturn true, nil\n\t\t\t}\n\t\tcase state == waitingForOk && string(s[0]) == \"DATA\":\n\t\t\terr = authWriteLine(conn.transport, []byte(\"DATA\"))\n\t\t\tif err != nil {\n\t\t\t\treturn false, nil\n\t\t\t}\n\t\tcase state == waitingForOk && string(s[0]) == \"REJECTED\":\n\t\t\treturn false, nil\n\t\tcase state == waitingForOk && string(s[0]) == \"ERROR\":\n\t\t\terr = authWriteLine(conn.transport, []byte(\"CANCEL\"))\n\t\t\tif err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t\tstate = waitingForReject\n\t\tcase state == waitingForOk:\n\t\t\terr = authWriteLine(conn.transport, []byte(\"ERROR\"))\n\t\t\tif err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\tcase state == waitingForReject && string(s[0]) == \"REJECTED\":\n\t\t\treturn false, nil\n\t\tcase state == waitingForReject:\n\t\t\treturn false, errors.New(\"dbus: authentication protocol error\")\n\t\tdefault:\n\t\t\tpanic(\"dbus: invalid auth state\")\n\t\t}\n\t}\n}\n\n// authReadLine reads a line and separates it into its fields.\nfunc authReadLine(in *bufio.Reader) ([][]byte, error) {\n\tdata, err := in.ReadBytes('\\n')\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdata = bytes.TrimSuffix(data, []byte(\"\\r\\n\"))\n\treturn bytes.Split(data, []byte{' '}), nil\n}\n\n// authWriteLine writes the given line in the authentication protocol format\n// (elements of data separated by a \" \" and terminated by \"\\r\\n\").\nfunc authWriteLine(out io.Writer, data ...[]byte) error {\n\tbuf := make([]byte, 0)\n\tfor i, v := range data {\n\t\tbuf = append(buf, v...)\n\t\tif i != len(data)-1 {\n\t\t\tbuf = append(buf, ' ')\n\t\t}\n\t}\n\tbuf = append(buf, '\\r')\n\tbuf = append(buf, '\\n')\n\tn, err := out.Write(buf)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif n != len(buf) {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/auth_anonymous.go",
    "content": "package dbus\n\n// AuthAnonymous returns an Auth that uses the ANONYMOUS mechanism.\nfunc AuthAnonymous() Auth {\n\treturn &authAnonymous{}\n}\n\ntype authAnonymous struct{}\n\nfunc (a *authAnonymous) FirstData() (name, resp []byte, status AuthStatus) {\n\treturn []byte(\"ANONYMOUS\"), nil, AuthOk\n}\n\nfunc (a *authAnonymous) HandleData(data []byte) (resp []byte, status AuthStatus) {\n\treturn nil, AuthError\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/auth_default_other.go",
    "content": "//go:build !windows\n\npackage dbus\n\nfunc getDefaultAuthMethods(user string) []Auth {\n\treturn []Auth{AuthExternal(user)}\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/auth_default_windows.go",
    "content": "package dbus\n\nfunc getDefaultAuthMethods(user string) []Auth {\n\treturn []Auth{AuthCookieSha1(user, getHomeDir())}\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/auth_external.go",
    "content": "package dbus\n\nimport (\n\t\"encoding/hex\"\n)\n\n// AuthExternal returns an Auth that authenticates as the given user with the\n// EXTERNAL mechanism.\nfunc AuthExternal(user string) Auth {\n\treturn authExternal{user}\n}\n\n// AuthExternal implements the EXTERNAL authentication mechanism.\ntype authExternal struct {\n\tuser string\n}\n\nfunc (a authExternal) FirstData() ([]byte, []byte, AuthStatus) {\n\tb := make([]byte, 2*len(a.user))\n\thex.Encode(b, []byte(a.user))\n\treturn []byte(\"EXTERNAL\"), b, AuthOk\n}\n\nfunc (a authExternal) HandleData(b []byte) ([]byte, AuthStatus) {\n\treturn nil, AuthError\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/auth_sha1_windows.go",
    "content": "package dbus\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"crypto/rand\"\n\t\"crypto/sha1\"\n\t\"encoding/hex\"\n\t\"os\"\n)\n\n// AuthCookieSha1 returns an Auth that authenticates as the given user with the\n// DBUS_COOKIE_SHA1 mechanism. The home parameter should specify the home\n// directory of the user.\nfunc AuthCookieSha1(user, home string) Auth {\n\treturn authCookieSha1{user, home}\n}\n\ntype authCookieSha1 struct {\n\tuser, home string\n}\n\nfunc (a authCookieSha1) FirstData() ([]byte, []byte, AuthStatus) {\n\tb := make([]byte, 2*len(a.user))\n\thex.Encode(b, []byte(a.user))\n\treturn []byte(\"DBUS_COOKIE_SHA1\"), b, AuthContinue\n}\n\nfunc (a authCookieSha1) HandleData(data []byte) ([]byte, AuthStatus) {\n\tchallenge := make([]byte, len(data)/2)\n\t_, err := hex.Decode(challenge, data)\n\tif err != nil {\n\t\treturn nil, AuthError\n\t}\n\tb := bytes.Split(challenge, []byte{' '})\n\tif len(b) != 3 {\n\t\treturn nil, AuthError\n\t}\n\tcontext := b[0]\n\tid := b[1]\n\tsvchallenge := b[2]\n\tcookie := a.getCookie(context, id)\n\tif cookie == nil {\n\t\treturn nil, AuthError\n\t}\n\tclchallenge := a.generateChallenge()\n\tif clchallenge == nil {\n\t\treturn nil, AuthError\n\t}\n\thash := sha1.New()\n\thash.Write(bytes.Join([][]byte{svchallenge, clchallenge, cookie}, []byte{':'}))\n\thexhash := make([]byte, 2*hash.Size())\n\thex.Encode(hexhash, hash.Sum(nil))\n\tdata = append(clchallenge, ' ')\n\tdata = append(data, hexhash...)\n\tresp := make([]byte, 2*len(data))\n\thex.Encode(resp, data)\n\treturn resp, AuthOk\n}\n\n// getCookie searches for the cookie identified by id in context and returns\n// the cookie content or nil. (Since HandleData can't return a specific error,\n// but only whether an error occurred, this function also doesn't bother to\n// return an error.)\nfunc (a authCookieSha1) getCookie(context, id []byte) []byte {\n\tfile, err := os.Open(a.home + \"/.dbus-keyrings/\" + string(context))\n\tif err != nil {\n\t\treturn nil\n\t}\n\tdefer file.Close()\n\trd := bufio.NewReader(file)\n\tfor {\n\t\tline, err := rd.ReadBytes('\\n')\n\t\tif err != nil {\n\t\t\treturn nil\n\t\t}\n\t\tline = line[:len(line)-1]\n\t\tb := bytes.Split(line, []byte{' '})\n\t\tif len(b) != 3 {\n\t\t\treturn nil\n\t\t}\n\t\tif bytes.Equal(b[0], id) {\n\t\t\treturn b[2]\n\t\t}\n\t}\n}\n\n// generateChallenge returns a random, hex-encoded challenge, or nil on error\n// (see above).\nfunc (a authCookieSha1) generateChallenge() []byte {\n\tb := make([]byte, 16)\n\tn, err := rand.Read(b)\n\tif err != nil {\n\t\treturn nil\n\t}\n\tif n != 16 {\n\t\treturn nil\n\t}\n\tenc := make([]byte, 32)\n\thex.Encode(enc, b)\n\treturn enc\n}\n\nfunc getHomeDir() string {\n\tif dir, err := os.UserHomeDir(); err == nil {\n\t\treturn dir\n\t}\n\treturn \"/\"\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/call.go",
    "content": "package dbus\n\nimport (\n\t\"context\"\n)\n\n// Call represents a pending or completed method call.\ntype Call struct {\n\tDestination string\n\tPath        ObjectPath\n\tMethod      string\n\tArgs        []any\n\n\t// Strobes when the call is complete.\n\tDone chan *Call\n\n\t// After completion, the error status. If this is non-nil, it may be an\n\t// error message from the peer (with Error as its type) or some other error.\n\tErr error\n\n\t// Holds the response once the call is done.\n\tBody []any\n\n\t// ResponseSequence stores the sequence number of the DBus message containing\n\t// the call response (or error). This can be compared to the sequence number\n\t// of other call responses and signals on this connection to determine their\n\t// relative ordering on the underlying DBus connection.\n\t// For errors, ResponseSequence is populated only if the error came from a\n\t// DBusMessage that was received or if there was an error receiving. In case of\n\t// failure to make the call, ResponseSequence will be NoSequence.\n\tResponseSequence Sequence\n\n\t// tracks context and canceler\n\tctx         context.Context\n\tctxCanceler context.CancelFunc\n}\n\nfunc (c *Call) Context() context.Context {\n\tif c.ctx == nil {\n\t\treturn context.Background()\n\t}\n\n\treturn c.ctx\n}\n\nfunc (c *Call) ContextCancel() {\n\tif c.ctxCanceler != nil {\n\t\tc.ctxCanceler()\n\t}\n}\n\n// Store stores the body of the reply into the provided pointers. It returns\n// an error if the signatures of the body and retvalues don't match, or if\n// the error status is not nil.\nfunc (c *Call) Store(retvalues ...any) error {\n\tif c.Err != nil {\n\t\treturn c.Err\n\t}\n\n\treturn Store(c.Body, retvalues...)\n}\n\nfunc (c *Call) done() {\n\tc.Done <- c\n\tc.ContextCancel()\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/conn.go",
    "content": "package dbus\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n)\n\nvar (\n\tsystemBus     *Conn\n\tsystemBusLck  sync.Mutex\n\tsessionBus    *Conn\n\tsessionBusLck sync.Mutex\n)\n\n// ErrClosed is the error returned by calls on a closed connection.\nvar ErrClosed = errors.New(\"dbus: connection closed by user\")\n\n// Conn represents a connection to a message bus (usually, the system or\n// session bus).\n//\n// Connections are either shared or private. Shared connections\n// are shared between calls to the functions that return them. As a result,\n// the methods Close, Auth and Hello must not be called on them.\n//\n// Multiple goroutines may invoke methods on a connection simultaneously.\ntype Conn struct {\n\ttransport\n\n\tctx       context.Context\n\tcancelCtx context.CancelFunc\n\n\tcloseOnce sync.Once\n\tcloseErr  error\n\n\tbusObj BusObject\n\tunixFD bool\n\tuuid   string\n\n\thandler       Handler\n\tsignalHandler SignalHandler\n\tserialGen     SerialGenerator\n\tinInt         Interceptor\n\toutInt        Interceptor\n\tauth          []Auth\n\n\tnames      *nameTracker\n\tcalls      *callTracker\n\toutHandler *outputHandler\n\n\teavesdropped    chan<- *Message\n\teavesdroppedLck sync.Mutex\n}\n\n// SessionBus returns a shared connection to the session bus, connecting to it\n// if not already done.\nfunc SessionBus() (conn *Conn, err error) {\n\tsessionBusLck.Lock()\n\tdefer sessionBusLck.Unlock()\n\tif sessionBus != nil &&\n\t\tsessionBus.Connected() {\n\t\treturn sessionBus, nil\n\t}\n\tdefer func() {\n\t\tif conn != nil {\n\t\t\tsessionBus = conn\n\t\t}\n\t}()\n\tconn, err = ConnectSessionBus()\n\treturn\n}\n\nfunc getSessionBusAddress(autolaunch bool) (string, error) {\n\tif address := os.Getenv(\"DBUS_SESSION_BUS_ADDRESS\"); address != \"\" && address != \"autolaunch:\" {\n\t\treturn address, nil\n\t} else if address := tryDiscoverDbusSessionBusAddress(); address != \"\" {\n\t\tos.Setenv(\"DBUS_SESSION_BUS_ADDRESS\", address)\n\t\treturn address, nil\n\t}\n\tif !autolaunch {\n\t\treturn \"\", errors.New(\"dbus: couldn't determine address of session bus\")\n\t}\n\treturn getSessionBusPlatformAddress()\n}\n\n// SessionBusPrivate returns a new private connection to the session bus.\nfunc SessionBusPrivate(opts ...ConnOption) (*Conn, error) {\n\taddress, err := getSessionBusAddress(true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn Dial(address, opts...)\n}\n\n// SessionBusPrivateNoAutoStartup returns a new private connection to the session bus.  If\n// the session bus is not already open, do not attempt to launch it.\nfunc SessionBusPrivateNoAutoStartup(opts ...ConnOption) (*Conn, error) {\n\taddress, err := getSessionBusAddress(false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn Dial(address, opts...)\n}\n\n// SessionBusPrivateHandler returns a new private connection to the session bus.\n//\n// Deprecated: use SessionBusPrivate with options instead.\nfunc SessionBusPrivateHandler(handler Handler, signalHandler SignalHandler) (*Conn, error) {\n\treturn SessionBusPrivate(WithHandler(handler), WithSignalHandler(signalHandler))\n}\n\n// SystemBus returns a shared connection to the system bus, connecting to it if\n// not already done.\nfunc SystemBus() (conn *Conn, err error) {\n\tsystemBusLck.Lock()\n\tdefer systemBusLck.Unlock()\n\tif systemBus != nil &&\n\t\tsystemBus.Connected() {\n\t\treturn systemBus, nil\n\t}\n\tdefer func() {\n\t\tif conn != nil {\n\t\t\tsystemBus = conn\n\t\t}\n\t}()\n\tconn, err = ConnectSystemBus()\n\treturn\n}\n\n// ConnectSessionBus connects to the session bus.\nfunc ConnectSessionBus(opts ...ConnOption) (*Conn, error) {\n\taddress, err := getSessionBusAddress(true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn Connect(address, opts...)\n}\n\n// ConnectSystemBus connects to the system bus.\nfunc ConnectSystemBus(opts ...ConnOption) (*Conn, error) {\n\treturn Connect(getSystemBusPlatformAddress(), opts...)\n}\n\n// Connect connects to the given address.\n//\n// Returned connection is ready to use and doesn't require calling\n// Auth and Hello methods to make it usable.\nfunc Connect(address string, opts ...ConnOption) (*Conn, error) {\n\tconn, err := Dial(address, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err = conn.Auth(conn.auth); err != nil {\n\t\t_ = conn.Close()\n\t\treturn nil, err\n\t}\n\tif err = conn.Hello(); err != nil {\n\t\t_ = conn.Close()\n\t\treturn nil, err\n\t}\n\treturn conn, nil\n}\n\n// SystemBusPrivate returns a new private connection to the system bus.\n// Note: this connection is not ready to use. One must perform Auth and Hello\n// on the connection before it is usable.\nfunc SystemBusPrivate(opts ...ConnOption) (*Conn, error) {\n\treturn Dial(getSystemBusPlatformAddress(), opts...)\n}\n\n// SystemBusPrivateHandler returns a new private connection to the system bus, using the provided handlers.\n//\n// Deprecated: use SystemBusPrivate with options instead.\nfunc SystemBusPrivateHandler(handler Handler, signalHandler SignalHandler) (*Conn, error) {\n\treturn SystemBusPrivate(WithHandler(handler), WithSignalHandler(signalHandler))\n}\n\n// Dial establishes a new private connection to the message bus specified by address.\nfunc Dial(address string, opts ...ConnOption) (*Conn, error) {\n\ttr, err := getTransport(address)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn newConn(tr, opts...)\n}\n\n// DialHandler establishes a new private connection to the message bus specified by address, using the supplied handlers.\n//\n// Deprecated: use Dial with options instead.\nfunc DialHandler(address string, handler Handler, signalHandler SignalHandler) (*Conn, error) {\n\treturn Dial(address, WithHandler(handler), WithSignalHandler(signalHandler))\n}\n\n// ConnOption is a connection option.\ntype ConnOption func(conn *Conn) error\n\n// WithHandler overrides the default handler.\nfunc WithHandler(handler Handler) ConnOption {\n\treturn func(conn *Conn) error {\n\t\tconn.handler = handler\n\t\treturn nil\n\t}\n}\n\n// WithSignalHandler overrides the default signal handler.\nfunc WithSignalHandler(handler SignalHandler) ConnOption {\n\treturn func(conn *Conn) error {\n\t\tconn.signalHandler = handler\n\t\treturn nil\n\t}\n}\n\n// WithSerialGenerator overrides the default signals generator.\nfunc WithSerialGenerator(gen SerialGenerator) ConnOption {\n\treturn func(conn *Conn) error {\n\t\tconn.serialGen = gen\n\t\treturn nil\n\t}\n}\n\n// WithAuth sets authentication methods for the auth conversation.\nfunc WithAuth(methods ...Auth) ConnOption {\n\treturn func(conn *Conn) error {\n\t\tconn.auth = methods\n\t\treturn nil\n\t}\n}\n\n// Interceptor intercepts incoming and outgoing messages.\ntype Interceptor func(msg *Message)\n\n// WithIncomingInterceptor sets the given interceptor for incoming messages.\nfunc WithIncomingInterceptor(interceptor Interceptor) ConnOption {\n\treturn func(conn *Conn) error {\n\t\tconn.inInt = interceptor\n\t\treturn nil\n\t}\n}\n\n// WithOutgoingInterceptor sets the given interceptor for outgoing messages.\nfunc WithOutgoingInterceptor(interceptor Interceptor) ConnOption {\n\treturn func(conn *Conn) error {\n\t\tconn.outInt = interceptor\n\t\treturn nil\n\t}\n}\n\n// WithContext overrides  the default context for the connection.\nfunc WithContext(ctx context.Context) ConnOption {\n\treturn func(conn *Conn) error {\n\t\tconn.ctx = ctx\n\t\treturn nil\n\t}\n}\n\n// NewConn creates a new private *Conn from an already established connection.\nfunc NewConn(conn io.ReadWriteCloser, opts ...ConnOption) (*Conn, error) {\n\treturn newConn(genericTransport{conn}, opts...)\n}\n\n// NewConnHandler creates a new private *Conn from an already established connection, using the supplied handlers.\n//\n// Deprecated: use NewConn with options instead.\nfunc NewConnHandler(conn io.ReadWriteCloser, handler Handler, signalHandler SignalHandler) (*Conn, error) {\n\treturn NewConn(genericTransport{conn}, WithHandler(handler), WithSignalHandler(signalHandler))\n}\n\n// newConn creates a new *Conn from a transport.\nfunc newConn(tr transport, opts ...ConnOption) (*Conn, error) {\n\tconn := new(Conn)\n\tconn.transport = tr\n\tfor _, opt := range opts {\n\t\tif err := opt(conn); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif conn.ctx == nil {\n\t\tconn.ctx = context.Background()\n\t}\n\tconn.ctx, conn.cancelCtx = context.WithCancel(conn.ctx)\n\n\tconn.calls = newCallTracker()\n\tif conn.handler == nil {\n\t\tconn.handler = NewDefaultHandler()\n\t}\n\tif conn.signalHandler == nil {\n\t\tconn.signalHandler = NewDefaultSignalHandler()\n\t}\n\tif conn.serialGen == nil {\n\t\tconn.serialGen = newSerialGenerator()\n\t}\n\tconn.outHandler = &outputHandler{conn: conn}\n\tconn.names = newNameTracker()\n\tconn.busObj = conn.Object(\"org.freedesktop.DBus\", \"/org/freedesktop/DBus\")\n\n\tgo func() {\n\t\t<-conn.ctx.Done()\n\t\tconn.Close()\n\t}()\n\treturn conn, nil\n}\n\n// BusObject returns the object owned by the bus daemon which handles\n// administrative requests.\nfunc (conn *Conn) BusObject() BusObject {\n\treturn conn.busObj\n}\n\n// Close closes the connection. Any blocked operations will return with errors\n// and the channels passed to Eavesdrop and Signal are closed. This method must\n// not be called on shared connections.\nfunc (conn *Conn) Close() error {\n\tconn.closeOnce.Do(func() {\n\t\tconn.outHandler.close()\n\t\tif term, ok := conn.signalHandler.(Terminator); ok {\n\t\t\tterm.Terminate()\n\t\t}\n\n\t\tif term, ok := conn.handler.(Terminator); ok {\n\t\t\tterm.Terminate()\n\t\t}\n\n\t\tconn.eavesdroppedLck.Lock()\n\t\tif conn.eavesdropped != nil {\n\t\t\tclose(conn.eavesdropped)\n\t\t}\n\t\tconn.eavesdroppedLck.Unlock()\n\n\t\tconn.cancelCtx()\n\n\t\tconn.closeErr = conn.transport.Close()\n\t})\n\treturn conn.closeErr\n}\n\n// Context returns the context associated with the connection.  The\n// context will be cancelled when the connection is closed.\nfunc (conn *Conn) Context() context.Context {\n\treturn conn.ctx\n}\n\n// Connected returns whether conn is connected\nfunc (conn *Conn) Connected() bool {\n\treturn conn.ctx.Err() == nil\n}\n\n// Eavesdrop causes conn to send all incoming messages to the given channel\n// without further processing. Method replies, errors and signals will not be\n// sent to the appropriate channels and method calls will not be handled. If nil\n// is passed, the normal behaviour is restored.\n//\n// The caller has to make sure that ch is sufficiently buffered;\n// if a message arrives when a write to ch is not possible, the message is\n// discarded.\nfunc (conn *Conn) Eavesdrop(ch chan<- *Message) {\n\tconn.eavesdroppedLck.Lock()\n\tconn.eavesdropped = ch\n\tconn.eavesdroppedLck.Unlock()\n}\n\n// getSerial returns an unused serial.\nfunc (conn *Conn) getSerial() uint32 {\n\treturn conn.serialGen.GetSerial()\n}\n\n// Hello sends the initial org.freedesktop.DBus.Hello call. This method must be\n// called after authentication, but before sending any other messages to the\n// bus. Hello must not be called for shared connections.\nfunc (conn *Conn) Hello() error {\n\tvar s string\n\terr := conn.busObj.Call(\"org.freedesktop.DBus.Hello\", 0).Store(&s)\n\tif err != nil {\n\t\treturn err\n\t}\n\tconn.names.acquireUniqueConnectionName(s)\n\treturn nil\n}\n\n// inWorker runs in an own goroutine, reading incoming messages from the\n// transport and dispatching them appropriately.\nfunc (conn *Conn) inWorker() {\n\tsequenceGen := newSequenceGenerator()\n\tfor {\n\t\tmsg, err := conn.ReadMessage()\n\t\tif err != nil {\n\t\t\tif _, ok := err.(InvalidMessageError); !ok {\n\t\t\t\t// Some read error occurred (usually EOF); we can't really do\n\t\t\t\t// anything but to shut down all stuff and returns errors to all\n\t\t\t\t// pending replies.\n\t\t\t\tconn.Close()\n\t\t\t\tconn.calls.finalizeAllWithError(sequenceGen, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// invalid messages are ignored\n\t\t\tcontinue\n\t\t}\n\t\tconn.eavesdroppedLck.Lock()\n\t\tif conn.eavesdropped != nil {\n\t\t\tselect {\n\t\t\tcase conn.eavesdropped <- msg:\n\t\t\tdefault:\n\t\t\t}\n\t\t\tconn.eavesdroppedLck.Unlock()\n\t\t\tcontinue\n\t\t}\n\t\tconn.eavesdroppedLck.Unlock()\n\t\tdest, _ := msg.Headers[FieldDestination].value.(string)\n\t\tfound := dest == \"\" ||\n\t\t\t!conn.names.uniqueNameIsKnown() ||\n\t\t\tconn.names.isKnownName(dest)\n\t\tif !found {\n\t\t\t// Eavesdropped a message, but no channel for it is registered.\n\t\t\t// Ignore it.\n\t\t\tcontinue\n\t\t}\n\n\t\tif conn.inInt != nil {\n\t\t\tconn.inInt(msg)\n\t\t}\n\t\tsequence := sequenceGen.next()\n\t\tswitch msg.Type {\n\t\tcase TypeError:\n\t\t\tconn.serialGen.RetireSerial(conn.calls.handleDBusError(sequence, msg))\n\t\tcase TypeMethodReply:\n\t\t\tconn.serialGen.RetireSerial(conn.calls.handleReply(sequence, msg))\n\t\tcase TypeSignal:\n\t\t\tconn.handleSignal(sequence, msg)\n\t\tcase TypeMethodCall:\n\t\t\tgo conn.handleCall(msg)\n\t\t}\n\n\t}\n}\n\nfunc (conn *Conn) handleSignal(sequence Sequence, msg *Message) {\n\tiface := msg.Headers[FieldInterface].value.(string)\n\tmember := msg.Headers[FieldMember].value.(string)\n\t// as per http://dbus.freedesktop.org/doc/dbus-specification.html ,\n\t// sender is optional for signals.\n\tsender, _ := msg.Headers[FieldSender].value.(string)\n\tif iface == \"org.freedesktop.DBus\" && sender == \"org.freedesktop.DBus\" {\n\t\tswitch member {\n\t\tcase \"NameLost\":\n\t\t\t// If we lost the name on the bus, remove it from our\n\t\t\t// tracking list.\n\t\t\tname, ok := msg.Body[0].(string)\n\t\t\tif !ok {\n\t\t\t\tpanic(\"Unable to read the lost name\")\n\t\t\t}\n\t\t\tconn.names.loseName(name)\n\t\tcase \"NameAcquired\":\n\t\t\t// If we acquired the name on the bus, add it to our\n\t\t\t// tracking list.\n\t\t\tname, ok := msg.Body[0].(string)\n\t\t\tif !ok {\n\t\t\t\tpanic(\"Unable to read the acquired name\")\n\t\t\t}\n\t\t\tconn.names.acquireName(name)\n\t\t}\n\t}\n\tsignal := &Signal{\n\t\tSender:   sender,\n\t\tPath:     msg.Headers[FieldPath].value.(ObjectPath),\n\t\tName:     iface + \".\" + member,\n\t\tBody:     msg.Body,\n\t\tSequence: sequence,\n\t}\n\tconn.signalHandler.DeliverSignal(iface, member, signal)\n}\n\n// Names returns the list of all names that are currently owned by this\n// connection. The slice is always at least one element long, the first element\n// being the unique name of the connection.\nfunc (conn *Conn) Names() []string {\n\treturn conn.names.listKnownNames()\n}\n\n// Object returns the object identified by the given destination name and path.\nfunc (conn *Conn) Object(dest string, path ObjectPath) BusObject {\n\treturn &Object{conn, dest, path}\n}\n\nfunc (conn *Conn) sendMessageAndIfClosed(msg *Message, ifClosed func()) error {\n\tif msg.serial == 0 {\n\t\tmsg.serial = conn.getSerial()\n\t}\n\tif conn.outInt != nil {\n\t\tconn.outInt(msg)\n\t}\n\terr := conn.outHandler.sendAndIfClosed(msg, ifClosed)\n\tif err != nil {\n\t\tconn.handleSendError(msg, err)\n\t} else if msg.Type != TypeMethodCall {\n\t\tconn.serialGen.RetireSerial(msg.serial)\n\t}\n\treturn err\n}\n\nfunc isEncodingError(err error) bool {\n\tswitch err.(type) {\n\tcase FormatError:\n\t\treturn true\n\tcase InvalidMessageError:\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (conn *Conn) handleSendError(msg *Message, err error) {\n\tswitch msg.Type {\n\tcase TypeMethodCall:\n\t\tconn.calls.handleSendError(msg, err)\n\tcase TypeMethodReply:\n\t\tif isEncodingError(err) {\n\t\t\t// Make sure that the caller gets some kind of error response if\n\t\t\t// the application code tried to respond, but the resulting message\n\t\t\t// was malformed in the end\n\t\t\treturnedErr := fmt.Errorf(\"destination tried to respond with invalid message (%w)\", err)\n\t\t\tconn.sendError(returnedErr, msg.Headers[FieldDestination].value.(string), msg.Headers[FieldReplySerial].value.(uint32))\n\t\t}\n\t}\n\tconn.serialGen.RetireSerial(msg.serial)\n}\n\n// Send sends the given message to the message bus. You usually don't need to\n// use this; use the higher-level equivalents (Call / Go, Emit and Export)\n// instead. If msg is a method call and NoReplyExpected is not set, a non-nil\n// call is returned and the same value is sent to ch (which must be buffered)\n// once the call is complete. Otherwise, ch is ignored and a Call structure is\n// returned of which only the Err member is valid.\nfunc (conn *Conn) Send(msg *Message, ch chan *Call) *Call {\n\treturn conn.send(context.Background(), msg, ch)\n}\n\n// SendWithContext acts like Send but takes a context\nfunc (conn *Conn) SendWithContext(ctx context.Context, msg *Message, ch chan *Call) *Call {\n\treturn conn.send(ctx, msg, ch)\n}\n\nfunc (conn *Conn) send(ctx context.Context, msg *Message, ch chan *Call) *Call {\n\tif ctx == nil {\n\t\tpanic(\"nil context\")\n\t}\n\tif ch == nil {\n\t\tch = make(chan *Call, 1)\n\t} else if cap(ch) == 0 {\n\t\tpanic(\"dbus: unbuffered channel passed to (*Conn).Send\")\n\t}\n\n\tvar call *Call\n\tctx, canceler := context.WithCancel(ctx)\n\tmsg.serial = conn.getSerial()\n\tif msg.Type == TypeMethodCall && msg.Flags&FlagNoReplyExpected == 0 {\n\t\tcall = new(Call)\n\t\tcall.Destination, _ = msg.Headers[FieldDestination].value.(string)\n\t\tcall.Path, _ = msg.Headers[FieldPath].value.(ObjectPath)\n\t\tiface, _ := msg.Headers[FieldInterface].value.(string)\n\t\tmember, _ := msg.Headers[FieldMember].value.(string)\n\t\tcall.Method = iface + \".\" + member\n\t\tcall.Args = msg.Body\n\t\tcall.Done = ch\n\t\tcall.ctx = ctx\n\t\tcall.ctxCanceler = canceler\n\t\tconn.calls.track(msg.serial, call)\n\t\tif ctx.Err() != nil {\n\t\t\t// short path: don't even send the message if context already cancelled\n\t\t\tconn.calls.handleSendError(msg, ctx.Err())\n\t\t\treturn call\n\t\t}\n\t\tgo func() {\n\t\t\t<-ctx.Done()\n\t\t\tconn.calls.handleSendError(msg, ctx.Err())\n\t\t}()\n\t\t// error is handled in handleSendError\n\t\t_ = conn.sendMessageAndIfClosed(msg, func() {\n\t\t\tconn.calls.handleSendError(msg, ErrClosed)\n\t\t\tcanceler()\n\t\t})\n\t} else {\n\t\tcanceler()\n\t\tcall = &Call{Err: nil, Done: ch}\n\t\tch <- call\n\t\t// error is handled in handleSendError\n\t\t_ = conn.sendMessageAndIfClosed(msg, func() {\n\t\t\tcall = &Call{Err: ErrClosed}\n\t\t})\n\t}\n\treturn call\n}\n\n// sendError creates an error message corresponding to the parameters and sends\n// it to conn.out.\nfunc (conn *Conn) sendError(err error, dest string, serial uint32) {\n\tvar e *Error\n\tswitch em := err.(type) {\n\tcase Error:\n\t\te = &em\n\tcase *Error:\n\t\te = em\n\tcase DBusError:\n\t\tname, body := em.DBusError()\n\t\te = NewError(name, body)\n\tdefault:\n\t\te = MakeFailedError(err)\n\t}\n\tmsg := new(Message)\n\tmsg.Type = TypeError\n\tmsg.Headers = make(map[HeaderField]Variant)\n\tif dest != \"\" {\n\t\tmsg.Headers[FieldDestination] = MakeVariant(dest)\n\t}\n\tmsg.Headers[FieldErrorName] = MakeVariant(e.Name)\n\tmsg.Headers[FieldReplySerial] = MakeVariant(serial)\n\tmsg.Body = e.Body\n\tif len(e.Body) > 0 {\n\t\tmsg.Headers[FieldSignature] = MakeVariant(SignatureOf(e.Body...))\n\t}\n\t// not much we can do to handle a possible error here\n\t_ = conn.sendMessageAndIfClosed(msg, nil)\n}\n\n// sendReply creates a method reply message corresponding to the parameters and\n// sends it to conn.out.\nfunc (conn *Conn) sendReply(dest string, serial uint32, values ...any) {\n\tmsg := new(Message)\n\tmsg.Type = TypeMethodReply\n\tmsg.Headers = make(map[HeaderField]Variant)\n\tif dest != \"\" {\n\t\tmsg.Headers[FieldDestination] = MakeVariant(dest)\n\t}\n\tmsg.Headers[FieldReplySerial] = MakeVariant(serial)\n\tmsg.Body = values\n\tif len(values) > 0 {\n\t\tmsg.Headers[FieldSignature] = MakeVariant(SignatureOf(values...))\n\t}\n\t// not much we can do to handle a possible error here\n\t_ = conn.sendMessageAndIfClosed(msg, nil)\n}\n\n// AddMatchSignal registers the given match rule to receive broadcast\n// signals based on their contents.\nfunc (conn *Conn) AddMatchSignal(options ...MatchOption) error {\n\treturn conn.AddMatchSignalContext(context.Background(), options...)\n}\n\n// AddMatchSignalContext acts like AddMatchSignal but takes a context.\nfunc (conn *Conn) AddMatchSignalContext(ctx context.Context, options ...MatchOption) error {\n\toptions = append([]MatchOption{withMatchTypeSignal()}, options...)\n\treturn conn.busObj.CallWithContext(\n\t\tctx,\n\t\t\"org.freedesktop.DBus.AddMatch\", 0,\n\t\tformatMatchOptions(options),\n\t).Store()\n}\n\n// RemoveMatchSignal removes the first rule that matches previously registered with AddMatchSignal.\nfunc (conn *Conn) RemoveMatchSignal(options ...MatchOption) error {\n\treturn conn.RemoveMatchSignalContext(context.Background(), options...)\n}\n\n// RemoveMatchSignalContext acts like RemoveMatchSignal but takes a context.\nfunc (conn *Conn) RemoveMatchSignalContext(ctx context.Context, options ...MatchOption) error {\n\toptions = append([]MatchOption{withMatchTypeSignal()}, options...)\n\treturn conn.busObj.CallWithContext(\n\t\tctx,\n\t\t\"org.freedesktop.DBus.RemoveMatch\", 0,\n\t\tformatMatchOptions(options),\n\t).Store()\n}\n\n// Signal registers the given channel to be passed all received signal messages.\n//\n// Multiple of these channels can be registered at the same time. The channel is\n// closed if the Conn is closed; it should not be closed by the caller before\n// RemoveSignal was called on it.\n//\n// These channels are \"overwritten\" by Eavesdrop; i.e., if there currently is a\n// channel for eavesdropped messages, this channel receives all signals, and\n// none of the channels passed to Signal will receive any signals.\n//\n// Panics if the signal handler is not a `SignalRegistrar`.\nfunc (conn *Conn) Signal(ch chan<- *Signal) {\n\thandler, ok := conn.signalHandler.(SignalRegistrar)\n\tif !ok {\n\t\tpanic(\"cannot use this method with a non SignalRegistrar handler\")\n\t}\n\thandler.AddSignal(ch)\n}\n\n// RemoveSignal removes the given channel from the list of the registered channels.\n//\n// Panics if the signal handler is not a `SignalRegistrar`.\nfunc (conn *Conn) RemoveSignal(ch chan<- *Signal) {\n\thandler, ok := conn.signalHandler.(SignalRegistrar)\n\tif !ok {\n\t\tpanic(\"cannot use this method with a non SignalRegistrar handler\")\n\t}\n\thandler.RemoveSignal(ch)\n}\n\n// SupportsUnixFDs returns whether the underlying transport supports passing of\n// unix file descriptors. If this is false, method calls containing unix file\n// descriptors will return an error and emitted signals containing them will\n// not be sent.\nfunc (conn *Conn) SupportsUnixFDs() bool {\n\treturn conn.unixFD\n}\n\n// Error represents a D-Bus message of type Error.\ntype Error struct {\n\tName string\n\tBody []any\n}\n\nfunc NewError(name string, body []any) *Error {\n\treturn &Error{name, body}\n}\n\nfunc (e Error) Error() string {\n\tif len(e.Body) >= 1 {\n\t\ts, ok := e.Body[0].(string)\n\t\tif ok {\n\t\t\treturn s\n\t\t}\n\t}\n\treturn e.Name\n}\n\n// Signal represents a D-Bus message of type Signal. The name member is given in\n// \"interface.member\" notation, e.g. org.freedesktop.D-Bus.NameLost.\ntype Signal struct {\n\tSender   string\n\tPath     ObjectPath\n\tName     string\n\tBody     []any\n\tSequence Sequence\n}\n\n// transport is a D-Bus transport.\ntype transport interface {\n\t// Read and Write raw data (for example, for the authentication protocol).\n\tio.ReadWriteCloser\n\n\t// Send the initial null byte used for the EXTERNAL mechanism.\n\tSendNullByte() error\n\n\t// Returns whether this transport supports passing Unix FDs.\n\tSupportsUnixFDs() bool\n\n\t// Signal the transport that Unix FD passing is enabled for this connection.\n\tEnableUnixFDs()\n\n\t// Read / send a message, handling things like Unix FDs.\n\tReadMessage() (*Message, error)\n\tSendMessage(*Message) error\n}\n\nvar transports = make(map[string]func(string) (transport, error))\n\nfunc getTransport(address string) (transport, error) {\n\tvar err error\n\tvar t transport\n\n\taddresses := strings.Split(address, \";\")\n\tfor _, v := range addresses {\n\t\ti := strings.IndexRune(v, ':')\n\t\tif i == -1 {\n\t\t\terr = errors.New(\"dbus: invalid bus address (no transport)\")\n\t\t\tcontinue\n\t\t}\n\t\tf := transports[v[:i]]\n\t\tif f == nil {\n\t\t\terr = errors.New(\"dbus: invalid bus address (invalid or unsupported transport)\")\n\t\t\tcontinue\n\t\t}\n\t\tt, err = f(v[i+1:])\n\t\tif err == nil {\n\t\t\treturn t, nil\n\t\t}\n\t}\n\treturn nil, err\n}\n\n// getKey gets a key from a the list of keys. Returns \"\" on error / not found...\nfunc getKey(s, key string) string {\n\tkeyEq := key + \"=\"\n\tfor _, kv := range strings.Split(s, \",\") {\n\t\tif v, ok := strings.CutPrefix(kv, keyEq); ok {\n\t\t\tval, err := UnescapeBusAddressValue(v)\n\t\t\tif err != nil {\n\t\t\t\t// No way to return an error.\n\t\t\t\treturn \"\"\n\t\t\t}\n\t\t\treturn val\n\t\t}\n\t}\n\treturn \"\"\n}\n\ntype outputHandler struct {\n\tconn    *Conn\n\tsendLck sync.Mutex\n\tclosed  struct {\n\t\tisClosed bool\n\t\tlck      sync.RWMutex\n\t}\n}\n\nfunc (h *outputHandler) sendAndIfClosed(msg *Message, ifClosed func()) error {\n\th.closed.lck.RLock()\n\tdefer h.closed.lck.RUnlock()\n\tif h.closed.isClosed {\n\t\tif ifClosed != nil {\n\t\t\tifClosed()\n\t\t}\n\t\treturn nil\n\t}\n\th.sendLck.Lock()\n\tdefer h.sendLck.Unlock()\n\treturn h.conn.SendMessage(msg)\n}\n\nfunc (h *outputHandler) close() {\n\th.closed.lck.Lock()\n\tdefer h.closed.lck.Unlock()\n\th.closed.isClosed = true\n}\n\ntype serialGenerator struct {\n\tlck        sync.Mutex\n\tnextSerial uint32\n\tserialUsed map[uint32]bool\n}\n\nfunc newSerialGenerator() *serialGenerator {\n\treturn &serialGenerator{\n\t\tserialUsed: map[uint32]bool{0: true},\n\t\tnextSerial: 1,\n\t}\n}\n\nfunc (gen *serialGenerator) GetSerial() uint32 {\n\tgen.lck.Lock()\n\tdefer gen.lck.Unlock()\n\tn := gen.nextSerial\n\tfor gen.serialUsed[n] {\n\t\tn++\n\t}\n\tgen.serialUsed[n] = true\n\tgen.nextSerial = n + 1\n\treturn n\n}\n\nfunc (gen *serialGenerator) RetireSerial(serial uint32) {\n\tgen.lck.Lock()\n\tdefer gen.lck.Unlock()\n\tdelete(gen.serialUsed, serial)\n}\n\ntype nameTracker struct {\n\tlck    sync.RWMutex\n\tunique string\n\tnames  map[string]struct{}\n}\n\nfunc newNameTracker() *nameTracker {\n\treturn &nameTracker{names: map[string]struct{}{}}\n}\n\nfunc (tracker *nameTracker) acquireUniqueConnectionName(name string) {\n\ttracker.lck.Lock()\n\tdefer tracker.lck.Unlock()\n\ttracker.unique = name\n}\n\nfunc (tracker *nameTracker) acquireName(name string) {\n\ttracker.lck.Lock()\n\tdefer tracker.lck.Unlock()\n\ttracker.names[name] = struct{}{}\n}\n\nfunc (tracker *nameTracker) loseName(name string) {\n\ttracker.lck.Lock()\n\tdefer tracker.lck.Unlock()\n\tdelete(tracker.names, name)\n}\n\nfunc (tracker *nameTracker) uniqueNameIsKnown() bool {\n\ttracker.lck.RLock()\n\tdefer tracker.lck.RUnlock()\n\treturn tracker.unique != \"\"\n}\n\nfunc (tracker *nameTracker) isKnownName(name string) bool {\n\ttracker.lck.RLock()\n\tdefer tracker.lck.RUnlock()\n\t_, ok := tracker.names[name]\n\treturn ok || name == tracker.unique\n}\n\nfunc (tracker *nameTracker) listKnownNames() []string {\n\ttracker.lck.RLock()\n\tdefer tracker.lck.RUnlock()\n\tout := make([]string, 0, len(tracker.names)+1)\n\tout = append(out, tracker.unique)\n\tfor k := range tracker.names {\n\t\tout = append(out, k)\n\t}\n\treturn out\n}\n\ntype callTracker struct {\n\tcalls map[uint32]*Call\n\tlck   sync.RWMutex\n}\n\nfunc newCallTracker() *callTracker {\n\treturn &callTracker{calls: map[uint32]*Call{}}\n}\n\nfunc (tracker *callTracker) track(sn uint32, call *Call) {\n\ttracker.lck.Lock()\n\ttracker.calls[sn] = call\n\ttracker.lck.Unlock()\n}\n\nfunc (tracker *callTracker) handleReply(sequence Sequence, msg *Message) uint32 {\n\tserial := msg.Headers[FieldReplySerial].value.(uint32)\n\ttracker.lck.RLock()\n\t_, ok := tracker.calls[serial]\n\ttracker.lck.RUnlock()\n\tif ok {\n\t\ttracker.finalizeWithBody(serial, sequence, msg.Body)\n\t}\n\treturn serial\n}\n\nfunc (tracker *callTracker) handleDBusError(sequence Sequence, msg *Message) uint32 {\n\tserial := msg.Headers[FieldReplySerial].value.(uint32)\n\ttracker.lck.RLock()\n\t_, ok := tracker.calls[serial]\n\ttracker.lck.RUnlock()\n\tif ok {\n\t\tname, _ := msg.Headers[FieldErrorName].value.(string)\n\t\ttracker.finalizeWithError(serial, sequence, Error{name, msg.Body})\n\t}\n\treturn serial\n}\n\nfunc (tracker *callTracker) handleSendError(msg *Message, err error) {\n\tif err == nil {\n\t\treturn\n\t}\n\ttracker.lck.RLock()\n\t_, ok := tracker.calls[msg.serial]\n\ttracker.lck.RUnlock()\n\tif ok {\n\t\ttracker.finalizeWithError(msg.serial, NoSequence, err)\n\t}\n}\n\nfunc (tracker *callTracker) finalizeWithBody(sn uint32, sequence Sequence, body []any) {\n\ttracker.lck.Lock()\n\tc, ok := tracker.calls[sn]\n\tif ok {\n\t\tdelete(tracker.calls, sn)\n\t}\n\ttracker.lck.Unlock()\n\tif ok {\n\t\tc.Body = body\n\t\tc.ResponseSequence = sequence\n\t\tc.done()\n\t}\n}\n\nfunc (tracker *callTracker) finalizeWithError(sn uint32, sequence Sequence, err error) {\n\ttracker.lck.Lock()\n\tc, ok := tracker.calls[sn]\n\tif ok {\n\t\tdelete(tracker.calls, sn)\n\t}\n\ttracker.lck.Unlock()\n\tif ok {\n\t\tc.Err = err\n\t\tc.ResponseSequence = sequence\n\t\tc.done()\n\t}\n}\n\nfunc (tracker *callTracker) finalizeAllWithError(sequenceGen *sequenceGenerator, err error) {\n\ttracker.lck.Lock()\n\tclosedCalls := make([]*Call, 0, len(tracker.calls))\n\tfor sn := range tracker.calls {\n\t\tclosedCalls = append(closedCalls, tracker.calls[sn])\n\t}\n\ttracker.calls = map[uint32]*Call{}\n\ttracker.lck.Unlock()\n\tfor _, call := range closedCalls {\n\t\tcall.Err = err\n\t\tcall.ResponseSequence = sequenceGen.next()\n\t\tcall.done()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/conn_darwin.go",
    "content": "package dbus\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n)\n\nconst defaultSystemBusAddress = \"unix:path=/opt/local/var/run/dbus/system_bus_socket\"\n\nfunc getSessionBusPlatformAddress() (string, error) {\n\tcmd := exec.Command(\"launchctl\", \"getenv\", \"DBUS_LAUNCHD_SESSION_BUS_SOCKET\")\n\tb, err := cmd.CombinedOutput()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif len(b) == 0 {\n\t\treturn \"\", errors.New(\"dbus: couldn't determine address of session bus\")\n\t}\n\n\treturn \"unix:path=\" + string(b[:len(b)-1]), nil\n}\n\nfunc getSystemBusPlatformAddress() string {\n\taddress := os.Getenv(\"DBUS_LAUNCHD_SESSION_BUS_SOCKET\")\n\tif address != \"\" {\n\t\treturn fmt.Sprintf(\"unix:path=%s\", address)\n\t}\n\treturn defaultSystemBusAddress\n}\n\nfunc tryDiscoverDbusSessionBusAddress() string {\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/conn_other.go",
    "content": "//go:build !darwin\n\npackage dbus\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"os/user\"\n\t\"path\"\n\t\"strings\"\n)\n\nvar execCommand = exec.Command\n\nfunc getSessionBusPlatformAddress() (string, error) {\n\tcmd := execCommand(\"dbus-launch\")\n\tb, err := cmd.CombinedOutput()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\ti := bytes.IndexByte(b, '=')\n\tj := bytes.IndexByte(b, '\\n')\n\n\tif i == -1 || j == -1 || i > j {\n\t\treturn \"\", errors.New(\"dbus: couldn't determine address of session bus\")\n\t}\n\n\tenv, addr := string(b[0:i]), string(b[i+1:j])\n\tos.Setenv(env, addr)\n\n\treturn addr, nil\n}\n\n// tryDiscoverDbusSessionBusAddress tries to discover an existing dbus session\n// and return the value of its DBUS_SESSION_BUS_ADDRESS.\n// It tries different techniques employed by different operating systems,\n// returning the first valid address it finds, or an empty string.\n//\n//   - /run/user/<uid>/bus           if this exists, it *is* the bus socket. present on\n//     Ubuntu 18.04\n//   - /run/user/<uid>/dbus-session: if this exists, it can be parsed for the bus\n//     address. present on Ubuntu 16.04\n//\n// See https://dbus.freedesktop.org/doc/dbus-launch.1.html\nfunc tryDiscoverDbusSessionBusAddress() string {\n\tif runtimeDirectory, err := getRuntimeDirectory(); err == nil {\n\n\t\tif runUserBusFile := path.Join(runtimeDirectory, \"bus\"); fileExists(runUserBusFile) {\n\t\t\t// if /run/user/<uid>/bus exists, that file itself\n\t\t\t// *is* the unix socket, so return its path\n\t\t\treturn fmt.Sprintf(\"unix:path=%s\", EscapeBusAddressValue(runUserBusFile))\n\t\t}\n\t\tif runUserSessionDbusFile := path.Join(runtimeDirectory, \"dbus-session\"); fileExists(runUserSessionDbusFile) {\n\t\t\t// if /run/user/<uid>/dbus-session exists, it's a\n\t\t\t// text file // containing the address of the socket, e.g.:\n\t\t\t// DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-E1c73yNqrG\n\n\t\t\tif f, err := os.ReadFile(runUserSessionDbusFile); err == nil {\n\t\t\t\tif addr, ok := strings.CutPrefix(string(f), \"DBUS_SESSION_BUS_ADDRESS=\"); ok {\n\t\t\t\t\treturn strings.TrimRight(addr, \"\\n\\r\")\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc getRuntimeDirectory() (string, error) {\n\tif currentUser, err := user.Current(); err != nil {\n\t\treturn \"\", err\n\t} else {\n\t\treturn fmt.Sprintf(\"/run/user/%s\", currentUser.Uid), nil\n\t}\n}\n\nfunc fileExists(filename string) bool {\n\t_, err := os.Stat(filename)\n\treturn !os.IsNotExist(err)\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/conn_unix.go",
    "content": "//go:build !windows && !solaris && !darwin\n\npackage dbus\n\nimport (\n\t\"net\"\n\t\"os\"\n)\n\nconst defaultSystemBusAddress = \"unix:path=/var/run/dbus/system_bus_socket\"\n\nfunc getSystemBusPlatformAddress() string {\n\taddress := os.Getenv(\"DBUS_SYSTEM_BUS_ADDRESS\")\n\tif address != \"\" {\n\t\treturn address\n\t}\n\treturn defaultSystemBusAddress\n}\n\n// DialUnix establishes a new private connection to the message bus specified by UnixConn.\nfunc DialUnix(conn *net.UnixConn, opts ...ConnOption) (*Conn, error) {\n\ttr := newUnixTransportFromConn(conn)\n\treturn newConn(tr, opts...)\n}\n\nfunc ConnectUnix(uconn *net.UnixConn, opts ...ConnOption) (*Conn, error) {\n\tconn, err := DialUnix(uconn, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err = conn.Auth(conn.auth); err != nil {\n\t\t_ = conn.Close()\n\t\treturn nil, err\n\t}\n\tif err = conn.Hello(); err != nil {\n\t\t_ = conn.Close()\n\t\treturn nil, err\n\t}\n\treturn conn, nil\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/conn_windows.go",
    "content": "package dbus\n\nimport \"os\"\n\nconst defaultSystemBusAddress = \"tcp:host=127.0.0.1,port=12434\"\n\nfunc getSystemBusPlatformAddress() string {\n\taddress := os.Getenv(\"DBUS_SYSTEM_BUS_ADDRESS\")\n\tif address != \"\" {\n\t\treturn address\n\t}\n\treturn defaultSystemBusAddress\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/dbus.go",
    "content": "package dbus\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n)\n\nvar (\n\tbyteType        = reflect.TypeOf(byte(0))\n\tboolType        = reflect.TypeOf(false)\n\tint16Type       = reflect.TypeOf(int16(0))\n\tuint16Type      = reflect.TypeOf(uint16(0))\n\tint32Type       = reflect.TypeOf(int32(0))\n\tuint32Type      = reflect.TypeOf(uint32(0))\n\tint64Type       = reflect.TypeOf(int64(0))\n\tuint64Type      = reflect.TypeOf(uint64(0))\n\tfloat64Type     = reflect.TypeOf(float64(0))\n\tstringType      = reflect.TypeOf(\"\")\n\tsignatureType   = reflect.TypeOf(Signature{\"\"})\n\tobjectPathType  = reflect.TypeOf(ObjectPath(\"\"))\n\tvariantType     = reflect.TypeOf(Variant{Signature{\"\"}, nil})\n\tinterfacesType  = reflect.TypeOf([]any{})\n\tinterfaceType   = reflect.TypeOf((*any)(nil)).Elem()\n\tunixFDType      = reflect.TypeOf(UnixFD(0))\n\tunixFDIndexType = reflect.TypeOf(UnixFDIndex(0))\n\terrType         = reflect.TypeOf((*error)(nil)).Elem()\n)\n\n// An InvalidTypeError signals that a value which cannot be represented in the\n// D-Bus wire format was passed to a function.\ntype InvalidTypeError struct {\n\tType reflect.Type\n}\n\nfunc (e InvalidTypeError) Error() string {\n\treturn \"dbus: invalid type \" + e.Type.String()\n}\n\n// Store copies the values contained in src to dest, which must be a slice of\n// pointers. It converts slices of interfaces from src to corresponding structs\n// in dest. An error is returned if the lengths of src and dest or the types of\n// their elements don't match.\nfunc Store(src []any, dest ...any) error {\n\tif len(src) != len(dest) {\n\t\treturn errors.New(\"dbus.Store: length mismatch\")\n\t}\n\n\tfor i := range src {\n\t\tif err := storeInterfaces(src[i], dest[i]); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc storeInterfaces(src, dest any) error {\n\treturn store(reflect.ValueOf(dest), reflect.ValueOf(src))\n}\n\nfunc store(dest, src reflect.Value) error {\n\tif dest.Kind() == reflect.Ptr {\n\t\tif dest.IsNil() {\n\t\t\tdest.Set(reflect.New(dest.Type().Elem()))\n\t\t}\n\t\treturn store(dest.Elem(), src)\n\t}\n\tswitch src.Kind() {\n\tcase reflect.Slice:\n\t\treturn storeSlice(dest, src)\n\tcase reflect.Map:\n\t\treturn storeMap(dest, src)\n\tdefault:\n\t\treturn storeBase(dest, src)\n\t}\n}\n\nfunc storeBase(dest, src reflect.Value) error {\n\treturn setDest(dest, src)\n}\n\nfunc setDest(dest, src reflect.Value) error {\n\tif !isVariant(src.Type()) && isVariant(dest.Type()) {\n\t\t// special conversion for dbus.Variant\n\t\tdest.Set(reflect.ValueOf(MakeVariant(src.Interface())))\n\t\treturn nil\n\t}\n\tif isVariant(src.Type()) && !isVariant(dest.Type()) {\n\t\tsrc = getVariantValue(src)\n\t\treturn store(dest, src)\n\t}\n\tif !src.Type().ConvertibleTo(dest.Type()) {\n\t\treturn fmt.Errorf(\n\t\t\t\"dbus.Store: type mismatch: cannot convert %s to %s\",\n\t\t\tsrc.Type(), dest.Type())\n\t}\n\tdest.Set(src.Convert(dest.Type()))\n\treturn nil\n}\n\nfunc kindsAreCompatible(dest, src reflect.Type) bool {\n\tswitch {\n\tcase isVariant(dest):\n\t\treturn true\n\tcase dest.Kind() == reflect.Interface:\n\t\treturn true\n\tdefault:\n\t\treturn dest.Kind() == src.Kind()\n\t}\n}\n\nfunc isConvertibleTo(dest, src reflect.Type) bool {\n\tswitch {\n\tcase isVariant(dest):\n\t\treturn true\n\tcase dest.Kind() == reflect.Interface:\n\t\treturn true\n\tcase dest.Kind() == reflect.Slice:\n\t\treturn src.Kind() == reflect.Slice &&\n\t\t\tisConvertibleTo(dest.Elem(), src.Elem())\n\tcase dest.Kind() == reflect.Ptr:\n\t\tdest = dest.Elem()\n\t\treturn isConvertibleTo(dest, src)\n\tcase dest.Kind() == reflect.Struct:\n\t\treturn src == interfacesType || dest.Kind() == src.Kind()\n\tdefault:\n\t\treturn src.ConvertibleTo(dest)\n\t}\n}\n\nfunc storeMap(dest, src reflect.Value) error {\n\tswitch {\n\tcase !kindsAreCompatible(dest.Type(), src.Type()):\n\t\treturn fmt.Errorf(\n\t\t\t\"dbus.Store: type mismatch: \"+\n\t\t\t\t\"map: cannot store a value of %s into %s\",\n\t\t\tsrc.Type(), dest.Type())\n\tcase isVariant(dest.Type()):\n\t\treturn storeMapIntoVariant(dest, src)\n\tcase dest.Kind() == reflect.Interface:\n\t\treturn storeMapIntoInterface(dest, src)\n\tcase isConvertibleTo(dest.Type().Key(), src.Type().Key()) &&\n\t\tisConvertibleTo(dest.Type().Elem(), src.Type().Elem()):\n\t\treturn storeMapIntoMap(dest, src)\n\tdefault:\n\t\treturn fmt.Errorf(\n\t\t\t\"dbus.Store: type mismatch: \"+\n\t\t\t\t\"map: cannot convert a value of %s into %s\",\n\t\t\tsrc.Type(), dest.Type())\n\t}\n}\n\nfunc storeMapIntoVariant(dest, src reflect.Value) error {\n\tdv := reflect.MakeMap(src.Type())\n\terr := store(dv, src)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn storeBase(dest, dv)\n}\n\nfunc storeMapIntoInterface(dest, src reflect.Value) error {\n\tvar dv reflect.Value\n\tif isVariant(src.Type().Elem()) {\n\t\t// Convert variants to interface{} recursively when converting\n\t\t// to interface{}\n\t\tdv = reflect.MakeMap(\n\t\t\treflect.MapOf(src.Type().Key(), interfaceType))\n\t} else {\n\t\tdv = reflect.MakeMap(src.Type())\n\t}\n\terr := store(dv, src)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn storeBase(dest, dv)\n}\n\nfunc storeMapIntoMap(dest, src reflect.Value) error {\n\tif dest.IsNil() {\n\t\tdest.Set(reflect.MakeMap(dest.Type()))\n\t}\n\tkeys := src.MapKeys()\n\tfor _, key := range keys {\n\t\tdkey := key.Convert(dest.Type().Key())\n\t\tdval := reflect.New(dest.Type().Elem()).Elem()\n\t\terr := store(dval, getVariantValue(src.MapIndex(key)))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdest.SetMapIndex(dkey, dval)\n\t}\n\treturn nil\n}\n\nfunc storeSlice(dest, src reflect.Value) error {\n\tswitch {\n\tcase src.Type() == interfacesType && dest.Kind() == reflect.Struct:\n\t\t// The decoder always decodes structs as slices of interface{}\n\t\treturn storeStruct(dest, src)\n\tcase !kindsAreCompatible(dest.Type(), src.Type()):\n\t\treturn fmt.Errorf(\n\t\t\t\"dbus.Store: type mismatch: \"+\n\t\t\t\t\"slice: cannot store a value of %s into %s\",\n\t\t\tsrc.Type(), dest.Type())\n\tcase isVariant(dest.Type()):\n\t\treturn storeSliceIntoVariant(dest, src)\n\tcase dest.Kind() == reflect.Interface:\n\t\treturn storeSliceIntoInterface(dest, src)\n\tcase isConvertibleTo(dest.Type().Elem(), src.Type().Elem()):\n\t\treturn storeSliceIntoSlice(dest, src)\n\tdefault:\n\t\treturn fmt.Errorf(\n\t\t\t\"dbus.Store: type mismatch: \"+\n\t\t\t\t\"slice: cannot convert a value of %s into %s\",\n\t\t\tsrc.Type(), dest.Type())\n\t}\n}\n\nfunc storeStruct(dest, src reflect.Value) error {\n\tif isVariant(dest.Type()) {\n\t\treturn storeBase(dest, src)\n\t}\n\tdval := make([]any, 0, dest.NumField())\n\tdtype := dest.Type()\n\tfor i := 0; i < dest.NumField(); i++ {\n\t\tfield := dest.Field(i)\n\t\tftype := dtype.Field(i)\n\t\tif ftype.PkgPath != \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif ftype.Tag.Get(\"dbus\") == \"-\" {\n\t\t\tcontinue\n\t\t}\n\t\tdval = append(dval, field.Addr().Interface())\n\t}\n\tif src.Len() != len(dval) {\n\t\treturn fmt.Errorf(\n\t\t\t\"dbus.Store: type mismatch: \"+\n\t\t\t\t\"destination struct does not have \"+\n\t\t\t\t\"enough fields need: %d have: %d\",\n\t\t\tsrc.Len(), len(dval))\n\t}\n\treturn Store(src.Interface().([]any), dval...)\n}\n\nfunc storeSliceIntoVariant(dest, src reflect.Value) error {\n\tdv := reflect.MakeSlice(src.Type(), src.Len(), src.Cap())\n\terr := store(dv, src)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn storeBase(dest, dv)\n}\n\nfunc storeSliceIntoInterface(dest, src reflect.Value) error {\n\tvar dv reflect.Value\n\tif isVariant(src.Type().Elem()) {\n\t\t// Convert variants to interface{} recursively when converting\n\t\t// to interface{}\n\t\tdv = reflect.MakeSlice(reflect.SliceOf(interfaceType),\n\t\t\tsrc.Len(), src.Cap())\n\t} else {\n\t\tdv = reflect.MakeSlice(src.Type(), src.Len(), src.Cap())\n\t}\n\terr := store(dv, src)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn storeBase(dest, dv)\n}\n\nfunc storeSliceIntoSlice(dest, src reflect.Value) error {\n\tif dest.IsNil() || dest.Len() < src.Len() {\n\t\tdest.Set(reflect.MakeSlice(dest.Type(), src.Len(), src.Cap()))\n\t} else if dest.Len() > src.Len() {\n\t\tdest.Set(dest.Slice(0, src.Len()))\n\t}\n\tfor i := 0; i < src.Len(); i++ {\n\t\terr := store(dest.Index(i), getVariantValue(src.Index(i)))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc getVariantValue(in reflect.Value) reflect.Value {\n\tif isVariant(in.Type()) {\n\t\treturn reflect.ValueOf(in.Interface().(Variant).Value())\n\t}\n\treturn in\n}\n\nfunc isVariant(t reflect.Type) bool {\n\treturn t == variantType\n}\n\n// An ObjectPath is an object path as defined by the D-Bus spec.\ntype ObjectPath string\n\n// IsValid returns whether the object path is valid.\nfunc (o ObjectPath) IsValid() bool {\n\ts := string(o)\n\tif len(s) == 0 {\n\t\treturn false\n\t}\n\tif s[0] != '/' {\n\t\treturn false\n\t}\n\tif s[len(s)-1] == '/' && len(s) != 1 {\n\t\treturn false\n\t}\n\t// probably not used, but technically possible\n\tif s == \"/\" {\n\t\treturn true\n\t}\n\tsplit := strings.Split(s[1:], \"/\")\n\tfor _, v := range split {\n\t\tif len(v) == 0 {\n\t\t\treturn false\n\t\t}\n\t\tfor _, c := range v {\n\t\t\tif !isMemberChar(c) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\treturn true\n}\n\n// A UnixFD is a Unix file descriptor sent over the wire. See the package-level\n// documentation for more information about Unix file descriptor passing.\ntype UnixFD int32\n\n// A UnixFDIndex is the representation of a Unix file descriptor in a message.\ntype UnixFDIndex uint32\n\n// alignment returns the alignment of values of type t.\nfunc alignment(t reflect.Type) int {\n\tswitch t {\n\tcase variantType:\n\t\treturn 1\n\tcase objectPathType:\n\t\treturn 4\n\tcase signatureType:\n\t\treturn 1\n\tcase interfacesType:\n\t\treturn 4\n\t}\n\tswitch t.Kind() {\n\tcase reflect.Uint8:\n\t\treturn 1\n\tcase reflect.Uint16, reflect.Int16:\n\t\treturn 2\n\tcase reflect.Uint, reflect.Int, reflect.Uint32, reflect.Int32, reflect.String, reflect.Array, reflect.Slice, reflect.Map:\n\t\treturn 4\n\tcase reflect.Uint64, reflect.Int64, reflect.Float64, reflect.Struct:\n\t\treturn 8\n\tcase reflect.Ptr:\n\t\treturn alignment(t.Elem())\n\t}\n\treturn 1\n}\n\n// isKeyType returns whether t is a valid type for a D-Bus dict.\nfunc isKeyType(t reflect.Type) bool {\n\tswitch t.Kind() {\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,\n\t\treflect.Int16, reflect.Int32, reflect.Int64, reflect.Float64,\n\t\treflect.String, reflect.Uint, reflect.Int:\n\n\t\treturn true\n\t}\n\treturn false\n}\n\n// isValidInterface returns whether s is a valid name for an interface.\nfunc isValidInterface(s string) bool {\n\tif len(s) == 0 || len(s) > 255 || s[0] == '.' {\n\t\treturn false\n\t}\n\telem := strings.Split(s, \".\")\n\tif len(elem) < 2 {\n\t\treturn false\n\t}\n\tfor _, v := range elem {\n\t\tif len(v) == 0 {\n\t\t\treturn false\n\t\t}\n\t\tif v[0] >= '0' && v[0] <= '9' {\n\t\t\treturn false\n\t\t}\n\t\tfor _, c := range v {\n\t\t\tif !isMemberChar(c) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\treturn true\n}\n\n// isValidMember returns whether s is a valid name for a member.\nfunc isValidMember(s string) bool {\n\tif len(s) == 0 || len(s) > 255 {\n\t\treturn false\n\t}\n\ti := strings.Index(s, \".\")\n\tif i != -1 {\n\t\treturn false\n\t}\n\tif s[0] >= '0' && s[0] <= '9' {\n\t\treturn false\n\t}\n\tfor _, c := range s {\n\t\tif !isMemberChar(c) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc isMemberChar(c rune) bool {\n\treturn (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') ||\n\t\t(c >= 'a' && c <= 'z') || c == '_'\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/decoder.go",
    "content": "package dbus\n\nimport (\n\t\"encoding/binary\"\n\t\"io\"\n\t\"reflect\"\n\t\"unsafe\"\n)\n\ntype decoder struct {\n\tin    io.Reader\n\torder binary.ByteOrder\n\tpos   int\n\tfds   []int\n\n\t// The following fields are used to reduce memory allocs.\n\tconv *stringConverter\n\tbuf  []byte\n\td    float64\n\ty    [1]byte\n}\n\n// newDecoder returns a new decoder that reads values from in. The input is\n// expected to be in the given byte order.\nfunc newDecoder(in io.Reader, order binary.ByteOrder, fds []int) *decoder {\n\tdec := new(decoder)\n\tdec.in = in\n\tdec.order = order\n\tdec.fds = fds\n\tdec.conv = newStringConverter(stringConverterBufferSize)\n\treturn dec\n}\n\n// Reset resets the decoder to be reading from in.\nfunc (dec *decoder) Reset(in io.Reader, order binary.ByteOrder, fds []int) {\n\tdec.in = in\n\tdec.order = order\n\tdec.pos = 0\n\tdec.fds = fds\n\n\tif dec.conv == nil {\n\t\tdec.conv = newStringConverter(stringConverterBufferSize)\n\t}\n}\n\n// align aligns the input to the given boundary and panics on error.\nfunc (dec *decoder) align(n int) {\n\tif dec.pos%n != 0 {\n\t\tnewpos := (dec.pos + n - 1) & ^(n - 1)\n\t\tdec.read2buf(newpos - dec.pos)\n\t\tdec.pos = newpos\n\t}\n}\n\n// Calls binary.Read(dec.in, dec.order, v) and panics on read errors.\nfunc (dec *decoder) binread(v any) {\n\tif err := binary.Read(dec.in, dec.order, v); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc (dec *decoder) Decode(sig Signature) (vs []any, err error) {\n\tdefer func() {\n\t\tvar ok bool\n\t\tv := recover()\n\t\tif err, ok = v.(error); ok {\n\t\t\tif err == io.EOF || err == io.ErrUnexpectedEOF {\n\t\t\t\terr = FormatError(\"unexpected EOF\")\n\t\t\t}\n\t\t}\n\t}()\n\tvs = make([]any, 0)\n\ts := sig.str\n\tfor s != \"\" {\n\t\terr, rem := validSingle(s, &depthCounter{})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tv := dec.decode(s[:len(s)-len(rem)], 0)\n\t\tvs = append(vs, v)\n\t\ts = rem\n\t}\n\treturn vs, nil\n}\n\n// read2buf reads exactly n bytes from the reader dec.in into the buffer dec.buf\n// to reduce memory allocs.\n// The buffer grows automatically.\nfunc (dec *decoder) read2buf(n int) {\n\tif cap(dec.buf) < n {\n\t\tdec.buf = make([]byte, n)\n\t} else {\n\t\tdec.buf = dec.buf[:n]\n\t}\n\tif _, err := io.ReadFull(dec.in, dec.buf); err != nil {\n\t\tpanic(err)\n\t}\n}\n\n// decodeU decodes uint32 obtained from the reader dec.in.\n// The goal is to reduce memory allocs.\nfunc (dec *decoder) decodeU() uint32 {\n\tdec.align(4)\n\tdec.read2buf(4)\n\tdec.pos += 4\n\treturn dec.order.Uint32(dec.buf)\n}\n\nfunc (dec *decoder) decode(s string, depth int) any {\n\tdec.align(alignment(typeFor(s)))\n\tswitch s[0] {\n\tcase 'y':\n\t\tif _, err := dec.in.Read(dec.y[:]); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tdec.pos++\n\t\treturn dec.y[0]\n\tcase 'b':\n\t\tswitch dec.decodeU() {\n\t\tcase 0:\n\t\t\treturn false\n\t\tcase 1:\n\t\t\treturn true\n\t\tdefault:\n\t\t\tpanic(FormatError(\"invalid value for boolean\"))\n\t\t}\n\tcase 'n':\n\t\tdec.read2buf(2)\n\t\tdec.pos += 2\n\t\treturn int16(dec.order.Uint16(dec.buf))\n\tcase 'i':\n\t\tdec.read2buf(4)\n\t\tdec.pos += 4\n\t\treturn int32(dec.order.Uint32(dec.buf))\n\tcase 'x':\n\t\tdec.read2buf(8)\n\t\tdec.pos += 8\n\t\treturn int64(dec.order.Uint64(dec.buf))\n\tcase 'q':\n\t\tdec.read2buf(2)\n\t\tdec.pos += 2\n\t\treturn dec.order.Uint16(dec.buf)\n\tcase 'u':\n\t\treturn dec.decodeU()\n\tcase 't':\n\t\tdec.read2buf(8)\n\t\tdec.pos += 8\n\t\treturn dec.order.Uint64(dec.buf)\n\tcase 'd':\n\t\tdec.binread(&dec.d)\n\t\tdec.pos += 8\n\t\treturn dec.d\n\tcase 's':\n\t\tlength := dec.decodeU()\n\t\tp := int(length) + 1\n\t\tdec.read2buf(p)\n\t\tdec.pos += p\n\t\treturn dec.conv.String(dec.buf[:len(dec.buf)-1])\n\tcase 'o':\n\t\treturn ObjectPath(dec.decode(\"s\", depth).(string))\n\tcase 'g':\n\t\tlength := dec.decode(\"y\", depth).(byte)\n\t\tp := int(length) + 1\n\t\tdec.read2buf(p)\n\t\tdec.pos += p\n\t\tsig, err := ParseSignature(\n\t\t\tdec.conv.String(dec.buf[:len(dec.buf)-1]),\n\t\t)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\treturn sig\n\tcase 'v':\n\t\tif depth >= 64 {\n\t\t\tpanic(FormatError(\"input exceeds container depth limit\"))\n\t\t}\n\t\tvar variant Variant\n\t\tsig := dec.decode(\"g\", depth).(Signature)\n\t\tif len(sig.str) == 0 {\n\t\t\tpanic(FormatError(\"variant signature is empty\"))\n\t\t}\n\t\terr, rem := validSingle(sig.str, &depthCounter{})\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tif rem != \"\" {\n\t\t\tpanic(FormatError(\"variant signature has multiple types\"))\n\t\t}\n\t\tvariant.sig = sig\n\t\tvariant.value = dec.decode(sig.str, depth+1)\n\t\treturn variant\n\tcase 'h':\n\t\tidx := dec.decodeU()\n\t\tif int(idx) < len(dec.fds) {\n\t\t\treturn UnixFD(dec.fds[idx])\n\t\t}\n\t\treturn UnixFDIndex(idx)\n\tcase 'a':\n\t\tif len(s) > 1 && s[1] == '{' {\n\t\t\tksig := s[2:3]\n\t\t\tvsig := s[3 : len(s)-1]\n\t\t\tv := reflect.MakeMap(reflect.MapOf(typeFor(ksig), typeFor(vsig)))\n\t\t\tif depth >= 63 {\n\t\t\t\tpanic(FormatError(\"input exceeds container depth limit\"))\n\t\t\t}\n\t\t\tlength := dec.decodeU()\n\t\t\t// Even for empty maps, the correct padding must be included\n\t\t\tdec.align(8)\n\t\t\tspos := dec.pos\n\t\t\tfor dec.pos < spos+int(length) {\n\t\t\t\tdec.align(8)\n\t\t\t\tif !isKeyType(v.Type().Key()) {\n\t\t\t\t\tpanic(InvalidTypeError{v.Type()})\n\t\t\t\t}\n\t\t\t\tkv := dec.decode(ksig, depth+2)\n\t\t\t\tvv := dec.decode(vsig, depth+2)\n\t\t\t\tv.SetMapIndex(reflect.ValueOf(kv), reflect.ValueOf(vv))\n\t\t\t}\n\t\t\treturn v.Interface()\n\t\t}\n\t\tif depth >= 64 {\n\t\t\tpanic(FormatError(\"input exceeds container depth limit\"))\n\t\t}\n\t\tsig := s[1:]\n\t\tlength := dec.decodeU()\n\t\t// capacity can be determined only for fixed-size element types\n\t\tvar capacity int\n\t\tif s := sigByteSize(sig); s != 0 {\n\t\t\tcapacity = int(length) / s\n\t\t}\n\t\tv := reflect.MakeSlice(reflect.SliceOf(typeFor(sig)), 0, capacity)\n\t\t// Even for empty arrays, the correct padding must be included\n\t\talign := alignment(typeFor(s[1:]))\n\t\tif len(s) > 1 && s[1] == '(' {\n\t\t\t// Special case for arrays of structs\n\t\t\t// structs decode as a slice of interface{} values\n\t\t\t// but the dbus alignment does not match this\n\t\t\talign = 8\n\t\t}\n\t\tdec.align(align)\n\t\tspos := dec.pos\n\t\tfor dec.pos < spos+int(length) {\n\t\t\tev := dec.decode(s[1:], depth+1)\n\t\t\tv = reflect.Append(v, reflect.ValueOf(ev))\n\t\t}\n\t\treturn v.Interface()\n\tcase '(':\n\t\tif depth >= 64 {\n\t\t\tpanic(FormatError(\"input exceeds container depth limit\"))\n\t\t}\n\t\tdec.align(8)\n\t\tv := make([]any, 0)\n\t\ts = s[1 : len(s)-1]\n\t\tfor s != \"\" {\n\t\t\terr, rem := validSingle(s, &depthCounter{})\n\t\t\tif err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t\tev := dec.decode(s[:len(s)-len(rem)], depth+1)\n\t\t\tv = append(v, ev)\n\t\t\ts = rem\n\t\t}\n\t\treturn v\n\tdefault:\n\t\tpanic(SignatureError{Sig: s})\n\t}\n}\n\n// sigByteSize tries to calculates size of the given signature in bytes.\n//\n// It returns zero when it can't, for example when it contains non-fixed size\n// types such as strings, maps and arrays that require reading of the transmitted\n// data, for that we would need to implement the unread method for Decoder first.\nfunc sigByteSize(sig string) int {\n\tvar total int\n\tfor offset := 0; offset < len(sig); {\n\t\tswitch sig[offset] {\n\t\tcase 'y':\n\t\t\ttotal += 1\n\t\t\toffset += 1\n\t\tcase 'n', 'q':\n\t\t\ttotal += 2\n\t\t\toffset += 1\n\t\tcase 'b', 'i', 'u', 'h':\n\t\t\ttotal += 4\n\t\t\toffset += 1\n\t\tcase 'x', 't', 'd':\n\t\t\ttotal += 8\n\t\t\toffset += 1\n\t\tcase '(':\n\t\t\ti := 1\n\t\t\tdepth := 1\n\t\t\tfor i < len(sig[offset:]) && depth != 0 {\n\t\t\t\tswitch sig[offset+i] {\n\t\t\t\tcase '(':\n\t\t\t\t\tdepth++\n\t\t\t\tcase ')':\n\t\t\t\t\tdepth--\n\t\t\t\t}\n\t\t\t\ti++\n\t\t\t}\n\t\t\ts := sigByteSize(sig[offset+1 : offset+i-1])\n\t\t\tif s == 0 {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\ttotal += s\n\t\t\toffset += i\n\t\tdefault:\n\t\t\treturn 0\n\t\t}\n\t}\n\treturn total\n}\n\n// A FormatError is an error in the wire format.\ntype FormatError string\n\nfunc (e FormatError) Error() string {\n\treturn \"dbus: wire format error: \" + string(e)\n}\n\n// stringConverterBufferSize defines the recommended buffer size of 4KB.\n// It showed good results in a benchmark when decoding 35KB message,\n// see https://github.com/marselester/systemd#testing.\nconst stringConverterBufferSize = 4096\n\nfunc newStringConverter(capacity int) *stringConverter {\n\treturn &stringConverter{\n\t\tbuf:    make([]byte, 0, capacity),\n\t\toffset: 0,\n\t}\n}\n\n// stringConverter converts bytes to strings with less allocs.\n// The idea is to accumulate bytes in a buffer with specified capacity\n// and create strings with unsafe package using bytes from a buffer.\n// For example, 10 \"fizz\" strings written to a 40-byte buffer\n// will result in 1 alloc instead of 10.\n//\n// Once a buffer is filled, a new one is created with the same capacity.\n// Old buffers will be eventually GC-ed\n// with no side effects to the returned strings.\ntype stringConverter struct {\n\t// buf is a temporary buffer where decoded strings are batched.\n\tbuf []byte\n\t// offset is a buffer position where the last string was written.\n\toffset int\n}\n\n// String converts bytes to a string.\nfunc (c *stringConverter) String(b []byte) string {\n\tn := len(b)\n\tif n == 0 {\n\t\treturn \"\"\n\t}\n\t// Must allocate because a string doesn't fit into the buffer.\n\tif n > cap(c.buf) {\n\t\treturn string(b)\n\t}\n\n\tif len(c.buf)+n > cap(c.buf) {\n\t\tc.buf = make([]byte, 0, cap(c.buf))\n\t\tc.offset = 0\n\t}\n\tc.buf = append(c.buf, b...)\n\n\tb = c.buf[c.offset:]\n\ts := toString(b)\n\tc.offset += n\n\treturn s\n}\n\n// toString converts a byte slice to a string without allocating.\nfunc toString(b []byte) string {\n\treturn unsafe.String(&b[0], len(b))\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/default_handler.go",
    "content": "package dbus\n\nimport (\n\t\"bytes\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n)\n\nfunc newIntrospectIntf(h *defaultHandler) *exportedIntf {\n\tmethods := make(map[string]Method)\n\tmethods[\"Introspect\"] = exportedMethod{\n\t\treflect.ValueOf(func(msg Message) (string, *Error) {\n\t\t\tpath := msg.Headers[FieldPath].value.(ObjectPath)\n\t\t\treturn h.introspectPath(path), nil\n\t\t}),\n\t}\n\treturn newExportedIntf(methods, true)\n}\n\n// NewDefaultHandler returns an instance of the default\n// call handler. This is useful if you want to implement only\n// one of the two handlers but not both.\n//\n// Deprecated: this is the default value, don't use it, it will be unexported.\nfunc NewDefaultHandler() *defaultHandler {\n\th := &defaultHandler{\n\t\tobjects:     make(map[ObjectPath]*exportedObj),\n\t\tdefaultIntf: make(map[string]*exportedIntf),\n\t}\n\th.defaultIntf[\"org.freedesktop.DBus.Introspectable\"] = newIntrospectIntf(h)\n\treturn h\n}\n\ntype defaultHandler struct {\n\tsync.RWMutex\n\tobjects     map[ObjectPath]*exportedObj\n\tdefaultIntf map[string]*exportedIntf\n}\n\nfunc (h *defaultHandler) PathExists(path ObjectPath) bool {\n\t_, ok := h.objects[path]\n\treturn ok\n}\n\nfunc (h *defaultHandler) introspectPath(path ObjectPath) string {\n\tsubpath := make(map[string]struct{})\n\tvar xml bytes.Buffer\n\txml.WriteString(\"<node>\")\n\tfor obj := range h.objects {\n\t\tp := string(path)\n\t\tif p != \"/\" {\n\t\t\tp += \"/\"\n\t\t}\n\t\tif after, ok := strings.CutPrefix(string(obj), p); ok {\n\t\t\tname, _, _ := strings.Cut(after, \"/\")\n\t\t\tsubpath[name] = struct{}{}\n\t\t}\n\t}\n\tfor s := range subpath {\n\t\txml.WriteString(\"\\n\\t<node name=\\\"\" + s + \"\\\"/>\")\n\t}\n\txml.WriteString(\"\\n</node>\")\n\treturn xml.String()\n}\n\nfunc (h *defaultHandler) LookupObject(path ObjectPath) (ServerObject, bool) {\n\th.RLock()\n\tdefer h.RUnlock()\n\tobject, ok := h.objects[path]\n\tif ok {\n\t\treturn object, ok\n\t}\n\n\t// If an object wasn't found for this exact path,\n\t// look for a matching subtree registration\n\tsubtreeObject := newExportedObject()\n\tpath = path[:strings.LastIndex(string(path), \"/\")]\n\tfor len(path) > 0 {\n\t\tobject, ok = h.objects[path]\n\t\tif ok {\n\t\t\tfor name, iface := range object.interfaces {\n\t\t\t\t// Only include this handler if it registered for the subtree\n\t\t\t\tif iface.isFallbackInterface() {\n\t\t\t\t\tsubtreeObject.interfaces[name] = iface\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\n\t\tpath = path[:strings.LastIndex(string(path), \"/\")]\n\t}\n\n\tfor name, intf := range h.defaultIntf {\n\t\tif _, exists := subtreeObject.interfaces[name]; exists {\n\t\t\tcontinue\n\t\t}\n\t\tsubtreeObject.interfaces[name] = intf\n\t}\n\n\treturn subtreeObject, true\n}\n\nfunc (h *defaultHandler) AddObject(path ObjectPath, object *exportedObj) {\n\th.Lock()\n\th.objects[path] = object\n\th.Unlock()\n}\n\nfunc (h *defaultHandler) DeleteObject(path ObjectPath) {\n\th.Lock()\n\tdelete(h.objects, path)\n\th.Unlock()\n}\n\ntype exportedMethod struct {\n\treflect.Value\n}\n\nfunc (m exportedMethod) Call(args ...any) ([]any, error) {\n\tt := m.Type()\n\n\tparams := make([]reflect.Value, len(args))\n\tfor i := 0; i < len(args); i++ {\n\t\tparams[i] = reflect.ValueOf(args[i]).Elem()\n\t}\n\n\tret := m.Value.Call(params)\n\tvar err error\n\tnilErr := false // The reflection will find almost-nils, let's only pass back clean ones!\n\tif t.NumOut() > 0 {\n\t\tif e, ok := ret[t.NumOut()-1].Interface().(*Error); ok { // godbus *Error\n\t\t\tnilErr = ret[t.NumOut()-1].IsNil()\n\t\t\tret = ret[:t.NumOut()-1]\n\t\t\terr = e\n\t\t} else if ret[t.NumOut()-1].Type().Implements(errType) { // Go error\n\t\t\ti := ret[t.NumOut()-1].Interface()\n\t\t\tif i == nil {\n\t\t\t\tnilErr = ret[t.NumOut()-1].IsNil()\n\t\t\t} else {\n\t\t\t\terr = i.(error)\n\t\t\t}\n\t\t\tret = ret[:t.NumOut()-1]\n\t\t}\n\t}\n\tout := make([]any, len(ret))\n\tfor i, val := range ret {\n\t\tout[i] = val.Interface()\n\t}\n\tif nilErr || err == nil {\n\t\t// concrete type to interface nil is a special case\n\t\treturn out, nil\n\t}\n\treturn out, err\n}\n\nfunc (m exportedMethod) NumArguments() int {\n\treturn m.Value.Type().NumIn()\n}\n\nfunc (m exportedMethod) ArgumentValue(i int) any {\n\treturn reflect.Zero(m.Type().In(i)).Interface()\n}\n\nfunc (m exportedMethod) NumReturns() int {\n\treturn m.Value.Type().NumOut()\n}\n\nfunc (m exportedMethod) ReturnValue(i int) any {\n\treturn reflect.Zero(m.Type().Out(i)).Interface()\n}\n\nfunc newExportedObject() *exportedObj {\n\treturn &exportedObj{\n\t\tinterfaces: make(map[string]*exportedIntf),\n\t}\n}\n\ntype exportedObj struct {\n\tmu         sync.RWMutex\n\tinterfaces map[string]*exportedIntf\n}\n\nfunc (obj *exportedObj) LookupInterface(name string) (Interface, bool) {\n\tif name == \"\" {\n\t\treturn obj, true\n\t}\n\tobj.mu.RLock()\n\tdefer obj.mu.RUnlock()\n\tintf, exists := obj.interfaces[name]\n\treturn intf, exists\n}\n\nfunc (obj *exportedObj) AddInterface(name string, iface *exportedIntf) {\n\tobj.mu.Lock()\n\tdefer obj.mu.Unlock()\n\tobj.interfaces[name] = iface\n}\n\nfunc (obj *exportedObj) DeleteInterface(name string) {\n\tobj.mu.Lock()\n\tdefer obj.mu.Unlock()\n\tdelete(obj.interfaces, name)\n}\n\nfunc (obj *exportedObj) LookupMethod(name string) (Method, bool) {\n\tobj.mu.RLock()\n\tdefer obj.mu.RUnlock()\n\tfor _, intf := range obj.interfaces {\n\t\tmethod, exists := intf.LookupMethod(name)\n\t\tif exists {\n\t\t\treturn method, exists\n\t\t}\n\t}\n\treturn nil, false\n}\n\nfunc newExportedIntf(methods map[string]Method, includeSubtree bool) *exportedIntf {\n\treturn &exportedIntf{\n\t\tmethods:        methods,\n\t\tincludeSubtree: includeSubtree,\n\t}\n}\n\ntype exportedIntf struct {\n\tmethods map[string]Method\n\n\t// Whether or not this export is for the entire subtree\n\tincludeSubtree bool\n}\n\nfunc (obj *exportedIntf) LookupMethod(name string) (Method, bool) {\n\tout, exists := obj.methods[name]\n\treturn out, exists\n}\n\nfunc (obj *exportedIntf) isFallbackInterface() bool {\n\treturn obj.includeSubtree\n}\n\n// NewDefaultSignalHandler returns an instance of the default\n// signal handler. This is useful if you want to implement only\n// one of the two handlers but not both.\n//\n// Deprecated: this is the default value, don't use it, it will be unexported.\nfunc NewDefaultSignalHandler() *defaultSignalHandler {\n\treturn &defaultSignalHandler{}\n}\n\ntype defaultSignalHandler struct {\n\tmu      sync.RWMutex\n\tclosed  bool\n\tsignals []*signalChannelData\n}\n\nfunc (sh *defaultSignalHandler) DeliverSignal(intf, name string, signal *Signal) {\n\tsh.mu.RLock()\n\tdefer sh.mu.RUnlock()\n\tif sh.closed {\n\t\treturn\n\t}\n\tfor _, scd := range sh.signals {\n\t\tscd.deliver(signal)\n\t}\n}\n\nfunc (sh *defaultSignalHandler) Terminate() {\n\tsh.mu.Lock()\n\tdefer sh.mu.Unlock()\n\tif sh.closed {\n\t\treturn\n\t}\n\n\tfor _, scd := range sh.signals {\n\t\tscd.close()\n\t\tclose(scd.ch)\n\t}\n\tsh.closed = true\n\tsh.signals = nil\n}\n\nfunc (sh *defaultSignalHandler) AddSignal(ch chan<- *Signal) {\n\tsh.mu.Lock()\n\tdefer sh.mu.Unlock()\n\tif sh.closed {\n\t\treturn\n\t}\n\tsh.signals = append(sh.signals, &signalChannelData{\n\t\tch:   ch,\n\t\tdone: make(chan struct{}),\n\t})\n}\n\nfunc (sh *defaultSignalHandler) RemoveSignal(ch chan<- *Signal) {\n\tsh.mu.Lock()\n\tdefer sh.mu.Unlock()\n\tif sh.closed {\n\t\treturn\n\t}\n\tfor i := len(sh.signals) - 1; i >= 0; i-- {\n\t\tif ch == sh.signals[i].ch {\n\t\t\tsh.signals[i].close()\n\t\t\tcopy(sh.signals[i:], sh.signals[i+1:])\n\t\t\tsh.signals[len(sh.signals)-1] = nil\n\t\t\tsh.signals = sh.signals[:len(sh.signals)-1]\n\t\t}\n\t}\n}\n\ntype signalChannelData struct {\n\twg   sync.WaitGroup\n\tch   chan<- *Signal\n\tdone chan struct{}\n}\n\nfunc (scd *signalChannelData) deliver(signal *Signal) {\n\tselect {\n\tcase scd.ch <- signal:\n\tcase <-scd.done:\n\t\treturn\n\tdefault:\n\t\tscd.wg.Add(1)\n\t\tgo scd.deferredDeliver(signal)\n\t}\n}\n\nfunc (scd *signalChannelData) deferredDeliver(signal *Signal) {\n\tselect {\n\tcase scd.ch <- signal:\n\tcase <-scd.done:\n\t}\n\tscd.wg.Done()\n}\n\nfunc (scd *signalChannelData) close() {\n\tclose(scd.done)\n\tscd.wg.Wait() // wait until all spawned goroutines return\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/doc.go",
    "content": "/*\nPackage dbus implements bindings to the D-Bus message bus system.\n\nTo use the message bus API, you first need to connect to a bus (usually the\nsession or system bus). The acquired connection then can be used to call methods\non remote objects and emit or receive signals. Using the Export method, you can\narrange D-Bus methods calls to be directly translated to method calls on a Go\nvalue.\n\n# Conversion Rules\n\nFor outgoing messages, Go types are automatically converted to the\ncorresponding D-Bus types. See the official specification at\nhttps://dbus.freedesktop.org/doc/dbus-specification.html#type-system for more\ninformation on the D-Bus type system. The following types are directly encoded\nas their respective D-Bus equivalents:\n\n\tGo type     | D-Bus type\n\t------------+-----------\n\tbyte        | BYTE\n\tbool        | BOOLEAN\n\tint16       | INT16\n\tuint16      | UINT16\n\tint         | INT32\n\tuint        | UINT32\n\tint32       | INT32\n\tuint32      | UINT32\n\tint64       | INT64\n\tuint64      | UINT64\n\tfloat64     | DOUBLE\n\tstring      | STRING\n\tObjectPath  | OBJECT_PATH\n\tSignature   | SIGNATURE\n\tVariant     | VARIANT\n\tinterface{} | VARIANT\n\tUnixFDIndex | UNIX_FD\n\nSlices and arrays encode as ARRAYs of their element type.\n\nMaps encode as DICTs, provided that their key type can be used as a key for\na DICT.\n\nStructs other than Variant and Signature encode as a STRUCT containing their\nexported fields in order. Fields whose tags contain `dbus:\"-\"` and unexported\nfields will be skipped.\n\nPointers encode as the value they're pointed to.\n\nTypes convertible to one of the base types above will be mapped as the\nbase type.\n\nTrying to encode any other type or a slice, map or struct containing an\nunsupported type will result in an InvalidTypeError.\n\nFor incoming messages, the inverse of these rules are used, with the exception\nof STRUCTs. Incoming STRUCTS are represented as a slice of empty interfaces\ncontaining the struct fields in the correct order. The Store function can be\nused to convert such values to Go structs.\n\n# Unix FD passing\n\nHandling Unix file descriptors deserves special mention. To use them, you should\nfirst check that they are supported on a connection by calling SupportsUnixFDs.\nIf it returns true, all method of Connection will translate messages containing\nUnixFD's to messages that are accompanied by the given file descriptors with the\nUnixFD values being substituted by the correct indices. Similarly, the indices\nof incoming messages are automatically resolved. It shouldn't be necessary to use\nUnixFDIndex.\n*/\npackage dbus\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/encoder.go",
    "content": "package dbus\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"io\"\n\t\"reflect\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\n// An encoder encodes values to the D-Bus wire format.\ntype encoder struct {\n\tout   io.Writer\n\tfds   []int\n\torder binary.ByteOrder\n\tpos   int\n}\n\n// NewEncoder returns a new encoder that writes to out in the given byte order.\nfunc newEncoder(out io.Writer, order binary.ByteOrder, fds []int) *encoder {\n\tenc := newEncoderAtOffset(out, 0, order, fds)\n\treturn enc\n}\n\n// newEncoderAtOffset returns a new encoder that writes to out in the given\n// byte order. Specify the offset to initialize pos for proper alignment\n// computation.\nfunc newEncoderAtOffset(out io.Writer, offset int, order binary.ByteOrder, fds []int) *encoder {\n\tenc := new(encoder)\n\tenc.out = out\n\tenc.order = order\n\tenc.pos = offset\n\tenc.fds = fds\n\treturn enc\n}\n\n// Aligns the next output to be on a multiple of n. Panics on write errors.\nfunc (enc *encoder) align(n int) {\n\tpad := enc.padding(0, n)\n\tif pad > 0 {\n\t\tempty := make([]byte, pad)\n\t\tif _, err := enc.out.Write(empty); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tenc.pos += pad\n\t}\n}\n\n// pad returns the number of bytes of padding, based on current position and additional offset.\n// and alignment.\nfunc (enc *encoder) padding(offset, algn int) int {\n\tabs := enc.pos + offset\n\tif abs%algn != 0 {\n\t\tnewabs := (abs + algn - 1) & ^(algn - 1)\n\t\treturn newabs - abs\n\t}\n\treturn 0\n}\n\n// Calls binary.Write(enc.out, enc.order, v) and panics on write errors.\nfunc (enc *encoder) binwrite(v any) {\n\tif err := binary.Write(enc.out, enc.order, v); err != nil {\n\t\tpanic(err)\n\t}\n}\n\n// Encode encodes the given values to the underlying reader. All written values\n// are aligned properly as required by the D-Bus spec.\nfunc (enc *encoder) Encode(vs ...any) (err error) {\n\tdefer func() {\n\t\terr, _ = recover().(error)\n\t}()\n\tfor _, v := range vs {\n\t\tenc.encode(reflect.ValueOf(v), 0)\n\t}\n\treturn nil\n}\n\n// encode encodes the given value to the writer and panics on error. depth holds\n// the depth of the container nesting.\nfunc (enc *encoder) encode(v reflect.Value, depth int) {\n\tif depth > 64 {\n\t\tpanic(FormatError(\"input exceeds depth limitation\"))\n\t}\n\tenc.align(alignment(v.Type()))\n\tswitch v.Kind() {\n\tcase reflect.Uint8:\n\t\tvar b [1]byte\n\t\tb[0] = byte(v.Uint())\n\t\tif _, err := enc.out.Write(b[:]); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tenc.pos++\n\tcase reflect.Bool:\n\t\tif v.Bool() {\n\t\t\tenc.encode(reflect.ValueOf(uint32(1)), depth)\n\t\t} else {\n\t\t\tenc.encode(reflect.ValueOf(uint32(0)), depth)\n\t\t}\n\tcase reflect.Int16:\n\t\tenc.binwrite(int16(v.Int()))\n\t\tenc.pos += 2\n\tcase reflect.Uint16:\n\t\tenc.binwrite(uint16(v.Uint()))\n\t\tenc.pos += 2\n\tcase reflect.Int, reflect.Int32:\n\t\tif v.Type() == unixFDType {\n\t\t\tfd := v.Int()\n\t\t\tidx := len(enc.fds)\n\t\t\tenc.fds = append(enc.fds, int(fd))\n\t\t\tenc.binwrite(uint32(idx))\n\t\t} else {\n\t\t\tenc.binwrite(int32(v.Int()))\n\t\t}\n\t\tenc.pos += 4\n\tcase reflect.Uint, reflect.Uint32:\n\t\tenc.binwrite(uint32(v.Uint()))\n\t\tenc.pos += 4\n\tcase reflect.Int64:\n\t\tenc.binwrite(v.Int())\n\t\tenc.pos += 8\n\tcase reflect.Uint64:\n\t\tenc.binwrite(v.Uint())\n\t\tenc.pos += 8\n\tcase reflect.Float64:\n\t\tenc.binwrite(v.Float())\n\t\tenc.pos += 8\n\tcase reflect.String:\n\t\tstr := v.String()\n\t\tif !utf8.ValidString(str) {\n\t\t\tpanic(FormatError(\"input has a not-utf8 char in string\"))\n\t\t}\n\t\tif strings.IndexByte(str, byte(0)) != -1 {\n\t\t\tpanic(FormatError(\"input has a null char('\\\\000') in string\"))\n\t\t}\n\t\tif v.Type() == objectPathType {\n\t\t\tif !ObjectPath(str).IsValid() {\n\t\t\t\tpanic(FormatError(\"invalid object path\"))\n\t\t\t}\n\t\t}\n\t\tenc.encode(reflect.ValueOf(uint32(len(str))), depth)\n\t\tb := make([]byte, v.Len()+1)\n\t\tcopy(b, str)\n\t\tb[len(b)-1] = 0\n\t\tn, err := enc.out.Write(b)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tenc.pos += n\n\tcase reflect.Ptr:\n\t\tenc.encode(v.Elem(), depth)\n\tcase reflect.Slice, reflect.Array:\n\t\t// Lookahead offset: 4 bytes for uint32 length (with alignment),\n\t\t// plus alignment for elements.\n\t\tn := enc.padding(0, 4) + 4\n\t\toffset := enc.pos + n + enc.padding(n, alignment(v.Type().Elem()))\n\n\t\tvar buf bytes.Buffer\n\t\tbufenc := newEncoderAtOffset(&buf, offset, enc.order, enc.fds)\n\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\tbufenc.encode(v.Index(i), depth+1)\n\t\t}\n\n\t\tif buf.Len() > 1<<26 {\n\t\t\tpanic(FormatError(\"input exceeds array size limitation\"))\n\t\t}\n\n\t\tenc.fds = bufenc.fds\n\t\tenc.encode(reflect.ValueOf(uint32(buf.Len())), depth)\n\t\tlength := buf.Len()\n\t\tenc.align(alignment(v.Type().Elem()))\n\t\tif _, err := buf.WriteTo(enc.out); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tenc.pos += length\n\tcase reflect.Struct:\n\t\tswitch t := v.Type(); t {\n\t\tcase signatureType:\n\t\t\tstr := v.Field(0)\n\t\t\tenc.encode(reflect.ValueOf(byte(str.Len())), depth)\n\t\t\tb := make([]byte, str.Len()+1)\n\t\t\tcopy(b, str.String())\n\t\t\tb[len(b)-1] = 0\n\t\t\tn, err := enc.out.Write(b)\n\t\t\tif err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t\tenc.pos += n\n\t\tcase variantType:\n\t\t\tvariant := v.Interface().(Variant)\n\t\t\tenc.encode(reflect.ValueOf(variant.sig), depth+1)\n\t\t\tenc.encode(reflect.ValueOf(variant.value), depth+1)\n\t\tdefault:\n\t\t\tfor i := 0; i < v.Type().NumField(); i++ {\n\t\t\t\tfield := t.Field(i)\n\t\t\t\tif field.PkgPath == \"\" && field.Tag.Get(\"dbus\") != \"-\" {\n\t\t\t\t\tenc.encode(v.Field(i), depth+1)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tcase reflect.Map:\n\t\t// Maps are arrays of structures, so they actually increase the depth by\n\t\t// 2.\n\t\tif !isKeyType(v.Type().Key()) {\n\t\t\tpanic(InvalidTypeError{v.Type()})\n\t\t}\n\t\tkeys := v.MapKeys()\n\t\t// Lookahead offset: 4 bytes for uint32 length (with alignment),\n\t\t// plus 8-byte alignment\n\t\tn := enc.padding(0, 4) + 4\n\t\toffset := enc.pos + n + enc.padding(n, 8)\n\n\t\tvar buf bytes.Buffer\n\t\tbufenc := newEncoderAtOffset(&buf, offset, enc.order, enc.fds)\n\t\tfor _, k := range keys {\n\t\t\tbufenc.align(8)\n\t\t\tbufenc.encode(k, depth+2)\n\t\t\tbufenc.encode(v.MapIndex(k), depth+2)\n\t\t}\n\t\tenc.fds = bufenc.fds\n\t\tenc.encode(reflect.ValueOf(uint32(buf.Len())), depth)\n\t\tlength := buf.Len()\n\t\tenc.align(8)\n\t\tif _, err := buf.WriteTo(enc.out); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tenc.pos += length\n\tcase reflect.Interface:\n\t\tenc.encode(reflect.ValueOf(MakeVariant(v.Interface())), depth)\n\tdefault:\n\t\tpanic(InvalidTypeError{v.Type()})\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/escape.go",
    "content": "package dbus\n\nimport \"net/url\"\n\n// EscapeBusAddressValue implements a requirement to escape the values\n// in D-Bus server addresses, as defined by the D-Bus specification at\n// https://dbus.freedesktop.org/doc/dbus-specification.html#addresses.\nfunc EscapeBusAddressValue(val string) string {\n\ttoEsc := strNeedsEscape(val)\n\tif toEsc == 0 {\n\t\t// Avoid unneeded allocation/copying.\n\t\treturn val\n\t}\n\n\t// Avoid allocation for short paths.\n\tvar buf [64]byte\n\tvar out []byte\n\t// Every to-be-escaped byte needs 2 extra bytes.\n\trequired := len(val) + 2*toEsc\n\tif required <= len(buf) {\n\t\tout = buf[:required]\n\t} else {\n\t\tout = make([]byte, required)\n\t}\n\n\tj := 0\n\tfor i := 0; i < len(val); i++ {\n\t\tif ch := val[i]; needsEscape(ch) {\n\t\t\t// Convert ch to %xx, where xx is hex value.\n\t\t\tout[j] = '%'\n\t\t\tout[j+1] = hexchar(ch >> 4)\n\t\t\tout[j+2] = hexchar(ch & 0x0F)\n\t\t\tj += 3\n\t\t} else {\n\t\t\tout[j] = ch\n\t\t\tj++\n\t\t}\n\t}\n\n\treturn string(out)\n}\n\n// UnescapeBusAddressValue unescapes values in D-Bus server addresses,\n// as defined by the D-Bus specification at\n// https://dbus.freedesktop.org/doc/dbus-specification.html#addresses.\nfunc UnescapeBusAddressValue(val string) (string, error) {\n\t// Looks like url.PathUnescape does exactly what is required.\n\treturn url.PathUnescape(val)\n}\n\n// hexchar returns an octal representation of a n, where n < 16.\n// For invalid values of n, the function panics.\nfunc hexchar(n byte) byte {\n\tconst hex = \"0123456789abcdef\"\n\n\t// For n >= len(hex), runtime will panic.\n\treturn hex[n]\n}\n\n// needsEscape tells if a byte is NOT one of optionally-escaped bytes.\nfunc needsEscape(c byte) bool {\n\tif 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' {\n\t\treturn false\n\t}\n\tswitch c {\n\tcase '-', '_', '/', '\\\\', '.', '*':\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// strNeedsEscape tells how many bytes in the string need escaping.\nfunc strNeedsEscape(val string) int {\n\tcount := 0\n\n\tfor i := 0; i < len(val); i++ {\n\t\tif needsEscape(val[i]) {\n\t\t\tcount++\n\t\t}\n\t}\n\n\treturn count\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/export.go",
    "content": "package dbus\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"reflect\"\n\t\"strings\"\n)\n\nvar (\n\tErrMsgInvalidArg = Error{\n\t\t\"org.freedesktop.DBus.Error.InvalidArgs\",\n\t\t[]any{\"Invalid type / number of args\"},\n\t}\n\tErrMsgNoObject = Error{\n\t\t\"org.freedesktop.DBus.Error.NoSuchObject\",\n\t\t[]any{\"No such object\"},\n\t}\n\tErrMsgUnknownMethod = Error{\n\t\t\"org.freedesktop.DBus.Error.UnknownMethod\",\n\t\t[]any{\"Unknown / invalid method\"},\n\t}\n\tErrMsgUnknownInterface = Error{\n\t\t\"org.freedesktop.DBus.Error.UnknownInterface\",\n\t\t[]any{\"Object does not implement the interface\"},\n\t}\n)\n\nfunc MakeNoObjectError(path ObjectPath) Error {\n\treturn Error{\n\t\t\"org.freedesktop.DBus.Error.NoSuchObject\",\n\t\t[]any{fmt.Sprintf(\"No such object '%s'\", string(path))},\n\t}\n}\n\nfunc MakeUnknownMethodError(methodName string) Error {\n\treturn Error{\n\t\t\"org.freedesktop.DBus.Error.UnknownMethod\",\n\t\t[]any{fmt.Sprintf(\"Unknown / invalid method '%s'\", methodName)},\n\t}\n}\n\nfunc MakeUnknownInterfaceError(ifaceName string) Error {\n\treturn Error{\n\t\t\"org.freedesktop.DBus.Error.UnknownInterface\",\n\t\t[]any{fmt.Sprintf(\"Object does not implement the interface '%s'\", ifaceName)},\n\t}\n}\n\nfunc MakeFailedError(err error) *Error {\n\treturn &Error{\n\t\t\"org.freedesktop.DBus.Error.Failed\",\n\t\t[]any{err.Error()},\n\t}\n}\n\n// Sender is a type which can be used in exported methods to receive the message\n// sender.\ntype Sender string\n\nfunc computeMethodName(name string, mapping map[string]string) string {\n\tnewname, ok := mapping[name]\n\tif ok {\n\t\tname = newname\n\t}\n\treturn name\n}\n\nfunc getMethods(in any, mapping map[string]string) map[string]reflect.Value {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tmethods := make(map[string]reflect.Value)\n\tval := reflect.ValueOf(in)\n\ttyp := val.Type()\n\tfor i := 0; i < typ.NumMethod(); i++ {\n\t\tmethtype := typ.Method(i)\n\t\tmethod := val.Method(i)\n\t\tt := method.Type()\n\t\t// only track valid methods must return *Error as last arg\n\t\t// and must be exported\n\t\tif t.NumOut() == 0 ||\n\t\t\tt.Out(t.NumOut()-1) != reflect.TypeOf(&ErrMsgInvalidArg) ||\n\t\t\tmethtype.PkgPath != \"\" {\n\t\t\tcontinue\n\t\t}\n\t\t// map names while building table\n\t\tmethods[computeMethodName(methtype.Name, mapping)] = method\n\t}\n\treturn methods\n}\n\nfunc getAllMethods(in any, mapping map[string]string) map[string]reflect.Value {\n\tif in == nil {\n\t\treturn nil\n\t}\n\tmethods := make(map[string]reflect.Value)\n\tval := reflect.ValueOf(in)\n\ttyp := val.Type()\n\tfor i := 0; i < typ.NumMethod(); i++ {\n\t\tmethtype := typ.Method(i)\n\t\tmethod := val.Method(i)\n\t\t// map names while building table\n\t\tmethods[computeMethodName(methtype.Name, mapping)] = method\n\t}\n\treturn methods\n}\n\nfunc standardMethodArgumentDecode(m Method, sender string, msg *Message, body []any) ([]any, error) {\n\tpointers := make([]any, m.NumArguments())\n\tdecode := make([]any, 0, len(body))\n\n\tfor i := 0; i < m.NumArguments(); i++ {\n\t\ttp := reflect.TypeOf(m.ArgumentValue(i))\n\t\tval := reflect.New(tp)\n\t\tpointers[i] = val.Interface()\n\t\tif tp == reflect.TypeOf((*Sender)(nil)).Elem() {\n\t\t\tval.Elem().SetString(sender)\n\t\t} else if tp == reflect.TypeOf((*Message)(nil)).Elem() {\n\t\t\tval.Elem().Set(reflect.ValueOf(*msg))\n\t\t} else {\n\t\t\tdecode = append(decode, pointers[i])\n\t\t}\n\t}\n\n\tif len(decode) != len(body) {\n\t\treturn nil, ErrMsgInvalidArg\n\t}\n\n\tif err := Store(body, decode...); err != nil {\n\t\treturn nil, ErrMsgInvalidArg\n\t}\n\n\treturn pointers, nil\n}\n\nfunc (conn *Conn) decodeArguments(m Method, sender string, msg *Message) ([]any, error) {\n\tif decoder, ok := m.(ArgumentDecoder); ok {\n\t\treturn decoder.DecodeArguments(conn, sender, msg, msg.Body)\n\t}\n\treturn standardMethodArgumentDecode(m, sender, msg, msg.Body)\n}\n\n// handleCall handles the given method call (i.e. looks if it's one of the\n// pre-implemented ones and searches for a corresponding handler if not).\nfunc (conn *Conn) handleCall(msg *Message) {\n\tname := msg.Headers[FieldMember].value.(string)\n\tpath := msg.Headers[FieldPath].value.(ObjectPath)\n\tifaceName, _ := msg.Headers[FieldInterface].value.(string)\n\tsender, hasSender := msg.Headers[FieldSender].value.(string)\n\tserial := msg.serial\n\n\tif len(name) == 0 {\n\t\tconn.sendError(ErrMsgUnknownMethod, sender, serial)\n\t}\n\n\tif ifaceName == \"org.freedesktop.DBus.Peer\" {\n\t\tswitch name {\n\t\tcase \"Ping\":\n\t\t\tconn.sendReply(sender, serial)\n\t\tcase \"GetMachineId\":\n\t\t\tconn.sendReply(sender, serial, conn.uuid)\n\t\tdefault:\n\t\t\tconn.sendError(MakeUnknownMethodError(name), sender, serial)\n\t\t}\n\t\treturn\n\t}\n\n\tobject, ok := conn.handler.LookupObject(path)\n\tif !ok {\n\t\tconn.sendError(MakeNoObjectError(path), sender, serial)\n\t\treturn\n\t}\n\n\tiface, exists := object.LookupInterface(ifaceName)\n\tif !exists {\n\t\tconn.sendError(MakeUnknownInterfaceError(ifaceName), sender, serial)\n\t\treturn\n\t}\n\n\tm, exists := iface.LookupMethod(name)\n\tif !exists {\n\t\tconn.sendError(MakeUnknownMethodError(name), sender, serial)\n\t\treturn\n\t}\n\targs, err := conn.decodeArguments(m, sender, msg)\n\tif err != nil {\n\t\tconn.sendError(err, sender, serial)\n\t\treturn\n\t}\n\n\tret, err := m.Call(args...)\n\tif err != nil {\n\t\tconn.sendError(err, sender, serial)\n\t\treturn\n\t}\n\n\tif msg.Flags&FlagNoReplyExpected == 0 {\n\t\treply := new(Message)\n\t\treply.Type = TypeMethodReply\n\t\treply.Headers = make(map[HeaderField]Variant)\n\t\tif hasSender {\n\t\t\treply.Headers[FieldDestination] = msg.Headers[FieldSender]\n\t\t}\n\t\treply.Headers[FieldReplySerial] = MakeVariant(msg.serial)\n\t\treply.Body = make([]any, len(ret))\n\t\tcopy(reply.Body, ret)\n\t\treply.Headers[FieldSignature] = MakeVariant(SignatureOf(reply.Body...))\n\n\t\tif err := conn.sendMessageAndIfClosed(reply, nil); err != nil {\n\t\t\tif _, ok := err.(FormatError); ok {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"dbus: replacing invalid reply to %s.%s on obj %s: %s\\n\", ifaceName, name, path, err)\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Emit emits the given signal on the message bus. The name parameter must be\n// formatted as \"interface.member\", e.g., \"org.freedesktop.DBus.NameLost\".\nfunc (conn *Conn) Emit(path ObjectPath, name string, values ...any) error {\n\ti := strings.LastIndex(name, \".\")\n\tif i == -1 {\n\t\treturn errors.New(\"dbus: invalid method name\")\n\t}\n\tiface := name[:i]\n\tmember := name[i+1:]\n\tmsg := new(Message)\n\tmsg.Type = TypeSignal\n\tmsg.Headers = make(map[HeaderField]Variant)\n\tmsg.Headers[FieldInterface] = MakeVariant(iface)\n\tmsg.Headers[FieldMember] = MakeVariant(member)\n\tmsg.Headers[FieldPath] = MakeVariant(path)\n\tmsg.Body = values\n\tif len(values) > 0 {\n\t\tmsg.Headers[FieldSignature] = MakeVariant(SignatureOf(values...))\n\t}\n\n\tvar closed bool\n\terr := conn.sendMessageAndIfClosed(msg, func() {\n\t\tclosed = true\n\t})\n\tif closed {\n\t\treturn ErrClosed\n\t}\n\treturn err\n}\n\n// Export registers the given value to be exported as an object on the\n// message bus.\n//\n// If a method call on the given path and interface is received, an exported\n// method with the same name is called with v as the receiver if the\n// parameters match and the last return value is of type *Error. If this\n// *Error is not nil, it is sent back to the caller as an error.\n// Otherwise, a method reply is sent with the other return values as its body.\n//\n// Any parameters with the special type Sender are set to the sender of the\n// dbus message when the method is called. Parameters of this type do not\n// contribute to the dbus signature of the method (i.e. the method is exposed\n// as if the parameters of type Sender were not there).\n//\n// Similarly, any parameters with the type Message are set to the raw message\n// received on the bus. Again, parameters of this type do not contribute to the\n// dbus signature of the method.\n//\n// Every method call is executed in a new goroutine, so the method may be called\n// in multiple goroutines at once.\n//\n// Method calls on the interface org.freedesktop.DBus.Peer will be automatically\n// handled for every object.\n//\n// Passing nil as the first parameter will cause conn to cease handling calls on\n// the given combination of path and interface.\n//\n// Export returns an error if path is not a valid path name.\nfunc (conn *Conn) Export(v any, path ObjectPath, iface string) error {\n\treturn conn.ExportWithMap(v, nil, path, iface)\n}\n\n// ExportAll registers all exported methods defined by the given object on\n// the message bus.\n//\n// Unlike Export there is no requirement to have the last parameter as type\n// *Error. If you want to be able to return error then you can append an error\n// type parameter to your method signature. If the error returned is not nil,\n// it is sent back to the caller as an error. Otherwise, a method reply is\n// sent with the other return values as its body.\nfunc (conn *Conn) ExportAll(v any, path ObjectPath, iface string) error {\n\treturn conn.export(getAllMethods(v, nil), path, iface, false)\n}\n\n// ExportWithMap works exactly like Export but provides the ability to remap\n// method names (e.g. export a lower-case method).\n//\n// The keys in the map are the real method names (exported on the struct), and\n// the values are the method names to be exported on DBus.\nfunc (conn *Conn) ExportWithMap(v any, mapping map[string]string, path ObjectPath, iface string) error {\n\treturn conn.export(getMethods(v, mapping), path, iface, false)\n}\n\n// ExportSubtree works exactly like Export but registers the given value for\n// an entire subtree rather under the root path provided.\n//\n// In order to make this useful, one parameter in each of the value's exported\n// methods should be a Message, in which case it will contain the raw message\n// (allowing one to get access to the path that caused the method to be called).\n//\n// Note that more specific export paths take precedence over less specific. For\n// example, a method call using the ObjectPath /foo/bar/baz will call a method\n// exported on /foo/bar before a method exported on /foo.\nfunc (conn *Conn) ExportSubtree(v any, path ObjectPath, iface string) error {\n\treturn conn.ExportSubtreeWithMap(v, nil, path, iface)\n}\n\n// ExportSubtreeWithMap works exactly like ExportSubtree but provides the\n// ability to remap method names (e.g. export a lower-case method).\n//\n// The keys in the map are the real method names (exported on the struct), and\n// the values are the method names to be exported on DBus.\nfunc (conn *Conn) ExportSubtreeWithMap(v any, mapping map[string]string, path ObjectPath, iface string) error {\n\treturn conn.export(getMethods(v, mapping), path, iface, true)\n}\n\n// ExportMethodTable like Export registers the given methods as an object\n// on the message bus. Unlike Export the it uses a method table to define\n// the object instead of a native go object.\n//\n// The method table is a map from method name to function closure\n// representing the method. This allows an object exported on the bus to not\n// necessarily be a native go object. It can be useful for generating exposed\n// methods on the fly.\n//\n// Any non-function objects in the method table are ignored.\nfunc (conn *Conn) ExportMethodTable(methods map[string]any, path ObjectPath, iface string) error {\n\treturn conn.exportMethodTable(methods, path, iface, false)\n}\n\n// Like ExportSubtree, but with the same caveats as ExportMethodTable.\nfunc (conn *Conn) ExportSubtreeMethodTable(methods map[string]any, path ObjectPath, iface string) error {\n\treturn conn.exportMethodTable(methods, path, iface, true)\n}\n\nfunc (conn *Conn) exportMethodTable(methods map[string]any, path ObjectPath, iface string, includeSubtree bool) error {\n\tvar out map[string]reflect.Value\n\tif methods != nil {\n\t\tout = make(map[string]reflect.Value)\n\t\tfor name, method := range methods {\n\t\t\trval := reflect.ValueOf(method)\n\t\t\tif rval.Kind() != reflect.Func {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tt := rval.Type()\n\t\t\t// only track valid methods must return *Error as last arg\n\t\t\tif t.NumOut() == 0 ||\n\t\t\t\tt.Out(t.NumOut()-1) != reflect.TypeOf(&ErrMsgInvalidArg) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tout[name] = rval\n\t\t}\n\t}\n\treturn conn.export(out, path, iface, includeSubtree)\n}\n\nfunc (conn *Conn) unexport(h *defaultHandler, path ObjectPath, iface string) error {\n\tif h.PathExists(path) {\n\t\tobj := h.objects[path]\n\t\tobj.DeleteInterface(iface)\n\t\tif len(obj.interfaces) == 0 {\n\t\t\th.DeleteObject(path)\n\t\t}\n\t}\n\treturn nil\n}\n\n// export is the worker function for all exports/registrations.\nfunc (conn *Conn) export(methods map[string]reflect.Value, path ObjectPath, iface string, includeSubtree bool) error {\n\th, ok := conn.handler.(*defaultHandler)\n\tif !ok {\n\t\treturn fmt.Errorf(\n\t\t\t`dbus: export only allowed on the default handler. Received: %T\"`,\n\t\t\tconn.handler)\n\t}\n\n\tif !path.IsValid() {\n\t\treturn fmt.Errorf(`dbus: Invalid path name: \"%s\"`, path)\n\t}\n\n\t// Remove a previous export if the interface is nil\n\tif methods == nil {\n\t\treturn conn.unexport(h, path, iface)\n\t}\n\n\t// If this is the first handler for this path, make a new map to hold all\n\t// handlers for this path.\n\tif !h.PathExists(path) {\n\t\th.AddObject(path, newExportedObject())\n\t}\n\n\texportedMethods := make(map[string]Method)\n\tfor name, method := range methods {\n\t\texportedMethods[name] = exportedMethod{method}\n\t}\n\n\t// Finally, save this handler\n\tobj := h.objects[path]\n\tobj.AddInterface(iface, newExportedIntf(exportedMethods, includeSubtree))\n\n\treturn nil\n}\n\n// ReleaseName calls org.freedesktop.DBus.ReleaseName and awaits a response.\nfunc (conn *Conn) ReleaseName(name string) (ReleaseNameReply, error) {\n\tvar r uint32\n\terr := conn.busObj.Call(\"org.freedesktop.DBus.ReleaseName\", 0, name).Store(&r)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn ReleaseNameReply(r), nil\n}\n\n// RequestName calls org.freedesktop.DBus.RequestName and awaits a response.\nfunc (conn *Conn) RequestName(name string, flags RequestNameFlags) (RequestNameReply, error) {\n\tvar r uint32\n\terr := conn.busObj.Call(\"org.freedesktop.DBus.RequestName\", 0, name, flags).Store(&r)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn RequestNameReply(r), nil\n}\n\n// ReleaseNameReply is the reply to a ReleaseName call.\ntype ReleaseNameReply uint32\n\nconst (\n\tReleaseNameReplyReleased ReleaseNameReply = 1 + iota\n\tReleaseNameReplyNonExistent\n\tReleaseNameReplyNotOwner\n)\n\nfunc (rep ReleaseNameReply) String() string {\n\tswitch rep {\n\tcase ReleaseNameReplyReleased:\n\t\treturn \"released\"\n\tcase ReleaseNameReplyNonExistent:\n\t\treturn \"non existent\"\n\tcase ReleaseNameReplyNotOwner:\n\t\treturn \"not owner\"\n\t}\n\treturn \"unknown\"\n}\n\n// RequestNameFlags represents the possible flags for a RequestName call.\ntype RequestNameFlags uint32\n\nconst (\n\tNameFlagAllowReplacement RequestNameFlags = 1 << iota\n\tNameFlagReplaceExisting\n\tNameFlagDoNotQueue\n)\n\n// RequestNameReply is the reply to a RequestName call.\ntype RequestNameReply uint32\n\nconst (\n\tRequestNameReplyPrimaryOwner RequestNameReply = 1 + iota\n\tRequestNameReplyInQueue\n\tRequestNameReplyExists\n\tRequestNameReplyAlreadyOwner\n)\n\nfunc (rep RequestNameReply) String() string {\n\tswitch rep {\n\tcase RequestNameReplyPrimaryOwner:\n\t\treturn \"primary owner\"\n\tcase RequestNameReplyInQueue:\n\t\treturn \"in queue\"\n\tcase RequestNameReplyExists:\n\t\treturn \"exists\"\n\tcase RequestNameReplyAlreadyOwner:\n\t\treturn \"already owner\"\n\t}\n\treturn \"unknown\"\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/match.go",
    "content": "package dbus\n\nimport (\n\t\"strconv\"\n\t\"strings\"\n)\n\n// MatchOption specifies option for dbus routing match rule. Options can be constructed with WithMatch* helpers.\n// For full list of available options consult\n// https://dbus.freedesktop.org/doc/dbus-specification.html#message-bus-routing-match-rules\ntype MatchOption struct {\n\tkey   string\n\tvalue string\n}\n\nfunc formatMatchOptions(options []MatchOption) string {\n\titems := make([]string, 0, len(options))\n\tfor _, option := range options {\n\t\titems = append(items, option.key+\"='\"+option.value+\"'\")\n\t}\n\treturn strings.Join(items, \",\")\n}\n\n// WithMatchOption creates match option with given key and value\nfunc WithMatchOption(key, value string) MatchOption {\n\treturn MatchOption{key, value}\n}\n\n// It does not make sense to have a public WithMatchType function\n// because clients can only subscribe to messages with signal type.\nfunc withMatchTypeSignal() MatchOption {\n\treturn WithMatchOption(\"type\", \"signal\")\n}\n\n// WithMatchSender sets sender match option.\nfunc WithMatchSender(sender string) MatchOption {\n\treturn WithMatchOption(\"sender\", sender)\n}\n\n// WithMatchSender sets interface match option.\nfunc WithMatchInterface(iface string) MatchOption {\n\treturn WithMatchOption(\"interface\", iface)\n}\n\n// WithMatchMember sets member match option.\nfunc WithMatchMember(member string) MatchOption {\n\treturn WithMatchOption(\"member\", member)\n}\n\n// WithMatchObjectPath creates match option that filters events based on given path\nfunc WithMatchObjectPath(path ObjectPath) MatchOption {\n\treturn WithMatchOption(\"path\", string(path))\n}\n\n// WithMatchPathNamespace sets path_namespace match option.\nfunc WithMatchPathNamespace(namespace ObjectPath) MatchOption {\n\treturn WithMatchOption(\"path_namespace\", string(namespace))\n}\n\n// WithMatchDestination sets destination match option.\nfunc WithMatchDestination(destination string) MatchOption {\n\treturn WithMatchOption(\"destination\", destination)\n}\n\n// WithMatchArg sets argN match option, range of N is 0 to 63.\nfunc WithMatchArg(argIdx int, value string) MatchOption {\n\tif argIdx < 0 || argIdx > 63 {\n\t\tpanic(\"range of argument index is 0 to 63\")\n\t}\n\treturn WithMatchOption(\"arg\"+strconv.Itoa(argIdx), value)\n}\n\n// WithMatchArgPath sets argN path match option, range of N is 0 to 63.\nfunc WithMatchArgPath(argIdx int, path string) MatchOption {\n\tif argIdx < 0 || argIdx > 63 {\n\t\tpanic(\"range of argument index is 0 to 63\")\n\t}\n\treturn WithMatchOption(\"arg\"+strconv.Itoa(argIdx)+\"path\", path)\n}\n\n// WithMatchArg0Namespace sets arg0namespace match option.\nfunc WithMatchArg0Namespace(arg0Namespace string) MatchOption {\n\treturn WithMatchOption(\"arg0namespace\", arg0Namespace)\n}\n\n// WithMatchEavesdrop sets eavesdrop match option.\nfunc WithMatchEavesdrop(eavesdrop bool) MatchOption {\n\treturn WithMatchOption(\"eavesdrop\", strconv.FormatBool(eavesdrop))\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/message.go",
    "content": "package dbus\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"io\"\n\t\"reflect\"\n\t\"strconv\"\n)\n\nconst protoVersion byte = 1\n\n// Flags represents the possible flags of a D-Bus message.\ntype Flags byte\n\nconst (\n\t// FlagNoReplyExpected signals that the message is not expected to generate\n\t// a reply. If this flag is set on outgoing messages, any possible reply\n\t// will be discarded.\n\tFlagNoReplyExpected Flags = 1 << iota\n\t// FlagNoAutoStart signals that the message bus should not automatically\n\t// start an application when handling this message.\n\tFlagNoAutoStart\n\t// FlagAllowInteractiveAuthorization may be set on a method call\n\t// message to inform the receiving side that the caller is prepared\n\t// to wait for interactive authorization, which might take a\n\t// considerable time to complete. For instance, if this flag is set,\n\t// it would be appropriate to query the user for passwords or\n\t// confirmation via Polkit or a similar framework.\n\tFlagAllowInteractiveAuthorization\n)\n\n// Type represents the possible types of a D-Bus message.\ntype Type byte\n\nconst (\n\tTypeMethodCall Type = 1 + iota\n\tTypeMethodReply\n\tTypeError\n\tTypeSignal\n\ttypeMax\n)\n\nfunc (t Type) String() string {\n\tswitch t {\n\tcase TypeMethodCall:\n\t\treturn \"method call\"\n\tcase TypeMethodReply:\n\t\treturn \"reply\"\n\tcase TypeError:\n\t\treturn \"error\"\n\tcase TypeSignal:\n\t\treturn \"signal\"\n\t}\n\treturn \"invalid\"\n}\n\n// HeaderField represents the possible byte codes for the headers\n// of a D-Bus message.\ntype HeaderField byte\n\nconst (\n\tFieldPath HeaderField = 1 + iota\n\tFieldInterface\n\tFieldMember\n\tFieldErrorName\n\tFieldReplySerial\n\tFieldDestination\n\tFieldSender\n\tFieldSignature\n\tFieldUnixFDs\n\tfieldMax\n)\n\n// An InvalidMessageError describes the reason why a D-Bus message is regarded as\n// invalid.\ntype InvalidMessageError string\n\nfunc (e InvalidMessageError) Error() string {\n\treturn \"dbus: invalid message: \" + string(e)\n}\n\n// fieldType are the types of the various header fields.\nvar fieldTypes = [fieldMax]reflect.Type{\n\tFieldPath:        objectPathType,\n\tFieldInterface:   stringType,\n\tFieldMember:      stringType,\n\tFieldErrorName:   stringType,\n\tFieldReplySerial: uint32Type,\n\tFieldDestination: stringType,\n\tFieldSender:      stringType,\n\tFieldSignature:   signatureType,\n\tFieldUnixFDs:     uint32Type,\n}\n\n// requiredFields lists the header fields that are required by the different\n// message types.\nvar requiredFields = [typeMax][]HeaderField{\n\tTypeMethodCall:  {FieldPath, FieldMember},\n\tTypeMethodReply: {FieldReplySerial},\n\tTypeError:       {FieldErrorName, FieldReplySerial},\n\tTypeSignal:      {FieldPath, FieldInterface, FieldMember},\n}\n\n// Message represents a single D-Bus message.\ntype Message struct {\n\tType\n\tFlags\n\tHeaders map[HeaderField]Variant\n\tBody    []any\n\n\tserial uint32\n}\n\ntype header struct {\n\tField byte\n\tVariant\n}\n\nfunc DecodeMessageWithFDs(rd io.Reader, fds []int) (msg *Message, err error) {\n\tvar order binary.ByteOrder\n\tvar hlength, length uint32\n\tvar typ, flags, proto byte\n\tvar headers []header\n\n\tb := make([]byte, 1)\n\t_, err = rd.Read(b)\n\tif err != nil {\n\t\treturn\n\t}\n\tswitch b[0] {\n\tcase 'l':\n\t\torder = binary.LittleEndian\n\tcase 'B':\n\t\torder = binary.BigEndian\n\tdefault:\n\t\treturn nil, InvalidMessageError(\"invalid byte order\")\n\t}\n\n\tdec := newDecoder(rd, order, fds)\n\tdec.pos = 1\n\n\tmsg = new(Message)\n\tvs, err := dec.Decode(Signature{\"yyyuu\"})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err = Store(vs, &typ, &flags, &proto, &length, &msg.serial); err != nil {\n\t\treturn nil, err\n\t}\n\tmsg.Type = Type(typ)\n\tmsg.Flags = Flags(flags)\n\n\t// get the header length separately because we need it later\n\tb = make([]byte, 4)\n\t_, err = io.ReadFull(rd, b)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err := binary.Read(bytes.NewBuffer(b), order, &hlength); err != nil {\n\t\treturn nil, err\n\t}\n\tif hlength+length+16 > 1<<27 {\n\t\treturn nil, InvalidMessageError(\"message is too long\")\n\t}\n\tdec = newDecoder(io.MultiReader(bytes.NewBuffer(b), rd), order, fds)\n\tdec.pos = 12\n\tvs, err = dec.Decode(Signature{\"a(yv)\"})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err = Store(vs, &headers); err != nil {\n\t\treturn nil, err\n\t}\n\n\tmsg.Headers = make(map[HeaderField]Variant)\n\tfor _, v := range headers {\n\t\tmsg.Headers[HeaderField(v.Field)] = v.Variant\n\t}\n\n\tdec.align(8)\n\tbody := make([]byte, int(length))\n\tif length != 0 {\n\t\t_, err := io.ReadFull(rd, body)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif err = msg.validateHeader(); err != nil {\n\t\treturn nil, err\n\t}\n\tsig, _ := msg.Headers[FieldSignature].value.(Signature)\n\tif sig.str != \"\" {\n\t\tbuf := bytes.NewBuffer(body)\n\t\tdec = newDecoder(buf, order, fds)\n\t\tvs, err := dec.Decode(sig)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tmsg.Body = vs\n\t}\n\n\treturn\n}\n\n// DecodeMessage tries to decode a single message in the D-Bus wire format\n// from the given reader. The byte order is figured out from the first byte.\n// The possibly returned error can be an error of the underlying reader, an\n// InvalidMessageError or a FormatError.\nfunc DecodeMessage(rd io.Reader) (msg *Message, err error) {\n\treturn DecodeMessageWithFDs(rd, make([]int, 0))\n}\n\ntype nullwriter struct{}\n\nfunc (nullwriter) Write(p []byte) (cnt int, err error) {\n\treturn len(p), nil\n}\n\nfunc (msg *Message) CountFds() (int, error) {\n\tif len(msg.Body) == 0 {\n\t\treturn 0, nil\n\t}\n\tenc := newEncoder(nullwriter{}, nativeEndian, make([]int, 0))\n\terr := enc.Encode(msg.Body...)\n\treturn len(enc.fds), err\n}\n\nfunc (msg *Message) EncodeToWithFDs(out io.Writer, order binary.ByteOrder) (fds []int, err error) {\n\tif err := msg.validateHeader(); err != nil {\n\t\treturn nil, err\n\t}\n\tvar vs [7]any\n\tswitch order {\n\tcase binary.LittleEndian:\n\t\tvs[0] = byte('l')\n\tcase binary.BigEndian:\n\t\tvs[0] = byte('B')\n\tdefault:\n\t\treturn nil, errors.New(\"dbus: invalid byte order\")\n\t}\n\tbody := new(bytes.Buffer)\n\tfds = make([]int, 0)\n\tenc := newEncoder(body, order, fds)\n\tif len(msg.Body) != 0 {\n\t\terr = enc.Encode(msg.Body...)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\tvs[1] = msg.Type\n\tvs[2] = msg.Flags\n\tvs[3] = protoVersion\n\tvs[4] = uint32(len(body.Bytes()))\n\tvs[5] = msg.serial\n\theaders := make([]header, 0, len(msg.Headers))\n\tfor k, v := range msg.Headers {\n\t\theaders = append(headers, header{byte(k), v})\n\t}\n\tvs[6] = headers\n\tvar buf bytes.Buffer\n\tenc = newEncoder(&buf, order, enc.fds)\n\terr = enc.Encode(vs[:]...)\n\tif err != nil {\n\t\treturn\n\t}\n\tenc.align(8)\n\tif _, err := body.WriteTo(&buf); err != nil {\n\t\treturn nil, err\n\t}\n\tif buf.Len() > 1<<27 {\n\t\treturn nil, InvalidMessageError(\"message is too long\")\n\t}\n\tif _, err := buf.WriteTo(out); err != nil {\n\t\treturn nil, err\n\t}\n\treturn enc.fds, nil\n}\n\n// EncodeTo encodes and sends a message to the given writer. The byte order must\n// be either binary.LittleEndian or binary.BigEndian. If the message is not\n// valid or an error occurs when writing, an error is returned.\nfunc (msg *Message) EncodeTo(out io.Writer, order binary.ByteOrder) (err error) {\n\t_, err = msg.EncodeToWithFDs(out, order)\n\treturn err\n}\n\n// IsValid checks whether msg is a valid message and returns an\n// InvalidMessageError or FormatError if it is not.\nfunc (msg *Message) IsValid() error {\n\treturn msg.EncodeTo(io.Discard, nativeEndian)\n}\n\nfunc (msg *Message) validateHeader() error {\n\tif msg.Flags & ^(FlagNoAutoStart|FlagNoReplyExpected|FlagAllowInteractiveAuthorization) != 0 {\n\t\treturn InvalidMessageError(\"invalid flags\")\n\t}\n\tif msg.Type == 0 || msg.Type >= typeMax {\n\t\treturn InvalidMessageError(\"invalid message type\")\n\t}\n\tfor k, v := range msg.Headers {\n\t\tif k == 0 || k >= fieldMax {\n\t\t\treturn InvalidMessageError(\"invalid header\")\n\t\t}\n\t\tif reflect.TypeOf(v.value) != fieldTypes[k] {\n\t\t\treturn InvalidMessageError(\"invalid type of header field\")\n\t\t}\n\t}\n\tfor _, v := range requiredFields[msg.Type] {\n\t\tif _, ok := msg.Headers[v]; !ok {\n\t\t\treturn InvalidMessageError(\"missing required header\")\n\t\t}\n\t}\n\tif path, ok := msg.Headers[FieldPath]; ok {\n\t\tif !path.value.(ObjectPath).IsValid() {\n\t\t\treturn InvalidMessageError(\"invalid path name\")\n\t\t}\n\t}\n\tif iface, ok := msg.Headers[FieldInterface]; ok {\n\t\tif !isValidInterface(iface.value.(string)) {\n\t\t\treturn InvalidMessageError(\"invalid interface name\")\n\t\t}\n\t}\n\tif member, ok := msg.Headers[FieldMember]; ok {\n\t\tif !isValidMember(member.value.(string)) {\n\t\t\treturn InvalidMessageError(\"invalid member name\")\n\t\t}\n\t}\n\tif errname, ok := msg.Headers[FieldErrorName]; ok {\n\t\tif !isValidInterface(errname.value.(string)) {\n\t\t\treturn InvalidMessageError(\"invalid error name\")\n\t\t}\n\t}\n\tif len(msg.Body) != 0 {\n\t\tif _, ok := msg.Headers[FieldSignature]; !ok {\n\t\t\treturn InvalidMessageError(\"missing signature\")\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Serial returns the message's serial number. The returned value is only valid\n// for messages received by eavesdropping.\nfunc (msg *Message) Serial() uint32 {\n\treturn msg.serial\n}\n\n// String returns a string representation of a message similar to the format of\n// dbus-monitor.\nfunc (msg *Message) String() string {\n\tif err := msg.IsValid(); err != nil {\n\t\treturn \"<invalid>\"\n\t}\n\ts := msg.Type.String()\n\tif v, ok := msg.Headers[FieldSender]; ok {\n\t\ts += \" from \" + v.value.(string)\n\t}\n\tif v, ok := msg.Headers[FieldDestination]; ok {\n\t\ts += \" to \" + v.value.(string)\n\t}\n\ts += \" serial \" + strconv.FormatUint(uint64(msg.serial), 10)\n\tif v, ok := msg.Headers[FieldReplySerial]; ok {\n\t\ts += \" reply_serial \" + strconv.FormatUint(uint64(v.value.(uint32)), 10)\n\t}\n\tif v, ok := msg.Headers[FieldUnixFDs]; ok {\n\t\ts += \" unixfds \" + strconv.FormatUint(uint64(v.value.(uint32)), 10)\n\t}\n\tif v, ok := msg.Headers[FieldPath]; ok {\n\t\ts += \" path \" + string(v.value.(ObjectPath))\n\t}\n\tif v, ok := msg.Headers[FieldInterface]; ok {\n\t\ts += \" interface \" + v.value.(string)\n\t}\n\tif v, ok := msg.Headers[FieldErrorName]; ok {\n\t\ts += \" error \" + v.value.(string)\n\t}\n\tif v, ok := msg.Headers[FieldMember]; ok {\n\t\ts += \" member \" + v.value.(string)\n\t}\n\tif len(msg.Body) != 0 {\n\t\ts += \"\\n\"\n\t}\n\tfor i, v := range msg.Body {\n\t\ts += \"  \" + MakeVariant(v).String()\n\t\tif i != len(msg.Body)-1 {\n\t\t\ts += \"\\n\"\n\t\t}\n\t}\n\treturn s\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/object.go",
    "content": "package dbus\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"strings\"\n)\n\n// BusObject is the interface of a remote object on which methods can be\n// invoked.\ntype BusObject interface {\n\tCall(method string, flags Flags, args ...any) *Call\n\tCallWithContext(ctx context.Context, method string, flags Flags, args ...any) *Call\n\tGo(method string, flags Flags, ch chan *Call, args ...any) *Call\n\tGoWithContext(ctx context.Context, method string, flags Flags, ch chan *Call, args ...any) *Call\n\tAddMatchSignal(iface, member string, options ...MatchOption) *Call\n\tRemoveMatchSignal(iface, member string, options ...MatchOption) *Call\n\tGetProperty(p string) (Variant, error)\n\tStoreProperty(p string, value any) error\n\tSetProperty(p string, v any) error\n\tDestination() string\n\tPath() ObjectPath\n}\n\n// Object represents a remote object on which methods can be invoked.\ntype Object struct {\n\tconn *Conn\n\tdest string\n\tpath ObjectPath\n}\n\n// Call calls a method with (*Object).Go and waits for its reply.\nfunc (o *Object) Call(method string, flags Flags, args ...any) *Call {\n\treturn <-o.createCall(context.Background(), method, flags, make(chan *Call, 1), args...).Done\n}\n\n// CallWithContext acts like Call but takes a context\nfunc (o *Object) CallWithContext(ctx context.Context, method string, flags Flags, args ...any) *Call {\n\treturn <-o.createCall(ctx, method, flags, make(chan *Call, 1), args...).Done\n}\n\n// AddMatchSignal subscribes BusObject to signals from specified interface,\n// method (member). Additional filter rules can be added via WithMatch* option constructors.\n// Note: To filter events by object path you have to specify this path via an option.\n//\n// Deprecated: use (*Conn) AddMatchSignal instead.\nfunc (o *Object) AddMatchSignal(iface, member string, options ...MatchOption) *Call {\n\tbase := []MatchOption{\n\t\twithMatchTypeSignal(),\n\t\tWithMatchInterface(iface),\n\t\tWithMatchMember(member),\n\t}\n\n\toptions = append(base, options...)\n\treturn o.conn.BusObject().Call(\n\t\t\"org.freedesktop.DBus.AddMatch\",\n\t\t0,\n\t\tformatMatchOptions(options),\n\t)\n}\n\n// RemoveMatchSignal unsubscribes BusObject from signals from specified interface,\n// method (member). Additional filter rules can be added via WithMatch* option constructors\n//\n// Deprecated: use (*Conn) RemoveMatchSignal instead.\nfunc (o *Object) RemoveMatchSignal(iface, member string, options ...MatchOption) *Call {\n\tbase := []MatchOption{\n\t\twithMatchTypeSignal(),\n\t\tWithMatchInterface(iface),\n\t\tWithMatchMember(member),\n\t}\n\n\toptions = append(base, options...)\n\treturn o.conn.BusObject().Call(\n\t\t\"org.freedesktop.DBus.RemoveMatch\",\n\t\t0,\n\t\tformatMatchOptions(options),\n\t)\n}\n\n// Go calls a method with the given arguments asynchronously. It returns a\n// Call structure representing this method call. The passed channel will\n// return the same value once the call is done. If ch is nil, a new channel\n// will be allocated. Otherwise, ch has to be buffered or Go will panic.\n//\n// If the flags include FlagNoReplyExpected, ch is ignored and a Call structure\n// is returned with any error in Err and a closed channel in Done containing\n// the returned Call as it's one entry.\n//\n// If the method parameter contains a dot ('.'), the part before the last dot\n// specifies the interface on which the method is called.\nfunc (o *Object) Go(method string, flags Flags, ch chan *Call, args ...any) *Call {\n\treturn o.createCall(context.Background(), method, flags, ch, args...)\n}\n\n// GoWithContext acts like Go but takes a context\nfunc (o *Object) GoWithContext(ctx context.Context, method string, flags Flags, ch chan *Call, args ...any) *Call {\n\treturn o.createCall(ctx, method, flags, ch, args...)\n}\n\nfunc (o *Object) createCall(ctx context.Context, method string, flags Flags, ch chan *Call, args ...any) *Call {\n\tif ctx == nil {\n\t\tpanic(\"nil context\")\n\t}\n\tiface := \"\"\n\ti := strings.LastIndex(method, \".\")\n\tif i != -1 {\n\t\tiface = method[:i]\n\t}\n\tmethod = method[i+1:]\n\tmsg := new(Message)\n\tmsg.Type = TypeMethodCall\n\tmsg.Flags = flags & (FlagNoAutoStart | FlagNoReplyExpected)\n\tmsg.Headers = make(map[HeaderField]Variant)\n\tmsg.Headers[FieldPath] = MakeVariant(o.path)\n\tmsg.Headers[FieldDestination] = MakeVariant(o.dest)\n\tmsg.Headers[FieldMember] = MakeVariant(method)\n\tif iface != \"\" {\n\t\tmsg.Headers[FieldInterface] = MakeVariant(iface)\n\t}\n\tmsg.Body = args\n\tif len(args) > 0 {\n\t\tmsg.Headers[FieldSignature] = MakeVariant(SignatureOf(args...))\n\t}\n\treturn o.conn.SendWithContext(ctx, msg, ch)\n}\n\n// GetProperty calls org.freedesktop.DBus.Properties.Get on the given\n// object. The property name must be given in interface.member notation.\nfunc (o *Object) GetProperty(p string) (Variant, error) {\n\tvar result Variant\n\terr := o.StoreProperty(p, &result)\n\treturn result, err\n}\n\n// StoreProperty calls org.freedesktop.DBus.Properties.Get on the given\n// object. The property name must be given in interface.member notation.\n// It stores the returned property into the provided value.\nfunc (o *Object) StoreProperty(p string, value any) error {\n\tidx := strings.LastIndex(p, \".\")\n\tif idx == -1 || idx+1 == len(p) {\n\t\treturn errors.New(\"dbus: invalid property \" + p)\n\t}\n\n\tiface := p[:idx]\n\tprop := p[idx+1:]\n\n\treturn o.Call(\"org.freedesktop.DBus.Properties.Get\", 0, iface, prop).\n\t\tStore(value)\n}\n\n// SetProperty calls org.freedesktop.DBus.Properties.Set on the given\n// object. The property name must be given in interface.member notation.\n// Panics if v is not a valid Variant type.\nfunc (o *Object) SetProperty(p string, v any) error {\n\t// v might already be a variant...\n\tvariant, ok := v.(Variant)\n\tif !ok {\n\t\t// Otherwise, make it into one.\n\t\tvariant = MakeVariant(v)\n\t}\n\tidx := strings.LastIndex(p, \".\")\n\tif idx == -1 || idx+1 == len(p) {\n\t\treturn errors.New(\"dbus: invalid property \" + p)\n\t}\n\n\tiface := p[:idx]\n\tprop := p[idx+1:]\n\n\treturn o.Call(\"org.freedesktop.DBus.Properties.Set\", 0, iface, prop, variant).Err\n}\n\n// Destination returns the destination that calls on (o *Object) are sent to.\nfunc (o *Object) Destination() string {\n\treturn o.dest\n}\n\n// Path returns the path that calls on (o *Object\") are sent to.\nfunc (o *Object) Path() ObjectPath {\n\treturn o.path\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/sequence.go",
    "content": "package dbus\n\n// Sequence represents the value of a monotonically increasing counter.\ntype Sequence uint64\n\nconst (\n\t// NoSequence indicates the absence of a sequence value.\n\tNoSequence Sequence = 0\n)\n\n// sequenceGenerator represents a monotonically increasing counter.\ntype sequenceGenerator struct {\n\tnextSequence Sequence\n}\n\nfunc (generator *sequenceGenerator) next() Sequence {\n\tresult := generator.nextSequence\n\tgenerator.nextSequence++\n\treturn result\n}\n\nfunc newSequenceGenerator() *sequenceGenerator {\n\treturn &sequenceGenerator{nextSequence: 1}\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/sequential_handler.go",
    "content": "package dbus\n\nimport (\n\t\"sync\"\n)\n\n// NewSequentialSignalHandler returns an instance of a new\n// signal handler that guarantees sequential processing of signals. It is a\n// guarantee of this signal handler that signals will be written to\n// channels in the order they are received on the DBus connection.\nfunc NewSequentialSignalHandler() SignalHandler {\n\treturn &sequentialSignalHandler{}\n}\n\ntype sequentialSignalHandler struct {\n\tmu      sync.RWMutex\n\tclosed  bool\n\tsignals []*sequentialSignalChannelData\n}\n\nfunc (sh *sequentialSignalHandler) DeliverSignal(intf, name string, signal *Signal) {\n\tsh.mu.RLock()\n\tdefer sh.mu.RUnlock()\n\tif sh.closed {\n\t\treturn\n\t}\n\tfor _, scd := range sh.signals {\n\t\tscd.deliver(signal)\n\t}\n}\n\nfunc (sh *sequentialSignalHandler) Terminate() {\n\tsh.mu.Lock()\n\tdefer sh.mu.Unlock()\n\tif sh.closed {\n\t\treturn\n\t}\n\n\tfor _, scd := range sh.signals {\n\t\tscd.close()\n\t\tclose(scd.ch)\n\t}\n\tsh.closed = true\n\tsh.signals = nil\n}\n\nfunc (sh *sequentialSignalHandler) AddSignal(ch chan<- *Signal) {\n\tsh.mu.Lock()\n\tdefer sh.mu.Unlock()\n\tif sh.closed {\n\t\treturn\n\t}\n\tsh.signals = append(sh.signals, newSequentialSignalChannelData(ch))\n}\n\nfunc (sh *sequentialSignalHandler) RemoveSignal(ch chan<- *Signal) {\n\tsh.mu.Lock()\n\tdefer sh.mu.Unlock()\n\tif sh.closed {\n\t\treturn\n\t}\n\tfor i := len(sh.signals) - 1; i >= 0; i-- {\n\t\tif ch == sh.signals[i].ch {\n\t\t\tsh.signals[i].close()\n\t\t\tcopy(sh.signals[i:], sh.signals[i+1:])\n\t\t\tsh.signals[len(sh.signals)-1] = nil\n\t\t\tsh.signals = sh.signals[:len(sh.signals)-1]\n\t\t}\n\t}\n}\n\ntype sequentialSignalChannelData struct {\n\tch   chan<- *Signal\n\tin   chan *Signal\n\tdone chan struct{}\n}\n\nfunc newSequentialSignalChannelData(ch chan<- *Signal) *sequentialSignalChannelData {\n\tscd := &sequentialSignalChannelData{\n\t\tch:   ch,\n\t\tin:   make(chan *Signal),\n\t\tdone: make(chan struct{}),\n\t}\n\tgo scd.bufferSignals()\n\treturn scd\n}\n\nfunc (scd *sequentialSignalChannelData) bufferSignals() {\n\tdefer close(scd.done)\n\n\t// Ensure that signals are delivered to scd.ch in the same\n\t// order they are received from scd.in.\n\tvar queue []*Signal\n\tfor {\n\t\tif len(queue) == 0 {\n\t\t\tsignal, ok := <-scd.in\n\t\t\tif !ok {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tqueue = append(queue, signal)\n\t\t}\n\t\tselect {\n\t\tcase scd.ch <- queue[0]:\n\t\t\tcopy(queue, queue[1:])\n\t\t\tqueue[len(queue)-1] = nil\n\t\t\tqueue = queue[:len(queue)-1]\n\t\tcase signal, ok := <-scd.in:\n\t\t\tif !ok {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tqueue = append(queue, signal)\n\t\t}\n\t}\n}\n\nfunc (scd *sequentialSignalChannelData) deliver(signal *Signal) {\n\tscd.in <- signal\n}\n\nfunc (scd *sequentialSignalChannelData) close() {\n\tclose(scd.in)\n\t// Ensure that bufferSignals() has exited and won't attempt\n\t// any future sends on scd.ch\n\t<-scd.done\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/server_interfaces.go",
    "content": "package dbus\n\n// Terminator allows a handler to implement a shutdown mechanism that\n// is called when the connection terminates.\ntype Terminator interface {\n\tTerminate()\n}\n\n// Handler is the representation of a D-Bus Application.\n//\n// The Handler must have a way to lookup objects given\n// an ObjectPath. The returned object must implement the\n// ServerObject interface.\ntype Handler interface {\n\tLookupObject(path ObjectPath) (ServerObject, bool)\n}\n\n// ServerObject is the representation of an D-Bus Object.\n//\n// Objects are registered at a path for a given Handler.\n// The Objects implement D-Bus interfaces. The semantics\n// of Interface lookup is up to the implementation of\n// the ServerObject. The ServerObject implementation may\n// choose to implement empty string as a valid interface\n// representing all methods or not per the D-Bus specification.\ntype ServerObject interface {\n\tLookupInterface(name string) (Interface, bool)\n}\n\n// An Interface is the representation of a D-Bus Interface.\n//\n// Interfaces are a grouping of methods implemented by the Objects.\n// Interfaces are responsible for routing method calls.\ntype Interface interface {\n\tLookupMethod(name string) (Method, bool)\n}\n\n// A Method represents the exposed methods on D-Bus.\ntype Method interface {\n\t// Call requires that all arguments are decoded before being passed to it.\n\tCall(args ...any) ([]any, error)\n\tNumArguments() int\n\tNumReturns() int\n\t// ArgumentValue returns a representative value for the argument at position\n\t// it should be of the proper type. reflect.Zero would be a good mechanism\n\t// to use for this Value.\n\tArgumentValue(position int) any\n\t// ReturnValue returns a representative value for the return at position\n\t// it should be of the proper type. reflect.Zero would be a good mechanism\n\t// to use for this Value.\n\tReturnValue(position int) any\n}\n\n// An Argument Decoder can decode arguments using the non-standard mechanism\n//\n// If a method implements this interface then the non-standard\n// decoder will be used.\n//\n// Method arguments must be decoded from the message.\n// The mechanism for doing this will vary based on the\n// implementation of the method. A normal approach is provided\n// as part of this library, but may be replaced with\n// any other decoding scheme.\ntype ArgumentDecoder interface {\n\t// To decode the arguments of a method the sender and message are\n\t// provided in case the semantics of the implementer provides access\n\t// to these as part of the method invocation.\n\tDecodeArguments(conn *Conn, sender string, msg *Message, args []any) ([]any, error)\n}\n\n// A SignalHandler is responsible for delivering a signal.\n//\n// Signal delivery may be changed from the default channel\n// based approach by Handlers implementing the SignalHandler\n// interface.\ntype SignalHandler interface {\n\tDeliverSignal(iface, name string, signal *Signal)\n}\n\n// SignalRegistrar manages signal delivery channels.\n//\n// This is an optional set of methods for `SignalHandler`.\ntype SignalRegistrar interface {\n\tAddSignal(ch chan<- *Signal)\n\tRemoveSignal(ch chan<- *Signal)\n}\n\n// A DBusError is used to convert a generic object to a D-Bus error.\n//\n// Any custom error mechanism may implement this interface to provide\n// a custom encoding of the error on D-Bus. By default if a normal\n// error is returned, it will be encoded as the generic\n// \"org.freedesktop.DBus.Error.Failed\" error. By implementing this\n// interface as well a custom encoding may be provided.\ntype DBusError interface {\n\tDBusError() (string, []any)\n}\n\n// SerialGenerator is responsible for serials generation.\n//\n// Different approaches for the serial generation can be used,\n// maintaining a map guarded with a mutex (the standard way) or\n// simply increment an atomic counter.\ntype SerialGenerator interface {\n\tGetSerial() uint32\n\tRetireSerial(serial uint32)\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/sig.go",
    "content": "package dbus\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n)\n\nvar sigToType = map[byte]reflect.Type{\n\t'y': byteType,\n\t'b': boolType,\n\t'n': int16Type,\n\t'q': uint16Type,\n\t'i': int32Type,\n\t'u': uint32Type,\n\t'x': int64Type,\n\t't': uint64Type,\n\t'd': float64Type,\n\t's': stringType,\n\t'g': signatureType,\n\t'o': objectPathType,\n\t'v': variantType,\n\t'h': unixFDIndexType,\n}\n\n// Signature represents a correct type signature as specified by the D-Bus\n// specification. The zero value represents the empty signature, \"\".\ntype Signature struct {\n\tstr string\n}\n\n// SignatureOf returns the concatenation of all the signatures of the given\n// values. It panics if one of them is not representable in D-Bus.\nfunc SignatureOf(vs ...any) Signature {\n\tvar s string\n\tfor _, v := range vs {\n\t\ts += getSignature(reflect.TypeOf(v), &depthCounter{})\n\t}\n\treturn Signature{s}\n}\n\n// SignatureOfType returns the signature of the given type. It panics if the\n// type is not representable in D-Bus.\nfunc SignatureOfType(t reflect.Type) Signature {\n\treturn Signature{getSignature(t, &depthCounter{})}\n}\n\n// getSignature returns the signature of the given type and panics on unknown types.\nfunc getSignature(t reflect.Type, depth *depthCounter) (sig string) {\n\tif !depth.Valid() {\n\t\tpanic(\"container nesting too deep\")\n\t}\n\tdefer func() {\n\t\tif len(sig) > 255 {\n\t\t\tpanic(\"signature exceeds the length limitation\")\n\t\t}\n\t}()\n\t// handle simple types first\n\tswitch t.Kind() {\n\tcase reflect.Uint8:\n\t\treturn \"y\"\n\tcase reflect.Bool:\n\t\treturn \"b\"\n\tcase reflect.Int16:\n\t\treturn \"n\"\n\tcase reflect.Uint16:\n\t\treturn \"q\"\n\tcase reflect.Int, reflect.Int32:\n\t\tif t == unixFDType {\n\t\t\treturn \"h\"\n\t\t}\n\t\treturn \"i\"\n\tcase reflect.Uint, reflect.Uint32:\n\t\tif t == unixFDIndexType {\n\t\t\treturn \"h\"\n\t\t}\n\t\treturn \"u\"\n\tcase reflect.Int64:\n\t\treturn \"x\"\n\tcase reflect.Uint64:\n\t\treturn \"t\"\n\tcase reflect.Float64:\n\t\treturn \"d\"\n\tcase reflect.Ptr:\n\t\treturn getSignature(t.Elem(), depth)\n\tcase reflect.String:\n\t\tif t == objectPathType {\n\t\t\treturn \"o\"\n\t\t}\n\t\treturn \"s\"\n\tcase reflect.Struct:\n\t\tswitch t {\n\t\tcase variantType:\n\t\t\treturn \"v\"\n\t\tcase signatureType:\n\t\t\treturn \"g\"\n\t\t}\n\t\tvar s string\n\t\tfor i := 0; i < t.NumField(); i++ {\n\t\t\tfield := t.Field(i)\n\t\t\tif field.PkgPath == \"\" && field.Tag.Get(\"dbus\") != \"-\" {\n\t\t\t\ts += getSignature(t.Field(i).Type, depth.EnterStruct())\n\t\t\t}\n\t\t}\n\t\tif len(s) == 0 {\n\t\t\tpanic(InvalidTypeError{t})\n\t\t}\n\t\treturn \"(\" + s + \")\"\n\tcase reflect.Array, reflect.Slice:\n\t\treturn \"a\" + getSignature(t.Elem(), depth.EnterArray())\n\tcase reflect.Map:\n\t\tif !isKeyType(t.Key()) {\n\t\t\tpanic(InvalidTypeError{t})\n\t\t}\n\t\treturn \"a{\" + getSignature(t.Key(), depth.EnterArray().EnterDictEntry()) + getSignature(t.Elem(), depth.EnterArray().EnterDictEntry()) + \"}\"\n\tcase reflect.Interface:\n\t\treturn \"v\"\n\t}\n\tpanic(InvalidTypeError{t})\n}\n\n// ParseSignature returns the signature represented by this string, or a\n// SignatureError if the string is not a valid signature.\nfunc ParseSignature(s string) (sig Signature, err error) {\n\tif len(s) == 0 {\n\t\treturn\n\t}\n\tif len(s) > 255 {\n\t\treturn Signature{\"\"}, SignatureError{s, \"too long\"}\n\t}\n\tsig.str = s\n\tfor err == nil && len(s) != 0 {\n\t\terr, s = validSingle(s, &depthCounter{})\n\t}\n\tif err != nil {\n\t\tsig = Signature{\"\"}\n\t}\n\n\treturn\n}\n\n// ParseSignatureMust behaves like ParseSignature, except that it panics if s\n// is not valid.\nfunc ParseSignatureMust(s string) Signature {\n\tsig, err := ParseSignature(s)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn sig\n}\n\n// Empty returns whether the signature is the empty signature.\nfunc (s Signature) Empty() bool {\n\treturn s.str == \"\"\n}\n\n// Single returns whether the signature represents a single, complete type.\nfunc (s Signature) Single() bool {\n\terr, r := validSingle(s.str, &depthCounter{})\n\treturn err != nil && r == \"\"\n}\n\n// String returns the signature's string representation.\nfunc (s Signature) String() string {\n\treturn s.str\n}\n\n// A SignatureError indicates that a signature passed to a function or received\n// on a connection is not a valid signature.\ntype SignatureError struct {\n\tSig    string\n\tReason string\n}\n\nfunc (e SignatureError) Error() string {\n\treturn fmt.Sprintf(\"dbus: invalid signature: %q (%s)\", e.Sig, e.Reason)\n}\n\ntype depthCounter struct {\n\tarrayDepth, structDepth, dictEntryDepth int\n}\n\nfunc (cnt *depthCounter) Valid() bool {\n\treturn cnt.arrayDepth <= 32 && cnt.structDepth <= 32 && cnt.dictEntryDepth <= 32\n}\n\nfunc (cnt depthCounter) EnterArray() *depthCounter {\n\tcnt.arrayDepth++\n\treturn &cnt\n}\n\nfunc (cnt depthCounter) EnterStruct() *depthCounter {\n\tcnt.structDepth++\n\treturn &cnt\n}\n\nfunc (cnt depthCounter) EnterDictEntry() *depthCounter {\n\tcnt.dictEntryDepth++\n\treturn &cnt\n}\n\n// Try to read a single type from this string. If it was successful, err is nil\n// and rem is the remaining unparsed part. Otherwise, err is a non-nil\n// SignatureError and rem is \"\". depth is the current recursion depth which may\n// not be greater than 64 and should be given as 0 on the first call.\nfunc validSingle(s string, depth *depthCounter) (err error, rem string) { //nolint:staticcheck // Ignore \"ST1008: error should be returned as the last argument\".\n\tif s == \"\" {\n\t\treturn SignatureError{Sig: s, Reason: \"empty signature\"}, \"\"\n\t}\n\tif !depth.Valid() {\n\t\treturn SignatureError{Sig: s, Reason: \"container nesting too deep\"}, \"\"\n\t}\n\tswitch s[0] {\n\tcase 'y', 'b', 'n', 'q', 'i', 'u', 'x', 't', 'd', 's', 'g', 'o', 'v', 'h':\n\t\treturn nil, s[1:]\n\tcase 'a':\n\t\tif len(s) > 1 && s[1] == '{' {\n\t\t\ti := findMatching(s[1:], '{', '}')\n\t\t\tif i == -1 {\n\t\t\t\treturn SignatureError{Sig: s, Reason: \"unmatched '{'\"}, \"\"\n\t\t\t}\n\t\t\ti++\n\t\t\trem = s[i+1:]\n\t\t\ts = s[2:i]\n\t\t\tif len(s) == 0 {\n\t\t\t\treturn SignatureError{Sig: s, Reason: \"empty dict\"}, \"\"\n\t\t\t}\n\t\t\tif err, _ = validSingle(s[:1], depth.EnterArray().EnterDictEntry()); err != nil {\n\t\t\t\treturn err, \"\"\n\t\t\t}\n\t\t\terr, nr := validSingle(s[1:], depth.EnterArray().EnterDictEntry())\n\t\t\tif err != nil {\n\t\t\t\treturn err, \"\"\n\t\t\t}\n\t\t\tif nr != \"\" {\n\t\t\t\treturn SignatureError{Sig: s, Reason: \"too many types in dict\"}, \"\"\n\t\t\t}\n\t\t\treturn nil, rem\n\t\t}\n\t\treturn validSingle(s[1:], depth.EnterArray())\n\tcase '(':\n\t\ti := findMatching(s, '(', ')')\n\t\tif i == -1 {\n\t\t\treturn SignatureError{Sig: s, Reason: \"unmatched ')'\"}, \"\"\n\t\t}\n\t\trem = s[i+1:]\n\t\ts = s[1:i]\n\t\tfor err == nil && s != \"\" {\n\t\t\terr, s = validSingle(s, depth.EnterStruct())\n\t\t}\n\t\tif err != nil {\n\t\t\trem = \"\"\n\t\t}\n\t\treturn\n\t}\n\treturn SignatureError{Sig: s, Reason: \"invalid type character\"}, \"\"\n}\n\nfunc findMatching(s string, left, right rune) int {\n\tn := 0\n\tfor i, v := range s {\n\t\tswitch v {\n\t\tcase left:\n\t\t\tn++\n\t\tcase right:\n\t\t\tn--\n\t\t}\n\t\tif n == 0 {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\n// typeFor returns the type of the given signature. It ignores any left over\n// characters and panics if s doesn't start with a valid type signature.\nfunc typeFor(s string) (t reflect.Type) {\n\terr, _ := validSingle(s, &depthCounter{})\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tif t, ok := sigToType[s[0]]; ok {\n\t\treturn t\n\t}\n\tswitch s[0] {\n\tcase 'a':\n\t\tif s[1] == '{' {\n\t\t\ti := strings.LastIndex(s, \"}\")\n\t\t\tt = reflect.MapOf(sigToType[s[2]], typeFor(s[3:i]))\n\t\t} else {\n\t\t\tt = reflect.SliceOf(typeFor(s[1:]))\n\t\t}\n\tcase '(':\n\t\tt = interfacesType\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/transport_darwin.go",
    "content": "package dbus\n\nfunc (t *unixTransport) SendNullByte() error {\n\t_, err := t.Write([]byte{0})\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/transport_generic.go",
    "content": "package dbus\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"io\"\n\t\"unsafe\"\n)\n\nvar nativeEndian binary.ByteOrder\n\nfunc detectEndianness() binary.ByteOrder {\n\tvar x uint32 = 0x01020304\n\tif *(*byte)(unsafe.Pointer(&x)) == 0x01 {\n\t\treturn binary.BigEndian\n\t}\n\treturn binary.LittleEndian\n}\n\nfunc init() {\n\tnativeEndian = detectEndianness()\n}\n\ntype genericTransport struct {\n\tio.ReadWriteCloser\n}\n\nfunc (t genericTransport) SendNullByte() error {\n\t_, err := t.Write([]byte{0})\n\treturn err\n}\n\nfunc (t genericTransport) SupportsUnixFDs() bool {\n\treturn false\n}\n\nfunc (t genericTransport) EnableUnixFDs() {}\n\nfunc (t genericTransport) ReadMessage() (*Message, error) {\n\treturn DecodeMessage(t)\n}\n\nfunc (t genericTransport) SendMessage(msg *Message) error {\n\tfds, err := msg.CountFds()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif fds != 0 {\n\t\treturn errors.New(\"dbus: unix fd passing not enabled\")\n\t}\n\treturn msg.EncodeTo(t, nativeEndian)\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/transport_nonce_tcp.go",
    "content": "//go:build !windows\n\npackage dbus\n\nimport (\n\t\"errors\"\n\t\"net\"\n\t\"os\"\n)\n\nfunc init() {\n\ttransports[\"nonce-tcp\"] = newNonceTcpTransport\n}\n\nfunc newNonceTcpTransport(keys string) (transport, error) {\n\thost := getKey(keys, \"host\")\n\tport := getKey(keys, \"port\")\n\tnoncefile := getKey(keys, \"noncefile\")\n\tif host == \"\" || port == \"\" || noncefile == \"\" {\n\t\treturn nil, errors.New(\"dbus: unsupported address (must set host, port and noncefile)\")\n\t}\n\tprotocol, err := tcpFamily(keys)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsocket, err := net.Dial(protocol, net.JoinHostPort(host, port))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tb, err := os.ReadFile(noncefile)\n\tif err != nil {\n\t\tsocket.Close()\n\t\treturn nil, err\n\t}\n\t_, err = socket.Write(b)\n\tif err != nil {\n\t\tsocket.Close()\n\t\treturn nil, err\n\t}\n\treturn NewConn(socket)\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/transport_tcp.go",
    "content": "package dbus\n\nimport (\n\t\"errors\"\n\t\"net\"\n)\n\nfunc init() {\n\ttransports[\"tcp\"] = newTcpTransport\n}\n\nfunc tcpFamily(keys string) (string, error) {\n\tswitch getKey(keys, \"family\") {\n\tcase \"\":\n\t\treturn \"tcp\", nil\n\tcase \"ipv4\":\n\t\treturn \"tcp4\", nil\n\tcase \"ipv6\":\n\t\treturn \"tcp6\", nil\n\tdefault:\n\t\treturn \"\", errors.New(\"dbus: invalid tcp family (must be ipv4 or ipv6)\")\n\t}\n}\n\nfunc newTcpTransport(keys string) (transport, error) {\n\thost := getKey(keys, \"host\")\n\tport := getKey(keys, \"port\")\n\tif host == \"\" || port == \"\" {\n\t\treturn nil, errors.New(\"dbus: unsupported address (must set host and port)\")\n\t}\n\n\tprotocol, err := tcpFamily(keys)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsocket, err := net.Dial(protocol, net.JoinHostPort(host, port))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewConn(socket)\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/transport_unix.go",
    "content": "//go:build !windows && !solaris\n\npackage dbus\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"io\"\n\t\"net\"\n\t\"syscall\"\n)\n\n// msghead represents the part of the message header\n// that has a constant size (byte order + 15 bytes).\ntype msghead struct {\n\tType      Type\n\tFlags     Flags\n\tProto     byte\n\tBodyLen   uint32\n\tSerial    uint32\n\tHeaderLen uint32\n}\n\ntype oobReader struct {\n\tconn *net.UnixConn\n\toob  []byte\n\tbuf  [4096]byte\n\n\t// The following fields are used to reduce memory allocs.\n\theaders  []header\n\tcsheader []byte\n\tb        *bytes.Buffer\n\tr        *bytes.Reader\n\tdec      *decoder\n\tmsghead\n}\n\nfunc (o *oobReader) Read(b []byte) (n int, err error) {\n\tn, oobn, flags, _, err := o.conn.ReadMsgUnix(b, o.buf[:])\n\tif err != nil {\n\t\treturn n, err\n\t}\n\tif flags&syscall.MSG_CTRUNC != 0 {\n\t\treturn n, errors.New(\"dbus: control data truncated (too many fds received)\")\n\t}\n\to.oob = append(o.oob, o.buf[:oobn]...)\n\treturn n, nil\n}\n\ntype unixTransport struct {\n\t*net.UnixConn\n\trdr        *oobReader\n\thasUnixFDs bool\n}\n\nfunc newUnixTransportFromConn(conn *net.UnixConn) transport {\n\tt := new(unixTransport)\n\tt.UnixConn = conn\n\tt.hasUnixFDs = true\n\n\treturn t\n}\n\nfunc newUnixTransport(keys string) (transport, error) {\n\tvar err error\n\n\tt := new(unixTransport)\n\tabstract := getKey(keys, \"abstract\")\n\tpath := getKey(keys, \"path\")\n\tswitch {\n\tcase abstract == \"\" && path == \"\":\n\t\treturn nil, errors.New(\"dbus: invalid address (neither path nor abstract set)\")\n\tcase abstract != \"\" && path == \"\":\n\t\tt.UnixConn, err = net.DialUnix(\"unix\", nil, &net.UnixAddr{Name: \"@\" + abstract, Net: \"unix\"})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn t, nil\n\tcase abstract == \"\" && path != \"\":\n\t\tt.UnixConn, err = net.DialUnix(\"unix\", nil, &net.UnixAddr{Name: path, Net: \"unix\"})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn t, nil\n\tdefault:\n\t\treturn nil, errors.New(\"dbus: invalid address (both path and abstract set)\")\n\t}\n}\n\nfunc init() {\n\ttransports[\"unix\"] = newUnixTransport\n}\n\nfunc (t *unixTransport) EnableUnixFDs() {\n\tt.hasUnixFDs = true\n}\n\nfunc (t *unixTransport) ReadMessage() (*Message, error) {\n\t// To be sure that all bytes of out-of-band data are read, we use a special\n\t// reader that uses ReadUnix on the underlying connection instead of Read\n\t// and gathers the out-of-band data in a buffer.\n\tif t.rdr == nil {\n\t\tt.rdr = &oobReader{\n\t\t\tconn: t.UnixConn,\n\t\t\t// This buffer is used to decode the part of the header that has a constant size.\n\t\t\tcsheader: make([]byte, 16),\n\t\t\tb:        &bytes.Buffer{},\n\t\t\t// The reader helps to read from the buffer several times.\n\t\t\tr:   &bytes.Reader{},\n\t\t\tdec: &decoder{},\n\t\t}\n\t} else {\n\t\tt.rdr.oob = t.rdr.oob[:0]\n\t\tt.rdr.headers = t.rdr.headers[:0]\n\t}\n\tvar (\n\t\tr   = t.rdr.r\n\t\tb   = t.rdr.b\n\t\tdec = t.rdr.dec\n\t)\n\n\t_, err := io.ReadFull(t.rdr, t.rdr.csheader)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar order binary.ByteOrder\n\tswitch t.rdr.csheader[0] {\n\tcase 'l':\n\t\torder = binary.LittleEndian\n\tcase 'B':\n\t\torder = binary.BigEndian\n\tdefault:\n\t\treturn nil, InvalidMessageError(\"invalid byte order\")\n\t}\n\n\tr.Reset(t.rdr.csheader[1:])\n\tif err := binary.Read(r, order, &t.rdr.msghead); err != nil {\n\t\treturn nil, err\n\t}\n\n\tmsg := &Message{\n\t\tType:   t.rdr.Type,\n\t\tFlags:  t.rdr.Flags,\n\t\tserial: t.rdr.Serial,\n\t}\n\t// Length of header fields (without alignment).\n\thlen := t.rdr.HeaderLen\n\tif hlen%8 != 0 {\n\t\thlen += 8 - (hlen % 8)\n\t}\n\tif hlen+t.rdr.BodyLen+16 > 1<<27 {\n\t\treturn nil, InvalidMessageError(\"message is too long\")\n\t}\n\n\t// Decode headers and look for unix fds.\n\tb.Reset()\n\tif _, err = b.Write(t.rdr.csheader[12:]); err != nil {\n\t\treturn nil, err\n\t}\n\tif _, err = io.CopyN(b, t.rdr, int64(hlen)); err != nil {\n\t\treturn nil, err\n\t}\n\tdec.Reset(b, order, nil)\n\tdec.pos = 12\n\tvs, err := dec.Decode(Signature{\"a(yv)\"})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err = Store(vs, &t.rdr.headers); err != nil {\n\t\treturn nil, err\n\t}\n\tvar unixfds uint32\n\tfor _, v := range t.rdr.headers {\n\t\tif v.Field == byte(FieldUnixFDs) {\n\t\t\tunixfds, _ = v.value.(uint32)\n\t\t}\n\t}\n\n\tmsg.Headers = make(map[HeaderField]Variant)\n\tfor _, v := range t.rdr.headers {\n\t\tmsg.Headers[HeaderField(v.Field)] = v.Variant\n\t}\n\n\tdec.align(8)\n\tbody := make([]byte, t.rdr.BodyLen)\n\tif _, err = io.ReadFull(t.rdr, body); err != nil {\n\t\treturn nil, err\n\t}\n\tr.Reset(body)\n\n\tif unixfds != 0 {\n\t\tif !t.hasUnixFDs {\n\t\t\treturn nil, errors.New(\"dbus: got unix fds on unsupported transport\")\n\t\t}\n\t\t// read the fds from the OOB data\n\t\tscms, err := syscall.ParseSocketControlMessage(t.rdr.oob)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif len(scms) != 1 {\n\t\t\treturn nil, errors.New(\"dbus: received more than one socket control message\")\n\t\t}\n\t\tfds, err := syscall.ParseUnixRights(&scms[0])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdec.Reset(r, order, fds)\n\t\tif err = decodeMessageBody(msg, dec); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t// substitute the values in the message body (which are indices for the\n\t\t// array receiver via OOB) with the actual values\n\t\tfor i, v := range msg.Body {\n\t\t\tswitch index := v.(type) {\n\t\t\tcase UnixFDIndex:\n\t\t\t\tif uint32(index) >= unixfds {\n\t\t\t\t\treturn nil, InvalidMessageError(\"invalid index for unix fd\")\n\t\t\t\t}\n\t\t\t\tmsg.Body[i] = UnixFD(fds[index])\n\t\t\tcase []UnixFDIndex:\n\t\t\t\tfdArray := make([]UnixFD, len(index))\n\t\t\t\tfor k, j := range index {\n\t\t\t\t\tif uint32(j) >= unixfds {\n\t\t\t\t\t\treturn nil, InvalidMessageError(\"invalid index for unix fd\")\n\t\t\t\t\t}\n\t\t\t\t\tfdArray[k] = UnixFD(fds[j])\n\t\t\t\t}\n\t\t\t\tmsg.Body[i] = fdArray\n\t\t\t}\n\t\t}\n\t\treturn msg, nil\n\t}\n\n\tdec.Reset(r, order, nil)\n\tif err = decodeMessageBody(msg, dec); err != nil {\n\t\treturn nil, err\n\t}\n\treturn msg, nil\n}\n\nfunc decodeMessageBody(msg *Message, dec *decoder) error {\n\tif err := msg.validateHeader(); err != nil {\n\t\treturn err\n\t}\n\n\tsig, _ := msg.Headers[FieldSignature].value.(Signature)\n\tif sig.str == \"\" {\n\t\treturn nil\n\t}\n\n\tvar err error\n\tmsg.Body, err = dec.Decode(sig)\n\treturn err\n}\n\nfunc (t *unixTransport) SendMessage(msg *Message) error {\n\tfdcnt, err := msg.CountFds()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif fdcnt != 0 {\n\t\tif !t.hasUnixFDs {\n\t\t\treturn errors.New(\"dbus: unix fd passing not enabled\")\n\t\t}\n\t\tmsg.Headers[FieldUnixFDs] = MakeVariant(uint32(fdcnt))\n\t\tbuf := new(bytes.Buffer)\n\t\tfds, err := msg.EncodeToWithFDs(buf, nativeEndian)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\toob := syscall.UnixRights(fds...)\n\t\tn, oobn, err := t.WriteMsgUnix(buf.Bytes(), oob, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif n != buf.Len() || oobn != len(oob) {\n\t\t\treturn io.ErrShortWrite\n\t\t}\n\t} else {\n\t\tif err := msg.EncodeTo(t, nativeEndian); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (t *unixTransport) SupportsUnixFDs() bool {\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/transport_unixcred_dragonfly.go",
    "content": "// The UnixCredentials system call is currently only implemented on Linux\n// http://golang.org/src/pkg/syscall/sockcmsg_linux.go\n// https://golang.org/s/go1.4-syscall\n// http://code.google.com/p/go/source/browse/unix/sockcmsg_linux.go?repo=sys\n\n// Local implementation of the UnixCredentials system call for DragonFly BSD\n\npackage dbus\n\n/*\n#include <sys/ucred.h>\n*/\nimport \"C\"\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// http://golang.org/src/pkg/syscall/ztypes_linux_amd64.go\n// http://golang.org/src/pkg/syscall/ztypes_dragonfly_amd64.go\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\n// http://golang.org/src/pkg/syscall/types_linux.go\n// http://golang.org/src/pkg/syscall/types_dragonfly.go\n// https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/sys/sys/ucred.h\nconst (\n\tSizeofUcred = C.sizeof_struct_ucred\n)\n\n// http://golang.org/src/pkg/syscall/sockcmsg_unix.go\nfunc cmsgAlignOf(salen int) int {\n\t// From http://golang.org/src/pkg/syscall/sockcmsg_unix.go\n\t//salign := sizeofPtr\n\t// NOTE: It seems like 64-bit Darwin and DragonFly BSD kernels\n\t// still require 32-bit aligned access to network subsystem.\n\t//if darwin64Bit || dragonfly64Bit {\n\t//\tsalign = 4\n\t//}\n\tsalign := 4\n\treturn (salen + salign - 1) & ^(salign - 1)\n}\n\n// http://golang.org/src/pkg/syscall/sockcmsg_unix.go\nfunc cmsgData(h *syscall.Cmsghdr) unsafe.Pointer {\n\treturn unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(cmsgAlignOf(syscall.SizeofCmsghdr)))\n}\n\n// http://golang.org/src/pkg/syscall/sockcmsg_linux.go\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, syscall.CmsgSpace(SizeofUcred))\n\th := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = syscall.SOL_SOCKET\n\th.Type = syscall.SCM_CREDS\n\th.SetLen(syscall.CmsgLen(SizeofUcred))\n\t*((*Ucred)(cmsgData(h))) = *ucred\n\treturn b\n}\n\n// http://golang.org/src/pkg/syscall/sockcmsg_linux.go\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 *syscall.SocketControlMessage) (*Ucred, error) {\n\tif m.Header.Level != syscall.SOL_SOCKET {\n\t\treturn nil, syscall.EINVAL\n\t}\n\tif m.Header.Type != syscall.SCM_CREDS {\n\t\treturn nil, syscall.EINVAL\n\t}\n\tucred := *(*Ucred)(unsafe.Pointer(&m.Data[0]))\n\treturn &ucred, nil\n}\n\nfunc (t *unixTransport) SendNullByte() error {\n\tucred := &Ucred{Pid: int32(os.Getpid()), Uid: uint32(os.Getuid()), Gid: uint32(os.Getgid())}\n\tb := UnixCredentials(ucred)\n\t_, oobn, err := t.UnixConn.WriteMsgUnix([]byte{0}, b, nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif oobn != len(b) {\n\t\treturn io.ErrShortWrite\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/transport_unixcred_freebsd.go",
    "content": "// The UnixCredentials system call is currently only implemented on Linux\n// http://golang.org/src/pkg/syscall/sockcmsg_linux.go\n// https://golang.org/s/go1.4-syscall\n// http://code.google.com/p/go/source/browse/unix/sockcmsg_linux.go?repo=sys\n\n// Local implementation of the UnixCredentials system call for FreeBSD\n\npackage dbus\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// http://golang.org/src/pkg/syscall/ztypes_linux_amd64.go\n// https://golang.org/src/syscall/ztypes_freebsd_amd64.go\n//\n// Note: FreeBSD actually uses a 'struct cmsgcred' which starts with\n// these fields and adds a list of the additional groups for the\n// sender.\ntype Ucred struct {\n\tPid  int32\n\tUid  uint32\n\tEuid uint32\n\tGid  uint32\n}\n\n// https://github.com/freebsd/freebsd/blob/master/sys/sys/socket.h\n//\n// The cmsgcred structure contains the above four fields, followed by\n// a uint16 count of additional groups, uint16 padding to align and a\n// 16 element array of uint32 for the additional groups. The size is\n// the same across all supported platforms.\nconst (\n\tSizeofCmsgcred = 84 // 4*4 + 2*2 + 16*4\n)\n\n// http://golang.org/src/pkg/syscall/sockcmsg_unix.go\nfunc cmsgAlignOf(salen int) int {\n\tsalign := unix.SizeofPtr\n\n\treturn (salen + salign - 1) & ^(salign - 1)\n}\n\n// http://golang.org/src/pkg/syscall/sockcmsg_unix.go\nfunc cmsgData(h *syscall.Cmsghdr) unsafe.Pointer {\n\treturn unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(cmsgAlignOf(syscall.SizeofCmsghdr)))\n}\n\n// http://golang.org/src/pkg/syscall/sockcmsg_linux.go\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, syscall.CmsgSpace(SizeofCmsgcred))\n\th := (*syscall.Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = syscall.SOL_SOCKET\n\th.Type = syscall.SCM_CREDS\n\th.SetLen(syscall.CmsgLen(SizeofCmsgcred))\n\t*((*Ucred)(cmsgData(h))) = *ucred\n\treturn b\n}\n\n// http://golang.org/src/pkg/syscall/sockcmsg_linux.go\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 *syscall.SocketControlMessage) (*Ucred, error) {\n\tif m.Header.Level != syscall.SOL_SOCKET {\n\t\treturn nil, syscall.EINVAL\n\t}\n\tif m.Header.Type != syscall.SCM_CREDS {\n\t\treturn nil, syscall.EINVAL\n\t}\n\tucred := *(*Ucred)(unsafe.Pointer(&m.Data[0]))\n\treturn &ucred, nil\n}\n\nfunc (t *unixTransport) SendNullByte() error {\n\tucred := &Ucred{Pid: int32(os.Getpid()), Uid: uint32(os.Getuid()), Gid: uint32(os.Getgid())}\n\tb := UnixCredentials(ucred)\n\t_, oobn, err := t.UnixConn.WriteMsgUnix([]byte{0}, b, nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif oobn != len(b) {\n\t\treturn io.ErrShortWrite\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/transport_unixcred_linux.go",
    "content": "// The UnixCredentials system call is currently only implemented on Linux\n// http://golang.org/src/pkg/syscall/sockcmsg_linux.go\n// https://golang.org/s/go1.4-syscall\n// http://code.google.com/p/go/source/browse/unix/sockcmsg_linux.go?repo=sys\n\npackage dbus\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"syscall\"\n)\n\nfunc (t *unixTransport) SendNullByte() error {\n\tucred := &syscall.Ucred{Pid: int32(os.Getpid()), Uid: uint32(os.Getuid()), Gid: uint32(os.Getgid())}\n\tb := syscall.UnixCredentials(ucred)\n\t_, oobn, err := t.WriteMsgUnix([]byte{0}, b, nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif oobn != len(b) {\n\t\treturn io.ErrShortWrite\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/transport_unixcred_netbsd.go",
    "content": "package dbus\n\nimport \"io\"\n\nfunc (t *unixTransport) SendNullByte() error {\n\tn, _, err := t.UnixConn.WriteMsgUnix([]byte{0}, nil, nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif n != 1 {\n\t\treturn io.ErrShortWrite\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/transport_unixcred_openbsd.go",
    "content": "package dbus\n\nimport \"io\"\n\nfunc (t *unixTransport) SendNullByte() error {\n\tn, _, err := t.UnixConn.WriteMsgUnix([]byte{0}, nil, nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif n != 1 {\n\t\treturn io.ErrShortWrite\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/transport_zos.go",
    "content": "package dbus\n\nfunc (t *unixTransport) SendNullByte() error {\n\t_, err := t.Write([]byte{0})\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/variant.go",
    "content": "package dbus\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n)\n\n// Variant represents the D-Bus variant type.\ntype Variant struct {\n\tsig   Signature\n\tvalue any\n}\n\n// MakeVariant converts the given value to a Variant. It panics if v cannot be\n// represented as a D-Bus type.\nfunc MakeVariant(v any) Variant {\n\treturn MakeVariantWithSignature(v, SignatureOf(v))\n}\n\n// MakeVariantWithSignature converts the given value to a Variant.\nfunc MakeVariantWithSignature(v any, s Signature) Variant {\n\treturn Variant{s, v}\n}\n\n// ParseVariant parses the given string as a variant as described at\n// https://developer.gnome.org/glib/stable/gvariant-text.html. If sig is not\n// empty, it is taken to be the expected signature for the variant.\nfunc ParseVariant(s string, sig Signature) (Variant, error) {\n\ttokens := varLex(s)\n\tp := &varParser{tokens: tokens}\n\tn, err := varMakeNode(p)\n\tif err != nil {\n\t\treturn Variant{}, err\n\t}\n\tif sig.str == \"\" {\n\t\tsig, err = varInfer(n)\n\t\tif err != nil {\n\t\t\treturn Variant{}, err\n\t\t}\n\t}\n\tv, err := n.Value(sig)\n\tif err != nil {\n\t\treturn Variant{}, err\n\t}\n\treturn MakeVariant(v), nil\n}\n\n// format returns a formatted version of v and whether this string can be parsed\n// unambiguously.\nfunc (v Variant) format() (string, bool) {\n\tswitch v.sig.str[0] {\n\tcase 'b', 'i':\n\t\treturn fmt.Sprint(v.value), true\n\tcase 'n', 'q', 'u', 'x', 't', 'd', 'h':\n\t\treturn fmt.Sprint(v.value), false\n\tcase 's':\n\t\treturn strconv.Quote(v.value.(string)), true\n\tcase 'o':\n\t\treturn strconv.Quote(string(v.value.(ObjectPath))), false\n\tcase 'g':\n\t\treturn strconv.Quote(v.value.(Signature).str), false\n\tcase 'v':\n\t\ts, unamb := v.value.(Variant).format()\n\t\tif !unamb {\n\t\t\treturn \"<@\" + v.value.(Variant).sig.str + \" \" + s + \">\", true\n\t\t}\n\t\treturn \"<\" + s + \">\", true\n\tcase 'y':\n\t\treturn fmt.Sprintf(\"%#x\", v.value.(byte)), false\n\t}\n\trv := reflect.ValueOf(v.value)\n\tswitch rv.Kind() {\n\tcase reflect.Slice, reflect.Array:\n\t\tif rv.Len() == 0 {\n\t\t\treturn \"[]\", false\n\t\t}\n\t\tunamb := true\n\t\tbuf := bytes.NewBuffer([]byte(\"[\"))\n\t\tfor i := 0; i < rv.Len(); i++ {\n\t\t\t// TODO: slooow\n\t\t\ts, b := MakeVariant(rv.Index(i).Interface()).format()\n\t\t\tunamb = unamb && b\n\t\t\tbuf.WriteString(s)\n\t\t\tif i != rv.Len()-1 {\n\t\t\t\tbuf.WriteString(\", \")\n\t\t\t}\n\t\t}\n\t\tbuf.WriteByte(']')\n\t\treturn buf.String(), unamb\n\tcase reflect.Map:\n\t\tif rv.Len() == 0 {\n\t\t\treturn \"{}\", false\n\t\t}\n\t\tunamb := true\n\t\tvar buf bytes.Buffer\n\t\tkvs := make([]string, rv.Len())\n\t\tfor i, k := range rv.MapKeys() {\n\t\t\ts, b := MakeVariant(k.Interface()).format()\n\t\t\tunamb = unamb && b\n\t\t\tbuf.Reset()\n\t\t\tbuf.WriteString(s)\n\t\t\tbuf.WriteString(\": \")\n\t\t\ts, b = MakeVariant(rv.MapIndex(k).Interface()).format()\n\t\t\tunamb = unamb && b\n\t\t\tbuf.WriteString(s)\n\t\t\tkvs[i] = buf.String()\n\t\t}\n\t\tbuf.Reset()\n\t\tbuf.WriteByte('{')\n\t\tsort.Strings(kvs)\n\t\tfor i, kv := range kvs {\n\t\t\tif i > 0 {\n\t\t\t\tbuf.WriteString(\", \")\n\t\t\t}\n\t\t\tbuf.WriteString(kv)\n\t\t}\n\t\tbuf.WriteByte('}')\n\t\treturn buf.String(), unamb\n\tcase reflect.Struct:\n\t\tif rv.NumField() == 0 {\n\t\t\treturn \"()\", false\n\t\t}\n\t\tunamb := true\n\t\tvar buf bytes.Buffer\n\t\tbuf.WriteByte('(')\n\t\tfor i := 0; i < rv.NumField(); i++ {\n\t\t\ts, b := MakeVariant(rv.Field(i).Interface()).format()\n\t\t\tunamb = unamb && b\n\t\t\tbuf.WriteString(s)\n\t\t\tbuf.WriteString(\",\")\n\t\t\tif i != rv.NumField()-1 {\n\t\t\t\tbuf.WriteString(\" \")\n\t\t\t}\n\t\t}\n\t\tbuf.WriteByte(')')\n\t\treturn buf.String(), unamb\n\n\t}\n\treturn `\"INVALID\"`, true\n}\n\n// Signature returns the D-Bus signature of the underlying value of v.\nfunc (v Variant) Signature() Signature {\n\treturn v.sig\n}\n\n// String returns the string representation of the underlying value of v as\n// described at https://developer.gnome.org/glib/stable/gvariant-text.html.\nfunc (v Variant) String() string {\n\ts, unamb := v.format()\n\tif !unamb {\n\t\treturn \"@\" + v.sig.str + \" \" + s\n\t}\n\treturn s\n}\n\n// Value returns the underlying value of v.\nfunc (v Variant) Value() any {\n\treturn v.value\n}\n\n// Store converts the variant into a native go type using the same\n// mechanism as the \"Store\" function.\nfunc (v Variant) Store(value any) error {\n\treturn storeInterfaces(v.value, value)\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/variant_lexer.go",
    "content": "package dbus\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\n// Heavily inspired by the lexer from text/template.\n\ntype varToken struct {\n\ttyp varTokenType\n\tval string\n}\n\ntype varTokenType byte\n\nconst (\n\ttokEOF varTokenType = iota\n\ttokError\n\ttokNumber\n\ttokString\n\ttokBool\n\ttokArrayStart\n\ttokArrayEnd\n\ttokDictStart\n\ttokDictEnd\n\ttokVariantStart\n\ttokVariantEnd\n\ttokComma\n\ttokColon\n\ttokType\n\ttokByteString\n)\n\ntype varLexer struct {\n\tinput  string\n\tstart  int\n\tpos    int\n\twidth  int\n\ttokens []varToken\n}\n\ntype lexState func(*varLexer) lexState\n\nfunc varLex(s string) []varToken {\n\tl := &varLexer{input: s}\n\tl.run()\n\treturn l.tokens\n}\n\nfunc (l *varLexer) 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\nfunc (l *varLexer) backup() {\n\tl.pos -= l.width\n}\n\nfunc (l *varLexer) emit(t varTokenType) {\n\tl.tokens = append(l.tokens, varToken{t, l.input[l.start:l.pos]})\n\tl.start = l.pos\n}\n\nfunc (l *varLexer) errorf(format string, v ...any) lexState {\n\tl.tokens = append(l.tokens, varToken{\n\t\ttokError,\n\t\tfmt.Sprintf(format, v...),\n\t})\n\treturn nil\n}\n\nfunc (l *varLexer) ignore() {\n\tl.start = l.pos\n}\n\nfunc (l *varLexer) next() rune {\n\tvar r rune\n\n\tif l.pos >= len(l.input) {\n\t\tl.width = 0\n\t\treturn -1\n\t}\n\tr, l.width = utf8.DecodeRuneInString(l.input[l.pos:])\n\tl.pos += l.width\n\treturn r\n}\n\nfunc (l *varLexer) run() {\n\tfor state := varLexNormal; state != nil; {\n\t\tstate = state(l)\n\t}\n}\n\nfunc (l *varLexer) peek() rune {\n\tr := l.next()\n\tl.backup()\n\treturn r\n}\n\nfunc varLexNormal(l *varLexer) lexState {\n\tfor {\n\t\tr := l.next()\n\t\tswitch {\n\t\tcase r == -1:\n\t\t\tl.emit(tokEOF)\n\t\t\treturn nil\n\t\tcase r == '[':\n\t\t\tl.emit(tokArrayStart)\n\t\tcase r == ']':\n\t\t\tl.emit(tokArrayEnd)\n\t\tcase r == '{':\n\t\t\tl.emit(tokDictStart)\n\t\tcase r == '}':\n\t\t\tl.emit(tokDictEnd)\n\t\tcase r == '<':\n\t\t\tl.emit(tokVariantStart)\n\t\tcase r == '>':\n\t\t\tl.emit(tokVariantEnd)\n\t\tcase r == ':':\n\t\t\tl.emit(tokColon)\n\t\tcase r == ',':\n\t\t\tl.emit(tokComma)\n\t\tcase r == '\\'' || r == '\"':\n\t\t\tl.backup()\n\t\t\treturn varLexString\n\t\tcase r == '@':\n\t\t\tl.backup()\n\t\t\treturn varLexType\n\t\tcase unicode.IsSpace(r):\n\t\t\tl.ignore()\n\t\tcase unicode.IsNumber(r) || r == '+' || r == '-':\n\t\t\tl.backup()\n\t\t\treturn varLexNumber\n\t\tcase r == 'b':\n\t\t\tpos := l.start\n\t\t\tif n := l.peek(); n == '\"' || n == '\\'' {\n\t\t\t\treturn varLexByteString\n\t\t\t}\n\t\t\t// not a byte string; try to parse it as a type or bool below\n\t\t\tl.pos = pos + 1\n\t\t\tl.width = 1\n\t\t\tfallthrough\n\t\tdefault:\n\t\t\t// either a bool or a type. Try bools first.\n\t\t\tl.backup()\n\t\t\tif l.pos+4 <= len(l.input) {\n\t\t\t\tif l.input[l.pos:l.pos+4] == \"true\" {\n\t\t\t\t\tl.pos += 4\n\t\t\t\t\tl.emit(tokBool)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tif l.pos+5 <= len(l.input) {\n\t\t\t\tif l.input[l.pos:l.pos+5] == \"false\" {\n\t\t\t\t\tl.pos += 5\n\t\t\t\t\tl.emit(tokBool)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\t// must be a type.\n\t\t\treturn varLexType\n\t\t}\n\t}\n}\n\nvar varTypeMap = map[string]string{\n\t\"boolean\":    \"b\",\n\t\"byte\":       \"y\",\n\t\"int16\":      \"n\",\n\t\"uint16\":     \"q\",\n\t\"int32\":      \"i\",\n\t\"uint32\":     \"u\",\n\t\"int64\":      \"x\",\n\t\"uint64\":     \"t\",\n\t\"double\":     \"f\",\n\t\"string\":     \"s\",\n\t\"objectpath\": \"o\",\n\t\"signature\":  \"g\",\n}\n\nfunc varLexByteString(l *varLexer) lexState {\n\tq := l.next()\nLoop:\n\tfor {\n\t\tswitch l.next() {\n\t\tcase '\\\\':\n\t\t\tif r := l.next(); r != -1 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase -1:\n\t\t\treturn l.errorf(\"unterminated bytestring\")\n\t\tcase q:\n\t\t\tbreak Loop\n\t\t}\n\t}\n\tl.emit(tokByteString)\n\treturn varLexNormal\n}\n\nfunc varLexNumber(l *varLexer) lexState {\n\tl.accept(\"+-\")\n\tdigits := \"0123456789\"\n\tif l.accept(\"0\") {\n\t\tif l.accept(\"x\") {\n\t\t\tdigits = \"0123456789abcdefABCDEF\"\n\t\t} else {\n\t\t\tdigits = \"01234567\"\n\t\t}\n\t}\n\tfor strings.ContainsRune(digits, l.next()) {\n\t}\n\tl.backup()\n\tif l.accept(\".\") {\n\t\tfor strings.ContainsRune(digits, l.next()) {\n\t\t}\n\t\tl.backup()\n\t}\n\tif l.accept(\"eE\") {\n\t\tl.accept(\"+-\")\n\t\tfor strings.ContainsRune(\"0123456789\", l.next()) {\n\t\t}\n\t\tl.backup()\n\t}\n\tif r := l.peek(); unicode.IsLetter(r) {\n\t\tl.next()\n\t\treturn l.errorf(\"bad number syntax: %q\", l.input[l.start:l.pos])\n\t}\n\tl.emit(tokNumber)\n\treturn varLexNormal\n}\n\nfunc varLexString(l *varLexer) lexState {\n\tq := l.next()\nLoop:\n\tfor {\n\t\tswitch l.next() {\n\t\tcase '\\\\':\n\t\t\tif r := l.next(); r != -1 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase -1:\n\t\t\treturn l.errorf(\"unterminated string\")\n\t\tcase q:\n\t\t\tbreak Loop\n\t\t}\n\t}\n\tl.emit(tokString)\n\treturn varLexNormal\n}\n\nfunc varLexType(l *varLexer) lexState {\n\tat := l.accept(\"@\")\n\tfor {\n\t\tr := l.next()\n\t\tif r == -1 {\n\t\t\tbreak\n\t\t}\n\t\tif unicode.IsSpace(r) {\n\t\t\tl.backup()\n\t\t\tbreak\n\t\t}\n\t}\n\tif at {\n\t\tif _, err := ParseSignature(l.input[l.start+1 : l.pos]); err != nil {\n\t\t\treturn l.errorf(\"%s\", err)\n\t\t}\n\t} else {\n\t\tif _, ok := varTypeMap[l.input[l.start:l.pos]]; ok {\n\t\t\tl.emit(tokType)\n\t\t\treturn varLexNormal\n\t\t}\n\t\treturn l.errorf(\"unrecognized type %q\", l.input[l.start:l.pos])\n\t}\n\tl.emit(tokType)\n\treturn varLexNormal\n}\n"
  },
  {
    "path": "vendor/github.com/godbus/dbus/v5/variant_parser.go",
    "content": "package dbus\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\ntype varParser struct {\n\ttokens []varToken\n\ti      int\n}\n\nfunc (p *varParser) backup() {\n\tp.i--\n}\n\nfunc (p *varParser) next() varToken {\n\tif p.i < len(p.tokens) {\n\t\tt := p.tokens[p.i]\n\t\tp.i++\n\t\treturn t\n\t}\n\treturn varToken{typ: tokEOF}\n}\n\ntype varNode interface {\n\tInfer() (Signature, error)\n\tString() string\n\tSigs() sigSet\n\tValue(Signature) (any, error)\n}\n\nfunc varMakeNode(p *varParser) (varNode, error) {\n\tvar sig Signature\n\n\tfor {\n\t\tt := p.next()\n\t\tswitch t.typ {\n\t\tcase tokEOF:\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\tcase tokError:\n\t\t\treturn nil, errors.New(t.val)\n\t\tcase tokNumber:\n\t\t\treturn varMakeNumNode(t, sig)\n\t\tcase tokString:\n\t\t\treturn varMakeStringNode(t, sig)\n\t\tcase tokBool:\n\t\t\tif sig.str != \"\" && sig.str != \"b\" {\n\t\t\t\treturn nil, varTypeError{t.val, sig}\n\t\t\t}\n\t\t\tb, err := strconv.ParseBool(t.val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn boolNode(b), nil\n\t\tcase tokArrayStart:\n\t\t\treturn varMakeArrayNode(p, sig)\n\t\tcase tokVariantStart:\n\t\t\treturn varMakeVariantNode(p, sig)\n\t\tcase tokDictStart:\n\t\t\treturn varMakeDictNode(p, sig)\n\t\tcase tokType:\n\t\t\tif sig.str != \"\" {\n\t\t\t\treturn nil, errors.New(\"unexpected type annotation\")\n\t\t\t}\n\t\t\tif t.val[0] == '@' {\n\t\t\t\tsig.str = t.val[1:]\n\t\t\t} else {\n\t\t\t\tsig.str = varTypeMap[t.val]\n\t\t\t}\n\t\tcase tokByteString:\n\t\t\tif sig.str != \"\" && sig.str != \"ay\" {\n\t\t\t\treturn nil, varTypeError{t.val, sig}\n\t\t\t}\n\t\t\tb, err := varParseByteString(t.val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn byteStringNode(b), nil\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unexpected %q\", t.val)\n\t\t}\n\t}\n}\n\ntype varTypeError struct {\n\tval string\n\tsig Signature\n}\n\nfunc (e varTypeError) Error() string {\n\treturn fmt.Sprintf(\"dbus: can't parse %q as type %q\", e.val, e.sig.str)\n}\n\ntype sigSet map[Signature]bool\n\nfunc (s sigSet) Empty() bool {\n\treturn len(s) == 0\n}\n\nfunc (s sigSet) Intersect(s2 sigSet) sigSet {\n\tr := make(sigSet)\n\tfor k := range s {\n\t\tif s2[k] {\n\t\t\tr[k] = true\n\t\t}\n\t}\n\treturn r\n}\n\nfunc (s sigSet) Single() (Signature, bool) {\n\tif len(s) == 1 {\n\t\tfor k := range s {\n\t\t\treturn k, true\n\t\t}\n\t}\n\treturn Signature{}, false\n}\n\nfunc (s sigSet) ToArray() sigSet {\n\tr := make(sigSet, len(s))\n\tfor k := range s {\n\t\tr[Signature{\"a\" + k.str}] = true\n\t}\n\treturn r\n}\n\ntype numNode struct {\n\tsig Signature\n\tstr string\n\tval any\n}\n\nvar numSigSet = sigSet{\n\tSignature{\"y\"}: true,\n\tSignature{\"n\"}: true,\n\tSignature{\"q\"}: true,\n\tSignature{\"i\"}: true,\n\tSignature{\"u\"}: true,\n\tSignature{\"x\"}: true,\n\tSignature{\"t\"}: true,\n\tSignature{\"d\"}: true,\n}\n\nfunc (n numNode) Infer() (Signature, error) {\n\tif strings.ContainsAny(n.str, \".e\") {\n\t\treturn Signature{\"d\"}, nil\n\t}\n\treturn Signature{\"i\"}, nil\n}\n\nfunc (n numNode) String() string {\n\treturn n.str\n}\n\nfunc (n numNode) Sigs() sigSet {\n\tif n.sig.str != \"\" {\n\t\treturn sigSet{n.sig: true}\n\t}\n\tif strings.ContainsAny(n.str, \".e\") {\n\t\treturn sigSet{Signature{\"d\"}: true}\n\t}\n\treturn numSigSet\n}\n\nfunc (n numNode) Value(sig Signature) (any, error) {\n\tif n.sig.str != \"\" && n.sig != sig {\n\t\treturn nil, varTypeError{n.str, sig}\n\t}\n\tif n.val != nil {\n\t\treturn n.val, nil\n\t}\n\treturn varNumAs(n.str, sig)\n}\n\nfunc varMakeNumNode(tok varToken, sig Signature) (varNode, error) {\n\tif sig.str == \"\" {\n\t\treturn numNode{str: tok.val}, nil\n\t}\n\tnum, err := varNumAs(tok.val, sig)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn numNode{sig: sig, val: num}, nil\n}\n\nfunc varNumAs(s string, sig Signature) (any, error) {\n\tisUnsigned := false\n\tsize := 32\n\tswitch sig.str {\n\tcase \"n\":\n\t\tsize = 16\n\tcase \"i\":\n\tcase \"x\":\n\t\tsize = 64\n\tcase \"y\":\n\t\tsize = 8\n\t\tisUnsigned = true\n\tcase \"q\":\n\t\tsize = 16\n\t\tisUnsigned = true\n\tcase \"u\":\n\t\tisUnsigned = true\n\tcase \"t\":\n\t\tsize = 64\n\t\tisUnsigned = true\n\tcase \"d\":\n\t\td, err := strconv.ParseFloat(s, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn d, nil\n\tdefault:\n\t\treturn nil, varTypeError{s, sig}\n\t}\n\tbase := 10\n\tif after, ok := strings.CutPrefix(s, \"0x\"); ok {\n\t\tbase = 16\n\t\ts = after\n\t}\n\tif after, ok := strings.CutPrefix(s, \"0\"); ok && len(s) != 1 {\n\t\tbase = 8\n\t\ts = after\n\t}\n\tif isUnsigned {\n\t\ti, err := strconv.ParseUint(s, base, size)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvar v any = i\n\t\tswitch sig.str {\n\t\tcase \"y\":\n\t\t\tv = byte(i)\n\t\tcase \"q\":\n\t\t\tv = uint16(i)\n\t\tcase \"u\":\n\t\t\tv = uint32(i)\n\t\t}\n\t\treturn v, nil\n\t}\n\ti, err := strconv.ParseInt(s, base, size)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar v any = i\n\tswitch sig.str {\n\tcase \"n\":\n\t\tv = int16(i)\n\tcase \"i\":\n\t\tv = int32(i)\n\t}\n\treturn v, nil\n}\n\ntype stringNode struct {\n\tsig Signature\n\tstr string // parsed\n\tval any    // has correct type\n}\n\nvar stringSigSet = sigSet{\n\tSignature{\"s\"}: true,\n\tSignature{\"g\"}: true,\n\tSignature{\"o\"}: true,\n}\n\nfunc (n stringNode) Infer() (Signature, error) {\n\treturn Signature{\"s\"}, nil\n}\n\nfunc (n stringNode) String() string {\n\treturn n.str\n}\n\nfunc (n stringNode) Sigs() sigSet {\n\tif n.sig.str != \"\" {\n\t\treturn sigSet{n.sig: true}\n\t}\n\treturn stringSigSet\n}\n\nfunc (n stringNode) Value(sig Signature) (any, error) {\n\tif n.sig.str != \"\" && n.sig != sig {\n\t\treturn nil, varTypeError{n.str, sig}\n\t}\n\tif n.val != nil {\n\t\treturn n.val, nil\n\t}\n\tswitch sig.str {\n\tcase \"g\":\n\t\treturn Signature{n.str}, nil\n\tcase \"o\":\n\t\treturn ObjectPath(n.str), nil\n\tcase \"s\":\n\t\treturn n.str, nil\n\tdefault:\n\t\treturn nil, varTypeError{n.str, sig}\n\t}\n}\n\nfunc varMakeStringNode(tok varToken, sig Signature) (varNode, error) {\n\tif sig.str != \"\" && sig.str != \"s\" && sig.str != \"g\" && sig.str != \"o\" {\n\t\treturn nil, fmt.Errorf(\"invalid type %q for string\", sig.str)\n\t}\n\ts, err := varParseString(tok.val)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tn := stringNode{str: s}\n\tif sig.str == \"\" {\n\t\treturn stringNode{str: s}, nil\n\t}\n\tn.sig = sig\n\tswitch sig.str {\n\tcase \"o\":\n\t\tn.val = ObjectPath(s)\n\tcase \"g\":\n\t\tn.val = Signature{s}\n\tcase \"s\":\n\t\tn.val = s\n\t}\n\treturn n, nil\n}\n\nfunc varParseString(s string) (string, error) {\n\t// quotes are guaranteed to be there\n\ts = s[1 : len(s)-1]\n\tbuf := new(bytes.Buffer)\n\tfor len(s) != 0 {\n\t\tr, size := utf8.DecodeRuneInString(s)\n\t\tif r == utf8.RuneError && size == 1 {\n\t\t\treturn \"\", errors.New(\"invalid UTF-8\")\n\t\t}\n\t\ts = s[size:]\n\t\tif r != '\\\\' {\n\t\t\tbuf.WriteRune(r)\n\t\t\tcontinue\n\t\t}\n\t\tr, size = utf8.DecodeRuneInString(s)\n\t\tif r == utf8.RuneError && size == 1 {\n\t\t\treturn \"\", errors.New(\"invalid UTF-8\")\n\t\t}\n\t\ts = s[size:]\n\t\tswitch r {\n\t\tcase 'a':\n\t\t\tbuf.WriteRune(0x7)\n\t\tcase 'b':\n\t\t\tbuf.WriteRune(0x8)\n\t\tcase 'f':\n\t\t\tbuf.WriteRune(0xc)\n\t\tcase 'n':\n\t\t\tbuf.WriteRune('\\n')\n\t\tcase 'r':\n\t\t\tbuf.WriteRune('\\r')\n\t\tcase 't':\n\t\t\tbuf.WriteRune('\\t')\n\t\tcase '\\n':\n\t\tcase 'u':\n\t\t\tif len(s) < 4 {\n\t\t\t\treturn \"\", errors.New(\"short unicode escape\")\n\t\t\t}\n\t\t\tr, err := strconv.ParseUint(s[:4], 16, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\t\t\tbuf.WriteRune(rune(r))\n\t\t\ts = s[4:]\n\t\tcase 'U':\n\t\t\tif len(s) < 8 {\n\t\t\t\treturn \"\", errors.New(\"short unicode escape\")\n\t\t\t}\n\t\t\tr, err := strconv.ParseUint(s[:8], 16, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\t\t\tbuf.WriteRune(rune(r))\n\t\t\ts = s[8:]\n\t\tdefault:\n\t\t\tbuf.WriteRune(r)\n\t\t}\n\t}\n\treturn buf.String(), nil\n}\n\nvar boolSigSet = sigSet{Signature{\"b\"}: true}\n\ntype boolNode bool\n\nfunc (boolNode) Infer() (Signature, error) {\n\treturn Signature{\"b\"}, nil\n}\n\nfunc (b boolNode) String() string {\n\tif b {\n\t\treturn \"true\"\n\t}\n\treturn \"false\"\n}\n\nfunc (boolNode) Sigs() sigSet {\n\treturn boolSigSet\n}\n\nfunc (b boolNode) Value(sig Signature) (any, error) {\n\tif sig.str != \"b\" {\n\t\treturn nil, varTypeError{b.String(), sig}\n\t}\n\treturn bool(b), nil\n}\n\ntype arrayNode struct {\n\tset      sigSet\n\tchildren []varNode\n}\n\nfunc (n arrayNode) Infer() (Signature, error) {\n\tfor _, v := range n.children {\n\t\tcsig, err := varInfer(v)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\treturn Signature{\"a\" + csig.str}, nil\n\t}\n\treturn Signature{}, fmt.Errorf(\"can't infer type for %q\", n.String())\n}\n\nfunc (n arrayNode) String() string {\n\ts := \"[\"\n\tfor i, v := range n.children {\n\t\ts += v.String()\n\t\tif i != len(n.children)-1 {\n\t\t\ts += \", \"\n\t\t}\n\t}\n\treturn s + \"]\"\n}\n\nfunc (n arrayNode) Sigs() sigSet {\n\treturn n.set\n}\n\nfunc (n arrayNode) Value(sig Signature) (any, error) {\n\tif n.set.Empty() {\n\t\t// no type information whatsoever, so this must be an empty slice\n\t\treturn reflect.MakeSlice(typeFor(sig.str), 0, 0).Interface(), nil\n\t}\n\tif !n.set[sig] {\n\t\treturn nil, varTypeError{n.String(), sig}\n\t}\n\ts := reflect.MakeSlice(typeFor(sig.str), len(n.children), len(n.children))\n\tfor i, v := range n.children {\n\t\trv, err := v.Value(Signature{sig.str[1:]})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts.Index(i).Set(reflect.ValueOf(rv))\n\t}\n\treturn s.Interface(), nil\n}\n\nfunc varMakeArrayNode(p *varParser, sig Signature) (varNode, error) {\n\tvar n arrayNode\n\tif sig.str != \"\" {\n\t\tn.set = sigSet{sig: true}\n\t}\n\tif t := p.next(); t.typ == tokArrayEnd {\n\t\treturn n, nil\n\t} else {\n\t\tp.backup()\n\t}\nLoop:\n\tfor {\n\t\tt := p.next()\n\t\tswitch t.typ {\n\t\tcase tokEOF:\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\tcase tokError:\n\t\t\treturn nil, errors.New(t.val)\n\t\t}\n\t\tp.backup()\n\t\tcn, err := varMakeNode(p)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif cset := cn.Sigs(); !cset.Empty() {\n\t\t\tif n.set.Empty() {\n\t\t\t\tn.set = cset.ToArray()\n\t\t\t} else {\n\t\t\t\tnset := cset.ToArray().Intersect(n.set)\n\t\t\t\tif nset.Empty() {\n\t\t\t\t\treturn nil, fmt.Errorf(\"can't parse %q with given type information\", cn.String())\n\t\t\t\t}\n\t\t\t\tn.set = nset\n\t\t\t}\n\t\t}\n\t\tn.children = append(n.children, cn)\n\t\tswitch t := p.next(); t.typ {\n\t\tcase tokEOF:\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\tcase tokError:\n\t\t\treturn nil, errors.New(t.val)\n\t\tcase tokArrayEnd:\n\t\t\tbreak Loop\n\t\tcase tokComma:\n\t\t\tcontinue\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unexpected %q\", t.val)\n\t\t}\n\t}\n\treturn n, nil\n}\n\ntype variantNode struct {\n\tn varNode\n}\n\nvar variantSet = sigSet{\n\tSignature{\"v\"}: true,\n}\n\nfunc (variantNode) Infer() (Signature, error) {\n\treturn Signature{\"v\"}, nil\n}\n\nfunc (n variantNode) String() string {\n\treturn \"<\" + n.n.String() + \">\"\n}\n\nfunc (variantNode) Sigs() sigSet {\n\treturn variantSet\n}\n\nfunc (n variantNode) Value(sig Signature) (any, error) {\n\tif sig.str != \"v\" {\n\t\treturn nil, varTypeError{n.String(), sig}\n\t}\n\tsig, err := varInfer(n.n)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tv, err := n.n.Value(sig)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn MakeVariant(v), nil\n}\n\nfunc varMakeVariantNode(p *varParser, sig Signature) (varNode, error) {\n\tn, err := varMakeNode(p)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif t := p.next(); t.typ != tokVariantEnd {\n\t\treturn nil, fmt.Errorf(\"unexpected %q\", t.val)\n\t}\n\tvn := variantNode{n}\n\tif sig.str != \"\" && sig.str != \"v\" {\n\t\treturn nil, varTypeError{vn.String(), sig}\n\t}\n\treturn variantNode{n}, nil\n}\n\ntype dictEntry struct {\n\tkey, val varNode\n}\n\ntype dictNode struct {\n\tkset, vset sigSet\n\tchildren   []dictEntry\n}\n\nfunc (n dictNode) Infer() (Signature, error) {\n\tfor _, v := range n.children {\n\t\tksig, err := varInfer(v.key)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tvsig, err := varInfer(v.val)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\treturn Signature{\"a{\" + ksig.str + vsig.str + \"}\"}, nil\n\t}\n\treturn Signature{}, fmt.Errorf(\"can't infer type for %q\", n.String())\n}\n\nfunc (n dictNode) String() string {\n\ts := \"{\"\n\tfor i, v := range n.children {\n\t\ts += v.key.String() + \": \" + v.val.String()\n\t\tif i != len(n.children)-1 {\n\t\t\ts += \", \"\n\t\t}\n\t}\n\treturn s + \"}\"\n}\n\nfunc (n dictNode) Sigs() sigSet {\n\tr := sigSet{}\n\tfor k := range n.kset {\n\t\tfor v := range n.vset {\n\t\t\tsig := \"a{\" + k.str + v.str + \"}\"\n\t\t\tr[Signature{sig}] = true\n\t\t}\n\t}\n\treturn r\n}\n\nfunc (n dictNode) Value(sig Signature) (any, error) {\n\tset := n.Sigs()\n\tif set.Empty() {\n\t\t// no type information -> empty dict\n\t\treturn reflect.MakeMap(typeFor(sig.str)).Interface(), nil\n\t}\n\tif !set[sig] {\n\t\treturn nil, varTypeError{n.String(), sig}\n\t}\n\tm := reflect.MakeMap(typeFor(sig.str))\n\tksig := Signature{sig.str[2:3]}\n\tvsig := Signature{sig.str[3 : len(sig.str)-1]}\n\tfor _, v := range n.children {\n\t\tkv, err := v.key.Value(ksig)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvv, err := v.val.Value(vsig)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tm.SetMapIndex(reflect.ValueOf(kv), reflect.ValueOf(vv))\n\t}\n\treturn m.Interface(), nil\n}\n\nfunc varMakeDictNode(p *varParser, sig Signature) (varNode, error) {\n\tvar n dictNode\n\n\tif sig.str != \"\" {\n\t\tif len(sig.str) < 5 {\n\t\t\treturn nil, fmt.Errorf(\"invalid signature %q for dict type\", sig)\n\t\t}\n\t\tksig := Signature{string(sig.str[2])}\n\t\tvsig := Signature{sig.str[3 : len(sig.str)-1]}\n\t\tn.kset = sigSet{ksig: true}\n\t\tn.vset = sigSet{vsig: true}\n\t}\n\tif t := p.next(); t.typ == tokDictEnd {\n\t\treturn n, nil\n\t} else {\n\t\tp.backup()\n\t}\nLoop:\n\tfor {\n\t\tt := p.next()\n\t\tswitch t.typ {\n\t\tcase tokEOF:\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\tcase tokError:\n\t\t\treturn nil, errors.New(t.val)\n\t\t}\n\t\tp.backup()\n\t\tkn, err := varMakeNode(p)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif kset := kn.Sigs(); !kset.Empty() {\n\t\t\tif n.kset.Empty() {\n\t\t\t\tn.kset = kset\n\t\t\t} else {\n\t\t\t\tn.kset = kset.Intersect(n.kset)\n\t\t\t\tif n.kset.Empty() {\n\t\t\t\t\treturn nil, fmt.Errorf(\"can't parse %q with given type information\", kn.String())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tt = p.next()\n\t\tswitch t.typ {\n\t\tcase tokEOF:\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\tcase tokError:\n\t\t\treturn nil, errors.New(t.val)\n\t\tcase tokColon:\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unexpected %q\", t.val)\n\t\t}\n\t\tt = p.next()\n\t\tswitch t.typ {\n\t\tcase tokEOF:\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\tcase tokError:\n\t\t\treturn nil, errors.New(t.val)\n\t\t}\n\t\tp.backup()\n\t\tvn, err := varMakeNode(p)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif vset := vn.Sigs(); !vset.Empty() {\n\t\t\tif n.vset.Empty() {\n\t\t\t\tn.vset = vset\n\t\t\t} else {\n\t\t\t\tn.vset = n.vset.Intersect(vset)\n\t\t\t\tif n.vset.Empty() {\n\t\t\t\t\treturn nil, fmt.Errorf(\"can't parse %q with given type information\", vn.String())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tn.children = append(n.children, dictEntry{kn, vn})\n\t\tt = p.next()\n\t\tswitch t.typ {\n\t\tcase tokEOF:\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\tcase tokError:\n\t\t\treturn nil, errors.New(t.val)\n\t\tcase tokDictEnd:\n\t\t\tbreak Loop\n\t\tcase tokComma:\n\t\t\tcontinue\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unexpected %q\", t.val)\n\t\t}\n\t}\n\treturn n, nil\n}\n\ntype byteStringNode []byte\n\nvar byteStringSet = sigSet{\n\tSignature{\"ay\"}: true,\n}\n\nfunc (byteStringNode) Infer() (Signature, error) {\n\treturn Signature{\"ay\"}, nil\n}\n\nfunc (b byteStringNode) String() string {\n\treturn string(b)\n}\n\nfunc (b byteStringNode) Sigs() sigSet {\n\treturn byteStringSet\n}\n\nfunc (b byteStringNode) Value(sig Signature) (any, error) {\n\tif sig.str != \"ay\" {\n\t\treturn nil, varTypeError{b.String(), sig}\n\t}\n\treturn []byte(b), nil\n}\n\nfunc varParseByteString(s string) ([]byte, error) {\n\t// quotes and b at start are guaranteed to be there\n\tb := make([]byte, 0, 1)\n\ts = s[2 : len(s)-1]\n\tfor len(s) != 0 {\n\t\tc := s[0]\n\t\ts = s[1:]\n\t\tif c != '\\\\' {\n\t\t\tb = append(b, c)\n\t\t\tcontinue\n\t\t}\n\t\tc = s[0]\n\t\ts = s[1:]\n\t\tswitch c {\n\t\tcase 'a':\n\t\t\tb = append(b, 0x7)\n\t\tcase 'b':\n\t\t\tb = append(b, 0x8)\n\t\tcase 'f':\n\t\t\tb = append(b, 0xc)\n\t\tcase 'n':\n\t\t\tb = append(b, '\\n')\n\t\tcase 'r':\n\t\t\tb = append(b, '\\r')\n\t\tcase 't':\n\t\t\tb = append(b, '\\t')\n\t\tcase 'x':\n\t\t\tif len(s) < 2 {\n\t\t\t\treturn nil, errors.New(\"short escape\")\n\t\t\t}\n\t\t\tn, err := strconv.ParseUint(s[:2], 16, 8)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = append(b, byte(n))\n\t\t\ts = s[2:]\n\t\tcase '0':\n\t\t\tif len(s) < 3 {\n\t\t\t\treturn nil, errors.New(\"short escape\")\n\t\t\t}\n\t\t\tn, err := strconv.ParseUint(s[:3], 8, 8)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = append(b, byte(n))\n\t\t\ts = s[3:]\n\t\tdefault:\n\t\t\tb = append(b, c)\n\t\t}\n\t}\n\treturn append(b, 0), nil\n}\n\nfunc varInfer(n varNode) (Signature, error) {\n\tif sig, ok := n.Sigs().Single(); ok {\n\t\treturn sig, nil\n\t}\n\treturn n.Infer()\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/capability/CHANGELOG.md",
    "content": "# Changelog\nThis file documents all notable changes made to this project since the initial fork\nfrom https://github.com/syndtr/gocapability/commit/42c35b4376354fd5.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [0.4.0] - 2024-11-11\n\n### Added\n* New separate API for ambient ([GetAmbient], [SetAmbient], [ResetAmbient])\n  and bound ([GetBound], [DropBound]) capabilities, modelled after libcap. (#176)\n\n### Fixed\n* [Apply] now returns an error if called for non-zero `pid`. Before this change,\n  it could silently change some capabilities of the current process, instead of\n  the one identified by the `pid`. (#168, #174)\n* Fixed tests that change capabilities to be run in a separate process. (#173)\n* Other improvements in tests. (#169, #170)\n\n### Changed\n* Use raw syscalls (which are slightly faster). (#176)\n* Most tests are now limited to testing the public API of the package. (#162)\n* Simplify parsing /proc/*pid*/status, add a test case. (#162)\n* Optimize the number of syscall to set ambient capabilities in Apply\n  by clearing them first; add a test case. (#163, #164)\n* Better documentation for [Apply], [NewFile], [NewFile2], [NewPid], [NewPid2]. (#175)\n\n### Removed\n* `.golangci.yml` and `.codespellrc` are no longer part of the package. (#158)\n\n## [0.3.0] - 2024-09-25\n\n### Added\n* Added [ListKnown] and [ListSupported] functions. (#153)\n* [LastCap] is now available on non-Linux platforms (where it returns an error). (#152)\n\n### Changed\n* [List] is now deprecated in favor of [ListKnown] and [ListSupported]. (#153)\n\n### Fixed\n* Various documentation improvements. (#151)\n* Fix \"generated code\" comment. (#153)\n\n## [0.2.0] - 2024-09-16\n\nThis is the first release after the move to a new home in\ngithub.com/moby/sys/capability.\n\n### Fixed\n * Fixed URLs in documentation to reflect the new home.\n\n## [0.1.1] - 2024-08-01\n\nThis is a maintenance release, fixing a few minor issues.\n\n### Fixed\n * Fixed future kernel compatibility, for real this time. [#11]\n * Fixed [LastCap] to be a function. [#12]\n\n## [0.1.0] - 2024-07-31\n\nThis is an initial release since the fork.\n\n### Breaking changes\n\n * The `CAP_LAST_CAP` variable is removed; users need to modify the code to\n   use [LastCap] to get the value. [#6]\n * The code now requires Go >= 1.21.\n\n### Added\n * `go.mod` and `go.sum` files. [#2]\n * New [LastCap] function. [#6]\n * Basic CI using GHA infra. [#8], [#9]\n * README and CHANGELOG. [#10]\n\n### Fixed\n * Fixed ambient capabilities error handling in [Apply]. [#3]\n * Fixed future kernel compatibility. [#1]\n * Fixed various linter warnings. [#4], [#7]\n\n### Changed\n * Go build tags changed from old-style (`+build`) to new Go 1.17+ style (`go:build`). [#2]\n\n### Removed\n * Removed support for capabilities v1 and v2. [#1]\n * Removed init function so programs that use this package start faster. [#6]\n * Removed `CAP_LAST_CAP` (use [LastCap] instead). [#6]\n\n<!-- Doc links (please keep sorted). -->\n[Apply]: https://pkg.go.dev/github.com/moby/sys/capability#Capabilities.Apply\n[DropBound]: https://pkg.go.dev/github.com/moby/sys/capability#DropBound\n[GetAmbient]: https://pkg.go.dev/github.com/moby/sys/capability#GetAmbient\n[GetBound]: https://pkg.go.dev/github.com/moby/sys/capability#GetBound\n[LastCap]: https://pkg.go.dev/github.com/moby/sys/capability#LastCap\n[ListKnown]: https://pkg.go.dev/github.com/moby/sys/capability#ListKnown\n[ListSupported]: https://pkg.go.dev/github.com/moby/sys/capability#ListSupported\n[List]: https://pkg.go.dev/github.com/moby/sys/capability#List\n[NewFile2]: https://pkg.go.dev/github.com/moby/sys/capability#NewFile2\n[NewFile]: https://pkg.go.dev/github.com/moby/sys/capability#NewFile\n[NewPid2]: https://pkg.go.dev/github.com/moby/sys/capability#NewPid2\n[NewPid]: https://pkg.go.dev/github.com/moby/sys/capability#NewPid\n[ResetAmbient]: https://pkg.go.dev/github.com/moby/sys/capability#ResetAmbient\n[SetAmbient]: https://pkg.go.dev/github.com/moby/sys/capability#SetAmbient\n\n<!-- Minor releases. -->\n[0.4.0]: https://github.com/moby/sys/releases/tag/capability%2Fv0.4.0\n[0.3.0]: https://github.com/moby/sys/releases/tag/capability%2Fv0.3.0\n[0.2.0]: https://github.com/moby/sys/releases/tag/capability%2Fv0.2.0\n[0.1.1]: https://github.com/kolyshkin/capability/compare/v0.1.0...v0.1.1\n[0.1.0]: https://github.com/kolyshkin/capability/compare/42c35b4376354fd5...v0.1.0\n\n<!-- PRs in 0.1.x releases. -->\n[#1]: https://github.com/kolyshkin/capability/pull/1\n[#2]: https://github.com/kolyshkin/capability/pull/2\n[#3]: https://github.com/kolyshkin/capability/pull/3\n[#4]: https://github.com/kolyshkin/capability/pull/4\n[#6]: https://github.com/kolyshkin/capability/pull/6\n[#7]: https://github.com/kolyshkin/capability/pull/7\n[#8]: https://github.com/kolyshkin/capability/pull/8\n[#9]: https://github.com/kolyshkin/capability/pull/9\n[#10]: https://github.com/kolyshkin/capability/pull/10\n[#11]: https://github.com/kolyshkin/capability/pull/11\n[#12]: https://github.com/kolyshkin/capability/pull/12\n"
  },
  {
    "path": "vendor/github.com/moby/sys/capability/LICENSE",
    "content": "Copyright 2023 The Capability Authors.\nCopyright 2013 Suryandaru Triandana <syndtr@gmail.com>\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\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\nHOLDER 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/moby/sys/capability/README.md",
    "content": "This is a fork of (apparently no longer maintained)\nhttps://github.com/syndtr/gocapability package. It provides basic primitives to\nwork with [Linux capabilities][capabilities(7)].\n\nFor changes, see [CHANGELOG.md](./CHANGELOG.md).\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/moby/sys/capability/capability.svg)](https://pkg.go.dev/github.com/moby/sys/capability)\n\n## Alternatives\n\n * https://pkg.go.dev/kernel.org/pub/linux/libs/security/libcap/cap\n\n[capabilities(7)]: https://man7.org/linux/man-pages/man7/capabilities.7.html\n"
  },
  {
    "path": "vendor/github.com/moby/sys/capability/capability.go",
    "content": "// Copyright 2023 The Capability Authors.\n// Copyright 2013 Suryandaru Triandana <syndtr@gmail.com>\n// All rights reserved.\n//\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 capability provides utilities for manipulating POSIX capabilities.\npackage capability\n\ntype Capabilities interface {\n\t// Get check whether a capability present in the given\n\t// capabilities set. The 'which' value should be one of EFFECTIVE,\n\t// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.\n\tGet(which CapType, what Cap) bool\n\n\t// Empty check whether all capability bits of the given capabilities\n\t// set are zero. The 'which' value should be one of EFFECTIVE,\n\t// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.\n\tEmpty(which CapType) bool\n\n\t// Full check whether all capability bits of the given capabilities\n\t// set are one. The 'which' value should be one of EFFECTIVE,\n\t// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.\n\tFull(which CapType) bool\n\n\t// Set sets capabilities of the given capabilities sets. The\n\t// 'which' value should be one or combination (OR'ed) of EFFECTIVE,\n\t// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.\n\tSet(which CapType, caps ...Cap)\n\n\t// Unset unsets capabilities of the given capabilities sets. The\n\t// 'which' value should be one or combination (OR'ed) of EFFECTIVE,\n\t// PERMITTED, INHERITABLE, BOUNDING or AMBIENT.\n\tUnset(which CapType, caps ...Cap)\n\n\t// Fill sets all bits of the given capabilities kind to one. The\n\t// 'kind' value should be one or combination (OR'ed) of CAPS,\n\t// BOUNDS or AMBS.\n\tFill(kind CapType)\n\n\t// Clear sets all bits of the given capabilities kind to zero. The\n\t// 'kind' value should be one or combination (OR'ed) of CAPS,\n\t// BOUNDS or AMBS.\n\tClear(kind CapType)\n\n\t// String return current capabilities state of the given capabilities\n\t// set as string. The 'which' value should be one of EFFECTIVE,\n\t// PERMITTED, INHERITABLE BOUNDING or AMBIENT\n\tStringCap(which CapType) string\n\n\t// String return current capabilities state as string.\n\tString() string\n\n\t// Load load actual capabilities value. This will overwrite all\n\t// outstanding changes.\n\tLoad() error\n\n\t// Apply apply the capabilities settings, so all changes made by\n\t// [Set], [Unset], [Fill], or [Clear] will take effect.\n\tApply(kind CapType) error\n}\n\n// NewPid initializes a new [Capabilities] object for given pid when\n// it is nonzero, or for the current process if pid is 0.\n//\n// Deprecated: replace with [NewPid2] followed by optional [Capabilities.Load]\n// (only if needed). For example, replace:\n//\n//\tc, err := NewPid(0)\n//\tif err != nil {\n//\t\treturn err\n//\t}\n//\n// with:\n//\n//\tc, err := NewPid2(0)\n//\tif err != nil {\n//\t\treturn err\n//\t}\n//\terr = c.Load()\n//\tif err != nil {\n//\t\treturn err\n//\t}\nfunc NewPid(pid int) (Capabilities, error) {\n\tc, err := newPid(pid)\n\tif err != nil {\n\t\treturn c, err\n\t}\n\terr = c.Load()\n\treturn c, err\n}\n\n// NewPid2 initializes a new [Capabilities] object for given pid when\n// it is nonzero, or for the current process if pid is 0. This\n// does not load the process's current capabilities; if needed,\n// call [Capabilities.Load].\nfunc NewPid2(pid int) (Capabilities, error) {\n\treturn newPid(pid)\n}\n\n// NewFile initializes a new Capabilities object for given file path.\n//\n// Deprecated: replace with [NewFile2] followed by optional [Capabilities.Load]\n// (only if needed). For example, replace:\n//\n//\tc, err := NewFile(path)\n//\tif err != nil {\n//\t\treturn err\n//\t}\n//\n// with:\n//\n//\tc, err := NewFile2(path)\n//\tif err != nil {\n//\t\treturn err\n//\t}\n//\terr = c.Load()\n//\tif err != nil {\n//\t\treturn err\n//\t}\nfunc NewFile(path string) (Capabilities, error) {\n\tc, err := newFile(path)\n\tif err != nil {\n\t\treturn c, err\n\t}\n\terr = c.Load()\n\treturn c, err\n}\n\n// NewFile2 creates a new initialized [Capabilities] object for given\n// file path. This does not load the process's current capabilities;\n// if needed, call [Capabilities.Load].\nfunc NewFile2(path string) (Capabilities, error) {\n\treturn newFile(path)\n}\n\n// LastCap returns highest valid capability of the running kernel,\n// or an error if it can not be obtained.\n//\n// See also: [ListSupported].\nfunc LastCap() (Cap, error) {\n\treturn lastCap()\n}\n\n// GetAmbient determines if a specific ambient capability is raised in the\n// calling thread.\nfunc GetAmbient(c Cap) (bool, error) {\n\treturn getAmbient(c)\n}\n\n// SetAmbient raises or lowers specified ambient capabilities for the calling\n// thread. To complete successfully, the prevailing effective capability set\n// must have a raised CAP_SETPCAP. Further, to raise a specific ambient\n// capability the inheritable and permitted sets of the calling thread must\n// already contain the specified capability.\nfunc SetAmbient(raise bool, caps ...Cap) error {\n\treturn setAmbient(raise, caps...)\n}\n\n// ResetAmbient resets all of the ambient capabilities for the calling thread\n// to their lowered value.\nfunc ResetAmbient() error {\n\treturn resetAmbient()\n}\n\n// GetBound determines if a specific bounding capability is raised in the\n// calling thread.\nfunc GetBound(c Cap) (bool, error) {\n\treturn getBound(c)\n}\n\n// DropBound lowers the specified bounding set capability.\nfunc DropBound(caps ...Cap) error {\n\treturn dropBound(caps...)\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/capability/capability_linux.go",
    "content": "// Copyright 2023 The Capability Authors.\n// Copyright 2013 Suryandaru Triandana <syndtr@gmail.com>\n// All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage capability\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n)\n\nconst (\n\tlinuxCapVer1 = 0x19980330 // No longer supported.\n\tlinuxCapVer2 = 0x20071026 // No longer supported.\n\tlinuxCapVer3 = 0x20080522\n)\n\nvar lastCap = sync.OnceValues(func() (Cap, error) {\n\tf, err := os.Open(\"/proc/sys/kernel/cap_last_cap\")\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tbuf := make([]byte, 11)\n\tl, err := f.Read(buf)\n\tf.Close()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tbuf = buf[:l]\n\n\tlast, err := strconv.Atoi(strings.TrimSpace(string(buf)))\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn Cap(last), nil\n})\n\nfunc capUpperMask() uint32 {\n\tlast, err := lastCap()\n\tif err != nil || last < 32 {\n\t\treturn 0\n\t}\n\treturn (uint32(1) << (uint(last) - 31)) - 1\n}\n\nfunc mkStringCap(c Capabilities, which CapType) (ret string) {\n\tlast, err := lastCap()\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\tfor i, first := Cap(0), true; i <= last; i++ {\n\t\tif !c.Get(which, i) {\n\t\t\tcontinue\n\t\t}\n\t\tif first {\n\t\t\tfirst = false\n\t\t} else {\n\t\t\tret += \", \"\n\t\t}\n\t\tret += i.String()\n\t}\n\treturn\n}\n\nfunc mkString(c Capabilities, max CapType) (ret string) {\n\tret = \"{\"\n\tfor i := CapType(1); i <= max; i <<= 1 {\n\t\tret += \" \" + i.String() + \"=\\\"\"\n\t\tif c.Empty(i) {\n\t\t\tret += \"empty\"\n\t\t} else if c.Full(i) {\n\t\t\tret += \"full\"\n\t\t} else {\n\t\t\tret += c.StringCap(i)\n\t\t}\n\t\tret += \"\\\"\"\n\t}\n\tret += \" }\"\n\treturn\n}\n\nvar capVersion = sync.OnceValues(func() (uint32, error) {\n\tvar hdr capHeader\n\terr := capget(&hdr, nil)\n\treturn hdr.version, err\n})\n\nfunc newPid(pid int) (c Capabilities, retErr error) {\n\tver, err := capVersion()\n\tif err != nil {\n\t\tretErr = fmt.Errorf(\"unable to get capability version from the kernel: %w\", err)\n\t\treturn\n\t}\n\tswitch ver {\n\tcase linuxCapVer1, linuxCapVer2:\n\t\tretErr = errors.New(\"old/unsupported capability version (kernel older than 2.6.26?)\")\n\tdefault:\n\t\t// Either linuxCapVer3, or an unknown/future version (such as v4).\n\t\t// In the latter case, we fall back to v3 as the latest version known\n\t\t// to this package, as kernel should be backward-compatible to v3.\n\t\tp := new(capsV3)\n\t\tp.hdr.version = linuxCapVer3\n\t\tp.hdr.pid = int32(pid)\n\t\tc = p\n\t}\n\treturn\n}\n\nfunc ignoreEINVAL(err error) error {\n\tif errors.Is(err, syscall.EINVAL) {\n\t\terr = nil\n\t}\n\treturn err\n}\n\ntype capsV3 struct {\n\thdr     capHeader\n\tdata    [2]capData\n\tbounds  [2]uint32\n\tambient [2]uint32\n}\n\nfunc (c *capsV3) Get(which CapType, what Cap) bool {\n\tvar i uint\n\tif what > 31 {\n\t\ti = uint(what) >> 5\n\t\twhat %= 32\n\t}\n\n\tswitch which {\n\tcase EFFECTIVE:\n\t\treturn (1<<uint(what))&c.data[i].effective != 0\n\tcase PERMITTED:\n\t\treturn (1<<uint(what))&c.data[i].permitted != 0\n\tcase INHERITABLE:\n\t\treturn (1<<uint(what))&c.data[i].inheritable != 0\n\tcase BOUNDING:\n\t\treturn (1<<uint(what))&c.bounds[i] != 0\n\tcase AMBIENT:\n\t\treturn (1<<uint(what))&c.ambient[i] != 0\n\t}\n\n\treturn false\n}\n\nfunc (c *capsV3) getData(which CapType, dest []uint32) {\n\tswitch which {\n\tcase EFFECTIVE:\n\t\tdest[0] = c.data[0].effective\n\t\tdest[1] = c.data[1].effective\n\tcase PERMITTED:\n\t\tdest[0] = c.data[0].permitted\n\t\tdest[1] = c.data[1].permitted\n\tcase INHERITABLE:\n\t\tdest[0] = c.data[0].inheritable\n\t\tdest[1] = c.data[1].inheritable\n\tcase BOUNDING:\n\t\tdest[0] = c.bounds[0]\n\t\tdest[1] = c.bounds[1]\n\tcase AMBIENT:\n\t\tdest[0] = c.ambient[0]\n\t\tdest[1] = c.ambient[1]\n\t}\n}\n\nfunc (c *capsV3) Empty(which CapType) bool {\n\tvar data [2]uint32\n\tc.getData(which, data[:])\n\treturn data[0] == 0 && data[1] == 0\n}\n\nfunc (c *capsV3) Full(which CapType) bool {\n\tvar data [2]uint32\n\tc.getData(which, data[:])\n\tif (data[0] & 0xffffffff) != 0xffffffff {\n\t\treturn false\n\t}\n\tmask := capUpperMask()\n\treturn (data[1] & mask) == mask\n}\n\nfunc (c *capsV3) Set(which CapType, caps ...Cap) {\n\tfor _, what := range caps {\n\t\tvar i uint\n\t\tif what > 31 {\n\t\t\ti = uint(what) >> 5\n\t\t\twhat %= 32\n\t\t}\n\n\t\tif which&EFFECTIVE != 0 {\n\t\t\tc.data[i].effective |= 1 << uint(what)\n\t\t}\n\t\tif which&PERMITTED != 0 {\n\t\t\tc.data[i].permitted |= 1 << uint(what)\n\t\t}\n\t\tif which&INHERITABLE != 0 {\n\t\t\tc.data[i].inheritable |= 1 << uint(what)\n\t\t}\n\t\tif which&BOUNDING != 0 {\n\t\t\tc.bounds[i] |= 1 << uint(what)\n\t\t}\n\t\tif which&AMBIENT != 0 {\n\t\t\tc.ambient[i] |= 1 << uint(what)\n\t\t}\n\t}\n}\n\nfunc (c *capsV3) Unset(which CapType, caps ...Cap) {\n\tfor _, what := range caps {\n\t\tvar i uint\n\t\tif what > 31 {\n\t\t\ti = uint(what) >> 5\n\t\t\twhat %= 32\n\t\t}\n\n\t\tif which&EFFECTIVE != 0 {\n\t\t\tc.data[i].effective &= ^(1 << uint(what))\n\t\t}\n\t\tif which&PERMITTED != 0 {\n\t\t\tc.data[i].permitted &= ^(1 << uint(what))\n\t\t}\n\t\tif which&INHERITABLE != 0 {\n\t\t\tc.data[i].inheritable &= ^(1 << uint(what))\n\t\t}\n\t\tif which&BOUNDING != 0 {\n\t\t\tc.bounds[i] &= ^(1 << uint(what))\n\t\t}\n\t\tif which&AMBIENT != 0 {\n\t\t\tc.ambient[i] &= ^(1 << uint(what))\n\t\t}\n\t}\n}\n\nfunc (c *capsV3) Fill(kind CapType) {\n\tif kind&CAPS == CAPS {\n\t\tc.data[0].effective = 0xffffffff\n\t\tc.data[0].permitted = 0xffffffff\n\t\tc.data[0].inheritable = 0\n\t\tc.data[1].effective = 0xffffffff\n\t\tc.data[1].permitted = 0xffffffff\n\t\tc.data[1].inheritable = 0\n\t}\n\n\tif kind&BOUNDS == BOUNDS {\n\t\tc.bounds[0] = 0xffffffff\n\t\tc.bounds[1] = 0xffffffff\n\t}\n\tif kind&AMBS == AMBS {\n\t\tc.ambient[0] = 0xffffffff\n\t\tc.ambient[1] = 0xffffffff\n\t}\n}\n\nfunc (c *capsV3) Clear(kind CapType) {\n\tif kind&CAPS == CAPS {\n\t\tc.data[0].effective = 0\n\t\tc.data[0].permitted = 0\n\t\tc.data[0].inheritable = 0\n\t\tc.data[1].effective = 0\n\t\tc.data[1].permitted = 0\n\t\tc.data[1].inheritable = 0\n\t}\n\n\tif kind&BOUNDS == BOUNDS {\n\t\tc.bounds[0] = 0\n\t\tc.bounds[1] = 0\n\t}\n\tif kind&AMBS == AMBS {\n\t\tc.ambient[0] = 0\n\t\tc.ambient[1] = 0\n\t}\n}\n\nfunc (c *capsV3) StringCap(which CapType) (ret string) {\n\treturn mkStringCap(c, which)\n}\n\nfunc (c *capsV3) String() (ret string) {\n\treturn mkString(c, BOUNDING)\n}\n\nfunc (c *capsV3) Load() (err error) {\n\terr = capget(&c.hdr, &c.data[0])\n\tif err != nil {\n\t\treturn\n\t}\n\n\tpath := \"/proc/self/status\"\n\tif c.hdr.pid != 0 {\n\t\tpath = fmt.Sprintf(\"/proc/%d/status\", c.hdr.pid)\n\t}\n\n\tf, err := os.Open(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tb := bufio.NewReader(f)\n\tfor {\n\t\tline, e := b.ReadString('\\n')\n\t\tif e != nil {\n\t\t\tif e != io.EOF {\n\t\t\t\terr = e\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tif val, ok := strings.CutPrefix(line, \"CapBnd:\\t\"); ok {\n\t\t\t_, err = fmt.Sscanf(val, \"%08x%08x\", &c.bounds[1], &c.bounds[0])\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif val, ok := strings.CutPrefix(line, \"CapAmb:\\t\"); ok {\n\t\t\t_, err = fmt.Sscanf(val, \"%08x%08x\", &c.ambient[1], &c.ambient[0])\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t}\n\tf.Close()\n\n\treturn\n}\n\nfunc (c *capsV3) Apply(kind CapType) error {\n\tif c.hdr.pid != 0 {\n\t\treturn errors.New(\"unable to modify capabilities of another process\")\n\t}\n\tlast, err := LastCap()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif kind&BOUNDS == BOUNDS {\n\t\tvar data [2]capData\n\t\terr = capget(&c.hdr, &data[0])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif (1<<uint(CAP_SETPCAP))&data[0].effective != 0 {\n\t\t\tfor i := Cap(0); i <= last; i++ {\n\t\t\t\tif c.Get(BOUNDING, i) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t// Ignore EINVAL since the capability may not be supported in this system.\n\t\t\t\terr = ignoreEINVAL(dropBound(i))\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}\n\n\tif kind&CAPS == CAPS {\n\t\terr = capset(&c.hdr, &c.data[0])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif kind&AMBS == AMBS {\n\t\t// Ignore EINVAL as not supported on kernels before 4.3\n\t\terr = ignoreEINVAL(resetAmbient())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfor i := Cap(0); i <= last; i++ {\n\t\t\tif !c.Get(AMBIENT, i) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// Ignore EINVAL as not supported on kernels before 4.3\n\t\t\terr = ignoreEINVAL(setAmbient(true, i))\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\nfunc getAmbient(c Cap) (bool, error) {\n\tres, err := prctlRetInt(pr_CAP_AMBIENT, pr_CAP_AMBIENT_IS_SET, uintptr(c))\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn res > 0, nil\n}\n\nfunc setAmbient(raise bool, caps ...Cap) error {\n\top := pr_CAP_AMBIENT_RAISE\n\tif !raise {\n\t\top = pr_CAP_AMBIENT_LOWER\n\t}\n\tfor _, val := range caps {\n\t\terr := prctl(pr_CAP_AMBIENT, op, uintptr(val))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc resetAmbient() error {\n\treturn prctl(pr_CAP_AMBIENT, pr_CAP_AMBIENT_CLEAR_ALL, 0)\n}\n\nfunc getBound(c Cap) (bool, error) {\n\tres, err := prctlRetInt(syscall.PR_CAPBSET_READ, uintptr(c), 0)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn res > 0, nil\n}\n\nfunc dropBound(caps ...Cap) error {\n\tfor _, val := range caps {\n\t\terr := prctl(syscall.PR_CAPBSET_DROP, uintptr(val), 0)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc newFile(path string) (c Capabilities, err error) {\n\tc = &capsFile{path: path}\n\treturn\n}\n\ntype capsFile struct {\n\tpath string\n\tdata vfscapData\n}\n\nfunc (c *capsFile) Get(which CapType, what Cap) bool {\n\tvar i uint\n\tif what > 31 {\n\t\tif c.data.version == 1 {\n\t\t\treturn false\n\t\t}\n\t\ti = uint(what) >> 5\n\t\twhat %= 32\n\t}\n\n\tswitch which {\n\tcase EFFECTIVE:\n\t\treturn (1<<uint(what))&c.data.effective[i] != 0\n\tcase PERMITTED:\n\t\treturn (1<<uint(what))&c.data.data[i].permitted != 0\n\tcase INHERITABLE:\n\t\treturn (1<<uint(what))&c.data.data[i].inheritable != 0\n\t}\n\n\treturn false\n}\n\nfunc (c *capsFile) getData(which CapType, dest []uint32) {\n\tswitch which {\n\tcase EFFECTIVE:\n\t\tdest[0] = c.data.effective[0]\n\t\tdest[1] = c.data.effective[1]\n\tcase PERMITTED:\n\t\tdest[0] = c.data.data[0].permitted\n\t\tdest[1] = c.data.data[1].permitted\n\tcase INHERITABLE:\n\t\tdest[0] = c.data.data[0].inheritable\n\t\tdest[1] = c.data.data[1].inheritable\n\t}\n}\n\nfunc (c *capsFile) Empty(which CapType) bool {\n\tvar data [2]uint32\n\tc.getData(which, data[:])\n\treturn data[0] == 0 && data[1] == 0\n}\n\nfunc (c *capsFile) Full(which CapType) bool {\n\tvar data [2]uint32\n\tc.getData(which, data[:])\n\tif c.data.version == 0 {\n\t\treturn (data[0] & 0x7fffffff) == 0x7fffffff\n\t}\n\tif (data[0] & 0xffffffff) != 0xffffffff {\n\t\treturn false\n\t}\n\tmask := capUpperMask()\n\treturn (data[1] & mask) == mask\n}\n\nfunc (c *capsFile) Set(which CapType, caps ...Cap) {\n\tfor _, what := range caps {\n\t\tvar i uint\n\t\tif what > 31 {\n\t\t\tif c.data.version == 1 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ti = uint(what) >> 5\n\t\t\twhat %= 32\n\t\t}\n\n\t\tif which&EFFECTIVE != 0 {\n\t\t\tc.data.effective[i] |= 1 << uint(what)\n\t\t}\n\t\tif which&PERMITTED != 0 {\n\t\t\tc.data.data[i].permitted |= 1 << uint(what)\n\t\t}\n\t\tif which&INHERITABLE != 0 {\n\t\t\tc.data.data[i].inheritable |= 1 << uint(what)\n\t\t}\n\t}\n}\n\nfunc (c *capsFile) Unset(which CapType, caps ...Cap) {\n\tfor _, what := range caps {\n\t\tvar i uint\n\t\tif what > 31 {\n\t\t\tif c.data.version == 1 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ti = uint(what) >> 5\n\t\t\twhat %= 32\n\t\t}\n\n\t\tif which&EFFECTIVE != 0 {\n\t\t\tc.data.effective[i] &= ^(1 << uint(what))\n\t\t}\n\t\tif which&PERMITTED != 0 {\n\t\t\tc.data.data[i].permitted &= ^(1 << uint(what))\n\t\t}\n\t\tif which&INHERITABLE != 0 {\n\t\t\tc.data.data[i].inheritable &= ^(1 << uint(what))\n\t\t}\n\t}\n}\n\nfunc (c *capsFile) Fill(kind CapType) {\n\tif kind&CAPS == CAPS {\n\t\tc.data.effective[0] = 0xffffffff\n\t\tc.data.data[0].permitted = 0xffffffff\n\t\tc.data.data[0].inheritable = 0\n\t\tif c.data.version == 2 {\n\t\t\tc.data.effective[1] = 0xffffffff\n\t\t\tc.data.data[1].permitted = 0xffffffff\n\t\t\tc.data.data[1].inheritable = 0\n\t\t}\n\t}\n}\n\nfunc (c *capsFile) Clear(kind CapType) {\n\tif kind&CAPS == CAPS {\n\t\tc.data.effective[0] = 0\n\t\tc.data.data[0].permitted = 0\n\t\tc.data.data[0].inheritable = 0\n\t\tif c.data.version == 2 {\n\t\t\tc.data.effective[1] = 0\n\t\t\tc.data.data[1].permitted = 0\n\t\t\tc.data.data[1].inheritable = 0\n\t\t}\n\t}\n}\n\nfunc (c *capsFile) StringCap(which CapType) (ret string) {\n\treturn mkStringCap(c, which)\n}\n\nfunc (c *capsFile) String() (ret string) {\n\treturn mkString(c, INHERITABLE)\n}\n\nfunc (c *capsFile) Load() (err error) {\n\treturn getVfsCap(c.path, &c.data)\n}\n\nfunc (c *capsFile) Apply(kind CapType) (err error) {\n\tif kind&CAPS == CAPS {\n\t\treturn setVfsCap(c.path, &c.data)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/capability/capability_noop.go",
    "content": "// Copyright 2023 The Capability Authors.\n// Copyright 2013 Suryandaru Triandana <syndtr@gmail.com>\n// All rights reserved.\n//\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 capability\n\nimport \"errors\"\n\nvar errNotSup = errors.New(\"not supported\")\n\nfunc newPid(_ int) (Capabilities, error) {\n\treturn nil, errNotSup\n}\n\nfunc newFile(_ string) (Capabilities, error) {\n\treturn nil, errNotSup\n}\n\nfunc lastCap() (Cap, error) {\n\treturn -1, errNotSup\n}\n\nfunc getAmbient(_ Cap) (bool, error) {\n\treturn false, errNotSup\n}\n\nfunc setAmbient(_ bool, _ ...Cap) error {\n\treturn errNotSup\n}\n\nfunc resetAmbient() error {\n\treturn errNotSup\n}\n\nfunc getBound(_ Cap) (bool, error) {\n\treturn false, errNotSup\n}\n\nfunc dropBound(_ ...Cap) error {\n\treturn errNotSup\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/capability/enum.go",
    "content": "// Copyright 2024 The Capability Authors.\n// Copyright 2013 Suryandaru Triandana <syndtr@gmail.com>\n// All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage capability\n\nimport \"slices\"\n\ntype CapType uint\n\nfunc (c CapType) String() string {\n\tswitch c {\n\tcase EFFECTIVE:\n\t\treturn \"effective\"\n\tcase PERMITTED:\n\t\treturn \"permitted\"\n\tcase INHERITABLE:\n\t\treturn \"inheritable\"\n\tcase BOUNDING:\n\t\treturn \"bounding\"\n\tcase CAPS:\n\t\treturn \"caps\"\n\tcase AMBIENT:\n\t\treturn \"ambient\"\n\t}\n\treturn \"unknown\"\n}\n\nconst (\n\tEFFECTIVE CapType = 1 << iota\n\tPERMITTED\n\tINHERITABLE\n\tBOUNDING\n\tAMBIENT\n\n\tCAPS   = EFFECTIVE | PERMITTED | INHERITABLE\n\tBOUNDS = BOUNDING\n\tAMBS   = AMBIENT\n)\n\n//go:generate go run enumgen/gen.go\ntype Cap int\n\n// POSIX-draft defined capabilities and Linux extensions.\n//\n// Defined in https://github.com/torvalds/linux/blob/master/include/uapi/linux/capability.h\nconst (\n\t// In a system with the [_POSIX_CHOWN_RESTRICTED] option defined, this\n\t// overrides the restriction of changing file ownership and group\n\t// ownership.\n\tCAP_CHOWN = Cap(0)\n\n\t// Override all DAC access, including ACL execute access if\n\t// [_POSIX_ACL] is defined. Excluding DAC access covered by\n\t// CAP_LINUX_IMMUTABLE.\n\tCAP_DAC_OVERRIDE = Cap(1)\n\n\t// Overrides all DAC restrictions regarding read and search on files\n\t// and directories, including ACL restrictions if [_POSIX_ACL] is\n\t// defined. Excluding DAC access covered by CAP_LINUX_IMMUTABLE.\n\tCAP_DAC_READ_SEARCH = Cap(2)\n\n\t// Overrides all restrictions about allowed operations on files, where\n\t// file owner ID must be equal to the user ID, except where CAP_FSETID\n\t// is applicable. It doesn't override MAC and DAC restrictions.\n\tCAP_FOWNER = Cap(3)\n\n\t// Overrides the following restrictions that the effective user ID\n\t// shall match the file owner ID when setting the S_ISUID and S_ISGID\n\t// bits on that file; that the effective group ID (or one of the\n\t// supplementary group IDs) shall match the file owner ID when setting\n\t// the S_ISGID bit on that file; that the S_ISUID and S_ISGID bits are\n\t// cleared on successful return from chown(2) (not implemented).\n\tCAP_FSETID = Cap(4)\n\n\t// Overrides the restriction that the real or effective user ID of a\n\t// process sending a signal must match the real or effective user ID\n\t// of the process receiving the signal.\n\tCAP_KILL = Cap(5)\n\n\t// Allows setgid(2) manipulation\n\t// Allows setgroups(2)\n\t// Allows forged gids on socket credentials passing.\n\tCAP_SETGID = Cap(6)\n\n\t// Allows set*uid(2) manipulation (including fsuid).\n\t// Allows forged pids on socket credentials passing.\n\tCAP_SETUID = Cap(7)\n\n\t// Linux-specific capabilities\n\n\t// Without VFS support for capabilities:\n\t//   Transfer any capability in your permitted set to any pid,\n\t//   remove any capability in your permitted set from any pid\n\t// With VFS support for capabilities (neither of above, but)\n\t//   Add any capability from current's capability bounding set\n\t//     to the current process' inheritable set\n\t//   Allow taking bits out of capability bounding set\n\t//   Allow modification of the securebits for a process\n\tCAP_SETPCAP = Cap(8)\n\n\t// Allow modification of S_IMMUTABLE and S_APPEND file attributes\n\tCAP_LINUX_IMMUTABLE = Cap(9)\n\n\t// Allows binding to TCP/UDP sockets below 1024\n\t// Allows binding to ATM VCIs below 32\n\tCAP_NET_BIND_SERVICE = Cap(10)\n\n\t// Allow broadcasting, listen to multicast\n\tCAP_NET_BROADCAST = Cap(11)\n\n\t// Allow interface configuration\n\t// Allow administration of IP firewall, masquerading and accounting\n\t// Allow setting debug option on sockets\n\t// Allow modification of routing tables\n\t// Allow setting arbitrary process / process group ownership on\n\t// sockets\n\t// Allow binding to any address for transparent proxying (also via NET_RAW)\n\t// Allow setting TOS (type of service)\n\t// Allow setting promiscuous mode\n\t// Allow clearing driver statistics\n\t// Allow multicasting\n\t// Allow read/write of device-specific registers\n\t// Allow activation of ATM control sockets\n\tCAP_NET_ADMIN = Cap(12)\n\n\t// Allow use of RAW sockets\n\t// Allow use of PACKET sockets\n\t// Allow binding to any address for transparent proxying (also via NET_ADMIN)\n\tCAP_NET_RAW = Cap(13)\n\n\t// Allow locking of shared memory segments\n\t// Allow mlock and mlockall (which doesn't really have anything to do\n\t// with IPC)\n\tCAP_IPC_LOCK = Cap(14)\n\n\t// Override IPC ownership checks\n\tCAP_IPC_OWNER = Cap(15)\n\n\t// Insert and remove kernel modules - modify kernel without limit\n\tCAP_SYS_MODULE = Cap(16)\n\n\t// Allow ioperm/iopl access\n\t// Allow sending USB messages to any device via /proc/bus/usb\n\tCAP_SYS_RAWIO = Cap(17)\n\n\t// Allow use of chroot()\n\tCAP_SYS_CHROOT = Cap(18)\n\n\t// Allow ptrace() of any process\n\tCAP_SYS_PTRACE = Cap(19)\n\n\t// Allow configuration of process accounting\n\tCAP_SYS_PACCT = Cap(20)\n\n\t// Allow configuration of the secure attention key\n\t// Allow administration of the random device\n\t// Allow examination and configuration of disk quotas\n\t// Allow setting the domainname\n\t// Allow setting the hostname\n\t// Allow calling bdflush()\n\t// Allow mount() and umount(), setting up new smb connection\n\t// Allow some autofs root ioctls\n\t// Allow nfsservctl\n\t// Allow VM86_REQUEST_IRQ\n\t// Allow to read/write pci config on alpha\n\t// Allow irix_prctl on mips (setstacksize)\n\t// Allow flushing all cache on m68k (sys_cacheflush)\n\t// Allow removing semaphores\n\t// Used instead of CAP_CHOWN to \"chown\" IPC message queues, semaphores\n\t// and shared memory\n\t// Allow locking/unlocking of shared memory segment\n\t// Allow turning swap on/off\n\t// Allow forged pids on socket credentials passing\n\t// Allow setting readahead and flushing buffers on block devices\n\t// Allow setting geometry in floppy driver\n\t// Allow turning DMA on/off in xd driver\n\t// Allow administration of md devices (mostly the above, but some\n\t// extra ioctls)\n\t// Allow tuning the ide driver\n\t// Allow access to the nvram device\n\t// Allow administration of apm_bios, serial and bttv (TV) device\n\t// Allow manufacturer commands in isdn CAPI support driver\n\t// Allow reading non-standardized portions of pci configuration space\n\t// Allow DDI debug ioctl on sbpcd driver\n\t// Allow setting up serial ports\n\t// Allow sending raw qic-117 commands\n\t// Allow enabling/disabling tagged queuing on SCSI controllers and sending\n\t// arbitrary SCSI commands\n\t// Allow setting encryption key on loopback filesystem\n\t// Allow setting zone reclaim policy\n\t// Allow everything under CAP_BPF and CAP_PERFMON for backward compatibility\n\tCAP_SYS_ADMIN = Cap(21)\n\n\t// Allow use of reboot()\n\tCAP_SYS_BOOT = Cap(22)\n\n\t// Allow raising priority and setting priority on other (different\n\t// UID) processes\n\t// Allow use of FIFO and round-robin (realtime) scheduling on own\n\t// processes and setting the scheduling algorithm used by another\n\t// process.\n\t// Allow setting cpu affinity on other processes\n\tCAP_SYS_NICE = Cap(23)\n\n\t// Override resource limits. Set resource limits.\n\t// Override quota limits.\n\t// Override reserved space on ext2 filesystem\n\t// Modify data journaling mode on ext3 filesystem (uses journaling\n\t// resources)\n\t// NOTE: ext2 honors fsuid when checking for resource overrides, so\n\t// you can override using fsuid too\n\t// Override size restrictions on IPC message queues\n\t// Allow more than 64hz interrupts from the real-time clock\n\t// Override max number of consoles on console allocation\n\t// Override max number of keymaps\n\t// Control memory reclaim behavior\n\tCAP_SYS_RESOURCE = Cap(24)\n\n\t// Allow manipulation of system clock\n\t// Allow irix_stime on mips\n\t// Allow setting the real-time clock\n\tCAP_SYS_TIME = Cap(25)\n\n\t// Allow configuration of tty devices\n\t// Allow vhangup() of tty\n\tCAP_SYS_TTY_CONFIG = Cap(26)\n\n\t// Allow the privileged aspects of mknod()\n\tCAP_MKNOD = Cap(27)\n\n\t// Allow taking of leases on files\n\tCAP_LEASE = Cap(28)\n\n\tCAP_AUDIT_WRITE   = Cap(29)\n\tCAP_AUDIT_CONTROL = Cap(30)\n\tCAP_SETFCAP       = Cap(31)\n\n\t// Override MAC access.\n\t// The base kernel enforces no MAC policy.\n\t// An LSM may enforce a MAC policy, and if it does and it chooses\n\t// to implement capability based overrides of that policy, this is\n\t// the capability it should use to do so.\n\tCAP_MAC_OVERRIDE = Cap(32)\n\n\t// Allow MAC configuration or state changes.\n\t// The base kernel requires no MAC configuration.\n\t// An LSM may enforce a MAC policy, and if it does and it chooses\n\t// to implement capability based checks on modifications to that\n\t// policy or the data required to maintain it, this is the\n\t// capability it should use to do so.\n\tCAP_MAC_ADMIN = Cap(33)\n\n\t// Allow configuring the kernel's syslog (printk behaviour)\n\tCAP_SYSLOG = Cap(34)\n\n\t// Allow triggering something that will wake the system\n\tCAP_WAKE_ALARM = Cap(35)\n\n\t// Allow preventing system suspends\n\tCAP_BLOCK_SUSPEND = Cap(36)\n\n\t// Allow reading the audit log via multicast netlink socket\n\tCAP_AUDIT_READ = Cap(37)\n\n\t// Allow system performance and observability privileged operations\n\t// using perf_events, i915_perf and other kernel subsystems\n\tCAP_PERFMON = Cap(38)\n\n\t// CAP_BPF allows the following BPF operations:\n\t// - Creating all types of BPF maps\n\t// - Advanced verifier features\n\t//   - Indirect variable access\n\t//   - Bounded loops\n\t//   - BPF to BPF function calls\n\t//   - Scalar precision tracking\n\t//   - Larger complexity limits\n\t//   - Dead code elimination\n\t//   - And potentially other features\n\t// - Loading BPF Type Format (BTF) data\n\t// - Retrieve xlated and JITed code of BPF programs\n\t// - Use bpf_spin_lock() helper\n\t//\n\t// CAP_PERFMON relaxes the verifier checks further:\n\t// - BPF progs can use of pointer-to-integer conversions\n\t// - speculation attack hardening measures are bypassed\n\t// - bpf_probe_read to read arbitrary kernel memory is allowed\n\t// - bpf_trace_printk to print kernel memory is allowed\n\t//\n\t// CAP_SYS_ADMIN is required to use bpf_probe_write_user.\n\t//\n\t// CAP_SYS_ADMIN is required to iterate system wide loaded\n\t// programs, maps, links, BTFs and convert their IDs to file descriptors.\n\t//\n\t// CAP_PERFMON and CAP_BPF are required to load tracing programs.\n\t// CAP_NET_ADMIN and CAP_BPF are required to load networking programs.\n\tCAP_BPF = Cap(39)\n\n\t// Allow checkpoint/restore related operations.\n\t// Introduced in kernel 5.9\n\tCAP_CHECKPOINT_RESTORE = Cap(40)\n)\n\n// List returns the list of all capabilities known to the package.\n//\n// Deprecated: use [ListKnown] or [ListSupported] instead.\nfunc List() []Cap {\n\treturn ListKnown()\n}\n\n// ListKnown returns the list of all capabilities known to the package.\nfunc ListKnown() []Cap {\n\treturn list()\n}\n\n// ListSupported returns the list of all capabilities known to the package,\n// except those that are not supported by the currently running Linux kernel.\nfunc ListSupported() ([]Cap, error) {\n\tlast, err := LastCap()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn slices.DeleteFunc(list(), func(c Cap) bool {\n\t\t// Remove caps not supported by the kernel.\n\t\treturn c > last\n\t}), nil\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/capability/enum_gen.go",
    "content": "// Code generated by go generate; DO NOT EDIT.\n\npackage capability\n\nfunc (c Cap) String() string {\n\tswitch c {\n\tcase CAP_CHOWN:\n\t\treturn \"chown\"\n\tcase CAP_DAC_OVERRIDE:\n\t\treturn \"dac_override\"\n\tcase CAP_DAC_READ_SEARCH:\n\t\treturn \"dac_read_search\"\n\tcase CAP_FOWNER:\n\t\treturn \"fowner\"\n\tcase CAP_FSETID:\n\t\treturn \"fsetid\"\n\tcase CAP_KILL:\n\t\treturn \"kill\"\n\tcase CAP_SETGID:\n\t\treturn \"setgid\"\n\tcase CAP_SETUID:\n\t\treturn \"setuid\"\n\tcase CAP_SETPCAP:\n\t\treturn \"setpcap\"\n\tcase CAP_LINUX_IMMUTABLE:\n\t\treturn \"linux_immutable\"\n\tcase CAP_NET_BIND_SERVICE:\n\t\treturn \"net_bind_service\"\n\tcase CAP_NET_BROADCAST:\n\t\treturn \"net_broadcast\"\n\tcase CAP_NET_ADMIN:\n\t\treturn \"net_admin\"\n\tcase CAP_NET_RAW:\n\t\treturn \"net_raw\"\n\tcase CAP_IPC_LOCK:\n\t\treturn \"ipc_lock\"\n\tcase CAP_IPC_OWNER:\n\t\treturn \"ipc_owner\"\n\tcase CAP_SYS_MODULE:\n\t\treturn \"sys_module\"\n\tcase CAP_SYS_RAWIO:\n\t\treturn \"sys_rawio\"\n\tcase CAP_SYS_CHROOT:\n\t\treturn \"sys_chroot\"\n\tcase CAP_SYS_PTRACE:\n\t\treturn \"sys_ptrace\"\n\tcase CAP_SYS_PACCT:\n\t\treturn \"sys_pacct\"\n\tcase CAP_SYS_ADMIN:\n\t\treturn \"sys_admin\"\n\tcase CAP_SYS_BOOT:\n\t\treturn \"sys_boot\"\n\tcase CAP_SYS_NICE:\n\t\treturn \"sys_nice\"\n\tcase CAP_SYS_RESOURCE:\n\t\treturn \"sys_resource\"\n\tcase CAP_SYS_TIME:\n\t\treturn \"sys_time\"\n\tcase CAP_SYS_TTY_CONFIG:\n\t\treturn \"sys_tty_config\"\n\tcase CAP_MKNOD:\n\t\treturn \"mknod\"\n\tcase CAP_LEASE:\n\t\treturn \"lease\"\n\tcase CAP_AUDIT_WRITE:\n\t\treturn \"audit_write\"\n\tcase CAP_AUDIT_CONTROL:\n\t\treturn \"audit_control\"\n\tcase CAP_SETFCAP:\n\t\treturn \"setfcap\"\n\tcase CAP_MAC_OVERRIDE:\n\t\treturn \"mac_override\"\n\tcase CAP_MAC_ADMIN:\n\t\treturn \"mac_admin\"\n\tcase CAP_SYSLOG:\n\t\treturn \"syslog\"\n\tcase CAP_WAKE_ALARM:\n\t\treturn \"wake_alarm\"\n\tcase CAP_BLOCK_SUSPEND:\n\t\treturn \"block_suspend\"\n\tcase CAP_AUDIT_READ:\n\t\treturn \"audit_read\"\n\tcase CAP_PERFMON:\n\t\treturn \"perfmon\"\n\tcase CAP_BPF:\n\t\treturn \"bpf\"\n\tcase CAP_CHECKPOINT_RESTORE:\n\t\treturn \"checkpoint_restore\"\n\t}\n\treturn \"unknown\"\n}\n\nfunc list() []Cap {\n\treturn []Cap{\n\t\tCAP_CHOWN,\n\t\tCAP_DAC_OVERRIDE,\n\t\tCAP_DAC_READ_SEARCH,\n\t\tCAP_FOWNER,\n\t\tCAP_FSETID,\n\t\tCAP_KILL,\n\t\tCAP_SETGID,\n\t\tCAP_SETUID,\n\t\tCAP_SETPCAP,\n\t\tCAP_LINUX_IMMUTABLE,\n\t\tCAP_NET_BIND_SERVICE,\n\t\tCAP_NET_BROADCAST,\n\t\tCAP_NET_ADMIN,\n\t\tCAP_NET_RAW,\n\t\tCAP_IPC_LOCK,\n\t\tCAP_IPC_OWNER,\n\t\tCAP_SYS_MODULE,\n\t\tCAP_SYS_RAWIO,\n\t\tCAP_SYS_CHROOT,\n\t\tCAP_SYS_PTRACE,\n\t\tCAP_SYS_PACCT,\n\t\tCAP_SYS_ADMIN,\n\t\tCAP_SYS_BOOT,\n\t\tCAP_SYS_NICE,\n\t\tCAP_SYS_RESOURCE,\n\t\tCAP_SYS_TIME,\n\t\tCAP_SYS_TTY_CONFIG,\n\t\tCAP_MKNOD,\n\t\tCAP_LEASE,\n\t\tCAP_AUDIT_WRITE,\n\t\tCAP_AUDIT_CONTROL,\n\t\tCAP_SETFCAP,\n\t\tCAP_MAC_OVERRIDE,\n\t\tCAP_MAC_ADMIN,\n\t\tCAP_SYSLOG,\n\t\tCAP_WAKE_ALARM,\n\t\tCAP_BLOCK_SUSPEND,\n\t\tCAP_AUDIT_READ,\n\t\tCAP_PERFMON,\n\t\tCAP_BPF,\n\t\tCAP_CHECKPOINT_RESTORE,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/capability/syscall_linux.go",
    "content": "// Copyright 2024 The Capability Authors.\n// Copyright 2013 Suryandaru Triandana <syndtr@gmail.com>\n// All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage capability\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\ntype capHeader struct {\n\tversion uint32\n\tpid     int32\n}\n\ntype capData struct {\n\teffective   uint32\n\tpermitted   uint32\n\tinheritable uint32\n}\n\nfunc capget(hdr *capHeader, data *capData) (err error) {\n\t_, _, e1 := syscall.RawSyscall(syscall.SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc capset(hdr *capHeader, data *capData) (err error) {\n\t_, _, e1 := syscall.RawSyscall(syscall.SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// not yet in syscall\nconst (\n\tpr_CAP_AMBIENT           = 47\n\tpr_CAP_AMBIENT_IS_SET    = uintptr(1)\n\tpr_CAP_AMBIENT_RAISE     = uintptr(2)\n\tpr_CAP_AMBIENT_LOWER     = uintptr(3)\n\tpr_CAP_AMBIENT_CLEAR_ALL = uintptr(4)\n)\n\nfunc prctl(option int, arg2, arg3 uintptr) (err error) {\n\t_, _, e1 := syscall.RawSyscall(syscall.SYS_PRCTL, uintptr(option), arg2, arg3)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc prctlRetInt(option int, arg2, arg3 uintptr) (int, error) {\n\tret, _, err := syscall.RawSyscall(syscall.SYS_PRCTL, uintptr(option), arg2, arg3)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(ret), nil\n}\n\nconst (\n\tvfsXattrName = \"security.capability\"\n\n\tvfsCapVerMask = 0xff000000\n\tvfsCapVer1    = 0x01000000\n\tvfsCapVer2    = 0x02000000\n\n\tvfsCapFlagMask      = ^vfsCapVerMask\n\tvfsCapFlageffective = 0x000001\n\n\tvfscapDataSizeV1 = 4 * (1 + 2*1)\n\tvfscapDataSizeV2 = 4 * (1 + 2*2)\n)\n\ntype vfscapData struct {\n\tmagic uint32\n\tdata  [2]struct {\n\t\tpermitted   uint32\n\t\tinheritable uint32\n\t}\n\teffective [2]uint32\n\tversion   int8\n}\n\nvar _vfsXattrName *byte\n\nfunc init() {\n\t_vfsXattrName, _ = syscall.BytePtrFromString(vfsXattrName)\n}\n\nfunc getVfsCap(path string, dest *vfscapData) (err error) {\n\tvar _p0 *byte\n\t_p0, err = syscall.BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall.RawSyscall6(syscall.SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_vfsXattrName)), uintptr(unsafe.Pointer(dest)), vfscapDataSizeV2, 0, 0)\n\tif e1 != 0 {\n\t\tif e1 == syscall.ENODATA {\n\t\t\tdest.version = 2\n\t\t\treturn\n\t\t}\n\t\terr = e1\n\t}\n\tswitch dest.magic & vfsCapVerMask {\n\tcase vfsCapVer1:\n\t\tdest.version = 1\n\t\tif r0 != vfscapDataSizeV1 {\n\t\t\treturn syscall.EINVAL\n\t\t}\n\t\tdest.data[1].permitted = 0\n\t\tdest.data[1].inheritable = 0\n\tcase vfsCapVer2:\n\t\tdest.version = 2\n\t\tif r0 != vfscapDataSizeV2 {\n\t\t\treturn syscall.EINVAL\n\t\t}\n\tdefault:\n\t\treturn syscall.EINVAL\n\t}\n\tif dest.magic&vfsCapFlageffective != 0 {\n\t\tdest.effective[0] = dest.data[0].permitted | dest.data[0].inheritable\n\t\tdest.effective[1] = dest.data[1].permitted | dest.data[1].inheritable\n\t} else {\n\t\tdest.effective[0] = 0\n\t\tdest.effective[1] = 0\n\t}\n\treturn\n}\n\nfunc setVfsCap(path string, data *vfscapData) (err error) {\n\tvar _p0 *byte\n\t_p0, err = syscall.BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar size uintptr\n\tif data.version == 1 {\n\t\tdata.magic = vfsCapVer1\n\t\tsize = vfscapDataSizeV1\n\t} else if data.version == 2 {\n\t\tdata.magic = vfsCapVer2\n\t\tif data.effective[0] != 0 || data.effective[1] != 0 {\n\t\t\tdata.magic |= vfsCapFlageffective\n\t\t}\n\t\tsize = vfscapDataSizeV2\n\t} else {\n\t\treturn syscall.EINVAL\n\t}\n\t_, _, e1 := syscall.RawSyscall6(syscall.SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_vfsXattrName)), uintptr(unsafe.Pointer(data)), size, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/mountinfo/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/mountinfo/doc.go",
    "content": "// Package mountinfo provides a set of functions to retrieve information about OS mounts.\n//\n// Currently it supports Linux. For historical reasons, there is also some support for FreeBSD and OpenBSD,\n// and a shallow implementation for Windows, but in general this is Linux-only package, so\n// the rest of the document only applies to Linux, unless explicitly specified otherwise.\n//\n// In Linux, information about mounts seen by the current process is available from\n// /proc/self/mountinfo. Note that due to mount namespaces, different processes can\n// see different mounts. A per-process mountinfo table is available from /proc/<PID>/mountinfo,\n// where <PID> is a numerical process identifier.\n//\n// In general, /proc is not a very efficient interface, and mountinfo is not an exception.\n// For example, there is no way to get information about a specific mount point (i.e. it\n// is all-or-nothing). This package tries to hide the /proc ineffectiveness by using\n// parse filters while reading mountinfo. A filter can skip some entries, or stop\n// processing the rest of the file once the needed information is found.\n//\n// For mountinfo filters that accept path as an argument, the path must be absolute,\n// having all symlinks resolved, and being cleaned (i.e. no extra slashes or dots).\n// One way to achieve all of the above is to employ filepath.Abs followed by\n// filepath.EvalSymlinks (the latter calls filepath.Clean on the result so\n// there is no need to explicitly call filepath.Clean).\n//\n// NOTE that in many cases there is no need to consult mountinfo at all. Here are some\n// of the cases where mountinfo should not be parsed:\n//\n// 1. Before performing a mount. Usually, this is not needed, but if required (say to\n// prevent over-mounts), to check whether a directory is mounted, call os.Lstat\n// on it and its parent directory, and compare their st.Sys().(*syscall.Stat_t).Dev\n// fields -- if they differ, then the directory is the mount point. NOTE this does\n// not work for bind mounts. Optionally, the filesystem type can also be checked\n// by calling unix.Statfs and checking the Type field (i.e. filesystem type).\n//\n// 2. After performing a mount. If there is no error returned, the mount succeeded;\n// checking the mount table for a new mount is redundant and expensive.\n//\n// 3. Before performing an unmount. It is more efficient to do an unmount and ignore\n// a specific error (EINVAL) which tells the directory is not mounted.\n//\n// 4. After performing an unmount. If there is no error returned, the unmount succeeded.\n//\n// 5. To find the mount point root of a specific directory. You can perform os.Stat()\n// on the directory and traverse up until the Dev field of a parent directory differs.\npackage mountinfo\n"
  },
  {
    "path": "vendor/github.com/moby/sys/mountinfo/mounted_linux.go",
    "content": "package mountinfo\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// MountedFast is a method of detecting a mount point without reading\n// mountinfo from procfs. A caller can only trust the result if no error\n// and sure == true are returned. Otherwise, other methods (e.g. parsing\n// /proc/mounts) have to be used. If unsure, use Mounted instead (which\n// uses MountedFast, but falls back to parsing mountinfo if needed).\n//\n// If a non-existent path is specified, an appropriate error is returned.\n// In case the caller is not interested in this particular error, it should\n// be handled separately using e.g. errors.Is(err, fs.ErrNotExist).\n//\n// This function is only available on Linux. When available (since kernel\n// v5.6), openat2(2) syscall is used to reliably detect all mounts. Otherwise,\n// the implementation falls back to using stat(2), which can reliably detect\n// normal (but not bind) mounts.\nfunc MountedFast(path string) (mounted, sure bool, err error) {\n\t// Root is always mounted.\n\tif path == string(os.PathSeparator) {\n\t\treturn true, true, nil\n\t}\n\n\tpath, err = normalizePath(path)\n\tif err != nil {\n\t\treturn false, false, err\n\t}\n\tmounted, sure, err = mountedFast(path)\n\treturn\n}\n\n// mountedByOpenat2 is a method of detecting a mount that works for all kinds\n// of mounts (incl. bind mounts), but requires a recent (v5.6+) linux kernel.\nfunc mountedByOpenat2(path string) (bool, error) {\n\tdir, last := filepath.Split(path)\n\n\tdirfd, err := unix.Openat2(unix.AT_FDCWD, dir, &unix.OpenHow{\n\t\tFlags: unix.O_PATH | unix.O_CLOEXEC,\n\t})\n\tif err != nil {\n\t\treturn false, &os.PathError{Op: \"openat2\", Path: dir, Err: err}\n\t}\n\tfd, err := unix.Openat2(dirfd, last, &unix.OpenHow{\n\t\tFlags:   unix.O_PATH | unix.O_CLOEXEC | unix.O_NOFOLLOW,\n\t\tResolve: unix.RESOLVE_NO_XDEV,\n\t})\n\t_ = unix.Close(dirfd)\n\tswitch err {\n\tcase nil: // definitely not a mount\n\t\t_ = unix.Close(fd)\n\t\treturn false, nil\n\tcase unix.EXDEV: // definitely a mount\n\t\treturn true, nil\n\t}\n\t// not sure\n\treturn false, &os.PathError{Op: \"openat2\", Path: path, Err: err}\n}\n\n// mountedFast is similar to MountedFast, except it expects a normalized path.\nfunc mountedFast(path string) (mounted, sure bool, err error) {\n\t// Root is always mounted.\n\tif path == string(os.PathSeparator) {\n\t\treturn true, true, nil\n\t}\n\n\t// Try a fast path, using openat2() with RESOLVE_NO_XDEV.\n\tmounted, err = mountedByOpenat2(path)\n\tif err == nil {\n\t\treturn mounted, true, nil\n\t}\n\n\t// Another fast path: compare st.st_dev fields.\n\tmounted, err = mountedByStat(path)\n\t// This does not work for bind mounts, so false negative\n\t// is possible, therefore only trust if return is true.\n\tif mounted && err == nil {\n\t\treturn true, true, nil\n\t}\n\n\treturn\n}\n\nfunc mounted(path string) (bool, error) {\n\tpath, err := normalizePath(path)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tmounted, sure, err := mountedFast(path)\n\tif sure && err == nil {\n\t\treturn mounted, nil\n\t}\n\n\t// Fallback to parsing mountinfo.\n\treturn mountedByMountinfo(path)\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/mountinfo/mounted_unix.go",
    "content": "//go:build linux || freebsd || openbsd || darwin\n// +build linux freebsd openbsd darwin\n\npackage mountinfo\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc mountedByStat(path string) (bool, error) {\n\tvar st unix.Stat_t\n\n\tif err := unix.Lstat(path, &st); err != nil {\n\t\treturn false, &os.PathError{Op: \"stat\", Path: path, Err: err}\n\t}\n\tdev := st.Dev\n\tparent := filepath.Dir(path)\n\tif err := unix.Lstat(parent, &st); err != nil {\n\t\treturn false, &os.PathError{Op: \"stat\", Path: parent, Err: err}\n\t}\n\tif dev != st.Dev {\n\t\t// Device differs from that of parent,\n\t\t// so definitely a mount point.\n\t\treturn true, nil\n\t}\n\t// NB: this does not detect bind mounts on Linux.\n\treturn false, nil\n}\n\nfunc normalizePath(path string) (realPath string, err error) {\n\tif realPath, err = filepath.Abs(path); err != nil {\n\t\treturn \"\", err\n\t}\n\tif realPath, err = filepath.EvalSymlinks(realPath); err != nil {\n\t\treturn \"\", err\n\t}\n\tif _, err := os.Stat(realPath); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn realPath, nil\n}\n\nfunc mountedByMountinfo(path string) (bool, error) {\n\tentries, err := GetMounts(SingleEntryFilter(path))\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn len(entries) > 0, nil\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/mountinfo/mountinfo.go",
    "content": "package mountinfo\n\nimport (\n\t\"os\"\n)\n\n// GetMounts retrieves a list of mounts for the current running process,\n// with an optional filter applied (use nil for no filter).\nfunc GetMounts(f FilterFunc) ([]*Info, error) {\n\treturn parseMountTable(f)\n}\n\n// Mounted determines if a specified path is a mount point. In case of any\n// error, false (and an error) is returned.\n//\n// If a non-existent path is specified, an appropriate error is returned.\n// In case the caller is not interested in this particular error, it should\n// be handled separately using e.g. errors.Is(err, fs.ErrNotExist).\nfunc Mounted(path string) (bool, error) {\n\t// root is always mounted\n\tif path == string(os.PathSeparator) {\n\t\treturn true, nil\n\t}\n\treturn mounted(path)\n}\n\n// Info reveals information about a particular mounted filesystem. This\n// struct is populated from the content in the /proc/<pid>/mountinfo file.\ntype Info struct {\n\t// ID is a unique identifier of the mount (may be reused after umount).\n\tID int\n\n\t// Parent is the ID of the parent mount (or of self for the root\n\t// of this mount namespace's mount tree).\n\tParent int\n\n\t// Major and Minor are the major and the minor components of the Dev\n\t// field of unix.Stat_t structure returned by unix.*Stat calls for\n\t// files on this filesystem.\n\tMajor, Minor int\n\n\t// Root is the pathname of the directory in the filesystem which forms\n\t// the root of this mount.\n\tRoot string\n\n\t// Mountpoint is the pathname of the mount point relative to the\n\t// process's root directory.\n\tMountpoint string\n\n\t// Options is a comma-separated list of mount options.\n\tOptions string\n\n\t// Optional are zero or more fields of the form \"tag[:value]\",\n\t// separated by a space.  Currently, the possible optional fields are\n\t// \"shared\", \"master\", \"propagate_from\", and \"unbindable\". For more\n\t// information, see mount_namespaces(7) Linux man page.\n\tOptional string\n\n\t// FSType is the filesystem type in the form \"type[.subtype]\".\n\tFSType string\n\n\t// Source is filesystem-specific information, or \"none\".\n\tSource string\n\n\t// VFSOptions is a comma-separated list of superblock options.\n\tVFSOptions string\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/mountinfo/mountinfo_bsd.go",
    "content": "//go:build freebsd || openbsd || darwin\n// +build freebsd openbsd darwin\n\npackage mountinfo\n\nimport \"golang.org/x/sys/unix\"\n\n// parseMountTable returns information about mounted filesystems\nfunc parseMountTable(filter FilterFunc) ([]*Info, error) {\n\tcount, err := unix.Getfsstat(nil, unix.MNT_WAIT)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tentries := make([]unix.Statfs_t, count)\n\t_, err = unix.Getfsstat(entries, unix.MNT_WAIT)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar out []*Info\n\tfor _, entry := range entries {\n\t\tvar skip, stop bool\n\t\tmountinfo := getMountinfo(&entry)\n\n\t\tif filter != nil {\n\t\t\t// filter out entries we're not interested in\n\t\t\tskip, stop = filter(mountinfo)\n\t\t\tif skip {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tout = append(out, mountinfo)\n\t\tif stop {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn out, nil\n}\n\nfunc mounted(path string) (bool, error) {\n\tpath, err := normalizePath(path)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\t// Fast path: compare st.st_dev fields.\n\t// This should always work for FreeBSD and OpenBSD.\n\tmounted, err := mountedByStat(path)\n\tif err == nil {\n\t\treturn mounted, nil\n\t}\n\n\t// Fallback to parsing mountinfo\n\treturn mountedByMountinfo(path)\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/mountinfo/mountinfo_filters.go",
    "content": "package mountinfo\n\nimport \"strings\"\n\n// FilterFunc is a type defining a callback function for GetMount(),\n// used to filter out mountinfo entries we're not interested in,\n// and/or stop further processing if we found what we wanted.\n//\n// It takes a pointer to the Info struct (fully populated with all available\n// fields on the GOOS platform), and returns two booleans:\n//\n// skip: true if the entry should be skipped;\n//\n// stop: true if parsing should be stopped after the entry.\ntype FilterFunc func(*Info) (skip, stop bool)\n\n// PrefixFilter discards all entries whose mount points do not start with, or\n// are equal to the path specified in prefix. The prefix path must be absolute,\n// have all symlinks resolved, and cleaned (i.e. no extra slashes or dots).\n//\n// PrefixFilter treats prefix as a path, not a partial prefix, which means that\n// given \"/foo\", \"/foo/bar\" and \"/foobar\" entries, PrefixFilter(\"/foo\") returns\n// \"/foo\" and \"/foo/bar\", and discards \"/foobar\".\nfunc PrefixFilter(prefix string) FilterFunc {\n\treturn func(m *Info) (bool, bool) {\n\t\tskip := !strings.HasPrefix(m.Mountpoint+\"/\", prefix+\"/\")\n\t\treturn skip, false\n\t}\n}\n\n// SingleEntryFilter looks for a specific entry.\nfunc SingleEntryFilter(mp string) FilterFunc {\n\treturn func(m *Info) (bool, bool) {\n\t\tif m.Mountpoint == mp {\n\t\t\treturn false, true // don't skip, stop now\n\t\t}\n\t\treturn true, false // skip, keep going\n\t}\n}\n\n// ParentsFilter returns all entries whose mount points\n// can be parents of a path specified, discarding others.\n//\n// For example, given /var/lib/docker/something, entries\n// like /var/lib/docker, /var and / are returned.\nfunc ParentsFilter(path string) FilterFunc {\n\treturn func(m *Info) (bool, bool) {\n\t\tskip := !strings.HasPrefix(path, m.Mountpoint)\n\t\treturn skip, false\n\t}\n}\n\n// FSTypeFilter returns all entries that match provided fstype(s).\nfunc FSTypeFilter(fstype ...string) FilterFunc {\n\treturn func(m *Info) (bool, bool) {\n\t\tfor _, t := range fstype {\n\t\t\tif m.FSType == t {\n\t\t\t\treturn false, false // don't skip, keep going\n\t\t\t}\n\t\t}\n\t\treturn true, false // skip, keep going\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/mountinfo/mountinfo_freebsdlike.go",
    "content": "//go:build freebsd || darwin\n// +build freebsd darwin\n\npackage mountinfo\n\nimport \"golang.org/x/sys/unix\"\n\nfunc getMountinfo(entry *unix.Statfs_t) *Info {\n\treturn &Info{\n\t\tMountpoint: unix.ByteSliceToString(entry.Mntonname[:]),\n\t\tFSType:     unix.ByteSliceToString(entry.Fstypename[:]),\n\t\tSource:     unix.ByteSliceToString(entry.Mntfromname[:]),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/mountinfo/mountinfo_linux.go",
    "content": "package mountinfo\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// GetMountsFromReader retrieves a list of mounts from the\n// reader provided, with an optional filter applied (use nil\n// for no filter). This can be useful in tests or benchmarks\n// that provide fake mountinfo data, or when a source other\n// than /proc/thread-self/mountinfo needs to be read from.\n//\n// This function is Linux-specific.\nfunc GetMountsFromReader(r io.Reader, filter FilterFunc) ([]*Info, error) {\n\ts := bufio.NewScanner(r)\n\tout := []*Info{}\n\tfor s.Scan() {\n\t\tvar err error\n\n\t\t/*\n\t\t   See http://man7.org/linux/man-pages/man5/proc.5.html\n\n\t\t   36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue\n\t\t   (1)(2)(3)   (4)   (5)      (6)      (7)   (8) (9)   (10)         (11)\n\n\t\t   (1) mount ID:  unique identifier of the mount (may be reused after umount)\n\t\t   (2) parent ID:  ID of parent (or of self for the top of the mount tree)\n\t\t   (3) major:minor:  value of st_dev for files on filesystem\n\t\t   (4) root:  root of the mount within the filesystem\n\t\t   (5) mount point:  mount point relative to the process's root\n\t\t   (6) mount options:  per mount options\n\t\t   (7) optional fields:  zero or more fields of the form \"tag[:value]\"\n\t\t   (8) separator:  marks the end of the optional fields\n\t\t   (9) filesystem type:  name of filesystem of the form \"type[.subtype]\"\n\t\t   (10) mount source:  filesystem specific information or \"none\"\n\t\t   (11) super options:  per super block options\n\n\t\t   In other words, we have:\n\t\t    * 6 mandatory fields\t(1)..(6)\n\t\t    * 0 or more optional fields\t(7)\n\t\t    * a separator field\t\t(8)\n\t\t    * 3 mandatory fields\t(9)..(11)\n\t\t*/\n\n\t\ttext := s.Text()\n\t\tfields := strings.Split(text, \" \")\n\t\tnumFields := len(fields)\n\t\tif numFields < 10 {\n\t\t\t// should be at least 10 fields\n\t\t\treturn nil, fmt.Errorf(\"parsing '%s' failed: not enough fields (%d)\", text, numFields)\n\t\t}\n\n\t\t// separator field\n\t\tsepIdx := numFields - 4\n\t\t// In Linux <= 3.9 mounting a cifs with spaces in a share\n\t\t// name (like \"//srv/My Docs\") _may_ end up having a space\n\t\t// in the last field of mountinfo (like \"unc=//serv/My Docs\").\n\t\t// Since kernel 3.10-rc1, cifs option \"unc=\" is ignored,\n\t\t// so spaces should not appear.\n\t\t//\n\t\t// Check for a separator, and work around the spaces bug\n\t\tfor fields[sepIdx] != \"-\" {\n\t\t\tsepIdx--\n\t\t\tif sepIdx == 5 {\n\t\t\t\treturn nil, fmt.Errorf(\"parsing '%s' failed: missing - separator\", text)\n\t\t\t}\n\t\t}\n\n\t\tp := &Info{}\n\n\t\tp.Mountpoint, err = unescape(fields[4])\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"parsing '%s' failed: mount point: %w\", fields[4], err)\n\t\t}\n\t\tp.FSType, err = unescape(fields[sepIdx+1])\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"parsing '%s' failed: fstype: %w\", fields[sepIdx+1], err)\n\t\t}\n\t\tp.Source, err = unescape(fields[sepIdx+2])\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"parsing '%s' failed: source: %w\", fields[sepIdx+2], err)\n\t\t}\n\t\tp.VFSOptions = fields[sepIdx+3]\n\n\t\t// ignore any numbers parsing errors, as there should not be any\n\t\tp.ID, _ = strconv.Atoi(fields[0])\n\t\tp.Parent, _ = strconv.Atoi(fields[1])\n\t\tmm := strings.SplitN(fields[2], \":\", 3)\n\t\tif len(mm) != 2 {\n\t\t\treturn nil, fmt.Errorf(\"parsing '%s' failed: unexpected major:minor pair %s\", text, mm)\n\t\t}\n\t\tp.Major, _ = strconv.Atoi(mm[0])\n\t\tp.Minor, _ = strconv.Atoi(mm[1])\n\n\t\tp.Root, err = unescape(fields[3])\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"parsing '%s' failed: root: %w\", fields[3], err)\n\t\t}\n\n\t\tp.Options = fields[5]\n\n\t\t// zero or more optional fields\n\t\tp.Optional = strings.Join(fields[6:sepIdx], \" \")\n\n\t\t// Run the filter after parsing all fields.\n\t\tvar skip, stop bool\n\t\tif filter != nil {\n\t\t\tskip, stop = filter(p)\n\t\t\tif skip {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tout = append(out, p)\n\t\tif stop {\n\t\t\tbreak\n\t\t}\n\t}\n\tif err := s.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nvar (\n\thaveProcThreadSelf     bool\n\thaveProcThreadSelfOnce sync.Once\n)\n\nfunc parseMountTable(filter FilterFunc) (_ []*Info, err error) {\n\thaveProcThreadSelfOnce.Do(func() {\n\t\t_, err := os.Stat(\"/proc/thread-self/mountinfo\")\n\t\thaveProcThreadSelf = err == nil\n\t})\n\n\t// We need to lock ourselves to the current OS thread in order to make sure\n\t// that the thread referenced by /proc/thread-self stays alive until we\n\t// finish parsing the file.\n\truntime.LockOSThread()\n\tdefer runtime.UnlockOSThread()\n\n\tvar f *os.File\n\tif haveProcThreadSelf {\n\t\tf, err = os.Open(\"/proc/thread-self/mountinfo\")\n\t} else {\n\t\t// On pre-3.17 kernels (such as CentOS 7), we don't have\n\t\t// /proc/thread-self/ so we need to manually construct\n\t\t// /proc/self/task/<tid>/ as a fallback.\n\t\tf, err = os.Open(\"/proc/self/task/\" + strconv.Itoa(unix.Gettid()) + \"/mountinfo\")\n\t\tif os.IsNotExist(err) {\n\t\t\t// If /proc/self/task/... failed, it means that our active pid\n\t\t\t// namespace doesn't match the pid namespace of the /proc mount. In\n\t\t\t// this case we just have to make do with /proc/self, since there\n\t\t\t// is no other way of figuring out our tid in a parent pid\n\t\t\t// namespace on pre-3.17 kernels.\n\t\t\tf, err = os.Open(\"/proc/self/mountinfo\")\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\treturn GetMountsFromReader(f, filter)\n}\n\n// PidMountInfo retrieves the list of mounts from a given process' mount\n// namespace. Unless there is a need to get mounts from a mount namespace\n// different from that of a calling process, use GetMounts.\n//\n// This function is Linux-specific.\n//\n// Deprecated: this will be removed before v1; use GetMountsFromReader with\n// opened /proc/<pid>/mountinfo as an argument instead.\nfunc PidMountInfo(pid int) ([]*Info, error) {\n\tf, err := os.Open(fmt.Sprintf(\"/proc/%d/mountinfo\", pid))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\treturn GetMountsFromReader(f, nil)\n}\n\n// A few specific characters in mountinfo path entries (root and mountpoint)\n// are escaped using a backslash followed by a character's ascii code in octal.\n//\n//\tspace              -- as \\040\n//\ttab (aka \\t)       -- as \\011\n//\tnewline (aka \\n)   -- as \\012\n//\tbackslash (aka \\\\) -- as \\134\n//\n// This function converts path from mountinfo back, i.e. it unescapes the above sequences.\nfunc unescape(path string) (string, error) {\n\t// try to avoid copying\n\tif strings.IndexByte(path, '\\\\') == -1 {\n\t\treturn path, nil\n\t}\n\n\t// The following code is UTF-8 transparent as it only looks for some\n\t// specific characters (backslash and 0..7) with values < utf8.RuneSelf,\n\t// and everything else is passed through as is.\n\tbuf := make([]byte, len(path))\n\tbufLen := 0\n\tfor i := 0; i < len(path); i++ {\n\t\tif path[i] != '\\\\' {\n\t\t\tbuf[bufLen] = path[i]\n\t\t\tbufLen++\n\t\t\tcontinue\n\t\t}\n\t\ts := path[i:]\n\t\tif len(s) < 4 {\n\t\t\t// too short\n\t\t\treturn \"\", fmt.Errorf(\"bad escape sequence %q: too short\", s)\n\t\t}\n\t\tc := s[1]\n\t\tswitch c {\n\t\tcase '0', '1', '2', '3', '4', '5', '6', '7':\n\t\t\tv := c - '0'\n\t\t\tfor j := 2; j < 4; j++ { // one digit already; two more\n\t\t\t\tif s[j] < '0' || s[j] > '7' {\n\t\t\t\t\treturn \"\", fmt.Errorf(\"bad escape sequence %q: not a digit\", s[:3])\n\t\t\t\t}\n\t\t\t\tx := s[j] - '0'\n\t\t\t\tv = (v << 3) | x\n\t\t\t}\n\t\t\tif v > 255 {\n\t\t\t\treturn \"\", fmt.Errorf(\"bad escape sequence %q: out of range\" + s[:3])\n\t\t\t}\n\t\t\tbuf[bufLen] = v\n\t\t\tbufLen++\n\t\t\ti += 3\n\t\t\tcontinue\n\t\tdefault:\n\t\t\treturn \"\", fmt.Errorf(\"bad escape sequence %q: not a digit\" + s[:3])\n\n\t\t}\n\t}\n\n\treturn string(buf[:bufLen]), nil\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/mountinfo/mountinfo_openbsd.go",
    "content": "package mountinfo\n\nimport \"golang.org/x/sys/unix\"\n\nfunc getMountinfo(entry *unix.Statfs_t) *Info {\n\treturn &Info{\n\t\tMountpoint: unix.ByteSliceToString(entry.F_mntonname[:]),\n\t\tFSType:     unix.ByteSliceToString(entry.F_fstypename[:]),\n\t\tSource:     unix.ByteSliceToString(entry.F_mntfromname[:]),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/mountinfo/mountinfo_unsupported.go",
    "content": "//go:build !windows && !linux && !freebsd && !openbsd && !darwin\n// +build !windows,!linux,!freebsd,!openbsd,!darwin\n\npackage mountinfo\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\nvar errNotImplemented = fmt.Errorf(\"not implemented on %s/%s\", runtime.GOOS, runtime.GOARCH)\n\nfunc parseMountTable(_ FilterFunc) ([]*Info, error) {\n\treturn nil, errNotImplemented\n}\n\nfunc mounted(path string) (bool, error) {\n\treturn false, errNotImplemented\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/mountinfo/mountinfo_windows.go",
    "content": "package mountinfo\n\nfunc parseMountTable(_ FilterFunc) ([]*Info, error) {\n\t// Do NOT return an error!\n\treturn nil, nil\n}\n\nfunc mounted(_ string) (bool, error) {\n\treturn false, nil\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/idtools.go",
    "content": "package user\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\n// MkdirOpt is a type for options to pass to Mkdir calls\ntype MkdirOpt func(*mkdirOptions)\n\ntype mkdirOptions struct {\n\tonlyNew bool\n}\n\n// WithOnlyNew is an option for MkdirAllAndChown that will only change ownership and permissions\n// on newly created directories.  If the directory already exists, it will not be modified\nfunc WithOnlyNew(o *mkdirOptions) {\n\to.onlyNew = true\n}\n\n// MkdirAllAndChown creates a directory (include any along the path) and then modifies\n// ownership to the requested uid/gid.  By default, if the directory already exists, this\n// function will still change ownership and permissions. If WithOnlyNew is passed as an\n// option, then only the newly created directories will have ownership and permissions changed.\nfunc MkdirAllAndChown(path string, mode os.FileMode, uid, gid int, opts ...MkdirOpt) error {\n\tvar options mkdirOptions\n\tfor _, opt := range opts {\n\t\topt(&options)\n\t}\n\n\treturn mkdirAs(path, mode, uid, gid, true, options.onlyNew)\n}\n\n// MkdirAndChown creates a directory and then modifies ownership to the requested uid/gid.\n// By default, if the directory already exists, this function still changes ownership and permissions.\n// If WithOnlyNew is passed as an option, then only the newly created directory will have ownership\n// and permissions changed.\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, uid, gid int, opts ...MkdirOpt) error {\n\tvar options mkdirOptions\n\tfor _, opt := range opts {\n\t\topt(&options)\n\t}\n\treturn mkdirAs(path, mode, uid, gid, false, options.onlyNew)\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 (int64(hostID) >= m.ParentID) && (int64(hostID) <= (m.ParentID + m.Count - 1)) {\n\t\t\tcontID := int(m.ID + (int64(hostID) - m.ParentID))\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 (int64(contID) >= m.ID) && (int64(contID) <= (m.ID + m.Count - 1)) {\n\t\t\thostID := int(m.ParentID + (int64(contID) - m.ID))\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// 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() (int, int) {\n\tuid, gid, _ := getRootUIDGID(i.UIDMaps, i.GIDMaps)\n\treturn uid, 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(uid, gid int) (int, int, error) {\n\tvar err error\n\truid, rgid := i.RootPair()\n\n\tif uid != ruid {\n\t\truid, err = toHost(uid, i.UIDMaps)\n\t\tif err != nil {\n\t\t\treturn ruid, rgid, err\n\t\t}\n\t}\n\n\tif gid != rgid {\n\t\trgid, err = toHost(gid, i.GIDMaps)\n\t}\n\treturn ruid, rgid, err\n}\n\n// ToContainer returns the container UID and GID for the host uid and gid\nfunc (i IdentityMapping) ToContainer(uid, gid int) (int, int, error) {\n\truid, err := toContainer(uid, i.UIDMaps)\n\tif err != nil {\n\t\treturn -1, -1, err\n\t}\n\trgid, err := toContainer(gid, i.GIDMaps)\n\treturn ruid, rgid, 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"
  },
  {
    "path": "vendor/github.com/moby/sys/user/idtools_unix.go",
    "content": "//go:build !windows\n\npackage user\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"syscall\"\n)\n\nfunc mkdirAs(path string, mode os.FileMode, uid, gid int, mkAll, onlyNew 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 onlyNew {\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, uid, gid, 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 onlyNew is true, 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 = append(paths, 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); 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, uid, gid, nil); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\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, uid, gid int, 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(uid) && ssi.Gid == uint32(gid) {\n\t\treturn nil\n\t}\n\treturn os.Chown(p, uid, 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 := LookupUser(name)\n\tif err != nil {\n\t\treturn IdentityMapping{}, fmt.Errorf(\"could not get user for username %s: %w\", 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) ([]IDMap, error) {\n\tuidstr := strconv.Itoa(usr.Uid)\n\trangeList, err := ParseSubIDFileFilter(path, func(sid 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\tvar containerID int64\n\tfor _, idrange := range rangeList {\n\t\tidMap = append(idMap, IDMap{\n\t\t\tID:       containerID,\n\t\t\tParentID: idrange.SubID,\n\t\t\tCount:    idrange.Count,\n\t\t})\n\t\tcontainerID = containerID + idrange.Count\n\t}\n\treturn idMap, nil\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/user/idtools_windows.go",
    "content": "package user\n\nimport (\n\t\"os\"\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, _, _ int, _, _ bool) error {\n\treturn os.MkdirAll(path, 0)\n}\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/mrunalp/fileutils/.gitignore",
    "content": "/gocp\n"
  },
  {
    "path": "vendor/github.com/mrunalp/fileutils/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 2014 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       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/mrunalp/fileutils/MAINTAINERS",
    "content": "Mrunal Patel <mrunalp@gmail.com> (@mrunalp)\n"
  },
  {
    "path": "vendor/github.com/mrunalp/fileutils/README.md",
    "content": "# fileutils\n\nCollection of utilities for file manipulation in golang\n\nThe library is based on docker pkg/archive pkg/idtools but does copies instead of handling archive formats.\n"
  },
  {
    "path": "vendor/github.com/mrunalp/fileutils/fileutils.go",
    "content": "package fileutils\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"syscall\"\n)\n\n// CopyFile copies the file at source to dest\nfunc CopyFile(source string, dest string) error {\n\tsi, err := os.Lstat(source)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tst, ok := si.Sys().(*syscall.Stat_t)\n\tif !ok {\n\t\treturn fmt.Errorf(\"could not convert to syscall.Stat_t\")\n\t}\n\n\tuid := int(st.Uid)\n\tgid := int(st.Gid)\n\tmodeType := si.Mode() & os.ModeType\n\n\t// Handle symlinks\n\tif modeType == os.ModeSymlink {\n\t\ttarget, err := os.Readlink(source)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := os.Symlink(target, dest); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Handle device files\n\tif modeType == os.ModeDevice {\n\t\tdevMajor := int64(major(uint64(st.Rdev)))\n\t\tdevMinor := int64(minor(uint64(st.Rdev)))\n\t\tmode := uint32(si.Mode() & os.ModePerm)\n\t\tif si.Mode()&os.ModeCharDevice != 0 {\n\t\t\tmode |= syscall.S_IFCHR\n\t\t} else {\n\t\t\tmode |= syscall.S_IFBLK\n\t\t}\n\t\tif err := syscall.Mknod(dest, mode, int(mkdev(devMajor, devMinor))); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Handle regular files\n\tif si.Mode().IsRegular() {\n\t\terr = copyInternal(source, dest)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Chown the file\n\tif err := os.Lchown(dest, uid, gid); err != nil {\n\t\treturn err\n\t}\n\n\t// Chmod the file\n\tif !(modeType == os.ModeSymlink) {\n\t\tif err := os.Chmod(dest, si.Mode()); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc copyInternal(source, dest string) (retErr error) {\n\tsf, err := os.Open(source)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer sf.Close()\n\n\tdf, err := os.Create(dest)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\terr := df.Close()\n\t\tif retErr == nil {\n\t\t\tretErr = err\n\t\t}\n\t}()\n\n\t_, err = io.Copy(df, sf)\n\treturn err\n}\n\n// CopyDirectory copies the files under the source directory\n// to dest directory. The dest directory is created if it\n// does not exist.\nfunc CopyDirectory(source string, dest string) error {\n\tfi, err := os.Stat(source)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Get owner.\n\tst, ok := fi.Sys().(*syscall.Stat_t)\n\tif !ok {\n\t\treturn fmt.Errorf(\"could not convert to syscall.Stat_t\")\n\t}\n\n\t// We have to pick an owner here anyway.\n\tif err := MkdirAllNewAs(dest, fi.Mode(), int(st.Uid), int(st.Gid)); err != nil {\n\t\treturn err\n\t}\n\n\treturn filepath.Walk(source, func(path string, info os.FileInfo, err error) error {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Get the relative path\n\t\trelPath, err := filepath.Rel(source, path)\n\t\tif err != nil {\n\t\t\treturn nil\n\t\t}\n\t\tdestPath := filepath.Join(dest, relPath)\n\n\t\tif info.IsDir() {\n\t\t\t// Skip the source directory.\n\t\t\tif path != source {\n\t\t\t\t// Get the owner.\n\t\t\t\tst, ok := info.Sys().(*syscall.Stat_t)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn fmt.Errorf(\"could not convert to syscall.Stat_t\")\n\t\t\t\t}\n\n\t\t\t\tuid := int(st.Uid)\n\t\t\t\tgid := int(st.Gid)\n\n\t\t\t\tif err := os.Mkdir(destPath, info.Mode()); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := os.Lchown(destPath, uid, gid); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := os.Chmod(destPath, info.Mode()); 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\treturn CopyFile(path, destPath)\n\t})\n}\n\n// Gives a number indicating the device driver to be used to access the passed device\nfunc major(device uint64) uint64 {\n\treturn (device >> 8) & 0xfff\n}\n\n// Gives a number that serves as a flag to the device driver for the passed device\nfunc minor(device uint64) uint64 {\n\treturn (device & 0xff) | ((device >> 12) & 0xfff00)\n}\n\nfunc mkdev(major int64, minor int64) uint32 {\n\treturn uint32(((minor & 0xfff00) << 12) | ((major & 0xfff) << 8) | (minor & 0xff))\n}\n"
  },
  {
    "path": "vendor/github.com/mrunalp/fileutils/idtools.go",
    "content": "package fileutils\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"syscall\"\n)\n\n// MkdirAllNewAs 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 will be performed\nfunc MkdirAllNewAs(path string, mode os.FileMode, ownerUID, ownerGID int) error {\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\tst, err := os.Stat(path)\n\tif err != nil && os.IsNotExist(err) {\n\t\tpaths = []string{path}\n\t} else if err == nil {\n\t\tif !st.IsDir() {\n\t\t\treturn &os.PathError{Op: \"mkdir\", Path: path, Err: syscall.ENOTDIR}\n\t\t}\n\t\t// nothing to do; directory path fully exists already\n\t\treturn nil\n\t}\n\n\t// walk back to \"/\" looking for directories which do not exist\n\t// and add them to the paths array for chown after creation\n\tdirPath := path\n\tfor {\n\t\tdirPath = filepath.Dir(dirPath)\n\t\tif dirPath == \"/\" {\n\t\t\tbreak\n\t\t}\n\t\tif _, err := os.Stat(dirPath); err != nil && os.IsNotExist(err) {\n\t\t\tpaths = append(paths, dirPath)\n\t\t}\n\t}\n\n\tif err := os.MkdirAll(path, mode); err != nil {\n\t\treturn err\n\t}\n\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 := os.Chown(pathComponent, ownerUID, ownerGID); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := os.Chmod(pathComponent, mode); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/.golangci-extra.yml",
    "content": "# This is golangci-lint config file which is used to check NEW code in\n# github PRs only (see lint-extra in .github/workflows/validate.yml).\n#\n# For the default linter config, see .golangci.yml. This config should\n# only enable additional linters and/or linter settings not enabled\n# in the default config.\nversion: \"2\"\n\nlinters:\n  default: none\n  enable:\n    - godot\n    - revive\n    - staticcheck\n  settings:\n    staticcheck:\n      checks:\n        - all\n        - -QF1008 # https://staticcheck.dev/docs/checks/#QF1008 Omit embedded fields from selector expression.\n  exclusions:\n    generated: strict\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/.golangci.yml",
    "content": "# For documentation, see https://golangci-lint.run/usage/configuration/\nversion: \"2\"\n\nformatters:\n  enable:\n    - gofumpt\n  exclusions:\n    generated: strict\n\nlinters:\n  enable:\n    - errorlint\n    - nolintlint\n    - unconvert\n    - unparam\n  settings:\n    govet:\n      enable:\n        - nilness\n    staticcheck:\n      checks:\n        - all\n        - -ST1000 # https://staticcheck.dev/docs/checks/#ST1000 Incorrect or missing package comment.\n        - -ST1003 # https://staticcheck.dev/docs/checks/#ST1003 Poorly chosen identifier.\n        - -ST1005 # https://staticcheck.dev/docs/checks/#ST1005 Incorrectly formatted error string.\n        - -QF1008 # https://staticcheck.dev/docs/checks/#QF1008 Omit embedded fields from selector expression.\n  exclusions:\n    generated: strict\n    presets:\n      - comments\n      - std-error-handling\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/CODEOWNERS",
    "content": "* @maintainer1 @maintainer2 @maintainer3\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/CONTRIBUTING.md",
    "content": "# Contribution Guidelines\n\nDevelopment happens on GitHub.\nIssues are used for bugs and actionable items and longer discussions can happen on the [mailing list](#mailing-list).\n\nThe content of this repository is licensed under the [Apache License, Version 2.0](LICENSE).\n\n## Code of Conduct\n\nParticipation in the Open Container community is governed by [Open Container Code of Conduct][code-of-conduct].\n\n## Meetings\n\nThe contributors and maintainers of all OCI projects have monthly meetings at 2:00 PM (USA Pacific) on the first Wednesday of every month.\nThere is an [iCalendar][rfc5545] format for the meetings [here][meeting.ics].\nEveryone is welcome to participate via [UberConference web][UberConference] or audio-only: +1 415 968 0849 (no PIN needed).\nAn initial agenda will be posted to the [mailing list](#mailing-list) in the week before each meeting, and everyone is welcome to propose additional topics or suggest other agenda alterations there.\nMinutes from past meetings are archived [here][minutes].\n\n## Mailing list\n\nYou can subscribe and browse the mailing list on [Google Groups][mailing-list].\n\n## IRC\n\nOCI discussion happens on #opencontainers on [Freenode][] ([logs][irc-logs]).\n\n## Git\n\n### Security issues\n\nIf you are reporting a security issue, do not create an issue or file a pull\nrequest on GitHub. Instead, disclose the issue responsibly by sending an email\nto security@opencontainers.org (which is inhabited only by the maintainers of\nthe various OCI projects).\n\n### Pull requests are always welcome\n\nWe are always thrilled to receive pull requests, and do our best to\nprocess them as fast as possible. Not sure if that typo is worth a pull\nrequest? Do it! We will appreciate it.\n\nIf your pull request is not accepted on the first try, don't be\ndiscouraged! If there's a problem with the implementation, hopefully you\nreceived feedback on what to improve.\n\nWe're trying very hard to keep the project lean and focused. We don't want it\nto do everything for everybody. This means that we might decide against\nincorporating a new feature.\n\n### Conventions\n\nFork the repo and make changes on your fork in a feature branch.\nFor larger bugs and enhancements, consider filing a leader issue or mailing-list thread for discussion that is independent of the implementation.\nSmall changes or changes that have been discussed on the [project mailing list](#mailing-list) may be submitted without a leader issue.\n\nIf the project has a test suite, submit unit tests for your changes. Take a\nlook at existing tests for inspiration. Run the full test suite on your branch\nbefore submitting a pull request.\n\nUpdate the documentation when creating or modifying features. Test\nyour documentation changes for clarity, concision, and correctness, as\nwell as a clean documentation build.\n\nPull requests descriptions should be as clear as possible and include a\nreference to all the issues that they address.\n\nCommit messages must start with a capitalized and short summary\nwritten in the imperative, followed by an optional, more detailed\nexplanatory text which is separated from the summary by an empty line.\n\nCode review comments may be added to your pull request. Discuss, then make the\nsuggested modifications and push additional commits to your feature branch. Be\nsure to post a comment after pushing. The new commits will show up in the pull\nrequest automatically, but the reviewers will not be notified unless you\ncomment.\n\nBefore the pull request is merged, make sure that you squash your commits into\nlogical units of work using `git rebase -i` and `git push -f`. After every\ncommit the test suite (if any) should be passing. Include documentation changes\nin the same commit so that a revert would remove all traces of the feature or\nfix.\n\nCommits that fix or close an issue should include a reference like `Closes #XXX`\nor `Fixes #XXX`, which will automatically close the issue when merged.\n\n### Sign your work\n\nThe sign-off is a simple line at the end of the explanation for the\npatch, which certifies that you wrote it or otherwise have the right to\npass it on as an open-source patch.  The rules are pretty simple: if you\ncan certify the below (from [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@gmail.com>\n\nusing your real name (sorry, no pseudonyms or anonymous contributions.)\n\nYou can add the sign off when creating the git commit via `git commit -s`.\n\n[code-of-conduct]: https://github.com/opencontainers/tob/blob/d2f9d68c1332870e40693fe077d311e0742bc73d/code-of-conduct.md\n[developercertificate.org]: http://developercertificate.org/\n[Freenode]: https://freenode.net/\n[irc-logs]: http://ircbot.wl.linuxfoundation.org/eavesdrop/%23opencontainers/\n[mailing-list]: https://groups.google.com/a/opencontainers.org/forum/#!forum/dev\n[meeting.ics]: https://github.com/opencontainers/runtime-spec/blob/master/meeting.ics\n[minutes]: http://ircbot.wl.linuxfoundation.org/meetings/opencontainers/\n[rfc5545]: https://tools.ietf.org/html/rfc5545\n[UberConference]: https://www.uberconference.com/opencontainers\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/GOVERNANCE.md",
    "content": "# Project governance\n\nThe [OCI charter][charter] §5.b.viii tasks an OCI Project's maintainers (listed in the repository's MAINTAINERS file and sometimes referred to as \"the TDC\", [§5.e][charter]) with:\n\n> Creating, maintaining and enforcing governance guidelines for the TDC, approved by the maintainers, and which shall be posted visibly for the TDC.\n\nThis section describes generic rules and procedures for fulfilling that mandate.\n\n## Proposing a motion\n\nA maintainer SHOULD propose a motion on the dev@opencontainers.org mailing list (except [security issues](#security-issues)) with another maintainer as a co-sponsor.\n\n## Voting\n\nVoting on a proposed motion SHOULD happen on the dev@opencontainers.org mailing list (except [security issues](#security-issues)) with maintainers posting LGTM or REJECT.\nMaintainers MAY also explicitly not vote by posting ABSTAIN (which is useful to revert a previous vote).\nMaintainers MAY post multiple times (e.g. as they revise their position based on feedback), but only their final post counts in the tally.\nA proposed motion is adopted if two-thirds of votes cast, a quorum having voted, are in favor of the release.\n\nVoting SHOULD remain open for a week to collect feedback from the wider community and allow the maintainers to digest the proposed motion.\nUnder exceptional conditions (e.g. non-major security fix releases) proposals which reach quorum with unanimous support MAY be adopted earlier.\n\nA maintainer MAY choose to reply with REJECT.\nA maintainer posting a REJECT MUST include a list of concerns or links to written documentation for those concerns (e.g. GitHub issues or mailing-list threads).\nThe maintainers SHOULD try to resolve the concerns and wait for the rejecting maintainer to change their opinion to LGTM.\nHowever, a motion MAY be adopted with REJECTs, as outlined in the previous paragraphs.\n\n## Quorum\n\nA quorum is established when at least two-thirds of maintainers have voted.\n\nFor projects that are not specifications, a [motion to release](#release-approval) MAY be adopted if the tally is at least three LGTMs and no REJECTs, even if three votes does not meet the usual two-thirds quorum.\n\n## Amendments\n\nThe [project governance](#project-governance) rules and procedures MAY be amended or replaced using the procedures themselves.\nThe MAINTAINERS of this project governance document is the total set of MAINTAINERS from all Open Containers projects (go-digest, image-spec, image-tools, runC, runtime-spec, runtime-tools, and selinux).\n\n## Subject templates\n\nMaintainers are busy and get lots of email.\nTo make project proposals recognizable, proposed motions SHOULD use the following subject templates.\n\n### Proposing a motion\n\n> [{project} VOTE]: {motion description} (closes {end of voting window})\n\nFor example:\n\n> [runtime-spec VOTE]: Tag 0647920 as 1.0.0-rc (closes 2016-06-03 20:00 UTC)\n\n### Tallying results\n\nAfter voting closes, a maintainer SHOULD post a tally to the motion thread with a subject template like:\n\n> [{project} {status}]: {motion description} (+{LGTMs} -{REJECTs} #{ABSTAINs})\n\nWhere `{status}` is either `adopted` or `rejected`.\nFor example:\n\n> [runtime-spec adopted]: Tag 0647920 as 1.0.0-rc (+6 -0 #3)\n\n[charter]: https://www.opencontainers.org/about/governance\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/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/opencontainers/cgroups/MAINTAINERS",
    "content": "Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp> (@AkihiroSuda)\nAleksa Sarai <cyphar@cyphar.com> (@cyphar)\nKir Kolyshkin <kolyshkin@gmail.com> (@kolyshkin)\nMrunal Patel <mpatel@redhat.com> (@mrunalp)\nSebastiaan van Stijn <github@gone.nl> (@thaJeztah)\nOdin Ugedal <odin@uged.al> (@odinuge)\nPeter Hunt <pehunt@redhat.com> (@haircommander)\nDavanum Srinivas <davanum@gmail.com> (@dims)\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/MAINTAINERS_GUIDE.md",
    "content": "## Introduction\n\nDear maintainer. Thank you for investing the time and energy to help\nmake this project as useful as possible. Maintaining a project is difficult,\nsometimes unrewarding work.  Sure, you will get to contribute cool\nfeatures to the project. But most of your time will be spent reviewing,\ncleaning up, documenting, answering questions, justifying design\ndecisions - while everyone has all the fun! But remember - the quality\nof the maintainers work is what distinguishes the good projects from the\ngreat.  So please be proud of your work, even the unglamourous parts,\nand encourage a culture of appreciation and respect for *every* aspect\nof improving the project - not just the hot new features.\n\nThis document is a manual for maintainers old and new. It explains what\nis expected of maintainers, how they should work, and what tools are\navailable to them.\n\nThis is a living document - if you see something out of date or missing,\nspeak up!\n\n## What are a maintainer's responsibilities?\n\nIt is every maintainer's responsibility to:\n\n* Expose a clear roadmap for improving their component.\n* Deliver prompt feedback and decisions on pull requests.\n* Be available to anyone with questions, bug reports, criticism etc. on their component.\n  This includes IRC and GitHub issues and pull requests.\n* Make sure their component respects the philosophy, design and roadmap of the project.\n\n## How are decisions made?\n\nThis project is an open-source project with an open design philosophy. This\nmeans that the repository is the source of truth for EVERY aspect of the\nproject, including its philosophy, design, roadmap and APIs. *If it's\npart of the project, it's in the repo. It's in the repo, it's part of\nthe project.*\n\nAs a result, all decisions can be expressed as changes to the\nrepository. An implementation change is a change to the source code. An\nAPI change is a change to the API specification. A philosophy change is\na change to the philosophy manifesto. And so on.\n\nAll decisions affecting this project, big and small, follow the same procedure:\n\n1. Discuss a proposal on the [mailing list](CONTRIBUTING.md#mailing-list).\n   Anyone can do this.\n2. Open a pull request.\n   Anyone can do this.\n3. Discuss the pull request.\n   Anyone can do this.\n4. Endorse (`LGTM`) or oppose (`Rejected`) the pull request.\n   The relevant maintainers do this (see below [Who decides what?](#who-decides-what)).\n   Changes that affect project management (changing policy, cutting releases, etc.) are [proposed and voted on the mailing list](GOVERNANCE.md).\n5. Merge or close the pull request.\n   The relevant maintainers do this.\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## Who decides what?\n\nAll decisions are pull requests, and the relevant maintainers make\ndecisions by accepting or refusing the pull request. Review and acceptance\nby anyone is denoted by adding a comment in the pull request: `LGTM`.\nHowever, only currently listed `MAINTAINERS` are counted towards the required\ntwo LGTMs. In addition, if a maintainer has created a pull request, they cannot\ncount toward the two LGTM rule (to ensure equal amounts of review for every pull\nrequest, no matter who wrote it).\n\nOverall the maintainer system works because of mutual respect.\nThe maintainers trust one another to act in the best interests of the project.\nSometimes maintainers can disagree and this is part of a healthy project to represent the points of view of various people.\nIn the case where maintainers cannot find agreement on a specific change, maintainers should use the [governance procedure](GOVERNANCE.md) to attempt to reach a consensus.\n\n### How are maintainers added?\n\nThe best maintainers have a vested interest in the project.  Maintainers\nare first and foremost contributors that have shown they are committed to\nthe long term success of the project.  Contributors wanting to become\nmaintainers are expected to be deeply involved in contributing code,\npull request review, and triage of issues in the project for more than two months.\n\nJust contributing does not make you a maintainer, it is about building trust with the current maintainers of the project and being a person that they can depend on to act in the best interest of the project.\nThe final vote to add a new maintainer should be approved by the [governance procedure](GOVERNANCE.md).\n\n### How are maintainers removed?\n\nWhen a maintainer is unable to perform the [required duties](#what-are-a-maintainers-responsibilities) they can be removed by the [governance procedure](GOVERNANCE.md).\nIssues related to a maintainer's performance should be discussed with them among the other maintainers so that they are not surprised by a pull request removing them.\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/README.md",
    "content": "# OCI Project Template\n\nUseful boilerplate and organizational information for all OCI projects.\n\n* README (this file)\n* [The Apache License, Version 2.0](LICENSE)\n* [A list of maintainers](MAINTAINERS)\n* [Maintainer guidelines](MAINTAINERS_GUIDE.md)\n* [Contributor guidelines](CONTRIBUTING.md)\n* [Project governance](GOVERNANCE.md)\n* [Release procedures](RELEASES.md)\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/RELEASES.md",
    "content": "# Releases\n\nThe release process hopes to encourage early, consistent consensus-building during project development.\nThe mechanisms used are regular community communication on the mailing list about progress, scheduled meetings for issue resolution and release triage, and regularly paced and communicated releases.\nReleases are proposed and adopted or rejected using the usual [project governance](GOVERNANCE.md) rules and procedures.\n\nAn anti-pattern that we want to avoid is heavy development or discussions \"late cycle\" around major releases.\nWe want to build a community that is involved and communicates consistently through all releases instead of relying on \"silent periods\" as a judge of stability.\n\n## Parallel releases\n\nA single project MAY consider several motions to release in parallel.\nHowever each motion to release after the initial 0.1.0 MUST be based on a previous release that has already landed.\n\nFor example, runtime-spec maintainers may propose a v1.0.0-rc2 on the 1st of the month and a v0.9.1 bugfix on the 2nd of the month.\nThey may not propose a v1.0.0-rc3 until the v1.0.0-rc2 is accepted (on the 7th if the vote initiated on the 1st passes).\n\n## Specifications\n\nThe OCI maintains three categories of projects: specifications, applications, and conformance-testing tools.\nHowever, specification releases have special restrictions in the [OCI charter][charter]:\n\n* They are the target of backwards compatibility (§7.g), and\n* They are subject to the OFWa patent grant (§8.d and e).\n\nTo avoid unfortunate side effects (onerous backwards compatibility requirements or Member resignations), the following additional procedures apply to specification releases:\n\n### Planning a release\n\nEvery OCI specification project SHOULD hold meetings that involve maintainers reviewing pull requests, debating outstanding issues, and planning releases.\nThis meeting MUST be advertised on the project README and MAY happen on a phone call, video conference, or on IRC.\nMaintainers MUST send updates to the dev@opencontainers.org with results of these meetings.\n\nBefore the specification reaches v1.0.0, the meetings SHOULD be weekly.\nOnce a specification has reached v1.0.0, the maintainers may alter the cadence, but a meeting MUST be held within four weeks of the previous meeting.\n\nThe release plans, corresponding milestones and estimated due dates MUST be published on GitHub (e.g. https://github.com/opencontainers/runtime-spec/milestones).\nGitHub milestones and issues are only used for community organization and all releases MUST follow the [project governance](GOVERNANCE.md) rules and procedures.\n\n### Timelines\n\nSpecifications have a variety of different timelines in their lifecycle.\n\n* Pre-v1.0.0 specifications SHOULD release on a monthly cadence to garner feedback.\n* Major specification releases MUST release at least three release candidates spaced a minimum of one week apart.\n  This means a major release like a v1.0.0 or v2.0.0 release will take 1 month at minimum: one week for rc1, one week for rc2, one week for rc3, and one week for the major release itself.\n  Maintainers SHOULD strive to make zero breaking changes during this cycle of release candidates and SHOULD restart the three-candidate count when a breaking change is introduced.\n  For example if a breaking change is introduced in v1.0.0-rc2 then the series would end with v1.0.0-rc4 and v1.0.0.\n* Minor and patch releases SHOULD be made on an as-needed basis.\n\n[charter]: https://www.opencontainers.org/about/governance\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/cgroups.go",
    "content": "package cgroups\n\nimport (\n\t\"errors\"\n)\n\nvar (\n\t// ErrDevicesUnsupported is an error returned when a cgroup manager\n\t// is not configured to set device rules.\n\tErrDevicesUnsupported = errors.New(\"cgroup manager is not configured to set device rules\")\n\n\t// ErrRootless is returned by [Manager.Apply] when there is an error\n\t// creating cgroup directory, and cgroup.Rootless is set. In general,\n\t// this error is to be ignored.\n\tErrRootless = errors.New(\"cgroup manager can not access cgroup (rootless container)\")\n\n\t// DevicesSetV1 and DevicesSetV2 are functions to set devices for\n\t// cgroup v1 and v2, respectively. Unless\n\t// [github.com/opencontainers/cgroups/devices]\n\t// package is imported, it is set to nil, so cgroup managers can't\n\t// manage devices.\n\tDevicesSetV1 func(path string, r *Resources) error\n\tDevicesSetV2 func(path string, r *Resources) error\n)\n\ntype Manager interface {\n\t// Apply creates a cgroup, if not yet created, and adds a process\n\t// with the specified pid into that cgroup.  A special value of -1\n\t// can be used to merely create a cgroup.\n\tApply(pid int) error\n\n\t// AddPid adds a process with a given pid to an existing cgroup.\n\t// The subcgroup argument is either empty, or a path relative to\n\t// a cgroup under under the manager's cgroup.\n\tAddPid(subcgroup string, pid int) error\n\n\t// GetPids returns the PIDs of all processes inside the cgroup.\n\tGetPids() ([]int, error)\n\n\t// GetAllPids returns the PIDs of all processes inside the cgroup\n\t// any all its sub-cgroups.\n\tGetAllPids() ([]int, error)\n\n\t// GetStats returns cgroups statistics.\n\tGetStats() (*Stats, error)\n\n\t// Freeze sets the freezer cgroup to the specified state.\n\tFreeze(state FreezerState) error\n\n\t// Destroy removes cgroup.\n\tDestroy() error\n\n\t// Path returns a cgroup path to the specified controller/subsystem.\n\t// For cgroupv2, the argument is unused and can be empty.\n\tPath(string) string\n\n\t// Set sets cgroup resources parameters/limits. If the argument is nil,\n\t// the resources specified during Manager creation (or the previous call\n\t// to Set) are used.\n\tSet(r *Resources) error\n\n\t// GetPaths returns cgroup path(s) to save in a state file in order to\n\t// restore later.\n\t//\n\t// For cgroup v1, a key is cgroup subsystem name, and the value is the\n\t// path to the cgroup for this subsystem.\n\t//\n\t// For cgroup v2 unified hierarchy, a key is \"\", and the value is the\n\t// unified path.\n\tGetPaths() map[string]string\n\n\t// GetCgroups returns the cgroup data as configured.\n\tGetCgroups() (*Cgroup, error)\n\n\t// GetFreezerState retrieves the current FreezerState of the cgroup.\n\tGetFreezerState() (FreezerState, error)\n\n\t// Exists returns whether the cgroup path exists or not.\n\tExists() bool\n\n\t// OOMKillCount reports OOM kill count for the cgroup.\n\tOOMKillCount() (uint64, error)\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/config_blkio_device.go",
    "content": "package cgroups\n\nimport \"fmt\"\n\n// BlockIODevice holds major:minor format supported in blkio cgroup.\ntype BlockIODevice struct {\n\t// Major is the device's major number\n\tMajor int64 `json:\"major\"`\n\t// Minor is the device's minor number\n\tMinor int64 `json:\"minor\"`\n}\n\n// WeightDevice struct holds a `major:minor weight`|`major:minor leaf_weight` pair\ntype WeightDevice struct {\n\tBlockIODevice\n\t// Weight is the bandwidth rate for the device, range is from 10 to 1000\n\tWeight uint16 `json:\"weight\"`\n\t// LeafWeight is the bandwidth rate for the device while competing with the cgroup's child cgroups, range is from 10 to 1000, cfq scheduler only\n\tLeafWeight uint16 `json:\"leafWeight\"`\n}\n\n// NewWeightDevice returns a configured WeightDevice pointer\nfunc NewWeightDevice(major, minor int64, weight, leafWeight uint16) *WeightDevice {\n\twd := &WeightDevice{}\n\twd.Major = major\n\twd.Minor = minor\n\twd.Weight = weight\n\twd.LeafWeight = leafWeight\n\treturn wd\n}\n\n// WeightString formats the struct to be writable to the cgroup specific file\nfunc (wd *WeightDevice) WeightString() string {\n\treturn fmt.Sprintf(\"%d:%d %d\", wd.Major, wd.Minor, wd.Weight)\n}\n\n// LeafWeightString formats the struct to be writable to the cgroup specific file\nfunc (wd *WeightDevice) LeafWeightString() string {\n\treturn fmt.Sprintf(\"%d:%d %d\", wd.Major, wd.Minor, wd.LeafWeight)\n}\n\n// ThrottleDevice struct holds a `major:minor rate_per_second` pair\ntype ThrottleDevice struct {\n\tBlockIODevice\n\t// Rate is the IO rate limit per cgroup per device\n\tRate uint64 `json:\"rate\"`\n}\n\n// NewThrottleDevice returns a configured ThrottleDevice pointer\nfunc NewThrottleDevice(major, minor int64, rate uint64) *ThrottleDevice {\n\ttd := &ThrottleDevice{}\n\ttd.Major = major\n\ttd.Minor = minor\n\ttd.Rate = rate\n\treturn td\n}\n\n// String formats the struct to be writable to the cgroup specific file\nfunc (td *ThrottleDevice) String() string {\n\treturn fmt.Sprintf(\"%d:%d %d\", td.Major, td.Minor, td.Rate)\n}\n\n// StringName formats the struct to be writable to the cgroup specific file\nfunc (td *ThrottleDevice) StringName(name string) string {\n\treturn fmt.Sprintf(\"%d:%d %s=%d\", td.Major, td.Minor, name, td.Rate)\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/config_hugepages.go",
    "content": "package cgroups\n\ntype HugepageLimit struct {\n\t// which type of hugepage to limit.\n\tPagesize string `json:\"page_size\"`\n\n\t// usage limit for hugepage.\n\tLimit uint64 `json:\"limit\"`\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/config_ifprio_map.go",
    "content": "package cgroups\n\nimport (\n\t\"fmt\"\n)\n\ntype IfPrioMap struct {\n\tInterface string `json:\"interface\"`\n\tPriority  int64  `json:\"priority\"`\n}\n\nfunc (i *IfPrioMap) CgroupString() string {\n\treturn fmt.Sprintf(\"%s %d\", i.Interface, i.Priority)\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/config_linux.go",
    "content": "package cgroups\n\nimport (\n\tsystemdDbus \"github.com/coreos/go-systemd/v22/dbus\"\n\tdevices \"github.com/opencontainers/cgroups/devices/config\"\n)\n\ntype FreezerState string\n\nconst (\n\tUndefined FreezerState = \"\"\n\tFrozen    FreezerState = \"FROZEN\"\n\tThawed    FreezerState = \"THAWED\"\n)\n\n// Cgroup holds properties of a cgroup on Linux.\ntype Cgroup struct {\n\t// Name specifies the name of the cgroup\n\tName string `json:\"name,omitempty\"`\n\n\t// Parent specifies the name of parent of cgroup or slice\n\tParent string `json:\"parent,omitempty\"`\n\n\t// Path specifies the path to cgroups that are created and/or joined by the container.\n\t// The path is assumed to be relative to the host system cgroup mountpoint.\n\tPath string `json:\"path,omitempty\"`\n\n\t// ScopePrefix describes prefix for the scope name.\n\tScopePrefix string `json:\"scope_prefix,omitempty\"`\n\n\t// Resources contains various cgroups settings to apply.\n\t*Resources\n\n\t// Systemd tells if systemd should be used to manage cgroups.\n\tSystemd bool `json:\"Systemd,omitempty\"`\n\n\t// SystemdProps are any additional properties for systemd,\n\t// derived from org.systemd.property.xxx annotations.\n\t// Ignored unless systemd is used for managing cgroups.\n\tSystemdProps []systemdDbus.Property `json:\"-\"`\n\n\t// Rootless tells if rootless cgroups should be used.\n\tRootless bool `json:\"Rootless,omitempty\"`\n\n\t// The host UID that should own the cgroup, or nil to accept\n\t// the default ownership.  This should only be set when the\n\t// cgroupfs is to be mounted read/write.\n\t// Not all cgroup manager implementations support changing\n\t// the ownership.\n\tOwnerUID *int `json:\"owner_uid,omitempty\"`\n}\n\ntype Resources struct {\n\t// Devices is the set of access rules for devices in the container.\n\tDevices []*devices.Rule `json:\"devices,omitempty\"`\n\n\t// Memory limit (in bytes).\n\tMemory int64 `json:\"memory,omitempty\"`\n\n\t// Memory reservation or soft_limit (in bytes).\n\tMemoryReservation int64 `json:\"memory_reservation,omitempty\"`\n\n\t// Total memory usage (memory+swap); use -1 for unlimited swap.\n\tMemorySwap int64 `json:\"memory_swap,omitempty\"`\n\n\t// CPU shares (relative weight vs. other containers).\n\tCpuShares uint64 `json:\"cpu_shares,omitempty\"` //nolint:revive // Suppress \"var-naming: struct field CpuShares should be CPUShares\".\n\n\t// CPU hardcap limit (in usecs). Allowed cpu time in a given period.\n\tCpuQuota int64 `json:\"cpu_quota,omitempty\"` //nolint:revive // Suppress \"var-naming: struct field CpuQuota should be CPUQuota\".\n\n\t// CPU hardcap burst limit (in usecs). Allowed accumulated cpu time additionally for burst in a given period.\n\tCpuBurst *uint64 `json:\"cpu_burst,omitempty\"` //nolint:revive // Suppress \"var-naming: struct field CpuBurst should be CPUBurst\".\n\n\t// CPU period to be used for hardcapping (in usecs). 0 to use system default.\n\tCpuPeriod uint64 `json:\"cpu_period,omitempty\"` //nolint:revive // Suppress \"var-naming: struct field CpuPeriod should be CPUPeriod\".\n\n\t// How many time CPU will use in realtime scheduling (in usecs).\n\tCpuRtRuntime int64 `json:\"cpu_rt_quota,omitempty\"` //nolint:revive // Suppress \"var-naming: struct field CpuRtRuntime should be CPURtRuntime\".\n\n\t// CPU period to be used for realtime scheduling (in usecs).\n\tCpuRtPeriod uint64 `json:\"cpu_rt_period,omitempty\"` //nolint:revive // Suppress \"var-naming: struct field CpuQuota should be CPUQuota\".\n\n\t// Cpuset CPUs to use.\n\tCpusetCpus string `json:\"cpuset_cpus,omitempty\"`\n\n\t// Cpuset memory nodes to use.\n\tCpusetMems string `json:\"cpuset_mems,omitempty\"`\n\n\t// Cgroup's SCHED_IDLE value.\n\tCPUIdle *int64 `json:\"cpu_idle,omitempty\"`\n\n\t// Process limit; set < `0' to disable limit. `nil` means \"keep current limit\".\n\tPidsLimit *int64 `json:\"pids_limit,omitempty\"`\n\n\t// Specifies per cgroup weight, range is from 10 to 1000.\n\tBlkioWeight uint16 `json:\"blkio_weight,omitempty\"`\n\n\t// Tasks' weight in the given cgroup while competing with the cgroup's child cgroups, range is from 10 to 1000, cfq scheduler only.\n\tBlkioLeafWeight uint16 `json:\"blkio_leaf_weight,omitempty\"`\n\n\t// Weight per cgroup per device, can override BlkioWeight.\n\tBlkioWeightDevice []*WeightDevice `json:\"blkio_weight_device,omitempty\"`\n\n\t// IO read rate limit per cgroup per device, bytes per second.\n\tBlkioThrottleReadBpsDevice []*ThrottleDevice `json:\"blkio_throttle_read_bps_device,omitempty\"`\n\n\t// IO write rate limit per cgroup per device, bytes per second.\n\tBlkioThrottleWriteBpsDevice []*ThrottleDevice `json:\"blkio_throttle_write_bps_device,omitempty\"`\n\n\t// IO read rate limit per cgroup per device, IO per second.\n\tBlkioThrottleReadIOPSDevice []*ThrottleDevice `json:\"blkio_throttle_read_iops_device,omitempty\"`\n\n\t// IO write rate limit per cgroup per device, IO per second.\n\tBlkioThrottleWriteIOPSDevice []*ThrottleDevice `json:\"blkio_throttle_write_iops_device,omitempty\"`\n\n\t// Freeze value for the process.\n\tFreezer FreezerState `json:\"freezer,omitempty\"`\n\n\t// Hugetlb limit (in bytes).\n\tHugetlbLimit []*HugepageLimit `json:\"hugetlb_limit,omitempty\"`\n\n\t// Whether to disable OOM killer.\n\tOomKillDisable bool `json:\"oom_kill_disable,omitempty\"`\n\n\t// Tuning swappiness behaviour per cgroup.\n\tMemorySwappiness *uint64 `json:\"memory_swappiness,omitempty\"`\n\n\t// Set priority of network traffic for container.\n\tNetPrioIfpriomap []*IfPrioMap `json:\"net_prio_ifpriomap,omitempty\"`\n\n\t// Set class identifier for container's network packets.\n\tNetClsClassid uint32 `json:\"net_cls_classid_u,omitempty\"`\n\n\t// Rdma resource restriction configuration.\n\tRdma map[string]LinuxRdma `json:\"rdma,omitempty\"`\n\n\t// Used on cgroups v2:\n\n\t// CpuWeight sets a proportional bandwidth limit.\n\tCpuWeight uint64 `json:\"cpu_weight,omitempty\"` //nolint:revive // Suppress \"var-naming: struct field CpuWeight should be CPUWeight\".\n\n\t// Unified is cgroupv2-only key-value map.\n\tUnified map[string]string `json:\"unified,omitempty\"`\n\n\t// SkipDevices allows to skip configuring device permissions.\n\t// Used by e.g. kubelet while creating a parent cgroup (kubepods)\n\t// common for many containers, and by runc update.\n\t//\n\t// NOTE it is impossible to start a container which has this flag set.\n\tSkipDevices bool `json:\"-\"`\n\n\t// SkipFreezeOnSet is a flag for cgroup manager to skip the cgroup\n\t// freeze when setting resources. Only applicable to systemd legacy\n\t// (i.e. cgroup v1) manager (which uses freeze by default to avoid\n\t// spurious permission errors caused by systemd inability to update\n\t// device rules in a non-disruptive manner).\n\t//\n\t// If not set, a few methods (such as looking into cgroup's\n\t// devices.list and querying the systemd unit properties) are used\n\t// during Set() to figure out whether the freeze is required. Those\n\t// methods may be relatively slow, thus this flag.\n\tSkipFreezeOnSet bool `json:\"-\"`\n\n\t// MemoryCheckBeforeUpdate is a flag for cgroup v2 managers to check\n\t// if the new memory limits (Memory and MemorySwap) being set are lower\n\t// than the current memory usage, and reject if so.\n\tMemoryCheckBeforeUpdate bool `json:\"memory_check_before_update,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/config_rdma.go",
    "content": "package cgroups\n\n// LinuxRdma for Linux cgroup 'rdma' resource management (Linux 4.11)\ntype LinuxRdma struct {\n\t// Maximum number of HCA handles that can be opened. Default is \"no limit\".\n\tHcaHandles *uint32 `json:\"hca_handles,omitempty\"`\n\t// Maximum number of HCA objects that can be created. Default is \"no limit\".\n\tHcaObjects *uint32 `json:\"hca_objects,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/config_unsupported.go",
    "content": "//go:build !linux\n\npackage cgroups\n\n// Cgroup holds properties of a cgroup on Linux\n// TODO Windows: This can ultimately be entirely factored out on Windows as\n// cgroups are a Unix-specific construct.\ntype Cgroup struct{}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/devices/config/device.go",
    "content": "package config\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n)\n\nconst (\n\tWildcard = -1\n)\n\ntype Device struct {\n\tRule\n\n\t// Path to the device.\n\tPath string `json:\"path\"`\n\n\t// FileMode permission bits for the device.\n\tFileMode os.FileMode `json:\"file_mode\"`\n\n\t// Uid of the device.\n\tUid uint32 `json:\"uid,omitempty\"` //nolint:revive // Suppress \"var-naming: struct field Uid should be UID\".\n\n\t// Gid of the device.\n\tGid uint32 `json:\"gid,omitempty\"` //nolint:revive // Suppress \"var-naming: struct field Gid should be GID\".\n}\n\n// Permissions is a cgroupv1-style string to represent device access. It\n// has to be a string for backward compatibility reasons, hence why it has\n// methods to do set operations.\ntype Permissions string\n\nconst (\n\tdeviceRead uint = (1 << iota)\n\tdeviceWrite\n\tdeviceMknod\n)\n\nfunc (p Permissions) toSet() uint {\n\tvar set uint\n\tfor _, perm := range p {\n\t\tswitch perm {\n\t\tcase 'r':\n\t\t\tset |= deviceRead\n\t\tcase 'w':\n\t\t\tset |= deviceWrite\n\t\tcase 'm':\n\t\t\tset |= deviceMknod\n\t\t}\n\t}\n\treturn set\n}\n\nfunc fromSet(set uint) Permissions {\n\tvar perm string\n\tif set&deviceRead == deviceRead {\n\t\tperm += \"r\"\n\t}\n\tif set&deviceWrite == deviceWrite {\n\t\tperm += \"w\"\n\t}\n\tif set&deviceMknod == deviceMknod {\n\t\tperm += \"m\"\n\t}\n\treturn Permissions(perm)\n}\n\n// Union returns the union of the two sets of Permissions.\nfunc (p Permissions) Union(o Permissions) Permissions {\n\tlhs := p.toSet()\n\trhs := o.toSet()\n\treturn fromSet(lhs | rhs)\n}\n\n// Difference returns the set difference of the two sets of Permissions.\n// In set notation, A.Difference(B) gives you A\\B.\nfunc (p Permissions) Difference(o Permissions) Permissions {\n\tlhs := p.toSet()\n\trhs := o.toSet()\n\treturn fromSet(lhs &^ rhs)\n}\n\n// Intersection computes the intersection of the two sets of Permissions.\nfunc (p Permissions) Intersection(o Permissions) Permissions {\n\tlhs := p.toSet()\n\trhs := o.toSet()\n\treturn fromSet(lhs & rhs)\n}\n\n// IsEmpty returns whether the set of permissions in a Permissions is\n// empty.\nfunc (p Permissions) IsEmpty() bool {\n\treturn p == Permissions(\"\")\n}\n\n// IsValid returns whether the set of permissions is a subset of valid\n// permissions (namely, {r,w,m}).\nfunc (p Permissions) IsValid() bool {\n\treturn p == fromSet(p.toSet())\n}\n\ntype Type rune\n\nconst (\n\tWildcardDevice Type = 'a'\n\tBlockDevice    Type = 'b'\n\tCharDevice     Type = 'c' // or 'u'\n\tFifoDevice     Type = 'p'\n)\n\nfunc (t Type) IsValid() bool {\n\tswitch t {\n\tcase WildcardDevice, BlockDevice, CharDevice, FifoDevice:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc (t Type) CanMknod() bool {\n\tswitch t {\n\tcase BlockDevice, CharDevice, FifoDevice:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc (t Type) CanCgroup() bool {\n\tswitch t {\n\tcase WildcardDevice, BlockDevice, CharDevice:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\ntype Rule struct {\n\t// Type of device ('c' for char, 'b' for block). If set to 'a', this rule\n\t// acts as a wildcard and all fields other than Allow are ignored.\n\tType Type `json:\"type\"`\n\n\t// Major is the device's major number.\n\tMajor int64 `json:\"major\"`\n\n\t// Minor is the device's minor number.\n\tMinor int64 `json:\"minor\"`\n\n\t// Permissions is the set of permissions that this rule applies to (in the\n\t// cgroupv1 format -- any combination of \"rwm\").\n\tPermissions Permissions `json:\"permissions\"`\n\n\t// Allow specifies whether this rule is allowed.\n\tAllow bool `json:\"allow\"`\n}\n\nfunc (d *Rule) CgroupString() string {\n\tvar (\n\t\tmajor = strconv.FormatInt(d.Major, 10)\n\t\tminor = strconv.FormatInt(d.Minor, 10)\n\t)\n\tif d.Major == Wildcard {\n\t\tmajor = \"*\"\n\t}\n\tif d.Minor == Wildcard {\n\t\tminor = \"*\"\n\t}\n\treturn fmt.Sprintf(\"%c %s:%s %s\", d.Type, major, minor, d.Permissions)\n}\n\nfunc (d *Rule) Mkdev() (uint64, error) {\n\treturn mkDev(d)\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/devices/config/mknod_unix.go",
    "content": "package config\n\nimport (\n\t\"errors\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc mkDev(d *Rule) (uint64, error) {\n\tif d.Major == Wildcard || d.Minor == Wildcard {\n\t\treturn 0, errors.New(\"cannot mkdev() device with wildcards\")\n\t}\n\treturn unix.Mkdev(uint32(d.Major), uint32(d.Minor)), nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/devices/devicefilter.go",
    "content": "// Implements creation of eBPF device filter program.\n//\n// Based on https://github.com/containers/crun/blob/0.10.2/src/libcrun/ebpf.c\n//\n// Although ebpf.c is originally licensed under LGPL-3.0-or-later, the author (Giuseppe Scrivano)\n// agreed to relicense the file in Apache License 2.0: https://github.com/opencontainers/runc/issues/2144#issuecomment-543116397\npackage devices\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"strconv\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\tdevices \"github.com/opencontainers/cgroups/devices/config\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\t// license string format is same as kernel MODULE_LICENSE macro\n\tlicense = \"Apache\"\n)\n\n// deviceFilter returns eBPF device filter program and its license string.\nfunc deviceFilter(rules []*devices.Rule) (asm.Instructions, string, error) {\n\t// Generate the minimum ruleset for the device rules we are given. While we\n\t// don't care about minimum transitions in cgroupv2, using the emulator\n\t// gives us a guarantee that the behaviour of devices filtering is the same\n\t// as cgroupv1, including security hardenings to avoid misconfiguration\n\t// (such as punching holes in wildcard rules).\n\temu := new(emulator)\n\tfor _, rule := range rules {\n\t\tif err := emu.Apply(*rule); err != nil {\n\t\t\treturn nil, \"\", err\n\t\t}\n\t}\n\tcleanRules, err := emu.Rules()\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\n\tp := &program{\n\t\tdefaultAllow: emu.IsBlacklist(),\n\t}\n\tp.init()\n\n\tfor idx, rule := range cleanRules {\n\t\tif rule.Type == devices.WildcardDevice {\n\t\t\t// We can safely skip over wildcard entries because there should\n\t\t\t// only be one (at most) at the very start to instruct cgroupv1 to\n\t\t\t// go into allow-list mode. However we do double-check this here.\n\t\t\tif idx != 0 || rule.Allow != emu.IsBlacklist() {\n\t\t\t\treturn nil, \"\", fmt.Errorf(\"[internal error] emulated cgroupv2 devices ruleset had bad wildcard at idx %v (%s)\", idx, rule.CgroupString())\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif rule.Allow == p.defaultAllow {\n\t\t\t// There should be no rules which have an action equal to the\n\t\t\t// default action, the emulator removes those.\n\t\t\treturn nil, \"\", fmt.Errorf(\"[internal error] emulated cgroupv2 devices ruleset had no-op rule at idx %v (%s)\", idx, rule.CgroupString())\n\t\t}\n\t\tif err := p.appendRule(rule); err != nil {\n\t\t\treturn nil, \"\", err\n\t\t}\n\t}\n\treturn p.finalize(), license, nil\n}\n\ntype program struct {\n\tinsts        asm.Instructions\n\tdefaultAllow bool\n\tblockID      int\n}\n\nfunc (p *program) init() {\n\t// struct bpf_cgroup_dev_ctx: https://elixir.bootlin.com/linux/v5.3.6/source/include/uapi/linux/bpf.h#L3423\n\t/*\n\t\tu32 access_type\n\t\tu32 major\n\t\tu32 minor\n\t*/\n\t// R2 <- type (lower 16 bit of u32 access_type at R1[0])\n\tp.insts = append(p.insts,\n\t\tasm.LoadMem(asm.R2, asm.R1, 0, asm.Word),\n\t\tasm.And.Imm32(asm.R2, 0xFFFF))\n\n\t// R3 <- access (upper 16 bit of u32 access_type at R1[0])\n\tp.insts = append(p.insts,\n\t\tasm.LoadMem(asm.R3, asm.R1, 0, asm.Word),\n\t\t// RSh: bitwise shift right\n\t\tasm.RSh.Imm32(asm.R3, 16))\n\n\t// R4 <- major (u32 major at R1[4])\n\tp.insts = append(p.insts,\n\t\tasm.LoadMem(asm.R4, asm.R1, 4, asm.Word))\n\n\t// R5 <- minor (u32 minor at R1[8])\n\tp.insts = append(p.insts,\n\t\tasm.LoadMem(asm.R5, asm.R1, 8, asm.Word))\n}\n\n// appendRule rule converts an OCI rule to the relevant eBPF block and adds it\n// to the in-progress filter program. In order to operate properly, it must be\n// called with a \"clean\" rule list (generated by devices.Emulator.Rules() --\n// with any \"a\" rules removed).\nfunc (p *program) appendRule(rule *devices.Rule) error {\n\tif p.blockID < 0 {\n\t\treturn errors.New(\"the program is finalized\")\n\t}\n\n\tvar bpfType int32\n\tswitch rule.Type {\n\tcase devices.CharDevice:\n\t\tbpfType = int32(unix.BPF_DEVCG_DEV_CHAR)\n\tcase devices.BlockDevice:\n\t\tbpfType = int32(unix.BPF_DEVCG_DEV_BLOCK)\n\tdefault:\n\t\t// We do not permit 'a', nor any other types we don't know about.\n\t\treturn fmt.Errorf(\"invalid type %q\", string(rule.Type))\n\t}\n\tif rule.Major > math.MaxUint32 {\n\t\treturn fmt.Errorf(\"invalid major %d\", rule.Major)\n\t}\n\tif rule.Minor > math.MaxUint32 {\n\t\treturn fmt.Errorf(\"invalid minor %d\", rule.Major)\n\t}\n\thasMajor := rule.Major >= 0 // if not specified in OCI json, major is set to -1\n\thasMinor := rule.Minor >= 0\n\tbpfAccess := int32(0)\n\tfor _, r := range rule.Permissions {\n\t\tswitch r {\n\t\tcase 'r':\n\t\t\tbpfAccess |= unix.BPF_DEVCG_ACC_READ\n\t\tcase 'w':\n\t\t\tbpfAccess |= unix.BPF_DEVCG_ACC_WRITE\n\t\tcase 'm':\n\t\t\tbpfAccess |= unix.BPF_DEVCG_ACC_MKNOD\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unknown device access %v\", r)\n\t\t}\n\t}\n\t// If the access is rwm, skip the check.\n\thasAccess := bpfAccess != (unix.BPF_DEVCG_ACC_READ | unix.BPF_DEVCG_ACC_WRITE | unix.BPF_DEVCG_ACC_MKNOD)\n\n\tvar (\n\t\tblockSym         = \"block-\" + strconv.Itoa(p.blockID)\n\t\tnextBlockSym     = \"block-\" + strconv.Itoa(p.blockID+1)\n\t\tprevBlockLastIdx = len(p.insts) - 1\n\t)\n\tp.insts = append(p.insts,\n\t\t// if (R2 != bpfType) goto next\n\t\tasm.JNE.Imm(asm.R2, bpfType, nextBlockSym),\n\t)\n\tif hasAccess {\n\t\tp.insts = append(p.insts,\n\t\t\t// if (R3 & bpfAccess != R3 /* use R1 as a temp var */) goto next\n\t\t\tasm.Mov.Reg32(asm.R1, asm.R3),\n\t\t\tasm.And.Imm32(asm.R1, bpfAccess),\n\t\t\tasm.JNE.Reg(asm.R1, asm.R3, nextBlockSym),\n\t\t)\n\t}\n\tif hasMajor {\n\t\tp.insts = append(p.insts,\n\t\t\t// if (R4 != major) goto next\n\t\t\tasm.JNE.Imm(asm.R4, int32(rule.Major), nextBlockSym),\n\t\t)\n\t}\n\tif hasMinor {\n\t\tp.insts = append(p.insts,\n\t\t\t// if (R5 != minor) goto next\n\t\t\tasm.JNE.Imm(asm.R5, int32(rule.Minor), nextBlockSym),\n\t\t)\n\t}\n\tp.insts = append(p.insts, acceptBlock(rule.Allow)...)\n\t// set blockSym to the first instruction we added in this iteration\n\tp.insts[prevBlockLastIdx+1] = p.insts[prevBlockLastIdx+1].WithSymbol(blockSym)\n\tp.blockID++\n\treturn nil\n}\n\nfunc (p *program) finalize() asm.Instructions {\n\tvar v int32\n\tif p.defaultAllow {\n\t\tv = 1\n\t}\n\tblockSym := \"block-\" + strconv.Itoa(p.blockID)\n\tp.insts = append(p.insts,\n\t\t// R0 <- v\n\t\tasm.Mov.Imm32(asm.R0, v).WithSymbol(blockSym),\n\t\tasm.Return(),\n\t)\n\tp.blockID = -1\n\treturn p.insts\n}\n\nfunc acceptBlock(accept bool) asm.Instructions {\n\tvar v int32\n\tif accept {\n\t\tv = 1\n\t}\n\treturn []asm.Instruction{\n\t\t// R0 <- v\n\t\tasm.Mov.Imm32(asm.R0, v),\n\t\tasm.Return(),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/devices/devices.go",
    "content": "// Package devices contains functionality to manage cgroup devices, which\n// is exposed indirectly via libcontainer/cgroups managers.\n//\n// To enable cgroup managers to manage devices, this package must be imported.\npackage devices\n\nimport (\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/systemd\"\n)\n\nfunc init() {\n\tcgroups.DevicesSetV1 = setV1\n\tcgroups.DevicesSetV2 = setV2\n\tsystemd.GenerateDeviceProps = systemdProperties\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/devices/devices_emulator.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n/*\n * Copyright (C) 2020 Aleksa Sarai <cyphar@cyphar.com>\n * Copyright (C) 2020 SUSE LLC\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 devices\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"io\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\tdevices \"github.com/opencontainers/cgroups/devices/config\"\n)\n\n// deviceMeta is a Rule without the Allow or Permissions fields, and no\n// wildcard-type support. It's effectively the \"match\" portion of a metadata\n// rule, for the purposes of our emulation.\ntype deviceMeta struct {\n\tnode  devices.Type\n\tmajor int64\n\tminor int64\n}\n\n// deviceRule is effectively the tuple (deviceMeta, Permissions).\ntype deviceRule struct {\n\tmeta  deviceMeta\n\tperms devices.Permissions\n}\n\n// deviceRules is a mapping of device metadata rules to the associated\n// permissions in the ruleset.\ntype deviceRules map[deviceMeta]devices.Permissions\n\nfunc (r deviceRules) orderedEntries() []deviceRule {\n\tvar rules []deviceRule\n\tfor meta, perms := range r {\n\t\trules = append(rules, deviceRule{meta: meta, perms: perms})\n\t}\n\tsort.Slice(rules, func(i, j int) bool {\n\t\t// Sort by (major, minor, type).\n\t\ta, b := rules[i].meta, rules[j].meta\n\t\treturn a.major < b.major ||\n\t\t\t(a.major == b.major && a.minor < b.minor) ||\n\t\t\t(a.major == b.major && a.minor == b.minor && a.node < b.node)\n\t})\n\treturn rules\n}\n\ntype emulator struct {\n\tdefaultAllow bool\n\trules        deviceRules\n}\n\nfunc (e *emulator) IsBlacklist() bool {\n\treturn e.defaultAllow\n}\n\nfunc (e *emulator) IsAllowAll() bool {\n\treturn e.IsBlacklist() && len(e.rules) == 0\n}\n\nfunc parseLine(line string) (*deviceRule, error) {\n\t// Input: node major:minor perms.\n\tfields := strings.FieldsFunc(line, func(r rune) bool {\n\t\treturn r == ' ' || r == ':'\n\t})\n\tif len(fields) != 4 {\n\t\treturn nil, fmt.Errorf(\"malformed devices.list rule %s\", line)\n\t}\n\n\tvar (\n\t\trule  deviceRule\n\t\tnode  = fields[0]\n\t\tmajor = fields[1]\n\t\tminor = fields[2]\n\t\tperms = fields[3]\n\t)\n\n\t// Parse the node type.\n\tswitch node {\n\tcase \"a\":\n\t\t// Super-special case -- \"a\" always means every device with every\n\t\t// access mode. In fact, for devices.list this actually indicates that\n\t\t// the cgroup is in black-list mode.\n\t\t// TODO: Double-check that the entire file is \"a *:* rwm\".\n\t\treturn nil, nil\n\tcase \"b\":\n\t\trule.meta.node = devices.BlockDevice\n\tcase \"c\":\n\t\trule.meta.node = devices.CharDevice\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown device type %q\", node)\n\t}\n\n\t// Parse the major number.\n\tif major == \"*\" {\n\t\trule.meta.major = devices.Wildcard\n\t} else {\n\t\tval, err := strconv.ParseUint(major, 10, 32)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid major number: %w\", err)\n\t\t}\n\t\trule.meta.major = int64(val)\n\t}\n\n\t// Parse the minor number.\n\tif minor == \"*\" {\n\t\trule.meta.minor = devices.Wildcard\n\t} else {\n\t\tval, err := strconv.ParseUint(minor, 10, 32)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid minor number: %w\", err)\n\t\t}\n\t\trule.meta.minor = int64(val)\n\t}\n\n\t// Parse the access permissions.\n\trule.perms = devices.Permissions(perms)\n\tif !rule.perms.IsValid() || rule.perms.IsEmpty() {\n\t\treturn nil, fmt.Errorf(\"parse access mode: contained unknown modes or is empty: %q\", perms)\n\t}\n\treturn &rule, nil\n}\n\nfunc (e *emulator) addRule(rule deviceRule) error { //nolint:unparam\n\tif e.rules == nil {\n\t\te.rules = make(map[deviceMeta]devices.Permissions)\n\t}\n\n\t// Merge with any pre-existing permissions.\n\toldPerms := e.rules[rule.meta]\n\tnewPerms := rule.perms.Union(oldPerms)\n\te.rules[rule.meta] = newPerms\n\treturn nil\n}\n\nfunc (e *emulator) rmRule(rule deviceRule) error {\n\t// Give an error if any of the permissions requested to be removed are\n\t// present in a partially-matching wildcard rule, because such rules will\n\t// be ignored by cgroupv1.\n\t//\n\t// This is a diversion from cgroupv1, but is necessary to avoid leading\n\t// users into a false sense of security. cgroupv1 will silently(!) ignore\n\t// requests to remove partial exceptions, but we really shouldn't do that.\n\t//\n\t// It may seem like we could just \"split\" wildcard rules which hit this\n\t// issue, but unfortunately there are 2^32 possible major and minor\n\t// numbers, which would exhaust kernel memory quickly if we did this. Not\n\t// to mention it'd be really slow (the kernel side is implemented as a\n\t// linked-list of exceptions).\n\tfor _, partialMeta := range []deviceMeta{\n\t\t{node: rule.meta.node, major: devices.Wildcard, minor: rule.meta.minor},\n\t\t{node: rule.meta.node, major: rule.meta.major, minor: devices.Wildcard},\n\t\t{node: rule.meta.node, major: devices.Wildcard, minor: devices.Wildcard},\n\t} {\n\t\t// This wildcard rule is equivalent to the requested rule, so skip it.\n\t\tif rule.meta == partialMeta {\n\t\t\tcontinue\n\t\t}\n\t\t// Only give an error if the set of permissions overlap.\n\t\tpartialPerms := e.rules[partialMeta]\n\t\tif !partialPerms.Intersection(rule.perms).IsEmpty() {\n\t\t\treturn fmt.Errorf(\"requested rule [%v %v] not supported by devices cgroupv1 (cannot punch hole in existing wildcard rule [%v %v])\", rule.meta, rule.perms, partialMeta, partialPerms)\n\t\t}\n\t}\n\n\t// Subtract all of the permissions listed from the full match rule. If the\n\t// rule didn't exist, all of this is a no-op.\n\tnewPerms := e.rules[rule.meta].Difference(rule.perms)\n\tif newPerms.IsEmpty() {\n\t\tdelete(e.rules, rule.meta)\n\t} else {\n\t\te.rules[rule.meta] = newPerms\n\t}\n\t// TODO: The actual cgroup code doesn't care if an exception didn't exist\n\t//       during removal, so not erroring out here is /accurate/ but quite\n\t//       worrying. Maybe we should do additional validation, but again we\n\t//       have to worry about backwards-compatibility.\n\treturn nil\n}\n\nfunc (e *emulator) allow(rule *deviceRule) error {\n\t// This cgroup is configured as a black-list. Reset the entire emulator,\n\t// and put is into black-list mode.\n\tif rule == nil || rule.meta.node == devices.WildcardDevice {\n\t\t*e = emulator{\n\t\t\tdefaultAllow: true,\n\t\t\trules:        nil,\n\t\t}\n\t\treturn nil\n\t}\n\n\tvar err error\n\tif e.defaultAllow {\n\t\terr = wrapErr(e.rmRule(*rule), \"unable to remove 'deny' exception\")\n\t} else {\n\t\terr = wrapErr(e.addRule(*rule), \"unable to add 'allow' exception\")\n\t}\n\treturn err\n}\n\nfunc (e *emulator) deny(rule *deviceRule) error {\n\t// This cgroup is configured as a white-list. Reset the entire emulator,\n\t// and put is into white-list mode.\n\tif rule == nil || rule.meta.node == devices.WildcardDevice {\n\t\t*e = emulator{\n\t\t\tdefaultAllow: false,\n\t\t\trules:        nil,\n\t\t}\n\t\treturn nil\n\t}\n\n\tvar err error\n\tif e.defaultAllow {\n\t\terr = wrapErr(e.addRule(*rule), \"unable to add 'deny' exception\")\n\t} else {\n\t\terr = wrapErr(e.rmRule(*rule), \"unable to remove 'allow' exception\")\n\t}\n\treturn err\n}\n\nfunc (e *emulator) Apply(rule devices.Rule) error {\n\tif !rule.Type.CanCgroup() {\n\t\treturn fmt.Errorf(\"cannot add rule [%#v] with non-cgroup type %q\", rule, rule.Type)\n\t}\n\n\tinnerRule := &deviceRule{\n\t\tmeta: deviceMeta{\n\t\t\tnode:  rule.Type,\n\t\t\tmajor: rule.Major,\n\t\t\tminor: rule.Minor,\n\t\t},\n\t\tperms: rule.Permissions,\n\t}\n\tif innerRule.meta.node == devices.WildcardDevice {\n\t\tinnerRule = nil\n\t}\n\n\tif rule.Allow {\n\t\treturn e.allow(innerRule)\n\t}\n\n\treturn e.deny(innerRule)\n}\n\n// emulatorFromList takes a reader to a \"devices.list\"-like source, and returns\n// a new emulator that represents the state of the devices cgroup. Note that\n// black-list devices cgroups cannot be fully reconstructed, due to limitations\n// in the devices cgroup API. Instead, such cgroups are always treated as\n// \"allow all\" cgroups.\nfunc emulatorFromList(list io.Reader) (*emulator, error) {\n\t// Normally cgroups are in black-list mode by default, but the way we\n\t// figure out the current mode is whether or not devices.list has an\n\t// allow-all rule. So we default to a white-list, and the existence of an\n\t// \"a *:* rwm\" entry will tell us otherwise.\n\te := &emulator{\n\t\tdefaultAllow: false,\n\t}\n\n\t// Parse the \"devices.list\".\n\ts := bufio.NewScanner(list)\n\tfor s.Scan() {\n\t\tline := s.Text()\n\t\tdeviceRule, err := parseLine(line)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error parsing line %q: %w\", line, err)\n\t\t}\n\t\t// \"devices.list\" is an allow list. Note that this means that in\n\t\t// black-list mode, we have no idea what rules are in play. As a\n\t\t// result, we need to be very careful in Transition().\n\t\tif err := e.allow(deviceRule); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error adding devices.list rule: %w\", err)\n\t\t}\n\t}\n\tif err := s.Err(); err != nil {\n\t\treturn nil, fmt.Errorf(\"error reading devices.list lines: %w\", err)\n\t}\n\treturn e, nil\n}\n\n// Transition calculates what is the minimally-disruptive set of rules need to\n// be applied to a devices cgroup in order to transition to the given target.\n// This means that any already-existing rules will not be applied, and\n// disruptive rules (like denying all device access) will only be applied if\n// necessary.\n//\n// This function is the sole reason for all of emulator -- to allow us\n// to figure out how to update a containers' cgroups without causing spurious\n// device errors (if possible).\nfunc (e *emulator) Transition(target *emulator) ([]*devices.Rule, error) {\n\tvar transitionRules []*devices.Rule\n\tsource := e\n\toldRules := source.rules\n\n\t// If the default policy doesn't match, we need to include a \"disruptive\"\n\t// rule (either allow-all or deny-all) in order to switch the cgroup to the\n\t// correct default policy.\n\t//\n\t// However, due to a limitation in \"devices.list\" we cannot be sure what\n\t// deny rules are in place in a black-list cgroup. Thus if the source is a\n\t// black-list we also have to include a disruptive rule.\n\tif source.IsBlacklist() || source.defaultAllow != target.defaultAllow {\n\t\ttransitionRules = append(transitionRules, &devices.Rule{\n\t\t\tType:        'a',\n\t\t\tMajor:       -1,\n\t\t\tMinor:       -1,\n\t\t\tPermissions: devices.Permissions(\"rwm\"),\n\t\t\tAllow:       target.defaultAllow,\n\t\t})\n\t\t// The old rules are only relevant if we aren't starting out with a\n\t\t// disruptive rule.\n\t\toldRules = nil\n\t}\n\n\t// NOTE: We traverse through the rules in a sorted order so we always write\n\t//       the same set of rules (this is to aid testing).\n\n\t// First, we create inverse rules for any old rules not in the new set.\n\t// This includes partial-inverse rules for specific permissions. This is a\n\t// no-op if we added a disruptive rule, since oldRules will be empty.\n\tfor _, rule := range oldRules.orderedEntries() {\n\t\tmeta, oldPerms := rule.meta, rule.perms\n\t\tnewPerms := target.rules[meta]\n\t\tdroppedPerms := oldPerms.Difference(newPerms)\n\t\tif !droppedPerms.IsEmpty() {\n\t\t\ttransitionRules = append(transitionRules, &devices.Rule{\n\t\t\t\tType:        meta.node,\n\t\t\t\tMajor:       meta.major,\n\t\t\t\tMinor:       meta.minor,\n\t\t\t\tPermissions: droppedPerms,\n\t\t\t\tAllow:       target.defaultAllow,\n\t\t\t})\n\t\t}\n\t}\n\n\t// Add any additional rules which weren't in the old set. We happen to\n\t// filter out rules which are present in both sets, though this isn't\n\t// strictly necessary.\n\tfor _, rule := range target.rules.orderedEntries() {\n\t\tmeta, newPerms := rule.meta, rule.perms\n\t\toldPerms := oldRules[meta]\n\t\tgainedPerms := newPerms.Difference(oldPerms)\n\t\tif !gainedPerms.IsEmpty() {\n\t\t\ttransitionRules = append(transitionRules, &devices.Rule{\n\t\t\t\tType:        meta.node,\n\t\t\t\tMajor:       meta.major,\n\t\t\t\tMinor:       meta.minor,\n\t\t\t\tPermissions: gainedPerms,\n\t\t\t\tAllow:       !target.defaultAllow,\n\t\t\t})\n\t\t}\n\t}\n\treturn transitionRules, nil\n}\n\n// Rules returns the minimum set of rules necessary to convert a *deny-all*\n// cgroup to the emulated filter state (note that this is not the same as a\n// default cgroupv1 cgroup -- which is allow-all). This is effectively just a\n// wrapper around Transition() with the source emulator being an empty cgroup.\nfunc (e *emulator) Rules() ([]*devices.Rule, error) {\n\tdefaultCgroup := &emulator{defaultAllow: false}\n\treturn defaultCgroup.Transition(e)\n}\n\nfunc wrapErr(err error, text string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(text+\": %w\", err)\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/devices/ebpf_linux.go",
    "content": "package devices\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"sync\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/link\"\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc nilCloser() error {\n\treturn nil\n}\n\nfunc findAttachedCgroupDeviceFilters(dirFd int) ([]*ebpf.Program, error) {\n\ttype bpfAttrQuery struct {\n\t\tTargetFd    uint32\n\t\tAttachType  uint32\n\t\tQueryType   uint32\n\t\tAttachFlags uint32\n\t\tProgIds     uint64 // __aligned_u64\n\t\tProgCnt     uint32\n\t}\n\n\t// Currently you can only have 64 eBPF programs attached to a cgroup.\n\tsize := 64\n\tretries := 0\n\tfor retries < 10 {\n\t\tprogIds := make([]uint32, size)\n\t\tquery := bpfAttrQuery{\n\t\t\tTargetFd:   uint32(dirFd),\n\t\t\tAttachType: uint32(unix.BPF_CGROUP_DEVICE),\n\t\t\tProgIds:    uint64(uintptr(unsafe.Pointer(&progIds[0]))),\n\t\t\tProgCnt:    uint32(len(progIds)),\n\t\t}\n\n\t\t// Fetch the list of program ids.\n\t\t_, _, errno := unix.Syscall(unix.SYS_BPF,\n\t\t\tuintptr(unix.BPF_PROG_QUERY),\n\t\t\tuintptr(unsafe.Pointer(&query)),\n\t\t\tunsafe.Sizeof(query))\n\t\tsize = int(query.ProgCnt)\n\t\truntime.KeepAlive(query)\n\t\tif errno != 0 {\n\t\t\t// On ENOSPC we get the correct number of programs.\n\t\t\tif errno == unix.ENOSPC {\n\t\t\t\tretries++\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"bpf_prog_query(BPF_CGROUP_DEVICE) failed: %w\", errno)\n\t\t}\n\n\t\t// Convert the ids to program handles.\n\t\tprogIds = progIds[:size]\n\t\tprograms := make([]*ebpf.Program, 0, len(progIds))\n\t\tfor _, progId := range progIds {\n\t\t\tprogram, err := ebpf.NewProgramFromID(ebpf.ProgramID(progId))\n\t\t\tif err != nil {\n\t\t\t\t// We skip over programs that give us -EACCES or -EPERM. This\n\t\t\t\t// is necessary because there may be BPF programs that have\n\t\t\t\t// been attached (such as with --systemd-cgroup) which have an\n\t\t\t\t// LSM label that blocks us from interacting with the program.\n\t\t\t\t//\n\t\t\t\t// Because additional BPF_CGROUP_DEVICE programs only can add\n\t\t\t\t// restrictions, there's no real issue with just ignoring these\n\t\t\t\t// programs (and stops runc from breaking on distributions with\n\t\t\t\t// very strict SELinux policies).\n\t\t\t\tif errors.Is(err, os.ErrPermission) {\n\t\t\t\t\tlogrus.Debugf(\"ignoring existing CGROUP_DEVICE program (prog_id=%v) which cannot be accessed by runc -- likely due to LSM policy: %v\", progId, err)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\treturn nil, fmt.Errorf(\"cannot fetch program from id: %w\", err)\n\t\t\t}\n\t\t\tprograms = append(programs, program)\n\t\t}\n\t\truntime.KeepAlive(progIds)\n\t\treturn programs, nil\n\t}\n\n\treturn nil, errors.New(\"could not get complete list of CGROUP_DEVICE programs\")\n}\n\nvar (\n\thaveBpfProgReplaceBool bool\n\thaveBpfProgReplaceOnce sync.Once\n)\n\n// Loosely based on the BPF_F_REPLACE support check in\n// https://github.com/cilium/ebpf/blob/v0.6.0/link/syscalls.go.\n//\n// TODO: move this logic to cilium/ebpf\nfunc haveBpfProgReplace() bool {\n\thaveBpfProgReplaceOnce.Do(func() {\n\t\tprog, err := ebpf.NewProgram(&ebpf.ProgramSpec{\n\t\t\tType:    ebpf.CGroupDevice,\n\t\t\tLicense: \"MIT\",\n\t\t\tInstructions: asm.Instructions{\n\t\t\t\tasm.Mov.Imm(asm.R0, 0),\n\t\t\t\tasm.Return(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\tlogrus.Warnf(\"checking for BPF_F_REPLACE support: ebpf.NewProgram failed: %v\", err)\n\t\t\treturn\n\t\t}\n\t\tdefer prog.Close()\n\n\t\tdevnull, err := os.Open(\"/dev/null\")\n\t\tif err != nil {\n\t\t\tlogrus.Warnf(\"checking for BPF_F_REPLACE support: open dummy target fd: %v\", err)\n\t\t\treturn\n\t\t}\n\t\tdefer devnull.Close()\n\n\t\t// We know that we have BPF_PROG_ATTACH since we can load\n\t\t// BPF_CGROUP_DEVICE programs. If passing BPF_F_REPLACE gives us EINVAL\n\t\t// we know that the feature isn't present.\n\t\terr = link.RawAttachProgram(link.RawAttachProgramOptions{\n\t\t\t// We rely on this fd being checked after attachFlags in the kernel.\n\t\t\tTarget: int(devnull.Fd()),\n\t\t\t// Attempt to \"replace\" our BPF program with itself. This will\n\t\t\t// always fail, but we should get -EINVAL if BPF_F_REPLACE is not\n\t\t\t// supported.\n\t\t\tAnchor:  link.ReplaceProgram(prog),\n\t\t\tProgram: prog,\n\t\t\tAttach:  ebpf.AttachCGroupDevice,\n\t\t\tFlags:   unix.BPF_F_ALLOW_MULTI,\n\t\t})\n\t\tif errors.Is(err, ebpf.ErrNotSupported) || errors.Is(err, unix.EINVAL) {\n\t\t\t// not supported\n\t\t\treturn\n\t\t}\n\t\tif !errors.Is(err, unix.EBADF) {\n\t\t\t// If we see any new errors here, it's possible that there is a\n\t\t\t// regression due to a cilium/ebpf update and the above EINVAL\n\t\t\t// checks are not working. So, be loud about it so someone notices\n\t\t\t// and we can get the issue fixed quicker.\n\t\t\tlogrus.Warnf(\"checking for BPF_F_REPLACE: got unexpected (not EBADF or EINVAL) error: %v\", err)\n\t\t}\n\t\thaveBpfProgReplaceBool = true\n\t})\n\treturn haveBpfProgReplaceBool\n}\n\n// loadAttachCgroupDeviceFilter installs eBPF device filter program to /sys/fs/cgroup/<foo> directory.\n//\n// Requires the system to be running in cgroup2 unified-mode with kernel >= 4.15 .\n//\n// https://github.com/torvalds/linux/commit/ebc614f687369f9df99828572b1d85a7c2de3d92\nfunc loadAttachCgroupDeviceFilter(insts asm.Instructions, license string, dirFd int) (func() error, error) {\n\t// Increase `ulimit -l` limit to avoid BPF_PROG_LOAD error (#2167).\n\t// This limit is not inherited into the container.\n\tmemlockLimit := &unix.Rlimit{\n\t\tCur: unix.RLIM_INFINITY,\n\t\tMax: unix.RLIM_INFINITY,\n\t}\n\t_ = unix.Setrlimit(unix.RLIMIT_MEMLOCK, memlockLimit)\n\n\t// Get the list of existing programs.\n\toldProgs, err := findAttachedCgroupDeviceFilters(dirFd)\n\tif err != nil {\n\t\treturn nilCloser, err\n\t}\n\tuseReplaceProg := haveBpfProgReplace() && len(oldProgs) == 1\n\n\t// Generate new program.\n\tspec := &ebpf.ProgramSpec{\n\t\tType:         ebpf.CGroupDevice,\n\t\tInstructions: insts,\n\t\tLicense:      license,\n\t}\n\tprog, err := ebpf.NewProgram(spec)\n\tif err != nil {\n\t\treturn nilCloser, err\n\t}\n\n\t// If there is only one old program, we can just replace it directly.\n\n\tattachProgramOptions := link.RawAttachProgramOptions{\n\t\tTarget:  dirFd,\n\t\tProgram: prog,\n\t\tAttach:  ebpf.AttachCGroupDevice,\n\t\tFlags:   unix.BPF_F_ALLOW_MULTI,\n\t}\n\n\tif useReplaceProg {\n\t\tattachProgramOptions.Anchor = link.ReplaceProgram(oldProgs[0])\n\t}\n\terr = link.RawAttachProgram(attachProgramOptions)\n\tif err != nil {\n\t\treturn nilCloser, fmt.Errorf(\"failed to call BPF_PROG_ATTACH (BPF_CGROUP_DEVICE, BPF_F_ALLOW_MULTI): %w\", err)\n\t}\n\tcloser := func() error {\n\t\terr = link.RawDetachProgram(link.RawDetachProgramOptions{\n\t\t\tTarget:  dirFd,\n\t\t\tProgram: prog,\n\t\t\tAttach:  ebpf.AttachCGroupDevice,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to call BPF_PROG_DETACH (BPF_CGROUP_DEVICE): %w\", err)\n\t\t}\n\t\t// TODO: Should we attach the old filters back in this case? Otherwise\n\t\t//       we fail-open on a security feature, which is a bit scary.\n\t\treturn nil\n\t}\n\tif !useReplaceProg {\n\t\tlogLevel := logrus.DebugLevel\n\t\t// If there was more than one old program, give a warning (since this\n\t\t// really shouldn't happen with runc-managed cgroups) and then detach\n\t\t// all the old programs.\n\t\tif len(oldProgs) > 1 {\n\t\t\t// NOTE: Ideally this should be a warning but it turns out that\n\t\t\t//       systemd-managed cgroups trigger this warning (apparently\n\t\t\t//       systemd doesn't delete old non-systemd programs when\n\t\t\t//       setting properties).\n\t\t\tlogrus.Infof(\"found more than one filter (%d) attached to a cgroup -- removing extra filters!\", len(oldProgs))\n\t\t\tlogLevel = logrus.InfoLevel\n\t\t}\n\t\tfor idx, oldProg := range oldProgs {\n\t\t\t// Output some extra debug info.\n\t\t\tif info, err := oldProg.Info(); err == nil {\n\t\t\t\tfields := logrus.Fields{\n\t\t\t\t\t\"type\": info.Type.String(),\n\t\t\t\t\t\"tag\":  info.Tag,\n\t\t\t\t\t\"name\": info.Name,\n\t\t\t\t}\n\t\t\t\tif id, ok := info.ID(); ok {\n\t\t\t\t\tfields[\"id\"] = id\n\t\t\t\t}\n\t\t\t\tif runCount, ok := info.RunCount(); ok {\n\t\t\t\t\tfields[\"run_count\"] = runCount\n\t\t\t\t}\n\t\t\t\tif runtime, ok := info.Runtime(); ok {\n\t\t\t\t\tfields[\"runtime\"] = runtime.String()\n\t\t\t\t}\n\t\t\t\tlogrus.WithFields(fields).Logf(logLevel, \"removing old filter %d from cgroup\", idx)\n\t\t\t}\n\t\t\terr = link.RawDetachProgram(link.RawDetachProgramOptions{\n\t\t\t\tTarget:  dirFd,\n\t\t\t\tProgram: oldProg,\n\t\t\t\tAttach:  ebpf.AttachCGroupDevice,\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\treturn closer, fmt.Errorf(\"failed to call BPF_PROG_DETACH (BPF_CGROUP_DEVICE) on old filter program: %w\", err)\n\t\t\t}\n\t\t}\n\t}\n\treturn closer, nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/devices/systemd.go",
    "content": "package devices\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\n\tsystemdDbus \"github.com/coreos/go-systemd/v22/dbus\"\n\t\"github.com/godbus/dbus/v5\"\n\t\"github.com/sirupsen/logrus\"\n\n\t\"github.com/opencontainers/cgroups\"\n\tdevices \"github.com/opencontainers/cgroups/devices/config\"\n)\n\n// systemdProperties takes the configured device rules and generates a\n// corresponding set of systemd properties to configure the devices correctly.\nfunc systemdProperties(r *cgroups.Resources, sdVer int) ([]systemdDbus.Property, error) {\n\tif r.SkipDevices {\n\t\treturn nil, nil\n\t}\n\n\tproperties := []systemdDbus.Property{\n\t\t// When we later add DeviceAllow=/dev/foo properties, we are\n\t\t// appending devices to the allow list for the unit. However,\n\t\t// if this is an existing unit, it already has DeviceAllow=\n\t\t// entries, and we need to clear them all before applying the\n\t\t// new set. (We also do this for new units, mainly for safety\n\t\t// to ensure we only enable the devices we expect.)\n\t\t//\n\t\t// To clear any existing DeviceAllow= rules, we have to add an\n\t\t// empty DeviceAllow= property.\n\t\tnewProp(\"DeviceAllow\", []deviceAllowEntry{}),\n\t\t// Always run in the strictest white-list mode.\n\t\tnewProp(\"DevicePolicy\", \"strict\"),\n\t}\n\n\t// Figure out the set of rules.\n\tconfigEmu := emulator{}\n\tfor _, rule := range r.Devices {\n\t\tif err := configEmu.Apply(*rule); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"unable to apply rule for systemd: %w\", err)\n\t\t}\n\t}\n\t// systemd doesn't support blacklists. So we log a warning, and tell\n\t// systemd to act as a deny-all whitelist. This ruleset will be replaced\n\t// with our normal fallback code. This may result in spurious errors, but\n\t// the only other option is to error out here.\n\tif configEmu.IsBlacklist() {\n\t\t// However, if we're dealing with an allow-all rule then we can do it.\n\t\tif configEmu.IsAllowAll() {\n\t\t\treturn allowAllDevices(), nil\n\t\t}\n\t\tlogrus.Warn(\"systemd doesn't support blacklist device rules -- applying temporary deny-all rule\")\n\t\treturn properties, nil\n\t}\n\n\t// Now generate the set of rules we actually need to apply. Unlike the\n\t// normal devices cgroup, in \"strict\" mode systemd defaults to a deny-all\n\t// whitelist which is the default for devices.Emulator.\n\tfinalRules, err := configEmu.Rules()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to get simplified rules for systemd: %w\", err)\n\t}\n\tvar deviceAllowList []deviceAllowEntry\n\tfor _, rule := range finalRules {\n\t\tif !rule.Allow {\n\t\t\t// Should never happen.\n\t\t\treturn nil, fmt.Errorf(\"[internal error] cannot add deny rule to systemd DeviceAllow list: %v\", *rule)\n\t\t}\n\t\tswitch rule.Type {\n\t\tcase devices.BlockDevice, devices.CharDevice:\n\t\tdefault:\n\t\t\t// Should never happen.\n\t\t\treturn nil, fmt.Errorf(\"invalid device type for DeviceAllow: %v\", rule.Type)\n\t\t}\n\n\t\tentry := deviceAllowEntry{\n\t\t\tPerms: string(rule.Permissions),\n\t\t}\n\n\t\t// systemd has a fairly odd (though understandable) syntax here, and\n\t\t// because of the OCI configuration format we have to do quite a bit of\n\t\t// trickery to convert things:\n\t\t//\n\t\t//  * Concrete rules with non-wildcard major/minor numbers have to use\n\t\t//    /dev/{block,char}/MAJOR:minor paths. Before v240, systemd uses\n\t\t//    stat(2) on such paths to look up device properties, meaning we\n\t\t//    cannot add whitelist rules for devices that don't exist. Since v240,\n\t\t//    device properties are parsed from the path string.\n\t\t//\n\t\t//    However, path globbing is not supported for path-based rules so we\n\t\t//    need to handle wildcards in some other manner.\n\t\t//\n\t\t//  * If systemd older than v240 is used, wildcard-minor rules\n\t\t//    have to specify a \"device group name\" (the second column\n\t\t//    in /proc/devices).\n\t\t//\n\t\t//  * Wildcard (major and minor) rules can just specify a glob with the\n\t\t//    type (\"char-*\" or \"block-*\").\n\t\t//\n\t\t// The only type of rule we can't handle is wildcard-major rules, and\n\t\t// so we'll give a warning in that case (note that the fallback code\n\t\t// will insert any rules systemd couldn't handle). What amazing fun.\n\n\t\tif rule.Major == devices.Wildcard {\n\t\t\t// \"_ *:n _\" rules aren't supported by systemd.\n\t\t\tif rule.Minor != devices.Wildcard {\n\t\t\t\tlogrus.Warnf(\"systemd doesn't support '*:n' device rules -- temporarily ignoring rule: %v\", *rule)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// \"_ *:* _\" rules just wildcard everything.\n\t\t\tprefix, err := groupPrefix(rule.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tentry.Path = prefix + \"*\"\n\t\t} else if rule.Minor == devices.Wildcard {\n\t\t\tif sdVer >= 240 {\n\t\t\t\t// systemd v240+ allows for {block,char}-MAJOR syntax.\n\t\t\t\tprefix, err := groupPrefix(rule.Type)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tentry.Path = prefix + strconv.FormatInt(rule.Major, 10)\n\t\t\t} else {\n\t\t\t\t// For older systemd, \"_ n:* _\" rules require a device group from /proc/devices.\n\t\t\t\tgroup, err := findDeviceGroup(rule.Type, rule.Major)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"unable to find device '%v/%d': %w\", rule.Type, rule.Major, err)\n\t\t\t\t}\n\t\t\t\tif group == \"\" {\n\t\t\t\t\t// Couldn't find a group.\n\t\t\t\t\tlogrus.Warnf(\"could not find device group for '%v/%d' in /proc/devices -- temporarily ignoring rule: %v\", rule.Type, rule.Major, *rule)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tentry.Path = group\n\t\t\t}\n\t\t} else {\n\t\t\t// \"_ n:m _\" rules are just a path in /dev/{block,char}/.\n\t\t\tswitch rule.Type {\n\t\t\tcase devices.BlockDevice:\n\t\t\t\tentry.Path = fmt.Sprintf(\"/dev/block/%d:%d\", rule.Major, rule.Minor)\n\t\t\tcase devices.CharDevice:\n\t\t\t\tentry.Path = fmt.Sprintf(\"/dev/char/%d:%d\", rule.Major, rule.Minor)\n\t\t\t}\n\t\t\tif sdVer < 240 {\n\t\t\t\t// Old systemd versions use stat(2) on path to find out device major:minor\n\t\t\t\t// numbers and type. If the path doesn't exist, it will not add the rule,\n\t\t\t\t// emitting a warning instead.\n\t\t\t\t// Since all of this logic is best-effort anyway (we manually set these\n\t\t\t\t// rules separately to systemd) we can safely skip entries that don't\n\t\t\t\t// have a corresponding path.\n\t\t\t\tif _, err := os.Stat(entry.Path); err != nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdeviceAllowList = append(deviceAllowList, entry)\n\t}\n\n\tproperties = append(properties, newProp(\"DeviceAllow\", deviceAllowList))\n\treturn properties, nil\n}\n\nfunc newProp(name string, units any) systemdDbus.Property {\n\treturn systemdDbus.Property{\n\t\tName:  name,\n\t\tValue: dbus.MakeVariant(units),\n\t}\n}\n\nfunc groupPrefix(ruleType devices.Type) (string, error) {\n\tswitch ruleType {\n\tcase devices.BlockDevice:\n\t\treturn \"block-\", nil\n\tcase devices.CharDevice:\n\t\treturn \"char-\", nil\n\tdefault:\n\t\treturn \"\", fmt.Errorf(\"device type %v has no group prefix\", ruleType)\n\t}\n}\n\n// findDeviceGroup tries to find the device group name (as listed in\n// /proc/devices) with the type prefixed as required for DeviceAllow, for a\n// given (type, major) combination. If more than one device group exists, an\n// arbitrary one is chosen.\nfunc findDeviceGroup(ruleType devices.Type, ruleMajor int64) (string, error) {\n\tfh, err := os.Open(\"/proc/devices\")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer fh.Close()\n\n\tprefix, err := groupPrefix(ruleType)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\truleMajorStr := strconv.FormatInt(ruleMajor, 10) + \" \"\n\n\tscanner := bufio.NewScanner(fh)\n\tvar currentType devices.Type\n\tfor scanner.Scan() {\n\t\t// We need to strip spaces because the first number is column-aligned.\n\t\tline := strings.TrimSpace(scanner.Text())\n\n\t\t// Handle the \"header\" lines.\n\t\tswitch line {\n\t\tcase \"Block devices:\":\n\t\t\tcurrentType = devices.BlockDevice\n\t\t\tcontinue\n\t\tcase \"Character devices:\":\n\t\t\tcurrentType = devices.CharDevice\n\t\t\tcontinue\n\t\tcase \"\":\n\t\t\tcontinue\n\t\t}\n\n\t\t// Skip lines unrelated to our type.\n\t\tif currentType != ruleType {\n\t\t\tcontinue\n\t\t}\n\n\t\tif group, ok := strings.CutPrefix(line, ruleMajorStr); ok {\n\t\t\treturn prefix + group, nil\n\t\t}\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn \"\", fmt.Errorf(\"reading /proc/devices: %w\", err)\n\t}\n\t// Couldn't find the device group.\n\treturn \"\", nil\n}\n\n// DeviceAllow is the dbus type \"a(ss)\" which means we need a struct\n// to represent it in Go.\ntype deviceAllowEntry struct {\n\tPath  string\n\tPerms string\n}\n\nfunc allowAllDevices() []systemdDbus.Property {\n\t// Setting mode to auto and removing all DeviceAllow rules\n\t// results in allowing access to all devices.\n\treturn []systemdDbus.Property{\n\t\tnewProp(\"DeviceAllow\", []deviceAllowEntry{}),\n\t\tnewProp(\"DevicePolicy\", \"auto\"),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/devices/v1.go",
    "content": "package devices\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"reflect\"\n\n\t\"github.com/moby/sys/userns\"\n\t\"github.com/opencontainers/cgroups\"\n\tdevices \"github.com/opencontainers/cgroups/devices/config\"\n)\n\nvar testingSkipFinalCheck bool\n\nfunc setV1(path string, r *cgroups.Resources) error {\n\tif userns.RunningInUserNS() || r.SkipDevices {\n\t\treturn nil\n\t}\n\t// Generate two emulators, one for the current state of the cgroup and one\n\t// for the requested state by the user.\n\tcurrent, err := loadEmulator(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\ttarget, err := buildEmulator(r.Devices)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Compute the minimal set of transition rules needed to achieve the\n\t// requested state.\n\ttransitionRules, err := current.Transition(target)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor _, rule := range transitionRules {\n\t\tfile := \"devices.deny\"\n\t\tif rule.Allow {\n\t\t\tfile = \"devices.allow\"\n\t\t}\n\t\tif err := cgroups.WriteFile(path, file, rule.CgroupString()); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Final safety check -- ensure that the resulting state is what was\n\t// requested. This is only really correct for white-lists, but for\n\t// black-lists we can at least check that the cgroup is in the right mode.\n\t//\n\t// This safety-check is skipped for the unit tests because we cannot\n\t// currently mock devices.list correctly.\n\tif !testingSkipFinalCheck {\n\t\tcurrentAfter, err := loadEmulator(path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif !target.IsBlacklist() && !reflect.DeepEqual(currentAfter, target) {\n\t\t\treturn errors.New(\"resulting devices cgroup doesn't precisely match target\")\n\t\t} else if target.IsBlacklist() != currentAfter.IsBlacklist() {\n\t\t\treturn errors.New(\"resulting devices cgroup doesn't match target mode\")\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc loadEmulator(path string) (*emulator, error) {\n\tlist, err := cgroups.ReadFile(path, \"devices.list\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn emulatorFromList(bytes.NewBufferString(list))\n}\n\nfunc buildEmulator(rules []*devices.Rule) (*emulator, error) {\n\t// This defaults to a white-list -- which is what we want!\n\temu := &emulator{}\n\tfor _, rule := range rules {\n\t\tif err := emu.Apply(*rule); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn emu, nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/devices/v2.go",
    "content": "package devices\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/moby/sys/userns\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n\tdevices \"github.com/opencontainers/cgroups/devices/config\"\n)\n\nfunc isRWM(perms devices.Permissions) bool {\n\tvar r, w, m bool\n\tfor _, perm := range perms {\n\t\tswitch perm {\n\t\tcase 'r':\n\t\t\tr = true\n\t\tcase 'w':\n\t\t\tw = true\n\t\tcase 'm':\n\t\t\tm = true\n\t\t}\n\t}\n\treturn r && w && m\n}\n\n// This is similar to the logic applied in crun for handling errors from bpf(2)\n// <https://github.com/containers/crun/blob/0.17/src/libcrun/cgroup.c#L2438-L2470>.\nfunc canSkipEBPFError(r *cgroups.Resources) bool {\n\t// If we're running in a user namespace we can ignore eBPF rules because we\n\t// usually cannot use bpf(2), as well as rootless containers usually don't\n\t// have the necessary privileges to mknod(2) device inodes or access\n\t// host-level instances (though ideally we would be blocking device access\n\t// for rootless containers anyway).\n\tif userns.RunningInUserNS() {\n\t\treturn true\n\t}\n\n\t// We cannot ignore an eBPF load error if any rule if is a block rule or it\n\t// doesn't permit all access modes.\n\t//\n\t// NOTE: This will sometimes trigger in cases where access modes are split\n\t//       between different rules but to handle this correctly would require\n\t//       using \".../libcontainer/cgroup/devices\".Emulator.\n\tfor _, dev := range r.Devices {\n\t\tif !dev.Allow || !isRWM(dev.Permissions) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc setV2(dirPath string, r *cgroups.Resources) error {\n\tif r.SkipDevices {\n\t\treturn nil\n\t}\n\tinsts, license, err := deviceFilter(r.Devices)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdirFD, err := unix.Open(dirPath, unix.O_DIRECTORY|unix.O_RDONLY, 0o600)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot get dir FD for %s\", dirPath)\n\t}\n\tdefer unix.Close(dirFD)\n\tif _, err := loadAttachCgroupDeviceFilter(insts, license, dirFD); err != nil {\n\t\tif !canSkipEBPFError(r) {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/file.go",
    "content": "package cgroups\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// OpenFile opens a cgroup file in a given dir with given flags.\n// It is supposed to be used for cgroup files only, and returns\n// an error if the file is not a cgroup file.\n//\n// Arguments dir and file are joined together to form an absolute path\n// to a file being opened.\nfunc OpenFile(dir, file string, flags int) (*os.File, error) {\n\tif dir == \"\" {\n\t\treturn nil, fmt.Errorf(\"no directory specified for %s\", file)\n\t}\n\treturn openFile(dir, file, flags)\n}\n\n// ReadFile reads data from a cgroup file in dir.\n// It is supposed to be used for cgroup files only.\nfunc ReadFile(dir, file string) (string, error) {\n\tfd, err := OpenFile(dir, file, unix.O_RDONLY)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer fd.Close()\n\tvar buf bytes.Buffer\n\n\t_, err = buf.ReadFrom(fd)\n\treturn buf.String(), err\n}\n\n// WriteFile writes data to a cgroup file in dir.\n// It is supposed to be used for cgroup files only.\nfunc WriteFile(dir, file, data string) error {\n\tfd, err := OpenFile(dir, file, unix.O_WRONLY)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer fd.Close()\n\tif _, err := fd.WriteString(data); err != nil {\n\t\t// Having data in the error message helps in debugging.\n\t\treturn fmt.Errorf(\"failed to write %q: %w\", data, err)\n\t}\n\treturn nil\n}\n\n// WriteFileByLine is the same as WriteFile, except if data contains newlines,\n// it is written line by line.\nfunc WriteFileByLine(dir, file, data string) error {\n\ti := strings.Index(data, \"\\n\")\n\tif i == -1 {\n\t\treturn WriteFile(dir, file, data)\n\t}\n\n\tfd, err := OpenFile(dir, file, unix.O_WRONLY)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer fd.Close()\n\tstart := 0\n\tfor {\n\t\tvar line string\n\t\tif i == -1 {\n\t\t\tline = data[start:]\n\t\t} else {\n\t\t\tline = data[start : start+i+1]\n\t\t}\n\t\t_, err := fd.WriteString(line)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to write %q: %w\", line, err)\n\t\t}\n\t\tif i == -1 {\n\t\t\tbreak\n\t\t}\n\t\tstart += i + 1\n\t\ti = strings.Index(data[start:], \"\\n\")\n\t}\n\treturn nil\n}\n\nconst (\n\tcgroupfsDir    = \"/sys/fs/cgroup\"\n\tcgroupfsPrefix = cgroupfsDir + \"/\"\n)\n\nvar (\n\t// TestMode is set to true by unit tests that need \"fake\" cgroupfs.\n\tTestMode bool\n\n\tcgroupRootHandle *os.File\n\tprepOnce         sync.Once\n\tprepErr          error\n\tresolveFlags     uint64\n)\n\nfunc prepareOpenat2() error {\n\tprepOnce.Do(func() {\n\t\tfd, err := unix.Openat2(-1, cgroupfsDir, &unix.OpenHow{\n\t\t\tFlags: unix.O_DIRECTORY | unix.O_PATH | unix.O_CLOEXEC,\n\t\t})\n\t\tif err != nil {\n\t\t\tprepErr = &os.PathError{Op: \"openat2\", Path: cgroupfsDir, Err: err}\n\t\t\tif err != unix.ENOSYS {\n\t\t\t\tlogrus.Warnf(\"falling back to securejoin: %s\", prepErr)\n\t\t\t} else {\n\t\t\t\tlogrus.Debug(\"openat2 not available, falling back to securejoin\")\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tfile := os.NewFile(uintptr(fd), cgroupfsDir)\n\n\t\tvar st unix.Statfs_t\n\t\tif err := unix.Fstatfs(int(file.Fd()), &st); err != nil {\n\t\t\tprepErr = &os.PathError{Op: \"statfs\", Path: cgroupfsDir, Err: err}\n\t\t\tlogrus.Warnf(\"falling back to securejoin: %s\", prepErr)\n\t\t\treturn\n\t\t}\n\n\t\tcgroupRootHandle = file\n\t\tresolveFlags = unix.RESOLVE_BENEATH | unix.RESOLVE_NO_MAGICLINKS\n\t\tif st.Type == unix.CGROUP2_SUPER_MAGIC {\n\t\t\t// cgroupv2 has a single mountpoint and no \"cpu,cpuacct\" symlinks\n\t\t\tresolveFlags |= unix.RESOLVE_NO_XDEV | unix.RESOLVE_NO_SYMLINKS\n\t\t}\n\t})\n\n\treturn prepErr\n}\n\nfunc openFile(dir, file string, flags int) (*os.File, error) {\n\tmode := os.FileMode(0)\n\tif TestMode && flags&os.O_WRONLY != 0 {\n\t\t// \"emulate\" cgroup fs for unit tests\n\t\tflags |= os.O_TRUNC | os.O_CREATE\n\t\tmode = 0o600\n\t}\n\t// NOTE it is important to use filepath.Clean(\"/\"+file) here\n\t// (see https://github.com/opencontainers/runc/issues/4103)!\n\tpath := filepath.Join(dir, filepath.Clean(\"/\"+file))\n\n\tif prepareOpenat2() != nil {\n\t\treturn openFallback(path, flags, mode)\n\t}\n\trelPath, ok := strings.CutPrefix(path, cgroupfsPrefix)\n\tif !ok { // Non-standard path, old system?\n\t\treturn openFallback(path, flags, mode)\n\t}\n\n\tfd, err := unix.Openat2(int(cgroupRootHandle.Fd()), relPath,\n\t\t&unix.OpenHow{\n\t\t\tResolve: resolveFlags,\n\t\t\tFlags:   uint64(flags) | unix.O_CLOEXEC,\n\t\t\tMode:    uint64(mode),\n\t\t})\n\tif err != nil {\n\t\terr = &os.PathError{Op: \"openat2\", Path: path, Err: err}\n\t\t// Check if cgroupRootHandle is still opened to cgroupfsDir\n\t\t// (happens when this package is incorrectly used\n\t\t// across the chroot/pivot_root/mntns boundary, or\n\t\t// when /sys/fs/cgroup is remounted).\n\t\t//\n\t\t// TODO: if such usage will ever be common, amend this\n\t\t// to reopen cgroupRootHandle and retry openat2.\n\t\tfdDest, fdErr := os.Readlink(\"/proc/thread-self/fd/\" + strconv.Itoa(int(cgroupRootHandle.Fd())))\n\t\tif fdErr == nil && fdDest != cgroupfsDir {\n\t\t\t// Wrap the error so it is clear that cgroupRootHandle\n\t\t\t// is opened to an unexpected/wrong directory.\n\t\t\terr = fmt.Errorf(\"cgroupRootHandle %d unexpectedly opened to %s != %s: %w\",\n\t\t\t\tcgroupRootHandle.Fd(), fdDest, cgroupfsDir, err)\n\t\t}\n\t\treturn nil, err\n\t}\n\n\treturn os.NewFile(uintptr(fd), path), nil\n}\n\nvar errNotCgroupfs = errors.New(\"not a cgroup file\")\n\n// Can be changed by unit tests.\nvar openFallback = openAndCheck\n\n// openAndCheck is used when openat2(2) is not available. It checks the opened\n// file is on cgroupfs, returning an error otherwise.\nfunc openAndCheck(path string, flags int, mode os.FileMode) (*os.File, error) {\n\tfd, err := os.OpenFile(path, flags, mode)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif TestMode {\n\t\treturn fd, nil\n\t}\n\t// Check this is a cgroupfs file.\n\tvar st unix.Statfs_t\n\tif err := unix.Fstatfs(int(fd.Fd()), &st); err != nil {\n\t\t_ = fd.Close()\n\t\treturn nil, &os.PathError{Op: \"statfs\", Path: path, Err: err}\n\t}\n\tif st.Type != unix.CGROUP_SUPER_MAGIC && st.Type != unix.CGROUP2_SUPER_MAGIC {\n\t\t_ = fd.Close()\n\t\treturn nil, &os.PathError{Op: \"open\", Path: path, Err: errNotCgroupfs}\n\t}\n\n\treturn fd, nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/blkio.go",
    "content": "package fs\n\nimport (\n\t\"bufio\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/cgroups\"\n)\n\ntype BlkioGroup struct {\n\tweightFilename       string\n\tweightDeviceFilename string\n}\n\nfunc (s *BlkioGroup) Name() string {\n\treturn \"blkio\"\n}\n\nfunc (s *BlkioGroup) Apply(path string, _ *cgroups.Resources, pid int) error {\n\treturn apply(path, pid)\n}\n\nfunc (s *BlkioGroup) Set(path string, r *cgroups.Resources) error {\n\ts.detectWeightFilenames(path)\n\tif r.BlkioWeight != 0 {\n\t\tif err := cgroups.WriteFile(path, s.weightFilename, strconv.FormatUint(uint64(r.BlkioWeight), 10)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif r.BlkioLeafWeight != 0 {\n\t\tif err := cgroups.WriteFile(path, \"blkio.leaf_weight\", strconv.FormatUint(uint64(r.BlkioLeafWeight), 10)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tfor _, wd := range r.BlkioWeightDevice {\n\t\tif wd.Weight != 0 {\n\t\t\tif err := cgroups.WriteFile(path, s.weightDeviceFilename, wd.WeightString()); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tif wd.LeafWeight != 0 {\n\t\t\tif err := cgroups.WriteFile(path, \"blkio.leaf_weight_device\", wd.LeafWeightString()); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\tfor _, td := range r.BlkioThrottleReadBpsDevice {\n\t\tif err := cgroups.WriteFile(path, \"blkio.throttle.read_bps_device\", td.String()); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tfor _, td := range r.BlkioThrottleWriteBpsDevice {\n\t\tif err := cgroups.WriteFile(path, \"blkio.throttle.write_bps_device\", td.String()); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tfor _, td := range r.BlkioThrottleReadIOPSDevice {\n\t\tif err := cgroups.WriteFile(path, \"blkio.throttle.read_iops_device\", td.String()); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tfor _, td := range r.BlkioThrottleWriteIOPSDevice {\n\t\tif err := cgroups.WriteFile(path, \"blkio.throttle.write_iops_device\", td.String()); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n/*\nexamples:\n\n    blkio.sectors\n    8:0 6792\n\n    blkio.io_service_bytes\n    8:0 Read 1282048\n    8:0 Write 2195456\n    8:0 Sync 2195456\n    8:0 Async 1282048\n    8:0 Total 3477504\n    Total 3477504\n\n    blkio.io_serviced\n    8:0 Read 124\n    8:0 Write 104\n    8:0 Sync 104\n    8:0 Async 124\n    8:0 Total 228\n    Total 228\n\n    blkio.io_queued\n    8:0 Read 0\n    8:0 Write 0\n    8:0 Sync 0\n    8:0 Async 0\n    8:0 Total 0\n    Total 0\n*/\n\nfunc splitBlkioStatLine(r rune) bool {\n\treturn r == ' ' || r == ':'\n}\n\nfunc getBlkioStat(dir, file string) ([]cgroups.BlkioStatEntry, error) {\n\tvar blkioStats []cgroups.BlkioStatEntry\n\tf, err := cgroups.OpenFile(dir, file, os.O_RDONLY)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn blkioStats, nil\n\t\t}\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tsc := bufio.NewScanner(f)\n\tfor sc.Scan() {\n\t\t// format: dev type amount\n\t\tfields := strings.FieldsFunc(sc.Text(), splitBlkioStatLine)\n\t\tif len(fields) < 3 {\n\t\t\tif len(fields) == 2 && fields[0] == \"Total\" {\n\t\t\t\t// skip total line\n\t\t\t\tcontinue\n\t\t\t} else {\n\t\t\t\treturn nil, malformedLine(dir, file, sc.Text())\n\t\t\t}\n\t\t}\n\n\t\tv, err := strconv.ParseUint(fields[0], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, &parseError{Path: dir, File: file, Err: err}\n\t\t}\n\t\tmajor := v\n\n\t\tv, err = strconv.ParseUint(fields[1], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, &parseError{Path: dir, File: file, Err: err}\n\t\t}\n\t\tminor := v\n\n\t\top := \"\"\n\t\tvalueField := 2\n\t\tif len(fields) == 4 {\n\t\t\top = fields[2]\n\t\t\tvalueField = 3\n\t\t}\n\t\tv, err = strconv.ParseUint(fields[valueField], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, &parseError{Path: dir, File: file, Err: err}\n\t\t}\n\t\tblkioStats = append(blkioStats, cgroups.BlkioStatEntry{Major: major, Minor: minor, Op: op, Value: v})\n\t}\n\tif err := sc.Err(); err != nil {\n\t\treturn nil, &parseError{Path: dir, File: file, Err: err}\n\t}\n\n\treturn blkioStats, nil\n}\n\nfunc (s *BlkioGroup) GetStats(path string, stats *cgroups.Stats) error {\n\ttype blkioStatInfo struct {\n\t\tfilename            string\n\t\tblkioStatEntriesPtr *[]cgroups.BlkioStatEntry\n\t}\n\tbfqDebugStats := []blkioStatInfo{\n\t\t{\n\t\t\tfilename:            \"blkio.bfq.sectors_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.SectorsRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.bfq.io_service_time_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoServiceTimeRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.bfq.io_wait_time_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoWaitTimeRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.bfq.io_merged_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoMergedRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.bfq.io_queued_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoQueuedRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.bfq.time_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoTimeRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.bfq.io_serviced_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoServicedRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.bfq.io_service_bytes_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoServiceBytesRecursive,\n\t\t},\n\t}\n\tbfqStats := []blkioStatInfo{\n\t\t{\n\t\t\tfilename:            \"blkio.bfq.io_serviced_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoServicedRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.bfq.io_service_bytes_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoServiceBytesRecursive,\n\t\t},\n\t}\n\tcfqStats := []blkioStatInfo{\n\t\t{\n\t\t\tfilename:            \"blkio.sectors_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.SectorsRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.io_service_time_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoServiceTimeRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.io_wait_time_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoWaitTimeRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.io_merged_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoMergedRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.io_queued_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoQueuedRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.time_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoTimeRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.io_serviced_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoServicedRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.io_service_bytes_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoServiceBytesRecursive,\n\t\t},\n\t}\n\tthrottleRecursiveStats := []blkioStatInfo{\n\t\t{\n\t\t\tfilename:            \"blkio.throttle.io_serviced_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoServicedRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.throttle.io_service_bytes_recursive\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoServiceBytesRecursive,\n\t\t},\n\t}\n\tbaseStats := []blkioStatInfo{\n\t\t{\n\t\t\tfilename:            \"blkio.throttle.io_serviced\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoServicedRecursive,\n\t\t},\n\t\t{\n\t\t\tfilename:            \"blkio.throttle.io_service_bytes\",\n\t\t\tblkioStatEntriesPtr: &stats.BlkioStats.IoServiceBytesRecursive,\n\t\t},\n\t}\n\torderedStats := [][]blkioStatInfo{\n\t\tbfqDebugStats,\n\t\tbfqStats,\n\t\tcfqStats,\n\t\tthrottleRecursiveStats,\n\t\tbaseStats,\n\t}\n\n\tvar blkioStats []cgroups.BlkioStatEntry\n\tvar err error\n\n\tfor _, statGroup := range orderedStats {\n\t\tfor i, statInfo := range statGroup {\n\t\t\tif blkioStats, err = getBlkioStat(path, statInfo.filename); err != nil || blkioStats == nil {\n\t\t\t\t// if error occurs on first file, move to next group\n\t\t\t\tif i == 0 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t*statInfo.blkioStatEntriesPtr = blkioStats\n\t\t\t// finish if all stats are gathered\n\t\t\tif i == len(statGroup)-1 {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (s *BlkioGroup) detectWeightFilenames(path string) {\n\tif s.weightFilename != \"\" {\n\t\t// Already detected.\n\t\treturn\n\t}\n\tif cgroups.PathExists(filepath.Join(path, \"blkio.weight\")) {\n\t\ts.weightFilename = \"blkio.weight\"\n\t\ts.weightDeviceFilename = \"blkio.weight_device\"\n\t} else {\n\t\ts.weightFilename = \"blkio.bfq.weight\"\n\t\ts.weightDeviceFilename = \"blkio.bfq.weight_device\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/cpu.go",
    "content": "package fs\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fscommon\"\n\t\"golang.org/x/sys/unix\"\n)\n\ntype CpuGroup struct{}\n\nfunc (s *CpuGroup) Name() string {\n\treturn \"cpu\"\n}\n\nfunc (s *CpuGroup) Apply(path string, r *cgroups.Resources, pid int) error {\n\tif err := os.MkdirAll(path, 0o755); err != nil {\n\t\treturn err\n\t}\n\t// We should set the real-Time group scheduling settings before moving\n\t// in the process because if the process is already in SCHED_RR mode\n\t// and no RT bandwidth is set, adding it will fail.\n\tif err := s.SetRtSched(path, r); err != nil {\n\t\treturn err\n\t}\n\t// Since we are not using apply(), we need to place the pid\n\t// into the procs file.\n\treturn cgroups.WriteCgroupProc(path, pid)\n}\n\nfunc (s *CpuGroup) SetRtSched(path string, r *cgroups.Resources) error {\n\tvar period string\n\tif r.CpuRtPeriod != 0 {\n\t\tperiod = strconv.FormatUint(r.CpuRtPeriod, 10)\n\t\tif err := cgroups.WriteFile(path, \"cpu.rt_period_us\", period); err != nil {\n\t\t\t// The values of cpu.rt_period_us and cpu.rt_runtime_us\n\t\t\t// are inter-dependent and need to be set in a proper order.\n\t\t\t// If the kernel rejects the new period value with EINVAL\n\t\t\t// and the new runtime value is also being set, let's\n\t\t\t// ignore the error for now and retry later.\n\t\t\tif !errors.Is(err, unix.EINVAL) || r.CpuRtRuntime == 0 {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\tperiod = \"\"\n\t\t}\n\t}\n\tif r.CpuRtRuntime != 0 {\n\t\tif err := cgroups.WriteFile(path, \"cpu.rt_runtime_us\", strconv.FormatInt(r.CpuRtRuntime, 10)); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif period != \"\" {\n\t\t\tif err := cgroups.WriteFile(path, \"cpu.rt_period_us\", period); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (s *CpuGroup) Set(path string, r *cgroups.Resources) error {\n\tif r.CpuShares != 0 {\n\t\tshares := r.CpuShares\n\t\tif err := cgroups.WriteFile(path, \"cpu.shares\", strconv.FormatUint(shares, 10)); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// read it back\n\t\tsharesRead, err := fscommon.GetCgroupParamUint(path, \"cpu.shares\")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// ... and check\n\t\tif shares > sharesRead {\n\t\t\treturn fmt.Errorf(\"the maximum allowed cpu-shares is %d\", sharesRead)\n\t\t} else if shares < sharesRead {\n\t\t\treturn fmt.Errorf(\"the minimum allowed cpu-shares is %d\", sharesRead)\n\t\t}\n\t}\n\n\tvar period string\n\tif r.CpuPeriod != 0 {\n\t\tperiod = strconv.FormatUint(r.CpuPeriod, 10)\n\t\tif err := cgroups.WriteFile(path, \"cpu.cfs_period_us\", period); err != nil {\n\t\t\t// Sometimes when the period to be set is smaller\n\t\t\t// than the current one, it is rejected by the kernel\n\t\t\t// (EINVAL) as old_quota/new_period exceeds the parent\n\t\t\t// cgroup quota limit. If this happens and the quota is\n\t\t\t// going to be set, ignore the error for now and retry\n\t\t\t// after setting the quota.\n\t\t\tif !errors.Is(err, unix.EINVAL) || r.CpuQuota == 0 {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\tperiod = \"\"\n\t\t}\n\t}\n\n\tvar burst string\n\tif r.CpuBurst != nil {\n\t\tburst = strconv.FormatUint(*r.CpuBurst, 10)\n\t\tif err := cgroups.WriteFile(path, \"cpu.cfs_burst_us\", burst); err != nil {\n\t\t\tif errors.Is(err, unix.ENOENT) {\n\t\t\t\t// If CPU burst knob is not available (e.g.\n\t\t\t\t// older kernel), ignore it.\n\t\t\t\tburst = \"\"\n\t\t\t} else {\n\t\t\t\t// Sometimes when the burst to be set is larger\n\t\t\t\t// than the current one, it is rejected by the kernel\n\t\t\t\t// (EINVAL) as old_quota/new_burst exceeds the parent\n\t\t\t\t// cgroup quota limit. If this happens and the quota is\n\t\t\t\t// going to be set, ignore the error for now and retry\n\t\t\t\t// after setting the quota.\n\t\t\t\tif !errors.Is(err, unix.EINVAL) || r.CpuQuota == 0 {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tburst = \"\"\n\t\t}\n\t}\n\tif r.CpuQuota != 0 {\n\t\tif err := cgroups.WriteFile(path, \"cpu.cfs_quota_us\", strconv.FormatInt(r.CpuQuota, 10)); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif period != \"\" {\n\t\t\tif err := cgroups.WriteFile(path, \"cpu.cfs_period_us\", period); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tif burst != \"\" {\n\t\t\tif err := cgroups.WriteFile(path, \"cpu.cfs_burst_us\", burst); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\tif r.CPUIdle != nil {\n\t\tidle := strconv.FormatInt(*r.CPUIdle, 10)\n\t\tif err := cgroups.WriteFile(path, \"cpu.idle\", idle); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn s.SetRtSched(path, r)\n}\n\nfunc (s *CpuGroup) GetStats(path string, stats *cgroups.Stats) error {\n\tconst file = \"cpu.stat\"\n\tf, err := cgroups.OpenFile(path, file, os.O_RDONLY)\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\tdefer f.Close()\n\n\tsc := bufio.NewScanner(f)\n\tfor sc.Scan() {\n\t\tt, v, err := fscommon.ParseKeyValue(sc.Text())\n\t\tif err != nil {\n\t\t\treturn &parseError{Path: path, File: file, Err: err}\n\t\t}\n\t\tswitch t {\n\t\tcase \"nr_periods\":\n\t\t\tstats.CpuStats.ThrottlingData.Periods = v\n\n\t\tcase \"nr_throttled\":\n\t\t\tstats.CpuStats.ThrottlingData.ThrottledPeriods = v\n\n\t\tcase \"throttled_time\":\n\t\t\tstats.CpuStats.ThrottlingData.ThrottledTime = v\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/cpuacct.go",
    "content": "package fs\n\nimport (\n\t\"bufio\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fscommon\"\n)\n\nconst (\n\tnsInSec = 1000000000\n\n\t// The value comes from `C.sysconf(C._SC_CLK_TCK)`, and\n\t// on Linux it's a constant which is safe to be hard coded,\n\t// so we can avoid using cgo here. For details, see:\n\t// https://github.com/containerd/cgroups/pull/12\n\tclockTicks uint64 = 100\n)\n\ntype CpuacctGroup struct{}\n\nfunc (s *CpuacctGroup) Name() string {\n\treturn \"cpuacct\"\n}\n\nfunc (s *CpuacctGroup) Apply(path string, _ *cgroups.Resources, pid int) error {\n\treturn apply(path, pid)\n}\n\nfunc (s *CpuacctGroup) Set(_ string, _ *cgroups.Resources) error {\n\treturn nil\n}\n\nfunc (s *CpuacctGroup) GetStats(path string, stats *cgroups.Stats) error {\n\tif !cgroups.PathExists(path) {\n\t\treturn nil\n\t}\n\tuserModeUsage, kernelModeUsage, err := getCpuUsageBreakdown(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\ttotalUsage, err := fscommon.GetCgroupParamUint(path, \"cpuacct.usage\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tpercpuUsage, err := getPercpuUsage(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tpercpuUsageInKernelmode, percpuUsageInUsermode, err := getPercpuUsageInModes(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tstats.CpuStats.CpuUsage.TotalUsage = totalUsage\n\tstats.CpuStats.CpuUsage.PercpuUsage = percpuUsage\n\tstats.CpuStats.CpuUsage.PercpuUsageInKernelmode = percpuUsageInKernelmode\n\tstats.CpuStats.CpuUsage.PercpuUsageInUsermode = percpuUsageInUsermode\n\tstats.CpuStats.CpuUsage.UsageInUsermode = userModeUsage\n\tstats.CpuStats.CpuUsage.UsageInKernelmode = kernelModeUsage\n\treturn nil\n}\n\n// Returns user and kernel usage breakdown in nanoseconds.\nfunc getCpuUsageBreakdown(path string) (uint64, uint64, error) {\n\tvar userModeUsage, kernelModeUsage uint64\n\tconst (\n\t\tuserField   = \"user\"\n\t\tsystemField = \"system\"\n\t\tfile        = \"cpuacct.stat\"\n\t)\n\n\t// Expected format:\n\t// user <usage in ticks>\n\t// system <usage in ticks>\n\tdata, err := cgroups.ReadFile(path, file)\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\n\tfields := strings.Fields(data)\n\tif len(fields) < 4 || fields[0] != userField || fields[2] != systemField {\n\t\treturn 0, 0, malformedLine(path, file, data)\n\t}\n\tif userModeUsage, err = strconv.ParseUint(fields[1], 10, 64); err != nil {\n\t\treturn 0, 0, &parseError{Path: path, File: file, Err: err}\n\t}\n\tif kernelModeUsage, err = strconv.ParseUint(fields[3], 10, 64); err != nil {\n\t\treturn 0, 0, &parseError{Path: path, File: file, Err: err}\n\t}\n\n\treturn (userModeUsage * nsInSec) / clockTicks, (kernelModeUsage * nsInSec) / clockTicks, nil\n}\n\nfunc getPercpuUsage(path string) ([]uint64, error) {\n\tconst file = \"cpuacct.usage_percpu\"\n\tpercpuUsage := []uint64{}\n\tdata, err := cgroups.ReadFile(path, file)\n\tif err != nil {\n\t\treturn percpuUsage, err\n\t}\n\tfor _, value := range strings.Fields(data) {\n\t\tvalue, err := strconv.ParseUint(value, 10, 64)\n\t\tif err != nil {\n\t\t\treturn percpuUsage, &parseError{Path: path, File: file, Err: err}\n\t\t}\n\t\tpercpuUsage = append(percpuUsage, value)\n\t}\n\treturn percpuUsage, nil\n}\n\nfunc getPercpuUsageInModes(path string) ([]uint64, []uint64, error) {\n\tusageKernelMode := []uint64{}\n\tusageUserMode := []uint64{}\n\tconst file = \"cpuacct.usage_all\"\n\n\tfd, err := cgroups.OpenFile(path, file, os.O_RDONLY)\n\tif os.IsNotExist(err) {\n\t\treturn usageKernelMode, usageUserMode, nil\n\t} else if err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer fd.Close()\n\n\tscanner := bufio.NewScanner(fd)\n\tscanner.Scan() // Read header line.\n\tconst want = \"cpu user system\"\n\tif hdr := scanner.Text(); !strings.HasPrefix(hdr, want) {\n\t\treturn nil, nil, malformedLine(path, file, hdr)\n\t}\n\n\tfor scanner.Scan() {\n\t\t// Each line is: cpu user system. Keep N at 4 to ignore extra fields.\n\t\tfields := strings.SplitN(scanner.Text(), \" \", 4)\n\t\tif len(fields) < 3 {\n\t\t\tcontinue\n\t\t}\n\n\t\tuser, err := strconv.ParseUint(fields[1], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, nil, &parseError{Path: path, File: file, Err: err}\n\t\t}\n\t\tusageUserMode = append(usageUserMode, user)\n\n\t\tkernel, err := strconv.ParseUint(fields[2], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, nil, &parseError{Path: path, File: file, Err: err}\n\t\t}\n\t\tusageKernelMode = append(usageKernelMode, kernel)\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, nil, &parseError{Path: path, File: file, Err: err}\n\t}\n\n\treturn usageKernelMode, usageUserMode, nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/cpuset.go",
    "content": "package fs\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fscommon\"\n)\n\nvar (\n\tcpusetLock     sync.Mutex\n\tcpusetPrefix   = \"cpuset.\"\n\tcpusetFastPath bool\n)\n\nfunc cpusetFile(path string, name string) string {\n\tcpusetLock.Lock()\n\tdefer cpusetLock.Unlock()\n\n\t// Only the v1 cpuset cgroup is allowed to mount with noprefix.\n\t// See kernel source: https://github.com/torvalds/linux/blob/2e1b3cc9d7f790145a80cb705b168f05dab65df2/kernel/cgroup/cgroup-v1.c#L1070\n\t// Cpuset cannot be mounted with and without prefix simultaneously.\n\t// Commonly used in Android environments.\n\n\tif cpusetFastPath {\n\t\treturn cpusetPrefix + name\n\t}\n\n\terr := unix.Access(filepath.Join(path, cpusetPrefix+name), unix.F_OK)\n\tif err == nil {\n\t\t// Use the fast path only if we can access one type of mount for cpuset already\n\t\tcpusetFastPath = true\n\t} else {\n\t\terr = unix.Access(filepath.Join(path, name), unix.F_OK)\n\t\tif err == nil {\n\t\t\tcpusetPrefix = \"\"\n\t\t\tcpusetFastPath = true\n\t\t}\n\t}\n\n\treturn cpusetPrefix + name\n}\n\ntype CpusetGroup struct{}\n\nfunc (s *CpusetGroup) Name() string {\n\treturn \"cpuset\"\n}\n\nfunc (s *CpusetGroup) Apply(path string, r *cgroups.Resources, pid int) error {\n\treturn s.ApplyDir(path, r, pid)\n}\n\nfunc (s *CpusetGroup) Set(path string, r *cgroups.Resources) error {\n\tif r.CpusetCpus != \"\" {\n\t\tif err := cgroups.WriteFile(path, cpusetFile(path, \"cpus\"), r.CpusetCpus); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif r.CpusetMems != \"\" {\n\t\tif err := cgroups.WriteFile(path, cpusetFile(path, \"mems\"), r.CpusetMems); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc getCpusetStat(path string, file string) ([]uint16, error) {\n\tvar extracted []uint16\n\tfileContent, err := fscommon.GetCgroupParamString(path, file)\n\tif err != nil {\n\t\treturn extracted, err\n\t}\n\tif len(fileContent) == 0 {\n\t\treturn extracted, &parseError{Path: path, File: file, Err: errors.New(\"empty file\")}\n\t}\n\n\tfor _, s := range strings.Split(fileContent, \",\") {\n\t\tfromStr, toStr, ok := strings.Cut(s, \"-\")\n\t\tif ok {\n\t\t\tfrom, err := strconv.ParseUint(fromStr, 10, 16)\n\t\t\tif err != nil {\n\t\t\t\treturn extracted, &parseError{Path: path, File: file, Err: err}\n\t\t\t}\n\t\t\tto, err := strconv.ParseUint(toStr, 10, 16)\n\t\t\tif err != nil {\n\t\t\t\treturn extracted, &parseError{Path: path, File: file, Err: err}\n\t\t\t}\n\t\t\tif from > to {\n\t\t\t\treturn extracted, &parseError{Path: path, File: file, Err: errors.New(\"invalid values, from > to\")}\n\t\t\t}\n\t\t\tfor i := from; i <= to; i++ {\n\t\t\t\textracted = append(extracted, uint16(i))\n\t\t\t}\n\t\t} else {\n\t\t\tvalue, err := strconv.ParseUint(s, 10, 16)\n\t\t\tif err != nil {\n\t\t\t\treturn extracted, &parseError{Path: path, File: file, Err: err}\n\t\t\t}\n\t\t\textracted = append(extracted, uint16(value))\n\t\t}\n\t}\n\n\treturn extracted, nil\n}\n\nfunc (s *CpusetGroup) GetStats(path string, stats *cgroups.Stats) error {\n\tvar err error\n\n\tstats.CPUSetStats.CPUs, err = getCpusetStat(path, cpusetFile(path, \"cpus\"))\n\tif err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\treturn err\n\t}\n\n\tstats.CPUSetStats.CPUExclusive, err = fscommon.GetCgroupParamUint(path, cpusetFile(path, \"cpu_exclusive\"))\n\tif err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\treturn err\n\t}\n\n\tstats.CPUSetStats.Mems, err = getCpusetStat(path, cpusetFile(path, \"mems\"))\n\tif err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\treturn err\n\t}\n\n\tstats.CPUSetStats.MemHardwall, err = fscommon.GetCgroupParamUint(path, cpusetFile(path, \"mem_hardwall\"))\n\tif err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\treturn err\n\t}\n\n\tstats.CPUSetStats.MemExclusive, err = fscommon.GetCgroupParamUint(path, cpusetFile(path, \"mem_exclusive\"))\n\tif err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\treturn err\n\t}\n\n\tstats.CPUSetStats.MemoryMigrate, err = fscommon.GetCgroupParamUint(path, cpusetFile(path, \"memory_migrate\"))\n\tif err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\treturn err\n\t}\n\n\tstats.CPUSetStats.MemorySpreadPage, err = fscommon.GetCgroupParamUint(path, cpusetFile(path, \"memory_spread_page\"))\n\tif err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\treturn err\n\t}\n\n\tstats.CPUSetStats.MemorySpreadSlab, err = fscommon.GetCgroupParamUint(path, cpusetFile(path, \"memory_spread_slab\"))\n\tif err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\treturn err\n\t}\n\n\tstats.CPUSetStats.MemoryPressure, err = fscommon.GetCgroupParamUint(path, cpusetFile(path, \"memory_pressure\"))\n\tif err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\treturn err\n\t}\n\n\tstats.CPUSetStats.SchedLoadBalance, err = fscommon.GetCgroupParamUint(path, cpusetFile(path, \"sched_load_balance\"))\n\tif err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\treturn err\n\t}\n\n\tstats.CPUSetStats.SchedRelaxDomainLevel, err = fscommon.GetCgroupParamInt(path, cpusetFile(path, \"sched_relax_domain_level\"))\n\tif err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (s *CpusetGroup) ApplyDir(dir string, r *cgroups.Resources, pid int) error {\n\t// This might happen if we have no cpuset cgroup mounted.\n\t// Just do nothing and don't fail.\n\tif dir == \"\" {\n\t\treturn nil\n\t}\n\t// 'ensureParent' start with parent because we don't want to\n\t// explicitly inherit from parent, it could conflict with\n\t// 'cpuset.cpu_exclusive'.\n\tif err := cpusetEnsureParent(filepath.Dir(dir)); err != nil {\n\t\treturn err\n\t}\n\tif err := os.Mkdir(dir, 0o755); err != nil && !os.IsExist(err) {\n\t\treturn err\n\t}\n\t// We didn't inherit cpuset configs from parent, but we have\n\t// to ensure cpuset configs are set before moving task into the\n\t// cgroup.\n\t// The logic is, if user specified cpuset configs, use these\n\t// specified configs, otherwise, inherit from parent. This makes\n\t// cpuset configs work correctly with 'cpuset.cpu_exclusive', and\n\t// keep backward compatibility.\n\tif err := s.ensureCpusAndMems(dir, r); err != nil {\n\t\treturn err\n\t}\n\t// Since we are not using apply(), we need to place the pid\n\t// into the procs file.\n\treturn cgroups.WriteCgroupProc(dir, pid)\n}\n\nfunc getCpusetSubsystemSettings(parent string) (cpus, mems string, err error) {\n\tif cpus, err = cgroups.ReadFile(parent, cpusetFile(parent, \"cpus\")); err != nil {\n\t\treturn\n\t}\n\tif mems, err = cgroups.ReadFile(parent, cpusetFile(parent, \"mems\")); err != nil {\n\t\treturn\n\t}\n\treturn cpus, mems, nil\n}\n\n// cpusetEnsureParent makes sure that the parent directories of current\n// are created and populated with the proper cpus and mems files copied\n// from their respective parent. It does that recursively, starting from\n// the top of the cpuset hierarchy (i.e. cpuset cgroup mount point).\nfunc cpusetEnsureParent(current string) error {\n\tvar st unix.Statfs_t\n\n\tparent := filepath.Dir(current)\n\terr := unix.Statfs(parent, &st)\n\tif err == nil && st.Type != unix.CGROUP_SUPER_MAGIC {\n\t\treturn nil\n\t}\n\t// Treat non-existing directory as cgroupfs as it will be created,\n\t// and the root cpuset directory obviously exists.\n\tif err != nil && err != unix.ENOENT {\n\t\treturn &os.PathError{Op: \"statfs\", Path: parent, Err: err}\n\t}\n\n\tif err := cpusetEnsureParent(parent); err != nil {\n\t\treturn err\n\t}\n\tif err := os.Mkdir(current, 0o755); err != nil && !os.IsExist(err) {\n\t\treturn err\n\t}\n\treturn cpusetCopyIfNeeded(current, parent)\n}\n\n// cpusetCopyIfNeeded copies the cpuset.cpus and cpuset.mems from the parent\n// directory to the current directory if the file's contents are 0\nfunc cpusetCopyIfNeeded(current, parent string) error {\n\tcurrentCpus, currentMems, err := getCpusetSubsystemSettings(current)\n\tif err != nil {\n\t\treturn err\n\t}\n\tparentCpus, parentMems, err := getCpusetSubsystemSettings(parent)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif isEmptyCpuset(currentCpus) {\n\t\tif err := cgroups.WriteFile(current, cpusetFile(current, \"cpus\"), parentCpus); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif isEmptyCpuset(currentMems) {\n\t\tif err := cgroups.WriteFile(current, cpusetFile(current, \"mems\"), parentMems); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc isEmptyCpuset(str string) bool {\n\treturn str == \"\" || str == \"\\n\"\n}\n\nfunc (s *CpusetGroup) ensureCpusAndMems(path string, r *cgroups.Resources) error {\n\tif err := s.Set(path, r); err != nil {\n\t\treturn err\n\t}\n\treturn cpusetCopyIfNeeded(path, filepath.Dir(path))\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/devices.go",
    "content": "package fs\n\nimport (\n\t\"github.com/opencontainers/cgroups\"\n)\n\ntype DevicesGroup struct{}\n\nfunc (s *DevicesGroup) Name() string {\n\treturn \"devices\"\n}\n\nfunc (s *DevicesGroup) Apply(path string, r *cgroups.Resources, pid int) error {\n\tif r.SkipDevices {\n\t\treturn nil\n\t}\n\tif path == \"\" {\n\t\t// Return error here, since devices cgroup\n\t\t// is a hard requirement for container's security.\n\t\treturn errSubsystemDoesNotExist\n\t}\n\n\treturn apply(path, pid)\n}\n\nfunc (s *DevicesGroup) Set(path string, r *cgroups.Resources) error {\n\tif cgroups.DevicesSetV1 == nil {\n\t\tif len(r.Devices) == 0 {\n\t\t\treturn nil\n\t\t}\n\t\treturn cgroups.ErrDevicesUnsupported\n\t}\n\treturn cgroups.DevicesSetV1(path, r)\n}\n\nfunc (s *DevicesGroup) GetStats(path string, stats *cgroups.Stats) error {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/error.go",
    "content": "package fs\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/opencontainers/cgroups/fscommon\"\n)\n\ntype parseError = fscommon.ParseError\n\n// malformedLine is used by all cgroupfs file parsers that expect a line\n// in a particular format but get some garbage instead.\nfunc malformedLine(path, file, line string) error {\n\treturn &parseError{Path: path, File: file, Err: fmt.Errorf(\"malformed line: %s\", line)}\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/freezer.go",
    "content": "package fs\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n)\n\ntype FreezerGroup struct{}\n\nfunc (s *FreezerGroup) Name() string {\n\treturn \"freezer\"\n}\n\nfunc (s *FreezerGroup) Apply(path string, _ *cgroups.Resources, pid int) error {\n\treturn apply(path, pid)\n}\n\nfunc (s *FreezerGroup) Set(path string, r *cgroups.Resources) (Err error) {\n\tswitch r.Freezer {\n\tcase cgroups.Frozen:\n\t\tdefer func() {\n\t\t\tif Err != nil {\n\t\t\t\t// Freezing failed, and it is bad and dangerous\n\t\t\t\t// to leave the cgroup in FROZEN or FREEZING\n\t\t\t\t// state, so (try to) thaw it back.\n\t\t\t\t_ = cgroups.WriteFile(path, \"freezer.state\", string(cgroups.Thawed))\n\t\t\t}\n\t\t}()\n\n\t\t// As per older kernel docs (freezer-subsystem.txt before\n\t\t// kernel commit ef9fe980c6fcc1821), if FREEZING is seen,\n\t\t// userspace should either retry or thaw. While current\n\t\t// kernel cgroup v1 docs no longer mention a need to retry,\n\t\t// even a recent kernel (v5.4, Ubuntu 20.04) can't reliably\n\t\t// freeze a cgroup v1 while new processes keep appearing in it\n\t\t// (either via fork/clone or by writing new PIDs to\n\t\t// cgroup.procs).\n\t\t//\n\t\t// The numbers below are empirically chosen to have a decent\n\t\t// chance to succeed in various scenarios (\"runc pause/unpause\n\t\t// with parallel runc exec\" and \"bare freeze/unfreeze on a very\n\t\t// slow system\"), tested on RHEL7 and Ubuntu 20.04 kernels.\n\t\t//\n\t\t// Adding any amount of sleep in between retries did not\n\t\t// increase the chances of successful freeze in \"pause/unpause\n\t\t// with parallel exec\" reproducer. OTOH, adding an occasional\n\t\t// sleep helped for the case where the system is extremely slow\n\t\t// (CentOS 7 VM on GHA CI).\n\t\t//\n\t\t// Alas, this is still a game of chances, since the real fix\n\t\t// belong to the kernel (cgroup v2 do not have this bug).\n\n\t\tfor i := range 1000 {\n\t\t\tif i%50 == 49 {\n\t\t\t\t// Occasional thaw and sleep improves\n\t\t\t\t// the chances to succeed in freezing\n\t\t\t\t// in case new processes keep appearing\n\t\t\t\t// in the cgroup.\n\t\t\t\t_ = cgroups.WriteFile(path, \"freezer.state\", string(cgroups.Thawed))\n\t\t\t\ttime.Sleep(10 * time.Millisecond)\n\t\t\t}\n\n\t\t\tif err := cgroups.WriteFile(path, \"freezer.state\", string(cgroups.Frozen)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tif i%25 == 24 {\n\t\t\t\t// Occasional short sleep before reading\n\t\t\t\t// the state back also improves the chances to\n\t\t\t\t// succeed in freezing in case of a very slow\n\t\t\t\t// system.\n\t\t\t\ttime.Sleep(10 * time.Microsecond)\n\t\t\t}\n\t\t\tstate, err := cgroups.ReadFile(path, \"freezer.state\")\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tstate = strings.TrimSpace(state)\n\t\t\tswitch state {\n\t\t\tcase \"FREEZING\":\n\t\t\t\tcontinue\n\t\t\tcase string(cgroups.Frozen):\n\t\t\t\tif i > 1 {\n\t\t\t\t\tlogrus.Debugf(\"frozen after %d retries\", i)\n\t\t\t\t}\n\t\t\t\treturn nil\n\t\t\tdefault:\n\t\t\t\t// should never happen\n\t\t\t\treturn fmt.Errorf(\"unexpected state %s while freezing\", strings.TrimSpace(state))\n\t\t\t}\n\t\t}\n\t\t// Despite our best efforts, it got stuck in FREEZING.\n\t\treturn errors.New(\"unable to freeze\")\n\tcase cgroups.Thawed:\n\t\treturn cgroups.WriteFile(path, \"freezer.state\", string(cgroups.Thawed))\n\tcase cgroups.Undefined:\n\t\treturn nil\n\tdefault:\n\t\treturn fmt.Errorf(\"Invalid argument '%s' to freezer.state\", string(r.Freezer))\n\t}\n}\n\nfunc (s *FreezerGroup) GetStats(path string, stats *cgroups.Stats) error {\n\treturn nil\n}\n\nfunc (s *FreezerGroup) GetState(path string) (cgroups.FreezerState, error) {\n\tfor {\n\t\tstate, err := cgroups.ReadFile(path, \"freezer.state\")\n\t\tif err != nil {\n\t\t\t// If the kernel is too old, then we just treat the freezer as\n\t\t\t// being in an \"undefined\" state.\n\t\t\tif os.IsNotExist(err) || errors.Is(err, unix.ENODEV) {\n\t\t\t\terr = nil\n\t\t\t}\n\t\t\treturn cgroups.Undefined, err\n\t\t}\n\t\tswitch strings.TrimSpace(state) {\n\t\tcase \"THAWED\":\n\t\t\treturn cgroups.Thawed, nil\n\t\tcase \"FROZEN\":\n\t\t\t// Find out whether the cgroup is frozen directly,\n\t\t\t// or indirectly via an ancestor.\n\t\t\tself, err := cgroups.ReadFile(path, \"freezer.self_freezing\")\n\t\t\tif err != nil {\n\t\t\t\t// If the kernel is too old, then we just treat\n\t\t\t\t// it as being frozen.\n\t\t\t\tif errors.Is(err, os.ErrNotExist) || errors.Is(err, unix.ENODEV) {\n\t\t\t\t\terr = nil\n\t\t\t\t}\n\t\t\t\treturn cgroups.Frozen, err\n\t\t\t}\n\t\t\tswitch self {\n\t\t\tcase \"0\\n\":\n\t\t\t\treturn cgroups.Thawed, nil\n\t\t\tcase \"1\\n\":\n\t\t\t\treturn cgroups.Frozen, nil\n\t\t\tdefault:\n\t\t\t\treturn cgroups.Undefined, fmt.Errorf(`unknown \"freezer.self_freezing\" state: %q`, self)\n\t\t\t}\n\t\tcase \"FREEZING\":\n\t\t\t// Make sure we get a stable freezer state, so retry if the cgroup\n\t\t\t// is still undergoing freezing. This should be a temporary delay.\n\t\t\ttime.Sleep(1 * time.Millisecond)\n\t\t\tcontinue\n\t\tdefault:\n\t\t\treturn cgroups.Undefined, fmt.Errorf(\"unknown freezer.state %q\", state)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/fs.go",
    "content": "package fs\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fscommon\"\n)\n\nvar subsystems = []subsystem{\n\t&CpusetGroup{},\n\t&DevicesGroup{},\n\t&MemoryGroup{},\n\t&CpuGroup{},\n\t&CpuacctGroup{},\n\t&PidsGroup{},\n\t&BlkioGroup{},\n\t&HugetlbGroup{},\n\t&NetClsGroup{},\n\t&NetPrioGroup{},\n\t&PerfEventGroup{},\n\t&FreezerGroup{},\n\t&RdmaGroup{},\n\t&NameGroup{GroupName: \"name=systemd\", Join: true},\n\t&NameGroup{GroupName: \"misc\", Join: true},\n}\n\nvar errSubsystemDoesNotExist = errors.New(\"cgroup: subsystem does not exist\")\n\nfunc init() {\n\t// If using cgroups-hybrid mode then add a \"\" controller indicating\n\t// it should join the cgroups v2.\n\tif cgroups.IsCgroup2HybridMode() {\n\t\tsubsystems = append(subsystems, &NameGroup{GroupName: \"\", Join: true})\n\t}\n}\n\ntype subsystem interface {\n\t// Name returns the name of the subsystem.\n\tName() string\n\t// GetStats fills in the stats for the subsystem.\n\tGetStats(path string, stats *cgroups.Stats) error\n\t// Apply creates and joins a cgroup, adding pid into it. Some\n\t// subsystems use resources to pre-configure the cgroup parents\n\t// before creating or joining it.\n\tApply(path string, r *cgroups.Resources, pid int) error\n\t// Set sets the cgroup resources.\n\tSet(path string, r *cgroups.Resources) error\n}\n\ntype Manager struct {\n\tmu      sync.Mutex\n\tcgroups *cgroups.Cgroup\n\tpaths   map[string]string\n}\n\nfunc NewManager(cg *cgroups.Cgroup, paths map[string]string) (*Manager, error) {\n\t// Some v1 controllers (cpu, cpuset, and devices) expect\n\t// cgroups.Resources to not be nil in Apply.\n\tif cg.Resources == nil {\n\t\treturn nil, errors.New(\"cgroup v1 manager needs cgroups.Resources to be set during manager creation\")\n\t}\n\tif cg.Resources.Unified != nil {\n\t\treturn nil, cgroups.ErrV1NoUnified\n\t}\n\n\tif paths == nil {\n\t\tvar err error\n\t\tpaths, err = initPaths(cg)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn &Manager{\n\t\tcgroups: cg,\n\t\tpaths:   paths,\n\t}, nil\n}\n\n// isIgnorableError returns whether err is a permission error (in the loose\n// sense of the word). This includes EROFS (which for an unprivileged user is\n// basically a permission error) and EACCES (for similar reasons) as well as\n// the normal EPERM.\nfunc isIgnorableError(rootless bool, err error) bool {\n\t// We do not ignore errors if we are root.\n\tif !rootless {\n\t\treturn false\n\t}\n\t// Is it an ordinary EPERM?\n\tif errors.Is(err, os.ErrPermission) {\n\t\treturn true\n\t}\n\t// Handle some specific syscall errors.\n\tvar errno unix.Errno\n\tif errors.As(err, &errno) {\n\t\treturn errno == unix.EROFS || errno == unix.EPERM || errno == unix.EACCES\n\t}\n\treturn false\n}\n\nfunc (m *Manager) Apply(pid int) (retErr error) {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\n\tc := m.cgroups\n\n\tfor _, sys := range subsystems {\n\t\tname := sys.Name()\n\t\tp, ok := m.paths[name]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := sys.Apply(p, c.Resources, pid); err != nil {\n\t\t\t// In the case of rootless (including euid=0 in userns), where an\n\t\t\t// explicit cgroup path hasn't been set, we don't bail on error in\n\t\t\t// case of permission problems here, but do delete the path from\n\t\t\t// the m.paths map, since it is either non-existent and could not\n\t\t\t// be created, or the pid could not be added to it.\n\t\t\t//\n\t\t\t// Cases where limits for the subsystem have been set are handled\n\t\t\t// later by Set, which fails with a friendly error (see\n\t\t\t// if path == \"\" in Set).\n\t\t\tif isIgnorableError(c.Rootless, err) && c.Path == \"\" {\n\t\t\t\tretErr = cgroups.ErrRootless\n\t\t\t\tdelete(m.paths, name)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t}\n\treturn retErr\n}\n\n// AddPid adds a process with a given pid to an existing cgroup.\n// The subcgroup argument is either empty, or a path relative to\n// a cgroup under under the manager's cgroup.\nfunc (m *Manager) AddPid(subcgroup string, pid int) (retErr error) {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\n\tc := m.cgroups\n\n\tfor _, dir := range m.paths {\n\t\tpath := path.Join(dir, subcgroup)\n\t\tif !strings.HasPrefix(path, dir) {\n\t\t\treturn fmt.Errorf(\"bad sub cgroup path: %s\", subcgroup)\n\t\t}\n\n\t\tif err := cgroups.WriteCgroupProc(path, pid); err != nil {\n\t\t\tif isIgnorableError(c.Rootless, err) && c.Path == \"\" {\n\t\t\t\tretErr = cgroups.ErrRootless\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn retErr\n}\n\nfunc (m *Manager) Destroy() error {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\treturn cgroups.RemovePaths(m.paths)\n}\n\nfunc (m *Manager) Path(subsys string) string {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\treturn m.paths[subsys]\n}\n\nfunc (m *Manager) GetStats() (*cgroups.Stats, error) {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\tstats := cgroups.NewStats()\n\tfor _, sys := range subsystems {\n\t\tpath := m.paths[sys.Name()]\n\t\tif path == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif err := sys.GetStats(path, stats); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn stats, nil\n}\n\nfunc (m *Manager) Set(r *cgroups.Resources) error {\n\tif r == nil {\n\t\treturn nil\n\t}\n\n\tif r.Unified != nil {\n\t\treturn cgroups.ErrV1NoUnified\n\t}\n\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\tfor _, sys := range subsystems {\n\t\tpath := m.paths[sys.Name()]\n\t\tif err := sys.Set(path, r); err != nil {\n\t\t\t// When rootless is true, errors from the device subsystem\n\t\t\t// are ignored, as it is really not expected to work.\n\t\t\tif m.cgroups.Rootless && sys.Name() == \"devices\" && !errors.Is(err, cgroups.ErrDevicesUnsupported) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// However, errors from other subsystems are not ignored.\n\t\t\t// see @test \"runc create (rootless + limits + no cgrouppath + no permission) fails with informative error\"\n\t\t\tif path == \"\" {\n\t\t\t\t// We never created a path for this cgroup, so we cannot set\n\t\t\t\t// limits for it (though we have already tried at this point).\n\t\t\t\treturn fmt.Errorf(\"cannot set %s limit: container could not join or create cgroup\", sys.Name())\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Freeze toggles the container's freezer cgroup depending on the state\n// provided\nfunc (m *Manager) Freeze(state cgroups.FreezerState) error {\n\tpath := m.Path(\"freezer\")\n\tif path == \"\" {\n\t\treturn errors.New(\"cannot toggle freezer: cgroups not configured for container\")\n\t}\n\n\tprevState := m.cgroups.Resources.Freezer\n\tm.cgroups.Resources.Freezer = state\n\tfreezer := &FreezerGroup{}\n\tif err := freezer.Set(path, m.cgroups.Resources); err != nil {\n\t\tm.cgroups.Resources.Freezer = prevState\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (m *Manager) GetPids() ([]int, error) {\n\treturn cgroups.GetPids(m.Path(\"devices\"))\n}\n\nfunc (m *Manager) GetAllPids() ([]int, error) {\n\treturn cgroups.GetAllPids(m.Path(\"devices\"))\n}\n\nfunc (m *Manager) GetPaths() map[string]string {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\treturn m.paths\n}\n\nfunc (m *Manager) GetCgroups() (*cgroups.Cgroup, error) {\n\treturn m.cgroups, nil\n}\n\nfunc (m *Manager) GetFreezerState() (cgroups.FreezerState, error) {\n\tdir := m.Path(\"freezer\")\n\t// If the container doesn't have the freezer cgroup, say it's undefined.\n\tif dir == \"\" {\n\t\treturn cgroups.Undefined, nil\n\t}\n\tfreezer := &FreezerGroup{}\n\treturn freezer.GetState(dir)\n}\n\nfunc (m *Manager) Exists() bool {\n\treturn cgroups.PathExists(m.Path(\"devices\"))\n}\n\nfunc OOMKillCount(path string) (uint64, error) {\n\treturn fscommon.GetValueByKey(path, \"memory.oom_control\", \"oom_kill\")\n}\n\nfunc (m *Manager) OOMKillCount() (uint64, error) {\n\tc, err := OOMKillCount(m.Path(\"memory\"))\n\t// Ignore ENOENT when rootless as it couldn't create cgroup.\n\tif err != nil && m.cgroups.Rootless && os.IsNotExist(err) {\n\t\terr = nil\n\t}\n\n\treturn c, err\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/hugetlb.go",
    "content": "package fs\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"strconv\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fscommon\"\n)\n\ntype HugetlbGroup struct{}\n\nfunc (s *HugetlbGroup) Name() string {\n\treturn \"hugetlb\"\n}\n\nfunc (s *HugetlbGroup) Apply(path string, _ *cgroups.Resources, pid int) error {\n\treturn apply(path, pid)\n}\n\nfunc (s *HugetlbGroup) Set(path string, r *cgroups.Resources) error {\n\tconst suffix = \".limit_in_bytes\"\n\tskipRsvd := false\n\n\tfor _, hugetlb := range r.HugetlbLimit {\n\t\tprefix := \"hugetlb.\" + hugetlb.Pagesize\n\t\tval := strconv.FormatUint(hugetlb.Limit, 10)\n\t\tif err := cgroups.WriteFile(path, prefix+suffix, val); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif skipRsvd {\n\t\t\tcontinue\n\t\t}\n\t\tif err := cgroups.WriteFile(path, prefix+\".rsvd\"+suffix, val); err != nil {\n\t\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t\tskipRsvd = true\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (s *HugetlbGroup) GetStats(path string, stats *cgroups.Stats) error {\n\tif !cgroups.PathExists(path) {\n\t\treturn nil\n\t}\n\trsvd := \".rsvd\"\n\thugetlbStats := cgroups.HugetlbStats{}\n\tfor _, pageSize := range cgroups.HugePageSizes() {\n\tagain:\n\t\tprefix := \"hugetlb.\" + pageSize + rsvd\n\n\t\tvalue, err := fscommon.GetCgroupParamUint(path, prefix+\".usage_in_bytes\")\n\t\tif err != nil {\n\t\t\tif rsvd != \"\" && errors.Is(err, os.ErrNotExist) {\n\t\t\t\trsvd = \"\"\n\t\t\t\tgoto again\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\thugetlbStats.Usage = value\n\n\t\tvalue, err = fscommon.GetCgroupParamUint(path, prefix+\".max_usage_in_bytes\")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thugetlbStats.MaxUsage = value\n\n\t\tvalue, err = fscommon.GetCgroupParamUint(path, prefix+\".failcnt\")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thugetlbStats.Failcnt = value\n\n\t\tstats.HugetlbStats[pageSize] = hugetlbStats\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/memory.go",
    "content": "package fs\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fscommon\"\n)\n\nconst (\n\tcgroupMemorySwapLimit = \"memory.memsw.limit_in_bytes\"\n\tcgroupMemoryLimit     = \"memory.limit_in_bytes\"\n\tcgroupMemoryUsage     = \"memory.usage_in_bytes\"\n\tcgroupMemoryMaxUsage  = \"memory.max_usage_in_bytes\"\n)\n\ntype MemoryGroup struct{}\n\nfunc (s *MemoryGroup) Name() string {\n\treturn \"memory\"\n}\n\nfunc (s *MemoryGroup) Apply(path string, _ *cgroups.Resources, pid int) error {\n\treturn apply(path, pid)\n}\n\nfunc setMemory(path string, val int64) error {\n\tif val == 0 {\n\t\treturn nil\n\t}\n\n\terr := cgroups.WriteFile(path, cgroupMemoryLimit, strconv.FormatInt(val, 10))\n\tif !errors.Is(err, unix.EBUSY) {\n\t\treturn err\n\t}\n\n\t// EBUSY means the kernel can't set new limit as it's too low\n\t// (lower than the current usage). Return more specific error.\n\tusage, err := fscommon.GetCgroupParamUint(path, cgroupMemoryUsage)\n\tif err != nil {\n\t\treturn err\n\t}\n\tmax, err := fscommon.GetCgroupParamUint(path, cgroupMemoryMaxUsage)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn fmt.Errorf(\"unable to set memory limit to %d (current usage: %d, peak usage: %d)\", val, usage, max)\n}\n\nfunc setSwap(path string, val int64) error {\n\tif val == 0 {\n\t\treturn nil\n\t}\n\n\treturn cgroups.WriteFile(path, cgroupMemorySwapLimit, strconv.FormatInt(val, 10))\n}\n\nfunc setMemoryAndSwap(path string, r *cgroups.Resources) error {\n\t// If the memory update is set to -1 and the swap is not explicitly\n\t// set, we should also set swap to -1, it means unlimited memory.\n\tif r.Memory == -1 && r.MemorySwap == 0 {\n\t\t// Only set swap if it's enabled in kernel\n\t\tif cgroups.PathExists(filepath.Join(path, cgroupMemorySwapLimit)) {\n\t\t\tr.MemorySwap = -1\n\t\t}\n\t}\n\n\t// When memory and swap memory are both set, we need to handle the cases\n\t// for updating container.\n\tif r.Memory != 0 && r.MemorySwap != 0 {\n\t\tcurLimit, err := fscommon.GetCgroupParamUint(path, cgroupMemoryLimit)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// When update memory limit, we should adapt the write sequence\n\t\t// for memory and swap memory, so it won't fail because the new\n\t\t// value and the old value don't fit kernel's validation.\n\t\tif r.MemorySwap == -1 || curLimit < uint64(r.MemorySwap) {\n\t\t\tif err := setSwap(path, r.MemorySwap); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif err := setMemory(path, r.Memory); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tif err := setMemory(path, r.Memory); err != nil {\n\t\treturn err\n\t}\n\tif err := setSwap(path, r.MemorySwap); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (s *MemoryGroup) Set(path string, r *cgroups.Resources) error {\n\tif err := setMemoryAndSwap(path, r); err != nil {\n\t\treturn err\n\t}\n\n\t// ignore KernelMemory and KernelMemoryTCP\n\n\tif r.MemoryReservation != 0 {\n\t\tif err := cgroups.WriteFile(path, \"memory.soft_limit_in_bytes\", strconv.FormatInt(r.MemoryReservation, 10)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif r.OomKillDisable {\n\t\tif err := cgroups.WriteFile(path, \"memory.oom_control\", \"1\"); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif r.MemorySwappiness == nil || int64(*r.MemorySwappiness) == -1 {\n\t\treturn nil\n\t} else if *r.MemorySwappiness <= 100 {\n\t\tif err := cgroups.WriteFile(path, \"memory.swappiness\", strconv.FormatUint(*r.MemorySwappiness, 10)); err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\treturn fmt.Errorf(\"invalid memory swappiness value: %d (valid range is 0-100)\", *r.MemorySwappiness)\n\t}\n\n\treturn nil\n}\n\nfunc (s *MemoryGroup) GetStats(path string, stats *cgroups.Stats) error {\n\tconst file = \"memory.stat\"\n\tstatsFile, err := cgroups.OpenFile(path, file, os.O_RDONLY)\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\tdefer statsFile.Close()\n\n\tsc := bufio.NewScanner(statsFile)\n\tfor sc.Scan() {\n\t\tt, v, err := fscommon.ParseKeyValue(sc.Text())\n\t\tif err != nil {\n\t\t\treturn &parseError{Path: path, File: file, Err: err}\n\t\t}\n\t\tstats.MemoryStats.Stats[t] = v\n\t}\n\tstats.MemoryStats.Cache = stats.MemoryStats.Stats[\"cache\"]\n\n\tmemoryUsage, err := getMemoryData(path, \"\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tstats.MemoryStats.Usage = memoryUsage\n\tswapUsage, err := getMemoryData(path, \"memsw\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tstats.MemoryStats.SwapUsage = swapUsage\n\tstats.MemoryStats.SwapOnlyUsage = cgroups.MemoryData{\n\t\tUsage:   swapUsage.Usage - memoryUsage.Usage,\n\t\tFailcnt: swapUsage.Failcnt - memoryUsage.Failcnt,\n\t}\n\tkernelUsage, err := getMemoryData(path, \"kmem\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tstats.MemoryStats.KernelUsage = kernelUsage\n\tkernelTCPUsage, err := getMemoryData(path, \"kmem.tcp\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tstats.MemoryStats.KernelTCPUsage = kernelTCPUsage\n\n\tvalue, err := fscommon.GetCgroupParamUint(path, \"memory.use_hierarchy\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tif value == 1 {\n\t\tstats.MemoryStats.UseHierarchy = true\n\t}\n\n\tpagesByNUMA, err := getPageUsageByNUMA(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tstats.MemoryStats.PageUsageByNUMA = pagesByNUMA\n\n\treturn nil\n}\n\nfunc getMemoryData(path, name string) (cgroups.MemoryData, error) {\n\tmemoryData := cgroups.MemoryData{}\n\n\tmoduleName := \"memory\"\n\tif name != \"\" {\n\t\tmoduleName = \"memory.\" + name\n\t}\n\tvar (\n\t\tusage    = moduleName + \".usage_in_bytes\"\n\t\tmaxUsage = moduleName + \".max_usage_in_bytes\"\n\t\tfailcnt  = moduleName + \".failcnt\"\n\t\tlimit    = moduleName + \".limit_in_bytes\"\n\t)\n\n\tvalue, err := fscommon.GetCgroupParamUint(path, usage)\n\tif err != nil {\n\t\tif name != \"\" && os.IsNotExist(err) {\n\t\t\t// Ignore ENOENT as swap and kmem controllers\n\t\t\t// are optional in the kernel.\n\t\t\treturn cgroups.MemoryData{}, nil\n\t\t}\n\t\treturn cgroups.MemoryData{}, err\n\t}\n\tmemoryData.Usage = value\n\tvalue, err = fscommon.GetCgroupParamUint(path, maxUsage)\n\tif err != nil {\n\t\treturn cgroups.MemoryData{}, err\n\t}\n\tmemoryData.MaxUsage = value\n\tvalue, err = fscommon.GetCgroupParamUint(path, failcnt)\n\tif err != nil {\n\t\treturn cgroups.MemoryData{}, err\n\t}\n\tmemoryData.Failcnt = value\n\tvalue, err = fscommon.GetCgroupParamUint(path, limit)\n\tif err != nil {\n\t\tif name == \"kmem\" && os.IsNotExist(err) {\n\t\t\t// Ignore ENOENT as kmem.limit_in_bytes has\n\t\t\t// been removed in newer kernels.\n\t\t\treturn memoryData, nil\n\t\t}\n\n\t\treturn cgroups.MemoryData{}, err\n\t}\n\tmemoryData.Limit = value\n\n\treturn memoryData, nil\n}\n\nfunc getPageUsageByNUMA(path string) (cgroups.PageUsageByNUMA, error) {\n\tconst (\n\t\tmaxColumns = math.MaxUint8 + 1\n\t\tfile       = \"memory.numa_stat\"\n\t)\n\tstats := cgroups.PageUsageByNUMA{}\n\n\tfd, err := cgroups.OpenFile(path, file, os.O_RDONLY)\n\tif os.IsNotExist(err) {\n\t\treturn stats, nil\n\t} else if err != nil {\n\t\treturn stats, err\n\t}\n\tdefer fd.Close()\n\n\t// File format is documented in linux/Documentation/cgroup-v1/memory.txt\n\t// and it looks like this:\n\t//\n\t// total=<total pages> N0=<node 0 pages> N1=<node 1 pages> ...\n\t// file=<total file pages> N0=<node 0 pages> N1=<node 1 pages> ...\n\t// anon=<total anon pages> N0=<node 0 pages> N1=<node 1 pages> ...\n\t// unevictable=<total anon pages> N0=<node 0 pages> N1=<node 1 pages> ...\n\t// hierarchical_<counter>=<counter pages> N0=<node 0 pages> N1=<node 1 pages> ...\n\n\tscanner := bufio.NewScanner(fd)\n\tfor scanner.Scan() {\n\t\tvar field *cgroups.PageStats\n\n\t\tline := scanner.Text()\n\t\tcolumns := strings.SplitN(line, \" \", maxColumns)\n\t\tfor i, column := range columns {\n\t\t\tkey, val, ok := strings.Cut(column, \"=\")\n\t\t\t// Some custom kernels have non-standard fields, like\n\t\t\t//   numa_locality 0 0 0 0 0 0 0 0 0 0\n\t\t\t//   numa_exectime 0\n\t\t\tif !ok {\n\t\t\t\tif i == 0 {\n\t\t\t\t\t// Ignore/skip those.\n\t\t\t\t\tbreak\n\t\t\t\t} else {\n\t\t\t\t\t// The first column was already validated,\n\t\t\t\t\t// so be strict to the rest.\n\t\t\t\t\treturn stats, malformedLine(path, file, line)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif i == 0 { // First column: key is name, val is total.\n\t\t\t\tfield = getNUMAField(&stats, key)\n\t\t\t\tif field == nil { // unknown field (new kernel?)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tfield.Total, err = strconv.ParseUint(val, 0, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn stats, &parseError{Path: path, File: file, Err: err}\n\t\t\t\t}\n\t\t\t\tfield.Nodes = map[uint8]uint64{}\n\t\t\t} else { // Subsequent columns: key is N<id>, val is usage.\n\t\t\t\tif len(key) < 2 || key[0] != 'N' {\n\t\t\t\t\t// This is definitely an error.\n\t\t\t\t\treturn stats, malformedLine(path, file, line)\n\t\t\t\t}\n\n\t\t\t\tn, err := strconv.ParseUint(key[1:], 10, 8)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn stats, &parseError{Path: path, File: file, Err: err}\n\t\t\t\t}\n\n\t\t\t\tusage, err := strconv.ParseUint(val, 10, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn stats, &parseError{Path: path, File: file, Err: err}\n\t\t\t\t}\n\n\t\t\t\tfield.Nodes[uint8(n)] = usage\n\t\t\t}\n\n\t\t}\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn cgroups.PageUsageByNUMA{}, &parseError{Path: path, File: file, Err: err}\n\t}\n\n\treturn stats, nil\n}\n\nfunc getNUMAField(stats *cgroups.PageUsageByNUMA, name string) *cgroups.PageStats {\n\tswitch name {\n\tcase \"total\":\n\t\treturn &stats.Total\n\tcase \"file\":\n\t\treturn &stats.File\n\tcase \"anon\":\n\t\treturn &stats.Anon\n\tcase \"unevictable\":\n\t\treturn &stats.Unevictable\n\tcase \"hierarchical_total\":\n\t\treturn &stats.Hierarchical.Total\n\tcase \"hierarchical_file\":\n\t\treturn &stats.Hierarchical.File\n\tcase \"hierarchical_anon\":\n\t\treturn &stats.Hierarchical.Anon\n\tcase \"hierarchical_unevictable\":\n\t\treturn &stats.Hierarchical.Unevictable\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/name.go",
    "content": "package fs\n\nimport (\n\t\"github.com/opencontainers/cgroups\"\n)\n\ntype NameGroup struct {\n\tGroupName string\n\tJoin      bool\n}\n\nfunc (s *NameGroup) Name() string {\n\treturn s.GroupName\n}\n\nfunc (s *NameGroup) Apply(path string, _ *cgroups.Resources, pid int) error {\n\tif s.Join {\n\t\t// Ignore errors if the named cgroup does not exist.\n\t\t_ = apply(path, pid)\n\t}\n\treturn nil\n}\n\nfunc (s *NameGroup) Set(_ string, _ *cgroups.Resources) error {\n\treturn nil\n}\n\nfunc (s *NameGroup) GetStats(path string, stats *cgroups.Stats) error {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/net_cls.go",
    "content": "package fs\n\nimport (\n\t\"strconv\"\n\n\t\"github.com/opencontainers/cgroups\"\n)\n\ntype NetClsGroup struct{}\n\nfunc (s *NetClsGroup) Name() string {\n\treturn \"net_cls\"\n}\n\nfunc (s *NetClsGroup) Apply(path string, _ *cgroups.Resources, pid int) error {\n\treturn apply(path, pid)\n}\n\nfunc (s *NetClsGroup) Set(path string, r *cgroups.Resources) error {\n\tif r.NetClsClassid != 0 {\n\t\tif err := cgroups.WriteFile(path, \"net_cls.classid\", strconv.FormatUint(uint64(r.NetClsClassid), 10)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (s *NetClsGroup) GetStats(path string, stats *cgroups.Stats) error {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/net_prio.go",
    "content": "package fs\n\nimport (\n\t\"github.com/opencontainers/cgroups\"\n)\n\ntype NetPrioGroup struct{}\n\nfunc (s *NetPrioGroup) Name() string {\n\treturn \"net_prio\"\n}\n\nfunc (s *NetPrioGroup) Apply(path string, _ *cgroups.Resources, pid int) error {\n\treturn apply(path, pid)\n}\n\nfunc (s *NetPrioGroup) Set(path string, r *cgroups.Resources) error {\n\tfor _, prioMap := range r.NetPrioIfpriomap {\n\t\tif err := cgroups.WriteFile(path, \"net_prio.ifpriomap\", prioMap.CgroupString()); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (s *NetPrioGroup) GetStats(path string, stats *cgroups.Stats) error {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/paths.go",
    "content": "package fs\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sync\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/internal/path\"\n)\n\n// The absolute path to the root of the cgroup hierarchies.\nvar (\n\tcgroupRootLock sync.Mutex\n\tcgroupRoot     string\n)\n\nconst defaultCgroupRoot = \"/sys/fs/cgroup\"\n\nfunc initPaths(cg *cgroups.Cgroup) (map[string]string, error) {\n\troot, err := rootPath()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tinner, err := path.Inner(cg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpaths := make(map[string]string)\n\tfor _, sys := range subsystems {\n\t\tname := sys.Name()\n\t\tpath, err := subsysPath(root, inner, name)\n\t\tif err != nil {\n\t\t\t// The non-presence of the devices subsystem\n\t\t\t// is considered fatal for security reasons.\n\t\t\tif cgroups.IsNotFound(err) && (cg.SkipDevices || name != \"devices\") {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\treturn nil, err\n\t\t}\n\t\tpaths[name] = path\n\t}\n\n\treturn paths, nil\n}\n\nfunc tryDefaultCgroupRoot() string {\n\tvar st, pst unix.Stat_t\n\n\t// (1) it should be a directory...\n\terr := unix.Lstat(defaultCgroupRoot, &st)\n\tif err != nil || st.Mode&unix.S_IFDIR == 0 {\n\t\treturn \"\"\n\t}\n\n\t// (2) ... and a mount point ...\n\terr = unix.Lstat(filepath.Dir(defaultCgroupRoot), &pst)\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\n\tif st.Dev == pst.Dev {\n\t\t// parent dir has the same dev -- not a mount point\n\t\treturn \"\"\n\t}\n\n\t// (3) ... of 'tmpfs' fs type.\n\tvar fst unix.Statfs_t\n\terr = unix.Statfs(defaultCgroupRoot, &fst)\n\tif err != nil || fst.Type != unix.TMPFS_MAGIC {\n\t\treturn \"\"\n\t}\n\n\t// (4) it should have at least 1 entry ...\n\tdir, err := os.Open(defaultCgroupRoot)\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\tdefer dir.Close()\n\tnames, err := dir.Readdirnames(1)\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\tif len(names) < 1 {\n\t\treturn \"\"\n\t}\n\t// ... which is a cgroup mount point.\n\terr = unix.Statfs(filepath.Join(defaultCgroupRoot, names[0]), &fst)\n\tif err != nil || fst.Type != unix.CGROUP_SUPER_MAGIC {\n\t\treturn \"\"\n\t}\n\n\treturn defaultCgroupRoot\n}\n\n// rootPath finds and returns path to the root of the cgroup hierarchies.\nfunc rootPath() (string, error) {\n\tcgroupRootLock.Lock()\n\tdefer cgroupRootLock.Unlock()\n\n\tif cgroupRoot != \"\" {\n\t\treturn cgroupRoot, nil\n\t}\n\n\t// fast path\n\tcgroupRoot = tryDefaultCgroupRoot()\n\tif cgroupRoot != \"\" {\n\t\treturn cgroupRoot, nil\n\t}\n\n\t// slow path: parse mountinfo\n\tmi, err := cgroups.GetCgroupMounts(false)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif len(mi) < 1 {\n\t\treturn \"\", errors.New(\"no cgroup mount found in mountinfo\")\n\t}\n\n\t// Get the first cgroup mount (e.g. \"/sys/fs/cgroup/memory\"),\n\t// use its parent directory.\n\troot := filepath.Dir(mi[0].Mountpoint)\n\n\tif _, err := os.Stat(root); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tcgroupRoot = root\n\treturn cgroupRoot, nil\n}\n\nfunc subsysPath(root, inner, subsystem string) (string, error) {\n\t// If the cgroup name/path is absolute do not look relative to the cgroup of the init process.\n\tif filepath.IsAbs(inner) {\n\t\tmnt, err := cgroups.FindCgroupMountpoint(root, subsystem)\n\t\t// If we didn't mount the subsystem, there is no point we make the path.\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\t// Sometimes subsystems can be mounted together as 'cpu,cpuacct'.\n\t\treturn filepath.Join(root, filepath.Base(mnt), inner), nil\n\t}\n\n\t// Use GetOwnCgroupPath for dind-like cases, when cgroupns is not\n\t// available. This is ugly.\n\tparentPath, err := cgroups.GetOwnCgroupPath(subsystem)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn filepath.Join(parentPath, inner), nil\n}\n\nfunc apply(path string, pid int) error {\n\tif path == \"\" {\n\t\treturn nil\n\t}\n\tif err := os.MkdirAll(path, 0o755); err != nil {\n\t\treturn err\n\t}\n\treturn cgroups.WriteCgroupProc(path, pid)\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/perf_event.go",
    "content": "package fs\n\nimport (\n\t\"github.com/opencontainers/cgroups\"\n)\n\ntype PerfEventGroup struct{}\n\nfunc (s *PerfEventGroup) Name() string {\n\treturn \"perf_event\"\n}\n\nfunc (s *PerfEventGroup) Apply(path string, _ *cgroups.Resources, pid int) error {\n\treturn apply(path, pid)\n}\n\nfunc (s *PerfEventGroup) Set(_ string, _ *cgroups.Resources) error {\n\treturn nil\n}\n\nfunc (s *PerfEventGroup) GetStats(path string, stats *cgroups.Stats) error {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/pids.go",
    "content": "package fs\n\nimport (\n\t\"math\"\n\t\"strconv\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fscommon\"\n)\n\ntype PidsGroup struct{}\n\nfunc (s *PidsGroup) Name() string {\n\treturn \"pids\"\n}\n\nfunc (s *PidsGroup) Apply(path string, _ *cgroups.Resources, pid int) error {\n\treturn apply(path, pid)\n}\n\nfunc (s *PidsGroup) Set(path string, r *cgroups.Resources) error {\n\tif r.PidsLimit == nil {\n\t\treturn nil\n\t}\n\n\t// \"max\" is the fallback value.\n\tval := \"max\"\n\tif limit := *r.PidsLimit; limit > 0 {\n\t\tval = strconv.FormatInt(limit, 10)\n\t} else if limit == 0 {\n\t\t// systemd doesn't support setting pids.max to \"0\", so when setting\n\t\t// TasksMax we need to remap it to \"1\". We do the same thing here to\n\t\t// avoid flip-flop behaviour between the fs and systemd drivers. In\n\t\t// practice, the pids cgroup behaviour is basically identical.\n\t\tval = \"1\"\n\t}\n\tif err := cgroups.WriteFile(path, \"pids.max\", val); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (s *PidsGroup) GetStats(path string, stats *cgroups.Stats) error {\n\tif !cgroups.PathExists(path) {\n\t\treturn nil\n\t}\n\tcurrent, err := fscommon.GetCgroupParamUint(path, \"pids.current\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tmax, err := fscommon.GetCgroupParamUint(path, \"pids.max\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t// If no limit is set, read from pids.max returns \"max\", which is\n\t// converted to MaxUint64 by GetCgroupParamUint. Historically, we\n\t// represent \"no limit\" for pids as 0, thus this conversion.\n\tif max == math.MaxUint64 {\n\t\tmax = 0\n\t}\n\n\tstats.PidsStats.Current = current\n\tstats.PidsStats.Limit = max\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs/rdma.go",
    "content": "package fs\n\nimport (\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fscommon\"\n)\n\ntype RdmaGroup struct{}\n\nfunc (s *RdmaGroup) Name() string {\n\treturn \"rdma\"\n}\n\nfunc (s *RdmaGroup) Apply(path string, _ *cgroups.Resources, pid int) error {\n\treturn apply(path, pid)\n}\n\nfunc (s *RdmaGroup) Set(path string, r *cgroups.Resources) error {\n\treturn fscommon.RdmaSet(path, r)\n}\n\nfunc (s *RdmaGroup) GetStats(path string, stats *cgroups.Stats) error {\n\treturn fscommon.RdmaGetStats(path, stats)\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs2/cpu.go",
    "content": "package fs2\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"os\"\n\t\"strconv\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fscommon\"\n)\n\nfunc isCPUSet(r *cgroups.Resources) bool {\n\treturn r.CpuWeight != 0 || r.CpuQuota != 0 || r.CpuPeriod != 0 || r.CPUIdle != nil || r.CpuBurst != nil\n}\n\nfunc setCPU(dirPath string, r *cgroups.Resources) error {\n\tif !isCPUSet(r) {\n\t\treturn nil\n\t}\n\n\tif r.CPUIdle != nil {\n\t\tif err := cgroups.WriteFile(dirPath, \"cpu.idle\", strconv.FormatInt(*r.CPUIdle, 10)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// NOTE: .CpuShares is not used here. Conversion is the caller's responsibility.\n\tif r.CpuWeight != 0 {\n\t\tif err := cgroups.WriteFile(dirPath, \"cpu.weight\", strconv.FormatUint(r.CpuWeight, 10)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tvar burst string\n\tif r.CpuBurst != nil {\n\t\tburst = strconv.FormatUint(*r.CpuBurst, 10)\n\t\tif err := cgroups.WriteFile(dirPath, \"cpu.max.burst\", burst); err != nil {\n\t\t\t// Sometimes when the burst to be set is larger\n\t\t\t// than the current one, it is rejected by the kernel\n\t\t\t// (EINVAL) as old_quota/new_burst exceeds the parent\n\t\t\t// cgroup quota limit. If this happens and the quota is\n\t\t\t// going to be set, ignore the error for now and retry\n\t\t\t// after setting the quota.\n\t\t\tif !errors.Is(err, unix.EINVAL) || r.CpuQuota == 0 {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\tburst = \"\"\n\t\t}\n\t}\n\tif r.CpuQuota != 0 || r.CpuPeriod != 0 {\n\t\tstr := \"max\"\n\t\tif r.CpuQuota > 0 {\n\t\t\tstr = strconv.FormatInt(r.CpuQuota, 10)\n\t\t}\n\t\tperiod := r.CpuPeriod\n\t\tif period == 0 {\n\t\t\t// This default value is documented in\n\t\t\t// https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html\n\t\t\tperiod = 100000\n\t\t}\n\t\tstr += \" \" + strconv.FormatUint(period, 10)\n\t\tif err := cgroups.WriteFile(dirPath, \"cpu.max\", str); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif burst != \"\" {\n\t\t\tif err := cgroups.WriteFile(dirPath, \"cpu.max.burst\", burst); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc statCpu(dirPath string, stats *cgroups.Stats) error {\n\tconst file = \"cpu.stat\"\n\tf, err := cgroups.OpenFile(dirPath, file, os.O_RDONLY)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\tsc := bufio.NewScanner(f)\n\tfor sc.Scan() {\n\t\tt, v, err := fscommon.ParseKeyValue(sc.Text())\n\t\tif err != nil {\n\t\t\treturn &parseError{Path: dirPath, File: file, Err: err}\n\t\t}\n\t\tswitch t {\n\t\tcase \"usage_usec\":\n\t\t\tstats.CpuStats.CpuUsage.TotalUsage = v * 1000\n\n\t\tcase \"user_usec\":\n\t\t\tstats.CpuStats.CpuUsage.UsageInUsermode = v * 1000\n\n\t\tcase \"system_usec\":\n\t\t\tstats.CpuStats.CpuUsage.UsageInKernelmode = v * 1000\n\n\t\tcase \"nr_periods\":\n\t\t\tstats.CpuStats.ThrottlingData.Periods = v\n\n\t\tcase \"nr_throttled\":\n\t\t\tstats.CpuStats.ThrottlingData.ThrottledPeriods = v\n\n\t\tcase \"throttled_usec\":\n\t\t\tstats.CpuStats.ThrottlingData.ThrottledTime = v * 1000\n\n\t\tcase \"nr_bursts\":\n\t\t\tstats.CpuStats.BurstData.BurstsPeriods = v\n\n\t\tcase \"burst_usec\":\n\t\t\tstats.CpuStats.BurstData.BurstTime = v * 1000\n\t\t}\n\t}\n\tif err := sc.Err(); err != nil {\n\t\treturn &parseError{Path: dirPath, File: file, Err: err}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs2/cpuset.go",
    "content": "package fs2\n\nimport (\n\t\"github.com/opencontainers/cgroups\"\n)\n\nfunc isCpusetSet(r *cgroups.Resources) bool {\n\treturn r.CpusetCpus != \"\" || r.CpusetMems != \"\"\n}\n\nfunc setCpuset(dirPath string, r *cgroups.Resources) error {\n\tif !isCpusetSet(r) {\n\t\treturn nil\n\t}\n\n\tif r.CpusetCpus != \"\" {\n\t\tif err := cgroups.WriteFile(dirPath, \"cpuset.cpus\", r.CpusetCpus); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif r.CpusetMems != \"\" {\n\t\tif err := cgroups.WriteFile(dirPath, \"cpuset.mems\", r.CpusetMems); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs2/create.go",
    "content": "package fs2\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/cgroups\"\n)\n\nfunc supportedControllers() (string, error) {\n\treturn cgroups.ReadFile(UnifiedMountpoint, \"/cgroup.controllers\")\n}\n\n// needAnyControllers returns whether we enable some supported controllers or not,\n// based on (1) controllers available and (2) resources that are being set.\n// We don't check \"pseudo\" controllers such as\n// \"freezer\" and \"devices\".\nfunc needAnyControllers(r *cgroups.Resources) (bool, error) {\n\tif r == nil {\n\t\treturn false, nil\n\t}\n\n\t// list of all available controllers\n\tcontent, err := supportedControllers()\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tavail := make(map[string]struct{})\n\tfor _, ctr := range strings.Fields(content) {\n\t\tavail[ctr] = struct{}{}\n\t}\n\n\t// check whether the controller if available or not\n\thave := func(controller string) bool {\n\t\t_, ok := avail[controller]\n\t\treturn ok\n\t}\n\n\tif isPidsSet(r) && have(\"pids\") {\n\t\treturn true, nil\n\t}\n\tif isMemorySet(r) && have(\"memory\") {\n\t\treturn true, nil\n\t}\n\tif isIoSet(r) && have(\"io\") {\n\t\treturn true, nil\n\t}\n\tif isCPUSet(r) && have(\"cpu\") {\n\t\treturn true, nil\n\t}\n\tif isCpusetSet(r) && have(\"cpuset\") {\n\t\treturn true, nil\n\t}\n\tif isHugeTlbSet(r) && have(\"hugetlb\") {\n\t\treturn true, nil\n\t}\n\n\treturn false, nil\n}\n\n// containsDomainController returns whether the current config contains domain controller or not.\n// Refer to: http://man7.org/linux/man-pages/man7/cgroups.7.html\n// As at Linux 4.19, the following controllers are threaded: cpu, perf_event, and pids.\nfunc containsDomainController(r *cgroups.Resources) bool {\n\treturn isMemorySet(r) || isIoSet(r) || isCPUSet(r) || isHugeTlbSet(r)\n}\n\n// CreateCgroupPath creates cgroupv2 path, enabling all the supported controllers.\nfunc CreateCgroupPath(path string, c *cgroups.Cgroup) (Err error) {\n\tif !strings.HasPrefix(path, UnifiedMountpoint) {\n\t\treturn fmt.Errorf(\"invalid cgroup path %s\", path)\n\t}\n\n\tcontent, err := supportedControllers()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tconst (\n\t\tcgTypeFile  = \"cgroup.type\"\n\t\tcgStCtlFile = \"cgroup.subtree_control\"\n\t)\n\tctrs := strings.Fields(content)\n\tres := \"+\" + strings.Join(ctrs, \" +\")\n\n\telements := strings.Split(path, \"/\")\n\telements = elements[3:]\n\tcurrent := \"/sys/fs\"\n\tfor i, e := range elements {\n\t\tcurrent = filepath.Join(current, e)\n\t\tif i > 0 {\n\t\t\tif err := os.Mkdir(current, 0o755); err != nil {\n\t\t\t\tif !os.IsExist(err) {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If the directory was created, be sure it is not left around on errors.\n\t\t\t\tcurrent := current\n\t\t\t\tdefer func() {\n\t\t\t\t\tif Err != nil {\n\t\t\t\t\t\tos.Remove(current)\n\t\t\t\t\t}\n\t\t\t\t}()\n\t\t\t}\n\t\t\tcgType, _ := cgroups.ReadFile(current, cgTypeFile)\n\t\t\tcgType = strings.TrimSpace(cgType)\n\t\t\tswitch cgType {\n\t\t\t// If the cgroup is in an invalid mode (usually this means there's an internal\n\t\t\t// process in the cgroup tree, because we created a cgroup under an\n\t\t\t// already-populated-by-other-processes cgroup), then we have to error out if\n\t\t\t// the user requested controllers which are not thread-aware. However, if all\n\t\t\t// the controllers requested are thread-aware we can simply put the cgroup into\n\t\t\t// threaded mode.\n\t\t\tcase \"domain invalid\":\n\t\t\t\tif containsDomainController(c.Resources) {\n\t\t\t\t\treturn fmt.Errorf(\"cannot enter cgroupv2 %q with domain controllers -- it is in an invalid state\", current)\n\t\t\t\t} else {\n\t\t\t\t\t// Not entirely correct (in theory we'd always want to be a domain --\n\t\t\t\t\t// since that means we're a properly delegated cgroup subtree) but in\n\t\t\t\t\t// this case there's not much we can do and it's better than giving an\n\t\t\t\t\t// error.\n\t\t\t\t\t_ = cgroups.WriteFile(current, cgTypeFile, \"threaded\")\n\t\t\t\t}\n\t\t\t// If the cgroup is in (threaded) or (domain threaded) mode, we can only use thread-aware controllers\n\t\t\t// (and you cannot usually take a cgroup out of threaded mode).\n\t\t\tcase \"domain threaded\":\n\t\t\t\tfallthrough\n\t\t\tcase \"threaded\":\n\t\t\t\tif containsDomainController(c.Resources) {\n\t\t\t\t\treturn fmt.Errorf(\"cannot enter cgroupv2 %q with domain controllers -- it is in %s mode\", current, cgType)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// enable all supported controllers\n\t\tif i < len(elements)-1 {\n\t\t\tif err := cgroups.WriteFile(current, cgStCtlFile, res); err != nil {\n\t\t\t\t// try write one by one\n\t\t\t\tallCtrs := strings.Split(res, \" \")\n\t\t\t\tfor _, ctr := range allCtrs {\n\t\t\t\t\t_ = cgroups.WriteFile(current, cgStCtlFile, ctr)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Some controllers might not be enabled when rootless or containerized,\n\t\t\t// but we don't catch the error here. (Caught in setXXX() functions.)\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs2/defaultpath.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 fs2\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/internal/path\"\n)\n\nconst UnifiedMountpoint = \"/sys/fs/cgroup\"\n\nfunc defaultDirPath(c *cgroups.Cgroup) (string, error) {\n\tinnerPath, err := path.Inner(c)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif filepath.IsAbs(innerPath) {\n\t\treturn filepath.Join(UnifiedMountpoint, innerPath), nil\n\t}\n\n\t// we don't need to use /proc/thread-self here because runc always runs\n\t// with every thread in the same cgroup. This lets us avoid having to do\n\t// runtime.LockOSThread.\n\townCgroup, err := parseCgroupFile(\"/proc/self/cgroup\")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\t// The current user scope most probably has tasks in it already,\n\t// making it impossible to enable controllers for its sub-cgroup.\n\t// A parent cgroup (with no tasks in it) is what we need.\n\townCgroup = filepath.Dir(ownCgroup)\n\n\treturn filepath.Join(UnifiedMountpoint, ownCgroup, innerPath), nil\n}\n\n// parseCgroupFile parses /proc/PID/cgroup file and return string\nfunc parseCgroupFile(path string) (string, error) {\n\tf, err := os.Open(path)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer f.Close()\n\treturn parseCgroupFromReader(f)\n}\n\nfunc parseCgroupFromReader(r io.Reader) (string, error) {\n\ts := bufio.NewScanner(r)\n\tfor s.Scan() {\n\t\t// \"0::/user.slice/user-1001.slice/session-1.scope\"\n\t\tif path, ok := strings.CutPrefix(s.Text(), \"0::\"); ok {\n\t\t\treturn path, nil\n\t\t}\n\t}\n\tif err := s.Err(); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn \"\", errors.New(\"cgroup path not found\")\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs2/freezer.go",
    "content": "package fs2\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n)\n\nfunc setFreezer(dirPath string, state cgroups.FreezerState) error {\n\tvar stateStr string\n\tswitch state {\n\tcase cgroups.Undefined:\n\t\treturn nil\n\tcase cgroups.Frozen:\n\t\tstateStr = \"1\"\n\tcase cgroups.Thawed:\n\t\tstateStr = \"0\"\n\tdefault:\n\t\treturn fmt.Errorf(\"invalid freezer state %q requested\", state)\n\t}\n\n\tfd, err := cgroups.OpenFile(dirPath, \"cgroup.freeze\", unix.O_RDWR)\n\tif err != nil {\n\t\t// We can ignore this request as long as the user didn't ask us to\n\t\t// freeze the container (since without the freezer cgroup, that's a\n\t\t// no-op).\n\t\tif state != cgroups.Frozen {\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"freezer not supported: %w\", err)\n\t}\n\tdefer fd.Close()\n\n\tif _, err := fd.WriteString(stateStr); err != nil {\n\t\treturn err\n\t}\n\t// Confirm that the cgroup did actually change states.\n\tif actualState, err := readFreezer(dirPath, fd); err != nil {\n\t\treturn err\n\t} else if actualState != state {\n\t\treturn fmt.Errorf(`expected \"cgroup.freeze\" to be in state %q but was in %q`, state, actualState)\n\t}\n\treturn nil\n}\n\nfunc getFreezer(dirPath string) (cgroups.FreezerState, error) {\n\tfd, err := cgroups.OpenFile(dirPath, \"cgroup.freeze\", unix.O_RDONLY)\n\tif err != nil {\n\t\t// If the kernel is too old, then we just treat the freezer as\n\t\t// being in an \"undefined\" state and ignore the error.\n\t\treturn cgroups.Undefined, ignoreNotExistOrNoDeviceError(err)\n\t}\n\tdefer fd.Close()\n\n\treturn readFreezer(dirPath, fd)\n}\n\nfunc readFreezer(dirPath string, fd *os.File) (cgroups.FreezerState, error) {\n\tif _, err := fd.Seek(0, 0); err != nil {\n\t\t// If the cgroup path is deleted at this point, then we just treat the freezer as\n\t\t// being in an \"undefined\" state and ignore the error.\n\t\treturn cgroups.Undefined, ignoreNotExistOrNoDeviceError(err)\n\t}\n\tstate := make([]byte, 2)\n\tif _, err := fd.Read(state); err != nil {\n\t\t// If the cgroup path is deleted at this point, then we just treat the freezer as\n\t\t// being in an \"undefined\" state and ignore the error.\n\t\treturn cgroups.Undefined, ignoreNotExistOrNoDeviceError(err)\n\t}\n\tswitch string(state) {\n\tcase \"0\\n\":\n\t\treturn cgroups.Thawed, nil\n\tcase \"1\\n\":\n\t\treturn waitFrozen(dirPath)\n\tdefault:\n\t\treturn cgroups.Undefined, fmt.Errorf(`unknown \"cgroup.freeze\" state: %q`, state)\n\t}\n}\n\n// ignoreNotExistOrNoDeviceError checks if the error is either a \"not exist\" error\n// or a \"no device\" error, and returns nil in those cases. Otherwise, it returns the error.\nfunc ignoreNotExistOrNoDeviceError(err error) error {\n\t// We can safely ignore the error in the following two common situations:\n\t// 1. The cgroup path does not exist at the time of opening(eg: the kernel is too old)\n\t//    — indicated by os.IsNotExist.\n\t// 2. The cgroup path is deleted during the seek/read operation — indicated by\n\t//    errors.Is(err, unix.ENODEV).\n\t// These conditions are expected and do not require special handling.\n\tif os.IsNotExist(err) || errors.Is(err, unix.ENODEV) {\n\t\treturn nil\n\t}\n\treturn err\n}\n\n// waitFrozen polls cgroup.events until it sees \"frozen 1\" in it.\nfunc waitFrozen(dirPath string) (cgroups.FreezerState, error) {\n\tfd, err := cgroups.OpenFile(dirPath, \"cgroup.events\", unix.O_RDONLY)\n\tif err != nil {\n\t\treturn cgroups.Undefined, err\n\t}\n\tdefer fd.Close()\n\n\t// XXX: Simple wait/read/retry is used here. An implementation\n\t// based on poll(2) or inotify(7) is possible, but it makes the code\n\t// much more complicated. Maybe address this later.\n\tconst (\n\t\t// Perform maxIter with waitTime in between iterations.\n\t\twaitTime = 10 * time.Millisecond\n\t\tmaxIter  = 1000\n\t)\n\tscanner := bufio.NewScanner(fd)\n\tfor i := 0; scanner.Scan(); {\n\t\tif i == maxIter {\n\t\t\treturn cgroups.Undefined, fmt.Errorf(\"timeout of %s reached waiting for the cgroup to freeze\", waitTime*maxIter)\n\t\t}\n\t\tif val, ok := strings.CutPrefix(scanner.Text(), \"frozen \"); ok {\n\t\t\tif val[0] == '1' {\n\t\t\t\treturn cgroups.Frozen, nil\n\t\t\t}\n\n\t\t\ti++\n\t\t\t// wait, then re-read\n\t\t\ttime.Sleep(waitTime)\n\t\t\t_, err := fd.Seek(0, 0)\n\t\t\tif err != nil {\n\t\t\t\treturn cgroups.Undefined, err\n\t\t\t}\n\t\t}\n\t}\n\t// Should only reach here either on read error,\n\t// or if the file does not contain \"frozen \" line.\n\treturn cgroups.Undefined, scanner.Err()\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs2/fs2.go",
    "content": "package fs2\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fscommon\"\n)\n\ntype parseError = fscommon.ParseError\n\ntype Manager struct {\n\tconfig *cgroups.Cgroup\n\t// dirPath is like \"/sys/fs/cgroup/user.slice/user-1001.slice/session-1.scope\"\n\tdirPath string\n\t// controllers is content of \"cgroup.controllers\" file.\n\t// excludes pseudo-controllers (\"devices\" and \"freezer\").\n\tcontrollers map[string]struct{}\n}\n\n// NewManager creates a manager for cgroup v2 unified hierarchy.\n// dirPath is like \"/sys/fs/cgroup/user.slice/user-1001.slice/session-1.scope\".\n// If dirPath is empty, it is automatically set using config.\nfunc NewManager(config *cgroups.Cgroup, dirPath string) (*Manager, error) {\n\tif dirPath == \"\" {\n\t\tvar err error\n\t\tdirPath, err = defaultDirPath(config)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tm := &Manager{\n\t\tconfig:  config,\n\t\tdirPath: dirPath,\n\t}\n\treturn m, nil\n}\n\nfunc (m *Manager) getControllers() error {\n\tif m.controllers != nil {\n\t\treturn nil\n\t}\n\n\tdata, err := cgroups.ReadFile(m.dirPath, \"cgroup.controllers\")\n\tif err != nil {\n\t\tif m.config.Rootless && m.config.Path == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\tfields := strings.Fields(data)\n\tm.controllers = make(map[string]struct{}, len(fields))\n\tfor _, c := range fields {\n\t\tm.controllers[c] = struct{}{}\n\t}\n\n\treturn nil\n}\n\nfunc (m *Manager) Apply(pid int) error {\n\tif err := CreateCgroupPath(m.dirPath, m.config); err != nil {\n\t\t// Related tests:\n\t\t// - \"runc create (no limits + no cgrouppath + no permission) succeeds\"\n\t\t// - \"runc create (rootless + no limits + cgrouppath + no permission) fails with permission error\"\n\t\t// - \"runc create (rootless + limits + no cgrouppath + no permission) fails with informative error\"\n\t\tif m.config.Rootless {\n\t\t\tif m.config.Path == \"\" {\n\t\t\t\tif blNeed, nErr := needAnyControllers(m.config.Resources); nErr == nil && !blNeed {\n\t\t\t\t\treturn cgroups.ErrRootless\n\t\t\t\t}\n\t\t\t\treturn fmt.Errorf(\"rootless needs no limits + no cgrouppath when no permission is granted for cgroups: %w\", err)\n\t\t\t}\n\t\t}\n\t\treturn err\n\t}\n\tif err := cgroups.WriteCgroupProc(m.dirPath, pid); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// AddPid adds a process with a given pid to an existing cgroup.\n// The subcgroup argument is either empty, or a path relative to\n// a cgroup under under the manager's cgroup.\nfunc (m *Manager) AddPid(subcgroup string, pid int) error {\n\tpath := filepath.Join(m.dirPath, subcgroup)\n\tif !strings.HasPrefix(path, m.dirPath) {\n\t\treturn fmt.Errorf(\"bad sub cgroup path: %s\", subcgroup)\n\t}\n\n\treturn cgroups.WriteCgroupProc(path, pid)\n}\n\nfunc (m *Manager) GetPids() ([]int, error) {\n\treturn cgroups.GetPids(m.dirPath)\n}\n\nfunc (m *Manager) GetAllPids() ([]int, error) {\n\treturn cgroups.GetAllPids(m.dirPath)\n}\n\nfunc (m *Manager) GetStats() (*cgroups.Stats, error) {\n\tvar errs []error\n\n\tst := cgroups.NewStats()\n\n\t// pids (since kernel 4.5)\n\tif err := statPids(m.dirPath, st); err != nil {\n\t\terrs = append(errs, err)\n\t}\n\t// memory (since kernel 4.5)\n\tif err := statMemory(m.dirPath, st); err != nil && !os.IsNotExist(err) {\n\t\terrs = append(errs, err)\n\t}\n\t// io (since kernel 4.5)\n\tif err := statIo(m.dirPath, st); err != nil && !os.IsNotExist(err) {\n\t\terrs = append(errs, err)\n\t}\n\t// cpu (since kernel 4.15)\n\t// Note cpu.stat is available even if the controller is not enabled.\n\tif err := statCpu(m.dirPath, st); err != nil && !os.IsNotExist(err) {\n\t\terrs = append(errs, err)\n\t}\n\t// PSI (since kernel 4.20).\n\tvar err error\n\tif st.CpuStats.PSI, err = statPSI(m.dirPath, \"cpu.pressure\"); err != nil {\n\t\terrs = append(errs, err)\n\t}\n\tif st.MemoryStats.PSI, err = statPSI(m.dirPath, \"memory.pressure\"); err != nil {\n\t\terrs = append(errs, err)\n\t}\n\tif st.BlkioStats.PSI, err = statPSI(m.dirPath, \"io.pressure\"); err != nil {\n\t\terrs = append(errs, err)\n\t}\n\t// hugetlb (since kernel 5.6)\n\tif err := statHugeTlb(m.dirPath, st); err != nil && !os.IsNotExist(err) {\n\t\terrs = append(errs, err)\n\t}\n\t// rdma (since kernel 4.11)\n\tif err := fscommon.RdmaGetStats(m.dirPath, st); err != nil && !os.IsNotExist(err) {\n\t\terrs = append(errs, err)\n\t}\n\t// misc (since kernel 5.13)\n\tif err := statMisc(m.dirPath, st); err != nil && !os.IsNotExist(err) {\n\t\terrs = append(errs, err)\n\t}\n\tif len(errs) > 0 && !m.config.Rootless {\n\t\treturn st, fmt.Errorf(\"error while statting cgroup v2: %+v\", errs)\n\t}\n\treturn st, nil\n}\n\nfunc (m *Manager) Freeze(state cgroups.FreezerState) error {\n\tif m.config.Resources == nil {\n\t\treturn errors.New(\"cannot toggle freezer: cgroups not configured for container\")\n\t}\n\tif err := setFreezer(m.dirPath, state); err != nil {\n\t\treturn err\n\t}\n\tm.config.Resources.Freezer = state\n\treturn nil\n}\n\nfunc (m *Manager) Destroy() error {\n\treturn cgroups.RemovePath(m.dirPath)\n}\n\nfunc (m *Manager) Path(_ string) string {\n\treturn m.dirPath\n}\n\nfunc (m *Manager) Set(r *cgroups.Resources) error {\n\tif r == nil {\n\t\treturn nil\n\t}\n\tif err := m.getControllers(); err != nil {\n\t\treturn err\n\t}\n\t// pids (since kernel 4.5)\n\tif err := setPids(m.dirPath, r); err != nil {\n\t\treturn err\n\t}\n\t// memory (since kernel 4.5)\n\tif err := setMemory(m.dirPath, r); err != nil {\n\t\treturn err\n\t}\n\t// io (since kernel 4.5)\n\tif err := setIo(m.dirPath, r); err != nil {\n\t\treturn err\n\t}\n\t// cpu (since kernel 4.15)\n\tif err := setCPU(m.dirPath, r); err != nil {\n\t\treturn err\n\t}\n\t// devices (since kernel 4.15, pseudo-controller)\n\t//\n\t// When rootless is true, errors from the device subsystem are ignored because it is really not expected to work.\n\t// However, errors from other subsystems are not ignored.\n\t// see @test \"runc create (rootless + limits + no cgrouppath + no permission) fails with informative error\"\n\tif err := setDevices(m.dirPath, r); err != nil {\n\t\tif !m.config.Rootless || errors.Is(err, cgroups.ErrDevicesUnsupported) {\n\t\t\treturn err\n\t\t}\n\t}\n\t// cpuset (since kernel 5.0)\n\tif err := setCpuset(m.dirPath, r); err != nil {\n\t\treturn err\n\t}\n\t// hugetlb (since kernel 5.6)\n\tif err := setHugeTlb(m.dirPath, r); err != nil {\n\t\treturn err\n\t}\n\t// rdma (since kernel 4.11)\n\tif err := fscommon.RdmaSet(m.dirPath, r); err != nil {\n\t\treturn err\n\t}\n\t// freezer (since kernel 5.2, pseudo-controller)\n\tif err := setFreezer(m.dirPath, r.Freezer); err != nil {\n\t\treturn err\n\t}\n\tif err := m.setUnified(r.Unified); err != nil {\n\t\treturn err\n\t}\n\tm.config.Resources = r\n\treturn nil\n}\n\nfunc setDevices(dirPath string, r *cgroups.Resources) error {\n\tif cgroups.DevicesSetV2 == nil {\n\t\tif len(r.Devices) > 0 {\n\t\t\treturn cgroups.ErrDevicesUnsupported\n\t\t}\n\t\treturn nil\n\t}\n\treturn cgroups.DevicesSetV2(dirPath, r)\n}\n\nfunc (m *Manager) setUnified(res map[string]string) error {\n\tfor k, v := range res {\n\t\tif strings.Contains(k, \"/\") {\n\t\t\treturn fmt.Errorf(\"unified resource %q must be a file name (no slashes)\", k)\n\t\t}\n\t\tif err := cgroups.WriteFileByLine(m.dirPath, k, v); err != nil {\n\t\t\t// Check for both EPERM and ENOENT since O_CREAT is used by WriteFile.\n\t\t\tif errors.Is(err, os.ErrPermission) || errors.Is(err, os.ErrNotExist) {\n\t\t\t\t// Check if a controller is available,\n\t\t\t\t// to give more specific error if not.\n\t\t\t\tc, _, ok := strings.Cut(k, \".\")\n\t\t\t\tif !ok {\n\t\t\t\t\treturn fmt.Errorf(\"unified resource %q must be in the form CONTROLLER.PARAMETER\", k)\n\t\t\t\t}\n\t\t\t\tif _, ok := m.controllers[c]; !ok && c != \"cgroup\" {\n\t\t\t\t\treturn fmt.Errorf(\"unified resource %q can't be set: controller %q not available\", k, c)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"unable to set unified resource %q: %w\", k, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (m *Manager) GetPaths() map[string]string {\n\tpaths := make(map[string]string, 1)\n\tpaths[\"\"] = m.dirPath\n\treturn paths\n}\n\nfunc (m *Manager) GetCgroups() (*cgroups.Cgroup, error) {\n\treturn m.config, nil\n}\n\nfunc (m *Manager) GetFreezerState() (cgroups.FreezerState, error) {\n\treturn getFreezer(m.dirPath)\n}\n\nfunc (m *Manager) Exists() bool {\n\treturn cgroups.PathExists(m.dirPath)\n}\n\nfunc OOMKillCount(path string) (uint64, error) {\n\treturn fscommon.GetValueByKey(path, \"memory.events\", \"oom_kill\")\n}\n\nfunc (m *Manager) OOMKillCount() (uint64, error) {\n\tc, err := OOMKillCount(m.dirPath)\n\tif err != nil && m.config.Rootless && os.IsNotExist(err) {\n\t\terr = nil\n\t}\n\n\treturn c, err\n}\n\nfunc CheckMemoryUsage(dirPath string, r *cgroups.Resources) error {\n\tif !r.MemoryCheckBeforeUpdate {\n\t\treturn nil\n\t}\n\n\tif r.Memory <= 0 && r.MemorySwap <= 0 {\n\t\treturn nil\n\t}\n\n\tusage, err := fscommon.GetCgroupParamUint(dirPath, \"memory.current\")\n\tif err != nil {\n\t\t// This check is on best-effort basis, so if we can't read the\n\t\t// current usage (cgroup not yet created, or any other error),\n\t\t// we should not fail.\n\t\treturn nil\n\t}\n\n\tif r.MemorySwap > 0 {\n\t\tif uint64(r.MemorySwap) <= usage {\n\t\t\treturn fmt.Errorf(\"rejecting memory+swap limit %d <= usage %d\", r.MemorySwap, usage)\n\t\t}\n\t}\n\n\tif r.Memory > 0 {\n\t\tif uint64(r.Memory) <= usage {\n\t\t\treturn fmt.Errorf(\"rejecting memory limit %d <= usage %d\", r.Memory, usage)\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs2/hugetlb.go",
    "content": "package fs2\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"strconv\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fscommon\"\n)\n\nfunc isHugeTlbSet(r *cgroups.Resources) bool {\n\treturn len(r.HugetlbLimit) > 0\n}\n\nfunc setHugeTlb(dirPath string, r *cgroups.Resources) error {\n\tif !isHugeTlbSet(r) {\n\t\treturn nil\n\t}\n\tconst suffix = \".max\"\n\tskipRsvd := false\n\tfor _, hugetlb := range r.HugetlbLimit {\n\t\tprefix := \"hugetlb.\" + hugetlb.Pagesize\n\t\tval := strconv.FormatUint(hugetlb.Limit, 10)\n\t\tif err := cgroups.WriteFile(dirPath, prefix+suffix, val); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif skipRsvd {\n\t\t\tcontinue\n\t\t}\n\t\tif err := cgroups.WriteFile(dirPath, prefix+\".rsvd\"+suffix, val); err != nil {\n\t\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t\tskipRsvd = true\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc statHugeTlb(dirPath string, stats *cgroups.Stats) error {\n\thugetlbStats := cgroups.HugetlbStats{}\n\trsvd := \".rsvd\"\n\n\tfor _, pagesize := range cgroups.HugePageSizes() {\n\t\tprefix := \"hugetlb.\" + pagesize\n\tagain:\n\t\tvalue, err := fscommon.GetCgroupParamUint(dirPath, prefix+rsvd+\".current\")\n\t\tif err != nil {\n\t\t\tif rsvd != \"\" && errors.Is(err, os.ErrNotExist) {\n\t\t\t\trsvd = \"\"\n\t\t\t\tgoto again\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\thugetlbStats.Usage = value\n\n\t\tvalue, err = fscommon.GetValueByKey(dirPath, prefix+\".events\", \"max\")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thugetlbStats.Failcnt = value\n\n\t\tstats.HugetlbStats[pagesize] = hugetlbStats\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs2/io.go",
    "content": "package fs2\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/sirupsen/logrus\"\n\n\t\"github.com/opencontainers/cgroups\"\n)\n\nfunc isIoSet(r *cgroups.Resources) bool {\n\treturn r.BlkioWeight != 0 ||\n\t\tlen(r.BlkioWeightDevice) > 0 ||\n\t\tlen(r.BlkioThrottleReadBpsDevice) > 0 ||\n\t\tlen(r.BlkioThrottleWriteBpsDevice) > 0 ||\n\t\tlen(r.BlkioThrottleReadIOPSDevice) > 0 ||\n\t\tlen(r.BlkioThrottleWriteIOPSDevice) > 0\n}\n\n// bfqDeviceWeightSupported checks for per-device BFQ weight support (added\n// in kernel v5.4, commit 795fe54c2a8) by reading from \"io.bfq.weight\".\nfunc bfqDeviceWeightSupported(bfq *os.File) bool {\n\tif bfq == nil {\n\t\treturn false\n\t}\n\t_, _ = bfq.Seek(0, 0)\n\tbuf := make([]byte, 32)\n\t_, _ = bfq.Read(buf)\n\t// If only a single number (default weight) if read back, we have older kernel.\n\t_, err := strconv.ParseInt(string(bytes.TrimSpace(buf)), 10, 64)\n\treturn err != nil\n}\n\nfunc setIo(dirPath string, r *cgroups.Resources) error {\n\tif !isIoSet(r) {\n\t\treturn nil\n\t}\n\n\t// If BFQ IO scheduler is available, use it.\n\tvar bfq *os.File\n\tif r.BlkioWeight != 0 || len(r.BlkioWeightDevice) > 0 {\n\t\tvar err error\n\t\tbfq, err = cgroups.OpenFile(dirPath, \"io.bfq.weight\", os.O_RDWR)\n\t\tif err == nil {\n\t\t\tdefer bfq.Close()\n\t\t} else if !os.IsNotExist(err) {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif r.BlkioWeight != 0 {\n\t\tif bfq != nil { // Use BFQ.\n\t\t\tif _, err := bfq.WriteString(strconv.FormatUint(uint64(r.BlkioWeight), 10)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\t// Fallback to io.weight with a conversion scheme.\n\t\t\tv := cgroups.ConvertBlkIOToIOWeightValue(r.BlkioWeight)\n\t\t\tif err := cgroups.WriteFile(dirPath, \"io.weight\", strconv.FormatUint(v, 10)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\tif bfqDeviceWeightSupported(bfq) {\n\t\tfor _, wd := range r.BlkioWeightDevice {\n\t\t\tif _, err := bfq.WriteString(wd.WeightString() + \"\\n\"); err != nil {\n\t\t\t\treturn fmt.Errorf(\"setting device weight %q: %w\", wd.WeightString(), err)\n\t\t\t}\n\t\t}\n\t}\n\tfor _, td := range r.BlkioThrottleReadBpsDevice {\n\t\tif err := cgroups.WriteFile(dirPath, \"io.max\", td.StringName(\"rbps\")); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tfor _, td := range r.BlkioThrottleWriteBpsDevice {\n\t\tif err := cgroups.WriteFile(dirPath, \"io.max\", td.StringName(\"wbps\")); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tfor _, td := range r.BlkioThrottleReadIOPSDevice {\n\t\tif err := cgroups.WriteFile(dirPath, \"io.max\", td.StringName(\"riops\")); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tfor _, td := range r.BlkioThrottleWriteIOPSDevice {\n\t\tif err := cgroups.WriteFile(dirPath, \"io.max\", td.StringName(\"wiops\")); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc readCgroup2MapFile(dirPath string, name string) (map[string][]string, error) {\n\tret := map[string][]string{}\n\tf, err := cgroups.OpenFile(dirPath, name, os.O_RDONLY)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\tscanner := bufio.NewScanner(f)\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\t\tparts := strings.Fields(line)\n\t\tif len(parts) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tret[parts[0]] = parts[1:]\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, &parseError{Path: dirPath, File: name, Err: err}\n\t}\n\treturn ret, nil\n}\n\nfunc statIo(dirPath string, stats *cgroups.Stats) error {\n\tconst file = \"io.stat\"\n\tvalues, err := readCgroup2MapFile(dirPath, file)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// more details on the io.stat file format: https://www.kernel.org/doc/Documentation/cgroup-v2.txt\n\tvar parsedStats cgroups.BlkioStats\n\tfor k, v := range values {\n\t\td := strings.Split(k, \":\")\n\t\tif len(d) != 2 {\n\t\t\tcontinue\n\t\t}\n\t\tmajor, err := strconv.ParseUint(d[0], 10, 64)\n\t\tif err != nil {\n\t\t\treturn &parseError{Path: dirPath, File: file, Err: err}\n\t\t}\n\t\tminor, err := strconv.ParseUint(d[1], 10, 64)\n\t\tif err != nil {\n\t\t\treturn &parseError{Path: dirPath, File: file, Err: err}\n\t\t}\n\n\t\tfor _, item := range v {\n\t\t\td := strings.Split(item, \"=\")\n\t\t\tif len(d) != 2 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\top := d[0]\n\n\t\t\t// Map to the cgroupv1 naming and layout (in separate tables).\n\t\t\tvar targetTable *[]cgroups.BlkioStatEntry\n\t\t\tswitch op {\n\t\t\t// Equivalent to cgroupv1's blkio.io_service_bytes.\n\t\t\tcase \"rbytes\":\n\t\t\t\top = \"Read\"\n\t\t\t\ttargetTable = &parsedStats.IoServiceBytesRecursive\n\t\t\tcase \"wbytes\":\n\t\t\t\top = \"Write\"\n\t\t\t\ttargetTable = &parsedStats.IoServiceBytesRecursive\n\t\t\t// Equivalent to cgroupv1's blkio.io_serviced.\n\t\t\tcase \"rios\":\n\t\t\t\top = \"Read\"\n\t\t\t\ttargetTable = &parsedStats.IoServicedRecursive\n\t\t\tcase \"wios\":\n\t\t\t\top = \"Write\"\n\t\t\t\ttargetTable = &parsedStats.IoServicedRecursive\n\n\t\t\tcase \"cost.usage\":\n\t\t\t\top = \"Count\"\n\t\t\t\ttargetTable = &parsedStats.IoCostUsage\n\t\t\tcase \"cost.wait\":\n\t\t\t\top = \"Count\"\n\t\t\t\ttargetTable = &parsedStats.IoCostWait\n\t\t\tcase \"cost.indebt\":\n\t\t\t\top = \"Count\"\n\t\t\t\ttargetTable = &parsedStats.IoCostIndebt\n\t\t\tcase \"cost.indelay\":\n\t\t\t\top = \"Count\"\n\t\t\t\ttargetTable = &parsedStats.IoCostIndelay\n\n\t\t\tdefault:\n\t\t\t\tlogrus.Debugf(\"cgroupv2 io stats: unknown entry %s\", item)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvalue, err := strconv.ParseUint(d[1], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn &parseError{Path: dirPath, File: file, Err: err}\n\t\t\t}\n\n\t\t\tentry := cgroups.BlkioStatEntry{\n\t\t\t\tOp:    op,\n\t\t\t\tMajor: major,\n\t\t\t\tMinor: minor,\n\t\t\t\tValue: value,\n\t\t\t}\n\t\t\t*targetTable = append(*targetTable, entry)\n\t\t}\n\t}\n\tstats.BlkioStats = parsedStats\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs2/memory.go",
    "content": "package fs2\n\nimport (\n\t\"bufio\"\n\t\"errors\"\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/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fscommon\"\n)\n\n// numToStr converts an int64 value to a string for writing to a\n// cgroupv2 files with .min, .max, .low, or .high suffix.\n// The value of -1 is converted to \"max\" for cgroupv1 compatibility\n// (which used to write -1 to remove the limit).\nfunc numToStr(value int64) string {\n\tswitch value {\n\tcase 0:\n\t\treturn \"\"\n\tcase -1:\n\t\treturn \"max\"\n\t}\n\treturn strconv.FormatInt(value, 10)\n}\n\nfunc isMemorySet(r *cgroups.Resources) bool {\n\treturn r.MemoryReservation != 0 || r.Memory != 0 || r.MemorySwap != 0\n}\n\nfunc setMemory(dirPath string, r *cgroups.Resources) error {\n\tif !isMemorySet(r) {\n\t\treturn nil\n\t}\n\n\tif err := CheckMemoryUsage(dirPath, r); err != nil {\n\t\treturn err\n\t}\n\n\tswap, err := cgroups.ConvertMemorySwapToCgroupV2Value(r.MemorySwap, r.Memory)\n\tif err != nil {\n\t\treturn err\n\t}\n\tswapStr := numToStr(swap)\n\tif swapStr == \"\" && swap == 0 && r.MemorySwap > 0 {\n\t\t// memory and memorySwap set to the same value -- disable swap\n\t\tswapStr = \"0\"\n\t}\n\t// never write empty string to `memory.swap.max`, it means set to 0.\n\tif swapStr != \"\" {\n\t\tif err := cgroups.WriteFile(dirPath, \"memory.swap.max\", swapStr); err != nil {\n\t\t\t// If swap is not enabled, silently ignore setting to max or disabling it.\n\t\t\tif !(errors.Is(err, os.ErrNotExist) && (swapStr == \"max\" || swapStr == \"0\")) { //nolint:staticcheck // Ignore \"QF1001: could apply De Morgan's law\".\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\tif val := numToStr(r.Memory); val != \"\" {\n\t\tif err := cgroups.WriteFile(dirPath, \"memory.max\", val); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// cgroup.Resources.KernelMemory is ignored\n\n\tif val := numToStr(r.MemoryReservation); val != \"\" {\n\t\tif err := cgroups.WriteFile(dirPath, \"memory.low\", val); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc statMemory(dirPath string, stats *cgroups.Stats) error {\n\tconst file = \"memory.stat\"\n\tstatsFile, err := cgroups.OpenFile(dirPath, file, os.O_RDONLY)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer statsFile.Close()\n\n\tsc := bufio.NewScanner(statsFile)\n\tfor sc.Scan() {\n\t\tt, v, err := fscommon.ParseKeyValue(sc.Text())\n\t\tif err != nil {\n\t\t\treturn &parseError{Path: dirPath, File: file, Err: err}\n\t\t}\n\t\tstats.MemoryStats.Stats[t] = v\n\t}\n\tif err := sc.Err(); err != nil {\n\t\treturn &parseError{Path: dirPath, File: file, Err: err}\n\t}\n\tstats.MemoryStats.Cache = stats.MemoryStats.Stats[\"file\"]\n\t// Unlike cgroup v1 which has memory.use_hierarchy binary knob,\n\t// cgroup v2 is always hierarchical.\n\tstats.MemoryStats.UseHierarchy = true\n\n\tmemoryUsage, err := getMemoryDataV2(dirPath, \"\")\n\tif err != nil {\n\t\tif errors.Is(err, unix.ENOENT) && dirPath == UnifiedMountpoint {\n\t\t\t// The root cgroup does not have memory.{current,max,peak}\n\t\t\t// so emulate those using data from /proc/meminfo and\n\t\t\t// /sys/fs/cgroup/memory.stat\n\t\t\treturn rootStatsFromMeminfo(stats)\n\t\t}\n\t\treturn err\n\t}\n\tstats.MemoryStats.Usage = memoryUsage\n\tswapOnlyUsage, err := getMemoryDataV2(dirPath, \"swap\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tstats.MemoryStats.SwapOnlyUsage = swapOnlyUsage\n\tswapUsage := swapOnlyUsage\n\t// As cgroup v1 reports SwapUsage values as mem+swap combined,\n\t// while in cgroup v2 swap values do not include memory,\n\t// report combined mem+swap for v1 compatibility.\n\tswapUsage.Usage += memoryUsage.Usage\n\tif swapUsage.Limit != math.MaxUint64 {\n\t\tswapUsage.Limit += memoryUsage.Limit\n\t}\n\t// The `MaxUsage` of mem+swap cannot simply combine mem with\n\t// swap. So set it to 0 for v1 compatibility.\n\tswapUsage.MaxUsage = 0\n\tstats.MemoryStats.SwapUsage = swapUsage\n\n\treturn nil\n}\n\nfunc getMemoryDataV2(path, name string) (cgroups.MemoryData, error) {\n\tmemoryData := cgroups.MemoryData{}\n\n\tmoduleName := \"memory\"\n\tif name != \"\" {\n\t\tmoduleName = \"memory.\" + name\n\t}\n\tusage := moduleName + \".current\"\n\tlimit := moduleName + \".max\"\n\tmaxUsage := moduleName + \".peak\"\n\n\tvalue, err := fscommon.GetCgroupParamUint(path, usage)\n\tif err != nil {\n\t\tif name != \"\" && os.IsNotExist(err) {\n\t\t\t// Ignore EEXIST as there's no swap accounting\n\t\t\t// if kernel CONFIG_MEMCG_SWAP is not set or\n\t\t\t// swapaccount=0 kernel boot parameter is given.\n\t\t\treturn cgroups.MemoryData{}, nil\n\t\t}\n\t\treturn cgroups.MemoryData{}, err\n\t}\n\tmemoryData.Usage = value\n\n\tvalue, err = fscommon.GetCgroupParamUint(path, limit)\n\tif err != nil {\n\t\treturn cgroups.MemoryData{}, err\n\t}\n\tmemoryData.Limit = value\n\n\t// `memory.peak` since kernel 5.19\n\t// `memory.swap.peak` since kernel 6.5\n\tvalue, err = fscommon.GetCgroupParamUint(path, maxUsage)\n\tif err != nil && !os.IsNotExist(err) {\n\t\treturn cgroups.MemoryData{}, err\n\t}\n\tmemoryData.MaxUsage = value\n\n\treturn memoryData, nil\n}\n\nfunc rootStatsFromMeminfo(stats *cgroups.Stats) error {\n\tconst file = \"/proc/meminfo\"\n\tf, err := os.Open(file)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\t// Fields we are interested in.\n\tvar (\n\t\tswap_free  uint64\n\t\tswap_total uint64\n\t)\n\tmem := map[string]*uint64{\n\t\t\"SwapFree\":  &swap_free,\n\t\t\"SwapTotal\": &swap_total,\n\t}\n\n\tfound := 0\n\tsc := bufio.NewScanner(f)\n\tfor sc.Scan() {\n\t\tparts := strings.SplitN(sc.Text(), \":\", 3)\n\t\tif len(parts) != 2 {\n\t\t\t// Should not happen.\n\t\t\tcontinue\n\t\t}\n\t\tk := parts[0]\n\t\tp, ok := mem[k]\n\t\tif !ok {\n\t\t\t// Unknown field -- not interested.\n\t\t\tcontinue\n\t\t}\n\t\tvStr := strings.TrimSpace(strings.TrimSuffix(parts[1], \" kB\"))\n\t\t*p, err = strconv.ParseUint(vStr, 10, 64)\n\t\tif err != nil {\n\t\t\treturn &parseError{File: file, Err: errors.New(\"bad value for \" + k)}\n\t\t}\n\n\t\tfound++\n\t\tif found == len(mem) {\n\t\t\t// Got everything we need -- skip the rest.\n\t\t\tbreak\n\t\t}\n\t}\n\tif err := sc.Err(); err != nil {\n\t\treturn &parseError{Path: \"\", File: file, Err: err}\n\t}\n\n\t// cgroup v1 `usage_in_bytes` reports memory usage as the sum of\n\t// - rss (NR_ANON_MAPPED)\n\t// - cache (NR_FILE_PAGES)\n\t// cgroup v1 reports SwapUsage values as mem+swap combined\n\t// cgroup v2 reports rss and cache as anon and file.\n\t// sum `anon` + `file` to report the same value as `usage_in_bytes` in v1.\n\t// sum swap usage as combined mem+swap usage for consistency as well.\n\tstats.MemoryStats.Usage.Usage = stats.MemoryStats.Stats[\"anon\"] + stats.MemoryStats.Stats[\"file\"]\n\tstats.MemoryStats.Usage.Limit = math.MaxUint64\n\tstats.MemoryStats.SwapUsage.Usage = (swap_total - swap_free) * 1024\n\tstats.MemoryStats.SwapUsage.Limit = math.MaxUint64\n\tstats.MemoryStats.SwapUsage.Usage += stats.MemoryStats.Usage.Usage\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs2/misc.go",
    "content": "package fs2\n\nimport (\n\t\"bufio\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fscommon\"\n)\n\nfunc statMisc(dirPath string, stats *cgroups.Stats) error {\n\tfor _, file := range []string{\"current\", \"events\"} {\n\t\tfd, err := cgroups.OpenFile(dirPath, \"misc.\"+file, os.O_RDONLY)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\ts := bufio.NewScanner(fd)\n\t\tfor s.Scan() {\n\t\t\tkey, value, err := fscommon.ParseKeyValue(s.Text())\n\t\t\tif err != nil {\n\t\t\t\tfd.Close()\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tkey = strings.TrimSuffix(key, \".max\")\n\n\t\t\tif _, ok := stats.MiscStats[key]; !ok {\n\t\t\t\tstats.MiscStats[key] = cgroups.MiscStats{}\n\t\t\t}\n\n\t\t\ttmp := stats.MiscStats[key]\n\n\t\t\tswitch file {\n\t\t\tcase \"current\":\n\t\t\t\ttmp.Usage = value\n\t\t\tcase \"events\":\n\t\t\t\ttmp.Events = value\n\t\t\t}\n\n\t\t\tstats.MiscStats[key] = tmp\n\t\t}\n\t\tfd.Close()\n\n\t\tif err := s.Err(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs2/pids.go",
    "content": "package fs2\n\nimport (\n\t\"errors\"\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/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fscommon\"\n)\n\nfunc isPidsSet(r *cgroups.Resources) bool {\n\treturn r.PidsLimit != nil\n}\n\nfunc setPids(dirPath string, r *cgroups.Resources) error {\n\tif !isPidsSet(r) {\n\t\treturn nil\n\t}\n\tval := \"max\"\n\tif limit := *r.PidsLimit; limit > 0 {\n\t\tval = strconv.FormatInt(limit, 10)\n\t} else if limit == 0 {\n\t\t// systemd doesn't support setting pids.max to \"0\", so when setting\n\t\t// TasksMax we need to remap it to \"1\". We do the same thing here to\n\t\t// avoid flip-flop behaviour between the fs and systemd drivers. In\n\t\t// practice, the pids cgroup behaviour is basically identical.\n\t\tval = \"1\"\n\t}\n\tif err := cgroups.WriteFile(dirPath, \"pids.max\", val); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc statPidsFromCgroupProcs(dirPath string, stats *cgroups.Stats) error {\n\t// if the controller is not enabled, let's read PIDS from cgroups.procs\n\t// (or threads if cgroup.threads is enabled)\n\tcontents, err := cgroups.ReadFile(dirPath, \"cgroup.procs\")\n\tif errors.Is(err, unix.ENOTSUP) {\n\t\tcontents, err = cgroups.ReadFile(dirPath, \"cgroup.threads\")\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tpids := strings.Count(contents, \"\\n\")\n\tstats.PidsStats.Current = uint64(pids)\n\tstats.PidsStats.Limit = 0\n\treturn nil\n}\n\nfunc statPids(dirPath string, stats *cgroups.Stats) error {\n\tcurrent, err := fscommon.GetCgroupParamUint(dirPath, \"pids.current\")\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn statPidsFromCgroupProcs(dirPath, stats)\n\t\t}\n\t\treturn err\n\t}\n\n\tmax, err := fscommon.GetCgroupParamUint(dirPath, \"pids.max\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t// If no limit is set, read from pids.max returns \"max\", which is\n\t// converted to MaxUint64 by GetCgroupParamUint. Historically, we\n\t// represent \"no limit\" for pids as 0, thus this conversion.\n\tif max == math.MaxUint64 {\n\t\tmax = 0\n\t}\n\n\tstats.PidsStats.Current = current\n\tstats.PidsStats.Limit = max\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fs2/psi.go",
    "content": "package fs2\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/cgroups\"\n)\n\nfunc statPSI(dirPath string, file string) (*cgroups.PSIStats, error) {\n\tf, err := cgroups.OpenFile(dirPath, file, os.O_RDONLY)\n\tif err != nil {\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t// Kernel < 4.20, or CONFIG_PSI is not set,\n\t\t\t// or PSI stats are turned off for the cgroup\n\t\t\t// (\"echo 0 > cgroup.pressure\", kernel >= 6.1).\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tvar psistats cgroups.PSIStats\n\tsc := bufio.NewScanner(f)\n\tfor sc.Scan() {\n\t\tparts := strings.Fields(sc.Text())\n\t\tvar pv *cgroups.PSIData\n\t\tswitch parts[0] {\n\t\tcase \"some\":\n\t\t\tpv = &psistats.Some\n\t\tcase \"full\":\n\t\t\tpv = &psistats.Full\n\t\t}\n\t\tif pv != nil {\n\t\t\t*pv, err = parsePSIData(parts[1:])\n\t\t\tif err != nil {\n\t\t\t\treturn nil, &parseError{Path: dirPath, File: file, Err: err}\n\t\t\t}\n\t\t}\n\t}\n\tif err := sc.Err(); err != nil {\n\t\tif errors.Is(err, unix.ENOTSUP) {\n\t\t\t// Some kernels (e.g. CS9) may return ENOTSUP on read\n\t\t\t// if psi=1 kernel cmdline parameter is required.\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, &parseError{Path: dirPath, File: file, Err: err}\n\t}\n\treturn &psistats, nil\n}\n\nfunc parsePSIData(psi []string) (cgroups.PSIData, error) {\n\tdata := cgroups.PSIData{}\n\tfor _, f := range psi {\n\t\tkey, val, ok := strings.Cut(f, \"=\")\n\t\tif !ok {\n\t\t\treturn data, fmt.Errorf(\"invalid psi data: %q\", f)\n\t\t}\n\t\tvar pv *float64\n\t\tswitch key {\n\t\tcase \"avg10\":\n\t\t\tpv = &data.Avg10\n\t\tcase \"avg60\":\n\t\t\tpv = &data.Avg60\n\t\tcase \"avg300\":\n\t\t\tpv = &data.Avg300\n\t\tcase \"total\":\n\t\t\tv, err := strconv.ParseUint(val, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn data, fmt.Errorf(\"invalid %s PSI value: %w\", key, err)\n\t\t\t}\n\t\t\tdata.Total = v\n\t\t}\n\t\tif pv != nil {\n\t\t\tv, err := strconv.ParseFloat(val, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn data, fmt.Errorf(\"invalid %s PSI value: %w\", key, err)\n\t\t\t}\n\t\t\t*pv = v\n\t\t}\n\t}\n\treturn data, nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fscommon/rdma.go",
    "content": "package fscommon\n\nimport (\n\t\"bufio\"\n\t\"errors\"\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/opencontainers/cgroups\"\n)\n\n// parseRdmaKV parses raw string to RdmaEntry.\nfunc parseRdmaKV(raw string, entry *cgroups.RdmaEntry) error {\n\tvar value uint32\n\n\tk, v, ok := strings.Cut(raw, \"=\")\n\n\tif !ok {\n\t\treturn errors.New(\"Unable to parse RDMA entry\")\n\t}\n\n\tif v == \"max\" {\n\t\tvalue = math.MaxUint32\n\t} else {\n\t\tval64, err := strconv.ParseUint(v, 10, 32)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvalue = uint32(val64)\n\t}\n\tswitch k {\n\tcase \"hca_handle\":\n\t\tentry.HcaHandles = value\n\tcase \"hca_object\":\n\t\tentry.HcaObjects = value\n\t}\n\n\treturn nil\n}\n\n// readRdmaEntries reads and converts array of rawstrings to RdmaEntries from file.\n// example entry: mlx4_0 hca_handle=2 hca_object=2000\nfunc readRdmaEntries(dir, file string) ([]cgroups.RdmaEntry, error) {\n\trdmaEntries := make([]cgroups.RdmaEntry, 0)\n\tfd, err := cgroups.OpenFile(dir, file, unix.O_RDONLY)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer fd.Close()\n\tscanner := bufio.NewScanner(fd)\n\tfor scanner.Scan() {\n\t\tparts := strings.SplitN(scanner.Text(), \" \", 4)\n\t\tif len(parts) == 3 {\n\t\t\tentry := new(cgroups.RdmaEntry)\n\t\t\tentry.Device = parts[0]\n\t\t\terr = parseRdmaKV(parts[1], entry)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\terr = parseRdmaKV(parts[2], entry)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\trdmaEntries = append(rdmaEntries, *entry)\n\t\t}\n\t}\n\treturn rdmaEntries, scanner.Err()\n}\n\n// RdmaGetStats returns rdma stats such as totalLimit and current entries.\nfunc RdmaGetStats(path string, stats *cgroups.Stats) error {\n\tcurrentEntries, err := readRdmaEntries(path, \"rdma.current\")\n\tif err != nil {\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\terr = nil\n\t\t}\n\t\treturn err\n\t}\n\tmaxEntries, err := readRdmaEntries(path, \"rdma.max\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t// If device got removed between reading two files, ignore returning stats.\n\tif len(currentEntries) != len(maxEntries) {\n\t\treturn nil\n\t}\n\n\tstats.RdmaStats = cgroups.RdmaStats{\n\t\tRdmaLimit:   maxEntries,\n\t\tRdmaCurrent: currentEntries,\n\t}\n\n\treturn nil\n}\n\nfunc createCmdString(device string, limits cgroups.LinuxRdma) string {\n\tcmdString := device\n\tif limits.HcaHandles != nil {\n\t\tcmdString += \" hca_handle=\" + strconv.FormatUint(uint64(*limits.HcaHandles), 10)\n\t}\n\tif limits.HcaObjects != nil {\n\t\tcmdString += \" hca_object=\" + strconv.FormatUint(uint64(*limits.HcaObjects), 10)\n\t}\n\treturn cmdString\n}\n\n// RdmaSet sets RDMA resources.\nfunc RdmaSet(path string, r *cgroups.Resources) error {\n\tfor device, limits := range r.Rdma {\n\t\tif err := cgroups.WriteFile(path, \"rdma.max\", createCmdString(device, limits)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/fscommon/utils.go",
    "content": "package fscommon\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"path\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/cgroups\"\n)\n\nvar (\n\t// Deprecated: use cgroups.OpenFile instead.\n\tOpenFile = cgroups.OpenFile\n\t// Deprecated: use cgroups.ReadFile instead.\n\tReadFile = cgroups.ReadFile\n\t// Deprecated: use cgroups.WriteFile instead.\n\tWriteFile = cgroups.WriteFile\n)\n\n// ParseError records a parse error details, including the file path.\ntype ParseError struct {\n\tPath string\n\tFile string\n\tErr  error\n}\n\nfunc (e *ParseError) Error() string {\n\treturn \"unable to parse \" + path.Join(e.Path, e.File) + \": \" + e.Err.Error()\n}\n\nfunc (e *ParseError) Unwrap() error { return e.Err }\n\n// ParseUint converts a string to an uint64 integer.\n// Negative values are returned at zero as, due to kernel bugs,\n// some of the memory cgroup stats can be negative.\nfunc ParseUint(s string, base, bitSize int) (uint64, error) {\n\tvalue, err := strconv.ParseUint(s, base, bitSize)\n\tif err != nil {\n\t\tintValue, intErr := strconv.ParseInt(s, base, bitSize)\n\t\t// 1. Handle negative values greater than MinInt64 (and)\n\t\t// 2. Handle negative values lesser than MinInt64\n\t\tif intErr == nil && intValue < 0 {\n\t\t\treturn 0, nil\n\t\t} else if errors.Is(intErr, strconv.ErrRange) && intValue < 0 {\n\t\t\treturn 0, nil\n\t\t}\n\n\t\treturn value, err\n\t}\n\n\treturn value, nil\n}\n\n// ParseKeyValue parses a space-separated \"key value\" kind of cgroup\n// parameter and returns its key as a string, and its value as uint64\n// (using [ParseUint] to convert the value). For example,\n// \"io_service_bytes 1234\" will be returned as \"io_service_bytes\", 1234.\nfunc ParseKeyValue(t string) (string, uint64, error) {\n\tkey, val, ok := strings.Cut(t, \" \")\n\tif !ok || key == \"\" || val == \"\" {\n\t\treturn \"\", 0, fmt.Errorf(`line %q is not in \"key value\" format`, t)\n\t}\n\n\tvalue, err := ParseUint(val, 10, 64)\n\tif err != nil {\n\t\treturn \"\", 0, err\n\t}\n\n\treturn key, value, nil\n}\n\n// GetValueByKey reads space-separated \"key value\" pairs from the specified\n// cgroup file, looking for a specified key, and returns its value as uint64,\n// using [ParseUint] for conversion. If the value is not found, 0 is returned.\nfunc GetValueByKey(path, file, key string) (uint64, error) {\n\tcontent, err := cgroups.ReadFile(path, file)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tkey += \" \"\n\tlines := strings.Split(content, \"\\n\")\n\tfor _, line := range lines {\n\t\tv, ok := strings.CutPrefix(line, key)\n\t\tif ok {\n\t\t\tval, err := ParseUint(v, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\terr = &ParseError{Path: path, File: file, Err: err}\n\t\t\t}\n\t\t\treturn val, err\n\t\t}\n\t}\n\n\treturn 0, nil\n}\n\n// GetCgroupParamUint reads a single uint64 value from the specified cgroup file.\n// If the value read is \"max\", the math.MaxUint64 is returned.\nfunc GetCgroupParamUint(path, file string) (uint64, error) {\n\tcontents, err := GetCgroupParamString(path, file)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif contents == \"max\" {\n\t\treturn math.MaxUint64, nil\n\t}\n\n\tres, err := ParseUint(contents, 10, 64)\n\tif err != nil {\n\t\treturn res, &ParseError{Path: path, File: file, Err: err}\n\t}\n\treturn res, nil\n}\n\n// GetCgroupParamInt reads a single int64 value from specified cgroup file.\n// If the value read is \"max\", the math.MaxInt64 is returned.\nfunc GetCgroupParamInt(path, file string) (int64, error) {\n\tcontents, err := GetCgroupParamString(path, file)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif contents == \"max\" {\n\t\treturn math.MaxInt64, nil\n\t}\n\n\tres, err := strconv.ParseInt(contents, 10, 64)\n\tif err != nil {\n\t\treturn res, &ParseError{Path: path, File: file, Err: err}\n\t}\n\treturn res, nil\n}\n\n// GetCgroupParamString reads a string from the specified cgroup file.\nfunc GetCgroupParamString(path, file string) (string, error) {\n\tcontents, err := cgroups.ReadFile(path, file)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn strings.TrimSpace(contents), nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/getallpids.go",
    "content": "package cgroups\n\nimport (\n\t\"io/fs\"\n\t\"path/filepath\"\n)\n\n// GetAllPids returns all pids from the cgroup identified by path, and all its\n// sub-cgroups.\nfunc GetAllPids(path string) ([]int, error) {\n\tvar pids []int\n\terr := filepath.WalkDir(path, func(p string, d fs.DirEntry, iErr error) error {\n\t\tif iErr != nil {\n\t\t\treturn iErr\n\t\t}\n\t\tif !d.IsDir() {\n\t\t\treturn nil\n\t\t}\n\t\tcPids, err := readProcsFile(p)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpids = append(pids, cPids...)\n\t\treturn nil\n\t})\n\treturn pids, err\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/internal/path/path.go",
    "content": "package path\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/opencontainers/cgroups\"\n)\n\n// Inner returns a path to cgroup relative to a cgroup mount point, based\n// on cgroup configuration, or an error, if cgroup configuration is invalid.\n// To be used only by fs cgroup managers (systemd has different path rules).\nfunc Inner(c *cgroups.Cgroup) (string, error) {\n\tif (c.Name != \"\" || c.Parent != \"\") && c.Path != \"\" {\n\t\treturn \"\", errors.New(\"cgroup: either Path or Name and Parent should be used\")\n\t}\n\n\t// XXX: Do not remove cleanPath. Path safety is important! -- cyphar\n\tinnerPath := cleanPath(c.Path)\n\tif innerPath == \"\" {\n\t\tcgParent := cleanPath(c.Parent)\n\t\tcgName := cleanPath(c.Name)\n\t\tinnerPath = filepath.Join(cgParent, cgName)\n\t}\n\n\treturn innerPath, nil\n}\n\n// cleanPath is a copy of github.com/opencontainers/runc/libcontainer/utils.CleanPath.\nfunc cleanPath(path string) string {\n\t// Deal with empty strings nicely.\n\tif path == \"\" {\n\t\treturn \"\"\n\t}\n\n\t// Ensure that all paths are cleaned (especially problematic ones like\n\t// \"/../../../../../\" which can cause lots of issues).\n\n\tif filepath.IsAbs(path) {\n\t\treturn filepath.Clean(path)\n\t}\n\n\t// If the path isn't absolute, we need to do more processing to fix paths\n\t// such as \"../../../../<etc>/some/path\". We also shouldn't convert absolute\n\t// paths to relative ones.\n\tpath = filepath.Clean(string(os.PathSeparator) + path)\n\t// This can't fail, as (by definition) all paths are relative to root.\n\tpath, _ = filepath.Rel(string(os.PathSeparator), path)\n\n\treturn path\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/manager/new.go",
    "content": "package manager\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"path/filepath\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fs\"\n\t\"github.com/opencontainers/cgroups/fs2\"\n\t\"github.com/opencontainers/cgroups/systemd\"\n)\n\n// New returns the instance of a cgroup manager, which is chosen\n// based on the local environment (whether cgroup v1 or v2 is used)\n// and the config (whether config.Systemd is set or not).\nfunc New(config *cgroups.Cgroup) (cgroups.Manager, error) {\n\treturn NewWithPaths(config, nil)\n}\n\n// NewWithPaths is similar to New, and can be used in case cgroup paths\n// are already well known, which can save some resources.\n//\n// For cgroup v1, the keys are controller/subsystem name, and the values\n// are absolute filesystem paths to the appropriate cgroups.\n//\n// For cgroup v2, the only key allowed is \"\" (empty string), and the value\n// is the unified cgroup path.\nfunc NewWithPaths(config *cgroups.Cgroup, paths map[string]string) (cgroups.Manager, error) {\n\tif config == nil {\n\t\treturn nil, errors.New(\"cgroups/manager.New: config must not be nil\")\n\t}\n\tif config.Systemd && !systemd.IsRunningSystemd() {\n\t\treturn nil, errors.New(\"systemd not running on this host, cannot use systemd cgroups manager\")\n\t}\n\n\t// Cgroup v2 aka unified hierarchy.\n\tif cgroups.IsCgroup2UnifiedMode() {\n\t\tpath, err := getUnifiedPath(paths)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"manager.NewWithPaths: inconsistent paths: %w\", err)\n\t\t}\n\t\tif config.Systemd {\n\t\t\treturn systemd.NewUnifiedManager(config, path)\n\t\t}\n\t\treturn fs2.NewManager(config, path)\n\t}\n\n\t// Cgroup v1.\n\tif config.Systemd {\n\t\treturn systemd.NewLegacyManager(config, paths)\n\t}\n\n\treturn fs.NewManager(config, paths)\n}\n\n// getUnifiedPath is an implementation detail of libcontainer.\n// Historically, libcontainer.Create saves cgroup paths as per-subsystem path\n// map (as returned by cm.GetPaths(\"\"), but with v2 we only have one single\n// unified path (with \"\" as a key).\n//\n// This function converts from that map to string (using \"\" as a key),\n// and also checks that the map itself is sane.\nfunc getUnifiedPath(paths map[string]string) (string, error) {\n\tif len(paths) > 1 {\n\t\treturn \"\", fmt.Errorf(\"expected a single path, got %+v\", paths)\n\t}\n\tpath := paths[\"\"]\n\t// can be empty\n\tif path != \"\" {\n\t\tif filepath.Clean(path) != path || !filepath.IsAbs(path) {\n\t\t\treturn \"\", fmt.Errorf(\"invalid path: %q\", path)\n\t\t}\n\t}\n\n\treturn path, nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/stats.go",
    "content": "package cgroups\n\ntype ThrottlingData struct {\n\t// Number of periods with throttling active\n\tPeriods uint64 `json:\"periods,omitempty\"`\n\t// Number of periods when the container hit its throttling limit.\n\tThrottledPeriods uint64 `json:\"throttled_periods,omitempty\"`\n\t// Aggregate time the container was throttled for in nanoseconds.\n\tThrottledTime uint64 `json:\"throttled_time,omitempty\"`\n}\n\ntype BurstData struct {\n\t// Number of periods bandwidth burst occurs\n\tBurstsPeriods uint64 `json:\"bursts_periods,omitempty\"`\n\t// Cumulative wall-time that any cpus has used above quota in respective periods\n\t// Units: nanoseconds.\n\tBurstTime uint64 `json:\"burst_time,omitempty\"`\n}\n\n// CpuUsage denotes the usage of a CPU.\n// All CPU stats are aggregate since container inception.\ntype CpuUsage struct {\n\t// Total CPU time consumed.\n\t// Units: nanoseconds.\n\tTotalUsage uint64 `json:\"total_usage,omitempty\"`\n\t// Total CPU time consumed per core.\n\t// Units: nanoseconds.\n\tPercpuUsage []uint64 `json:\"percpu_usage,omitempty\"`\n\t// CPU time consumed per core in kernel mode\n\t// Units: nanoseconds.\n\tPercpuUsageInKernelmode []uint64 `json:\"percpu_usage_in_kernelmode\"`\n\t// CPU time consumed per core in user mode\n\t// Units: nanoseconds.\n\tPercpuUsageInUsermode []uint64 `json:\"percpu_usage_in_usermode\"`\n\t// Time spent by tasks of the cgroup in kernel mode.\n\t// Units: nanoseconds.\n\tUsageInKernelmode uint64 `json:\"usage_in_kernelmode\"`\n\t// Time spent by tasks of the cgroup in user mode.\n\t// Units: nanoseconds.\n\tUsageInUsermode uint64 `json:\"usage_in_usermode\"`\n}\n\ntype PSIData struct {\n\tAvg10  float64 `json:\"avg10\"`\n\tAvg60  float64 `json:\"avg60\"`\n\tAvg300 float64 `json:\"avg300\"`\n\tTotal  uint64  `json:\"total\"`\n}\n\ntype PSIStats struct {\n\tSome PSIData `json:\"some,omitempty\"`\n\tFull PSIData `json:\"full,omitempty\"`\n}\n\ntype CpuStats struct {\n\tCpuUsage       CpuUsage       `json:\"cpu_usage,omitempty\"`\n\tThrottlingData ThrottlingData `json:\"throttling_data,omitempty\"`\n\tPSI            *PSIStats      `json:\"psi,omitempty\"`\n\tBurstData      BurstData      `json:\"burst_data,omitempty\"`\n}\n\ntype CPUSetStats struct {\n\t// List of the physical numbers of the CPUs on which processes\n\t// in that cpuset are allowed to execute\n\tCPUs []uint16 `json:\"cpus,omitempty\"`\n\t// cpu_exclusive flag\n\tCPUExclusive uint64 `json:\"cpu_exclusive\"`\n\t// List of memory nodes on which processes in that cpuset\n\t// are allowed to allocate memory\n\tMems []uint16 `json:\"mems,omitempty\"`\n\t// mem_hardwall flag\n\tMemHardwall uint64 `json:\"mem_hardwall\"`\n\t// mem_exclusive flag\n\tMemExclusive uint64 `json:\"mem_exclusive\"`\n\t// memory_migrate flag\n\tMemoryMigrate uint64 `json:\"memory_migrate\"`\n\t// memory_spread page flag\n\tMemorySpreadPage uint64 `json:\"memory_spread_page\"`\n\t// memory_spread slab flag\n\tMemorySpreadSlab uint64 `json:\"memory_spread_slab\"`\n\t// memory_pressure\n\tMemoryPressure uint64 `json:\"memory_pressure\"`\n\t// sched_load balance flag\n\tSchedLoadBalance uint64 `json:\"sched_load_balance\"`\n\t// sched_relax_domain_level\n\tSchedRelaxDomainLevel int64 `json:\"sched_relax_domain_level\"`\n}\n\ntype MemoryData struct {\n\tUsage    uint64 `json:\"usage,omitempty\"`\n\tMaxUsage uint64 `json:\"max_usage,omitempty\"`\n\tFailcnt  uint64 `json:\"failcnt\"`\n\tLimit    uint64 `json:\"limit\"`\n}\n\ntype MemoryStats struct {\n\t// memory used for cache\n\tCache uint64 `json:\"cache,omitempty\"`\n\t// usage of memory\n\tUsage MemoryData `json:\"usage,omitempty\"`\n\t// usage of memory + swap\n\tSwapUsage MemoryData `json:\"swap_usage,omitempty\"`\n\t// usage of swap only\n\tSwapOnlyUsage MemoryData `json:\"swap_only_usage,omitempty\"`\n\t// usage of kernel memory\n\tKernelUsage MemoryData `json:\"kernel_usage,omitempty\"`\n\t// usage of kernel TCP memory\n\tKernelTCPUsage MemoryData `json:\"kernel_tcp_usage,omitempty\"`\n\t// usage of memory pages by NUMA node\n\t// see chapter 5.6 of memory controller documentation\n\tPageUsageByNUMA PageUsageByNUMA `json:\"page_usage_by_numa,omitempty\"`\n\t// if true, memory usage is accounted for throughout a hierarchy of cgroups.\n\tUseHierarchy bool `json:\"use_hierarchy\"`\n\n\tStats map[string]uint64 `json:\"stats,omitempty\"`\n\tPSI   *PSIStats         `json:\"psi,omitempty\"`\n}\n\ntype PageUsageByNUMA struct {\n\t// Embedding is used as types can't be recursive.\n\tPageUsageByNUMAInner\n\tHierarchical PageUsageByNUMAInner `json:\"hierarchical,omitempty\"`\n}\n\ntype PageUsageByNUMAInner struct {\n\tTotal       PageStats `json:\"total,omitempty\"`\n\tFile        PageStats `json:\"file,omitempty\"`\n\tAnon        PageStats `json:\"anon,omitempty\"`\n\tUnevictable PageStats `json:\"unevictable,omitempty\"`\n}\n\ntype PageStats struct {\n\tTotal uint64           `json:\"total,omitempty\"`\n\tNodes map[uint8]uint64 `json:\"nodes,omitempty\"`\n}\n\ntype PidsStats struct {\n\t// number of pids in the cgroup\n\tCurrent uint64 `json:\"current,omitempty\"`\n\t// active pids hard limit\n\tLimit uint64 `json:\"limit,omitempty\"`\n}\n\ntype BlkioStatEntry struct {\n\tMajor uint64 `json:\"major,omitempty\"`\n\tMinor uint64 `json:\"minor,omitempty\"`\n\tOp    string `json:\"op,omitempty\"`\n\tValue uint64 `json:\"value,omitempty\"`\n}\n\ntype BlkioStats struct {\n\t// number of bytes transferred to and from the block device\n\tIoServiceBytesRecursive []BlkioStatEntry `json:\"io_service_bytes_recursive,omitempty\"`\n\tIoServicedRecursive     []BlkioStatEntry `json:\"io_serviced_recursive,omitempty\"`\n\tIoQueuedRecursive       []BlkioStatEntry `json:\"io_queue_recursive,omitempty\"`\n\tIoServiceTimeRecursive  []BlkioStatEntry `json:\"io_service_time_recursive,omitempty\"`\n\tIoWaitTimeRecursive     []BlkioStatEntry `json:\"io_wait_time_recursive,omitempty\"`\n\tIoMergedRecursive       []BlkioStatEntry `json:\"io_merged_recursive,omitempty\"`\n\tIoTimeRecursive         []BlkioStatEntry `json:\"io_time_recursive,omitempty\"`\n\tSectorsRecursive        []BlkioStatEntry `json:\"sectors_recursive,omitempty\"`\n\tPSI                     *PSIStats        `json:\"psi,omitempty\"`\n\tIoCostUsage             []BlkioStatEntry `json:\"io_cost_usage,omitempty\"`\n\tIoCostWait              []BlkioStatEntry `json:\"io_cost_wait,omitempty\"`\n\tIoCostIndebt            []BlkioStatEntry `json:\"io_cost_indebt,omitempty\"`\n\tIoCostIndelay           []BlkioStatEntry `json:\"io_cost_indelay,omitempty\"`\n}\n\ntype HugetlbStats struct {\n\t// current res_counter usage for hugetlb\n\tUsage uint64 `json:\"usage,omitempty\"`\n\t// maximum usage ever recorded.\n\tMaxUsage uint64 `json:\"max_usage,omitempty\"`\n\t// number of times hugetlb usage allocation failure.\n\tFailcnt uint64 `json:\"failcnt\"`\n}\n\ntype RdmaEntry struct {\n\tDevice     string `json:\"device,omitempty\"`\n\tHcaHandles uint32 `json:\"hca_handles,omitempty\"`\n\tHcaObjects uint32 `json:\"hca_objects,omitempty\"`\n}\n\ntype RdmaStats struct {\n\tRdmaLimit   []RdmaEntry `json:\"rdma_limit,omitempty\"`\n\tRdmaCurrent []RdmaEntry `json:\"rdma_current,omitempty\"`\n}\n\ntype MiscStats struct {\n\t// current resource usage for a key in misc\n\tUsage uint64 `json:\"usage,omitempty\"`\n\t// number of times the resource usage was about to go over the max boundary\n\tEvents uint64 `json:\"events,omitempty\"`\n}\n\ntype Stats struct {\n\tCpuStats    CpuStats    `json:\"cpu_stats,omitempty\"`\n\tCPUSetStats CPUSetStats `json:\"cpuset_stats,omitempty\"`\n\tMemoryStats MemoryStats `json:\"memory_stats,omitempty\"`\n\tPidsStats   PidsStats   `json:\"pids_stats,omitempty\"`\n\tBlkioStats  BlkioStats  `json:\"blkio_stats,omitempty\"`\n\t// the map is in the format \"size of hugepage: stats of the hugepage\"\n\tHugetlbStats map[string]HugetlbStats `json:\"hugetlb_stats,omitempty\"`\n\tRdmaStats    RdmaStats               `json:\"rdma_stats,omitempty\"`\n\t// the map is in the format \"misc resource name: stats of the key\"\n\tMiscStats map[string]MiscStats `json:\"misc_stats,omitempty\"`\n}\n\nfunc NewStats() *Stats {\n\tmemoryStats := MemoryStats{Stats: make(map[string]uint64)}\n\thugetlbStats := make(map[string]HugetlbStats)\n\tmiscStats := make(map[string]MiscStats)\n\treturn &Stats{MemoryStats: memoryStats, HugetlbStats: hugetlbStats, MiscStats: miscStats}\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/systemd/common.go",
    "content": "package systemd\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"path\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\tsystemdDbus \"github.com/coreos/go-systemd/v22/dbus\"\n\tdbus \"github.com/godbus/dbus/v5\"\n\t\"github.com/sirupsen/logrus\"\n\n\t\"github.com/opencontainers/cgroups\"\n)\n\nconst (\n\t// Default kernel value for cpu quota period is 100000 us (100 ms), same for v1 and v2.\n\t// v1: https://www.kernel.org/doc/html/latest/scheduler/sched-bwc.html and\n\t// v2: https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html\n\tdefCPUQuotaPeriod = uint64(100000)\n)\n\nvar (\n\tversionOnce sync.Once\n\tversion     int\n\n\tisRunningSystemdOnce sync.Once\n\tisRunningSystemd     bool\n\n\t// GenerateDeviceProps is a function to generate systemd device\n\t// properties, used by Set methods. Unless\n\t// [github.com/opencontainers/cgroups/devices]\n\t// package is imported, it is set to nil, so cgroup managers can't\n\t// configure devices.\n\tGenerateDeviceProps func(r *cgroups.Resources, sdVer int) ([]systemdDbus.Property, error)\n)\n\n// NOTE: This function comes from package github.com/coreos/go-systemd/util\n// It was borrowed here to avoid a dependency on cgo.\n//\n// IsRunningSystemd checks whether the host was booted with systemd as its init\n// system. This functions similarly to systemd's `sd_booted(3)`: internally, it\n// checks whether /run/systemd/system/ exists and is a directory.\n// http://www.freedesktop.org/software/systemd/man/sd_booted.html\nfunc IsRunningSystemd() bool {\n\tisRunningSystemdOnce.Do(func() {\n\t\tfi, err := os.Lstat(\"/run/systemd/system\")\n\t\tisRunningSystemd = err == nil && fi.IsDir()\n\t})\n\treturn isRunningSystemd\n}\n\n// systemd represents slice hierarchy using `-`, so we need to follow suit when\n// generating the path of slice. Essentially, test-a-b.slice becomes\n// /test.slice/test-a.slice/test-a-b.slice.\nfunc ExpandSlice(slice string) (string, error) {\n\tsuffix := \".slice\"\n\t// Name has to end with \".slice\", but can't be just \".slice\".\n\tif len(slice) < len(suffix) || !strings.HasSuffix(slice, suffix) {\n\t\treturn \"\", fmt.Errorf(\"invalid slice name: %s\", slice)\n\t}\n\n\t// Path-separators are not allowed.\n\tif strings.Contains(slice, \"/\") {\n\t\treturn \"\", fmt.Errorf(\"invalid slice name: %s\", slice)\n\t}\n\n\tvar path, prefix string\n\tsliceName := strings.TrimSuffix(slice, suffix)\n\t// if input was -.slice, we should just return root now\n\tif sliceName == \"-\" {\n\t\treturn \"/\", nil\n\t}\n\tfor _, component := range strings.Split(sliceName, \"-\") {\n\t\t// test--a.slice isn't permitted, nor is -test.slice.\n\t\tif component == \"\" {\n\t\t\treturn \"\", fmt.Errorf(\"invalid slice name: %s\", slice)\n\t\t}\n\n\t\t// Append the component to the path and to the prefix.\n\t\tpath += \"/\" + prefix + component + suffix\n\t\tprefix += component + \"-\"\n\t}\n\treturn path, nil\n}\n\nfunc newProp(name string, units any) systemdDbus.Property {\n\treturn systemdDbus.Property{\n\t\tName:  name,\n\t\tValue: dbus.MakeVariant(units),\n\t}\n}\n\nfunc getUnitName(c *cgroups.Cgroup) string {\n\t// by default, we create a scope unless the user explicitly asks for a slice.\n\tif !strings.HasSuffix(c.Name, \".slice\") {\n\t\treturn c.ScopePrefix + \"-\" + c.Name + \".scope\"\n\t}\n\treturn c.Name\n}\n\n// This code should be in sync with getUnitName.\nfunc getUnitType(unitName string) string {\n\tif strings.HasSuffix(unitName, \".slice\") {\n\t\treturn \"Slice\"\n\t}\n\treturn \"Scope\"\n}\n\n// isDbusError returns true if the error is a specific dbus error.\nfunc isDbusError(err error, name string) bool {\n\tif err != nil {\n\t\tvar derr dbus.Error\n\t\tif errors.As(err, &derr) {\n\t\t\treturn strings.Contains(derr.Name, name)\n\t\t}\n\t}\n\treturn false\n}\n\n// isUnitExists returns true if the error is that a systemd unit already exists.\nfunc isUnitExists(err error) bool {\n\treturn isDbusError(err, \"org.freedesktop.systemd1.UnitExists\")\n}\n\nfunc startUnit(cm *dbusConnManager, unitName string, properties []systemdDbus.Property, ignoreExist bool) error {\n\tstatusChan := make(chan string, 1)\n\tretry := true\n\nretry:\n\terr := cm.retryOnDisconnect(func(c *systemdDbus.Conn) error {\n\t\t_, err := c.StartTransientUnitContext(context.TODO(), unitName, \"replace\", properties, statusChan)\n\t\treturn err\n\t})\n\tif err != nil {\n\t\tif !isUnitExists(err) {\n\t\t\treturn err\n\t\t}\n\t\tif ignoreExist {\n\t\t\t// TODO: remove this hack.\n\t\t\t// This is kubelet making sure a slice exists (see\n\t\t\t// https://github.com/opencontainers/runc/pull/1124).\n\t\t\treturn nil\n\t\t}\n\t\tif retry {\n\t\t\t// In case a unit with the same name exists, this may\n\t\t\t// be a leftover failed unit. Reset it, so systemd can\n\t\t\t// remove it, and retry once.\n\t\t\terr = resetFailedUnit(cm, unitName)\n\t\t\tif err != nil {\n\t\t\t\tlogrus.Warnf(\"unable to reset failed unit: %v\", err)\n\t\t\t}\n\t\t\tretry = false\n\t\t\tgoto retry\n\t\t}\n\t\treturn err\n\t}\n\n\ttimeout := time.NewTimer(30 * time.Second)\n\tdefer timeout.Stop()\n\n\tselect {\n\tcase s := <-statusChan:\n\t\tclose(statusChan)\n\t\t// Please refer to https://pkg.go.dev/github.com/coreos/go-systemd/v22/dbus#Conn.StartUnit\n\t\tif s != \"done\" {\n\t\t\t_ = resetFailedUnit(cm, unitName)\n\t\t\treturn fmt.Errorf(\"error creating systemd unit `%s`: got `%s`\", unitName, s)\n\t\t}\n\tcase <-timeout.C:\n\t\t_ = resetFailedUnit(cm, unitName)\n\t\treturn errors.New(\"Timeout waiting for systemd to create \" + unitName)\n\t}\n\n\treturn nil\n}\n\nfunc stopUnit(cm *dbusConnManager, unitName string) error {\n\tstatusChan := make(chan string, 1)\n\terr := cm.retryOnDisconnect(func(c *systemdDbus.Conn) error {\n\t\t_, err := c.StopUnitContext(context.TODO(), unitName, \"replace\", statusChan)\n\t\treturn err\n\t})\n\tif err == nil {\n\t\ttimeout := time.NewTimer(30 * time.Second)\n\t\tdefer timeout.Stop()\n\n\t\tselect {\n\t\tcase s := <-statusChan:\n\t\t\tclose(statusChan)\n\t\t\t// Please refer to https://godoc.org/github.com/coreos/go-systemd/v22/dbus#Conn.StartUnit\n\t\t\tif s != \"done\" {\n\t\t\t\tlogrus.Warnf(\"error removing unit `%s`: got `%s`. Continuing...\", unitName, s)\n\t\t\t}\n\t\tcase <-timeout.C:\n\t\t\treturn errors.New(\"Timed out while waiting for systemd to remove \" + unitName)\n\t\t}\n\t}\n\n\t// In case of a failed unit, let systemd remove it.\n\t_ = resetFailedUnit(cm, unitName)\n\n\treturn nil\n}\n\nfunc addPid(cm *dbusConnManager, unitName, subcgroup string, pid int) error {\n\tabsSubcgroup := subcgroup\n\tif !path.IsAbs(absSubcgroup) {\n\t\tabsSubcgroup = \"/\" + subcgroup\n\t}\n\tif absSubcgroup != path.Clean(absSubcgroup) {\n\t\treturn fmt.Errorf(\"bad sub cgroup path: %s\", subcgroup)\n\t}\n\n\treturn cm.retryOnDisconnect(func(c *systemdDbus.Conn) error {\n\t\treturn c.AttachProcessesToUnit(context.TODO(), unitName, absSubcgroup, []uint32{uint32(pid)})\n\t})\n}\n\nfunc resetFailedUnit(cm *dbusConnManager, name string) error {\n\treturn cm.retryOnDisconnect(func(c *systemdDbus.Conn) error {\n\t\treturn c.ResetFailedUnitContext(context.TODO(), name)\n\t})\n}\n\nfunc getUnitTypeProperty(cm *dbusConnManager, unitName string, unitType string, propertyName string) (*systemdDbus.Property, error) {\n\tvar prop *systemdDbus.Property\n\terr := cm.retryOnDisconnect(func(c *systemdDbus.Conn) (Err error) {\n\t\tprop, Err = c.GetUnitTypePropertyContext(context.TODO(), unitName, unitType, propertyName)\n\t\treturn Err\n\t})\n\treturn prop, err\n}\n\nfunc setUnitProperties(cm *dbusConnManager, name string, properties ...systemdDbus.Property) error {\n\treturn cm.retryOnDisconnect(func(c *systemdDbus.Conn) error {\n\t\treturn c.SetUnitPropertiesContext(context.TODO(), name, true, properties...)\n\t})\n}\n\nfunc getManagerProperty(cm *dbusConnManager, name string) (string, error) {\n\tstr := \"\"\n\terr := cm.retryOnDisconnect(func(c *systemdDbus.Conn) error {\n\t\tvar err error\n\t\tstr, err = c.GetManagerProperty(name)\n\t\treturn err\n\t})\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn strconv.Unquote(str)\n}\n\nfunc systemdVersion(cm *dbusConnManager) int {\n\tversionOnce.Do(func() {\n\t\tversion = -1\n\t\tverStr, err := getManagerProperty(cm, \"Version\")\n\t\tif err == nil {\n\t\t\tversion, err = systemdVersionAtoi(verStr)\n\t\t}\n\n\t\tif err != nil {\n\t\t\tlogrus.WithError(err).Error(\"unable to get systemd version\")\n\t\t}\n\t})\n\n\treturn version\n}\n\n// systemdVersionAtoi extracts a numeric systemd version from the argument.\n// The argument should be of the form: \"v245.4-1.fc32\", \"245\", \"v245-1.fc32\",\n// \"245-1.fc32\" (with or without quotes). The result for all of the above\n// should be 245.\nfunc systemdVersionAtoi(str string) (int, error) {\n\t// Unconditionally remove the leading prefix (\"v).\n\tstr = strings.TrimLeft(str, `\"v`)\n\t// Match on the first integer we can grab.\n\tfor i := range len(str) {\n\t\tif str[i] < '0' || str[i] > '9' {\n\t\t\t// First non-digit: cut the tail.\n\t\t\tstr = str[:i]\n\t\t\tbreak\n\t\t}\n\t}\n\tver, err := strconv.Atoi(str)\n\tif err != nil {\n\t\treturn -1, fmt.Errorf(\"can't parse version: %w\", err)\n\t}\n\treturn ver, nil\n}\n\n// addCPUQuota adds CPUQuotaPeriodUSec and CPUQuotaPerSecUSec to the properties. The passed quota may be modified\n// along with round-up during calculation in order to write the same value to cgroupfs later.\nfunc addCPUQuota(cm *dbusConnManager, properties *[]systemdDbus.Property, quota *int64, period uint64) {\n\tif period != 0 {\n\t\t// systemd only supports CPUQuotaPeriodUSec since v242\n\t\tsdVer := systemdVersion(cm)\n\t\tif sdVer >= 242 {\n\t\t\t*properties = append(*properties,\n\t\t\t\tnewProp(\"CPUQuotaPeriodUSec\", period))\n\t\t} else {\n\t\t\tlogrus.Debugf(\"systemd v%d is too old to support CPUQuotaPeriodSec \"+\n\t\t\t\t\" (setting will still be applied to cgroupfs)\", sdVer)\n\t\t}\n\t}\n\tif *quota != 0 || period != 0 {\n\t\t// corresponds to USEC_INFINITY in systemd\n\t\tcpuQuotaPerSecUSec := uint64(math.MaxUint64)\n\t\tif *quota > 0 {\n\t\t\tif period == 0 {\n\t\t\t\t// assume the default\n\t\t\t\tperiod = defCPUQuotaPeriod\n\t\t\t}\n\t\t\t// systemd converts CPUQuotaPerSecUSec (microseconds per CPU second) to CPUQuota\n\t\t\t// (integer percentage of CPU) internally.  This means that if a fractional percent of\n\t\t\t// CPU is indicated by Resources.CpuQuota, we need to round up to the nearest\n\t\t\t// 10ms (1% of a second) such that child cgroups can set the cpu.cfs_quota_us they expect.\n\t\t\tcpuQuotaPerSecUSec = uint64(*quota*1000000) / period\n\t\t\tif cpuQuotaPerSecUSec%10000 != 0 {\n\t\t\t\tcpuQuotaPerSecUSec = ((cpuQuotaPerSecUSec / 10000) + 1) * 10000\n\t\t\t\t// Update the requested quota along with the round-up in order to write the same value to cgroupfs.\n\t\t\t\t*quota = int64(cpuQuotaPerSecUSec) * int64(period) / 1000000\n\t\t\t}\n\t\t}\n\t\t*properties = append(*properties,\n\t\t\tnewProp(\"CPUQuotaPerSecUSec\", cpuQuotaPerSecUSec))\n\t}\n}\n\nfunc addCpuset(cm *dbusConnManager, props *[]systemdDbus.Property, cpus, mems string) error {\n\tif cpus == \"\" && mems == \"\" {\n\t\treturn nil\n\t}\n\n\t// systemd only supports AllowedCPUs/AllowedMemoryNodes since v244\n\tsdVer := systemdVersion(cm)\n\tif sdVer < 244 {\n\t\tlogrus.Debugf(\"systemd v%d is too old to support AllowedCPUs/AllowedMemoryNodes\"+\n\t\t\t\" (settings will still be applied to cgroupfs)\", sdVer)\n\t\treturn nil\n\t}\n\n\tif cpus != \"\" {\n\t\tbits, err := RangeToBits(cpus)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"resources.CPU.Cpus=%q conversion error: %w\",\n\t\t\t\tcpus, err)\n\t\t}\n\t\t*props = append(*props,\n\t\t\tnewProp(\"AllowedCPUs\", bits))\n\t}\n\tif mems != \"\" {\n\t\tbits, err := RangeToBits(mems)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"resources.CPU.Mems=%q conversion error: %w\",\n\t\t\t\tmems, err)\n\t\t}\n\t\t*props = append(*props,\n\t\t\tnewProp(\"AllowedMemoryNodes\", bits))\n\t}\n\treturn nil\n}\n\n// generateDeviceProperties takes the configured device rules and generates a\n// corresponding set of systemd properties to configure the devices correctly.\nfunc generateDeviceProperties(r *cgroups.Resources, cm *dbusConnManager) ([]systemdDbus.Property, error) {\n\tif GenerateDeviceProps == nil {\n\t\tif len(r.Devices) > 0 {\n\t\t\treturn nil, cgroups.ErrDevicesUnsupported\n\t\t}\n\t\treturn nil, nil\n\t}\n\n\treturn GenerateDeviceProps(r, systemdVersion(cm))\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/systemd/cpuset.go",
    "content": "package systemd\n\nimport (\n\t\"errors\"\n\t\"math/big\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// RangeToBits converts a text representation of a CPU mask (as written to\n// or read from cgroups' cpuset.* files, e.g. \"1,3-5\") to a slice of bytes\n// with the corresponding bits set (as consumed by systemd over dbus as\n// AllowedCPUs/AllowedMemoryNodes unit property value).\nfunc RangeToBits(str string) ([]byte, error) {\n\tbits := new(big.Int)\n\n\tfor _, r := range strings.Split(str, \",\") {\n\t\t// allow extra spaces around\n\t\tr = strings.TrimSpace(r)\n\t\t// allow empty elements (extra commas)\n\t\tif r == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tstartr, endr, ok := strings.Cut(r, \"-\")\n\t\tif ok {\n\t\t\tstart, err := strconv.ParseUint(startr, 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tend, err := strconv.ParseUint(endr, 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tif start > end {\n\t\t\t\treturn nil, errors.New(\"invalid range: \" + r)\n\t\t\t}\n\t\t\tfor i := start; i <= end; i++ {\n\t\t\t\tbits.SetBit(bits, int(i), 1)\n\t\t\t}\n\t\t} else {\n\t\t\tval, err := strconv.ParseUint(startr, 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tbits.SetBit(bits, int(val), 1)\n\t\t}\n\t}\n\n\tret := bits.Bytes()\n\tif len(ret) == 0 {\n\t\t// do not allow empty values\n\t\treturn nil, errors.New(\"empty value\")\n\t}\n\n\t// fit cpuset parsing order in systemd\n\tfor l, r := 0, len(ret)-1; l < r; l, r = l+1, r-1 {\n\t\tret[l], ret[r] = ret[r], ret[l]\n\t}\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/systemd/dbus.go",
    "content": "package systemd\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math/rand/v2\"\n\t\"sync\"\n\t\"time\"\n\n\tsystemdDbus \"github.com/coreos/go-systemd/v22/dbus\"\n\tdbus \"github.com/godbus/dbus/v5\"\n\t\"golang.org/x/sys/unix\"\n)\n\nvar (\n\tdbusC        *systemdDbus.Conn\n\tdbusMu       sync.RWMutex\n\tdbusInited   bool\n\tdbusRootless bool\n)\n\ntype dbusConnManager struct{}\n\n// newDbusConnManager initializes systemd dbus connection manager.\nfunc newDbusConnManager(rootless bool) *dbusConnManager {\n\tdbusMu.Lock()\n\tdefer dbusMu.Unlock()\n\tif dbusInited && rootless != dbusRootless {\n\t\tpanic(\"can't have both root and rootless dbus\")\n\t}\n\tdbusInited = true\n\tdbusRootless = rootless\n\treturn &dbusConnManager{}\n}\n\n// getConnection lazily initializes and returns systemd dbus connection.\nfunc (d *dbusConnManager) getConnection() (*systemdDbus.Conn, error) {\n\t// In the case where dbusC != nil\n\t// Use the read lock the first time to ensure\n\t// that Conn can be acquired at the same time.\n\tdbusMu.RLock()\n\tif conn := dbusC; conn != nil {\n\t\tdbusMu.RUnlock()\n\t\treturn conn, nil\n\t}\n\tdbusMu.RUnlock()\n\n\t// In the case where dbusC == nil\n\t// Use write lock to ensure that only one\n\t// will be created\n\tdbusMu.Lock()\n\tdefer dbusMu.Unlock()\n\tif conn := dbusC; conn != nil {\n\t\treturn conn, nil\n\t}\n\n\tconn, err := d.newConnection()\n\tif err != nil {\n\t\t// When dbus-user-session is not installed, we can't detect whether we should try to connect to user dbus or system dbus, so d.dbusRootless is set to false.\n\t\t// This may fail with a cryptic error \"read unix @->/run/systemd/private: read: connection reset by peer: unknown.\"\n\t\t// https://github.com/moby/moby/issues/42793\n\t\treturn nil, fmt.Errorf(\"failed to connect to dbus (hint: for rootless containers, maybe you need to install dbus-user-session package, see https://github.com/opencontainers/runc/blob/master/docs/cgroup-v2.md): %w\", err)\n\t}\n\tdbusC = conn\n\treturn conn, nil\n}\n\nfunc (d *dbusConnManager) newConnection() (*systemdDbus.Conn, error) {\n\tnewDbusConn := func() (*systemdDbus.Conn, error) {\n\t\tif dbusRootless {\n\t\t\treturn newUserSystemdDbus()\n\t\t}\n\t\treturn systemdDbus.NewWithContext(context.TODO())\n\t}\n\n\tvar err error\n\tfor retry := range 7 {\n\t\tvar conn *systemdDbus.Conn\n\t\tconn, err = newDbusConn()\n\t\tif !errors.Is(err, unix.EAGAIN) {\n\t\t\treturn conn, err\n\t\t}\n\t\t// Exponential backoff (100ms * 2^attempt + ~12.5% jitter).\n\t\t// At most we would expect 15 seconds of delay with 7 attempts.\n\t\tdelay := 100 * time.Millisecond << retry\n\t\tdelay += time.Duration(rand.Int64N(1 + (delay.Milliseconds() >> 3)))\n\t\ttime.Sleep(delay)\n\t}\n\treturn nil, fmt.Errorf(\"dbus connection failed after several retries: %w\", err)\n}\n\n// resetConnection resets the connection to its initial state\n// (so it can be reconnected if necessary).\nfunc (d *dbusConnManager) resetConnection(conn *systemdDbus.Conn) {\n\tdbusMu.Lock()\n\tdefer dbusMu.Unlock()\n\tif dbusC != nil && dbusC == conn {\n\t\tdbusC.Close()\n\t\tdbusC = nil\n\t}\n}\n\n// retryOnDisconnect calls op, and if the error it returns is about closed dbus\n// connection, the connection is re-established and the op is retried. This helps\n// with the situation when dbus is restarted and we have a stale connection.\nfunc (d *dbusConnManager) retryOnDisconnect(op func(*systemdDbus.Conn) error) error {\n\tfor {\n\t\tconn, err := d.getConnection()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = op(conn)\n\t\tif err == nil {\n\t\t\treturn nil\n\t\t}\n\t\tif !errors.Is(err, dbus.ErrClosed) {\n\t\t\treturn err\n\t\t}\n\t\td.resetConnection(conn)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/systemd/devices.go",
    "content": "package systemd\n\nimport (\n\t\"reflect\"\n\n\tdbus \"github.com/godbus/dbus/v5\"\n\n\t\"github.com/opencontainers/cgroups\"\n)\n\n// freezeBeforeSet answers whether there is a need to freeze the cgroup before\n// applying its systemd unit properties, and thaw after, while avoiding\n// unnecessary freezer state changes.\n//\n// The reason why we have to freeze is that systemd's application of device\n// rules is done disruptively, resulting in spurious errors to common devices\n// (unlike our fs driver, they will happily write deny-all rules to running\n// containers). So we have to freeze the container to avoid the container get\n// an occasional \"permission denied\" error.\nfunc (m *LegacyManager) freezeBeforeSet(unitName string, r *cgroups.Resources) (needsFreeze, needsThaw bool, err error) {\n\t// Special case for SkipDevices, as used by Kubernetes to create pod\n\t// cgroups with allow-all device policy).\n\tif r.SkipDevices {\n\t\tif r.SkipFreezeOnSet {\n\t\t\t// Both needsFreeze and needsThaw are false.\n\t\t\treturn\n\t\t}\n\n\t\t// No need to freeze if SkipDevices is set, and either\n\t\t// (1) systemd unit does not (yet) exist, or\n\t\t// (2) it has DevicePolicy=auto and empty DeviceAllow list.\n\t\t//\n\t\t// Interestingly, (1) and (2) are the same here because\n\t\t// a non-existent unit returns default properties,\n\t\t// and settings in (2) are the defaults.\n\t\t//\n\t\t// Do not return errors from getUnitTypeProperty, as they alone\n\t\t// should not prevent Set from working.\n\n\t\tunitType := getUnitType(unitName)\n\n\t\tdevPolicy, e := getUnitTypeProperty(m.dbus, unitName, unitType, \"DevicePolicy\")\n\t\tif e == nil && devPolicy.Value == dbus.MakeVariant(\"auto\") {\n\t\t\tdevAllow, e := getUnitTypeProperty(m.dbus, unitName, unitType, \"DeviceAllow\")\n\t\t\tif e == nil {\n\t\t\t\tif rv := reflect.ValueOf(devAllow.Value.Value()); rv.Kind() == reflect.Slice && rv.Len() == 0 {\n\t\t\t\t\tneedsFreeze = false\n\t\t\t\t\tneedsThaw = false\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tneedsFreeze = true\n\tneedsThaw = true\n\n\t// Check the current freezer state.\n\tfreezerState, err := m.GetFreezerState()\n\tif err != nil {\n\t\treturn\n\t}\n\tif freezerState == cgroups.Frozen {\n\t\t// Already frozen, and should stay frozen.\n\t\tneedsFreeze = false\n\t\tneedsThaw = false\n\t}\n\n\tif r.Freezer == cgroups.Frozen {\n\t\t// Will be frozen anyway -- no need to thaw.\n\t\tneedsThaw = false\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/systemd/user.go",
    "content": "package systemd\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\n\tsystemdDbus \"github.com/coreos/go-systemd/v22/dbus\"\n\tdbus \"github.com/godbus/dbus/v5\"\n\t\"github.com/moby/sys/userns\"\n)\n\n// newUserSystemdDbus creates a connection for systemd user-instance.\nfunc newUserSystemdDbus() (*systemdDbus.Conn, error) {\n\taddr, err := DetectUserDbusSessionBusAddress()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tuid, err := DetectUID()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn systemdDbus.NewConnection(func() (*dbus.Conn, error) {\n\t\tconn, err := dbus.Dial(addr)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error while dialing %q: %w\", addr, err)\n\t\t}\n\t\tmethods := []dbus.Auth{dbus.AuthExternal(strconv.Itoa(uid))}\n\t\terr = conn.Auth(methods)\n\t\tif err != nil {\n\t\t\tconn.Close()\n\t\t\treturn nil, fmt.Errorf(\"error while authenticating connection (address=%q, UID=%d): %w\", addr, uid, err)\n\t\t}\n\t\tif err = conn.Hello(); err != nil {\n\t\t\tconn.Close()\n\t\t\treturn nil, fmt.Errorf(\"error while sending Hello message (address=%q, UID=%d): %w\", addr, uid, err)\n\t\t}\n\t\treturn conn, nil\n\t})\n}\n\n// DetectUID detects UID from the OwnerUID field of `busctl --user status`\n// if running in userNS. The value corresponds to sd_bus_creds_get_owner_uid(3) .\n//\n// Otherwise returns os.Getuid() .\nfunc DetectUID() (int, error) {\n\tif !userns.RunningInUserNS() {\n\t\treturn os.Getuid(), nil\n\t}\n\tb, err := exec.Command(\"busctl\", \"--user\", \"--no-pager\", \"status\").CombinedOutput()\n\tif err != nil {\n\t\treturn -1, fmt.Errorf(\"could not execute `busctl --user --no-pager status` (output: %q): %w\", string(b), err)\n\t}\n\tscanner := bufio.NewScanner(bytes.NewReader(b))\n\tfor scanner.Scan() {\n\t\ts := strings.TrimSpace(scanner.Text())\n\t\tif uidStr, ok := strings.CutPrefix(s, \"OwnerUID=\"); ok {\n\t\t\ti, err := strconv.Atoi(uidStr)\n\t\t\tif err != nil {\n\t\t\t\treturn -1, fmt.Errorf(\"could not detect the OwnerUID: %w\", err)\n\t\t\t}\n\t\t\treturn i, nil\n\t\t}\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn -1, err\n\t}\n\treturn -1, errors.New(\"could not detect the OwnerUID\")\n}\n\n// DetectUserDbusSessionBusAddress returns $DBUS_SESSION_BUS_ADDRESS, if set.\n// Otherwise it returns \"unix:path=$XDG_RUNTIME_DIR/bus\", if $XDG_RUNTIME_DIR/bus exists.\nfunc DetectUserDbusSessionBusAddress() (string, error) {\n\tif env := os.Getenv(\"DBUS_SESSION_BUS_ADDRESS\"); env != \"\" {\n\t\treturn env, nil\n\t}\n\tif xdr := os.Getenv(\"XDG_RUNTIME_DIR\"); xdr != \"\" {\n\t\tbusPath := filepath.Join(xdr, \"bus\")\n\t\tif _, err := os.Stat(busPath); err == nil {\n\t\t\tbusAddress := \"unix:path=\" + dbus.EscapeBusAddressValue(busPath)\n\t\t\treturn busAddress, nil\n\t\t}\n\t}\n\treturn \"\", errors.New(\"could not detect DBUS_SESSION_BUS_ADDRESS from the environment; make sure you have installed the dbus-user-session or dbus-daemon package; note you may need to re-login\")\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/systemd/v1.go",
    "content": "package systemd\n\nimport (\n\t\"errors\"\n\t\"math\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"sync\"\n\n\tsystemdDbus \"github.com/coreos/go-systemd/v22/dbus\"\n\t\"github.com/sirupsen/logrus\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fs\"\n)\n\ntype LegacyManager struct {\n\tmu      sync.Mutex\n\tcgroups *cgroups.Cgroup\n\tpaths   map[string]string\n\tdbus    *dbusConnManager\n}\n\nfunc NewLegacyManager(cg *cgroups.Cgroup, paths map[string]string) (*LegacyManager, error) {\n\tif cg.Rootless {\n\t\treturn nil, errors.New(\"cannot use rootless systemd cgroups manager on cgroup v1\")\n\t}\n\tif cg.Resources != nil && cg.Resources.Unified != nil {\n\t\treturn nil, cgroups.ErrV1NoUnified\n\t}\n\tif paths == nil {\n\t\tvar err error\n\t\tpaths, err = initPaths(cg)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn &LegacyManager{\n\t\tcgroups: cg,\n\t\tpaths:   paths,\n\t\tdbus:    newDbusConnManager(false),\n\t}, nil\n}\n\ntype subsystem interface {\n\t// Name returns the name of the subsystem.\n\tName() string\n\t// GetStats returns the stats, as 'stats', corresponding to the cgroup under 'path'.\n\tGetStats(path string, stats *cgroups.Stats) error\n\t// Set sets cgroup resource limits.\n\tSet(path string, r *cgroups.Resources) error\n}\n\nvar errSubsystemDoesNotExist = errors.New(\"cgroup: subsystem does not exist\")\n\nvar legacySubsystems = []subsystem{\n\t&fs.CpusetGroup{},\n\t&fs.DevicesGroup{},\n\t&fs.MemoryGroup{},\n\t&fs.CpuGroup{},\n\t&fs.CpuacctGroup{},\n\t&fs.PidsGroup{},\n\t&fs.BlkioGroup{},\n\t&fs.HugetlbGroup{},\n\t&fs.PerfEventGroup{},\n\t&fs.FreezerGroup{},\n\t&fs.NetPrioGroup{},\n\t&fs.NetClsGroup{},\n\t&fs.NameGroup{GroupName: \"name=systemd\"},\n\t&fs.RdmaGroup{},\n\t&fs.NameGroup{GroupName: \"misc\"},\n}\n\nfunc genV1ResourcesProperties(r *cgroups.Resources, cm *dbusConnManager) ([]systemdDbus.Property, error) {\n\tvar properties []systemdDbus.Property\n\n\tdeviceProperties, err := generateDeviceProperties(r, cm)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tproperties = append(properties, deviceProperties...)\n\n\tif r.Memory != 0 {\n\t\tproperties = append(properties,\n\t\t\tnewProp(\"MemoryLimit\", uint64(r.Memory)))\n\t}\n\n\tif r.CpuShares != 0 {\n\t\tproperties = append(properties,\n\t\t\tnewProp(\"CPUShares\", r.CpuShares))\n\t}\n\n\taddCPUQuota(cm, &properties, &r.CpuQuota, r.CpuPeriod)\n\n\tif r.BlkioWeight != 0 {\n\t\tproperties = append(properties,\n\t\t\tnewProp(\"BlockIOWeight\", uint64(r.BlkioWeight)))\n\t}\n\n\tif r.PidsLimit != nil {\n\t\tvar tasksMax uint64\n\t\tif limit := *r.PidsLimit; limit < 0 {\n\t\t\ttasksMax = math.MaxUint64 // \"infinity\"\n\t\t} else if limit == 0 {\n\t\t\ttasksMax = 1 // systemd does not accept \"0\" for TasksMax\n\t\t} else {\n\t\t\ttasksMax = uint64(limit)\n\t\t}\n\t\tproperties = append(properties,\n\t\t\tnewProp(\"TasksMax\", tasksMax))\n\t}\n\n\terr = addCpuset(cm, &properties, r.CpusetCpus, r.CpusetMems)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn properties, nil\n}\n\n// initPaths figures out and returns paths to cgroups.\nfunc initPaths(c *cgroups.Cgroup) (map[string]string, error) {\n\tslice := \"system.slice\"\n\tif c.Parent != \"\" {\n\t\tvar err error\n\t\tslice, err = ExpandSlice(c.Parent)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tunit := getUnitName(c)\n\n\tpaths := make(map[string]string)\n\tfor _, s := range legacySubsystems {\n\t\tsubsystemPath, err := getSubsystemPath(slice, unit, s.Name())\n\t\tif err != nil {\n\t\t\t// Even if it's `not found` error, we'll return err\n\t\t\t// because devices cgroup is hard requirement for\n\t\t\t// container security.\n\t\t\tif s.Name() == \"devices\" {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t// Don't fail if a cgroup hierarchy was not found, just skip this subsystem\n\t\t\tif cgroups.IsNotFound(err) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\t\tpaths[s.Name()] = subsystemPath\n\t}\n\n\t// If systemd is using cgroups-hybrid mode then add the slice path of\n\t// this container to the paths so the following process executed with\n\t// \"runc exec\" joins that cgroup as well.\n\tif cgroups.IsCgroup2HybridMode() {\n\t\t// \"\" means cgroup-hybrid path\n\t\tcgroupsHybridPath, err := getSubsystemPath(slice, unit, \"\")\n\t\tif err != nil && cgroups.IsNotFound(err) {\n\t\t\treturn nil, err\n\t\t}\n\t\tpaths[\"\"] = cgroupsHybridPath\n\t}\n\n\treturn paths, nil\n}\n\nfunc (m *LegacyManager) Apply(pid int) error {\n\tvar (\n\t\tc          = m.cgroups\n\t\tunitName   = getUnitName(c)\n\t\tslice      = \"system.slice\"\n\t\tproperties []systemdDbus.Property\n\t)\n\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\n\tif c.Parent != \"\" {\n\t\tslice = c.Parent\n\t}\n\n\tproperties = append(properties, systemdDbus.PropDescription(\"libcontainer container \"+c.Name))\n\n\tif strings.HasSuffix(unitName, \".slice\") {\n\t\t// If we create a slice, the parent is defined via a Wants=.\n\t\tproperties = append(properties, systemdDbus.PropWants(slice))\n\t} else {\n\t\t// Otherwise it's a scope, which we put into a Slice=.\n\t\tproperties = append(properties, systemdDbus.PropSlice(slice))\n\t\t// Assume scopes always support delegation (supported since systemd v218).\n\t\tproperties = append(properties, newProp(\"Delegate\", true))\n\t}\n\n\t// only add pid if its valid, -1 is used w/ general slice creation.\n\tif pid != -1 {\n\t\tproperties = append(properties, newProp(\"PIDs\", []uint32{uint32(pid)}))\n\t}\n\n\t// Always enable accounting, this gets us the same behaviour as the fs implementation,\n\t// plus the kernel has some problems with joining the memory cgroup at a later time.\n\tproperties = append(properties,\n\t\tnewProp(\"MemoryAccounting\", true),\n\t\tnewProp(\"CPUAccounting\", true),\n\t\tnewProp(\"BlockIOAccounting\", true),\n\t\tnewProp(\"TasksAccounting\", true),\n\t)\n\n\t// Assume DefaultDependencies= will always work (the check for it was previously broken.)\n\tproperties = append(properties,\n\t\tnewProp(\"DefaultDependencies\", false))\n\n\tproperties = append(properties, c.SystemdProps...)\n\n\tif err := startUnit(m.dbus, unitName, properties, pid == -1); err != nil {\n\t\treturn err\n\t}\n\n\tif err := m.joinCgroups(pid); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// AddPid adds a process with a given pid to an existing cgroup.\n// The subcgroup argument is either empty, or a path relative to\n// a cgroup under under the manager's cgroup.\nfunc (m *LegacyManager) AddPid(subcgroup string, pid int) error {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\n\tif err := addPid(m.dbus, getUnitName(m.cgroups), subcgroup, pid); err != nil {\n\t\treturn err\n\t}\n\n\t// Since systemd only joins controllers it knows, use cgroupfs for the rest.\n\tfsMgr, err := fs.NewManager(m.cgroups, m.paths)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn fsMgr.AddPid(subcgroup, pid)\n}\n\nfunc (m *LegacyManager) Destroy() error {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\n\tstopErr := stopUnit(m.dbus, getUnitName(m.cgroups))\n\n\t// Both on success and on error, cleanup all the cgroups\n\t// we are aware of, as some of them were created directly\n\t// by Apply() and are not managed by systemd.\n\tif err := cgroups.RemovePaths(m.paths); err != nil && stopErr == nil {\n\t\treturn err\n\t}\n\n\treturn stopErr\n}\n\nfunc (m *LegacyManager) Path(subsys string) string {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\treturn m.paths[subsys]\n}\n\nfunc (m *LegacyManager) joinCgroups(pid int) error {\n\tfor _, sys := range legacySubsystems {\n\t\tname := sys.Name()\n\t\tswitch name {\n\t\tcase \"name=systemd\":\n\t\t\t// let systemd handle this\n\t\tcase \"cpuset\":\n\t\t\tif path, ok := m.paths[name]; ok {\n\t\t\t\ts := &fs.CpusetGroup{}\n\t\t\t\tif err := s.ApplyDir(path, m.cgroups.Resources, pid); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tif path, ok := m.paths[name]; ok {\n\t\t\t\tif err := os.MkdirAll(path, 0o755); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := cgroups.WriteCgroupProc(path, pid); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc getSubsystemPath(slice, unit, subsystem string) (string, error) {\n\tmountpoint, err := cgroups.FindCgroupMountpoint(\"\", subsystem)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn filepath.Join(mountpoint, slice, unit), nil\n}\n\nfunc (m *LegacyManager) Freeze(state cgroups.FreezerState) error {\n\terr := m.doFreeze(state)\n\tif err == nil {\n\t\tm.cgroups.Resources.Freezer = state\n\t}\n\treturn err\n}\n\n// doFreeze is the same as Freeze but without\n// changing the m.cgroups.Resources.Frozen field.\nfunc (m *LegacyManager) doFreeze(state cgroups.FreezerState) error {\n\tpath, ok := m.paths[\"freezer\"]\n\tif !ok {\n\t\treturn errSubsystemDoesNotExist\n\t}\n\tfreezer := &fs.FreezerGroup{}\n\tresources := &cgroups.Resources{Freezer: state}\n\treturn freezer.Set(path, resources)\n}\n\nfunc (m *LegacyManager) GetPids() ([]int, error) {\n\tpath, ok := m.paths[\"devices\"]\n\tif !ok {\n\t\treturn nil, errSubsystemDoesNotExist\n\t}\n\treturn cgroups.GetPids(path)\n}\n\nfunc (m *LegacyManager) GetAllPids() ([]int, error) {\n\tpath, ok := m.paths[\"devices\"]\n\tif !ok {\n\t\treturn nil, errSubsystemDoesNotExist\n\t}\n\treturn cgroups.GetAllPids(path)\n}\n\nfunc (m *LegacyManager) GetStats() (*cgroups.Stats, error) {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\tstats := cgroups.NewStats()\n\tfor _, sys := range legacySubsystems {\n\t\tpath := m.paths[sys.Name()]\n\t\tif path == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif err := sys.GetStats(path, stats); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn stats, nil\n}\n\nfunc (m *LegacyManager) Set(r *cgroups.Resources) error {\n\tif r == nil {\n\t\treturn nil\n\t}\n\tif r.Unified != nil {\n\t\treturn cgroups.ErrV1NoUnified\n\t}\n\t// Use a copy since CpuQuota in r may be modified.\n\trCopy := *r\n\tr = &rCopy\n\tproperties, err := genV1ResourcesProperties(r, m.dbus)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tunitName := getUnitName(m.cgroups)\n\tneedsFreeze, needsThaw, err := m.freezeBeforeSet(unitName, r)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif needsFreeze {\n\t\tif err := m.doFreeze(cgroups.Frozen); err != nil {\n\t\t\t// If freezer cgroup isn't supported, we just warn about it.\n\t\t\tlogrus.Infof(\"freeze container before SetUnitProperties failed: %v\", err)\n\t\t\t// skip update the cgroup while frozen failed. #3803\n\t\t\tif !errors.Is(err, errSubsystemDoesNotExist) {\n\t\t\t\tif needsThaw {\n\t\t\t\t\tif thawErr := m.doFreeze(cgroups.Thawed); thawErr != nil {\n\t\t\t\t\t\tlogrus.Infof(\"thaw container after doFreeze failed: %v\", thawErr)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\tsetErr := setUnitProperties(m.dbus, unitName, properties...)\n\tif needsThaw {\n\t\tif err := m.doFreeze(cgroups.Thawed); err != nil {\n\t\t\tlogrus.Infof(\"thaw container after SetUnitProperties failed: %v\", err)\n\t\t}\n\t}\n\tif setErr != nil {\n\t\treturn setErr\n\t}\n\n\tfor _, sys := range legacySubsystems {\n\t\t// Get the subsystem path, but don't error out for not found cgroups.\n\t\tpath, ok := m.paths[sys.Name()]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tif err := sys.Set(path, r); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (m *LegacyManager) GetPaths() map[string]string {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\treturn m.paths\n}\n\nfunc (m *LegacyManager) GetCgroups() (*cgroups.Cgroup, error) {\n\treturn m.cgroups, nil\n}\n\nfunc (m *LegacyManager) GetFreezerState() (cgroups.FreezerState, error) {\n\tpath, ok := m.paths[\"freezer\"]\n\tif !ok {\n\t\treturn cgroups.Undefined, nil\n\t}\n\tfreezer := &fs.FreezerGroup{}\n\treturn freezer.GetState(path)\n}\n\nfunc (m *LegacyManager) Exists() bool {\n\treturn cgroups.PathExists(m.Path(\"devices\"))\n}\n\nfunc (m *LegacyManager) OOMKillCount() (uint64, error) {\n\treturn fs.OOMKillCount(m.Path(\"memory\"))\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/systemd/v2.go",
    "content": "package systemd\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\tsystemdDbus \"github.com/coreos/go-systemd/v22/dbus\"\n\tsecurejoin \"github.com/cyphar/filepath-securejoin\"\n\t\"github.com/sirupsen/logrus\"\n\n\t\"github.com/opencontainers/cgroups\"\n\t\"github.com/opencontainers/cgroups/fs2\"\n)\n\nconst (\n\tcpuIdleSupportedVersion = 252\n)\n\ntype UnifiedManager struct {\n\tmu      sync.Mutex\n\tcgroups *cgroups.Cgroup\n\t// path is like \"/sys/fs/cgroup/user.slice/user-1001.slice/session-1.scope\"\n\tpath  string\n\tdbus  *dbusConnManager\n\tfsMgr cgroups.Manager\n}\n\nfunc NewUnifiedManager(config *cgroups.Cgroup, path string) (*UnifiedManager, error) {\n\tm := &UnifiedManager{\n\t\tcgroups: config,\n\t\tpath:    path,\n\t\tdbus:    newDbusConnManager(config.Rootless),\n\t}\n\tif err := m.initPath(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfsMgr, err := fs2.NewManager(config, m.path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tm.fsMgr = fsMgr\n\n\treturn m, nil\n}\n\nfunc shouldSetCPUIdle(cm *dbusConnManager, v string) bool {\n\t// The only valid values for cpu.idle are 0 and 1. As it is\n\t// not possible to directly set cpu.idle to 0 via systemd,\n\t// ignore 0. Ignore other values as we'll error out later\n\t// in Set() while calling fsMgr.Set().\n\treturn v == \"1\" && systemdVersion(cm) >= cpuIdleSupportedVersion\n}\n\n// unifiedResToSystemdProps tries to convert from Cgroup.Resources.Unified\n// key/value map (where key is cgroupfs file name) to systemd unit properties.\n// This is on a best-effort basis, so the properties that are not known\n// (to this function and/or systemd) are ignored (but logged with \"debug\"\n// log level).\n//\n// For the list of keys, see https://www.kernel.org/doc/Documentation/cgroup-v2.txt\n//\n// For the list of systemd unit properties, see systemd.resource-control(5).\nfunc unifiedResToSystemdProps(cm *dbusConnManager, res map[string]string) (props []systemdDbus.Property, _ error) {\n\tvar err error\n\n\tfor k, v := range res {\n\t\tif strings.Contains(k, \"/\") {\n\t\t\treturn nil, fmt.Errorf(\"unified resource %q must be a file name (no slashes)\", k)\n\t\t}\n\t\tif strings.IndexByte(k, '.') <= 0 {\n\t\t\treturn nil, fmt.Errorf(\"unified resource %q must be in the form CONTROLLER.PARAMETER\", k)\n\t\t}\n\t\t// Kernel is quite forgiving to extra whitespace\n\t\t// around the value, and so should we.\n\t\tv = strings.TrimSpace(v)\n\t\t// Please keep cases in alphabetical order.\n\t\tswitch k {\n\t\tcase \"cpu.idle\":\n\t\t\tif shouldSetCPUIdle(cm, v) {\n\t\t\t\t// Setting CPUWeight to 0 tells systemd\n\t\t\t\t// to set cpu.idle to 1.\n\t\t\t\tprops = append(props,\n\t\t\t\t\tnewProp(\"CPUWeight\", uint64(0)))\n\t\t\t}\n\n\t\tcase \"cpu.max\":\n\t\t\t// value: quota [period]\n\t\t\tquota := int64(0) // 0 means \"unlimited\" for addCpuQuota, if period is set\n\t\t\tperiod := defCPUQuotaPeriod\n\t\t\tsv := strings.Fields(v)\n\t\t\tif len(sv) < 1 || len(sv) > 2 {\n\t\t\t\treturn nil, fmt.Errorf(\"unified resource %q value invalid: %q\", k, v)\n\t\t\t}\n\t\t\t// quota\n\t\t\tif sv[0] != \"max\" {\n\t\t\t\tquota, err = strconv.ParseInt(sv[0], 10, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"unified resource %q period value conversion error: %w\", k, err)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// period\n\t\t\tif len(sv) == 2 {\n\t\t\t\tperiod, err = strconv.ParseUint(sv[1], 10, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"unified resource %q quota value conversion error: %w\", k, err)\n\t\t\t\t}\n\t\t\t}\n\t\t\taddCPUQuota(cm, &props, &quota, period)\n\n\t\tcase \"cpu.weight\":\n\t\t\tif shouldSetCPUIdle(cm, strings.TrimSpace(res[\"cpu.idle\"])) {\n\t\t\t\t// Do not add duplicate CPUWeight property\n\t\t\t\t// (see case \"cpu.idle\" above).\n\t\t\t\tlogrus.Warn(\"unable to apply both cpu.weight and cpu.idle to systemd, ignoring cpu.weight\")\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tnum, err := strconv.ParseUint(v, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"unified resource %q value conversion error: %w\", k, err)\n\t\t\t}\n\t\t\tprops = append(props,\n\t\t\t\tnewProp(\"CPUWeight\", num))\n\n\t\tcase \"cpuset.cpus\", \"cpuset.mems\":\n\t\t\tbits, err := RangeToBits(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"unified resource %q=%q conversion error: %w\", k, v, err)\n\t\t\t}\n\t\t\tm := map[string]string{\n\t\t\t\t\"cpuset.cpus\": \"AllowedCPUs\",\n\t\t\t\t\"cpuset.mems\": \"AllowedMemoryNodes\",\n\t\t\t}\n\t\t\t// systemd only supports these properties since v244\n\t\t\tsdVer := systemdVersion(cm)\n\t\t\tif sdVer >= 244 {\n\t\t\t\tprops = append(props,\n\t\t\t\t\tnewProp(m[k], bits))\n\t\t\t} else {\n\t\t\t\tlogrus.Debugf(\"systemd v%d is too old to support %s\"+\n\t\t\t\t\t\" (setting will still be applied to cgroupfs)\",\n\t\t\t\t\tsdVer, m[k])\n\t\t\t}\n\n\t\tcase \"memory.high\", \"memory.low\", \"memory.min\", \"memory.max\", \"memory.swap.max\":\n\t\t\tnum := uint64(math.MaxUint64)\n\t\t\tif v != \"max\" {\n\t\t\t\tnum, err = strconv.ParseUint(v, 10, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"unified resource %q value conversion error: %w\", k, err)\n\t\t\t\t}\n\t\t\t}\n\t\t\tm := map[string]string{\n\t\t\t\t\"memory.high\":     \"MemoryHigh\",\n\t\t\t\t\"memory.low\":      \"MemoryLow\",\n\t\t\t\t\"memory.min\":      \"MemoryMin\",\n\t\t\t\t\"memory.max\":      \"MemoryMax\",\n\t\t\t\t\"memory.swap.max\": \"MemorySwapMax\",\n\t\t\t}\n\t\t\tprops = append(props,\n\t\t\t\tnewProp(m[k], num))\n\n\t\tcase \"pids.max\":\n\t\t\tnum := uint64(math.MaxUint64)\n\t\t\tif v != \"max\" {\n\t\t\t\tvar err error\n\t\t\t\tnum, err = strconv.ParseUint(v, 10, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"unified resource %q value conversion error: %w\", k, err)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif num == 0 {\n\t\t\t\tnum = 1 // systemd does not accept \"0\" for TasksMax\n\t\t\t}\n\t\t\tprops = append(props,\n\t\t\t\tnewProp(\"TasksMax\", num))\n\n\t\tcase \"memory.oom.group\":\n\t\t\t// Setting this to 1 is roughly equivalent to OOMPolicy=kill\n\t\t\t// (as per systemd.service(5) and\n\t\t\t// https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html),\n\t\t\t// but it's not clear what to do if it is unset or set\n\t\t\t// to 0 in runc update, as there are two other possible\n\t\t\t// values for OOMPolicy (continue/stop).\n\t\t\tfallthrough\n\n\t\tdefault:\n\t\t\t// Ignore the unknown resource here -- will still be\n\t\t\t// applied in Set which calls fs2.Set.\n\t\t\tlogrus.Debugf(\"don't know how to convert unified resource %q=%q to systemd unit property; skipping (will still be applied to cgroupfs)\", k, v)\n\t\t}\n\t}\n\n\treturn props, nil\n}\n\nfunc genV2ResourcesProperties(dirPath string, r *cgroups.Resources, cm *dbusConnManager) ([]systemdDbus.Property, error) {\n\t// We need this check before setting systemd properties, otherwise\n\t// the container is OOM-killed and the systemd unit is removed\n\t// before we get to fsMgr.Set().\n\tif err := fs2.CheckMemoryUsage(dirPath, r); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar properties []systemdDbus.Property\n\n\t// NOTE: This is of questionable correctness because we insert our own\n\t//       devices eBPF program later. Two programs with identical rules\n\t//       aren't the end of the world, but it is a bit concerning. However\n\t//       it's unclear if systemd removes all eBPF programs attached when\n\t//       doing SetUnitProperties...\n\tdeviceProperties, err := generateDeviceProperties(r, cm)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tproperties = append(properties, deviceProperties...)\n\n\tif r.Memory != 0 {\n\t\tproperties = append(properties,\n\t\t\tnewProp(\"MemoryMax\", uint64(r.Memory)))\n\t}\n\tif r.MemoryReservation != 0 {\n\t\tproperties = append(properties,\n\t\t\tnewProp(\"MemoryLow\", uint64(r.MemoryReservation)))\n\t}\n\n\tswap, err := cgroups.ConvertMemorySwapToCgroupV2Value(r.MemorySwap, r.Memory)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif swap != 0 {\n\t\tproperties = append(properties,\n\t\t\tnewProp(\"MemorySwapMax\", uint64(swap)))\n\t}\n\n\tidleSet := false\n\t// The logic here is the same as in shouldSetCPUIdle.\n\tif r.CPUIdle != nil && *r.CPUIdle == 1 && systemdVersion(cm) >= cpuIdleSupportedVersion {\n\t\tproperties = append(properties,\n\t\t\tnewProp(\"CPUWeight\", uint64(0)))\n\t\tidleSet = true\n\t}\n\tif r.CpuWeight != 0 {\n\t\tif idleSet {\n\t\t\t// Ignore CpuWeight if CPUIdle is already set.\n\t\t\tlogrus.Warn(\"unable to apply both CPUWeight and CpuIdle to systemd, ignoring CPUWeight\")\n\t\t} else {\n\t\t\tproperties = append(properties,\n\t\t\t\tnewProp(\"CPUWeight\", r.CpuWeight))\n\t\t}\n\t}\n\n\taddCPUQuota(cm, &properties, &r.CpuQuota, r.CpuPeriod)\n\n\tif r.PidsLimit != nil {\n\t\tvar tasksMax uint64\n\t\tif limit := *r.PidsLimit; limit < 0 {\n\t\t\ttasksMax = math.MaxUint64 // \"infinity\"\n\t\t} else if limit == 0 {\n\t\t\ttasksMax = 1 // systemd does not accept \"0\" for TasksMax\n\t\t} else {\n\t\t\ttasksMax = uint64(limit)\n\t\t}\n\t\tproperties = append(properties,\n\t\t\tnewProp(\"TasksMax\", tasksMax))\n\t}\n\n\terr = addCpuset(cm, &properties, r.CpusetCpus, r.CpusetMems)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// ignore r.KernelMemory\n\n\t// convert Resources.Unified map to systemd properties\n\tif r.Unified != nil {\n\t\tunifiedProps, err := unifiedResToSystemdProps(cm, r.Unified)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tproperties = append(properties, unifiedProps...)\n\t}\n\n\treturn properties, nil\n}\n\nfunc (m *UnifiedManager) Apply(pid int) error {\n\tvar (\n\t\tc          = m.cgroups\n\t\tunitName   = getUnitName(c)\n\t\tproperties []systemdDbus.Property\n\t)\n\n\tslice := \"system.slice\"\n\tif m.cgroups.Rootless {\n\t\tslice = \"user.slice\"\n\t}\n\tif c.Parent != \"\" {\n\t\tslice = c.Parent\n\t}\n\n\tproperties = append(properties, systemdDbus.PropDescription(\"libcontainer container \"+c.Name))\n\n\tif strings.HasSuffix(unitName, \".slice\") {\n\t\t// If we create a slice, the parent is defined via a Wants=.\n\t\tproperties = append(properties, systemdDbus.PropWants(slice))\n\t} else {\n\t\t// Otherwise it's a scope, which we put into a Slice=.\n\t\tproperties = append(properties, systemdDbus.PropSlice(slice))\n\t\t// Assume scopes always support delegation (supported since systemd v218).\n\t\tproperties = append(properties, newProp(\"Delegate\", true))\n\t}\n\n\t// only add pid if its valid, -1 is used w/ general slice creation.\n\tif pid != -1 {\n\t\tproperties = append(properties, newProp(\"PIDs\", []uint32{uint32(pid)}))\n\t}\n\n\t// Always enable accounting, this gets us the same behaviour as the fs implementation,\n\t// plus the kernel has some problems with joining the memory cgroup at a later time.\n\tproperties = append(properties,\n\t\tnewProp(\"MemoryAccounting\", true),\n\t\tnewProp(\"CPUAccounting\", true),\n\t\tnewProp(\"IOAccounting\", true),\n\t\tnewProp(\"TasksAccounting\", true),\n\t)\n\n\t// Assume DefaultDependencies= will always work (the check for it was previously broken.)\n\tproperties = append(properties,\n\t\tnewProp(\"DefaultDependencies\", false))\n\n\tproperties = append(properties, c.SystemdProps...)\n\n\tif err := startUnit(m.dbus, unitName, properties, pid == -1); err != nil {\n\t\treturn fmt.Errorf(\"unable to start unit %q (properties %+v): %w\", unitName, properties, err)\n\t}\n\n\tif err := fs2.CreateCgroupPath(m.path, m.cgroups); err != nil {\n\t\treturn err\n\t}\n\n\tif c.OwnerUID != nil {\n\t\t// The directory itself must be chowned.\n\t\terr := os.Chown(m.path, *c.OwnerUID, -1)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tfilesToChown, err := cgroupFilesToChown()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tfor _, v := range filesToChown {\n\t\t\terr := os.Chown(m.path+\"/\"+v, *c.OwnerUID, -1)\n\t\t\t// Some files might not be present.\n\t\t\tif err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// The kernel exposes a list of files that should be chowned to the delegate\n// uid in /sys/kernel/cgroup/delegate.  If the file is not present\n// (Linux < 4.15), use the initial values mentioned in cgroups(7).\nfunc cgroupFilesToChown() ([]string, error) {\n\tconst cgroupDelegateFile = \"/sys/kernel/cgroup/delegate\"\n\n\tf, err := os.Open(cgroupDelegateFile)\n\tif err != nil {\n\t\treturn []string{\"cgroup.procs\", \"cgroup.subtree_control\", \"cgroup.threads\"}, nil\n\t}\n\tdefer f.Close()\n\n\tfilesToChown := []string{}\n\tscanner := bufio.NewScanner(f)\n\tfor scanner.Scan() {\n\t\tfilesToChown = append(filesToChown, scanner.Text())\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, fmt.Errorf(\"error reading %s: %w\", cgroupDelegateFile, err)\n\t}\n\n\treturn filesToChown, nil\n}\n\n// AddPid adds a process with a given pid to an existing cgroup.\n// The subcgroup argument is either empty, or a path relative to\n// a cgroup under under the manager's cgroup.\nfunc (m *UnifiedManager) AddPid(subcgroup string, pid int) error {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\n\treturn addPid(m.dbus, getUnitName(m.cgroups), subcgroup, pid)\n}\n\nfunc (m *UnifiedManager) Destroy() error {\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\n\tunitName := getUnitName(m.cgroups)\n\tif err := stopUnit(m.dbus, unitName); err != nil {\n\t\treturn err\n\t}\n\n\t// systemd 239 do not remove sub-cgroups.\n\terr := m.fsMgr.Destroy()\n\t// fsMgr.Destroy has handled ErrNotExist\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (m *UnifiedManager) Path(_ string) string {\n\treturn m.path\n}\n\n// getSliceFull value is used in initPath.\n// The value is incompatible with systemdDbus.PropSlice.\nfunc (m *UnifiedManager) getSliceFull() (string, error) {\n\tc := m.cgroups\n\tslice := \"system.slice\"\n\tif c.Rootless {\n\t\tslice = \"user.slice\"\n\t}\n\tif c.Parent != \"\" {\n\t\tvar err error\n\t\tslice, err = ExpandSlice(c.Parent)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\n\tif c.Rootless {\n\t\t// managerCG is typically \"/user.slice/user-${uid}.slice/user@${uid}.service\".\n\t\tmanagerCG, err := getManagerProperty(m.dbus, \"ControlGroup\")\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tslice = filepath.Join(managerCG, slice)\n\t}\n\n\t// an example of the final slice in rootless: \"/user.slice/user-1001.slice/user@1001.service/user.slice\"\n\t// NOTE: systemdDbus.PropSlice requires the \"/user.slice/user-1001.slice/user@1001.service/\" prefix NOT to be specified.\n\treturn slice, nil\n}\n\nfunc (m *UnifiedManager) initPath() error {\n\tif m.path != \"\" {\n\t\treturn nil\n\t}\n\n\tsliceFull, err := m.getSliceFull()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tc := m.cgroups\n\tpath := filepath.Join(sliceFull, getUnitName(c))\n\tpath, err = securejoin.SecureJoin(fs2.UnifiedMountpoint, path)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// an example of the final path in rootless:\n\t// \"/sys/fs/cgroup/user.slice/user-1001.slice/user@1001.service/user.slice/libpod-132ff0d72245e6f13a3bbc6cdc5376886897b60ac59eaa8dea1df7ab959cbf1c.scope\"\n\tm.path = path\n\n\treturn nil\n}\n\nfunc (m *UnifiedManager) Freeze(state cgroups.FreezerState) error {\n\treturn m.fsMgr.Freeze(state)\n}\n\nfunc (m *UnifiedManager) GetPids() ([]int, error) {\n\treturn cgroups.GetPids(m.path)\n}\n\nfunc (m *UnifiedManager) GetAllPids() ([]int, error) {\n\treturn cgroups.GetAllPids(m.path)\n}\n\nfunc (m *UnifiedManager) GetStats() (*cgroups.Stats, error) {\n\treturn m.fsMgr.GetStats()\n}\n\nfunc (m *UnifiedManager) Set(r *cgroups.Resources) error {\n\tif r == nil {\n\t\treturn nil\n\t}\n\t// Use a copy since CpuQuota in r may be modified.\n\trCopy := *r\n\tr = &rCopy\n\tproperties, err := genV2ResourcesProperties(m.fsMgr.Path(\"\"), r, m.dbus)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif err := setUnitProperties(m.dbus, getUnitName(m.cgroups), properties...); err != nil {\n\t\treturn fmt.Errorf(\"unable to set unit properties: %w\", err)\n\t}\n\n\treturn m.fsMgr.Set(r)\n}\n\nfunc (m *UnifiedManager) GetPaths() map[string]string {\n\tpaths := make(map[string]string, 1)\n\tpaths[\"\"] = m.path\n\treturn paths\n}\n\nfunc (m *UnifiedManager) GetCgroups() (*cgroups.Cgroup, error) {\n\treturn m.cgroups, nil\n}\n\nfunc (m *UnifiedManager) GetFreezerState() (cgroups.FreezerState, error) {\n\treturn m.fsMgr.GetFreezerState()\n}\n\nfunc (m *UnifiedManager) Exists() bool {\n\treturn cgroups.PathExists(m.path)\n}\n\nfunc (m *UnifiedManager) OOMKillCount() (uint64, error) {\n\treturn m.fsMgr.OOMKillCount()\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/utils.go",
    "content": "package cgroups\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/moby/sys/userns\"\n\t\"github.com/sirupsen/logrus\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tCgroupProcesses   = \"cgroup.procs\"\n\tunifiedMountpoint = \"/sys/fs/cgroup\"\n\thybridMountpoint  = \"/sys/fs/cgroup/unified\"\n)\n\nvar (\n\tisUnifiedOnce sync.Once\n\tisUnified     bool\n\tisHybridOnce  sync.Once\n\tisHybrid      bool\n)\n\n// IsCgroup2UnifiedMode returns whether we are running in cgroup v2 unified mode.\nfunc IsCgroup2UnifiedMode() bool {\n\tisUnifiedOnce.Do(func() {\n\t\tvar st unix.Statfs_t\n\t\terr := unix.Statfs(unifiedMountpoint, &st)\n\t\tif err != nil {\n\t\t\tlevel := logrus.WarnLevel\n\t\t\tif os.IsNotExist(err) && userns.RunningInUserNS() {\n\t\t\t\t// For rootless containers, sweep it under the rug.\n\t\t\t\tlevel = logrus.DebugLevel\n\t\t\t}\n\t\t\tlogrus.StandardLogger().Logf(level,\n\t\t\t\t\"statfs %s: %v; assuming cgroup v1\", unifiedMountpoint, err)\n\t\t}\n\t\tisUnified = st.Type == unix.CGROUP2_SUPER_MAGIC\n\t})\n\treturn isUnified\n}\n\n// IsCgroup2HybridMode returns whether we are running in cgroup v2 hybrid mode.\nfunc IsCgroup2HybridMode() bool {\n\tisHybridOnce.Do(func() {\n\t\tvar st unix.Statfs_t\n\t\terr := unix.Statfs(hybridMountpoint, &st)\n\t\tif err != nil {\n\t\t\tisHybrid = false\n\t\t\tif !os.IsNotExist(err) {\n\t\t\t\t// Report unexpected errors.\n\t\t\t\tlogrus.WithError(err).Debugf(\"statfs(%q) failed\", hybridMountpoint)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tisHybrid = st.Type == unix.CGROUP2_SUPER_MAGIC\n\t})\n\treturn isHybrid\n}\n\ntype Mount struct {\n\tMountpoint string\n\tRoot       string\n\tSubsystems []string\n}\n\n// GetCgroupMounts returns the mounts for the cgroup subsystems.\n// all indicates whether to return just the first instance or all the mounts.\n// This function should not be used from cgroupv2 code, as in this case\n// all the controllers are available under the constant unifiedMountpoint.\nfunc GetCgroupMounts(all bool) ([]Mount, error) {\n\tif IsCgroup2UnifiedMode() {\n\t\t// TODO: remove cgroupv2 case once all external users are converted\n\t\tavailableControllers, err := GetAllSubsystems()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tm := Mount{\n\t\t\tMountpoint: unifiedMountpoint,\n\t\t\tRoot:       unifiedMountpoint,\n\t\t\tSubsystems: availableControllers,\n\t\t}\n\t\treturn []Mount{m}, nil\n\t}\n\n\treturn getCgroupMountsV1(all)\n}\n\n// GetAllSubsystems returns all the cgroup subsystems supported by the kernel\nfunc GetAllSubsystems() ([]string, error) {\n\t// /proc/cgroups is meaningless for v2\n\t// https://github.com/torvalds/linux/blob/v5.3/Documentation/admin-guide/cgroup-v2.rst#deprecated-v1-core-features\n\tif IsCgroup2UnifiedMode() {\n\t\t// \"pseudo\" controllers do not appear in /sys/fs/cgroup/cgroup.controllers.\n\t\t// - devices: implemented in kernel 4.15\n\t\t// - freezer: implemented in kernel 5.2\n\t\t// We assume these are always available, as it is hard to detect availability.\n\t\tpseudo := []string{\"devices\", \"freezer\"}\n\t\tdata, err := ReadFile(\"/sys/fs/cgroup\", \"cgroup.controllers\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tsubsystems := append(pseudo, strings.Fields(data)...)\n\t\treturn subsystems, nil\n\t}\n\tf, err := os.Open(\"/proc/cgroups\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tsubsystems := []string{}\n\n\ts := bufio.NewScanner(f)\n\tfor s.Scan() {\n\t\ttext := s.Text()\n\t\tif text[0] != '#' {\n\t\t\tparts := strings.Fields(text)\n\t\t\tif len(parts) >= 4 && parts[3] != \"0\" {\n\t\t\t\tsubsystems = append(subsystems, parts[0])\n\t\t\t}\n\t\t}\n\t}\n\tif err := s.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn subsystems, nil\n}\n\nfunc readProcsFile(dir string) (out []int, _ error) {\n\tfile := CgroupProcesses\n\tretry := true\n\nagain:\n\tf, err := OpenFile(dir, file, os.O_RDONLY)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\ts := bufio.NewScanner(f)\n\tfor s.Scan() {\n\t\tif t := s.Text(); t != \"\" {\n\t\t\tpid, err := strconv.Atoi(t)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tout = append(out, pid)\n\t\t}\n\t}\n\tif errors.Is(s.Err(), unix.ENOTSUP) && retry {\n\t\t// For a threaded cgroup, read returns ENOTSUP, and we should\n\t\t// read from cgroup.threads instead.\n\t\tfile = \"cgroup.threads\"\n\t\tretry = false\n\t\tgoto again\n\t}\n\treturn out, s.Err()\n}\n\n// ParseCgroupFile parses the given cgroup file, typically /proc/self/cgroup\n// or /proc/<pid>/cgroup, into a map of subsystems to cgroup paths, e.g.\n//\n//\t\"cpu\": \"/user.slice/user-1000.slice\"\n//\t\"pids\": \"/user.slice/user-1000.slice\"\n//\n// etc.\n//\n// Note that for cgroup v2 unified hierarchy, there are no per-controller\n// cgroup paths, so the resulting map will have a single element where the key\n// is empty string (\"\") and the value is the cgroup path the <pid> is in.\nfunc ParseCgroupFile(path string) (map[string]string, error) {\n\tf, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\treturn parseCgroupFromReader(f)\n}\n\n// helper function for ParseCgroupFile to make testing easier\nfunc parseCgroupFromReader(r io.Reader) (map[string]string, error) {\n\ts := bufio.NewScanner(r)\n\tcgroups := make(map[string]string)\n\n\tfor s.Scan() {\n\t\ttext := s.Text()\n\t\t// from cgroups(7):\n\t\t// /proc/[pid]/cgroup\n\t\t// ...\n\t\t// For each cgroup hierarchy ... there is one entry\n\t\t// containing three colon-separated fields of the form:\n\t\t//     hierarchy-ID:subsystem-list:cgroup-path\n\t\tparts := strings.SplitN(text, \":\", 3)\n\t\tif len(parts) < 3 {\n\t\t\treturn nil, fmt.Errorf(\"invalid cgroup entry: must contain at least two colons: %v\", text)\n\t\t}\n\n\t\tfor _, subs := range strings.Split(parts[1], \",\") {\n\t\t\tcgroups[subs] = parts[2]\n\t\t}\n\t}\n\tif err := s.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn cgroups, nil\n}\n\nfunc PathExists(path string) bool {\n\tif _, err := os.Stat(path); err != nil {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// rmdir tries to remove a directory, optionally retrying on EBUSY.\nfunc rmdir(path string, retry bool) error {\n\tdelay := time.Millisecond\n\ttries := 10\n\nagain:\n\terr := unix.Rmdir(path)\n\tswitch err {\n\tcase nil, unix.ENOENT:\n\t\treturn nil\n\tcase unix.EINTR:\n\t\tgoto again\n\tcase unix.EBUSY:\n\t\tif retry && tries > 0 {\n\t\t\ttime.Sleep(delay)\n\t\t\tdelay *= 2\n\t\t\ttries--\n\t\t\tgoto again\n\n\t\t}\n\t}\n\treturn &os.PathError{Op: \"rmdir\", Path: path, Err: err}\n}\n\n// RemovePath aims to remove cgroup path. It does so recursively,\n// by removing any subdirectories (sub-cgroups) first.\nfunc RemovePath(path string) error {\n\t// Try the fast path first; don't retry on EBUSY yet.\n\tif err := rmdir(path, false); err == nil {\n\t\treturn nil\n\t}\n\n\t// There are many reasons why rmdir can fail, including:\n\t// 1. cgroup have existing sub-cgroups;\n\t// 2. cgroup (still) have some processes (that are about to vanish);\n\t// 3. lack of permission (one example is read-only /sys/fs/cgroup mount,\n\t//    in which case rmdir returns EROFS even for for a non-existent path,\n\t//    see issue 4518).\n\t//\n\t// Using os.ReadDir here kills two birds with one stone: check if\n\t// the directory exists (handling scenario 3 above), and use\n\t// directory contents to remove sub-cgroups (handling scenario 1).\n\tinfos, err := os.ReadDir(path)\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\t// Let's remove sub-cgroups, if any.\n\tfor _, info := range infos {\n\t\tif info.IsDir() {\n\t\t\tif err = RemovePath(filepath.Join(path, info.Name())); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\t// Finally, try rmdir again, this time with retries on EBUSY,\n\t// which may help with scenario 2 above.\n\treturn rmdir(path, true)\n}\n\n// RemovePaths iterates over the provided paths removing them.\nfunc RemovePaths(paths map[string]string) (err error) {\n\tfor s, p := range paths {\n\t\tif err := RemovePath(p); err == nil {\n\t\t\tdelete(paths, s)\n\t\t}\n\t}\n\tif len(paths) == 0 {\n\t\tclear(paths)\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(\"Failed to remove paths: %v\", paths)\n}\n\nvar (\n\thugePageSizes []string\n\tinitHPSOnce   sync.Once\n)\n\nfunc HugePageSizes() []string {\n\tinitHPSOnce.Do(func() {\n\t\tdir, err := os.OpenFile(\"/sys/kernel/mm/hugepages\", unix.O_DIRECTORY|unix.O_RDONLY, 0)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tfiles, err := dir.Readdirnames(0)\n\t\tdir.Close()\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\n\t\thugePageSizes, err = getHugePageSizeFromFilenames(files)\n\t\tif err != nil {\n\t\t\tlogrus.Warn(\"HugePageSizes: \", err)\n\t\t}\n\t})\n\n\treturn hugePageSizes\n}\n\nfunc getHugePageSizeFromFilenames(fileNames []string) ([]string, error) {\n\tpageSizes := make([]string, 0, len(fileNames))\n\tvar warn error\n\n\tfor _, file := range fileNames {\n\t\t// example: hugepages-1048576kB\n\t\tval, ok := strings.CutPrefix(file, \"hugepages-\")\n\t\tif !ok {\n\t\t\t// Unexpected file name: no prefix found, ignore it.\n\t\t\tcontinue\n\t\t}\n\t\t// The suffix is always \"kB\" (as of Linux 5.13). If we find\n\t\t// something else, produce an error but keep going.\n\t\teLen := len(val) - 2\n\t\tval = strings.TrimSuffix(val, \"kB\")\n\t\tif len(val) != eLen {\n\t\t\t// Highly unlikely.\n\t\t\tif warn == nil {\n\t\t\t\twarn = errors.New(file + `: invalid suffix (expected \"kB\")`)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tsize, err := strconv.Atoi(val)\n\t\tif err != nil {\n\t\t\t// Highly unlikely.\n\t\t\tif warn == nil {\n\t\t\t\twarn = fmt.Errorf(\"%s: %w\", file, err)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\t// Model after https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/mm/hugetlb_cgroup.c?id=eff48ddeab782e35e58ccc8853f7386bbae9dec4#n574\n\t\t// but in our case the size is in KB already.\n\t\tif size >= (1 << 20) {\n\t\t\tval = strconv.Itoa(size>>20) + \"GB\"\n\t\t} else if size >= (1 << 10) {\n\t\t\tval = strconv.Itoa(size>>10) + \"MB\"\n\t\t} else {\n\t\t\tval += \"KB\"\n\t\t}\n\t\tpageSizes = append(pageSizes, val)\n\t}\n\n\treturn pageSizes, warn\n}\n\n// GetPids returns all pids, that were added to cgroup at path.\nfunc GetPids(dir string) ([]int, error) {\n\treturn readProcsFile(dir)\n}\n\n// WriteCgroupProc writes the specified pid into the cgroup's cgroup.procs file\nfunc WriteCgroupProc(dir string, pid int) error {\n\t// Normally dir should not be empty, one case is that cgroup subsystem\n\t// is not mounted, we will get empty dir, and we want it fail here.\n\tif dir == \"\" {\n\t\treturn fmt.Errorf(\"no such directory for %s\", CgroupProcesses)\n\t}\n\n\t// Dont attach any pid to the cgroup if -1 is specified as a pid\n\tif pid == -1 {\n\t\treturn nil\n\t}\n\n\tfile, err := OpenFile(dir, CgroupProcesses, os.O_WRONLY)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to write %v: %w\", pid, err)\n\t}\n\tdefer file.Close()\n\n\tfor range 5 {\n\t\t_, err = file.WriteString(strconv.Itoa(pid))\n\t\tif err == nil {\n\t\t\treturn nil\n\t\t}\n\n\t\t// EINVAL might mean that the task being added to cgroup.procs is in state\n\t\t// TASK_NEW. We should attempt to do so again.\n\t\tif errors.Is(err, unix.EINVAL) {\n\t\t\ttime.Sleep(30 * time.Millisecond)\n\t\t\tcontinue\n\t\t}\n\n\t\treturn fmt.Errorf(\"failed to write %v: %w\", pid, err)\n\t}\n\treturn err\n}\n\n// ConvertCPUSharesToCgroupV2Value converts CPU shares, used by cgroup v1,\n// to CPU weight, used by cgroup v2.\n//\n// Cgroup v1 CPU shares has a range of [2^1...2^18], i.e. [2...262144],\n// and the default value is 1024.\n//\n// Cgroup v2 CPU weight has a range of [10^0...10^4], i.e. [1...10000],\n// and the default value is 100.\nfunc ConvertCPUSharesToCgroupV2Value(cpuShares uint64) uint64 {\n\t// The value of 0 means \"unset\".\n\tif cpuShares == 0 {\n\t\treturn 0\n\t}\n\tif cpuShares <= 2 {\n\t\treturn 1\n\t}\n\tif cpuShares >= 262144 {\n\t\treturn 10000\n\t}\n\tl := math.Log2(float64(cpuShares))\n\t// Quadratic function which fits min, max, and default.\n\texponent := (l*l+125*l)/612.0 - 7.0/34.0\n\n\treturn uint64(math.Ceil(math.Pow(10, exponent)))\n}\n\n// ConvertMemorySwapToCgroupV2Value converts MemorySwap value from OCI spec\n// for use by cgroup v2 drivers. A conversion is needed since Resources.MemorySwap\n// is defined as memory+swap combined, while in cgroup v2 swap is a separate value,\n// so we need to subtract memory from it where it makes sense.\nfunc ConvertMemorySwapToCgroupV2Value(memorySwap, memory int64) (int64, error) {\n\tswitch {\n\tcase memory == -1 && memorySwap == 0:\n\t\t// For compatibility with cgroup1 controller, set swap to unlimited in\n\t\t// case the memory is set to unlimited and the swap is not explicitly set,\n\t\t// treating the request as \"set both memory and swap to unlimited\".\n\t\treturn -1, nil\n\tcase memorySwap == -1, memorySwap == 0:\n\t\t// Treat -1 (\"max\") and 0 (\"unset\") swap as is.\n\t\treturn memorySwap, nil\n\tcase memory == -1:\n\t\t// Unlimited memory, so treat swap as is.\n\t\treturn memorySwap, nil\n\tcase memory == 0:\n\t\t// Unset or unknown memory, can't calculate swap.\n\t\treturn 0, errors.New(\"unable to set swap limit without memory limit\")\n\tcase memory < 0:\n\t\t// Does not make sense to subtract a negative value.\n\t\treturn 0, fmt.Errorf(\"invalid memory value: %d\", memory)\n\tcase memorySwap < memory:\n\t\t// Sanity check.\n\t\treturn 0, errors.New(\"memory+swap limit should be >= memory limit\")\n\t}\n\n\treturn memorySwap - memory, nil\n}\n\n// Since the OCI spec is designed for cgroup v1, in some cases\n// there is need to convert from the cgroup v1 configuration to cgroup v2\n// the formula for BlkIOWeight to IOWeight is y = (1 + (x - 10) * 9999 / 990)\n// convert linearly from [10-1000] to [1-10000]\nfunc ConvertBlkIOToIOWeightValue(blkIoWeight uint16) uint64 {\n\tif blkIoWeight == 0 {\n\t\treturn 0\n\t}\n\treturn 1 + (uint64(blkIoWeight)-10)*9999/990\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/cgroups/v1_utils.go",
    "content": "package cgroups\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"slices\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n\n\tsecurejoin \"github.com/cyphar/filepath-securejoin\"\n\t\"github.com/moby/sys/mountinfo\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// Code in this source file are specific to cgroup v1,\n// and must not be used from any cgroup v2 code.\n\nconst (\n\tCgroupNamePrefix = \"name=\"\n\tdefaultPrefix    = \"/sys/fs/cgroup\"\n)\n\nvar (\n\terrUnified     = errors.New(\"not implemented for cgroup v2 unified hierarchy\")\n\tErrV1NoUnified = errors.New(\"invalid configuration: cannot use unified on cgroup v1\")\n\n\treadMountinfoOnce sync.Once\n\treadMountinfoErr  error\n\tcgroupMountinfo   []*mountinfo.Info\n)\n\ntype NotFoundError struct {\n\tSubsystem string\n}\n\nfunc (e *NotFoundError) Error() string {\n\treturn fmt.Sprintf(\"mountpoint for %s not found\", e.Subsystem)\n}\n\nfunc NewNotFoundError(sub string) error {\n\treturn &NotFoundError{\n\t\tSubsystem: sub,\n\t}\n}\n\nfunc IsNotFound(err error) bool {\n\tvar nfErr *NotFoundError\n\treturn errors.As(err, &nfErr)\n}\n\nfunc tryDefaultPath(cgroupPath, subsystem string) string {\n\tif !strings.HasPrefix(defaultPrefix, cgroupPath) {\n\t\treturn \"\"\n\t}\n\n\t// remove possible prefix\n\tsubsystem = strings.TrimPrefix(subsystem, CgroupNamePrefix)\n\n\t// Make sure we're still under defaultPrefix, and resolve\n\t// a possible symlink (like cpu -> cpu,cpuacct).\n\tpath, err := securejoin.SecureJoin(defaultPrefix, subsystem)\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\n\t// (1) path should be a directory.\n\tst, err := os.Lstat(path)\n\tif err != nil || !st.IsDir() {\n\t\treturn \"\"\n\t}\n\n\t// (2) path should be a mount point.\n\tpst, err := os.Lstat(filepath.Dir(path))\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\n\tif st.Sys().(*syscall.Stat_t).Dev == pst.Sys().(*syscall.Stat_t).Dev {\n\t\t// parent dir has the same dev -- path is not a mount point\n\t\treturn \"\"\n\t}\n\n\t// (3) path should have 'cgroup' fs type.\n\tfst := unix.Statfs_t{}\n\terr = unix.Statfs(path, &fst)\n\tif err != nil || fst.Type != unix.CGROUP_SUPER_MAGIC {\n\t\treturn \"\"\n\t}\n\n\treturn path\n}\n\n// readCgroupMountinfo returns a list of cgroup v1 mounts (i.e. the ones\n// with fstype of \"cgroup\") for the current running process.\n//\n// The results are cached (to avoid re-reading mountinfo which is relatively\n// expensive), so it is assumed that cgroup mounts are not being changed.\nfunc readCgroupMountinfo() ([]*mountinfo.Info, error) {\n\treadMountinfoOnce.Do(func() {\n\t\t// mountinfo.GetMounts uses /proc/thread-self, so we can use it without\n\t\t// issues.\n\t\tcgroupMountinfo, readMountinfoErr = mountinfo.GetMounts(\n\t\t\tmountinfo.FSTypeFilter(\"cgroup\"),\n\t\t)\n\t})\n\treturn cgroupMountinfo, readMountinfoErr\n}\n\n// https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt\nfunc FindCgroupMountpoint(cgroupPath, subsystem string) (string, error) {\n\tif IsCgroup2UnifiedMode() {\n\t\treturn \"\", errUnified\n\t}\n\n\t// If subsystem is empty, we look for the cgroupv2 hybrid path.\n\tif len(subsystem) == 0 {\n\t\treturn hybridMountpoint, nil\n\t}\n\n\t// Avoid parsing mountinfo by trying the default path first, if possible.\n\tif path := tryDefaultPath(cgroupPath, subsystem); path != \"\" {\n\t\treturn path, nil\n\t}\n\n\tmnt, _, err := FindCgroupMountpointAndRoot(cgroupPath, subsystem)\n\treturn mnt, err\n}\n\nfunc FindCgroupMountpointAndRoot(cgroupPath, subsystem string) (string, string, error) {\n\tif IsCgroup2UnifiedMode() {\n\t\treturn \"\", \"\", errUnified\n\t}\n\n\tmi, err := readCgroupMountinfo()\n\tif err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\n\treturn findCgroupMountpointAndRootFromMI(mi, cgroupPath, subsystem)\n}\n\nfunc findCgroupMountpointAndRootFromMI(mounts []*mountinfo.Info, cgroupPath, subsystem string) (string, string, error) {\n\tfor _, mi := range mounts {\n\t\tif strings.HasPrefix(mi.Mountpoint, cgroupPath) {\n\t\t\tif slices.Contains(strings.Split(mi.VFSOptions, \",\"), subsystem) {\n\t\t\t\treturn mi.Mountpoint, mi.Root, nil\n\t\t\t}\n\t\t}\n\t}\n\n\treturn \"\", \"\", NewNotFoundError(subsystem)\n}\n\nfunc (m Mount) GetOwnCgroup(cgroups map[string]string) (string, error) {\n\tif len(m.Subsystems) == 0 {\n\t\treturn \"\", errors.New(\"no subsystem for mount\")\n\t}\n\n\treturn getControllerPath(m.Subsystems[0], cgroups)\n}\n\nfunc getCgroupMountsHelper(ss map[string]bool, mounts []*mountinfo.Info, all bool) ([]Mount, error) {\n\tres := make([]Mount, 0, len(ss))\n\tnumFound := 0\n\tfor _, mi := range mounts {\n\t\tm := Mount{\n\t\t\tMountpoint: mi.Mountpoint,\n\t\t\tRoot:       mi.Root,\n\t\t}\n\t\tfor _, opt := range strings.Split(mi.VFSOptions, \",\") {\n\t\t\tseen, known := ss[opt]\n\t\t\tif !known || (!all && seen) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tss[opt] = true\n\t\t\topt = strings.TrimPrefix(opt, CgroupNamePrefix)\n\t\t\tm.Subsystems = append(m.Subsystems, opt)\n\t\t\tnumFound++\n\t\t}\n\t\tif len(m.Subsystems) > 0 || all {\n\t\t\tres = append(res, m)\n\t\t}\n\t\tif !all && numFound >= len(ss) {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn res, nil\n}\n\nfunc getCgroupMountsV1(all bool) ([]Mount, error) {\n\tmi, err := readCgroupMountinfo()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// We don't need to use /proc/thread-self here because runc always runs\n\t// with every thread in the same cgroup. This lets us avoid having to do\n\t// runtime.LockOSThread.\n\tallSubsystems, err := ParseCgroupFile(\"/proc/self/cgroup\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tallMap := make(map[string]bool)\n\tfor s := range allSubsystems {\n\t\tallMap[s] = false\n\t}\n\n\treturn getCgroupMountsHelper(allMap, mi, all)\n}\n\n// GetOwnCgroup returns the relative path to the cgroup docker is running in.\nfunc GetOwnCgroup(subsystem string) (string, error) {\n\tif IsCgroup2UnifiedMode() {\n\t\treturn \"\", errUnified\n\t}\n\n\t// We don't need to use /proc/thread-self here because runc always runs\n\t// with every thread in the same cgroup. This lets us avoid having to do\n\t// runtime.LockOSThread.\n\tcgroups, err := ParseCgroupFile(\"/proc/self/cgroup\")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn getControllerPath(subsystem, cgroups)\n}\n\nfunc GetOwnCgroupPath(subsystem string) (string, error) {\n\tcgroup, err := GetOwnCgroup(subsystem)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// If subsystem is empty, we look for the cgroupv2 hybrid path.\n\tif len(subsystem) == 0 {\n\t\treturn hybridMountpoint, nil\n\t}\n\n\treturn getCgroupPathHelper(subsystem, cgroup)\n}\n\nfunc getCgroupPathHelper(subsystem, cgroup string) (string, error) {\n\tmnt, root, err := FindCgroupMountpointAndRoot(\"\", subsystem)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// This is needed for nested containers, because in /proc/self/cgroup we\n\t// see paths from host, which don't exist in container.\n\trelCgroup, err := filepath.Rel(root, cgroup)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn filepath.Join(mnt, relCgroup), nil\n}\n\nfunc getControllerPath(subsystem string, cgroups map[string]string) (string, error) {\n\tif IsCgroup2UnifiedMode() {\n\t\treturn \"\", errUnified\n\t}\n\n\tif p, ok := cgroups[subsystem]; ok {\n\t\treturn p, nil\n\t}\n\n\tif p, ok := cgroups[CgroupNamePrefix+subsystem]; ok {\n\t\treturn p, nil\n\t}\n\n\treturn \"\", NewNotFoundError(subsystem)\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/runtime-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 2015 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/runtime-spec/specs-go/config.go",
    "content": "package specs\n\nimport \"os\"\n\n// Spec is the base configuration for the container.\ntype Spec struct {\n\t// Version of the Open Container Initiative Runtime Specification with which the bundle complies.\n\tVersion string `json:\"ociVersion\"`\n\t// Process configures the container process.\n\tProcess *Process `json:\"process,omitempty\"`\n\t// Root configures the container's root filesystem.\n\tRoot *Root `json:\"root,omitempty\"`\n\t// Hostname configures the container's hostname.\n\tHostname string `json:\"hostname,omitempty\"`\n\t// Domainname configures the container's domainname.\n\tDomainname string `json:\"domainname,omitempty\"`\n\t// Mounts configures additional mounts (on top of Root).\n\tMounts []Mount `json:\"mounts,omitempty\"`\n\t// Hooks configures callbacks for container lifecycle events.\n\tHooks *Hooks `json:\"hooks,omitempty\" platform:\"linux,solaris,zos\"`\n\t// Annotations contains arbitrary metadata for the container.\n\tAnnotations map[string]string `json:\"annotations,omitempty\"`\n\n\t// Linux is platform-specific configuration for Linux based containers.\n\tLinux *Linux `json:\"linux,omitempty\" platform:\"linux\"`\n\t// Solaris is platform-specific configuration for Solaris based containers.\n\tSolaris *Solaris `json:\"solaris,omitempty\" platform:\"solaris\"`\n\t// Windows is platform-specific configuration for Windows based containers.\n\tWindows *Windows `json:\"windows,omitempty\" platform:\"windows\"`\n\t// VM specifies configuration for virtual-machine-based containers.\n\tVM *VM `json:\"vm,omitempty\" platform:\"vm\"`\n\t// ZOS is platform-specific configuration for z/OS based containers.\n\tZOS *ZOS `json:\"zos,omitempty\" platform:\"zos\"`\n\t// FreeBSD is platform-specific configuration for FreeBSD based containers.\n\tFreeBSD *FreeBSD `json:\"freebsd,omitempty\" platform:\"freebsd\"`\n}\n\n// Scheduler represents the scheduling attributes for a process. It is based on\n// the Linux sched_setattr(2) syscall.\ntype Scheduler struct {\n\t// Policy represents the scheduling policy (e.g., SCHED_FIFO, SCHED_RR, SCHED_OTHER).\n\tPolicy LinuxSchedulerPolicy `json:\"policy\"`\n\n\t// Nice is the nice value for the process, which affects its priority.\n\tNice int32 `json:\"nice,omitempty\"`\n\n\t// Priority represents the static priority of the process.\n\tPriority int32 `json:\"priority,omitempty\"`\n\n\t// Flags is an array of scheduling flags.\n\tFlags []LinuxSchedulerFlag `json:\"flags,omitempty\"`\n\n\t// The following ones are used by the DEADLINE scheduler.\n\n\t// Runtime is the amount of time in nanoseconds during which the process\n\t// is allowed to run in a given period.\n\tRuntime uint64 `json:\"runtime,omitempty\"`\n\n\t// Deadline is the absolute deadline for the process to complete its execution.\n\tDeadline uint64 `json:\"deadline,omitempty\"`\n\n\t// Period is the length of the period in nanoseconds used for determining the process runtime.\n\tPeriod uint64 `json:\"period,omitempty\"`\n}\n\n// Process contains information to start a specific application inside the container.\ntype Process struct {\n\t// Terminal creates an interactive terminal for the container.\n\tTerminal bool `json:\"terminal,omitempty\"`\n\t// ConsoleSize specifies the size of the console.\n\tConsoleSize *Box `json:\"consoleSize,omitempty\"`\n\t// User specifies user information for the process.\n\tUser User `json:\"user\"`\n\t// Args specifies the binary and arguments for the application to execute.\n\tArgs []string `json:\"args,omitempty\"`\n\t// CommandLine specifies the full command line for the application to execute on Windows.\n\tCommandLine string `json:\"commandLine,omitempty\" platform:\"windows\"`\n\t// Env populates the process environment for the process.\n\tEnv []string `json:\"env,omitempty\"`\n\t// Cwd is the current working directory for the process and must be\n\t// relative to the container's root.\n\tCwd string `json:\"cwd\"`\n\t// Capabilities are Linux capabilities that are kept for the process.\n\tCapabilities *LinuxCapabilities `json:\"capabilities,omitempty\" platform:\"linux\"`\n\t// Rlimits specifies rlimit options to apply to the process.\n\tRlimits []POSIXRlimit `json:\"rlimits,omitempty\" platform:\"linux,solaris,zos\"`\n\t// NoNewPrivileges controls whether additional privileges could be gained by processes in the container.\n\tNoNewPrivileges bool `json:\"noNewPrivileges,omitempty\" platform:\"linux,zos\"`\n\t// ApparmorProfile specifies the apparmor profile for the container.\n\tApparmorProfile string `json:\"apparmorProfile,omitempty\" platform:\"linux\"`\n\t// Specify an oom_score_adj for the container.\n\tOOMScoreAdj *int `json:\"oomScoreAdj,omitempty\" platform:\"linux\"`\n\t// Scheduler specifies the scheduling attributes for a process\n\tScheduler *Scheduler `json:\"scheduler,omitempty\" platform:\"linux\"`\n\t// SelinuxLabel specifies the selinux context that the container process is run as.\n\tSelinuxLabel string `json:\"selinuxLabel,omitempty\" platform:\"linux\"`\n\t// IOPriority contains the I/O priority settings for the cgroup.\n\tIOPriority *LinuxIOPriority `json:\"ioPriority,omitempty\" platform:\"linux\"`\n\t// ExecCPUAffinity specifies CPU affinity for exec processes.\n\tExecCPUAffinity *CPUAffinity `json:\"execCPUAffinity,omitempty\" platform:\"linux\"`\n}\n\n// LinuxCapabilities specifies the list of allowed capabilities that are kept for a process.\n// https://man7.org/linux/man-pages/man7/capabilities.7.html\ntype LinuxCapabilities struct {\n\t// Bounding is the set of capabilities checked by the kernel.\n\tBounding []string `json:\"bounding,omitempty\" platform:\"linux\"`\n\t// Effective is the set of capabilities checked by the kernel.\n\tEffective []string `json:\"effective,omitempty\" platform:\"linux\"`\n\t// Inheritable is the capabilities preserved across execve.\n\tInheritable []string `json:\"inheritable,omitempty\" platform:\"linux\"`\n\t// Permitted is the limiting superset for effective capabilities.\n\tPermitted []string `json:\"permitted,omitempty\" platform:\"linux\"`\n\t// Ambient is the ambient set of capabilities that are kept.\n\tAmbient []string `json:\"ambient,omitempty\" platform:\"linux\"`\n}\n\n// IOPriority represents I/O priority settings for the container's processes within the process group.\ntype LinuxIOPriority struct {\n\tClass    IOPriorityClass `json:\"class\"`\n\tPriority int             `json:\"priority\"`\n}\n\n// IOPriorityClass represents an I/O scheduling class.\ntype IOPriorityClass string\n\n// Possible values for IOPriorityClass.\nconst (\n\tIOPRIO_CLASS_RT   IOPriorityClass = \"IOPRIO_CLASS_RT\"\n\tIOPRIO_CLASS_BE   IOPriorityClass = \"IOPRIO_CLASS_BE\"\n\tIOPRIO_CLASS_IDLE IOPriorityClass = \"IOPRIO_CLASS_IDLE\"\n)\n\n// CPUAffinity specifies process' CPU affinity.\ntype CPUAffinity struct {\n\tInitial string `json:\"initial,omitempty\"`\n\tFinal   string `json:\"final,omitempty\"`\n}\n\n// Box specifies dimensions of a rectangle. Used for specifying the size of a console.\ntype Box struct {\n\t// Height is the vertical dimension of a box.\n\tHeight uint `json:\"height\"`\n\t// Width is the horizontal dimension of a box.\n\tWidth uint `json:\"width\"`\n}\n\n// User specifies specific user (and group) information for the container process.\ntype User struct {\n\t// UID is the user id.\n\tUID uint32 `json:\"uid\" platform:\"linux,solaris,zos\"`\n\t// GID is the group id.\n\tGID uint32 `json:\"gid\" platform:\"linux,solaris,zos\"`\n\t// Umask is the umask for the init process.\n\tUmask *uint32 `json:\"umask,omitempty\" platform:\"linux,solaris,zos\"`\n\t// AdditionalGids are additional group ids set for the container's process.\n\tAdditionalGids []uint32 `json:\"additionalGids,omitempty\" platform:\"linux,solaris\"`\n\t// Username is the user name.\n\tUsername string `json:\"username,omitempty\" platform:\"windows\"`\n}\n\n// Root contains information about the container's root filesystem on the host.\ntype Root struct {\n\t// Path is the absolute path to the container's root filesystem.\n\tPath string `json:\"path\"`\n\t// Readonly makes the root filesystem for the container readonly before the process is executed.\n\tReadonly bool `json:\"readonly,omitempty\"`\n}\n\n// Mount specifies a mount for a container.\ntype Mount struct {\n\t// Destination is the absolute path where the mount will be placed in the container.\n\tDestination string `json:\"destination\"`\n\t// Type specifies the mount kind.\n\tType string `json:\"type,omitempty\" platform:\"linux,solaris,zos,freebsd\"`\n\t// Source specifies the source path of the mount.\n\tSource string `json:\"source,omitempty\"`\n\t// Options are fstab style mount options.\n\tOptions []string `json:\"options,omitempty\"`\n\n\t// UID/GID mappings used for changing file owners w/o calling chown, fs should support it.\n\t// Every mount point could have its own mapping.\n\tUIDMappings []LinuxIDMapping `json:\"uidMappings,omitempty\" platform:\"linux\"`\n\tGIDMappings []LinuxIDMapping `json:\"gidMappings,omitempty\" platform:\"linux\"`\n}\n\n// Hook specifies a command that is run at a particular event in the lifecycle of a container\ntype Hook struct {\n\tPath    string   `json:\"path\"`\n\tArgs    []string `json:\"args,omitempty\"`\n\tEnv     []string `json:\"env,omitempty\"`\n\tTimeout *int     `json:\"timeout,omitempty\"`\n}\n\n// Hooks specifies a command that is run in the container at a particular event in the lifecycle of a container\n// Hooks for container setup and teardown\ntype Hooks struct {\n\t// Prestart is Deprecated. Prestart is a list of hooks to be run before the container process is executed.\n\t// It is called in the Runtime Namespace\n\t//\n\t// Deprecated: use [Hooks.CreateRuntime], [Hooks.CreateContainer], and\n\t// [Hooks.StartContainer] instead, which allow more granular hook control\n\t// during the create and start phase.\n\tPrestart []Hook `json:\"prestart,omitempty\"`\n\t// CreateRuntime is a list of hooks to be run after the container has been created but before pivot_root or any equivalent operation has been called\n\t// It is called in the Runtime Namespace\n\tCreateRuntime []Hook `json:\"createRuntime,omitempty\"`\n\t// CreateContainer is a list of hooks to be run after the container has been created but before pivot_root or any equivalent operation has been called\n\t// It is called in the Container Namespace\n\tCreateContainer []Hook `json:\"createContainer,omitempty\"`\n\t// StartContainer is a list of hooks to be run after the start operation is called but before the container process is started\n\t// It is called in the Container Namespace\n\tStartContainer []Hook `json:\"startContainer,omitempty\"`\n\t// Poststart is a list of hooks to be run after the container process is started.\n\t// It is called in the Runtime Namespace\n\tPoststart []Hook `json:\"poststart,omitempty\"`\n\t// Poststop is a list of hooks to be run after the container process exits.\n\t// It is called in the Runtime Namespace\n\tPoststop []Hook `json:\"poststop,omitempty\"`\n}\n\n// Linux contains platform-specific configuration for Linux based containers.\ntype Linux struct {\n\t// UIDMapping specifies user mappings for supporting user namespaces.\n\tUIDMappings []LinuxIDMapping `json:\"uidMappings,omitempty\"`\n\t// GIDMapping specifies group mappings for supporting user namespaces.\n\tGIDMappings []LinuxIDMapping `json:\"gidMappings,omitempty\"`\n\t// Sysctl are a set of key value pairs that are set for the container on start\n\tSysctl map[string]string `json:\"sysctl,omitempty\"`\n\t// Resources contain cgroup information for handling resource constraints\n\t// for the container\n\tResources *LinuxResources `json:\"resources,omitempty\"`\n\t// CgroupsPath specifies the path to cgroups that are created and/or joined by the container.\n\t// The path is expected to be relative to the cgroups mountpoint.\n\t// If resources are specified, the cgroups at CgroupsPath will be updated based on resources.\n\tCgroupsPath string `json:\"cgroupsPath,omitempty\"`\n\t// Namespaces contains the namespaces that are created and/or joined by the container\n\tNamespaces []LinuxNamespace `json:\"namespaces,omitempty\"`\n\t// Devices are a list of device nodes that are created for the container\n\tDevices []LinuxDevice `json:\"devices,omitempty\"`\n\t// NetDevices are key-value pairs, keyed by network device name on the host, moved to the container's network namespace.\n\tNetDevices map[string]LinuxNetDevice `json:\"netDevices,omitempty\"`\n\t// Seccomp specifies the seccomp security settings for the container.\n\tSeccomp *LinuxSeccomp `json:\"seccomp,omitempty\"`\n\t// RootfsPropagation is the rootfs mount propagation mode for the container.\n\tRootfsPropagation string `json:\"rootfsPropagation,omitempty\"`\n\t// MaskedPaths masks over the provided paths inside the container.\n\tMaskedPaths []string `json:\"maskedPaths,omitempty\"`\n\t// ReadonlyPaths sets the provided paths as RO inside the container.\n\tReadonlyPaths []string `json:\"readonlyPaths,omitempty\"`\n\t// MountLabel specifies the selinux context for the mounts in the container.\n\tMountLabel string `json:\"mountLabel,omitempty\"`\n\t// IntelRdt contains Intel Resource Director Technology (RDT) information for\n\t// handling resource constraints and monitoring metrics (e.g., L3 cache, memory bandwidth) for the container\n\tIntelRdt *LinuxIntelRdt `json:\"intelRdt,omitempty\"`\n\t// MemoryPolicy contains NUMA memory policy for the container.\n\tMemoryPolicy *LinuxMemoryPolicy `json:\"memoryPolicy,omitempty\"`\n\t// Personality contains configuration for the Linux personality syscall\n\tPersonality *LinuxPersonality `json:\"personality,omitempty\"`\n\t// TimeOffsets specifies the offset for supporting time namespaces.\n\tTimeOffsets map[string]LinuxTimeOffset `json:\"timeOffsets,omitempty\"`\n}\n\n// LinuxNamespace is the configuration for a Linux namespace\ntype LinuxNamespace struct {\n\t// Type is the type of namespace\n\tType LinuxNamespaceType `json:\"type\"`\n\t// Path is a path to an existing namespace persisted on disk that can be joined\n\t// and is of the same type\n\tPath string `json:\"path,omitempty\"`\n}\n\n// LinuxNamespaceType is one of the Linux namespaces\ntype LinuxNamespaceType string\n\nconst (\n\t// PIDNamespace for isolating process IDs\n\tPIDNamespace LinuxNamespaceType = \"pid\"\n\t// NetworkNamespace for isolating network devices, stacks, ports, etc\n\tNetworkNamespace LinuxNamespaceType = \"network\"\n\t// MountNamespace for isolating mount points\n\tMountNamespace LinuxNamespaceType = \"mount\"\n\t// IPCNamespace for isolating System V IPC, POSIX message queues\n\tIPCNamespace LinuxNamespaceType = \"ipc\"\n\t// UTSNamespace for isolating hostname and NIS domain name\n\tUTSNamespace LinuxNamespaceType = \"uts\"\n\t// UserNamespace for isolating user and group IDs\n\tUserNamespace LinuxNamespaceType = \"user\"\n\t// CgroupNamespace for isolating cgroup hierarchies\n\tCgroupNamespace LinuxNamespaceType = \"cgroup\"\n\t// TimeNamespace for isolating the clocks\n\tTimeNamespace LinuxNamespaceType = \"time\"\n)\n\n// LinuxIDMapping specifies UID/GID mappings\ntype LinuxIDMapping struct {\n\t// ContainerID is the starting UID/GID in the container\n\tContainerID uint32 `json:\"containerID\"`\n\t// HostID is the starting UID/GID on the host to be mapped to 'ContainerID'\n\tHostID uint32 `json:\"hostID\"`\n\t// Size is the number of IDs to be mapped\n\tSize uint32 `json:\"size\"`\n}\n\n// LinuxTimeOffset specifies the offset for Time Namespace\ntype LinuxTimeOffset struct {\n\t// Secs is the offset of clock (in secs) in the container\n\tSecs int64 `json:\"secs,omitempty\"`\n\t// Nanosecs is the additional offset for Secs (in nanosecs)\n\tNanosecs uint32 `json:\"nanosecs,omitempty\"`\n}\n\n// POSIXRlimit type and restrictions\ntype POSIXRlimit struct {\n\t// Type of the rlimit to set\n\tType string `json:\"type\"`\n\t// Hard is the hard limit for the specified type\n\tHard uint64 `json:\"hard\"`\n\t// Soft is the soft limit for the specified type\n\tSoft uint64 `json:\"soft\"`\n}\n\n// LinuxHugepageLimit structure corresponds to limiting kernel hugepages.\n// Default to reservation limits if supported. Otherwise fallback to page fault limits.\ntype LinuxHugepageLimit struct {\n\t// Pagesize is the hugepage size.\n\t// Format: \"<size><unit-prefix>B' (e.g. 64KB, 2MB, 1GB, etc.).\n\tPagesize string `json:\"pageSize\"`\n\t// Limit is the limit of \"hugepagesize\" hugetlb reservations (if supported) or usage.\n\tLimit uint64 `json:\"limit\"`\n}\n\n// LinuxInterfacePriority for network interfaces\ntype LinuxInterfacePriority struct {\n\t// Name is the name of the network interface\n\tName string `json:\"name\"`\n\t// Priority for the interface\n\tPriority uint32 `json:\"priority\"`\n}\n\n// LinuxBlockIODevice holds major:minor format supported in blkio cgroup\ntype LinuxBlockIODevice struct {\n\t// Major is the device's major number.\n\tMajor int64 `json:\"major\"`\n\t// Minor is the device's minor number.\n\tMinor int64 `json:\"minor\"`\n}\n\n// LinuxWeightDevice struct holds a `major:minor weight` pair for weightDevice\ntype LinuxWeightDevice struct {\n\tLinuxBlockIODevice\n\t// Weight is the bandwidth rate for the device.\n\tWeight *uint16 `json:\"weight,omitempty\"`\n\t// LeafWeight is the bandwidth rate for the device while competing with the cgroup's child cgroups, CFQ scheduler only\n\tLeafWeight *uint16 `json:\"leafWeight,omitempty\"`\n}\n\n// LinuxThrottleDevice struct holds a `major:minor rate_per_second` pair\ntype LinuxThrottleDevice struct {\n\tLinuxBlockIODevice\n\t// Rate is the IO rate limit per cgroup per device\n\tRate uint64 `json:\"rate\"`\n}\n\n// LinuxBlockIO for Linux cgroup 'blkio' resource management\ntype LinuxBlockIO struct {\n\t// Specifies per cgroup weight\n\tWeight *uint16 `json:\"weight,omitempty\"`\n\t// Specifies tasks' weight in the given cgroup while competing with the cgroup's child cgroups, CFQ scheduler only\n\tLeafWeight *uint16 `json:\"leafWeight,omitempty\"`\n\t// Weight per cgroup per device, can override BlkioWeight\n\tWeightDevice []LinuxWeightDevice `json:\"weightDevice,omitempty\"`\n\t// IO read rate limit per cgroup per device, bytes per second\n\tThrottleReadBpsDevice []LinuxThrottleDevice `json:\"throttleReadBpsDevice,omitempty\"`\n\t// IO write rate limit per cgroup per device, bytes per second\n\tThrottleWriteBpsDevice []LinuxThrottleDevice `json:\"throttleWriteBpsDevice,omitempty\"`\n\t// IO read rate limit per cgroup per device, IO per second\n\tThrottleReadIOPSDevice []LinuxThrottleDevice `json:\"throttleReadIOPSDevice,omitempty\"`\n\t// IO write rate limit per cgroup per device, IO per second\n\tThrottleWriteIOPSDevice []LinuxThrottleDevice `json:\"throttleWriteIOPSDevice,omitempty\"`\n}\n\n// LinuxMemory for Linux cgroup 'memory' resource management\ntype LinuxMemory struct {\n\t// Memory limit (in bytes).\n\tLimit *int64 `json:\"limit,omitempty\"`\n\t// Memory reservation or soft_limit (in bytes).\n\tReservation *int64 `json:\"reservation,omitempty\"`\n\t// Total memory limit (memory + swap).\n\tSwap *int64 `json:\"swap,omitempty\"`\n\t// Kernel memory limit (in bytes).\n\t//\n\t// Deprecated: kernel-memory limits are not supported in cgroups v2, and\n\t// were obsoleted in [kernel v5.4]. This field should no longer be used,\n\t// as it may be ignored by runtimes.\n\t//\n\t// [kernel v5.4]: https://github.com/torvalds/linux/commit/0158115f702b0ba208ab0\n\tKernel *int64 `json:\"kernel,omitempty\"`\n\t// Kernel memory limit for tcp (in bytes)\n\tKernelTCP *int64 `json:\"kernelTCP,omitempty\"`\n\t// How aggressive the kernel will swap memory pages.\n\tSwappiness *uint64 `json:\"swappiness,omitempty\"`\n\t// DisableOOMKiller disables the OOM killer for out of memory conditions\n\tDisableOOMKiller *bool `json:\"disableOOMKiller,omitempty\"`\n\t// Enables hierarchical memory accounting\n\tUseHierarchy *bool `json:\"useHierarchy,omitempty\"`\n\t// CheckBeforeUpdate enables checking if a new memory limit is lower\n\t// than the current usage during update, and if so, rejecting the new\n\t// limit.\n\tCheckBeforeUpdate *bool `json:\"checkBeforeUpdate,omitempty\"`\n}\n\n// LinuxCPU for Linux cgroup 'cpu' resource management\ntype LinuxCPU struct {\n\t// CPU shares (relative weight (ratio) vs. other cgroups with cpu shares).\n\tShares *uint64 `json:\"shares,omitempty\"`\n\t// CPU hardcap limit (in usecs). Allowed cpu time in a given period.\n\tQuota *int64 `json:\"quota,omitempty\"`\n\t// CPU hardcap burst limit (in usecs). Allowed accumulated cpu time additionally for burst in a\n\t// given period.\n\tBurst *uint64 `json:\"burst,omitempty\"`\n\t// CPU period to be used for hardcapping (in usecs).\n\tPeriod *uint64 `json:\"period,omitempty\"`\n\t// How much time realtime scheduling may use (in usecs).\n\tRealtimeRuntime *int64 `json:\"realtimeRuntime,omitempty\"`\n\t// CPU period to be used for realtime scheduling (in usecs).\n\tRealtimePeriod *uint64 `json:\"realtimePeriod,omitempty\"`\n\t// CPUs to use within the cpuset. Default is to use any CPU available.\n\tCpus string `json:\"cpus,omitempty\"`\n\t// List of memory nodes in the cpuset. Default is to use any available memory node.\n\tMems string `json:\"mems,omitempty\"`\n\t// cgroups are configured with minimum weight, 0: default behavior, 1: SCHED_IDLE.\n\tIdle *int64 `json:\"idle,omitempty\"`\n}\n\n// LinuxPids for Linux cgroup 'pids' resource management (Linux 4.3)\ntype LinuxPids struct {\n\t// Maximum number of PIDs. Default is \"no limit\".\n\tLimit *int64 `json:\"limit,omitempty\"`\n}\n\n// LinuxNetwork identification and priority configuration\ntype LinuxNetwork struct {\n\t// Set class identifier for container's network packets\n\tClassID *uint32 `json:\"classID,omitempty\"`\n\t// Set priority of network traffic for container\n\tPriorities []LinuxInterfacePriority `json:\"priorities,omitempty\"`\n}\n\n// LinuxRdma for Linux cgroup 'rdma' resource management (Linux 4.11)\ntype LinuxRdma struct {\n\t// Maximum number of HCA handles that can be opened. Default is \"no limit\".\n\tHcaHandles *uint32 `json:\"hcaHandles,omitempty\"`\n\t// Maximum number of HCA objects that can be created. Default is \"no limit\".\n\tHcaObjects *uint32 `json:\"hcaObjects,omitempty\"`\n}\n\n// LinuxResources has container runtime resource constraints\ntype LinuxResources struct {\n\t// Devices configures the device allowlist.\n\tDevices []LinuxDeviceCgroup `json:\"devices,omitempty\"`\n\t// Memory restriction configuration\n\tMemory *LinuxMemory `json:\"memory,omitempty\"`\n\t// CPU resource restriction configuration\n\tCPU *LinuxCPU `json:\"cpu,omitempty\"`\n\t// Task resource restriction configuration.\n\tPids *LinuxPids `json:\"pids,omitempty\"`\n\t// BlockIO restriction configuration\n\tBlockIO *LinuxBlockIO `json:\"blockIO,omitempty\"`\n\t// Hugetlb limits (in bytes). Default to reservation limits if supported.\n\tHugepageLimits []LinuxHugepageLimit `json:\"hugepageLimits,omitempty\"`\n\t// Network restriction configuration\n\tNetwork *LinuxNetwork `json:\"network,omitempty\"`\n\t// Rdma resource restriction configuration.\n\t// Limits are a set of key value pairs that define RDMA resource limits,\n\t// where the key is device name and value is resource limits.\n\tRdma map[string]LinuxRdma `json:\"rdma,omitempty\"`\n\t// Unified resources.\n\tUnified map[string]string `json:\"unified,omitempty\"`\n}\n\n// LinuxDevice represents the mknod information for a Linux special device file\ntype LinuxDevice struct {\n\t// Path to the device.\n\tPath string `json:\"path\"`\n\t// Device type, block, char, etc.\n\tType string `json:\"type\"`\n\t// Major is the device's major number.\n\tMajor int64 `json:\"major\"`\n\t// Minor is the device's minor number.\n\tMinor int64 `json:\"minor\"`\n\t// FileMode permission bits for the device.\n\tFileMode *os.FileMode `json:\"fileMode,omitempty\"`\n\t// UID of the device.\n\tUID *uint32 `json:\"uid,omitempty\"`\n\t// Gid of the device.\n\tGID *uint32 `json:\"gid,omitempty\"`\n}\n\n// LinuxNetDevice represents a single network device to be added to the container's network namespace\ntype LinuxNetDevice struct {\n\t// Name of the device in the container namespace\n\tName string `json:\"name,omitempty\"`\n}\n\n// LinuxDeviceCgroup represents a device rule for the devices specified to\n// the device controller\ntype LinuxDeviceCgroup struct {\n\t// Allow or deny\n\tAllow bool `json:\"allow\"`\n\t// Device type, block, char, etc.\n\tType string `json:\"type,omitempty\"`\n\t// Major is the device's major number.\n\tMajor *int64 `json:\"major,omitempty\"`\n\t// Minor is the device's minor number.\n\tMinor *int64 `json:\"minor,omitempty\"`\n\t// Cgroup access permissions format, rwm.\n\tAccess string `json:\"access,omitempty\"`\n}\n\n// LinuxPersonalityDomain refers to a personality domain.\ntype LinuxPersonalityDomain string\n\n// LinuxPersonalityFlag refers to an additional personality flag. None are currently defined.\ntype LinuxPersonalityFlag string\n\n// Define domain and flags for Personality\nconst (\n\t// PerLinux is the standard Linux personality\n\tPerLinux LinuxPersonalityDomain = \"LINUX\"\n\t// PerLinux32 sets personality to 32 bit\n\tPerLinux32 LinuxPersonalityDomain = \"LINUX32\"\n)\n\n// LinuxPersonality represents the Linux personality syscall input\ntype LinuxPersonality struct {\n\t// Domain for the personality\n\tDomain LinuxPersonalityDomain `json:\"domain\"`\n\t// Additional flags\n\tFlags []LinuxPersonalityFlag `json:\"flags,omitempty\"`\n}\n\n// Solaris contains platform-specific configuration for Solaris application containers.\ntype Solaris struct {\n\t// SMF FMRI which should go \"online\" before we start the container process.\n\tMilestone string `json:\"milestone,omitempty\"`\n\t// Maximum set of privileges any process in this container can obtain.\n\tLimitPriv string `json:\"limitpriv,omitempty\"`\n\t// The maximum amount of shared memory allowed for this container.\n\tMaxShmMemory string `json:\"maxShmMemory,omitempty\"`\n\t// Specification for automatic creation of network resources for this container.\n\tAnet []SolarisAnet `json:\"anet,omitempty\"`\n\t// Set limit on the amount of CPU time that can be used by container.\n\tCappedCPU *SolarisCappedCPU `json:\"cappedCPU,omitempty\"`\n\t// The physical and swap caps on the memory that can be used by this container.\n\tCappedMemory *SolarisCappedMemory `json:\"cappedMemory,omitempty\"`\n}\n\n// SolarisCappedCPU allows users to set limit on the amount of CPU time that can be used by container.\ntype SolarisCappedCPU struct {\n\tNcpus string `json:\"ncpus,omitempty\"`\n}\n\n// SolarisCappedMemory allows users to set the physical and swap caps on the memory that can be used by this container.\ntype SolarisCappedMemory struct {\n\tPhysical string `json:\"physical,omitempty\"`\n\tSwap     string `json:\"swap,omitempty\"`\n}\n\n// SolarisAnet provides the specification for automatic creation of network resources for this container.\ntype SolarisAnet struct {\n\t// Specify a name for the automatically created VNIC datalink.\n\tLinkname string `json:\"linkname,omitempty\"`\n\t// Specify the link over which the VNIC will be created.\n\tLowerlink string `json:\"lowerLink,omitempty\"`\n\t// The set of IP addresses that the container can use.\n\tAllowedaddr string `json:\"allowedAddress,omitempty\"`\n\t// Specifies whether allowedAddress limitation is to be applied to the VNIC.\n\tConfigallowedaddr string `json:\"configureAllowedAddress,omitempty\"`\n\t// The value of the optional default router.\n\tDefrouter string `json:\"defrouter,omitempty\"`\n\t// Enable one or more types of link protection.\n\tLinkprotection string `json:\"linkProtection,omitempty\"`\n\t// Set the VNIC's macAddress\n\tMacaddress string `json:\"macAddress,omitempty\"`\n}\n\n// Windows defines the runtime configuration for Windows based containers, including Hyper-V containers.\ntype Windows struct {\n\t// LayerFolders contains a list of absolute paths to directories containing image layers.\n\tLayerFolders []string `json:\"layerFolders\"`\n\t// Devices are the list of devices to be mapped into the container.\n\tDevices []WindowsDevice `json:\"devices,omitempty\"`\n\t// Resources contains information for handling resource constraints for the container.\n\tResources *WindowsResources `json:\"resources,omitempty\"`\n\t// CredentialSpec contains a JSON object describing a group Managed Service Account (gMSA) specification.\n\tCredentialSpec interface{} `json:\"credentialSpec,omitempty\"`\n\t// Servicing indicates if the container is being started in a mode to apply a Windows Update servicing operation.\n\tServicing bool `json:\"servicing,omitempty\"`\n\t// IgnoreFlushesDuringBoot indicates if the container is being started in a mode where disk writes are not flushed during its boot process.\n\tIgnoreFlushesDuringBoot bool `json:\"ignoreFlushesDuringBoot,omitempty\"`\n\t// HyperV contains information for running a container with Hyper-V isolation.\n\tHyperV *WindowsHyperV `json:\"hyperv,omitempty\"`\n\t// Network restriction configuration.\n\tNetwork *WindowsNetwork `json:\"network,omitempty\"`\n}\n\n// WindowsDevice represents information about a host device to be mapped into the container.\ntype WindowsDevice struct {\n\t// Device identifier: interface class GUID, etc.\n\tID string `json:\"id\"`\n\t// Device identifier type: \"class\", etc.\n\tIDType string `json:\"idType\"`\n}\n\n// WindowsResources has container runtime resource constraints for containers running on Windows.\ntype WindowsResources struct {\n\t// Memory restriction configuration.\n\tMemory *WindowsMemoryResources `json:\"memory,omitempty\"`\n\t// CPU resource restriction configuration.\n\tCPU *WindowsCPUResources `json:\"cpu,omitempty\"`\n\t// Storage restriction configuration.\n\tStorage *WindowsStorageResources `json:\"storage,omitempty\"`\n}\n\n// WindowsMemoryResources contains memory resource management settings.\ntype WindowsMemoryResources struct {\n\t// Memory limit in bytes.\n\tLimit *uint64 `json:\"limit,omitempty\"`\n}\n\n// WindowsCPUResources contains CPU resource management settings.\ntype WindowsCPUResources struct {\n\t// Count is the number of CPUs available to the container. It represents the\n\t// fraction of the configured processor `count` in a container in relation\n\t// to the processors available in the host. The fraction ultimately\n\t// determines the portion of processor cycles that the threads in a\n\t// container can use during each scheduling interval, as the number of\n\t// cycles per 10,000 cycles.\n\tCount *uint64 `json:\"count,omitempty\"`\n\t// Shares limits the share of processor time given to the container relative\n\t// to other workloads on the processor. The processor `shares` (`weight` at\n\t// the platform level) is a value between 0 and 10000.\n\tShares *uint16 `json:\"shares,omitempty\"`\n\t// Maximum determines the portion of processor cycles that the threads in a\n\t// container can use during each scheduling interval, as the number of\n\t// cycles per 10,000 cycles. Set processor `maximum` to a percentage times\n\t// 100.\n\tMaximum *uint16 `json:\"maximum,omitempty\"`\n\t// Set of CPUs to affinitize for this container.\n\tAffinity []WindowsCPUGroupAffinity `json:\"affinity,omitempty\"`\n}\n\n// Similar to _GROUP_AFFINITY struct defined in\n// https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/miniport/ns-miniport-_group_affinity\ntype WindowsCPUGroupAffinity struct {\n\t// CPU mask relative to this CPU group.\n\tMask uint64 `json:\"mask,omitempty\"`\n\t// Processor group the mask refers to, as returned by GetLogicalProcessorInformationEx.\n\tGroup uint32 `json:\"group,omitempty\"`\n}\n\n// WindowsStorageResources contains storage resource management settings.\ntype WindowsStorageResources struct {\n\t// Specifies maximum Iops for the system drive.\n\tIops *uint64 `json:\"iops,omitempty\"`\n\t// Specifies maximum bytes per second for the system drive.\n\tBps *uint64 `json:\"bps,omitempty\"`\n\t// Sandbox size specifies the minimum size of the system drive in bytes.\n\tSandboxSize *uint64 `json:\"sandboxSize,omitempty\"`\n}\n\n// WindowsNetwork contains network settings for Windows containers.\ntype WindowsNetwork struct {\n\t// List of HNS endpoints that the container should connect to.\n\tEndpointList []string `json:\"endpointList,omitempty\"`\n\t// Specifies if unqualified DNS name resolution is allowed.\n\tAllowUnqualifiedDNSQuery bool `json:\"allowUnqualifiedDNSQuery,omitempty\"`\n\t// Comma separated list of DNS suffixes to use for name resolution.\n\tDNSSearchList []string `json:\"DNSSearchList,omitempty\"`\n\t// Name (ID) of the container that we will share with the network stack.\n\tNetworkSharedContainerName string `json:\"networkSharedContainerName,omitempty\"`\n\t// name (ID) of the network namespace that will be used for the container.\n\tNetworkNamespace string `json:\"networkNamespace,omitempty\"`\n}\n\n// WindowsHyperV contains information for configuring a container to run with Hyper-V isolation.\ntype WindowsHyperV struct {\n\t// UtilityVMPath is an optional path to the image used for the Utility VM.\n\tUtilityVMPath string `json:\"utilityVMPath,omitempty\"`\n}\n\n// IOMems contains information about iomem addresses that should be passed to the VM.\ntype IOMems struct {\n\t// Guest Frame Number to map the iomem range. If GFN is not specified, the mapping will be done to the same Frame Number as was provided in FirstMFN.\n\tFirstGFN *uint64 `json:\"firstGFN,omitempty\"`\n\t// Physical page number of iomem regions.\n\tFirstMFN *uint64 `json:\"firstMFN\"`\n\t// Number of pages to be mapped.\n\tNrMFNs *uint64 `json:\"nrMFNs\"`\n}\n\n// Hardware configuration for the VM image\ntype HWConfig struct {\n\t// Path to the container device-tree file that should be passed to the VM configuration.\n\tDeviceTree string `json:\"deviceTree,omitempty\"`\n\t// Number of virtual cpus for the VM.\n\tVCPUs *uint32 `json:\"vcpus,omitempty\"`\n\t// Maximum memory in bytes allocated to the VM.\n\tMemory *uint64 `json:\"memory,omitempty\"`\n\t// Host device tree nodes to passthrough to the VM.\n\tDtDevs []string `json:\"dtdevs,omitempty\"`\n\t// Allow auto-translated domains to access specific hardware I/O memory pages.\n\tIOMems []IOMems `json:\"iomems,omitempty\"`\n\t// Allows VM to access specific physical IRQs.\n\tIrqs []uint32 `json:\"irqs,omitempty\"`\n}\n\n// VM contains information for virtual-machine-based containers.\ntype VM struct {\n\t// Hypervisor specifies hypervisor-related configuration for virtual-machine-based containers.\n\tHypervisor VMHypervisor `json:\"hypervisor,omitempty\"`\n\t// Kernel specifies kernel-related configuration for virtual-machine-based containers.\n\tKernel VMKernel `json:\"kernel\"`\n\t// Image specifies guest image related configuration for virtual-machine-based containers.\n\tImage VMImage `json:\"image,omitempty\"`\n\t// Hardware configuration that should be passed to the VM.\n\tHwConfig *HWConfig `json:\"hwconfig,omitempty\"`\n}\n\n// VMHypervisor contains information about the hypervisor to use for a virtual machine.\ntype VMHypervisor struct {\n\t// Path is the host path to the hypervisor used to manage the virtual machine.\n\tPath string `json:\"path\"`\n\t// Parameters specifies parameters to pass to the hypervisor.\n\tParameters []string `json:\"parameters,omitempty\"`\n}\n\n// VMKernel contains information about the kernel to use for a virtual machine.\ntype VMKernel struct {\n\t// Path is the host path to the kernel used to boot the virtual machine.\n\tPath string `json:\"path\"`\n\t// Parameters specifies parameters to pass to the kernel.\n\tParameters []string `json:\"parameters,omitempty\"`\n\t// InitRD is the host path to an initial ramdisk to be used by the kernel.\n\tInitRD string `json:\"initrd,omitempty\"`\n}\n\n// VMImage contains information about the virtual machine root image.\ntype VMImage struct {\n\t// Path is the host path to the root image that the VM kernel would boot into.\n\tPath string `json:\"path\"`\n\t// Format is the root image format type (e.g. \"qcow2\", \"raw\", \"vhd\", etc).\n\tFormat string `json:\"format\"`\n}\n\n// LinuxSeccomp represents syscall restrictions\ntype LinuxSeccomp struct {\n\tDefaultAction    LinuxSeccompAction `json:\"defaultAction\"`\n\tDefaultErrnoRet  *uint              `json:\"defaultErrnoRet,omitempty\"`\n\tArchitectures    []Arch             `json:\"architectures,omitempty\"`\n\tFlags            []LinuxSeccompFlag `json:\"flags,omitempty\"`\n\tListenerPath     string             `json:\"listenerPath,omitempty\"`\n\tListenerMetadata string             `json:\"listenerMetadata,omitempty\"`\n\tSyscalls         []LinuxSyscall     `json:\"syscalls,omitempty\"`\n}\n\n// Arch used for additional architectures\ntype Arch string\n\n// LinuxSeccompFlag is a flag to pass to seccomp(2).\ntype LinuxSeccompFlag string\n\nconst (\n\t// LinuxSeccompFlagLog is a seccomp flag to request all returned\n\t// actions except SECCOMP_RET_ALLOW to be logged. An administrator may\n\t// override this filter flag by preventing specific actions from being\n\t// logged via the /proc/sys/kernel/seccomp/actions_logged file. (since\n\t// Linux 4.14)\n\tLinuxSeccompFlagLog LinuxSeccompFlag = \"SECCOMP_FILTER_FLAG_LOG\"\n\n\t// LinuxSeccompFlagSpecAllow can be used to disable Speculative Store\n\t// Bypass mitigation. (since Linux 4.17)\n\tLinuxSeccompFlagSpecAllow LinuxSeccompFlag = \"SECCOMP_FILTER_FLAG_SPEC_ALLOW\"\n\n\t// LinuxSeccompFlagWaitKillableRecv can be used to switch to the wait\n\t// killable semantics. (since Linux 5.19)\n\tLinuxSeccompFlagWaitKillableRecv LinuxSeccompFlag = \"SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV\"\n)\n\n// Additional architectures permitted to be used for system calls\n// By default only the native architecture of the kernel is permitted\nconst (\n\tArchX86         Arch = \"SCMP_ARCH_X86\"\n\tArchX86_64      Arch = \"SCMP_ARCH_X86_64\"\n\tArchX32         Arch = \"SCMP_ARCH_X32\"\n\tArchARM         Arch = \"SCMP_ARCH_ARM\"\n\tArchAARCH64     Arch = \"SCMP_ARCH_AARCH64\"\n\tArchMIPS        Arch = \"SCMP_ARCH_MIPS\"\n\tArchMIPS64      Arch = \"SCMP_ARCH_MIPS64\"\n\tArchMIPS64N32   Arch = \"SCMP_ARCH_MIPS64N32\"\n\tArchMIPSEL      Arch = \"SCMP_ARCH_MIPSEL\"\n\tArchMIPSEL64    Arch = \"SCMP_ARCH_MIPSEL64\"\n\tArchMIPSEL64N32 Arch = \"SCMP_ARCH_MIPSEL64N32\"\n\tArchPPC         Arch = \"SCMP_ARCH_PPC\"\n\tArchPPC64       Arch = \"SCMP_ARCH_PPC64\"\n\tArchPPC64LE     Arch = \"SCMP_ARCH_PPC64LE\"\n\tArchS390        Arch = \"SCMP_ARCH_S390\"\n\tArchS390X       Arch = \"SCMP_ARCH_S390X\"\n\tArchPARISC      Arch = \"SCMP_ARCH_PARISC\"\n\tArchPARISC64    Arch = \"SCMP_ARCH_PARISC64\"\n\tArchRISCV64     Arch = \"SCMP_ARCH_RISCV64\"\n\tArchLOONGARCH64 Arch = \"SCMP_ARCH_LOONGARCH64\"\n\tArchM68K        Arch = \"SCMP_ARCH_M68K\"\n\tArchSH          Arch = \"SCMP_ARCH_SH\"\n\tArchSHEB        Arch = \"SCMP_ARCH_SHEB\"\n)\n\n// LinuxSeccompAction taken upon Seccomp rule match\ntype LinuxSeccompAction string\n\n// Define actions for Seccomp rules\nconst (\n\tActKill        LinuxSeccompAction = \"SCMP_ACT_KILL\"\n\tActKillProcess LinuxSeccompAction = \"SCMP_ACT_KILL_PROCESS\"\n\tActKillThread  LinuxSeccompAction = \"SCMP_ACT_KILL_THREAD\"\n\tActTrap        LinuxSeccompAction = \"SCMP_ACT_TRAP\"\n\tActErrno       LinuxSeccompAction = \"SCMP_ACT_ERRNO\"\n\tActTrace       LinuxSeccompAction = \"SCMP_ACT_TRACE\"\n\tActAllow       LinuxSeccompAction = \"SCMP_ACT_ALLOW\"\n\tActLog         LinuxSeccompAction = \"SCMP_ACT_LOG\"\n\tActNotify      LinuxSeccompAction = \"SCMP_ACT_NOTIFY\"\n)\n\n// LinuxSeccompOperator used to match syscall arguments in Seccomp\ntype LinuxSeccompOperator string\n\n// Define operators for syscall arguments in Seccomp\nconst (\n\tOpNotEqual     LinuxSeccompOperator = \"SCMP_CMP_NE\"\n\tOpLessThan     LinuxSeccompOperator = \"SCMP_CMP_LT\"\n\tOpLessEqual    LinuxSeccompOperator = \"SCMP_CMP_LE\"\n\tOpEqualTo      LinuxSeccompOperator = \"SCMP_CMP_EQ\"\n\tOpGreaterEqual LinuxSeccompOperator = \"SCMP_CMP_GE\"\n\tOpGreaterThan  LinuxSeccompOperator = \"SCMP_CMP_GT\"\n\tOpMaskedEqual  LinuxSeccompOperator = \"SCMP_CMP_MASKED_EQ\"\n)\n\n// LinuxSeccompArg used for matching specific syscall arguments in Seccomp\ntype LinuxSeccompArg struct {\n\tIndex    uint                 `json:\"index\"`\n\tValue    uint64               `json:\"value\"`\n\tValueTwo uint64               `json:\"valueTwo,omitempty\"`\n\tOp       LinuxSeccompOperator `json:\"op\"`\n}\n\n// LinuxSyscall is used to match a syscall in Seccomp\ntype LinuxSyscall struct {\n\tNames    []string           `json:\"names\"`\n\tAction   LinuxSeccompAction `json:\"action\"`\n\tErrnoRet *uint              `json:\"errnoRet,omitempty\"`\n\tArgs     []LinuxSeccompArg  `json:\"args,omitempty\"`\n}\n\n// LinuxIntelRdt has container runtime resource constraints for Intel RDT CAT and MBA\n// features and flags enabling Intel RDT CMT and MBM features.\n// Intel RDT features are available in Linux 4.14 and newer kernel versions.\ntype LinuxIntelRdt struct {\n\t// The identity for RDT Class of Service\n\tClosID string `json:\"closID,omitempty\"`\n\n\t// Schemata specifies the complete schemata to be written as is to the\n\t// schemata file in resctrl fs. Each element represents a single line in the schemata file.\n\t// NOTE: This will overwrite schemas specified in the L3CacheSchema and/or\n\t// MemBwSchema fields.\n\tSchemata []string `json:\"schemata,omitempty\"`\n\n\t// The schema for L3 cache id and capacity bitmask (CBM)\n\t// Format: \"L3:<cache_id0>=<cbm0>;<cache_id1>=<cbm1>;...\"\n\t// NOTE: Should not be specified if Schemata is non-empty.\n\tL3CacheSchema string `json:\"l3CacheSchema,omitempty\"`\n\n\t// The schema of memory bandwidth per L3 cache id\n\t// Format: \"MB:<cache_id0>=bandwidth0;<cache_id1>=bandwidth1;...\"\n\t// The unit of memory bandwidth is specified in \"percentages\" by\n\t// default, and in \"MBps\" if MBA Software Controller is enabled.\n\t// NOTE: Should not be specified if Schemata is non-empty.\n\tMemBwSchema string `json:\"memBwSchema,omitempty\"`\n\n\t// EnableMonitoring enables resctrl monitoring for the container. This will\n\t// create a dedicated resctrl monitoring group for the container.\n\tEnableMonitoring bool `json:\"enableMonitoring,omitempty\"`\n}\n\n// LinuxMemoryPolicy represents input for the set_mempolicy syscall.\ntype LinuxMemoryPolicy struct {\n\t// Mode for the set_mempolicy syscall.\n\tMode MemoryPolicyModeType `json:\"mode\"`\n\n\t// Nodes representing the nodemask for the set_mempolicy syscall in comma separated ranges format.\n\t// Format: \"<node0>-<node1>,<node2>,<node3>-<node4>,...\"\n\tNodes string `json:\"nodes\"`\n\n\t// Flags for the set_mempolicy syscall.\n\tFlags []MemoryPolicyFlagType `json:\"flags,omitempty\"`\n}\n\n// ZOS contains platform-specific configuration for z/OS based containers.\ntype ZOS struct {\n\t// Namespaces contains the namespaces that are created and/or joined by the container\n\tNamespaces []ZOSNamespace `json:\"namespaces,omitempty\"`\n}\n\n// ZOSNamespace is the configuration for a z/OS namespace\ntype ZOSNamespace struct {\n\t// Type is the type of namespace\n\tType ZOSNamespaceType `json:\"type\"`\n\t// Path is a path to an existing namespace persisted on disk that can be joined\n\t// and is of the same type\n\tPath string `json:\"path,omitempty\"`\n}\n\n// ZOSNamespaceType is one of the z/OS namespaces\ntype ZOSNamespaceType string\n\nconst (\n\t// PIDNamespace for isolating process IDs\n\tZOSPIDNamespace ZOSNamespaceType = \"pid\"\n\t// MountNamespace for isolating mount points\n\tZOSMountNamespace ZOSNamespaceType = \"mount\"\n\t// IPCNamespace for isolating System V IPC, POSIX message queues\n\tZOSIPCNamespace ZOSNamespaceType = \"ipc\"\n\t// UTSNamespace for isolating hostname and NIS domain name\n\tZOSUTSNamespace ZOSNamespaceType = \"uts\"\n)\n\ntype MemoryPolicyModeType string\n\nconst (\n\tMpolDefault            MemoryPolicyModeType = \"MPOL_DEFAULT\"\n\tMpolBind               MemoryPolicyModeType = \"MPOL_BIND\"\n\tMpolInterleave         MemoryPolicyModeType = \"MPOL_INTERLEAVE\"\n\tMpolWeightedInterleave MemoryPolicyModeType = \"MPOL_WEIGHTED_INTERLEAVE\"\n\tMpolPreferred          MemoryPolicyModeType = \"MPOL_PREFERRED\"\n\tMpolPreferredMany      MemoryPolicyModeType = \"MPOL_PREFERRED_MANY\"\n\tMpolLocal              MemoryPolicyModeType = \"MPOL_LOCAL\"\n)\n\ntype MemoryPolicyFlagType string\n\nconst (\n\tMpolFNumaBalancing MemoryPolicyFlagType = \"MPOL_F_NUMA_BALANCING\"\n\tMpolFRelativeNodes MemoryPolicyFlagType = \"MPOL_F_RELATIVE_NODES\"\n\tMpolFStaticNodes   MemoryPolicyFlagType = \"MPOL_F_STATIC_NODES\"\n)\n\n// LinuxSchedulerPolicy represents different scheduling policies used with the Linux Scheduler\ntype LinuxSchedulerPolicy string\n\nconst (\n\t// SchedOther is the default scheduling policy\n\tSchedOther LinuxSchedulerPolicy = \"SCHED_OTHER\"\n\t// SchedFIFO is the First-In-First-Out scheduling policy\n\tSchedFIFO LinuxSchedulerPolicy = \"SCHED_FIFO\"\n\t// SchedRR is the Round-Robin scheduling policy\n\tSchedRR LinuxSchedulerPolicy = \"SCHED_RR\"\n\t// SchedBatch is the Batch scheduling policy\n\tSchedBatch LinuxSchedulerPolicy = \"SCHED_BATCH\"\n\t// SchedISO is the Isolation scheduling policy\n\tSchedISO LinuxSchedulerPolicy = \"SCHED_ISO\"\n\t// SchedIdle is the Idle scheduling policy\n\tSchedIdle LinuxSchedulerPolicy = \"SCHED_IDLE\"\n\t// SchedDeadline is the Deadline scheduling policy\n\tSchedDeadline LinuxSchedulerPolicy = \"SCHED_DEADLINE\"\n)\n\n// LinuxSchedulerFlag represents the flags used by the Linux Scheduler.\ntype LinuxSchedulerFlag string\n\nconst (\n\t// SchedFlagResetOnFork represents the reset on fork scheduling flag\n\tSchedFlagResetOnFork LinuxSchedulerFlag = \"SCHED_FLAG_RESET_ON_FORK\"\n\t// SchedFlagReclaim represents the reclaim scheduling flag\n\tSchedFlagReclaim LinuxSchedulerFlag = \"SCHED_FLAG_RECLAIM\"\n\t// SchedFlagDLOverrun represents the deadline overrun scheduling flag\n\tSchedFlagDLOverrun LinuxSchedulerFlag = \"SCHED_FLAG_DL_OVERRUN\"\n\t// SchedFlagKeepPolicy represents the keep policy scheduling flag\n\tSchedFlagKeepPolicy LinuxSchedulerFlag = \"SCHED_FLAG_KEEP_POLICY\"\n\t// SchedFlagKeepParams represents the keep parameters scheduling flag\n\tSchedFlagKeepParams LinuxSchedulerFlag = \"SCHED_FLAG_KEEP_PARAMS\"\n\t// SchedFlagUtilClampMin represents the utilization clamp minimum scheduling flag\n\tSchedFlagUtilClampMin LinuxSchedulerFlag = \"SCHED_FLAG_UTIL_CLAMP_MIN\"\n\t// SchedFlagUtilClampMin represents the utilization clamp maximum scheduling flag\n\tSchedFlagUtilClampMax LinuxSchedulerFlag = \"SCHED_FLAG_UTIL_CLAMP_MAX\"\n)\n\n// FreeBSD contains platform-specific configuration for FreeBSD based containers.\ntype FreeBSD struct {\n\t// Devices which are accessible in the container\n\tDevices []FreeBSDDevice `json:\"devices,omitempty\"`\n\t// Jail definition for this container\n\tJail *FreeBSDJail `json:\"jail,omitempty\"`\n}\n\ntype FreeBSDDevice struct {\n\t// Path to the device, relative to /dev.\n\tPath string `json:\"path\"`\n\t// FileMode permission bits for the device.\n\tMode *os.FileMode `json:\"mode,omitempty\"`\n}\n\n// FreeBSDJail describes how to configure the container's jail\ntype FreeBSDJail struct {\n\t// Parent jail name - this can be used to share a single vnet\n\t// across several containers\n\tParent string `json:\"parent,omitempty\"`\n\t// Whether to use parent UTS names or override in the container\n\tHost FreeBSDSharing `json:\"host,omitempty\"`\n\t// IPv4 address sharing for the container\n\tIp4 FreeBSDSharing `json:\"ip4,omitempty\"`\n\t// IPv4 addresses for the container\n\tIp4Addr []string `json:\"ip4Addr,omitempty\"`\n\t// IPv6 address sharing for the container\n\tIp6 FreeBSDSharing `json:\"ip6,omitempty\"`\n\t// IPv6 addresses for the container\n\tIp6Addr []string `json:\"ip6Addr,omitempty\"`\n\t// Which network stack to use for the container\n\tVnet FreeBSDSharing `json:\"vnet,omitempty\"`\n\t// If set, Ip4Addr and Ip6Addr addresses will be added to this interface\n\tInterface string `json:\"interface,omitempty\"`\n\t// List interfaces to be moved to the container's vnet\n\tVnetInterfaces []string `json:\"vnetInterfaces,omitempty\"`\n\t// SystemV IPC message sharing for the container\n\tSysVMsg FreeBSDSharing `json:\"sysvmsg,omitempty\"`\n\t// SystemV semaphore message sharing for the container\n\tSysVSem FreeBSDSharing `json:\"sysvsem,omitempty\"`\n\t// SystemV memory sharing for the container\n\tSysVShm FreeBSDSharing `json:\"sysvshm,omitempty\"`\n\t// Mount visibility (see jail(8) for details)\n\tEnforceStatfs *int `json:\"enforceStatfs,omitempty\"`\n\t// Jail capabilities\n\tAllow *FreeBSDJailAllow `json:\"allow,omitempty\"`\n}\n\n// These values are used to control access to features in the container, either\n// disabling the feature, sharing state with the parent or creating new private\n// state in the container.\ntype FreeBSDSharing string\n\nconst (\n\tFreeBSDShareDisable FreeBSDSharing = \"disable\"\n\tFreeBSDShareNew     FreeBSDSharing = \"new\"\n\tFreeBSDShareInherit FreeBSDSharing = \"inherit\"\n)\n\n// FreeBSDJailAllow describes jail capabilities\ntype FreeBSDJailAllow struct {\n\tSetHostname   bool     `json:\"setHostname,omitempty\"`\n\tRawSockets    bool     `json:\"rawSockets,omitempty\"`\n\tChflags       bool     `json:\"chflags,omitempty\"`\n\tMount         []string `json:\"mount,omitempty\"`\n\tQuotas        bool     `json:\"quotas,omitempty\"`\n\tSocketAf      bool     `json:\"socketAf,omitempty\"`\n\tMlock         bool     `json:\"mlock,omitempty\"`\n\tReservedPorts bool     `json:\"reservedPorts,omitempty\"`\n\tSuser         bool     `json:\"suser,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/runtime-spec/specs-go/features/features.go",
    "content": "// Package features provides the Features struct.\npackage features\n\n// Features represents the supported features of the runtime.\ntype Features struct {\n\t// OCIVersionMin is the minimum OCI Runtime Spec version recognized by the runtime, e.g., \"1.0.0\".\n\tOCIVersionMin string `json:\"ociVersionMin,omitempty\"`\n\n\t// OCIVersionMax is the maximum OCI Runtime Spec version recognized by the runtime, e.g., \"1.0.2-dev\".\n\tOCIVersionMax string `json:\"ociVersionMax,omitempty\"`\n\n\t// Hooks is the list of the recognized hook names, e.g., \"createRuntime\".\n\t// Nil value means \"unknown\", not \"no support for any hook\".\n\tHooks []string `json:\"hooks,omitempty\"`\n\n\t// MountOptions is the list of the recognized mount options, e.g., \"ro\".\n\t// Nil value means \"unknown\", not \"no support for any mount option\".\n\t// This list does not contain filesystem-specific options passed to mount(2) syscall as (const void *).\n\tMountOptions []string `json:\"mountOptions,omitempty\"`\n\n\t// Linux is specific to Linux.\n\tLinux *Linux `json:\"linux,omitempty\"`\n\n\t// Annotations contains implementation-specific annotation strings,\n\t// such as the implementation version, and third-party extensions.\n\tAnnotations map[string]string `json:\"annotations,omitempty\"`\n\n\t// PotentiallyUnsafeConfigAnnotations the list of the potential unsafe annotations\n\t// that may appear in `config.json`.\n\t//\n\t// A value that ends with \".\" is interpreted as a prefix of annotations.\n\tPotentiallyUnsafeConfigAnnotations []string `json:\"potentiallyUnsafeConfigAnnotations,omitempty\"`\n}\n\n// Linux is specific to Linux.\ntype Linux struct {\n\t// Namespaces is the list of the recognized namespaces, e.g., \"mount\".\n\t// Nil value means \"unknown\", not \"no support for any namespace\".\n\tNamespaces []string `json:\"namespaces,omitempty\"`\n\n\t// Capabilities is the list of the recognized capabilities , e.g., \"CAP_SYS_ADMIN\".\n\t// Nil value means \"unknown\", not \"no support for any capability\".\n\tCapabilities []string `json:\"capabilities,omitempty\"`\n\n\tCgroup          *Cgroup          `json:\"cgroup,omitempty\"`\n\tSeccomp         *Seccomp         `json:\"seccomp,omitempty\"`\n\tApparmor        *Apparmor        `json:\"apparmor,omitempty\"`\n\tSelinux         *Selinux         `json:\"selinux,omitempty\"`\n\tIntelRdt        *IntelRdt        `json:\"intelRdt,omitempty\"`\n\tMemoryPolicy    *MemoryPolicy    `json:\"memoryPolicy,omitempty\"`\n\tMountExtensions *MountExtensions `json:\"mountExtensions,omitempty\"`\n\tNetDevices      *NetDevices      `json:\"netDevices,omitempty\"`\n}\n\n// Cgroup represents the \"cgroup\" field.\ntype Cgroup struct {\n\t// V1 represents whether Cgroup v1 support is compiled in.\n\t// Unrelated to whether the host uses cgroup v1 or not.\n\t// Nil value means \"unknown\", not \"false\".\n\tV1 *bool `json:\"v1,omitempty\"`\n\n\t// V2 represents whether Cgroup v2 support is compiled in.\n\t// Unrelated to whether the host uses cgroup v2 or not.\n\t// Nil value means \"unknown\", not \"false\".\n\tV2 *bool `json:\"v2,omitempty\"`\n\n\t// Systemd represents whether systemd-cgroup support is compiled in.\n\t// Unrelated to whether the host uses systemd or not.\n\t// Nil value means \"unknown\", not \"false\".\n\tSystemd *bool `json:\"systemd,omitempty\"`\n\n\t// SystemdUser represents whether user-scoped systemd-cgroup support is compiled in.\n\t// Unrelated to whether the host uses systemd or not.\n\t// Nil value means \"unknown\", not \"false\".\n\tSystemdUser *bool `json:\"systemdUser,omitempty\"`\n\n\t// Rdma represents whether RDMA cgroup support is compiled in.\n\t// Unrelated to whether the host supports RDMA or not.\n\t// Nil value means \"unknown\", not \"false\".\n\tRdma *bool `json:\"rdma,omitempty\"`\n}\n\n// Seccomp represents the \"seccomp\" field.\ntype Seccomp struct {\n\t// Enabled is true if seccomp support is compiled in.\n\t// Nil value means \"unknown\", not \"false\".\n\tEnabled *bool `json:\"enabled,omitempty\"`\n\n\t// Actions is the list of the recognized actions, e.g., \"SCMP_ACT_NOTIFY\".\n\t// Nil value means \"unknown\", not \"no support for any action\".\n\tActions []string `json:\"actions,omitempty\"`\n\n\t// Operators is the list of the recognized operators, e.g., \"SCMP_CMP_NE\".\n\t// Nil value means \"unknown\", not \"no support for any operator\".\n\tOperators []string `json:\"operators,omitempty\"`\n\n\t// Archs is the list of the recognized archs, e.g., \"SCMP_ARCH_X86_64\".\n\t// Nil value means \"unknown\", not \"no support for any arch\".\n\tArchs []string `json:\"archs,omitempty\"`\n\n\t// KnownFlags is the list of the recognized filter flags, e.g., \"SECCOMP_FILTER_FLAG_LOG\".\n\t// Nil value means \"unknown\", not \"no flags are recognized\".\n\tKnownFlags []string `json:\"knownFlags,omitempty\"`\n\n\t// SupportedFlags is the list of the supported filter flags, e.g., \"SECCOMP_FILTER_FLAG_LOG\".\n\t// This list may be a subset of KnownFlags due to some flags\n\t// not supported by the current kernel and/or libseccomp.\n\t// Nil value means \"unknown\", not \"no flags are supported\".\n\tSupportedFlags []string `json:\"supportedFlags,omitempty\"`\n}\n\n// Apparmor represents the \"apparmor\" field.\ntype Apparmor struct {\n\t// Enabled is true if AppArmor support is compiled in.\n\t// Unrelated to whether the host supports AppArmor or not.\n\t// Nil value means \"unknown\", not \"false\".\n\tEnabled *bool `json:\"enabled,omitempty\"`\n}\n\n// Selinux represents the \"selinux\" field.\ntype Selinux struct {\n\t// Enabled is true if SELinux support is compiled in.\n\t// Unrelated to whether the host supports SELinux or not.\n\t// Nil value means \"unknown\", not \"false\".\n\tEnabled *bool `json:\"enabled,omitempty\"`\n}\n\n// IntelRdt represents the \"intelRdt\" field.\ntype IntelRdt struct {\n\t// Enabled is true if Intel RDT support is compiled in.\n\t// Unrelated to whether the host supports Intel RDT or not.\n\t// Nil value means \"unknown\", not \"false\".\n\tEnabled *bool `json:\"enabled,omitempty\"`\n\t// Schemata is true if the \"linux.intelRdt.enableMonitoring\" field of the\n\t// spec is implemented.\n\tSchemata *bool `json:\"schemata,omitempty\"`\n\t// Monitoring is true if the \"linux.intelRdt.enableMonitoring\" field of the\n\t// spec is implemented.\n\t// Nil value means \"unknown\", not \"false\".\n\tMonitoring *bool `json:\"monitoring,omitempty\"`\n}\n\n// MemoryPolicy represents the \"memoryPolicy\" field.\ntype MemoryPolicy struct {\n\t// modes is the list of known memory policy modes, e.g., \"MPOL_INTERLEAVE\".\n\tModes []string `json:\"modes,omitempty\"`\n\t// flags is the list of known memory policy mode flags, e.g., \"MPOL_F_STATIC_NODES\".\n\tFlags []string `json:\"flags,omitempty\"`\n}\n\n// MountExtensions represents the \"mountExtensions\" field.\ntype MountExtensions struct {\n\t// IDMap represents the status of idmap mounts support.\n\tIDMap *IDMap `json:\"idmap,omitempty\"`\n}\n\ntype IDMap struct {\n\t// Enabled represents whether idmap mounts supports is compiled in.\n\t// Unrelated to whether the host supports it or not.\n\t// Nil value means \"unknown\", not \"false\".\n\tEnabled *bool `json:\"enabled,omitempty\"`\n}\n\n// NetDevices represents the \"netDevices\" field.\ntype NetDevices struct {\n\t// Enabled is true if network devices support is compiled in.\n\t// Nil value means \"unknown\", not \"false\".\n\tEnabled *bool `json:\"enabled,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/runtime-spec/specs-go/state.go",
    "content": "package specs\n\n// ContainerState represents the state of a container.\ntype ContainerState string\n\nconst (\n\t// StateCreating indicates that the container is being created\n\tStateCreating ContainerState = \"creating\"\n\n\t// StateCreated indicates that the runtime has finished the create operation\n\tStateCreated ContainerState = \"created\"\n\n\t// StateRunning indicates that the container process has executed the\n\t// user-specified program but has not exited\n\tStateRunning ContainerState = \"running\"\n\n\t// StateStopped indicates that the container process has exited\n\tStateStopped ContainerState = \"stopped\"\n)\n\n// State holds information about the runtime state of the container.\ntype State struct {\n\t// Version is the version of the specification that is supported.\n\tVersion string `json:\"ociVersion\"`\n\t// ID is the container ID\n\tID string `json:\"id\"`\n\t// Status is the runtime status of the container.\n\tStatus ContainerState `json:\"status\"`\n\t// Pid is the process ID for the container process.\n\tPid int `json:\"pid,omitempty\"`\n\t// Bundle is the path to the container's bundle directory.\n\tBundle string `json:\"bundle\"`\n\t// Annotations are key values associated with the container.\n\tAnnotations map[string]string `json:\"annotations,omitempty\"`\n}\n\nconst (\n\t// SeccompFdName is the name of the seccomp notify file descriptor.\n\tSeccompFdName string = \"seccompFd\"\n)\n\n// ContainerProcessState holds information about the state of a container process.\ntype ContainerProcessState struct {\n\t// Version is the version of the specification that is supported.\n\tVersion string `json:\"ociVersion\"`\n\t// Fds is a string array containing the names of the file descriptors passed.\n\t// The index of the name in this array corresponds to index of the file\n\t// descriptor in the `SCM_RIGHTS` array.\n\tFds []string `json:\"fds\"`\n\t// Pid is the process ID as seen by the runtime.\n\tPid int `json:\"pid\"`\n\t// Opaque metadata.\n\tMetadata string `json:\"metadata,omitempty\"`\n\t// State of the container.\n\tState State `json:\"state\"`\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/runtime-spec/specs-go/version.go",
    "content": "package 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 = 3\n\t// VersionPatch is for backwards-compatible bug fixes\n\tVersionPatch = 0\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/selinux/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/opencontainers/selinux/go-selinux/doc.go",
    "content": "/*\nPackage selinux provides a high-level interface for interacting with selinux.\n\nUsage:\n\n\timport \"github.com/opencontainers/selinux/go-selinux\"\n\n\t// Ensure that selinux is enforcing mode.\n\tif selinux.EnforceMode() != selinux.Enforcing {\n\t\tselinux.SetEnforceMode(selinux.Enforcing)\n\t}\n*/\npackage selinux\n"
  },
  {
    "path": "vendor/github.com/opencontainers/selinux/go-selinux/label/label.go",
    "content": "package label\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/opencontainers/selinux/go-selinux\"\n)\n\n// Init initialises the labeling system\nfunc Init() {\n\t_ = selinux.GetEnabled()\n}\n\n// FormatMountLabel returns a string to be used by the mount command. Using\n// the SELinux `context` mount option. Changing labels of files on mount\n// points with this option can never be changed.\n// FormatMountLabel returns a string to be used by the mount command.\n// The format of this string will be used to alter the labeling of the mountpoint.\n// The string returned is suitable to be used as the options field of the mount command.\n// If you need to have additional mount point options, you can pass them in as\n// the first parameter.  Second parameter is the label that you wish to apply\n// to all content in the mount point.\nfunc FormatMountLabel(src, mountLabel string) string {\n\treturn FormatMountLabelByType(src, mountLabel, \"context\")\n}\n\n// FormatMountLabelByType returns a string to be used by the mount command.\n// Allow caller to specify the mount options. For example using the SELinux\n// `fscontext` mount option would allow certain container processes to change\n// labels of files created on the mount points, where as `context` option does\n// not.\n// FormatMountLabelByType returns a string to be used by the mount command.\n// The format of this string will be used to alter the labeling of the mountpoint.\n// The string returned is suitable to be used as the options field of the mount command.\n// If you need to have additional mount point options, you can pass them in as\n// the first parameter.  Second parameter is the label that you wish to apply\n// to all content in the mount point.\nfunc FormatMountLabelByType(src, mountLabel, contextType string) string {\n\tif mountLabel != \"\" {\n\t\tswitch src {\n\t\tcase \"\":\n\t\t\tsrc = fmt.Sprintf(\"%s=%q\", contextType, mountLabel)\n\t\tdefault:\n\t\t\tsrc = fmt.Sprintf(\"%s,%s=%q\", src, contextType, mountLabel)\n\t\t}\n\t}\n\treturn src\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/selinux/go-selinux/label/label_linux.go",
    "content": "package label\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/selinux/go-selinux\"\n)\n\n// Valid Label Options\nvar validOptions = map[string]bool{\n\t\"disable\":  true,\n\t\"type\":     true,\n\t\"filetype\": true,\n\t\"user\":     true,\n\t\"role\":     true,\n\t\"level\":    true,\n}\n\nvar ErrIncompatibleLabel = errors.New(\"bad SELinux option: z and Z can not be used together\")\n\n// InitLabels returns the process label and file labels to be used within\n// the container.  A list of options can be passed into this function to alter\n// the labels.  The labels returned will include a random MCS String, that is\n// guaranteed to be unique.\n// If the disabled flag is passed in, the process label will not be set, but the mount label will be set\n// to the container_file label with the maximum category. This label is not usable by any confined label.\nfunc InitLabels(options []string) (plabel string, mlabel string, retErr error) {\n\tif !selinux.GetEnabled() {\n\t\treturn \"\", \"\", nil\n\t}\n\tprocessLabel, mountLabel := selinux.ContainerLabels()\n\tif processLabel != \"\" {\n\t\tdefer func() {\n\t\t\tif retErr != nil {\n\t\t\t\tselinux.ReleaseLabel(mountLabel)\n\t\t\t}\n\t\t}()\n\t\tpcon, err := selinux.NewContext(processLabel)\n\t\tif err != nil {\n\t\t\treturn \"\", \"\", err\n\t\t}\n\t\tmcsLevel := pcon[\"level\"]\n\t\tmcon, err := selinux.NewContext(mountLabel)\n\t\tif err != nil {\n\t\t\treturn \"\", \"\", err\n\t\t}\n\t\tfor _, opt := range options {\n\t\t\tif opt == \"disable\" {\n\t\t\t\tselinux.ReleaseLabel(mountLabel)\n\t\t\t\treturn \"\", selinux.PrivContainerMountLabel(), nil\n\t\t\t}\n\t\t\tif i := strings.Index(opt, \":\"); i == -1 {\n\t\t\t\treturn \"\", \"\", fmt.Errorf(\"bad label option %q, valid options 'disable' or \\n'user, role, level, type, filetype' followed by ':' and a value\", opt)\n\t\t\t}\n\t\t\tcon := strings.SplitN(opt, \":\", 2)\n\t\t\tif !validOptions[con[0]] {\n\t\t\t\treturn \"\", \"\", fmt.Errorf(\"bad label option %q, valid options 'disable, user, role, level, type, filetype'\", con[0])\n\t\t\t}\n\t\t\tif con[0] == \"filetype\" {\n\t\t\t\tmcon[\"type\"] = con[1]\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tpcon[con[0]] = con[1]\n\t\t\tif con[0] == \"level\" || con[0] == \"user\" {\n\t\t\t\tmcon[con[0]] = con[1]\n\t\t\t}\n\t\t}\n\t\tif pcon.Get() != processLabel {\n\t\t\tif pcon[\"level\"] != mcsLevel {\n\t\t\t\tselinux.ReleaseLabel(processLabel)\n\t\t\t}\n\t\t\tprocessLabel = pcon.Get()\n\t\t\tselinux.ReserveLabel(processLabel)\n\t\t}\n\t\tmountLabel = mcon.Get()\n\t}\n\treturn processLabel, mountLabel, nil\n}\n\n// SetFileLabel modifies the \"path\" label to the specified file label\nfunc SetFileLabel(path string, fileLabel string) error {\n\tif !selinux.GetEnabled() || fileLabel == \"\" {\n\t\treturn nil\n\t}\n\treturn selinux.SetFileLabel(path, fileLabel)\n}\n\n// SetFileCreateLabel tells the kernel the label for all files to be created\nfunc SetFileCreateLabel(fileLabel string) error {\n\tif !selinux.GetEnabled() {\n\t\treturn nil\n\t}\n\treturn selinux.SetFSCreateLabel(fileLabel)\n}\n\n// Relabel changes the label of path and all the entries beneath the path.\n// It changes the MCS label to s0 if shared is true.\n// This will allow all containers to share the content.\n//\n// The path itself is guaranteed to be relabeled last.\nfunc Relabel(path string, fileLabel string, shared bool) error {\n\tif !selinux.GetEnabled() || fileLabel == \"\" {\n\t\treturn nil\n\t}\n\n\tif shared {\n\t\tc, err := selinux.NewContext(fileLabel)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tc[\"level\"] = \"s0\"\n\t\tfileLabel = c.Get()\n\t}\n\treturn selinux.Chcon(path, fileLabel, true)\n}\n\n// Validate checks that the label does not include unexpected options\nfunc Validate(label string) error {\n\tif strings.Contains(label, \"z\") && strings.Contains(label, \"Z\") {\n\t\treturn ErrIncompatibleLabel\n\t}\n\treturn nil\n}\n\n// RelabelNeeded checks whether the user requested a relabel\nfunc RelabelNeeded(label string) bool {\n\treturn strings.Contains(label, \"z\") || strings.Contains(label, \"Z\")\n}\n\n// IsShared checks that the label includes a \"shared\" mark\nfunc IsShared(label string) bool {\n\treturn strings.Contains(label, \"z\")\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/selinux/go-selinux/label/label_stub.go",
    "content": "//go:build !linux\n// +build !linux\n\npackage label\n\n// InitLabels returns the process label and file labels to be used within\n// the container.  A list of options can be passed into this function to alter\n// the labels.\nfunc InitLabels([]string) (string, string, error) {\n\treturn \"\", \"\", nil\n}\n\nfunc SetFileLabel(string, string) error {\n\treturn nil\n}\n\nfunc SetFileCreateLabel(string) error {\n\treturn nil\n}\n\nfunc Relabel(string, string, bool) error {\n\treturn nil\n}\n\n// DisableSecOpt returns a security opt that can disable labeling\n// support for future container processes\nfunc DisableSecOpt() []string {\n\treturn nil\n}\n\n// Validate checks that the label does not include unexpected options\nfunc Validate(string) error {\n\treturn nil\n}\n\n// RelabelNeeded checks whether the user requested a relabel\nfunc RelabelNeeded(string) bool {\n\treturn false\n}\n\n// IsShared checks that the label includes a \"shared\" mark\nfunc IsShared(string) bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/selinux/go-selinux/selinux.go",
    "content": "package selinux\n\nimport (\n\t\"errors\"\n)\n\nconst (\n\t// Enforcing constant indicate SELinux is in enforcing mode\n\tEnforcing = 1\n\t// Permissive constant to indicate SELinux is in permissive mode\n\tPermissive = 0\n\t// Disabled constant to indicate SELinux is disabled\n\tDisabled = -1\n\t// maxCategory is the maximum number of categories used within containers\n\tmaxCategory = 1024\n\t// DefaultCategoryRange is the upper bound on the category range\n\tDefaultCategoryRange = uint32(maxCategory)\n)\n\nvar (\n\t// ErrMCSAlreadyExists is returned when trying to allocate a duplicate MCS.\n\tErrMCSAlreadyExists = errors.New(\"MCS label already exists\")\n\t// ErrEmptyPath is returned when an empty path has been specified.\n\tErrEmptyPath = errors.New(\"empty path\")\n\n\t// ErrInvalidLabel is returned when an invalid label is specified.\n\tErrInvalidLabel = errors.New(\"invalid Label\")\n\n\t// InvalidLabel is returned when an invalid label is specified.\n\t//\n\t// Deprecated: use [ErrInvalidLabel].\n\tInvalidLabel = ErrInvalidLabel\n\n\t// ErrIncomparable is returned two levels are not comparable\n\tErrIncomparable = errors.New(\"incomparable levels\")\n\t// ErrLevelSyntax is returned when a sensitivity or category do not have correct syntax in a level\n\tErrLevelSyntax = errors.New(\"invalid level syntax\")\n\n\t// ErrContextMissing is returned if a requested context is not found in a file.\n\tErrContextMissing = errors.New(\"context does not have a match\")\n\t// ErrVerifierNil is returned when a context verifier function is nil.\n\tErrVerifierNil = errors.New(\"verifier function is nil\")\n\n\t// ErrNotTGLeader is returned by [SetKeyLabel] if the calling thread\n\t// is not the thread group leader.\n\tErrNotTGLeader = errors.New(\"calling thread is not the thread group leader\")\n\n\t// CategoryRange allows the upper bound on the category range to be adjusted\n\tCategoryRange = DefaultCategoryRange\n\n\tprivContainerMountLabel string\n)\n\n// Context is a representation of the SELinux label broken into 4 parts\ntype Context map[string]string\n\n// SetDisabled disables SELinux support for the package\nfunc SetDisabled() {\n\tsetDisabled()\n}\n\n// GetEnabled returns whether SELinux is currently enabled.\nfunc GetEnabled() bool {\n\treturn getEnabled()\n}\n\n// ClassIndex returns the int index for an object class in the loaded policy,\n// or -1 and an error\nfunc ClassIndex(class string) (int, error) {\n\treturn classIndex(class)\n}\n\n// SetFileLabel sets the SELinux label for this path, following symlinks,\n// or returns an error.\nfunc SetFileLabel(fpath string, label string) error {\n\treturn setFileLabel(fpath, label)\n}\n\n// LsetFileLabel sets the SELinux label for this path, not following symlinks,\n// or returns an error.\nfunc LsetFileLabel(fpath string, label string) error {\n\treturn lSetFileLabel(fpath, label)\n}\n\n// FileLabel returns the SELinux label for this path, following symlinks,\n// or returns an error.\nfunc FileLabel(fpath string) (string, error) {\n\treturn fileLabel(fpath)\n}\n\n// LfileLabel returns the SELinux label for this path, not following symlinks,\n// or returns an error.\nfunc LfileLabel(fpath string) (string, error) {\n\treturn lFileLabel(fpath)\n}\n\n// SetFSCreateLabel tells the kernel what label to use for all file system objects\n// created by this task.\n// Set the label to an empty string to return to the default label. Calls to SetFSCreateLabel\n// should be wrapped in runtime.LockOSThread()/runtime.UnlockOSThread() until file system\n// objects created by this task are finished to guarantee another goroutine does not migrate\n// to the current thread before execution is complete.\nfunc SetFSCreateLabel(label string) error {\n\treturn setFSCreateLabel(label)\n}\n\n// FSCreateLabel returns the default label the kernel which the kernel is using\n// for file system objects created by this task. \"\" indicates default.\nfunc FSCreateLabel() (string, error) {\n\treturn fsCreateLabel()\n}\n\n// CurrentLabel returns the SELinux label of the current process thread, or an error.\nfunc CurrentLabel() (string, error) {\n\treturn currentLabel()\n}\n\n// PidLabel returns the SELinux label of the given pid, or an error.\nfunc PidLabel(pid int) (string, error) {\n\treturn pidLabel(pid)\n}\n\n// ExecLabel returns the SELinux label that the kernel will use for any programs\n// that are executed by the current process thread, or an error.\nfunc ExecLabel() (string, error) {\n\treturn execLabel()\n}\n\n// CanonicalizeContext takes a context string and writes it to the kernel\n// the function then returns the context that the kernel will use. Use this\n// function to check if two contexts are equivalent\nfunc CanonicalizeContext(val string) (string, error) {\n\treturn canonicalizeContext(val)\n}\n\n// ComputeCreateContext requests the type transition from source to target for\n// class from the kernel.\nfunc ComputeCreateContext(source string, target string, class string) (string, error) {\n\treturn computeCreateContext(source, target, class)\n}\n\n// CalculateGlbLub computes the glb (greatest lower bound) and lub (least upper bound)\n// of a source and target range.\n// The glblub is calculated as the greater of the low sensitivities and\n// the lower of the high sensitivities and the and of each category bitset.\nfunc CalculateGlbLub(sourceRange, targetRange string) (string, error) {\n\treturn calculateGlbLub(sourceRange, targetRange)\n}\n\n// SetExecLabel sets the SELinux label that the kernel will use for any programs\n// that are executed by the current process thread, or an error. Calls to SetExecLabel\n// should  be wrapped in runtime.LockOSThread()/runtime.UnlockOSThread() until execution\n// of the program is finished to guarantee another goroutine does not migrate to the current\n// thread before execution is complete.\nfunc SetExecLabel(label string) error {\n\treturn writeConThreadSelf(\"attr/exec\", label)\n}\n\n// SetTaskLabel sets the SELinux label for the current thread, or an error.\n// This requires the dyntransition permission. Calls to SetTaskLabel should\n// be wrapped in runtime.LockOSThread()/runtime.UnlockOSThread() to guarantee\n// the current thread does not run in a new mislabeled thread.\nfunc SetTaskLabel(label string) error {\n\treturn writeConThreadSelf(\"attr/current\", label)\n}\n\n// SetSocketLabel takes a process label and tells the kernel to assign the\n// label to the next socket that gets created. Calls to SetSocketLabel\n// should be wrapped in runtime.LockOSThread()/runtime.UnlockOSThread() until\n// the socket is created to guarantee another goroutine does not migrate\n// to the current thread before execution is complete.\nfunc SetSocketLabel(label string) error {\n\treturn writeConThreadSelf(\"attr/sockcreate\", label)\n}\n\n// SocketLabel retrieves the current socket label setting\nfunc SocketLabel() (string, error) {\n\treturn readConThreadSelf(\"attr/sockcreate\")\n}\n\n// PeerLabel retrieves the label of the client on the other side of a socket\nfunc PeerLabel(fd uintptr) (string, error) {\n\treturn peerLabel(fd)\n}\n\n// SetKeyLabel takes a process label and tells the kernel to assign the\n// label to the next kernel keyring that gets created.\n//\n// Calls to SetKeyLabel should be wrapped in\n// runtime.LockOSThread()/runtime.UnlockOSThread() until the kernel keyring is\n// created to guarantee another goroutine does not migrate to the current\n// thread before execution is complete.\n//\n// Only the thread group leader can set key label.\nfunc SetKeyLabel(label string) error {\n\treturn setKeyLabel(label)\n}\n\n// KeyLabel retrieves the current kernel keyring label setting\nfunc KeyLabel() (string, error) {\n\treturn keyLabel()\n}\n\n// Get returns the Context as a string\nfunc (c Context) Get() string {\n\treturn c.get()\n}\n\n// NewContext creates a new Context struct from the specified label\nfunc NewContext(label string) (Context, error) {\n\treturn newContext(label)\n}\n\n// ClearLabels clears all reserved labels\nfunc ClearLabels() {\n\tclearLabels()\n}\n\n// ReserveLabel reserves the MLS/MCS level component of the specified label\nfunc ReserveLabel(label string) {\n\treserveLabel(label)\n}\n\n// MLSEnabled checks if MLS is enabled.\nfunc MLSEnabled() bool {\n\treturn isMLSEnabled()\n}\n\n// EnforceMode returns the current SELinux mode Enforcing, Permissive, Disabled\nfunc EnforceMode() int {\n\treturn enforceMode()\n}\n\n// SetEnforceMode sets the current SELinux mode Enforcing, Permissive.\n// Disabled is not valid, since this needs to be set at boot time.\nfunc SetEnforceMode(mode int) error {\n\treturn setEnforceMode(mode)\n}\n\n// DefaultEnforceMode returns the systems default SELinux mode Enforcing,\n// Permissive or Disabled. Note this is just the default at boot time.\n// EnforceMode tells you the systems current mode.\nfunc DefaultEnforceMode() int {\n\treturn defaultEnforceMode()\n}\n\n// ReleaseLabel un-reserves the MLS/MCS Level field of the specified label,\n// allowing it to be used by another process.\nfunc ReleaseLabel(label string) {\n\treleaseLabel(label)\n}\n\n// ROFileLabel returns the specified SELinux readonly file label\nfunc ROFileLabel() string {\n\treturn roFileLabel()\n}\n\n// KVMContainerLabels returns the default processLabel and mountLabel to be used\n// for kvm containers by the calling process.\nfunc KVMContainerLabels() (string, string) {\n\treturn kvmContainerLabels()\n}\n\n// InitContainerLabels returns the default processLabel and file labels to be\n// used for containers running an init system like systemd by the calling process.\nfunc InitContainerLabels() (string, string) {\n\treturn initContainerLabels()\n}\n\n// ContainerLabels returns an allocated processLabel and fileLabel to be used for\n// container labeling by the calling process.\nfunc ContainerLabels() (processLabel string, fileLabel string) {\n\treturn containerLabels()\n}\n\n// SecurityCheckContext validates that the SELinux label is understood by the kernel\nfunc SecurityCheckContext(val string) error {\n\treturn securityCheckContext(val)\n}\n\n// CopyLevel returns a label with the MLS/MCS level from src label replaced on\n// the dest label.\nfunc CopyLevel(src, dest string) (string, error) {\n\treturn copyLevel(src, dest)\n}\n\n// Chcon changes the fpath file object to the SELinux label.\n// If fpath is a directory and recurse is true, then Chcon walks the\n// directory tree setting the label.\n//\n// The fpath itself is guaranteed to be relabeled last.\nfunc Chcon(fpath string, label string, recurse bool) error {\n\treturn chcon(fpath, label, recurse)\n}\n\n// DupSecOpt takes an SELinux process label and returns security options that\n// can be used to set the SELinux Type and Level for future container processes.\nfunc DupSecOpt(src string) ([]string, error) {\n\treturn dupSecOpt(src)\n}\n\n// DisableSecOpt returns a security opt that can be used to disable SELinux\n// labeling support for future container processes.\nfunc DisableSecOpt() []string {\n\treturn []string{\"disable\"}\n}\n\n// GetDefaultContextWithLevel gets a single context for the specified SELinux user\n// identity that is reachable from the specified scon context. The context is based\n// on the per-user /etc/selinux/{SELINUXTYPE}/contexts/users/<username> if it exists,\n// and falls back to the global /etc/selinux/{SELINUXTYPE}/contexts/default_contexts\n// file.\nfunc GetDefaultContextWithLevel(user, level, scon string) (string, error) {\n\treturn getDefaultContextWithLevel(user, level, scon)\n}\n\n// PrivContainerMountLabel returns mount label for privileged containers\nfunc PrivContainerMountLabel() string {\n\t// Make sure label is initialized.\n\t_ = label(\"\")\n\treturn privContainerMountLabel\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go",
    "content": "package selinux\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"crypto/rand\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/fs\"\n\t\"math/big\"\n\t\"os\"\n\t\"os/user\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite\"\n\t\"github.com/cyphar/filepath-securejoin/pathrs-lite/procfs\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/opencontainers/selinux/pkg/pwalkdir\"\n)\n\nconst (\n\tminSensLen       = 2\n\tcontextFile      = \"/usr/share/containers/selinux/contexts\"\n\tselinuxDir       = \"/etc/selinux/\"\n\tselinuxUsersDir  = \"contexts/users\"\n\tdefaultContexts  = \"contexts/default_contexts\"\n\tselinuxConfig    = selinuxDir + \"config\"\n\tselinuxfsMount   = \"/sys/fs/selinux\"\n\tselinuxTypeTag   = \"SELINUXTYPE\"\n\tselinuxTag       = \"SELINUX\"\n\txattrNameSelinux = \"security.selinux\"\n)\n\ntype selinuxState struct {\n\tmcsList       map[string]bool\n\tselinuxfs     string\n\tselinuxfsOnce sync.Once\n\tenabledSet    bool\n\tenabled       bool\n\tsync.Mutex\n}\n\ntype level struct {\n\tcats *big.Int\n\tsens int\n}\n\ntype mlsRange struct {\n\tlow  *level\n\thigh *level\n}\n\ntype defaultSECtx struct {\n\tuserRdr           io.Reader\n\tverifier          func(string) error\n\tdefaultRdr        io.Reader\n\tuser, level, scon string\n}\n\ntype levelItem byte\n\nconst (\n\tsensitivity levelItem = 's'\n\tcategory    levelItem = 'c'\n)\n\nvar (\n\treadOnlyFileLabel string\n\tstate             = selinuxState{\n\t\tmcsList: make(map[string]bool),\n\t}\n\n\t// for policyRoot()\n\tpolicyRootOnce sync.Once\n\tpolicyRootVal  string\n\n\t// for label()\n\tloadLabelsOnce sync.Once\n\tlabels         map[string]string\n)\n\nfunc policyRoot() string {\n\tpolicyRootOnce.Do(func() {\n\t\tpolicyRootVal = filepath.Join(selinuxDir, readConfig(selinuxTypeTag))\n\t})\n\n\treturn policyRootVal\n}\n\nfunc (s *selinuxState) setEnable(enabled bool) bool {\n\ts.Lock()\n\tdefer s.Unlock()\n\ts.enabledSet = true\n\ts.enabled = enabled\n\treturn s.enabled\n}\n\nfunc (s *selinuxState) getEnabled() bool {\n\ts.Lock()\n\tenabled := s.enabled\n\tenabledSet := s.enabledSet\n\ts.Unlock()\n\tif enabledSet {\n\t\treturn enabled\n\t}\n\n\tenabled = false\n\tif fs := getSelinuxMountPoint(); fs != \"\" {\n\t\tif con, _ := CurrentLabel(); con != \"kernel\" {\n\t\t\tenabled = true\n\t\t}\n\t}\n\treturn s.setEnable(enabled)\n}\n\n// setDisabled disables SELinux support for the package\nfunc setDisabled() {\n\tstate.setEnable(false)\n}\n\nfunc verifySELinuxfsMount(mnt string) bool {\n\tvar buf unix.Statfs_t\n\tfor {\n\t\terr := unix.Statfs(mnt, &buf)\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tif err == unix.EAGAIN || err == unix.EINTR {\n\t\t\tcontinue\n\t\t}\n\t\treturn false\n\t}\n\n\t//#nosec G115 -- there is no overflow here.\n\tif uint32(buf.Type) != uint32(unix.SELINUX_MAGIC) {\n\t\treturn false\n\t}\n\tif (buf.Flags & unix.ST_RDONLY) != 0 {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\nfunc findSELinuxfs() string {\n\t// fast path: check the default mount first\n\tif verifySELinuxfsMount(selinuxfsMount) {\n\t\treturn selinuxfsMount\n\t}\n\n\t// check if selinuxfs is available before going the slow path\n\tfs, err := os.ReadFile(\"/proc/filesystems\")\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\tif !bytes.Contains(fs, []byte(\"\\tselinuxfs\\n\")) {\n\t\treturn \"\"\n\t}\n\n\t// slow path: try to find among the mounts\n\tf, err := os.Open(\"/proc/self/mountinfo\")\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\tdefer f.Close()\n\n\tscanner := bufio.NewScanner(f)\n\tfor {\n\t\tmnt := findSELinuxfsMount(scanner)\n\t\tif mnt == \"\" { // error or not found\n\t\t\treturn \"\"\n\t\t}\n\t\tif verifySELinuxfsMount(mnt) {\n\t\t\treturn mnt\n\t\t}\n\t}\n}\n\n// findSELinuxfsMount returns a next selinuxfs mount point found,\n// if there is one, or an empty string in case of EOF or error.\nfunc findSELinuxfsMount(s *bufio.Scanner) string {\n\tfor s.Scan() {\n\t\ttxt := s.Bytes()\n\t\t// The first field after - is fs type.\n\t\t// Safe as spaces in mountpoints are encoded as \\040\n\t\tif !bytes.Contains(txt, []byte(\" - selinuxfs \")) {\n\t\t\tcontinue\n\t\t}\n\t\tconst mPos = 5 // mount point is 5th field\n\t\tfields := bytes.SplitN(txt, []byte(\" \"), mPos+1)\n\t\tif len(fields) < mPos+1 {\n\t\t\tcontinue\n\t\t}\n\t\treturn string(fields[mPos-1])\n\t}\n\n\treturn \"\"\n}\n\nfunc (s *selinuxState) getSELinuxfs() string {\n\ts.selinuxfsOnce.Do(func() {\n\t\ts.selinuxfs = findSELinuxfs()\n\t})\n\n\treturn s.selinuxfs\n}\n\n// getSelinuxMountPoint returns the path to the mountpoint of an selinuxfs\n// filesystem or an empty string if no mountpoint is found.  Selinuxfs is\n// a proc-like pseudo-filesystem that exposes the SELinux policy API to\n// processes.  The existence of an selinuxfs mount is used to determine\n// whether SELinux is currently enabled or not.\nfunc getSelinuxMountPoint() string {\n\treturn state.getSELinuxfs()\n}\n\n// getEnabled returns whether SELinux is currently enabled.\nfunc getEnabled() bool {\n\treturn state.getEnabled()\n}\n\nfunc readConfig(target string) string {\n\tin, err := os.Open(selinuxConfig)\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\tdefer in.Close()\n\n\tscanner := bufio.NewScanner(in)\n\n\tfor scanner.Scan() {\n\t\tline := bytes.TrimSpace(scanner.Bytes())\n\t\tif len(line) == 0 {\n\t\t\t// Skip blank lines\n\t\t\tcontinue\n\t\t}\n\t\tif line[0] == ';' || line[0] == '#' {\n\t\t\t// Skip comments\n\t\t\tcontinue\n\t\t}\n\t\tfields := bytes.SplitN(line, []byte{'='}, 2)\n\t\tif len(fields) != 2 {\n\t\t\tcontinue\n\t\t}\n\t\tif bytes.Equal(fields[0], []byte(target)) {\n\t\t\treturn string(bytes.Trim(fields[1], `\"`))\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc readConFd(in *os.File) (string, error) {\n\tdata, err := io.ReadAll(in)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(bytes.TrimSuffix(data, []byte{0})), nil\n}\n\nfunc writeConFd(out *os.File, val string) error {\n\tvar err error\n\tif val != \"\" {\n\t\t_, err = out.Write([]byte(val))\n\t} else {\n\t\t_, err = out.Write(nil)\n\t}\n\treturn err\n}\n\n// openProcThreadSelf is a small wrapper around [procfs.Handle.OpenThreadSelf]\n// and [pathrs.Reopen] to make \"one-shot opens\" slightly more ergonomic. The\n// provided mode must be os.O_* flags to indicate what mode the returned file\n// should be opened with (flags like os.O_CREAT and os.O_EXCL are not\n// supported).\n//\n// If no error occurred, the returned handle is guaranteed to be exactly\n// /proc/thread-self/<subpath> with no tricky mounts or symlinks causing you to\n// operate on an unexpected path (with some caveats on pre-openat2 or\n// pre-fsopen kernels).\nfunc openProcThreadSelf(subpath string, mode int) (*os.File, procfs.ProcThreadSelfCloser, error) {\n\tif subpath == \"\" {\n\t\treturn nil, nil, ErrEmptyPath\n\t}\n\n\tproc, err := procfs.OpenProcRoot()\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer proc.Close()\n\n\thandle, closer, err := proc.OpenThreadSelf(subpath)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"open /proc/thread-self/%s handle: %w\", subpath, err)\n\t}\n\tdefer handle.Close() // we will return a re-opened handle\n\n\tfile, err := pathrs.Reopen(handle, mode)\n\tif err != nil {\n\t\tcloser()\n\t\treturn nil, nil, fmt.Errorf(\"reopen /proc/thread-self/%s handle (%#x): %w\", subpath, mode, err)\n\t}\n\treturn file, closer, nil\n}\n\n// Read the contents of /proc/thread-self/<fpath>.\nfunc readConThreadSelf(fpath string) (string, error) {\n\tin, closer, err := openProcThreadSelf(fpath, os.O_RDONLY|unix.O_CLOEXEC)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer closer()\n\tdefer in.Close()\n\n\treturn readConFd(in)\n}\n\n// Write <val> to /proc/thread-self/<fpath>.\nfunc writeConThreadSelf(fpath, val string) error {\n\tif val == \"\" {\n\t\tif !getEnabled() {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tout, closer, err := openProcThreadSelf(fpath, os.O_WRONLY|unix.O_CLOEXEC)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer closer()\n\tdefer out.Close()\n\n\treturn writeConFd(out, val)\n}\n\n// openProcSelf is a small wrapper around [procfs.Handle.OpenSelf] and\n// [pathrs.Reopen] to make \"one-shot opens\" slightly more ergonomic. The\n// provided mode must be os.O_* flags to indicate what mode the returned file\n// should be opened with (flags like os.O_CREAT and os.O_EXCL are not\n// supported).\n//\n// If no error occurred, the returned handle is guaranteed to be exactly\n// /proc/self/<subpath> with no tricky mounts or symlinks causing you to\n// operate on an unexpected path (with some caveats on pre-openat2 or\n// pre-fsopen kernels).\nfunc openProcSelf(subpath string, mode int) (*os.File, error) {\n\tif subpath == \"\" {\n\t\treturn nil, ErrEmptyPath\n\t}\n\n\tproc, err := procfs.OpenProcRoot()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer proc.Close()\n\n\thandle, err := proc.OpenSelf(subpath)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"open /proc/self/%s handle: %w\", subpath, err)\n\t}\n\tdefer handle.Close() // we will return a re-opened handle\n\n\tfile, err := pathrs.Reopen(handle, mode)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"reopen /proc/self/%s handle (%#x): %w\", subpath, mode, err)\n\t}\n\treturn file, nil\n}\n\n// Read the contents of /proc/self/<fpath>.\nfunc readConSelf(fpath string) (string, error) {\n\tin, err := openProcSelf(fpath, os.O_RDONLY|unix.O_CLOEXEC)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer in.Close()\n\n\treturn readConFd(in)\n}\n\n// Write <val> to /proc/self/<fpath>.\nfunc writeConSelf(fpath, val string) error {\n\tif val == \"\" {\n\t\tif !getEnabled() {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tout, err := openProcSelf(fpath, os.O_WRONLY|unix.O_CLOEXEC)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer out.Close()\n\n\treturn writeConFd(out, val)\n}\n\n// openProcPid is a small wrapper around [procfs.Handle.OpenPid] and\n// [pathrs.Reopen] to make \"one-shot opens\" slightly more ergonomic. The\n// provided mode must be os.O_* flags to indicate what mode the returned file\n// should be opened with (flags like os.O_CREAT and os.O_EXCL are not\n// supported).\n//\n// If no error occurred, the returned handle is guaranteed to be exactly\n// /proc/self/<subpath> with no tricky mounts or symlinks causing you to\n// operate on an unexpected path (with some caveats on pre-openat2 or\n// pre-fsopen kernels).\nfunc openProcPid(pid int, subpath string, mode int) (*os.File, error) {\n\tif subpath == \"\" {\n\t\treturn nil, ErrEmptyPath\n\t}\n\n\tproc, err := procfs.OpenProcRoot()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer proc.Close()\n\n\thandle, err := proc.OpenPid(pid, subpath)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"open /proc/%d/%s handle: %w\", pid, subpath, err)\n\t}\n\tdefer handle.Close() // we will return a re-opened handle\n\n\tfile, err := pathrs.Reopen(handle, mode)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"reopen /proc/%d/%s handle (%#x): %w\", pid, subpath, mode, err)\n\t}\n\treturn file, nil\n}\n\n// classIndex returns the int index for an object class in the loaded policy,\n// or -1 and an error\nfunc classIndex(class string) (int, error) {\n\tpermpath := fmt.Sprintf(\"class/%s/index\", class)\n\tindexpath := filepath.Join(getSelinuxMountPoint(), permpath)\n\n\tindexB, err := os.ReadFile(indexpath)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\tindex, err := strconv.Atoi(string(indexB))\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\treturn index, nil\n}\n\n// lSetFileLabel sets the SELinux label for this path, not following symlinks,\n// or returns an error.\nfunc lSetFileLabel(fpath string, label string) error {\n\tif fpath == \"\" {\n\t\treturn ErrEmptyPath\n\t}\n\tfor {\n\t\terr := unix.Lsetxattr(fpath, xattrNameSelinux, []byte(label), 0)\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tif err != unix.EINTR {\n\t\t\treturn &os.PathError{Op: fmt.Sprintf(\"lsetxattr(label=%s)\", label), Path: fpath, Err: err}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// setFileLabel sets the SELinux label for this path, following symlinks,\n// or returns an error.\nfunc setFileLabel(fpath string, label string) error {\n\tif fpath == \"\" {\n\t\treturn ErrEmptyPath\n\t}\n\tfor {\n\t\terr := unix.Setxattr(fpath, xattrNameSelinux, []byte(label), 0)\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tif err != unix.EINTR {\n\t\t\treturn &os.PathError{Op: fmt.Sprintf(\"setxattr(label=%s)\", label), Path: fpath, Err: err}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// fileLabel returns the SELinux label for this path, following symlinks,\n// or returns an error.\nfunc fileLabel(fpath string) (string, error) {\n\tif fpath == \"\" {\n\t\treturn \"\", ErrEmptyPath\n\t}\n\n\tlabel, err := getxattr(fpath, xattrNameSelinux)\n\tif err != nil {\n\t\treturn \"\", &os.PathError{Op: \"getxattr\", Path: fpath, Err: err}\n\t}\n\t// Trim the NUL byte at the end of the byte buffer, if present.\n\tif len(label) > 0 && label[len(label)-1] == '\\x00' {\n\t\tlabel = label[:len(label)-1]\n\t}\n\treturn string(label), nil\n}\n\n// lFileLabel returns the SELinux label for this path, not following symlinks,\n// or returns an error.\nfunc lFileLabel(fpath string) (string, error) {\n\tif fpath == \"\" {\n\t\treturn \"\", ErrEmptyPath\n\t}\n\n\tlabel, err := lgetxattr(fpath, xattrNameSelinux)\n\tif err != nil {\n\t\treturn \"\", &os.PathError{Op: \"lgetxattr\", Path: fpath, Err: err}\n\t}\n\t// Trim the NUL byte at the end of the byte buffer, if present.\n\tif len(label) > 0 && label[len(label)-1] == '\\x00' {\n\t\tlabel = label[:len(label)-1]\n\t}\n\treturn string(label), nil\n}\n\nfunc setFSCreateLabel(label string) error {\n\treturn writeConThreadSelf(\"attr/fscreate\", label)\n}\n\n// fsCreateLabel returns the default label the kernel which the kernel is using\n// for file system objects created by this task. \"\" indicates default.\nfunc fsCreateLabel() (string, error) {\n\treturn readConThreadSelf(\"attr/fscreate\")\n}\n\n// currentLabel returns the SELinux label of the current process thread, or an error.\nfunc currentLabel() (string, error) {\n\treturn readConThreadSelf(\"attr/current\")\n}\n\n// pidLabel returns the SELinux label of the given pid, or an error.\nfunc pidLabel(pid int) (string, error) {\n\tit, err := openProcPid(pid, \"attr/current\", os.O_RDONLY|unix.O_CLOEXEC)\n\tif err != nil {\n\t\treturn \"\", nil\n\t}\n\tdefer it.Close()\n\treturn readConFd(it)\n}\n\n// ExecLabel returns the SELinux label that the kernel will use for any programs\n// that are executed by the current process thread, or an error.\nfunc execLabel() (string, error) {\n\treturn readConThreadSelf(\"exec\")\n}\n\n// canonicalizeContext takes a context string and writes it to the kernel\n// the function then returns the context that the kernel will use. Use this\n// function to check if two contexts are equivalent\nfunc canonicalizeContext(val string) (string, error) {\n\treturn readWriteCon(filepath.Join(getSelinuxMountPoint(), \"context\"), val)\n}\n\n// computeCreateContext requests the type transition from source to target for\n// class from the kernel.\nfunc computeCreateContext(source string, target string, class string) (string, error) {\n\tclassidx, err := classIndex(class)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn readWriteCon(filepath.Join(getSelinuxMountPoint(), \"create\"), fmt.Sprintf(\"%s %s %d\", source, target, classidx))\n}\n\n// catsToBitset stores categories in a bitset.\nfunc catsToBitset(cats string) (*big.Int, error) {\n\tbitset := new(big.Int)\n\n\tcatlist := strings.Split(cats, \",\")\n\tfor _, r := range catlist {\n\t\tranges := strings.SplitN(r, \".\", 2)\n\t\tif len(ranges) > 1 {\n\t\t\tcatstart, err := parseLevelItem(ranges[0], category)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tcatend, err := parseLevelItem(ranges[1], category)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tfor i := catstart; i <= catend; i++ {\n\t\t\t\tbitset.SetBit(bitset, i, 1)\n\t\t\t}\n\t\t} else {\n\t\t\tcat, err := parseLevelItem(ranges[0], category)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tbitset.SetBit(bitset, cat, 1)\n\t\t}\n\t}\n\n\treturn bitset, nil\n}\n\n// parseLevelItem parses and verifies that a sensitivity or category are valid\nfunc parseLevelItem(s string, sep levelItem) (int, error) {\n\tif len(s) < minSensLen || levelItem(s[0]) != sep {\n\t\treturn 0, ErrLevelSyntax\n\t}\n\tconst bitSize = 31 // Make sure the result fits into signed int32.\n\tval, err := strconv.ParseUint(s[1:], 10, bitSize)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn int(val), nil\n}\n\n// parseLevel fills a level from a string that contains\n// a sensitivity and categories\nfunc (l *level) parseLevel(levelStr string) error {\n\tlvl := strings.SplitN(levelStr, \":\", 2)\n\tsens, err := parseLevelItem(lvl[0], sensitivity)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to parse sensitivity: %w\", err)\n\t}\n\tl.sens = sens\n\tif len(lvl) > 1 {\n\t\tcats, err := catsToBitset(lvl[1])\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to parse categories: %w\", err)\n\t\t}\n\t\tl.cats = cats\n\t}\n\n\treturn nil\n}\n\n// rangeStrToMLSRange marshals a string representation of a range.\nfunc rangeStrToMLSRange(rangeStr string) (*mlsRange, error) {\n\tr := &mlsRange{}\n\tl := strings.SplitN(rangeStr, \"-\", 2)\n\n\tswitch len(l) {\n\t// rangeStr that has a low and a high level, e.g. s4:c0.c1023-s6:c0.c1023\n\tcase 2:\n\t\tr.high = &level{}\n\t\tif err := r.high.parseLevel(l[1]); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to parse high level %q: %w\", l[1], err)\n\t\t}\n\t\tfallthrough\n\t// rangeStr that is single level, e.g. s6:c0,c3,c5,c30.c1023\n\tcase 1:\n\t\tr.low = &level{}\n\t\tif err := r.low.parseLevel(l[0]); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to parse low level %q: %w\", l[0], err)\n\t\t}\n\t}\n\n\tif r.high == nil {\n\t\tr.high = r.low\n\t}\n\n\treturn r, nil\n}\n\n// bitsetToStr takes a category bitset and returns it in the\n// canonical selinux syntax\nfunc bitsetToStr(c *big.Int) string {\n\tvar str string\n\n\tlength := 0\n\ti0 := int(c.TrailingZeroBits()) //#nosec G115 -- don't expect TralingZeroBits to return values with highest bit set.\n\tfor i := i0; i < c.BitLen(); i++ {\n\t\tif c.Bit(i) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif length == 0 {\n\t\t\tif str != \"\" {\n\t\t\t\tstr += \",\"\n\t\t\t}\n\t\t\tstr += \"c\" + strconv.Itoa(i)\n\t\t}\n\t\tif c.Bit(i+1) == 1 {\n\t\t\tlength++\n\t\t\tcontinue\n\t\t}\n\t\tif length == 1 {\n\t\t\tstr += \",c\" + strconv.Itoa(i)\n\t\t} else if length > 1 {\n\t\t\tstr += \".c\" + strconv.Itoa(i)\n\t\t}\n\t\tlength = 0\n\t}\n\n\treturn str\n}\n\nfunc (l *level) equal(l2 *level) bool {\n\tif l2 == nil || l == nil {\n\t\treturn l == l2\n\t}\n\tif l2.sens != l.sens {\n\t\treturn false\n\t}\n\tif l2.cats == nil || l.cats == nil {\n\t\treturn l2.cats == l.cats\n\t}\n\treturn l.cats.Cmp(l2.cats) == 0\n}\n\n// String returns an mlsRange as a string.\nfunc (m mlsRange) String() string {\n\tlow := \"s\" + strconv.Itoa(m.low.sens)\n\tif m.low.cats != nil && m.low.cats.BitLen() > 0 {\n\t\tlow += \":\" + bitsetToStr(m.low.cats)\n\t}\n\n\tif m.low.equal(m.high) {\n\t\treturn low\n\t}\n\n\thigh := \"s\" + strconv.Itoa(m.high.sens)\n\tif m.high.cats != nil && m.high.cats.BitLen() > 0 {\n\t\thigh += \":\" + bitsetToStr(m.high.cats)\n\t}\n\n\treturn low + \"-\" + high\n}\n\n// TODO: remove these in favor of built-in min/max\n// once we stop supporting Go < 1.21.\nfunc maxInt(a, b int) int {\n\tif a > b {\n\t\treturn a\n\t}\n\treturn b\n}\n\nfunc minInt(a, b int) int {\n\tif a < b {\n\t\treturn a\n\t}\n\treturn b\n}\n\n// calculateGlbLub computes the glb (greatest lower bound) and lub (least upper bound)\n// of a source and target range.\n// The glblub is calculated as the greater of the low sensitivities and\n// the lower of the high sensitivities and the and of each category bitset.\nfunc calculateGlbLub(sourceRange, targetRange string) (string, error) {\n\ts, err := rangeStrToMLSRange(sourceRange)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tt, err := rangeStrToMLSRange(targetRange)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif s.high.sens < t.low.sens || t.high.sens < s.low.sens {\n\t\t/* these ranges have no common sensitivities */\n\t\treturn \"\", ErrIncomparable\n\t}\n\n\toutrange := &mlsRange{low: &level{}, high: &level{}}\n\n\t/* take the greatest of the low */\n\toutrange.low.sens = maxInt(s.low.sens, t.low.sens)\n\n\t/* take the least of the high */\n\toutrange.high.sens = minInt(s.high.sens, t.high.sens)\n\n\t/* find the intersecting categories */\n\tif s.low.cats != nil && t.low.cats != nil {\n\t\toutrange.low.cats = new(big.Int)\n\t\toutrange.low.cats.And(s.low.cats, t.low.cats)\n\t}\n\tif s.high.cats != nil && t.high.cats != nil {\n\t\toutrange.high.cats = new(big.Int)\n\t\toutrange.high.cats.And(s.high.cats, t.high.cats)\n\t}\n\n\treturn outrange.String(), nil\n}\n\nfunc readWriteCon(fpath string, val string) (string, error) {\n\tif fpath == \"\" {\n\t\treturn \"\", ErrEmptyPath\n\t}\n\tf, err := os.OpenFile(fpath, os.O_RDWR, 0)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer f.Close()\n\n\t_, err = f.Write([]byte(val))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn readConFd(f)\n}\n\n// peerLabel retrieves the label of the client on the other side of a socket\nfunc peerLabel(fd uintptr) (string, error) {\n\tl, err := unix.GetsockoptString(int(fd), unix.SOL_SOCKET, unix.SO_PEERSEC)\n\tif err != nil {\n\t\treturn \"\", &os.PathError{Op: \"getsockopt\", Path: \"fd \" + strconv.Itoa(int(fd)), Err: err}\n\t}\n\treturn l, nil\n}\n\n// setKeyLabel takes a process label and tells the kernel to assign the\n// label to the next kernel keyring that gets created\nfunc setKeyLabel(label string) error {\n\t// Rather than using /proc/thread-self, we want to use /proc/self to\n\t// operate on the thread-group leader.\n\terr := writeConSelf(\"attr/keycreate\", label)\n\tif errors.Is(err, os.ErrNotExist) {\n\t\treturn nil\n\t}\n\tif label == \"\" && errors.Is(err, os.ErrPermission) {\n\t\treturn nil\n\t}\n\tif errors.Is(err, unix.EACCES) && unix.Getpid() != unix.Gettid() {\n\t\treturn ErrNotTGLeader\n\t}\n\treturn err\n}\n\n// KeyLabel retrieves the current kernel keyring label setting for this\n// thread-group.\nfunc keyLabel() (string, error) {\n\t// Rather than using /proc/thread-self, we want to use /proc/self to\n\t// operate on the thread-group leader.\n\treturn readConSelf(\"attr/keycreate\")\n}\n\n// get returns the Context as a string\nfunc (c Context) get() string {\n\tif l := c[\"level\"]; l != \"\" {\n\t\treturn c[\"user\"] + \":\" + c[\"role\"] + \":\" + c[\"type\"] + \":\" + l\n\t}\n\treturn c[\"user\"] + \":\" + c[\"role\"] + \":\" + c[\"type\"]\n}\n\n// newContext creates a new Context struct from the specified label\nfunc newContext(label string) (Context, error) {\n\tc := make(Context)\n\n\tif len(label) != 0 {\n\t\tcon := strings.SplitN(label, \":\", 4)\n\t\tif len(con) < 3 {\n\t\t\treturn c, ErrInvalidLabel\n\t\t}\n\t\tc[\"user\"] = con[0]\n\t\tc[\"role\"] = con[1]\n\t\tc[\"type\"] = con[2]\n\t\tif len(con) > 3 {\n\t\t\tc[\"level\"] = con[3]\n\t\t}\n\t}\n\treturn c, nil\n}\n\n// clearLabels clears all reserved labels\nfunc clearLabels() {\n\tstate.Lock()\n\tstate.mcsList = make(map[string]bool)\n\tstate.Unlock()\n}\n\n// reserveLabel reserves the MLS/MCS level component of the specified label\nfunc reserveLabel(label string) {\n\tif len(label) != 0 {\n\t\tcon := strings.SplitN(label, \":\", 4)\n\t\tif len(con) > 3 {\n\t\t\t_ = mcsAdd(con[3])\n\t\t}\n\t}\n}\n\nfunc selinuxEnforcePath() string {\n\treturn filepath.Join(getSelinuxMountPoint(), \"enforce\")\n}\n\n// isMLSEnabled checks if MLS is enabled.\nfunc isMLSEnabled() bool {\n\tenabledB, err := os.ReadFile(filepath.Join(getSelinuxMountPoint(), \"mls\"))\n\tif err != nil {\n\t\treturn false\n\t}\n\treturn bytes.Equal(enabledB, []byte{'1'})\n}\n\n// enforceMode returns the current SELinux mode Enforcing, Permissive, Disabled\nfunc enforceMode() int {\n\tvar enforce int\n\n\tenforceB, err := os.ReadFile(selinuxEnforcePath())\n\tif err != nil {\n\t\treturn -1\n\t}\n\tenforce, err = strconv.Atoi(string(enforceB))\n\tif err != nil {\n\t\treturn -1\n\t}\n\treturn enforce\n}\n\n// setEnforceMode sets the current SELinux mode Enforcing, Permissive.\n// Disabled is not valid, since this needs to be set at boot time.\nfunc setEnforceMode(mode int) error {\n\treturn os.WriteFile(selinuxEnforcePath(), []byte(strconv.Itoa(mode)), 0)\n}\n\n// defaultEnforceMode returns the systems default SELinux mode Enforcing,\n// Permissive or Disabled. Note this is just the default at boot time.\n// EnforceMode tells you the systems current mode.\nfunc defaultEnforceMode() int {\n\tswitch readConfig(selinuxTag) {\n\tcase \"enforcing\":\n\t\treturn Enforcing\n\tcase \"permissive\":\n\t\treturn Permissive\n\t}\n\treturn Disabled\n}\n\nfunc mcsAdd(mcs string) error {\n\tif mcs == \"\" {\n\t\treturn nil\n\t}\n\tstate.Lock()\n\tdefer state.Unlock()\n\tif state.mcsList[mcs] {\n\t\treturn ErrMCSAlreadyExists\n\t}\n\tstate.mcsList[mcs] = true\n\treturn nil\n}\n\nfunc mcsDelete(mcs string) {\n\tif mcs == \"\" {\n\t\treturn\n\t}\n\tstate.Lock()\n\tdefer state.Unlock()\n\tstate.mcsList[mcs] = false\n}\n\nfunc intToMcs(id int, catRange uint32) string {\n\tvar (\n\t\tSETSIZE = int(catRange)\n\t\tTIER    = SETSIZE\n\t\tORD     = id\n\t)\n\n\tif id < 1 || id > 523776 {\n\t\treturn \"\"\n\t}\n\n\tfor ORD > TIER {\n\t\tORD -= TIER\n\t\tTIER--\n\t}\n\tTIER = SETSIZE - TIER\n\tORD += TIER\n\treturn fmt.Sprintf(\"s0:c%d,c%d\", TIER, ORD)\n}\n\nfunc uniqMcs(catRange uint32) string {\n\tvar (\n\t\tn      uint32\n\t\tc1, c2 uint32\n\t\tmcs    string\n\t)\n\n\tfor {\n\t\t_ = binary.Read(rand.Reader, binary.LittleEndian, &n)\n\t\tc1 = n % catRange\n\t\t_ = binary.Read(rand.Reader, binary.LittleEndian, &n)\n\t\tc2 = n % catRange\n\t\tif c1 == c2 {\n\t\t\tcontinue\n\t\t} else if c1 > c2 {\n\t\t\tc1, c2 = c2, c1\n\t\t}\n\t\tmcs = fmt.Sprintf(\"s0:c%d,c%d\", c1, c2)\n\t\tif err := mcsAdd(mcs); err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tbreak\n\t}\n\treturn mcs\n}\n\n// releaseLabel un-reserves the MLS/MCS Level field of the specified label,\n// allowing it to be used by another process.\nfunc releaseLabel(label string) {\n\tif len(label) != 0 {\n\t\tcon := strings.SplitN(label, \":\", 4)\n\t\tif len(con) > 3 {\n\t\t\tmcsDelete(con[3])\n\t\t}\n\t}\n}\n\n// roFileLabel returns the specified SELinux readonly file label\nfunc roFileLabel() string {\n\treturn readOnlyFileLabel\n}\n\nfunc openContextFile() (*os.File, error) {\n\tif f, err := os.Open(contextFile); err == nil {\n\t\treturn f, nil\n\t}\n\treturn os.Open(filepath.Join(policyRoot(), \"contexts\", \"lxc_contexts\"))\n}\n\nfunc loadLabels() {\n\tlabels = make(map[string]string)\n\tin, err := openContextFile()\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer in.Close()\n\n\tscanner := bufio.NewScanner(in)\n\n\tfor scanner.Scan() {\n\t\tline := bytes.TrimSpace(scanner.Bytes())\n\t\tif len(line) == 0 {\n\t\t\t// Skip blank lines\n\t\t\tcontinue\n\t\t}\n\t\tif line[0] == ';' || line[0] == '#' {\n\t\t\t// Skip comments\n\t\t\tcontinue\n\t\t}\n\t\tfields := bytes.SplitN(line, []byte{'='}, 2)\n\t\tif len(fields) != 2 {\n\t\t\tcontinue\n\t\t}\n\t\tkey, val := bytes.TrimSpace(fields[0]), bytes.TrimSpace(fields[1])\n\t\tlabels[string(key)] = string(bytes.Trim(val, `\"`))\n\t}\n\n\tcon, _ := NewContext(labels[\"file\"])\n\tcon[\"level\"] = fmt.Sprintf(\"s0:c%d,c%d\", maxCategory-2, maxCategory-1)\n\tprivContainerMountLabel = con.get()\n\treserveLabel(privContainerMountLabel)\n}\n\nfunc label(key string) string {\n\tloadLabelsOnce.Do(func() {\n\t\tloadLabels()\n\t})\n\treturn labels[key]\n}\n\n// kvmContainerLabels returns the default processLabel and mountLabel to be used\n// for kvm containers by the calling process.\nfunc kvmContainerLabels() (string, string) {\n\tprocessLabel := label(\"kvm_process\")\n\tif processLabel == \"\" {\n\t\tprocessLabel = label(\"process\")\n\t}\n\n\treturn addMcs(processLabel, label(\"file\"))\n}\n\n// initContainerLabels returns the default processLabel and file labels to be\n// used for containers running an init system like systemd by the calling process.\nfunc initContainerLabels() (string, string) {\n\tprocessLabel := label(\"init_process\")\n\tif processLabel == \"\" {\n\t\tprocessLabel = label(\"process\")\n\t}\n\n\treturn addMcs(processLabel, label(\"file\"))\n}\n\n// containerLabels returns an allocated processLabel and fileLabel to be used for\n// container labeling by the calling process.\nfunc containerLabels() (processLabel string, fileLabel string) {\n\tif !getEnabled() {\n\t\treturn \"\", \"\"\n\t}\n\n\tprocessLabel = label(\"process\")\n\tfileLabel = label(\"file\")\n\treadOnlyFileLabel = label(\"ro_file\")\n\n\tif processLabel == \"\" || fileLabel == \"\" {\n\t\treturn \"\", fileLabel\n\t}\n\n\tif readOnlyFileLabel == \"\" {\n\t\treadOnlyFileLabel = fileLabel\n\t}\n\n\treturn addMcs(processLabel, fileLabel)\n}\n\nfunc addMcs(processLabel, fileLabel string) (string, string) {\n\tscon, _ := NewContext(processLabel)\n\tif scon[\"level\"] != \"\" {\n\t\tmcs := uniqMcs(CategoryRange)\n\t\tscon[\"level\"] = mcs\n\t\tprocessLabel = scon.Get()\n\t\tscon, _ = NewContext(fileLabel)\n\t\tscon[\"level\"] = mcs\n\t\tfileLabel = scon.Get()\n\t}\n\treturn processLabel, fileLabel\n}\n\n// securityCheckContext validates that the SELinux label is understood by the kernel\nfunc securityCheckContext(val string) error {\n\treturn os.WriteFile(filepath.Join(getSelinuxMountPoint(), \"context\"), []byte(val), 0)\n}\n\n// copyLevel returns a label with the MLS/MCS level from src label replaced on\n// the dest label.\nfunc copyLevel(src, dest string) (string, error) {\n\tif src == \"\" {\n\t\treturn \"\", nil\n\t}\n\tif err := SecurityCheckContext(src); err != nil {\n\t\treturn \"\", err\n\t}\n\tif err := SecurityCheckContext(dest); err != nil {\n\t\treturn \"\", err\n\t}\n\tscon, err := NewContext(src)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\ttcon, err := NewContext(dest)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tmcsDelete(tcon[\"level\"])\n\t_ = mcsAdd(scon[\"level\"])\n\ttcon[\"level\"] = scon[\"level\"]\n\treturn tcon.Get(), nil\n}\n\n// chcon changes the fpath file object to the SELinux label.\n// If fpath is a directory and recurse is true, then chcon walks the\n// directory tree setting the label.\nfunc chcon(fpath string, label string, recurse bool) error {\n\tif fpath == \"\" {\n\t\treturn ErrEmptyPath\n\t}\n\tif label == \"\" {\n\t\treturn nil\n\t}\n\n\texcludePaths := map[string]bool{\n\t\t\"/\":           true,\n\t\t\"/bin\":        true,\n\t\t\"/boot\":       true,\n\t\t\"/dev\":        true,\n\t\t\"/etc\":        true,\n\t\t\"/etc/passwd\": true,\n\t\t\"/etc/pki\":    true,\n\t\t\"/etc/shadow\": true,\n\t\t\"/home\":       true,\n\t\t\"/lib\":        true,\n\t\t\"/lib64\":      true,\n\t\t\"/media\":      true,\n\t\t\"/opt\":        true,\n\t\t\"/proc\":       true,\n\t\t\"/root\":       true,\n\t\t\"/run\":        true,\n\t\t\"/sbin\":       true,\n\t\t\"/srv\":        true,\n\t\t\"/sys\":        true,\n\t\t\"/tmp\":        true,\n\t\t\"/usr\":        true,\n\t\t\"/var\":        true,\n\t\t\"/var/lib\":    true,\n\t\t\"/var/log\":    true,\n\t}\n\n\tif home := os.Getenv(\"HOME\"); home != \"\" {\n\t\texcludePaths[home] = true\n\t}\n\n\tif sudoUser := os.Getenv(\"SUDO_USER\"); sudoUser != \"\" {\n\t\tif usr, err := user.Lookup(sudoUser); err == nil {\n\t\t\texcludePaths[usr.HomeDir] = true\n\t\t}\n\t}\n\n\tif fpath != \"/\" {\n\t\tfpath = strings.TrimSuffix(fpath, \"/\")\n\t}\n\tif excludePaths[fpath] {\n\t\treturn fmt.Errorf(\"SELinux relabeling of %s is not allowed\", fpath)\n\t}\n\n\tif !recurse {\n\t\terr := lSetFileLabel(fpath, label)\n\t\tif err != nil {\n\t\t\t// Check if file doesn't exist, must have been removed\n\t\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\t// Check if current label is correct on disk\n\t\t\tflabel, nerr := lFileLabel(fpath)\n\t\t\tif nerr == nil && flabel == label {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\t// Check if file doesn't exist, must have been removed\n\t\t\tif errors.Is(nerr, os.ErrNotExist) {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\n\treturn rchcon(fpath, label)\n}\n\nfunc rchcon(fpath, label string) error { //revive:disable:cognitive-complexity\n\tfastMode := false\n\t// If the current label matches the new label, assume\n\t// other labels are correct.\n\tif cLabel, err := lFileLabel(fpath); err == nil && cLabel == label {\n\t\tfastMode = true\n\t}\n\treturn pwalkdir.Walk(fpath, func(p string, _ fs.DirEntry, _ error) error {\n\t\tif fastMode {\n\t\t\tif cLabel, err := lFileLabel(p); err == nil && cLabel == label {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\terr := lSetFileLabel(p, label)\n\t\t// Walk a file tree can race with removal, so ignore ENOENT.\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t})\n}\n\n// dupSecOpt takes an SELinux process label and returns security options that\n// can be used to set the SELinux Type and Level for future container processes.\nfunc dupSecOpt(src string) ([]string, error) {\n\tif src == \"\" {\n\t\treturn nil, nil\n\t}\n\tcon, err := NewContext(src)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif con[\"user\"] == \"\" ||\n\t\tcon[\"role\"] == \"\" ||\n\t\tcon[\"type\"] == \"\" {\n\t\treturn nil, nil\n\t}\n\tdup := []string{\n\t\t\"user:\" + con[\"user\"],\n\t\t\"role:\" + con[\"role\"],\n\t\t\"type:\" + con[\"type\"],\n\t}\n\n\tif con[\"level\"] != \"\" {\n\t\tdup = append(dup, \"level:\"+con[\"level\"])\n\t}\n\n\treturn dup, nil\n}\n\n// findUserInContext scans the reader for a valid SELinux context\n// match that is verified with the verifier. Invalid contexts are\n// skipped. It returns a matched context or an empty string if no\n// match is found. If a scanner error occurs, it is returned.\nfunc findUserInContext(context Context, r io.Reader, verifier func(string) error) (string, error) {\n\tfromRole := context[\"role\"]\n\tfromType := context[\"type\"]\n\tscanner := bufio.NewScanner(r)\n\n\tfor scanner.Scan() {\n\t\tfromConns := strings.Fields(scanner.Text())\n\t\tif len(fromConns) == 0 {\n\t\t\t// Skip blank lines\n\t\t\tcontinue\n\t\t}\n\n\t\tline := fromConns[0]\n\n\t\tif line[0] == ';' || line[0] == '#' {\n\t\t\t// Skip comments\n\t\t\tcontinue\n\t\t}\n\n\t\t// user context files contexts are formatted as\n\t\t// role_r:type_t:s0 where the user is missing.\n\t\tlineArr := strings.SplitN(line, \":\", 4)\n\t\t// skip context with typo, or role and type do not match\n\t\tif len(lineArr) != 3 ||\n\t\t\tlineArr[0] != fromRole ||\n\t\t\tlineArr[1] != fromType {\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, cc := range fromConns[1:] {\n\t\t\ttoConns := strings.SplitN(cc, \":\", 4)\n\t\t\tif len(toConns) != 3 {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tcontext[\"role\"] = toConns[0]\n\t\t\tcontext[\"type\"] = toConns[1]\n\n\t\t\toutConn := context.get()\n\t\t\tif err := verifier(outConn); err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\treturn outConn, nil\n\t\t}\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to scan for context: %w\", err)\n\t}\n\n\treturn \"\", nil\n}\n\nfunc getDefaultContextFromReaders(c *defaultSECtx) (string, error) {\n\tif c.verifier == nil {\n\t\treturn \"\", ErrVerifierNil\n\t}\n\n\tcontext, err := newContext(c.scon)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"failed to create label for %s: %w\", c.scon, err)\n\t}\n\n\t// set so the verifier validates the matched context with the provided user and level.\n\tcontext[\"user\"] = c.user\n\tcontext[\"level\"] = c.level\n\n\tconn, err := findUserInContext(context, c.userRdr, c.verifier)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif conn != \"\" {\n\t\treturn conn, nil\n\t}\n\n\tconn, err = findUserInContext(context, c.defaultRdr, c.verifier)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif conn != \"\" {\n\t\treturn conn, nil\n\t}\n\n\treturn \"\", fmt.Errorf(\"context %q not found: %w\", c.scon, ErrContextMissing)\n}\n\nfunc getDefaultContextWithLevel(user, level, scon string) (string, error) {\n\tuserPath := filepath.Join(policyRoot(), selinuxUsersDir, user)\n\tfu, err := os.Open(userPath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer fu.Close()\n\n\tdefaultPath := filepath.Join(policyRoot(), defaultContexts)\n\tfd, err := os.Open(defaultPath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer fd.Close()\n\n\tc := defaultSECtx{\n\t\tuser:       user,\n\t\tlevel:      level,\n\t\tscon:       scon,\n\t\tuserRdr:    fu,\n\t\tdefaultRdr: fd,\n\t\tverifier:   securityCheckContext,\n\t}\n\n\treturn getDefaultContextFromReaders(&c)\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go",
    "content": "//go:build !linux\n// +build !linux\n\npackage selinux\n\nfunc readConThreadSelf(string) (string, error) {\n\treturn \"\", nil\n}\n\nfunc writeConThreadSelf(string, string) error {\n\treturn nil\n}\n\nfunc setDisabled() {}\n\nfunc getEnabled() bool {\n\treturn false\n}\n\nfunc classIndex(string) (int, error) {\n\treturn -1, nil\n}\n\nfunc setFileLabel(string, string) error {\n\treturn nil\n}\n\nfunc lSetFileLabel(string, string) error {\n\treturn nil\n}\n\nfunc fileLabel(string) (string, error) {\n\treturn \"\", nil\n}\n\nfunc lFileLabel(string) (string, error) {\n\treturn \"\", nil\n}\n\nfunc setFSCreateLabel(string) error {\n\treturn nil\n}\n\nfunc fsCreateLabel() (string, error) {\n\treturn \"\", nil\n}\n\nfunc currentLabel() (string, error) {\n\treturn \"\", nil\n}\n\nfunc pidLabel(int) (string, error) {\n\treturn \"\", nil\n}\n\nfunc execLabel() (string, error) {\n\treturn \"\", nil\n}\n\nfunc canonicalizeContext(string) (string, error) {\n\treturn \"\", nil\n}\n\nfunc computeCreateContext(string, string, string) (string, error) {\n\treturn \"\", nil\n}\n\nfunc calculateGlbLub(string, string) (string, error) {\n\treturn \"\", nil\n}\n\nfunc peerLabel(uintptr) (string, error) {\n\treturn \"\", nil\n}\n\nfunc setKeyLabel(string) error {\n\treturn nil\n}\n\nfunc keyLabel() (string, error) {\n\treturn \"\", nil\n}\n\nfunc (c Context) get() string {\n\treturn \"\"\n}\n\nfunc newContext(string) (Context, error) {\n\treturn Context{}, nil\n}\n\nfunc clearLabels() {\n}\n\nfunc reserveLabel(string) {\n}\n\nfunc isMLSEnabled() bool {\n\treturn false\n}\n\nfunc enforceMode() int {\n\treturn Disabled\n}\n\nfunc setEnforceMode(int) error {\n\treturn nil\n}\n\nfunc defaultEnforceMode() int {\n\treturn Disabled\n}\n\nfunc releaseLabel(string) {\n}\n\nfunc roFileLabel() string {\n\treturn \"\"\n}\n\nfunc kvmContainerLabels() (string, string) {\n\treturn \"\", \"\"\n}\n\nfunc initContainerLabels() (string, string) {\n\treturn \"\", \"\"\n}\n\nfunc containerLabels() (string, string) {\n\treturn \"\", \"\"\n}\n\nfunc securityCheckContext(string) error {\n\treturn nil\n}\n\nfunc copyLevel(string, string) (string, error) {\n\treturn \"\", nil\n}\n\nfunc chcon(string, string, bool) error {\n\treturn nil\n}\n\nfunc dupSecOpt(string) ([]string, error) {\n\treturn nil, nil\n}\n\nfunc getDefaultContextWithLevel(string, string, string) (string, error) {\n\treturn \"\", nil\n}\n\nfunc label(_ string) string {\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/selinux/go-selinux/xattrs_linux.go",
    "content": "package selinux\n\nimport (\n\t\"golang.org/x/sys/unix\"\n)\n\n// lgetxattr returns a []byte slice containing the value of\n// an extended attribute attr set for path.\nfunc lgetxattr(path, attr string) ([]byte, error) {\n\t// Start with a 128 length byte array\n\tdest := make([]byte, 128)\n\tsz, errno := doLgetxattr(path, attr, dest)\n\tfor errno == unix.ERANGE { //nolint:errorlint // unix errors are bare\n\t\t// Buffer too small, use zero-sized buffer to get the actual size\n\t\tsz, errno = doLgetxattr(path, attr, []byte{})\n\t\tif errno != nil {\n\t\t\treturn nil, errno\n\t\t}\n\n\t\tdest = make([]byte, sz)\n\t\tsz, errno = doLgetxattr(path, attr, dest)\n\t}\n\tif errno != nil {\n\t\treturn nil, errno\n\t}\n\n\treturn dest[:sz], nil\n}\n\n// doLgetxattr is a wrapper that retries on EINTR\nfunc doLgetxattr(path, attr string, dest []byte) (int, error) {\n\tfor {\n\t\tsz, err := unix.Lgetxattr(path, attr, dest)\n\t\tif err != unix.EINTR {\n\t\t\treturn sz, err\n\t\t}\n\t}\n}\n\n// getxattr returns a []byte slice containing the value of\n// an extended attribute attr set for path.\nfunc getxattr(path, attr string) ([]byte, error) {\n\t// Start with a 128 length byte array\n\tdest := make([]byte, 128)\n\tsz, errno := dogetxattr(path, attr, dest)\n\tfor errno == unix.ERANGE { //nolint:errorlint // unix errors are bare\n\t\t// Buffer too small, use zero-sized buffer to get the actual size\n\t\tsz, errno = dogetxattr(path, attr, []byte{})\n\t\tif errno != nil {\n\t\t\treturn nil, errno\n\t\t}\n\n\t\tdest = make([]byte, sz)\n\t\tsz, errno = dogetxattr(path, attr, dest)\n\t}\n\tif errno != nil {\n\t\treturn nil, errno\n\t}\n\n\treturn dest[:sz], nil\n}\n\n// dogetxattr is a wrapper that retries on EINTR\nfunc dogetxattr(path, attr string, dest []byte) (int, error) {\n\tfor {\n\t\tsz, err := unix.Getxattr(path, attr, dest)\n\t\tif err != unix.EINTR {\n\t\t\treturn sz, err\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/selinux/pkg/pwalkdir/README.md",
    "content": "## pwalkdir: parallel implementation of filepath.WalkDir\n\nThis is a wrapper for [filepath.WalkDir](https://pkg.go.dev/path/filepath#WalkDir)\nwhich may speed it up by calling multiple callback functions (WalkDirFunc)\nin parallel, utilizing goroutines.\n\nBy default, it utilizes 2\\*runtime.NumCPU() goroutines for callbacks.\nThis can be changed by using WalkN function which has the additional\nparameter, specifying the number of goroutines (concurrency).\n\n### pwalk vs pwalkdir\n\nThis package is very similar to\n[pwalk](https://pkg.go.dev/github.com/opencontainers/selinux/pkg/pwalkdir),\nbut utilizes `filepath.WalkDir` (added to Go 1.16), which does not call stat(2)\non every entry and is therefore faster (up to 3x, depending on usage scenario).\n\nUsers who are OK with requiring Go 1.16+ should switch to this\nimplementation.\n\n### Caveats\n\nPlease note the following limitations of this code:\n\n* Unlike filepath.WalkDir, the order of calls is non-deterministic;\n\n* Only primitive error handling is supported:\n\n  * fs.SkipDir is not supported;\n\n  * ErrNotExist errors from filepath.WalkDir are silently ignored for any path\n    except the top directory (WalkDir argument); any other error is returned to\n    the caller of WalkDir;\n\n  * once any error is returned from any walkDirFunc instance, no more calls\n    to WalkDirFunc are made, and the error is returned to the caller of WalkDir;\n\n  * if more than one WalkDirFunc instance will return an error, only one\n    of such errors will be propagated to and returned by WalkDir, others\n    will be silently discarded.\n\n### Documentation\n\nFor the official documentation, see\nhttps://pkg.go.dev/github.com/opencontainers/selinux/pkg/pwalkdir\n\n### Benchmarks\n\nFor a WalkDirFunc that consists solely of the return statement, this\nimplementation is about 15% slower than the standard library's\nfilepath.WalkDir.\n\nOtherwise (if a WalkDirFunc is actually doing something) this is usually\nfaster, except when the WalkDirN(..., 1) is used. Run `go test -bench .`\nto see how different operations can benefit from it, as well as how the\nlevel of parallelism affects the speed.\n"
  },
  {
    "path": "vendor/github.com/opencontainers/selinux/pkg/pwalkdir/pwalkdir.go",
    "content": "//go:build go1.16\n// +build go1.16\n\npackage pwalkdir\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io/fs\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"sync\"\n)\n\n// Walk is a wrapper for filepath.WalkDir which can call multiple walkFn\n// in parallel, allowing to handle each item concurrently. A maximum of\n// twice the runtime.NumCPU() walkFn will be called at any one time.\n// If you want to change the maximum, use WalkN instead.\n//\n// The order of calls is non-deterministic.\n//\n// Note that this implementation only supports primitive error handling:\n//\n// - no errors are ever passed to walkFn;\n//\n// - once a walkFn returns any error, all further processing stops\n// and the error is returned to the caller of Walk;\n//\n// - filepath.SkipDir is not supported;\n//\n// - if more than one walkFn instance will return an error, only one\n// of such errors will be propagated and returned by Walk, others\n// will be silently discarded.\nfunc Walk(root string, walkFn fs.WalkDirFunc) error {\n\treturn WalkN(root, walkFn, runtime.NumCPU()*2)\n}\n\n// WalkN is a wrapper for filepath.WalkDir which can call multiple walkFn\n// in parallel, allowing to handle each item concurrently. A maximum of\n// num walkFn will be called at any one time.\n//\n// Please see Walk documentation for caveats of using this function.\nfunc WalkN(root string, walkFn fs.WalkDirFunc, num int) error {\n\t// make sure limit is sensible\n\tif num < 1 {\n\t\treturn fmt.Errorf(\"walk(%q): num must be > 0\", root)\n\t}\n\n\tfiles := make(chan *walkArgs, 2*num)\n\terrCh := make(chan error, 1) // Get the first error, ignore others.\n\n\t// Start walking a tree asap.\n\tvar (\n\t\terr error\n\t\twg  sync.WaitGroup\n\n\t\trootLen   = len(root)\n\t\trootEntry *walkArgs\n\t)\n\twg.Add(1)\n\tgo func() {\n\t\terr = filepath.WalkDir(root, func(p string, entry fs.DirEntry, err error) error {\n\t\t\tif err != nil {\n\t\t\t\t// Walking a file tree can race with removal,\n\t\t\t\t// so ignore ENOENT, except for root.\n\t\t\t\t// https://github.com/opencontainers/selinux/issues/199.\n\t\t\t\tif errors.Is(err, fs.ErrNotExist) && len(p) != rootLen {\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\tclose(files)\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif len(p) == rootLen {\n\t\t\t\t// Root entry is processed separately below.\n\t\t\t\trootEntry = &walkArgs{path: p, entry: entry}\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\t// Add a file to the queue unless a callback sent an error.\n\t\t\tselect {\n\t\t\tcase e := <-errCh:\n\t\t\t\tclose(files)\n\t\t\t\treturn e\n\t\t\tdefault:\n\t\t\t\tfiles <- &walkArgs{path: p, entry: entry}\n\t\t\t\treturn nil\n\t\t\t}\n\t\t})\n\t\tif err == nil {\n\t\t\tclose(files)\n\t\t}\n\t\twg.Done()\n\t}()\n\n\twg.Add(num)\n\tfor i := 0; i < num; i++ {\n\t\tgo func() {\n\t\t\tfor file := range files {\n\t\t\t\tif e := walkFn(file.path, file.entry, nil); e != nil {\n\t\t\t\t\tselect {\n\t\t\t\t\tcase errCh <- e: // sent ok\n\t\t\t\t\tdefault: // buffer full\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\twg.Done()\n\t\t}()\n\t}\n\n\twg.Wait()\n\n\tif err == nil {\n\t\terr = walkFn(rootEntry.path, rootEntry.entry, nil)\n\t}\n\n\treturn err\n}\n\n// walkArgs holds the arguments that were passed to the Walk or WalkN\n// functions.\ntype walkArgs struct {\n\tentry fs.DirEntry\n\tpath  string\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/.gitignore",
    "content": "*.out\n*.swp\n*.8\n*.6\n_obj\n_test*\nmarkdown\ntags\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/.travis.yml",
    "content": "sudo: false\nlanguage: go\ngo:\n  - \"1.10.x\"\n  - \"1.11.x\"\n  - tip\nmatrix:\n  fast_finish: true\n  allow_failures:\n    - go: tip\ninstall:\n  - # Do nothing. This is needed to prevent default install action \"go get -t -v ./...\" from happening here (we want it to happen inside script step).\nscript:\n  - go get -t -v ./...\n  - diff -u <(echo -n) <(gofmt -d -s .)\n  - go tool vet .\n  - go test -v ./...\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/LICENSE.txt",
    "content": "Blackfriday is distributed under the Simplified BSD License:\n\n> Copyright © 2011 Russ Ross\n> 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\n> are 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> 2.  Redistributions in binary form must reproduce the above\n>     copyright notice, this list of conditions and the following\n>     disclaimer in the documentation and/or other materials provided with\n>     the 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\n> FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n> COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n> INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n> BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n> LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n> ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n> POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/README.md",
    "content": "Blackfriday\n[![Build Status][BuildV2SVG]][BuildV2URL]\n[![PkgGoDev][PkgGoDevV2SVG]][PkgGoDevV2URL]\n===========\n\nBlackfriday is a [Markdown][1] processor implemented in [Go][2]. It\nis paranoid about its input (so you can safely feed it user-supplied\ndata), it is fast, it supports common extensions (tables, smart\npunctuation substitutions, etc.), and it is safe for all utf-8\n(unicode) input.\n\nHTML output is currently supported, along with Smartypants\nextensions.\n\nIt started as a translation from C of [Sundown][3].\n\n\nInstallation\n------------\n\nBlackfriday is compatible with modern Go releases in module mode.\nWith Go installed:\n\n    go get github.com/russross/blackfriday/v2\n\nwill resolve and add the package to the current development module,\nthen build and install it. Alternatively, you can achieve the same\nif you import it in a package:\n\n    import \"github.com/russross/blackfriday/v2\"\n\nand `go get` without parameters.\n\nLegacy GOPATH mode is unsupported.\n\n\nVersions\n--------\n\nCurrently maintained and recommended version of Blackfriday is `v2`. It's being\ndeveloped on its own branch: https://github.com/russross/blackfriday/tree/v2 and the\ndocumentation is available at\nhttps://pkg.go.dev/github.com/russross/blackfriday/v2.\n\nIt is `go get`-able in module mode at `github.com/russross/blackfriday/v2`.\n\nVersion 2 offers a number of improvements over v1:\n\n* Cleaned up API\n* A separate call to [`Parse`][4], which produces an abstract syntax tree for\n  the document\n* Latest bug fixes\n* Flexibility to easily add your own rendering extensions\n\nPotential drawbacks:\n\n* Our benchmarks show v2 to be slightly slower than v1. Currently in the\n  ballpark of around 15%.\n* API breakage. If you can't afford modifying your code to adhere to the new API\n  and don't care too much about the new features, v2 is probably not for you.\n* Several bug fixes are trailing behind and still need to be forward-ported to\n  v2. See issue [#348](https://github.com/russross/blackfriday/issues/348) for\n  tracking.\n\nIf you are still interested in the legacy `v1`, you can import it from\n`github.com/russross/blackfriday`. Documentation for the legacy v1 can be found\nhere: https://pkg.go.dev/github.com/russross/blackfriday.\n\n\nUsage\n-----\n\nFor the most sensible markdown processing, it is as simple as getting your input\ninto a byte slice and calling:\n\n```go\noutput := blackfriday.Run(input)\n```\n\nYour input will be parsed and the output rendered with a set of most popular\nextensions enabled. If you want the most basic feature set, corresponding with\nthe bare Markdown specification, use:\n\n```go\noutput := blackfriday.Run(input, blackfriday.WithNoExtensions())\n```\n\n### Sanitize untrusted content\n\nBlackfriday itself does nothing to protect against malicious content. If you are\ndealing with user-supplied markdown, we recommend running Blackfriday's output\nthrough HTML sanitizer such as [Bluemonday][5].\n\nHere's an example of simple usage of Blackfriday together with Bluemonday:\n\n```go\nimport (\n    \"github.com/microcosm-cc/bluemonday\"\n    \"github.com/russross/blackfriday/v2\"\n)\n\n// ...\nunsafe := blackfriday.Run(input)\nhtml := bluemonday.UGCPolicy().SanitizeBytes(unsafe)\n```\n\n### Custom options\n\nIf you want to customize the set of options, use `blackfriday.WithExtensions`,\n`blackfriday.WithRenderer` and `blackfriday.WithRefOverride`.\n\n### `blackfriday-tool`\n\nYou can also check out `blackfriday-tool` for a more complete example\nof how to use it. Download and install it using:\n\n    go get github.com/russross/blackfriday-tool\n\nThis is a simple command-line tool that allows you to process a\nmarkdown file using a standalone program.  You can also browse the\nsource directly on github if you are just looking for some example\ncode:\n\n* <https://github.com/russross/blackfriday-tool>\n\nNote that if you have not already done so, installing\n`blackfriday-tool` will be sufficient to download and install\nblackfriday in addition to the tool itself. The tool binary will be\ninstalled in `$GOPATH/bin`.  This is a statically-linked binary that\ncan be copied to wherever you need it without worrying about\ndependencies and library versions.\n\n### Sanitized anchor names\n\nBlackfriday includes an algorithm for creating sanitized anchor names\ncorresponding to a given input text. This algorithm is used to create\nanchors for headings when `AutoHeadingIDs` extension is enabled. The\nalgorithm has a specification, so that other packages can create\ncompatible anchor names and links to those anchors.\n\nThe specification is located at https://pkg.go.dev/github.com/russross/blackfriday/v2#hdr-Sanitized_Anchor_Names.\n\n[`SanitizedAnchorName`](https://pkg.go.dev/github.com/russross/blackfriday/v2#SanitizedAnchorName) exposes this functionality, and can be used to\ncreate compatible links to the anchor names generated by blackfriday.\nThis algorithm is also implemented in a small standalone package at\n[`github.com/shurcooL/sanitized_anchor_name`](https://pkg.go.dev/github.com/shurcooL/sanitized_anchor_name). It can be useful for clients\nthat want a small package and don't need full functionality of blackfriday.\n\n\nFeatures\n--------\n\nAll features of Sundown are supported, including:\n\n*   **Compatibility**. The Markdown v1.0.3 test suite passes with\n    the `--tidy` option.  Without `--tidy`, the differences are\n    mostly in whitespace and entity escaping, where blackfriday is\n    more consistent and cleaner.\n\n*   **Common extensions**, including table support, fenced code\n    blocks, autolinks, strikethroughs, non-strict emphasis, etc.\n\n*   **Safety**. Blackfriday is paranoid when parsing, making it safe\n    to feed untrusted user input without fear of bad things\n    happening. The test suite stress tests this and there are no\n    known inputs that make it crash.  If you find one, please let me\n    know and send me the input that does it.\n\n    NOTE: \"safety\" in this context means *runtime safety only*. In order to\n    protect yourself against JavaScript injection in untrusted content, see\n    [this example](https://github.com/russross/blackfriday#sanitize-untrusted-content).\n\n*   **Fast processing**. It is fast enough to render on-demand in\n    most web applications without having to cache the output.\n\n*   **Thread safety**. You can run multiple parsers in different\n    goroutines without ill effect. There is no dependence on global\n    shared state.\n\n*   **Minimal dependencies**. Blackfriday only depends on standard\n    library packages in Go. The source code is pretty\n    self-contained, so it is easy to add to any project, including\n    Google App Engine projects.\n\n*   **Standards compliant**. Output successfully validates using the\n    W3C validation tool for HTML 4.01 and XHTML 1.0 Transitional.\n\n\nExtensions\n----------\n\nIn addition to the standard markdown syntax, this package\nimplements the following extensions:\n\n*   **Intra-word emphasis supression**. The `_` character is\n    commonly used inside words when discussing code, so having\n    markdown interpret it as an emphasis command is usually the\n    wrong thing. Blackfriday lets you treat all emphasis markers as\n    normal characters when they occur inside a word.\n\n*   **Tables**. Tables can be created by drawing them in the input\n    using a simple syntax:\n\n    ```\n    Name    | Age\n    --------|------\n    Bob     | 27\n    Alice   | 23\n    ```\n\n*   **Fenced code blocks**. In addition to the normal 4-space\n    indentation to mark code blocks, you can explicitly mark them\n    and supply a language (to make syntax highlighting simple). Just\n    mark it like this:\n\n        ```go\n        func getTrue() bool {\n            return true\n        }\n        ```\n\n    You can use 3 or more backticks to mark the beginning of the\n    block, and the same number to mark the end of the block.\n\n    To preserve classes of fenced code blocks while using the bluemonday\n    HTML sanitizer, use the following policy:\n\n    ```go\n    p := bluemonday.UGCPolicy()\n    p.AllowAttrs(\"class\").Matching(regexp.MustCompile(\"^language-[a-zA-Z0-9]+$\")).OnElements(\"code\")\n    html := p.SanitizeBytes(unsafe)\n    ```\n\n*   **Definition lists**. A simple definition list is made of a single-line\n    term followed by a colon and the definition for that term.\n\n        Cat\n        : Fluffy animal everyone likes\n\n        Internet\n        : Vector of transmission for pictures of cats\n\n    Terms must be separated from the previous definition by a blank line.\n\n*   **Footnotes**. A marker in the text that will become a superscript number;\n    a footnote definition that will be placed in a list of footnotes at the\n    end of the document. A footnote looks like this:\n\n        This is a footnote.[^1]\n\n        [^1]: the footnote text.\n\n*   **Autolinking**. Blackfriday can find URLs that have not been\n    explicitly marked as links and turn them into links.\n\n*   **Strikethrough**. Use two tildes (`~~`) to mark text that\n    should be crossed out.\n\n*   **Hard line breaks**. With this extension enabled newlines in the input\n    translate into line breaks in the output. This extension is off by default.\n\n*   **Smart quotes**. Smartypants-style punctuation substitution is\n    supported, turning normal double- and single-quote marks into\n    curly quotes, etc.\n\n*   **LaTeX-style dash parsing** is an additional option, where `--`\n    is translated into `&ndash;`, and `---` is translated into\n    `&mdash;`. This differs from most smartypants processors, which\n    turn a single hyphen into an ndash and a double hyphen into an\n    mdash.\n\n*   **Smart fractions**, where anything that looks like a fraction\n    is translated into suitable HTML (instead of just a few special\n    cases like most smartypant processors). For example, `4/5`\n    becomes `<sup>4</sup>&frasl;<sub>5</sub>`, which renders as\n    <sup>4</sup>&frasl;<sub>5</sub>.\n\n\nOther renderers\n---------------\n\nBlackfriday is structured to allow alternative rendering engines. Here\nare a few of note:\n\n*   [github_flavored_markdown](https://pkg.go.dev/github.com/shurcooL/github_flavored_markdown):\n    provides a GitHub Flavored Markdown renderer with fenced code block\n    highlighting, clickable heading anchor links.\n\n    It's not customizable, and its goal is to produce HTML output\n    equivalent to the [GitHub Markdown API endpoint](https://developer.github.com/v3/markdown/#render-a-markdown-document-in-raw-mode),\n    except the rendering is performed locally.\n\n*   [markdownfmt](https://github.com/shurcooL/markdownfmt): like gofmt,\n    but for markdown.\n\n*   [LaTeX output](https://gitlab.com/ambrevar/blackfriday-latex):\n    renders output as LaTeX.\n\n*   [bfchroma](https://github.com/Depado/bfchroma/): provides convenience\n    integration with the [Chroma](https://github.com/alecthomas/chroma) code\n    highlighting library. bfchroma is only compatible with v2 of Blackfriday and\n    provides a drop-in renderer ready to use with Blackfriday, as well as\n    options and means for further customization.\n\n*   [Blackfriday-Confluence](https://github.com/kentaro-m/blackfriday-confluence): provides a [Confluence Wiki Markup](https://confluence.atlassian.com/doc/confluence-wiki-markup-251003035.html) renderer.\n\n*   [Blackfriday-Slack](https://github.com/karriereat/blackfriday-slack): converts markdown to slack message style\n\n\nTODO\n----\n\n*   More unit testing\n*   Improve Unicode support. It does not understand all Unicode\n    rules (about what constitutes a letter, a punctuation symbol,\n    etc.), so it may fail to detect word boundaries correctly in\n    some instances. It is safe on all UTF-8 input.\n\n\nLicense\n-------\n\n[Blackfriday is distributed under the Simplified BSD License](LICENSE.txt)\n\n\n   [1]: https://daringfireball.net/projects/markdown/ \"Markdown\"\n   [2]: https://golang.org/ \"Go Language\"\n   [3]: https://github.com/vmg/sundown \"Sundown\"\n   [4]: https://pkg.go.dev/github.com/russross/blackfriday/v2#Parse \"Parse func\"\n   [5]: https://github.com/microcosm-cc/bluemonday \"Bluemonday\"\n\n   [BuildV2SVG]: https://travis-ci.org/russross/blackfriday.svg?branch=v2\n   [BuildV2URL]: https://travis-ci.org/russross/blackfriday\n   [PkgGoDevV2SVG]: https://pkg.go.dev/badge/github.com/russross/blackfriday/v2\n   [PkgGoDevV2URL]: https://pkg.go.dev/github.com/russross/blackfriday/v2\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/block.go",
    "content": "//\n// Blackfriday Markdown Processor\n// Available at http://github.com/russross/blackfriday\n//\n// Copyright © 2011 Russ Ross <russ@russross.com>.\n// Distributed under the Simplified BSD License.\n// See README.md for details.\n//\n\n//\n// Functions to parse block-level elements.\n//\n\npackage blackfriday\n\nimport (\n\t\"bytes\"\n\t\"html\"\n\t\"regexp\"\n\t\"strings\"\n\t\"unicode\"\n)\n\nconst (\n\tcharEntity = \"&(?:#x[a-f0-9]{1,8}|#[0-9]{1,8}|[a-z][a-z0-9]{1,31});\"\n\tescapable  = \"[!\\\"#$%&'()*+,./:;<=>?@[\\\\\\\\\\\\]^_`{|}~-]\"\n)\n\nvar (\n\treBackslashOrAmp      = regexp.MustCompile(\"[\\\\&]\")\n\treEntityOrEscapedChar = regexp.MustCompile(\"(?i)\\\\\\\\\" + escapable + \"|\" + charEntity)\n)\n\n// Parse block-level data.\n// Note: this function and many that it calls assume that\n// the input buffer ends with a newline.\nfunc (p *Markdown) block(data []byte) {\n\t// this is called recursively: enforce a maximum depth\n\tif p.nesting >= p.maxNesting {\n\t\treturn\n\t}\n\tp.nesting++\n\n\t// parse out one block-level construct at a time\n\tfor len(data) > 0 {\n\t\t// prefixed heading:\n\t\t//\n\t\t// # Heading 1\n\t\t// ## Heading 2\n\t\t// ...\n\t\t// ###### Heading 6\n\t\tif p.isPrefixHeading(data) {\n\t\t\tdata = data[p.prefixHeading(data):]\n\t\t\tcontinue\n\t\t}\n\n\t\t// block of preformatted HTML:\n\t\t//\n\t\t// <div>\n\t\t//     ...\n\t\t// </div>\n\t\tif data[0] == '<' {\n\t\t\tif i := p.html(data, true); i > 0 {\n\t\t\t\tdata = data[i:]\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// title block\n\t\t//\n\t\t// % stuff\n\t\t// % more stuff\n\t\t// % even more stuff\n\t\tif p.extensions&Titleblock != 0 {\n\t\t\tif data[0] == '%' {\n\t\t\t\tif i := p.titleBlock(data, true); i > 0 {\n\t\t\t\t\tdata = data[i:]\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// blank lines.  note: returns the # of bytes to skip\n\t\tif i := p.isEmpty(data); i > 0 {\n\t\t\tdata = data[i:]\n\t\t\tcontinue\n\t\t}\n\n\t\t// indented code block:\n\t\t//\n\t\t//     func max(a, b int) int {\n\t\t//         if a > b {\n\t\t//             return a\n\t\t//         }\n\t\t//         return b\n\t\t//      }\n\t\tif p.codePrefix(data) > 0 {\n\t\t\tdata = data[p.code(data):]\n\t\t\tcontinue\n\t\t}\n\n\t\t// fenced code block:\n\t\t//\n\t\t// ``` go\n\t\t// func fact(n int) int {\n\t\t//     if n <= 1 {\n\t\t//         return n\n\t\t//     }\n\t\t//     return n * fact(n-1)\n\t\t// }\n\t\t// ```\n\t\tif p.extensions&FencedCode != 0 {\n\t\t\tif i := p.fencedCodeBlock(data, true); i > 0 {\n\t\t\t\tdata = data[i:]\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// horizontal rule:\n\t\t//\n\t\t// ------\n\t\t// or\n\t\t// ******\n\t\t// or\n\t\t// ______\n\t\tif p.isHRule(data) {\n\t\t\tp.addBlock(HorizontalRule, nil)\n\t\t\tvar i int\n\t\t\tfor i = 0; i < len(data) && data[i] != '\\n'; i++ {\n\t\t\t}\n\t\t\tdata = data[i:]\n\t\t\tcontinue\n\t\t}\n\n\t\t// block quote:\n\t\t//\n\t\t// > A big quote I found somewhere\n\t\t// > on the web\n\t\tif p.quotePrefix(data) > 0 {\n\t\t\tdata = data[p.quote(data):]\n\t\t\tcontinue\n\t\t}\n\n\t\t// table:\n\t\t//\n\t\t// Name  | Age | Phone\n\t\t// ------|-----|---------\n\t\t// Bob   | 31  | 555-1234\n\t\t// Alice | 27  | 555-4321\n\t\tif p.extensions&Tables != 0 {\n\t\t\tif i := p.table(data); i > 0 {\n\t\t\t\tdata = data[i:]\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// an itemized/unordered list:\n\t\t//\n\t\t// * Item 1\n\t\t// * Item 2\n\t\t//\n\t\t// also works with + or -\n\t\tif p.uliPrefix(data) > 0 {\n\t\t\tdata = data[p.list(data, 0):]\n\t\t\tcontinue\n\t\t}\n\n\t\t// a numbered/ordered list:\n\t\t//\n\t\t// 1. Item 1\n\t\t// 2. Item 2\n\t\tif p.oliPrefix(data) > 0 {\n\t\t\tdata = data[p.list(data, ListTypeOrdered):]\n\t\t\tcontinue\n\t\t}\n\n\t\t// definition lists:\n\t\t//\n\t\t// Term 1\n\t\t// :   Definition a\n\t\t// :   Definition b\n\t\t//\n\t\t// Term 2\n\t\t// :   Definition c\n\t\tif p.extensions&DefinitionLists != 0 {\n\t\t\tif p.dliPrefix(data) > 0 {\n\t\t\t\tdata = data[p.list(data, ListTypeDefinition):]\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// anything else must look like a normal paragraph\n\t\t// note: this finds underlined headings, too\n\t\tdata = data[p.paragraph(data):]\n\t}\n\n\tp.nesting--\n}\n\nfunc (p *Markdown) addBlock(typ NodeType, content []byte) *Node {\n\tp.closeUnmatchedBlocks()\n\tcontainer := p.addChild(typ, 0)\n\tcontainer.content = content\n\treturn container\n}\n\nfunc (p *Markdown) isPrefixHeading(data []byte) bool {\n\tif data[0] != '#' {\n\t\treturn false\n\t}\n\n\tif p.extensions&SpaceHeadings != 0 {\n\t\tlevel := 0\n\t\tfor level < 6 && level < len(data) && data[level] == '#' {\n\t\t\tlevel++\n\t\t}\n\t\tif level == len(data) || data[level] != ' ' {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc (p *Markdown) prefixHeading(data []byte) int {\n\tlevel := 0\n\tfor level < 6 && level < len(data) && data[level] == '#' {\n\t\tlevel++\n\t}\n\ti := skipChar(data, level, ' ')\n\tend := skipUntilChar(data, i, '\\n')\n\tskip := end\n\tid := \"\"\n\tif p.extensions&HeadingIDs != 0 {\n\t\tj, k := 0, 0\n\t\t// find start/end of heading id\n\t\tfor j = i; j < end-1 && (data[j] != '{' || data[j+1] != '#'); j++ {\n\t\t}\n\t\tfor k = j + 1; k < end && data[k] != '}'; k++ {\n\t\t}\n\t\t// extract heading id iff found\n\t\tif j < end && k < end {\n\t\t\tid = string(data[j+2 : k])\n\t\t\tend = j\n\t\t\tskip = k + 1\n\t\t\tfor end > 0 && data[end-1] == ' ' {\n\t\t\t\tend--\n\t\t\t}\n\t\t}\n\t}\n\tfor end > 0 && data[end-1] == '#' {\n\t\tif isBackslashEscaped(data, end-1) {\n\t\t\tbreak\n\t\t}\n\t\tend--\n\t}\n\tfor end > 0 && data[end-1] == ' ' {\n\t\tend--\n\t}\n\tif end > i {\n\t\tif id == \"\" && p.extensions&AutoHeadingIDs != 0 {\n\t\t\tid = SanitizedAnchorName(string(data[i:end]))\n\t\t}\n\t\tblock := p.addBlock(Heading, data[i:end])\n\t\tblock.HeadingID = id\n\t\tblock.Level = level\n\t}\n\treturn skip\n}\n\nfunc (p *Markdown) isUnderlinedHeading(data []byte) int {\n\t// test of level 1 heading\n\tif data[0] == '=' {\n\t\ti := skipChar(data, 1, '=')\n\t\ti = skipChar(data, i, ' ')\n\t\tif i < len(data) && data[i] == '\\n' {\n\t\t\treturn 1\n\t\t}\n\t\treturn 0\n\t}\n\n\t// test of level 2 heading\n\tif data[0] == '-' {\n\t\ti := skipChar(data, 1, '-')\n\t\ti = skipChar(data, i, ' ')\n\t\tif i < len(data) && data[i] == '\\n' {\n\t\t\treturn 2\n\t\t}\n\t\treturn 0\n\t}\n\n\treturn 0\n}\n\nfunc (p *Markdown) titleBlock(data []byte, doRender bool) int {\n\tif data[0] != '%' {\n\t\treturn 0\n\t}\n\tsplitData := bytes.Split(data, []byte(\"\\n\"))\n\tvar i int\n\tfor idx, b := range splitData {\n\t\tif !bytes.HasPrefix(b, []byte(\"%\")) {\n\t\t\ti = idx // - 1\n\t\t\tbreak\n\t\t}\n\t}\n\n\tdata = bytes.Join(splitData[0:i], []byte(\"\\n\"))\n\tconsumed := len(data)\n\tdata = bytes.TrimPrefix(data, []byte(\"% \"))\n\tdata = bytes.Replace(data, []byte(\"\\n% \"), []byte(\"\\n\"), -1)\n\tblock := p.addBlock(Heading, data)\n\tblock.Level = 1\n\tblock.IsTitleblock = true\n\n\treturn consumed\n}\n\nfunc (p *Markdown) html(data []byte, doRender bool) int {\n\tvar i, j int\n\n\t// identify the opening tag\n\tif data[0] != '<' {\n\t\treturn 0\n\t}\n\tcurtag, tagfound := p.htmlFindTag(data[1:])\n\n\t// handle special cases\n\tif !tagfound {\n\t\t// check for an HTML comment\n\t\tif size := p.htmlComment(data, doRender); size > 0 {\n\t\t\treturn size\n\t\t}\n\n\t\t// check for an <hr> tag\n\t\tif size := p.htmlHr(data, doRender); size > 0 {\n\t\t\treturn size\n\t\t}\n\n\t\t// no special case recognized\n\t\treturn 0\n\t}\n\n\t// look for an unindented matching closing tag\n\t// followed by a blank line\n\tfound := false\n\t/*\n\t\tclosetag := []byte(\"\\n</\" + curtag + \">\")\n\t\tj = len(curtag) + 1\n\t\tfor !found {\n\t\t\t// scan for a closing tag at the beginning of a line\n\t\t\tif skip := bytes.Index(data[j:], closetag); skip >= 0 {\n\t\t\t\tj += skip + len(closetag)\n\t\t\t} else {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// see if it is the only thing on the line\n\t\t\tif skip := p.isEmpty(data[j:]); skip > 0 {\n\t\t\t\t// see if it is followed by a blank line/eof\n\t\t\t\tj += skip\n\t\t\t\tif j >= len(data) {\n\t\t\t\t\tfound = true\n\t\t\t\t\ti = j\n\t\t\t\t} else {\n\t\t\t\t\tif skip := p.isEmpty(data[j:]); skip > 0 {\n\t\t\t\t\t\tj += skip\n\t\t\t\t\t\tfound = true\n\t\t\t\t\t\ti = j\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t*/\n\n\t// if not found, try a second pass looking for indented match\n\t// but not if tag is \"ins\" or \"del\" (following original Markdown.pl)\n\tif !found && curtag != \"ins\" && curtag != \"del\" {\n\t\ti = 1\n\t\tfor i < len(data) {\n\t\t\ti++\n\t\t\tfor i < len(data) && !(data[i-1] == '<' && data[i] == '/') {\n\t\t\t\ti++\n\t\t\t}\n\n\t\t\tif i+2+len(curtag) >= len(data) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tj = p.htmlFindEnd(curtag, data[i-1:])\n\n\t\t\tif j > 0 {\n\t\t\t\ti += j - 1\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tif !found {\n\t\treturn 0\n\t}\n\n\t// the end of the block has been found\n\tif doRender {\n\t\t// trim newlines\n\t\tend := i\n\t\tfor end > 0 && data[end-1] == '\\n' {\n\t\t\tend--\n\t\t}\n\t\tfinalizeHTMLBlock(p.addBlock(HTMLBlock, data[:end]))\n\t}\n\n\treturn i\n}\n\nfunc finalizeHTMLBlock(block *Node) {\n\tblock.Literal = block.content\n\tblock.content = nil\n}\n\n// HTML comment, lax form\nfunc (p *Markdown) htmlComment(data []byte, doRender bool) int {\n\ti := p.inlineHTMLComment(data)\n\t// needs to end with a blank line\n\tif j := p.isEmpty(data[i:]); j > 0 {\n\t\tsize := i + j\n\t\tif doRender {\n\t\t\t// trim trailing newlines\n\t\t\tend := size\n\t\t\tfor end > 0 && data[end-1] == '\\n' {\n\t\t\t\tend--\n\t\t\t}\n\t\t\tblock := p.addBlock(HTMLBlock, data[:end])\n\t\t\tfinalizeHTMLBlock(block)\n\t\t}\n\t\treturn size\n\t}\n\treturn 0\n}\n\n// HR, which is the only self-closing block tag considered\nfunc (p *Markdown) htmlHr(data []byte, doRender bool) int {\n\tif len(data) < 4 {\n\t\treturn 0\n\t}\n\tif data[0] != '<' || (data[1] != 'h' && data[1] != 'H') || (data[2] != 'r' && data[2] != 'R') {\n\t\treturn 0\n\t}\n\tif data[3] != ' ' && data[3] != '/' && data[3] != '>' {\n\t\t// not an <hr> tag after all; at least not a valid one\n\t\treturn 0\n\t}\n\ti := 3\n\tfor i < len(data) && data[i] != '>' && data[i] != '\\n' {\n\t\ti++\n\t}\n\tif i < len(data) && data[i] == '>' {\n\t\ti++\n\t\tif j := p.isEmpty(data[i:]); j > 0 {\n\t\t\tsize := i + j\n\t\t\tif doRender {\n\t\t\t\t// trim newlines\n\t\t\t\tend := size\n\t\t\t\tfor end > 0 && data[end-1] == '\\n' {\n\t\t\t\t\tend--\n\t\t\t\t}\n\t\t\t\tfinalizeHTMLBlock(p.addBlock(HTMLBlock, data[:end]))\n\t\t\t}\n\t\t\treturn size\n\t\t}\n\t}\n\treturn 0\n}\n\nfunc (p *Markdown) htmlFindTag(data []byte) (string, bool) {\n\ti := 0\n\tfor i < len(data) && isalnum(data[i]) {\n\t\ti++\n\t}\n\tkey := string(data[:i])\n\tif _, ok := blockTags[key]; ok {\n\t\treturn key, true\n\t}\n\treturn \"\", false\n}\n\nfunc (p *Markdown) htmlFindEnd(tag string, data []byte) int {\n\t// assume data[0] == '<' && data[1] == '/' already tested\n\tif tag == \"hr\" {\n\t\treturn 2\n\t}\n\t// check if tag is a match\n\tclosetag := []byte(\"</\" + tag + \">\")\n\tif !bytes.HasPrefix(data, closetag) {\n\t\treturn 0\n\t}\n\ti := len(closetag)\n\n\t// check that the rest of the line is blank\n\tskip := 0\n\tif skip = p.isEmpty(data[i:]); skip == 0 {\n\t\treturn 0\n\t}\n\ti += skip\n\tskip = 0\n\n\tif i >= len(data) {\n\t\treturn i\n\t}\n\n\tif p.extensions&LaxHTMLBlocks != 0 {\n\t\treturn i\n\t}\n\tif skip = p.isEmpty(data[i:]); skip == 0 {\n\t\t// following line must be blank\n\t\treturn 0\n\t}\n\n\treturn i + skip\n}\n\nfunc (*Markdown) isEmpty(data []byte) int {\n\t// it is okay to call isEmpty on an empty buffer\n\tif len(data) == 0 {\n\t\treturn 0\n\t}\n\n\tvar i int\n\tfor i = 0; i < len(data) && data[i] != '\\n'; i++ {\n\t\tif data[i] != ' ' && data[i] != '\\t' {\n\t\t\treturn 0\n\t\t}\n\t}\n\tif i < len(data) && data[i] == '\\n' {\n\t\ti++\n\t}\n\treturn i\n}\n\nfunc (*Markdown) isHRule(data []byte) bool {\n\ti := 0\n\n\t// skip up to three spaces\n\tfor i < 3 && data[i] == ' ' {\n\t\ti++\n\t}\n\n\t// look at the hrule char\n\tif data[i] != '*' && data[i] != '-' && data[i] != '_' {\n\t\treturn false\n\t}\n\tc := data[i]\n\n\t// the whole line must be the char or whitespace\n\tn := 0\n\tfor i < len(data) && data[i] != '\\n' {\n\t\tswitch {\n\t\tcase data[i] == c:\n\t\t\tn++\n\t\tcase data[i] != ' ':\n\t\t\treturn false\n\t\t}\n\t\ti++\n\t}\n\n\treturn n >= 3\n}\n\n// isFenceLine checks if there's a fence line (e.g., ``` or ``` go) at the beginning of data,\n// and returns the end index if so, or 0 otherwise. It also returns the marker found.\n// If info is not nil, it gets set to the syntax specified in the fence line.\nfunc isFenceLine(data []byte, info *string, oldmarker string) (end int, marker string) {\n\ti, size := 0, 0\n\n\t// skip up to three spaces\n\tfor i < len(data) && i < 3 && data[i] == ' ' {\n\t\ti++\n\t}\n\n\t// check for the marker characters: ~ or `\n\tif i >= len(data) {\n\t\treturn 0, \"\"\n\t}\n\tif data[i] != '~' && data[i] != '`' {\n\t\treturn 0, \"\"\n\t}\n\n\tc := data[i]\n\n\t// the whole line must be the same char or whitespace\n\tfor i < len(data) && data[i] == c {\n\t\tsize++\n\t\ti++\n\t}\n\n\t// the marker char must occur at least 3 times\n\tif size < 3 {\n\t\treturn 0, \"\"\n\t}\n\tmarker = string(data[i-size : i])\n\n\t// if this is the end marker, it must match the beginning marker\n\tif oldmarker != \"\" && marker != oldmarker {\n\t\treturn 0, \"\"\n\t}\n\n\t// TODO(shurcooL): It's probably a good idea to simplify the 2 code paths here\n\t// into one, always get the info string, and discard it if the caller doesn't care.\n\tif info != nil {\n\t\tinfoLength := 0\n\t\ti = skipChar(data, i, ' ')\n\n\t\tif i >= len(data) {\n\t\t\tif i == len(data) {\n\t\t\t\treturn i, marker\n\t\t\t}\n\t\t\treturn 0, \"\"\n\t\t}\n\n\t\tinfoStart := i\n\n\t\tif data[i] == '{' {\n\t\t\ti++\n\t\t\tinfoStart++\n\n\t\t\tfor i < len(data) && data[i] != '}' && data[i] != '\\n' {\n\t\t\t\tinfoLength++\n\t\t\t\ti++\n\t\t\t}\n\n\t\t\tif i >= len(data) || data[i] != '}' {\n\t\t\t\treturn 0, \"\"\n\t\t\t}\n\n\t\t\t// strip all whitespace at the beginning and the end\n\t\t\t// of the {} block\n\t\t\tfor infoLength > 0 && isspace(data[infoStart]) {\n\t\t\t\tinfoStart++\n\t\t\t\tinfoLength--\n\t\t\t}\n\n\t\t\tfor infoLength > 0 && isspace(data[infoStart+infoLength-1]) {\n\t\t\t\tinfoLength--\n\t\t\t}\n\t\t\ti++\n\t\t\ti = skipChar(data, i, ' ')\n\t\t} else {\n\t\t\tfor i < len(data) && !isverticalspace(data[i]) {\n\t\t\t\tinfoLength++\n\t\t\t\ti++\n\t\t\t}\n\t\t}\n\n\t\t*info = strings.TrimSpace(string(data[infoStart : infoStart+infoLength]))\n\t}\n\n\tif i == len(data) {\n\t\treturn i, marker\n\t}\n\tif i > len(data) || data[i] != '\\n' {\n\t\treturn 0, \"\"\n\t}\n\treturn i + 1, marker // Take newline into account.\n}\n\n// fencedCodeBlock returns the end index if data contains a fenced code block at the beginning,\n// or 0 otherwise. It writes to out if doRender is true, otherwise it has no side effects.\n// If doRender is true, a final newline is mandatory to recognize the fenced code block.\nfunc (p *Markdown) fencedCodeBlock(data []byte, doRender bool) int {\n\tvar info string\n\tbeg, marker := isFenceLine(data, &info, \"\")\n\tif beg == 0 || beg >= len(data) {\n\t\treturn 0\n\t}\n\tfenceLength := beg - 1\n\n\tvar work bytes.Buffer\n\twork.Write([]byte(info))\n\twork.WriteByte('\\n')\n\n\tfor {\n\t\t// safe to assume beg < len(data)\n\n\t\t// check for the end of the code block\n\t\tfenceEnd, _ := isFenceLine(data[beg:], nil, marker)\n\t\tif fenceEnd != 0 {\n\t\t\tbeg += fenceEnd\n\t\t\tbreak\n\t\t}\n\n\t\t// copy the current line\n\t\tend := skipUntilChar(data, beg, '\\n') + 1\n\n\t\t// did we reach the end of the buffer without a closing marker?\n\t\tif end >= len(data) {\n\t\t\treturn 0\n\t\t}\n\n\t\t// verbatim copy to the working buffer\n\t\tif doRender {\n\t\t\twork.Write(data[beg:end])\n\t\t}\n\t\tbeg = end\n\t}\n\n\tif doRender {\n\t\tblock := p.addBlock(CodeBlock, work.Bytes()) // TODO: get rid of temp buffer\n\t\tblock.IsFenced = true\n\t\tblock.FenceLength = fenceLength\n\t\tfinalizeCodeBlock(block)\n\t}\n\n\treturn beg\n}\n\nfunc unescapeChar(str []byte) []byte {\n\tif str[0] == '\\\\' {\n\t\treturn []byte{str[1]}\n\t}\n\treturn []byte(html.UnescapeString(string(str)))\n}\n\nfunc unescapeString(str []byte) []byte {\n\tif reBackslashOrAmp.Match(str) {\n\t\treturn reEntityOrEscapedChar.ReplaceAllFunc(str, unescapeChar)\n\t}\n\treturn str\n}\n\nfunc finalizeCodeBlock(block *Node) {\n\tif block.IsFenced {\n\t\tnewlinePos := bytes.IndexByte(block.content, '\\n')\n\t\tfirstLine := block.content[:newlinePos]\n\t\trest := block.content[newlinePos+1:]\n\t\tblock.Info = unescapeString(bytes.Trim(firstLine, \"\\n\"))\n\t\tblock.Literal = rest\n\t} else {\n\t\tblock.Literal = block.content\n\t}\n\tblock.content = nil\n}\n\nfunc (p *Markdown) table(data []byte) int {\n\ttable := p.addBlock(Table, nil)\n\ti, columns := p.tableHeader(data)\n\tif i == 0 {\n\t\tp.tip = table.Parent\n\t\ttable.Unlink()\n\t\treturn 0\n\t}\n\n\tp.addBlock(TableBody, nil)\n\n\tfor i < len(data) {\n\t\tpipes, rowStart := 0, i\n\t\tfor ; i < len(data) && data[i] != '\\n'; i++ {\n\t\t\tif data[i] == '|' {\n\t\t\t\tpipes++\n\t\t\t}\n\t\t}\n\n\t\tif pipes == 0 {\n\t\t\ti = rowStart\n\t\t\tbreak\n\t\t}\n\n\t\t// include the newline in data sent to tableRow\n\t\tif i < len(data) && data[i] == '\\n' {\n\t\t\ti++\n\t\t}\n\t\tp.tableRow(data[rowStart:i], columns, false)\n\t}\n\n\treturn i\n}\n\n// check if the specified position is preceded by an odd number of backslashes\nfunc isBackslashEscaped(data []byte, i int) bool {\n\tbackslashes := 0\n\tfor i-backslashes-1 >= 0 && data[i-backslashes-1] == '\\\\' {\n\t\tbackslashes++\n\t}\n\treturn backslashes&1 == 1\n}\n\nfunc (p *Markdown) tableHeader(data []byte) (size int, columns []CellAlignFlags) {\n\ti := 0\n\tcolCount := 1\n\tfor i = 0; i < len(data) && data[i] != '\\n'; i++ {\n\t\tif data[i] == '|' && !isBackslashEscaped(data, i) {\n\t\t\tcolCount++\n\t\t}\n\t}\n\n\t// doesn't look like a table header\n\tif colCount == 1 {\n\t\treturn\n\t}\n\n\t// include the newline in the data sent to tableRow\n\tj := i\n\tif j < len(data) && data[j] == '\\n' {\n\t\tj++\n\t}\n\theader := data[:j]\n\n\t// column count ignores pipes at beginning or end of line\n\tif data[0] == '|' {\n\t\tcolCount--\n\t}\n\tif i > 2 && data[i-1] == '|' && !isBackslashEscaped(data, i-1) {\n\t\tcolCount--\n\t}\n\n\tcolumns = make([]CellAlignFlags, colCount)\n\n\t// move on to the header underline\n\ti++\n\tif i >= len(data) {\n\t\treturn\n\t}\n\n\tif data[i] == '|' && !isBackslashEscaped(data, i) {\n\t\ti++\n\t}\n\ti = skipChar(data, i, ' ')\n\n\t// each column header is of form: / *:?-+:? *|/ with # dashes + # colons >= 3\n\t// and trailing | optional on last column\n\tcol := 0\n\tfor i < len(data) && data[i] != '\\n' {\n\t\tdashes := 0\n\n\t\tif data[i] == ':' {\n\t\t\ti++\n\t\t\tcolumns[col] |= TableAlignmentLeft\n\t\t\tdashes++\n\t\t}\n\t\tfor i < len(data) && data[i] == '-' {\n\t\t\ti++\n\t\t\tdashes++\n\t\t}\n\t\tif i < len(data) && data[i] == ':' {\n\t\t\ti++\n\t\t\tcolumns[col] |= TableAlignmentRight\n\t\t\tdashes++\n\t\t}\n\t\tfor i < len(data) && data[i] == ' ' {\n\t\t\ti++\n\t\t}\n\t\tif i == len(data) {\n\t\t\treturn\n\t\t}\n\t\t// end of column test is messy\n\t\tswitch {\n\t\tcase dashes < 3:\n\t\t\t// not a valid column\n\t\t\treturn\n\n\t\tcase data[i] == '|' && !isBackslashEscaped(data, i):\n\t\t\t// marker found, now skip past trailing whitespace\n\t\t\tcol++\n\t\t\ti++\n\t\t\tfor i < len(data) && data[i] == ' ' {\n\t\t\t\ti++\n\t\t\t}\n\n\t\t\t// trailing junk found after last column\n\t\t\tif col >= colCount && i < len(data) && data[i] != '\\n' {\n\t\t\t\treturn\n\t\t\t}\n\n\t\tcase (data[i] != '|' || isBackslashEscaped(data, i)) && col+1 < colCount:\n\t\t\t// something else found where marker was required\n\t\t\treturn\n\n\t\tcase data[i] == '\\n':\n\t\t\t// marker is optional for the last column\n\t\t\tcol++\n\n\t\tdefault:\n\t\t\t// trailing junk found after last column\n\t\t\treturn\n\t\t}\n\t}\n\tif col != colCount {\n\t\treturn\n\t}\n\n\tp.addBlock(TableHead, nil)\n\tp.tableRow(header, columns, true)\n\tsize = i\n\tif size < len(data) && data[size] == '\\n' {\n\t\tsize++\n\t}\n\treturn\n}\n\nfunc (p *Markdown) tableRow(data []byte, columns []CellAlignFlags, header bool) {\n\tp.addBlock(TableRow, nil)\n\ti, col := 0, 0\n\n\tif data[i] == '|' && !isBackslashEscaped(data, i) {\n\t\ti++\n\t}\n\n\tfor col = 0; col < len(columns) && i < len(data); col++ {\n\t\tfor i < len(data) && data[i] == ' ' {\n\t\t\ti++\n\t\t}\n\n\t\tcellStart := i\n\n\t\tfor i < len(data) && (data[i] != '|' || isBackslashEscaped(data, i)) && data[i] != '\\n' {\n\t\t\ti++\n\t\t}\n\n\t\tcellEnd := i\n\n\t\t// skip the end-of-cell marker, possibly taking us past end of buffer\n\t\ti++\n\n\t\tfor cellEnd > cellStart && cellEnd-1 < len(data) && data[cellEnd-1] == ' ' {\n\t\t\tcellEnd--\n\t\t}\n\n\t\tcell := p.addBlock(TableCell, data[cellStart:cellEnd])\n\t\tcell.IsHeader = header\n\t\tcell.Align = columns[col]\n\t}\n\n\t// pad it out with empty columns to get the right number\n\tfor ; col < len(columns); col++ {\n\t\tcell := p.addBlock(TableCell, nil)\n\t\tcell.IsHeader = header\n\t\tcell.Align = columns[col]\n\t}\n\n\t// silently ignore rows with too many cells\n}\n\n// returns blockquote prefix length\nfunc (p *Markdown) quotePrefix(data []byte) int {\n\ti := 0\n\tfor i < 3 && i < len(data) && data[i] == ' ' {\n\t\ti++\n\t}\n\tif i < len(data) && data[i] == '>' {\n\t\tif i+1 < len(data) && data[i+1] == ' ' {\n\t\t\treturn i + 2\n\t\t}\n\t\treturn i + 1\n\t}\n\treturn 0\n}\n\n// blockquote ends with at least one blank line\n// followed by something without a blockquote prefix\nfunc (p *Markdown) terminateBlockquote(data []byte, beg, end int) bool {\n\tif p.isEmpty(data[beg:]) <= 0 {\n\t\treturn false\n\t}\n\tif end >= len(data) {\n\t\treturn true\n\t}\n\treturn p.quotePrefix(data[end:]) == 0 && p.isEmpty(data[end:]) == 0\n}\n\n// parse a blockquote fragment\nfunc (p *Markdown) quote(data []byte) int {\n\tblock := p.addBlock(BlockQuote, nil)\n\tvar raw bytes.Buffer\n\tbeg, end := 0, 0\n\tfor beg < len(data) {\n\t\tend = beg\n\t\t// Step over whole lines, collecting them. While doing that, check for\n\t\t// fenced code and if one's found, incorporate it altogether,\n\t\t// irregardless of any contents inside it\n\t\tfor end < len(data) && data[end] != '\\n' {\n\t\t\tif p.extensions&FencedCode != 0 {\n\t\t\t\tif i := p.fencedCodeBlock(data[end:], false); i > 0 {\n\t\t\t\t\t// -1 to compensate for the extra end++ after the loop:\n\t\t\t\t\tend += i - 1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tend++\n\t\t}\n\t\tif end < len(data) && data[end] == '\\n' {\n\t\t\tend++\n\t\t}\n\t\tif pre := p.quotePrefix(data[beg:]); pre > 0 {\n\t\t\t// skip the prefix\n\t\t\tbeg += pre\n\t\t} else if p.terminateBlockquote(data, beg, end) {\n\t\t\tbreak\n\t\t}\n\t\t// this line is part of the blockquote\n\t\traw.Write(data[beg:end])\n\t\tbeg = end\n\t}\n\tp.block(raw.Bytes())\n\tp.finalize(block)\n\treturn end\n}\n\n// returns prefix length for block code\nfunc (p *Markdown) codePrefix(data []byte) int {\n\tif len(data) >= 1 && data[0] == '\\t' {\n\t\treturn 1\n\t}\n\tif len(data) >= 4 && data[0] == ' ' && data[1] == ' ' && data[2] == ' ' && data[3] == ' ' {\n\t\treturn 4\n\t}\n\treturn 0\n}\n\nfunc (p *Markdown) code(data []byte) int {\n\tvar work bytes.Buffer\n\n\ti := 0\n\tfor i < len(data) {\n\t\tbeg := i\n\t\tfor i < len(data) && data[i] != '\\n' {\n\t\t\ti++\n\t\t}\n\t\tif i < len(data) && data[i] == '\\n' {\n\t\t\ti++\n\t\t}\n\n\t\tblankline := p.isEmpty(data[beg:i]) > 0\n\t\tif pre := p.codePrefix(data[beg:i]); pre > 0 {\n\t\t\tbeg += pre\n\t\t} else if !blankline {\n\t\t\t// non-empty, non-prefixed line breaks the pre\n\t\t\ti = beg\n\t\t\tbreak\n\t\t}\n\n\t\t// verbatim copy to the working buffer\n\t\tif blankline {\n\t\t\twork.WriteByte('\\n')\n\t\t} else {\n\t\t\twork.Write(data[beg:i])\n\t\t}\n\t}\n\n\t// trim all the \\n off the end of work\n\tworkbytes := work.Bytes()\n\teol := len(workbytes)\n\tfor eol > 0 && workbytes[eol-1] == '\\n' {\n\t\teol--\n\t}\n\tif eol != len(workbytes) {\n\t\twork.Truncate(eol)\n\t}\n\n\twork.WriteByte('\\n')\n\n\tblock := p.addBlock(CodeBlock, work.Bytes()) // TODO: get rid of temp buffer\n\tblock.IsFenced = false\n\tfinalizeCodeBlock(block)\n\n\treturn i\n}\n\n// returns unordered list item prefix\nfunc (p *Markdown) uliPrefix(data []byte) int {\n\ti := 0\n\t// start with up to 3 spaces\n\tfor i < len(data) && i < 3 && data[i] == ' ' {\n\t\ti++\n\t}\n\tif i >= len(data)-1 {\n\t\treturn 0\n\t}\n\t// need one of {'*', '+', '-'} followed by a space or a tab\n\tif (data[i] != '*' && data[i] != '+' && data[i] != '-') ||\n\t\t(data[i+1] != ' ' && data[i+1] != '\\t') {\n\t\treturn 0\n\t}\n\treturn i + 2\n}\n\n// returns ordered list item prefix\nfunc (p *Markdown) oliPrefix(data []byte) int {\n\ti := 0\n\n\t// start with up to 3 spaces\n\tfor i < 3 && i < len(data) && data[i] == ' ' {\n\t\ti++\n\t}\n\n\t// count the digits\n\tstart := i\n\tfor i < len(data) && data[i] >= '0' && data[i] <= '9' {\n\t\ti++\n\t}\n\tif start == i || i >= len(data)-1 {\n\t\treturn 0\n\t}\n\n\t// we need >= 1 digits followed by a dot and a space or a tab\n\tif data[i] != '.' || !(data[i+1] == ' ' || data[i+1] == '\\t') {\n\t\treturn 0\n\t}\n\treturn i + 2\n}\n\n// returns definition list item prefix\nfunc (p *Markdown) dliPrefix(data []byte) int {\n\tif len(data) < 2 {\n\t\treturn 0\n\t}\n\ti := 0\n\t// need a ':' followed by a space or a tab\n\tif data[i] != ':' || !(data[i+1] == ' ' || data[i+1] == '\\t') {\n\t\treturn 0\n\t}\n\tfor i < len(data) && data[i] == ' ' {\n\t\ti++\n\t}\n\treturn i + 2\n}\n\n// parse ordered or unordered list block\nfunc (p *Markdown) list(data []byte, flags ListType) int {\n\ti := 0\n\tflags |= ListItemBeginningOfList\n\tblock := p.addBlock(List, nil)\n\tblock.ListFlags = flags\n\tblock.Tight = true\n\n\tfor i < len(data) {\n\t\tskip := p.listItem(data[i:], &flags)\n\t\tif flags&ListItemContainsBlock != 0 {\n\t\t\tblock.ListData.Tight = false\n\t\t}\n\t\ti += skip\n\t\tif skip == 0 || flags&ListItemEndOfList != 0 {\n\t\t\tbreak\n\t\t}\n\t\tflags &= ^ListItemBeginningOfList\n\t}\n\n\tabove := block.Parent\n\tfinalizeList(block)\n\tp.tip = above\n\treturn i\n}\n\n// Returns true if the list item is not the same type as its parent list\nfunc (p *Markdown) listTypeChanged(data []byte, flags *ListType) bool {\n\tif p.dliPrefix(data) > 0 && *flags&ListTypeDefinition == 0 {\n\t\treturn true\n\t} else if p.oliPrefix(data) > 0 && *flags&ListTypeOrdered == 0 {\n\t\treturn true\n\t} else if p.uliPrefix(data) > 0 && (*flags&ListTypeOrdered != 0 || *flags&ListTypeDefinition != 0) {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// Returns true if block ends with a blank line, descending if needed\n// into lists and sublists.\nfunc endsWithBlankLine(block *Node) bool {\n\t// TODO: figure this out. Always false now.\n\tfor block != nil {\n\t\t//if block.lastLineBlank {\n\t\t//return true\n\t\t//}\n\t\tt := block.Type\n\t\tif t == List || t == Item {\n\t\t\tblock = block.LastChild\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn false\n}\n\nfunc finalizeList(block *Node) {\n\tblock.open = false\n\titem := block.FirstChild\n\tfor item != nil {\n\t\t// check for non-final list item ending with blank line:\n\t\tif endsWithBlankLine(item) && item.Next != nil {\n\t\t\tblock.ListData.Tight = false\n\t\t\tbreak\n\t\t}\n\t\t// recurse into children of list item, to see if there are spaces\n\t\t// between any of them:\n\t\tsubItem := item.FirstChild\n\t\tfor subItem != nil {\n\t\t\tif endsWithBlankLine(subItem) && (item.Next != nil || subItem.Next != nil) {\n\t\t\t\tblock.ListData.Tight = false\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tsubItem = subItem.Next\n\t\t}\n\t\titem = item.Next\n\t}\n}\n\n// Parse a single list item.\n// Assumes initial prefix is already removed if this is a sublist.\nfunc (p *Markdown) listItem(data []byte, flags *ListType) int {\n\t// keep track of the indentation of the first line\n\titemIndent := 0\n\tif data[0] == '\\t' {\n\t\titemIndent += 4\n\t} else {\n\t\tfor itemIndent < 3 && data[itemIndent] == ' ' {\n\t\t\titemIndent++\n\t\t}\n\t}\n\n\tvar bulletChar byte = '*'\n\ti := p.uliPrefix(data)\n\tif i == 0 {\n\t\ti = p.oliPrefix(data)\n\t} else {\n\t\tbulletChar = data[i-2]\n\t}\n\tif i == 0 {\n\t\ti = p.dliPrefix(data)\n\t\t// reset definition term flag\n\t\tif i > 0 {\n\t\t\t*flags &= ^ListTypeTerm\n\t\t}\n\t}\n\tif i == 0 {\n\t\t// if in definition list, set term flag and continue\n\t\tif *flags&ListTypeDefinition != 0 {\n\t\t\t*flags |= ListTypeTerm\n\t\t} else {\n\t\t\treturn 0\n\t\t}\n\t}\n\n\t// skip leading whitespace on first line\n\tfor i < len(data) && data[i] == ' ' {\n\t\ti++\n\t}\n\n\t// find the end of the line\n\tline := i\n\tfor i > 0 && i < len(data) && data[i-1] != '\\n' {\n\t\ti++\n\t}\n\n\t// get working buffer\n\tvar raw bytes.Buffer\n\n\t// put the first line into the working buffer\n\traw.Write(data[line:i])\n\tline = i\n\n\t// process the following lines\n\tcontainsBlankLine := false\n\tsublist := 0\n\tcodeBlockMarker := \"\"\n\ngatherlines:\n\tfor line < len(data) {\n\t\ti++\n\n\t\t// find the end of this line\n\t\tfor i < len(data) && data[i-1] != '\\n' {\n\t\t\ti++\n\t\t}\n\n\t\t// if it is an empty line, guess that it is part of this item\n\t\t// and move on to the next line\n\t\tif p.isEmpty(data[line:i]) > 0 {\n\t\t\tcontainsBlankLine = true\n\t\t\tline = i\n\t\t\tcontinue\n\t\t}\n\n\t\t// calculate the indentation\n\t\tindent := 0\n\t\tindentIndex := 0\n\t\tif data[line] == '\\t' {\n\t\t\tindentIndex++\n\t\t\tindent += 4\n\t\t} else {\n\t\t\tfor indent < 4 && line+indent < i && data[line+indent] == ' ' {\n\t\t\t\tindent++\n\t\t\t\tindentIndex++\n\t\t\t}\n\t\t}\n\n\t\tchunk := data[line+indentIndex : i]\n\n\t\tif p.extensions&FencedCode != 0 {\n\t\t\t// determine if in or out of codeblock\n\t\t\t// if in codeblock, ignore normal list processing\n\t\t\t_, marker := isFenceLine(chunk, nil, codeBlockMarker)\n\t\t\tif marker != \"\" {\n\t\t\t\tif codeBlockMarker == \"\" {\n\t\t\t\t\t// start of codeblock\n\t\t\t\t\tcodeBlockMarker = marker\n\t\t\t\t} else {\n\t\t\t\t\t// end of codeblock.\n\t\t\t\t\tcodeBlockMarker = \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t\t// we are in a codeblock, write line, and continue\n\t\t\tif codeBlockMarker != \"\" || marker != \"\" {\n\t\t\t\traw.Write(data[line+indentIndex : i])\n\t\t\t\tline = i\n\t\t\t\tcontinue gatherlines\n\t\t\t}\n\t\t}\n\n\t\t// evaluate how this line fits in\n\t\tswitch {\n\t\t// is this a nested list item?\n\t\tcase (p.uliPrefix(chunk) > 0 && !p.isHRule(chunk)) ||\n\t\t\tp.oliPrefix(chunk) > 0 ||\n\t\t\tp.dliPrefix(chunk) > 0:\n\n\t\t\t// to be a nested list, it must be indented more\n\t\t\t// if not, it is either a different kind of list\n\t\t\t// or the next item in the same list\n\t\t\tif indent <= itemIndent {\n\t\t\t\tif p.listTypeChanged(chunk, flags) {\n\t\t\t\t\t*flags |= ListItemEndOfList\n\t\t\t\t} else if containsBlankLine {\n\t\t\t\t\t*flags |= ListItemContainsBlock\n\t\t\t\t}\n\n\t\t\t\tbreak gatherlines\n\t\t\t}\n\n\t\t\tif containsBlankLine {\n\t\t\t\t*flags |= ListItemContainsBlock\n\t\t\t}\n\n\t\t\t// is this the first item in the nested list?\n\t\t\tif sublist == 0 {\n\t\t\t\tsublist = raw.Len()\n\t\t\t}\n\n\t\t// is this a nested prefix heading?\n\t\tcase p.isPrefixHeading(chunk):\n\t\t\t// if the heading is not indented, it is not nested in the list\n\t\t\t// and thus ends the list\n\t\t\tif containsBlankLine && indent < 4 {\n\t\t\t\t*flags |= ListItemEndOfList\n\t\t\t\tbreak gatherlines\n\t\t\t}\n\t\t\t*flags |= ListItemContainsBlock\n\n\t\t// anything following an empty line is only part\n\t\t// of this item if it is indented 4 spaces\n\t\t// (regardless of the indentation of the beginning of the item)\n\t\tcase containsBlankLine && indent < 4:\n\t\t\tif *flags&ListTypeDefinition != 0 && i < len(data)-1 {\n\t\t\t\t// is the next item still a part of this list?\n\t\t\t\tnext := i\n\t\t\t\tfor next < len(data) && data[next] != '\\n' {\n\t\t\t\t\tnext++\n\t\t\t\t}\n\t\t\t\tfor next < len(data)-1 && data[next] == '\\n' {\n\t\t\t\t\tnext++\n\t\t\t\t}\n\t\t\t\tif i < len(data)-1 && data[i] != ':' && data[next] != ':' {\n\t\t\t\t\t*flags |= ListItemEndOfList\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t*flags |= ListItemEndOfList\n\t\t\t}\n\t\t\tbreak gatherlines\n\n\t\t// a blank line means this should be parsed as a block\n\t\tcase containsBlankLine:\n\t\t\traw.WriteByte('\\n')\n\t\t\t*flags |= ListItemContainsBlock\n\t\t}\n\n\t\t// if this line was preceded by one or more blanks,\n\t\t// re-introduce the blank into the buffer\n\t\tif containsBlankLine {\n\t\t\tcontainsBlankLine = false\n\t\t\traw.WriteByte('\\n')\n\t\t}\n\n\t\t// add the line into the working buffer without prefix\n\t\traw.Write(data[line+indentIndex : i])\n\n\t\tline = i\n\t}\n\n\trawBytes := raw.Bytes()\n\n\tblock := p.addBlock(Item, nil)\n\tblock.ListFlags = *flags\n\tblock.Tight = false\n\tblock.BulletChar = bulletChar\n\tblock.Delimiter = '.' // Only '.' is possible in Markdown, but ')' will also be possible in CommonMark\n\n\t// render the contents of the list item\n\tif *flags&ListItemContainsBlock != 0 && *flags&ListTypeTerm == 0 {\n\t\t// intermediate render of block item, except for definition term\n\t\tif sublist > 0 {\n\t\t\tp.block(rawBytes[:sublist])\n\t\t\tp.block(rawBytes[sublist:])\n\t\t} else {\n\t\t\tp.block(rawBytes)\n\t\t}\n\t} else {\n\t\t// intermediate render of inline item\n\t\tif sublist > 0 {\n\t\t\tchild := p.addChild(Paragraph, 0)\n\t\t\tchild.content = rawBytes[:sublist]\n\t\t\tp.block(rawBytes[sublist:])\n\t\t} else {\n\t\t\tchild := p.addChild(Paragraph, 0)\n\t\t\tchild.content = rawBytes\n\t\t}\n\t}\n\treturn line\n}\n\n// render a single paragraph that has already been parsed out\nfunc (p *Markdown) renderParagraph(data []byte) {\n\tif len(data) == 0 {\n\t\treturn\n\t}\n\n\t// trim leading spaces\n\tbeg := 0\n\tfor data[beg] == ' ' {\n\t\tbeg++\n\t}\n\n\tend := len(data)\n\t// trim trailing newline\n\tif data[len(data)-1] == '\\n' {\n\t\tend--\n\t}\n\n\t// trim trailing spaces\n\tfor end > beg && data[end-1] == ' ' {\n\t\tend--\n\t}\n\n\tp.addBlock(Paragraph, data[beg:end])\n}\n\nfunc (p *Markdown) paragraph(data []byte) int {\n\t// prev: index of 1st char of previous line\n\t// line: index of 1st char of current line\n\t// i: index of cursor/end of current line\n\tvar prev, line, i int\n\ttabSize := TabSizeDefault\n\tif p.extensions&TabSizeEight != 0 {\n\t\ttabSize = TabSizeDouble\n\t}\n\t// keep going until we find something to mark the end of the paragraph\n\tfor i < len(data) {\n\t\t// mark the beginning of the current line\n\t\tprev = line\n\t\tcurrent := data[i:]\n\t\tline = i\n\n\t\t// did we find a reference or a footnote? If so, end a paragraph\n\t\t// preceding it and report that we have consumed up to the end of that\n\t\t// reference:\n\t\tif refEnd := isReference(p, current, tabSize); refEnd > 0 {\n\t\t\tp.renderParagraph(data[:i])\n\t\t\treturn i + refEnd\n\t\t}\n\n\t\t// did we find a blank line marking the end of the paragraph?\n\t\tif n := p.isEmpty(current); n > 0 {\n\t\t\t// did this blank line followed by a definition list item?\n\t\t\tif p.extensions&DefinitionLists != 0 {\n\t\t\t\tif i < len(data)-1 && data[i+1] == ':' {\n\t\t\t\t\treturn p.list(data[prev:], ListTypeDefinition)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp.renderParagraph(data[:i])\n\t\t\treturn i + n\n\t\t}\n\n\t\t// an underline under some text marks a heading, so our paragraph ended on prev line\n\t\tif i > 0 {\n\t\t\tif level := p.isUnderlinedHeading(current); level > 0 {\n\t\t\t\t// render the paragraph\n\t\t\t\tp.renderParagraph(data[:prev])\n\n\t\t\t\t// ignore leading and trailing whitespace\n\t\t\t\teol := i - 1\n\t\t\t\tfor prev < eol && data[prev] == ' ' {\n\t\t\t\t\tprev++\n\t\t\t\t}\n\t\t\t\tfor eol > prev && data[eol-1] == ' ' {\n\t\t\t\t\teol--\n\t\t\t\t}\n\n\t\t\t\tid := \"\"\n\t\t\t\tif p.extensions&AutoHeadingIDs != 0 {\n\t\t\t\t\tid = SanitizedAnchorName(string(data[prev:eol]))\n\t\t\t\t}\n\n\t\t\t\tblock := p.addBlock(Heading, data[prev:eol])\n\t\t\t\tblock.Level = level\n\t\t\t\tblock.HeadingID = id\n\n\t\t\t\t// find the end of the underline\n\t\t\t\tfor i < len(data) && data[i] != '\\n' {\n\t\t\t\t\ti++\n\t\t\t\t}\n\t\t\t\treturn i\n\t\t\t}\n\t\t}\n\n\t\t// if the next line starts a block of HTML, then the paragraph ends here\n\t\tif p.extensions&LaxHTMLBlocks != 0 {\n\t\t\tif data[i] == '<' && p.html(current, false) > 0 {\n\t\t\t\t// rewind to before the HTML block\n\t\t\t\tp.renderParagraph(data[:i])\n\t\t\t\treturn i\n\t\t\t}\n\t\t}\n\n\t\t// if there's a prefixed heading or a horizontal rule after this, paragraph is over\n\t\tif p.isPrefixHeading(current) || p.isHRule(current) {\n\t\t\tp.renderParagraph(data[:i])\n\t\t\treturn i\n\t\t}\n\n\t\t// if there's a fenced code block, paragraph is over\n\t\tif p.extensions&FencedCode != 0 {\n\t\t\tif p.fencedCodeBlock(current, false) > 0 {\n\t\t\t\tp.renderParagraph(data[:i])\n\t\t\t\treturn i\n\t\t\t}\n\t\t}\n\n\t\t// if there's a definition list item, prev line is a definition term\n\t\tif p.extensions&DefinitionLists != 0 {\n\t\t\tif p.dliPrefix(current) != 0 {\n\t\t\t\tret := p.list(data[prev:], ListTypeDefinition)\n\t\t\t\treturn ret\n\t\t\t}\n\t\t}\n\n\t\t// if there's a list after this, paragraph is over\n\t\tif p.extensions&NoEmptyLineBeforeBlock != 0 {\n\t\t\tif p.uliPrefix(current) != 0 ||\n\t\t\t\tp.oliPrefix(current) != 0 ||\n\t\t\t\tp.quotePrefix(current) != 0 ||\n\t\t\t\tp.codePrefix(current) != 0 {\n\t\t\t\tp.renderParagraph(data[:i])\n\t\t\t\treturn i\n\t\t\t}\n\t\t}\n\n\t\t// otherwise, scan to the beginning of the next line\n\t\tnl := bytes.IndexByte(data[i:], '\\n')\n\t\tif nl >= 0 {\n\t\t\ti += nl + 1\n\t\t} else {\n\t\t\ti += len(data[i:])\n\t\t}\n\t}\n\n\tp.renderParagraph(data[:i])\n\treturn i\n}\n\nfunc skipChar(data []byte, start int, char byte) int {\n\ti := start\n\tfor i < len(data) && data[i] == char {\n\t\ti++\n\t}\n\treturn i\n}\n\nfunc skipUntilChar(text []byte, start int, char byte) int {\n\ti := start\n\tfor i < len(text) && text[i] != char {\n\t\ti++\n\t}\n\treturn i\n}\n\n// SanitizedAnchorName returns a sanitized anchor name for the given text.\n//\n// It implements the algorithm specified in the package comment.\nfunc SanitizedAnchorName(text string) string {\n\tvar anchorName []rune\n\tfutureDash := false\n\tfor _, r := range text {\n\t\tswitch {\n\t\tcase unicode.IsLetter(r) || unicode.IsNumber(r):\n\t\t\tif futureDash && len(anchorName) > 0 {\n\t\t\t\tanchorName = append(anchorName, '-')\n\t\t\t}\n\t\t\tfutureDash = false\n\t\t\tanchorName = append(anchorName, unicode.ToLower(r))\n\t\tdefault:\n\t\t\tfutureDash = true\n\t\t}\n\t}\n\treturn string(anchorName)\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/doc.go",
    "content": "// Package blackfriday is a markdown processor.\n//\n// It translates plain text with simple formatting rules into an AST, which can\n// then be further processed to HTML (provided by Blackfriday itself) or other\n// formats (provided by the community).\n//\n// The simplest way to invoke Blackfriday is to call the Run function. It will\n// take a text input and produce a text output in HTML (or other format).\n//\n// A slightly more sophisticated way to use Blackfriday is to create a Markdown\n// processor and to call Parse, which returns a syntax tree for the input\n// document. You can leverage Blackfriday's parsing for content extraction from\n// markdown documents. You can assign a custom renderer and set various options\n// to the Markdown processor.\n//\n// If you're interested in calling Blackfriday from command line, see\n// https://github.com/russross/blackfriday-tool.\n//\n// Sanitized Anchor Names\n//\n// Blackfriday includes an algorithm for creating sanitized anchor names\n// corresponding to a given input text. This algorithm is used to create\n// anchors for headings when AutoHeadingIDs extension is enabled. The\n// algorithm is specified below, so that other packages can create\n// compatible anchor names and links to those anchors.\n//\n// The algorithm iterates over the input text, interpreted as UTF-8,\n// one Unicode code point (rune) at a time. All runes that are letters (category L)\n// or numbers (category N) are considered valid characters. They are mapped to\n// lower case, and included in the output. All other runes are considered\n// invalid characters. Invalid characters that precede the first valid character,\n// as well as invalid character that follow the last valid character\n// are dropped completely. All other sequences of invalid characters\n// between two valid characters are replaced with a single dash character '-'.\n//\n// SanitizedAnchorName exposes this functionality, and can be used to\n// create compatible links to the anchor names generated by blackfriday.\n// This algorithm is also implemented in a small standalone package at\n// github.com/shurcooL/sanitized_anchor_name. It can be useful for clients\n// that want a small package and don't need full functionality of blackfriday.\npackage blackfriday\n\n// NOTE: Keep Sanitized Anchor Name algorithm in sync with package\n//       github.com/shurcooL/sanitized_anchor_name.\n//       Otherwise, users of sanitized_anchor_name will get anchor names\n//       that are incompatible with those generated by blackfriday.\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/entities.go",
    "content": "package blackfriday\n\n// Extracted from https://html.spec.whatwg.org/multipage/entities.json\nvar entities = map[string]bool{\n\t\"&AElig\":                            true,\n\t\"&AElig;\":                           true,\n\t\"&AMP\":                              true,\n\t\"&AMP;\":                             true,\n\t\"&Aacute\":                           true,\n\t\"&Aacute;\":                          true,\n\t\"&Abreve;\":                          true,\n\t\"&Acirc\":                            true,\n\t\"&Acirc;\":                           true,\n\t\"&Acy;\":                             true,\n\t\"&Afr;\":                             true,\n\t\"&Agrave\":                           true,\n\t\"&Agrave;\":                          true,\n\t\"&Alpha;\":                           true,\n\t\"&Amacr;\":                           true,\n\t\"&And;\":                             true,\n\t\"&Aogon;\":                           true,\n\t\"&Aopf;\":                            true,\n\t\"&ApplyFunction;\":                   true,\n\t\"&Aring\":                            true,\n\t\"&Aring;\":                           true,\n\t\"&Ascr;\":                            true,\n\t\"&Assign;\":                          true,\n\t\"&Atilde\":                           true,\n\t\"&Atilde;\":                          true,\n\t\"&Auml\":                             true,\n\t\"&Auml;\":                            true,\n\t\"&Backslash;\":                       true,\n\t\"&Barv;\":                            true,\n\t\"&Barwed;\":                          true,\n\t\"&Bcy;\":                             true,\n\t\"&Because;\":                         true,\n\t\"&Bernoullis;\":                      true,\n\t\"&Beta;\":                            true,\n\t\"&Bfr;\":                             true,\n\t\"&Bopf;\":                            true,\n\t\"&Breve;\":                           true,\n\t\"&Bscr;\":                            true,\n\t\"&Bumpeq;\":                          true,\n\t\"&CHcy;\":                            true,\n\t\"&COPY\":                             true,\n\t\"&COPY;\":                            true,\n\t\"&Cacute;\":                          true,\n\t\"&Cap;\":                             true,\n\t\"&CapitalDifferentialD;\":            true,\n\t\"&Cayleys;\":                         true,\n\t\"&Ccaron;\":                          true,\n\t\"&Ccedil\":                           true,\n\t\"&Ccedil;\":                          true,\n\t\"&Ccirc;\":                           true,\n\t\"&Cconint;\":                         true,\n\t\"&Cdot;\":                            true,\n\t\"&Cedilla;\":                         true,\n\t\"&CenterDot;\":                       true,\n\t\"&Cfr;\":                             true,\n\t\"&Chi;\":                             true,\n\t\"&CircleDot;\":                       true,\n\t\"&CircleMinus;\":                     true,\n\t\"&CirclePlus;\":                      true,\n\t\"&CircleTimes;\":                     true,\n\t\"&ClockwiseContourIntegral;\":        true,\n\t\"&CloseCurlyDoubleQuote;\":           true,\n\t\"&CloseCurlyQuote;\":                 true,\n\t\"&Colon;\":                           true,\n\t\"&Colone;\":                          true,\n\t\"&Congruent;\":                       true,\n\t\"&Conint;\":                          true,\n\t\"&ContourIntegral;\":                 true,\n\t\"&Copf;\":                            true,\n\t\"&Coproduct;\":                       true,\n\t\"&CounterClockwiseContourIntegral;\": true,\n\t\"&Cross;\":                           true,\n\t\"&Cscr;\":                            true,\n\t\"&Cup;\":                             true,\n\t\"&CupCap;\":                          true,\n\t\"&DD;\":                              true,\n\t\"&DDotrahd;\":                        true,\n\t\"&DJcy;\":                            true,\n\t\"&DScy;\":                            true,\n\t\"&DZcy;\":                            true,\n\t\"&Dagger;\":                          true,\n\t\"&Darr;\":                            true,\n\t\"&Dashv;\":                           true,\n\t\"&Dcaron;\":                          true,\n\t\"&Dcy;\":                             true,\n\t\"&Del;\":                             true,\n\t\"&Delta;\":                           true,\n\t\"&Dfr;\":                             true,\n\t\"&DiacriticalAcute;\":                true,\n\t\"&DiacriticalDot;\":                  true,\n\t\"&DiacriticalDoubleAcute;\":          true,\n\t\"&DiacriticalGrave;\":                true,\n\t\"&DiacriticalTilde;\":                true,\n\t\"&Diamond;\":                         true,\n\t\"&DifferentialD;\":                   true,\n\t\"&Dopf;\":                            true,\n\t\"&Dot;\":                             true,\n\t\"&DotDot;\":                          true,\n\t\"&DotEqual;\":                        true,\n\t\"&DoubleContourIntegral;\":           true,\n\t\"&DoubleDot;\":                       true,\n\t\"&DoubleDownArrow;\":                 true,\n\t\"&DoubleLeftArrow;\":                 true,\n\t\"&DoubleLeftRightArrow;\":            true,\n\t\"&DoubleLeftTee;\":                   true,\n\t\"&DoubleLongLeftArrow;\":             true,\n\t\"&DoubleLongLeftRightArrow;\":        true,\n\t\"&DoubleLongRightArrow;\":            true,\n\t\"&DoubleRightArrow;\":                true,\n\t\"&DoubleRightTee;\":                  true,\n\t\"&DoubleUpArrow;\":                   true,\n\t\"&DoubleUpDownArrow;\":               true,\n\t\"&DoubleVerticalBar;\":               true,\n\t\"&DownArrow;\":                       true,\n\t\"&DownArrowBar;\":                    true,\n\t\"&DownArrowUpArrow;\":                true,\n\t\"&DownBreve;\":                       true,\n\t\"&DownLeftRightVector;\":             true,\n\t\"&DownLeftTeeVector;\":               true,\n\t\"&DownLeftVector;\":                  true,\n\t\"&DownLeftVectorBar;\":               true,\n\t\"&DownRightTeeVector;\":              true,\n\t\"&DownRightVector;\":                 true,\n\t\"&DownRightVectorBar;\":              true,\n\t\"&DownTee;\":                         true,\n\t\"&DownTeeArrow;\":                    true,\n\t\"&Downarrow;\":                       true,\n\t\"&Dscr;\":                            true,\n\t\"&Dstrok;\":                          true,\n\t\"&ENG;\":                             true,\n\t\"&ETH\":                              true,\n\t\"&ETH;\":                             true,\n\t\"&Eacute\":                           true,\n\t\"&Eacute;\":                          true,\n\t\"&Ecaron;\":                          true,\n\t\"&Ecirc\":                            true,\n\t\"&Ecirc;\":                           true,\n\t\"&Ecy;\":                             true,\n\t\"&Edot;\":                            true,\n\t\"&Efr;\":                             true,\n\t\"&Egrave\":                           true,\n\t\"&Egrave;\":                          true,\n\t\"&Element;\":                         true,\n\t\"&Emacr;\":                           true,\n\t\"&EmptySmallSquare;\":                true,\n\t\"&EmptyVerySmallSquare;\":            true,\n\t\"&Eogon;\":                           true,\n\t\"&Eopf;\":                            true,\n\t\"&Epsilon;\":                         true,\n\t\"&Equal;\":                           true,\n\t\"&EqualTilde;\":                      true,\n\t\"&Equilibrium;\":                     true,\n\t\"&Escr;\":                            true,\n\t\"&Esim;\":                            true,\n\t\"&Eta;\":                             true,\n\t\"&Euml\":                             true,\n\t\"&Euml;\":                            true,\n\t\"&Exists;\":                          true,\n\t\"&ExponentialE;\":                    true,\n\t\"&Fcy;\":                             true,\n\t\"&Ffr;\":                             true,\n\t\"&FilledSmallSquare;\":               true,\n\t\"&FilledVerySmallSquare;\":           true,\n\t\"&Fopf;\":                            true,\n\t\"&ForAll;\":                          true,\n\t\"&Fouriertrf;\":                      true,\n\t\"&Fscr;\":                            true,\n\t\"&GJcy;\":                            true,\n\t\"&GT\":                               true,\n\t\"&GT;\":                              true,\n\t\"&Gamma;\":                           true,\n\t\"&Gammad;\":                          true,\n\t\"&Gbreve;\":                          true,\n\t\"&Gcedil;\":                          true,\n\t\"&Gcirc;\":                           true,\n\t\"&Gcy;\":                             true,\n\t\"&Gdot;\":                            true,\n\t\"&Gfr;\":                             true,\n\t\"&Gg;\":                              true,\n\t\"&Gopf;\":                            true,\n\t\"&GreaterEqual;\":                    true,\n\t\"&GreaterEqualLess;\":                true,\n\t\"&GreaterFullEqual;\":                true,\n\t\"&GreaterGreater;\":                  true,\n\t\"&GreaterLess;\":                     true,\n\t\"&GreaterSlantEqual;\":               true,\n\t\"&GreaterTilde;\":                    true,\n\t\"&Gscr;\":                            true,\n\t\"&Gt;\":                              true,\n\t\"&HARDcy;\":                          true,\n\t\"&Hacek;\":                           true,\n\t\"&Hat;\":                             true,\n\t\"&Hcirc;\":                           true,\n\t\"&Hfr;\":                             true,\n\t\"&HilbertSpace;\":                    true,\n\t\"&Hopf;\":                            true,\n\t\"&HorizontalLine;\":                  true,\n\t\"&Hscr;\":                            true,\n\t\"&Hstrok;\":                          true,\n\t\"&HumpDownHump;\":                    true,\n\t\"&HumpEqual;\":                       true,\n\t\"&IEcy;\":                            true,\n\t\"&IJlig;\":                           true,\n\t\"&IOcy;\":                            true,\n\t\"&Iacute\":                           true,\n\t\"&Iacute;\":                          true,\n\t\"&Icirc\":                            true,\n\t\"&Icirc;\":                           true,\n\t\"&Icy;\":                             true,\n\t\"&Idot;\":                            true,\n\t\"&Ifr;\":                             true,\n\t\"&Igrave\":                           true,\n\t\"&Igrave;\":                          true,\n\t\"&Im;\":                              true,\n\t\"&Imacr;\":                           true,\n\t\"&ImaginaryI;\":                      true,\n\t\"&Implies;\":                         true,\n\t\"&Int;\":                             true,\n\t\"&Integral;\":                        true,\n\t\"&Intersection;\":                    true,\n\t\"&InvisibleComma;\":                  true,\n\t\"&InvisibleTimes;\":                  true,\n\t\"&Iogon;\":                           true,\n\t\"&Iopf;\":                            true,\n\t\"&Iota;\":                            true,\n\t\"&Iscr;\":                            true,\n\t\"&Itilde;\":                          true,\n\t\"&Iukcy;\":                           true,\n\t\"&Iuml\":                             true,\n\t\"&Iuml;\":                            true,\n\t\"&Jcirc;\":                           true,\n\t\"&Jcy;\":                             true,\n\t\"&Jfr;\":                             true,\n\t\"&Jopf;\":                            true,\n\t\"&Jscr;\":                            true,\n\t\"&Jsercy;\":                          true,\n\t\"&Jukcy;\":                           true,\n\t\"&KHcy;\":                            true,\n\t\"&KJcy;\":                            true,\n\t\"&Kappa;\":                           true,\n\t\"&Kcedil;\":                          true,\n\t\"&Kcy;\":                             true,\n\t\"&Kfr;\":                             true,\n\t\"&Kopf;\":                            true,\n\t\"&Kscr;\":                            true,\n\t\"&LJcy;\":                            true,\n\t\"&LT\":                               true,\n\t\"&LT;\":                              true,\n\t\"&Lacute;\":                          true,\n\t\"&Lambda;\":                          true,\n\t\"&Lang;\":                            true,\n\t\"&Laplacetrf;\":                      true,\n\t\"&Larr;\":                            true,\n\t\"&Lcaron;\":                          true,\n\t\"&Lcedil;\":                          true,\n\t\"&Lcy;\":                             true,\n\t\"&LeftAngleBracket;\":                true,\n\t\"&LeftArrow;\":                       true,\n\t\"&LeftArrowBar;\":                    true,\n\t\"&LeftArrowRightArrow;\":             true,\n\t\"&LeftCeiling;\":                     true,\n\t\"&LeftDoubleBracket;\":               true,\n\t\"&LeftDownTeeVector;\":               true,\n\t\"&LeftDownVector;\":                  true,\n\t\"&LeftDownVectorBar;\":               true,\n\t\"&LeftFloor;\":                       true,\n\t\"&LeftRightArrow;\":                  true,\n\t\"&LeftRightVector;\":                 true,\n\t\"&LeftTee;\":                         true,\n\t\"&LeftTeeArrow;\":                    true,\n\t\"&LeftTeeVector;\":                   true,\n\t\"&LeftTriangle;\":                    true,\n\t\"&LeftTriangleBar;\":                 true,\n\t\"&LeftTriangleEqual;\":               true,\n\t\"&LeftUpDownVector;\":                true,\n\t\"&LeftUpTeeVector;\":                 true,\n\t\"&LeftUpVector;\":                    true,\n\t\"&LeftUpVectorBar;\":                 true,\n\t\"&LeftVector;\":                      true,\n\t\"&LeftVectorBar;\":                   true,\n\t\"&Leftarrow;\":                       true,\n\t\"&Leftrightarrow;\":                  true,\n\t\"&LessEqualGreater;\":                true,\n\t\"&LessFullEqual;\":                   true,\n\t\"&LessGreater;\":                     true,\n\t\"&LessLess;\":                        true,\n\t\"&LessSlantEqual;\":                  true,\n\t\"&LessTilde;\":                       true,\n\t\"&Lfr;\":                             true,\n\t\"&Ll;\":                              true,\n\t\"&Lleftarrow;\":                      true,\n\t\"&Lmidot;\":                          true,\n\t\"&LongLeftArrow;\":                   true,\n\t\"&LongLeftRightArrow;\":              true,\n\t\"&LongRightArrow;\":                  true,\n\t\"&Longleftarrow;\":                   true,\n\t\"&Longleftrightarrow;\":              true,\n\t\"&Longrightarrow;\":                  true,\n\t\"&Lopf;\":                            true,\n\t\"&LowerLeftArrow;\":                  true,\n\t\"&LowerRightArrow;\":                 true,\n\t\"&Lscr;\":                            true,\n\t\"&Lsh;\":                             true,\n\t\"&Lstrok;\":                          true,\n\t\"&Lt;\":                              true,\n\t\"&Map;\":                             true,\n\t\"&Mcy;\":                             true,\n\t\"&MediumSpace;\":                     true,\n\t\"&Mellintrf;\":                       true,\n\t\"&Mfr;\":                             true,\n\t\"&MinusPlus;\":                       true,\n\t\"&Mopf;\":                            true,\n\t\"&Mscr;\":                            true,\n\t\"&Mu;\":                              true,\n\t\"&NJcy;\":                            true,\n\t\"&Nacute;\":                          true,\n\t\"&Ncaron;\":                          true,\n\t\"&Ncedil;\":                          true,\n\t\"&Ncy;\":                             true,\n\t\"&NegativeMediumSpace;\":             true,\n\t\"&NegativeThickSpace;\":              true,\n\t\"&NegativeThinSpace;\":               true,\n\t\"&NegativeVeryThinSpace;\":           true,\n\t\"&NestedGreaterGreater;\":            true,\n\t\"&NestedLessLess;\":                  true,\n\t\"&NewLine;\":                         true,\n\t\"&Nfr;\":                             true,\n\t\"&NoBreak;\":                         true,\n\t\"&NonBreakingSpace;\":                true,\n\t\"&Nopf;\":                            true,\n\t\"&Not;\":                             true,\n\t\"&NotCongruent;\":                    true,\n\t\"&NotCupCap;\":                       true,\n\t\"&NotDoubleVerticalBar;\":            true,\n\t\"&NotElement;\":                      true,\n\t\"&NotEqual;\":                        true,\n\t\"&NotEqualTilde;\":                   true,\n\t\"&NotExists;\":                       true,\n\t\"&NotGreater;\":                      true,\n\t\"&NotGreaterEqual;\":                 true,\n\t\"&NotGreaterFullEqual;\":             true,\n\t\"&NotGreaterGreater;\":               true,\n\t\"&NotGreaterLess;\":                  true,\n\t\"&NotGreaterSlantEqual;\":            true,\n\t\"&NotGreaterTilde;\":                 true,\n\t\"&NotHumpDownHump;\":                 true,\n\t\"&NotHumpEqual;\":                    true,\n\t\"&NotLeftTriangle;\":                 true,\n\t\"&NotLeftTriangleBar;\":              true,\n\t\"&NotLeftTriangleEqual;\":            true,\n\t\"&NotLess;\":                         true,\n\t\"&NotLessEqual;\":                    true,\n\t\"&NotLessGreater;\":                  true,\n\t\"&NotLessLess;\":                     true,\n\t\"&NotLessSlantEqual;\":               true,\n\t\"&NotLessTilde;\":                    true,\n\t\"&NotNestedGreaterGreater;\":         true,\n\t\"&NotNestedLessLess;\":               true,\n\t\"&NotPrecedes;\":                     true,\n\t\"&NotPrecedesEqual;\":                true,\n\t\"&NotPrecedesSlantEqual;\":           true,\n\t\"&NotReverseElement;\":               true,\n\t\"&NotRightTriangle;\":                true,\n\t\"&NotRightTriangleBar;\":             true,\n\t\"&NotRightTriangleEqual;\":           true,\n\t\"&NotSquareSubset;\":                 true,\n\t\"&NotSquareSubsetEqual;\":            true,\n\t\"&NotSquareSuperset;\":               true,\n\t\"&NotSquareSupersetEqual;\":          true,\n\t\"&NotSubset;\":                       true,\n\t\"&NotSubsetEqual;\":                  true,\n\t\"&NotSucceeds;\":                     true,\n\t\"&NotSucceedsEqual;\":                true,\n\t\"&NotSucceedsSlantEqual;\":           true,\n\t\"&NotSucceedsTilde;\":                true,\n\t\"&NotSuperset;\":                     true,\n\t\"&NotSupersetEqual;\":                true,\n\t\"&NotTilde;\":                        true,\n\t\"&NotTildeEqual;\":                   true,\n\t\"&NotTildeFullEqual;\":               true,\n\t\"&NotTildeTilde;\":                   true,\n\t\"&NotVerticalBar;\":                  true,\n\t\"&Nscr;\":                            true,\n\t\"&Ntilde\":                           true,\n\t\"&Ntilde;\":                          true,\n\t\"&Nu;\":                              true,\n\t\"&OElig;\":                           true,\n\t\"&Oacute\":                           true,\n\t\"&Oacute;\":                          true,\n\t\"&Ocirc\":                            true,\n\t\"&Ocirc;\":                           true,\n\t\"&Ocy;\":                             true,\n\t\"&Odblac;\":                          true,\n\t\"&Ofr;\":                             true,\n\t\"&Ograve\":                           true,\n\t\"&Ograve;\":                          true,\n\t\"&Omacr;\":                           true,\n\t\"&Omega;\":                           true,\n\t\"&Omicron;\":                         true,\n\t\"&Oopf;\":                            true,\n\t\"&OpenCurlyDoubleQuote;\":            true,\n\t\"&OpenCurlyQuote;\":                  true,\n\t\"&Or;\":                              true,\n\t\"&Oscr;\":                            true,\n\t\"&Oslash\":                           true,\n\t\"&Oslash;\":                          true,\n\t\"&Otilde\":                           true,\n\t\"&Otilde;\":                          true,\n\t\"&Otimes;\":                          true,\n\t\"&Ouml\":                             true,\n\t\"&Ouml;\":                            true,\n\t\"&OverBar;\":                         true,\n\t\"&OverBrace;\":                       true,\n\t\"&OverBracket;\":                     true,\n\t\"&OverParenthesis;\":                 true,\n\t\"&PartialD;\":                        true,\n\t\"&Pcy;\":                             true,\n\t\"&Pfr;\":                             true,\n\t\"&Phi;\":                             true,\n\t\"&Pi;\":                              true,\n\t\"&PlusMinus;\":                       true,\n\t\"&Poincareplane;\":                   true,\n\t\"&Popf;\":                            true,\n\t\"&Pr;\":                              true,\n\t\"&Precedes;\":                        true,\n\t\"&PrecedesEqual;\":                   true,\n\t\"&PrecedesSlantEqual;\":              true,\n\t\"&PrecedesTilde;\":                   true,\n\t\"&Prime;\":                           true,\n\t\"&Product;\":                         true,\n\t\"&Proportion;\":                      true,\n\t\"&Proportional;\":                    true,\n\t\"&Pscr;\":                            true,\n\t\"&Psi;\":                             true,\n\t\"&QUOT\":                             true,\n\t\"&QUOT;\":                            true,\n\t\"&Qfr;\":                             true,\n\t\"&Qopf;\":                            true,\n\t\"&Qscr;\":                            true,\n\t\"&RBarr;\":                           true,\n\t\"&REG\":                              true,\n\t\"&REG;\":                             true,\n\t\"&Racute;\":                          true,\n\t\"&Rang;\":                            true,\n\t\"&Rarr;\":                            true,\n\t\"&Rarrtl;\":                          true,\n\t\"&Rcaron;\":                          true,\n\t\"&Rcedil;\":                          true,\n\t\"&Rcy;\":                             true,\n\t\"&Re;\":                              true,\n\t\"&ReverseElement;\":                  true,\n\t\"&ReverseEquilibrium;\":              true,\n\t\"&ReverseUpEquilibrium;\":            true,\n\t\"&Rfr;\":                             true,\n\t\"&Rho;\":                             true,\n\t\"&RightAngleBracket;\":               true,\n\t\"&RightArrow;\":                      true,\n\t\"&RightArrowBar;\":                   true,\n\t\"&RightArrowLeftArrow;\":             true,\n\t\"&RightCeiling;\":                    true,\n\t\"&RightDoubleBracket;\":              true,\n\t\"&RightDownTeeVector;\":              true,\n\t\"&RightDownVector;\":                 true,\n\t\"&RightDownVectorBar;\":              true,\n\t\"&RightFloor;\":                      true,\n\t\"&RightTee;\":                        true,\n\t\"&RightTeeArrow;\":                   true,\n\t\"&RightTeeVector;\":                  true,\n\t\"&RightTriangle;\":                   true,\n\t\"&RightTriangleBar;\":                true,\n\t\"&RightTriangleEqual;\":              true,\n\t\"&RightUpDownVector;\":               true,\n\t\"&RightUpTeeVector;\":                true,\n\t\"&RightUpVector;\":                   true,\n\t\"&RightUpVectorBar;\":                true,\n\t\"&RightVector;\":                     true,\n\t\"&RightVectorBar;\":                  true,\n\t\"&Rightarrow;\":                      true,\n\t\"&Ropf;\":                            true,\n\t\"&RoundImplies;\":                    true,\n\t\"&Rrightarrow;\":                     true,\n\t\"&Rscr;\":                            true,\n\t\"&Rsh;\":                             true,\n\t\"&RuleDelayed;\":                     true,\n\t\"&SHCHcy;\":                          true,\n\t\"&SHcy;\":                            true,\n\t\"&SOFTcy;\":                          true,\n\t\"&Sacute;\":                          true,\n\t\"&Sc;\":                              true,\n\t\"&Scaron;\":                          true,\n\t\"&Scedil;\":                          true,\n\t\"&Scirc;\":                           true,\n\t\"&Scy;\":                             true,\n\t\"&Sfr;\":                             true,\n\t\"&ShortDownArrow;\":                  true,\n\t\"&ShortLeftArrow;\":                  true,\n\t\"&ShortRightArrow;\":                 true,\n\t\"&ShortUpArrow;\":                    true,\n\t\"&Sigma;\":                           true,\n\t\"&SmallCircle;\":                     true,\n\t\"&Sopf;\":                            true,\n\t\"&Sqrt;\":                            true,\n\t\"&Square;\":                          true,\n\t\"&SquareIntersection;\":              true,\n\t\"&SquareSubset;\":                    true,\n\t\"&SquareSubsetEqual;\":               true,\n\t\"&SquareSuperset;\":                  true,\n\t\"&SquareSupersetEqual;\":             true,\n\t\"&SquareUnion;\":                     true,\n\t\"&Sscr;\":                            true,\n\t\"&Star;\":                            true,\n\t\"&Sub;\":                             true,\n\t\"&Subset;\":                          true,\n\t\"&SubsetEqual;\":                     true,\n\t\"&Succeeds;\":                        true,\n\t\"&SucceedsEqual;\":                   true,\n\t\"&SucceedsSlantEqual;\":              true,\n\t\"&SucceedsTilde;\":                   true,\n\t\"&SuchThat;\":                        true,\n\t\"&Sum;\":                             true,\n\t\"&Sup;\":                             true,\n\t\"&Superset;\":                        true,\n\t\"&SupersetEqual;\":                   true,\n\t\"&Supset;\":                          true,\n\t\"&THORN\":                            true,\n\t\"&THORN;\":                           true,\n\t\"&TRADE;\":                           true,\n\t\"&TSHcy;\":                           true,\n\t\"&TScy;\":                            true,\n\t\"&Tab;\":                             true,\n\t\"&Tau;\":                             true,\n\t\"&Tcaron;\":                          true,\n\t\"&Tcedil;\":                          true,\n\t\"&Tcy;\":                             true,\n\t\"&Tfr;\":                             true,\n\t\"&Therefore;\":                       true,\n\t\"&Theta;\":                           true,\n\t\"&ThickSpace;\":                      true,\n\t\"&ThinSpace;\":                       true,\n\t\"&Tilde;\":                           true,\n\t\"&TildeEqual;\":                      true,\n\t\"&TildeFullEqual;\":                  true,\n\t\"&TildeTilde;\":                      true,\n\t\"&Topf;\":                            true,\n\t\"&TripleDot;\":                       true,\n\t\"&Tscr;\":                            true,\n\t\"&Tstrok;\":                          true,\n\t\"&Uacute\":                           true,\n\t\"&Uacute;\":                          true,\n\t\"&Uarr;\":                            true,\n\t\"&Uarrocir;\":                        true,\n\t\"&Ubrcy;\":                           true,\n\t\"&Ubreve;\":                          true,\n\t\"&Ucirc\":                            true,\n\t\"&Ucirc;\":                           true,\n\t\"&Ucy;\":                             true,\n\t\"&Udblac;\":                          true,\n\t\"&Ufr;\":                             true,\n\t\"&Ugrave\":                           true,\n\t\"&Ugrave;\":                          true,\n\t\"&Umacr;\":                           true,\n\t\"&UnderBar;\":                        true,\n\t\"&UnderBrace;\":                      true,\n\t\"&UnderBracket;\":                    true,\n\t\"&UnderParenthesis;\":                true,\n\t\"&Union;\":                           true,\n\t\"&UnionPlus;\":                       true,\n\t\"&Uogon;\":                           true,\n\t\"&Uopf;\":                            true,\n\t\"&UpArrow;\":                         true,\n\t\"&UpArrowBar;\":                      true,\n\t\"&UpArrowDownArrow;\":                true,\n\t\"&UpDownArrow;\":                     true,\n\t\"&UpEquilibrium;\":                   true,\n\t\"&UpTee;\":                           true,\n\t\"&UpTeeArrow;\":                      true,\n\t\"&Uparrow;\":                         true,\n\t\"&Updownarrow;\":                     true,\n\t\"&UpperLeftArrow;\":                  true,\n\t\"&UpperRightArrow;\":                 true,\n\t\"&Upsi;\":                            true,\n\t\"&Upsilon;\":                         true,\n\t\"&Uring;\":                           true,\n\t\"&Uscr;\":                            true,\n\t\"&Utilde;\":                          true,\n\t\"&Uuml\":                             true,\n\t\"&Uuml;\":                            true,\n\t\"&VDash;\":                           true,\n\t\"&Vbar;\":                            true,\n\t\"&Vcy;\":                             true,\n\t\"&Vdash;\":                           true,\n\t\"&Vdashl;\":                          true,\n\t\"&Vee;\":                             true,\n\t\"&Verbar;\":                          true,\n\t\"&Vert;\":                            true,\n\t\"&VerticalBar;\":                     true,\n\t\"&VerticalLine;\":                    true,\n\t\"&VerticalSeparator;\":               true,\n\t\"&VerticalTilde;\":                   true,\n\t\"&VeryThinSpace;\":                   true,\n\t\"&Vfr;\":                             true,\n\t\"&Vopf;\":                            true,\n\t\"&Vscr;\":                            true,\n\t\"&Vvdash;\":                          true,\n\t\"&Wcirc;\":                           true,\n\t\"&Wedge;\":                           true,\n\t\"&Wfr;\":                             true,\n\t\"&Wopf;\":                            true,\n\t\"&Wscr;\":                            true,\n\t\"&Xfr;\":                             true,\n\t\"&Xi;\":                              true,\n\t\"&Xopf;\":                            true,\n\t\"&Xscr;\":                            true,\n\t\"&YAcy;\":                            true,\n\t\"&YIcy;\":                            true,\n\t\"&YUcy;\":                            true,\n\t\"&Yacute\":                           true,\n\t\"&Yacute;\":                          true,\n\t\"&Ycirc;\":                           true,\n\t\"&Ycy;\":                             true,\n\t\"&Yfr;\":                             true,\n\t\"&Yopf;\":                            true,\n\t\"&Yscr;\":                            true,\n\t\"&Yuml;\":                            true,\n\t\"&ZHcy;\":                            true,\n\t\"&Zacute;\":                          true,\n\t\"&Zcaron;\":                          true,\n\t\"&Zcy;\":                             true,\n\t\"&Zdot;\":                            true,\n\t\"&ZeroWidthSpace;\":                  true,\n\t\"&Zeta;\":                            true,\n\t\"&Zfr;\":                             true,\n\t\"&Zopf;\":                            true,\n\t\"&Zscr;\":                            true,\n\t\"&aacute\":                           true,\n\t\"&aacute;\":                          true,\n\t\"&abreve;\":                          true,\n\t\"&ac;\":                              true,\n\t\"&acE;\":                             true,\n\t\"&acd;\":                             true,\n\t\"&acirc\":                            true,\n\t\"&acirc;\":                           true,\n\t\"&acute\":                            true,\n\t\"&acute;\":                           true,\n\t\"&acy;\":                             true,\n\t\"&aelig\":                            true,\n\t\"&aelig;\":                           true,\n\t\"&af;\":                              true,\n\t\"&afr;\":                             true,\n\t\"&agrave\":                           true,\n\t\"&agrave;\":                          true,\n\t\"&alefsym;\":                         true,\n\t\"&aleph;\":                           true,\n\t\"&alpha;\":                           true,\n\t\"&amacr;\":                           true,\n\t\"&amalg;\":                           true,\n\t\"&amp\":                              true,\n\t\"&amp;\":                             true,\n\t\"&and;\":                             true,\n\t\"&andand;\":                          true,\n\t\"&andd;\":                            true,\n\t\"&andslope;\":                        true,\n\t\"&andv;\":                            true,\n\t\"&ang;\":                             true,\n\t\"&ange;\":                            true,\n\t\"&angle;\":                           true,\n\t\"&angmsd;\":                          true,\n\t\"&angmsdaa;\":                        true,\n\t\"&angmsdab;\":                        true,\n\t\"&angmsdac;\":                        true,\n\t\"&angmsdad;\":                        true,\n\t\"&angmsdae;\":                        true,\n\t\"&angmsdaf;\":                        true,\n\t\"&angmsdag;\":                        true,\n\t\"&angmsdah;\":                        true,\n\t\"&angrt;\":                           true,\n\t\"&angrtvb;\":                         true,\n\t\"&angrtvbd;\":                        true,\n\t\"&angsph;\":                          true,\n\t\"&angst;\":                           true,\n\t\"&angzarr;\":                         true,\n\t\"&aogon;\":                           true,\n\t\"&aopf;\":                            true,\n\t\"&ap;\":                              true,\n\t\"&apE;\":                             true,\n\t\"&apacir;\":                          true,\n\t\"&ape;\":                             true,\n\t\"&apid;\":                            true,\n\t\"&apos;\":                            true,\n\t\"&approx;\":                          true,\n\t\"&approxeq;\":                        true,\n\t\"&aring\":                            true,\n\t\"&aring;\":                           true,\n\t\"&ascr;\":                            true,\n\t\"&ast;\":                             true,\n\t\"&asymp;\":                           true,\n\t\"&asympeq;\":                         true,\n\t\"&atilde\":                           true,\n\t\"&atilde;\":                          true,\n\t\"&auml\":                             true,\n\t\"&auml;\":                            true,\n\t\"&awconint;\":                        true,\n\t\"&awint;\":                           true,\n\t\"&bNot;\":                            true,\n\t\"&backcong;\":                        true,\n\t\"&backepsilon;\":                     true,\n\t\"&backprime;\":                       true,\n\t\"&backsim;\":                         true,\n\t\"&backsimeq;\":                       true,\n\t\"&barvee;\":                          true,\n\t\"&barwed;\":                          true,\n\t\"&barwedge;\":                        true,\n\t\"&bbrk;\":                            true,\n\t\"&bbrktbrk;\":                        true,\n\t\"&bcong;\":                           true,\n\t\"&bcy;\":                             true,\n\t\"&bdquo;\":                           true,\n\t\"&becaus;\":                          true,\n\t\"&because;\":                         true,\n\t\"&bemptyv;\":                         true,\n\t\"&bepsi;\":                           true,\n\t\"&bernou;\":                          true,\n\t\"&beta;\":                            true,\n\t\"&beth;\":                            true,\n\t\"&between;\":                         true,\n\t\"&bfr;\":                             true,\n\t\"&bigcap;\":                          true,\n\t\"&bigcirc;\":                         true,\n\t\"&bigcup;\":                          true,\n\t\"&bigodot;\":                         true,\n\t\"&bigoplus;\":                        true,\n\t\"&bigotimes;\":                       true,\n\t\"&bigsqcup;\":                        true,\n\t\"&bigstar;\":                         true,\n\t\"&bigtriangledown;\":                 true,\n\t\"&bigtriangleup;\":                   true,\n\t\"&biguplus;\":                        true,\n\t\"&bigvee;\":                          true,\n\t\"&bigwedge;\":                        true,\n\t\"&bkarow;\":                          true,\n\t\"&blacklozenge;\":                    true,\n\t\"&blacksquare;\":                     true,\n\t\"&blacktriangle;\":                   true,\n\t\"&blacktriangledown;\":               true,\n\t\"&blacktriangleleft;\":               true,\n\t\"&blacktriangleright;\":              true,\n\t\"&blank;\":                           true,\n\t\"&blk12;\":                           true,\n\t\"&blk14;\":                           true,\n\t\"&blk34;\":                           true,\n\t\"&block;\":                           true,\n\t\"&bne;\":                             true,\n\t\"&bnequiv;\":                         true,\n\t\"&bnot;\":                            true,\n\t\"&bopf;\":                            true,\n\t\"&bot;\":                             true,\n\t\"&bottom;\":                          true,\n\t\"&bowtie;\":                          true,\n\t\"&boxDL;\":                           true,\n\t\"&boxDR;\":                           true,\n\t\"&boxDl;\":                           true,\n\t\"&boxDr;\":                           true,\n\t\"&boxH;\":                            true,\n\t\"&boxHD;\":                           true,\n\t\"&boxHU;\":                           true,\n\t\"&boxHd;\":                           true,\n\t\"&boxHu;\":                           true,\n\t\"&boxUL;\":                           true,\n\t\"&boxUR;\":                           true,\n\t\"&boxUl;\":                           true,\n\t\"&boxUr;\":                           true,\n\t\"&boxV;\":                            true,\n\t\"&boxVH;\":                           true,\n\t\"&boxVL;\":                           true,\n\t\"&boxVR;\":                           true,\n\t\"&boxVh;\":                           true,\n\t\"&boxVl;\":                           true,\n\t\"&boxVr;\":                           true,\n\t\"&boxbox;\":                          true,\n\t\"&boxdL;\":                           true,\n\t\"&boxdR;\":                           true,\n\t\"&boxdl;\":                           true,\n\t\"&boxdr;\":                           true,\n\t\"&boxh;\":                            true,\n\t\"&boxhD;\":                           true,\n\t\"&boxhU;\":                           true,\n\t\"&boxhd;\":                           true,\n\t\"&boxhu;\":                           true,\n\t\"&boxminus;\":                        true,\n\t\"&boxplus;\":                         true,\n\t\"&boxtimes;\":                        true,\n\t\"&boxuL;\":                           true,\n\t\"&boxuR;\":                           true,\n\t\"&boxul;\":                           true,\n\t\"&boxur;\":                           true,\n\t\"&boxv;\":                            true,\n\t\"&boxvH;\":                           true,\n\t\"&boxvL;\":                           true,\n\t\"&boxvR;\":                           true,\n\t\"&boxvh;\":                           true,\n\t\"&boxvl;\":                           true,\n\t\"&boxvr;\":                           true,\n\t\"&bprime;\":                          true,\n\t\"&breve;\":                           true,\n\t\"&brvbar\":                           true,\n\t\"&brvbar;\":                          true,\n\t\"&bscr;\":                            true,\n\t\"&bsemi;\":                           true,\n\t\"&bsim;\":                            true,\n\t\"&bsime;\":                           true,\n\t\"&bsol;\":                            true,\n\t\"&bsolb;\":                           true,\n\t\"&bsolhsub;\":                        true,\n\t\"&bull;\":                            true,\n\t\"&bullet;\":                          true,\n\t\"&bump;\":                            true,\n\t\"&bumpE;\":                           true,\n\t\"&bumpe;\":                           true,\n\t\"&bumpeq;\":                          true,\n\t\"&cacute;\":                          true,\n\t\"&cap;\":                             true,\n\t\"&capand;\":                          true,\n\t\"&capbrcup;\":                        true,\n\t\"&capcap;\":                          true,\n\t\"&capcup;\":                          true,\n\t\"&capdot;\":                          true,\n\t\"&caps;\":                            true,\n\t\"&caret;\":                           true,\n\t\"&caron;\":                           true,\n\t\"&ccaps;\":                           true,\n\t\"&ccaron;\":                          true,\n\t\"&ccedil\":                           true,\n\t\"&ccedil;\":                          true,\n\t\"&ccirc;\":                           true,\n\t\"&ccups;\":                           true,\n\t\"&ccupssm;\":                         true,\n\t\"&cdot;\":                            true,\n\t\"&cedil\":                            true,\n\t\"&cedil;\":                           true,\n\t\"&cemptyv;\":                         true,\n\t\"&cent\":                             true,\n\t\"&cent;\":                            true,\n\t\"&centerdot;\":                       true,\n\t\"&cfr;\":                             true,\n\t\"&chcy;\":                            true,\n\t\"&check;\":                           true,\n\t\"&checkmark;\":                       true,\n\t\"&chi;\":                             true,\n\t\"&cir;\":                             true,\n\t\"&cirE;\":                            true,\n\t\"&circ;\":                            true,\n\t\"&circeq;\":                          true,\n\t\"&circlearrowleft;\":                 true,\n\t\"&circlearrowright;\":                true,\n\t\"&circledR;\":                        true,\n\t\"&circledS;\":                        true,\n\t\"&circledast;\":                      true,\n\t\"&circledcirc;\":                     true,\n\t\"&circleddash;\":                     true,\n\t\"&cire;\":                            true,\n\t\"&cirfnint;\":                        true,\n\t\"&cirmid;\":                          true,\n\t\"&cirscir;\":                         true,\n\t\"&clubs;\":                           true,\n\t\"&clubsuit;\":                        true,\n\t\"&colon;\":                           true,\n\t\"&colone;\":                          true,\n\t\"&coloneq;\":                         true,\n\t\"&comma;\":                           true,\n\t\"&commat;\":                          true,\n\t\"&comp;\":                            true,\n\t\"&compfn;\":                          true,\n\t\"&complement;\":                      true,\n\t\"&complexes;\":                       true,\n\t\"&cong;\":                            true,\n\t\"&congdot;\":                         true,\n\t\"&conint;\":                          true,\n\t\"&copf;\":                            true,\n\t\"&coprod;\":                          true,\n\t\"&copy\":                             true,\n\t\"&copy;\":                            true,\n\t\"&copysr;\":                          true,\n\t\"&crarr;\":                           true,\n\t\"&cross;\":                           true,\n\t\"&cscr;\":                            true,\n\t\"&csub;\":                            true,\n\t\"&csube;\":                           true,\n\t\"&csup;\":                            true,\n\t\"&csupe;\":                           true,\n\t\"&ctdot;\":                           true,\n\t\"&cudarrl;\":                         true,\n\t\"&cudarrr;\":                         true,\n\t\"&cuepr;\":                           true,\n\t\"&cuesc;\":                           true,\n\t\"&cularr;\":                          true,\n\t\"&cularrp;\":                         true,\n\t\"&cup;\":                             true,\n\t\"&cupbrcap;\":                        true,\n\t\"&cupcap;\":                          true,\n\t\"&cupcup;\":                          true,\n\t\"&cupdot;\":                          true,\n\t\"&cupor;\":                           true,\n\t\"&cups;\":                            true,\n\t\"&curarr;\":                          true,\n\t\"&curarrm;\":                         true,\n\t\"&curlyeqprec;\":                     true,\n\t\"&curlyeqsucc;\":                     true,\n\t\"&curlyvee;\":                        true,\n\t\"&curlywedge;\":                      true,\n\t\"&curren\":                           true,\n\t\"&curren;\":                          true,\n\t\"&curvearrowleft;\":                  true,\n\t\"&curvearrowright;\":                 true,\n\t\"&cuvee;\":                           true,\n\t\"&cuwed;\":                           true,\n\t\"&cwconint;\":                        true,\n\t\"&cwint;\":                           true,\n\t\"&cylcty;\":                          true,\n\t\"&dArr;\":                            true,\n\t\"&dHar;\":                            true,\n\t\"&dagger;\":                          true,\n\t\"&daleth;\":                          true,\n\t\"&darr;\":                            true,\n\t\"&dash;\":                            true,\n\t\"&dashv;\":                           true,\n\t\"&dbkarow;\":                         true,\n\t\"&dblac;\":                           true,\n\t\"&dcaron;\":                          true,\n\t\"&dcy;\":                             true,\n\t\"&dd;\":                              true,\n\t\"&ddagger;\":                         true,\n\t\"&ddarr;\":                           true,\n\t\"&ddotseq;\":                         true,\n\t\"&deg\":                              true,\n\t\"&deg;\":                             true,\n\t\"&delta;\":                           true,\n\t\"&demptyv;\":                         true,\n\t\"&dfisht;\":                          true,\n\t\"&dfr;\":                             true,\n\t\"&dharl;\":                           true,\n\t\"&dharr;\":                           true,\n\t\"&diam;\":                            true,\n\t\"&diamond;\":                         true,\n\t\"&diamondsuit;\":                     true,\n\t\"&diams;\":                           true,\n\t\"&die;\":                             true,\n\t\"&digamma;\":                         true,\n\t\"&disin;\":                           true,\n\t\"&div;\":                             true,\n\t\"&divide\":                           true,\n\t\"&divide;\":                          true,\n\t\"&divideontimes;\":                   true,\n\t\"&divonx;\":                          true,\n\t\"&djcy;\":                            true,\n\t\"&dlcorn;\":                          true,\n\t\"&dlcrop;\":                          true,\n\t\"&dollar;\":                          true,\n\t\"&dopf;\":                            true,\n\t\"&dot;\":                             true,\n\t\"&doteq;\":                           true,\n\t\"&doteqdot;\":                        true,\n\t\"&dotminus;\":                        true,\n\t\"&dotplus;\":                         true,\n\t\"&dotsquare;\":                       true,\n\t\"&doublebarwedge;\":                  true,\n\t\"&downarrow;\":                       true,\n\t\"&downdownarrows;\":                  true,\n\t\"&downharpoonleft;\":                 true,\n\t\"&downharpoonright;\":                true,\n\t\"&drbkarow;\":                        true,\n\t\"&drcorn;\":                          true,\n\t\"&drcrop;\":                          true,\n\t\"&dscr;\":                            true,\n\t\"&dscy;\":                            true,\n\t\"&dsol;\":                            true,\n\t\"&dstrok;\":                          true,\n\t\"&dtdot;\":                           true,\n\t\"&dtri;\":                            true,\n\t\"&dtrif;\":                           true,\n\t\"&duarr;\":                           true,\n\t\"&duhar;\":                           true,\n\t\"&dwangle;\":                         true,\n\t\"&dzcy;\":                            true,\n\t\"&dzigrarr;\":                        true,\n\t\"&eDDot;\":                           true,\n\t\"&eDot;\":                            true,\n\t\"&eacute\":                           true,\n\t\"&eacute;\":                          true,\n\t\"&easter;\":                          true,\n\t\"&ecaron;\":                          true,\n\t\"&ecir;\":                            true,\n\t\"&ecirc\":                            true,\n\t\"&ecirc;\":                           true,\n\t\"&ecolon;\":                          true,\n\t\"&ecy;\":                             true,\n\t\"&edot;\":                            true,\n\t\"&ee;\":                              true,\n\t\"&efDot;\":                           true,\n\t\"&efr;\":                             true,\n\t\"&eg;\":                              true,\n\t\"&egrave\":                           true,\n\t\"&egrave;\":                          true,\n\t\"&egs;\":                             true,\n\t\"&egsdot;\":                          true,\n\t\"&el;\":                              true,\n\t\"&elinters;\":                        true,\n\t\"&ell;\":                             true,\n\t\"&els;\":                             true,\n\t\"&elsdot;\":                          true,\n\t\"&emacr;\":                           true,\n\t\"&empty;\":                           true,\n\t\"&emptyset;\":                        true,\n\t\"&emptyv;\":                          true,\n\t\"&emsp13;\":                          true,\n\t\"&emsp14;\":                          true,\n\t\"&emsp;\":                            true,\n\t\"&eng;\":                             true,\n\t\"&ensp;\":                            true,\n\t\"&eogon;\":                           true,\n\t\"&eopf;\":                            true,\n\t\"&epar;\":                            true,\n\t\"&eparsl;\":                          true,\n\t\"&eplus;\":                           true,\n\t\"&epsi;\":                            true,\n\t\"&epsilon;\":                         true,\n\t\"&epsiv;\":                           true,\n\t\"&eqcirc;\":                          true,\n\t\"&eqcolon;\":                         true,\n\t\"&eqsim;\":                           true,\n\t\"&eqslantgtr;\":                      true,\n\t\"&eqslantless;\":                     true,\n\t\"&equals;\":                          true,\n\t\"&equest;\":                          true,\n\t\"&equiv;\":                           true,\n\t\"&equivDD;\":                         true,\n\t\"&eqvparsl;\":                        true,\n\t\"&erDot;\":                           true,\n\t\"&erarr;\":                           true,\n\t\"&escr;\":                            true,\n\t\"&esdot;\":                           true,\n\t\"&esim;\":                            true,\n\t\"&eta;\":                             true,\n\t\"&eth\":                              true,\n\t\"&eth;\":                             true,\n\t\"&euml\":                             true,\n\t\"&euml;\":                            true,\n\t\"&euro;\":                            true,\n\t\"&excl;\":                            true,\n\t\"&exist;\":                           true,\n\t\"&expectation;\":                     true,\n\t\"&exponentiale;\":                    true,\n\t\"&fallingdotseq;\":                   true,\n\t\"&fcy;\":                             true,\n\t\"&female;\":                          true,\n\t\"&ffilig;\":                          true,\n\t\"&fflig;\":                           true,\n\t\"&ffllig;\":                          true,\n\t\"&ffr;\":                             true,\n\t\"&filig;\":                           true,\n\t\"&fjlig;\":                           true,\n\t\"&flat;\":                            true,\n\t\"&fllig;\":                           true,\n\t\"&fltns;\":                           true,\n\t\"&fnof;\":                            true,\n\t\"&fopf;\":                            true,\n\t\"&forall;\":                          true,\n\t\"&fork;\":                            true,\n\t\"&forkv;\":                           true,\n\t\"&fpartint;\":                        true,\n\t\"&frac12\":                           true,\n\t\"&frac12;\":                          true,\n\t\"&frac13;\":                          true,\n\t\"&frac14\":                           true,\n\t\"&frac14;\":                          true,\n\t\"&frac15;\":                          true,\n\t\"&frac16;\":                          true,\n\t\"&frac18;\":                          true,\n\t\"&frac23;\":                          true,\n\t\"&frac25;\":                          true,\n\t\"&frac34\":                           true,\n\t\"&frac34;\":                          true,\n\t\"&frac35;\":                          true,\n\t\"&frac38;\":                          true,\n\t\"&frac45;\":                          true,\n\t\"&frac56;\":                          true,\n\t\"&frac58;\":                          true,\n\t\"&frac78;\":                          true,\n\t\"&frasl;\":                           true,\n\t\"&frown;\":                           true,\n\t\"&fscr;\":                            true,\n\t\"&gE;\":                              true,\n\t\"&gEl;\":                             true,\n\t\"&gacute;\":                          true,\n\t\"&gamma;\":                           true,\n\t\"&gammad;\":                          true,\n\t\"&gap;\":                             true,\n\t\"&gbreve;\":                          true,\n\t\"&gcirc;\":                           true,\n\t\"&gcy;\":                             true,\n\t\"&gdot;\":                            true,\n\t\"&ge;\":                              true,\n\t\"&gel;\":                             true,\n\t\"&geq;\":                             true,\n\t\"&geqq;\":                            true,\n\t\"&geqslant;\":                        true,\n\t\"&ges;\":                             true,\n\t\"&gescc;\":                           true,\n\t\"&gesdot;\":                          true,\n\t\"&gesdoto;\":                         true,\n\t\"&gesdotol;\":                        true,\n\t\"&gesl;\":                            true,\n\t\"&gesles;\":                          true,\n\t\"&gfr;\":                             true,\n\t\"&gg;\":                              true,\n\t\"&ggg;\":                             true,\n\t\"&gimel;\":                           true,\n\t\"&gjcy;\":                            true,\n\t\"&gl;\":                              true,\n\t\"&glE;\":                             true,\n\t\"&gla;\":                             true,\n\t\"&glj;\":                             true,\n\t\"&gnE;\":                             true,\n\t\"&gnap;\":                            true,\n\t\"&gnapprox;\":                        true,\n\t\"&gne;\":                             true,\n\t\"&gneq;\":                            true,\n\t\"&gneqq;\":                           true,\n\t\"&gnsim;\":                           true,\n\t\"&gopf;\":                            true,\n\t\"&grave;\":                           true,\n\t\"&gscr;\":                            true,\n\t\"&gsim;\":                            true,\n\t\"&gsime;\":                           true,\n\t\"&gsiml;\":                           true,\n\t\"&gt\":                               true,\n\t\"&gt;\":                              true,\n\t\"&gtcc;\":                            true,\n\t\"&gtcir;\":                           true,\n\t\"&gtdot;\":                           true,\n\t\"&gtlPar;\":                          true,\n\t\"&gtquest;\":                         true,\n\t\"&gtrapprox;\":                       true,\n\t\"&gtrarr;\":                          true,\n\t\"&gtrdot;\":                          true,\n\t\"&gtreqless;\":                       true,\n\t\"&gtreqqless;\":                      true,\n\t\"&gtrless;\":                         true,\n\t\"&gtrsim;\":                          true,\n\t\"&gvertneqq;\":                       true,\n\t\"&gvnE;\":                            true,\n\t\"&hArr;\":                            true,\n\t\"&hairsp;\":                          true,\n\t\"&half;\":                            true,\n\t\"&hamilt;\":                          true,\n\t\"&hardcy;\":                          true,\n\t\"&harr;\":                            true,\n\t\"&harrcir;\":                         true,\n\t\"&harrw;\":                           true,\n\t\"&hbar;\":                            true,\n\t\"&hcirc;\":                           true,\n\t\"&hearts;\":                          true,\n\t\"&heartsuit;\":                       true,\n\t\"&hellip;\":                          true,\n\t\"&hercon;\":                          true,\n\t\"&hfr;\":                             true,\n\t\"&hksearow;\":                        true,\n\t\"&hkswarow;\":                        true,\n\t\"&hoarr;\":                           true,\n\t\"&homtht;\":                          true,\n\t\"&hookleftarrow;\":                   true,\n\t\"&hookrightarrow;\":                  true,\n\t\"&hopf;\":                            true,\n\t\"&horbar;\":                          true,\n\t\"&hscr;\":                            true,\n\t\"&hslash;\":                          true,\n\t\"&hstrok;\":                          true,\n\t\"&hybull;\":                          true,\n\t\"&hyphen;\":                          true,\n\t\"&iacute\":                           true,\n\t\"&iacute;\":                          true,\n\t\"&ic;\":                              true,\n\t\"&icirc\":                            true,\n\t\"&icirc;\":                           true,\n\t\"&icy;\":                             true,\n\t\"&iecy;\":                            true,\n\t\"&iexcl\":                            true,\n\t\"&iexcl;\":                           true,\n\t\"&iff;\":                             true,\n\t\"&ifr;\":                             true,\n\t\"&igrave\":                           true,\n\t\"&igrave;\":                          true,\n\t\"&ii;\":                              true,\n\t\"&iiiint;\":                          true,\n\t\"&iiint;\":                           true,\n\t\"&iinfin;\":                          true,\n\t\"&iiota;\":                           true,\n\t\"&ijlig;\":                           true,\n\t\"&imacr;\":                           true,\n\t\"&image;\":                           true,\n\t\"&imagline;\":                        true,\n\t\"&imagpart;\":                        true,\n\t\"&imath;\":                           true,\n\t\"&imof;\":                            true,\n\t\"&imped;\":                           true,\n\t\"&in;\":                              true,\n\t\"&incare;\":                          true,\n\t\"&infin;\":                           true,\n\t\"&infintie;\":                        true,\n\t\"&inodot;\":                          true,\n\t\"&int;\":                             true,\n\t\"&intcal;\":                          true,\n\t\"&integers;\":                        true,\n\t\"&intercal;\":                        true,\n\t\"&intlarhk;\":                        true,\n\t\"&intprod;\":                         true,\n\t\"&iocy;\":                            true,\n\t\"&iogon;\":                           true,\n\t\"&iopf;\":                            true,\n\t\"&iota;\":                            true,\n\t\"&iprod;\":                           true,\n\t\"&iquest\":                           true,\n\t\"&iquest;\":                          true,\n\t\"&iscr;\":                            true,\n\t\"&isin;\":                            true,\n\t\"&isinE;\":                           true,\n\t\"&isindot;\":                         true,\n\t\"&isins;\":                           true,\n\t\"&isinsv;\":                          true,\n\t\"&isinv;\":                           true,\n\t\"&it;\":                              true,\n\t\"&itilde;\":                          true,\n\t\"&iukcy;\":                           true,\n\t\"&iuml\":                             true,\n\t\"&iuml;\":                            true,\n\t\"&jcirc;\":                           true,\n\t\"&jcy;\":                             true,\n\t\"&jfr;\":                             true,\n\t\"&jmath;\":                           true,\n\t\"&jopf;\":                            true,\n\t\"&jscr;\":                            true,\n\t\"&jsercy;\":                          true,\n\t\"&jukcy;\":                           true,\n\t\"&kappa;\":                           true,\n\t\"&kappav;\":                          true,\n\t\"&kcedil;\":                          true,\n\t\"&kcy;\":                             true,\n\t\"&kfr;\":                             true,\n\t\"&kgreen;\":                          true,\n\t\"&khcy;\":                            true,\n\t\"&kjcy;\":                            true,\n\t\"&kopf;\":                            true,\n\t\"&kscr;\":                            true,\n\t\"&lAarr;\":                           true,\n\t\"&lArr;\":                            true,\n\t\"&lAtail;\":                          true,\n\t\"&lBarr;\":                           true,\n\t\"&lE;\":                              true,\n\t\"&lEg;\":                             true,\n\t\"&lHar;\":                            true,\n\t\"&lacute;\":                          true,\n\t\"&laemptyv;\":                        true,\n\t\"&lagran;\":                          true,\n\t\"&lambda;\":                          true,\n\t\"&lang;\":                            true,\n\t\"&langd;\":                           true,\n\t\"&langle;\":                          true,\n\t\"&lap;\":                             true,\n\t\"&laquo\":                            true,\n\t\"&laquo;\":                           true,\n\t\"&larr;\":                            true,\n\t\"&larrb;\":                           true,\n\t\"&larrbfs;\":                         true,\n\t\"&larrfs;\":                          true,\n\t\"&larrhk;\":                          true,\n\t\"&larrlp;\":                          true,\n\t\"&larrpl;\":                          true,\n\t\"&larrsim;\":                         true,\n\t\"&larrtl;\":                          true,\n\t\"&lat;\":                             true,\n\t\"&latail;\":                          true,\n\t\"&late;\":                            true,\n\t\"&lates;\":                           true,\n\t\"&lbarr;\":                           true,\n\t\"&lbbrk;\":                           true,\n\t\"&lbrace;\":                          true,\n\t\"&lbrack;\":                          true,\n\t\"&lbrke;\":                           true,\n\t\"&lbrksld;\":                         true,\n\t\"&lbrkslu;\":                         true,\n\t\"&lcaron;\":                          true,\n\t\"&lcedil;\":                          true,\n\t\"&lceil;\":                           true,\n\t\"&lcub;\":                            true,\n\t\"&lcy;\":                             true,\n\t\"&ldca;\":                            true,\n\t\"&ldquo;\":                           true,\n\t\"&ldquor;\":                          true,\n\t\"&ldrdhar;\":                         true,\n\t\"&ldrushar;\":                        true,\n\t\"&ldsh;\":                            true,\n\t\"&le;\":                              true,\n\t\"&leftarrow;\":                       true,\n\t\"&leftarrowtail;\":                   true,\n\t\"&leftharpoondown;\":                 true,\n\t\"&leftharpoonup;\":                   true,\n\t\"&leftleftarrows;\":                  true,\n\t\"&leftrightarrow;\":                  true,\n\t\"&leftrightarrows;\":                 true,\n\t\"&leftrightharpoons;\":               true,\n\t\"&leftrightsquigarrow;\":             true,\n\t\"&leftthreetimes;\":                  true,\n\t\"&leg;\":                             true,\n\t\"&leq;\":                             true,\n\t\"&leqq;\":                            true,\n\t\"&leqslant;\":                        true,\n\t\"&les;\":                             true,\n\t\"&lescc;\":                           true,\n\t\"&lesdot;\":                          true,\n\t\"&lesdoto;\":                         true,\n\t\"&lesdotor;\":                        true,\n\t\"&lesg;\":                            true,\n\t\"&lesges;\":                          true,\n\t\"&lessapprox;\":                      true,\n\t\"&lessdot;\":                         true,\n\t\"&lesseqgtr;\":                       true,\n\t\"&lesseqqgtr;\":                      true,\n\t\"&lessgtr;\":                         true,\n\t\"&lesssim;\":                         true,\n\t\"&lfisht;\":                          true,\n\t\"&lfloor;\":                          true,\n\t\"&lfr;\":                             true,\n\t\"&lg;\":                              true,\n\t\"&lgE;\":                             true,\n\t\"&lhard;\":                           true,\n\t\"&lharu;\":                           true,\n\t\"&lharul;\":                          true,\n\t\"&lhblk;\":                           true,\n\t\"&ljcy;\":                            true,\n\t\"&ll;\":                              true,\n\t\"&llarr;\":                           true,\n\t\"&llcorner;\":                        true,\n\t\"&llhard;\":                          true,\n\t\"&lltri;\":                           true,\n\t\"&lmidot;\":                          true,\n\t\"&lmoust;\":                          true,\n\t\"&lmoustache;\":                      true,\n\t\"&lnE;\":                             true,\n\t\"&lnap;\":                            true,\n\t\"&lnapprox;\":                        true,\n\t\"&lne;\":                             true,\n\t\"&lneq;\":                            true,\n\t\"&lneqq;\":                           true,\n\t\"&lnsim;\":                           true,\n\t\"&loang;\":                           true,\n\t\"&loarr;\":                           true,\n\t\"&lobrk;\":                           true,\n\t\"&longleftarrow;\":                   true,\n\t\"&longleftrightarrow;\":              true,\n\t\"&longmapsto;\":                      true,\n\t\"&longrightarrow;\":                  true,\n\t\"&looparrowleft;\":                   true,\n\t\"&looparrowright;\":                  true,\n\t\"&lopar;\":                           true,\n\t\"&lopf;\":                            true,\n\t\"&loplus;\":                          true,\n\t\"&lotimes;\":                         true,\n\t\"&lowast;\":                          true,\n\t\"&lowbar;\":                          true,\n\t\"&loz;\":                             true,\n\t\"&lozenge;\":                         true,\n\t\"&lozf;\":                            true,\n\t\"&lpar;\":                            true,\n\t\"&lparlt;\":                          true,\n\t\"&lrarr;\":                           true,\n\t\"&lrcorner;\":                        true,\n\t\"&lrhar;\":                           true,\n\t\"&lrhard;\":                          true,\n\t\"&lrm;\":                             true,\n\t\"&lrtri;\":                           true,\n\t\"&lsaquo;\":                          true,\n\t\"&lscr;\":                            true,\n\t\"&lsh;\":                             true,\n\t\"&lsim;\":                            true,\n\t\"&lsime;\":                           true,\n\t\"&lsimg;\":                           true,\n\t\"&lsqb;\":                            true,\n\t\"&lsquo;\":                           true,\n\t\"&lsquor;\":                          true,\n\t\"&lstrok;\":                          true,\n\t\"&lt\":                               true,\n\t\"&lt;\":                              true,\n\t\"&ltcc;\":                            true,\n\t\"&ltcir;\":                           true,\n\t\"&ltdot;\":                           true,\n\t\"&lthree;\":                          true,\n\t\"&ltimes;\":                          true,\n\t\"&ltlarr;\":                          true,\n\t\"&ltquest;\":                         true,\n\t\"&ltrPar;\":                          true,\n\t\"&ltri;\":                            true,\n\t\"&ltrie;\":                           true,\n\t\"&ltrif;\":                           true,\n\t\"&lurdshar;\":                        true,\n\t\"&luruhar;\":                         true,\n\t\"&lvertneqq;\":                       true,\n\t\"&lvnE;\":                            true,\n\t\"&mDDot;\":                           true,\n\t\"&macr\":                             true,\n\t\"&macr;\":                            true,\n\t\"&male;\":                            true,\n\t\"&malt;\":                            true,\n\t\"&maltese;\":                         true,\n\t\"&map;\":                             true,\n\t\"&mapsto;\":                          true,\n\t\"&mapstodown;\":                      true,\n\t\"&mapstoleft;\":                      true,\n\t\"&mapstoup;\":                        true,\n\t\"&marker;\":                          true,\n\t\"&mcomma;\":                          true,\n\t\"&mcy;\":                             true,\n\t\"&mdash;\":                           true,\n\t\"&measuredangle;\":                   true,\n\t\"&mfr;\":                             true,\n\t\"&mho;\":                             true,\n\t\"&micro\":                            true,\n\t\"&micro;\":                           true,\n\t\"&mid;\":                             true,\n\t\"&midast;\":                          true,\n\t\"&midcir;\":                          true,\n\t\"&middot\":                           true,\n\t\"&middot;\":                          true,\n\t\"&minus;\":                           true,\n\t\"&minusb;\":                          true,\n\t\"&minusd;\":                          true,\n\t\"&minusdu;\":                         true,\n\t\"&mlcp;\":                            true,\n\t\"&mldr;\":                            true,\n\t\"&mnplus;\":                          true,\n\t\"&models;\":                          true,\n\t\"&mopf;\":                            true,\n\t\"&mp;\":                              true,\n\t\"&mscr;\":                            true,\n\t\"&mstpos;\":                          true,\n\t\"&mu;\":                              true,\n\t\"&multimap;\":                        true,\n\t\"&mumap;\":                           true,\n\t\"&nGg;\":                             true,\n\t\"&nGt;\":                             true,\n\t\"&nGtv;\":                            true,\n\t\"&nLeftarrow;\":                      true,\n\t\"&nLeftrightarrow;\":                 true,\n\t\"&nLl;\":                             true,\n\t\"&nLt;\":                             true,\n\t\"&nLtv;\":                            true,\n\t\"&nRightarrow;\":                     true,\n\t\"&nVDash;\":                          true,\n\t\"&nVdash;\":                          true,\n\t\"&nabla;\":                           true,\n\t\"&nacute;\":                          true,\n\t\"&nang;\":                            true,\n\t\"&nap;\":                             true,\n\t\"&napE;\":                            true,\n\t\"&napid;\":                           true,\n\t\"&napos;\":                           true,\n\t\"&napprox;\":                         true,\n\t\"&natur;\":                           true,\n\t\"&natural;\":                         true,\n\t\"&naturals;\":                        true,\n\t\"&nbsp\":                             true,\n\t\"&nbsp;\":                            true,\n\t\"&nbump;\":                           true,\n\t\"&nbumpe;\":                          true,\n\t\"&ncap;\":                            true,\n\t\"&ncaron;\":                          true,\n\t\"&ncedil;\":                          true,\n\t\"&ncong;\":                           true,\n\t\"&ncongdot;\":                        true,\n\t\"&ncup;\":                            true,\n\t\"&ncy;\":                             true,\n\t\"&ndash;\":                           true,\n\t\"&ne;\":                              true,\n\t\"&neArr;\":                           true,\n\t\"&nearhk;\":                          true,\n\t\"&nearr;\":                           true,\n\t\"&nearrow;\":                         true,\n\t\"&nedot;\":                           true,\n\t\"&nequiv;\":                          true,\n\t\"&nesear;\":                          true,\n\t\"&nesim;\":                           true,\n\t\"&nexist;\":                          true,\n\t\"&nexists;\":                         true,\n\t\"&nfr;\":                             true,\n\t\"&ngE;\":                             true,\n\t\"&nge;\":                             true,\n\t\"&ngeq;\":                            true,\n\t\"&ngeqq;\":                           true,\n\t\"&ngeqslant;\":                       true,\n\t\"&nges;\":                            true,\n\t\"&ngsim;\":                           true,\n\t\"&ngt;\":                             true,\n\t\"&ngtr;\":                            true,\n\t\"&nhArr;\":                           true,\n\t\"&nharr;\":                           true,\n\t\"&nhpar;\":                           true,\n\t\"&ni;\":                              true,\n\t\"&nis;\":                             true,\n\t\"&nisd;\":                            true,\n\t\"&niv;\":                             true,\n\t\"&njcy;\":                            true,\n\t\"&nlArr;\":                           true,\n\t\"&nlE;\":                             true,\n\t\"&nlarr;\":                           true,\n\t\"&nldr;\":                            true,\n\t\"&nle;\":                             true,\n\t\"&nleftarrow;\":                      true,\n\t\"&nleftrightarrow;\":                 true,\n\t\"&nleq;\":                            true,\n\t\"&nleqq;\":                           true,\n\t\"&nleqslant;\":                       true,\n\t\"&nles;\":                            true,\n\t\"&nless;\":                           true,\n\t\"&nlsim;\":                           true,\n\t\"&nlt;\":                             true,\n\t\"&nltri;\":                           true,\n\t\"&nltrie;\":                          true,\n\t\"&nmid;\":                            true,\n\t\"&nopf;\":                            true,\n\t\"&not\":                              true,\n\t\"&not;\":                             true,\n\t\"&notin;\":                           true,\n\t\"&notinE;\":                          true,\n\t\"&notindot;\":                        true,\n\t\"&notinva;\":                         true,\n\t\"&notinvb;\":                         true,\n\t\"&notinvc;\":                         true,\n\t\"&notni;\":                           true,\n\t\"&notniva;\":                         true,\n\t\"&notnivb;\":                         true,\n\t\"&notnivc;\":                         true,\n\t\"&npar;\":                            true,\n\t\"&nparallel;\":                       true,\n\t\"&nparsl;\":                          true,\n\t\"&npart;\":                           true,\n\t\"&npolint;\":                         true,\n\t\"&npr;\":                             true,\n\t\"&nprcue;\":                          true,\n\t\"&npre;\":                            true,\n\t\"&nprec;\":                           true,\n\t\"&npreceq;\":                         true,\n\t\"&nrArr;\":                           true,\n\t\"&nrarr;\":                           true,\n\t\"&nrarrc;\":                          true,\n\t\"&nrarrw;\":                          true,\n\t\"&nrightarrow;\":                     true,\n\t\"&nrtri;\":                           true,\n\t\"&nrtrie;\":                          true,\n\t\"&nsc;\":                             true,\n\t\"&nsccue;\":                          true,\n\t\"&nsce;\":                            true,\n\t\"&nscr;\":                            true,\n\t\"&nshortmid;\":                       true,\n\t\"&nshortparallel;\":                  true,\n\t\"&nsim;\":                            true,\n\t\"&nsime;\":                           true,\n\t\"&nsimeq;\":                          true,\n\t\"&nsmid;\":                           true,\n\t\"&nspar;\":                           true,\n\t\"&nsqsube;\":                         true,\n\t\"&nsqsupe;\":                         true,\n\t\"&nsub;\":                            true,\n\t\"&nsubE;\":                           true,\n\t\"&nsube;\":                           true,\n\t\"&nsubset;\":                         true,\n\t\"&nsubseteq;\":                       true,\n\t\"&nsubseteqq;\":                      true,\n\t\"&nsucc;\":                           true,\n\t\"&nsucceq;\":                         true,\n\t\"&nsup;\":                            true,\n\t\"&nsupE;\":                           true,\n\t\"&nsupe;\":                           true,\n\t\"&nsupset;\":                         true,\n\t\"&nsupseteq;\":                       true,\n\t\"&nsupseteqq;\":                      true,\n\t\"&ntgl;\":                            true,\n\t\"&ntilde\":                           true,\n\t\"&ntilde;\":                          true,\n\t\"&ntlg;\":                            true,\n\t\"&ntriangleleft;\":                   true,\n\t\"&ntrianglelefteq;\":                 true,\n\t\"&ntriangleright;\":                  true,\n\t\"&ntrianglerighteq;\":                true,\n\t\"&nu;\":                              true,\n\t\"&num;\":                             true,\n\t\"&numero;\":                          true,\n\t\"&numsp;\":                           true,\n\t\"&nvDash;\":                          true,\n\t\"&nvHarr;\":                          true,\n\t\"&nvap;\":                            true,\n\t\"&nvdash;\":                          true,\n\t\"&nvge;\":                            true,\n\t\"&nvgt;\":                            true,\n\t\"&nvinfin;\":                         true,\n\t\"&nvlArr;\":                          true,\n\t\"&nvle;\":                            true,\n\t\"&nvlt;\":                            true,\n\t\"&nvltrie;\":                         true,\n\t\"&nvrArr;\":                          true,\n\t\"&nvrtrie;\":                         true,\n\t\"&nvsim;\":                           true,\n\t\"&nwArr;\":                           true,\n\t\"&nwarhk;\":                          true,\n\t\"&nwarr;\":                           true,\n\t\"&nwarrow;\":                         true,\n\t\"&nwnear;\":                          true,\n\t\"&oS;\":                              true,\n\t\"&oacute\":                           true,\n\t\"&oacute;\":                          true,\n\t\"&oast;\":                            true,\n\t\"&ocir;\":                            true,\n\t\"&ocirc\":                            true,\n\t\"&ocirc;\":                           true,\n\t\"&ocy;\":                             true,\n\t\"&odash;\":                           true,\n\t\"&odblac;\":                          true,\n\t\"&odiv;\":                            true,\n\t\"&odot;\":                            true,\n\t\"&odsold;\":                          true,\n\t\"&oelig;\":                           true,\n\t\"&ofcir;\":                           true,\n\t\"&ofr;\":                             true,\n\t\"&ogon;\":                            true,\n\t\"&ograve\":                           true,\n\t\"&ograve;\":                          true,\n\t\"&ogt;\":                             true,\n\t\"&ohbar;\":                           true,\n\t\"&ohm;\":                             true,\n\t\"&oint;\":                            true,\n\t\"&olarr;\":                           true,\n\t\"&olcir;\":                           true,\n\t\"&olcross;\":                         true,\n\t\"&oline;\":                           true,\n\t\"&olt;\":                             true,\n\t\"&omacr;\":                           true,\n\t\"&omega;\":                           true,\n\t\"&omicron;\":                         true,\n\t\"&omid;\":                            true,\n\t\"&ominus;\":                          true,\n\t\"&oopf;\":                            true,\n\t\"&opar;\":                            true,\n\t\"&operp;\":                           true,\n\t\"&oplus;\":                           true,\n\t\"&or;\":                              true,\n\t\"&orarr;\":                           true,\n\t\"&ord;\":                             true,\n\t\"&order;\":                           true,\n\t\"&orderof;\":                         true,\n\t\"&ordf\":                             true,\n\t\"&ordf;\":                            true,\n\t\"&ordm\":                             true,\n\t\"&ordm;\":                            true,\n\t\"&origof;\":                          true,\n\t\"&oror;\":                            true,\n\t\"&orslope;\":                         true,\n\t\"&orv;\":                             true,\n\t\"&oscr;\":                            true,\n\t\"&oslash\":                           true,\n\t\"&oslash;\":                          true,\n\t\"&osol;\":                            true,\n\t\"&otilde\":                           true,\n\t\"&otilde;\":                          true,\n\t\"&otimes;\":                          true,\n\t\"&otimesas;\":                        true,\n\t\"&ouml\":                             true,\n\t\"&ouml;\":                            true,\n\t\"&ovbar;\":                           true,\n\t\"&par;\":                             true,\n\t\"&para\":                             true,\n\t\"&para;\":                            true,\n\t\"&parallel;\":                        true,\n\t\"&parsim;\":                          true,\n\t\"&parsl;\":                           true,\n\t\"&part;\":                            true,\n\t\"&pcy;\":                             true,\n\t\"&percnt;\":                          true,\n\t\"&period;\":                          true,\n\t\"&permil;\":                          true,\n\t\"&perp;\":                            true,\n\t\"&pertenk;\":                         true,\n\t\"&pfr;\":                             true,\n\t\"&phi;\":                             true,\n\t\"&phiv;\":                            true,\n\t\"&phmmat;\":                          true,\n\t\"&phone;\":                           true,\n\t\"&pi;\":                              true,\n\t\"&pitchfork;\":                       true,\n\t\"&piv;\":                             true,\n\t\"&planck;\":                          true,\n\t\"&planckh;\":                         true,\n\t\"&plankv;\":                          true,\n\t\"&plus;\":                            true,\n\t\"&plusacir;\":                        true,\n\t\"&plusb;\":                           true,\n\t\"&pluscir;\":                         true,\n\t\"&plusdo;\":                          true,\n\t\"&plusdu;\":                          true,\n\t\"&pluse;\":                           true,\n\t\"&plusmn\":                           true,\n\t\"&plusmn;\":                          true,\n\t\"&plussim;\":                         true,\n\t\"&plustwo;\":                         true,\n\t\"&pm;\":                              true,\n\t\"&pointint;\":                        true,\n\t\"&popf;\":                            true,\n\t\"&pound\":                            true,\n\t\"&pound;\":                           true,\n\t\"&pr;\":                              true,\n\t\"&prE;\":                             true,\n\t\"&prap;\":                            true,\n\t\"&prcue;\":                           true,\n\t\"&pre;\":                             true,\n\t\"&prec;\":                            true,\n\t\"&precapprox;\":                      true,\n\t\"&preccurlyeq;\":                     true,\n\t\"&preceq;\":                          true,\n\t\"&precnapprox;\":                     true,\n\t\"&precneqq;\":                        true,\n\t\"&precnsim;\":                        true,\n\t\"&precsim;\":                         true,\n\t\"&prime;\":                           true,\n\t\"&primes;\":                          true,\n\t\"&prnE;\":                            true,\n\t\"&prnap;\":                           true,\n\t\"&prnsim;\":                          true,\n\t\"&prod;\":                            true,\n\t\"&profalar;\":                        true,\n\t\"&profline;\":                        true,\n\t\"&profsurf;\":                        true,\n\t\"&prop;\":                            true,\n\t\"&propto;\":                          true,\n\t\"&prsim;\":                           true,\n\t\"&prurel;\":                          true,\n\t\"&pscr;\":                            true,\n\t\"&psi;\":                             true,\n\t\"&puncsp;\":                          true,\n\t\"&qfr;\":                             true,\n\t\"&qint;\":                            true,\n\t\"&qopf;\":                            true,\n\t\"&qprime;\":                          true,\n\t\"&qscr;\":                            true,\n\t\"&quaternions;\":                     true,\n\t\"&quatint;\":                         true,\n\t\"&quest;\":                           true,\n\t\"&questeq;\":                         true,\n\t\"&quot\":                             true,\n\t\"&quot;\":                            true,\n\t\"&rAarr;\":                           true,\n\t\"&rArr;\":                            true,\n\t\"&rAtail;\":                          true,\n\t\"&rBarr;\":                           true,\n\t\"&rHar;\":                            true,\n\t\"&race;\":                            true,\n\t\"&racute;\":                          true,\n\t\"&radic;\":                           true,\n\t\"&raemptyv;\":                        true,\n\t\"&rang;\":                            true,\n\t\"&rangd;\":                           true,\n\t\"&range;\":                           true,\n\t\"&rangle;\":                          true,\n\t\"&raquo\":                            true,\n\t\"&raquo;\":                           true,\n\t\"&rarr;\":                            true,\n\t\"&rarrap;\":                          true,\n\t\"&rarrb;\":                           true,\n\t\"&rarrbfs;\":                         true,\n\t\"&rarrc;\":                           true,\n\t\"&rarrfs;\":                          true,\n\t\"&rarrhk;\":                          true,\n\t\"&rarrlp;\":                          true,\n\t\"&rarrpl;\":                          true,\n\t\"&rarrsim;\":                         true,\n\t\"&rarrtl;\":                          true,\n\t\"&rarrw;\":                           true,\n\t\"&ratail;\":                          true,\n\t\"&ratio;\":                           true,\n\t\"&rationals;\":                       true,\n\t\"&rbarr;\":                           true,\n\t\"&rbbrk;\":                           true,\n\t\"&rbrace;\":                          true,\n\t\"&rbrack;\":                          true,\n\t\"&rbrke;\":                           true,\n\t\"&rbrksld;\":                         true,\n\t\"&rbrkslu;\":                         true,\n\t\"&rcaron;\":                          true,\n\t\"&rcedil;\":                          true,\n\t\"&rceil;\":                           true,\n\t\"&rcub;\":                            true,\n\t\"&rcy;\":                             true,\n\t\"&rdca;\":                            true,\n\t\"&rdldhar;\":                         true,\n\t\"&rdquo;\":                           true,\n\t\"&rdquor;\":                          true,\n\t\"&rdsh;\":                            true,\n\t\"&real;\":                            true,\n\t\"&realine;\":                         true,\n\t\"&realpart;\":                        true,\n\t\"&reals;\":                           true,\n\t\"&rect;\":                            true,\n\t\"&reg\":                              true,\n\t\"&reg;\":                             true,\n\t\"&rfisht;\":                          true,\n\t\"&rfloor;\":                          true,\n\t\"&rfr;\":                             true,\n\t\"&rhard;\":                           true,\n\t\"&rharu;\":                           true,\n\t\"&rharul;\":                          true,\n\t\"&rho;\":                             true,\n\t\"&rhov;\":                            true,\n\t\"&rightarrow;\":                      true,\n\t\"&rightarrowtail;\":                  true,\n\t\"&rightharpoondown;\":                true,\n\t\"&rightharpoonup;\":                  true,\n\t\"&rightleftarrows;\":                 true,\n\t\"&rightleftharpoons;\":               true,\n\t\"&rightrightarrows;\":                true,\n\t\"&rightsquigarrow;\":                 true,\n\t\"&rightthreetimes;\":                 true,\n\t\"&ring;\":                            true,\n\t\"&risingdotseq;\":                    true,\n\t\"&rlarr;\":                           true,\n\t\"&rlhar;\":                           true,\n\t\"&rlm;\":                             true,\n\t\"&rmoust;\":                          true,\n\t\"&rmoustache;\":                      true,\n\t\"&rnmid;\":                           true,\n\t\"&roang;\":                           true,\n\t\"&roarr;\":                           true,\n\t\"&robrk;\":                           true,\n\t\"&ropar;\":                           true,\n\t\"&ropf;\":                            true,\n\t\"&roplus;\":                          true,\n\t\"&rotimes;\":                         true,\n\t\"&rpar;\":                            true,\n\t\"&rpargt;\":                          true,\n\t\"&rppolint;\":                        true,\n\t\"&rrarr;\":                           true,\n\t\"&rsaquo;\":                          true,\n\t\"&rscr;\":                            true,\n\t\"&rsh;\":                             true,\n\t\"&rsqb;\":                            true,\n\t\"&rsquo;\":                           true,\n\t\"&rsquor;\":                          true,\n\t\"&rthree;\":                          true,\n\t\"&rtimes;\":                          true,\n\t\"&rtri;\":                            true,\n\t\"&rtrie;\":                           true,\n\t\"&rtrif;\":                           true,\n\t\"&rtriltri;\":                        true,\n\t\"&ruluhar;\":                         true,\n\t\"&rx;\":                              true,\n\t\"&sacute;\":                          true,\n\t\"&sbquo;\":                           true,\n\t\"&sc;\":                              true,\n\t\"&scE;\":                             true,\n\t\"&scap;\":                            true,\n\t\"&scaron;\":                          true,\n\t\"&sccue;\":                           true,\n\t\"&sce;\":                             true,\n\t\"&scedil;\":                          true,\n\t\"&scirc;\":                           true,\n\t\"&scnE;\":                            true,\n\t\"&scnap;\":                           true,\n\t\"&scnsim;\":                          true,\n\t\"&scpolint;\":                        true,\n\t\"&scsim;\":                           true,\n\t\"&scy;\":                             true,\n\t\"&sdot;\":                            true,\n\t\"&sdotb;\":                           true,\n\t\"&sdote;\":                           true,\n\t\"&seArr;\":                           true,\n\t\"&searhk;\":                          true,\n\t\"&searr;\":                           true,\n\t\"&searrow;\":                         true,\n\t\"&sect\":                             true,\n\t\"&sect;\":                            true,\n\t\"&semi;\":                            true,\n\t\"&seswar;\":                          true,\n\t\"&setminus;\":                        true,\n\t\"&setmn;\":                           true,\n\t\"&sext;\":                            true,\n\t\"&sfr;\":                             true,\n\t\"&sfrown;\":                          true,\n\t\"&sharp;\":                           true,\n\t\"&shchcy;\":                          true,\n\t\"&shcy;\":                            true,\n\t\"&shortmid;\":                        true,\n\t\"&shortparallel;\":                   true,\n\t\"&shy\":                              true,\n\t\"&shy;\":                             true,\n\t\"&sigma;\":                           true,\n\t\"&sigmaf;\":                          true,\n\t\"&sigmav;\":                          true,\n\t\"&sim;\":                             true,\n\t\"&simdot;\":                          true,\n\t\"&sime;\":                            true,\n\t\"&simeq;\":                           true,\n\t\"&simg;\":                            true,\n\t\"&simgE;\":                           true,\n\t\"&siml;\":                            true,\n\t\"&simlE;\":                           true,\n\t\"&simne;\":                           true,\n\t\"&simplus;\":                         true,\n\t\"&simrarr;\":                         true,\n\t\"&slarr;\":                           true,\n\t\"&smallsetminus;\":                   true,\n\t\"&smashp;\":                          true,\n\t\"&smeparsl;\":                        true,\n\t\"&smid;\":                            true,\n\t\"&smile;\":                           true,\n\t\"&smt;\":                             true,\n\t\"&smte;\":                            true,\n\t\"&smtes;\":                           true,\n\t\"&softcy;\":                          true,\n\t\"&sol;\":                             true,\n\t\"&solb;\":                            true,\n\t\"&solbar;\":                          true,\n\t\"&sopf;\":                            true,\n\t\"&spades;\":                          true,\n\t\"&spadesuit;\":                       true,\n\t\"&spar;\":                            true,\n\t\"&sqcap;\":                           true,\n\t\"&sqcaps;\":                          true,\n\t\"&sqcup;\":                           true,\n\t\"&sqcups;\":                          true,\n\t\"&sqsub;\":                           true,\n\t\"&sqsube;\":                          true,\n\t\"&sqsubset;\":                        true,\n\t\"&sqsubseteq;\":                      true,\n\t\"&sqsup;\":                           true,\n\t\"&sqsupe;\":                          true,\n\t\"&sqsupset;\":                        true,\n\t\"&sqsupseteq;\":                      true,\n\t\"&squ;\":                             true,\n\t\"&square;\":                          true,\n\t\"&squarf;\":                          true,\n\t\"&squf;\":                            true,\n\t\"&srarr;\":                           true,\n\t\"&sscr;\":                            true,\n\t\"&ssetmn;\":                          true,\n\t\"&ssmile;\":                          true,\n\t\"&sstarf;\":                          true,\n\t\"&star;\":                            true,\n\t\"&starf;\":                           true,\n\t\"&straightepsilon;\":                 true,\n\t\"&straightphi;\":                     true,\n\t\"&strns;\":                           true,\n\t\"&sub;\":                             true,\n\t\"&subE;\":                            true,\n\t\"&subdot;\":                          true,\n\t\"&sube;\":                            true,\n\t\"&subedot;\":                         true,\n\t\"&submult;\":                         true,\n\t\"&subnE;\":                           true,\n\t\"&subne;\":                           true,\n\t\"&subplus;\":                         true,\n\t\"&subrarr;\":                         true,\n\t\"&subset;\":                          true,\n\t\"&subseteq;\":                        true,\n\t\"&subseteqq;\":                       true,\n\t\"&subsetneq;\":                       true,\n\t\"&subsetneqq;\":                      true,\n\t\"&subsim;\":                          true,\n\t\"&subsub;\":                          true,\n\t\"&subsup;\":                          true,\n\t\"&succ;\":                            true,\n\t\"&succapprox;\":                      true,\n\t\"&succcurlyeq;\":                     true,\n\t\"&succeq;\":                          true,\n\t\"&succnapprox;\":                     true,\n\t\"&succneqq;\":                        true,\n\t\"&succnsim;\":                        true,\n\t\"&succsim;\":                         true,\n\t\"&sum;\":                             true,\n\t\"&sung;\":                            true,\n\t\"&sup1\":                             true,\n\t\"&sup1;\":                            true,\n\t\"&sup2\":                             true,\n\t\"&sup2;\":                            true,\n\t\"&sup3\":                             true,\n\t\"&sup3;\":                            true,\n\t\"&sup;\":                             true,\n\t\"&supE;\":                            true,\n\t\"&supdot;\":                          true,\n\t\"&supdsub;\":                         true,\n\t\"&supe;\":                            true,\n\t\"&supedot;\":                         true,\n\t\"&suphsol;\":                         true,\n\t\"&suphsub;\":                         true,\n\t\"&suplarr;\":                         true,\n\t\"&supmult;\":                         true,\n\t\"&supnE;\":                           true,\n\t\"&supne;\":                           true,\n\t\"&supplus;\":                         true,\n\t\"&supset;\":                          true,\n\t\"&supseteq;\":                        true,\n\t\"&supseteqq;\":                       true,\n\t\"&supsetneq;\":                       true,\n\t\"&supsetneqq;\":                      true,\n\t\"&supsim;\":                          true,\n\t\"&supsub;\":                          true,\n\t\"&supsup;\":                          true,\n\t\"&swArr;\":                           true,\n\t\"&swarhk;\":                          true,\n\t\"&swarr;\":                           true,\n\t\"&swarrow;\":                         true,\n\t\"&swnwar;\":                          true,\n\t\"&szlig\":                            true,\n\t\"&szlig;\":                           true,\n\t\"&target;\":                          true,\n\t\"&tau;\":                             true,\n\t\"&tbrk;\":                            true,\n\t\"&tcaron;\":                          true,\n\t\"&tcedil;\":                          true,\n\t\"&tcy;\":                             true,\n\t\"&tdot;\":                            true,\n\t\"&telrec;\":                          true,\n\t\"&tfr;\":                             true,\n\t\"&there4;\":                          true,\n\t\"&therefore;\":                       true,\n\t\"&theta;\":                           true,\n\t\"&thetasym;\":                        true,\n\t\"&thetav;\":                          true,\n\t\"&thickapprox;\":                     true,\n\t\"&thicksim;\":                        true,\n\t\"&thinsp;\":                          true,\n\t\"&thkap;\":                           true,\n\t\"&thksim;\":                          true,\n\t\"&thorn\":                            true,\n\t\"&thorn;\":                           true,\n\t\"&tilde;\":                           true,\n\t\"&times\":                            true,\n\t\"&times;\":                           true,\n\t\"&timesb;\":                          true,\n\t\"&timesbar;\":                        true,\n\t\"&timesd;\":                          true,\n\t\"&tint;\":                            true,\n\t\"&toea;\":                            true,\n\t\"&top;\":                             true,\n\t\"&topbot;\":                          true,\n\t\"&topcir;\":                          true,\n\t\"&topf;\":                            true,\n\t\"&topfork;\":                         true,\n\t\"&tosa;\":                            true,\n\t\"&tprime;\":                          true,\n\t\"&trade;\":                           true,\n\t\"&triangle;\":                        true,\n\t\"&triangledown;\":                    true,\n\t\"&triangleleft;\":                    true,\n\t\"&trianglelefteq;\":                  true,\n\t\"&triangleq;\":                       true,\n\t\"&triangleright;\":                   true,\n\t\"&trianglerighteq;\":                 true,\n\t\"&tridot;\":                          true,\n\t\"&trie;\":                            true,\n\t\"&triminus;\":                        true,\n\t\"&triplus;\":                         true,\n\t\"&trisb;\":                           true,\n\t\"&tritime;\":                         true,\n\t\"&trpezium;\":                        true,\n\t\"&tscr;\":                            true,\n\t\"&tscy;\":                            true,\n\t\"&tshcy;\":                           true,\n\t\"&tstrok;\":                          true,\n\t\"&twixt;\":                           true,\n\t\"&twoheadleftarrow;\":                true,\n\t\"&twoheadrightarrow;\":               true,\n\t\"&uArr;\":                            true,\n\t\"&uHar;\":                            true,\n\t\"&uacute\":                           true,\n\t\"&uacute;\":                          true,\n\t\"&uarr;\":                            true,\n\t\"&ubrcy;\":                           true,\n\t\"&ubreve;\":                          true,\n\t\"&ucirc\":                            true,\n\t\"&ucirc;\":                           true,\n\t\"&ucy;\":                             true,\n\t\"&udarr;\":                           true,\n\t\"&udblac;\":                          true,\n\t\"&udhar;\":                           true,\n\t\"&ufisht;\":                          true,\n\t\"&ufr;\":                             true,\n\t\"&ugrave\":                           true,\n\t\"&ugrave;\":                          true,\n\t\"&uharl;\":                           true,\n\t\"&uharr;\":                           true,\n\t\"&uhblk;\":                           true,\n\t\"&ulcorn;\":                          true,\n\t\"&ulcorner;\":                        true,\n\t\"&ulcrop;\":                          true,\n\t\"&ultri;\":                           true,\n\t\"&umacr;\":                           true,\n\t\"&uml\":                              true,\n\t\"&uml;\":                             true,\n\t\"&uogon;\":                           true,\n\t\"&uopf;\":                            true,\n\t\"&uparrow;\":                         true,\n\t\"&updownarrow;\":                     true,\n\t\"&upharpoonleft;\":                   true,\n\t\"&upharpoonright;\":                  true,\n\t\"&uplus;\":                           true,\n\t\"&upsi;\":                            true,\n\t\"&upsih;\":                           true,\n\t\"&upsilon;\":                         true,\n\t\"&upuparrows;\":                      true,\n\t\"&urcorn;\":                          true,\n\t\"&urcorner;\":                        true,\n\t\"&urcrop;\":                          true,\n\t\"&uring;\":                           true,\n\t\"&urtri;\":                           true,\n\t\"&uscr;\":                            true,\n\t\"&utdot;\":                           true,\n\t\"&utilde;\":                          true,\n\t\"&utri;\":                            true,\n\t\"&utrif;\":                           true,\n\t\"&uuarr;\":                           true,\n\t\"&uuml\":                             true,\n\t\"&uuml;\":                            true,\n\t\"&uwangle;\":                         true,\n\t\"&vArr;\":                            true,\n\t\"&vBar;\":                            true,\n\t\"&vBarv;\":                           true,\n\t\"&vDash;\":                           true,\n\t\"&vangrt;\":                          true,\n\t\"&varepsilon;\":                      true,\n\t\"&varkappa;\":                        true,\n\t\"&varnothing;\":                      true,\n\t\"&varphi;\":                          true,\n\t\"&varpi;\":                           true,\n\t\"&varpropto;\":                       true,\n\t\"&varr;\":                            true,\n\t\"&varrho;\":                          true,\n\t\"&varsigma;\":                        true,\n\t\"&varsubsetneq;\":                    true,\n\t\"&varsubsetneqq;\":                   true,\n\t\"&varsupsetneq;\":                    true,\n\t\"&varsupsetneqq;\":                   true,\n\t\"&vartheta;\":                        true,\n\t\"&vartriangleleft;\":                 true,\n\t\"&vartriangleright;\":                true,\n\t\"&vcy;\":                             true,\n\t\"&vdash;\":                           true,\n\t\"&vee;\":                             true,\n\t\"&veebar;\":                          true,\n\t\"&veeeq;\":                           true,\n\t\"&vellip;\":                          true,\n\t\"&verbar;\":                          true,\n\t\"&vert;\":                            true,\n\t\"&vfr;\":                             true,\n\t\"&vltri;\":                           true,\n\t\"&vnsub;\":                           true,\n\t\"&vnsup;\":                           true,\n\t\"&vopf;\":                            true,\n\t\"&vprop;\":                           true,\n\t\"&vrtri;\":                           true,\n\t\"&vscr;\":                            true,\n\t\"&vsubnE;\":                          true,\n\t\"&vsubne;\":                          true,\n\t\"&vsupnE;\":                          true,\n\t\"&vsupne;\":                          true,\n\t\"&vzigzag;\":                         true,\n\t\"&wcirc;\":                           true,\n\t\"&wedbar;\":                          true,\n\t\"&wedge;\":                           true,\n\t\"&wedgeq;\":                          true,\n\t\"&weierp;\":                          true,\n\t\"&wfr;\":                             true,\n\t\"&wopf;\":                            true,\n\t\"&wp;\":                              true,\n\t\"&wr;\":                              true,\n\t\"&wreath;\":                          true,\n\t\"&wscr;\":                            true,\n\t\"&xcap;\":                            true,\n\t\"&xcirc;\":                           true,\n\t\"&xcup;\":                            true,\n\t\"&xdtri;\":                           true,\n\t\"&xfr;\":                             true,\n\t\"&xhArr;\":                           true,\n\t\"&xharr;\":                           true,\n\t\"&xi;\":                              true,\n\t\"&xlArr;\":                           true,\n\t\"&xlarr;\":                           true,\n\t\"&xmap;\":                            true,\n\t\"&xnis;\":                            true,\n\t\"&xodot;\":                           true,\n\t\"&xopf;\":                            true,\n\t\"&xoplus;\":                          true,\n\t\"&xotime;\":                          true,\n\t\"&xrArr;\":                           true,\n\t\"&xrarr;\":                           true,\n\t\"&xscr;\":                            true,\n\t\"&xsqcup;\":                          true,\n\t\"&xuplus;\":                          true,\n\t\"&xutri;\":                           true,\n\t\"&xvee;\":                            true,\n\t\"&xwedge;\":                          true,\n\t\"&yacute\":                           true,\n\t\"&yacute;\":                          true,\n\t\"&yacy;\":                            true,\n\t\"&ycirc;\":                           true,\n\t\"&ycy;\":                             true,\n\t\"&yen\":                              true,\n\t\"&yen;\":                             true,\n\t\"&yfr;\":                             true,\n\t\"&yicy;\":                            true,\n\t\"&yopf;\":                            true,\n\t\"&yscr;\":                            true,\n\t\"&yucy;\":                            true,\n\t\"&yuml\":                             true,\n\t\"&yuml;\":                            true,\n\t\"&zacute;\":                          true,\n\t\"&zcaron;\":                          true,\n\t\"&zcy;\":                             true,\n\t\"&zdot;\":                            true,\n\t\"&zeetrf;\":                          true,\n\t\"&zeta;\":                            true,\n\t\"&zfr;\":                             true,\n\t\"&zhcy;\":                            true,\n\t\"&zigrarr;\":                         true,\n\t\"&zopf;\":                            true,\n\t\"&zscr;\":                            true,\n\t\"&zwj;\":                             true,\n\t\"&zwnj;\":                            true,\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/esc.go",
    "content": "package blackfriday\n\nimport (\n\t\"html\"\n\t\"io\"\n)\n\nvar htmlEscaper = [256][]byte{\n\t'&': []byte(\"&amp;\"),\n\t'<': []byte(\"&lt;\"),\n\t'>': []byte(\"&gt;\"),\n\t'\"': []byte(\"&quot;\"),\n}\n\nfunc escapeHTML(w io.Writer, s []byte) {\n\tescapeEntities(w, s, false)\n}\n\nfunc escapeAllHTML(w io.Writer, s []byte) {\n\tescapeEntities(w, s, true)\n}\n\nfunc escapeEntities(w io.Writer, s []byte, escapeValidEntities bool) {\n\tvar start, end int\n\tfor end < len(s) {\n\t\tescSeq := htmlEscaper[s[end]]\n\t\tif escSeq != nil {\n\t\t\tisEntity, entityEnd := nodeIsEntity(s, end)\n\t\t\tif isEntity && !escapeValidEntities {\n\t\t\t\tw.Write(s[start : entityEnd+1])\n\t\t\t\tstart = entityEnd + 1\n\t\t\t} else {\n\t\t\t\tw.Write(s[start:end])\n\t\t\t\tw.Write(escSeq)\n\t\t\t\tstart = end + 1\n\t\t\t}\n\t\t}\n\t\tend++\n\t}\n\tif start < len(s) && end <= len(s) {\n\t\tw.Write(s[start:end])\n\t}\n}\n\nfunc nodeIsEntity(s []byte, end int) (isEntity bool, endEntityPos int) {\n\tisEntity = false\n\tendEntityPos = end + 1\n\n\tif s[end] == '&' {\n\t\tfor endEntityPos < len(s) {\n\t\t\tif s[endEntityPos] == ';' {\n\t\t\t\tif entities[string(s[end:endEntityPos+1])] {\n\t\t\t\t\tisEntity = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !isalnum(s[endEntityPos]) && s[endEntityPos] != '&' && s[endEntityPos] != '#' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tendEntityPos++\n\t\t}\n\t}\n\n\treturn isEntity, endEntityPos\n}\n\nfunc escLink(w io.Writer, text []byte) {\n\tunesc := html.UnescapeString(string(text))\n\tescapeHTML(w, []byte(unesc))\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/html.go",
    "content": "//\n// Blackfriday Markdown Processor\n// Available at http://github.com/russross/blackfriday\n//\n// Copyright © 2011 Russ Ross <russ@russross.com>.\n// Distributed under the Simplified BSD License.\n// See README.md for details.\n//\n\n//\n//\n// HTML rendering backend\n//\n//\n\npackage blackfriday\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"regexp\"\n\t\"strings\"\n)\n\n// HTMLFlags control optional behavior of HTML renderer.\ntype HTMLFlags int\n\n// HTML renderer configuration options.\nconst (\n\tHTMLFlagsNone           HTMLFlags = 0\n\tSkipHTML                HTMLFlags = 1 << iota // Skip preformatted HTML blocks\n\tSkipImages                                    // Skip embedded images\n\tSkipLinks                                     // Skip all links\n\tSafelink                                      // Only link to trusted protocols\n\tNofollowLinks                                 // Only link with rel=\"nofollow\"\n\tNoreferrerLinks                               // Only link with rel=\"noreferrer\"\n\tNoopenerLinks                                 // Only link with rel=\"noopener\"\n\tHrefTargetBlank                               // Add a blank target\n\tCompletePage                                  // Generate a complete HTML page\n\tUseXHTML                                      // Generate XHTML output instead of HTML\n\tFootnoteReturnLinks                           // Generate a link at the end of a footnote to return to the source\n\tSmartypants                                   // Enable smart punctuation substitutions\n\tSmartypantsFractions                          // Enable smart fractions (with Smartypants)\n\tSmartypantsDashes                             // Enable smart dashes (with Smartypants)\n\tSmartypantsLatexDashes                        // Enable LaTeX-style dashes (with Smartypants)\n\tSmartypantsAngledQuotes                       // Enable angled double quotes (with Smartypants) for double quotes rendering\n\tSmartypantsQuotesNBSP                         // Enable « French guillemets » (with Smartypants)\n\tTOC                                           // Generate a table of contents\n)\n\nvar (\n\thtmlTagRe = regexp.MustCompile(\"(?i)^\" + htmlTag)\n)\n\nconst (\n\thtmlTag = \"(?:\" + openTag + \"|\" + closeTag + \"|\" + htmlComment + \"|\" +\n\t\tprocessingInstruction + \"|\" + declaration + \"|\" + cdata + \")\"\n\tcloseTag              = \"</\" + tagName + \"\\\\s*[>]\"\n\topenTag               = \"<\" + tagName + attribute + \"*\" + \"\\\\s*/?>\"\n\tattribute             = \"(?:\" + \"\\\\s+\" + attributeName + attributeValueSpec + \"?)\"\n\tattributeValue        = \"(?:\" + unquotedValue + \"|\" + singleQuotedValue + \"|\" + doubleQuotedValue + \")\"\n\tattributeValueSpec    = \"(?:\" + \"\\\\s*=\" + \"\\\\s*\" + attributeValue + \")\"\n\tattributeName         = \"[a-zA-Z_:][a-zA-Z0-9:._-]*\"\n\tcdata                 = \"<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\"\n\tdeclaration           = \"<![A-Z]+\" + \"\\\\s+[^>]*>\"\n\tdoubleQuotedValue     = \"\\\"[^\\\"]*\\\"\"\n\thtmlComment           = \"<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->\"\n\tprocessingInstruction = \"[<][?].*?[?][>]\"\n\tsingleQuotedValue     = \"'[^']*'\"\n\ttagName               = \"[A-Za-z][A-Za-z0-9-]*\"\n\tunquotedValue         = \"[^\\\"'=<>`\\\\x00-\\\\x20]+\"\n)\n\n// HTMLRendererParameters is a collection of supplementary parameters tweaking\n// the behavior of various parts of HTML renderer.\ntype HTMLRendererParameters struct {\n\t// Prepend this text to each relative URL.\n\tAbsolutePrefix string\n\t// Add this text to each footnote anchor, to ensure uniqueness.\n\tFootnoteAnchorPrefix string\n\t// Show this text inside the <a> tag for a footnote return link, if the\n\t// HTML_FOOTNOTE_RETURN_LINKS flag is enabled. If blank, the string\n\t// <sup>[return]</sup> is used.\n\tFootnoteReturnLinkContents string\n\t// If set, add this text to the front of each Heading ID, to ensure\n\t// uniqueness.\n\tHeadingIDPrefix string\n\t// If set, add this text to the back of each Heading ID, to ensure uniqueness.\n\tHeadingIDSuffix string\n\t// Increase heading levels: if the offset is 1, <h1> becomes <h2> etc.\n\t// Negative offset is also valid.\n\t// Resulting levels are clipped between 1 and 6.\n\tHeadingLevelOffset int\n\n\tTitle string // Document title (used if CompletePage is set)\n\tCSS   string // Optional CSS file URL (used if CompletePage is set)\n\tIcon  string // Optional icon file URL (used if CompletePage is set)\n\n\tFlags HTMLFlags // Flags allow customizing this renderer's behavior\n}\n\n// HTMLRenderer is a type that implements the Renderer interface for HTML output.\n//\n// Do not create this directly, instead use the NewHTMLRenderer function.\ntype HTMLRenderer struct {\n\tHTMLRendererParameters\n\n\tcloseTag string // how to end singleton tags: either \" />\" or \">\"\n\n\t// Track heading IDs to prevent ID collision in a single generation.\n\theadingIDs map[string]int\n\n\tlastOutputLen int\n\tdisableTags   int\n\n\tsr *SPRenderer\n}\n\nconst (\n\txhtmlClose = \" />\"\n\thtmlClose  = \">\"\n)\n\n// NewHTMLRenderer creates and configures an HTMLRenderer object, which\n// satisfies the Renderer interface.\nfunc NewHTMLRenderer(params HTMLRendererParameters) *HTMLRenderer {\n\t// configure the rendering engine\n\tcloseTag := htmlClose\n\tif params.Flags&UseXHTML != 0 {\n\t\tcloseTag = xhtmlClose\n\t}\n\n\tif params.FootnoteReturnLinkContents == \"\" {\n\t\t// U+FE0E is VARIATION SELECTOR-15.\n\t\t// It suppresses automatic emoji presentation of the preceding\n\t\t// U+21A9 LEFTWARDS ARROW WITH HOOK on iOS and iPadOS.\n\t\tparams.FootnoteReturnLinkContents = \"<span aria-label='Return'>↩\\ufe0e</span>\"\n\t}\n\n\treturn &HTMLRenderer{\n\t\tHTMLRendererParameters: params,\n\n\t\tcloseTag:   closeTag,\n\t\theadingIDs: make(map[string]int),\n\n\t\tsr: NewSmartypantsRenderer(params.Flags),\n\t}\n}\n\nfunc isHTMLTag(tag []byte, tagname string) bool {\n\tfound, _ := findHTMLTagPos(tag, tagname)\n\treturn found\n}\n\n// Look for a character, but ignore it when it's in any kind of quotes, it\n// might be JavaScript\nfunc skipUntilCharIgnoreQuotes(html []byte, start int, char byte) int {\n\tinSingleQuote := false\n\tinDoubleQuote := false\n\tinGraveQuote := false\n\ti := start\n\tfor i < len(html) {\n\t\tswitch {\n\t\tcase html[i] == char && !inSingleQuote && !inDoubleQuote && !inGraveQuote:\n\t\t\treturn i\n\t\tcase html[i] == '\\'':\n\t\t\tinSingleQuote = !inSingleQuote\n\t\tcase html[i] == '\"':\n\t\t\tinDoubleQuote = !inDoubleQuote\n\t\tcase html[i] == '`':\n\t\t\tinGraveQuote = !inGraveQuote\n\t\t}\n\t\ti++\n\t}\n\treturn start\n}\n\nfunc findHTMLTagPos(tag []byte, tagname string) (bool, int) {\n\ti := 0\n\tif i < len(tag) && tag[0] != '<' {\n\t\treturn false, -1\n\t}\n\ti++\n\ti = skipSpace(tag, i)\n\n\tif i < len(tag) && tag[i] == '/' {\n\t\ti++\n\t}\n\n\ti = skipSpace(tag, i)\n\tj := 0\n\tfor ; i < len(tag); i, j = i+1, j+1 {\n\t\tif j >= len(tagname) {\n\t\t\tbreak\n\t\t}\n\n\t\tif strings.ToLower(string(tag[i]))[0] != tagname[j] {\n\t\t\treturn false, -1\n\t\t}\n\t}\n\n\tif i == len(tag) {\n\t\treturn false, -1\n\t}\n\n\trightAngle := skipUntilCharIgnoreQuotes(tag, i, '>')\n\tif rightAngle >= i {\n\t\treturn true, rightAngle\n\t}\n\n\treturn false, -1\n}\n\nfunc skipSpace(tag []byte, i int) int {\n\tfor i < len(tag) && isspace(tag[i]) {\n\t\ti++\n\t}\n\treturn i\n}\n\nfunc isRelativeLink(link []byte) (yes bool) {\n\t// a tag begin with '#'\n\tif link[0] == '#' {\n\t\treturn true\n\t}\n\n\t// link begin with '/' but not '//', the second maybe a protocol relative link\n\tif len(link) >= 2 && link[0] == '/' && link[1] != '/' {\n\t\treturn true\n\t}\n\n\t// only the root '/'\n\tif len(link) == 1 && link[0] == '/' {\n\t\treturn true\n\t}\n\n\t// current directory : begin with \"./\"\n\tif bytes.HasPrefix(link, []byte(\"./\")) {\n\t\treturn true\n\t}\n\n\t// parent directory : begin with \"../\"\n\tif bytes.HasPrefix(link, []byte(\"../\")) {\n\t\treturn true\n\t}\n\n\treturn false\n}\n\nfunc (r *HTMLRenderer) ensureUniqueHeadingID(id string) string {\n\tfor count, found := r.headingIDs[id]; found; count, found = r.headingIDs[id] {\n\t\ttmp := fmt.Sprintf(\"%s-%d\", id, count+1)\n\n\t\tif _, tmpFound := r.headingIDs[tmp]; !tmpFound {\n\t\t\tr.headingIDs[id] = count + 1\n\t\t\tid = tmp\n\t\t} else {\n\t\t\tid = id + \"-1\"\n\t\t}\n\t}\n\n\tif _, found := r.headingIDs[id]; !found {\n\t\tr.headingIDs[id] = 0\n\t}\n\n\treturn id\n}\n\nfunc (r *HTMLRenderer) addAbsPrefix(link []byte) []byte {\n\tif r.AbsolutePrefix != \"\" && isRelativeLink(link) && link[0] != '.' {\n\t\tnewDest := r.AbsolutePrefix\n\t\tif link[0] != '/' {\n\t\t\tnewDest += \"/\"\n\t\t}\n\t\tnewDest += string(link)\n\t\treturn []byte(newDest)\n\t}\n\treturn link\n}\n\nfunc appendLinkAttrs(attrs []string, flags HTMLFlags, link []byte) []string {\n\tif isRelativeLink(link) {\n\t\treturn attrs\n\t}\n\tval := []string{}\n\tif flags&NofollowLinks != 0 {\n\t\tval = append(val, \"nofollow\")\n\t}\n\tif flags&NoreferrerLinks != 0 {\n\t\tval = append(val, \"noreferrer\")\n\t}\n\tif flags&NoopenerLinks != 0 {\n\t\tval = append(val, \"noopener\")\n\t}\n\tif flags&HrefTargetBlank != 0 {\n\t\tattrs = append(attrs, \"target=\\\"_blank\\\"\")\n\t}\n\tif len(val) == 0 {\n\t\treturn attrs\n\t}\n\tattr := fmt.Sprintf(\"rel=%q\", strings.Join(val, \" \"))\n\treturn append(attrs, attr)\n}\n\nfunc isMailto(link []byte) bool {\n\treturn bytes.HasPrefix(link, []byte(\"mailto:\"))\n}\n\nfunc needSkipLink(flags HTMLFlags, dest []byte) bool {\n\tif flags&SkipLinks != 0 {\n\t\treturn true\n\t}\n\treturn flags&Safelink != 0 && !isSafeLink(dest) && !isMailto(dest)\n}\n\nfunc isSmartypantable(node *Node) bool {\n\tpt := node.Parent.Type\n\treturn pt != Link && pt != CodeBlock && pt != Code\n}\n\nfunc appendLanguageAttr(attrs []string, info []byte) []string {\n\tif len(info) == 0 {\n\t\treturn attrs\n\t}\n\tendOfLang := bytes.IndexAny(info, \"\\t \")\n\tif endOfLang < 0 {\n\t\tendOfLang = len(info)\n\t}\n\treturn append(attrs, fmt.Sprintf(\"class=\\\"language-%s\\\"\", info[:endOfLang]))\n}\n\nfunc (r *HTMLRenderer) tag(w io.Writer, name []byte, attrs []string) {\n\tw.Write(name)\n\tif len(attrs) > 0 {\n\t\tw.Write(spaceBytes)\n\t\tw.Write([]byte(strings.Join(attrs, \" \")))\n\t}\n\tw.Write(gtBytes)\n\tr.lastOutputLen = 1\n}\n\nfunc footnoteRef(prefix string, node *Node) []byte {\n\turlFrag := prefix + string(slugify(node.Destination))\n\tanchor := fmt.Sprintf(`<a href=\"#fn:%s\">%d</a>`, urlFrag, node.NoteID)\n\treturn []byte(fmt.Sprintf(`<sup class=\"footnote-ref\" id=\"fnref:%s\">%s</sup>`, urlFrag, anchor))\n}\n\nfunc footnoteItem(prefix string, slug []byte) []byte {\n\treturn []byte(fmt.Sprintf(`<li id=\"fn:%s%s\">`, prefix, slug))\n}\n\nfunc footnoteReturnLink(prefix, returnLink string, slug []byte) []byte {\n\tconst format = ` <a class=\"footnote-return\" href=\"#fnref:%s%s\">%s</a>`\n\treturn []byte(fmt.Sprintf(format, prefix, slug, returnLink))\n}\n\nfunc itemOpenCR(node *Node) bool {\n\tif node.Prev == nil {\n\t\treturn false\n\t}\n\tld := node.Parent.ListData\n\treturn !ld.Tight && ld.ListFlags&ListTypeDefinition == 0\n}\n\nfunc skipParagraphTags(node *Node) bool {\n\tgrandparent := node.Parent.Parent\n\tif grandparent == nil || grandparent.Type != List {\n\t\treturn false\n\t}\n\ttightOrTerm := grandparent.Tight || node.Parent.ListFlags&ListTypeTerm != 0\n\treturn grandparent.Type == List && tightOrTerm\n}\n\nfunc cellAlignment(align CellAlignFlags) string {\n\tswitch align {\n\tcase TableAlignmentLeft:\n\t\treturn \"left\"\n\tcase TableAlignmentRight:\n\t\treturn \"right\"\n\tcase TableAlignmentCenter:\n\t\treturn \"center\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc (r *HTMLRenderer) out(w io.Writer, text []byte) {\n\tif r.disableTags > 0 {\n\t\tw.Write(htmlTagRe.ReplaceAll(text, []byte{}))\n\t} else {\n\t\tw.Write(text)\n\t}\n\tr.lastOutputLen = len(text)\n}\n\nfunc (r *HTMLRenderer) cr(w io.Writer) {\n\tif r.lastOutputLen > 0 {\n\t\tr.out(w, nlBytes)\n\t}\n}\n\nvar (\n\tnlBytes    = []byte{'\\n'}\n\tgtBytes    = []byte{'>'}\n\tspaceBytes = []byte{' '}\n)\n\nvar (\n\tbrTag              = []byte(\"<br>\")\n\tbrXHTMLTag         = []byte(\"<br />\")\n\temTag              = []byte(\"<em>\")\n\temCloseTag         = []byte(\"</em>\")\n\tstrongTag          = []byte(\"<strong>\")\n\tstrongCloseTag     = []byte(\"</strong>\")\n\tdelTag             = []byte(\"<del>\")\n\tdelCloseTag        = []byte(\"</del>\")\n\tttTag              = []byte(\"<tt>\")\n\tttCloseTag         = []byte(\"</tt>\")\n\taTag               = []byte(\"<a\")\n\taCloseTag          = []byte(\"</a>\")\n\tpreTag             = []byte(\"<pre>\")\n\tpreCloseTag        = []byte(\"</pre>\")\n\tcodeTag            = []byte(\"<code>\")\n\tcodeCloseTag       = []byte(\"</code>\")\n\tpTag               = []byte(\"<p>\")\n\tpCloseTag          = []byte(\"</p>\")\n\tblockquoteTag      = []byte(\"<blockquote>\")\n\tblockquoteCloseTag = []byte(\"</blockquote>\")\n\thrTag              = []byte(\"<hr>\")\n\thrXHTMLTag         = []byte(\"<hr />\")\n\tulTag              = []byte(\"<ul>\")\n\tulCloseTag         = []byte(\"</ul>\")\n\tolTag              = []byte(\"<ol>\")\n\tolCloseTag         = []byte(\"</ol>\")\n\tdlTag              = []byte(\"<dl>\")\n\tdlCloseTag         = []byte(\"</dl>\")\n\tliTag              = []byte(\"<li>\")\n\tliCloseTag         = []byte(\"</li>\")\n\tddTag              = []byte(\"<dd>\")\n\tddCloseTag         = []byte(\"</dd>\")\n\tdtTag              = []byte(\"<dt>\")\n\tdtCloseTag         = []byte(\"</dt>\")\n\ttableTag           = []byte(\"<table>\")\n\ttableCloseTag      = []byte(\"</table>\")\n\ttdTag              = []byte(\"<td\")\n\ttdCloseTag         = []byte(\"</td>\")\n\tthTag              = []byte(\"<th\")\n\tthCloseTag         = []byte(\"</th>\")\n\ttheadTag           = []byte(\"<thead>\")\n\ttheadCloseTag      = []byte(\"</thead>\")\n\ttbodyTag           = []byte(\"<tbody>\")\n\ttbodyCloseTag      = []byte(\"</tbody>\")\n\ttrTag              = []byte(\"<tr>\")\n\ttrCloseTag         = []byte(\"</tr>\")\n\th1Tag              = []byte(\"<h1\")\n\th1CloseTag         = []byte(\"</h1>\")\n\th2Tag              = []byte(\"<h2\")\n\th2CloseTag         = []byte(\"</h2>\")\n\th3Tag              = []byte(\"<h3\")\n\th3CloseTag         = []byte(\"</h3>\")\n\th4Tag              = []byte(\"<h4\")\n\th4CloseTag         = []byte(\"</h4>\")\n\th5Tag              = []byte(\"<h5\")\n\th5CloseTag         = []byte(\"</h5>\")\n\th6Tag              = []byte(\"<h6\")\n\th6CloseTag         = []byte(\"</h6>\")\n\n\tfootnotesDivBytes      = []byte(\"\\n<div class=\\\"footnotes\\\">\\n\\n\")\n\tfootnotesCloseDivBytes = []byte(\"\\n</div>\\n\")\n)\n\nfunc headingTagsFromLevel(level int) ([]byte, []byte) {\n\tif level <= 1 {\n\t\treturn h1Tag, h1CloseTag\n\t}\n\tswitch level {\n\tcase 2:\n\t\treturn h2Tag, h2CloseTag\n\tcase 3:\n\t\treturn h3Tag, h3CloseTag\n\tcase 4:\n\t\treturn h4Tag, h4CloseTag\n\tcase 5:\n\t\treturn h5Tag, h5CloseTag\n\t}\n\treturn h6Tag, h6CloseTag\n}\n\nfunc (r *HTMLRenderer) outHRTag(w io.Writer) {\n\tif r.Flags&UseXHTML == 0 {\n\t\tr.out(w, hrTag)\n\t} else {\n\t\tr.out(w, hrXHTMLTag)\n\t}\n}\n\n// RenderNode is a default renderer of a single node of a syntax tree. For\n// block nodes it will be called twice: first time with entering=true, second\n// time with entering=false, so that it could know when it's working on an open\n// tag and when on close. It writes the result to w.\n//\n// The return value is a way to tell the calling walker to adjust its walk\n// pattern: e.g. it can terminate the traversal by returning Terminate. Or it\n// can ask the walker to skip a subtree of this node by returning SkipChildren.\n// The typical behavior is to return GoToNext, which asks for the usual\n// traversal to the next node.\nfunc (r *HTMLRenderer) RenderNode(w io.Writer, node *Node, entering bool) WalkStatus {\n\tattrs := []string{}\n\tswitch node.Type {\n\tcase Text:\n\t\tif r.Flags&Smartypants != 0 {\n\t\t\tvar tmp bytes.Buffer\n\t\t\tescapeHTML(&tmp, node.Literal)\n\t\t\tr.sr.Process(w, tmp.Bytes())\n\t\t} else {\n\t\t\tif node.Parent.Type == Link {\n\t\t\t\tescLink(w, node.Literal)\n\t\t\t} else {\n\t\t\t\tescapeHTML(w, node.Literal)\n\t\t\t}\n\t\t}\n\tcase Softbreak:\n\t\tr.cr(w)\n\t\t// TODO: make it configurable via out(renderer.softbreak)\n\tcase Hardbreak:\n\t\tif r.Flags&UseXHTML == 0 {\n\t\t\tr.out(w, brTag)\n\t\t} else {\n\t\t\tr.out(w, brXHTMLTag)\n\t\t}\n\t\tr.cr(w)\n\tcase Emph:\n\t\tif entering {\n\t\t\tr.out(w, emTag)\n\t\t} else {\n\t\t\tr.out(w, emCloseTag)\n\t\t}\n\tcase Strong:\n\t\tif entering {\n\t\t\tr.out(w, strongTag)\n\t\t} else {\n\t\t\tr.out(w, strongCloseTag)\n\t\t}\n\tcase Del:\n\t\tif entering {\n\t\t\tr.out(w, delTag)\n\t\t} else {\n\t\t\tr.out(w, delCloseTag)\n\t\t}\n\tcase HTMLSpan:\n\t\tif r.Flags&SkipHTML != 0 {\n\t\t\tbreak\n\t\t}\n\t\tr.out(w, node.Literal)\n\tcase Link:\n\t\t// mark it but don't link it if it is not a safe link: no smartypants\n\t\tdest := node.LinkData.Destination\n\t\tif needSkipLink(r.Flags, dest) {\n\t\t\tif entering {\n\t\t\t\tr.out(w, ttTag)\n\t\t\t} else {\n\t\t\t\tr.out(w, ttCloseTag)\n\t\t\t}\n\t\t} else {\n\t\t\tif entering {\n\t\t\t\tdest = r.addAbsPrefix(dest)\n\t\t\t\tvar hrefBuf bytes.Buffer\n\t\t\t\threfBuf.WriteString(\"href=\\\"\")\n\t\t\t\tescLink(&hrefBuf, dest)\n\t\t\t\threfBuf.WriteByte('\"')\n\t\t\t\tattrs = append(attrs, hrefBuf.String())\n\t\t\t\tif node.NoteID != 0 {\n\t\t\t\t\tr.out(w, footnoteRef(r.FootnoteAnchorPrefix, node))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tattrs = appendLinkAttrs(attrs, r.Flags, dest)\n\t\t\t\tif len(node.LinkData.Title) > 0 {\n\t\t\t\t\tvar titleBuff bytes.Buffer\n\t\t\t\t\ttitleBuff.WriteString(\"title=\\\"\")\n\t\t\t\t\tescapeHTML(&titleBuff, node.LinkData.Title)\n\t\t\t\t\ttitleBuff.WriteByte('\"')\n\t\t\t\t\tattrs = append(attrs, titleBuff.String())\n\t\t\t\t}\n\t\t\t\tr.tag(w, aTag, attrs)\n\t\t\t} else {\n\t\t\t\tif node.NoteID != 0 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tr.out(w, aCloseTag)\n\t\t\t}\n\t\t}\n\tcase Image:\n\t\tif r.Flags&SkipImages != 0 {\n\t\t\treturn SkipChildren\n\t\t}\n\t\tif entering {\n\t\t\tdest := node.LinkData.Destination\n\t\t\tdest = r.addAbsPrefix(dest)\n\t\t\tif r.disableTags == 0 {\n\t\t\t\t//if options.safe && potentiallyUnsafe(dest) {\n\t\t\t\t//out(w, `<img src=\"\" alt=\"`)\n\t\t\t\t//} else {\n\t\t\t\tr.out(w, []byte(`<img src=\"`))\n\t\t\t\tescLink(w, dest)\n\t\t\t\tr.out(w, []byte(`\" alt=\"`))\n\t\t\t\t//}\n\t\t\t}\n\t\t\tr.disableTags++\n\t\t} else {\n\t\t\tr.disableTags--\n\t\t\tif r.disableTags == 0 {\n\t\t\t\tif node.LinkData.Title != nil {\n\t\t\t\t\tr.out(w, []byte(`\" title=\"`))\n\t\t\t\t\tescapeHTML(w, node.LinkData.Title)\n\t\t\t\t}\n\t\t\t\tr.out(w, []byte(`\" />`))\n\t\t\t}\n\t\t}\n\tcase Code:\n\t\tr.out(w, codeTag)\n\t\tescapeAllHTML(w, node.Literal)\n\t\tr.out(w, codeCloseTag)\n\tcase Document:\n\t\tbreak\n\tcase Paragraph:\n\t\tif skipParagraphTags(node) {\n\t\t\tbreak\n\t\t}\n\t\tif entering {\n\t\t\t// TODO: untangle this clusterfuck about when the newlines need\n\t\t\t// to be added and when not.\n\t\t\tif node.Prev != nil {\n\t\t\t\tswitch node.Prev.Type {\n\t\t\t\tcase HTMLBlock, List, Paragraph, Heading, CodeBlock, BlockQuote, HorizontalRule:\n\t\t\t\t\tr.cr(w)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif node.Parent.Type == BlockQuote && node.Prev == nil {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t\tr.out(w, pTag)\n\t\t} else {\n\t\t\tr.out(w, pCloseTag)\n\t\t\tif !(node.Parent.Type == Item && node.Next == nil) {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t}\n\tcase BlockQuote:\n\t\tif entering {\n\t\t\tr.cr(w)\n\t\t\tr.out(w, blockquoteTag)\n\t\t} else {\n\t\t\tr.out(w, blockquoteCloseTag)\n\t\t\tr.cr(w)\n\t\t}\n\tcase HTMLBlock:\n\t\tif r.Flags&SkipHTML != 0 {\n\t\t\tbreak\n\t\t}\n\t\tr.cr(w)\n\t\tr.out(w, node.Literal)\n\t\tr.cr(w)\n\tcase Heading:\n\t\theadingLevel := r.HTMLRendererParameters.HeadingLevelOffset + node.Level\n\t\topenTag, closeTag := headingTagsFromLevel(headingLevel)\n\t\tif entering {\n\t\t\tif node.IsTitleblock {\n\t\t\t\tattrs = append(attrs, `class=\"title\"`)\n\t\t\t}\n\t\t\tif node.HeadingID != \"\" {\n\t\t\t\tid := r.ensureUniqueHeadingID(node.HeadingID)\n\t\t\t\tif r.HeadingIDPrefix != \"\" {\n\t\t\t\t\tid = r.HeadingIDPrefix + id\n\t\t\t\t}\n\t\t\t\tif r.HeadingIDSuffix != \"\" {\n\t\t\t\t\tid = id + r.HeadingIDSuffix\n\t\t\t\t}\n\t\t\t\tattrs = append(attrs, fmt.Sprintf(`id=\"%s\"`, id))\n\t\t\t}\n\t\t\tr.cr(w)\n\t\t\tr.tag(w, openTag, attrs)\n\t\t} else {\n\t\t\tr.out(w, closeTag)\n\t\t\tif !(node.Parent.Type == Item && node.Next == nil) {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t}\n\tcase HorizontalRule:\n\t\tr.cr(w)\n\t\tr.outHRTag(w)\n\t\tr.cr(w)\n\tcase List:\n\t\topenTag := ulTag\n\t\tcloseTag := ulCloseTag\n\t\tif node.ListFlags&ListTypeOrdered != 0 {\n\t\t\topenTag = olTag\n\t\t\tcloseTag = olCloseTag\n\t\t}\n\t\tif node.ListFlags&ListTypeDefinition != 0 {\n\t\t\topenTag = dlTag\n\t\t\tcloseTag = dlCloseTag\n\t\t}\n\t\tif entering {\n\t\t\tif node.IsFootnotesList {\n\t\t\t\tr.out(w, footnotesDivBytes)\n\t\t\t\tr.outHRTag(w)\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t\tr.cr(w)\n\t\t\tif node.Parent.Type == Item && node.Parent.Parent.Tight {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t\tr.tag(w, openTag[:len(openTag)-1], attrs)\n\t\t\tr.cr(w)\n\t\t} else {\n\t\t\tr.out(w, closeTag)\n\t\t\t//cr(w)\n\t\t\t//if node.parent.Type != Item {\n\t\t\t//\tcr(w)\n\t\t\t//}\n\t\t\tif node.Parent.Type == Item && node.Next != nil {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t\tif node.Parent.Type == Document || node.Parent.Type == BlockQuote {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t\tif node.IsFootnotesList {\n\t\t\t\tr.out(w, footnotesCloseDivBytes)\n\t\t\t}\n\t\t}\n\tcase Item:\n\t\topenTag := liTag\n\t\tcloseTag := liCloseTag\n\t\tif node.ListFlags&ListTypeDefinition != 0 {\n\t\t\topenTag = ddTag\n\t\t\tcloseTag = ddCloseTag\n\t\t}\n\t\tif node.ListFlags&ListTypeTerm != 0 {\n\t\t\topenTag = dtTag\n\t\t\tcloseTag = dtCloseTag\n\t\t}\n\t\tif entering {\n\t\t\tif itemOpenCR(node) {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t\tif node.ListData.RefLink != nil {\n\t\t\t\tslug := slugify(node.ListData.RefLink)\n\t\t\t\tr.out(w, footnoteItem(r.FootnoteAnchorPrefix, slug))\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tr.out(w, openTag)\n\t\t} else {\n\t\t\tif node.ListData.RefLink != nil {\n\t\t\t\tslug := slugify(node.ListData.RefLink)\n\t\t\t\tif r.Flags&FootnoteReturnLinks != 0 {\n\t\t\t\t\tr.out(w, footnoteReturnLink(r.FootnoteAnchorPrefix, r.FootnoteReturnLinkContents, slug))\n\t\t\t\t}\n\t\t\t}\n\t\t\tr.out(w, closeTag)\n\t\t\tr.cr(w)\n\t\t}\n\tcase CodeBlock:\n\t\tattrs = appendLanguageAttr(attrs, node.Info)\n\t\tr.cr(w)\n\t\tr.out(w, preTag)\n\t\tr.tag(w, codeTag[:len(codeTag)-1], attrs)\n\t\tescapeAllHTML(w, node.Literal)\n\t\tr.out(w, codeCloseTag)\n\t\tr.out(w, preCloseTag)\n\t\tif node.Parent.Type != Item {\n\t\t\tr.cr(w)\n\t\t}\n\tcase Table:\n\t\tif entering {\n\t\t\tr.cr(w)\n\t\t\tr.out(w, tableTag)\n\t\t} else {\n\t\t\tr.out(w, tableCloseTag)\n\t\t\tr.cr(w)\n\t\t}\n\tcase TableCell:\n\t\topenTag := tdTag\n\t\tcloseTag := tdCloseTag\n\t\tif node.IsHeader {\n\t\t\topenTag = thTag\n\t\t\tcloseTag = thCloseTag\n\t\t}\n\t\tif entering {\n\t\t\talign := cellAlignment(node.Align)\n\t\t\tif align != \"\" {\n\t\t\t\tattrs = append(attrs, fmt.Sprintf(`align=\"%s\"`, align))\n\t\t\t}\n\t\t\tif node.Prev == nil {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t\tr.tag(w, openTag, attrs)\n\t\t} else {\n\t\t\tr.out(w, closeTag)\n\t\t\tr.cr(w)\n\t\t}\n\tcase TableHead:\n\t\tif entering {\n\t\t\tr.cr(w)\n\t\t\tr.out(w, theadTag)\n\t\t} else {\n\t\t\tr.out(w, theadCloseTag)\n\t\t\tr.cr(w)\n\t\t}\n\tcase TableBody:\n\t\tif entering {\n\t\t\tr.cr(w)\n\t\t\tr.out(w, tbodyTag)\n\t\t\t// XXX: this is to adhere to a rather silly test. Should fix test.\n\t\t\tif node.FirstChild == nil {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t} else {\n\t\t\tr.out(w, tbodyCloseTag)\n\t\t\tr.cr(w)\n\t\t}\n\tcase TableRow:\n\t\tif entering {\n\t\t\tr.cr(w)\n\t\t\tr.out(w, trTag)\n\t\t} else {\n\t\t\tr.out(w, trCloseTag)\n\t\t\tr.cr(w)\n\t\t}\n\tdefault:\n\t\tpanic(\"Unknown node type \" + node.Type.String())\n\t}\n\treturn GoToNext\n}\n\n// RenderHeader writes HTML document preamble and TOC if requested.\nfunc (r *HTMLRenderer) RenderHeader(w io.Writer, ast *Node) {\n\tr.writeDocumentHeader(w)\n\tif r.Flags&TOC != 0 {\n\t\tr.writeTOC(w, ast)\n\t}\n}\n\n// RenderFooter writes HTML document footer.\nfunc (r *HTMLRenderer) RenderFooter(w io.Writer, ast *Node) {\n\tif r.Flags&CompletePage == 0 {\n\t\treturn\n\t}\n\tio.WriteString(w, \"\\n</body>\\n</html>\\n\")\n}\n\nfunc (r *HTMLRenderer) writeDocumentHeader(w io.Writer) {\n\tif r.Flags&CompletePage == 0 {\n\t\treturn\n\t}\n\tending := \"\"\n\tif r.Flags&UseXHTML != 0 {\n\t\tio.WriteString(w, \"<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\" \")\n\t\tio.WriteString(w, \"\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\n\")\n\t\tio.WriteString(w, \"<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\")\n\t\tending = \" /\"\n\t} else {\n\t\tio.WriteString(w, \"<!DOCTYPE html>\\n\")\n\t\tio.WriteString(w, \"<html>\\n\")\n\t}\n\tio.WriteString(w, \"<head>\\n\")\n\tio.WriteString(w, \"  <title>\")\n\tif r.Flags&Smartypants != 0 {\n\t\tr.sr.Process(w, []byte(r.Title))\n\t} else {\n\t\tescapeHTML(w, []byte(r.Title))\n\t}\n\tio.WriteString(w, \"</title>\\n\")\n\tio.WriteString(w, \"  <meta name=\\\"GENERATOR\\\" content=\\\"Blackfriday Markdown Processor v\")\n\tio.WriteString(w, Version)\n\tio.WriteString(w, \"\\\"\")\n\tio.WriteString(w, ending)\n\tio.WriteString(w, \">\\n\")\n\tio.WriteString(w, \"  <meta charset=\\\"utf-8\\\"\")\n\tio.WriteString(w, ending)\n\tio.WriteString(w, \">\\n\")\n\tif r.CSS != \"\" {\n\t\tio.WriteString(w, \"  <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"\")\n\t\tescapeHTML(w, []byte(r.CSS))\n\t\tio.WriteString(w, \"\\\"\")\n\t\tio.WriteString(w, ending)\n\t\tio.WriteString(w, \">\\n\")\n\t}\n\tif r.Icon != \"\" {\n\t\tio.WriteString(w, \"  <link rel=\\\"icon\\\" type=\\\"image/x-icon\\\" href=\\\"\")\n\t\tescapeHTML(w, []byte(r.Icon))\n\t\tio.WriteString(w, \"\\\"\")\n\t\tio.WriteString(w, ending)\n\t\tio.WriteString(w, \">\\n\")\n\t}\n\tio.WriteString(w, \"</head>\\n\")\n\tio.WriteString(w, \"<body>\\n\\n\")\n}\n\nfunc (r *HTMLRenderer) writeTOC(w io.Writer, ast *Node) {\n\tbuf := bytes.Buffer{}\n\n\tinHeading := false\n\ttocLevel := 0\n\theadingCount := 0\n\n\tast.Walk(func(node *Node, entering bool) WalkStatus {\n\t\tif node.Type == Heading && !node.HeadingData.IsTitleblock {\n\t\t\tinHeading = entering\n\t\t\tif entering {\n\t\t\t\tnode.HeadingID = fmt.Sprintf(\"toc_%d\", headingCount)\n\t\t\t\tif node.Level == tocLevel {\n\t\t\t\t\tbuf.WriteString(\"</li>\\n\\n<li>\")\n\t\t\t\t} else if node.Level < tocLevel {\n\t\t\t\t\tfor node.Level < tocLevel {\n\t\t\t\t\t\ttocLevel--\n\t\t\t\t\t\tbuf.WriteString(\"</li>\\n</ul>\")\n\t\t\t\t\t}\n\t\t\t\t\tbuf.WriteString(\"</li>\\n\\n<li>\")\n\t\t\t\t} else {\n\t\t\t\t\tfor node.Level > tocLevel {\n\t\t\t\t\t\ttocLevel++\n\t\t\t\t\t\tbuf.WriteString(\"\\n<ul>\\n<li>\")\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfmt.Fprintf(&buf, `<a href=\"#toc_%d\">`, headingCount)\n\t\t\t\theadingCount++\n\t\t\t} else {\n\t\t\t\tbuf.WriteString(\"</a>\")\n\t\t\t}\n\t\t\treturn GoToNext\n\t\t}\n\n\t\tif inHeading {\n\t\t\treturn r.RenderNode(&buf, node, entering)\n\t\t}\n\n\t\treturn GoToNext\n\t})\n\n\tfor ; tocLevel > 0; tocLevel-- {\n\t\tbuf.WriteString(\"</li>\\n</ul>\")\n\t}\n\n\tif buf.Len() > 0 {\n\t\tio.WriteString(w, \"<nav>\\n\")\n\t\tw.Write(buf.Bytes())\n\t\tio.WriteString(w, \"\\n\\n</nav>\\n\")\n\t}\n\tr.lastOutputLen = buf.Len()\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/inline.go",
    "content": "//\n// Blackfriday Markdown Processor\n// Available at http://github.com/russross/blackfriday\n//\n// Copyright © 2011 Russ Ross <russ@russross.com>.\n// Distributed under the Simplified BSD License.\n// See README.md for details.\n//\n\n//\n// Functions to parse inline elements.\n//\n\npackage blackfriday\n\nimport (\n\t\"bytes\"\n\t\"regexp\"\n\t\"strconv\"\n)\n\nvar (\n\turlRe    = `((https?|ftp):\\/\\/|\\/)[-A-Za-z0-9+&@#\\/%?=~_|!:,.;\\(\\)]+`\n\tanchorRe = regexp.MustCompile(`^(<a\\shref=\"` + urlRe + `\"(\\stitle=\"[^\"<>]+\")?\\s?>` + urlRe + `<\\/a>)`)\n\n\t// https://www.w3.org/TR/html5/syntax.html#character-references\n\t// highest unicode code point in 17 planes (2^20): 1,114,112d =\n\t// 7 dec digits or 6 hex digits\n\t// named entity references can be 2-31 characters with stuff like &lt;\n\t// at one end and &CounterClockwiseContourIntegral; at the other. There\n\t// are also sometimes numbers at the end, although this isn't inherent\n\t// in the specification; there are never numbers anywhere else in\n\t// current character references, though; see &frac34; and &blk12;, etc.\n\t// https://www.w3.org/TR/html5/syntax.html#named-character-references\n\t//\n\t// entity := \"&\" (named group | number ref) \";\"\n\t// named group := [a-zA-Z]{2,31}[0-9]{0,2}\n\t// number ref := \"#\" (dec ref | hex ref)\n\t// dec ref := [0-9]{1,7}\n\t// hex ref := (\"x\" | \"X\") [0-9a-fA-F]{1,6}\n\thtmlEntityRe = regexp.MustCompile(`&([a-zA-Z]{2,31}[0-9]{0,2}|#([0-9]{1,7}|[xX][0-9a-fA-F]{1,6}));`)\n)\n\n// Functions to parse text within a block\n// Each function returns the number of chars taken care of\n// data is the complete block being rendered\n// offset is the number of valid chars before the current cursor\n\nfunc (p *Markdown) inline(currBlock *Node, data []byte) {\n\t// handlers might call us recursively: enforce a maximum depth\n\tif p.nesting >= p.maxNesting || len(data) == 0 {\n\t\treturn\n\t}\n\tp.nesting++\n\tbeg, end := 0, 0\n\tfor end < len(data) {\n\t\thandler := p.inlineCallback[data[end]]\n\t\tif handler != nil {\n\t\t\tif consumed, node := handler(p, data, end); consumed == 0 {\n\t\t\t\t// No action from the callback.\n\t\t\t\tend++\n\t\t\t} else {\n\t\t\t\t// Copy inactive chars into the output.\n\t\t\t\tcurrBlock.AppendChild(text(data[beg:end]))\n\t\t\t\tif node != nil {\n\t\t\t\t\tcurrBlock.AppendChild(node)\n\t\t\t\t}\n\t\t\t\t// Skip past whatever the callback used.\n\t\t\t\tbeg = end + consumed\n\t\t\t\tend = beg\n\t\t\t}\n\t\t} else {\n\t\t\tend++\n\t\t}\n\t}\n\tif beg < len(data) {\n\t\tif data[end-1] == '\\n' {\n\t\t\tend--\n\t\t}\n\t\tcurrBlock.AppendChild(text(data[beg:end]))\n\t}\n\tp.nesting--\n}\n\n// single and double emphasis parsing\nfunc emphasis(p *Markdown, data []byte, offset int) (int, *Node) {\n\tdata = data[offset:]\n\tc := data[0]\n\n\tif len(data) > 2 && data[1] != c {\n\t\t// whitespace cannot follow an opening emphasis;\n\t\t// strikethrough only takes two characters '~~'\n\t\tif c == '~' || isspace(data[1]) {\n\t\t\treturn 0, nil\n\t\t}\n\t\tret, node := helperEmphasis(p, data[1:], c)\n\t\tif ret == 0 {\n\t\t\treturn 0, nil\n\t\t}\n\n\t\treturn ret + 1, node\n\t}\n\n\tif len(data) > 3 && data[1] == c && data[2] != c {\n\t\tif isspace(data[2]) {\n\t\t\treturn 0, nil\n\t\t}\n\t\tret, node := helperDoubleEmphasis(p, data[2:], c)\n\t\tif ret == 0 {\n\t\t\treturn 0, nil\n\t\t}\n\n\t\treturn ret + 2, node\n\t}\n\n\tif len(data) > 4 && data[1] == c && data[2] == c && data[3] != c {\n\t\tif c == '~' || isspace(data[3]) {\n\t\t\treturn 0, nil\n\t\t}\n\t\tret, node := helperTripleEmphasis(p, data, 3, c)\n\t\tif ret == 0 {\n\t\t\treturn 0, nil\n\t\t}\n\n\t\treturn ret + 3, node\n\t}\n\n\treturn 0, nil\n}\n\nfunc codeSpan(p *Markdown, data []byte, offset int) (int, *Node) {\n\tdata = data[offset:]\n\n\tnb := 0\n\n\t// count the number of backticks in the delimiter\n\tfor nb < len(data) && data[nb] == '`' {\n\t\tnb++\n\t}\n\n\t// find the next delimiter\n\ti, end := 0, 0\n\tfor end = nb; end < len(data) && i < nb; end++ {\n\t\tif data[end] == '`' {\n\t\t\ti++\n\t\t} else {\n\t\t\ti = 0\n\t\t}\n\t}\n\n\t// no matching delimiter?\n\tif i < nb && end >= len(data) {\n\t\treturn 0, nil\n\t}\n\n\t// trim outside whitespace\n\tfBegin := nb\n\tfor fBegin < end && data[fBegin] == ' ' {\n\t\tfBegin++\n\t}\n\n\tfEnd := end - nb\n\tfor fEnd > fBegin && data[fEnd-1] == ' ' {\n\t\tfEnd--\n\t}\n\n\t// render the code span\n\tif fBegin != fEnd {\n\t\tcode := NewNode(Code)\n\t\tcode.Literal = data[fBegin:fEnd]\n\t\treturn end, code\n\t}\n\n\treturn end, nil\n}\n\n// newline preceded by two spaces becomes <br>\nfunc maybeLineBreak(p *Markdown, data []byte, offset int) (int, *Node) {\n\torigOffset := offset\n\tfor offset < len(data) && data[offset] == ' ' {\n\t\toffset++\n\t}\n\n\tif offset < len(data) && data[offset] == '\\n' {\n\t\tif offset-origOffset >= 2 {\n\t\t\treturn offset - origOffset + 1, NewNode(Hardbreak)\n\t\t}\n\t\treturn offset - origOffset, nil\n\t}\n\treturn 0, nil\n}\n\n// newline without two spaces works when HardLineBreak is enabled\nfunc lineBreak(p *Markdown, data []byte, offset int) (int, *Node) {\n\tif p.extensions&HardLineBreak != 0 {\n\t\treturn 1, NewNode(Hardbreak)\n\t}\n\treturn 0, nil\n}\n\ntype linkType int\n\nconst (\n\tlinkNormal linkType = iota\n\tlinkImg\n\tlinkDeferredFootnote\n\tlinkInlineFootnote\n)\n\nfunc isReferenceStyleLink(data []byte, pos int, t linkType) bool {\n\tif t == linkDeferredFootnote {\n\t\treturn false\n\t}\n\treturn pos < len(data)-1 && data[pos] == '[' && data[pos+1] != '^'\n}\n\nfunc maybeImage(p *Markdown, data []byte, offset int) (int, *Node) {\n\tif offset < len(data)-1 && data[offset+1] == '[' {\n\t\treturn link(p, data, offset)\n\t}\n\treturn 0, nil\n}\n\nfunc maybeInlineFootnote(p *Markdown, data []byte, offset int) (int, *Node) {\n\tif offset < len(data)-1 && data[offset+1] == '[' {\n\t\treturn link(p, data, offset)\n\t}\n\treturn 0, nil\n}\n\n// '[': parse a link or an image or a footnote\nfunc link(p *Markdown, data []byte, offset int) (int, *Node) {\n\t// no links allowed inside regular links, footnote, and deferred footnotes\n\tif p.insideLink && (offset > 0 && data[offset-1] == '[' || len(data)-1 > offset && data[offset+1] == '^') {\n\t\treturn 0, nil\n\t}\n\n\tvar t linkType\n\tswitch {\n\t// special case: ![^text] == deferred footnote (that follows something with\n\t// an exclamation point)\n\tcase p.extensions&Footnotes != 0 && len(data)-1 > offset && data[offset+1] == '^':\n\t\tt = linkDeferredFootnote\n\t// ![alt] == image\n\tcase offset >= 0 && data[offset] == '!':\n\t\tt = linkImg\n\t\toffset++\n\t// ^[text] == inline footnote\n\t// [^refId] == deferred footnote\n\tcase p.extensions&Footnotes != 0:\n\t\tif offset >= 0 && data[offset] == '^' {\n\t\t\tt = linkInlineFootnote\n\t\t\toffset++\n\t\t} else if len(data)-1 > offset && data[offset+1] == '^' {\n\t\t\tt = linkDeferredFootnote\n\t\t}\n\t// [text] == regular link\n\tdefault:\n\t\tt = linkNormal\n\t}\n\n\tdata = data[offset:]\n\n\tvar (\n\t\ti                       = 1\n\t\tnoteID                  int\n\t\ttitle, link, altContent []byte\n\t\ttextHasNl               = false\n\t)\n\n\tif t == linkDeferredFootnote {\n\t\ti++\n\t}\n\n\t// look for the matching closing bracket\n\tfor level := 1; level > 0 && i < len(data); i++ {\n\t\tswitch {\n\t\tcase data[i] == '\\n':\n\t\t\ttextHasNl = true\n\n\t\tcase isBackslashEscaped(data, i):\n\t\t\tcontinue\n\n\t\tcase data[i] == '[':\n\t\t\tlevel++\n\n\t\tcase data[i] == ']':\n\t\t\tlevel--\n\t\t\tif level <= 0 {\n\t\t\t\ti-- // compensate for extra i++ in for loop\n\t\t\t}\n\t\t}\n\t}\n\n\tif i >= len(data) {\n\t\treturn 0, nil\n\t}\n\n\ttxtE := i\n\ti++\n\tvar footnoteNode *Node\n\n\t// skip any amount of whitespace or newline\n\t// (this is much more lax than original markdown syntax)\n\tfor i < len(data) && isspace(data[i]) {\n\t\ti++\n\t}\n\n\t// inline style link\n\tswitch {\n\tcase i < len(data) && data[i] == '(':\n\t\t// skip initial whitespace\n\t\ti++\n\n\t\tfor i < len(data) && isspace(data[i]) {\n\t\t\ti++\n\t\t}\n\n\t\tlinkB := i\n\n\t\t// look for link end: ' \" )\n\tfindlinkend:\n\t\tfor i < len(data) {\n\t\t\tswitch {\n\t\t\tcase data[i] == '\\\\':\n\t\t\t\ti += 2\n\n\t\t\tcase data[i] == ')' || data[i] == '\\'' || data[i] == '\"':\n\t\t\t\tbreak findlinkend\n\n\t\t\tdefault:\n\t\t\t\ti++\n\t\t\t}\n\t\t}\n\n\t\tif i >= len(data) {\n\t\t\treturn 0, nil\n\t\t}\n\t\tlinkE := i\n\n\t\t// look for title end if present\n\t\ttitleB, titleE := 0, 0\n\t\tif data[i] == '\\'' || data[i] == '\"' {\n\t\t\ti++\n\t\t\ttitleB = i\n\n\t\tfindtitleend:\n\t\t\tfor i < len(data) {\n\t\t\t\tswitch {\n\t\t\t\tcase data[i] == '\\\\':\n\t\t\t\t\ti += 2\n\n\t\t\t\tcase data[i] == ')':\n\t\t\t\t\tbreak findtitleend\n\n\t\t\t\tdefault:\n\t\t\t\t\ti++\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif i >= len(data) {\n\t\t\t\treturn 0, nil\n\t\t\t}\n\n\t\t\t// skip whitespace after title\n\t\t\ttitleE = i - 1\n\t\t\tfor titleE > titleB && isspace(data[titleE]) {\n\t\t\t\ttitleE--\n\t\t\t}\n\n\t\t\t// check for closing quote presence\n\t\t\tif data[titleE] != '\\'' && data[titleE] != '\"' {\n\t\t\t\ttitleB, titleE = 0, 0\n\t\t\t\tlinkE = i\n\t\t\t}\n\t\t}\n\n\t\t// remove whitespace at the end of the link\n\t\tfor linkE > linkB && isspace(data[linkE-1]) {\n\t\t\tlinkE--\n\t\t}\n\n\t\t// remove optional angle brackets around the link\n\t\tif data[linkB] == '<' {\n\t\t\tlinkB++\n\t\t}\n\t\tif data[linkE-1] == '>' {\n\t\t\tlinkE--\n\t\t}\n\n\t\t// build escaped link and title\n\t\tif linkE > linkB {\n\t\t\tlink = data[linkB:linkE]\n\t\t}\n\n\t\tif titleE > titleB {\n\t\t\ttitle = data[titleB:titleE]\n\t\t}\n\n\t\ti++\n\n\t// reference style link\n\tcase isReferenceStyleLink(data, i, t):\n\t\tvar id []byte\n\t\taltContentConsidered := false\n\n\t\t// look for the id\n\t\ti++\n\t\tlinkB := i\n\t\tfor i < len(data) && data[i] != ']' {\n\t\t\ti++\n\t\t}\n\t\tif i >= len(data) {\n\t\t\treturn 0, nil\n\t\t}\n\t\tlinkE := i\n\n\t\t// find the reference\n\t\tif linkB == linkE {\n\t\t\tif textHasNl {\n\t\t\t\tvar b bytes.Buffer\n\n\t\t\t\tfor j := 1; j < txtE; j++ {\n\t\t\t\t\tswitch {\n\t\t\t\t\tcase data[j] != '\\n':\n\t\t\t\t\t\tb.WriteByte(data[j])\n\t\t\t\t\tcase data[j-1] != ' ':\n\t\t\t\t\t\tb.WriteByte(' ')\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tid = b.Bytes()\n\t\t\t} else {\n\t\t\t\tid = data[1:txtE]\n\t\t\t\taltContentConsidered = true\n\t\t\t}\n\t\t} else {\n\t\t\tid = data[linkB:linkE]\n\t\t}\n\n\t\t// find the reference with matching id\n\t\tlr, ok := p.getRef(string(id))\n\t\tif !ok {\n\t\t\treturn 0, nil\n\t\t}\n\n\t\t// keep link and title from reference\n\t\tlink = lr.link\n\t\ttitle = lr.title\n\t\tif altContentConsidered {\n\t\t\taltContent = lr.text\n\t\t}\n\t\ti++\n\n\t// shortcut reference style link or reference or inline footnote\n\tdefault:\n\t\tvar id []byte\n\n\t\t// craft the id\n\t\tif textHasNl {\n\t\t\tvar b bytes.Buffer\n\n\t\t\tfor j := 1; j < txtE; j++ {\n\t\t\t\tswitch {\n\t\t\t\tcase data[j] != '\\n':\n\t\t\t\t\tb.WriteByte(data[j])\n\t\t\t\tcase data[j-1] != ' ':\n\t\t\t\t\tb.WriteByte(' ')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tid = b.Bytes()\n\t\t} else {\n\t\t\tif t == linkDeferredFootnote {\n\t\t\t\tid = data[2:txtE] // get rid of the ^\n\t\t\t} else {\n\t\t\t\tid = data[1:txtE]\n\t\t\t}\n\t\t}\n\n\t\tfootnoteNode = NewNode(Item)\n\t\tif t == linkInlineFootnote {\n\t\t\t// create a new reference\n\t\t\tnoteID = len(p.notes) + 1\n\n\t\t\tvar fragment []byte\n\t\t\tif len(id) > 0 {\n\t\t\t\tif len(id) < 16 {\n\t\t\t\t\tfragment = make([]byte, len(id))\n\t\t\t\t} else {\n\t\t\t\t\tfragment = make([]byte, 16)\n\t\t\t\t}\n\t\t\t\tcopy(fragment, slugify(id))\n\t\t\t} else {\n\t\t\t\tfragment = append([]byte(\"footnote-\"), []byte(strconv.Itoa(noteID))...)\n\t\t\t}\n\n\t\t\tref := &reference{\n\t\t\t\tnoteID:   noteID,\n\t\t\t\thasBlock: false,\n\t\t\t\tlink:     fragment,\n\t\t\t\ttitle:    id,\n\t\t\t\tfootnote: footnoteNode,\n\t\t\t}\n\n\t\t\tp.notes = append(p.notes, ref)\n\n\t\t\tlink = ref.link\n\t\t\ttitle = ref.title\n\t\t} else {\n\t\t\t// find the reference with matching id\n\t\t\tlr, ok := p.getRef(string(id))\n\t\t\tif !ok {\n\t\t\t\treturn 0, nil\n\t\t\t}\n\n\t\t\tif t == linkDeferredFootnote {\n\t\t\t\tlr.noteID = len(p.notes) + 1\n\t\t\t\tlr.footnote = footnoteNode\n\t\t\t\tp.notes = append(p.notes, lr)\n\t\t\t}\n\n\t\t\t// keep link and title from reference\n\t\t\tlink = lr.link\n\t\t\t// if inline footnote, title == footnote contents\n\t\t\ttitle = lr.title\n\t\t\tnoteID = lr.noteID\n\t\t}\n\n\t\t// rewind the whitespace\n\t\ti = txtE + 1\n\t}\n\n\tvar uLink []byte\n\tif t == linkNormal || t == linkImg {\n\t\tif len(link) > 0 {\n\t\t\tvar uLinkBuf bytes.Buffer\n\t\t\tunescapeText(&uLinkBuf, link)\n\t\t\tuLink = uLinkBuf.Bytes()\n\t\t}\n\n\t\t// links need something to click on and somewhere to go\n\t\tif len(uLink) == 0 || (t == linkNormal && txtE <= 1) {\n\t\t\treturn 0, nil\n\t\t}\n\t}\n\n\t// call the relevant rendering function\n\tvar linkNode *Node\n\tswitch t {\n\tcase linkNormal:\n\t\tlinkNode = NewNode(Link)\n\t\tlinkNode.Destination = normalizeURI(uLink)\n\t\tlinkNode.Title = title\n\t\tif len(altContent) > 0 {\n\t\t\tlinkNode.AppendChild(text(altContent))\n\t\t} else {\n\t\t\t// links cannot contain other links, so turn off link parsing\n\t\t\t// temporarily and recurse\n\t\t\tinsideLink := p.insideLink\n\t\t\tp.insideLink = true\n\t\t\tp.inline(linkNode, data[1:txtE])\n\t\t\tp.insideLink = insideLink\n\t\t}\n\n\tcase linkImg:\n\t\tlinkNode = NewNode(Image)\n\t\tlinkNode.Destination = uLink\n\t\tlinkNode.Title = title\n\t\tlinkNode.AppendChild(text(data[1:txtE]))\n\t\ti++\n\n\tcase linkInlineFootnote, linkDeferredFootnote:\n\t\tlinkNode = NewNode(Link)\n\t\tlinkNode.Destination = link\n\t\tlinkNode.Title = title\n\t\tlinkNode.NoteID = noteID\n\t\tlinkNode.Footnote = footnoteNode\n\t\tif t == linkInlineFootnote {\n\t\t\ti++\n\t\t}\n\n\tdefault:\n\t\treturn 0, nil\n\t}\n\n\treturn i, linkNode\n}\n\nfunc (p *Markdown) inlineHTMLComment(data []byte) int {\n\tif len(data) < 5 {\n\t\treturn 0\n\t}\n\tif data[0] != '<' || data[1] != '!' || data[2] != '-' || data[3] != '-' {\n\t\treturn 0\n\t}\n\ti := 5\n\t// scan for an end-of-comment marker, across lines if necessary\n\tfor i < len(data) && !(data[i-2] == '-' && data[i-1] == '-' && data[i] == '>') {\n\t\ti++\n\t}\n\t// no end-of-comment marker\n\tif i >= len(data) {\n\t\treturn 0\n\t}\n\treturn i + 1\n}\n\nfunc stripMailto(link []byte) []byte {\n\tif bytes.HasPrefix(link, []byte(\"mailto://\")) {\n\t\treturn link[9:]\n\t} else if bytes.HasPrefix(link, []byte(\"mailto:\")) {\n\t\treturn link[7:]\n\t} else {\n\t\treturn link\n\t}\n}\n\n// autolinkType specifies a kind of autolink that gets detected.\ntype autolinkType int\n\n// These are the possible flag values for the autolink renderer.\nconst (\n\tnotAutolink autolinkType = iota\n\tnormalAutolink\n\temailAutolink\n)\n\n// '<' when tags or autolinks are allowed\nfunc leftAngle(p *Markdown, data []byte, offset int) (int, *Node) {\n\tdata = data[offset:]\n\taltype, end := tagLength(data)\n\tif size := p.inlineHTMLComment(data); size > 0 {\n\t\tend = size\n\t}\n\tif end > 2 {\n\t\tif altype != notAutolink {\n\t\t\tvar uLink bytes.Buffer\n\t\t\tunescapeText(&uLink, data[1:end+1-2])\n\t\t\tif uLink.Len() > 0 {\n\t\t\t\tlink := uLink.Bytes()\n\t\t\t\tnode := NewNode(Link)\n\t\t\t\tnode.Destination = link\n\t\t\t\tif altype == emailAutolink {\n\t\t\t\t\tnode.Destination = append([]byte(\"mailto:\"), link...)\n\t\t\t\t}\n\t\t\t\tnode.AppendChild(text(stripMailto(link)))\n\t\t\t\treturn end, node\n\t\t\t}\n\t\t} else {\n\t\t\thtmlTag := NewNode(HTMLSpan)\n\t\t\thtmlTag.Literal = data[:end]\n\t\t\treturn end, htmlTag\n\t\t}\n\t}\n\n\treturn end, nil\n}\n\n// '\\\\' backslash escape\nvar escapeChars = []byte(\"\\\\`*_{}[]()#+-.!:|&<>~\")\n\nfunc escape(p *Markdown, data []byte, offset int) (int, *Node) {\n\tdata = data[offset:]\n\n\tif len(data) > 1 {\n\t\tif p.extensions&BackslashLineBreak != 0 && data[1] == '\\n' {\n\t\t\treturn 2, NewNode(Hardbreak)\n\t\t}\n\t\tif bytes.IndexByte(escapeChars, data[1]) < 0 {\n\t\t\treturn 0, nil\n\t\t}\n\n\t\treturn 2, text(data[1:2])\n\t}\n\n\treturn 2, nil\n}\n\nfunc unescapeText(ob *bytes.Buffer, src []byte) {\n\ti := 0\n\tfor i < len(src) {\n\t\torg := i\n\t\tfor i < len(src) && src[i] != '\\\\' {\n\t\t\ti++\n\t\t}\n\n\t\tif i > org {\n\t\t\tob.Write(src[org:i])\n\t\t}\n\n\t\tif i+1 >= len(src) {\n\t\t\tbreak\n\t\t}\n\n\t\tob.WriteByte(src[i+1])\n\t\ti += 2\n\t}\n}\n\n// '&' escaped when it doesn't belong to an entity\n// valid entities are assumed to be anything matching &#?[A-Za-z0-9]+;\nfunc entity(p *Markdown, data []byte, offset int) (int, *Node) {\n\tdata = data[offset:]\n\n\tend := 1\n\n\tif end < len(data) && data[end] == '#' {\n\t\tend++\n\t}\n\n\tfor end < len(data) && isalnum(data[end]) {\n\t\tend++\n\t}\n\n\tif end < len(data) && data[end] == ';' {\n\t\tend++ // real entity\n\t} else {\n\t\treturn 0, nil // lone '&'\n\t}\n\n\tent := data[:end]\n\t// undo &amp; escaping or it will be converted to &amp;amp; by another\n\t// escaper in the renderer\n\tif bytes.Equal(ent, []byte(\"&amp;\")) {\n\t\tent = []byte{'&'}\n\t}\n\n\treturn end, text(ent)\n}\n\nfunc linkEndsWithEntity(data []byte, linkEnd int) bool {\n\tentityRanges := htmlEntityRe.FindAllIndex(data[:linkEnd], -1)\n\treturn entityRanges != nil && entityRanges[len(entityRanges)-1][1] == linkEnd\n}\n\n// hasPrefixCaseInsensitive is a custom implementation of\n//     strings.HasPrefix(strings.ToLower(s), prefix)\n// we rolled our own because ToLower pulls in a huge machinery of lowercasing\n// anything from Unicode and that's very slow. Since this func will only be\n// used on ASCII protocol prefixes, we can take shortcuts.\nfunc hasPrefixCaseInsensitive(s, prefix []byte) bool {\n\tif len(s) < len(prefix) {\n\t\treturn false\n\t}\n\tdelta := byte('a' - 'A')\n\tfor i, b := range prefix {\n\t\tif b != s[i] && b != s[i]+delta {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nvar protocolPrefixes = [][]byte{\n\t[]byte(\"http://\"),\n\t[]byte(\"https://\"),\n\t[]byte(\"ftp://\"),\n\t[]byte(\"file://\"),\n\t[]byte(\"mailto:\"),\n}\n\nconst shortestPrefix = 6 // len(\"ftp://\"), the shortest of the above\n\nfunc maybeAutoLink(p *Markdown, data []byte, offset int) (int, *Node) {\n\t// quick check to rule out most false hits\n\tif p.insideLink || len(data) < offset+shortestPrefix {\n\t\treturn 0, nil\n\t}\n\tfor _, prefix := range protocolPrefixes {\n\t\tendOfHead := offset + 8 // 8 is the len() of the longest prefix\n\t\tif endOfHead > len(data) {\n\t\t\tendOfHead = len(data)\n\t\t}\n\t\tif hasPrefixCaseInsensitive(data[offset:endOfHead], prefix) {\n\t\t\treturn autoLink(p, data, offset)\n\t\t}\n\t}\n\treturn 0, nil\n}\n\nfunc autoLink(p *Markdown, data []byte, offset int) (int, *Node) {\n\t// Now a more expensive check to see if we're not inside an anchor element\n\tanchorStart := offset\n\toffsetFromAnchor := 0\n\tfor anchorStart > 0 && data[anchorStart] != '<' {\n\t\tanchorStart--\n\t\toffsetFromAnchor++\n\t}\n\n\tanchorStr := anchorRe.Find(data[anchorStart:])\n\tif anchorStr != nil {\n\t\tanchorClose := NewNode(HTMLSpan)\n\t\tanchorClose.Literal = anchorStr[offsetFromAnchor:]\n\t\treturn len(anchorStr) - offsetFromAnchor, anchorClose\n\t}\n\n\t// scan backward for a word boundary\n\trewind := 0\n\tfor offset-rewind > 0 && rewind <= 7 && isletter(data[offset-rewind-1]) {\n\t\trewind++\n\t}\n\tif rewind > 6 { // longest supported protocol is \"mailto\" which has 6 letters\n\t\treturn 0, nil\n\t}\n\n\torigData := data\n\tdata = data[offset-rewind:]\n\n\tif !isSafeLink(data) {\n\t\treturn 0, nil\n\t}\n\n\tlinkEnd := 0\n\tfor linkEnd < len(data) && !isEndOfLink(data[linkEnd]) {\n\t\tlinkEnd++\n\t}\n\n\t// Skip punctuation at the end of the link\n\tif (data[linkEnd-1] == '.' || data[linkEnd-1] == ',') && data[linkEnd-2] != '\\\\' {\n\t\tlinkEnd--\n\t}\n\n\t// But don't skip semicolon if it's a part of escaped entity:\n\tif data[linkEnd-1] == ';' && data[linkEnd-2] != '\\\\' && !linkEndsWithEntity(data, linkEnd) {\n\t\tlinkEnd--\n\t}\n\n\t// See if the link finishes with a punctuation sign that can be closed.\n\tvar copen byte\n\tswitch data[linkEnd-1] {\n\tcase '\"':\n\t\tcopen = '\"'\n\tcase '\\'':\n\t\tcopen = '\\''\n\tcase ')':\n\t\tcopen = '('\n\tcase ']':\n\t\tcopen = '['\n\tcase '}':\n\t\tcopen = '{'\n\tdefault:\n\t\tcopen = 0\n\t}\n\n\tif copen != 0 {\n\t\tbufEnd := offset - rewind + linkEnd - 2\n\n\t\topenDelim := 1\n\n\t\t/* Try to close the final punctuation sign in this same line;\n\t\t * if we managed to close it outside of the URL, that means that it's\n\t\t * not part of the URL. If it closes inside the URL, that means it\n\t\t * is part of the URL.\n\t\t *\n\t\t * Examples:\n\t\t *\n\t\t *      foo http://www.pokemon.com/Pikachu_(Electric) bar\n\t\t *              => http://www.pokemon.com/Pikachu_(Electric)\n\t\t *\n\t\t *      foo (http://www.pokemon.com/Pikachu_(Electric)) bar\n\t\t *              => http://www.pokemon.com/Pikachu_(Electric)\n\t\t *\n\t\t *      foo http://www.pokemon.com/Pikachu_(Electric)) bar\n\t\t *              => http://www.pokemon.com/Pikachu_(Electric))\n\t\t *\n\t\t *      (foo http://www.pokemon.com/Pikachu_(Electric)) bar\n\t\t *              => foo http://www.pokemon.com/Pikachu_(Electric)\n\t\t */\n\n\t\tfor bufEnd >= 0 && origData[bufEnd] != '\\n' && openDelim != 0 {\n\t\t\tif origData[bufEnd] == data[linkEnd-1] {\n\t\t\t\topenDelim++\n\t\t\t}\n\n\t\t\tif origData[bufEnd] == copen {\n\t\t\t\topenDelim--\n\t\t\t}\n\n\t\t\tbufEnd--\n\t\t}\n\n\t\tif openDelim == 0 {\n\t\t\tlinkEnd--\n\t\t}\n\t}\n\n\tvar uLink bytes.Buffer\n\tunescapeText(&uLink, data[:linkEnd])\n\n\tif uLink.Len() > 0 {\n\t\tnode := NewNode(Link)\n\t\tnode.Destination = uLink.Bytes()\n\t\tnode.AppendChild(text(uLink.Bytes()))\n\t\treturn linkEnd, node\n\t}\n\n\treturn linkEnd, nil\n}\n\nfunc isEndOfLink(char byte) bool {\n\treturn isspace(char) || char == '<'\n}\n\nvar validUris = [][]byte{[]byte(\"http://\"), []byte(\"https://\"), []byte(\"ftp://\"), []byte(\"mailto://\")}\nvar validPaths = [][]byte{[]byte(\"/\"), []byte(\"./\"), []byte(\"../\")}\n\nfunc isSafeLink(link []byte) bool {\n\tfor _, path := range validPaths {\n\t\tif len(link) >= len(path) && bytes.Equal(link[:len(path)], path) {\n\t\t\tif len(link) == len(path) {\n\t\t\t\treturn true\n\t\t\t} else if isalnum(link[len(path)]) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, prefix := range validUris {\n\t\t// TODO: handle unicode here\n\t\t// case-insensitive prefix test\n\t\tif len(link) > len(prefix) && bytes.Equal(bytes.ToLower(link[:len(prefix)]), prefix) && isalnum(link[len(prefix)]) {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// return the length of the given tag, or 0 is it's not valid\nfunc tagLength(data []byte) (autolink autolinkType, end int) {\n\tvar i, j int\n\n\t// a valid tag can't be shorter than 3 chars\n\tif len(data) < 3 {\n\t\treturn notAutolink, 0\n\t}\n\n\t// begins with a '<' optionally followed by '/', followed by letter or number\n\tif data[0] != '<' {\n\t\treturn notAutolink, 0\n\t}\n\tif data[1] == '/' {\n\t\ti = 2\n\t} else {\n\t\ti = 1\n\t}\n\n\tif !isalnum(data[i]) {\n\t\treturn notAutolink, 0\n\t}\n\n\t// scheme test\n\tautolink = notAutolink\n\n\t// try to find the beginning of an URI\n\tfor i < len(data) && (isalnum(data[i]) || data[i] == '.' || data[i] == '+' || data[i] == '-') {\n\t\ti++\n\t}\n\n\tif i > 1 && i < len(data) && data[i] == '@' {\n\t\tif j = isMailtoAutoLink(data[i:]); j != 0 {\n\t\t\treturn emailAutolink, i + j\n\t\t}\n\t}\n\n\tif i > 2 && i < len(data) && data[i] == ':' {\n\t\tautolink = normalAutolink\n\t\ti++\n\t}\n\n\t// complete autolink test: no whitespace or ' or \"\n\tswitch {\n\tcase i >= len(data):\n\t\tautolink = notAutolink\n\tcase autolink != notAutolink:\n\t\tj = i\n\n\t\tfor i < len(data) {\n\t\t\tif data[i] == '\\\\' {\n\t\t\t\ti += 2\n\t\t\t} else if data[i] == '>' || data[i] == '\\'' || data[i] == '\"' || isspace(data[i]) {\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\ti++\n\t\t\t}\n\n\t\t}\n\n\t\tif i >= len(data) {\n\t\t\treturn autolink, 0\n\t\t}\n\t\tif i > j && data[i] == '>' {\n\t\t\treturn autolink, i + 1\n\t\t}\n\n\t\t// one of the forbidden chars has been found\n\t\tautolink = notAutolink\n\t}\n\ti += bytes.IndexByte(data[i:], '>')\n\tif i < 0 {\n\t\treturn autolink, 0\n\t}\n\treturn autolink, i + 1\n}\n\n// look for the address part of a mail autolink and '>'\n// this is less strict than the original markdown e-mail address matching\nfunc isMailtoAutoLink(data []byte) int {\n\tnb := 0\n\n\t// address is assumed to be: [-@._a-zA-Z0-9]+ with exactly one '@'\n\tfor i := 0; i < len(data); i++ {\n\t\tif isalnum(data[i]) {\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch data[i] {\n\t\tcase '@':\n\t\t\tnb++\n\n\t\tcase '-', '.', '_':\n\t\t\tbreak\n\n\t\tcase '>':\n\t\t\tif nb == 1 {\n\t\t\t\treturn i + 1\n\t\t\t}\n\t\t\treturn 0\n\t\tdefault:\n\t\t\treturn 0\n\t\t}\n\t}\n\n\treturn 0\n}\n\n// look for the next emph char, skipping other constructs\nfunc helperFindEmphChar(data []byte, c byte) int {\n\ti := 0\n\n\tfor i < len(data) {\n\t\tfor i < len(data) && data[i] != c && data[i] != '`' && data[i] != '[' {\n\t\t\ti++\n\t\t}\n\t\tif i >= len(data) {\n\t\t\treturn 0\n\t\t}\n\t\t// do not count escaped chars\n\t\tif i != 0 && data[i-1] == '\\\\' {\n\t\t\ti++\n\t\t\tcontinue\n\t\t}\n\t\tif data[i] == c {\n\t\t\treturn i\n\t\t}\n\n\t\tif data[i] == '`' {\n\t\t\t// skip a code span\n\t\t\ttmpI := 0\n\t\t\ti++\n\t\t\tfor i < len(data) && data[i] != '`' {\n\t\t\t\tif tmpI == 0 && data[i] == c {\n\t\t\t\t\ttmpI = i\n\t\t\t\t}\n\t\t\t\ti++\n\t\t\t}\n\t\t\tif i >= len(data) {\n\t\t\t\treturn tmpI\n\t\t\t}\n\t\t\ti++\n\t\t} else if data[i] == '[' {\n\t\t\t// skip a link\n\t\t\ttmpI := 0\n\t\t\ti++\n\t\t\tfor i < len(data) && data[i] != ']' {\n\t\t\t\tif tmpI == 0 && data[i] == c {\n\t\t\t\t\ttmpI = i\n\t\t\t\t}\n\t\t\t\ti++\n\t\t\t}\n\t\t\ti++\n\t\t\tfor i < len(data) && (data[i] == ' ' || data[i] == '\\n') {\n\t\t\t\ti++\n\t\t\t}\n\t\t\tif i >= len(data) {\n\t\t\t\treturn tmpI\n\t\t\t}\n\t\t\tif data[i] != '[' && data[i] != '(' { // not a link\n\t\t\t\tif tmpI > 0 {\n\t\t\t\t\treturn tmpI\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcc := data[i]\n\t\t\ti++\n\t\t\tfor i < len(data) && data[i] != cc {\n\t\t\t\tif tmpI == 0 && data[i] == c {\n\t\t\t\t\treturn i\n\t\t\t\t}\n\t\t\t\ti++\n\t\t\t}\n\t\t\tif i >= len(data) {\n\t\t\t\treturn tmpI\n\t\t\t}\n\t\t\ti++\n\t\t}\n\t}\n\treturn 0\n}\n\nfunc helperEmphasis(p *Markdown, data []byte, c byte) (int, *Node) {\n\ti := 0\n\n\t// skip one symbol if coming from emph3\n\tif len(data) > 1 && data[0] == c && data[1] == c {\n\t\ti = 1\n\t}\n\n\tfor i < len(data) {\n\t\tlength := helperFindEmphChar(data[i:], c)\n\t\tif length == 0 {\n\t\t\treturn 0, nil\n\t\t}\n\t\ti += length\n\t\tif i >= len(data) {\n\t\t\treturn 0, nil\n\t\t}\n\n\t\tif i+1 < len(data) && data[i+1] == c {\n\t\t\ti++\n\t\t\tcontinue\n\t\t}\n\n\t\tif data[i] == c && !isspace(data[i-1]) {\n\n\t\t\tif p.extensions&NoIntraEmphasis != 0 {\n\t\t\t\tif !(i+1 == len(data) || isspace(data[i+1]) || ispunct(data[i+1])) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\temph := NewNode(Emph)\n\t\t\tp.inline(emph, data[:i])\n\t\t\treturn i + 1, emph\n\t\t}\n\t}\n\n\treturn 0, nil\n}\n\nfunc helperDoubleEmphasis(p *Markdown, data []byte, c byte) (int, *Node) {\n\ti := 0\n\n\tfor i < len(data) {\n\t\tlength := helperFindEmphChar(data[i:], c)\n\t\tif length == 0 {\n\t\t\treturn 0, nil\n\t\t}\n\t\ti += length\n\n\t\tif i+1 < len(data) && data[i] == c && data[i+1] == c && i > 0 && !isspace(data[i-1]) {\n\t\t\tnodeType := Strong\n\t\t\tif c == '~' {\n\t\t\t\tnodeType = Del\n\t\t\t}\n\t\t\tnode := NewNode(nodeType)\n\t\t\tp.inline(node, data[:i])\n\t\t\treturn i + 2, node\n\t\t}\n\t\ti++\n\t}\n\treturn 0, nil\n}\n\nfunc helperTripleEmphasis(p *Markdown, data []byte, offset int, c byte) (int, *Node) {\n\ti := 0\n\torigData := data\n\tdata = data[offset:]\n\n\tfor i < len(data) {\n\t\tlength := helperFindEmphChar(data[i:], c)\n\t\tif length == 0 {\n\t\t\treturn 0, nil\n\t\t}\n\t\ti += length\n\n\t\t// skip whitespace preceded symbols\n\t\tif data[i] != c || isspace(data[i-1]) {\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch {\n\t\tcase i+2 < len(data) && data[i+1] == c && data[i+2] == c:\n\t\t\t// triple symbol found\n\t\t\tstrong := NewNode(Strong)\n\t\t\tem := NewNode(Emph)\n\t\t\tstrong.AppendChild(em)\n\t\t\tp.inline(em, data[:i])\n\t\t\treturn i + 3, strong\n\t\tcase (i+1 < len(data) && data[i+1] == c):\n\t\t\t// double symbol found, hand over to emph1\n\t\t\tlength, node := helperEmphasis(p, origData[offset-2:], c)\n\t\t\tif length == 0 {\n\t\t\t\treturn 0, nil\n\t\t\t}\n\t\t\treturn length - 2, node\n\t\tdefault:\n\t\t\t// single symbol found, hand over to emph2\n\t\t\tlength, node := helperDoubleEmphasis(p, origData[offset-1:], c)\n\t\t\tif length == 0 {\n\t\t\t\treturn 0, nil\n\t\t\t}\n\t\t\treturn length - 1, node\n\t\t}\n\t}\n\treturn 0, nil\n}\n\nfunc text(s []byte) *Node {\n\tnode := NewNode(Text)\n\tnode.Literal = s\n\treturn node\n}\n\nfunc normalizeURI(s []byte) []byte {\n\treturn s // TODO: implement\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/markdown.go",
    "content": "// Blackfriday Markdown Processor\n// Available at http://github.com/russross/blackfriday\n//\n// Copyright © 2011 Russ Ross <russ@russross.com>.\n// Distributed under the Simplified BSD License.\n// See README.md for details.\n\npackage blackfriday\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\n//\n// Markdown parsing and processing\n//\n\n// Version string of the package. Appears in the rendered document when\n// CompletePage flag is on.\nconst Version = \"2.0\"\n\n// Extensions is a bitwise or'ed collection of enabled Blackfriday's\n// extensions.\ntype Extensions int\n\n// These are the supported markdown parsing extensions.\n// OR these values together to select multiple extensions.\nconst (\n\tNoExtensions           Extensions = 0\n\tNoIntraEmphasis        Extensions = 1 << iota // Ignore emphasis markers inside words\n\tTables                                        // Render tables\n\tFencedCode                                    // Render fenced code blocks\n\tAutolink                                      // Detect embedded URLs that are not explicitly marked\n\tStrikethrough                                 // Strikethrough text using ~~test~~\n\tLaxHTMLBlocks                                 // Loosen up HTML block parsing rules\n\tSpaceHeadings                                 // Be strict about prefix heading rules\n\tHardLineBreak                                 // Translate newlines into line breaks\n\tTabSizeEight                                  // Expand tabs to eight spaces instead of four\n\tFootnotes                                     // Pandoc-style footnotes\n\tNoEmptyLineBeforeBlock                        // No need to insert an empty line to start a (code, quote, ordered list, unordered list) block\n\tHeadingIDs                                    // specify heading IDs  with {#id}\n\tTitleblock                                    // Titleblock ala pandoc\n\tAutoHeadingIDs                                // Create the heading ID from the text\n\tBackslashLineBreak                            // Translate trailing backslashes into line breaks\n\tDefinitionLists                               // Render definition lists\n\n\tCommonHTMLFlags HTMLFlags = UseXHTML | Smartypants |\n\t\tSmartypantsFractions | SmartypantsDashes | SmartypantsLatexDashes\n\n\tCommonExtensions Extensions = NoIntraEmphasis | Tables | FencedCode |\n\t\tAutolink | Strikethrough | SpaceHeadings | HeadingIDs |\n\t\tBackslashLineBreak | DefinitionLists\n)\n\n// ListType contains bitwise or'ed flags for list and list item objects.\ntype ListType int\n\n// These are the possible flag values for the ListItem renderer.\n// Multiple flag values may be ORed together.\n// These are mostly of interest if you are writing a new output format.\nconst (\n\tListTypeOrdered ListType = 1 << iota\n\tListTypeDefinition\n\tListTypeTerm\n\n\tListItemContainsBlock\n\tListItemBeginningOfList // TODO: figure out if this is of any use now\n\tListItemEndOfList\n)\n\n// CellAlignFlags holds a type of alignment in a table cell.\ntype CellAlignFlags int\n\n// These are the possible flag values for the table cell renderer.\n// Only a single one of these values will be used; they are not ORed together.\n// These are mostly of interest if you are writing a new output format.\nconst (\n\tTableAlignmentLeft CellAlignFlags = 1 << iota\n\tTableAlignmentRight\n\tTableAlignmentCenter = (TableAlignmentLeft | TableAlignmentRight)\n)\n\n// The size of a tab stop.\nconst (\n\tTabSizeDefault = 4\n\tTabSizeDouble  = 8\n)\n\n// blockTags is a set of tags that are recognized as HTML block tags.\n// Any of these can be included in markdown text without special escaping.\nvar blockTags = map[string]struct{}{\n\t\"blockquote\": {},\n\t\"del\":        {},\n\t\"div\":        {},\n\t\"dl\":         {},\n\t\"fieldset\":   {},\n\t\"form\":       {},\n\t\"h1\":         {},\n\t\"h2\":         {},\n\t\"h3\":         {},\n\t\"h4\":         {},\n\t\"h5\":         {},\n\t\"h6\":         {},\n\t\"iframe\":     {},\n\t\"ins\":        {},\n\t\"math\":       {},\n\t\"noscript\":   {},\n\t\"ol\":         {},\n\t\"pre\":        {},\n\t\"p\":          {},\n\t\"script\":     {},\n\t\"style\":      {},\n\t\"table\":      {},\n\t\"ul\":         {},\n\n\t// HTML5\n\t\"address\":    {},\n\t\"article\":    {},\n\t\"aside\":      {},\n\t\"canvas\":     {},\n\t\"figcaption\": {},\n\t\"figure\":     {},\n\t\"footer\":     {},\n\t\"header\":     {},\n\t\"hgroup\":     {},\n\t\"main\":       {},\n\t\"nav\":        {},\n\t\"output\":     {},\n\t\"progress\":   {},\n\t\"section\":    {},\n\t\"video\":      {},\n}\n\n// Renderer is the rendering interface. This is mostly of interest if you are\n// implementing a new rendering format.\n//\n// Only an HTML implementation is provided in this repository, see the README\n// for external implementations.\ntype Renderer interface {\n\t// RenderNode is the main rendering method. It will be called once for\n\t// every leaf node and twice for every non-leaf node (first with\n\t// entering=true, then with entering=false). The method should write its\n\t// rendition of the node to the supplied writer w.\n\tRenderNode(w io.Writer, node *Node, entering bool) WalkStatus\n\n\t// RenderHeader is a method that allows the renderer to produce some\n\t// content preceding the main body of the output document. The header is\n\t// understood in the broad sense here. For example, the default HTML\n\t// renderer will write not only the HTML document preamble, but also the\n\t// table of contents if it was requested.\n\t//\n\t// The method will be passed an entire document tree, in case a particular\n\t// implementation needs to inspect it to produce output.\n\t//\n\t// The output should be written to the supplied writer w. If your\n\t// implementation has no header to write, supply an empty implementation.\n\tRenderHeader(w io.Writer, ast *Node)\n\n\t// RenderFooter is a symmetric counterpart of RenderHeader.\n\tRenderFooter(w io.Writer, ast *Node)\n}\n\n// Callback functions for inline parsing. One such function is defined\n// for each character that triggers a response when parsing inline data.\ntype inlineParser func(p *Markdown, data []byte, offset int) (int, *Node)\n\n// Markdown is a type that holds extensions and the runtime state used by\n// Parse, and the renderer. You can not use it directly, construct it with New.\ntype Markdown struct {\n\trenderer          Renderer\n\treferenceOverride ReferenceOverrideFunc\n\trefs              map[string]*reference\n\tinlineCallback    [256]inlineParser\n\textensions        Extensions\n\tnesting           int\n\tmaxNesting        int\n\tinsideLink        bool\n\n\t// Footnotes need to be ordered as well as available to quickly check for\n\t// presence. If a ref is also a footnote, it's stored both in refs and here\n\t// in notes. Slice is nil if footnotes not enabled.\n\tnotes []*reference\n\n\tdoc                  *Node\n\ttip                  *Node // = doc\n\toldTip               *Node\n\tlastMatchedContainer *Node // = doc\n\tallClosed            bool\n}\n\nfunc (p *Markdown) getRef(refid string) (ref *reference, found bool) {\n\tif p.referenceOverride != nil {\n\t\tr, overridden := p.referenceOverride(refid)\n\t\tif overridden {\n\t\t\tif r == nil {\n\t\t\t\treturn nil, false\n\t\t\t}\n\t\t\treturn &reference{\n\t\t\t\tlink:     []byte(r.Link),\n\t\t\t\ttitle:    []byte(r.Title),\n\t\t\t\tnoteID:   0,\n\t\t\t\thasBlock: false,\n\t\t\t\ttext:     []byte(r.Text)}, true\n\t\t}\n\t}\n\t// refs are case insensitive\n\tref, found = p.refs[strings.ToLower(refid)]\n\treturn ref, found\n}\n\nfunc (p *Markdown) finalize(block *Node) {\n\tabove := block.Parent\n\tblock.open = false\n\tp.tip = above\n}\n\nfunc (p *Markdown) addChild(node NodeType, offset uint32) *Node {\n\treturn p.addExistingChild(NewNode(node), offset)\n}\n\nfunc (p *Markdown) addExistingChild(node *Node, offset uint32) *Node {\n\tfor !p.tip.canContain(node.Type) {\n\t\tp.finalize(p.tip)\n\t}\n\tp.tip.AppendChild(node)\n\tp.tip = node\n\treturn node\n}\n\nfunc (p *Markdown) closeUnmatchedBlocks() {\n\tif !p.allClosed {\n\t\tfor p.oldTip != p.lastMatchedContainer {\n\t\t\tparent := p.oldTip.Parent\n\t\t\tp.finalize(p.oldTip)\n\t\t\tp.oldTip = parent\n\t\t}\n\t\tp.allClosed = true\n\t}\n}\n\n//\n//\n// Public interface\n//\n//\n\n// Reference represents the details of a link.\n// See the documentation in Options for more details on use-case.\ntype Reference struct {\n\t// Link is usually the URL the reference points to.\n\tLink string\n\t// Title is the alternate text describing the link in more detail.\n\tTitle string\n\t// Text is the optional text to override the ref with if the syntax used was\n\t// [refid][]\n\tText string\n}\n\n// ReferenceOverrideFunc is expected to be called with a reference string and\n// return either a valid Reference type that the reference string maps to or\n// nil. If overridden is false, the default reference logic will be executed.\n// See the documentation in Options for more details on use-case.\ntype ReferenceOverrideFunc func(reference string) (ref *Reference, overridden bool)\n\n// New constructs a Markdown processor. You can use the same With* functions as\n// for Run() to customize parser's behavior and the renderer.\nfunc New(opts ...Option) *Markdown {\n\tvar p Markdown\n\tfor _, opt := range opts {\n\t\topt(&p)\n\t}\n\tp.refs = make(map[string]*reference)\n\tp.maxNesting = 16\n\tp.insideLink = false\n\tdocNode := NewNode(Document)\n\tp.doc = docNode\n\tp.tip = docNode\n\tp.oldTip = docNode\n\tp.lastMatchedContainer = docNode\n\tp.allClosed = true\n\t// register inline parsers\n\tp.inlineCallback[' '] = maybeLineBreak\n\tp.inlineCallback['*'] = emphasis\n\tp.inlineCallback['_'] = emphasis\n\tif p.extensions&Strikethrough != 0 {\n\t\tp.inlineCallback['~'] = emphasis\n\t}\n\tp.inlineCallback['`'] = codeSpan\n\tp.inlineCallback['\\n'] = lineBreak\n\tp.inlineCallback['['] = link\n\tp.inlineCallback['<'] = leftAngle\n\tp.inlineCallback['\\\\'] = escape\n\tp.inlineCallback['&'] = entity\n\tp.inlineCallback['!'] = maybeImage\n\tp.inlineCallback['^'] = maybeInlineFootnote\n\tif p.extensions&Autolink != 0 {\n\t\tp.inlineCallback['h'] = maybeAutoLink\n\t\tp.inlineCallback['m'] = maybeAutoLink\n\t\tp.inlineCallback['f'] = maybeAutoLink\n\t\tp.inlineCallback['H'] = maybeAutoLink\n\t\tp.inlineCallback['M'] = maybeAutoLink\n\t\tp.inlineCallback['F'] = maybeAutoLink\n\t}\n\tif p.extensions&Footnotes != 0 {\n\t\tp.notes = make([]*reference, 0)\n\t}\n\treturn &p\n}\n\n// Option customizes the Markdown processor's default behavior.\ntype Option func(*Markdown)\n\n// WithRenderer allows you to override the default renderer.\nfunc WithRenderer(r Renderer) Option {\n\treturn func(p *Markdown) {\n\t\tp.renderer = r\n\t}\n}\n\n// WithExtensions allows you to pick some of the many extensions provided by\n// Blackfriday. You can bitwise OR them.\nfunc WithExtensions(e Extensions) Option {\n\treturn func(p *Markdown) {\n\t\tp.extensions = e\n\t}\n}\n\n// WithNoExtensions turns off all extensions and custom behavior.\nfunc WithNoExtensions() Option {\n\treturn func(p *Markdown) {\n\t\tp.extensions = NoExtensions\n\t\tp.renderer = NewHTMLRenderer(HTMLRendererParameters{\n\t\t\tFlags: HTMLFlagsNone,\n\t\t})\n\t}\n}\n\n// WithRefOverride sets an optional function callback that is called every\n// time a reference is resolved.\n//\n// In Markdown, the link reference syntax can be made to resolve a link to\n// a reference instead of an inline URL, in one of the following ways:\n//\n//  * [link text][refid]\n//  * [refid][]\n//\n// Usually, the refid is defined at the bottom of the Markdown document. If\n// this override function is provided, the refid is passed to the override\n// function first, before consulting the defined refids at the bottom. If\n// the override function indicates an override did not occur, the refids at\n// the bottom will be used to fill in the link details.\nfunc WithRefOverride(o ReferenceOverrideFunc) Option {\n\treturn func(p *Markdown) {\n\t\tp.referenceOverride = o\n\t}\n}\n\n// Run is the main entry point to Blackfriday. It parses and renders a\n// block of markdown-encoded text.\n//\n// The simplest invocation of Run takes one argument, input:\n//     output := Run(input)\n// This will parse the input with CommonExtensions enabled and render it with\n// the default HTMLRenderer (with CommonHTMLFlags).\n//\n// Variadic arguments opts can customize the default behavior. Since Markdown\n// type does not contain exported fields, you can not use it directly. Instead,\n// use the With* functions. For example, this will call the most basic\n// functionality, with no extensions:\n//     output := Run(input, WithNoExtensions())\n//\n// You can use any number of With* arguments, even contradicting ones. They\n// will be applied in order of appearance and the latter will override the\n// former:\n//     output := Run(input, WithNoExtensions(), WithExtensions(exts),\n//         WithRenderer(yourRenderer))\nfunc Run(input []byte, opts ...Option) []byte {\n\tr := NewHTMLRenderer(HTMLRendererParameters{\n\t\tFlags: CommonHTMLFlags,\n\t})\n\toptList := []Option{WithRenderer(r), WithExtensions(CommonExtensions)}\n\toptList = append(optList, opts...)\n\tparser := New(optList...)\n\tast := parser.Parse(input)\n\tvar buf bytes.Buffer\n\tparser.renderer.RenderHeader(&buf, ast)\n\tast.Walk(func(node *Node, entering bool) WalkStatus {\n\t\treturn parser.renderer.RenderNode(&buf, node, entering)\n\t})\n\tparser.renderer.RenderFooter(&buf, ast)\n\treturn buf.Bytes()\n}\n\n// Parse is an entry point to the parsing part of Blackfriday. It takes an\n// input markdown document and produces a syntax tree for its contents. This\n// tree can then be rendered with a default or custom renderer, or\n// analyzed/transformed by the caller to whatever non-standard needs they have.\n// The return value is the root node of the syntax tree.\nfunc (p *Markdown) Parse(input []byte) *Node {\n\tp.block(input)\n\t// Walk the tree and finish up some of unfinished blocks\n\tfor p.tip != nil {\n\t\tp.finalize(p.tip)\n\t}\n\t// Walk the tree again and process inline markdown in each block\n\tp.doc.Walk(func(node *Node, entering bool) WalkStatus {\n\t\tif node.Type == Paragraph || node.Type == Heading || node.Type == TableCell {\n\t\t\tp.inline(node, node.content)\n\t\t\tnode.content = nil\n\t\t}\n\t\treturn GoToNext\n\t})\n\tp.parseRefsToAST()\n\treturn p.doc\n}\n\nfunc (p *Markdown) parseRefsToAST() {\n\tif p.extensions&Footnotes == 0 || len(p.notes) == 0 {\n\t\treturn\n\t}\n\tp.tip = p.doc\n\tblock := p.addBlock(List, nil)\n\tblock.IsFootnotesList = true\n\tblock.ListFlags = ListTypeOrdered\n\tflags := ListItemBeginningOfList\n\t// Note: this loop is intentionally explicit, not range-form. This is\n\t// because the body of the loop will append nested footnotes to p.notes and\n\t// we need to process those late additions. Range form would only walk over\n\t// the fixed initial set.\n\tfor i := 0; i < len(p.notes); i++ {\n\t\tref := p.notes[i]\n\t\tp.addExistingChild(ref.footnote, 0)\n\t\tblock := ref.footnote\n\t\tblock.ListFlags = flags | ListTypeOrdered\n\t\tblock.RefLink = ref.link\n\t\tif ref.hasBlock {\n\t\t\tflags |= ListItemContainsBlock\n\t\t\tp.block(ref.title)\n\t\t} else {\n\t\t\tp.inline(block, ref.title)\n\t\t}\n\t\tflags &^= ListItemBeginningOfList | ListItemContainsBlock\n\t}\n\tabove := block.Parent\n\tfinalizeList(block)\n\tp.tip = above\n\tblock.Walk(func(node *Node, entering bool) WalkStatus {\n\t\tif node.Type == Paragraph || node.Type == Heading {\n\t\t\tp.inline(node, node.content)\n\t\t\tnode.content = nil\n\t\t}\n\t\treturn GoToNext\n\t})\n}\n\n//\n// Link references\n//\n// This section implements support for references that (usually) appear\n// as footnotes in a document, and can be referenced anywhere in the document.\n// The basic format is:\n//\n//    [1]: http://www.google.com/ \"Google\"\n//    [2]: http://www.github.com/ \"Github\"\n//\n// Anywhere in the document, the reference can be linked by referring to its\n// label, i.e., 1 and 2 in this example, as in:\n//\n//    This library is hosted on [Github][2], a git hosting site.\n//\n// Actual footnotes as specified in Pandoc and supported by some other Markdown\n// libraries such as php-markdown are also taken care of. They look like this:\n//\n//    This sentence needs a bit of further explanation.[^note]\n//\n//    [^note]: This is the explanation.\n//\n// Footnotes should be placed at the end of the document in an ordered list.\n// Finally, there are inline footnotes such as:\n//\n//    Inline footnotes^[Also supported.] provide a quick inline explanation,\n//    but are rendered at the bottom of the document.\n//\n\n// reference holds all information necessary for a reference-style links or\n// footnotes.\n//\n// Consider this markdown with reference-style links:\n//\n//     [link][ref]\n//\n//     [ref]: /url/ \"tooltip title\"\n//\n// It will be ultimately converted to this HTML:\n//\n//     <p><a href=\\\"/url/\\\" title=\\\"title\\\">link</a></p>\n//\n// And a reference structure will be populated as follows:\n//\n//     p.refs[\"ref\"] = &reference{\n//         link: \"/url/\",\n//         title: \"tooltip title\",\n//     }\n//\n// Alternatively, reference can contain information about a footnote. Consider\n// this markdown:\n//\n//     Text needing a footnote.[^a]\n//\n//     [^a]: This is the note\n//\n// A reference structure will be populated as follows:\n//\n//     p.refs[\"a\"] = &reference{\n//         link: \"a\",\n//         title: \"This is the note\",\n//         noteID: <some positive int>,\n//     }\n//\n// TODO: As you can see, it begs for splitting into two dedicated structures\n// for refs and for footnotes.\ntype reference struct {\n\tlink     []byte\n\ttitle    []byte\n\tnoteID   int // 0 if not a footnote ref\n\thasBlock bool\n\tfootnote *Node // a link to the Item node within a list of footnotes\n\n\ttext []byte // only gets populated by refOverride feature with Reference.Text\n}\n\nfunc (r *reference) String() string {\n\treturn fmt.Sprintf(\"{link: %q, title: %q, text: %q, noteID: %d, hasBlock: %v}\",\n\t\tr.link, r.title, r.text, r.noteID, r.hasBlock)\n}\n\n// Check whether or not data starts with a reference link.\n// If so, it is parsed and stored in the list of references\n// (in the render struct).\n// Returns the number of bytes to skip to move past it,\n// or zero if the first line is not a reference.\nfunc isReference(p *Markdown, data []byte, tabSize int) int {\n\t// up to 3 optional leading spaces\n\tif len(data) < 4 {\n\t\treturn 0\n\t}\n\ti := 0\n\tfor i < 3 && data[i] == ' ' {\n\t\ti++\n\t}\n\n\tnoteID := 0\n\n\t// id part: anything but a newline between brackets\n\tif data[i] != '[' {\n\t\treturn 0\n\t}\n\ti++\n\tif p.extensions&Footnotes != 0 {\n\t\tif i < len(data) && data[i] == '^' {\n\t\t\t// we can set it to anything here because the proper noteIds will\n\t\t\t// be assigned later during the second pass. It just has to be != 0\n\t\t\tnoteID = 1\n\t\t\ti++\n\t\t}\n\t}\n\tidOffset := i\n\tfor i < len(data) && data[i] != '\\n' && data[i] != '\\r' && data[i] != ']' {\n\t\ti++\n\t}\n\tif i >= len(data) || data[i] != ']' {\n\t\treturn 0\n\t}\n\tidEnd := i\n\t// footnotes can have empty ID, like this: [^], but a reference can not be\n\t// empty like this: []. Break early if it's not a footnote and there's no ID\n\tif noteID == 0 && idOffset == idEnd {\n\t\treturn 0\n\t}\n\t// spacer: colon (space | tab)* newline? (space | tab)*\n\ti++\n\tif i >= len(data) || data[i] != ':' {\n\t\treturn 0\n\t}\n\ti++\n\tfor i < len(data) && (data[i] == ' ' || data[i] == '\\t') {\n\t\ti++\n\t}\n\tif i < len(data) && (data[i] == '\\n' || data[i] == '\\r') {\n\t\ti++\n\t\tif i < len(data) && data[i] == '\\n' && data[i-1] == '\\r' {\n\t\t\ti++\n\t\t}\n\t}\n\tfor i < len(data) && (data[i] == ' ' || data[i] == '\\t') {\n\t\ti++\n\t}\n\tif i >= len(data) {\n\t\treturn 0\n\t}\n\n\tvar (\n\t\tlinkOffset, linkEnd   int\n\t\ttitleOffset, titleEnd int\n\t\tlineEnd               int\n\t\traw                   []byte\n\t\thasBlock              bool\n\t)\n\n\tif p.extensions&Footnotes != 0 && noteID != 0 {\n\t\tlinkOffset, linkEnd, raw, hasBlock = scanFootnote(p, data, i, tabSize)\n\t\tlineEnd = linkEnd\n\t} else {\n\t\tlinkOffset, linkEnd, titleOffset, titleEnd, lineEnd = scanLinkRef(p, data, i)\n\t}\n\tif lineEnd == 0 {\n\t\treturn 0\n\t}\n\n\t// a valid ref has been found\n\n\tref := &reference{\n\t\tnoteID:   noteID,\n\t\thasBlock: hasBlock,\n\t}\n\n\tif noteID > 0 {\n\t\t// reusing the link field for the id since footnotes don't have links\n\t\tref.link = data[idOffset:idEnd]\n\t\t// if footnote, it's not really a title, it's the contained text\n\t\tref.title = raw\n\t} else {\n\t\tref.link = data[linkOffset:linkEnd]\n\t\tref.title = data[titleOffset:titleEnd]\n\t}\n\n\t// id matches are case-insensitive\n\tid := string(bytes.ToLower(data[idOffset:idEnd]))\n\n\tp.refs[id] = ref\n\n\treturn lineEnd\n}\n\nfunc scanLinkRef(p *Markdown, data []byte, i int) (linkOffset, linkEnd, titleOffset, titleEnd, lineEnd int) {\n\t// link: whitespace-free sequence, optionally between angle brackets\n\tif data[i] == '<' {\n\t\ti++\n\t}\n\tlinkOffset = i\n\tfor i < len(data) && data[i] != ' ' && data[i] != '\\t' && data[i] != '\\n' && data[i] != '\\r' {\n\t\ti++\n\t}\n\tlinkEnd = i\n\tif data[linkOffset] == '<' && data[linkEnd-1] == '>' {\n\t\tlinkOffset++\n\t\tlinkEnd--\n\t}\n\n\t// optional spacer: (space | tab)* (newline | '\\'' | '\"' | '(' )\n\tfor i < len(data) && (data[i] == ' ' || data[i] == '\\t') {\n\t\ti++\n\t}\n\tif i < len(data) && data[i] != '\\n' && data[i] != '\\r' && data[i] != '\\'' && data[i] != '\"' && data[i] != '(' {\n\t\treturn\n\t}\n\n\t// compute end-of-line\n\tif i >= len(data) || data[i] == '\\r' || data[i] == '\\n' {\n\t\tlineEnd = i\n\t}\n\tif i+1 < len(data) && data[i] == '\\r' && data[i+1] == '\\n' {\n\t\tlineEnd++\n\t}\n\n\t// optional (space|tab)* spacer after a newline\n\tif lineEnd > 0 {\n\t\ti = lineEnd + 1\n\t\tfor i < len(data) && (data[i] == ' ' || data[i] == '\\t') {\n\t\t\ti++\n\t\t}\n\t}\n\n\t// optional title: any non-newline sequence enclosed in '\"() alone on its line\n\tif i+1 < len(data) && (data[i] == '\\'' || data[i] == '\"' || data[i] == '(') {\n\t\ti++\n\t\ttitleOffset = i\n\n\t\t// look for EOL\n\t\tfor i < len(data) && data[i] != '\\n' && data[i] != '\\r' {\n\t\t\ti++\n\t\t}\n\t\tif i+1 < len(data) && data[i] == '\\n' && data[i+1] == '\\r' {\n\t\t\ttitleEnd = i + 1\n\t\t} else {\n\t\t\ttitleEnd = i\n\t\t}\n\n\t\t// step back\n\t\ti--\n\t\tfor i > titleOffset && (data[i] == ' ' || data[i] == '\\t') {\n\t\t\ti--\n\t\t}\n\t\tif i > titleOffset && (data[i] == '\\'' || data[i] == '\"' || data[i] == ')') {\n\t\t\tlineEnd = titleEnd\n\t\t\ttitleEnd = i\n\t\t}\n\t}\n\n\treturn\n}\n\n// The first bit of this logic is the same as Parser.listItem, but the rest\n// is much simpler. This function simply finds the entire block and shifts it\n// over by one tab if it is indeed a block (just returns the line if it's not).\n// blockEnd is the end of the section in the input buffer, and contents is the\n// extracted text that was shifted over one tab. It will need to be rendered at\n// the end of the document.\nfunc scanFootnote(p *Markdown, data []byte, i, indentSize int) (blockStart, blockEnd int, contents []byte, hasBlock bool) {\n\tif i == 0 || len(data) == 0 {\n\t\treturn\n\t}\n\n\t// skip leading whitespace on first line\n\tfor i < len(data) && data[i] == ' ' {\n\t\ti++\n\t}\n\n\tblockStart = i\n\n\t// find the end of the line\n\tblockEnd = i\n\tfor i < len(data) && data[i-1] != '\\n' {\n\t\ti++\n\t}\n\n\t// get working buffer\n\tvar raw bytes.Buffer\n\n\t// put the first line into the working buffer\n\traw.Write(data[blockEnd:i])\n\tblockEnd = i\n\n\t// process the following lines\n\tcontainsBlankLine := false\n\ngatherLines:\n\tfor blockEnd < len(data) {\n\t\ti++\n\n\t\t// find the end of this line\n\t\tfor i < len(data) && data[i-1] != '\\n' {\n\t\t\ti++\n\t\t}\n\n\t\t// if it is an empty line, guess that it is part of this item\n\t\t// and move on to the next line\n\t\tif p.isEmpty(data[blockEnd:i]) > 0 {\n\t\t\tcontainsBlankLine = true\n\t\t\tblockEnd = i\n\t\t\tcontinue\n\t\t}\n\n\t\tn := 0\n\t\tif n = isIndented(data[blockEnd:i], indentSize); n == 0 {\n\t\t\t// this is the end of the block.\n\t\t\t// we don't want to include this last line in the index.\n\t\t\tbreak gatherLines\n\t\t}\n\n\t\t// if there were blank lines before this one, insert a new one now\n\t\tif containsBlankLine {\n\t\t\traw.WriteByte('\\n')\n\t\t\tcontainsBlankLine = false\n\t\t}\n\n\t\t// get rid of that first tab, write to buffer\n\t\traw.Write(data[blockEnd+n : i])\n\t\thasBlock = true\n\n\t\tblockEnd = i\n\t}\n\n\tif data[blockEnd-1] != '\\n' {\n\t\traw.WriteByte('\\n')\n\t}\n\n\tcontents = raw.Bytes()\n\n\treturn\n}\n\n//\n//\n// Miscellaneous helper functions\n//\n//\n\n// Test if a character is a punctuation symbol.\n// Taken from a private function in regexp in the stdlib.\nfunc ispunct(c byte) bool {\n\tfor _, r := range []byte(\"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\") {\n\t\tif c == r {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Test if a character is a whitespace character.\nfunc isspace(c byte) bool {\n\treturn ishorizontalspace(c) || isverticalspace(c)\n}\n\n// Test if a character is a horizontal whitespace character.\nfunc ishorizontalspace(c byte) bool {\n\treturn c == ' ' || c == '\\t'\n}\n\n// Test if a character is a vertical character.\nfunc isverticalspace(c byte) bool {\n\treturn c == '\\n' || c == '\\r' || c == '\\f' || c == '\\v'\n}\n\n// Test if a character is letter.\nfunc isletter(c byte) bool {\n\treturn (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')\n}\n\n// Test if a character is a letter or a digit.\n// TODO: check when this is looking for ASCII alnum and when it should use unicode\nfunc isalnum(c byte) bool {\n\treturn (c >= '0' && c <= '9') || isletter(c)\n}\n\n// Replace tab characters with spaces, aligning to the next TAB_SIZE column.\n// always ends output with a newline\nfunc expandTabs(out *bytes.Buffer, line []byte, tabSize int) {\n\t// first, check for common cases: no tabs, or only tabs at beginning of line\n\ti, prefix := 0, 0\n\tslowcase := false\n\tfor i = 0; i < len(line); i++ {\n\t\tif line[i] == '\\t' {\n\t\t\tif prefix == i {\n\t\t\t\tprefix++\n\t\t\t} else {\n\t\t\t\tslowcase = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// no need to decode runes if all tabs are at the beginning of the line\n\tif !slowcase {\n\t\tfor i = 0; i < prefix*tabSize; i++ {\n\t\t\tout.WriteByte(' ')\n\t\t}\n\t\tout.Write(line[prefix:])\n\t\treturn\n\t}\n\n\t// the slow case: we need to count runes to figure out how\n\t// many spaces to insert for each tab\n\tcolumn := 0\n\ti = 0\n\tfor i < len(line) {\n\t\tstart := i\n\t\tfor i < len(line) && line[i] != '\\t' {\n\t\t\t_, size := utf8.DecodeRune(line[i:])\n\t\t\ti += size\n\t\t\tcolumn++\n\t\t}\n\n\t\tif i > start {\n\t\t\tout.Write(line[start:i])\n\t\t}\n\n\t\tif i >= len(line) {\n\t\t\tbreak\n\t\t}\n\n\t\tfor {\n\t\t\tout.WriteByte(' ')\n\t\t\tcolumn++\n\t\t\tif column%tabSize == 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\ti++\n\t}\n}\n\n// Find if a line counts as indented or not.\n// Returns number of characters the indent is (0 = not indented).\nfunc isIndented(data []byte, indentSize int) int {\n\tif len(data) == 0 {\n\t\treturn 0\n\t}\n\tif data[0] == '\\t' {\n\t\treturn 1\n\t}\n\tif len(data) < indentSize {\n\t\treturn 0\n\t}\n\tfor i := 0; i < indentSize; i++ {\n\t\tif data[i] != ' ' {\n\t\t\treturn 0\n\t\t}\n\t}\n\treturn indentSize\n}\n\n// Create a url-safe slug for fragments\nfunc slugify(in []byte) []byte {\n\tif len(in) == 0 {\n\t\treturn in\n\t}\n\tout := make([]byte, 0, len(in))\n\tsym := false\n\n\tfor _, ch := range in {\n\t\tif isalnum(ch) {\n\t\t\tsym = false\n\t\t\tout = append(out, ch)\n\t\t} else if sym {\n\t\t\tcontinue\n\t\t} else {\n\t\t\tout = append(out, '-')\n\t\t\tsym = true\n\t\t}\n\t}\n\tvar a, b int\n\tvar ch byte\n\tfor a, ch = range out {\n\t\tif ch != '-' {\n\t\t\tbreak\n\t\t}\n\t}\n\tfor b = len(out) - 1; b > 0; b-- {\n\t\tif out[b] != '-' {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn out[a : b+1]\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/node.go",
    "content": "package blackfriday\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n)\n\n// NodeType specifies a type of a single node of a syntax tree. Usually one\n// node (and its type) corresponds to a single markdown feature, e.g. emphasis\n// or code block.\ntype NodeType int\n\n// Constants for identifying different types of nodes. See NodeType.\nconst (\n\tDocument NodeType = iota\n\tBlockQuote\n\tList\n\tItem\n\tParagraph\n\tHeading\n\tHorizontalRule\n\tEmph\n\tStrong\n\tDel\n\tLink\n\tImage\n\tText\n\tHTMLBlock\n\tCodeBlock\n\tSoftbreak\n\tHardbreak\n\tCode\n\tHTMLSpan\n\tTable\n\tTableCell\n\tTableHead\n\tTableBody\n\tTableRow\n)\n\nvar nodeTypeNames = []string{\n\tDocument:       \"Document\",\n\tBlockQuote:     \"BlockQuote\",\n\tList:           \"List\",\n\tItem:           \"Item\",\n\tParagraph:      \"Paragraph\",\n\tHeading:        \"Heading\",\n\tHorizontalRule: \"HorizontalRule\",\n\tEmph:           \"Emph\",\n\tStrong:         \"Strong\",\n\tDel:            \"Del\",\n\tLink:           \"Link\",\n\tImage:          \"Image\",\n\tText:           \"Text\",\n\tHTMLBlock:      \"HTMLBlock\",\n\tCodeBlock:      \"CodeBlock\",\n\tSoftbreak:      \"Softbreak\",\n\tHardbreak:      \"Hardbreak\",\n\tCode:           \"Code\",\n\tHTMLSpan:       \"HTMLSpan\",\n\tTable:          \"Table\",\n\tTableCell:      \"TableCell\",\n\tTableHead:      \"TableHead\",\n\tTableBody:      \"TableBody\",\n\tTableRow:       \"TableRow\",\n}\n\nfunc (t NodeType) String() string {\n\treturn nodeTypeNames[t]\n}\n\n// ListData contains fields relevant to a List and Item node type.\ntype ListData struct {\n\tListFlags       ListType\n\tTight           bool   // Skip <p>s around list item data if true\n\tBulletChar      byte   // '*', '+' or '-' in bullet lists\n\tDelimiter       byte   // '.' or ')' after the number in ordered lists\n\tRefLink         []byte // If not nil, turns this list item into a footnote item and triggers different rendering\n\tIsFootnotesList bool   // This is a list of footnotes\n}\n\n// LinkData contains fields relevant to a Link node type.\ntype LinkData struct {\n\tDestination []byte // Destination is what goes into a href\n\tTitle       []byte // Title is the tooltip thing that goes in a title attribute\n\tNoteID      int    // NoteID contains a serial number of a footnote, zero if it's not a footnote\n\tFootnote    *Node  // If it's a footnote, this is a direct link to the footnote Node. Otherwise nil.\n}\n\n// CodeBlockData contains fields relevant to a CodeBlock node type.\ntype CodeBlockData struct {\n\tIsFenced    bool   // Specifies whether it's a fenced code block or an indented one\n\tInfo        []byte // This holds the info string\n\tFenceChar   byte\n\tFenceLength int\n\tFenceOffset int\n}\n\n// TableCellData contains fields relevant to a TableCell node type.\ntype TableCellData struct {\n\tIsHeader bool           // This tells if it's under the header row\n\tAlign    CellAlignFlags // This holds the value for align attribute\n}\n\n// HeadingData contains fields relevant to a Heading node type.\ntype HeadingData struct {\n\tLevel        int    // This holds the heading level number\n\tHeadingID    string // This might hold heading ID, if present\n\tIsTitleblock bool   // Specifies whether it's a title block\n}\n\n// Node is a single element in the abstract syntax tree of the parsed document.\n// It holds connections to the structurally neighboring nodes and, for certain\n// types of nodes, additional information that might be needed when rendering.\ntype Node struct {\n\tType       NodeType // Determines the type of the node\n\tParent     *Node    // Points to the parent\n\tFirstChild *Node    // Points to the first child, if any\n\tLastChild  *Node    // Points to the last child, if any\n\tPrev       *Node    // Previous sibling; nil if it's the first child\n\tNext       *Node    // Next sibling; nil if it's the last child\n\n\tLiteral []byte // Text contents of the leaf nodes\n\n\tHeadingData   // Populated if Type is Heading\n\tListData      // Populated if Type is List\n\tCodeBlockData // Populated if Type is CodeBlock\n\tLinkData      // Populated if Type is Link\n\tTableCellData // Populated if Type is TableCell\n\n\tcontent []byte // Markdown content of the block nodes\n\topen    bool   // Specifies an open block node that has not been finished to process yet\n}\n\n// NewNode allocates a node of a specified type.\nfunc NewNode(typ NodeType) *Node {\n\treturn &Node{\n\t\tType: typ,\n\t\topen: true,\n\t}\n}\n\nfunc (n *Node) String() string {\n\tellipsis := \"\"\n\tsnippet := n.Literal\n\tif len(snippet) > 16 {\n\t\tsnippet = snippet[:16]\n\t\tellipsis = \"...\"\n\t}\n\treturn fmt.Sprintf(\"%s: '%s%s'\", n.Type, snippet, ellipsis)\n}\n\n// Unlink removes node 'n' from the tree.\n// It panics if the node is nil.\nfunc (n *Node) Unlink() {\n\tif n.Prev != nil {\n\t\tn.Prev.Next = n.Next\n\t} else if n.Parent != nil {\n\t\tn.Parent.FirstChild = n.Next\n\t}\n\tif n.Next != nil {\n\t\tn.Next.Prev = n.Prev\n\t} else if n.Parent != nil {\n\t\tn.Parent.LastChild = n.Prev\n\t}\n\tn.Parent = nil\n\tn.Next = nil\n\tn.Prev = nil\n}\n\n// AppendChild adds a node 'child' as a child of 'n'.\n// It panics if either node is nil.\nfunc (n *Node) AppendChild(child *Node) {\n\tchild.Unlink()\n\tchild.Parent = n\n\tif n.LastChild != nil {\n\t\tn.LastChild.Next = child\n\t\tchild.Prev = n.LastChild\n\t\tn.LastChild = child\n\t} else {\n\t\tn.FirstChild = child\n\t\tn.LastChild = child\n\t}\n}\n\n// InsertBefore inserts 'sibling' immediately before 'n'.\n// It panics if either node is nil.\nfunc (n *Node) InsertBefore(sibling *Node) {\n\tsibling.Unlink()\n\tsibling.Prev = n.Prev\n\tif sibling.Prev != nil {\n\t\tsibling.Prev.Next = sibling\n\t}\n\tsibling.Next = n\n\tn.Prev = sibling\n\tsibling.Parent = n.Parent\n\tif sibling.Prev == nil {\n\t\tsibling.Parent.FirstChild = sibling\n\t}\n}\n\n// IsContainer returns true if 'n' can contain children.\nfunc (n *Node) IsContainer() bool {\n\tswitch n.Type {\n\tcase Document:\n\t\tfallthrough\n\tcase BlockQuote:\n\t\tfallthrough\n\tcase List:\n\t\tfallthrough\n\tcase Item:\n\t\tfallthrough\n\tcase Paragraph:\n\t\tfallthrough\n\tcase Heading:\n\t\tfallthrough\n\tcase Emph:\n\t\tfallthrough\n\tcase Strong:\n\t\tfallthrough\n\tcase Del:\n\t\tfallthrough\n\tcase Link:\n\t\tfallthrough\n\tcase Image:\n\t\tfallthrough\n\tcase Table:\n\t\tfallthrough\n\tcase TableHead:\n\t\tfallthrough\n\tcase TableBody:\n\t\tfallthrough\n\tcase TableRow:\n\t\tfallthrough\n\tcase TableCell:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// IsLeaf returns true if 'n' is a leaf node.\nfunc (n *Node) IsLeaf() bool {\n\treturn !n.IsContainer()\n}\n\nfunc (n *Node) canContain(t NodeType) bool {\n\tif n.Type == List {\n\t\treturn t == Item\n\t}\n\tif n.Type == Document || n.Type == BlockQuote || n.Type == Item {\n\t\treturn t != Item\n\t}\n\tif n.Type == Table {\n\t\treturn t == TableHead || t == TableBody\n\t}\n\tif n.Type == TableHead || n.Type == TableBody {\n\t\treturn t == TableRow\n\t}\n\tif n.Type == TableRow {\n\t\treturn t == TableCell\n\t}\n\treturn false\n}\n\n// WalkStatus allows NodeVisitor to have some control over the tree traversal.\n// It is returned from NodeVisitor and different values allow Node.Walk to\n// decide which node to go to next.\ntype WalkStatus int\n\nconst (\n\t// GoToNext is the default traversal of every node.\n\tGoToNext WalkStatus = iota\n\t// SkipChildren tells walker to skip all children of current node.\n\tSkipChildren\n\t// Terminate tells walker to terminate the traversal.\n\tTerminate\n)\n\n// NodeVisitor is a callback to be called when traversing the syntax tree.\n// Called twice for every node: once with entering=true when the branch is\n// first visited, then with entering=false after all the children are done.\ntype NodeVisitor func(node *Node, entering bool) WalkStatus\n\n// Walk is a convenience method that instantiates a walker and starts a\n// traversal of subtree rooted at n.\nfunc (n *Node) Walk(visitor NodeVisitor) {\n\tw := newNodeWalker(n)\n\tfor w.current != nil {\n\t\tstatus := visitor(w.current, w.entering)\n\t\tswitch status {\n\t\tcase GoToNext:\n\t\t\tw.next()\n\t\tcase SkipChildren:\n\t\t\tw.entering = false\n\t\t\tw.next()\n\t\tcase Terminate:\n\t\t\treturn\n\t\t}\n\t}\n}\n\ntype nodeWalker struct {\n\tcurrent  *Node\n\troot     *Node\n\tentering bool\n}\n\nfunc newNodeWalker(root *Node) *nodeWalker {\n\treturn &nodeWalker{\n\t\tcurrent:  root,\n\t\troot:     root,\n\t\tentering: true,\n\t}\n}\n\nfunc (nw *nodeWalker) next() {\n\tif (!nw.current.IsContainer() || !nw.entering) && nw.current == nw.root {\n\t\tnw.current = nil\n\t\treturn\n\t}\n\tif nw.entering && nw.current.IsContainer() {\n\t\tif nw.current.FirstChild != nil {\n\t\t\tnw.current = nw.current.FirstChild\n\t\t\tnw.entering = true\n\t\t} else {\n\t\t\tnw.entering = false\n\t\t}\n\t} else if nw.current.Next == nil {\n\t\tnw.current = nw.current.Parent\n\t\tnw.entering = false\n\t} else {\n\t\tnw.current = nw.current.Next\n\t\tnw.entering = true\n\t}\n}\n\nfunc dump(ast *Node) {\n\tfmt.Println(dumpString(ast))\n}\n\nfunc dumpR(ast *Node, depth int) string {\n\tif ast == nil {\n\t\treturn \"\"\n\t}\n\tindent := bytes.Repeat([]byte(\"\\t\"), depth)\n\tcontent := ast.Literal\n\tif content == nil {\n\t\tcontent = ast.content\n\t}\n\tresult := fmt.Sprintf(\"%s%s(%q)\\n\", indent, ast.Type, content)\n\tfor n := ast.FirstChild; n != nil; n = n.Next {\n\t\tresult += dumpR(n, depth+1)\n\t}\n\treturn result\n}\n\nfunc dumpString(ast *Node) string {\n\treturn dumpR(ast, 0)\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/smartypants.go",
    "content": "//\n// Blackfriday Markdown Processor\n// Available at http://github.com/russross/blackfriday\n//\n// Copyright © 2011 Russ Ross <russ@russross.com>.\n// Distributed under the Simplified BSD License.\n// See README.md for details.\n//\n\n//\n//\n// SmartyPants rendering\n//\n//\n\npackage blackfriday\n\nimport (\n\t\"bytes\"\n\t\"io\"\n)\n\n// SPRenderer is a struct containing state of a Smartypants renderer.\ntype SPRenderer struct {\n\tinSingleQuote bool\n\tinDoubleQuote bool\n\tcallbacks     [256]smartCallback\n}\n\nfunc wordBoundary(c byte) bool {\n\treturn c == 0 || isspace(c) || ispunct(c)\n}\n\nfunc tolower(c byte) byte {\n\tif c >= 'A' && c <= 'Z' {\n\t\treturn c - 'A' + 'a'\n\t}\n\treturn c\n}\n\nfunc isdigit(c byte) bool {\n\treturn c >= '0' && c <= '9'\n}\n\nfunc smartQuoteHelper(out *bytes.Buffer, previousChar byte, nextChar byte, quote byte, isOpen *bool, addNBSP bool) bool {\n\t// edge of the buffer is likely to be a tag that we don't get to see,\n\t// so we treat it like text sometimes\n\n\t// enumerate all sixteen possibilities for (previousChar, nextChar)\n\t// each can be one of {0, space, punct, other}\n\tswitch {\n\tcase previousChar == 0 && nextChar == 0:\n\t\t// context is not any help here, so toggle\n\t\t*isOpen = !*isOpen\n\tcase isspace(previousChar) && nextChar == 0:\n\t\t// [ \"] might be [ \"<code>foo...]\n\t\t*isOpen = true\n\tcase ispunct(previousChar) && nextChar == 0:\n\t\t// [!\"] hmm... could be [Run!\"] or [(\"<code>...]\n\t\t*isOpen = false\n\tcase /* isnormal(previousChar) && */ nextChar == 0:\n\t\t// [a\"] is probably a close\n\t\t*isOpen = false\n\tcase previousChar == 0 && isspace(nextChar):\n\t\t// [\" ] might be [...foo</code>\" ]\n\t\t*isOpen = false\n\tcase isspace(previousChar) && isspace(nextChar):\n\t\t// [ \" ] context is not any help here, so toggle\n\t\t*isOpen = !*isOpen\n\tcase ispunct(previousChar) && isspace(nextChar):\n\t\t// [!\" ] is probably a close\n\t\t*isOpen = false\n\tcase /* isnormal(previousChar) && */ isspace(nextChar):\n\t\t// [a\" ] this is one of the easy cases\n\t\t*isOpen = false\n\tcase previousChar == 0 && ispunct(nextChar):\n\t\t// [\"!] hmm... could be [\"$1.95] or [</code>\"!...]\n\t\t*isOpen = false\n\tcase isspace(previousChar) && ispunct(nextChar):\n\t\t// [ \"!] looks more like [ \"$1.95]\n\t\t*isOpen = true\n\tcase ispunct(previousChar) && ispunct(nextChar):\n\t\t// [!\"!] context is not any help here, so toggle\n\t\t*isOpen = !*isOpen\n\tcase /* isnormal(previousChar) && */ ispunct(nextChar):\n\t\t// [a\"!] is probably a close\n\t\t*isOpen = false\n\tcase previousChar == 0 /* && isnormal(nextChar) */ :\n\t\t// [\"a] is probably an open\n\t\t*isOpen = true\n\tcase isspace(previousChar) /* && isnormal(nextChar) */ :\n\t\t// [ \"a] this is one of the easy cases\n\t\t*isOpen = true\n\tcase ispunct(previousChar) /* && isnormal(nextChar) */ :\n\t\t// [!\"a] is probably an open\n\t\t*isOpen = true\n\tdefault:\n\t\t// [a'b] maybe a contraction?\n\t\t*isOpen = false\n\t}\n\n\t// Note that with the limited lookahead, this non-breaking\n\t// space will also be appended to single double quotes.\n\tif addNBSP && !*isOpen {\n\t\tout.WriteString(\"&nbsp;\")\n\t}\n\n\tout.WriteByte('&')\n\tif *isOpen {\n\t\tout.WriteByte('l')\n\t} else {\n\t\tout.WriteByte('r')\n\t}\n\tout.WriteByte(quote)\n\tout.WriteString(\"quo;\")\n\n\tif addNBSP && *isOpen {\n\t\tout.WriteString(\"&nbsp;\")\n\t}\n\n\treturn true\n}\n\nfunc (r *SPRenderer) smartSingleQuote(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif len(text) >= 2 {\n\t\tt1 := tolower(text[1])\n\n\t\tif t1 == '\\'' {\n\t\t\tnextChar := byte(0)\n\t\t\tif len(text) >= 3 {\n\t\t\t\tnextChar = text[2]\n\t\t\t}\n\t\t\tif smartQuoteHelper(out, previousChar, nextChar, 'd', &r.inDoubleQuote, false) {\n\t\t\t\treturn 1\n\t\t\t}\n\t\t}\n\n\t\tif (t1 == 's' || t1 == 't' || t1 == 'm' || t1 == 'd') && (len(text) < 3 || wordBoundary(text[2])) {\n\t\t\tout.WriteString(\"&rsquo;\")\n\t\t\treturn 0\n\t\t}\n\n\t\tif len(text) >= 3 {\n\t\t\tt2 := tolower(text[2])\n\n\t\t\tif ((t1 == 'r' && t2 == 'e') || (t1 == 'l' && t2 == 'l') || (t1 == 'v' && t2 == 'e')) &&\n\t\t\t\t(len(text) < 4 || wordBoundary(text[3])) {\n\t\t\t\tout.WriteString(\"&rsquo;\")\n\t\t\t\treturn 0\n\t\t\t}\n\t\t}\n\t}\n\n\tnextChar := byte(0)\n\tif len(text) > 1 {\n\t\tnextChar = text[1]\n\t}\n\tif smartQuoteHelper(out, previousChar, nextChar, 's', &r.inSingleQuote, false) {\n\t\treturn 0\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartParens(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif len(text) >= 3 {\n\t\tt1 := tolower(text[1])\n\t\tt2 := tolower(text[2])\n\n\t\tif t1 == 'c' && t2 == ')' {\n\t\t\tout.WriteString(\"&copy;\")\n\t\t\treturn 2\n\t\t}\n\n\t\tif t1 == 'r' && t2 == ')' {\n\t\t\tout.WriteString(\"&reg;\")\n\t\t\treturn 2\n\t\t}\n\n\t\tif len(text) >= 4 && t1 == 't' && t2 == 'm' && text[3] == ')' {\n\t\t\tout.WriteString(\"&trade;\")\n\t\t\treturn 3\n\t\t}\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartDash(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif len(text) >= 2 {\n\t\tif text[1] == '-' {\n\t\t\tout.WriteString(\"&mdash;\")\n\t\t\treturn 1\n\t\t}\n\n\t\tif wordBoundary(previousChar) && wordBoundary(text[1]) {\n\t\t\tout.WriteString(\"&ndash;\")\n\t\t\treturn 0\n\t\t}\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartDashLatex(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif len(text) >= 3 && text[1] == '-' && text[2] == '-' {\n\t\tout.WriteString(\"&mdash;\")\n\t\treturn 2\n\t}\n\tif len(text) >= 2 && text[1] == '-' {\n\t\tout.WriteString(\"&ndash;\")\n\t\treturn 1\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartAmpVariant(out *bytes.Buffer, previousChar byte, text []byte, quote byte, addNBSP bool) int {\n\tif bytes.HasPrefix(text, []byte(\"&quot;\")) {\n\t\tnextChar := byte(0)\n\t\tif len(text) >= 7 {\n\t\t\tnextChar = text[6]\n\t\t}\n\t\tif smartQuoteHelper(out, previousChar, nextChar, quote, &r.inDoubleQuote, addNBSP) {\n\t\t\treturn 5\n\t\t}\n\t}\n\n\tif bytes.HasPrefix(text, []byte(\"&#0;\")) {\n\t\treturn 3\n\t}\n\n\tout.WriteByte('&')\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartAmp(angledQuotes, addNBSP bool) func(*bytes.Buffer, byte, []byte) int {\n\tvar quote byte = 'd'\n\tif angledQuotes {\n\t\tquote = 'a'\n\t}\n\n\treturn func(out *bytes.Buffer, previousChar byte, text []byte) int {\n\t\treturn r.smartAmpVariant(out, previousChar, text, quote, addNBSP)\n\t}\n}\n\nfunc (r *SPRenderer) smartPeriod(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif len(text) >= 3 && text[1] == '.' && text[2] == '.' {\n\t\tout.WriteString(\"&hellip;\")\n\t\treturn 2\n\t}\n\n\tif len(text) >= 5 && text[1] == ' ' && text[2] == '.' && text[3] == ' ' && text[4] == '.' {\n\t\tout.WriteString(\"&hellip;\")\n\t\treturn 4\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartBacktick(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif len(text) >= 2 && text[1] == '`' {\n\t\tnextChar := byte(0)\n\t\tif len(text) >= 3 {\n\t\t\tnextChar = text[2]\n\t\t}\n\t\tif smartQuoteHelper(out, previousChar, nextChar, 'd', &r.inDoubleQuote, false) {\n\t\t\treturn 1\n\t\t}\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartNumberGeneric(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif wordBoundary(previousChar) && previousChar != '/' && len(text) >= 3 {\n\t\t// is it of the form digits/digits(word boundary)?, i.e., \\d+/\\d+\\b\n\t\t// note: check for regular slash (/) or fraction slash (⁄, 0x2044, or 0xe2 81 84 in utf-8)\n\t\t//       and avoid changing dates like 1/23/2005 into fractions.\n\t\tnumEnd := 0\n\t\tfor len(text) > numEnd && isdigit(text[numEnd]) {\n\t\t\tnumEnd++\n\t\t}\n\t\tif numEnd == 0 {\n\t\t\tout.WriteByte(text[0])\n\t\t\treturn 0\n\t\t}\n\t\tdenStart := numEnd + 1\n\t\tif len(text) > numEnd+3 && text[numEnd] == 0xe2 && text[numEnd+1] == 0x81 && text[numEnd+2] == 0x84 {\n\t\t\tdenStart = numEnd + 3\n\t\t} else if len(text) < numEnd+2 || text[numEnd] != '/' {\n\t\t\tout.WriteByte(text[0])\n\t\t\treturn 0\n\t\t}\n\t\tdenEnd := denStart\n\t\tfor len(text) > denEnd && isdigit(text[denEnd]) {\n\t\t\tdenEnd++\n\t\t}\n\t\tif denEnd == denStart {\n\t\t\tout.WriteByte(text[0])\n\t\t\treturn 0\n\t\t}\n\t\tif len(text) == denEnd || wordBoundary(text[denEnd]) && text[denEnd] != '/' {\n\t\t\tout.WriteString(\"<sup>\")\n\t\t\tout.Write(text[:numEnd])\n\t\t\tout.WriteString(\"</sup>&frasl;<sub>\")\n\t\t\tout.Write(text[denStart:denEnd])\n\t\t\tout.WriteString(\"</sub>\")\n\t\t\treturn denEnd - 1\n\t\t}\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartNumber(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif wordBoundary(previousChar) && previousChar != '/' && len(text) >= 3 {\n\t\tif text[0] == '1' && text[1] == '/' && text[2] == '2' {\n\t\t\tif len(text) < 4 || wordBoundary(text[3]) && text[3] != '/' {\n\t\t\t\tout.WriteString(\"&frac12;\")\n\t\t\t\treturn 2\n\t\t\t}\n\t\t}\n\n\t\tif text[0] == '1' && text[1] == '/' && text[2] == '4' {\n\t\t\tif len(text) < 4 || wordBoundary(text[3]) && text[3] != '/' || (len(text) >= 5 && tolower(text[3]) == 't' && tolower(text[4]) == 'h') {\n\t\t\t\tout.WriteString(\"&frac14;\")\n\t\t\t\treturn 2\n\t\t\t}\n\t\t}\n\n\t\tif text[0] == '3' && text[1] == '/' && text[2] == '4' {\n\t\t\tif len(text) < 4 || wordBoundary(text[3]) && text[3] != '/' || (len(text) >= 6 && tolower(text[3]) == 't' && tolower(text[4]) == 'h' && tolower(text[5]) == 's') {\n\t\t\t\tout.WriteString(\"&frac34;\")\n\t\t\t\treturn 2\n\t\t\t}\n\t\t}\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartDoubleQuoteVariant(out *bytes.Buffer, previousChar byte, text []byte, quote byte) int {\n\tnextChar := byte(0)\n\tif len(text) > 1 {\n\t\tnextChar = text[1]\n\t}\n\tif !smartQuoteHelper(out, previousChar, nextChar, quote, &r.inDoubleQuote, false) {\n\t\tout.WriteString(\"&quot;\")\n\t}\n\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartDoubleQuote(out *bytes.Buffer, previousChar byte, text []byte) int {\n\treturn r.smartDoubleQuoteVariant(out, previousChar, text, 'd')\n}\n\nfunc (r *SPRenderer) smartAngledDoubleQuote(out *bytes.Buffer, previousChar byte, text []byte) int {\n\treturn r.smartDoubleQuoteVariant(out, previousChar, text, 'a')\n}\n\nfunc (r *SPRenderer) smartLeftAngle(out *bytes.Buffer, previousChar byte, text []byte) int {\n\ti := 0\n\n\tfor i < len(text) && text[i] != '>' {\n\t\ti++\n\t}\n\n\tout.Write(text[:i+1])\n\treturn i\n}\n\ntype smartCallback func(out *bytes.Buffer, previousChar byte, text []byte) int\n\n// NewSmartypantsRenderer constructs a Smartypants renderer object.\nfunc NewSmartypantsRenderer(flags HTMLFlags) *SPRenderer {\n\tvar (\n\t\tr SPRenderer\n\n\t\tsmartAmpAngled      = r.smartAmp(true, false)\n\t\tsmartAmpAngledNBSP  = r.smartAmp(true, true)\n\t\tsmartAmpRegular     = r.smartAmp(false, false)\n\t\tsmartAmpRegularNBSP = r.smartAmp(false, true)\n\n\t\taddNBSP = flags&SmartypantsQuotesNBSP != 0\n\t)\n\n\tif flags&SmartypantsAngledQuotes == 0 {\n\t\tr.callbacks['\"'] = r.smartDoubleQuote\n\t\tif !addNBSP {\n\t\t\tr.callbacks['&'] = smartAmpRegular\n\t\t} else {\n\t\t\tr.callbacks['&'] = smartAmpRegularNBSP\n\t\t}\n\t} else {\n\t\tr.callbacks['\"'] = r.smartAngledDoubleQuote\n\t\tif !addNBSP {\n\t\t\tr.callbacks['&'] = smartAmpAngled\n\t\t} else {\n\t\t\tr.callbacks['&'] = smartAmpAngledNBSP\n\t\t}\n\t}\n\tr.callbacks['\\''] = r.smartSingleQuote\n\tr.callbacks['('] = r.smartParens\n\tif flags&SmartypantsDashes != 0 {\n\t\tif flags&SmartypantsLatexDashes == 0 {\n\t\t\tr.callbacks['-'] = r.smartDash\n\t\t} else {\n\t\t\tr.callbacks['-'] = r.smartDashLatex\n\t\t}\n\t}\n\tr.callbacks['.'] = r.smartPeriod\n\tif flags&SmartypantsFractions == 0 {\n\t\tr.callbacks['1'] = r.smartNumber\n\t\tr.callbacks['3'] = r.smartNumber\n\t} else {\n\t\tfor ch := '1'; ch <= '9'; ch++ {\n\t\t\tr.callbacks[ch] = r.smartNumberGeneric\n\t\t}\n\t}\n\tr.callbacks['<'] = r.smartLeftAngle\n\tr.callbacks['`'] = r.smartBacktick\n\treturn &r\n}\n\n// Process is the entry point of the Smartypants renderer.\nfunc (r *SPRenderer) Process(w io.Writer, text []byte) {\n\tmark := 0\n\tfor i := 0; i < len(text); i++ {\n\t\tif action := r.callbacks[text[i]]; action != nil {\n\t\t\tif i > mark {\n\t\t\t\tw.Write(text[mark:i])\n\t\t\t}\n\t\t\tpreviousChar := byte(0)\n\t\t\tif i > 0 {\n\t\t\t\tpreviousChar = text[i-1]\n\t\t\t}\n\t\t\tvar tmp bytes.Buffer\n\t\t\ti += action(&tmp, previousChar, text[i:])\n\t\t\tw.Write(tmp.Bytes())\n\t\t\tmark = i + 1\n\t\t}\n\t}\n\tif mark < len(text) {\n\t\tw.Write(text[mark:])\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/seccomp/libseccomp-golang/.gitignore",
    "content": "*~\n*.swp\n*.orig\ntags\n"
  },
  {
    "path": "vendor/github.com/seccomp/libseccomp-golang/.golangci.yml",
    "content": "# For documentation, see https://golangci-lint.run/usage/configuration/\nversion: \"2\"\n\nformatters:\n  enable:\n    - gofumpt\n\nlinters:\n  exclusions:\n    generated: disable\n    presets:\n      - std-error-handling\n"
  },
  {
    "path": "vendor/github.com/seccomp/libseccomp-golang/CHANGELOG",
    "content": "libseccomp-golang: Releases\n===============================================================================\nhttps://github.com/seccomp/libseccomp-golang\n\n* Version 0.11.1 - August 5, 2025\n- Make GetArchFromString recognize \"loong64\"\n\n* Version 0.11.0 - April 23, 2025\n- Add new architectures (LOONGARCH64, M68K, SH, SHEB)\n- Add support for SCMP_FLTATR_CTL_WAITKILL (GetWaitKill, SetWaitKill)\n- Add support for filter precompute (Precompute)\n- Add support for transactions (Transaction{Start,Commit,Reject})\n- Add ExportBPFMem\n- Improve documentation for struct fields\n- Fix TestRuleAddAndLoad for ppc architecture\n- Fix TestRuleAddAndLoad to not use magic number\n- Remove unused get_*_version implementation\n- Test against latest libseccomp and Go versions\n\n* Version 0.10.0 - June 9, 2022\n- Minimum supported version of libseccomp bumped to v2.3.1\n- Add seccomp userspace notification API (ActNotify, filter.*Notif*)\n- Add filter.{Get,Set}SSB (to support SCMP_FLTATR_CTL_SSB)\n- Add filter.{Get,Set}Optimize (to support SCMP_FLTATR_CTL_OPTIMIZE)\n- Add filter.{Get,Set}RawRC (to support SCMP_FLTATR_API_SYSRAWRC)\n- Add ArchPARISC, ArchPARISC64, ArchRISCV64\n- Add ActKillProcess and ActKillThread; deprecate ActKill\n- Add go module support\n- Return ErrSyscallDoesNotExist when unable to resolve a syscall\n- Fix some functions to check for both kernel level API and libseccomp version\n- Fix MakeCondition to use sanitizeCompareOp\n- Fix AddRule to handle EACCES (from libseccomp >= 2.5.0)\n- Updated the main docs and converted to README.md\n- Added CONTRIBUTING.md, SECURITY.md, and administrative docs under doc/admin\n- Add GitHub action CI, enable more linters\n- test: test against various libseccomp versions\n- test: fix and simplify execInSubprocess\n- test: fix APILevelIsSupported\n- Refactor the Errno(-1 * retCode) pattern\n- Refactor/unify libseccomp version / API level checks\n- Code cleanups (linter, formatting, spelling fixes)\n- Cleanup: use errors.New instead of fmt.Errorf where appropriate\n- Cleanup: remove duplicated cgo stuff, redundant linux build tag\n\n* Version 0.9.1 - May 21, 2019\n- Minimum supported version of libseccomp bumped to v2.2.0\n- Use Libseccomp's `seccomp_version` API to retrieve library version\n- Unconditionally set TSync attribute for filters, due to Go's heavily threaded nature\n- Fix CVE-2017-18367 - Multiple syscall arguments were incorrectly combined with logical-OR, instead of logical-AND\n- Fix a failure to build on Debian-based distributions due to CGo code\n- Fix unit test failures on 32-bit architectures\n- Improve several errors to be more verbose about their causes\n- Add support for SCMP_ACT_LOG (with libseccomp versions 2.4.x and higher), permitting syscalls but logging their execution\n- Add support for SCMP_FLTATR_CTL_LOG (with libseccomp versions 2.4.x and higher), logging not-allowed actions when they are denied\n\n* Version 0.9.0 - January 5, 2017\n- Initial tagged release\n"
  },
  {
    "path": "vendor/github.com/seccomp/libseccomp-golang/CONTRIBUTING.md",
    "content": "How to Submit Patches to the libseccomp-golang Project\n===============================================================================\nhttps://github.com/seccomp/libseccomp-golang\n\nThis document is intended to act as a guide to help you contribute to the\nlibseccomp-golang project.  It is not perfect, and there will always be\nexceptions to the rules described here, but by following the instructions below\nyou should have a much easier time getting your work merged with the upstream\nproject.\n\n## Test Your Code Using Existing Tests\n\nA number of tests and lint related recipes are provided in the Makefile, if\nyou want to run the standard regression tests, you can execute the following:\n\n\t# make check\n\nIn order to use it, the 'golangci-lint' tool is needed, which can be found at:\n\n* https://github.com/golangci/golangci-lint\n\n## Add New Tests for New Functionality\n\nAny submissions which add functionality, or significantly change the existing\ncode, should include additional tests to verify the proper operation of the\nproposed changes.\n\n## Explain Your Work\n\nAt the top of every patch you should include a description of the problem you\nare trying to solve, how you solved it, and why you chose the solution you\nimplemented.  If you are submitting a bug fix, it is also incredibly helpful\nif you can describe/include a reproducer for the problem in the description as\nwell as instructions on how to test for the bug and verify that it has been\nfixed.\n\n## Sign Your Work\n\nThe sign-off is a simple line at the end of the patch description, which\ncertifies that you wrote it or otherwise have the right to pass it on as an\nopen-source patch.  The \"Developer's Certificate of Origin\" pledge is taken\nfrom the Linux Kernel and the rules are pretty simple:\n\n\tDeveloper's Certificate of Origin 1.1\n\n\tBy making a contribution to this project, I certify that:\n\n\t(a) The contribution was created in whole or in part by me and I\n\t    have the right to submit it under the open source license\n\t    indicated in the file; or\n\n\t(b) The contribution is based upon previous work that, to the best\n\t    of my knowledge, is covered under an appropriate open source\n\t    license and I have the right under that license to submit that\n\t    work with modifications, whether created in whole or in part\n\t    by me, under the same open source license (unless I am\n\t    permitted to submit under a different license), as indicated\n\t    in the file; or\n\n\t(c) The contribution was provided directly to me by some other\n\t    person who certified (a), (b) or (c) and I have not modified\n\t    it.\n\n\t(d) I understand and agree that this project and the contribution\n\t    are public and that a record of the contribution (including all\n\t    personal information I submit with it, including my sign-off) is\n\t    maintained indefinitely and may be redistributed consistent with\n\t    this project or the open source license(s) involved.\n\n... then you just add a line to the bottom of your patch description, with\nyour real name, saying:\n\n\tSigned-off-by: Random J Developer <random@developer.example.org>\n\nYou can add this to your commit description in `git` with `git commit -s`\n\n## Post Your Patches Upstream\n\nThe libseccomp project accepts both GitHub pull requests and patches sent via\nthe mailing list.  GitHub pull requests are preferred.  This sections below\nexplain how to contribute via either method. Please read each step and perform\nall steps that apply to your chosen contribution method.\n\n### Submitting via Email\n\nDepending on how you decided to work with the libseccomp code base and what\ntools you are using there are different ways to generate your patch(es).\nHowever, regardless of what tools you use, you should always generate your\npatches using the \"unified\" diff/patch format and the patches should always\napply to the libseccomp source tree using the following command from the top\ndirectory of the libseccomp sources:\n\n\t# patch -p1 < changes.patch\n\nIf you are not using git, stacked git (stgit), or some other tool which can\ngenerate patch files for you automatically, you may find the following command\nhelpful in generating patches, where \"libseccomp.orig/\" is the unmodified\nsource code directory and \"libseccomp/\" is the source code directory with your\nchanges:\n\n\t# diff -purN libseccomp.orig/ libseccomp/\n\nWhen in doubt please generate your patch and try applying it to an unmodified\ncopy of the libseccomp sources; if it fails for you, it will fail for the rest\nof us.\n\nFinally, you will need to email your patches to the mailing list so they can\nbe reviewed and potentially merged into the main libseccomp repository.  When\nsending patches to the mailing list it is important to send your email in text\nform, no HTML mail please, and ensure that your email client does not mangle\nyour patches.  It should be possible to save your raw email to disk and apply\nit directly to the libseccomp source code; if that fails then you likely have\na problem with your email client.  When in doubt try a test first by sending\nyourself an email with your patch and attempting to apply the emailed patch to\nthe libseccomp repository; if it fails for you, it will fail for the rest of\nus trying to test your patch and include it in the main libseccomp repository.\n\n### Submitting via GitHub\n\nSee [this guide](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request) if you've never done this before.\n"
  },
  {
    "path": "vendor/github.com/seccomp/libseccomp-golang/LICENSE",
    "content": "Copyright (c) 2015 Matthew Heon <mheon@redhat.com>\nCopyright (c) 2015 Paul Moore <pmoore@redhat.com>\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- Redistributions of source code must retain the above copyright notice,\n  this 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\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 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/seccomp/libseccomp-golang/Makefile",
    "content": "# libseccomp-golang\n\n.PHONY: all check check-build check-syntax fix-syntax vet test lint\n\nall: check-build\n\ncheck: lint test\n\ncheck-build:\n\tgo build\n\ncheck-syntax:\n\tgofmt -d .\n\nfix-syntax:\n\tgofmt -w .\n\nvet:\n\tgo vet -v ./...\n\n# Previous bugs have made the tests freeze until the timeout. Golang default\n# timeout for tests is 10 minutes, which is too long, considering current tests\n# can be executed in less than 1 second. Reduce the timeout, so problems can\n# be noticed earlier in the CI.\nTEST_TIMEOUT=10s\n\ntest:\n\tgo test -v -timeout $(TEST_TIMEOUT)\n\nlint:\n\tgolangci-lint run .\n"
  },
  {
    "path": "vendor/github.com/seccomp/libseccomp-golang/README.md",
    "content": "![libseccomp Golang Bindings](https://github.com/seccomp/libseccomp-artwork/blob/main/logo/libseccomp-color_text.png)\n===============================================================================\nhttps://github.com/seccomp/libseccomp-golang\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/seccomp/libseccomp-golang.svg)](https://pkg.go.dev/github.com/seccomp/libseccomp-golang)\n[![validate](https://github.com/seccomp/libseccomp-golang/actions/workflows/validate.yml/badge.svg)](https://github.com/seccomp/libseccomp-golang/actions/workflows/validate.yml)\n[![test](https://github.com/seccomp/libseccomp-golang/actions/workflows/test.yml/badge.svg)](https://github.com/seccomp/libseccomp-golang/actions/workflows/test.yml)\n\nThe libseccomp library provides an easy to use, platform independent, interface\nto the Linux Kernel's syscall filtering mechanism.  The libseccomp API is\ndesigned to abstract away the underlying BPF based syscall filter language and\npresent a more conventional function-call based filtering interface that should\nbe familiar to, and easily adopted by, application developers.\n\nThe libseccomp-golang library provides a Go based interface to the libseccomp\nlibrary.\n\n## Online Resources\n\nThe library source repository currently lives on GitHub at the following URLs:\n\n* https://github.com/seccomp/libseccomp-golang\n* https://github.com/seccomp/libseccomp\n\nDocumentation for this package is also available at:\n\n* https://pkg.go.dev/github.com/seccomp/libseccomp-golang\n\n## Verifying Releases\n\nStarting with libseccomp-golang v0.10.0, the git tag corresponding to each\nrelease should be signed by one of the libseccomp-golang maintainers.  It is\nrecommended that before use you verify the release tags using the following\ncommand:\n\n\t% git tag -v <tag>\n\nAt present, only the following keys, specified via the fingerprints below, are\nauthorized to sign official libseccomp-golang release tags:\n\n\tPaul Moore <paul@paul-moore.com>\n\t7100 AADF AE6E 6E94 0D2E  0AD6 55E4 5A5A E8CA 7C8A\n\n\tTom Hromatka <tom.hromatka@oracle.com>\n\t47A6 8FCE 37C7 D702 4FD6  5E11 356C E62C 2B52 4099\n\n\tKir Kolyshkin <kolyshkin@gmail.com>\n\tC242 8CD7 5720 FACD CF76  B6EA 17DE 5ECB 75A1 100E\n\nMore information on GnuPG and git tag verification can be found at their\nrespective websites: https://git-scm.com/docs/git and https://gnupg.org.\n\n## Installing the package\n\n\t% go get github.com/seccomp/libseccomp-golang\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n"
  },
  {
    "path": "vendor/github.com/seccomp/libseccomp-golang/SECURITY.md",
    "content": "The libseccomp-golang Security Vulnerability Handling Process\n===============================================================================\nhttps://github.com/seccomp/libseccomp-golang\n\nThis document document attempts to describe the processes through which\nsensitive security relevant bugs can be responsibly disclosed to the\nlibseccomp-golang project and how the project maintainers should handle these\nreports.  Just like the other libseccomp-golang process documents, this\ndocument should be treated as a guiding document and not a hard, unyielding set\nof regulations; the bug reporters and project maintainers are encouraged to\nwork together to address the issues as best they can, in a manner which works\nbest for all parties involved.\n\n### Reporting Problems\n\nProblems with the libseccomp-golang library that are not suitable for immediate\npublic disclosure should be emailed to the current libseccomp-golang\nmaintainers, the list is below.  We typically request at most a 90 day time\nperiod to address the issue before it is made public, but we will make every\neffort to address the issue as quickly as possible and shorten the disclosure\nwindow.\n\n* Paul Moore, paul@paul-moore.com\n* Tom Hromatka, tom.hromatka@oracle.com\n* Kir Kolyshkin, kolyshkin@gmail.com\n\n### Resolving Sensitive Security Issues\n\nUpon disclosure of a bug, the maintainers should work together to investigate\nthe problem and decide on a solution.  In order to prevent an early disclosure\nof the problem, those working on the solution should do so privately and\noutside of the traditional libseccomp-golang development practices.  One\npossible solution to this is to leverage the GitHub \"Security\" functionality to\ncreate a private development fork that can be shared among the maintainers, and\noptionally the reporter.  A placeholder GitHub issue may be created, but\ndetails should remain extremely limited until such time as the problem has been\nfixed and responsibly disclosed.  If a CVE, or other tag, has been assigned to\nthe problem, the GitHub issue title should include the vulnerability tag once\nthe problem has been disclosed.\n\n### Public Disclosure\n\nWhenever possible, responsible reporting and patching practices should be\nfollowed, including notification to the linux-distros and oss-security mailing\nlists.\n\n* https://oss-security.openwall.org/wiki/mailing-lists/distros\n* https://oss-security.openwall.org/wiki/mailing-lists/oss-security\n"
  },
  {
    "path": "vendor/github.com/seccomp/libseccomp-golang/seccomp.go",
    "content": "// Public API specification for libseccomp Go bindings\n// Contains public API for the bindings\n\n// Package seccomp provides bindings for libseccomp, a library wrapping the Linux\n// seccomp syscall. Seccomp enables an application to restrict system call use\n// for itself and its children.\npackage seccomp\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n/*\n#include <errno.h>\n#include <stdlib.h>\n#include <seccomp.h>\n\n// The following functions were added in libseccomp v2.6.0.\n#if SCMP_VER_MAJOR == 2 && SCMP_VER_MINOR < 6\nint seccomp_precompute(scmp_filter_ctx ctx) {\n\treturn -EOPNOTSUPP;\n}\nint seccomp_export_bpf_mem(const scmp_filter_ctx ctx, void *buf, size_t *len)  {\n\treturn -EOPNOTSUPP;\n}\nint seccomp_transaction_start(const scmp_filter_ctx ctx) {\n\treturn -EOPNOTSUPP;\n}\nint seccomp_transaction_commit(const scmp_filter_ctx ctx) {\n\treturn -EOPNOTSUPP;\n}\nvoid seccomp_transaction_reject(const scmp_filter_ctx ctx) {}\n#endif\n*/\nimport \"C\"\n\n// Exported types\n\n// VersionError represents an error when either the system libseccomp version\n// or the kernel version is too old to perform the operation requested.\ntype VersionError struct {\n\top                  string // operation that failed or would fail\n\tmajor, minor, micro uint   // minimally required libseccomp version\n\tcurAPI, minAPI      uint   // current and minimally required API versions\n}\n\nfunc init() {\n\t// This forces the cgo libseccomp to initialize its internal API support state,\n\t// which is necessary on older versions of libseccomp (< 2.5.0) in order to work\n\t// correctly.\n\t// TODO: remove once libseccomp < v2.5.0 is not supported.\n\t_, _ = getAPI()\n}\n\nfunc (e VersionError) Error() string {\n\tif e.minAPI != 0 {\n\t\treturn fmt.Sprintf(\"%s requires libseccomp >= %d.%d.%d and API level >= %d \"+\n\t\t\t\"(current version: %d.%d.%d, API level: %d)\",\n\t\t\te.op, e.major, e.minor, e.micro, e.minAPI,\n\t\t\tverMajor, verMinor, verMicro, e.curAPI)\n\t}\n\treturn fmt.Sprintf(\"%s requires libseccomp >= %d.%d.%d (current version: %d.%d.%d)\",\n\t\te.op, e.major, e.minor, e.micro, verMajor, verMinor, verMicro)\n}\n\n// ScmpArch represents a CPU architecture. Seccomp can restrict syscalls on a\n// per-architecture basis.\ntype ScmpArch uint\n\n// ScmpAction represents an action to be taken on a filter rule match in\n// libseccomp\ntype ScmpAction uint\n\n// ScmpCompareOp represents a comparison operator which can be used in a filter\n// rule\ntype ScmpCompareOp uint\n\n// ScmpCondition represents a rule in a libseccomp filter context\ntype ScmpCondition struct {\n\tArgument uint          `json:\"argument,omitempty\"`\n\tOp       ScmpCompareOp `json:\"operator,omitempty\"`\n\tOperand1 uint64        `json:\"operand_one,omitempty\"`\n\tOperand2 uint64        `json:\"operand_two,omitempty\"`\n}\n\n// Seccomp userspace notification structures associated with filters that use the ActNotify action.\n\n// ScmpSyscall identifies a Linux System Call by its number.\ntype ScmpSyscall int32\n\n// ScmpFd represents a file-descriptor used for seccomp userspace notifications.\ntype ScmpFd int32\n\n// ScmpNotifData describes the system call context that triggered a notification.\ntype ScmpNotifData struct {\n\t// Syscall is the syscall number.\n\tSyscall ScmpSyscall `json:\"syscall,omitempty\"`\n\t// Arch is the filter architecture.\n\tArch ScmpArch `json:\"arch,omitempty\"`\n\t// InstrPointer is the address of the instruction that triggered a notification.\n\tInstrPointer uint64 `json:\"instr_pointer,omitempty\"`\n\t// Args are the arguments (up to 6) for the syscall.\n\tArgs []uint64 `json:\"args,omitempty\"`\n}\n\n// ScmpNotifReq represents a seccomp userspace notification. See NotifReceive() for\n// info on how to pull such a notification.\ntype ScmpNotifReq struct {\n\t// ID is the notification ID.\n\tID uint64 `json:\"id,omitempty\"`\n\t// Pid is the process that triggered the notification event.\n\tPid uint32 `json:\"pid,omitempty\"`\n\t// Flags is filter flags (see seccomp(2)).\n\tFlags uint32 `json:\"flags,omitempty\"`\n\t// Data is system call context that triggered the notification.\n\tData ScmpNotifData `json:\"data,omitempty\"`\n}\n\n// ScmpNotifResp represents a seccomp userspace notification response. See NotifRespond()\n// for info on how to push such a response.\ntype ScmpNotifResp struct {\n\t// ID is the notification ID (must match the corresponding ScmpNotifReq ID).\n\tID uint64 `json:\"id,omitempty\"`\n\t// Error must be 0 if no error occurred, or an error constant from\n\t// package syscall (e.g., syscall.EPERM, etc). In the latter case, it\n\t// is used as an error return from the syscall that created the\n\t// notification.\n\tError int32 `json:\"error,omitempty\"`\n\t// Val is a return value for the syscall that created the notification.\n\t// Only relevant if Error is 0.\n\tVal uint64 `json:\"val,omitempty\"`\n\t// Flags is userspace notification response flag (e.g., NotifRespFlagContinue).\n\tFlags uint32 `json:\"flags,omitempty\"`\n}\n\n// Exported Constants\n\nconst (\n\t// Valid architectures recognized by libseccomp\n\t// PowerPC and S390(x) architectures are unavailable below library version\n\t// v2.3.0 and will returns errors if used with incompatible libraries\n\n\t// ArchInvalid is a placeholder to ensure uninitialized ScmpArch\n\t// variables are invalid\n\tArchInvalid ScmpArch = iota\n\t// ArchNative is the native architecture of the kernel\n\tArchNative\n\t// ArchX86 represents 32-bit x86 syscalls\n\tArchX86\n\t// ArchAMD64 represents 64-bit x86-64 syscalls\n\tArchAMD64\n\t// ArchX32 represents 64-bit x86-64 syscalls (32-bit pointers)\n\tArchX32\n\t// ArchARM represents 32-bit ARM syscalls\n\tArchARM\n\t// ArchARM64 represents 64-bit ARM syscalls\n\tArchARM64\n\t// ArchMIPS represents 32-bit MIPS syscalls\n\tArchMIPS\n\t// ArchMIPS64 represents 64-bit MIPS syscalls\n\tArchMIPS64\n\t// ArchMIPS64N32 represents 64-bit MIPS syscalls (32-bit pointers)\n\tArchMIPS64N32\n\t// ArchMIPSEL represents 32-bit MIPS syscalls (little endian)\n\tArchMIPSEL\n\t// ArchMIPSEL64 represents 64-bit MIPS syscalls (little endian)\n\tArchMIPSEL64\n\t// ArchMIPSEL64N32 represents 64-bit MIPS syscalls (little endian,\n\t// 32-bit pointers)\n\tArchMIPSEL64N32\n\t// ArchPPC represents 32-bit POWERPC syscalls\n\tArchPPC\n\t// ArchPPC64 represents 64-bit POWER syscalls (big endian)\n\tArchPPC64\n\t// ArchPPC64LE represents 64-bit POWER syscalls (little endian)\n\tArchPPC64LE\n\t// ArchS390 represents 31-bit System z/390 syscalls\n\tArchS390\n\t// ArchS390X represents 64-bit System z/390 syscalls\n\tArchS390X\n\t// ArchPARISC represents 32-bit PA-RISC\n\tArchPARISC\n\t// ArchPARISC64 represents 64-bit PA-RISC\n\tArchPARISC64\n\t// ArchRISCV64 represents RISCV64\n\tArchRISCV64\n\t// ArchLOONGARCH64 represents 64-bit LoongArch.\n\tArchLOONGARCH64\n\t// ArchM68K represents 32-bit Motorola 68000.\n\tArchM68K\n\t// ArchSH represents SuperH.\n\tArchSH\n\t// ArchSHEB represents Big-endian SuperH.\n\tArchSHEB\n)\n\nconst (\n\t// Supported actions on filter match\n\n\t// ActInvalid is a placeholder to ensure uninitialized ScmpAction\n\t// variables are invalid\n\tActInvalid ScmpAction = iota\n\t// ActKillThread kills the thread that violated the rule.\n\t// All other threads from the same thread group will continue to execute.\n\tActKillThread\n\t// ActTrap throws SIGSYS\n\tActTrap\n\t// ActNotify triggers a userspace notification. This action is only usable when\n\t// libseccomp API level 6 or higher is supported.\n\tActNotify\n\t// ActErrno causes the syscall to return a negative error code. This\n\t// code can be set with the SetReturnCode method\n\tActErrno\n\t// ActTrace causes the syscall to notify tracing processes with the\n\t// given error code. This code can be set with the SetReturnCode method\n\tActTrace\n\t// ActAllow permits the syscall to continue execution\n\tActAllow\n\t// ActLog permits the syscall to continue execution after logging it.\n\t// This action is only usable when libseccomp API level 3 or higher is\n\t// supported.\n\tActLog\n\t// ActKillProcess kills the process that violated the rule.\n\t// All threads in the thread group are also terminated.\n\t// This action is only usable when libseccomp API level 3 or higher is\n\t// supported.\n\tActKillProcess\n\t// ActKill kills the thread that violated the rule.\n\t// All other threads from the same thread group will continue to execute.\n\t//\n\t// Deprecated: use ActKillThread\n\tActKill = ActKillThread\n)\n\nconst (\n\t// These are comparison operators used in conditional seccomp rules\n\t// They are used to compare the value of a single argument of a syscall\n\t// against a user-defined constant\n\n\t// CompareInvalid is a placeholder to ensure uninitialized ScmpCompareOp\n\t// variables are invalid\n\tCompareInvalid ScmpCompareOp = iota\n\t// CompareNotEqual returns true if the argument is not equal to the\n\t// given value\n\tCompareNotEqual\n\t// CompareLess returns true if the argument is less than the given value\n\tCompareLess\n\t// CompareLessOrEqual returns true if the argument is less than or equal\n\t// to the given value\n\tCompareLessOrEqual\n\t// CompareEqual returns true if the argument is equal to the given value\n\tCompareEqual\n\t// CompareGreaterEqual returns true if the argument is greater than or\n\t// equal to the given value\n\tCompareGreaterEqual\n\t// CompareGreater returns true if the argument is greater than the given\n\t// value\n\tCompareGreater\n\t// CompareMaskedEqual returns true if the masked argument value is\n\t// equal to the masked datum value. Mask is the first argument, and\n\t// datum is the second one.\n\tCompareMaskedEqual\n)\n\n// ErrSyscallDoesNotExist represents an error condition where\n// libseccomp is unable to resolve the syscall.\nvar ErrSyscallDoesNotExist = errors.New(\"could not resolve syscall name\")\n\nconst (\n\t// Userspace notification response flags\n\n\t// NotifRespFlagContinue tells the kernel to continue executing the system\n\t// call that triggered the notification. Must only be used when the notification\n\t// response's error is 0.\n\tNotifRespFlagContinue uint32 = 1\n)\n\n// Helpers for types\n\n// GetArchFromString returns an ScmpArch constant from a string representing an\n// architecture\nfunc GetArchFromString(arch string) (ScmpArch, error) {\n\tif err := ensureSupportedVersion(); err != nil {\n\t\treturn ArchInvalid, err\n\t}\n\n\tswitch strings.ToLower(arch) {\n\tcase \"x86\":\n\t\treturn ArchX86, nil\n\tcase \"amd64\", \"x86-64\", \"x86_64\", \"x64\":\n\t\treturn ArchAMD64, nil\n\tcase \"x32\":\n\t\treturn ArchX32, nil\n\tcase \"arm\":\n\t\treturn ArchARM, nil\n\tcase \"arm64\", \"aarch64\":\n\t\treturn ArchARM64, nil\n\tcase \"mips\":\n\t\treturn ArchMIPS, nil\n\tcase \"mips64\":\n\t\treturn ArchMIPS64, nil\n\tcase \"mips64n32\":\n\t\treturn ArchMIPS64N32, nil\n\tcase \"mipsel\":\n\t\treturn ArchMIPSEL, nil\n\tcase \"mipsel64\":\n\t\treturn ArchMIPSEL64, nil\n\tcase \"mipsel64n32\":\n\t\treturn ArchMIPSEL64N32, nil\n\tcase \"ppc\":\n\t\treturn ArchPPC, nil\n\tcase \"ppc64\":\n\t\treturn ArchPPC64, nil\n\tcase \"ppc64le\":\n\t\treturn ArchPPC64LE, nil\n\tcase \"s390\":\n\t\treturn ArchS390, nil\n\tcase \"s390x\":\n\t\treturn ArchS390X, nil\n\tcase \"parisc\":\n\t\treturn ArchPARISC, nil\n\tcase \"parisc64\":\n\t\treturn ArchPARISC64, nil\n\tcase \"riscv64\":\n\t\treturn ArchRISCV64, nil\n\tcase \"loong64\", \"loongarch64\":\n\t\treturn ArchLOONGARCH64, nil\n\tcase \"m68k\":\n\t\treturn ArchM68K, nil\n\tcase \"sh\":\n\t\treturn ArchSH, nil\n\tcase \"sheb\":\n\t\treturn ArchSHEB, nil\n\tdefault:\n\t\treturn ArchInvalid, fmt.Errorf(\"cannot convert unrecognized string %q\", arch)\n\t}\n}\n\n// String returns a string representation of an architecture constant\nfunc (a ScmpArch) String() string {\n\tswitch a {\n\tcase ArchX86:\n\t\treturn \"x86\"\n\tcase ArchAMD64:\n\t\treturn \"amd64\"\n\tcase ArchX32:\n\t\treturn \"x32\"\n\tcase ArchARM:\n\t\treturn \"arm\"\n\tcase ArchARM64:\n\t\treturn \"arm64\"\n\tcase ArchMIPS:\n\t\treturn \"mips\"\n\tcase ArchMIPS64:\n\t\treturn \"mips64\"\n\tcase ArchMIPS64N32:\n\t\treturn \"mips64n32\"\n\tcase ArchMIPSEL:\n\t\treturn \"mipsel\"\n\tcase ArchMIPSEL64:\n\t\treturn \"mipsel64\"\n\tcase ArchMIPSEL64N32:\n\t\treturn \"mipsel64n32\"\n\tcase ArchPPC:\n\t\treturn \"ppc\"\n\tcase ArchPPC64:\n\t\treturn \"ppc64\"\n\tcase ArchPPC64LE:\n\t\treturn \"ppc64le\"\n\tcase ArchS390:\n\t\treturn \"s390\"\n\tcase ArchS390X:\n\t\treturn \"s390x\"\n\tcase ArchPARISC:\n\t\treturn \"parisc\"\n\tcase ArchPARISC64:\n\t\treturn \"parisc64\"\n\tcase ArchRISCV64:\n\t\treturn \"riscv64\"\n\tcase ArchLOONGARCH64:\n\t\treturn \"loong64\"\n\tcase ArchM68K:\n\t\treturn \"m68k\"\n\tcase ArchSH:\n\t\treturn \"sh\"\n\tcase ArchSHEB:\n\t\treturn \"sheb\"\n\tcase ArchNative:\n\t\treturn \"native\"\n\tcase ArchInvalid:\n\t\treturn \"Invalid architecture\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"Unknown architecture %#x\", uint(a))\n\t}\n}\n\n// String returns a string representation of a comparison operator constant\nfunc (a ScmpCompareOp) String() string {\n\tswitch a {\n\tcase CompareNotEqual:\n\t\treturn \"Not equal\"\n\tcase CompareLess:\n\t\treturn \"Less than\"\n\tcase CompareLessOrEqual:\n\t\treturn \"Less than or equal to\"\n\tcase CompareEqual:\n\t\treturn \"Equal\"\n\tcase CompareGreaterEqual:\n\t\treturn \"Greater than or equal to\"\n\tcase CompareGreater:\n\t\treturn \"Greater than\"\n\tcase CompareMaskedEqual:\n\t\treturn \"Masked equality\"\n\tcase CompareInvalid:\n\t\treturn \"Invalid comparison operator\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"Unrecognized comparison operator %#x\", uint(a))\n\t}\n}\n\n// String returns a string representation of a seccomp match action\nfunc (a ScmpAction) String() string {\n\tswitch a & 0xFFFF {\n\tcase ActKillThread:\n\t\treturn \"Action: Kill thread\"\n\tcase ActKillProcess:\n\t\treturn \"Action: Kill process\"\n\tcase ActTrap:\n\t\treturn \"Action: Send SIGSYS\"\n\tcase ActErrno:\n\t\treturn fmt.Sprintf(\"Action: Return error code %d\", (a >> 16))\n\tcase ActTrace:\n\t\treturn fmt.Sprintf(\"Action: Notify tracing processes with code %d\",\n\t\t\t(a >> 16))\n\tcase ActNotify:\n\t\treturn \"Action: Notify userspace\"\n\tcase ActLog:\n\t\treturn \"Action: Log system call\"\n\tcase ActAllow:\n\t\treturn \"Action: Allow system call\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"Unrecognized Action %#x\", uint(a))\n\t}\n}\n\n// SetReturnCode adds a return code to a supporting ScmpAction, clearing any\n// existing code Only valid on ActErrno and ActTrace. Takes no action otherwise.\n// Accepts 16-bit return code as argument.\n// Returns a valid ScmpAction of the original type with the new error code set.\nfunc (a ScmpAction) SetReturnCode(code int16) ScmpAction {\n\taTmp := a & 0x0000FFFF\n\tif aTmp == ActErrno || aTmp == ActTrace {\n\t\treturn (aTmp | (ScmpAction(code)&0xFFFF)<<16)\n\t}\n\treturn a\n}\n\n// GetReturnCode returns the return code of an ScmpAction\nfunc (a ScmpAction) GetReturnCode() int16 {\n\treturn int16(a >> 16)\n}\n\n// General utility functions\n\n// GetLibraryVersion returns the version of the library the bindings are built\n// against.\n// The version is formatted as follows: Major.Minor.Micro\nfunc GetLibraryVersion() (major, minor, micro uint) {\n\treturn verMajor, verMinor, verMicro\n}\n\n// GetAPI returns the API level supported by the system.\n// Returns a positive int containing the API level, or 0 with an error if the\n// API level could not be detected due to the library being older than v2.4.0.\n// See the seccomp_api_get(3) man page for details on available API levels:\n// https://github.com/seccomp/libseccomp/blob/main/doc/man/man3/seccomp_api_get.3\nfunc GetAPI() (uint, error) {\n\treturn getAPI()\n}\n\n// SetAPI forcibly sets the API level. General use of this function is strongly\n// discouraged.\n// Returns an error if the API level could not be set. An error is always\n// returned if the library is older than v2.4.0\n// See the seccomp_api_get(3) man page for details on available API levels:\n// https://github.com/seccomp/libseccomp/blob/main/doc/man/man3/seccomp_api_get.3\nfunc SetAPI(api uint) error {\n\treturn setAPI(api)\n}\n\n// Syscall functions\n\n// GetName retrieves the name of a syscall from its number.\n// Acts on any syscall number.\n// Returns either a string containing the name of the syscall, or an error.\nfunc (s ScmpSyscall) GetName() (string, error) {\n\treturn s.GetNameByArch(ArchNative)\n}\n\n// GetNameByArch retrieves the name of a syscall from its number for a given\n// architecture.\n// Acts on any syscall number.\n// Accepts a valid architecture constant.\n// Returns either a string containing the name of the syscall, or an error.\n// if the syscall is unrecognized or an issue occurred.\nfunc (s ScmpSyscall) GetNameByArch(arch ScmpArch) (string, error) {\n\tif err := sanitizeArch(arch); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tcString := C.seccomp_syscall_resolve_num_arch(arch.toNative(), C.int(s))\n\tif cString == nil {\n\t\treturn \"\", ErrSyscallDoesNotExist\n\t}\n\tdefer C.free(unsafe.Pointer(cString))\n\n\tfinalStr := C.GoString(cString)\n\treturn finalStr, nil\n}\n\n// GetSyscallFromName returns the number of a syscall by name on the kernel's\n// native architecture.\n// Accepts a string containing the name of a syscall.\n// Returns the number of the syscall, or an error if no syscall with that name\n// was found.\nfunc GetSyscallFromName(name string) (ScmpSyscall, error) {\n\tif err := ensureSupportedVersion(); err != nil {\n\t\treturn 0, err\n\t}\n\n\tcString := C.CString(name)\n\tdefer C.free(unsafe.Pointer(cString))\n\n\tresult := C.seccomp_syscall_resolve_name(cString)\n\tif result == scmpError {\n\t\treturn 0, ErrSyscallDoesNotExist\n\t}\n\n\treturn ScmpSyscall(result), nil\n}\n\n// GetSyscallFromNameByArch returns the number of a syscall by name for a given\n// architecture's ABI.\n// Accepts the name of a syscall and an architecture constant.\n// Returns the number of the syscall, or an error if an invalid architecture is\n// passed or a syscall with that name was not found.\nfunc GetSyscallFromNameByArch(name string, arch ScmpArch) (ScmpSyscall, error) {\n\tif err := ensureSupportedVersion(); err != nil {\n\t\treturn 0, err\n\t}\n\tif err := sanitizeArch(arch); err != nil {\n\t\treturn 0, err\n\t}\n\n\tcString := C.CString(name)\n\tdefer C.free(unsafe.Pointer(cString))\n\n\tresult := C.seccomp_syscall_resolve_name_arch(arch.toNative(), cString)\n\tif result == scmpError {\n\t\treturn 0, ErrSyscallDoesNotExist\n\t}\n\n\treturn ScmpSyscall(result), nil\n}\n\n// MakeCondition creates and returns a new condition to attach to a filter rule.\n// Associated rules will only match if this condition is true.\n// Accepts the number the argument we are checking, and a comparison operator\n// and value to compare to.\n// The rule will match if argument $arg (zero-indexed) of the syscall is\n// $COMPARE_OP the provided comparison value.\n// Some comparison operators accept two values. Masked equals, for example,\n// will mask $arg of the syscall with the second value provided (via bitwise\n// AND) and then compare against the first value provided.\n// For example, in the less than or equal case, if the syscall argument was\n// 0 and the value provided was 1, the condition would match, as 0 is less\n// than or equal to 1.\n// Return either an error on bad argument or a valid ScmpCondition struct.\nfunc MakeCondition(arg uint, comparison ScmpCompareOp, values ...uint64) (ScmpCondition, error) {\n\tvar condStruct ScmpCondition\n\n\tif err := ensureSupportedVersion(); err != nil {\n\t\treturn condStruct, err\n\t}\n\n\tif err := sanitizeCompareOp(comparison); err != nil {\n\t\treturn condStruct, err\n\t} else if arg > 5 {\n\t\treturn condStruct, fmt.Errorf(\"syscalls only have up to 6 arguments (%d given)\", arg)\n\t} else if len(values) > 2 {\n\t\treturn condStruct, fmt.Errorf(\"conditions can have at most 2 arguments (%d given)\", len(values))\n\t} else if len(values) == 0 {\n\t\treturn condStruct, errors.New(\"must provide at least one value to compare against\")\n\t}\n\n\tcondStruct.Argument = arg\n\tcondStruct.Op = comparison\n\tcondStruct.Operand1 = values[0]\n\tif len(values) == 2 {\n\t\tcondStruct.Operand2 = values[1]\n\t} else {\n\t\tcondStruct.Operand2 = 0 // Unused\n\t}\n\n\treturn condStruct, nil\n}\n\n// Utility Functions\n\n// GetNativeArch returns architecture token representing the native kernel\n// architecture\nfunc GetNativeArch() (ScmpArch, error) {\n\tif err := ensureSupportedVersion(); err != nil {\n\t\treturn ArchInvalid, err\n\t}\n\n\tarch := C.seccomp_arch_native()\n\n\treturn archFromNative(arch)\n}\n\n// Public Filter API\n\n// ScmpFilter represents a filter context in libseccomp.\n// A filter context is initially empty. Rules can be added to it, and it can\n// then be loaded into the kernel.\ntype ScmpFilter struct {\n\tfilterCtx C.scmp_filter_ctx\n\tvalid     bool\n\tlock      sync.Mutex\n}\n\n// NewFilter creates and returns a new filter context.  Accepts a default action to be\n// taken for syscalls which match no rules in the filter.\n// Returns a reference to a valid filter context, or nil and an error\n// if the filter context could not be created or an invalid default action was given.\nfunc NewFilter(defaultAction ScmpAction) (*ScmpFilter, error) {\n\tif err := ensureSupportedVersion(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err := sanitizeAction(defaultAction); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfPtr := C.seccomp_init(defaultAction.toNative())\n\tif fPtr == nil {\n\t\treturn nil, errors.New(\"could not create filter\")\n\t}\n\n\tfilter := new(ScmpFilter)\n\tfilter.filterCtx = fPtr\n\tfilter.valid = true\n\truntime.SetFinalizer(filter, filterFinalizer)\n\n\t// Enable TSync so all goroutines will receive the same rules.\n\t// If the kernel does not support TSYNC, allow us to continue without error.\n\tif err := filter.setFilterAttr(filterAttrTsync, 0x1); err != nil && err != syscall.ENOTSUP {\n\t\tfilter.Release()\n\t\treturn nil, fmt.Errorf(\"could not create filter: error setting tsync bit: %w\", err)\n\t}\n\n\treturn filter, nil\n}\n\n// IsValid determines whether a filter context is valid to use.\n// Some operations (Release and Merge) render filter contexts invalid and\n// consequently prevent further use.\nfunc (f *ScmpFilter) IsValid() bool {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\treturn f.valid\n}\n\n// Reset resets a filter context, removing all its existing state.\n// Accepts a new default action to be taken for syscalls which do not match.\n// Returns an error if the filter or action provided are invalid.\nfunc (f *ScmpFilter) Reset(defaultAction ScmpAction) error {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif err := sanitizeAction(defaultAction); err != nil {\n\t\treturn err\n\t} else if !f.valid {\n\t\treturn errBadFilter\n\t}\n\n\tif retCode := C.seccomp_reset(f.filterCtx, defaultAction.toNative()); retCode != 0 {\n\t\treturn errRc(retCode)\n\t}\n\n\treturn nil\n}\n\n// Release releases a filter context, freeing its memory. Should be called after\n// loading into the kernel, when the filter is no longer needed.\n// After calling this function, the given filter is no longer valid and cannot\n// be used.\n// Release() will be invoked automatically when a filter context is garbage\n// collected, but can also be called manually to free memory.\nfunc (f *ScmpFilter) Release() {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif !f.valid {\n\t\treturn\n\t}\n\n\tf.valid = false\n\tC.seccomp_release(f.filterCtx)\n}\n\n// Merge merges two filter contexts.\n// The source filter src will be released as part of the process, and will no\n// longer be usable or valid after this call.\n// To be merged, filters must NOT share any architectures, and all their\n// attributes (Default Action, Bad Arch Action, and No New Privs bools)\n// must match.\n// The filter src will be merged into the filter this is called on.\n// The architectures of the src filter not present in the destination, and all\n// associated rules, will be added to the destination.\n// Returns an error if merging the filters failed.\nfunc (f *ScmpFilter) Merge(src *ScmpFilter) error {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tsrc.lock.Lock()\n\tdefer src.lock.Unlock()\n\n\tif !src.valid || !f.valid {\n\t\treturn errors.New(\"one or more of the filter contexts is invalid or uninitialized\")\n\t}\n\n\t// Merge the filters\n\tif retCode := C.seccomp_merge(f.filterCtx, src.filterCtx); retCode != 0 {\n\t\te := errRc(retCode)\n\t\tif e == syscall.EINVAL {\n\t\t\treturn fmt.Errorf(\"filters could not be merged due to a mismatch in attributes or invalid filter: %w\", e)\n\t\t}\n\t\treturn e\n\t}\n\n\tsrc.valid = false\n\n\treturn nil\n}\n\n// IsArchPresent checks if an architecture is present in a filter.\n// If a filter contains an architecture, it uses its default action for\n// syscalls which do not match rules in it, and its rules can match syscalls\n// for that ABI.\n// If a filter does not contain an architecture, all syscalls made to that\n// kernel ABI will fail with the filter's default Bad Architecture Action\n// (by default, killing the process).\n// Accepts an architecture constant.\n// Returns true if the architecture is present in the filter, false otherwise,\n// and an error on an invalid filter context, architecture constant, or an\n// issue with the call to libseccomp.\nfunc (f *ScmpFilter) IsArchPresent(arch ScmpArch) (bool, error) {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif err := sanitizeArch(arch); err != nil {\n\t\treturn false, err\n\t} else if !f.valid {\n\t\treturn false, errBadFilter\n\t}\n\n\tif retCode := C.seccomp_arch_exist(f.filterCtx, arch.toNative()); retCode != 0 {\n\t\te := errRc(retCode)\n\t\tif e == syscall.EEXIST {\n\t\t\t// -EEXIST is \"arch not present\"\n\t\t\treturn false, nil\n\t\t}\n\t\treturn false, e\n\t}\n\n\treturn true, nil\n}\n\n// AddArch adds an architecture to the filter.\n// Accepts an architecture constant.\n// Returns an error on invalid filter context or architecture token, or an\n// issue with the call to libseccomp.\nfunc (f *ScmpFilter) AddArch(arch ScmpArch) error {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif err := sanitizeArch(arch); err != nil {\n\t\treturn err\n\t} else if !f.valid {\n\t\treturn errBadFilter\n\t}\n\n\t// Libseccomp returns -EEXIST if the specified architecture is already\n\t// present. Succeed silently in this case, as it's not fatal, and the\n\t// architecture is present already.\n\tif retCode := C.seccomp_arch_add(f.filterCtx, arch.toNative()); retCode != 0 {\n\t\tif e := errRc(retCode); e != syscall.EEXIST {\n\t\t\treturn e\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// RemoveArch removes an architecture from the filter.\n// Accepts an architecture constant.\n// Returns an error on invalid filter context or architecture token, or an\n// issue with the call to libseccomp.\nfunc (f *ScmpFilter) RemoveArch(arch ScmpArch) error {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif err := sanitizeArch(arch); err != nil {\n\t\treturn err\n\t} else if !f.valid {\n\t\treturn errBadFilter\n\t}\n\n\t// Similar to AddArch, -EEXIST is returned if the arch is not present\n\t// Succeed silently in that case, this is not fatal and the architecture\n\t// is not present in the filter after RemoveArch\n\tif retCode := C.seccomp_arch_remove(f.filterCtx, arch.toNative()); retCode != 0 {\n\t\tif e := errRc(retCode); e != syscall.EEXIST {\n\t\t\treturn e\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Precompute precomputes the seccomp filter for later use by [Load] and\n// similar functions. Not only does this improve performance of [Load],\n// it also ensures that the seccomp filter can be loaded in an\n// async-signal-safe manner if no changes have been made to the filter\n// since it was precomputed.\nfunc (f *ScmpFilter) Precompute() error {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif !f.valid {\n\t\treturn errBadFilter\n\t}\n\n\tif retCode := C.seccomp_precompute(f.filterCtx); retCode != 0 {\n\t\treturn errRc(retCode)\n\t}\n\n\treturn nil\n}\n\n// Load loads a filter context into the kernel.\n// Returns an error if the filter context is invalid or the syscall failed.\nfunc (f *ScmpFilter) Load() error {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif !f.valid {\n\t\treturn errBadFilter\n\t}\n\n\tif retCode := C.seccomp_load(f.filterCtx); retCode != 0 {\n\t\treturn errRc(retCode)\n\t}\n\n\treturn nil\n}\n\n// GetDefaultAction returns the default action taken on a syscall which does not\n// match a rule in the filter, or an error if an issue was encountered\n// retrieving the value.\nfunc (f *ScmpFilter) GetDefaultAction() (ScmpAction, error) {\n\taction, err := f.getFilterAttr(filterAttrActDefault)\n\tif err != nil {\n\t\treturn 0x0, err\n\t}\n\n\treturn actionFromNative(action)\n}\n\n// GetBadArchAction returns the default action taken on a syscall for an\n// architecture not in the filter, or an error if an issue was encountered\n// retrieving the value.\nfunc (f *ScmpFilter) GetBadArchAction() (ScmpAction, error) {\n\taction, err := f.getFilterAttr(filterAttrActBadArch)\n\tif err != nil {\n\t\treturn 0x0, err\n\t}\n\n\treturn actionFromNative(action)\n}\n\n// GetNoNewPrivsBit returns the current state the No New Privileges bit will be set\n// to on the filter being loaded, or an error if an issue was encountered\n// retrieving the value.\n// The No New Privileges bit tells the kernel that new processes run with exec()\n// cannot gain more privileges than the process that ran exec().\n// For example, a process with No New Privileges set would be unable to exec\n// setuid/setgid executables.\nfunc (f *ScmpFilter) GetNoNewPrivsBit() (bool, error) {\n\tnoNewPrivs, err := f.getFilterAttr(filterAttrNNP)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\tif noNewPrivs == 0 {\n\t\treturn false, nil\n\t}\n\n\treturn true, nil\n}\n\n// GetLogBit returns the current state the Log bit will be set to on the filter\n// being loaded, or an error if an issue was encountered retrieving the value.\n// The Log bit tells the kernel that all actions taken by the filter, with the\n// exception of ActAllow, should be logged.\n// The Log bit is only usable when libseccomp API level 3 or higher is\n// supported.\nfunc (f *ScmpFilter) GetLogBit() (bool, error) {\n\tlog, err := f.getFilterAttr(filterAttrLog)\n\tif err != nil {\n\t\tif e := checkAPI(\"GetLogBit\", 3, 2, 4, 0); e != nil {\n\t\t\terr = e\n\t\t}\n\n\t\treturn false, err\n\t}\n\n\tif log == 0 {\n\t\treturn false, nil\n\t}\n\n\treturn true, nil\n}\n\n// GetSSB returns the current state the SSB bit will be set to on the filter\n// being loaded, or an error if an issue was encountered retrieving the value.\n// The SSB bit tells the kernel that a seccomp user is not interested in enabling\n// Speculative Store Bypass mitigation.\n// The SSB bit is only usable when libseccomp API level 4 or higher is\n// supported.\nfunc (f *ScmpFilter) GetSSB() (bool, error) {\n\tssb, err := f.getFilterAttr(filterAttrSSB)\n\tif err != nil {\n\t\tif e := checkAPI(\"GetSSB\", 4, 2, 5, 0); e != nil {\n\t\t\terr = e\n\t\t}\n\n\t\treturn false, err\n\t}\n\n\tif ssb == 0 {\n\t\treturn false, nil\n\t}\n\n\treturn true, nil\n}\n\n// GetOptimize returns the current optimization level of the filter,\n// or an error if an issue was encountered retrieving the value.\n// See SetOptimize for more details.\nfunc (f *ScmpFilter) GetOptimize() (int, error) {\n\tlevel, err := f.getFilterAttr(filterAttrOptimize)\n\tif err != nil {\n\t\tif e := checkAPI(\"GetOptimize\", 4, 2, 5, 0); e != nil {\n\t\t\terr = e\n\t\t}\n\n\t\treturn 0, err\n\t}\n\n\treturn int(level), nil\n}\n\n// GetRawRC returns the current state of RawRC flag, or an error\n// if an issue was encountered retrieving the value.\n// See SetRawRC for more details.\nfunc (f *ScmpFilter) GetRawRC() (bool, error) {\n\trawrc, err := f.getFilterAttr(filterAttrRawRC)\n\tif err != nil {\n\t\tif e := checkAPI(\"GetRawRC\", 4, 2, 5, 0); e != nil {\n\t\t\terr = e\n\t\t}\n\n\t\treturn false, err\n\t}\n\n\tif rawrc == 0 {\n\t\treturn false, nil\n\t}\n\n\treturn true, nil\n}\n\n// GetWaitKill returns the current state of WaitKill flag,\n// or an error if an issue was encountered retrieving the value.\n// See SetWaitKill for more details.\nfunc (f *ScmpFilter) GetWaitKill() (bool, error) {\n\tval, err := f.getFilterAttr(filterAttrWaitKill)\n\tif err != nil {\n\t\tif e := checkAPI(\"GetWaitKill\", 7, 2, 6, 0); e != nil {\n\t\t\terr = e\n\t\t}\n\n\t\treturn false, err\n\t}\n\tif val == 0 {\n\t\treturn false, nil\n\t}\n\n\treturn true, nil\n}\n\n// SetBadArchAction sets the default action taken on a syscall for an\n// architecture not in the filter, or an error if an issue was encountered\n// setting the value.\nfunc (f *ScmpFilter) SetBadArchAction(action ScmpAction) error {\n\tif err := sanitizeAction(action); err != nil {\n\t\treturn err\n\t}\n\n\treturn f.setFilterAttr(filterAttrActBadArch, action.toNative())\n}\n\n// SetNoNewPrivsBit sets the state of the No New Privileges bit, which will be\n// applied on filter load, or an error if an issue was encountered setting the\n// value.\n// Filters with No New Privileges set to 0 can only be loaded if the process\n// has the CAP_SYS_ADMIN capability.\nfunc (f *ScmpFilter) SetNoNewPrivsBit(state bool) error {\n\tvar toSet C.uint32_t = 0x0\n\n\tif state {\n\t\ttoSet = 0x1\n\t}\n\n\treturn f.setFilterAttr(filterAttrNNP, toSet)\n}\n\n// SetLogBit sets the state of the Log bit, which will be applied on filter\n// load, or an error if an issue was encountered setting the value.\n// The Log bit is only usable when libseccomp API level 3 or higher is\n// supported.\nfunc (f *ScmpFilter) SetLogBit(state bool) error {\n\tvar toSet C.uint32_t = 0x0\n\n\tif state {\n\t\ttoSet = 0x1\n\t}\n\n\terr := f.setFilterAttr(filterAttrLog, toSet)\n\tif err != nil {\n\t\tif e := checkAPI(\"SetLogBit\", 3, 2, 4, 0); e != nil {\n\t\t\terr = e\n\t\t}\n\t}\n\n\treturn err\n}\n\n// SetSSB sets the state of the SSB bit, which will be applied on filter\n// load, or an error if an issue was encountered setting the value.\n// The SSB bit is only usable when libseccomp API level 4 or higher is\n// supported.\nfunc (f *ScmpFilter) SetSSB(state bool) error {\n\tvar toSet C.uint32_t = 0x0\n\n\tif state {\n\t\ttoSet = 0x1\n\t}\n\n\terr := f.setFilterAttr(filterAttrSSB, toSet)\n\tif err != nil {\n\t\tif e := checkAPI(\"SetSSB\", 4, 2, 5, 0); e != nil {\n\t\t\terr = e\n\t\t}\n\t}\n\n\treturn err\n}\n\n// SetOptimize sets optimization level of the seccomp filter. By default\n// libseccomp generates a set of sequential \"if\" statements for each rule in\n// the filter. SetSyscallPriority can be used to prioritize the order for the\n// default cause. The binary tree optimization sorts by syscall numbers and\n// generates consistent O(log n) filter traversal for every rule in the filter.\n// The binary tree may be advantageous for large filters. Note that\n// SetSyscallPriority is ignored when level == 2.\n//\n// The different optimization levels are:\n// 0: Reserved value, not currently used.\n// 1: Rules sorted by priority and complexity (DEFAULT).\n// 2: Binary tree sorted by syscall number.\nfunc (f *ScmpFilter) SetOptimize(level int) error {\n\tcLevel := C.uint32_t(level)\n\n\terr := f.setFilterAttr(filterAttrOptimize, cLevel)\n\tif err != nil {\n\t\tif e := checkAPI(\"SetOptimize\", 4, 2, 5, 0); e != nil {\n\t\t\terr = e\n\t\t}\n\t}\n\n\treturn err\n}\n\n// SetRawRC sets whether libseccomp should pass system error codes back to the\n// caller, instead of the default ECANCELED. Defaults to false.\nfunc (f *ScmpFilter) SetRawRC(state bool) error {\n\tvar toSet C.uint32_t = 0x0\n\n\tif state {\n\t\ttoSet = 0x1\n\t}\n\n\terr := f.setFilterAttr(filterAttrRawRC, toSet)\n\tif err != nil {\n\t\tif e := checkAPI(\"SetRawRC\", 4, 2, 5, 0); e != nil {\n\t\t\terr = e\n\t\t}\n\t}\n\n\treturn err\n}\n\n// SetWaitKill sets whether libseccomp should request wait killable semantics\n// when possible. Defaults to false.\nfunc (f *ScmpFilter) SetWaitKill(state bool) error {\n\tvar toSet C.uint32_t = 0x0\n\n\tif state {\n\t\ttoSet = 0x1\n\t}\n\n\terr := f.setFilterAttr(filterAttrWaitKill, toSet)\n\tif err != nil {\n\t\tif e := checkAPI(\"SetWaitKill\", 7, 2, 6, 0); e != nil {\n\t\t\terr = e\n\t\t}\n\t}\n\n\treturn err\n}\n\n// SetSyscallPriority sets a syscall's priority.\n// This provides a hint to the filter generator in libseccomp about the\n// importance of this syscall. High-priority syscalls are placed\n// first in the filter code, and incur less overhead (at the expense of\n// lower-priority syscalls).\nfunc (f *ScmpFilter) SetSyscallPriority(call ScmpSyscall, priority uint8) error {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif !f.valid {\n\t\treturn errBadFilter\n\t}\n\n\tif retCode := C.seccomp_syscall_priority(f.filterCtx, C.int(call),\n\t\tC.uint8_t(priority)); retCode != 0 {\n\t\treturn errRc(retCode)\n\t}\n\n\treturn nil\n}\n\n// AddRule adds a single rule for an unconditional action on a syscall.\n// Accepts the number of the syscall and the action to be taken on the call\n// being made.\n// Returns an error if an issue was encountered adding the rule.\nfunc (f *ScmpFilter) AddRule(call ScmpSyscall, action ScmpAction) error {\n\treturn f.addRuleGeneric(call, action, false, nil)\n}\n\n// AddRuleExact adds a single rule for an unconditional action on a syscall.\n// Accepts the number of the syscall and the action to be taken on the call\n// being made.\n// No modifications will be made to the rule, and it will fail to add if it\n// cannot be applied to the current architecture without modification.\n// The rule will function exactly as described, but it may not function identically\n// (or be able to be applied to) all architectures.\n// Returns an error if an issue was encountered adding the rule.\nfunc (f *ScmpFilter) AddRuleExact(call ScmpSyscall, action ScmpAction) error {\n\treturn f.addRuleGeneric(call, action, true, nil)\n}\n\n// AddRuleConditional adds a single rule for a conditional action on a syscall.\n// Returns an error if an issue was encountered adding the rule.\n// All conditions must match for the rule to match.\nfunc (f *ScmpFilter) AddRuleConditional(call ScmpSyscall, action ScmpAction, conds []ScmpCondition) error {\n\treturn f.addRuleGeneric(call, action, false, conds)\n}\n\n// AddRuleConditionalExact adds a single rule for a conditional action on a\n// syscall.\n// No modifications will be made to the rule, and it will fail to add if it\n// cannot be applied to the current architecture without modification.\n// The rule will function exactly as described, but it may not function identically\n// (or be able to be applied to) all architectures.\n// Returns an error if an issue was encountered adding the rule.\nfunc (f *ScmpFilter) AddRuleConditionalExact(call ScmpSyscall, action ScmpAction, conds []ScmpCondition) error {\n\treturn f.addRuleGeneric(call, action, true, conds)\n}\n\n// ExportPFC output PFC-formatted, human-readable dump of a filter context's\n// rules to a file.\n// Accepts file to write to (must be open for writing).\n// Returns an error if writing to the file fails.\nfunc (f *ScmpFilter) ExportPFC(file *os.File) error {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tfd := file.Fd()\n\n\tif !f.valid {\n\t\treturn errBadFilter\n\t}\n\n\tif retCode := C.seccomp_export_pfc(f.filterCtx, C.int(fd)); retCode != 0 {\n\t\treturn errRc(retCode)\n\t}\n\n\treturn nil\n}\n\n// ExportBPF outputs Berkeley Packet Filter-formatted, kernel-readable dump of a\n// filter context's rules to a file.\n// Accepts file to write to (must be open for writing).\n// Returns an error if writing to the file fails.\nfunc (f *ScmpFilter) ExportBPF(file *os.File) error {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tfd := file.Fd()\n\n\tif !f.valid {\n\t\treturn errBadFilter\n\t}\n\n\tif retCode := C.seccomp_export_bpf(f.filterCtx, C.int(fd)); retCode != 0 {\n\t\treturn errRc(retCode)\n\t}\n\n\treturn nil\n}\n\n// ExportBPFMem is similar to [ExportBPF], except the data is written into\n// a memory and returned as []byte.\nfunc (f *ScmpFilter) ExportBPFMem() ([]byte, error) {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif !f.valid {\n\t\treturn nil, errBadFilter\n\t}\n\n\tvar len C.size_t\n\t// Get the size required.\n\tif retCode := C.seccomp_export_bpf_mem(f.filterCtx, unsafe.Pointer(nil), &len); retCode < 0 {\n\t\treturn nil, errRc(retCode)\n\t}\n\t// Get the data.\n\tbuf := make([]byte, int(len))\n\tif retCode := C.seccomp_export_bpf_mem(f.filterCtx, unsafe.Pointer(&buf[0]), &len); retCode < 0 {\n\t\treturn nil, errRc(retCode)\n\t}\n\n\treturn buf, nil\n}\n\n// Userspace Notification API\n\n// GetNotifFd returns the userspace notification file descriptor associated with the given\n// filter context. Such a file descriptor is only valid after the filter has been loaded\n// and only when the filter uses the ActNotify action. The file descriptor can be used to\n// retrieve and respond to notifications associated with the filter (see NotifReceive(),\n// NotifRespond(), and NotifIDValid()).\nfunc (f *ScmpFilter) GetNotifFd() (ScmpFd, error) {\n\treturn f.getNotifFd()\n}\n\n// NotifReceive retrieves a seccomp userspace notification from a filter whose ActNotify\n// action has triggered. The caller is expected to process the notification and return a\n// response via NotifRespond(). Each invocation of this function returns one\n// notification. As multiple notifications may be pending at any time, this function is\n// normally called within a polling loop.\nfunc NotifReceive(fd ScmpFd) (*ScmpNotifReq, error) {\n\treturn notifReceive(fd)\n}\n\n// NotifRespond responds to a notification retrieved via NotifReceive(). The response Id\n// must match that of the corresponding notification retrieved via NotifReceive().\nfunc NotifRespond(fd ScmpFd, scmpResp *ScmpNotifResp) error {\n\treturn notifRespond(fd, scmpResp)\n}\n\n// NotifIDValid checks if a notification is still valid. An return value of nil means the\n// notification is still valid. Otherwise the notification is not valid. This can be used\n// to mitigate time-of-check-time-of-use (TOCTOU) attacks as described in seccomp_notify_id_valid(2).\nfunc NotifIDValid(fd ScmpFd, id uint64) error {\n\treturn notifIDValid(fd, id)\n}\n\n// TransactionStart starts a new seccomp filter transaction that the caller can\n// use to perform any number of filter modifications which can then be\n// committed to the filter using [TransactionCommit] or rejected using\n// [TransactionReject]. It is important to note that transactions only affect\n// the seccomp filter state while it is being managed by libseccomp; seccomp\n// filters which have been loaded into the kernel can not be modified, only new\n// seccomp filters can be added on top of the existing loaded filter stack.\nfunc (f *ScmpFilter) TransactionStart() error {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif !f.valid {\n\t\treturn errBadFilter\n\t}\n\n\tif retCode := C.seccomp_transaction_start(f.filterCtx); retCode < 0 {\n\t\treturn errRc(retCode)\n\t}\n\n\treturn nil\n}\n\n// TransactionReject rejects a transaction started by [TransactionStart].\nfunc (f *ScmpFilter) TransactionReject() {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif !f.valid {\n\t\treturn\n\t}\n\n\tC.seccomp_transaction_reject(f.filterCtx)\n}\n\n// TransactionCommit commits a transaction started by [TransactionStart].\nfunc (f *ScmpFilter) TransactionCommit() error {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif !f.valid {\n\t\treturn errBadFilter\n\t}\n\n\tif retCode := C.seccomp_transaction_commit(f.filterCtx); retCode < 0 {\n\t\treturn errRc(retCode)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/seccomp/libseccomp-golang/seccomp_internal.go",
    "content": "// Internal functions for libseccomp Go bindings\n// No exported functions\n\npackage seccomp\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"syscall\"\n)\n\n// Unexported C wrapping code - provides the C-Golang interface\n// Get the seccomp header in scope\n// Need stdlib.h for free() on cstrings\n\n// To compile libseccomp-golang against a specific version of libseccomp:\n// cd ../libseccomp && mkdir -p prefix\n// ./configure --prefix=$PWD/prefix && make && make install\n// cd ../libseccomp-golang\n// PKG_CONFIG_PATH=$PWD/../libseccomp/prefix/lib/pkgconfig/ make\n// LD_PRELOAD=$PWD/../libseccomp/prefix/lib/libseccomp.so.2.5.0 PKG_CONFIG_PATH=$PWD/../libseccomp/prefix/lib/pkgconfig/ make test\n\n// #cgo pkg-config: libseccomp\n/*\n#include <errno.h>\n#include <stdlib.h>\n#include <seccomp.h>\n\n#if (SCMP_VER_MAJOR < 2) || \\\n    (SCMP_VER_MAJOR == 2 && SCMP_VER_MINOR < 3) || \\\n    (SCMP_VER_MAJOR == 2 && SCMP_VER_MINOR == 3 && SCMP_VER_MICRO < 1)\n#error This package requires libseccomp >= v2.3.1\n#endif\n\n#define ARCH_BAD ~0\n\nconst uint32_t C_ARCH_BAD = ARCH_BAD;\n\n#ifndef SCMP_ARCH_PPC\n#define SCMP_ARCH_PPC ARCH_BAD\n#endif\n\n#ifndef SCMP_ARCH_PPC64\n#define SCMP_ARCH_PPC64 ARCH_BAD\n#endif\n\n#ifndef SCMP_ARCH_PPC64LE\n#define SCMP_ARCH_PPC64LE ARCH_BAD\n#endif\n\n#ifndef SCMP_ARCH_S390\n#define SCMP_ARCH_S390 ARCH_BAD\n#endif\n\n#ifndef SCMP_ARCH_S390X\n#define SCMP_ARCH_S390X ARCH_BAD\n#endif\n\n#ifndef SCMP_ARCH_PARISC\n#define SCMP_ARCH_PARISC ARCH_BAD\n#endif\n\n#ifndef SCMP_ARCH_PARISC64\n#define SCMP_ARCH_PARISC64 ARCH_BAD\n#endif\n\n#ifndef SCMP_ARCH_RISCV64\n#define SCMP_ARCH_RISCV64 ARCH_BAD\n#endif\n\n#ifndef SCMP_ARCH_LOONGARCH64\n#define SCMP_ARCH_LOONGARCH64 ARCH_BAD\n#endif\n\n#ifndef SCMP_ARCH_M68K\n#define SCMP_ARCH_M68K ARCH_BAD\n#endif\n\n#ifndef SCMP_ARCH_SH\n#define SCMP_ARCH_SH ARCH_BAD\n#endif\n\n#ifndef SCMP_ARCH_SHEB\n#define SCMP_ARCH_SHEB ARCH_BAD\n#endif\n\nconst uint32_t C_ARCH_NATIVE       = SCMP_ARCH_NATIVE;\nconst uint32_t C_ARCH_X86          = SCMP_ARCH_X86;\nconst uint32_t C_ARCH_X86_64       = SCMP_ARCH_X86_64;\nconst uint32_t C_ARCH_X32          = SCMP_ARCH_X32;\nconst uint32_t C_ARCH_ARM          = SCMP_ARCH_ARM;\nconst uint32_t C_ARCH_AARCH64      = SCMP_ARCH_AARCH64;\nconst uint32_t C_ARCH_MIPS         = SCMP_ARCH_MIPS;\nconst uint32_t C_ARCH_MIPS64       = SCMP_ARCH_MIPS64;\nconst uint32_t C_ARCH_MIPS64N32    = SCMP_ARCH_MIPS64N32;\nconst uint32_t C_ARCH_MIPSEL       = SCMP_ARCH_MIPSEL;\nconst uint32_t C_ARCH_MIPSEL64     = SCMP_ARCH_MIPSEL64;\nconst uint32_t C_ARCH_MIPSEL64N32  = SCMP_ARCH_MIPSEL64N32;\nconst uint32_t C_ARCH_PPC          = SCMP_ARCH_PPC;\nconst uint32_t C_ARCH_PPC64        = SCMP_ARCH_PPC64;\nconst uint32_t C_ARCH_PPC64LE      = SCMP_ARCH_PPC64LE;\nconst uint32_t C_ARCH_S390         = SCMP_ARCH_S390;\nconst uint32_t C_ARCH_S390X        = SCMP_ARCH_S390X;\nconst uint32_t C_ARCH_PARISC       = SCMP_ARCH_PARISC;\nconst uint32_t C_ARCH_PARISC64     = SCMP_ARCH_PARISC64;\nconst uint32_t C_ARCH_RISCV64      = SCMP_ARCH_RISCV64;\nconst uint32_t C_ARCH_LOONGARCH64  = SCMP_ARCH_LOONGARCH64;\nconst uint32_t C_ARCH_M68K         = SCMP_ARCH_M68K;\nconst uint32_t C_ARCH_SH           = SCMP_ARCH_SH;\nconst uint32_t C_ARCH_SHEB         = SCMP_ARCH_SHEB;\n\n#ifndef SCMP_ACT_LOG\n#define SCMP_ACT_LOG 0x7ffc0000U\n#endif\n\n#ifndef SCMP_ACT_KILL_PROCESS\n#define SCMP_ACT_KILL_PROCESS 0x80000000U\n#endif\n\n#ifndef SCMP_ACT_KILL_THREAD\n#define SCMP_ACT_KILL_THREAD\t0x00000000U\n#endif\n\n#ifndef SCMP_ACT_NOTIFY\n#define SCMP_ACT_NOTIFY 0x7fc00000U\n#endif\n\nconst uint32_t C_ACT_KILL          = SCMP_ACT_KILL;\nconst uint32_t C_ACT_KILL_PROCESS  = SCMP_ACT_KILL_PROCESS;\nconst uint32_t C_ACT_KILL_THREAD   = SCMP_ACT_KILL_THREAD;\nconst uint32_t C_ACT_TRAP          = SCMP_ACT_TRAP;\nconst uint32_t C_ACT_ERRNO         = SCMP_ACT_ERRNO(0);\nconst uint32_t C_ACT_TRACE         = SCMP_ACT_TRACE(0);\nconst uint32_t C_ACT_LOG           = SCMP_ACT_LOG;\nconst uint32_t C_ACT_ALLOW         = SCMP_ACT_ALLOW;\nconst uint32_t C_ACT_NOTIFY        = SCMP_ACT_NOTIFY;\n\n// The libseccomp SCMP_FLTATR_CTL_LOG member of the scmp_filter_attr enum was\n// added in v2.4.0\n#if SCMP_VER_MAJOR == 2 && SCMP_VER_MINOR < 4\n#define SCMP_FLTATR_CTL_LOG _SCMP_FLTATR_MIN\n#endif\n\n// The following SCMP_FLTATR_*  were added in libseccomp v2.5.0.\n#if SCMP_VER_MAJOR == 2 && SCMP_VER_MINOR < 5\n#define SCMP_FLTATR_CTL_SSB      _SCMP_FLTATR_MIN\n#define SCMP_FLTATR_CTL_OPTIMIZE _SCMP_FLTATR_MIN\n#define SCMP_FLTATR_API_SYSRAWRC _SCMP_FLTATR_MIN\n#endif\n\n// Added in libseccomp v2.6.0.\n#if SCMP_VER_MAJOR == 2 && SCMP_VER_MINOR < 6\n#define SCMP_FLTATR_CTL_WAITKILL _SCMP_FLTATR_MIN\n#endif\n\nconst uint32_t C_ATTRIBUTE_DEFAULT  = (uint32_t)SCMP_FLTATR_ACT_DEFAULT;\nconst uint32_t C_ATTRIBUTE_BADARCH  = (uint32_t)SCMP_FLTATR_ACT_BADARCH;\nconst uint32_t C_ATTRIBUTE_NNP      = (uint32_t)SCMP_FLTATR_CTL_NNP;\nconst uint32_t C_ATTRIBUTE_TSYNC    = (uint32_t)SCMP_FLTATR_CTL_TSYNC;\nconst uint32_t C_ATTRIBUTE_LOG      = (uint32_t)SCMP_FLTATR_CTL_LOG;\nconst uint32_t C_ATTRIBUTE_SSB      = (uint32_t)SCMP_FLTATR_CTL_SSB;\nconst uint32_t C_ATTRIBUTE_OPTIMIZE = (uint32_t)SCMP_FLTATR_CTL_OPTIMIZE;\nconst uint32_t C_ATTRIBUTE_SYSRAWRC = (uint32_t)SCMP_FLTATR_API_SYSRAWRC;\nconst uint32_t C_ATTRIBUTE_WAITKILL = (uint32_t)SCMP_FLTATR_CTL_WAITKILL;\n\nconst int      C_CMP_NE            = (int)SCMP_CMP_NE;\nconst int      C_CMP_LT            = (int)SCMP_CMP_LT;\nconst int      C_CMP_LE            = (int)SCMP_CMP_LE;\nconst int      C_CMP_EQ            = (int)SCMP_CMP_EQ;\nconst int      C_CMP_GE            = (int)SCMP_CMP_GE;\nconst int      C_CMP_GT            = (int)SCMP_CMP_GT;\nconst int      C_CMP_MASKED_EQ     = (int)SCMP_CMP_MASKED_EQ;\n\nunsigned int get_major_version()\n{\n        return seccomp_version()->major;\n}\n\nunsigned int get_minor_version()\n{\n        return seccomp_version()->minor;\n}\n\nunsigned int get_micro_version()\n{\n        return seccomp_version()->micro;\n}\n\n// The libseccomp API level functions were added in v2.4.0\n#if SCMP_VER_MAJOR == 2 && SCMP_VER_MINOR < 4\nconst unsigned int seccomp_api_get(void)\n{\n\t// libseccomp-golang requires libseccomp v2.2.0, at a minimum, which\n\t// supported API level 2. However, the kernel may not support API level\n\t// 2 constructs which are the seccomp() system call and the TSYNC\n\t// filter flag. Return the \"reserved\" value of 0 here to indicate that\n\t// proper API level support is not available in libseccomp.\n\treturn 0;\n}\n\nint seccomp_api_set(unsigned int level)\n{\n\treturn -EOPNOTSUPP;\n}\n#endif\n\ntypedef struct scmp_arg_cmp* scmp_cast_t;\n\nvoid* make_arg_cmp_array(unsigned int length)\n{\n        return calloc(length, sizeof(struct scmp_arg_cmp));\n}\n\n// Wrapper to add an scmp_arg_cmp struct to an existing arg_cmp array\nvoid add_struct_arg_cmp(\n                        struct scmp_arg_cmp* arr,\n                        unsigned int pos,\n                        unsigned int arg,\n                        int compare,\n                        uint64_t a,\n                        uint64_t b\n                       )\n{\n        arr[pos].arg = arg;\n        arr[pos].op = compare;\n        arr[pos].datum_a = a;\n        arr[pos].datum_b = b;\n\n        return;\n}\n\n// The seccomp notify API functions were added in v2.5.0\n#if SCMP_VER_MAJOR == 2 && SCMP_VER_MINOR < 5\n\nstruct seccomp_data {\n\tint nr;\n\t__u32 arch;\n\t__u64 instruction_pointer;\n\t__u64 args[6];\n};\n\nstruct seccomp_notif {\n\t__u64 id;\n\t__u32 pid;\n\t__u32 flags;\n\tstruct seccomp_data data;\n};\n\nstruct seccomp_notif_resp {\n\t__u64 id;\n\t__s64 val;\n\t__s32 error;\n\t__u32 flags;\n};\n\nint seccomp_notify_alloc(struct seccomp_notif **req, struct seccomp_notif_resp **resp) {\n\treturn -EOPNOTSUPP;\n}\nint seccomp_notify_fd(const scmp_filter_ctx ctx) {\n\treturn -EOPNOTSUPP;\n}\nvoid seccomp_notify_free(struct seccomp_notif *req, struct seccomp_notif_resp *resp) {\n}\nint seccomp_notify_id_valid(int fd, uint64_t id) {\n\treturn -EOPNOTSUPP;\n}\nint seccomp_notify_receive(int fd, struct seccomp_notif *req) {\n\treturn -EOPNOTSUPP;\n}\nint seccomp_notify_respond(int fd, struct seccomp_notif_resp *resp) {\n\treturn -EOPNOTSUPP;\n}\n\n#endif\n*/\nimport \"C\"\n\n// Nonexported types\ntype scmpFilterAttr uint32\n\n// Nonexported constants\n\nconst (\n\tfilterAttrActDefault scmpFilterAttr = iota\n\tfilterAttrActBadArch\n\tfilterAttrNNP\n\tfilterAttrTsync\n\tfilterAttrLog\n\tfilterAttrSSB\n\tfilterAttrOptimize\n\tfilterAttrRawRC\n\tfilterAttrWaitKill\n)\n\nconst (\n\t// An error return from certain libseccomp functions\n\tscmpError C.int = -1\n\t// Comparison boundaries to check for architecture validity\n\tarchStart ScmpArch = ArchNative\n\tarchEnd   ScmpArch = ArchSHEB\n\t// Comparison boundaries to check for action validity\n\tactionStart ScmpAction = ActKillThread\n\tactionEnd   ScmpAction = ActKillProcess\n\t// Comparison boundaries to check for comparison operator validity\n\tcompareOpStart ScmpCompareOp = CompareNotEqual\n\tcompareOpEnd   ScmpCompareOp = CompareMaskedEqual\n)\n\nvar (\n\t// errBadFilter is thrown on bad filter context.\n\terrBadFilter = errors.New(\"filter is invalid or uninitialized\")\n\terrDefAction = errors.New(\"requested action matches default action of filter\")\n\t// Constants representing library major, minor, and micro versions\n\tverMajor = uint(C.get_major_version())\n\tverMinor = uint(C.get_minor_version())\n\tverMicro = uint(C.get_micro_version())\n)\n\n// Nonexported functions\n\n// checkVersion returns an error if the libseccomp version being used\n// is less than the one specified by major, minor, and micro arguments.\n// Argument op is an arbitrary non-empty operation description, which\n// is used as a part of the error message returned.\n//\n// Most users should use checkAPI instead.\nfunc checkVersion(op string, major, minor, micro uint) error {\n\tif (verMajor > major) ||\n\t\t(verMajor == major && verMinor > minor) ||\n\t\t(verMajor == major && verMinor == minor && verMicro >= micro) {\n\t\treturn nil\n\t}\n\treturn &VersionError{\n\t\top:    op,\n\t\tmajor: major,\n\t\tminor: minor,\n\t\tmicro: micro,\n\t}\n}\n\nfunc ensureSupportedVersion() error {\n\treturn checkVersion(\"seccomp\", 2, 3, 1)\n}\n\n// Get the API level\nfunc getAPI() (uint, error) {\n\tapi := C.seccomp_api_get()\n\tif api == 0 {\n\t\treturn 0, errors.New(\"API level operations are not supported\")\n\t}\n\n\treturn uint(api), nil\n}\n\n// Set the API level\nfunc setAPI(api uint) error {\n\tif retCode := C.seccomp_api_set(C.uint(api)); retCode != 0 {\n\t\te := errRc(retCode)\n\t\tif e == syscall.EOPNOTSUPP {\n\t\t\treturn errors.New(\"API level operations are not supported\")\n\t\t}\n\n\t\treturn fmt.Errorf(\"could not set API level: %w\", e)\n\t}\n\n\treturn nil\n}\n\n// Filter helpers\n\n// Filter finalizer - ensure that kernel context for filters is freed\nfunc filterFinalizer(f *ScmpFilter) {\n\tf.Release()\n}\n\nfunc errRc(rc C.int) error {\n\treturn syscall.Errno(-1 * rc)\n}\n\n// Get a raw filter attribute\nfunc (f *ScmpFilter) getFilterAttr(attr scmpFilterAttr) (C.uint32_t, error) {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif !f.valid {\n\t\treturn 0x0, errBadFilter\n\t}\n\n\tvar attribute C.uint32_t\n\n\tretCode := C.seccomp_attr_get(f.filterCtx, attr.toNative(), &attribute)\n\tif retCode != 0 {\n\t\treturn 0x0, errRc(retCode)\n\t}\n\n\treturn attribute, nil\n}\n\n// Set a raw filter attribute\nfunc (f *ScmpFilter) setFilterAttr(attr scmpFilterAttr, value C.uint32_t) error {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif !f.valid {\n\t\treturn errBadFilter\n\t}\n\n\tretCode := C.seccomp_attr_set(f.filterCtx, attr.toNative(), value)\n\tif retCode != 0 {\n\t\treturn errRc(retCode)\n\t}\n\n\treturn nil\n}\n\n// DOES NOT LOCK OR CHECK VALIDITY\n// Assumes caller has already done this\n// Wrapper for seccomp_rule_add_... functions\nfunc (f *ScmpFilter) addRuleWrapper(call ScmpSyscall, action ScmpAction, exact bool, length C.uint, cond C.scmp_cast_t) error {\n\tif length != 0 && cond == nil {\n\t\treturn errors.New(\"null conditions list, but length is nonzero\")\n\t}\n\n\tvar retCode C.int\n\tif exact {\n\t\tretCode = C.seccomp_rule_add_exact_array(f.filterCtx, action.toNative(), C.int(call), length, cond)\n\t} else {\n\t\tretCode = C.seccomp_rule_add_array(f.filterCtx, action.toNative(), C.int(call), length, cond)\n\t}\n\n\tif retCode != 0 {\n\t\tswitch e := errRc(retCode); e {\n\t\tcase syscall.EFAULT:\n\t\t\treturn fmt.Errorf(\"unrecognized syscall %#x\", int32(call))\n\t\t// libseccomp >= v2.5.0 returns EACCES, older versions return EPERM.\n\t\t// TODO: remove EPERM once libseccomp < v2.5.0 is not supported.\n\t\tcase syscall.EPERM, syscall.EACCES:\n\t\t\treturn errDefAction\n\t\tcase syscall.EINVAL:\n\t\t\treturn errors.New(\"two checks on same syscall argument\")\n\t\tdefault:\n\t\t\treturn e\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Generic add function for filter rules\nfunc (f *ScmpFilter) addRuleGeneric(call ScmpSyscall, action ScmpAction, exact bool, conds []ScmpCondition) error {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif !f.valid {\n\t\treturn errBadFilter\n\t}\n\n\tif len(conds) == 0 {\n\t\tif err := f.addRuleWrapper(call, action, exact, 0, nil); err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\targsArr := C.make_arg_cmp_array(C.uint(len(conds)))\n\t\tif argsArr == nil {\n\t\t\treturn errors.New(\"error allocating memory for conditions\")\n\t\t}\n\t\tdefer C.free(argsArr)\n\n\t\tfor i, cond := range conds {\n\t\t\tC.add_struct_arg_cmp(C.scmp_cast_t(argsArr), C.uint(i),\n\t\t\t\tC.uint(cond.Argument), cond.Op.toNative(),\n\t\t\t\tC.uint64_t(cond.Operand1), C.uint64_t(cond.Operand2))\n\t\t}\n\n\t\tif err := f.addRuleWrapper(call, action, exact, C.uint(len(conds)), C.scmp_cast_t(argsArr)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Generic Helpers\n\n// Helper - Sanitize Arch token input\nfunc sanitizeArch(in ScmpArch) error {\n\tif in < archStart || in > archEnd {\n\t\treturn fmt.Errorf(\"unrecognized architecture %#x\", uint(in))\n\t}\n\n\tif in.toNative() == C.C_ARCH_BAD {\n\t\treturn fmt.Errorf(\"architecture %v is not supported on this version of the library\", in)\n\t}\n\n\treturn nil\n}\n\nfunc sanitizeAction(in ScmpAction) error {\n\tinTmp := in & 0x0000FFFF\n\tif inTmp < actionStart || inTmp > actionEnd {\n\t\treturn fmt.Errorf(\"unrecognized action %#x\", uint(inTmp))\n\t}\n\n\tif inTmp != ActTrace && inTmp != ActErrno && (in&0xFFFF0000) != 0 {\n\t\treturn errors.New(\"highest 16 bits must be zeroed except for Trace and Errno\")\n\t}\n\n\treturn nil\n}\n\nfunc sanitizeCompareOp(in ScmpCompareOp) error {\n\tif in < compareOpStart || in > compareOpEnd {\n\t\treturn fmt.Errorf(\"unrecognized comparison operator %#x\", uint(in))\n\t}\n\n\treturn nil\n}\n\nfunc archFromNative(a C.uint32_t) (ScmpArch, error) {\n\tswitch a {\n\tcase C.C_ARCH_X86:\n\t\treturn ArchX86, nil\n\tcase C.C_ARCH_X86_64:\n\t\treturn ArchAMD64, nil\n\tcase C.C_ARCH_X32:\n\t\treturn ArchX32, nil\n\tcase C.C_ARCH_ARM:\n\t\treturn ArchARM, nil\n\tcase C.C_ARCH_NATIVE:\n\t\treturn ArchNative, nil\n\tcase C.C_ARCH_AARCH64:\n\t\treturn ArchARM64, nil\n\tcase C.C_ARCH_MIPS:\n\t\treturn ArchMIPS, nil\n\tcase C.C_ARCH_MIPS64:\n\t\treturn ArchMIPS64, nil\n\tcase C.C_ARCH_MIPS64N32:\n\t\treturn ArchMIPS64N32, nil\n\tcase C.C_ARCH_MIPSEL:\n\t\treturn ArchMIPSEL, nil\n\tcase C.C_ARCH_MIPSEL64:\n\t\treturn ArchMIPSEL64, nil\n\tcase C.C_ARCH_MIPSEL64N32:\n\t\treturn ArchMIPSEL64N32, nil\n\tcase C.C_ARCH_PPC:\n\t\treturn ArchPPC, nil\n\tcase C.C_ARCH_PPC64:\n\t\treturn ArchPPC64, nil\n\tcase C.C_ARCH_PPC64LE:\n\t\treturn ArchPPC64LE, nil\n\tcase C.C_ARCH_S390:\n\t\treturn ArchS390, nil\n\tcase C.C_ARCH_S390X:\n\t\treturn ArchS390X, nil\n\tcase C.C_ARCH_PARISC:\n\t\treturn ArchPARISC, nil\n\tcase C.C_ARCH_PARISC64:\n\t\treturn ArchPARISC64, nil\n\tcase C.C_ARCH_RISCV64:\n\t\treturn ArchRISCV64, nil\n\tcase C.C_ARCH_LOONGARCH64:\n\t\treturn ArchLOONGARCH64, nil\n\tcase C.C_ARCH_M68K:\n\t\treturn ArchM68K, nil\n\tcase C.C_ARCH_SH:\n\t\treturn ArchSH, nil\n\tcase C.C_ARCH_SHEB:\n\t\treturn ArchSHEB, nil\n\tdefault:\n\t\treturn 0x0, fmt.Errorf(\"unrecognized architecture %#x\", uint32(a))\n\t}\n}\n\n// Only use with sanitized arches, no error handling\nfunc (a ScmpArch) toNative() C.uint32_t {\n\tswitch a {\n\tcase ArchX86:\n\t\treturn C.C_ARCH_X86\n\tcase ArchAMD64:\n\t\treturn C.C_ARCH_X86_64\n\tcase ArchX32:\n\t\treturn C.C_ARCH_X32\n\tcase ArchARM:\n\t\treturn C.C_ARCH_ARM\n\tcase ArchARM64:\n\t\treturn C.C_ARCH_AARCH64\n\tcase ArchMIPS:\n\t\treturn C.C_ARCH_MIPS\n\tcase ArchMIPS64:\n\t\treturn C.C_ARCH_MIPS64\n\tcase ArchMIPS64N32:\n\t\treturn C.C_ARCH_MIPS64N32\n\tcase ArchMIPSEL:\n\t\treturn C.C_ARCH_MIPSEL\n\tcase ArchMIPSEL64:\n\t\treturn C.C_ARCH_MIPSEL64\n\tcase ArchMIPSEL64N32:\n\t\treturn C.C_ARCH_MIPSEL64N32\n\tcase ArchPPC:\n\t\treturn C.C_ARCH_PPC\n\tcase ArchPPC64:\n\t\treturn C.C_ARCH_PPC64\n\tcase ArchPPC64LE:\n\t\treturn C.C_ARCH_PPC64LE\n\tcase ArchS390:\n\t\treturn C.C_ARCH_S390\n\tcase ArchS390X:\n\t\treturn C.C_ARCH_S390X\n\tcase ArchPARISC:\n\t\treturn C.C_ARCH_PARISC\n\tcase ArchPARISC64:\n\t\treturn C.C_ARCH_PARISC64\n\tcase ArchRISCV64:\n\t\treturn C.C_ARCH_RISCV64\n\tcase ArchLOONGARCH64:\n\t\treturn C.C_ARCH_LOONGARCH64\n\tcase ArchM68K:\n\t\treturn C.C_ARCH_M68K\n\tcase ArchSH:\n\t\treturn C.C_ARCH_SH\n\tcase ArchSHEB:\n\t\treturn C.C_ARCH_SHEB\n\tcase ArchNative:\n\t\treturn C.C_ARCH_NATIVE\n\tdefault:\n\t\treturn 0x0\n\t}\n}\n\n// Only use with sanitized ops, no error handling\nfunc (a ScmpCompareOp) toNative() C.int {\n\tswitch a {\n\tcase CompareNotEqual:\n\t\treturn C.C_CMP_NE\n\tcase CompareLess:\n\t\treturn C.C_CMP_LT\n\tcase CompareLessOrEqual:\n\t\treturn C.C_CMP_LE\n\tcase CompareEqual:\n\t\treturn C.C_CMP_EQ\n\tcase CompareGreaterEqual:\n\t\treturn C.C_CMP_GE\n\tcase CompareGreater:\n\t\treturn C.C_CMP_GT\n\tcase CompareMaskedEqual:\n\t\treturn C.C_CMP_MASKED_EQ\n\tdefault:\n\t\treturn 0x0\n\t}\n}\n\nfunc actionFromNative(a C.uint32_t) (ScmpAction, error) {\n\taTmp := a & 0xFFFF\n\tswitch a & 0xFFFF0000 {\n\tcase C.C_ACT_KILL_PROCESS:\n\t\treturn ActKillProcess, nil\n\tcase C.C_ACT_KILL_THREAD:\n\t\treturn ActKillThread, nil\n\tcase C.C_ACT_TRAP:\n\t\treturn ActTrap, nil\n\tcase C.C_ACT_ERRNO:\n\t\treturn ActErrno.SetReturnCode(int16(aTmp)), nil\n\tcase C.C_ACT_TRACE:\n\t\treturn ActTrace.SetReturnCode(int16(aTmp)), nil\n\tcase C.C_ACT_LOG:\n\t\treturn ActLog, nil\n\tcase C.C_ACT_ALLOW:\n\t\treturn ActAllow, nil\n\tcase C.C_ACT_NOTIFY:\n\t\treturn ActNotify, nil\n\tdefault:\n\t\treturn 0x0, fmt.Errorf(\"unrecognized action %#x\", uint32(a))\n\t}\n}\n\n// Only use with sanitized actions, no error handling\nfunc (a ScmpAction) toNative() C.uint32_t {\n\tswitch a & 0xFFFF {\n\tcase ActKillProcess:\n\t\treturn C.C_ACT_KILL_PROCESS\n\tcase ActKillThread:\n\t\treturn C.C_ACT_KILL_THREAD\n\tcase ActTrap:\n\t\treturn C.C_ACT_TRAP\n\tcase ActErrno:\n\t\treturn C.C_ACT_ERRNO | (C.uint32_t(a) >> 16)\n\tcase ActTrace:\n\t\treturn C.C_ACT_TRACE | (C.uint32_t(a) >> 16)\n\tcase ActLog:\n\t\treturn C.C_ACT_LOG\n\tcase ActAllow:\n\t\treturn C.C_ACT_ALLOW\n\tcase ActNotify:\n\t\treturn C.C_ACT_NOTIFY\n\tdefault:\n\t\treturn 0x0\n\t}\n}\n\n// Internal only, assumes safe attribute\nfunc (a scmpFilterAttr) toNative() uint32 {\n\tswitch a {\n\tcase filterAttrActDefault:\n\t\treturn uint32(C.C_ATTRIBUTE_DEFAULT)\n\tcase filterAttrActBadArch:\n\t\treturn uint32(C.C_ATTRIBUTE_BADARCH)\n\tcase filterAttrNNP:\n\t\treturn uint32(C.C_ATTRIBUTE_NNP)\n\tcase filterAttrTsync:\n\t\treturn uint32(C.C_ATTRIBUTE_TSYNC)\n\tcase filterAttrLog:\n\t\treturn uint32(C.C_ATTRIBUTE_LOG)\n\tcase filterAttrSSB:\n\t\treturn uint32(C.C_ATTRIBUTE_SSB)\n\tcase filterAttrOptimize:\n\t\treturn uint32(C.C_ATTRIBUTE_OPTIMIZE)\n\tcase filterAttrRawRC:\n\t\treturn uint32(C.C_ATTRIBUTE_SYSRAWRC)\n\tcase filterAttrWaitKill:\n\t\treturn uint32(C.C_ATTRIBUTE_WAITKILL)\n\tdefault:\n\t\treturn 0x0\n\t}\n}\n\nfunc syscallFromNative(a C.int) ScmpSyscall {\n\treturn ScmpSyscall(a)\n}\n\nfunc notifReqFromNative(req *C.struct_seccomp_notif) (*ScmpNotifReq, error) {\n\tscmpArgs := make([]uint64, 6)\n\tfor i := 0; i < len(scmpArgs); i++ {\n\t\tscmpArgs[i] = uint64(req.data.args[i])\n\t}\n\n\tarch, err := archFromNative(req.data.arch)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tscmpData := ScmpNotifData{\n\t\tSyscall:      syscallFromNative(req.data.nr),\n\t\tArch:         arch,\n\t\tInstrPointer: uint64(req.data.instruction_pointer),\n\t\tArgs:         scmpArgs,\n\t}\n\n\tscmpReq := &ScmpNotifReq{\n\t\tID:    uint64(req.id),\n\t\tPid:   uint32(req.pid),\n\t\tFlags: uint32(req.flags),\n\t\tData:  scmpData,\n\t}\n\n\treturn scmpReq, nil\n}\n\nfunc (scmpResp *ScmpNotifResp) toNative(resp *C.struct_seccomp_notif_resp) {\n\tresp.id = C.__u64(scmpResp.ID)\n\tresp.val = C.__s64(scmpResp.Val)\n\tresp.error = (C.__s32(scmpResp.Error) * -1) // kernel requires a negated value\n\tresp.flags = C.__u32(scmpResp.Flags)\n}\n\n// checkAPI checks that both the API level and the seccomp version is equal to\n// or greater than the specified minLevel and major, minor, micro,\n// respectively, and returns an error otherwise. Argument op is an arbitrary\n// non-empty operation description, used as a part of the error message\n// returned.\nfunc checkAPI(op string, minLevel uint, major, minor, micro uint) error {\n\t// Ignore error from getAPI, as it returns level == 0 in case of error.\n\tlevel, _ := getAPI()\n\tif level >= minLevel {\n\t\treturn checkVersion(op, major, minor, micro)\n\t}\n\treturn &VersionError{\n\t\top:     op,\n\t\tcurAPI: level,\n\t\tminAPI: minLevel,\n\t\tmajor:  major,\n\t\tminor:  minor,\n\t\tmicro:  micro,\n\t}\n}\n\n// Userspace Notification API\n// Calls to C.seccomp_notify* hidden from seccomp.go\n\nfunc notifSupported() error {\n\treturn checkAPI(\"seccomp notification\", 6, 2, 5, 0)\n}\n\nfunc (f *ScmpFilter) getNotifFd() (ScmpFd, error) {\n\tf.lock.Lock()\n\tdefer f.lock.Unlock()\n\n\tif !f.valid {\n\t\treturn -1, errBadFilter\n\t}\n\tif err := notifSupported(); err != nil {\n\t\treturn -1, err\n\t}\n\n\tfd := C.seccomp_notify_fd(f.filterCtx)\n\n\treturn ScmpFd(fd), nil\n}\n\nfunc notifReceive(fd ScmpFd) (*ScmpNotifReq, error) {\n\tvar req *C.struct_seccomp_notif\n\tvar resp *C.struct_seccomp_notif_resp\n\n\tif err := notifSupported(); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// we only use the request here; the response is unused\n\tif retCode := C.seccomp_notify_alloc(&req, &resp); retCode != 0 {\n\t\treturn nil, errRc(retCode)\n\t}\n\tdefer C.seccomp_notify_free(req, resp)\n\n\tfor {\n\t\tretCode, errno := C.seccomp_notify_receive(C.int(fd), req)\n\t\tif retCode == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\tif errno == syscall.EINTR {\n\t\t\tcontinue\n\t\t}\n\n\t\tif errno == syscall.ENOENT {\n\t\t\treturn nil, errno\n\t\t}\n\n\t\treturn nil, errRc(retCode)\n\t}\n\n\treturn notifReqFromNative(req)\n}\n\nfunc notifRespond(fd ScmpFd, scmpResp *ScmpNotifResp) error {\n\tvar req *C.struct_seccomp_notif\n\tvar resp *C.struct_seccomp_notif_resp\n\n\tif err := notifSupported(); err != nil {\n\t\treturn err\n\t}\n\n\t// we only use the response here; the request is discarded\n\tif retCode := C.seccomp_notify_alloc(&req, &resp); retCode != 0 {\n\t\treturn errRc(retCode)\n\t}\n\tdefer C.seccomp_notify_free(req, resp)\n\n\tscmpResp.toNative(resp)\n\n\tfor {\n\t\tretCode, errno := C.seccomp_notify_respond(C.int(fd), resp)\n\t\tif retCode == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\tif errno == syscall.EINTR {\n\t\t\tcontinue\n\t\t}\n\n\t\tif errno == syscall.ENOENT {\n\t\t\treturn errno\n\t\t}\n\n\t\treturn errRc(retCode)\n\t}\n\n\treturn nil\n}\n\nfunc notifIDValid(fd ScmpFd, id uint64) error {\n\tif err := notifSupported(); err != nil {\n\t\treturn err\n\t}\n\n\tfor {\n\t\tretCode, errno := C.seccomp_notify_id_valid(C.int(fd), C.uint64_t(id))\n\t\tif retCode == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\tif errno == syscall.EINTR {\n\t\t\tcontinue\n\t\t}\n\n\t\tif errno == syscall.ENOENT {\n\t\t\treturn errno\n\t\t}\n\n\t\treturn errRc(retCode)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/.gitignore",
    "content": ".idea/\n.vscode/\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/CHANGELOG.md",
    "content": "# Changelog\n\n## 1.0.0 (2018-03-15)\n\nInitial release tagging"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/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 2014 Vishvananda Ishaya.\n   Copyright 2014 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       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/vishvananda/netlink/Makefile",
    "content": "DIRS := \\\n\t. \\\n\tnl\n\nDEPS = \\\n\tgithub.com/vishvananda/netns \\\n\tgolang.org/x/sys/unix\n\nuniq = $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1)))\ntestdirs = $(call uniq,$(foreach d,$(1),$(dir $(wildcard $(d)/*_test.go))))\ngoroot = $(addprefix ../../../,$(1))\nunroot = $(subst ../../../,,$(1))\nfmt = $(addprefix fmt-,$(1))\n\nall: test\n\n$(call goroot,$(DEPS)):\n\tgo get $(call unroot,$@)\n\n.PHONY: $(call testdirs,$(DIRS))\n$(call testdirs,$(DIRS)):\n\tgo test -test.exec sudo -test.parallel 4 -timeout 60s -test.v github.com/vishvananda/netlink/$@\n\n$(call fmt,$(call testdirs,$(DIRS))):\n\t! gofmt -l $(subst fmt-,,$@)/*.go | grep -q .\n\n.PHONY: fmt\nfmt: $(call fmt,$(call testdirs,$(DIRS)))\n\ntest: fmt $(call goroot,$(DEPS)) $(call testdirs,$(DIRS))\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/README.md",
    "content": "# netlink - netlink library for go #\n\n![Build Status](https://github.com/vishvananda/netlink/actions/workflows/main.yml/badge.svg) [![GoDoc](https://godoc.org/github.com/vishvananda/netlink?status.svg)](https://godoc.org/github.com/vishvananda/netlink)\n\nThe netlink package provides a simple netlink library for go. Netlink\nis the interface a user-space program in linux uses to communicate with\nthe kernel. It can be used to add and remove interfaces, set ip addresses\nand routes, and configure ipsec. Netlink communication requires elevated\nprivileges, so in most cases this code needs to be run as root. Since\nlow-level netlink messages are inscrutable at best, the library attempts\nto provide an api that is loosely modeled on the CLI provided by iproute2.\nActions like `ip link add` will be accomplished via a similarly named\nfunction like AddLink(). This library began its life as a fork of the\nnetlink functionality in\n[docker/libcontainer](https://github.com/docker/libcontainer) but was\nheavily rewritten to improve testability, performance, and to add new\nfunctionality like ipsec xfrm handling.\n\n## Local Build and Test ##\n\nYou can use go get command:\n\n    go get github.com/vishvananda/netlink\n\nTesting dependencies:\n\n    go get github.com/vishvananda/netns\n\nTesting (requires root):\n\n    sudo -E go test github.com/vishvananda/netlink\n\n## Examples ##\n\nAdd a new bridge and add eth1 into it:\n\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"github.com/vishvananda/netlink\"\n)\n\nfunc main() {\n    la := netlink.NewLinkAttrs()\n    la.Name = \"foo\"\n    mybridge := &netlink.Bridge{LinkAttrs: la}\n    err := netlink.LinkAdd(mybridge)\n    if err != nil  {\n        fmt.Printf(\"could not add %s: %v\\n\", la.Name, err)\n    }\n    eth1, _ := netlink.LinkByName(\"eth1\")\n    netlink.LinkSetMaster(eth1, mybridge)\n}\n\n```\nNote `NewLinkAttrs` constructor, it sets default values in structure. For now\nit sets only `TxQLen` to `-1`, so kernel will set default by itself. If you're\nusing simple initialization(`LinkAttrs{Name: \"foo\"}`) `TxQLen` will be set to\n`0` unless you specify it like `LinkAttrs{Name: \"foo\", TxQLen: 1000}`.\n\nAdd a new ip address to loopback:\n\n```go\npackage main\n\nimport (\n    \"github.com/vishvananda/netlink\"\n)\n\nfunc main() {\n    lo, _ := netlink.LinkByName(\"lo\")\n    addr, _ := netlink.ParseAddr(\"169.254.169.254/32\")\n    netlink.AddrAdd(lo, addr)\n}\n\n```\n\n## Future Work ##\n\nMany pieces of netlink are not yet fully supported in the high-level\ninterface. Aspects of virtually all of the high-level objects don't exist.\nMany of the underlying primitives are there, so its a matter of putting\nthe right fields into the high-level objects and making sure that they\nare serialized and deserialized correctly in the Add and List methods.\n\nThere are also a few pieces of low level netlink functionality that still\nneed to be implemented. Routing rules are not in place and some of the\nmore advanced link types. Hopefully there is decent structure and testing\nin place to make these fairly straightforward to add.\n\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/addr.go",
    "content": "package netlink\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n)\n\n// Addr represents an IP address from netlink. Netlink ip addresses\n// include a mask, so it stores the address as a net.IPNet.\ntype Addr struct {\n\t*net.IPNet\n\tLabel       string\n\tFlags       int\n\tScope       int\n\tPeer        *net.IPNet\n\tBroadcast   net.IP\n\tPreferedLft int\n\tValidLft    int\n\tLinkIndex   int\n}\n\n// String returns $ip/$netmask $label\nfunc (a Addr) String() string {\n\treturn strings.TrimSpace(fmt.Sprintf(\"%s %s\", a.IPNet, a.Label))\n}\n\n// ParseAddr parses the string representation of an address in the\n// form $ip/$netmask $label. The label portion is optional\nfunc ParseAddr(s string) (*Addr, error) {\n\tlabel := \"\"\n\tparts := strings.Split(s, \" \")\n\tif len(parts) > 1 {\n\t\ts = parts[0]\n\t\tlabel = parts[1]\n\t}\n\tm, err := ParseIPNet(s)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Addr{IPNet: m, Label: label}, nil\n}\n\n// Equal returns true if both Addrs have the same net.IPNet value.\nfunc (a Addr) Equal(x Addr) bool {\n\tsizea, _ := a.Mask.Size()\n\tsizeb, _ := x.Mask.Size()\n\t// ignore label for comparison\n\treturn a.IP.Equal(x.IP) && sizea == sizeb\n}\n\nfunc (a Addr) PeerEqual(x Addr) bool {\n\tsizea, _ := a.Peer.Mask.Size()\n\tsizeb, _ := x.Peer.Mask.Size()\n\t// ignore label for comparison\n\treturn a.Peer.IP.Equal(x.Peer.IP) && sizea == sizeb\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/addr_linux.go",
    "content": "package netlink\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"syscall\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"github.com/vishvananda/netns\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// AddrAdd will add an IP address to a link device.\n//\n// Equivalent to: `ip addr add $addr dev $link`\n//\n// If `addr` is an IPv4 address and the broadcast address is not given, it\n// will be automatically computed based on the IP mask if /30 or larger.\n// If `net.IPv4zero` is given as the broadcast address, broadcast is disabled.\nfunc AddrAdd(link Link, addr *Addr) error {\n\treturn pkgHandle.AddrAdd(link, addr)\n}\n\n// AddrAdd will add an IP address to a link device.\n//\n// Equivalent to: `ip addr add $addr dev $link`\n//\n// If `addr` is an IPv4 address and the broadcast address is not given, it\n// will be automatically computed based on the IP mask if /30 or larger.\n// If `net.IPv4zero` is given as the broadcast address, broadcast is disabled.\nfunc (h *Handle) AddrAdd(link Link, addr *Addr) error {\n\treq := h.newNetlinkRequest(unix.RTM_NEWADDR, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)\n\treturn h.addrHandle(link, addr, req)\n}\n\n// AddrReplace will replace (or, if not present, add) an IP address on a link device.\n//\n// Equivalent to: `ip addr replace $addr dev $link`\n//\n// If `addr` is an IPv4 address and the broadcast address is not given, it\n// will be automatically computed based on the IP mask if /30 or larger.\n// If `net.IPv4zero` is given as the broadcast address, broadcast is disabled.\nfunc AddrReplace(link Link, addr *Addr) error {\n\treturn pkgHandle.AddrReplace(link, addr)\n}\n\n// AddrReplace will replace (or, if not present, add) an IP address on a link device.\n//\n// Equivalent to: `ip addr replace $addr dev $link`\n//\n// If `addr` is an IPv4 address and the broadcast address is not given, it\n// will be automatically computed based on the IP mask if /30 or larger.\n// If `net.IPv4zero` is given as the broadcast address, broadcast is disabled.\nfunc (h *Handle) AddrReplace(link Link, addr *Addr) error {\n\treq := h.newNetlinkRequest(unix.RTM_NEWADDR, unix.NLM_F_CREATE|unix.NLM_F_REPLACE|unix.NLM_F_ACK)\n\treturn h.addrHandle(link, addr, req)\n}\n\n// AddrDel will delete an IP address from a link device.\n//\n// Equivalent to: `ip addr del $addr dev $link`\nfunc AddrDel(link Link, addr *Addr) error {\n\treturn pkgHandle.AddrDel(link, addr)\n}\n\n// AddrDel will delete an IP address from a link device.\n//\n// Equivalent to: `ip addr del $addr dev $link`\nfunc (h *Handle) AddrDel(link Link, addr *Addr) error {\n\treq := h.newNetlinkRequest(unix.RTM_DELADDR, unix.NLM_F_ACK)\n\treturn h.addrHandle(link, addr, req)\n}\n\nfunc (h *Handle) addrHandle(link Link, addr *Addr, req *nl.NetlinkRequest) error {\n\tfamily := nl.GetIPFamily(addr.IP)\n\tmsg := nl.NewIfAddrmsg(family)\n\tmsg.Scope = uint8(addr.Scope)\n\tif link == nil {\n\t\tmsg.Index = uint32(addr.LinkIndex)\n\t} else {\n\t\tbase := link.Attrs()\n\t\th.ensureIndex(base)\n\t\tmsg.Index = uint32(base.Index)\n\t}\n\tmask := addr.Mask\n\tif addr.Peer != nil {\n\t\tmask = addr.Peer.Mask\n\t}\n\tprefixlen, masklen := mask.Size()\n\tmsg.Prefixlen = uint8(prefixlen)\n\treq.AddData(msg)\n\n\tvar localAddrData []byte\n\tif family == FAMILY_V4 {\n\t\tlocalAddrData = addr.IP.To4()\n\t} else {\n\t\tlocalAddrData = addr.IP.To16()\n\t}\n\n\tlocalData := nl.NewRtAttr(unix.IFA_LOCAL, localAddrData)\n\treq.AddData(localData)\n\tvar peerAddrData []byte\n\tif addr.Peer != nil {\n\t\tif family == FAMILY_V4 {\n\t\t\tpeerAddrData = addr.Peer.IP.To4()\n\t\t} else {\n\t\t\tpeerAddrData = addr.Peer.IP.To16()\n\t\t}\n\t} else {\n\t\tpeerAddrData = localAddrData\n\t}\n\n\taddressData := nl.NewRtAttr(unix.IFA_ADDRESS, peerAddrData)\n\treq.AddData(addressData)\n\n\tif addr.Flags != 0 {\n\t\tif addr.Flags <= 0xff {\n\t\t\tmsg.IfAddrmsg.Flags = uint8(addr.Flags)\n\t\t} else {\n\t\t\tb := make([]byte, 4)\n\t\t\tnative.PutUint32(b, uint32(addr.Flags))\n\t\t\tflagsData := nl.NewRtAttr(unix.IFA_FLAGS, b)\n\t\t\treq.AddData(flagsData)\n\t\t}\n\t}\n\n\tif family == FAMILY_V4 {\n\t\t// Automatically set the broadcast address if it is unset and the\n\t\t// subnet is large enough to sensibly have one (/30 or larger).\n\t\t// See: RFC 3021\n\t\tif addr.Broadcast == nil && prefixlen < 31 {\n\t\t\tcalcBroadcast := make(net.IP, masklen/8)\n\t\t\tfor i := range localAddrData {\n\t\t\t\tcalcBroadcast[i] = localAddrData[i] | ^mask[i]\n\t\t\t}\n\t\t\taddr.Broadcast = calcBroadcast\n\t\t}\n\n\t\tif net.IPv4zero.Equal(addr.Broadcast) {\n\t\t\taddr.Broadcast = nil\n\t\t}\n\n\t\tif addr.Broadcast != nil {\n\t\t\treq.AddData(nl.NewRtAttr(unix.IFA_BROADCAST, addr.Broadcast))\n\t\t}\n\n\t\tif addr.Label != \"\" {\n\t\t\tlabelData := nl.NewRtAttr(unix.IFA_LABEL, nl.ZeroTerminated(addr.Label))\n\t\t\treq.AddData(labelData)\n\t\t}\n\t}\n\n\t// 0 is the default value for these attributes. However, 0 means \"expired\", while the least-surprising default\n\t// value should be \"forever\". To compensate for that, only add the attributes if at least one of the values is\n\t// non-zero, which means the caller has explicitly set them\n\tif addr.ValidLft > 0 || addr.PreferedLft > 0 {\n\t\tcachedata := nl.IfaCacheInfo{unix.IfaCacheinfo{\n\t\t\tValid:    uint32(addr.ValidLft),\n\t\t\tPrefered: uint32(addr.PreferedLft),\n\t\t}}\n\t\treq.AddData(nl.NewRtAttr(unix.IFA_CACHEINFO, cachedata.Serialize()))\n\t}\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// AddrList gets a list of IP addresses in the system.\n// Equivalent to: `ip addr show`.\n// The list can be filtered by link and ip family.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc AddrList(link Link, family int) ([]Addr, error) {\n\treturn pkgHandle.AddrList(link, family)\n}\n\n// AddrList gets a list of IP addresses in the system.\n// Equivalent to: `ip addr show`.\n// The list can be filtered by link and ip family.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) AddrList(link Link, family int) ([]Addr, error) {\n\treq := h.newNetlinkRequest(unix.RTM_GETADDR, unix.NLM_F_DUMP)\n\tmsg := nl.NewIfAddrmsg(family)\n\treq.AddData(msg)\n\n\tmsgs, executeErr := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWADDR)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\tindexFilter := 0\n\tif link != nil {\n\t\tbase := link.Attrs()\n\t\th.ensureIndex(base)\n\t\tindexFilter = base.Index\n\t}\n\n\tvar res []Addr\n\tfor _, m := range msgs {\n\t\taddr, msgFamily, err := parseAddr(m)\n\t\tif err != nil {\n\t\t\treturn res, err\n\t\t}\n\n\t\tif link != nil && addr.LinkIndex != indexFilter {\n\t\t\t// Ignore messages from other interfaces\n\t\t\tcontinue\n\t\t}\n\n\t\tif family != FAMILY_ALL && msgFamily != family {\n\t\t\tcontinue\n\t\t}\n\n\t\tres = append(res, addr)\n\t}\n\n\treturn res, executeErr\n}\n\nfunc parseAddr(m []byte) (addr Addr, family int, err error) {\n\tmsg := nl.DeserializeIfAddrmsg(m)\n\n\tfamily = -1\n\taddr.LinkIndex = -1\n\n\tattrs, err1 := nl.ParseRouteAttr(m[msg.Len():])\n\tif err1 != nil {\n\t\terr = err1\n\t\treturn\n\t}\n\n\tfamily = int(msg.Family)\n\taddr.LinkIndex = int(msg.Index)\n\n\tvar local, dst *net.IPNet\n\tfor _, attr := range attrs {\n\t\tswitch attr.Attr.Type {\n\t\tcase unix.IFA_ADDRESS:\n\t\t\tdst = &net.IPNet{\n\t\t\t\tIP:   attr.Value,\n\t\t\t\tMask: net.CIDRMask(int(msg.Prefixlen), 8*len(attr.Value)),\n\t\t\t}\n\t\tcase unix.IFA_LOCAL:\n\t\t\t// iproute2 manual:\n\t\t\t// If a peer address is specified, the local address\n\t\t\t// cannot have a prefix length. The network prefix is\n\t\t\t// associated with the peer rather than with the local\n\t\t\t// address.\n\t\t\tn := 8 * len(attr.Value)\n\t\t\tlocal = &net.IPNet{\n\t\t\t\tIP:   attr.Value,\n\t\t\t\tMask: net.CIDRMask(n, n),\n\t\t\t}\n\t\tcase unix.IFA_BROADCAST:\n\t\t\taddr.Broadcast = attr.Value\n\t\tcase unix.IFA_LABEL:\n\t\t\taddr.Label = string(attr.Value[:len(attr.Value)-1])\n\t\tcase unix.IFA_FLAGS:\n\t\t\taddr.Flags = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.IFA_CACHEINFO:\n\t\t\tci := nl.DeserializeIfaCacheInfo(attr.Value)\n\t\t\taddr.PreferedLft = int(ci.Prefered)\n\t\t\taddr.ValidLft = int(ci.Valid)\n\t\t}\n\t}\n\n\t// libnl addr.c comment:\n\t// IPv6 sends the local address as IFA_ADDRESS with no\n\t// IFA_LOCAL, IPv4 sends both IFA_LOCAL and IFA_ADDRESS\n\t// with IFA_ADDRESS being the peer address if they differ\n\t//\n\t// But obviously, as there are IPv6 PtP addresses, too,\n\t// IFA_LOCAL should also be handled for IPv6.\n\tif local != nil {\n\t\tif family == FAMILY_V4 && dst != nil && local.IP.Equal(dst.IP) {\n\t\t\taddr.IPNet = dst\n\t\t} else {\n\t\t\taddr.IPNet = local\n\t\t\taddr.Peer = dst\n\t\t}\n\t} else {\n\t\taddr.IPNet = dst\n\t}\n\n\taddr.Scope = int(msg.Scope)\n\n\treturn\n}\n\ntype AddrUpdate struct {\n\tLinkAddress net.IPNet\n\tLinkIndex   int\n\tFlags       int\n\tScope       int\n\tPreferedLft int\n\tValidLft    int\n\tNewAddr     bool // true=added false=deleted\n}\n\n// AddrSubscribe takes a chan down which notifications will be sent\n// when addresses change.  Close the 'done' chan to stop subscription.\nfunc AddrSubscribe(ch chan<- AddrUpdate, done <-chan struct{}) error {\n\treturn addrSubscribeAt(netns.None(), netns.None(), ch, done, nil, false, 0, nil, false)\n}\n\n// AddrSubscribeAt works like AddrSubscribe plus it allows the caller\n// to choose the network namespace in which to subscribe (ns).\nfunc AddrSubscribeAt(ns netns.NsHandle, ch chan<- AddrUpdate, done <-chan struct{}) error {\n\treturn addrSubscribeAt(ns, netns.None(), ch, done, nil, false, 0, nil, false)\n}\n\n// AddrSubscribeOptions contains a set of options to use with\n// AddrSubscribeWithOptions.\ntype AddrSubscribeOptions struct {\n\tNamespace              *netns.NsHandle\n\tErrorCallback          func(error)\n\tListExisting           bool\n\tReceiveBufferSize      int\n\tReceiveBufferForceSize bool\n\tReceiveTimeout         *unix.Timeval\n}\n\n// AddrSubscribeWithOptions work like AddrSubscribe but enable to\n// provide additional options to modify the behavior. Currently, the\n// namespace can be provided as well as an error callback.\nfunc AddrSubscribeWithOptions(ch chan<- AddrUpdate, done <-chan struct{}, options AddrSubscribeOptions) error {\n\tif options.Namespace == nil {\n\t\tnone := netns.None()\n\t\toptions.Namespace = &none\n\t}\n\treturn addrSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting,\n\t\toptions.ReceiveBufferSize, options.ReceiveTimeout, options.ReceiveBufferForceSize)\n}\n\nfunc addrSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- AddrUpdate, done <-chan struct{}, cberr func(error), listExisting bool,\n\trcvbuf int, rcvTimeout *unix.Timeval, rcvBufForce bool) error {\n\ts, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_IPV4_IFADDR, unix.RTNLGRP_IPV6_IFADDR)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif rcvTimeout != nil {\n\t\tif err := s.SetReceiveTimeout(rcvTimeout); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif rcvbuf != 0 {\n\t\terr = s.SetReceiveBufferSize(rcvbuf, rcvBufForce)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif done != nil {\n\t\tgo func() {\n\t\t\t<-done\n\t\t\ts.Close()\n\t\t}()\n\t}\n\tif listExisting {\n\t\treq := pkgHandle.newNetlinkRequest(unix.RTM_GETADDR,\n\t\t\tunix.NLM_F_DUMP)\n\t\tinfmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\t\treq.AddData(infmsg)\n\t\tif err := s.Send(req); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tgo func() {\n\t\tdefer close(ch)\n\t\tfor {\n\t\t\tmsgs, from, err := s.Receive()\n\t\t\tif err != nil {\n\t\t\t\tif cberr != nil {\n\t\t\t\t\tcberr(fmt.Errorf(\"Receive failed: %v\",\n\t\t\t\t\t\terr))\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif from.Pid != nl.PidKernel {\n\t\t\t\tif cberr != nil {\n\t\t\t\t\tcberr(fmt.Errorf(\"Wrong sender portid %d, expected %d\", from.Pid, nl.PidKernel))\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor _, m := range msgs {\n\t\t\t\tif m.Header.Type == unix.NLMSG_DONE {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif m.Header.Type == unix.NLMSG_ERROR {\n\t\t\t\t\terror := int32(native.Uint32(m.Data[0:4]))\n\t\t\t\t\tif error == 0 {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif cberr != nil {\n\t\t\t\t\t\tcberr(fmt.Errorf(\"error message: %v\",\n\t\t\t\t\t\t\tsyscall.Errno(-error)))\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tmsgType := m.Header.Type\n\t\t\t\tif msgType != unix.RTM_NEWADDR && msgType != unix.RTM_DELADDR {\n\t\t\t\t\tif cberr != nil {\n\t\t\t\t\t\tcberr(fmt.Errorf(\"bad message type: %d\", msgType))\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\taddr, _, err := parseAddr(m.Data)\n\t\t\t\tif err != nil {\n\t\t\t\t\tif cberr != nil {\n\t\t\t\t\t\tcberr(fmt.Errorf(\"could not parse address: %v\", err))\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tch <- AddrUpdate{LinkAddress: *addr.IPNet,\n\t\t\t\t\tLinkIndex:   addr.LinkIndex,\n\t\t\t\t\tNewAddr:     msgType == unix.RTM_NEWADDR,\n\t\t\t\t\tFlags:       addr.Flags,\n\t\t\t\t\tScope:       addr.Scope,\n\t\t\t\t\tPreferedLft: addr.PreferedLft,\n\t\t\t\t\tValidLft:    addr.ValidLft}\n\t\t\t}\n\t\t}\n\t}()\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/bpf_linux.go",
    "content": "package netlink\n\nimport (\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\ntype BpfProgType uint32\n\nconst (\n\tBPF_PROG_TYPE_UNSPEC BpfProgType = iota\n\tBPF_PROG_TYPE_SOCKET_FILTER\n\tBPF_PROG_TYPE_KPROBE\n\tBPF_PROG_TYPE_SCHED_CLS\n\tBPF_PROG_TYPE_SCHED_ACT\n\tBPF_PROG_TYPE_TRACEPOINT\n\tBPF_PROG_TYPE_XDP\n\tBPF_PROG_TYPE_PERF_EVENT\n\tBPF_PROG_TYPE_CGROUP_SKB\n\tBPF_PROG_TYPE_CGROUP_SOCK\n\tBPF_PROG_TYPE_LWT_IN\n\tBPF_PROG_TYPE_LWT_OUT\n\tBPF_PROG_TYPE_LWT_XMIT\n\tBPF_PROG_TYPE_SOCK_OPS\n\tBPF_PROG_TYPE_SK_SKB\n\tBPF_PROG_TYPE_CGROUP_DEVICE\n\tBPF_PROG_TYPE_SK_MSG\n\tBPF_PROG_TYPE_RAW_TRACEPOINT\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL\n\tBPF_PROG_TYPE_LIRC_MODE2\n\tBPF_PROG_TYPE_SK_REUSEPORT\n\tBPF_PROG_TYPE_FLOW_DISSECTOR\n\tBPF_PROG_TYPE_CGROUP_SYSCTL\n\tBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE\n\tBPF_PROG_TYPE_CGROUP_SOCKOPT\n\tBPF_PROG_TYPE_TRACING\n\tBPF_PROG_TYPE_STRUCT_OPS\n\tBPF_PROG_TYPE_EXT\n\tBPF_PROG_TYPE_LSM\n\tBPF_PROG_TYPE_SK_LOOKUP\n)\n\ntype BPFAttr struct {\n\tProgType    uint32\n\tInsnCnt     uint32\n\tInsns       uintptr\n\tLicense     uintptr\n\tLogLevel    uint32\n\tLogSize     uint32\n\tLogBuf      uintptr\n\tKernVersion uint32\n}\n\n// loadSimpleBpf loads a trivial bpf program for testing purposes.\nfunc loadSimpleBpf(progType BpfProgType, ret uint32) (int, error) {\n\tinsns := []uint64{\n\t\t0x00000000000000b7 | (uint64(ret) << 32),\n\t\t0x0000000000000095,\n\t}\n\tlicense := []byte{'A', 'S', 'L', '2', '\\x00'}\n\tattr := BPFAttr{\n\t\tProgType: uint32(progType),\n\t\tInsnCnt:  uint32(len(insns)),\n\t\tInsns:    uintptr(unsafe.Pointer(&insns[0])),\n\t\tLicense:  uintptr(unsafe.Pointer(&license[0])),\n\t}\n\tfd, _, errno := unix.Syscall(unix.SYS_BPF,\n\t\t5, /* bpf cmd */\n\t\tuintptr(unsafe.Pointer(&attr)),\n\t\tunsafe.Sizeof(attr))\n\tif errno != 0 {\n\t\treturn 0, errno\n\t}\n\treturn int(fd), nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/bridge_linux.go",
    "content": "package netlink\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"syscall\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// BridgeVlanTunnelShow gets vlanid-tunnelid mapping.\n// Equivalent to: `bridge vlan tunnelshow`\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc BridgeVlanTunnelShow() ([]nl.TunnelInfo, error) {\n\treturn pkgHandle.BridgeVlanTunnelShow()\n}\n\nfunc (h *Handle) BridgeVlanTunnelShow() ([]nl.TunnelInfo, error) {\n\treq := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_DUMP)\n\tmsg := nl.NewIfInfomsg(unix.AF_BRIDGE)\n\treq.AddData(msg)\n\treq.AddData(nl.NewRtAttr(unix.IFLA_EXT_MASK, nl.Uint32Attr(uint32(nl.RTEXT_FILTER_BRVLAN))))\n\n\tmsgs, executeErr := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWLINK)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\tret := make([]nl.TunnelInfo, 0)\n\tfor _, m := range msgs {\n\t\tmsg := nl.DeserializeIfInfomsg(m)\n\n\t\tattrs, err := nl.ParseRouteAttr(m[msg.Len():])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor _, attr := range attrs {\n\t\t\tswitch attr.Attr.Type {\n\t\t\tcase unix.IFLA_AF_SPEC:\n\t\t\t\tnestedAttrs, err := nl.ParseRouteAttr(attr.Value)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"failed to parse nested attr %v\", err)\n\t\t\t\t}\n\t\t\t\tfor _, nestAttr := range nestedAttrs {\n\t\t\t\t\tswitch nestAttr.Attr.Type {\n\t\t\t\t\tcase nl.IFLA_BRIDGE_VLAN_TUNNEL_INFO:\n\t\t\t\t\t\tret, err = parseTunnelInfo(&nestAttr, ret)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn nil, fmt.Errorf(\"failed to parse tunnelinfo %v\", err)\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\treturn ret, executeErr\n}\n\nfunc parseTunnelInfo(nestAttr *syscall.NetlinkRouteAttr, results []nl.TunnelInfo) ([]nl.TunnelInfo, error) {\n\ttunnelInfos, err := nl.ParseRouteAttr(nestAttr.Value)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse nested attr %v\", err)\n\t}\n\tvar tunnelId uint32\n\tvar vid uint16\n\tvar flag uint16\n\tfor _, tunnelInfo := range tunnelInfos {\n\t\tswitch tunnelInfo.Attr.Type {\n\t\tcase nl.IFLA_BRIDGE_VLAN_TUNNEL_ID:\n\t\t\ttunnelId = native.Uint32(tunnelInfo.Value)\n\t\tcase nl.IFLA_BRIDGE_VLAN_TUNNEL_VID:\n\t\t\tvid = native.Uint16(tunnelInfo.Value)\n\t\tcase nl.IFLA_BRIDGE_VLAN_TUNNEL_FLAGS:\n\t\t\tflag = native.Uint16(tunnelInfo.Value)\n\t\t}\n\t}\n\n\tif flag == nl.BRIDGE_VLAN_INFO_RANGE_END {\n\t\tlastTi := results[len(results)-1]\n\t\tvni := lastTi.TunId + 1\n\t\tfor i := lastTi.Vid + 1; i < vid; i++ {\n\t\t\tt := nl.TunnelInfo{\n\t\t\t\tTunId: vni,\n\t\t\t\tVid:   i,\n\t\t\t}\n\t\t\tresults = append(results, t)\n\t\t\tvni++\n\t\t}\n\t}\n\n\tt := nl.TunnelInfo{\n\t\tTunId: tunnelId,\n\t\tVid:   vid,\n\t}\n\n\tresults = append(results, t)\n\treturn results, nil\n}\n\n// BridgeVlanList gets a map of device id to bridge vlan infos.\n// Equivalent to: `bridge vlan show`\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc BridgeVlanList() (map[int32][]*nl.BridgeVlanInfo, error) {\n\treturn pkgHandle.BridgeVlanList()\n}\n\n// BridgeVlanList gets a map of device id to bridge vlan infos.\n// Equivalent to: `bridge vlan show`\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) BridgeVlanList() (map[int32][]*nl.BridgeVlanInfo, error) {\n\treq := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_DUMP)\n\tmsg := nl.NewIfInfomsg(unix.AF_BRIDGE)\n\treq.AddData(msg)\n\treq.AddData(nl.NewRtAttr(unix.IFLA_EXT_MASK, nl.Uint32Attr(uint32(nl.RTEXT_FILTER_BRVLAN))))\n\n\tmsgs, executeErr := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWLINK)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\tret := make(map[int32][]*nl.BridgeVlanInfo)\n\tfor _, m := range msgs {\n\t\tmsg := nl.DeserializeIfInfomsg(m)\n\n\t\tattrs, err := nl.ParseRouteAttr(m[msg.Len():])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor _, attr := range attrs {\n\t\t\tswitch attr.Attr.Type {\n\t\t\tcase unix.IFLA_AF_SPEC:\n\t\t\t\t//nested attr\n\t\t\t\tnestAttrs, err := nl.ParseRouteAttr(attr.Value)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"failed to parse nested attr %v\", err)\n\t\t\t\t}\n\t\t\t\tfor _, nestAttr := range nestAttrs {\n\t\t\t\t\tswitch nestAttr.Attr.Type {\n\t\t\t\t\tcase nl.IFLA_BRIDGE_VLAN_INFO:\n\t\t\t\t\t\tvlanInfo := nl.DeserializeBridgeVlanInfo(nestAttr.Value)\n\t\t\t\t\t\tret[msg.Index] = append(ret[msg.Index], vlanInfo)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn ret, executeErr\n}\n\n// BridgeVlanAddTunnelInfo adds a new vlan filter entry\n// Equivalent to: `bridge vlan add dev DEV vid VID tunnel_info id TUNID [ self ] [ master ]`\nfunc BridgeVlanAddTunnelInfo(link Link, vid uint16, tunid uint32, self, master bool) error {\n\treturn pkgHandle.BridgeVlanAddTunnelInfo(link, vid, 0, tunid, 0, self, master)\n}\n\n// BridgeVlanAddRangeTunnelInfoRange adds a new vlan filter entry\n// Equivalent to: `bridge vlan add dev DEV vid VID-VIDEND tunnel_info id VIN-VINEND [ self ] [ master ]`\nfunc BridgeVlanAddRangeTunnelInfoRange(link Link, vid, vidEnd uint16, tunid, tunidEnd uint32, self, master bool) error {\n\treturn pkgHandle.BridgeVlanAddTunnelInfo(link, vid, vidEnd, tunid, tunidEnd, self, master)\n}\n\nfunc (h *Handle) BridgeVlanAddTunnelInfo(link Link, vid, vidEnd uint16, tunid, tunidEnd uint32, self, master bool) error {\n\treturn h.bridgeVlanModify(unix.RTM_SETLINK, link, vid, vidEnd, tunid, tunidEnd, false, false, self, master)\n}\n\n// BridgeVlanDelTunnelInfo adds a new vlan filter entry\n// Equivalent to: `bridge vlan del dev DEV vid VID tunnel_info id TUNID [ self ] [ master ]`\nfunc BridgeVlanDelTunnelInfo(link Link, vid uint16, tunid uint32, self, master bool) error {\n\treturn pkgHandle.BridgeVlanDelTunnelInfo(link, vid, 0, tunid, 0, self, master)\n}\n\n// BridgeVlanDelRangeTunnelInfoRange adds a new vlan filter entry\n// Equivalent to: `bridge vlan del dev DEV vid VID-VIDEND tunnel_info id VIN-VINEND [ self ] [ master ]`\nfunc BridgeVlanDelRangeTunnelInfoRange(link Link, vid, vidEnd uint16, tunid, tunidEnd uint32, self, master bool) error {\n\treturn pkgHandle.BridgeVlanDelTunnelInfo(link, vid, vidEnd, tunid, tunidEnd, self, master)\n}\n\nfunc (h *Handle) BridgeVlanDelTunnelInfo(link Link, vid, vidEnd uint16, tunid, tunidEnd uint32, self, master bool) error {\n\treturn h.bridgeVlanModify(unix.RTM_DELLINK, link, vid, vidEnd, tunid, tunidEnd, false, false, self, master)\n}\n\n// BridgeVlanAdd adds a new vlan filter entry\n// Equivalent to: `bridge vlan add dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]`\nfunc BridgeVlanAdd(link Link, vid uint16, pvid, untagged, self, master bool) error {\n\treturn pkgHandle.BridgeVlanAdd(link, vid, pvid, untagged, self, master)\n}\n\n// BridgeVlanAdd adds a new vlan filter entry\n// Equivalent to: `bridge vlan add dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]`\nfunc (h *Handle) BridgeVlanAdd(link Link, vid uint16, pvid, untagged, self, master bool) error {\n\treturn h.bridgeVlanModify(unix.RTM_SETLINK, link, vid, 0, 0, 0, pvid, untagged, self, master)\n}\n\n// BridgeVlanAddRange adds a new vlan filter entry\n// Equivalent to: `bridge vlan add dev DEV vid VID-VIDEND [ pvid ] [ untagged ] [ self ] [ master ]`\nfunc BridgeVlanAddRange(link Link, vid, vidEnd uint16, pvid, untagged, self, master bool) error {\n\treturn pkgHandle.BridgeVlanAddRange(link, vid, vidEnd, pvid, untagged, self, master)\n}\n\n// BridgeVlanAddRange adds a new vlan filter entry\n// Equivalent to: `bridge vlan add dev DEV vid VID-VIDEND [ pvid ] [ untagged ] [ self ] [ master ]`\nfunc (h *Handle) BridgeVlanAddRange(link Link, vid, vidEnd uint16, pvid, untagged, self, master bool) error {\n\treturn h.bridgeVlanModify(unix.RTM_SETLINK, link, vid, vidEnd, 0, 0, pvid, untagged, self, master)\n}\n\n// BridgeVlanDel adds a new vlan filter entry\n// Equivalent to: `bridge vlan del dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]`\nfunc BridgeVlanDel(link Link, vid uint16, pvid, untagged, self, master bool) error {\n\treturn pkgHandle.BridgeVlanDel(link, vid, pvid, untagged, self, master)\n}\n\n// BridgeVlanDel adds a new vlan filter entry\n// Equivalent to: `bridge vlan del dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]`\nfunc (h *Handle) BridgeVlanDel(link Link, vid uint16, pvid, untagged, self, master bool) error {\n\treturn h.bridgeVlanModify(unix.RTM_DELLINK, link, vid, 0, 0, 0, pvid, untagged, self, master)\n}\n\n// BridgeVlanDelRange adds a new vlan filter entry\n// Equivalent to: `bridge vlan del dev DEV vid VID-VIDEND [ pvid ] [ untagged ] [ self ] [ master ]`\nfunc BridgeVlanDelRange(link Link, vid, vidEnd uint16, pvid, untagged, self, master bool) error {\n\treturn pkgHandle.BridgeVlanDelRange(link, vid, vidEnd, pvid, untagged, self, master)\n}\n\n// BridgeVlanDelRange adds a new vlan filter entry\n// Equivalent to: `bridge vlan del dev DEV vid VID-VIDEND [ pvid ] [ untagged ] [ self ] [ master ]`\nfunc (h *Handle) BridgeVlanDelRange(link Link, vid, vidEnd uint16, pvid, untagged, self, master bool) error {\n\treturn h.bridgeVlanModify(unix.RTM_DELLINK, link, vid, vidEnd, 0, 0, pvid, untagged, self, master)\n}\n\nfunc (h *Handle) bridgeVlanModify(cmd int, link Link, vid, vidEnd uint16, tunid, tunidEnd uint32, pvid, untagged, self, master bool) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(cmd, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_BRIDGE)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tbr := nl.NewRtAttr(unix.IFLA_AF_SPEC, nil)\n\tvar flags uint16\n\tif self {\n\t\tflags |= nl.BRIDGE_FLAGS_SELF\n\t}\n\tif master {\n\t\tflags |= nl.BRIDGE_FLAGS_MASTER\n\t}\n\tif flags > 0 {\n\t\tbr.AddRtAttr(nl.IFLA_BRIDGE_FLAGS, nl.Uint16Attr(flags))\n\t}\n\n\tif tunid != 0 {\n\t\tif tunidEnd != 0 {\n\t\t\ttiStart := br.AddRtAttr(nl.IFLA_BRIDGE_VLAN_TUNNEL_INFO, nil)\n\t\t\ttiStart.AddRtAttr(nl.IFLA_BRIDGE_VLAN_TUNNEL_ID, nl.Uint32Attr(tunid))\n\t\t\ttiStart.AddRtAttr(nl.IFLA_BRIDGE_VLAN_TUNNEL_VID, nl.Uint16Attr(vid))\n\t\t\ttiStart.AddRtAttr(nl.IFLA_BRIDGE_VLAN_TUNNEL_FLAGS, nl.Uint16Attr(nl.BRIDGE_VLAN_INFO_RANGE_BEGIN))\n\n\t\t\ttiEnd := br.AddRtAttr(nl.IFLA_BRIDGE_VLAN_TUNNEL_INFO, nil)\n\t\t\ttiEnd.AddRtAttr(nl.IFLA_BRIDGE_VLAN_TUNNEL_ID, nl.Uint32Attr(tunidEnd))\n\t\t\ttiEnd.AddRtAttr(nl.IFLA_BRIDGE_VLAN_TUNNEL_VID, nl.Uint16Attr(vidEnd))\n\t\t\ttiEnd.AddRtAttr(nl.IFLA_BRIDGE_VLAN_TUNNEL_FLAGS, nl.Uint16Attr(nl.BRIDGE_VLAN_INFO_RANGE_END))\n\t\t} else {\n\t\t\tti := br.AddRtAttr(nl.IFLA_BRIDGE_VLAN_TUNNEL_INFO, nil)\n\t\t\tti.AddRtAttr(nl.IFLA_BRIDGE_VLAN_TUNNEL_ID, nl.Uint32Attr(tunid))\n\t\t\tti.AddRtAttr(nl.IFLA_BRIDGE_VLAN_TUNNEL_VID, nl.Uint16Attr(vid))\n\t\t\tti.AddRtAttr(nl.IFLA_BRIDGE_VLAN_TUNNEL_FLAGS, nl.Uint16Attr(0))\n\t\t}\n\t} else {\n\t\tvlanInfo := &nl.BridgeVlanInfo{Vid: vid}\n\t\tif pvid {\n\t\t\tvlanInfo.Flags |= nl.BRIDGE_VLAN_INFO_PVID\n\t\t}\n\t\tif untagged {\n\t\t\tvlanInfo.Flags |= nl.BRIDGE_VLAN_INFO_UNTAGGED\n\t\t}\n\n\t\tif vidEnd != 0 {\n\t\t\tvlanEndInfo := &nl.BridgeVlanInfo{Vid: vidEnd}\n\t\t\tvlanEndInfo.Flags = vlanInfo.Flags\n\n\t\t\tvlanInfo.Flags |= nl.BRIDGE_VLAN_INFO_RANGE_BEGIN\n\t\t\tbr.AddRtAttr(nl.IFLA_BRIDGE_VLAN_INFO, vlanInfo.Serialize())\n\n\t\t\tvlanEndInfo.Flags |= nl.BRIDGE_VLAN_INFO_RANGE_END\n\t\t\tbr.AddRtAttr(nl.IFLA_BRIDGE_VLAN_INFO, vlanEndInfo.Serialize())\n\t\t} else {\n\t\t\tbr.AddRtAttr(nl.IFLA_BRIDGE_VLAN_INFO, vlanInfo.Serialize())\n\t\t}\n\t}\n\n\treq.AddData(br)\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/chain.go",
    "content": "package netlink\n\nimport (\n\t\"fmt\"\n)\n\n// Chain contains the attributes of a Chain\ntype Chain struct {\n\tParent uint32\n\tChain  uint32\n}\n\nfunc (c Chain) String() string {\n\treturn fmt.Sprintf(\"{Parent: %d, Chain: %d}\", c.Parent, c.Chain)\n}\n\nfunc NewChain(parent uint32, chain uint32) Chain {\n\treturn Chain{\n\t\tParent: parent,\n\t\tChain:  chain,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/chain_linux.go",
    "content": "package netlink\n\nimport (\n\t\"errors\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// ChainDel will delete a chain from the system.\nfunc ChainDel(link Link, chain Chain) error {\n\t// Equivalent to: `tc chain del $chain`\n\treturn pkgHandle.ChainDel(link, chain)\n}\n\n// ChainDel will delete a chain from the system.\n// Equivalent to: `tc chain del $chain`\nfunc (h *Handle) ChainDel(link Link, chain Chain) error {\n\treturn h.chainModify(unix.RTM_DELCHAIN, 0, link, chain)\n}\n\n// ChainAdd will add a chain to the system.\n// Equivalent to: `tc chain add`\nfunc ChainAdd(link Link, chain Chain) error {\n\treturn pkgHandle.ChainAdd(link, chain)\n}\n\n// ChainAdd will add a chain to the system.\n// Equivalent to: `tc chain add`\nfunc (h *Handle) ChainAdd(link Link, chain Chain) error {\n\treturn h.chainModify(\n\t\tunix.RTM_NEWCHAIN,\n\t\tunix.NLM_F_CREATE|unix.NLM_F_EXCL,\n\t\tlink,\n\t\tchain)\n}\n\nfunc (h *Handle) chainModify(cmd, flags int, link Link, chain Chain) error {\n\treq := h.newNetlinkRequest(cmd, flags|unix.NLM_F_ACK)\n\tindex := int32(0)\n\tif link != nil {\n\t\tbase := link.Attrs()\n\t\th.ensureIndex(base)\n\t\tindex = int32(base.Index)\n\t}\n\tmsg := &nl.TcMsg{\n\t\tFamily:  nl.FAMILY_ALL,\n\t\tIfindex: index,\n\t\tParent:  chain.Parent,\n\t}\n\treq.AddData(msg)\n\treq.AddData(nl.NewRtAttr(nl.TCA_CHAIN, nl.Uint32Attr(chain.Chain)))\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// ChainList gets a list of chains in the system.\n// Equivalent to: `tc chain list`.\n// The list can be filtered by link.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc ChainList(link Link, parent uint32) ([]Chain, error) {\n\treturn pkgHandle.ChainList(link, parent)\n}\n\n// ChainList gets a list of chains in the system.\n// Equivalent to: `tc chain list`.\n// The list can be filtered by link.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) ChainList(link Link, parent uint32) ([]Chain, error) {\n\treq := h.newNetlinkRequest(unix.RTM_GETCHAIN, unix.NLM_F_DUMP)\n\tindex := int32(0)\n\tif link != nil {\n\t\tbase := link.Attrs()\n\t\th.ensureIndex(base)\n\t\tindex = int32(base.Index)\n\t}\n\tmsg := &nl.TcMsg{\n\t\tFamily:  nl.FAMILY_ALL,\n\t\tIfindex: index,\n\t\tParent:  parent,\n\t}\n\treq.AddData(msg)\n\n\tmsgs, executeErr := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWCHAIN)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\tvar res []Chain\n\tfor _, m := range msgs {\n\t\tmsg := nl.DeserializeTcMsg(m)\n\n\t\tattrs, err := nl.ParseRouteAttr(m[msg.Len():])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// skip chains from other interfaces\n\t\tif link != nil && msg.Ifindex != index {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar chain Chain\n\t\tfor _, attr := range attrs {\n\t\t\tswitch attr.Attr.Type {\n\t\t\tcase nl.TCA_CHAIN:\n\t\t\t\tchain.Chain = native.Uint32(attr.Value)\n\t\t\t\tchain.Parent = parent\n\t\t\t}\n\t\t}\n\t\tres = append(res, chain)\n\t}\n\n\treturn res, executeErr\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/class.go",
    "content": "package netlink\n\nimport (\n\t\"fmt\"\n)\n\n// Class interfaces for all classes\ntype Class interface {\n\tAttrs() *ClassAttrs\n\tType() string\n}\n\n// Generic networking statistics for netlink users.\n// This file contains \"gnet_\" prefixed structs and relevant functions.\n// See Documentation/networking/getn_stats.txt in Linux source code for more details.\n\n// GnetStatsBasic Ref: struct gnet_stats_basic { ... }\ntype GnetStatsBasic struct {\n\tBytes   uint64 // number of seen bytes\n\tPackets uint32 // number of seen packets\n}\n\n// GnetStatsRateEst Ref: struct gnet_stats_rate_est { ... }\ntype GnetStatsRateEst struct {\n\tBps uint32 // current byte rate\n\tPps uint32 // current packet rate\n}\n\n// GnetStatsRateEst64 Ref: struct gnet_stats_rate_est64 { ... }\ntype GnetStatsRateEst64 struct {\n\tBps uint64 // current byte rate\n\tPps uint64 // current packet rate\n}\n\n// GnetStatsQueue Ref: struct gnet_stats_queue { ... }\ntype GnetStatsQueue struct {\n\tQlen       uint32 // queue length\n\tBacklog    uint32 // backlog size of queue\n\tDrops      uint32 // number of dropped packets\n\tRequeues   uint32 // number of requues\n\tOverlimits uint32 // number of enqueues over the limit\n}\n\n// ClassStatistics representation based on generic networking statistics for netlink.\n// See Documentation/networking/gen_stats.txt in Linux source code for more details.\ntype ClassStatistics struct {\n\tBasic   *GnetStatsBasic\n\tQueue   *GnetStatsQueue\n\tRateEst *GnetStatsRateEst\n\tBasicHw *GnetStatsBasic // Hardward statistics added in kernel 4.20\n}\n\n// NewClassStatistics Construct a ClassStatistics struct which fields are all initialized by 0.\nfunc NewClassStatistics() *ClassStatistics {\n\treturn &ClassStatistics{\n\t\tBasic:   &GnetStatsBasic{},\n\t\tQueue:   &GnetStatsQueue{},\n\t\tRateEst: &GnetStatsRateEst{},\n\t\tBasicHw: &GnetStatsBasic{},\n\t}\n}\n\n// ClassAttrs represents a netlink class. A filter is associated with a link,\n// has a handle and a parent. The root filter of a device should have a\n// parent == HANDLE_ROOT.\ntype ClassAttrs struct {\n\tLinkIndex  int\n\tHandle     uint32\n\tParent     uint32\n\tLeaf       uint32\n\tStatistics *ClassStatistics\n}\n\nfunc (q ClassAttrs) String() string {\n\treturn fmt.Sprintf(\"{LinkIndex: %d, Handle: %s, Parent: %s, Leaf: %d}\", q.LinkIndex, HandleStr(q.Handle), HandleStr(q.Parent), q.Leaf)\n}\n\n// HtbClassAttrs stores the attributes of HTB class\ntype HtbClassAttrs struct {\n\t// TODO handle all attributes\n\tRate    uint64\n\tCeil    uint64\n\tBuffer  uint32\n\tCbuffer uint32\n\tQuantum uint32\n\tLevel   uint32\n\tPrio    uint32\n}\n\nfunc (q HtbClassAttrs) String() string {\n\treturn fmt.Sprintf(\"{Rate: %d, Ceil: %d, Buffer: %d, Cbuffer: %d}\", q.Rate, q.Ceil, q.Buffer, q.Cbuffer)\n}\n\n// HtbClass represents an Htb class\ntype HtbClass struct {\n\tClassAttrs\n\tRate    uint64\n\tCeil    uint64\n\tBuffer  uint32\n\tCbuffer uint32\n\tQuantum uint32\n\tLevel   uint32\n\tPrio    uint32\n}\n\nfunc (q HtbClass) String() string {\n\treturn fmt.Sprintf(\"{Rate: %d, Ceil: %d, Buffer: %d, Cbuffer: %d}\", q.Rate, q.Ceil, q.Buffer, q.Cbuffer)\n}\n\n// Attrs returns the class attributes\nfunc (q *HtbClass) Attrs() *ClassAttrs {\n\treturn &q.ClassAttrs\n}\n\n// Type return the class type\nfunc (q *HtbClass) Type() string {\n\treturn \"htb\"\n}\n\n// GenericClass classes represent types that are not currently understood\n// by this netlink library.\ntype GenericClass struct {\n\tClassAttrs\n\tClassType string\n}\n\n// Attrs return the class attributes\nfunc (class *GenericClass) Attrs() *ClassAttrs {\n\treturn &class.ClassAttrs\n}\n\n// Type return the class type\nfunc (class *GenericClass) Type() string {\n\treturn class.ClassType\n}\n\n// ServiceCurve is a nondecreasing function of some time unit, returning the amount of service\n// (an allowed or allocated amount of bandwidth) at some specific point in time. The purpose of it\n// should be subconsciously obvious: if a class was allowed to transfer not less than the amount\n// specified by its service curve, then the service curve is not violated.\ntype ServiceCurve struct {\n\tm1 uint32\n\td  uint32\n\tm2 uint32\n}\n\n// Attrs return the parameters of the service curve\nfunc (c *ServiceCurve) Attrs() (uint32, uint32, uint32) {\n\treturn c.m1, c.d, c.m2\n}\n\n// Burst returns the burst rate (m1) of the curve\nfunc (c *ServiceCurve) Burst() uint32 {\n\treturn c.m1\n}\n\n// Delay return the delay (d) of the curve\nfunc (c *ServiceCurve) Delay() uint32 {\n\treturn c.d\n}\n\n// Rate returns the rate (m2) of the curve\nfunc (c *ServiceCurve) Rate() uint32 {\n\treturn c.m2\n}\n\n// HfscClass is a representation of the HFSC class\ntype HfscClass struct {\n\tClassAttrs\n\tRsc ServiceCurve\n\tFsc ServiceCurve\n\tUsc ServiceCurve\n}\n\n// SetUsc sets the USC curve. The bandwidth (m1 and m2) is specified in bits and the delay in\n// seconds.\nfunc (hfsc *HfscClass) SetUsc(m1 uint32, d uint32, m2 uint32) {\n\thfsc.Usc = ServiceCurve{m1: m1, d: d, m2: m2}\n}\n\n// SetFsc sets the Fsc curve. The bandwidth (m1 and m2) is specified in bits and the delay in\n// seconds.\nfunc (hfsc *HfscClass) SetFsc(m1 uint32, d uint32, m2 uint32) {\n\thfsc.Fsc = ServiceCurve{m1: m1, d: d, m2: m2}\n}\n\n// SetRsc sets the Rsc curve. The bandwidth (m1 and m2) is specified in bits and the delay in\n// seconds.\nfunc (hfsc *HfscClass) SetRsc(m1 uint32, d uint32, m2 uint32) {\n\thfsc.Rsc = ServiceCurve{m1: m1, d: d, m2: m2}\n}\n\n// SetSC implements the SC from the `tc` CLI. This function behaves the same as if one would set the\n// USC through the `tc` command-line tool. This means bandwidth (m1 and m2) is specified in bits and\n// the delay in ms.\nfunc (hfsc *HfscClass) SetSC(m1 uint32, d uint32, m2 uint32) {\n\thfsc.SetRsc(m1, d, m2)\n\thfsc.SetFsc(m1, d, m2)\n}\n\n// SetUL implements the UL from the `tc` CLI. This function behaves the same as if one would set the\n// USC through the `tc` command-line tool. This means bandwidth (m1 and m2) is specified in bits and\n// the delay in ms.\nfunc (hfsc *HfscClass) SetUL(m1 uint32, d uint32, m2 uint32) {\n\thfsc.SetUsc(m1, d, m2)\n}\n\n// SetLS implements the LS from the `tc` CLI. This function behaves the same as if one would set the\n// USC through the `tc` command-line tool. This means bandwidth (m1 and m2) is specified in bits and\n// the delay in ms.\nfunc (hfsc *HfscClass) SetLS(m1 uint32, d uint32, m2 uint32) {\n\thfsc.SetFsc(m1, d, m2)\n}\n\n// NewHfscClass returns a new HFSC struct with the set parameters\nfunc NewHfscClass(attrs ClassAttrs) *HfscClass {\n\treturn &HfscClass{\n\t\tClassAttrs: attrs,\n\t\tRsc:        ServiceCurve{},\n\t\tFsc:        ServiceCurve{},\n\t\tUsc:        ServiceCurve{},\n\t}\n}\n\n// String() returns a string that contains the information and attributes of the HFSC class\nfunc (hfsc *HfscClass) String() string {\n\treturn fmt.Sprintf(\n\t\t\"{%s -- {RSC: {m1=%d d=%d m2=%d}} {FSC: {m1=%d d=%d m2=%d}} {USC: {m1=%d d=%d m2=%d}}}\",\n\t\thfsc.Attrs(), hfsc.Rsc.m1*8, hfsc.Rsc.d, hfsc.Rsc.m2*8, hfsc.Fsc.m1*8, hfsc.Fsc.d, hfsc.Fsc.m2*8, hfsc.Usc.m1*8, hfsc.Usc.d, hfsc.Usc.m2*8,\n\t)\n}\n\n// Attrs return the Hfsc parameters\nfunc (hfsc *HfscClass) Attrs() *ClassAttrs {\n\treturn &hfsc.ClassAttrs\n}\n\n// Type return the type of the class\nfunc (hfsc *HfscClass) Type() string {\n\treturn \"hfsc\"\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/class_linux.go",
    "content": "package netlink\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"syscall\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// Internal tc_stats representation in Go struct.\n// This is for internal uses only to deserialize the payload of rtattr.\n// After the deserialization, this should be converted into the canonical stats\n// struct, ClassStatistics, in case of statistics of a class.\n// Ref: struct tc_stats { ... }\ntype tcStats struct {\n\tBytes      uint64 // Number of enqueued bytes\n\tPackets    uint32 // Number of enqueued packets\n\tDrops      uint32 // Packets dropped because of lack of resources\n\tOverlimits uint32 // Number of throttle events when this flow goes out of allocated bandwidth\n\tBps        uint32 // Current flow byte rate\n\tPps        uint32 // Current flow packet rate\n\tQlen       uint32\n\tBacklog    uint32\n}\n\n// NewHtbClass NOTE: function is in here because it uses other linux functions\nfunc NewHtbClass(attrs ClassAttrs, cattrs HtbClassAttrs) *HtbClass {\n\tmtu := 1600\n\trate := cattrs.Rate / 8\n\tceil := cattrs.Ceil / 8\n\tbuffer := cattrs.Buffer\n\tcbuffer := cattrs.Cbuffer\n\n\tif ceil == 0 {\n\t\tceil = rate\n\t}\n\n\tif buffer == 0 {\n\t\tbuffer = uint32(float64(rate)/Hz() + float64(mtu))\n\t}\n\tbuffer = Xmittime(rate, buffer)\n\n\tif cbuffer == 0 {\n\t\tcbuffer = uint32(float64(ceil)/Hz() + float64(mtu))\n\t}\n\tcbuffer = Xmittime(ceil, cbuffer)\n\n\treturn &HtbClass{\n\t\tClassAttrs: attrs,\n\t\tRate:       rate,\n\t\tCeil:       ceil,\n\t\tBuffer:     buffer,\n\t\tCbuffer:    cbuffer,\n\t\tLevel:      0,\n\t\tPrio:       cattrs.Prio,\n\t\tQuantum:    cattrs.Quantum,\n\t}\n}\n\n// ClassDel will delete a class from the system.\n// Equivalent to: `tc class del $class`\nfunc ClassDel(class Class) error {\n\treturn pkgHandle.ClassDel(class)\n}\n\n// ClassDel will delete a class from the system.\n// Equivalent to: `tc class del $class`\nfunc (h *Handle) ClassDel(class Class) error {\n\treturn h.classModify(unix.RTM_DELTCLASS, 0, class)\n}\n\n// ClassChange will change a class in place\n// Equivalent to: `tc class change $class`\n// The parent and handle MUST NOT be changed.\nfunc ClassChange(class Class) error {\n\treturn pkgHandle.ClassChange(class)\n}\n\n// ClassChange will change a class in place\n// Equivalent to: `tc class change $class`\n// The parent and handle MUST NOT be changed.\nfunc (h *Handle) ClassChange(class Class) error {\n\treturn h.classModify(unix.RTM_NEWTCLASS, 0, class)\n}\n\n// ClassReplace will replace a class to the system.\n// quivalent to: `tc class replace $class`\n// The handle MAY be changed.\n// If a class already exist with this parent/handle pair, the class is changed.\n// If a class does not already exist with this parent/handle, a new class is created.\nfunc ClassReplace(class Class) error {\n\treturn pkgHandle.ClassReplace(class)\n}\n\n// ClassReplace will replace a class to the system.\n// quivalent to: `tc class replace $class`\n// The handle MAY be changed.\n// If a class already exist with this parent/handle pair, the class is changed.\n// If a class does not already exist with this parent/handle, a new class is created.\nfunc (h *Handle) ClassReplace(class Class) error {\n\treturn h.classModify(unix.RTM_NEWTCLASS, unix.NLM_F_CREATE, class)\n}\n\n// ClassAdd will add a class to the system.\n// Equivalent to: `tc class add $class`\nfunc ClassAdd(class Class) error {\n\treturn pkgHandle.ClassAdd(class)\n}\n\n// ClassAdd will add a class to the system.\n// Equivalent to: `tc class add $class`\nfunc (h *Handle) ClassAdd(class Class) error {\n\treturn h.classModify(\n\t\tunix.RTM_NEWTCLASS,\n\t\tunix.NLM_F_CREATE|unix.NLM_F_EXCL,\n\t\tclass,\n\t)\n}\n\nfunc (h *Handle) classModify(cmd, flags int, class Class) error {\n\treq := h.newNetlinkRequest(cmd, flags|unix.NLM_F_ACK)\n\tbase := class.Attrs()\n\tmsg := &nl.TcMsg{\n\t\tFamily:  nl.FAMILY_ALL,\n\t\tIfindex: int32(base.LinkIndex),\n\t\tHandle:  base.Handle,\n\t\tParent:  base.Parent,\n\t}\n\treq.AddData(msg)\n\n\tif cmd != unix.RTM_DELTCLASS {\n\t\tif err := classPayload(req, class); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\nfunc classPayload(req *nl.NetlinkRequest, class Class) error {\n\treq.AddData(nl.NewRtAttr(nl.TCA_KIND, nl.ZeroTerminated(class.Type())))\n\n\toptions := nl.NewRtAttr(nl.TCA_OPTIONS, nil)\n\tswitch class.Type() {\n\tcase \"htb\":\n\t\thtb := class.(*HtbClass)\n\t\topt := nl.TcHtbCopt{}\n\t\topt.Buffer = htb.Buffer\n\t\topt.Cbuffer = htb.Cbuffer\n\t\topt.Quantum = htb.Quantum\n\t\topt.Level = htb.Level\n\t\topt.Prio = htb.Prio\n\t\t// TODO: Handle Debug properly. For now default to 0\n\t\t/* Calculate {R,C}Tab and set Rate and Ceil */\n\t\tcellLog := -1\n\t\tccellLog := -1\n\t\tlinklayer := nl.LINKLAYER_ETHERNET\n\t\tmtu := 1600\n\t\tvar rtab [256]uint32\n\t\tvar ctab [256]uint32\n\t\ttcrate := nl.TcRateSpec{Rate: uint32(htb.Rate)}\n\t\tif CalcRtable(&tcrate, rtab[:], cellLog, uint32(mtu), linklayer) < 0 {\n\t\t\treturn errors.New(\"HTB: failed to calculate rate table\")\n\t\t}\n\t\topt.Rate = tcrate\n\t\ttcceil := nl.TcRateSpec{Rate: uint32(htb.Ceil)}\n\t\tif CalcRtable(&tcceil, ctab[:], ccellLog, uint32(mtu), linklayer) < 0 {\n\t\t\treturn errors.New(\"HTB: failed to calculate ceil rate table\")\n\t\t}\n\t\topt.Ceil = tcceil\n\t\toptions.AddRtAttr(nl.TCA_HTB_PARMS, opt.Serialize())\n\t\toptions.AddRtAttr(nl.TCA_HTB_RTAB, SerializeRtab(rtab))\n\t\toptions.AddRtAttr(nl.TCA_HTB_CTAB, SerializeRtab(ctab))\n\t\tif htb.Rate >= uint64(1<<32) {\n\t\t\toptions.AddRtAttr(nl.TCA_HTB_RATE64, nl.Uint64Attr(htb.Rate))\n\t\t}\n\t\tif htb.Ceil >= uint64(1<<32) {\n\t\t\toptions.AddRtAttr(nl.TCA_HTB_CEIL64, nl.Uint64Attr(htb.Ceil))\n\t\t}\n\tcase \"hfsc\":\n\t\thfsc := class.(*HfscClass)\n\t\topt := nl.HfscCopt{}\n\t\trm1, rd, rm2 := hfsc.Rsc.Attrs()\n\t\topt.Rsc.Set(rm1/8, rd, rm2/8)\n\t\tfm1, fd, fm2 := hfsc.Fsc.Attrs()\n\t\topt.Fsc.Set(fm1/8, fd, fm2/8)\n\t\tum1, ud, um2 := hfsc.Usc.Attrs()\n\t\topt.Usc.Set(um1/8, ud, um2/8)\n\t\toptions.AddRtAttr(nl.TCA_HFSC_RSC, nl.SerializeHfscCurve(&opt.Rsc))\n\t\toptions.AddRtAttr(nl.TCA_HFSC_FSC, nl.SerializeHfscCurve(&opt.Fsc))\n\t\toptions.AddRtAttr(nl.TCA_HFSC_USC, nl.SerializeHfscCurve(&opt.Usc))\n\t}\n\treq.AddData(options)\n\treturn nil\n}\n\n// ClassList gets a list of classes in the system.\n// Equivalent to: `tc class show`.\n//\n// Generally returns nothing if link and parent are not specified.\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc ClassList(link Link, parent uint32) ([]Class, error) {\n\treturn pkgHandle.ClassList(link, parent)\n}\n\n// ClassList gets a list of classes in the system.\n// Equivalent to: `tc class show`.\n//\n// Generally returns nothing if link and parent are not specified.\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) ClassList(link Link, parent uint32) ([]Class, error) {\n\treq := h.newNetlinkRequest(unix.RTM_GETTCLASS, unix.NLM_F_DUMP)\n\tmsg := &nl.TcMsg{\n\t\tFamily: nl.FAMILY_ALL,\n\t\tParent: parent,\n\t}\n\tif link != nil {\n\t\tbase := link.Attrs()\n\t\th.ensureIndex(base)\n\t\tmsg.Ifindex = int32(base.Index)\n\t}\n\treq.AddData(msg)\n\n\tmsgs, executeErr := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWTCLASS)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\tvar res []Class\n\tfor _, m := range msgs {\n\t\tmsg := nl.DeserializeTcMsg(m)\n\n\t\tattrs, err := nl.ParseRouteAttr(m[msg.Len():])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tbase := ClassAttrs{\n\t\t\tLinkIndex:  int(msg.Ifindex),\n\t\t\tHandle:     msg.Handle,\n\t\t\tParent:     msg.Parent,\n\t\t\tStatistics: nil,\n\t\t}\n\n\t\tvar class Class\n\t\tclassType := \"\"\n\t\tfor _, attr := range attrs {\n\t\t\tswitch attr.Attr.Type {\n\t\t\tcase nl.TCA_KIND:\n\t\t\t\tclassType = string(attr.Value[:len(attr.Value)-1])\n\t\t\t\tswitch classType {\n\t\t\t\tcase \"htb\":\n\t\t\t\t\tclass = &HtbClass{}\n\t\t\t\tcase \"hfsc\":\n\t\t\t\t\tclass = &HfscClass{}\n\t\t\t\tdefault:\n\t\t\t\t\tclass = &GenericClass{ClassType: classType}\n\t\t\t\t}\n\t\t\tcase nl.TCA_OPTIONS:\n\t\t\t\tswitch classType {\n\t\t\t\tcase \"htb\":\n\t\t\t\t\tdata, err := nl.ParseRouteAttr(attr.Value)\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\t_, err = parseHtbClassData(class, data)\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\tcase \"hfsc\":\n\t\t\t\t\tdata, err := nl.ParseRouteAttr(attr.Value)\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\t_, err = parseHfscClassData(class, data)\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}\n\t\t\t// For backward compatibility.\n\t\t\tcase nl.TCA_STATS:\n\t\t\t\tbase.Statistics, err = parseTcStats(attr.Value)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\tcase nl.TCA_STATS2:\n\t\t\t\tbase.Statistics, err = parseTcStats2(attr.Value)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t*class.Attrs() = base\n\t\tres = append(res, class)\n\t}\n\n\treturn res, executeErr\n}\n\nfunc parseHtbClassData(class Class, data []syscall.NetlinkRouteAttr) (bool, error) {\n\thtb := class.(*HtbClass)\n\tdetailed := false\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.TCA_HTB_PARMS:\n\t\t\topt := nl.DeserializeTcHtbCopt(datum.Value)\n\t\t\thtb.Rate = uint64(opt.Rate.Rate)\n\t\t\thtb.Ceil = uint64(opt.Ceil.Rate)\n\t\t\thtb.Buffer = opt.Buffer\n\t\t\thtb.Cbuffer = opt.Cbuffer\n\t\t\thtb.Quantum = opt.Quantum\n\t\t\thtb.Level = opt.Level\n\t\t\thtb.Prio = opt.Prio\n\t\tcase nl.TCA_HTB_RATE64:\n\t\t\thtb.Rate = native.Uint64(datum.Value[0:8])\n\t\tcase nl.TCA_HTB_CEIL64:\n\t\t\thtb.Ceil = native.Uint64(datum.Value[0:8])\n\t\t}\n\t}\n\treturn detailed, nil\n}\n\nfunc parseHfscClassData(class Class, data []syscall.NetlinkRouteAttr) (bool, error) {\n\thfsc := class.(*HfscClass)\n\tdetailed := false\n\tfor _, datum := range data {\n\t\tm1, d, m2 := nl.DeserializeHfscCurve(datum.Value).Attrs()\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.TCA_HFSC_RSC:\n\t\t\thfsc.Rsc = ServiceCurve{m1: m1 * 8, d: d, m2: m2 * 8}\n\t\tcase nl.TCA_HFSC_FSC:\n\t\t\thfsc.Fsc = ServiceCurve{m1: m1 * 8, d: d, m2: m2 * 8}\n\t\tcase nl.TCA_HFSC_USC:\n\t\t\thfsc.Usc = ServiceCurve{m1: m1 * 8, d: d, m2: m2 * 8}\n\t\t}\n\t}\n\treturn detailed, nil\n}\n\nfunc parseTcStats(data []byte) (*ClassStatistics, error) {\n\tbuf := &bytes.Buffer{}\n\tbuf.Write(data)\n\ttcStats := &tcStats{}\n\tif err := binary.Read(buf, native, tcStats); err != nil {\n\t\treturn nil, err\n\t}\n\n\tstats := NewClassStatistics()\n\tstats.Basic.Bytes = tcStats.Bytes\n\tstats.Basic.Packets = tcStats.Packets\n\tstats.Queue.Qlen = tcStats.Qlen\n\tstats.Queue.Backlog = tcStats.Backlog\n\tstats.Queue.Drops = tcStats.Drops\n\tstats.Queue.Overlimits = tcStats.Overlimits\n\tstats.RateEst.Bps = tcStats.Bps\n\tstats.RateEst.Pps = tcStats.Pps\n\n\treturn stats, nil\n}\n\nfunc parseGnetStats(data []byte, gnetStats interface{}) error {\n\tbuf := &bytes.Buffer{}\n\tbuf.Write(data)\n\treturn binary.Read(buf, native, gnetStats)\n}\n\nfunc parseTcStats2(data []byte) (*ClassStatistics, error) {\n\trtAttrs, err := nl.ParseRouteAttr(data)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tstats := NewClassStatistics()\n\tfor _, datum := range rtAttrs {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.TCA_STATS_BASIC:\n\t\t\tif err := parseGnetStats(datum.Value, stats.Basic); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"Failed to parse ClassStatistics.Basic with: %v\\n%s\",\n\t\t\t\t\terr, hex.Dump(datum.Value))\n\t\t\t}\n\t\tcase nl.TCA_STATS_QUEUE:\n\t\t\tif err := parseGnetStats(datum.Value, stats.Queue); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"Failed to parse ClassStatistics.Queue with: %v\\n%s\",\n\t\t\t\t\terr, hex.Dump(datum.Value))\n\t\t\t}\n\t\tcase nl.TCA_STATS_RATE_EST:\n\t\t\tif err := parseGnetStats(datum.Value, stats.RateEst); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"Failed to parse ClassStatistics.RateEst with: %v\\n%s\",\n\t\t\t\t\terr, hex.Dump(datum.Value))\n\t\t\t}\n\t\tcase nl.TCA_STATS_BASIC_HW:\n\t\t\tif err := parseGnetStats(datum.Value, stats.BasicHw); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"Failed to parse ClassStatistics.BasicHw with: %v\\n%s\",\n\t\t\t\t\terr, hex.Dump(datum.Value))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn stats, nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/conntrack_linux.go",
    "content": "package netlink\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/fs\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// ConntrackTableType Conntrack table for the netlink operation\ntype ConntrackTableType uint8\n\nconst (\n\t// ConntrackTable Conntrack table\n\t// https://github.com/torvalds/linux/blob/master/include/uapi/linux/netfilter/nfnetlink.h -> #define NFNL_SUBSYS_CTNETLINK\t\t 1\n\tConntrackTable = 1\n\t// ConntrackExpectTable Conntrack expect table\n\t// https://github.com/torvalds/linux/blob/master/include/uapi/linux/netfilter/nfnetlink.h -> #define NFNL_SUBSYS_CTNETLINK_EXP 2\n\tConntrackExpectTable = 2\n)\n\nconst (\n\t// backward compatibility with golang 1.6 which does not have io.SeekCurrent\n\tseekCurrent = 1\n)\n\n// InetFamily Family type\ntype InetFamily uint8\n\n//  -L [table] [options]          List conntrack or expectation table\n//  -G [table] parameters         Get conntrack or expectation\n\n//  -I [table] parameters         Create a conntrack or expectation\n//  -U [table] parameters         Update a conntrack\n//  -E [table] [options]          Show events\n\n//  -C [table]                    Show counter\n//  -S                            Show statistics\n\n// ConntrackTableList returns the flow list of a table of a specific family\n// conntrack -L [table] [options]          List conntrack or expectation table\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc ConntrackTableList(table ConntrackTableType, family InetFamily) ([]*ConntrackFlow, error) {\n\treturn pkgHandle.ConntrackTableList(table, family)\n}\n\n// ConntrackTableFlush flushes all the flows of a specified table\n// conntrack -F [table]            Flush table\n// The flush operation applies to all the family types\nfunc ConntrackTableFlush(table ConntrackTableType) error {\n\treturn pkgHandle.ConntrackTableFlush(table)\n}\n\n// ConntrackCreate creates a new conntrack flow in the desired table\n// conntrack -I [table]\t\tCreate a conntrack or expectation\nfunc ConntrackCreate(table ConntrackTableType, family InetFamily, flow *ConntrackFlow) error {\n\treturn pkgHandle.ConntrackCreate(table, family, flow)\n}\n\n// ConntrackUpdate updates an existing conntrack flow in the desired table using the handle\n// conntrack -U [table]\t\tUpdate a conntrack\nfunc ConntrackUpdate(table ConntrackTableType, family InetFamily, flow *ConntrackFlow) error {\n\treturn pkgHandle.ConntrackUpdate(table, family, flow)\n}\n\n// ConntrackDeleteFilter deletes entries on the specified table on the base of the filter\n// conntrack -D [table] parameters         Delete conntrack or expectation\n//\n// Deprecated: use [ConntrackDeleteFilters] instead.\nfunc ConntrackDeleteFilter(table ConntrackTableType, family InetFamily, filter CustomConntrackFilter) (uint, error) {\n\treturn pkgHandle.ConntrackDeleteFilters(table, family, filter)\n}\n\n// ConntrackDeleteFilters deletes entries on the specified table matching any of the specified filters\n// conntrack -D [table] parameters         Delete conntrack or expectation\nfunc ConntrackDeleteFilters(table ConntrackTableType, family InetFamily, filters ...CustomConntrackFilter) (uint, error) {\n\treturn pkgHandle.ConntrackDeleteFilters(table, family, filters...)\n}\n\n// ConntrackTableList returns the flow list of a table of a specific family using the netlink handle passed\n// conntrack -L [table] [options]          List conntrack or expectation table\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) ConntrackTableList(table ConntrackTableType, family InetFamily) ([]*ConntrackFlow, error) {\n\tres, executeErr := h.dumpConntrackTable(table, family)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\t// Deserialize all the flows\n\tvar result []*ConntrackFlow\n\tfor _, dataRaw := range res {\n\t\tresult = append(result, parseRawData(dataRaw))\n\t}\n\n\treturn result, executeErr\n}\n\n// ConntrackTableFlush flushes all the flows of a specified table using the netlink handle passed\n// conntrack -F [table]            Flush table\n// The flush operation applies to all the family types\nfunc (h *Handle) ConntrackTableFlush(table ConntrackTableType) error {\n\treq := h.newConntrackRequest(table, unix.AF_INET, nl.IPCTNL_MSG_CT_DELETE, unix.NLM_F_ACK)\n\t_, err := req.Execute(unix.NETLINK_NETFILTER, 0)\n\treturn err\n}\n\n// ConntrackCreate creates a new conntrack flow in the desired table using the handle\n// conntrack -I [table]\t\tCreate a conntrack or expectation\nfunc (h *Handle) ConntrackCreate(table ConntrackTableType, family InetFamily, flow *ConntrackFlow) error {\n\treq := h.newConntrackRequest(table, family, nl.IPCTNL_MSG_CT_NEW, unix.NLM_F_ACK|unix.NLM_F_CREATE)\n\tattr, err := flow.toNlData()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, a := range attr {\n\t\treq.AddData(a)\n\t}\n\n\t_, err = req.Execute(unix.NETLINK_NETFILTER, 0)\n\treturn err\n}\n\n// ConntrackUpdate updates an existing conntrack flow in the desired table using the handle\n// conntrack -U [table]\t\tUpdate a conntrack\nfunc (h *Handle) ConntrackUpdate(table ConntrackTableType, family InetFamily, flow *ConntrackFlow) error {\n\treq := h.newConntrackRequest(table, family, nl.IPCTNL_MSG_CT_NEW, unix.NLM_F_ACK|unix.NLM_F_REPLACE)\n\tattr, err := flow.toNlData()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, a := range attr {\n\t\treq.AddData(a)\n\t}\n\n\t_, err = req.Execute(unix.NETLINK_NETFILTER, 0)\n\treturn err\n}\n\n// ConntrackDeleteFilter deletes entries on the specified table on the base of the filter using the netlink handle passed\n// conntrack -D [table] parameters         Delete conntrack or expectation\n//\n// Deprecated: use [Handle.ConntrackDeleteFilters] instead.\nfunc (h *Handle) ConntrackDeleteFilter(table ConntrackTableType, family InetFamily, filter CustomConntrackFilter) (uint, error) {\n\treturn h.ConntrackDeleteFilters(table, family, filter)\n}\n\n// ConntrackDeleteFilters deletes entries on the specified table matching any of the specified filters using the netlink handle passed\n// conntrack -D [table] parameters         Delete conntrack or expectation\nfunc (h *Handle) ConntrackDeleteFilters(table ConntrackTableType, family InetFamily, filters ...CustomConntrackFilter) (uint, error) {\n\tvar finalErr error\n\tres, err := h.dumpConntrackTable(table, family)\n\tif err != nil {\n\t\tif !errors.Is(err, ErrDumpInterrupted) {\n\t\t\treturn 0, err\n\t\t}\n\t\t// This allows us to at least do a best effort to try to clean the\n\t\t// entries matching the filter.\n\t\tfinalErr = err\n\t}\n\n\tvar totalFilterErrors int\n\tvar matched uint\n\tfor _, dataRaw := range res {\n\t\tflow := parseRawData(dataRaw)\n\t\tfor _, filter := range filters {\n\t\t\tif match := filter.MatchConntrackFlow(flow); match {\n\t\t\t\treq2 := h.newConntrackRequest(table, family, nl.IPCTNL_MSG_CT_DELETE, unix.NLM_F_ACK)\n\t\t\t\t// skip the first 4 byte that are the netfilter header, the newConntrackRequest is adding it already\n\t\t\t\treq2.AddRawData(dataRaw[4:])\n\t\t\t\tif _, err = req2.Execute(unix.NETLINK_NETFILTER, 0); err == nil || errors.Is(err, fs.ErrNotExist) {\n\t\t\t\t\tmatched++\n\t\t\t\t\t// flow is already deleted, no need to match on other filters and continue to the next flow.\n\t\t\t\t\tbreak\n\t\t\t\t} else {\n\t\t\t\t\ttotalFilterErrors++\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif totalFilterErrors > 0 {\n\t\tfinalErr = errors.Join(finalErr, fmt.Errorf(\"failed to delete %d conntrack flows with %d filters\", totalFilterErrors, len(filters)))\n\t}\n\treturn matched, finalErr\n}\n\nfunc (h *Handle) newConntrackRequest(table ConntrackTableType, family InetFamily, operation, flags int) *nl.NetlinkRequest {\n\t// Create the Netlink request object\n\treq := h.newNetlinkRequest((int(table)<<8)|operation, flags)\n\t// Add the netfilter header\n\tmsg := &nl.Nfgenmsg{\n\t\tNfgenFamily: uint8(family),\n\t\tVersion:     nl.NFNETLINK_V0,\n\t\tResId:       0,\n\t}\n\treq.AddData(msg)\n\treturn req\n}\n\nfunc (h *Handle) dumpConntrackTable(table ConntrackTableType, family InetFamily) ([][]byte, error) {\n\treq := h.newConntrackRequest(table, family, nl.IPCTNL_MSG_CT_GET, unix.NLM_F_DUMP)\n\treturn req.Execute(unix.NETLINK_NETFILTER, 0)\n}\n\n// ProtoInfo wraps an L4-protocol structure - roughly corresponds to the\n// __nfct_protoinfo union found in libnetfilter_conntrack/include/internal/object.h.\n// Currently, only protocol names, and TCP state is supported.\ntype ProtoInfo interface {\n\tProtocol() string\n}\n\n// ProtoInfoTCP corresponds to the `tcp` struct of the __nfct_protoinfo union.\n// Only TCP state is currently supported.\ntype ProtoInfoTCP struct {\n\tState uint8\n}\n// Protocol returns \"tcp\".\nfunc (*ProtoInfoTCP) Protocol() string {return \"tcp\"}\nfunc (p *ProtoInfoTCP) toNlData() ([]*nl.RtAttr, error) {\n\tctProtoInfo := nl.NewRtAttr(unix.NLA_F_NESTED | nl.CTA_PROTOINFO, []byte{})\n\tctProtoInfoTCP := nl.NewRtAttr(unix.NLA_F_NESTED|nl.CTA_PROTOINFO_TCP, []byte{})\n\tctProtoInfoTCPState := nl.NewRtAttr(nl.CTA_PROTOINFO_TCP_STATE, nl.Uint8Attr(p.State))\n\tctProtoInfoTCP.AddChild(ctProtoInfoTCPState)\n\tctProtoInfo.AddChild(ctProtoInfoTCP)\n\n\treturn []*nl.RtAttr{ctProtoInfo}, nil\n}\n\n// ProtoInfoSCTP only supports the protocol name.\ntype ProtoInfoSCTP struct {}\n// Protocol returns \"sctp\".\nfunc (*ProtoInfoSCTP) Protocol() string {return \"sctp\"}\n\n// ProtoInfoDCCP only supports the protocol name.\ntype ProtoInfoDCCP struct {}\n// Protocol returns \"dccp\".\nfunc (*ProtoInfoDCCP) Protocol() string {return \"dccp\"}\n\n// The full conntrack flow structure is very complicated and can be found in the file:\n// http://git.netfilter.org/libnetfilter_conntrack/tree/include/internal/object.h\n// For the time being, the structure below allows to parse and extract the base information of a flow\ntype IPTuple struct {\n\tBytes    uint64\n\tDstIP    net.IP\n\tDstPort  uint16\n\tPackets  uint64\n\tProtocol uint8\n\tSrcIP    net.IP\n\tSrcPort  uint16\n}\n\n// toNlData generates the inner fields of a nested tuple netlink datastructure\n// does not generate the \"nested\"-flagged outer message.\nfunc (t *IPTuple) toNlData(family uint8) ([]*nl.RtAttr, error) {\n\n\tvar srcIPsFlag, dstIPsFlag int\n\tif family == nl.FAMILY_V4 {\n\t\tsrcIPsFlag = nl.CTA_IP_V4_SRC\n\t\tdstIPsFlag = nl.CTA_IP_V4_DST\n\t} else if family == nl.FAMILY_V6 {\n\t\tsrcIPsFlag = nl.CTA_IP_V6_SRC\n\t\tdstIPsFlag = nl.CTA_IP_V6_DST\n\t} else {\n\t\treturn []*nl.RtAttr{}, fmt.Errorf(\"couldn't generate netlink message for tuple due to unrecognized FamilyType '%d'\", family)\n\t}\n\n\tctTupleIP := nl.NewRtAttr(unix.NLA_F_NESTED|nl.CTA_TUPLE_IP, nil)\n\tctTupleIPSrc := nl.NewRtAttr(srcIPsFlag, t.SrcIP)\n\tctTupleIP.AddChild(ctTupleIPSrc)\n\tctTupleIPDst := nl.NewRtAttr(dstIPsFlag, t.DstIP)\n\tctTupleIP.AddChild(ctTupleIPDst)\n\n\tctTupleProto := nl.NewRtAttr(unix.NLA_F_NESTED|nl.CTA_TUPLE_PROTO, nil)\n\tctTupleProtoNum := nl.NewRtAttr(nl.CTA_PROTO_NUM, []byte{t.Protocol})\n\tctTupleProto.AddChild(ctTupleProtoNum)\n\tctTupleProtoSrcPort := nl.NewRtAttr(nl.CTA_PROTO_SRC_PORT, nl.BEUint16Attr(t.SrcPort))\n\tctTupleProto.AddChild(ctTupleProtoSrcPort)\n\tctTupleProtoDstPort := nl.NewRtAttr(nl.CTA_PROTO_DST_PORT, nl.BEUint16Attr(t.DstPort))\n\tctTupleProto.AddChild(ctTupleProtoDstPort, )\n\n\treturn []*nl.RtAttr{ctTupleIP, ctTupleProto}, nil\n}\n\ntype ConntrackFlow struct {\n\tFamilyType uint8\n\tForward    IPTuple\n\tReverse    IPTuple\n\tMark       uint32\n\tZone       uint16\n\tTimeStart  uint64\n\tTimeStop   uint64\n\tTimeOut    uint32\n\tLabels     []byte\n\tProtoInfo  ProtoInfo\n}\n\nfunc (s *ConntrackFlow) String() string {\n\t// conntrack cmd output:\n\t// udp      17 src=127.0.0.1 dst=127.0.0.1 sport=4001 dport=1234 packets=5 bytes=532 [UNREPLIED] src=127.0.0.1 dst=127.0.0.1 sport=1234 dport=4001 packets=10 bytes=1078 mark=0 labels=0x00000000050012ac4202010000000000 zone=100\n\t//             start=2019-07-26 01:26:21.557800506 +0000 UTC stop=1970-01-01 00:00:00 +0000 UTC timeout=30(sec)\n\tstart := time.Unix(0, int64(s.TimeStart))\n\tstop := time.Unix(0, int64(s.TimeStop))\n\ttimeout := int32(s.TimeOut)\n\tres := fmt.Sprintf(\"%s\\t%d src=%s dst=%s sport=%d dport=%d packets=%d bytes=%d\\tsrc=%s dst=%s sport=%d dport=%d packets=%d bytes=%d mark=0x%x \",\n\t\tnl.L4ProtoMap[s.Forward.Protocol], s.Forward.Protocol,\n\t\ts.Forward.SrcIP.String(), s.Forward.DstIP.String(), s.Forward.SrcPort, s.Forward.DstPort, s.Forward.Packets, s.Forward.Bytes,\n\t\ts.Reverse.SrcIP.String(), s.Reverse.DstIP.String(), s.Reverse.SrcPort, s.Reverse.DstPort, s.Reverse.Packets, s.Reverse.Bytes,\n\t\ts.Mark)\n\tif len(s.Labels) > 0 {\n\t\tres += fmt.Sprintf(\"labels=0x%x \", s.Labels)\n\t}\n\tif s.Zone != 0 {\n\t\tres += fmt.Sprintf(\"zone=%d \", s.Zone)\n\t}\n\tres += fmt.Sprintf(\"start=%v stop=%v timeout=%d(sec)\", start, stop, timeout)\n\treturn res\n}\n\n// toNlData generates netlink messages representing the flow.\nfunc (s *ConntrackFlow) toNlData() ([]*nl.RtAttr, error) {\n\tvar payload []*nl.RtAttr\n\t// The message structure is built as follows:\n\t//\t<len, NLA_F_NESTED|CTA_TUPLE_ORIG>\n\t//\t\t<len, NLA_F_NESTED|CTA_TUPLE_IP>\n\t//\t\t\t<len, [CTA_IP_V4_SRC|CTA_IP_V6_SRC]>\n\t//\t\t\t<IP>\n\t//\t\t\t<len, [CTA_IP_V4_DST|CTA_IP_V6_DST]>\n\t//\t\t\t<IP>\n\t//\t\t<len, NLA_F_NESTED|nl.CTA_TUPLE_PROTO>\n\t//\t\t\t<len, CTA_PROTO_NUM>\n\t//\t\t\t<uint8>\n\t//\t\t\t<len, CTA_PROTO_SRC_PORT>\n\t//\t\t\t<BEuint16>\n\t//\t\t\t<len, CTA_PROTO_DST_PORT>\n\t//\t\t\t<BEuint16>\n\t// \t<len, NLA_F_NESTED|CTA_TUPLE_REPLY>\n\t//\t\t<len, NLA_F_NESTED|CTA_TUPLE_IP>\n\t//\t\t\t<len, [CTA_IP_V4_SRC|CTA_IP_V6_SRC]>\n\t//\t\t\t<IP>\n\t//\t\t\t<len, [CTA_IP_V4_DST|CTA_IP_V6_DST]>\n\t//\t\t\t<IP>\n\t//\t\t<len, NLA_F_NESTED|nl.CTA_TUPLE_PROTO>\n\t//\t\t\t<len, CTA_PROTO_NUM>\n\t//\t\t\t<uint8>\n\t//\t\t\t<len, CTA_PROTO_SRC_PORT>\n\t//\t\t\t<BEuint16>\n\t//\t\t\t<len, CTA_PROTO_DST_PORT>\n\t//\t\t\t<BEuint16>\n\t//\t<len, CTA_STATUS>\n\t//\t<uint64>\n\t//\t<len, CTA_MARK>\n\t//\t<BEuint64>\n\t//\t<len, CTA_TIMEOUT>\n\t//\t<BEuint64>\n\t//\t<len, NLA_F_NESTED|CTA_PROTOINFO>\n \n\t// CTA_TUPLE_ORIG\n\tctTupleOrig := nl.NewRtAttr(unix.NLA_F_NESTED|nl.CTA_TUPLE_ORIG, nil)\n\tforwardFlowAttrs, err := s.Forward.toNlData(s.FamilyType)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"couldn't generate netlink data for conntrack forward flow: %w\", err)\n\t}\n\tfor _, a := range forwardFlowAttrs {\n\t\tctTupleOrig.AddChild(a)\n\t}\n\n\t// CTA_TUPLE_REPLY\n\tctTupleReply := nl.NewRtAttr(unix.NLA_F_NESTED|nl.CTA_TUPLE_REPLY, nil)\n\treverseFlowAttrs, err := s.Reverse.toNlData(s.FamilyType)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"couldn't generate netlink data for conntrack reverse flow: %w\", err)\n\t}\n\tfor _, a := range reverseFlowAttrs {\n\t\tctTupleReply.AddChild(a)\n\t}\n\n\tctMark := nl.NewRtAttr(nl.CTA_MARK, nl.BEUint32Attr(s.Mark))\n\tctTimeout := nl.NewRtAttr(nl.CTA_TIMEOUT, nl.BEUint32Attr(s.TimeOut))\n\n\tpayload = append(payload, ctTupleOrig, ctTupleReply, ctMark, ctTimeout)\n\n\tif s.ProtoInfo != nil {\n\t\tswitch p := s.ProtoInfo.(type) {\n\t\tcase *ProtoInfoTCP:\n\t\t\tattrs, err := p.toNlData()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"couldn't generate netlink data for conntrack flow's TCP protoinfo: %w\", err)\n\t\t\t}\n\t\t\tpayload = append(payload, attrs...)\n\t\tdefault:\n\t\t\treturn nil, errors.New(\"couldn't generate netlink data for conntrack: field 'ProtoInfo' only supports TCP or nil\")\n\t\t}\n\t}\n\n\treturn payload, nil\n}\n\n// This method parse the ip tuple structure\n// The message structure is the following:\n// <len, [CTA_IP_V4_SRC|CTA_IP_V6_SRC], 16 bytes for the IP>\n// <len, [CTA_IP_V4_DST|CTA_IP_V6_DST], 16 bytes for the IP>\n// <len, NLA_F_NESTED|nl.CTA_TUPLE_PROTO, 1 byte for the protocol, 3 bytes of padding>\n// <len, CTA_PROTO_SRC_PORT, 2 bytes for the source port, 2 bytes of padding>\n// <len, CTA_PROTO_DST_PORT, 2 bytes for the source port, 2 bytes of padding>\nfunc parseIpTuple(reader *bytes.Reader, tpl *IPTuple) uint8 {\n\tfor i := 0; i < 2; i++ {\n\t\t_, t, _, v := parseNfAttrTLV(reader)\n\t\tswitch t {\n\t\tcase nl.CTA_IP_V4_SRC, nl.CTA_IP_V6_SRC:\n\t\t\ttpl.SrcIP = v\n\t\tcase nl.CTA_IP_V4_DST, nl.CTA_IP_V6_DST:\n\t\t\ttpl.DstIP = v\n\t\t}\n\t}\n\t// Get total length of nested protocol-specific info.\n\t_, _, protoInfoTotalLen := parseNfAttrTL(reader)\n\t_, t, l, v := parseNfAttrTLV(reader)\n\t// Track the number of bytes read.\n\tprotoInfoBytesRead := uint16(nl.SizeofNfattr) + l\n\tif t == nl.CTA_PROTO_NUM {\n\t\ttpl.Protocol = uint8(v[0])\n\t}\n\t// We only parse TCP & UDP headers. Skip the others.\n\tif tpl.Protocol != unix.IPPROTO_TCP && tpl.Protocol != unix.IPPROTO_UDP {\n\t\t// skip the rest\n\t\tbytesRemaining := protoInfoTotalLen - protoInfoBytesRead\n\t\treader.Seek(int64(bytesRemaining), seekCurrent)\n\t\treturn tpl.Protocol\n\t}\n\t// Skip 3 bytes of padding\n\treader.Seek(3, seekCurrent)\n\tprotoInfoBytesRead += 3\n\tfor i := 0; i < 2; i++ {\n\t\t_, t, _ := parseNfAttrTL(reader)\n\t\tprotoInfoBytesRead += uint16(nl.SizeofNfattr)\n\t\tswitch t {\n\t\tcase nl.CTA_PROTO_SRC_PORT:\n\t\t\tparseBERaw16(reader, &tpl.SrcPort)\n\t\t\tprotoInfoBytesRead += 2\n\t\tcase nl.CTA_PROTO_DST_PORT:\n\t\t\tparseBERaw16(reader, &tpl.DstPort)\n\t\t\tprotoInfoBytesRead += 2\n\t\t}\n\t\t// Skip 2 bytes of padding\n\t\treader.Seek(2, seekCurrent)\n\t\tprotoInfoBytesRead += 2\n\t}\n\t// Skip any remaining/unknown parts of the message\n\tbytesRemaining := protoInfoTotalLen - protoInfoBytesRead\n\treader.Seek(int64(bytesRemaining), seekCurrent)\n\n\treturn tpl.Protocol\n}\n\nfunc parseNfAttrTLV(r *bytes.Reader) (isNested bool, attrType, len uint16, value []byte) {\n\tisNested, attrType, len = parseNfAttrTL(r)\n\n\tvalue = make([]byte, len)\n\tbinary.Read(r, binary.BigEndian, &value)\n\treturn isNested, attrType, len, value\n}\n\nfunc parseNfAttrTL(r *bytes.Reader) (isNested bool, attrType, len uint16) {\n\tbinary.Read(r, nl.NativeEndian(), &len)\n\tlen -= nl.SizeofNfattr\n\n\tbinary.Read(r, nl.NativeEndian(), &attrType)\n\tisNested = (attrType & nl.NLA_F_NESTED) == nl.NLA_F_NESTED\n\tattrType = attrType & (nl.NLA_F_NESTED - 1)\n\treturn isNested, attrType, len\n}\n\n// skipNfAttrValue seeks `r` past attr of length `len`.\n// Maintains buffer alignment.\n// Returns length of the seek performed.\nfunc skipNfAttrValue(r *bytes.Reader, len uint16) uint16 {\n\tlen = (len + nl.NLA_ALIGNTO - 1) & ^(nl.NLA_ALIGNTO - 1)\n\tr.Seek(int64(len), seekCurrent)\n\treturn len\n}\n\nfunc parseBERaw16(r *bytes.Reader, v *uint16) {\n\tbinary.Read(r, binary.BigEndian, v)\n}\n\nfunc parseBERaw32(r *bytes.Reader, v *uint32) {\n\tbinary.Read(r, binary.BigEndian, v)\n}\n\nfunc parseBERaw64(r *bytes.Reader, v *uint64) {\n\tbinary.Read(r, binary.BigEndian, v)\n}\n\nfunc parseRaw32(r *bytes.Reader, v *uint32) {\n\tbinary.Read(r, nl.NativeEndian(), v)\n}\n\nfunc parseByteAndPacketCounters(r *bytes.Reader) (bytes, packets uint64) {\n\tfor i := 0; i < 2; i++ {\n\t\tswitch _, t, _ := parseNfAttrTL(r); t {\n\t\tcase nl.CTA_COUNTERS_BYTES:\n\t\t\tparseBERaw64(r, &bytes)\n\t\tcase nl.CTA_COUNTERS_PACKETS:\n\t\t\tparseBERaw64(r, &packets)\n\t\tdefault:\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\n// when the flow is alive, only the timestamp_start is returned in structure\nfunc parseTimeStamp(r *bytes.Reader, readSize uint16) (tstart, tstop uint64) {\n\tvar numTimeStamps int\n\toneItem := nl.SizeofNfattr + 8 // 4 bytes attr header + 8 bytes timestamp\n\tif readSize == uint16(oneItem) {\n\t\tnumTimeStamps = 1\n\t} else if readSize == 2*uint16(oneItem) {\n\t\tnumTimeStamps = 2\n\t} else {\n\t\treturn\n\t}\n\tfor i := 0; i < numTimeStamps; i++ {\n\t\tswitch _, t, _ := parseNfAttrTL(r); t {\n\t\tcase nl.CTA_TIMESTAMP_START:\n\t\t\tparseBERaw64(r, &tstart)\n\t\tcase nl.CTA_TIMESTAMP_STOP:\n\t\t\tparseBERaw64(r, &tstop)\n\t\tdefault:\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n\n}\n\nfunc parseProtoInfoTCPState(r *bytes.Reader) (s uint8) {\n\tbinary.Read(r, binary.BigEndian, &s)\n\tr.Seek(nl.SizeofNfattr - 1, seekCurrent)\n\treturn s\n}\n\n// parseProtoInfoTCP reads the entire nested protoinfo structure, but only parses the state attr.\nfunc parseProtoInfoTCP(r *bytes.Reader, attrLen uint16) (*ProtoInfoTCP) {\n\tp := new(ProtoInfoTCP)\n\tbytesRead := 0\n\tfor bytesRead < int(attrLen) {\n\t\t_, t, l := parseNfAttrTL(r)\n\t\tbytesRead += nl.SizeofNfattr\n\n\t\tswitch t {\n\t\tcase nl.CTA_PROTOINFO_TCP_STATE:\n\t\t\tp.State = parseProtoInfoTCPState(r)\n\t\t\tbytesRead += nl.SizeofNfattr\n\t\tdefault:\n\t\t\tbytesRead += int(skipNfAttrValue(r, l))\n\t\t}\n\t}\n\n\treturn p\n}\n\nfunc parseProtoInfo(r *bytes.Reader, attrLen uint16) (p ProtoInfo) {\n\tbytesRead := 0\n\tfor bytesRead < int(attrLen) {\n\t\t_, t, l := parseNfAttrTL(r)\n\t\tbytesRead += nl.SizeofNfattr\n\n\t\tswitch t {\n\t\tcase nl.CTA_PROTOINFO_TCP:\n\t\t\tp = parseProtoInfoTCP(r, l)\n\t\t\tbytesRead += int(l)\n\t\t// No inner fields of DCCP / SCTP currently supported.\n\t\tcase nl.CTA_PROTOINFO_DCCP:\n\t\t\tp = new(ProtoInfoDCCP)\n\t\t\tskipped := skipNfAttrValue(r, l)\n\t\t\tbytesRead += int(skipped)\n\t\tcase nl.CTA_PROTOINFO_SCTP:\n\t\t\tp = new(ProtoInfoSCTP)\n\t\t\tskipped := skipNfAttrValue(r, l)\n\t\t\tbytesRead += int(skipped)\n\t\tdefault:\n\t\t\tskipped := skipNfAttrValue(r, l)\n\t\t\tbytesRead += int(skipped)\n\t\t}\n\t}\n\n\treturn p\n}\n\nfunc parseTimeOut(r *bytes.Reader) (ttimeout uint32) {\n\tparseBERaw32(r, &ttimeout)\n\treturn\n}\n\nfunc parseConnectionMark(r *bytes.Reader) (mark uint32) {\n\tparseBERaw32(r, &mark)\n\treturn\n}\n\nfunc parseConnectionLabels(r *bytes.Reader) (label []byte) {\n\tlabel = make([]byte, 16) // netfilter defines 128 bit labels value\n\tbinary.Read(r, nl.NativeEndian(), &label)\n\treturn\n}\n\nfunc parseConnectionZone(r *bytes.Reader) (zone uint16) {\n\tparseBERaw16(r, &zone)\n\tr.Seek(2, seekCurrent)\n\treturn\n}\n\nfunc parseRawData(data []byte) *ConntrackFlow {\n\ts := &ConntrackFlow{}\n\t// First there is the Nfgenmsg header\n\t// consume only the family field\n\treader := bytes.NewReader(data)\n\tbinary.Read(reader, nl.NativeEndian(), &s.FamilyType)\n\n\t// skip rest of the Netfilter header\n\treader.Seek(3, seekCurrent)\n\t// The message structure is the following:\n\t// <len, NLA_F_NESTED|CTA_TUPLE_ORIG> 4 bytes\n\t// <len, NLA_F_NESTED|CTA_TUPLE_IP> 4 bytes\n\t// flow information of the forward flow\n\t// <len, NLA_F_NESTED|CTA_TUPLE_REPLY> 4 bytes\n\t// <len, NLA_F_NESTED|CTA_TUPLE_IP> 4 bytes\n\t// flow information of the reverse flow\n\tfor reader.Len() > 0 {\n\t\tif nested, t, l := parseNfAttrTL(reader); nested {\n\t\t\tswitch t {\n\t\t\tcase nl.CTA_TUPLE_ORIG:\n\t\t\t\tif nested, t, l = parseNfAttrTL(reader); nested && t == nl.CTA_TUPLE_IP {\n\t\t\t\t\tparseIpTuple(reader, &s.Forward)\n\t\t\t\t}\n\t\t\tcase nl.CTA_TUPLE_REPLY:\n\t\t\t\tif nested, t, l = parseNfAttrTL(reader); nested && t == nl.CTA_TUPLE_IP {\n\t\t\t\t\tparseIpTuple(reader, &s.Reverse)\n\t\t\t\t} else {\n\t\t\t\t\t// Header not recognized skip it\n\t\t\t\t\tskipNfAttrValue(reader, l)\n\t\t\t\t}\n\t\t\tcase nl.CTA_COUNTERS_ORIG:\n\t\t\t\ts.Forward.Bytes, s.Forward.Packets = parseByteAndPacketCounters(reader)\n\t\t\tcase nl.CTA_COUNTERS_REPLY:\n\t\t\t\ts.Reverse.Bytes, s.Reverse.Packets = parseByteAndPacketCounters(reader)\n\t\t\tcase nl.CTA_TIMESTAMP:\n\t\t\t\ts.TimeStart, s.TimeStop = parseTimeStamp(reader, l)\n\t\t\tcase nl.CTA_PROTOINFO:\n\t\t\t\ts.ProtoInfo = parseProtoInfo(reader, l)\n\t\t\tdefault:\n\t\t\t\tskipNfAttrValue(reader, l)\n\t\t\t}\n\t\t} else {\n\t\t\tswitch t {\n\t\t\tcase nl.CTA_MARK:\n\t\t\t\ts.Mark = parseConnectionMark(reader)\n\t\t\t\tcase nl.CTA_LABELS:\n\t\t\t\ts.Labels = parseConnectionLabels(reader)\n\t\t\tcase nl.CTA_TIMEOUT:\n\t\t\t\ts.TimeOut = parseTimeOut(reader)\n\t\t\tcase nl.CTA_ID, nl.CTA_STATUS, nl.CTA_USE:\n\t\t\t\tskipNfAttrValue(reader, l)\n\t\t\tcase nl.CTA_ZONE:\n\t\t\t\ts.Zone = parseConnectionZone(reader)\n\t\t\tdefault:\n\t\t\t\tskipNfAttrValue(reader, l)\n\t\t\t}\n\t\t}\n\t}\n\treturn s\n}\n\n// Conntrack parameters and options:\n//   -n, --src-nat ip                      source NAT ip\n//   -g, --dst-nat ip                      destination NAT ip\n//   -j, --any-nat ip                      source or destination NAT ip\n//   -m, --mark mark                       Set mark\n//   -c, --secmark secmark                 Set selinux secmark\n//   -e, --event-mask eventmask            Event mask, eg. NEW,DESTROY\n//   -z, --zero                            Zero counters while listing\n//   -o, --output type[,...]               Output format, eg. xml\n//   -l, --label label[,...]               conntrack labels\n\n// Common parameters and options:\n//   -s, --src, --orig-src ip              Source address from original direction\n//   -d, --dst, --orig-dst ip              Destination address from original direction\n//   -r, --reply-src ip            Source address from reply direction\n//   -q, --reply-dst ip            Destination address from reply direction\n//   -p, --protonum proto          Layer 4 Protocol, eg. 'tcp'\n//   -f, --family proto            Layer 3 Protocol, eg. 'ipv6'\n//   -t, --timeout timeout         Set timeout\n//   -u, --status status           Set status, eg. ASSURED\n//   -w, --zone value              Set conntrack zone\n//   --orig-zone value             Set zone for original direction\n//   --reply-zone value            Set zone for reply direction\n//   -b, --buffer-size             Netlink socket buffer size\n//   --mask-src ip                 Source mask address\n//   --mask-dst ip                 Destination mask address\n\n// Layer 4 Protocol common parameters and options:\n// TCP, UDP, SCTP, UDPLite and DCCP\n//    --sport, --orig-port-src port    Source port in original direction\n//    --dport, --orig-port-dst port    Destination port in original direction\n\n// Filter types\ntype ConntrackFilterType uint8\n\nconst (\n\tConntrackOrigSrcIP     = iota                // -orig-src ip    Source address from original direction\n\tConntrackOrigDstIP                           // -orig-dst ip    Destination address from original direction\n\tConntrackReplySrcIP                          // --reply-src ip  Reply Source IP\n\tConntrackReplyDstIP                          // --reply-dst ip  Reply Destination IP\n\tConntrackReplyAnyIP                          // Match source or destination reply IP\n\tConntrackOrigSrcPort                         // --orig-port-src port    Source port in original direction\n\tConntrackOrigDstPort                         // --orig-port-dst port    Destination port in original direction\n\tConntrackMatchLabels                         // --label label1,label2   Labels used in entry\n\tConntrackUnmatchLabels                       // --label label1,label2   Labels not used in entry\n\tConntrackNatSrcIP      = ConntrackReplySrcIP // deprecated use instead ConntrackReplySrcIP\n\tConntrackNatDstIP      = ConntrackReplyDstIP // deprecated use instead ConntrackReplyDstIP\n\tConntrackNatAnyIP      = ConntrackReplyAnyIP // deprecated use instead ConntrackReplyAnyIP\n)\n\ntype CustomConntrackFilter interface {\n\t// MatchConntrackFlow applies the filter to the flow and returns true if the flow matches\n\t// the filter or false otherwise\n\tMatchConntrackFlow(flow *ConntrackFlow) bool\n}\n\ntype ConntrackFilter struct {\n\tipNetFilter map[ConntrackFilterType]*net.IPNet\n\tportFilter  map[ConntrackFilterType]uint16\n\tprotoFilter uint8\n\tlabelFilter map[ConntrackFilterType][][]byte\n\tzoneFilter  *uint16\n}\n\n// AddIPNet adds a IP subnet to the conntrack filter\nfunc (f *ConntrackFilter) AddIPNet(tp ConntrackFilterType, ipNet *net.IPNet) error {\n\tif ipNet == nil {\n\t\treturn fmt.Errorf(\"Filter attribute empty\")\n\t}\n\tif f.ipNetFilter == nil {\n\t\tf.ipNetFilter = make(map[ConntrackFilterType]*net.IPNet)\n\t}\n\tif _, ok := f.ipNetFilter[tp]; ok {\n\t\treturn errors.New(\"Filter attribute already present\")\n\t}\n\tf.ipNetFilter[tp] = ipNet\n\treturn nil\n}\n\n// AddIP adds an IP to the conntrack filter\nfunc (f *ConntrackFilter) AddIP(tp ConntrackFilterType, ip net.IP) error {\n\tif ip == nil {\n\t\treturn fmt.Errorf(\"Filter attribute empty\")\n\t}\n\treturn f.AddIPNet(tp, NewIPNet(ip))\n}\n\n// AddPort adds a Port to the conntrack filter if the Layer 4 protocol allows it\nfunc (f *ConntrackFilter) AddPort(tp ConntrackFilterType, port uint16) error {\n\tswitch f.protoFilter {\n\t// TCP, UDP, DCCP, SCTP, UDPLite\n\tcase 6, 17, 33, 132, 136:\n\tdefault:\n\t\treturn fmt.Errorf(\"Filter attribute not available without a valid Layer 4 protocol: %d\", f.protoFilter)\n\t}\n\n\tif f.portFilter == nil {\n\t\tf.portFilter = make(map[ConntrackFilterType]uint16)\n\t}\n\tif _, ok := f.portFilter[tp]; ok {\n\t\treturn errors.New(\"Filter attribute already present\")\n\t}\n\tf.portFilter[tp] = port\n\treturn nil\n}\n\n// AddProtocol adds the Layer 4 protocol to the conntrack filter\nfunc (f *ConntrackFilter) AddProtocol(proto uint8) error {\n\tif f.protoFilter != 0 {\n\t\treturn errors.New(\"Filter attribute already present\")\n\t}\n\tf.protoFilter = proto\n\treturn nil\n}\n\n// AddLabels adds the provided list (zero or more) of labels to the conntrack filter\n// ConntrackFilterType here can be either:\n//  1. ConntrackMatchLabels: This matches every flow that has a label value (len(flow.Labels) > 0)\n//     against the list of provided labels. If `flow.Labels` contains ALL the provided labels\n//     it is considered a match. This can be used when you want to match flows that contain\n//     one or more labels.\n//  2. ConntrackUnmatchLabels:  This matches every flow that has a label value (len(flow.Labels) > 0)\n//     against the list of provided labels. If `flow.Labels` does NOT contain ALL the provided labels\n//     it is considered a match. This can be used when you want to match flows that don't contain\n//     one or more labels.\nfunc (f *ConntrackFilter) AddLabels(tp ConntrackFilterType, labels [][]byte) error {\n\tif len(labels) == 0 {\n\t\treturn errors.New(\"Invalid length for provided labels\")\n\t}\n\tif f.labelFilter == nil {\n\t\tf.labelFilter = make(map[ConntrackFilterType][][]byte)\n\t}\n\tif _, ok := f.labelFilter[tp]; ok {\n\t\treturn errors.New(\"Filter attribute already present\")\n\t}\n\tf.labelFilter[tp] = labels\n\treturn nil\n}\n\n// AddZone adds a zone to the conntrack filter\nfunc (f *ConntrackFilter) AddZone(zone uint16) error {\n\tif f.zoneFilter != nil {\n\t\treturn errors.New(\"Filter attribute already present\")\n\t}\n\tf.zoneFilter = &zone\n\treturn nil\n}\n\n// MatchConntrackFlow applies the filter to the flow and returns true if the flow matches the filter\n// false otherwise\nfunc (f *ConntrackFilter) MatchConntrackFlow(flow *ConntrackFlow) bool {\n\tif len(f.ipNetFilter) == 0 && len(f.portFilter) == 0 && f.protoFilter == 0 && len(f.labelFilter) == 0 && f.zoneFilter == nil {\n\t\t// empty filter always not match\n\t\treturn false\n\t}\n\n\t// -p, --protonum proto          Layer 4 Protocol, eg. 'tcp'\n\tif f.protoFilter != 0 && flow.Forward.Protocol != f.protoFilter {\n\t\t// different Layer 4 protocol always not match\n\t\treturn false\n\t}\n\n\t// Conntrack zone filter\n\tif f.zoneFilter != nil && *f.zoneFilter != flow.Zone {\n\t\treturn false\n\t}\n\n\tmatch := true\n\n\t// IP conntrack filter\n\tif len(f.ipNetFilter) > 0 {\n\t\t// -orig-src ip   Source address from original direction\n\t\tif elem, found := f.ipNetFilter[ConntrackOrigSrcIP]; found {\n\t\t\tmatch = match && elem.Contains(flow.Forward.SrcIP)\n\t\t}\n\n\t\t// -orig-dst ip   Destination address from original direction\n\t\tif elem, found := f.ipNetFilter[ConntrackOrigDstIP]; match && found {\n\t\t\tmatch = match && elem.Contains(flow.Forward.DstIP)\n\t\t}\n\n\t\t// -src-nat ip    Source NAT ip\n\t\tif elem, found := f.ipNetFilter[ConntrackReplySrcIP]; match && found {\n\t\t\tmatch = match && elem.Contains(flow.Reverse.SrcIP)\n\t\t}\n\n\t\t// -dst-nat ip    Destination NAT ip\n\t\tif elem, found := f.ipNetFilter[ConntrackReplyDstIP]; match && found {\n\t\t\tmatch = match && elem.Contains(flow.Reverse.DstIP)\n\t\t}\n\n\t\t// Match source or destination reply IP\n\t\tif elem, found := f.ipNetFilter[ConntrackReplyAnyIP]; match && found {\n\t\t\tmatch = match && (elem.Contains(flow.Reverse.SrcIP) || elem.Contains(flow.Reverse.DstIP))\n\t\t}\n\t}\n\n\t// Layer 4 Port filter\n\tif len(f.portFilter) > 0 {\n\t\t// -orig-port-src port\tSource port from original direction\n\t\tif elem, found := f.portFilter[ConntrackOrigSrcPort]; match && found {\n\t\t\tmatch = match && elem == flow.Forward.SrcPort\n\t\t}\n\n\t\t// -orig-port-dst port\tDestination port from original direction\n\t\tif elem, found := f.portFilter[ConntrackOrigDstPort]; match && found {\n\t\t\tmatch = match && elem == flow.Forward.DstPort\n\t\t}\n\t}\n\n\t// Label filter\n\tif len(f.labelFilter) > 0 {\n\t\tif len(flow.Labels) > 0 {\n\t\t\t// --label label1,label2 in conn entry;\n\t\t\t// every label passed should be contained in flow.Labels for a match to be true\n\t\t\tif elem, found := f.labelFilter[ConntrackMatchLabels]; match && found {\n\t\t\t\tfor _, label := range elem {\n\t\t\t\t\tmatch = match && (bytes.Contains(flow.Labels, label))\n\t\t\t\t}\n\t\t\t}\n\t\t\t// --label label1,label2 in conn entry;\n\t\t\t// every label passed should be not contained in flow.Labels for a match to be true\n\t\t\tif elem, found := f.labelFilter[ConntrackUnmatchLabels]; match && found {\n\t\t\t\tfor _, label := range elem {\n\t\t\t\t\tmatch = match && !(bytes.Contains(flow.Labels, label))\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// flow doesn't contain labels, so it doesn't contain or notContain any provided matches\n\t\t\tmatch = false\n\t\t}\n\t}\n\n\treturn match\n}\n\nvar _ CustomConntrackFilter = (*ConntrackFilter)(nil)\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/conntrack_unspecified.go",
    "content": "// +build !linux\n\npackage netlink\n\n// ConntrackTableType Conntrack table for the netlink operation\ntype ConntrackTableType uint8\n\n// InetFamily Family type\ntype InetFamily uint8\n\n// ConntrackFlow placeholder\ntype ConntrackFlow struct{}\n\n// CustomConntrackFilter placeholder\ntype CustomConntrackFilter struct{}\n\n// ConntrackFilter placeholder\ntype ConntrackFilter struct{}\n\n// ConntrackTableList returns the flow list of a table of a specific family\n// conntrack -L [table] [options]          List conntrack or expectation table\nfunc ConntrackTableList(table ConntrackTableType, family InetFamily) ([]*ConntrackFlow, error) {\n\treturn nil, ErrNotImplemented\n}\n\n// ConntrackTableFlush flushes all the flows of a specified table\n// conntrack -F [table]            Flush table\n// The flush operation applies to all the family types\nfunc ConntrackTableFlush(table ConntrackTableType) error {\n\treturn ErrNotImplemented\n}\n\n// ConntrackDeleteFilter deletes entries on the specified table on the base of the filter\n// conntrack -D [table] parameters         Delete conntrack or expectation\n//\n// Deprecated: use [ConntrackDeleteFilters] instead.\nfunc ConntrackDeleteFilter(table ConntrackTableType, family InetFamily, filter *ConntrackFilter) (uint, error) {\n\treturn 0, ErrNotImplemented\n}\n\n// ConntrackDeleteFilters deletes entries on the specified table matching any of the specified filters\n// conntrack -D [table] parameters         Delete conntrack or expectation\nfunc ConntrackDeleteFilters(table ConntrackTableType, family InetFamily, filters ...CustomConntrackFilter) (uint, error) {\n\treturn 0, ErrNotImplemented\n}\n\n// ConntrackTableList returns the flow list of a table of a specific family using the netlink handle passed\n// conntrack -L [table] [options]          List conntrack or expectation table\nfunc (h *Handle) ConntrackTableList(table ConntrackTableType, family InetFamily) ([]*ConntrackFlow, error) {\n\treturn nil, ErrNotImplemented\n}\n\n// ConntrackTableFlush flushes all the flows of a specified table using the netlink handle passed\n// conntrack -F [table]            Flush table\n// The flush operation applies to all the family types\nfunc (h *Handle) ConntrackTableFlush(table ConntrackTableType) error {\n\treturn ErrNotImplemented\n}\n\n// ConntrackDeleteFilter deletes entries on the specified table on the base of the filter using the netlink handle passed\n// conntrack -D [table] parameters         Delete conntrack or expectation\n//\n// Deprecated: use [Handle.ConntrackDeleteFilters] instead.\nfunc (h *Handle) ConntrackDeleteFilter(table ConntrackTableType, family InetFamily, filter *ConntrackFilter) (uint, error) {\n\treturn 0, ErrNotImplemented\n}\n\n// ConntrackDeleteFilters deletes entries on the specified table matching any of the specified filters using the netlink handle passed\n// conntrack -D [table] parameters         Delete conntrack or expectation\nfunc (h *Handle) ConntrackDeleteFilters(table ConntrackTableType, family InetFamily, filters ...CustomConntrackFilter) (uint, error) {\n\treturn 0, ErrNotImplemented\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/devlink_linux.go",
    "content": "package netlink\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// DevlinkDevEswitchAttr represents device's eswitch attributes\ntype DevlinkDevEswitchAttr struct {\n\tMode       string\n\tInlineMode string\n\tEncapMode  string\n}\n\n// DevlinkDevAttrs represents device attributes\ntype DevlinkDevAttrs struct {\n\tEswitch DevlinkDevEswitchAttr\n}\n\n// DevlinkDevice represents device and its attributes\ntype DevlinkDevice struct {\n\tBusName    string\n\tDeviceName string\n\tAttrs      DevlinkDevAttrs\n}\n\n// DevlinkPortFn represents port function and its attributes\ntype DevlinkPortFn struct {\n\tHwAddr  net.HardwareAddr\n\tState   uint8\n\tOpState uint8\n}\n\n// DevlinkPortFnSetAttrs represents attributes to set\ntype DevlinkPortFnSetAttrs struct {\n\tFnAttrs     DevlinkPortFn\n\tHwAddrValid bool\n\tStateValid  bool\n}\n\n// DevlinkPort represents port and its attributes\ntype DevlinkPort struct {\n\tBusName        string\n\tDeviceName     string\n\tPortIndex      uint32\n\tPortType       uint16\n\tNetdeviceName  string\n\tNetdevIfIndex  uint32\n\tRdmaDeviceName string\n\tPortFlavour    uint16\n\tFn             *DevlinkPortFn\n}\n\ntype DevLinkPortAddAttrs struct {\n\tController      uint32\n\tSfNumber        uint32\n\tPortIndex       uint32\n\tPfNumber        uint16\n\tSfNumberValid   bool\n\tPortIndexValid  bool\n\tControllerValid bool\n}\n\n// DevlinkDeviceInfo represents devlink info\ntype DevlinkDeviceInfo struct {\n\tDriver         string\n\tSerialNumber   string\n\tBoardID        string\n\tFwApp          string\n\tFwAppBoundleID string\n\tFwAppName      string\n\tFwBoundleID    string\n\tFwMgmt         string\n\tFwMgmtAPI      string\n\tFwMgmtBuild    string\n\tFwNetlist      string\n\tFwNetlistBuild string\n\tFwPsidAPI      string\n\tFwUndi         string\n}\n\n// DevlinkResource represents a device resource\ntype DevlinkResource struct {\n\tName            string\n\tID              uint64\n\tSize            uint64\n\tSizeNew         uint64\n\tSizeMin         uint64\n\tSizeMax         uint64\n\tSizeGranularity uint64\n\tPendingChange   bool\n\tUnit            uint8\n\tSizeValid       bool\n\tOCCValid        bool\n\tOCCSize         uint64\n\tParent          *DevlinkResource\n\tChildren        []DevlinkResource\n}\n\n// parseAttributes parses provided Netlink Attributes and populates DevlinkResource, returns error if occured\nfunc (dlr *DevlinkResource) parseAttributes(attrs map[uint16]syscall.NetlinkRouteAttr) error {\n\tvar attr syscall.NetlinkRouteAttr\n\tvar ok bool\n\n\t// mandatory attributes\n\tattr, ok = attrs[nl.DEVLINK_ATTR_RESOURCE_ID]\n\tif !ok {\n\t\treturn fmt.Errorf(\"missing resource id\")\n\t}\n\tdlr.ID = native.Uint64(attr.Value)\n\n\tattr, ok = attrs[nl.DEVLINK_ATTR_RESOURCE_NAME]\n\tif !ok {\n\t\treturn fmt.Errorf(\"missing resource name\")\n\t}\n\tdlr.Name = nl.BytesToString(attr.Value)\n\n\tattr, ok = attrs[nl.DEVLINK_ATTR_RESOURCE_SIZE]\n\tif !ok {\n\t\treturn fmt.Errorf(\"missing resource size\")\n\t}\n\tdlr.Size = native.Uint64(attr.Value)\n\n\tattr, ok = attrs[nl.DEVLINK_ATTR_RESOURCE_SIZE_GRAN]\n\tif !ok {\n\t\treturn fmt.Errorf(\"missing resource size granularity\")\n\t}\n\tdlr.SizeGranularity = native.Uint64(attr.Value)\n\n\tattr, ok = attrs[nl.DEVLINK_ATTR_RESOURCE_UNIT]\n\tif !ok {\n\t\treturn fmt.Errorf(\"missing resource unit\")\n\t}\n\tdlr.Unit = uint8(attr.Value[0])\n\n\tattr, ok = attrs[nl.DEVLINK_ATTR_RESOURCE_SIZE_MIN]\n\tif !ok {\n\t\treturn fmt.Errorf(\"missing resource size min\")\n\t}\n\tdlr.SizeMin = native.Uint64(attr.Value)\n\n\tattr, ok = attrs[nl.DEVLINK_ATTR_RESOURCE_SIZE_MAX]\n\tif !ok {\n\t\treturn fmt.Errorf(\"missing resource size max\")\n\t}\n\tdlr.SizeMax = native.Uint64(attr.Value)\n\n\t// optional attributes\n\tattr, ok = attrs[nl.DEVLINK_ATTR_RESOURCE_OCC]\n\tif ok {\n\t\tdlr.OCCSize = native.Uint64(attr.Value)\n\t\tdlr.OCCValid = true\n\t}\n\n\tattr, ok = attrs[nl.DEVLINK_ATTR_RESOURCE_SIZE_VALID]\n\tif ok {\n\t\tdlr.SizeValid = uint8(attr.Value[0]) != 0\n\t}\n\n\tdlr.SizeNew = dlr.Size\n\tattr, ok = attrs[nl.DEVLINK_ATTR_RESOURCE_SIZE_NEW]\n\tif ok {\n\t\tdlr.SizeNew = native.Uint64(attr.Value)\n\t}\n\n\tdlr.PendingChange = dlr.Size != dlr.SizeNew\n\n\tattr, ok = attrs[nl.DEVLINK_ATTR_RESOURCE_LIST]\n\tif ok {\n\t\t// handle nested resoruces recursively\n\t\tsubResources, err := nl.ParseRouteAttr(attr.Value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tfor _, subresource := range subResources {\n\t\t\tresource := DevlinkResource{Parent: dlr}\n\t\t\tattrs, err := nl.ParseRouteAttrAsMap(subresource.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\terr = resource.parseAttributes(attrs)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to parse child resource, parent:%s. %w\", dlr.Name, err)\n\t\t\t}\n\t\t\tdlr.Children = append(dlr.Children, resource)\n\t\t}\n\t}\n\treturn nil\n}\n\n// DevlinkResources represents all devlink resources of a devlink device\ntype DevlinkResources struct {\n\tBus       string\n\tDevice    string\n\tResources []DevlinkResource\n}\n\n// parseAttributes parses provided Netlink Attributes and populates DevlinkResources, returns error if occured\nfunc (dlrs *DevlinkResources) parseAttributes(attrs map[uint16]syscall.NetlinkRouteAttr) error {\n\tvar attr syscall.NetlinkRouteAttr\n\tvar ok bool\n\n\t// Bus\n\tattr, ok = attrs[nl.DEVLINK_ATTR_BUS_NAME]\n\tif !ok {\n\t\treturn fmt.Errorf(\"missing bus name\")\n\t}\n\tdlrs.Bus = nl.BytesToString(attr.Value)\n\n\t// Device\n\tattr, ok = attrs[nl.DEVLINK_ATTR_DEV_NAME]\n\tif !ok {\n\t\treturn fmt.Errorf(\"missing device name\")\n\t}\n\tdlrs.Device = nl.BytesToString(attr.Value)\n\n\t// Resource List\n\tattr, ok = attrs[nl.DEVLINK_ATTR_RESOURCE_LIST]\n\tif !ok {\n\t\treturn fmt.Errorf(\"missing resource list\")\n\t}\n\n\tresourceAttrs, err := nl.ParseRouteAttr(attr.Value)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, resourceAttr := range resourceAttrs {\n\t\tresource := DevlinkResource{}\n\t\tattrs, err := nl.ParseRouteAttrAsMap(resourceAttr.Value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = resource.parseAttributes(attrs)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to parse root resoruces, %w\", err)\n\t\t}\n\t\tdlrs.Resources = append(dlrs.Resources, resource)\n\t}\n\n\treturn nil\n}\n\n// DevlinkParam represents parameter of the device\ntype DevlinkParam struct {\n\tName      string\n\tIsGeneric bool\n\tType      uint8 // possible values are in nl.DEVLINK_PARAM_TYPE_* constants\n\tValues    []DevlinkParamValue\n}\n\n// DevlinkParamValue contains values of the parameter\n// Data field contains specific type which can be casted by unsing info from the DevlinkParam.Type field\ntype DevlinkParamValue struct {\n\trawData []byte\n\tData    interface{}\n\tCMODE   uint8 // possible values are in nl.DEVLINK_PARAM_CMODE_* constants\n}\n\n// parseAttributes parses provided Netlink Attributes and populates DevlinkParam, returns error if occured\nfunc (dlp *DevlinkParam) parseAttributes(attrs []syscall.NetlinkRouteAttr) error {\n\tvar valuesList [][]syscall.NetlinkRouteAttr\n\tfor _, attr := range attrs {\n\t\tswitch attr.Attr.Type {\n\t\tcase nl.DEVLINK_ATTR_PARAM:\n\t\t\tnattrs, err := nl.ParseRouteAttr(attr.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tfor _, nattr := range nattrs {\n\t\t\t\tswitch nattr.Attr.Type {\n\t\t\t\tcase nl.DEVLINK_ATTR_PARAM_NAME:\n\t\t\t\t\tdlp.Name = nl.BytesToString(nattr.Value)\n\t\t\t\tcase nl.DEVLINK_ATTR_PARAM_GENERIC:\n\t\t\t\t\tdlp.IsGeneric = true\n\t\t\t\tcase nl.DEVLINK_ATTR_PARAM_TYPE:\n\t\t\t\t\tif len(nattr.Value) == 1 {\n\t\t\t\t\t\tdlp.Type = nattr.Value[0]\n\t\t\t\t\t}\n\t\t\t\tcase nl.DEVLINK_ATTR_PARAM_VALUES_LIST:\n\t\t\t\t\tnnattrs, err := nl.ParseRouteAttr(nattr.Value)\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\tvaluesList = append(valuesList, nnattrs)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfor _, valAttr := range valuesList {\n\t\tv := DevlinkParamValue{}\n\t\tif err := v.parseAttributes(valAttr, dlp.Type); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdlp.Values = append(dlp.Values, v)\n\t}\n\treturn nil\n}\n\nfunc (dlpv *DevlinkParamValue) parseAttributes(attrs []syscall.NetlinkRouteAttr, paramType uint8) error {\n\tfor _, attr := range attrs {\n\t\tnattrs, err := nl.ParseRouteAttr(attr.Value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvar rawData []byte\n\t\tfor _, nattr := range nattrs {\n\t\t\tswitch nattr.Attr.Type {\n\t\t\tcase nl.DEVLINK_ATTR_PARAM_VALUE_DATA:\n\t\t\t\trawData = nattr.Value\n\t\t\tcase nl.DEVLINK_ATTR_PARAM_VALUE_CMODE:\n\t\t\t\tif len(nattr.Value) == 1 {\n\t\t\t\t\tdlpv.CMODE = nattr.Value[0]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tswitch paramType {\n\t\tcase nl.DEVLINK_PARAM_TYPE_U8:\n\t\t\tdlpv.Data = uint8(0)\n\t\t\tif rawData != nil && len(rawData) == 1 {\n\t\t\t\tdlpv.Data = uint8(rawData[0])\n\t\t\t}\n\t\tcase nl.DEVLINK_PARAM_TYPE_U16:\n\t\t\tdlpv.Data = uint16(0)\n\t\t\tif rawData != nil {\n\t\t\t\tdlpv.Data = native.Uint16(rawData)\n\t\t\t}\n\t\tcase nl.DEVLINK_PARAM_TYPE_U32:\n\t\t\tdlpv.Data = uint32(0)\n\t\t\tif rawData != nil {\n\t\t\t\tdlpv.Data = native.Uint32(rawData)\n\t\t\t}\n\t\tcase nl.DEVLINK_PARAM_TYPE_STRING:\n\t\t\tdlpv.Data = \"\"\n\t\t\tif rawData != nil {\n\t\t\t\tdlpv.Data = nl.BytesToString(rawData)\n\t\t\t}\n\t\tcase nl.DEVLINK_PARAM_TYPE_BOOL:\n\t\t\tdlpv.Data = rawData != nil\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc parseDevLinkDeviceList(msgs [][]byte) ([]*DevlinkDevice, error) {\n\tdevices := make([]*DevlinkDevice, 0, len(msgs))\n\tfor _, m := range msgs {\n\t\tattrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdev := &DevlinkDevice{}\n\t\tif err = dev.parseAttributes(attrs); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdevices = append(devices, dev)\n\t}\n\treturn devices, nil\n}\n\nfunc eswitchStringToMode(modeName string) (uint16, error) {\n\tif modeName == \"legacy\" {\n\t\treturn nl.DEVLINK_ESWITCH_MODE_LEGACY, nil\n\t} else if modeName == \"switchdev\" {\n\t\treturn nl.DEVLINK_ESWITCH_MODE_SWITCHDEV, nil\n\t} else {\n\t\treturn 0xffff, fmt.Errorf(\"invalid switchdev mode\")\n\t}\n}\n\nfunc parseEswitchMode(mode uint16) string {\n\tvar eswitchMode = map[uint16]string{\n\t\tnl.DEVLINK_ESWITCH_MODE_LEGACY:    \"legacy\",\n\t\tnl.DEVLINK_ESWITCH_MODE_SWITCHDEV: \"switchdev\",\n\t}\n\tif eswitchMode[mode] == \"\" {\n\t\treturn \"unknown\"\n\t} else {\n\t\treturn eswitchMode[mode]\n\t}\n}\n\nfunc parseEswitchInlineMode(inlinemode uint8) string {\n\tvar eswitchInlineMode = map[uint8]string{\n\t\tnl.DEVLINK_ESWITCH_INLINE_MODE_NONE:      \"none\",\n\t\tnl.DEVLINK_ESWITCH_INLINE_MODE_LINK:      \"link\",\n\t\tnl.DEVLINK_ESWITCH_INLINE_MODE_NETWORK:   \"network\",\n\t\tnl.DEVLINK_ESWITCH_INLINE_MODE_TRANSPORT: \"transport\",\n\t}\n\tif eswitchInlineMode[inlinemode] == \"\" {\n\t\treturn \"unknown\"\n\t} else {\n\t\treturn eswitchInlineMode[inlinemode]\n\t}\n}\n\nfunc parseEswitchEncapMode(encapmode uint8) string {\n\tvar eswitchEncapMode = map[uint8]string{\n\t\tnl.DEVLINK_ESWITCH_ENCAP_MODE_NONE:  \"disable\",\n\t\tnl.DEVLINK_ESWITCH_ENCAP_MODE_BASIC: \"enable\",\n\t}\n\tif eswitchEncapMode[encapmode] == \"\" {\n\t\treturn \"unknown\"\n\t} else {\n\t\treturn eswitchEncapMode[encapmode]\n\t}\n}\n\nfunc (d *DevlinkDevice) parseAttributes(attrs []syscall.NetlinkRouteAttr) error {\n\tfor _, a := range attrs {\n\t\tswitch a.Attr.Type {\n\t\tcase nl.DEVLINK_ATTR_BUS_NAME:\n\t\t\td.BusName = string(a.Value[:len(a.Value)-1])\n\t\tcase nl.DEVLINK_ATTR_DEV_NAME:\n\t\t\td.DeviceName = string(a.Value[:len(a.Value)-1])\n\t\tcase nl.DEVLINK_ATTR_ESWITCH_MODE:\n\t\t\td.Attrs.Eswitch.Mode = parseEswitchMode(native.Uint16(a.Value))\n\t\tcase nl.DEVLINK_ATTR_ESWITCH_INLINE_MODE:\n\t\t\td.Attrs.Eswitch.InlineMode = parseEswitchInlineMode(uint8(a.Value[0]))\n\t\tcase nl.DEVLINK_ATTR_ESWITCH_ENCAP_MODE:\n\t\t\td.Attrs.Eswitch.EncapMode = parseEswitchEncapMode(uint8(a.Value[0]))\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (dev *DevlinkDevice) parseEswitchAttrs(msgs [][]byte) {\n\tm := msgs[0]\n\tattrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])\n\tif err != nil {\n\t\treturn\n\t}\n\tdev.parseAttributes(attrs)\n}\n\nfunc (h *Handle) getEswitchAttrs(family *GenlFamily, dev *DevlinkDevice) {\n\tmsg := &nl.Genlmsg{\n\t\tCommand: nl.DEVLINK_CMD_ESWITCH_GET,\n\t\tVersion: nl.GENL_DEVLINK_VERSION,\n\t}\n\treq := h.newNetlinkRequest(int(family.ID), unix.NLM_F_REQUEST|unix.NLM_F_ACK)\n\treq.AddData(msg)\n\n\tb := make([]byte, len(dev.BusName)+1)\n\tcopy(b, dev.BusName)\n\tdata := nl.NewRtAttr(nl.DEVLINK_ATTR_BUS_NAME, b)\n\treq.AddData(data)\n\n\tb = make([]byte, len(dev.DeviceName)+1)\n\tcopy(b, dev.DeviceName)\n\tdata = nl.NewRtAttr(nl.DEVLINK_ATTR_DEV_NAME, b)\n\treq.AddData(data)\n\n\tmsgs, err := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif err != nil {\n\t\treturn\n\t}\n\tdev.parseEswitchAttrs(msgs)\n}\n\n// DevLinkGetDeviceList provides a pointer to devlink devices and nil error,\n// otherwise returns an error code.\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) DevLinkGetDeviceList() ([]*DevlinkDevice, error) {\n\tf, err := h.GenlFamilyGet(nl.GENL_DEVLINK_NAME)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmsg := &nl.Genlmsg{\n\t\tCommand: nl.DEVLINK_CMD_GET,\n\t\tVersion: nl.GENL_DEVLINK_VERSION,\n\t}\n\treq := h.newNetlinkRequest(int(f.ID),\n\t\tunix.NLM_F_REQUEST|unix.NLM_F_ACK|unix.NLM_F_DUMP)\n\treq.AddData(msg)\n\tmsgs, executeErr := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\tdevices, err := parseDevLinkDeviceList(msgs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, d := range devices {\n\t\th.getEswitchAttrs(f, d)\n\t}\n\treturn devices, executeErr\n}\n\n// DevLinkGetDeviceList provides a pointer to devlink devices and nil error,\n// otherwise returns an error code.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc DevLinkGetDeviceList() ([]*DevlinkDevice, error) {\n\treturn pkgHandle.DevLinkGetDeviceList()\n}\n\nfunc parseDevlinkDevice(msgs [][]byte) (*DevlinkDevice, error) {\n\tm := msgs[0]\n\tattrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdev := &DevlinkDevice{}\n\tif err = dev.parseAttributes(attrs); err != nil {\n\t\treturn nil, err\n\t}\n\treturn dev, nil\n}\n\nfunc (h *Handle) createCmdReq(cmd uint8, bus string, device string) (*GenlFamily, *nl.NetlinkRequest, error) {\n\tf, err := h.GenlFamilyGet(nl.GENL_DEVLINK_NAME)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tmsg := &nl.Genlmsg{\n\t\tCommand: cmd,\n\t\tVersion: nl.GENL_DEVLINK_VERSION,\n\t}\n\treq := h.newNetlinkRequest(int(f.ID),\n\t\tunix.NLM_F_REQUEST|unix.NLM_F_ACK)\n\treq.AddData(msg)\n\n\tb := make([]byte, len(bus)+1)\n\tcopy(b, bus)\n\tdata := nl.NewRtAttr(nl.DEVLINK_ATTR_BUS_NAME, b)\n\treq.AddData(data)\n\n\tb = make([]byte, len(device)+1)\n\tcopy(b, device)\n\tdata = nl.NewRtAttr(nl.DEVLINK_ATTR_DEV_NAME, b)\n\treq.AddData(data)\n\n\treturn f, req, nil\n}\n\n// DevlinkGetDeviceByName provides a pointer to devlink device and nil error,\n// otherwise returns an error code.\nfunc (h *Handle) DevLinkGetDeviceByName(Bus string, Device string) (*DevlinkDevice, error) {\n\tf, req, err := h.createCmdReq(nl.DEVLINK_CMD_GET, Bus, Device)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\trespmsg, err := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdev, err := parseDevlinkDevice(respmsg)\n\tif err == nil {\n\t\th.getEswitchAttrs(f, dev)\n\t}\n\treturn dev, err\n}\n\n// DevlinkGetDeviceByName provides a pointer to devlink device and nil error,\n// otherwise returns an error code.\nfunc DevLinkGetDeviceByName(Bus string, Device string) (*DevlinkDevice, error) {\n\treturn pkgHandle.DevLinkGetDeviceByName(Bus, Device)\n}\n\n// DevLinkSetEswitchMode sets eswitch mode if able to set successfully or\n// returns an error code.\n// Equivalent to: `devlink dev eswitch set $dev mode switchdev`\n// Equivalent to: `devlink dev eswitch set $dev mode legacy`\nfunc (h *Handle) DevLinkSetEswitchMode(Dev *DevlinkDevice, NewMode string) error {\n\tmode, err := eswitchStringToMode(NewMode)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, req, err := h.createCmdReq(nl.DEVLINK_CMD_ESWITCH_SET, Dev.BusName, Dev.DeviceName)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treq.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_ESWITCH_MODE, nl.Uint16Attr(mode)))\n\n\t_, err = req.Execute(unix.NETLINK_GENERIC, 0)\n\treturn err\n}\n\n// DevLinkSetEswitchMode sets eswitch mode if able to set successfully or\n// returns an error code.\n// Equivalent to: `devlink dev eswitch set $dev mode switchdev`\n// Equivalent to: `devlink dev eswitch set $dev mode legacy`\nfunc DevLinkSetEswitchMode(Dev *DevlinkDevice, NewMode string) error {\n\treturn pkgHandle.DevLinkSetEswitchMode(Dev, NewMode)\n}\n\nfunc (port *DevlinkPort) parseAttributes(attrs []syscall.NetlinkRouteAttr) error {\n\tfor _, a := range attrs {\n\t\tswitch a.Attr.Type {\n\t\tcase nl.DEVLINK_ATTR_BUS_NAME:\n\t\t\tport.BusName = string(a.Value[:len(a.Value)-1])\n\t\tcase nl.DEVLINK_ATTR_DEV_NAME:\n\t\t\tport.DeviceName = string(a.Value[:len(a.Value)-1])\n\t\tcase nl.DEVLINK_ATTR_PORT_INDEX:\n\t\t\tport.PortIndex = native.Uint32(a.Value)\n\t\tcase nl.DEVLINK_ATTR_PORT_TYPE:\n\t\t\tport.PortType = native.Uint16(a.Value)\n\t\tcase nl.DEVLINK_ATTR_PORT_NETDEV_NAME:\n\t\t\tport.NetdeviceName = string(a.Value[:len(a.Value)-1])\n\t\tcase nl.DEVLINK_ATTR_PORT_NETDEV_IFINDEX:\n\t\t\tport.NetdevIfIndex = native.Uint32(a.Value)\n\t\tcase nl.DEVLINK_ATTR_PORT_IBDEV_NAME:\n\t\t\tport.RdmaDeviceName = string(a.Value[:len(a.Value)-1])\n\t\tcase nl.DEVLINK_ATTR_PORT_FLAVOUR:\n\t\t\tport.PortFlavour = native.Uint16(a.Value)\n\t\tcase nl.DEVLINK_ATTR_PORT_FUNCTION:\n\t\t\tport.Fn = &DevlinkPortFn{}\n\t\t\tfor nested := range nl.ParseAttributes(a.Value) {\n\t\t\t\tswitch nested.Type {\n\t\t\t\tcase nl.DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR:\n\t\t\t\t\tport.Fn.HwAddr = nested.Value[:]\n\t\t\t\tcase nl.DEVLINK_PORT_FN_ATTR_STATE:\n\t\t\t\t\tport.Fn.State = uint8(nested.Value[0])\n\t\t\t\tcase nl.DEVLINK_PORT_FN_ATTR_OPSTATE:\n\t\t\t\t\tport.Fn.OpState = uint8(nested.Value[0])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc parseDevLinkAllPortList(msgs [][]byte) ([]*DevlinkPort, error) {\n\tports := make([]*DevlinkPort, 0, len(msgs))\n\tfor _, m := range msgs {\n\t\tattrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tport := &DevlinkPort{}\n\t\tif err = port.parseAttributes(attrs); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tports = append(ports, port)\n\t}\n\treturn ports, nil\n}\n\n// DevLinkGetPortList provides a pointer to devlink ports and nil error,\n// otherwise returns an error code.\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) DevLinkGetAllPortList() ([]*DevlinkPort, error) {\n\tf, err := h.GenlFamilyGet(nl.GENL_DEVLINK_NAME)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmsg := &nl.Genlmsg{\n\t\tCommand: nl.DEVLINK_CMD_PORT_GET,\n\t\tVersion: nl.GENL_DEVLINK_VERSION,\n\t}\n\treq := h.newNetlinkRequest(int(f.ID),\n\t\tunix.NLM_F_REQUEST|unix.NLM_F_ACK|unix.NLM_F_DUMP)\n\treq.AddData(msg)\n\tmsgs, executeErr := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\tports, err := parseDevLinkAllPortList(msgs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn ports, executeErr\n}\n\n// DevLinkGetPortList provides a pointer to devlink ports and nil error,\n// otherwise returns an error code.\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc DevLinkGetAllPortList() ([]*DevlinkPort, error) {\n\treturn pkgHandle.DevLinkGetAllPortList()\n}\n\nfunc parseDevlinkPortMsg(msgs [][]byte) (*DevlinkPort, error) {\n\tm := msgs[0]\n\tattrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tport := &DevlinkPort{}\n\tif err = port.parseAttributes(attrs); err != nil {\n\t\treturn nil, err\n\t}\n\treturn port, nil\n}\n\n// DevLinkGetPortByIndexprovides a pointer to devlink device and nil error,\n// otherwise returns an error code.\nfunc (h *Handle) DevLinkGetPortByIndex(Bus string, Device string, PortIndex uint32) (*DevlinkPort, error) {\n\n\t_, req, err := h.createCmdReq(nl.DEVLINK_CMD_PORT_GET, Bus, Device)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treq.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_INDEX, nl.Uint32Attr(PortIndex)))\n\n\trespmsg, err := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tport, err := parseDevlinkPortMsg(respmsg)\n\treturn port, err\n}\n\n// DevlinkGetDeviceResources returns devlink device resources\nfunc DevlinkGetDeviceResources(bus string, device string) (*DevlinkResources, error) {\n\treturn pkgHandle.DevlinkGetDeviceResources(bus, device)\n}\n\n// DevlinkGetDeviceResources returns devlink device resources\nfunc (h *Handle) DevlinkGetDeviceResources(bus string, device string) (*DevlinkResources, error) {\n\t_, req, err := h.createCmdReq(nl.DEVLINK_CMD_RESOURCE_DUMP, bus, device)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\trespmsg, err := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar resources DevlinkResources\n\tfor _, m := range respmsg {\n\t\tattrs, err := nl.ParseRouteAttrAsMap(m[nl.SizeofGenlmsg:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tresources.parseAttributes(attrs)\n\t}\n\n\treturn &resources, nil\n}\n\n// DevlinkGetDeviceParams returns parameters for devlink device\n// Equivalent to: `devlink dev param show <bus>/<device>`\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) DevlinkGetDeviceParams(bus string, device string) ([]*DevlinkParam, error) {\n\t_, req, err := h.createCmdReq(nl.DEVLINK_CMD_PARAM_GET, bus, device)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Flags |= unix.NLM_F_DUMP\n\trespmsg, executeErr := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\tvar params []*DevlinkParam\n\tfor _, m := range respmsg {\n\t\tattrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tp := &DevlinkParam{}\n\t\tif err := p.parseAttributes(attrs); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tparams = append(params, p)\n\t}\n\n\treturn params, executeErr\n}\n\n// DevlinkGetDeviceParams returns parameters for devlink device\n// Equivalent to: `devlink dev param show <bus>/<device>`\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc DevlinkGetDeviceParams(bus string, device string) ([]*DevlinkParam, error) {\n\treturn pkgHandle.DevlinkGetDeviceParams(bus, device)\n}\n\n// DevlinkGetDeviceParamByName returns specific parameter for devlink device\n// Equivalent to: `devlink dev param show <bus>/<device> name <param>`\nfunc (h *Handle) DevlinkGetDeviceParamByName(bus string, device string, param string) (*DevlinkParam, error) {\n\t_, req, err := h.createCmdReq(nl.DEVLINK_CMD_PARAM_GET, bus, device)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PARAM_NAME, nl.ZeroTerminated(param)))\n\trespmsg, err := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(respmsg) == 0 {\n\t\treturn nil, fmt.Errorf(\"unexpected response\")\n\t}\n\tattrs, err := nl.ParseRouteAttr(respmsg[0][nl.SizeofGenlmsg:])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp := &DevlinkParam{}\n\tif err := p.parseAttributes(attrs); err != nil {\n\t\treturn nil, err\n\t}\n\treturn p, nil\n}\n\n// DevlinkGetDeviceParamByName returns specific parameter for devlink device\n// Equivalent to: `devlink dev param show <bus>/<device> name <param>`\nfunc DevlinkGetDeviceParamByName(bus string, device string, param string) (*DevlinkParam, error) {\n\treturn pkgHandle.DevlinkGetDeviceParamByName(bus, device, param)\n}\n\n// DevlinkSetDeviceParam set specific parameter for devlink device\n// Equivalent to: `devlink dev param set <bus>/<device> name <param> cmode <cmode> value <value>`\n// cmode argument should contain valid cmode value as uint8, modes are define in nl.DEVLINK_PARAM_CMODE_* constants\n// value argument should have one of the following types: uint8, uint16, uint32, string, bool\nfunc (h *Handle) DevlinkSetDeviceParam(bus string, device string, param string, cmode uint8, value interface{}) error {\n\t// retrive the param type\n\tp, err := h.DevlinkGetDeviceParamByName(bus, device, param)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to get device param: %v\", err)\n\t}\n\tparamType := p.Type\n\n\t_, req, err := h.createCmdReq(nl.DEVLINK_CMD_PARAM_SET, bus, device)\n\tif err != nil {\n\t\treturn err\n\t}\n\treq.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PARAM_TYPE, nl.Uint8Attr(paramType)))\n\treq.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PARAM_NAME, nl.ZeroTerminated(param)))\n\treq.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PARAM_VALUE_CMODE, nl.Uint8Attr(cmode)))\n\n\tvar valueAsBytes []byte\n\tswitch paramType {\n\tcase nl.DEVLINK_PARAM_TYPE_U8:\n\t\tv, ok := value.(uint8)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"unepected value type required: uint8, actual: %T\", value)\n\t\t}\n\t\tvalueAsBytes = nl.Uint8Attr(v)\n\tcase nl.DEVLINK_PARAM_TYPE_U16:\n\t\tv, ok := value.(uint16)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"unepected value type required: uint16, actual: %T\", value)\n\t\t}\n\t\tvalueAsBytes = nl.Uint16Attr(v)\n\tcase nl.DEVLINK_PARAM_TYPE_U32:\n\t\tv, ok := value.(uint32)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"unepected value type required: uint32, actual: %T\", value)\n\t\t}\n\t\tvalueAsBytes = nl.Uint32Attr(v)\n\tcase nl.DEVLINK_PARAM_TYPE_STRING:\n\t\tv, ok := value.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"unepected value type required: string, actual: %T\", value)\n\t\t}\n\t\tvalueAsBytes = nl.ZeroTerminated(v)\n\tcase nl.DEVLINK_PARAM_TYPE_BOOL:\n\t\tv, ok := value.(bool)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"unepected value type required: bool, actual: %T\", value)\n\t\t}\n\t\tif v {\n\t\t\tvalueAsBytes = []byte{}\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported parameter type: %d\", paramType)\n\t}\n\tif valueAsBytes != nil {\n\t\treq.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PARAM_VALUE_DATA, valueAsBytes))\n\t}\n\t_, err = req.Execute(unix.NETLINK_GENERIC, 0)\n\treturn err\n}\n\n// DevlinkSetDeviceParam set specific parameter for devlink device\n// Equivalent to: `devlink dev param set <bus>/<device> name <param> cmode <cmode> value <value>`\n// cmode argument should contain valid cmode value as uint8, modes are define in nl.DEVLINK_PARAM_CMODE_* constants\n// value argument should have one of the following types: uint8, uint16, uint32, string, bool\nfunc DevlinkSetDeviceParam(bus string, device string, param string, cmode uint8, value interface{}) error {\n\treturn pkgHandle.DevlinkSetDeviceParam(bus, device, param, cmode, value)\n}\n\n// DevLinkGetPortByIndex provides a pointer to devlink portand nil error,\n// otherwise returns an error code.\nfunc DevLinkGetPortByIndex(Bus string, Device string, PortIndex uint32) (*DevlinkPort, error) {\n\treturn pkgHandle.DevLinkGetPortByIndex(Bus, Device, PortIndex)\n}\n\n// DevLinkPortAdd adds a devlink port and returns a port on success\n// otherwise returns nil port and an error code.\nfunc (h *Handle) DevLinkPortAdd(Bus string, Device string, Flavour uint16, Attrs DevLinkPortAddAttrs) (*DevlinkPort, error) {\n\t_, req, err := h.createCmdReq(nl.DEVLINK_CMD_PORT_NEW, Bus, Device)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treq.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_FLAVOUR, nl.Uint16Attr(Flavour)))\n\n\treq.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_PCI_PF_NUMBER, nl.Uint16Attr(Attrs.PfNumber)))\n\tif Flavour == nl.DEVLINK_PORT_FLAVOUR_PCI_SF && Attrs.SfNumberValid {\n\t\treq.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_PCI_SF_NUMBER, nl.Uint32Attr(Attrs.SfNumber)))\n\t}\n\tif Attrs.PortIndexValid {\n\t\treq.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_INDEX, nl.Uint32Attr(Attrs.PortIndex)))\n\t}\n\tif Attrs.ControllerValid {\n\t\treq.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_CONTROLLER_NUMBER, nl.Uint32Attr(Attrs.Controller)))\n\t}\n\trespmsg, err := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tport, err := parseDevlinkPortMsg(respmsg)\n\treturn port, err\n}\n\n// DevLinkPortAdd adds a devlink port and returns a port on success\n// otherwise returns nil port and an error code.\nfunc DevLinkPortAdd(Bus string, Device string, Flavour uint16, Attrs DevLinkPortAddAttrs) (*DevlinkPort, error) {\n\treturn pkgHandle.DevLinkPortAdd(Bus, Device, Flavour, Attrs)\n}\n\n// DevLinkPortDel deletes a devlink port and returns success or error code.\nfunc (h *Handle) DevLinkPortDel(Bus string, Device string, PortIndex uint32) error {\n\t_, req, err := h.createCmdReq(nl.DEVLINK_CMD_PORT_DEL, Bus, Device)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treq.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_INDEX, nl.Uint32Attr(PortIndex)))\n\t_, err = req.Execute(unix.NETLINK_GENERIC, 0)\n\treturn err\n}\n\n// DevLinkPortDel deletes a devlink port and returns success or error code.\nfunc DevLinkPortDel(Bus string, Device string, PortIndex uint32) error {\n\treturn pkgHandle.DevLinkPortDel(Bus, Device, PortIndex)\n}\n\n// DevlinkPortFnSet sets one or more port function attributes specified by the attribute mask.\n// It returns 0 on success or error code.\nfunc (h *Handle) DevlinkPortFnSet(Bus string, Device string, PortIndex uint32, FnAttrs DevlinkPortFnSetAttrs) error {\n\t_, req, err := h.createCmdReq(nl.DEVLINK_CMD_PORT_SET, Bus, Device)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treq.AddData(nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_INDEX, nl.Uint32Attr(PortIndex)))\n\n\tfnAttr := nl.NewRtAttr(nl.DEVLINK_ATTR_PORT_FUNCTION|unix.NLA_F_NESTED, nil)\n\n\tif FnAttrs.HwAddrValid {\n\t\tfnAttr.AddRtAttr(nl.DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR, []byte(FnAttrs.FnAttrs.HwAddr))\n\t}\n\n\tif FnAttrs.StateValid {\n\t\tfnAttr.AddRtAttr(nl.DEVLINK_PORT_FN_ATTR_STATE, nl.Uint8Attr(FnAttrs.FnAttrs.State))\n\t}\n\treq.AddData(fnAttr)\n\n\t_, err = req.Execute(unix.NETLINK_GENERIC, 0)\n\treturn err\n}\n\n// DevlinkPortFnSet sets one or more port function attributes specified by the attribute mask.\n// It returns 0 on success or error code.\nfunc DevlinkPortFnSet(Bus string, Device string, PortIndex uint32, FnAttrs DevlinkPortFnSetAttrs) error {\n\treturn pkgHandle.DevlinkPortFnSet(Bus, Device, PortIndex, FnAttrs)\n}\n\n// devlinkInfoGetter is function that is responsible for getting devlink info message\n// this is introduced for test purpose\ntype devlinkInfoGetter func(bus, device string) ([]byte, error)\n\n// DevlinkGetDeviceInfoByName returns devlink info for selected device,\n// otherwise returns an error code.\n// Equivalent to: `devlink dev info $dev`\nfunc (h *Handle) DevlinkGetDeviceInfoByName(Bus string, Device string, getInfoMsg devlinkInfoGetter) (*DevlinkDeviceInfo, error) {\n\tinfo, err := h.DevlinkGetDeviceInfoByNameAsMap(Bus, Device, getInfoMsg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn parseInfoData(info), nil\n}\n\n// DevlinkGetDeviceInfoByName returns devlink info for selected device,\n// otherwise returns an error code.\n// Equivalent to: `devlink dev info $dev`\nfunc DevlinkGetDeviceInfoByName(Bus string, Device string) (*DevlinkDeviceInfo, error) {\n\treturn pkgHandle.DevlinkGetDeviceInfoByName(Bus, Device, pkgHandle.getDevlinkInfoMsg)\n}\n\n// DevlinkGetDeviceInfoByNameAsMap returns devlink info for selected device as a map,\n// otherwise returns an error code.\n// Equivalent to: `devlink dev info $dev`\nfunc (h *Handle) DevlinkGetDeviceInfoByNameAsMap(Bus string, Device string, getInfoMsg devlinkInfoGetter) (map[string]string, error) {\n\tresponse, err := getInfoMsg(Bus, Device)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tinfo, err := parseInfoMsg(response)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn info, nil\n}\n\n// DevlinkGetDeviceInfoByNameAsMap returns devlink info for selected device as a map,\n// otherwise returns an error code.\n// Equivalent to: `devlink dev info $dev`\nfunc DevlinkGetDeviceInfoByNameAsMap(Bus string, Device string) (map[string]string, error) {\n\treturn pkgHandle.DevlinkGetDeviceInfoByNameAsMap(Bus, Device, pkgHandle.getDevlinkInfoMsg)\n}\n\n// GetDevlinkInfo returns devlink info for target device,\n// otherwise returns an error code.\nfunc (d *DevlinkDevice) GetDevlinkInfo() (*DevlinkDeviceInfo, error) {\n\treturn pkgHandle.DevlinkGetDeviceInfoByName(d.BusName, d.DeviceName, pkgHandle.getDevlinkInfoMsg)\n}\n\n// GetDevlinkInfoAsMap returns devlink info for target device as a map,\n// otherwise returns an error code.\nfunc (d *DevlinkDevice) GetDevlinkInfoAsMap() (map[string]string, error) {\n\treturn pkgHandle.DevlinkGetDeviceInfoByNameAsMap(d.BusName, d.DeviceName, pkgHandle.getDevlinkInfoMsg)\n}\n\nfunc (h *Handle) getDevlinkInfoMsg(bus, device string) ([]byte, error) {\n\t_, req, err := h.createCmdReq(nl.DEVLINK_CMD_INFO_GET, bus, device)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresponse, err := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(response) < 1 {\n\t\treturn nil, fmt.Errorf(\"getDevlinkInfoMsg: message too short\")\n\t}\n\n\treturn response[0], nil\n}\n\nfunc parseInfoMsg(msg []byte) (map[string]string, error) {\n\tif len(msg) < nl.SizeofGenlmsg {\n\t\treturn nil, fmt.Errorf(\"parseInfoMsg: message too short\")\n\t}\n\n\tinfo := make(map[string]string)\n\terr := collectInfoData(msg[nl.SizeofGenlmsg:], info)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn info, nil\n}\n\nfunc collectInfoData(msg []byte, data map[string]string) error {\n\tattrs, err := nl.ParseRouteAttr(msg)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, attr := range attrs {\n\t\tswitch attr.Attr.Type {\n\t\tcase nl.DEVLINK_ATTR_INFO_DRIVER_NAME:\n\t\t\tdata[\"driver\"] = parseInfoValue(attr.Value)\n\t\tcase nl.DEVLINK_ATTR_INFO_SERIAL_NUMBER:\n\t\t\tdata[\"serialNumber\"] = parseInfoValue(attr.Value)\n\t\tcase nl.DEVLINK_ATTR_INFO_VERSION_RUNNING, nl.DEVLINK_ATTR_INFO_VERSION_FIXED,\n\t\t\tnl.DEVLINK_ATTR_INFO_VERSION_STORED:\n\t\t\tkey, value, err := getNestedInfoData(attr.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tdata[key] = value\n\t\t}\n\t}\n\n\tif len(data) == 0 {\n\t\treturn fmt.Errorf(\"collectInfoData: could not read attributes\")\n\t}\n\n\treturn nil\n}\n\nfunc getNestedInfoData(msg []byte) (string, string, error) {\n\tnestedAttrs, err := nl.ParseRouteAttr(msg)\n\n\tvar key, value string\n\n\tif err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\n\tif len(nestedAttrs) != 2 {\n\t\treturn \"\", \"\", fmt.Errorf(\"getNestedInfoData: too few attributes in nested structure\")\n\t}\n\n\tfor _, nestedAttr := range nestedAttrs {\n\t\tswitch nestedAttr.Attr.Type {\n\t\tcase nl.DEVLINK_ATTR_INFO_VERSION_NAME:\n\t\t\tkey = parseInfoValue(nestedAttr.Value)\n\t\tcase nl.DEVLINK_ATTR_INFO_VERSION_VALUE:\n\t\t\tvalue = parseInfoValue(nestedAttr.Value)\n\t\t}\n\t}\n\n\tif key == \"\" {\n\t\treturn \"\", \"\", fmt.Errorf(\"getNestedInfoData: key not found\")\n\t}\n\n\tif value == \"\" {\n\t\treturn \"\", \"\", fmt.Errorf(\"getNestedInfoData: value not found\")\n\t}\n\n\treturn key, value, nil\n}\n\nfunc parseInfoData(data map[string]string) *DevlinkDeviceInfo {\n\tinfo := new(DevlinkDeviceInfo)\n\tfor key, value := range data {\n\t\tswitch key {\n\t\tcase \"driver\":\n\t\t\tinfo.Driver = value\n\t\tcase \"serialNumber\":\n\t\t\tinfo.SerialNumber = value\n\t\tcase \"board.id\":\n\t\t\tinfo.BoardID = value\n\t\tcase \"fw.app\":\n\t\t\tinfo.FwApp = value\n\t\tcase \"fw.app.bundle_id\":\n\t\t\tinfo.FwAppBoundleID = value\n\t\tcase \"fw.app.name\":\n\t\t\tinfo.FwAppName = value\n\t\tcase \"fw.bundle_id\":\n\t\t\tinfo.FwBoundleID = value\n\t\tcase \"fw.mgmt\":\n\t\t\tinfo.FwMgmt = value\n\t\tcase \"fw.mgmt.api\":\n\t\t\tinfo.FwMgmtAPI = value\n\t\tcase \"fw.mgmt.build\":\n\t\t\tinfo.FwMgmtBuild = value\n\t\tcase \"fw.netlist\":\n\t\t\tinfo.FwNetlist = value\n\t\tcase \"fw.netlist.build\":\n\t\t\tinfo.FwNetlistBuild = value\n\t\tcase \"fw.psid.api\":\n\t\t\tinfo.FwPsidAPI = value\n\t\tcase \"fw.undi\":\n\t\t\tinfo.FwUndi = value\n\t\t}\n\t}\n\treturn info\n}\n\nfunc parseInfoValue(value []byte) string {\n\tv := strings.ReplaceAll(string(value), \"\\x00\", \"\")\n\treturn strings.TrimSpace(v)\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/filter.go",
    "content": "package netlink\n\nimport (\n\t\"fmt\"\n\t\"net\"\n)\n\ntype Filter interface {\n\tAttrs() *FilterAttrs\n\tType() string\n}\n\n// FilterAttrs represents a netlink filter. A filter is associated with a link,\n// has a handle and a parent. The root filter of a device should have a\n// parent == HANDLE_ROOT.\ntype FilterAttrs struct {\n\tLinkIndex int\n\tHandle    uint32\n\tParent    uint32\n\tPriority  uint16 // lower is higher priority\n\tProtocol  uint16 // unix.ETH_P_*\n\tChain     *uint32\n}\n\nfunc (q FilterAttrs) String() string {\n\treturn fmt.Sprintf(\"{LinkIndex: %d, Handle: %s, Parent: %s, Priority: %d, Protocol: %d}\", q.LinkIndex, HandleStr(q.Handle), HandleStr(q.Parent), q.Priority, q.Protocol)\n}\n\ntype TcAct int32\n\nconst (\n\tTC_ACT_EXT_SHIFT    = 28\n\tTC_ACT_EXT_VAL_MASK = (1 << TC_ACT_EXT_SHIFT) - 1\n)\n\nconst (\n\tTC_ACT_UNSPEC     TcAct = -1\n\tTC_ACT_OK         TcAct = 0\n\tTC_ACT_RECLASSIFY TcAct = 1\n\tTC_ACT_SHOT       TcAct = 2\n\tTC_ACT_PIPE       TcAct = 3\n\tTC_ACT_STOLEN     TcAct = 4\n\tTC_ACT_QUEUED     TcAct = 5\n\tTC_ACT_REPEAT     TcAct = 6\n\tTC_ACT_REDIRECT   TcAct = 7\n\tTC_ACT_JUMP       TcAct = 0x10000000\n)\n\nfunc getTcActExt(local int32) int32 {\n\treturn local << TC_ACT_EXT_SHIFT\n}\n\nfunc getTcActGotoChain() TcAct {\n\treturn TcAct(getTcActExt(2))\n}\n\nfunc getTcActExtOpcode(combined int32) int32 {\n\treturn combined & (^TC_ACT_EXT_VAL_MASK)\n}\n\nfunc TcActExtCmp(combined int32, opcode int32) bool {\n\treturn getTcActExtOpcode(combined) == opcode\n}\n\nfunc (a TcAct) String() string {\n\tswitch a {\n\tcase TC_ACT_UNSPEC:\n\t\treturn \"unspec\"\n\tcase TC_ACT_OK:\n\t\treturn \"ok\"\n\tcase TC_ACT_RECLASSIFY:\n\t\treturn \"reclassify\"\n\tcase TC_ACT_SHOT:\n\t\treturn \"shot\"\n\tcase TC_ACT_PIPE:\n\t\treturn \"pipe\"\n\tcase TC_ACT_STOLEN:\n\t\treturn \"stolen\"\n\tcase TC_ACT_QUEUED:\n\t\treturn \"queued\"\n\tcase TC_ACT_REPEAT:\n\t\treturn \"repeat\"\n\tcase TC_ACT_REDIRECT:\n\t\treturn \"redirect\"\n\tcase TC_ACT_JUMP:\n\t\treturn \"jump\"\n\t}\n\tif TcActExtCmp(int32(a), int32(getTcActGotoChain())) {\n\t\treturn \"goto\"\n\t}\n\treturn fmt.Sprintf(\"0x%x\", int32(a))\n}\n\ntype TcPolAct int32\n\nconst (\n\tTC_POLICE_UNSPEC     TcPolAct = TcPolAct(TC_ACT_UNSPEC)\n\tTC_POLICE_OK         TcPolAct = TcPolAct(TC_ACT_OK)\n\tTC_POLICE_RECLASSIFY TcPolAct = TcPolAct(TC_ACT_RECLASSIFY)\n\tTC_POLICE_SHOT       TcPolAct = TcPolAct(TC_ACT_SHOT)\n\tTC_POLICE_PIPE       TcPolAct = TcPolAct(TC_ACT_PIPE)\n)\n\nfunc (a TcPolAct) String() string {\n\tswitch a {\n\tcase TC_POLICE_UNSPEC:\n\t\treturn \"unspec\"\n\tcase TC_POLICE_OK:\n\t\treturn \"ok\"\n\tcase TC_POLICE_RECLASSIFY:\n\t\treturn \"reclassify\"\n\tcase TC_POLICE_SHOT:\n\t\treturn \"shot\"\n\tcase TC_POLICE_PIPE:\n\t\treturn \"pipe\"\n\t}\n\treturn fmt.Sprintf(\"0x%x\", int32(a))\n}\n\ntype ActionAttrs struct {\n\tIndex      int\n\tCapab      int\n\tAction     TcAct\n\tRefcnt     int\n\tBindcnt    int\n\tStatistics *ActionStatistic\n\tTimestamp  *ActionTimestamp\n}\n\nfunc (q ActionAttrs) String() string {\n\treturn fmt.Sprintf(\"{Index: %d, Capab: %x, Action: %s, Refcnt: %d, Bindcnt: %d}\", q.Index, q.Capab, q.Action.String(), q.Refcnt, q.Bindcnt)\n}\n\ntype ActionTimestamp struct {\n\tInstalled uint64\n\tLastUsed  uint64\n\tExpires   uint64\n\tFirstUsed uint64\n}\n\nfunc (t ActionTimestamp) String() string {\n\treturn fmt.Sprintf(\"Installed %d LastUsed %d Expires %d FirstUsed %d\", t.Installed, t.LastUsed, t.Expires, t.FirstUsed)\n}\n\ntype ActionStatistic ClassStatistics\n\n// Action represents an action in any supported filter.\ntype Action interface {\n\tAttrs() *ActionAttrs\n\tType() string\n}\n\ntype GenericAction struct {\n\tActionAttrs\n\tChain int32\n}\n\nfunc (action *GenericAction) Type() string {\n\treturn \"generic\"\n}\n\nfunc (action *GenericAction) Attrs() *ActionAttrs {\n\treturn &action.ActionAttrs\n}\n\ntype BpfAction struct {\n\tActionAttrs\n\tFd   int\n\tName string\n}\n\nfunc (action *BpfAction) Type() string {\n\treturn \"bpf\"\n}\n\nfunc (action *BpfAction) Attrs() *ActionAttrs {\n\treturn &action.ActionAttrs\n}\n\ntype ConnmarkAction struct {\n\tActionAttrs\n\tZone uint16\n}\n\nfunc (action *ConnmarkAction) Type() string {\n\treturn \"connmark\"\n}\n\nfunc (action *ConnmarkAction) Attrs() *ActionAttrs {\n\treturn &action.ActionAttrs\n}\n\nfunc NewConnmarkAction() *ConnmarkAction {\n\treturn &ConnmarkAction{\n\t\tActionAttrs: ActionAttrs{\n\t\t\tAction: TC_ACT_PIPE,\n\t\t},\n\t}\n}\n\ntype CsumUpdateFlags uint32\n\nconst (\n\tTCA_CSUM_UPDATE_FLAG_IPV4HDR CsumUpdateFlags = 1\n\tTCA_CSUM_UPDATE_FLAG_ICMP    CsumUpdateFlags = 2\n\tTCA_CSUM_UPDATE_FLAG_IGMP    CsumUpdateFlags = 4\n\tTCA_CSUM_UPDATE_FLAG_TCP     CsumUpdateFlags = 8\n\tTCA_CSUM_UPDATE_FLAG_UDP     CsumUpdateFlags = 16\n\tTCA_CSUM_UPDATE_FLAG_UDPLITE CsumUpdateFlags = 32\n\tTCA_CSUM_UPDATE_FLAG_SCTP    CsumUpdateFlags = 64\n)\n\ntype CsumAction struct {\n\tActionAttrs\n\tUpdateFlags CsumUpdateFlags\n}\n\nfunc (action *CsumAction) Type() string {\n\treturn \"csum\"\n}\n\nfunc (action *CsumAction) Attrs() *ActionAttrs {\n\treturn &action.ActionAttrs\n}\n\nfunc NewCsumAction() *CsumAction {\n\treturn &CsumAction{\n\t\tActionAttrs: ActionAttrs{\n\t\t\tAction: TC_ACT_PIPE,\n\t\t},\n\t}\n}\n\ntype VlanAct int8\n\ntype VlanAction struct {\n\tActionAttrs\n\tAction VlanAct\n\tVlanID uint16\n}\n\nconst (\n\tTCA_VLAN_ACT_POP  VlanAct = 1\n\tTCA_VLAN_ACT_PUSH VlanAct = 2\n)\n\nfunc (action *VlanAction) Type() string {\n\treturn \"vlan\"\n}\n\nfunc (action *VlanAction) Attrs() *ActionAttrs {\n\treturn &action.ActionAttrs\n}\n\nfunc NewVlanAction() *VlanAction {\n\treturn &VlanAction{\n\t\tActionAttrs: ActionAttrs{\n\t\t\tAction: TC_ACT_PIPE,\n\t\t},\n\t}\n}\n\ntype MirredAct uint8\n\nfunc (a MirredAct) String() string {\n\tswitch a {\n\tcase TCA_EGRESS_REDIR:\n\t\treturn \"egress redir\"\n\tcase TCA_EGRESS_MIRROR:\n\t\treturn \"egress mirror\"\n\tcase TCA_INGRESS_REDIR:\n\t\treturn \"ingress redir\"\n\tcase TCA_INGRESS_MIRROR:\n\t\treturn \"ingress mirror\"\n\t}\n\treturn \"unknown\"\n}\n\nconst (\n\tTCA_EGRESS_REDIR   MirredAct = 1 /* packet redirect to EGRESS*/\n\tTCA_EGRESS_MIRROR  MirredAct = 2 /* mirror packet to EGRESS */\n\tTCA_INGRESS_REDIR  MirredAct = 3 /* packet redirect to INGRESS*/\n\tTCA_INGRESS_MIRROR MirredAct = 4 /* mirror packet to INGRESS */\n)\n\ntype MirredAction struct {\n\tActionAttrs\n\tMirredAction MirredAct\n\tIfindex      int\n}\n\nfunc (action *MirredAction) Type() string {\n\treturn \"mirred\"\n}\n\nfunc (action *MirredAction) Attrs() *ActionAttrs {\n\treturn &action.ActionAttrs\n}\n\nfunc NewMirredAction(redirIndex int) *MirredAction {\n\treturn &MirredAction{\n\t\tActionAttrs: ActionAttrs{\n\t\t\tAction: TC_ACT_STOLEN,\n\t\t},\n\t\tMirredAction: TCA_EGRESS_REDIR,\n\t\tIfindex:      redirIndex,\n\t}\n}\n\ntype TunnelKeyAct int8\n\nconst (\n\tTCA_TUNNEL_KEY_SET   TunnelKeyAct = 1 // set tunnel key\n\tTCA_TUNNEL_KEY_UNSET TunnelKeyAct = 2 // unset tunnel key\n)\n\ntype TunnelKeyAction struct {\n\tActionAttrs\n\tAction   TunnelKeyAct\n\tSrcAddr  net.IP\n\tDstAddr  net.IP\n\tKeyID    uint32\n\tDestPort uint16\n}\n\nfunc (action *TunnelKeyAction) Type() string {\n\treturn \"tunnel_key\"\n}\n\nfunc (action *TunnelKeyAction) Attrs() *ActionAttrs {\n\treturn &action.ActionAttrs\n}\n\nfunc NewTunnelKeyAction() *TunnelKeyAction {\n\treturn &TunnelKeyAction{\n\t\tActionAttrs: ActionAttrs{\n\t\t\tAction: TC_ACT_PIPE,\n\t\t},\n\t}\n}\n\ntype SkbEditAction struct {\n\tActionAttrs\n\tQueueMapping *uint16\n\tPType        *uint16\n\tPriority     *uint32\n\tMark         *uint32\n\tMask         *uint32\n}\n\nfunc (action *SkbEditAction) Type() string {\n\treturn \"skbedit\"\n}\n\nfunc (action *SkbEditAction) Attrs() *ActionAttrs {\n\treturn &action.ActionAttrs\n}\n\nfunc NewSkbEditAction() *SkbEditAction {\n\treturn &SkbEditAction{\n\t\tActionAttrs: ActionAttrs{\n\t\t\tAction: TC_ACT_PIPE,\n\t\t},\n\t}\n}\n\ntype PoliceAction struct {\n\tActionAttrs\n\tRate            uint32 // in byte per second\n\tBurst           uint32 // in byte\n\tRCellLog        int\n\tMtu             uint32\n\tMpu             uint16 // in byte\n\tPeakRate        uint32 // in byte per second\n\tPCellLog        int\n\tAvRate          uint32 // in byte per second\n\tOverhead        uint16\n\tLinkLayer       int\n\tExceedAction    TcPolAct\n\tNotExceedAction TcPolAct\n}\n\nfunc (action *PoliceAction) Type() string {\n\treturn \"police\"\n}\n\nfunc (action *PoliceAction) Attrs() *ActionAttrs {\n\treturn &action.ActionAttrs\n}\n\nfunc NewPoliceAction() *PoliceAction {\n\treturn &PoliceAction{\n\t\tRCellLog:        -1,\n\t\tPCellLog:        -1,\n\t\tLinkLayer:       1, // ETHERNET\n\t\tExceedAction:    TC_POLICE_RECLASSIFY,\n\t\tNotExceedAction: TC_POLICE_OK,\n\t}\n}\n\ntype SampleAction struct {\n\tActionAttrs\n\tGroup     uint32\n\tRate      uint32\n\tTruncSize uint32\n}\n\nfunc (action *SampleAction) Type() string {\n\treturn \"sample\"\n}\n\nfunc (action *SampleAction) Attrs() *ActionAttrs {\n\treturn &action.ActionAttrs\n}\n\nfunc NewSampleAction() *SampleAction {\n\treturn &SampleAction{\n\t\tActionAttrs: ActionAttrs{\n\t\t\tAction: TC_ACT_PIPE,\n\t\t},\n\t}\n}\n\n// MatchAll filters match all packets\ntype MatchAll struct {\n\tFilterAttrs\n\tClassId uint32\n\tActions []Action\n}\n\nfunc (filter *MatchAll) Attrs() *FilterAttrs {\n\treturn &filter.FilterAttrs\n}\n\nfunc (filter *MatchAll) Type() string {\n\treturn \"matchall\"\n}\n\ntype FwFilter struct {\n\tFilterAttrs\n\tClassId uint32\n\tInDev   string\n\tMask    uint32\n\tPolice  *PoliceAction\n\tActions []Action\n}\n\nfunc (filter *FwFilter) Attrs() *FilterAttrs {\n\treturn &filter.FilterAttrs\n}\n\nfunc (filter *FwFilter) Type() string {\n\treturn \"fw\"\n}\n\ntype BpfFilter struct {\n\tFilterAttrs\n\tClassId      uint32\n\tFd           int\n\tName         string\n\tDirectAction bool\n\tId           int\n\tTag          string\n}\n\nfunc (filter *BpfFilter) Type() string {\n\treturn \"bpf\"\n}\n\nfunc (filter *BpfFilter) Attrs() *FilterAttrs {\n\treturn &filter.FilterAttrs\n}\n\n// GenericFilter filters represent types that are not currently understood\n// by this netlink library.\ntype GenericFilter struct {\n\tFilterAttrs\n\tFilterType string\n}\n\nfunc (filter *GenericFilter) Attrs() *FilterAttrs {\n\treturn &filter.FilterAttrs\n}\n\nfunc (filter *GenericFilter) Type() string {\n\treturn filter.FilterType\n}\n\ntype PeditAction struct {\n\tActionAttrs\n\tProto      uint8\n\tSrcMacAddr net.HardwareAddr\n\tDstMacAddr net.HardwareAddr\n\tSrcIP      net.IP\n\tDstIP      net.IP\n\tSrcPort    uint16\n\tDstPort    uint16\n}\n\nfunc (p *PeditAction) Attrs() *ActionAttrs {\n\treturn &p.ActionAttrs\n}\n\nfunc (p *PeditAction) Type() string {\n\treturn \"pedit\"\n}\n\nfunc NewPeditAction() *PeditAction {\n\treturn &PeditAction{\n\t\tActionAttrs: ActionAttrs{\n\t\t\tAction: TC_ACT_PIPE,\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/filter_linux.go",
    "content": "package netlink\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"syscall\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// Constants used in TcU32Sel.Flags.\nconst (\n\tTC_U32_TERMINAL  = nl.TC_U32_TERMINAL\n\tTC_U32_OFFSET    = nl.TC_U32_OFFSET\n\tTC_U32_VAROFFSET = nl.TC_U32_VAROFFSET\n\tTC_U32_EAT       = nl.TC_U32_EAT\n)\n\n// Sel of the U32 filters that contains multiple TcU32Key. This is the type\n// alias and the frontend representation of nl.TcU32Sel. It is serialized into\n// canonical nl.TcU32Sel with the appropriate endianness.\ntype TcU32Sel = nl.TcU32Sel\n\n// TcU32Key contained of Sel in the U32 filters. This is the type alias and the\n// frontend representation of nl.TcU32Key. It is serialized into chanonical\n// nl.TcU32Sel with the appropriate endianness.\ntype TcU32Key = nl.TcU32Key\n\n// U32 filters on many packet related properties\ntype U32 struct {\n\tFilterAttrs\n\tClassId    uint32\n\tDivisor    uint32 // Divisor MUST be power of 2.\n\tHash       uint32\n\tLink       uint32\n\tRedirIndex int\n\tSel        *TcU32Sel\n\tActions    []Action\n\tPolice     *PoliceAction\n}\n\nfunc (filter *U32) Attrs() *FilterAttrs {\n\treturn &filter.FilterAttrs\n}\n\nfunc (filter *U32) Type() string {\n\treturn \"u32\"\n}\n\ntype Flower struct {\n\tFilterAttrs\n\tClassId         uint32\n\tDestIP          net.IP\n\tDestIPMask      net.IPMask\n\tSrcIP           net.IP\n\tSrcIPMask       net.IPMask\n\tEthType         uint16\n\tEncDestIP       net.IP\n\tEncDestIPMask   net.IPMask\n\tEncSrcIP        net.IP\n\tEncSrcIPMask    net.IPMask\n\tEncDestPort     uint16\n\tEncKeyId        uint32\n\tSrcMac          net.HardwareAddr\n\tDestMac         net.HardwareAddr\n\tVlanId          uint16\n\tSkipHw          bool\n\tSkipSw          bool\n\tIPProto         *nl.IPProto\n\tDestPort        uint16\n\tSrcPort         uint16\n\tSrcPortRangeMin uint16\n\tSrcPortRangeMax uint16\n\tDstPortRangeMin uint16\n\tDstPortRangeMax uint16\n\n\tActions []Action\n}\n\nfunc (filter *Flower) Attrs() *FilterAttrs {\n\treturn &filter.FilterAttrs\n}\n\nfunc (filter *Flower) Type() string {\n\treturn \"flower\"\n}\n\nfunc (filter *Flower) encodeIP(parent *nl.RtAttr, ip net.IP, mask net.IPMask, v4Type, v6Type int, v4MaskType, v6MaskType int) {\n\tipType := v4Type\n\tmaskType := v4MaskType\n\n\tencodeMask := mask\n\tif mask == nil {\n\t\tencodeMask = net.CIDRMask(32, 32)\n\t}\n\tv4IP := ip.To4()\n\tif v4IP == nil {\n\t\tipType = v6Type\n\t\tmaskType = v6MaskType\n\t\tif mask == nil {\n\t\t\tencodeMask = net.CIDRMask(128, 128)\n\t\t}\n\t} else {\n\t\tip = v4IP\n\t}\n\n\tparent.AddRtAttr(ipType, ip)\n\tparent.AddRtAttr(maskType, encodeMask)\n}\n\nfunc (filter *Flower) encode(parent *nl.RtAttr) error {\n\tif filter.EthType != 0 {\n\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_ETH_TYPE, htons(filter.EthType))\n\t}\n\tif filter.SrcIP != nil {\n\t\tfilter.encodeIP(parent, filter.SrcIP, filter.SrcIPMask,\n\t\t\tnl.TCA_FLOWER_KEY_IPV4_SRC, nl.TCA_FLOWER_KEY_IPV6_SRC,\n\t\t\tnl.TCA_FLOWER_KEY_IPV4_SRC_MASK, nl.TCA_FLOWER_KEY_IPV6_SRC_MASK)\n\t}\n\tif filter.DestIP != nil {\n\t\tfilter.encodeIP(parent, filter.DestIP, filter.DestIPMask,\n\t\t\tnl.TCA_FLOWER_KEY_IPV4_DST, nl.TCA_FLOWER_KEY_IPV6_DST,\n\t\t\tnl.TCA_FLOWER_KEY_IPV4_DST_MASK, nl.TCA_FLOWER_KEY_IPV6_DST_MASK)\n\t}\n\tif filter.EncSrcIP != nil {\n\t\tfilter.encodeIP(parent, filter.EncSrcIP, filter.EncSrcIPMask,\n\t\t\tnl.TCA_FLOWER_KEY_ENC_IPV4_SRC, nl.TCA_FLOWER_KEY_ENC_IPV6_SRC,\n\t\t\tnl.TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK, nl.TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK)\n\t}\n\tif filter.EncDestIP != nil {\n\t\tfilter.encodeIP(parent, filter.EncDestIP, filter.EncSrcIPMask,\n\t\t\tnl.TCA_FLOWER_KEY_ENC_IPV4_DST, nl.TCA_FLOWER_KEY_ENC_IPV6_DST,\n\t\t\tnl.TCA_FLOWER_KEY_ENC_IPV4_DST_MASK, nl.TCA_FLOWER_KEY_ENC_IPV6_DST_MASK)\n\t}\n\tif filter.EncDestPort != 0 {\n\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_ENC_UDP_DST_PORT, htons(filter.EncDestPort))\n\t}\n\tif filter.EncKeyId != 0 {\n\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_ENC_KEY_ID, htonl(filter.EncKeyId))\n\t}\n\tif filter.SrcMac != nil {\n\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_ETH_SRC, filter.SrcMac)\n\t}\n\tif filter.DestMac != nil {\n\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_ETH_DST, filter.DestMac)\n\t}\n\tif filter.VlanId != 0 {\n\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_VLAN_ID, nl.Uint16Attr(filter.VlanId))\n\t}\n\tif filter.IPProto != nil {\n\t\tipproto := *filter.IPProto\n\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_IP_PROTO, ipproto.Serialize())\n\t\tif filter.SrcPort != 0 {\n\t\t\tswitch ipproto {\n\t\t\tcase nl.IPPROTO_TCP:\n\t\t\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_TCP_SRC, htons(filter.SrcPort))\n\t\t\tcase nl.IPPROTO_UDP:\n\t\t\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_UDP_SRC, htons(filter.SrcPort))\n\t\t\tcase nl.IPPROTO_SCTP:\n\t\t\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_SCTP_SRC, htons(filter.SrcPort))\n\t\t\t}\n\t\t}\n\t\tif filter.DestPort != 0 {\n\t\t\tswitch ipproto {\n\t\t\tcase nl.IPPROTO_TCP:\n\t\t\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_TCP_DST, htons(filter.DestPort))\n\t\t\tcase nl.IPPROTO_UDP:\n\t\t\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_UDP_DST, htons(filter.DestPort))\n\t\t\tcase nl.IPPROTO_SCTP:\n\t\t\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_SCTP_DST, htons(filter.DestPort))\n\t\t\t}\n\t\t}\n\t}\n\tif filter.SrcPortRangeMin != 0 && filter.SrcPortRangeMax != 0 {\n\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_PORT_SRC_MIN, htons(filter.SrcPortRangeMin))\n\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_PORT_SRC_MAX, htons(filter.SrcPortRangeMax))\n\t}\n\n\tif filter.DstPortRangeMin != 0 && filter.DstPortRangeMax != 0 {\n\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_PORT_DST_MIN, htons(filter.DstPortRangeMin))\n\t\tparent.AddRtAttr(nl.TCA_FLOWER_KEY_PORT_DST_MAX, htons(filter.DstPortRangeMax))\n\t}\n\n\tif filter.ClassId != 0 {\n\t\tparent.AddRtAttr(nl.TCA_FLOWER_CLASSID, nl.Uint32Attr(filter.ClassId))\n\t}\n\n\tvar flags uint32 = 0\n\tif filter.SkipHw {\n\t\tflags |= nl.TCA_CLS_FLAGS_SKIP_HW\n\t}\n\tif filter.SkipSw {\n\t\tflags |= nl.TCA_CLS_FLAGS_SKIP_SW\n\t}\n\tparent.AddRtAttr(nl.TCA_FLOWER_FLAGS, htonl(flags))\n\n\tactionsAttr := parent.AddRtAttr(nl.TCA_FLOWER_ACT, nil)\n\tif err := EncodeActions(actionsAttr, filter.Actions); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (filter *Flower) decode(data []syscall.NetlinkRouteAttr) error {\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.TCA_FLOWER_KEY_ETH_TYPE:\n\t\t\tfilter.EthType = ntohs(datum.Value)\n\t\tcase nl.TCA_FLOWER_KEY_IPV4_SRC, nl.TCA_FLOWER_KEY_IPV6_SRC:\n\t\t\tfilter.SrcIP = datum.Value\n\t\tcase nl.TCA_FLOWER_KEY_IPV4_SRC_MASK, nl.TCA_FLOWER_KEY_IPV6_SRC_MASK:\n\t\t\tfilter.SrcIPMask = datum.Value\n\t\tcase nl.TCA_FLOWER_KEY_IPV4_DST, nl.TCA_FLOWER_KEY_IPV6_DST:\n\t\t\tfilter.DestIP = datum.Value\n\t\tcase nl.TCA_FLOWER_KEY_IPV4_DST_MASK, nl.TCA_FLOWER_KEY_IPV6_DST_MASK:\n\t\t\tfilter.DestIPMask = datum.Value\n\t\tcase nl.TCA_FLOWER_KEY_ENC_IPV4_SRC, nl.TCA_FLOWER_KEY_ENC_IPV6_SRC:\n\t\t\tfilter.EncSrcIP = datum.Value\n\t\tcase nl.TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK, nl.TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK:\n\t\t\tfilter.EncSrcIPMask = datum.Value\n\t\tcase nl.TCA_FLOWER_KEY_ENC_IPV4_DST, nl.TCA_FLOWER_KEY_ENC_IPV6_DST:\n\t\t\tfilter.EncDestIP = datum.Value\n\t\tcase nl.TCA_FLOWER_KEY_ENC_IPV4_DST_MASK, nl.TCA_FLOWER_KEY_ENC_IPV6_DST_MASK:\n\t\t\tfilter.EncDestIPMask = datum.Value\n\t\tcase nl.TCA_FLOWER_KEY_ENC_UDP_DST_PORT:\n\t\t\tfilter.EncDestPort = ntohs(datum.Value)\n\t\tcase nl.TCA_FLOWER_KEY_ENC_KEY_ID:\n\t\t\tfilter.EncKeyId = ntohl(datum.Value)\n\t\tcase nl.TCA_FLOWER_KEY_ETH_SRC:\n\t\t\tfilter.SrcMac = datum.Value\n\t\tcase nl.TCA_FLOWER_KEY_ETH_DST:\n\t\t\tfilter.DestMac = datum.Value\n\t\tcase nl.TCA_FLOWER_KEY_VLAN_ID:\n\t\t\tfilter.VlanId = native.Uint16(datum.Value[0:2])\n\t\t\tfilter.EthType = unix.ETH_P_8021Q\n\t\tcase nl.TCA_FLOWER_KEY_IP_PROTO:\n\t\t\tval := new(nl.IPProto)\n\t\t\t*val = nl.IPProto(datum.Value[0])\n\t\t\tfilter.IPProto = val\n\t\tcase nl.TCA_FLOWER_KEY_TCP_SRC, nl.TCA_FLOWER_KEY_UDP_SRC, nl.TCA_FLOWER_KEY_SCTP_SRC:\n\t\t\tfilter.SrcPort = ntohs(datum.Value)\n\t\tcase nl.TCA_FLOWER_KEY_TCP_DST, nl.TCA_FLOWER_KEY_UDP_DST, nl.TCA_FLOWER_KEY_SCTP_DST:\n\t\t\tfilter.DestPort = ntohs(datum.Value)\n\t\tcase nl.TCA_FLOWER_ACT:\n\t\t\ttables, err := nl.ParseRouteAttr(datum.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tfilter.Actions, err = parseActions(tables)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase nl.TCA_FLOWER_FLAGS:\n\t\t\tattr := nl.DeserializeUint32Bitfield(datum.Value)\n\t\t\tskipSw := attr.Value & nl.TCA_CLS_FLAGS_SKIP_HW\n\t\t\tskipHw := attr.Value & nl.TCA_CLS_FLAGS_SKIP_SW\n\t\t\tif skipSw != 0 {\n\t\t\t\tfilter.SkipSw = true\n\t\t\t}\n\t\t\tif skipHw != 0 {\n\t\t\t\tfilter.SkipHw = true\n\t\t\t}\n\t\tcase nl.TCA_FLOWER_KEY_PORT_SRC_MIN:\n\t\t\tfilter.SrcPortRangeMin = ntohs(datum.Value)\n\t\tcase nl.TCA_FLOWER_KEY_PORT_SRC_MAX:\n\t\t\tfilter.SrcPortRangeMax = ntohs(datum.Value)\n\t\tcase nl.TCA_FLOWER_KEY_PORT_DST_MIN:\n\t\t\tfilter.DstPortRangeMin = ntohs(datum.Value)\n\t\tcase nl.TCA_FLOWER_KEY_PORT_DST_MAX:\n\t\t\tfilter.DstPortRangeMax = ntohs(datum.Value)\n\t\tcase nl.TCA_FLOWER_CLASSID:\n\t\t\tfilter.ClassId = native.Uint32(datum.Value)\n\t\t}\n\t}\n\treturn nil\n}\n\n// FilterDel will delete a filter from the system.\n// Equivalent to: `tc filter del $filter`\nfunc FilterDel(filter Filter) error {\n\treturn pkgHandle.FilterDel(filter)\n}\n\n// FilterDel will delete a filter from the system.\n// Equivalent to: `tc filter del $filter`\nfunc (h *Handle) FilterDel(filter Filter) error {\n\treturn h.filterModify(filter, unix.RTM_DELTFILTER, 0)\n}\n\n// FilterAdd will add a filter to the system.\n// Equivalent to: `tc filter add $filter`\nfunc FilterAdd(filter Filter) error {\n\treturn pkgHandle.FilterAdd(filter)\n}\n\n// FilterAdd will add a filter to the system.\n// Equivalent to: `tc filter add $filter`\nfunc (h *Handle) FilterAdd(filter Filter) error {\n\treturn h.filterModify(filter, unix.RTM_NEWTFILTER, unix.NLM_F_CREATE|unix.NLM_F_EXCL)\n}\n\n// FilterReplace will replace a filter.\n// Equivalent to: `tc filter replace $filter`\nfunc FilterReplace(filter Filter) error {\n\treturn pkgHandle.FilterReplace(filter)\n}\n\n// FilterReplace will replace a filter.\n// Equivalent to: `tc filter replace $filter`\nfunc (h *Handle) FilterReplace(filter Filter) error {\n\treturn h.filterModify(filter, unix.RTM_NEWTFILTER, unix.NLM_F_CREATE)\n}\n\nfunc (h *Handle) filterModify(filter Filter, proto, flags int) error {\n\treq := h.newNetlinkRequest(proto, flags|unix.NLM_F_ACK)\n\tbase := filter.Attrs()\n\tmsg := &nl.TcMsg{\n\t\tFamily:  nl.FAMILY_ALL,\n\t\tIfindex: int32(base.LinkIndex),\n\t\tHandle:  base.Handle,\n\t\tParent:  base.Parent,\n\t\tInfo:    MakeHandle(base.Priority, nl.Swap16(base.Protocol)),\n\t}\n\treq.AddData(msg)\n\tif filter.Attrs().Chain != nil {\n\t\treq.AddData(nl.NewRtAttr(nl.TCA_CHAIN, nl.Uint32Attr(*filter.Attrs().Chain)))\n\t}\n\treq.AddData(nl.NewRtAttr(nl.TCA_KIND, nl.ZeroTerminated(filter.Type())))\n\n\toptions := nl.NewRtAttr(nl.TCA_OPTIONS, nil)\n\n\tswitch filter := filter.(type) {\n\tcase *U32:\n\t\tsel := filter.Sel\n\t\tif sel == nil {\n\t\t\t// match all\n\t\t\tsel = &nl.TcU32Sel{\n\t\t\t\tNkeys: 1,\n\t\t\t\tFlags: nl.TC_U32_TERMINAL,\n\t\t\t}\n\t\t\tsel.Keys = append(sel.Keys, nl.TcU32Key{})\n\t\t}\n\n\t\tif native != networkOrder {\n\t\t\t// Copy TcU32Sel.\n\t\t\tcSel := *sel\n\t\t\tkeys := make([]nl.TcU32Key, cap(sel.Keys))\n\t\t\tcopy(keys, sel.Keys)\n\t\t\tcSel.Keys = keys\n\t\t\tsel = &cSel\n\n\t\t\t// Handle the endianness of attributes\n\t\t\tsel.Offmask = native.Uint16(htons(sel.Offmask))\n\t\t\tsel.Hmask = native.Uint32(htonl(sel.Hmask))\n\t\t\tfor i, key := range sel.Keys {\n\t\t\t\tsel.Keys[i].Mask = native.Uint32(htonl(key.Mask))\n\t\t\t\tsel.Keys[i].Val = native.Uint32(htonl(key.Val))\n\t\t\t}\n\t\t}\n\t\tsel.Nkeys = uint8(len(sel.Keys))\n\t\toptions.AddRtAttr(nl.TCA_U32_SEL, sel.Serialize())\n\t\tif filter.ClassId != 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_U32_CLASSID, nl.Uint32Attr(filter.ClassId))\n\t\t}\n\t\tif filter.Divisor != 0 {\n\t\t\tif (filter.Divisor-1)&filter.Divisor != 0 {\n\t\t\t\treturn fmt.Errorf(\"illegal divisor %d. Must be a power of 2\", filter.Divisor)\n\t\t\t}\n\t\t\toptions.AddRtAttr(nl.TCA_U32_DIVISOR, nl.Uint32Attr(filter.Divisor))\n\t\t}\n\t\tif filter.Hash != 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_U32_HASH, nl.Uint32Attr(filter.Hash))\n\t\t}\n\t\tif filter.Link != 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_U32_LINK, nl.Uint32Attr(filter.Link))\n\t\t}\n\t\tif filter.Police != nil {\n\t\t\tpolice := options.AddRtAttr(nl.TCA_U32_POLICE, nil)\n\t\t\tif err := encodePolice(police, filter.Police); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tactionsAttr := options.AddRtAttr(nl.TCA_U32_ACT, nil)\n\t\t// backwards compatibility\n\t\tif filter.RedirIndex != 0 {\n\t\t\tfilter.Actions = append([]Action{NewMirredAction(filter.RedirIndex)}, filter.Actions...)\n\t\t}\n\t\tif err := EncodeActions(actionsAttr, filter.Actions); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase *FwFilter:\n\t\tif filter.Mask != 0 {\n\t\t\tb := make([]byte, 4)\n\t\t\tnative.PutUint32(b, filter.Mask)\n\t\t\toptions.AddRtAttr(nl.TCA_FW_MASK, b)\n\t\t}\n\t\tif filter.InDev != \"\" {\n\t\t\toptions.AddRtAttr(nl.TCA_FW_INDEV, nl.ZeroTerminated(filter.InDev))\n\t\t}\n\t\tif filter.Police != nil {\n\t\t\tpolice := options.AddRtAttr(nl.TCA_FW_POLICE, nil)\n\t\t\tif err := encodePolice(police, filter.Police); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tif filter.ClassId != 0 {\n\t\t\tb := make([]byte, 4)\n\t\t\tnative.PutUint32(b, filter.ClassId)\n\t\t\toptions.AddRtAttr(nl.TCA_FW_CLASSID, b)\n\t\t}\n\t\tactionsAttr := options.AddRtAttr(nl.TCA_FW_ACT, nil)\n\t\tif err := EncodeActions(actionsAttr, filter.Actions); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase *BpfFilter:\n\t\tvar bpfFlags uint32\n\t\tif filter.ClassId != 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_BPF_CLASSID, nl.Uint32Attr(filter.ClassId))\n\t\t}\n\t\tif filter.Fd >= 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_BPF_FD, nl.Uint32Attr((uint32(filter.Fd))))\n\t\t}\n\t\tif filter.Name != \"\" {\n\t\t\toptions.AddRtAttr(nl.TCA_BPF_NAME, nl.ZeroTerminated(filter.Name))\n\t\t}\n\t\tif filter.DirectAction {\n\t\t\tbpfFlags |= nl.TCA_BPF_FLAG_ACT_DIRECT\n\t\t}\n\t\toptions.AddRtAttr(nl.TCA_BPF_FLAGS, nl.Uint32Attr(bpfFlags))\n\tcase *MatchAll:\n\t\tactionsAttr := options.AddRtAttr(nl.TCA_MATCHALL_ACT, nil)\n\t\tif err := EncodeActions(actionsAttr, filter.Actions); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif filter.ClassId != 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_MATCHALL_CLASSID, nl.Uint32Attr(filter.ClassId))\n\t\t}\n\tcase *Flower:\n\t\tif err := filter.encode(options); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treq.AddData(options)\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// FilterList gets a list of filters in the system.\n// Equivalent to: `tc filter show`.\n//\n// Generally returns nothing if link and parent are not specified.\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc FilterList(link Link, parent uint32) ([]Filter, error) {\n\treturn pkgHandle.FilterList(link, parent)\n}\n\n// FilterList gets a list of filters in the system.\n// Equivalent to: `tc filter show`.\n//\n// Generally returns nothing if link and parent are not specified.\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) FilterList(link Link, parent uint32) ([]Filter, error) {\n\treq := h.newNetlinkRequest(unix.RTM_GETTFILTER, unix.NLM_F_DUMP)\n\tmsg := &nl.TcMsg{\n\t\tFamily: nl.FAMILY_ALL,\n\t\tParent: parent,\n\t}\n\tif link != nil {\n\t\tbase := link.Attrs()\n\t\th.ensureIndex(base)\n\t\tmsg.Ifindex = int32(base.Index)\n\t}\n\treq.AddData(msg)\n\n\tmsgs, executeErr := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWTFILTER)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\tvar res []Filter\n\tfor _, m := range msgs {\n\t\tmsg := nl.DeserializeTcMsg(m)\n\n\t\tattrs, err := nl.ParseRouteAttr(m[msg.Len():])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tbase := FilterAttrs{\n\t\t\tLinkIndex: int(msg.Ifindex),\n\t\t\tHandle:    msg.Handle,\n\t\t\tParent:    msg.Parent,\n\t\t}\n\t\tbase.Priority, base.Protocol = MajorMinor(msg.Info)\n\t\tbase.Protocol = nl.Swap16(base.Protocol)\n\n\t\tvar filter Filter\n\t\tfilterType := \"\"\n\t\tdetailed := false\n\t\tfor _, attr := range attrs {\n\t\t\tswitch attr.Attr.Type {\n\t\t\tcase nl.TCA_KIND:\n\t\t\t\tfilterType = string(attr.Value[:len(attr.Value)-1])\n\t\t\t\tswitch filterType {\n\t\t\t\tcase \"u32\":\n\t\t\t\t\tfilter = &U32{}\n\t\t\t\tcase \"fw\":\n\t\t\t\t\tfilter = &FwFilter{}\n\t\t\t\tcase \"bpf\":\n\t\t\t\t\tfilter = &BpfFilter{}\n\t\t\t\tcase \"matchall\":\n\t\t\t\t\tfilter = &MatchAll{}\n\t\t\t\tcase \"flower\":\n\t\t\t\t\tfilter = &Flower{}\n\t\t\t\tdefault:\n\t\t\t\t\tfilter = &GenericFilter{FilterType: filterType}\n\t\t\t\t}\n\t\t\tcase nl.TCA_OPTIONS:\n\t\t\t\tdata, err := nl.ParseRouteAttr(attr.Value)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tswitch filterType {\n\t\t\t\tcase \"u32\":\n\t\t\t\t\tdetailed, err = parseU32Data(filter, data)\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\tcase \"fw\":\n\t\t\t\t\tdetailed, err = parseFwData(filter, data)\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\tcase \"bpf\":\n\t\t\t\t\tdetailed, err = parseBpfData(filter, data)\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\tcase \"matchall\":\n\t\t\t\t\tdetailed, err = parseMatchAllData(filter, data)\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\tcase \"flower\":\n\t\t\t\t\tdetailed, err = parseFlowerData(filter, data)\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\tdefault:\n\t\t\t\t\tdetailed = true\n\t\t\t\t}\n\t\t\tcase nl.TCA_CHAIN:\n\t\t\t\tval := new(uint32)\n\t\t\t\t*val = native.Uint32(attr.Value)\n\t\t\t\tbase.Chain = val\n\t\t\t}\n\t\t}\n\t\t// only return the detailed version of the filter\n\t\tif detailed {\n\t\t\t*filter.Attrs() = base\n\t\t\tres = append(res, filter)\n\t\t}\n\t}\n\n\treturn res, executeErr\n}\n\nfunc toTcGen(attrs *ActionAttrs, tcgen *nl.TcGen) {\n\ttcgen.Index = uint32(attrs.Index)\n\ttcgen.Capab = uint32(attrs.Capab)\n\ttcgen.Action = int32(attrs.Action)\n\ttcgen.Refcnt = int32(attrs.Refcnt)\n\ttcgen.Bindcnt = int32(attrs.Bindcnt)\n}\n\nfunc toAttrs(tcgen *nl.TcGen, attrs *ActionAttrs) {\n\tattrs.Index = int(tcgen.Index)\n\tattrs.Capab = int(tcgen.Capab)\n\tattrs.Action = TcAct(tcgen.Action)\n\tattrs.Refcnt = int(tcgen.Refcnt)\n\tattrs.Bindcnt = int(tcgen.Bindcnt)\n}\n\nfunc toTimeStamp(tcf *nl.Tcf) *ActionTimestamp {\n\treturn &ActionTimestamp{\n\t\tInstalled: tcf.Install,\n\t\tLastUsed:  tcf.LastUse,\n\t\tExpires:   tcf.Expires,\n\t\tFirstUsed: tcf.FirstUse}\n}\n\nfunc encodePolice(attr *nl.RtAttr, action *PoliceAction) error {\n\tvar rtab [256]uint32\n\tvar ptab [256]uint32\n\tpolice := nl.TcPolice{}\n\tpolice.Index = uint32(action.Attrs().Index)\n\tpolice.Bindcnt = int32(action.Attrs().Bindcnt)\n\tpolice.Capab = uint32(action.Attrs().Capab)\n\tpolice.Refcnt = int32(action.Attrs().Refcnt)\n\tpolice.Rate.Rate = action.Rate\n\tpolice.PeakRate.Rate = action.PeakRate\n\tpolice.Action = int32(action.ExceedAction)\n\n\tif police.Rate.Rate != 0 {\n\t\tpolice.Rate.Mpu = action.Mpu\n\t\tpolice.Rate.Overhead = action.Overhead\n\t\tif CalcRtable(&police.Rate, rtab[:], action.RCellLog, action.Mtu, action.LinkLayer) < 0 {\n\t\t\treturn errors.New(\"TBF: failed to calculate rate table\")\n\t\t}\n\t\tpolice.Burst = Xmittime(uint64(police.Rate.Rate), action.Burst)\n\t}\n\n\tpolice.Mtu = action.Mtu\n\tif police.PeakRate.Rate != 0 {\n\t\tpolice.PeakRate.Mpu = action.Mpu\n\t\tpolice.PeakRate.Overhead = action.Overhead\n\t\tif CalcRtable(&police.PeakRate, ptab[:], action.PCellLog, action.Mtu, action.LinkLayer) < 0 {\n\t\t\treturn errors.New(\"POLICE: failed to calculate peak rate table\")\n\t\t}\n\t}\n\n\tattr.AddRtAttr(nl.TCA_POLICE_TBF, police.Serialize())\n\tif police.Rate.Rate != 0 {\n\t\tattr.AddRtAttr(nl.TCA_POLICE_RATE, SerializeRtab(rtab))\n\t}\n\tif police.PeakRate.Rate != 0 {\n\t\tattr.AddRtAttr(nl.TCA_POLICE_PEAKRATE, SerializeRtab(ptab))\n\t}\n\tif action.AvRate != 0 {\n\t\tattr.AddRtAttr(nl.TCA_POLICE_AVRATE, nl.Uint32Attr(action.AvRate))\n\t}\n\tif action.NotExceedAction != 0 {\n\t\tattr.AddRtAttr(nl.TCA_POLICE_RESULT, nl.Uint32Attr(uint32(action.NotExceedAction)))\n\t}\n\n\treturn nil\n}\n\nfunc EncodeActions(attr *nl.RtAttr, actions []Action) error {\n\ttabIndex := int(nl.TCA_ACT_TAB)\n\n\tfor _, action := range actions {\n\t\tswitch action := action.(type) {\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unknown action type %s\", action.Type())\n\t\tcase *PoliceAction:\n\t\t\ttable := attr.AddRtAttr(tabIndex, nil)\n\t\t\ttabIndex++\n\t\t\ttable.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated(\"police\"))\n\t\t\taopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)\n\t\t\tif err := encodePolice(aopts, action); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase *MirredAction:\n\t\t\ttable := attr.AddRtAttr(tabIndex, nil)\n\t\t\ttabIndex++\n\t\t\ttable.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated(\"mirred\"))\n\t\t\taopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)\n\t\t\tmirred := nl.TcMirred{\n\t\t\t\tEaction: int32(action.MirredAction),\n\t\t\t\tIfindex: uint32(action.Ifindex),\n\t\t\t}\n\t\t\ttoTcGen(action.Attrs(), &mirred.TcGen)\n\t\t\taopts.AddRtAttr(nl.TCA_MIRRED_PARMS, mirred.Serialize())\n\t\tcase *VlanAction:\n\t\t\ttable := attr.AddRtAttr(tabIndex, nil)\n\t\t\ttabIndex++\n\t\t\ttable.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated(\"vlan\"))\n\t\t\taopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)\n\t\t\tvlan := nl.TcVlan{\n\t\t\t\tAction: int32(action.Action),\n\t\t\t}\n\t\t\ttoTcGen(action.Attrs(), &vlan.TcGen)\n\t\t\taopts.AddRtAttr(nl.TCA_VLAN_PARMS, vlan.Serialize())\n\t\t\tif action.Action == TCA_VLAN_ACT_PUSH && action.VlanID == 0 {\n\t\t\t\treturn fmt.Errorf(\"vlan id is required for push action\")\n\t\t\t}\n\t\t\tif action.VlanID != 0 {\n\t\t\t\taopts.AddRtAttr(nl.TCA_VLAN_PUSH_VLAN_ID, nl.Uint16Attr(action.VlanID))\n\t\t\t}\n\t\tcase *TunnelKeyAction:\n\t\t\ttable := attr.AddRtAttr(tabIndex, nil)\n\t\t\ttabIndex++\n\t\t\ttable.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated(\"tunnel_key\"))\n\t\t\taopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)\n\t\t\ttun := nl.TcTunnelKey{\n\t\t\t\tAction: int32(action.Action),\n\t\t\t}\n\t\t\ttoTcGen(action.Attrs(), &tun.TcGen)\n\t\t\taopts.AddRtAttr(nl.TCA_TUNNEL_KEY_PARMS, tun.Serialize())\n\t\t\tif action.Action == TCA_TUNNEL_KEY_SET {\n\t\t\t\taopts.AddRtAttr(nl.TCA_TUNNEL_KEY_ENC_KEY_ID, htonl(action.KeyID))\n\t\t\t\tif v4 := action.SrcAddr.To4(); v4 != nil {\n\t\t\t\t\taopts.AddRtAttr(nl.TCA_TUNNEL_KEY_ENC_IPV4_SRC, v4[:])\n\t\t\t\t} else if v6 := action.SrcAddr.To16(); v6 != nil {\n\t\t\t\t\taopts.AddRtAttr(nl.TCA_TUNNEL_KEY_ENC_IPV6_SRC, v6[:])\n\t\t\t\t} else {\n\t\t\t\t\treturn fmt.Errorf(\"invalid src addr %s for tunnel_key action\", action.SrcAddr)\n\t\t\t\t}\n\t\t\t\tif v4 := action.DstAddr.To4(); v4 != nil {\n\t\t\t\t\taopts.AddRtAttr(nl.TCA_TUNNEL_KEY_ENC_IPV4_DST, v4[:])\n\t\t\t\t} else if v6 := action.DstAddr.To16(); v6 != nil {\n\t\t\t\t\taopts.AddRtAttr(nl.TCA_TUNNEL_KEY_ENC_IPV6_DST, v6[:])\n\t\t\t\t} else {\n\t\t\t\t\treturn fmt.Errorf(\"invalid dst addr %s for tunnel_key action\", action.DstAddr)\n\t\t\t\t}\n\t\t\t\tif action.DestPort != 0 {\n\t\t\t\t\taopts.AddRtAttr(nl.TCA_TUNNEL_KEY_ENC_DST_PORT, htons(action.DestPort))\n\t\t\t\t}\n\t\t\t}\n\t\tcase *SkbEditAction:\n\t\t\ttable := attr.AddRtAttr(tabIndex, nil)\n\t\t\ttabIndex++\n\t\t\ttable.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated(\"skbedit\"))\n\t\t\taopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)\n\t\t\tskbedit := nl.TcSkbEdit{}\n\t\t\ttoTcGen(action.Attrs(), &skbedit.TcGen)\n\t\t\taopts.AddRtAttr(nl.TCA_SKBEDIT_PARMS, skbedit.Serialize())\n\t\t\tif action.QueueMapping != nil {\n\t\t\t\taopts.AddRtAttr(nl.TCA_SKBEDIT_QUEUE_MAPPING, nl.Uint16Attr(*action.QueueMapping))\n\t\t\t}\n\t\t\tif action.Priority != nil {\n\t\t\t\taopts.AddRtAttr(nl.TCA_SKBEDIT_PRIORITY, nl.Uint32Attr(*action.Priority))\n\t\t\t}\n\t\t\tif action.PType != nil {\n\t\t\t\taopts.AddRtAttr(nl.TCA_SKBEDIT_PTYPE, nl.Uint16Attr(*action.PType))\n\t\t\t}\n\t\t\tif action.Mark != nil {\n\t\t\t\taopts.AddRtAttr(nl.TCA_SKBEDIT_MARK, nl.Uint32Attr(*action.Mark))\n\t\t\t}\n\t\t\tif action.Mask != nil {\n\t\t\t\taopts.AddRtAttr(nl.TCA_SKBEDIT_MASK, nl.Uint32Attr(*action.Mask))\n\t\t\t}\n\t\tcase *ConnmarkAction:\n\t\t\ttable := attr.AddRtAttr(tabIndex, nil)\n\t\t\ttabIndex++\n\t\t\ttable.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated(\"connmark\"))\n\t\t\taopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)\n\t\t\tconnmark := nl.TcConnmark{\n\t\t\t\tZone: action.Zone,\n\t\t\t}\n\t\t\ttoTcGen(action.Attrs(), &connmark.TcGen)\n\t\t\taopts.AddRtAttr(nl.TCA_CONNMARK_PARMS, connmark.Serialize())\n\t\tcase *CsumAction:\n\t\t\ttable := attr.AddRtAttr(tabIndex, nil)\n\t\t\ttabIndex++\n\t\t\ttable.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated(\"csum\"))\n\t\t\taopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)\n\t\t\tcsum := nl.TcCsum{\n\t\t\t\tUpdateFlags: uint32(action.UpdateFlags),\n\t\t\t}\n\t\t\ttoTcGen(action.Attrs(), &csum.TcGen)\n\t\t\taopts.AddRtAttr(nl.TCA_CSUM_PARMS, csum.Serialize())\n\t\tcase *BpfAction:\n\t\t\ttable := attr.AddRtAttr(tabIndex, nil)\n\t\t\ttabIndex++\n\t\t\ttable.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated(\"bpf\"))\n\t\t\taopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)\n\t\t\tgen := nl.TcGen{}\n\t\t\ttoTcGen(action.Attrs(), &gen)\n\t\t\taopts.AddRtAttr(nl.TCA_ACT_BPF_PARMS, gen.Serialize())\n\t\t\taopts.AddRtAttr(nl.TCA_ACT_BPF_FD, nl.Uint32Attr(uint32(action.Fd)))\n\t\t\taopts.AddRtAttr(nl.TCA_ACT_BPF_NAME, nl.ZeroTerminated(action.Name))\n\t\tcase *SampleAction:\n\t\t\ttable := attr.AddRtAttr(tabIndex, nil)\n\t\t\ttabIndex++\n\t\t\ttable.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated(\"sample\"))\n\t\t\taopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)\n\t\t\tgen := nl.TcGen{}\n\t\t\ttoTcGen(action.Attrs(), &gen)\n\t\t\taopts.AddRtAttr(nl.TCA_ACT_SAMPLE_PARMS, gen.Serialize())\n\t\t\taopts.AddRtAttr(nl.TCA_ACT_SAMPLE_RATE, nl.Uint32Attr(action.Rate))\n\t\t\taopts.AddRtAttr(nl.TCA_ACT_SAMPLE_PSAMPLE_GROUP, nl.Uint32Attr(action.Group))\n\t\t\taopts.AddRtAttr(nl.TCA_ACT_SAMPLE_TRUNC_SIZE, nl.Uint32Attr(action.TruncSize))\n\t\tcase *GenericAction:\n\t\t\ttable := attr.AddRtAttr(tabIndex, nil)\n\t\t\ttabIndex++\n\t\t\ttable.AddRtAttr(nl.TCA_ACT_KIND, nl.ZeroTerminated(\"gact\"))\n\t\t\taopts := table.AddRtAttr(nl.TCA_ACT_OPTIONS, nil)\n\t\t\tgen := nl.TcGen{}\n\t\t\ttoTcGen(action.Attrs(), &gen)\n\t\t\taopts.AddRtAttr(nl.TCA_GACT_PARMS, gen.Serialize())\n\t\tcase *PeditAction:\n\t\t\ttable := attr.AddRtAttr(tabIndex, nil)\n\t\t\ttabIndex++\n\t\t\tpedit := nl.TcPedit{}\n\t\t\ttoTcGen(action.Attrs(), &pedit.Sel.TcGen)\n\t\t\tif action.SrcMacAddr != nil {\n\t\t\t\tpedit.SetEthSrc(action.SrcMacAddr)\n\t\t\t}\n\t\t\tif action.DstMacAddr != nil {\n\t\t\t\tpedit.SetEthDst(action.DstMacAddr)\n\t\t\t}\n\t\t\tif action.SrcIP != nil {\n\t\t\t\tpedit.SetSrcIP(action.SrcIP)\n\t\t\t}\n\t\t\tif action.DstIP != nil {\n\t\t\t\tpedit.SetDstIP(action.DstIP)\n\t\t\t}\n\t\t\tif action.SrcPort != 0 {\n\t\t\t\tpedit.SetSrcPort(action.SrcPort, action.Proto)\n\t\t\t}\n\t\t\tif action.DstPort != 0 {\n\t\t\t\tpedit.SetDstPort(action.DstPort, action.Proto)\n\t\t\t}\n\t\t\tpedit.Encode(table)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc parsePolice(data syscall.NetlinkRouteAttr, police *PoliceAction) {\n\tswitch data.Attr.Type {\n\tcase nl.TCA_POLICE_RESULT:\n\t\tpolice.NotExceedAction = TcPolAct(native.Uint32(data.Value[0:4]))\n\tcase nl.TCA_POLICE_AVRATE:\n\t\tpolice.AvRate = native.Uint32(data.Value[0:4])\n\tcase nl.TCA_POLICE_TBF:\n\t\tp := *nl.DeserializeTcPolice(data.Value)\n\t\tpolice.ActionAttrs = ActionAttrs{}\n\t\tpolice.Attrs().Index = int(p.Index)\n\t\tpolice.Attrs().Bindcnt = int(p.Bindcnt)\n\t\tpolice.Attrs().Capab = int(p.Capab)\n\t\tpolice.Attrs().Refcnt = int(p.Refcnt)\n\t\tpolice.ExceedAction = TcPolAct(p.Action)\n\t\tpolice.Rate = p.Rate.Rate\n\t\tpolice.PeakRate = p.PeakRate.Rate\n\t\tpolice.Burst = Xmitsize(uint64(p.Rate.Rate), p.Burst)\n\t\tpolice.Mtu = p.Mtu\n\t\tpolice.LinkLayer = int(p.Rate.Linklayer) & nl.TC_LINKLAYER_MASK\n\t\tpolice.Overhead = p.Rate.Overhead\n\t}\n}\n\nfunc parseActions(tables []syscall.NetlinkRouteAttr) ([]Action, error) {\n\tvar actions []Action\n\tfor _, table := range tables {\n\t\tvar action Action\n\t\tvar actionType string\n\t\tvar actionnStatistic *ActionStatistic\n\t\tvar actionTimestamp *ActionTimestamp\n\t\taattrs, err := nl.ParseRouteAttr(table.Value)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tnextattr:\n\t\tfor _, aattr := range aattrs {\n\t\t\tswitch aattr.Attr.Type {\n\t\t\tcase nl.TCA_KIND:\n\t\t\t\tactionType = string(aattr.Value[:len(aattr.Value)-1])\n\t\t\t\t// only parse if the action is mirred or bpf\n\t\t\t\tswitch actionType {\n\t\t\t\tcase \"mirred\":\n\t\t\t\t\taction = &MirredAction{}\n\t\t\t\tcase \"bpf\":\n\t\t\t\t\taction = &BpfAction{}\n\t\t\t\tcase \"connmark\":\n\t\t\t\t\taction = &ConnmarkAction{}\n\t\t\t\tcase \"csum\":\n\t\t\t\t\taction = &CsumAction{}\n\t\t\t\tcase \"sample\":\n\t\t\t\t\taction = &SampleAction{}\n\t\t\t\tcase \"gact\":\n\t\t\t\t\taction = &GenericAction{}\n\t\t\t\tcase \"vlan\":\n\t\t\t\t\taction = &VlanAction{}\n\t\t\t\tcase \"tunnel_key\":\n\t\t\t\t\taction = &TunnelKeyAction{}\n\t\t\t\tcase \"skbedit\":\n\t\t\t\t\taction = &SkbEditAction{}\n\t\t\t\tcase \"police\":\n\t\t\t\t\taction = &PoliceAction{}\n\t\t\t\tcase \"pedit\":\n\t\t\t\t\taction = &PeditAction{}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak nextattr\n\t\t\t\t}\n\t\t\tcase nl.TCA_OPTIONS:\n\t\t\t\tadata, err := nl.ParseRouteAttr(aattr.Value)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tfor _, adatum := range adata {\n\t\t\t\t\tswitch actionType {\n\t\t\t\t\tcase \"mirred\":\n\t\t\t\t\t\tswitch adatum.Attr.Type {\n\t\t\t\t\t\tcase nl.TCA_MIRRED_PARMS:\n\t\t\t\t\t\t\tmirred := *nl.DeserializeTcMirred(adatum.Value)\n\t\t\t\t\t\t\taction.(*MirredAction).ActionAttrs = ActionAttrs{}\n\t\t\t\t\t\t\ttoAttrs(&mirred.TcGen, action.Attrs())\n\t\t\t\t\t\t\taction.(*MirredAction).Ifindex = int(mirred.Ifindex)\n\t\t\t\t\t\t\taction.(*MirredAction).MirredAction = MirredAct(mirred.Eaction)\n\t\t\t\t\t\tcase nl.TCA_MIRRED_TM:\n\t\t\t\t\t\t\ttcTs := nl.DeserializeTcf(adatum.Value)\n\t\t\t\t\t\t\tactionTimestamp = toTimeStamp(tcTs)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase \"vlan\":\n\t\t\t\t\t\tswitch adatum.Attr.Type {\n\t\t\t\t\t\tcase nl.TCA_VLAN_PARMS:\n\t\t\t\t\t\t\tvlan := *nl.DeserializeTcVlan(adatum.Value)\n\t\t\t\t\t\t\taction.(*VlanAction).ActionAttrs = ActionAttrs{}\n\t\t\t\t\t\t\ttoAttrs(&vlan.TcGen, action.Attrs())\n\t\t\t\t\t\t\taction.(*VlanAction).Action = VlanAct(vlan.Action)\n\t\t\t\t\t\tcase nl.TCA_VLAN_PUSH_VLAN_ID:\n\t\t\t\t\t\t\tvlanId := native.Uint16(adatum.Value[0:2])\n\t\t\t\t\t\t\taction.(*VlanAction).VlanID = vlanId\n\t\t\t\t\t\t}\n\t\t\t\t\tcase \"tunnel_key\":\n\t\t\t\t\t\tswitch adatum.Attr.Type {\n\t\t\t\t\t\tcase nl.TCA_TUNNEL_KEY_PARMS:\n\t\t\t\t\t\t\ttun := *nl.DeserializeTunnelKey(adatum.Value)\n\t\t\t\t\t\t\taction.(*TunnelKeyAction).ActionAttrs = ActionAttrs{}\n\t\t\t\t\t\t\ttoAttrs(&tun.TcGen, action.Attrs())\n\t\t\t\t\t\t\taction.(*TunnelKeyAction).Action = TunnelKeyAct(tun.Action)\n\t\t\t\t\t\tcase nl.TCA_TUNNEL_KEY_ENC_KEY_ID:\n\t\t\t\t\t\t\taction.(*TunnelKeyAction).KeyID = networkOrder.Uint32(adatum.Value[0:4])\n\t\t\t\t\t\tcase nl.TCA_TUNNEL_KEY_ENC_IPV6_SRC, nl.TCA_TUNNEL_KEY_ENC_IPV4_SRC:\n\t\t\t\t\t\t\taction.(*TunnelKeyAction).SrcAddr = adatum.Value[:]\n\t\t\t\t\t\tcase nl.TCA_TUNNEL_KEY_ENC_IPV6_DST, nl.TCA_TUNNEL_KEY_ENC_IPV4_DST:\n\t\t\t\t\t\t\taction.(*TunnelKeyAction).DstAddr = adatum.Value[:]\n\t\t\t\t\t\tcase nl.TCA_TUNNEL_KEY_ENC_DST_PORT:\n\t\t\t\t\t\t\taction.(*TunnelKeyAction).DestPort = ntohs(adatum.Value)\n\t\t\t\t\t\tcase nl.TCA_TUNNEL_KEY_TM:\n\t\t\t\t\t\t\ttcTs := nl.DeserializeTcf(adatum.Value)\n\t\t\t\t\t\t\tactionTimestamp = toTimeStamp(tcTs)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase \"skbedit\":\n\t\t\t\t\t\tswitch adatum.Attr.Type {\n\t\t\t\t\t\tcase nl.TCA_SKBEDIT_PARMS:\n\t\t\t\t\t\t\tskbedit := *nl.DeserializeSkbEdit(adatum.Value)\n\t\t\t\t\t\t\taction.(*SkbEditAction).ActionAttrs = ActionAttrs{}\n\t\t\t\t\t\t\ttoAttrs(&skbedit.TcGen, action.Attrs())\n\t\t\t\t\t\tcase nl.TCA_SKBEDIT_MARK:\n\t\t\t\t\t\t\tmark := native.Uint32(adatum.Value[0:4])\n\t\t\t\t\t\t\taction.(*SkbEditAction).Mark = &mark\n\t\t\t\t\t\tcase nl.TCA_SKBEDIT_MASK:\n\t\t\t\t\t\t\tmask := native.Uint32(adatum.Value[0:4])\n\t\t\t\t\t\t\taction.(*SkbEditAction).Mask = &mask\n\t\t\t\t\t\tcase nl.TCA_SKBEDIT_PRIORITY:\n\t\t\t\t\t\t\tpriority := native.Uint32(adatum.Value[0:4])\n\t\t\t\t\t\t\taction.(*SkbEditAction).Priority = &priority\n\t\t\t\t\t\tcase nl.TCA_SKBEDIT_PTYPE:\n\t\t\t\t\t\t\tptype := native.Uint16(adatum.Value[0:2])\n\t\t\t\t\t\t\taction.(*SkbEditAction).PType = &ptype\n\t\t\t\t\t\tcase nl.TCA_SKBEDIT_QUEUE_MAPPING:\n\t\t\t\t\t\t\tmapping := native.Uint16(adatum.Value[0:2])\n\t\t\t\t\t\t\taction.(*SkbEditAction).QueueMapping = &mapping\n\t\t\t\t\t\tcase nl.TCA_SKBEDIT_TM:\n\t\t\t\t\t\t\ttcTs := nl.DeserializeTcf(adatum.Value)\n\t\t\t\t\t\t\tactionTimestamp = toTimeStamp(tcTs)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase \"bpf\":\n\t\t\t\t\t\tswitch adatum.Attr.Type {\n\t\t\t\t\t\tcase nl.TCA_ACT_BPF_PARMS:\n\t\t\t\t\t\t\tgen := *nl.DeserializeTcGen(adatum.Value)\n\t\t\t\t\t\t\ttoAttrs(&gen, action.Attrs())\n\t\t\t\t\t\tcase nl.TCA_ACT_BPF_FD:\n\t\t\t\t\t\t\taction.(*BpfAction).Fd = int(native.Uint32(adatum.Value[0:4]))\n\t\t\t\t\t\tcase nl.TCA_ACT_BPF_NAME:\n\t\t\t\t\t\t\taction.(*BpfAction).Name = string(adatum.Value[:len(adatum.Value)-1])\n\t\t\t\t\t\tcase nl.TCA_ACT_BPF_TM:\n\t\t\t\t\t\t\ttcTs := nl.DeserializeTcf(adatum.Value)\n\t\t\t\t\t\t\tactionTimestamp = toTimeStamp(tcTs)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase \"connmark\":\n\t\t\t\t\t\tswitch adatum.Attr.Type {\n\t\t\t\t\t\tcase nl.TCA_CONNMARK_PARMS:\n\t\t\t\t\t\t\tconnmark := *nl.DeserializeTcConnmark(adatum.Value)\n\t\t\t\t\t\t\taction.(*ConnmarkAction).ActionAttrs = ActionAttrs{}\n\t\t\t\t\t\t\ttoAttrs(&connmark.TcGen, action.Attrs())\n\t\t\t\t\t\t\taction.(*ConnmarkAction).Zone = connmark.Zone\n\t\t\t\t\t\tcase nl.TCA_CONNMARK_TM:\n\t\t\t\t\t\t\ttcTs := nl.DeserializeTcf(adatum.Value)\n\t\t\t\t\t\t\tactionTimestamp = toTimeStamp(tcTs)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase \"csum\":\n\t\t\t\t\t\tswitch adatum.Attr.Type {\n\t\t\t\t\t\tcase nl.TCA_CSUM_PARMS:\n\t\t\t\t\t\t\tcsum := *nl.DeserializeTcCsum(adatum.Value)\n\t\t\t\t\t\t\taction.(*CsumAction).ActionAttrs = ActionAttrs{}\n\t\t\t\t\t\t\ttoAttrs(&csum.TcGen, action.Attrs())\n\t\t\t\t\t\t\taction.(*CsumAction).UpdateFlags = CsumUpdateFlags(csum.UpdateFlags)\n\t\t\t\t\t\tcase nl.TCA_CSUM_TM:\n\t\t\t\t\t\t\ttcTs := nl.DeserializeTcf(adatum.Value)\n\t\t\t\t\t\t\tactionTimestamp = toTimeStamp(tcTs)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase \"sample\":\n\t\t\t\t\t\tswitch adatum.Attr.Type {\n\t\t\t\t\t\tcase nl.TCA_ACT_SAMPLE_PARMS:\n\t\t\t\t\t\t\tgen := *nl.DeserializeTcGen(adatum.Value)\n\t\t\t\t\t\t\ttoAttrs(&gen, action.Attrs())\n\t\t\t\t\t\tcase nl.TCA_ACT_SAMPLE_RATE:\n\t\t\t\t\t\t\taction.(*SampleAction).Rate = native.Uint32(adatum.Value[0:4])\n\t\t\t\t\t\tcase nl.TCA_ACT_SAMPLE_PSAMPLE_GROUP:\n\t\t\t\t\t\t\taction.(*SampleAction).Group = native.Uint32(adatum.Value[0:4])\n\t\t\t\t\t\tcase nl.TCA_ACT_SAMPLE_TRUNC_SIZE:\n\t\t\t\t\t\t\taction.(*SampleAction).TruncSize = native.Uint32(adatum.Value[0:4])\n\t\t\t\t\t\t}\n\t\t\t\t\tcase \"gact\":\n\t\t\t\t\t\tswitch adatum.Attr.Type {\n\t\t\t\t\t\tcase nl.TCA_GACT_PARMS:\n\t\t\t\t\t\t\tgen := *nl.DeserializeTcGen(adatum.Value)\n\t\t\t\t\t\t\ttoAttrs(&gen, action.Attrs())\n\t\t\t\t\t\t\tif action.Attrs().Action.String() == \"goto\" {\n\t\t\t\t\t\t\t\taction.(*GenericAction).Chain = TC_ACT_EXT_VAL_MASK & gen.Action\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\tcase nl.TCA_GACT_TM:\n\t\t\t\t\t\t\ttcTs := nl.DeserializeTcf(adatum.Value)\n\t\t\t\t\t\t\tactionTimestamp = toTimeStamp(tcTs)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase \"police\":\n\t\t\t\t\t\tparsePolice(adatum, action.(*PoliceAction))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase nl.TCA_ACT_STATS:\n\t\t\t\ts, err := parseTcStats2(aattr.Value)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tactionnStatistic = (*ActionStatistic)(s)\n\t\t\t}\n\t\t}\n\t\tif action != nil {\n\t\t\taction.Attrs().Statistics = actionnStatistic\n\t\t\taction.Attrs().Timestamp = actionTimestamp\n\t\t\tactions = append(actions, action)\n\t\t}\n\t}\n\treturn actions, nil\n}\n\nfunc parseU32Data(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {\n\tu32 := filter.(*U32)\n\tdetailed := false\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.TCA_U32_SEL:\n\t\t\tdetailed = true\n\t\t\tsel := nl.DeserializeTcU32Sel(datum.Value)\n\t\t\tu32.Sel = sel\n\t\t\tif native != networkOrder {\n\t\t\t\t// Handle the endianness of attributes\n\t\t\t\tu32.Sel.Offmask = native.Uint16(htons(sel.Offmask))\n\t\t\t\tu32.Sel.Hmask = native.Uint32(htonl(sel.Hmask))\n\t\t\t\tfor i, key := range u32.Sel.Keys {\n\t\t\t\t\tu32.Sel.Keys[i].Mask = native.Uint32(htonl(key.Mask))\n\t\t\t\t\tu32.Sel.Keys[i].Val = native.Uint32(htonl(key.Val))\n\t\t\t\t}\n\t\t\t}\n\t\tcase nl.TCA_U32_ACT:\n\t\t\ttables, err := nl.ParseRouteAttr(datum.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn detailed, err\n\t\t\t}\n\t\t\tu32.Actions, err = parseActions(tables)\n\t\t\tif err != nil {\n\t\t\t\treturn detailed, err\n\t\t\t}\n\t\t\tfor _, action := range u32.Actions {\n\t\t\t\tif action, ok := action.(*MirredAction); ok {\n\t\t\t\t\tu32.RedirIndex = int(action.Ifindex)\n\t\t\t\t}\n\t\t\t}\n\t\tcase nl.TCA_U32_POLICE:\n\t\t\tvar police PoliceAction\n\t\t\tadata, _ := nl.ParseRouteAttr(datum.Value)\n\t\t\tfor _, aattr := range adata {\n\t\t\t\tparsePolice(aattr, &police)\n\t\t\t}\n\t\t\tu32.Police = &police\n\t\tcase nl.TCA_U32_CLASSID:\n\t\t\tu32.ClassId = native.Uint32(datum.Value)\n\t\tcase nl.TCA_U32_DIVISOR:\n\t\t\tu32.Divisor = native.Uint32(datum.Value)\n\t\tcase nl.TCA_U32_HASH:\n\t\t\tu32.Hash = native.Uint32(datum.Value)\n\t\tcase nl.TCA_U32_LINK:\n\t\t\tu32.Link = native.Uint32(datum.Value)\n\t\t}\n\t}\n\treturn detailed, nil\n}\n\nfunc parseFwData(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {\n\tfw := filter.(*FwFilter)\n\tdetailed := true\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.TCA_FW_MASK:\n\t\t\tfw.Mask = native.Uint32(datum.Value[0:4])\n\t\tcase nl.TCA_FW_CLASSID:\n\t\t\tfw.ClassId = native.Uint32(datum.Value[0:4])\n\t\tcase nl.TCA_FW_INDEV:\n\t\t\tfw.InDev = string(datum.Value[:len(datum.Value)-1])\n\t\tcase nl.TCA_FW_POLICE:\n\t\t\tvar police PoliceAction\n\t\t\tadata, _ := nl.ParseRouteAttr(datum.Value)\n\t\t\tfor _, aattr := range adata {\n\t\t\t\tparsePolice(aattr, &police)\n\t\t\t}\n\t\t\tfw.Police = &police\n\t\tcase nl.TCA_FW_ACT:\n\t\t\ttables, err := nl.ParseRouteAttr(datum.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn detailed, err\n\t\t\t}\n\t\t\tfw.Actions, err = parseActions(tables)\n\t\t\tif err != nil {\n\t\t\t\treturn detailed, err\n\t\t\t}\n\t\t}\n\t}\n\treturn detailed, nil\n}\n\nfunc parseBpfData(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {\n\tbpf := filter.(*BpfFilter)\n\tdetailed := true\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.TCA_BPF_FD:\n\t\t\tbpf.Fd = int(native.Uint32(datum.Value[0:4]))\n\t\tcase nl.TCA_BPF_NAME:\n\t\t\tbpf.Name = string(datum.Value[:len(datum.Value)-1])\n\t\tcase nl.TCA_BPF_CLASSID:\n\t\t\tbpf.ClassId = native.Uint32(datum.Value[0:4])\n\t\tcase nl.TCA_BPF_FLAGS:\n\t\t\tflags := native.Uint32(datum.Value[0:4])\n\t\t\tif (flags & nl.TCA_BPF_FLAG_ACT_DIRECT) != 0 {\n\t\t\t\tbpf.DirectAction = true\n\t\t\t}\n\t\tcase nl.TCA_BPF_ID:\n\t\t\tbpf.Id = int(native.Uint32(datum.Value[0:4]))\n\t\tcase nl.TCA_BPF_TAG:\n\t\t\tbpf.Tag = hex.EncodeToString(datum.Value)\n\t\t}\n\t}\n\treturn detailed, nil\n}\n\nfunc parseMatchAllData(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {\n\tmatchall := filter.(*MatchAll)\n\tdetailed := true\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.TCA_MATCHALL_CLASSID:\n\t\t\tmatchall.ClassId = native.Uint32(datum.Value[0:4])\n\t\tcase nl.TCA_MATCHALL_ACT:\n\t\t\ttables, err := nl.ParseRouteAttr(datum.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn detailed, err\n\t\t\t}\n\t\t\tmatchall.Actions, err = parseActions(tables)\n\t\t\tif err != nil {\n\t\t\t\treturn detailed, err\n\t\t\t}\n\t\t}\n\t}\n\treturn detailed, nil\n}\n\nfunc parseFlowerData(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {\n\treturn true, filter.(*Flower).decode(data)\n}\n\nfunc AlignToAtm(size uint) uint {\n\tvar linksize, cells int\n\tcells = int(size / nl.ATM_CELL_PAYLOAD)\n\tif (size % nl.ATM_CELL_PAYLOAD) > 0 {\n\t\tcells++\n\t}\n\tlinksize = cells * nl.ATM_CELL_SIZE\n\treturn uint(linksize)\n}\n\nfunc AdjustSize(sz uint, mpu uint, linklayer int) uint {\n\tif sz < mpu {\n\t\tsz = mpu\n\t}\n\tswitch linklayer {\n\tcase nl.LINKLAYER_ATM:\n\t\treturn AlignToAtm(sz)\n\tdefault:\n\t\treturn sz\n\t}\n}\n\nfunc CalcRtable(rate *nl.TcRateSpec, rtab []uint32, cellLog int, mtu uint32, linklayer int) int {\n\tbps := rate.Rate\n\tmpu := rate.Mpu\n\tvar sz uint\n\tif mtu == 0 {\n\t\tmtu = 2047\n\t}\n\tif cellLog < 0 {\n\t\tcellLog = 0\n\t\tfor (mtu >> uint(cellLog)) > 255 {\n\t\t\tcellLog++\n\t\t}\n\t}\n\tfor i := 0; i < 256; i++ {\n\t\tsz = AdjustSize(uint((i+1)<<uint32(cellLog)), uint(mpu), linklayer)\n\t\trtab[i] = Xmittime(uint64(bps), uint32(sz))\n\t}\n\trate.CellAlign = -1\n\trate.CellLog = uint8(cellLog)\n\trate.Linklayer = uint8(linklayer & nl.TC_LINKLAYER_MASK)\n\treturn cellLog\n}\n\nfunc DeserializeRtab(b []byte) [256]uint32 {\n\tvar rtab [256]uint32\n\tr := bytes.NewReader(b)\n\t_ = binary.Read(r, native, &rtab)\n\treturn rtab\n}\n\nfunc SerializeRtab(rtab [256]uint32) []byte {\n\tvar w bytes.Buffer\n\t_ = binary.Write(&w, native, rtab)\n\treturn w.Bytes()\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/fou.go",
    "content": "package netlink\n\nimport (\n\t\"net\"\n)\n\ntype Fou struct {\n\tFamily    int\n\tPort      int\n\tProtocol  int\n\tEncapType int\n\tLocal     net.IP\n\tPeer      net.IP\n\tPeerPort  int\n\tIfIndex   int\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/fou_linux.go",
    "content": "//go:build linux\n// +build linux\n\npackage netlink\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"log\"\n\t\"net\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tFOU_GENL_NAME = \"fou\"\n)\n\nconst (\n\tFOU_CMD_UNSPEC uint8 = iota\n\tFOU_CMD_ADD\n\tFOU_CMD_DEL\n\tFOU_CMD_GET\n\tFOU_CMD_MAX = FOU_CMD_GET\n)\n\nconst (\n\tFOU_ATTR_UNSPEC = iota\n\tFOU_ATTR_PORT\n\tFOU_ATTR_AF\n\tFOU_ATTR_IPPROTO\n\tFOU_ATTR_TYPE\n\tFOU_ATTR_REMCSUM_NOPARTIAL\n\tFOU_ATTR_LOCAL_V4\n\tFOU_ATTR_LOCAL_V6\n\tFOU_ATTR_PEER_V4\n\tFOU_ATTR_PEER_V6\n\tFOU_ATTR_PEER_PORT\n\tFOU_ATTR_IFINDEX\n\tFOU_ATTR_MAX = FOU_ATTR_REMCSUM_NOPARTIAL\n)\n\nconst (\n\tFOU_ENCAP_UNSPEC = iota\n\tFOU_ENCAP_DIRECT\n\tFOU_ENCAP_GUE\n\tFOU_ENCAP_MAX = FOU_ENCAP_GUE\n)\n\nvar fouFamilyId int\n\nfunc FouFamilyId() (int, error) {\n\tif fouFamilyId != 0 {\n\t\treturn fouFamilyId, nil\n\t}\n\n\tfam, err := GenlFamilyGet(FOU_GENL_NAME)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\tfouFamilyId = int(fam.ID)\n\treturn fouFamilyId, nil\n}\n\nfunc FouAdd(f Fou) error {\n\treturn pkgHandle.FouAdd(f)\n}\n\nfunc (h *Handle) FouAdd(f Fou) error {\n\tfam_id, err := FouFamilyId()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// setting ip protocol conflicts with encapsulation type GUE\n\tif f.EncapType == FOU_ENCAP_GUE && f.Protocol != 0 {\n\t\treturn errors.New(\"GUE encapsulation doesn't specify an IP protocol\")\n\t}\n\n\treq := h.newNetlinkRequest(fam_id, unix.NLM_F_ACK)\n\n\t// int to byte for port\n\tbp := make([]byte, 2)\n\tbinary.BigEndian.PutUint16(bp[0:2], uint16(f.Port))\n\n\tattrs := []*nl.RtAttr{\n\t\tnl.NewRtAttr(FOU_ATTR_PORT, bp),\n\t\tnl.NewRtAttr(FOU_ATTR_TYPE, []byte{uint8(f.EncapType)}),\n\t\tnl.NewRtAttr(FOU_ATTR_AF, []byte{uint8(f.Family)}),\n\t\tnl.NewRtAttr(FOU_ATTR_IPPROTO, []byte{uint8(f.Protocol)}),\n\t}\n\traw := []byte{FOU_CMD_ADD, 1, 0, 0}\n\tfor _, a := range attrs {\n\t\traw = append(raw, a.Serialize()...)\n\t}\n\n\treq.AddRawData(raw)\n\n\t_, err = req.Execute(unix.NETLINK_GENERIC, 0)\n\treturn err\n}\n\nfunc FouDel(f Fou) error {\n\treturn pkgHandle.FouDel(f)\n}\n\nfunc (h *Handle) FouDel(f Fou) error {\n\tfam_id, err := FouFamilyId()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treq := h.newNetlinkRequest(fam_id, unix.NLM_F_ACK)\n\n\t// int to byte for port\n\tbp := make([]byte, 2)\n\tbinary.BigEndian.PutUint16(bp[0:2], uint16(f.Port))\n\n\tattrs := []*nl.RtAttr{\n\t\tnl.NewRtAttr(FOU_ATTR_PORT, bp),\n\t\tnl.NewRtAttr(FOU_ATTR_AF, []byte{uint8(f.Family)}),\n\t}\n\traw := []byte{FOU_CMD_DEL, 1, 0, 0}\n\tfor _, a := range attrs {\n\t\traw = append(raw, a.Serialize()...)\n\t}\n\n\treq.AddRawData(raw)\n\n\t_, err = req.Execute(unix.NETLINK_GENERIC, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc FouList(fam int) ([]Fou, error) {\n\treturn pkgHandle.FouList(fam)\n}\n\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) FouList(fam int) ([]Fou, error) {\n\tfam_id, err := FouFamilyId()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treq := h.newNetlinkRequest(fam_id, unix.NLM_F_DUMP)\n\n\tattrs := []*nl.RtAttr{\n\t\tnl.NewRtAttr(FOU_ATTR_AF, []byte{uint8(fam)}),\n\t}\n\traw := []byte{FOU_CMD_GET, 1, 0, 0}\n\tfor _, a := range attrs {\n\t\traw = append(raw, a.Serialize()...)\n\t}\n\n\treq.AddRawData(raw)\n\n\tmsgs, executeErr := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif executeErr != nil && !errors.Is(err, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\tfous := make([]Fou, 0, len(msgs))\n\tfor _, m := range msgs {\n\t\tf, err := deserializeFouMsg(m)\n\t\tif err != nil {\n\t\t\treturn fous, err\n\t\t}\n\n\t\tfous = append(fous, f)\n\t}\n\n\treturn fous, executeErr\n}\n\nfunc deserializeFouMsg(msg []byte) (Fou, error) {\n\tfou := Fou{}\n\n\tfor attr := range nl.ParseAttributes(msg[4:]) {\n\t\tswitch attr.Type {\n\t\tcase FOU_ATTR_AF:\n\t\t\tfou.Family = int(attr.Value[0])\n\t\tcase FOU_ATTR_PORT:\n\t\t\tfou.Port = int(networkOrder.Uint16(attr.Value))\n\t\tcase FOU_ATTR_IPPROTO:\n\t\t\tfou.Protocol = int(attr.Value[0])\n\t\tcase FOU_ATTR_TYPE:\n\t\t\tfou.EncapType = int(attr.Value[0])\n\t\tcase FOU_ATTR_LOCAL_V4, FOU_ATTR_LOCAL_V6:\n\t\t\tfou.Local = net.IP(attr.Value)\n\t\tcase FOU_ATTR_PEER_V4, FOU_ATTR_PEER_V6:\n\t\t\tfou.Peer = net.IP(attr.Value)\n\t\tcase FOU_ATTR_PEER_PORT:\n\t\t\tfou.PeerPort = int(networkOrder.Uint16(attr.Value))\n\t\tcase FOU_ATTR_IFINDEX:\n\t\t\tfou.IfIndex = int(native.Uint16(attr.Value))\n\t\tdefault:\n\t\t\tlog.Printf(\"unknown fou attribute from kernel: %+v %v\", attr, attr.Type&nl.NLA_TYPE_MASK)\n\t\t}\n\t}\n\n\treturn fou, nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/fou_unspecified.go",
    "content": "//go:build !linux\n// +build !linux\n\npackage netlink\n\nfunc FouAdd(f Fou) error {\n\treturn ErrNotImplemented\n}\n\nfunc FouDel(f Fou) error {\n\treturn ErrNotImplemented\n}\n\nfunc FouList(fam int) ([]Fou, error) {\n\treturn nil, ErrNotImplemented\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/genetlink_linux.go",
    "content": "package netlink\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"syscall\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\ntype GenlOp struct {\n\tID    uint32\n\tFlags uint32\n}\n\ntype GenlMulticastGroup struct {\n\tID   uint32\n\tName string\n}\n\ntype GenlFamily struct {\n\tID      uint16\n\tHdrSize uint32\n\tName    string\n\tVersion uint32\n\tMaxAttr uint32\n\tOps     []GenlOp\n\tGroups  []GenlMulticastGroup\n}\n\nfunc parseOps(b []byte) ([]GenlOp, error) {\n\tattrs, err := nl.ParseRouteAttr(b)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tops := make([]GenlOp, 0, len(attrs))\n\tfor _, a := range attrs {\n\t\tnattrs, err := nl.ParseRouteAttr(a.Value)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvar op GenlOp\n\t\tfor _, na := range nattrs {\n\t\t\tswitch na.Attr.Type {\n\t\t\tcase nl.GENL_CTRL_ATTR_OP_ID:\n\t\t\t\top.ID = native.Uint32(na.Value)\n\t\t\tcase nl.GENL_CTRL_ATTR_OP_FLAGS:\n\t\t\t\top.Flags = native.Uint32(na.Value)\n\t\t\t}\n\t\t}\n\t\tops = append(ops, op)\n\t}\n\treturn ops, nil\n}\n\nfunc parseMulticastGroups(b []byte) ([]GenlMulticastGroup, error) {\n\tattrs, err := nl.ParseRouteAttr(b)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgroups := make([]GenlMulticastGroup, 0, len(attrs))\n\tfor _, a := range attrs {\n\t\tnattrs, err := nl.ParseRouteAttr(a.Value)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvar g GenlMulticastGroup\n\t\tfor _, na := range nattrs {\n\t\t\tswitch na.Attr.Type {\n\t\t\tcase nl.GENL_CTRL_ATTR_MCAST_GRP_NAME:\n\t\t\t\tg.Name = nl.BytesToString(na.Value)\n\t\t\tcase nl.GENL_CTRL_ATTR_MCAST_GRP_ID:\n\t\t\t\tg.ID = native.Uint32(na.Value)\n\t\t\t}\n\t\t}\n\t\tgroups = append(groups, g)\n\t}\n\treturn groups, nil\n}\n\nfunc (f *GenlFamily) parseAttributes(attrs []syscall.NetlinkRouteAttr) error {\n\tfor _, a := range attrs {\n\t\tswitch a.Attr.Type {\n\t\tcase nl.GENL_CTRL_ATTR_FAMILY_NAME:\n\t\t\tf.Name = nl.BytesToString(a.Value)\n\t\tcase nl.GENL_CTRL_ATTR_FAMILY_ID:\n\t\t\tf.ID = native.Uint16(a.Value)\n\t\tcase nl.GENL_CTRL_ATTR_VERSION:\n\t\t\tf.Version = native.Uint32(a.Value)\n\t\tcase nl.GENL_CTRL_ATTR_HDRSIZE:\n\t\t\tf.HdrSize = native.Uint32(a.Value)\n\t\tcase nl.GENL_CTRL_ATTR_MAXATTR:\n\t\t\tf.MaxAttr = native.Uint32(a.Value)\n\t\tcase nl.GENL_CTRL_ATTR_OPS:\n\t\t\tops, err := parseOps(a.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tf.Ops = ops\n\t\tcase nl.GENL_CTRL_ATTR_MCAST_GROUPS:\n\t\t\tgroups, err := parseMulticastGroups(a.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tf.Groups = groups\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc parseFamilies(msgs [][]byte) ([]*GenlFamily, error) {\n\tfamilies := make([]*GenlFamily, 0, len(msgs))\n\tfor _, m := range msgs {\n\t\tattrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfamily := &GenlFamily{}\n\t\tif err := family.parseAttributes(attrs); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tfamilies = append(families, family)\n\t}\n\treturn families, nil\n}\n\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) GenlFamilyList() ([]*GenlFamily, error) {\n\tmsg := &nl.Genlmsg{\n\t\tCommand: nl.GENL_CTRL_CMD_GETFAMILY,\n\t\tVersion: nl.GENL_CTRL_VERSION,\n\t}\n\treq := h.newNetlinkRequest(nl.GENL_ID_CTRL, unix.NLM_F_DUMP)\n\treq.AddData(msg)\n\tmsgs, executeErr := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\tfamilies, err := parseFamilies(msgs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn families, executeErr\n}\n\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc GenlFamilyList() ([]*GenlFamily, error) {\n\treturn pkgHandle.GenlFamilyList()\n}\n\nfunc (h *Handle) GenlFamilyGet(name string) (*GenlFamily, error) {\n\tmsg := &nl.Genlmsg{\n\t\tCommand: nl.GENL_CTRL_CMD_GETFAMILY,\n\t\tVersion: nl.GENL_CTRL_VERSION,\n\t}\n\treq := h.newNetlinkRequest(nl.GENL_ID_CTRL, 0)\n\treq.AddData(msg)\n\treq.AddData(nl.NewRtAttr(nl.GENL_CTRL_ATTR_FAMILY_NAME, nl.ZeroTerminated(name)))\n\tmsgs, err := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfamilies, err := parseFamilies(msgs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(families) != 1 {\n\t\treturn nil, fmt.Errorf(\"invalid response for GENL_CTRL_CMD_GETFAMILY\")\n\t}\n\treturn families[0], nil\n}\n\nfunc GenlFamilyGet(name string) (*GenlFamily, error) {\n\treturn pkgHandle.GenlFamilyGet(name)\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/genetlink_unspecified.go",
    "content": "// +build !linux\n\npackage netlink\n\ntype GenlOp struct{}\n\ntype GenlMulticastGroup struct{}\n\ntype GenlFamily struct{}\n\nfunc (h *Handle) GenlFamilyList() ([]*GenlFamily, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc GenlFamilyList() ([]*GenlFamily, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc (h *Handle) GenlFamilyGet(name string) (*GenlFamily, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc GenlFamilyGet(name string) (*GenlFamily, error) {\n\treturn nil, ErrNotImplemented\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/gtp_linux.go",
    "content": "package netlink\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\ntype PDP struct {\n\tVersion     uint32\n\tTID         uint64\n\tPeerAddress net.IP\n\tMSAddress   net.IP\n\tFlow        uint16\n\tNetNSFD     uint32\n\tITEI        uint32\n\tOTEI        uint32\n}\n\nfunc (pdp *PDP) String() string {\n\telems := []string{}\n\telems = append(elems, fmt.Sprintf(\"Version: %d\", pdp.Version))\n\tif pdp.Version == 0 {\n\t\telems = append(elems, fmt.Sprintf(\"TID: %d\", pdp.TID))\n\t} else if pdp.Version == 1 {\n\t\telems = append(elems, fmt.Sprintf(\"TEI: %d/%d\", pdp.ITEI, pdp.OTEI))\n\t}\n\telems = append(elems, fmt.Sprintf(\"MS-Address: %s\", pdp.MSAddress))\n\telems = append(elems, fmt.Sprintf(\"Peer-Address: %s\", pdp.PeerAddress))\n\treturn fmt.Sprintf(\"{%s}\", strings.Join(elems, \" \"))\n}\n\nfunc (p *PDP) parseAttributes(attrs []syscall.NetlinkRouteAttr) error {\n\tfor _, a := range attrs {\n\t\tswitch a.Attr.Type {\n\t\tcase nl.GENL_GTP_ATTR_VERSION:\n\t\t\tp.Version = native.Uint32(a.Value)\n\t\tcase nl.GENL_GTP_ATTR_TID:\n\t\t\tp.TID = native.Uint64(a.Value)\n\t\tcase nl.GENL_GTP_ATTR_PEER_ADDRESS:\n\t\t\tp.PeerAddress = net.IP(a.Value)\n\t\tcase nl.GENL_GTP_ATTR_MS_ADDRESS:\n\t\t\tp.MSAddress = net.IP(a.Value)\n\t\tcase nl.GENL_GTP_ATTR_FLOW:\n\t\t\tp.Flow = native.Uint16(a.Value)\n\t\tcase nl.GENL_GTP_ATTR_NET_NS_FD:\n\t\t\tp.NetNSFD = native.Uint32(a.Value)\n\t\tcase nl.GENL_GTP_ATTR_I_TEI:\n\t\t\tp.ITEI = native.Uint32(a.Value)\n\t\tcase nl.GENL_GTP_ATTR_O_TEI:\n\t\t\tp.OTEI = native.Uint32(a.Value)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc parsePDP(msgs [][]byte) ([]*PDP, error) {\n\tpdps := make([]*PDP, 0, len(msgs))\n\tfor _, m := range msgs {\n\t\tattrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tpdp := &PDP{}\n\t\tif err := pdp.parseAttributes(attrs); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tpdps = append(pdps, pdp)\n\t}\n\treturn pdps, nil\n}\n\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) GTPPDPList() ([]*PDP, error) {\n\tf, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmsg := &nl.Genlmsg{\n\t\tCommand: nl.GENL_GTP_CMD_GETPDP,\n\t\tVersion: nl.GENL_GTP_VERSION,\n\t}\n\treq := h.newNetlinkRequest(int(f.ID), unix.NLM_F_DUMP)\n\treq.AddData(msg)\n\tmsgs, executeErr := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif executeErr != nil && !errors.Is(err, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\tpdps, err := parsePDP(msgs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn pdps, executeErr\n}\n\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc GTPPDPList() ([]*PDP, error) {\n\treturn pkgHandle.GTPPDPList()\n}\n\nfunc gtpPDPGet(req *nl.NetlinkRequest) (*PDP, error) {\n\tmsgs, err := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpdps, err := parsePDP(msgs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(pdps) != 1 {\n\t\treturn nil, fmt.Errorf(\"invalid reqponse for GENL_GTP_CMD_GETPDP\")\n\t}\n\treturn pdps[0], nil\n}\n\nfunc (h *Handle) GTPPDPByTID(link Link, tid int) (*PDP, error) {\n\tf, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmsg := &nl.Genlmsg{\n\t\tCommand: nl.GENL_GTP_CMD_GETPDP,\n\t\tVersion: nl.GENL_GTP_VERSION,\n\t}\n\treq := h.newNetlinkRequest(int(f.ID), 0)\n\treq.AddData(msg)\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(0)))\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_TID, nl.Uint64Attr(uint64(tid))))\n\treturn gtpPDPGet(req)\n}\n\nfunc GTPPDPByTID(link Link, tid int) (*PDP, error) {\n\treturn pkgHandle.GTPPDPByTID(link, tid)\n}\n\nfunc (h *Handle) GTPPDPByITEI(link Link, itei int) (*PDP, error) {\n\tf, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmsg := &nl.Genlmsg{\n\t\tCommand: nl.GENL_GTP_CMD_GETPDP,\n\t\tVersion: nl.GENL_GTP_VERSION,\n\t}\n\treq := h.newNetlinkRequest(int(f.ID), 0)\n\treq.AddData(msg)\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(1)))\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_I_TEI, nl.Uint32Attr(uint32(itei))))\n\treturn gtpPDPGet(req)\n}\n\nfunc GTPPDPByITEI(link Link, itei int) (*PDP, error) {\n\treturn pkgHandle.GTPPDPByITEI(link, itei)\n}\n\nfunc (h *Handle) GTPPDPByMSAddress(link Link, addr net.IP) (*PDP, error) {\n\tf, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmsg := &nl.Genlmsg{\n\t\tCommand: nl.GENL_GTP_CMD_GETPDP,\n\t\tVersion: nl.GENL_GTP_VERSION,\n\t}\n\treq := h.newNetlinkRequest(int(f.ID), 0)\n\treq.AddData(msg)\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(0)))\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_MS_ADDRESS, []byte(addr.To4())))\n\treturn gtpPDPGet(req)\n}\n\nfunc GTPPDPByMSAddress(link Link, addr net.IP) (*PDP, error) {\n\treturn pkgHandle.GTPPDPByMSAddress(link, addr)\n}\n\nfunc (h *Handle) GTPPDPAdd(link Link, pdp *PDP) error {\n\tf, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)\n\tif err != nil {\n\t\treturn err\n\t}\n\tmsg := &nl.Genlmsg{\n\t\tCommand: nl.GENL_GTP_CMD_NEWPDP,\n\t\tVersion: nl.GENL_GTP_VERSION,\n\t}\n\treq := h.newNetlinkRequest(int(f.ID), unix.NLM_F_EXCL|unix.NLM_F_ACK)\n\treq.AddData(msg)\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(pdp.Version)))\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_PEER_ADDRESS, []byte(pdp.PeerAddress.To4())))\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_MS_ADDRESS, []byte(pdp.MSAddress.To4())))\n\n\tswitch pdp.Version {\n\tcase 0:\n\t\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_TID, nl.Uint64Attr(pdp.TID)))\n\t\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_FLOW, nl.Uint16Attr(pdp.Flow)))\n\tcase 1:\n\t\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_I_TEI, nl.Uint32Attr(pdp.ITEI)))\n\t\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_O_TEI, nl.Uint32Attr(pdp.OTEI)))\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported GTP version: %d\", pdp.Version)\n\t}\n\t_, err = req.Execute(unix.NETLINK_GENERIC, 0)\n\treturn err\n}\n\nfunc GTPPDPAdd(link Link, pdp *PDP) error {\n\treturn pkgHandle.GTPPDPAdd(link, pdp)\n}\n\nfunc (h *Handle) GTPPDPDel(link Link, pdp *PDP) error {\n\tf, err := h.GenlFamilyGet(nl.GENL_GTP_NAME)\n\tif err != nil {\n\t\treturn err\n\t}\n\tmsg := &nl.Genlmsg{\n\t\tCommand: nl.GENL_GTP_CMD_DELPDP,\n\t\tVersion: nl.GENL_GTP_VERSION,\n\t}\n\treq := h.newNetlinkRequest(int(f.ID), unix.NLM_F_EXCL|unix.NLM_F_ACK)\n\treq.AddData(msg)\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(pdp.Version)))\n\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))\n\n\tswitch pdp.Version {\n\tcase 0:\n\t\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_TID, nl.Uint64Attr(pdp.TID)))\n\tcase 1:\n\t\treq.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_I_TEI, nl.Uint32Attr(pdp.ITEI)))\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported GTP version: %d\", pdp.Version)\n\t}\n\t_, err = req.Execute(unix.NETLINK_GENERIC, 0)\n\treturn err\n}\n\nfunc GTPPDPDel(link Link, pdp *PDP) error {\n\treturn pkgHandle.GTPPDPDel(link, pdp)\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/handle_linux.go",
    "content": "package netlink\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"github.com/vishvananda/netns\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// Empty handle used by the netlink package methods\nvar pkgHandle = &Handle{}\n\n// Handle is an handle for the netlink requests on a\n// specific network namespace. All the requests on the\n// same netlink family share the same netlink socket,\n// which gets released when the handle is Close'd.\ntype Handle struct {\n\tsockets      map[int]*nl.SocketHandle\n\tlookupByDump bool\n}\n\n// SetSocketTimeout configures timeout for default netlink sockets\nfunc SetSocketTimeout(to time.Duration) error {\n\tif to < time.Microsecond {\n\t\treturn fmt.Errorf(\"invalid timeout, minimul value is %s\", time.Microsecond)\n\t}\n\n\tnl.SocketTimeoutTv = unix.NsecToTimeval(to.Nanoseconds())\n\treturn nil\n}\n\n// GetSocketTimeout returns the timeout value used by default netlink sockets\nfunc GetSocketTimeout() time.Duration {\n\tnsec := unix.TimevalToNsec(nl.SocketTimeoutTv)\n\treturn time.Duration(nsec) * time.Nanosecond\n}\n\n// SupportsNetlinkFamily reports whether the passed netlink family is supported by this Handle\nfunc (h *Handle) SupportsNetlinkFamily(nlFamily int) bool {\n\t_, ok := h.sockets[nlFamily]\n\treturn ok\n}\n\n// NewHandle returns a netlink handle on the current network namespace.\n// Caller may specify the netlink families the handle should support.\n// If no families are specified, all the families the netlink package\n// supports will be automatically added.\nfunc NewHandle(nlFamilies ...int) (*Handle, error) {\n\treturn newHandle(netns.None(), netns.None(), nlFamilies...)\n}\n\n// SetSocketTimeout sets the send and receive timeout for each socket in the\n// netlink handle. Although the socket timeout has granularity of one\n// microsecond, the effective granularity is floored by the kernel timer tick,\n// which default value is four milliseconds.\nfunc (h *Handle) SetSocketTimeout(to time.Duration) error {\n\tif to < time.Microsecond {\n\t\treturn fmt.Errorf(\"invalid timeout, minimul value is %s\", time.Microsecond)\n\t}\n\ttv := unix.NsecToTimeval(to.Nanoseconds())\n\tfor _, sh := range h.sockets {\n\t\tif err := sh.Socket.SetSendTimeout(&tv); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := sh.Socket.SetReceiveTimeout(&tv); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// SetSocketReceiveBufferSize sets the receive buffer size for each\n// socket in the netlink handle. The maximum value is capped by\n// /proc/sys/net/core/rmem_max.\nfunc (h *Handle) SetSocketReceiveBufferSize(size int, force bool) error {\n\topt := unix.SO_RCVBUF\n\tif force {\n\t\topt = unix.SO_RCVBUFFORCE\n\t}\n\tfor _, sh := range h.sockets {\n\t\tfd := sh.Socket.GetFd()\n\t\terr := unix.SetsockoptInt(fd, unix.SOL_SOCKET, opt, size)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// GetSocketReceiveBufferSize gets the receiver buffer size for each\n// socket in the netlink handle. The retrieved value should be the\n// double to the one set for SetSocketReceiveBufferSize.\nfunc (h *Handle) GetSocketReceiveBufferSize() ([]int, error) {\n\tresults := make([]int, len(h.sockets))\n\ti := 0\n\tfor _, sh := range h.sockets {\n\t\tfd := sh.Socket.GetFd()\n\t\tsize, err := unix.GetsockoptInt(fd, unix.SOL_SOCKET, unix.SO_RCVBUF)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tresults[i] = size\n\t\ti++\n\t}\n\treturn results, nil\n}\n\n// SetStrictCheck sets the strict check socket option for each socket in the netlink handle. Returns early if any set operation fails\nfunc (h *Handle) SetStrictCheck(state bool) error {\n\tfor _, sh := range h.sockets {\n\t\tvar stateInt int = 0\n\t\tif state {\n\t\t\tstateInt = 1\n\t\t}\n\t\terr := unix.SetsockoptInt(sh.Socket.GetFd(), unix.SOL_NETLINK, unix.NETLINK_GET_STRICT_CHK, stateInt)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// NewHandleAt returns a netlink handle on the network namespace\n// specified by ns. If ns=netns.None(), current network namespace\n// will be assumed\nfunc NewHandleAt(ns netns.NsHandle, nlFamilies ...int) (*Handle, error) {\n\treturn newHandle(ns, netns.None(), nlFamilies...)\n}\n\n// NewHandleAtFrom works as NewHandle but allows client to specify the\n// new and the origin netns Handle.\nfunc NewHandleAtFrom(newNs, curNs netns.NsHandle) (*Handle, error) {\n\treturn newHandle(newNs, curNs)\n}\n\nfunc newHandle(newNs, curNs netns.NsHandle, nlFamilies ...int) (*Handle, error) {\n\th := &Handle{sockets: map[int]*nl.SocketHandle{}}\n\tfams := nl.SupportedNlFamilies\n\tif len(nlFamilies) != 0 {\n\t\tfams = nlFamilies\n\t}\n\tfor _, f := range fams {\n\t\ts, err := nl.GetNetlinkSocketAt(newNs, curNs, f)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\th.sockets[f] = &nl.SocketHandle{Socket: s}\n\t}\n\treturn h, nil\n}\n\n// Close releases the resources allocated to this handle\nfunc (h *Handle) Close() {\n\tfor _, sh := range h.sockets {\n\t\tsh.Close()\n\t}\n\th.sockets = nil\n}\n\n// Delete releases the resources allocated to this handle\n//\n// Deprecated: use Close instead which is in line with typical resource release\n// patterns for files and other resources.\nfunc (h *Handle) Delete() {\n\th.Close()\n}\n\nfunc (h *Handle) newNetlinkRequest(proto, flags int) *nl.NetlinkRequest {\n\t// Do this so that package API still use nl package variable nextSeqNr\n\tif h.sockets == nil {\n\t\treturn nl.NewNetlinkRequest(proto, flags)\n\t}\n\treturn &nl.NetlinkRequest{\n\t\tNlMsghdr: unix.NlMsghdr{\n\t\t\tLen:   uint32(unix.SizeofNlMsghdr),\n\t\t\tType:  uint16(proto),\n\t\t\tFlags: unix.NLM_F_REQUEST | uint16(flags),\n\t\t},\n\t\tSockets: h.sockets,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/handle_unspecified.go",
    "content": "//go:build !linux\n// +build !linux\n\npackage netlink\n\nimport (\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/vishvananda/netns\"\n)\n\ntype Handle struct{}\n\nfunc NewHandle(nlFamilies ...int) (*Handle, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc NewHandleAt(ns netns.NsHandle, nlFamilies ...int) (*Handle, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc NewHandleAtFrom(newNs, curNs netns.NsHandle) (*Handle, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc (h *Handle) Close() {}\n\nfunc (h *Handle) Delete() {}\n\nfunc (h *Handle) SupportsNetlinkFamily(nlFamily int) bool {\n\treturn false\n}\n\nfunc (h *Handle) SetSocketTimeout(to time.Duration) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) SetPromiscOn(link Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) SetPromiscOff(link Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetUp(link Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetDown(link Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetMTU(link Link, mtu int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetName(link Link, name string) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetAlias(link Link, name string) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetHardwareAddr(link Link, hwaddr net.HardwareAddr) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetVfVlan(link Link, vf, vlan int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetVfVlanQos(link Link, vf, vlan, qos int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetVfVlanQosProto(link Link, vf, vlan, qos, proto int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetVfTxRate(link Link, vf, rate int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetVfRate(link Link, vf, minRate, maxRate int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetMaster(link Link, master Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetNoMaster(link Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetMasterByIndex(link Link, masterIndex int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetNsPid(link Link, nspid int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetNsFd(link Link, fd int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkAdd(link Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkDel(link Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkByName(name string) (Link, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc (h *Handle) LinkByAlias(alias string) (Link, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc (h *Handle) LinkByIndex(index int) (Link, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc (h *Handle) LinkList() ([]Link, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetHairpin(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetGuard(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetFastLeave(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetLearning(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetRootBlock(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetFlood(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetTxQLen(link Link, qlen int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetGroup(link Link, group int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetGSOMaxSize(link Link, maxSize int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetGROMaxSize(link Link, maxSize int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetGSOIPv4MaxSize(link Link, maxSize int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetGROIPv4MaxSize(link Link, maxSize int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) LinkSetIP6AddrGenMode(link Link, mode int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) setProtinfoAttr(link Link, mode bool, attr int) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) AddrAdd(link Link, addr *Addr) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) AddrDel(link Link, addr *Addr) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) AddrList(link Link, family int) ([]Addr, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc (h *Handle) ClassDel(class Class) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) ClassChange(class Class) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) ClassReplace(class Class) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) ClassAdd(class Class) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) ClassList(link Link, parent uint32) ([]Class, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc (h *Handle) FilterDel(filter Filter) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) FilterAdd(filter Filter) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) FilterList(link Link, parent uint32) ([]Filter, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc (h *Handle) NeighAdd(neigh *Neigh) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) NeighSet(neigh *Neigh) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) NeighAppend(neigh *Neigh) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) NeighDel(neigh *Neigh) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) NeighList(linkIndex, family int) ([]Neigh, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc (h *Handle) NeighProxyList(linkIndex, family int) ([]Neigh, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc (h *Handle) RouteAdd(route *Route) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) RouteAppend(route *Route) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) RouteChange(route *Route) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) RouteDel(route *Route) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) RouteGet(destination net.IP) ([]Route, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc (h *Handle) RouteList(link Link, family int) ([]Route, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc (h *Handle) RouteListFiltered(family int, filter *Route, filterMask uint64) ([]Route, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc (h *Handle) RouteReplace(route *Route) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) RuleAdd(rule *Rule) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) RuleDel(rule *Rule) error {\n\treturn ErrNotImplemented\n}\n\nfunc (h *Handle) RuleList(family int) ([]Rule, error) {\n\treturn nil, ErrNotImplemented\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/inet_diag.go",
    "content": "package netlink\n\n// INET_DIAG constatns\nconst (\n\tINET_DIAG_NONE = iota\n\tINET_DIAG_MEMINFO\n\tINET_DIAG_INFO\n\tINET_DIAG_VEGASINFO\n\tINET_DIAG_CONG\n\tINET_DIAG_TOS\n\tINET_DIAG_TCLASS\n\tINET_DIAG_SKMEMINFO\n\tINET_DIAG_SHUTDOWN\n\tINET_DIAG_DCTCPINFO\n\tINET_DIAG_PROTOCOL\n\tINET_DIAG_SKV6ONLY\n\tINET_DIAG_LOCALS\n\tINET_DIAG_PEERS\n\tINET_DIAG_PAD\n\tINET_DIAG_MARK\n\tINET_DIAG_BBRINFO\n\tINET_DIAG_CLASS_ID\n\tINET_DIAG_MD5SIG\n\tINET_DIAG_ULP_INFO\n\tINET_DIAG_SK_BPF_STORAGES\n\tINET_DIAG_CGROUP_ID\n\tINET_DIAG_SOCKOPT\n\tINET_DIAG_MAX\n)\n\ntype InetDiagTCPInfoResp struct {\n\tInetDiagMsg *Socket\n\tTCPInfo     *TCPInfo\n\tTCPBBRInfo  *TCPBBRInfo\n}\n\ntype InetDiagUDPInfoResp struct {\n\tInetDiagMsg *Socket\n\tMemory      *MemInfo\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/ioctl_linux.go",
    "content": "package netlink\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// ioctl for statistics.\nconst (\n\t// ETHTOOL_GSSET_INFO gets string set info\n\tETHTOOL_GSSET_INFO = 0x00000037\n\t// SIOCETHTOOL is Ethtool interface\n\tSIOCETHTOOL = 0x8946\n\t// ETHTOOL_GSTRINGS gets specified string set\n\tETHTOOL_GSTRINGS = 0x0000001b\n\t// ETHTOOL_GSTATS gets NIC-specific statistics\n\tETHTOOL_GSTATS = 0x0000001d\n)\n\n// string set id.\nconst (\n\t// ETH_SS_TEST is self-test result names, for use with %ETHTOOL_TEST\n\tETH_SS_TEST = iota\n\t// ETH_SS_STATS statistic names, for use with %ETHTOOL_GSTATS\n\tETH_SS_STATS\n\t// ETH_SS_PRIV_FLAGS are driver private flag names\n\tETH_SS_PRIV_FLAGS\n\t// _ETH_SS_NTUPLE_FILTERS is deprecated\n\t_ETH_SS_NTUPLE_FILTERS\n\t// ETH_SS_FEATURES are device feature names\n\tETH_SS_FEATURES\n\t// ETH_SS_RSS_HASH_FUNCS is RSS hush function names\n\tETH_SS_RSS_HASH_FUNCS\n)\n\n// IfreqSlave is a struct for ioctl bond manipulation syscalls.\n// It is used to assign slave to bond interface with Name.\ntype IfreqSlave struct {\n\tName  [unix.IFNAMSIZ]byte\n\tSlave [unix.IFNAMSIZ]byte\n}\n\n// Ifreq is a struct for ioctl ethernet manipulation syscalls.\ntype Ifreq struct {\n\tName [unix.IFNAMSIZ]byte\n\tData uintptr\n}\n\n// ethtoolSset is a string set information\ntype ethtoolSset struct {\n\tcmd      uint32\n\treserved uint32\n\tmask     uint64\n\tdata     [1]uint32\n}\n\ntype ethtoolStats struct {\n\tcmd    uint32\n\tnStats uint32\n\t// Followed by nStats * []uint64.\n}\n\n// newIocltSlaveReq returns filled IfreqSlave with proper interface names\n// It is used by ioctl to assign slave to bond master\nfunc newIocltSlaveReq(slave, master string) *IfreqSlave {\n\tifreq := &IfreqSlave{}\n\tcopy(ifreq.Name[:unix.IFNAMSIZ-1], master)\n\tcopy(ifreq.Slave[:unix.IFNAMSIZ-1], slave)\n\treturn ifreq\n}\n\n// newIocltStringSetReq creates request to get interface string set\nfunc newIocltStringSetReq(linkName string) (*Ifreq, *ethtoolSset) {\n\te := &ethtoolSset{\n\t\tcmd:  ETHTOOL_GSSET_INFO,\n\t\tmask: 1 << ETH_SS_STATS,\n\t}\n\n\tifreq := &Ifreq{Data: uintptr(unsafe.Pointer(e))}\n\tcopy(ifreq.Name[:unix.IFNAMSIZ-1], linkName)\n\treturn ifreq, e\n}\n\n// getSocketUDP returns file descriptor to new UDP socket\n// It is used for communication with ioctl interface.\nfunc getSocketUDP() (int, error) {\n\treturn syscall.Socket(unix.AF_INET, unix.SOCK_DGRAM|unix.SOCK_CLOEXEC, 0)\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/ipset_linux.go",
    "content": "package netlink\n\nimport (\n\t\"encoding/binary\"\n\t\"log\"\n\t\"net\"\n\t\"syscall\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// IPSetEntry is used for adding, updating, retreiving and deleting entries\ntype IPSetEntry struct {\n\tComment  string\n\tMAC      net.HardwareAddr\n\tIP       net.IP\n\tCIDR     uint8\n\tTimeout  *uint32\n\tPackets  *uint64\n\tBytes    *uint64\n\tProtocol *uint8\n\tPort     *uint16\n\tIP2      net.IP\n\tCIDR2    uint8\n\tIFace    string\n\tMark     *uint32\n\n\tReplace bool // replace existing entry\n}\n\n// IPSetResult is the result of a dump request for a set\ntype IPSetResult struct {\n\tNfgenmsg           *nl.Nfgenmsg\n\tProtocol           uint8\n\tProtocolMinVersion uint8\n\tRevision           uint8\n\tFamily             uint8\n\tFlags              uint8\n\tSetName            string\n\tTypeName           string\n\tComment            string\n\tMarkMask           uint32\n\n\tIPFrom   net.IP\n\tIPTo     net.IP\n\tPortFrom uint16\n\tPortTo   uint16\n\n\tHashSize     uint32\n\tNumEntries   uint32\n\tMaxElements  uint32\n\tReferences   uint32\n\tSizeInMemory uint32\n\tCadtFlags    uint32\n\tTimeout      *uint32\n\tLineNo       uint32\n\n\tEntries []IPSetEntry\n}\n\n// IpsetCreateOptions is the options struct for creating a new ipset\ntype IpsetCreateOptions struct {\n\tReplace  bool // replace existing ipset\n\tTimeout  *uint32\n\tCounters bool\n\tComments bool\n\tSkbinfo  bool\n\n\tFamily      uint8\n\tRevision    uint8\n\tIPFrom      net.IP\n\tIPTo        net.IP\n\tPortFrom    uint16\n\tPortTo      uint16\n\tMaxElements uint32\n}\n\n// IpsetProtocol returns the ipset protocol version from the kernel\nfunc IpsetProtocol() (uint8, uint8, error) {\n\treturn pkgHandle.IpsetProtocol()\n}\n\n// IpsetCreate creates a new ipset\nfunc IpsetCreate(setname, typename string, options IpsetCreateOptions) error {\n\treturn pkgHandle.IpsetCreate(setname, typename, options)\n}\n\n// IpsetDestroy destroys an existing ipset\nfunc IpsetDestroy(setname string) error {\n\treturn pkgHandle.IpsetDestroy(setname)\n}\n\n// IpsetFlush flushes an existing ipset\nfunc IpsetFlush(setname string) error {\n\treturn pkgHandle.IpsetFlush(setname)\n}\n\n// IpsetSwap swaps two ipsets.\nfunc IpsetSwap(setname, othersetname string) error {\n\treturn pkgHandle.IpsetSwap(setname, othersetname)\n}\n\n// IpsetList dumps an specific ipset.\nfunc IpsetList(setname string) (*IPSetResult, error) {\n\treturn pkgHandle.IpsetList(setname)\n}\n\n// IpsetListAll dumps all ipsets.\nfunc IpsetListAll() ([]IPSetResult, error) {\n\treturn pkgHandle.IpsetListAll()\n}\n\n// IpsetAdd adds an entry to an existing ipset.\nfunc IpsetAdd(setname string, entry *IPSetEntry) error {\n\treturn pkgHandle.IpsetAdd(setname, entry)\n}\n\n// IpsetDel deletes an entry from an existing ipset.\nfunc IpsetDel(setname string, entry *IPSetEntry) error {\n\treturn pkgHandle.IpsetDel(setname, entry)\n}\n\n// IpsetTest tests whether an entry is in a set or not.\nfunc IpsetTest(setname string, entry *IPSetEntry) (bool, error) {\n\treturn pkgHandle.IpsetTest(setname, entry)\n}\n\nfunc (h *Handle) IpsetProtocol() (protocol uint8, minVersion uint8, err error) {\n\treq := h.newIpsetRequest(nl.IPSET_CMD_PROTOCOL)\n\tmsgs, err := req.Execute(unix.NETLINK_NETFILTER, 0)\n\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\tresponse := ipsetUnserialize(msgs)\n\treturn response.Protocol, response.ProtocolMinVersion, nil\n}\n\nfunc (h *Handle) IpsetCreate(setname, typename string, options IpsetCreateOptions) error {\n\treq := h.newIpsetRequest(nl.IPSET_CMD_CREATE)\n\n\tif !options.Replace {\n\t\treq.Flags |= unix.NLM_F_EXCL\n\t}\n\n\treq.AddData(nl.NewRtAttr(nl.IPSET_ATTR_SETNAME, nl.ZeroTerminated(setname)))\n\treq.AddData(nl.NewRtAttr(nl.IPSET_ATTR_TYPENAME, nl.ZeroTerminated(typename)))\n\n\tcadtFlags := optionsToBitflag(options)\n\n\trevision := options.Revision\n\tif revision == 0 {\n\t\trevision = getIpsetDefaultRevision(typename, cadtFlags)\n\t}\n\treq.AddData(nl.NewRtAttr(nl.IPSET_ATTR_REVISION, nl.Uint8Attr(revision)))\n\n\tdata := nl.NewRtAttr(nl.IPSET_ATTR_DATA|int(nl.NLA_F_NESTED), nil)\n\n\tvar family uint8\n\tswitch typename {\n\tcase \"hash:mac\":\n\tcase \"bitmap:port\":\n\t\tbuf := make([]byte, 4)\n\t\tbinary.BigEndian.PutUint16(buf, options.PortFrom)\n\t\tbinary.BigEndian.PutUint16(buf[2:], options.PortTo)\n\t\tdata.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_PORT_FROM|int(nl.NLA_F_NET_BYTEORDER), buf[:2]))\n\t\tdata.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_PORT_TO|int(nl.NLA_F_NET_BYTEORDER), buf[2:]))\n\tdefault:\n\t\tfamily = options.Family\n\t\tif family == 0 {\n\t\t\tfamily = unix.AF_INET\n\t\t}\n\t}\n\n\treq.AddData(nl.NewRtAttr(nl.IPSET_ATTR_FAMILY, nl.Uint8Attr(family)))\n\n\tif options.MaxElements != 0 {\n\t\tdata.AddChild(&nl.Uint32Attribute{Type: nl.IPSET_ATTR_MAXELEM | nl.NLA_F_NET_BYTEORDER, Value: options.MaxElements})\n\t}\n\n\tif timeout := options.Timeout; timeout != nil {\n\t\tdata.AddChild(&nl.Uint32Attribute{Type: nl.IPSET_ATTR_TIMEOUT | nl.NLA_F_NET_BYTEORDER, Value: *timeout})\n\t}\n\n\tif cadtFlags != 0 {\n\t\tdata.AddChild(&nl.Uint32Attribute{Type: nl.IPSET_ATTR_CADT_FLAGS | nl.NLA_F_NET_BYTEORDER, Value: cadtFlags})\n\t}\n\n\treq.AddData(data)\n\t_, err := ipsetExecute(req)\n\treturn err\n}\n\nfunc (h *Handle) IpsetDestroy(setname string) error {\n\treq := h.newIpsetRequest(nl.IPSET_CMD_DESTROY)\n\treq.AddData(nl.NewRtAttr(nl.IPSET_ATTR_SETNAME, nl.ZeroTerminated(setname)))\n\t_, err := ipsetExecute(req)\n\treturn err\n}\n\nfunc (h *Handle) IpsetFlush(setname string) error {\n\treq := h.newIpsetRequest(nl.IPSET_CMD_FLUSH)\n\treq.AddData(nl.NewRtAttr(nl.IPSET_ATTR_SETNAME, nl.ZeroTerminated(setname)))\n\t_, err := ipsetExecute(req)\n\treturn err\n}\n\nfunc (h *Handle) IpsetSwap(setname, othersetname string) error {\n\treq := h.newIpsetRequest(nl.IPSET_CMD_SWAP)\n\treq.AddData(nl.NewRtAttr(nl.IPSET_ATTR_SETNAME, nl.ZeroTerminated(setname)))\n\treq.AddData(nl.NewRtAttr(nl.IPSET_ATTR_TYPENAME, nl.ZeroTerminated(othersetname)))\n\t_, err := ipsetExecute(req)\n\treturn err\n}\n\nfunc (h *Handle) IpsetList(name string) (*IPSetResult, error) {\n\treq := h.newIpsetRequest(nl.IPSET_CMD_LIST)\n\treq.AddData(nl.NewRtAttr(nl.IPSET_ATTR_SETNAME, nl.ZeroTerminated(name)))\n\n\tmsgs, err := ipsetExecute(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresult := ipsetUnserialize(msgs)\n\treturn &result, nil\n}\n\nfunc (h *Handle) IpsetListAll() ([]IPSetResult, error) {\n\treq := h.newIpsetRequest(nl.IPSET_CMD_LIST)\n\n\tmsgs, err := ipsetExecute(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresult := make([]IPSetResult, len(msgs))\n\tfor i, msg := range msgs {\n\t\tresult[i].unserialize(msg)\n\t}\n\n\treturn result, nil\n}\n\n// IpsetAdd adds an entry to an existing ipset.\nfunc (h *Handle) IpsetAdd(setname string, entry *IPSetEntry) error {\n\treturn h.ipsetAddDel(nl.IPSET_CMD_ADD, setname, entry)\n}\n\n// IpsetDel deletes an entry from an existing ipset.\nfunc (h *Handle) IpsetDel(setname string, entry *IPSetEntry) error {\n\treturn h.ipsetAddDel(nl.IPSET_CMD_DEL, setname, entry)\n}\n\nfunc encodeIP(ip net.IP) (*nl.RtAttr, error) {\n\ttyp := int(nl.NLA_F_NET_BYTEORDER)\n\tif ip4 := ip.To4(); ip4 != nil {\n\t\ttyp |= nl.IPSET_ATTR_IPADDR_IPV4\n\t\tip = ip4\n\t} else {\n\t\ttyp |= nl.IPSET_ATTR_IPADDR_IPV6\n\t}\n\n\treturn nl.NewRtAttr(typ, ip), nil\n}\n\nfunc buildEntryData(entry *IPSetEntry) (*nl.RtAttr, error) {\n\tdata := nl.NewRtAttr(nl.IPSET_ATTR_DATA|int(nl.NLA_F_NESTED), nil)\n\n\tif entry.Comment != \"\" {\n\t\tdata.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_COMMENT, nl.ZeroTerminated(entry.Comment)))\n\t}\n\n\tif entry.Timeout != nil {\n\t\tdata.AddChild(&nl.Uint32Attribute{Type: nl.IPSET_ATTR_TIMEOUT | nl.NLA_F_NET_BYTEORDER, Value: *entry.Timeout})\n\t}\n\n\tif entry.IP != nil {\n\t\tnestedData, err := encodeIP(entry.IP)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdata.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_IP|int(nl.NLA_F_NESTED), nestedData.Serialize()))\n\t}\n\n\tif entry.MAC != nil {\n\t\tdata.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_ETHER, entry.MAC))\n\t}\n\n\tif entry.CIDR != 0 {\n\t\tdata.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_CIDR, nl.Uint8Attr(entry.CIDR)))\n\t}\n\n\tif entry.IP2 != nil {\n\t\tnestedData, err := encodeIP(entry.IP2)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdata.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_IP2|int(nl.NLA_F_NESTED), nestedData.Serialize()))\n\t}\n\n\tif entry.CIDR2 != 0 {\n\t\tdata.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_CIDR2, nl.Uint8Attr(entry.CIDR2)))\n\t}\n\n\tif entry.Port != nil {\n\t\tif entry.Protocol == nil {\n\t\t\t// use tcp protocol as default\n\t\t\tval := uint8(unix.IPPROTO_TCP)\n\t\t\tentry.Protocol = &val\n\t\t}\n\t\tdata.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_PROTO, nl.Uint8Attr(*entry.Protocol)))\n\t\tbuf := make([]byte, 2)\n\t\tbinary.BigEndian.PutUint16(buf, *entry.Port)\n\t\tdata.AddChild(nl.NewRtAttr(int(nl.IPSET_ATTR_PORT|nl.NLA_F_NET_BYTEORDER), buf))\n\t}\n\n\tif entry.IFace != \"\" {\n\t\tdata.AddChild(nl.NewRtAttr(nl.IPSET_ATTR_IFACE, nl.ZeroTerminated(entry.IFace)))\n\t}\n\n\tif entry.Mark != nil {\n\t\tdata.AddChild(&nl.Uint32Attribute{Type: nl.IPSET_ATTR_MARK | nl.NLA_F_NET_BYTEORDER, Value: *entry.Mark})\n\t}\n\treturn data, nil\n}\n\nfunc (h *Handle) ipsetAddDel(nlCmd int, setname string, entry *IPSetEntry) error {\n\treq := h.newIpsetRequest(nlCmd)\n\treq.AddData(nl.NewRtAttr(nl.IPSET_ATTR_SETNAME, nl.ZeroTerminated(setname)))\n\n\tif !entry.Replace {\n\t\treq.Flags |= unix.NLM_F_EXCL\n\t}\n\n\tdata, err := buildEntryData(entry)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdata.AddChild(&nl.Uint32Attribute{Type: nl.IPSET_ATTR_LINENO | nl.NLA_F_NET_BYTEORDER, Value: 0})\n\treq.AddData(data)\n\n\t_, err = ipsetExecute(req)\n\treturn err\n}\n\nfunc (h *Handle) IpsetTest(setname string, entry *IPSetEntry) (bool, error) {\n\treq := h.newIpsetRequest(nl.IPSET_CMD_TEST)\n\treq.AddData(nl.NewRtAttr(nl.IPSET_ATTR_SETNAME, nl.ZeroTerminated(setname)))\n\n\tif !entry.Replace {\n\t\treq.Flags |= unix.NLM_F_EXCL\n\t}\n\n\tdata, err := buildEntryData(entry)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treq.AddData(data)\n\n\t_, err = ipsetExecute(req)\n\tif err != nil {\n\t\tif err == nl.IPSetError(nl.IPSET_ERR_EXIST) {\n\t\t\t// not exist\n\t\t\treturn false, nil\n\t\t}\n\t\treturn false, err\n\t}\n\treturn true, nil\n}\n\nfunc (h *Handle) newIpsetRequest(cmd int) *nl.NetlinkRequest {\n\treq := h.newNetlinkRequest(cmd|(unix.NFNL_SUBSYS_IPSET<<8), nl.GetIpsetFlags(cmd))\n\n\t// Add the netfilter header\n\tmsg := &nl.Nfgenmsg{\n\t\tNfgenFamily: uint8(unix.AF_NETLINK),\n\t\tVersion:     nl.NFNETLINK_V0,\n\t\tResId:       0,\n\t}\n\treq.AddData(msg)\n\treq.AddData(nl.NewRtAttr(nl.IPSET_ATTR_PROTOCOL, nl.Uint8Attr(nl.IPSET_PROTOCOL)))\n\n\treturn req\n}\n\n// NOTE: This can't just take typename into account, it also has to take desired\n// feature support into account, on a per-set-type basis, to return the correct revision, see e.g.\n// https://github.com/Olipro/ipset/blob/9f145b49100104d6570fe5c31a5236816ebb4f8f/kernel/net/netfilter/ipset/ip_set_hash_ipport.c#L30\n//\n// This means that whenever a new \"type\" of ipset is added, returning the \"correct\" default revision\n// requires adding a new case here for that type, and consulting the ipset C code to figure out the correct\n// combination of type name, feature bit flags, and revision ranges.\n//\n// Care should be taken as some types share the same revision ranges for the same features, and others do not.\n// When in doubt, mimic the C code.\nfunc getIpsetDefaultRevision(typename string, featureFlags uint32) uint8 {\n\tswitch typename {\n\tcase \"hash:ip,port\",\n\t\t\"hash:ip,port,ip\":\n\t\t// Taken from\n\t\t// - ipset/kernel/net/netfilter/ipset/ip_set_hash_ipport.c\n\t\t// - ipset/kernel/net/netfilter/ipset/ip_set_hash_ipportip.c\n\t\tif (featureFlags & nl.IPSET_FLAG_WITH_SKBINFO) != 0 {\n\t\t\treturn 5\n\t\t}\n\n\t\tif (featureFlags & nl.IPSET_FLAG_WITH_FORCEADD) != 0 {\n\t\t\treturn 4\n\t\t}\n\n\t\tif (featureFlags & nl.IPSET_FLAG_WITH_COMMENT) != 0 {\n\t\t\treturn 3\n\t\t}\n\n\t\tif (featureFlags & nl.IPSET_FLAG_WITH_COUNTERS) != 0 {\n\t\t\treturn 2\n\t\t}\n\n\t\t// the min revision this library supports for this type\n\t\treturn 1\n\n\tcase \"hash:ip,port,net\",\n\t\t\"hash:net,port\":\n\t\t// Taken from\n\t\t// - ipset/kernel/net/netfilter/ipset/ip_set_hash_ipportnet.c\n\t\t// - ipset/kernel/net/netfilter/ipset/ip_set_hash_netport.c\n\t\tif (featureFlags & nl.IPSET_FLAG_WITH_SKBINFO) != 0 {\n\t\t\treturn 7\n\t\t}\n\n\t\tif (featureFlags & nl.IPSET_FLAG_WITH_FORCEADD) != 0 {\n\t\t\treturn 6\n\t\t}\n\n\t\tif (featureFlags & nl.IPSET_FLAG_WITH_COMMENT) != 0 {\n\t\t\treturn 5\n\t\t}\n\n\t\tif (featureFlags & nl.IPSET_FLAG_WITH_COUNTERS) != 0 {\n\t\t\treturn 4\n\t\t}\n\n\t\tif (featureFlags & nl.IPSET_FLAG_NOMATCH) != 0 {\n\t\t\treturn 3\n\t\t}\n\t\t// the min revision this library supports for this type\n\t\treturn 2\n\n\tcase \"hash:ip\":\n\t\t// Taken from\n\t\t// - ipset/kernel/net/netfilter/ipset/ip_set_hash_ip.c\n\t\tif (featureFlags & nl.IPSET_FLAG_WITH_SKBINFO) != 0 {\n\t\t\treturn 4\n\t\t}\n\n\t\tif (featureFlags & nl.IPSET_FLAG_WITH_FORCEADD) != 0 {\n\t\t\treturn 3\n\t\t}\n\n\t\tif (featureFlags & nl.IPSET_FLAG_WITH_COMMENT) != 0 {\n\t\t\treturn 2\n\t\t}\n\n\t\t// the min revision this library supports for this type\n\t\treturn 1\n\t}\n\n\t// can't map the correct revision for this type.\n\treturn 0\n}\n\nfunc ipsetExecute(req *nl.NetlinkRequest) (msgs [][]byte, err error) {\n\tmsgs, err = req.Execute(unix.NETLINK_NETFILTER, 0)\n\n\tif err != nil {\n\t\tif errno := int(err.(syscall.Errno)); errno >= nl.IPSET_ERR_PRIVATE {\n\t\t\terr = nl.IPSetError(uintptr(errno))\n\t\t}\n\t}\n\treturn\n}\n\nfunc ipsetUnserialize(msgs [][]byte) (result IPSetResult) {\n\tfor _, msg := range msgs {\n\t\tresult.unserialize(msg)\n\t}\n\treturn result\n}\n\nfunc (result *IPSetResult) unserialize(msg []byte) {\n\tresult.Nfgenmsg = nl.DeserializeNfgenmsg(msg)\n\n\tfor attr := range nl.ParseAttributes(msg[4:]) {\n\t\tswitch attr.Type {\n\t\tcase nl.IPSET_ATTR_PROTOCOL:\n\t\t\tresult.Protocol = attr.Value[0]\n\t\tcase nl.IPSET_ATTR_SETNAME:\n\t\t\tresult.SetName = nl.BytesToString(attr.Value)\n\t\tcase nl.IPSET_ATTR_COMMENT:\n\t\t\tresult.Comment = nl.BytesToString(attr.Value)\n\t\tcase nl.IPSET_ATTR_TYPENAME:\n\t\t\tresult.TypeName = nl.BytesToString(attr.Value)\n\t\tcase nl.IPSET_ATTR_REVISION:\n\t\t\tresult.Revision = attr.Value[0]\n\t\tcase nl.IPSET_ATTR_FAMILY:\n\t\t\tresult.Family = attr.Value[0]\n\t\tcase nl.IPSET_ATTR_FLAGS:\n\t\t\tresult.Flags = attr.Value[0]\n\t\tcase nl.IPSET_ATTR_DATA | nl.NLA_F_NESTED:\n\t\t\tresult.parseAttrData(attr.Value)\n\t\tcase nl.IPSET_ATTR_ADT | nl.NLA_F_NESTED:\n\t\t\tresult.parseAttrADT(attr.Value)\n\t\tcase nl.IPSET_ATTR_PROTOCOL_MIN:\n\t\t\tresult.ProtocolMinVersion = attr.Value[0]\n\t\tcase nl.IPSET_ATTR_MARKMASK:\n\t\t\tresult.MarkMask = attr.Uint32()\n\t\tdefault:\n\t\t\tlog.Printf(\"unknown ipset attribute from kernel: %+v %v\", attr, attr.Type&nl.NLA_TYPE_MASK)\n\t\t}\n\t}\n}\n\nfunc (result *IPSetResult) parseAttrData(data []byte) {\n\tfor attr := range nl.ParseAttributes(data) {\n\t\tswitch attr.Type {\n\t\tcase nl.IPSET_ATTR_HASHSIZE | nl.NLA_F_NET_BYTEORDER:\n\t\t\tresult.HashSize = attr.Uint32()\n\t\tcase nl.IPSET_ATTR_MAXELEM | nl.NLA_F_NET_BYTEORDER:\n\t\t\tresult.MaxElements = attr.Uint32()\n\t\tcase nl.IPSET_ATTR_TIMEOUT | nl.NLA_F_NET_BYTEORDER:\n\t\t\tval := attr.Uint32()\n\t\t\tresult.Timeout = &val\n\t\tcase nl.IPSET_ATTR_ELEMENTS | nl.NLA_F_NET_BYTEORDER:\n\t\t\tresult.NumEntries = attr.Uint32()\n\t\tcase nl.IPSET_ATTR_REFERENCES | nl.NLA_F_NET_BYTEORDER:\n\t\t\tresult.References = attr.Uint32()\n\t\tcase nl.IPSET_ATTR_MEMSIZE | nl.NLA_F_NET_BYTEORDER:\n\t\t\tresult.SizeInMemory = attr.Uint32()\n\t\tcase nl.IPSET_ATTR_CADT_FLAGS | nl.NLA_F_NET_BYTEORDER:\n\t\t\tresult.CadtFlags = attr.Uint32()\n\t\tcase nl.IPSET_ATTR_IP | nl.NLA_F_NESTED:\n\t\t\tfor nested := range nl.ParseAttributes(attr.Value) {\n\t\t\t\tswitch nested.Type {\n\t\t\t\tcase nl.IPSET_ATTR_IP | nl.NLA_F_NET_BYTEORDER:\n\t\t\t\t\tresult.Entries = append(result.Entries, IPSetEntry{IP: nested.Value})\n\t\t\t\tcase nl.IPSET_ATTR_IP:\n\t\t\t\t\tresult.IPFrom = nested.Value\n\t\t\t\tdefault:\n\t\t\t\t\tlog.Printf(\"unknown nested ipset data attribute from kernel: %+v %v\", nested, nested.Type&nl.NLA_TYPE_MASK)\n\t\t\t\t}\n\t\t\t}\n\t\tcase nl.IPSET_ATTR_IP_TO | nl.NLA_F_NESTED:\n\t\t\tfor nested := range nl.ParseAttributes(attr.Value) {\n\t\t\t\tswitch nested.Type {\n\t\t\t\tcase nl.IPSET_ATTR_IP:\n\t\t\t\t\tresult.IPTo = nested.Value\n\t\t\t\tdefault:\n\t\t\t\t\tlog.Printf(\"unknown nested ipset data attribute from kernel: %+v %v\", nested, nested.Type&nl.NLA_TYPE_MASK)\n\t\t\t\t}\n\t\t\t}\n\t\tcase nl.IPSET_ATTR_PORT_FROM | nl.NLA_F_NET_BYTEORDER:\n\t\t\tresult.PortFrom = networkOrder.Uint16(attr.Value)\n\t\tcase nl.IPSET_ATTR_PORT_TO | nl.NLA_F_NET_BYTEORDER:\n\t\t\tresult.PortTo = networkOrder.Uint16(attr.Value)\n\t\tcase nl.IPSET_ATTR_CADT_LINENO | nl.NLA_F_NET_BYTEORDER:\n\t\t\tresult.LineNo = attr.Uint32()\n\t\tcase nl.IPSET_ATTR_COMMENT:\n\t\t\tresult.Comment = nl.BytesToString(attr.Value)\n\t\tcase nl.IPSET_ATTR_MARKMASK:\n\t\t\tresult.MarkMask = attr.Uint32()\n\t\tdefault:\n\t\t\tlog.Printf(\"unknown ipset data attribute from kernel: %+v %v\", attr, attr.Type&nl.NLA_TYPE_MASK)\n\t\t}\n\t}\n}\n\nfunc (result *IPSetResult) parseAttrADT(data []byte) {\n\tfor attr := range nl.ParseAttributes(data) {\n\t\tswitch attr.Type {\n\t\tcase nl.IPSET_ATTR_DATA | nl.NLA_F_NESTED:\n\t\t\tresult.Entries = append(result.Entries, parseIPSetEntry(attr.Value))\n\t\tdefault:\n\t\t\tlog.Printf(\"unknown ADT attribute from kernel: %+v %v\", attr, attr.Type&nl.NLA_TYPE_MASK)\n\t\t}\n\t}\n}\n\nfunc parseIPSetEntry(data []byte) (entry IPSetEntry) {\n\tfor attr := range nl.ParseAttributes(data) {\n\t\tswitch attr.Type {\n\t\tcase nl.IPSET_ATTR_TIMEOUT | nl.NLA_F_NET_BYTEORDER:\n\t\t\tval := attr.Uint32()\n\t\t\tentry.Timeout = &val\n\t\tcase nl.IPSET_ATTR_BYTES | nl.NLA_F_NET_BYTEORDER:\n\t\t\tval := attr.Uint64()\n\t\t\tentry.Bytes = &val\n\t\tcase nl.IPSET_ATTR_PACKETS | nl.NLA_F_NET_BYTEORDER:\n\t\t\tval := attr.Uint64()\n\t\t\tentry.Packets = &val\n\t\tcase nl.IPSET_ATTR_ETHER:\n\t\t\tentry.MAC = net.HardwareAddr(attr.Value)\n\t\tcase nl.IPSET_ATTR_IP:\n\t\t\tentry.IP = net.IP(attr.Value)\n\t\tcase nl.IPSET_ATTR_COMMENT:\n\t\t\tentry.Comment = nl.BytesToString(attr.Value)\n\t\tcase nl.IPSET_ATTR_IP | nl.NLA_F_NESTED:\n\t\t\tfor attr := range nl.ParseAttributes(attr.Value) {\n\t\t\t\tswitch attr.Type {\n\t\t\t\tcase nl.IPSET_ATTR_IPADDR_IPV4, nl.IPSET_ATTR_IPADDR_IPV6:\n\t\t\t\t\tentry.IP = net.IP(attr.Value)\n\t\t\t\tdefault:\n\t\t\t\t\tlog.Printf(\"unknown nested ADT attribute from kernel: %+v\", attr)\n\t\t\t\t}\n\t\t\t}\n\t\tcase nl.IPSET_ATTR_IP2 | nl.NLA_F_NESTED:\n\t\t\tfor attr := range nl.ParseAttributes(attr.Value) {\n\t\t\t\tswitch attr.Type {\n\t\t\t\tcase nl.IPSET_ATTR_IPADDR_IPV4, nl.IPSET_ATTR_IPADDR_IPV6:\n\t\t\t\t\tentry.IP2 = net.IP(attr.Value)\n\t\t\t\tdefault:\n\t\t\t\t\tlog.Printf(\"unknown nested ADT attribute from kernel: %+v\", attr)\n\t\t\t\t}\n\t\t\t}\n\t\tcase nl.IPSET_ATTR_CIDR:\n\t\t\tentry.CIDR = attr.Value[0]\n\t\tcase nl.IPSET_ATTR_CIDR2:\n\t\t\tentry.CIDR2 = attr.Value[0]\n\t\tcase nl.IPSET_ATTR_PORT | nl.NLA_F_NET_BYTEORDER:\n\t\t\tval := networkOrder.Uint16(attr.Value)\n\t\t\tentry.Port = &val\n\t\tcase nl.IPSET_ATTR_PROTO:\n\t\t\tval := attr.Value[0]\n\t\t\tentry.Protocol = &val\n\t\tcase nl.IPSET_ATTR_IFACE:\n\t\t\tentry.IFace = nl.BytesToString(attr.Value)\n\t\tcase nl.IPSET_ATTR_MARK | nl.NLA_F_NET_BYTEORDER:\n\t\t\tval := attr.Uint32()\n\t\t\tentry.Mark = &val\n\t\tdefault:\n\t\t\tlog.Printf(\"unknown ADT attribute from kernel: %+v\", attr)\n\t\t}\n\t}\n\treturn\n}\n\nfunc optionsToBitflag(options IpsetCreateOptions) uint32 {\n\tvar cadtFlags uint32\n\n\tif options.Comments {\n\t\tcadtFlags |= nl.IPSET_FLAG_WITH_COMMENT\n\t}\n\tif options.Counters {\n\t\tcadtFlags |= nl.IPSET_FLAG_WITH_COUNTERS\n\t}\n\tif options.Skbinfo {\n\t\tcadtFlags |= nl.IPSET_FLAG_WITH_SKBINFO\n\t}\n\n\treturn cadtFlags\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/link.go",
    "content": "package netlink\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"strconv\"\n)\n\n// Link represents a link device from netlink. Shared link attributes\n// like name may be retrieved using the Attrs() method. Unique data\n// can be retrieved by casting the object to the proper type.\ntype Link interface {\n\tAttrs() *LinkAttrs\n\tType() string\n}\n\ntype (\n\tNsPid int\n\tNsFd  int\n)\n\n// LinkAttrs represents data shared by most link types\ntype LinkAttrs struct {\n\tIndex          int\n\tMTU            int\n\tTxQLen         int // Transmit Queue Length\n\tName           string\n\tHardwareAddr   net.HardwareAddr\n\tFlags          net.Flags\n\tRawFlags       uint32\n\tParentIndex    int         // index of the parent link device\n\tMasterIndex    int         // must be the index of a bridge\n\tNamespace      interface{} // nil | NsPid | NsFd\n\tAlias          string\n\tAltNames       []string\n\tStatistics     *LinkStatistics\n\tPromisc        int\n\tAllmulti       int\n\tMulti          int\n\tXdp            *LinkXdp\n\tEncapType      string\n\tProtinfo       *Protinfo\n\tOperState      LinkOperState\n\tPhysSwitchID   int\n\tNetNsID        int\n\tNumTxQueues    int\n\tNumRxQueues    int\n\tTSOMaxSegs     uint32\n\tTSOMaxSize     uint32\n\tGSOMaxSegs     uint32\n\tGSOMaxSize     uint32\n\tGROMaxSize     uint32\n\tGSOIPv4MaxSize uint32\n\tGROIPv4MaxSize uint32\n\tVfs            []VfInfo // virtual functions available on link\n\tGroup          uint32\n\tPermHWAddr     net.HardwareAddr\n\tParentDev      string\n\tParentDevBus   string\n\tSlave          LinkSlave\n}\n\n// LinkSlave represents a slave device.\ntype LinkSlave interface {\n\tSlaveType() string\n}\n\n// VfInfo represents configuration of virtual function\ntype VfInfo struct {\n\tID        int\n\tMac       net.HardwareAddr\n\tVlan      int\n\tQos       int\n\tVlanProto int\n\tTxRate    int // IFLA_VF_TX_RATE  Max TxRate\n\tSpoofchk  bool\n\tLinkState uint32\n\tMaxTxRate uint32 // IFLA_VF_RATE Max TxRate\n\tMinTxRate uint32 // IFLA_VF_RATE Min TxRate\n\tRxPackets uint64\n\tTxPackets uint64\n\tRxBytes   uint64\n\tTxBytes   uint64\n\tMulticast uint64\n\tBroadcast uint64\n\tRxDropped uint64\n\tTxDropped uint64\n\n\tRssQuery uint32\n\tTrust    uint32\n}\n\n// LinkOperState represents the values of the IFLA_OPERSTATE link\n// attribute, which contains the RFC2863 state of the interface.\ntype LinkOperState uint8\n\nconst (\n\tOperUnknown        = iota // Status can't be determined.\n\tOperNotPresent            // Some component is missing.\n\tOperDown                  // Down.\n\tOperLowerLayerDown        // Down due to state of lower layer.\n\tOperTesting               // In some test mode.\n\tOperDormant               // Not up but pending an external event.\n\tOperUp                    // Up, ready to send packets.\n)\n\nfunc (s LinkOperState) String() string {\n\tswitch s {\n\tcase OperNotPresent:\n\t\treturn \"not-present\"\n\tcase OperDown:\n\t\treturn \"down\"\n\tcase OperLowerLayerDown:\n\t\treturn \"lower-layer-down\"\n\tcase OperTesting:\n\t\treturn \"testing\"\n\tcase OperDormant:\n\t\treturn \"dormant\"\n\tcase OperUp:\n\t\treturn \"up\"\n\tdefault:\n\t\treturn \"unknown\"\n\t}\n}\n\n// NewLinkAttrs returns LinkAttrs structure filled with default values\nfunc NewLinkAttrs() LinkAttrs {\n\treturn LinkAttrs{\n\t\tNetNsID: -1,\n\t\tTxQLen:  -1,\n\t}\n}\n\ntype LinkStatistics LinkStatistics64\n\n/*\nRef: struct rtnl_link_stats {...}\n*/\ntype LinkStatistics32 struct {\n\tRxPackets         uint32\n\tTxPackets         uint32\n\tRxBytes           uint32\n\tTxBytes           uint32\n\tRxErrors          uint32\n\tTxErrors          uint32\n\tRxDropped         uint32\n\tTxDropped         uint32\n\tMulticast         uint32\n\tCollisions        uint32\n\tRxLengthErrors    uint32\n\tRxOverErrors      uint32\n\tRxCrcErrors       uint32\n\tRxFrameErrors     uint32\n\tRxFifoErrors      uint32\n\tRxMissedErrors    uint32\n\tTxAbortedErrors   uint32\n\tTxCarrierErrors   uint32\n\tTxFifoErrors      uint32\n\tTxHeartbeatErrors uint32\n\tTxWindowErrors    uint32\n\tRxCompressed      uint32\n\tTxCompressed      uint32\n}\n\nfunc (s32 LinkStatistics32) to64() *LinkStatistics64 {\n\treturn &LinkStatistics64{\n\t\tRxPackets:         uint64(s32.RxPackets),\n\t\tTxPackets:         uint64(s32.TxPackets),\n\t\tRxBytes:           uint64(s32.RxBytes),\n\t\tTxBytes:           uint64(s32.TxBytes),\n\t\tRxErrors:          uint64(s32.RxErrors),\n\t\tTxErrors:          uint64(s32.TxErrors),\n\t\tRxDropped:         uint64(s32.RxDropped),\n\t\tTxDropped:         uint64(s32.TxDropped),\n\t\tMulticast:         uint64(s32.Multicast),\n\t\tCollisions:        uint64(s32.Collisions),\n\t\tRxLengthErrors:    uint64(s32.RxLengthErrors),\n\t\tRxOverErrors:      uint64(s32.RxOverErrors),\n\t\tRxCrcErrors:       uint64(s32.RxCrcErrors),\n\t\tRxFrameErrors:     uint64(s32.RxFrameErrors),\n\t\tRxFifoErrors:      uint64(s32.RxFifoErrors),\n\t\tRxMissedErrors:    uint64(s32.RxMissedErrors),\n\t\tTxAbortedErrors:   uint64(s32.TxAbortedErrors),\n\t\tTxCarrierErrors:   uint64(s32.TxCarrierErrors),\n\t\tTxFifoErrors:      uint64(s32.TxFifoErrors),\n\t\tTxHeartbeatErrors: uint64(s32.TxHeartbeatErrors),\n\t\tTxWindowErrors:    uint64(s32.TxWindowErrors),\n\t\tRxCompressed:      uint64(s32.RxCompressed),\n\t\tTxCompressed:      uint64(s32.TxCompressed),\n\t}\n}\n\n/*\nRef: struct rtnl_link_stats64 {...}\n*/\ntype LinkStatistics64 struct {\n\tRxPackets         uint64\n\tTxPackets         uint64\n\tRxBytes           uint64\n\tTxBytes           uint64\n\tRxErrors          uint64\n\tTxErrors          uint64\n\tRxDropped         uint64\n\tTxDropped         uint64\n\tMulticast         uint64\n\tCollisions        uint64\n\tRxLengthErrors    uint64\n\tRxOverErrors      uint64\n\tRxCrcErrors       uint64\n\tRxFrameErrors     uint64\n\tRxFifoErrors      uint64\n\tRxMissedErrors    uint64\n\tTxAbortedErrors   uint64\n\tTxCarrierErrors   uint64\n\tTxFifoErrors      uint64\n\tTxHeartbeatErrors uint64\n\tTxWindowErrors    uint64\n\tRxCompressed      uint64\n\tTxCompressed      uint64\n}\n\ntype LinkXdp struct {\n\tFd         int\n\tAttached   bool\n\tAttachMode uint32\n\tFlags      uint32\n\tProgId     uint32\n}\n\n// Device links cannot be created via netlink. These links\n// are links created by udev like 'lo' and 'etho0'\ntype Device struct {\n\tLinkAttrs\n}\n\nfunc (device *Device) Attrs() *LinkAttrs {\n\treturn &device.LinkAttrs\n}\n\nfunc (device *Device) Type() string {\n\treturn \"device\"\n}\n\n// Dummy links are dummy ethernet devices\ntype Dummy struct {\n\tLinkAttrs\n}\n\nfunc (dummy *Dummy) Attrs() *LinkAttrs {\n\treturn &dummy.LinkAttrs\n}\n\nfunc (dummy *Dummy) Type() string {\n\treturn \"dummy\"\n}\n\n// Ifb links are advanced dummy devices for packet filtering\ntype Ifb struct {\n\tLinkAttrs\n}\n\nfunc (ifb *Ifb) Attrs() *LinkAttrs {\n\treturn &ifb.LinkAttrs\n}\n\nfunc (ifb *Ifb) Type() string {\n\treturn \"ifb\"\n}\n\n// Bridge links are simple linux bridges\ntype Bridge struct {\n\tLinkAttrs\n\tMulticastSnooping *bool\n\tAgeingTime        *uint32\n\tHelloTime         *uint32\n\tVlanFiltering     *bool\n\tVlanDefaultPVID   *uint16\n\tGroupFwdMask      *uint16\n}\n\nfunc (bridge *Bridge) Attrs() *LinkAttrs {\n\treturn &bridge.LinkAttrs\n}\n\nfunc (bridge *Bridge) Type() string {\n\treturn \"bridge\"\n}\n\n// Vlan links have ParentIndex set in their Attrs()\ntype Vlan struct {\n\tLinkAttrs\n\tVlanId        int\n\tVlanProtocol  VlanProtocol\n\tIngressQosMap map[uint32]uint32\n\tEgressQosMap  map[uint32]uint32\n\tReorderHdr    *bool\n\tGvrp          *bool\n\tLooseBinding  *bool\n\tMvrp          *bool\n\tBridgeBinding *bool\n}\n\nfunc (vlan *Vlan) Attrs() *LinkAttrs {\n\treturn &vlan.LinkAttrs\n}\n\nfunc (vlan *Vlan) Type() string {\n\treturn \"vlan\"\n}\n\ntype MacvlanMode uint16\n\nconst (\n\tMACVLAN_MODE_DEFAULT MacvlanMode = iota\n\tMACVLAN_MODE_PRIVATE\n\tMACVLAN_MODE_VEPA\n\tMACVLAN_MODE_BRIDGE\n\tMACVLAN_MODE_PASSTHRU\n\tMACVLAN_MODE_SOURCE\n)\n\n// Macvlan links have ParentIndex set in their Attrs()\ntype Macvlan struct {\n\tLinkAttrs\n\tMode MacvlanMode\n\n\t// MACAddrs is only populated for Macvlan SOURCE links\n\tMACAddrs []net.HardwareAddr\n\n\tBCQueueLen     uint32\n\tUsedBCQueueLen uint32\n}\n\nfunc (macvlan *Macvlan) Attrs() *LinkAttrs {\n\treturn &macvlan.LinkAttrs\n}\n\nfunc (macvlan *Macvlan) Type() string {\n\treturn \"macvlan\"\n}\n\n// Macvtap - macvtap is a virtual interfaces based on macvlan\ntype Macvtap struct {\n\tMacvlan\n}\n\nfunc (macvtap Macvtap) Type() string {\n\treturn \"macvtap\"\n}\n\ntype TuntapMode uint16\ntype TuntapFlag uint16\n\n// Tuntap links created via /dev/tun/tap, but can be destroyed via netlink\ntype Tuntap struct {\n\tLinkAttrs\n\tMode           TuntapMode\n\tFlags          TuntapFlag\n\tNonPersist     bool\n\tQueues         int\n\tDisabledQueues int\n\tFds            []*os.File\n\tOwner          uint32\n\tGroup          uint32\n}\n\nfunc (tuntap *Tuntap) Attrs() *LinkAttrs {\n\treturn &tuntap.LinkAttrs\n}\n\nfunc (tuntap *Tuntap) Type() string {\n\treturn \"tuntap\"\n}\n\ntype NetkitMode uint32\n\nconst (\n\tNETKIT_MODE_L2 NetkitMode = iota\n\tNETKIT_MODE_L3\n)\n\ntype NetkitPolicy int\n\nconst (\n\tNETKIT_POLICY_FORWARD   NetkitPolicy = 0\n\tNETKIT_POLICY_BLACKHOLE NetkitPolicy = 2\n)\n\ntype NetkitScrub int\n\nconst (\n\tNETKIT_SCRUB_NONE    NetkitScrub = 0\n\tNETKIT_SCRUB_DEFAULT NetkitScrub = 1\n)\n\nfunc (n *Netkit) IsPrimary() bool {\n\treturn n.isPrimary\n}\n\n// SetPeerAttrs will not take effect if trying to modify an existing netkit device\nfunc (n *Netkit) SetPeerAttrs(Attrs *LinkAttrs) {\n\tn.peerLinkAttrs = *Attrs\n}\n\ntype Netkit struct {\n\tLinkAttrs\n\tMode          NetkitMode\n\tPolicy        NetkitPolicy\n\tPeerPolicy    NetkitPolicy\n\tScrub         NetkitScrub\n\tPeerScrub     NetkitScrub\n\tsupportsScrub bool\n\tisPrimary     bool\n\tpeerLinkAttrs LinkAttrs\n}\n\nfunc (n *Netkit) Attrs() *LinkAttrs {\n\treturn &n.LinkAttrs\n}\n\nfunc (n *Netkit) Type() string {\n\treturn \"netkit\"\n}\n\nfunc (n *Netkit) SupportsScrub() bool {\n\treturn n.supportsScrub\n}\n\n// Veth devices must specify PeerName on create\ntype Veth struct {\n\tLinkAttrs\n\tPeerName         string // veth on create only\n\tPeerHardwareAddr net.HardwareAddr\n\tPeerNamespace    interface{}\n\tPeerTxQLen       int\n\tPeerNumTxQueues  uint32\n\tPeerNumRxQueues  uint32\n\tPeerMTU          uint32\n}\n\nfunc NewVeth(attr LinkAttrs) *Veth {\n\treturn &Veth{\n\t\tLinkAttrs:  attr,\n\t\tPeerTxQLen: -1,\n\t}\n}\n\nfunc (veth *Veth) Attrs() *LinkAttrs {\n\treturn &veth.LinkAttrs\n}\n\nfunc (veth *Veth) Type() string {\n\treturn \"veth\"\n}\n\n// Wireguard represent links of type \"wireguard\", see https://www.wireguard.com/\ntype Wireguard struct {\n\tLinkAttrs\n}\n\nfunc (wg *Wireguard) Attrs() *LinkAttrs {\n\treturn &wg.LinkAttrs\n}\n\nfunc (wg *Wireguard) Type() string {\n\treturn \"wireguard\"\n}\n\n// GenericLink links represent types that are not currently understood\n// by this netlink library.\ntype GenericLink struct {\n\tLinkAttrs\n\tLinkType string\n}\n\nfunc (generic *GenericLink) Attrs() *LinkAttrs {\n\treturn &generic.LinkAttrs\n}\n\nfunc (generic *GenericLink) Type() string {\n\treturn generic.LinkType\n}\n\ntype Vxlan struct {\n\tLinkAttrs\n\tVxlanId        int\n\tVtepDevIndex   int\n\tSrcAddr        net.IP\n\tGroup          net.IP\n\tTTL            int\n\tTOS            int\n\tLearning       bool\n\tProxy          bool\n\tRSC            bool\n\tL2miss         bool\n\tL3miss         bool\n\tUDPCSum        bool\n\tUDP6ZeroCSumTx bool\n\tUDP6ZeroCSumRx bool\n\tNoAge          bool\n\tGBP            bool\n\tFlowBased      bool\n\tAge            int\n\tLimit          int\n\tPort           int\n\tPortLow        int\n\tPortHigh       int\n}\n\nfunc (vxlan *Vxlan) Attrs() *LinkAttrs {\n\treturn &vxlan.LinkAttrs\n}\n\nfunc (vxlan *Vxlan) Type() string {\n\treturn \"vxlan\"\n}\n\ntype IPVlanMode uint16\n\nconst (\n\tIPVLAN_MODE_L2 IPVlanMode = iota\n\tIPVLAN_MODE_L3\n\tIPVLAN_MODE_L3S\n\tIPVLAN_MODE_MAX\n)\n\ntype IPVlanFlag uint16\n\nconst (\n\tIPVLAN_FLAG_BRIDGE IPVlanFlag = iota\n\tIPVLAN_FLAG_PRIVATE\n\tIPVLAN_FLAG_VEPA\n)\n\ntype IPVlan struct {\n\tLinkAttrs\n\tMode IPVlanMode\n\tFlag IPVlanFlag\n}\n\nfunc (ipvlan *IPVlan) Attrs() *LinkAttrs {\n\treturn &ipvlan.LinkAttrs\n}\n\nfunc (ipvlan *IPVlan) Type() string {\n\treturn \"ipvlan\"\n}\n\n// IPVtap - IPVtap is a virtual interfaces based on ipvlan\ntype IPVtap struct {\n\tIPVlan\n}\n\nfunc (ipvtap *IPVtap) Attrs() *LinkAttrs {\n\treturn &ipvtap.LinkAttrs\n}\n\nfunc (ipvtap IPVtap) Type() string {\n\treturn \"ipvtap\"\n}\n\n// VlanProtocol type\ntype VlanProtocol int\n\nfunc (p VlanProtocol) String() string {\n\ts, ok := VlanProtocolToString[p]\n\tif !ok {\n\t\treturn fmt.Sprintf(\"VlanProtocol(%d)\", p)\n\t}\n\treturn s\n}\n\n// StringToVlanProtocol returns vlan protocol, or unknown is the s is invalid.\nfunc StringToVlanProtocol(s string) VlanProtocol {\n\tmode, ok := StringToVlanProtocolMap[s]\n\tif !ok {\n\t\treturn VLAN_PROTOCOL_UNKNOWN\n\t}\n\treturn mode\n}\n\n// VlanProtocol possible values\nconst (\n\tVLAN_PROTOCOL_UNKNOWN VlanProtocol = 0\n\tVLAN_PROTOCOL_8021Q   VlanProtocol = 0x8100\n\tVLAN_PROTOCOL_8021AD  VlanProtocol = 0x88A8\n)\n\nvar VlanProtocolToString = map[VlanProtocol]string{\n\tVLAN_PROTOCOL_8021Q:  \"802.1q\",\n\tVLAN_PROTOCOL_8021AD: \"802.1ad\",\n}\n\nvar StringToVlanProtocolMap = map[string]VlanProtocol{\n\t\"802.1q\":  VLAN_PROTOCOL_8021Q,\n\t\"802.1ad\": VLAN_PROTOCOL_8021AD,\n}\n\n// BondMode type\ntype BondMode int\n\nfunc (b BondMode) String() string {\n\ts, ok := bondModeToString[b]\n\tif !ok {\n\t\treturn fmt.Sprintf(\"BondMode(%d)\", b)\n\t}\n\treturn s\n}\n\n// StringToBondMode returns bond mode, or unknown is the s is invalid.\nfunc StringToBondMode(s string) BondMode {\n\tmode, ok := StringToBondModeMap[s]\n\tif !ok {\n\t\treturn BOND_MODE_UNKNOWN\n\t}\n\treturn mode\n}\n\n// Possible BondMode\nconst (\n\tBOND_MODE_BALANCE_RR BondMode = iota\n\tBOND_MODE_ACTIVE_BACKUP\n\tBOND_MODE_BALANCE_XOR\n\tBOND_MODE_BROADCAST\n\tBOND_MODE_802_3AD\n\tBOND_MODE_BALANCE_TLB\n\tBOND_MODE_BALANCE_ALB\n\tBOND_MODE_UNKNOWN\n)\n\nvar bondModeToString = map[BondMode]string{\n\tBOND_MODE_BALANCE_RR:    \"balance-rr\",\n\tBOND_MODE_ACTIVE_BACKUP: \"active-backup\",\n\tBOND_MODE_BALANCE_XOR:   \"balance-xor\",\n\tBOND_MODE_BROADCAST:     \"broadcast\",\n\tBOND_MODE_802_3AD:       \"802.3ad\",\n\tBOND_MODE_BALANCE_TLB:   \"balance-tlb\",\n\tBOND_MODE_BALANCE_ALB:   \"balance-alb\",\n}\nvar StringToBondModeMap = map[string]BondMode{\n\t\"balance-rr\":    BOND_MODE_BALANCE_RR,\n\t\"active-backup\": BOND_MODE_ACTIVE_BACKUP,\n\t\"balance-xor\":   BOND_MODE_BALANCE_XOR,\n\t\"broadcast\":     BOND_MODE_BROADCAST,\n\t\"802.3ad\":       BOND_MODE_802_3AD,\n\t\"balance-tlb\":   BOND_MODE_BALANCE_TLB,\n\t\"balance-alb\":   BOND_MODE_BALANCE_ALB,\n}\n\n// BondArpValidate type\ntype BondArpValidate int\n\n// Possible BondArpValidate value\nconst (\n\tBOND_ARP_VALIDATE_NONE BondArpValidate = iota\n\tBOND_ARP_VALIDATE_ACTIVE\n\tBOND_ARP_VALIDATE_BACKUP\n\tBOND_ARP_VALIDATE_ALL\n)\n\nvar bondArpValidateToString = map[BondArpValidate]string{\n\tBOND_ARP_VALIDATE_NONE:   \"none\",\n\tBOND_ARP_VALIDATE_ACTIVE: \"active\",\n\tBOND_ARP_VALIDATE_BACKUP: \"backup\",\n\tBOND_ARP_VALIDATE_ALL:    \"none\",\n}\nvar StringToBondArpValidateMap = map[string]BondArpValidate{\n\t\"none\":   BOND_ARP_VALIDATE_NONE,\n\t\"active\": BOND_ARP_VALIDATE_ACTIVE,\n\t\"backup\": BOND_ARP_VALIDATE_BACKUP,\n\t\"all\":    BOND_ARP_VALIDATE_ALL,\n}\n\nfunc (b BondArpValidate) String() string {\n\ts, ok := bondArpValidateToString[b]\n\tif !ok {\n\t\treturn fmt.Sprintf(\"BondArpValidate(%d)\", b)\n\t}\n\treturn s\n}\n\n// BondPrimaryReselect type\ntype BondPrimaryReselect int\n\n// Possible BondPrimaryReselect value\nconst (\n\tBOND_PRIMARY_RESELECT_ALWAYS BondPrimaryReselect = iota\n\tBOND_PRIMARY_RESELECT_BETTER\n\tBOND_PRIMARY_RESELECT_FAILURE\n)\n\nvar bondPrimaryReselectToString = map[BondPrimaryReselect]string{\n\tBOND_PRIMARY_RESELECT_ALWAYS:  \"always\",\n\tBOND_PRIMARY_RESELECT_BETTER:  \"better\",\n\tBOND_PRIMARY_RESELECT_FAILURE: \"failure\",\n}\nvar StringToBondPrimaryReselectMap = map[string]BondPrimaryReselect{\n\t\"always\":  BOND_PRIMARY_RESELECT_ALWAYS,\n\t\"better\":  BOND_PRIMARY_RESELECT_BETTER,\n\t\"failure\": BOND_PRIMARY_RESELECT_FAILURE,\n}\n\nfunc (b BondPrimaryReselect) String() string {\n\ts, ok := bondPrimaryReselectToString[b]\n\tif !ok {\n\t\treturn fmt.Sprintf(\"BondPrimaryReselect(%d)\", b)\n\t}\n\treturn s\n}\n\n// BondArpAllTargets type\ntype BondArpAllTargets int\n\n// Possible BondArpAllTargets value\nconst (\n\tBOND_ARP_ALL_TARGETS_ANY BondArpAllTargets = iota\n\tBOND_ARP_ALL_TARGETS_ALL\n)\n\nvar bondArpAllTargetsToString = map[BondArpAllTargets]string{\n\tBOND_ARP_ALL_TARGETS_ANY: \"any\",\n\tBOND_ARP_ALL_TARGETS_ALL: \"all\",\n}\nvar StringToBondArpAllTargetsMap = map[string]BondArpAllTargets{\n\t\"any\": BOND_ARP_ALL_TARGETS_ANY,\n\t\"all\": BOND_ARP_ALL_TARGETS_ALL,\n}\n\nfunc (b BondArpAllTargets) String() string {\n\ts, ok := bondArpAllTargetsToString[b]\n\tif !ok {\n\t\treturn fmt.Sprintf(\"BondArpAllTargets(%d)\", b)\n\t}\n\treturn s\n}\n\n// BondFailOverMac type\ntype BondFailOverMac int\n\n// Possible BondFailOverMac value\nconst (\n\tBOND_FAIL_OVER_MAC_NONE BondFailOverMac = iota\n\tBOND_FAIL_OVER_MAC_ACTIVE\n\tBOND_FAIL_OVER_MAC_FOLLOW\n)\n\nvar bondFailOverMacToString = map[BondFailOverMac]string{\n\tBOND_FAIL_OVER_MAC_NONE:   \"none\",\n\tBOND_FAIL_OVER_MAC_ACTIVE: \"active\",\n\tBOND_FAIL_OVER_MAC_FOLLOW: \"follow\",\n}\nvar StringToBondFailOverMacMap = map[string]BondFailOverMac{\n\t\"none\":   BOND_FAIL_OVER_MAC_NONE,\n\t\"active\": BOND_FAIL_OVER_MAC_ACTIVE,\n\t\"follow\": BOND_FAIL_OVER_MAC_FOLLOW,\n}\n\nfunc (b BondFailOverMac) String() string {\n\ts, ok := bondFailOverMacToString[b]\n\tif !ok {\n\t\treturn fmt.Sprintf(\"BondFailOverMac(%d)\", b)\n\t}\n\treturn s\n}\n\n// BondXmitHashPolicy type\ntype BondXmitHashPolicy int\n\nfunc (b BondXmitHashPolicy) String() string {\n\ts, ok := bondXmitHashPolicyToString[b]\n\tif !ok {\n\t\treturn fmt.Sprintf(\"XmitHashPolicy(%d)\", b)\n\t}\n\treturn s\n}\n\n// StringToBondXmitHashPolicy returns bond lacp arte, or unknown is the s is invalid.\nfunc StringToBondXmitHashPolicy(s string) BondXmitHashPolicy {\n\tlacp, ok := StringToBondXmitHashPolicyMap[s]\n\tif !ok {\n\t\treturn BOND_XMIT_HASH_POLICY_UNKNOWN\n\t}\n\treturn lacp\n}\n\n// Possible BondXmitHashPolicy value\nconst (\n\tBOND_XMIT_HASH_POLICY_LAYER2 BondXmitHashPolicy = iota\n\tBOND_XMIT_HASH_POLICY_LAYER3_4\n\tBOND_XMIT_HASH_POLICY_LAYER2_3\n\tBOND_XMIT_HASH_POLICY_ENCAP2_3\n\tBOND_XMIT_HASH_POLICY_ENCAP3_4\n\tBOND_XMIT_HASH_POLICY_VLAN_SRCMAC\n\tBOND_XMIT_HASH_POLICY_UNKNOWN\n)\n\nvar bondXmitHashPolicyToString = map[BondXmitHashPolicy]string{\n\tBOND_XMIT_HASH_POLICY_LAYER2:      \"layer2\",\n\tBOND_XMIT_HASH_POLICY_LAYER3_4:    \"layer3+4\",\n\tBOND_XMIT_HASH_POLICY_LAYER2_3:    \"layer2+3\",\n\tBOND_XMIT_HASH_POLICY_ENCAP2_3:    \"encap2+3\",\n\tBOND_XMIT_HASH_POLICY_ENCAP3_4:    \"encap3+4\",\n\tBOND_XMIT_HASH_POLICY_VLAN_SRCMAC: \"vlan+srcmac\",\n}\nvar StringToBondXmitHashPolicyMap = map[string]BondXmitHashPolicy{\n\t\"layer2\":      BOND_XMIT_HASH_POLICY_LAYER2,\n\t\"layer3+4\":    BOND_XMIT_HASH_POLICY_LAYER3_4,\n\t\"layer2+3\":    BOND_XMIT_HASH_POLICY_LAYER2_3,\n\t\"encap2+3\":    BOND_XMIT_HASH_POLICY_ENCAP2_3,\n\t\"encap3+4\":    BOND_XMIT_HASH_POLICY_ENCAP3_4,\n\t\"vlan+srcmac\": BOND_XMIT_HASH_POLICY_VLAN_SRCMAC,\n}\n\n// BondLacpRate type\ntype BondLacpRate int\n\nfunc (b BondLacpRate) String() string {\n\ts, ok := bondLacpRateToString[b]\n\tif !ok {\n\t\treturn fmt.Sprintf(\"LacpRate(%d)\", b)\n\t}\n\treturn s\n}\n\n// StringToBondLacpRate returns bond lacp arte, or unknown is the s is invalid.\nfunc StringToBondLacpRate(s string) BondLacpRate {\n\tlacp, ok := StringToBondLacpRateMap[s]\n\tif !ok {\n\t\treturn BOND_LACP_RATE_UNKNOWN\n\t}\n\treturn lacp\n}\n\n// Possible BondLacpRate value\nconst (\n\tBOND_LACP_RATE_SLOW BondLacpRate = iota\n\tBOND_LACP_RATE_FAST\n\tBOND_LACP_RATE_UNKNOWN\n)\n\nvar bondLacpRateToString = map[BondLacpRate]string{\n\tBOND_LACP_RATE_SLOW: \"slow\",\n\tBOND_LACP_RATE_FAST: \"fast\",\n}\nvar StringToBondLacpRateMap = map[string]BondLacpRate{\n\t\"slow\": BOND_LACP_RATE_SLOW,\n\t\"fast\": BOND_LACP_RATE_FAST,\n}\n\n// BondAdSelect type\ntype BondAdSelect int\n\n// Possible BondAdSelect value\nconst (\n\tBOND_AD_SELECT_STABLE BondAdSelect = iota\n\tBOND_AD_SELECT_BANDWIDTH\n\tBOND_AD_SELECT_COUNT\n)\n\nvar bondAdSelectToString = map[BondAdSelect]string{\n\tBOND_AD_SELECT_STABLE:    \"stable\",\n\tBOND_AD_SELECT_BANDWIDTH: \"bandwidth\",\n\tBOND_AD_SELECT_COUNT:     \"count\",\n}\nvar StringToBondAdSelectMap = map[string]BondAdSelect{\n\t\"stable\":    BOND_AD_SELECT_STABLE,\n\t\"bandwidth\": BOND_AD_SELECT_BANDWIDTH,\n\t\"count\":     BOND_AD_SELECT_COUNT,\n}\n\nfunc (b BondAdSelect) String() string {\n\ts, ok := bondAdSelectToString[b]\n\tif !ok {\n\t\treturn fmt.Sprintf(\"BondAdSelect(%d)\", b)\n\t}\n\treturn s\n}\n\n// BondAdInfo represents ad info for bond\ntype BondAdInfo struct {\n\tAggregatorId int\n\tNumPorts     int\n\tActorKey     int\n\tPartnerKey   int\n\tPartnerMac   net.HardwareAddr\n}\n\n// Bond representation\ntype Bond struct {\n\tLinkAttrs\n\tMode            BondMode\n\tActiveSlave     int\n\tMiimon          int\n\tUpDelay         int\n\tDownDelay       int\n\tUseCarrier      int\n\tArpInterval     int\n\tArpIpTargets    []net.IP\n\tArpValidate     BondArpValidate\n\tArpAllTargets   BondArpAllTargets\n\tPrimary         int\n\tPrimaryReselect BondPrimaryReselect\n\tFailOverMac     BondFailOverMac\n\tXmitHashPolicy  BondXmitHashPolicy\n\tResendIgmp      int\n\tNumPeerNotif    int\n\tAllSlavesActive int\n\tMinLinks        int\n\tLpInterval      int\n\tPacketsPerSlave int\n\tLacpRate        BondLacpRate\n\tAdSelect        BondAdSelect\n\t// looking at iproute tool AdInfo can only be retrived. It can't be set.\n\tAdInfo         *BondAdInfo\n\tAdActorSysPrio int\n\tAdUserPortKey  int\n\tAdActorSystem  net.HardwareAddr\n\tTlbDynamicLb   int\n}\n\nfunc NewLinkBond(atr LinkAttrs) *Bond {\n\treturn &Bond{\n\t\tLinkAttrs:       atr,\n\t\tMode:            -1,\n\t\tActiveSlave:     -1,\n\t\tMiimon:          -1,\n\t\tUpDelay:         -1,\n\t\tDownDelay:       -1,\n\t\tUseCarrier:      -1,\n\t\tArpInterval:     -1,\n\t\tArpIpTargets:    nil,\n\t\tArpValidate:     -1,\n\t\tArpAllTargets:   -1,\n\t\tPrimary:         -1,\n\t\tPrimaryReselect: -1,\n\t\tFailOverMac:     -1,\n\t\tXmitHashPolicy:  -1,\n\t\tResendIgmp:      -1,\n\t\tNumPeerNotif:    -1,\n\t\tAllSlavesActive: -1,\n\t\tMinLinks:        -1,\n\t\tLpInterval:      -1,\n\t\tPacketsPerSlave: -1,\n\t\tLacpRate:        -1,\n\t\tAdSelect:        -1,\n\t\tAdActorSysPrio:  -1,\n\t\tAdUserPortKey:   -1,\n\t\tAdActorSystem:   nil,\n\t\tTlbDynamicLb:    -1,\n\t}\n}\n\n// Flag mask for bond options. Bond.Flagmask must be set to on for option to work.\nconst (\n\tBOND_MODE_MASK uint64 = 1 << (1 + iota)\n\tBOND_ACTIVE_SLAVE_MASK\n\tBOND_MIIMON_MASK\n\tBOND_UPDELAY_MASK\n\tBOND_DOWNDELAY_MASK\n\tBOND_USE_CARRIER_MASK\n\tBOND_ARP_INTERVAL_MASK\n\tBOND_ARP_VALIDATE_MASK\n\tBOND_ARP_ALL_TARGETS_MASK\n\tBOND_PRIMARY_MASK\n\tBOND_PRIMARY_RESELECT_MASK\n\tBOND_FAIL_OVER_MAC_MASK\n\tBOND_XMIT_HASH_POLICY_MASK\n\tBOND_RESEND_IGMP_MASK\n\tBOND_NUM_PEER_NOTIF_MASK\n\tBOND_ALL_SLAVES_ACTIVE_MASK\n\tBOND_MIN_LINKS_MASK\n\tBOND_LP_INTERVAL_MASK\n\tBOND_PACKETS_PER_SLAVE_MASK\n\tBOND_LACP_RATE_MASK\n\tBOND_AD_SELECT_MASK\n)\n\n// Attrs implementation.\nfunc (bond *Bond) Attrs() *LinkAttrs {\n\treturn &bond.LinkAttrs\n}\n\n// Type implementation fro Vxlan.\nfunc (bond *Bond) Type() string {\n\treturn \"bond\"\n}\n\n// BondSlaveState represents the values of the IFLA_BOND_SLAVE_STATE bond slave\n// attribute, which contains the state of the bond slave.\ntype BondSlaveState uint8\n\nconst (\n\t//BondStateActive Link is active.\n\tBondStateActive BondSlaveState = iota\n\t//BondStateBackup Link is backup.\n\tBondStateBackup\n)\n\nfunc (s BondSlaveState) String() string {\n\tswitch s {\n\tcase BondStateActive:\n\t\treturn \"ACTIVE\"\n\tcase BondStateBackup:\n\t\treturn \"BACKUP\"\n\tdefault:\n\t\treturn strconv.Itoa(int(s))\n\t}\n}\n\n// BondSlaveMiiStatus represents the values of the IFLA_BOND_SLAVE_MII_STATUS bond slave\n// attribute, which contains the status of MII link monitoring\ntype BondSlaveMiiStatus uint8\n\nconst (\n\t//BondLinkUp link is up and running.\n\tBondLinkUp BondSlaveMiiStatus = iota\n\t//BondLinkFail link has just gone down.\n\tBondLinkFail\n\t//BondLinkDown link has been down for too long time.\n\tBondLinkDown\n\t//BondLinkBack link is going back.\n\tBondLinkBack\n)\n\nfunc (s BondSlaveMiiStatus) String() string {\n\tswitch s {\n\tcase BondLinkUp:\n\t\treturn \"UP\"\n\tcase BondLinkFail:\n\t\treturn \"GOING_DOWN\"\n\tcase BondLinkDown:\n\t\treturn \"DOWN\"\n\tcase BondLinkBack:\n\t\treturn \"GOING_BACK\"\n\tdefault:\n\t\treturn strconv.Itoa(int(s))\n\t}\n}\n\ntype BondSlave struct {\n\tState                  BondSlaveState\n\tMiiStatus              BondSlaveMiiStatus\n\tLinkFailureCount       uint32\n\tPermHardwareAddr       net.HardwareAddr\n\tQueueId                uint16\n\tAggregatorId           uint16\n\tAdActorOperPortState   uint8\n\tAdPartnerOperPortState uint16\n}\n\nfunc (b *BondSlave) SlaveType() string {\n\treturn \"bond\"\n}\n\ntype VrfSlave struct {\n\tTable uint32\n}\n\nfunc (v *VrfSlave) SlaveType() string {\n\treturn \"vrf\"\n}\n\n// Geneve devices must specify RemoteIP and ID (VNI) on create\n// https://github.com/torvalds/linux/blob/47ec5303d73ea344e84f46660fff693c57641386/drivers/net/geneve.c#L1209-L1223\ntype Geneve struct {\n\tLinkAttrs\n\tID                uint32 // vni\n\tRemote            net.IP\n\tTtl               uint8\n\tTos               uint8\n\tDport             uint16\n\tUdpCsum           uint8\n\tUdpZeroCsum6Tx    uint8\n\tUdpZeroCsum6Rx    uint8\n\tLink              uint32\n\tFlowBased         bool\n\tInnerProtoInherit bool\n\tDf                GeneveDf\n\tPortLow           int\n\tPortHigh          int\n}\n\nfunc (geneve *Geneve) Attrs() *LinkAttrs {\n\treturn &geneve.LinkAttrs\n}\n\nfunc (geneve *Geneve) Type() string {\n\treturn \"geneve\"\n}\n\ntype GeneveDf uint8\n\nconst (\n\tGENEVE_DF_UNSET GeneveDf = iota\n\tGENEVE_DF_SET\n\tGENEVE_DF_INHERIT\n\tGENEVE_DF_MAX\n)\n\n// Gretap devices must specify LocalIP and RemoteIP on create\ntype Gretap struct {\n\tLinkAttrs\n\tIKey       uint32\n\tOKey       uint32\n\tEncapSport uint16\n\tEncapDport uint16\n\tLocal      net.IP\n\tRemote     net.IP\n\tIFlags     uint16\n\tOFlags     uint16\n\tPMtuDisc   uint8\n\tTtl        uint8\n\tTos        uint8\n\tEncapType  uint16\n\tEncapFlags uint16\n\tLink       uint32\n\tFlowBased  bool\n}\n\nfunc (gretap *Gretap) Attrs() *LinkAttrs {\n\treturn &gretap.LinkAttrs\n}\n\nfunc (gretap *Gretap) Type() string {\n\tif gretap.Local.To4() == nil {\n\t\treturn \"ip6gretap\"\n\t}\n\treturn \"gretap\"\n}\n\ntype Iptun struct {\n\tLinkAttrs\n\tTtl        uint8\n\tTos        uint8\n\tPMtuDisc   uint8\n\tLink       uint32\n\tLocal      net.IP\n\tRemote     net.IP\n\tEncapSport uint16\n\tEncapDport uint16\n\tEncapType  uint16\n\tEncapFlags uint16\n\tFlowBased  bool\n\tProto      uint8\n}\n\nfunc (iptun *Iptun) Attrs() *LinkAttrs {\n\treturn &iptun.LinkAttrs\n}\n\nfunc (iptun *Iptun) Type() string {\n\treturn \"ipip\"\n}\n\ntype Ip6tnl struct {\n\tLinkAttrs\n\tLink       uint32\n\tLocal      net.IP\n\tRemote     net.IP\n\tTtl        uint8\n\tTos        uint8\n\tFlags      uint32\n\tProto      uint8\n\tFlowInfo   uint32\n\tEncapLimit uint8\n\tEncapType  uint16\n\tEncapFlags uint16\n\tEncapSport uint16\n\tEncapDport uint16\n\tFlowBased  bool\n}\n\nfunc (ip6tnl *Ip6tnl) Attrs() *LinkAttrs {\n\treturn &ip6tnl.LinkAttrs\n}\n\nfunc (ip6tnl *Ip6tnl) Type() string {\n\treturn \"ip6tnl\"\n}\n\n// from https://elixir.bootlin.com/linux/v5.15.4/source/include/uapi/linux/if_tunnel.h#L84\ntype TunnelEncapType uint16\n\nconst (\n\tNone TunnelEncapType = iota\n\tFOU\n\tGUE\n)\n\n// from https://elixir.bootlin.com/linux/v5.15.4/source/include/uapi/linux/if_tunnel.h#L91\ntype TunnelEncapFlag uint16\n\nconst (\n\tCSum    TunnelEncapFlag = 1 << 0\n\tCSum6                   = 1 << 1\n\tRemCSum                 = 1 << 2\n)\n\n// from https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/ip6_tunnel.h#L12\ntype IP6TunnelFlag uint16\n\nconst (\n\tIP6_TNL_F_IGN_ENCAP_LIMIT    IP6TunnelFlag = 1  // don't add encapsulation limit if one isn't present in inner packet\n\tIP6_TNL_F_USE_ORIG_TCLASS                  = 2  // copy the traffic class field from the inner packet\n\tIP6_TNL_F_USE_ORIG_FLOWLABEL               = 4  // copy the flowlabel from the inner packet\n\tIP6_TNL_F_MIP6_DEV                         = 8  // being used for Mobile IPv6\n\tIP6_TNL_F_RCV_DSCP_COPY                    = 10 // copy DSCP from the outer packet\n\tIP6_TNL_F_USE_ORIG_FWMARK                  = 20 // copy fwmark from inner packet\n\tIP6_TNL_F_ALLOW_LOCAL_REMOTE               = 40 // allow remote endpoint on the local node\n)\n\ntype Sittun struct {\n\tLinkAttrs\n\tLink       uint32\n\tTtl        uint8\n\tTos        uint8\n\tPMtuDisc   uint8\n\tProto      uint8\n\tLocal      net.IP\n\tRemote     net.IP\n\tEncapLimit uint8\n\tEncapType  uint16\n\tEncapFlags uint16\n\tEncapSport uint16\n\tEncapDport uint16\n}\n\nfunc (sittun *Sittun) Attrs() *LinkAttrs {\n\treturn &sittun.LinkAttrs\n}\n\nfunc (sittun *Sittun) Type() string {\n\treturn \"sit\"\n}\n\ntype Vti struct {\n\tLinkAttrs\n\tIKey   uint32\n\tOKey   uint32\n\tLink   uint32\n\tLocal  net.IP\n\tRemote net.IP\n}\n\nfunc (vti *Vti) Attrs() *LinkAttrs {\n\treturn &vti.LinkAttrs\n}\n\nfunc (vti *Vti) Type() string {\n\tif vti.Local.To4() == nil {\n\t\treturn \"vti6\"\n\t}\n\treturn \"vti\"\n}\n\ntype Gretun struct {\n\tLinkAttrs\n\tLink       uint32\n\tIFlags     uint16\n\tOFlags     uint16\n\tIKey       uint32\n\tOKey       uint32\n\tLocal      net.IP\n\tRemote     net.IP\n\tTtl        uint8\n\tTos        uint8\n\tPMtuDisc   uint8\n\tEncapType  uint16\n\tEncapFlags uint16\n\tEncapSport uint16\n\tEncapDport uint16\n\tFlowBased  bool\n}\n\nfunc (gretun *Gretun) Attrs() *LinkAttrs {\n\treturn &gretun.LinkAttrs\n}\n\nfunc (gretun *Gretun) Type() string {\n\tif gretun.Local.To4() == nil {\n\t\treturn \"ip6gre\"\n\t}\n\treturn \"gre\"\n}\n\ntype Vrf struct {\n\tLinkAttrs\n\tTable uint32\n}\n\nfunc (vrf *Vrf) Attrs() *LinkAttrs {\n\treturn &vrf.LinkAttrs\n}\n\nfunc (vrf *Vrf) Type() string {\n\treturn \"vrf\"\n}\n\ntype GTP struct {\n\tLinkAttrs\n\tFD0         int\n\tFD1         int\n\tRole        int\n\tPDPHashsize int\n}\n\nfunc (gtp *GTP) Attrs() *LinkAttrs {\n\treturn &gtp.LinkAttrs\n}\n\nfunc (gtp *GTP) Type() string {\n\treturn \"gtp\"\n}\n\n// Virtual XFRM Interfaces\n//\n//\tNamed \"xfrmi\" to prevent confusion with XFRM objects\ntype Xfrmi struct {\n\tLinkAttrs\n\tIfid uint32\n}\n\nfunc (xfrm *Xfrmi) Attrs() *LinkAttrs {\n\treturn &xfrm.LinkAttrs\n}\n\nfunc (xfrm *Xfrmi) Type() string {\n\treturn \"xfrm\"\n}\n\n// IPoIB interface\n\ntype IPoIBMode uint16\n\nfunc (m *IPoIBMode) String() string {\n\tstr, ok := iPoIBModeToString[*m]\n\tif !ok {\n\t\treturn fmt.Sprintf(\"mode(%d)\", *m)\n\t}\n\treturn str\n}\n\nconst (\n\tIPOIB_MODE_DATAGRAM = iota\n\tIPOIB_MODE_CONNECTED\n)\n\nvar iPoIBModeToString = map[IPoIBMode]string{\n\tIPOIB_MODE_DATAGRAM:  \"datagram\",\n\tIPOIB_MODE_CONNECTED: \"connected\",\n}\n\nvar StringToIPoIBMode = map[string]IPoIBMode{\n\t\"datagram\":  IPOIB_MODE_DATAGRAM,\n\t\"connected\": IPOIB_MODE_CONNECTED,\n}\n\nconst (\n\tCAN_STATE_ERROR_ACTIVE = iota\n\tCAN_STATE_ERROR_WARNING\n\tCAN_STATE_ERROR_PASSIVE\n\tCAN_STATE_BUS_OFF\n\tCAN_STATE_STOPPED\n\tCAN_STATE_SLEEPING\n)\n\ntype Can struct {\n\tLinkAttrs\n\n\tBitRate            uint32\n\tSamplePoint        uint32\n\tTimeQuanta         uint32\n\tPropagationSegment uint32\n\tPhaseSegment1      uint32\n\tPhaseSegment2      uint32\n\tSyncJumpWidth      uint32\n\tBitRatePreScaler   uint32\n\n\tName                string\n\tTimeSegment1Min     uint32\n\tTimeSegment1Max     uint32\n\tTimeSegment2Min     uint32\n\tTimeSegment2Max     uint32\n\tSyncJumpWidthMax    uint32\n\tBitRatePreScalerMin uint32\n\tBitRatePreScalerMax uint32\n\tBitRatePreScalerInc uint32\n\n\tClockFrequency uint32\n\n\tState uint32\n\n\tMask  uint32\n\tFlags uint32\n\n\tTxError uint16\n\tRxError uint16\n\n\tRestartMs uint32\n}\n\nfunc (can *Can) Attrs() *LinkAttrs {\n\treturn &can.LinkAttrs\n}\n\nfunc (can *Can) Type() string {\n\treturn \"can\"\n}\n\ntype IPoIB struct {\n\tLinkAttrs\n\tPkey   uint16\n\tMode   IPoIBMode\n\tUmcast uint16\n}\n\nfunc (ipoib *IPoIB) Attrs() *LinkAttrs {\n\treturn &ipoib.LinkAttrs\n}\n\nfunc (ipoib *IPoIB) Type() string {\n\treturn \"ipoib\"\n}\n\ntype BareUDP struct {\n\tLinkAttrs\n\tPort       uint16\n\tEtherType  uint16\n\tSrcPortMin uint16\n\tMultiProto bool\n}\n\nfunc (bareudp *BareUDP) Attrs() *LinkAttrs {\n\treturn &bareudp.LinkAttrs\n}\n\nfunc (bareudp *BareUDP) Type() string {\n\treturn \"bareudp\"\n}\n\n// iproute2 supported devices;\n// vlan | veth | vcan | dummy | ifb | macvlan | macvtap |\n// bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan |\n// gre | gretap | ip6gre | ip6gretap | vti | vti6 | nlmon |\n// bond_slave | ipvlan | xfrm | bareudp\n\n// LinkNotFoundError wraps the various not found errors when\n// getting/reading links. This is intended for better error\n// handling by dependent code so that \"not found error\" can\n// be distinguished from other errors\ntype LinkNotFoundError struct {\n\terror\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/link_linux.go",
    "content": "package netlink\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"github.com/vishvananda/netns\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tSizeofLinkStats32 = 0x5c\n\tSizeofLinkStats64 = 0xb8\n)\n\nconst (\n\tTUNTAP_MODE_TUN             TuntapMode = unix.IFF_TUN\n\tTUNTAP_MODE_TAP             TuntapMode = unix.IFF_TAP\n\tTUNTAP_DEFAULTS             TuntapFlag = unix.IFF_TUN_EXCL | unix.IFF_ONE_QUEUE\n\tTUNTAP_VNET_HDR             TuntapFlag = unix.IFF_VNET_HDR\n\tTUNTAP_TUN_EXCL             TuntapFlag = unix.IFF_TUN_EXCL\n\tTUNTAP_NO_PI                TuntapFlag = unix.IFF_NO_PI\n\tTUNTAP_ONE_QUEUE            TuntapFlag = unix.IFF_ONE_QUEUE\n\tTUNTAP_MULTI_QUEUE          TuntapFlag = unix.IFF_MULTI_QUEUE\n\tTUNTAP_MULTI_QUEUE_DEFAULTS TuntapFlag = TUNTAP_MULTI_QUEUE | TUNTAP_NO_PI\n)\n\nvar StringToTuntapModeMap = map[string]TuntapMode{\n\t\"tun\": TUNTAP_MODE_TUN,\n\t\"tap\": TUNTAP_MODE_TAP,\n}\n\nfunc (ttm TuntapMode) String() string {\n\tswitch ttm {\n\tcase TUNTAP_MODE_TUN:\n\t\treturn \"tun\"\n\tcase TUNTAP_MODE_TAP:\n\t\treturn \"tap\"\n\t}\n\treturn \"unknown\"\n}\n\nconst (\n\tVF_LINK_STATE_AUTO    uint32 = 0\n\tVF_LINK_STATE_ENABLE  uint32 = 1\n\tVF_LINK_STATE_DISABLE uint32 = 2\n)\n\nvar macvlanModes = [...]uint32{\n\t0,\n\tnl.MACVLAN_MODE_PRIVATE,\n\tnl.MACVLAN_MODE_VEPA,\n\tnl.MACVLAN_MODE_BRIDGE,\n\tnl.MACVLAN_MODE_PASSTHRU,\n\tnl.MACVLAN_MODE_SOURCE,\n}\n\nfunc ensureIndex(link *LinkAttrs) {\n\tif link != nil && link.Index == 0 {\n\t\tnewlink, _ := LinkByName(link.Name)\n\t\tif newlink != nil {\n\t\t\tlink.Index = newlink.Attrs().Index\n\t\t}\n\t}\n}\n\nfunc (h *Handle) ensureIndex(link *LinkAttrs) {\n\tif link != nil && link.Index == 0 {\n\t\tnewlink, _ := h.LinkByName(link.Name)\n\t\tif newlink != nil {\n\t\t\tlink.Index = newlink.Attrs().Index\n\t\t}\n\t}\n}\n\nfunc (h *Handle) LinkSetARPOff(link Link) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Change |= unix.IFF_NOARP\n\tmsg.Flags |= unix.IFF_NOARP\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\nfunc LinkSetARPOff(link Link) error {\n\treturn pkgHandle.LinkSetARPOff(link)\n}\n\nfunc (h *Handle) LinkSetARPOn(link Link) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Change |= unix.IFF_NOARP\n\tmsg.Flags &= ^uint32(unix.IFF_NOARP)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\nfunc LinkSetARPOn(link Link) error {\n\treturn pkgHandle.LinkSetARPOn(link)\n}\n\nfunc (h *Handle) SetPromiscOn(link Link) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Change = unix.IFF_PROMISC\n\tmsg.Flags = unix.IFF_PROMISC\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetAllmulticastOn enables the reception of all hardware multicast packets for the link device.\n// Equivalent to: `ip link set $link allmulticast on`\nfunc LinkSetAllmulticastOn(link Link) error {\n\treturn pkgHandle.LinkSetAllmulticastOn(link)\n}\n\n// LinkSetAllmulticastOn enables the reception of all hardware multicast packets for the link device.\n// Equivalent to: `ip link set $link allmulticast on`\nfunc (h *Handle) LinkSetAllmulticastOn(link Link) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Change = unix.IFF_ALLMULTI\n\tmsg.Flags = unix.IFF_ALLMULTI\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetAllmulticastOff disables the reception of all hardware multicast packets for the link device.\n// Equivalent to: `ip link set $link allmulticast off`\nfunc LinkSetAllmulticastOff(link Link) error {\n\treturn pkgHandle.LinkSetAllmulticastOff(link)\n}\n\n// LinkSetAllmulticastOff disables the reception of all hardware multicast packets for the link device.\n// Equivalent to: `ip link set $link allmulticast off`\nfunc (h *Handle) LinkSetAllmulticastOff(link Link) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Change = unix.IFF_ALLMULTI\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetMulticastOn enables the reception of multicast packets for the link device.\n// Equivalent to: `ip link set $link multicast on`\nfunc LinkSetMulticastOn(link Link) error {\n\treturn pkgHandle.LinkSetMulticastOn(link)\n}\n\n// LinkSetMulticastOn enables the reception of multicast packets for the link device.\n// Equivalent to: `ip link set $link multicast on`\nfunc (h *Handle) LinkSetMulticastOn(link Link) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Change = unix.IFF_MULTICAST\n\tmsg.Flags = unix.IFF_MULTICAST\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetAllmulticastOff disables the reception of multicast packets for the link device.\n// Equivalent to: `ip link set $link multicast off`\nfunc LinkSetMulticastOff(link Link) error {\n\treturn pkgHandle.LinkSetMulticastOff(link)\n}\n\n// LinkSetAllmulticastOff disables the reception of multicast packets for the link device.\n// Equivalent to: `ip link set $link multicast off`\nfunc (h *Handle) LinkSetMulticastOff(link Link) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Change = unix.IFF_MULTICAST\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\nfunc MacvlanMACAddrAdd(link Link, addr net.HardwareAddr) error {\n\treturn pkgHandle.MacvlanMACAddrAdd(link, addr)\n}\n\nfunc (h *Handle) MacvlanMACAddrAdd(link Link, addr net.HardwareAddr) error {\n\treturn h.macvlanMACAddrChange(link, []net.HardwareAddr{addr}, nl.MACVLAN_MACADDR_ADD)\n}\n\nfunc MacvlanMACAddrDel(link Link, addr net.HardwareAddr) error {\n\treturn pkgHandle.MacvlanMACAddrDel(link, addr)\n}\n\nfunc (h *Handle) MacvlanMACAddrDel(link Link, addr net.HardwareAddr) error {\n\treturn h.macvlanMACAddrChange(link, []net.HardwareAddr{addr}, nl.MACVLAN_MACADDR_DEL)\n}\n\nfunc MacvlanMACAddrFlush(link Link) error {\n\treturn pkgHandle.MacvlanMACAddrFlush(link)\n}\n\nfunc (h *Handle) MacvlanMACAddrFlush(link Link) error {\n\treturn h.macvlanMACAddrChange(link, nil, nl.MACVLAN_MACADDR_FLUSH)\n}\n\nfunc MacvlanMACAddrSet(link Link, addrs []net.HardwareAddr) error {\n\treturn pkgHandle.MacvlanMACAddrSet(link, addrs)\n}\n\nfunc (h *Handle) MacvlanMACAddrSet(link Link, addrs []net.HardwareAddr) error {\n\treturn h.macvlanMACAddrChange(link, addrs, nl.MACVLAN_MACADDR_SET)\n}\n\nfunc (h *Handle) macvlanMACAddrChange(link Link, addrs []net.HardwareAddr, mode uint32) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tlinkInfo := nl.NewRtAttr(unix.IFLA_LINKINFO, nil)\n\tlinkInfo.AddRtAttr(nl.IFLA_INFO_KIND, nl.NonZeroTerminated(link.Type()))\n\tinner := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\n\t// IFLA_MACVLAN_MACADDR_MODE = mode\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, mode)\n\tinner.AddRtAttr(nl.IFLA_MACVLAN_MACADDR_MODE, b)\n\n\t// populate message with MAC addrs, if necessary\n\tswitch mode {\n\tcase nl.MACVLAN_MACADDR_ADD, nl.MACVLAN_MACADDR_DEL:\n\t\tif len(addrs) == 1 {\n\t\t\tinner.AddRtAttr(nl.IFLA_MACVLAN_MACADDR, []byte(addrs[0]))\n\t\t}\n\tcase nl.MACVLAN_MACADDR_SET:\n\t\tmad := inner.AddRtAttr(nl.IFLA_MACVLAN_MACADDR_DATA, nil)\n\t\tfor _, addr := range addrs {\n\t\t\tmad.AddRtAttr(nl.IFLA_MACVLAN_MACADDR, []byte(addr))\n\t\t}\n\t}\n\n\treq.AddData(linkInfo)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetMacvlanMode sets the mode of a macvlan or macvtap link device.\n// Note that passthrough mode cannot be set to and from and will fail.\n// Equivalent to: `ip link set $link type (macvlan|macvtap) mode $mode\nfunc LinkSetMacvlanMode(link Link, mode MacvlanMode) error {\n\treturn pkgHandle.LinkSetMacvlanMode(link, mode)\n}\n\n// LinkSetMacvlanMode sets the mode of the macvlan or macvtap link device.\n// Note that passthrough mode cannot be set to and from and will fail.\n// Equivalent to: `ip link set $link type (macvlan|macvtap) mode $mode\nfunc (h *Handle) LinkSetMacvlanMode(link Link, mode MacvlanMode) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tlinkInfo := nl.NewRtAttr(unix.IFLA_LINKINFO, nil)\n\tlinkInfo.AddRtAttr(nl.IFLA_INFO_KIND, nl.NonZeroTerminated(link.Type()))\n\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\tdata.AddRtAttr(nl.IFLA_MACVLAN_MODE, nl.Uint32Attr(macvlanModes[mode]))\n\n\treq.AddData(linkInfo)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\nfunc BridgeSetMcastSnoop(link Link, on bool) error {\n\treturn pkgHandle.BridgeSetMcastSnoop(link, on)\n}\n\nfunc (h *Handle) BridgeSetMcastSnoop(link Link, on bool) error {\n\tbridge := link.(*Bridge)\n\tbridge.MulticastSnooping = &on\n\treturn h.linkModify(bridge, unix.NLM_F_ACK)\n}\n\nfunc BridgeSetVlanFiltering(link Link, on bool) error {\n\treturn pkgHandle.BridgeSetVlanFiltering(link, on)\n}\n\nfunc (h *Handle) BridgeSetVlanFiltering(link Link, on bool) error {\n\tbridge := link.(*Bridge)\n\tbridge.VlanFiltering = &on\n\treturn h.linkModify(bridge, unix.NLM_F_ACK)\n}\n\nfunc BridgeSetVlanDefaultPVID(link Link, pvid uint16) error {\n\treturn pkgHandle.BridgeSetVlanDefaultPVID(link, pvid)\n}\n\nfunc (h *Handle) BridgeSetVlanDefaultPVID(link Link, pvid uint16) error {\n\tbridge := link.(*Bridge)\n\tbridge.VlanDefaultPVID = &pvid\n\treturn h.linkModify(bridge, unix.NLM_F_ACK)\n}\n\nfunc SetPromiscOn(link Link) error {\n\treturn pkgHandle.SetPromiscOn(link)\n}\n\nfunc (h *Handle) SetPromiscOff(link Link) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Change = unix.IFF_PROMISC\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\nfunc SetPromiscOff(link Link) error {\n\treturn pkgHandle.SetPromiscOff(link)\n}\n\n// LinkSetUp enables the link device.\n// Equivalent to: `ip link set $link up`\nfunc LinkSetUp(link Link) error {\n\treturn pkgHandle.LinkSetUp(link)\n}\n\n// LinkSetUp enables the link device.\n// Equivalent to: `ip link set $link up`\nfunc (h *Handle) LinkSetUp(link Link) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Change = unix.IFF_UP\n\tmsg.Flags = unix.IFF_UP\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetDown disables link device.\n// Equivalent to: `ip link set $link down`\nfunc LinkSetDown(link Link) error {\n\treturn pkgHandle.LinkSetDown(link)\n}\n\n// LinkSetDown disables link device.\n// Equivalent to: `ip link set $link down`\nfunc (h *Handle) LinkSetDown(link Link) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Change = unix.IFF_UP\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetMTU sets the mtu of the link device.\n// Equivalent to: `ip link set $link mtu $mtu`\nfunc LinkSetMTU(link Link, mtu int) error {\n\treturn pkgHandle.LinkSetMTU(link, mtu)\n}\n\n// LinkSetMTU sets the mtu of the link device.\n// Equivalent to: `ip link set $link mtu $mtu`\nfunc (h *Handle) LinkSetMTU(link Link, mtu int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, uint32(mtu))\n\n\tdata := nl.NewRtAttr(unix.IFLA_MTU, b)\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetName sets the name of the link device.\n// Equivalent to: `ip link set $link name $name`\nfunc LinkSetName(link Link, name string) error {\n\treturn pkgHandle.LinkSetName(link, name)\n}\n\n// LinkSetName sets the name of the link device.\n// Equivalent to: `ip link set $link name $name`\nfunc (h *Handle) LinkSetName(link Link, name string) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_IFNAME, []byte(name))\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetAlias sets the alias of the link device.\n// Equivalent to: `ip link set dev $link alias $name`\nfunc LinkSetAlias(link Link, name string) error {\n\treturn pkgHandle.LinkSetAlias(link, name)\n}\n\n// LinkSetAlias sets the alias of the link device.\n// Equivalent to: `ip link set dev $link alias $name`\nfunc (h *Handle) LinkSetAlias(link Link, name string) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_IFALIAS, []byte(name))\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkAddAltName adds a new alternative name for the link device.\n// Equivalent to: `ip link property add $link altname $name`\nfunc LinkAddAltName(link Link, name string) error {\n\treturn pkgHandle.LinkAddAltName(link, name)\n}\n\n// LinkAddAltName adds a new alternative name for the link device.\n// Equivalent to: `ip link property add $link altname $name`\nfunc (h *Handle) LinkAddAltName(link Link, name string) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_NEWLINKPROP, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_PROP_LIST|unix.NLA_F_NESTED, nil)\n\tdata.AddRtAttr(unix.IFLA_ALT_IFNAME, []byte(name))\n\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkDelAltName delete an alternative name for the link device.\n// Equivalent to: `ip link property del $link altname $name`\nfunc LinkDelAltName(link Link, name string) error {\n\treturn pkgHandle.LinkDelAltName(link, name)\n}\n\n// LinkDelAltName delete an alternative name for the link device.\n// Equivalent to: `ip link property del $link altname $name`\nfunc (h *Handle) LinkDelAltName(link Link, name string) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_DELLINKPROP, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_PROP_LIST|unix.NLA_F_NESTED, nil)\n\tdata.AddRtAttr(unix.IFLA_ALT_IFNAME, []byte(name))\n\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetHardwareAddr sets the hardware address of the link device.\n// Equivalent to: `ip link set $link address $hwaddr`\nfunc LinkSetHardwareAddr(link Link, hwaddr net.HardwareAddr) error {\n\treturn pkgHandle.LinkSetHardwareAddr(link, hwaddr)\n}\n\n// LinkSetHardwareAddr sets the hardware address of the link device.\n// Equivalent to: `ip link set $link address $hwaddr`\nfunc (h *Handle) LinkSetHardwareAddr(link Link, hwaddr net.HardwareAddr) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_ADDRESS, []byte(hwaddr))\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetVfHardwareAddr sets the hardware address of a vf for the link.\n// Equivalent to: `ip link set $link vf $vf mac $hwaddr`\nfunc LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {\n\treturn pkgHandle.LinkSetVfHardwareAddr(link, vf, hwaddr)\n}\n\n// LinkSetVfHardwareAddr sets the hardware address of a vf for the link.\n// Equivalent to: `ip link set $link vf $vf mac $hwaddr`\nfunc (h *Handle) LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)\n\tinfo := data.AddRtAttr(nl.IFLA_VF_INFO, nil)\n\tvfmsg := nl.VfMac{\n\t\tVf: uint32(vf),\n\t}\n\tcopy(vfmsg.Mac[:], []byte(hwaddr))\n\tinfo.AddRtAttr(nl.IFLA_VF_MAC, vfmsg.Serialize())\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetVfVlan sets the vlan of a vf for the link.\n// Equivalent to: `ip link set $link vf $vf vlan $vlan`\nfunc LinkSetVfVlan(link Link, vf, vlan int) error {\n\treturn pkgHandle.LinkSetVfVlan(link, vf, vlan)\n}\n\n// LinkSetVfVlan sets the vlan of a vf for the link.\n// Equivalent to: `ip link set $link vf $vf vlan $vlan`\nfunc (h *Handle) LinkSetVfVlan(link Link, vf, vlan int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)\n\tinfo := data.AddRtAttr(nl.IFLA_VF_INFO, nil)\n\tvfmsg := nl.VfVlan{\n\t\tVf:   uint32(vf),\n\t\tVlan: uint32(vlan),\n\t}\n\tinfo.AddRtAttr(nl.IFLA_VF_VLAN, vfmsg.Serialize())\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetVfVlanQos sets the vlan and qos priority of a vf for the link.\n// Equivalent to: `ip link set $link vf $vf vlan $vlan qos $qos`\nfunc LinkSetVfVlanQos(link Link, vf, vlan, qos int) error {\n\treturn pkgHandle.LinkSetVfVlanQos(link, vf, vlan, qos)\n}\n\n// LinkSetVfVlanQos sets the vlan and qos priority of a vf for the link.\n// Equivalent to: `ip link set $link vf $vf vlan $vlan qos $qos`\nfunc (h *Handle) LinkSetVfVlanQos(link Link, vf, vlan, qos int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)\n\tinfo := data.AddRtAttr(nl.IFLA_VF_INFO, nil)\n\tvfmsg := nl.VfVlan{\n\t\tVf:   uint32(vf),\n\t\tVlan: uint32(vlan),\n\t\tQos:  uint32(qos),\n\t}\n\tinfo.AddRtAttr(nl.IFLA_VF_VLAN, vfmsg.Serialize())\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetVfVlanQosProto sets the vlan, qos and protocol of a vf for the link.\n// Equivalent to: `ip link set $link vf $vf vlan $vlan qos $qos proto $proto`\nfunc LinkSetVfVlanQosProto(link Link, vf, vlan, qos, proto int) error {\n\treturn pkgHandle.LinkSetVfVlanQosProto(link, vf, vlan, qos, proto)\n}\n\n// LinkSetVfVlanQosProto sets the vlan, qos and protocol of a vf for the link.\n// Equivalent to: `ip link set $link vf $vf vlan $vlan qos $qos proto $proto`\nfunc (h *Handle) LinkSetVfVlanQosProto(link Link, vf, vlan, qos, proto int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)\n\tvfInfo := data.AddRtAttr(nl.IFLA_VF_INFO, nil)\n\tvfVlanList := vfInfo.AddRtAttr(nl.IFLA_VF_VLAN_LIST, nil)\n\n\tvfmsg := nl.VfVlanInfo{\n\t\tVfVlan: nl.VfVlan{\n\t\t\tVf:   uint32(vf),\n\t\t\tVlan: uint32(vlan),\n\t\t\tQos:  uint32(qos),\n\t\t},\n\t\tVlanProto: (uint16(proto)>>8)&0xFF | (uint16(proto)&0xFF)<<8,\n\t}\n\n\tvfVlanList.AddRtAttr(nl.IFLA_VF_VLAN_INFO, vfmsg.Serialize())\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetVfTxRate sets the tx rate of a vf for the link.\n// Equivalent to: `ip link set $link vf $vf rate $rate`\nfunc LinkSetVfTxRate(link Link, vf, rate int) error {\n\treturn pkgHandle.LinkSetVfTxRate(link, vf, rate)\n}\n\n// LinkSetVfTxRate sets the tx rate of a vf for the link.\n// Equivalent to: `ip link set $link vf $vf rate $rate`\nfunc (h *Handle) LinkSetVfTxRate(link Link, vf, rate int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)\n\tinfo := data.AddRtAttr(nl.IFLA_VF_INFO, nil)\n\tvfmsg := nl.VfTxRate{\n\t\tVf:   uint32(vf),\n\t\tRate: uint32(rate),\n\t}\n\tinfo.AddRtAttr(nl.IFLA_VF_TX_RATE, vfmsg.Serialize())\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetVfRate sets the min and max tx rate of a vf for the link.\n// Equivalent to: `ip link set $link vf $vf min_tx_rate $min_rate max_tx_rate $max_rate`\nfunc LinkSetVfRate(link Link, vf, minRate, maxRate int) error {\n\treturn pkgHandle.LinkSetVfRate(link, vf, minRate, maxRate)\n}\n\n// LinkSetVfRate sets the min and max tx rate of a vf for the link.\n// Equivalent to: `ip link set $link vf $vf min_tx_rate $min_rate max_tx_rate $max_rate`\nfunc (h *Handle) LinkSetVfRate(link Link, vf, minRate, maxRate int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)\n\tinfo := data.AddRtAttr(nl.IFLA_VF_INFO, nil)\n\tvfmsg := nl.VfRate{\n\t\tVf:        uint32(vf),\n\t\tMinTxRate: uint32(minRate),\n\t\tMaxTxRate: uint32(maxRate),\n\t}\n\tinfo.AddRtAttr(nl.IFLA_VF_RATE, vfmsg.Serialize())\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetVfState enables/disables virtual link state on a vf.\n// Equivalent to: `ip link set $link vf $vf state $state`\nfunc LinkSetVfState(link Link, vf int, state uint32) error {\n\treturn pkgHandle.LinkSetVfState(link, vf, state)\n}\n\n// LinkSetVfState enables/disables virtual link state on a vf.\n// Equivalent to: `ip link set $link vf $vf state $state`\nfunc (h *Handle) LinkSetVfState(link Link, vf int, state uint32) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)\n\tinfo := data.AddRtAttr(nl.IFLA_VF_INFO, nil)\n\tvfmsg := nl.VfLinkState{\n\t\tVf:        uint32(vf),\n\t\tLinkState: state,\n\t}\n\tinfo.AddRtAttr(nl.IFLA_VF_LINK_STATE, vfmsg.Serialize())\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetVfSpoofchk enables/disables spoof check on a vf for the link.\n// Equivalent to: `ip link set $link vf $vf spoofchk $check`\nfunc LinkSetVfSpoofchk(link Link, vf int, check bool) error {\n\treturn pkgHandle.LinkSetVfSpoofchk(link, vf, check)\n}\n\n// LinkSetVfSpoofchk enables/disables spoof check on a vf for the link.\n// Equivalent to: `ip link set $link vf $vf spoofchk $check`\nfunc (h *Handle) LinkSetVfSpoofchk(link Link, vf int, check bool) error {\n\tvar setting uint32\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)\n\tinfo := data.AddRtAttr(nl.IFLA_VF_INFO, nil)\n\tif check {\n\t\tsetting = 1\n\t}\n\tvfmsg := nl.VfSpoofchk{\n\t\tVf:      uint32(vf),\n\t\tSetting: setting,\n\t}\n\tinfo.AddRtAttr(nl.IFLA_VF_SPOOFCHK, vfmsg.Serialize())\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetVfTrust enables/disables trust state on a vf for the link.\n// Equivalent to: `ip link set $link vf $vf trust $state`\nfunc LinkSetVfTrust(link Link, vf int, state bool) error {\n\treturn pkgHandle.LinkSetVfTrust(link, vf, state)\n}\n\n// LinkSetVfTrust enables/disables trust state on a vf for the link.\n// Equivalent to: `ip link set $link vf $vf trust $state`\nfunc (h *Handle) LinkSetVfTrust(link Link, vf int, state bool) error {\n\tvar setting uint32\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)\n\tinfo := data.AddRtAttr(nl.IFLA_VF_INFO, nil)\n\tif state {\n\t\tsetting = 1\n\t}\n\tvfmsg := nl.VfTrust{\n\t\tVf:      uint32(vf),\n\t\tSetting: setting,\n\t}\n\tinfo.AddRtAttr(nl.IFLA_VF_TRUST, vfmsg.Serialize())\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetVfNodeGUID sets the node GUID of a vf for the link.\n// Equivalent to: `ip link set dev $link vf $vf node_guid $nodeguid`\nfunc LinkSetVfNodeGUID(link Link, vf int, nodeguid net.HardwareAddr) error {\n\treturn pkgHandle.LinkSetVfGUID(link, vf, nodeguid, nl.IFLA_VF_IB_NODE_GUID)\n}\n\n// LinkSetVfPortGUID sets the port GUID of a vf for the link.\n// Equivalent to: `ip link set dev $link vf $vf port_guid $portguid`\nfunc LinkSetVfPortGUID(link Link, vf int, portguid net.HardwareAddr) error {\n\treturn pkgHandle.LinkSetVfGUID(link, vf, portguid, nl.IFLA_VF_IB_PORT_GUID)\n}\n\n// LinkSetVfGUID sets the node or port GUID of a vf for the link.\nfunc (h *Handle) LinkSetVfGUID(link Link, vf int, vfGuid net.HardwareAddr, guidType int) error {\n\tvar err error\n\tvar guid uint64\n\n\tbuf := bytes.NewBuffer(vfGuid)\n\terr = binary.Read(buf, binary.BigEndian, &guid)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tdata := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)\n\tinfo := data.AddRtAttr(nl.IFLA_VF_INFO, nil)\n\tvfmsg := nl.VfGUID{\n\t\tVf:   uint32(vf),\n\t\tGUID: guid,\n\t}\n\tinfo.AddRtAttr(guidType, vfmsg.Serialize())\n\treq.AddData(data)\n\n\t_, err = req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetMaster sets the master of the link device.\n// Equivalent to: `ip link set $link master $master`\nfunc LinkSetMaster(link Link, master Link) error {\n\treturn pkgHandle.LinkSetMaster(link, master)\n}\n\n// LinkSetMaster sets the master of the link device.\n// Equivalent to: `ip link set $link master $master`\nfunc (h *Handle) LinkSetMaster(link Link, master Link) error {\n\tindex := 0\n\tif master != nil {\n\t\tmasterBase := master.Attrs()\n\t\th.ensureIndex(masterBase)\n\t\tindex = masterBase.Index\n\t}\n\tif index <= 0 {\n\t\treturn fmt.Errorf(\"Device does not exist\")\n\t}\n\treturn h.LinkSetMasterByIndex(link, index)\n}\n\n// LinkSetNoMaster removes the master of the link device.\n// Equivalent to: `ip link set $link nomaster`\nfunc LinkSetNoMaster(link Link) error {\n\treturn pkgHandle.LinkSetNoMaster(link)\n}\n\n// LinkSetNoMaster removes the master of the link device.\n// Equivalent to: `ip link set $link nomaster`\nfunc (h *Handle) LinkSetNoMaster(link Link) error {\n\treturn h.LinkSetMasterByIndex(link, 0)\n}\n\n// LinkSetMasterByIndex sets the master of the link device.\n// Equivalent to: `ip link set $link master $master`\nfunc LinkSetMasterByIndex(link Link, masterIndex int) error {\n\treturn pkgHandle.LinkSetMasterByIndex(link, masterIndex)\n}\n\n// LinkSetMasterByIndex sets the master of the link device.\n// Equivalent to: `ip link set $link master $master`\nfunc (h *Handle) LinkSetMasterByIndex(link Link, masterIndex int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, uint32(masterIndex))\n\n\tdata := nl.NewRtAttr(unix.IFLA_MASTER, b)\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetNsPid puts the device into a new network namespace. The\n// pid must be a pid of a running process.\n// Equivalent to: `ip link set $link netns $pid`\nfunc LinkSetNsPid(link Link, nspid int) error {\n\treturn pkgHandle.LinkSetNsPid(link, nspid)\n}\n\n// LinkSetNsPid puts the device into a new network namespace. The\n// pid must be a pid of a running process.\n// Equivalent to: `ip link set $link netns $pid`\nfunc (h *Handle) LinkSetNsPid(link Link, nspid int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, uint32(nspid))\n\n\tdata := nl.NewRtAttr(unix.IFLA_NET_NS_PID, b)\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetNsFd puts the device into a new network namespace. The\n// fd must be an open file descriptor to a network namespace.\n// Similar to: `ip link set $link netns $ns`\nfunc LinkSetNsFd(link Link, fd int) error {\n\treturn pkgHandle.LinkSetNsFd(link, fd)\n}\n\n// LinkSetNsFd puts the device into a new network namespace. The\n// fd must be an open file descriptor to a network namespace.\n// Similar to: `ip link set $link netns $ns`\nfunc (h *Handle) LinkSetNsFd(link Link, fd int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, uint32(fd))\n\n\tdata := nl.NewRtAttr(unix.IFLA_NET_NS_FD, b)\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetXdpFd adds a bpf function to the driver. The fd must be a bpf\n// program loaded with bpf(type=BPF_PROG_TYPE_XDP)\nfunc LinkSetXdpFd(link Link, fd int) error {\n\treturn LinkSetXdpFdWithFlags(link, fd, 0)\n}\n\n// LinkSetXdpFdWithFlags adds a bpf function to the driver with the given\n// options. The fd must be a bpf program loaded with bpf(type=BPF_PROG_TYPE_XDP)\nfunc LinkSetXdpFdWithFlags(link Link, fd, flags int) error {\n\tbase := link.Attrs()\n\tensureIndex(base)\n\treq := nl.NewNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\taddXdpAttrs(&LinkXdp{Fd: fd, Flags: uint32(flags)}, req)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetGSOMaxSegs sets the GSO maximum segment count of the link device.\n// Equivalent to: `ip link set $link gso_max_segs $maxSegs`\nfunc LinkSetGSOMaxSegs(link Link, maxSegs int) error {\n\treturn pkgHandle.LinkSetGSOMaxSegs(link, maxSegs)\n}\n\n// LinkSetGSOMaxSegs sets the GSO maximum segment count of the link device.\n// Equivalent to: `ip link set $link gso_max_segs $maxSegs`\nfunc (h *Handle) LinkSetGSOMaxSegs(link Link, maxSize int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, uint32(maxSize))\n\n\tdata := nl.NewRtAttr(unix.IFLA_GSO_MAX_SEGS, b)\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetGSOMaxSize sets the IPv6 GSO maximum size of the link device.\n// Equivalent to: `ip link set $link gso_max_size $maxSize`\nfunc LinkSetGSOMaxSize(link Link, maxSize int) error {\n\treturn pkgHandle.LinkSetGSOMaxSize(link, maxSize)\n}\n\n// LinkSetGSOMaxSize sets the IPv6 GSO maximum size of the link device.\n// Equivalent to: `ip link set $link gso_max_size $maxSize`\nfunc (h *Handle) LinkSetGSOMaxSize(link Link, maxSize int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, uint32(maxSize))\n\n\tdata := nl.NewRtAttr(unix.IFLA_GSO_MAX_SIZE, b)\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetGROMaxSize sets the IPv6 GRO maximum size of the link device.\n// Equivalent to: `ip link set $link gro_max_size $maxSize`\nfunc LinkSetGROMaxSize(link Link, maxSize int) error {\n\treturn pkgHandle.LinkSetGROMaxSize(link, maxSize)\n}\n\n// LinkSetGROMaxSize sets the IPv6 GRO maximum size of the link device.\n// Equivalent to: `ip link set $link gro_max_size $maxSize`\nfunc (h *Handle) LinkSetGROMaxSize(link Link, maxSize int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, uint32(maxSize))\n\n\tdata := nl.NewRtAttr(unix.IFLA_GRO_MAX_SIZE, b)\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetGSOIPv4MaxSize sets the IPv4 GSO maximum size of the link device.\n// Equivalent to: `ip link set $link gso_ipv4_max_size $maxSize`\nfunc LinkSetGSOIPv4MaxSize(link Link, maxSize int) error {\n\treturn pkgHandle.LinkSetGSOIPv4MaxSize(link, maxSize)\n}\n\n// LinkSetGSOIPv4MaxSize sets the IPv4 GSO maximum size of the link device.\n// Equivalent to: `ip link set $link gso_ipv4_max_size $maxSize`\nfunc (h *Handle) LinkSetGSOIPv4MaxSize(link Link, maxSize int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, uint32(maxSize))\n\n\tdata := nl.NewRtAttr(unix.IFLA_GSO_IPV4_MAX_SIZE, b)\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetGROIPv4MaxSize sets the IPv4 GRO maximum size of the link device.\n// Equivalent to: `ip link set $link gro_ipv4_max_size $maxSize`\nfunc LinkSetGROIPv4MaxSize(link Link, maxSize int) error {\n\treturn pkgHandle.LinkSetGROIPv4MaxSize(link, maxSize)\n}\n\n// LinkSetGROIPv4MaxSize sets the IPv4 GRO maximum size of the link device.\n// Equivalent to: `ip link set $link gro_ipv4_max_size $maxSize`\nfunc (h *Handle) LinkSetGROIPv4MaxSize(link Link, maxSize int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, uint32(maxSize))\n\n\tdata := nl.NewRtAttr(unix.IFLA_GRO_IPV4_MAX_SIZE, b)\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\nfunc boolAttr(val bool) []byte {\n\tvar v uint8\n\tif val {\n\t\tv = 1\n\t}\n\treturn nl.Uint8Attr(v)\n}\n\ntype vxlanPortRange struct {\n\tLo, Hi uint16\n}\n\nfunc addVxlanAttrs(vxlan *Vxlan, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\n\tif vxlan.FlowBased {\n\t\tvxlan.VxlanId = 0\n\t}\n\n\tdata.AddRtAttr(nl.IFLA_VXLAN_ID, nl.Uint32Attr(uint32(vxlan.VxlanId)))\n\n\tif vxlan.VtepDevIndex != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_VXLAN_LINK, nl.Uint32Attr(uint32(vxlan.VtepDevIndex)))\n\t}\n\tif vxlan.SrcAddr != nil {\n\t\tip := vxlan.SrcAddr.To4()\n\t\tif ip != nil {\n\t\t\tdata.AddRtAttr(nl.IFLA_VXLAN_LOCAL, []byte(ip))\n\t\t} else {\n\t\t\tip = vxlan.SrcAddr.To16()\n\t\t\tif ip != nil {\n\t\t\t\tdata.AddRtAttr(nl.IFLA_VXLAN_LOCAL6, []byte(ip))\n\t\t\t}\n\t\t}\n\t}\n\tif vxlan.Group != nil {\n\t\tgroup := vxlan.Group.To4()\n\t\tif group != nil {\n\t\t\tdata.AddRtAttr(nl.IFLA_VXLAN_GROUP, []byte(group))\n\t\t} else {\n\t\t\tgroup = vxlan.Group.To16()\n\t\t\tif group != nil {\n\t\t\t\tdata.AddRtAttr(nl.IFLA_VXLAN_GROUP6, []byte(group))\n\t\t\t}\n\t\t}\n\t}\n\n\tdata.AddRtAttr(nl.IFLA_VXLAN_TTL, nl.Uint8Attr(uint8(vxlan.TTL)))\n\tdata.AddRtAttr(nl.IFLA_VXLAN_TOS, nl.Uint8Attr(uint8(vxlan.TOS)))\n\tdata.AddRtAttr(nl.IFLA_VXLAN_LEARNING, boolAttr(vxlan.Learning))\n\tdata.AddRtAttr(nl.IFLA_VXLAN_PROXY, boolAttr(vxlan.Proxy))\n\tdata.AddRtAttr(nl.IFLA_VXLAN_RSC, boolAttr(vxlan.RSC))\n\tdata.AddRtAttr(nl.IFLA_VXLAN_L2MISS, boolAttr(vxlan.L2miss))\n\tdata.AddRtAttr(nl.IFLA_VXLAN_L3MISS, boolAttr(vxlan.L3miss))\n\tdata.AddRtAttr(nl.IFLA_VXLAN_UDP_ZERO_CSUM6_TX, boolAttr(vxlan.UDP6ZeroCSumTx))\n\tdata.AddRtAttr(nl.IFLA_VXLAN_UDP_ZERO_CSUM6_RX, boolAttr(vxlan.UDP6ZeroCSumRx))\n\n\tif vxlan.UDPCSum {\n\t\tdata.AddRtAttr(nl.IFLA_VXLAN_UDP_CSUM, boolAttr(vxlan.UDPCSum))\n\t}\n\tif vxlan.GBP {\n\t\tdata.AddRtAttr(nl.IFLA_VXLAN_GBP, []byte{})\n\t}\n\tif vxlan.FlowBased {\n\t\tdata.AddRtAttr(nl.IFLA_VXLAN_FLOWBASED, boolAttr(vxlan.FlowBased))\n\t}\n\tif vxlan.NoAge {\n\t\tdata.AddRtAttr(nl.IFLA_VXLAN_AGEING, nl.Uint32Attr(0))\n\t} else if vxlan.Age > 0 {\n\t\tdata.AddRtAttr(nl.IFLA_VXLAN_AGEING, nl.Uint32Attr(uint32(vxlan.Age)))\n\t}\n\tif vxlan.Limit > 0 {\n\t\tdata.AddRtAttr(nl.IFLA_VXLAN_LIMIT, nl.Uint32Attr(uint32(vxlan.Limit)))\n\t}\n\tif vxlan.Port > 0 {\n\t\tdata.AddRtAttr(nl.IFLA_VXLAN_PORT, htons(uint16(vxlan.Port)))\n\t}\n\tif vxlan.PortLow > 0 || vxlan.PortHigh > 0 {\n\t\tpr := vxlanPortRange{uint16(vxlan.PortLow), uint16(vxlan.PortHigh)}\n\n\t\tbuf := new(bytes.Buffer)\n\t\tbinary.Write(buf, binary.BigEndian, &pr)\n\n\t\tdata.AddRtAttr(nl.IFLA_VXLAN_PORT_RANGE, buf.Bytes())\n\t}\n}\n\nfunc addBondAttrs(bond *Bond, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\tif bond.Mode >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_MODE, nl.Uint8Attr(uint8(bond.Mode)))\n\t}\n\tif bond.ActiveSlave >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_ACTIVE_SLAVE, nl.Uint32Attr(uint32(bond.ActiveSlave)))\n\t}\n\tif bond.Miimon >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_MIIMON, nl.Uint32Attr(uint32(bond.Miimon)))\n\t}\n\tif bond.UpDelay >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_UPDELAY, nl.Uint32Attr(uint32(bond.UpDelay)))\n\t}\n\tif bond.DownDelay >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_DOWNDELAY, nl.Uint32Attr(uint32(bond.DownDelay)))\n\t}\n\tif bond.UseCarrier >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_USE_CARRIER, nl.Uint8Attr(uint8(bond.UseCarrier)))\n\t}\n\tif bond.ArpInterval >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_ARP_INTERVAL, nl.Uint32Attr(uint32(bond.ArpInterval)))\n\t}\n\tif bond.ArpIpTargets != nil {\n\t\tmsg := data.AddRtAttr(nl.IFLA_BOND_ARP_IP_TARGET, nil)\n\t\tfor i := range bond.ArpIpTargets {\n\t\t\tip := bond.ArpIpTargets[i].To4()\n\t\t\tif ip != nil {\n\t\t\t\tmsg.AddRtAttr(i, []byte(ip))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tip = bond.ArpIpTargets[i].To16()\n\t\t\tif ip != nil {\n\t\t\t\tmsg.AddRtAttr(i, []byte(ip))\n\t\t\t}\n\t\t}\n\t}\n\tif bond.ArpValidate >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_ARP_VALIDATE, nl.Uint32Attr(uint32(bond.ArpValidate)))\n\t}\n\tif bond.ArpAllTargets >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_ARP_ALL_TARGETS, nl.Uint32Attr(uint32(bond.ArpAllTargets)))\n\t}\n\tif bond.Primary >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_PRIMARY, nl.Uint32Attr(uint32(bond.Primary)))\n\t}\n\tif bond.PrimaryReselect >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_PRIMARY_RESELECT, nl.Uint8Attr(uint8(bond.PrimaryReselect)))\n\t}\n\tif bond.FailOverMac >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_FAIL_OVER_MAC, nl.Uint8Attr(uint8(bond.FailOverMac)))\n\t}\n\tif bond.XmitHashPolicy >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_XMIT_HASH_POLICY, nl.Uint8Attr(uint8(bond.XmitHashPolicy)))\n\t}\n\tif bond.ResendIgmp >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_RESEND_IGMP, nl.Uint32Attr(uint32(bond.ResendIgmp)))\n\t}\n\tif bond.NumPeerNotif >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_NUM_PEER_NOTIF, nl.Uint8Attr(uint8(bond.NumPeerNotif)))\n\t}\n\tif bond.AllSlavesActive >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_ALL_SLAVES_ACTIVE, nl.Uint8Attr(uint8(bond.AllSlavesActive)))\n\t}\n\tif bond.MinLinks >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_MIN_LINKS, nl.Uint32Attr(uint32(bond.MinLinks)))\n\t}\n\tif bond.LpInterval >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_LP_INTERVAL, nl.Uint32Attr(uint32(bond.LpInterval)))\n\t}\n\tif bond.PacketsPerSlave >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_PACKETS_PER_SLAVE, nl.Uint32Attr(uint32(bond.PacketsPerSlave)))\n\t}\n\tif bond.LacpRate >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_AD_LACP_RATE, nl.Uint8Attr(uint8(bond.LacpRate)))\n\t}\n\tif bond.AdSelect >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_AD_SELECT, nl.Uint8Attr(uint8(bond.AdSelect)))\n\t}\n\tif bond.AdActorSysPrio >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_AD_ACTOR_SYS_PRIO, nl.Uint16Attr(uint16(bond.AdActorSysPrio)))\n\t}\n\tif bond.AdUserPortKey >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_AD_USER_PORT_KEY, nl.Uint16Attr(uint16(bond.AdUserPortKey)))\n\t}\n\tif bond.AdActorSystem != nil {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_AD_ACTOR_SYSTEM, []byte(bond.AdActorSystem))\n\t}\n\tif bond.TlbDynamicLb >= 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_TLB_DYNAMIC_LB, nl.Uint8Attr(uint8(bond.TlbDynamicLb)))\n\t}\n}\n\nfunc cleanupFds(fds []*os.File) {\n\tfor _, f := range fds {\n\t\tf.Close()\n\t}\n}\n\n// LinkAdd adds a new link device. The type and features of the device\n// are taken from the parameters in the link object.\n// Equivalent to: `ip link add $link`\nfunc LinkAdd(link Link) error {\n\treturn pkgHandle.LinkAdd(link)\n}\n\n// LinkAdd adds a new link device. The type and features of the device\n// are taken from the parameters in the link object.\n// Equivalent to: `ip link add $link`\nfunc (h *Handle) LinkAdd(link Link) error {\n\treturn h.linkModify(link, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)\n}\n\nfunc LinkModify(link Link) error {\n\treturn pkgHandle.LinkModify(link)\n}\n\nfunc (h *Handle) LinkModify(link Link) error {\n\treturn h.linkModify(link, unix.NLM_F_REQUEST|unix.NLM_F_ACK)\n}\n\nfunc (h *Handle) linkModify(link Link, flags int) error {\n\t// TODO: support extra data for macvlan\n\tbase := link.Attrs()\n\n\t// if tuntap, then the name can be empty, OS will provide a name\n\ttuntap, isTuntap := link.(*Tuntap)\n\n\tif base.Name == \"\" && !isTuntap {\n\t\treturn fmt.Errorf(\"LinkAttrs.Name cannot be empty\")\n\t}\n\n\tif isTuntap {\n\t\tif tuntap.Mode < unix.IFF_TUN || tuntap.Mode > unix.IFF_TAP {\n\t\t\treturn fmt.Errorf(\"Tuntap.Mode %v unknown\", tuntap.Mode)\n\t\t}\n\n\t\tqueues := tuntap.Queues\n\n\t\tvar fds []*os.File\n\t\tvar req ifReq\n\t\tcopy(req.Name[:15], base.Name)\n\n\t\treq.Flags = uint16(tuntap.Flags)\n\n\t\tif queues == 0 { //Legacy compatibility\n\t\t\tqueues = 1\n\t\t\tif tuntap.Flags == 0 {\n\t\t\t\treq.Flags = uint16(TUNTAP_DEFAULTS)\n\t\t\t}\n\t\t} else {\n\t\t\t// For best peformance set Flags to TUNTAP_MULTI_QUEUE_DEFAULTS | TUNTAP_VNET_HDR\n\t\t\t// when a) KVM has support for this ABI and\n\t\t\t//      b) the value of the flag is queryable using the TUNGETIFF ioctl\n\t\t\tif tuntap.Flags == 0 {\n\t\t\t\treq.Flags = uint16(TUNTAP_MULTI_QUEUE_DEFAULTS)\n\t\t\t}\n\t\t}\n\n\t\treq.Flags |= uint16(tuntap.Mode)\n\t\tconst TUN = \"/dev/net/tun\"\n\t\tfor i := 0; i < queues; i++ {\n\t\t\tlocalReq := req\n\t\t\tfd, err := unix.Open(TUN, os.O_RDWR|syscall.O_CLOEXEC, 0)\n\t\t\tif err != nil {\n\t\t\t\tcleanupFds(fds)\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t_, _, errno := unix.Syscall(unix.SYS_IOCTL, uintptr(fd), uintptr(unix.TUNSETIFF), uintptr(unsafe.Pointer(&localReq)))\n\t\t\tif errno != 0 {\n\t\t\t\t// close the new fd\n\t\t\t\tunix.Close(fd)\n\t\t\t\t// and the already opened ones\n\t\t\t\tcleanupFds(fds)\n\t\t\t\treturn fmt.Errorf(\"Tuntap IOCTL TUNSETIFF failed [%d], errno %v\", i, errno)\n\t\t\t}\n\n\t\t\t_, _, errno = syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), syscall.TUNSETOWNER, uintptr(tuntap.Owner))\n\t\t\tif errno != 0 {\n\t\t\t\tcleanupFds(fds)\n\t\t\t\treturn fmt.Errorf(\"Tuntap IOCTL TUNSETOWNER failed [%d], errno %v\", i, errno)\n\t\t\t}\n\n\t\t\t_, _, errno = syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), syscall.TUNSETGROUP, uintptr(tuntap.Group))\n\t\t\tif errno != 0 {\n\t\t\t\tcleanupFds(fds)\n\t\t\t\treturn fmt.Errorf(\"Tuntap IOCTL TUNSETGROUP failed [%d], errno %v\", i, errno)\n\t\t\t}\n\n\t\t\t// Set the tun device to non-blocking before use. The below comment\n\t\t\t// taken from:\n\t\t\t//\n\t\t\t// https://github.com/mistsys/tuntap/commit/161418c25003bbee77d085a34af64d189df62bea\n\t\t\t//\n\t\t\t// Note there is a complication because in go, if a device node is\n\t\t\t// opened, go sets it to use nonblocking I/O. However a /dev/net/tun\n\t\t\t// doesn't work with epoll until after the TUNSETIFF ioctl has been\n\t\t\t// done. So we open the unix fd directly, do the ioctl, then put the\n\t\t\t// fd in nonblocking mode, an then finally wrap it in a os.File,\n\t\t\t// which will see the nonblocking mode and add the fd to the\n\t\t\t// pollable set, so later on when we Read() from it blocked the\n\t\t\t// calling thread in the kernel.\n\t\t\t//\n\t\t\t// See\n\t\t\t//   https://github.com/golang/go/issues/30426\n\t\t\t// which got exposed in go 1.13 by the fix to\n\t\t\t//   https://github.com/golang/go/issues/30624\n\t\t\terr = unix.SetNonblock(fd, true)\n\t\t\tif err != nil {\n\t\t\t\tcleanupFds(fds)\n\t\t\t\treturn fmt.Errorf(\"Tuntap set to non-blocking failed [%d], err %v\", i, err)\n\t\t\t}\n\n\t\t\t// create the file from the file descriptor and store it\n\t\t\tfile := os.NewFile(uintptr(fd), TUN)\n\t\t\tfds = append(fds, file)\n\n\t\t\t// 1) we only care for the name of the first tap in the multi queue set\n\t\t\t// 2) if the original name was empty, the localReq has now the actual name\n\t\t\t//\n\t\t\t// In addition:\n\t\t\t// This ensures that the link name is always identical to what the kernel returns.\n\t\t\t// Not only in case of an empty name, but also when using name templates.\n\t\t\t// e.g. when the provided name is \"tap%d\", the kernel replaces %d with the next available number.\n\t\t\tif i == 0 {\n\t\t\t\tlink.Attrs().Name = strings.Trim(string(localReq.Name[:]), \"\\x00\")\n\t\t\t}\n\n\t\t}\n\n\t\tcontrol := func(file *os.File, f func(fd uintptr)) error {\n\t\t\tname := file.Name()\n\t\t\tconn, err := file.SyscallConn()\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"SyscallConn() failed on %s: %v\", name, err)\n\t\t\t}\n\t\t\tif err := conn.Control(f); err != nil {\n\t\t\t\treturn fmt.Errorf(\"Failed to get file descriptor for %s: %v\", name, err)\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\n\t\t// only persist interface if NonPersist is NOT set\n\t\tif !tuntap.NonPersist {\n\t\t\tvar errno syscall.Errno\n\t\t\tif err := control(fds[0], func(fd uintptr) {\n\t\t\t\t_, _, errno = unix.Syscall(unix.SYS_IOCTL, fd, uintptr(unix.TUNSETPERSIST), 1)\n\t\t\t}); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif errno != 0 {\n\t\t\t\tcleanupFds(fds)\n\t\t\t\treturn fmt.Errorf(\"Tuntap IOCTL TUNSETPERSIST failed, errno %v\", errno)\n\t\t\t}\n\t\t}\n\n\t\th.ensureIndex(base)\n\n\t\t// can't set master during create, so set it afterwards\n\t\tif base.MasterIndex != 0 {\n\t\t\t// TODO: verify MasterIndex is actually a bridge?\n\t\t\terr := h.LinkSetMasterByIndex(link, base.MasterIndex)\n\t\t\tif err != nil {\n\t\t\t\t// un-persist (e.g. allow the interface to be removed) the tuntap\n\t\t\t\t// should not hurt if not set prior, condition might be not needed\n\t\t\t\tif !tuntap.NonPersist {\n\t\t\t\t\t// ignore error\n\t\t\t\t\t_ = control(fds[0], func(fd uintptr) {\n\t\t\t\t\t\t_, _, _ = unix.Syscall(unix.SYS_IOCTL, fd, uintptr(unix.TUNSETPERSIST), 0)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tcleanupFds(fds)\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tif tuntap.Queues == 0 {\n\t\t\tcleanupFds(fds)\n\t\t} else {\n\t\t\ttuntap.Fds = fds\n\t\t}\n\n\t\treturn nil\n\t}\n\n\treq := h.newNetlinkRequest(unix.RTM_NEWLINK, flags)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\t// TODO: make it shorter\n\tif base.Flags&net.FlagUp != 0 {\n\t\tmsg.Change = unix.IFF_UP\n\t\tmsg.Flags = unix.IFF_UP\n\t}\n\tif base.Flags&net.FlagBroadcast != 0 {\n\t\tmsg.Change |= unix.IFF_BROADCAST\n\t\tmsg.Flags |= unix.IFF_BROADCAST\n\t}\n\tif base.Flags&net.FlagLoopback != 0 {\n\t\tmsg.Change |= unix.IFF_LOOPBACK\n\t\tmsg.Flags |= unix.IFF_LOOPBACK\n\t}\n\tif base.Flags&net.FlagPointToPoint != 0 {\n\t\tmsg.Change |= unix.IFF_POINTOPOINT\n\t\tmsg.Flags |= unix.IFF_POINTOPOINT\n\t}\n\tif base.Flags&net.FlagMulticast != 0 {\n\t\tmsg.Change |= unix.IFF_MULTICAST\n\t\tmsg.Flags |= unix.IFF_MULTICAST\n\t}\n\tif base.Index != 0 {\n\t\tmsg.Index = int32(base.Index)\n\t}\n\n\treq.AddData(msg)\n\n\tif base.ParentIndex != 0 {\n\t\tb := make([]byte, 4)\n\t\tnative.PutUint32(b, uint32(base.ParentIndex))\n\t\tdata := nl.NewRtAttr(unix.IFLA_LINK, b)\n\t\treq.AddData(data)\n\t} else if link.Type() == \"ipvlan\" || link.Type() == \"ipoib\" {\n\t\treturn fmt.Errorf(\"Can't create %s link without ParentIndex\", link.Type())\n\t}\n\n\tnameData := nl.NewRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(base.Name))\n\treq.AddData(nameData)\n\n\tif base.Alias != \"\" {\n\t\talias := nl.NewRtAttr(unix.IFLA_IFALIAS, []byte(base.Alias))\n\t\treq.AddData(alias)\n\t}\n\n\tif base.MTU > 0 {\n\t\tmtu := nl.NewRtAttr(unix.IFLA_MTU, nl.Uint32Attr(uint32(base.MTU)))\n\t\treq.AddData(mtu)\n\t}\n\n\tif base.TxQLen >= 0 {\n\t\tqlen := nl.NewRtAttr(unix.IFLA_TXQLEN, nl.Uint32Attr(uint32(base.TxQLen)))\n\t\treq.AddData(qlen)\n\t}\n\n\tif base.HardwareAddr != nil {\n\t\thwaddr := nl.NewRtAttr(unix.IFLA_ADDRESS, []byte(base.HardwareAddr))\n\t\treq.AddData(hwaddr)\n\t}\n\n\tif base.NumTxQueues > 0 {\n\t\ttxqueues := nl.NewRtAttr(unix.IFLA_NUM_TX_QUEUES, nl.Uint32Attr(uint32(base.NumTxQueues)))\n\t\treq.AddData(txqueues)\n\t}\n\n\tif base.NumRxQueues > 0 {\n\t\trxqueues := nl.NewRtAttr(unix.IFLA_NUM_RX_QUEUES, nl.Uint32Attr(uint32(base.NumRxQueues)))\n\t\treq.AddData(rxqueues)\n\t}\n\n\tif base.GSOMaxSegs > 0 {\n\t\tgsoAttr := nl.NewRtAttr(unix.IFLA_GSO_MAX_SEGS, nl.Uint32Attr(base.GSOMaxSegs))\n\t\treq.AddData(gsoAttr)\n\t}\n\n\tif base.GSOMaxSize > 0 {\n\t\tgsoAttr := nl.NewRtAttr(unix.IFLA_GSO_MAX_SIZE, nl.Uint32Attr(base.GSOMaxSize))\n\t\treq.AddData(gsoAttr)\n\t}\n\n\tif base.GROMaxSize > 0 {\n\t\tgroAttr := nl.NewRtAttr(unix.IFLA_GRO_MAX_SIZE, nl.Uint32Attr(base.GROMaxSize))\n\t\treq.AddData(groAttr)\n\t}\n\n\tif base.GSOIPv4MaxSize > 0 {\n\t\tgsoAttr := nl.NewRtAttr(unix.IFLA_GSO_IPV4_MAX_SIZE, nl.Uint32Attr(base.GSOIPv4MaxSize))\n\t\treq.AddData(gsoAttr)\n\t}\n\n\tif base.GROIPv4MaxSize > 0 {\n\t\tgroAttr := nl.NewRtAttr(unix.IFLA_GRO_IPV4_MAX_SIZE, nl.Uint32Attr(base.GROIPv4MaxSize))\n\t\treq.AddData(groAttr)\n\t}\n\n\tif base.Group > 0 {\n\t\tgroupAttr := nl.NewRtAttr(unix.IFLA_GROUP, nl.Uint32Attr(base.Group))\n\t\treq.AddData(groupAttr)\n\t}\n\n\tif base.Namespace != nil {\n\t\tvar attr *nl.RtAttr\n\t\tswitch ns := base.Namespace.(type) {\n\t\tcase NsPid:\n\t\t\tval := nl.Uint32Attr(uint32(ns))\n\t\t\tattr = nl.NewRtAttr(unix.IFLA_NET_NS_PID, val)\n\t\tcase NsFd:\n\t\t\tval := nl.Uint32Attr(uint32(ns))\n\t\t\tattr = nl.NewRtAttr(unix.IFLA_NET_NS_FD, val)\n\t\t}\n\n\t\treq.AddData(attr)\n\t}\n\n\tif base.Xdp != nil {\n\t\taddXdpAttrs(base.Xdp, req)\n\t}\n\n\tlinkInfo := nl.NewRtAttr(unix.IFLA_LINKINFO, nil)\n\tlinkInfo.AddRtAttr(nl.IFLA_INFO_KIND, nl.NonZeroTerminated(link.Type()))\n\n\tswitch link := link.(type) {\n\tcase *Vlan:\n\t\tb := make([]byte, 2)\n\t\tnative.PutUint16(b, uint16(link.VlanId))\n\t\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\t\tdata.AddRtAttr(nl.IFLA_VLAN_ID, b)\n\t\tvar vlanFlags uint32\n\t\tvar vlanFlagsMask uint32\n\t\tif link.ReorderHdr != nil {\n\t\t\tvlanFlagsMask |= nl.VLAN_FLAG_REORDER_HDR\n\t\t\tif *link.ReorderHdr {\n\t\t\t\tvlanFlags |= nl.VLAN_FLAG_REORDER_HDR\n\t\t\t} else {\n\t\t\t\tvlanFlags &= ^uint32(nl.VLAN_FLAG_REORDER_HDR)\n\t\t\t}\n\t\t}\n\t\tif link.Gvrp != nil {\n\t\t\tvlanFlagsMask |= nl.VLAN_FLAG_GVRP\n\t\t\tif *link.Gvrp {\n\t\t\t\tvlanFlags |= nl.VLAN_FLAG_GVRP\n\t\t\t} else {\n\t\t\t\tvlanFlags &= ^uint32(nl.VLAN_FLAG_GVRP)\n\t\t\t}\n\t\t}\n\t\tif link.Mvrp != nil {\n\t\t\tvlanFlagsMask |= nl.VLAN_FLAG_MVRP\n\t\t\tif *link.Mvrp {\n\t\t\t\tvlanFlags |= nl.VLAN_FLAG_MVRP\n\t\t\t} else {\n\t\t\t\tvlanFlags &= ^uint32(nl.VLAN_FLAG_MVRP)\n\t\t\t}\n\t\t}\n\t\tif link.LooseBinding != nil {\n\t\t\tvlanFlagsMask |= nl.VLAN_FLAG_LOOSE_BINDING\n\t\t\tif *link.LooseBinding {\n\t\t\t\tvlanFlags |= nl.VLAN_FLAG_LOOSE_BINDING\n\t\t\t} else {\n\t\t\t\tvlanFlags &= ^uint32(nl.VLAN_FLAG_LOOSE_BINDING)\n\t\t\t}\n\t\t}\n\t\tif link.BridgeBinding != nil {\n\t\t\tvlanFlagsMask |= nl.VLAN_FLAG_BRIDGE_BINDING\n\t\t\tif *link.BridgeBinding {\n\t\t\t\tvlanFlags |= nl.VLAN_FLAG_BRIDGE_BINDING\n\t\t\t} else {\n\t\t\t\tvlanFlags &= ^uint32(nl.VLAN_FLAG_BRIDGE_BINDING)\n\t\t\t}\n\t\t}\n\n\t\tbuf := &bytes.Buffer{}\n\t\tbuf.Write(nl.Uint32Attr(vlanFlags))\n\t\tbuf.Write(nl.Uint32Attr(vlanFlagsMask))\n\t\tdata.AddRtAttr(nl.IFLA_VLAN_FLAGS, buf.Bytes())\n\n\t\tif link.IngressQosMap != nil {\n\t\t\tingressMap := data.AddRtAttr(nl.IFLA_VLAN_INGRESS_QOS, nil)\n\t\t\tfor from, to := range link.IngressQosMap {\n\t\t\t\tbuf := &bytes.Buffer{}\n\t\t\t\tbuf.Write(nl.Uint32Attr(from))\n\t\t\t\tbuf.Write(nl.Uint32Attr(to))\n\t\t\t\tingressMap.AddRtAttr(nl.IFLA_VLAN_QOS_MAPPING, buf.Bytes())\n\t\t\t}\n\t\t}\n\n\t\tif link.EgressQosMap != nil {\n\t\t\tegressMap := data.AddRtAttr(nl.IFLA_VLAN_EGRESS_QOS, nil)\n\t\t\tfor from, to := range link.EgressQosMap {\n\t\t\t\tbuf := &bytes.Buffer{}\n\t\t\t\tbuf.Write(nl.Uint32Attr(from))\n\t\t\t\tbuf.Write(nl.Uint32Attr(to))\n\t\t\t\tegressMap.AddRtAttr(nl.IFLA_VLAN_QOS_MAPPING, buf.Bytes())\n\t\t\t}\n\t\t}\n\n\t\tif link.VlanProtocol != VLAN_PROTOCOL_UNKNOWN {\n\t\t\tdata.AddRtAttr(nl.IFLA_VLAN_PROTOCOL, htons(uint16(link.VlanProtocol)))\n\t\t}\n\tcase *Netkit:\n\t\tif err := addNetkitAttrs(link, linkInfo, flags); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase *Veth:\n\t\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\t\tpeer := data.AddRtAttr(nl.VETH_INFO_PEER, nil)\n\t\tnl.NewIfInfomsgChild(peer, unix.AF_UNSPEC)\n\t\tpeer.AddRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(link.PeerName))\n\n\t\tif link.PeerTxQLen >= 0 {\n\t\t\tpeer.AddRtAttr(unix.IFLA_TXQLEN, nl.Uint32Attr(uint32(link.PeerTxQLen)))\n\t\t} else if base.TxQLen >= 0 {\n\t\t\tpeer.AddRtAttr(unix.IFLA_TXQLEN, nl.Uint32Attr(uint32(base.TxQLen)))\n\t\t}\n\t\tif link.PeerNumTxQueues > 0 {\n\t\t\tpeer.AddRtAttr(unix.IFLA_NUM_TX_QUEUES, nl.Uint32Attr(link.PeerNumTxQueues))\n\t\t} else if base.NumTxQueues > 0 {\n\t\t\tpeer.AddRtAttr(unix.IFLA_NUM_TX_QUEUES, nl.Uint32Attr(uint32(base.NumTxQueues)))\n\t\t}\n\t\tif link.PeerNumRxQueues > 0 {\n\t\t\tpeer.AddRtAttr(unix.IFLA_NUM_RX_QUEUES, nl.Uint32Attr(link.PeerNumRxQueues))\n\t\t} else if base.NumRxQueues > 0 {\n\t\t\tpeer.AddRtAttr(unix.IFLA_NUM_RX_QUEUES, nl.Uint32Attr(uint32(base.NumRxQueues)))\n\t\t}\n\t\tif link.PeerMTU > 0 {\n\t\t\tpeer.AddRtAttr(unix.IFLA_MTU, nl.Uint32Attr(link.PeerMTU))\n\t\t} else if base.MTU > 0 {\n\t\t\tpeer.AddRtAttr(unix.IFLA_MTU, nl.Uint32Attr(uint32(base.MTU)))\n\t\t}\n\t\tif link.PeerHardwareAddr != nil {\n\t\t\tpeer.AddRtAttr(unix.IFLA_ADDRESS, []byte(link.PeerHardwareAddr))\n\t\t}\n\t\tif link.PeerNamespace != nil {\n\t\t\tswitch ns := link.PeerNamespace.(type) {\n\t\t\tcase NsPid:\n\t\t\t\tval := nl.Uint32Attr(uint32(ns))\n\t\t\t\tpeer.AddRtAttr(unix.IFLA_NET_NS_PID, val)\n\t\t\tcase NsFd:\n\t\t\t\tval := nl.Uint32Attr(uint32(ns))\n\t\t\t\tpeer.AddRtAttr(unix.IFLA_NET_NS_FD, val)\n\t\t\t}\n\t\t}\n\tcase *Vxlan:\n\t\taddVxlanAttrs(link, linkInfo)\n\tcase *Bond:\n\t\taddBondAttrs(link, linkInfo)\n\tcase *IPVlan:\n\t\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\t\tdata.AddRtAttr(nl.IFLA_IPVLAN_MODE, nl.Uint16Attr(uint16(link.Mode)))\n\t\tdata.AddRtAttr(nl.IFLA_IPVLAN_FLAG, nl.Uint16Attr(uint16(link.Flag)))\n\tcase *IPVtap:\n\t\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\t\tdata.AddRtAttr(nl.IFLA_IPVLAN_MODE, nl.Uint16Attr(uint16(link.Mode)))\n\t\tdata.AddRtAttr(nl.IFLA_IPVLAN_FLAG, nl.Uint16Attr(uint16(link.Flag)))\n\tcase *Macvlan:\n\t\taddMacvlanAttrs(link, linkInfo)\n\tcase *Macvtap:\n\t\taddMacvtapAttrs(link, linkInfo)\n\tcase *Geneve:\n\t\taddGeneveAttrs(link, linkInfo)\n\tcase *Gretap:\n\t\taddGretapAttrs(link, linkInfo)\n\tcase *Iptun:\n\t\taddIptunAttrs(link, linkInfo)\n\tcase *Ip6tnl:\n\t\taddIp6tnlAttrs(link, linkInfo)\n\tcase *Sittun:\n\t\taddSittunAttrs(link, linkInfo)\n\tcase *Gretun:\n\t\taddGretunAttrs(link, linkInfo)\n\tcase *Vti:\n\t\taddVtiAttrs(link, linkInfo)\n\tcase *Vrf:\n\t\taddVrfAttrs(link, linkInfo)\n\tcase *Bridge:\n\t\taddBridgeAttrs(link, linkInfo)\n\tcase *GTP:\n\t\taddGTPAttrs(link, linkInfo)\n\tcase *Xfrmi:\n\t\taddXfrmiAttrs(link, linkInfo)\n\tcase *IPoIB:\n\t\taddIPoIBAttrs(link, linkInfo)\n\tcase *BareUDP:\n\t\taddBareUDPAttrs(link, linkInfo)\n\t}\n\n\treq.AddData(linkInfo)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\th.ensureIndex(base)\n\n\t// can't set master during create, so set it afterwards\n\tif base.MasterIndex != 0 {\n\t\t// TODO: verify MasterIndex is actually a bridge?\n\t\treturn h.LinkSetMasterByIndex(link, base.MasterIndex)\n\t}\n\treturn nil\n}\n\n// LinkDel deletes link device. Either Index or Name must be set in\n// the link object for it to be deleted. The other values are ignored.\n// Equivalent to: `ip link del $link`\nfunc LinkDel(link Link) error {\n\treturn pkgHandle.LinkDel(link)\n}\n\n// LinkDel deletes link device. Either Index or Name must be set in\n// the link object for it to be deleted. The other values are ignored.\n// Equivalent to: `ip link del $link`\nfunc (h *Handle) LinkDel(link Link) error {\n\tbase := link.Attrs()\n\n\th.ensureIndex(base)\n\n\treq := h.newNetlinkRequest(unix.RTM_DELLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\nfunc (h *Handle) linkByNameDump(name string) (Link, error) {\n\tlinks, executeErr := h.LinkList()\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\tfor _, link := range links {\n\t\tif link.Attrs().Name == name {\n\t\t\treturn link, executeErr\n\t\t}\n\n\t\t// support finding interfaces also via altnames\n\t\tfor _, altName := range link.Attrs().AltNames {\n\t\t\tif altName == name {\n\t\t\t\treturn link, executeErr\n\t\t\t}\n\t\t}\n\t}\n\treturn nil, LinkNotFoundError{fmt.Errorf(\"Link %s not found\", name)}\n}\n\nfunc (h *Handle) linkByAliasDump(alias string) (Link, error) {\n\tlinks, executeErr := h.LinkList()\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\tfor _, link := range links {\n\t\tif link.Attrs().Alias == alias {\n\t\t\treturn link, executeErr\n\t\t}\n\t}\n\treturn nil, LinkNotFoundError{fmt.Errorf(\"Link alias %s not found\", alias)}\n}\n\n// LinkByName finds a link by name and returns a pointer to the object.\n//\n// If the kernel doesn't support IFLA_IFNAME, this method will fall back to\n// filtering a dump of all link names. In this case, if the returned error is\n// [ErrDumpInterrupted] the result may be missing or outdated.\nfunc LinkByName(name string) (Link, error) {\n\treturn pkgHandle.LinkByName(name)\n}\n\n// LinkByName finds a link by name and returns a pointer to the object.\n//\n// If the kernel doesn't support IFLA_IFNAME, this method will fall back to\n// filtering a dump of all link names. In this case, if the returned error is\n// [ErrDumpInterrupted] the result may be missing or outdated.\nfunc (h *Handle) LinkByName(name string) (Link, error) {\n\tif h.lookupByDump {\n\t\treturn h.linkByNameDump(name)\n\t}\n\n\treq := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\treq.AddData(msg)\n\n\tattr := nl.NewRtAttr(unix.IFLA_EXT_MASK, nl.Uint32Attr(nl.RTEXT_FILTER_VF))\n\treq.AddData(attr)\n\n\tnameData := nl.NewRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(name))\n\tif len(name) > 15 {\n\t\tnameData = nl.NewRtAttr(unix.IFLA_ALT_IFNAME, nl.ZeroTerminated(name))\n\t}\n\treq.AddData(nameData)\n\n\tlink, err := execGetLink(req)\n\tif err == unix.EINVAL {\n\t\t// older kernels don't support looking up via IFLA_IFNAME\n\t\t// so fall back to dumping all links\n\t\th.lookupByDump = true\n\t\treturn h.linkByNameDump(name)\n\t}\n\n\treturn link, err\n}\n\n// LinkByAlias finds a link by its alias and returns a pointer to the object.\n// If there are multiple links with the alias it returns the first one\n//\n// If the kernel doesn't support IFLA_IFALIAS, this method will fall back to\n// filtering a dump of all link names. In this case, if the returned error is\n// [ErrDumpInterrupted] the result may be missing or outdated.\nfunc LinkByAlias(alias string) (Link, error) {\n\treturn pkgHandle.LinkByAlias(alias)\n}\n\n// LinkByAlias finds a link by its alias and returns a pointer to the object.\n// If there are multiple links with the alias it returns the first one\n//\n// If the kernel doesn't support IFLA_IFALIAS, this method will fall back to\n// filtering a dump of all link names. In this case, if the returned error is\n// [ErrDumpInterrupted] the result may be missing or outdated.\nfunc (h *Handle) LinkByAlias(alias string) (Link, error) {\n\tif h.lookupByDump {\n\t\treturn h.linkByAliasDump(alias)\n\t}\n\n\treq := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\treq.AddData(msg)\n\n\tattr := nl.NewRtAttr(unix.IFLA_EXT_MASK, nl.Uint32Attr(nl.RTEXT_FILTER_VF))\n\treq.AddData(attr)\n\n\tnameData := nl.NewRtAttr(unix.IFLA_IFALIAS, nl.ZeroTerminated(alias))\n\treq.AddData(nameData)\n\n\tlink, err := execGetLink(req)\n\tif err == unix.EINVAL {\n\t\t// older kernels don't support looking up via IFLA_IFALIAS\n\t\t// so fall back to dumping all links\n\t\th.lookupByDump = true\n\t\treturn h.linkByAliasDump(alias)\n\t}\n\n\treturn link, err\n}\n\n// LinkByIndex finds a link by index and returns a pointer to the object.\nfunc LinkByIndex(index int) (Link, error) {\n\treturn pkgHandle.LinkByIndex(index)\n}\n\n// LinkByIndex finds a link by index and returns a pointer to the object.\nfunc (h *Handle) LinkByIndex(index int) (Link, error) {\n\treq := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(index)\n\treq.AddData(msg)\n\tattr := nl.NewRtAttr(unix.IFLA_EXT_MASK, nl.Uint32Attr(nl.RTEXT_FILTER_VF))\n\treq.AddData(attr)\n\n\treturn execGetLink(req)\n}\n\nfunc execGetLink(req *nl.NetlinkRequest) (Link, error) {\n\tmsgs, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\tif err != nil {\n\t\tif errno, ok := err.(syscall.Errno); ok {\n\t\t\tif errno == unix.ENODEV {\n\t\t\t\treturn nil, LinkNotFoundError{fmt.Errorf(\"Link not found\")}\n\t\t\t}\n\t\t}\n\t\treturn nil, err\n\t}\n\n\tswitch {\n\tcase len(msgs) == 0:\n\t\treturn nil, LinkNotFoundError{fmt.Errorf(\"Link not found\")}\n\n\tcase len(msgs) == 1:\n\t\treturn LinkDeserialize(nil, msgs[0])\n\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"More than one link found\")\n\t}\n}\n\n// LinkDeserialize deserializes a raw message received from netlink into\n// a link object.\nfunc LinkDeserialize(hdr *unix.NlMsghdr, m []byte) (Link, error) {\n\tmsg := nl.DeserializeIfInfomsg(m)\n\n\tattrs, err := nl.ParseRouteAttr(m[msg.Len():])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbase := NewLinkAttrs()\n\tbase.Index = int(msg.Index)\n\tbase.RawFlags = msg.Flags\n\tbase.Flags = linkFlags(msg.Flags)\n\tbase.EncapType = msg.EncapType()\n\tbase.NetNsID = -1\n\tif msg.Flags&unix.IFF_ALLMULTI != 0 {\n\t\tbase.Allmulti = 1\n\t}\n\tif msg.Flags&unix.IFF_MULTICAST != 0 {\n\t\tbase.Multi = 1\n\t}\n\n\tvar (\n\t\tlink      Link\n\t\tstats32   *LinkStatistics32\n\t\tstats64   *LinkStatistics64\n\t\tlinkType  string\n\t\tlinkSlave LinkSlave\n\t\tslaveType string\n\t)\n\tfor _, attr := range attrs {\n\t\tswitch attr.Attr.Type {\n\t\tcase unix.IFLA_LINKINFO:\n\t\t\tinfos, err := nl.ParseRouteAttr(attr.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tfor _, info := range infos {\n\t\t\t\tswitch info.Attr.Type {\n\t\t\t\tcase nl.IFLA_INFO_KIND:\n\t\t\t\t\tlinkType = string(info.Value[:len(info.Value)-1])\n\t\t\t\t\tswitch linkType {\n\t\t\t\t\tcase \"dummy\":\n\t\t\t\t\t\tlink = &Dummy{}\n\t\t\t\t\tcase \"ifb\":\n\t\t\t\t\t\tlink = &Ifb{}\n\t\t\t\t\tcase \"bridge\":\n\t\t\t\t\t\tlink = &Bridge{}\n\t\t\t\t\tcase \"vlan\":\n\t\t\t\t\t\tlink = &Vlan{}\n\t\t\t\t\tcase \"netkit\":\n\t\t\t\t\t\tlink = &Netkit{}\n\t\t\t\t\tcase \"veth\":\n\t\t\t\t\t\tlink = &Veth{}\n\t\t\t\t\tcase \"wireguard\":\n\t\t\t\t\t\tlink = &Wireguard{}\n\t\t\t\t\tcase \"vxlan\":\n\t\t\t\t\t\tlink = &Vxlan{}\n\t\t\t\t\tcase \"bond\":\n\t\t\t\t\t\tlink = &Bond{}\n\t\t\t\t\tcase \"ipvlan\":\n\t\t\t\t\t\tlink = &IPVlan{}\n\t\t\t\t\tcase \"ipvtap\":\n\t\t\t\t\t\tlink = &IPVtap{}\n\t\t\t\t\tcase \"macvlan\":\n\t\t\t\t\t\tlink = &Macvlan{}\n\t\t\t\t\tcase \"macvtap\":\n\t\t\t\t\t\tlink = &Macvtap{}\n\t\t\t\t\tcase \"geneve\":\n\t\t\t\t\t\tlink = &Geneve{}\n\t\t\t\t\tcase \"gretap\":\n\t\t\t\t\t\tlink = &Gretap{}\n\t\t\t\t\tcase \"ip6gretap\":\n\t\t\t\t\t\tlink = &Gretap{}\n\t\t\t\t\tcase \"ipip\":\n\t\t\t\t\t\tlink = &Iptun{}\n\t\t\t\t\tcase \"ip6tnl\":\n\t\t\t\t\t\tlink = &Ip6tnl{}\n\t\t\t\t\tcase \"sit\":\n\t\t\t\t\t\tlink = &Sittun{}\n\t\t\t\t\tcase \"gre\":\n\t\t\t\t\t\tlink = &Gretun{}\n\t\t\t\t\tcase \"ip6gre\":\n\t\t\t\t\t\tlink = &Gretun{}\n\t\t\t\t\tcase \"vti\", \"vti6\":\n\t\t\t\t\t\tlink = &Vti{}\n\t\t\t\t\tcase \"vrf\":\n\t\t\t\t\t\tlink = &Vrf{}\n\t\t\t\t\tcase \"gtp\":\n\t\t\t\t\t\tlink = &GTP{}\n\t\t\t\t\tcase \"xfrm\":\n\t\t\t\t\t\tlink = &Xfrmi{}\n\t\t\t\t\tcase \"tun\":\n\t\t\t\t\t\tlink = &Tuntap{}\n\t\t\t\t\tcase \"ipoib\":\n\t\t\t\t\t\tlink = &IPoIB{}\n\t\t\t\t\tcase \"can\":\n\t\t\t\t\t\tlink = &Can{}\n\t\t\t\t\tcase \"bareudp\":\n\t\t\t\t\t\tlink = &BareUDP{}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tlink = &GenericLink{LinkType: linkType}\n\t\t\t\t\t}\n\t\t\t\tcase nl.IFLA_INFO_DATA:\n\t\t\t\t\tdata, err := nl.ParseRouteAttr(info.Value)\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\tswitch linkType {\n\t\t\t\t\tcase \"netkit\":\n\t\t\t\t\t\tparseNetkitData(link, data)\n\t\t\t\t\tcase \"vlan\":\n\t\t\t\t\t\tparseVlanData(link, data)\n\t\t\t\t\tcase \"vxlan\":\n\t\t\t\t\t\tparseVxlanData(link, data)\n\t\t\t\t\tcase \"bond\":\n\t\t\t\t\t\tparseBondData(link, data)\n\t\t\t\t\tcase \"ipvlan\":\n\t\t\t\t\t\tparseIPVlanData(link, data)\n\t\t\t\t\tcase \"ipvtap\":\n\t\t\t\t\t\tparseIPVtapData(link, data)\n\t\t\t\t\tcase \"macvlan\":\n\t\t\t\t\t\tparseMacvlanData(link, data)\n\t\t\t\t\tcase \"macvtap\":\n\t\t\t\t\t\tparseMacvtapData(link, data)\n\t\t\t\t\tcase \"geneve\":\n\t\t\t\t\t\tparseGeneveData(link, data)\n\t\t\t\t\tcase \"gretap\":\n\t\t\t\t\t\tparseGretapData(link, data)\n\t\t\t\t\tcase \"ip6gretap\":\n\t\t\t\t\t\tparseGretapData(link, data)\n\t\t\t\t\tcase \"ipip\":\n\t\t\t\t\t\tparseIptunData(link, data)\n\t\t\t\t\tcase \"ip6tnl\":\n\t\t\t\t\t\tparseIp6tnlData(link, data)\n\t\t\t\t\tcase \"sit\":\n\t\t\t\t\t\tparseSittunData(link, data)\n\t\t\t\t\tcase \"gre\":\n\t\t\t\t\t\tparseGretunData(link, data)\n\t\t\t\t\tcase \"ip6gre\":\n\t\t\t\t\t\tparseGretunData(link, data)\n\t\t\t\t\tcase \"vti\", \"vti6\":\n\t\t\t\t\t\tparseVtiData(link, data)\n\t\t\t\t\tcase \"vrf\":\n\t\t\t\t\t\tparseVrfData(link, data)\n\t\t\t\t\tcase \"bridge\":\n\t\t\t\t\t\tparseBridgeData(link, data)\n\t\t\t\t\tcase \"gtp\":\n\t\t\t\t\t\tparseGTPData(link, data)\n\t\t\t\t\tcase \"xfrm\":\n\t\t\t\t\t\tparseXfrmiData(link, data)\n\t\t\t\t\tcase \"tun\":\n\t\t\t\t\t\tparseTuntapData(link, data)\n\t\t\t\t\tcase \"ipoib\":\n\t\t\t\t\t\tparseIPoIBData(link, data)\n\t\t\t\t\tcase \"can\":\n\t\t\t\t\t\tparseCanData(link, data)\n\t\t\t\t\tcase \"bareudp\":\n\t\t\t\t\t\tparseBareUDPData(link, data)\n\t\t\t\t\t}\n\n\t\t\t\tcase nl.IFLA_INFO_SLAVE_KIND:\n\t\t\t\t\tslaveType = string(info.Value[:len(info.Value)-1])\n\t\t\t\t\tswitch slaveType {\n\t\t\t\t\tcase \"bond\":\n\t\t\t\t\t\tlinkSlave = &BondSlave{}\n\t\t\t\t\tcase \"vrf\":\n\t\t\t\t\t\tlinkSlave = &VrfSlave{}\n\t\t\t\t\t}\n\n\t\t\t\tcase nl.IFLA_INFO_SLAVE_DATA:\n\t\t\t\t\tswitch slaveType {\n\t\t\t\t\tcase \"bond\":\n\t\t\t\t\t\tdata, err := nl.ParseRouteAttr(info.Value)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseBondSlaveData(linkSlave, data)\n\t\t\t\t\tcase \"vrf\":\n\t\t\t\t\t\tdata, err := nl.ParseRouteAttr(info.Value)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseVrfSlaveData(linkSlave, data)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase unix.IFLA_ADDRESS:\n\t\t\tvar nonzero bool\n\t\t\tfor _, b := range attr.Value {\n\t\t\t\tif b != 0 {\n\t\t\t\t\tnonzero = true\n\t\t\t\t}\n\t\t\t}\n\t\t\tif nonzero {\n\t\t\t\tbase.HardwareAddr = attr.Value[:]\n\t\t\t}\n\t\tcase unix.IFLA_IFNAME:\n\t\t\tbase.Name = string(attr.Value[:len(attr.Value)-1])\n\t\tcase unix.IFLA_MTU:\n\t\t\tbase.MTU = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.IFLA_PROMISCUITY:\n\t\t\tbase.Promisc = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.IFLA_LINK:\n\t\t\tbase.ParentIndex = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.IFLA_MASTER:\n\t\t\tbase.MasterIndex = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.IFLA_TXQLEN:\n\t\t\tbase.TxQLen = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.IFLA_IFALIAS:\n\t\t\tbase.Alias = string(attr.Value[:len(attr.Value)-1])\n\t\tcase unix.IFLA_STATS:\n\t\t\tstats32 = new(LinkStatistics32)\n\t\t\tif err := binary.Read(bytes.NewBuffer(attr.Value[:]), nl.NativeEndian(), stats32); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\tcase unix.IFLA_STATS64:\n\t\t\tstats64 = new(LinkStatistics64)\n\t\t\tif err := binary.Read(bytes.NewBuffer(attr.Value[:]), nl.NativeEndian(), stats64); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\tcase unix.IFLA_XDP:\n\t\t\txdp, err := parseLinkXdp(attr.Value[:])\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tbase.Xdp = xdp\n\t\tcase unix.IFLA_PROTINFO | unix.NLA_F_NESTED:\n\t\t\tif hdr != nil && hdr.Type == unix.RTM_NEWLINK &&\n\t\t\t\tmsg.Family == unix.AF_BRIDGE {\n\t\t\t\tattrs, err := nl.ParseRouteAttr(attr.Value[:])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tprotinfo := parseProtinfo(attrs)\n\t\t\t\tbase.Protinfo = &protinfo\n\t\t\t}\n\t\tcase unix.IFLA_PROP_LIST | unix.NLA_F_NESTED:\n\t\t\tattrs, err := nl.ParseRouteAttr(attr.Value[:])\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tbase.AltNames = []string{}\n\t\t\tfor _, attr := range attrs {\n\t\t\t\tif attr.Attr.Type == unix.IFLA_ALT_IFNAME {\n\t\t\t\t\tbase.AltNames = append(base.AltNames, nl.BytesToString(attr.Value))\n\t\t\t\t}\n\t\t\t}\n\t\tcase unix.IFLA_OPERSTATE:\n\t\t\tbase.OperState = LinkOperState(uint8(attr.Value[0]))\n\t\tcase unix.IFLA_PHYS_SWITCH_ID:\n\t\t\tbase.PhysSwitchID = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.IFLA_LINK_NETNSID:\n\t\t\tbase.NetNsID = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.IFLA_TSO_MAX_SEGS:\n\t\t\tbase.TSOMaxSegs = native.Uint32(attr.Value[0:4])\n\t\tcase unix.IFLA_TSO_MAX_SIZE:\n\t\t\tbase.TSOMaxSize = native.Uint32(attr.Value[0:4])\n\t\tcase unix.IFLA_GSO_MAX_SEGS:\n\t\t\tbase.GSOMaxSegs = native.Uint32(attr.Value[0:4])\n\t\tcase unix.IFLA_GSO_MAX_SIZE:\n\t\t\tbase.GSOMaxSize = native.Uint32(attr.Value[0:4])\n\t\tcase unix.IFLA_GRO_MAX_SIZE:\n\t\t\tbase.GROMaxSize = native.Uint32(attr.Value[0:4])\n\t\tcase unix.IFLA_GSO_IPV4_MAX_SIZE:\n\t\t\tbase.GSOIPv4MaxSize = native.Uint32(attr.Value[0:4])\n\t\tcase unix.IFLA_GRO_IPV4_MAX_SIZE:\n\t\t\tbase.GROIPv4MaxSize = native.Uint32(attr.Value[0:4])\n\t\tcase unix.IFLA_VFINFO_LIST:\n\t\t\tdata, err := nl.ParseRouteAttr(attr.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tvfs, err := parseVfInfoList(data)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tbase.Vfs = vfs\n\t\tcase unix.IFLA_NUM_TX_QUEUES:\n\t\t\tbase.NumTxQueues = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.IFLA_NUM_RX_QUEUES:\n\t\t\tbase.NumRxQueues = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.IFLA_GROUP:\n\t\t\tbase.Group = native.Uint32(attr.Value[0:4])\n\t\tcase unix.IFLA_PERM_ADDRESS:\n\t\t\tfor _, b := range attr.Value {\n\t\t\t\tif b != 0 {\n\t\t\t\t\tbase.PermHWAddr = attr.Value[:]\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase unix.IFLA_PARENT_DEV_NAME:\n\t\t\tbase.ParentDev = string(attr.Value[:len(attr.Value)-1])\n\t\tcase unix.IFLA_PARENT_DEV_BUS_NAME:\n\t\t\tbase.ParentDevBus = string(attr.Value[:len(attr.Value)-1])\n\t\t}\n\t}\n\n\tif stats64 != nil {\n\t\tbase.Statistics = (*LinkStatistics)(stats64)\n\t} else if stats32 != nil {\n\t\tbase.Statistics = (*LinkStatistics)(stats32.to64())\n\t}\n\n\t// Links that don't have IFLA_INFO_KIND are hardware devices\n\tif link == nil {\n\t\tlink = &Device{}\n\t}\n\t*link.Attrs() = base\n\tlink.Attrs().Slave = linkSlave\n\n\t// If the tuntap attributes are not updated by netlink due to\n\t// an older driver, use sysfs\n\tif link != nil && linkType == \"tun\" {\n\t\ttuntap := link.(*Tuntap)\n\n\t\tif tuntap.Mode == 0 {\n\t\t\tifname := tuntap.Attrs().Name\n\t\t\tif flags, err := readSysPropAsInt64(ifname, \"tun_flags\"); err == nil {\n\n\t\t\t\tif flags&unix.IFF_TUN != 0 {\n\t\t\t\t\ttuntap.Mode = unix.IFF_TUN\n\t\t\t\t} else if flags&unix.IFF_TAP != 0 {\n\t\t\t\t\ttuntap.Mode = unix.IFF_TAP\n\t\t\t\t}\n\n\t\t\t\ttuntap.NonPersist = false\n\t\t\t\tif flags&unix.IFF_PERSIST == 0 {\n\t\t\t\t\ttuntap.NonPersist = true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// The sysfs interface for owner/group returns -1 for root user, instead of returning 0.\n\t\t\t// So explicitly check for negative value, before assigning the owner uid/gid.\n\t\t\tif owner, err := readSysPropAsInt64(ifname, \"owner\"); err == nil && owner > 0 {\n\t\t\t\ttuntap.Owner = uint32(owner)\n\t\t\t}\n\n\t\t\tif group, err := readSysPropAsInt64(ifname, \"group\"); err == nil && group > 0 {\n\t\t\t\ttuntap.Group = uint32(group)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn link, nil\n}\n\nfunc readSysPropAsInt64(ifname, prop string) (int64, error) {\n\tfname := fmt.Sprintf(\"/sys/class/net/%s/%s\", ifname, prop)\n\tcontents, err := ioutil.ReadFile(fname)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tnum, err := strconv.ParseInt(strings.TrimSpace(string(contents)), 0, 64)\n\tif err == nil {\n\t\treturn num, nil\n\t}\n\n\treturn 0, err\n}\n\n// LinkList gets a list of link devices.\n// Equivalent to: `ip link show`\nfunc LinkList() ([]Link, error) {\n\treturn pkgHandle.LinkList()\n}\n\n// LinkList gets a list of link devices.\n// Equivalent to: `ip link show`\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) LinkList() ([]Link, error) {\n\t// NOTE(vish): This duplicates functionality in net/iface_linux.go, but we need\n\t//             to get the message ourselves to parse link type.\n\treq := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_DUMP)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\treq.AddData(msg)\n\tattr := nl.NewRtAttr(unix.IFLA_EXT_MASK, nl.Uint32Attr(nl.RTEXT_FILTER_VF))\n\treq.AddData(attr)\n\n\tmsgs, executeErr := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWLINK)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\tvar res []Link\n\tfor _, m := range msgs {\n\t\tlink, err := LinkDeserialize(nil, m)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tres = append(res, link)\n\t}\n\n\treturn res, executeErr\n}\n\n// LinkUpdate is used to pass information back from LinkSubscribe()\ntype LinkUpdate struct {\n\tnl.IfInfomsg\n\tHeader unix.NlMsghdr\n\tLink\n}\n\n// LinkSubscribe takes a chan down which notifications will be sent\n// when links change.  Close the 'done' chan to stop subscription.\nfunc LinkSubscribe(ch chan<- LinkUpdate, done <-chan struct{}) error {\n\treturn linkSubscribeAt(netns.None(), netns.None(), ch, done, nil, false, 0, nil, false)\n}\n\n// LinkSubscribeAt works like LinkSubscribe plus it allows the caller\n// to choose the network namespace in which to subscribe (ns).\nfunc LinkSubscribeAt(ns netns.NsHandle, ch chan<- LinkUpdate, done <-chan struct{}) error {\n\treturn linkSubscribeAt(ns, netns.None(), ch, done, nil, false, 0, nil, false)\n}\n\n// LinkSubscribeOptions contains a set of options to use with\n// LinkSubscribeWithOptions.\ntype LinkSubscribeOptions struct {\n\tNamespace              *netns.NsHandle\n\tErrorCallback          func(error)\n\tListExisting           bool\n\tReceiveBufferSize      int\n\tReceiveBufferForceSize bool\n\tReceiveTimeout         *unix.Timeval\n}\n\n// LinkSubscribeWithOptions work like LinkSubscribe but enable to\n// provide additional options to modify the behavior. Currently, the\n// namespace can be provided as well as an error callback.\n//\n// When options.ListExisting is true, options.ErrorCallback may be\n// called with [ErrDumpInterrupted] to indicate that results from\n// the initial dump of links may be inconsistent or incomplete.\nfunc LinkSubscribeWithOptions(ch chan<- LinkUpdate, done <-chan struct{}, options LinkSubscribeOptions) error {\n\tif options.Namespace == nil {\n\t\tnone := netns.None()\n\t\toptions.Namespace = &none\n\t}\n\treturn linkSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting,\n\t\toptions.ReceiveBufferSize, options.ReceiveTimeout, options.ReceiveBufferForceSize)\n}\n\nfunc linkSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- LinkUpdate, done <-chan struct{}, cberr func(error), listExisting bool,\n\trcvbuf int, rcvTimeout *unix.Timeval, rcvbufForce bool) error {\n\ts, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_LINK)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif rcvTimeout != nil {\n\t\tif err := s.SetReceiveTimeout(rcvTimeout); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif rcvbuf != 0 {\n\t\terr = s.SetReceiveBufferSize(rcvbuf, rcvbufForce)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif done != nil {\n\t\tgo func() {\n\t\t\t<-done\n\t\t\ts.Close()\n\t\t}()\n\t}\n\tif listExisting {\n\t\treq := pkgHandle.newNetlinkRequest(unix.RTM_GETLINK,\n\t\t\tunix.NLM_F_DUMP)\n\t\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\t\treq.AddData(msg)\n\t\tif err := s.Send(req); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tgo func() {\n\t\tdefer close(ch)\n\t\tfor {\n\t\t\tmsgs, from, err := s.Receive()\n\t\t\tif err != nil {\n\t\t\t\tif cberr != nil {\n\t\t\t\t\tcberr(fmt.Errorf(\"Receive failed: %v\",\n\t\t\t\t\t\terr))\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif from.Pid != nl.PidKernel {\n\t\t\t\tif cberr != nil {\n\t\t\t\t\tcberr(fmt.Errorf(\"Wrong sender portid %d, expected %d\", from.Pid, nl.PidKernel))\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor _, m := range msgs {\n\t\t\t\tif m.Header.Flags&unix.NLM_F_DUMP_INTR != 0 && cberr != nil {\n\t\t\t\t\tcberr(ErrDumpInterrupted)\n\t\t\t\t}\n\t\t\t\tif m.Header.Type == unix.NLMSG_DONE {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif m.Header.Type == unix.NLMSG_ERROR {\n\t\t\t\t\terror := int32(native.Uint32(m.Data[0:4]))\n\t\t\t\t\tif error == 0 {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif cberr != nil {\n\t\t\t\t\t\tcberr(fmt.Errorf(\"error message: %v\",\n\t\t\t\t\t\t\tsyscall.Errno(-error)))\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tifmsg := nl.DeserializeIfInfomsg(m.Data)\n\t\t\t\theader := unix.NlMsghdr(m.Header)\n\t\t\t\tlink, err := LinkDeserialize(&header, m.Data)\n\t\t\t\tif err != nil {\n\t\t\t\t\tif cberr != nil {\n\t\t\t\t\t\tcberr(err)\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tch <- LinkUpdate{IfInfomsg: *ifmsg, Header: header, Link: link}\n\t\t\t}\n\t\t}\n\t}()\n\n\treturn nil\n}\n\nfunc LinkSetHairpin(link Link, mode bool) error {\n\treturn pkgHandle.LinkSetHairpin(link, mode)\n}\n\nfunc (h *Handle) LinkSetHairpin(link Link, mode bool) error {\n\treturn h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_MODE)\n}\n\nfunc LinkSetGuard(link Link, mode bool) error {\n\treturn pkgHandle.LinkSetGuard(link, mode)\n}\n\nfunc (h *Handle) LinkSetGuard(link Link, mode bool) error {\n\treturn h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_GUARD)\n}\n\n// LinkSetBRSlaveGroupFwdMask set the group_fwd_mask of a bridge slave interface\nfunc LinkSetBRSlaveGroupFwdMask(link Link, mask uint16) error {\n\treturn pkgHandle.LinkSetBRSlaveGroupFwdMask(link, mask)\n}\n\n// LinkSetBRSlaveGroupFwdMask set the group_fwd_mask of a bridge slave interface\nfunc (h *Handle) LinkSetBRSlaveGroupFwdMask(link Link, mask uint16) error {\n\treturn h.setProtinfoAttrRawVal(link, nl.Uint16Attr(mask), nl.IFLA_BRPORT_GROUP_FWD_MASK)\n}\n\nfunc LinkSetFastLeave(link Link, mode bool) error {\n\treturn pkgHandle.LinkSetFastLeave(link, mode)\n}\n\nfunc (h *Handle) LinkSetFastLeave(link Link, mode bool) error {\n\treturn h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_FAST_LEAVE)\n}\n\nfunc LinkSetLearning(link Link, mode bool) error {\n\treturn pkgHandle.LinkSetLearning(link, mode)\n}\n\nfunc (h *Handle) LinkSetLearning(link Link, mode bool) error {\n\treturn h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_LEARNING)\n}\n\nfunc LinkSetVlanTunnel(link Link, mode bool) error {\n\treturn pkgHandle.LinkSetVlanTunnel(link, mode)\n}\n\nfunc (h *Handle) LinkSetVlanTunnel(link Link, mode bool) error {\n\treturn h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_VLAN_TUNNEL)\n}\n\nfunc LinkSetRootBlock(link Link, mode bool) error {\n\treturn pkgHandle.LinkSetRootBlock(link, mode)\n}\n\nfunc (h *Handle) LinkSetRootBlock(link Link, mode bool) error {\n\treturn h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_PROTECT)\n}\n\nfunc LinkSetFlood(link Link, mode bool) error {\n\treturn pkgHandle.LinkSetFlood(link, mode)\n}\n\nfunc (h *Handle) LinkSetFlood(link Link, mode bool) error {\n\treturn h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_UNICAST_FLOOD)\n}\n\nfunc LinkSetIsolated(link Link, mode bool) error {\n\treturn pkgHandle.LinkSetIsolated(link, mode)\n}\n\nfunc (h *Handle) LinkSetIsolated(link Link, mode bool) error {\n\treturn h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_ISOLATED)\n}\n\nfunc LinkSetBrProxyArp(link Link, mode bool) error {\n\treturn pkgHandle.LinkSetBrProxyArp(link, mode)\n}\n\nfunc (h *Handle) LinkSetBrProxyArp(link Link, mode bool) error {\n\treturn h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_PROXYARP)\n}\n\nfunc LinkSetBrProxyArpWiFi(link Link, mode bool) error {\n\treturn pkgHandle.LinkSetBrProxyArpWiFi(link, mode)\n}\n\nfunc (h *Handle) LinkSetBrProxyArpWiFi(link Link, mode bool) error {\n\treturn h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_PROXYARP_WIFI)\n}\n\nfunc LinkSetBrNeighSuppress(link Link, mode bool) error {\n\treturn pkgHandle.LinkSetBrNeighSuppress(link, mode)\n}\n\nfunc (h *Handle) LinkSetBrNeighSuppress(link Link, mode bool) error {\n\treturn h.setProtinfoAttr(link, mode, nl.IFLA_BRPORT_NEIGH_SUPPRESS)\n}\n\nfunc (h *Handle) setProtinfoAttrRawVal(link Link, val []byte, attr int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_BRIDGE)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tbr := nl.NewRtAttr(unix.IFLA_PROTINFO|unix.NLA_F_NESTED, nil)\n\tbr.AddRtAttr(attr, val)\n\treq.AddData(br)\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\nfunc (h *Handle) setProtinfoAttr(link Link, mode bool, attr int) error {\n\treturn h.setProtinfoAttrRawVal(link, boolToByte(mode), attr)\n}\n\n// LinkSetTxQLen sets the transaction queue length for the link.\n// Equivalent to: `ip link set $link txqlen $qlen`\nfunc LinkSetTxQLen(link Link, qlen int) error {\n\treturn pkgHandle.LinkSetTxQLen(link, qlen)\n}\n\n// LinkSetTxQLen sets the transaction queue length for the link.\n// Equivalent to: `ip link set $link txqlen $qlen`\nfunc (h *Handle) LinkSetTxQLen(link Link, qlen int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, uint32(qlen))\n\n\tdata := nl.NewRtAttr(unix.IFLA_TXQLEN, b)\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetGroup sets the link group id which can be used to perform mass actions\n// with iproute2 as well use it as a reference in nft filters.\n// Equivalent to: `ip link set $link group $id`\nfunc LinkSetGroup(link Link, group int) error {\n\treturn pkgHandle.LinkSetGroup(link, group)\n}\n\n// LinkSetGroup sets the link group id which can be used to perform mass actions\n// with iproute2 as well use it as a reference in nft filters.\n// Equivalent to: `ip link set $link group $id`\nfunc (h *Handle) LinkSetGroup(link Link, group int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, uint32(group))\n\n\tdata := nl.NewRtAttr(unix.IFLA_GROUP, b)\n\treq.AddData(data)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetIP6AddrGenMode sets the IPv6 address generation mode of the link device.\n// Equivalent to: `ip link set $link addrgenmode $mode`\nfunc LinkSetIP6AddrGenMode(link Link, mode int) error {\n\treturn pkgHandle.LinkSetIP6AddrGenMode(link, mode)\n}\n\n// LinkSetIP6AddrGenMode sets the IPv6 address generation mode of the link device.\n// Equivalent to: `ip link set $link addrgenmode $mode`\nfunc (h *Handle) LinkSetIP6AddrGenMode(link Link, mode int) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tb := make([]byte, 1)\n\tb[0] = uint8(mode)\n\n\tdata := nl.NewRtAttr(unix.IFLA_INET6_ADDR_GEN_MODE, b)\n\taf := nl.NewRtAttr(unix.AF_INET6, data.Serialize())\n\tspec := nl.NewRtAttr(unix.IFLA_AF_SPEC, af.Serialize())\n\treq.AddData(spec)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\nfunc addNetkitAttrs(nk *Netkit, linkInfo *nl.RtAttr, flag int) error {\n\tif nk.Mode != NETKIT_MODE_L2 && (nk.LinkAttrs.HardwareAddr != nil || nk.peerLinkAttrs.HardwareAddr != nil) {\n\t\treturn fmt.Errorf(\"netkit only allows setting Ethernet in L2 mode\")\n\t}\n\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\t// Kernel will return error if trying to change the mode of an existing netkit device\n\tdata.AddRtAttr(nl.IFLA_NETKIT_MODE, nl.Uint32Attr(uint32(nk.Mode)))\n\tdata.AddRtAttr(nl.IFLA_NETKIT_POLICY, nl.Uint32Attr(uint32(nk.Policy)))\n\tdata.AddRtAttr(nl.IFLA_NETKIT_PEER_POLICY, nl.Uint32Attr(uint32(nk.PeerPolicy)))\n\tdata.AddRtAttr(nl.IFLA_NETKIT_SCRUB, nl.Uint32Attr(uint32(nk.Scrub)))\n\tdata.AddRtAttr(nl.IFLA_NETKIT_PEER_SCRUB, nl.Uint32Attr(uint32(nk.PeerScrub)))\n\n\tif (flag & unix.NLM_F_EXCL) == 0 {\n\t\t// Modifying peer link attributes will not take effect\n\t\treturn nil\n\t}\n\n\tpeer := data.AddRtAttr(nl.IFLA_NETKIT_PEER_INFO, nil)\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tif nk.peerLinkAttrs.Flags&net.FlagUp != 0 {\n\t\tmsg.Change = unix.IFF_UP\n\t\tmsg.Flags = unix.IFF_UP\n\t}\n\tif nk.peerLinkAttrs.Index != 0 {\n\t\tmsg.Index = int32(nk.peerLinkAttrs.Index)\n\t}\n\tpeer.AddChild(msg)\n\tif nk.peerLinkAttrs.Name != \"\" {\n\t\tpeer.AddRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(nk.peerLinkAttrs.Name))\n\t}\n\tif nk.peerLinkAttrs.MTU > 0 {\n\t\tpeer.AddRtAttr(unix.IFLA_MTU, nl.Uint32Attr(uint32(nk.peerLinkAttrs.MTU)))\n\t}\n\tif nk.peerLinkAttrs.GSOMaxSegs > 0 {\n\t\tpeer.AddRtAttr(unix.IFLA_GSO_MAX_SEGS, nl.Uint32Attr(nk.peerLinkAttrs.GSOMaxSegs))\n\t}\n\tif nk.peerLinkAttrs.GSOMaxSize > 0 {\n\t\tpeer.AddRtAttr(unix.IFLA_GSO_MAX_SIZE, nl.Uint32Attr(nk.peerLinkAttrs.GSOMaxSize))\n\t}\n\tif nk.peerLinkAttrs.GSOIPv4MaxSize > 0 {\n\t\tpeer.AddRtAttr(unix.IFLA_GSO_IPV4_MAX_SIZE, nl.Uint32Attr(nk.peerLinkAttrs.GSOIPv4MaxSize))\n\t}\n\tif nk.peerLinkAttrs.GROIPv4MaxSize > 0 {\n\t\tpeer.AddRtAttr(unix.IFLA_GRO_IPV4_MAX_SIZE, nl.Uint32Attr(nk.peerLinkAttrs.GROIPv4MaxSize))\n\t}\n\tif nk.peerLinkAttrs.Namespace != nil {\n\t\tswitch ns := nk.peerLinkAttrs.Namespace.(type) {\n\t\tcase NsPid:\n\t\t\tpeer.AddRtAttr(unix.IFLA_NET_NS_PID, nl.Uint32Attr(uint32(ns)))\n\t\tcase NsFd:\n\t\t\tpeer.AddRtAttr(unix.IFLA_NET_NS_FD, nl.Uint32Attr(uint32(ns)))\n\t\t}\n\t}\n\tif nk.peerLinkAttrs.HardwareAddr != nil {\n\t\tpeer.AddRtAttr(unix.IFLA_ADDRESS, []byte(nk.peerLinkAttrs.HardwareAddr))\n\t}\n\treturn nil\n}\n\nfunc parseNetkitData(link Link, data []syscall.NetlinkRouteAttr) {\n\tnetkit := link.(*Netkit)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_NETKIT_PRIMARY:\n\t\t\tisPrimary := datum.Value[0:1][0]\n\t\t\tif isPrimary != 0 {\n\t\t\t\tnetkit.isPrimary = true\n\t\t\t}\n\t\tcase nl.IFLA_NETKIT_MODE:\n\t\t\tnetkit.Mode = NetkitMode(native.Uint32(datum.Value[0:4]))\n\t\tcase nl.IFLA_NETKIT_POLICY:\n\t\t\tnetkit.Policy = NetkitPolicy(native.Uint32(datum.Value[0:4]))\n\t\tcase nl.IFLA_NETKIT_PEER_POLICY:\n\t\t\tnetkit.PeerPolicy = NetkitPolicy(native.Uint32(datum.Value[0:4]))\n\t\tcase nl.IFLA_NETKIT_SCRUB:\n\t\t\tnetkit.supportsScrub = true\n\t\t\tnetkit.Scrub = NetkitScrub(native.Uint32(datum.Value[0:4]))\n\t\tcase nl.IFLA_NETKIT_PEER_SCRUB:\n\t\t\tnetkit.supportsScrub = true\n\t\t\tnetkit.PeerScrub = NetkitScrub(native.Uint32(datum.Value[0:4]))\n\t\t}\n\t}\n}\n\nfunc parseVlanQosMap(data []byte) map[uint32]uint32 {\n\tvalues, err := nl.ParseRouteAttr(data)\n\tif err != nil {\n\t\treturn nil\n\t}\n\n\tqosMap := make(map[uint32]uint32)\n\n\tfor _, value := range values {\n\t\tswitch value.Attr.Type {\n\t\tcase nl.IFLA_VLAN_QOS_MAPPING:\n\t\t\tfrom := native.Uint32(value.Value[:4])\n\t\t\tto := native.Uint32(value.Value[4:])\n\t\t\tqosMap[from] = to\n\t\t}\n\t}\n\n\treturn qosMap\n}\n\nfunc parseVlanData(link Link, data []syscall.NetlinkRouteAttr) {\n\tvlan := link.(*Vlan)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_VLAN_ID:\n\t\t\tvlan.VlanId = int(native.Uint16(datum.Value[0:2]))\n\t\tcase nl.IFLA_VLAN_FLAGS:\n\t\t\tflags := native.Uint32(datum.Value[0:4])\n\t\t\ttrueVal := true\n\t\t\tfalseVal := false\n\t\t\tif flags&nl.VLAN_FLAG_REORDER_HDR != 0 {\n\t\t\t\tvlan.ReorderHdr = &trueVal\n\t\t\t} else {\n\t\t\t\tvlan.ReorderHdr = &falseVal\n\t\t\t}\n\t\t\tif flags&nl.VLAN_FLAG_GVRP != 0 {\n\t\t\t\tvlan.Gvrp = &trueVal\n\t\t\t} else {\n\t\t\t\tvlan.Gvrp = &falseVal\n\t\t\t}\n\t\t\tif flags&nl.VLAN_FLAG_LOOSE_BINDING != 0 {\n\t\t\t\tvlan.LooseBinding = &trueVal\n\t\t\t} else {\n\t\t\t\tvlan.LooseBinding = &falseVal\n\t\t\t}\n\t\t\tif flags&nl.VLAN_FLAG_MVRP != 0 {\n\t\t\t\tvlan.Mvrp = &trueVal\n\t\t\t} else {\n\t\t\t\tvlan.Mvrp = &falseVal\n\t\t\t}\n\t\t\tif flags&nl.VLAN_FLAG_BRIDGE_BINDING != 0 {\n\t\t\t\tvlan.BridgeBinding = &trueVal\n\t\t\t} else {\n\t\t\t\tvlan.BridgeBinding = &falseVal\n\t\t\t}\n\t\tcase nl.IFLA_VLAN_EGRESS_QOS:\n\t\t\tvlan.EgressQosMap = parseVlanQosMap(datum.Value)\n\t\tcase nl.IFLA_VLAN_INGRESS_QOS:\n\t\t\tvlan.IngressQosMap = parseVlanQosMap(datum.Value)\n\t\tcase nl.IFLA_VLAN_PROTOCOL:\n\t\t\tvlan.VlanProtocol = VlanProtocol(int(ntohs(datum.Value[0:2])))\n\t\t}\n\t}\n}\n\nfunc parseVxlanData(link Link, data []syscall.NetlinkRouteAttr) {\n\tvxlan := link.(*Vxlan)\n\tfor _, datum := range data {\n\t\t// NOTE(vish): Apparently some messages can be sent with no value.\n\t\t//             We special case GBP here to not change existing\n\t\t//             functionality. It appears that GBP sends a datum.Value\n\t\t//             of null.\n\t\tif len(datum.Value) == 0 && datum.Attr.Type != nl.IFLA_VXLAN_GBP {\n\t\t\tcontinue\n\t\t}\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_VXLAN_ID:\n\t\t\tvxlan.VxlanId = int(native.Uint32(datum.Value[0:4]))\n\t\tcase nl.IFLA_VXLAN_LINK:\n\t\t\tvxlan.VtepDevIndex = int(native.Uint32(datum.Value[0:4]))\n\t\tcase nl.IFLA_VXLAN_LOCAL:\n\t\t\tvxlan.SrcAddr = net.IP(datum.Value[0:4])\n\t\tcase nl.IFLA_VXLAN_LOCAL6:\n\t\t\tvxlan.SrcAddr = net.IP(datum.Value[0:16])\n\t\tcase nl.IFLA_VXLAN_GROUP:\n\t\t\tvxlan.Group = net.IP(datum.Value[0:4])\n\t\tcase nl.IFLA_VXLAN_GROUP6:\n\t\t\tvxlan.Group = net.IP(datum.Value[0:16])\n\t\tcase nl.IFLA_VXLAN_TTL:\n\t\t\tvxlan.TTL = int(datum.Value[0])\n\t\tcase nl.IFLA_VXLAN_TOS:\n\t\t\tvxlan.TOS = int(datum.Value[0])\n\t\tcase nl.IFLA_VXLAN_LEARNING:\n\t\t\tvxlan.Learning = int8(datum.Value[0]) != 0\n\t\tcase nl.IFLA_VXLAN_PROXY:\n\t\t\tvxlan.Proxy = int8(datum.Value[0]) != 0\n\t\tcase nl.IFLA_VXLAN_RSC:\n\t\t\tvxlan.RSC = int8(datum.Value[0]) != 0\n\t\tcase nl.IFLA_VXLAN_L2MISS:\n\t\t\tvxlan.L2miss = int8(datum.Value[0]) != 0\n\t\tcase nl.IFLA_VXLAN_L3MISS:\n\t\t\tvxlan.L3miss = int8(datum.Value[0]) != 0\n\t\tcase nl.IFLA_VXLAN_UDP_CSUM:\n\t\t\tvxlan.UDPCSum = int8(datum.Value[0]) != 0\n\t\tcase nl.IFLA_VXLAN_UDP_ZERO_CSUM6_TX:\n\t\t\tvxlan.UDP6ZeroCSumTx = int8(datum.Value[0]) != 0\n\t\tcase nl.IFLA_VXLAN_UDP_ZERO_CSUM6_RX:\n\t\t\tvxlan.UDP6ZeroCSumRx = int8(datum.Value[0]) != 0\n\t\tcase nl.IFLA_VXLAN_GBP:\n\t\t\tvxlan.GBP = true\n\t\tcase nl.IFLA_VXLAN_FLOWBASED:\n\t\t\tvxlan.FlowBased = int8(datum.Value[0]) != 0\n\t\tcase nl.IFLA_VXLAN_AGEING:\n\t\t\tvxlan.Age = int(native.Uint32(datum.Value[0:4]))\n\t\t\tvxlan.NoAge = vxlan.Age == 0\n\t\tcase nl.IFLA_VXLAN_LIMIT:\n\t\t\tvxlan.Limit = int(native.Uint32(datum.Value[0:4]))\n\t\tcase nl.IFLA_VXLAN_PORT:\n\t\t\tvxlan.Port = int(ntohs(datum.Value[0:2]))\n\t\tcase nl.IFLA_VXLAN_PORT_RANGE:\n\t\t\tbuf := bytes.NewBuffer(datum.Value[0:4])\n\t\t\tvar pr vxlanPortRange\n\t\t\tif binary.Read(buf, binary.BigEndian, &pr) == nil {\n\t\t\t\tvxlan.PortLow = int(pr.Lo)\n\t\t\t\tvxlan.PortHigh = int(pr.Hi)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc parseBondData(link Link, data []syscall.NetlinkRouteAttr) {\n\tbond := link.(*Bond)\n\tfor i := range data {\n\t\tswitch data[i].Attr.Type {\n\t\tcase nl.IFLA_BOND_MODE:\n\t\t\tbond.Mode = BondMode(data[i].Value[0])\n\t\tcase nl.IFLA_BOND_ACTIVE_SLAVE:\n\t\t\tbond.ActiveSlave = int(native.Uint32(data[i].Value[0:4]))\n\t\tcase nl.IFLA_BOND_MIIMON:\n\t\t\tbond.Miimon = int(native.Uint32(data[i].Value[0:4]))\n\t\tcase nl.IFLA_BOND_UPDELAY:\n\t\t\tbond.UpDelay = int(native.Uint32(data[i].Value[0:4]))\n\t\tcase nl.IFLA_BOND_DOWNDELAY:\n\t\t\tbond.DownDelay = int(native.Uint32(data[i].Value[0:4]))\n\t\tcase nl.IFLA_BOND_USE_CARRIER:\n\t\t\tbond.UseCarrier = int(data[i].Value[0])\n\t\tcase nl.IFLA_BOND_ARP_INTERVAL:\n\t\t\tbond.ArpInterval = int(native.Uint32(data[i].Value[0:4]))\n\t\tcase nl.IFLA_BOND_ARP_IP_TARGET:\n\t\t\tbond.ArpIpTargets = parseBondArpIpTargets(data[i].Value)\n\t\tcase nl.IFLA_BOND_ARP_VALIDATE:\n\t\t\tbond.ArpValidate = BondArpValidate(native.Uint32(data[i].Value[0:4]))\n\t\tcase nl.IFLA_BOND_ARP_ALL_TARGETS:\n\t\t\tbond.ArpAllTargets = BondArpAllTargets(native.Uint32(data[i].Value[0:4]))\n\t\tcase nl.IFLA_BOND_PRIMARY:\n\t\t\tbond.Primary = int(native.Uint32(data[i].Value[0:4]))\n\t\tcase nl.IFLA_BOND_PRIMARY_RESELECT:\n\t\t\tbond.PrimaryReselect = BondPrimaryReselect(data[i].Value[0])\n\t\tcase nl.IFLA_BOND_FAIL_OVER_MAC:\n\t\t\tbond.FailOverMac = BondFailOverMac(data[i].Value[0])\n\t\tcase nl.IFLA_BOND_XMIT_HASH_POLICY:\n\t\t\tbond.XmitHashPolicy = BondXmitHashPolicy(data[i].Value[0])\n\t\tcase nl.IFLA_BOND_RESEND_IGMP:\n\t\t\tbond.ResendIgmp = int(native.Uint32(data[i].Value[0:4]))\n\t\tcase nl.IFLA_BOND_NUM_PEER_NOTIF:\n\t\t\tbond.NumPeerNotif = int(data[i].Value[0])\n\t\tcase nl.IFLA_BOND_ALL_SLAVES_ACTIVE:\n\t\t\tbond.AllSlavesActive = int(data[i].Value[0])\n\t\tcase nl.IFLA_BOND_MIN_LINKS:\n\t\t\tbond.MinLinks = int(native.Uint32(data[i].Value[0:4]))\n\t\tcase nl.IFLA_BOND_LP_INTERVAL:\n\t\t\tbond.LpInterval = int(native.Uint32(data[i].Value[0:4]))\n\t\tcase nl.IFLA_BOND_PACKETS_PER_SLAVE:\n\t\t\tbond.PacketsPerSlave = int(native.Uint32(data[i].Value[0:4]))\n\t\tcase nl.IFLA_BOND_AD_LACP_RATE:\n\t\t\tbond.LacpRate = BondLacpRate(data[i].Value[0])\n\t\tcase nl.IFLA_BOND_AD_SELECT:\n\t\t\tbond.AdSelect = BondAdSelect(data[i].Value[0])\n\t\tcase nl.IFLA_BOND_AD_INFO:\n\t\t\t// TODO: implement\n\t\tcase nl.IFLA_BOND_AD_ACTOR_SYS_PRIO:\n\t\t\tbond.AdActorSysPrio = int(native.Uint16(data[i].Value[0:2]))\n\t\tcase nl.IFLA_BOND_AD_USER_PORT_KEY:\n\t\t\tbond.AdUserPortKey = int(native.Uint16(data[i].Value[0:2]))\n\t\tcase nl.IFLA_BOND_AD_ACTOR_SYSTEM:\n\t\t\tbond.AdActorSystem = net.HardwareAddr(data[i].Value[0:6])\n\t\tcase nl.IFLA_BOND_TLB_DYNAMIC_LB:\n\t\t\tbond.TlbDynamicLb = int(data[i].Value[0])\n\t\t}\n\t}\n}\n\nfunc parseBondArpIpTargets(value []byte) []net.IP {\n\tdata, err := nl.ParseRouteAttr(value)\n\tif err != nil {\n\t\treturn nil\n\t}\n\n\ttargets := []net.IP{}\n\tfor i := range data {\n\t\ttarget := net.IP(data[i].Value)\n\t\tif ip := target.To4(); ip != nil {\n\t\t\ttargets = append(targets, ip)\n\t\t\tcontinue\n\t\t}\n\t\tif ip := target.To16(); ip != nil {\n\t\t\ttargets = append(targets, ip)\n\t\t}\n\t}\n\n\treturn targets\n}\n\nfunc addBondSlaveAttrs(bondSlave *BondSlave, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_SLAVE_DATA, nil)\n\n\tdata.AddRtAttr(nl.IFLA_BOND_SLAVE_STATE, nl.Uint8Attr(uint8(bondSlave.State)))\n\tdata.AddRtAttr(nl.IFLA_BOND_SLAVE_MII_STATUS, nl.Uint8Attr(uint8(bondSlave.MiiStatus)))\n\tdata.AddRtAttr(nl.IFLA_BOND_SLAVE_LINK_FAILURE_COUNT, nl.Uint32Attr(bondSlave.LinkFailureCount))\n\tdata.AddRtAttr(nl.IFLA_BOND_SLAVE_QUEUE_ID, nl.Uint16Attr(bondSlave.QueueId))\n\tdata.AddRtAttr(nl.IFLA_BOND_SLAVE_AD_AGGREGATOR_ID, nl.Uint16Attr(bondSlave.AggregatorId))\n\tdata.AddRtAttr(nl.IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE, nl.Uint8Attr(bondSlave.AdActorOperPortState))\n\tdata.AddRtAttr(nl.IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE, nl.Uint16Attr(bondSlave.AdPartnerOperPortState))\n\n\tif mac := bondSlave.PermHardwareAddr; mac != nil {\n\t\tdata.AddRtAttr(nl.IFLA_BOND_SLAVE_PERM_HWADDR, []byte(mac))\n\t}\n}\n\nfunc parseBondSlaveData(slave LinkSlave, data []syscall.NetlinkRouteAttr) {\n\tbondSlave := slave.(*BondSlave)\n\tfor i := range data {\n\t\tswitch data[i].Attr.Type {\n\t\tcase nl.IFLA_BOND_SLAVE_STATE:\n\t\t\tbondSlave.State = BondSlaveState(data[i].Value[0])\n\t\tcase nl.IFLA_BOND_SLAVE_MII_STATUS:\n\t\t\tbondSlave.MiiStatus = BondSlaveMiiStatus(data[i].Value[0])\n\t\tcase nl.IFLA_BOND_SLAVE_LINK_FAILURE_COUNT:\n\t\t\tbondSlave.LinkFailureCount = native.Uint32(data[i].Value[0:4])\n\t\tcase nl.IFLA_BOND_SLAVE_PERM_HWADDR:\n\t\t\tbondSlave.PermHardwareAddr = net.HardwareAddr(data[i].Value[0:6])\n\t\tcase nl.IFLA_BOND_SLAVE_QUEUE_ID:\n\t\t\tbondSlave.QueueId = native.Uint16(data[i].Value[0:2])\n\t\tcase nl.IFLA_BOND_SLAVE_AD_AGGREGATOR_ID:\n\t\t\tbondSlave.AggregatorId = native.Uint16(data[i].Value[0:2])\n\t\tcase nl.IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE:\n\t\t\tbondSlave.AdActorOperPortState = uint8(data[i].Value[0])\n\t\tcase nl.IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE:\n\t\t\tbondSlave.AdPartnerOperPortState = native.Uint16(data[i].Value[0:2])\n\t\t}\n\t}\n}\n\nfunc parseVrfSlaveData(slave LinkSlave, data []syscall.NetlinkRouteAttr) {\n\tvrfSlave := slave.(*VrfSlave)\n\tfor i := range data {\n\t\tswitch data[i].Attr.Type {\n\t\tcase nl.IFLA_BOND_SLAVE_STATE:\n\t\t\tvrfSlave.Table = native.Uint32(data[i].Value[0:4])\n\t\t}\n\t}\n}\n\nfunc parseIPVlanData(link Link, data []syscall.NetlinkRouteAttr) {\n\tipv := link.(*IPVlan)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_IPVLAN_MODE:\n\t\t\tipv.Mode = IPVlanMode(native.Uint32(datum.Value[0:4]))\n\t\tcase nl.IFLA_IPVLAN_FLAG:\n\t\t\tipv.Flag = IPVlanFlag(native.Uint32(datum.Value[0:4]))\n\t\t}\n\t}\n}\n\nfunc parseIPVtapData(link Link, data []syscall.NetlinkRouteAttr) {\n\tipv := link.(*IPVtap)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_IPVLAN_MODE:\n\t\t\tipv.Mode = IPVlanMode(native.Uint32(datum.Value[0:4]))\n\t\tcase nl.IFLA_IPVLAN_FLAG:\n\t\t\tipv.Flag = IPVlanFlag(native.Uint32(datum.Value[0:4]))\n\t\t}\n\t}\n}\n\nfunc addMacvtapAttrs(macvtap *Macvtap, linkInfo *nl.RtAttr) {\n\taddMacvlanAttrs(&macvtap.Macvlan, linkInfo)\n}\n\nfunc parseMacvtapData(link Link, data []syscall.NetlinkRouteAttr) {\n\tmacv := link.(*Macvtap)\n\tparseMacvlanData(&macv.Macvlan, data)\n}\n\nfunc addMacvlanAttrs(macvlan *Macvlan, linkInfo *nl.RtAttr) {\n\tvar data *nl.RtAttr\n\n\tif macvlan.Mode != MACVLAN_MODE_DEFAULT || macvlan.BCQueueLen > 0 {\n\t\tdata = linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\t}\n\n\tif macvlan.Mode != MACVLAN_MODE_DEFAULT {\n\t\tdata.AddRtAttr(nl.IFLA_MACVLAN_MODE, nl.Uint32Attr(macvlanModes[macvlan.Mode]))\n\t}\n\tif macvlan.BCQueueLen > 0 {\n\t\tdata.AddRtAttr(nl.IFLA_MACVLAN_BC_QUEUE_LEN, nl.Uint32Attr(macvlan.BCQueueLen))\n\t}\n}\n\nfunc parseMacvlanData(link Link, data []syscall.NetlinkRouteAttr) {\n\tmacv := link.(*Macvlan)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_MACVLAN_MODE:\n\t\t\tswitch native.Uint32(datum.Value[0:4]) {\n\t\t\tcase nl.MACVLAN_MODE_PRIVATE:\n\t\t\t\tmacv.Mode = MACVLAN_MODE_PRIVATE\n\t\t\tcase nl.MACVLAN_MODE_VEPA:\n\t\t\t\tmacv.Mode = MACVLAN_MODE_VEPA\n\t\t\tcase nl.MACVLAN_MODE_BRIDGE:\n\t\t\t\tmacv.Mode = MACVLAN_MODE_BRIDGE\n\t\t\tcase nl.MACVLAN_MODE_PASSTHRU:\n\t\t\t\tmacv.Mode = MACVLAN_MODE_PASSTHRU\n\t\t\tcase nl.MACVLAN_MODE_SOURCE:\n\t\t\t\tmacv.Mode = MACVLAN_MODE_SOURCE\n\t\t\t}\n\t\tcase nl.IFLA_MACVLAN_MACADDR_COUNT:\n\t\t\tmacv.MACAddrs = make([]net.HardwareAddr, 0, int(native.Uint32(datum.Value[0:4])))\n\t\tcase nl.IFLA_MACVLAN_MACADDR_DATA:\n\t\t\tmacs, err := nl.ParseRouteAttr(datum.Value[:])\n\t\t\tif err != nil {\n\t\t\t\tpanic(fmt.Sprintf(\"failed to ParseRouteAttr for IFLA_MACVLAN_MACADDR_DATA: %v\", err))\n\t\t\t}\n\t\t\tfor _, macDatum := range macs {\n\t\t\t\tmacv.MACAddrs = append(macv.MACAddrs, net.HardwareAddr(macDatum.Value[0:6]))\n\t\t\t}\n\t\tcase nl.IFLA_MACVLAN_BC_QUEUE_LEN:\n\t\t\tmacv.BCQueueLen = native.Uint32(datum.Value[0:4])\n\t\tcase nl.IFLA_MACVLAN_BC_QUEUE_LEN_USED:\n\t\t\tmacv.UsedBCQueueLen = native.Uint32(datum.Value[0:4])\n\t\t}\n\t}\n}\n\nfunc linkFlags(rawFlags uint32) net.Flags {\n\tvar f net.Flags\n\tif rawFlags&unix.IFF_UP != 0 {\n\t\tf |= net.FlagUp\n\t}\n\tif rawFlags&unix.IFF_BROADCAST != 0 {\n\t\tf |= net.FlagBroadcast\n\t}\n\tif rawFlags&unix.IFF_LOOPBACK != 0 {\n\t\tf |= net.FlagLoopback\n\t}\n\tif rawFlags&unix.IFF_POINTOPOINT != 0 {\n\t\tf |= net.FlagPointToPoint\n\t}\n\tif rawFlags&unix.IFF_MULTICAST != 0 {\n\t\tf |= net.FlagMulticast\n\t}\n\tif rawFlags&unix.IFF_RUNNING != 0 {\n\t\tf |= net.FlagRunning\n\t}\n\treturn f\n}\n\ntype genevePortRange struct {\n\tLo, Hi uint16\n}\n\nfunc addGeneveAttrs(geneve *Geneve, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\n\tif geneve.InnerProtoInherit {\n\t\tdata.AddRtAttr(nl.IFLA_GENEVE_INNER_PROTO_INHERIT, []byte{})\n\t}\n\n\tif geneve.FlowBased {\n\t\tgeneve.ID = 0\n\t\tdata.AddRtAttr(nl.IFLA_GENEVE_COLLECT_METADATA, []byte{})\n\t}\n\n\tif ip := geneve.Remote; ip != nil {\n\t\tif ip4 := ip.To4(); ip4 != nil {\n\t\t\tdata.AddRtAttr(nl.IFLA_GENEVE_REMOTE, ip.To4())\n\t\t} else {\n\t\t\tdata.AddRtAttr(nl.IFLA_GENEVE_REMOTE6, []byte(ip))\n\t\t}\n\t}\n\n\tif geneve.ID != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_GENEVE_ID, nl.Uint32Attr(geneve.ID))\n\t}\n\n\tif geneve.Dport != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_GENEVE_PORT, htons(geneve.Dport))\n\t}\n\n\tif geneve.Ttl != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_GENEVE_TTL, nl.Uint8Attr(geneve.Ttl))\n\t}\n\n\tif geneve.Tos != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_GENEVE_TOS, nl.Uint8Attr(geneve.Tos))\n\t}\n\n\tif geneve.PortLow > 0 || geneve.PortHigh > 0 {\n\t\tpr := genevePortRange{uint16(geneve.PortLow), uint16(geneve.PortHigh)}\n\n\t\tbuf := new(bytes.Buffer)\n\t\tbinary.Write(buf, binary.BigEndian, &pr)\n\n\t\tdata.AddRtAttr(nl.IFLA_GENEVE_PORT_RANGE, buf.Bytes())\n\t}\n\n\tdata.AddRtAttr(nl.IFLA_GENEVE_DF, nl.Uint8Attr(uint8(geneve.Df)))\n}\n\nfunc parseGeneveData(link Link, data []syscall.NetlinkRouteAttr) {\n\tgeneve := link.(*Geneve)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_GENEVE_ID:\n\t\t\tgeneve.ID = native.Uint32(datum.Value[0:4])\n\t\tcase nl.IFLA_GENEVE_REMOTE, nl.IFLA_GENEVE_REMOTE6:\n\t\t\tgeneve.Remote = datum.Value\n\t\tcase nl.IFLA_GENEVE_PORT:\n\t\t\tgeneve.Dport = ntohs(datum.Value[0:2])\n\t\tcase nl.IFLA_GENEVE_TTL:\n\t\t\tgeneve.Ttl = uint8(datum.Value[0])\n\t\tcase nl.IFLA_GENEVE_TOS:\n\t\t\tgeneve.Tos = uint8(datum.Value[0])\n\t\tcase nl.IFLA_GENEVE_COLLECT_METADATA:\n\t\t\tgeneve.FlowBased = true\n\t\tcase nl.IFLA_GENEVE_INNER_PROTO_INHERIT:\n\t\t\tgeneve.InnerProtoInherit = true\n\t\tcase nl.IFLA_GENEVE_PORT_RANGE:\n\t\t\tbuf := bytes.NewBuffer(datum.Value[0:4])\n\t\t\tvar pr genevePortRange\n\t\t\tif binary.Read(buf, binary.BigEndian, &pr) == nil {\n\t\t\t\tgeneve.PortLow = int(pr.Lo)\n\t\t\t\tgeneve.PortHigh = int(pr.Hi)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc addGretapAttrs(gretap *Gretap, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\n\tif gretap.FlowBased {\n\t\t// In flow based mode, no other attributes need to be configured\n\t\tdata.AddRtAttr(nl.IFLA_GRE_COLLECT_METADATA, []byte{})\n\t\treturn\n\t}\n\n\tif ip := gretap.Local; ip != nil {\n\t\tif ip.To4() != nil {\n\t\t\tip = ip.To4()\n\t\t}\n\t\tdata.AddRtAttr(nl.IFLA_GRE_LOCAL, []byte(ip))\n\t}\n\n\tif ip := gretap.Remote; ip != nil {\n\t\tif ip.To4() != nil {\n\t\t\tip = ip.To4()\n\t\t}\n\t\tdata.AddRtAttr(nl.IFLA_GRE_REMOTE, []byte(ip))\n\t}\n\n\tif gretap.IKey != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_GRE_IKEY, htonl(gretap.IKey))\n\t\tgretap.IFlags |= uint16(nl.GRE_KEY)\n\t}\n\n\tif gretap.OKey != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_GRE_OKEY, htonl(gretap.OKey))\n\t\tgretap.OFlags |= uint16(nl.GRE_KEY)\n\t}\n\n\tdata.AddRtAttr(nl.IFLA_GRE_IFLAGS, htons(gretap.IFlags))\n\tdata.AddRtAttr(nl.IFLA_GRE_OFLAGS, htons(gretap.OFlags))\n\n\tif gretap.Link != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_GRE_LINK, nl.Uint32Attr(gretap.Link))\n\t}\n\n\tdata.AddRtAttr(nl.IFLA_GRE_PMTUDISC, nl.Uint8Attr(gretap.PMtuDisc))\n\tdata.AddRtAttr(nl.IFLA_GRE_TTL, nl.Uint8Attr(gretap.Ttl))\n\tdata.AddRtAttr(nl.IFLA_GRE_TOS, nl.Uint8Attr(gretap.Tos))\n\tdata.AddRtAttr(nl.IFLA_GRE_ENCAP_TYPE, nl.Uint16Attr(gretap.EncapType))\n\tdata.AddRtAttr(nl.IFLA_GRE_ENCAP_FLAGS, nl.Uint16Attr(gretap.EncapFlags))\n\tdata.AddRtAttr(nl.IFLA_GRE_ENCAP_SPORT, htons(gretap.EncapSport))\n\tdata.AddRtAttr(nl.IFLA_GRE_ENCAP_DPORT, htons(gretap.EncapDport))\n}\n\nfunc parseGretapData(link Link, data []syscall.NetlinkRouteAttr) {\n\tgre := link.(*Gretap)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_GRE_OKEY:\n\t\t\tgre.IKey = ntohl(datum.Value[0:4])\n\t\tcase nl.IFLA_GRE_IKEY:\n\t\t\tgre.OKey = ntohl(datum.Value[0:4])\n\t\tcase nl.IFLA_GRE_LOCAL:\n\t\t\tgre.Local = net.IP(datum.Value)\n\t\tcase nl.IFLA_GRE_REMOTE:\n\t\t\tgre.Remote = net.IP(datum.Value)\n\t\tcase nl.IFLA_GRE_ENCAP_SPORT:\n\t\t\tgre.EncapSport = ntohs(datum.Value[0:2])\n\t\tcase nl.IFLA_GRE_ENCAP_DPORT:\n\t\t\tgre.EncapDport = ntohs(datum.Value[0:2])\n\t\tcase nl.IFLA_GRE_IFLAGS:\n\t\t\tgre.IFlags = ntohs(datum.Value[0:2])\n\t\tcase nl.IFLA_GRE_OFLAGS:\n\t\t\tgre.OFlags = ntohs(datum.Value[0:2])\n\t\tcase nl.IFLA_GRE_TTL:\n\t\t\tgre.Ttl = uint8(datum.Value[0])\n\t\tcase nl.IFLA_GRE_TOS:\n\t\t\tgre.Tos = uint8(datum.Value[0])\n\t\tcase nl.IFLA_GRE_PMTUDISC:\n\t\t\tgre.PMtuDisc = uint8(datum.Value[0])\n\t\tcase nl.IFLA_GRE_ENCAP_TYPE:\n\t\t\tgre.EncapType = native.Uint16(datum.Value[0:2])\n\t\tcase nl.IFLA_GRE_ENCAP_FLAGS:\n\t\t\tgre.EncapFlags = native.Uint16(datum.Value[0:2])\n\t\tcase nl.IFLA_GRE_COLLECT_METADATA:\n\t\t\tgre.FlowBased = true\n\t\t}\n\t}\n}\n\nfunc addGretunAttrs(gre *Gretun, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\n\tif gre.FlowBased {\n\t\t// In flow based mode, no other attributes need to be configured\n\t\tdata.AddRtAttr(nl.IFLA_GRE_COLLECT_METADATA, []byte{})\n\t\treturn\n\t}\n\n\tif ip := gre.Local; ip != nil {\n\t\tif ip.To4() != nil {\n\t\t\tip = ip.To4()\n\t\t}\n\t\tdata.AddRtAttr(nl.IFLA_GRE_LOCAL, []byte(ip))\n\t}\n\n\tif ip := gre.Remote; ip != nil {\n\t\tif ip.To4() != nil {\n\t\t\tip = ip.To4()\n\t\t}\n\t\tdata.AddRtAttr(nl.IFLA_GRE_REMOTE, []byte(ip))\n\t}\n\n\tif gre.IKey != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_GRE_IKEY, htonl(gre.IKey))\n\t\tgre.IFlags |= uint16(nl.GRE_KEY)\n\t}\n\n\tif gre.OKey != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_GRE_OKEY, htonl(gre.OKey))\n\t\tgre.OFlags |= uint16(nl.GRE_KEY)\n\t}\n\n\tdata.AddRtAttr(nl.IFLA_GRE_IFLAGS, htons(gre.IFlags))\n\tdata.AddRtAttr(nl.IFLA_GRE_OFLAGS, htons(gre.OFlags))\n\n\tif gre.Link != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_GRE_LINK, nl.Uint32Attr(gre.Link))\n\t}\n\n\tdata.AddRtAttr(nl.IFLA_GRE_PMTUDISC, nl.Uint8Attr(gre.PMtuDisc))\n\tdata.AddRtAttr(nl.IFLA_GRE_TTL, nl.Uint8Attr(gre.Ttl))\n\tdata.AddRtAttr(nl.IFLA_GRE_TOS, nl.Uint8Attr(gre.Tos))\n\tdata.AddRtAttr(nl.IFLA_GRE_ENCAP_TYPE, nl.Uint16Attr(gre.EncapType))\n\tdata.AddRtAttr(nl.IFLA_GRE_ENCAP_FLAGS, nl.Uint16Attr(gre.EncapFlags))\n\tdata.AddRtAttr(nl.IFLA_GRE_ENCAP_SPORT, htons(gre.EncapSport))\n\tdata.AddRtAttr(nl.IFLA_GRE_ENCAP_DPORT, htons(gre.EncapDport))\n}\n\nfunc parseGretunData(link Link, data []syscall.NetlinkRouteAttr) {\n\tgre := link.(*Gretun)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_GRE_IKEY:\n\t\t\tgre.IKey = ntohl(datum.Value[0:4])\n\t\tcase nl.IFLA_GRE_OKEY:\n\t\t\tgre.OKey = ntohl(datum.Value[0:4])\n\t\tcase nl.IFLA_GRE_LOCAL:\n\t\t\tgre.Local = net.IP(datum.Value)\n\t\tcase nl.IFLA_GRE_REMOTE:\n\t\t\tgre.Remote = net.IP(datum.Value)\n\t\tcase nl.IFLA_GRE_IFLAGS:\n\t\t\tgre.IFlags = ntohs(datum.Value[0:2])\n\t\tcase nl.IFLA_GRE_OFLAGS:\n\t\t\tgre.OFlags = ntohs(datum.Value[0:2])\n\t\tcase nl.IFLA_GRE_TTL:\n\t\t\tgre.Ttl = uint8(datum.Value[0])\n\t\tcase nl.IFLA_GRE_TOS:\n\t\t\tgre.Tos = uint8(datum.Value[0])\n\t\tcase nl.IFLA_GRE_PMTUDISC:\n\t\t\tgre.PMtuDisc = uint8(datum.Value[0])\n\t\tcase nl.IFLA_GRE_ENCAP_TYPE:\n\t\t\tgre.EncapType = native.Uint16(datum.Value[0:2])\n\t\tcase nl.IFLA_GRE_ENCAP_FLAGS:\n\t\t\tgre.EncapFlags = native.Uint16(datum.Value[0:2])\n\t\tcase nl.IFLA_GRE_ENCAP_SPORT:\n\t\t\tgre.EncapSport = ntohs(datum.Value[0:2])\n\t\tcase nl.IFLA_GRE_ENCAP_DPORT:\n\t\t\tgre.EncapDport = ntohs(datum.Value[0:2])\n\t\tcase nl.IFLA_GRE_COLLECT_METADATA:\n\t\t\tgre.FlowBased = true\n\t\t}\n\t}\n}\n\nfunc addXdpAttrs(xdp *LinkXdp, req *nl.NetlinkRequest) {\n\tattrs := nl.NewRtAttr(unix.IFLA_XDP|unix.NLA_F_NESTED, nil)\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, uint32(xdp.Fd))\n\tattrs.AddRtAttr(nl.IFLA_XDP_FD, b)\n\tif xdp.Flags != 0 {\n\t\tb := make([]byte, 4)\n\t\tnative.PutUint32(b, xdp.Flags)\n\t\tattrs.AddRtAttr(nl.IFLA_XDP_FLAGS, b)\n\t}\n\treq.AddData(attrs)\n}\n\nfunc parseLinkXdp(data []byte) (*LinkXdp, error) {\n\tattrs, err := nl.ParseRouteAttr(data)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\txdp := &LinkXdp{}\n\tfor _, attr := range attrs {\n\t\tswitch attr.Attr.Type {\n\t\tcase nl.IFLA_XDP_FD:\n\t\t\txdp.Fd = int(native.Uint32(attr.Value[0:4]))\n\t\tcase nl.IFLA_XDP_ATTACHED:\n\t\t\txdp.AttachMode = uint32(attr.Value[0])\n\t\t\txdp.Attached = xdp.AttachMode != 0\n\t\tcase nl.IFLA_XDP_FLAGS:\n\t\t\txdp.Flags = native.Uint32(attr.Value[0:4])\n\t\tcase nl.IFLA_XDP_PROG_ID:\n\t\t\txdp.ProgId = native.Uint32(attr.Value[0:4])\n\t\t}\n\t}\n\treturn xdp, nil\n}\n\nfunc addIptunAttrs(iptun *Iptun, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\n\tif iptun.FlowBased {\n\t\t// In flow based mode, no other attributes need to be configured\n\t\tdata.AddRtAttr(nl.IFLA_IPTUN_COLLECT_METADATA, []byte{})\n\t\treturn\n\t}\n\n\tip := iptun.Local.To4()\n\tif ip != nil {\n\t\tdata.AddRtAttr(nl.IFLA_IPTUN_LOCAL, []byte(ip))\n\t}\n\n\tip = iptun.Remote.To4()\n\tif ip != nil {\n\t\tdata.AddRtAttr(nl.IFLA_IPTUN_REMOTE, []byte(ip))\n\t}\n\n\tif iptun.Link != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_IPTUN_LINK, nl.Uint32Attr(iptun.Link))\n\t}\n\tdata.AddRtAttr(nl.IFLA_IPTUN_PMTUDISC, nl.Uint8Attr(iptun.PMtuDisc))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_TTL, nl.Uint8Attr(iptun.Ttl))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_TOS, nl.Uint8Attr(iptun.Tos))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_ENCAP_TYPE, nl.Uint16Attr(iptun.EncapType))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_ENCAP_FLAGS, nl.Uint16Attr(iptun.EncapFlags))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_ENCAP_SPORT, htons(iptun.EncapSport))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_ENCAP_DPORT, htons(iptun.EncapDport))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_PROTO, nl.Uint8Attr(iptun.Proto))\n}\n\nfunc parseIptunData(link Link, data []syscall.NetlinkRouteAttr) {\n\tiptun := link.(*Iptun)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_IPTUN_LOCAL:\n\t\t\tiptun.Local = net.IP(datum.Value[0:4])\n\t\tcase nl.IFLA_IPTUN_REMOTE:\n\t\t\tiptun.Remote = net.IP(datum.Value[0:4])\n\t\tcase nl.IFLA_IPTUN_TTL:\n\t\t\tiptun.Ttl = uint8(datum.Value[0])\n\t\tcase nl.IFLA_IPTUN_TOS:\n\t\t\tiptun.Tos = uint8(datum.Value[0])\n\t\tcase nl.IFLA_IPTUN_PMTUDISC:\n\t\t\tiptun.PMtuDisc = uint8(datum.Value[0])\n\t\tcase nl.IFLA_IPTUN_ENCAP_SPORT:\n\t\t\tiptun.EncapSport = ntohs(datum.Value[0:2])\n\t\tcase nl.IFLA_IPTUN_ENCAP_DPORT:\n\t\t\tiptun.EncapDport = ntohs(datum.Value[0:2])\n\t\tcase nl.IFLA_IPTUN_ENCAP_TYPE:\n\t\t\tiptun.EncapType = native.Uint16(datum.Value[0:2])\n\t\tcase nl.IFLA_IPTUN_ENCAP_FLAGS:\n\t\t\tiptun.EncapFlags = native.Uint16(datum.Value[0:2])\n\t\tcase nl.IFLA_IPTUN_COLLECT_METADATA:\n\t\t\tiptun.FlowBased = true\n\t\tcase nl.IFLA_IPTUN_PROTO:\n\t\t\tiptun.Proto = datum.Value[0]\n\t\t}\n\t}\n}\n\nfunc addIp6tnlAttrs(ip6tnl *Ip6tnl, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\n\tif ip6tnl.FlowBased {\n\t\t// In flow based mode, no other attributes need to be configured\n\t\tdata.AddRtAttr(nl.IFLA_IPTUN_COLLECT_METADATA, []byte{})\n\t\treturn\n\t}\n\n\tif ip6tnl.Link != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_IPTUN_LINK, nl.Uint32Attr(ip6tnl.Link))\n\t}\n\n\tip := ip6tnl.Local.To16()\n\tif ip != nil {\n\t\tdata.AddRtAttr(nl.IFLA_IPTUN_LOCAL, []byte(ip))\n\t}\n\n\tip = ip6tnl.Remote.To16()\n\tif ip != nil {\n\t\tdata.AddRtAttr(nl.IFLA_IPTUN_REMOTE, []byte(ip))\n\t}\n\n\tdata.AddRtAttr(nl.IFLA_IPTUN_TTL, nl.Uint8Attr(ip6tnl.Ttl))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_TOS, nl.Uint8Attr(ip6tnl.Tos))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_FLAGS, nl.Uint32Attr(ip6tnl.Flags))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_PROTO, nl.Uint8Attr(ip6tnl.Proto))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_FLOWINFO, nl.Uint32Attr(ip6tnl.FlowInfo))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_ENCAP_LIMIT, nl.Uint8Attr(ip6tnl.EncapLimit))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_ENCAP_TYPE, nl.Uint16Attr(ip6tnl.EncapType))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_ENCAP_FLAGS, nl.Uint16Attr(ip6tnl.EncapFlags))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_ENCAP_SPORT, htons(ip6tnl.EncapSport))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_ENCAP_DPORT, htons(ip6tnl.EncapDport))\n}\n\nfunc parseIp6tnlData(link Link, data []syscall.NetlinkRouteAttr) {\n\tip6tnl := link.(*Ip6tnl)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_IPTUN_LOCAL:\n\t\t\tip6tnl.Local = net.IP(datum.Value[:16])\n\t\tcase nl.IFLA_IPTUN_REMOTE:\n\t\t\tip6tnl.Remote = net.IP(datum.Value[:16])\n\t\tcase nl.IFLA_IPTUN_TTL:\n\t\t\tip6tnl.Ttl = datum.Value[0]\n\t\tcase nl.IFLA_IPTUN_TOS:\n\t\t\tip6tnl.Tos = datum.Value[0]\n\t\tcase nl.IFLA_IPTUN_FLAGS:\n\t\t\tip6tnl.Flags = native.Uint32(datum.Value[:4])\n\t\tcase nl.IFLA_IPTUN_PROTO:\n\t\t\tip6tnl.Proto = datum.Value[0]\n\t\tcase nl.IFLA_IPTUN_FLOWINFO:\n\t\t\tip6tnl.FlowInfo = native.Uint32(datum.Value[:4])\n\t\tcase nl.IFLA_IPTUN_ENCAP_LIMIT:\n\t\t\tip6tnl.EncapLimit = datum.Value[0]\n\t\tcase nl.IFLA_IPTUN_ENCAP_TYPE:\n\t\t\tip6tnl.EncapType = native.Uint16(datum.Value[0:2])\n\t\tcase nl.IFLA_IPTUN_ENCAP_FLAGS:\n\t\t\tip6tnl.EncapFlags = native.Uint16(datum.Value[0:2])\n\t\tcase nl.IFLA_IPTUN_ENCAP_SPORT:\n\t\t\tip6tnl.EncapSport = ntohs(datum.Value[0:2])\n\t\tcase nl.IFLA_IPTUN_ENCAP_DPORT:\n\t\t\tip6tnl.EncapDport = ntohs(datum.Value[0:2])\n\t\tcase nl.IFLA_IPTUN_COLLECT_METADATA:\n\t\t\tip6tnl.FlowBased = true\n\t\t}\n\t}\n}\n\nfunc addSittunAttrs(sittun *Sittun, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\n\tif sittun.Link != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_IPTUN_LINK, nl.Uint32Attr(sittun.Link))\n\t}\n\n\tip := sittun.Local.To4()\n\tif ip != nil {\n\t\tdata.AddRtAttr(nl.IFLA_IPTUN_LOCAL, []byte(ip))\n\t}\n\n\tip = sittun.Remote.To4()\n\tif ip != nil {\n\t\tdata.AddRtAttr(nl.IFLA_IPTUN_REMOTE, []byte(ip))\n\t}\n\n\tif sittun.Ttl > 0 {\n\t\t// Would otherwise fail on 3.10 kernel\n\t\tdata.AddRtAttr(nl.IFLA_IPTUN_TTL, nl.Uint8Attr(sittun.Ttl))\n\t}\n\n\tdata.AddRtAttr(nl.IFLA_IPTUN_PROTO, nl.Uint8Attr(sittun.Proto))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_TOS, nl.Uint8Attr(sittun.Tos))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_PMTUDISC, nl.Uint8Attr(sittun.PMtuDisc))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_ENCAP_LIMIT, nl.Uint8Attr(sittun.EncapLimit))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_ENCAP_TYPE, nl.Uint16Attr(sittun.EncapType))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_ENCAP_FLAGS, nl.Uint16Attr(sittun.EncapFlags))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_ENCAP_SPORT, htons(sittun.EncapSport))\n\tdata.AddRtAttr(nl.IFLA_IPTUN_ENCAP_DPORT, htons(sittun.EncapDport))\n}\n\nfunc parseSittunData(link Link, data []syscall.NetlinkRouteAttr) {\n\tsittun := link.(*Sittun)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_IPTUN_LOCAL:\n\t\t\tsittun.Local = net.IP(datum.Value[0:4])\n\t\tcase nl.IFLA_IPTUN_REMOTE:\n\t\t\tsittun.Remote = net.IP(datum.Value[0:4])\n\t\tcase nl.IFLA_IPTUN_TTL:\n\t\t\tsittun.Ttl = datum.Value[0]\n\t\tcase nl.IFLA_IPTUN_TOS:\n\t\t\tsittun.Tos = datum.Value[0]\n\t\tcase nl.IFLA_IPTUN_PMTUDISC:\n\t\t\tsittun.PMtuDisc = datum.Value[0]\n\t\tcase nl.IFLA_IPTUN_PROTO:\n\t\t\tsittun.Proto = datum.Value[0]\n\t\tcase nl.IFLA_IPTUN_ENCAP_TYPE:\n\t\t\tsittun.EncapType = native.Uint16(datum.Value[0:2])\n\t\tcase nl.IFLA_IPTUN_ENCAP_FLAGS:\n\t\t\tsittun.EncapFlags = native.Uint16(datum.Value[0:2])\n\t\tcase nl.IFLA_IPTUN_ENCAP_SPORT:\n\t\t\tsittun.EncapSport = ntohs(datum.Value[0:2])\n\t\tcase nl.IFLA_IPTUN_ENCAP_DPORT:\n\t\t\tsittun.EncapDport = ntohs(datum.Value[0:2])\n\t\t}\n\t}\n}\n\nfunc addVtiAttrs(vti *Vti, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\n\tfamily := FAMILY_V4\n\tif vti.Local.To4() == nil {\n\t\tfamily = FAMILY_V6\n\t}\n\n\tvar ip net.IP\n\n\tif family == FAMILY_V4 {\n\t\tip = vti.Local.To4()\n\t} else {\n\t\tip = vti.Local\n\t}\n\tif ip != nil {\n\t\tdata.AddRtAttr(nl.IFLA_VTI_LOCAL, []byte(ip))\n\t}\n\n\tif family == FAMILY_V4 {\n\t\tip = vti.Remote.To4()\n\t} else {\n\t\tip = vti.Remote\n\t}\n\tif ip != nil {\n\t\tdata.AddRtAttr(nl.IFLA_VTI_REMOTE, []byte(ip))\n\t}\n\n\tif vti.Link != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_VTI_LINK, nl.Uint32Attr(vti.Link))\n\t}\n\n\tdata.AddRtAttr(nl.IFLA_VTI_IKEY, htonl(vti.IKey))\n\tdata.AddRtAttr(nl.IFLA_VTI_OKEY, htonl(vti.OKey))\n}\n\nfunc parseVtiData(link Link, data []syscall.NetlinkRouteAttr) {\n\tvti := link.(*Vti)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_VTI_LOCAL:\n\t\t\tvti.Local = net.IP(datum.Value)\n\t\tcase nl.IFLA_VTI_REMOTE:\n\t\t\tvti.Remote = net.IP(datum.Value)\n\t\tcase nl.IFLA_VTI_IKEY:\n\t\t\tvti.IKey = ntohl(datum.Value[0:4])\n\t\tcase nl.IFLA_VTI_OKEY:\n\t\t\tvti.OKey = ntohl(datum.Value[0:4])\n\t\t}\n\t}\n}\n\nfunc addVrfAttrs(vrf *Vrf, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, uint32(vrf.Table))\n\tdata.AddRtAttr(nl.IFLA_VRF_TABLE, b)\n}\n\nfunc parseVrfData(link Link, data []syscall.NetlinkRouteAttr) {\n\tvrf := link.(*Vrf)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_VRF_TABLE:\n\t\t\tvrf.Table = native.Uint32(datum.Value[0:4])\n\t\t}\n\t}\n}\n\nfunc addBridgeAttrs(bridge *Bridge, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\tif bridge.MulticastSnooping != nil {\n\t\tdata.AddRtAttr(nl.IFLA_BR_MCAST_SNOOPING, boolToByte(*bridge.MulticastSnooping))\n\t}\n\tif bridge.AgeingTime != nil {\n\t\tdata.AddRtAttr(nl.IFLA_BR_AGEING_TIME, nl.Uint32Attr(*bridge.AgeingTime))\n\t}\n\tif bridge.HelloTime != nil {\n\t\tdata.AddRtAttr(nl.IFLA_BR_HELLO_TIME, nl.Uint32Attr(*bridge.HelloTime))\n\t}\n\tif bridge.VlanFiltering != nil {\n\t\tdata.AddRtAttr(nl.IFLA_BR_VLAN_FILTERING, boolToByte(*bridge.VlanFiltering))\n\t}\n\tif bridge.VlanDefaultPVID != nil {\n\t\tdata.AddRtAttr(nl.IFLA_BR_VLAN_DEFAULT_PVID, nl.Uint16Attr(*bridge.VlanDefaultPVID))\n\t}\n\tif bridge.GroupFwdMask != nil {\n\t\tdata.AddRtAttr(nl.IFLA_BR_GROUP_FWD_MASK, nl.Uint16Attr(*bridge.GroupFwdMask))\n\t}\n}\n\nfunc parseBridgeData(bridge Link, data []syscall.NetlinkRouteAttr) {\n\tbr := bridge.(*Bridge)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_BR_AGEING_TIME:\n\t\t\tageingTime := native.Uint32(datum.Value[0:4])\n\t\t\tbr.AgeingTime = &ageingTime\n\t\tcase nl.IFLA_BR_HELLO_TIME:\n\t\t\thelloTime := native.Uint32(datum.Value[0:4])\n\t\t\tbr.HelloTime = &helloTime\n\t\tcase nl.IFLA_BR_MCAST_SNOOPING:\n\t\t\tmcastSnooping := datum.Value[0] == 1\n\t\t\tbr.MulticastSnooping = &mcastSnooping\n\t\tcase nl.IFLA_BR_VLAN_FILTERING:\n\t\t\tvlanFiltering := datum.Value[0] == 1\n\t\t\tbr.VlanFiltering = &vlanFiltering\n\t\tcase nl.IFLA_BR_VLAN_DEFAULT_PVID:\n\t\t\tvlanDefaultPVID := native.Uint16(datum.Value[0:2])\n\t\t\tbr.VlanDefaultPVID = &vlanDefaultPVID\n\t\tcase nl.IFLA_BR_GROUP_FWD_MASK:\n\t\t\tmask := native.Uint16(datum.Value[0:2])\n\t\t\tbr.GroupFwdMask = &mask\n\t\t}\n\t}\n}\n\nfunc addGTPAttrs(gtp *GTP, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\tdata.AddRtAttr(nl.IFLA_GTP_FD0, nl.Uint32Attr(uint32(gtp.FD0)))\n\tdata.AddRtAttr(nl.IFLA_GTP_FD1, nl.Uint32Attr(uint32(gtp.FD1)))\n\tdata.AddRtAttr(nl.IFLA_GTP_PDP_HASHSIZE, nl.Uint32Attr(131072))\n\tif gtp.Role != nl.GTP_ROLE_GGSN {\n\t\tdata.AddRtAttr(nl.IFLA_GTP_ROLE, nl.Uint32Attr(uint32(gtp.Role)))\n\t}\n}\n\nfunc parseGTPData(link Link, data []syscall.NetlinkRouteAttr) {\n\tgtp := link.(*GTP)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_GTP_FD0:\n\t\t\tgtp.FD0 = int(native.Uint32(datum.Value))\n\t\tcase nl.IFLA_GTP_FD1:\n\t\t\tgtp.FD1 = int(native.Uint32(datum.Value))\n\t\tcase nl.IFLA_GTP_PDP_HASHSIZE:\n\t\t\tgtp.PDPHashsize = int(native.Uint32(datum.Value))\n\t\tcase nl.IFLA_GTP_ROLE:\n\t\t\tgtp.Role = int(native.Uint32(datum.Value))\n\t\t}\n\t}\n}\n\nfunc parseVfInfoList(data []syscall.NetlinkRouteAttr) ([]VfInfo, error) {\n\tvar vfs []VfInfo\n\n\tfor i, element := range data {\n\t\tif element.Attr.Type != nl.IFLA_VF_INFO {\n\t\t\treturn nil, fmt.Errorf(\"Incorrect element type in vf info list: %d\", element.Attr.Type)\n\t\t}\n\t\tvfAttrs, err := nl.ParseRouteAttr(element.Value)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvf, err := parseVfInfo(vfAttrs, i)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvfs = append(vfs, vf)\n\t}\n\treturn vfs, nil\n}\n\nfunc parseVfInfo(data []syscall.NetlinkRouteAttr, id int) (VfInfo, error) {\n\tvf := VfInfo{ID: id}\n\tfor _, element := range data {\n\t\tswitch element.Attr.Type {\n\t\tcase nl.IFLA_VF_MAC:\n\t\t\tmac := nl.DeserializeVfMac(element.Value[:])\n\t\t\tvf.Mac = mac.Mac[:6]\n\t\tcase nl.IFLA_VF_VLAN:\n\t\t\tvl := nl.DeserializeVfVlan(element.Value[:])\n\t\t\tvf.Vlan = int(vl.Vlan)\n\t\t\tvf.Qos = int(vl.Qos)\n\t\tcase nl.IFLA_VF_VLAN_LIST:\n\t\t\tvfVlanInfoList, err := nl.DeserializeVfVlanList(element.Value[:])\n\t\t\tif err != nil {\n\t\t\t\treturn vf, err\n\t\t\t}\n\t\t\tvf.VlanProto = int(vfVlanInfoList[0].VlanProto)\n\t\tcase nl.IFLA_VF_TX_RATE:\n\t\t\ttxr := nl.DeserializeVfTxRate(element.Value[:])\n\t\t\tvf.TxRate = int(txr.Rate)\n\t\tcase nl.IFLA_VF_SPOOFCHK:\n\t\t\tsp := nl.DeserializeVfSpoofchk(element.Value[:])\n\t\t\tvf.Spoofchk = sp.Setting != 0\n\t\tcase nl.IFLA_VF_LINK_STATE:\n\t\t\tls := nl.DeserializeVfLinkState(element.Value[:])\n\t\t\tvf.LinkState = ls.LinkState\n\t\tcase nl.IFLA_VF_RATE:\n\t\t\tvfr := nl.DeserializeVfRate(element.Value[:])\n\t\t\tvf.MaxTxRate = vfr.MaxTxRate\n\t\t\tvf.MinTxRate = vfr.MinTxRate\n\t\tcase nl.IFLA_VF_STATS:\n\t\t\tvfstats := nl.DeserializeVfStats(element.Value[:])\n\t\t\tvf.RxPackets = vfstats.RxPackets\n\t\t\tvf.TxPackets = vfstats.TxPackets\n\t\t\tvf.RxBytes = vfstats.RxBytes\n\t\t\tvf.TxBytes = vfstats.TxBytes\n\t\t\tvf.Multicast = vfstats.Multicast\n\t\t\tvf.Broadcast = vfstats.Broadcast\n\t\t\tvf.RxDropped = vfstats.RxDropped\n\t\t\tvf.TxDropped = vfstats.TxDropped\n\n\t\tcase nl.IFLA_VF_RSS_QUERY_EN:\n\t\t\tresult := nl.DeserializeVfRssQueryEn(element.Value)\n\t\t\tvf.RssQuery = result.Setting\n\n\t\tcase nl.IFLA_VF_TRUST:\n\t\t\tresult := nl.DeserializeVfTrust(element.Value)\n\t\t\tvf.Trust = result.Setting\n\t\t}\n\t}\n\treturn vf, nil\n}\n\nfunc addXfrmiAttrs(xfrmi *Xfrmi, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\tdata.AddRtAttr(nl.IFLA_XFRM_LINK, nl.Uint32Attr(uint32(xfrmi.ParentIndex)))\n\tif xfrmi.Ifid != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_XFRM_IF_ID, nl.Uint32Attr(xfrmi.Ifid))\n\t}\n}\n\nfunc parseXfrmiData(link Link, data []syscall.NetlinkRouteAttr) {\n\txfrmi := link.(*Xfrmi)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_XFRM_LINK:\n\t\t\txfrmi.ParentIndex = int(native.Uint32(datum.Value))\n\t\tcase nl.IFLA_XFRM_IF_ID:\n\t\t\txfrmi.Ifid = native.Uint32(datum.Value)\n\t\t}\n\t}\n}\n\nfunc ioctlBondSlave(cmd uintptr, link Link, master *Bond) error {\n\tfd, err := getSocketUDP()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer syscall.Close(fd)\n\n\tifreq := newIocltSlaveReq(link.Attrs().Name, master.Attrs().Name)\n\t_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), cmd, uintptr(unsafe.Pointer(ifreq)))\n\tif errno != 0 {\n\t\treturn fmt.Errorf(\"errno=%v\", errno)\n\t}\n\treturn nil\n}\n\n// LinkSetBondSlaveActive sets specified slave to ACTIVE in an `active-backup` bond link via ioctl interface.\n//\n//\tMultiple calls keeps the status unchanged(shown in the unit test).\nfunc LinkSetBondSlaveActive(link Link, master *Bond) error {\n\terr := ioctlBondSlave(unix.SIOCBONDCHANGEACTIVE, link, master)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Failed to set slave %q active in %q, %v\", link.Attrs().Name, master.Attrs().Name, err)\n\t}\n\treturn nil\n}\n\n// LinkSetBondSlave add slave to bond link via ioctl interface.\nfunc LinkSetBondSlave(link Link, master *Bond) error {\n\terr := ioctlBondSlave(unix.SIOCBONDENSLAVE, link, master)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Failed to enslave %q to %q, %v\", link.Attrs().Name, master.Attrs().Name, err)\n\t}\n\treturn nil\n}\n\n// LinkSetBondSlave removes specified slave from bond link via ioctl interface.\nfunc LinkDelBondSlave(link Link, master *Bond) error {\n\terr := ioctlBondSlave(unix.SIOCBONDRELEASE, link, master)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Failed to del slave %q from %q, %v\", link.Attrs().Name, master.Attrs().Name, err)\n\t}\n\treturn nil\n}\n\n// LinkSetBondSlaveQueueId modify bond slave queue-id.\nfunc (h *Handle) LinkSetBondSlaveQueueId(link Link, queueId uint16) error {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\treq := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)\n\n\tmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\tmsg.Index = int32(base.Index)\n\treq.AddData(msg)\n\n\tlinkInfo := nl.NewRtAttr(unix.IFLA_LINKINFO, nil)\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_SLAVE_DATA, nil)\n\tdata.AddRtAttr(nl.IFLA_BOND_SLAVE_QUEUE_ID, nl.Uint16Attr(queueId))\n\n\treq.AddData(linkInfo)\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// LinkSetBondSlaveQueueId modify bond slave queue-id.\nfunc LinkSetBondSlaveQueueId(link Link, queueId uint16) error {\n\treturn pkgHandle.LinkSetBondSlaveQueueId(link, queueId)\n}\n\nfunc vethStatsSerialize(stats ethtoolStats) ([]byte, error) {\n\tstatsSize := int(unsafe.Sizeof(stats)) + int(stats.nStats)*int(unsafe.Sizeof(uint64(0)))\n\tb := make([]byte, 0, statsSize)\n\tbuf := bytes.NewBuffer(b)\n\terr := binary.Write(buf, nl.NativeEndian(), stats)\n\treturn buf.Bytes()[:statsSize], err\n}\n\ntype vethEthtoolStats struct {\n\tCmd    uint32\n\tNStats uint32\n\tPeer   uint64\n\t// Newer kernels have XDP stats in here, but we only care\n\t// to extract the peer ifindex here.\n}\n\nfunc vethStatsDeserialize(b []byte) (vethEthtoolStats, error) {\n\tvar stats = vethEthtoolStats{}\n\terr := binary.Read(bytes.NewReader(b), nl.NativeEndian(), &stats)\n\treturn stats, err\n}\n\n// VethPeerIndex get veth peer index.\nfunc VethPeerIndex(link *Veth) (int, error) {\n\tfd, err := getSocketUDP()\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\tdefer syscall.Close(fd)\n\n\tifreq, sSet := newIocltStringSetReq(link.Name)\n\t_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), SIOCETHTOOL, uintptr(unsafe.Pointer(ifreq)))\n\tif errno != 0 {\n\t\treturn -1, fmt.Errorf(\"SIOCETHTOOL request for %q failed, errno=%v\", link.Attrs().Name, errno)\n\t}\n\n\tstats := ethtoolStats{\n\t\tcmd:    ETHTOOL_GSTATS,\n\t\tnStats: sSet.data[0],\n\t}\n\n\tbuffer, err := vethStatsSerialize(stats)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\tifreq.Data = uintptr(unsafe.Pointer(&buffer[0]))\n\t_, _, errno = syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), SIOCETHTOOL, uintptr(unsafe.Pointer(ifreq)))\n\tif errno != 0 {\n\t\treturn -1, fmt.Errorf(\"SIOCETHTOOL request for %q failed, errno=%v\", link.Attrs().Name, errno)\n\t}\n\n\tvstats, err := vethStatsDeserialize(buffer)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\treturn int(vstats.Peer), nil\n}\n\nfunc parseTuntapData(link Link, data []syscall.NetlinkRouteAttr) {\n\ttuntap := link.(*Tuntap)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_TUN_OWNER:\n\t\t\ttuntap.Owner = native.Uint32(datum.Value)\n\t\tcase nl.IFLA_TUN_GROUP:\n\t\t\ttuntap.Group = native.Uint32(datum.Value)\n\t\tcase nl.IFLA_TUN_TYPE:\n\t\t\ttuntap.Mode = TuntapMode(uint8(datum.Value[0]))\n\t\tcase nl.IFLA_TUN_PI:\n\t\t\tif datum.Value[0] == 0 {\n\t\t\t\ttuntap.Flags |= TUNTAP_NO_PI\n\t\t\t}\n\t\tcase nl.IFLA_TUN_VNET_HDR:\n\t\t\tif datum.Value[0] == 1 {\n\t\t\t\ttuntap.Flags |= TUNTAP_VNET_HDR\n\t\t\t}\n\t\tcase nl.IFLA_TUN_PERSIST:\n\t\t\ttuntap.NonPersist = false\n\t\t\tif uint8(datum.Value[0]) == 0 {\n\t\t\t\ttuntap.NonPersist = true\n\t\t\t}\n\t\tcase nl.IFLA_TUN_MULTI_QUEUE:\n\t\t\tif datum.Value[0] == 1 {\n\t\t\t\ttuntap.Flags |= TUNTAP_MULTI_QUEUE\n\t\t\t}\n\t\tcase nl.IFLA_TUN_NUM_QUEUES:\n\t\t\ttuntap.Queues = int(native.Uint32(datum.Value))\n\t\tcase nl.IFLA_TUN_NUM_DISABLED_QUEUES:\n\t\t\ttuntap.DisabledQueues = int(native.Uint32(datum.Value))\n\t\t}\n\t}\n}\n\nfunc parseIPoIBData(link Link, data []syscall.NetlinkRouteAttr) {\n\tipoib := link.(*IPoIB)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_IPOIB_PKEY:\n\t\t\tipoib.Pkey = uint16(native.Uint16(datum.Value))\n\t\tcase nl.IFLA_IPOIB_MODE:\n\t\t\tipoib.Mode = IPoIBMode(native.Uint16(datum.Value))\n\t\tcase nl.IFLA_IPOIB_UMCAST:\n\t\t\tipoib.Umcast = uint16(native.Uint16(datum.Value))\n\t\t}\n\t}\n}\n\nfunc parseCanData(link Link, data []syscall.NetlinkRouteAttr) {\n\tcan := link.(*Can)\n\tfor _, datum := range data {\n\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.IFLA_CAN_BITTIMING:\n\t\t\tcan.BitRate = native.Uint32(datum.Value)\n\t\t\tcan.SamplePoint = native.Uint32(datum.Value[4:])\n\t\t\tcan.TimeQuanta = native.Uint32(datum.Value[8:])\n\t\t\tcan.PropagationSegment = native.Uint32(datum.Value[12:])\n\t\t\tcan.PhaseSegment1 = native.Uint32(datum.Value[16:])\n\t\t\tcan.PhaseSegment2 = native.Uint32(datum.Value[20:])\n\t\t\tcan.SyncJumpWidth = native.Uint32(datum.Value[24:])\n\t\t\tcan.BitRatePreScaler = native.Uint32(datum.Value[28:])\n\t\tcase nl.IFLA_CAN_BITTIMING_CONST:\n\t\t\tcan.Name = string(datum.Value[:16])\n\t\t\tcan.TimeSegment1Min = native.Uint32(datum.Value[16:])\n\t\t\tcan.TimeSegment1Max = native.Uint32(datum.Value[20:])\n\t\t\tcan.TimeSegment2Min = native.Uint32(datum.Value[24:])\n\t\t\tcan.TimeSegment2Max = native.Uint32(datum.Value[28:])\n\t\t\tcan.SyncJumpWidthMax = native.Uint32(datum.Value[32:])\n\t\t\tcan.BitRatePreScalerMin = native.Uint32(datum.Value[36:])\n\t\t\tcan.BitRatePreScalerMax = native.Uint32(datum.Value[40:])\n\t\t\tcan.BitRatePreScalerInc = native.Uint32(datum.Value[44:])\n\t\tcase nl.IFLA_CAN_CLOCK:\n\t\t\tcan.ClockFrequency = native.Uint32(datum.Value)\n\t\tcase nl.IFLA_CAN_STATE:\n\t\t\tcan.State = native.Uint32(datum.Value)\n\t\tcase nl.IFLA_CAN_CTRLMODE:\n\t\t\tcan.Mask = native.Uint32(datum.Value)\n\t\t\tcan.Flags = native.Uint32(datum.Value[4:])\n\t\tcase nl.IFLA_CAN_BERR_COUNTER:\n\t\t\tcan.TxError = native.Uint16(datum.Value)\n\t\t\tcan.RxError = native.Uint16(datum.Value[2:])\n\t\tcase nl.IFLA_CAN_RESTART_MS:\n\t\t\tcan.RestartMs = native.Uint32(datum.Value)\n\t\tcase nl.IFLA_CAN_DATA_BITTIMING_CONST:\n\t\tcase nl.IFLA_CAN_RESTART:\n\t\tcase nl.IFLA_CAN_DATA_BITTIMING:\n\t\tcase nl.IFLA_CAN_TERMINATION:\n\t\tcase nl.IFLA_CAN_TERMINATION_CONST:\n\t\tcase nl.IFLA_CAN_BITRATE_CONST:\n\t\tcase nl.IFLA_CAN_DATA_BITRATE_CONST:\n\t\tcase nl.IFLA_CAN_BITRATE_MAX:\n\t\t}\n\t}\n}\n\nfunc addIPoIBAttrs(ipoib *IPoIB, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\tdata.AddRtAttr(nl.IFLA_IPOIB_PKEY, nl.Uint16Attr(uint16(ipoib.Pkey)))\n\tdata.AddRtAttr(nl.IFLA_IPOIB_MODE, nl.Uint16Attr(uint16(ipoib.Mode)))\n\tdata.AddRtAttr(nl.IFLA_IPOIB_UMCAST, nl.Uint16Attr(uint16(ipoib.Umcast)))\n}\n\nfunc addBareUDPAttrs(bareudp *BareUDP, linkInfo *nl.RtAttr) {\n\tdata := linkInfo.AddRtAttr(nl.IFLA_INFO_DATA, nil)\n\n\tdata.AddRtAttr(nl.IFLA_BAREUDP_PORT, nl.Uint16Attr(nl.Swap16(bareudp.Port)))\n\tdata.AddRtAttr(nl.IFLA_BAREUDP_ETHERTYPE, nl.Uint16Attr(nl.Swap16(bareudp.EtherType)))\n\tif bareudp.SrcPortMin != 0 {\n\t\tdata.AddRtAttr(nl.IFLA_BAREUDP_SRCPORT_MIN, nl.Uint16Attr(bareudp.SrcPortMin))\n\t}\n\tif bareudp.MultiProto {\n\t\tdata.AddRtAttr(nl.IFLA_BAREUDP_MULTIPROTO_MODE, []byte{})\n\t}\n}\n\nfunc parseBareUDPData(link Link, data []syscall.NetlinkRouteAttr) {\n\tbareudp := link.(*BareUDP)\n\tfor _, attr := range data {\n\t\tswitch attr.Attr.Type {\n\t\tcase nl.IFLA_BAREUDP_PORT:\n\t\t\tbareudp.Port = binary.BigEndian.Uint16(attr.Value)\n\t\tcase nl.IFLA_BAREUDP_ETHERTYPE:\n\t\t\tbareudp.EtherType = binary.BigEndian.Uint16(attr.Value)\n\t\tcase nl.IFLA_BAREUDP_SRCPORT_MIN:\n\t\t\tbareudp.SrcPortMin = native.Uint16(attr.Value)\n\t\tcase nl.IFLA_BAREUDP_MULTIPROTO_MODE:\n\t\t\tbareudp.MultiProto = true\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/link_tuntap_linux.go",
    "content": "package netlink\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// ideally golang.org/x/sys/unix would define IfReq but it only has\n// IFNAMSIZ, hence this minimalistic implementation\nconst (\n\tSizeOfIfReq = 40\n\tIFNAMSIZ    = 16\n)\n\nconst TUN = \"/dev/net/tun\"\n\ntype ifReq struct {\n\tName  [IFNAMSIZ]byte\n\tFlags uint16\n\tpad   [SizeOfIfReq - IFNAMSIZ - 2]byte\n}\n\n// AddQueues opens and attaches multiple queue file descriptors to an existing\n// TUN/TAP interface in multi-queue mode.\n//\n// It performs TUNSETIFF ioctl on each opened file descriptor with the current\n// tuntap configuration. Each resulting fd is set to non-blocking mode and\n// returned as *os.File.\n//\n// If the interface was created with a name pattern (e.g. \"tap%d\"),\n// the first successful TUNSETIFF call will return the resolved name,\n// which is saved back into tuntap.Name.\n//\n// This method assumes that the interface already exists and is in multi-queue mode.\n// The returned FDs are also appended to tuntap.Fds and tuntap.Queues is updated.\n//\n// It is the caller's responsibility to close the FDs when they are no longer needed.\nfunc (tuntap *Tuntap) AddQueues(count int) ([]*os.File, error) {\n\tif tuntap.Mode < unix.IFF_TUN || tuntap.Mode > unix.IFF_TAP {\n\t\treturn nil, fmt.Errorf(\"Tuntap.Mode %v unknown\", tuntap.Mode)\n\t}\n\tif tuntap.Flags&TUNTAP_MULTI_QUEUE == 0 {\n\t\treturn nil, fmt.Errorf(\"TUNTAP_MULTI_QUEUE not set\")\n\t}\n\tif count < 1 {\n\t\treturn nil, fmt.Errorf(\"count must be >= 1\")\n\t}\n\n\treq, err := unix.NewIfreq(tuntap.Name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.SetUint16(uint16(tuntap.Mode) | uint16(tuntap.Flags))\n\n\tvar fds []*os.File\n\tfor i := 0; i < count; i++ {\n\t\tlocalReq := req\n\t\tfd, err := unix.Open(TUN, os.O_RDWR|syscall.O_CLOEXEC, 0)\n\t\tif err != nil {\n\t\t\tcleanupFds(fds)\n\t\t\treturn nil, err\n\t\t}\n\n\t\terr = unix.IoctlIfreq(fd, unix.TUNSETIFF, req)\n\t\tif err != nil {\n\t\t\t// close the new fd\n\t\t\tunix.Close(fd)\n\t\t\t// and the already opened ones\n\t\t\tcleanupFds(fds)\n\t\t\treturn nil, fmt.Errorf(\"tuntap IOCTL TUNSETIFF failed [%d]: %w\", i, err)\n\t\t}\n\n\t\t// Set the tun device to non-blocking before use. The below comment\n\t\t// taken from:\n\t\t//\n\t\t// https://github.com/mistsys/tuntap/commit/161418c25003bbee77d085a34af64d189df62bea\n\t\t//\n\t\t// Note there is a complication because in go, if a device node is\n\t\t// opened, go sets it to use nonblocking I/O. However a /dev/net/tun\n\t\t// doesn't work with epoll until after the TUNSETIFF ioctl has been\n\t\t// done. So we open the unix fd directly, do the ioctl, then put the\n\t\t// fd in nonblocking mode, an then finally wrap it in a os.File,\n\t\t// which will see the nonblocking mode and add the fd to the\n\t\t// pollable set, so later on when we Read() from it blocked the\n\t\t// calling thread in the kernel.\n\t\t//\n\t\t// See\n\t\t//   https://github.com/golang/go/issues/30426\n\t\t// which got exposed in go 1.13 by the fix to\n\t\t//   https://github.com/golang/go/issues/30624\n\t\terr = unix.SetNonblock(fd, true)\n\t\tif err != nil {\n\t\t\tcleanupFds(fds)\n\t\t\treturn nil, fmt.Errorf(\"tuntap set to non-blocking failed [%d]: %w\", i, err)\n\t\t}\n\n\t\t// create the file from the file descriptor and store it\n\t\tfile := os.NewFile(uintptr(fd), TUN)\n\t\tfds = append(fds, file)\n\n\t\t// 1) we only care for the name of the first tap in the multi queue set\n\t\t// 2) if the original name was empty, the localReq has now the actual name\n\t\t//\n\t\t// In addition:\n\t\t// This ensures that the link name is always identical to what the kernel returns.\n\t\t// Not only in case of an empty name, but also when using name templates.\n\t\t// e.g. when the provided name is \"tap%d\", the kernel replaces %d with the next available number.\n\t\tif i == 0 {\n\t\t\ttuntap.Name = strings.Trim(localReq.Name(), \"\\x00\")\n\t\t}\n\t}\n\n\ttuntap.Fds = append(tuntap.Fds, fds...)\n\ttuntap.Queues = len(tuntap.Fds)\n\treturn fds, nil\n}\n\n// RemoveQueues closes the given TAP queue file descriptors and removes them\n// from the tuntap.Fds list.\n//\n// This is a logical counterpart to AddQueues and allows releasing specific queues\n// (e.g., to simulate queue failure or perform partial detach).\n//\n// The method updates tuntap.Queues to reflect the number of remaining active queues.\n//\n// It is safe to call with a subset of tuntap.Fds, but the caller must ensure\n// that the passed *os.File descriptors belong to this interface.\nfunc (tuntap *Tuntap) RemoveQueues(fds ...*os.File) error {\n\ttoClose := make(map[uintptr]struct{}, len(fds))\n\tfor _, fd := range fds {\n\t\ttoClose[fd.Fd()] = struct{}{}\n\t}\n\n\tvar newFds []*os.File\n\tfor _, fd := range tuntap.Fds {\n\t\tif _, shouldClose := toClose[fd.Fd()]; shouldClose {\n\t\t\tif err := fd.Close(); err != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to close queue fd %d: %w\", fd.Fd(), err)\n\t\t\t}\n\t\t\ttuntap.Queues--\n\t\t} else {\n\t\t\tnewFds = append(newFds, fd)\n\t\t}\n\t}\n\ttuntap.Fds = newFds\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/neigh.go",
    "content": "package netlink\n\nimport (\n\t\"fmt\"\n\t\"net\"\n)\n\n// Neigh represents a link layer neighbor from netlink.\ntype Neigh struct {\n\tLinkIndex    int\n\tFamily       int\n\tState        int\n\tType         int\n\tFlags        int\n\tFlagsExt     int\n\tIP           net.IP\n\tHardwareAddr net.HardwareAddr\n\tLLIPAddr     net.IP //Used in the case of NHRP\n\tVlan         int\n\tVNI          int\n\tMasterIndex  int\n\n\t// These values are expressed as \"clock ticks ago\".  To\n\t// convert these clock ticks to seconds divide by sysconf(_SC_CLK_TCK).\n\t// When _SC_CLK_TCK is 100, for example, the ndm_* times are expressed\n\t// in centiseconds.\n\tConfirmed uint32 // The last time ARP/ND succeeded OR higher layer confirmation was received\n\tUsed      uint32 // The last time ARP/ND took place for this neighbor\n\tUpdated   uint32 // The time when the current NUD state was entered\n}\n\n// String returns $ip/$hwaddr $label\nfunc (neigh *Neigh) String() string {\n\treturn fmt.Sprintf(\"%s %s\", neigh.IP, neigh.HardwareAddr)\n}\n\n// NeighUpdate is sent when a neighbor changes - type is RTM_NEWNEIGH or RTM_DELNEIGH.\ntype NeighUpdate struct {\n\tType uint16\n\tNeigh\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/neigh_linux.go",
    "content": "package netlink\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"github.com/vishvananda/netns\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tNDA_UNSPEC = iota\n\tNDA_DST\n\tNDA_LLADDR\n\tNDA_CACHEINFO\n\tNDA_PROBES\n\tNDA_VLAN\n\tNDA_PORT\n\tNDA_VNI\n\tNDA_IFINDEX\n\tNDA_MASTER\n\tNDA_LINK_NETNSID\n\tNDA_SRC_VNI\n\tNDA_PROTOCOL\n\tNDA_NH_ID\n\tNDA_FDB_EXT_ATTRS\n\tNDA_FLAGS_EXT\n\tNDA_MAX = NDA_FLAGS_EXT\n)\n\n// Neighbor Cache Entry States.\nconst (\n\tNUD_NONE       = 0x00\n\tNUD_INCOMPLETE = 0x01\n\tNUD_REACHABLE  = 0x02\n\tNUD_STALE      = 0x04\n\tNUD_DELAY      = 0x08\n\tNUD_PROBE      = 0x10\n\tNUD_FAILED     = 0x20\n\tNUD_NOARP      = 0x40\n\tNUD_PERMANENT  = 0x80\n)\n\n// Neighbor Flags\nconst (\n\tNTF_USE         = 0x01\n\tNTF_SELF        = 0x02\n\tNTF_MASTER      = 0x04\n\tNTF_PROXY       = 0x08\n\tNTF_EXT_LEARNED = 0x10\n\tNTF_OFFLOADED   = 0x20\n\tNTF_STICKY      = 0x40\n\tNTF_ROUTER      = 0x80\n)\n\n// Extended Neighbor Flags\nconst (\n\tNTF_EXT_MANAGED = 0x00000001\n)\n\n// Ndmsg is for adding, removing or receiving information about a neighbor table entry\ntype Ndmsg struct {\n\tFamily uint8\n\tIndex  uint32\n\tState  uint16\n\tFlags  uint8\n\tType   uint8\n}\n\nfunc deserializeNdmsg(b []byte) *Ndmsg {\n\tvar dummy Ndmsg\n\treturn (*Ndmsg)(unsafe.Pointer(&b[0:unsafe.Sizeof(dummy)][0]))\n}\n\nfunc (msg *Ndmsg) Serialize() []byte {\n\treturn (*(*[unsafe.Sizeof(*msg)]byte)(unsafe.Pointer(msg)))[:]\n}\n\nfunc (msg *Ndmsg) Len() int {\n\treturn int(unsafe.Sizeof(*msg))\n}\n\n// NeighAdd will add an IP to MAC mapping to the ARP table\n// Equivalent to: `ip neigh add ....`\nfunc NeighAdd(neigh *Neigh) error {\n\treturn pkgHandle.NeighAdd(neigh)\n}\n\n// NeighAdd will add an IP to MAC mapping to the ARP table\n// Equivalent to: `ip neigh add ....`\nfunc (h *Handle) NeighAdd(neigh *Neigh) error {\n\treturn h.neighAdd(neigh, unix.NLM_F_CREATE|unix.NLM_F_EXCL)\n}\n\n// NeighSet will add or replace an IP to MAC mapping to the ARP table\n// Equivalent to: `ip neigh replace....`\nfunc NeighSet(neigh *Neigh) error {\n\treturn pkgHandle.NeighSet(neigh)\n}\n\n// NeighSet will add or replace an IP to MAC mapping to the ARP table\n// Equivalent to: `ip neigh replace....`\nfunc (h *Handle) NeighSet(neigh *Neigh) error {\n\treturn h.neighAdd(neigh, unix.NLM_F_CREATE|unix.NLM_F_REPLACE)\n}\n\n// NeighAppend will append an entry to FDB\n// Equivalent to: `bridge fdb append...`\nfunc NeighAppend(neigh *Neigh) error {\n\treturn pkgHandle.NeighAppend(neigh)\n}\n\n// NeighAppend will append an entry to FDB\n// Equivalent to: `bridge fdb append...`\nfunc (h *Handle) NeighAppend(neigh *Neigh) error {\n\treturn h.neighAdd(neigh, unix.NLM_F_CREATE|unix.NLM_F_APPEND)\n}\n\n// NeighAppend will append an entry to FDB\n// Equivalent to: `bridge fdb append...`\nfunc neighAdd(neigh *Neigh, mode int) error {\n\treturn pkgHandle.neighAdd(neigh, mode)\n}\n\n// NeighAppend will append an entry to FDB\n// Equivalent to: `bridge fdb append...`\nfunc (h *Handle) neighAdd(neigh *Neigh, mode int) error {\n\treq := h.newNetlinkRequest(unix.RTM_NEWNEIGH, mode|unix.NLM_F_ACK)\n\treturn neighHandle(neigh, req)\n}\n\n// NeighDel will delete an IP address from a link device.\n// Equivalent to: `ip addr del $addr dev $link`\nfunc NeighDel(neigh *Neigh) error {\n\treturn pkgHandle.NeighDel(neigh)\n}\n\n// NeighDel will delete an IP address from a link device.\n// Equivalent to: `ip addr del $addr dev $link`\nfunc (h *Handle) NeighDel(neigh *Neigh) error {\n\treq := h.newNetlinkRequest(unix.RTM_DELNEIGH, unix.NLM_F_ACK)\n\treturn neighHandle(neigh, req)\n}\n\nfunc neighHandle(neigh *Neigh, req *nl.NetlinkRequest) error {\n\tvar family int\n\n\tif neigh.Family > 0 {\n\t\tfamily = neigh.Family\n\t} else {\n\t\tfamily = nl.GetIPFamily(neigh.IP)\n\t}\n\n\tmsg := Ndmsg{\n\t\tFamily: uint8(family),\n\t\tIndex:  uint32(neigh.LinkIndex),\n\t\tState:  uint16(neigh.State),\n\t\tType:   uint8(neigh.Type),\n\t\tFlags:  uint8(neigh.Flags),\n\t}\n\treq.AddData(&msg)\n\n\tipData := neigh.IP.To4()\n\tif ipData == nil {\n\t\tipData = neigh.IP.To16()\n\t}\n\n\tdstData := nl.NewRtAttr(NDA_DST, ipData)\n\treq.AddData(dstData)\n\n\tif neigh.LLIPAddr != nil {\n\t\tllIPData := nl.NewRtAttr(NDA_LLADDR, neigh.LLIPAddr.To4())\n\t\treq.AddData(llIPData)\n\t} else if neigh.HardwareAddr != nil {\n\t\thwData := nl.NewRtAttr(NDA_LLADDR, []byte(neigh.HardwareAddr))\n\t\treq.AddData(hwData)\n\t}\n\n\tif neigh.FlagsExt != 0 {\n\t\tflagsExtData := nl.NewRtAttr(NDA_FLAGS_EXT, nl.Uint32Attr(uint32(neigh.FlagsExt)))\n\t\treq.AddData(flagsExtData)\n\t}\n\n\tif neigh.Vlan != 0 {\n\t\tvlanData := nl.NewRtAttr(NDA_VLAN, nl.Uint16Attr(uint16(neigh.Vlan)))\n\t\treq.AddData(vlanData)\n\t}\n\n\tif neigh.VNI != 0 {\n\t\tvniData := nl.NewRtAttr(NDA_VNI, nl.Uint32Attr(uint32(neigh.VNI)))\n\t\treq.AddData(vniData)\n\t}\n\n\tif neigh.MasterIndex != 0 {\n\t\tmasterData := nl.NewRtAttr(NDA_MASTER, nl.Uint32Attr(uint32(neigh.MasterIndex)))\n\t\treq.AddData(masterData)\n\t}\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// NeighList returns a list of IP-MAC mappings in the system (ARP table).\n// Equivalent to: `ip neighbor show`.\n// The list can be filtered by link and ip family.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc NeighList(linkIndex, family int) ([]Neigh, error) {\n\treturn pkgHandle.NeighList(linkIndex, family)\n}\n\n// NeighProxyList returns a list of neighbor proxies in the system.\n// Equivalent to: `ip neighbor show proxy`.\n// The list can be filtered by link and ip family.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc NeighProxyList(linkIndex, family int) ([]Neigh, error) {\n\treturn pkgHandle.NeighProxyList(linkIndex, family)\n}\n\n// NeighList returns a list of IP-MAC mappings in the system (ARP table).\n// Equivalent to: `ip neighbor show`.\n// The list can be filtered by link and ip family.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) NeighList(linkIndex, family int) ([]Neigh, error) {\n\treturn h.NeighListExecute(Ndmsg{\n\t\tFamily: uint8(family),\n\t\tIndex:  uint32(linkIndex),\n\t})\n}\n\n// NeighProxyList returns a list of neighbor proxies in the system.\n// Equivalent to: `ip neighbor show proxy`.\n// The list can be filtered by link, ip family.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) NeighProxyList(linkIndex, family int) ([]Neigh, error) {\n\treturn h.NeighListExecute(Ndmsg{\n\t\tFamily: uint8(family),\n\t\tIndex:  uint32(linkIndex),\n\t\tFlags:  NTF_PROXY,\n\t})\n}\n\n// NeighListExecute returns a list of neighbour entries filtered by link, ip family, flag and state.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc NeighListExecute(msg Ndmsg) ([]Neigh, error) {\n\treturn pkgHandle.NeighListExecute(msg)\n}\n\n// NeighListExecute returns a list of neighbour entries filtered by link, ip family, flag and state.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) NeighListExecute(msg Ndmsg) ([]Neigh, error) {\n\treq := h.newNetlinkRequest(unix.RTM_GETNEIGH, unix.NLM_F_DUMP)\n\treq.AddData(&msg)\n\n\tmsgs, executeErr := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWNEIGH)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\tvar res []Neigh\n\tfor _, m := range msgs {\n\t\tndm := deserializeNdmsg(m)\n\t\tif msg.Index != 0 && ndm.Index != msg.Index {\n\t\t\t// Ignore messages from other interfaces\n\t\t\tcontinue\n\t\t}\n\t\tif msg.Family != 0 && ndm.Family != msg.Family {\n\t\t\tcontinue\n\t\t}\n\t\tif msg.State != 0 && ndm.State != msg.State {\n\t\t\tcontinue\n\t\t}\n\t\tif msg.Type != 0 && ndm.Type != msg.Type {\n\t\t\tcontinue\n\t\t}\n\t\tif msg.Flags != 0 && ndm.Flags != msg.Flags {\n\t\t\tcontinue\n\t\t}\n\n\t\tneigh, err := NeighDeserialize(m)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tres = append(res, *neigh)\n\t}\n\n\treturn res, executeErr\n}\n\nfunc NeighDeserialize(m []byte) (*Neigh, error) {\n\tmsg := deserializeNdmsg(m)\n\n\tneigh := Neigh{\n\t\tLinkIndex: int(msg.Index),\n\t\tFamily:    int(msg.Family),\n\t\tState:     int(msg.State),\n\t\tType:      int(msg.Type),\n\t\tFlags:     int(msg.Flags),\n\t}\n\n\tattrs, err := nl.ParseRouteAttr(m[msg.Len():])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, attr := range attrs {\n\t\tswitch attr.Attr.Type {\n\t\tcase NDA_DST:\n\t\t\tneigh.IP = net.IP(attr.Value)\n\t\tcase NDA_LLADDR:\n\t\t\t// BUG: Is this a bug in the netlink library?\n\t\t\t// #define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len))\n\t\t\t// #define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))\n\t\t\tattrLen := attr.Attr.Len - unix.SizeofRtAttr\n\t\t\tif attrLen == 4 {\n\t\t\t\tneigh.LLIPAddr = net.IP(attr.Value)\n\t\t\t} else if attrLen == 16 {\n\t\t\t\t// Can be IPv6 or FireWire HWAddr\n\t\t\t\tlink, err := LinkByIndex(neigh.LinkIndex)\n\t\t\t\tif err == nil && link.Attrs().EncapType == \"tunnel6\" {\n\t\t\t\t\tneigh.IP = net.IP(attr.Value)\n\t\t\t\t} else {\n\t\t\t\t\tneigh.HardwareAddr = net.HardwareAddr(attr.Value)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tneigh.HardwareAddr = net.HardwareAddr(attr.Value)\n\t\t\t}\n\t\tcase NDA_FLAGS_EXT:\n\t\t\tneigh.FlagsExt = int(native.Uint32(attr.Value[0:4]))\n\t\tcase NDA_VLAN:\n\t\t\tneigh.Vlan = int(native.Uint16(attr.Value[0:2]))\n\t\tcase NDA_VNI:\n\t\t\tneigh.VNI = int(native.Uint32(attr.Value[0:4]))\n\t\tcase NDA_MASTER:\n\t\t\tneigh.MasterIndex = int(native.Uint32(attr.Value[0:4]))\n\t\tcase NDA_CACHEINFO:\n\t\t\tneigh.Confirmed = native.Uint32(attr.Value[0:4])\n\t\t\tneigh.Used = native.Uint32(attr.Value[4:8])\n\t\t\tneigh.Updated = native.Uint32(attr.Value[8:12])\n\t\t}\n\t}\n\n\treturn &neigh, nil\n}\n\n// NeighSubscribe takes a chan down which notifications will be sent\n// when neighbors are added or deleted. Close the 'done' chan to stop subscription.\nfunc NeighSubscribe(ch chan<- NeighUpdate, done <-chan struct{}) error {\n\treturn neighSubscribeAt(netns.None(), netns.None(), ch, done, nil, false, 0, nil, false)\n}\n\n// NeighSubscribeAt works like NeighSubscribe plus it allows the caller\n// to choose the network namespace in which to subscribe (ns).\nfunc NeighSubscribeAt(ns netns.NsHandle, ch chan<- NeighUpdate, done <-chan struct{}) error {\n\treturn neighSubscribeAt(ns, netns.None(), ch, done, nil, false, 0, nil, false)\n}\n\n// NeighSubscribeOptions contains a set of options to use with\n// NeighSubscribeWithOptions.\ntype NeighSubscribeOptions struct {\n\tNamespace     *netns.NsHandle\n\tErrorCallback func(error)\n\tListExisting  bool\n\n\t// max size is based on value of /proc/sys/net/core/rmem_max\n\tReceiveBufferSize      int\n\tReceiveBufferForceSize bool\n\tReceiveTimeout         *unix.Timeval\n}\n\n// NeighSubscribeWithOptions work like NeighSubscribe but enable to\n// provide additional options to modify the behavior. Currently, the\n// namespace can be provided as well as an error callback.\n//\n// When options.ListExisting is true, options.ErrorCallback may be\n// called with [ErrDumpInterrupted] to indicate that results from\n// the initial dump of links may be inconsistent or incomplete.\nfunc NeighSubscribeWithOptions(ch chan<- NeighUpdate, done <-chan struct{}, options NeighSubscribeOptions) error {\n\tif options.Namespace == nil {\n\t\tnone := netns.None()\n\t\toptions.Namespace = &none\n\t}\n\treturn neighSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting,\n\t\toptions.ReceiveBufferSize, options.ReceiveTimeout, options.ReceiveBufferForceSize)\n}\n\nfunc neighSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- NeighUpdate, done <-chan struct{}, cberr func(error), listExisting bool,\n\trcvbuf int, rcvTimeout *unix.Timeval, rcvbufForce bool) error {\n\ts, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_NEIGH)\n\tmakeRequest := func(family int) error {\n\t\treq := pkgHandle.newNetlinkRequest(unix.RTM_GETNEIGH, unix.NLM_F_DUMP)\n\t\tndmsg := &Ndmsg{Family: uint8(family)}\n\t\treq.AddData(ndmsg)\n\t\tif err := s.Send(req); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tif rcvTimeout != nil {\n\t\tif err := s.SetReceiveTimeout(rcvTimeout); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif rcvbuf != 0 {\n\t\terr = s.SetReceiveBufferSize(rcvbuf, rcvbufForce)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif done != nil {\n\t\tgo func() {\n\t\t\t<-done\n\t\t\ts.Close()\n\t\t}()\n\t}\n\tif listExisting {\n\t\tif err := makeRequest(unix.AF_UNSPEC); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// We have to wait for NLMSG_DONE before making AF_BRIDGE request\n\t}\n\tgo func() {\n\t\tdefer close(ch)\n\t\tfor {\n\t\t\tmsgs, from, err := s.Receive()\n\t\t\tif err != nil {\n\t\t\t\tif cberr != nil {\n\t\t\t\t\tcberr(err)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif from.Pid != nl.PidKernel {\n\t\t\t\tif cberr != nil {\n\t\t\t\t\tcberr(fmt.Errorf(\"Wrong sender portid %d, expected %d\", from.Pid, nl.PidKernel))\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor _, m := range msgs {\n\t\t\t\tif m.Header.Flags&unix.NLM_F_DUMP_INTR != 0 && cberr != nil {\n\t\t\t\t\tcberr(ErrDumpInterrupted)\n\t\t\t\t}\n\t\t\t\tif m.Header.Type == unix.NLMSG_DONE {\n\t\t\t\t\tif listExisting {\n\t\t\t\t\t\t// This will be called after handling AF_UNSPEC\n\t\t\t\t\t\t// list request, we have to wait for NLMSG_DONE\n\t\t\t\t\t\t// before making another request\n\t\t\t\t\t\tif err := makeRequest(unix.AF_BRIDGE); err != nil {\n\t\t\t\t\t\t\tif cberr != nil {\n\t\t\t\t\t\t\t\tcberr(err)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlistExisting = false\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif m.Header.Type == unix.NLMSG_ERROR {\n\t\t\t\t\tnError := int32(native.Uint32(m.Data[0:4]))\n\t\t\t\t\tif nError == 0 {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif cberr != nil {\n\t\t\t\t\t\tcberr(syscall.Errno(-nError))\n\t\t\t\t\t}\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tneigh, err := NeighDeserialize(m.Data)\n\t\t\t\tif err != nil {\n\t\t\t\t\tif cberr != nil {\n\t\t\t\t\t\tcberr(err)\n\t\t\t\t\t}\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tch <- NeighUpdate{Type: m.Header.Type, Neigh: *neigh}\n\t\t\t}\n\t\t}\n\t}()\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/netlink.go",
    "content": "// Package netlink provides a simple library for netlink. Netlink is\n// the interface a user-space program in linux uses to communicate with\n// the kernel. It can be used to add and remove interfaces, set up ip\n// addresses and routes, and confiugre ipsec. Netlink communication\n// requires elevated privileges, so in most cases this code needs to\n// be run as root. The low level primitives for netlink are contained\n// in the nl subpackage. This package attempts to provide a high-level\n// interface that is loosly modeled on the iproute2 cli.\npackage netlink\n\nimport (\n\t\"errors\"\n\t\"net\"\n)\n\nvar (\n\t// ErrNotImplemented is returned when a requested feature is not implemented.\n\tErrNotImplemented = errors.New(\"not implemented\")\n)\n\n// ParseIPNet parses a string in ip/net format and returns a net.IPNet.\n// This is valuable because addresses in netlink are often IPNets and\n// ParseCIDR returns an IPNet with the IP part set to the base IP of the\n// range.\nfunc ParseIPNet(s string) (*net.IPNet, error) {\n\tip, ipNet, err := net.ParseCIDR(s)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tipNet.IP = ip\n\treturn ipNet, nil\n}\n\n// NewIPNet generates an IPNet from an ip address using a netmask of 32 or 128.\nfunc NewIPNet(ip net.IP) *net.IPNet {\n\tif ip.To4() != nil {\n\t\treturn &net.IPNet{IP: ip, Mask: net.CIDRMask(32, 32)}\n\t}\n\treturn &net.IPNet{IP: ip, Mask: net.CIDRMask(128, 128)}\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/netlink_linux.go",
    "content": "package netlink\n\nimport \"github.com/vishvananda/netlink/nl\"\n\n// Family type definitions\nconst (\n\tFAMILY_ALL  = nl.FAMILY_ALL\n\tFAMILY_V4   = nl.FAMILY_V4\n\tFAMILY_V6   = nl.FAMILY_V6\n\tFAMILY_MPLS = nl.FAMILY_MPLS\n)\n\n// ErrDumpInterrupted is an alias for [nl.ErrDumpInterrupted].\nvar ErrDumpInterrupted = nl.ErrDumpInterrupted\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/netlink_unspecified.go",
    "content": "//go:build !linux\n// +build !linux\n\npackage netlink\n\nimport \"net\"\n\nfunc LinkSetUp(link Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetDown(link Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetMTU(link Link, mtu int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetMaster(link Link, master Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetNsPid(link Link, nspid int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetNsFd(link Link, fd int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetName(link Link, name string) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetAlias(link Link, name string) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetHardwareAddr(link Link, hwaddr net.HardwareAddr) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetVfVlan(link Link, vf, vlan int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetVfVlanQos(link Link, vf, vlan, qos int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetVfVlanQosProto(link Link, vf, vlan, qos, proto int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetVfTxRate(link Link, vf, rate int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetVfRate(link Link, vf, minRate, maxRate int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetNoMaster(link Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetMasterByIndex(link Link, masterIndex int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetXdpFd(link Link, fd int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetXdpFdWithFlags(link Link, fd, flags int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetARPOff(link Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetARPOn(link Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkByName(name string) (Link, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc LinkByAlias(alias string) (Link, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc LinkByIndex(index int) (Link, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc LinkSetHairpin(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetGuard(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetFastLeave(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetLearning(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetRootBlock(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetFlood(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetTxQLen(link Link, qlen int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetGSOMaxSize(link Link, maxSize int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetGROMaxSize(link Link, maxSize int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetGSOIPv4MaxSize(link Link, maxSize int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetGROIPv4MaxSize(link Link, maxSize int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkSetIP6AddrGenMode(link Link, mode int) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkAdd(link Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkDel(link Link) error {\n\treturn ErrNotImplemented\n}\n\nfunc SetHairpin(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc SetGuard(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc SetFastLeave(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc SetLearning(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc SetRootBlock(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc SetFlood(link Link, mode bool) error {\n\treturn ErrNotImplemented\n}\n\nfunc LinkList() ([]Link, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc AddrAdd(link Link, addr *Addr) error {\n\treturn ErrNotImplemented\n}\n\nfunc AddrReplace(link Link, addr *Addr) error {\n\treturn ErrNotImplemented\n}\n\nfunc AddrDel(link Link, addr *Addr) error {\n\treturn ErrNotImplemented\n}\n\nfunc AddrList(link Link, family int) ([]Addr, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc RouteAdd(route *Route) error {\n\treturn ErrNotImplemented\n}\n\nfunc RouteAppend(route *Route) error {\n\treturn ErrNotImplemented\n}\n\nfunc RouteChange(route *Route) error {\n\treturn ErrNotImplemented\n}\n\nfunc RouteDel(route *Route) error {\n\treturn ErrNotImplemented\n}\n\nfunc RouteGet(destination net.IP) ([]Route, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc RouteList(link Link, family int) ([]Route, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc RouteListFiltered(family int, filter *Route, filterMask uint64) ([]Route, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc RouteReplace(route *Route) error {\n\treturn ErrNotImplemented\n}\n\nfunc XfrmPolicyAdd(policy *XfrmPolicy) error {\n\treturn ErrNotImplemented\n}\n\nfunc XfrmPolicyDel(policy *XfrmPolicy) error {\n\treturn ErrNotImplemented\n}\n\nfunc XfrmPolicyList(family int) ([]XfrmPolicy, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc XfrmPolicyGet(policy *XfrmPolicy) (*XfrmPolicy, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc XfrmStateAdd(policy *XfrmState) error {\n\treturn ErrNotImplemented\n}\n\nfunc XfrmStateDel(policy *XfrmState) error {\n\treturn ErrNotImplemented\n}\n\nfunc XfrmStateList(family int) ([]XfrmState, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc NeighAdd(neigh *Neigh) error {\n\treturn ErrNotImplemented\n}\n\nfunc NeighSet(neigh *Neigh) error {\n\treturn ErrNotImplemented\n}\n\nfunc NeighAppend(neigh *Neigh) error {\n\treturn ErrNotImplemented\n}\n\nfunc NeighDel(neigh *Neigh) error {\n\treturn ErrNotImplemented\n}\n\nfunc NeighList(linkIndex, family int) ([]Neigh, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc NeighDeserialize(m []byte) (*Neigh, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc SocketGet(local, remote net.Addr) (*Socket, error) {\n\treturn nil, ErrNotImplemented\n}\n\nfunc SocketDestroy(local, remote net.Addr) (*Socket, error) {\n\treturn nil, ErrNotImplemented\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/netns_linux.go",
    "content": "package netlink\n\n// Network namespace ID functions\n//\n// The kernel has a weird concept called the network namespace ID.\n// This is different from the file reference in proc (and any bind-mounted\n// namespaces, etc.)\n//\n// Instead, namespaces can be assigned a numeric ID at any time. Once set,\n// the ID is fixed. The ID can either be set manually by the user, or\n// automatically, triggered by certain kernel actions. The most common kernel\n// action that triggers namespace ID creation is moving one end of a veth pair\n// in to that namespace.\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// These can be replaced by the values from sys/unix when it is next released.\nconst (\n\t_ = iota\n\tNETNSA_NSID\n\tNETNSA_PID\n\tNETNSA_FD\n)\n\n// GetNetNsIdByPid looks up the network namespace ID for a given pid (really thread id).\n// Returns -1 if the namespace does not have an ID set.\nfunc (h *Handle) GetNetNsIdByPid(pid int) (int, error) {\n\treturn h.getNetNsId(NETNSA_PID, uint32(pid))\n}\n\n// GetNetNsIdByPid looks up the network namespace ID for a given pid (really thread id).\n// Returns -1 if the namespace does not have an ID set.\nfunc GetNetNsIdByPid(pid int) (int, error) {\n\treturn pkgHandle.GetNetNsIdByPid(pid)\n}\n\n// SetNetNSIdByPid sets the ID of the network namespace for a given pid (really thread id).\n// The ID can only be set for namespaces without an ID already set.\nfunc (h *Handle) SetNetNsIdByPid(pid, nsid int) error {\n\treturn h.setNetNsId(NETNSA_PID, uint32(pid), uint32(nsid))\n}\n\n// SetNetNSIdByPid sets the ID of the network namespace for a given pid (really thread id).\n// The ID can only be set for namespaces without an ID already set.\nfunc SetNetNsIdByPid(pid, nsid int) error {\n\treturn pkgHandle.SetNetNsIdByPid(pid, nsid)\n}\n\n// GetNetNsIdByFd looks up the network namespace ID for a given fd.\n// fd must be an open file descriptor to a namespace file.\n// Returns -1 if the namespace does not have an ID set.\nfunc (h *Handle) GetNetNsIdByFd(fd int) (int, error) {\n\treturn h.getNetNsId(NETNSA_FD, uint32(fd))\n}\n\n// GetNetNsIdByFd looks up the network namespace ID for a given fd.\n// fd must be an open file descriptor to a namespace file.\n// Returns -1 if the namespace does not have an ID set.\nfunc GetNetNsIdByFd(fd int) (int, error) {\n\treturn pkgHandle.GetNetNsIdByFd(fd)\n}\n\n// SetNetNSIdByFd sets the ID of the network namespace for a given fd.\n// fd must be an open file descriptor to a namespace file.\n// The ID can only be set for namespaces without an ID already set.\nfunc (h *Handle) SetNetNsIdByFd(fd, nsid int) error {\n\treturn h.setNetNsId(NETNSA_FD, uint32(fd), uint32(nsid))\n}\n\n// SetNetNSIdByFd sets the ID of the network namespace for a given fd.\n// fd must be an open file descriptor to a namespace file.\n// The ID can only be set for namespaces without an ID already set.\nfunc SetNetNsIdByFd(fd, nsid int) error {\n\treturn pkgHandle.SetNetNsIdByFd(fd, nsid)\n}\n\n// getNetNsId requests the netnsid for a given type-val pair\n// type should be either NETNSA_PID or NETNSA_FD\nfunc (h *Handle) getNetNsId(attrType int, val uint32) (int, error) {\n\treq := h.newNetlinkRequest(unix.RTM_GETNSID, unix.NLM_F_REQUEST)\n\n\trtgen := nl.NewRtGenMsg()\n\treq.AddData(rtgen)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, val)\n\tattr := nl.NewRtAttr(attrType, b)\n\treq.AddData(attr)\n\n\tmsgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWNSID)\n\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tfor _, m := range msgs {\n\t\tmsg := nl.DeserializeRtGenMsg(m)\n\n\t\tattrs, err := nl.ParseRouteAttr(m[msg.Len():])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\tfor _, attr := range attrs {\n\t\t\tswitch attr.Attr.Type {\n\t\t\tcase NETNSA_NSID:\n\t\t\t\treturn int(int32(native.Uint32(attr.Value))), nil\n\t\t\t}\n\t\t}\n\t}\n\n\treturn 0, fmt.Errorf(\"unexpected empty result\")\n}\n\n// setNetNsId sets the netnsid for a given type-val pair\n// type should be either NETNSA_PID or NETNSA_FD\n// The ID can only be set for namespaces without an ID already set\nfunc (h *Handle) setNetNsId(attrType int, val uint32, newnsid uint32) error {\n\treq := h.newNetlinkRequest(unix.RTM_NEWNSID, unix.NLM_F_REQUEST|unix.NLM_F_ACK)\n\n\trtgen := nl.NewRtGenMsg()\n\treq.AddData(rtgen)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, val)\n\tattr := nl.NewRtAttr(attrType, b)\n\treq.AddData(attr)\n\n\tb1 := make([]byte, 4)\n\tnative.PutUint32(b1, newnsid)\n\tattr1 := nl.NewRtAttr(NETNSA_NSID, b1)\n\treq.AddData(attr1)\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWNSID)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/netns_unspecified.go",
    "content": "// +build !linux\n\npackage netlink\n\nfunc GetNetNsIdByPid(pid int) (int, error) {\n\treturn 0, ErrNotImplemented\n}\n\nfunc SetNetNsIdByPid(pid, nsid int) error {\n\treturn ErrNotImplemented\n}\n\nfunc GetNetNsIdByFd(fd int) (int, error) {\n\treturn 0, ErrNotImplemented\n}\n\nfunc SetNetNsIdByFd(fd, nsid int) error {\n\treturn ErrNotImplemented\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/addr_linux.go",
    "content": "package nl\n\nimport (\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\ntype IfAddrmsg struct {\n\tunix.IfAddrmsg\n}\n\nfunc NewIfAddrmsg(family int) *IfAddrmsg {\n\treturn &IfAddrmsg{\n\t\tIfAddrmsg: unix.IfAddrmsg{\n\t\t\tFamily: uint8(family),\n\t\t},\n\t}\n}\n\n// struct ifaddrmsg {\n//   __u8    ifa_family;\n//   __u8    ifa_prefixlen;  /* The prefix length    */\n//   __u8    ifa_flags;  /* Flags      */\n//   __u8    ifa_scope;  /* Address scope    */\n//   __u32   ifa_index;  /* Link index     */\n// };\n\n// type IfAddrmsg struct {\n// \tFamily    uint8\n// \tPrefixlen uint8\n// \tFlags     uint8\n// \tScope     uint8\n// \tIndex     uint32\n// }\n// SizeofIfAddrmsg     = 0x8\n\nfunc DeserializeIfAddrmsg(b []byte) *IfAddrmsg {\n\treturn (*IfAddrmsg)(unsafe.Pointer(&b[0:unix.SizeofIfAddrmsg][0]))\n}\n\nfunc (msg *IfAddrmsg) Serialize() []byte {\n\treturn (*(*[unix.SizeofIfAddrmsg]byte)(unsafe.Pointer(msg)))[:]\n}\n\nfunc (msg *IfAddrmsg) Len() int {\n\treturn unix.SizeofIfAddrmsg\n}\n\n// struct ifa_cacheinfo {\n// \t__u32\tifa_prefered;\n// \t__u32\tifa_valid;\n// \t__u32\tcstamp; /* created timestamp, hundredths of seconds */\n// \t__u32\ttstamp; /* updated timestamp, hundredths of seconds */\n// };\n\ntype IfaCacheInfo struct {\n\tunix.IfaCacheinfo\n}\n\nfunc (msg *IfaCacheInfo) Len() int {\n\treturn unix.SizeofIfaCacheinfo\n}\n\nfunc DeserializeIfaCacheInfo(b []byte) *IfaCacheInfo {\n\treturn (*IfaCacheInfo)(unsafe.Pointer(&b[0:unix.SizeofIfaCacheinfo][0]))\n}\n\nfunc (msg *IfaCacheInfo) Serialize() []byte {\n\treturn (*(*[unix.SizeofIfaCacheinfo]byte)(unsafe.Pointer(msg)))[:]\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/bridge_linux.go",
    "content": "package nl\n\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n)\n\nconst (\n\tSizeofBridgeVlanInfo = 0x04\n)\n\n/* Bridge Flags */\nconst (\n\tBRIDGE_FLAGS_MASTER = iota + 1 /* Bridge command to/from master */\n\tBRIDGE_FLAGS_SELF              /* Bridge command to/from lowerdev */\n)\n\n/* Bridge management nested attributes\n * [IFLA_AF_SPEC] = {\n *     [IFLA_BRIDGE_FLAGS]\n *     [IFLA_BRIDGE_MODE]\n *     [IFLA_BRIDGE_VLAN_INFO]\n * }\n */\nconst (\n\tIFLA_BRIDGE_FLAGS = iota\n\tIFLA_BRIDGE_MODE\n\tIFLA_BRIDGE_VLAN_INFO\n\tIFLA_BRIDGE_VLAN_TUNNEL_INFO\n)\n\nconst (\n\tIFLA_BRIDGE_VLAN_TUNNEL_UNSPEC = iota\n\tIFLA_BRIDGE_VLAN_TUNNEL_ID\n\tIFLA_BRIDGE_VLAN_TUNNEL_VID\n\tIFLA_BRIDGE_VLAN_TUNNEL_FLAGS\n)\n\nconst (\n\tBRIDGE_VLAN_INFO_MASTER = 1 << iota\n\tBRIDGE_VLAN_INFO_PVID\n\tBRIDGE_VLAN_INFO_UNTAGGED\n\tBRIDGE_VLAN_INFO_RANGE_BEGIN\n\tBRIDGE_VLAN_INFO_RANGE_END\n)\n\n// struct bridge_vlan_info {\n//   __u16 flags;\n//   __u16 vid;\n// };\n\ntype TunnelInfo struct {\n\tTunId uint32\n\tVid   uint16\n}\n\ntype BridgeVlanInfo struct {\n\tFlags uint16\n\tVid   uint16\n}\n\nfunc (b *BridgeVlanInfo) Serialize() []byte {\n\treturn (*(*[SizeofBridgeVlanInfo]byte)(unsafe.Pointer(b)))[:]\n}\n\nfunc DeserializeBridgeVlanInfo(b []byte) *BridgeVlanInfo {\n\treturn (*BridgeVlanInfo)(unsafe.Pointer(&b[0:SizeofBridgeVlanInfo][0]))\n}\n\nfunc (b *BridgeVlanInfo) PortVID() bool {\n\treturn b.Flags&BRIDGE_VLAN_INFO_PVID > 0\n}\n\nfunc (b *BridgeVlanInfo) EngressUntag() bool {\n\treturn b.Flags&BRIDGE_VLAN_INFO_UNTAGGED > 0\n}\n\nfunc (b *BridgeVlanInfo) String() string {\n\treturn fmt.Sprintf(\"%+v\", *b)\n}\n\n/* New extended info filters for IFLA_EXT_MASK */\nconst (\n\tRTEXT_FILTER_VF = 1 << iota\n\tRTEXT_FILTER_BRVLAN\n\tRTEXT_FILTER_BRVLAN_COMPRESSED\n)\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/conntrack_linux.go",
    "content": "package nl\n\nimport \"unsafe\"\n\n// Track the message sizes for the correct serialization/deserialization\nconst (\n\tSizeofNfgenmsg      = 4\n\tSizeofNfattr        = 4\n\tSizeofNfConntrack   = 376\n\tSizeofNfctTupleHead = 52\n)\n\nvar L4ProtoMap = map[uint8]string{\n\t6:  \"tcp\",\n\t17: \"udp\",\n}\n\n// From https://git.netfilter.org/libnetfilter_conntrack/tree/include/libnetfilter_conntrack/libnetfilter_conntrack_tcp.h\n//\t enum tcp_state {\n//\t\tTCP_CONNTRACK_NONE,\n//\t\tTCP_CONNTRACK_SYN_SENT,\n//\t\tTCP_CONNTRACK_SYN_RECV,\n//\t\tTCP_CONNTRACK_ESTABLISHED,\n//\t\tTCP_CONNTRACK_FIN_WAIT,\n//\t\tTCP_CONNTRACK_CLOSE_WAIT,\n//\t\tTCP_CONNTRACK_LAST_ACK,\n//\t\tTCP_CONNTRACK_TIME_WAIT,\n//\t\tTCP_CONNTRACK_CLOSE,\n//\t\tTCP_CONNTRACK_LISTEN,\t\t/* obsolete */\n//\t#define TCP_CONNTRACK_SYN_SENT2\t\tTCP_CONNTRACK_LISTEN\n//\t\tTCP_CONNTRACK_MAX,\n//\t\tTCP_CONNTRACK_IGNORE\n//\t };\nconst (\n\t\tTCP_CONNTRACK_NONE = 0\n\t\tTCP_CONNTRACK_SYN_SENT = 1\n\t\tTCP_CONNTRACK_SYN_RECV = 2\n\t\tTCP_CONNTRACK_ESTABLISHED = 3\n\t\tTCP_CONNTRACK_FIN_WAIT = 4\n\t\tTCP_CONNTRACK_CLOSE_WAIT = 5\n\t\tTCP_CONNTRACK_LAST_ACK = 6\n\t\tTCP_CONNTRACK_TIME_WAIT = 7\n\t\tTCP_CONNTRACK_CLOSE = 8\n\t\tTCP_CONNTRACK_LISTEN = 9\n\t\tTCP_CONNTRACK_SYN_SENT2 = 9\n\t\tTCP_CONNTRACK_MAX = 10\n\t\tTCP_CONNTRACK_IGNORE = 11\n)\n\n// All the following constants are coming from:\n// https://github.com/torvalds/linux/blob/master/include/uapi/linux/netfilter/nfnetlink_conntrack.h\n\n// enum cntl_msg_types {\n// \tIPCTNL_MSG_CT_NEW,\n// \tIPCTNL_MSG_CT_GET,\n// \tIPCTNL_MSG_CT_DELETE,\n// \tIPCTNL_MSG_CT_GET_CTRZERO,\n// \tIPCTNL_MSG_CT_GET_STATS_CPU,\n// \tIPCTNL_MSG_CT_GET_STATS,\n// \tIPCTNL_MSG_CT_GET_DYING,\n// \tIPCTNL_MSG_CT_GET_UNCONFIRMED,\n//\n// \tIPCTNL_MSG_MAX\n// };\nconst (\n\tIPCTNL_MSG_CT_NEW = 0\n\tIPCTNL_MSG_CT_GET    = 1\n\tIPCTNL_MSG_CT_DELETE = 2\n)\n\n// #define NFNETLINK_V0\t0\nconst (\n\tNFNETLINK_V0 = 0\n)\n\nconst (\n\tNLA_F_NESTED        uint16 = (1 << 15) // #define NLA_F_NESTED (1 << 15)\n\tNLA_F_NET_BYTEORDER uint16 = (1 << 14) // #define NLA_F_NESTED (1 << 14)\n\tNLA_TYPE_MASK              = ^(NLA_F_NESTED | NLA_F_NET_BYTEORDER)\n\tNLA_ALIGNTO         uint16 = 4 // #define NLA_ALIGNTO 4\n)\n\n// enum ctattr_type {\n// \tCTA_UNSPEC,\n// \tCTA_TUPLE_ORIG,\n// \tCTA_TUPLE_REPLY,\n// \tCTA_STATUS,\n// \tCTA_PROTOINFO,\n// \tCTA_HELP,\n// \tCTA_NAT_SRC,\n// #define CTA_NAT\tCTA_NAT_SRC\t/* backwards compatibility */\n// \tCTA_TIMEOUT,\n// \tCTA_MARK,\n// \tCTA_COUNTERS_ORIG,\n// \tCTA_COUNTERS_REPLY,\n// \tCTA_USE,\n// \tCTA_ID,\n// \tCTA_NAT_DST,\n// \tCTA_TUPLE_MASTER,\n// \tCTA_SEQ_ADJ_ORIG,\n// \tCTA_NAT_SEQ_ADJ_ORIG\t= CTA_SEQ_ADJ_ORIG,\n// \tCTA_SEQ_ADJ_REPLY,\n// \tCTA_NAT_SEQ_ADJ_REPLY\t= CTA_SEQ_ADJ_REPLY,\n// \tCTA_SECMARK,\t\t/* obsolete */\n// \tCTA_ZONE,\n// \tCTA_SECCTX,\n// \tCTA_TIMESTAMP,\n// \tCTA_MARK_MASK,\n// \tCTA_LABELS,\n// \tCTA_LABELS_MASK,\n// \t__CTA_MAX\n// };\nconst (\n\tCTA_TUPLE_ORIG     = 1\n\tCTA_TUPLE_REPLY    = 2\n\tCTA_STATUS         = 3\n\tCTA_PROTOINFO      = 4\n\tCTA_TIMEOUT        = 7\n\tCTA_MARK           = 8\n\tCTA_COUNTERS_ORIG  = 9\n\tCTA_COUNTERS_REPLY = 10\n\tCTA_USE            = 11\n\tCTA_ID             = 12\n\tCTA_ZONE           = 18\n\tCTA_TIMESTAMP      = 20\n\tCTA_LABELS         = 22\n\tCTA_LABELS_MASK    = 23\n)\n\n// enum ctattr_tuple {\n// \tCTA_TUPLE_UNSPEC,\n// \tCTA_TUPLE_IP,\n// \tCTA_TUPLE_PROTO,\n// \tCTA_TUPLE_ZONE,\n// \t__CTA_TUPLE_MAX\n// };\n// #define CTA_TUPLE_MAX (__CTA_TUPLE_MAX - 1)\nconst (\n\tCTA_TUPLE_IP    = 1\n\tCTA_TUPLE_PROTO = 2\n)\n\n// enum ctattr_ip {\n// \tCTA_IP_UNSPEC,\n// \tCTA_IP_V4_SRC,\n// \tCTA_IP_V4_DST,\n// \tCTA_IP_V6_SRC,\n// \tCTA_IP_V6_DST,\n// \t__CTA_IP_MAX\n// };\n// #define CTA_IP_MAX (__CTA_IP_MAX - 1)\nconst (\n\tCTA_IP_V4_SRC = 1\n\tCTA_IP_V4_DST = 2\n\tCTA_IP_V6_SRC = 3\n\tCTA_IP_V6_DST = 4\n)\n\n// enum ctattr_l4proto {\n// \tCTA_PROTO_UNSPEC,\n// \tCTA_PROTO_NUM,\n// \tCTA_PROTO_SRC_PORT,\n// \tCTA_PROTO_DST_PORT,\n// \tCTA_PROTO_ICMP_ID,\n// \tCTA_PROTO_ICMP_TYPE,\n// \tCTA_PROTO_ICMP_CODE,\n// \tCTA_PROTO_ICMPV6_ID,\n// \tCTA_PROTO_ICMPV6_TYPE,\n// \tCTA_PROTO_ICMPV6_CODE,\n// \t__CTA_PROTO_MAX\n// };\n// #define CTA_PROTO_MAX (__CTA_PROTO_MAX - 1)\nconst (\n\tCTA_PROTO_NUM      = 1\n\tCTA_PROTO_SRC_PORT = 2\n\tCTA_PROTO_DST_PORT = 3\n)\n\n// enum ctattr_protoinfo {\n// \tCTA_PROTOINFO_UNSPEC,\n// \tCTA_PROTOINFO_TCP,\n// \tCTA_PROTOINFO_DCCP,\n// \tCTA_PROTOINFO_SCTP,\n// \t__CTA_PROTOINFO_MAX\n// };\n// #define CTA_PROTOINFO_MAX (__CTA_PROTOINFO_MAX - 1)\nconst (\n\tCTA_PROTOINFO_UNSPEC = 0\n\tCTA_PROTOINFO_TCP = 1\n\tCTA_PROTOINFO_DCCP = 2\n\tCTA_PROTOINFO_SCTP = 3\n)\n\n// enum ctattr_protoinfo_tcp {\n// \tCTA_PROTOINFO_TCP_UNSPEC,\n// \tCTA_PROTOINFO_TCP_STATE,\n// \tCTA_PROTOINFO_TCP_WSCALE_ORIGINAL,\n// \tCTA_PROTOINFO_TCP_WSCALE_REPLY,\n// \tCTA_PROTOINFO_TCP_FLAGS_ORIGINAL,\n// \tCTA_PROTOINFO_TCP_FLAGS_REPLY,\n// \t__CTA_PROTOINFO_TCP_MAX\n// };\n// #define CTA_PROTOINFO_TCP_MAX (__CTA_PROTOINFO_TCP_MAX - 1)\nconst (\n\tCTA_PROTOINFO_TCP_STATE           = 1\n\tCTA_PROTOINFO_TCP_WSCALE_ORIGINAL = 2\n\tCTA_PROTOINFO_TCP_WSCALE_REPLY    = 3\n\tCTA_PROTOINFO_TCP_FLAGS_ORIGINAL  = 4\n\tCTA_PROTOINFO_TCP_FLAGS_REPLY     = 5\n)\n\n// enum ctattr_counters {\n// \tCTA_COUNTERS_UNSPEC,\n// \tCTA_COUNTERS_PACKETS,\t\t/* 64bit counters */\n// \tCTA_COUNTERS_BYTES,\t\t/* 64bit counters */\n// \tCTA_COUNTERS32_PACKETS,\t\t/* old 32bit counters, unused */\n// \tCTA_COUNTERS32_BYTES,\t\t/* old 32bit counters, unused */\n// \tCTA_COUNTERS_PAD,\n// \t__CTA_COUNTERS_M\n// };\n// #define CTA_COUNTERS_MAX (__CTA_COUNTERS_MAX - 1)\nconst (\n\tCTA_COUNTERS_PACKETS = 1\n\tCTA_COUNTERS_BYTES   = 2\n)\n\n// enum CTA TIMESTAMP TLVs\n// CTA_TIMESTAMP_START       /* 64bit value */\n// CTA_TIMESTAMP_STOP        /* 64bit value */\nconst (\n\tCTA_TIMESTAMP_START = 1\n\tCTA_TIMESTAMP_STOP  = 2\n)\n\n// /* General form of address family dependent message.\n//  */\n// struct nfgenmsg {\n// \t__u8  nfgen_family;\t\t/* AF_xxx */\n// \t__u8  version;\t\t/* nfnetlink version */\n// \t__be16    res_id;\t\t/* resource id */\n// };\ntype Nfgenmsg struct {\n\tNfgenFamily uint8\n\tVersion     uint8\n\tResId       uint16 // big endian\n}\n\nfunc (msg *Nfgenmsg) Len() int {\n\treturn SizeofNfgenmsg\n}\n\nfunc DeserializeNfgenmsg(b []byte) *Nfgenmsg {\n\treturn (*Nfgenmsg)(unsafe.Pointer(&b[0:SizeofNfgenmsg][0]))\n}\n\nfunc (msg *Nfgenmsg) Serialize() []byte {\n\treturn (*(*[SizeofNfgenmsg]byte)(unsafe.Pointer(msg)))[:]\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/devlink_linux.go",
    "content": "package nl\n\n// All the following constants are coming from:\n// https://github.com/torvalds/linux/blob/master/include/uapi/linux/devlink.h\n\nconst (\n\tGENL_DEVLINK_VERSION = 1\n\tGENL_DEVLINK_NAME    = \"devlink\"\n)\n\nconst (\n\tDEVLINK_CMD_GET           = 1\n\tDEVLINK_CMD_PORT_GET      = 5\n\tDEVLINK_CMD_PORT_SET      = 6\n\tDEVLINK_CMD_PORT_NEW      = 7\n\tDEVLINK_CMD_PORT_DEL      = 8\n\tDEVLINK_CMD_ESWITCH_GET   = 29\n\tDEVLINK_CMD_ESWITCH_SET   = 30\n\tDEVLINK_CMD_RESOURCE_DUMP = 36\n\tDEVLINK_CMD_PARAM_GET     = 38\n\tDEVLINK_CMD_PARAM_SET     = 39\n\tDEVLINK_CMD_INFO_GET      = 51\n)\n\nconst (\n\tDEVLINK_ATTR_BUS_NAME                   = 1\n\tDEVLINK_ATTR_DEV_NAME                   = 2\n\tDEVLINK_ATTR_PORT_INDEX                 = 3\n\tDEVLINK_ATTR_PORT_TYPE                  = 4\n\tDEVLINK_ATTR_PORT_NETDEV_IFINDEX        = 6\n\tDEVLINK_ATTR_PORT_NETDEV_NAME           = 7\n\tDEVLINK_ATTR_PORT_IBDEV_NAME            = 8\n\tDEVLINK_ATTR_ESWITCH_MODE               = 25\n\tDEVLINK_ATTR_ESWITCH_INLINE_MODE        = 26\n\tDEVLINK_ATTR_ESWITCH_ENCAP_MODE         = 62\n\tDEVLINK_ATTR_RESOURCE_LIST              = 63 /* nested */\n\tDEVLINK_ATTR_RESOURCE                   = 64 /* nested */\n\tDEVLINK_ATTR_RESOURCE_NAME              = 65 /* string */\n\tDEVLINK_ATTR_RESOURCE_ID                = 66 /* u64 */\n\tDEVLINK_ATTR_RESOURCE_SIZE              = 67 /* u64 */\n\tDEVLINK_ATTR_RESOURCE_SIZE_NEW          = 68 /* u64 */\n\tDEVLINK_ATTR_RESOURCE_SIZE_VALID        = 69 /* u8 */\n\tDEVLINK_ATTR_RESOURCE_SIZE_MIN          = 70 /* u64 */\n\tDEVLINK_ATTR_RESOURCE_SIZE_MAX          = 71 /* u64 */\n\tDEVLINK_ATTR_RESOURCE_SIZE_GRAN         = 72 /* u64 */\n\tDEVLINK_ATTR_RESOURCE_UNIT              = 73 /* u8 */\n\tDEVLINK_ATTR_RESOURCE_OCC               = 74 /* u64 */\n\tDEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID    = 75 /* u64 */\n\tDEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS = 76 /* u64 */\n\tDEVLINK_ATTR_PORT_FLAVOUR               = 77\n\tDEVLINK_ATTR_INFO_DRIVER_NAME           = 98\n\tDEVLINK_ATTR_INFO_SERIAL_NUMBER         = 99\n\tDEVLINK_ATTR_INFO_VERSION_FIXED         = 100\n\tDEVLINK_ATTR_INFO_VERSION_RUNNING       = 101\n\tDEVLINK_ATTR_INFO_VERSION_STORED        = 102\n\tDEVLINK_ATTR_INFO_VERSION_NAME          = 103\n\tDEVLINK_ATTR_INFO_VERSION_VALUE         = 104\n\tDEVLINK_ATTR_PORT_PCI_PF_NUMBER         = 127\n\tDEVLINK_ATTR_PORT_FUNCTION              = 145\n\tDEVLINK_ATTR_PORT_CONTROLLER_NUMBER     = 150\n\tDEVLINK_ATTR_PORT_PCI_SF_NUMBER         = 164\n)\n\nconst (\n\tDEVLINK_ESWITCH_MODE_LEGACY    = 0\n\tDEVLINK_ESWITCH_MODE_SWITCHDEV = 1\n)\n\nconst (\n\tDEVLINK_ESWITCH_INLINE_MODE_NONE      = 0\n\tDEVLINK_ESWITCH_INLINE_MODE_LINK      = 1\n\tDEVLINK_ESWITCH_INLINE_MODE_NETWORK   = 2\n\tDEVLINK_ESWITCH_INLINE_MODE_TRANSPORT = 3\n)\n\nconst (\n\tDEVLINK_ESWITCH_ENCAP_MODE_NONE  = 0\n\tDEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1\n)\n\nconst (\n\tDEVLINK_PORT_FLAVOUR_PHYSICAL = 0\n\tDEVLINK_PORT_FLAVOUR_CPU      = 1\n\tDEVLINK_PORT_FLAVOUR_DSA      = 2\n\tDEVLINK_PORT_FLAVOUR_PCI_PF   = 3\n\tDEVLINK_PORT_FLAVOUR_PCI_VF   = 4\n\tDEVLINK_PORT_FLAVOUR_VIRTUAL  = 5\n\tDEVLINK_PORT_FLAVOUR_UNUSED   = 6\n\tDEVLINK_PORT_FLAVOUR_PCI_SF   = 7\n)\n\nconst (\n\tDEVLINK_PORT_TYPE_NOTSET = 0\n\tDEVLINK_PORT_TYPE_AUTO   = 1\n\tDEVLINK_PORT_TYPE_ETH    = 2\n\tDEVLINK_PORT_TYPE_IB     = 3\n)\n\nconst (\n\tDEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 1\n\tDEVLINK_PORT_FN_ATTR_STATE         = 2\n\tDEVLINK_PORT_FN_ATTR_OPSTATE       = 3\n)\n\nconst (\n\tDEVLINK_PORT_FN_STATE_INACTIVE = 0\n\tDEVLINK_PORT_FN_STATE_ACTIVE   = 1\n)\n\nconst (\n\tDEVLINK_PORT_FN_OPSTATE_DETACHED = 0\n\tDEVLINK_PORT_FN_OPSTATE_ATTACHED = 1\n)\n\nconst (\n\tDEVLINK_RESOURCE_UNIT_ENTRY uint8 = 0\n)\n\nconst (\n\tDEVLINK_ATTR_PARAM             = iota + 80 /* nested */\n\tDEVLINK_ATTR_PARAM_NAME                    /* string */\n\tDEVLINK_ATTR_PARAM_GENERIC                 /* flag */\n\tDEVLINK_ATTR_PARAM_TYPE                    /* u8 */\n\tDEVLINK_ATTR_PARAM_VALUES_LIST             /* nested */\n\tDEVLINK_ATTR_PARAM_VALUE                   /* nested */\n\tDEVLINK_ATTR_PARAM_VALUE_DATA              /* dynamic */\n\tDEVLINK_ATTR_PARAM_VALUE_CMODE             /* u8 */\n)\n\nconst (\n\tDEVLINK_PARAM_TYPE_U8     = 1\n\tDEVLINK_PARAM_TYPE_U16    = 2\n\tDEVLINK_PARAM_TYPE_U32    = 3\n\tDEVLINK_PARAM_TYPE_STRING = 5\n\tDEVLINK_PARAM_TYPE_BOOL   = 6\n)\n\nconst (\n\tDEVLINK_PARAM_CMODE_RUNTIME = iota\n\tDEVLINK_PARAM_CMODE_DRIVERINIT\n\tDEVLINK_PARAM_CMODE_PERMANENT\n)\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/genetlink_linux.go",
    "content": "package nl\n\nimport (\n\t\"unsafe\"\n)\n\nconst SizeofGenlmsg = 4\n\nconst (\n\tGENL_ID_CTRL      = 0x10\n\tGENL_CTRL_VERSION = 2\n\tGENL_CTRL_NAME    = \"nlctrl\"\n)\n\nconst (\n\tGENL_CTRL_CMD_GETFAMILY = 3\n)\n\nconst (\n\tGENL_CTRL_ATTR_UNSPEC = iota\n\tGENL_CTRL_ATTR_FAMILY_ID\n\tGENL_CTRL_ATTR_FAMILY_NAME\n\tGENL_CTRL_ATTR_VERSION\n\tGENL_CTRL_ATTR_HDRSIZE\n\tGENL_CTRL_ATTR_MAXATTR\n\tGENL_CTRL_ATTR_OPS\n\tGENL_CTRL_ATTR_MCAST_GROUPS\n)\n\nconst (\n\tGENL_CTRL_ATTR_OP_UNSPEC = iota\n\tGENL_CTRL_ATTR_OP_ID\n\tGENL_CTRL_ATTR_OP_FLAGS\n)\n\nconst (\n\tGENL_ADMIN_PERM = 1 << iota\n\tGENL_CMD_CAP_DO\n\tGENL_CMD_CAP_DUMP\n\tGENL_CMD_CAP_HASPOL\n)\n\nconst (\n\tGENL_CTRL_ATTR_MCAST_GRP_UNSPEC = iota\n\tGENL_CTRL_ATTR_MCAST_GRP_NAME\n\tGENL_CTRL_ATTR_MCAST_GRP_ID\n)\n\nconst (\n\tGENL_GTP_VERSION = 0\n\tGENL_GTP_NAME    = \"gtp\"\n)\n\nconst (\n\tGENL_GTP_CMD_NEWPDP = iota\n\tGENL_GTP_CMD_DELPDP\n\tGENL_GTP_CMD_GETPDP\n)\n\nconst (\n\tGENL_GTP_ATTR_UNSPEC = iota\n\tGENL_GTP_ATTR_LINK\n\tGENL_GTP_ATTR_VERSION\n\tGENL_GTP_ATTR_TID\n\tGENL_GTP_ATTR_PEER_ADDRESS\n\tGENL_GTP_ATTR_MS_ADDRESS\n\tGENL_GTP_ATTR_FLOW\n\tGENL_GTP_ATTR_NET_NS_FD\n\tGENL_GTP_ATTR_I_TEI\n\tGENL_GTP_ATTR_O_TEI\n\tGENL_GTP_ATTR_PAD\n)\n\ntype Genlmsg struct {\n\tCommand uint8\n\tVersion uint8\n}\n\nfunc (msg *Genlmsg) Len() int {\n\treturn SizeofGenlmsg\n}\n\nfunc DeserializeGenlmsg(b []byte) *Genlmsg {\n\treturn (*Genlmsg)(unsafe.Pointer(&b[0:SizeofGenlmsg][0]))\n}\n\nfunc (msg *Genlmsg) Serialize() []byte {\n\treturn (*(*[SizeofGenlmsg]byte)(unsafe.Pointer(msg)))[:]\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/ip6tnl_linux.go",
    "content": "package nl\n\n// id's of route attribute from https://elixir.bootlin.com/linux/v5.17.3/source/include/uapi/linux/lwtunnel.h#L38\n// the value's size are specified in https://elixir.bootlin.com/linux/v5.17.3/source/net/ipv4/ip_tunnel_core.c#L928\n\nconst (\n\tLWTUNNEL_IP6_UNSPEC = iota\n\tLWTUNNEL_IP6_ID\n\tLWTUNNEL_IP6_DST\n\tLWTUNNEL_IP6_SRC\n\tLWTUNNEL_IP6_HOPLIMIT\n\tLWTUNNEL_IP6_TC\n\tLWTUNNEL_IP6_FLAGS\n\tLWTUNNEL_IP6_PAD // not implemented\n\tLWTUNNEL_IP6_OPTS // not implemented\n\t__LWTUNNEL_IP6_MAX\n)\n\n\n\n\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/ipset_linux.go",
    "content": "package nl\n\nimport (\n\t\"strconv\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\t/* The protocol version */\n\tIPSET_PROTOCOL = 6\n\n\t/* The max length of strings including NUL: set and type identifiers */\n\tIPSET_MAXNAMELEN = 32\n\n\t/* The maximum permissible comment length we will accept over netlink */\n\tIPSET_MAX_COMMENT_SIZE = 255\n)\n\nconst (\n\t_                  = iota\n\tIPSET_CMD_PROTOCOL /* 1: Return protocol version */\n\tIPSET_CMD_CREATE   /* 2: Create a new (empty) set */\n\tIPSET_CMD_DESTROY  /* 3: Destroy a (empty) set */\n\tIPSET_CMD_FLUSH    /* 4: Remove all elements from a set */\n\tIPSET_CMD_RENAME   /* 5: Rename a set */\n\tIPSET_CMD_SWAP     /* 6: Swap two sets */\n\tIPSET_CMD_LIST     /* 7: List sets */\n\tIPSET_CMD_SAVE     /* 8: Save sets */\n\tIPSET_CMD_ADD      /* 9: Add an element to a set */\n\tIPSET_CMD_DEL      /* 10: Delete an element from a set */\n\tIPSET_CMD_TEST     /* 11: Test an element in a set */\n\tIPSET_CMD_HEADER   /* 12: Get set header data only */\n\tIPSET_CMD_TYPE     /* 13: Get set type */\n)\n\n/* Attributes at command level */\nconst (\n\t_                       = iota\n\tIPSET_ATTR_PROTOCOL     /* 1: Protocol version */\n\tIPSET_ATTR_SETNAME      /* 2: Name of the set */\n\tIPSET_ATTR_TYPENAME     /* 3: Typename */\n\tIPSET_ATTR_REVISION     /* 4: Settype revision */\n\tIPSET_ATTR_FAMILY       /* 5: Settype family */\n\tIPSET_ATTR_FLAGS        /* 6: Flags at command level */\n\tIPSET_ATTR_DATA         /* 7: Nested attributes */\n\tIPSET_ATTR_ADT          /* 8: Multiple data containers */\n\tIPSET_ATTR_LINENO       /* 9: Restore lineno */\n\tIPSET_ATTR_PROTOCOL_MIN /* 10: Minimal supported version number */\n\n\tIPSET_ATTR_SETNAME2     = IPSET_ATTR_TYPENAME     /* Setname at rename/swap */\n\tIPSET_ATTR_REVISION_MIN = IPSET_ATTR_PROTOCOL_MIN /* type rev min */\n)\n\n/* CADT specific attributes */\nconst (\n\tIPSET_ATTR_IP          = 1\n\tIPSET_ATTR_IP_FROM     = 1\n\tIPSET_ATTR_IP_TO       = 2\n\tIPSET_ATTR_CIDR        = 3\n\tIPSET_ATTR_PORT        = 4\n\tIPSET_ATTR_PORT_FROM   = 4\n\tIPSET_ATTR_PORT_TO     = 5\n\tIPSET_ATTR_TIMEOUT     = 6\n\tIPSET_ATTR_PROTO       = 7\n\tIPSET_ATTR_CADT_FLAGS  = 8\n\tIPSET_ATTR_CADT_LINENO = IPSET_ATTR_LINENO /* 9 */\n\tIPSET_ATTR_MARK        = 10\n\tIPSET_ATTR_MARKMASK    = 11\n\n\t/* Reserve empty slots */\n\tIPSET_ATTR_CADT_MAX = 16\n\n\t/* Create-only specific attributes */\n\tIPSET_ATTR_GC = 3 + iota\n\tIPSET_ATTR_HASHSIZE\n\tIPSET_ATTR_MAXELEM\n\tIPSET_ATTR_NETMASK\n\tIPSET_ATTR_PROBES\n\tIPSET_ATTR_RESIZE\n\tIPSET_ATTR_SIZE\n\n\t/* Kernel-only */\n\tIPSET_ATTR_ELEMENTS\n\tIPSET_ATTR_REFERENCES\n\tIPSET_ATTR_MEMSIZE\n\n\tSET_ATTR_CREATE_MAX\n)\n\nconst (\n\tIPSET_ATTR_IPADDR_IPV4 = 1\n\tIPSET_ATTR_IPADDR_IPV6 = 2\n)\n\n/* ADT specific attributes */\nconst (\n\tIPSET_ATTR_ETHER = IPSET_ATTR_CADT_MAX + iota + 1\n\tIPSET_ATTR_NAME\n\tIPSET_ATTR_NAMEREF\n\tIPSET_ATTR_IP2\n\tIPSET_ATTR_CIDR2\n\tIPSET_ATTR_IP2_TO\n\tIPSET_ATTR_IFACE\n\tIPSET_ATTR_BYTES\n\tIPSET_ATTR_PACKETS\n\tIPSET_ATTR_COMMENT\n\tIPSET_ATTR_SKBMARK\n\tIPSET_ATTR_SKBPRIO\n\tIPSET_ATTR_SKBQUEUE\n)\n\n/* Flags at CADT attribute level, upper half of cmdattrs */\nconst (\n\tIPSET_FLAG_BIT_BEFORE        = 0\n\tIPSET_FLAG_BEFORE            = (1 << IPSET_FLAG_BIT_BEFORE)\n\tIPSET_FLAG_BIT_PHYSDEV       = 1\n\tIPSET_FLAG_PHYSDEV           = (1 << IPSET_FLAG_BIT_PHYSDEV)\n\tIPSET_FLAG_BIT_NOMATCH       = 2\n\tIPSET_FLAG_NOMATCH           = (1 << IPSET_FLAG_BIT_NOMATCH)\n\tIPSET_FLAG_BIT_WITH_COUNTERS = 3\n\tIPSET_FLAG_WITH_COUNTERS     = (1 << IPSET_FLAG_BIT_WITH_COUNTERS)\n\tIPSET_FLAG_BIT_WITH_COMMENT  = 4\n\tIPSET_FLAG_WITH_COMMENT      = (1 << IPSET_FLAG_BIT_WITH_COMMENT)\n\tIPSET_FLAG_BIT_WITH_FORCEADD = 5\n\tIPSET_FLAG_WITH_FORCEADD     = (1 << IPSET_FLAG_BIT_WITH_FORCEADD)\n\tIPSET_FLAG_BIT_WITH_SKBINFO  = 6\n\tIPSET_FLAG_WITH_SKBINFO      = (1 << IPSET_FLAG_BIT_WITH_SKBINFO)\n\tIPSET_FLAG_CADT_MAX          = 15\n)\n\nconst (\n\tIPSET_ERR_PRIVATE = 4096 + iota\n\tIPSET_ERR_PROTOCOL\n\tIPSET_ERR_FIND_TYPE\n\tIPSET_ERR_MAX_SETS\n\tIPSET_ERR_BUSY\n\tIPSET_ERR_EXIST_SETNAME2\n\tIPSET_ERR_TYPE_MISMATCH\n\tIPSET_ERR_EXIST\n\tIPSET_ERR_INVALID_CIDR\n\tIPSET_ERR_INVALID_NETMASK\n\tIPSET_ERR_INVALID_FAMILY\n\tIPSET_ERR_TIMEOUT\n\tIPSET_ERR_REFERENCED\n\tIPSET_ERR_IPADDR_IPV4\n\tIPSET_ERR_IPADDR_IPV6\n\tIPSET_ERR_COUNTER\n\tIPSET_ERR_COMMENT\n\tIPSET_ERR_INVALID_MARKMASK\n\tIPSET_ERR_SKBINFO\n\n\t/* Type specific error codes */\n\tIPSET_ERR_TYPE_SPECIFIC = 4352\n)\n\ntype IPSetError uintptr\n\nfunc (e IPSetError) Error() string {\n\tswitch int(e) {\n\tcase IPSET_ERR_PRIVATE:\n\t\treturn \"private\"\n\tcase IPSET_ERR_PROTOCOL:\n\t\treturn \"invalid protocol\"\n\tcase IPSET_ERR_FIND_TYPE:\n\t\treturn \"invalid type\"\n\tcase IPSET_ERR_MAX_SETS:\n\t\treturn \"max sets reached\"\n\tcase IPSET_ERR_BUSY:\n\t\treturn \"busy\"\n\tcase IPSET_ERR_EXIST_SETNAME2:\n\t\treturn \"exist_setname2\"\n\tcase IPSET_ERR_TYPE_MISMATCH:\n\t\treturn \"type mismatch\"\n\tcase IPSET_ERR_EXIST:\n\t\treturn \"exist\"\n\tcase IPSET_ERR_INVALID_CIDR:\n\t\treturn \"invalid cidr\"\n\tcase IPSET_ERR_INVALID_NETMASK:\n\t\treturn \"invalid netmask\"\n\tcase IPSET_ERR_INVALID_FAMILY:\n\t\treturn \"invalid family\"\n\tcase IPSET_ERR_TIMEOUT:\n\t\treturn \"timeout\"\n\tcase IPSET_ERR_REFERENCED:\n\t\treturn \"referenced\"\n\tcase IPSET_ERR_IPADDR_IPV4:\n\t\treturn \"invalid ipv4 address\"\n\tcase IPSET_ERR_IPADDR_IPV6:\n\t\treturn \"invalid ipv6 address\"\n\tcase IPSET_ERR_COUNTER:\n\t\treturn \"invalid counter\"\n\tcase IPSET_ERR_COMMENT:\n\t\treturn \"invalid comment\"\n\tcase IPSET_ERR_INVALID_MARKMASK:\n\t\treturn \"invalid markmask\"\n\tcase IPSET_ERR_SKBINFO:\n\t\treturn \"skbinfo\"\n\tdefault:\n\t\treturn \"errno \" + strconv.Itoa(int(e))\n\t}\n}\n\nfunc GetIpsetFlags(cmd int) int {\n\tswitch cmd {\n\tcase IPSET_CMD_CREATE:\n\t\treturn unix.NLM_F_REQUEST | unix.NLM_F_ACK | unix.NLM_F_CREATE\n\tcase IPSET_CMD_DESTROY,\n\t\tIPSET_CMD_FLUSH,\n\t\tIPSET_CMD_RENAME,\n\t\tIPSET_CMD_SWAP,\n\t\tIPSET_CMD_TEST:\n\t\treturn unix.NLM_F_REQUEST | unix.NLM_F_ACK\n\tcase IPSET_CMD_LIST,\n\t\tIPSET_CMD_SAVE:\n\t\treturn unix.NLM_F_REQUEST | unix.NLM_F_ACK | unix.NLM_F_ROOT | unix.NLM_F_MATCH | unix.NLM_F_DUMP\n\tcase IPSET_CMD_ADD,\n\t\tIPSET_CMD_DEL:\n\t\treturn unix.NLM_F_REQUEST | unix.NLM_F_ACK\n\tcase IPSET_CMD_HEADER,\n\t\tIPSET_CMD_TYPE,\n\t\tIPSET_CMD_PROTOCOL:\n\t\treturn unix.NLM_F_REQUEST\n\tdefault:\n\t\treturn 0\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/link_linux.go",
    "content": "package nl\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"unsafe\"\n)\n\nconst (\n\tDEFAULT_CHANGE = 0xFFFFFFFF\n)\n\nconst (\n\tIFLA_INFO_UNSPEC = iota\n\tIFLA_INFO_KIND\n\tIFLA_INFO_DATA\n\tIFLA_INFO_XSTATS\n\tIFLA_INFO_SLAVE_KIND\n\tIFLA_INFO_SLAVE_DATA\n\tIFLA_INFO_MAX = IFLA_INFO_SLAVE_DATA\n)\n\nconst (\n\tIFLA_VLAN_UNSPEC = iota\n\tIFLA_VLAN_ID\n\tIFLA_VLAN_FLAGS\n\tIFLA_VLAN_EGRESS_QOS\n\tIFLA_VLAN_INGRESS_QOS\n\tIFLA_VLAN_PROTOCOL\n\tIFLA_VLAN_MAX = IFLA_VLAN_PROTOCOL\n)\n\nconst (\n\tIFLA_VLAN_QOS_UNSPEC = iota\n\tIFLA_VLAN_QOS_MAPPING\n\tIFLA_VLAN_QOS_MAX = IFLA_VLAN_QOS_MAPPING\n)\n\nconst (\n\tVLAN_FLAG_REORDER_HDR = 1 << iota\n\tVLAN_FLAG_GVRP\n\tVLAN_FLAG_LOOSE_BINDING\n\tVLAN_FLAG_MVRP\n\tVLAN_FLAG_BRIDGE_BINDING\n)\n\nconst (\n\tIFLA_NETKIT_UNSPEC = iota\n\tIFLA_NETKIT_PEER_INFO\n\tIFLA_NETKIT_PRIMARY\n\tIFLA_NETKIT_POLICY\n\tIFLA_NETKIT_PEER_POLICY\n\tIFLA_NETKIT_MODE\n\tIFLA_NETKIT_SCRUB\n\tIFLA_NETKIT_PEER_SCRUB\n\tIFLA_NETKIT_MAX = IFLA_NETKIT_MODE\n)\n\nconst (\n\tVETH_INFO_UNSPEC = iota\n\tVETH_INFO_PEER\n\tVETH_INFO_MAX = VETH_INFO_PEER\n)\n\nconst (\n\tIFLA_VXLAN_UNSPEC = iota\n\tIFLA_VXLAN_ID\n\tIFLA_VXLAN_GROUP\n\tIFLA_VXLAN_LINK\n\tIFLA_VXLAN_LOCAL\n\tIFLA_VXLAN_TTL\n\tIFLA_VXLAN_TOS\n\tIFLA_VXLAN_LEARNING\n\tIFLA_VXLAN_AGEING\n\tIFLA_VXLAN_LIMIT\n\tIFLA_VXLAN_PORT_RANGE\n\tIFLA_VXLAN_PROXY\n\tIFLA_VXLAN_RSC\n\tIFLA_VXLAN_L2MISS\n\tIFLA_VXLAN_L3MISS\n\tIFLA_VXLAN_PORT\n\tIFLA_VXLAN_GROUP6\n\tIFLA_VXLAN_LOCAL6\n\tIFLA_VXLAN_UDP_CSUM\n\tIFLA_VXLAN_UDP_ZERO_CSUM6_TX\n\tIFLA_VXLAN_UDP_ZERO_CSUM6_RX\n\tIFLA_VXLAN_REMCSUM_TX\n\tIFLA_VXLAN_REMCSUM_RX\n\tIFLA_VXLAN_GBP\n\tIFLA_VXLAN_REMCSUM_NOPARTIAL\n\tIFLA_VXLAN_FLOWBASED\n\tIFLA_VXLAN_MAX = IFLA_VXLAN_FLOWBASED\n)\n\nconst (\n\tBRIDGE_MODE_UNSPEC = iota\n\tBRIDGE_MODE_HAIRPIN\n)\n\nconst (\n\tIFLA_BRPORT_UNSPEC = iota\n\tIFLA_BRPORT_STATE\n\tIFLA_BRPORT_PRIORITY\n\tIFLA_BRPORT_COST\n\tIFLA_BRPORT_MODE\n\tIFLA_BRPORT_GUARD\n\tIFLA_BRPORT_PROTECT\n\tIFLA_BRPORT_FAST_LEAVE\n\tIFLA_BRPORT_LEARNING\n\tIFLA_BRPORT_UNICAST_FLOOD\n\tIFLA_BRPORT_PROXYARP\n\tIFLA_BRPORT_LEARNING_SYNC\n\tIFLA_BRPORT_PROXYARP_WIFI\n\tIFLA_BRPORT_ROOT_ID\n\tIFLA_BRPORT_BRIDGE_ID\n\tIFLA_BRPORT_DESIGNATED_PORT\n\tIFLA_BRPORT_DESIGNATED_COST\n\tIFLA_BRPORT_ID\n\tIFLA_BRPORT_NO\n\tIFLA_BRPORT_TOPOLOGY_CHANGE_ACK\n\tIFLA_BRPORT_CONFIG_PENDING\n\tIFLA_BRPORT_MESSAGE_AGE_TIMER\n\tIFLA_BRPORT_FORWARD_DELAY_TIMER\n\tIFLA_BRPORT_HOLD_TIMER\n\tIFLA_BRPORT_FLUSH\n\tIFLA_BRPORT_MULTICAST_ROUTER\n\tIFLA_BRPORT_PAD\n\tIFLA_BRPORT_MCAST_FLOOD\n\tIFLA_BRPORT_MCAST_TO_UCAST\n\tIFLA_BRPORT_VLAN_TUNNEL\n\tIFLA_BRPORT_BCAST_FLOOD\n\tIFLA_BRPORT_GROUP_FWD_MASK\n\tIFLA_BRPORT_NEIGH_SUPPRESS\n\tIFLA_BRPORT_ISOLATED\n\tIFLA_BRPORT_BACKUP_PORT\n\tIFLA_BRPORT_MRP_RING_OPEN\n\tIFLA_BRPORT_MRP_IN_OPEN\n\tIFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT\n\tIFLA_BRPORT_MCAST_EHT_HOSTS_CNT\n\tIFLA_BRPORT_LOCKED\n\tIFLA_BRPORT_MAB\n\tIFLA_BRPORT_MCAST_N_GROUPS\n\tIFLA_BRPORT_MCAST_MAX_GROUPS\n\tIFLA_BRPORT_MAX = IFLA_BRPORT_MCAST_MAX_GROUPS\n)\n\nconst (\n\tIFLA_IPVLAN_UNSPEC = iota\n\tIFLA_IPVLAN_MODE\n\tIFLA_IPVLAN_FLAG\n\tIFLA_IPVLAN_MAX = IFLA_IPVLAN_FLAG\n)\n\nconst (\n\tIFLA_MACVLAN_UNSPEC = iota\n\tIFLA_MACVLAN_MODE\n\tIFLA_MACVLAN_FLAGS\n\tIFLA_MACVLAN_MACADDR_MODE\n\tIFLA_MACVLAN_MACADDR\n\tIFLA_MACVLAN_MACADDR_DATA\n\tIFLA_MACVLAN_MACADDR_COUNT\n\tIFLA_MACVLAN_BC_QUEUE_LEN\n\tIFLA_MACVLAN_BC_QUEUE_LEN_USED\n\tIFLA_MACVLAN_MAX = IFLA_MACVLAN_BC_QUEUE_LEN_USED\n)\n\nconst (\n\tMACVLAN_MODE_PRIVATE  = 1\n\tMACVLAN_MODE_VEPA     = 2\n\tMACVLAN_MODE_BRIDGE   = 4\n\tMACVLAN_MODE_PASSTHRU = 8\n\tMACVLAN_MODE_SOURCE   = 16\n)\n\nconst (\n\tMACVLAN_MACADDR_ADD = iota\n\tMACVLAN_MACADDR_DEL\n\tMACVLAN_MACADDR_FLUSH\n\tMACVLAN_MACADDR_SET\n)\n\nconst (\n\tIFLA_BOND_UNSPEC = iota\n\tIFLA_BOND_MODE\n\tIFLA_BOND_ACTIVE_SLAVE\n\tIFLA_BOND_MIIMON\n\tIFLA_BOND_UPDELAY\n\tIFLA_BOND_DOWNDELAY\n\tIFLA_BOND_USE_CARRIER\n\tIFLA_BOND_ARP_INTERVAL\n\tIFLA_BOND_ARP_IP_TARGET\n\tIFLA_BOND_ARP_VALIDATE\n\tIFLA_BOND_ARP_ALL_TARGETS\n\tIFLA_BOND_PRIMARY\n\tIFLA_BOND_PRIMARY_RESELECT\n\tIFLA_BOND_FAIL_OVER_MAC\n\tIFLA_BOND_XMIT_HASH_POLICY\n\tIFLA_BOND_RESEND_IGMP\n\tIFLA_BOND_NUM_PEER_NOTIF\n\tIFLA_BOND_ALL_SLAVES_ACTIVE\n\tIFLA_BOND_MIN_LINKS\n\tIFLA_BOND_LP_INTERVAL\n\tIFLA_BOND_PACKETS_PER_SLAVE\n\tIFLA_BOND_AD_LACP_RATE\n\tIFLA_BOND_AD_SELECT\n\tIFLA_BOND_AD_INFO\n\tIFLA_BOND_AD_ACTOR_SYS_PRIO\n\tIFLA_BOND_AD_USER_PORT_KEY\n\tIFLA_BOND_AD_ACTOR_SYSTEM\n\tIFLA_BOND_TLB_DYNAMIC_LB\n)\n\nconst (\n\tIFLA_BOND_AD_INFO_UNSPEC = iota\n\tIFLA_BOND_AD_INFO_AGGREGATOR\n\tIFLA_BOND_AD_INFO_NUM_PORTS\n\tIFLA_BOND_AD_INFO_ACTOR_KEY\n\tIFLA_BOND_AD_INFO_PARTNER_KEY\n\tIFLA_BOND_AD_INFO_PARTNER_MAC\n)\n\nconst (\n\tIFLA_BOND_SLAVE_UNSPEC = iota\n\tIFLA_BOND_SLAVE_STATE\n\tIFLA_BOND_SLAVE_MII_STATUS\n\tIFLA_BOND_SLAVE_LINK_FAILURE_COUNT\n\tIFLA_BOND_SLAVE_PERM_HWADDR\n\tIFLA_BOND_SLAVE_QUEUE_ID\n\tIFLA_BOND_SLAVE_AD_AGGREGATOR_ID\n\tIFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE\n\tIFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE\n)\n\nconst (\n\tIFLA_GENEVE_UNSPEC = iota\n\tIFLA_GENEVE_ID     // vni\n\tIFLA_GENEVE_REMOTE\n\tIFLA_GENEVE_TTL\n\tIFLA_GENEVE_TOS\n\tIFLA_GENEVE_PORT // destination port\n\tIFLA_GENEVE_COLLECT_METADATA\n\tIFLA_GENEVE_REMOTE6\n\tIFLA_GENEVE_UDP_CSUM\n\tIFLA_GENEVE_UDP_ZERO_CSUM6_TX\n\tIFLA_GENEVE_UDP_ZERO_CSUM6_RX\n\tIFLA_GENEVE_LABEL\n\tIFLA_GENEVE_TTL_INHERIT\n\tIFLA_GENEVE_DF\n\tIFLA_GENEVE_INNER_PROTO_INHERIT\n\tIFLA_GENEVE_PORT_RANGE\n\tIFLA_GENEVE_MAX = IFLA_GENEVE_INNER_PROTO_INHERIT\n)\n\nconst (\n\tIFLA_GRE_UNSPEC = iota\n\tIFLA_GRE_LINK\n\tIFLA_GRE_IFLAGS\n\tIFLA_GRE_OFLAGS\n\tIFLA_GRE_IKEY\n\tIFLA_GRE_OKEY\n\tIFLA_GRE_LOCAL\n\tIFLA_GRE_REMOTE\n\tIFLA_GRE_TTL\n\tIFLA_GRE_TOS\n\tIFLA_GRE_PMTUDISC\n\tIFLA_GRE_ENCAP_LIMIT\n\tIFLA_GRE_FLOWINFO\n\tIFLA_GRE_FLAGS\n\tIFLA_GRE_ENCAP_TYPE\n\tIFLA_GRE_ENCAP_FLAGS\n\tIFLA_GRE_ENCAP_SPORT\n\tIFLA_GRE_ENCAP_DPORT\n\tIFLA_GRE_COLLECT_METADATA\n\tIFLA_GRE_MAX = IFLA_GRE_COLLECT_METADATA\n)\n\nconst (\n\tGRE_CSUM    = 0x8000\n\tGRE_ROUTING = 0x4000\n\tGRE_KEY     = 0x2000\n\tGRE_SEQ     = 0x1000\n\tGRE_STRICT  = 0x0800\n\tGRE_REC     = 0x0700\n\tGRE_FLAGS   = 0x00F8\n\tGRE_VERSION = 0x0007\n)\n\nconst (\n\tIFLA_VF_INFO_UNSPEC = iota\n\tIFLA_VF_INFO\n\tIFLA_VF_INFO_MAX = IFLA_VF_INFO\n)\n\nconst (\n\tIFLA_VF_UNSPEC = iota\n\tIFLA_VF_MAC    /* Hardware queue specific attributes */\n\tIFLA_VF_VLAN\n\tIFLA_VF_TX_RATE      /* Max TX Bandwidth Allocation */\n\tIFLA_VF_SPOOFCHK     /* Spoof Checking on/off switch */\n\tIFLA_VF_LINK_STATE   /* link state enable/disable/auto switch */\n\tIFLA_VF_RATE         /* Min and Max TX Bandwidth Allocation */\n\tIFLA_VF_RSS_QUERY_EN /* RSS Redirection Table and Hash Key query\n\t * on/off switch\n\t */\n\tIFLA_VF_STATS        /* network device statistics */\n\tIFLA_VF_TRUST        /* Trust state of VF */\n\tIFLA_VF_IB_NODE_GUID /* VF Infiniband node GUID */\n\tIFLA_VF_IB_PORT_GUID /* VF Infiniband port GUID */\n\tIFLA_VF_VLAN_LIST    /* nested list of vlans, option for QinQ */\n\n\tIFLA_VF_MAX = IFLA_VF_IB_PORT_GUID\n)\n\nconst (\n\tIFLA_VF_VLAN_INFO_UNSPEC = iota\n\tIFLA_VF_VLAN_INFO        /* VLAN ID, QoS and VLAN protocol */\n\t__IFLA_VF_VLAN_INFO_MAX\n)\n\nconst (\n\tIFLA_VF_LINK_STATE_AUTO    = iota /* link state of the uplink */\n\tIFLA_VF_LINK_STATE_ENABLE         /* link always up */\n\tIFLA_VF_LINK_STATE_DISABLE        /* link always down */\n\tIFLA_VF_LINK_STATE_MAX     = IFLA_VF_LINK_STATE_DISABLE\n)\n\nconst (\n\tIFLA_VF_STATS_RX_PACKETS = iota\n\tIFLA_VF_STATS_TX_PACKETS\n\tIFLA_VF_STATS_RX_BYTES\n\tIFLA_VF_STATS_TX_BYTES\n\tIFLA_VF_STATS_BROADCAST\n\tIFLA_VF_STATS_MULTICAST\n\tIFLA_VF_STATS_RX_DROPPED\n\tIFLA_VF_STATS_TX_DROPPED\n\tIFLA_VF_STATS_MAX = IFLA_VF_STATS_TX_DROPPED\n)\n\nconst (\n\tSizeofVfMac        = 0x24\n\tSizeofVfVlan       = 0x0c\n\tSizeofVfVlanInfo   = 0x10\n\tSizeofVfTxRate     = 0x08\n\tSizeofVfRate       = 0x0c\n\tSizeofVfSpoofchk   = 0x08\n\tSizeofVfLinkState  = 0x08\n\tSizeofVfRssQueryEn = 0x08\n\tSizeofVfTrust      = 0x08\n\tSizeofVfGUID       = 0x10\n)\n\n// struct ifla_vf_mac {\n//   __u32 vf;\n//   __u8 mac[32]; /* MAX_ADDR_LEN */\n// };\n\ntype VfMac struct {\n\tVf  uint32\n\tMac [32]byte\n}\n\nfunc (msg *VfMac) Len() int {\n\treturn SizeofVfMac\n}\n\nfunc DeserializeVfMac(b []byte) *VfMac {\n\treturn (*VfMac)(unsafe.Pointer(&b[0:SizeofVfMac][0]))\n}\n\nfunc (msg *VfMac) Serialize() []byte {\n\treturn (*(*[SizeofVfMac]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct ifla_vf_vlan {\n//   __u32 vf;\n//   __u32 vlan; /* 0 - 4095, 0 disables VLAN filter */\n//   __u32 qos;\n// };\n\ntype VfVlan struct {\n\tVf   uint32\n\tVlan uint32\n\tQos  uint32\n}\n\nfunc (msg *VfVlan) Len() int {\n\treturn SizeofVfVlan\n}\n\nfunc DeserializeVfVlan(b []byte) *VfVlan {\n\treturn (*VfVlan)(unsafe.Pointer(&b[0:SizeofVfVlan][0]))\n}\n\nfunc (msg *VfVlan) Serialize() []byte {\n\treturn (*(*[SizeofVfVlan]byte)(unsafe.Pointer(msg)))[:]\n}\n\nfunc DeserializeVfVlanList(b []byte) ([]*VfVlanInfo, error) {\n\tvar vfVlanInfoList []*VfVlanInfo\n\tattrs, err := ParseRouteAttr(b)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, element := range attrs {\n\t\tif element.Attr.Type == IFLA_VF_VLAN_INFO {\n\t\t\tvfVlanInfoList = append(vfVlanInfoList, DeserializeVfVlanInfo(element.Value))\n\t\t}\n\t}\n\n\tif len(vfVlanInfoList) == 0 {\n\t\treturn nil, fmt.Errorf(\"VF vlan list is defined but no vf vlan info elements were found\")\n\t}\n\n\treturn vfVlanInfoList, nil\n}\n\n// struct ifla_vf_vlan_info {\n//   __u32 vf;\n//   __u32 vlan; /* 0 - 4095, 0 disables VLAN filter */\n//   __u32 qos;\n//   __be16 vlan_proto; /* VLAN protocol either 802.1Q or 802.1ad */\n// };\n\ntype VfVlanInfo struct {\n\tVfVlan\n\tVlanProto uint16\n}\n\nfunc DeserializeVfVlanInfo(b []byte) *VfVlanInfo {\n\treturn &VfVlanInfo{\n\t\t*(*VfVlan)(unsafe.Pointer(&b[0:SizeofVfVlan][0])),\n\t\tbinary.BigEndian.Uint16(b[SizeofVfVlan:SizeofVfVlanInfo]),\n\t}\n}\n\nfunc (msg *VfVlanInfo) Serialize() []byte {\n\treturn (*(*[SizeofVfVlanInfo]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct ifla_vf_tx_rate {\n//   __u32 vf;\n//   __u32 rate; /* Max TX bandwidth in Mbps, 0 disables throttling */\n// };\n\ntype VfTxRate struct {\n\tVf   uint32\n\tRate uint32\n}\n\nfunc (msg *VfTxRate) Len() int {\n\treturn SizeofVfTxRate\n}\n\nfunc DeserializeVfTxRate(b []byte) *VfTxRate {\n\treturn (*VfTxRate)(unsafe.Pointer(&b[0:SizeofVfTxRate][0]))\n}\n\nfunc (msg *VfTxRate) Serialize() []byte {\n\treturn (*(*[SizeofVfTxRate]byte)(unsafe.Pointer(msg)))[:]\n}\n\n//struct ifla_vf_stats {\n//\t__u64 rx_packets;\n//\t__u64 tx_packets;\n//\t__u64 rx_bytes;\n//\t__u64 tx_bytes;\n//\t__u64 broadcast;\n//\t__u64 multicast;\n//};\n\ntype VfStats struct {\n\tRxPackets uint64\n\tTxPackets uint64\n\tRxBytes   uint64\n\tTxBytes   uint64\n\tMulticast uint64\n\tBroadcast uint64\n\tRxDropped uint64\n\tTxDropped uint64\n}\n\nfunc DeserializeVfStats(b []byte) VfStats {\n\tvar vfstat VfStats\n\tstats, err := ParseRouteAttr(b)\n\tif err != nil {\n\t\treturn vfstat\n\t}\n\tvar valueVar uint64\n\tfor _, stat := range stats {\n\t\tif err := binary.Read(bytes.NewBuffer(stat.Value), NativeEndian(), &valueVar); err != nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch stat.Attr.Type {\n\t\tcase IFLA_VF_STATS_RX_PACKETS:\n\t\t\tvfstat.RxPackets = valueVar\n\t\tcase IFLA_VF_STATS_TX_PACKETS:\n\t\t\tvfstat.TxPackets = valueVar\n\t\tcase IFLA_VF_STATS_RX_BYTES:\n\t\t\tvfstat.RxBytes = valueVar\n\t\tcase IFLA_VF_STATS_TX_BYTES:\n\t\t\tvfstat.TxBytes = valueVar\n\t\tcase IFLA_VF_STATS_MULTICAST:\n\t\t\tvfstat.Multicast = valueVar\n\t\tcase IFLA_VF_STATS_BROADCAST:\n\t\t\tvfstat.Broadcast = valueVar\n\t\tcase IFLA_VF_STATS_RX_DROPPED:\n\t\t\tvfstat.RxDropped = valueVar\n\t\tcase IFLA_VF_STATS_TX_DROPPED:\n\t\t\tvfstat.TxDropped = valueVar\n\t\t}\n\t}\n\treturn vfstat\n}\n\n// struct ifla_vf_rate {\n//   __u32 vf;\n//   __u32 min_tx_rate; /* Min Bandwidth in Mbps */\n//   __u32 max_tx_rate; /* Max Bandwidth in Mbps */\n// };\n\ntype VfRate struct {\n\tVf        uint32\n\tMinTxRate uint32\n\tMaxTxRate uint32\n}\n\nfunc (msg *VfRate) Len() int {\n\treturn SizeofVfRate\n}\n\nfunc DeserializeVfRate(b []byte) *VfRate {\n\treturn (*VfRate)(unsafe.Pointer(&b[0:SizeofVfRate][0]))\n}\n\nfunc (msg *VfRate) Serialize() []byte {\n\treturn (*(*[SizeofVfRate]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct ifla_vf_spoofchk {\n//   __u32 vf;\n//   __u32 setting;\n// };\n\ntype VfSpoofchk struct {\n\tVf      uint32\n\tSetting uint32\n}\n\nfunc (msg *VfSpoofchk) Len() int {\n\treturn SizeofVfSpoofchk\n}\n\nfunc DeserializeVfSpoofchk(b []byte) *VfSpoofchk {\n\treturn (*VfSpoofchk)(unsafe.Pointer(&b[0:SizeofVfSpoofchk][0]))\n}\n\nfunc (msg *VfSpoofchk) Serialize() []byte {\n\treturn (*(*[SizeofVfSpoofchk]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct ifla_vf_link_state {\n//   __u32 vf;\n//   __u32 link_state;\n// };\n\ntype VfLinkState struct {\n\tVf        uint32\n\tLinkState uint32\n}\n\nfunc (msg *VfLinkState) Len() int {\n\treturn SizeofVfLinkState\n}\n\nfunc DeserializeVfLinkState(b []byte) *VfLinkState {\n\treturn (*VfLinkState)(unsafe.Pointer(&b[0:SizeofVfLinkState][0]))\n}\n\nfunc (msg *VfLinkState) Serialize() []byte {\n\treturn (*(*[SizeofVfLinkState]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct ifla_vf_rss_query_en {\n//   __u32 vf;\n//   __u32 setting;\n// };\n\ntype VfRssQueryEn struct {\n\tVf      uint32\n\tSetting uint32\n}\n\nfunc (msg *VfRssQueryEn) Len() int {\n\treturn SizeofVfRssQueryEn\n}\n\nfunc DeserializeVfRssQueryEn(b []byte) *VfRssQueryEn {\n\treturn (*VfRssQueryEn)(unsafe.Pointer(&b[0:SizeofVfRssQueryEn][0]))\n}\n\nfunc (msg *VfRssQueryEn) Serialize() []byte {\n\treturn (*(*[SizeofVfRssQueryEn]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct ifla_vf_trust {\n//   __u32 vf;\n//   __u32 setting;\n// };\n\ntype VfTrust struct {\n\tVf      uint32\n\tSetting uint32\n}\n\nfunc (msg *VfTrust) Len() int {\n\treturn SizeofVfTrust\n}\n\nfunc DeserializeVfTrust(b []byte) *VfTrust {\n\treturn (*VfTrust)(unsafe.Pointer(&b[0:SizeofVfTrust][0]))\n}\n\nfunc (msg *VfTrust) Serialize() []byte {\n\treturn (*(*[SizeofVfTrust]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct ifla_vf_guid {\n//   __u32 vf;\n//   __u32 rsvd;\n//   __u64 guid;\n// };\n\ntype VfGUID struct {\n\tVf   uint32\n\tRsvd uint32\n\tGUID uint64\n}\n\nfunc (msg *VfGUID) Len() int {\n\treturn SizeofVfGUID\n}\n\nfunc DeserializeVfGUID(b []byte) *VfGUID {\n\treturn (*VfGUID)(unsafe.Pointer(&b[0:SizeofVfGUID][0]))\n}\n\nfunc (msg *VfGUID) Serialize() []byte {\n\treturn (*(*[SizeofVfGUID]byte)(unsafe.Pointer(msg)))[:]\n}\n\nconst (\n\tXDP_FLAGS_UPDATE_IF_NOEXIST = 1 << iota\n\tXDP_FLAGS_SKB_MODE\n\tXDP_FLAGS_DRV_MODE\n\tXDP_FLAGS_MASK = XDP_FLAGS_UPDATE_IF_NOEXIST | XDP_FLAGS_SKB_MODE | XDP_FLAGS_DRV_MODE\n)\n\nconst (\n\tIFLA_XDP_UNSPEC   = iota\n\tIFLA_XDP_FD       /* fd of xdp program to attach, or -1 to remove */\n\tIFLA_XDP_ATTACHED /* read-only bool indicating if prog is attached */\n\tIFLA_XDP_FLAGS    /* xdp prog related flags */\n\tIFLA_XDP_PROG_ID  /* xdp prog id */\n\tIFLA_XDP_MAX      = IFLA_XDP_PROG_ID\n)\n\n// XDP program attach mode (used as dump value for IFLA_XDP_ATTACHED)\nconst (\n\tXDP_ATTACHED_NONE = iota\n\tXDP_ATTACHED_DRV\n\tXDP_ATTACHED_SKB\n\tXDP_ATTACHED_HW\n)\n\nconst (\n\tIFLA_IPTUN_UNSPEC = iota\n\tIFLA_IPTUN_LINK\n\tIFLA_IPTUN_LOCAL\n\tIFLA_IPTUN_REMOTE\n\tIFLA_IPTUN_TTL\n\tIFLA_IPTUN_TOS\n\tIFLA_IPTUN_ENCAP_LIMIT\n\tIFLA_IPTUN_FLOWINFO\n\tIFLA_IPTUN_FLAGS\n\tIFLA_IPTUN_PROTO\n\tIFLA_IPTUN_PMTUDISC\n\tIFLA_IPTUN_6RD_PREFIX\n\tIFLA_IPTUN_6RD_RELAY_PREFIX\n\tIFLA_IPTUN_6RD_PREFIXLEN\n\tIFLA_IPTUN_6RD_RELAY_PREFIXLEN\n\tIFLA_IPTUN_ENCAP_TYPE\n\tIFLA_IPTUN_ENCAP_FLAGS\n\tIFLA_IPTUN_ENCAP_SPORT\n\tIFLA_IPTUN_ENCAP_DPORT\n\tIFLA_IPTUN_COLLECT_METADATA\n\tIFLA_IPTUN_MAX = IFLA_IPTUN_COLLECT_METADATA\n)\n\nconst (\n\tIFLA_VTI_UNSPEC = iota\n\tIFLA_VTI_LINK\n\tIFLA_VTI_IKEY\n\tIFLA_VTI_OKEY\n\tIFLA_VTI_LOCAL\n\tIFLA_VTI_REMOTE\n\tIFLA_VTI_MAX = IFLA_VTI_REMOTE\n)\n\nconst (\n\tIFLA_VRF_UNSPEC = iota\n\tIFLA_VRF_TABLE\n)\n\nconst (\n\tIFLA_BR_UNSPEC = iota\n\tIFLA_BR_FORWARD_DELAY\n\tIFLA_BR_HELLO_TIME\n\tIFLA_BR_MAX_AGE\n\tIFLA_BR_AGEING_TIME\n\tIFLA_BR_STP_STATE\n\tIFLA_BR_PRIORITY\n\tIFLA_BR_VLAN_FILTERING\n\tIFLA_BR_VLAN_PROTOCOL\n\tIFLA_BR_GROUP_FWD_MASK\n\tIFLA_BR_ROOT_ID\n\tIFLA_BR_BRIDGE_ID\n\tIFLA_BR_ROOT_PORT\n\tIFLA_BR_ROOT_PATH_COST\n\tIFLA_BR_TOPOLOGY_CHANGE\n\tIFLA_BR_TOPOLOGY_CHANGE_DETECTED\n\tIFLA_BR_HELLO_TIMER\n\tIFLA_BR_TCN_TIMER\n\tIFLA_BR_TOPOLOGY_CHANGE_TIMER\n\tIFLA_BR_GC_TIMER\n\tIFLA_BR_GROUP_ADDR\n\tIFLA_BR_FDB_FLUSH\n\tIFLA_BR_MCAST_ROUTER\n\tIFLA_BR_MCAST_SNOOPING\n\tIFLA_BR_MCAST_QUERY_USE_IFADDR\n\tIFLA_BR_MCAST_QUERIER\n\tIFLA_BR_MCAST_HASH_ELASTICITY\n\tIFLA_BR_MCAST_HASH_MAX\n\tIFLA_BR_MCAST_LAST_MEMBER_CNT\n\tIFLA_BR_MCAST_STARTUP_QUERY_CNT\n\tIFLA_BR_MCAST_LAST_MEMBER_INTVL\n\tIFLA_BR_MCAST_MEMBERSHIP_INTVL\n\tIFLA_BR_MCAST_QUERIER_INTVL\n\tIFLA_BR_MCAST_QUERY_INTVL\n\tIFLA_BR_MCAST_QUERY_RESPONSE_INTVL\n\tIFLA_BR_MCAST_STARTUP_QUERY_INTVL\n\tIFLA_BR_NF_CALL_IPTABLES\n\tIFLA_BR_NF_CALL_IP6TABLES\n\tIFLA_BR_NF_CALL_ARPTABLES\n\tIFLA_BR_VLAN_DEFAULT_PVID\n\tIFLA_BR_PAD\n\tIFLA_BR_VLAN_STATS_ENABLED\n\tIFLA_BR_MCAST_STATS_ENABLED\n\tIFLA_BR_MCAST_IGMP_VERSION\n\tIFLA_BR_MCAST_MLD_VERSION\n\tIFLA_BR_MAX = IFLA_BR_MCAST_MLD_VERSION\n)\n\nconst (\n\tIFLA_GTP_UNSPEC = iota\n\tIFLA_GTP_FD0\n\tIFLA_GTP_FD1\n\tIFLA_GTP_PDP_HASHSIZE\n\tIFLA_GTP_ROLE\n)\n\nconst (\n\tGTP_ROLE_GGSN = iota\n\tGTP_ROLE_SGSN\n)\n\nconst (\n\tIFLA_XFRM_UNSPEC = iota\n\tIFLA_XFRM_LINK\n\tIFLA_XFRM_IF_ID\n\n\tIFLA_XFRM_MAX = iota - 1\n)\n\nconst (\n\tIFLA_TUN_UNSPEC = iota\n\tIFLA_TUN_OWNER\n\tIFLA_TUN_GROUP\n\tIFLA_TUN_TYPE\n\tIFLA_TUN_PI\n\tIFLA_TUN_VNET_HDR\n\tIFLA_TUN_PERSIST\n\tIFLA_TUN_MULTI_QUEUE\n\tIFLA_TUN_NUM_QUEUES\n\tIFLA_TUN_NUM_DISABLED_QUEUES\n\tIFLA_TUN_MAX = IFLA_TUN_NUM_DISABLED_QUEUES\n)\n\nconst (\n\tIFLA_IPOIB_UNSPEC = iota\n\tIFLA_IPOIB_PKEY\n\tIFLA_IPOIB_MODE\n\tIFLA_IPOIB_UMCAST\n\tIFLA_IPOIB_MAX = IFLA_IPOIB_UMCAST\n)\n\nconst (\n\tIFLA_CAN_UNSPEC = iota\n\tIFLA_CAN_BITTIMING\n\tIFLA_CAN_BITTIMING_CONST\n\tIFLA_CAN_CLOCK\n\tIFLA_CAN_STATE\n\tIFLA_CAN_CTRLMODE\n\tIFLA_CAN_RESTART_MS\n\tIFLA_CAN_RESTART\n\tIFLA_CAN_BERR_COUNTER\n\tIFLA_CAN_DATA_BITTIMING\n\tIFLA_CAN_DATA_BITTIMING_CONST\n\tIFLA_CAN_TERMINATION\n\tIFLA_CAN_TERMINATION_CONST\n\tIFLA_CAN_BITRATE_CONST\n\tIFLA_CAN_DATA_BITRATE_CONST\n\tIFLA_CAN_BITRATE_MAX\n\tIFLA_CAN_MAX = IFLA_CAN_BITRATE_MAX\n)\n\nconst (\n\tIFLA_BAREUDP_UNSPEC = iota\n\tIFLA_BAREUDP_PORT\n\tIFLA_BAREUDP_ETHERTYPE\n\tIFLA_BAREUDP_SRCPORT_MIN\n\tIFLA_BAREUDP_MULTIPROTO_MODE\n\tIFLA_BAREUDP_MAX = IFLA_BAREUDP_MULTIPROTO_MODE\n)\n\nconst (\n\tIN6_ADDR_GEN_MODE_EUI64 = iota\n\tIN6_ADDR_GEN_MODE_NONE\n\tIN6_ADDR_GEN_MODE_STABLE_PRIVACY\n\tIN6_ADDR_GEN_MODE_RANDOM\n)\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/lwt_linux.go",
    "content": "package nl\n\nconst (\n\tLWT_BPF_PROG_UNSPEC = iota\n\tLWT_BPF_PROG_FD\n\tLWT_BPF_PROG_NAME\n\t__LWT_BPF_PROG_MAX\n)\n\nconst (\n\tLWT_BPF_PROG_MAX = __LWT_BPF_PROG_MAX - 1\n)\n\nconst (\n\tLWT_BPF_UNSPEC = iota\n\tLWT_BPF_IN\n\tLWT_BPF_OUT\n\tLWT_BPF_XMIT\n\tLWT_BPF_XMIT_HEADROOM\n\t__LWT_BPF_MAX\n)\n\nconst (\n\tLWT_BPF_MAX = __LWT_BPF_MAX - 1\n)\n\nconst (\n\tLWT_BPF_MAX_HEADROOM = 256\n)\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/mpls_linux.go",
    "content": "package nl\n\nimport \"encoding/binary\"\n\nconst (\n\tMPLS_LS_LABEL_SHIFT = 12\n\tMPLS_LS_S_SHIFT     = 8\n)\n\nfunc EncodeMPLSStack(labels ...int) []byte {\n\tb := make([]byte, 4*len(labels))\n\tfor idx, label := range labels {\n\t\tl := label << MPLS_LS_LABEL_SHIFT\n\t\tif idx == len(labels)-1 {\n\t\t\tl |= 1 << MPLS_LS_S_SHIFT\n\t\t}\n\t\tbinary.BigEndian.PutUint32(b[idx*4:], uint32(l))\n\t}\n\treturn b\n}\n\nfunc DecodeMPLSStack(buf []byte) []int {\n\tif len(buf)%4 != 0 {\n\t\treturn nil\n\t}\n\tstack := make([]int, 0, len(buf)/4)\n\tfor len(buf) > 0 {\n\t\tl := binary.BigEndian.Uint32(buf[:4])\n\t\tbuf = buf[4:]\n\t\tstack = append(stack, int(l)>>MPLS_LS_LABEL_SHIFT)\n\t\tif (l>>MPLS_LS_S_SHIFT)&1 > 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn stack\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/nl_linux.go",
    "content": "// Package nl has low level primitives for making Netlink calls.\npackage nl\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"runtime\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/vishvananda/netns\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\t// Family type definitions\n\tFAMILY_ALL  = unix.AF_UNSPEC\n\tFAMILY_V4   = unix.AF_INET\n\tFAMILY_V6   = unix.AF_INET6\n\tFAMILY_MPLS = unix.AF_MPLS\n\t// Arbitrary set value (greater than default 4k) to allow receiving\n\t// from kernel more verbose messages e.g. for statistics,\n\t// tc rules or filters, or other more memory requiring data.\n\tRECEIVE_BUFFER_SIZE = 65536\n\t// Kernel netlink pid\n\tPidKernel     uint32 = 0\n\tSizeofCnMsgOp        = 0x18\n)\n\n// SupportedNlFamilies contains the list of netlink families this netlink package supports\nvar SupportedNlFamilies = []int{unix.NETLINK_ROUTE, unix.NETLINK_XFRM, unix.NETLINK_NETFILTER}\n\nvar nextSeqNr uint32\n\n// Default netlink socket timeout, 60s\nvar SocketTimeoutTv = unix.Timeval{Sec: 60, Usec: 0}\n\n// ErrorMessageReporting is the default error message reporting configuration for the new netlink sockets\nvar EnableErrorMessageReporting bool = false\n\n// ErrDumpInterrupted is an instance of errDumpInterrupted, used to report that\n// a netlink function has set the NLM_F_DUMP_INTR flag in a response message,\n// indicating that the results may be incomplete or inconsistent.\nvar ErrDumpInterrupted = errDumpInterrupted{}\n\n// errDumpInterrupted is an error type, used to report that NLM_F_DUMP_INTR was\n// set in a netlink response.\ntype errDumpInterrupted struct{}\n\nfunc (errDumpInterrupted) Error() string {\n\treturn \"results may be incomplete or inconsistent\"\n}\n\n// Before errDumpInterrupted was introduced, EINTR was returned when a netlink\n// response had NLM_F_DUMP_INTR. Retain backward compatibility with code that\n// may be checking for EINTR using Is.\nfunc (e errDumpInterrupted) Is(target error) bool {\n\treturn target == unix.EINTR\n}\n\n// GetIPFamily returns the family type of a net.IP.\nfunc GetIPFamily(ip net.IP) int {\n\tif len(ip) <= net.IPv4len {\n\t\treturn FAMILY_V4\n\t}\n\tif ip.To4() != nil {\n\t\treturn FAMILY_V4\n\t}\n\treturn FAMILY_V6\n}\n\nvar nativeEndian binary.ByteOrder\n\n// NativeEndian gets native endianness for the system\nfunc NativeEndian() binary.ByteOrder {\n\tif nativeEndian == nil {\n\t\tvar x uint32 = 0x01020304\n\t\tif *(*byte)(unsafe.Pointer(&x)) == 0x01 {\n\t\t\tnativeEndian = binary.BigEndian\n\t\t} else {\n\t\t\tnativeEndian = binary.LittleEndian\n\t\t}\n\t}\n\treturn nativeEndian\n}\n\n// Byte swap a 16 bit value if we aren't big endian\nfunc Swap16(i uint16) uint16 {\n\tif NativeEndian() == binary.BigEndian {\n\t\treturn i\n\t}\n\treturn (i&0xff00)>>8 | (i&0xff)<<8\n}\n\n// Byte swap a 32 bit value if aren't big endian\nfunc Swap32(i uint32) uint32 {\n\tif NativeEndian() == binary.BigEndian {\n\t\treturn i\n\t}\n\treturn (i&0xff000000)>>24 | (i&0xff0000)>>8 | (i&0xff00)<<8 | (i&0xff)<<24\n}\n\nconst (\n\tNLMSGERR_ATTR_UNUSED = 0\n\tNLMSGERR_ATTR_MSG    = 1\n\tNLMSGERR_ATTR_OFFS   = 2\n\tNLMSGERR_ATTR_COOKIE = 3\n\tNLMSGERR_ATTR_POLICY = 4\n)\n\ntype NetlinkRequestData interface {\n\tLen() int\n\tSerialize() []byte\n}\n\nconst (\n\tPROC_CN_MCAST_LISTEN = 1\n\tPROC_CN_MCAST_IGNORE\n)\n\ntype CbID struct {\n\tIdx uint32\n\tVal uint32\n}\n\ntype CnMsg struct {\n\tID     CbID\n\tSeq    uint32\n\tAck    uint32\n\tLength uint16\n\tFlags  uint16\n}\n\ntype CnMsgOp struct {\n\tCnMsg\n\t// here we differ from the C header\n\tOp uint32\n}\n\nfunc NewCnMsg(idx, val, op uint32) *CnMsgOp {\n\tvar cm CnMsgOp\n\n\tcm.ID.Idx = idx\n\tcm.ID.Val = val\n\n\tcm.Ack = 0\n\tcm.Seq = 1\n\tcm.Length = uint16(binary.Size(op))\n\tcm.Op = op\n\n\treturn &cm\n}\n\nfunc (msg *CnMsgOp) Serialize() []byte {\n\treturn (*(*[SizeofCnMsgOp]byte)(unsafe.Pointer(msg)))[:]\n}\n\nfunc DeserializeCnMsgOp(b []byte) *CnMsgOp {\n\treturn (*CnMsgOp)(unsafe.Pointer(&b[0:SizeofCnMsgOp][0]))\n}\n\nfunc (msg *CnMsgOp) Len() int {\n\treturn SizeofCnMsgOp\n}\n\n// IfInfomsg is related to links, but it is used for list requests as well\ntype IfInfomsg struct {\n\tunix.IfInfomsg\n}\n\n// Create an IfInfomsg with family specified\nfunc NewIfInfomsg(family int) *IfInfomsg {\n\treturn &IfInfomsg{\n\t\tIfInfomsg: unix.IfInfomsg{\n\t\t\tFamily: uint8(family),\n\t\t},\n\t}\n}\n\nfunc DeserializeIfInfomsg(b []byte) *IfInfomsg {\n\treturn (*IfInfomsg)(unsafe.Pointer(&b[0:unix.SizeofIfInfomsg][0]))\n}\n\nfunc (msg *IfInfomsg) Serialize() []byte {\n\treturn (*(*[unix.SizeofIfInfomsg]byte)(unsafe.Pointer(msg)))[:]\n}\n\nfunc (msg *IfInfomsg) Len() int {\n\treturn unix.SizeofIfInfomsg\n}\n\nfunc (msg *IfInfomsg) EncapType() string {\n\tswitch msg.Type {\n\tcase 0:\n\t\treturn \"generic\"\n\tcase unix.ARPHRD_ETHER:\n\t\treturn \"ether\"\n\tcase unix.ARPHRD_EETHER:\n\t\treturn \"eether\"\n\tcase unix.ARPHRD_AX25:\n\t\treturn \"ax25\"\n\tcase unix.ARPHRD_PRONET:\n\t\treturn \"pronet\"\n\tcase unix.ARPHRD_CHAOS:\n\t\treturn \"chaos\"\n\tcase unix.ARPHRD_IEEE802:\n\t\treturn \"ieee802\"\n\tcase unix.ARPHRD_ARCNET:\n\t\treturn \"arcnet\"\n\tcase unix.ARPHRD_APPLETLK:\n\t\treturn \"atalk\"\n\tcase unix.ARPHRD_DLCI:\n\t\treturn \"dlci\"\n\tcase unix.ARPHRD_ATM:\n\t\treturn \"atm\"\n\tcase unix.ARPHRD_METRICOM:\n\t\treturn \"metricom\"\n\tcase unix.ARPHRD_IEEE1394:\n\t\treturn \"ieee1394\"\n\tcase unix.ARPHRD_INFINIBAND:\n\t\treturn \"infiniband\"\n\tcase unix.ARPHRD_SLIP:\n\t\treturn \"slip\"\n\tcase unix.ARPHRD_CSLIP:\n\t\treturn \"cslip\"\n\tcase unix.ARPHRD_SLIP6:\n\t\treturn \"slip6\"\n\tcase unix.ARPHRD_CSLIP6:\n\t\treturn \"cslip6\"\n\tcase unix.ARPHRD_RSRVD:\n\t\treturn \"rsrvd\"\n\tcase unix.ARPHRD_ADAPT:\n\t\treturn \"adapt\"\n\tcase unix.ARPHRD_ROSE:\n\t\treturn \"rose\"\n\tcase unix.ARPHRD_X25:\n\t\treturn \"x25\"\n\tcase unix.ARPHRD_HWX25:\n\t\treturn \"hwx25\"\n\tcase unix.ARPHRD_PPP:\n\t\treturn \"ppp\"\n\tcase unix.ARPHRD_HDLC:\n\t\treturn \"hdlc\"\n\tcase unix.ARPHRD_LAPB:\n\t\treturn \"lapb\"\n\tcase unix.ARPHRD_DDCMP:\n\t\treturn \"ddcmp\"\n\tcase unix.ARPHRD_RAWHDLC:\n\t\treturn \"rawhdlc\"\n\tcase unix.ARPHRD_TUNNEL:\n\t\treturn \"ipip\"\n\tcase unix.ARPHRD_TUNNEL6:\n\t\treturn \"tunnel6\"\n\tcase unix.ARPHRD_FRAD:\n\t\treturn \"frad\"\n\tcase unix.ARPHRD_SKIP:\n\t\treturn \"skip\"\n\tcase unix.ARPHRD_LOOPBACK:\n\t\treturn \"loopback\"\n\tcase unix.ARPHRD_LOCALTLK:\n\t\treturn \"ltalk\"\n\tcase unix.ARPHRD_FDDI:\n\t\treturn \"fddi\"\n\tcase unix.ARPHRD_BIF:\n\t\treturn \"bif\"\n\tcase unix.ARPHRD_SIT:\n\t\treturn \"sit\"\n\tcase unix.ARPHRD_IPDDP:\n\t\treturn \"ip/ddp\"\n\tcase unix.ARPHRD_IPGRE:\n\t\treturn \"gre\"\n\tcase unix.ARPHRD_PIMREG:\n\t\treturn \"pimreg\"\n\tcase unix.ARPHRD_HIPPI:\n\t\treturn \"hippi\"\n\tcase unix.ARPHRD_ASH:\n\t\treturn \"ash\"\n\tcase unix.ARPHRD_ECONET:\n\t\treturn \"econet\"\n\tcase unix.ARPHRD_IRDA:\n\t\treturn \"irda\"\n\tcase unix.ARPHRD_FCPP:\n\t\treturn \"fcpp\"\n\tcase unix.ARPHRD_FCAL:\n\t\treturn \"fcal\"\n\tcase unix.ARPHRD_FCPL:\n\t\treturn \"fcpl\"\n\tcase unix.ARPHRD_FCFABRIC:\n\t\treturn \"fcfb0\"\n\tcase unix.ARPHRD_FCFABRIC + 1:\n\t\treturn \"fcfb1\"\n\tcase unix.ARPHRD_FCFABRIC + 2:\n\t\treturn \"fcfb2\"\n\tcase unix.ARPHRD_FCFABRIC + 3:\n\t\treturn \"fcfb3\"\n\tcase unix.ARPHRD_FCFABRIC + 4:\n\t\treturn \"fcfb4\"\n\tcase unix.ARPHRD_FCFABRIC + 5:\n\t\treturn \"fcfb5\"\n\tcase unix.ARPHRD_FCFABRIC + 6:\n\t\treturn \"fcfb6\"\n\tcase unix.ARPHRD_FCFABRIC + 7:\n\t\treturn \"fcfb7\"\n\tcase unix.ARPHRD_FCFABRIC + 8:\n\t\treturn \"fcfb8\"\n\tcase unix.ARPHRD_FCFABRIC + 9:\n\t\treturn \"fcfb9\"\n\tcase unix.ARPHRD_FCFABRIC + 10:\n\t\treturn \"fcfb10\"\n\tcase unix.ARPHRD_FCFABRIC + 11:\n\t\treturn \"fcfb11\"\n\tcase unix.ARPHRD_FCFABRIC + 12:\n\t\treturn \"fcfb12\"\n\tcase unix.ARPHRD_IEEE802_TR:\n\t\treturn \"tr\"\n\tcase unix.ARPHRD_IEEE80211:\n\t\treturn \"ieee802.11\"\n\tcase unix.ARPHRD_IEEE80211_PRISM:\n\t\treturn \"ieee802.11/prism\"\n\tcase unix.ARPHRD_IEEE80211_RADIOTAP:\n\t\treturn \"ieee802.11/radiotap\"\n\tcase unix.ARPHRD_IEEE802154:\n\t\treturn \"ieee802.15.4\"\n\n\tcase 65534:\n\t\treturn \"none\"\n\tcase 65535:\n\t\treturn \"void\"\n\t}\n\treturn fmt.Sprintf(\"unknown%d\", msg.Type)\n}\n\n// Round the length of a netlink message up to align it properly.\n// Taken from syscall/netlink_linux.go by The Go Authors under BSD-style license.\nfunc nlmAlignOf(msglen int) int {\n\treturn (msglen + syscall.NLMSG_ALIGNTO - 1) & ^(syscall.NLMSG_ALIGNTO - 1)\n}\n\nfunc rtaAlignOf(attrlen int) int {\n\treturn (attrlen + unix.RTA_ALIGNTO - 1) & ^(unix.RTA_ALIGNTO - 1)\n}\n\nfunc NewIfInfomsgChild(parent *RtAttr, family int) *IfInfomsg {\n\tmsg := NewIfInfomsg(family)\n\tparent.children = append(parent.children, msg)\n\treturn msg\n}\n\ntype Uint32Bitfield struct {\n\tValue    uint32\n\tSelector uint32\n}\n\nfunc (a *Uint32Bitfield) Serialize() []byte {\n\treturn (*(*[SizeofUint32Bitfield]byte)(unsafe.Pointer(a)))[:]\n}\n\nfunc DeserializeUint32Bitfield(data []byte) *Uint32Bitfield {\n\treturn (*Uint32Bitfield)(unsafe.Pointer(&data[0:SizeofUint32Bitfield][0]))\n}\n\ntype Uint32Attribute struct {\n\tType  uint16\n\tValue uint32\n}\n\nfunc (a *Uint32Attribute) Serialize() []byte {\n\tnative := NativeEndian()\n\tbuf := make([]byte, rtaAlignOf(8))\n\tnative.PutUint16(buf[0:2], 8)\n\tnative.PutUint16(buf[2:4], a.Type)\n\n\tif a.Type&NLA_F_NET_BYTEORDER != 0 {\n\t\tbinary.BigEndian.PutUint32(buf[4:], a.Value)\n\t} else {\n\t\tnative.PutUint32(buf[4:], a.Value)\n\t}\n\treturn buf\n}\n\nfunc (a *Uint32Attribute) Len() int {\n\treturn 8\n}\n\n// Extend RtAttr to handle data and children\ntype RtAttr struct {\n\tunix.RtAttr\n\tData     []byte\n\tchildren []NetlinkRequestData\n}\n\n// Create a new Extended RtAttr object\nfunc NewRtAttr(attrType int, data []byte) *RtAttr {\n\treturn &RtAttr{\n\t\tRtAttr: unix.RtAttr{\n\t\t\tType: uint16(attrType),\n\t\t},\n\t\tchildren: []NetlinkRequestData{},\n\t\tData:     data,\n\t}\n}\n\n// NewRtAttrChild adds an RtAttr as a child to the parent and returns the new attribute\n//\n// Deprecated: Use AddRtAttr() on the parent object\nfunc NewRtAttrChild(parent *RtAttr, attrType int, data []byte) *RtAttr {\n\treturn parent.AddRtAttr(attrType, data)\n}\n\n// AddRtAttr adds an RtAttr as a child and returns the new attribute\nfunc (a *RtAttr) AddRtAttr(attrType int, data []byte) *RtAttr {\n\tattr := NewRtAttr(attrType, data)\n\ta.children = append(a.children, attr)\n\treturn attr\n}\n\n// AddChild adds an existing NetlinkRequestData as a child.\nfunc (a *RtAttr) AddChild(attr NetlinkRequestData) {\n\ta.children = append(a.children, attr)\n}\n\nfunc (a *RtAttr) Len() int {\n\tif len(a.children) == 0 {\n\t\treturn (unix.SizeofRtAttr + len(a.Data))\n\t}\n\n\tl := 0\n\tfor _, child := range a.children {\n\t\tl += rtaAlignOf(child.Len())\n\t}\n\tl += unix.SizeofRtAttr\n\treturn rtaAlignOf(l + len(a.Data))\n}\n\n// Serialize the RtAttr into a byte array\n// This can't just unsafe.cast because it must iterate through children.\nfunc (a *RtAttr) Serialize() []byte {\n\tnative := NativeEndian()\n\n\tlength := a.Len()\n\tbuf := make([]byte, rtaAlignOf(length))\n\n\tnext := 4\n\tif a.Data != nil {\n\t\tcopy(buf[next:], a.Data)\n\t\tnext += rtaAlignOf(len(a.Data))\n\t}\n\tif len(a.children) > 0 {\n\t\tfor _, child := range a.children {\n\t\t\tchildBuf := child.Serialize()\n\t\t\tcopy(buf[next:], childBuf)\n\t\t\tnext += rtaAlignOf(len(childBuf))\n\t\t}\n\t}\n\n\tif l := uint16(length); l != 0 {\n\t\tnative.PutUint16(buf[0:2], l)\n\t}\n\tnative.PutUint16(buf[2:4], a.Type)\n\treturn buf\n}\n\ntype NetlinkRequest struct {\n\tunix.NlMsghdr\n\tData    []NetlinkRequestData\n\tRawData []byte\n\tSockets map[int]*SocketHandle\n}\n\n// Serialize the Netlink Request into a byte array\nfunc (req *NetlinkRequest) Serialize() []byte {\n\tlength := unix.SizeofNlMsghdr\n\tdataBytes := make([][]byte, len(req.Data))\n\tfor i, data := range req.Data {\n\t\tdataBytes[i] = data.Serialize()\n\t\tlength = length + len(dataBytes[i])\n\t}\n\tlength += len(req.RawData)\n\n\treq.Len = uint32(length)\n\tb := make([]byte, length)\n\thdr := (*(*[unix.SizeofNlMsghdr]byte)(unsafe.Pointer(req)))[:]\n\tnext := unix.SizeofNlMsghdr\n\tcopy(b[0:next], hdr)\n\tfor _, data := range dataBytes {\n\t\tfor _, dataByte := range data {\n\t\t\tb[next] = dataByte\n\t\t\tnext = next + 1\n\t\t}\n\t}\n\t// Add the raw data if any\n\tif len(req.RawData) > 0 {\n\t\tcopy(b[next:length], req.RawData)\n\t}\n\treturn b\n}\n\nfunc (req *NetlinkRequest) AddData(data NetlinkRequestData) {\n\treq.Data = append(req.Data, data)\n}\n\n// AddRawData adds raw bytes to the end of the NetlinkRequest object during serialization\nfunc (req *NetlinkRequest) AddRawData(data []byte) {\n\treq.RawData = append(req.RawData, data...)\n}\n\n// Execute the request against the given sockType.\n// Returns a list of netlink messages in serialized format, optionally filtered\n// by resType.\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (req *NetlinkRequest) Execute(sockType int, resType uint16) ([][]byte, error) {\n\tvar res [][]byte\n\terr := req.ExecuteIter(sockType, resType, func(msg []byte) bool {\n\t\tres = append(res, msg)\n\t\treturn true\n\t})\n\tif err != nil && !errors.Is(err, ErrDumpInterrupted) {\n\t\treturn nil, err\n\t}\n\treturn res, err\n}\n\n// ExecuteIter executes the request against the given sockType.\n// Calls the provided callback func once for each netlink message.\n// If the callback returns false, it is not called again, but\n// the remaining messages are consumed/discarded.\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\n//\n// Thread safety: ExecuteIter holds a lock on the socket until\n// it finishes iteration so the callback must not call back into\n// the netlink API.\nfunc (req *NetlinkRequest) ExecuteIter(sockType int, resType uint16, f func(msg []byte) bool) error {\n\tvar (\n\t\ts   *NetlinkSocket\n\t\terr error\n\t)\n\n\tif req.Sockets != nil {\n\t\tif sh, ok := req.Sockets[sockType]; ok {\n\t\t\ts = sh.Socket\n\t\t\treq.Seq = atomic.AddUint32(&sh.Seq, 1)\n\t\t}\n\t}\n\tsharedSocket := s != nil\n\n\tif s == nil {\n\t\ts, err = getNetlinkSocket(sockType)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif err := s.SetSendTimeout(&SocketTimeoutTv); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := s.SetReceiveTimeout(&SocketTimeoutTv); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif EnableErrorMessageReporting {\n\t\t\tif err := s.SetExtAck(true); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tdefer s.Close()\n\t} else {\n\t\ts.Lock()\n\t\tdefer s.Unlock()\n\t}\n\n\tif err := s.Send(req); err != nil {\n\t\treturn err\n\t}\n\n\tpid, err := s.GetPid()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdumpIntr := false\n\ndone:\n\tfor {\n\t\tmsgs, from, err := s.Receive()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif from.Pid != PidKernel {\n\t\t\treturn fmt.Errorf(\"Wrong sender portid %d, expected %d\", from.Pid, PidKernel)\n\t\t}\n\t\tfor _, m := range msgs {\n\t\t\tif m.Header.Seq != req.Seq {\n\t\t\t\tif sharedSocket {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\treturn fmt.Errorf(\"Wrong Seq nr %d, expected %d\", m.Header.Seq, req.Seq)\n\t\t\t}\n\t\t\tif m.Header.Pid != pid {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif m.Header.Flags&unix.NLM_F_DUMP_INTR != 0 {\n\t\t\t\tdumpIntr = true\n\t\t\t}\n\n\t\t\tif m.Header.Type == unix.NLMSG_DONE || m.Header.Type == unix.NLMSG_ERROR {\n\t\t\t\t// NLMSG_DONE might have no payload, if so assume no error.\n\t\t\t\tif m.Header.Type == unix.NLMSG_DONE && len(m.Data) == 0 {\n\t\t\t\t\tbreak done\n\t\t\t\t}\n\n\t\t\t\tnative := NativeEndian()\n\t\t\t\terrno := int32(native.Uint32(m.Data[0:4]))\n\t\t\t\tif errno == 0 {\n\t\t\t\t\tbreak done\n\t\t\t\t}\n\t\t\t\tvar err error\n\t\t\t\terr = syscall.Errno(-errno)\n\n\t\t\t\tunreadData := m.Data[4:]\n\t\t\t\tif m.Header.Flags&unix.NLM_F_ACK_TLVS != 0 && len(unreadData) > syscall.SizeofNlMsghdr {\n\t\t\t\t\t// Skip the echoed request message.\n\t\t\t\t\techoReqH := (*syscall.NlMsghdr)(unsafe.Pointer(&unreadData[0]))\n\t\t\t\t\tunreadData = unreadData[nlmAlignOf(int(echoReqH.Len)):]\n\n\t\t\t\t\t// Annotate `err` using nlmsgerr attributes.\n\t\t\t\t\tfor len(unreadData) >= syscall.SizeofRtAttr {\n\t\t\t\t\t\tattr := (*syscall.RtAttr)(unsafe.Pointer(&unreadData[0]))\n\t\t\t\t\t\tattrData := unreadData[syscall.SizeofRtAttr:attr.Len]\n\n\t\t\t\t\t\tswitch attr.Type {\n\t\t\t\t\t\tcase NLMSGERR_ATTR_MSG:\n\t\t\t\t\t\t\terr = fmt.Errorf(\"%w: %s\", err, unix.ByteSliceToString(attrData))\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// TODO: handle other NLMSGERR_ATTR types\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tunreadData = unreadData[rtaAlignOf(int(attr.Len)):]\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif resType != 0 && m.Header.Type != resType {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif cont := f(m.Data); !cont {\n\t\t\t\t// Drain the rest of the messages from the kernel but don't\n\t\t\t\t// pass them to the iterator func.\n\t\t\t\tf = dummyMsgIterFunc\n\t\t\t}\n\t\t\tif m.Header.Flags&unix.NLM_F_MULTI == 0 {\n\t\t\t\tbreak done\n\t\t\t}\n\t\t}\n\t}\n\tif dumpIntr {\n\t\treturn ErrDumpInterrupted\n\t}\n\treturn nil\n}\n\nfunc dummyMsgIterFunc(msg []byte) bool {\n\treturn true\n}\n\n// Create a new netlink request from proto and flags\n// Note the Len value will be inaccurate once data is added until\n// the message is serialized\nfunc NewNetlinkRequest(proto, flags int) *NetlinkRequest {\n\treturn &NetlinkRequest{\n\t\tNlMsghdr: unix.NlMsghdr{\n\t\t\tLen:   uint32(unix.SizeofNlMsghdr),\n\t\t\tType:  uint16(proto),\n\t\t\tFlags: unix.NLM_F_REQUEST | uint16(flags),\n\t\t\tSeq:   atomic.AddUint32(&nextSeqNr, 1),\n\t\t},\n\t}\n}\n\ntype NetlinkSocket struct {\n\tfd             int32\n\tfile           *os.File\n\tlsa            unix.SockaddrNetlink\n\tsendTimeout    int64 // Access using atomic.Load/StoreInt64\n\treceiveTimeout int64 // Access using atomic.Load/StoreInt64\n\tsync.Mutex\n}\n\nfunc getNetlinkSocket(protocol int) (*NetlinkSocket, error) {\n\tfd, err := unix.Socket(unix.AF_NETLINK, unix.SOCK_RAW|unix.SOCK_CLOEXEC, protocol)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = unix.SetNonblock(fd, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ts := &NetlinkSocket{\n\t\tfd:   int32(fd),\n\t\tfile: os.NewFile(uintptr(fd), \"netlink\"),\n\t}\n\ts.lsa.Family = unix.AF_NETLINK\n\tif err := unix.Bind(fd, &s.lsa); err != nil {\n\t\tunix.Close(fd)\n\t\treturn nil, err\n\t}\n\n\treturn s, nil\n}\n\n// GetNetlinkSocketAt opens a netlink socket in the network namespace newNs\n// and positions the thread back into the network namespace specified by curNs,\n// when done. If curNs is close, the function derives the current namespace and\n// moves back into it when done. If newNs is close, the socket will be opened\n// in the current network namespace.\nfunc GetNetlinkSocketAt(newNs, curNs netns.NsHandle, protocol int) (*NetlinkSocket, error) {\n\tc, err := executeInNetns(newNs, curNs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer c()\n\treturn getNetlinkSocket(protocol)\n}\n\n// executeInNetns sets execution of the code following this call to the\n// network namespace newNs, then moves the thread back to curNs if open,\n// otherwise to the current netns at the time the function was invoked\n// In case of success, the caller is expected to execute the returned function\n// at the end of the code that needs to be executed in the network namespace.\n// Example:\n//\n//\tfunc jobAt(...) error {\n//\t     d, err := executeInNetns(...)\n//\t     if err != nil { return err}\n//\t     defer d()\n//\t     < code which needs to be executed in specific netns>\n//\t }\n//\n// TODO: his function probably belongs to netns pkg.\nfunc executeInNetns(newNs, curNs netns.NsHandle) (func(), error) {\n\tvar (\n\t\terr       error\n\t\tmoveBack  func(netns.NsHandle) error\n\t\tcloseNs   func() error\n\t\tunlockThd func()\n\t)\n\trestore := func() {\n\t\t// order matters\n\t\tif moveBack != nil {\n\t\t\tmoveBack(curNs)\n\t\t}\n\t\tif closeNs != nil {\n\t\t\tcloseNs()\n\t\t}\n\t\tif unlockThd != nil {\n\t\t\tunlockThd()\n\t\t}\n\t}\n\tif newNs.IsOpen() {\n\t\truntime.LockOSThread()\n\t\tunlockThd = runtime.UnlockOSThread\n\t\tif !curNs.IsOpen() {\n\t\t\tif curNs, err = netns.Get(); err != nil {\n\t\t\t\trestore()\n\t\t\t\treturn nil, fmt.Errorf(\"could not get current namespace while creating netlink socket: %v\", err)\n\t\t\t}\n\t\t\tcloseNs = curNs.Close\n\t\t}\n\t\tif err := netns.Set(newNs); err != nil {\n\t\t\trestore()\n\t\t\treturn nil, fmt.Errorf(\"failed to set into network namespace %d while creating netlink socket: %v\", newNs, err)\n\t\t}\n\t\tmoveBack = netns.Set\n\t}\n\treturn restore, nil\n}\n\n// Create a netlink socket with a given protocol (e.g. NETLINK_ROUTE)\n// and subscribe it to multicast groups passed in variable argument list.\n// Returns the netlink socket on which Receive() method can be called\n// to retrieve the messages from the kernel.\nfunc Subscribe(protocol int, groups ...uint) (*NetlinkSocket, error) {\n\tfd, err := unix.Socket(unix.AF_NETLINK, unix.SOCK_RAW|unix.SOCK_CLOEXEC, protocol)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = unix.SetNonblock(fd, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ts := &NetlinkSocket{\n\t\tfd:   int32(fd),\n\t\tfile: os.NewFile(uintptr(fd), \"netlink\"),\n\t}\n\ts.lsa.Family = unix.AF_NETLINK\n\n\tfor _, g := range groups {\n\t\ts.lsa.Groups |= (1 << (g - 1))\n\t}\n\n\tif err := unix.Bind(fd, &s.lsa); err != nil {\n\t\tunix.Close(fd)\n\t\treturn nil, err\n\t}\n\n\treturn s, nil\n}\n\n// SubscribeAt works like Subscribe plus let's the caller choose the network\n// namespace in which the socket would be opened (newNs). Then control goes back\n// to curNs if open, otherwise to the netns at the time this function was called.\nfunc SubscribeAt(newNs, curNs netns.NsHandle, protocol int, groups ...uint) (*NetlinkSocket, error) {\n\tc, err := executeInNetns(newNs, curNs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer c()\n\treturn Subscribe(protocol, groups...)\n}\n\nfunc (s *NetlinkSocket) Close() {\n\ts.file.Close()\n}\n\nfunc (s *NetlinkSocket) GetFd() int {\n\treturn int(s.fd)\n}\n\nfunc (s *NetlinkSocket) GetTimeouts() (send, receive time.Duration) {\n\treturn time.Duration(atomic.LoadInt64(&s.sendTimeout)),\n\t\ttime.Duration(atomic.LoadInt64(&s.receiveTimeout))\n}\n\nfunc (s *NetlinkSocket) Send(request *NetlinkRequest) error {\n\trawConn, err := s.file.SyscallConn()\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar (\n\t\tdeadline time.Time\n\t\tinnerErr error\n\t)\n\tsendTimeout := atomic.LoadInt64(&s.sendTimeout)\n\tif sendTimeout != 0 {\n\t\tdeadline = time.Now().Add(time.Duration(sendTimeout))\n\t}\n\tif err := s.file.SetWriteDeadline(deadline); err != nil {\n\t\treturn err\n\t}\n\tserializedReq := request.Serialize()\n\terr = rawConn.Write(func(fd uintptr) (done bool) {\n\t\tinnerErr = unix.Sendto(int(s.fd), serializedReq, 0, &s.lsa)\n\t\treturn innerErr != unix.EWOULDBLOCK\n\t})\n\tif innerErr != nil {\n\t\treturn innerErr\n\t}\n\tif err != nil {\n\t\t// The timeout was previously implemented using SO_SNDTIMEO on a blocking\n\t\t// socket. So, continue to return EAGAIN when the timeout is reached.\n\t\tif errors.Is(err, os.ErrDeadlineExceeded) {\n\t\t\treturn unix.EAGAIN\n\t\t}\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (s *NetlinkSocket) Receive() ([]syscall.NetlinkMessage, *unix.SockaddrNetlink, error) {\n\trawConn, err := s.file.SyscallConn()\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tvar (\n\t\tdeadline time.Time\n\t\tfromAddr *unix.SockaddrNetlink\n\t\trb       [RECEIVE_BUFFER_SIZE]byte\n\t\tnr       int\n\t\tfrom     unix.Sockaddr\n\t\tinnerErr error\n\t)\n\treceiveTimeout := atomic.LoadInt64(&s.receiveTimeout)\n\tif receiveTimeout != 0 {\n\t\tdeadline = time.Now().Add(time.Duration(receiveTimeout))\n\t}\n\tif err := s.file.SetReadDeadline(deadline); err != nil {\n\t\treturn nil, nil, err\n\t}\n\terr = rawConn.Read(func(fd uintptr) (done bool) {\n\t\tnr, from, innerErr = unix.Recvfrom(int(fd), rb[:], 0)\n\t\treturn innerErr != unix.EWOULDBLOCK\n\t})\n\tif innerErr != nil {\n\t\treturn nil, nil, innerErr\n\t}\n\tif err != nil {\n\t\t// The timeout was previously implemented using SO_RCVTIMEO on a blocking\n\t\t// socket. So, continue to return EAGAIN when the timeout is reached.\n\t\tif errors.Is(err, os.ErrDeadlineExceeded) {\n\t\t\treturn nil, nil, unix.EAGAIN\n\t\t}\n\t\treturn nil, nil, err\n\t}\n\tfromAddr, ok := from.(*unix.SockaddrNetlink)\n\tif !ok {\n\t\treturn nil, nil, fmt.Errorf(\"Error converting to netlink sockaddr\")\n\t}\n\tif nr < unix.NLMSG_HDRLEN {\n\t\treturn nil, nil, fmt.Errorf(\"Got short response from netlink\")\n\t}\n\tmsgLen := nlmAlignOf(nr)\n\trb2 := make([]byte, msgLen)\n\tcopy(rb2, rb[:msgLen])\n\tnl, err := syscall.ParseNetlinkMessage(rb2)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn nl, fromAddr, nil\n}\n\n// SetSendTimeout allows to set a send timeout on the socket\nfunc (s *NetlinkSocket) SetSendTimeout(timeout *unix.Timeval) error {\n\tatomic.StoreInt64(&s.sendTimeout, timeout.Nano())\n\treturn nil\n}\n\n// SetReceiveTimeout allows to set a receive timeout on the socket\nfunc (s *NetlinkSocket) SetReceiveTimeout(timeout *unix.Timeval) error {\n\tatomic.StoreInt64(&s.receiveTimeout, timeout.Nano())\n\treturn nil\n}\n\n// SetReceiveBufferSize allows to set a receive buffer size on the socket\nfunc (s *NetlinkSocket) SetReceiveBufferSize(size int, force bool) error {\n\topt := unix.SO_RCVBUF\n\tif force {\n\t\topt = unix.SO_RCVBUFFORCE\n\t}\n\treturn unix.SetsockoptInt(int(s.fd), unix.SOL_SOCKET, opt, size)\n}\n\n// SetExtAck requests error messages to be reported on the socket\nfunc (s *NetlinkSocket) SetExtAck(enable bool) error {\n\tvar enableN int\n\tif enable {\n\t\tenableN = 1\n\t}\n\n\treturn unix.SetsockoptInt(int(s.fd), unix.SOL_NETLINK, unix.NETLINK_EXT_ACK, enableN)\n}\n\nfunc (s *NetlinkSocket) GetPid() (uint32, error) {\n\tlsa, err := unix.Getsockname(int(s.fd))\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tswitch v := lsa.(type) {\n\tcase *unix.SockaddrNetlink:\n\t\treturn v.Pid, nil\n\t}\n\treturn 0, fmt.Errorf(\"Wrong socket type\")\n}\n\nfunc ZeroTerminated(s string) []byte {\n\tbytes := make([]byte, len(s)+1)\n\tfor i := 0; i < len(s); i++ {\n\t\tbytes[i] = s[i]\n\t}\n\tbytes[len(s)] = 0\n\treturn bytes\n}\n\nfunc NonZeroTerminated(s string) []byte {\n\tbytes := make([]byte, len(s))\n\tfor i := 0; i < len(s); i++ {\n\t\tbytes[i] = s[i]\n\t}\n\treturn bytes\n}\n\nfunc BytesToString(b []byte) string {\n\tn := bytes.Index(b, []byte{0})\n\treturn string(b[:n])\n}\n\nfunc Uint8Attr(v uint8) []byte {\n\treturn []byte{byte(v)}\n}\n\nfunc Uint16Attr(v uint16) []byte {\n\tnative := NativeEndian()\n\tbytes := make([]byte, 2)\n\tnative.PutUint16(bytes, v)\n\treturn bytes\n}\n\nfunc BEUint16Attr(v uint16) []byte {\n\tbytes := make([]byte, 2)\n\tbinary.BigEndian.PutUint16(bytes, v)\n\treturn bytes\n}\n\nfunc Uint32Attr(v uint32) []byte {\n\tnative := NativeEndian()\n\tbytes := make([]byte, 4)\n\tnative.PutUint32(bytes, v)\n\treturn bytes\n}\n\nfunc BEUint32Attr(v uint32) []byte {\n\tbytes := make([]byte, 4)\n\tbinary.BigEndian.PutUint32(bytes, v)\n\treturn bytes\n}\n\nfunc Uint64Attr(v uint64) []byte {\n\tnative := NativeEndian()\n\tbytes := make([]byte, 8)\n\tnative.PutUint64(bytes, v)\n\treturn bytes\n}\n\nfunc BEUint64Attr(v uint64) []byte {\n\tbytes := make([]byte, 8)\n\tbinary.BigEndian.PutUint64(bytes, v)\n\treturn bytes\n}\n\nfunc ParseRouteAttr(b []byte) ([]syscall.NetlinkRouteAttr, error) {\n\tvar attrs []syscall.NetlinkRouteAttr\n\tfor len(b) >= unix.SizeofRtAttr {\n\t\ta, vbuf, alen, err := netlinkRouteAttrAndValue(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tra := syscall.NetlinkRouteAttr{Attr: syscall.RtAttr(*a), Value: vbuf[:int(a.Len)-unix.SizeofRtAttr]}\n\t\tattrs = append(attrs, ra)\n\t\tb = b[alen:]\n\t}\n\treturn attrs, nil\n}\n\n// ParseRouteAttrAsMap parses provided buffer that contains raw RtAttrs and returns a map of parsed\n// atttributes indexed by attribute type or error if occured.\nfunc ParseRouteAttrAsMap(b []byte) (map[uint16]syscall.NetlinkRouteAttr, error) {\n\tattrMap := make(map[uint16]syscall.NetlinkRouteAttr)\n\n\tattrs, err := ParseRouteAttr(b)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, attr := range attrs {\n\t\tattrMap[attr.Attr.Type] = attr\n\t}\n\treturn attrMap, nil\n}\n\nfunc netlinkRouteAttrAndValue(b []byte) (*unix.RtAttr, []byte, int, error) {\n\ta := (*unix.RtAttr)(unsafe.Pointer(&b[0]))\n\tif int(a.Len) < unix.SizeofRtAttr || int(a.Len) > len(b) {\n\t\treturn nil, nil, 0, unix.EINVAL\n\t}\n\treturn a, b[unix.SizeofRtAttr:], rtaAlignOf(int(a.Len)), nil\n}\n\n// SocketHandle contains the netlink socket and the associated\n// sequence counter for a specific netlink family\ntype SocketHandle struct {\n\tSeq    uint32\n\tSocket *NetlinkSocket\n}\n\n// Close closes the netlink socket\nfunc (sh *SocketHandle) Close() {\n\tif sh.Socket != nil {\n\t\tsh.Socket.Close()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/nl_unspecified.go",
    "content": "// +build !linux\n\npackage nl\n\nimport \"encoding/binary\"\n\nvar SupportedNlFamilies = []int{}\n\nfunc NativeEndian() binary.ByteOrder {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/parse_attr_linux.go",
    "content": "package nl\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"log\"\n)\n\ntype Attribute struct {\n\tType  uint16\n\tValue []byte\n}\n\nfunc ParseAttributes(data []byte) <-chan Attribute {\n\tnative := NativeEndian()\n\tresult := make(chan Attribute)\n\n\tgo func() {\n\t\ti := 0\n\t\tfor i+4 <= len(data) {\n\t\t\tlength := int(native.Uint16(data[i : i+2]))\n\t\t\tattrType := native.Uint16(data[i+2 : i+4])\n\n\t\t\tif length < 4 {\n\t\t\t\tlog.Printf(\"attribute 0x%02x has invalid length of %d bytes\", attrType, length)\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tif len(data) < i+length {\n\t\t\t\tlog.Printf(\"attribute 0x%02x of length %d is truncated, only %d bytes remaining\", attrType, length, len(data)-i)\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tresult <- Attribute{\n\t\t\t\tType:  attrType,\n\t\t\t\tValue: data[i+4 : i+length],\n\t\t\t}\n\t\t\ti += rtaAlignOf(length)\n\t\t}\n\t\tclose(result)\n\t}()\n\n\treturn result\n}\n\nfunc PrintAttributes(data []byte) {\n\tprintAttributes(data, 0)\n}\n\nfunc printAttributes(data []byte, level int) {\n\tfor attr := range ParseAttributes(data) {\n\t\tfor i := 0; i < level; i++ {\n\t\t\tprint(\"> \")\n\t\t}\n\t\tnested := attr.Type&NLA_F_NESTED != 0\n\t\tfmt.Printf(\"type=%d nested=%v len=%v %v\\n\", attr.Type&NLA_TYPE_MASK, nested, len(attr.Value), attr.Value)\n\t\tif nested {\n\t\t\tprintAttributes(attr.Value, level+1)\n\t\t}\n\t}\n}\n\n// Uint32 returns the uint32 value respecting the NET_BYTEORDER flag\nfunc (attr *Attribute) Uint32() uint32 {\n\tif attr.Type&NLA_F_NET_BYTEORDER != 0 {\n\t\treturn binary.BigEndian.Uint32(attr.Value)\n\t} else {\n\t\treturn NativeEndian().Uint32(attr.Value)\n\t}\n}\n\n// Uint64 returns the uint64 value respecting the NET_BYTEORDER flag\nfunc (attr *Attribute) Uint64() uint64 {\n\tif attr.Type&NLA_F_NET_BYTEORDER != 0 {\n\t\treturn binary.BigEndian.Uint64(attr.Value)\n\t} else {\n\t\treturn NativeEndian().Uint64(attr.Value)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/rdma_link_linux.go",
    "content": "package nl\n\nconst (\n\tRDMA_NL_GET_CLIENT_SHIFT = 10\n)\n\nconst (\n\tRDMA_NL_NLDEV = 5\n)\n\nconst (\n\tRDMA_NLDEV_CMD_GET      = 1\n\tRDMA_NLDEV_CMD_SET      = 2\n\tRDMA_NLDEV_CMD_NEWLINK  = 3\n\tRDMA_NLDEV_CMD_DELLINK  = 4\n\tRDMA_NLDEV_CMD_SYS_GET  = 6\n\tRDMA_NLDEV_CMD_SYS_SET  = 7\n\tRDMA_NLDEV_CMD_RES_GET  = 9\n\tRDMA_NLDEV_CMD_STAT_GET = 17\n)\n\nconst (\n\tRDMA_NLDEV_ATTR_DEV_INDEX                  = 1\n\tRDMA_NLDEV_ATTR_DEV_NAME                   = 2\n\tRDMA_NLDEV_ATTR_PORT_INDEX                 = 3\n\tRDMA_NLDEV_ATTR_CAP_FLAGS                  = 4\n\tRDMA_NLDEV_ATTR_FW_VERSION                 = 5\n\tRDMA_NLDEV_ATTR_NODE_GUID                  = 6\n\tRDMA_NLDEV_ATTR_SYS_IMAGE_GUID             = 7\n\tRDMA_NLDEV_ATTR_SUBNET_PREFIX              = 8\n\tRDMA_NLDEV_ATTR_LID                        = 9\n\tRDMA_NLDEV_ATTR_SM_LID                     = 10\n\tRDMA_NLDEV_ATTR_LMC                        = 11\n\tRDMA_NLDEV_ATTR_PORT_STATE                 = 12\n\tRDMA_NLDEV_ATTR_PORT_PHYS_STATE            = 13\n\tRDMA_NLDEV_ATTR_DEV_NODE_TYPE              = 14\n\tRDMA_NLDEV_ATTR_RES_SUMMARY                = 15\n\tRDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY          = 16\n\tRDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY_NAME     = 17\n\tRDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY_CURR     = 18\n\tRDMA_NLDEV_ATTR_NDEV_NAME                  = 51\n\tRDMA_NLDEV_ATTR_LINK_TYPE                  = 65\n\tRDMA_NLDEV_SYS_ATTR_NETNS_MODE             = 66\n\tRDMA_NLDEV_NET_NS_FD                       = 68\n\tRDMA_NLDEV_ATTR_STAT_HWCOUNTERS            = 80\n\tRDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY       = 81\n\tRDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY_NAME  = 82\n\tRDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY_VALUE = 83\n)\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/route_linux.go",
    "content": "package nl\n\nimport (\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\ntype RtMsg struct {\n\tunix.RtMsg\n}\n\nfunc NewRtMsg() *RtMsg {\n\treturn &RtMsg{\n\t\tRtMsg: unix.RtMsg{\n\t\t\tTable:    unix.RT_TABLE_MAIN,\n\t\t\tScope:    unix.RT_SCOPE_UNIVERSE,\n\t\t\tProtocol: unix.RTPROT_BOOT,\n\t\t\tType:     unix.RTN_UNICAST,\n\t\t},\n\t}\n}\n\nfunc NewRtDelMsg() *RtMsg {\n\treturn &RtMsg{\n\t\tRtMsg: unix.RtMsg{\n\t\t\tTable: unix.RT_TABLE_MAIN,\n\t\t\tScope: unix.RT_SCOPE_NOWHERE,\n\t\t},\n\t}\n}\n\nfunc (msg *RtMsg) Len() int {\n\treturn unix.SizeofRtMsg\n}\n\nfunc DeserializeRtMsg(b []byte) *RtMsg {\n\treturn (*RtMsg)(unsafe.Pointer(&b[0:unix.SizeofRtMsg][0]))\n}\n\nfunc (msg *RtMsg) Serialize() []byte {\n\treturn (*(*[unix.SizeofRtMsg]byte)(unsafe.Pointer(msg)))[:]\n}\n\ntype RtNexthop struct {\n\tunix.RtNexthop\n\tChildren []NetlinkRequestData\n}\n\nfunc DeserializeRtNexthop(b []byte) *RtNexthop {\n\treturn &RtNexthop{\n\t\tRtNexthop: *((*unix.RtNexthop)(unsafe.Pointer(&b[0:unix.SizeofRtNexthop][0]))),\n\t}\n}\n\nfunc (msg *RtNexthop) Len() int {\n\tif len(msg.Children) == 0 {\n\t\treturn unix.SizeofRtNexthop\n\t}\n\n\tl := 0\n\tfor _, child := range msg.Children {\n\t\tl += rtaAlignOf(child.Len())\n\t}\n\tl += unix.SizeofRtNexthop\n\treturn rtaAlignOf(l)\n}\n\nfunc (msg *RtNexthop) Serialize() []byte {\n\tlength := msg.Len()\n\tmsg.RtNexthop.Len = uint16(length)\n\tbuf := make([]byte, length)\n\tcopy(buf, (*(*[unix.SizeofRtNexthop]byte)(unsafe.Pointer(msg)))[:])\n\tnext := rtaAlignOf(unix.SizeofRtNexthop)\n\tif len(msg.Children) > 0 {\n\t\tfor _, child := range msg.Children {\n\t\t\tchildBuf := child.Serialize()\n\t\t\tcopy(buf[next:], childBuf)\n\t\t\tnext += rtaAlignOf(len(childBuf))\n\t\t}\n\t}\n\treturn buf\n}\n\ntype RtGenMsg struct {\n\tunix.RtGenmsg\n}\n\nfunc NewRtGenMsg() *RtGenMsg {\n\treturn &RtGenMsg{\n\t\tRtGenmsg: unix.RtGenmsg{\n\t\t\tFamily: unix.AF_UNSPEC,\n\t\t},\n\t}\n}\n\nfunc (msg *RtGenMsg) Len() int {\n\treturn rtaAlignOf(unix.SizeofRtGenmsg)\n}\n\nfunc DeserializeRtGenMsg(b []byte) *RtGenMsg {\n\treturn &RtGenMsg{RtGenmsg: unix.RtGenmsg{Family: b[0]}}\n}\n\nfunc (msg *RtGenMsg) Serialize() []byte {\n\tout := make([]byte, msg.Len())\n\tout[0] = msg.Family\n\treturn out\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/seg6_linux.go",
    "content": "package nl\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n)\n\ntype IPv6SrHdr struct {\n\tnextHdr      uint8\n\thdrLen       uint8\n\troutingType  uint8\n\tsegmentsLeft uint8\n\tfirstSegment uint8\n\tflags        uint8\n\treserved     uint16\n\n\tSegments []net.IP\n}\n\nfunc (s1 *IPv6SrHdr) Equal(s2 IPv6SrHdr) bool {\n\tif len(s1.Segments) != len(s2.Segments) {\n\t\treturn false\n\t}\n\tfor i := range s1.Segments {\n\t\tif !s1.Segments[i].Equal(s2.Segments[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn s1.nextHdr == s2.nextHdr &&\n\t\ts1.hdrLen == s2.hdrLen &&\n\t\ts1.routingType == s2.routingType &&\n\t\ts1.segmentsLeft == s2.segmentsLeft &&\n\t\ts1.firstSegment == s2.firstSegment &&\n\t\ts1.flags == s2.flags\n\t// reserved doesn't need to be identical.\n}\n\n// seg6 encap mode\nconst (\n\tSEG6_IPTUN_MODE_INLINE = iota\n\tSEG6_IPTUN_MODE_ENCAP\n)\n\n// number of nested RTATTR\n// from include/uapi/linux/seg6_iptunnel.h\nconst (\n\tSEG6_IPTUNNEL_UNSPEC = iota\n\tSEG6_IPTUNNEL_SRH\n\t__SEG6_IPTUNNEL_MAX\n)\nconst (\n\tSEG6_IPTUNNEL_MAX = __SEG6_IPTUNNEL_MAX - 1\n)\n\nfunc EncodeSEG6Encap(mode int, segments []net.IP) ([]byte, error) {\n\tnsegs := len(segments) // nsegs: number of segments\n\tif nsegs == 0 {\n\t\treturn nil, errors.New(\"EncodeSEG6Encap: No Segment in srh\")\n\t}\n\tb := make([]byte, 12, 12+len(segments)*16)\n\tnative := NativeEndian()\n\tnative.PutUint32(b, uint32(mode))\n\tb[4] = 0                      // srh.nextHdr (0 when calling netlink)\n\tb[5] = uint8(16 * nsegs >> 3) // srh.hdrLen (in 8-octets unit)\n\tb[6] = IPV6_SRCRT_TYPE_4      // srh.routingType (assigned by IANA)\n\tb[7] = uint8(nsegs - 1)       // srh.segmentsLeft\n\tb[8] = uint8(nsegs - 1)       // srh.firstSegment\n\tb[9] = 0                      // srh.flags (SR6_FLAG1_HMAC for srh_hmac)\n\t// srh.reserved: Defined as \"Tag\" in draft-ietf-6man-segment-routing-header-07\n\tnative.PutUint16(b[10:], 0) // srh.reserved\n\tfor _, netIP := range segments {\n\t\tb = append(b, netIP...) // srh.Segments\n\t}\n\treturn b, nil\n}\n\nfunc DecodeSEG6Encap(buf []byte) (int, []net.IP, error) {\n\tnative := NativeEndian()\n\tmode := int(native.Uint32(buf))\n\tsrh := IPv6SrHdr{\n\t\tnextHdr:      buf[4],\n\t\thdrLen:       buf[5],\n\t\troutingType:  buf[6],\n\t\tsegmentsLeft: buf[7],\n\t\tfirstSegment: buf[8],\n\t\tflags:        buf[9],\n\t\treserved:     native.Uint16(buf[10:12]),\n\t}\n\tbuf = buf[12:]\n\tif len(buf)%16 != 0 {\n\t\terr := fmt.Errorf(\"DecodeSEG6Encap: error parsing Segment List (buf len: %d)\", len(buf))\n\t\treturn mode, nil, err\n\t}\n\tfor len(buf) > 0 {\n\t\tsrh.Segments = append(srh.Segments, net.IP(buf[:16]))\n\t\tbuf = buf[16:]\n\t}\n\treturn mode, srh.Segments, nil\n}\n\nfunc DecodeSEG6Srh(buf []byte) ([]net.IP, error) {\n\tnative := NativeEndian()\n\tsrh := IPv6SrHdr{\n\t\tnextHdr:      buf[0],\n\t\thdrLen:       buf[1],\n\t\troutingType:  buf[2],\n\t\tsegmentsLeft: buf[3],\n\t\tfirstSegment: buf[4],\n\t\tflags:        buf[5],\n\t\treserved:     native.Uint16(buf[6:8]),\n\t}\n\tbuf = buf[8:]\n\tif len(buf)%16 != 0 {\n\t\terr := fmt.Errorf(\"DecodeSEG6Srh: error parsing Segment List (buf len: %d)\", len(buf))\n\t\treturn nil, err\n\t}\n\tfor len(buf) > 0 {\n\t\tsrh.Segments = append(srh.Segments, net.IP(buf[:16]))\n\t\tbuf = buf[16:]\n\t}\n\treturn srh.Segments, nil\n}\nfunc EncodeSEG6Srh(segments []net.IP) ([]byte, error) {\n\tnsegs := len(segments) // nsegs: number of segments\n\tif nsegs == 0 {\n\t\treturn nil, errors.New(\"EncodeSEG6Srh: No Segments\")\n\t}\n\tb := make([]byte, 8, 8+len(segments)*16)\n\tnative := NativeEndian()\n\tb[0] = 0                      // srh.nextHdr (0 when calling netlink)\n\tb[1] = uint8(16 * nsegs >> 3) // srh.hdrLen (in 8-octets unit)\n\tb[2] = IPV6_SRCRT_TYPE_4      // srh.routingType (assigned by IANA)\n\tb[3] = uint8(nsegs - 1)       // srh.segmentsLeft\n\tb[4] = uint8(nsegs - 1)       // srh.firstSegment\n\tb[5] = 0                      // srh.flags (SR6_FLAG1_HMAC for srh_hmac)\n\t// srh.reserved: Defined as \"Tag\" in draft-ietf-6man-segment-routing-header-07\n\tnative.PutUint16(b[6:], 0) // srh.reserved\n\tfor _, netIP := range segments {\n\t\tb = append(b, netIP...) // srh.Segments\n\t}\n\treturn b, nil\n}\n\n// Helper functions\nfunc SEG6EncapModeString(mode int) string {\n\tswitch mode {\n\tcase SEG6_IPTUN_MODE_INLINE:\n\t\treturn \"inline\"\n\tcase SEG6_IPTUN_MODE_ENCAP:\n\t\treturn \"encap\"\n\t}\n\treturn \"unknown\"\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/seg6local_linux.go",
    "content": "package nl\n\nimport ()\n\n// seg6local parameters\nconst (\n\tSEG6_LOCAL_UNSPEC = iota\n\tSEG6_LOCAL_ACTION\n\tSEG6_LOCAL_SRH\n\tSEG6_LOCAL_TABLE\n\tSEG6_LOCAL_NH4\n\tSEG6_LOCAL_NH6\n\tSEG6_LOCAL_IIF\n\tSEG6_LOCAL_OIF\n\tSEG6_LOCAL_BPF\n\tSEG6_LOCAL_VRFTABLE\n\t__SEG6_LOCAL_MAX\n)\nconst (\n\tSEG6_LOCAL_MAX = __SEG6_LOCAL_MAX\n)\n\n// seg6local actions\nconst (\n\tSEG6_LOCAL_ACTION_END           = iota + 1 // 1\n\tSEG6_LOCAL_ACTION_END_X                    // 2\n\tSEG6_LOCAL_ACTION_END_T                    // 3\n\tSEG6_LOCAL_ACTION_END_DX2                  // 4\n\tSEG6_LOCAL_ACTION_END_DX6                  // 5\n\tSEG6_LOCAL_ACTION_END_DX4                  // 6\n\tSEG6_LOCAL_ACTION_END_DT6                  // 7\n\tSEG6_LOCAL_ACTION_END_DT4                  // 8\n\tSEG6_LOCAL_ACTION_END_B6                   // 9\n\tSEG6_LOCAL_ACTION_END_B6_ENCAPS            // 10\n\tSEG6_LOCAL_ACTION_END_BM                   // 11\n\tSEG6_LOCAL_ACTION_END_S                    // 12\n\tSEG6_LOCAL_ACTION_END_AS                   // 13\n\tSEG6_LOCAL_ACTION_END_AM                   // 14\n\tSEG6_LOCAL_ACTION_END_BPF                  // 15\n\t__SEG6_LOCAL_ACTION_MAX\n)\nconst (\n\tSEG6_LOCAL_ACTION_MAX = __SEG6_LOCAL_ACTION_MAX - 1\n)\n\n// Helper functions\nfunc SEG6LocalActionString(action int) string {\n\tswitch action {\n\tcase SEG6_LOCAL_ACTION_END:\n\t\treturn \"End\"\n\tcase SEG6_LOCAL_ACTION_END_X:\n\t\treturn \"End.X\"\n\tcase SEG6_LOCAL_ACTION_END_T:\n\t\treturn \"End.T\"\n\tcase SEG6_LOCAL_ACTION_END_DX2:\n\t\treturn \"End.DX2\"\n\tcase SEG6_LOCAL_ACTION_END_DX6:\n\t\treturn \"End.DX6\"\n\tcase SEG6_LOCAL_ACTION_END_DX4:\n\t\treturn \"End.DX4\"\n\tcase SEG6_LOCAL_ACTION_END_DT6:\n\t\treturn \"End.DT6\"\n\tcase SEG6_LOCAL_ACTION_END_DT4:\n\t\treturn \"End.DT4\"\n\tcase SEG6_LOCAL_ACTION_END_B6:\n\t\treturn \"End.B6\"\n\tcase SEG6_LOCAL_ACTION_END_B6_ENCAPS:\n\t\treturn \"End.B6.Encaps\"\n\tcase SEG6_LOCAL_ACTION_END_BM:\n\t\treturn \"End.BM\"\n\tcase SEG6_LOCAL_ACTION_END_S:\n\t\treturn \"End.S\"\n\tcase SEG6_LOCAL_ACTION_END_AS:\n\t\treturn \"End.AS\"\n\tcase SEG6_LOCAL_ACTION_END_AM:\n\t\treturn \"End.AM\"\n\tcase SEG6_LOCAL_ACTION_END_BPF:\n\t\treturn \"End.BPF\"\n\t}\n\treturn \"unknown\"\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/syscall.go",
    "content": "package nl\n\n// syscall package lack of rule attributes type.\n// Thus there are defined below\nconst (\n\tFRA_UNSPEC  = iota\n\tFRA_DST     /* destination address */\n\tFRA_SRC     /* source address */\n\tFRA_IIFNAME /* interface name */\n\tFRA_GOTO    /* target to jump to (FR_ACT_GOTO) */\n\tFRA_UNUSED2\n\tFRA_PRIORITY /* priority/preference */\n\tFRA_UNUSED3\n\tFRA_UNUSED4\n\tFRA_UNUSED5\n\tFRA_FWMARK /* mark */\n\tFRA_FLOW   /* flow/class id */\n\tFRA_TUN_ID\n\tFRA_SUPPRESS_IFGROUP\n\tFRA_SUPPRESS_PREFIXLEN\n\tFRA_TABLE  /* Extended table id */\n\tFRA_FWMASK /* mask for netfilter mark */\n\tFRA_OIFNAME\n\tFRA_PAD\n\tFRA_L3MDEV      /* iif or oif is l3mdev goto its table */\n\tFRA_UID_RANGE   /* UID range */\n\tFRA_PROTOCOL    /* Originator of the rule */\n\tFRA_IP_PROTO    /* ip proto */\n\tFRA_SPORT_RANGE /* sport */\n\tFRA_DPORT_RANGE /* dport */\n)\n\n// ip rule netlink request types\nconst (\n\tFR_ACT_UNSPEC = iota\n\tFR_ACT_TO_TBL /* Pass to fixed table */\n\tFR_ACT_GOTO   /* Jump to another rule */\n\tFR_ACT_NOP    /* No operation */\n\tFR_ACT_RES3\n\tFR_ACT_RES4\n\tFR_ACT_BLACKHOLE   /* Drop without notification */\n\tFR_ACT_UNREACHABLE /* Drop with ENETUNREACH */\n\tFR_ACT_PROHIBIT    /* Drop with EACCES */\n)\n\n// socket diags related\nconst (\n\tSOCK_DIAG_BY_FAMILY = 20         /* linux.sock_diag.h */\n\tSOCK_DESTROY\t    = 21\n\tTCPDIAG_NOCOOKIE    = 0xFFFFFFFF /* TCPDIAG_NOCOOKIE in net/ipv4/tcp_diag.h*/\n)\n\n// RTA_ENCAP subtype\nconst (\n\tMPLS_IPTUNNEL_UNSPEC = iota\n\tMPLS_IPTUNNEL_DST\n)\n\n// light weight tunnel encap types\nconst (\n\tLWTUNNEL_ENCAP_NONE = iota\n\tLWTUNNEL_ENCAP_MPLS\n\tLWTUNNEL_ENCAP_IP\n\tLWTUNNEL_ENCAP_ILA\n\tLWTUNNEL_ENCAP_IP6\n\tLWTUNNEL_ENCAP_SEG6\n\tLWTUNNEL_ENCAP_BPF\n\tLWTUNNEL_ENCAP_SEG6_LOCAL\n)\n\n// routing header types\nconst (\n\tIPV6_SRCRT_STRICT = 0x01 // Deprecated; will be removed\n\tIPV6_SRCRT_TYPE_0 = 0    // Deprecated; will be removed\n\tIPV6_SRCRT_TYPE_2 = 2    // IPv6 type 2 Routing Header\n\tIPV6_SRCRT_TYPE_4 = 4    // Segment Routing with IPv6\n)\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/tc_linux.go",
    "content": "package nl\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"net\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// LinkLayer\nconst (\n\tLINKLAYER_UNSPEC = iota\n\tLINKLAYER_ETHERNET\n\tLINKLAYER_ATM\n)\n\n// ATM\nconst (\n\tATM_CELL_PAYLOAD = 48\n\tATM_CELL_SIZE    = 53\n)\n\nconst TC_LINKLAYER_MASK = 0x0F\n\n// Police\nconst (\n\tTCA_POLICE_UNSPEC = iota\n\tTCA_POLICE_TBF\n\tTCA_POLICE_RATE\n\tTCA_POLICE_PEAKRATE\n\tTCA_POLICE_AVRATE\n\tTCA_POLICE_RESULT\n\tTCA_POLICE_MAX = TCA_POLICE_RESULT\n)\n\n// Message types\nconst (\n\tTCA_UNSPEC = iota\n\tTCA_KIND\n\tTCA_OPTIONS\n\tTCA_STATS\n\tTCA_XSTATS\n\tTCA_RATE\n\tTCA_FCNT\n\tTCA_STATS2\n\tTCA_STAB\n\tTCA_PAD\n\tTCA_DUMP_INVISIBLE\n\tTCA_CHAIN\n\tTCA_HW_OFFLOAD\n\tTCA_INGRESS_BLOCK\n\tTCA_EGRESS_BLOCK\n\tTCA_DUMP_FLAGS\n\tTCA_MAX = TCA_DUMP_FLAGS\n)\n\nconst (\n\tTCA_ACT_TAB = 1\n\tTCAA_MAX    = 1\n)\n\nconst (\n\tTCA_ACT_UNSPEC = iota\n\tTCA_ACT_KIND\n\tTCA_ACT_OPTIONS\n\tTCA_ACT_INDEX\n\tTCA_ACT_STATS\n\tTCA_ACT_PAD\n\tTCA_ACT_COOKIE\n\tTCA_ACT_FLAGS\n\tTCA_ACT_HW_STATS\n\tTCA_ACT_USED_HW_STATS\n\tTCA_ACT_IN_HW_COUNT\n\tTCA_ACT_MAX\n)\n\nconst (\n\tTCA_ACT_SAMPLE_UNSPEC = iota\n\tTCA_ACT_SAMPLE_TM\n\tTCA_ACT_SAMPLE_PARMS\n\tTCA_ACT_SAMPLE_RATE\n\tTCA_ACT_SAMPLE_TRUNC_SIZE\n\tTCA_ACT_SAMPLE_PSAMPLE_GROUP\n\tTCA_ACT_SAMPLE_PAD\n\tTCA_ACT_SAMPLE_MAX\n)\n\nconst (\n\tTCA_PRIO_UNSPEC = iota\n\tTCA_PRIO_MQ\n\tTCA_PRIO_MAX = TCA_PRIO_MQ\n)\n\nconst (\n\tTCA_STATS_UNSPEC = iota\n\tTCA_STATS_BASIC\n\tTCA_STATS_RATE_EST\n\tTCA_STATS_QUEUE\n\tTCA_STATS_APP\n\tTCA_STATS_RATE_EST64\n\tTCA_STATS_PAD\n\tTCA_STATS_BASIC_HW\n\tTCA_STATS_PKT64\n\tTCA_STATS_MAX = TCA_STATS_PKT64\n)\n\nconst (\n\tSizeofTcMsg          = 0x14\n\tSizeofTcActionMsg    = 0x04\n\tSizeofTcPrioMap      = 0x14\n\tSizeofTcRateSpec     = 0x0c\n\tSizeofTcNetemQopt    = 0x18\n\tSizeofTcNetemCorr    = 0x0c\n\tSizeofTcNetemReorder = 0x08\n\tSizeofTcNetemCorrupt = 0x08\n\tSizeOfTcNetemRate    = 0x10\n\tSizeofTcTbfQopt      = 2*SizeofTcRateSpec + 0x0c\n\tSizeofTcHtbCopt      = 2*SizeofTcRateSpec + 0x14\n\tSizeofTcHtbGlob      = 0x14\n\tSizeofTcU32Key       = 0x10\n\tSizeofTcU32Sel       = 0x10 // without keys\n\tSizeofTcGen          = 0x16\n\tSizeofTcConnmark     = SizeofTcGen + 0x04\n\tSizeofTcCsum         = SizeofTcGen + 0x04\n\tSizeofTcMirred       = SizeofTcGen + 0x08\n\tSizeofTcVlan         = SizeofTcGen + 0x04\n\tSizeofTcTunnelKey    = SizeofTcGen + 0x04\n\tSizeofTcSkbEdit      = SizeofTcGen\n\tSizeofTcPolice       = 2*SizeofTcRateSpec + 0x20\n\tSizeofTcSfqQopt      = 0x0b\n\tSizeofTcSfqRedStats  = 0x18\n\tSizeofTcSfqQoptV1    = SizeofTcSfqQopt + SizeofTcSfqRedStats + 0x1c\n\tSizeofUint32Bitfield = 0x8\n)\n\n// struct tcmsg {\n//   unsigned char tcm_family;\n//   unsigned char tcm__pad1;\n//   unsigned short  tcm__pad2;\n//   int   tcm_ifindex;\n//   __u32   tcm_handle;\n//   __u32   tcm_parent;\n//   __u32   tcm_info;\n// };\n\ntype TcMsg struct {\n\tFamily  uint8\n\tPad     [3]byte\n\tIfindex int32\n\tHandle  uint32\n\tParent  uint32\n\tInfo    uint32\n}\n\nfunc (msg *TcMsg) Len() int {\n\treturn SizeofTcMsg\n}\n\nfunc DeserializeTcMsg(b []byte) *TcMsg {\n\treturn (*TcMsg)(unsafe.Pointer(&b[0:SizeofTcMsg][0]))\n}\n\nfunc (x *TcMsg) Serialize() []byte {\n\treturn (*(*[SizeofTcMsg]byte)(unsafe.Pointer(x)))[:]\n}\n\ntype Tcf struct {\n\tInstall  uint64\n\tLastUse  uint64\n\tExpires  uint64\n\tFirstUse uint64\n}\n\nfunc DeserializeTcf(b []byte) *Tcf {\n\tconst size = int(unsafe.Sizeof(Tcf{}))\n\treturn (*Tcf)(unsafe.Pointer(&b[0:size][0]))\n}\n\n// struct tcamsg {\n//   unsigned char tca_family;\n//   unsigned char tca__pad1;\n//   unsigned short  tca__pad2;\n// };\n\ntype TcActionMsg struct {\n\tFamily uint8\n\tPad    [3]byte\n}\n\nfunc (msg *TcActionMsg) Len() int {\n\treturn SizeofTcActionMsg\n}\n\nfunc DeserializeTcActionMsg(b []byte) *TcActionMsg {\n\treturn (*TcActionMsg)(unsafe.Pointer(&b[0:SizeofTcActionMsg][0]))\n}\n\nfunc (x *TcActionMsg) Serialize() []byte {\n\treturn (*(*[SizeofTcActionMsg]byte)(unsafe.Pointer(x)))[:]\n}\n\nconst (\n\tTC_PRIO_MAX = 15\n)\n\n// struct tc_prio_qopt {\n// \tint bands;      /* Number of bands */\n// \t__u8  priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */\n// };\n\ntype TcPrioMap struct {\n\tBands   int32\n\tPriomap [TC_PRIO_MAX + 1]uint8\n}\n\nfunc (msg *TcPrioMap) Len() int {\n\treturn SizeofTcPrioMap\n}\n\nfunc DeserializeTcPrioMap(b []byte) *TcPrioMap {\n\treturn (*TcPrioMap)(unsafe.Pointer(&b[0:SizeofTcPrioMap][0]))\n}\n\nfunc (x *TcPrioMap) Serialize() []byte {\n\treturn (*(*[SizeofTcPrioMap]byte)(unsafe.Pointer(x)))[:]\n}\n\nconst (\n\tTCA_TBF_UNSPEC = iota\n\tTCA_TBF_PARMS\n\tTCA_TBF_RTAB\n\tTCA_TBF_PTAB\n\tTCA_TBF_RATE64\n\tTCA_TBF_PRATE64\n\tTCA_TBF_BURST\n\tTCA_TBF_PBURST\n\tTCA_TBF_MAX = TCA_TBF_PBURST\n)\n\n// struct tc_ratespec {\n//   unsigned char cell_log;\n//   __u8    linklayer; /* lower 4 bits */\n//   unsigned short  overhead;\n//   short   cell_align;\n//   unsigned short  mpu;\n//   __u32   rate;\n// };\n\ntype TcRateSpec struct {\n\tCellLog   uint8\n\tLinklayer uint8\n\tOverhead  uint16\n\tCellAlign int16\n\tMpu       uint16\n\tRate      uint32\n}\n\nfunc (msg *TcRateSpec) Len() int {\n\treturn SizeofTcRateSpec\n}\n\nfunc DeserializeTcRateSpec(b []byte) *TcRateSpec {\n\treturn (*TcRateSpec)(unsafe.Pointer(&b[0:SizeofTcRateSpec][0]))\n}\n\nfunc (x *TcRateSpec) Serialize() []byte {\n\treturn (*(*[SizeofTcRateSpec]byte)(unsafe.Pointer(x)))[:]\n}\n\n/**\n* NETEM\n */\n\nconst (\n\tTCA_NETEM_UNSPEC = iota\n\tTCA_NETEM_CORR\n\tTCA_NETEM_DELAY_DIST\n\tTCA_NETEM_REORDER\n\tTCA_NETEM_CORRUPT\n\tTCA_NETEM_LOSS\n\tTCA_NETEM_RATE\n\tTCA_NETEM_ECN\n\tTCA_NETEM_RATE64\n\tTCA_NETEM_MAX = TCA_NETEM_RATE64\n)\n\n// struct tc_netem_qopt {\n//\t__u32\tlatency;\t/* added delay (us) */\n//\t__u32   limit;\t\t/* fifo limit (packets) */\n//\t__u32\tloss;\t\t/* random packet loss (0=none ~0=100%) */\n//\t__u32\tgap;\t\t/* re-ordering gap (0 for none) */\n//\t__u32   duplicate;\t/* random packet dup  (0=none ~0=100%) */\n// \t__u32\tjitter;\t\t/* random jitter in latency (us) */\n// };\n\ntype TcNetemQopt struct {\n\tLatency   uint32\n\tLimit     uint32\n\tLoss      uint32\n\tGap       uint32\n\tDuplicate uint32\n\tJitter    uint32\n}\n\nfunc (msg *TcNetemQopt) Len() int {\n\treturn SizeofTcNetemQopt\n}\n\nfunc DeserializeTcNetemQopt(b []byte) *TcNetemQopt {\n\treturn (*TcNetemQopt)(unsafe.Pointer(&b[0:SizeofTcNetemQopt][0]))\n}\n\nfunc (x *TcNetemQopt) Serialize() []byte {\n\treturn (*(*[SizeofTcNetemQopt]byte)(unsafe.Pointer(x)))[:]\n}\n\n// struct tc_netem_corr {\n//  __u32   delay_corr; /* delay correlation */\n//  __u32   loss_corr;  /* packet loss correlation */\n//  __u32   dup_corr;   /* duplicate correlation  */\n// };\n\ntype TcNetemCorr struct {\n\tDelayCorr uint32\n\tLossCorr  uint32\n\tDupCorr   uint32\n}\n\nfunc (msg *TcNetemCorr) Len() int {\n\treturn SizeofTcNetemCorr\n}\n\nfunc DeserializeTcNetemCorr(b []byte) *TcNetemCorr {\n\treturn (*TcNetemCorr)(unsafe.Pointer(&b[0:SizeofTcNetemCorr][0]))\n}\n\nfunc (x *TcNetemCorr) Serialize() []byte {\n\treturn (*(*[SizeofTcNetemCorr]byte)(unsafe.Pointer(x)))[:]\n}\n\n// struct tc_netem_reorder {\n//  __u32   probability;\n//  __u32   correlation;\n// };\n\ntype TcNetemReorder struct {\n\tProbability uint32\n\tCorrelation uint32\n}\n\nfunc (msg *TcNetemReorder) Len() int {\n\treturn SizeofTcNetemReorder\n}\n\nfunc DeserializeTcNetemReorder(b []byte) *TcNetemReorder {\n\treturn (*TcNetemReorder)(unsafe.Pointer(&b[0:SizeofTcNetemReorder][0]))\n}\n\nfunc (x *TcNetemReorder) Serialize() []byte {\n\treturn (*(*[SizeofTcNetemReorder]byte)(unsafe.Pointer(x)))[:]\n}\n\n// struct tc_netem_corrupt {\n//  __u32   probability;\n//  __u32   correlation;\n// };\n\ntype TcNetemCorrupt struct {\n\tProbability uint32\n\tCorrelation uint32\n}\n\nfunc (msg *TcNetemCorrupt) Len() int {\n\treturn SizeofTcNetemCorrupt\n}\n\nfunc DeserializeTcNetemCorrupt(b []byte) *TcNetemCorrupt {\n\treturn (*TcNetemCorrupt)(unsafe.Pointer(&b[0:SizeofTcNetemCorrupt][0]))\n}\n\nfunc (x *TcNetemCorrupt) Serialize() []byte {\n\treturn (*(*[SizeofTcNetemCorrupt]byte)(unsafe.Pointer(x)))[:]\n}\n\n// TcNetemRate is a struct that represents the rate of a netem qdisc\ntype TcNetemRate struct {\n\tRate           uint32\n\tPacketOverhead int32\n\tCellSize       uint32\n\tCellOverhead   int32\n}\n\nfunc (msg *TcNetemRate) Len() int {\n\treturn SizeofTcRateSpec\n}\n\nfunc DeserializeTcNetemRate(b []byte) *TcNetemRate {\n\treturn (*TcNetemRate)(unsafe.Pointer(&b[0:SizeofTcRateSpec][0]))\n}\n\nfunc (msg *TcNetemRate) Serialize() []byte {\n\treturn (*(*[SizeOfTcNetemRate]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct tc_tbf_qopt {\n//   struct tc_ratespec rate;\n//   struct tc_ratespec peakrate;\n//   __u32   limit;\n//   __u32   buffer;\n//   __u32   mtu;\n// };\n\ntype TcTbfQopt struct {\n\tRate     TcRateSpec\n\tPeakrate TcRateSpec\n\tLimit    uint32\n\tBuffer   uint32\n\tMtu      uint32\n}\n\nfunc (msg *TcTbfQopt) Len() int {\n\treturn SizeofTcTbfQopt\n}\n\nfunc DeserializeTcTbfQopt(b []byte) *TcTbfQopt {\n\treturn (*TcTbfQopt)(unsafe.Pointer(&b[0:SizeofTcTbfQopt][0]))\n}\n\nfunc (x *TcTbfQopt) Serialize() []byte {\n\treturn (*(*[SizeofTcTbfQopt]byte)(unsafe.Pointer(x)))[:]\n}\n\nconst (\n\tTCA_HTB_UNSPEC = iota\n\tTCA_HTB_PARMS\n\tTCA_HTB_INIT\n\tTCA_HTB_CTAB\n\tTCA_HTB_RTAB\n\tTCA_HTB_DIRECT_QLEN\n\tTCA_HTB_RATE64\n\tTCA_HTB_CEIL64\n\tTCA_HTB_MAX = TCA_HTB_CEIL64\n)\n\n//struct tc_htb_opt {\n//\tstruct tc_ratespec\trate;\n//\tstruct tc_ratespec\tceil;\n//\t__u32\tbuffer;\n//\t__u32\tcbuffer;\n//\t__u32\tquantum;\n//\t__u32\tlevel;\t\t/* out only */\n//\t__u32\tprio;\n//};\n\ntype TcHtbCopt struct {\n\tRate    TcRateSpec\n\tCeil    TcRateSpec\n\tBuffer  uint32\n\tCbuffer uint32\n\tQuantum uint32\n\tLevel   uint32\n\tPrio    uint32\n}\n\nfunc (msg *TcHtbCopt) Len() int {\n\treturn SizeofTcHtbCopt\n}\n\nfunc DeserializeTcHtbCopt(b []byte) *TcHtbCopt {\n\treturn (*TcHtbCopt)(unsafe.Pointer(&b[0:SizeofTcHtbCopt][0]))\n}\n\nfunc (x *TcHtbCopt) Serialize() []byte {\n\treturn (*(*[SizeofTcHtbCopt]byte)(unsafe.Pointer(x)))[:]\n}\n\ntype TcHtbGlob struct {\n\tVersion      uint32\n\tRate2Quantum uint32\n\tDefcls       uint32\n\tDebug        uint32\n\tDirectPkts   uint32\n}\n\nfunc (msg *TcHtbGlob) Len() int {\n\treturn SizeofTcHtbGlob\n}\n\nfunc DeserializeTcHtbGlob(b []byte) *TcHtbGlob {\n\treturn (*TcHtbGlob)(unsafe.Pointer(&b[0:SizeofTcHtbGlob][0]))\n}\n\nfunc (x *TcHtbGlob) Serialize() []byte {\n\treturn (*(*[SizeofTcHtbGlob]byte)(unsafe.Pointer(x)))[:]\n}\n\n// HFSC\n\ntype Curve struct {\n\tm1 uint32\n\td  uint32\n\tm2 uint32\n}\n\ntype HfscCopt struct {\n\tRsc Curve\n\tFsc Curve\n\tUsc Curve\n}\n\nfunc (c *Curve) Attrs() (uint32, uint32, uint32) {\n\treturn c.m1, c.d, c.m2\n}\n\nfunc (c *Curve) Set(m1 uint32, d uint32, m2 uint32) {\n\tc.m1 = m1\n\tc.d = d\n\tc.m2 = m2\n}\n\nfunc DeserializeHfscCurve(b []byte) *Curve {\n\treturn &Curve{\n\t\tm1: binary.LittleEndian.Uint32(b[0:4]),\n\t\td:  binary.LittleEndian.Uint32(b[4:8]),\n\t\tm2: binary.LittleEndian.Uint32(b[8:12]),\n\t}\n}\n\nfunc SerializeHfscCurve(c *Curve) (b []byte) {\n\tt := make([]byte, binary.MaxVarintLen32)\n\tbinary.LittleEndian.PutUint32(t, c.m1)\n\tb = append(b, t[:4]...)\n\tbinary.LittleEndian.PutUint32(t, c.d)\n\tb = append(b, t[:4]...)\n\tbinary.LittleEndian.PutUint32(t, c.m2)\n\tb = append(b, t[:4]...)\n\treturn b\n}\n\ntype TcHfscOpt struct {\n\tDefcls uint16\n}\n\nfunc (x *TcHfscOpt) Serialize() []byte {\n\treturn (*(*[2]byte)(unsafe.Pointer(x)))[:]\n}\n\nconst (\n\tTCA_U32_UNSPEC = iota\n\tTCA_U32_CLASSID\n\tTCA_U32_HASH\n\tTCA_U32_LINK\n\tTCA_U32_DIVISOR\n\tTCA_U32_SEL\n\tTCA_U32_POLICE\n\tTCA_U32_ACT\n\tTCA_U32_INDEV\n\tTCA_U32_PCNT\n\tTCA_U32_MARK\n\tTCA_U32_MAX = TCA_U32_MARK\n)\n\n// struct tc_u32_key {\n//   __be32    mask;\n//   __be32    val;\n//   int   off;\n//   int   offmask;\n// };\n\ntype TcU32Key struct {\n\tMask    uint32 // big endian\n\tVal     uint32 // big endian\n\tOff     int32\n\tOffMask int32\n}\n\nfunc (msg *TcU32Key) Len() int {\n\treturn SizeofTcU32Key\n}\n\nfunc DeserializeTcU32Key(b []byte) *TcU32Key {\n\treturn (*TcU32Key)(unsafe.Pointer(&b[0:SizeofTcU32Key][0]))\n}\n\nfunc (x *TcU32Key) Serialize() []byte {\n\treturn (*(*[SizeofTcU32Key]byte)(unsafe.Pointer(x)))[:]\n}\n\n// struct tc_u32_sel {\n//   unsigned char   flags;\n//   unsigned char   offshift;\n//   unsigned char   nkeys;\n//\n//   __be16      offmask;\n//   __u16     off;\n//   short     offoff;\n//\n//   short     hoff;\n//   __be32      hmask;\n//   struct tc_u32_key keys[0];\n// };\n\nconst (\n\tTC_U32_TERMINAL  = 1 << iota\n\tTC_U32_OFFSET    = 1 << iota\n\tTC_U32_VAROFFSET = 1 << iota\n\tTC_U32_EAT       = 1 << iota\n)\n\ntype TcU32Sel struct {\n\tFlags    uint8\n\tOffshift uint8\n\tNkeys    uint8\n\tPad      uint8\n\tOffmask  uint16 // big endian\n\tOff      uint16\n\tOffoff   int16\n\tHoff     int16\n\tHmask    uint32 // big endian\n\tKeys     []TcU32Key\n}\n\nfunc (msg *TcU32Sel) Len() int {\n\treturn SizeofTcU32Sel + int(msg.Nkeys)*SizeofTcU32Key\n}\n\nfunc DeserializeTcU32Sel(b []byte) *TcU32Sel {\n\tx := &TcU32Sel{}\n\tcopy((*(*[SizeofTcU32Sel]byte)(unsafe.Pointer(x)))[:], b)\n\tnext := SizeofTcU32Sel\n\tvar i uint8\n\tfor i = 0; i < x.Nkeys; i++ {\n\t\tx.Keys = append(x.Keys, *DeserializeTcU32Key(b[next:]))\n\t\tnext += SizeofTcU32Key\n\t}\n\treturn x\n}\n\nfunc (x *TcU32Sel) Serialize() []byte {\n\t// This can't just unsafe.cast because it must iterate through keys.\n\tbuf := make([]byte, x.Len())\n\tcopy(buf, (*(*[SizeofTcU32Sel]byte)(unsafe.Pointer(x)))[:])\n\tnext := SizeofTcU32Sel\n\tfor _, key := range x.Keys {\n\t\tkeyBuf := key.Serialize()\n\t\tcopy(buf[next:], keyBuf)\n\t\tnext += SizeofTcU32Key\n\t}\n\treturn buf\n}\n\ntype TcGen struct {\n\tIndex   uint32\n\tCapab   uint32\n\tAction  int32\n\tRefcnt  int32\n\tBindcnt int32\n}\n\nfunc (msg *TcGen) Len() int {\n\treturn SizeofTcGen\n}\n\nfunc DeserializeTcGen(b []byte) *TcGen {\n\treturn (*TcGen)(unsafe.Pointer(&b[0:SizeofTcGen][0]))\n}\n\nfunc (x *TcGen) Serialize() []byte {\n\treturn (*(*[SizeofTcGen]byte)(unsafe.Pointer(x)))[:]\n}\n\n// #define tc_gen \\\n//   __u32                 index; \\\n//   __u32                 capab; \\\n//   int                   action; \\\n//   int                   refcnt; \\\n//   int                   bindcnt\n\nconst (\n\tTCA_ACT_GACT = 5\n)\n\nconst (\n\tTCA_GACT_UNSPEC = iota\n\tTCA_GACT_TM\n\tTCA_GACT_PARMS\n\tTCA_GACT_PROB\n\tTCA_GACT_MAX = TCA_GACT_PROB\n)\n\ntype TcGact TcGen\n\nconst (\n\tTCA_ACT_BPF = 13\n)\n\nconst (\n\tTCA_ACT_BPF_UNSPEC = iota\n\tTCA_ACT_BPF_TM\n\tTCA_ACT_BPF_PARMS\n\tTCA_ACT_BPF_OPS_LEN\n\tTCA_ACT_BPF_OPS\n\tTCA_ACT_BPF_FD\n\tTCA_ACT_BPF_NAME\n\tTCA_ACT_BPF_MAX = TCA_ACT_BPF_NAME\n)\n\nconst (\n\tTCA_BPF_FLAG_ACT_DIRECT uint32 = 1 << iota\n)\n\nconst (\n\tTCA_BPF_UNSPEC = iota\n\tTCA_BPF_ACT\n\tTCA_BPF_POLICE\n\tTCA_BPF_CLASSID\n\tTCA_BPF_OPS_LEN\n\tTCA_BPF_OPS\n\tTCA_BPF_FD\n\tTCA_BPF_NAME\n\tTCA_BPF_FLAGS\n\tTCA_BPF_FLAGS_GEN\n\tTCA_BPF_TAG\n\tTCA_BPF_ID\n\tTCA_BPF_MAX = TCA_BPF_ID\n)\n\ntype TcBpf TcGen\n\nconst (\n\tTCA_ACT_CONNMARK = 14\n)\n\nconst (\n\tTCA_CONNMARK_UNSPEC = iota\n\tTCA_CONNMARK_PARMS\n\tTCA_CONNMARK_TM\n\tTCA_CONNMARK_MAX = TCA_CONNMARK_TM\n)\n\n// struct tc_connmark {\n//   tc_gen;\n//   __u16 zone;\n// };\n\ntype TcConnmark struct {\n\tTcGen\n\tZone uint16\n}\n\nfunc (msg *TcConnmark) Len() int {\n\treturn SizeofTcConnmark\n}\n\nfunc DeserializeTcConnmark(b []byte) *TcConnmark {\n\treturn (*TcConnmark)(unsafe.Pointer(&b[0:SizeofTcConnmark][0]))\n}\n\nfunc (x *TcConnmark) Serialize() []byte {\n\treturn (*(*[SizeofTcConnmark]byte)(unsafe.Pointer(x)))[:]\n}\n\nconst (\n\tTCA_CSUM_UNSPEC = iota\n\tTCA_CSUM_PARMS\n\tTCA_CSUM_TM\n\tTCA_CSUM_PAD\n\tTCA_CSUM_MAX = TCA_CSUM_PAD\n)\n\n// struct tc_csum {\n//   tc_gen;\n//   __u32 update_flags;\n// }\n\ntype TcCsum struct {\n\tTcGen\n\tUpdateFlags uint32\n}\n\nfunc (msg *TcCsum) Len() int {\n\treturn SizeofTcCsum\n}\n\nfunc DeserializeTcCsum(b []byte) *TcCsum {\n\treturn (*TcCsum)(unsafe.Pointer(&b[0:SizeofTcCsum][0]))\n}\n\nfunc (x *TcCsum) Serialize() []byte {\n\treturn (*(*[SizeofTcCsum]byte)(unsafe.Pointer(x)))[:]\n}\n\nconst (\n\tTCA_ACT_MIRRED = 8\n)\n\nconst (\n\tTCA_MIRRED_UNSPEC = iota\n\tTCA_MIRRED_TM\n\tTCA_MIRRED_PARMS\n\tTCA_MIRRED_MAX = TCA_MIRRED_PARMS\n)\n\n// struct tc_mirred {\n// \ttc_gen;\n// \tint                     eaction;   /* one of IN/EGRESS_MIRROR/REDIR */\n// \t__u32                   ifindex;  /* ifindex of egress port */\n// };\n\ntype TcMirred struct {\n\tTcGen\n\tEaction int32\n\tIfindex uint32\n}\n\nfunc (msg *TcMirred) Len() int {\n\treturn SizeofTcMirred\n}\n\nfunc DeserializeTcMirred(b []byte) *TcMirred {\n\treturn (*TcMirred)(unsafe.Pointer(&b[0:SizeofTcMirred][0]))\n}\n\nfunc (x *TcMirred) Serialize() []byte {\n\treturn (*(*[SizeofTcMirred]byte)(unsafe.Pointer(x)))[:]\n}\n\nconst (\n\tTCA_VLAN_UNSPEC = iota\n\tTCA_VLAN_TM\n\tTCA_VLAN_PARMS\n\tTCA_VLAN_PUSH_VLAN_ID\n\tTCA_VLAN_PUSH_VLAN_PROTOCOL\n\tTCA_VLAN_PAD\n\tTCA_VLAN_PUSH_VLAN_PRIORITY\n\tTCA_VLAN_PUSH_ETH_DST\n\tTCA_VLAN_PUSH_ETH_SRC\n\tTCA_VLAN_MAX\n)\n\n//struct tc_vlan {\n//\ttc_gen;\n//\tint v_action;\n//};\n\ntype TcVlan struct {\n\tTcGen\n\tAction int32\n}\n\nfunc (msg *TcVlan) Len() int {\n\treturn SizeofTcVlan\n}\n\nfunc DeserializeTcVlan(b []byte) *TcVlan {\n\treturn (*TcVlan)(unsafe.Pointer(&b[0:SizeofTcVlan][0]))\n}\n\nfunc (x *TcVlan) Serialize() []byte {\n\treturn (*(*[SizeofTcVlan]byte)(unsafe.Pointer(x)))[:]\n}\n\nconst (\n\tTCA_TUNNEL_KEY_UNSPEC = iota\n\tTCA_TUNNEL_KEY_TM\n\tTCA_TUNNEL_KEY_PARMS\n\tTCA_TUNNEL_KEY_ENC_IPV4_SRC\n\tTCA_TUNNEL_KEY_ENC_IPV4_DST\n\tTCA_TUNNEL_KEY_ENC_IPV6_SRC\n\tTCA_TUNNEL_KEY_ENC_IPV6_DST\n\tTCA_TUNNEL_KEY_ENC_KEY_ID\n\tTCA_TUNNEL_KEY_PAD\n\tTCA_TUNNEL_KEY_ENC_DST_PORT\n\tTCA_TUNNEL_KEY_NO_CSUM\n\tTCA_TUNNEL_KEY_ENC_OPTS\n\tTCA_TUNNEL_KEY_ENC_TOS\n\tTCA_TUNNEL_KEY_ENC_TTL\n\tTCA_TUNNEL_KEY_MAX\n)\n\ntype TcTunnelKey struct {\n\tTcGen\n\tAction int32\n}\n\nfunc (x *TcTunnelKey) Len() int {\n\treturn SizeofTcTunnelKey\n}\n\nfunc DeserializeTunnelKey(b []byte) *TcTunnelKey {\n\treturn (*TcTunnelKey)(unsafe.Pointer(&b[0:SizeofTcTunnelKey][0]))\n}\n\nfunc (x *TcTunnelKey) Serialize() []byte {\n\treturn (*(*[SizeofTcTunnelKey]byte)(unsafe.Pointer(x)))[:]\n}\n\nconst (\n\tTCA_SKBEDIT_UNSPEC = iota\n\tTCA_SKBEDIT_TM\n\tTCA_SKBEDIT_PARMS\n\tTCA_SKBEDIT_PRIORITY\n\tTCA_SKBEDIT_QUEUE_MAPPING\n\tTCA_SKBEDIT_MARK\n\tTCA_SKBEDIT_PAD\n\tTCA_SKBEDIT_PTYPE\n\tTCA_SKBEDIT_MASK\n\tTCA_SKBEDIT_MAX\n)\n\ntype TcSkbEdit struct {\n\tTcGen\n}\n\nfunc (x *TcSkbEdit) Len() int {\n\treturn SizeofTcSkbEdit\n}\n\nfunc DeserializeSkbEdit(b []byte) *TcSkbEdit {\n\treturn (*TcSkbEdit)(unsafe.Pointer(&b[0:SizeofTcSkbEdit][0]))\n}\n\nfunc (x *TcSkbEdit) Serialize() []byte {\n\treturn (*(*[SizeofTcSkbEdit]byte)(unsafe.Pointer(x)))[:]\n}\n\n// struct tc_police {\n// \t__u32\t\t\tindex;\n// \tint\t\t\taction;\n// \t__u32\t\t\tlimit;\n// \t__u32\t\t\tburst;\n// \t__u32\t\t\tmtu;\n// \tstruct tc_ratespec\trate;\n// \tstruct tc_ratespec\tpeakrate;\n// \tint\t\t\t\trefcnt;\n// \tint\t\t\t\tbindcnt;\n// \t__u32\t\t\tcapab;\n// };\n\ntype TcPolice struct {\n\tIndex    uint32\n\tAction   int32\n\tLimit    uint32\n\tBurst    uint32\n\tMtu      uint32\n\tRate     TcRateSpec\n\tPeakRate TcRateSpec\n\tRefcnt   int32\n\tBindcnt  int32\n\tCapab    uint32\n}\n\nfunc (msg *TcPolice) Len() int {\n\treturn SizeofTcPolice\n}\n\nfunc DeserializeTcPolice(b []byte) *TcPolice {\n\treturn (*TcPolice)(unsafe.Pointer(&b[0:SizeofTcPolice][0]))\n}\n\nfunc (x *TcPolice) Serialize() []byte {\n\treturn (*(*[SizeofTcPolice]byte)(unsafe.Pointer(x)))[:]\n}\n\nconst (\n\tTCA_FW_UNSPEC = iota\n\tTCA_FW_CLASSID\n\tTCA_FW_POLICE\n\tTCA_FW_INDEV\n\tTCA_FW_ACT\n\tTCA_FW_MASK\n\tTCA_FW_MAX = TCA_FW_MASK\n)\n\nconst (\n\tTCA_MATCHALL_UNSPEC = iota\n\tTCA_MATCHALL_CLASSID\n\tTCA_MATCHALL_ACT\n\tTCA_MATCHALL_FLAGS\n)\n\nconst (\n\tTCA_FQ_UNSPEC             = iota\n\tTCA_FQ_PLIMIT             // limit of total number of packets in queue\n\tTCA_FQ_FLOW_PLIMIT        // limit of packets per flow\n\tTCA_FQ_QUANTUM            // RR quantum\n\tTCA_FQ_INITIAL_QUANTUM    // RR quantum for new flow\n\tTCA_FQ_RATE_ENABLE        // enable/disable rate limiting\n\tTCA_FQ_FLOW_DEFAULT_RATE  // obsolete do not use\n\tTCA_FQ_FLOW_MAX_RATE      // per flow max rate\n\tTCA_FQ_BUCKETS_LOG        // log2(number of buckets)\n\tTCA_FQ_FLOW_REFILL_DELAY  // flow credit refill delay in usec\n\tTCA_FQ_ORPHAN_MASK        // mask applied to orphaned skb hashes\n\tTCA_FQ_LOW_RATE_THRESHOLD // per packet delay under this rate\n\tTCA_FQ_CE_THRESHOLD       // DCTCP-like CE-marking threshold\n\tTCA_FQ_TIMER_SLACK        // timer slack\n\tTCA_FQ_HORIZON            // time horizon in us\n\tTCA_FQ_HORIZON_DROP       // drop packets beyond horizon, or cap their EDT\n)\n\nconst (\n\tTCA_FQ_CODEL_UNSPEC = iota\n\tTCA_FQ_CODEL_TARGET\n\tTCA_FQ_CODEL_LIMIT\n\tTCA_FQ_CODEL_INTERVAL\n\tTCA_FQ_CODEL_ECN\n\tTCA_FQ_CODEL_FLOWS\n\tTCA_FQ_CODEL_QUANTUM\n\tTCA_FQ_CODEL_CE_THRESHOLD\n\tTCA_FQ_CODEL_DROP_BATCH_SIZE\n\tTCA_FQ_CODEL_MEMORY_LIMIT\n)\n\nconst (\n\tTCA_HFSC_UNSPEC = iota\n\tTCA_HFSC_RSC\n\tTCA_HFSC_FSC\n\tTCA_HFSC_USC\n)\n\nconst (\n\tTCA_FLOWER_UNSPEC = iota\n\tTCA_FLOWER_CLASSID\n\tTCA_FLOWER_INDEV\n\tTCA_FLOWER_ACT\n\tTCA_FLOWER_KEY_ETH_DST       /* ETH_ALEN */\n\tTCA_FLOWER_KEY_ETH_DST_MASK  /* ETH_ALEN */\n\tTCA_FLOWER_KEY_ETH_SRC       /* ETH_ALEN */\n\tTCA_FLOWER_KEY_ETH_SRC_MASK  /* ETH_ALEN */\n\tTCA_FLOWER_KEY_ETH_TYPE      /* be16 */\n\tTCA_FLOWER_KEY_IP_PROTO      /* u8 */\n\tTCA_FLOWER_KEY_IPV4_SRC      /* be32 */\n\tTCA_FLOWER_KEY_IPV4_SRC_MASK /* be32 */\n\tTCA_FLOWER_KEY_IPV4_DST      /* be32 */\n\tTCA_FLOWER_KEY_IPV4_DST_MASK /* be32 */\n\tTCA_FLOWER_KEY_IPV6_SRC      /* struct in6_addr */\n\tTCA_FLOWER_KEY_IPV6_SRC_MASK /* struct in6_addr */\n\tTCA_FLOWER_KEY_IPV6_DST      /* struct in6_addr */\n\tTCA_FLOWER_KEY_IPV6_DST_MASK /* struct in6_addr */\n\tTCA_FLOWER_KEY_TCP_SRC       /* be16 */\n\tTCA_FLOWER_KEY_TCP_DST       /* be16 */\n\tTCA_FLOWER_KEY_UDP_SRC       /* be16 */\n\tTCA_FLOWER_KEY_UDP_DST       /* be16 */\n\n\tTCA_FLOWER_FLAGS\n\tTCA_FLOWER_KEY_VLAN_ID       /* be16 */\n\tTCA_FLOWER_KEY_VLAN_PRIO     /* u8   */\n\tTCA_FLOWER_KEY_VLAN_ETH_TYPE /* be16 */\n\n\tTCA_FLOWER_KEY_ENC_KEY_ID        /* be32 */\n\tTCA_FLOWER_KEY_ENC_IPV4_SRC      /* be32 */\n\tTCA_FLOWER_KEY_ENC_IPV4_SRC_MASK /* be32 */\n\tTCA_FLOWER_KEY_ENC_IPV4_DST      /* be32 */\n\tTCA_FLOWER_KEY_ENC_IPV4_DST_MASK /* be32 */\n\tTCA_FLOWER_KEY_ENC_IPV6_SRC      /* struct in6_addr */\n\tTCA_FLOWER_KEY_ENC_IPV6_SRC_MASK /* struct in6_addr */\n\tTCA_FLOWER_KEY_ENC_IPV6_DST      /* struct in6_addr */\n\tTCA_FLOWER_KEY_ENC_IPV6_DST_MASK /* struct in6_addr */\n\n\tTCA_FLOWER_KEY_TCP_SRC_MASK  /* be16 */\n\tTCA_FLOWER_KEY_TCP_DST_MASK  /* be16 */\n\tTCA_FLOWER_KEY_UDP_SRC_MASK  /* be16 */\n\tTCA_FLOWER_KEY_UDP_DST_MASK  /* be16 */\n\tTCA_FLOWER_KEY_SCTP_SRC_MASK /* be16 */\n\tTCA_FLOWER_KEY_SCTP_DST_MASK /* be16 */\n\n\tTCA_FLOWER_KEY_SCTP_SRC /* be16 */\n\tTCA_FLOWER_KEY_SCTP_DST /* be16 */\n\n\tTCA_FLOWER_KEY_ENC_UDP_SRC_PORT      /* be16 */\n\tTCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK /* be16 */\n\tTCA_FLOWER_KEY_ENC_UDP_DST_PORT      /* be16 */\n\tTCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK /* be16 */\n\n\tTCA_FLOWER_KEY_FLAGS      /* be32 */\n\tTCA_FLOWER_KEY_FLAGS_MASK /* be32 */\n\n\tTCA_FLOWER_KEY_ICMPV4_CODE      /* u8 */\n\tTCA_FLOWER_KEY_ICMPV4_CODE_MASK /* u8 */\n\tTCA_FLOWER_KEY_ICMPV4_TYPE      /* u8 */\n\tTCA_FLOWER_KEY_ICMPV4_TYPE_MASK /* u8 */\n\tTCA_FLOWER_KEY_ICMPV6_CODE      /* u8 */\n\tTCA_FLOWER_KEY_ICMPV6_CODE_MASK /* u8 */\n\tTCA_FLOWER_KEY_ICMPV6_TYPE      /* u8 */\n\tTCA_FLOWER_KEY_ICMPV6_TYPE_MASK /* u8 */\n\n\tTCA_FLOWER_KEY_ARP_SIP      /* be32 */\n\tTCA_FLOWER_KEY_ARP_SIP_MASK /* be32 */\n\tTCA_FLOWER_KEY_ARP_TIP      /* be32 */\n\tTCA_FLOWER_KEY_ARP_TIP_MASK /* be32 */\n\tTCA_FLOWER_KEY_ARP_OP       /* u8 */\n\tTCA_FLOWER_KEY_ARP_OP_MASK  /* u8 */\n\tTCA_FLOWER_KEY_ARP_SHA      /* ETH_ALEN */\n\tTCA_FLOWER_KEY_ARP_SHA_MASK /* ETH_ALEN */\n\tTCA_FLOWER_KEY_ARP_THA      /* ETH_ALEN */\n\tTCA_FLOWER_KEY_ARP_THA_MASK /* ETH_ALEN */\n\n\tTCA_FLOWER_KEY_MPLS_TTL   /* u8 - 8 bits */\n\tTCA_FLOWER_KEY_MPLS_BOS   /* u8 - 1 bit */\n\tTCA_FLOWER_KEY_MPLS_TC    /* u8 - 3 bits */\n\tTCA_FLOWER_KEY_MPLS_LABEL /* be32 - 20 bits */\n\n\tTCA_FLOWER_KEY_TCP_FLAGS      /* be16 */\n\tTCA_FLOWER_KEY_TCP_FLAGS_MASK /* be16 */\n\n\tTCA_FLOWER_KEY_IP_TOS      /* u8 */\n\tTCA_FLOWER_KEY_IP_TOS_MASK /* u8 */\n\tTCA_FLOWER_KEY_IP_TTL      /* u8 */\n\tTCA_FLOWER_KEY_IP_TTL_MASK /* u8 */\n\n\tTCA_FLOWER_KEY_CVLAN_ID       /* be16 */\n\tTCA_FLOWER_KEY_CVLAN_PRIO     /* u8   */\n\tTCA_FLOWER_KEY_CVLAN_ETH_TYPE /* be16 */\n\n\tTCA_FLOWER_KEY_ENC_IP_TOS      /* u8 */\n\tTCA_FLOWER_KEY_ENC_IP_TOS_MASK /* u8 */\n\tTCA_FLOWER_KEY_ENC_IP_TTL      /* u8 */\n\tTCA_FLOWER_KEY_ENC_IP_TTL_MASK /* u8 */\n\n\tTCA_FLOWER_KEY_ENC_OPTS\n\tTCA_FLOWER_KEY_ENC_OPTS_MASK\n\n\tTCA_FLOWER_IN_HW_COUNT\n\n\tTCA_FLOWER_KEY_PORT_SRC_MIN /* be16 */\n\tTCA_FLOWER_KEY_PORT_SRC_MAX /* be16 */\n\tTCA_FLOWER_KEY_PORT_DST_MIN /* be16 */\n\tTCA_FLOWER_KEY_PORT_DST_MAX /* be16 */\n\n\t__TCA_FLOWER_MAX\n)\n\nconst TCA_CLS_FLAGS_SKIP_HW = 1 << 0 /* don't offload filter to HW */\nconst TCA_CLS_FLAGS_SKIP_SW = 1 << 1 /* don't use filter in SW */\n\n// struct tc_sfq_qopt {\n// \tunsigned\tquantum;\t/* Bytes per round allocated to flow */\n// \tint\t\tperturb_period;\t/* Period of hash perturbation */\n// \t__u32\t\tlimit;\t\t/* Maximal packets in queue */\n// \tunsigned\tdivisor;\t/* Hash divisor  */\n// \tunsigned\tflows;\t\t/* Maximal number of flows  */\n// };\n\ntype TcSfqQopt struct {\n\tQuantum uint32\n\tPerturb int32\n\tLimit   uint32\n\tDivisor uint32\n\tFlows   uint32\n}\n\nfunc (x *TcSfqQopt) Len() int {\n\treturn SizeofTcSfqQopt\n}\n\nfunc DeserializeTcSfqQopt(b []byte) *TcSfqQopt {\n\treturn (*TcSfqQopt)(unsafe.Pointer(&b[0:SizeofTcSfqQopt][0]))\n}\n\nfunc (x *TcSfqQopt) Serialize() []byte {\n\treturn (*(*[SizeofTcSfqQopt]byte)(unsafe.Pointer(x)))[:]\n}\n\n//\tstruct tc_sfqred_stats {\n//\t\t__u32           prob_drop;      /* Early drops, below max threshold */\n//\t\t__u32           forced_drop;\t/* Early drops, after max threshold */\n//\t\t__u32           prob_mark;      /* Marked packets, below max threshold */\n//\t\t__u32           forced_mark;    /* Marked packets, after max threshold */\n//\t\t__u32           prob_mark_head; /* Marked packets, below max threshold */\n//\t\t__u32           forced_mark_head;/* Marked packets, after max threshold */\n//\t};\ntype TcSfqRedStats struct {\n\tProbDrop       uint32\n\tForcedDrop     uint32\n\tProbMark       uint32\n\tForcedMark     uint32\n\tProbMarkHead   uint32\n\tForcedMarkHead uint32\n}\n\nfunc (x *TcSfqRedStats) Len() int {\n\treturn SizeofTcSfqRedStats\n}\n\nfunc DeserializeTcSfqRedStats(b []byte) *TcSfqRedStats {\n\treturn (*TcSfqRedStats)(unsafe.Pointer(&b[0:SizeofTcSfqRedStats][0]))\n}\n\nfunc (x *TcSfqRedStats) Serialize() []byte {\n\treturn (*(*[SizeofTcSfqRedStats]byte)(unsafe.Pointer(x)))[:]\n}\n\n//\tstruct tc_sfq_qopt_v1 {\n//\t\tstruct tc_sfq_qopt v0;\n//\t\tunsigned int\tdepth;\t\t/* max number of packets per flow */\n//\t\tunsigned int\theaddrop;\n//\n// /* SFQRED parameters */\n//\n//\t__u32\t\tlimit;\t\t/* HARD maximal flow queue length (bytes) */\n//\t__u32\t\tqth_min;\t/* Min average length threshold (bytes) */\n//\t__u32\t\tqth_max;\t/* Max average length threshold (bytes) */\n//\tunsigned char   Wlog;\t\t/* log(W)\t\t*/\n//\tunsigned char   Plog;\t\t/* log(P_max/(qth_max-qth_min))\t*/\n//\tunsigned char   Scell_log;\t/* cell size for idle damping */\n//\tunsigned char\tflags;\n//\t__u32\t\tmax_P;\t\t/* probability, high resolution */\n//\n// /* SFQRED stats */\n//\n//\t\tstruct tc_sfqred_stats stats;\n//\t};\ntype TcSfqQoptV1 struct {\n\tTcSfqQopt\n\tDepth    uint32\n\tHeadDrop uint32\n\tLimit    uint32\n\tQthMin   uint32\n\tQthMax   uint32\n\tWlog     byte\n\tPlog     byte\n\tScellLog byte\n\tFlags    byte\n\tMaxP     uint32\n\tTcSfqRedStats\n}\n\nfunc (x *TcSfqQoptV1) Len() int {\n\treturn SizeofTcSfqQoptV1\n}\n\nfunc DeserializeTcSfqQoptV1(b []byte) *TcSfqQoptV1 {\n\treturn (*TcSfqQoptV1)(unsafe.Pointer(&b[0:SizeofTcSfqQoptV1][0]))\n}\n\nfunc (x *TcSfqQoptV1) Serialize() []byte {\n\treturn (*(*[SizeofTcSfqQoptV1]byte)(unsafe.Pointer(x)))[:]\n}\n\n// IPProto represents Flower ip_proto attribute\ntype IPProto uint8\n\nconst (\n\tIPPROTO_TCP    IPProto = unix.IPPROTO_TCP\n\tIPPROTO_UDP    IPProto = unix.IPPROTO_UDP\n\tIPPROTO_SCTP   IPProto = unix.IPPROTO_SCTP\n\tIPPROTO_ICMP   IPProto = unix.IPPROTO_ICMP\n\tIPPROTO_ICMPV6 IPProto = unix.IPPROTO_ICMPV6\n)\n\nfunc (i IPProto) Serialize() []byte {\n\tarr := make([]byte, 1)\n\tarr[0] = byte(i)\n\treturn arr\n}\n\nfunc (i IPProto) String() string {\n\tswitch i {\n\tcase IPPROTO_TCP:\n\t\treturn \"tcp\"\n\tcase IPPROTO_UDP:\n\t\treturn \"udp\"\n\tcase IPPROTO_SCTP:\n\t\treturn \"sctp\"\n\tcase IPPROTO_ICMP:\n\t\treturn \"icmp\"\n\tcase IPPROTO_ICMPV6:\n\t\treturn \"icmpv6\"\n\t}\n\treturn fmt.Sprintf(\"%d\", i)\n}\n\nconst (\n\tMaxOffs        = 128\n\tSizeOfPeditSel = 24\n\tSizeOfPeditKey = 24\n\n\tTCA_PEDIT_KEY_EX_HTYPE = 1\n\tTCA_PEDIT_KEY_EX_CMD   = 2\n)\n\nconst (\n\tTCA_PEDIT_UNSPEC = iota\n\tTCA_PEDIT_TM\n\tTCA_PEDIT_PARMS\n\tTCA_PEDIT_PAD\n\tTCA_PEDIT_PARMS_EX\n\tTCA_PEDIT_KEYS_EX\n\tTCA_PEDIT_KEY_EX\n)\n\n// /* TCA_PEDIT_KEY_EX_HDR_TYPE_NETWROK is a special case for legacy users. It\n//   - means no specific header type - offset is relative to the network layer\n//     */\ntype PeditHeaderType uint16\n\nconst (\n\tTCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK = iota\n\tTCA_PEDIT_KEY_EX_HDR_TYPE_ETH\n\tTCA_PEDIT_KEY_EX_HDR_TYPE_IP4\n\tTCA_PEDIT_KEY_EX_HDR_TYPE_IP6\n\tTCA_PEDIT_KEY_EX_HDR_TYPE_TCP\n\tTCA_PEDIT_KEY_EX_HDR_TYPE_UDP\n\t__PEDIT_HDR_TYPE_MAX\n)\n\ntype PeditCmd uint16\n\nconst (\n\tTCA_PEDIT_KEY_EX_CMD_SET = 0\n\tTCA_PEDIT_KEY_EX_CMD_ADD = 1\n)\n\ntype TcPeditSel struct {\n\tTcGen\n\tNKeys uint8\n\tFlags uint8\n}\n\nfunc DeserializeTcPeditKey(b []byte) *TcPeditKey {\n\treturn (*TcPeditKey)(unsafe.Pointer(&b[0:SizeOfPeditKey][0]))\n}\n\nfunc DeserializeTcPedit(b []byte) (*TcPeditSel, []TcPeditKey) {\n\tx := &TcPeditSel{}\n\tcopy((*(*[SizeOfPeditSel]byte)(unsafe.Pointer(x)))[:SizeOfPeditSel], b)\n\n\tvar keys []TcPeditKey\n\n\tnext := SizeOfPeditKey\n\tvar i uint8\n\tfor i = 0; i < x.NKeys; i++ {\n\t\tkeys = append(keys, *DeserializeTcPeditKey(b[next:]))\n\t\tnext += SizeOfPeditKey\n\t}\n\n\treturn x, keys\n}\n\ntype TcPeditKey struct {\n\tMask    uint32\n\tVal     uint32\n\tOff     uint32\n\tAt      uint32\n\tOffMask uint32\n\tShift   uint32\n}\n\ntype TcPeditKeyEx struct {\n\tHeaderType PeditHeaderType\n\tCmd        PeditCmd\n}\n\ntype TcPedit struct {\n\tSel    TcPeditSel\n\tKeys   []TcPeditKey\n\tKeysEx []TcPeditKeyEx\n\tExtend uint8\n}\n\nfunc (p *TcPedit) Encode(parent *RtAttr) {\n\tparent.AddRtAttr(TCA_ACT_KIND, ZeroTerminated(\"pedit\"))\n\tactOpts := parent.AddRtAttr(TCA_ACT_OPTIONS, nil)\n\n\tbbuf := bytes.NewBuffer(make([]byte, 0, int(unsafe.Sizeof(p.Sel)+unsafe.Sizeof(p.Keys))))\n\n\tbbuf.Write((*(*[SizeOfPeditSel]byte)(unsafe.Pointer(&p.Sel)))[:])\n\n\tfor i := uint8(0); i < p.Sel.NKeys; i++ {\n\t\tbbuf.Write((*(*[SizeOfPeditKey]byte)(unsafe.Pointer(&p.Keys[i])))[:])\n\t}\n\tactOpts.AddRtAttr(TCA_PEDIT_PARMS_EX, bbuf.Bytes())\n\n\texAttrs := actOpts.AddRtAttr(int(TCA_PEDIT_KEYS_EX|NLA_F_NESTED), nil)\n\tfor i := uint8(0); i < p.Sel.NKeys; i++ {\n\t\tkeyAttr := exAttrs.AddRtAttr(int(TCA_PEDIT_KEY_EX|NLA_F_NESTED), nil)\n\n\t\thtypeBuf := make([]byte, 2)\n\t\tcmdBuf := make([]byte, 2)\n\n\t\tNativeEndian().PutUint16(htypeBuf, uint16(p.KeysEx[i].HeaderType))\n\t\tNativeEndian().PutUint16(cmdBuf, uint16(p.KeysEx[i].Cmd))\n\n\t\tkeyAttr.AddRtAttr(TCA_PEDIT_KEY_EX_HTYPE, htypeBuf)\n\t\tkeyAttr.AddRtAttr(TCA_PEDIT_KEY_EX_CMD, cmdBuf)\n\t}\n}\n\nfunc (p *TcPedit) SetEthDst(mac net.HardwareAddr) {\n\tu32 := NativeEndian().Uint32(mac)\n\tu16 := NativeEndian().Uint16(mac[4:])\n\n\ttKey := TcPeditKey{}\n\ttKeyEx := TcPeditKeyEx{}\n\n\ttKey.Val = u32\n\n\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_ETH\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\tp.Sel.NKeys++\n\n\ttKey = TcPeditKey{}\n\ttKeyEx = TcPeditKeyEx{}\n\n\ttKey.Val = uint32(u16)\n\ttKey.Mask = 0xffff0000\n\ttKey.Off = 4\n\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_ETH\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\n\tp.Sel.NKeys++\n}\n\nfunc (p *TcPedit) SetEthSrc(mac net.HardwareAddr) {\n\tu16 := NativeEndian().Uint16(mac)\n\tu32 := NativeEndian().Uint32(mac[2:])\n\n\ttKey := TcPeditKey{}\n\ttKeyEx := TcPeditKeyEx{}\n\n\ttKey.Val = uint32(u16) << 16\n\ttKey.Mask = 0x0000ffff\n\ttKey.Off = 4\n\n\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_ETH\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\tp.Sel.NKeys++\n\n\ttKey = TcPeditKey{}\n\ttKeyEx = TcPeditKeyEx{}\n\n\ttKey.Val = u32\n\ttKey.Mask = 0\n\ttKey.Off = 8\n\n\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_ETH\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\n\tp.Sel.NKeys++\n}\n\nfunc (p *TcPedit) SetIPv6Src(ip6 net.IP) {\n\tu32 := NativeEndian().Uint32(ip6[:4])\n\n\ttKey := TcPeditKey{}\n\ttKeyEx := TcPeditKeyEx{}\n\n\ttKey.Val = u32\n\ttKey.Off = 8\n\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_IP6\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\tp.Sel.NKeys++\n\n\tu32 = NativeEndian().Uint32(ip6[4:8])\n\ttKey = TcPeditKey{}\n\ttKeyEx = TcPeditKeyEx{}\n\n\ttKey.Val = u32\n\ttKey.Off = 12\n\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_IP6\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\n\tp.Sel.NKeys++\n\n\tu32 = NativeEndian().Uint32(ip6[8:12])\n\ttKey = TcPeditKey{}\n\ttKeyEx = TcPeditKeyEx{}\n\n\ttKey.Val = u32\n\ttKey.Off = 16\n\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_IP6\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\n\tp.Sel.NKeys++\n\n\tu32 = NativeEndian().Uint32(ip6[12:16])\n\ttKey = TcPeditKey{}\n\ttKeyEx = TcPeditKeyEx{}\n\n\ttKey.Val = u32\n\ttKey.Off = 20\n\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_IP6\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\n\tp.Sel.NKeys++\n}\n\nfunc (p *TcPedit) SetDstIP(ip net.IP) {\n\tif ip.To4() != nil {\n\t\tp.SetIPv4Dst(ip)\n\t} else {\n\t\tp.SetIPv6Dst(ip)\n\t}\n}\n\nfunc (p *TcPedit) SetSrcIP(ip net.IP) {\n\tif ip.To4() != nil {\n\t\tp.SetIPv4Src(ip)\n\t} else {\n\t\tp.SetIPv6Src(ip)\n\t}\n}\n\nfunc (p *TcPedit) SetIPv6Dst(ip6 net.IP) {\n\tu32 := NativeEndian().Uint32(ip6[:4])\n\n\ttKey := TcPeditKey{}\n\ttKeyEx := TcPeditKeyEx{}\n\n\ttKey.Val = u32\n\ttKey.Off = 24\n\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_IP6\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\tp.Sel.NKeys++\n\n\tu32 = NativeEndian().Uint32(ip6[4:8])\n\ttKey = TcPeditKey{}\n\ttKeyEx = TcPeditKeyEx{}\n\n\ttKey.Val = u32\n\ttKey.Off = 28\n\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_IP6\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\n\tp.Sel.NKeys++\n\n\tu32 = NativeEndian().Uint32(ip6[8:12])\n\ttKey = TcPeditKey{}\n\ttKeyEx = TcPeditKeyEx{}\n\n\ttKey.Val = u32\n\ttKey.Off = 32\n\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_IP6\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\n\tp.Sel.NKeys++\n\n\tu32 = NativeEndian().Uint32(ip6[12:16])\n\ttKey = TcPeditKey{}\n\ttKeyEx = TcPeditKeyEx{}\n\n\ttKey.Val = u32\n\ttKey.Off = 36\n\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_IP6\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\n\tp.Sel.NKeys++\n}\n\nfunc (p *TcPedit) SetIPv4Src(ip net.IP) {\n\tu32 := NativeEndian().Uint32(ip.To4())\n\n\ttKey := TcPeditKey{}\n\ttKeyEx := TcPeditKeyEx{}\n\n\ttKey.Val = u32\n\ttKey.Off = 12\n\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_IP4\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\tp.Sel.NKeys++\n}\n\nfunc (p *TcPedit) SetIPv4Dst(ip net.IP) {\n\tu32 := NativeEndian().Uint32(ip.To4())\n\n\ttKey := TcPeditKey{}\n\ttKeyEx := TcPeditKeyEx{}\n\n\ttKey.Val = u32\n\ttKey.Off = 16\n\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_IP4\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\tp.Sel.NKeys++\n}\n\n// SetDstPort only tcp and udp are supported to set port\nfunc (p *TcPedit) SetDstPort(dstPort uint16, protocol uint8) {\n\ttKey := TcPeditKey{}\n\ttKeyEx := TcPeditKeyEx{}\n\n\tswitch protocol {\n\tcase unix.IPPROTO_TCP:\n\t\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_TCP\n\tcase unix.IPPROTO_UDP:\n\t\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_UDP\n\tdefault:\n\t\treturn\n\t}\n\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\ttKey.Val = uint32(Swap16(dstPort)) << 16\n\ttKey.Mask = 0x0000ffff\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\tp.Sel.NKeys++\n}\n\n// SetSrcPort only tcp and udp are supported to set port\nfunc (p *TcPedit) SetSrcPort(srcPort uint16, protocol uint8) {\n\ttKey := TcPeditKey{}\n\ttKeyEx := TcPeditKeyEx{}\n\n\tswitch protocol {\n\tcase unix.IPPROTO_TCP:\n\t\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_TCP\n\tcase unix.IPPROTO_UDP:\n\t\ttKeyEx.HeaderType = TCA_PEDIT_KEY_EX_HDR_TYPE_UDP\n\tdefault:\n\t\treturn\n\t}\n\n\ttKeyEx.Cmd = TCA_PEDIT_KEY_EX_CMD_SET\n\n\ttKey.Val = uint32(Swap16(srcPort))\n\ttKey.Mask = 0xffff0000\n\tp.Keys = append(p.Keys, tKey)\n\tp.KeysEx = append(p.KeysEx, tKeyEx)\n\tp.Sel.NKeys++\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/vdpa_linux.go",
    "content": "package nl\n\nconst (\n\tVDPA_GENL_NAME    = \"vdpa\"\n\tVDPA_GENL_VERSION = 0x1\n)\n\nconst (\n\tVDPA_CMD_UNSPEC = iota\n\tVDPA_CMD_MGMTDEV_NEW\n\tVDPA_CMD_MGMTDEV_GET /* can dump */\n\tVDPA_CMD_DEV_NEW\n\tVDPA_CMD_DEV_DEL\n\tVDPA_CMD_DEV_GET        /* can dump */\n\tVDPA_CMD_DEV_CONFIG_GET /* can dump */\n\tVDPA_CMD_DEV_VSTATS_GET\n)\n\nconst (\n\tVDPA_ATTR_UNSPEC = iota\n\tVDPA_ATTR_MGMTDEV_BUS_NAME\n\tVDPA_ATTR_MGMTDEV_DEV_NAME\n\tVDPA_ATTR_MGMTDEV_SUPPORTED_CLASSES\n\tVDPA_ATTR_DEV_NAME\n\tVDPA_ATTR_DEV_ID\n\tVDPA_ATTR_DEV_VENDOR_ID\n\tVDPA_ATTR_DEV_MAX_VQS\n\tVDPA_ATTR_DEV_MAX_VQ_SIZE\n\tVDPA_ATTR_DEV_MIN_VQ_SIZE\n\tVDPA_ATTR_DEV_NET_CFG_MACADDR\n\tVDPA_ATTR_DEV_NET_STATUS\n\tVDPA_ATTR_DEV_NET_CFG_MAX_VQP\n\tVDPA_ATTR_DEV_NET_CFG_MTU\n\tVDPA_ATTR_DEV_NEGOTIATED_FEATURES\n\tVDPA_ATTR_DEV_MGMTDEV_MAX_VQS\n\tVDPA_ATTR_DEV_SUPPORTED_FEATURES\n\tVDPA_ATTR_DEV_QUEUE_INDEX\n\tVDPA_ATTR_DEV_VENDOR_ATTR_NAME\n\tVDPA_ATTR_DEV_VENDOR_ATTR_VALUE\n\tVDPA_ATTR_DEV_FEATURES\n)\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/xfrm_linux.go",
    "content": "package nl\n\nimport (\n\t\"bytes\"\n\t\"net\"\n\t\"unsafe\"\n)\n\n// Infinity for packet and byte counts\nconst (\n\tXFRM_INF = ^uint64(0)\n)\n\ntype XfrmMsgType uint8\n\ntype XfrmMsg interface {\n\tType() XfrmMsgType\n}\n\n// Message Types\nconst (\n\tXFRM_MSG_BASE        XfrmMsgType = 0x10\n\tXFRM_MSG_NEWSA                   = 0x10\n\tXFRM_MSG_DELSA                   = 0x11\n\tXFRM_MSG_GETSA                   = 0x12\n\tXFRM_MSG_NEWPOLICY               = 0x13\n\tXFRM_MSG_DELPOLICY               = 0x14\n\tXFRM_MSG_GETPOLICY               = 0x15\n\tXFRM_MSG_ALLOCSPI                = 0x16\n\tXFRM_MSG_ACQUIRE                 = 0x17\n\tXFRM_MSG_EXPIRE                  = 0x18\n\tXFRM_MSG_UPDPOLICY               = 0x19\n\tXFRM_MSG_UPDSA                   = 0x1a\n\tXFRM_MSG_POLEXPIRE               = 0x1b\n\tXFRM_MSG_FLUSHSA                 = 0x1c\n\tXFRM_MSG_FLUSHPOLICY             = 0x1d\n\tXFRM_MSG_NEWAE                   = 0x1e\n\tXFRM_MSG_GETAE                   = 0x1f\n\tXFRM_MSG_REPORT                  = 0x20\n\tXFRM_MSG_MIGRATE                 = 0x21\n\tXFRM_MSG_NEWSADINFO              = 0x22\n\tXFRM_MSG_GETSADINFO              = 0x23\n\tXFRM_MSG_NEWSPDINFO              = 0x24\n\tXFRM_MSG_GETSPDINFO              = 0x25\n\tXFRM_MSG_MAPPING                 = 0x26\n\tXFRM_MSG_MAX                     = 0x26\n\tXFRM_NR_MSGTYPES                 = 0x17\n)\n\n// Attribute types\nconst (\n\t/* Netlink message attributes.  */\n\tXFRMA_UNSPEC    = iota\n\tXFRMA_ALG_AUTH  /* struct xfrm_algo */\n\tXFRMA_ALG_CRYPT /* struct xfrm_algo */\n\tXFRMA_ALG_COMP  /* struct xfrm_algo */\n\tXFRMA_ENCAP     /* struct xfrm_algo + struct xfrm_encap_tmpl */\n\tXFRMA_TMPL      /* 1 or more struct xfrm_user_tmpl */\n\tXFRMA_SA        /* struct xfrm_usersa_info  */\n\tXFRMA_POLICY    /* struct xfrm_userpolicy_info */\n\tXFRMA_SEC_CTX   /* struct xfrm_sec_ctx */\n\tXFRMA_LTIME_VAL\n\tXFRMA_REPLAY_VAL\n\tXFRMA_REPLAY_THRESH\n\tXFRMA_ETIMER_THRESH\n\tXFRMA_SRCADDR     /* xfrm_address_t */\n\tXFRMA_COADDR      /* xfrm_address_t */\n\tXFRMA_LASTUSED    /* unsigned long  */\n\tXFRMA_POLICY_TYPE /* struct xfrm_userpolicy_type */\n\tXFRMA_MIGRATE\n\tXFRMA_ALG_AEAD       /* struct xfrm_algo_aead */\n\tXFRMA_KMADDRESS      /* struct xfrm_user_kmaddress */\n\tXFRMA_ALG_AUTH_TRUNC /* struct xfrm_algo_auth */\n\tXFRMA_MARK           /* struct xfrm_mark */\n\tXFRMA_TFCPAD         /* __u32 */\n\tXFRMA_REPLAY_ESN_VAL /* struct xfrm_replay_esn */\n\tXFRMA_SA_EXTRA_FLAGS /* __u32 */\n\tXFRMA_PROTO          /* __u8 */\n\tXFRMA_ADDRESS_FILTER /* struct xfrm_address_filter */\n\tXFRMA_PAD\n\tXFRMA_OFFLOAD_DEV            /* struct xfrm_state_offload */\n\tXFRMA_SET_MARK               /* __u32 */\n\tXFRMA_SET_MARK_MASK          /* __u32 */\n\tXFRMA_IF_ID                  /* __u32 */\n\tXFRMA_MTIMER_THRESH          /* __u32 in seconds for input SA */\n\tXFRMA_SA_DIR                 /* __u8 */\n\tXFRMA_NAT_KEEPALIVE_INTERVAL /* __u32 in seconds for NAT keepalive */\n\tXFRMA_SA_PCPU                /* __u32 */\n\n\tXFRMA_MAX = iota - 1\n)\n\nconst XFRMA_OUTPUT_MARK = XFRMA_SET_MARK\n\nconst (\n\tSizeofXfrmAddress     = 0x10\n\tSizeofXfrmSelector    = 0x38\n\tSizeofXfrmLifetimeCfg = 0x40\n\tSizeofXfrmLifetimeCur = 0x20\n\tSizeofXfrmId          = 0x18\n\tSizeofXfrmMark        = 0x08\n)\n\n// Netlink groups\nconst (\n\tXFRMNLGRP_NONE    = 0x0\n\tXFRMNLGRP_ACQUIRE = 0x1\n\tXFRMNLGRP_EXPIRE  = 0x2\n\tXFRMNLGRP_SA      = 0x3\n\tXFRMNLGRP_POLICY  = 0x4\n\tXFRMNLGRP_AEVENTS = 0x5\n\tXFRMNLGRP_REPORT  = 0x6\n\tXFRMNLGRP_MIGRATE = 0x7\n\tXFRMNLGRP_MAPPING = 0x8\n\t__XFRMNLGRP_MAX   = 0x9\n)\n\n// typedef union {\n//   __be32    a4;\n//   __be32    a6[4];\n// } xfrm_address_t;\n\ntype XfrmAddress [SizeofXfrmAddress]byte\n\nfunc (x *XfrmAddress) ToIP() net.IP {\n\tvar empty = [12]byte{}\n\tip := make(net.IP, net.IPv6len)\n\tif bytes.Equal(x[4:16], empty[:]) {\n\t\tip[10] = 0xff\n\t\tip[11] = 0xff\n\t\tcopy(ip[12:16], x[0:4])\n\t} else {\n\t\tcopy(ip[:], x[:])\n\t}\n\treturn ip\n}\n\n// family is only used when x and prefixlen are both 0\nfunc (x *XfrmAddress) ToIPNet(prefixlen uint8, family uint16) *net.IPNet {\n\tempty := [SizeofXfrmAddress]byte{}\n\tif bytes.Equal(x[:], empty[:]) && prefixlen == 0 {\n\t\tif family == FAMILY_V6 {\n\t\t\treturn &net.IPNet{IP: net.ParseIP(\"::\"), Mask: net.CIDRMask(int(prefixlen), 128)}\n\t\t}\n\t\treturn &net.IPNet{IP: net.ParseIP(\"0.0.0.0\"), Mask: net.CIDRMask(int(prefixlen), 32)}\n\t}\n\tip := x.ToIP()\n\tif GetIPFamily(ip) == FAMILY_V4 {\n\t\treturn &net.IPNet{IP: ip, Mask: net.CIDRMask(int(prefixlen), 32)}\n\t}\n\treturn &net.IPNet{IP: ip, Mask: net.CIDRMask(int(prefixlen), 128)}\n}\n\nfunc (x *XfrmAddress) FromIP(ip net.IP) {\n\tvar empty = [16]byte{}\n\tif len(ip) < net.IPv4len {\n\t\tcopy(x[4:16], empty[:])\n\t} else if GetIPFamily(ip) == FAMILY_V4 {\n\t\tcopy(x[0:4], ip.To4()[0:4])\n\t\tcopy(x[4:16], empty[:12])\n\t} else {\n\t\tcopy(x[0:16], ip.To16()[0:16])\n\t}\n}\n\nfunc DeserializeXfrmAddress(b []byte) *XfrmAddress {\n\treturn (*XfrmAddress)(unsafe.Pointer(&b[0:SizeofXfrmAddress][0]))\n}\n\nfunc (x *XfrmAddress) Serialize() []byte {\n\treturn (*(*[SizeofXfrmAddress]byte)(unsafe.Pointer(x)))[:]\n}\n\n// struct xfrm_selector {\n//   xfrm_address_t  daddr;\n//   xfrm_address_t  saddr;\n//   __be16  dport;\n//   __be16  dport_mask;\n//   __be16  sport;\n//   __be16  sport_mask;\n//   __u16 family;\n//   __u8  prefixlen_d;\n//   __u8  prefixlen_s;\n//   __u8  proto;\n//   int ifindex;\n//   __kernel_uid32_t  user;\n// };\n\ntype XfrmSelector struct {\n\tDaddr      XfrmAddress\n\tSaddr      XfrmAddress\n\tDport      uint16 // big endian\n\tDportMask  uint16 // big endian\n\tSport      uint16 // big endian\n\tSportMask  uint16 // big endian\n\tFamily     uint16\n\tPrefixlenD uint8\n\tPrefixlenS uint8\n\tProto      uint8\n\tPad        [3]byte\n\tIfindex    int32\n\tUser       uint32\n}\n\nfunc (msg *XfrmSelector) Len() int {\n\treturn SizeofXfrmSelector\n}\n\nfunc DeserializeXfrmSelector(b []byte) *XfrmSelector {\n\treturn (*XfrmSelector)(unsafe.Pointer(&b[0:SizeofXfrmSelector][0]))\n}\n\nfunc (msg *XfrmSelector) Serialize() []byte {\n\treturn (*(*[SizeofXfrmSelector]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct xfrm_lifetime_cfg {\n//   __u64 soft_byte_limit;\n//   __u64 hard_byte_limit;\n//   __u64 soft_packet_limit;\n//   __u64 hard_packet_limit;\n//   __u64 soft_add_expires_seconds;\n//   __u64 hard_add_expires_seconds;\n//   __u64 soft_use_expires_seconds;\n//   __u64 hard_use_expires_seconds;\n// };\n//\n\ntype XfrmLifetimeCfg struct {\n\tSoftByteLimit         uint64\n\tHardByteLimit         uint64\n\tSoftPacketLimit       uint64\n\tHardPacketLimit       uint64\n\tSoftAddExpiresSeconds uint64\n\tHardAddExpiresSeconds uint64\n\tSoftUseExpiresSeconds uint64\n\tHardUseExpiresSeconds uint64\n}\n\nfunc (msg *XfrmLifetimeCfg) Len() int {\n\treturn SizeofXfrmLifetimeCfg\n}\n\nfunc DeserializeXfrmLifetimeCfg(b []byte) *XfrmLifetimeCfg {\n\treturn (*XfrmLifetimeCfg)(unsafe.Pointer(&b[0:SizeofXfrmLifetimeCfg][0]))\n}\n\nfunc (msg *XfrmLifetimeCfg) Serialize() []byte {\n\treturn (*(*[SizeofXfrmLifetimeCfg]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct xfrm_lifetime_cur {\n//   __u64 bytes;\n//   __u64 packets;\n//   __u64 add_time;\n//   __u64 use_time;\n// };\n\ntype XfrmLifetimeCur struct {\n\tBytes   uint64\n\tPackets uint64\n\tAddTime uint64\n\tUseTime uint64\n}\n\nfunc (msg *XfrmLifetimeCur) Len() int {\n\treturn SizeofXfrmLifetimeCur\n}\n\nfunc DeserializeXfrmLifetimeCur(b []byte) *XfrmLifetimeCur {\n\treturn (*XfrmLifetimeCur)(unsafe.Pointer(&b[0:SizeofXfrmLifetimeCur][0]))\n}\n\nfunc (msg *XfrmLifetimeCur) Serialize() []byte {\n\treturn (*(*[SizeofXfrmLifetimeCur]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct xfrm_id {\n//   xfrm_address_t  daddr;\n//   __be32    spi;\n//   __u8    proto;\n// };\n\ntype XfrmId struct {\n\tDaddr XfrmAddress\n\tSpi   uint32 // big endian\n\tProto uint8\n\tPad   [3]byte\n}\n\nfunc (msg *XfrmId) Len() int {\n\treturn SizeofXfrmId\n}\n\nfunc DeserializeXfrmId(b []byte) *XfrmId {\n\treturn (*XfrmId)(unsafe.Pointer(&b[0:SizeofXfrmId][0]))\n}\n\nfunc (msg *XfrmId) Serialize() []byte {\n\treturn (*(*[SizeofXfrmId]byte)(unsafe.Pointer(msg)))[:]\n}\n\ntype XfrmMark struct {\n\tValue uint32\n\tMask  uint32\n}\n\nfunc (msg *XfrmMark) Len() int {\n\treturn SizeofXfrmMark\n}\n\nfunc DeserializeXfrmMark(b []byte) *XfrmMark {\n\treturn (*XfrmMark)(unsafe.Pointer(&b[0:SizeofXfrmMark][0]))\n}\n\nfunc (msg *XfrmMark) Serialize() []byte {\n\treturn (*(*[SizeofXfrmMark]byte)(unsafe.Pointer(msg)))[:]\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/xfrm_monitor_linux.go",
    "content": "package nl\n\nimport (\n\t\"unsafe\"\n)\n\nconst (\n\tSizeofXfrmUserExpire = 0xe8\n)\n\n// struct xfrm_user_expire {\n// \tstruct xfrm_usersa_info\t\tstate;\n// \t__u8\t\t\t\thard;\n// };\n\ntype XfrmUserExpire struct {\n\tXfrmUsersaInfo XfrmUsersaInfo\n\tHard           uint8\n\tPad            [7]byte\n}\n\nfunc (msg *XfrmUserExpire) Len() int {\n\treturn SizeofXfrmUserExpire\n}\n\nfunc DeserializeXfrmUserExpire(b []byte) *XfrmUserExpire {\n\treturn (*XfrmUserExpire)(unsafe.Pointer(&b[0:SizeofXfrmUserExpire][0]))\n}\n\nfunc (msg *XfrmUserExpire) Serialize() []byte {\n\treturn (*(*[SizeofXfrmUserExpire]byte)(unsafe.Pointer(msg)))[:]\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/xfrm_policy_linux.go",
    "content": "package nl\n\nimport (\n\t\"unsafe\"\n)\n\nconst (\n\tSizeofXfrmUserpolicyId   = 0x40\n\tSizeofXfrmUserpolicyInfo = 0xa8\n\tSizeofXfrmUserTmpl       = 0x40\n)\n\n// struct xfrm_userpolicy_id {\n//   struct xfrm_selector    sel;\n//   __u32       index;\n//   __u8        dir;\n// };\n//\n\ntype XfrmUserpolicyId struct {\n\tSel   XfrmSelector\n\tIndex uint32\n\tDir   uint8\n\tPad   [3]byte\n}\n\nfunc (msg *XfrmUserpolicyId) Len() int {\n\treturn SizeofXfrmUserpolicyId\n}\n\nfunc DeserializeXfrmUserpolicyId(b []byte) *XfrmUserpolicyId {\n\treturn (*XfrmUserpolicyId)(unsafe.Pointer(&b[0:SizeofXfrmUserpolicyId][0]))\n}\n\nfunc (msg *XfrmUserpolicyId) Serialize() []byte {\n\treturn (*(*[SizeofXfrmUserpolicyId]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct xfrm_userpolicy_info {\n//   struct xfrm_selector    sel;\n//   struct xfrm_lifetime_cfg  lft;\n//   struct xfrm_lifetime_cur  curlft;\n//   __u32       priority;\n//   __u32       index;\n//   __u8        dir;\n//   __u8        action;\n// #define XFRM_POLICY_ALLOW 0\n// #define XFRM_POLICY_BLOCK 1\n//   __u8        flags;\n// #define XFRM_POLICY_LOCALOK 1 /* Allow user to override global policy */\n//   /* Automatically expand selector to include matching ICMP payloads. */\n// #define XFRM_POLICY_ICMP  2\n//   __u8        share;\n// };\n\ntype XfrmUserpolicyInfo struct {\n\tSel      XfrmSelector\n\tLft      XfrmLifetimeCfg\n\tCurlft   XfrmLifetimeCur\n\tPriority uint32\n\tIndex    uint32\n\tDir      uint8\n\tAction   uint8\n\tFlags    uint8\n\tShare    uint8\n\tPad      [4]byte\n}\n\nfunc (msg *XfrmUserpolicyInfo) Len() int {\n\treturn SizeofXfrmUserpolicyInfo\n}\n\nfunc DeserializeXfrmUserpolicyInfo(b []byte) *XfrmUserpolicyInfo {\n\treturn (*XfrmUserpolicyInfo)(unsafe.Pointer(&b[0:SizeofXfrmUserpolicyInfo][0]))\n}\n\nfunc (msg *XfrmUserpolicyInfo) Serialize() []byte {\n\treturn (*(*[SizeofXfrmUserpolicyInfo]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct xfrm_user_tmpl {\n//   struct xfrm_id    id;\n//   __u16     family;\n//   xfrm_address_t    saddr;\n//   __u32     reqid;\n//   __u8      mode;\n//   __u8      share;\n//   __u8      optional;\n//   __u32     aalgos;\n//   __u32     ealgos;\n//   __u32     calgos;\n// }\n\ntype XfrmUserTmpl struct {\n\tXfrmId   XfrmId\n\tFamily   uint16\n\tPad1     [2]byte\n\tSaddr    XfrmAddress\n\tReqid    uint32\n\tMode     uint8\n\tShare    uint8\n\tOptional uint8\n\tPad2     byte\n\tAalgos   uint32\n\tEalgos   uint32\n\tCalgos   uint32\n}\n\nfunc (msg *XfrmUserTmpl) Len() int {\n\treturn SizeofXfrmUserTmpl\n}\n\nfunc DeserializeXfrmUserTmpl(b []byte) *XfrmUserTmpl {\n\treturn (*XfrmUserTmpl)(unsafe.Pointer(&b[0:SizeofXfrmUserTmpl][0]))\n}\n\nfunc (msg *XfrmUserTmpl) Serialize() []byte {\n\treturn (*(*[SizeofXfrmUserTmpl]byte)(unsafe.Pointer(msg)))[:]\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/nl/xfrm_state_linux.go",
    "content": "package nl\n\nimport (\n\t\"unsafe\"\n)\n\nconst (\n\tSizeofXfrmUsersaId       = 0x18\n\tSizeofXfrmStats          = 0x0c\n\tSizeofXfrmUsersaInfo     = 0xe0\n\tSizeofXfrmUserSpiInfo    = 0xe8\n\tSizeofXfrmAlgo           = 0x44\n\tSizeofXfrmAlgoAuth       = 0x48\n\tSizeofXfrmAlgoAEAD       = 0x48\n\tSizeofXfrmEncapTmpl      = 0x18\n\tSizeofXfrmUsersaFlush    = 0x1\n\tSizeofXfrmReplayStateEsn = 0x18\n\tSizeofXfrmReplayState    = 0x0c\n)\n\nconst (\n\tXFRM_STATE_NOECN      = 1\n\tXFRM_STATE_DECAP_DSCP = 2\n\tXFRM_STATE_NOPMTUDISC = 4\n\tXFRM_STATE_WILDRECV   = 8\n\tXFRM_STATE_ICMP       = 16\n\tXFRM_STATE_AF_UNSPEC  = 32\n\tXFRM_STATE_ALIGN4     = 64\n\tXFRM_STATE_ESN        = 128\n)\n\nconst (\n\tXFRM_SA_XFLAG_DONT_ENCAP_DSCP = 1\n\tXFRM_SA_XFLAG_OSEQ_MAY_WRAP   = 2\n)\n\n// struct xfrm_usersa_id {\n//   xfrm_address_t      daddr;\n//   __be32        spi;\n//   __u16       family;\n//   __u8        proto;\n// };\n\ntype XfrmUsersaId struct {\n\tDaddr  XfrmAddress\n\tSpi    uint32 // big endian\n\tFamily uint16\n\tProto  uint8\n\tPad    byte\n}\n\nfunc (msg *XfrmUsersaId) Len() int {\n\treturn SizeofXfrmUsersaId\n}\n\nfunc DeserializeXfrmUsersaId(b []byte) *XfrmUsersaId {\n\treturn (*XfrmUsersaId)(unsafe.Pointer(&b[0:SizeofXfrmUsersaId][0]))\n}\n\nfunc (msg *XfrmUsersaId) Serialize() []byte {\n\treturn (*(*[SizeofXfrmUsersaId]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct xfrm_stats {\n//   __u32 replay_window;\n//   __u32 replay;\n//   __u32 integrity_failed;\n// };\n\ntype XfrmStats struct {\n\tReplayWindow    uint32\n\tReplay          uint32\n\tIntegrityFailed uint32\n}\n\nfunc (msg *XfrmStats) Len() int {\n\treturn SizeofXfrmStats\n}\n\nfunc DeserializeXfrmStats(b []byte) *XfrmStats {\n\treturn (*XfrmStats)(unsafe.Pointer(&b[0:SizeofXfrmStats][0]))\n}\n\nfunc (msg *XfrmStats) Serialize() []byte {\n\treturn (*(*[SizeofXfrmStats]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct xfrm_usersa_info {\n//   struct xfrm_selector    sel;\n//   struct xfrm_id      id;\n//   xfrm_address_t      saddr;\n//   struct xfrm_lifetime_cfg  lft;\n//   struct xfrm_lifetime_cur  curlft;\n//   struct xfrm_stats   stats;\n//   __u32       seq;\n//   __u32       reqid;\n//   __u16       family;\n//   __u8        mode;   /* XFRM_MODE_xxx */\n//   __u8        replay_window;\n//   __u8        flags;\n// #define XFRM_STATE_NOECN  1\n// #define XFRM_STATE_DECAP_DSCP 2\n// #define XFRM_STATE_NOPMTUDISC 4\n// #define XFRM_STATE_WILDRECV 8\n// #define XFRM_STATE_ICMP   16\n// #define XFRM_STATE_AF_UNSPEC  32\n// #define XFRM_STATE_ALIGN4 64\n// #define XFRM_STATE_ESN    128\n// };\n//\n// #define XFRM_SA_XFLAG_DONT_ENCAP_DSCP 1\n// #define XFRM_SA_XFLAG_OSEQ_MAY_WRAP   2\n//\n\ntype XfrmUsersaInfo struct {\n\tSel          XfrmSelector\n\tId           XfrmId\n\tSaddr        XfrmAddress\n\tLft          XfrmLifetimeCfg\n\tCurlft       XfrmLifetimeCur\n\tStats        XfrmStats\n\tSeq          uint32\n\tReqid        uint32\n\tFamily       uint16\n\tMode         uint8\n\tReplayWindow uint8\n\tFlags        uint8\n\tPad          [7]byte\n}\n\nfunc (msg *XfrmUsersaInfo) Len() int {\n\treturn SizeofXfrmUsersaInfo\n}\n\nfunc DeserializeXfrmUsersaInfo(b []byte) *XfrmUsersaInfo {\n\treturn (*XfrmUsersaInfo)(unsafe.Pointer(&b[0:SizeofXfrmUsersaInfo][0]))\n}\n\nfunc (msg *XfrmUsersaInfo) Serialize() []byte {\n\treturn (*(*[SizeofXfrmUsersaInfo]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct xfrm_userspi_info {\n// \tstruct xfrm_usersa_info\t\tinfo;\n// \t__u32\t\t\t\tmin;\n// \t__u32\t\t\t\tmax;\n// };\n\ntype XfrmUserSpiInfo struct {\n\tXfrmUsersaInfo XfrmUsersaInfo\n\tMin            uint32\n\tMax            uint32\n}\n\nfunc (msg *XfrmUserSpiInfo) Len() int {\n\treturn SizeofXfrmUserSpiInfo\n}\n\nfunc DeserializeXfrmUserSpiInfo(b []byte) *XfrmUserSpiInfo {\n\treturn (*XfrmUserSpiInfo)(unsafe.Pointer(&b[0:SizeofXfrmUserSpiInfo][0]))\n}\n\nfunc (msg *XfrmUserSpiInfo) Serialize() []byte {\n\treturn (*(*[SizeofXfrmUserSpiInfo]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct xfrm_algo {\n//   char    alg_name[64];\n//   unsigned int  alg_key_len;    /* in bits */\n//   char    alg_key[0];\n// };\n\ntype XfrmAlgo struct {\n\tAlgName   [64]byte\n\tAlgKeyLen uint32\n\tAlgKey    []byte\n}\n\nfunc (msg *XfrmAlgo) Len() int {\n\treturn SizeofXfrmAlgo + int(msg.AlgKeyLen/8)\n}\n\nfunc DeserializeXfrmAlgo(b []byte) *XfrmAlgo {\n\tret := XfrmAlgo{}\n\tcopy(ret.AlgName[:], b[0:64])\n\tret.AlgKeyLen = *(*uint32)(unsafe.Pointer(&b[64]))\n\tret.AlgKey = b[68:ret.Len()]\n\treturn &ret\n}\n\nfunc (msg *XfrmAlgo) Serialize() []byte {\n\tb := make([]byte, msg.Len())\n\tcopy(b[0:64], msg.AlgName[:])\n\tcopy(b[64:68], (*(*[4]byte)(unsafe.Pointer(&msg.AlgKeyLen)))[:])\n\tcopy(b[68:msg.Len()], msg.AlgKey[:])\n\treturn b\n}\n\n// struct xfrm_algo_auth {\n//   char    alg_name[64];\n//   unsigned int  alg_key_len;    /* in bits */\n//   unsigned int  alg_trunc_len;  /* in bits */\n//   char    alg_key[0];\n// };\n\ntype XfrmAlgoAuth struct {\n\tAlgName     [64]byte\n\tAlgKeyLen   uint32\n\tAlgTruncLen uint32\n\tAlgKey      []byte\n}\n\nfunc (msg *XfrmAlgoAuth) Len() int {\n\treturn SizeofXfrmAlgoAuth + int(msg.AlgKeyLen/8)\n}\n\nfunc DeserializeXfrmAlgoAuth(b []byte) *XfrmAlgoAuth {\n\tret := XfrmAlgoAuth{}\n\tcopy(ret.AlgName[:], b[0:64])\n\tret.AlgKeyLen = *(*uint32)(unsafe.Pointer(&b[64]))\n\tret.AlgTruncLen = *(*uint32)(unsafe.Pointer(&b[68]))\n\tret.AlgKey = b[72:ret.Len()]\n\treturn &ret\n}\n\nfunc (msg *XfrmAlgoAuth) Serialize() []byte {\n\tb := make([]byte, msg.Len())\n\tcopy(b[0:64], msg.AlgName[:])\n\tcopy(b[64:68], (*(*[4]byte)(unsafe.Pointer(&msg.AlgKeyLen)))[:])\n\tcopy(b[68:72], (*(*[4]byte)(unsafe.Pointer(&msg.AlgTruncLen)))[:])\n\tcopy(b[72:msg.Len()], msg.AlgKey[:])\n\treturn b\n}\n\n// struct xfrm_algo_aead {\n//   char    alg_name[64];\n//   unsigned int  alg_key_len;  /* in bits */\n//   unsigned int  alg_icv_len;  /* in bits */\n//   char    alg_key[0];\n// }\n\ntype XfrmAlgoAEAD struct {\n\tAlgName   [64]byte\n\tAlgKeyLen uint32\n\tAlgICVLen uint32\n\tAlgKey    []byte\n}\n\nfunc (msg *XfrmAlgoAEAD) Len() int {\n\treturn SizeofXfrmAlgoAEAD + int(msg.AlgKeyLen/8)\n}\n\nfunc DeserializeXfrmAlgoAEAD(b []byte) *XfrmAlgoAEAD {\n\tret := XfrmAlgoAEAD{}\n\tcopy(ret.AlgName[:], b[0:64])\n\tret.AlgKeyLen = *(*uint32)(unsafe.Pointer(&b[64]))\n\tret.AlgICVLen = *(*uint32)(unsafe.Pointer(&b[68]))\n\tret.AlgKey = b[72:ret.Len()]\n\treturn &ret\n}\n\nfunc (msg *XfrmAlgoAEAD) Serialize() []byte {\n\tb := make([]byte, msg.Len())\n\tcopy(b[0:64], msg.AlgName[:])\n\tcopy(b[64:68], (*(*[4]byte)(unsafe.Pointer(&msg.AlgKeyLen)))[:])\n\tcopy(b[68:72], (*(*[4]byte)(unsafe.Pointer(&msg.AlgICVLen)))[:])\n\tcopy(b[72:msg.Len()], msg.AlgKey[:])\n\treturn b\n}\n\n// struct xfrm_encap_tmpl {\n//   __u16   encap_type;\n//   __be16    encap_sport;\n//   __be16    encap_dport;\n//   xfrm_address_t  encap_oa;\n// };\n\ntype XfrmEncapTmpl struct {\n\tEncapType  uint16\n\tEncapSport uint16 // big endian\n\tEncapDport uint16 // big endian\n\tPad        [2]byte\n\tEncapOa    XfrmAddress\n}\n\nfunc (msg *XfrmEncapTmpl) Len() int {\n\treturn SizeofXfrmEncapTmpl\n}\n\nfunc DeserializeXfrmEncapTmpl(b []byte) *XfrmEncapTmpl {\n\treturn (*XfrmEncapTmpl)(unsafe.Pointer(&b[0:SizeofXfrmEncapTmpl][0]))\n}\n\nfunc (msg *XfrmEncapTmpl) Serialize() []byte {\n\treturn (*(*[SizeofXfrmEncapTmpl]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct xfrm_usersa_flush {\n//    __u8 proto;\n// };\n\ntype XfrmUsersaFlush struct {\n\tProto uint8\n}\n\nfunc (msg *XfrmUsersaFlush) Len() int {\n\treturn SizeofXfrmUsersaFlush\n}\n\nfunc DeserializeXfrmUsersaFlush(b []byte) *XfrmUsersaFlush {\n\treturn (*XfrmUsersaFlush)(unsafe.Pointer(&b[0:SizeofXfrmUsersaFlush][0]))\n}\n\nfunc (msg *XfrmUsersaFlush) Serialize() []byte {\n\treturn (*(*[SizeofXfrmUsersaFlush]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct xfrm_replay_state_esn {\n//     unsigned int    bmp_len;\n//     __u32           oseq;\n//     __u32           seq;\n//     __u32           oseq_hi;\n//     __u32           seq_hi;\n//     __u32           replay_window;\n//     __u32           bmp[0];\n// };\n\ntype XfrmReplayStateEsn struct {\n\tBmpLen       uint32\n\tOSeq         uint32\n\tSeq          uint32\n\tOSeqHi       uint32\n\tSeqHi        uint32\n\tReplayWindow uint32\n\tBmp          []uint32\n}\n\nfunc (msg *XfrmReplayStateEsn) Serialize() []byte {\n\t// We deliberately do not pass Bmp, as it gets set by the kernel.\n\treturn (*(*[SizeofXfrmReplayStateEsn]byte)(unsafe.Pointer(msg)))[:]\n}\n\n// struct xfrm_replay_state {\n//     __u32   oseq;\n//     __u32   seq;\n//     __u32   bitmap;\n// };\n\ntype XfrmReplayState struct {\n\tOSeq   uint32\n\tSeq    uint32\n\tBitMap uint32\n}\n\nfunc DeserializeXfrmReplayState(b []byte) *XfrmReplayState {\n\treturn (*XfrmReplayState)(unsafe.Pointer(&b[0:SizeofXfrmReplayState][0]))\n}\n\nfunc (msg *XfrmReplayState) Serialize() []byte {\n\treturn (*(*[SizeofXfrmReplayState]byte)(unsafe.Pointer(msg)))[:]\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/order.go",
    "content": "package netlink\n\nimport (\n\t\"encoding/binary\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n)\n\nvar (\n\tnative       = nl.NativeEndian()\n\tnetworkOrder = binary.BigEndian\n)\n\nfunc htonl(val uint32) []byte {\n\tbytes := make([]byte, 4)\n\tbinary.BigEndian.PutUint32(bytes, val)\n\treturn bytes\n}\n\nfunc htons(val uint16) []byte {\n\tbytes := make([]byte, 2)\n\tbinary.BigEndian.PutUint16(bytes, val)\n\treturn bytes\n}\n\nfunc ntohl(buf []byte) uint32 {\n\treturn binary.BigEndian.Uint32(buf)\n}\n\nfunc ntohs(buf []byte) uint16 {\n\treturn binary.BigEndian.Uint16(buf)\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/proc_event_linux.go",
    "content": "package netlink\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"os\"\n\t\"syscall\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"github.com/vishvananda/netns\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst CN_IDX_PROC = 0x1\n\nconst (\n\tPROC_EVENT_NONE     = 0x00000000\n\tPROC_EVENT_FORK     = 0x00000001\n\tPROC_EVENT_EXEC     = 0x00000002\n\tPROC_EVENT_UID      = 0x00000004\n\tPROC_EVENT_GID      = 0x00000040\n\tPROC_EVENT_SID      = 0x00000080\n\tPROC_EVENT_PTRACE   = 0x00000100\n\tPROC_EVENT_COMM     = 0x00000200\n\tPROC_EVENT_COREDUMP = 0x40000000\n\tPROC_EVENT_EXIT     = 0x80000000\n)\n\nconst (\n\tCN_VAL_PROC          = 0x1\n\tPROC_CN_MCAST_LISTEN = 0x1\n)\n\ntype ProcEventMsg interface {\n\tPid() uint32\n\tTgid() uint32\n}\n\ntype ProcEventHeader struct {\n\tWhat      uint32\n\tCPU       uint32\n\tTimestamp uint64\n}\n\ntype ProcEvent struct {\n\tProcEventHeader\n\tMsg ProcEventMsg\n}\n\nfunc (pe *ProcEvent) setHeader(h ProcEventHeader) {\n\tpe.What = h.What\n\tpe.CPU = h.CPU\n\tpe.Timestamp = h.Timestamp\n}\n\ntype ExitProcEvent struct {\n\tProcessPid  uint32\n\tProcessTgid uint32\n\tExitCode    uint32\n\tExitSignal  uint32\n\tParentPid   uint32\n\tParentTgid  uint32\n}\n\nfunc (e *ExitProcEvent) Pid() uint32 {\n\treturn e.ProcessPid\n}\n\nfunc (e *ExitProcEvent) Tgid() uint32 {\n\treturn e.ProcessTgid\n}\n\ntype ExecProcEvent struct {\n\tProcessPid  uint32\n\tProcessTgid uint32\n}\n\nfunc (e *ExecProcEvent) Pid() uint32 {\n\treturn e.ProcessPid\n}\n\nfunc (e *ExecProcEvent) Tgid() uint32 {\n\treturn e.ProcessTgid\n}\n\ntype ForkProcEvent struct {\n\tParentPid  uint32\n\tParentTgid uint32\n\tChildPid   uint32\n\tChildTgid  uint32\n}\n\nfunc (e *ForkProcEvent) Pid() uint32 {\n\treturn e.ParentPid\n}\n\nfunc (e *ForkProcEvent) Tgid() uint32 {\n\treturn e.ParentTgid\n}\n\ntype CommProcEvent struct {\n\tProcessPid  uint32\n\tProcessTgid uint32\n\tComm        [16]byte\n}\n\nfunc (e *CommProcEvent) Pid() uint32 {\n\treturn e.ProcessPid\n}\n\nfunc (e *CommProcEvent) Tgid() uint32 {\n\treturn e.ProcessTgid\n}\n\nfunc ProcEventMonitor(ch chan<- ProcEvent, done <-chan struct{}, errorChan chan<- error) error {\n\th, err := NewHandle()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer h.Delete()\n\n\ts, err := nl.SubscribeAt(netns.None(), netns.None(), unix.NETLINK_CONNECTOR, CN_IDX_PROC)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar nlmsg nl.NetlinkRequest\n\n\tnlmsg.Pid = uint32(os.Getpid())\n\tnlmsg.Type = unix.NLMSG_DONE\n\tnlmsg.Len = uint32(unix.SizeofNlMsghdr)\n\n\tcm := nl.NewCnMsg(CN_IDX_PROC, CN_VAL_PROC, PROC_CN_MCAST_LISTEN)\n\tnlmsg.AddData(cm)\n\n\ts.Send(&nlmsg)\n\n\tif done != nil {\n\t\tgo func() {\n\t\t\t<-done\n\t\t\ts.Close()\n\t\t}()\n\t}\n\n\tgo func() {\n\t\tdefer close(ch)\n\t\tfor {\n\t\t\tmsgs, from, err := s.Receive()\n\t\t\tif err != nil {\n\t\t\t\terrorChan <- err\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif from.Pid != nl.PidKernel {\n\t\t\t\terrorChan <- fmt.Errorf(\"Wrong sender portid %d, expected %d\", from.Pid, nl.PidKernel)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tfor _, m := range msgs {\n\t\t\t\te := parseNetlinkMessage(m)\n\t\t\t\tif e != nil {\n\t\t\t\t\tch <- *e\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}()\n\n\treturn nil\n}\n\nfunc parseNetlinkMessage(m syscall.NetlinkMessage) *ProcEvent {\n\tif m.Header.Type == unix.NLMSG_DONE {\n\t\tbuf := bytes.NewBuffer(m.Data)\n\t\tmsg := &nl.CnMsg{}\n\t\thdr := &ProcEventHeader{}\n\t\tbinary.Read(buf, nl.NativeEndian(), msg)\n\t\tbinary.Read(buf, nl.NativeEndian(), hdr)\n\n\t\tpe := &ProcEvent{}\n\t\tpe.setHeader(*hdr)\n\t\tswitch hdr.What {\n\t\tcase PROC_EVENT_EXIT:\n\t\t\tevent := &ExitProcEvent{}\n\t\t\tbinary.Read(buf, nl.NativeEndian(), event)\n\t\t\tpe.Msg = event\n\t\t\treturn pe\n\t\tcase PROC_EVENT_FORK:\n\t\t\tevent := &ForkProcEvent{}\n\t\t\tbinary.Read(buf, nl.NativeEndian(), event)\n\t\t\tpe.Msg = event\n\t\t\treturn pe\n\t\tcase PROC_EVENT_EXEC:\n\t\t\tevent := &ExecProcEvent{}\n\t\t\tbinary.Read(buf, nl.NativeEndian(), event)\n\t\t\tpe.Msg = event\n\t\t\treturn pe\n\t\tcase PROC_EVENT_COMM:\n\t\t\tevent := &CommProcEvent{}\n\t\t\tbinary.Read(buf, nl.NativeEndian(), event)\n\t\t\tpe.Msg = event\n\t\t\treturn pe\n\t\t}\n\t\treturn nil\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/protinfo.go",
    "content": "package netlink\n\nimport (\n\t\"strings\"\n)\n\n// Protinfo represents bridge flags from netlink.\ntype Protinfo struct {\n\tHairpin       bool\n\tGuard         bool\n\tFastLeave     bool\n\tRootBlock     bool\n\tLearning      bool\n\tFlood         bool\n\tProxyArp      bool\n\tProxyArpWiFi  bool\n\tIsolated      bool\n\tNeighSuppress bool\n\tVlanTunnel    bool\n}\n\n// String returns a list of enabled flags\nfunc (prot *Protinfo) String() string {\n\tif prot == nil {\n\t\treturn \"<nil>\"\n\t}\n\n\tvar boolStrings []string\n\tif prot.Hairpin {\n\t\tboolStrings = append(boolStrings, \"Hairpin\")\n\t}\n\tif prot.Guard {\n\t\tboolStrings = append(boolStrings, \"Guard\")\n\t}\n\tif prot.FastLeave {\n\t\tboolStrings = append(boolStrings, \"FastLeave\")\n\t}\n\tif prot.RootBlock {\n\t\tboolStrings = append(boolStrings, \"RootBlock\")\n\t}\n\tif prot.Learning {\n\t\tboolStrings = append(boolStrings, \"Learning\")\n\t}\n\tif prot.Flood {\n\t\tboolStrings = append(boolStrings, \"Flood\")\n\t}\n\tif prot.ProxyArp {\n\t\tboolStrings = append(boolStrings, \"ProxyArp\")\n\t}\n\tif prot.ProxyArpWiFi {\n\t\tboolStrings = append(boolStrings, \"ProxyArpWiFi\")\n\t}\n\tif prot.Isolated {\n\t\tboolStrings = append(boolStrings, \"Isolated\")\n\t}\n\tif prot.NeighSuppress {\n\t\tboolStrings = append(boolStrings, \"NeighSuppress\")\n\t}\n\tif prot.VlanTunnel {\n\t\tboolStrings = append(boolStrings, \"VlanTunnel\")\n\t}\n\treturn strings.Join(boolStrings, \" \")\n}\n\nfunc boolToByte(x bool) []byte {\n\tif x {\n\t\treturn []byte{1}\n\t}\n\treturn []byte{0}\n}\n\nfunc byteToBool(x byte) bool {\n\treturn uint8(x) != 0\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/protinfo_linux.go",
    "content": "package netlink\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"syscall\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc LinkGetProtinfo(link Link) (Protinfo, error) {\n\treturn pkgHandle.LinkGetProtinfo(link)\n}\n\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) LinkGetProtinfo(link Link) (Protinfo, error) {\n\tbase := link.Attrs()\n\th.ensureIndex(base)\n\tvar pi Protinfo\n\treq := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_DUMP)\n\tmsg := nl.NewIfInfomsg(unix.AF_BRIDGE)\n\treq.AddData(msg)\n\tmsgs, executeErr := req.Execute(unix.NETLINK_ROUTE, 0)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn pi, executeErr\n\t}\n\n\tfor _, m := range msgs {\n\t\tans := nl.DeserializeIfInfomsg(m)\n\t\tif int(ans.Index) != base.Index {\n\t\t\tcontinue\n\t\t}\n\t\tattrs, err := nl.ParseRouteAttr(m[ans.Len():])\n\t\tif err != nil {\n\t\t\treturn pi, err\n\t\t}\n\t\tfor _, attr := range attrs {\n\t\t\tif attr.Attr.Type != unix.IFLA_PROTINFO|unix.NLA_F_NESTED {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tinfos, err := nl.ParseRouteAttr(attr.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn pi, err\n\t\t\t}\n\t\t\tpi = parseProtinfo(infos)\n\n\t\t\treturn pi, executeErr\n\t\t}\n\t}\n\treturn pi, fmt.Errorf(\"Device with index %d not found\", base.Index)\n}\n\nfunc parseProtinfo(infos []syscall.NetlinkRouteAttr) (pi Protinfo) {\n\tfor _, info := range infos {\n\t\tswitch info.Attr.Type {\n\t\tcase nl.IFLA_BRPORT_MODE:\n\t\t\tpi.Hairpin = byteToBool(info.Value[0])\n\t\tcase nl.IFLA_BRPORT_GUARD:\n\t\t\tpi.Guard = byteToBool(info.Value[0])\n\t\tcase nl.IFLA_BRPORT_FAST_LEAVE:\n\t\t\tpi.FastLeave = byteToBool(info.Value[0])\n\t\tcase nl.IFLA_BRPORT_PROTECT:\n\t\t\tpi.RootBlock = byteToBool(info.Value[0])\n\t\tcase nl.IFLA_BRPORT_LEARNING:\n\t\t\tpi.Learning = byteToBool(info.Value[0])\n\t\tcase nl.IFLA_BRPORT_UNICAST_FLOOD:\n\t\t\tpi.Flood = byteToBool(info.Value[0])\n\t\tcase nl.IFLA_BRPORT_PROXYARP:\n\t\t\tpi.ProxyArp = byteToBool(info.Value[0])\n\t\tcase nl.IFLA_BRPORT_PROXYARP_WIFI:\n\t\t\tpi.ProxyArpWiFi = byteToBool(info.Value[0])\n\t\tcase nl.IFLA_BRPORT_ISOLATED:\n\t\t\tpi.Isolated = byteToBool(info.Value[0])\n\t\tcase nl.IFLA_BRPORT_NEIGH_SUPPRESS:\n\t\t\tpi.NeighSuppress = byteToBool(info.Value[0])\n\t\tcase nl.IFLA_BRPORT_VLAN_TUNNEL:\n\t\t\tpi.VlanTunnel = byteToBool(info.Value[0])\n\t\t}\n\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/qdisc.go",
    "content": "package netlink\n\nimport (\n\t\"fmt\"\n\t\"math\"\n)\n\nconst (\n\tHANDLE_NONE      = 0\n\tHANDLE_INGRESS   = 0xFFFFFFF1\n\tHANDLE_CLSACT    = HANDLE_INGRESS\n\tHANDLE_ROOT      = 0xFFFFFFFF\n\tPRIORITY_MAP_LEN = 16\n)\nconst (\n\tHANDLE_MIN_INGRESS = 0xFFFFFFF2\n\tHANDLE_MIN_EGRESS  = 0xFFFFFFF3\n)\n\nconst (\n\tHORIZON_DROP_POLICY_CAP     = 0\n\tHORIZON_DROP_POLICY_DROP    = 1\n\tHORIZON_DROP_POLICY_DEFAULT = 255\n)\n\ntype Qdisc interface {\n\tAttrs() *QdiscAttrs\n\tType() string\n}\n\ntype QdiscStatistics ClassStatistics\n\n// QdiscAttrs represents a netlink qdisc. A qdisc is associated with a link,\n// has a handle, a parent and a refcnt. The root qdisc of a device should\n// have parent == HANDLE_ROOT.\ntype QdiscAttrs struct {\n\tLinkIndex    int\n\tHandle       uint32\n\tParent       uint32\n\tRefcnt       uint32 // read only\n\tIngressBlock *uint32\n\tStatistics   *QdiscStatistics\n}\n\nfunc (q QdiscAttrs) String() string {\n\treturn fmt.Sprintf(\"{LinkIndex: %d, Handle: %s, Parent: %s, Refcnt: %d}\", q.LinkIndex, HandleStr(q.Handle), HandleStr(q.Parent), q.Refcnt)\n}\n\nfunc MakeHandle(major, minor uint16) uint32 {\n\treturn (uint32(major) << 16) | uint32(minor)\n}\n\nfunc MajorMinor(handle uint32) (uint16, uint16) {\n\treturn uint16((handle & 0xFFFF0000) >> 16), uint16(handle & 0x0000FFFFF)\n}\n\nfunc HandleStr(handle uint32) string {\n\tswitch handle {\n\tcase HANDLE_NONE:\n\t\treturn \"none\"\n\tcase HANDLE_INGRESS:\n\t\treturn \"ingress\"\n\tcase HANDLE_ROOT:\n\t\treturn \"root\"\n\tdefault:\n\t\tmajor, minor := MajorMinor(handle)\n\t\treturn fmt.Sprintf(\"%x:%x\", major, minor)\n\t}\n}\n\nfunc Percentage2u32(percentage float32) uint32 {\n\t// FIXME this is most likely not the best way to convert from % to uint32\n\tif percentage == 100 {\n\t\treturn math.MaxUint32\n\t}\n\treturn uint32(math.MaxUint32 * (percentage / 100))\n}\n\n// PfifoFast is the default qdisc created by the kernel if one has not\n// been defined for the interface\ntype PfifoFast struct {\n\tQdiscAttrs\n\tBands       uint8\n\tPriorityMap [PRIORITY_MAP_LEN]uint8\n}\n\nfunc (qdisc *PfifoFast) Attrs() *QdiscAttrs {\n\treturn &qdisc.QdiscAttrs\n}\n\nfunc (qdisc *PfifoFast) Type() string {\n\treturn \"pfifo_fast\"\n}\n\n// Prio is a basic qdisc that works just like PfifoFast\ntype Prio struct {\n\tQdiscAttrs\n\tBands       uint8\n\tPriorityMap [PRIORITY_MAP_LEN]uint8\n}\n\nfunc NewPrio(attrs QdiscAttrs) *Prio {\n\treturn &Prio{\n\t\tQdiscAttrs:  attrs,\n\t\tBands:       3,\n\t\tPriorityMap: [PRIORITY_MAP_LEN]uint8{1, 2, 2, 2, 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1},\n\t}\n}\n\nfunc (qdisc *Prio) Attrs() *QdiscAttrs {\n\treturn &qdisc.QdiscAttrs\n}\n\nfunc (qdisc *Prio) Type() string {\n\treturn \"prio\"\n}\n\n// Htb is a classful qdisc that rate limits based on tokens\ntype Htb struct {\n\tQdiscAttrs\n\tVersion      uint32\n\tRate2Quantum uint32\n\tDefcls       uint32\n\tDebug        uint32\n\tDirectPkts   uint32\n\tDirectQlen   *uint32\n}\n\nfunc NewHtb(attrs QdiscAttrs) *Htb {\n\treturn &Htb{\n\t\tQdiscAttrs:   attrs,\n\t\tVersion:      3,\n\t\tDefcls:       0,\n\t\tRate2Quantum: 10,\n\t\tDebug:        0,\n\t\tDirectPkts:   0,\n\t\tDirectQlen:   nil,\n\t}\n}\n\nfunc (qdisc *Htb) Attrs() *QdiscAttrs {\n\treturn &qdisc.QdiscAttrs\n}\n\nfunc (qdisc *Htb) Type() string {\n\treturn \"htb\"\n}\n\n// Netem is a classless qdisc that rate limits based on tokens\n\ntype NetemQdiscAttrs struct {\n\tLatency       uint32  // in us\n\tDelayCorr     float32 // in %\n\tLimit         uint32\n\tLoss          float32 // in %\n\tLossCorr      float32 // in %\n\tGap           uint32\n\tDuplicate     float32 // in %\n\tDuplicateCorr float32 // in %\n\tJitter        uint32  // in us\n\tReorderProb   float32 // in %\n\tReorderCorr   float32 // in %\n\tCorruptProb   float32 // in %\n\tCorruptCorr   float32 // in %\n\tRate64        uint64\n}\n\nfunc (q NetemQdiscAttrs) String() string {\n\treturn fmt.Sprintf(\n\t\t\"{Latency: %d, Limit: %d, Loss: %f, Gap: %d, Duplicate: %f, Jitter: %d}\",\n\t\tq.Latency, q.Limit, q.Loss, q.Gap, q.Duplicate, q.Jitter,\n\t)\n}\n\ntype Netem struct {\n\tQdiscAttrs\n\tLatency       uint32\n\tDelayCorr     uint32\n\tLimit         uint32\n\tLoss          uint32\n\tLossCorr      uint32\n\tGap           uint32\n\tDuplicate     uint32\n\tDuplicateCorr uint32\n\tJitter        uint32\n\tReorderProb   uint32\n\tReorderCorr   uint32\n\tCorruptProb   uint32\n\tCorruptCorr   uint32\n\tRate64        uint64\n}\n\nfunc (netem *Netem) String() string {\n\treturn fmt.Sprintf(\n\t\t\"{Latency: %v, Limit: %v, Loss: %v, Gap: %v, Duplicate: %v, Jitter: %v}\",\n\t\tnetem.Latency, netem.Limit, netem.Loss, netem.Gap, netem.Duplicate, netem.Jitter,\n\t)\n}\n\nfunc (qdisc *Netem) Attrs() *QdiscAttrs {\n\treturn &qdisc.QdiscAttrs\n}\n\nfunc (qdisc *Netem) Type() string {\n\treturn \"netem\"\n}\n\n// Tbf is a classless qdisc that rate limits based on tokens\ntype Tbf struct {\n\tQdiscAttrs\n\tRate     uint64\n\tLimit    uint32\n\tBuffer   uint32\n\tPeakrate uint64\n\tMinburst uint32\n\t// TODO: handle other settings\n}\n\nfunc (qdisc *Tbf) Attrs() *QdiscAttrs {\n\treturn &qdisc.QdiscAttrs\n}\n\nfunc (qdisc *Tbf) Type() string {\n\treturn \"tbf\"\n}\n\n// Clsact is a qdisc for adding filters\ntype Clsact struct {\n\tQdiscAttrs\n}\n\nfunc (qdisc *Clsact) Attrs() *QdiscAttrs {\n\treturn &qdisc.QdiscAttrs\n}\n\nfunc (qdisc *Clsact) Type() string {\n\treturn \"clsact\"\n}\n\n// Ingress is a qdisc for adding ingress filters\ntype Ingress struct {\n\tQdiscAttrs\n}\n\nfunc (qdisc *Ingress) Attrs() *QdiscAttrs {\n\treturn &qdisc.QdiscAttrs\n}\n\nfunc (qdisc *Ingress) Type() string {\n\treturn \"ingress\"\n}\n\n// GenericQdisc qdiscs represent types that are not currently understood\n// by this netlink library.\ntype GenericQdisc struct {\n\tQdiscAttrs\n\tQdiscType string\n}\n\nfunc (qdisc *GenericQdisc) Attrs() *QdiscAttrs {\n\treturn &qdisc.QdiscAttrs\n}\n\nfunc (qdisc *GenericQdisc) Type() string {\n\treturn qdisc.QdiscType\n}\n\ntype Hfsc struct {\n\tQdiscAttrs\n\tDefcls uint16\n}\n\nfunc NewHfsc(attrs QdiscAttrs) *Hfsc {\n\treturn &Hfsc{\n\t\tQdiscAttrs: attrs,\n\t\tDefcls:     1,\n\t}\n}\n\nfunc (hfsc *Hfsc) Attrs() *QdiscAttrs {\n\treturn &hfsc.QdiscAttrs\n}\n\nfunc (hfsc *Hfsc) Type() string {\n\treturn \"hfsc\"\n}\n\nfunc (hfsc *Hfsc) String() string {\n\treturn fmt.Sprintf(\n\t\t\"{%v -- default: %d}\",\n\t\thfsc.Attrs(), hfsc.Defcls,\n\t)\n}\n\n// Fq is a classless packet scheduler meant to be mostly used for locally generated traffic.\ntype Fq struct {\n\tQdiscAttrs\n\tPacketLimit     uint32\n\tFlowPacketLimit uint32\n\t// In bytes\n\tQuantum        uint32\n\tInitialQuantum uint32\n\t// called RateEnable under the hood\n\tPacing          uint32\n\tFlowDefaultRate uint32\n\tFlowMaxRate     uint32\n\t// called BucketsLog under the hood\n\tBuckets           uint32\n\tFlowRefillDelay   uint32\n\tLowRateThreshold  uint32\n\tHorizon           uint32\n\tHorizonDropPolicy uint8\n}\n\nfunc (fq *Fq) String() string {\n\treturn fmt.Sprintf(\n\t\t\"{PacketLimit: %v, FlowPacketLimit: %v, Quantum: %v, InitialQuantum: %v, Pacing: %v, FlowDefaultRate: %v, FlowMaxRate: %v, Buckets: %v, FlowRefillDelay: %v,  LowRateThreshold: %v, Horizon: %v, HorizonDropPolicy: %v}\",\n\t\tfq.PacketLimit, fq.FlowPacketLimit, fq.Quantum, fq.InitialQuantum, fq.Pacing, fq.FlowDefaultRate, fq.FlowMaxRate, fq.Buckets, fq.FlowRefillDelay, fq.LowRateThreshold, fq.Horizon, fq.HorizonDropPolicy,\n\t)\n}\n\nfunc NewFq(attrs QdiscAttrs) *Fq {\n\treturn &Fq{\n\t\tQdiscAttrs:        attrs,\n\t\tPacing:            1,\n\t\tHorizonDropPolicy: HORIZON_DROP_POLICY_DEFAULT,\n\t}\n}\n\nfunc (qdisc *Fq) Attrs() *QdiscAttrs {\n\treturn &qdisc.QdiscAttrs\n}\n\nfunc (qdisc *Fq) Type() string {\n\treturn \"fq\"\n}\n\n// FQ_Codel (Fair Queuing Controlled Delay) is queuing discipline that combines Fair Queuing with the CoDel AQM scheme.\ntype FqCodel struct {\n\tQdiscAttrs\n\tTarget        uint32\n\tLimit         uint32\n\tInterval      uint32\n\tECN           uint32\n\tFlows         uint32\n\tQuantum       uint32\n\tCEThreshold   uint32\n\tDropBatchSize uint32\n\tMemoryLimit   uint32\n}\n\nfunc (fqcodel *FqCodel) String() string {\n\treturn fmt.Sprintf(\n\t\t\"{%v -- Target: %v, Limit: %v, Interval: %v, ECM: %v, Flows: %v, Quantum: %v}\",\n\t\tfqcodel.Attrs(), fqcodel.Target, fqcodel.Limit, fqcodel.Interval, fqcodel.ECN, fqcodel.Flows, fqcodel.Quantum,\n\t)\n}\n\nfunc NewFqCodel(attrs QdiscAttrs) *FqCodel {\n\treturn &FqCodel{\n\t\tQdiscAttrs: attrs,\n\t\tECN:        1,\n\t}\n}\n\nfunc (qdisc *FqCodel) Attrs() *QdiscAttrs {\n\treturn &qdisc.QdiscAttrs\n}\n\nfunc (qdisc *FqCodel) Type() string {\n\treturn \"fq_codel\"\n}\n\ntype Sfq struct {\n\tQdiscAttrs\n\t// TODO: Only the simplified options for SFQ are handled here. Support for the extended one can be added later.\n\tQuantum uint32\n\tPerturb int32\n\tLimit   uint32\n\tDivisor uint32\n}\n\nfunc (sfq *Sfq) String() string {\n\treturn fmt.Sprintf(\n\t\t\"{%v -- Quantum: %v, Perturb: %v, Limit: %v, Divisor: %v}\",\n\t\tsfq.Attrs(), sfq.Quantum, sfq.Perturb, sfq.Limit, sfq.Divisor,\n\t)\n}\n\nfunc (qdisc *Sfq) Attrs() *QdiscAttrs {\n\treturn &qdisc.QdiscAttrs\n}\n\nfunc (qdisc *Sfq) Type() string {\n\treturn \"sfq\"\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/qdisc_linux.go",
    "content": "package netlink\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// NOTE function is here because it uses other linux functions\nfunc NewNetem(attrs QdiscAttrs, nattrs NetemQdiscAttrs) *Netem {\n\tvar limit uint32 = 1000\n\tvar lossCorr, delayCorr, duplicateCorr uint32\n\tvar reorderProb, reorderCorr uint32\n\tvar corruptProb, corruptCorr uint32\n\tvar rate64 uint64\n\n\tlatency := nattrs.Latency\n\tloss := Percentage2u32(nattrs.Loss)\n\tgap := nattrs.Gap\n\tduplicate := Percentage2u32(nattrs.Duplicate)\n\tjitter := nattrs.Jitter\n\n\t// Correlation\n\tif latency > 0 && jitter > 0 {\n\t\tdelayCorr = Percentage2u32(nattrs.DelayCorr)\n\t}\n\tif loss > 0 {\n\t\tlossCorr = Percentage2u32(nattrs.LossCorr)\n\t}\n\tif duplicate > 0 {\n\t\tduplicateCorr = Percentage2u32(nattrs.DuplicateCorr)\n\t}\n\t// FIXME should validate values(like loss/duplicate are percentages...)\n\tlatency = time2Tick(latency)\n\n\tif nattrs.Limit != 0 {\n\t\tlimit = nattrs.Limit\n\t}\n\t// Jitter is only value if latency is > 0\n\tif latency > 0 {\n\t\tjitter = time2Tick(jitter)\n\t}\n\n\treorderProb = Percentage2u32(nattrs.ReorderProb)\n\treorderCorr = Percentage2u32(nattrs.ReorderCorr)\n\n\tif reorderProb > 0 {\n\t\t// ERROR if lantency == 0\n\t\tif gap == 0 {\n\t\t\tgap = 1\n\t\t}\n\t}\n\n\tcorruptProb = Percentage2u32(nattrs.CorruptProb)\n\tcorruptCorr = Percentage2u32(nattrs.CorruptCorr)\n\trate64 = nattrs.Rate64\n\n\treturn &Netem{\n\t\tQdiscAttrs:    attrs,\n\t\tLatency:       latency,\n\t\tDelayCorr:     delayCorr,\n\t\tLimit:         limit,\n\t\tLoss:          loss,\n\t\tLossCorr:      lossCorr,\n\t\tGap:           gap,\n\t\tDuplicate:     duplicate,\n\t\tDuplicateCorr: duplicateCorr,\n\t\tJitter:        jitter,\n\t\tReorderProb:   reorderProb,\n\t\tReorderCorr:   reorderCorr,\n\t\tCorruptProb:   corruptProb,\n\t\tCorruptCorr:   corruptCorr,\n\t\tRate64:        rate64,\n\t}\n}\n\n// QdiscDel will delete a qdisc from the system.\n// Equivalent to: `tc qdisc del $qdisc`\nfunc QdiscDel(qdisc Qdisc) error {\n\treturn pkgHandle.QdiscDel(qdisc)\n}\n\n// QdiscDel will delete a qdisc from the system.\n// Equivalent to: `tc qdisc del $qdisc`\nfunc (h *Handle) QdiscDel(qdisc Qdisc) error {\n\treturn h.qdiscModify(unix.RTM_DELQDISC, 0, qdisc)\n}\n\n// QdiscChange will change a qdisc in place\n// Equivalent to: `tc qdisc change $qdisc`\n// The parent and handle MUST NOT be changed.\nfunc QdiscChange(qdisc Qdisc) error {\n\treturn pkgHandle.QdiscChange(qdisc)\n}\n\n// QdiscChange will change a qdisc in place\n// Equivalent to: `tc qdisc change $qdisc`\n// The parent and handle MUST NOT be changed.\nfunc (h *Handle) QdiscChange(qdisc Qdisc) error {\n\treturn h.qdiscModify(unix.RTM_NEWQDISC, 0, qdisc)\n}\n\n// QdiscReplace will replace a qdisc to the system.\n// Equivalent to: `tc qdisc replace $qdisc`\n// The handle MUST change.\nfunc QdiscReplace(qdisc Qdisc) error {\n\treturn pkgHandle.QdiscReplace(qdisc)\n}\n\n// QdiscReplace will replace a qdisc to the system.\n// Equivalent to: `tc qdisc replace $qdisc`\n// The handle MUST change.\nfunc (h *Handle) QdiscReplace(qdisc Qdisc) error {\n\treturn h.qdiscModify(\n\t\tunix.RTM_NEWQDISC,\n\t\tunix.NLM_F_CREATE|unix.NLM_F_REPLACE,\n\t\tqdisc)\n}\n\n// QdiscAdd will add a qdisc to the system.\n// Equivalent to: `tc qdisc add $qdisc`\nfunc QdiscAdd(qdisc Qdisc) error {\n\treturn pkgHandle.QdiscAdd(qdisc)\n}\n\n// QdiscAdd will add a qdisc to the system.\n// Equivalent to: `tc qdisc add $qdisc`\nfunc (h *Handle) QdiscAdd(qdisc Qdisc) error {\n\treturn h.qdiscModify(\n\t\tunix.RTM_NEWQDISC,\n\t\tunix.NLM_F_CREATE|unix.NLM_F_EXCL,\n\t\tqdisc)\n}\n\nfunc (h *Handle) qdiscModify(cmd, flags int, qdisc Qdisc) error {\n\treq := h.newNetlinkRequest(cmd, flags|unix.NLM_F_ACK)\n\tbase := qdisc.Attrs()\n\tmsg := &nl.TcMsg{\n\t\tFamily:  nl.FAMILY_ALL,\n\t\tIfindex: int32(base.LinkIndex),\n\t\tHandle:  base.Handle,\n\t\tParent:  base.Parent,\n\t}\n\treq.AddData(msg)\n\n\t// When deleting don't bother building the rest of the netlink payload\n\tif cmd != unix.RTM_DELQDISC {\n\t\tif err := qdiscPayload(req, qdisc); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\nfunc qdiscPayload(req *nl.NetlinkRequest, qdisc Qdisc) error {\n\n\treq.AddData(nl.NewRtAttr(nl.TCA_KIND, nl.ZeroTerminated(qdisc.Type())))\n\tif qdisc.Attrs().IngressBlock != nil {\n\t\treq.AddData(nl.NewRtAttr(nl.TCA_INGRESS_BLOCK, nl.Uint32Attr(*qdisc.Attrs().IngressBlock)))\n\t}\n\n\toptions := nl.NewRtAttr(nl.TCA_OPTIONS, nil)\n\n\tswitch qdisc := qdisc.(type) {\n\tcase *Prio:\n\t\ttcmap := nl.TcPrioMap{\n\t\t\tBands:   int32(qdisc.Bands),\n\t\t\tPriomap: qdisc.PriorityMap,\n\t\t}\n\t\toptions = nl.NewRtAttr(nl.TCA_OPTIONS, tcmap.Serialize())\n\tcase *Tbf:\n\t\topt := nl.TcTbfQopt{}\n\t\topt.Rate.Rate = uint32(qdisc.Rate)\n\t\topt.Peakrate.Rate = uint32(qdisc.Peakrate)\n\t\topt.Limit = qdisc.Limit\n\t\topt.Buffer = qdisc.Buffer\n\t\toptions.AddRtAttr(nl.TCA_TBF_PARMS, opt.Serialize())\n\t\tif qdisc.Rate >= uint64(1<<32) {\n\t\t\toptions.AddRtAttr(nl.TCA_TBF_RATE64, nl.Uint64Attr(qdisc.Rate))\n\t\t}\n\t\tif qdisc.Peakrate >= uint64(1<<32) {\n\t\t\toptions.AddRtAttr(nl.TCA_TBF_PRATE64, nl.Uint64Attr(qdisc.Peakrate))\n\t\t}\n\t\tif qdisc.Peakrate > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_TBF_PBURST, nl.Uint32Attr(qdisc.Minburst))\n\t\t}\n\tcase *Htb:\n\t\topt := nl.TcHtbGlob{}\n\t\topt.Version = qdisc.Version\n\t\topt.Rate2Quantum = qdisc.Rate2Quantum\n\t\topt.Defcls = qdisc.Defcls\n\t\t// TODO: Handle Debug properly. For now default to 0\n\t\topt.Debug = qdisc.Debug\n\t\topt.DirectPkts = qdisc.DirectPkts\n\t\toptions.AddRtAttr(nl.TCA_HTB_INIT, opt.Serialize())\n\t\tif qdisc.DirectQlen != nil {\n\t\t\toptions.AddRtAttr(nl.TCA_HTB_DIRECT_QLEN, nl.Uint32Attr(*qdisc.DirectQlen))\n\t\t}\n\tcase *Hfsc:\n\t\topt := nl.TcHfscOpt{}\n\t\topt.Defcls = qdisc.Defcls\n\t\toptions = nl.NewRtAttr(nl.TCA_OPTIONS, opt.Serialize())\n\tcase *Netem:\n\t\topt := nl.TcNetemQopt{}\n\t\topt.Latency = qdisc.Latency\n\t\topt.Limit = qdisc.Limit\n\t\topt.Loss = qdisc.Loss\n\t\topt.Gap = qdisc.Gap\n\t\topt.Duplicate = qdisc.Duplicate\n\t\topt.Jitter = qdisc.Jitter\n\t\toptions = nl.NewRtAttr(nl.TCA_OPTIONS, opt.Serialize())\n\t\t// Correlation\n\t\tcorr := nl.TcNetemCorr{}\n\t\tcorr.DelayCorr = qdisc.DelayCorr\n\t\tcorr.LossCorr = qdisc.LossCorr\n\t\tcorr.DupCorr = qdisc.DuplicateCorr\n\n\t\tif corr.DelayCorr > 0 || corr.LossCorr > 0 || corr.DupCorr > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_NETEM_CORR, corr.Serialize())\n\t\t}\n\t\t// Corruption\n\t\tcorruption := nl.TcNetemCorrupt{}\n\t\tcorruption.Probability = qdisc.CorruptProb\n\t\tcorruption.Correlation = qdisc.CorruptCorr\n\t\tif corruption.Probability > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_NETEM_CORRUPT, corruption.Serialize())\n\t\t}\n\t\t// Reorder\n\t\treorder := nl.TcNetemReorder{}\n\t\treorder.Probability = qdisc.ReorderProb\n\t\treorder.Correlation = qdisc.ReorderCorr\n\t\tif reorder.Probability > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_NETEM_REORDER, reorder.Serialize())\n\t\t}\n\t\t// Rate\n\t\tif qdisc.Rate64 > 0 {\n\t\t\trate := nl.TcNetemRate{}\n\t\t\tif qdisc.Rate64 >= uint64(1<<32) {\n\t\t\t\toptions.AddRtAttr(nl.TCA_NETEM_RATE64, nl.Uint64Attr(qdisc.Rate64))\n\t\t\t\trate.Rate = ^uint32(0)\n\t\t\t} else {\n\t\t\t\trate.Rate = uint32(qdisc.Rate64)\n\t\t\t}\n\t\t\toptions.AddRtAttr(nl.TCA_NETEM_RATE, rate.Serialize())\n\t\t}\n\tcase *Clsact:\n\t\toptions = nil\n\tcase *Ingress:\n\t\t// ingress filters must use the proper handle\n\t\tif qdisc.Attrs().Parent != HANDLE_INGRESS {\n\t\t\treturn fmt.Errorf(\"Ingress filters must set Parent to HANDLE_INGRESS\")\n\t\t}\n\tcase *FqCodel:\n\t\toptions.AddRtAttr(nl.TCA_FQ_CODEL_ECN, nl.Uint32Attr((uint32(qdisc.ECN))))\n\t\tif qdisc.Limit > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_CODEL_LIMIT, nl.Uint32Attr((uint32(qdisc.Limit))))\n\t\t}\n\t\tif qdisc.Interval > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_CODEL_INTERVAL, nl.Uint32Attr((uint32(qdisc.Interval))))\n\t\t}\n\t\tif qdisc.Flows > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_CODEL_FLOWS, nl.Uint32Attr((uint32(qdisc.Flows))))\n\t\t}\n\t\tif qdisc.Quantum > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_CODEL_QUANTUM, nl.Uint32Attr((uint32(qdisc.Quantum))))\n\t\t}\n\t\tif qdisc.CEThreshold > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_CODEL_CE_THRESHOLD, nl.Uint32Attr(qdisc.CEThreshold))\n\t\t}\n\t\tif qdisc.DropBatchSize > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_CODEL_DROP_BATCH_SIZE, nl.Uint32Attr(qdisc.DropBatchSize))\n\t\t}\n\t\tif qdisc.MemoryLimit > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_CODEL_MEMORY_LIMIT, nl.Uint32Attr(qdisc.MemoryLimit))\n\t\t}\n\tcase *Fq:\n\t\toptions.AddRtAttr(nl.TCA_FQ_RATE_ENABLE, nl.Uint32Attr((uint32(qdisc.Pacing))))\n\n\t\tif qdisc.Buckets > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_BUCKETS_LOG, nl.Uint32Attr((uint32(qdisc.Buckets))))\n\t\t}\n\t\tif qdisc.PacketLimit > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_PLIMIT, nl.Uint32Attr((uint32(qdisc.PacketLimit))))\n\t\t}\n\t\tif qdisc.LowRateThreshold > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_LOW_RATE_THRESHOLD, nl.Uint32Attr((uint32(qdisc.LowRateThreshold))))\n\t\t}\n\t\tif qdisc.Quantum > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_QUANTUM, nl.Uint32Attr((uint32(qdisc.Quantum))))\n\t\t}\n\t\tif qdisc.InitialQuantum > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_INITIAL_QUANTUM, nl.Uint32Attr((uint32(qdisc.InitialQuantum))))\n\t\t}\n\t\tif qdisc.FlowRefillDelay > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_FLOW_REFILL_DELAY, nl.Uint32Attr((uint32(qdisc.FlowRefillDelay))))\n\t\t}\n\t\tif qdisc.FlowPacketLimit > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_FLOW_PLIMIT, nl.Uint32Attr((uint32(qdisc.FlowPacketLimit))))\n\t\t}\n\t\tif qdisc.FlowMaxRate > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_FLOW_MAX_RATE, nl.Uint32Attr((uint32(qdisc.FlowMaxRate))))\n\t\t}\n\t\tif qdisc.FlowDefaultRate > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_FLOW_DEFAULT_RATE, nl.Uint32Attr((uint32(qdisc.FlowDefaultRate))))\n\t\t}\n\t\tif qdisc.Horizon > 0 {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_HORIZON, nl.Uint32Attr(qdisc.Horizon))\n\t\t}\n\t\tif qdisc.HorizonDropPolicy != HORIZON_DROP_POLICY_DEFAULT {\n\t\t\toptions.AddRtAttr(nl.TCA_FQ_HORIZON_DROP, nl.Uint8Attr(qdisc.HorizonDropPolicy))\n\t\t}\n\tcase *Sfq:\n\t\topt := nl.TcSfqQoptV1{}\n\t\topt.TcSfqQopt.Quantum = qdisc.Quantum\n\t\topt.TcSfqQopt.Perturb = qdisc.Perturb\n\t\topt.TcSfqQopt.Limit = qdisc.Limit\n\t\topt.TcSfqQopt.Divisor = qdisc.Divisor\n\n\t\toptions = nl.NewRtAttr(nl.TCA_OPTIONS, opt.Serialize())\n\tdefault:\n\t\toptions = nil\n\t}\n\n\tif options != nil {\n\t\treq.AddData(options)\n\t}\n\treturn nil\n}\n\n// QdiscList gets a list of qdiscs in the system.\n// Equivalent to: `tc qdisc show`.\n// The list can be filtered by link.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc QdiscList(link Link) ([]Qdisc, error) {\n\treturn pkgHandle.QdiscList(link)\n}\n\n// QdiscList gets a list of qdiscs in the system.\n// Equivalent to: `tc qdisc show`.\n// The list can be filtered by link.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) QdiscList(link Link) ([]Qdisc, error) {\n\treq := h.newNetlinkRequest(unix.RTM_GETQDISC, unix.NLM_F_DUMP)\n\tindex := int32(0)\n\tif link != nil {\n\t\tbase := link.Attrs()\n\t\th.ensureIndex(base)\n\t\tindex = int32(base.Index)\n\t}\n\tmsg := &nl.TcMsg{\n\t\tFamily:  nl.FAMILY_ALL,\n\t\tIfindex: index,\n\t}\n\treq.AddData(msg)\n\n\tmsgs, executeErr := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWQDISC)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\tvar res []Qdisc\n\tfor _, m := range msgs {\n\t\tmsg := nl.DeserializeTcMsg(m)\n\n\t\tattrs, err := nl.ParseRouteAttr(m[msg.Len():])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// skip qdiscs from other interfaces\n\t\tif link != nil && msg.Ifindex != index {\n\t\t\tcontinue\n\t\t}\n\n\t\tbase := QdiscAttrs{\n\t\t\tLinkIndex: int(msg.Ifindex),\n\t\t\tHandle:    msg.Handle,\n\t\t\tParent:    msg.Parent,\n\t\t\tRefcnt:    msg.Info,\n\t\t}\n\t\tvar qdisc Qdisc\n\t\tqdiscType := \"\"\n\t\tfor _, attr := range attrs {\n\t\t\tswitch attr.Attr.Type {\n\t\t\tcase nl.TCA_KIND:\n\t\t\t\tqdiscType = string(attr.Value[:len(attr.Value)-1])\n\t\t\t\tswitch qdiscType {\n\t\t\t\tcase \"pfifo_fast\":\n\t\t\t\t\tqdisc = &PfifoFast{}\n\t\t\t\tcase \"prio\":\n\t\t\t\t\tqdisc = &Prio{}\n\t\t\t\tcase \"tbf\":\n\t\t\t\t\tqdisc = &Tbf{}\n\t\t\t\tcase \"ingress\":\n\t\t\t\t\tqdisc = &Ingress{}\n\t\t\t\tcase \"htb\":\n\t\t\t\t\tqdisc = &Htb{}\n\t\t\t\tcase \"fq\":\n\t\t\t\t\tqdisc = &Fq{}\n\t\t\t\tcase \"hfsc\":\n\t\t\t\t\tqdisc = &Hfsc{}\n\t\t\t\tcase \"fq_codel\":\n\t\t\t\t\tqdisc = &FqCodel{}\n\t\t\t\tcase \"netem\":\n\t\t\t\t\tqdisc = &Netem{}\n\t\t\t\tcase \"sfq\":\n\t\t\t\t\tqdisc = &Sfq{}\n\t\t\t\tcase \"clsact\":\n\t\t\t\t\tqdisc = &Clsact{}\n\t\t\t\tdefault:\n\t\t\t\t\tqdisc = &GenericQdisc{QdiscType: qdiscType}\n\t\t\t\t}\n\t\t\tcase nl.TCA_OPTIONS:\n\t\t\t\tswitch qdiscType {\n\t\t\t\tcase \"pfifo_fast\":\n\t\t\t\t\t// pfifo returns TcPrioMap directly without wrapping it in rtattr\n\t\t\t\t\tif err := parsePfifoFastData(qdisc, attr.Value); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\tcase \"prio\":\n\t\t\t\t\t// prio returns TcPrioMap directly without wrapping it in rtattr\n\t\t\t\t\tif err := parsePrioData(qdisc, attr.Value); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\tcase \"tbf\":\n\t\t\t\t\tdata, err := nl.ParseRouteAttr(attr.Value)\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\tif err := parseTbfData(qdisc, data); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\tcase \"hfsc\":\n\t\t\t\t\tif err := parseHfscData(qdisc, attr.Value); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\tcase \"htb\":\n\t\t\t\t\tdata, err := nl.ParseRouteAttr(attr.Value)\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\tif err := parseHtbData(qdisc, data); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\tcase \"fq\":\n\t\t\t\t\tdata, err := nl.ParseRouteAttr(attr.Value)\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\tif err := parseFqData(qdisc, data); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\tcase \"fq_codel\":\n\t\t\t\t\tdata, err := nl.ParseRouteAttr(attr.Value)\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\tif err := parseFqCodelData(qdisc, data); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\tcase \"netem\":\n\t\t\t\t\tif err := parseNetemData(qdisc, attr.Value); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\tcase \"sfq\":\n\t\t\t\t\tif err := parseSfqData(qdisc, attr.Value); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\n\t\t\t\t\t// no options for ingress\n\t\t\t\t}\n\t\t\tcase nl.TCA_INGRESS_BLOCK:\n\t\t\t\tingressBlock := new(uint32)\n\t\t\t\t*ingressBlock = native.Uint32(attr.Value)\n\t\t\t\tbase.IngressBlock = ingressBlock\n\t\t\tcase nl.TCA_STATS:\n\t\t\t\ts, err := parseTcStats(attr.Value)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tbase.Statistics = (*QdiscStatistics)(s)\n\t\t\tcase nl.TCA_STATS2:\n\t\t\t\ts, err := parseTcStats2(attr.Value)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tbase.Statistics = (*QdiscStatistics)(s)\n\t\t\t}\n\t\t}\n\t\t*qdisc.Attrs() = base\n\t\tres = append(res, qdisc)\n\t}\n\n\treturn res, executeErr\n}\n\nfunc parsePfifoFastData(qdisc Qdisc, value []byte) error {\n\tpfifo := qdisc.(*PfifoFast)\n\ttcmap := nl.DeserializeTcPrioMap(value)\n\tpfifo.PriorityMap = tcmap.Priomap\n\tpfifo.Bands = uint8(tcmap.Bands)\n\treturn nil\n}\n\nfunc parsePrioData(qdisc Qdisc, value []byte) error {\n\tprio := qdisc.(*Prio)\n\ttcmap := nl.DeserializeTcPrioMap(value)\n\tprio.PriorityMap = tcmap.Priomap\n\tprio.Bands = uint8(tcmap.Bands)\n\treturn nil\n}\n\nfunc parseHtbData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {\n\thtb := qdisc.(*Htb)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.TCA_HTB_INIT:\n\t\t\topt := nl.DeserializeTcHtbGlob(datum.Value)\n\t\t\thtb.Version = opt.Version\n\t\t\thtb.Rate2Quantum = opt.Rate2Quantum\n\t\t\thtb.Defcls = opt.Defcls\n\t\t\thtb.Debug = opt.Debug\n\t\t\thtb.DirectPkts = opt.DirectPkts\n\t\tcase nl.TCA_HTB_DIRECT_QLEN:\n\t\t\tdirectQlen := native.Uint32(datum.Value)\n\t\t\thtb.DirectQlen = &directQlen\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc parseFqCodelData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {\n\tfqCodel := qdisc.(*FqCodel)\n\tfor _, datum := range data {\n\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.TCA_FQ_CODEL_TARGET:\n\t\t\tfqCodel.Target = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_CODEL_LIMIT:\n\t\t\tfqCodel.Limit = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_CODEL_INTERVAL:\n\t\t\tfqCodel.Interval = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_CODEL_ECN:\n\t\t\tfqCodel.ECN = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_CODEL_FLOWS:\n\t\t\tfqCodel.Flows = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_CODEL_QUANTUM:\n\t\t\tfqCodel.Quantum = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_CODEL_CE_THRESHOLD:\n\t\t\tfqCodel.CEThreshold = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_CODEL_DROP_BATCH_SIZE:\n\t\t\tfqCodel.DropBatchSize = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_CODEL_MEMORY_LIMIT:\n\t\t\tfqCodel.MemoryLimit = native.Uint32(datum.Value)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc parseHfscData(qdisc Qdisc, data []byte) error {\n\tHfsc := qdisc.(*Hfsc)\n\tHfsc.Defcls = native.Uint16(data)\n\treturn nil\n}\n\nfunc parseFqData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {\n\tfq := qdisc.(*Fq)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.TCA_FQ_BUCKETS_LOG:\n\t\t\tfq.Buckets = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_LOW_RATE_THRESHOLD:\n\t\t\tfq.LowRateThreshold = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_QUANTUM:\n\t\t\tfq.Quantum = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_RATE_ENABLE:\n\t\t\tfq.Pacing = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_INITIAL_QUANTUM:\n\t\t\tfq.InitialQuantum = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_ORPHAN_MASK:\n\t\t\t// TODO\n\t\tcase nl.TCA_FQ_FLOW_REFILL_DELAY:\n\t\t\tfq.FlowRefillDelay = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_FLOW_PLIMIT:\n\t\t\tfq.FlowPacketLimit = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_PLIMIT:\n\t\t\tfq.PacketLimit = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_FLOW_MAX_RATE:\n\t\t\tfq.FlowMaxRate = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_FLOW_DEFAULT_RATE:\n\t\t\tfq.FlowDefaultRate = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_HORIZON:\n\t\t\tfq.Horizon = native.Uint32(datum.Value)\n\t\tcase nl.TCA_FQ_HORIZON_DROP:\n\t\t\tfq.HorizonDropPolicy = datum.Value[0]\n\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc parseNetemData(qdisc Qdisc, value []byte) error {\n\tnetem := qdisc.(*Netem)\n\topt := nl.DeserializeTcNetemQopt(value)\n\tnetem.Latency = opt.Latency\n\tnetem.Limit = opt.Limit\n\tnetem.Loss = opt.Loss\n\tnetem.Gap = opt.Gap\n\tnetem.Duplicate = opt.Duplicate\n\tnetem.Jitter = opt.Jitter\n\tdata, err := nl.ParseRouteAttr(value[nl.SizeofTcNetemQopt:])\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar rate *nl.TcNetemRate\n\tvar rate64 uint64\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.TCA_NETEM_CORR:\n\t\t\topt := nl.DeserializeTcNetemCorr(datum.Value)\n\t\t\tnetem.DelayCorr = opt.DelayCorr\n\t\t\tnetem.LossCorr = opt.LossCorr\n\t\t\tnetem.DuplicateCorr = opt.DupCorr\n\t\tcase nl.TCA_NETEM_CORRUPT:\n\t\t\topt := nl.DeserializeTcNetemCorrupt(datum.Value)\n\t\t\tnetem.CorruptProb = opt.Probability\n\t\t\tnetem.CorruptCorr = opt.Correlation\n\t\tcase nl.TCA_NETEM_REORDER:\n\t\t\topt := nl.DeserializeTcNetemReorder(datum.Value)\n\t\t\tnetem.ReorderProb = opt.Probability\n\t\t\tnetem.ReorderCorr = opt.Correlation\n\t\tcase nl.TCA_NETEM_RATE:\n\t\t\trate = nl.DeserializeTcNetemRate(datum.Value)\n\t\tcase nl.TCA_NETEM_RATE64:\n\t\t\trate64 = native.Uint64(datum.Value)\n\t\t}\n\t}\n\tif rate != nil {\n\t\tnetem.Rate64 = uint64(rate.Rate)\n\t\tif rate64 > 0 {\n\t\t\tnetem.Rate64 = rate64\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc parseTbfData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {\n\ttbf := qdisc.(*Tbf)\n\tfor _, datum := range data {\n\t\tswitch datum.Attr.Type {\n\t\tcase nl.TCA_TBF_PARMS:\n\t\t\topt := nl.DeserializeTcTbfQopt(datum.Value)\n\t\t\ttbf.Rate = uint64(opt.Rate.Rate)\n\t\t\ttbf.Peakrate = uint64(opt.Peakrate.Rate)\n\t\t\ttbf.Limit = opt.Limit\n\t\t\ttbf.Buffer = opt.Buffer\n\t\tcase nl.TCA_TBF_RATE64:\n\t\t\ttbf.Rate = native.Uint64(datum.Value[0:8])\n\t\tcase nl.TCA_TBF_PRATE64:\n\t\t\ttbf.Peakrate = native.Uint64(datum.Value[0:8])\n\t\tcase nl.TCA_TBF_PBURST:\n\t\t\ttbf.Minburst = native.Uint32(datum.Value[0:4])\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc parseSfqData(qdisc Qdisc, value []byte) error {\n\tsfq := qdisc.(*Sfq)\n\topt := nl.DeserializeTcSfqQoptV1(value)\n\tsfq.Quantum = opt.TcSfqQopt.Quantum\n\tsfq.Perturb = opt.TcSfqQopt.Perturb\n\tsfq.Limit = opt.TcSfqQopt.Limit\n\tsfq.Divisor = opt.TcSfqQopt.Divisor\n\n\treturn nil\n}\n\nconst (\n\tTIME_UNITS_PER_SEC = 1000000\n)\n\nvar (\n\ttickInUsec  float64\n\tclockFactor float64\n\thz          float64\n\n\t// Without this, the go race detector may report races.\n\tinitClockMutex sync.Mutex\n)\n\nfunc initClock() {\n\tdata, err := ioutil.ReadFile(\"/proc/net/psched\")\n\tif err != nil {\n\t\treturn\n\t}\n\tparts := strings.Split(strings.TrimSpace(string(data)), \" \")\n\tif len(parts) < 4 {\n\t\treturn\n\t}\n\tvar vals [4]uint64\n\tfor i := range vals {\n\t\tval, err := strconv.ParseUint(parts[i], 16, 32)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tvals[i] = val\n\t}\n\t// compatibility\n\tif vals[2] == 1000000000 {\n\t\tvals[0] = vals[1]\n\t}\n\tclockFactor = float64(vals[2]) / TIME_UNITS_PER_SEC\n\ttickInUsec = float64(vals[0]) / float64(vals[1]) * clockFactor\n\tif vals[2] == 1000000 {\n\t\t// ref https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/tree/lib/utils.c#n963\n\t\thz = float64(vals[3])\n\t} else {\n\t\thz = 100\n\t}\n}\n\nfunc TickInUsec() float64 {\n\tinitClockMutex.Lock()\n\tdefer initClockMutex.Unlock()\n\tif tickInUsec == 0.0 {\n\t\tinitClock()\n\t}\n\treturn tickInUsec\n}\n\nfunc ClockFactor() float64 {\n\tinitClockMutex.Lock()\n\tdefer initClockMutex.Unlock()\n\tif clockFactor == 0.0 {\n\t\tinitClock()\n\t}\n\treturn clockFactor\n}\n\nfunc Hz() float64 {\n\tinitClockMutex.Lock()\n\tdefer initClockMutex.Unlock()\n\tif hz == 0.0 {\n\t\tinitClock()\n\t}\n\treturn hz\n}\n\nfunc time2Tick(time uint32) uint32 {\n\treturn uint32(float64(time) * TickInUsec())\n}\n\nfunc tick2Time(tick uint32) uint32 {\n\treturn uint32(float64(tick) / TickInUsec())\n}\n\nfunc time2Ktime(time uint32) uint32 {\n\treturn uint32(float64(time) * ClockFactor())\n}\n\nfunc ktime2Time(ktime uint32) uint32 {\n\treturn uint32(float64(ktime) / ClockFactor())\n}\n\nfunc burst(rate uint64, buffer uint32) uint32 {\n\treturn uint32(float64(rate) * float64(tick2Time(buffer)) / TIME_UNITS_PER_SEC)\n}\n\nfunc latency(rate uint64, limit, buffer uint32) float64 {\n\treturn TIME_UNITS_PER_SEC*(float64(limit)/float64(rate)) - float64(tick2Time(buffer))\n}\n\nfunc Xmittime(rate uint64, size uint32) uint32 {\n\t// https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/tree/tc/tc_core.c#n62\n\treturn time2Tick(uint32(TIME_UNITS_PER_SEC * (float64(size) / float64(rate))))\n}\n\nfunc Xmitsize(rate uint64, ticks uint32) uint32 {\n\treturn uint32((float64(rate) * float64(tick2Time(ticks))) / TIME_UNITS_PER_SEC)\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/rdma_link_linux.go",
    "content": "package netlink\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// LinkAttrs represents data shared by most link types\ntype RdmaLinkAttrs struct {\n\tIndex           uint32\n\tName            string\n\tFirmwareVersion string\n\tNodeGuid        string\n\tSysImageGuid    string\n\tNumPorts        uint32\n}\n\n// Link represents a rdma device from netlink.\ntype RdmaLink struct {\n\tAttrs RdmaLinkAttrs\n}\n\nfunc getProtoField(clientType int, op int) int {\n\treturn ((clientType << nl.RDMA_NL_GET_CLIENT_SHIFT) | op)\n}\n\nfunc uint64ToGuidString(guid uint64) string {\n\t//Convert to byte array\n\tsysGuidBytes := new(bytes.Buffer)\n\tbinary.Write(sysGuidBytes, binary.LittleEndian, guid)\n\n\t//Convert to HardwareAddr\n\tsysGuidNet := net.HardwareAddr(sysGuidBytes.Bytes())\n\n\t//Get the String\n\treturn sysGuidNet.String()\n}\n\nfunc executeOneGetRdmaLink(data []byte) (*RdmaLink, error) {\n\n\tlink := RdmaLink{}\n\n\treader := bytes.NewReader(data)\n\tfor reader.Len() >= 4 {\n\t\t_, attrType, len, value := parseNfAttrTLV(reader)\n\n\t\tswitch attrType {\n\t\tcase nl.RDMA_NLDEV_ATTR_DEV_INDEX:\n\t\t\tvar Index uint32\n\t\t\tr := bytes.NewReader(value)\n\t\t\tbinary.Read(r, nl.NativeEndian(), &Index)\n\t\t\tlink.Attrs.Index = Index\n\t\tcase nl.RDMA_NLDEV_ATTR_DEV_NAME:\n\t\t\tlink.Attrs.Name = string(value[0 : len-1])\n\t\tcase nl.RDMA_NLDEV_ATTR_FW_VERSION:\n\t\t\tlink.Attrs.FirmwareVersion = string(value[0 : len-1])\n\t\tcase nl.RDMA_NLDEV_ATTR_NODE_GUID:\n\t\t\tvar guid uint64\n\t\t\tr := bytes.NewReader(value)\n\t\t\tbinary.Read(r, nl.NativeEndian(), &guid)\n\t\t\tlink.Attrs.NodeGuid = uint64ToGuidString(guid)\n\t\tcase nl.RDMA_NLDEV_ATTR_SYS_IMAGE_GUID:\n\t\t\tvar sysGuid uint64\n\t\t\tr := bytes.NewReader(value)\n\t\t\tbinary.Read(r, nl.NativeEndian(), &sysGuid)\n\t\t\tlink.Attrs.SysImageGuid = uint64ToGuidString(sysGuid)\n\t\tcase nl.RDMA_NLDEV_ATTR_PORT_INDEX:\n\t\t\tvar availablePort uint32\n\t\t\tr := bytes.NewReader(value)\n\t\t\tbinary.Read(r, nl.NativeEndian(), &availablePort)\n\t\t\tlink.Attrs.NumPorts = availablePort\n\t\t}\n\t\tif (len % 4) != 0 {\n\t\t\t// Skip pad bytes\n\t\t\treader.Seek(int64(4-(len%4)), seekCurrent)\n\t\t}\n\t}\n\treturn &link, nil\n}\n\nfunc execRdmaSetLink(req *nl.NetlinkRequest) error {\n\n\t_, err := req.Execute(unix.NETLINK_RDMA, 0)\n\treturn err\n}\n\n// RdmaLinkList gets a list of RDMA link devices.\n// Equivalent to: `rdma dev show`\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc RdmaLinkList() ([]*RdmaLink, error) {\n\treturn pkgHandle.RdmaLinkList()\n}\n\n// RdmaLinkList gets a list of RDMA link devices.\n// Equivalent to: `rdma dev show`\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) RdmaLinkList() ([]*RdmaLink, error) {\n\tproto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_GET)\n\treq := h.newNetlinkRequest(proto, unix.NLM_F_ACK|unix.NLM_F_DUMP)\n\n\tmsgs, executeErr := req.Execute(unix.NETLINK_RDMA, 0)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\tvar res []*RdmaLink\n\tfor _, m := range msgs {\n\t\tlink, err := executeOneGetRdmaLink(m)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tres = append(res, link)\n\t}\n\n\treturn res, executeErr\n}\n\n// RdmaLinkByName finds a link by name and returns a pointer to the object if\n// found and nil error, otherwise returns error code.\n//\n// If the returned error is [ErrDumpInterrupted], the result may be missing or\n// outdated and the caller should retry.\nfunc RdmaLinkByName(name string) (*RdmaLink, error) {\n\treturn pkgHandle.RdmaLinkByName(name)\n}\n\n// RdmaLinkByName finds a link by name and returns a pointer to the object if\n// found and nil error, otherwise returns error code.\n//\n// If the returned error is [ErrDumpInterrupted], the result may be missing or\n// outdated and the caller should retry.\nfunc (h *Handle) RdmaLinkByName(name string) (*RdmaLink, error) {\n\tlinks, err := h.RdmaLinkList()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, link := range links {\n\t\tif link.Attrs.Name == name {\n\t\t\treturn link, nil\n\t\t}\n\t}\n\treturn nil, fmt.Errorf(\"Rdma device %v not found\", name)\n}\n\n// RdmaLinkSetName sets the name of the rdma link device. Return nil on success\n// or error otherwise.\n// Equivalent to: `rdma dev set $old_devname name $name`\nfunc RdmaLinkSetName(link *RdmaLink, name string) error {\n\treturn pkgHandle.RdmaLinkSetName(link, name)\n}\n\n// RdmaLinkSetName sets the name of the rdma link device. Return nil on success\n// or error otherwise.\n// Equivalent to: `rdma dev set $old_devname name $name`\nfunc (h *Handle) RdmaLinkSetName(link *RdmaLink, name string) error {\n\tproto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_SET)\n\treq := h.newNetlinkRequest(proto, unix.NLM_F_ACK)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, uint32(link.Attrs.Index))\n\tdata := nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_DEV_INDEX, b)\n\treq.AddData(data)\n\n\tb = make([]byte, len(name)+1)\n\tcopy(b, name)\n\tdata = nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_DEV_NAME, b)\n\treq.AddData(data)\n\n\treturn execRdmaSetLink(req)\n}\n\nfunc netnsModeToString(mode uint8) string {\n\tswitch mode {\n\tcase 0:\n\t\treturn \"exclusive\"\n\tcase 1:\n\t\treturn \"shared\"\n\tdefault:\n\t\treturn \"unknown\"\n\t}\n}\n\nfunc executeOneGetRdmaNetnsMode(data []byte) (string, error) {\n\treader := bytes.NewReader(data)\n\tfor reader.Len() >= 4 {\n\t\t_, attrType, len, value := parseNfAttrTLV(reader)\n\n\t\tswitch attrType {\n\t\tcase nl.RDMA_NLDEV_SYS_ATTR_NETNS_MODE:\n\t\t\tvar mode uint8\n\t\t\tr := bytes.NewReader(value)\n\t\t\tbinary.Read(r, nl.NativeEndian(), &mode)\n\t\t\treturn netnsModeToString(mode), nil\n\t\t}\n\t\tif (len % 4) != 0 {\n\t\t\t// Skip pad bytes\n\t\t\treader.Seek(int64(4-(len%4)), seekCurrent)\n\t\t}\n\t}\n\treturn \"\", fmt.Errorf(\"Invalid netns mode\")\n}\n\n// RdmaSystemGetNetnsMode gets the net namespace mode for RDMA subsystem\n// Returns mode string and error status as nil on success or returns error\n// otherwise.\n// Equivalent to: `rdma system show netns'\nfunc RdmaSystemGetNetnsMode() (string, error) {\n\treturn pkgHandle.RdmaSystemGetNetnsMode()\n}\n\n// RdmaSystemGetNetnsMode gets the net namespace mode for RDMA subsystem\n// Returns mode string and error status as nil on success or returns error\n// otherwise.\n// Equivalent to: `rdma system show netns'\nfunc (h *Handle) RdmaSystemGetNetnsMode() (string, error) {\n\n\tproto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_SYS_GET)\n\treq := h.newNetlinkRequest(proto, unix.NLM_F_ACK)\n\n\tmsgs, err := req.Execute(unix.NETLINK_RDMA, 0)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif len(msgs) == 0 {\n\t\treturn \"\", fmt.Errorf(\"No valid response from kernel\")\n\t}\n\treturn executeOneGetRdmaNetnsMode(msgs[0])\n}\n\nfunc netnsModeStringToUint8(mode string) (uint8, error) {\n\tswitch mode {\n\tcase \"exclusive\":\n\t\treturn 0, nil\n\tcase \"shared\":\n\t\treturn 1, nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"Invalid mode; %q\", mode)\n\t}\n}\n\n// RdmaSystemSetNetnsMode sets the net namespace mode for RDMA subsystem\n// Returns nil on success or appropriate error code.\n// Equivalent to: `rdma system set netns { shared | exclusive }'\nfunc RdmaSystemSetNetnsMode(NewMode string) error {\n\treturn pkgHandle.RdmaSystemSetNetnsMode(NewMode)\n}\n\n// RdmaSystemSetNetnsMode sets the net namespace mode for RDMA subsystem\n// Returns nil on success or appropriate error code.\n// Equivalent to: `rdma system set netns { shared | exclusive }'\nfunc (h *Handle) RdmaSystemSetNetnsMode(NewMode string) error {\n\tvalue, err := netnsModeStringToUint8(NewMode)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tproto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_SYS_SET)\n\treq := h.newNetlinkRequest(proto, unix.NLM_F_ACK)\n\n\tdata := nl.NewRtAttr(nl.RDMA_NLDEV_SYS_ATTR_NETNS_MODE, []byte{value})\n\treq.AddData(data)\n\n\t_, err = req.Execute(unix.NETLINK_RDMA, 0)\n\treturn err\n}\n\n// RdmaLinkSetNsFd puts the RDMA device into a new network namespace. The\n// fd must be an open file descriptor to a network namespace.\n// Similar to: `rdma dev set $dev netns $ns`\nfunc RdmaLinkSetNsFd(link *RdmaLink, fd uint32) error {\n\treturn pkgHandle.RdmaLinkSetNsFd(link, fd)\n}\n\n// RdmaLinkSetNsFd puts the RDMA device into a new network namespace. The\n// fd must be an open file descriptor to a network namespace.\n// Similar to: `rdma dev set $dev netns $ns`\nfunc (h *Handle) RdmaLinkSetNsFd(link *RdmaLink, fd uint32) error {\n\tproto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_SET)\n\treq := h.newNetlinkRequest(proto, unix.NLM_F_ACK)\n\n\tdata := nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_DEV_INDEX,\n\t\tnl.Uint32Attr(link.Attrs.Index))\n\treq.AddData(data)\n\n\tdata = nl.NewRtAttr(nl.RDMA_NLDEV_NET_NS_FD, nl.Uint32Attr(fd))\n\treq.AddData(data)\n\n\treturn execRdmaSetLink(req)\n}\n\n// RdmaLinkDel deletes an rdma link\n//\n// Similar to: rdma link delete NAME\n// REF: https://man7.org/linux/man-pages/man8/rdma-link.8.html\nfunc RdmaLinkDel(name string) error {\n\treturn pkgHandle.RdmaLinkDel(name)\n}\n\n// RdmaLinkDel deletes an rdma link.\n//\n// If the returned error is [ErrDumpInterrupted], the caller should retry.\nfunc (h *Handle) RdmaLinkDel(name string) error {\n\tlink, err := h.RdmaLinkByName(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tproto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_DELLINK)\n\treq := h.newNetlinkRequest(proto, unix.NLM_F_ACK)\n\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, link.Attrs.Index)\n\treq.AddData(nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_DEV_INDEX, b))\n\n\t_, err = req.Execute(unix.NETLINK_RDMA, 0)\n\treturn err\n}\n\n// RdmaLinkAdd adds an rdma link for the specified type to the network device.\n// Similar to: rdma link add NAME type TYPE netdev NETDEV\n//\n//\tNAME - specifies the new name of the rdma link to add\n//\tTYPE - specifies which rdma type to use.  Link types:\n//\t\trxe - Soft RoCE driver\n//\t\tsiw - Soft iWARP driver\n//\tNETDEV - specifies the network device to which the link is bound\n//\n// REF: https://man7.org/linux/man-pages/man8/rdma-link.8.html\nfunc RdmaLinkAdd(linkName, linkType, netdev string) error {\n\treturn pkgHandle.RdmaLinkAdd(linkName, linkType, netdev)\n}\n\n// RdmaLinkAdd adds an rdma link for the specified type to the network device.\nfunc (h *Handle) RdmaLinkAdd(linkName string, linkType string, netdev string) error {\n\tproto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_NEWLINK)\n\treq := h.newNetlinkRequest(proto, unix.NLM_F_ACK)\n\n\treq.AddData(nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_DEV_NAME, nl.ZeroTerminated(linkName)))\n\treq.AddData(nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_LINK_TYPE, nl.ZeroTerminated(linkType)))\n\treq.AddData(nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_NDEV_NAME, nl.ZeroTerminated(netdev)))\n\t_, err := req.Execute(unix.NETLINK_RDMA, 0)\n\treturn err\n}\n\n// RdmaResource represents a rdma device resource tracking summaries\ntype RdmaResource struct {\n\tIndex                      uint32\n\tName                       string\n\tRdmaResourceSummaryEntries map[string]uint64\n}\n\n// RdmaResourceList list rdma resource tracking information\n// Returns all rdma devices resource tracking summary on success or returns error\n// otherwise.\n// Equivalent to: `rdma resource'\nfunc RdmaResourceList() ([]*RdmaResource, error) {\n\treturn pkgHandle.RdmaResourceList()\n}\n\n// RdmaResourceList list rdma resource tracking information\n// Returns all rdma devices resource tracking summary on success or returns error\n// otherwise.\n// Equivalent to: `rdma resource'\nfunc (h *Handle) RdmaResourceList() ([]*RdmaResource, error) {\n\tproto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_RES_GET)\n\treq := h.newNetlinkRequest(proto, unix.NLM_F_ACK|unix.NLM_F_DUMP)\n\n\tmsgs, err := req.Execute(unix.NETLINK_RDMA, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(msgs) == 0 {\n\t\treturn nil, fmt.Errorf(\"No valid response from kernel\")\n\t}\n\tvar rdmaResources []*RdmaResource\n\tfor _, msg := range msgs {\n\t\tres, err := executeOneGetRdmaResourceList(msg)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\trdmaResources = append(rdmaResources, res)\n\t}\n\treturn rdmaResources, nil\n}\n\nfunc parseRdmaCounters(counterType uint16, data []byte) (map[string]uint64, error) {\n\tvar counterKeyType, counterValueType uint16\n\tswitch counterType {\n\tcase nl.RDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY:\n\t\tcounterKeyType = nl.RDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY_NAME\n\t\tcounterValueType = nl.RDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY_CURR\n\tcase nl.RDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY:\n\t\tcounterKeyType = nl.RDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY_NAME\n\t\tcounterValueType = nl.RDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY_VALUE\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"Invalid counter type: %d\", counterType)\n\t}\n\tcounters := make(map[string]uint64)\n\treader := bytes.NewReader(data)\n\n\tfor reader.Len() >= 4 {\n\t\t_, attrType, _, value := parseNfAttrTLV(reader)\n\t\tif attrType != counterType {\n\t\t\treturn nil, fmt.Errorf(\"Invalid resource summary entry type; %d\", attrType)\n\t\t}\n\n\t\tsummaryReader := bytes.NewReader(value)\n\t\tfor summaryReader.Len() >= 4 {\n\t\t\t_, attrType, len, value := parseNfAttrTLV(summaryReader)\n\t\t\tif attrType != counterKeyType {\n\t\t\t\treturn nil, fmt.Errorf(\"Invalid resource summary entry name type; %d\", attrType)\n\t\t\t}\n\t\t\tname := string(value[0 : len-1])\n\t\t\t// Skip pad bytes\n\t\t\tif (len % 4) != 0 {\n\t\t\t\tsummaryReader.Seek(int64(4-(len%4)), seekCurrent)\n\t\t\t}\n\t\t\t_, attrType, len, value = parseNfAttrTLV(summaryReader)\n\t\t\tif attrType != counterValueType {\n\t\t\t\treturn nil, fmt.Errorf(\"Invalid resource summary entry value type; %d\", attrType)\n\t\t\t}\n\t\t\tcounters[name] = native.Uint64(value)\n\t\t}\n\t}\n\treturn counters, nil\n}\n\nfunc executeOneGetRdmaResourceList(data []byte) (*RdmaResource, error) {\n\tvar res RdmaResource\n\treader := bytes.NewReader(data)\n\tfor reader.Len() >= 4 {\n\t\t_, attrType, len, value := parseNfAttrTLV(reader)\n\n\t\tswitch attrType {\n\t\tcase nl.RDMA_NLDEV_ATTR_DEV_INDEX:\n\t\t\tvar Index uint32\n\t\t\tr := bytes.NewReader(value)\n\t\t\tbinary.Read(r, nl.NativeEndian(), &Index)\n\t\t\tres.Index = Index\n\t\tcase nl.RDMA_NLDEV_ATTR_DEV_NAME:\n\t\t\tres.Name = string(value[0 : len-1])\n\t\tcase nl.RDMA_NLDEV_ATTR_RES_SUMMARY:\n\t\t\tvar err error\n\t\t\tres.RdmaResourceSummaryEntries, err = parseRdmaCounters(nl.RDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY, value)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\tif (len % 4) != 0 {\n\t\t\t// Skip pad bytes\n\t\t\treader.Seek(int64(4-(len%4)), seekCurrent)\n\t\t}\n\t}\n\treturn &res, nil\n}\n\n// RdmaPortStatistic represents a rdma port statistic counter\ntype RdmaPortStatistic struct {\n\tPortIndex  uint32\n\tStatistics map[string]uint64\n}\n\n// RdmaDeviceStatistic represents a rdma device statistic counter\ntype RdmaDeviceStatistic struct {\n\tRdmaPortStatistics []*RdmaPortStatistic\n}\n\n// RdmaStatistic get rdma device statistic counters\n// Returns rdma device statistic counters on success or returns error\n// otherwise.\n// Equivalent to: `rdma statistic show link [DEV]'\nfunc RdmaStatistic(link *RdmaLink) (*RdmaDeviceStatistic, error) {\n\treturn pkgHandle.RdmaStatistic(link)\n}\n\n// RdmaStatistic get rdma device statistic counters\n// Returns rdma device statistic counters on success or returns error\n// otherwise.\n// Equivalent to: `rdma statistic show link [DEV]'\nfunc (h *Handle) RdmaStatistic(link *RdmaLink) (*RdmaDeviceStatistic, error) {\n\trdmaLinkStatistic := make([]*RdmaPortStatistic, 0)\n\tfor portIndex := uint32(1); portIndex <= link.Attrs.NumPorts; portIndex++ {\n\t\tportStatistic, err := h.RdmaPortStatisticList(link, portIndex)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\trdmaLinkStatistic = append(rdmaLinkStatistic, portStatistic)\n\t}\n\treturn &RdmaDeviceStatistic{RdmaPortStatistics: rdmaLinkStatistic}, nil\n}\n\n// RdmaPortStatisticList get rdma device port statistic counters\n// Returns rdma device port statistic counters on success or returns error\n// otherwise.\n// Equivalent to: `rdma statistic show link [DEV/PORT]'\nfunc RdmaPortStatisticList(link *RdmaLink, port uint32) (*RdmaPortStatistic, error) {\n\treturn pkgHandle.RdmaPortStatisticList(link, port)\n}\n\n// RdmaPortStatisticList get rdma device port statistic counters\n// Returns rdma device port statistic counters on success or returns error\n// otherwise.\n// Equivalent to: `rdma statistic show link [DEV/PORT]'\nfunc (h *Handle) RdmaPortStatisticList(link *RdmaLink, port uint32) (*RdmaPortStatistic, error) {\n\tproto := getProtoField(nl.RDMA_NL_NLDEV, nl.RDMA_NLDEV_CMD_STAT_GET)\n\treq := h.newNetlinkRequest(proto, unix.NLM_F_ACK|unix.NLM_F_REQUEST)\n\tb := make([]byte, 4)\n\tnative.PutUint32(b, link.Attrs.Index)\n\tdata := nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_DEV_INDEX, b)\n\treq.AddData(data)\n\n\tb = make([]byte, 4)\n\tnative.PutUint32(b, port)\n\tdata = nl.NewRtAttr(nl.RDMA_NLDEV_ATTR_PORT_INDEX, b)\n\treq.AddData(data)\n\n\tmsgs, err := req.Execute(unix.NETLINK_RDMA, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(msgs) != 1 {\n\t\treturn nil, fmt.Errorf(\"No valid response from kernel\")\n\t}\n\treturn executeOneGetRdmaPortStatistics(msgs[0])\n}\n\nfunc executeOneGetRdmaPortStatistics(data []byte) (*RdmaPortStatistic, error) {\n\tvar stat RdmaPortStatistic\n\treader := bytes.NewReader(data)\n\tfor reader.Len() >= 4 {\n\t\t_, attrType, len, value := parseNfAttrTLV(reader)\n\n\t\tswitch attrType {\n\t\tcase nl.RDMA_NLDEV_ATTR_PORT_INDEX:\n\t\t\tvar Index uint32\n\t\t\tr := bytes.NewReader(value)\n\t\t\tbinary.Read(r, nl.NativeEndian(), &Index)\n\t\t\tstat.PortIndex = Index\n\t\tcase nl.RDMA_NLDEV_ATTR_STAT_HWCOUNTERS:\n\t\t\tvar err error\n\t\t\tstat.Statistics, err = parseRdmaCounters(nl.RDMA_NLDEV_ATTR_STAT_HWCOUNTER_ENTRY, value)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\tif (len % 4) != 0 {\n\t\t\t// Skip pad bytes\n\t\t\treader.Seek(int64(4-(len%4)), seekCurrent)\n\t\t}\n\t}\n\treturn &stat, nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/route.go",
    "content": "package netlink\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n)\n\n// Scope is an enum representing a route scope.\ntype Scope uint8\n\ntype NextHopFlag int\n\nconst (\n\tRT_FILTER_PROTOCOL uint64 = 1 << (1 + iota)\n\tRT_FILTER_SCOPE\n\tRT_FILTER_TYPE\n\tRT_FILTER_TOS\n\tRT_FILTER_IIF\n\tRT_FILTER_OIF\n\tRT_FILTER_DST\n\tRT_FILTER_SRC\n\tRT_FILTER_GW\n\tRT_FILTER_TABLE\n\tRT_FILTER_HOPLIMIT\n\tRT_FILTER_PRIORITY\n\tRT_FILTER_MARK\n\tRT_FILTER_MASK\n\tRT_FILTER_REALM\n)\n\ntype Destination interface {\n\tFamily() int\n\tDecode([]byte) error\n\tEncode() ([]byte, error)\n\tString() string\n\tEqual(Destination) bool\n}\n\ntype Encap interface {\n\tType() int\n\tDecode([]byte) error\n\tEncode() ([]byte, error)\n\tString() string\n\tEqual(Encap) bool\n}\n\n// Protocol describe what was the originator of the route\ntype RouteProtocol int\n\n// Route represents a netlink route.\ntype Route struct {\n\tLinkIndex        int\n\tILinkIndex       int\n\tScope            Scope\n\tDst              *net.IPNet\n\tSrc              net.IP\n\tGw               net.IP\n\tMultiPath        []*NexthopInfo\n\tProtocol         RouteProtocol\n\tPriority         int\n\tFamily           int\n\tTable            int\n\tType             int\n\tTos              int\n\tFlags            int\n\tMPLSDst          *int\n\tNewDst           Destination\n\tEncap            Encap\n\tVia              Destination\n\tRealm            int\n\tMTU              int\n\tMTULock          bool\n\tWindow           int\n\tRtt              int\n\tRttVar           int\n\tSsthresh         int\n\tCwnd             int\n\tAdvMSS           int\n\tReordering       int\n\tHoplimit         int\n\tInitCwnd         int\n\tFeatures         int\n\tRtoMin           int\n\tRtoMinLock       bool\n\tInitRwnd         int\n\tQuickACK         int\n\tCongctl          string\n\tFastOpenNoCookie int\n}\n\nfunc (r Route) String() string {\n\telems := []string{}\n\tif len(r.MultiPath) == 0 {\n\t\telems = append(elems, fmt.Sprintf(\"Ifindex: %d\", r.LinkIndex))\n\t}\n\tif r.MPLSDst != nil {\n\t\telems = append(elems, fmt.Sprintf(\"Dst: %d\", r.MPLSDst))\n\t} else {\n\t\telems = append(elems, fmt.Sprintf(\"Dst: %s\", r.Dst))\n\t}\n\tif r.NewDst != nil {\n\t\telems = append(elems, fmt.Sprintf(\"NewDst: %s\", r.NewDst))\n\t}\n\tif r.Encap != nil {\n\t\telems = append(elems, fmt.Sprintf(\"Encap: %s\", r.Encap))\n\t}\n\tif r.Via != nil {\n\t\telems = append(elems, fmt.Sprintf(\"Via: %s\", r.Via))\n\t}\n\telems = append(elems, fmt.Sprintf(\"Src: %s\", r.Src))\n\tif len(r.MultiPath) > 0 {\n\t\telems = append(elems, fmt.Sprintf(\"Gw: %s\", r.MultiPath))\n\t} else {\n\t\telems = append(elems, fmt.Sprintf(\"Gw: %s\", r.Gw))\n\t}\n\telems = append(elems, fmt.Sprintf(\"Flags: %s\", r.ListFlags()))\n\telems = append(elems, fmt.Sprintf(\"Table: %d\", r.Table))\n\telems = append(elems, fmt.Sprintf(\"Realm: %d\", r.Realm))\n\treturn fmt.Sprintf(\"{%s}\", strings.Join(elems, \" \"))\n}\n\nfunc (r Route) Equal(x Route) bool {\n\treturn r.LinkIndex == x.LinkIndex &&\n\t\tr.ILinkIndex == x.ILinkIndex &&\n\t\tr.Scope == x.Scope &&\n\t\tipNetEqual(r.Dst, x.Dst) &&\n\t\tr.Src.Equal(x.Src) &&\n\t\tr.Gw.Equal(x.Gw) &&\n\t\tnexthopInfoSlice(r.MultiPath).Equal(x.MultiPath) &&\n\t\tr.Protocol == x.Protocol &&\n\t\tr.Priority == x.Priority &&\n\t\tr.Realm == x.Realm &&\n\t\tr.Table == x.Table &&\n\t\tr.Type == x.Type &&\n\t\tr.Tos == x.Tos &&\n\t\tr.Hoplimit == x.Hoplimit &&\n\t\tr.Flags == x.Flags &&\n\t\t(r.MPLSDst == x.MPLSDst || (r.MPLSDst != nil && x.MPLSDst != nil && *r.MPLSDst == *x.MPLSDst)) &&\n\t\t(r.NewDst == x.NewDst || (r.NewDst != nil && r.NewDst.Equal(x.NewDst))) &&\n\t\t(r.Via == x.Via || (r.Via != nil && r.Via.Equal(x.Via))) &&\n\t\t(r.Encap == x.Encap || (r.Encap != nil && r.Encap.Equal(x.Encap)))\n}\n\nfunc (r *Route) SetFlag(flag NextHopFlag) {\n\tr.Flags |= int(flag)\n}\n\nfunc (r *Route) ClearFlag(flag NextHopFlag) {\n\tr.Flags &^= int(flag)\n}\n\ntype flagString struct {\n\tf NextHopFlag\n\ts string\n}\n\n// RouteUpdate is sent when a route changes - type is RTM_NEWROUTE or RTM_DELROUTE\n\n// NlFlags is only non-zero for RTM_NEWROUTE, the following flags can be set:\n//   - unix.NLM_F_REPLACE - Replace existing matching config object with this request\n//   - unix.NLM_F_EXCL - Don't replace the config object if it already exists\n//   - unix.NLM_F_CREATE - Create config object if it doesn't already exist\n//   - unix.NLM_F_APPEND - Add to the end of the object list\ntype RouteUpdate struct {\n\tType    uint16\n\tNlFlags uint16\n\tRoute\n}\n\ntype NexthopInfo struct {\n\tLinkIndex int\n\tHops      int\n\tGw        net.IP\n\tFlags     int\n\tNewDst    Destination\n\tEncap     Encap\n\tVia       Destination\n}\n\nfunc (n *NexthopInfo) String() string {\n\telems := []string{}\n\telems = append(elems, fmt.Sprintf(\"Ifindex: %d\", n.LinkIndex))\n\tif n.NewDst != nil {\n\t\telems = append(elems, fmt.Sprintf(\"NewDst: %s\", n.NewDst))\n\t}\n\tif n.Encap != nil {\n\t\telems = append(elems, fmt.Sprintf(\"Encap: %s\", n.Encap))\n\t}\n\tif n.Via != nil {\n\t\telems = append(elems, fmt.Sprintf(\"Via: %s\", n.Via))\n\t}\n\telems = append(elems, fmt.Sprintf(\"Weight: %d\", n.Hops+1))\n\telems = append(elems, fmt.Sprintf(\"Gw: %s\", n.Gw))\n\telems = append(elems, fmt.Sprintf(\"Flags: %s\", n.ListFlags()))\n\treturn fmt.Sprintf(\"{%s}\", strings.Join(elems, \" \"))\n}\n\nfunc (n NexthopInfo) Equal(x NexthopInfo) bool {\n\treturn n.LinkIndex == x.LinkIndex &&\n\t\tn.Hops == x.Hops &&\n\t\tn.Gw.Equal(x.Gw) &&\n\t\tn.Flags == x.Flags &&\n\t\t(n.NewDst == x.NewDst || (n.NewDst != nil && n.NewDst.Equal(x.NewDst))) &&\n\t\t(n.Encap == x.Encap || (n.Encap != nil && n.Encap.Equal(x.Encap)))\n}\n\ntype nexthopInfoSlice []*NexthopInfo\n\nfunc (n nexthopInfoSlice) Equal(x []*NexthopInfo) bool {\n\tif len(n) != len(x) {\n\t\treturn false\n\t}\n\tfor i := range n {\n\t\tif n[i] == nil || x[i] == nil {\n\t\t\treturn false\n\t\t}\n\t\tif !n[i].Equal(*x[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// ipNetEqual returns true iff both IPNet are equal\nfunc ipNetEqual(ipn1 *net.IPNet, ipn2 *net.IPNet) bool {\n\tif ipn1 == ipn2 {\n\t\treturn true\n\t}\n\tif ipn1 == nil || ipn2 == nil {\n\t\treturn false\n\t}\n\tm1, _ := ipn1.Mask.Size()\n\tm2, _ := ipn2.Mask.Size()\n\treturn m1 == m2 && ipn1.IP.Equal(ipn2.IP)\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/route_linux.go",
    "content": "package netlink\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"github.com/vishvananda/netns\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// RtAttr is shared so it is in netlink_linux.go\n\nconst (\n\tSCOPE_UNIVERSE Scope = unix.RT_SCOPE_UNIVERSE\n\tSCOPE_SITE     Scope = unix.RT_SCOPE_SITE\n\tSCOPE_LINK     Scope = unix.RT_SCOPE_LINK\n\tSCOPE_HOST     Scope = unix.RT_SCOPE_HOST\n\tSCOPE_NOWHERE  Scope = unix.RT_SCOPE_NOWHERE\n)\n\nfunc (s Scope) String() string {\n\tswitch s {\n\tcase SCOPE_UNIVERSE:\n\t\treturn \"universe\"\n\tcase SCOPE_SITE:\n\t\treturn \"site\"\n\tcase SCOPE_LINK:\n\t\treturn \"link\"\n\tcase SCOPE_HOST:\n\t\treturn \"host\"\n\tcase SCOPE_NOWHERE:\n\t\treturn \"nowhere\"\n\tdefault:\n\t\treturn \"unknown\"\n\t}\n}\n\nconst (\n\tFLAG_ONLINK    NextHopFlag = unix.RTNH_F_ONLINK\n\tFLAG_PERVASIVE NextHopFlag = unix.RTNH_F_PERVASIVE\n)\n\nvar testFlags = []flagString{\n\t{f: FLAG_ONLINK, s: \"onlink\"},\n\t{f: FLAG_PERVASIVE, s: \"pervasive\"},\n}\n\nfunc listFlags(flag int) []string {\n\tvar flags []string\n\tfor _, tf := range testFlags {\n\t\tif flag&int(tf.f) != 0 {\n\t\t\tflags = append(flags, tf.s)\n\t\t}\n\t}\n\treturn flags\n}\n\nfunc (r *Route) ListFlags() []string {\n\treturn listFlags(r.Flags)\n}\n\nfunc (n *NexthopInfo) ListFlags() []string {\n\treturn listFlags(n.Flags)\n}\n\ntype MPLSDestination struct {\n\tLabels []int\n}\n\nfunc (d *MPLSDestination) Family() int {\n\treturn nl.FAMILY_MPLS\n}\n\nfunc (d *MPLSDestination) Decode(buf []byte) error {\n\td.Labels = nl.DecodeMPLSStack(buf)\n\treturn nil\n}\n\nfunc (d *MPLSDestination) Encode() ([]byte, error) {\n\treturn nl.EncodeMPLSStack(d.Labels...), nil\n}\n\nfunc (d *MPLSDestination) String() string {\n\ts := make([]string, 0, len(d.Labels))\n\tfor _, l := range d.Labels {\n\t\ts = append(s, fmt.Sprintf(\"%d\", l))\n\t}\n\treturn strings.Join(s, \"/\")\n}\n\nfunc (d *MPLSDestination) Equal(x Destination) bool {\n\to, ok := x.(*MPLSDestination)\n\tif !ok {\n\t\treturn false\n\t}\n\tif d == nil && o == nil {\n\t\treturn true\n\t}\n\tif d == nil || o == nil {\n\t\treturn false\n\t}\n\tif d.Labels == nil && o.Labels == nil {\n\t\treturn true\n\t}\n\tif d.Labels == nil || o.Labels == nil {\n\t\treturn false\n\t}\n\tif len(d.Labels) != len(o.Labels) {\n\t\treturn false\n\t}\n\tfor i := range d.Labels {\n\t\tif d.Labels[i] != o.Labels[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\ntype MPLSEncap struct {\n\tLabels []int\n}\n\nfunc (e *MPLSEncap) Type() int {\n\treturn nl.LWTUNNEL_ENCAP_MPLS\n}\n\nfunc (e *MPLSEncap) Decode(buf []byte) error {\n\tif len(buf) < 4 {\n\t\treturn fmt.Errorf(\"lack of bytes\")\n\t}\n\tl := native.Uint16(buf)\n\tif len(buf) < int(l) {\n\t\treturn fmt.Errorf(\"lack of bytes\")\n\t}\n\tbuf = buf[:l]\n\ttyp := native.Uint16(buf[2:])\n\tif typ != nl.MPLS_IPTUNNEL_DST {\n\t\treturn fmt.Errorf(\"unknown MPLS Encap Type: %d\", typ)\n\t}\n\te.Labels = nl.DecodeMPLSStack(buf[4:])\n\treturn nil\n}\n\nfunc (e *MPLSEncap) Encode() ([]byte, error) {\n\ts := nl.EncodeMPLSStack(e.Labels...)\n\thdr := make([]byte, 4)\n\tnative.PutUint16(hdr, uint16(len(s)+4))\n\tnative.PutUint16(hdr[2:], nl.MPLS_IPTUNNEL_DST)\n\treturn append(hdr, s...), nil\n}\n\nfunc (e *MPLSEncap) String() string {\n\ts := make([]string, 0, len(e.Labels))\n\tfor _, l := range e.Labels {\n\t\ts = append(s, fmt.Sprintf(\"%d\", l))\n\t}\n\treturn strings.Join(s, \"/\")\n}\n\nfunc (e *MPLSEncap) Equal(x Encap) bool {\n\to, ok := x.(*MPLSEncap)\n\tif !ok {\n\t\treturn false\n\t}\n\tif e == nil && o == nil {\n\t\treturn true\n\t}\n\tif e == nil || o == nil {\n\t\treturn false\n\t}\n\tif e.Labels == nil && o.Labels == nil {\n\t\treturn true\n\t}\n\tif e.Labels == nil || o.Labels == nil {\n\t\treturn false\n\t}\n\tif len(e.Labels) != len(o.Labels) {\n\t\treturn false\n\t}\n\tfor i := range e.Labels {\n\t\tif e.Labels[i] != o.Labels[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// SEG6 definitions\ntype SEG6Encap struct {\n\tMode     int\n\tSegments []net.IP\n}\n\nfunc (e *SEG6Encap) Type() int {\n\treturn nl.LWTUNNEL_ENCAP_SEG6\n}\nfunc (e *SEG6Encap) Decode(buf []byte) error {\n\tif len(buf) < 4 {\n\t\treturn fmt.Errorf(\"lack of bytes\")\n\t}\n\t// Get Length(l) & Type(typ) : 2 + 2 bytes\n\tl := native.Uint16(buf)\n\tif len(buf) < int(l) {\n\t\treturn fmt.Errorf(\"lack of bytes\")\n\t}\n\tbuf = buf[:l] // make sure buf size upper limit is Length\n\ttyp := native.Uint16(buf[2:])\n\t// LWTUNNEL_ENCAP_SEG6 has only one attr type SEG6_IPTUNNEL_SRH\n\tif typ != nl.SEG6_IPTUNNEL_SRH {\n\t\treturn fmt.Errorf(\"unknown SEG6 Type: %d\", typ)\n\t}\n\n\tvar err error\n\te.Mode, e.Segments, err = nl.DecodeSEG6Encap(buf[4:])\n\n\treturn err\n}\nfunc (e *SEG6Encap) Encode() ([]byte, error) {\n\ts, err := nl.EncodeSEG6Encap(e.Mode, e.Segments)\n\thdr := make([]byte, 4)\n\tnative.PutUint16(hdr, uint16(len(s)+4))\n\tnative.PutUint16(hdr[2:], nl.SEG6_IPTUNNEL_SRH)\n\treturn append(hdr, s...), err\n}\nfunc (e *SEG6Encap) String() string {\n\tsegs := make([]string, 0, len(e.Segments))\n\t// append segment backwards (from n to 0) since seg#0 is the last segment.\n\tfor i := len(e.Segments); i > 0; i-- {\n\t\tsegs = append(segs, e.Segments[i-1].String())\n\t}\n\tstr := fmt.Sprintf(\"mode %s segs %d [ %s ]\", nl.SEG6EncapModeString(e.Mode),\n\t\tlen(e.Segments), strings.Join(segs, \" \"))\n\treturn str\n}\nfunc (e *SEG6Encap) Equal(x Encap) bool {\n\to, ok := x.(*SEG6Encap)\n\tif !ok {\n\t\treturn false\n\t}\n\tif e == o {\n\t\treturn true\n\t}\n\tif e == nil || o == nil {\n\t\treturn false\n\t}\n\tif e.Mode != o.Mode {\n\t\treturn false\n\t}\n\tif len(e.Segments) != len(o.Segments) {\n\t\treturn false\n\t}\n\tfor i := range e.Segments {\n\t\tif !e.Segments[i].Equal(o.Segments[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// SEG6LocalEncap definitions\ntype SEG6LocalEncap struct {\n\tFlags    [nl.SEG6_LOCAL_MAX]bool\n\tAction   int\n\tSegments []net.IP // from SRH in seg6_local_lwt\n\tTable    int      // table id for End.T and End.DT6\n\tVrfTable int      // vrftable id for END.DT4 and END.DT6\n\tInAddr   net.IP\n\tIn6Addr  net.IP\n\tIif      int\n\tOif      int\n\tbpf      bpfObj\n}\n\nfunc (e *SEG6LocalEncap) SetProg(progFd int, progName string) error {\n\tif progFd <= 0 {\n\t\treturn fmt.Errorf(\"seg6local bpf SetProg: invalid fd\")\n\t}\n\te.bpf.progFd = progFd\n\te.bpf.progName = progName\n\treturn nil\n}\n\nfunc (e *SEG6LocalEncap) Type() int {\n\treturn nl.LWTUNNEL_ENCAP_SEG6_LOCAL\n}\nfunc (e *SEG6LocalEncap) Decode(buf []byte) error {\n\tattrs, err := nl.ParseRouteAttr(buf)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor _, attr := range attrs {\n\t\tswitch attr.Attr.Type {\n\t\tcase nl.SEG6_LOCAL_ACTION:\n\t\t\te.Action = int(native.Uint32(attr.Value[0:4]))\n\t\t\te.Flags[nl.SEG6_LOCAL_ACTION] = true\n\t\tcase nl.SEG6_LOCAL_SRH:\n\t\t\te.Segments, err = nl.DecodeSEG6Srh(attr.Value[:])\n\t\t\te.Flags[nl.SEG6_LOCAL_SRH] = true\n\t\tcase nl.SEG6_LOCAL_TABLE:\n\t\t\te.Table = int(native.Uint32(attr.Value[0:4]))\n\t\t\te.Flags[nl.SEG6_LOCAL_TABLE] = true\n\t\tcase nl.SEG6_LOCAL_VRFTABLE:\n\t\t\te.VrfTable = int(native.Uint32(attr.Value[0:4]))\n\t\t\te.Flags[nl.SEG6_LOCAL_VRFTABLE] = true\n\t\tcase nl.SEG6_LOCAL_NH4:\n\t\t\te.InAddr = net.IP(attr.Value[0:4])\n\t\t\te.Flags[nl.SEG6_LOCAL_NH4] = true\n\t\tcase nl.SEG6_LOCAL_NH6:\n\t\t\te.In6Addr = net.IP(attr.Value[0:16])\n\t\t\te.Flags[nl.SEG6_LOCAL_NH6] = true\n\t\tcase nl.SEG6_LOCAL_IIF:\n\t\t\te.Iif = int(native.Uint32(attr.Value[0:4]))\n\t\t\te.Flags[nl.SEG6_LOCAL_IIF] = true\n\t\tcase nl.SEG6_LOCAL_OIF:\n\t\t\te.Oif = int(native.Uint32(attr.Value[0:4]))\n\t\t\te.Flags[nl.SEG6_LOCAL_OIF] = true\n\t\tcase nl.SEG6_LOCAL_BPF:\n\t\t\tvar bpfAttrs []syscall.NetlinkRouteAttr\n\t\t\tbpfAttrs, err = nl.ParseRouteAttr(attr.Value)\n\t\t\tbpfobj := bpfObj{}\n\t\t\tfor _, bpfAttr := range bpfAttrs {\n\t\t\t\tswitch bpfAttr.Attr.Type {\n\t\t\t\tcase nl.LWT_BPF_PROG_FD:\n\t\t\t\t\tbpfobj.progFd = int(native.Uint32(bpfAttr.Value))\n\t\t\t\tcase nl.LWT_BPF_PROG_NAME:\n\t\t\t\t\tbpfobj.progName = string(bpfAttr.Value)\n\t\t\t\tdefault:\n\t\t\t\t\terr = fmt.Errorf(\"seg6local bpf decode: unknown attribute: Type %d\", bpfAttr.Attr)\n\t\t\t\t}\n\t\t\t}\n\t\t\te.bpf = bpfobj\n\t\t\te.Flags[nl.SEG6_LOCAL_BPF] = true\n\t\t}\n\t}\n\treturn err\n}\nfunc (e *SEG6LocalEncap) Encode() ([]byte, error) {\n\tvar err error\n\tres := make([]byte, 8)\n\tnative.PutUint16(res, 8) // length\n\tnative.PutUint16(res[2:], nl.SEG6_LOCAL_ACTION)\n\tnative.PutUint32(res[4:], uint32(e.Action))\n\tif e.Flags[nl.SEG6_LOCAL_SRH] {\n\t\tsrh, err := nl.EncodeSEG6Srh(e.Segments)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tattr := make([]byte, 4)\n\t\tnative.PutUint16(attr, uint16(len(srh)+4))\n\t\tnative.PutUint16(attr[2:], nl.SEG6_LOCAL_SRH)\n\t\tattr = append(attr, srh...)\n\t\tres = append(res, attr...)\n\t}\n\tif e.Flags[nl.SEG6_LOCAL_TABLE] {\n\t\tattr := make([]byte, 8)\n\t\tnative.PutUint16(attr, 8)\n\t\tnative.PutUint16(attr[2:], nl.SEG6_LOCAL_TABLE)\n\t\tnative.PutUint32(attr[4:], uint32(e.Table))\n\t\tres = append(res, attr...)\n\t}\n\n\tif e.Flags[nl.SEG6_LOCAL_VRFTABLE] {\n\t\tattr := make([]byte, 8)\n\t\tnative.PutUint16(attr, 8)\n\t\tnative.PutUint16(attr[2:], nl.SEG6_LOCAL_VRFTABLE)\n\t\tnative.PutUint32(attr[4:], uint32(e.VrfTable))\n\t\tres = append(res, attr...)\n\t}\n\n\tif e.Flags[nl.SEG6_LOCAL_NH4] {\n\t\tattr := make([]byte, 4)\n\t\tnative.PutUint16(attr, 8)\n\t\tnative.PutUint16(attr[2:], nl.SEG6_LOCAL_NH4)\n\t\tipv4 := e.InAddr.To4()\n\t\tif ipv4 == nil {\n\t\t\terr = fmt.Errorf(\"SEG6_LOCAL_NH4 has invalid IPv4 address\")\n\t\t\treturn nil, err\n\t\t}\n\t\tattr = append(attr, ipv4...)\n\t\tres = append(res, attr...)\n\t}\n\tif e.Flags[nl.SEG6_LOCAL_NH6] {\n\t\tattr := make([]byte, 4)\n\t\tnative.PutUint16(attr, 20)\n\t\tnative.PutUint16(attr[2:], nl.SEG6_LOCAL_NH6)\n\t\tattr = append(attr, e.In6Addr...)\n\t\tres = append(res, attr...)\n\t}\n\tif e.Flags[nl.SEG6_LOCAL_IIF] {\n\t\tattr := make([]byte, 8)\n\t\tnative.PutUint16(attr, 8)\n\t\tnative.PutUint16(attr[2:], nl.SEG6_LOCAL_IIF)\n\t\tnative.PutUint32(attr[4:], uint32(e.Iif))\n\t\tres = append(res, attr...)\n\t}\n\tif e.Flags[nl.SEG6_LOCAL_OIF] {\n\t\tattr := make([]byte, 8)\n\t\tnative.PutUint16(attr, 8)\n\t\tnative.PutUint16(attr[2:], nl.SEG6_LOCAL_OIF)\n\t\tnative.PutUint32(attr[4:], uint32(e.Oif))\n\t\tres = append(res, attr...)\n\t}\n\tif e.Flags[nl.SEG6_LOCAL_BPF] {\n\t\tattr := nl.NewRtAttr(nl.SEG6_LOCAL_BPF, []byte{})\n\t\tif e.bpf.progFd != 0 {\n\t\t\tattr.AddRtAttr(nl.LWT_BPF_PROG_FD, nl.Uint32Attr(uint32(e.bpf.progFd)))\n\t\t}\n\t\tif e.bpf.progName != \"\" {\n\t\t\tattr.AddRtAttr(nl.LWT_BPF_PROG_NAME, nl.ZeroTerminated(e.bpf.progName))\n\t\t}\n\t\tres = append(res, attr.Serialize()...)\n\t}\n\treturn res, err\n}\nfunc (e *SEG6LocalEncap) String() string {\n\tstrs := make([]string, 0, nl.SEG6_LOCAL_MAX)\n\tstrs = append(strs, fmt.Sprintf(\"action %s\", nl.SEG6LocalActionString(e.Action)))\n\n\tif e.Flags[nl.SEG6_LOCAL_TABLE] {\n\t\tstrs = append(strs, fmt.Sprintf(\"table %d\", e.Table))\n\t}\n\n\tif e.Flags[nl.SEG6_LOCAL_VRFTABLE] {\n\t\tstrs = append(strs, fmt.Sprintf(\"vrftable %d\", e.VrfTable))\n\t}\n\n\tif e.Flags[nl.SEG6_LOCAL_NH4] {\n\t\tstrs = append(strs, fmt.Sprintf(\"nh4 %s\", e.InAddr))\n\t}\n\tif e.Flags[nl.SEG6_LOCAL_NH6] {\n\t\tstrs = append(strs, fmt.Sprintf(\"nh6 %s\", e.In6Addr))\n\t}\n\tif e.Flags[nl.SEG6_LOCAL_IIF] {\n\t\tlink, err := LinkByIndex(e.Iif)\n\t\tif err != nil {\n\t\t\tstrs = append(strs, fmt.Sprintf(\"iif %d\", e.Iif))\n\t\t} else {\n\t\t\tstrs = append(strs, fmt.Sprintf(\"iif %s\", link.Attrs().Name))\n\t\t}\n\t}\n\tif e.Flags[nl.SEG6_LOCAL_OIF] {\n\t\tlink, err := LinkByIndex(e.Oif)\n\t\tif err != nil {\n\t\t\tstrs = append(strs, fmt.Sprintf(\"oif %d\", e.Oif))\n\t\t} else {\n\t\t\tstrs = append(strs, fmt.Sprintf(\"oif %s\", link.Attrs().Name))\n\t\t}\n\t}\n\tif e.Flags[nl.SEG6_LOCAL_SRH] {\n\t\tsegs := make([]string, 0, len(e.Segments))\n\t\t// append segment backwards (from n to 0) since seg#0 is the last segment.\n\t\tfor i := len(e.Segments); i > 0; i-- {\n\t\t\tsegs = append(segs, e.Segments[i-1].String())\n\t\t}\n\t\tstrs = append(strs, fmt.Sprintf(\"segs %d [ %s ]\", len(e.Segments), strings.Join(segs, \" \")))\n\t}\n\tif e.Flags[nl.SEG6_LOCAL_BPF] {\n\t\tstrs = append(strs, fmt.Sprintf(\"bpf %s[%d]\", e.bpf.progName, e.bpf.progFd))\n\t}\n\treturn strings.Join(strs, \" \")\n}\nfunc (e *SEG6LocalEncap) Equal(x Encap) bool {\n\to, ok := x.(*SEG6LocalEncap)\n\tif !ok {\n\t\treturn false\n\t}\n\tif e == o {\n\t\treturn true\n\t}\n\tif e == nil || o == nil {\n\t\treturn false\n\t}\n\t// compare all arrays first\n\tfor i := range e.Flags {\n\t\tif e.Flags[i] != o.Flags[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\tif len(e.Segments) != len(o.Segments) {\n\t\treturn false\n\t}\n\tfor i := range e.Segments {\n\t\tif !e.Segments[i].Equal(o.Segments[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\t// compare values\n\tif !e.InAddr.Equal(o.InAddr) || !e.In6Addr.Equal(o.In6Addr) {\n\t\treturn false\n\t}\n\tif e.Action != o.Action || e.Table != o.Table || e.Iif != o.Iif || e.Oif != o.Oif || e.bpf != o.bpf || e.VrfTable != o.VrfTable {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// Encap BPF definitions\ntype bpfObj struct {\n\tprogFd   int\n\tprogName string\n}\ntype BpfEncap struct {\n\tprogs    [nl.LWT_BPF_MAX]bpfObj\n\theadroom int\n}\n\n// SetProg adds a bpf function to the route via netlink RTA_ENCAP. The fd must be a bpf\n// program loaded with bpf(type=BPF_PROG_TYPE_LWT_*) matching the direction the program should\n// be applied to (LWT_BPF_IN, LWT_BPF_OUT, LWT_BPF_XMIT).\nfunc (e *BpfEncap) SetProg(mode, progFd int, progName string) error {\n\tif progFd <= 0 {\n\t\treturn fmt.Errorf(\"lwt bpf SetProg: invalid fd\")\n\t}\n\tif mode <= nl.LWT_BPF_UNSPEC || mode >= nl.LWT_BPF_XMIT_HEADROOM {\n\t\treturn fmt.Errorf(\"lwt bpf SetProg:invalid mode\")\n\t}\n\te.progs[mode].progFd = progFd\n\te.progs[mode].progName = fmt.Sprintf(\"%s[fd:%d]\", progName, progFd)\n\treturn nil\n}\n\n// SetXmitHeadroom sets the xmit headroom (LWT_BPF_MAX_HEADROOM) via netlink RTA_ENCAP.\n// maximum headroom is LWT_BPF_MAX_HEADROOM\nfunc (e *BpfEncap) SetXmitHeadroom(headroom int) error {\n\tif headroom > nl.LWT_BPF_MAX_HEADROOM || headroom < 0 {\n\t\treturn fmt.Errorf(\"invalid headroom size. range is 0 - %d\", nl.LWT_BPF_MAX_HEADROOM)\n\t}\n\te.headroom = headroom\n\treturn nil\n}\n\nfunc (e *BpfEncap) Type() int {\n\treturn nl.LWTUNNEL_ENCAP_BPF\n}\nfunc (e *BpfEncap) Decode(buf []byte) error {\n\tif len(buf) < 4 {\n\t\treturn fmt.Errorf(\"lwt bpf decode: lack of bytes\")\n\t}\n\tnative := nl.NativeEndian()\n\tattrs, err := nl.ParseRouteAttr(buf)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"lwt bpf decode: failed parsing attribute. err: %v\", err)\n\t}\n\tfor _, attr := range attrs {\n\t\tif int(attr.Attr.Type) < 1 {\n\t\t\t// nl.LWT_BPF_UNSPEC\n\t\t\tcontinue\n\t\t}\n\t\tif int(attr.Attr.Type) > nl.LWT_BPF_MAX {\n\t\t\treturn fmt.Errorf(\"lwt bpf decode: received unknown attribute type: %d\", attr.Attr.Type)\n\t\t}\n\t\tswitch int(attr.Attr.Type) {\n\t\tcase nl.LWT_BPF_MAX_HEADROOM:\n\t\t\te.headroom = int(native.Uint32(attr.Value))\n\t\tdefault:\n\t\t\tbpfO := bpfObj{}\n\t\t\tparsedAttrs, err := nl.ParseRouteAttr(attr.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"lwt bpf decode: failed parsing route attribute\")\n\t\t\t}\n\t\t\tfor _, parsedAttr := range parsedAttrs {\n\t\t\t\tswitch int(parsedAttr.Attr.Type) {\n\t\t\t\tcase nl.LWT_BPF_PROG_FD:\n\t\t\t\t\tbpfO.progFd = int(native.Uint32(parsedAttr.Value))\n\t\t\t\tcase nl.LWT_BPF_PROG_NAME:\n\t\t\t\t\tbpfO.progName = string(parsedAttr.Value)\n\t\t\t\tdefault:\n\t\t\t\t\treturn fmt.Errorf(\"lwt bpf decode: received unknown attribute: type: %d, len: %d\", parsedAttr.Attr.Type, parsedAttr.Attr.Len)\n\t\t\t\t}\n\t\t\t}\n\t\t\te.progs[attr.Attr.Type] = bpfO\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (e *BpfEncap) Encode() ([]byte, error) {\n\tbuf := make([]byte, 0)\n\tnative = nl.NativeEndian()\n\tfor index, attr := range e.progs {\n\t\tnlMsg := nl.NewRtAttr(index, []byte{})\n\t\tif attr.progFd != 0 {\n\t\t\tnlMsg.AddRtAttr(nl.LWT_BPF_PROG_FD, nl.Uint32Attr(uint32(attr.progFd)))\n\t\t}\n\t\tif attr.progName != \"\" {\n\t\t\tnlMsg.AddRtAttr(nl.LWT_BPF_PROG_NAME, nl.ZeroTerminated(attr.progName))\n\t\t}\n\t\tif nlMsg.Len() > 4 {\n\t\t\tbuf = append(buf, nlMsg.Serialize()...)\n\t\t}\n\t}\n\tif len(buf) <= 4 {\n\t\treturn nil, fmt.Errorf(\"lwt bpf encode: bpf obj definitions returned empty buffer\")\n\t}\n\tif e.headroom > 0 {\n\t\thRoom := nl.NewRtAttr(nl.LWT_BPF_XMIT_HEADROOM, nl.Uint32Attr(uint32(e.headroom)))\n\t\tbuf = append(buf, hRoom.Serialize()...)\n\t}\n\treturn buf, nil\n}\n\nfunc (e *BpfEncap) String() string {\n\tprogs := make([]string, 0)\n\tfor index, obj := range e.progs {\n\t\tempty := bpfObj{}\n\t\tswitch index {\n\t\tcase nl.LWT_BPF_IN:\n\t\t\tif obj != empty {\n\t\t\t\tprogs = append(progs, fmt.Sprintf(\"in: %s\", obj.progName))\n\t\t\t}\n\t\tcase nl.LWT_BPF_OUT:\n\t\t\tif obj != empty {\n\t\t\t\tprogs = append(progs, fmt.Sprintf(\"out: %s\", obj.progName))\n\t\t\t}\n\t\tcase nl.LWT_BPF_XMIT:\n\t\t\tif obj != empty {\n\t\t\t\tprogs = append(progs, fmt.Sprintf(\"xmit: %s\", obj.progName))\n\t\t\t}\n\t\t}\n\t}\n\tif e.headroom > 0 {\n\t\tprogs = append(progs, fmt.Sprintf(\"xmit headroom: %d\", e.headroom))\n\t}\n\treturn strings.Join(progs, \" \")\n}\n\nfunc (e *BpfEncap) Equal(x Encap) bool {\n\to, ok := x.(*BpfEncap)\n\tif !ok {\n\t\treturn false\n\t}\n\tif e.headroom != o.headroom {\n\t\treturn false\n\t}\n\tfor i := range o.progs {\n\t\tif o.progs[i] != e.progs[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// IP6tnlEncap definition\ntype IP6tnlEncap struct {\n\tID       uint64\n\tDst      net.IP\n\tSrc      net.IP\n\tHoplimit uint8\n\tTC       uint8\n\tFlags    uint16\n}\n\nfunc (e *IP6tnlEncap) Type() int {\n\treturn nl.LWTUNNEL_ENCAP_IP6\n}\n\nfunc (e *IP6tnlEncap) Decode(buf []byte) error {\n\tattrs, err := nl.ParseRouteAttr(buf)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor _, attr := range attrs {\n\t\tswitch attr.Attr.Type {\n\t\tcase nl.LWTUNNEL_IP6_ID:\n\t\t\te.ID = uint64(native.Uint64(attr.Value[0:4]))\n\t\tcase nl.LWTUNNEL_IP6_DST:\n\t\t\te.Dst = net.IP(attr.Value[:])\n\t\tcase nl.LWTUNNEL_IP6_SRC:\n\t\t\te.Src = net.IP(attr.Value[:])\n\t\tcase nl.LWTUNNEL_IP6_HOPLIMIT:\n\t\t\te.Hoplimit = attr.Value[0]\n\t\tcase nl.LWTUNNEL_IP6_TC:\n\t\t\t// e.TC = attr.Value[0]\n\t\t\terr = fmt.Errorf(\"decoding TC in IP6tnlEncap is not supported\")\n\t\tcase nl.LWTUNNEL_IP6_FLAGS:\n\t\t\t// e.Flags = uint16(native.Uint16(attr.Value[0:2]))\n\t\t\terr = fmt.Errorf(\"decoding FLAG in IP6tnlEncap is not supported\")\n\t\tcase nl.LWTUNNEL_IP6_PAD:\n\t\t\terr = fmt.Errorf(\"decoding PAD in IP6tnlEncap is not supported\")\n\t\tcase nl.LWTUNNEL_IP6_OPTS:\n\t\t\terr = fmt.Errorf(\"decoding OPTS in IP6tnlEncap is not supported\")\n\t\t}\n\t}\n\treturn err\n}\n\nfunc (e *IP6tnlEncap) Encode() ([]byte, error) {\n\n\tfinal := []byte{}\n\n\tresID := make([]byte, 12)\n\tnative.PutUint16(resID, 12) //  2+2+8\n\tnative.PutUint16(resID[2:], nl.LWTUNNEL_IP6_ID)\n\tnative.PutUint64(resID[4:], 0)\n\tfinal = append(final, resID...)\n\n\tresDst := make([]byte, 4)\n\tnative.PutUint16(resDst, 20) //  2+2+16\n\tnative.PutUint16(resDst[2:], nl.LWTUNNEL_IP6_DST)\n\tresDst = append(resDst, e.Dst...)\n\tfinal = append(final, resDst...)\n\n\tresSrc := make([]byte, 4)\n\tnative.PutUint16(resSrc, 20)\n\tnative.PutUint16(resSrc[2:], nl.LWTUNNEL_IP6_SRC)\n\tresSrc = append(resSrc, e.Src...)\n\tfinal = append(final, resSrc...)\n\n\t// resTc := make([]byte, 5)\n\t// native.PutUint16(resTc, 5)\n\t// native.PutUint16(resTc[2:], nl.LWTUNNEL_IP6_TC)\n\t// resTc[4] = e.TC\n\t// final = append(final,resTc...)\n\n\tresHops := make([]byte, 5)\n\tnative.PutUint16(resHops, 5)\n\tnative.PutUint16(resHops[2:], nl.LWTUNNEL_IP6_HOPLIMIT)\n\tresHops[4] = e.Hoplimit\n\tfinal = append(final, resHops...)\n\n\t// resFlags := make([]byte, 6)\n\t// native.PutUint16(resFlags, 6)\n\t// native.PutUint16(resFlags[2:], nl.LWTUNNEL_IP6_FLAGS)\n\t// native.PutUint16(resFlags[4:], e.Flags)\n\t// final = append(final,resFlags...)\n\n\treturn final, nil\n}\n\nfunc (e *IP6tnlEncap) String() string {\n\treturn fmt.Sprintf(\"id %d src %s dst %s hoplimit %d tc %d flags 0x%.4x\", e.ID, e.Src, e.Dst, e.Hoplimit, e.TC, e.Flags)\n}\n\nfunc (e *IP6tnlEncap) Equal(x Encap) bool {\n\to, ok := x.(*IP6tnlEncap)\n\tif !ok {\n\t\treturn false\n\t}\n\n\tif e.ID != o.ID || e.Flags != o.Flags || e.Hoplimit != o.Hoplimit || e.Src.Equal(o.Src) || e.Dst.Equal(o.Dst) || e.TC != o.TC {\n\t\treturn false\n\t}\n\treturn true\n}\n\ntype Via struct {\n\tAddrFamily int\n\tAddr       net.IP\n}\n\nfunc (v *Via) Equal(x Destination) bool {\n\to, ok := x.(*Via)\n\tif !ok {\n\t\treturn false\n\t}\n\tif v.AddrFamily == x.Family() && v.Addr.Equal(o.Addr) {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (v *Via) String() string {\n\treturn fmt.Sprintf(\"Family: %d, Address: %s\", v.AddrFamily, v.Addr.String())\n}\n\nfunc (v *Via) Family() int {\n\treturn v.AddrFamily\n}\n\nfunc (v *Via) Encode() ([]byte, error) {\n\tbuf := &bytes.Buffer{}\n\terr := binary.Write(buf, native, uint16(v.AddrFamily))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = binary.Write(buf, native, v.Addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf.Bytes(), nil\n}\n\nfunc (v *Via) Decode(b []byte) error {\n\tif len(b) < 6 {\n\t\treturn fmt.Errorf(\"decoding failed: buffer too small (%d bytes)\", len(b))\n\t}\n\tv.AddrFamily = int(native.Uint16(b[0:2]))\n\tif v.AddrFamily == nl.FAMILY_V4 {\n\t\tv.Addr = net.IP(b[2:6])\n\t\treturn nil\n\t} else if v.AddrFamily == nl.FAMILY_V6 {\n\t\tif len(b) < 18 {\n\t\t\treturn fmt.Errorf(\"decoding failed: buffer too small (%d bytes)\", len(b))\n\t\t}\n\t\tv.Addr = net.IP(b[2:])\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(\"decoding failed: address family %d unknown\", v.AddrFamily)\n}\n\n// RouteAdd will add a route to the system.\n// Equivalent to: `ip route add $route`\nfunc RouteAdd(route *Route) error {\n\treturn pkgHandle.RouteAdd(route)\n}\n\n// RouteAdd will add a route to the system.\n// Equivalent to: `ip route add $route`\nfunc (h *Handle) RouteAdd(route *Route) error {\n\tflags := unix.NLM_F_CREATE | unix.NLM_F_EXCL | unix.NLM_F_ACK\n\treq := h.newNetlinkRequest(unix.RTM_NEWROUTE, flags)\n\t_, err := h.routeHandle(route, req, nl.NewRtMsg())\n\treturn err\n}\n\n// RouteAppend will append a route to the system.\n// Equivalent to: `ip route append $route`\nfunc RouteAppend(route *Route) error {\n\treturn pkgHandle.RouteAppend(route)\n}\n\n// RouteAppend will append a route to the system.\n// Equivalent to: `ip route append $route`\nfunc (h *Handle) RouteAppend(route *Route) error {\n\tflags := unix.NLM_F_CREATE | unix.NLM_F_APPEND | unix.NLM_F_ACK\n\treq := h.newNetlinkRequest(unix.RTM_NEWROUTE, flags)\n\t_, err := h.routeHandle(route, req, nl.NewRtMsg())\n\treturn err\n}\n\n// RouteAddEcmp will add a route to the system.\nfunc RouteAddEcmp(route *Route) error {\n\treturn pkgHandle.RouteAddEcmp(route)\n}\n\n// RouteAddEcmp will add a route to the system.\nfunc (h *Handle) RouteAddEcmp(route *Route) error {\n\tflags := unix.NLM_F_CREATE | unix.NLM_F_ACK\n\treq := h.newNetlinkRequest(unix.RTM_NEWROUTE, flags)\n\t_, err := h.routeHandle(route, req, nl.NewRtMsg())\n\treturn err\n}\n\n// RouteChange will change an existing route in the system.\n// Equivalent to: `ip route change $route`\nfunc RouteChange(route *Route) error {\n\treturn pkgHandle.RouteChange(route)\n}\n\n// RouteChange will change an existing route in the system.\n// Equivalent to: `ip route change $route`\nfunc (h *Handle) RouteChange(route *Route) error {\n\tflags := unix.NLM_F_REPLACE | unix.NLM_F_ACK\n\treq := h.newNetlinkRequest(unix.RTM_NEWROUTE, flags)\n\t_, err := h.routeHandle(route, req, nl.NewRtMsg())\n\treturn err\n}\n\n// RouteReplace will add a route to the system.\n// Equivalent to: `ip route replace $route`\nfunc RouteReplace(route *Route) error {\n\treturn pkgHandle.RouteReplace(route)\n}\n\n// RouteReplace will add a route to the system.\n// Equivalent to: `ip route replace $route`\nfunc (h *Handle) RouteReplace(route *Route) error {\n\tflags := unix.NLM_F_CREATE | unix.NLM_F_REPLACE | unix.NLM_F_ACK\n\treq := h.newNetlinkRequest(unix.RTM_NEWROUTE, flags)\n\t_, err := h.routeHandle(route, req, nl.NewRtMsg())\n\treturn err\n}\n\n// RouteDel will delete a route from the system.\n// Equivalent to: `ip route del $route`\nfunc RouteDel(route *Route) error {\n\treturn pkgHandle.RouteDel(route)\n}\n\n// RouteDel will delete a route from the system.\n// Equivalent to: `ip route del $route`\nfunc (h *Handle) RouteDel(route *Route) error {\n\treq := h.newNetlinkRequest(unix.RTM_DELROUTE, unix.NLM_F_ACK)\n\t_, err := h.routeHandle(route, req, nl.NewRtDelMsg())\n\treturn err\n}\n\nfunc (h *Handle) routeHandle(route *Route, req *nl.NetlinkRequest, msg *nl.RtMsg) ([][]byte, error) {\n\tif err := h.prepareRouteReq(route, req, msg); err != nil {\n\t\treturn nil, err\n\t}\n\treturn req.Execute(unix.NETLINK_ROUTE, 0)\n}\n\nfunc (h *Handle) routeHandleIter(route *Route, req *nl.NetlinkRequest, msg *nl.RtMsg, f func(msg []byte) bool) error {\n\tif err := h.prepareRouteReq(route, req, msg); err != nil {\n\t\treturn err\n\t}\n\treturn req.ExecuteIter(unix.NETLINK_ROUTE, 0, f)\n}\n\nfunc (h *Handle) prepareRouteReq(route *Route, req *nl.NetlinkRequest, msg *nl.RtMsg) error {\n\tif req.NlMsghdr.Type != unix.RTM_GETROUTE && (route.Dst == nil || route.Dst.IP == nil) && route.Src == nil && route.Gw == nil && route.MPLSDst == nil {\n\t\treturn fmt.Errorf(\"either Dst.IP, Src.IP or Gw must be set\")\n\t}\n\n\tfamily := -1\n\tvar rtAttrs []*nl.RtAttr\n\n\tif route.Dst != nil && route.Dst.IP != nil {\n\t\tdstLen, _ := route.Dst.Mask.Size()\n\t\tmsg.Dst_len = uint8(dstLen)\n\t\tdstFamily := nl.GetIPFamily(route.Dst.IP)\n\t\tfamily = dstFamily\n\t\tvar dstData []byte\n\t\tif dstFamily == FAMILY_V4 {\n\t\t\tdstData = route.Dst.IP.To4()\n\t\t} else {\n\t\t\tdstData = route.Dst.IP.To16()\n\t\t}\n\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_DST, dstData))\n\t} else if route.MPLSDst != nil {\n\t\tfamily = nl.FAMILY_MPLS\n\t\tmsg.Dst_len = uint8(20)\n\t\tmsg.Type = unix.RTN_UNICAST\n\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_DST, nl.EncodeMPLSStack(*route.MPLSDst)))\n\t}\n\n\tif route.NewDst != nil {\n\t\tif family != -1 && family != route.NewDst.Family() {\n\t\t\treturn fmt.Errorf(\"new destination and destination are not the same address family\")\n\t\t}\n\t\tbuf, err := route.NewDst.Encode()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_NEWDST, buf))\n\t}\n\n\tif route.Encap != nil {\n\t\tbuf := make([]byte, 2)\n\t\tnative.PutUint16(buf, uint16(route.Encap.Type()))\n\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_ENCAP_TYPE, buf))\n\t\tbuf, err := route.Encap.Encode()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch route.Encap.Type() {\n\t\tcase nl.LWTUNNEL_ENCAP_BPF:\n\t\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_ENCAP|unix.NLA_F_NESTED, buf))\n\t\tdefault:\n\t\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_ENCAP, buf))\n\t\t}\n\n\t}\n\n\tif route.Src != nil {\n\t\tsrcFamily := nl.GetIPFamily(route.Src)\n\t\tif family != -1 && family != srcFamily {\n\t\t\treturn fmt.Errorf(\"source and destination ip are not the same IP family\")\n\t\t}\n\t\tfamily = srcFamily\n\t\tvar srcData []byte\n\t\tif srcFamily == FAMILY_V4 {\n\t\t\tsrcData = route.Src.To4()\n\t\t} else {\n\t\t\tsrcData = route.Src.To16()\n\t\t}\n\t\t// The commonly used src ip for routes is actually PREFSRC\n\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_PREFSRC, srcData))\n\t}\n\n\tif route.Gw != nil {\n\t\tgwFamily := nl.GetIPFamily(route.Gw)\n\t\tif family != -1 && family != gwFamily {\n\t\t\treturn fmt.Errorf(\"gateway, source, and destination ip are not the same IP family\")\n\t\t}\n\t\tfamily = gwFamily\n\t\tvar gwData []byte\n\t\tif gwFamily == FAMILY_V4 {\n\t\t\tgwData = route.Gw.To4()\n\t\t} else {\n\t\t\tgwData = route.Gw.To16()\n\t\t}\n\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_GATEWAY, gwData))\n\t}\n\n\tif route.Via != nil {\n\t\tbuf, err := route.Via.Encode()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to encode RTA_VIA: %v\", err)\n\t\t}\n\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_VIA, buf))\n\t}\n\n\tif len(route.MultiPath) > 0 {\n\t\tbuf := []byte{}\n\t\tfor _, nh := range route.MultiPath {\n\t\t\trtnh := &nl.RtNexthop{\n\t\t\t\tRtNexthop: unix.RtNexthop{\n\t\t\t\t\tHops:    uint8(nh.Hops),\n\t\t\t\t\tIfindex: int32(nh.LinkIndex),\n\t\t\t\t\tFlags:   uint8(nh.Flags),\n\t\t\t\t},\n\t\t\t}\n\t\t\tchildren := []nl.NetlinkRequestData{}\n\t\t\tif nh.Gw != nil {\n\t\t\t\tgwFamily := nl.GetIPFamily(nh.Gw)\n\t\t\t\tif family != -1 && family != gwFamily {\n\t\t\t\t\treturn fmt.Errorf(\"gateway, source, and destination ip are not the same IP family\")\n\t\t\t\t}\n\t\t\t\tif gwFamily == FAMILY_V4 {\n\t\t\t\t\tchildren = append(children, nl.NewRtAttr(unix.RTA_GATEWAY, []byte(nh.Gw.To4())))\n\t\t\t\t} else {\n\t\t\t\t\tchildren = append(children, nl.NewRtAttr(unix.RTA_GATEWAY, []byte(nh.Gw.To16())))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif nh.NewDst != nil {\n\t\t\t\tif family != -1 && family != nh.NewDst.Family() {\n\t\t\t\t\treturn fmt.Errorf(\"new destination and destination are not the same address family\")\n\t\t\t\t}\n\t\t\t\tbuf, err := nh.NewDst.Encode()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tchildren = append(children, nl.NewRtAttr(unix.RTA_NEWDST, buf))\n\t\t\t}\n\t\t\tif nh.Encap != nil {\n\t\t\t\tbuf := make([]byte, 2)\n\t\t\t\tnative.PutUint16(buf, uint16(nh.Encap.Type()))\n\t\t\t\tchildren = append(children, nl.NewRtAttr(unix.RTA_ENCAP_TYPE, buf))\n\t\t\t\tbuf, err := nh.Encap.Encode()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tchildren = append(children, nl.NewRtAttr(unix.RTA_ENCAP, buf))\n\t\t\t}\n\t\t\tif nh.Via != nil {\n\t\t\t\tbuf, err := nh.Via.Encode()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tchildren = append(children, nl.NewRtAttr(unix.RTA_VIA, buf))\n\t\t\t}\n\t\t\trtnh.Children = children\n\t\t\tbuf = append(buf, rtnh.Serialize()...)\n\t\t}\n\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_MULTIPATH, buf))\n\t}\n\n\tif route.Table > 0 {\n\t\tif route.Table >= 256 {\n\t\t\tmsg.Table = unix.RT_TABLE_UNSPEC\n\t\t\tb := make([]byte, 4)\n\t\t\tnative.PutUint32(b, uint32(route.Table))\n\t\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_TABLE, b))\n\t\t} else {\n\t\t\tmsg.Table = uint8(route.Table)\n\t\t}\n\t}\n\n\tif route.Priority > 0 {\n\t\tb := make([]byte, 4)\n\t\tnative.PutUint32(b, uint32(route.Priority))\n\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_PRIORITY, b))\n\t}\n\tif route.Realm > 0 {\n\t\tb := make([]byte, 4)\n\t\tnative.PutUint32(b, uint32(route.Realm))\n\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_FLOW, b))\n\t}\n\tif route.Tos > 0 {\n\t\tmsg.Tos = uint8(route.Tos)\n\t}\n\tif route.Protocol > 0 {\n\t\tmsg.Protocol = uint8(route.Protocol)\n\t}\n\tif route.Type > 0 {\n\t\tmsg.Type = uint8(route.Type)\n\t}\n\n\tvar metrics []*nl.RtAttr\n\tif route.MTU > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.MTU))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_MTU, b))\n\t\tif route.MTULock {\n\t\t\tb := nl.Uint32Attr(uint32(1 << unix.RTAX_MTU))\n\t\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_LOCK, b))\n\t\t}\n\t}\n\tif route.Window > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.Window))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_WINDOW, b))\n\t}\n\tif route.Rtt > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.Rtt))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_RTT, b))\n\t}\n\tif route.RttVar > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.RttVar))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_RTTVAR, b))\n\t}\n\tif route.Ssthresh > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.Ssthresh))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_SSTHRESH, b))\n\t}\n\tif route.Cwnd > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.Cwnd))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_CWND, b))\n\t}\n\tif route.AdvMSS > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.AdvMSS))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_ADVMSS, b))\n\t}\n\tif route.Reordering > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.Reordering))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_REORDERING, b))\n\t}\n\tif route.Hoplimit > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.Hoplimit))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_HOPLIMIT, b))\n\t}\n\tif route.InitCwnd > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.InitCwnd))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_INITCWND, b))\n\t}\n\tif route.Features > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.Features))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_FEATURES, b))\n\t}\n\tif route.RtoMin > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.RtoMin))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_RTO_MIN, b))\n\t\tif route.RtoMinLock {\n\t\t\tb := nl.Uint32Attr(uint32(1 << unix.RTAX_RTO_MIN))\n\t\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_LOCK, b))\n\t\t}\n\t}\n\tif route.InitRwnd > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.InitRwnd))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_INITRWND, b))\n\t}\n\tif route.QuickACK > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.QuickACK))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_QUICKACK, b))\n\t}\n\tif route.Congctl != \"\" {\n\t\tb := nl.ZeroTerminated(route.Congctl)\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_CC_ALGO, b))\n\t}\n\tif route.FastOpenNoCookie > 0 {\n\t\tb := nl.Uint32Attr(uint32(route.FastOpenNoCookie))\n\t\tmetrics = append(metrics, nl.NewRtAttr(unix.RTAX_FASTOPEN_NO_COOKIE, b))\n\t}\n\n\tif metrics != nil {\n\t\tattr := nl.NewRtAttr(unix.RTA_METRICS, nil)\n\t\tfor _, metric := range metrics {\n\t\t\tattr.AddChild(metric)\n\t\t}\n\t\trtAttrs = append(rtAttrs, attr)\n\t}\n\n\tmsg.Flags = uint32(route.Flags)\n\tmsg.Scope = uint8(route.Scope)\n\t// only overwrite family if it was not set in msg\n\tif msg.Family == 0 {\n\t\tmsg.Family = uint8(family)\n\t}\n\treq.AddData(msg)\n\tfor _, attr := range rtAttrs {\n\t\treq.AddData(attr)\n\t}\n\n\tif (req.NlMsghdr.Type != unix.RTM_GETROUTE) || (req.NlMsghdr.Type == unix.RTM_GETROUTE && route.LinkIndex > 0) {\n\t\tb := make([]byte, 4)\n\t\tnative.PutUint32(b, uint32(route.LinkIndex))\n\t\treq.AddData(nl.NewRtAttr(unix.RTA_OIF, b))\n\t}\n\treturn nil\n}\n\n// RouteList gets a list of routes in the system.\n// Equivalent to: `ip route show`.\n// The list can be filtered by link and ip family.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc RouteList(link Link, family int) ([]Route, error) {\n\treturn pkgHandle.RouteList(link, family)\n}\n\n// RouteList gets a list of routes in the system.\n// Equivalent to: `ip route show`.\n// The list can be filtered by link and ip family.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) RouteList(link Link, family int) ([]Route, error) {\n\trouteFilter := &Route{}\n\tif link != nil {\n\t\trouteFilter.LinkIndex = link.Attrs().Index\n\n\t\treturn h.RouteListFiltered(family, routeFilter, RT_FILTER_OIF)\n\t}\n\treturn h.RouteListFiltered(family, routeFilter, 0)\n}\n\n// RouteListFiltered gets a list of routes in the system filtered with specified rules.\n// All rules must be defined in RouteFilter struct\nfunc RouteListFiltered(family int, filter *Route, filterMask uint64) ([]Route, error) {\n\treturn pkgHandle.RouteListFiltered(family, filter, filterMask)\n}\n\n// RouteListFiltered gets a list of routes in the system filtered with specified rules.\n// All rules must be defined in RouteFilter struct\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) RouteListFiltered(family int, filter *Route, filterMask uint64) ([]Route, error) {\n\tvar res []Route\n\terr := h.RouteListFilteredIter(family, filter, filterMask, func(route Route) (cont bool) {\n\t\tres = append(res, route)\n\t\treturn true\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn res, nil\n}\n\n// RouteListFilteredIter passes each route that matches the filter to the given iterator func.  Iteration continues\n// until all routes are loaded or the func returns false.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc RouteListFilteredIter(family int, filter *Route, filterMask uint64, f func(Route) (cont bool)) error {\n\treturn pkgHandle.RouteListFilteredIter(family, filter, filterMask, f)\n}\n\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) RouteListFilteredIter(family int, filter *Route, filterMask uint64, f func(Route) (cont bool)) error {\n\treq := h.newNetlinkRequest(unix.RTM_GETROUTE, unix.NLM_F_DUMP)\n\trtmsg := &nl.RtMsg{}\n\trtmsg.Family = uint8(family)\n\n\tvar parseErr error\n\texecuteErr := h.routeHandleIter(filter, req, rtmsg, func(m []byte) bool {\n\t\tmsg := nl.DeserializeRtMsg(m)\n\t\tif family != FAMILY_ALL && msg.Family != uint8(family) {\n\t\t\t// Ignore routes not matching requested family\n\t\t\treturn true\n\t\t}\n\t\tif msg.Flags&unix.RTM_F_CLONED != 0 {\n\t\t\t// Ignore cloned routes\n\t\t\treturn true\n\t\t}\n\t\tif msg.Table != unix.RT_TABLE_MAIN {\n\t\t\tif filter == nil || filterMask&RT_FILTER_TABLE == 0 {\n\t\t\t\t// Ignore non-main tables\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\troute, err := deserializeRoute(m)\n\t\tif err != nil {\n\t\t\tparseErr = err\n\t\t\treturn false\n\t\t}\n\t\tif filter != nil {\n\t\t\tswitch {\n\t\t\tcase filterMask&RT_FILTER_TABLE != 0 && filter.Table != unix.RT_TABLE_UNSPEC && route.Table != filter.Table:\n\t\t\t\treturn true\n\t\t\tcase filterMask&RT_FILTER_PROTOCOL != 0 && route.Protocol != filter.Protocol:\n\t\t\t\treturn true\n\t\t\tcase filterMask&RT_FILTER_SCOPE != 0 && route.Scope != filter.Scope:\n\t\t\t\treturn true\n\t\t\tcase filterMask&RT_FILTER_TYPE != 0 && route.Type != filter.Type:\n\t\t\t\treturn true\n\t\t\tcase filterMask&RT_FILTER_TOS != 0 && route.Tos != filter.Tos:\n\t\t\t\treturn true\n\t\t\tcase filterMask&RT_FILTER_REALM != 0 && route.Realm != filter.Realm:\n\t\t\t\treturn true\n\t\t\tcase filterMask&RT_FILTER_OIF != 0 && route.LinkIndex != filter.LinkIndex:\n\t\t\t\treturn true\n\t\t\tcase filterMask&RT_FILTER_IIF != 0 && route.ILinkIndex != filter.ILinkIndex:\n\t\t\t\treturn true\n\t\t\tcase filterMask&RT_FILTER_GW != 0 && !route.Gw.Equal(filter.Gw):\n\t\t\t\treturn true\n\t\t\tcase filterMask&RT_FILTER_SRC != 0 && !route.Src.Equal(filter.Src):\n\t\t\t\treturn true\n\t\t\tcase filterMask&RT_FILTER_DST != 0:\n\t\t\t\tif filter.MPLSDst == nil || route.MPLSDst == nil || (*filter.MPLSDst) != (*route.MPLSDst) {\n\t\t\t\t\tif filter.Dst == nil {\n\t\t\t\t\t\tfilter.Dst = genZeroIPNet(family)\n\t\t\t\t\t}\n\t\t\t\t\tif !ipNetEqual(route.Dst, filter.Dst) {\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase filterMask&RT_FILTER_HOPLIMIT != 0 && route.Hoplimit != filter.Hoplimit:\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn f(route)\n\t})\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn executeErr\n\t}\n\tif parseErr != nil {\n\t\treturn parseErr\n\t}\n\treturn executeErr\n}\n\n// deserializeRoute decodes a binary netlink message into a Route struct\nfunc deserializeRoute(m []byte) (Route, error) {\n\tmsg := nl.DeserializeRtMsg(m)\n\tattrs, err := nl.ParseRouteAttr(m[msg.Len():])\n\tif err != nil {\n\t\treturn Route{}, err\n\t}\n\troute := Route{\n\t\tScope:    Scope(msg.Scope),\n\t\tProtocol: RouteProtocol(int(msg.Protocol)),\n\t\tTable:    int(msg.Table),\n\t\tType:     int(msg.Type),\n\t\tTos:      int(msg.Tos),\n\t\tFlags:    int(msg.Flags),\n\t\tFamily:   int(msg.Family),\n\t}\n\n\tvar encap, encapType syscall.NetlinkRouteAttr\n\tfor _, attr := range attrs {\n\t\tswitch attr.Attr.Type {\n\t\tcase unix.RTA_GATEWAY:\n\t\t\troute.Gw = net.IP(attr.Value)\n\t\tcase unix.RTA_PREFSRC:\n\t\t\troute.Src = net.IP(attr.Value)\n\t\tcase unix.RTA_DST:\n\t\t\tif msg.Family == nl.FAMILY_MPLS {\n\t\t\t\tstack := nl.DecodeMPLSStack(attr.Value)\n\t\t\t\tif len(stack) == 0 || len(stack) > 1 {\n\t\t\t\t\treturn route, fmt.Errorf(\"invalid MPLS RTA_DST\")\n\t\t\t\t}\n\t\t\t\troute.MPLSDst = &stack[0]\n\t\t\t} else {\n\t\t\t\troute.Dst = &net.IPNet{\n\t\t\t\t\tIP:   attr.Value,\n\t\t\t\t\tMask: net.CIDRMask(int(msg.Dst_len), 8*len(attr.Value)),\n\t\t\t\t}\n\t\t\t}\n\t\tcase unix.RTA_OIF:\n\t\t\troute.LinkIndex = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.RTA_IIF:\n\t\t\troute.ILinkIndex = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.RTA_PRIORITY:\n\t\t\troute.Priority = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.RTA_FLOW:\n\t\t\troute.Realm = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.RTA_TABLE:\n\t\t\troute.Table = int(native.Uint32(attr.Value[0:4]))\n\t\tcase unix.RTA_MULTIPATH:\n\t\t\tparseRtNexthop := func(value []byte) (*NexthopInfo, []byte, error) {\n\t\t\t\tif len(value) < unix.SizeofRtNexthop {\n\t\t\t\t\treturn nil, nil, fmt.Errorf(\"lack of bytes\")\n\t\t\t\t}\n\t\t\t\tnh := nl.DeserializeRtNexthop(value)\n\t\t\t\tif len(value) < int(nh.RtNexthop.Len) {\n\t\t\t\t\treturn nil, nil, fmt.Errorf(\"lack of bytes\")\n\t\t\t\t}\n\t\t\t\tinfo := &NexthopInfo{\n\t\t\t\t\tLinkIndex: int(nh.RtNexthop.Ifindex),\n\t\t\t\t\tHops:      int(nh.RtNexthop.Hops),\n\t\t\t\t\tFlags:     int(nh.RtNexthop.Flags),\n\t\t\t\t}\n\t\t\t\tattrs, err := nl.ParseRouteAttr(value[unix.SizeofRtNexthop:int(nh.RtNexthop.Len)])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, nil, err\n\t\t\t\t}\n\t\t\t\tvar encap, encapType syscall.NetlinkRouteAttr\n\t\t\t\tfor _, attr := range attrs {\n\t\t\t\t\tswitch attr.Attr.Type {\n\t\t\t\t\tcase unix.RTA_GATEWAY:\n\t\t\t\t\t\tinfo.Gw = net.IP(attr.Value)\n\t\t\t\t\tcase unix.RTA_NEWDST:\n\t\t\t\t\t\tvar d Destination\n\t\t\t\t\t\tswitch msg.Family {\n\t\t\t\t\t\tcase nl.FAMILY_MPLS:\n\t\t\t\t\t\t\td = &MPLSDestination{}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif err := d.Decode(attr.Value); err != nil {\n\t\t\t\t\t\t\treturn nil, nil, err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinfo.NewDst = d\n\t\t\t\t\tcase unix.RTA_ENCAP_TYPE:\n\t\t\t\t\t\tencapType = attr\n\t\t\t\t\tcase unix.RTA_ENCAP:\n\t\t\t\t\t\tencap = attr\n\t\t\t\t\tcase unix.RTA_VIA:\n\t\t\t\t\t\td := &Via{}\n\t\t\t\t\t\tif err := d.Decode(attr.Value); err != nil {\n\t\t\t\t\t\t\treturn nil, nil, err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinfo.Via = d\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif len(encap.Value) != 0 && len(encapType.Value) != 0 {\n\t\t\t\t\ttyp := int(native.Uint16(encapType.Value[0:2]))\n\t\t\t\t\tvar e Encap\n\t\t\t\t\tswitch typ {\n\t\t\t\t\tcase nl.LWTUNNEL_ENCAP_MPLS:\n\t\t\t\t\t\te = &MPLSEncap{}\n\t\t\t\t\t\tif err := e.Decode(encap.Value); err != nil {\n\t\t\t\t\t\t\treturn nil, nil, err\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tinfo.Encap = e\n\t\t\t\t}\n\n\t\t\t\treturn info, value[int(nh.RtNexthop.Len):], nil\n\t\t\t}\n\t\t\trest := attr.Value\n\t\t\tfor len(rest) > 0 {\n\t\t\t\tinfo, buf, err := parseRtNexthop(rest)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn route, err\n\t\t\t\t}\n\t\t\t\troute.MultiPath = append(route.MultiPath, info)\n\t\t\t\trest = buf\n\t\t\t}\n\t\tcase unix.RTA_NEWDST:\n\t\t\tvar d Destination\n\t\t\tswitch msg.Family {\n\t\t\tcase nl.FAMILY_MPLS:\n\t\t\t\td = &MPLSDestination{}\n\t\t\t}\n\t\t\tif err := d.Decode(attr.Value); err != nil {\n\t\t\t\treturn route, err\n\t\t\t}\n\t\t\troute.NewDst = d\n\t\tcase unix.RTA_VIA:\n\t\t\tv := &Via{}\n\t\t\tif err := v.Decode(attr.Value); err != nil {\n\t\t\t\treturn route, err\n\t\t\t}\n\t\t\troute.Via = v\n\t\tcase unix.RTA_ENCAP_TYPE:\n\t\t\tencapType = attr\n\t\tcase unix.RTA_ENCAP:\n\t\t\tencap = attr\n\t\tcase unix.RTA_METRICS:\n\t\t\tmetrics, err := nl.ParseRouteAttr(attr.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn route, err\n\t\t\t}\n\t\t\tfor _, metric := range metrics {\n\t\t\t\tswitch metric.Attr.Type {\n\t\t\t\tcase unix.RTAX_MTU:\n\t\t\t\t\troute.MTU = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\tcase unix.RTAX_LOCK:\n\t\t\t\t\troute.MTULock = native.Uint32(metric.Value[0:4]) == uint32(1<<unix.RTAX_MTU)\n\t\t\t\t\troute.RtoMinLock = native.Uint32(metric.Value[0:4]) == uint32(1<<unix.RTAX_RTO_MIN)\n\t\t\t\tcase unix.RTAX_WINDOW:\n\t\t\t\t\troute.Window = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\tcase unix.RTAX_RTT:\n\t\t\t\t\troute.Rtt = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\tcase unix.RTAX_RTTVAR:\n\t\t\t\t\troute.RttVar = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\tcase unix.RTAX_SSTHRESH:\n\t\t\t\t\troute.Ssthresh = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\tcase unix.RTAX_CWND:\n\t\t\t\t\troute.Cwnd = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\tcase unix.RTAX_ADVMSS:\n\t\t\t\t\troute.AdvMSS = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\tcase unix.RTAX_REORDERING:\n\t\t\t\t\troute.Reordering = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\tcase unix.RTAX_HOPLIMIT:\n\t\t\t\t\troute.Hoplimit = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\tcase unix.RTAX_INITCWND:\n\t\t\t\t\troute.InitCwnd = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\tcase unix.RTAX_FEATURES:\n\t\t\t\t\troute.Features = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\tcase unix.RTAX_RTO_MIN:\n\t\t\t\t\troute.RtoMin = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\tcase unix.RTAX_INITRWND:\n\t\t\t\t\troute.InitRwnd = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\tcase unix.RTAX_QUICKACK:\n\t\t\t\t\troute.QuickACK = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\tcase unix.RTAX_CC_ALGO:\n\t\t\t\t\troute.Congctl = nl.BytesToString(metric.Value)\n\t\t\t\tcase unix.RTAX_FASTOPEN_NO_COOKIE:\n\t\t\t\t\troute.FastOpenNoCookie = int(native.Uint32(metric.Value[0:4]))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Same logic to generate \"default\" dst with iproute2 implementation\n\tif route.Dst == nil {\n\t\tvar addLen int\n\t\tvar ip net.IP\n\t\tswitch msg.Family {\n\t\tcase FAMILY_V4:\n\t\t\taddLen = net.IPv4len\n\t\t\tip = net.IPv4zero\n\t\tcase FAMILY_V6:\n\t\t\taddLen = net.IPv6len\n\t\t\tip = net.IPv6zero\n\t\t}\n\n\t\tif addLen != 0 {\n\t\t\troute.Dst = &net.IPNet{\n\t\t\t\tIP:   ip,\n\t\t\t\tMask: net.CIDRMask(int(msg.Dst_len), 8*addLen),\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(encap.Value) != 0 && len(encapType.Value) != 0 {\n\t\ttyp := int(native.Uint16(encapType.Value[0:2]))\n\t\tvar e Encap\n\t\tswitch typ {\n\t\tcase nl.LWTUNNEL_ENCAP_MPLS:\n\t\t\te = &MPLSEncap{}\n\t\t\tif err := e.Decode(encap.Value); err != nil {\n\t\t\t\treturn route, err\n\t\t\t}\n\t\tcase nl.LWTUNNEL_ENCAP_SEG6:\n\t\t\te = &SEG6Encap{}\n\t\t\tif err := e.Decode(encap.Value); err != nil {\n\t\t\t\treturn route, err\n\t\t\t}\n\t\tcase nl.LWTUNNEL_ENCAP_SEG6_LOCAL:\n\t\t\te = &SEG6LocalEncap{}\n\t\t\tif err := e.Decode(encap.Value); err != nil {\n\t\t\t\treturn route, err\n\t\t\t}\n\t\tcase nl.LWTUNNEL_ENCAP_BPF:\n\t\t\te = &BpfEncap{}\n\t\t\tif err := e.Decode(encap.Value); err != nil {\n\t\t\t\treturn route, err\n\t\t\t}\n\t\t}\n\t\troute.Encap = e\n\t}\n\n\treturn route, nil\n}\n\n// RouteGetOptions contains a set of options to use with\n// RouteGetWithOptions\ntype RouteGetOptions struct {\n\tIif      string\n\tIifIndex int\n\tOif      string\n\tOifIndex int\n\tVrfName  string\n\tSrcAddr  net.IP\n\tUID      *uint32\n\tMark     uint32\n\tFIBMatch bool\n}\n\n// RouteGetWithOptions gets a route to a specific destination from the host system.\n// Equivalent to: 'ip route get <> vrf <VrfName>'.\nfunc RouteGetWithOptions(destination net.IP, options *RouteGetOptions) ([]Route, error) {\n\treturn pkgHandle.RouteGetWithOptions(destination, options)\n}\n\n// RouteGet gets a route to a specific destination from the host system.\n// Equivalent to: 'ip route get'.\nfunc RouteGet(destination net.IP) ([]Route, error) {\n\treturn pkgHandle.RouteGet(destination)\n}\n\n// RouteGetWithOptions gets a route to a specific destination from the host system.\n// Equivalent to: 'ip route get <> vrf <VrfName>'.\nfunc (h *Handle) RouteGetWithOptions(destination net.IP, options *RouteGetOptions) ([]Route, error) {\n\treq := h.newNetlinkRequest(unix.RTM_GETROUTE, unix.NLM_F_REQUEST)\n\tfamily := nl.GetIPFamily(destination)\n\tvar destinationData []byte\n\tvar bitlen uint8\n\tif family == FAMILY_V4 {\n\t\tdestinationData = destination.To4()\n\t\tbitlen = 32\n\t} else {\n\t\tdestinationData = destination.To16()\n\t\tbitlen = 128\n\t}\n\tmsg := &nl.RtMsg{}\n\tmsg.Family = uint8(family)\n\tmsg.Dst_len = bitlen\n\tif options != nil && options.SrcAddr != nil {\n\t\tmsg.Src_len = bitlen\n\t}\n\tmsg.Flags = unix.RTM_F_LOOKUP_TABLE\n\tif options != nil && options.FIBMatch {\n\t\tmsg.Flags |= unix.RTM_F_FIB_MATCH\n\t}\n\treq.AddData(msg)\n\n\trtaDst := nl.NewRtAttr(unix.RTA_DST, destinationData)\n\treq.AddData(rtaDst)\n\n\tif options != nil {\n\t\tif options.VrfName != \"\" {\n\t\t\tlink, err := h.LinkByName(options.VrfName)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb := make([]byte, 4)\n\t\t\tnative.PutUint32(b, uint32(link.Attrs().Index))\n\n\t\t\treq.AddData(nl.NewRtAttr(unix.RTA_OIF, b))\n\t\t}\n\n\t\tiifIndex := 0\n\t\tif len(options.Iif) > 0 {\n\t\t\tlink, err := h.LinkByName(options.Iif)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tiifIndex = link.Attrs().Index\n\t\t} else if options.IifIndex > 0 {\n\t\t\tiifIndex = options.IifIndex\n\t\t}\n\n\t\tif iifIndex > 0 {\n\t\t\tb := make([]byte, 4)\n\t\t\tnative.PutUint32(b, uint32(iifIndex))\n\n\t\t\treq.AddData(nl.NewRtAttr(unix.RTA_IIF, b))\n\t\t}\n\n\t\toifIndex := uint32(0)\n\t\tif len(options.Oif) > 0 {\n\t\t\tlink, err := h.LinkByName(options.Oif)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\toifIndex = uint32(link.Attrs().Index)\n\t\t} else if options.OifIndex > 0 {\n\t\t\toifIndex = uint32(options.OifIndex)\n\t\t}\n\n\t\tif oifIndex > 0 {\n\t\t\tb := make([]byte, 4)\n\t\t\tnative.PutUint32(b, oifIndex)\n\n\t\t\treq.AddData(nl.NewRtAttr(unix.RTA_OIF, b))\n\t\t}\n\n\t\tif options.SrcAddr != nil {\n\t\t\tvar srcAddr []byte\n\t\t\tif family == FAMILY_V4 {\n\t\t\t\tsrcAddr = options.SrcAddr.To4()\n\t\t\t} else {\n\t\t\t\tsrcAddr = options.SrcAddr.To16()\n\t\t\t}\n\n\t\t\treq.AddData(nl.NewRtAttr(unix.RTA_SRC, srcAddr))\n\t\t}\n\n\t\tif options.UID != nil {\n\t\t\tuid := *options.UID\n\t\t\tb := make([]byte, 4)\n\t\t\tnative.PutUint32(b, uid)\n\n\t\t\treq.AddData(nl.NewRtAttr(unix.RTA_UID, b))\n\t\t}\n\n\t\tif options.Mark > 0 {\n\t\t\tb := make([]byte, 4)\n\t\t\tnative.PutUint32(b, options.Mark)\n\n\t\t\treq.AddData(nl.NewRtAttr(unix.RTA_MARK, b))\n\t\t}\n\t}\n\n\tmsgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWROUTE)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar res []Route\n\tfor _, m := range msgs {\n\t\troute, err := deserializeRoute(m)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tres = append(res, route)\n\t}\n\treturn res, nil\n}\n\n// RouteGet gets a route to a specific destination from the host system.\n// Equivalent to: 'ip route get'.\nfunc (h *Handle) RouteGet(destination net.IP) ([]Route, error) {\n\treturn h.RouteGetWithOptions(destination, nil)\n}\n\n// RouteSubscribe takes a chan down which notifications will be sent\n// when routes are added or deleted. Close the 'done' chan to stop subscription.\nfunc RouteSubscribe(ch chan<- RouteUpdate, done <-chan struct{}) error {\n\treturn routeSubscribeAt(netns.None(), netns.None(), ch, done, nil, false, 0, nil, false)\n}\n\n// RouteSubscribeAt works like RouteSubscribe plus it allows the caller\n// to choose the network namespace in which to subscribe (ns).\nfunc RouteSubscribeAt(ns netns.NsHandle, ch chan<- RouteUpdate, done <-chan struct{}) error {\n\treturn routeSubscribeAt(ns, netns.None(), ch, done, nil, false, 0, nil, false)\n}\n\n// RouteSubscribeOptions contains a set of options to use with\n// RouteSubscribeWithOptions.\ntype RouteSubscribeOptions struct {\n\tNamespace              *netns.NsHandle\n\tErrorCallback          func(error)\n\tListExisting           bool\n\tReceiveBufferSize      int\n\tReceiveBufferForceSize bool\n\tReceiveTimeout         *unix.Timeval\n}\n\n// RouteSubscribeWithOptions work like RouteSubscribe but enable to\n// provide additional options to modify the behavior. Currently, the\n// namespace can be provided as well as an error callback.\n//\n// When options.ListExisting is true, options.ErrorCallback may be\n// called with [ErrDumpInterrupted] to indicate that results from\n// the initial dump of links may be inconsistent or incomplete.\nfunc RouteSubscribeWithOptions(ch chan<- RouteUpdate, done <-chan struct{}, options RouteSubscribeOptions) error {\n\tif options.Namespace == nil {\n\t\tnone := netns.None()\n\t\toptions.Namespace = &none\n\t}\n\treturn routeSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting,\n\t\toptions.ReceiveBufferSize, options.ReceiveTimeout, options.ReceiveBufferForceSize)\n}\n\nfunc routeSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- RouteUpdate, done <-chan struct{}, cberr func(error), listExisting bool,\n\trcvbuf int, rcvTimeout *unix.Timeval, rcvbufForce bool) error {\n\ts, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_IPV4_ROUTE, unix.RTNLGRP_IPV6_ROUTE)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif rcvTimeout != nil {\n\t\tif err := s.SetReceiveTimeout(rcvTimeout); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif rcvbuf != 0 {\n\t\terr = s.SetReceiveBufferSize(rcvbuf, rcvbufForce)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif done != nil {\n\t\tgo func() {\n\t\t\t<-done\n\t\t\ts.Close()\n\t\t}()\n\t}\n\tif listExisting {\n\t\treq := pkgHandle.newNetlinkRequest(unix.RTM_GETROUTE,\n\t\t\tunix.NLM_F_DUMP)\n\t\tinfmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)\n\t\treq.AddData(infmsg)\n\t\tif err := s.Send(req); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tgo func() {\n\t\tdefer close(ch)\n\t\tfor {\n\t\t\tmsgs, from, err := s.Receive()\n\t\t\tif err != nil {\n\t\t\t\tif cberr != nil {\n\t\t\t\t\tcberr(fmt.Errorf(\"Receive failed: %v\",\n\t\t\t\t\t\terr))\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif from.Pid != nl.PidKernel {\n\t\t\t\tif cberr != nil {\n\t\t\t\t\tcberr(fmt.Errorf(\"Wrong sender portid %d, expected %d\", from.Pid, nl.PidKernel))\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor _, m := range msgs {\n\t\t\t\tif m.Header.Flags&unix.NLM_F_DUMP_INTR != 0 && cberr != nil {\n\t\t\t\t\tcberr(ErrDumpInterrupted)\n\t\t\t\t}\n\t\t\t\tif m.Header.Type == unix.NLMSG_DONE {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif m.Header.Type == unix.NLMSG_ERROR {\n\t\t\t\t\terror := int32(native.Uint32(m.Data[0:4]))\n\t\t\t\t\tif error == 0 {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif cberr != nil {\n\t\t\t\t\t\tcberr(fmt.Errorf(\"error message: %v\",\n\t\t\t\t\t\t\tsyscall.Errno(-error)))\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\troute, err := deserializeRoute(m.Data)\n\t\t\t\tif err != nil {\n\t\t\t\t\tif cberr != nil {\n\t\t\t\t\t\tcberr(err)\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tch <- RouteUpdate{\n\t\t\t\t\tType:    m.Header.Type,\n\t\t\t\t\tNlFlags: m.Header.Flags & (unix.NLM_F_REPLACE | unix.NLM_F_EXCL | unix.NLM_F_CREATE | unix.NLM_F_APPEND),\n\t\t\t\t\tRoute:   route,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}()\n\n\treturn nil\n}\n\nfunc (p RouteProtocol) String() string {\n\tswitch int(p) {\n\tcase unix.RTPROT_BABEL:\n\t\treturn \"babel\"\n\tcase unix.RTPROT_BGP:\n\t\treturn \"bgp\"\n\tcase unix.RTPROT_BIRD:\n\t\treturn \"bird\"\n\tcase unix.RTPROT_BOOT:\n\t\treturn \"boot\"\n\tcase unix.RTPROT_DHCP:\n\t\treturn \"dhcp\"\n\tcase unix.RTPROT_DNROUTED:\n\t\treturn \"dnrouted\"\n\tcase unix.RTPROT_EIGRP:\n\t\treturn \"eigrp\"\n\tcase unix.RTPROT_GATED:\n\t\treturn \"gated\"\n\tcase unix.RTPROT_ISIS:\n\t\treturn \"isis\"\n\t// case unix.RTPROT_KEEPALIVED:\n\t//\treturn \"keepalived\"\n\tcase unix.RTPROT_KERNEL:\n\t\treturn \"kernel\"\n\tcase unix.RTPROT_MROUTED:\n\t\treturn \"mrouted\"\n\tcase unix.RTPROT_MRT:\n\t\treturn \"mrt\"\n\tcase unix.RTPROT_NTK:\n\t\treturn \"ntk\"\n\tcase unix.RTPROT_OSPF:\n\t\treturn \"ospf\"\n\tcase unix.RTPROT_RA:\n\t\treturn \"ra\"\n\tcase unix.RTPROT_REDIRECT:\n\t\treturn \"redirect\"\n\tcase unix.RTPROT_RIP:\n\t\treturn \"rip\"\n\tcase unix.RTPROT_STATIC:\n\t\treturn \"static\"\n\tcase unix.RTPROT_UNSPEC:\n\t\treturn \"unspec\"\n\tcase unix.RTPROT_XORP:\n\t\treturn \"xorp\"\n\tcase unix.RTPROT_ZEBRA:\n\t\treturn \"zebra\"\n\tdefault:\n\t\treturn strconv.Itoa(int(p))\n\t}\n}\n\n// genZeroIPNet returns 0.0.0.0/0 or ::/0 for IPv4 or IPv6, otherwise nil\nfunc genZeroIPNet(family int) *net.IPNet {\n\tvar addLen int\n\tvar ip net.IP\n\tswitch family {\n\tcase FAMILY_V4:\n\t\taddLen = net.IPv4len\n\t\tip = net.IPv4zero\n\tcase FAMILY_V6:\n\t\taddLen = net.IPv6len\n\t\tip = net.IPv6zero\n\t}\n\tif addLen != 0 {\n\t\treturn &net.IPNet{\n\t\t\tIP:   ip,\n\t\t\tMask: net.CIDRMask(0, 8*addLen),\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/route_unspecified.go",
    "content": "// +build !linux\n\npackage netlink\n\nimport \"strconv\"\n\nfunc (r *Route) ListFlags() []string {\n\treturn []string{}\n}\n\nfunc (n *NexthopInfo) ListFlags() []string {\n\treturn []string{}\n}\n\nfunc (s Scope) String() string {\n\treturn \"unknown\"\n}\n\nfunc (p RouteProtocol) String() string {\n\treturn strconv.Itoa(int(p))\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/rule.go",
    "content": "package netlink\n\nimport (\n\t\"fmt\"\n\t\"net\"\n)\n\n// Rule represents a netlink rule.\ntype Rule struct {\n\tPriority          int\n\tFamily            int\n\tTable             int\n\tMark              uint32\n\tMask              *uint32\n\tTos               uint\n\tTunID             uint\n\tGoto              int\n\tSrc               *net.IPNet\n\tDst               *net.IPNet\n\tFlow              int\n\tIifName           string\n\tOifName           string\n\tSuppressIfgroup   int\n\tSuppressPrefixlen int\n\tInvert            bool\n\tDport             *RulePortRange\n\tSport             *RulePortRange\n\tIPProto           int\n\tUIDRange          *RuleUIDRange\n\tProtocol          uint8\n\tType              uint8\n}\n\nfunc (r Rule) String() string {\n\tfrom := \"all\"\n\tif r.Src != nil && r.Src.String() != \"<nil>\" {\n\t\tfrom = r.Src.String()\n\t}\n\n\tto := \"all\"\n\tif r.Dst != nil && r.Dst.String() != \"<nil>\" {\n\t\tto = r.Dst.String()\n\t}\n\n\treturn fmt.Sprintf(\"ip rule %d: from %s to %s table %d %s\",\n\t\tr.Priority, from, to, r.Table, r.typeString())\n}\n\n// NewRule return empty rules.\nfunc NewRule() *Rule {\n\treturn &Rule{\n\t\tSuppressIfgroup:   -1,\n\t\tSuppressPrefixlen: -1,\n\t\tPriority:          -1,\n\t\tMark:              0,\n\t\tMask:              nil,\n\t\tGoto:              -1,\n\t\tFlow:              -1,\n\t}\n}\n\n// NewRulePortRange creates rule sport/dport range.\nfunc NewRulePortRange(start, end uint16) *RulePortRange {\n\treturn &RulePortRange{Start: start, End: end}\n}\n\n// RulePortRange represents rule sport/dport range.\ntype RulePortRange struct {\n\tStart uint16\n\tEnd   uint16\n}\n\n// NewRuleUIDRange creates rule uid range.\nfunc NewRuleUIDRange(start, end uint32) *RuleUIDRange {\n\treturn &RuleUIDRange{Start: start, End: end}\n}\n\n// RuleUIDRange represents rule uid range.\ntype RuleUIDRange struct {\n\tStart uint32\n\tEnd   uint32\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/rule_linux.go",
    "content": "package netlink\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst FibRuleInvert = 0x2\n\n// RuleAdd adds a rule to the system.\n// Equivalent to: ip rule add\nfunc RuleAdd(rule *Rule) error {\n\treturn pkgHandle.RuleAdd(rule)\n}\n\n// RuleAdd adds a rule to the system.\n// Equivalent to: ip rule add\nfunc (h *Handle) RuleAdd(rule *Rule) error {\n\treq := h.newNetlinkRequest(unix.RTM_NEWRULE, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)\n\treturn ruleHandle(rule, req)\n}\n\n// RuleDel deletes a rule from the system.\n// Equivalent to: ip rule del\nfunc RuleDel(rule *Rule) error {\n\treturn pkgHandle.RuleDel(rule)\n}\n\n// RuleDel deletes a rule from the system.\n// Equivalent to: ip rule del\nfunc (h *Handle) RuleDel(rule *Rule) error {\n\treq := h.newNetlinkRequest(unix.RTM_DELRULE, unix.NLM_F_ACK)\n\treturn ruleHandle(rule, req)\n}\n\nfunc ruleHandle(rule *Rule, req *nl.NetlinkRequest) error {\n\tmsg := nl.NewRtMsg()\n\tmsg.Family = unix.AF_INET\n\tmsg.Protocol = unix.RTPROT_BOOT\n\tmsg.Scope = unix.RT_SCOPE_UNIVERSE\n\tmsg.Table = unix.RT_TABLE_UNSPEC\n\tmsg.Type = rule.Type // usually 0, same as unix.RTN_UNSPEC\n\tif msg.Type == 0 && req.NlMsghdr.Flags&unix.NLM_F_CREATE > 0 {\n\t\tmsg.Type = unix.RTN_UNICAST\n\t}\n\tif rule.Invert {\n\t\tmsg.Flags |= FibRuleInvert\n\t}\n\tif rule.Family != 0 {\n\t\tmsg.Family = uint8(rule.Family)\n\t}\n\tif rule.Table >= 0 && rule.Table < 256 {\n\t\tmsg.Table = uint8(rule.Table)\n\t}\n\tif rule.Tos != 0 {\n\t\tmsg.Tos = uint8(rule.Tos)\n\t}\n\n\tvar dstFamily uint8\n\tvar rtAttrs []*nl.RtAttr\n\tif rule.Dst != nil && rule.Dst.IP != nil {\n\t\tdstLen, _ := rule.Dst.Mask.Size()\n\t\tmsg.Dst_len = uint8(dstLen)\n\t\tmsg.Family = uint8(nl.GetIPFamily(rule.Dst.IP))\n\t\tdstFamily = msg.Family\n\t\tvar dstData []byte\n\t\tif msg.Family == unix.AF_INET {\n\t\t\tdstData = rule.Dst.IP.To4()\n\t\t} else {\n\t\t\tdstData = rule.Dst.IP.To16()\n\t\t}\n\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_DST, dstData))\n\t}\n\n\tif rule.Src != nil && rule.Src.IP != nil {\n\t\tmsg.Family = uint8(nl.GetIPFamily(rule.Src.IP))\n\t\tif dstFamily != 0 && dstFamily != msg.Family {\n\t\t\treturn fmt.Errorf(\"source and destination ip are not the same IP family\")\n\t\t}\n\t\tsrcLen, _ := rule.Src.Mask.Size()\n\t\tmsg.Src_len = uint8(srcLen)\n\t\tvar srcData []byte\n\t\tif msg.Family == unix.AF_INET {\n\t\t\tsrcData = rule.Src.IP.To4()\n\t\t} else {\n\t\t\tsrcData = rule.Src.IP.To16()\n\t\t}\n\t\trtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_SRC, srcData))\n\t}\n\n\treq.AddData(msg)\n\tfor i := range rtAttrs {\n\t\treq.AddData(rtAttrs[i])\n\t}\n\n\tif rule.Priority >= 0 {\n\t\tb := make([]byte, 4)\n\t\tnative.PutUint32(b, uint32(rule.Priority))\n\t\treq.AddData(nl.NewRtAttr(nl.FRA_PRIORITY, b))\n\t}\n\tif rule.Mark != 0 || rule.Mask != nil {\n\t\tb := make([]byte, 4)\n\t\tnative.PutUint32(b, rule.Mark)\n\t\treq.AddData(nl.NewRtAttr(nl.FRA_FWMARK, b))\n\t}\n\tif rule.Mask != nil {\n\t\tb := make([]byte, 4)\n\t\tnative.PutUint32(b, *rule.Mask)\n\t\treq.AddData(nl.NewRtAttr(nl.FRA_FWMASK, b))\n\t}\n\tif rule.Flow >= 0 {\n\t\tb := make([]byte, 4)\n\t\tnative.PutUint32(b, uint32(rule.Flow))\n\t\treq.AddData(nl.NewRtAttr(nl.FRA_FLOW, b))\n\t}\n\tif rule.TunID > 0 {\n\t\tb := make([]byte, 4)\n\t\tnative.PutUint32(b, uint32(rule.TunID))\n\t\treq.AddData(nl.NewRtAttr(nl.FRA_TUN_ID, b))\n\t}\n\tif rule.Table >= 256 {\n\t\tb := make([]byte, 4)\n\t\tnative.PutUint32(b, uint32(rule.Table))\n\t\treq.AddData(nl.NewRtAttr(nl.FRA_TABLE, b))\n\t}\n\tif msg.Table > 0 {\n\t\tif rule.SuppressPrefixlen >= 0 {\n\t\t\tb := make([]byte, 4)\n\t\t\tnative.PutUint32(b, uint32(rule.SuppressPrefixlen))\n\t\t\treq.AddData(nl.NewRtAttr(nl.FRA_SUPPRESS_PREFIXLEN, b))\n\t\t}\n\t\tif rule.SuppressIfgroup >= 0 {\n\t\t\tb := make([]byte, 4)\n\t\t\tnative.PutUint32(b, uint32(rule.SuppressIfgroup))\n\t\t\treq.AddData(nl.NewRtAttr(nl.FRA_SUPPRESS_IFGROUP, b))\n\t\t}\n\t}\n\tif rule.IifName != \"\" {\n\t\treq.AddData(nl.NewRtAttr(nl.FRA_IIFNAME, []byte(rule.IifName+\"\\x00\")))\n\t}\n\tif rule.OifName != \"\" {\n\t\treq.AddData(nl.NewRtAttr(nl.FRA_OIFNAME, []byte(rule.OifName+\"\\x00\")))\n\t}\n\tif rule.Goto >= 0 {\n\t\tmsg.Type = nl.FR_ACT_GOTO\n\t\tb := make([]byte, 4)\n\t\tnative.PutUint32(b, uint32(rule.Goto))\n\t\treq.AddData(nl.NewRtAttr(nl.FRA_GOTO, b))\n\t}\n\n\tif rule.IPProto > 0 {\n\t\tb := make([]byte, 4)\n\t\tnative.PutUint32(b, uint32(rule.IPProto))\n\t\treq.AddData(nl.NewRtAttr(nl.FRA_IP_PROTO, b))\n\t}\n\n\tif rule.Dport != nil {\n\t\tb := rule.Dport.toRtAttrData()\n\t\treq.AddData(nl.NewRtAttr(nl.FRA_DPORT_RANGE, b))\n\t}\n\n\tif rule.Sport != nil {\n\t\tb := rule.Sport.toRtAttrData()\n\t\treq.AddData(nl.NewRtAttr(nl.FRA_SPORT_RANGE, b))\n\t}\n\n\tif rule.UIDRange != nil {\n\t\tb := rule.UIDRange.toRtAttrData()\n\t\treq.AddData(nl.NewRtAttr(nl.FRA_UID_RANGE, b))\n\t}\n\n\tif rule.Protocol > 0 {\n\t\treq.AddData(nl.NewRtAttr(nl.FRA_PROTOCOL, nl.Uint8Attr(rule.Protocol)))\n\t}\n\n\t_, err := req.Execute(unix.NETLINK_ROUTE, 0)\n\treturn err\n}\n\n// RuleList lists rules in the system.\n// Equivalent to: ip rule list\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc RuleList(family int) ([]Rule, error) {\n\treturn pkgHandle.RuleList(family)\n}\n\n// RuleList lists rules in the system.\n// Equivalent to: ip rule list\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) RuleList(family int) ([]Rule, error) {\n\treturn h.RuleListFiltered(family, nil, 0)\n}\n\n// RuleListFiltered gets a list of rules in the system filtered by the\n// specified rule template `filter`.\n// Equivalent to: ip rule list\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc RuleListFiltered(family int, filter *Rule, filterMask uint64) ([]Rule, error) {\n\treturn pkgHandle.RuleListFiltered(family, filter, filterMask)\n}\n\n// RuleListFiltered lists rules in the system.\n// Equivalent to: ip rule list\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) RuleListFiltered(family int, filter *Rule, filterMask uint64) ([]Rule, error) {\n\treq := h.newNetlinkRequest(unix.RTM_GETRULE, unix.NLM_F_DUMP|unix.NLM_F_REQUEST)\n\tmsg := nl.NewIfInfomsg(family)\n\treq.AddData(msg)\n\n\tmsgs, executeErr := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWRULE)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\tvar res = make([]Rule, 0)\n\tfor i := range msgs {\n\t\tmsg := nl.DeserializeRtMsg(msgs[i])\n\t\tattrs, err := nl.ParseRouteAttr(msgs[i][msg.Len():])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\trule := NewRule()\n\t\trule.Priority = 0 // The default priority from kernel\n\n\t\trule.Invert = msg.Flags&FibRuleInvert > 0\n\t\trule.Family = int(msg.Family)\n\t\trule.Tos = uint(msg.Tos)\n\n\t\tfor j := range attrs {\n\t\t\tswitch attrs[j].Attr.Type {\n\t\t\tcase unix.RTA_TABLE:\n\t\t\t\trule.Table = int(native.Uint32(attrs[j].Value[0:4]))\n\t\t\tcase nl.FRA_SRC:\n\t\t\t\trule.Src = &net.IPNet{\n\t\t\t\t\tIP:   attrs[j].Value,\n\t\t\t\t\tMask: net.CIDRMask(int(msg.Src_len), 8*len(attrs[j].Value)),\n\t\t\t\t}\n\t\t\tcase nl.FRA_DST:\n\t\t\t\trule.Dst = &net.IPNet{\n\t\t\t\t\tIP:   attrs[j].Value,\n\t\t\t\t\tMask: net.CIDRMask(int(msg.Dst_len), 8*len(attrs[j].Value)),\n\t\t\t\t}\n\t\t\tcase nl.FRA_FWMARK:\n\t\t\t\trule.Mark = native.Uint32(attrs[j].Value[0:4])\n\t\t\tcase nl.FRA_FWMASK:\n\t\t\t\tmask := native.Uint32(attrs[j].Value[0:4])\n\t\t\t\trule.Mask = &mask\n\t\t\tcase nl.FRA_TUN_ID:\n\t\t\t\trule.TunID = uint(native.Uint64(attrs[j].Value[0:8]))\n\t\t\tcase nl.FRA_IIFNAME:\n\t\t\t\trule.IifName = string(attrs[j].Value[:len(attrs[j].Value)-1])\n\t\t\tcase nl.FRA_OIFNAME:\n\t\t\t\trule.OifName = string(attrs[j].Value[:len(attrs[j].Value)-1])\n\t\t\tcase nl.FRA_SUPPRESS_PREFIXLEN:\n\t\t\t\ti := native.Uint32(attrs[j].Value[0:4])\n\t\t\t\tif i != 0xffffffff {\n\t\t\t\t\trule.SuppressPrefixlen = int(i)\n\t\t\t\t}\n\t\t\tcase nl.FRA_SUPPRESS_IFGROUP:\n\t\t\t\ti := native.Uint32(attrs[j].Value[0:4])\n\t\t\t\tif i != 0xffffffff {\n\t\t\t\t\trule.SuppressIfgroup = int(i)\n\t\t\t\t}\n\t\t\tcase nl.FRA_FLOW:\n\t\t\t\trule.Flow = int(native.Uint32(attrs[j].Value[0:4]))\n\t\t\tcase nl.FRA_GOTO:\n\t\t\t\trule.Goto = int(native.Uint32(attrs[j].Value[0:4]))\n\t\t\tcase nl.FRA_PRIORITY:\n\t\t\t\trule.Priority = int(native.Uint32(attrs[j].Value[0:4]))\n\t\t\tcase nl.FRA_IP_PROTO:\n\t\t\t\trule.IPProto = int(native.Uint32(attrs[j].Value[0:4]))\n\t\t\tcase nl.FRA_DPORT_RANGE:\n\t\t\t\trule.Dport = NewRulePortRange(native.Uint16(attrs[j].Value[0:2]), native.Uint16(attrs[j].Value[2:4]))\n\t\t\tcase nl.FRA_SPORT_RANGE:\n\t\t\t\trule.Sport = NewRulePortRange(native.Uint16(attrs[j].Value[0:2]), native.Uint16(attrs[j].Value[2:4]))\n\t\t\tcase nl.FRA_UID_RANGE:\n\t\t\t\trule.UIDRange = NewRuleUIDRange(native.Uint32(attrs[j].Value[0:4]), native.Uint32(attrs[j].Value[4:8]))\n\t\t\tcase nl.FRA_PROTOCOL:\n\t\t\t\trule.Protocol = uint8(attrs[j].Value[0])\n\t\t\t}\n\t\t}\n\n\t\tif filter != nil {\n\t\t\tswitch {\n\t\t\tcase filterMask&RT_FILTER_SRC != 0 &&\n\t\t\t\t(rule.Src == nil || rule.Src.String() != filter.Src.String()):\n\t\t\t\tcontinue\n\t\t\tcase filterMask&RT_FILTER_DST != 0 &&\n\t\t\t\t(rule.Dst == nil || rule.Dst.String() != filter.Dst.String()):\n\t\t\t\tcontinue\n\t\t\tcase filterMask&RT_FILTER_TABLE != 0 &&\n\t\t\t\tfilter.Table != unix.RT_TABLE_UNSPEC && rule.Table != filter.Table:\n\t\t\t\tcontinue\n\t\t\tcase filterMask&RT_FILTER_TOS != 0 && rule.Tos != filter.Tos:\n\t\t\t\tcontinue\n\t\t\tcase filterMask&RT_FILTER_PRIORITY != 0 && rule.Priority != filter.Priority:\n\t\t\t\tcontinue\n\t\t\tcase filterMask&RT_FILTER_MARK != 0 && rule.Mark != filter.Mark:\n\t\t\t\tcontinue\n\t\t\tcase filterMask&RT_FILTER_MASK != 0 && !ptrEqual(rule.Mask, filter.Mask):\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tres = append(res, *rule)\n\t}\n\n\treturn res, executeErr\n}\n\nfunc (pr *RulePortRange) toRtAttrData() []byte {\n\tb := [][]byte{make([]byte, 2), make([]byte, 2)}\n\tnative.PutUint16(b[0], pr.Start)\n\tnative.PutUint16(b[1], pr.End)\n\treturn bytes.Join(b, []byte{})\n}\n\nfunc (pr *RuleUIDRange) toRtAttrData() []byte {\n\tb := [][]byte{make([]byte, 4), make([]byte, 4)}\n\tnative.PutUint32(b[0], pr.Start)\n\tnative.PutUint32(b[1], pr.End)\n\treturn bytes.Join(b, []byte{})\n}\n\nfunc ptrEqual(a, b *uint32) bool {\n\tif a == b {\n\t\treturn true\n\t}\n\tif (a == nil) || (b == nil) {\n\t\treturn false\n\t}\n\treturn *a == *b\n}\n\nfunc (r Rule) typeString() string {\n\tswitch r.Type {\n\tcase unix.RTN_UNSPEC: // zero\n\t\treturn \"\"\n\tcase unix.RTN_UNICAST:\n\t\treturn \"\"\n\tcase unix.RTN_LOCAL:\n\t\treturn \"local\"\n\tcase unix.RTN_BROADCAST:\n\t\treturn \"broadcast\"\n\tcase unix.RTN_ANYCAST:\n\t\treturn \"anycast\"\n\tcase unix.RTN_MULTICAST:\n\t\treturn \"multicast\"\n\tcase unix.RTN_BLACKHOLE:\n\t\treturn \"blackhole\"\n\tcase unix.RTN_UNREACHABLE:\n\t\treturn \"unreachable\"\n\tcase unix.RTN_PROHIBIT:\n\t\treturn \"prohibit\"\n\tcase unix.RTN_THROW:\n\t\treturn \"throw\"\n\tcase unix.RTN_NAT:\n\t\treturn \"nat\"\n\tcase unix.RTN_XRESOLVE:\n\t\treturn \"xresolve\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"type(0x%x)\", r.Type)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/rule_nonlinux.go",
    "content": "//go:build !linux\n// +build !linux\n\npackage netlink\n\nfunc (r Rule) typeString() string {\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/socket.go",
    "content": "package netlink\n\nimport \"net\"\n\n// SocketID identifies a single socket.\ntype SocketID struct {\n\tSourcePort      uint16\n\tDestinationPort uint16\n\tSource          net.IP\n\tDestination     net.IP\n\tInterface       uint32\n\tCookie          [2]uint32\n}\n\n// Socket represents a netlink socket.\ntype Socket struct {\n\tFamily  uint8\n\tState   uint8\n\tTimer   uint8\n\tRetrans uint8\n\tID      SocketID\n\tExpires uint32\n\tRQueue  uint32\n\tWQueue  uint32\n\tUID     uint32\n\tINode   uint32\n}\n\n// UnixSocket represents a netlink unix socket.\ntype UnixSocket struct {\n\tType   uint8\n\tFamily uint8\n\tState  uint8\n\tpad    uint8\n\tINode  uint32\n\tCookie [2]uint32\n}\n\n// XDPSocket represents an XDP socket (and the common diagnosis part in\n// particular). Please note that in contrast to [UnixSocket] the XDPSocket type\n// does not feature “State” information.\ntype XDPSocket struct {\n\t// xdp_diag_msg\n\t// https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L21\n\tFamily uint8\n\tType   uint8\n\tpad    uint16\n\tIno    uint32\n\tCookie [2]uint32\n}\n\ntype XDPInfo struct {\n\t// XDP_DIAG_INFO/xdp_diag_info\n\t// https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L51\n\tIfindex uint32\n\tQueueID uint32\n\n\t// XDP_DIAG_UID\n\tUID uint32\n\n\t// XDP_RX_RING\n\t// https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L56\n\tRxRingEntries             uint32\n\tTxRingEntries             uint32\n\tUmemFillRingEntries       uint32\n\tUmemCompletionRingEntries uint32\n\n\t// XDR_DIAG_UMEM\n\tUmem *XDPDiagUmem\n\n\t// XDR_DIAG_STATS\n\tStats *XDPDiagStats\n}\n\nconst (\n\tXDP_DU_F_ZEROCOPY = 1 << iota\n)\n\n// XDPDiagUmem describes the umem attached to an XDP socket.\n//\n// https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L62\ntype XDPDiagUmem struct {\n\tSize      uint64\n\tID        uint32\n\tNumPages  uint32\n\tChunkSize uint32\n\tHeadroom  uint32\n\tIfindex   uint32\n\tQueueID   uint32\n\tFlags     uint32\n\tRefs      uint32\n}\n\n// XDPDiagStats contains ring statistics for an XDP socket.\n//\n// https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L74\ntype XDPDiagStats struct {\n\tRxDropped     uint64\n\tRxInvalid     uint64\n\tRxFull        uint64\n\tFillRingEmpty uint64\n\tTxInvalid     uint64\n\tTxRingEmpty   uint64\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/socket_linux.go",
    "content": "package netlink\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"syscall\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tsizeofSocketID          = 0x30\n\tsizeofSocketRequest     = sizeofSocketID + 0x8\n\tsizeofSocket            = sizeofSocketID + 0x18\n\tsizeofUnixSocketRequest = 0x18 // 24 byte\n\tsizeofUnixSocket        = 0x10 // 16 byte\n)\n\ntype socketRequest struct {\n\tFamily   uint8\n\tProtocol uint8\n\tExt      uint8\n\tpad      uint8\n\tStates   uint32\n\tID       SocketID\n}\n\ntype writeBuffer struct {\n\tBytes []byte\n\tpos   int\n}\n\nfunc (b *writeBuffer) Write(c byte) {\n\tb.Bytes[b.pos] = c\n\tb.pos++\n}\n\nfunc (b *writeBuffer) Next(n int) []byte {\n\ts := b.Bytes[b.pos : b.pos+n]\n\tb.pos += n\n\treturn s\n}\n\nfunc (r *socketRequest) Serialize() []byte {\n\tb := writeBuffer{Bytes: make([]byte, sizeofSocketRequest)}\n\tb.Write(r.Family)\n\tb.Write(r.Protocol)\n\tb.Write(r.Ext)\n\tb.Write(r.pad)\n\tnative.PutUint32(b.Next(4), r.States)\n\tnetworkOrder.PutUint16(b.Next(2), r.ID.SourcePort)\n\tnetworkOrder.PutUint16(b.Next(2), r.ID.DestinationPort)\n\tif r.Family == unix.AF_INET6 {\n\t\tcopy(b.Next(16), r.ID.Source)\n\t\tcopy(b.Next(16), r.ID.Destination)\n\t} else {\n\t\tcopy(b.Next(16), r.ID.Source.To4())\n\t\tcopy(b.Next(16), r.ID.Destination.To4())\n\t}\n\tnative.PutUint32(b.Next(4), r.ID.Interface)\n\tnative.PutUint32(b.Next(4), r.ID.Cookie[0])\n\tnative.PutUint32(b.Next(4), r.ID.Cookie[1])\n\treturn b.Bytes\n}\n\nfunc (r *socketRequest) Len() int { return sizeofSocketRequest }\n\n// According to linux/include/uapi/linux/unix_diag.h\ntype unixSocketRequest struct {\n\tFamily   uint8\n\tProtocol uint8\n\tpad      uint16\n\tStates   uint32\n\tINode    uint32\n\tShow     uint32\n\tCookie   [2]uint32\n}\n\nfunc (r *unixSocketRequest) Serialize() []byte {\n\tb := writeBuffer{Bytes: make([]byte, sizeofUnixSocketRequest)}\n\tb.Write(r.Family)\n\tb.Write(r.Protocol)\n\tnative.PutUint16(b.Next(2), r.pad)\n\tnative.PutUint32(b.Next(4), r.States)\n\tnative.PutUint32(b.Next(4), r.INode)\n\tnative.PutUint32(b.Next(4), r.Show)\n\tnative.PutUint32(b.Next(4), r.Cookie[0])\n\tnative.PutUint32(b.Next(4), r.Cookie[1])\n\treturn b.Bytes\n}\n\nfunc (r *unixSocketRequest) Len() int { return sizeofUnixSocketRequest }\n\ntype readBuffer struct {\n\tBytes []byte\n\tpos   int\n}\n\nfunc (b *readBuffer) Read() byte {\n\tc := b.Bytes[b.pos]\n\tb.pos++\n\treturn c\n}\n\nfunc (b *readBuffer) Next(n int) []byte {\n\ts := b.Bytes[b.pos : b.pos+n]\n\tb.pos += n\n\treturn s\n}\n\nfunc (s *Socket) deserialize(b []byte) error {\n\tif len(b) < sizeofSocket {\n\t\treturn fmt.Errorf(\"socket data short read (%d); want %d\", len(b), sizeofSocket)\n\t}\n\trb := readBuffer{Bytes: b}\n\ts.Family = rb.Read()\n\ts.State = rb.Read()\n\ts.Timer = rb.Read()\n\ts.Retrans = rb.Read()\n\ts.ID.SourcePort = networkOrder.Uint16(rb.Next(2))\n\ts.ID.DestinationPort = networkOrder.Uint16(rb.Next(2))\n\tif s.Family == unix.AF_INET6 {\n\t\ts.ID.Source = net.IP(rb.Next(16))\n\t\ts.ID.Destination = net.IP(rb.Next(16))\n\t} else {\n\t\ts.ID.Source = net.IPv4(rb.Read(), rb.Read(), rb.Read(), rb.Read())\n\t\trb.Next(12)\n\t\ts.ID.Destination = net.IPv4(rb.Read(), rb.Read(), rb.Read(), rb.Read())\n\t\trb.Next(12)\n\t}\n\ts.ID.Interface = native.Uint32(rb.Next(4))\n\ts.ID.Cookie[0] = native.Uint32(rb.Next(4))\n\ts.ID.Cookie[1] = native.Uint32(rb.Next(4))\n\ts.Expires = native.Uint32(rb.Next(4))\n\ts.RQueue = native.Uint32(rb.Next(4))\n\ts.WQueue = native.Uint32(rb.Next(4))\n\ts.UID = native.Uint32(rb.Next(4))\n\ts.INode = native.Uint32(rb.Next(4))\n\treturn nil\n}\n\nfunc (u *UnixSocket) deserialize(b []byte) error {\n\tif len(b) < sizeofUnixSocket {\n\t\treturn fmt.Errorf(\"unix diag data short read (%d); want %d\", len(b), sizeofUnixSocket)\n\t}\n\trb := readBuffer{Bytes: b}\n\tu.Type = rb.Read()\n\tu.Family = rb.Read()\n\tu.State = rb.Read()\n\tu.pad = rb.Read()\n\tu.INode = native.Uint32(rb.Next(4))\n\tu.Cookie[0] = native.Uint32(rb.Next(4))\n\tu.Cookie[1] = native.Uint32(rb.Next(4))\n\treturn nil\n}\n\n// SocketGet returns the Socket identified by its local and remote addresses.\n//\n// If the returned error is [ErrDumpInterrupted], the search for a result may\n// be incomplete and the caller should retry.\nfunc (h *Handle) SocketGet(local, remote net.Addr) (*Socket, error) {\n\tvar protocol uint8\n\tvar localIP, remoteIP net.IP\n\tvar localPort, remotePort uint16\n\tswitch l := local.(type) {\n\tcase *net.TCPAddr:\n\t\tr, ok := remote.(*net.TCPAddr)\n\t\tif !ok {\n\t\t\treturn nil, ErrNotImplemented\n\t\t}\n\t\tlocalIP = l.IP\n\t\tlocalPort = uint16(l.Port)\n\t\tremoteIP = r.IP\n\t\tremotePort = uint16(r.Port)\n\t\tprotocol = unix.IPPROTO_TCP\n\tcase *net.UDPAddr:\n\t\tr, ok := remote.(*net.UDPAddr)\n\t\tif !ok {\n\t\t\treturn nil, ErrNotImplemented\n\t\t}\n\t\tlocalIP = l.IP\n\t\tlocalPort = uint16(l.Port)\n\t\tremoteIP = r.IP\n\t\tremotePort = uint16(r.Port)\n\t\tprotocol = unix.IPPROTO_UDP\n\tdefault:\n\t\treturn nil, ErrNotImplemented\n\t}\n\n\tvar family uint8\n\tif localIP.To4() != nil && remoteIP.To4() != nil {\n\t\tfamily = unix.AF_INET\n\t}\n\n\tif family == 0 && localIP.To16() != nil && remoteIP.To16() != nil {\n\t\tfamily = unix.AF_INET6\n\t}\n\n\tif family == 0 {\n\t\treturn nil, ErrNotImplemented\n\t}\n\n\treq := h.newNetlinkRequest(nl.SOCK_DIAG_BY_FAMILY, unix.NLM_F_DUMP)\n\treq.AddData(&socketRequest{\n\t\tFamily:   family,\n\t\tProtocol: protocol,\n\t\tStates:   0xffffffff,\n\t\tID: SocketID{\n\t\t\tSourcePort:      localPort,\n\t\t\tDestinationPort: remotePort,\n\t\t\tSource:          localIP,\n\t\t\tDestination:     remoteIP,\n\t\t\tCookie:          [2]uint32{nl.TCPDIAG_NOCOOKIE, nl.TCPDIAG_NOCOOKIE},\n\t\t},\n\t})\n\n\tmsgs, err := req.Execute(unix.NETLINK_INET_DIAG, nl.SOCK_DIAG_BY_FAMILY)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(msgs) == 0 {\n\t\treturn nil, errors.New(\"no message nor error from netlink\")\n\t}\n\tif len(msgs) > 2 {\n\t\treturn nil, fmt.Errorf(\"multiple (%d) matching sockets\", len(msgs))\n\t}\n\n\tsock := &Socket{}\n\tif err := sock.deserialize(msgs[0]); err != nil {\n\t\treturn nil, err\n\t}\n\treturn sock, nil\n}\n\n// SocketGet returns the Socket identified by its local and remote addresses.\n//\n// If the returned error is [ErrDumpInterrupted], the search for a result may\n// be incomplete and the caller should retry.\nfunc SocketGet(local, remote net.Addr) (*Socket, error) {\n\treturn pkgHandle.SocketGet(local, remote)\n}\n\n// SocketDestroy kills the Socket identified by its local and remote addresses.\nfunc (h *Handle) SocketDestroy(local, remote net.Addr) error {\n\tlocalTCP, ok := local.(*net.TCPAddr)\n\tif !ok {\n\t\treturn ErrNotImplemented\n\t}\n\tremoteTCP, ok := remote.(*net.TCPAddr)\n\tif !ok {\n\t\treturn ErrNotImplemented\n\t}\n\tlocalIP := localTCP.IP.To4()\n\tif localIP == nil {\n\t\treturn ErrNotImplemented\n\t}\n\tremoteIP := remoteTCP.IP.To4()\n\tif remoteIP == nil {\n\t\treturn ErrNotImplemented\n\t}\n\n\ts, err := nl.Subscribe(unix.NETLINK_INET_DIAG)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer s.Close()\n\treq := h.newNetlinkRequest(nl.SOCK_DESTROY, unix.NLM_F_ACK)\n\treq.AddData(&socketRequest{\n\t\tFamily:   unix.AF_INET,\n\t\tProtocol: unix.IPPROTO_TCP,\n\t\tID: SocketID{\n\t\t\tSourcePort:      uint16(localTCP.Port),\n\t\t\tDestinationPort: uint16(remoteTCP.Port),\n\t\t\tSource:          localIP,\n\t\t\tDestination:     remoteIP,\n\t\t\tCookie:          [2]uint32{nl.TCPDIAG_NOCOOKIE, nl.TCPDIAG_NOCOOKIE},\n\t\t},\n\t})\n\n\t_, err = req.Execute(unix.NETLINK_INET_DIAG, 0)\n\treturn err\n}\n\n// SocketDestroy kills the Socket identified by its local and remote addresses.\nfunc SocketDestroy(local, remote net.Addr) error {\n\treturn pkgHandle.SocketDestroy(local, remote)\n}\n\n// SocketDiagTCPInfo requests INET_DIAG_INFO for TCP protocol for specified family type and return with extension TCP info.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) SocketDiagTCPInfo(family uint8) ([]*InetDiagTCPInfoResp, error) {\n\t// Construct the request\n\treq := h.newNetlinkRequest(nl.SOCK_DIAG_BY_FAMILY, unix.NLM_F_DUMP)\n\treq.AddData(&socketRequest{\n\t\tFamily:   family,\n\t\tProtocol: unix.IPPROTO_TCP,\n\t\tExt:      (1 << (INET_DIAG_VEGASINFO - 1)) | (1 << (INET_DIAG_INFO - 1)),\n\t\tStates:   uint32(0xfff), // all states\n\t})\n\n\t// Do the query and parse the result\n\tvar result []*InetDiagTCPInfoResp\n\texecuteErr := req.ExecuteIter(unix.NETLINK_INET_DIAG, nl.SOCK_DIAG_BY_FAMILY, func(msg []byte) bool {\n\t\tsockInfo := &Socket{}\n\t\tvar err error\n\t\tif err = sockInfo.deserialize(msg); err != nil {\n\t\t\treturn false\n\t\t}\n\t\tvar attrs []syscall.NetlinkRouteAttr\n\t\tif attrs, err = nl.ParseRouteAttr(msg[sizeofSocket:]); err != nil {\n\t\t\treturn false\n\t\t}\n\n\t\tvar res *InetDiagTCPInfoResp\n\t\tif res, err = attrsToInetDiagTCPInfoResp(attrs, sockInfo); err != nil {\n\t\t\treturn false\n\t\t}\n\n\t\tresult = append(result, res)\n\t\treturn true\n\t})\n\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\treturn result, executeErr\n}\n\n// SocketDiagTCPInfo requests INET_DIAG_INFO for TCP protocol for specified family type and return with extension TCP info.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc SocketDiagTCPInfo(family uint8) ([]*InetDiagTCPInfoResp, error) {\n\treturn pkgHandle.SocketDiagTCPInfo(family)\n}\n\n// SocketDiagTCP requests INET_DIAG_INFO for TCP protocol for specified family type and return related socket.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) SocketDiagTCP(family uint8) ([]*Socket, error) {\n\t// Construct the request\n\treq := h.newNetlinkRequest(nl.SOCK_DIAG_BY_FAMILY, unix.NLM_F_DUMP)\n\treq.AddData(&socketRequest{\n\t\tFamily:   family,\n\t\tProtocol: unix.IPPROTO_TCP,\n\t\tExt:      (1 << (INET_DIAG_VEGASINFO - 1)) | (1 << (INET_DIAG_INFO - 1)),\n\t\tStates:   uint32(0xfff), // all states\n\t})\n\n\t// Do the query and parse the result\n\tvar result []*Socket\n\texecuteErr := req.ExecuteIter(unix.NETLINK_INET_DIAG, nl.SOCK_DIAG_BY_FAMILY, func(msg []byte) bool {\n\t\tsockInfo := &Socket{}\n\t\tif err := sockInfo.deserialize(msg); err != nil {\n\t\t\treturn false\n\t\t}\n\t\tresult = append(result, sockInfo)\n\t\treturn true\n\t})\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\treturn result, executeErr\n}\n\n// SocketDiagTCP requests INET_DIAG_INFO for TCP protocol for specified family type and return related socket.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc SocketDiagTCP(family uint8) ([]*Socket, error) {\n\treturn pkgHandle.SocketDiagTCP(family)\n}\n\n// SocketDiagUDPInfo requests INET_DIAG_INFO for UDP protocol for specified family type and return with extension info.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) SocketDiagUDPInfo(family uint8) ([]*InetDiagUDPInfoResp, error) {\n\t// Construct the request\n\tvar extensions uint8\n\textensions = 1 << (INET_DIAG_VEGASINFO - 1)\n\textensions |= 1 << (INET_DIAG_INFO - 1)\n\textensions |= 1 << (INET_DIAG_MEMINFO - 1)\n\n\treq := h.newNetlinkRequest(nl.SOCK_DIAG_BY_FAMILY, unix.NLM_F_DUMP)\n\treq.AddData(&socketRequest{\n\t\tFamily:   family,\n\t\tProtocol: unix.IPPROTO_UDP,\n\t\tExt:      extensions,\n\t\tStates:   uint32(0xfff), // all states\n\t})\n\n\t// Do the query and parse the result\n\tvar result []*InetDiagUDPInfoResp\n\texecuteErr := req.ExecuteIter(unix.NETLINK_INET_DIAG, nl.SOCK_DIAG_BY_FAMILY, func(msg []byte) bool {\n\t\tsockInfo := &Socket{}\n\t\tif err := sockInfo.deserialize(msg); err != nil {\n\t\t\treturn false\n\t\t}\n\n\t\tvar attrs []syscall.NetlinkRouteAttr\n\t\tvar err error\n\t\tif attrs, err = nl.ParseRouteAttr(msg[sizeofSocket:]); err != nil {\n\t\t\treturn false\n\t\t}\n\n\t\tvar res *InetDiagUDPInfoResp\n\t\tif res, err = attrsToInetDiagUDPInfoResp(attrs, sockInfo); err != nil {\n\t\t\treturn false\n\t\t}\n\n\t\tresult = append(result, res)\n\t\treturn true\n\t})\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\treturn result, executeErr\n}\n\n// SocketDiagUDPInfo requests INET_DIAG_INFO for UDP protocol for specified family type and return with extension info.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc SocketDiagUDPInfo(family uint8) ([]*InetDiagUDPInfoResp, error) {\n\treturn pkgHandle.SocketDiagUDPInfo(family)\n}\n\n// SocketDiagUDP requests INET_DIAG_INFO for UDP protocol for specified family type and return related socket.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) SocketDiagUDP(family uint8) ([]*Socket, error) {\n\t// Construct the request\n\treq := h.newNetlinkRequest(nl.SOCK_DIAG_BY_FAMILY, unix.NLM_F_DUMP)\n\treq.AddData(&socketRequest{\n\t\tFamily:   family,\n\t\tProtocol: unix.IPPROTO_UDP,\n\t\tExt:      (1 << (INET_DIAG_VEGASINFO - 1)) | (1 << (INET_DIAG_INFO - 1)),\n\t\tStates:   uint32(0xfff), // all states\n\t})\n\n\t// Do the query and parse the result\n\tvar result []*Socket\n\texecuteErr := req.ExecuteIter(unix.NETLINK_INET_DIAG, nl.SOCK_DIAG_BY_FAMILY, func(msg []byte) bool {\n\t\tsockInfo := &Socket{}\n\t\tif err := sockInfo.deserialize(msg); err != nil {\n\t\t\treturn false\n\t\t}\n\t\tresult = append(result, sockInfo)\n\t\treturn true\n\t})\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\treturn result, executeErr\n}\n\n// SocketDiagUDP requests INET_DIAG_INFO for UDP protocol for specified family type and return related socket.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc SocketDiagUDP(family uint8) ([]*Socket, error) {\n\treturn pkgHandle.SocketDiagUDP(family)\n}\n\n// UnixSocketDiagInfo requests UNIX_DIAG_INFO for unix sockets and return with extension info.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) UnixSocketDiagInfo() ([]*UnixDiagInfoResp, error) {\n\t// Construct the request\n\tvar extensions uint8\n\textensions = 1 << UNIX_DIAG_NAME\n\textensions |= 1 << UNIX_DIAG_PEER\n\textensions |= 1 << UNIX_DIAG_RQLEN\n\treq := h.newNetlinkRequest(nl.SOCK_DIAG_BY_FAMILY, unix.NLM_F_DUMP)\n\treq.AddData(&unixSocketRequest{\n\t\tFamily: unix.AF_UNIX,\n\t\tStates: ^uint32(0), // all states\n\t\tShow:   uint32(extensions),\n\t})\n\n\tvar result []*UnixDiagInfoResp\n\texecuteErr := req.ExecuteIter(unix.NETLINK_INET_DIAG, nl.SOCK_DIAG_BY_FAMILY, func(msg []byte) bool {\n\t\tsockInfo := &UnixSocket{}\n\t\tif err := sockInfo.deserialize(msg); err != nil {\n\t\t\treturn false\n\t\t}\n\n\t\t// Diagnosis also delivers sockets with AF_INET family, filter those\n\t\tif sockInfo.Family != unix.AF_UNIX {\n\t\t\treturn false\n\t\t}\n\n\t\tvar attrs []syscall.NetlinkRouteAttr\n\t\tvar err error\n\t\tif attrs, err = nl.ParseRouteAttr(msg[sizeofUnixSocket:]); err != nil {\n\t\t\treturn false\n\t\t}\n\n\t\tvar res *UnixDiagInfoResp\n\t\tif res, err = attrsToUnixDiagInfoResp(attrs, sockInfo); err != nil {\n\t\t\treturn false\n\t\t}\n\t\tresult = append(result, res)\n\t\treturn true\n\t})\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\treturn result, executeErr\n}\n\n// UnixSocketDiagInfo requests UNIX_DIAG_INFO for unix sockets and return with extension info.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc UnixSocketDiagInfo() ([]*UnixDiagInfoResp, error) {\n\treturn pkgHandle.UnixSocketDiagInfo()\n}\n\n// UnixSocketDiag requests UNIX_DIAG_INFO for unix sockets.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) UnixSocketDiag() ([]*UnixSocket, error) {\n\t// Construct the request\n\treq := h.newNetlinkRequest(nl.SOCK_DIAG_BY_FAMILY, unix.NLM_F_DUMP)\n\treq.AddData(&unixSocketRequest{\n\t\tFamily: unix.AF_UNIX,\n\t\tStates: ^uint32(0), // all states\n\t})\n\n\tvar result []*UnixSocket\n\texecuteErr := req.ExecuteIter(unix.NETLINK_INET_DIAG, nl.SOCK_DIAG_BY_FAMILY, func(msg []byte) bool {\n\t\tsockInfo := &UnixSocket{}\n\t\tif err := sockInfo.deserialize(msg); err != nil {\n\t\t\treturn false\n\t\t}\n\n\t\t// Diagnosis also delivers sockets with AF_INET family, filter those\n\t\tif sockInfo.Family == unix.AF_UNIX {\n\t\t\tresult = append(result, sockInfo)\n\t\t}\n\t\treturn true\n\t})\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\treturn result, executeErr\n}\n\n// UnixSocketDiag requests UNIX_DIAG_INFO for unix sockets.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc UnixSocketDiag() ([]*UnixSocket, error) {\n\treturn pkgHandle.UnixSocketDiag()\n}\n\nfunc attrsToInetDiagTCPInfoResp(attrs []syscall.NetlinkRouteAttr, sockInfo *Socket) (*InetDiagTCPInfoResp, error) {\n\tinfo := &InetDiagTCPInfoResp{\n\t\tInetDiagMsg: sockInfo,\n\t}\n\tfor _, a := range attrs {\n\t\tswitch a.Attr.Type {\n\t\tcase INET_DIAG_INFO:\n\t\t\tinfo.TCPInfo = &TCPInfo{}\n\t\t\tif err := info.TCPInfo.deserialize(a.Value); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\tcase INET_DIAG_BBRINFO:\n\t\t\tinfo.TCPBBRInfo = &TCPBBRInfo{}\n\t\t\tif err := info.TCPBBRInfo.deserialize(a.Value); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn info, nil\n}\n\nfunc attrsToInetDiagUDPInfoResp(attrs []syscall.NetlinkRouteAttr, sockInfo *Socket) (*InetDiagUDPInfoResp, error) {\n\tinfo := &InetDiagUDPInfoResp{\n\t\tInetDiagMsg: sockInfo,\n\t}\n\tfor _, a := range attrs {\n\t\tswitch a.Attr.Type {\n\t\tcase INET_DIAG_MEMINFO:\n\t\t\tinfo.Memory = &MemInfo{}\n\t\t\tif err := info.Memory.deserialize(a.Value); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn info, nil\n}\n\nfunc attrsToUnixDiagInfoResp(attrs []syscall.NetlinkRouteAttr, sockInfo *UnixSocket) (*UnixDiagInfoResp, error) {\n\tinfo := &UnixDiagInfoResp{\n\t\tDiagMsg: sockInfo,\n\t}\n\tfor _, a := range attrs {\n\t\tswitch a.Attr.Type {\n\t\tcase UNIX_DIAG_NAME:\n\t\t\tname := string(a.Value[:a.Attr.Len])\n\t\t\tinfo.Name = &name\n\t\tcase UNIX_DIAG_PEER:\n\t\t\tpeer := native.Uint32(a.Value)\n\t\t\tinfo.Peer = &peer\n\t\tcase UNIX_DIAG_RQLEN:\n\t\t\tinfo.Queue = &QueueInfo{\n\t\t\t\tRQueue: native.Uint32(a.Value[:4]),\n\t\t\t\tWQueue: native.Uint32(a.Value[4:]),\n\t\t\t}\n\t\t\t// default:\n\t\t\t// \tfmt.Println(\"unknown unix attribute type\", a.Attr.Type, \"with data\", a.Value)\n\t\t}\n\t}\n\n\treturn info, nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/socket_xdp_linux.go",
    "content": "package netlink\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"syscall\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tsizeofXDPSocketRequest = 1 + 1 + 2 + 4 + 4 + 2*4\n\tsizeofXDPSocket        = 0x10\n)\n\n// https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L12\ntype xdpSocketRequest struct {\n\tFamily   uint8\n\tProtocol uint8\n\tpad      uint16\n\tIno      uint32\n\tShow     uint32\n\tCookie   [2]uint32\n}\n\nfunc (r *xdpSocketRequest) Serialize() []byte {\n\tb := writeBuffer{Bytes: make([]byte, sizeofSocketRequest)}\n\tb.Write(r.Family)\n\tb.Write(r.Protocol)\n\tnative.PutUint16(b.Next(2), r.pad)\n\tnative.PutUint32(b.Next(4), r.Ino)\n\tnative.PutUint32(b.Next(4), r.Show)\n\tnative.PutUint32(b.Next(4), r.Cookie[0])\n\tnative.PutUint32(b.Next(4), r.Cookie[1])\n\treturn b.Bytes\n}\n\nfunc (r *xdpSocketRequest) Len() int { return sizeofXDPSocketRequest }\n\nfunc (s *XDPSocket) deserialize(b []byte) error {\n\tif len(b) < sizeofXDPSocket {\n\t\treturn fmt.Errorf(\"XDP socket data short read (%d); want %d\", len(b), sizeofXDPSocket)\n\t}\n\trb := readBuffer{Bytes: b}\n\ts.Family = rb.Read()\n\ts.Type = rb.Read()\n\ts.pad = native.Uint16(rb.Next(2))\n\ts.Ino = native.Uint32(rb.Next(4))\n\ts.Cookie[0] = native.Uint32(rb.Next(4))\n\ts.Cookie[1] = native.Uint32(rb.Next(4))\n\treturn nil\n}\n\n// SocketXDPGetInfo returns the XDP socket identified by its inode number and/or\n// socket cookie. Specify the cookie as SOCK_ANY_COOKIE if\n//\n// If the returned error is [ErrDumpInterrupted], the caller should retry.\nfunc SocketXDPGetInfo(ino uint32, cookie uint64) (*XDPDiagInfoResp, error) {\n\t// We have a problem here: dumping AF_XDP sockets currently does not support\n\t// filtering. We thus need to dump all XSKs and then only filter afterwards\n\t// :(\n\txsks, err := SocketDiagXDP()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcheckCookie := cookie != SOCK_ANY_COOKIE && cookie != 0\n\tcrumblingCookie := [2]uint32{uint32(cookie), uint32(cookie >> 32)}\n\tcheckIno := ino != 0\n\tvar xskinfo *XDPDiagInfoResp\n\tfor _, xsk := range xsks {\n\t\tif checkIno && xsk.XDPDiagMsg.Ino != ino {\n\t\t\tcontinue\n\t\t}\n\t\tif checkCookie && xsk.XDPDiagMsg.Cookie != crumblingCookie {\n\t\t\tcontinue\n\t\t}\n\t\tif xskinfo != nil {\n\t\t\treturn nil, errors.New(\"multiple matching XDP sockets\")\n\t\t}\n\t\txskinfo = xsk\n\t}\n\tif xskinfo == nil {\n\t\treturn nil, errors.New(\"no matching XDP socket\")\n\t}\n\treturn xskinfo, nil\n}\n\n// SocketDiagXDP requests XDP_DIAG_INFO for XDP family sockets.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc SocketDiagXDP() ([]*XDPDiagInfoResp, error) {\n\tvar result []*XDPDiagInfoResp\n\terr := socketDiagXDPExecutor(func(m syscall.NetlinkMessage) error {\n\t\tsockInfo := &XDPSocket{}\n\t\tif err := sockInfo.deserialize(m.Data); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tattrs, err := nl.ParseRouteAttr(m.Data[sizeofXDPSocket:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tres, err := attrsToXDPDiagInfoResp(attrs, sockInfo)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tresult = append(result, res)\n\t\treturn nil\n\t})\n\tif err != nil && !errors.Is(err, ErrDumpInterrupted) {\n\t\treturn nil, err\n\t}\n\treturn result, err\n}\n\n// socketDiagXDPExecutor requests XDP_DIAG_INFO for XDP family sockets.\nfunc socketDiagXDPExecutor(receiver func(syscall.NetlinkMessage) error) error {\n\ts, err := nl.Subscribe(unix.NETLINK_INET_DIAG)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer s.Close()\n\n\treq := nl.NewNetlinkRequest(nl.SOCK_DIAG_BY_FAMILY, unix.NLM_F_DUMP)\n\treq.AddData(&xdpSocketRequest{\n\t\tFamily: unix.AF_XDP,\n\t\tShow:   XDP_SHOW_INFO | XDP_SHOW_RING_CFG | XDP_SHOW_UMEM | XDP_SHOW_STATS,\n\t})\n\tif err := s.Send(req); err != nil {\n\t\treturn err\n\t}\n\n\tdumpIntr := false\nloop:\n\tfor {\n\t\tmsgs, from, err := s.Receive()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif from.Pid != nl.PidKernel {\n\t\t\treturn fmt.Errorf(\"Wrong sender portid %d, expected %d\", from.Pid, nl.PidKernel)\n\t\t}\n\t\tif len(msgs) == 0 {\n\t\t\treturn errors.New(\"no message nor error from netlink\")\n\t\t}\n\n\t\tfor _, m := range msgs {\n\t\t\tif m.Header.Flags&unix.NLM_F_DUMP_INTR != 0 {\n\t\t\t\tdumpIntr = true\n\t\t\t}\n\t\t\tswitch m.Header.Type {\n\t\t\tcase unix.NLMSG_DONE:\n\t\t\t\tbreak loop\n\t\t\tcase unix.NLMSG_ERROR:\n\t\t\t\terror := int32(native.Uint32(m.Data[0:4]))\n\t\t\t\treturn syscall.Errno(-error)\n\t\t\t}\n\t\t\tif err := receiver(m); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\tif dumpIntr {\n\t\treturn ErrDumpInterrupted\n\t}\n\treturn nil\n}\n\nfunc attrsToXDPDiagInfoResp(attrs []syscall.NetlinkRouteAttr, sockInfo *XDPSocket) (*XDPDiagInfoResp, error) {\n\tresp := &XDPDiagInfoResp{\n\t\tXDPDiagMsg: sockInfo,\n\t\tXDPInfo:    &XDPInfo{},\n\t}\n\tfor _, a := range attrs {\n\t\tswitch a.Attr.Type {\n\t\tcase XDP_DIAG_INFO:\n\t\t\tresp.XDPInfo.Ifindex = native.Uint32(a.Value[0:4])\n\t\t\tresp.XDPInfo.QueueID = native.Uint32(a.Value[4:8])\n\t\tcase XDP_DIAG_UID:\n\t\t\tresp.XDPInfo.UID = native.Uint32(a.Value[0:4])\n\t\tcase XDP_DIAG_RX_RING:\n\t\t\tresp.XDPInfo.RxRingEntries = native.Uint32(a.Value[0:4])\n\t\tcase XDP_DIAG_TX_RING:\n\t\t\tresp.XDPInfo.TxRingEntries = native.Uint32(a.Value[0:4])\n\t\tcase XDP_DIAG_UMEM_FILL_RING:\n\t\t\tresp.XDPInfo.UmemFillRingEntries = native.Uint32(a.Value[0:4])\n\t\tcase XDP_DIAG_UMEM_COMPLETION_RING:\n\t\t\tresp.XDPInfo.UmemCompletionRingEntries = native.Uint32(a.Value[0:4])\n\t\tcase XDP_DIAG_UMEM:\n\t\t\tumem := &XDPDiagUmem{}\n\t\t\tif err := umem.deserialize(a.Value); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tresp.XDPInfo.Umem = umem\n\t\tcase XDP_DIAG_STATS:\n\t\t\tstats := &XDPDiagStats{}\n\t\t\tif err := stats.deserialize(a.Value); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tresp.XDPInfo.Stats = stats\n\t\t}\n\t}\n\treturn resp, nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/tcp.go",
    "content": "package netlink\n\n// TCP States\nconst (\n\tTCP_ESTABLISHED = iota + 0x01\n\tTCP_SYN_SENT\n\tTCP_SYN_RECV\n\tTCP_FIN_WAIT1\n\tTCP_FIN_WAIT2\n\tTCP_TIME_WAIT\n\tTCP_CLOSE\n\tTCP_CLOSE_WAIT\n\tTCP_LAST_ACK\n\tTCP_LISTEN\n\tTCP_CLOSING\n\tTCP_NEW_SYN_REC\n\tTCP_MAX_STATES\n)\n\ntype TCPInfo struct {\n\tState                     uint8\n\tCa_state                  uint8\n\tRetransmits               uint8\n\tProbes                    uint8\n\tBackoff                   uint8\n\tOptions                   uint8\n\tSnd_wscale                uint8 // no uint4\n\tRcv_wscale                uint8\n\tDelivery_rate_app_limited uint8\n\tFastopen_client_fail      uint8\n\tRto                       uint32\n\tAto                       uint32\n\tSnd_mss                   uint32\n\tRcv_mss                   uint32\n\tUnacked                   uint32\n\tSacked                    uint32\n\tLost                      uint32\n\tRetrans                   uint32\n\tFackets                   uint32\n\tLast_data_sent            uint32\n\tLast_ack_sent             uint32\n\tLast_data_recv            uint32\n\tLast_ack_recv             uint32\n\tPmtu                      uint32\n\tRcv_ssthresh              uint32\n\tRtt                       uint32\n\tRttvar                    uint32\n\tSnd_ssthresh              uint32\n\tSnd_cwnd                  uint32\n\tAdvmss                    uint32\n\tReordering                uint32\n\tRcv_rtt                   uint32\n\tRcv_space                 uint32\n\tTotal_retrans             uint32\n\tPacing_rate               uint64\n\tMax_pacing_rate           uint64\n\tBytes_acked               uint64 /* RFC4898 tcpEStatsAppHCThruOctetsAcked */\n\tBytes_received            uint64 /* RFC4898 tcpEStatsAppHCThruOctetsReceived */\n\tSegs_out                  uint32 /* RFC4898 tcpEStatsPerfSegsOut */\n\tSegs_in                   uint32 /* RFC4898 tcpEStatsPerfSegsIn */\n\tNotsent_bytes             uint32\n\tMin_rtt                   uint32\n\tData_segs_in              uint32 /* RFC4898 tcpEStatsDataSegsIn */\n\tData_segs_out             uint32 /* RFC4898 tcpEStatsDataSegsOut */\n\tDelivery_rate             uint64\n\tBusy_time                 uint64 /* Time (usec) busy sending data */\n\tRwnd_limited              uint64 /* Time (usec) limited by receive window */\n\tSndbuf_limited            uint64 /* Time (usec) limited by send buffer */\n\tDelivered                 uint32\n\tDelivered_ce              uint32\n\tBytes_sent                uint64 /* RFC4898 tcpEStatsPerfHCDataOctetsOut */\n\tBytes_retrans             uint64 /* RFC4898 tcpEStatsPerfOctetsRetrans */\n\tDsack_dups                uint32 /* RFC4898 tcpEStatsStackDSACKDups */\n\tReord_seen                uint32 /* reordering events seen */\n\tRcv_ooopack               uint32 /* Out-of-order packets received */\n\tSnd_wnd                   uint32 /* peer's advertised receive window after * scaling (bytes) */\n}\n\ntype TCPBBRInfo struct {\n\tBBRBW         uint64\n\tBBRMinRTT     uint32\n\tBBRPacingGain uint32\n\tBBRCwndGain   uint32\n}\n\n// According to https://man7.org/linux/man-pages/man7/sock_diag.7.html\ntype MemInfo struct {\n\tRMem uint32\n\tWMem uint32\n\tFMem uint32\n\tTMem uint32\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/tcp_linux.go",
    "content": "package netlink\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n)\n\nconst (\n\ttcpBBRInfoLen = 20\n\tmemInfoLen    = 16\n)\n\nfunc checkDeserErr(err error) error {\n\tif err == io.EOF {\n\t\treturn nil\n\t}\n\treturn err\n}\n\nfunc (t *TCPInfo) deserialize(b []byte) error {\n\tvar err error\n\trb := bytes.NewBuffer(b)\n\n\tt.State, err = rb.ReadByte()\n\tif err != nil {\n\t\treturn checkDeserErr(err)\n\t}\n\n\tt.Ca_state, err = rb.ReadByte()\n\tif err != nil {\n\t\treturn checkDeserErr(err)\n\t}\n\n\tt.Retransmits, err = rb.ReadByte()\n\tif err != nil {\n\t\treturn checkDeserErr(err)\n\t}\n\n\tt.Probes, err = rb.ReadByte()\n\tif err != nil {\n\t\treturn checkDeserErr(err)\n\t}\n\n\tt.Backoff, err = rb.ReadByte()\n\tif err != nil {\n\t\treturn checkDeserErr(err)\n\t}\n\tt.Options, err = rb.ReadByte()\n\tif err != nil {\n\t\treturn checkDeserErr(err)\n\t}\n\n\tscales, err := rb.ReadByte()\n\tif err != nil {\n\t\treturn checkDeserErr(err)\n\t}\n\tt.Snd_wscale = scales >> 4  // first 4 bits\n\tt.Rcv_wscale = scales & 0xf // last 4 bits\n\n\trateLimAndFastOpen, err := rb.ReadByte()\n\tif err != nil {\n\t\treturn checkDeserErr(err)\n\t}\n\tt.Delivery_rate_app_limited = rateLimAndFastOpen >> 7 // get first bit\n\tt.Fastopen_client_fail = rateLimAndFastOpen >> 5 & 3  // get next two bits\n\n\tnext := rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Rto = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Ato = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Snd_mss = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Rcv_mss = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Unacked = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Sacked = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Lost = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Retrans = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Fackets = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Last_data_sent = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Last_ack_sent = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Last_data_recv = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Last_ack_recv = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Pmtu = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Rcv_ssthresh = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Rtt = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Rttvar = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Snd_ssthresh = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Snd_cwnd = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Advmss = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Reordering = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Rcv_rtt = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Rcv_space = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Total_retrans = native.Uint32(next)\n\n\tnext = rb.Next(8)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Pacing_rate = native.Uint64(next)\n\n\tnext = rb.Next(8)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Max_pacing_rate = native.Uint64(next)\n\n\tnext = rb.Next(8)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Bytes_acked = native.Uint64(next)\n\n\tnext = rb.Next(8)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Bytes_received = native.Uint64(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Segs_out = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Segs_in = native.Uint32(next)\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Notsent_bytes = native.Uint32(next)\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Min_rtt = native.Uint32(next)\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Data_segs_in = native.Uint32(next)\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Data_segs_out = native.Uint32(next)\n\n\tnext = rb.Next(8)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Delivery_rate = native.Uint64(next)\n\n\tnext = rb.Next(8)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Busy_time = native.Uint64(next)\n\n\tnext = rb.Next(8)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Rwnd_limited = native.Uint64(next)\n\n\tnext = rb.Next(8)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Sndbuf_limited = native.Uint64(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Delivered = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Delivered_ce = native.Uint32(next)\n\n\tnext = rb.Next(8)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Bytes_sent = native.Uint64(next)\n\n\tnext = rb.Next(8)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Bytes_retrans = native.Uint64(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Dsack_dups = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Reord_seen = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Rcv_ooopack = native.Uint32(next)\n\n\tnext = rb.Next(4)\n\tif len(next) == 0 {\n\t\treturn nil\n\t}\n\tt.Snd_wnd = native.Uint32(next)\n\treturn nil\n}\n\nfunc (t *TCPBBRInfo) deserialize(b []byte) error {\n\tif len(b) != tcpBBRInfoLen {\n\t\treturn errors.New(\"Invalid length\")\n\t}\n\n\trb := bytes.NewBuffer(b)\n\tt.BBRBW = native.Uint64(rb.Next(8))\n\tt.BBRMinRTT = native.Uint32(rb.Next(4))\n\tt.BBRPacingGain = native.Uint32(rb.Next(4))\n\tt.BBRCwndGain = native.Uint32(rb.Next(4))\n\n\treturn nil\n}\n\nfunc (m *MemInfo) deserialize(b []byte) error {\n\tif len(b) != memInfoLen {\n\t\treturn errors.New(\"Invalid length\")\n\t}\n\n\trb := bytes.NewBuffer(b)\n\tm.RMem = native.Uint32(rb.Next(4))\n\tm.WMem = native.Uint32(rb.Next(4))\n\tm.FMem = native.Uint32(rb.Next(4))\n\tm.TMem = native.Uint32(rb.Next(4))\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/unix_diag.go",
    "content": "package netlink\n\n// According to linux/include/uapi/linux/unix_diag.h\nconst (\n\tUNIX_DIAG_NAME = iota\n\tUNIX_DIAG_VFS\n\tUNIX_DIAG_PEER\n\tUNIX_DIAG_ICONS\n\tUNIX_DIAG_RQLEN\n\tUNIX_DIAG_MEMINFO\n\tUNIX_DIAG_SHUTDOWN\n\tUNIX_DIAG_UID\n\tUNIX_DIAG_MAX\n)\n\ntype UnixDiagInfoResp struct {\n\tDiagMsg  *UnixSocket\n\tName     *string\n\tPeer     *uint32\n\tQueue    *QueueInfo\n\tShutdown *uint8\n}\n\ntype QueueInfo struct {\n\tRQueue uint32\n\tWQueue uint32\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/vdpa_linux.go",
    "content": "package netlink\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"syscall\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n)\n\ntype vdpaDevID struct {\n\tName string\n\tID   uint32\n}\n\n// VDPADev contains info about VDPA device\ntype VDPADev struct {\n\tvdpaDevID\n\tVendorID  uint32\n\tMaxVQS    uint32\n\tMaxVQSize uint16\n\tMinVQSize uint16\n}\n\n// VDPADevConfig contains configuration of the VDPA device\ntype VDPADevConfig struct {\n\tvdpaDevID\n\tFeatures           uint64\n\tNegotiatedFeatures uint64\n\tNet                VDPADevConfigNet\n}\n\n// VDPADevVStats conatins vStats for the VDPA device\ntype VDPADevVStats struct {\n\tvdpaDevID\n\tQueueIndex         uint32\n\tVendor             []VDPADevVStatsVendor\n\tNegotiatedFeatures uint64\n}\n\n// VDPADevVStatsVendor conatins name and value for vendor specific vstat option\ntype VDPADevVStatsVendor struct {\n\tName  string\n\tValue uint64\n}\n\n// VDPADevConfigNet conatins status and net config for the VDPA device\ntype VDPADevConfigNet struct {\n\tStatus VDPADevConfigNetStatus\n\tCfg    VDPADevConfigNetCfg\n}\n\n// VDPADevConfigNetStatus contains info about net status\ntype VDPADevConfigNetStatus struct {\n\tLinkUp   bool\n\tAnnounce bool\n}\n\n// VDPADevConfigNetCfg contains net config for the VDPA device\ntype VDPADevConfigNetCfg struct {\n\tMACAddr net.HardwareAddr\n\tMaxVQP  uint16\n\tMTU     uint16\n}\n\n// VDPAMGMTDev conatins info about VDPA management device\ntype VDPAMGMTDev struct {\n\tBusName           string\n\tDevName           string\n\tSupportedClasses  uint64\n\tSupportedFeatures uint64\n\tMaxVQS            uint32\n}\n\n// VDPANewDevParams contains parameters for new VDPA device\n// use SetBits to configure requried features for the device\n// example:\n//\n//\tVDPANewDevParams{Features: SetBits(0, VIRTIO_NET_F_MTU, VIRTIO_NET_F_CTRL_MAC_ADDR)}\ntype VDPANewDevParams struct {\n\tMACAddr  net.HardwareAddr\n\tMaxVQP   uint16\n\tMTU      uint16\n\tFeatures uint64\n}\n\n// SetBits set provided bits in the uint64 input value\n// usage example:\n// features := SetBits(0, VIRTIO_NET_F_MTU, VIRTIO_NET_F_CTRL_MAC_ADDR)\nfunc SetBits(input uint64, pos ...int) uint64 {\n\tfor _, p := range pos {\n\t\tinput |= 1 << uint64(p)\n\t}\n\treturn input\n}\n\n// IsBitSet check if specific bit is set in the uint64 input value\n// usage example:\n// hasNetClass := IsBitSet(mgmtDev, VIRTIO_ID_NET)\nfunc IsBitSet(input uint64, pos int) bool {\n\tval := input & (1 << uint64(pos))\n\treturn val > 0\n}\n\n// VDPANewDev adds new VDPA device\n// Equivalent to: `vdpa dev add name <name> mgmtdev <mgmtBus>/mgmtName [params]`\nfunc VDPANewDev(name, mgmtBus, mgmtName string, params VDPANewDevParams) error {\n\treturn pkgHandle.VDPANewDev(name, mgmtBus, mgmtName, params)\n}\n\n// VDPADelDev removes VDPA device\n// Equivalent to: `vdpa dev del <name>`\nfunc VDPADelDev(name string) error {\n\treturn pkgHandle.VDPADelDev(name)\n}\n\n// VDPAGetDevList returns list of VDPA devices\n// Equivalent to: `vdpa dev show`\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc VDPAGetDevList() ([]*VDPADev, error) {\n\treturn pkgHandle.VDPAGetDevList()\n}\n\n// VDPAGetDevByName returns VDPA device selected by name\n// Equivalent to: `vdpa dev show <name>`\nfunc VDPAGetDevByName(name string) (*VDPADev, error) {\n\treturn pkgHandle.VDPAGetDevByName(name)\n}\n\n// VDPAGetDevConfigList returns list of VDPA devices configurations\n// Equivalent to: `vdpa dev config show`\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc VDPAGetDevConfigList() ([]*VDPADevConfig, error) {\n\treturn pkgHandle.VDPAGetDevConfigList()\n}\n\n// VDPAGetDevConfigByName returns VDPA device configuration selected by name\n// Equivalent to: `vdpa dev config show <name>`\nfunc VDPAGetDevConfigByName(name string) (*VDPADevConfig, error) {\n\treturn pkgHandle.VDPAGetDevConfigByName(name)\n}\n\n// VDPAGetDevVStats returns vstats for VDPA device\n// Equivalent to: `vdpa dev vstats show <name> qidx <queueIndex>`\nfunc VDPAGetDevVStats(name string, queueIndex uint32) (*VDPADevVStats, error) {\n\treturn pkgHandle.VDPAGetDevVStats(name, queueIndex)\n}\n\n// VDPAGetMGMTDevList returns list of mgmt devices\n// Equivalent to: `vdpa mgmtdev show`\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc VDPAGetMGMTDevList() ([]*VDPAMGMTDev, error) {\n\treturn pkgHandle.VDPAGetMGMTDevList()\n}\n\n// VDPAGetMGMTDevByBusAndName returns mgmt devices selected by bus and name\n// Equivalent to: `vdpa mgmtdev show <bus>/<name>`\nfunc VDPAGetMGMTDevByBusAndName(bus, name string) (*VDPAMGMTDev, error) {\n\treturn pkgHandle.VDPAGetMGMTDevByBusAndName(bus, name)\n}\n\ntype vdpaNetlinkMessage []syscall.NetlinkRouteAttr\n\nfunc (id *vdpaDevID) parseIDAttribute(attr syscall.NetlinkRouteAttr) {\n\tswitch attr.Attr.Type {\n\tcase nl.VDPA_ATTR_DEV_NAME:\n\t\tid.Name = nl.BytesToString(attr.Value)\n\tcase nl.VDPA_ATTR_DEV_ID:\n\t\tid.ID = native.Uint32(attr.Value)\n\t}\n}\n\nfunc (netStatus *VDPADevConfigNetStatus) parseStatusAttribute(value []byte) {\n\ta := native.Uint16(value)\n\tnetStatus.Announce = (a & VIRTIO_NET_S_ANNOUNCE) > 0\n\tnetStatus.LinkUp = (a & VIRTIO_NET_S_LINK_UP) > 0\n}\n\nfunc (d *VDPADev) parseAttributes(attrs vdpaNetlinkMessage) {\n\tfor _, a := range attrs {\n\t\td.parseIDAttribute(a)\n\t\tswitch a.Attr.Type {\n\t\tcase nl.VDPA_ATTR_DEV_VENDOR_ID:\n\t\t\td.VendorID = native.Uint32(a.Value)\n\t\tcase nl.VDPA_ATTR_DEV_MAX_VQS:\n\t\t\td.MaxVQS = native.Uint32(a.Value)\n\t\tcase nl.VDPA_ATTR_DEV_MAX_VQ_SIZE:\n\t\t\td.MaxVQSize = native.Uint16(a.Value)\n\t\tcase nl.VDPA_ATTR_DEV_MIN_VQ_SIZE:\n\t\t\td.MinVQSize = native.Uint16(a.Value)\n\t\t}\n\t}\n}\n\nfunc (c *VDPADevConfig) parseAttributes(attrs vdpaNetlinkMessage) {\n\tfor _, a := range attrs {\n\t\tc.parseIDAttribute(a)\n\t\tswitch a.Attr.Type {\n\t\tcase nl.VDPA_ATTR_DEV_NET_CFG_MACADDR:\n\t\t\tc.Net.Cfg.MACAddr = a.Value\n\t\tcase nl.VDPA_ATTR_DEV_NET_STATUS:\n\t\t\tc.Net.Status.parseStatusAttribute(a.Value)\n\t\tcase nl.VDPA_ATTR_DEV_NET_CFG_MAX_VQP:\n\t\t\tc.Net.Cfg.MaxVQP = native.Uint16(a.Value)\n\t\tcase nl.VDPA_ATTR_DEV_NET_CFG_MTU:\n\t\t\tc.Net.Cfg.MTU = native.Uint16(a.Value)\n\t\tcase nl.VDPA_ATTR_DEV_FEATURES:\n\t\t\tc.Features = native.Uint64(a.Value)\n\t\tcase nl.VDPA_ATTR_DEV_NEGOTIATED_FEATURES:\n\t\t\tc.NegotiatedFeatures = native.Uint64(a.Value)\n\t\t}\n\t}\n}\n\nfunc (s *VDPADevVStats) parseAttributes(attrs vdpaNetlinkMessage) {\n\tfor _, a := range attrs {\n\t\ts.parseIDAttribute(a)\n\t\tswitch a.Attr.Type {\n\t\tcase nl.VDPA_ATTR_DEV_QUEUE_INDEX:\n\t\t\ts.QueueIndex = native.Uint32(a.Value)\n\t\tcase nl.VDPA_ATTR_DEV_VENDOR_ATTR_NAME:\n\t\t\ts.Vendor = append(s.Vendor, VDPADevVStatsVendor{Name: nl.BytesToString(a.Value)})\n\t\tcase nl.VDPA_ATTR_DEV_VENDOR_ATTR_VALUE:\n\t\t\tif len(s.Vendor) == 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\ts.Vendor[len(s.Vendor)-1].Value = native.Uint64(a.Value)\n\t\tcase nl.VDPA_ATTR_DEV_NEGOTIATED_FEATURES:\n\t\t\ts.NegotiatedFeatures = native.Uint64(a.Value)\n\t\t}\n\t}\n}\n\nfunc (d *VDPAMGMTDev) parseAttributes(attrs vdpaNetlinkMessage) {\n\tfor _, a := range attrs {\n\t\tswitch a.Attr.Type {\n\t\tcase nl.VDPA_ATTR_MGMTDEV_BUS_NAME:\n\t\t\td.BusName = nl.BytesToString(a.Value)\n\t\tcase nl.VDPA_ATTR_MGMTDEV_DEV_NAME:\n\t\t\td.DevName = nl.BytesToString(a.Value)\n\t\tcase nl.VDPA_ATTR_MGMTDEV_SUPPORTED_CLASSES:\n\t\t\td.SupportedClasses = native.Uint64(a.Value)\n\t\tcase nl.VDPA_ATTR_DEV_SUPPORTED_FEATURES:\n\t\t\td.SupportedFeatures = native.Uint64(a.Value)\n\t\tcase nl.VDPA_ATTR_DEV_MGMTDEV_MAX_VQS:\n\t\t\td.MaxVQS = native.Uint32(a.Value)\n\t\t}\n\t}\n}\n\nfunc (h *Handle) vdpaRequest(command uint8, extraFlags int, attrs []*nl.RtAttr) ([]vdpaNetlinkMessage, error) {\n\tf, err := h.GenlFamilyGet(nl.VDPA_GENL_NAME)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq := h.newNetlinkRequest(int(f.ID), unix.NLM_F_ACK|extraFlags)\n\treq.AddData(&nl.Genlmsg{\n\t\tCommand: command,\n\t\tVersion: nl.VDPA_GENL_VERSION,\n\t})\n\tfor _, a := range attrs {\n\t\treq.AddData(a)\n\t}\n\n\tresp, executeErr := req.Execute(unix.NETLINK_GENERIC, 0)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\tmessages := make([]vdpaNetlinkMessage, 0, len(resp))\n\tfor _, m := range resp {\n\t\tattrs, err := nl.ParseRouteAttr(m[nl.SizeofGenlmsg:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tmessages = append(messages, attrs)\n\t}\n\treturn messages, executeErr\n}\n\n// dump all devices if dev is nil\n//\n// If dev is nil and the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) vdpaDevGet(dev *string) ([]*VDPADev, error) {\n\tvar extraFlags int\n\tvar attrs []*nl.RtAttr\n\tif dev != nil {\n\t\tattrs = append(attrs, nl.NewRtAttr(nl.VDPA_ATTR_DEV_NAME, nl.ZeroTerminated(*dev)))\n\t} else {\n\t\textraFlags = extraFlags | unix.NLM_F_DUMP\n\t}\n\tmessages, executeErr := h.vdpaRequest(nl.VDPA_CMD_DEV_GET, extraFlags, attrs)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\tdevs := make([]*VDPADev, 0, len(messages))\n\tfor _, m := range messages {\n\t\td := &VDPADev{}\n\t\td.parseAttributes(m)\n\t\tdevs = append(devs, d)\n\t}\n\treturn devs, executeErr\n}\n\n// dump all devices if dev is nil\n//\n// If dev is nil, and the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) vdpaDevConfigGet(dev *string) ([]*VDPADevConfig, error) {\n\tvar extraFlags int\n\tvar attrs []*nl.RtAttr\n\tif dev != nil {\n\t\tattrs = append(attrs, nl.NewRtAttr(nl.VDPA_ATTR_DEV_NAME, nl.ZeroTerminated(*dev)))\n\t} else {\n\t\textraFlags = extraFlags | unix.NLM_F_DUMP\n\t}\n\tmessages, executeErr := h.vdpaRequest(nl.VDPA_CMD_DEV_CONFIG_GET, extraFlags, attrs)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\tcfgs := make([]*VDPADevConfig, 0, len(messages))\n\tfor _, m := range messages {\n\t\tcfg := &VDPADevConfig{}\n\t\tcfg.parseAttributes(m)\n\t\tcfgs = append(cfgs, cfg)\n\t}\n\treturn cfgs, executeErr\n}\n\n// dump all devices if dev is nil\n//\n// If dev is nil and the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) vdpaMGMTDevGet(bus, dev *string) ([]*VDPAMGMTDev, error) {\n\tvar extraFlags int\n\tvar attrs []*nl.RtAttr\n\tif dev != nil {\n\t\tattrs = append(attrs,\n\t\t\tnl.NewRtAttr(nl.VDPA_ATTR_MGMTDEV_DEV_NAME, nl.ZeroTerminated(*dev)),\n\t\t)\n\t\tif bus != nil {\n\t\t\tattrs = append(attrs,\n\t\t\t\tnl.NewRtAttr(nl.VDPA_ATTR_MGMTDEV_BUS_NAME, nl.ZeroTerminated(*bus)),\n\t\t\t)\n\t\t}\n\t} else {\n\t\textraFlags = extraFlags | unix.NLM_F_DUMP\n\t}\n\tmessages, executeErr := h.vdpaRequest(nl.VDPA_CMD_MGMTDEV_GET, extraFlags, attrs)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\tcfgs := make([]*VDPAMGMTDev, 0, len(messages))\n\tfor _, m := range messages {\n\t\tcfg := &VDPAMGMTDev{}\n\t\tcfg.parseAttributes(m)\n\t\tcfgs = append(cfgs, cfg)\n\t}\n\treturn cfgs, executeErr\n}\n\n// VDPANewDev adds new VDPA device\n// Equivalent to: `vdpa dev add name <name> mgmtdev <mgmtBus>/mgmtName [params]`\nfunc (h *Handle) VDPANewDev(name, mgmtBus, mgmtName string, params VDPANewDevParams) error {\n\tattrs := []*nl.RtAttr{\n\t\tnl.NewRtAttr(nl.VDPA_ATTR_DEV_NAME, nl.ZeroTerminated(name)),\n\t\tnl.NewRtAttr(nl.VDPA_ATTR_MGMTDEV_DEV_NAME, nl.ZeroTerminated(mgmtName)),\n\t}\n\tif mgmtBus != \"\" {\n\t\tattrs = append(attrs, nl.NewRtAttr(nl.VDPA_ATTR_MGMTDEV_BUS_NAME, nl.ZeroTerminated(mgmtBus)))\n\t}\n\tif len(params.MACAddr) != 0 {\n\t\tattrs = append(attrs, nl.NewRtAttr(nl.VDPA_ATTR_DEV_NET_CFG_MACADDR, params.MACAddr))\n\t}\n\tif params.MaxVQP > 0 {\n\t\tattrs = append(attrs, nl.NewRtAttr(nl.VDPA_ATTR_DEV_NET_CFG_MAX_VQP, nl.Uint16Attr(params.MaxVQP)))\n\t}\n\tif params.MTU > 0 {\n\t\tattrs = append(attrs, nl.NewRtAttr(nl.VDPA_ATTR_DEV_NET_CFG_MTU, nl.Uint16Attr(params.MTU)))\n\t}\n\tif params.Features > 0 {\n\t\tattrs = append(attrs, nl.NewRtAttr(nl.VDPA_ATTR_DEV_FEATURES, nl.Uint64Attr(params.Features)))\n\t}\n\t_, err := h.vdpaRequest(nl.VDPA_CMD_DEV_NEW, 0, attrs)\n\treturn err\n}\n\n// VDPADelDev removes VDPA device\n// Equivalent to: `vdpa dev del <name>`\nfunc (h *Handle) VDPADelDev(name string) error {\n\t_, err := h.vdpaRequest(nl.VDPA_CMD_DEV_DEL, 0, []*nl.RtAttr{\n\t\tnl.NewRtAttr(nl.VDPA_ATTR_DEV_NAME, nl.ZeroTerminated(name))})\n\treturn err\n}\n\n// VDPAGetDevList returns list of VDPA devices\n// Equivalent to: `vdpa dev show`\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) VDPAGetDevList() ([]*VDPADev, error) {\n\treturn h.vdpaDevGet(nil)\n}\n\n// VDPAGetDevByName returns VDPA device selected by name\n// Equivalent to: `vdpa dev show <name>`\nfunc (h *Handle) VDPAGetDevByName(name string) (*VDPADev, error) {\n\tdevs, err := h.vdpaDevGet(&name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(devs) == 0 {\n\t\treturn nil, fmt.Errorf(\"device not found\")\n\t}\n\treturn devs[0], nil\n}\n\n// VDPAGetDevConfigList returns list of VDPA devices configurations\n// Equivalent to: `vdpa dev config show`\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) VDPAGetDevConfigList() ([]*VDPADevConfig, error) {\n\treturn h.vdpaDevConfigGet(nil)\n}\n\n// VDPAGetDevConfigByName returns VDPA device configuration selected by name\n// Equivalent to: `vdpa dev config show <name>`\nfunc (h *Handle) VDPAGetDevConfigByName(name string) (*VDPADevConfig, error) {\n\tcfgs, err := h.vdpaDevConfigGet(&name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(cfgs) == 0 {\n\t\treturn nil, fmt.Errorf(\"configuration not found\")\n\t}\n\treturn cfgs[0], nil\n}\n\n// VDPAGetDevVStats returns vstats for VDPA device\n// Equivalent to: `vdpa dev vstats show <name> qidx <queueIndex>`\nfunc (h *Handle) VDPAGetDevVStats(name string, queueIndex uint32) (*VDPADevVStats, error) {\n\tmessages, err := h.vdpaRequest(nl.VDPA_CMD_DEV_VSTATS_GET, 0, []*nl.RtAttr{\n\t\tnl.NewRtAttr(nl.VDPA_ATTR_DEV_NAME, nl.ZeroTerminated(name)),\n\t\tnl.NewRtAttr(nl.VDPA_ATTR_DEV_QUEUE_INDEX, nl.Uint32Attr(queueIndex)),\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(messages) == 0 {\n\t\treturn nil, fmt.Errorf(\"stats not found\")\n\t}\n\tstats := &VDPADevVStats{}\n\tstats.parseAttributes(messages[0])\n\treturn stats, nil\n}\n\n// VDPAGetMGMTDevList returns list of mgmt devices\n// Equivalent to: `vdpa mgmtdev show`\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) VDPAGetMGMTDevList() ([]*VDPAMGMTDev, error) {\n\treturn h.vdpaMGMTDevGet(nil, nil)\n}\n\n// VDPAGetMGMTDevByBusAndName returns mgmt devices selected by bus and name\n// Equivalent to: `vdpa mgmtdev show <bus>/<name>`\nfunc (h *Handle) VDPAGetMGMTDevByBusAndName(bus, name string) (*VDPAMGMTDev, error) {\n\tvar busPtr *string\n\tif bus != \"\" {\n\t\tbusPtr = &bus\n\t}\n\tdevs, err := h.vdpaMGMTDevGet(busPtr, &name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(devs) == 0 {\n\t\treturn nil, fmt.Errorf(\"mgmtdev not found\")\n\t}\n\treturn devs[0], nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/virtio.go",
    "content": "package netlink\n\n// features for virtio net\nconst (\n\tVIRTIO_NET_F_CSUM                = 0  // Host handles pkts w/ partial csum\n\tVIRTIO_NET_F_GUEST_CSUM          = 1  // Guest handles pkts w/ partial csum\n\tVIRTIO_NET_F_CTRL_GUEST_OFFLOADS = 2  // Dynamic offload configuration.\n\tVIRTIO_NET_F_MTU                 = 3  // Initial MTU advice\n\tVIRTIO_NET_F_MAC                 = 5  // Host has given MAC address.\n\tVIRTIO_NET_F_GUEST_TSO4          = 7  // Guest can handle TSOv4 in.\n\tVIRTIO_NET_F_GUEST_TSO6          = 8  // Guest can handle TSOv6 in.\n\tVIRTIO_NET_F_GUEST_ECN           = 9  // Guest can handle TSO[6] w/ ECN in.\n\tVIRTIO_NET_F_GUEST_UFO           = 10 // Guest can handle UFO in.\n\tVIRTIO_NET_F_HOST_TSO4           = 11 // Host can handle TSOv4 in.\n\tVIRTIO_NET_F_HOST_TSO6           = 12 // Host can handle TSOv6 in.\n\tVIRTIO_NET_F_HOST_ECN            = 13 // Host can handle TSO[6] w/ ECN in.\n\tVIRTIO_NET_F_HOST_UFO            = 14 // Host can handle UFO in.\n\tVIRTIO_NET_F_MRG_RXBUF           = 15 // Host can merge receive buffers.\n\tVIRTIO_NET_F_STATUS              = 16 // virtio_net_config.status available\n\tVIRTIO_NET_F_CTRL_VQ             = 17 // Control channel available\n\tVIRTIO_NET_F_CTRL_RX             = 18 // Control channel RX mode support\n\tVIRTIO_NET_F_CTRL_VLAN           = 19 // Control channel VLAN filtering\n\tVIRTIO_NET_F_CTRL_RX_EXTRA       = 20 // Extra RX mode control support\n\tVIRTIO_NET_F_GUEST_ANNOUNCE      = 21 // Guest can announce device on the* network\n\tVIRTIO_NET_F_MQ                  = 22 // Device supports Receive Flow Steering\n\tVIRTIO_NET_F_CTRL_MAC_ADDR       = 23 // Set MAC address\n\tVIRTIO_NET_F_VQ_NOTF_COAL        = 52 // Device supports virtqueue notification coalescing\n\tVIRTIO_NET_F_NOTF_COAL           = 53 // Device supports notifications coalescing\n\tVIRTIO_NET_F_GUEST_USO4          = 54 // Guest can handle USOv4 in.\n\tVIRTIO_NET_F_GUEST_USO6          = 55 // Guest can handle USOv6 in.\n\tVIRTIO_NET_F_HOST_USO            = 56 // Host can handle USO in.\n\tVIRTIO_NET_F_HASH_REPORT         = 57 // Supports hash report\n\tVIRTIO_NET_F_GUEST_HDRLEN        = 59 // Guest provides the exact hdr_len value.\n\tVIRTIO_NET_F_RSS                 = 60 // Supports RSS RX steering\n\tVIRTIO_NET_F_RSC_EXT             = 61 // extended coalescing info\n\tVIRTIO_NET_F_STANDBY             = 62 // Act as standby for another device with the same MAC.\n\tVIRTIO_NET_F_SPEED_DUPLEX        = 63 // Device set linkspeed and duplex\n\tVIRTIO_NET_F_GSO                 = 6  // Host handles pkts any GSO type\n)\n\n// virtio net status\nconst (\n\tVIRTIO_NET_S_LINK_UP  = 1 // Link is up\n\tVIRTIO_NET_S_ANNOUNCE = 2 // Announcement is needed\n)\n\n// virtio config\nconst (\n\t// Do we get callbacks when the ring is completely used, even if we've\n\t// suppressed them?\n\tVIRTIO_F_NOTIFY_ON_EMPTY = 24\n\t// Can the device handle any descriptor layout?\n\tVIRTIO_F_ANY_LAYOUT = 27\n\t// v1.0 compliant\n\tVIRTIO_F_VERSION_1 = 32\n\t// If clear - device has the platform DMA (e.g. IOMMU) bypass quirk feature.\n\t// If set - use platform DMA tools to access the memory.\n\t// Note the reverse polarity (compared to most other features),\n\t// this is for compatibility with legacy systems.\n\tVIRTIO_F_ACCESS_PLATFORM = 33\n\t// Legacy name for VIRTIO_F_ACCESS_PLATFORM (for compatibility with old userspace)\n\tVIRTIO_F_IOMMU_PLATFORM = VIRTIO_F_ACCESS_PLATFORM\n\t// This feature indicates support for the packed virtqueue layout.\n\tVIRTIO_F_RING_PACKED = 34\n\t// Inorder feature indicates that all buffers are used by the device\n\t// in the same order in which they have been made available.\n\tVIRTIO_F_IN_ORDER = 35\n\t// This feature indicates that memory accesses by the driver and the\n\t// device are ordered in a way described by the platform.\n\tVIRTIO_F_ORDER_PLATFORM = 36\n\t// Does the device support Single Root I/O Virtualization?\n\tVIRTIO_F_SR_IOV = 37\n\t// This feature indicates that the driver passes extra data (besides\n\t// identifying the virtqueue) in its device notifications.\n\tVIRTIO_F_NOTIFICATION_DATA = 38\n\t// This feature indicates that the driver uses the data provided by the device\n\t// as a virtqueue identifier in available buffer notifications.\n\tVIRTIO_F_NOTIF_CONFIG_DATA = 39\n\t// This feature indicates that the driver can reset a queue individually.\n\tVIRTIO_F_RING_RESET = 40\n)\n\n// virtio device ids\nconst (\n\tVIRTIO_ID_NET            = 1  // virtio net\n\tVIRTIO_ID_BLOCK          = 2  // virtio block\n\tVIRTIO_ID_CONSOLE        = 3  // virtio console\n\tVIRTIO_ID_RNG            = 4  // virtio rng\n\tVIRTIO_ID_BALLOON        = 5  // virtio balloon\n\tVIRTIO_ID_IOMEM          = 6  // virtio ioMemory\n\tVIRTIO_ID_RPMSG          = 7  // virtio remote processor messaging\n\tVIRTIO_ID_SCSI           = 8  // virtio scsi\n\tVIRTIO_ID_9P             = 9  // 9p virtio console\n\tVIRTIO_ID_MAC80211_WLAN  = 10 // virtio WLAN MAC\n\tVIRTIO_ID_RPROC_SERIAL   = 11 // virtio remoteproc serial link\n\tVIRTIO_ID_CAIF           = 12 // Virtio caif\n\tVIRTIO_ID_MEMORY_BALLOON = 13 // virtio memory balloon\n\tVIRTIO_ID_GPU            = 16 // virtio GPU\n\tVIRTIO_ID_CLOCK          = 17 // virtio clock/timer\n\tVIRTIO_ID_INPUT          = 18 // virtio input\n\tVIRTIO_ID_VSOCK          = 19 // virtio vsock transport\n\tVIRTIO_ID_CRYPTO         = 20 // virtio crypto\n\tVIRTIO_ID_SIGNAL_DIST    = 21 // virtio signal distribution device\n\tVIRTIO_ID_PSTORE         = 22 // virtio pstore device\n\tVIRTIO_ID_IOMMU          = 23 // virtio IOMMU\n\tVIRTIO_ID_MEM            = 24 // virtio mem\n\tVIRTIO_ID_SOUND          = 25 // virtio sound\n\tVIRTIO_ID_FS             = 26 // virtio filesystem\n\tVIRTIO_ID_PMEM           = 27 // virtio pmem\n\tVIRTIO_ID_RPMB           = 28 // virtio rpmb\n\tVIRTIO_ID_MAC80211_HWSIM = 29 // virtio mac80211-hwsim\n\tVIRTIO_ID_VIDEO_ENCODER  = 30 // virtio video encoder\n\tVIRTIO_ID_VIDEO_DECODER  = 31 // virtio video decoder\n\tVIRTIO_ID_SCMI           = 32 // virtio SCMI\n\tVIRTIO_ID_NITRO_SEC_MOD  = 33 // virtio nitro secure module\n\tVIRTIO_ID_I2C_ADAPTER    = 34 // virtio i2c adapter\n\tVIRTIO_ID_WATCHDOG       = 35 // virtio watchdog\n\tVIRTIO_ID_CAN            = 36 // virtio can\n\tVIRTIO_ID_DMABUF         = 37 // virtio dmabuf\n\tVIRTIO_ID_PARAM_SERV     = 38 // virtio parameter server\n\tVIRTIO_ID_AUDIO_POLICY   = 39 // virtio audio policy\n\tVIRTIO_ID_BT             = 40 // virtio bluetooth\n\tVIRTIO_ID_GPIO           = 41 // virtio gpio\n\t// Virtio Transitional IDs\n\tVIRTIO_TRANS_ID_NET     = 0x1000 // transitional virtio net\n\tVIRTIO_TRANS_ID_BLOCK   = 0x1001 // transitional virtio block\n\tVIRTIO_TRANS_ID_BALLOON = 0x1002 // transitional virtio balloon\n\tVIRTIO_TRANS_ID_CONSOLE = 0x1003 // transitional virtio console\n\tVIRTIO_TRANS_ID_SCSI    = 0x1004 // transitional virtio SCSI\n\tVIRTIO_TRANS_ID_RNG     = 0x1005 // transitional virtio rng\n\tVIRTIO_TRANS_ID_9P      = 0x1009 // transitional virtio 9p console\n)\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/xdp_diag.go",
    "content": "package netlink\n\nimport \"github.com/vishvananda/netlink/nl\"\n\nconst SOCK_ANY_COOKIE = uint64(nl.TCPDIAG_NOCOOKIE)<<32 + uint64(nl.TCPDIAG_NOCOOKIE)\n\n// XDP diagnosis show flag constants to request particular information elements.\nconst (\n\tXDP_SHOW_INFO = 1 << iota\n\tXDP_SHOW_RING_CFG\n\tXDP_SHOW_UMEM\n\tXDP_SHOW_MEMINFO\n\tXDP_SHOW_STATS\n)\n\n// XDP diag element constants\nconst (\n\tXDP_DIAG_NONE                 = iota\n\tXDP_DIAG_INFO                 // when using XDP_SHOW_INFO\n\tXDP_DIAG_UID                  // when using XDP_SHOW_INFO\n\tXDP_DIAG_RX_RING              // when using XDP_SHOW_RING_CFG\n\tXDP_DIAG_TX_RING              // when using XDP_SHOW_RING_CFG\n\tXDP_DIAG_UMEM                 // when using XDP_SHOW_UMEM\n\tXDP_DIAG_UMEM_FILL_RING       // when using XDP_SHOW_UMEM\n\tXDP_DIAG_UMEM_COMPLETION_RING // when using XDP_SHOW_UMEM\n\tXDP_DIAG_MEMINFO              // when using XDP_SHOW_MEMINFO\n\tXDP_DIAG_STATS                // when using XDP_SHOW_STATS\n)\n\n// https://elixir.bootlin.com/linux/v6.2/source/include/uapi/linux/xdp_diag.h#L21\ntype XDPDiagInfoResp struct {\n\tXDPDiagMsg *XDPSocket\n\tXDPInfo    *XDPInfo\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/xdp_linux.go",
    "content": "package netlink\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n)\n\nconst (\n\txdrDiagUmemLen  = 8 + 8*4\n\txdrDiagStatsLen = 6 * 8\n)\n\nfunc (x *XDPDiagUmem) deserialize(b []byte) error {\n\tif len(b) < xdrDiagUmemLen {\n\t\treturn fmt.Errorf(\"XDP umem diagnosis data short read (%d); want %d\", len(b), xdrDiagUmemLen)\n\t}\n\n\trb := bytes.NewBuffer(b)\n\tx.Size = native.Uint64(rb.Next(8))\n\tx.ID = native.Uint32(rb.Next(4))\n\tx.NumPages = native.Uint32(rb.Next(4))\n\tx.ChunkSize = native.Uint32(rb.Next(4))\n\tx.Headroom = native.Uint32(rb.Next(4))\n\tx.Ifindex = native.Uint32(rb.Next(4))\n\tx.QueueID = native.Uint32(rb.Next(4))\n\tx.Flags = native.Uint32(rb.Next(4))\n\tx.Refs = native.Uint32(rb.Next(4))\n\n\treturn nil\n}\n\nfunc (x *XDPDiagStats) deserialize(b []byte) error {\n\tif len(b) < xdrDiagStatsLen {\n\t\treturn fmt.Errorf(\"XDP diagnosis statistics short read (%d); want %d\", len(b), xdrDiagStatsLen)\n\t}\n\n\trb := bytes.NewBuffer(b)\n\tx.RxDropped = native.Uint64(rb.Next(8))\n\tx.RxInvalid = native.Uint64(rb.Next(8))\n\tx.RxFull = native.Uint64(rb.Next(8))\n\tx.FillRingEmpty = native.Uint64(rb.Next(8))\n\tx.TxInvalid = native.Uint64(rb.Next(8))\n\tx.TxRingEmpty = native.Uint64(rb.Next(8))\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/xfrm_linux.go",
    "content": "package netlink\n\nimport (\n\t\"fmt\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// Proto is an enum representing an ipsec protocol.\ntype Proto uint8\n\nconst (\n\tXFRM_PROTO_ROUTE2    Proto = unix.IPPROTO_ROUTING\n\tXFRM_PROTO_ESP       Proto = unix.IPPROTO_ESP\n\tXFRM_PROTO_AH        Proto = unix.IPPROTO_AH\n\tXFRM_PROTO_HAO       Proto = unix.IPPROTO_DSTOPTS\n\tXFRM_PROTO_COMP      Proto = unix.IPPROTO_COMP\n\tXFRM_PROTO_IPSEC_ANY Proto = unix.IPPROTO_RAW\n)\n\nfunc (p Proto) String() string {\n\tswitch p {\n\tcase XFRM_PROTO_ROUTE2:\n\t\treturn \"route2\"\n\tcase XFRM_PROTO_ESP:\n\t\treturn \"esp\"\n\tcase XFRM_PROTO_AH:\n\t\treturn \"ah\"\n\tcase XFRM_PROTO_HAO:\n\t\treturn \"hao\"\n\tcase XFRM_PROTO_COMP:\n\t\treturn \"comp\"\n\tcase XFRM_PROTO_IPSEC_ANY:\n\t\treturn \"ipsec-any\"\n\t}\n\treturn fmt.Sprintf(\"%d\", p)\n}\n\n// Mode is an enum representing an ipsec transport.\ntype Mode uint8\n\nconst (\n\tXFRM_MODE_TRANSPORT Mode = iota\n\tXFRM_MODE_TUNNEL\n\tXFRM_MODE_ROUTEOPTIMIZATION\n\tXFRM_MODE_IN_TRIGGER\n\tXFRM_MODE_BEET\n\tXFRM_MODE_MAX\n)\n\n// SADir is an enum representing an ipsec template direction.\ntype SADir uint8\n\nconst (\n\tXFRM_SA_DIR_IN SADir = iota + 1\n\tXFRM_SA_DIR_OUT\n)\n\nfunc (m Mode) String() string {\n\tswitch m {\n\tcase XFRM_MODE_TRANSPORT:\n\t\treturn \"transport\"\n\tcase XFRM_MODE_TUNNEL:\n\t\treturn \"tunnel\"\n\tcase XFRM_MODE_ROUTEOPTIMIZATION:\n\t\treturn \"ro\"\n\tcase XFRM_MODE_IN_TRIGGER:\n\t\treturn \"in_trigger\"\n\tcase XFRM_MODE_BEET:\n\t\treturn \"beet\"\n\t}\n\treturn fmt.Sprintf(\"%d\", m)\n}\n\n// XfrmMark represents the mark associated to the state or policy\ntype XfrmMark struct {\n\tValue uint32\n\tMask  uint32\n}\n\nfunc (m *XfrmMark) String() string {\n\treturn fmt.Sprintf(\"(0x%x,0x%x)\", m.Value, m.Mask)\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go",
    "content": "package netlink\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"github.com/vishvananda/netns\"\n\t\"golang.org/x/sys/unix\"\n)\n\ntype XfrmMsg interface {\n\tType() nl.XfrmMsgType\n}\n\ntype XfrmMsgExpire struct {\n\tXfrmState *XfrmState\n\tHard      bool\n}\n\nfunc (ue *XfrmMsgExpire) Type() nl.XfrmMsgType {\n\treturn nl.XFRM_MSG_EXPIRE\n}\n\nfunc parseXfrmMsgExpire(b []byte) *XfrmMsgExpire {\n\tvar e XfrmMsgExpire\n\n\tmsg := nl.DeserializeXfrmUserExpire(b)\n\te.XfrmState = xfrmStateFromXfrmUsersaInfo(&msg.XfrmUsersaInfo)\n\te.Hard = msg.Hard == 1\n\n\treturn &e\n}\n\nfunc XfrmMonitor(ch chan<- XfrmMsg, done <-chan struct{}, errorChan chan<- error,\n\ttypes ...nl.XfrmMsgType) error {\n\n\tgroups, err := xfrmMcastGroups(types)\n\tif err != nil {\n\t\treturn nil\n\t}\n\ts, err := nl.SubscribeAt(netns.None(), netns.None(), unix.NETLINK_XFRM, groups...)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif done != nil {\n\t\tgo func() {\n\t\t\t<-done\n\t\t\ts.Close()\n\t\t}()\n\n\t}\n\n\tgo func() {\n\t\tdefer close(ch)\n\t\tfor {\n\t\t\tmsgs, from, err := s.Receive()\n\t\t\tif err != nil {\n\t\t\t\terrorChan <- err\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif from.Pid != nl.PidKernel {\n\t\t\t\terrorChan <- fmt.Errorf(\"Wrong sender portid %d, expected %d\", from.Pid, nl.PidKernel)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tfor _, m := range msgs {\n\t\t\t\tswitch m.Header.Type {\n\t\t\t\tcase nl.XFRM_MSG_EXPIRE:\n\t\t\t\t\tch <- parseXfrmMsgExpire(m.Data)\n\t\t\t\tdefault:\n\t\t\t\t\terrorChan <- fmt.Errorf(\"unsupported msg type: %x\", m.Header.Type)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}()\n\n\treturn nil\n}\n\nfunc xfrmMcastGroups(types []nl.XfrmMsgType) ([]uint, error) {\n\tgroups := make([]uint, 0)\n\n\tif len(types) == 0 {\n\t\treturn nil, fmt.Errorf(\"no xfrm msg type specified\")\n\t}\n\n\tfor _, t := range types {\n\t\tvar group uint\n\n\t\tswitch t {\n\t\tcase nl.XFRM_MSG_EXPIRE:\n\t\t\tgroup = nl.XFRMNLGRP_EXPIRE\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unsupported group: %x\", t)\n\t\t}\n\n\t\tgroups = append(groups, group)\n\t}\n\n\treturn groups, nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go",
    "content": "package netlink\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// Dir is an enum representing an ipsec template direction.\ntype Dir uint8\n\nconst (\n\tXFRM_DIR_IN Dir = iota\n\tXFRM_DIR_OUT\n\tXFRM_DIR_FWD\n\tXFRM_SOCKET_IN\n\tXFRM_SOCKET_OUT\n\tXFRM_SOCKET_FWD\n)\n\nfunc (d Dir) String() string {\n\tswitch d {\n\tcase XFRM_DIR_IN:\n\t\treturn \"dir in\"\n\tcase XFRM_DIR_OUT:\n\t\treturn \"dir out\"\n\tcase XFRM_DIR_FWD:\n\t\treturn \"dir fwd\"\n\tcase XFRM_SOCKET_IN:\n\t\treturn \"socket in\"\n\tcase XFRM_SOCKET_OUT:\n\t\treturn \"socket out\"\n\tcase XFRM_SOCKET_FWD:\n\t\treturn \"socket fwd\"\n\t}\n\treturn fmt.Sprintf(\"socket %d\", d-XFRM_SOCKET_IN)\n}\n\n// PolicyAction is an enum representing an ipsec policy action.\ntype PolicyAction uint8\n\nconst (\n\tXFRM_POLICY_ALLOW PolicyAction = 0\n\tXFRM_POLICY_BLOCK PolicyAction = 1\n)\n\nfunc (a PolicyAction) String() string {\n\tswitch a {\n\tcase XFRM_POLICY_ALLOW:\n\t\treturn \"allow\"\n\tcase XFRM_POLICY_BLOCK:\n\t\treturn \"block\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"action %d\", a)\n\t}\n}\n\n// XfrmPolicyTmpl encapsulates a rule for the base addresses of an ipsec\n// policy. These rules are matched with XfrmState to determine encryption\n// and authentication algorithms.\ntype XfrmPolicyTmpl struct {\n\tDst      net.IP\n\tSrc      net.IP\n\tProto    Proto\n\tMode     Mode\n\tSpi      int\n\tReqid    int\n\tOptional int\n}\n\nfunc (t XfrmPolicyTmpl) String() string {\n\treturn fmt.Sprintf(\"{Dst: %v, Src: %v, Proto: %s, Mode: %s, Spi: 0x%x, Reqid: 0x%x}\",\n\t\tt.Dst, t.Src, t.Proto, t.Mode, t.Spi, t.Reqid)\n}\n\n// XfrmPolicy represents an ipsec policy. It represents the overlay network\n// and has a list of XfrmPolicyTmpls representing the base addresses of\n// the policy.\ntype XfrmPolicy struct {\n\tDst      *net.IPNet\n\tSrc      *net.IPNet\n\tProto    Proto\n\tDstPort  int\n\tSrcPort  int\n\tDir      Dir\n\tPriority int\n\tIndex    int\n\tAction   PolicyAction\n\tIfindex  int\n\tIfid     int\n\tMark     *XfrmMark\n\tTmpls    []XfrmPolicyTmpl\n}\n\nfunc (p XfrmPolicy) String() string {\n\treturn fmt.Sprintf(\"{Dst: %v, Src: %v, Proto: %s, DstPort: %d, SrcPort: %d, Dir: %s, Priority: %d, Index: %d, Action: %s, Ifindex: %d, Ifid: %d, Mark: %s, Tmpls: %s}\",\n\t\tp.Dst, p.Src, p.Proto, p.DstPort, p.SrcPort, p.Dir, p.Priority, p.Index, p.Action, p.Ifindex, p.Ifid, p.Mark, p.Tmpls)\n}\n\nfunc selFromPolicy(sel *nl.XfrmSelector, policy *XfrmPolicy) {\n\tsel.Family = uint16(nl.FAMILY_V4)\n\tif policy.Dst != nil {\n\t\tsel.Family = uint16(nl.GetIPFamily(policy.Dst.IP))\n\t\tsel.Daddr.FromIP(policy.Dst.IP)\n\t\tprefixlenD, _ := policy.Dst.Mask.Size()\n\t\tsel.PrefixlenD = uint8(prefixlenD)\n\t}\n\tif policy.Src != nil {\n\t\tsel.Saddr.FromIP(policy.Src.IP)\n\t\tprefixlenS, _ := policy.Src.Mask.Size()\n\t\tsel.PrefixlenS = uint8(prefixlenS)\n\t}\n\tsel.Proto = uint8(policy.Proto)\n\tsel.Dport = nl.Swap16(uint16(policy.DstPort))\n\tsel.Sport = nl.Swap16(uint16(policy.SrcPort))\n\tif sel.Dport != 0 {\n\t\tsel.DportMask = ^uint16(0)\n\t}\n\tif sel.Sport != 0 {\n\t\tsel.SportMask = ^uint16(0)\n\t}\n\tsel.Ifindex = int32(policy.Ifindex)\n}\n\n// XfrmPolicyAdd will add an xfrm policy to the system.\n// Equivalent to: `ip xfrm policy add $policy`\nfunc XfrmPolicyAdd(policy *XfrmPolicy) error {\n\treturn pkgHandle.XfrmPolicyAdd(policy)\n}\n\n// XfrmPolicyAdd will add an xfrm policy to the system.\n// Equivalent to: `ip xfrm policy add $policy`\nfunc (h *Handle) XfrmPolicyAdd(policy *XfrmPolicy) error {\n\treturn h.xfrmPolicyAddOrUpdate(policy, nl.XFRM_MSG_NEWPOLICY)\n}\n\n// XfrmPolicyUpdate will update an xfrm policy to the system.\n// Equivalent to: `ip xfrm policy update $policy`\nfunc XfrmPolicyUpdate(policy *XfrmPolicy) error {\n\treturn pkgHandle.XfrmPolicyUpdate(policy)\n}\n\n// XfrmPolicyUpdate will update an xfrm policy to the system.\n// Equivalent to: `ip xfrm policy update $policy`\nfunc (h *Handle) XfrmPolicyUpdate(policy *XfrmPolicy) error {\n\treturn h.xfrmPolicyAddOrUpdate(policy, nl.XFRM_MSG_UPDPOLICY)\n}\n\nfunc (h *Handle) xfrmPolicyAddOrUpdate(policy *XfrmPolicy, nlProto int) error {\n\treq := h.newNetlinkRequest(nlProto, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)\n\n\tmsg := &nl.XfrmUserpolicyInfo{}\n\tselFromPolicy(&msg.Sel, policy)\n\tmsg.Priority = uint32(policy.Priority)\n\tmsg.Index = uint32(policy.Index)\n\tmsg.Dir = uint8(policy.Dir)\n\tmsg.Action = uint8(policy.Action)\n\tmsg.Lft.SoftByteLimit = nl.XFRM_INF\n\tmsg.Lft.HardByteLimit = nl.XFRM_INF\n\tmsg.Lft.SoftPacketLimit = nl.XFRM_INF\n\tmsg.Lft.HardPacketLimit = nl.XFRM_INF\n\treq.AddData(msg)\n\n\ttmplData := make([]byte, nl.SizeofXfrmUserTmpl*len(policy.Tmpls))\n\tfor i, tmpl := range policy.Tmpls {\n\t\tstart := i * nl.SizeofXfrmUserTmpl\n\t\tuserTmpl := nl.DeserializeXfrmUserTmpl(tmplData[start : start+nl.SizeofXfrmUserTmpl])\n\t\tuserTmpl.XfrmId.Daddr.FromIP(tmpl.Dst)\n\t\tuserTmpl.Saddr.FromIP(tmpl.Src)\n\t\tuserTmpl.Family = uint16(nl.GetIPFamily(tmpl.Dst))\n\t\tuserTmpl.XfrmId.Proto = uint8(tmpl.Proto)\n\t\tuserTmpl.XfrmId.Spi = nl.Swap32(uint32(tmpl.Spi))\n\t\tuserTmpl.Mode = uint8(tmpl.Mode)\n\t\tuserTmpl.Reqid = uint32(tmpl.Reqid)\n\t\tuserTmpl.Optional = uint8(tmpl.Optional)\n\t\tuserTmpl.Aalgos = ^uint32(0)\n\t\tuserTmpl.Ealgos = ^uint32(0)\n\t\tuserTmpl.Calgos = ^uint32(0)\n\t}\n\tif len(tmplData) > 0 {\n\t\ttmpls := nl.NewRtAttr(nl.XFRMA_TMPL, tmplData)\n\t\treq.AddData(tmpls)\n\t}\n\tif policy.Mark != nil {\n\t\tout := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(policy.Mark))\n\t\treq.AddData(out)\n\t}\n\n\tif policy.Ifid != 0 {\n\t\tifId := nl.NewRtAttr(nl.XFRMA_IF_ID, nl.Uint32Attr(uint32(policy.Ifid)))\n\t\treq.AddData(ifId)\n\t}\n\n\t_, err := req.Execute(unix.NETLINK_XFRM, 0)\n\treturn err\n}\n\n// XfrmPolicyDel will delete an xfrm policy from the system. Note that\n// the Tmpls are ignored when matching the policy to delete.\n// Equivalent to: `ip xfrm policy del $policy`\nfunc XfrmPolicyDel(policy *XfrmPolicy) error {\n\treturn pkgHandle.XfrmPolicyDel(policy)\n}\n\n// XfrmPolicyDel will delete an xfrm policy from the system. Note that\n// the Tmpls are ignored when matching the policy to delete.\n// Equivalent to: `ip xfrm policy del $policy`\nfunc (h *Handle) XfrmPolicyDel(policy *XfrmPolicy) error {\n\t_, err := h.xfrmPolicyGetOrDelete(policy, nl.XFRM_MSG_DELPOLICY)\n\treturn err\n}\n\n// XfrmPolicyList gets a list of xfrm policies in the system.\n// Equivalent to: `ip xfrm policy show`.\n// The list can be filtered by ip family.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc XfrmPolicyList(family int) ([]XfrmPolicy, error) {\n\treturn pkgHandle.XfrmPolicyList(family)\n}\n\n// XfrmPolicyList gets a list of xfrm policies in the system.\n// Equivalent to: `ip xfrm policy show`.\n// The list can be filtered by ip family.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) XfrmPolicyList(family int) ([]XfrmPolicy, error) {\n\treq := h.newNetlinkRequest(nl.XFRM_MSG_GETPOLICY, unix.NLM_F_DUMP)\n\n\tmsg := nl.NewIfInfomsg(family)\n\treq.AddData(msg)\n\n\tmsgs, executeErr := req.Execute(unix.NETLINK_XFRM, nl.XFRM_MSG_NEWPOLICY)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\tvar res []XfrmPolicy\n\tfor _, m := range msgs {\n\t\tif policy, err := parseXfrmPolicy(m, family); err == nil {\n\t\t\tres = append(res, *policy)\n\t\t} else if err == familyError {\n\t\t\tcontinue\n\t\t} else {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn res, executeErr\n}\n\n// XfrmPolicyGet gets a the policy described by the index or selector, if found.\n// Equivalent to: `ip xfrm policy get { SELECTOR | index INDEX } dir DIR [ctx CTX ] [ mark MARK [ mask MASK ] ] [ ptype PTYPE ]`.\nfunc XfrmPolicyGet(policy *XfrmPolicy) (*XfrmPolicy, error) {\n\treturn pkgHandle.XfrmPolicyGet(policy)\n}\n\n// XfrmPolicyGet gets a the policy described by the index or selector, if found.\n// Equivalent to: `ip xfrm policy get { SELECTOR | index INDEX } dir DIR [ctx CTX ] [ mark MARK [ mask MASK ] ] [ ptype PTYPE ]`.\nfunc (h *Handle) XfrmPolicyGet(policy *XfrmPolicy) (*XfrmPolicy, error) {\n\treturn h.xfrmPolicyGetOrDelete(policy, nl.XFRM_MSG_GETPOLICY)\n}\n\n// XfrmPolicyFlush will flush the policies on the system.\n// Equivalent to: `ip xfrm policy flush`\nfunc XfrmPolicyFlush() error {\n\treturn pkgHandle.XfrmPolicyFlush()\n}\n\n// XfrmPolicyFlush will flush the policies on the system.\n// Equivalent to: `ip xfrm policy flush`\nfunc (h *Handle) XfrmPolicyFlush() error {\n\treq := h.newNetlinkRequest(nl.XFRM_MSG_FLUSHPOLICY, unix.NLM_F_ACK)\n\t_, err := req.Execute(unix.NETLINK_XFRM, 0)\n\treturn err\n}\n\nfunc (h *Handle) xfrmPolicyGetOrDelete(policy *XfrmPolicy, nlProto int) (*XfrmPolicy, error) {\n\treq := h.newNetlinkRequest(nlProto, unix.NLM_F_ACK)\n\n\tmsg := &nl.XfrmUserpolicyId{}\n\tselFromPolicy(&msg.Sel, policy)\n\tmsg.Index = uint32(policy.Index)\n\tmsg.Dir = uint8(policy.Dir)\n\treq.AddData(msg)\n\n\tif policy.Mark != nil {\n\t\tout := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(policy.Mark))\n\t\treq.AddData(out)\n\t}\n\n\tif policy.Ifid != 0 {\n\t\tifId := nl.NewRtAttr(nl.XFRMA_IF_ID, nl.Uint32Attr(uint32(policy.Ifid)))\n\t\treq.AddData(ifId)\n\t}\n\n\tresType := nl.XFRM_MSG_NEWPOLICY\n\tif nlProto == nl.XFRM_MSG_DELPOLICY {\n\t\tresType = 0\n\t}\n\n\tmsgs, err := req.Execute(unix.NETLINK_XFRM, uint16(resType))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif nlProto == nl.XFRM_MSG_DELPOLICY {\n\t\treturn nil, err\n\t}\n\n\treturn parseXfrmPolicy(msgs[0], FAMILY_ALL)\n}\n\nfunc parseXfrmPolicy(m []byte, family int) (*XfrmPolicy, error) {\n\tmsg := nl.DeserializeXfrmUserpolicyInfo(m)\n\n\t// This is mainly for the policy dump\n\tif family != FAMILY_ALL && family != int(msg.Sel.Family) {\n\t\treturn nil, familyError\n\t}\n\n\tvar policy XfrmPolicy\n\n\tpolicy.Dst = msg.Sel.Daddr.ToIPNet(msg.Sel.PrefixlenD, uint16(family))\n\tpolicy.Src = msg.Sel.Saddr.ToIPNet(msg.Sel.PrefixlenS, uint16(family))\n\tpolicy.Proto = Proto(msg.Sel.Proto)\n\tpolicy.DstPort = int(nl.Swap16(msg.Sel.Dport))\n\tpolicy.SrcPort = int(nl.Swap16(msg.Sel.Sport))\n\tpolicy.Ifindex = int(msg.Sel.Ifindex)\n\tpolicy.Priority = int(msg.Priority)\n\tpolicy.Index = int(msg.Index)\n\tpolicy.Dir = Dir(msg.Dir)\n\tpolicy.Action = PolicyAction(msg.Action)\n\n\tattrs, err := nl.ParseRouteAttr(m[msg.Len():])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, attr := range attrs {\n\t\tswitch attr.Attr.Type {\n\t\tcase nl.XFRMA_TMPL:\n\t\t\tmax := len(attr.Value)\n\t\t\tfor i := 0; i < max; i += nl.SizeofXfrmUserTmpl {\n\t\t\t\tvar resTmpl XfrmPolicyTmpl\n\t\t\t\ttmpl := nl.DeserializeXfrmUserTmpl(attr.Value[i : i+nl.SizeofXfrmUserTmpl])\n\t\t\t\tresTmpl.Dst = tmpl.XfrmId.Daddr.ToIP()\n\t\t\t\tresTmpl.Src = tmpl.Saddr.ToIP()\n\t\t\t\tresTmpl.Proto = Proto(tmpl.XfrmId.Proto)\n\t\t\t\tresTmpl.Mode = Mode(tmpl.Mode)\n\t\t\t\tresTmpl.Spi = int(nl.Swap32(tmpl.XfrmId.Spi))\n\t\t\t\tresTmpl.Reqid = int(tmpl.Reqid)\n\t\t\t\tresTmpl.Optional = int(tmpl.Optional)\n\t\t\t\tpolicy.Tmpls = append(policy.Tmpls, resTmpl)\n\t\t\t}\n\t\tcase nl.XFRMA_MARK:\n\t\t\tmark := nl.DeserializeXfrmMark(attr.Value[:])\n\t\t\tpolicy.Mark = new(XfrmMark)\n\t\t\tpolicy.Mark.Value = mark.Value\n\t\t\tpolicy.Mark.Mask = mark.Mask\n\t\tcase nl.XFRMA_IF_ID:\n\t\t\tpolicy.Ifid = int(native.Uint32(attr.Value))\n\t\t}\n\t}\n\n\treturn &policy, nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/xfrm_state_linux.go",
    "content": "package netlink\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/vishvananda/netlink/nl\"\n\t\"golang.org/x/sys/unix\"\n)\n\n// XfrmStateAlgo represents the algorithm to use for the ipsec encryption.\ntype XfrmStateAlgo struct {\n\tName        string\n\tKey         []byte\n\tTruncateLen int // Auth only\n\tICVLen      int // AEAD only\n}\n\nfunc (a XfrmStateAlgo) String() string {\n\tbase := fmt.Sprintf(\"{Name: %s, Key: 0x%x\", a.Name, a.Key)\n\tif a.TruncateLen != 0 {\n\t\tbase = fmt.Sprintf(\"%s, Truncate length: %d\", base, a.TruncateLen)\n\t}\n\tif a.ICVLen != 0 {\n\t\tbase = fmt.Sprintf(\"%s, ICV length: %d\", base, a.ICVLen)\n\t}\n\treturn fmt.Sprintf(\"%s}\", base)\n}\n\n// EncapType is an enum representing the optional packet encapsulation.\ntype EncapType uint8\n\nconst (\n\tXFRM_ENCAP_ESPINUDP_NONIKE EncapType = iota + 1\n\tXFRM_ENCAP_ESPINUDP\n)\n\nfunc (e EncapType) String() string {\n\tswitch e {\n\tcase XFRM_ENCAP_ESPINUDP_NONIKE:\n\t\treturn \"espinudp-non-ike\"\n\tcase XFRM_ENCAP_ESPINUDP:\n\t\treturn \"espinudp\"\n\t}\n\treturn \"unknown\"\n}\n\n// XfrmStateEncap represents the encapsulation to use for the ipsec encryption.\ntype XfrmStateEncap struct {\n\tType            EncapType\n\tSrcPort         int\n\tDstPort         int\n\tOriginalAddress net.IP\n}\n\nfunc (e XfrmStateEncap) String() string {\n\treturn fmt.Sprintf(\"{Type: %s, Srcport: %d, DstPort: %d, OriginalAddress: %v}\",\n\t\te.Type, e.SrcPort, e.DstPort, e.OriginalAddress)\n}\n\n// XfrmStateLimits represents the configured limits for the state.\ntype XfrmStateLimits struct {\n\tByteSoft    uint64\n\tByteHard    uint64\n\tPacketSoft  uint64\n\tPacketHard  uint64\n\tTimeSoft    uint64\n\tTimeHard    uint64\n\tTimeUseSoft uint64\n\tTimeUseHard uint64\n}\n\n// XfrmStateStats represents the current number of bytes/packets\n// processed by this State, the State's installation and first use\n// time and the replay window counters.\ntype XfrmStateStats struct {\n\tReplayWindow uint32\n\tReplay       uint32\n\tFailed       uint32\n\tBytes        uint64\n\tPackets      uint64\n\tAddTime      uint64\n\tUseTime      uint64\n}\n\n// XfrmReplayState represents the sequence number states for\n// \"legacy\" anti-replay mode.\ntype XfrmReplayState struct {\n\tOSeq   uint32\n\tSeq    uint32\n\tBitMap uint32\n}\n\nfunc (r XfrmReplayState) String() string {\n\treturn fmt.Sprintf(\"{OSeq: 0x%x, Seq: 0x%x, BitMap: 0x%x}\",\n\t\tr.OSeq, r.Seq, r.BitMap)\n}\n\n// XfrmState represents the state of an ipsec policy. It optionally\n// contains an XfrmStateAlgo for encryption and one for authentication.\ntype XfrmState struct {\n\tDst           net.IP\n\tSrc           net.IP\n\tProto         Proto\n\tMode          Mode\n\tSpi           int\n\tReqid         int\n\tReplayWindow  int\n\tLimits        XfrmStateLimits\n\tStatistics    XfrmStateStats\n\tMark          *XfrmMark\n\tOutputMark    *XfrmMark\n\tSADir         SADir\n\tIfid          int\n\tPcpunum       *uint32\n\tAuth          *XfrmStateAlgo\n\tCrypt         *XfrmStateAlgo\n\tAead          *XfrmStateAlgo\n\tEncap         *XfrmStateEncap\n\tESN           bool\n\tDontEncapDSCP bool\n\tOSeqMayWrap   bool\n\tReplay        *XfrmReplayState\n\tSelector      *XfrmPolicy\n}\n\nfunc (sa XfrmState) String() string {\n\treturn fmt.Sprintf(\"Dst: %v, Src: %v, Proto: %s, Mode: %s, SPI: 0x%x, ReqID: 0x%x, ReplayWindow: %d, Mark: %v, OutputMark: %v, SADir: %d, Ifid: %d, Pcpunum: %d, Auth: %v, Crypt: %v, Aead: %v, Encap: %v, ESN: %t, DontEncapDSCP: %t, OSeqMayWrap: %t, Replay: %v\",\n\t\tsa.Dst, sa.Src, sa.Proto, sa.Mode, sa.Spi, sa.Reqid, sa.ReplayWindow, sa.Mark, sa.OutputMark, sa.SADir, sa.Ifid, *sa.Pcpunum, sa.Auth, sa.Crypt, sa.Aead, sa.Encap, sa.ESN, sa.DontEncapDSCP, sa.OSeqMayWrap, sa.Replay)\n}\nfunc (sa XfrmState) Print(stats bool) string {\n\tif !stats {\n\t\treturn sa.String()\n\t}\n\tat := time.Unix(int64(sa.Statistics.AddTime), 0).Format(time.UnixDate)\n\tut := \"-\"\n\tif sa.Statistics.UseTime > 0 {\n\t\tut = time.Unix(int64(sa.Statistics.UseTime), 0).Format(time.UnixDate)\n\t}\n\treturn fmt.Sprintf(\"%s, ByteSoft: %s, ByteHard: %s, PacketSoft: %s, PacketHard: %s, TimeSoft: %d, TimeHard: %d, TimeUseSoft: %d, TimeUseHard: %d, Bytes: %d, Packets: %d, \"+\n\t\t\"AddTime: %s, UseTime: %s, ReplayWindow: %d, Replay: %d, Failed: %d\",\n\t\tsa.String(), printLimit(sa.Limits.ByteSoft), printLimit(sa.Limits.ByteHard), printLimit(sa.Limits.PacketSoft), printLimit(sa.Limits.PacketHard),\n\t\tsa.Limits.TimeSoft, sa.Limits.TimeHard, sa.Limits.TimeUseSoft, sa.Limits.TimeUseHard, sa.Statistics.Bytes, sa.Statistics.Packets, at, ut,\n\t\tsa.Statistics.ReplayWindow, sa.Statistics.Replay, sa.Statistics.Failed)\n}\n\nfunc printLimit(lmt uint64) string {\n\tif lmt == ^uint64(0) {\n\t\treturn \"(INF)\"\n\t}\n\treturn fmt.Sprintf(\"%d\", lmt)\n}\nfunc writeStateAlgo(a *XfrmStateAlgo) []byte {\n\talgo := nl.XfrmAlgo{\n\t\tAlgKeyLen: uint32(len(a.Key) * 8),\n\t\tAlgKey:    a.Key,\n\t}\n\tend := len(a.Name)\n\tif end > 64 {\n\t\tend = 64\n\t}\n\tcopy(algo.AlgName[:end], a.Name)\n\treturn algo.Serialize()\n}\n\nfunc writeStateAlgoAuth(a *XfrmStateAlgo) []byte {\n\talgo := nl.XfrmAlgoAuth{\n\t\tAlgKeyLen:   uint32(len(a.Key) * 8),\n\t\tAlgTruncLen: uint32(a.TruncateLen),\n\t\tAlgKey:      a.Key,\n\t}\n\tend := len(a.Name)\n\tif end > 64 {\n\t\tend = 64\n\t}\n\tcopy(algo.AlgName[:end], a.Name)\n\treturn algo.Serialize()\n}\n\nfunc writeStateAlgoAead(a *XfrmStateAlgo) []byte {\n\talgo := nl.XfrmAlgoAEAD{\n\t\tAlgKeyLen: uint32(len(a.Key) * 8),\n\t\tAlgICVLen: uint32(a.ICVLen),\n\t\tAlgKey:    a.Key,\n\t}\n\tend := len(a.Name)\n\tif end > 64 {\n\t\tend = 64\n\t}\n\tcopy(algo.AlgName[:end], a.Name)\n\treturn algo.Serialize()\n}\n\nfunc writeMark(m *XfrmMark) []byte {\n\tmark := &nl.XfrmMark{\n\t\tValue: m.Value,\n\t\tMask:  m.Mask,\n\t}\n\tif mark.Mask == 0 {\n\t\tmark.Mask = ^uint32(0)\n\t}\n\treturn mark.Serialize()\n}\n\nfunc writeReplayEsn(replayWindow int) []byte {\n\treplayEsn := &nl.XfrmReplayStateEsn{\n\t\tOSeq:         0,\n\t\tSeq:          0,\n\t\tOSeqHi:       0,\n\t\tSeqHi:        0,\n\t\tReplayWindow: uint32(replayWindow),\n\t}\n\n\t// Linux stores the bitmap to identify the already received sequence packets in blocks of uint32 elements.\n\t// Therefore bitmap length is the minimum number of uint32 elements needed. The following is a ceiling operation.\n\tbytesPerElem := int(unsafe.Sizeof(replayEsn.BmpLen)) // Any uint32 variable is good for this\n\treplayEsn.BmpLen = uint32((replayWindow + (bytesPerElem * 8) - 1) / (bytesPerElem * 8))\n\n\treturn replayEsn.Serialize()\n}\n\nfunc writeReplay(r *XfrmReplayState) []byte {\n\treturn (&nl.XfrmReplayState{\n\t\tOSeq:   r.OSeq,\n\t\tSeq:    r.Seq,\n\t\tBitMap: r.BitMap,\n\t}).Serialize()\n}\n\n// XfrmStateAdd will add an xfrm state to the system.\n// Equivalent to: `ip xfrm state add $state`\nfunc XfrmStateAdd(state *XfrmState) error {\n\treturn pkgHandle.XfrmStateAdd(state)\n}\n\n// XfrmStateAdd will add an xfrm state to the system.\n// Equivalent to: `ip xfrm state add $state`\nfunc (h *Handle) XfrmStateAdd(state *XfrmState) error {\n\treturn h.xfrmStateAddOrUpdate(state, nl.XFRM_MSG_NEWSA)\n}\n\n// XfrmStateAllocSpi will allocate an xfrm state in the system.\n// Equivalent to: `ip xfrm state allocspi`\nfunc XfrmStateAllocSpi(state *XfrmState) (*XfrmState, error) {\n\treturn pkgHandle.xfrmStateAllocSpi(state)\n}\n\n// XfrmStateUpdate will update an xfrm state to the system.\n// Equivalent to: `ip xfrm state update $state`\nfunc XfrmStateUpdate(state *XfrmState) error {\n\treturn pkgHandle.XfrmStateUpdate(state)\n}\n\n// XfrmStateUpdate will update an xfrm state to the system.\n// Equivalent to: `ip xfrm state update $state`\nfunc (h *Handle) XfrmStateUpdate(state *XfrmState) error {\n\treturn h.xfrmStateAddOrUpdate(state, nl.XFRM_MSG_UPDSA)\n}\n\nfunc (h *Handle) xfrmStateAddOrUpdate(state *XfrmState, nlProto int) error {\n\n\t// A state with spi 0 can't be deleted so don't allow it to be set\n\tif state.Spi == 0 {\n\t\treturn fmt.Errorf(\"Spi must be set when adding xfrm state\")\n\t}\n\treq := h.newNetlinkRequest(nlProto, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)\n\n\tmsg := xfrmUsersaInfoFromXfrmState(state)\n\n\tif state.ESN {\n\t\tif state.ReplayWindow == 0 {\n\t\t\treturn fmt.Errorf(\"ESN flag set without ReplayWindow\")\n\t\t}\n\t\tmsg.Flags |= nl.XFRM_STATE_ESN\n\t\tmsg.ReplayWindow = 0\n\t}\n\n\tlimitsToLft(state.Limits, &msg.Lft)\n\treq.AddData(msg)\n\n\tif state.Auth != nil {\n\t\tout := nl.NewRtAttr(nl.XFRMA_ALG_AUTH_TRUNC, writeStateAlgoAuth(state.Auth))\n\t\treq.AddData(out)\n\t}\n\tif state.Crypt != nil {\n\t\tout := nl.NewRtAttr(nl.XFRMA_ALG_CRYPT, writeStateAlgo(state.Crypt))\n\t\treq.AddData(out)\n\t}\n\tif state.Aead != nil {\n\t\tout := nl.NewRtAttr(nl.XFRMA_ALG_AEAD, writeStateAlgoAead(state.Aead))\n\t\treq.AddData(out)\n\t}\n\tif state.Encap != nil {\n\t\tencapData := make([]byte, nl.SizeofXfrmEncapTmpl)\n\t\tencap := nl.DeserializeXfrmEncapTmpl(encapData)\n\t\tencap.EncapType = uint16(state.Encap.Type)\n\t\tencap.EncapSport = nl.Swap16(uint16(state.Encap.SrcPort))\n\t\tencap.EncapDport = nl.Swap16(uint16(state.Encap.DstPort))\n\t\tencap.EncapOa.FromIP(state.Encap.OriginalAddress)\n\t\tout := nl.NewRtAttr(nl.XFRMA_ENCAP, encapData)\n\t\treq.AddData(out)\n\t}\n\tif state.Mark != nil {\n\t\tout := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(state.Mark))\n\t\treq.AddData(out)\n\t}\n\tif state.ESN {\n\t\tout := nl.NewRtAttr(nl.XFRMA_REPLAY_ESN_VAL, writeReplayEsn(state.ReplayWindow))\n\t\treq.AddData(out)\n\t}\n\tif state.OutputMark != nil {\n\t\tout := nl.NewRtAttr(nl.XFRMA_SET_MARK, nl.Uint32Attr(state.OutputMark.Value))\n\t\treq.AddData(out)\n\t\tif state.OutputMark.Mask != 0 {\n\t\t\tout = nl.NewRtAttr(nl.XFRMA_SET_MARK_MASK, nl.Uint32Attr(state.OutputMark.Mask))\n\t\t\treq.AddData(out)\n\t\t}\n\t}\n\tif state.OSeqMayWrap || state.DontEncapDSCP {\n\t\tvar flags uint32\n\t\tif state.DontEncapDSCP {\n\t\t\tflags |= nl.XFRM_SA_XFLAG_DONT_ENCAP_DSCP\n\t\t}\n\t\tif state.OSeqMayWrap {\n\t\t\tflags |= nl.XFRM_SA_XFLAG_OSEQ_MAY_WRAP\n\t\t}\n\t\tout := nl.NewRtAttr(nl.XFRMA_SA_EXTRA_FLAGS, nl.Uint32Attr(flags))\n\t\treq.AddData(out)\n\t}\n\tif state.Replay != nil {\n\t\tout := nl.NewRtAttr(nl.XFRMA_REPLAY_VAL, writeReplay(state.Replay))\n\t\treq.AddData(out)\n\t}\n\n\tif state.SADir != 0 {\n\t\tsaDir := nl.NewRtAttr(nl.XFRMA_SA_DIR, nl.Uint8Attr(uint8(state.SADir)))\n\t\treq.AddData(saDir)\n\t}\n\n\tif state.Ifid != 0 {\n\t\tifId := nl.NewRtAttr(nl.XFRMA_IF_ID, nl.Uint32Attr(uint32(state.Ifid)))\n\t\treq.AddData(ifId)\n\t}\n\n\tif state.Pcpunum != nil {\n\t\tpcpuNum := nl.NewRtAttr(nl.XFRMA_SA_PCPU, nl.Uint32Attr(uint32(*state.Pcpunum)))\n\t\treq.AddData(pcpuNum)\n\t}\n\n\t_, err := req.Execute(unix.NETLINK_XFRM, 0)\n\treturn err\n}\n\nfunc (h *Handle) xfrmStateAllocSpi(state *XfrmState) (*XfrmState, error) {\n\treq := h.newNetlinkRequest(nl.XFRM_MSG_ALLOCSPI,\n\t\tunix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)\n\n\tmsg := &nl.XfrmUserSpiInfo{}\n\tmsg.XfrmUsersaInfo = *(xfrmUsersaInfoFromXfrmState(state))\n\t// 1-255 is reserved by IANA for future use\n\tmsg.Min = 0x100\n\tmsg.Max = 0xffffffff\n\treq.AddData(msg)\n\tif state.Mark != nil {\n\t\tout := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(state.Mark))\n\t\treq.AddData(out)\n\t}\n\n\tmsgs, err := req.Execute(unix.NETLINK_XFRM, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn parseXfrmState(msgs[0], FAMILY_ALL)\n}\n\n// XfrmStateDel will delete an xfrm state from the system. Note that\n// the Algos are ignored when matching the state to delete.\n// Equivalent to: `ip xfrm state del $state`\nfunc XfrmStateDel(state *XfrmState) error {\n\treturn pkgHandle.XfrmStateDel(state)\n}\n\n// XfrmStateDel will delete an xfrm state from the system. Note that\n// the Algos are ignored when matching the state to delete.\n// Equivalent to: `ip xfrm state del $state`\nfunc (h *Handle) XfrmStateDel(state *XfrmState) error {\n\t_, err := h.xfrmStateGetOrDelete(state, nl.XFRM_MSG_DELSA)\n\treturn err\n}\n\n// XfrmStateList gets a list of xfrm states in the system.\n// Equivalent to: `ip [-4|-6] xfrm state show`.\n// The list can be filtered by ip family.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc XfrmStateList(family int) ([]XfrmState, error) {\n\treturn pkgHandle.XfrmStateList(family)\n}\n\n// XfrmStateList gets a list of xfrm states in the system.\n// Equivalent to: `ip xfrm state show`.\n// The list can be filtered by ip family.\n//\n// If the returned error is [ErrDumpInterrupted], results may be inconsistent\n// or incomplete.\nfunc (h *Handle) XfrmStateList(family int) ([]XfrmState, error) {\n\treq := h.newNetlinkRequest(nl.XFRM_MSG_GETSA, unix.NLM_F_DUMP)\n\n\tmsgs, executeErr := req.Execute(unix.NETLINK_XFRM, nl.XFRM_MSG_NEWSA)\n\tif executeErr != nil && !errors.Is(executeErr, ErrDumpInterrupted) {\n\t\treturn nil, executeErr\n\t}\n\n\tvar res []XfrmState\n\tfor _, m := range msgs {\n\t\tif state, err := parseXfrmState(m, family); err == nil {\n\t\t\tres = append(res, *state)\n\t\t} else if err == familyError {\n\t\t\tcontinue\n\t\t} else {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn res, executeErr\n}\n\n// XfrmStateGet gets the xfrm state described by the ID, if found.\n// Equivalent to: `ip xfrm state get ID [ mark MARK [ mask MASK ] ]`.\n// Only the fields which constitue the SA ID must be filled in:\n// ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]\n// mark is optional\nfunc XfrmStateGet(state *XfrmState) (*XfrmState, error) {\n\treturn pkgHandle.XfrmStateGet(state)\n}\n\n// XfrmStateGet gets the xfrm state described by the ID, if found.\n// Equivalent to: `ip xfrm state get ID [ mark MARK [ mask MASK ] ]`.\n// Only the fields which constitue the SA ID must be filled in:\n// ID := [ src ADDR ] [ dst ADDR ] [ proto XFRM-PROTO ] [ spi SPI ]\n// mark is optional\nfunc (h *Handle) XfrmStateGet(state *XfrmState) (*XfrmState, error) {\n\treturn h.xfrmStateGetOrDelete(state, nl.XFRM_MSG_GETSA)\n}\n\nfunc (h *Handle) xfrmStateGetOrDelete(state *XfrmState, nlProto int) (*XfrmState, error) {\n\treq := h.newNetlinkRequest(nlProto, unix.NLM_F_ACK)\n\n\tmsg := &nl.XfrmUsersaId{}\n\tmsg.Family = uint16(nl.GetIPFamily(state.Dst))\n\tmsg.Daddr.FromIP(state.Dst)\n\tmsg.Proto = uint8(state.Proto)\n\tmsg.Spi = nl.Swap32(uint32(state.Spi))\n\treq.AddData(msg)\n\n\tif state.Mark != nil {\n\t\tout := nl.NewRtAttr(nl.XFRMA_MARK, writeMark(state.Mark))\n\t\treq.AddData(out)\n\t}\n\tif state.Src != nil {\n\t\tout := nl.NewRtAttr(nl.XFRMA_SRCADDR, state.Src.To16())\n\t\treq.AddData(out)\n\t}\n\n\tif state.Ifid != 0 {\n\t\tifId := nl.NewRtAttr(nl.XFRMA_IF_ID, nl.Uint32Attr(uint32(state.Ifid)))\n\t\treq.AddData(ifId)\n\t}\n\n\tif state.Pcpunum != nil {\n\t\tpcpuNum := nl.NewRtAttr(nl.XFRMA_SA_PCPU, nl.Uint32Attr(uint32(*state.Pcpunum)))\n\t\treq.AddData(pcpuNum)\n\t}\n\n\tresType := nl.XFRM_MSG_NEWSA\n\tif nlProto == nl.XFRM_MSG_DELSA {\n\t\tresType = 0\n\t}\n\n\tmsgs, err := req.Execute(unix.NETLINK_XFRM, uint16(resType))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif nlProto == nl.XFRM_MSG_DELSA {\n\t\treturn nil, nil\n\t}\n\n\ts, err := parseXfrmState(msgs[0], FAMILY_ALL)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn s, nil\n}\n\nvar familyError = fmt.Errorf(\"family error\")\n\nfunc xfrmStateFromXfrmUsersaInfo(msg *nl.XfrmUsersaInfo) *XfrmState {\n\tvar state XfrmState\n\tstate.Dst = msg.Id.Daddr.ToIP()\n\tstate.Src = msg.Saddr.ToIP()\n\tstate.Proto = Proto(msg.Id.Proto)\n\tstate.Mode = Mode(msg.Mode)\n\tstate.Spi = int(nl.Swap32(msg.Id.Spi))\n\tstate.Reqid = int(msg.Reqid)\n\tstate.ReplayWindow = int(msg.ReplayWindow)\n\tlftToLimits(&msg.Lft, &state.Limits)\n\tcurToStats(&msg.Curlft, &msg.Stats, &state.Statistics)\n\tstate.Selector = &XfrmPolicy{\n\t\tDst:     msg.Sel.Daddr.ToIPNet(msg.Sel.PrefixlenD, msg.Sel.Family),\n\t\tSrc:     msg.Sel.Saddr.ToIPNet(msg.Sel.PrefixlenS, msg.Sel.Family),\n\t\tProto:   Proto(msg.Sel.Proto),\n\t\tDstPort: int(nl.Swap16(msg.Sel.Dport)),\n\t\tSrcPort: int(nl.Swap16(msg.Sel.Sport)),\n\t\tIfindex: int(msg.Sel.Ifindex),\n\t}\n\n\treturn &state\n}\n\nfunc parseXfrmState(m []byte, family int) (*XfrmState, error) {\n\tmsg := nl.DeserializeXfrmUsersaInfo(m)\n\t// This is mainly for the state dump\n\tif family != FAMILY_ALL && family != int(msg.Family) {\n\t\treturn nil, familyError\n\t}\n\tstate := xfrmStateFromXfrmUsersaInfo(msg)\n\tattrs, err := nl.ParseRouteAttr(m[nl.SizeofXfrmUsersaInfo:])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, attr := range attrs {\n\t\tswitch attr.Attr.Type {\n\t\tcase nl.XFRMA_ALG_AUTH, nl.XFRMA_ALG_CRYPT:\n\t\t\tvar resAlgo *XfrmStateAlgo\n\t\t\tif attr.Attr.Type == nl.XFRMA_ALG_AUTH {\n\t\t\t\tif state.Auth == nil {\n\t\t\t\t\tstate.Auth = new(XfrmStateAlgo)\n\t\t\t\t}\n\t\t\t\tresAlgo = state.Auth\n\t\t\t} else {\n\t\t\t\tstate.Crypt = new(XfrmStateAlgo)\n\t\t\t\tresAlgo = state.Crypt\n\t\t\t}\n\t\t\talgo := nl.DeserializeXfrmAlgo(attr.Value[:])\n\t\t\t(*resAlgo).Name = nl.BytesToString(algo.AlgName[:])\n\t\t\t(*resAlgo).Key = algo.AlgKey\n\t\tcase nl.XFRMA_ALG_AUTH_TRUNC:\n\t\t\tif state.Auth == nil {\n\t\t\t\tstate.Auth = new(XfrmStateAlgo)\n\t\t\t}\n\t\t\talgo := nl.DeserializeXfrmAlgoAuth(attr.Value[:])\n\t\t\tstate.Auth.Name = nl.BytesToString(algo.AlgName[:])\n\t\t\tstate.Auth.Key = algo.AlgKey\n\t\t\tstate.Auth.TruncateLen = int(algo.AlgTruncLen)\n\t\tcase nl.XFRMA_ALG_AEAD:\n\t\t\tstate.Aead = new(XfrmStateAlgo)\n\t\t\talgo := nl.DeserializeXfrmAlgoAEAD(attr.Value[:])\n\t\t\tstate.Aead.Name = nl.BytesToString(algo.AlgName[:])\n\t\t\tstate.Aead.Key = algo.AlgKey\n\t\t\tstate.Aead.ICVLen = int(algo.AlgICVLen)\n\t\tcase nl.XFRMA_ENCAP:\n\t\t\tencap := nl.DeserializeXfrmEncapTmpl(attr.Value[:])\n\t\t\tstate.Encap = new(XfrmStateEncap)\n\t\t\tstate.Encap.Type = EncapType(encap.EncapType)\n\t\t\tstate.Encap.SrcPort = int(nl.Swap16(encap.EncapSport))\n\t\t\tstate.Encap.DstPort = int(nl.Swap16(encap.EncapDport))\n\t\t\tstate.Encap.OriginalAddress = encap.EncapOa.ToIP()\n\t\tcase nl.XFRMA_MARK:\n\t\t\tmark := nl.DeserializeXfrmMark(attr.Value[:])\n\t\t\tstate.Mark = new(XfrmMark)\n\t\t\tstate.Mark.Value = mark.Value\n\t\t\tstate.Mark.Mask = mark.Mask\n\t\tcase nl.XFRMA_SA_EXTRA_FLAGS:\n\t\t\tflags := native.Uint32(attr.Value)\n\t\t\tif (flags & nl.XFRM_SA_XFLAG_DONT_ENCAP_DSCP) != 0 {\n\t\t\t\tstate.DontEncapDSCP = true\n\t\t\t}\n\t\t\tif (flags & nl.XFRM_SA_XFLAG_OSEQ_MAY_WRAP) != 0 {\n\t\t\t\tstate.OSeqMayWrap = true\n\t\t\t}\n\t\tcase nl.XFRMA_SET_MARK:\n\t\t\tif state.OutputMark == nil {\n\t\t\t\tstate.OutputMark = new(XfrmMark)\n\t\t\t}\n\t\t\tstate.OutputMark.Value = native.Uint32(attr.Value)\n\t\tcase nl.XFRMA_SET_MARK_MASK:\n\t\t\tif state.OutputMark == nil {\n\t\t\t\tstate.OutputMark = new(XfrmMark)\n\t\t\t}\n\t\t\tstate.OutputMark.Mask = native.Uint32(attr.Value)\n\t\t\tif state.OutputMark.Mask == 0xffffffff {\n\t\t\t\tstate.OutputMark.Mask = 0\n\t\t\t}\n\t\tcase nl.XFRMA_SA_DIR:\n\t\t\tstate.SADir = SADir(attr.Value[0])\n\t\tcase nl.XFRMA_IF_ID:\n\t\t\tstate.Ifid = int(native.Uint32(attr.Value))\n\t\tcase nl.XFRMA_SA_PCPU:\n\t\t\tpcpuNum := native.Uint32(attr.Value)\n\t\t\tstate.Pcpunum = &pcpuNum\n\t\tcase nl.XFRMA_REPLAY_VAL:\n\t\t\tif state.Replay == nil {\n\t\t\t\tstate.Replay = new(XfrmReplayState)\n\t\t\t}\n\t\t\treplay := nl.DeserializeXfrmReplayState(attr.Value[:])\n\t\t\tstate.Replay.OSeq = replay.OSeq\n\t\t\tstate.Replay.Seq = replay.Seq\n\t\t\tstate.Replay.BitMap = replay.BitMap\n\t\t}\n\t}\n\n\treturn state, nil\n}\n\n// XfrmStateFlush will flush the xfrm state on the system.\n// proto = 0 means any transformation protocols\n// Equivalent to: `ip xfrm state flush [ proto XFRM-PROTO ]`\nfunc XfrmStateFlush(proto Proto) error {\n\treturn pkgHandle.XfrmStateFlush(proto)\n}\n\n// XfrmStateFlush will flush the xfrm state on the system.\n// proto = 0 means any transformation protocols\n// Equivalent to: `ip xfrm state flush [ proto XFRM-PROTO ]`\nfunc (h *Handle) XfrmStateFlush(proto Proto) error {\n\treq := h.newNetlinkRequest(nl.XFRM_MSG_FLUSHSA, unix.NLM_F_ACK)\n\n\treq.AddData(&nl.XfrmUsersaFlush{Proto: uint8(proto)})\n\n\t_, err := req.Execute(unix.NETLINK_XFRM, 0)\n\treturn err\n}\n\nfunc limitsToLft(lmts XfrmStateLimits, lft *nl.XfrmLifetimeCfg) {\n\tif lmts.ByteSoft != 0 {\n\t\tlft.SoftByteLimit = lmts.ByteSoft\n\t} else {\n\t\tlft.SoftByteLimit = nl.XFRM_INF\n\t}\n\tif lmts.ByteHard != 0 {\n\t\tlft.HardByteLimit = lmts.ByteHard\n\t} else {\n\t\tlft.HardByteLimit = nl.XFRM_INF\n\t}\n\tif lmts.PacketSoft != 0 {\n\t\tlft.SoftPacketLimit = lmts.PacketSoft\n\t} else {\n\t\tlft.SoftPacketLimit = nl.XFRM_INF\n\t}\n\tif lmts.PacketHard != 0 {\n\t\tlft.HardPacketLimit = lmts.PacketHard\n\t} else {\n\t\tlft.HardPacketLimit = nl.XFRM_INF\n\t}\n\tlft.SoftAddExpiresSeconds = lmts.TimeSoft\n\tlft.HardAddExpiresSeconds = lmts.TimeHard\n\tlft.SoftUseExpiresSeconds = lmts.TimeUseSoft\n\tlft.HardUseExpiresSeconds = lmts.TimeUseHard\n}\n\nfunc lftToLimits(lft *nl.XfrmLifetimeCfg, lmts *XfrmStateLimits) {\n\t*lmts = *(*XfrmStateLimits)(unsafe.Pointer(lft))\n}\n\nfunc curToStats(cur *nl.XfrmLifetimeCur, wstats *nl.XfrmStats, stats *XfrmStateStats) {\n\tstats.Bytes = cur.Bytes\n\tstats.Packets = cur.Packets\n\tstats.AddTime = cur.AddTime\n\tstats.UseTime = cur.UseTime\n\tstats.ReplayWindow = wstats.ReplayWindow\n\tstats.Replay = wstats.Replay\n\tstats.Failed = wstats.IntegrityFailed\n}\n\nfunc xfrmUsersaInfoFromXfrmState(state *XfrmState) *nl.XfrmUsersaInfo {\n\tmsg := &nl.XfrmUsersaInfo{}\n\tmsg.Family = uint16(nl.GetIPFamily(state.Dst))\n\tmsg.Id.Daddr.FromIP(state.Dst)\n\tmsg.Saddr.FromIP(state.Src)\n\tmsg.Id.Proto = uint8(state.Proto)\n\tmsg.Mode = uint8(state.Mode)\n\tmsg.Id.Spi = nl.Swap32(uint32(state.Spi))\n\tmsg.Reqid = uint32(state.Reqid)\n\tmsg.ReplayWindow = uint8(state.ReplayWindow)\n\tmsg.Sel = nl.XfrmSelector{}\n\tif state.Selector != nil {\n\t\tselFromPolicy(&msg.Sel, state.Selector)\n\t}\n\treturn msg\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netlink/xfrm_unspecified.go",
    "content": "//go:build !linux\n// +build !linux\n\npackage netlink\n\ntype XfrmPolicy struct{}\ntype XfrmState struct{}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netns/.golangci.yml",
    "content": "linters:\n  enable:\n    - errcheck\n    - errorlint\n    - gocritic\n    - gosec\n    - gosimple\n    - govet\n    - gci\n    - misspell\n    - nonamedreturns\n    - staticcheck\n    - unconvert\n    - unparam\n    - unused\n    - whitespace\n\nlinters-settings:\n  gci:\n    sections:\n      - standard\n      - default\n      - prefix(github.com/vishvananda)\n\nrun:\n  timeout: 5m\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netns/.yamllint.yml",
    "content": "---\nextends: default\n\nrules:\n  document-start: disable\n  line-length: disable\n  truthy:\n    ignore: |\n      .github/workflows/*.yml\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netns/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 2014 Vishvananda Ishaya.\n   Copyright 2014 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       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/vishvananda/netns/README.md",
    "content": "# netns - network namespaces in go #\n\nThe netns package provides an ultra-simple interface for handling\nnetwork namespaces in go. Changing namespaces requires elevated\nprivileges, so in most cases this code needs to be run as root.\n\n## Local Build and Test ##\n\nYou can use go get command:\n\n    go get github.com/vishvananda/netns\n\nTesting (requires root):\n\n    sudo -E go test github.com/vishvananda/netns\n\n## Example ##\n\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"net\"\n    \"runtime\"\n\n    \"github.com/vishvananda/netns\"\n)\n\nfunc main() {\n    // Lock the OS Thread so we don't accidentally switch namespaces\n    runtime.LockOSThread()\n    defer runtime.UnlockOSThread()\n\n    // Save the current network namespace\n    origns, _ := netns.Get()\n    defer origns.Close()\n\n    // Create a new network namespace\n    newns, _ := netns.New()\n    defer newns.Close()\n\n    // Do something with the network namespace\n    ifaces, _ := net.Interfaces()\n    fmt.Printf(\"Interfaces: %v\\n\", ifaces)\n\n    // Switch back to the original namespace\n    netns.Set(origns)\n}\n\n```\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netns/doc.go",
    "content": "// Package netns allows ultra-simple network namespace handling. NsHandles\n// can be retrieved and set. Note that the current namespace is thread\n// local so actions that set and reset namespaces should use LockOSThread\n// to make sure the namespace doesn't change due to a goroutine switch.\n// It is best to close NsHandles when you are done with them. This can be\n// accomplished via a `defer ns.Close()` on the handle. Changing namespaces\n// requires elevated privileges, so in most cases this code needs to be run\n// as root.\npackage netns\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netns/netns_linux.go",
    "content": "package netns\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// Deprecated: use golang.org/x/sys/unix pkg instead.\nconst (\n\tCLONE_NEWUTS  = unix.CLONE_NEWUTS  /* New utsname group? */\n\tCLONE_NEWIPC  = unix.CLONE_NEWIPC  /* New ipcs */\n\tCLONE_NEWUSER = unix.CLONE_NEWUSER /* New user namespace */\n\tCLONE_NEWPID  = unix.CLONE_NEWPID  /* New pid namespace */\n\tCLONE_NEWNET  = unix.CLONE_NEWNET  /* New network namespace */\n\tCLONE_IO      = unix.CLONE_IO      /* Get io context */\n)\n\nconst bindMountPath = \"/run/netns\" /* Bind mount path for named netns */\n\n// Setns sets namespace using golang.org/x/sys/unix.Setns.\n//\n// Deprecated: Use golang.org/x/sys/unix.Setns instead.\nfunc Setns(ns NsHandle, nstype int) error {\n\treturn unix.Setns(int(ns), nstype)\n}\n\n// Set sets the current network namespace to the namespace represented\n// by NsHandle.\nfunc Set(ns NsHandle) error {\n\treturn unix.Setns(int(ns), unix.CLONE_NEWNET)\n}\n\n// New creates a new network namespace, sets it as current and returns\n// a handle to it.\nfunc New() (NsHandle, error) {\n\tif err := unix.Unshare(unix.CLONE_NEWNET); err != nil {\n\t\treturn -1, err\n\t}\n\treturn Get()\n}\n\n// NewNamed creates a new named network namespace, sets it as current,\n// and returns a handle to it\nfunc NewNamed(name string) (NsHandle, error) {\n\tif _, err := os.Stat(bindMountPath); os.IsNotExist(err) {\n\t\terr = os.MkdirAll(bindMountPath, 0o755)\n\t\tif err != nil {\n\t\t\treturn None(), err\n\t\t}\n\t}\n\n\tnewNs, err := New()\n\tif err != nil {\n\t\treturn None(), err\n\t}\n\n\tnamedPath := path.Join(bindMountPath, name)\n\n\tf, err := os.OpenFile(namedPath, os.O_CREATE|os.O_EXCL, 0o444)\n\tif err != nil {\n\t\tnewNs.Close()\n\t\treturn None(), err\n\t}\n\tf.Close()\n\n\tnsPath := fmt.Sprintf(\"/proc/%d/task/%d/ns/net\", os.Getpid(), unix.Gettid())\n\terr = unix.Mount(nsPath, namedPath, \"bind\", unix.MS_BIND, \"\")\n\tif err != nil {\n\t\tnewNs.Close()\n\t\treturn None(), err\n\t}\n\n\treturn newNs, nil\n}\n\n// DeleteNamed deletes a named network namespace\nfunc DeleteNamed(name string) error {\n\tnamedPath := path.Join(bindMountPath, name)\n\n\terr := unix.Unmount(namedPath, unix.MNT_DETACH)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn os.Remove(namedPath)\n}\n\n// Get gets a handle to the current threads network namespace.\nfunc Get() (NsHandle, error) {\n\treturn GetFromThread(os.Getpid(), unix.Gettid())\n}\n\n// GetFromPath gets a handle to a network namespace\n// identified by the path\nfunc GetFromPath(path string) (NsHandle, error) {\n\tfd, err := unix.Open(path, unix.O_RDONLY|unix.O_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\treturn NsHandle(fd), nil\n}\n\n// GetFromName gets a handle to a named network namespace such as one\n// created by `ip netns add`.\nfunc GetFromName(name string) (NsHandle, error) {\n\treturn GetFromPath(filepath.Join(bindMountPath, name))\n}\n\n// GetFromPid gets a handle to the network namespace of a given pid.\nfunc GetFromPid(pid int) (NsHandle, error) {\n\treturn GetFromPath(fmt.Sprintf(\"/proc/%d/ns/net\", pid))\n}\n\n// GetFromThread gets a handle to the network namespace of a given pid and tid.\nfunc GetFromThread(pid, tid int) (NsHandle, error) {\n\treturn GetFromPath(fmt.Sprintf(\"/proc/%d/task/%d/ns/net\", pid, tid))\n}\n\n// GetFromDocker gets a handle to the network namespace of a docker container.\n// Id is prefixed matched against the running docker containers, so a short\n// identifier can be used as long as it isn't ambiguous.\nfunc GetFromDocker(id string) (NsHandle, error) {\n\tpid, err := getPidForContainer(id)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\treturn GetFromPid(pid)\n}\n\n// borrowed from docker/utils/utils.go\nfunc findCgroupMountpoint(cgroupType string) (int, string, error) {\n\toutput, err := os.ReadFile(\"/proc/mounts\")\n\tif err != nil {\n\t\treturn -1, \"\", err\n\t}\n\n\t// /proc/mounts has 6 fields per line, one mount per line, e.g.\n\t// cgroup /sys/fs/cgroup/devices cgroup rw,relatime,devices 0 0\n\tfor _, line := range strings.Split(string(output), \"\\n\") {\n\t\tparts := strings.Split(line, \" \")\n\t\tif len(parts) == 6 {\n\t\t\tswitch parts[2] {\n\t\t\tcase \"cgroup2\":\n\t\t\t\treturn 2, parts[1], nil\n\t\t\tcase \"cgroup\":\n\t\t\t\tfor _, opt := range strings.Split(parts[3], \",\") {\n\t\t\t\t\tif opt == cgroupType {\n\t\t\t\t\t\treturn 1, parts[1], nil\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn -1, \"\", fmt.Errorf(\"cgroup mountpoint not found for %s\", cgroupType)\n}\n\n// Returns the relative path to the cgroup docker is running in.\n// borrowed from docker/utils/utils.go\n// modified to get the docker pid instead of using /proc/self\nfunc getDockerCgroup(cgroupVer int, cgroupType string) (string, error) {\n\tdockerpid, err := os.ReadFile(\"/var/run/docker.pid\")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tresult := strings.Split(string(dockerpid), \"\\n\")\n\tif len(result) == 0 || len(result[0]) == 0 {\n\t\treturn \"\", fmt.Errorf(\"docker pid not found in /var/run/docker.pid\")\n\t}\n\tpid, err := strconv.Atoi(result[0])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\toutput, err := os.ReadFile(fmt.Sprintf(\"/proc/%d/cgroup\", pid))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tfor _, line := range strings.Split(string(output), \"\\n\") {\n\t\tparts := strings.Split(line, \":\")\n\t\t// any type used by docker should work\n\t\tif (cgroupVer == 1 && parts[1] == cgroupType) ||\n\t\t\t(cgroupVer == 2 && parts[1] == \"\") {\n\t\t\treturn parts[2], nil\n\t\t}\n\t}\n\treturn \"\", fmt.Errorf(\"cgroup '%s' not found in /proc/%d/cgroup\", cgroupType, pid)\n}\n\n// Returns the first pid in a container.\n// borrowed from docker/utils/utils.go\n// modified to only return the first pid\n// modified to glob with id\n// modified to search for newer docker containers\n// modified to look for cgroups v2\nfunc getPidForContainer(id string) (int, error) {\n\tpid := 0\n\n\t// memory is chosen randomly, any cgroup used by docker works\n\tcgroupType := \"memory\"\n\n\tcgroupVer, cgroupRoot, err := findCgroupMountpoint(cgroupType)\n\tif err != nil {\n\t\treturn pid, err\n\t}\n\n\tcgroupDocker, err := getDockerCgroup(cgroupVer, cgroupType)\n\tif err != nil {\n\t\treturn pid, err\n\t}\n\n\tid += \"*\"\n\n\tvar pidFile string\n\tswitch cgroupVer {\n\tcase 1:\n\t\tpidFile = \"tasks\"\n\tcase 2:\n\t\tpidFile = \"cgroup.procs\"\n\tdefault:\n\t\treturn -1, fmt.Errorf(\"Invalid cgroup version '%d'\", cgroupVer)\n\t}\n\n\tattempts := []string{\n\t\tfilepath.Join(cgroupRoot, cgroupDocker, id, pidFile),\n\t\t// With more recent lxc versions use, cgroup will be in lxc/\n\t\tfilepath.Join(cgroupRoot, cgroupDocker, \"lxc\", id, pidFile),\n\t\t// With more recent docker, cgroup will be in docker/\n\t\tfilepath.Join(cgroupRoot, cgroupDocker, \"docker\", id, pidFile),\n\t\t// Even more recent docker versions under systemd use docker-<id>.scope/\n\t\tfilepath.Join(cgroupRoot, \"system.slice\", \"docker-\"+id+\".scope\", pidFile),\n\t\t// Even more recent docker versions under cgroup/systemd/docker/<id>/\n\t\tfilepath.Join(cgroupRoot, \"..\", \"systemd\", \"docker\", id, pidFile),\n\t\t// Kubernetes with docker and CNI is even more different. Works for BestEffort and Burstable QoS\n\t\tfilepath.Join(cgroupRoot, \"..\", \"systemd\", \"kubepods\", \"*\", \"pod*\", id, pidFile),\n\t\t// Same as above but for Guaranteed QoS\n\t\tfilepath.Join(cgroupRoot, \"..\", \"systemd\", \"kubepods\", \"pod*\", id, pidFile),\n\t\t// Another flavor of containers location in recent kubernetes 1.11+. Works for BestEffort and Burstable QoS\n\t\tfilepath.Join(cgroupRoot, cgroupDocker, \"kubepods.slice\", \"*.slice\", \"*\", \"docker-\"+id+\".scope\", pidFile),\n\t\t// Same as above but for Guaranteed QoS\n\t\tfilepath.Join(cgroupRoot, cgroupDocker, \"kubepods.slice\", \"*\", \"docker-\"+id+\".scope\", pidFile),\n\t\t// When runs inside of a container with recent kubernetes 1.11+. Works for BestEffort and Burstable QoS\n\t\tfilepath.Join(cgroupRoot, \"kubepods.slice\", \"*.slice\", \"*\", \"docker-\"+id+\".scope\", pidFile),\n\t\t// Same as above but for Guaranteed QoS\n\t\tfilepath.Join(cgroupRoot, \"kubepods.slice\", \"*\", \"docker-\"+id+\".scope\", pidFile),\n\t\t// Support for nerdctl\n\t\tfilepath.Join(cgroupRoot, \"system.slice\", \"nerdctl-\"+id+\".scope\", pidFile),\n\t\t// Support for finch\n\t\tfilepath.Join(cgroupRoot, \"..\", \"systemd\", \"finch\", id, pidFile),\n\t}\n\n\tvar filename string\n\tfor _, attempt := range attempts {\n\t\tfilenames, _ := filepath.Glob(attempt)\n\t\tif len(filenames) > 1 {\n\t\t\treturn pid, fmt.Errorf(\"Ambiguous id supplied: %v\", filenames)\n\t\t} else if len(filenames) == 1 {\n\t\t\tfilename = filenames[0]\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif filename == \"\" {\n\t\treturn pid, fmt.Errorf(\"Unable to find container: %v\", id[:len(id)-1])\n\t}\n\n\toutput, err := os.ReadFile(filename)\n\tif err != nil {\n\t\treturn pid, err\n\t}\n\n\tresult := strings.Split(string(output), \"\\n\")\n\tif len(result) == 0 || len(result[0]) == 0 {\n\t\treturn pid, fmt.Errorf(\"No pid found for container\")\n\t}\n\n\tpid, err = strconv.Atoi(result[0])\n\tif err != nil {\n\t\treturn pid, fmt.Errorf(\"Invalid pid '%s': %w\", result[0], err)\n\t}\n\n\treturn pid, nil\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netns/netns_others.go",
    "content": "//go:build !linux\n// +build !linux\n\npackage netns\n\nimport \"errors\"\n\nvar ErrNotImplemented = errors.New(\"not implemented\")\n\n// Setns sets namespace using golang.org/x/sys/unix.Setns on Linux. It\n// is not implemented on other platforms.\n//\n// Deprecated: Use golang.org/x/sys/unix.Setns instead.\nfunc Setns(ns NsHandle, nstype int) error {\n\treturn ErrNotImplemented\n}\n\nfunc Set(ns NsHandle) error {\n\treturn ErrNotImplemented\n}\n\nfunc New() (NsHandle, error) {\n\treturn -1, ErrNotImplemented\n}\n\nfunc NewNamed(name string) (NsHandle, error) {\n\treturn -1, ErrNotImplemented\n}\n\nfunc DeleteNamed(name string) error {\n\treturn ErrNotImplemented\n}\n\nfunc Get() (NsHandle, error) {\n\treturn -1, ErrNotImplemented\n}\n\nfunc GetFromPath(path string) (NsHandle, error) {\n\treturn -1, ErrNotImplemented\n}\n\nfunc GetFromName(name string) (NsHandle, error) {\n\treturn -1, ErrNotImplemented\n}\n\nfunc GetFromPid(pid int) (NsHandle, error) {\n\treturn -1, ErrNotImplemented\n}\n\nfunc GetFromThread(pid int, tid int) (NsHandle, error) {\n\treturn -1, ErrNotImplemented\n}\n\nfunc GetFromDocker(id string) (NsHandle, error) {\n\treturn -1, ErrNotImplemented\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netns/nshandle_linux.go",
    "content": "package netns\n\nimport (\n\t\"fmt\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// NsHandle is a handle to a network namespace. It can be cast directly\n// to an int and used as a file descriptor.\ntype NsHandle int\n\n// Equal determines if two network handles refer to the same network\n// namespace. This is done by comparing the device and inode that the\n// file descriptors point to.\nfunc (ns NsHandle) Equal(other NsHandle) bool {\n\tif ns == other {\n\t\treturn true\n\t}\n\tvar s1, s2 unix.Stat_t\n\tif err := unix.Fstat(int(ns), &s1); err != nil {\n\t\treturn false\n\t}\n\tif err := unix.Fstat(int(other), &s2); err != nil {\n\t\treturn false\n\t}\n\treturn (s1.Dev == s2.Dev) && (s1.Ino == s2.Ino)\n}\n\n// String shows the file descriptor number and its dev and inode.\nfunc (ns NsHandle) String() string {\n\tif ns == -1 {\n\t\treturn \"NS(none)\"\n\t}\n\tvar s unix.Stat_t\n\tif err := unix.Fstat(int(ns), &s); err != nil {\n\t\treturn fmt.Sprintf(\"NS(%d: unknown)\", ns)\n\t}\n\treturn fmt.Sprintf(\"NS(%d: %d, %d)\", ns, s.Dev, s.Ino)\n}\n\n// UniqueId returns a string which uniquely identifies the namespace\n// associated with the network handle.\nfunc (ns NsHandle) UniqueId() string {\n\tif ns == -1 {\n\t\treturn \"NS(none)\"\n\t}\n\tvar s unix.Stat_t\n\tif err := unix.Fstat(int(ns), &s); err != nil {\n\t\treturn \"NS(unknown)\"\n\t}\n\treturn fmt.Sprintf(\"NS(%d:%d)\", s.Dev, s.Ino)\n}\n\n// IsOpen returns true if Close() has not been called.\nfunc (ns NsHandle) IsOpen() bool {\n\treturn ns != -1\n}\n\n// Close closes the NsHandle and resets its file descriptor to -1.\n// It is not safe to use an NsHandle after Close() is called.\nfunc (ns *NsHandle) Close() error {\n\tif err := unix.Close(int(*ns)); err != nil {\n\t\treturn err\n\t}\n\t*ns = -1\n\treturn nil\n}\n\n// None gets an empty (closed) NsHandle.\nfunc None() NsHandle {\n\treturn NsHandle(-1)\n}\n"
  },
  {
    "path": "vendor/github.com/vishvananda/netns/nshandle_others.go",
    "content": "//go:build !linux\n// +build !linux\n\npackage netns\n\n// NsHandle is a handle to a network namespace. It can only be used on Linux,\n// but provides stub methods on other platforms.\ntype NsHandle int\n\n// Equal determines if two network handles refer to the same network\n// namespace. It is only implemented on Linux.\nfunc (ns NsHandle) Equal(_ NsHandle) bool {\n\treturn false\n}\n\n// String shows the file descriptor number and its dev and inode.\n// It is only implemented on Linux, and returns \"NS(none)\" on other\n// platforms.\nfunc (ns NsHandle) String() string {\n\treturn \"NS(none)\"\n}\n\n// UniqueId returns a string which uniquely identifies the namespace\n// associated with the network handle. It is only implemented on Linux,\n// and returns \"NS(none)\" on other platforms.\nfunc (ns NsHandle) UniqueId() string {\n\treturn \"NS(none)\"\n}\n\n// IsOpen returns true if Close() has not been called. It is only implemented\n// on Linux and always returns false on other platforms.\nfunc (ns NsHandle) IsOpen() bool {\n\treturn false\n}\n\n// Close closes the NsHandle and resets its file descriptor to -1.\n// It is only implemented on Linux.\nfunc (ns *NsHandle) Close() error {\n\treturn nil\n}\n\n// None gets an empty (closed) NsHandle.\nfunc None() NsHandle {\n\treturn NsHandle(-1)\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/bpf/asm.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 bpf\n\nimport \"fmt\"\n\n// Assemble converts insts into raw instructions suitable for loading\n// into a BPF virtual machine.\n//\n// Currently, no optimization is attempted, the assembled program flow\n// is exactly as provided.\nfunc Assemble(insts []Instruction) ([]RawInstruction, error) {\n\tret := make([]RawInstruction, len(insts))\n\tvar err error\n\tfor i, inst := range insts {\n\t\tret[i], err = inst.Assemble()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"assembling instruction %d: %s\", i+1, err)\n\t\t}\n\t}\n\treturn ret, nil\n}\n\n// Disassemble attempts to parse raw back into\n// Instructions. Unrecognized RawInstructions are assumed to be an\n// extension not implemented by this package, and are passed through\n// unchanged to the output. The allDecoded value reports whether insts\n// contains no RawInstructions.\nfunc Disassemble(raw []RawInstruction) (insts []Instruction, allDecoded bool) {\n\tinsts = make([]Instruction, len(raw))\n\tallDecoded = true\n\tfor i, r := range raw {\n\t\tinsts[i] = r.Disassemble()\n\t\tif _, ok := insts[i].(RawInstruction); ok {\n\t\t\tallDecoded = false\n\t\t}\n\t}\n\treturn insts, allDecoded\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/bpf/constants.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 bpf\n\n// A Register is a register of the BPF virtual machine.\ntype Register uint16\n\nconst (\n\t// RegA is the accumulator register. RegA is always the\n\t// destination register of ALU operations.\n\tRegA Register = iota\n\t// RegX is the indirection register, used by LoadIndirect\n\t// operations.\n\tRegX\n)\n\n// An ALUOp is an arithmetic or logic operation.\ntype ALUOp uint16\n\n// ALU binary operation types.\nconst (\n\tALUOpAdd ALUOp = iota << 4\n\tALUOpSub\n\tALUOpMul\n\tALUOpDiv\n\tALUOpOr\n\tALUOpAnd\n\tALUOpShiftLeft\n\tALUOpShiftRight\n\taluOpNeg // Not exported because it's the only unary ALU operation, and gets its own instruction type.\n\tALUOpMod\n\tALUOpXor\n)\n\n// A JumpTest is a comparison operator used in conditional jumps.\ntype JumpTest uint16\n\n// Supported operators for conditional jumps.\n// K can be RegX for JumpIfX\nconst (\n\t// K == A\n\tJumpEqual JumpTest = iota\n\t// K != A\n\tJumpNotEqual\n\t// K > A\n\tJumpGreaterThan\n\t// K < A\n\tJumpLessThan\n\t// K >= A\n\tJumpGreaterOrEqual\n\t// K <= A\n\tJumpLessOrEqual\n\t// K & A != 0\n\tJumpBitsSet\n\t// K & A == 0\n\tJumpBitsNotSet\n)\n\n// An Extension is a function call provided by the kernel that\n// performs advanced operations that are expensive or impossible\n// within the BPF virtual machine.\n//\n// Extensions are only implemented by the Linux kernel.\n//\n// TODO: should we prune this list? Some of these extensions seem\n// either broken or near-impossible to use correctly, whereas other\n// (len, random, ifindex) are quite useful.\ntype Extension int\n\n// Extension functions available in the Linux kernel.\nconst (\n\t// extOffset is the negative maximum number of instructions used\n\t// to load instructions by overloading the K argument.\n\textOffset = -0x1000\n\t// ExtLen returns the length of the packet.\n\tExtLen Extension = 1\n\t// ExtProto returns the packet's L3 protocol type.\n\tExtProto Extension = 0\n\t// ExtType returns the packet's type (skb->pkt_type in the kernel)\n\t//\n\t// TODO: better documentation. How nice an API do we want to\n\t// provide for these esoteric extensions?\n\tExtType Extension = 4\n\t// ExtPayloadOffset returns the offset of the packet payload, or\n\t// the first protocol header that the kernel does not know how to\n\t// parse.\n\tExtPayloadOffset Extension = 52\n\t// ExtInterfaceIndex returns the index of the interface on which\n\t// the packet was received.\n\tExtInterfaceIndex Extension = 8\n\t// ExtNetlinkAttr returns the netlink attribute of type X at\n\t// offset A.\n\tExtNetlinkAttr Extension = 12\n\t// ExtNetlinkAttrNested returns the nested netlink attribute of\n\t// type X at offset A.\n\tExtNetlinkAttrNested Extension = 16\n\t// ExtMark returns the packet's mark value.\n\tExtMark Extension = 20\n\t// ExtQueue returns the packet's assigned hardware queue.\n\tExtQueue Extension = 24\n\t// ExtLinkLayerType returns the packet's hardware address type\n\t// (e.g. Ethernet, Infiniband).\n\tExtLinkLayerType Extension = 28\n\t// ExtRXHash returns the packets receive hash.\n\t//\n\t// TODO: figure out what this rxhash actually is.\n\tExtRXHash Extension = 32\n\t// ExtCPUID returns the ID of the CPU processing the current\n\t// packet.\n\tExtCPUID Extension = 36\n\t// ExtVLANTag returns the packet's VLAN tag.\n\tExtVLANTag Extension = 44\n\t// ExtVLANTagPresent returns non-zero if the packet has a VLAN\n\t// tag.\n\t//\n\t// TODO: I think this might be a lie: it reads bit 0x1000 of the\n\t// VLAN header, which changed meaning in recent revisions of the\n\t// spec - this extension may now return meaningless information.\n\tExtVLANTagPresent Extension = 48\n\t// ExtVLANProto returns 0x8100 if the frame has a VLAN header,\n\t// 0x88a8 if the frame has a \"Q-in-Q\" double VLAN header, or some\n\t// other value if no VLAN information is present.\n\tExtVLANProto Extension = 60\n\t// ExtRand returns a uniformly random uint32.\n\tExtRand Extension = 56\n)\n\n// The following gives names to various bit patterns used in opcode construction.\n\nconst (\n\topMaskCls uint16 = 0x7\n\t// opClsLoad masks\n\topMaskLoadDest  = 0x01\n\topMaskLoadWidth = 0x18\n\topMaskLoadMode  = 0xe0\n\t// opClsALU & opClsJump\n\topMaskOperand  = 0x08\n\topMaskOperator = 0xf0\n)\n\nconst (\n\t// +---------------+-----------------+---+---+---+\n\t// | AddrMode (3b) | LoadWidth (2b)  | 0 | 0 | 0 |\n\t// +---------------+-----------------+---+---+---+\n\topClsLoadA uint16 = iota\n\t// +---------------+-----------------+---+---+---+\n\t// | AddrMode (3b) | LoadWidth (2b)  | 0 | 0 | 1 |\n\t// +---------------+-----------------+---+---+---+\n\topClsLoadX\n\t// +---+---+---+---+---+---+---+---+\n\t// | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |\n\t// +---+---+---+---+---+---+---+---+\n\topClsStoreA\n\t// +---+---+---+---+---+---+---+---+\n\t// | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |\n\t// +---+---+---+---+---+---+---+---+\n\topClsStoreX\n\t// +---------------+-----------------+---+---+---+\n\t// | Operator (4b) | OperandSrc (1b) | 1 | 0 | 0 |\n\t// +---------------+-----------------+---+---+---+\n\topClsALU\n\t// +-----------------------------+---+---+---+---+\n\t// |      TestOperator (4b)      | 0 | 1 | 0 | 1 |\n\t// +-----------------------------+---+---+---+---+\n\topClsJump\n\t// +---+-------------------------+---+---+---+---+\n\t// | 0 | 0 | 0 |   RetSrc (1b)   | 0 | 1 | 1 | 0 |\n\t// +---+-------------------------+---+---+---+---+\n\topClsReturn\n\t// +---+-------------------------+---+---+---+---+\n\t// | 0 | 0 | 0 |  TXAorTAX (1b)  | 0 | 1 | 1 | 1 |\n\t// +---+-------------------------+---+---+---+---+\n\topClsMisc\n)\n\nconst (\n\topAddrModeImmediate uint16 = iota << 5\n\topAddrModeAbsolute\n\topAddrModeIndirect\n\topAddrModeScratch\n\topAddrModePacketLen // actually an extension, not an addressing mode.\n\topAddrModeMemShift\n)\n\nconst (\n\topLoadWidth4 uint16 = iota << 3\n\topLoadWidth2\n\topLoadWidth1\n)\n\n// Operand for ALU and Jump instructions\ntype opOperand uint16\n\n// Supported operand sources.\nconst (\n\topOperandConstant opOperand = iota << 3\n\topOperandX\n)\n\n// An jumpOp is a conditional jump condition.\ntype jumpOp uint16\n\n// Supported jump conditions.\nconst (\n\topJumpAlways jumpOp = iota << 4\n\topJumpEqual\n\topJumpGT\n\topJumpGE\n\topJumpSet\n)\n\nconst (\n\topRetSrcConstant uint16 = iota << 4\n\topRetSrcA\n)\n\nconst (\n\topMiscTAX = 0x00\n\topMiscTXA = 0x80\n)\n"
  },
  {
    "path": "vendor/golang.org/x/net/bpf/doc.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/*\nPackage bpf implements marshaling and unmarshaling of programs for the\nBerkeley Packet Filter virtual machine, and provides a Go implementation\nof the virtual machine.\n\nBPF's main use is to specify a packet filter for network taps, so that\nthe kernel doesn't have to expensively copy every packet it sees to\nuserspace. However, it's been repurposed to other areas where running\nuser code in-kernel is needed. For example, Linux's seccomp uses BPF\nto apply security policies to system calls. For simplicity, this\ndocumentation refers only to packets, but other uses of BPF have their\nown data payloads.\n\nBPF programs run in a restricted virtual machine. It has almost no\naccess to kernel functions, and while conditional branches are\nallowed, they can only jump forwards, to guarantee that there are no\ninfinite loops.\n\n# The virtual machine\n\nThe BPF VM is an accumulator machine. Its main register, called\nregister A, is an implicit source and destination in all arithmetic\nand logic operations. The machine also has 16 scratch registers for\ntemporary storage, and an indirection register (register X) for\nindirect memory access. All registers are 32 bits wide.\n\nEach run of a BPF program is given one packet, which is placed in the\nVM's read-only \"main memory\". LoadAbsolute and LoadIndirect\ninstructions can fetch up to 32 bits at a time into register A for\nexamination.\n\nThe goal of a BPF program is to produce and return a verdict (uint32),\nwhich tells the kernel what to do with the packet. In the context of\npacket filtering, the returned value is the number of bytes of the\npacket to forward to userspace, or 0 to ignore the packet. Other\ncontexts like seccomp define their own return values.\n\nIn order to simplify programs, attempts to read past the end of the\npacket terminate the program execution with a verdict of 0 (ignore\npacket). This means that the vast majority of BPF programs don't need\nto do any explicit bounds checking.\n\nIn addition to the bytes of the packet, some BPF programs have access\nto extensions, which are essentially calls to kernel utility\nfunctions. Currently, the only extensions supported by this package\nare the Linux packet filter extensions.\n\n# Examples\n\nThis packet filter selects all ARP packets.\n\n\tbpf.Assemble([]bpf.Instruction{\n\t\t// Load \"EtherType\" field from the ethernet header.\n\t\tbpf.LoadAbsolute{Off: 12, Size: 2},\n\t\t// Skip over the next instruction if EtherType is not ARP.\n\t\tbpf.JumpIf{Cond: bpf.JumpNotEqual, Val: 0x0806, SkipTrue: 1},\n\t\t// Verdict is \"send up to 4k of the packet to userspace.\"\n\t\tbpf.RetConstant{Val: 4096},\n\t\t// Verdict is \"ignore packet.\"\n\t\tbpf.RetConstant{Val: 0},\n\t})\n\nThis packet filter captures a random 1% sample of traffic.\n\n\tbpf.Assemble([]bpf.Instruction{\n\t\t// Get a 32-bit random number from the Linux kernel.\n\t\tbpf.LoadExtension{Num: bpf.ExtRand},\n\t\t// 1% dice roll?\n\t\tbpf.JumpIf{Cond: bpf.JumpLessThan, Val: 2^32/100, SkipFalse: 1},\n\t\t// Capture.\n\t\tbpf.RetConstant{Val: 4096},\n\t\t// Ignore.\n\t\tbpf.RetConstant{Val: 0},\n\t})\n*/\npackage bpf // import \"golang.org/x/net/bpf\"\n"
  },
  {
    "path": "vendor/golang.org/x/net/bpf/instructions.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 bpf\n\nimport \"fmt\"\n\n// An Instruction is one instruction executed by the BPF virtual\n// machine.\ntype Instruction interface {\n\t// Assemble assembles the Instruction into a RawInstruction.\n\tAssemble() (RawInstruction, error)\n}\n\n// A RawInstruction is a raw BPF virtual machine instruction.\ntype RawInstruction struct {\n\t// Operation to execute.\n\tOp uint16\n\t// For conditional jump instructions, the number of instructions\n\t// to skip if the condition is true/false.\n\tJt uint8\n\tJf uint8\n\t// Constant parameter. The meaning depends on the Op.\n\tK uint32\n}\n\n// Assemble implements the Instruction Assemble method.\nfunc (ri RawInstruction) Assemble() (RawInstruction, error) { return ri, nil }\n\n// Disassemble parses ri into an Instruction and returns it. If ri is\n// not recognized by this package, ri itself is returned.\nfunc (ri RawInstruction) Disassemble() Instruction {\n\tswitch ri.Op & opMaskCls {\n\tcase opClsLoadA, opClsLoadX:\n\t\treg := Register(ri.Op & opMaskLoadDest)\n\t\tsz := 0\n\t\tswitch ri.Op & opMaskLoadWidth {\n\t\tcase opLoadWidth4:\n\t\t\tsz = 4\n\t\tcase opLoadWidth2:\n\t\t\tsz = 2\n\t\tcase opLoadWidth1:\n\t\t\tsz = 1\n\t\tdefault:\n\t\t\treturn ri\n\t\t}\n\t\tswitch ri.Op & opMaskLoadMode {\n\t\tcase opAddrModeImmediate:\n\t\t\tif sz != 4 {\n\t\t\t\treturn ri\n\t\t\t}\n\t\t\treturn LoadConstant{Dst: reg, Val: ri.K}\n\t\tcase opAddrModeScratch:\n\t\t\tif sz != 4 || ri.K > 15 {\n\t\t\t\treturn ri\n\t\t\t}\n\t\t\treturn LoadScratch{Dst: reg, N: int(ri.K)}\n\t\tcase opAddrModeAbsolute:\n\t\t\tif ri.K > extOffset+0xffffffff {\n\t\t\t\treturn LoadExtension{Num: Extension(-extOffset + ri.K)}\n\t\t\t}\n\t\t\treturn LoadAbsolute{Size: sz, Off: ri.K}\n\t\tcase opAddrModeIndirect:\n\t\t\treturn LoadIndirect{Size: sz, Off: ri.K}\n\t\tcase opAddrModePacketLen:\n\t\t\tif sz != 4 {\n\t\t\t\treturn ri\n\t\t\t}\n\t\t\treturn LoadExtension{Num: ExtLen}\n\t\tcase opAddrModeMemShift:\n\t\t\treturn LoadMemShift{Off: ri.K}\n\t\tdefault:\n\t\t\treturn ri\n\t\t}\n\n\tcase opClsStoreA:\n\t\tif ri.Op != opClsStoreA || ri.K > 15 {\n\t\t\treturn ri\n\t\t}\n\t\treturn StoreScratch{Src: RegA, N: int(ri.K)}\n\n\tcase opClsStoreX:\n\t\tif ri.Op != opClsStoreX || ri.K > 15 {\n\t\t\treturn ri\n\t\t}\n\t\treturn StoreScratch{Src: RegX, N: int(ri.K)}\n\n\tcase opClsALU:\n\t\tswitch op := ALUOp(ri.Op & opMaskOperator); op {\n\t\tcase ALUOpAdd, ALUOpSub, ALUOpMul, ALUOpDiv, ALUOpOr, ALUOpAnd, ALUOpShiftLeft, ALUOpShiftRight, ALUOpMod, ALUOpXor:\n\t\t\tswitch operand := opOperand(ri.Op & opMaskOperand); operand {\n\t\t\tcase opOperandX:\n\t\t\t\treturn ALUOpX{Op: op}\n\t\t\tcase opOperandConstant:\n\t\t\t\treturn ALUOpConstant{Op: op, Val: ri.K}\n\t\t\tdefault:\n\t\t\t\treturn ri\n\t\t\t}\n\t\tcase aluOpNeg:\n\t\t\treturn NegateA{}\n\t\tdefault:\n\t\t\treturn ri\n\t\t}\n\n\tcase opClsJump:\n\t\tswitch op := jumpOp(ri.Op & opMaskOperator); op {\n\t\tcase opJumpAlways:\n\t\t\treturn Jump{Skip: ri.K}\n\t\tcase opJumpEqual, opJumpGT, opJumpGE, opJumpSet:\n\t\t\tcond, skipTrue, skipFalse := jumpOpToTest(op, ri.Jt, ri.Jf)\n\t\t\tswitch operand := opOperand(ri.Op & opMaskOperand); operand {\n\t\t\tcase opOperandX:\n\t\t\t\treturn JumpIfX{Cond: cond, SkipTrue: skipTrue, SkipFalse: skipFalse}\n\t\t\tcase opOperandConstant:\n\t\t\t\treturn JumpIf{Cond: cond, Val: ri.K, SkipTrue: skipTrue, SkipFalse: skipFalse}\n\t\t\tdefault:\n\t\t\t\treturn ri\n\t\t\t}\n\t\tdefault:\n\t\t\treturn ri\n\t\t}\n\n\tcase opClsReturn:\n\t\tswitch ri.Op {\n\t\tcase opClsReturn | opRetSrcA:\n\t\t\treturn RetA{}\n\t\tcase opClsReturn | opRetSrcConstant:\n\t\t\treturn RetConstant{Val: ri.K}\n\t\tdefault:\n\t\t\treturn ri\n\t\t}\n\n\tcase opClsMisc:\n\t\tswitch ri.Op {\n\t\tcase opClsMisc | opMiscTAX:\n\t\t\treturn TAX{}\n\t\tcase opClsMisc | opMiscTXA:\n\t\t\treturn TXA{}\n\t\tdefault:\n\t\t\treturn ri\n\t\t}\n\n\tdefault:\n\t\tpanic(\"unreachable\") // switch is exhaustive on the bit pattern\n\t}\n}\n\nfunc jumpOpToTest(op jumpOp, skipTrue uint8, skipFalse uint8) (JumpTest, uint8, uint8) {\n\tvar test JumpTest\n\n\t// Decode \"fake\" jump conditions that don't appear in machine code\n\t// Ensures the Assemble -> Disassemble stage recreates the same instructions\n\t// See https://github.com/golang/go/issues/18470\n\tif skipTrue == 0 {\n\t\tswitch op {\n\t\tcase opJumpEqual:\n\t\t\ttest = JumpNotEqual\n\t\tcase opJumpGT:\n\t\t\ttest = JumpLessOrEqual\n\t\tcase opJumpGE:\n\t\t\ttest = JumpLessThan\n\t\tcase opJumpSet:\n\t\t\ttest = JumpBitsNotSet\n\t\t}\n\n\t\treturn test, skipFalse, 0\n\t}\n\n\tswitch op {\n\tcase opJumpEqual:\n\t\ttest = JumpEqual\n\tcase opJumpGT:\n\t\ttest = JumpGreaterThan\n\tcase opJumpGE:\n\t\ttest = JumpGreaterOrEqual\n\tcase opJumpSet:\n\t\ttest = JumpBitsSet\n\t}\n\n\treturn test, skipTrue, skipFalse\n}\n\n// LoadConstant loads Val into register Dst.\ntype LoadConstant struct {\n\tDst Register\n\tVal uint32\n}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a LoadConstant) Assemble() (RawInstruction, error) {\n\treturn assembleLoad(a.Dst, 4, opAddrModeImmediate, a.Val)\n}\n\n// String returns the instruction in assembler notation.\nfunc (a LoadConstant) String() string {\n\tswitch a.Dst {\n\tcase RegA:\n\t\treturn fmt.Sprintf(\"ld #%d\", a.Val)\n\tcase RegX:\n\t\treturn fmt.Sprintf(\"ldx #%d\", a.Val)\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown instruction: %#v\", a)\n\t}\n}\n\n// LoadScratch loads scratch[N] into register Dst.\ntype LoadScratch struct {\n\tDst Register\n\tN   int // 0-15\n}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a LoadScratch) Assemble() (RawInstruction, error) {\n\tif a.N < 0 || a.N > 15 {\n\t\treturn RawInstruction{}, fmt.Errorf(\"invalid scratch slot %d\", a.N)\n\t}\n\treturn assembleLoad(a.Dst, 4, opAddrModeScratch, uint32(a.N))\n}\n\n// String returns the instruction in assembler notation.\nfunc (a LoadScratch) String() string {\n\tswitch a.Dst {\n\tcase RegA:\n\t\treturn fmt.Sprintf(\"ld M[%d]\", a.N)\n\tcase RegX:\n\t\treturn fmt.Sprintf(\"ldx M[%d]\", a.N)\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown instruction: %#v\", a)\n\t}\n}\n\n// LoadAbsolute loads packet[Off:Off+Size] as an integer value into\n// register A.\ntype LoadAbsolute struct {\n\tOff  uint32\n\tSize int // 1, 2 or 4\n}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a LoadAbsolute) Assemble() (RawInstruction, error) {\n\treturn assembleLoad(RegA, a.Size, opAddrModeAbsolute, a.Off)\n}\n\n// String returns the instruction in assembler notation.\nfunc (a LoadAbsolute) String() string {\n\tswitch a.Size {\n\tcase 1: // byte\n\t\treturn fmt.Sprintf(\"ldb [%d]\", a.Off)\n\tcase 2: // half word\n\t\treturn fmt.Sprintf(\"ldh [%d]\", a.Off)\n\tcase 4: // word\n\t\tif a.Off > extOffset+0xffffffff {\n\t\t\treturn LoadExtension{Num: Extension(a.Off + 0x1000)}.String()\n\t\t}\n\t\treturn fmt.Sprintf(\"ld [%d]\", a.Off)\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown instruction: %#v\", a)\n\t}\n}\n\n// LoadIndirect loads packet[X+Off:X+Off+Size] as an integer value\n// into register A.\ntype LoadIndirect struct {\n\tOff  uint32\n\tSize int // 1, 2 or 4\n}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a LoadIndirect) Assemble() (RawInstruction, error) {\n\treturn assembleLoad(RegA, a.Size, opAddrModeIndirect, a.Off)\n}\n\n// String returns the instruction in assembler notation.\nfunc (a LoadIndirect) String() string {\n\tswitch a.Size {\n\tcase 1: // byte\n\t\treturn fmt.Sprintf(\"ldb [x + %d]\", a.Off)\n\tcase 2: // half word\n\t\treturn fmt.Sprintf(\"ldh [x + %d]\", a.Off)\n\tcase 4: // word\n\t\treturn fmt.Sprintf(\"ld [x + %d]\", a.Off)\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown instruction: %#v\", a)\n\t}\n}\n\n// LoadMemShift multiplies the first 4 bits of the byte at packet[Off]\n// by 4 and stores the result in register X.\n//\n// This instruction is mainly useful to load into X the length of an\n// IPv4 packet header in a single instruction, rather than have to do\n// the arithmetic on the header's first byte by hand.\ntype LoadMemShift struct {\n\tOff uint32\n}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a LoadMemShift) Assemble() (RawInstruction, error) {\n\treturn assembleLoad(RegX, 1, opAddrModeMemShift, a.Off)\n}\n\n// String returns the instruction in assembler notation.\nfunc (a LoadMemShift) String() string {\n\treturn fmt.Sprintf(\"ldx 4*([%d]&0xf)\", a.Off)\n}\n\n// LoadExtension invokes a linux-specific extension and stores the\n// result in register A.\ntype LoadExtension struct {\n\tNum Extension\n}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a LoadExtension) Assemble() (RawInstruction, error) {\n\tif a.Num == ExtLen {\n\t\treturn assembleLoad(RegA, 4, opAddrModePacketLen, 0)\n\t}\n\treturn assembleLoad(RegA, 4, opAddrModeAbsolute, uint32(extOffset+a.Num))\n}\n\n// String returns the instruction in assembler notation.\nfunc (a LoadExtension) String() string {\n\tswitch a.Num {\n\tcase ExtLen:\n\t\treturn \"ld #len\"\n\tcase ExtProto:\n\t\treturn \"ld #proto\"\n\tcase ExtType:\n\t\treturn \"ld #type\"\n\tcase ExtPayloadOffset:\n\t\treturn \"ld #poff\"\n\tcase ExtInterfaceIndex:\n\t\treturn \"ld #ifidx\"\n\tcase ExtNetlinkAttr:\n\t\treturn \"ld #nla\"\n\tcase ExtNetlinkAttrNested:\n\t\treturn \"ld #nlan\"\n\tcase ExtMark:\n\t\treturn \"ld #mark\"\n\tcase ExtQueue:\n\t\treturn \"ld #queue\"\n\tcase ExtLinkLayerType:\n\t\treturn \"ld #hatype\"\n\tcase ExtRXHash:\n\t\treturn \"ld #rxhash\"\n\tcase ExtCPUID:\n\t\treturn \"ld #cpu\"\n\tcase ExtVLANTag:\n\t\treturn \"ld #vlan_tci\"\n\tcase ExtVLANTagPresent:\n\t\treturn \"ld #vlan_avail\"\n\tcase ExtVLANProto:\n\t\treturn \"ld #vlan_tpid\"\n\tcase ExtRand:\n\t\treturn \"ld #rand\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown instruction: %#v\", a)\n\t}\n}\n\n// StoreScratch stores register Src into scratch[N].\ntype StoreScratch struct {\n\tSrc Register\n\tN   int // 0-15\n}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a StoreScratch) Assemble() (RawInstruction, error) {\n\tif a.N < 0 || a.N > 15 {\n\t\treturn RawInstruction{}, fmt.Errorf(\"invalid scratch slot %d\", a.N)\n\t}\n\tvar op uint16\n\tswitch a.Src {\n\tcase RegA:\n\t\top = opClsStoreA\n\tcase RegX:\n\t\top = opClsStoreX\n\tdefault:\n\t\treturn RawInstruction{}, fmt.Errorf(\"invalid source register %v\", a.Src)\n\t}\n\n\treturn RawInstruction{\n\t\tOp: op,\n\t\tK:  uint32(a.N),\n\t}, nil\n}\n\n// String returns the instruction in assembler notation.\nfunc (a StoreScratch) String() string {\n\tswitch a.Src {\n\tcase RegA:\n\t\treturn fmt.Sprintf(\"st M[%d]\", a.N)\n\tcase RegX:\n\t\treturn fmt.Sprintf(\"stx M[%d]\", a.N)\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown instruction: %#v\", a)\n\t}\n}\n\n// ALUOpConstant executes A = A <Op> Val.\ntype ALUOpConstant struct {\n\tOp  ALUOp\n\tVal uint32\n}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a ALUOpConstant) Assemble() (RawInstruction, error) {\n\treturn RawInstruction{\n\t\tOp: opClsALU | uint16(opOperandConstant) | uint16(a.Op),\n\t\tK:  a.Val,\n\t}, nil\n}\n\n// String returns the instruction in assembler notation.\nfunc (a ALUOpConstant) String() string {\n\tswitch a.Op {\n\tcase ALUOpAdd:\n\t\treturn fmt.Sprintf(\"add #%d\", a.Val)\n\tcase ALUOpSub:\n\t\treturn fmt.Sprintf(\"sub #%d\", a.Val)\n\tcase ALUOpMul:\n\t\treturn fmt.Sprintf(\"mul #%d\", a.Val)\n\tcase ALUOpDiv:\n\t\treturn fmt.Sprintf(\"div #%d\", a.Val)\n\tcase ALUOpMod:\n\t\treturn fmt.Sprintf(\"mod #%d\", a.Val)\n\tcase ALUOpAnd:\n\t\treturn fmt.Sprintf(\"and #%d\", a.Val)\n\tcase ALUOpOr:\n\t\treturn fmt.Sprintf(\"or #%d\", a.Val)\n\tcase ALUOpXor:\n\t\treturn fmt.Sprintf(\"xor #%d\", a.Val)\n\tcase ALUOpShiftLeft:\n\t\treturn fmt.Sprintf(\"lsh #%d\", a.Val)\n\tcase ALUOpShiftRight:\n\t\treturn fmt.Sprintf(\"rsh #%d\", a.Val)\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown instruction: %#v\", a)\n\t}\n}\n\n// ALUOpX executes A = A <Op> X\ntype ALUOpX struct {\n\tOp ALUOp\n}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a ALUOpX) Assemble() (RawInstruction, error) {\n\treturn RawInstruction{\n\t\tOp: opClsALU | uint16(opOperandX) | uint16(a.Op),\n\t}, nil\n}\n\n// String returns the instruction in assembler notation.\nfunc (a ALUOpX) String() string {\n\tswitch a.Op {\n\tcase ALUOpAdd:\n\t\treturn \"add x\"\n\tcase ALUOpSub:\n\t\treturn \"sub x\"\n\tcase ALUOpMul:\n\t\treturn \"mul x\"\n\tcase ALUOpDiv:\n\t\treturn \"div x\"\n\tcase ALUOpMod:\n\t\treturn \"mod x\"\n\tcase ALUOpAnd:\n\t\treturn \"and x\"\n\tcase ALUOpOr:\n\t\treturn \"or x\"\n\tcase ALUOpXor:\n\t\treturn \"xor x\"\n\tcase ALUOpShiftLeft:\n\t\treturn \"lsh x\"\n\tcase ALUOpShiftRight:\n\t\treturn \"rsh x\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown instruction: %#v\", a)\n\t}\n}\n\n// NegateA executes A = -A.\ntype NegateA struct{}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a NegateA) Assemble() (RawInstruction, error) {\n\treturn RawInstruction{\n\t\tOp: opClsALU | uint16(aluOpNeg),\n\t}, nil\n}\n\n// String returns the instruction in assembler notation.\nfunc (a NegateA) String() string {\n\treturn fmt.Sprintf(\"neg\")\n}\n\n// Jump skips the following Skip instructions in the program.\ntype Jump struct {\n\tSkip uint32\n}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a Jump) Assemble() (RawInstruction, error) {\n\treturn RawInstruction{\n\t\tOp: opClsJump | uint16(opJumpAlways),\n\t\tK:  a.Skip,\n\t}, nil\n}\n\n// String returns the instruction in assembler notation.\nfunc (a Jump) String() string {\n\treturn fmt.Sprintf(\"ja %d\", a.Skip)\n}\n\n// JumpIf skips the following Skip instructions in the program if A\n// <Cond> Val is true.\ntype JumpIf struct {\n\tCond      JumpTest\n\tVal       uint32\n\tSkipTrue  uint8\n\tSkipFalse uint8\n}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a JumpIf) Assemble() (RawInstruction, error) {\n\treturn jumpToRaw(a.Cond, opOperandConstant, a.Val, a.SkipTrue, a.SkipFalse)\n}\n\n// String returns the instruction in assembler notation.\nfunc (a JumpIf) String() string {\n\treturn jumpToString(a.Cond, fmt.Sprintf(\"#%d\", a.Val), a.SkipTrue, a.SkipFalse)\n}\n\n// JumpIfX skips the following Skip instructions in the program if A\n// <Cond> X is true.\ntype JumpIfX struct {\n\tCond      JumpTest\n\tSkipTrue  uint8\n\tSkipFalse uint8\n}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a JumpIfX) Assemble() (RawInstruction, error) {\n\treturn jumpToRaw(a.Cond, opOperandX, 0, a.SkipTrue, a.SkipFalse)\n}\n\n// String returns the instruction in assembler notation.\nfunc (a JumpIfX) String() string {\n\treturn jumpToString(a.Cond, \"x\", a.SkipTrue, a.SkipFalse)\n}\n\n// jumpToRaw assembles a jump instruction into a RawInstruction\nfunc jumpToRaw(test JumpTest, operand opOperand, k uint32, skipTrue, skipFalse uint8) (RawInstruction, error) {\n\tvar (\n\t\tcond jumpOp\n\t\tflip bool\n\t)\n\tswitch test {\n\tcase JumpEqual:\n\t\tcond = opJumpEqual\n\tcase JumpNotEqual:\n\t\tcond, flip = opJumpEqual, true\n\tcase JumpGreaterThan:\n\t\tcond = opJumpGT\n\tcase JumpLessThan:\n\t\tcond, flip = opJumpGE, true\n\tcase JumpGreaterOrEqual:\n\t\tcond = opJumpGE\n\tcase JumpLessOrEqual:\n\t\tcond, flip = opJumpGT, true\n\tcase JumpBitsSet:\n\t\tcond = opJumpSet\n\tcase JumpBitsNotSet:\n\t\tcond, flip = opJumpSet, true\n\tdefault:\n\t\treturn RawInstruction{}, fmt.Errorf(\"unknown JumpTest %v\", test)\n\t}\n\tjt, jf := skipTrue, skipFalse\n\tif flip {\n\t\tjt, jf = jf, jt\n\t}\n\treturn RawInstruction{\n\t\tOp: opClsJump | uint16(cond) | uint16(operand),\n\t\tJt: jt,\n\t\tJf: jf,\n\t\tK:  k,\n\t}, nil\n}\n\n// jumpToString converts a jump instruction to assembler notation\nfunc jumpToString(cond JumpTest, operand string, skipTrue, skipFalse uint8) string {\n\tswitch cond {\n\t// K == A\n\tcase JumpEqual:\n\t\treturn conditionalJump(operand, skipTrue, skipFalse, \"jeq\", \"jneq\")\n\t// K != A\n\tcase JumpNotEqual:\n\t\treturn fmt.Sprintf(\"jneq %s,%d\", operand, skipTrue)\n\t// K > A\n\tcase JumpGreaterThan:\n\t\treturn conditionalJump(operand, skipTrue, skipFalse, \"jgt\", \"jle\")\n\t// K < A\n\tcase JumpLessThan:\n\t\treturn fmt.Sprintf(\"jlt %s,%d\", operand, skipTrue)\n\t// K >= A\n\tcase JumpGreaterOrEqual:\n\t\treturn conditionalJump(operand, skipTrue, skipFalse, \"jge\", \"jlt\")\n\t// K <= A\n\tcase JumpLessOrEqual:\n\t\treturn fmt.Sprintf(\"jle %s,%d\", operand, skipTrue)\n\t// K & A != 0\n\tcase JumpBitsSet:\n\t\tif skipFalse > 0 {\n\t\t\treturn fmt.Sprintf(\"jset %s,%d,%d\", operand, skipTrue, skipFalse)\n\t\t}\n\t\treturn fmt.Sprintf(\"jset %s,%d\", operand, skipTrue)\n\t// K & A == 0, there is no assembler instruction for JumpBitNotSet, use JumpBitSet and invert skips\n\tcase JumpBitsNotSet:\n\t\treturn jumpToString(JumpBitsSet, operand, skipFalse, skipTrue)\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown JumpTest %#v\", cond)\n\t}\n}\n\nfunc conditionalJump(operand string, skipTrue, skipFalse uint8, positiveJump, negativeJump string) string {\n\tif skipTrue > 0 {\n\t\tif skipFalse > 0 {\n\t\t\treturn fmt.Sprintf(\"%s %s,%d,%d\", positiveJump, operand, skipTrue, skipFalse)\n\t\t}\n\t\treturn fmt.Sprintf(\"%s %s,%d\", positiveJump, operand, skipTrue)\n\t}\n\treturn fmt.Sprintf(\"%s %s,%d\", negativeJump, operand, skipFalse)\n}\n\n// RetA exits the BPF program, returning the value of register A.\ntype RetA struct{}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a RetA) Assemble() (RawInstruction, error) {\n\treturn RawInstruction{\n\t\tOp: opClsReturn | opRetSrcA,\n\t}, nil\n}\n\n// String returns the instruction in assembler notation.\nfunc (a RetA) String() string {\n\treturn fmt.Sprintf(\"ret a\")\n}\n\n// RetConstant exits the BPF program, returning a constant value.\ntype RetConstant struct {\n\tVal uint32\n}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a RetConstant) Assemble() (RawInstruction, error) {\n\treturn RawInstruction{\n\t\tOp: opClsReturn | opRetSrcConstant,\n\t\tK:  a.Val,\n\t}, nil\n}\n\n// String returns the instruction in assembler notation.\nfunc (a RetConstant) String() string {\n\treturn fmt.Sprintf(\"ret #%d\", a.Val)\n}\n\n// TXA copies the value of register X to register A.\ntype TXA struct{}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a TXA) Assemble() (RawInstruction, error) {\n\treturn RawInstruction{\n\t\tOp: opClsMisc | opMiscTXA,\n\t}, nil\n}\n\n// String returns the instruction in assembler notation.\nfunc (a TXA) String() string {\n\treturn fmt.Sprintf(\"txa\")\n}\n\n// TAX copies the value of register A to register X.\ntype TAX struct{}\n\n// Assemble implements the Instruction Assemble method.\nfunc (a TAX) Assemble() (RawInstruction, error) {\n\treturn RawInstruction{\n\t\tOp: opClsMisc | opMiscTAX,\n\t}, nil\n}\n\n// String returns the instruction in assembler notation.\nfunc (a TAX) String() string {\n\treturn fmt.Sprintf(\"tax\")\n}\n\nfunc assembleLoad(dst Register, loadSize int, mode uint16, k uint32) (RawInstruction, error) {\n\tvar (\n\t\tcls uint16\n\t\tsz  uint16\n\t)\n\tswitch dst {\n\tcase RegA:\n\t\tcls = opClsLoadA\n\tcase RegX:\n\t\tcls = opClsLoadX\n\tdefault:\n\t\treturn RawInstruction{}, fmt.Errorf(\"invalid target register %v\", dst)\n\t}\n\tswitch loadSize {\n\tcase 1:\n\t\tsz = opLoadWidth1\n\tcase 2:\n\t\tsz = opLoadWidth2\n\tcase 4:\n\t\tsz = opLoadWidth4\n\tdefault:\n\t\treturn RawInstruction{}, fmt.Errorf(\"invalid load byte length %d\", sz)\n\t}\n\treturn RawInstruction{\n\t\tOp: cls | sz | mode,\n\t\tK:  k,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/bpf/setter.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\npackage bpf\n\n// A Setter is a type which can attach a compiled BPF filter to itself.\ntype Setter interface {\n\tSetBPF(filter []RawInstruction) error\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/bpf/vm.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 bpf\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\n// A VM is an emulated BPF virtual machine.\ntype VM struct {\n\tfilter []Instruction\n}\n\n// NewVM returns a new VM using the input BPF program.\nfunc NewVM(filter []Instruction) (*VM, error) {\n\tif len(filter) == 0 {\n\t\treturn nil, errors.New(\"one or more Instructions must be specified\")\n\t}\n\n\tfor i, ins := range filter {\n\t\tcheck := len(filter) - (i + 1)\n\t\tswitch ins := ins.(type) {\n\t\t// Check for out-of-bounds jumps in instructions\n\t\tcase Jump:\n\t\t\tif check <= int(ins.Skip) {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot jump %d instructions; jumping past program bounds\", ins.Skip)\n\t\t\t}\n\t\tcase JumpIf:\n\t\t\tif check <= int(ins.SkipTrue) {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot jump %d instructions in true case; jumping past program bounds\", ins.SkipTrue)\n\t\t\t}\n\t\t\tif check <= int(ins.SkipFalse) {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot jump %d instructions in false case; jumping past program bounds\", ins.SkipFalse)\n\t\t\t}\n\t\tcase JumpIfX:\n\t\t\tif check <= int(ins.SkipTrue) {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot jump %d instructions in true case; jumping past program bounds\", ins.SkipTrue)\n\t\t\t}\n\t\t\tif check <= int(ins.SkipFalse) {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot jump %d instructions in false case; jumping past program bounds\", ins.SkipFalse)\n\t\t\t}\n\t\t// Check for division or modulus by zero\n\t\tcase ALUOpConstant:\n\t\t\tif ins.Val != 0 {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tswitch ins.Op {\n\t\t\tcase ALUOpDiv, ALUOpMod:\n\t\t\t\treturn nil, errors.New(\"cannot divide by zero using ALUOpConstant\")\n\t\t\t}\n\t\t// Check for unknown extensions\n\t\tcase LoadExtension:\n\t\t\tswitch ins.Num {\n\t\t\tcase ExtLen:\n\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\"extension %d not implemented\", ins.Num)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Make sure last instruction is a return instruction\n\tswitch filter[len(filter)-1].(type) {\n\tcase RetA, RetConstant:\n\tdefault:\n\t\treturn nil, errors.New(\"BPF program must end with RetA or RetConstant\")\n\t}\n\n\t// Though our VM works using disassembled instructions, we\n\t// attempt to assemble the input filter anyway to ensure it is compatible\n\t// with an operating system VM.\n\t_, err := Assemble(filter)\n\n\treturn &VM{\n\t\tfilter: filter,\n\t}, err\n}\n\n// Run runs the VM's BPF program against the input bytes.\n// Run returns the number of bytes accepted by the BPF program, and any errors\n// which occurred while processing the program.\nfunc (v *VM) Run(in []byte) (int, error) {\n\tvar (\n\t\t// Registers of the virtual machine\n\t\tregA       uint32\n\t\tregX       uint32\n\t\tregScratch [16]uint32\n\n\t\t// OK is true if the program should continue processing the next\n\t\t// instruction, or false if not, causing the loop to break\n\t\tok = true\n\t)\n\n\t// TODO(mdlayher): implement:\n\t// - NegateA:\n\t//   - would require a change from uint32 registers to int32\n\t//     registers\n\n\t// TODO(mdlayher): add interop tests that check signedness of ALU\n\t// operations against kernel implementation, and make sure Go\n\t// implementation matches behavior\n\n\tfor i := 0; i < len(v.filter) && ok; i++ {\n\t\tins := v.filter[i]\n\n\t\tswitch ins := ins.(type) {\n\t\tcase ALUOpConstant:\n\t\t\tregA = aluOpConstant(ins, regA)\n\t\tcase ALUOpX:\n\t\t\tregA, ok = aluOpX(ins, regA, regX)\n\t\tcase Jump:\n\t\t\ti += int(ins.Skip)\n\t\tcase JumpIf:\n\t\t\tjump := jumpIf(ins, regA)\n\t\t\ti += jump\n\t\tcase JumpIfX:\n\t\t\tjump := jumpIfX(ins, regA, regX)\n\t\t\ti += jump\n\t\tcase LoadAbsolute:\n\t\t\tregA, ok = loadAbsolute(ins, in)\n\t\tcase LoadConstant:\n\t\t\tregA, regX = loadConstant(ins, regA, regX)\n\t\tcase LoadExtension:\n\t\t\tregA = loadExtension(ins, in)\n\t\tcase LoadIndirect:\n\t\t\tregA, ok = loadIndirect(ins, in, regX)\n\t\tcase LoadMemShift:\n\t\t\tregX, ok = loadMemShift(ins, in)\n\t\tcase LoadScratch:\n\t\t\tregA, regX = loadScratch(ins, regScratch, regA, regX)\n\t\tcase RetA:\n\t\t\treturn int(regA), nil\n\t\tcase RetConstant:\n\t\t\treturn int(ins.Val), nil\n\t\tcase StoreScratch:\n\t\t\tregScratch = storeScratch(ins, regScratch, regA, regX)\n\t\tcase TAX:\n\t\t\tregX = regA\n\t\tcase TXA:\n\t\t\tregA = regX\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"unknown Instruction at index %d: %T\", i, ins)\n\t\t}\n\t}\n\n\treturn 0, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/bpf/vm_instructions.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 bpf\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n)\n\nfunc aluOpConstant(ins ALUOpConstant, regA uint32) uint32 {\n\treturn aluOpCommon(ins.Op, regA, ins.Val)\n}\n\nfunc aluOpX(ins ALUOpX, regA uint32, regX uint32) (uint32, bool) {\n\t// Guard against division or modulus by zero by terminating\n\t// the program, as the OS BPF VM does\n\tif regX == 0 {\n\t\tswitch ins.Op {\n\t\tcase ALUOpDiv, ALUOpMod:\n\t\t\treturn 0, false\n\t\t}\n\t}\n\n\treturn aluOpCommon(ins.Op, regA, regX), true\n}\n\nfunc aluOpCommon(op ALUOp, regA uint32, value uint32) uint32 {\n\tswitch op {\n\tcase ALUOpAdd:\n\t\treturn regA + value\n\tcase ALUOpSub:\n\t\treturn regA - value\n\tcase ALUOpMul:\n\t\treturn regA * value\n\tcase ALUOpDiv:\n\t\t// Division by zero not permitted by NewVM and aluOpX checks\n\t\treturn regA / value\n\tcase ALUOpOr:\n\t\treturn regA | value\n\tcase ALUOpAnd:\n\t\treturn regA & value\n\tcase ALUOpShiftLeft:\n\t\treturn regA << value\n\tcase ALUOpShiftRight:\n\t\treturn regA >> value\n\tcase ALUOpMod:\n\t\t// Modulus by zero not permitted by NewVM and aluOpX checks\n\t\treturn regA % value\n\tcase ALUOpXor:\n\t\treturn regA ^ value\n\tdefault:\n\t\treturn regA\n\t}\n}\n\nfunc jumpIf(ins JumpIf, regA uint32) int {\n\treturn jumpIfCommon(ins.Cond, ins.SkipTrue, ins.SkipFalse, regA, ins.Val)\n}\n\nfunc jumpIfX(ins JumpIfX, regA uint32, regX uint32) int {\n\treturn jumpIfCommon(ins.Cond, ins.SkipTrue, ins.SkipFalse, regA, regX)\n}\n\nfunc jumpIfCommon(cond JumpTest, skipTrue, skipFalse uint8, regA uint32, value uint32) int {\n\tvar ok bool\n\n\tswitch cond {\n\tcase JumpEqual:\n\t\tok = regA == value\n\tcase JumpNotEqual:\n\t\tok = regA != value\n\tcase JumpGreaterThan:\n\t\tok = regA > value\n\tcase JumpLessThan:\n\t\tok = regA < value\n\tcase JumpGreaterOrEqual:\n\t\tok = regA >= value\n\tcase JumpLessOrEqual:\n\t\tok = regA <= value\n\tcase JumpBitsSet:\n\t\tok = (regA & value) != 0\n\tcase JumpBitsNotSet:\n\t\tok = (regA & value) == 0\n\t}\n\n\tif ok {\n\t\treturn int(skipTrue)\n\t}\n\n\treturn int(skipFalse)\n}\n\nfunc loadAbsolute(ins LoadAbsolute, in []byte) (uint32, bool) {\n\toffset := int(ins.Off)\n\tsize := ins.Size\n\n\treturn loadCommon(in, offset, size)\n}\n\nfunc loadConstant(ins LoadConstant, regA uint32, regX uint32) (uint32, uint32) {\n\tswitch ins.Dst {\n\tcase RegA:\n\t\tregA = ins.Val\n\tcase RegX:\n\t\tregX = ins.Val\n\t}\n\n\treturn regA, regX\n}\n\nfunc loadExtension(ins LoadExtension, in []byte) uint32 {\n\tswitch ins.Num {\n\tcase ExtLen:\n\t\treturn uint32(len(in))\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unimplemented extension: %d\", ins.Num))\n\t}\n}\n\nfunc loadIndirect(ins LoadIndirect, in []byte, regX uint32) (uint32, bool) {\n\toffset := int(ins.Off) + int(regX)\n\tsize := ins.Size\n\n\treturn loadCommon(in, offset, size)\n}\n\nfunc loadMemShift(ins LoadMemShift, in []byte) (uint32, bool) {\n\toffset := int(ins.Off)\n\n\t// Size of LoadMemShift is always 1 byte\n\tif !inBounds(len(in), offset, 1) {\n\t\treturn 0, false\n\t}\n\n\t// Mask off high 4 bits and multiply low 4 bits by 4\n\treturn uint32(in[offset]&0x0f) * 4, true\n}\n\nfunc inBounds(inLen int, offset int, size int) bool {\n\treturn offset+size <= inLen\n}\n\nfunc loadCommon(in []byte, offset int, size int) (uint32, bool) {\n\tif !inBounds(len(in), offset, size) {\n\t\treturn 0, false\n\t}\n\n\tswitch size {\n\tcase 1:\n\t\treturn uint32(in[offset]), true\n\tcase 2:\n\t\treturn uint32(binary.BigEndian.Uint16(in[offset : offset+size])), true\n\tcase 4:\n\t\treturn uint32(binary.BigEndian.Uint32(in[offset : offset+size])), true\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"invalid load size: %d\", size))\n\t}\n}\n\nfunc loadScratch(ins LoadScratch, regScratch [16]uint32, regA uint32, regX uint32) (uint32, uint32) {\n\tswitch ins.Dst {\n\tcase RegA:\n\t\tregA = regScratch[ins.N]\n\tcase RegX:\n\t\tregX = regScratch[ins.N]\n\t}\n\n\treturn regA, regX\n}\n\nfunc storeScratch(ins StoreScratch, regScratch [16]uint32, regA uint32, regX uint32) [16]uint32 {\n\tswitch ins.Src {\n\tcase RegA:\n\t\tregScratch[ins.N] = regA\n\tcase RegX:\n\t\tregScratch[ins.N] = regX\n\t}\n\n\treturn regScratch\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/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\tclear(s[:])\n}\n\n// Fill adds all possible CPU bits to the set s. On Linux, [SchedSetaffinity]\n// will silently ignore any invalid CPU bits in [CPUSet] so this is an\n// efficient way of resetting the CPU affinity of a process.\nfunc (s *CPUSet) Fill() {\n\tfor i := range s {\n\t\ts[i] = ^cpuMask(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\tclear(fds.Bits[:])\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\tclear(ifr.raw.Ifru[:])\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 \"unsafe\"\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// IoctlSetString performs an ioctl operation which sets a string value\n// on fd, using the specified request number.\nfunc IoctlSetString(fd int, req int, value string) error {\n\tbs := append([]byte(value), 0)\n\treturn ioctlPtr(fd, req, unsafe.Pointer(&bs[0]))\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 \"unsafe\"\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// IoctlSetString performs an ioctl operation which sets a string value\n// on fd, using the specified request number.\nfunc IoctlSetString(fd int, req uint, value string) error {\n\tbs := append([]byte(value), 0)\n\treturn ioctlPtr(fd, req, unsafe.Pointer(&bs[0]))\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\tset -e\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/elf.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/mei.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// Renamed in v6.16, commit c6d732c38f93 (\"net: ethtool: remove duplicate defines for family info\")\n#define ETHTOOL_FAMILY_NAME\tETHTOOL_GENL_NAME\n#define ETHTOOL_FAMILY_VERSION\tETHTOOL_GENL_VERSION\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 ~ /^(DT|EI|ELF|EV|NN|NT|PF|SHF|SHN|SHT|STB|STT|VER)_/ ||\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_|IOCTL_MEI_)/ ||\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\nconst minIovec = 8\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\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\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\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\n//sys\tconnectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error)\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\tclear(sa.raw[14 : 14+IFNAMSIZ])\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\n//sys\tsetMemPolicy(mode int, mask *CPUSet, size int) (err error) = SYS_SET_MEMPOLICY\n\nfunc SetMemPolicy(mode int, mask *CPUSet) error {\n\treturn setMemPolicy(mode, mask, _CPU_SETSIZE)\n}\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\nfunc Getvfsstat(buf []Statvfs_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(Statvfs_t{}) * uintptr(len(buf))\n\t}\n\tr0, _, e1 := Syscall(SYS_GETVFSSTAT, uintptr(_p0), bufsize, uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\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_listen\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\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\tif n, oobn, recvflags, err = recvmsgRaw(fd, iov[:], oob, flags, &rsa); err != nil {\n\t\treturn\n\t}\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\tif n, oobn, recvflags, err = recvmsgRaw(fd, iov, oob, flags, &rsa); 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// 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_INTEGRITY_USERSPACE                   = 0x710\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_LANDLOCK_ACCESS                       = 0x58f\n\tAUDIT_LANDLOCK_DOMAIN                       = 0x590\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_PREORDER                              = 0x40\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_LOAD_ACQ                                = 0x100\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_STORE_REL                               = 0x110\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 (2025-04-28)\"\n\tDM_VERSION_MAJOR                            = 0x4\n\tDM_VERSION_MINOR                            = 0x32\n\tDM_VERSION_PATCHLEVEL                       = 0x0\n\tDT_ADDRRNGHI                                = 0x6ffffeff\n\tDT_ADDRRNGLO                                = 0x6ffffe00\n\tDT_BLK                                      = 0x6\n\tDT_CHR                                      = 0x2\n\tDT_DEBUG                                    = 0x15\n\tDT_DIR                                      = 0x4\n\tDT_ENCODING                                 = 0x20\n\tDT_FIFO                                     = 0x1\n\tDT_FINI                                     = 0xd\n\tDT_FLAGS_1                                  = 0x6ffffffb\n\tDT_GNU_HASH                                 = 0x6ffffef5\n\tDT_HASH                                     = 0x4\n\tDT_HIOS                                     = 0x6ffff000\n\tDT_HIPROC                                   = 0x7fffffff\n\tDT_INIT                                     = 0xc\n\tDT_JMPREL                                   = 0x17\n\tDT_LNK                                      = 0xa\n\tDT_LOOS                                     = 0x6000000d\n\tDT_LOPROC                                   = 0x70000000\n\tDT_NEEDED                                   = 0x1\n\tDT_NULL                                     = 0x0\n\tDT_PLTGOT                                   = 0x3\n\tDT_PLTREL                                   = 0x14\n\tDT_PLTRELSZ                                 = 0x2\n\tDT_REG                                      = 0x8\n\tDT_REL                                      = 0x11\n\tDT_RELA                                     = 0x7\n\tDT_RELACOUNT                                = 0x6ffffff9\n\tDT_RELAENT                                  = 0x9\n\tDT_RELASZ                                   = 0x8\n\tDT_RELCOUNT                                 = 0x6ffffffa\n\tDT_RELENT                                   = 0x13\n\tDT_RELSZ                                    = 0x12\n\tDT_RPATH                                    = 0xf\n\tDT_SOCK                                     = 0xc\n\tDT_SONAME                                   = 0xe\n\tDT_STRSZ                                    = 0xa\n\tDT_STRTAB                                   = 0x5\n\tDT_SYMBOLIC                                 = 0x10\n\tDT_SYMENT                                   = 0xb\n\tDT_SYMTAB                                   = 0x6\n\tDT_TEXTREL                                  = 0x16\n\tDT_UNKNOWN                                  = 0x0\n\tDT_VALRNGHI                                 = 0x6ffffdff\n\tDT_VALRNGLO                                 = 0x6ffffd00\n\tDT_VERDEF                                   = 0x6ffffffc\n\tDT_VERDEFNUM                                = 0x6ffffffd\n\tDT_VERNEED                                  = 0x6ffffffe\n\tDT_VERNEEDNUM                               = 0x6fffffff\n\tDT_VERSYM                                   = 0x6ffffff0\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\tEI_CLASS                                    = 0x4\n\tEI_DATA                                     = 0x5\n\tEI_MAG0                                     = 0x0\n\tEI_MAG1                                     = 0x1\n\tEI_MAG2                                     = 0x2\n\tEI_MAG3                                     = 0x3\n\tEI_NIDENT                                   = 0x10\n\tEI_OSABI                                    = 0x7\n\tEI_PAD                                      = 0x8\n\tEI_VERSION                                  = 0x6\n\tELFCLASS32                                  = 0x1\n\tELFCLASS64                                  = 0x2\n\tELFCLASSNONE                                = 0x0\n\tELFCLASSNUM                                 = 0x3\n\tELFDATA2LSB                                 = 0x1\n\tELFDATA2MSB                                 = 0x2\n\tELFDATANONE                                 = 0x0\n\tELFMAG                                      = \"\\177ELF\"\n\tELFMAG0                                     = 0x7f\n\tELFMAG1                                     = 'E'\n\tELFMAG2                                     = 'L'\n\tELFMAG3                                     = 'F'\n\tELFOSABI_LINUX                              = 0x3\n\tELFOSABI_NONE                               = 0x0\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\tETHTOOL_BUSINFO_LEN                         = 0x20\n\tETHTOOL_EROMVERS_LEN                        = 0x20\n\tETHTOOL_FAMILY_NAME                         = \"ethtool\"\n\tETHTOOL_FAMILY_VERSION                      = 0x1\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\tET_CORE                                     = 0x4\n\tET_DYN                                      = 0x3\n\tET_EXEC                                     = 0x2\n\tET_HIPROC                                   = 0xffff\n\tET_LOPROC                                   = 0xff00\n\tET_NONE                                     = 0x0\n\tET_REL                                      = 0x1\n\tEV_ABS                                      = 0x3\n\tEV_CNT                                      = 0x20\n\tEV_CURRENT                                  = 0x1\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_NONE                                     = 0x0\n\tEV_NUM                                      = 0x2\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_ERRNO_BITS                              = 0x8\n\tFAN_ERRNO_MASK                              = 0xff\n\tFAN_ERRNO_SHIFT                             = 0x18\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_MNT                     = 0x7\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_INFO_TYPE_RANGE                   = 0x6\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_MNTNS                              = 0x110\n\tFAN_MARK_MOUNT                              = 0x10\n\tFAN_MARK_ONLYDIR                            = 0x8\n\tFAN_MARK_REMOVE                             = 0x2\n\tFAN_MNT_ATTACH                              = 0x1000000\n\tFAN_MNT_DETACH                              = 0x2000000\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_PRE_ACCESS                              = 0x100000\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_MNT                              = 0x4000\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_ADD_KEY_FLAG_HW_WRAPPED             = 0x1\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\tIOCTL_MEI_CONNECT_CLIENT                    = 0xc0104801\n\tIOCTL_MEI_CONNECT_CLIENT_VTAG               = 0xc0144804\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_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_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_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_ERRATA              = 0x2\n\tLANDLOCK_CREATE_RULESET_VERSION             = 0x1\n\tLANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON      = 0x2\n\tLANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF    = 0x1\n\tLANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF   = 0x4\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\tNN_386_IOPERM                               = \"LINUX\"\n\tNN_386_TLS                                  = \"LINUX\"\n\tNN_ARC_V2                                   = \"LINUX\"\n\tNN_ARM_FPMR                                 = \"LINUX\"\n\tNN_ARM_GCS                                  = \"LINUX\"\n\tNN_ARM_HW_BREAK                             = \"LINUX\"\n\tNN_ARM_HW_WATCH                             = \"LINUX\"\n\tNN_ARM_PACA_KEYS                            = \"LINUX\"\n\tNN_ARM_PACG_KEYS                            = \"LINUX\"\n\tNN_ARM_PAC_ENABLED_KEYS                     = \"LINUX\"\n\tNN_ARM_PAC_MASK                             = \"LINUX\"\n\tNN_ARM_POE                                  = \"LINUX\"\n\tNN_ARM_SSVE                                 = \"LINUX\"\n\tNN_ARM_SVE                                  = \"LINUX\"\n\tNN_ARM_SYSTEM_CALL                          = \"LINUX\"\n\tNN_ARM_TAGGED_ADDR_CTRL                     = \"LINUX\"\n\tNN_ARM_TLS                                  = \"LINUX\"\n\tNN_ARM_VFP                                  = \"LINUX\"\n\tNN_ARM_ZA                                   = \"LINUX\"\n\tNN_ARM_ZT                                   = \"LINUX\"\n\tNN_AUXV                                     = \"CORE\"\n\tNN_FILE                                     = \"CORE\"\n\tNN_GNU_PROPERTY_TYPE_0                      = \"GNU\"\n\tNN_LOONGARCH_CPUCFG                         = \"LINUX\"\n\tNN_LOONGARCH_CSR                            = \"LINUX\"\n\tNN_LOONGARCH_HW_BREAK                       = \"LINUX\"\n\tNN_LOONGARCH_HW_WATCH                       = \"LINUX\"\n\tNN_LOONGARCH_LASX                           = \"LINUX\"\n\tNN_LOONGARCH_LBT                            = \"LINUX\"\n\tNN_LOONGARCH_LSX                            = \"LINUX\"\n\tNN_MIPS_DSP                                 = \"LINUX\"\n\tNN_MIPS_FP_MODE                             = \"LINUX\"\n\tNN_MIPS_MSA                                 = \"LINUX\"\n\tNN_PPC_DEXCR                                = \"LINUX\"\n\tNN_PPC_DSCR                                 = \"LINUX\"\n\tNN_PPC_EBB                                  = \"LINUX\"\n\tNN_PPC_HASHKEYR                             = \"LINUX\"\n\tNN_PPC_PKEY                                 = \"LINUX\"\n\tNN_PPC_PMU                                  = \"LINUX\"\n\tNN_PPC_PPR                                  = \"LINUX\"\n\tNN_PPC_SPE                                  = \"LINUX\"\n\tNN_PPC_TAR                                  = \"LINUX\"\n\tNN_PPC_TM_CDSCR                             = \"LINUX\"\n\tNN_PPC_TM_CFPR                              = \"LINUX\"\n\tNN_PPC_TM_CGPR                              = \"LINUX\"\n\tNN_PPC_TM_CPPR                              = \"LINUX\"\n\tNN_PPC_TM_CTAR                              = \"LINUX\"\n\tNN_PPC_TM_CVMX                              = \"LINUX\"\n\tNN_PPC_TM_CVSX                              = \"LINUX\"\n\tNN_PPC_TM_SPR                               = \"LINUX\"\n\tNN_PPC_VMX                                  = \"LINUX\"\n\tNN_PPC_VSX                                  = \"LINUX\"\n\tNN_PRFPREG                                  = \"CORE\"\n\tNN_PRPSINFO                                 = \"CORE\"\n\tNN_PRSTATUS                                 = \"CORE\"\n\tNN_PRXFPREG                                 = \"LINUX\"\n\tNN_RISCV_CSR                                = \"LINUX\"\n\tNN_RISCV_TAGGED_ADDR_CTRL                   = \"LINUX\"\n\tNN_RISCV_VECTOR                             = \"LINUX\"\n\tNN_S390_CTRS                                = \"LINUX\"\n\tNN_S390_GS_BC                               = \"LINUX\"\n\tNN_S390_GS_CB                               = \"LINUX\"\n\tNN_S390_HIGH_GPRS                           = \"LINUX\"\n\tNN_S390_LAST_BREAK                          = \"LINUX\"\n\tNN_S390_PREFIX                              = \"LINUX\"\n\tNN_S390_PV_CPU_DATA                         = \"LINUX\"\n\tNN_S390_RI_CB                               = \"LINUX\"\n\tNN_S390_SYSTEM_CALL                         = \"LINUX\"\n\tNN_S390_TDB                                 = \"LINUX\"\n\tNN_S390_TIMER                               = \"LINUX\"\n\tNN_S390_TODCMP                              = \"LINUX\"\n\tNN_S390_TODPREG                             = \"LINUX\"\n\tNN_S390_VXRS_HIGH                           = \"LINUX\"\n\tNN_S390_VXRS_LOW                            = \"LINUX\"\n\tNN_SIGINFO                                  = \"CORE\"\n\tNN_TASKSTRUCT                               = \"CORE\"\n\tNN_VMCOREDD                                 = \"LINUX\"\n\tNN_X86_SHSTK                                = \"LINUX\"\n\tNN_X86_XSAVE_LAYOUT                         = \"LINUX\"\n\tNN_X86_XSTATE                               = \"LINUX\"\n\tNSFS_MAGIC                                  = 0x6e736673\n\tNT_386_IOPERM                               = 0x201\n\tNT_386_TLS                                  = 0x200\n\tNT_ARC_V2                                   = 0x600\n\tNT_ARM_FPMR                                 = 0x40e\n\tNT_ARM_GCS                                  = 0x410\n\tNT_ARM_HW_BREAK                             = 0x402\n\tNT_ARM_HW_WATCH                             = 0x403\n\tNT_ARM_PACA_KEYS                            = 0x407\n\tNT_ARM_PACG_KEYS                            = 0x408\n\tNT_ARM_PAC_ENABLED_KEYS                     = 0x40a\n\tNT_ARM_PAC_MASK                             = 0x406\n\tNT_ARM_POE                                  = 0x40f\n\tNT_ARM_SSVE                                 = 0x40b\n\tNT_ARM_SVE                                  = 0x405\n\tNT_ARM_SYSTEM_CALL                          = 0x404\n\tNT_ARM_TAGGED_ADDR_CTRL                     = 0x409\n\tNT_ARM_TLS                                  = 0x401\n\tNT_ARM_VFP                                  = 0x400\n\tNT_ARM_ZA                                   = 0x40c\n\tNT_ARM_ZT                                   = 0x40d\n\tNT_AUXV                                     = 0x6\n\tNT_FILE                                     = 0x46494c45\n\tNT_GNU_PROPERTY_TYPE_0                      = 0x5\n\tNT_LOONGARCH_CPUCFG                         = 0xa00\n\tNT_LOONGARCH_CSR                            = 0xa01\n\tNT_LOONGARCH_HW_BREAK                       = 0xa05\n\tNT_LOONGARCH_HW_WATCH                       = 0xa06\n\tNT_LOONGARCH_LASX                           = 0xa03\n\tNT_LOONGARCH_LBT                            = 0xa04\n\tNT_LOONGARCH_LSX                            = 0xa02\n\tNT_MIPS_DSP                                 = 0x800\n\tNT_MIPS_FP_MODE                             = 0x801\n\tNT_MIPS_MSA                                 = 0x802\n\tNT_PPC_DEXCR                                = 0x111\n\tNT_PPC_DSCR                                 = 0x105\n\tNT_PPC_EBB                                  = 0x106\n\tNT_PPC_HASHKEYR                             = 0x112\n\tNT_PPC_PKEY                                 = 0x110\n\tNT_PPC_PMU                                  = 0x107\n\tNT_PPC_PPR                                  = 0x104\n\tNT_PPC_SPE                                  = 0x101\n\tNT_PPC_TAR                                  = 0x103\n\tNT_PPC_TM_CDSCR                             = 0x10f\n\tNT_PPC_TM_CFPR                              = 0x109\n\tNT_PPC_TM_CGPR                              = 0x108\n\tNT_PPC_TM_CPPR                              = 0x10e\n\tNT_PPC_TM_CTAR                              = 0x10d\n\tNT_PPC_TM_CVMX                              = 0x10a\n\tNT_PPC_TM_CVSX                              = 0x10b\n\tNT_PPC_TM_SPR                               = 0x10c\n\tNT_PPC_VMX                                  = 0x100\n\tNT_PPC_VSX                                  = 0x102\n\tNT_PRFPREG                                  = 0x2\n\tNT_PRPSINFO                                 = 0x3\n\tNT_PRSTATUS                                 = 0x1\n\tNT_PRXFPREG                                 = 0x46e62b7f\n\tNT_RISCV_CSR                                = 0x900\n\tNT_RISCV_TAGGED_ADDR_CTRL                   = 0x902\n\tNT_RISCV_VECTOR                             = 0x901\n\tNT_S390_CTRS                                = 0x304\n\tNT_S390_GS_BC                               = 0x30c\n\tNT_S390_GS_CB                               = 0x30b\n\tNT_S390_HIGH_GPRS                           = 0x300\n\tNT_S390_LAST_BREAK                          = 0x306\n\tNT_S390_PREFIX                              = 0x305\n\tNT_S390_PV_CPU_DATA                         = 0x30e\n\tNT_S390_RI_CB                               = 0x30d\n\tNT_S390_SYSTEM_CALL                         = 0x307\n\tNT_S390_TDB                                 = 0x308\n\tNT_S390_TIMER                               = 0x301\n\tNT_S390_TODCMP                              = 0x302\n\tNT_S390_TODPREG                             = 0x303\n\tNT_S390_VXRS_HIGH                           = 0x30a\n\tNT_S390_VXRS_LOW                            = 0x309\n\tNT_SIGINFO                                  = 0x53494749\n\tNT_TASKSTRUCT                               = 0x4\n\tNT_VMCOREDD                                 = 0x700\n\tNT_X86_SHSTK                                = 0x204\n\tNT_X86_XSAVE_LAYOUT                         = 0x205\n\tNT_X86_XSTATE                               = 0x202\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\tPF_ALG                                      = 0x26\n\tPF_APPLETALK                                = 0x5\n\tPF_ASH                                      = 0x12\n\tPF_ATMPVC                                   = 0x8\n\tPF_ATMSVC                                   = 0x14\n\tPF_AX25                                     = 0x3\n\tPF_BLUETOOTH                                = 0x1f\n\tPF_BRIDGE                                   = 0x7\n\tPF_CAIF                                     = 0x25\n\tPF_CAN                                      = 0x1d\n\tPF_DECnet                                   = 0xc\n\tPF_ECONET                                   = 0x13\n\tPF_FILE                                     = 0x1\n\tPF_IB                                       = 0x1b\n\tPF_IEEE802154                               = 0x24\n\tPF_INET                                     = 0x2\n\tPF_INET6                                    = 0xa\n\tPF_IPX                                      = 0x4\n\tPF_IRDA                                     = 0x17\n\tPF_ISDN                                     = 0x22\n\tPF_IUCV                                     = 0x20\n\tPF_KCM                                      = 0x29\n\tPF_KEY                                      = 0xf\n\tPF_LLC                                      = 0x1a\n\tPF_LOCAL                                    = 0x1\n\tPF_MAX                                      = 0x2e\n\tPF_MCTP                                     = 0x2d\n\tPF_MPLS                                     = 0x1c\n\tPF_NETBEUI                                  = 0xd\n\tPF_NETLINK                                  = 0x10\n\tPF_NETROM                                   = 0x6\n\tPF_NFC                                      = 0x27\n\tPF_PACKET                                   = 0x11\n\tPF_PHONET                                   = 0x23\n\tPF_PPPOX                                    = 0x18\n\tPF_QIPCRTR                                  = 0x2a\n\tPF_R                                        = 0x4\n\tPF_RDS                                      = 0x15\n\tPF_ROSE                                     = 0xb\n\tPF_ROUTE                                    = 0x10\n\tPF_RXRPC                                    = 0x21\n\tPF_SECURITY                                 = 0xe\n\tPF_SMC                                      = 0x2b\n\tPF_SNA                                      = 0x16\n\tPF_TIPC                                     = 0x1e\n\tPF_UNIX                                     = 0x1\n\tPF_UNSPEC                                   = 0x0\n\tPF_VSOCK                                    = 0x28\n\tPF_W                                        = 0x2\n\tPF_WANPIPE                                  = 0x19\n\tPF_X                                        = 0x1\n\tPF_X25                                      = 0x9\n\tPF_XDP                                      = 0x2c\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_FUTEX_HASH                               = 0x4e\n\tPR_FUTEX_HASH_GET_IMMUTABLE                 = 0x3\n\tPR_FUTEX_HASH_GET_SLOTS                     = 0x2\n\tPR_FUTEX_HASH_SET_SLOTS                     = 0x1\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_TIMER_CREATE_RESTORE_IDS                 = 0x4d\n\tPR_TIMER_CREATE_RESTORE_IDS_GET             = 0x2\n\tPR_TIMER_CREATE_RESTORE_IDS_OFF             = 0x0\n\tPR_TIMER_CREATE_RESTORE_IDS_ON              = 0x1\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_INFO                     = 0x4212\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\tPT_AARCH64_MEMTAG_MTE                       = 0x70000002\n\tPT_DYNAMIC                                  = 0x2\n\tPT_GNU_EH_FRAME                             = 0x6474e550\n\tPT_GNU_PROPERTY                             = 0x6474e553\n\tPT_GNU_RELRO                                = 0x6474e552\n\tPT_GNU_STACK                                = 0x6474e551\n\tPT_HIOS                                     = 0x6fffffff\n\tPT_HIPROC                                   = 0x7fffffff\n\tPT_INTERP                                   = 0x3\n\tPT_LOAD                                     = 0x1\n\tPT_LOOS                                     = 0x60000000\n\tPT_LOPROC                                   = 0x70000000\n\tPT_NOTE                                     = 0x4\n\tPT_NULL                                     = 0x0\n\tPT_PHDR                                     = 0x6\n\tPT_SHLIB                                    = 0x5\n\tPT_TLS                                      = 0x7\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                                     = 0x1f\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_DELANYCAST                              = 0x3d\n\tRTM_DELCHAIN                                = 0x65\n\tRTM_DELLINK                                 = 0x11\n\tRTM_DELLINKPROP                             = 0x6d\n\tRTM_DELMDB                                  = 0x55\n\tRTM_DELMULTICAST                            = 0x39\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_NEWANYCAST                              = 0x3c\n\tRTM_NEWCACHEREPORT                          = 0x60\n\tRTM_NEWCHAIN                                = 0x64\n\tRTM_NEWLINK                                 = 0x10\n\tRTM_NEWLINKPROP                             = 0x6c\n\tRTM_NEWMDB                                  = 0x54\n\tRTM_NEWMULTICAST                            = 0x38\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_OVN                                  = 0x54\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_DONTCACHE                               = 0x80\n\tRWF_DSYNC                                   = 0x2\n\tRWF_HIPRI                                   = 0x1\n\tRWF_NOAPPEND                                = 0x20\n\tRWF_NOWAIT                                  = 0x8\n\tRWF_SUPPORTED                               = 0xff\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\tSHF_ALLOC                                   = 0x2\n\tSHF_EXCLUDE                                 = 0x8000000\n\tSHF_EXECINSTR                               = 0x4\n\tSHF_GROUP                                   = 0x200\n\tSHF_INFO_LINK                               = 0x40\n\tSHF_LINK_ORDER                              = 0x80\n\tSHF_MASKOS                                  = 0xff00000\n\tSHF_MASKPROC                                = 0xf0000000\n\tSHF_MERGE                                   = 0x10\n\tSHF_ORDERED                                 = 0x4000000\n\tSHF_OS_NONCONFORMING                        = 0x100\n\tSHF_RELA_LIVEPATCH                          = 0x100000\n\tSHF_RO_AFTER_INIT                           = 0x200000\n\tSHF_STRINGS                                 = 0x20\n\tSHF_TLS                                     = 0x400\n\tSHF_WRITE                                   = 0x1\n\tSHN_ABS                                     = 0xfff1\n\tSHN_COMMON                                  = 0xfff2\n\tSHN_HIPROC                                  = 0xff1f\n\tSHN_HIRESERVE                               = 0xffff\n\tSHN_LIVEPATCH                               = 0xff20\n\tSHN_LOPROC                                  = 0xff00\n\tSHN_LORESERVE                               = 0xff00\n\tSHN_UNDEF                                   = 0x0\n\tSHT_DYNAMIC                                 = 0x6\n\tSHT_DYNSYM                                  = 0xb\n\tSHT_HASH                                    = 0x5\n\tSHT_HIPROC                                  = 0x7fffffff\n\tSHT_HIUSER                                  = 0xffffffff\n\tSHT_LOPROC                                  = 0x70000000\n\tSHT_LOUSER                                  = 0x80000000\n\tSHT_NOBITS                                  = 0x8\n\tSHT_NOTE                                    = 0x7\n\tSHT_NULL                                    = 0x0\n\tSHT_NUM                                     = 0xc\n\tSHT_PROGBITS                                = 0x1\n\tSHT_REL                                     = 0x9\n\tSHT_RELA                                    = 0x4\n\tSHT_SHLIB                                   = 0xa\n\tSHT_STRTAB                                  = 0x3\n\tSHT_SYMTAB                                  = 0x2\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_DIO_READ_ALIGN                        = 0x20000\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\tSTB_GLOBAL                                  = 0x1\n\tSTB_LOCAL                                   = 0x0\n\tSTB_WEAK                                    = 0x2\n\tSTT_COMMON                                  = 0x5\n\tSTT_FILE                                    = 0x4\n\tSTT_FUNC                                    = 0x2\n\tSTT_NOTYPE                                  = 0x0\n\tSTT_OBJECT                                  = 0x1\n\tSTT_SECTION                                 = 0x3\n\tSTT_TLS                                     = 0x6\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                           = 0x10\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_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\tUBI_IOCECNFO                                = 0xc01c6f06\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\tUMOUNT_NOFOLLOW                             = 0x8\n\tUSBDEVICE_SUPER_MAGIC                       = 0x9fa2\n\tUTIME_NOW                                   = 0x3fffffff\n\tUTIME_OMIT                                  = 0x3ffffffe\n\tV9FS_MAGIC                                  = 0x1021997\n\tVERASE                                      = 0x2\n\tVER_FLG_BASE                                = 0x1\n\tVER_FLG_WEAK                                = 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                           = 0x4\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_LAUNCH_TIME                  = 0x4\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\tDM_MPATH_PROBE_PATHS             = 0xfd12\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_MEI_NOTIFY_GET             = 0x80044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x40044802\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_PASSRIGHTS                    = 0x53\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_RCVPRIORITY                   = 0x52\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\tDM_MPATH_PROBE_PATHS             = 0xfd12\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_MEI_NOTIFY_GET             = 0x80044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x40044802\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_PASSRIGHTS                    = 0x53\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_RCVPRIORITY                   = 0x52\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\tDM_MPATH_PROBE_PATHS             = 0xfd12\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_MEI_NOTIFY_GET             = 0x80044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x40044802\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_PASSRIGHTS                    = 0x53\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_RCVPRIORITY                   = 0x52\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\tDM_MPATH_PROBE_PATHS             = 0xfd12\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_MEI_NOTIFY_GET             = 0x80044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x40044802\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_PASSRIGHTS                    = 0x53\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_RCVPRIORITY                   = 0x52\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\tDM_MPATH_PROBE_PATHS             = 0xfd12\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_MEI_NOTIFY_GET             = 0x80044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x40044802\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_PASSRIGHTS                    = 0x53\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_RCVPRIORITY                   = 0x52\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\tDM_MPATH_PROBE_PATHS             = 0x2000fd12\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_MEI_NOTIFY_GET             = 0x40044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x80044802\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_PASSRIGHTS                    = 0x53\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_RCVPRIORITY                   = 0x52\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\tDM_MPATH_PROBE_PATHS             = 0x2000fd12\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_MEI_NOTIFY_GET             = 0x40044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x80044802\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_PASSRIGHTS                    = 0x53\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_RCVPRIORITY                   = 0x52\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\tDM_MPATH_PROBE_PATHS             = 0x2000fd12\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_MEI_NOTIFY_GET             = 0x40044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x80044802\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_PASSRIGHTS                    = 0x53\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_RCVPRIORITY                   = 0x52\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\tDM_MPATH_PROBE_PATHS             = 0x2000fd12\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_MEI_NOTIFY_GET             = 0x40044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x80044802\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_PASSRIGHTS                    = 0x53\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_RCVPRIORITY                   = 0x52\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\tDM_MPATH_PROBE_PATHS             = 0x2000fd12\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_MEI_NOTIFY_GET             = 0x40044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x80044802\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_PASSRIGHTS                    = 0x53\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_RCVPRIORITY                   = 0x52\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\tDM_MPATH_PROBE_PATHS             = 0x2000fd12\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_MEI_NOTIFY_GET             = 0x40044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x80044802\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_PASSRIGHTS                    = 0x53\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_RCVPRIORITY                   = 0x52\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\tDM_MPATH_PROBE_PATHS             = 0x2000fd12\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_MEI_NOTIFY_GET             = 0x40044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x80044802\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_PASSRIGHTS                    = 0x53\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_RCVPRIORITY                   = 0x52\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\tDM_MPATH_PROBE_PATHS             = 0xfd12\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_MEI_NOTIFY_GET             = 0x80044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x40044802\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_PASSRIGHTS                    = 0x53\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_RCVPRIORITY                   = 0x52\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\tDM_MPATH_PROBE_PATHS             = 0xfd12\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_MEI_NOTIFY_GET             = 0x80044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x40044802\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_PASSRIGHTS                    = 0x53\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_RCVPRIORITY                   = 0x52\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\tDM_MPATH_PROBE_PATHS             = 0x2000fd12\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_MEI_NOTIFY_GET             = 0x40044803\n\tIOCTL_MEI_NOTIFY_SET             = 0x80044802\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_PASSRIGHTS                    = 0x5c\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_RCVPRIORITY                   = 0x5b\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\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setMemPolicy(mode int, mask *CPUSet, size int) (err error) {\n\t_, _, e1 := Syscall(SYS_SET_MEMPOLICY, uintptr(mode), uintptr(unsafe.Pointer(mask)), uintptr(size))\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_amd64.s",
    "content": "// go run mkasm.go openbsd amd64\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_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_listen __xnet_listen \"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_listen libc___xnet_listen\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_listen,\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_listen)), 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_386.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build 386 && 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_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/zsysctl_openbsd_ppc64.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build ppc64 && 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_riscv64.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build riscv64 && 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.nselcoll\", []_C_int{1, 43}},\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_darwin_arm64.go",
    "content": "// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && 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_MAXSYSCALL                     = 530\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_amd64.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 amd64 && 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_arm.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 arm && 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_arm64.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 arm64 && 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_386.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/386/include -m32 /tmp/386/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && linux\n\npackage unix\n\nconst (\n\tSYS_RESTART_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_WAITPID                      = 7\n\tSYS_CREAT                        = 8\n\tSYS_LINK                         = 9\n\tSYS_UNLINK                       = 10\n\tSYS_EXECVE                       = 11\n\tSYS_CHDIR                        = 12\n\tSYS_TIME                         = 13\n\tSYS_MKNOD                        = 14\n\tSYS_CHMOD                        = 15\n\tSYS_LCHOWN                       = 16\n\tSYS_BREAK                        = 17\n\tSYS_OLDSTAT                      = 18\n\tSYS_LSEEK                        = 19\n\tSYS_GETPID                       = 20\n\tSYS_MOUNT                        = 21\n\tSYS_UMOUNT                       = 22\n\tSYS_SETUID                       = 23\n\tSYS_GETUID                       = 24\n\tSYS_STIME                        = 25\n\tSYS_PTRACE                       = 26\n\tSYS_ALARM                        = 27\n\tSYS_OLDFSTAT                     = 28\n\tSYS_PAUSE                        = 29\n\tSYS_UTIME                        = 30\n\tSYS_STTY                         = 31\n\tSYS_GTTY                         = 32\n\tSYS_ACCESS                       = 33\n\tSYS_NICE                         = 34\n\tSYS_FTIME                        = 35\n\tSYS_SYNC                         = 36\n\tSYS_KILL                         = 37\n\tSYS_RENAME                       = 38\n\tSYS_MKDIR                        = 39\n\tSYS_RMDIR                        = 40\n\tSYS_DUP                          = 41\n\tSYS_PIPE                         = 42\n\tSYS_TIMES                        = 43\n\tSYS_PROF                         = 44\n\tSYS_BRK                          = 45\n\tSYS_SETGID                       = 46\n\tSYS_GETGID                       = 47\n\tSYS_SIGNAL                       = 48\n\tSYS_GETEUID                      = 49\n\tSYS_GETEGID                      = 50\n\tSYS_ACCT                         = 51\n\tSYS_UMOUNT2                      = 52\n\tSYS_LOCK                         = 53\n\tSYS_IOCTL                        = 54\n\tSYS_FCNTL                        = 55\n\tSYS_MPX                          = 56\n\tSYS_SETPGID                      = 57\n\tSYS_ULIMIT                       = 58\n\tSYS_OLDOLDUNAME                  = 59\n\tSYS_UMASK                        = 60\n\tSYS_CHROOT                       = 61\n\tSYS_USTAT                        = 62\n\tSYS_DUP2                         = 63\n\tSYS_GETPPID                      = 64\n\tSYS_GETPGRP                      = 65\n\tSYS_SETSID                       = 66\n\tSYS_SIGACTION                    = 67\n\tSYS_SGETMASK                     = 68\n\tSYS_SSETMASK                     = 69\n\tSYS_SETREUID                     = 70\n\tSYS_SETREGID                     = 71\n\tSYS_SIGSUSPEND                   = 72\n\tSYS_SIGPENDING                   = 73\n\tSYS_SETHOSTNAME                  = 74\n\tSYS_SETRLIMIT                    = 75\n\tSYS_GETRLIMIT                    = 76\n\tSYS_GETRUSAGE                    = 77\n\tSYS_GETTIMEOFDAY                 = 78\n\tSYS_SETTIMEOFDAY                 = 79\n\tSYS_GETGROUPS                    = 80\n\tSYS_SETGROUPS                    = 81\n\tSYS_SELECT                       = 82\n\tSYS_SYMLINK                      = 83\n\tSYS_OLDLSTAT                     = 84\n\tSYS_READLINK                     = 85\n\tSYS_USELIB                       = 86\n\tSYS_SWAPON                       = 87\n\tSYS_REBOOT                       = 88\n\tSYS_READDIR                      = 89\n\tSYS_MMAP                         = 90\n\tSYS_MUNMAP                       = 91\n\tSYS_TRUNCATE                     = 92\n\tSYS_FTRUNCATE                    = 93\n\tSYS_FCHMOD                       = 94\n\tSYS_FCHOWN                       = 95\n\tSYS_GETPRIORITY                  = 96\n\tSYS_SETPRIORITY                  = 97\n\tSYS_PROFIL                       = 98\n\tSYS_STATFS                       = 99\n\tSYS_FSTATFS                      = 100\n\tSYS_IOPERM                       = 101\n\tSYS_SOCKETCALL                   = 102\n\tSYS_SYSLOG                       = 103\n\tSYS_SETITIMER                    = 104\n\tSYS_GETITIMER                    = 105\n\tSYS_STAT                         = 106\n\tSYS_LSTAT                        = 107\n\tSYS_FSTAT                        = 108\n\tSYS_OLDUNAME                     = 109\n\tSYS_IOPL                         = 110\n\tSYS_VHANGUP                      = 111\n\tSYS_IDLE                         = 112\n\tSYS_VM86OLD                      = 113\n\tSYS_WAIT4                        = 114\n\tSYS_SWAPOFF                      = 115\n\tSYS_SYSINFO                      = 116\n\tSYS_IPC                          = 117\n\tSYS_FSYNC                        = 118\n\tSYS_SIGRETURN                    = 119\n\tSYS_CLONE                        = 120\n\tSYS_SETDOMAINNAME                = 121\n\tSYS_UNAME                        = 122\n\tSYS_MODIFY_LDT                   = 123\n\tSYS_ADJTIMEX                     = 124\n\tSYS_MPROTECT                     = 125\n\tSYS_SIGPROCMASK                  = 126\n\tSYS_CREATE_MODULE                = 127\n\tSYS_INIT_MODULE                  = 128\n\tSYS_DELETE_MODULE                = 129\n\tSYS_GET_KERNEL_SYMS              = 130\n\tSYS_QUOTACTL                     = 131\n\tSYS_GETPGID                      = 132\n\tSYS_FCHDIR                       = 133\n\tSYS_BDFLUSH                      = 134\n\tSYS_SYSFS                        = 135\n\tSYS_PERSONALITY                  = 136\n\tSYS_AFS_SYSCALL                  = 137\n\tSYS_SETFSUID                     = 138\n\tSYS_SETFSGID                     = 139\n\tSYS__LLSEEK                      = 140\n\tSYS_GETDENTS                     = 141\n\tSYS__NEWSELECT                   = 142\n\tSYS_FLOCK                        = 143\n\tSYS_MSYNC                        = 144\n\tSYS_READV                        = 145\n\tSYS_WRITEV                       = 146\n\tSYS_GETSID                       = 147\n\tSYS_FDATASYNC                    = 148\n\tSYS__SYSCTL                      = 149\n\tSYS_MLOCK                        = 150\n\tSYS_MUNLOCK                      = 151\n\tSYS_MLOCKALL                     = 152\n\tSYS_MUNLOCKALL                   = 153\n\tSYS_SCHED_SETPARAM               = 154\n\tSYS_SCHED_GETPARAM               = 155\n\tSYS_SCHED_SETSCHEDULER           = 156\n\tSYS_SCHED_GETSCHEDULER           = 157\n\tSYS_SCHED_YIELD                  = 158\n\tSYS_SCHED_GET_PRIORITY_MAX       = 159\n\tSYS_SCHED_GET_PRIORITY_MIN       = 160\n\tSYS_SCHED_RR_GET_INTERVAL        = 161\n\tSYS_NANOSLEEP                    = 162\n\tSYS_MREMAP                       = 163\n\tSYS_SETRESUID                    = 164\n\tSYS_GETRESUID                    = 165\n\tSYS_VM86                         = 166\n\tSYS_QUERY_MODULE                 = 167\n\tSYS_POLL                         = 168\n\tSYS_NFSSERVCTL                   = 169\n\tSYS_SETRESGID                    = 170\n\tSYS_GETRESGID                    = 171\n\tSYS_PRCTL                        = 172\n\tSYS_RT_SIGRETURN                 = 173\n\tSYS_RT_SIGACTION                 = 174\n\tSYS_RT_SIGPROCMASK               = 175\n\tSYS_RT_SIGPENDING                = 176\n\tSYS_RT_SIGTIMEDWAIT              = 177\n\tSYS_RT_SIGQUEUEINFO              = 178\n\tSYS_RT_SIGSUSPEND                = 179\n\tSYS_PREAD64                      = 180\n\tSYS_PWRITE64                     = 181\n\tSYS_CHOWN                        = 182\n\tSYS_GETCWD                       = 183\n\tSYS_CAPGET                       = 184\n\tSYS_CAPSET                       = 185\n\tSYS_SIGALTSTACK                  = 186\n\tSYS_SENDFILE                     = 187\n\tSYS_GETPMSG                      = 188\n\tSYS_PUTPMSG                      = 189\n\tSYS_VFORK                        = 190\n\tSYS_UGETRLIMIT                   = 191\n\tSYS_MMAP2                        = 192\n\tSYS_TRUNCATE64                   = 193\n\tSYS_FTRUNCATE64                  = 194\n\tSYS_STAT64                       = 195\n\tSYS_LSTAT64                      = 196\n\tSYS_FSTAT64                      = 197\n\tSYS_LCHOWN32                     = 198\n\tSYS_GETUID32                     = 199\n\tSYS_GETGID32                     = 200\n\tSYS_GETEUID32                    = 201\n\tSYS_GETEGID32                    = 202\n\tSYS_SETREUID32                   = 203\n\tSYS_SETREGID32                   = 204\n\tSYS_GETGROUPS32                  = 205\n\tSYS_SETGROUPS32                  = 206\n\tSYS_FCHOWN32                     = 207\n\tSYS_SETRESUID32                  = 208\n\tSYS_GETRESUID32                  = 209\n\tSYS_SETRESGID32                  = 210\n\tSYS_GETRESGID32                  = 211\n\tSYS_CHOWN32                      = 212\n\tSYS_SETUID32                     = 213\n\tSYS_SETGID32                     = 214\n\tSYS_SETFSUID32                   = 215\n\tSYS_SETFSGID32                   = 216\n\tSYS_PIVOT_ROOT                   = 217\n\tSYS_MINCORE                      = 218\n\tSYS_MADVISE                      = 219\n\tSYS_GETDENTS64                   = 220\n\tSYS_FCNTL64                      = 221\n\tSYS_GETTID                       = 224\n\tSYS_READAHEAD                    = 225\n\tSYS_SETXATTR                     = 226\n\tSYS_LSETXATTR                    = 227\n\tSYS_FSETXATTR                    = 228\n\tSYS_GETXATTR                     = 229\n\tSYS_LGETXATTR                    = 230\n\tSYS_FGETXATTR                    = 231\n\tSYS_LISTXATTR                    = 232\n\tSYS_LLISTXATTR                   = 233\n\tSYS_FLISTXATTR                   = 234\n\tSYS_REMOVEXATTR                  = 235\n\tSYS_LREMOVEXATTR                 = 236\n\tSYS_FREMOVEXATTR                 = 237\n\tSYS_TKILL                        = 238\n\tSYS_SENDFILE64                   = 239\n\tSYS_FUTEX                        = 240\n\tSYS_SCHED_SETAFFINITY            = 241\n\tSYS_SCHED_GETAFFINITY            = 242\n\tSYS_SET_THREAD_AREA              = 243\n\tSYS_GET_THREAD_AREA              = 244\n\tSYS_IO_SETUP                     = 245\n\tSYS_IO_DESTROY                   = 246\n\tSYS_IO_GETEVENTS                 = 247\n\tSYS_IO_SUBMIT                    = 248\n\tSYS_IO_CANCEL                    = 249\n\tSYS_FADVISE64                    = 250\n\tSYS_EXIT_GROUP                   = 252\n\tSYS_LOOKUP_DCOOKIE               = 253\n\tSYS_EPOLL_CREATE                 = 254\n\tSYS_EPOLL_CTL                    = 255\n\tSYS_EPOLL_WAIT                   = 256\n\tSYS_REMAP_FILE_PAGES             = 257\n\tSYS_SET_TID_ADDRESS              = 258\n\tSYS_TIMER_CREATE                 = 259\n\tSYS_TIMER_SETTIME                = 260\n\tSYS_TIMER_GETTIME                = 261\n\tSYS_TIMER_GETOVERRUN             = 262\n\tSYS_TIMER_DELETE                 = 263\n\tSYS_CLOCK_SETTIME                = 264\n\tSYS_CLOCK_GETTIME                = 265\n\tSYS_CLOCK_GETRES                 = 266\n\tSYS_CLOCK_NANOSLEEP              = 267\n\tSYS_STATFS64                     = 268\n\tSYS_FSTATFS64                    = 269\n\tSYS_TGKILL                       = 270\n\tSYS_UTIMES                       = 271\n\tSYS_FADVISE64_64                 = 272\n\tSYS_VSERVER                      = 273\n\tSYS_MBIND                        = 274\n\tSYS_GET_MEMPOLICY                = 275\n\tSYS_SET_MEMPOLICY                = 276\n\tSYS_MQ_OPEN                      = 277\n\tSYS_MQ_UNLINK                    = 278\n\tSYS_MQ_TIMEDSEND                 = 279\n\tSYS_MQ_TIMEDRECEIVE              = 280\n\tSYS_MQ_NOTIFY                    = 281\n\tSYS_MQ_GETSETATTR                = 282\n\tSYS_KEXEC_LOAD                   = 283\n\tSYS_WAITID                       = 284\n\tSYS_ADD_KEY                      = 286\n\tSYS_REQUEST_KEY                  = 287\n\tSYS_KEYCTL                       = 288\n\tSYS_IOPRIO_SET                   = 289\n\tSYS_IOPRIO_GET                   = 290\n\tSYS_INOTIFY_INIT                 = 291\n\tSYS_INOTIFY_ADD_WATCH            = 292\n\tSYS_INOTIFY_RM_WATCH             = 293\n\tSYS_MIGRATE_PAGES                = 294\n\tSYS_OPENAT                       = 295\n\tSYS_MKDIRAT                      = 296\n\tSYS_MKNODAT                      = 297\n\tSYS_FCHOWNAT                     = 298\n\tSYS_FUTIMESAT                    = 299\n\tSYS_FSTATAT64                    = 300\n\tSYS_UNLINKAT                     = 301\n\tSYS_RENAMEAT                     = 302\n\tSYS_LINKAT                       = 303\n\tSYS_SYMLINKAT                    = 304\n\tSYS_READLINKAT                   = 305\n\tSYS_FCHMODAT                     = 306\n\tSYS_FACCESSAT                    = 307\n\tSYS_PSELECT6                     = 308\n\tSYS_PPOLL                        = 309\n\tSYS_UNSHARE                      = 310\n\tSYS_SET_ROBUST_LIST              = 311\n\tSYS_GET_ROBUST_LIST              = 312\n\tSYS_SPLICE                       = 313\n\tSYS_SYNC_FILE_RANGE              = 314\n\tSYS_TEE                          = 315\n\tSYS_VMSPLICE                     = 316\n\tSYS_MOVE_PAGES                   = 317\n\tSYS_GETCPU                       = 318\n\tSYS_EPOLL_PWAIT                  = 319\n\tSYS_UTIMENSAT                    = 320\n\tSYS_SIGNALFD                     = 321\n\tSYS_TIMERFD_CREATE               = 322\n\tSYS_EVENTFD                      = 323\n\tSYS_FALLOCATE                    = 324\n\tSYS_TIMERFD_SETTIME              = 325\n\tSYS_TIMERFD_GETTIME              = 326\n\tSYS_SIGNALFD4                    = 327\n\tSYS_EVENTFD2                     = 328\n\tSYS_EPOLL_CREATE1                = 329\n\tSYS_DUP3                         = 330\n\tSYS_PIPE2                        = 331\n\tSYS_INOTIFY_INIT1                = 332\n\tSYS_PREADV                       = 333\n\tSYS_PWRITEV                      = 334\n\tSYS_RT_TGSIGQUEUEINFO            = 335\n\tSYS_PERF_EVENT_OPEN              = 336\n\tSYS_RECVMMSG                     = 337\n\tSYS_FANOTIFY_INIT                = 338\n\tSYS_FANOTIFY_MARK                = 339\n\tSYS_PRLIMIT64                    = 340\n\tSYS_NAME_TO_HANDLE_AT            = 341\n\tSYS_OPEN_BY_HANDLE_AT            = 342\n\tSYS_CLOCK_ADJTIME                = 343\n\tSYS_SYNCFS                       = 344\n\tSYS_SENDMMSG                     = 345\n\tSYS_SETNS                        = 346\n\tSYS_PROCESS_VM_READV             = 347\n\tSYS_PROCESS_VM_WRITEV            = 348\n\tSYS_KCMP                         = 349\n\tSYS_FINIT_MODULE                 = 350\n\tSYS_SCHED_SETATTR                = 351\n\tSYS_SCHED_GETATTR                = 352\n\tSYS_RENAMEAT2                    = 353\n\tSYS_SECCOMP                      = 354\n\tSYS_GETRANDOM                    = 355\n\tSYS_MEMFD_CREATE                 = 356\n\tSYS_BPF                          = 357\n\tSYS_EXECVEAT                     = 358\n\tSYS_SOCKET                       = 359\n\tSYS_SOCKETPAIR                   = 360\n\tSYS_BIND                         = 361\n\tSYS_CONNECT                      = 362\n\tSYS_LISTEN                       = 363\n\tSYS_ACCEPT4                      = 364\n\tSYS_GETSOCKOPT                   = 365\n\tSYS_SETSOCKOPT                   = 366\n\tSYS_GETSOCKNAME                  = 367\n\tSYS_GETPEERNAME                  = 368\n\tSYS_SENDTO                       = 369\n\tSYS_SENDMSG                      = 370\n\tSYS_RECVFROM                     = 371\n\tSYS_RECVMSG                      = 372\n\tSYS_SHUTDOWN                     = 373\n\tSYS_USERFAULTFD                  = 374\n\tSYS_MEMBARRIER                   = 375\n\tSYS_MLOCK2                       = 376\n\tSYS_COPY_FILE_RANGE              = 377\n\tSYS_PREADV2                      = 378\n\tSYS_PWRITEV2                     = 379\n\tSYS_PKEY_MPROTECT                = 380\n\tSYS_PKEY_ALLOC                   = 381\n\tSYS_PKEY_FREE                    = 382\n\tSYS_STATX                        = 383\n\tSYS_ARCH_PRCTL                   = 384\n\tSYS_IO_PGETEVENTS                = 385\n\tSYS_RSEQ                         = 386\n\tSYS_SEMGET                       = 393\n\tSYS_SEMCTL                       = 394\n\tSYS_SHMGET                       = 395\n\tSYS_SHMCTL                       = 396\n\tSYS_SHMAT                        = 397\n\tSYS_SHMDT                        = 398\n\tSYS_MSGGET                       = 399\n\tSYS_MSGSND                       = 400\n\tSYS_MSGRCV                       = 401\n\tSYS_MSGCTL                       = 402\n\tSYS_CLOCK_GETTIME64              = 403\n\tSYS_CLOCK_SETTIME64              = 404\n\tSYS_CLOCK_ADJTIME64              = 405\n\tSYS_CLOCK_GETRES_TIME64          = 406\n\tSYS_CLOCK_NANOSLEEP_TIME64       = 407\n\tSYS_TIMER_GETTIME64              = 408\n\tSYS_TIMER_SETTIME64              = 409\n\tSYS_TIMERFD_GETTIME64            = 410\n\tSYS_TIMERFD_SETTIME64            = 411\n\tSYS_UTIMENSAT_TIME64             = 412\n\tSYS_PSELECT6_TIME64              = 413\n\tSYS_PPOLL_TIME64                 = 414\n\tSYS_IO_PGETEVENTS_TIME64         = 416\n\tSYS_RECVMMSG_TIME64              = 417\n\tSYS_MQ_TIMEDSEND_TIME64          = 418\n\tSYS_MQ_TIMEDRECEIVE_TIME64       = 419\n\tSYS_SEMTIMEDOP_TIME64            = 420\n\tSYS_RT_SIGTIMEDWAIT_TIME64       = 421\n\tSYS_FUTEX_TIME64                 = 422\n\tSYS_SCHED_RR_GET_INTERVAL_TIME64 = 423\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\tSYS_OPEN_TREE_ATTR               = 467\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/amd64/include -m64 /tmp/amd64/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && linux\n\npackage unix\n\nconst (\n\tSYS_READ                    = 0\n\tSYS_WRITE                   = 1\n\tSYS_OPEN                    = 2\n\tSYS_CLOSE                   = 3\n\tSYS_STAT                    = 4\n\tSYS_FSTAT                   = 5\n\tSYS_LSTAT                   = 6\n\tSYS_POLL                    = 7\n\tSYS_LSEEK                   = 8\n\tSYS_MMAP                    = 9\n\tSYS_MPROTECT                = 10\n\tSYS_MUNMAP                  = 11\n\tSYS_BRK                     = 12\n\tSYS_RT_SIGACTION            = 13\n\tSYS_RT_SIGPROCMASK          = 14\n\tSYS_RT_SIGRETURN            = 15\n\tSYS_IOCTL                   = 16\n\tSYS_PREAD64                 = 17\n\tSYS_PWRITE64                = 18\n\tSYS_READV                   = 19\n\tSYS_WRITEV                  = 20\n\tSYS_ACCESS                  = 21\n\tSYS_PIPE                    = 22\n\tSYS_SELECT                  = 23\n\tSYS_SCHED_YIELD             = 24\n\tSYS_MREMAP                  = 25\n\tSYS_MSYNC                   = 26\n\tSYS_MINCORE                 = 27\n\tSYS_MADVISE                 = 28\n\tSYS_SHMGET                  = 29\n\tSYS_SHMAT                   = 30\n\tSYS_SHMCTL                  = 31\n\tSYS_DUP                     = 32\n\tSYS_DUP2                    = 33\n\tSYS_PAUSE                   = 34\n\tSYS_NANOSLEEP               = 35\n\tSYS_GETITIMER               = 36\n\tSYS_ALARM                   = 37\n\tSYS_SETITIMER               = 38\n\tSYS_GETPID                  = 39\n\tSYS_SENDFILE                = 40\n\tSYS_SOCKET                  = 41\n\tSYS_CONNECT                 = 42\n\tSYS_ACCEPT                  = 43\n\tSYS_SENDTO                  = 44\n\tSYS_RECVFROM                = 45\n\tSYS_SENDMSG                 = 46\n\tSYS_RECVMSG                 = 47\n\tSYS_SHUTDOWN                = 48\n\tSYS_BIND                    = 49\n\tSYS_LISTEN                  = 50\n\tSYS_GETSOCKNAME             = 51\n\tSYS_GETPEERNAME             = 52\n\tSYS_SOCKETPAIR              = 53\n\tSYS_SETSOCKOPT              = 54\n\tSYS_GETSOCKOPT              = 55\n\tSYS_CLONE                   = 56\n\tSYS_FORK                    = 57\n\tSYS_VFORK                   = 58\n\tSYS_EXECVE                  = 59\n\tSYS_EXIT                    = 60\n\tSYS_WAIT4                   = 61\n\tSYS_KILL                    = 62\n\tSYS_UNAME                   = 63\n\tSYS_SEMGET                  = 64\n\tSYS_SEMOP                   = 65\n\tSYS_SEMCTL                  = 66\n\tSYS_SHMDT                   = 67\n\tSYS_MSGGET                  = 68\n\tSYS_MSGSND                  = 69\n\tSYS_MSGRCV                  = 70\n\tSYS_MSGCTL                  = 71\n\tSYS_FCNTL                   = 72\n\tSYS_FLOCK                   = 73\n\tSYS_FSYNC                   = 74\n\tSYS_FDATASYNC               = 75\n\tSYS_TRUNCATE                = 76\n\tSYS_FTRUNCATE               = 77\n\tSYS_GETDENTS                = 78\n\tSYS_GETCWD                  = 79\n\tSYS_CHDIR                   = 80\n\tSYS_FCHDIR                  = 81\n\tSYS_RENAME                  = 82\n\tSYS_MKDIR                   = 83\n\tSYS_RMDIR                   = 84\n\tSYS_CREAT                   = 85\n\tSYS_LINK                    = 86\n\tSYS_UNLINK                  = 87\n\tSYS_SYMLINK                 = 88\n\tSYS_READLINK                = 89\n\tSYS_CHMOD                   = 90\n\tSYS_FCHMOD                  = 91\n\tSYS_CHOWN                   = 92\n\tSYS_FCHOWN                  = 93\n\tSYS_LCHOWN                  = 94\n\tSYS_UMASK                   = 95\n\tSYS_GETTIMEOFDAY            = 96\n\tSYS_GETRLIMIT               = 97\n\tSYS_GETRUSAGE               = 98\n\tSYS_SYSINFO                 = 99\n\tSYS_TIMES                   = 100\n\tSYS_PTRACE                  = 101\n\tSYS_GETUID                  = 102\n\tSYS_SYSLOG                  = 103\n\tSYS_GETGID                  = 104\n\tSYS_SETUID                  = 105\n\tSYS_SETGID                  = 106\n\tSYS_GETEUID                 = 107\n\tSYS_GETEGID                 = 108\n\tSYS_SETPGID                 = 109\n\tSYS_GETPPID                 = 110\n\tSYS_GETPGRP                 = 111\n\tSYS_SETSID                  = 112\n\tSYS_SETREUID                = 113\n\tSYS_SETREGID                = 114\n\tSYS_GETGROUPS               = 115\n\tSYS_SETGROUPS               = 116\n\tSYS_SETRESUID               = 117\n\tSYS_GETRESUID               = 118\n\tSYS_SETRESGID               = 119\n\tSYS_GETRESGID               = 120\n\tSYS_GETPGID                 = 121\n\tSYS_SETFSUID                = 122\n\tSYS_SETFSGID                = 123\n\tSYS_GETSID                  = 124\n\tSYS_CAPGET                  = 125\n\tSYS_CAPSET                  = 126\n\tSYS_RT_SIGPENDING           = 127\n\tSYS_RT_SIGTIMEDWAIT         = 128\n\tSYS_RT_SIGQUEUEINFO         = 129\n\tSYS_RT_SIGSUSPEND           = 130\n\tSYS_SIGALTSTACK             = 131\n\tSYS_UTIME                   = 132\n\tSYS_MKNOD                   = 133\n\tSYS_USELIB                  = 134\n\tSYS_PERSONALITY             = 135\n\tSYS_USTAT                   = 136\n\tSYS_STATFS                  = 137\n\tSYS_FSTATFS                 = 138\n\tSYS_SYSFS                   = 139\n\tSYS_GETPRIORITY             = 140\n\tSYS_SETPRIORITY             = 141\n\tSYS_SCHED_SETPARAM          = 142\n\tSYS_SCHED_GETPARAM          = 143\n\tSYS_SCHED_SETSCHEDULER      = 144\n\tSYS_SCHED_GETSCHEDULER      = 145\n\tSYS_SCHED_GET_PRIORITY_MAX  = 146\n\tSYS_SCHED_GET_PRIORITY_MIN  = 147\n\tSYS_SCHED_RR_GET_INTERVAL   = 148\n\tSYS_MLOCK                   = 149\n\tSYS_MUNLOCK                 = 150\n\tSYS_MLOCKALL                = 151\n\tSYS_MUNLOCKALL              = 152\n\tSYS_VHANGUP                 = 153\n\tSYS_MODIFY_LDT              = 154\n\tSYS_PIVOT_ROOT              = 155\n\tSYS__SYSCTL                 = 156\n\tSYS_PRCTL                   = 157\n\tSYS_ARCH_PRCTL              = 158\n\tSYS_ADJTIMEX                = 159\n\tSYS_SETRLIMIT               = 160\n\tSYS_CHROOT                  = 161\n\tSYS_SYNC                    = 162\n\tSYS_ACCT                    = 163\n\tSYS_SETTIMEOFDAY            = 164\n\tSYS_MOUNT                   = 165\n\tSYS_UMOUNT2                 = 166\n\tSYS_SWAPON                  = 167\n\tSYS_SWAPOFF                 = 168\n\tSYS_REBOOT                  = 169\n\tSYS_SETHOSTNAME             = 170\n\tSYS_SETDOMAINNAME           = 171\n\tSYS_IOPL                    = 172\n\tSYS_IOPERM                  = 173\n\tSYS_CREATE_MODULE           = 174\n\tSYS_INIT_MODULE             = 175\n\tSYS_DELETE_MODULE           = 176\n\tSYS_GET_KERNEL_SYMS         = 177\n\tSYS_QUERY_MODULE            = 178\n\tSYS_QUOTACTL                = 179\n\tSYS_NFSSERVCTL              = 180\n\tSYS_GETPMSG                 = 181\n\tSYS_PUTPMSG                 = 182\n\tSYS_AFS_SYSCALL             = 183\n\tSYS_TUXCALL                 = 184\n\tSYS_SECURITY                = 185\n\tSYS_GETTID                  = 186\n\tSYS_READAHEAD               = 187\n\tSYS_SETXATTR                = 188\n\tSYS_LSETXATTR               = 189\n\tSYS_FSETXATTR               = 190\n\tSYS_GETXATTR                = 191\n\tSYS_LGETXATTR               = 192\n\tSYS_FGETXATTR               = 193\n\tSYS_LISTXATTR               = 194\n\tSYS_LLISTXATTR              = 195\n\tSYS_FLISTXATTR              = 196\n\tSYS_REMOVEXATTR             = 197\n\tSYS_LREMOVEXATTR            = 198\n\tSYS_FREMOVEXATTR            = 199\n\tSYS_TKILL                   = 200\n\tSYS_TIME                    = 201\n\tSYS_FUTEX                   = 202\n\tSYS_SCHED_SETAFFINITY       = 203\n\tSYS_SCHED_GETAFFINITY       = 204\n\tSYS_SET_THREAD_AREA         = 205\n\tSYS_IO_SETUP                = 206\n\tSYS_IO_DESTROY              = 207\n\tSYS_IO_GETEVENTS            = 208\n\tSYS_IO_SUBMIT               = 209\n\tSYS_IO_CANCEL               = 210\n\tSYS_GET_THREAD_AREA         = 211\n\tSYS_LOOKUP_DCOOKIE          = 212\n\tSYS_EPOLL_CREATE            = 213\n\tSYS_EPOLL_CTL_OLD           = 214\n\tSYS_EPOLL_WAIT_OLD          = 215\n\tSYS_REMAP_FILE_PAGES        = 216\n\tSYS_GETDENTS64              = 217\n\tSYS_SET_TID_ADDRESS         = 218\n\tSYS_RESTART_SYSCALL         = 219\n\tSYS_SEMTIMEDOP              = 220\n\tSYS_FADVISE64               = 221\n\tSYS_TIMER_CREATE            = 222\n\tSYS_TIMER_SETTIME           = 223\n\tSYS_TIMER_GETTIME           = 224\n\tSYS_TIMER_GETOVERRUN        = 225\n\tSYS_TIMER_DELETE            = 226\n\tSYS_CLOCK_SETTIME           = 227\n\tSYS_CLOCK_GETTIME           = 228\n\tSYS_CLOCK_GETRES            = 229\n\tSYS_CLOCK_NANOSLEEP         = 230\n\tSYS_EXIT_GROUP              = 231\n\tSYS_EPOLL_WAIT              = 232\n\tSYS_EPOLL_CTL               = 233\n\tSYS_TGKILL                  = 234\n\tSYS_UTIMES                  = 235\n\tSYS_VSERVER                 = 236\n\tSYS_MBIND                   = 237\n\tSYS_SET_MEMPOLICY           = 238\n\tSYS_GET_MEMPOLICY           = 239\n\tSYS_MQ_OPEN                 = 240\n\tSYS_MQ_UNLINK               = 241\n\tSYS_MQ_TIMEDSEND            = 242\n\tSYS_MQ_TIMEDRECEIVE         = 243\n\tSYS_MQ_NOTIFY               = 244\n\tSYS_MQ_GETSETATTR           = 245\n\tSYS_KEXEC_LOAD              = 246\n\tSYS_WAITID                  = 247\n\tSYS_ADD_KEY                 = 248\n\tSYS_REQUEST_KEY             = 249\n\tSYS_KEYCTL                  = 250\n\tSYS_IOPRIO_SET              = 251\n\tSYS_IOPRIO_GET              = 252\n\tSYS_INOTIFY_INIT            = 253\n\tSYS_INOTIFY_ADD_WATCH       = 254\n\tSYS_INOTIFY_RM_WATCH        = 255\n\tSYS_MIGRATE_PAGES           = 256\n\tSYS_OPENAT                  = 257\n\tSYS_MKDIRAT                 = 258\n\tSYS_MKNODAT                 = 259\n\tSYS_FCHOWNAT                = 260\n\tSYS_FUTIMESAT               = 261\n\tSYS_NEWFSTATAT              = 262\n\tSYS_UNLINKAT                = 263\n\tSYS_RENAMEAT                = 264\n\tSYS_LINKAT                  = 265\n\tSYS_SYMLINKAT               = 266\n\tSYS_READLINKAT              = 267\n\tSYS_FCHMODAT                = 268\n\tSYS_FACCESSAT               = 269\n\tSYS_PSELECT6                = 270\n\tSYS_PPOLL                   = 271\n\tSYS_UNSHARE                 = 272\n\tSYS_SET_ROBUST_LIST         = 273\n\tSYS_GET_ROBUST_LIST         = 274\n\tSYS_SPLICE                  = 275\n\tSYS_TEE                     = 276\n\tSYS_SYNC_FILE_RANGE         = 277\n\tSYS_VMSPLICE                = 278\n\tSYS_MOVE_PAGES              = 279\n\tSYS_UTIMENSAT               = 280\n\tSYS_EPOLL_PWAIT             = 281\n\tSYS_SIGNALFD                = 282\n\tSYS_TIMERFD_CREATE          = 283\n\tSYS_EVENTFD                 = 284\n\tSYS_FALLOCATE               = 285\n\tSYS_TIMERFD_SETTIME         = 286\n\tSYS_TIMERFD_GETTIME         = 287\n\tSYS_ACCEPT4                 = 288\n\tSYS_SIGNALFD4               = 289\n\tSYS_EVENTFD2                = 290\n\tSYS_EPOLL_CREATE1           = 291\n\tSYS_DUP3                    = 292\n\tSYS_PIPE2                   = 293\n\tSYS_INOTIFY_INIT1           = 294\n\tSYS_PREADV                  = 295\n\tSYS_PWRITEV                 = 296\n\tSYS_RT_TGSIGQUEUEINFO       = 297\n\tSYS_PERF_EVENT_OPEN         = 298\n\tSYS_RECVMMSG                = 299\n\tSYS_FANOTIFY_INIT           = 300\n\tSYS_FANOTIFY_MARK           = 301\n\tSYS_PRLIMIT64               = 302\n\tSYS_NAME_TO_HANDLE_AT       = 303\n\tSYS_OPEN_BY_HANDLE_AT       = 304\n\tSYS_CLOCK_ADJTIME           = 305\n\tSYS_SYNCFS                  = 306\n\tSYS_SENDMMSG                = 307\n\tSYS_SETNS                   = 308\n\tSYS_GETCPU                  = 309\n\tSYS_PROCESS_VM_READV        = 310\n\tSYS_PROCESS_VM_WRITEV       = 311\n\tSYS_KCMP                    = 312\n\tSYS_FINIT_MODULE            = 313\n\tSYS_SCHED_SETATTR           = 314\n\tSYS_SCHED_GETATTR           = 315\n\tSYS_RENAMEAT2               = 316\n\tSYS_SECCOMP                 = 317\n\tSYS_GETRANDOM               = 318\n\tSYS_MEMFD_CREATE            = 319\n\tSYS_KEXEC_FILE_LOAD         = 320\n\tSYS_BPF                     = 321\n\tSYS_EXECVEAT                = 322\n\tSYS_USERFAULTFD             = 323\n\tSYS_MEMBARRIER              = 324\n\tSYS_MLOCK2                  = 325\n\tSYS_COPY_FILE_RANGE         = 326\n\tSYS_PREADV2                 = 327\n\tSYS_PWRITEV2                = 328\n\tSYS_PKEY_MPROTECT           = 329\n\tSYS_PKEY_ALLOC              = 330\n\tSYS_PKEY_FREE               = 331\n\tSYS_STATX                   = 332\n\tSYS_IO_PGETEVENTS           = 333\n\tSYS_RSEQ                    = 334\n\tSYS_URETPROBE               = 335\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\tSYS_OPEN_TREE_ATTR          = 467\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/arm/include /tmp/arm/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && linux\n\npackage unix\n\nconst (\n\tSYS_SYSCALL_MASK                 = 0\n\tSYS_RESTART_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_CREAT                        = 8\n\tSYS_LINK                         = 9\n\tSYS_UNLINK                       = 10\n\tSYS_EXECVE                       = 11\n\tSYS_CHDIR                        = 12\n\tSYS_MKNOD                        = 14\n\tSYS_CHMOD                        = 15\n\tSYS_LCHOWN                       = 16\n\tSYS_LSEEK                        = 19\n\tSYS_GETPID                       = 20\n\tSYS_MOUNT                        = 21\n\tSYS_SETUID                       = 23\n\tSYS_GETUID                       = 24\n\tSYS_PTRACE                       = 26\n\tSYS_PAUSE                        = 29\n\tSYS_ACCESS                       = 33\n\tSYS_NICE                         = 34\n\tSYS_SYNC                         = 36\n\tSYS_KILL                         = 37\n\tSYS_RENAME                       = 38\n\tSYS_MKDIR                        = 39\n\tSYS_RMDIR                        = 40\n\tSYS_DUP                          = 41\n\tSYS_PIPE                         = 42\n\tSYS_TIMES                        = 43\n\tSYS_BRK                          = 45\n\tSYS_SETGID                       = 46\n\tSYS_GETGID                       = 47\n\tSYS_GETEUID                      = 49\n\tSYS_GETEGID                      = 50\n\tSYS_ACCT                         = 51\n\tSYS_UMOUNT2                      = 52\n\tSYS_IOCTL                        = 54\n\tSYS_FCNTL                        = 55\n\tSYS_SETPGID                      = 57\n\tSYS_UMASK                        = 60\n\tSYS_CHROOT                       = 61\n\tSYS_USTAT                        = 62\n\tSYS_DUP2                         = 63\n\tSYS_GETPPID                      = 64\n\tSYS_GETPGRP                      = 65\n\tSYS_SETSID                       = 66\n\tSYS_SIGACTION                    = 67\n\tSYS_SETREUID                     = 70\n\tSYS_SETREGID                     = 71\n\tSYS_SIGSUSPEND                   = 72\n\tSYS_SIGPENDING                   = 73\n\tSYS_SETHOSTNAME                  = 74\n\tSYS_SETRLIMIT                    = 75\n\tSYS_GETRUSAGE                    = 77\n\tSYS_GETTIMEOFDAY                 = 78\n\tSYS_SETTIMEOFDAY                 = 79\n\tSYS_GETGROUPS                    = 80\n\tSYS_SETGROUPS                    = 81\n\tSYS_SYMLINK                      = 83\n\tSYS_READLINK                     = 85\n\tSYS_USELIB                       = 86\n\tSYS_SWAPON                       = 87\n\tSYS_REBOOT                       = 88\n\tSYS_MUNMAP                       = 91\n\tSYS_TRUNCATE                     = 92\n\tSYS_FTRUNCATE                    = 93\n\tSYS_FCHMOD                       = 94\n\tSYS_FCHOWN                       = 95\n\tSYS_GETPRIORITY                  = 96\n\tSYS_SETPRIORITY                  = 97\n\tSYS_STATFS                       = 99\n\tSYS_FSTATFS                      = 100\n\tSYS_SYSLOG                       = 103\n\tSYS_SETITIMER                    = 104\n\tSYS_GETITIMER                    = 105\n\tSYS_STAT                         = 106\n\tSYS_LSTAT                        = 107\n\tSYS_FSTAT                        = 108\n\tSYS_VHANGUP                      = 111\n\tSYS_WAIT4                        = 114\n\tSYS_SWAPOFF                      = 115\n\tSYS_SYSINFO                      = 116\n\tSYS_FSYNC                        = 118\n\tSYS_SIGRETURN                    = 119\n\tSYS_CLONE                        = 120\n\tSYS_SETDOMAINNAME                = 121\n\tSYS_UNAME                        = 122\n\tSYS_ADJTIMEX                     = 124\n\tSYS_MPROTECT                     = 125\n\tSYS_SIGPROCMASK                  = 126\n\tSYS_INIT_MODULE                  = 128\n\tSYS_DELETE_MODULE                = 129\n\tSYS_QUOTACTL                     = 131\n\tSYS_GETPGID                      = 132\n\tSYS_FCHDIR                       = 133\n\tSYS_BDFLUSH                      = 134\n\tSYS_SYSFS                        = 135\n\tSYS_PERSONALITY                  = 136\n\tSYS_SETFSUID                     = 138\n\tSYS_SETFSGID                     = 139\n\tSYS__LLSEEK                      = 140\n\tSYS_GETDENTS                     = 141\n\tSYS__NEWSELECT                   = 142\n\tSYS_FLOCK                        = 143\n\tSYS_MSYNC                        = 144\n\tSYS_READV                        = 145\n\tSYS_WRITEV                       = 146\n\tSYS_GETSID                       = 147\n\tSYS_FDATASYNC                    = 148\n\tSYS__SYSCTL                      = 149\n\tSYS_MLOCK                        = 150\n\tSYS_MUNLOCK                      = 151\n\tSYS_MLOCKALL                     = 152\n\tSYS_MUNLOCKALL                   = 153\n\tSYS_SCHED_SETPARAM               = 154\n\tSYS_SCHED_GETPARAM               = 155\n\tSYS_SCHED_SETSCHEDULER           = 156\n\tSYS_SCHED_GETSCHEDULER           = 157\n\tSYS_SCHED_YIELD                  = 158\n\tSYS_SCHED_GET_PRIORITY_MAX       = 159\n\tSYS_SCHED_GET_PRIORITY_MIN       = 160\n\tSYS_SCHED_RR_GET_INTERVAL        = 161\n\tSYS_NANOSLEEP                    = 162\n\tSYS_MREMAP                       = 163\n\tSYS_SETRESUID                    = 164\n\tSYS_GETRESUID                    = 165\n\tSYS_POLL                         = 168\n\tSYS_NFSSERVCTL                   = 169\n\tSYS_SETRESGID                    = 170\n\tSYS_GETRESGID                    = 171\n\tSYS_PRCTL                        = 172\n\tSYS_RT_SIGRETURN                 = 173\n\tSYS_RT_SIGACTION                 = 174\n\tSYS_RT_SIGPROCMASK               = 175\n\tSYS_RT_SIGPENDING                = 176\n\tSYS_RT_SIGTIMEDWAIT              = 177\n\tSYS_RT_SIGQUEUEINFO              = 178\n\tSYS_RT_SIGSUSPEND                = 179\n\tSYS_PREAD64                      = 180\n\tSYS_PWRITE64                     = 181\n\tSYS_CHOWN                        = 182\n\tSYS_GETCWD                       = 183\n\tSYS_CAPGET                       = 184\n\tSYS_CAPSET                       = 185\n\tSYS_SIGALTSTACK                  = 186\n\tSYS_SENDFILE                     = 187\n\tSYS_VFORK                        = 190\n\tSYS_UGETRLIMIT                   = 191\n\tSYS_MMAP2                        = 192\n\tSYS_TRUNCATE64                   = 193\n\tSYS_FTRUNCATE64                  = 194\n\tSYS_STAT64                       = 195\n\tSYS_LSTAT64                      = 196\n\tSYS_FSTAT64                      = 197\n\tSYS_LCHOWN32                     = 198\n\tSYS_GETUID32                     = 199\n\tSYS_GETGID32                     = 200\n\tSYS_GETEUID32                    = 201\n\tSYS_GETEGID32                    = 202\n\tSYS_SETREUID32                   = 203\n\tSYS_SETREGID32                   = 204\n\tSYS_GETGROUPS32                  = 205\n\tSYS_SETGROUPS32                  = 206\n\tSYS_FCHOWN32                     = 207\n\tSYS_SETRESUID32                  = 208\n\tSYS_GETRESUID32                  = 209\n\tSYS_SETRESGID32                  = 210\n\tSYS_GETRESGID32                  = 211\n\tSYS_CHOWN32                      = 212\n\tSYS_SETUID32                     = 213\n\tSYS_SETGID32                     = 214\n\tSYS_SETFSUID32                   = 215\n\tSYS_SETFSGID32                   = 216\n\tSYS_GETDENTS64                   = 217\n\tSYS_PIVOT_ROOT                   = 218\n\tSYS_MINCORE                      = 219\n\tSYS_MADVISE                      = 220\n\tSYS_FCNTL64                      = 221\n\tSYS_GETTID                       = 224\n\tSYS_READAHEAD                    = 225\n\tSYS_SETXATTR                     = 226\n\tSYS_LSETXATTR                    = 227\n\tSYS_FSETXATTR                    = 228\n\tSYS_GETXATTR                     = 229\n\tSYS_LGETXATTR                    = 230\n\tSYS_FGETXATTR                    = 231\n\tSYS_LISTXATTR                    = 232\n\tSYS_LLISTXATTR                   = 233\n\tSYS_FLISTXATTR                   = 234\n\tSYS_REMOVEXATTR                  = 235\n\tSYS_LREMOVEXATTR                 = 236\n\tSYS_FREMOVEXATTR                 = 237\n\tSYS_TKILL                        = 238\n\tSYS_SENDFILE64                   = 239\n\tSYS_FUTEX                        = 240\n\tSYS_SCHED_SETAFFINITY            = 241\n\tSYS_SCHED_GETAFFINITY            = 242\n\tSYS_IO_SETUP                     = 243\n\tSYS_IO_DESTROY                   = 244\n\tSYS_IO_GETEVENTS                 = 245\n\tSYS_IO_SUBMIT                    = 246\n\tSYS_IO_CANCEL                    = 247\n\tSYS_EXIT_GROUP                   = 248\n\tSYS_LOOKUP_DCOOKIE               = 249\n\tSYS_EPOLL_CREATE                 = 250\n\tSYS_EPOLL_CTL                    = 251\n\tSYS_EPOLL_WAIT                   = 252\n\tSYS_REMAP_FILE_PAGES             = 253\n\tSYS_SET_TID_ADDRESS              = 256\n\tSYS_TIMER_CREATE                 = 257\n\tSYS_TIMER_SETTIME                = 258\n\tSYS_TIMER_GETTIME                = 259\n\tSYS_TIMER_GETOVERRUN             = 260\n\tSYS_TIMER_DELETE                 = 261\n\tSYS_CLOCK_SETTIME                = 262\n\tSYS_CLOCK_GETTIME                = 263\n\tSYS_CLOCK_GETRES                 = 264\n\tSYS_CLOCK_NANOSLEEP              = 265\n\tSYS_STATFS64                     = 266\n\tSYS_FSTATFS64                    = 267\n\tSYS_TGKILL                       = 268\n\tSYS_UTIMES                       = 269\n\tSYS_ARM_FADVISE64_64             = 270\n\tSYS_PCICONFIG_IOBASE             = 271\n\tSYS_PCICONFIG_READ               = 272\n\tSYS_PCICONFIG_WRITE              = 273\n\tSYS_MQ_OPEN                      = 274\n\tSYS_MQ_UNLINK                    = 275\n\tSYS_MQ_TIMEDSEND                 = 276\n\tSYS_MQ_TIMEDRECEIVE              = 277\n\tSYS_MQ_NOTIFY                    = 278\n\tSYS_MQ_GETSETATTR                = 279\n\tSYS_WAITID                       = 280\n\tSYS_SOCKET                       = 281\n\tSYS_BIND                         = 282\n\tSYS_CONNECT                      = 283\n\tSYS_LISTEN                       = 284\n\tSYS_ACCEPT                       = 285\n\tSYS_GETSOCKNAME                  = 286\n\tSYS_GETPEERNAME                  = 287\n\tSYS_SOCKETPAIR                   = 288\n\tSYS_SEND                         = 289\n\tSYS_SENDTO                       = 290\n\tSYS_RECV                         = 291\n\tSYS_RECVFROM                     = 292\n\tSYS_SHUTDOWN                     = 293\n\tSYS_SETSOCKOPT                   = 294\n\tSYS_GETSOCKOPT                   = 295\n\tSYS_SENDMSG                      = 296\n\tSYS_RECVMSG                      = 297\n\tSYS_SEMOP                        = 298\n\tSYS_SEMGET                       = 299\n\tSYS_SEMCTL                       = 300\n\tSYS_MSGSND                       = 301\n\tSYS_MSGRCV                       = 302\n\tSYS_MSGGET                       = 303\n\tSYS_MSGCTL                       = 304\n\tSYS_SHMAT                        = 305\n\tSYS_SHMDT                        = 306\n\tSYS_SHMGET                       = 307\n\tSYS_SHMCTL                       = 308\n\tSYS_ADD_KEY                      = 309\n\tSYS_REQUEST_KEY                  = 310\n\tSYS_KEYCTL                       = 311\n\tSYS_SEMTIMEDOP                   = 312\n\tSYS_VSERVER                      = 313\n\tSYS_IOPRIO_SET                   = 314\n\tSYS_IOPRIO_GET                   = 315\n\tSYS_INOTIFY_INIT                 = 316\n\tSYS_INOTIFY_ADD_WATCH            = 317\n\tSYS_INOTIFY_RM_WATCH             = 318\n\tSYS_MBIND                        = 319\n\tSYS_GET_MEMPOLICY                = 320\n\tSYS_SET_MEMPOLICY                = 321\n\tSYS_OPENAT                       = 322\n\tSYS_MKDIRAT                      = 323\n\tSYS_MKNODAT                      = 324\n\tSYS_FCHOWNAT                     = 325\n\tSYS_FUTIMESAT                    = 326\n\tSYS_FSTATAT64                    = 327\n\tSYS_UNLINKAT                     = 328\n\tSYS_RENAMEAT                     = 329\n\tSYS_LINKAT                       = 330\n\tSYS_SYMLINKAT                    = 331\n\tSYS_READLINKAT                   = 332\n\tSYS_FCHMODAT                     = 333\n\tSYS_FACCESSAT                    = 334\n\tSYS_PSELECT6                     = 335\n\tSYS_PPOLL                        = 336\n\tSYS_UNSHARE                      = 337\n\tSYS_SET_ROBUST_LIST              = 338\n\tSYS_GET_ROBUST_LIST              = 339\n\tSYS_SPLICE                       = 340\n\tSYS_ARM_SYNC_FILE_RANGE          = 341\n\tSYS_TEE                          = 342\n\tSYS_VMSPLICE                     = 343\n\tSYS_MOVE_PAGES                   = 344\n\tSYS_GETCPU                       = 345\n\tSYS_EPOLL_PWAIT                  = 346\n\tSYS_KEXEC_LOAD                   = 347\n\tSYS_UTIMENSAT                    = 348\n\tSYS_SIGNALFD                     = 349\n\tSYS_TIMERFD_CREATE               = 350\n\tSYS_EVENTFD                      = 351\n\tSYS_FALLOCATE                    = 352\n\tSYS_TIMERFD_SETTIME              = 353\n\tSYS_TIMERFD_GETTIME              = 354\n\tSYS_SIGNALFD4                    = 355\n\tSYS_EVENTFD2                     = 356\n\tSYS_EPOLL_CREATE1                = 357\n\tSYS_DUP3                         = 358\n\tSYS_PIPE2                        = 359\n\tSYS_INOTIFY_INIT1                = 360\n\tSYS_PREADV                       = 361\n\tSYS_PWRITEV                      = 362\n\tSYS_RT_TGSIGQUEUEINFO            = 363\n\tSYS_PERF_EVENT_OPEN              = 364\n\tSYS_RECVMMSG                     = 365\n\tSYS_ACCEPT4                      = 366\n\tSYS_FANOTIFY_INIT                = 367\n\tSYS_FANOTIFY_MARK                = 368\n\tSYS_PRLIMIT64                    = 369\n\tSYS_NAME_TO_HANDLE_AT            = 370\n\tSYS_OPEN_BY_HANDLE_AT            = 371\n\tSYS_CLOCK_ADJTIME                = 372\n\tSYS_SYNCFS                       = 373\n\tSYS_SENDMMSG                     = 374\n\tSYS_SETNS                        = 375\n\tSYS_PROCESS_VM_READV             = 376\n\tSYS_PROCESS_VM_WRITEV            = 377\n\tSYS_KCMP                         = 378\n\tSYS_FINIT_MODULE                 = 379\n\tSYS_SCHED_SETATTR                = 380\n\tSYS_SCHED_GETATTR                = 381\n\tSYS_RENAMEAT2                    = 382\n\tSYS_SECCOMP                      = 383\n\tSYS_GETRANDOM                    = 384\n\tSYS_MEMFD_CREATE                 = 385\n\tSYS_BPF                          = 386\n\tSYS_EXECVEAT                     = 387\n\tSYS_USERFAULTFD                  = 388\n\tSYS_MEMBARRIER                   = 389\n\tSYS_MLOCK2                       = 390\n\tSYS_COPY_FILE_RANGE              = 391\n\tSYS_PREADV2                      = 392\n\tSYS_PWRITEV2                     = 393\n\tSYS_PKEY_MPROTECT                = 394\n\tSYS_PKEY_ALLOC                   = 395\n\tSYS_PKEY_FREE                    = 396\n\tSYS_STATX                        = 397\n\tSYS_RSEQ                         = 398\n\tSYS_IO_PGETEVENTS                = 399\n\tSYS_MIGRATE_PAGES                = 400\n\tSYS_KEXEC_FILE_LOAD              = 401\n\tSYS_CLOCK_GETTIME64              = 403\n\tSYS_CLOCK_SETTIME64              = 404\n\tSYS_CLOCK_ADJTIME64              = 405\n\tSYS_CLOCK_GETRES_TIME64          = 406\n\tSYS_CLOCK_NANOSLEEP_TIME64       = 407\n\tSYS_TIMER_GETTIME64              = 408\n\tSYS_TIMER_SETTIME64              = 409\n\tSYS_TIMERFD_GETTIME64            = 410\n\tSYS_TIMERFD_SETTIME64            = 411\n\tSYS_UTIMENSAT_TIME64             = 412\n\tSYS_PSELECT6_TIME64              = 413\n\tSYS_PPOLL_TIME64                 = 414\n\tSYS_IO_PGETEVENTS_TIME64         = 416\n\tSYS_RECVMMSG_TIME64              = 417\n\tSYS_MQ_TIMEDSEND_TIME64          = 418\n\tSYS_MQ_TIMEDRECEIVE_TIME64       = 419\n\tSYS_SEMTIMEDOP_TIME64            = 420\n\tSYS_RT_SIGTIMEDWAIT_TIME64       = 421\n\tSYS_FUTEX_TIME64                 = 422\n\tSYS_SCHED_RR_GET_INTERVAL_TIME64 = 423\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_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\tSYS_OPEN_TREE_ATTR               = 467\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\tSYS_OPEN_TREE_ATTR          = 467\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/loong64/include /tmp/loong64/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build loong64 && 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_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_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_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\tSYS_OPEN_TREE_ATTR          = 467\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mips/include /tmp/mips/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips && 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\tSYS_OPEN_TREE_ATTR               = 4467\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mips64/include /tmp/mips64/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips64 && linux\n\npackage unix\n\nconst (\n\tSYS_READ                    = 5000\n\tSYS_WRITE                   = 5001\n\tSYS_OPEN                    = 5002\n\tSYS_CLOSE                   = 5003\n\tSYS_STAT                    = 5004\n\tSYS_FSTAT                   = 5005\n\tSYS_LSTAT                   = 5006\n\tSYS_POLL                    = 5007\n\tSYS_LSEEK                   = 5008\n\tSYS_MMAP                    = 5009\n\tSYS_MPROTECT                = 5010\n\tSYS_MUNMAP                  = 5011\n\tSYS_BRK                     = 5012\n\tSYS_RT_SIGACTION            = 5013\n\tSYS_RT_SIGPROCMASK          = 5014\n\tSYS_IOCTL                   = 5015\n\tSYS_PREAD64                 = 5016\n\tSYS_PWRITE64                = 5017\n\tSYS_READV                   = 5018\n\tSYS_WRITEV                  = 5019\n\tSYS_ACCESS                  = 5020\n\tSYS_PIPE                    = 5021\n\tSYS__NEWSELECT              = 5022\n\tSYS_SCHED_YIELD             = 5023\n\tSYS_MREMAP                  = 5024\n\tSYS_MSYNC                   = 5025\n\tSYS_MINCORE                 = 5026\n\tSYS_MADVISE                 = 5027\n\tSYS_SHMGET                  = 5028\n\tSYS_SHMAT                   = 5029\n\tSYS_SHMCTL                  = 5030\n\tSYS_DUP                     = 5031\n\tSYS_DUP2                    = 5032\n\tSYS_PAUSE                   = 5033\n\tSYS_NANOSLEEP               = 5034\n\tSYS_GETITIMER               = 5035\n\tSYS_SETITIMER               = 5036\n\tSYS_ALARM                   = 5037\n\tSYS_GETPID                  = 5038\n\tSYS_SENDFILE                = 5039\n\tSYS_SOCKET                  = 5040\n\tSYS_CONNECT                 = 5041\n\tSYS_ACCEPT                  = 5042\n\tSYS_SENDTO                  = 5043\n\tSYS_RECVFROM                = 5044\n\tSYS_SENDMSG                 = 5045\n\tSYS_RECVMSG                 = 5046\n\tSYS_SHUTDOWN                = 5047\n\tSYS_BIND                    = 5048\n\tSYS_LISTEN                  = 5049\n\tSYS_GETSOCKNAME             = 5050\n\tSYS_GETPEERNAME             = 5051\n\tSYS_SOCKETPAIR              = 5052\n\tSYS_SETSOCKOPT              = 5053\n\tSYS_GETSOCKOPT              = 5054\n\tSYS_CLONE                   = 5055\n\tSYS_FORK                    = 5056\n\tSYS_EXECVE                  = 5057\n\tSYS_EXIT                    = 5058\n\tSYS_WAIT4                   = 5059\n\tSYS_KILL                    = 5060\n\tSYS_UNAME                   = 5061\n\tSYS_SEMGET                  = 5062\n\tSYS_SEMOP                   = 5063\n\tSYS_SEMCTL                  = 5064\n\tSYS_SHMDT                   = 5065\n\tSYS_MSGGET                  = 5066\n\tSYS_MSGSND                  = 5067\n\tSYS_MSGRCV                  = 5068\n\tSYS_MSGCTL                  = 5069\n\tSYS_FCNTL                   = 5070\n\tSYS_FLOCK                   = 5071\n\tSYS_FSYNC                   = 5072\n\tSYS_FDATASYNC               = 5073\n\tSYS_TRUNCATE                = 5074\n\tSYS_FTRUNCATE               = 5075\n\tSYS_GETDENTS                = 5076\n\tSYS_GETCWD                  = 5077\n\tSYS_CHDIR                   = 5078\n\tSYS_FCHDIR                  = 5079\n\tSYS_RENAME                  = 5080\n\tSYS_MKDIR                   = 5081\n\tSYS_RMDIR                   = 5082\n\tSYS_CREAT                   = 5083\n\tSYS_LINK                    = 5084\n\tSYS_UNLINK                  = 5085\n\tSYS_SYMLINK                 = 5086\n\tSYS_READLINK                = 5087\n\tSYS_CHMOD                   = 5088\n\tSYS_FCHMOD                  = 5089\n\tSYS_CHOWN                   = 5090\n\tSYS_FCHOWN                  = 5091\n\tSYS_LCHOWN                  = 5092\n\tSYS_UMASK                   = 5093\n\tSYS_GETTIMEOFDAY            = 5094\n\tSYS_GETRLIMIT               = 5095\n\tSYS_GETRUSAGE               = 5096\n\tSYS_SYSINFO                 = 5097\n\tSYS_TIMES                   = 5098\n\tSYS_PTRACE                  = 5099\n\tSYS_GETUID                  = 5100\n\tSYS_SYSLOG                  = 5101\n\tSYS_GETGID                  = 5102\n\tSYS_SETUID                  = 5103\n\tSYS_SETGID                  = 5104\n\tSYS_GETEUID                 = 5105\n\tSYS_GETEGID                 = 5106\n\tSYS_SETPGID                 = 5107\n\tSYS_GETPPID                 = 5108\n\tSYS_GETPGRP                 = 5109\n\tSYS_SETSID                  = 5110\n\tSYS_SETREUID                = 5111\n\tSYS_SETREGID                = 5112\n\tSYS_GETGROUPS               = 5113\n\tSYS_SETGROUPS               = 5114\n\tSYS_SETRESUID               = 5115\n\tSYS_GETRESUID               = 5116\n\tSYS_SETRESGID               = 5117\n\tSYS_GETRESGID               = 5118\n\tSYS_GETPGID                 = 5119\n\tSYS_SETFSUID                = 5120\n\tSYS_SETFSGID                = 5121\n\tSYS_GETSID                  = 5122\n\tSYS_CAPGET                  = 5123\n\tSYS_CAPSET                  = 5124\n\tSYS_RT_SIGPENDING           = 5125\n\tSYS_RT_SIGTIMEDWAIT         = 5126\n\tSYS_RT_SIGQUEUEINFO         = 5127\n\tSYS_RT_SIGSUSPEND           = 5128\n\tSYS_SIGALTSTACK             = 5129\n\tSYS_UTIME                   = 5130\n\tSYS_MKNOD                   = 5131\n\tSYS_PERSONALITY             = 5132\n\tSYS_USTAT                   = 5133\n\tSYS_STATFS                  = 5134\n\tSYS_FSTATFS                 = 5135\n\tSYS_SYSFS                   = 5136\n\tSYS_GETPRIORITY             = 5137\n\tSYS_SETPRIORITY             = 5138\n\tSYS_SCHED_SETPARAM          = 5139\n\tSYS_SCHED_GETPARAM          = 5140\n\tSYS_SCHED_SETSCHEDULER      = 5141\n\tSYS_SCHED_GETSCHEDULER      = 5142\n\tSYS_SCHED_GET_PRIORITY_MAX  = 5143\n\tSYS_SCHED_GET_PRIORITY_MIN  = 5144\n\tSYS_SCHED_RR_GET_INTERVAL   = 5145\n\tSYS_MLOCK                   = 5146\n\tSYS_MUNLOCK                 = 5147\n\tSYS_MLOCKALL                = 5148\n\tSYS_MUNLOCKALL              = 5149\n\tSYS_VHANGUP                 = 5150\n\tSYS_PIVOT_ROOT              = 5151\n\tSYS__SYSCTL                 = 5152\n\tSYS_PRCTL                   = 5153\n\tSYS_ADJTIMEX                = 5154\n\tSYS_SETRLIMIT               = 5155\n\tSYS_CHROOT                  = 5156\n\tSYS_SYNC                    = 5157\n\tSYS_ACCT                    = 5158\n\tSYS_SETTIMEOFDAY            = 5159\n\tSYS_MOUNT                   = 5160\n\tSYS_UMOUNT2                 = 5161\n\tSYS_SWAPON                  = 5162\n\tSYS_SWAPOFF                 = 5163\n\tSYS_REBOOT                  = 5164\n\tSYS_SETHOSTNAME             = 5165\n\tSYS_SETDOMAINNAME           = 5166\n\tSYS_CREATE_MODULE           = 5167\n\tSYS_INIT_MODULE             = 5168\n\tSYS_DELETE_MODULE           = 5169\n\tSYS_GET_KERNEL_SYMS         = 5170\n\tSYS_QUERY_MODULE            = 5171\n\tSYS_QUOTACTL                = 5172\n\tSYS_NFSSERVCTL              = 5173\n\tSYS_GETPMSG                 = 5174\n\tSYS_PUTPMSG                 = 5175\n\tSYS_AFS_SYSCALL             = 5176\n\tSYS_RESERVED177             = 5177\n\tSYS_GETTID                  = 5178\n\tSYS_READAHEAD               = 5179\n\tSYS_SETXATTR                = 5180\n\tSYS_LSETXATTR               = 5181\n\tSYS_FSETXATTR               = 5182\n\tSYS_GETXATTR                = 5183\n\tSYS_LGETXATTR               = 5184\n\tSYS_FGETXATTR               = 5185\n\tSYS_LISTXATTR               = 5186\n\tSYS_LLISTXATTR              = 5187\n\tSYS_FLISTXATTR              = 5188\n\tSYS_REMOVEXATTR             = 5189\n\tSYS_LREMOVEXATTR            = 5190\n\tSYS_FREMOVEXATTR            = 5191\n\tSYS_TKILL                   = 5192\n\tSYS_RESERVED193             = 5193\n\tSYS_FUTEX                   = 5194\n\tSYS_SCHED_SETAFFINITY       = 5195\n\tSYS_SCHED_GETAFFINITY       = 5196\n\tSYS_CACHEFLUSH              = 5197\n\tSYS_CACHECTL                = 5198\n\tSYS_SYSMIPS                 = 5199\n\tSYS_IO_SETUP                = 5200\n\tSYS_IO_DESTROY              = 5201\n\tSYS_IO_GETEVENTS            = 5202\n\tSYS_IO_SUBMIT               = 5203\n\tSYS_IO_CANCEL               = 5204\n\tSYS_EXIT_GROUP              = 5205\n\tSYS_LOOKUP_DCOOKIE          = 5206\n\tSYS_EPOLL_CREATE            = 5207\n\tSYS_EPOLL_CTL               = 5208\n\tSYS_EPOLL_WAIT              = 5209\n\tSYS_REMAP_FILE_PAGES        = 5210\n\tSYS_RT_SIGRETURN            = 5211\n\tSYS_SET_TID_ADDRESS         = 5212\n\tSYS_RESTART_SYSCALL         = 5213\n\tSYS_SEMTIMEDOP              = 5214\n\tSYS_FADVISE64               = 5215\n\tSYS_TIMER_CREATE            = 5216\n\tSYS_TIMER_SETTIME           = 5217\n\tSYS_TIMER_GETTIME           = 5218\n\tSYS_TIMER_GETOVERRUN        = 5219\n\tSYS_TIMER_DELETE            = 5220\n\tSYS_CLOCK_SETTIME           = 5221\n\tSYS_CLOCK_GETTIME           = 5222\n\tSYS_CLOCK_GETRES            = 5223\n\tSYS_CLOCK_NANOSLEEP         = 5224\n\tSYS_TGKILL                  = 5225\n\tSYS_UTIMES                  = 5226\n\tSYS_MBIND                   = 5227\n\tSYS_GET_MEMPOLICY           = 5228\n\tSYS_SET_MEMPOLICY           = 5229\n\tSYS_MQ_OPEN                 = 5230\n\tSYS_MQ_UNLINK               = 5231\n\tSYS_MQ_TIMEDSEND            = 5232\n\tSYS_MQ_TIMEDRECEIVE         = 5233\n\tSYS_MQ_NOTIFY               = 5234\n\tSYS_MQ_GETSETATTR           = 5235\n\tSYS_VSERVER                 = 5236\n\tSYS_WAITID                  = 5237\n\tSYS_ADD_KEY                 = 5239\n\tSYS_REQUEST_KEY             = 5240\n\tSYS_KEYCTL                  = 5241\n\tSYS_SET_THREAD_AREA         = 5242\n\tSYS_INOTIFY_INIT            = 5243\n\tSYS_INOTIFY_ADD_WATCH       = 5244\n\tSYS_INOTIFY_RM_WATCH        = 5245\n\tSYS_MIGRATE_PAGES           = 5246\n\tSYS_OPENAT                  = 5247\n\tSYS_MKDIRAT                 = 5248\n\tSYS_MKNODAT                 = 5249\n\tSYS_FCHOWNAT                = 5250\n\tSYS_FUTIMESAT               = 5251\n\tSYS_NEWFSTATAT              = 5252\n\tSYS_UNLINKAT                = 5253\n\tSYS_RENAMEAT                = 5254\n\tSYS_LINKAT                  = 5255\n\tSYS_SYMLINKAT               = 5256\n\tSYS_READLINKAT              = 5257\n\tSYS_FCHMODAT                = 5258\n\tSYS_FACCESSAT               = 5259\n\tSYS_PSELECT6                = 5260\n\tSYS_PPOLL                   = 5261\n\tSYS_UNSHARE                 = 5262\n\tSYS_SPLICE                  = 5263\n\tSYS_SYNC_FILE_RANGE         = 5264\n\tSYS_TEE                     = 5265\n\tSYS_VMSPLICE                = 5266\n\tSYS_MOVE_PAGES              = 5267\n\tSYS_SET_ROBUST_LIST         = 5268\n\tSYS_GET_ROBUST_LIST         = 5269\n\tSYS_KEXEC_LOAD              = 5270\n\tSYS_GETCPU                  = 5271\n\tSYS_EPOLL_PWAIT             = 5272\n\tSYS_IOPRIO_SET              = 5273\n\tSYS_IOPRIO_GET              = 5274\n\tSYS_UTIMENSAT               = 5275\n\tSYS_SIGNALFD                = 5276\n\tSYS_TIMERFD                 = 5277\n\tSYS_EVENTFD                 = 5278\n\tSYS_FALLOCATE               = 5279\n\tSYS_TIMERFD_CREATE          = 5280\n\tSYS_TIMERFD_GETTIME         = 5281\n\tSYS_TIMERFD_SETTIME         = 5282\n\tSYS_SIGNALFD4               = 5283\n\tSYS_EVENTFD2                = 5284\n\tSYS_EPOLL_CREATE1           = 5285\n\tSYS_DUP3                    = 5286\n\tSYS_PIPE2                   = 5287\n\tSYS_INOTIFY_INIT1           = 5288\n\tSYS_PREADV                  = 5289\n\tSYS_PWRITEV                 = 5290\n\tSYS_RT_TGSIGQUEUEINFO       = 5291\n\tSYS_PERF_EVENT_OPEN         = 5292\n\tSYS_ACCEPT4                 = 5293\n\tSYS_RECVMMSG                = 5294\n\tSYS_FANOTIFY_INIT           = 5295\n\tSYS_FANOTIFY_MARK           = 5296\n\tSYS_PRLIMIT64               = 5297\n\tSYS_NAME_TO_HANDLE_AT       = 5298\n\tSYS_OPEN_BY_HANDLE_AT       = 5299\n\tSYS_CLOCK_ADJTIME           = 5300\n\tSYS_SYNCFS                  = 5301\n\tSYS_SENDMMSG                = 5302\n\tSYS_SETNS                   = 5303\n\tSYS_PROCESS_VM_READV        = 5304\n\tSYS_PROCESS_VM_WRITEV       = 5305\n\tSYS_KCMP                    = 5306\n\tSYS_FINIT_MODULE            = 5307\n\tSYS_GETDENTS64              = 5308\n\tSYS_SCHED_SETATTR           = 5309\n\tSYS_SCHED_GETATTR           = 5310\n\tSYS_RENAMEAT2               = 5311\n\tSYS_SECCOMP                 = 5312\n\tSYS_GETRANDOM               = 5313\n\tSYS_MEMFD_CREATE            = 5314\n\tSYS_BPF                     = 5315\n\tSYS_EXECVEAT                = 5316\n\tSYS_USERFAULTFD             = 5317\n\tSYS_MEMBARRIER              = 5318\n\tSYS_MLOCK2                  = 5319\n\tSYS_COPY_FILE_RANGE         = 5320\n\tSYS_PREADV2                 = 5321\n\tSYS_PWRITEV2                = 5322\n\tSYS_PKEY_MPROTECT           = 5323\n\tSYS_PKEY_ALLOC              = 5324\n\tSYS_PKEY_FREE               = 5325\n\tSYS_STATX                   = 5326\n\tSYS_RSEQ                    = 5327\n\tSYS_IO_PGETEVENTS           = 5328\n\tSYS_PIDFD_SEND_SIGNAL       = 5424\n\tSYS_IO_URING_SETUP          = 5425\n\tSYS_IO_URING_ENTER          = 5426\n\tSYS_IO_URING_REGISTER       = 5427\n\tSYS_OPEN_TREE               = 5428\n\tSYS_MOVE_MOUNT              = 5429\n\tSYS_FSOPEN                  = 5430\n\tSYS_FSCONFIG                = 5431\n\tSYS_FSMOUNT                 = 5432\n\tSYS_FSPICK                  = 5433\n\tSYS_PIDFD_OPEN              = 5434\n\tSYS_CLONE3                  = 5435\n\tSYS_CLOSE_RANGE             = 5436\n\tSYS_OPENAT2                 = 5437\n\tSYS_PIDFD_GETFD             = 5438\n\tSYS_FACCESSAT2              = 5439\n\tSYS_PROCESS_MADVISE         = 5440\n\tSYS_EPOLL_PWAIT2            = 5441\n\tSYS_MOUNT_SETATTR           = 5442\n\tSYS_QUOTACTL_FD             = 5443\n\tSYS_LANDLOCK_CREATE_RULESET = 5444\n\tSYS_LANDLOCK_ADD_RULE       = 5445\n\tSYS_LANDLOCK_RESTRICT_SELF  = 5446\n\tSYS_PROCESS_MRELEASE        = 5448\n\tSYS_FUTEX_WAITV             = 5449\n\tSYS_SET_MEMPOLICY_HOME_NODE = 5450\n\tSYS_CACHESTAT               = 5451\n\tSYS_FCHMODAT2               = 5452\n\tSYS_MAP_SHADOW_STACK        = 5453\n\tSYS_FUTEX_WAKE              = 5454\n\tSYS_FUTEX_WAIT              = 5455\n\tSYS_FUTEX_REQUEUE           = 5456\n\tSYS_STATMOUNT               = 5457\n\tSYS_LISTMOUNT               = 5458\n\tSYS_LSM_GET_SELF_ATTR       = 5459\n\tSYS_LSM_SET_SELF_ATTR       = 5460\n\tSYS_LSM_LIST_MODULES        = 5461\n\tSYS_MSEAL                   = 5462\n\tSYS_SETXATTRAT              = 5463\n\tSYS_GETXATTRAT              = 5464\n\tSYS_LISTXATTRAT             = 5465\n\tSYS_REMOVEXATTRAT           = 5466\n\tSYS_OPEN_TREE_ATTR          = 5467\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mips64le/include /tmp/mips64le/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips64le && linux\n\npackage unix\n\nconst (\n\tSYS_READ                    = 5000\n\tSYS_WRITE                   = 5001\n\tSYS_OPEN                    = 5002\n\tSYS_CLOSE                   = 5003\n\tSYS_STAT                    = 5004\n\tSYS_FSTAT                   = 5005\n\tSYS_LSTAT                   = 5006\n\tSYS_POLL                    = 5007\n\tSYS_LSEEK                   = 5008\n\tSYS_MMAP                    = 5009\n\tSYS_MPROTECT                = 5010\n\tSYS_MUNMAP                  = 5011\n\tSYS_BRK                     = 5012\n\tSYS_RT_SIGACTION            = 5013\n\tSYS_RT_SIGPROCMASK          = 5014\n\tSYS_IOCTL                   = 5015\n\tSYS_PREAD64                 = 5016\n\tSYS_PWRITE64                = 5017\n\tSYS_READV                   = 5018\n\tSYS_WRITEV                  = 5019\n\tSYS_ACCESS                  = 5020\n\tSYS_PIPE                    = 5021\n\tSYS__NEWSELECT              = 5022\n\tSYS_SCHED_YIELD             = 5023\n\tSYS_MREMAP                  = 5024\n\tSYS_MSYNC                   = 5025\n\tSYS_MINCORE                 = 5026\n\tSYS_MADVISE                 = 5027\n\tSYS_SHMGET                  = 5028\n\tSYS_SHMAT                   = 5029\n\tSYS_SHMCTL                  = 5030\n\tSYS_DUP                     = 5031\n\tSYS_DUP2                    = 5032\n\tSYS_PAUSE                   = 5033\n\tSYS_NANOSLEEP               = 5034\n\tSYS_GETITIMER               = 5035\n\tSYS_SETITIMER               = 5036\n\tSYS_ALARM                   = 5037\n\tSYS_GETPID                  = 5038\n\tSYS_SENDFILE                = 5039\n\tSYS_SOCKET                  = 5040\n\tSYS_CONNECT                 = 5041\n\tSYS_ACCEPT                  = 5042\n\tSYS_SENDTO                  = 5043\n\tSYS_RECVFROM                = 5044\n\tSYS_SENDMSG                 = 5045\n\tSYS_RECVMSG                 = 5046\n\tSYS_SHUTDOWN                = 5047\n\tSYS_BIND                    = 5048\n\tSYS_LISTEN                  = 5049\n\tSYS_GETSOCKNAME             = 5050\n\tSYS_GETPEERNAME             = 5051\n\tSYS_SOCKETPAIR              = 5052\n\tSYS_SETSOCKOPT              = 5053\n\tSYS_GETSOCKOPT              = 5054\n\tSYS_CLONE                   = 5055\n\tSYS_FORK                    = 5056\n\tSYS_EXECVE                  = 5057\n\tSYS_EXIT                    = 5058\n\tSYS_WAIT4                   = 5059\n\tSYS_KILL                    = 5060\n\tSYS_UNAME                   = 5061\n\tSYS_SEMGET                  = 5062\n\tSYS_SEMOP                   = 5063\n\tSYS_SEMCTL                  = 5064\n\tSYS_SHMDT                   = 5065\n\tSYS_MSGGET                  = 5066\n\tSYS_MSGSND                  = 5067\n\tSYS_MSGRCV                  = 5068\n\tSYS_MSGCTL                  = 5069\n\tSYS_FCNTL                   = 5070\n\tSYS_FLOCK                   = 5071\n\tSYS_FSYNC                   = 5072\n\tSYS_FDATASYNC               = 5073\n\tSYS_TRUNCATE                = 5074\n\tSYS_FTRUNCATE               = 5075\n\tSYS_GETDENTS                = 5076\n\tSYS_GETCWD                  = 5077\n\tSYS_CHDIR                   = 5078\n\tSYS_FCHDIR                  = 5079\n\tSYS_RENAME                  = 5080\n\tSYS_MKDIR                   = 5081\n\tSYS_RMDIR                   = 5082\n\tSYS_CREAT                   = 5083\n\tSYS_LINK                    = 5084\n\tSYS_UNLINK                  = 5085\n\tSYS_SYMLINK                 = 5086\n\tSYS_READLINK                = 5087\n\tSYS_CHMOD                   = 5088\n\tSYS_FCHMOD                  = 5089\n\tSYS_CHOWN                   = 5090\n\tSYS_FCHOWN                  = 5091\n\tSYS_LCHOWN                  = 5092\n\tSYS_UMASK                   = 5093\n\tSYS_GETTIMEOFDAY            = 5094\n\tSYS_GETRLIMIT               = 5095\n\tSYS_GETRUSAGE               = 5096\n\tSYS_SYSINFO                 = 5097\n\tSYS_TIMES                   = 5098\n\tSYS_PTRACE                  = 5099\n\tSYS_GETUID                  = 5100\n\tSYS_SYSLOG                  = 5101\n\tSYS_GETGID                  = 5102\n\tSYS_SETUID                  = 5103\n\tSYS_SETGID                  = 5104\n\tSYS_GETEUID                 = 5105\n\tSYS_GETEGID                 = 5106\n\tSYS_SETPGID                 = 5107\n\tSYS_GETPPID                 = 5108\n\tSYS_GETPGRP                 = 5109\n\tSYS_SETSID                  = 5110\n\tSYS_SETREUID                = 5111\n\tSYS_SETREGID                = 5112\n\tSYS_GETGROUPS               = 5113\n\tSYS_SETGROUPS               = 5114\n\tSYS_SETRESUID               = 5115\n\tSYS_GETRESUID               = 5116\n\tSYS_SETRESGID               = 5117\n\tSYS_GETRESGID               = 5118\n\tSYS_GETPGID                 = 5119\n\tSYS_SETFSUID                = 5120\n\tSYS_SETFSGID                = 5121\n\tSYS_GETSID                  = 5122\n\tSYS_CAPGET                  = 5123\n\tSYS_CAPSET                  = 5124\n\tSYS_RT_SIGPENDING           = 5125\n\tSYS_RT_SIGTIMEDWAIT         = 5126\n\tSYS_RT_SIGQUEUEINFO         = 5127\n\tSYS_RT_SIGSUSPEND           = 5128\n\tSYS_SIGALTSTACK             = 5129\n\tSYS_UTIME                   = 5130\n\tSYS_MKNOD                   = 5131\n\tSYS_PERSONALITY             = 5132\n\tSYS_USTAT                   = 5133\n\tSYS_STATFS                  = 5134\n\tSYS_FSTATFS                 = 5135\n\tSYS_SYSFS                   = 5136\n\tSYS_GETPRIORITY             = 5137\n\tSYS_SETPRIORITY             = 5138\n\tSYS_SCHED_SETPARAM          = 5139\n\tSYS_SCHED_GETPARAM          = 5140\n\tSYS_SCHED_SETSCHEDULER      = 5141\n\tSYS_SCHED_GETSCHEDULER      = 5142\n\tSYS_SCHED_GET_PRIORITY_MAX  = 5143\n\tSYS_SCHED_GET_PRIORITY_MIN  = 5144\n\tSYS_SCHED_RR_GET_INTERVAL   = 5145\n\tSYS_MLOCK                   = 5146\n\tSYS_MUNLOCK                 = 5147\n\tSYS_MLOCKALL                = 5148\n\tSYS_MUNLOCKALL              = 5149\n\tSYS_VHANGUP                 = 5150\n\tSYS_PIVOT_ROOT              = 5151\n\tSYS__SYSCTL                 = 5152\n\tSYS_PRCTL                   = 5153\n\tSYS_ADJTIMEX                = 5154\n\tSYS_SETRLIMIT               = 5155\n\tSYS_CHROOT                  = 5156\n\tSYS_SYNC                    = 5157\n\tSYS_ACCT                    = 5158\n\tSYS_SETTIMEOFDAY            = 5159\n\tSYS_MOUNT                   = 5160\n\tSYS_UMOUNT2                 = 5161\n\tSYS_SWAPON                  = 5162\n\tSYS_SWAPOFF                 = 5163\n\tSYS_REBOOT                  = 5164\n\tSYS_SETHOSTNAME             = 5165\n\tSYS_SETDOMAINNAME           = 5166\n\tSYS_CREATE_MODULE           = 5167\n\tSYS_INIT_MODULE             = 5168\n\tSYS_DELETE_MODULE           = 5169\n\tSYS_GET_KERNEL_SYMS         = 5170\n\tSYS_QUERY_MODULE            = 5171\n\tSYS_QUOTACTL                = 5172\n\tSYS_NFSSERVCTL              = 5173\n\tSYS_GETPMSG                 = 5174\n\tSYS_PUTPMSG                 = 5175\n\tSYS_AFS_SYSCALL             = 5176\n\tSYS_RESERVED177             = 5177\n\tSYS_GETTID                  = 5178\n\tSYS_READAHEAD               = 5179\n\tSYS_SETXATTR                = 5180\n\tSYS_LSETXATTR               = 5181\n\tSYS_FSETXATTR               = 5182\n\tSYS_GETXATTR                = 5183\n\tSYS_LGETXATTR               = 5184\n\tSYS_FGETXATTR               = 5185\n\tSYS_LISTXATTR               = 5186\n\tSYS_LLISTXATTR              = 5187\n\tSYS_FLISTXATTR              = 5188\n\tSYS_REMOVEXATTR             = 5189\n\tSYS_LREMOVEXATTR            = 5190\n\tSYS_FREMOVEXATTR            = 5191\n\tSYS_TKILL                   = 5192\n\tSYS_RESERVED193             = 5193\n\tSYS_FUTEX                   = 5194\n\tSYS_SCHED_SETAFFINITY       = 5195\n\tSYS_SCHED_GETAFFINITY       = 5196\n\tSYS_CACHEFLUSH              = 5197\n\tSYS_CACHECTL                = 5198\n\tSYS_SYSMIPS                 = 5199\n\tSYS_IO_SETUP                = 5200\n\tSYS_IO_DESTROY              = 5201\n\tSYS_IO_GETEVENTS            = 5202\n\tSYS_IO_SUBMIT               = 5203\n\tSYS_IO_CANCEL               = 5204\n\tSYS_EXIT_GROUP              = 5205\n\tSYS_LOOKUP_DCOOKIE          = 5206\n\tSYS_EPOLL_CREATE            = 5207\n\tSYS_EPOLL_CTL               = 5208\n\tSYS_EPOLL_WAIT              = 5209\n\tSYS_REMAP_FILE_PAGES        = 5210\n\tSYS_RT_SIGRETURN            = 5211\n\tSYS_SET_TID_ADDRESS         = 5212\n\tSYS_RESTART_SYSCALL         = 5213\n\tSYS_SEMTIMEDOP              = 5214\n\tSYS_FADVISE64               = 5215\n\tSYS_TIMER_CREATE            = 5216\n\tSYS_TIMER_SETTIME           = 5217\n\tSYS_TIMER_GETTIME           = 5218\n\tSYS_TIMER_GETOVERRUN        = 5219\n\tSYS_TIMER_DELETE            = 5220\n\tSYS_CLOCK_SETTIME           = 5221\n\tSYS_CLOCK_GETTIME           = 5222\n\tSYS_CLOCK_GETRES            = 5223\n\tSYS_CLOCK_NANOSLEEP         = 5224\n\tSYS_TGKILL                  = 5225\n\tSYS_UTIMES                  = 5226\n\tSYS_MBIND                   = 5227\n\tSYS_GET_MEMPOLICY           = 5228\n\tSYS_SET_MEMPOLICY           = 5229\n\tSYS_MQ_OPEN                 = 5230\n\tSYS_MQ_UNLINK               = 5231\n\tSYS_MQ_TIMEDSEND            = 5232\n\tSYS_MQ_TIMEDRECEIVE         = 5233\n\tSYS_MQ_NOTIFY               = 5234\n\tSYS_MQ_GETSETATTR           = 5235\n\tSYS_VSERVER                 = 5236\n\tSYS_WAITID                  = 5237\n\tSYS_ADD_KEY                 = 5239\n\tSYS_REQUEST_KEY             = 5240\n\tSYS_KEYCTL                  = 5241\n\tSYS_SET_THREAD_AREA         = 5242\n\tSYS_INOTIFY_INIT            = 5243\n\tSYS_INOTIFY_ADD_WATCH       = 5244\n\tSYS_INOTIFY_RM_WATCH        = 5245\n\tSYS_MIGRATE_PAGES           = 5246\n\tSYS_OPENAT                  = 5247\n\tSYS_MKDIRAT                 = 5248\n\tSYS_MKNODAT                 = 5249\n\tSYS_FCHOWNAT                = 5250\n\tSYS_FUTIMESAT               = 5251\n\tSYS_NEWFSTATAT              = 5252\n\tSYS_UNLINKAT                = 5253\n\tSYS_RENAMEAT                = 5254\n\tSYS_LINKAT                  = 5255\n\tSYS_SYMLINKAT               = 5256\n\tSYS_READLINKAT              = 5257\n\tSYS_FCHMODAT                = 5258\n\tSYS_FACCESSAT               = 5259\n\tSYS_PSELECT6                = 5260\n\tSYS_PPOLL                   = 5261\n\tSYS_UNSHARE                 = 5262\n\tSYS_SPLICE                  = 5263\n\tSYS_SYNC_FILE_RANGE         = 5264\n\tSYS_TEE                     = 5265\n\tSYS_VMSPLICE                = 5266\n\tSYS_MOVE_PAGES              = 5267\n\tSYS_SET_ROBUST_LIST         = 5268\n\tSYS_GET_ROBUST_LIST         = 5269\n\tSYS_KEXEC_LOAD              = 5270\n\tSYS_GETCPU                  = 5271\n\tSYS_EPOLL_PWAIT             = 5272\n\tSYS_IOPRIO_SET              = 5273\n\tSYS_IOPRIO_GET              = 5274\n\tSYS_UTIMENSAT               = 5275\n\tSYS_SIGNALFD                = 5276\n\tSYS_TIMERFD                 = 5277\n\tSYS_EVENTFD                 = 5278\n\tSYS_FALLOCATE               = 5279\n\tSYS_TIMERFD_CREATE          = 5280\n\tSYS_TIMERFD_GETTIME         = 5281\n\tSYS_TIMERFD_SETTIME         = 5282\n\tSYS_SIGNALFD4               = 5283\n\tSYS_EVENTFD2                = 5284\n\tSYS_EPOLL_CREATE1           = 5285\n\tSYS_DUP3                    = 5286\n\tSYS_PIPE2                   = 5287\n\tSYS_INOTIFY_INIT1           = 5288\n\tSYS_PREADV                  = 5289\n\tSYS_PWRITEV                 = 5290\n\tSYS_RT_TGSIGQUEUEINFO       = 5291\n\tSYS_PERF_EVENT_OPEN         = 5292\n\tSYS_ACCEPT4                 = 5293\n\tSYS_RECVMMSG                = 5294\n\tSYS_FANOTIFY_INIT           = 5295\n\tSYS_FANOTIFY_MARK           = 5296\n\tSYS_PRLIMIT64               = 5297\n\tSYS_NAME_TO_HANDLE_AT       = 5298\n\tSYS_OPEN_BY_HANDLE_AT       = 5299\n\tSYS_CLOCK_ADJTIME           = 5300\n\tSYS_SYNCFS                  = 5301\n\tSYS_SENDMMSG                = 5302\n\tSYS_SETNS                   = 5303\n\tSYS_PROCESS_VM_READV        = 5304\n\tSYS_PROCESS_VM_WRITEV       = 5305\n\tSYS_KCMP                    = 5306\n\tSYS_FINIT_MODULE            = 5307\n\tSYS_GETDENTS64              = 5308\n\tSYS_SCHED_SETATTR           = 5309\n\tSYS_SCHED_GETATTR           = 5310\n\tSYS_RENAMEAT2               = 5311\n\tSYS_SECCOMP                 = 5312\n\tSYS_GETRANDOM               = 5313\n\tSYS_MEMFD_CREATE            = 5314\n\tSYS_BPF                     = 5315\n\tSYS_EXECVEAT                = 5316\n\tSYS_USERFAULTFD             = 5317\n\tSYS_MEMBARRIER              = 5318\n\tSYS_MLOCK2                  = 5319\n\tSYS_COPY_FILE_RANGE         = 5320\n\tSYS_PREADV2                 = 5321\n\tSYS_PWRITEV2                = 5322\n\tSYS_PKEY_MPROTECT           = 5323\n\tSYS_PKEY_ALLOC              = 5324\n\tSYS_PKEY_FREE               = 5325\n\tSYS_STATX                   = 5326\n\tSYS_RSEQ                    = 5327\n\tSYS_IO_PGETEVENTS           = 5328\n\tSYS_PIDFD_SEND_SIGNAL       = 5424\n\tSYS_IO_URING_SETUP          = 5425\n\tSYS_IO_URING_ENTER          = 5426\n\tSYS_IO_URING_REGISTER       = 5427\n\tSYS_OPEN_TREE               = 5428\n\tSYS_MOVE_MOUNT              = 5429\n\tSYS_FSOPEN                  = 5430\n\tSYS_FSCONFIG                = 5431\n\tSYS_FSMOUNT                 = 5432\n\tSYS_FSPICK                  = 5433\n\tSYS_PIDFD_OPEN              = 5434\n\tSYS_CLONE3                  = 5435\n\tSYS_CLOSE_RANGE             = 5436\n\tSYS_OPENAT2                 = 5437\n\tSYS_PIDFD_GETFD             = 5438\n\tSYS_FACCESSAT2              = 5439\n\tSYS_PROCESS_MADVISE         = 5440\n\tSYS_EPOLL_PWAIT2            = 5441\n\tSYS_MOUNT_SETATTR           = 5442\n\tSYS_QUOTACTL_FD             = 5443\n\tSYS_LANDLOCK_CREATE_RULESET = 5444\n\tSYS_LANDLOCK_ADD_RULE       = 5445\n\tSYS_LANDLOCK_RESTRICT_SELF  = 5446\n\tSYS_PROCESS_MRELEASE        = 5448\n\tSYS_FUTEX_WAITV             = 5449\n\tSYS_SET_MEMPOLICY_HOME_NODE = 5450\n\tSYS_CACHESTAT               = 5451\n\tSYS_FCHMODAT2               = 5452\n\tSYS_MAP_SHADOW_STACK        = 5453\n\tSYS_FUTEX_WAKE              = 5454\n\tSYS_FUTEX_WAIT              = 5455\n\tSYS_FUTEX_REQUEUE           = 5456\n\tSYS_STATMOUNT               = 5457\n\tSYS_LISTMOUNT               = 5458\n\tSYS_LSM_GET_SELF_ATTR       = 5459\n\tSYS_LSM_SET_SELF_ATTR       = 5460\n\tSYS_LSM_LIST_MODULES        = 5461\n\tSYS_MSEAL                   = 5462\n\tSYS_SETXATTRAT              = 5463\n\tSYS_GETXATTRAT              = 5464\n\tSYS_LISTXATTRAT             = 5465\n\tSYS_REMOVEXATTRAT           = 5466\n\tSYS_OPEN_TREE_ATTR          = 5467\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\tSYS_OPEN_TREE_ATTR               = 4467\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/ppc/include /tmp/ppc/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc && linux\n\npackage unix\n\nconst (\n\tSYS_RESTART_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_WAITPID                      = 7\n\tSYS_CREAT                        = 8\n\tSYS_LINK                         = 9\n\tSYS_UNLINK                       = 10\n\tSYS_EXECVE                       = 11\n\tSYS_CHDIR                        = 12\n\tSYS_TIME                         = 13\n\tSYS_MKNOD                        = 14\n\tSYS_CHMOD                        = 15\n\tSYS_LCHOWN                       = 16\n\tSYS_BREAK                        = 17\n\tSYS_OLDSTAT                      = 18\n\tSYS_LSEEK                        = 19\n\tSYS_GETPID                       = 20\n\tSYS_MOUNT                        = 21\n\tSYS_UMOUNT                       = 22\n\tSYS_SETUID                       = 23\n\tSYS_GETUID                       = 24\n\tSYS_STIME                        = 25\n\tSYS_PTRACE                       = 26\n\tSYS_ALARM                        = 27\n\tSYS_OLDFSTAT                     = 28\n\tSYS_PAUSE                        = 29\n\tSYS_UTIME                        = 30\n\tSYS_STTY                         = 31\n\tSYS_GTTY                         = 32\n\tSYS_ACCESS                       = 33\n\tSYS_NICE                         = 34\n\tSYS_FTIME                        = 35\n\tSYS_SYNC                         = 36\n\tSYS_KILL                         = 37\n\tSYS_RENAME                       = 38\n\tSYS_MKDIR                        = 39\n\tSYS_RMDIR                        = 40\n\tSYS_DUP                          = 41\n\tSYS_PIPE                         = 42\n\tSYS_TIMES                        = 43\n\tSYS_PROF                         = 44\n\tSYS_BRK                          = 45\n\tSYS_SETGID                       = 46\n\tSYS_GETGID                       = 47\n\tSYS_SIGNAL                       = 48\n\tSYS_GETEUID                      = 49\n\tSYS_GETEGID                      = 50\n\tSYS_ACCT                         = 51\n\tSYS_UMOUNT2                      = 52\n\tSYS_LOCK                         = 53\n\tSYS_IOCTL                        = 54\n\tSYS_FCNTL                        = 55\n\tSYS_MPX                          = 56\n\tSYS_SETPGID                      = 57\n\tSYS_ULIMIT                       = 58\n\tSYS_OLDOLDUNAME                  = 59\n\tSYS_UMASK                        = 60\n\tSYS_CHROOT                       = 61\n\tSYS_USTAT                        = 62\n\tSYS_DUP2                         = 63\n\tSYS_GETPPID                      = 64\n\tSYS_GETPGRP                      = 65\n\tSYS_SETSID                       = 66\n\tSYS_SIGACTION                    = 67\n\tSYS_SGETMASK                     = 68\n\tSYS_SSETMASK                     = 69\n\tSYS_SETREUID                     = 70\n\tSYS_SETREGID                     = 71\n\tSYS_SIGSUSPEND                   = 72\n\tSYS_SIGPENDING                   = 73\n\tSYS_SETHOSTNAME                  = 74\n\tSYS_SETRLIMIT                    = 75\n\tSYS_GETRLIMIT                    = 76\n\tSYS_GETRUSAGE                    = 77\n\tSYS_GETTIMEOFDAY                 = 78\n\tSYS_SETTIMEOFDAY                 = 79\n\tSYS_GETGROUPS                    = 80\n\tSYS_SETGROUPS                    = 81\n\tSYS_SELECT                       = 82\n\tSYS_SYMLINK                      = 83\n\tSYS_OLDLSTAT                     = 84\n\tSYS_READLINK                     = 85\n\tSYS_USELIB                       = 86\n\tSYS_SWAPON                       = 87\n\tSYS_REBOOT                       = 88\n\tSYS_READDIR                      = 89\n\tSYS_MMAP                         = 90\n\tSYS_MUNMAP                       = 91\n\tSYS_TRUNCATE                     = 92\n\tSYS_FTRUNCATE                    = 93\n\tSYS_FCHMOD                       = 94\n\tSYS_FCHOWN                       = 95\n\tSYS_GETPRIORITY                  = 96\n\tSYS_SETPRIORITY                  = 97\n\tSYS_PROFIL                       = 98\n\tSYS_STATFS                       = 99\n\tSYS_FSTATFS                      = 100\n\tSYS_IOPERM                       = 101\n\tSYS_SOCKETCALL                   = 102\n\tSYS_SYSLOG                       = 103\n\tSYS_SETITIMER                    = 104\n\tSYS_GETITIMER                    = 105\n\tSYS_STAT                         = 106\n\tSYS_LSTAT                        = 107\n\tSYS_FSTAT                        = 108\n\tSYS_OLDUNAME                     = 109\n\tSYS_IOPL                         = 110\n\tSYS_VHANGUP                      = 111\n\tSYS_IDLE                         = 112\n\tSYS_VM86                         = 113\n\tSYS_WAIT4                        = 114\n\tSYS_SWAPOFF                      = 115\n\tSYS_SYSINFO                      = 116\n\tSYS_IPC                          = 117\n\tSYS_FSYNC                        = 118\n\tSYS_SIGRETURN                    = 119\n\tSYS_CLONE                        = 120\n\tSYS_SETDOMAINNAME                = 121\n\tSYS_UNAME                        = 122\n\tSYS_MODIFY_LDT                   = 123\n\tSYS_ADJTIMEX                     = 124\n\tSYS_MPROTECT                     = 125\n\tSYS_SIGPROCMASK                  = 126\n\tSYS_CREATE_MODULE                = 127\n\tSYS_INIT_MODULE                  = 128\n\tSYS_DELETE_MODULE                = 129\n\tSYS_GET_KERNEL_SYMS              = 130\n\tSYS_QUOTACTL                     = 131\n\tSYS_GETPGID                      = 132\n\tSYS_FCHDIR                       = 133\n\tSYS_BDFLUSH                      = 134\n\tSYS_SYSFS                        = 135\n\tSYS_PERSONALITY                  = 136\n\tSYS_AFS_SYSCALL                  = 137\n\tSYS_SETFSUID                     = 138\n\tSYS_SETFSGID                     = 139\n\tSYS__LLSEEK                      = 140\n\tSYS_GETDENTS                     = 141\n\tSYS__NEWSELECT                   = 142\n\tSYS_FLOCK                        = 143\n\tSYS_MSYNC                        = 144\n\tSYS_READV                        = 145\n\tSYS_WRITEV                       = 146\n\tSYS_GETSID                       = 147\n\tSYS_FDATASYNC                    = 148\n\tSYS__SYSCTL                      = 149\n\tSYS_MLOCK                        = 150\n\tSYS_MUNLOCK                      = 151\n\tSYS_MLOCKALL                     = 152\n\tSYS_MUNLOCKALL                   = 153\n\tSYS_SCHED_SETPARAM               = 154\n\tSYS_SCHED_GETPARAM               = 155\n\tSYS_SCHED_SETSCHEDULER           = 156\n\tSYS_SCHED_GETSCHEDULER           = 157\n\tSYS_SCHED_YIELD                  = 158\n\tSYS_SCHED_GET_PRIORITY_MAX       = 159\n\tSYS_SCHED_GET_PRIORITY_MIN       = 160\n\tSYS_SCHED_RR_GET_INTERVAL        = 161\n\tSYS_NANOSLEEP                    = 162\n\tSYS_MREMAP                       = 163\n\tSYS_SETRESUID                    = 164\n\tSYS_GETRESUID                    = 165\n\tSYS_QUERY_MODULE                 = 166\n\tSYS_POLL                         = 167\n\tSYS_NFSSERVCTL                   = 168\n\tSYS_SETRESGID                    = 169\n\tSYS_GETRESGID                    = 170\n\tSYS_PRCTL                        = 171\n\tSYS_RT_SIGRETURN                 = 172\n\tSYS_RT_SIGACTION                 = 173\n\tSYS_RT_SIGPROCMASK               = 174\n\tSYS_RT_SIGPENDING                = 175\n\tSYS_RT_SIGTIMEDWAIT              = 176\n\tSYS_RT_SIGQUEUEINFO              = 177\n\tSYS_RT_SIGSUSPEND                = 178\n\tSYS_PREAD64                      = 179\n\tSYS_PWRITE64                     = 180\n\tSYS_CHOWN                        = 181\n\tSYS_GETCWD                       = 182\n\tSYS_CAPGET                       = 183\n\tSYS_CAPSET                       = 184\n\tSYS_SIGALTSTACK                  = 185\n\tSYS_SENDFILE                     = 186\n\tSYS_GETPMSG                      = 187\n\tSYS_PUTPMSG                      = 188\n\tSYS_VFORK                        = 189\n\tSYS_UGETRLIMIT                   = 190\n\tSYS_READAHEAD                    = 191\n\tSYS_MMAP2                        = 192\n\tSYS_TRUNCATE64                   = 193\n\tSYS_FTRUNCATE64                  = 194\n\tSYS_STAT64                       = 195\n\tSYS_LSTAT64                      = 196\n\tSYS_FSTAT64                      = 197\n\tSYS_PCICONFIG_READ               = 198\n\tSYS_PCICONFIG_WRITE              = 199\n\tSYS_PCICONFIG_IOBASE             = 200\n\tSYS_MULTIPLEXER                  = 201\n\tSYS_GETDENTS64                   = 202\n\tSYS_PIVOT_ROOT                   = 203\n\tSYS_FCNTL64                      = 204\n\tSYS_MADVISE                      = 205\n\tSYS_MINCORE                      = 206\n\tSYS_GETTID                       = 207\n\tSYS_TKILL                        = 208\n\tSYS_SETXATTR                     = 209\n\tSYS_LSETXATTR                    = 210\n\tSYS_FSETXATTR                    = 211\n\tSYS_GETXATTR                     = 212\n\tSYS_LGETXATTR                    = 213\n\tSYS_FGETXATTR                    = 214\n\tSYS_LISTXATTR                    = 215\n\tSYS_LLISTXATTR                   = 216\n\tSYS_FLISTXATTR                   = 217\n\tSYS_REMOVEXATTR                  = 218\n\tSYS_LREMOVEXATTR                 = 219\n\tSYS_FREMOVEXATTR                 = 220\n\tSYS_FUTEX                        = 221\n\tSYS_SCHED_SETAFFINITY            = 222\n\tSYS_SCHED_GETAFFINITY            = 223\n\tSYS_TUXCALL                      = 225\n\tSYS_SENDFILE64                   = 226\n\tSYS_IO_SETUP                     = 227\n\tSYS_IO_DESTROY                   = 228\n\tSYS_IO_GETEVENTS                 = 229\n\tSYS_IO_SUBMIT                    = 230\n\tSYS_IO_CANCEL                    = 231\n\tSYS_SET_TID_ADDRESS              = 232\n\tSYS_FADVISE64                    = 233\n\tSYS_EXIT_GROUP                   = 234\n\tSYS_LOOKUP_DCOOKIE               = 235\n\tSYS_EPOLL_CREATE                 = 236\n\tSYS_EPOLL_CTL                    = 237\n\tSYS_EPOLL_WAIT                   = 238\n\tSYS_REMAP_FILE_PAGES             = 239\n\tSYS_TIMER_CREATE                 = 240\n\tSYS_TIMER_SETTIME                = 241\n\tSYS_TIMER_GETTIME                = 242\n\tSYS_TIMER_GETOVERRUN             = 243\n\tSYS_TIMER_DELETE                 = 244\n\tSYS_CLOCK_SETTIME                = 245\n\tSYS_CLOCK_GETTIME                = 246\n\tSYS_CLOCK_GETRES                 = 247\n\tSYS_CLOCK_NANOSLEEP              = 248\n\tSYS_SWAPCONTEXT                  = 249\n\tSYS_TGKILL                       = 250\n\tSYS_UTIMES                       = 251\n\tSYS_STATFS64                     = 252\n\tSYS_FSTATFS64                    = 253\n\tSYS_FADVISE64_64                 = 254\n\tSYS_RTAS                         = 255\n\tSYS_SYS_DEBUG_SETCONTEXT         = 256\n\tSYS_MIGRATE_PAGES                = 258\n\tSYS_MBIND                        = 259\n\tSYS_GET_MEMPOLICY                = 260\n\tSYS_SET_MEMPOLICY                = 261\n\tSYS_MQ_OPEN                      = 262\n\tSYS_MQ_UNLINK                    = 263\n\tSYS_MQ_TIMEDSEND                 = 264\n\tSYS_MQ_TIMEDRECEIVE              = 265\n\tSYS_MQ_NOTIFY                    = 266\n\tSYS_MQ_GETSETATTR                = 267\n\tSYS_KEXEC_LOAD                   = 268\n\tSYS_ADD_KEY                      = 269\n\tSYS_REQUEST_KEY                  = 270\n\tSYS_KEYCTL                       = 271\n\tSYS_WAITID                       = 272\n\tSYS_IOPRIO_SET                   = 273\n\tSYS_IOPRIO_GET                   = 274\n\tSYS_INOTIFY_INIT                 = 275\n\tSYS_INOTIFY_ADD_WATCH            = 276\n\tSYS_INOTIFY_RM_WATCH             = 277\n\tSYS_SPU_RUN                      = 278\n\tSYS_SPU_CREATE                   = 279\n\tSYS_PSELECT6                     = 280\n\tSYS_PPOLL                        = 281\n\tSYS_UNSHARE                      = 282\n\tSYS_SPLICE                       = 283\n\tSYS_TEE                          = 284\n\tSYS_VMSPLICE                     = 285\n\tSYS_OPENAT                       = 286\n\tSYS_MKDIRAT                      = 287\n\tSYS_MKNODAT                      = 288\n\tSYS_FCHOWNAT                     = 289\n\tSYS_FUTIMESAT                    = 290\n\tSYS_FSTATAT64                    = 291\n\tSYS_UNLINKAT                     = 292\n\tSYS_RENAMEAT                     = 293\n\tSYS_LINKAT                       = 294\n\tSYS_SYMLINKAT                    = 295\n\tSYS_READLINKAT                   = 296\n\tSYS_FCHMODAT                     = 297\n\tSYS_FACCESSAT                    = 298\n\tSYS_GET_ROBUST_LIST              = 299\n\tSYS_SET_ROBUST_LIST              = 300\n\tSYS_MOVE_PAGES                   = 301\n\tSYS_GETCPU                       = 302\n\tSYS_EPOLL_PWAIT                  = 303\n\tSYS_UTIMENSAT                    = 304\n\tSYS_SIGNALFD                     = 305\n\tSYS_TIMERFD_CREATE               = 306\n\tSYS_EVENTFD                      = 307\n\tSYS_SYNC_FILE_RANGE2             = 308\n\tSYS_FALLOCATE                    = 309\n\tSYS_SUBPAGE_PROT                 = 310\n\tSYS_TIMERFD_SETTIME              = 311\n\tSYS_TIMERFD_GETTIME              = 312\n\tSYS_SIGNALFD4                    = 313\n\tSYS_EVENTFD2                     = 314\n\tSYS_EPOLL_CREATE1                = 315\n\tSYS_DUP3                         = 316\n\tSYS_PIPE2                        = 317\n\tSYS_INOTIFY_INIT1                = 318\n\tSYS_PERF_EVENT_OPEN              = 319\n\tSYS_PREADV                       = 320\n\tSYS_PWRITEV                      = 321\n\tSYS_RT_TGSIGQUEUEINFO            = 322\n\tSYS_FANOTIFY_INIT                = 323\n\tSYS_FANOTIFY_MARK                = 324\n\tSYS_PRLIMIT64                    = 325\n\tSYS_SOCKET                       = 326\n\tSYS_BIND                         = 327\n\tSYS_CONNECT                      = 328\n\tSYS_LISTEN                       = 329\n\tSYS_ACCEPT                       = 330\n\tSYS_GETSOCKNAME                  = 331\n\tSYS_GETPEERNAME                  = 332\n\tSYS_SOCKETPAIR                   = 333\n\tSYS_SEND                         = 334\n\tSYS_SENDTO                       = 335\n\tSYS_RECV                         = 336\n\tSYS_RECVFROM                     = 337\n\tSYS_SHUTDOWN                     = 338\n\tSYS_SETSOCKOPT                   = 339\n\tSYS_GETSOCKOPT                   = 340\n\tSYS_SENDMSG                      = 341\n\tSYS_RECVMSG                      = 342\n\tSYS_RECVMMSG                     = 343\n\tSYS_ACCEPT4                      = 344\n\tSYS_NAME_TO_HANDLE_AT            = 345\n\tSYS_OPEN_BY_HANDLE_AT            = 346\n\tSYS_CLOCK_ADJTIME                = 347\n\tSYS_SYNCFS                       = 348\n\tSYS_SENDMMSG                     = 349\n\tSYS_SETNS                        = 350\n\tSYS_PROCESS_VM_READV             = 351\n\tSYS_PROCESS_VM_WRITEV            = 352\n\tSYS_FINIT_MODULE                 = 353\n\tSYS_KCMP                         = 354\n\tSYS_SCHED_SETATTR                = 355\n\tSYS_SCHED_GETATTR                = 356\n\tSYS_RENAMEAT2                    = 357\n\tSYS_SECCOMP                      = 358\n\tSYS_GETRANDOM                    = 359\n\tSYS_MEMFD_CREATE                 = 360\n\tSYS_BPF                          = 361\n\tSYS_EXECVEAT                     = 362\n\tSYS_SWITCH_ENDIAN                = 363\n\tSYS_USERFAULTFD                  = 364\n\tSYS_MEMBARRIER                   = 365\n\tSYS_MLOCK2                       = 378\n\tSYS_COPY_FILE_RANGE              = 379\n\tSYS_PREADV2                      = 380\n\tSYS_PWRITEV2                     = 381\n\tSYS_KEXEC_FILE_LOAD              = 382\n\tSYS_STATX                        = 383\n\tSYS_PKEY_ALLOC                   = 384\n\tSYS_PKEY_FREE                    = 385\n\tSYS_PKEY_MPROTECT                = 386\n\tSYS_RSEQ                         = 387\n\tSYS_IO_PGETEVENTS                = 388\n\tSYS_SEMGET                       = 393\n\tSYS_SEMCTL                       = 394\n\tSYS_SHMGET                       = 395\n\tSYS_SHMCTL                       = 396\n\tSYS_SHMAT                        = 397\n\tSYS_SHMDT                        = 398\n\tSYS_MSGGET                       = 399\n\tSYS_MSGSND                       = 400\n\tSYS_MSGRCV                       = 401\n\tSYS_MSGCTL                       = 402\n\tSYS_CLOCK_GETTIME64              = 403\n\tSYS_CLOCK_SETTIME64              = 404\n\tSYS_CLOCK_ADJTIME64              = 405\n\tSYS_CLOCK_GETRES_TIME64          = 406\n\tSYS_CLOCK_NANOSLEEP_TIME64       = 407\n\tSYS_TIMER_GETTIME64              = 408\n\tSYS_TIMER_SETTIME64              = 409\n\tSYS_TIMERFD_GETTIME64            = 410\n\tSYS_TIMERFD_SETTIME64            = 411\n\tSYS_UTIMENSAT_TIME64             = 412\n\tSYS_PSELECT6_TIME64              = 413\n\tSYS_PPOLL_TIME64                 = 414\n\tSYS_IO_PGETEVENTS_TIME64         = 416\n\tSYS_RECVMMSG_TIME64              = 417\n\tSYS_MQ_TIMEDSEND_TIME64          = 418\n\tSYS_MQ_TIMEDRECEIVE_TIME64       = 419\n\tSYS_SEMTIMEDOP_TIME64            = 420\n\tSYS_RT_SIGTIMEDWAIT_TIME64       = 421\n\tSYS_FUTEX_TIME64                 = 422\n\tSYS_SCHED_RR_GET_INTERVAL_TIME64 = 423\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_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\tSYS_OPEN_TREE_ATTR               = 467\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/ppc64/include /tmp/ppc64/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64 && linux\n\npackage unix\n\nconst (\n\tSYS_RESTART_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_WAITPID                 = 7\n\tSYS_CREAT                   = 8\n\tSYS_LINK                    = 9\n\tSYS_UNLINK                  = 10\n\tSYS_EXECVE                  = 11\n\tSYS_CHDIR                   = 12\n\tSYS_TIME                    = 13\n\tSYS_MKNOD                   = 14\n\tSYS_CHMOD                   = 15\n\tSYS_LCHOWN                  = 16\n\tSYS_BREAK                   = 17\n\tSYS_OLDSTAT                 = 18\n\tSYS_LSEEK                   = 19\n\tSYS_GETPID                  = 20\n\tSYS_MOUNT                   = 21\n\tSYS_UMOUNT                  = 22\n\tSYS_SETUID                  = 23\n\tSYS_GETUID                  = 24\n\tSYS_STIME                   = 25\n\tSYS_PTRACE                  = 26\n\tSYS_ALARM                   = 27\n\tSYS_OLDFSTAT                = 28\n\tSYS_PAUSE                   = 29\n\tSYS_UTIME                   = 30\n\tSYS_STTY                    = 31\n\tSYS_GTTY                    = 32\n\tSYS_ACCESS                  = 33\n\tSYS_NICE                    = 34\n\tSYS_FTIME                   = 35\n\tSYS_SYNC                    = 36\n\tSYS_KILL                    = 37\n\tSYS_RENAME                  = 38\n\tSYS_MKDIR                   = 39\n\tSYS_RMDIR                   = 40\n\tSYS_DUP                     = 41\n\tSYS_PIPE                    = 42\n\tSYS_TIMES                   = 43\n\tSYS_PROF                    = 44\n\tSYS_BRK                     = 45\n\tSYS_SETGID                  = 46\n\tSYS_GETGID                  = 47\n\tSYS_SIGNAL                  = 48\n\tSYS_GETEUID                 = 49\n\tSYS_GETEGID                 = 50\n\tSYS_ACCT                    = 51\n\tSYS_UMOUNT2                 = 52\n\tSYS_LOCK                    = 53\n\tSYS_IOCTL                   = 54\n\tSYS_FCNTL                   = 55\n\tSYS_MPX                     = 56\n\tSYS_SETPGID                 = 57\n\tSYS_ULIMIT                  = 58\n\tSYS_OLDOLDUNAME             = 59\n\tSYS_UMASK                   = 60\n\tSYS_CHROOT                  = 61\n\tSYS_USTAT                   = 62\n\tSYS_DUP2                    = 63\n\tSYS_GETPPID                 = 64\n\tSYS_GETPGRP                 = 65\n\tSYS_SETSID                  = 66\n\tSYS_SIGACTION               = 67\n\tSYS_SGETMASK                = 68\n\tSYS_SSETMASK                = 69\n\tSYS_SETREUID                = 70\n\tSYS_SETREGID                = 71\n\tSYS_SIGSUSPEND              = 72\n\tSYS_SIGPENDING              = 73\n\tSYS_SETHOSTNAME             = 74\n\tSYS_SETRLIMIT               = 75\n\tSYS_GETRLIMIT               = 76\n\tSYS_GETRUSAGE               = 77\n\tSYS_GETTIMEOFDAY            = 78\n\tSYS_SETTIMEOFDAY            = 79\n\tSYS_GETGROUPS               = 80\n\tSYS_SETGROUPS               = 81\n\tSYS_SELECT                  = 82\n\tSYS_SYMLINK                 = 83\n\tSYS_OLDLSTAT                = 84\n\tSYS_READLINK                = 85\n\tSYS_USELIB                  = 86\n\tSYS_SWAPON                  = 87\n\tSYS_REBOOT                  = 88\n\tSYS_READDIR                 = 89\n\tSYS_MMAP                    = 90\n\tSYS_MUNMAP                  = 91\n\tSYS_TRUNCATE                = 92\n\tSYS_FTRUNCATE               = 93\n\tSYS_FCHMOD                  = 94\n\tSYS_FCHOWN                  = 95\n\tSYS_GETPRIORITY             = 96\n\tSYS_SETPRIORITY             = 97\n\tSYS_PROFIL                  = 98\n\tSYS_STATFS                  = 99\n\tSYS_FSTATFS                 = 100\n\tSYS_IOPERM                  = 101\n\tSYS_SOCKETCALL              = 102\n\tSYS_SYSLOG                  = 103\n\tSYS_SETITIMER               = 104\n\tSYS_GETITIMER               = 105\n\tSYS_STAT                    = 106\n\tSYS_LSTAT                   = 107\n\tSYS_FSTAT                   = 108\n\tSYS_OLDUNAME                = 109\n\tSYS_IOPL                    = 110\n\tSYS_VHANGUP                 = 111\n\tSYS_IDLE                    = 112\n\tSYS_VM86                    = 113\n\tSYS_WAIT4                   = 114\n\tSYS_SWAPOFF                 = 115\n\tSYS_SYSINFO                 = 116\n\tSYS_IPC                     = 117\n\tSYS_FSYNC                   = 118\n\tSYS_SIGRETURN               = 119\n\tSYS_CLONE                   = 120\n\tSYS_SETDOMAINNAME           = 121\n\tSYS_UNAME                   = 122\n\tSYS_MODIFY_LDT              = 123\n\tSYS_ADJTIMEX                = 124\n\tSYS_MPROTECT                = 125\n\tSYS_SIGPROCMASK             = 126\n\tSYS_CREATE_MODULE           = 127\n\tSYS_INIT_MODULE             = 128\n\tSYS_DELETE_MODULE           = 129\n\tSYS_GET_KERNEL_SYMS         = 130\n\tSYS_QUOTACTL                = 131\n\tSYS_GETPGID                 = 132\n\tSYS_FCHDIR                  = 133\n\tSYS_BDFLUSH                 = 134\n\tSYS_SYSFS                   = 135\n\tSYS_PERSONALITY             = 136\n\tSYS_AFS_SYSCALL             = 137\n\tSYS_SETFSUID                = 138\n\tSYS_SETFSGID                = 139\n\tSYS__LLSEEK                 = 140\n\tSYS_GETDENTS                = 141\n\tSYS__NEWSELECT              = 142\n\tSYS_FLOCK                   = 143\n\tSYS_MSYNC                   = 144\n\tSYS_READV                   = 145\n\tSYS_WRITEV                  = 146\n\tSYS_GETSID                  = 147\n\tSYS_FDATASYNC               = 148\n\tSYS__SYSCTL                 = 149\n\tSYS_MLOCK                   = 150\n\tSYS_MUNLOCK                 = 151\n\tSYS_MLOCKALL                = 152\n\tSYS_MUNLOCKALL              = 153\n\tSYS_SCHED_SETPARAM          = 154\n\tSYS_SCHED_GETPARAM          = 155\n\tSYS_SCHED_SETSCHEDULER      = 156\n\tSYS_SCHED_GETSCHEDULER      = 157\n\tSYS_SCHED_YIELD             = 158\n\tSYS_SCHED_GET_PRIORITY_MAX  = 159\n\tSYS_SCHED_GET_PRIORITY_MIN  = 160\n\tSYS_SCHED_RR_GET_INTERVAL   = 161\n\tSYS_NANOSLEEP               = 162\n\tSYS_MREMAP                  = 163\n\tSYS_SETRESUID               = 164\n\tSYS_GETRESUID               = 165\n\tSYS_QUERY_MODULE            = 166\n\tSYS_POLL                    = 167\n\tSYS_NFSSERVCTL              = 168\n\tSYS_SETRESGID               = 169\n\tSYS_GETRESGID               = 170\n\tSYS_PRCTL                   = 171\n\tSYS_RT_SIGRETURN            = 172\n\tSYS_RT_SIGACTION            = 173\n\tSYS_RT_SIGPROCMASK          = 174\n\tSYS_RT_SIGPENDING           = 175\n\tSYS_RT_SIGTIMEDWAIT         = 176\n\tSYS_RT_SIGQUEUEINFO         = 177\n\tSYS_RT_SIGSUSPEND           = 178\n\tSYS_PREAD64                 = 179\n\tSYS_PWRITE64                = 180\n\tSYS_CHOWN                   = 181\n\tSYS_GETCWD                  = 182\n\tSYS_CAPGET                  = 183\n\tSYS_CAPSET                  = 184\n\tSYS_SIGALTSTACK             = 185\n\tSYS_SENDFILE                = 186\n\tSYS_GETPMSG                 = 187\n\tSYS_PUTPMSG                 = 188\n\tSYS_VFORK                   = 189\n\tSYS_UGETRLIMIT              = 190\n\tSYS_READAHEAD               = 191\n\tSYS_PCICONFIG_READ          = 198\n\tSYS_PCICONFIG_WRITE         = 199\n\tSYS_PCICONFIG_IOBASE        = 200\n\tSYS_MULTIPLEXER             = 201\n\tSYS_GETDENTS64              = 202\n\tSYS_PIVOT_ROOT              = 203\n\tSYS_MADVISE                 = 205\n\tSYS_MINCORE                 = 206\n\tSYS_GETTID                  = 207\n\tSYS_TKILL                   = 208\n\tSYS_SETXATTR                = 209\n\tSYS_LSETXATTR               = 210\n\tSYS_FSETXATTR               = 211\n\tSYS_GETXATTR                = 212\n\tSYS_LGETXATTR               = 213\n\tSYS_FGETXATTR               = 214\n\tSYS_LISTXATTR               = 215\n\tSYS_LLISTXATTR              = 216\n\tSYS_FLISTXATTR              = 217\n\tSYS_REMOVEXATTR             = 218\n\tSYS_LREMOVEXATTR            = 219\n\tSYS_FREMOVEXATTR            = 220\n\tSYS_FUTEX                   = 221\n\tSYS_SCHED_SETAFFINITY       = 222\n\tSYS_SCHED_GETAFFINITY       = 223\n\tSYS_TUXCALL                 = 225\n\tSYS_IO_SETUP                = 227\n\tSYS_IO_DESTROY              = 228\n\tSYS_IO_GETEVENTS            = 229\n\tSYS_IO_SUBMIT               = 230\n\tSYS_IO_CANCEL               = 231\n\tSYS_SET_TID_ADDRESS         = 232\n\tSYS_FADVISE64               = 233\n\tSYS_EXIT_GROUP              = 234\n\tSYS_LOOKUP_DCOOKIE          = 235\n\tSYS_EPOLL_CREATE            = 236\n\tSYS_EPOLL_CTL               = 237\n\tSYS_EPOLL_WAIT              = 238\n\tSYS_REMAP_FILE_PAGES        = 239\n\tSYS_TIMER_CREATE            = 240\n\tSYS_TIMER_SETTIME           = 241\n\tSYS_TIMER_GETTIME           = 242\n\tSYS_TIMER_GETOVERRUN        = 243\n\tSYS_TIMER_DELETE            = 244\n\tSYS_CLOCK_SETTIME           = 245\n\tSYS_CLOCK_GETTIME           = 246\n\tSYS_CLOCK_GETRES            = 247\n\tSYS_CLOCK_NANOSLEEP         = 248\n\tSYS_SWAPCONTEXT             = 249\n\tSYS_TGKILL                  = 250\n\tSYS_UTIMES                  = 251\n\tSYS_STATFS64                = 252\n\tSYS_FSTATFS64               = 253\n\tSYS_RTAS                    = 255\n\tSYS_SYS_DEBUG_SETCONTEXT    = 256\n\tSYS_MIGRATE_PAGES           = 258\n\tSYS_MBIND                   = 259\n\tSYS_GET_MEMPOLICY           = 260\n\tSYS_SET_MEMPOLICY           = 261\n\tSYS_MQ_OPEN                 = 262\n\tSYS_MQ_UNLINK               = 263\n\tSYS_MQ_TIMEDSEND            = 264\n\tSYS_MQ_TIMEDRECEIVE         = 265\n\tSYS_MQ_NOTIFY               = 266\n\tSYS_MQ_GETSETATTR           = 267\n\tSYS_KEXEC_LOAD              = 268\n\tSYS_ADD_KEY                 = 269\n\tSYS_REQUEST_KEY             = 270\n\tSYS_KEYCTL                  = 271\n\tSYS_WAITID                  = 272\n\tSYS_IOPRIO_SET              = 273\n\tSYS_IOPRIO_GET              = 274\n\tSYS_INOTIFY_INIT            = 275\n\tSYS_INOTIFY_ADD_WATCH       = 276\n\tSYS_INOTIFY_RM_WATCH        = 277\n\tSYS_SPU_RUN                 = 278\n\tSYS_SPU_CREATE              = 279\n\tSYS_PSELECT6                = 280\n\tSYS_PPOLL                   = 281\n\tSYS_UNSHARE                 = 282\n\tSYS_SPLICE                  = 283\n\tSYS_TEE                     = 284\n\tSYS_VMSPLICE                = 285\n\tSYS_OPENAT                  = 286\n\tSYS_MKDIRAT                 = 287\n\tSYS_MKNODAT                 = 288\n\tSYS_FCHOWNAT                = 289\n\tSYS_FUTIMESAT               = 290\n\tSYS_NEWFSTATAT              = 291\n\tSYS_UNLINKAT                = 292\n\tSYS_RENAMEAT                = 293\n\tSYS_LINKAT                  = 294\n\tSYS_SYMLINKAT               = 295\n\tSYS_READLINKAT              = 296\n\tSYS_FCHMODAT                = 297\n\tSYS_FACCESSAT               = 298\n\tSYS_GET_ROBUST_LIST         = 299\n\tSYS_SET_ROBUST_LIST         = 300\n\tSYS_MOVE_PAGES              = 301\n\tSYS_GETCPU                  = 302\n\tSYS_EPOLL_PWAIT             = 303\n\tSYS_UTIMENSAT               = 304\n\tSYS_SIGNALFD                = 305\n\tSYS_TIMERFD_CREATE          = 306\n\tSYS_EVENTFD                 = 307\n\tSYS_SYNC_FILE_RANGE2        = 308\n\tSYS_FALLOCATE               = 309\n\tSYS_SUBPAGE_PROT            = 310\n\tSYS_TIMERFD_SETTIME         = 311\n\tSYS_TIMERFD_GETTIME         = 312\n\tSYS_SIGNALFD4               = 313\n\tSYS_EVENTFD2                = 314\n\tSYS_EPOLL_CREATE1           = 315\n\tSYS_DUP3                    = 316\n\tSYS_PIPE2                   = 317\n\tSYS_INOTIFY_INIT1           = 318\n\tSYS_PERF_EVENT_OPEN         = 319\n\tSYS_PREADV                  = 320\n\tSYS_PWRITEV                 = 321\n\tSYS_RT_TGSIGQUEUEINFO       = 322\n\tSYS_FANOTIFY_INIT           = 323\n\tSYS_FANOTIFY_MARK           = 324\n\tSYS_PRLIMIT64               = 325\n\tSYS_SOCKET                  = 326\n\tSYS_BIND                    = 327\n\tSYS_CONNECT                 = 328\n\tSYS_LISTEN                  = 329\n\tSYS_ACCEPT                  = 330\n\tSYS_GETSOCKNAME             = 331\n\tSYS_GETPEERNAME             = 332\n\tSYS_SOCKETPAIR              = 333\n\tSYS_SEND                    = 334\n\tSYS_SENDTO                  = 335\n\tSYS_RECV                    = 336\n\tSYS_RECVFROM                = 337\n\tSYS_SHUTDOWN                = 338\n\tSYS_SETSOCKOPT              = 339\n\tSYS_GETSOCKOPT              = 340\n\tSYS_SENDMSG                 = 341\n\tSYS_RECVMSG                 = 342\n\tSYS_RECVMMSG                = 343\n\tSYS_ACCEPT4                 = 344\n\tSYS_NAME_TO_HANDLE_AT       = 345\n\tSYS_OPEN_BY_HANDLE_AT       = 346\n\tSYS_CLOCK_ADJTIME           = 347\n\tSYS_SYNCFS                  = 348\n\tSYS_SENDMMSG                = 349\n\tSYS_SETNS                   = 350\n\tSYS_PROCESS_VM_READV        = 351\n\tSYS_PROCESS_VM_WRITEV       = 352\n\tSYS_FINIT_MODULE            = 353\n\tSYS_KCMP                    = 354\n\tSYS_SCHED_SETATTR           = 355\n\tSYS_SCHED_GETATTR           = 356\n\tSYS_RENAMEAT2               = 357\n\tSYS_SECCOMP                 = 358\n\tSYS_GETRANDOM               = 359\n\tSYS_MEMFD_CREATE            = 360\n\tSYS_BPF                     = 361\n\tSYS_EXECVEAT                = 362\n\tSYS_SWITCH_ENDIAN           = 363\n\tSYS_USERFAULTFD             = 364\n\tSYS_MEMBARRIER              = 365\n\tSYS_MLOCK2                  = 378\n\tSYS_COPY_FILE_RANGE         = 379\n\tSYS_PREADV2                 = 380\n\tSYS_PWRITEV2                = 381\n\tSYS_KEXEC_FILE_LOAD         = 382\n\tSYS_STATX                   = 383\n\tSYS_PKEY_ALLOC              = 384\n\tSYS_PKEY_FREE               = 385\n\tSYS_PKEY_MPROTECT           = 386\n\tSYS_RSEQ                    = 387\n\tSYS_IO_PGETEVENTS           = 388\n\tSYS_SEMTIMEDOP              = 392\n\tSYS_SEMGET                  = 393\n\tSYS_SEMCTL                  = 394\n\tSYS_SHMGET                  = 395\n\tSYS_SHMCTL                  = 396\n\tSYS_SHMAT                   = 397\n\tSYS_SHMDT                   = 398\n\tSYS_MSGGET                  = 399\n\tSYS_MSGSND                  = 400\n\tSYS_MSGRCV                  = 401\n\tSYS_MSGCTL                  = 402\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_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\tSYS_OPEN_TREE_ATTR          = 467\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/ppc64le/include /tmp/ppc64le/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64le && linux\n\npackage unix\n\nconst (\n\tSYS_RESTART_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_WAITPID                 = 7\n\tSYS_CREAT                   = 8\n\tSYS_LINK                    = 9\n\tSYS_UNLINK                  = 10\n\tSYS_EXECVE                  = 11\n\tSYS_CHDIR                   = 12\n\tSYS_TIME                    = 13\n\tSYS_MKNOD                   = 14\n\tSYS_CHMOD                   = 15\n\tSYS_LCHOWN                  = 16\n\tSYS_BREAK                   = 17\n\tSYS_OLDSTAT                 = 18\n\tSYS_LSEEK                   = 19\n\tSYS_GETPID                  = 20\n\tSYS_MOUNT                   = 21\n\tSYS_UMOUNT                  = 22\n\tSYS_SETUID                  = 23\n\tSYS_GETUID                  = 24\n\tSYS_STIME                   = 25\n\tSYS_PTRACE                  = 26\n\tSYS_ALARM                   = 27\n\tSYS_OLDFSTAT                = 28\n\tSYS_PAUSE                   = 29\n\tSYS_UTIME                   = 30\n\tSYS_STTY                    = 31\n\tSYS_GTTY                    = 32\n\tSYS_ACCESS                  = 33\n\tSYS_NICE                    = 34\n\tSYS_FTIME                   = 35\n\tSYS_SYNC                    = 36\n\tSYS_KILL                    = 37\n\tSYS_RENAME                  = 38\n\tSYS_MKDIR                   = 39\n\tSYS_RMDIR                   = 40\n\tSYS_DUP                     = 41\n\tSYS_PIPE                    = 42\n\tSYS_TIMES                   = 43\n\tSYS_PROF                    = 44\n\tSYS_BRK                     = 45\n\tSYS_SETGID                  = 46\n\tSYS_GETGID                  = 47\n\tSYS_SIGNAL                  = 48\n\tSYS_GETEUID                 = 49\n\tSYS_GETEGID                 = 50\n\tSYS_ACCT                    = 51\n\tSYS_UMOUNT2                 = 52\n\tSYS_LOCK                    = 53\n\tSYS_IOCTL                   = 54\n\tSYS_FCNTL                   = 55\n\tSYS_MPX                     = 56\n\tSYS_SETPGID                 = 57\n\tSYS_ULIMIT                  = 58\n\tSYS_OLDOLDUNAME             = 59\n\tSYS_UMASK                   = 60\n\tSYS_CHROOT                  = 61\n\tSYS_USTAT                   = 62\n\tSYS_DUP2                    = 63\n\tSYS_GETPPID                 = 64\n\tSYS_GETPGRP                 = 65\n\tSYS_SETSID                  = 66\n\tSYS_SIGACTION               = 67\n\tSYS_SGETMASK                = 68\n\tSYS_SSETMASK                = 69\n\tSYS_SETREUID                = 70\n\tSYS_SETREGID                = 71\n\tSYS_SIGSUSPEND              = 72\n\tSYS_SIGPENDING              = 73\n\tSYS_SETHOSTNAME             = 74\n\tSYS_SETRLIMIT               = 75\n\tSYS_GETRLIMIT               = 76\n\tSYS_GETRUSAGE               = 77\n\tSYS_GETTIMEOFDAY            = 78\n\tSYS_SETTIMEOFDAY            = 79\n\tSYS_GETGROUPS               = 80\n\tSYS_SETGROUPS               = 81\n\tSYS_SELECT                  = 82\n\tSYS_SYMLINK                 = 83\n\tSYS_OLDLSTAT                = 84\n\tSYS_READLINK                = 85\n\tSYS_USELIB                  = 86\n\tSYS_SWAPON                  = 87\n\tSYS_REBOOT                  = 88\n\tSYS_READDIR                 = 89\n\tSYS_MMAP                    = 90\n\tSYS_MUNMAP                  = 91\n\tSYS_TRUNCATE                = 92\n\tSYS_FTRUNCATE               = 93\n\tSYS_FCHMOD                  = 94\n\tSYS_FCHOWN                  = 95\n\tSYS_GETPRIORITY             = 96\n\tSYS_SETPRIORITY             = 97\n\tSYS_PROFIL                  = 98\n\tSYS_STATFS                  = 99\n\tSYS_FSTATFS                 = 100\n\tSYS_IOPERM                  = 101\n\tSYS_SOCKETCALL              = 102\n\tSYS_SYSLOG                  = 103\n\tSYS_SETITIMER               = 104\n\tSYS_GETITIMER               = 105\n\tSYS_STAT                    = 106\n\tSYS_LSTAT                   = 107\n\tSYS_FSTAT                   = 108\n\tSYS_OLDUNAME                = 109\n\tSYS_IOPL                    = 110\n\tSYS_VHANGUP                 = 111\n\tSYS_IDLE                    = 112\n\tSYS_VM86                    = 113\n\tSYS_WAIT4                   = 114\n\tSYS_SWAPOFF                 = 115\n\tSYS_SYSINFO                 = 116\n\tSYS_IPC                     = 117\n\tSYS_FSYNC                   = 118\n\tSYS_SIGRETURN               = 119\n\tSYS_CLONE                   = 120\n\tSYS_SETDOMAINNAME           = 121\n\tSYS_UNAME                   = 122\n\tSYS_MODIFY_LDT              = 123\n\tSYS_ADJTIMEX                = 124\n\tSYS_MPROTECT                = 125\n\tSYS_SIGPROCMASK             = 126\n\tSYS_CREATE_MODULE           = 127\n\tSYS_INIT_MODULE             = 128\n\tSYS_DELETE_MODULE           = 129\n\tSYS_GET_KERNEL_SYMS         = 130\n\tSYS_QUOTACTL                = 131\n\tSYS_GETPGID                 = 132\n\tSYS_FCHDIR                  = 133\n\tSYS_BDFLUSH                 = 134\n\tSYS_SYSFS                   = 135\n\tSYS_PERSONALITY             = 136\n\tSYS_AFS_SYSCALL             = 137\n\tSYS_SETFSUID                = 138\n\tSYS_SETFSGID                = 139\n\tSYS__LLSEEK                 = 140\n\tSYS_GETDENTS                = 141\n\tSYS__NEWSELECT              = 142\n\tSYS_FLOCK                   = 143\n\tSYS_MSYNC                   = 144\n\tSYS_READV                   = 145\n\tSYS_WRITEV                  = 146\n\tSYS_GETSID                  = 147\n\tSYS_FDATASYNC               = 148\n\tSYS__SYSCTL                 = 149\n\tSYS_MLOCK                   = 150\n\tSYS_MUNLOCK                 = 151\n\tSYS_MLOCKALL                = 152\n\tSYS_MUNLOCKALL              = 153\n\tSYS_SCHED_SETPARAM          = 154\n\tSYS_SCHED_GETPARAM          = 155\n\tSYS_SCHED_SETSCHEDULER      = 156\n\tSYS_SCHED_GETSCHEDULER      = 157\n\tSYS_SCHED_YIELD             = 158\n\tSYS_SCHED_GET_PRIORITY_MAX  = 159\n\tSYS_SCHED_GET_PRIORITY_MIN  = 160\n\tSYS_SCHED_RR_GET_INTERVAL   = 161\n\tSYS_NANOSLEEP               = 162\n\tSYS_MREMAP                  = 163\n\tSYS_SETRESUID               = 164\n\tSYS_GETRESUID               = 165\n\tSYS_QUERY_MODULE            = 166\n\tSYS_POLL                    = 167\n\tSYS_NFSSERVCTL              = 168\n\tSYS_SETRESGID               = 169\n\tSYS_GETRESGID               = 170\n\tSYS_PRCTL                   = 171\n\tSYS_RT_SIGRETURN            = 172\n\tSYS_RT_SIGACTION            = 173\n\tSYS_RT_SIGPROCMASK          = 174\n\tSYS_RT_SIGPENDING           = 175\n\tSYS_RT_SIGTIMEDWAIT         = 176\n\tSYS_RT_SIGQUEUEINFO         = 177\n\tSYS_RT_SIGSUSPEND           = 178\n\tSYS_PREAD64                 = 179\n\tSYS_PWRITE64                = 180\n\tSYS_CHOWN                   = 181\n\tSYS_GETCWD                  = 182\n\tSYS_CAPGET                  = 183\n\tSYS_CAPSET                  = 184\n\tSYS_SIGALTSTACK             = 185\n\tSYS_SENDFILE                = 186\n\tSYS_GETPMSG                 = 187\n\tSYS_PUTPMSG                 = 188\n\tSYS_VFORK                   = 189\n\tSYS_UGETRLIMIT              = 190\n\tSYS_READAHEAD               = 191\n\tSYS_PCICONFIG_READ          = 198\n\tSYS_PCICONFIG_WRITE         = 199\n\tSYS_PCICONFIG_IOBASE        = 200\n\tSYS_MULTIPLEXER             = 201\n\tSYS_GETDENTS64              = 202\n\tSYS_PIVOT_ROOT              = 203\n\tSYS_MADVISE                 = 205\n\tSYS_MINCORE                 = 206\n\tSYS_GETTID                  = 207\n\tSYS_TKILL                   = 208\n\tSYS_SETXATTR                = 209\n\tSYS_LSETXATTR               = 210\n\tSYS_FSETXATTR               = 211\n\tSYS_GETXATTR                = 212\n\tSYS_LGETXATTR               = 213\n\tSYS_FGETXATTR               = 214\n\tSYS_LISTXATTR               = 215\n\tSYS_LLISTXATTR              = 216\n\tSYS_FLISTXATTR              = 217\n\tSYS_REMOVEXATTR             = 218\n\tSYS_LREMOVEXATTR            = 219\n\tSYS_FREMOVEXATTR            = 220\n\tSYS_FUTEX                   = 221\n\tSYS_SCHED_SETAFFINITY       = 222\n\tSYS_SCHED_GETAFFINITY       = 223\n\tSYS_TUXCALL                 = 225\n\tSYS_IO_SETUP                = 227\n\tSYS_IO_DESTROY              = 228\n\tSYS_IO_GETEVENTS            = 229\n\tSYS_IO_SUBMIT               = 230\n\tSYS_IO_CANCEL               = 231\n\tSYS_SET_TID_ADDRESS         = 232\n\tSYS_FADVISE64               = 233\n\tSYS_EXIT_GROUP              = 234\n\tSYS_LOOKUP_DCOOKIE          = 235\n\tSYS_EPOLL_CREATE            = 236\n\tSYS_EPOLL_CTL               = 237\n\tSYS_EPOLL_WAIT              = 238\n\tSYS_REMAP_FILE_PAGES        = 239\n\tSYS_TIMER_CREATE            = 240\n\tSYS_TIMER_SETTIME           = 241\n\tSYS_TIMER_GETTIME           = 242\n\tSYS_TIMER_GETOVERRUN        = 243\n\tSYS_TIMER_DELETE            = 244\n\tSYS_CLOCK_SETTIME           = 245\n\tSYS_CLOCK_GETTIME           = 246\n\tSYS_CLOCK_GETRES            = 247\n\tSYS_CLOCK_NANOSLEEP         = 248\n\tSYS_SWAPCONTEXT             = 249\n\tSYS_TGKILL                  = 250\n\tSYS_UTIMES                  = 251\n\tSYS_STATFS64                = 252\n\tSYS_FSTATFS64               = 253\n\tSYS_RTAS                    = 255\n\tSYS_SYS_DEBUG_SETCONTEXT    = 256\n\tSYS_MIGRATE_PAGES           = 258\n\tSYS_MBIND                   = 259\n\tSYS_GET_MEMPOLICY           = 260\n\tSYS_SET_MEMPOLICY           = 261\n\tSYS_MQ_OPEN                 = 262\n\tSYS_MQ_UNLINK               = 263\n\tSYS_MQ_TIMEDSEND            = 264\n\tSYS_MQ_TIMEDRECEIVE         = 265\n\tSYS_MQ_NOTIFY               = 266\n\tSYS_MQ_GETSETATTR           = 267\n\tSYS_KEXEC_LOAD              = 268\n\tSYS_ADD_KEY                 = 269\n\tSYS_REQUEST_KEY             = 270\n\tSYS_KEYCTL                  = 271\n\tSYS_WAITID                  = 272\n\tSYS_IOPRIO_SET              = 273\n\tSYS_IOPRIO_GET              = 274\n\tSYS_INOTIFY_INIT            = 275\n\tSYS_INOTIFY_ADD_WATCH       = 276\n\tSYS_INOTIFY_RM_WATCH        = 277\n\tSYS_SPU_RUN                 = 278\n\tSYS_SPU_CREATE              = 279\n\tSYS_PSELECT6                = 280\n\tSYS_PPOLL                   = 281\n\tSYS_UNSHARE                 = 282\n\tSYS_SPLICE                  = 283\n\tSYS_TEE                     = 284\n\tSYS_VMSPLICE                = 285\n\tSYS_OPENAT                  = 286\n\tSYS_MKDIRAT                 = 287\n\tSYS_MKNODAT                 = 288\n\tSYS_FCHOWNAT                = 289\n\tSYS_FUTIMESAT               = 290\n\tSYS_NEWFSTATAT              = 291\n\tSYS_UNLINKAT                = 292\n\tSYS_RENAMEAT                = 293\n\tSYS_LINKAT                  = 294\n\tSYS_SYMLINKAT               = 295\n\tSYS_READLINKAT              = 296\n\tSYS_FCHMODAT                = 297\n\tSYS_FACCESSAT               = 298\n\tSYS_GET_ROBUST_LIST         = 299\n\tSYS_SET_ROBUST_LIST         = 300\n\tSYS_MOVE_PAGES              = 301\n\tSYS_GETCPU                  = 302\n\tSYS_EPOLL_PWAIT             = 303\n\tSYS_UTIMENSAT               = 304\n\tSYS_SIGNALFD                = 305\n\tSYS_TIMERFD_CREATE          = 306\n\tSYS_EVENTFD                 = 307\n\tSYS_SYNC_FILE_RANGE2        = 308\n\tSYS_FALLOCATE               = 309\n\tSYS_SUBPAGE_PROT            = 310\n\tSYS_TIMERFD_SETTIME         = 311\n\tSYS_TIMERFD_GETTIME         = 312\n\tSYS_SIGNALFD4               = 313\n\tSYS_EVENTFD2                = 314\n\tSYS_EPOLL_CREATE1           = 315\n\tSYS_DUP3                    = 316\n\tSYS_PIPE2                   = 317\n\tSYS_INOTIFY_INIT1           = 318\n\tSYS_PERF_EVENT_OPEN         = 319\n\tSYS_PREADV                  = 320\n\tSYS_PWRITEV                 = 321\n\tSYS_RT_TGSIGQUEUEINFO       = 322\n\tSYS_FANOTIFY_INIT           = 323\n\tSYS_FANOTIFY_MARK           = 324\n\tSYS_PRLIMIT64               = 325\n\tSYS_SOCKET                  = 326\n\tSYS_BIND                    = 327\n\tSYS_CONNECT                 = 328\n\tSYS_LISTEN                  = 329\n\tSYS_ACCEPT                  = 330\n\tSYS_GETSOCKNAME             = 331\n\tSYS_GETPEERNAME             = 332\n\tSYS_SOCKETPAIR              = 333\n\tSYS_SEND                    = 334\n\tSYS_SENDTO                  = 335\n\tSYS_RECV                    = 336\n\tSYS_RECVFROM                = 337\n\tSYS_SHUTDOWN                = 338\n\tSYS_SETSOCKOPT              = 339\n\tSYS_GETSOCKOPT              = 340\n\tSYS_SENDMSG                 = 341\n\tSYS_RECVMSG                 = 342\n\tSYS_RECVMMSG                = 343\n\tSYS_ACCEPT4                 = 344\n\tSYS_NAME_TO_HANDLE_AT       = 345\n\tSYS_OPEN_BY_HANDLE_AT       = 346\n\tSYS_CLOCK_ADJTIME           = 347\n\tSYS_SYNCFS                  = 348\n\tSYS_SENDMMSG                = 349\n\tSYS_SETNS                   = 350\n\tSYS_PROCESS_VM_READV        = 351\n\tSYS_PROCESS_VM_WRITEV       = 352\n\tSYS_FINIT_MODULE            = 353\n\tSYS_KCMP                    = 354\n\tSYS_SCHED_SETATTR           = 355\n\tSYS_SCHED_GETATTR           = 356\n\tSYS_RENAMEAT2               = 357\n\tSYS_SECCOMP                 = 358\n\tSYS_GETRANDOM               = 359\n\tSYS_MEMFD_CREATE            = 360\n\tSYS_BPF                     = 361\n\tSYS_EXECVEAT                = 362\n\tSYS_SWITCH_ENDIAN           = 363\n\tSYS_USERFAULTFD             = 364\n\tSYS_MEMBARRIER              = 365\n\tSYS_MLOCK2                  = 378\n\tSYS_COPY_FILE_RANGE         = 379\n\tSYS_PREADV2                 = 380\n\tSYS_PWRITEV2                = 381\n\tSYS_KEXEC_FILE_LOAD         = 382\n\tSYS_STATX                   = 383\n\tSYS_PKEY_ALLOC              = 384\n\tSYS_PKEY_FREE               = 385\n\tSYS_PKEY_MPROTECT           = 386\n\tSYS_RSEQ                    = 387\n\tSYS_IO_PGETEVENTS           = 388\n\tSYS_SEMTIMEDOP              = 392\n\tSYS_SEMGET                  = 393\n\tSYS_SEMCTL                  = 394\n\tSYS_SHMGET                  = 395\n\tSYS_SHMCTL                  = 396\n\tSYS_SHMAT                   = 397\n\tSYS_SHMDT                   = 398\n\tSYS_MSGGET                  = 399\n\tSYS_MSGSND                  = 400\n\tSYS_MSGRCV                  = 401\n\tSYS_MSGCTL                  = 402\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_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\tSYS_OPEN_TREE_ATTR          = 467\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/riscv64/include /tmp/riscv64/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build riscv64 && 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_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_RISCV_HWPROBE           = 258\n\tSYS_RISCV_FLUSH_ICACHE      = 259\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\tSYS_OPEN_TREE_ATTR          = 467\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/s390x/include -fsigned-char /tmp/s390x/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build s390x && linux\n\npackage unix\n\nconst (\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_RESTART_SYSCALL         = 7\n\tSYS_CREAT                   = 8\n\tSYS_LINK                    = 9\n\tSYS_UNLINK                  = 10\n\tSYS_EXECVE                  = 11\n\tSYS_CHDIR                   = 12\n\tSYS_MKNOD                   = 14\n\tSYS_CHMOD                   = 15\n\tSYS_LSEEK                   = 19\n\tSYS_GETPID                  = 20\n\tSYS_MOUNT                   = 21\n\tSYS_UMOUNT                  = 22\n\tSYS_PTRACE                  = 26\n\tSYS_ALARM                   = 27\n\tSYS_PAUSE                   = 29\n\tSYS_UTIME                   = 30\n\tSYS_ACCESS                  = 33\n\tSYS_NICE                    = 34\n\tSYS_SYNC                    = 36\n\tSYS_KILL                    = 37\n\tSYS_RENAME                  = 38\n\tSYS_MKDIR                   = 39\n\tSYS_RMDIR                   = 40\n\tSYS_DUP                     = 41\n\tSYS_PIPE                    = 42\n\tSYS_TIMES                   = 43\n\tSYS_BRK                     = 45\n\tSYS_SIGNAL                  = 48\n\tSYS_ACCT                    = 51\n\tSYS_UMOUNT2                 = 52\n\tSYS_IOCTL                   = 54\n\tSYS_FCNTL                   = 55\n\tSYS_SETPGID                 = 57\n\tSYS_UMASK                   = 60\n\tSYS_CHROOT                  = 61\n\tSYS_USTAT                   = 62\n\tSYS_DUP2                    = 63\n\tSYS_GETPPID                 = 64\n\tSYS_GETPGRP                 = 65\n\tSYS_SETSID                  = 66\n\tSYS_SIGACTION               = 67\n\tSYS_SIGSUSPEND              = 72\n\tSYS_SIGPENDING              = 73\n\tSYS_SETHOSTNAME             = 74\n\tSYS_SETRLIMIT               = 75\n\tSYS_GETRUSAGE               = 77\n\tSYS_GETTIMEOFDAY            = 78\n\tSYS_SETTIMEOFDAY            = 79\n\tSYS_SYMLINK                 = 83\n\tSYS_READLINK                = 85\n\tSYS_USELIB                  = 86\n\tSYS_SWAPON                  = 87\n\tSYS_REBOOT                  = 88\n\tSYS_READDIR                 = 89\n\tSYS_MMAP                    = 90\n\tSYS_MUNMAP                  = 91\n\tSYS_TRUNCATE                = 92\n\tSYS_FTRUNCATE               = 93\n\tSYS_FCHMOD                  = 94\n\tSYS_GETPRIORITY             = 96\n\tSYS_SETPRIORITY             = 97\n\tSYS_STATFS                  = 99\n\tSYS_FSTATFS                 = 100\n\tSYS_SOCKETCALL              = 102\n\tSYS_SYSLOG                  = 103\n\tSYS_SETITIMER               = 104\n\tSYS_GETITIMER               = 105\n\tSYS_STAT                    = 106\n\tSYS_LSTAT                   = 107\n\tSYS_FSTAT                   = 108\n\tSYS_LOOKUP_DCOOKIE          = 110\n\tSYS_VHANGUP                 = 111\n\tSYS_IDLE                    = 112\n\tSYS_WAIT4                   = 114\n\tSYS_SWAPOFF                 = 115\n\tSYS_SYSINFO                 = 116\n\tSYS_IPC                     = 117\n\tSYS_FSYNC                   = 118\n\tSYS_SIGRETURN               = 119\n\tSYS_CLONE                   = 120\n\tSYS_SETDOMAINNAME           = 121\n\tSYS_UNAME                   = 122\n\tSYS_ADJTIMEX                = 124\n\tSYS_MPROTECT                = 125\n\tSYS_SIGPROCMASK             = 126\n\tSYS_CREATE_MODULE           = 127\n\tSYS_INIT_MODULE             = 128\n\tSYS_DELETE_MODULE           = 129\n\tSYS_GET_KERNEL_SYMS         = 130\n\tSYS_QUOTACTL                = 131\n\tSYS_GETPGID                 = 132\n\tSYS_FCHDIR                  = 133\n\tSYS_BDFLUSH                 = 134\n\tSYS_SYSFS                   = 135\n\tSYS_PERSONALITY             = 136\n\tSYS_AFS_SYSCALL             = 137\n\tSYS_GETDENTS                = 141\n\tSYS_SELECT                  = 142\n\tSYS_FLOCK                   = 143\n\tSYS_MSYNC                   = 144\n\tSYS_READV                   = 145\n\tSYS_WRITEV                  = 146\n\tSYS_GETSID                  = 147\n\tSYS_FDATASYNC               = 148\n\tSYS__SYSCTL                 = 149\n\tSYS_MLOCK                   = 150\n\tSYS_MUNLOCK                 = 151\n\tSYS_MLOCKALL                = 152\n\tSYS_MUNLOCKALL              = 153\n\tSYS_SCHED_SETPARAM          = 154\n\tSYS_SCHED_GETPARAM          = 155\n\tSYS_SCHED_SETSCHEDULER      = 156\n\tSYS_SCHED_GETSCHEDULER      = 157\n\tSYS_SCHED_YIELD             = 158\n\tSYS_SCHED_GET_PRIORITY_MAX  = 159\n\tSYS_SCHED_GET_PRIORITY_MIN  = 160\n\tSYS_SCHED_RR_GET_INTERVAL   = 161\n\tSYS_NANOSLEEP               = 162\n\tSYS_MREMAP                  = 163\n\tSYS_QUERY_MODULE            = 167\n\tSYS_POLL                    = 168\n\tSYS_NFSSERVCTL              = 169\n\tSYS_PRCTL                   = 172\n\tSYS_RT_SIGRETURN            = 173\n\tSYS_RT_SIGACTION            = 174\n\tSYS_RT_SIGPROCMASK          = 175\n\tSYS_RT_SIGPENDING           = 176\n\tSYS_RT_SIGTIMEDWAIT         = 177\n\tSYS_RT_SIGQUEUEINFO         = 178\n\tSYS_RT_SIGSUSPEND           = 179\n\tSYS_PREAD64                 = 180\n\tSYS_PWRITE64                = 181\n\tSYS_GETCWD                  = 183\n\tSYS_CAPGET                  = 184\n\tSYS_CAPSET                  = 185\n\tSYS_SIGALTSTACK             = 186\n\tSYS_SENDFILE                = 187\n\tSYS_GETPMSG                 = 188\n\tSYS_PUTPMSG                 = 189\n\tSYS_VFORK                   = 190\n\tSYS_GETRLIMIT               = 191\n\tSYS_LCHOWN                  = 198\n\tSYS_GETUID                  = 199\n\tSYS_GETGID                  = 200\n\tSYS_GETEUID                 = 201\n\tSYS_GETEGID                 = 202\n\tSYS_SETREUID                = 203\n\tSYS_SETREGID                = 204\n\tSYS_GETGROUPS               = 205\n\tSYS_SETGROUPS               = 206\n\tSYS_FCHOWN                  = 207\n\tSYS_SETRESUID               = 208\n\tSYS_GETRESUID               = 209\n\tSYS_SETRESGID               = 210\n\tSYS_GETRESGID               = 211\n\tSYS_CHOWN                   = 212\n\tSYS_SETUID                  = 213\n\tSYS_SETGID                  = 214\n\tSYS_SETFSUID                = 215\n\tSYS_SETFSGID                = 216\n\tSYS_PIVOT_ROOT              = 217\n\tSYS_MINCORE                 = 218\n\tSYS_MADVISE                 = 219\n\tSYS_GETDENTS64              = 220\n\tSYS_READAHEAD               = 222\n\tSYS_SETXATTR                = 224\n\tSYS_LSETXATTR               = 225\n\tSYS_FSETXATTR               = 226\n\tSYS_GETXATTR                = 227\n\tSYS_LGETXATTR               = 228\n\tSYS_FGETXATTR               = 229\n\tSYS_LISTXATTR               = 230\n\tSYS_LLISTXATTR              = 231\n\tSYS_FLISTXATTR              = 232\n\tSYS_REMOVEXATTR             = 233\n\tSYS_LREMOVEXATTR            = 234\n\tSYS_FREMOVEXATTR            = 235\n\tSYS_GETTID                  = 236\n\tSYS_TKILL                   = 237\n\tSYS_FUTEX                   = 238\n\tSYS_SCHED_SETAFFINITY       = 239\n\tSYS_SCHED_GETAFFINITY       = 240\n\tSYS_TGKILL                  = 241\n\tSYS_IO_SETUP                = 243\n\tSYS_IO_DESTROY              = 244\n\tSYS_IO_GETEVENTS            = 245\n\tSYS_IO_SUBMIT               = 246\n\tSYS_IO_CANCEL               = 247\n\tSYS_EXIT_GROUP              = 248\n\tSYS_EPOLL_CREATE            = 249\n\tSYS_EPOLL_CTL               = 250\n\tSYS_EPOLL_WAIT              = 251\n\tSYS_SET_TID_ADDRESS         = 252\n\tSYS_FADVISE64               = 253\n\tSYS_TIMER_CREATE            = 254\n\tSYS_TIMER_SETTIME           = 255\n\tSYS_TIMER_GETTIME           = 256\n\tSYS_TIMER_GETOVERRUN        = 257\n\tSYS_TIMER_DELETE            = 258\n\tSYS_CLOCK_SETTIME           = 259\n\tSYS_CLOCK_GETTIME           = 260\n\tSYS_CLOCK_GETRES            = 261\n\tSYS_CLOCK_NANOSLEEP         = 262\n\tSYS_STATFS64                = 265\n\tSYS_FSTATFS64               = 266\n\tSYS_REMAP_FILE_PAGES        = 267\n\tSYS_MBIND                   = 268\n\tSYS_GET_MEMPOLICY           = 269\n\tSYS_SET_MEMPOLICY           = 270\n\tSYS_MQ_OPEN                 = 271\n\tSYS_MQ_UNLINK               = 272\n\tSYS_MQ_TIMEDSEND            = 273\n\tSYS_MQ_TIMEDRECEIVE         = 274\n\tSYS_MQ_NOTIFY               = 275\n\tSYS_MQ_GETSETATTR           = 276\n\tSYS_KEXEC_LOAD              = 277\n\tSYS_ADD_KEY                 = 278\n\tSYS_REQUEST_KEY             = 279\n\tSYS_KEYCTL                  = 280\n\tSYS_WAITID                  = 281\n\tSYS_IOPRIO_SET              = 282\n\tSYS_IOPRIO_GET              = 283\n\tSYS_INOTIFY_INIT            = 284\n\tSYS_INOTIFY_ADD_WATCH       = 285\n\tSYS_INOTIFY_RM_WATCH        = 286\n\tSYS_MIGRATE_PAGES           = 287\n\tSYS_OPENAT                  = 288\n\tSYS_MKDIRAT                 = 289\n\tSYS_MKNODAT                 = 290\n\tSYS_FCHOWNAT                = 291\n\tSYS_FUTIMESAT               = 292\n\tSYS_NEWFSTATAT              = 293\n\tSYS_UNLINKAT                = 294\n\tSYS_RENAMEAT                = 295\n\tSYS_LINKAT                  = 296\n\tSYS_SYMLINKAT               = 297\n\tSYS_READLINKAT              = 298\n\tSYS_FCHMODAT                = 299\n\tSYS_FACCESSAT               = 300\n\tSYS_PSELECT6                = 301\n\tSYS_PPOLL                   = 302\n\tSYS_UNSHARE                 = 303\n\tSYS_SET_ROBUST_LIST         = 304\n\tSYS_GET_ROBUST_LIST         = 305\n\tSYS_SPLICE                  = 306\n\tSYS_SYNC_FILE_RANGE         = 307\n\tSYS_TEE                     = 308\n\tSYS_VMSPLICE                = 309\n\tSYS_MOVE_PAGES              = 310\n\tSYS_GETCPU                  = 311\n\tSYS_EPOLL_PWAIT             = 312\n\tSYS_UTIMES                  = 313\n\tSYS_FALLOCATE               = 314\n\tSYS_UTIMENSAT               = 315\n\tSYS_SIGNALFD                = 316\n\tSYS_TIMERFD                 = 317\n\tSYS_EVENTFD                 = 318\n\tSYS_TIMERFD_CREATE          = 319\n\tSYS_TIMERFD_SETTIME         = 320\n\tSYS_TIMERFD_GETTIME         = 321\n\tSYS_SIGNALFD4               = 322\n\tSYS_EVENTFD2                = 323\n\tSYS_INOTIFY_INIT1           = 324\n\tSYS_PIPE2                   = 325\n\tSYS_DUP3                    = 326\n\tSYS_EPOLL_CREATE1           = 327\n\tSYS_PREADV                  = 328\n\tSYS_PWRITEV                 = 329\n\tSYS_RT_TGSIGQUEUEINFO       = 330\n\tSYS_PERF_EVENT_OPEN         = 331\n\tSYS_FANOTIFY_INIT           = 332\n\tSYS_FANOTIFY_MARK           = 333\n\tSYS_PRLIMIT64               = 334\n\tSYS_NAME_TO_HANDLE_AT       = 335\n\tSYS_OPEN_BY_HANDLE_AT       = 336\n\tSYS_CLOCK_ADJTIME           = 337\n\tSYS_SYNCFS                  = 338\n\tSYS_SETNS                   = 339\n\tSYS_PROCESS_VM_READV        = 340\n\tSYS_PROCESS_VM_WRITEV       = 341\n\tSYS_S390_RUNTIME_INSTR      = 342\n\tSYS_KCMP                    = 343\n\tSYS_FINIT_MODULE            = 344\n\tSYS_SCHED_SETATTR           = 345\n\tSYS_SCHED_GETATTR           = 346\n\tSYS_RENAMEAT2               = 347\n\tSYS_SECCOMP                 = 348\n\tSYS_GETRANDOM               = 349\n\tSYS_MEMFD_CREATE            = 350\n\tSYS_BPF                     = 351\n\tSYS_S390_PCI_MMIO_WRITE     = 352\n\tSYS_S390_PCI_MMIO_READ      = 353\n\tSYS_EXECVEAT                = 354\n\tSYS_USERFAULTFD             = 355\n\tSYS_MEMBARRIER              = 356\n\tSYS_RECVMMSG                = 357\n\tSYS_SENDMMSG                = 358\n\tSYS_SOCKET                  = 359\n\tSYS_SOCKETPAIR              = 360\n\tSYS_BIND                    = 361\n\tSYS_CONNECT                 = 362\n\tSYS_LISTEN                  = 363\n\tSYS_ACCEPT4                 = 364\n\tSYS_GETSOCKOPT              = 365\n\tSYS_SETSOCKOPT              = 366\n\tSYS_GETSOCKNAME             = 367\n\tSYS_GETPEERNAME             = 368\n\tSYS_SENDTO                  = 369\n\tSYS_SENDMSG                 = 370\n\tSYS_RECVFROM                = 371\n\tSYS_RECVMSG                 = 372\n\tSYS_SHUTDOWN                = 373\n\tSYS_MLOCK2                  = 374\n\tSYS_COPY_FILE_RANGE         = 375\n\tSYS_PREADV2                 = 376\n\tSYS_PWRITEV2                = 377\n\tSYS_S390_GUARDED_STORAGE    = 378\n\tSYS_STATX                   = 379\n\tSYS_S390_STHYI              = 380\n\tSYS_KEXEC_FILE_LOAD         = 381\n\tSYS_IO_PGETEVENTS           = 382\n\tSYS_RSEQ                    = 383\n\tSYS_PKEY_MPROTECT           = 384\n\tSYS_PKEY_ALLOC              = 385\n\tSYS_PKEY_FREE               = 386\n\tSYS_SEMTIMEDOP              = 392\n\tSYS_SEMGET                  = 393\n\tSYS_SEMCTL                  = 394\n\tSYS_SHMGET                  = 395\n\tSYS_SHMCTL                  = 396\n\tSYS_SHMAT                   = 397\n\tSYS_SHMDT                   = 398\n\tSYS_MSGGET                  = 399\n\tSYS_MSGSND                  = 400\n\tSYS_MSGRCV                  = 401\n\tSYS_MSGCTL                  = 402\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\tSYS_OPEN_TREE_ATTR          = 467\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/sparc64/include /tmp/sparc64/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build sparc64 && linux\n\npackage unix\n\nconst (\n\tSYS_RESTART_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_CREAT                   = 8\n\tSYS_LINK                    = 9\n\tSYS_UNLINK                  = 10\n\tSYS_EXECV                   = 11\n\tSYS_CHDIR                   = 12\n\tSYS_CHOWN                   = 13\n\tSYS_MKNOD                   = 14\n\tSYS_CHMOD                   = 15\n\tSYS_LCHOWN                  = 16\n\tSYS_BRK                     = 17\n\tSYS_PERFCTR                 = 18\n\tSYS_LSEEK                   = 19\n\tSYS_GETPID                  = 20\n\tSYS_CAPGET                  = 21\n\tSYS_CAPSET                  = 22\n\tSYS_SETUID                  = 23\n\tSYS_GETUID                  = 24\n\tSYS_VMSPLICE                = 25\n\tSYS_PTRACE                  = 26\n\tSYS_ALARM                   = 27\n\tSYS_SIGALTSTACK             = 28\n\tSYS_PAUSE                   = 29\n\tSYS_UTIME                   = 30\n\tSYS_ACCESS                  = 33\n\tSYS_NICE                    = 34\n\tSYS_SYNC                    = 36\n\tSYS_KILL                    = 37\n\tSYS_STAT                    = 38\n\tSYS_SENDFILE                = 39\n\tSYS_LSTAT                   = 40\n\tSYS_DUP                     = 41\n\tSYS_PIPE                    = 42\n\tSYS_TIMES                   = 43\n\tSYS_UMOUNT2                 = 45\n\tSYS_SETGID                  = 46\n\tSYS_GETGID                  = 47\n\tSYS_SIGNAL                  = 48\n\tSYS_GETEUID                 = 49\n\tSYS_GETEGID                 = 50\n\tSYS_ACCT                    = 51\n\tSYS_MEMORY_ORDERING         = 52\n\tSYS_IOCTL                   = 54\n\tSYS_REBOOT                  = 55\n\tSYS_SYMLINK                 = 57\n\tSYS_READLINK                = 58\n\tSYS_EXECVE                  = 59\n\tSYS_UMASK                   = 60\n\tSYS_CHROOT                  = 61\n\tSYS_FSTAT                   = 62\n\tSYS_FSTAT64                 = 63\n\tSYS_GETPAGESIZE             = 64\n\tSYS_MSYNC                   = 65\n\tSYS_VFORK                   = 66\n\tSYS_PREAD64                 = 67\n\tSYS_PWRITE64                = 68\n\tSYS_MMAP                    = 71\n\tSYS_MUNMAP                  = 73\n\tSYS_MPROTECT                = 74\n\tSYS_MADVISE                 = 75\n\tSYS_VHANGUP                 = 76\n\tSYS_MINCORE                 = 78\n\tSYS_GETGROUPS               = 79\n\tSYS_SETGROUPS               = 80\n\tSYS_GETPGRP                 = 81\n\tSYS_SETITIMER               = 83\n\tSYS_SWAPON                  = 85\n\tSYS_GETITIMER               = 86\n\tSYS_SETHOSTNAME             = 88\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_ACCEPT                  = 99\n\tSYS_GETPRIORITY             = 100\n\tSYS_RT_SIGRETURN            = 101\n\tSYS_RT_SIGACTION            = 102\n\tSYS_RT_SIGPROCMASK          = 103\n\tSYS_RT_SIGPENDING           = 104\n\tSYS_RT_SIGTIMEDWAIT         = 105\n\tSYS_RT_SIGQUEUEINFO         = 106\n\tSYS_RT_SIGSUSPEND           = 107\n\tSYS_SETRESUID               = 108\n\tSYS_GETRESUID               = 109\n\tSYS_SETRESGID               = 110\n\tSYS_GETRESGID               = 111\n\tSYS_RECVMSG                 = 113\n\tSYS_SENDMSG                 = 114\n\tSYS_GETTIMEOFDAY            = 116\n\tSYS_GETRUSAGE               = 117\n\tSYS_GETSOCKOPT              = 118\n\tSYS_GETCWD                  = 119\n\tSYS_READV                   = 120\n\tSYS_WRITEV                  = 121\n\tSYS_SETTIMEOFDAY            = 122\n\tSYS_FCHOWN                  = 123\n\tSYS_FCHMOD                  = 124\n\tSYS_RECVFROM                = 125\n\tSYS_SETREUID                = 126\n\tSYS_SETREGID                = 127\n\tSYS_RENAME                  = 128\n\tSYS_TRUNCATE                = 129\n\tSYS_FTRUNCATE               = 130\n\tSYS_FLOCK                   = 131\n\tSYS_LSTAT64                 = 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_STAT64                  = 139\n\tSYS_SENDFILE64              = 140\n\tSYS_GETPEERNAME             = 141\n\tSYS_FUTEX                   = 142\n\tSYS_GETTID                  = 143\n\tSYS_GETRLIMIT               = 144\n\tSYS_SETRLIMIT               = 145\n\tSYS_PIVOT_ROOT              = 146\n\tSYS_PRCTL                   = 147\n\tSYS_PCICONFIG_READ          = 148\n\tSYS_PCICONFIG_WRITE         = 149\n\tSYS_GETSOCKNAME             = 150\n\tSYS_INOTIFY_INIT            = 151\n\tSYS_INOTIFY_ADD_WATCH       = 152\n\tSYS_POLL                    = 153\n\tSYS_GETDENTS64              = 154\n\tSYS_INOTIFY_RM_WATCH        = 156\n\tSYS_STATFS                  = 157\n\tSYS_FSTATFS                 = 158\n\tSYS_UMOUNT                  = 159\n\tSYS_SCHED_SET_AFFINITY      = 160\n\tSYS_SCHED_GET_AFFINITY      = 161\n\tSYS_GETDOMAINNAME           = 162\n\tSYS_SETDOMAINNAME           = 163\n\tSYS_UTRAP_INSTALL           = 164\n\tSYS_QUOTACTL                = 165\n\tSYS_SET_TID_ADDRESS         = 166\n\tSYS_MOUNT                   = 167\n\tSYS_USTAT                   = 168\n\tSYS_SETXATTR                = 169\n\tSYS_LSETXATTR               = 170\n\tSYS_FSETXATTR               = 171\n\tSYS_GETXATTR                = 172\n\tSYS_LGETXATTR               = 173\n\tSYS_GETDENTS                = 174\n\tSYS_SETSID                  = 175\n\tSYS_FCHDIR                  = 176\n\tSYS_FGETXATTR               = 177\n\tSYS_LISTXATTR               = 178\n\tSYS_LLISTXATTR              = 179\n\tSYS_FLISTXATTR              = 180\n\tSYS_REMOVEXATTR             = 181\n\tSYS_LREMOVEXATTR            = 182\n\tSYS_SIGPENDING              = 183\n\tSYS_QUERY_MODULE            = 184\n\tSYS_SETPGID                 = 185\n\tSYS_FREMOVEXATTR            = 186\n\tSYS_TKILL                   = 187\n\tSYS_EXIT_GROUP              = 188\n\tSYS_UNAME                   = 189\n\tSYS_INIT_MODULE             = 190\n\tSYS_PERSONALITY             = 191\n\tSYS_REMAP_FILE_PAGES        = 192\n\tSYS_EPOLL_CREATE            = 193\n\tSYS_EPOLL_CTL               = 194\n\tSYS_EPOLL_WAIT              = 195\n\tSYS_IOPRIO_SET              = 196\n\tSYS_GETPPID                 = 197\n\tSYS_SIGACTION               = 198\n\tSYS_SGETMASK                = 199\n\tSYS_SSETMASK                = 200\n\tSYS_SIGSUSPEND              = 201\n\tSYS_OLDLSTAT                = 202\n\tSYS_USELIB                  = 203\n\tSYS_READDIR                 = 204\n\tSYS_READAHEAD               = 205\n\tSYS_SOCKETCALL              = 206\n\tSYS_SYSLOG                  = 207\n\tSYS_LOOKUP_DCOOKIE          = 208\n\tSYS_FADVISE64               = 209\n\tSYS_FADVISE64_64            = 210\n\tSYS_TGKILL                  = 211\n\tSYS_WAITPID                 = 212\n\tSYS_SWAPOFF                 = 213\n\tSYS_SYSINFO                 = 214\n\tSYS_IPC                     = 215\n\tSYS_SIGRETURN               = 216\n\tSYS_CLONE                   = 217\n\tSYS_IOPRIO_GET              = 218\n\tSYS_ADJTIMEX                = 219\n\tSYS_SIGPROCMASK             = 220\n\tSYS_CREATE_MODULE           = 221\n\tSYS_DELETE_MODULE           = 222\n\tSYS_GET_KERNEL_SYMS         = 223\n\tSYS_GETPGID                 = 224\n\tSYS_BDFLUSH                 = 225\n\tSYS_SYSFS                   = 226\n\tSYS_AFS_SYSCALL             = 227\n\tSYS_SETFSUID                = 228\n\tSYS_SETFSGID                = 229\n\tSYS__NEWSELECT              = 230\n\tSYS_SPLICE                  = 232\n\tSYS_STIME                   = 233\n\tSYS_STATFS64                = 234\n\tSYS_FSTATFS64               = 235\n\tSYS__LLSEEK                 = 236\n\tSYS_MLOCK                   = 237\n\tSYS_MUNLOCK                 = 238\n\tSYS_MLOCKALL                = 239\n\tSYS_MUNLOCKALL              = 240\n\tSYS_SCHED_SETPARAM          = 241\n\tSYS_SCHED_GETPARAM          = 242\n\tSYS_SCHED_SETSCHEDULER      = 243\n\tSYS_SCHED_GETSCHEDULER      = 244\n\tSYS_SCHED_YIELD             = 245\n\tSYS_SCHED_GET_PRIORITY_MAX  = 246\n\tSYS_SCHED_GET_PRIORITY_MIN  = 247\n\tSYS_SCHED_RR_GET_INTERVAL   = 248\n\tSYS_NANOSLEEP               = 249\n\tSYS_MREMAP                  = 250\n\tSYS__SYSCTL                 = 251\n\tSYS_GETSID                  = 252\n\tSYS_FDATASYNC               = 253\n\tSYS_NFSSERVCTL              = 254\n\tSYS_SYNC_FILE_RANGE         = 255\n\tSYS_CLOCK_SETTIME           = 256\n\tSYS_CLOCK_GETTIME           = 257\n\tSYS_CLOCK_GETRES            = 258\n\tSYS_CLOCK_NANOSLEEP         = 259\n\tSYS_SCHED_GETAFFINITY       = 260\n\tSYS_SCHED_SETAFFINITY       = 261\n\tSYS_TIMER_SETTIME           = 262\n\tSYS_TIMER_GETTIME           = 263\n\tSYS_TIMER_GETOVERRUN        = 264\n\tSYS_TIMER_DELETE            = 265\n\tSYS_TIMER_CREATE            = 266\n\tSYS_VSERVER                 = 267\n\tSYS_IO_SETUP                = 268\n\tSYS_IO_DESTROY              = 269\n\tSYS_IO_SUBMIT               = 270\n\tSYS_IO_CANCEL               = 271\n\tSYS_IO_GETEVENTS            = 272\n\tSYS_MQ_OPEN                 = 273\n\tSYS_MQ_UNLINK               = 274\n\tSYS_MQ_TIMEDSEND            = 275\n\tSYS_MQ_TIMEDRECEIVE         = 276\n\tSYS_MQ_NOTIFY               = 277\n\tSYS_MQ_GETSETATTR           = 278\n\tSYS_WAITID                  = 279\n\tSYS_TEE                     = 280\n\tSYS_ADD_KEY                 = 281\n\tSYS_REQUEST_KEY             = 282\n\tSYS_KEYCTL                  = 283\n\tSYS_OPENAT                  = 284\n\tSYS_MKDIRAT                 = 285\n\tSYS_MKNODAT                 = 286\n\tSYS_FCHOWNAT                = 287\n\tSYS_FUTIMESAT               = 288\n\tSYS_FSTATAT64               = 289\n\tSYS_UNLINKAT                = 290\n\tSYS_RENAMEAT                = 291\n\tSYS_LINKAT                  = 292\n\tSYS_SYMLINKAT               = 293\n\tSYS_READLINKAT              = 294\n\tSYS_FCHMODAT                = 295\n\tSYS_FACCESSAT               = 296\n\tSYS_PSELECT6                = 297\n\tSYS_PPOLL                   = 298\n\tSYS_UNSHARE                 = 299\n\tSYS_SET_ROBUST_LIST         = 300\n\tSYS_GET_ROBUST_LIST         = 301\n\tSYS_MIGRATE_PAGES           = 302\n\tSYS_MBIND                   = 303\n\tSYS_GET_MEMPOLICY           = 304\n\tSYS_SET_MEMPOLICY           = 305\n\tSYS_KEXEC_LOAD              = 306\n\tSYS_MOVE_PAGES              = 307\n\tSYS_GETCPU                  = 308\n\tSYS_EPOLL_PWAIT             = 309\n\tSYS_UTIMENSAT               = 310\n\tSYS_SIGNALFD                = 311\n\tSYS_TIMERFD_CREATE          = 312\n\tSYS_EVENTFD                 = 313\n\tSYS_FALLOCATE               = 314\n\tSYS_TIMERFD_SETTIME         = 315\n\tSYS_TIMERFD_GETTIME         = 316\n\tSYS_SIGNALFD4               = 317\n\tSYS_EVENTFD2                = 318\n\tSYS_EPOLL_CREATE1           = 319\n\tSYS_DUP3                    = 320\n\tSYS_PIPE2                   = 321\n\tSYS_INOTIFY_INIT1           = 322\n\tSYS_ACCEPT4                 = 323\n\tSYS_PREADV                  = 324\n\tSYS_PWRITEV                 = 325\n\tSYS_RT_TGSIGQUEUEINFO       = 326\n\tSYS_PERF_EVENT_OPEN         = 327\n\tSYS_RECVMMSG                = 328\n\tSYS_FANOTIFY_INIT           = 329\n\tSYS_FANOTIFY_MARK           = 330\n\tSYS_PRLIMIT64               = 331\n\tSYS_NAME_TO_HANDLE_AT       = 332\n\tSYS_OPEN_BY_HANDLE_AT       = 333\n\tSYS_CLOCK_ADJTIME           = 334\n\tSYS_SYNCFS                  = 335\n\tSYS_SENDMMSG                = 336\n\tSYS_SETNS                   = 337\n\tSYS_PROCESS_VM_READV        = 338\n\tSYS_PROCESS_VM_WRITEV       = 339\n\tSYS_KERN_FEATURES           = 340\n\tSYS_KCMP                    = 341\n\tSYS_FINIT_MODULE            = 342\n\tSYS_SCHED_SETATTR           = 343\n\tSYS_SCHED_GETATTR           = 344\n\tSYS_RENAMEAT2               = 345\n\tSYS_SECCOMP                 = 346\n\tSYS_GETRANDOM               = 347\n\tSYS_MEMFD_CREATE            = 348\n\tSYS_BPF                     = 349\n\tSYS_EXECVEAT                = 350\n\tSYS_MEMBARRIER              = 351\n\tSYS_USERFAULTFD             = 352\n\tSYS_BIND                    = 353\n\tSYS_LISTEN                  = 354\n\tSYS_SETSOCKOPT              = 355\n\tSYS_MLOCK2                  = 356\n\tSYS_COPY_FILE_RANGE         = 357\n\tSYS_PREADV2                 = 358\n\tSYS_PWRITEV2                = 359\n\tSYS_STATX                   = 360\n\tSYS_IO_PGETEVENTS           = 361\n\tSYS_PKEY_MPROTECT           = 362\n\tSYS_PKEY_ALLOC              = 363\n\tSYS_PKEY_FREE               = 364\n\tSYS_RSEQ                    = 365\n\tSYS_SEMTIMEDOP              = 392\n\tSYS_SEMGET                  = 393\n\tSYS_SEMCTL                  = 394\n\tSYS_SHMGET                  = 395\n\tSYS_SHMCTL                  = 396\n\tSYS_SHMAT                   = 397\n\tSYS_SHMDT                   = 398\n\tSYS_MSGGET                  = 399\n\tSYS_MSGSND                  = 400\n\tSYS_MSGRCV                  = 401\n\tSYS_MSGCTL                  = 402\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_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_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\tSYS_OPEN_TREE_ATTR          = 467\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go",
    "content": "// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && netbsd\n\npackage unix\n\nconst (\n\tSYS_EXIT                 = 1   // { void|sys||exit(int rval); }\n\tSYS_FORK                 = 2   // { int|sys||fork(void); }\n\tSYS_READ                 = 3   // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                = 4   // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                 = 5   // { int|sys||open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE                = 6   // { int|sys||close(int fd); }\n\tSYS_LINK                 = 9   // { int|sys||link(const char *path, const char *link); }\n\tSYS_UNLINK               = 10  // { int|sys||unlink(const char *path); }\n\tSYS_CHDIR                = 12  // { int|sys||chdir(const char *path); }\n\tSYS_FCHDIR               = 13  // { int|sys||fchdir(int fd); }\n\tSYS_CHMOD                = 15  // { int|sys||chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN                = 16  // { int|sys||chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_BREAK                = 17  // { int|sys||obreak(char *nsize); }\n\tSYS_GETPID               = 20  // { pid_t|sys||getpid_with_ppid(void); }\n\tSYS_UNMOUNT              = 22  // { int|sys||unmount(const char *path, int flags); }\n\tSYS_SETUID               = 23  // { int|sys||setuid(uid_t uid); }\n\tSYS_GETUID               = 24  // { uid_t|sys||getuid_with_euid(void); }\n\tSYS_GETEUID              = 25  // { uid_t|sys||geteuid(void); }\n\tSYS_PTRACE               = 26  // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); }\n\tSYS_RECVMSG              = 27  // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG              = 28  // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM             = 29  // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT               = 30  // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME          = 31  // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME          = 32  // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS               = 33  // { int|sys||access(const char *path, int flags); }\n\tSYS_CHFLAGS              = 34  // { int|sys||chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS             = 35  // { int|sys||fchflags(int fd, u_long flags); }\n\tSYS_SYNC                 = 36  // { void|sys||sync(void); }\n\tSYS_KILL                 = 37  // { int|sys||kill(pid_t pid, int signum); }\n\tSYS_GETPPID              = 39  // { pid_t|sys||getppid(void); }\n\tSYS_DUP                  = 41  // { int|sys||dup(int fd); }\n\tSYS_PIPE                 = 42  // { int|sys||pipe(void); }\n\tSYS_GETEGID              = 43  // { gid_t|sys||getegid(void); }\n\tSYS_PROFIL               = 44  // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE               = 45  // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_GETGID               = 47  // { gid_t|sys||getgid_with_egid(void); }\n\tSYS___GETLOGIN           = 49  // { int|sys||__getlogin(char *namebuf, size_t namelen); }\n\tSYS___SETLOGIN           = 50  // { int|sys||__setlogin(const char *namebuf); }\n\tSYS_ACCT                 = 51  // { int|sys||acct(const char *path); }\n\tSYS_IOCTL                = 54  // { int|sys||ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REVOKE               = 56  // { int|sys||revoke(const char *path); }\n\tSYS_SYMLINK              = 57  // { int|sys||symlink(const char *path, const char *link); }\n\tSYS_READLINK             = 58  // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE               = 59  // { int|sys||execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK                = 60  // { mode_t|sys||umask(mode_t newmask); }\n\tSYS_CHROOT               = 61  // { int|sys||chroot(const char *path); }\n\tSYS_VFORK                = 66  // { int|sys||vfork(void); }\n\tSYS_SBRK                 = 69  // { int|sys||sbrk(intptr_t incr); }\n\tSYS_SSTK                 = 70  // { int|sys||sstk(int incr); }\n\tSYS_VADVISE              = 72  // { int|sys||ovadvise(int anom); }\n\tSYS_MUNMAP               = 73  // { int|sys||munmap(void *addr, size_t len); }\n\tSYS_MPROTECT             = 74  // { int|sys||mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE              = 75  // { int|sys||madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE              = 78  // { int|sys||mincore(void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS            = 79  // { int|sys||getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS            = 80  // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP              = 81  // { int|sys||getpgrp(void); }\n\tSYS_SETPGID              = 82  // { int|sys||setpgid(pid_t pid, pid_t pgid); }\n\tSYS_DUP2                 = 90  // { int|sys||dup2(int from, int to); }\n\tSYS_FCNTL                = 92  // { int|sys||fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_FSYNC                = 95  // { int|sys||fsync(int fd); }\n\tSYS_SETPRIORITY          = 96  // { int|sys||setpriority(int which, id_t who, int prio); }\n\tSYS_CONNECT              = 98  // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETPRIORITY          = 100 // { int|sys||getpriority(int which, id_t who); }\n\tSYS_BIND                 = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT           = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN               = 106 // { int|sys||listen(int s, int backlog); }\n\tSYS_GETSOCKOPT           = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_READV                = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV               = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_FCHOWN               = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD               = 124 // { int|sys||fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID             = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID             = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME               = 128 // { int|sys||rename(const char *from, const char *to); }\n\tSYS_FLOCK                = 131 // { int|sys||flock(int fd, int how); }\n\tSYS_MKFIFO               = 132 // { int|sys||mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO               = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN             = 134 // { int|sys||shutdown(int s, int how); }\n\tSYS_SOCKETPAIR           = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                = 136 // { int|sys||mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR                = 137 // { int|sys||rmdir(const char *path); }\n\tSYS_SETSID               = 147 // { int|sys||setsid(void); }\n\tSYS_SYSARCH              = 165 // { int|sys||sysarch(int op, void *parms); }\n\tSYS_PREAD                = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_PWRITE               = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_NTP_ADJTIME          = 176 // { int|sys||ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID               = 181 // { int|sys||setgid(gid_t gid); }\n\tSYS_SETEGID              = 182 // { int|sys||setegid(gid_t egid); }\n\tSYS_SETEUID              = 183 // { int|sys||seteuid(uid_t euid); }\n\tSYS_PATHCONF             = 191 // { long|sys||pathconf(const char *path, int name); }\n\tSYS_FPATHCONF            = 192 // { long|sys||fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT            = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT            = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP                 = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); }\n\tSYS_LSEEK                = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); }\n\tSYS_TRUNCATE             = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); }\n\tSYS_FTRUNCATE            = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); }\n\tSYS___SYSCTL             = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); }\n\tSYS_MLOCK                = 203 // { int|sys||mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK              = 204 // { int|sys||munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE             = 205 // { int|sys||undelete(const char *path); }\n\tSYS_GETPGID              = 207 // { pid_t|sys||getpgid(pid_t pid); }\n\tSYS_REBOOT               = 208 // { int|sys||reboot(int opt, char *bootstr); }\n\tSYS_POLL                 = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET               = 221 // { int|sys||semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_SEMCONFIG            = 223 // { int|sys||semconfig(int flag); }\n\tSYS_MSGGET               = 225 // { int|sys||msgget(key_t key, int msgflg); }\n\tSYS_MSGSND               = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV               = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                = 230 // { int|sys||shmdt(const void *shmaddr); }\n\tSYS_SHMGET               = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); }\n\tSYS_TIMER_CREATE         = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); }\n\tSYS_TIMER_DELETE         = 236 // { int|sys||timer_delete(timer_t timerid); }\n\tSYS_TIMER_GETOVERRUN     = 239 // { int|sys||timer_getoverrun(timer_t timerid); }\n\tSYS_FDATASYNC            = 241 // { int|sys||fdatasync(int fd); }\n\tSYS_MLOCKALL             = 242 // { int|sys||mlockall(int flags); }\n\tSYS_MUNLOCKALL           = 243 // { int|sys||munlockall(void); }\n\tSYS_SIGQUEUEINFO         = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); }\n\tSYS_MODCTL               = 246 // { int|sys||modctl(int cmd, void *arg); }\n\tSYS___POSIX_RENAME       = 270 // { int|sys||__posix_rename(const char *from, const char *to); }\n\tSYS_SWAPCTL              = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); }\n\tSYS_MINHERIT             = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); }\n\tSYS_LCHMOD               = 274 // { int|sys||lchmod(const char *path, mode_t mode); }\n\tSYS_LCHOWN               = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_MSYNC                = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); }\n\tSYS___POSIX_CHOWN        = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS___POSIX_FCHOWN       = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS___POSIX_LCHOWN       = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID               = 286 // { pid_t|sys||getsid(pid_t pid); }\n\tSYS___CLONE              = 287 // { pid_t|sys||__clone(int flags, void *stack); }\n\tSYS_FKTRACE              = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); }\n\tSYS_PREADV               = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS_PWRITEV              = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS___GETCWD             = 296 // { int|sys||__getcwd(char *bufp, size_t length); }\n\tSYS_FCHROOT              = 297 // { int|sys||fchroot(int fd); }\n\tSYS_LCHFLAGS             = 304 // { int|sys||lchflags(const char *path, u_long flags); }\n\tSYS_ISSETUGID            = 305 // { int|sys||issetugid(void); }\n\tSYS_UTRACE               = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); }\n\tSYS_GETCONTEXT           = 307 // { int|sys||getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT           = 308 // { int|sys||setcontext(const struct __ucontext *ucp); }\n\tSYS__LWP_CREATE          = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); }\n\tSYS__LWP_EXIT            = 310 // { int|sys||_lwp_exit(void); }\n\tSYS__LWP_SELF            = 311 // { lwpid_t|sys||_lwp_self(void); }\n\tSYS__LWP_WAIT            = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); }\n\tSYS__LWP_SUSPEND         = 313 // { int|sys||_lwp_suspend(lwpid_t target); }\n\tSYS__LWP_CONTINUE        = 314 // { int|sys||_lwp_continue(lwpid_t target); }\n\tSYS__LWP_WAKEUP          = 315 // { int|sys||_lwp_wakeup(lwpid_t target); }\n\tSYS__LWP_GETPRIVATE      = 316 // { void *|sys||_lwp_getprivate(void); }\n\tSYS__LWP_SETPRIVATE      = 317 // { void|sys||_lwp_setprivate(void *ptr); }\n\tSYS__LWP_KILL            = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); }\n\tSYS__LWP_DETACH          = 319 // { int|sys||_lwp_detach(lwpid_t target); }\n\tSYS__LWP_UNPARK          = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); }\n\tSYS__LWP_UNPARK_ALL      = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); }\n\tSYS__LWP_SETNAME         = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); }\n\tSYS__LWP_GETNAME         = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); }\n\tSYS__LWP_CTL             = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); }\n\tSYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); }\n\tSYS_PMC_GET_INFO         = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); }\n\tSYS_PMC_CONTROL          = 342 // { int|sys||pmc_control(int ctr, int op, void *args); }\n\tSYS_RASCTL               = 343 // { int|sys||rasctl(void *addr, size_t len, int op); }\n\tSYS_KQUEUE               = 344 // { int|sys||kqueue(void); }\n\tSYS__SCHED_SETPARAM      = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); }\n\tSYS__SCHED_GETPARAM      = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); }\n\tSYS__SCHED_SETAFFINITY   = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); }\n\tSYS__SCHED_GETAFFINITY   = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); }\n\tSYS_SCHED_YIELD          = 350 // { int|sys||sched_yield(void); }\n\tSYS_FSYNC_RANGE          = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); }\n\tSYS_UUIDGEN              = 355 // { int|sys||uuidgen(struct uuid *store, int count); }\n\tSYS_GETVFSSTAT           = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); }\n\tSYS_STATVFS1             = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); }\n\tSYS_FSTATVFS1            = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); }\n\tSYS_EXTATTRCTL           = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE     = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE     = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE  = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FD       = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD       = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD    = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_LINK     = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK     = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK  = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_LIST_FD      = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE    = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK    = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_SETXATTR             = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_LSETXATTR            = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_FSETXATTR            = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); }\n\tSYS_GETXATTR             = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_LGETXATTR            = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_FGETXATTR            = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); }\n\tSYS_LISTXATTR            = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); }\n\tSYS_LLISTXATTR           = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); }\n\tSYS_FLISTXATTR           = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); }\n\tSYS_REMOVEXATTR          = 384 // { int|sys||removexattr(const char *path, const char *name); }\n\tSYS_LREMOVEXATTR         = 385 // { int|sys||lremovexattr(const char *path, const char *name); }\n\tSYS_FREMOVEXATTR         = 386 // { int|sys||fremovexattr(int fd, const char *name); }\n\tSYS_GETDENTS             = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); }\n\tSYS_SOCKET               = 394 // { int|sys|30|socket(int domain, int type, int protocol); }\n\tSYS_GETFH                = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); }\n\tSYS_MOUNT                = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); }\n\tSYS_MREMAP               = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); }\n\tSYS_PSET_CREATE          = 412 // { int|sys||pset_create(psetid_t *psid); }\n\tSYS_PSET_DESTROY         = 413 // { int|sys||pset_destroy(psetid_t psid); }\n\tSYS_PSET_ASSIGN          = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); }\n\tSYS__PSET_BIND           = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); }\n\tSYS_POSIX_FADVISE        = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); }\n\tSYS_SELECT               = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_GETTIMEOFDAY         = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); }\n\tSYS_SETTIMEOFDAY         = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); }\n\tSYS_UTIMES               = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); }\n\tSYS_ADJTIME              = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_FUTIMES              = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); }\n\tSYS_LUTIMES              = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); }\n\tSYS_SETITIMER            = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER            = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); }\n\tSYS_CLOCK_GETTIME        = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME        = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }\n\tSYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }\n\tSYS_KEVENT               = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); }\n\tSYS_PSELECT              = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_STAT                 = 439 // { int|sys|50|stat(const char *path, struct stat *ub); }\n\tSYS_FSTAT                = 440 // { int|sys|50|fstat(int fd, struct stat *sb); }\n\tSYS_LSTAT                = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); }\n\tSYS___SEMCTL             = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); }\n\tSYS_SHMCTL               = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL               = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_GETRUSAGE            = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); }\n\tSYS_TIMER_SETTIME        = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_TIMER_GETTIME        = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); }\n\tSYS_NTP_GETTIME          = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_WAIT4                = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_MKNOD                = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_FHSTAT               = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); }\n\tSYS_PIPE2                = 453 // { int|sys||pipe2(int *fildes, int flags); }\n\tSYS_DUP3                 = 454 // { int|sys||dup3(int from, int to, int flags); }\n\tSYS_KQUEUE1              = 455 // { int|sys||kqueue1(int flags); }\n\tSYS_PACCEPT              = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); }\n\tSYS_LINKAT               = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); }\n\tSYS_RENAMEAT             = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_MKFIFOAT             = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT              = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); }\n\tSYS_MKDIRAT              = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_FACCESSAT            = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT             = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT             = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); }\n\tSYS_FEXECVE              = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); }\n\tSYS_FSTATAT              = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_UTIMENSAT            = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); }\n\tSYS_OPENAT               = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); }\n\tSYS_READLINKAT           = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); }\n\tSYS_SYMLINKAT            = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }\n\tSYS_UNLINKAT             = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }\n\tSYS_FUTIMENS             = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }\n\tSYS___QUOTACTL           = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }\n\tSYS_POSIX_SPAWN          = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }\n\tSYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }\n\tSYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go",
    "content": "// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && netbsd\n\npackage unix\n\nconst (\n\tSYS_EXIT                 = 1   // { void|sys||exit(int rval); }\n\tSYS_FORK                 = 2   // { int|sys||fork(void); }\n\tSYS_READ                 = 3   // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                = 4   // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                 = 5   // { int|sys||open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE                = 6   // { int|sys||close(int fd); }\n\tSYS_LINK                 = 9   // { int|sys||link(const char *path, const char *link); }\n\tSYS_UNLINK               = 10  // { int|sys||unlink(const char *path); }\n\tSYS_CHDIR                = 12  // { int|sys||chdir(const char *path); }\n\tSYS_FCHDIR               = 13  // { int|sys||fchdir(int fd); }\n\tSYS_CHMOD                = 15  // { int|sys||chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN                = 16  // { int|sys||chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_BREAK                = 17  // { int|sys||obreak(char *nsize); }\n\tSYS_GETPID               = 20  // { pid_t|sys||getpid_with_ppid(void); }\n\tSYS_UNMOUNT              = 22  // { int|sys||unmount(const char *path, int flags); }\n\tSYS_SETUID               = 23  // { int|sys||setuid(uid_t uid); }\n\tSYS_GETUID               = 24  // { uid_t|sys||getuid_with_euid(void); }\n\tSYS_GETEUID              = 25  // { uid_t|sys||geteuid(void); }\n\tSYS_PTRACE               = 26  // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); }\n\tSYS_RECVMSG              = 27  // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG              = 28  // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM             = 29  // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT               = 30  // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME          = 31  // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME          = 32  // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS               = 33  // { int|sys||access(const char *path, int flags); }\n\tSYS_CHFLAGS              = 34  // { int|sys||chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS             = 35  // { int|sys||fchflags(int fd, u_long flags); }\n\tSYS_SYNC                 = 36  // { void|sys||sync(void); }\n\tSYS_KILL                 = 37  // { int|sys||kill(pid_t pid, int signum); }\n\tSYS_GETPPID              = 39  // { pid_t|sys||getppid(void); }\n\tSYS_DUP                  = 41  // { int|sys||dup(int fd); }\n\tSYS_PIPE                 = 42  // { int|sys||pipe(void); }\n\tSYS_GETEGID              = 43  // { gid_t|sys||getegid(void); }\n\tSYS_PROFIL               = 44  // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE               = 45  // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_GETGID               = 47  // { gid_t|sys||getgid_with_egid(void); }\n\tSYS___GETLOGIN           = 49  // { int|sys||__getlogin(char *namebuf, size_t namelen); }\n\tSYS___SETLOGIN           = 50  // { int|sys||__setlogin(const char *namebuf); }\n\tSYS_ACCT                 = 51  // { int|sys||acct(const char *path); }\n\tSYS_IOCTL                = 54  // { int|sys||ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REVOKE               = 56  // { int|sys||revoke(const char *path); }\n\tSYS_SYMLINK              = 57  // { int|sys||symlink(const char *path, const char *link); }\n\tSYS_READLINK             = 58  // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE               = 59  // { int|sys||execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK                = 60  // { mode_t|sys||umask(mode_t newmask); }\n\tSYS_CHROOT               = 61  // { int|sys||chroot(const char *path); }\n\tSYS_VFORK                = 66  // { int|sys||vfork(void); }\n\tSYS_SBRK                 = 69  // { int|sys||sbrk(intptr_t incr); }\n\tSYS_SSTK                 = 70  // { int|sys||sstk(int incr); }\n\tSYS_VADVISE              = 72  // { int|sys||ovadvise(int anom); }\n\tSYS_MUNMAP               = 73  // { int|sys||munmap(void *addr, size_t len); }\n\tSYS_MPROTECT             = 74  // { int|sys||mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE              = 75  // { int|sys||madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE              = 78  // { int|sys||mincore(void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS            = 79  // { int|sys||getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS            = 80  // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP              = 81  // { int|sys||getpgrp(void); }\n\tSYS_SETPGID              = 82  // { int|sys||setpgid(pid_t pid, pid_t pgid); }\n\tSYS_DUP2                 = 90  // { int|sys||dup2(int from, int to); }\n\tSYS_FCNTL                = 92  // { int|sys||fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_FSYNC                = 95  // { int|sys||fsync(int fd); }\n\tSYS_SETPRIORITY          = 96  // { int|sys||setpriority(int which, id_t who, int prio); }\n\tSYS_CONNECT              = 98  // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETPRIORITY          = 100 // { int|sys||getpriority(int which, id_t who); }\n\tSYS_BIND                 = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT           = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN               = 106 // { int|sys||listen(int s, int backlog); }\n\tSYS_GETSOCKOPT           = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_READV                = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV               = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_FCHOWN               = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD               = 124 // { int|sys||fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID             = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID             = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME               = 128 // { int|sys||rename(const char *from, const char *to); }\n\tSYS_FLOCK                = 131 // { int|sys||flock(int fd, int how); }\n\tSYS_MKFIFO               = 132 // { int|sys||mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO               = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN             = 134 // { int|sys||shutdown(int s, int how); }\n\tSYS_SOCKETPAIR           = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                = 136 // { int|sys||mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR                = 137 // { int|sys||rmdir(const char *path); }\n\tSYS_SETSID               = 147 // { int|sys||setsid(void); }\n\tSYS_SYSARCH              = 165 // { int|sys||sysarch(int op, void *parms); }\n\tSYS_PREAD                = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_PWRITE               = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_NTP_ADJTIME          = 176 // { int|sys||ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID               = 181 // { int|sys||setgid(gid_t gid); }\n\tSYS_SETEGID              = 182 // { int|sys||setegid(gid_t egid); }\n\tSYS_SETEUID              = 183 // { int|sys||seteuid(uid_t euid); }\n\tSYS_PATHCONF             = 191 // { long|sys||pathconf(const char *path, int name); }\n\tSYS_FPATHCONF            = 192 // { long|sys||fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT            = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT            = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP                 = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); }\n\tSYS_LSEEK                = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); }\n\tSYS_TRUNCATE             = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); }\n\tSYS_FTRUNCATE            = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); }\n\tSYS___SYSCTL             = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); }\n\tSYS_MLOCK                = 203 // { int|sys||mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK              = 204 // { int|sys||munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE             = 205 // { int|sys||undelete(const char *path); }\n\tSYS_GETPGID              = 207 // { pid_t|sys||getpgid(pid_t pid); }\n\tSYS_REBOOT               = 208 // { int|sys||reboot(int opt, char *bootstr); }\n\tSYS_POLL                 = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET               = 221 // { int|sys||semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_SEMCONFIG            = 223 // { int|sys||semconfig(int flag); }\n\tSYS_MSGGET               = 225 // { int|sys||msgget(key_t key, int msgflg); }\n\tSYS_MSGSND               = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV               = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                = 230 // { int|sys||shmdt(const void *shmaddr); }\n\tSYS_SHMGET               = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); }\n\tSYS_TIMER_CREATE         = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); }\n\tSYS_TIMER_DELETE         = 236 // { int|sys||timer_delete(timer_t timerid); }\n\tSYS_TIMER_GETOVERRUN     = 239 // { int|sys||timer_getoverrun(timer_t timerid); }\n\tSYS_FDATASYNC            = 241 // { int|sys||fdatasync(int fd); }\n\tSYS_MLOCKALL             = 242 // { int|sys||mlockall(int flags); }\n\tSYS_MUNLOCKALL           = 243 // { int|sys||munlockall(void); }\n\tSYS_SIGQUEUEINFO         = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); }\n\tSYS_MODCTL               = 246 // { int|sys||modctl(int cmd, void *arg); }\n\tSYS___POSIX_RENAME       = 270 // { int|sys||__posix_rename(const char *from, const char *to); }\n\tSYS_SWAPCTL              = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); }\n\tSYS_MINHERIT             = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); }\n\tSYS_LCHMOD               = 274 // { int|sys||lchmod(const char *path, mode_t mode); }\n\tSYS_LCHOWN               = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_MSYNC                = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); }\n\tSYS___POSIX_CHOWN        = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS___POSIX_FCHOWN       = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS___POSIX_LCHOWN       = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID               = 286 // { pid_t|sys||getsid(pid_t pid); }\n\tSYS___CLONE              = 287 // { pid_t|sys||__clone(int flags, void *stack); }\n\tSYS_FKTRACE              = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); }\n\tSYS_PREADV               = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS_PWRITEV              = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS___GETCWD             = 296 // { int|sys||__getcwd(char *bufp, size_t length); }\n\tSYS_FCHROOT              = 297 // { int|sys||fchroot(int fd); }\n\tSYS_LCHFLAGS             = 304 // { int|sys||lchflags(const char *path, u_long flags); }\n\tSYS_ISSETUGID            = 305 // { int|sys||issetugid(void); }\n\tSYS_UTRACE               = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); }\n\tSYS_GETCONTEXT           = 307 // { int|sys||getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT           = 308 // { int|sys||setcontext(const struct __ucontext *ucp); }\n\tSYS__LWP_CREATE          = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); }\n\tSYS__LWP_EXIT            = 310 // { int|sys||_lwp_exit(void); }\n\tSYS__LWP_SELF            = 311 // { lwpid_t|sys||_lwp_self(void); }\n\tSYS__LWP_WAIT            = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); }\n\tSYS__LWP_SUSPEND         = 313 // { int|sys||_lwp_suspend(lwpid_t target); }\n\tSYS__LWP_CONTINUE        = 314 // { int|sys||_lwp_continue(lwpid_t target); }\n\tSYS__LWP_WAKEUP          = 315 // { int|sys||_lwp_wakeup(lwpid_t target); }\n\tSYS__LWP_GETPRIVATE      = 316 // { void *|sys||_lwp_getprivate(void); }\n\tSYS__LWP_SETPRIVATE      = 317 // { void|sys||_lwp_setprivate(void *ptr); }\n\tSYS__LWP_KILL            = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); }\n\tSYS__LWP_DETACH          = 319 // { int|sys||_lwp_detach(lwpid_t target); }\n\tSYS__LWP_UNPARK          = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); }\n\tSYS__LWP_UNPARK_ALL      = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); }\n\tSYS__LWP_SETNAME         = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); }\n\tSYS__LWP_GETNAME         = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); }\n\tSYS__LWP_CTL             = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); }\n\tSYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); }\n\tSYS_PMC_GET_INFO         = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); }\n\tSYS_PMC_CONTROL          = 342 // { int|sys||pmc_control(int ctr, int op, void *args); }\n\tSYS_RASCTL               = 343 // { int|sys||rasctl(void *addr, size_t len, int op); }\n\tSYS_KQUEUE               = 344 // { int|sys||kqueue(void); }\n\tSYS__SCHED_SETPARAM      = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); }\n\tSYS__SCHED_GETPARAM      = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); }\n\tSYS__SCHED_SETAFFINITY   = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); }\n\tSYS__SCHED_GETAFFINITY   = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); }\n\tSYS_SCHED_YIELD          = 350 // { int|sys||sched_yield(void); }\n\tSYS_FSYNC_RANGE          = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); }\n\tSYS_UUIDGEN              = 355 // { int|sys||uuidgen(struct uuid *store, int count); }\n\tSYS_GETVFSSTAT           = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); }\n\tSYS_STATVFS1             = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); }\n\tSYS_FSTATVFS1            = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); }\n\tSYS_EXTATTRCTL           = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE     = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE     = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE  = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FD       = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD       = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD    = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_LINK     = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK     = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK  = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_LIST_FD      = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE    = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK    = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_SETXATTR             = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_LSETXATTR            = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_FSETXATTR            = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); }\n\tSYS_GETXATTR             = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_LGETXATTR            = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_FGETXATTR            = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); }\n\tSYS_LISTXATTR            = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); }\n\tSYS_LLISTXATTR           = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); }\n\tSYS_FLISTXATTR           = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); }\n\tSYS_REMOVEXATTR          = 384 // { int|sys||removexattr(const char *path, const char *name); }\n\tSYS_LREMOVEXATTR         = 385 // { int|sys||lremovexattr(const char *path, const char *name); }\n\tSYS_FREMOVEXATTR         = 386 // { int|sys||fremovexattr(int fd, const char *name); }\n\tSYS_GETDENTS             = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); }\n\tSYS_SOCKET               = 394 // { int|sys|30|socket(int domain, int type, int protocol); }\n\tSYS_GETFH                = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); }\n\tSYS_MOUNT                = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); }\n\tSYS_MREMAP               = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); }\n\tSYS_PSET_CREATE          = 412 // { int|sys||pset_create(psetid_t *psid); }\n\tSYS_PSET_DESTROY         = 413 // { int|sys||pset_destroy(psetid_t psid); }\n\tSYS_PSET_ASSIGN          = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); }\n\tSYS__PSET_BIND           = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); }\n\tSYS_POSIX_FADVISE        = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); }\n\tSYS_SELECT               = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_GETTIMEOFDAY         = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); }\n\tSYS_SETTIMEOFDAY         = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); }\n\tSYS_UTIMES               = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); }\n\tSYS_ADJTIME              = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_FUTIMES              = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); }\n\tSYS_LUTIMES              = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); }\n\tSYS_SETITIMER            = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER            = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); }\n\tSYS_CLOCK_GETTIME        = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME        = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }\n\tSYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }\n\tSYS_KEVENT               = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); }\n\tSYS_PSELECT              = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_STAT                 = 439 // { int|sys|50|stat(const char *path, struct stat *ub); }\n\tSYS_FSTAT                = 440 // { int|sys|50|fstat(int fd, struct stat *sb); }\n\tSYS_LSTAT                = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); }\n\tSYS___SEMCTL             = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); }\n\tSYS_SHMCTL               = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL               = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_GETRUSAGE            = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); }\n\tSYS_TIMER_SETTIME        = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_TIMER_GETTIME        = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); }\n\tSYS_NTP_GETTIME          = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_WAIT4                = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_MKNOD                = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_FHSTAT               = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); }\n\tSYS_PIPE2                = 453 // { int|sys||pipe2(int *fildes, int flags); }\n\tSYS_DUP3                 = 454 // { int|sys||dup3(int from, int to, int flags); }\n\tSYS_KQUEUE1              = 455 // { int|sys||kqueue1(int flags); }\n\tSYS_PACCEPT              = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); }\n\tSYS_LINKAT               = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); }\n\tSYS_RENAMEAT             = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_MKFIFOAT             = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT              = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); }\n\tSYS_MKDIRAT              = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_FACCESSAT            = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT             = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT             = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); }\n\tSYS_FEXECVE              = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); }\n\tSYS_FSTATAT              = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_UTIMENSAT            = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); }\n\tSYS_OPENAT               = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); }\n\tSYS_READLINKAT           = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); }\n\tSYS_SYMLINKAT            = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }\n\tSYS_UNLINKAT             = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }\n\tSYS_FUTIMENS             = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }\n\tSYS___QUOTACTL           = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }\n\tSYS_POSIX_SPAWN          = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }\n\tSYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }\n\tSYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go",
    "content": "// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && netbsd\n\npackage unix\n\nconst (\n\tSYS_EXIT                 = 1   // { void|sys||exit(int rval); }\n\tSYS_FORK                 = 2   // { int|sys||fork(void); }\n\tSYS_READ                 = 3   // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                = 4   // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                 = 5   // { int|sys||open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE                = 6   // { int|sys||close(int fd); }\n\tSYS_LINK                 = 9   // { int|sys||link(const char *path, const char *link); }\n\tSYS_UNLINK               = 10  // { int|sys||unlink(const char *path); }\n\tSYS_CHDIR                = 12  // { int|sys||chdir(const char *path); }\n\tSYS_FCHDIR               = 13  // { int|sys||fchdir(int fd); }\n\tSYS_CHMOD                = 15  // { int|sys||chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN                = 16  // { int|sys||chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_BREAK                = 17  // { int|sys||obreak(char *nsize); }\n\tSYS_GETPID               = 20  // { pid_t|sys||getpid_with_ppid(void); }\n\tSYS_UNMOUNT              = 22  // { int|sys||unmount(const char *path, int flags); }\n\tSYS_SETUID               = 23  // { int|sys||setuid(uid_t uid); }\n\tSYS_GETUID               = 24  // { uid_t|sys||getuid_with_euid(void); }\n\tSYS_GETEUID              = 25  // { uid_t|sys||geteuid(void); }\n\tSYS_PTRACE               = 26  // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); }\n\tSYS_RECVMSG              = 27  // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG              = 28  // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM             = 29  // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT               = 30  // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME          = 31  // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME          = 32  // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS               = 33  // { int|sys||access(const char *path, int flags); }\n\tSYS_CHFLAGS              = 34  // { int|sys||chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS             = 35  // { int|sys||fchflags(int fd, u_long flags); }\n\tSYS_SYNC                 = 36  // { void|sys||sync(void); }\n\tSYS_KILL                 = 37  // { int|sys||kill(pid_t pid, int signum); }\n\tSYS_GETPPID              = 39  // { pid_t|sys||getppid(void); }\n\tSYS_DUP                  = 41  // { int|sys||dup(int fd); }\n\tSYS_PIPE                 = 42  // { int|sys||pipe(void); }\n\tSYS_GETEGID              = 43  // { gid_t|sys||getegid(void); }\n\tSYS_PROFIL               = 44  // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE               = 45  // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_GETGID               = 47  // { gid_t|sys||getgid_with_egid(void); }\n\tSYS___GETLOGIN           = 49  // { int|sys||__getlogin(char *namebuf, size_t namelen); }\n\tSYS___SETLOGIN           = 50  // { int|sys||__setlogin(const char *namebuf); }\n\tSYS_ACCT                 = 51  // { int|sys||acct(const char *path); }\n\tSYS_IOCTL                = 54  // { int|sys||ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REVOKE               = 56  // { int|sys||revoke(const char *path); }\n\tSYS_SYMLINK              = 57  // { int|sys||symlink(const char *path, const char *link); }\n\tSYS_READLINK             = 58  // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE               = 59  // { int|sys||execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK                = 60  // { mode_t|sys||umask(mode_t newmask); }\n\tSYS_CHROOT               = 61  // { int|sys||chroot(const char *path); }\n\tSYS_VFORK                = 66  // { int|sys||vfork(void); }\n\tSYS_SBRK                 = 69  // { int|sys||sbrk(intptr_t incr); }\n\tSYS_SSTK                 = 70  // { int|sys||sstk(int incr); }\n\tSYS_VADVISE              = 72  // { int|sys||ovadvise(int anom); }\n\tSYS_MUNMAP               = 73  // { int|sys||munmap(void *addr, size_t len); }\n\tSYS_MPROTECT             = 74  // { int|sys||mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE              = 75  // { int|sys||madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE              = 78  // { int|sys||mincore(void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS            = 79  // { int|sys||getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS            = 80  // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP              = 81  // { int|sys||getpgrp(void); }\n\tSYS_SETPGID              = 82  // { int|sys||setpgid(pid_t pid, pid_t pgid); }\n\tSYS_DUP2                 = 90  // { int|sys||dup2(int from, int to); }\n\tSYS_FCNTL                = 92  // { int|sys||fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_FSYNC                = 95  // { int|sys||fsync(int fd); }\n\tSYS_SETPRIORITY          = 96  // { int|sys||setpriority(int which, id_t who, int prio); }\n\tSYS_CONNECT              = 98  // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETPRIORITY          = 100 // { int|sys||getpriority(int which, id_t who); }\n\tSYS_BIND                 = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT           = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN               = 106 // { int|sys||listen(int s, int backlog); }\n\tSYS_GETSOCKOPT           = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_READV                = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV               = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_FCHOWN               = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD               = 124 // { int|sys||fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID             = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID             = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME               = 128 // { int|sys||rename(const char *from, const char *to); }\n\tSYS_FLOCK                = 131 // { int|sys||flock(int fd, int how); }\n\tSYS_MKFIFO               = 132 // { int|sys||mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO               = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN             = 134 // { int|sys||shutdown(int s, int how); }\n\tSYS_SOCKETPAIR           = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                = 136 // { int|sys||mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR                = 137 // { int|sys||rmdir(const char *path); }\n\tSYS_SETSID               = 147 // { int|sys||setsid(void); }\n\tSYS_SYSARCH              = 165 // { int|sys||sysarch(int op, void *parms); }\n\tSYS_PREAD                = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_PWRITE               = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_NTP_ADJTIME          = 176 // { int|sys||ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID               = 181 // { int|sys||setgid(gid_t gid); }\n\tSYS_SETEGID              = 182 // { int|sys||setegid(gid_t egid); }\n\tSYS_SETEUID              = 183 // { int|sys||seteuid(uid_t euid); }\n\tSYS_PATHCONF             = 191 // { long|sys||pathconf(const char *path, int name); }\n\tSYS_FPATHCONF            = 192 // { long|sys||fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT            = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT            = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP                 = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); }\n\tSYS_LSEEK                = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); }\n\tSYS_TRUNCATE             = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); }\n\tSYS_FTRUNCATE            = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); }\n\tSYS___SYSCTL             = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); }\n\tSYS_MLOCK                = 203 // { int|sys||mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK              = 204 // { int|sys||munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE             = 205 // { int|sys||undelete(const char *path); }\n\tSYS_GETPGID              = 207 // { pid_t|sys||getpgid(pid_t pid); }\n\tSYS_REBOOT               = 208 // { int|sys||reboot(int opt, char *bootstr); }\n\tSYS_POLL                 = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET               = 221 // { int|sys||semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_SEMCONFIG            = 223 // { int|sys||semconfig(int flag); }\n\tSYS_MSGGET               = 225 // { int|sys||msgget(key_t key, int msgflg); }\n\tSYS_MSGSND               = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV               = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                = 230 // { int|sys||shmdt(const void *shmaddr); }\n\tSYS_SHMGET               = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); }\n\tSYS_TIMER_CREATE         = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); }\n\tSYS_TIMER_DELETE         = 236 // { int|sys||timer_delete(timer_t timerid); }\n\tSYS_TIMER_GETOVERRUN     = 239 // { int|sys||timer_getoverrun(timer_t timerid); }\n\tSYS_FDATASYNC            = 241 // { int|sys||fdatasync(int fd); }\n\tSYS_MLOCKALL             = 242 // { int|sys||mlockall(int flags); }\n\tSYS_MUNLOCKALL           = 243 // { int|sys||munlockall(void); }\n\tSYS_SIGQUEUEINFO         = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); }\n\tSYS_MODCTL               = 246 // { int|sys||modctl(int cmd, void *arg); }\n\tSYS___POSIX_RENAME       = 270 // { int|sys||__posix_rename(const char *from, const char *to); }\n\tSYS_SWAPCTL              = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); }\n\tSYS_MINHERIT             = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); }\n\tSYS_LCHMOD               = 274 // { int|sys||lchmod(const char *path, mode_t mode); }\n\tSYS_LCHOWN               = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_MSYNC                = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); }\n\tSYS___POSIX_CHOWN        = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS___POSIX_FCHOWN       = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS___POSIX_LCHOWN       = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID               = 286 // { pid_t|sys||getsid(pid_t pid); }\n\tSYS___CLONE              = 287 // { pid_t|sys||__clone(int flags, void *stack); }\n\tSYS_FKTRACE              = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); }\n\tSYS_PREADV               = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS_PWRITEV              = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS___GETCWD             = 296 // { int|sys||__getcwd(char *bufp, size_t length); }\n\tSYS_FCHROOT              = 297 // { int|sys||fchroot(int fd); }\n\tSYS_LCHFLAGS             = 304 // { int|sys||lchflags(const char *path, u_long flags); }\n\tSYS_ISSETUGID            = 305 // { int|sys||issetugid(void); }\n\tSYS_UTRACE               = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); }\n\tSYS_GETCONTEXT           = 307 // { int|sys||getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT           = 308 // { int|sys||setcontext(const struct __ucontext *ucp); }\n\tSYS__LWP_CREATE          = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); }\n\tSYS__LWP_EXIT            = 310 // { int|sys||_lwp_exit(void); }\n\tSYS__LWP_SELF            = 311 // { lwpid_t|sys||_lwp_self(void); }\n\tSYS__LWP_WAIT            = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); }\n\tSYS__LWP_SUSPEND         = 313 // { int|sys||_lwp_suspend(lwpid_t target); }\n\tSYS__LWP_CONTINUE        = 314 // { int|sys||_lwp_continue(lwpid_t target); }\n\tSYS__LWP_WAKEUP          = 315 // { int|sys||_lwp_wakeup(lwpid_t target); }\n\tSYS__LWP_GETPRIVATE      = 316 // { void *|sys||_lwp_getprivate(void); }\n\tSYS__LWP_SETPRIVATE      = 317 // { void|sys||_lwp_setprivate(void *ptr); }\n\tSYS__LWP_KILL            = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); }\n\tSYS__LWP_DETACH          = 319 // { int|sys||_lwp_detach(lwpid_t target); }\n\tSYS__LWP_UNPARK          = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); }\n\tSYS__LWP_UNPARK_ALL      = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); }\n\tSYS__LWP_SETNAME         = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); }\n\tSYS__LWP_GETNAME         = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); }\n\tSYS__LWP_CTL             = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); }\n\tSYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); }\n\tSYS_PMC_GET_INFO         = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); }\n\tSYS_PMC_CONTROL          = 342 // { int|sys||pmc_control(int ctr, int op, void *args); }\n\tSYS_RASCTL               = 343 // { int|sys||rasctl(void *addr, size_t len, int op); }\n\tSYS_KQUEUE               = 344 // { int|sys||kqueue(void); }\n\tSYS__SCHED_SETPARAM      = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); }\n\tSYS__SCHED_GETPARAM      = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); }\n\tSYS__SCHED_SETAFFINITY   = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); }\n\tSYS__SCHED_GETAFFINITY   = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); }\n\tSYS_SCHED_YIELD          = 350 // { int|sys||sched_yield(void); }\n\tSYS_FSYNC_RANGE          = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); }\n\tSYS_UUIDGEN              = 355 // { int|sys||uuidgen(struct uuid *store, int count); }\n\tSYS_GETVFSSTAT           = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); }\n\tSYS_STATVFS1             = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); }\n\tSYS_FSTATVFS1            = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); }\n\tSYS_EXTATTRCTL           = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE     = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE     = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE  = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FD       = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD       = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD    = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_LINK     = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK     = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK  = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_LIST_FD      = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE    = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK    = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_SETXATTR             = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_LSETXATTR            = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_FSETXATTR            = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); }\n\tSYS_GETXATTR             = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_LGETXATTR            = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_FGETXATTR            = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); }\n\tSYS_LISTXATTR            = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); }\n\tSYS_LLISTXATTR           = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); }\n\tSYS_FLISTXATTR           = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); }\n\tSYS_REMOVEXATTR          = 384 // { int|sys||removexattr(const char *path, const char *name); }\n\tSYS_LREMOVEXATTR         = 385 // { int|sys||lremovexattr(const char *path, const char *name); }\n\tSYS_FREMOVEXATTR         = 386 // { int|sys||fremovexattr(int fd, const char *name); }\n\tSYS_GETDENTS             = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); }\n\tSYS_SOCKET               = 394 // { int|sys|30|socket(int domain, int type, int protocol); }\n\tSYS_GETFH                = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); }\n\tSYS_MOUNT                = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); }\n\tSYS_MREMAP               = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); }\n\tSYS_PSET_CREATE          = 412 // { int|sys||pset_create(psetid_t *psid); }\n\tSYS_PSET_DESTROY         = 413 // { int|sys||pset_destroy(psetid_t psid); }\n\tSYS_PSET_ASSIGN          = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); }\n\tSYS__PSET_BIND           = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); }\n\tSYS_POSIX_FADVISE        = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); }\n\tSYS_SELECT               = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_GETTIMEOFDAY         = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); }\n\tSYS_SETTIMEOFDAY         = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); }\n\tSYS_UTIMES               = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); }\n\tSYS_ADJTIME              = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_FUTIMES              = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); }\n\tSYS_LUTIMES              = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); }\n\tSYS_SETITIMER            = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER            = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); }\n\tSYS_CLOCK_GETTIME        = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME        = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }\n\tSYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }\n\tSYS_KEVENT               = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); }\n\tSYS_PSELECT              = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_STAT                 = 439 // { int|sys|50|stat(const char *path, struct stat *ub); }\n\tSYS_FSTAT                = 440 // { int|sys|50|fstat(int fd, struct stat *sb); }\n\tSYS_LSTAT                = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); }\n\tSYS___SEMCTL             = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); }\n\tSYS_SHMCTL               = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL               = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_GETRUSAGE            = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); }\n\tSYS_TIMER_SETTIME        = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_TIMER_GETTIME        = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); }\n\tSYS_NTP_GETTIME          = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_WAIT4                = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_MKNOD                = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_FHSTAT               = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); }\n\tSYS_PIPE2                = 453 // { int|sys||pipe2(int *fildes, int flags); }\n\tSYS_DUP3                 = 454 // { int|sys||dup3(int from, int to, int flags); }\n\tSYS_KQUEUE1              = 455 // { int|sys||kqueue1(int flags); }\n\tSYS_PACCEPT              = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); }\n\tSYS_LINKAT               = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); }\n\tSYS_RENAMEAT             = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_MKFIFOAT             = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT              = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); }\n\tSYS_MKDIRAT              = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_FACCESSAT            = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT             = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT             = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); }\n\tSYS_FEXECVE              = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); }\n\tSYS_FSTATAT              = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_UTIMENSAT            = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); }\n\tSYS_OPENAT               = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); }\n\tSYS_READLINKAT           = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); }\n\tSYS_SYMLINKAT            = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }\n\tSYS_UNLINKAT             = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }\n\tSYS_FUTIMENS             = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }\n\tSYS___QUOTACTL           = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }\n\tSYS_POSIX_SPAWN          = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }\n\tSYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }\n\tSYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go",
    "content": "// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build arm64 && netbsd\n\npackage unix\n\nconst (\n\tSYS_EXIT                 = 1   // { void|sys||exit(int rval); }\n\tSYS_FORK                 = 2   // { int|sys||fork(void); }\n\tSYS_READ                 = 3   // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                = 4   // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                 = 5   // { int|sys||open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE                = 6   // { int|sys||close(int fd); }\n\tSYS_LINK                 = 9   // { int|sys||link(const char *path, const char *link); }\n\tSYS_UNLINK               = 10  // { int|sys||unlink(const char *path); }\n\tSYS_CHDIR                = 12  // { int|sys||chdir(const char *path); }\n\tSYS_FCHDIR               = 13  // { int|sys||fchdir(int fd); }\n\tSYS_CHMOD                = 15  // { int|sys||chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN                = 16  // { int|sys||chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_BREAK                = 17  // { int|sys||obreak(char *nsize); }\n\tSYS_GETPID               = 20  // { pid_t|sys||getpid_with_ppid(void); }\n\tSYS_UNMOUNT              = 22  // { int|sys||unmount(const char *path, int flags); }\n\tSYS_SETUID               = 23  // { int|sys||setuid(uid_t uid); }\n\tSYS_GETUID               = 24  // { uid_t|sys||getuid_with_euid(void); }\n\tSYS_GETEUID              = 25  // { uid_t|sys||geteuid(void); }\n\tSYS_PTRACE               = 26  // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); }\n\tSYS_RECVMSG              = 27  // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG              = 28  // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM             = 29  // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT               = 30  // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME          = 31  // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME          = 32  // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS               = 33  // { int|sys||access(const char *path, int flags); }\n\tSYS_CHFLAGS              = 34  // { int|sys||chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS             = 35  // { int|sys||fchflags(int fd, u_long flags); }\n\tSYS_SYNC                 = 36  // { void|sys||sync(void); }\n\tSYS_KILL                 = 37  // { int|sys||kill(pid_t pid, int signum); }\n\tSYS_GETPPID              = 39  // { pid_t|sys||getppid(void); }\n\tSYS_DUP                  = 41  // { int|sys||dup(int fd); }\n\tSYS_PIPE                 = 42  // { int|sys||pipe(void); }\n\tSYS_GETEGID              = 43  // { gid_t|sys||getegid(void); }\n\tSYS_PROFIL               = 44  // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE               = 45  // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_GETGID               = 47  // { gid_t|sys||getgid_with_egid(void); }\n\tSYS___GETLOGIN           = 49  // { int|sys||__getlogin(char *namebuf, size_t namelen); }\n\tSYS___SETLOGIN           = 50  // { int|sys||__setlogin(const char *namebuf); }\n\tSYS_ACCT                 = 51  // { int|sys||acct(const char *path); }\n\tSYS_IOCTL                = 54  // { int|sys||ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REVOKE               = 56  // { int|sys||revoke(const char *path); }\n\tSYS_SYMLINK              = 57  // { int|sys||symlink(const char *path, const char *link); }\n\tSYS_READLINK             = 58  // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE               = 59  // { int|sys||execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK                = 60  // { mode_t|sys||umask(mode_t newmask); }\n\tSYS_CHROOT               = 61  // { int|sys||chroot(const char *path); }\n\tSYS_VFORK                = 66  // { int|sys||vfork(void); }\n\tSYS_SBRK                 = 69  // { int|sys||sbrk(intptr_t incr); }\n\tSYS_SSTK                 = 70  // { int|sys||sstk(int incr); }\n\tSYS_VADVISE              = 72  // { int|sys||ovadvise(int anom); }\n\tSYS_MUNMAP               = 73  // { int|sys||munmap(void *addr, size_t len); }\n\tSYS_MPROTECT             = 74  // { int|sys||mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE              = 75  // { int|sys||madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE              = 78  // { int|sys||mincore(void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS            = 79  // { int|sys||getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS            = 80  // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP              = 81  // { int|sys||getpgrp(void); }\n\tSYS_SETPGID              = 82  // { int|sys||setpgid(pid_t pid, pid_t pgid); }\n\tSYS_DUP2                 = 90  // { int|sys||dup2(int from, int to); }\n\tSYS_FCNTL                = 92  // { int|sys||fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_FSYNC                = 95  // { int|sys||fsync(int fd); }\n\tSYS_SETPRIORITY          = 96  // { int|sys||setpriority(int which, id_t who, int prio); }\n\tSYS_CONNECT              = 98  // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETPRIORITY          = 100 // { int|sys||getpriority(int which, id_t who); }\n\tSYS_BIND                 = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT           = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN               = 106 // { int|sys||listen(int s, int backlog); }\n\tSYS_GETSOCKOPT           = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_READV                = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV               = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_FCHOWN               = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD               = 124 // { int|sys||fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID             = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID             = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME               = 128 // { int|sys||rename(const char *from, const char *to); }\n\tSYS_FLOCK                = 131 // { int|sys||flock(int fd, int how); }\n\tSYS_MKFIFO               = 132 // { int|sys||mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO               = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN             = 134 // { int|sys||shutdown(int s, int how); }\n\tSYS_SOCKETPAIR           = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                = 136 // { int|sys||mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR                = 137 // { int|sys||rmdir(const char *path); }\n\tSYS_SETSID               = 147 // { int|sys||setsid(void); }\n\tSYS_SYSARCH              = 165 // { int|sys||sysarch(int op, void *parms); }\n\tSYS_PREAD                = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_PWRITE               = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_NTP_ADJTIME          = 176 // { int|sys||ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID               = 181 // { int|sys||setgid(gid_t gid); }\n\tSYS_SETEGID              = 182 // { int|sys||setegid(gid_t egid); }\n\tSYS_SETEUID              = 183 // { int|sys||seteuid(uid_t euid); }\n\tSYS_PATHCONF             = 191 // { long|sys||pathconf(const char *path, int name); }\n\tSYS_FPATHCONF            = 192 // { long|sys||fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT            = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT            = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP                 = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); }\n\tSYS_LSEEK                = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); }\n\tSYS_TRUNCATE             = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); }\n\tSYS_FTRUNCATE            = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); }\n\tSYS___SYSCTL             = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); }\n\tSYS_MLOCK                = 203 // { int|sys||mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK              = 204 // { int|sys||munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE             = 205 // { int|sys||undelete(const char *path); }\n\tSYS_GETPGID              = 207 // { pid_t|sys||getpgid(pid_t pid); }\n\tSYS_REBOOT               = 208 // { int|sys||reboot(int opt, char *bootstr); }\n\tSYS_POLL                 = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET               = 221 // { int|sys||semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_SEMCONFIG            = 223 // { int|sys||semconfig(int flag); }\n\tSYS_MSGGET               = 225 // { int|sys||msgget(key_t key, int msgflg); }\n\tSYS_MSGSND               = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV               = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                = 230 // { int|sys||shmdt(const void *shmaddr); }\n\tSYS_SHMGET               = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); }\n\tSYS_TIMER_CREATE         = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); }\n\tSYS_TIMER_DELETE         = 236 // { int|sys||timer_delete(timer_t timerid); }\n\tSYS_TIMER_GETOVERRUN     = 239 // { int|sys||timer_getoverrun(timer_t timerid); }\n\tSYS_FDATASYNC            = 241 // { int|sys||fdatasync(int fd); }\n\tSYS_MLOCKALL             = 242 // { int|sys||mlockall(int flags); }\n\tSYS_MUNLOCKALL           = 243 // { int|sys||munlockall(void); }\n\tSYS_SIGQUEUEINFO         = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); }\n\tSYS_MODCTL               = 246 // { int|sys||modctl(int cmd, void *arg); }\n\tSYS___POSIX_RENAME       = 270 // { int|sys||__posix_rename(const char *from, const char *to); }\n\tSYS_SWAPCTL              = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); }\n\tSYS_MINHERIT             = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); }\n\tSYS_LCHMOD               = 274 // { int|sys||lchmod(const char *path, mode_t mode); }\n\tSYS_LCHOWN               = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_MSYNC                = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); }\n\tSYS___POSIX_CHOWN        = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS___POSIX_FCHOWN       = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS___POSIX_LCHOWN       = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID               = 286 // { pid_t|sys||getsid(pid_t pid); }\n\tSYS___CLONE              = 287 // { pid_t|sys||__clone(int flags, void *stack); }\n\tSYS_FKTRACE              = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); }\n\tSYS_PREADV               = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS_PWRITEV              = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS___GETCWD             = 296 // { int|sys||__getcwd(char *bufp, size_t length); }\n\tSYS_FCHROOT              = 297 // { int|sys||fchroot(int fd); }\n\tSYS_LCHFLAGS             = 304 // { int|sys||lchflags(const char *path, u_long flags); }\n\tSYS_ISSETUGID            = 305 // { int|sys||issetugid(void); }\n\tSYS_UTRACE               = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); }\n\tSYS_GETCONTEXT           = 307 // { int|sys||getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT           = 308 // { int|sys||setcontext(const struct __ucontext *ucp); }\n\tSYS__LWP_CREATE          = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); }\n\tSYS__LWP_EXIT            = 310 // { int|sys||_lwp_exit(void); }\n\tSYS__LWP_SELF            = 311 // { lwpid_t|sys||_lwp_self(void); }\n\tSYS__LWP_WAIT            = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); }\n\tSYS__LWP_SUSPEND         = 313 // { int|sys||_lwp_suspend(lwpid_t target); }\n\tSYS__LWP_CONTINUE        = 314 // { int|sys||_lwp_continue(lwpid_t target); }\n\tSYS__LWP_WAKEUP          = 315 // { int|sys||_lwp_wakeup(lwpid_t target); }\n\tSYS__LWP_GETPRIVATE      = 316 // { void *|sys||_lwp_getprivate(void); }\n\tSYS__LWP_SETPRIVATE      = 317 // { void|sys||_lwp_setprivate(void *ptr); }\n\tSYS__LWP_KILL            = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); }\n\tSYS__LWP_DETACH          = 319 // { int|sys||_lwp_detach(lwpid_t target); }\n\tSYS__LWP_UNPARK          = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); }\n\tSYS__LWP_UNPARK_ALL      = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); }\n\tSYS__LWP_SETNAME         = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); }\n\tSYS__LWP_GETNAME         = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); }\n\tSYS__LWP_CTL             = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); }\n\tSYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); }\n\tSYS_PMC_GET_INFO         = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); }\n\tSYS_PMC_CONTROL          = 342 // { int|sys||pmc_control(int ctr, int op, void *args); }\n\tSYS_RASCTL               = 343 // { int|sys||rasctl(void *addr, size_t len, int op); }\n\tSYS_KQUEUE               = 344 // { int|sys||kqueue(void); }\n\tSYS__SCHED_SETPARAM      = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); }\n\tSYS__SCHED_GETPARAM      = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); }\n\tSYS__SCHED_SETAFFINITY   = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); }\n\tSYS__SCHED_GETAFFINITY   = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); }\n\tSYS_SCHED_YIELD          = 350 // { int|sys||sched_yield(void); }\n\tSYS_FSYNC_RANGE          = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); }\n\tSYS_UUIDGEN              = 355 // { int|sys||uuidgen(struct uuid *store, int count); }\n\tSYS_GETVFSSTAT           = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); }\n\tSYS_STATVFS1             = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); }\n\tSYS_FSTATVFS1            = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); }\n\tSYS_EXTATTRCTL           = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE     = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE     = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE  = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FD       = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD       = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD    = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_LINK     = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK     = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK  = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_LIST_FD      = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE    = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK    = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_SETXATTR             = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_LSETXATTR            = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_FSETXATTR            = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); }\n\tSYS_GETXATTR             = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_LGETXATTR            = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_FGETXATTR            = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); }\n\tSYS_LISTXATTR            = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); }\n\tSYS_LLISTXATTR           = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); }\n\tSYS_FLISTXATTR           = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); }\n\tSYS_REMOVEXATTR          = 384 // { int|sys||removexattr(const char *path, const char *name); }\n\tSYS_LREMOVEXATTR         = 385 // { int|sys||lremovexattr(const char *path, const char *name); }\n\tSYS_FREMOVEXATTR         = 386 // { int|sys||fremovexattr(int fd, const char *name); }\n\tSYS_GETDENTS             = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); }\n\tSYS_SOCKET               = 394 // { int|sys|30|socket(int domain, int type, int protocol); }\n\tSYS_GETFH                = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); }\n\tSYS_MOUNT                = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); }\n\tSYS_MREMAP               = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); }\n\tSYS_PSET_CREATE          = 412 // { int|sys||pset_create(psetid_t *psid); }\n\tSYS_PSET_DESTROY         = 413 // { int|sys||pset_destroy(psetid_t psid); }\n\tSYS_PSET_ASSIGN          = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); }\n\tSYS__PSET_BIND           = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); }\n\tSYS_POSIX_FADVISE        = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); }\n\tSYS_SELECT               = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_GETTIMEOFDAY         = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); }\n\tSYS_SETTIMEOFDAY         = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); }\n\tSYS_UTIMES               = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); }\n\tSYS_ADJTIME              = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_FUTIMES              = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); }\n\tSYS_LUTIMES              = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); }\n\tSYS_SETITIMER            = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER            = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); }\n\tSYS_CLOCK_GETTIME        = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME        = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }\n\tSYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }\n\tSYS_KEVENT               = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); }\n\tSYS_PSELECT              = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_STAT                 = 439 // { int|sys|50|stat(const char *path, struct stat *ub); }\n\tSYS_FSTAT                = 440 // { int|sys|50|fstat(int fd, struct stat *sb); }\n\tSYS_LSTAT                = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); }\n\tSYS___SEMCTL             = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); }\n\tSYS_SHMCTL               = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL               = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_GETRUSAGE            = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); }\n\tSYS_TIMER_SETTIME        = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_TIMER_GETTIME        = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); }\n\tSYS_NTP_GETTIME          = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_WAIT4                = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_MKNOD                = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_FHSTAT               = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); }\n\tSYS_PIPE2                = 453 // { int|sys||pipe2(int *fildes, int flags); }\n\tSYS_DUP3                 = 454 // { int|sys||dup3(int from, int to, int flags); }\n\tSYS_KQUEUE1              = 455 // { int|sys||kqueue1(int flags); }\n\tSYS_PACCEPT              = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); }\n\tSYS_LINKAT               = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); }\n\tSYS_RENAMEAT             = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_MKFIFOAT             = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT              = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); }\n\tSYS_MKDIRAT              = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_FACCESSAT            = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT             = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT             = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); }\n\tSYS_FEXECVE              = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); }\n\tSYS_FSTATAT              = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_UTIMENSAT            = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); }\n\tSYS_OPENAT               = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); }\n\tSYS_READLINKAT           = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); }\n\tSYS_SYMLINKAT            = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }\n\tSYS_UNLINKAT             = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }\n\tSYS_FUTIMENS             = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }\n\tSYS___QUOTACTL           = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }\n\tSYS_POSIX_SPAWN          = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }\n\tSYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }\n\tSYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go",
    "content": "// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && openbsd\n\npackage unix\n\n// Deprecated: Use libc wrappers instead of direct syscalls.\nconst (\n\tSYS_EXIT           = 1   // { void sys_exit(int rval); }\n\tSYS_FORK           = 2   // { int sys_fork(void); }\n\tSYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE          = 6   // { int sys_close(int fd); }\n\tSYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }\n\tSYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }\n\tSYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }\n\tSYS_UNLINK         = 10  // { int sys_unlink(const char *path); }\n\tSYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_CHDIR          = 12  // { int sys_chdir(const char *path); }\n\tSYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }\n\tSYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break\n\tSYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }\n\tSYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }\n\tSYS_GETPID         = 20  // { pid_t sys_getpid(void); }\n\tSYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }\n\tSYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }\n\tSYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }\n\tSYS_GETUID         = 24  // { uid_t sys_getuid(void); }\n\tSYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }\n\tSYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }\n\tSYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }\n\tSYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }\n\tSYS_SYNC           = 36  // { void sys_sync(void); }\n\tSYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }\n\tSYS_GETPPID        = 39  // { pid_t sys_getppid(void); }\n\tSYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }\n\tSYS_DUP            = 41  // { int sys_dup(int fd); }\n\tSYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_GETEGID        = 43  // { gid_t sys_getegid(void); }\n\tSYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }\n\tSYS_GETGID         = 47  // { gid_t sys_getgid(void); }\n\tSYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }\n\tSYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }\n\tSYS_ACCT           = 51  // { int sys_acct(const char *path); }\n\tSYS_SIGPENDING     = 52  // { int sys_sigpending(void); }\n\tSYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }\n\tSYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REBOOT         = 55  // { int sys_reboot(int opt); }\n\tSYS_REVOKE         = 56  // { int sys_revoke(const char *path); }\n\tSYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }\n\tSYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }\n\tSYS_CHROOT         = 61  // { int sys_chroot(const char *path); }\n\tSYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }\n\tSYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }\n\tSYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }\n\tSYS_VFORK          = 66  // { int sys_vfork(void); }\n\tSYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }\n\tSYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }\n\tSYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }\n\tSYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }\n\tSYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }\n\tSYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }\n\tSYS_MINCORE        = 78  // { int sys_mincore(void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP        = 81  // { int sys_getpgrp(void); }\n\tSYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }\n\tSYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }\n\tSYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }\n\tSYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }\n\tSYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }\n\tSYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_DUP2           = 90  // { int sys_dup2(int from, int to); }\n\tSYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }\n\tSYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }\n\tSYS_FSYNC          = 95  // { int sys_fsync(int fd); }\n\tSYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }\n\tSYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }\n\tSYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }\n\tSYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }\n\tSYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }\n\tSYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }\n\tSYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }\n\tSYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }\n\tSYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }\n\tSYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }\n\tSYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }\n\tSYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }\n\tSYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }\n\tSYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }\n\tSYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_KILL           = 122 // { int sys_kill(int pid, int signum); }\n\tSYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }\n\tSYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }\n\tSYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }\n\tSYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }\n\tSYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }\n\tSYS_SETSID         = 147 // { int sys_setsid(void); }\n\tSYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }\n\tSYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }\n\tSYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }\n\tSYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }\n\tSYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }\n\tSYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }\n\tSYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }\n\tSYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }\n\tSYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }\n\tSYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }\n\tSYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }\n\tSYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }\n\tSYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }\n\tSYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }\n\tSYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }\n\tSYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }\n\tSYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }\n\tSYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }\n\tSYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }\n\tSYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID      = 253 // { int sys_issetugid(void); }\n\tSYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }\n\tSYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }\n\tSYS_PIPE           = 263 // { int sys_pipe(int *fdp); }\n\tSYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }\n\tSYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_KQUEUE         = 269 // { int sys_kqueue(void); }\n\tSYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }\n\tSYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }\n\tSYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }\n\tSYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }\n\tSYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }\n\tSYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }\n\tSYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }\n\tSYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }\n\tSYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }\n\tSYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }\n\tSYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }\n\tSYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }\n\tSYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }\n\tSYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }\n\tSYS_GETRTABLE      = 311 // { int sys_getrtable(void); }\n\tSYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }\n\tSYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }\n\tSYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }\n\tSYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }\n\tSYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }\n\tSYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }\n\tSYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }\n\tSYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go",
    "content": "// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && openbsd\n\npackage unix\n\n// Deprecated: Use libc wrappers instead of direct syscalls.\nconst (\n\tSYS_EXIT           = 1   // { void sys_exit(int rval); }\n\tSYS_FORK           = 2   // { int sys_fork(void); }\n\tSYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE          = 6   // { int sys_close(int fd); }\n\tSYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }\n\tSYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }\n\tSYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }\n\tSYS_UNLINK         = 10  // { int sys_unlink(const char *path); }\n\tSYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_CHDIR          = 12  // { int sys_chdir(const char *path); }\n\tSYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }\n\tSYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break\n\tSYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }\n\tSYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }\n\tSYS_GETPID         = 20  // { pid_t sys_getpid(void); }\n\tSYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }\n\tSYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }\n\tSYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }\n\tSYS_GETUID         = 24  // { uid_t sys_getuid(void); }\n\tSYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }\n\tSYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }\n\tSYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }\n\tSYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }\n\tSYS_SYNC           = 36  // { void sys_sync(void); }\n\tSYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }\n\tSYS_GETPPID        = 39  // { pid_t sys_getppid(void); }\n\tSYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }\n\tSYS_DUP            = 41  // { int sys_dup(int fd); }\n\tSYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_GETEGID        = 43  // { gid_t sys_getegid(void); }\n\tSYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }\n\tSYS_GETGID         = 47  // { gid_t sys_getgid(void); }\n\tSYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }\n\tSYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }\n\tSYS_ACCT           = 51  // { int sys_acct(const char *path); }\n\tSYS_SIGPENDING     = 52  // { int sys_sigpending(void); }\n\tSYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }\n\tSYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REBOOT         = 55  // { int sys_reboot(int opt); }\n\tSYS_REVOKE         = 56  // { int sys_revoke(const char *path); }\n\tSYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }\n\tSYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }\n\tSYS_CHROOT         = 61  // { int sys_chroot(const char *path); }\n\tSYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }\n\tSYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }\n\tSYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }\n\tSYS_VFORK          = 66  // { int sys_vfork(void); }\n\tSYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }\n\tSYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }\n\tSYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }\n\tSYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }\n\tSYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }\n\tSYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }\n\tSYS_MINCORE        = 78  // { int sys_mincore(void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP        = 81  // { int sys_getpgrp(void); }\n\tSYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }\n\tSYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }\n\tSYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }\n\tSYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }\n\tSYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }\n\tSYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_DUP2           = 90  // { int sys_dup2(int from, int to); }\n\tSYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }\n\tSYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }\n\tSYS_FSYNC          = 95  // { int sys_fsync(int fd); }\n\tSYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }\n\tSYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }\n\tSYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }\n\tSYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }\n\tSYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }\n\tSYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }\n\tSYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }\n\tSYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }\n\tSYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }\n\tSYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }\n\tSYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }\n\tSYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }\n\tSYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }\n\tSYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }\n\tSYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_KILL           = 122 // { int sys_kill(int pid, int signum); }\n\tSYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }\n\tSYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }\n\tSYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }\n\tSYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }\n\tSYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }\n\tSYS_SETSID         = 147 // { int sys_setsid(void); }\n\tSYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }\n\tSYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }\n\tSYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }\n\tSYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }\n\tSYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }\n\tSYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }\n\tSYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }\n\tSYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }\n\tSYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }\n\tSYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }\n\tSYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }\n\tSYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }\n\tSYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }\n\tSYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }\n\tSYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }\n\tSYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }\n\tSYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }\n\tSYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }\n\tSYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }\n\tSYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID      = 253 // { int sys_issetugid(void); }\n\tSYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }\n\tSYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }\n\tSYS_PIPE           = 263 // { int sys_pipe(int *fdp); }\n\tSYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }\n\tSYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_KQUEUE         = 269 // { int sys_kqueue(void); }\n\tSYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }\n\tSYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }\n\tSYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }\n\tSYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }\n\tSYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }\n\tSYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }\n\tSYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }\n\tSYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }\n\tSYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }\n\tSYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }\n\tSYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }\n\tSYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }\n\tSYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }\n\tSYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }\n\tSYS_GETRTABLE      = 311 // { int sys_getrtable(void); }\n\tSYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }\n\tSYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }\n\tSYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }\n\tSYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }\n\tSYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }\n\tSYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }\n\tSYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }\n\tSYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go",
    "content": "// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && openbsd\n\npackage unix\n\n// Deprecated: Use libc wrappers instead of direct syscalls.\nconst (\n\tSYS_EXIT           = 1   // { void sys_exit(int rval); }\n\tSYS_FORK           = 2   // { int sys_fork(void); }\n\tSYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE          = 6   // { int sys_close(int fd); }\n\tSYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }\n\tSYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }\n\tSYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }\n\tSYS_UNLINK         = 10  // { int sys_unlink(const char *path); }\n\tSYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_CHDIR          = 12  // { int sys_chdir(const char *path); }\n\tSYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }\n\tSYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break\n\tSYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }\n\tSYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }\n\tSYS_GETPID         = 20  // { pid_t sys_getpid(void); }\n\tSYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }\n\tSYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }\n\tSYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }\n\tSYS_GETUID         = 24  // { uid_t sys_getuid(void); }\n\tSYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }\n\tSYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }\n\tSYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }\n\tSYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }\n\tSYS_SYNC           = 36  // { void sys_sync(void); }\n\tSYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }\n\tSYS_GETPPID        = 39  // { pid_t sys_getppid(void); }\n\tSYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }\n\tSYS_DUP            = 41  // { int sys_dup(int fd); }\n\tSYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_GETEGID        = 43  // { gid_t sys_getegid(void); }\n\tSYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }\n\tSYS_GETGID         = 47  // { gid_t sys_getgid(void); }\n\tSYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }\n\tSYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }\n\tSYS_ACCT           = 51  // { int sys_acct(const char *path); }\n\tSYS_SIGPENDING     = 52  // { int sys_sigpending(void); }\n\tSYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }\n\tSYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REBOOT         = 55  // { int sys_reboot(int opt); }\n\tSYS_REVOKE         = 56  // { int sys_revoke(const char *path); }\n\tSYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }\n\tSYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }\n\tSYS_CHROOT         = 61  // { int sys_chroot(const char *path); }\n\tSYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }\n\tSYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }\n\tSYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }\n\tSYS_VFORK          = 66  // { int sys_vfork(void); }\n\tSYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }\n\tSYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }\n\tSYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }\n\tSYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }\n\tSYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }\n\tSYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }\n\tSYS_MINCORE        = 78  // { int sys_mincore(void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP        = 81  // { int sys_getpgrp(void); }\n\tSYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }\n\tSYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }\n\tSYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }\n\tSYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }\n\tSYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }\n\tSYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_DUP2           = 90  // { int sys_dup2(int from, int to); }\n\tSYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }\n\tSYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }\n\tSYS_FSYNC          = 95  // { int sys_fsync(int fd); }\n\tSYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }\n\tSYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }\n\tSYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }\n\tSYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }\n\tSYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }\n\tSYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }\n\tSYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }\n\tSYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }\n\tSYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }\n\tSYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }\n\tSYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }\n\tSYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }\n\tSYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }\n\tSYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }\n\tSYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_KILL           = 122 // { int sys_kill(int pid, int signum); }\n\tSYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }\n\tSYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }\n\tSYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }\n\tSYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }\n\tSYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }\n\tSYS_SETSID         = 147 // { int sys_setsid(void); }\n\tSYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }\n\tSYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }\n\tSYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }\n\tSYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }\n\tSYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }\n\tSYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }\n\tSYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }\n\tSYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }\n\tSYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }\n\tSYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }\n\tSYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }\n\tSYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }\n\tSYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }\n\tSYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }\n\tSYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }\n\tSYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }\n\tSYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }\n\tSYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }\n\tSYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }\n\tSYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID      = 253 // { int sys_issetugid(void); }\n\tSYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }\n\tSYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }\n\tSYS_PIPE           = 263 // { int sys_pipe(int *fdp); }\n\tSYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }\n\tSYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_KQUEUE         = 269 // { int sys_kqueue(void); }\n\tSYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }\n\tSYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }\n\tSYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }\n\tSYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }\n\tSYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }\n\tSYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }\n\tSYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }\n\tSYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }\n\tSYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }\n\tSYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }\n\tSYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }\n\tSYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }\n\tSYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }\n\tSYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }\n\tSYS_GETRTABLE      = 311 // { int sys_getrtable(void); }\n\tSYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }\n\tSYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }\n\tSYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }\n\tSYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }\n\tSYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }\n\tSYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }\n\tSYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }\n\tSYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go",
    "content": "// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && openbsd\n\npackage unix\n\n// Deprecated: Use libc wrappers instead of direct syscalls.\nconst (\n\tSYS_EXIT           = 1   // { void sys_exit(int rval); }\n\tSYS_FORK           = 2   // { int sys_fork(void); }\n\tSYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE          = 6   // { int sys_close(int fd); }\n\tSYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }\n\tSYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }\n\tSYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }\n\tSYS_UNLINK         = 10  // { int sys_unlink(const char *path); }\n\tSYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_CHDIR          = 12  // { int sys_chdir(const char *path); }\n\tSYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }\n\tSYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break\n\tSYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }\n\tSYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }\n\tSYS_GETPID         = 20  // { pid_t sys_getpid(void); }\n\tSYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }\n\tSYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }\n\tSYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }\n\tSYS_GETUID         = 24  // { uid_t sys_getuid(void); }\n\tSYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }\n\tSYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }\n\tSYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }\n\tSYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }\n\tSYS_SYNC           = 36  // { void sys_sync(void); }\n\tSYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }\n\tSYS_GETPPID        = 39  // { pid_t sys_getppid(void); }\n\tSYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }\n\tSYS_DUP            = 41  // { int sys_dup(int fd); }\n\tSYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_GETEGID        = 43  // { gid_t sys_getegid(void); }\n\tSYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }\n\tSYS_GETGID         = 47  // { gid_t sys_getgid(void); }\n\tSYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }\n\tSYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }\n\tSYS_ACCT           = 51  // { int sys_acct(const char *path); }\n\tSYS_SIGPENDING     = 52  // { int sys_sigpending(void); }\n\tSYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }\n\tSYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REBOOT         = 55  // { int sys_reboot(int opt); }\n\tSYS_REVOKE         = 56  // { int sys_revoke(const char *path); }\n\tSYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }\n\tSYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }\n\tSYS_CHROOT         = 61  // { int sys_chroot(const char *path); }\n\tSYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }\n\tSYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }\n\tSYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }\n\tSYS_VFORK          = 66  // { int sys_vfork(void); }\n\tSYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }\n\tSYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }\n\tSYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }\n\tSYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }\n\tSYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }\n\tSYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }\n\tSYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP        = 81  // { int sys_getpgrp(void); }\n\tSYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }\n\tSYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }\n\tSYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }\n\tSYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }\n\tSYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }\n\tSYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_DUP2           = 90  // { int sys_dup2(int from, int to); }\n\tSYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }\n\tSYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }\n\tSYS_FSYNC          = 95  // { int sys_fsync(int fd); }\n\tSYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }\n\tSYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }\n\tSYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }\n\tSYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }\n\tSYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }\n\tSYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }\n\tSYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }\n\tSYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }\n\tSYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }\n\tSYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }\n\tSYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }\n\tSYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }\n\tSYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }\n\tSYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }\n\tSYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_KILL           = 122 // { int sys_kill(int pid, int signum); }\n\tSYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }\n\tSYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }\n\tSYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }\n\tSYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }\n\tSYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }\n\tSYS_SETSID         = 147 // { int sys_setsid(void); }\n\tSYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }\n\tSYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }\n\tSYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }\n\tSYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }\n\tSYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }\n\tSYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }\n\tSYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }\n\tSYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }\n\tSYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }\n\tSYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }\n\tSYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }\n\tSYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }\n\tSYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }\n\tSYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }\n\tSYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }\n\tSYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }\n\tSYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }\n\tSYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }\n\tSYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }\n\tSYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID      = 253 // { int sys_issetugid(void); }\n\tSYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }\n\tSYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }\n\tSYS_PIPE           = 263 // { int sys_pipe(int *fdp); }\n\tSYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }\n\tSYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_KQUEUE         = 269 // { int sys_kqueue(void); }\n\tSYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }\n\tSYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }\n\tSYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }\n\tSYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }\n\tSYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }\n\tSYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }\n\tSYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }\n\tSYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }\n\tSYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }\n\tSYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }\n\tSYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }\n\tSYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }\n\tSYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }\n\tSYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }\n\tSYS_GETRTABLE      = 311 // { int sys_getrtable(void); }\n\tSYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }\n\tSYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }\n\tSYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }\n\tSYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }\n\tSYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }\n\tSYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }\n\tSYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }\n\tSYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go",
    "content": "// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips64 && openbsd\n\npackage unix\n\n// Deprecated: Use libc wrappers instead of direct syscalls.\nconst (\n\tSYS_EXIT           = 1   // { void sys_exit(int rval); }\n\tSYS_FORK           = 2   // { int sys_fork(void); }\n\tSYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE          = 6   // { int sys_close(int fd); }\n\tSYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }\n\tSYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }\n\tSYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }\n\tSYS_UNLINK         = 10  // { int sys_unlink(const char *path); }\n\tSYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_CHDIR          = 12  // { int sys_chdir(const char *path); }\n\tSYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }\n\tSYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break\n\tSYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }\n\tSYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }\n\tSYS_GETPID         = 20  // { pid_t sys_getpid(void); }\n\tSYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }\n\tSYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }\n\tSYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }\n\tSYS_GETUID         = 24  // { uid_t sys_getuid(void); }\n\tSYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }\n\tSYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }\n\tSYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }\n\tSYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }\n\tSYS_SYNC           = 36  // { void sys_sync(void); }\n\tSYS_MSYSCALL       = 37  // { int sys_msyscall(void *addr, size_t len); }\n\tSYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }\n\tSYS_GETPPID        = 39  // { pid_t sys_getppid(void); }\n\tSYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }\n\tSYS_DUP            = 41  // { int sys_dup(int fd); }\n\tSYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_GETEGID        = 43  // { gid_t sys_getegid(void); }\n\tSYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }\n\tSYS_GETGID         = 47  // { gid_t sys_getgid(void); }\n\tSYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }\n\tSYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }\n\tSYS_ACCT           = 51  // { int sys_acct(const char *path); }\n\tSYS_SIGPENDING     = 52  // { int sys_sigpending(void); }\n\tSYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }\n\tSYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REBOOT         = 55  // { int sys_reboot(int opt); }\n\tSYS_REVOKE         = 56  // { int sys_revoke(const char *path); }\n\tSYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }\n\tSYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }\n\tSYS_CHROOT         = 61  // { int sys_chroot(const char *path); }\n\tSYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }\n\tSYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }\n\tSYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }\n\tSYS_VFORK          = 66  // { int sys_vfork(void); }\n\tSYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }\n\tSYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }\n\tSYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }\n\tSYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }\n\tSYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }\n\tSYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }\n\tSYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP        = 81  // { int sys_getpgrp(void); }\n\tSYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }\n\tSYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }\n\tSYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }\n\tSYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }\n\tSYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }\n\tSYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_DUP2           = 90  // { int sys_dup2(int from, int to); }\n\tSYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }\n\tSYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }\n\tSYS_FSYNC          = 95  // { int sys_fsync(int fd); }\n\tSYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }\n\tSYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }\n\tSYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }\n\tSYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }\n\tSYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }\n\tSYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }\n\tSYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }\n\tSYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }\n\tSYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }\n\tSYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }\n\tSYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }\n\tSYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }\n\tSYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }\n\tSYS___REALPATH     = 115 // { int sys___realpath(const char *pathname, char *resolved); }\n\tSYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }\n\tSYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_KILL           = 122 // { int sys_kill(int pid, int signum); }\n\tSYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }\n\tSYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }\n\tSYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }\n\tSYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }\n\tSYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }\n\tSYS_SETSID         = 147 // { int sys_setsid(void); }\n\tSYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }\n\tSYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }\n\tSYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }\n\tSYS___TMPFD        = 164 // { int sys___tmpfd(int flags); }\n\tSYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }\n\tSYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }\n\tSYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }\n\tSYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }\n\tSYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }\n\tSYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }\n\tSYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }\n\tSYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }\n\tSYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }\n\tSYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }\n\tSYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }\n\tSYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }\n\tSYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }\n\tSYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }\n\tSYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }\n\tSYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }\n\tSYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID      = 253 // { int sys_issetugid(void); }\n\tSYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }\n\tSYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }\n\tSYS_PIPE           = 263 // { int sys_pipe(int *fdp); }\n\tSYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }\n\tSYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_KQUEUE         = 269 // { int sys_kqueue(void); }\n\tSYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }\n\tSYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }\n\tSYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }\n\tSYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }\n\tSYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }\n\tSYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }\n\tSYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }\n\tSYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }\n\tSYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }\n\tSYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }\n\tSYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }\n\tSYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }\n\tSYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }\n\tSYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }\n\tSYS_GETRTABLE      = 311 // { int sys_getrtable(void); }\n\tSYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }\n\tSYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }\n\tSYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }\n\tSYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }\n\tSYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }\n\tSYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }\n\tSYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }\n\tSYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_openbsd_ppc64.go",
    "content": "// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64 && openbsd\n\npackage unix\n\nconst (\n\tSYS_EXIT           = 1   // { void sys_exit(int rval); }\n\tSYS_FORK           = 2   // { int sys_fork(void); }\n\tSYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE          = 6   // { int sys_close(int fd); }\n\tSYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }\n\tSYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }\n\tSYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }\n\tSYS_UNLINK         = 10  // { int sys_unlink(const char *path); }\n\tSYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_CHDIR          = 12  // { int sys_chdir(const char *path); }\n\tSYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }\n\tSYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break\n\tSYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }\n\tSYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }\n\tSYS_GETPID         = 20  // { pid_t sys_getpid(void); }\n\tSYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }\n\tSYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }\n\tSYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }\n\tSYS_GETUID         = 24  // { uid_t sys_getuid(void); }\n\tSYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }\n\tSYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }\n\tSYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }\n\tSYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }\n\tSYS_SYNC           = 36  // { void sys_sync(void); }\n\tSYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }\n\tSYS_GETPPID        = 39  // { pid_t sys_getppid(void); }\n\tSYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }\n\tSYS_DUP            = 41  // { int sys_dup(int fd); }\n\tSYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_GETEGID        = 43  // { gid_t sys_getegid(void); }\n\tSYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }\n\tSYS_GETGID         = 47  // { gid_t sys_getgid(void); }\n\tSYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }\n\tSYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }\n\tSYS_ACCT           = 51  // { int sys_acct(const char *path); }\n\tSYS_SIGPENDING     = 52  // { int sys_sigpending(void); }\n\tSYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }\n\tSYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REBOOT         = 55  // { int sys_reboot(int opt); }\n\tSYS_REVOKE         = 56  // { int sys_revoke(const char *path); }\n\tSYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }\n\tSYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }\n\tSYS_CHROOT         = 61  // { int sys_chroot(const char *path); }\n\tSYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }\n\tSYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }\n\tSYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }\n\tSYS_VFORK          = 66  // { int sys_vfork(void); }\n\tSYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }\n\tSYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }\n\tSYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }\n\tSYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }\n\tSYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }\n\tSYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }\n\tSYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP        = 81  // { int sys_getpgrp(void); }\n\tSYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }\n\tSYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }\n\tSYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }\n\tSYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }\n\tSYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }\n\tSYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_DUP2           = 90  // { int sys_dup2(int from, int to); }\n\tSYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }\n\tSYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }\n\tSYS_FSYNC          = 95  // { int sys_fsync(int fd); }\n\tSYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }\n\tSYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }\n\tSYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }\n\tSYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }\n\tSYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }\n\tSYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }\n\tSYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }\n\tSYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }\n\tSYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }\n\tSYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }\n\tSYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }\n\tSYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }\n\tSYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }\n\tSYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }\n\tSYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_KILL           = 122 // { int sys_kill(int pid, int signum); }\n\tSYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }\n\tSYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }\n\tSYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }\n\tSYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }\n\tSYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }\n\tSYS_SETSID         = 147 // { int sys_setsid(void); }\n\tSYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }\n\tSYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }\n\tSYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }\n\tSYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }\n\tSYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }\n\tSYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }\n\tSYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }\n\tSYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }\n\tSYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }\n\tSYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }\n\tSYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }\n\tSYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }\n\tSYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }\n\tSYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }\n\tSYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }\n\tSYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }\n\tSYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }\n\tSYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }\n\tSYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }\n\tSYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID      = 253 // { int sys_issetugid(void); }\n\tSYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }\n\tSYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }\n\tSYS_PIPE           = 263 // { int sys_pipe(int *fdp); }\n\tSYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }\n\tSYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_KQUEUE         = 269 // { int sys_kqueue(void); }\n\tSYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }\n\tSYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }\n\tSYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }\n\tSYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }\n\tSYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }\n\tSYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }\n\tSYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }\n\tSYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }\n\tSYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }\n\tSYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }\n\tSYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }\n\tSYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }\n\tSYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }\n\tSYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }\n\tSYS_GETRTABLE      = 311 // { int sys_getrtable(void); }\n\tSYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }\n\tSYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }\n\tSYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }\n\tSYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }\n\tSYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }\n\tSYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }\n\tSYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }\n\tSYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_openbsd_riscv64.go",
    "content": "// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build riscv64 && openbsd\n\npackage unix\n\n// Deprecated: Use libc wrappers instead of direct syscalls.\nconst (\n\tSYS_EXIT           = 1   // { void sys_exit(int rval); }\n\tSYS_FORK           = 2   // { int sys_fork(void); }\n\tSYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE          = 6   // { int sys_close(int fd); }\n\tSYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }\n\tSYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }\n\tSYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }\n\tSYS_UNLINK         = 10  // { int sys_unlink(const char *path); }\n\tSYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_CHDIR          = 12  // { int sys_chdir(const char *path); }\n\tSYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }\n\tSYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break\n\tSYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }\n\tSYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }\n\tSYS_GETPID         = 20  // { pid_t sys_getpid(void); }\n\tSYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }\n\tSYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }\n\tSYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }\n\tSYS_GETUID         = 24  // { uid_t sys_getuid(void); }\n\tSYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }\n\tSYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }\n\tSYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }\n\tSYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }\n\tSYS_SYNC           = 36  // { void sys_sync(void); }\n\tSYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }\n\tSYS_GETPPID        = 39  // { pid_t sys_getppid(void); }\n\tSYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }\n\tSYS_DUP            = 41  // { int sys_dup(int fd); }\n\tSYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_GETEGID        = 43  // { gid_t sys_getegid(void); }\n\tSYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }\n\tSYS_GETGID         = 47  // { gid_t sys_getgid(void); }\n\tSYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }\n\tSYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }\n\tSYS_ACCT           = 51  // { int sys_acct(const char *path); }\n\tSYS_SIGPENDING     = 52  // { int sys_sigpending(void); }\n\tSYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }\n\tSYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REBOOT         = 55  // { int sys_reboot(int opt); }\n\tSYS_REVOKE         = 56  // { int sys_revoke(const char *path); }\n\tSYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }\n\tSYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }\n\tSYS_CHROOT         = 61  // { int sys_chroot(const char *path); }\n\tSYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }\n\tSYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }\n\tSYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }\n\tSYS_VFORK          = 66  // { int sys_vfork(void); }\n\tSYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }\n\tSYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }\n\tSYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }\n\tSYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }\n\tSYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }\n\tSYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }\n\tSYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP        = 81  // { int sys_getpgrp(void); }\n\tSYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }\n\tSYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }\n\tSYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }\n\tSYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }\n\tSYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }\n\tSYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_DUP2           = 90  // { int sys_dup2(int from, int to); }\n\tSYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }\n\tSYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }\n\tSYS_FSYNC          = 95  // { int sys_fsync(int fd); }\n\tSYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }\n\tSYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }\n\tSYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }\n\tSYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }\n\tSYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }\n\tSYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }\n\tSYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }\n\tSYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }\n\tSYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }\n\tSYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }\n\tSYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }\n\tSYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }\n\tSYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }\n\tSYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }\n\tSYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_KILL           = 122 // { int sys_kill(int pid, int signum); }\n\tSYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }\n\tSYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }\n\tSYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }\n\tSYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }\n\tSYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }\n\tSYS_SETSID         = 147 // { int sys_setsid(void); }\n\tSYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }\n\tSYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }\n\tSYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }\n\tSYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }\n\tSYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }\n\tSYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }\n\tSYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }\n\tSYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }\n\tSYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }\n\tSYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }\n\tSYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }\n\tSYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }\n\tSYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }\n\tSYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }\n\tSYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }\n\tSYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }\n\tSYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }\n\tSYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }\n\tSYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }\n\tSYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID      = 253 // { int sys_issetugid(void); }\n\tSYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }\n\tSYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }\n\tSYS_PIPE           = 263 // { int sys_pipe(int *fdp); }\n\tSYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }\n\tSYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_KQUEUE         = 269 // { int sys_kqueue(void); }\n\tSYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }\n\tSYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }\n\tSYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }\n\tSYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }\n\tSYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }\n\tSYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }\n\tSYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }\n\tSYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }\n\tSYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }\n\tSYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }\n\tSYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }\n\tSYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }\n\tSYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }\n\tSYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }\n\tSYS_GETRTABLE      = 311 // { int sys_getrtable(void); }\n\tSYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }\n\tSYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }\n\tSYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }\n\tSYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }\n\tSYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }\n\tSYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }\n\tSYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }\n\tSYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_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\nconst (\n\tSYS_LOG                             = 0x17  // 23\n\tSYS_COSH                            = 0x18  // 24\n\tSYS_TANH                            = 0x19  // 25\n\tSYS_EXP                             = 0x1A  // 26\n\tSYS_MODF                            = 0x1B  // 27\n\tSYS_LOG10                           = 0x1C  // 28\n\tSYS_FREXP                           = 0x1D  // 29\n\tSYS_LDEXP                           = 0x1E  // 30\n\tSYS_CEIL                            = 0x1F  // 31\n\tSYS_POW                             = 0x20  // 32\n\tSYS_SQRT                            = 0x21  // 33\n\tSYS_FLOOR                           = 0x22  // 34\n\tSYS_J1                              = 0x23  // 35\n\tSYS_FABS                            = 0x24  // 36\n\tSYS_FMOD                            = 0x25  // 37\n\tSYS_J0                              = 0x26  // 38\n\tSYS_YN                              = 0x27  // 39\n\tSYS_JN                              = 0x28  // 40\n\tSYS_Y0                              = 0x29  // 41\n\tSYS_Y1                              = 0x2A  // 42\n\tSYS_HYPOT                           = 0x2B  // 43\n\tSYS_ERF                             = 0x2C  // 44\n\tSYS_ERFC                            = 0x2D  // 45\n\tSYS_GAMMA                           = 0x2E  // 46\n\tSYS_ISALPHA                         = 0x30  // 48\n\tSYS_ISALNUM                         = 0x31  // 49\n\tSYS_ISLOWER                         = 0x32  // 50\n\tSYS_ISCNTRL                         = 0x33  // 51\n\tSYS_ISDIGIT                         = 0x34  // 52\n\tSYS_ISGRAPH                         = 0x35  // 53\n\tSYS_ISUPPER                         = 0x36  // 54\n\tSYS_ISPRINT                         = 0x37  // 55\n\tSYS_ISPUNCT                         = 0x38  // 56\n\tSYS_ISSPACE                         = 0x39  // 57\n\tSYS_SETLOCAL                        = 0x3A  // 58\n\tSYS_SETLOCALE                       = 0x3A  // 58\n\tSYS_ISXDIGIT                        = 0x3B  // 59\n\tSYS_TOLOWER                         = 0x3C  // 60\n\tSYS_TOUPPER                         = 0x3D  // 61\n\tSYS_ASIN                            = 0x3E  // 62\n\tSYS_SIN                             = 0x3F  // 63\n\tSYS_COS                             = 0x40  // 64\n\tSYS_TAN                             = 0x41  // 65\n\tSYS_SINH                            = 0x42  // 66\n\tSYS_ACOS                            = 0x43  // 67\n\tSYS_ATAN                            = 0x44  // 68\n\tSYS_ATAN2                           = 0x45  // 69\n\tSYS_FTELL                           = 0x46  // 70\n\tSYS_FGETPOS                         = 0x47  // 71\n\tSYS_FSEEK                           = 0x48  // 72\n\tSYS_FSETPOS                         = 0x49  // 73\n\tSYS_FERROR                          = 0x4A  // 74\n\tSYS_REWIND                          = 0x4B  // 75\n\tSYS_CLEARERR                        = 0x4C  // 76\n\tSYS_FEOF                            = 0x4D  // 77\n\tSYS_ATOL                            = 0x4E  // 78\n\tSYS_PERROR                          = 0x4F  // 79\n\tSYS_ATOF                            = 0x50  // 80\n\tSYS_ATOI                            = 0x51  // 81\n\tSYS_RAND                            = 0x52  // 82\n\tSYS_STRTOD                          = 0x53  // 83\n\tSYS_STRTOL                          = 0x54  // 84\n\tSYS_STRTOUL                         = 0x55  // 85\n\tSYS_MALLOC                          = 0x56  // 86\n\tSYS_SRAND                           = 0x57  // 87\n\tSYS_CALLOC                          = 0x58  // 88\n\tSYS_FREE                            = 0x59  // 89\n\tSYS_EXIT                            = 0x5A  // 90\n\tSYS_REALLOC                         = 0x5B  // 91\n\tSYS_ABORT                           = 0x5C  // 92\n\tSYS___ABORT                         = 0x5C  // 92\n\tSYS_ATEXIT                          = 0x5D  // 93\n\tSYS_RAISE                           = 0x5E  // 94\n\tSYS_SETJMP                          = 0x5F  // 95\n\tSYS_LONGJMP                         = 0x60  // 96\n\tSYS_SIGNAL                          = 0x61  // 97\n\tSYS_TMPNAM                          = 0x62  // 98\n\tSYS_REMOVE                          = 0x63  // 99\n\tSYS_RENAME                          = 0x64  // 100\n\tSYS_TMPFILE                         = 0x65  // 101\n\tSYS_FREOPEN                         = 0x66  // 102\n\tSYS_FCLOSE                          = 0x67  // 103\n\tSYS_FFLUSH                          = 0x68  // 104\n\tSYS_FOPEN                           = 0x69  // 105\n\tSYS_FSCANF                          = 0x6A  // 106\n\tSYS_SETBUF                          = 0x6B  // 107\n\tSYS_SETVBUF                         = 0x6C  // 108\n\tSYS_FPRINTF                         = 0x6D  // 109\n\tSYS_SSCANF                          = 0x6E  // 110\n\tSYS_PRINTF                          = 0x6F  // 111\n\tSYS_SCANF                           = 0x70  // 112\n\tSYS_SPRINTF                         = 0x71  // 113\n\tSYS_FGETC                           = 0x72  // 114\n\tSYS_VFPRINTF                        = 0x73  // 115\n\tSYS_VPRINTF                         = 0x74  // 116\n\tSYS_VSPRINTF                        = 0x75  // 117\n\tSYS_GETC                            = 0x76  // 118\n\tSYS_FGETS                           = 0x77  // 119\n\tSYS_FPUTC                           = 0x78  // 120\n\tSYS_FPUTS                           = 0x79  // 121\n\tSYS_PUTCHAR                         = 0x7A  // 122\n\tSYS_GETCHAR                         = 0x7B  // 123\n\tSYS_GETS                            = 0x7C  // 124\n\tSYS_PUTC                            = 0x7D  // 125\n\tSYS_FWRITE                          = 0x7E  // 126\n\tSYS_PUTS                            = 0x7F  // 127\n\tSYS_UNGETC                          = 0x80  // 128\n\tSYS_FREAD                           = 0x81  // 129\n\tSYS_WCSTOMBS                        = 0x82  // 130\n\tSYS_MBTOWC                          = 0x83  // 131\n\tSYS_WCTOMB                          = 0x84  // 132\n\tSYS_MBSTOWCS                        = 0x85  // 133\n\tSYS_WCSCPY                          = 0x86  // 134\n\tSYS_WCSCAT                          = 0x87  // 135\n\tSYS_WCSCHR                          = 0x88  // 136\n\tSYS_WCSCMP                          = 0x89  // 137\n\tSYS_WCSNCMP                         = 0x8A  // 138\n\tSYS_WCSCSPN                         = 0x8B  // 139\n\tSYS_WCSLEN                          = 0x8C  // 140\n\tSYS_WCSNCAT                         = 0x8D  // 141\n\tSYS_WCSSPN                          = 0x8E  // 142\n\tSYS_WCSNCPY                         = 0x8F  // 143\n\tSYS_ABS                             = 0x90  // 144\n\tSYS_DIV                             = 0x91  // 145\n\tSYS_LABS                            = 0x92  // 146\n\tSYS_STRNCPY                         = 0x93  // 147\n\tSYS_MEMCPY                          = 0x94  // 148\n\tSYS_MEMMOVE                         = 0x95  // 149\n\tSYS_STRCPY                          = 0x96  // 150\n\tSYS_STRCMP                          = 0x97  // 151\n\tSYS_STRCAT                          = 0x98  // 152\n\tSYS_STRNCAT                         = 0x99  // 153\n\tSYS_MEMCMP                          = 0x9A  // 154\n\tSYS_MEMCHR                          = 0x9B  // 155\n\tSYS_STRCOLL                         = 0x9C  // 156\n\tSYS_STRNCMP                         = 0x9D  // 157\n\tSYS_STRXFRM                         = 0x9E  // 158\n\tSYS_STRRCHR                         = 0x9F  // 159\n\tSYS_STRCHR                          = 0xA0  // 160\n\tSYS_STRCSPN                         = 0xA1  // 161\n\tSYS_STRPBRK                         = 0xA2  // 162\n\tSYS_MEMSET                          = 0xA3  // 163\n\tSYS_STRSPN                          = 0xA4  // 164\n\tSYS_STRSTR                          = 0xA5  // 165\n\tSYS_STRTOK                          = 0xA6  // 166\n\tSYS_DIFFTIME                        = 0xA7  // 167\n\tSYS_STRERROR                        = 0xA8  // 168\n\tSYS_STRLEN                          = 0xA9  // 169\n\tSYS_CLOCK                           = 0xAA  // 170\n\tSYS_CTIME                           = 0xAB  // 171\n\tSYS_MKTIME                          = 0xAC  // 172\n\tSYS_TIME                            = 0xAD  // 173\n\tSYS_ASCTIME                         = 0xAE  // 174\n\tSYS_MBLEN                           = 0xAF  // 175\n\tSYS_GMTIME                          = 0xB0  // 176\n\tSYS_LOCALTIM                        = 0xB1  // 177\n\tSYS_LOCALTIME                       = 0xB1  // 177\n\tSYS_STRFTIME                        = 0xB2  // 178\n\tSYS___GETCB                         = 0xB4  // 180\n\tSYS_FUPDATE                         = 0xB5  // 181\n\tSYS___FUPDT                         = 0xB5  // 181\n\tSYS_CLRMEMF                         = 0xBD  // 189\n\tSYS___CLRMF                         = 0xBD  // 189\n\tSYS_FETCHEP                         = 0xBF  // 191\n\tSYS___FTCHEP                        = 0xBF  // 191\n\tSYS_FLDATA                          = 0xC1  // 193\n\tSYS___FLDATA                        = 0xC1  // 193\n\tSYS_DYNFREE                         = 0xC2  // 194\n\tSYS___DYNFRE                        = 0xC2  // 194\n\tSYS_DYNALLOC                        = 0xC3  // 195\n\tSYS___DYNALL                        = 0xC3  // 195\n\tSYS___CDUMP                         = 0xC4  // 196\n\tSYS_CSNAP                           = 0xC5  // 197\n\tSYS___CSNAP                         = 0xC5  // 197\n\tSYS_CTRACE                          = 0xC6  // 198\n\tSYS___CTRACE                        = 0xC6  // 198\n\tSYS___CTEST                         = 0xC7  // 199\n\tSYS_SETENV                          = 0xC8  // 200\n\tSYS___SETENV                        = 0xC8  // 200\n\tSYS_CLEARENV                        = 0xC9  // 201\n\tSYS___CLRENV                        = 0xC9  // 201\n\tSYS___REGCOMP_STD                   = 0xEA  // 234\n\tSYS_NL_LANGINFO                     = 0xFC  // 252\n\tSYS_GETSYNTX                        = 0xFD  // 253\n\tSYS_ISBLANK                         = 0xFE  // 254\n\tSYS___ISBLNK                        = 0xFE  // 254\n\tSYS_ISWALNUM                        = 0xFF  // 255\n\tSYS_ISWALPHA                        = 0x100 // 256\n\tSYS_ISWBLANK                        = 0x101 // 257\n\tSYS___ISWBLK                        = 0x101 // 257\n\tSYS_ISWCNTRL                        = 0x102 // 258\n\tSYS_ISWDIGIT                        = 0x103 // 259\n\tSYS_ISWGRAPH                        = 0x104 // 260\n\tSYS_ISWLOWER                        = 0x105 // 261\n\tSYS_ISWPRINT                        = 0x106 // 262\n\tSYS_ISWPUNCT                        = 0x107 // 263\n\tSYS_ISWSPACE                        = 0x108 // 264\n\tSYS_ISWUPPER                        = 0x109 // 265\n\tSYS_ISWXDIGI                        = 0x10A // 266\n\tSYS_ISWXDIGIT                       = 0x10A // 266\n\tSYS_WCTYPE                          = 0x10B // 267\n\tSYS_ISWCTYPE                        = 0x10C // 268\n\tSYS_TOWLOWER                        = 0x10D // 269\n\tSYS_TOWUPPER                        = 0x10E // 270\n\tSYS_MBSINIT                         = 0x10F // 271\n\tSYS_WCTOB                           = 0x110 // 272\n\tSYS_MBRLEN                          = 0x111 // 273\n\tSYS_MBRTOWC                         = 0x112 // 274\n\tSYS_MBSRTOWC                        = 0x113 // 275\n\tSYS_MBSRTOWCS                       = 0x113 // 275\n\tSYS_WCRTOMB                         = 0x114 // 276\n\tSYS_WCSRTOMB                        = 0x115 // 277\n\tSYS_WCSRTOMBS                       = 0x115 // 277\n\tSYS___CSID                          = 0x116 // 278\n\tSYS___WCSID                         = 0x117 // 279\n\tSYS_STRPTIME                        = 0x118 // 280\n\tSYS___STRPTM                        = 0x118 // 280\n\tSYS_STRFMON                         = 0x119 // 281\n\tSYS___RPMTCH                        = 0x11A // 282\n\tSYS_WCSSTR                          = 0x11B // 283\n\tSYS_WCSTOK                          = 0x12C // 300\n\tSYS_WCSTOL                          = 0x12D // 301\n\tSYS_WCSTOD                          = 0x12E // 302\n\tSYS_WCSTOUL                         = 0x12F // 303\n\tSYS_WCSCOLL                         = 0x130 // 304\n\tSYS_WCSXFRM                         = 0x131 // 305\n\tSYS_WCSWIDTH                        = 0x132 // 306\n\tSYS_WCWIDTH                         = 0x133 // 307\n\tSYS_WCSFTIME                        = 0x134 // 308\n\tSYS_SWPRINTF                        = 0x135 // 309\n\tSYS_VSWPRINT                        = 0x136 // 310\n\tSYS_VSWPRINTF                       = 0x136 // 310\n\tSYS_SWSCANF                         = 0x137 // 311\n\tSYS_REGCOMP                         = 0x138 // 312\n\tSYS_REGEXEC                         = 0x139 // 313\n\tSYS_REGFREE                         = 0x13A // 314\n\tSYS_REGERROR                        = 0x13B // 315\n\tSYS_FGETWC                          = 0x13C // 316\n\tSYS_FGETWS                          = 0x13D // 317\n\tSYS_FPUTWC                          = 0x13E // 318\n\tSYS_FPUTWS                          = 0x13F // 319\n\tSYS_GETWC                           = 0x140 // 320\n\tSYS_GETWCHAR                        = 0x141 // 321\n\tSYS_PUTWC                           = 0x142 // 322\n\tSYS_PUTWCHAR                        = 0x143 // 323\n\tSYS_UNGETWC                         = 0x144 // 324\n\tSYS_ICONV_OPEN                      = 0x145 // 325\n\tSYS_ICONV                           = 0x146 // 326\n\tSYS_ICONV_CLOSE                     = 0x147 // 327\n\tSYS_ISMCCOLLEL                      = 0x14C // 332\n\tSYS_STRTOCOLL                       = 0x14D // 333\n\tSYS_COLLTOSTR                       = 0x14E // 334\n\tSYS_COLLEQUIV                       = 0x14F // 335\n\tSYS_COLLRANGE                       = 0x150 // 336\n\tSYS_CCLASS                          = 0x151 // 337\n\tSYS_COLLORDER                       = 0x152 // 338\n\tSYS___DEMANGLE                      = 0x154 // 340\n\tSYS_FDOPEN                          = 0x155 // 341\n\tSYS___ERRNO                         = 0x156 // 342\n\tSYS___ERRNO2                        = 0x157 // 343\n\tSYS___TERROR                        = 0x158 // 344\n\tSYS_MAXCOLL                         = 0x169 // 361\n\tSYS_GETMCCOLL                       = 0x16A // 362\n\tSYS_GETWMCCOLL                      = 0x16B // 363\n\tSYS___ERR2AD                        = 0x16C // 364\n\tSYS_DLLQUERYFN                      = 0x16D // 365\n\tSYS_DLLQUERYVAR                     = 0x16E // 366\n\tSYS_DLLFREE                         = 0x16F // 367\n\tSYS_DLLLOAD                         = 0x170 // 368\n\tSYS__EXIT                           = 0x174 // 372\n\tSYS_ACCESS                          = 0x175 // 373\n\tSYS_ALARM                           = 0x176 // 374\n\tSYS_CFGETISPEED                     = 0x177 // 375\n\tSYS_CFGETOSPEED                     = 0x178 // 376\n\tSYS_CFSETISPEED                     = 0x179 // 377\n\tSYS_CFSETOSPEED                     = 0x17A // 378\n\tSYS_CHDIR                           = 0x17B // 379\n\tSYS_CHMOD                           = 0x17C // 380\n\tSYS_CHOWN                           = 0x17D // 381\n\tSYS_CLOSE                           = 0x17E // 382\n\tSYS_CLOSEDIR                        = 0x17F // 383\n\tSYS_CREAT                           = 0x180 // 384\n\tSYS_CTERMID                         = 0x181 // 385\n\tSYS_DUP                             = 0x182 // 386\n\tSYS_DUP2                            = 0x183 // 387\n\tSYS_EXECL                           = 0x184 // 388\n\tSYS_EXECLE                          = 0x185 // 389\n\tSYS_EXECLP                          = 0x186 // 390\n\tSYS_EXECV                           = 0x187 // 391\n\tSYS_EXECVE                          = 0x188 // 392\n\tSYS_EXECVP                          = 0x189 // 393\n\tSYS_FCHMOD                          = 0x18A // 394\n\tSYS_FCHOWN                          = 0x18B // 395\n\tSYS_FCNTL                           = 0x18C // 396\n\tSYS_FILENO                          = 0x18D // 397\n\tSYS_FORK                            = 0x18E // 398\n\tSYS_FPATHCONF                       = 0x18F // 399\n\tSYS_FSTAT                           = 0x190 // 400\n\tSYS_FSYNC                           = 0x191 // 401\n\tSYS_FTRUNCATE                       = 0x192 // 402\n\tSYS_GETCWD                          = 0x193 // 403\n\tSYS_GETEGID                         = 0x194 // 404\n\tSYS_GETEUID                         = 0x195 // 405\n\tSYS_GETGID                          = 0x196 // 406\n\tSYS_GETGRGID                        = 0x197 // 407\n\tSYS_GETGRNAM                        = 0x198 // 408\n\tSYS_GETGROUPS                       = 0x199 // 409\n\tSYS_GETLOGIN                        = 0x19A // 410\n\tSYS_W_GETMNTENT                     = 0x19B // 411\n\tSYS_GETPGRP                         = 0x19C // 412\n\tSYS_GETPID                          = 0x19D // 413\n\tSYS_GETPPID                         = 0x19E // 414\n\tSYS_GETPWNAM                        = 0x19F // 415\n\tSYS_GETPWUID                        = 0x1A0 // 416\n\tSYS_GETUID                          = 0x1A1 // 417\n\tSYS_W_IOCTL                         = 0x1A2 // 418\n\tSYS_ISATTY                          = 0x1A3 // 419\n\tSYS_KILL                            = 0x1A4 // 420\n\tSYS_LINK                            = 0x1A5 // 421\n\tSYS_LSEEK                           = 0x1A6 // 422\n\tSYS_LSTAT                           = 0x1A7 // 423\n\tSYS_MKDIR                           = 0x1A8 // 424\n\tSYS_MKFIFO                          = 0x1A9 // 425\n\tSYS_MKNOD                           = 0x1AA // 426\n\tSYS_MOUNT                           = 0x1AB // 427\n\tSYS_OPEN                            = 0x1AC // 428\n\tSYS_OPENDIR                         = 0x1AD // 429\n\tSYS_PATHCONF                        = 0x1AE // 430\n\tSYS_PAUSE                           = 0x1AF // 431\n\tSYS_PIPE                            = 0x1B0 // 432\n\tSYS_W_GETPSENT                      = 0x1B1 // 433\n\tSYS_READ                            = 0x1B2 // 434\n\tSYS_READDIR                         = 0x1B3 // 435\n\tSYS_READLINK                        = 0x1B4 // 436\n\tSYS_REWINDDIR                       = 0x1B5 // 437\n\tSYS_RMDIR                           = 0x1B6 // 438\n\tSYS_SETEGID                         = 0x1B7 // 439\n\tSYS_SETEUID                         = 0x1B8 // 440\n\tSYS_SETGID                          = 0x1B9 // 441\n\tSYS_SETPGID                         = 0x1BA // 442\n\tSYS_SETSID                          = 0x1BB // 443\n\tSYS_SETUID                          = 0x1BC // 444\n\tSYS_SIGACTION                       = 0x1BD // 445\n\tSYS_SIGADDSET                       = 0x1BE // 446\n\tSYS_SIGDELSET                       = 0x1BF // 447\n\tSYS_SIGEMPTYSET                     = 0x1C0 // 448\n\tSYS_SIGFILLSET                      = 0x1C1 // 449\n\tSYS_SIGISMEMBER                     = 0x1C2 // 450\n\tSYS_SIGLONGJMP                      = 0x1C3 // 451\n\tSYS_SIGPENDING                      = 0x1C4 // 452\n\tSYS_SIGPROCMASK                     = 0x1C5 // 453\n\tSYS_SIGSETJMP                       = 0x1C6 // 454\n\tSYS_SIGSUSPEND                      = 0x1C7 // 455\n\tSYS_SLEEP                           = 0x1C8 // 456\n\tSYS_STAT                            = 0x1C9 // 457\n\tSYS_W_STATFS                        = 0x1CA // 458\n\tSYS_SYMLINK                         = 0x1CB // 459\n\tSYS_SYSCONF                         = 0x1CC // 460\n\tSYS_TCDRAIN                         = 0x1CD // 461\n\tSYS_TCFLOW                          = 0x1CE // 462\n\tSYS_TCFLUSH                         = 0x1CF // 463\n\tSYS_TCGETATTR                       = 0x1D0 // 464\n\tSYS_TCGETPGRP                       = 0x1D1 // 465\n\tSYS_TCSENDBREAK                     = 0x1D2 // 466\n\tSYS_TCSETATTR                       = 0x1D3 // 467\n\tSYS_TCSETPGRP                       = 0x1D4 // 468\n\tSYS_TIMES                           = 0x1D5 // 469\n\tSYS_TTYNAME                         = 0x1D6 // 470\n\tSYS_TZSET                           = 0x1D7 // 471\n\tSYS_UMASK                           = 0x1D8 // 472\n\tSYS_UMOUNT                          = 0x1D9 // 473\n\tSYS_UNAME                           = 0x1DA // 474\n\tSYS_UNLINK                          = 0x1DB // 475\n\tSYS_UTIME                           = 0x1DC // 476\n\tSYS_WAIT                            = 0x1DD // 477\n\tSYS_WAITPID                         = 0x1DE // 478\n\tSYS_WRITE                           = 0x1DF // 479\n\tSYS_CHAUDIT                         = 0x1E0 // 480\n\tSYS_FCHAUDIT                        = 0x1E1 // 481\n\tSYS_GETGROUPSBYNAME                 = 0x1E2 // 482\n\tSYS_SIGWAIT                         = 0x1E3 // 483\n\tSYS_PTHREAD_EXIT                    = 0x1E4 // 484\n\tSYS_PTHREAD_KILL                    = 0x1E5 // 485\n\tSYS_PTHREAD_ATTR_INIT               = 0x1E6 // 486\n\tSYS_PTHREAD_ATTR_DESTROY            = 0x1E7 // 487\n\tSYS_PTHREAD_ATTR_SETSTACKSIZE       = 0x1E8 // 488\n\tSYS_PTHREAD_ATTR_GETSTACKSIZE       = 0x1E9 // 489\n\tSYS_PTHREAD_ATTR_SETDETACHSTATE     = 0x1EA // 490\n\tSYS_PTHREAD_ATTR_GETDETACHSTATE     = 0x1EB // 491\n\tSYS_PTHREAD_ATTR_SETWEIGHT_NP       = 0x1EC // 492\n\tSYS_PTHREAD_ATTR_GETWEIGHT_NP       = 0x1ED // 493\n\tSYS_PTHREAD_CANCEL                  = 0x1EE // 494\n\tSYS_PTHREAD_CLEANUP_PUSH            = 0x1EF // 495\n\tSYS_PTHREAD_CLEANUP_POP             = 0x1F0 // 496\n\tSYS_PTHREAD_CONDATTR_INIT           = 0x1F1 // 497\n\tSYS_PTHREAD_CONDATTR_DESTROY        = 0x1F2 // 498\n\tSYS_PTHREAD_COND_INIT               = 0x1F3 // 499\n\tSYS_PTHREAD_COND_DESTROY            = 0x1F4 // 500\n\tSYS_PTHREAD_COND_SIGNAL             = 0x1F5 // 501\n\tSYS_PTHREAD_COND_BROADCAST          = 0x1F6 // 502\n\tSYS_PTHREAD_COND_WAIT               = 0x1F7 // 503\n\tSYS_PTHREAD_COND_TIMEDWAIT          = 0x1F8 // 504\n\tSYS_PTHREAD_CREATE                  = 0x1F9 // 505\n\tSYS_PTHREAD_DETACH                  = 0x1FA // 506\n\tSYS_PTHREAD_EQUAL                   = 0x1FB // 507\n\tSYS_PTHREAD_GETSPECIFIC             = 0x1FC // 508\n\tSYS_PTHREAD_JOIN                    = 0x1FD // 509\n\tSYS_PTHREAD_KEY_CREATE              = 0x1FE // 510\n\tSYS_PTHREAD_MUTEXATTR_INIT          = 0x1FF // 511\n\tSYS_PTHREAD_MUTEXATTR_DESTROY       = 0x200 // 512\n\tSYS_PTHREAD_MUTEXATTR_SETKIND_NP    = 0x201 // 513\n\tSYS_PTHREAD_MUTEXATTR_GETKIND_NP    = 0x202 // 514\n\tSYS_PTHREAD_MUTEX_INIT              = 0x203 // 515\n\tSYS_PTHREAD_MUTEX_DESTROY           = 0x204 // 516\n\tSYS_PTHREAD_MUTEX_LOCK              = 0x205 // 517\n\tSYS_PTHREAD_MUTEX_TRYLOCK           = 0x206 // 518\n\tSYS_PTHREAD_MUTEX_UNLOCK            = 0x207 // 519\n\tSYS_PTHREAD_ONCE                    = 0x209 // 521\n\tSYS_PTHREAD_SELF                    = 0x20A // 522\n\tSYS_PTHREAD_SETINTR                 = 0x20B // 523\n\tSYS_PTHREAD_SETINTRTYPE             = 0x20C // 524\n\tSYS_PTHREAD_SETSPECIFIC             = 0x20D // 525\n\tSYS_PTHREAD_TESTINTR                = 0x20E // 526\n\tSYS_PTHREAD_YIELD                   = 0x20F // 527\n\tSYS_TW_OPEN                         = 0x210 // 528\n\tSYS_TW_FCNTL                        = 0x211 // 529\n\tSYS_PTHREAD_JOIN_D4_NP              = 0x212 // 530\n\tSYS_PTHREAD_CONDATTR_SETKIND_NP     = 0x213 // 531\n\tSYS_PTHREAD_CONDATTR_GETKIND_NP     = 0x214 // 532\n\tSYS_EXTLINK_NP                      = 0x215 // 533\n\tSYS___PASSWD                        = 0x216 // 534\n\tSYS_SETGROUPS                       = 0x217 // 535\n\tSYS_INITGROUPS                      = 0x218 // 536\n\tSYS_WCSPBRK                         = 0x23F // 575\n\tSYS_WCSRCHR                         = 0x240 // 576\n\tSYS_SVC99                           = 0x241 // 577\n\tSYS___SVC99                         = 0x241 // 577\n\tSYS_WCSWCS                          = 0x242 // 578\n\tSYS_LOCALECO                        = 0x243 // 579\n\tSYS_LOCALECONV                      = 0x243 // 579\n\tSYS___LIBREL                        = 0x244 // 580\n\tSYS_RELEASE                         = 0x245 // 581\n\tSYS___RLSE                          = 0x245 // 581\n\tSYS_FLOCATE                         = 0x246 // 582\n\tSYS___FLOCT                         = 0x246 // 582\n\tSYS_FDELREC                         = 0x247 // 583\n\tSYS___FDLREC                        = 0x247 // 583\n\tSYS_FETCH                           = 0x248 // 584\n\tSYS___FETCH                         = 0x248 // 584\n\tSYS_QSORT                           = 0x249 // 585\n\tSYS_GETENV                          = 0x24A // 586\n\tSYS_SYSTEM                          = 0x24B // 587\n\tSYS_BSEARCH                         = 0x24C // 588\n\tSYS_LDIV                            = 0x24D // 589\n\tSYS___THROW                         = 0x25E // 606\n\tSYS___RETHROW                       = 0x25F // 607\n\tSYS___CLEANUPCATCH                  = 0x260 // 608\n\tSYS___CATCHMATCH                    = 0x261 // 609\n\tSYS___CLEAN2UPCATCH                 = 0x262 // 610\n\tSYS_PUTENV                          = 0x26A // 618\n\tSYS___GETENV                        = 0x26F // 623\n\tSYS_GETPRIORITY                     = 0x270 // 624\n\tSYS_NICE                            = 0x271 // 625\n\tSYS_SETPRIORITY                     = 0x272 // 626\n\tSYS_GETITIMER                       = 0x273 // 627\n\tSYS_SETITIMER                       = 0x274 // 628\n\tSYS_MSGCTL                          = 0x275 // 629\n\tSYS_MSGGET                          = 0x276 // 630\n\tSYS_MSGRCV                          = 0x277 // 631\n\tSYS_MSGSND                          = 0x278 // 632\n\tSYS_MSGXRCV                         = 0x279 // 633\n\tSYS___MSGXR                         = 0x279 // 633\n\tSYS_SEMCTL                          = 0x27A // 634\n\tSYS_SEMGET                          = 0x27B // 635\n\tSYS_SEMOP                           = 0x27C // 636\n\tSYS_SHMAT                           = 0x27D // 637\n\tSYS_SHMCTL                          = 0x27E // 638\n\tSYS_SHMDT                           = 0x27F // 639\n\tSYS_SHMGET                          = 0x280 // 640\n\tSYS___GETIPC                        = 0x281 // 641\n\tSYS_SETGRENT                        = 0x282 // 642\n\tSYS_GETGRENT                        = 0x283 // 643\n\tSYS_ENDGRENT                        = 0x284 // 644\n\tSYS_SETPWENT                        = 0x285 // 645\n\tSYS_GETPWENT                        = 0x286 // 646\n\tSYS_ENDPWENT                        = 0x287 // 647\n\tSYS_BSD_SIGNAL                      = 0x288 // 648\n\tSYS_KILLPG                          = 0x289 // 649\n\tSYS_SIGALTSTACK                     = 0x28A // 650\n\tSYS_SIGHOLD                         = 0x28B // 651\n\tSYS_SIGIGNORE                       = 0x28C // 652\n\tSYS_SIGINTERRUPT                    = 0x28D // 653\n\tSYS_SIGPAUSE                        = 0x28E // 654\n\tSYS_SIGRELSE                        = 0x28F // 655\n\tSYS_SIGSET                          = 0x290 // 656\n\tSYS_SIGSTACK                        = 0x291 // 657\n\tSYS_GETRLIMIT                       = 0x292 // 658\n\tSYS_SETRLIMIT                       = 0x293 // 659\n\tSYS_GETRUSAGE                       = 0x294 // 660\n\tSYS_MMAP                            = 0x295 // 661\n\tSYS_MPROTECT                        = 0x296 // 662\n\tSYS_MSYNC                           = 0x297 // 663\n\tSYS_MUNMAP                          = 0x298 // 664\n\tSYS_CONFSTR                         = 0x299 // 665\n\tSYS_GETOPT                          = 0x29A // 666\n\tSYS_LCHOWN                          = 0x29B // 667\n\tSYS_TRUNCATE                        = 0x29C // 668\n\tSYS_GETSUBOPT                       = 0x29D // 669\n\tSYS_SETPGRP                         = 0x29E // 670\n\tSYS___GDERR                         = 0x29F // 671\n\tSYS___TZONE                         = 0x2A0 // 672\n\tSYS___DLGHT                         = 0x2A1 // 673\n\tSYS___OPARGF                        = 0x2A2 // 674\n\tSYS___OPOPTF                        = 0x2A3 // 675\n\tSYS___OPINDF                        = 0x2A4 // 676\n\tSYS___OPERRF                        = 0x2A5 // 677\n\tSYS_GETDATE                         = 0x2A6 // 678\n\tSYS_WAIT3                           = 0x2A7 // 679\n\tSYS_WAITID                          = 0x2A8 // 680\n\tSYS___CATTRM                        = 0x2A9 // 681\n\tSYS___GDTRM                         = 0x2AA // 682\n\tSYS___RNDTRM                        = 0x2AB // 683\n\tSYS_CRYPT                           = 0x2AC // 684\n\tSYS_ENCRYPT                         = 0x2AD // 685\n\tSYS_SETKEY                          = 0x2AE // 686\n\tSYS___CNVBLK                        = 0x2AF // 687\n\tSYS___CRYTRM                        = 0x2B0 // 688\n\tSYS___ECRTRM                        = 0x2B1 // 689\n\tSYS_DRAND48                         = 0x2B2 // 690\n\tSYS_ERAND48                         = 0x2B3 // 691\n\tSYS_FSTATVFS                        = 0x2B4 // 692\n\tSYS_STATVFS                         = 0x2B5 // 693\n\tSYS_CATCLOSE                        = 0x2B6 // 694\n\tSYS_CATGETS                         = 0x2B7 // 695\n\tSYS_CATOPEN                         = 0x2B8 // 696\n\tSYS_BCMP                            = 0x2B9 // 697\n\tSYS_BCOPY                           = 0x2BA // 698\n\tSYS_BZERO                           = 0x2BB // 699\n\tSYS_FFS                             = 0x2BC // 700\n\tSYS_INDEX                           = 0x2BD // 701\n\tSYS_RINDEX                          = 0x2BE // 702\n\tSYS_STRCASECMP                      = 0x2BF // 703\n\tSYS_STRDUP                          = 0x2C0 // 704\n\tSYS_STRNCASECMP                     = 0x2C1 // 705\n\tSYS_INITSTATE                       = 0x2C2 // 706\n\tSYS_SETSTATE                        = 0x2C3 // 707\n\tSYS_RANDOM                          = 0x2C4 // 708\n\tSYS_SRANDOM                         = 0x2C5 // 709\n\tSYS_HCREATE                         = 0x2C6 // 710\n\tSYS_HDESTROY                        = 0x2C7 // 711\n\tSYS_HSEARCH                         = 0x2C8 // 712\n\tSYS_LFIND                           = 0x2C9 // 713\n\tSYS_LSEARCH                         = 0x2CA // 714\n\tSYS_TDELETE                         = 0x2CB // 715\n\tSYS_TFIND                           = 0x2CC // 716\n\tSYS_TSEARCH                         = 0x2CD // 717\n\tSYS_TWALK                           = 0x2CE // 718\n\tSYS_INSQUE                          = 0x2CF // 719\n\tSYS_REMQUE                          = 0x2D0 // 720\n\tSYS_POPEN                           = 0x2D1 // 721\n\tSYS_PCLOSE                          = 0x2D2 // 722\n\tSYS_SWAB                            = 0x2D3 // 723\n\tSYS_MEMCCPY                         = 0x2D4 // 724\n\tSYS_GETPAGESIZE                     = 0x2D8 // 728\n\tSYS_FCHDIR                          = 0x2D9 // 729\n\tSYS___OCLCK                         = 0x2DA // 730\n\tSYS___ATOE                          = 0x2DB // 731\n\tSYS___ATOE_L                        = 0x2DC // 732\n\tSYS___ETOA                          = 0x2DD // 733\n\tSYS___ETOA_L                        = 0x2DE // 734\n\tSYS_SETUTXENT                       = 0x2DF // 735\n\tSYS_GETUTXENT                       = 0x2E0 // 736\n\tSYS_ENDUTXENT                       = 0x2E1 // 737\n\tSYS_GETUTXID                        = 0x2E2 // 738\n\tSYS_GETUTXLINE                      = 0x2E3 // 739\n\tSYS_PUTUTXLINE                      = 0x2E4 // 740\n\tSYS_FMTMSG                          = 0x2E5 // 741\n\tSYS_JRAND48                         = 0x2E6 // 742\n\tSYS_LRAND48                         = 0x2E7 // 743\n\tSYS_MRAND48                         = 0x2E8 // 744\n\tSYS_NRAND48                         = 0x2E9 // 745\n\tSYS_LCONG48                         = 0x2EA // 746\n\tSYS_SRAND48                         = 0x2EB // 747\n\tSYS_SEED48                          = 0x2EC // 748\n\tSYS_ISASCII                         = 0x2ED // 749\n\tSYS_TOASCII                         = 0x2EE // 750\n\tSYS_A64L                            = 0x2EF // 751\n\tSYS_L64A                            = 0x2F0 // 752\n\tSYS_UALARM                          = 0x2F1 // 753\n\tSYS_USLEEP                          = 0x2F2 // 754\n\tSYS___UTXTRM                        = 0x2F3 // 755\n\tSYS___SRCTRM                        = 0x2F4 // 756\n\tSYS_FTIME                           = 0x2F5 // 757\n\tSYS_GETTIMEOFDAY                    = 0x2F6 // 758\n\tSYS_DBM_CLEARERR                    = 0x2F7 // 759\n\tSYS_DBM_CLOSE                       = 0x2F8 // 760\n\tSYS_DBM_DELETE                      = 0x2F9 // 761\n\tSYS_DBM_ERROR                       = 0x2FA // 762\n\tSYS_DBM_FETCH                       = 0x2FB // 763\n\tSYS_DBM_FIRSTKEY                    = 0x2FC // 764\n\tSYS_DBM_NEXTKEY                     = 0x2FD // 765\n\tSYS_DBM_OPEN                        = 0x2FE // 766\n\tSYS_DBM_STORE                       = 0x2FF // 767\n\tSYS___NDMTRM                        = 0x300 // 768\n\tSYS_FTOK                            = 0x301 // 769\n\tSYS_BASENAME                        = 0x302 // 770\n\tSYS_DIRNAME                         = 0x303 // 771\n\tSYS_GETDTABLESIZE                   = 0x304 // 772\n\tSYS_MKSTEMP                         = 0x305 // 773\n\tSYS_MKTEMP                          = 0x306 // 774\n\tSYS_NFTW                            = 0x307 // 775\n\tSYS_GETWD                           = 0x308 // 776\n\tSYS_LOCKF                           = 0x309 // 777\n\tSYS__LONGJMP                        = 0x30D // 781\n\tSYS__SETJMP                         = 0x30E // 782\n\tSYS_VFORK                           = 0x30F // 783\n\tSYS_WORDEXP                         = 0x310 // 784\n\tSYS_WORDFREE                        = 0x311 // 785\n\tSYS_GETPGID                         = 0x312 // 786\n\tSYS_GETSID                          = 0x313 // 787\n\tSYS___UTMPXNAME                     = 0x314 // 788\n\tSYS_CUSERID                         = 0x315 // 789\n\tSYS_GETPASS                         = 0x316 // 790\n\tSYS_FNMATCH                         = 0x317 // 791\n\tSYS_FTW                             = 0x318 // 792\n\tSYS_GETW                            = 0x319 // 793\n\tSYS_GLOB                            = 0x31A // 794\n\tSYS_GLOBFREE                        = 0x31B // 795\n\tSYS_PUTW                            = 0x31C // 796\n\tSYS_SEEKDIR                         = 0x31D // 797\n\tSYS_TELLDIR                         = 0x31E // 798\n\tSYS_TEMPNAM                         = 0x31F // 799\n\tSYS_ACOSH                           = 0x320 // 800\n\tSYS_ASINH                           = 0x321 // 801\n\tSYS_ATANH                           = 0x322 // 802\n\tSYS_CBRT                            = 0x323 // 803\n\tSYS_EXPM1                           = 0x324 // 804\n\tSYS_ILOGB                           = 0x325 // 805\n\tSYS_LOGB                            = 0x326 // 806\n\tSYS_LOG1P                           = 0x327 // 807\n\tSYS_NEXTAFTER                       = 0x328 // 808\n\tSYS_RINT                            = 0x329 // 809\n\tSYS_REMAINDER                       = 0x32A // 810\n\tSYS_SCALB                           = 0x32B // 811\n\tSYS_LGAMMA                          = 0x32C // 812\n\tSYS_TTYSLOT                         = 0x32D // 813\n\tSYS_GETTIMEOFDAY_R                  = 0x32E // 814\n\tSYS_SYNC                            = 0x32F // 815\n\tSYS_SPAWN                           = 0x330 // 816\n\tSYS_SPAWNP                          = 0x331 // 817\n\tSYS_GETLOGIN_UU                     = 0x332 // 818\n\tSYS_ECVT                            = 0x333 // 819\n\tSYS_FCVT                            = 0x334 // 820\n\tSYS_GCVT                            = 0x335 // 821\n\tSYS_ACCEPT                          = 0x336 // 822\n\tSYS_BIND                            = 0x337 // 823\n\tSYS_CONNECT                         = 0x338 // 824\n\tSYS_ENDHOSTENT                      = 0x339 // 825\n\tSYS_ENDPROTOENT                     = 0x33A // 826\n\tSYS_ENDSERVENT                      = 0x33B // 827\n\tSYS_GETHOSTBYADDR_R                 = 0x33C // 828\n\tSYS_GETHOSTBYADDR                   = 0x33D // 829\n\tSYS_GETHOSTBYNAME_R                 = 0x33E // 830\n\tSYS_GETHOSTBYNAME                   = 0x33F // 831\n\tSYS_GETHOSTENT                      = 0x340 // 832\n\tSYS_GETHOSTID                       = 0x341 // 833\n\tSYS_GETHOSTNAME                     = 0x342 // 834\n\tSYS_GETNETBYADDR                    = 0x343 // 835\n\tSYS_GETNETBYNAME                    = 0x344 // 836\n\tSYS_GETNETENT                       = 0x345 // 837\n\tSYS_GETPEERNAME                     = 0x346 // 838\n\tSYS_GETPROTOBYNAME                  = 0x347 // 839\n\tSYS_GETPROTOBYNUMBER                = 0x348 // 840\n\tSYS_GETPROTOENT                     = 0x349 // 841\n\tSYS_GETSERVBYNAME                   = 0x34A // 842\n\tSYS_GETSERVBYPORT                   = 0x34B // 843\n\tSYS_GETSERVENT                      = 0x34C // 844\n\tSYS_GETSOCKNAME                     = 0x34D // 845\n\tSYS_GETSOCKOPT                      = 0x34E // 846\n\tSYS_INET_ADDR                       = 0x34F // 847\n\tSYS_INET_LNAOF                      = 0x350 // 848\n\tSYS_INET_MAKEADDR                   = 0x351 // 849\n\tSYS_INET_NETOF                      = 0x352 // 850\n\tSYS_INET_NETWORK                    = 0x353 // 851\n\tSYS_INET_NTOA                       = 0x354 // 852\n\tSYS_IOCTL                           = 0x355 // 853\n\tSYS_LISTEN                          = 0x356 // 854\n\tSYS_READV                           = 0x357 // 855\n\tSYS_RECV                            = 0x358 // 856\n\tSYS_RECVFROM                        = 0x359 // 857\n\tSYS_SELECT                          = 0x35B // 859\n\tSYS_SELECTEX                        = 0x35C // 860\n\tSYS_SEND                            = 0x35D // 861\n\tSYS_SENDTO                          = 0x35F // 863\n\tSYS_SETHOSTENT                      = 0x360 // 864\n\tSYS_SETNETENT                       = 0x361 // 865\n\tSYS_SETPEER                         = 0x362 // 866\n\tSYS_SETPROTOENT                     = 0x363 // 867\n\tSYS_SETSERVENT                      = 0x364 // 868\n\tSYS_SETSOCKOPT                      = 0x365 // 869\n\tSYS_SHUTDOWN                        = 0x366 // 870\n\tSYS_SOCKET                          = 0x367 // 871\n\tSYS_SOCKETPAIR                      = 0x368 // 872\n\tSYS_WRITEV                          = 0x369 // 873\n\tSYS_CHROOT                          = 0x36A // 874\n\tSYS_W_STATVFS                       = 0x36B // 875\n\tSYS_ULIMIT                          = 0x36C // 876\n\tSYS_ISNAN                           = 0x36D // 877\n\tSYS_UTIMES                          = 0x36E // 878\n\tSYS___H_ERRNO                       = 0x36F // 879\n\tSYS_ENDNETENT                       = 0x370 // 880\n\tSYS_CLOSELOG                        = 0x371 // 881\n\tSYS_OPENLOG                         = 0x372 // 882\n\tSYS_SETLOGMASK                      = 0x373 // 883\n\tSYS_SYSLOG                          = 0x374 // 884\n\tSYS_PTSNAME                         = 0x375 // 885\n\tSYS_SETREUID                        = 0x376 // 886\n\tSYS_SETREGID                        = 0x377 // 887\n\tSYS_REALPATH                        = 0x378 // 888\n\tSYS___SIGNGAM                       = 0x379 // 889\n\tSYS_GRANTPT                         = 0x37A // 890\n\tSYS_UNLOCKPT                        = 0x37B // 891\n\tSYS_TCGETSID                        = 0x37C // 892\n\tSYS___TCGETCP                       = 0x37D // 893\n\tSYS___TCSETCP                       = 0x37E // 894\n\tSYS___TCSETTABLES                   = 0x37F // 895\n\tSYS_POLL                            = 0x380 // 896\n\tSYS_REXEC                           = 0x381 // 897\n\tSYS___ISASCII2                      = 0x382 // 898\n\tSYS___TOASCII2                      = 0x383 // 899\n\tSYS_CHPRIORITY                      = 0x384 // 900\n\tSYS_PTHREAD_ATTR_SETSYNCTYPE_NP     = 0x385 // 901\n\tSYS_PTHREAD_ATTR_GETSYNCTYPE_NP     = 0x386 // 902\n\tSYS_PTHREAD_SET_LIMIT_NP            = 0x387 // 903\n\tSYS___STNETENT                      = 0x388 // 904\n\tSYS___STPROTOENT                    = 0x389 // 905\n\tSYS___STSERVENT                     = 0x38A // 906\n\tSYS___STHOSTENT                     = 0x38B // 907\n\tSYS_NLIST                           = 0x38C // 908\n\tSYS___IPDBCS                        = 0x38D // 909\n\tSYS___IPDSPX                        = 0x38E // 910\n\tSYS___IPMSGC                        = 0x38F // 911\n\tSYS___SELECT1                       = 0x390 // 912\n\tSYS_PTHREAD_SECURITY_NP             = 0x391 // 913\n\tSYS___CHECK_RESOURCE_AUTH_NP        = 0x392 // 914\n\tSYS___CONVERT_ID_NP                 = 0x393 // 915\n\tSYS___OPENVMREL                     = 0x394 // 916\n\tSYS_WMEMCHR                         = 0x395 // 917\n\tSYS_WMEMCMP                         = 0x396 // 918\n\tSYS_WMEMCPY                         = 0x397 // 919\n\tSYS_WMEMMOVE                        = 0x398 // 920\n\tSYS_WMEMSET                         = 0x399 // 921\n\tSYS___FPUTWC                        = 0x400 // 1024\n\tSYS___PUTWC                         = 0x401 // 1025\n\tSYS___PWCHAR                        = 0x402 // 1026\n\tSYS___WCSFTM                        = 0x403 // 1027\n\tSYS___WCSTOK                        = 0x404 // 1028\n\tSYS___WCWDTH                        = 0x405 // 1029\n\tSYS_T_ACCEPT                        = 0x409 // 1033\n\tSYS_T_ALLOC                         = 0x40A // 1034\n\tSYS_T_BIND                          = 0x40B // 1035\n\tSYS_T_CLOSE                         = 0x40C // 1036\n\tSYS_T_CONNECT                       = 0x40D // 1037\n\tSYS_T_ERROR                         = 0x40E // 1038\n\tSYS_T_FREE                          = 0x40F // 1039\n\tSYS_T_GETINFO                       = 0x410 // 1040\n\tSYS_T_GETPROTADDR                   = 0x411 // 1041\n\tSYS_T_GETSTATE                      = 0x412 // 1042\n\tSYS_T_LISTEN                        = 0x413 // 1043\n\tSYS_T_LOOK                          = 0x414 // 1044\n\tSYS_T_OPEN                          = 0x415 // 1045\n\tSYS_T_OPTMGMT                       = 0x416 // 1046\n\tSYS_T_RCV                           = 0x417 // 1047\n\tSYS_T_RCVCONNECT                    = 0x418 // 1048\n\tSYS_T_RCVDIS                        = 0x419 // 1049\n\tSYS_T_RCVREL                        = 0x41A // 1050\n\tSYS_T_RCVUDATA                      = 0x41B // 1051\n\tSYS_T_RCVUDERR                      = 0x41C // 1052\n\tSYS_T_SND                           = 0x41D // 1053\n\tSYS_T_SNDDIS                        = 0x41E // 1054\n\tSYS_T_SNDREL                        = 0x41F // 1055\n\tSYS_T_SNDUDATA                      = 0x420 // 1056\n\tSYS_T_STRERROR                      = 0x421 // 1057\n\tSYS_T_SYNC                          = 0x422 // 1058\n\tSYS_T_UNBIND                        = 0x423 // 1059\n\tSYS___T_ERRNO                       = 0x424 // 1060\n\tSYS___RECVMSG2                      = 0x425 // 1061\n\tSYS___SENDMSG2                      = 0x426 // 1062\n\tSYS_FATTACH                         = 0x427 // 1063\n\tSYS_FDETACH                         = 0x428 // 1064\n\tSYS_GETMSG                          = 0x429 // 1065\n\tSYS_GETPMSG                         = 0x42A // 1066\n\tSYS_ISASTREAM                       = 0x42B // 1067\n\tSYS_PUTMSG                          = 0x42C // 1068\n\tSYS_PUTPMSG                         = 0x42D // 1069\n\tSYS___ISPOSIXON                     = 0x42E // 1070\n\tSYS___OPENMVSREL                    = 0x42F // 1071\n\tSYS_GETCONTEXT                      = 0x430 // 1072\n\tSYS_SETCONTEXT                      = 0x431 // 1073\n\tSYS_MAKECONTEXT                     = 0x432 // 1074\n\tSYS_SWAPCONTEXT                     = 0x433 // 1075\n\tSYS_PTHREAD_GETSPECIFIC_D8_NP       = 0x434 // 1076\n\tSYS_GETCLIENTID                     = 0x470 // 1136\n\tSYS___GETCLIENTID                   = 0x471 // 1137\n\tSYS_GETSTABLESIZE                   = 0x472 // 1138\n\tSYS_GETIBMOPT                       = 0x473 // 1139\n\tSYS_GETIBMSOCKOPT                   = 0x474 // 1140\n\tSYS_GIVESOCKET                      = 0x475 // 1141\n\tSYS_IBMSFLUSH                       = 0x476 // 1142\n\tSYS_MAXDESC                         = 0x477 // 1143\n\tSYS_SETIBMOPT                       = 0x478 // 1144\n\tSYS_SETIBMSOCKOPT                   = 0x479 // 1145\n\tSYS_SOCK_DEBUG                      = 0x47A // 1146\n\tSYS_SOCK_DO_TESTSTOR                = 0x47D // 1149\n\tSYS_TAKESOCKET                      = 0x47E // 1150\n\tSYS___SERVER_INIT                   = 0x47F // 1151\n\tSYS___SERVER_PWU                    = 0x480 // 1152\n\tSYS_PTHREAD_TAG_NP                  = 0x481 // 1153\n\tSYS___CONSOLE                       = 0x482 // 1154\n\tSYS___WSINIT                        = 0x483 // 1155\n\tSYS___IPTCPN                        = 0x489 // 1161\n\tSYS___SMF_RECORD                    = 0x48A // 1162\n\tSYS___IPHOST                        = 0x48B // 1163\n\tSYS___IPNODE                        = 0x48C // 1164\n\tSYS___SERVER_CLASSIFY_CREATE        = 0x48D // 1165\n\tSYS___SERVER_CLASSIFY_DESTROY       = 0x48E // 1166\n\tSYS___SERVER_CLASSIFY_RESET         = 0x48F // 1167\n\tSYS___SERVER_CLASSIFY               = 0x490 // 1168\n\tSYS___HEAPRPT                       = 0x496 // 1174\n\tSYS___FNWSA                         = 0x49B // 1179\n\tSYS___SPAWN2                        = 0x49D // 1181\n\tSYS___SPAWNP2                       = 0x49E // 1182\n\tSYS___GDRR                          = 0x4A1 // 1185\n\tSYS___HRRNO                         = 0x4A2 // 1186\n\tSYS___OPRG                          = 0x4A3 // 1187\n\tSYS___OPRR                          = 0x4A4 // 1188\n\tSYS___OPND                          = 0x4A5 // 1189\n\tSYS___OPPT                          = 0x4A6 // 1190\n\tSYS___SIGGM                         = 0x4A7 // 1191\n\tSYS___DGHT                          = 0x4A8 // 1192\n\tSYS___TZNE                          = 0x4A9 // 1193\n\tSYS___TZZN                          = 0x4AA // 1194\n\tSYS___TRRNO                         = 0x4AF // 1199\n\tSYS___ENVN                          = 0x4B0 // 1200\n\tSYS___MLOCKALL                      = 0x4B1 // 1201\n\tSYS_CREATEWO                        = 0x4B2 // 1202\n\tSYS_CREATEWORKUNIT                  = 0x4B2 // 1202\n\tSYS_CONTINUE                        = 0x4B3 // 1203\n\tSYS_CONTINUEWORKUNIT                = 0x4B3 // 1203\n\tSYS_CONNECTW                        = 0x4B4 // 1204\n\tSYS_CONNECTWORKMGR                  = 0x4B4 // 1204\n\tSYS_CONNECTS                        = 0x4B5 // 1205\n\tSYS_CONNECTSERVER                   = 0x4B5 // 1205\n\tSYS_DISCONNE                        = 0x4B6 // 1206\n\tSYS_DISCONNECTSERVER                = 0x4B6 // 1206\n\tSYS_JOINWORK                        = 0x4B7 // 1207\n\tSYS_JOINWORKUNIT                    = 0x4B7 // 1207\n\tSYS_LEAVEWOR                        = 0x4B8 // 1208\n\tSYS_LEAVEWORKUNIT                   = 0x4B8 // 1208\n\tSYS_DELETEWO                        = 0x4B9 // 1209\n\tSYS_DELETEWORKUNIT                  = 0x4B9 // 1209\n\tSYS_QUERYMET                        = 0x4BA // 1210\n\tSYS_QUERYMETRICS                    = 0x4BA // 1210\n\tSYS_QUERYSCH                        = 0x4BB // 1211\n\tSYS_QUERYSCHENV                     = 0x4BB // 1211\n\tSYS_CHECKSCH                        = 0x4BC // 1212\n\tSYS_CHECKSCHENV                     = 0x4BC // 1212\n\tSYS___PID_AFFINITY                  = 0x4BD // 1213\n\tSYS___ASINH_B                       = 0x4BE // 1214\n\tSYS___ATAN_B                        = 0x4BF // 1215\n\tSYS___CBRT_B                        = 0x4C0 // 1216\n\tSYS___CEIL_B                        = 0x4C1 // 1217\n\tSYS_COPYSIGN                        = 0x4C2 // 1218\n\tSYS___COS_B                         = 0x4C3 // 1219\n\tSYS___ERF_B                         = 0x4C4 // 1220\n\tSYS___ERFC_B                        = 0x4C5 // 1221\n\tSYS___EXPM1_B                       = 0x4C6 // 1222\n\tSYS___FABS_B                        = 0x4C7 // 1223\n\tSYS_FINITE                          = 0x4C8 // 1224\n\tSYS___FLOOR_B                       = 0x4C9 // 1225\n\tSYS___FREXP_B                       = 0x4CA // 1226\n\tSYS___ILOGB_B                       = 0x4CB // 1227\n\tSYS___ISNAN_B                       = 0x4CC // 1228\n\tSYS___LDEXP_B                       = 0x4CD // 1229\n\tSYS___LOG1P_B                       = 0x4CE // 1230\n\tSYS___LOGB_B                        = 0x4CF // 1231\n\tSYS_MATHERR                         = 0x4D0 // 1232\n\tSYS___MODF_B                        = 0x4D1 // 1233\n\tSYS___NEXTAFTER_B                   = 0x4D2 // 1234\n\tSYS___RINT_B                        = 0x4D3 // 1235\n\tSYS_SCALBN                          = 0x4D4 // 1236\n\tSYS_SIGNIFIC                        = 0x4D5 // 1237\n\tSYS_SIGNIFICAND                     = 0x4D5 // 1237\n\tSYS___SIN_B                         = 0x4D6 // 1238\n\tSYS___TAN_B                         = 0x4D7 // 1239\n\tSYS___TANH_B                        = 0x4D8 // 1240\n\tSYS___ACOS_B                        = 0x4D9 // 1241\n\tSYS___ACOSH_B                       = 0x4DA // 1242\n\tSYS___ASIN_B                        = 0x4DB // 1243\n\tSYS___ATAN2_B                       = 0x4DC // 1244\n\tSYS___ATANH_B                       = 0x4DD // 1245\n\tSYS___COSH_B                        = 0x4DE // 1246\n\tSYS___EXP_B                         = 0x4DF // 1247\n\tSYS___FMOD_B                        = 0x4E0 // 1248\n\tSYS___GAMMA_B                       = 0x4E1 // 1249\n\tSYS_GAMMA_R                         = 0x4E2 // 1250\n\tSYS___HYPOT_B                       = 0x4E3 // 1251\n\tSYS___J0_B                          = 0x4E4 // 1252\n\tSYS___Y0_B                          = 0x4E5 // 1253\n\tSYS___J1_B                          = 0x4E6 // 1254\n\tSYS___Y1_B                          = 0x4E7 // 1255\n\tSYS___JN_B                          = 0x4E8 // 1256\n\tSYS___YN_B                          = 0x4E9 // 1257\n\tSYS___LGAMMA_B                      = 0x4EA // 1258\n\tSYS_LGAMMA_R                        = 0x4EB // 1259\n\tSYS___LOG_B                         = 0x4EC // 1260\n\tSYS___LOG10_B                       = 0x4ED // 1261\n\tSYS___POW_B                         = 0x4EE // 1262\n\tSYS___REMAINDER_B                   = 0x4EF // 1263\n\tSYS___SCALB_B                       = 0x4F0 // 1264\n\tSYS___SINH_B                        = 0x4F1 // 1265\n\tSYS___SQRT_B                        = 0x4F2 // 1266\n\tSYS___OPENDIR2                      = 0x4F3 // 1267\n\tSYS___READDIR2                      = 0x4F4 // 1268\n\tSYS___LOGIN                         = 0x4F5 // 1269\n\tSYS___OPEN_STAT                     = 0x4F6 // 1270\n\tSYS_ACCEPT_AND_RECV                 = 0x4F7 // 1271\n\tSYS___FP_SETMODE                    = 0x4F8 // 1272\n\tSYS___SIGACTIONSET                  = 0x4FB // 1275\n\tSYS___UCREATE                       = 0x4FC // 1276\n\tSYS___UMALLOC                       = 0x4FD // 1277\n\tSYS___UFREE                         = 0x4FE // 1278\n\tSYS___UHEAPREPORT                   = 0x4FF // 1279\n\tSYS___ISBFP                         = 0x500 // 1280\n\tSYS___FP_CAST                       = 0x501 // 1281\n\tSYS___CERTIFICATE                   = 0x502 // 1282\n\tSYS_SEND_FILE                       = 0x503 // 1283\n\tSYS_AIO_CANCEL                      = 0x504 // 1284\n\tSYS_AIO_ERROR                       = 0x505 // 1285\n\tSYS_AIO_READ                        = 0x506 // 1286\n\tSYS_AIO_RETURN                      = 0x507 // 1287\n\tSYS_AIO_SUSPEND                     = 0x508 // 1288\n\tSYS_AIO_WRITE                       = 0x509 // 1289\n\tSYS_PTHREAD_MUTEXATTR_GETPSHARED    = 0x50A // 1290\n\tSYS_PTHREAD_MUTEXATTR_SETPSHARED    = 0x50B // 1291\n\tSYS_PTHREAD_RWLOCK_DESTROY          = 0x50C // 1292\n\tSYS_PTHREAD_RWLOCK_INIT             = 0x50D // 1293\n\tSYS_PTHREAD_RWLOCK_RDLOCK           = 0x50E // 1294\n\tSYS_PTHREAD_RWLOCK_TRYRDLOCK        = 0x50F // 1295\n\tSYS_PTHREAD_RWLOCK_TRYWRLOCK        = 0x510 // 1296\n\tSYS_PTHREAD_RWLOCK_UNLOCK           = 0x511 // 1297\n\tSYS_PTHREAD_RWLOCK_WRLOCK           = 0x512 // 1298\n\tSYS_PTHREAD_RWLOCKATTR_GETPSHARED   = 0x513 // 1299\n\tSYS_PTHREAD_RWLOCKATTR_SETPSHARED   = 0x514 // 1300\n\tSYS_PTHREAD_RWLOCKATTR_INIT         = 0x515 // 1301\n\tSYS_PTHREAD_RWLOCKATTR_DESTROY      = 0x516 // 1302\n\tSYS___CTTBL                         = 0x517 // 1303\n\tSYS_PTHREAD_MUTEXATTR_SETTYPE       = 0x518 // 1304\n\tSYS_PTHREAD_MUTEXATTR_GETTYPE       = 0x519 // 1305\n\tSYS___FP_CLR_FLAG                   = 0x51A // 1306\n\tSYS___FP_READ_FLAG                  = 0x51B // 1307\n\tSYS___FP_RAISE_XCP                  = 0x51C // 1308\n\tSYS___FP_CLASS                      = 0x51D // 1309\n\tSYS___FP_FINITE                     = 0x51E // 1310\n\tSYS___FP_ISNAN                      = 0x51F // 1311\n\tSYS___FP_UNORDERED                  = 0x520 // 1312\n\tSYS___FP_READ_RND                   = 0x521 // 1313\n\tSYS___FP_READ_RND_B                 = 0x522 // 1314\n\tSYS___FP_SWAP_RND                   = 0x523 // 1315\n\tSYS___FP_SWAP_RND_B                 = 0x524 // 1316\n\tSYS___FP_LEVEL                      = 0x525 // 1317\n\tSYS___FP_BTOH                       = 0x526 // 1318\n\tSYS___FP_HTOB                       = 0x527 // 1319\n\tSYS___FPC_RD                        = 0x528 // 1320\n\tSYS___FPC_WR                        = 0x529 // 1321\n\tSYS___FPC_RW                        = 0x52A // 1322\n\tSYS___FPC_SM                        = 0x52B // 1323\n\tSYS___FPC_RS                        = 0x52C // 1324\n\tSYS_SIGTIMEDWAIT                    = 0x52D // 1325\n\tSYS_SIGWAITINFO                     = 0x52E // 1326\n\tSYS___CHKBFP                        = 0x52F // 1327\n\tSYS___W_PIOCTL                      = 0x59E // 1438\n\tSYS___OSENV                         = 0x59F // 1439\n\tSYS_EXPORTWO                        = 0x5A1 // 1441\n\tSYS_EXPORTWORKUNIT                  = 0x5A1 // 1441\n\tSYS_UNDOEXPO                        = 0x5A2 // 1442\n\tSYS_UNDOEXPORTWORKUNIT              = 0x5A2 // 1442\n\tSYS_IMPORTWO                        = 0x5A3 // 1443\n\tSYS_IMPORTWORKUNIT                  = 0x5A3 // 1443\n\tSYS_UNDOIMPO                        = 0x5A4 // 1444\n\tSYS_UNDOIMPORTWORKUNIT              = 0x5A4 // 1444\n\tSYS_EXTRACTW                        = 0x5A5 // 1445\n\tSYS_EXTRACTWORKUNIT                 = 0x5A5 // 1445\n\tSYS___CPL                           = 0x5A6 // 1446\n\tSYS___MAP_INIT                      = 0x5A7 // 1447\n\tSYS___MAP_SERVICE                   = 0x5A8 // 1448\n\tSYS_SIGQUEUE                        = 0x5A9 // 1449\n\tSYS___MOUNT                         = 0x5AA // 1450\n\tSYS___GETUSERID                     = 0x5AB // 1451\n\tSYS___IPDOMAINNAME                  = 0x5AC // 1452\n\tSYS_QUERYENC                        = 0x5AD // 1453\n\tSYS_QUERYWORKUNITCLASSIFICATION     = 0x5AD // 1453\n\tSYS_CONNECTE                        = 0x5AE // 1454\n\tSYS_CONNECTEXPORTIMPORT             = 0x5AE // 1454\n\tSYS___FP_SWAPMODE                   = 0x5AF // 1455\n\tSYS_STRTOLL                         = 0x5B0 // 1456\n\tSYS_STRTOULL                        = 0x5B1 // 1457\n\tSYS___DSA_PREV                      = 0x5B2 // 1458\n\tSYS___EP_FIND                       = 0x5B3 // 1459\n\tSYS___SERVER_THREADS_QUERY          = 0x5B4 // 1460\n\tSYS___MSGRCV_TIMED                  = 0x5B7 // 1463\n\tSYS___SEMOP_TIMED                   = 0x5B8 // 1464\n\tSYS___GET_CPUID                     = 0x5B9 // 1465\n\tSYS___GET_SYSTEM_SETTINGS           = 0x5BA // 1466\n\tSYS_FTELLO                          = 0x5C8 // 1480\n\tSYS_FSEEKO                          = 0x5C9 // 1481\n\tSYS_LLDIV                           = 0x5CB // 1483\n\tSYS_WCSTOLL                         = 0x5CC // 1484\n\tSYS_WCSTOULL                        = 0x5CD // 1485\n\tSYS_LLABS                           = 0x5CE // 1486\n\tSYS___CONSOLE2                      = 0x5D2 // 1490\n\tSYS_INET_NTOP                       = 0x5D3 // 1491\n\tSYS_INET_PTON                       = 0x5D4 // 1492\n\tSYS___RES                           = 0x5D6 // 1494\n\tSYS_RES_MKQUERY                     = 0x5D7 // 1495\n\tSYS_RES_INIT                        = 0x5D8 // 1496\n\tSYS_RES_QUERY                       = 0x5D9 // 1497\n\tSYS_RES_SEARCH                      = 0x5DA // 1498\n\tSYS_RES_SEND                        = 0x5DB // 1499\n\tSYS_RES_QUERYDOMAIN                 = 0x5DC // 1500\n\tSYS_DN_EXPAND                       = 0x5DD // 1501\n\tSYS_DN_SKIPNAME                     = 0x5DE // 1502\n\tSYS_DN_COMP                         = 0x5DF // 1503\n\tSYS_ASCTIME_R                       = 0x5E0 // 1504\n\tSYS_CTIME_R                         = 0x5E1 // 1505\n\tSYS_GMTIME_R                        = 0x5E2 // 1506\n\tSYS_LOCALTIME_R                     = 0x5E3 // 1507\n\tSYS_RAND_R                          = 0x5E4 // 1508\n\tSYS_STRTOK_R                        = 0x5E5 // 1509\n\tSYS_READDIR_R                       = 0x5E6 // 1510\n\tSYS_GETGRGID_R                      = 0x5E7 // 1511\n\tSYS_GETGRNAM_R                      = 0x5E8 // 1512\n\tSYS_GETLOGIN_R                      = 0x5E9 // 1513\n\tSYS_GETPWNAM_R                      = 0x5EA // 1514\n\tSYS_GETPWUID_R                      = 0x5EB // 1515\n\tSYS_TTYNAME_R                       = 0x5EC // 1516\n\tSYS_PTHREAD_ATFORK                  = 0x5ED // 1517\n\tSYS_PTHREAD_ATTR_GETGUARDSIZE       = 0x5EE // 1518\n\tSYS_PTHREAD_ATTR_GETSTACKADDR       = 0x5EF // 1519\n\tSYS_PTHREAD_ATTR_SETGUARDSIZE       = 0x5F0 // 1520\n\tSYS_PTHREAD_ATTR_SETSTACKADDR       = 0x5F1 // 1521\n\tSYS_PTHREAD_CONDATTR_GETPSHARED     = 0x5F2 // 1522\n\tSYS_PTHREAD_CONDATTR_SETPSHARED     = 0x5F3 // 1523\n\tSYS_PTHREAD_GETCONCURRENCY          = 0x5F4 // 1524\n\tSYS_PTHREAD_KEY_DELETE              = 0x5F5 // 1525\n\tSYS_PTHREAD_SETCONCURRENCY          = 0x5F6 // 1526\n\tSYS_PTHREAD_SIGMASK                 = 0x5F7 // 1527\n\tSYS___DISCARDDATA                   = 0x5F8 // 1528\n\tSYS_PTHREAD_ATTR_GETSCHEDPARAM      = 0x5F9 // 1529\n\tSYS_PTHREAD_ATTR_SETSCHEDPARAM      = 0x5FA // 1530\n\tSYS_PTHREAD_ATTR_GETDETACHSTATE_U98 = 0x5FB // 1531\n\tSYS_PTHREAD_ATTR_SETDETACHSTATE_U98 = 0x5FC // 1532\n\tSYS_PTHREAD_DETACH_U98              = 0x5FD // 1533\n\tSYS_PTHREAD_GETSPECIFIC_U98         = 0x5FE // 1534\n\tSYS_PTHREAD_SETCANCELSTATE          = 0x5FF // 1535\n\tSYS_PTHREAD_SETCANCELTYPE           = 0x600 // 1536\n\tSYS_PTHREAD_TESTCANCEL              = 0x601 // 1537\n\tSYS___ATANF_B                       = 0x602 // 1538\n\tSYS___ATANL_B                       = 0x603 // 1539\n\tSYS___CEILF_B                       = 0x604 // 1540\n\tSYS___CEILL_B                       = 0x605 // 1541\n\tSYS___COSF_B                        = 0x606 // 1542\n\tSYS___COSL_B                        = 0x607 // 1543\n\tSYS___FABSF_B                       = 0x608 // 1544\n\tSYS___FABSL_B                       = 0x609 // 1545\n\tSYS___FLOORF_B                      = 0x60A // 1546\n\tSYS___FLOORL_B                      = 0x60B // 1547\n\tSYS___FREXPF_B                      = 0x60C // 1548\n\tSYS___FREXPL_B                      = 0x60D // 1549\n\tSYS___LDEXPF_B                      = 0x60E // 1550\n\tSYS___LDEXPL_B                      = 0x60F // 1551\n\tSYS___SINF_B                        = 0x610 // 1552\n\tSYS___SINL_B                        = 0x611 // 1553\n\tSYS___TANF_B                        = 0x612 // 1554\n\tSYS___TANL_B                        = 0x613 // 1555\n\tSYS___TANHF_B                       = 0x614 // 1556\n\tSYS___TANHL_B                       = 0x615 // 1557\n\tSYS___ACOSF_B                       = 0x616 // 1558\n\tSYS___ACOSL_B                       = 0x617 // 1559\n\tSYS___ASINF_B                       = 0x618 // 1560\n\tSYS___ASINL_B                       = 0x619 // 1561\n\tSYS___ATAN2F_B                      = 0x61A // 1562\n\tSYS___ATAN2L_B                      = 0x61B // 1563\n\tSYS___COSHF_B                       = 0x61C // 1564\n\tSYS___COSHL_B                       = 0x61D // 1565\n\tSYS___EXPF_B                        = 0x61E // 1566\n\tSYS___EXPL_B                        = 0x61F // 1567\n\tSYS___LOGF_B                        = 0x620 // 1568\n\tSYS___LOGL_B                        = 0x621 // 1569\n\tSYS___LOG10F_B                      = 0x622 // 1570\n\tSYS___LOG10L_B                      = 0x623 // 1571\n\tSYS___POWF_B                        = 0x624 // 1572\n\tSYS___POWL_B                        = 0x625 // 1573\n\tSYS___SINHF_B                       = 0x626 // 1574\n\tSYS___SINHL_B                       = 0x627 // 1575\n\tSYS___SQRTF_B                       = 0x628 // 1576\n\tSYS___SQRTL_B                       = 0x629 // 1577\n\tSYS___ABSF_B                        = 0x62A // 1578\n\tSYS___ABS_B                         = 0x62B // 1579\n\tSYS___ABSL_B                        = 0x62C // 1580\n\tSYS___FMODF_B                       = 0x62D // 1581\n\tSYS___FMODL_B                       = 0x62E // 1582\n\tSYS___MODFF_B                       = 0x62F // 1583\n\tSYS___MODFL_B                       = 0x630 // 1584\n\tSYS_ABSF                            = 0x631 // 1585\n\tSYS_ABSL                            = 0x632 // 1586\n\tSYS_ACOSF                           = 0x633 // 1587\n\tSYS_ACOSL                           = 0x634 // 1588\n\tSYS_ASINF                           = 0x635 // 1589\n\tSYS_ASINL                           = 0x636 // 1590\n\tSYS_ATAN2F                          = 0x637 // 1591\n\tSYS_ATAN2L                          = 0x638 // 1592\n\tSYS_ATANF                           = 0x639 // 1593\n\tSYS_ATANL                           = 0x63A // 1594\n\tSYS_CEILF                           = 0x63B // 1595\n\tSYS_CEILL                           = 0x63C // 1596\n\tSYS_COSF                            = 0x63D // 1597\n\tSYS_COSL                            = 0x63E // 1598\n\tSYS_COSHF                           = 0x63F // 1599\n\tSYS_COSHL                           = 0x640 // 1600\n\tSYS_EXPF                            = 0x641 // 1601\n\tSYS_EXPL                            = 0x642 // 1602\n\tSYS_TANHF                           = 0x643 // 1603\n\tSYS_TANHL                           = 0x644 // 1604\n\tSYS_LOG10F                          = 0x645 // 1605\n\tSYS_LOG10L                          = 0x646 // 1606\n\tSYS_LOGF                            = 0x647 // 1607\n\tSYS_LOGL                            = 0x648 // 1608\n\tSYS_POWF                            = 0x649 // 1609\n\tSYS_POWL                            = 0x64A // 1610\n\tSYS_SINF                            = 0x64B // 1611\n\tSYS_SINL                            = 0x64C // 1612\n\tSYS_SQRTF                           = 0x64D // 1613\n\tSYS_SQRTL                           = 0x64E // 1614\n\tSYS_SINHF                           = 0x64F // 1615\n\tSYS_SINHL                           = 0x650 // 1616\n\tSYS_TANF                            = 0x651 // 1617\n\tSYS_TANL                            = 0x652 // 1618\n\tSYS_FABSF                           = 0x653 // 1619\n\tSYS_FABSL                           = 0x654 // 1620\n\tSYS_FLOORF                          = 0x655 // 1621\n\tSYS_FLOORL                          = 0x656 // 1622\n\tSYS_FMODF                           = 0x657 // 1623\n\tSYS_FMODL                           = 0x658 // 1624\n\tSYS_FREXPF                          = 0x659 // 1625\n\tSYS_FREXPL                          = 0x65A // 1626\n\tSYS_LDEXPF                          = 0x65B // 1627\n\tSYS_LDEXPL                          = 0x65C // 1628\n\tSYS_MODFF                           = 0x65D // 1629\n\tSYS_MODFL                           = 0x65E // 1630\n\tSYS_BTOWC                           = 0x65F // 1631\n\tSYS___CHATTR                        = 0x660 // 1632\n\tSYS___FCHATTR                       = 0x661 // 1633\n\tSYS___TOCCSID                       = 0x662 // 1634\n\tSYS___CSNAMETYPE                    = 0x663 // 1635\n\tSYS___TOCSNAME                      = 0x664 // 1636\n\tSYS___CCSIDTYPE                     = 0x665 // 1637\n\tSYS___AE_CORRESTBL_QUERY            = 0x666 // 1638\n\tSYS___AE_AUTOCONVERT_STATE          = 0x667 // 1639\n\tSYS_DN_FIND                         = 0x668 // 1640\n\tSYS___GETHOSTBYADDR_A               = 0x669 // 1641\n\tSYS___GETHOSTBYNAME_A               = 0x66A // 1642\n\tSYS___RES_INIT_A                    = 0x66B // 1643\n\tSYS___GETHOSTBYADDR_R_A             = 0x66C // 1644\n\tSYS___GETHOSTBYNAME_R_A             = 0x66D // 1645\n\tSYS___CHARMAP_INIT_A                = 0x66E // 1646\n\tSYS___MBLEN_A                       = 0x66F // 1647\n\tSYS___MBLEN_SB_A                    = 0x670 // 1648\n\tSYS___MBLEN_STD_A                   = 0x671 // 1649\n\tSYS___MBLEN_UTF                     = 0x672 // 1650\n\tSYS___MBSTOWCS_A                    = 0x673 // 1651\n\tSYS___MBSTOWCS_STD_A                = 0x674 // 1652\n\tSYS___MBTOWC_A                      = 0x675 // 1653\n\tSYS___MBTOWC_ISO1                   = 0x676 // 1654\n\tSYS___MBTOWC_SBCS                   = 0x677 // 1655\n\tSYS___MBTOWC_MBCS                   = 0x678 // 1656\n\tSYS___MBTOWC_UTF                    = 0x679 // 1657\n\tSYS___WCSTOMBS_A                    = 0x67A // 1658\n\tSYS___WCSTOMBS_STD_A                = 0x67B // 1659\n\tSYS___WCSWIDTH_A                    = 0x67C // 1660\n\tSYS___GETGRGID_R_A                  = 0x67D // 1661\n\tSYS___WCSWIDTH_STD_A                = 0x67E // 1662\n\tSYS___WCSWIDTH_ASIA                 = 0x67F // 1663\n\tSYS___CSID_A                        = 0x680 // 1664\n\tSYS___CSID_STD_A                    = 0x681 // 1665\n\tSYS___WCSID_A                       = 0x682 // 1666\n\tSYS___WCSID_STD_A                   = 0x683 // 1667\n\tSYS___WCTOMB_A                      = 0x684 // 1668\n\tSYS___WCTOMB_ISO1                   = 0x685 // 1669\n\tSYS___WCTOMB_STD_A                  = 0x686 // 1670\n\tSYS___WCTOMB_UTF                    = 0x687 // 1671\n\tSYS___WCWIDTH_A                     = 0x688 // 1672\n\tSYS___GETGRNAM_R_A                  = 0x689 // 1673\n\tSYS___WCWIDTH_STD_A                 = 0x68A // 1674\n\tSYS___WCWIDTH_ASIA                  = 0x68B // 1675\n\tSYS___GETPWNAM_R_A                  = 0x68C // 1676\n\tSYS___GETPWUID_R_A                  = 0x68D // 1677\n\tSYS___GETLOGIN_R_A                  = 0x68E // 1678\n\tSYS___TTYNAME_R_A                   = 0x68F // 1679\n\tSYS___READDIR_R_A                   = 0x690 // 1680\n\tSYS___E2A_S                         = 0x691 // 1681\n\tSYS___FNMATCH_A                     = 0x692 // 1682\n\tSYS___FNMATCH_C_A                   = 0x693 // 1683\n\tSYS___EXECL_A                       = 0x694 // 1684\n\tSYS___FNMATCH_STD_A                 = 0x695 // 1685\n\tSYS___REGCOMP_A                     = 0x696 // 1686\n\tSYS___REGCOMP_STD_A                 = 0x697 // 1687\n\tSYS___REGERROR_A                    = 0x698 // 1688\n\tSYS___REGERROR_STD_A                = 0x699 // 1689\n\tSYS___REGEXEC_A                     = 0x69A // 1690\n\tSYS___REGEXEC_STD_A                 = 0x69B // 1691\n\tSYS___REGFREE_A                     = 0x69C // 1692\n\tSYS___REGFREE_STD_A                 = 0x69D // 1693\n\tSYS___STRCOLL_A                     = 0x69E // 1694\n\tSYS___STRCOLL_C_A                   = 0x69F // 1695\n\tSYS___EXECLE_A                      = 0x6A0 // 1696\n\tSYS___STRCOLL_STD_A                 = 0x6A1 // 1697\n\tSYS___STRXFRM_A                     = 0x6A2 // 1698\n\tSYS___STRXFRM_C_A                   = 0x6A3 // 1699\n\tSYS___EXECLP_A                      = 0x6A4 // 1700\n\tSYS___STRXFRM_STD_A                 = 0x6A5 // 1701\n\tSYS___WCSCOLL_A                     = 0x6A6 // 1702\n\tSYS___WCSCOLL_C_A                   = 0x6A7 // 1703\n\tSYS___WCSCOLL_STD_A                 = 0x6A8 // 1704\n\tSYS___WCSXFRM_A                     = 0x6A9 // 1705\n\tSYS___WCSXFRM_C_A                   = 0x6AA // 1706\n\tSYS___WCSXFRM_STD_A                 = 0x6AB // 1707\n\tSYS___COLLATE_INIT_A                = 0x6AC // 1708\n\tSYS___WCTYPE_A                      = 0x6AD // 1709\n\tSYS___GET_WCTYPE_STD_A              = 0x6AE // 1710\n\tSYS___CTYPE_INIT_A                  = 0x6AF // 1711\n\tSYS___ISWCTYPE_A                    = 0x6B0 // 1712\n\tSYS___EXECV_A                       = 0x6B1 // 1713\n\tSYS___IS_WCTYPE_STD_A               = 0x6B2 // 1714\n\tSYS___TOWLOWER_A                    = 0x6B3 // 1715\n\tSYS___TOWLOWER_STD_A                = 0x6B4 // 1716\n\tSYS___TOWUPPER_A                    = 0x6B5 // 1717\n\tSYS___TOWUPPER_STD_A                = 0x6B6 // 1718\n\tSYS___LOCALE_INIT_A                 = 0x6B7 // 1719\n\tSYS___LOCALECONV_A                  = 0x6B8 // 1720\n\tSYS___LOCALECONV_STD_A              = 0x6B9 // 1721\n\tSYS___NL_LANGINFO_A                 = 0x6BA // 1722\n\tSYS___NL_LNAGINFO_STD_A             = 0x6BB // 1723\n\tSYS___MONETARY_INIT_A               = 0x6BC // 1724\n\tSYS___STRFMON_A                     = 0x6BD // 1725\n\tSYS___STRFMON_STD_A                 = 0x6BE // 1726\n\tSYS___GETADDRINFO_A                 = 0x6BF // 1727\n\tSYS___CATGETS_A                     = 0x6C0 // 1728\n\tSYS___EXECVE_A                      = 0x6C1 // 1729\n\tSYS___EXECVP_A                      = 0x6C2 // 1730\n\tSYS___SPAWN_A                       = 0x6C3 // 1731\n\tSYS___GETNAMEINFO_A                 = 0x6C4 // 1732\n\tSYS___SPAWNP_A                      = 0x6C5 // 1733\n\tSYS___NUMERIC_INIT_A                = 0x6C6 // 1734\n\tSYS___RESP_INIT_A                   = 0x6C7 // 1735\n\tSYS___RPMATCH_A                     = 0x6C8 // 1736\n\tSYS___RPMATCH_C_A                   = 0x6C9 // 1737\n\tSYS___RPMATCH_STD_A                 = 0x6CA // 1738\n\tSYS___TIME_INIT_A                   = 0x6CB // 1739\n\tSYS___STRFTIME_A                    = 0x6CC // 1740\n\tSYS___STRFTIME_STD_A                = 0x6CD // 1741\n\tSYS___STRPTIME_A                    = 0x6CE // 1742\n\tSYS___STRPTIME_STD_A                = 0x6CF // 1743\n\tSYS___WCSFTIME_A                    = 0x6D0 // 1744\n\tSYS___WCSFTIME_STD_A                = 0x6D1 // 1745\n\tSYS_____SPAWN2_A                    = 0x6D2 // 1746\n\tSYS_____SPAWNP2_A                   = 0x6D3 // 1747\n\tSYS___SYNTAX_INIT_A                 = 0x6D4 // 1748\n\tSYS___TOD_INIT_A                    = 0x6D5 // 1749\n\tSYS___NL_CSINFO_A                   = 0x6D6 // 1750\n\tSYS___NL_MONINFO_A                  = 0x6D7 // 1751\n\tSYS___NL_NUMINFO_A                  = 0x6D8 // 1752\n\tSYS___NL_RESPINFO_A                 = 0x6D9 // 1753\n\tSYS___NL_TIMINFO_A                  = 0x6DA // 1754\n\tSYS___IF_NAMETOINDEX_A              = 0x6DB // 1755\n\tSYS___IF_INDEXTONAME_A              = 0x6DC // 1756\n\tSYS___PRINTF_A                      = 0x6DD // 1757\n\tSYS___ICONV_OPEN_A                  = 0x6DE // 1758\n\tSYS___DLLLOAD_A                     = 0x6DF // 1759\n\tSYS___DLLQUERYFN_A                  = 0x6E0 // 1760\n\tSYS___DLLQUERYVAR_A                 = 0x6E1 // 1761\n\tSYS_____CHATTR_A                    = 0x6E2 // 1762\n\tSYS___E2A_L                         = 0x6E3 // 1763\n\tSYS_____TOCCSID_A                   = 0x6E4 // 1764\n\tSYS_____TOCSNAME_A                  = 0x6E5 // 1765\n\tSYS_____CCSIDTYPE_A                 = 0x6E6 // 1766\n\tSYS_____CSNAMETYPE_A                = 0x6E7 // 1767\n\tSYS___CHMOD_A                       = 0x6E8 // 1768\n\tSYS___MKDIR_A                       = 0x6E9 // 1769\n\tSYS___STAT_A                        = 0x6EA // 1770\n\tSYS___STAT_O_A                      = 0x6EB // 1771\n\tSYS___MKFIFO_A                      = 0x6EC // 1772\n\tSYS_____OPEN_STAT_A                 = 0x6ED // 1773\n\tSYS___LSTAT_A                       = 0x6EE // 1774\n\tSYS___LSTAT_O_A                     = 0x6EF // 1775\n\tSYS___MKNOD_A                       = 0x6F0 // 1776\n\tSYS___MOUNT_A                       = 0x6F1 // 1777\n\tSYS___UMOUNT_A                      = 0x6F2 // 1778\n\tSYS___CHAUDIT_A                     = 0x6F4 // 1780\n\tSYS___W_GETMNTENT_A                 = 0x6F5 // 1781\n\tSYS___CREAT_A                       = 0x6F6 // 1782\n\tSYS___OPEN_A                        = 0x6F7 // 1783\n\tSYS___SETLOCALE_A                   = 0x6F9 // 1785\n\tSYS___FPRINTF_A                     = 0x6FA // 1786\n\tSYS___SPRINTF_A                     = 0x6FB // 1787\n\tSYS___VFPRINTF_A                    = 0x6FC // 1788\n\tSYS___VPRINTF_A                     = 0x6FD // 1789\n\tSYS___VSPRINTF_A                    = 0x6FE // 1790\n\tSYS___VSWPRINTF_A                   = 0x6FF // 1791\n\tSYS___SWPRINTF_A                    = 0x700 // 1792\n\tSYS___FSCANF_A                      = 0x701 // 1793\n\tSYS___SCANF_A                       = 0x702 // 1794\n\tSYS___SSCANF_A                      = 0x703 // 1795\n\tSYS___SWSCANF_A                     = 0x704 // 1796\n\tSYS___ATOF_A                        = 0x705 // 1797\n\tSYS___ATOI_A                        = 0x706 // 1798\n\tSYS___ATOL_A                        = 0x707 // 1799\n\tSYS___STRTOD_A                      = 0x708 // 1800\n\tSYS___STRTOL_A                      = 0x709 // 1801\n\tSYS___STRTOUL_A                     = 0x70A // 1802\n\tSYS_____AE_CORRESTBL_QUERY_A        = 0x70B // 1803\n\tSYS___A64L_A                        = 0x70C // 1804\n\tSYS___ECVT_A                        = 0x70D // 1805\n\tSYS___FCVT_A                        = 0x70E // 1806\n\tSYS___GCVT_A                        = 0x70F // 1807\n\tSYS___L64A_A                        = 0x710 // 1808\n\tSYS___STRERROR_A                    = 0x711 // 1809\n\tSYS___PERROR_A                      = 0x712 // 1810\n\tSYS___FETCH_A                       = 0x713 // 1811\n\tSYS___GETENV_A                      = 0x714 // 1812\n\tSYS___MKSTEMP_A                     = 0x717 // 1815\n\tSYS___PTSNAME_A                     = 0x718 // 1816\n\tSYS___PUTENV_A                      = 0x719 // 1817\n\tSYS___REALPATH_A                    = 0x71A // 1818\n\tSYS___SETENV_A                      = 0x71B // 1819\n\tSYS___SYSTEM_A                      = 0x71C // 1820\n\tSYS___GETOPT_A                      = 0x71D // 1821\n\tSYS___CATOPEN_A                     = 0x71E // 1822\n\tSYS___ACCESS_A                      = 0x71F // 1823\n\tSYS___CHDIR_A                       = 0x720 // 1824\n\tSYS___CHOWN_A                       = 0x721 // 1825\n\tSYS___CHROOT_A                      = 0x722 // 1826\n\tSYS___GETCWD_A                      = 0x723 // 1827\n\tSYS___GETWD_A                       = 0x724 // 1828\n\tSYS___LCHOWN_A                      = 0x725 // 1829\n\tSYS___LINK_A                        = 0x726 // 1830\n\tSYS___PATHCONF_A                    = 0x727 // 1831\n\tSYS___IF_NAMEINDEX_A                = 0x728 // 1832\n\tSYS___READLINK_A                    = 0x729 // 1833\n\tSYS___RMDIR_A                       = 0x72A // 1834\n\tSYS___STATVFS_A                     = 0x72B // 1835\n\tSYS___SYMLINK_A                     = 0x72C // 1836\n\tSYS___TRUNCATE_A                    = 0x72D // 1837\n\tSYS___UNLINK_A                      = 0x72E // 1838\n\tSYS___GAI_STRERROR_A                = 0x72F // 1839\n\tSYS___EXTLINK_NP_A                  = 0x730 // 1840\n\tSYS___ISALNUM_A                     = 0x731 // 1841\n\tSYS___ISALPHA_A                     = 0x732 // 1842\n\tSYS___A2E_S                         = 0x733 // 1843\n\tSYS___ISCNTRL_A                     = 0x734 // 1844\n\tSYS___ISDIGIT_A                     = 0x735 // 1845\n\tSYS___ISGRAPH_A                     = 0x736 // 1846\n\tSYS___ISLOWER_A                     = 0x737 // 1847\n\tSYS___ISPRINT_A                     = 0x738 // 1848\n\tSYS___ISPUNCT_A                     = 0x739 // 1849\n\tSYS___ISSPACE_A                     = 0x73A // 1850\n\tSYS___ISUPPER_A                     = 0x73B // 1851\n\tSYS___ISXDIGIT_A                    = 0x73C // 1852\n\tSYS___TOLOWER_A                     = 0x73D // 1853\n\tSYS___TOUPPER_A                     = 0x73E // 1854\n\tSYS___ISWALNUM_A                    = 0x73F // 1855\n\tSYS___ISWALPHA_A                    = 0x740 // 1856\n\tSYS___A2E_L                         = 0x741 // 1857\n\tSYS___ISWCNTRL_A                    = 0x742 // 1858\n\tSYS___ISWDIGIT_A                    = 0x743 // 1859\n\tSYS___ISWGRAPH_A                    = 0x744 // 1860\n\tSYS___ISWLOWER_A                    = 0x745 // 1861\n\tSYS___ISWPRINT_A                    = 0x746 // 1862\n\tSYS___ISWPUNCT_A                    = 0x747 // 1863\n\tSYS___ISWSPACE_A                    = 0x748 // 1864\n\tSYS___ISWUPPER_A                    = 0x749 // 1865\n\tSYS___ISWXDIGIT_A                   = 0x74A // 1866\n\tSYS___CONFSTR_A                     = 0x74B // 1867\n\tSYS___FTOK_A                        = 0x74C // 1868\n\tSYS___MKTEMP_A                      = 0x74D // 1869\n\tSYS___FDOPEN_A                      = 0x74E // 1870\n\tSYS___FLDATA_A                      = 0x74F // 1871\n\tSYS___REMOVE_A                      = 0x750 // 1872\n\tSYS___RENAME_A                      = 0x751 // 1873\n\tSYS___TMPNAM_A                      = 0x752 // 1874\n\tSYS___FOPEN_A                       = 0x753 // 1875\n\tSYS___FREOPEN_A                     = 0x754 // 1876\n\tSYS___CUSERID_A                     = 0x755 // 1877\n\tSYS___POPEN_A                       = 0x756 // 1878\n\tSYS___TEMPNAM_A                     = 0x757 // 1879\n\tSYS___FTW_A                         = 0x758 // 1880\n\tSYS___GETGRENT_A                    = 0x759 // 1881\n\tSYS___GETGRGID_A                    = 0x75A // 1882\n\tSYS___GETGRNAM_A                    = 0x75B // 1883\n\tSYS___GETGROUPSBYNAME_A             = 0x75C // 1884\n\tSYS___GETHOSTENT_A                  = 0x75D // 1885\n\tSYS___GETHOSTNAME_A                 = 0x75E // 1886\n\tSYS___GETLOGIN_A                    = 0x75F // 1887\n\tSYS___INET_NTOP_A                   = 0x760 // 1888\n\tSYS___GETPASS_A                     = 0x761 // 1889\n\tSYS___GETPWENT_A                    = 0x762 // 1890\n\tSYS___GETPWNAM_A                    = 0x763 // 1891\n\tSYS___GETPWUID_A                    = 0x764 // 1892\n\tSYS_____CHECK_RESOURCE_AUTH_NP_A    = 0x765 // 1893\n\tSYS___CHECKSCHENV_A                 = 0x766 // 1894\n\tSYS___CONNECTSERVER_A               = 0x767 // 1895\n\tSYS___CONNECTWORKMGR_A              = 0x768 // 1896\n\tSYS_____CONSOLE_A                   = 0x769 // 1897\n\tSYS___CREATEWORKUNIT_A              = 0x76A // 1898\n\tSYS___CTERMID_A                     = 0x76B // 1899\n\tSYS___FMTMSG_A                      = 0x76C // 1900\n\tSYS___INITGROUPS_A                  = 0x76D // 1901\n\tSYS_____LOGIN_A                     = 0x76E // 1902\n\tSYS___MSGRCV_A                      = 0x76F // 1903\n\tSYS___MSGSND_A                      = 0x770 // 1904\n\tSYS___MSGXRCV_A                     = 0x771 // 1905\n\tSYS___NFTW_A                        = 0x772 // 1906\n\tSYS_____PASSWD_A                    = 0x773 // 1907\n\tSYS___PTHREAD_SECURITY_NP_A         = 0x774 // 1908\n\tSYS___QUERYMETRICS_A                = 0x775 // 1909\n\tSYS___QUERYSCHENV                   = 0x776 // 1910\n\tSYS___READV_A                       = 0x777 // 1911\n\tSYS_____SERVER_CLASSIFY_A           = 0x778 // 1912\n\tSYS_____SERVER_INIT_A               = 0x779 // 1913\n\tSYS_____SERVER_PWU_A                = 0x77A // 1914\n\tSYS___STRCASECMP_A                  = 0x77B // 1915\n\tSYS___STRNCASECMP_A                 = 0x77C // 1916\n\tSYS___TTYNAME_A                     = 0x77D // 1917\n\tSYS___UNAME_A                       = 0x77E // 1918\n\tSYS___UTIMES_A                      = 0x77F // 1919\n\tSYS___W_GETPSENT_A                  = 0x780 // 1920\n\tSYS___WRITEV_A                      = 0x781 // 1921\n\tSYS___W_STATFS_A                    = 0x782 // 1922\n\tSYS___W_STATVFS_A                   = 0x783 // 1923\n\tSYS___FPUTC_A                       = 0x784 // 1924\n\tSYS___PUTCHAR_A                     = 0x785 // 1925\n\tSYS___PUTS_A                        = 0x786 // 1926\n\tSYS___FGETS_A                       = 0x787 // 1927\n\tSYS___GETS_A                        = 0x788 // 1928\n\tSYS___FPUTS_A                       = 0x789 // 1929\n\tSYS___FREAD_A                       = 0x78A // 1930\n\tSYS___FWRITE_A                      = 0x78B // 1931\n\tSYS___OPEN_O_A                      = 0x78C // 1932\n\tSYS___ISASCII                       = 0x78D // 1933\n\tSYS___CREAT_O_A                     = 0x78E // 1934\n\tSYS___ENVNA                         = 0x78F // 1935\n\tSYS___PUTC_A                        = 0x790 // 1936\n\tSYS___AE_THREAD_SETMODE             = 0x791 // 1937\n\tSYS___AE_THREAD_SWAPMODE            = 0x792 // 1938\n\tSYS___GETNETBYADDR_A                = 0x793 // 1939\n\tSYS___GETNETBYNAME_A                = 0x794 // 1940\n\tSYS___GETNETENT_A                   = 0x795 // 1941\n\tSYS___GETPROTOBYNAME_A              = 0x796 // 1942\n\tSYS___GETPROTOBYNUMBER_A            = 0x797 // 1943\n\tSYS___GETPROTOENT_A                 = 0x798 // 1944\n\tSYS___GETSERVBYNAME_A               = 0x799 // 1945\n\tSYS___GETSERVBYPORT_A               = 0x79A // 1946\n\tSYS___GETSERVENT_A                  = 0x79B // 1947\n\tSYS___ASCTIME_A                     = 0x79C // 1948\n\tSYS___CTIME_A                       = 0x79D // 1949\n\tSYS___GETDATE_A                     = 0x79E // 1950\n\tSYS___TZSET_A                       = 0x79F // 1951\n\tSYS___UTIME_A                       = 0x7A0 // 1952\n\tSYS___ASCTIME_R_A                   = 0x7A1 // 1953\n\tSYS___CTIME_R_A                     = 0x7A2 // 1954\n\tSYS___STRTOLL_A                     = 0x7A3 // 1955\n\tSYS___STRTOULL_A                    = 0x7A4 // 1956\n\tSYS___FPUTWC_A                      = 0x7A5 // 1957\n\tSYS___PUTWC_A                       = 0x7A6 // 1958\n\tSYS___PUTWCHAR_A                    = 0x7A7 // 1959\n\tSYS___FPUTWS_A                      = 0x7A8 // 1960\n\tSYS___UNGETWC_A                     = 0x7A9 // 1961\n\tSYS___FGETWC_A                      = 0x7AA // 1962\n\tSYS___GETWC_A                       = 0x7AB // 1963\n\tSYS___GETWCHAR_A                    = 0x7AC // 1964\n\tSYS___FGETWS_A                      = 0x7AD // 1965\n\tSYS___GETTIMEOFDAY_A                = 0x7AE // 1966\n\tSYS___GMTIME_A                      = 0x7AF // 1967\n\tSYS___GMTIME_R_A                    = 0x7B0 // 1968\n\tSYS___LOCALTIME_A                   = 0x7B1 // 1969\n\tSYS___LOCALTIME_R_A                 = 0x7B2 // 1970\n\tSYS___MKTIME_A                      = 0x7B3 // 1971\n\tSYS___TZZNA                         = 0x7B4 // 1972\n\tSYS_UNATEXIT                        = 0x7B5 // 1973\n\tSYS___CEE3DMP_A                     = 0x7B6 // 1974\n\tSYS___CDUMP_A                       = 0x7B7 // 1975\n\tSYS___CSNAP_A                       = 0x7B8 // 1976\n\tSYS___CTEST_A                       = 0x7B9 // 1977\n\tSYS___CTRACE_A                      = 0x7BA // 1978\n\tSYS___VSWPRNTF2_A                   = 0x7BB // 1979\n\tSYS___INET_PTON_A                   = 0x7BC // 1980\n\tSYS___SYSLOG_A                      = 0x7BD // 1981\n\tSYS___CRYPT_A                       = 0x7BE // 1982\n\tSYS_____OPENDIR2_A                  = 0x7BF // 1983\n\tSYS_____READDIR2_A                  = 0x7C0 // 1984\n\tSYS___OPENDIR_A                     = 0x7C2 // 1986\n\tSYS___READDIR_A                     = 0x7C3 // 1987\n\tSYS_PREAD                           = 0x7C7 // 1991\n\tSYS_PWRITE                          = 0x7C8 // 1992\n\tSYS_M_CREATE_LAYOUT                 = 0x7C9 // 1993\n\tSYS_M_DESTROY_LAYOUT                = 0x7CA // 1994\n\tSYS_M_GETVALUES_LAYOUT              = 0x7CB // 1995\n\tSYS_M_SETVALUES_LAYOUT              = 0x7CC // 1996\n\tSYS_M_TRANSFORM_LAYOUT              = 0x7CD // 1997\n\tSYS_M_WTRANSFORM_LAYOUT             = 0x7CE // 1998\n\tSYS_FWPRINTF                        = 0x7D1 // 2001\n\tSYS_WPRINTF                         = 0x7D2 // 2002\n\tSYS_VFWPRINT                        = 0x7D3 // 2003\n\tSYS_VFWPRINTF                       = 0x7D3 // 2003\n\tSYS_VWPRINTF                        = 0x7D4 // 2004\n\tSYS_FWSCANF                         = 0x7D5 // 2005\n\tSYS_WSCANF                          = 0x7D6 // 2006\n\tSYS_WCTRANS                         = 0x7D7 // 2007\n\tSYS_TOWCTRAN                        = 0x7D8 // 2008\n\tSYS_TOWCTRANS                       = 0x7D8 // 2008\n\tSYS___WCSTOD_A                      = 0x7D9 // 2009\n\tSYS___WCSTOL_A                      = 0x7DA // 2010\n\tSYS___WCSTOUL_A                     = 0x7DB // 2011\n\tSYS___BASENAME_A                    = 0x7DC // 2012\n\tSYS___DIRNAME_A                     = 0x7DD // 2013\n\tSYS___GLOB_A                        = 0x7DE // 2014\n\tSYS_FWIDE                           = 0x7DF // 2015\n\tSYS___OSNAME                        = 0x7E0 // 2016\n\tSYS_____OSNAME_A                    = 0x7E1 // 2017\n\tSYS___BTOWC_A                       = 0x7E4 // 2020\n\tSYS___WCTOB_A                       = 0x7E5 // 2021\n\tSYS___DBM_OPEN_A                    = 0x7E6 // 2022\n\tSYS___VFPRINTF2_A                   = 0x7E7 // 2023\n\tSYS___VPRINTF2_A                    = 0x7E8 // 2024\n\tSYS___VSPRINTF2_A                   = 0x7E9 // 2025\n\tSYS___CEIL_H                        = 0x7EA // 2026\n\tSYS___FLOOR_H                       = 0x7EB // 2027\n\tSYS___MODF_H                        = 0x7EC // 2028\n\tSYS___FABS_H                        = 0x7ED // 2029\n\tSYS___J0_H                          = 0x7EE // 2030\n\tSYS___J1_H                          = 0x7EF // 2031\n\tSYS___JN_H                          = 0x7F0 // 2032\n\tSYS___Y0_H                          = 0x7F1 // 2033\n\tSYS___Y1_H                          = 0x7F2 // 2034\n\tSYS___YN_H                          = 0x7F3 // 2035\n\tSYS___CEILF_H                       = 0x7F4 // 2036\n\tSYS___CEILL_H                       = 0x7F5 // 2037\n\tSYS___FLOORF_H                      = 0x7F6 // 2038\n\tSYS___FLOORL_H                      = 0x7F7 // 2039\n\tSYS___MODFF_H                       = 0x7F8 // 2040\n\tSYS___MODFL_H                       = 0x7F9 // 2041\n\tSYS___FABSF_H                       = 0x7FA // 2042\n\tSYS___FABSL_H                       = 0x7FB // 2043\n\tSYS___MALLOC24                      = 0x7FC // 2044\n\tSYS___MALLOC31                      = 0x7FD // 2045\n\tSYS_ACL_INIT                        = 0x7FE // 2046\n\tSYS_ACL_FREE                        = 0x7FF // 2047\n\tSYS_ACL_FIRST_ENTRY                 = 0x800 // 2048\n\tSYS_ACL_GET_ENTRY                   = 0x801 // 2049\n\tSYS_ACL_VALID                       = 0x802 // 2050\n\tSYS_ACL_CREATE_ENTRY                = 0x803 // 2051\n\tSYS_ACL_DELETE_ENTRY                = 0x804 // 2052\n\tSYS_ACL_UPDATE_ENTRY                = 0x805 // 2053\n\tSYS_ACL_DELETE_FD                   = 0x806 // 2054\n\tSYS_ACL_DELETE_FILE                 = 0x807 // 2055\n\tSYS_ACL_GET_FD                      = 0x808 // 2056\n\tSYS_ACL_GET_FILE                    = 0x809 // 2057\n\tSYS_ACL_SET_FD                      = 0x80A // 2058\n\tSYS_ACL_SET_FILE                    = 0x80B // 2059\n\tSYS_ACL_FROM_TEXT                   = 0x80C // 2060\n\tSYS_ACL_TO_TEXT                     = 0x80D // 2061\n\tSYS_ACL_SORT                        = 0x80E // 2062\n\tSYS___SHUTDOWN_REGISTRATION         = 0x80F // 2063\n\tSYS___ERFL_B                        = 0x810 // 2064\n\tSYS___ERFCL_B                       = 0x811 // 2065\n\tSYS___LGAMMAL_B                     = 0x812 // 2066\n\tSYS___SETHOOKEVENTS                 = 0x813 // 2067\n\tSYS_IF_NAMETOINDEX                  = 0x814 // 2068\n\tSYS_IF_INDEXTONAME                  = 0x815 // 2069\n\tSYS_IF_NAMEINDEX                    = 0x816 // 2070\n\tSYS_IF_FREENAMEINDEX                = 0x817 // 2071\n\tSYS_GETADDRINFO                     = 0x818 // 2072\n\tSYS_GETNAMEINFO                     = 0x819 // 2073\n\tSYS_FREEADDRINFO                    = 0x81A // 2074\n\tSYS_GAI_STRERROR                    = 0x81B // 2075\n\tSYS_REXEC_AF                        = 0x81C // 2076\n\tSYS___POE                           = 0x81D // 2077\n\tSYS___DYNALLOC_A                    = 0x81F // 2079\n\tSYS___DYNFREE_A                     = 0x820 // 2080\n\tSYS___RES_QUERY_A                   = 0x821 // 2081\n\tSYS___RES_SEARCH_A                  = 0x822 // 2082\n\tSYS___RES_QUERYDOMAIN_A             = 0x823 // 2083\n\tSYS___RES_MKQUERY_A                 = 0x824 // 2084\n\tSYS___RES_SEND_A                    = 0x825 // 2085\n\tSYS___DN_EXPAND_A                   = 0x826 // 2086\n\tSYS___DN_SKIPNAME_A                 = 0x827 // 2087\n\tSYS___DN_COMP_A                     = 0x828 // 2088\n\tSYS___DN_FIND_A                     = 0x829 // 2089\n\tSYS___NLIST_A                       = 0x82A // 2090\n\tSYS_____TCGETCP_A                   = 0x82B // 2091\n\tSYS_____TCSETCP_A                   = 0x82C // 2092\n\tSYS_____W_PIOCTL_A                  = 0x82E // 2094\n\tSYS___INET_ADDR_A                   = 0x82F // 2095\n\tSYS___INET_NTOA_A                   = 0x830 // 2096\n\tSYS___INET_NETWORK_A                = 0x831 // 2097\n\tSYS___ACCEPT_A                      = 0x832 // 2098\n\tSYS___ACCEPT_AND_RECV_A             = 0x833 // 2099\n\tSYS___BIND_A                        = 0x834 // 2100\n\tSYS___CONNECT_A                     = 0x835 // 2101\n\tSYS___GETPEERNAME_A                 = 0x836 // 2102\n\tSYS___GETSOCKNAME_A                 = 0x837 // 2103\n\tSYS___RECVFROM_A                    = 0x838 // 2104\n\tSYS___SENDTO_A                      = 0x839 // 2105\n\tSYS___SENDMSG_A                     = 0x83A // 2106\n\tSYS___RECVMSG_A                     = 0x83B // 2107\n\tSYS_____LCHATTR_A                   = 0x83C // 2108\n\tSYS___CABEND                        = 0x83D // 2109\n\tSYS___LE_CIB_GET                    = 0x83E // 2110\n\tSYS___SET_LAA_FOR_JIT               = 0x83F // 2111\n\tSYS___LCHATTR                       = 0x840 // 2112\n\tSYS___WRITEDOWN                     = 0x841 // 2113\n\tSYS_PTHREAD_MUTEX_INIT2             = 0x842 // 2114\n\tSYS___ACOSHF_B                      = 0x843 // 2115\n\tSYS___ACOSHL_B                      = 0x844 // 2116\n\tSYS___ASINHF_B                      = 0x845 // 2117\n\tSYS___ASINHL_B                      = 0x846 // 2118\n\tSYS___ATANHF_B                      = 0x847 // 2119\n\tSYS___ATANHL_B                      = 0x848 // 2120\n\tSYS___CBRTF_B                       = 0x849 // 2121\n\tSYS___CBRTL_B                       = 0x84A // 2122\n\tSYS___COPYSIGNF_B                   = 0x84B // 2123\n\tSYS___COPYSIGNL_B                   = 0x84C // 2124\n\tSYS___COTANF_B                      = 0x84D // 2125\n\tSYS___COTAN_B                       = 0x84E // 2126\n\tSYS___COTANL_B                      = 0x84F // 2127\n\tSYS___EXP2F_B                       = 0x850 // 2128\n\tSYS___EXP2L_B                       = 0x851 // 2129\n\tSYS___EXPM1F_B                      = 0x852 // 2130\n\tSYS___EXPM1L_B                      = 0x853 // 2131\n\tSYS___FDIMF_B                       = 0x854 // 2132\n\tSYS___FDIM_B                        = 0x855 // 2133\n\tSYS___FDIML_B                       = 0x856 // 2134\n\tSYS___HYPOTF_B                      = 0x857 // 2135\n\tSYS___HYPOTL_B                      = 0x858 // 2136\n\tSYS___LOG1PF_B                      = 0x859 // 2137\n\tSYS___LOG1PL_B                      = 0x85A // 2138\n\tSYS___LOG2F_B                       = 0x85B // 2139\n\tSYS___LOG2_B                        = 0x85C // 2140\n\tSYS___LOG2L_B                       = 0x85D // 2141\n\tSYS___REMAINDERF_B                  = 0x85E // 2142\n\tSYS___REMAINDERL_B                  = 0x85F // 2143\n\tSYS___REMQUOF_B                     = 0x860 // 2144\n\tSYS___REMQUO_B                      = 0x861 // 2145\n\tSYS___REMQUOL_B                     = 0x862 // 2146\n\tSYS___TGAMMAF_B                     = 0x863 // 2147\n\tSYS___TGAMMA_B                      = 0x864 // 2148\n\tSYS___TGAMMAL_B                     = 0x865 // 2149\n\tSYS___TRUNCF_B                      = 0x866 // 2150\n\tSYS___TRUNC_B                       = 0x867 // 2151\n\tSYS___TRUNCL_B                      = 0x868 // 2152\n\tSYS___LGAMMAF_B                     = 0x869 // 2153\n\tSYS___LROUNDF_B                     = 0x86A // 2154\n\tSYS___LROUND_B                      = 0x86B // 2155\n\tSYS___ERFF_B                        = 0x86C // 2156\n\tSYS___ERFCF_B                       = 0x86D // 2157\n\tSYS_ACOSHF                          = 0x86E // 2158\n\tSYS_ACOSHL                          = 0x86F // 2159\n\tSYS_ASINHF                          = 0x870 // 2160\n\tSYS_ASINHL                          = 0x871 // 2161\n\tSYS_ATANHF                          = 0x872 // 2162\n\tSYS_ATANHL                          = 0x873 // 2163\n\tSYS_CBRTF                           = 0x874 // 2164\n\tSYS_CBRTL                           = 0x875 // 2165\n\tSYS_COPYSIGNF                       = 0x876 // 2166\n\tSYS_CPYSIGNF                        = 0x876 // 2166\n\tSYS_COPYSIGNL                       = 0x877 // 2167\n\tSYS_CPYSIGNL                        = 0x877 // 2167\n\tSYS_COTANF                          = 0x878 // 2168\n\tSYS___COTANF                        = 0x878 // 2168\n\tSYS_COTAN                           = 0x879 // 2169\n\tSYS___COTAN                         = 0x879 // 2169\n\tSYS_COTANL                          = 0x87A // 2170\n\tSYS___COTANL                        = 0x87A // 2170\n\tSYS_EXP2F                           = 0x87B // 2171\n\tSYS_EXP2L                           = 0x87C // 2172\n\tSYS_EXPM1F                          = 0x87D // 2173\n\tSYS_EXPM1L                          = 0x87E // 2174\n\tSYS_FDIMF                           = 0x87F // 2175\n\tSYS_FDIM                            = 0x881 // 2177\n\tSYS_FDIML                           = 0x882 // 2178\n\tSYS_HYPOTF                          = 0x883 // 2179\n\tSYS_HYPOTL                          = 0x884 // 2180\n\tSYS_LOG1PF                          = 0x885 // 2181\n\tSYS_LOG1PL                          = 0x886 // 2182\n\tSYS_LOG2F                           = 0x887 // 2183\n\tSYS_LOG2                            = 0x888 // 2184\n\tSYS_LOG2L                           = 0x889 // 2185\n\tSYS_REMAINDERF                      = 0x88A // 2186\n\tSYS_REMAINDF                        = 0x88A // 2186\n\tSYS_REMAINDERL                      = 0x88B // 2187\n\tSYS_REMAINDL                        = 0x88B // 2187\n\tSYS_REMQUOF                         = 0x88C // 2188\n\tSYS_REMQUO                          = 0x88D // 2189\n\tSYS_REMQUOL                         = 0x88E // 2190\n\tSYS_TGAMMAF                         = 0x88F // 2191\n\tSYS_TGAMMA                          = 0x890 // 2192\n\tSYS_TGAMMAL                         = 0x891 // 2193\n\tSYS_TRUNCF                          = 0x892 // 2194\n\tSYS_TRUNC                           = 0x893 // 2195\n\tSYS_TRUNCL                          = 0x894 // 2196\n\tSYS_LGAMMAF                         = 0x895 // 2197\n\tSYS_LGAMMAL                         = 0x896 // 2198\n\tSYS_LROUNDF                         = 0x897 // 2199\n\tSYS_LROUND                          = 0x898 // 2200\n\tSYS_ERFF                            = 0x899 // 2201\n\tSYS_ERFL                            = 0x89A // 2202\n\tSYS_ERFCF                           = 0x89B // 2203\n\tSYS_ERFCL                           = 0x89C // 2204\n\tSYS___EXP2_B                        = 0x89D // 2205\n\tSYS_EXP2                            = 0x89E // 2206\n\tSYS___FAR_JUMP                      = 0x89F // 2207\n\tSYS___TCGETATTR_A                   = 0x8A1 // 2209\n\tSYS___TCSETATTR_A                   = 0x8A2 // 2210\n\tSYS___SUPERKILL                     = 0x8A4 // 2212\n\tSYS___LE_CONDITION_TOKEN_BUILD      = 0x8A5 // 2213\n\tSYS___LE_MSG_ADD_INSERT             = 0x8A6 // 2214\n\tSYS___LE_MSG_GET                    = 0x8A7 // 2215\n\tSYS___LE_MSG_GET_AND_WRITE          = 0x8A8 // 2216\n\tSYS___LE_MSG_WRITE                  = 0x8A9 // 2217\n\tSYS___ITOA                          = 0x8AA // 2218\n\tSYS___UTOA                          = 0x8AB // 2219\n\tSYS___LTOA                          = 0x8AC // 2220\n\tSYS___ULTOA                         = 0x8AD // 2221\n\tSYS___LLTOA                         = 0x8AE // 2222\n\tSYS___ULLTOA                        = 0x8AF // 2223\n\tSYS___ITOA_A                        = 0x8B0 // 2224\n\tSYS___UTOA_A                        = 0x8B1 // 2225\n\tSYS___LTOA_A                        = 0x8B2 // 2226\n\tSYS___ULTOA_A                       = 0x8B3 // 2227\n\tSYS___LLTOA_A                       = 0x8B4 // 2228\n\tSYS___ULLTOA_A                      = 0x8B5 // 2229\n\tSYS_____GETENV_A                    = 0x8C3 // 2243\n\tSYS___REXEC_A                       = 0x8C4 // 2244\n\tSYS___REXEC_AF_A                    = 0x8C5 // 2245\n\tSYS___GETUTXENT_A                   = 0x8C6 // 2246\n\tSYS___GETUTXID_A                    = 0x8C7 // 2247\n\tSYS___GETUTXLINE_A                  = 0x8C8 // 2248\n\tSYS___PUTUTXLINE_A                  = 0x8C9 // 2249\n\tSYS_____UTMPXNAME_A                 = 0x8CA // 2250\n\tSYS___PUTC_UNLOCKED_A               = 0x8CB // 2251\n\tSYS___PUTCHAR_UNLOCKED_A            = 0x8CC // 2252\n\tSYS___SNPRINTF_A                    = 0x8CD // 2253\n\tSYS___VSNPRINTF_A                   = 0x8CE // 2254\n\tSYS___DLOPEN_A                      = 0x8D0 // 2256\n\tSYS___DLSYM_A                       = 0x8D1 // 2257\n\tSYS___DLERROR_A                     = 0x8D2 // 2258\n\tSYS_FLOCKFILE                       = 0x8D3 // 2259\n\tSYS_FTRYLOCKFILE                    = 0x8D4 // 2260\n\tSYS_FUNLOCKFILE                     = 0x8D5 // 2261\n\tSYS_GETC_UNLOCKED                   = 0x8D6 // 2262\n\tSYS_GETCHAR_UNLOCKED                = 0x8D7 // 2263\n\tSYS_PUTC_UNLOCKED                   = 0x8D8 // 2264\n\tSYS_PUTCHAR_UNLOCKED                = 0x8D9 // 2265\n\tSYS_SNPRINTF                        = 0x8DA // 2266\n\tSYS_VSNPRINTF                       = 0x8DB // 2267\n\tSYS_DLOPEN                          = 0x8DD // 2269\n\tSYS_DLSYM                           = 0x8DE // 2270\n\tSYS_DLCLOSE                         = 0x8DF // 2271\n\tSYS_DLERROR                         = 0x8E0 // 2272\n\tSYS___SET_EXCEPTION_HANDLER         = 0x8E2 // 2274\n\tSYS___RESET_EXCEPTION_HANDLER       = 0x8E3 // 2275\n\tSYS___VHM_EVENT                     = 0x8E4 // 2276\n\tSYS___ABS_H                         = 0x8E6 // 2278\n\tSYS___ABSF_H                        = 0x8E7 // 2279\n\tSYS___ABSL_H                        = 0x8E8 // 2280\n\tSYS___ACOS_H                        = 0x8E9 // 2281\n\tSYS___ACOSF_H                       = 0x8EA // 2282\n\tSYS___ACOSL_H                       = 0x8EB // 2283\n\tSYS___ACOSH_H                       = 0x8EC // 2284\n\tSYS___ASIN_H                        = 0x8ED // 2285\n\tSYS___ASINF_H                       = 0x8EE // 2286\n\tSYS___ASINL_H                       = 0x8EF // 2287\n\tSYS___ASINH_H                       = 0x8F0 // 2288\n\tSYS___ATAN_H                        = 0x8F1 // 2289\n\tSYS___ATANF_H                       = 0x8F2 // 2290\n\tSYS___ATANL_H                       = 0x8F3 // 2291\n\tSYS___ATANH_H                       = 0x8F4 // 2292\n\tSYS___ATANHF_H                      = 0x8F5 // 2293\n\tSYS___ATANHL_H                      = 0x8F6 // 2294\n\tSYS___ATAN2_H                       = 0x8F7 // 2295\n\tSYS___ATAN2F_H                      = 0x8F8 // 2296\n\tSYS___ATAN2L_H                      = 0x8F9 // 2297\n\tSYS___CBRT_H                        = 0x8FA // 2298\n\tSYS___COPYSIGNF_H                   = 0x8FB // 2299\n\tSYS___COPYSIGNL_H                   = 0x8FC // 2300\n\tSYS___COS_H                         = 0x8FD // 2301\n\tSYS___COSF_H                        = 0x8FE // 2302\n\tSYS___COSL_H                        = 0x8FF // 2303\n\tSYS___COSHF_H                       = 0x900 // 2304\n\tSYS___COSHL_H                       = 0x901 // 2305\n\tSYS___COTAN_H                       = 0x902 // 2306\n\tSYS___COTANF_H                      = 0x903 // 2307\n\tSYS___COTANL_H                      = 0x904 // 2308\n\tSYS___ERF_H                         = 0x905 // 2309\n\tSYS___ERFF_H                        = 0x906 // 2310\n\tSYS___ERFL_H                        = 0x907 // 2311\n\tSYS___ERFC_H                        = 0x908 // 2312\n\tSYS___ERFCF_H                       = 0x909 // 2313\n\tSYS___ERFCL_H                       = 0x90A // 2314\n\tSYS___EXP_H                         = 0x90B // 2315\n\tSYS___EXPF_H                        = 0x90C // 2316\n\tSYS___EXPL_H                        = 0x90D // 2317\n\tSYS___EXPM1_H                       = 0x90E // 2318\n\tSYS___FDIM_H                        = 0x90F // 2319\n\tSYS___FDIMF_H                       = 0x910 // 2320\n\tSYS___FDIML_H                       = 0x911 // 2321\n\tSYS___FMOD_H                        = 0x912 // 2322\n\tSYS___FMODF_H                       = 0x913 // 2323\n\tSYS___FMODL_H                       = 0x914 // 2324\n\tSYS___GAMMA_H                       = 0x915 // 2325\n\tSYS___HYPOT_H                       = 0x916 // 2326\n\tSYS___ILOGB_H                       = 0x917 // 2327\n\tSYS___LGAMMA_H                      = 0x918 // 2328\n\tSYS___LGAMMAF_H                     = 0x919 // 2329\n\tSYS___LOG_H                         = 0x91A // 2330\n\tSYS___LOGF_H                        = 0x91B // 2331\n\tSYS___LOGL_H                        = 0x91C // 2332\n\tSYS___LOGB_H                        = 0x91D // 2333\n\tSYS___LOG2_H                        = 0x91E // 2334\n\tSYS___LOG2F_H                       = 0x91F // 2335\n\tSYS___LOG2L_H                       = 0x920 // 2336\n\tSYS___LOG1P_H                       = 0x921 // 2337\n\tSYS___LOG10_H                       = 0x922 // 2338\n\tSYS___LOG10F_H                      = 0x923 // 2339\n\tSYS___LOG10L_H                      = 0x924 // 2340\n\tSYS___LROUND_H                      = 0x925 // 2341\n\tSYS___LROUNDF_H                     = 0x926 // 2342\n\tSYS___NEXTAFTER_H                   = 0x927 // 2343\n\tSYS___POW_H                         = 0x928 // 2344\n\tSYS___POWF_H                        = 0x929 // 2345\n\tSYS___POWL_H                        = 0x92A // 2346\n\tSYS___REMAINDER_H                   = 0x92B // 2347\n\tSYS___RINT_H                        = 0x92C // 2348\n\tSYS___SCALB_H                       = 0x92D // 2349\n\tSYS___SIN_H                         = 0x92E // 2350\n\tSYS___SINF_H                        = 0x92F // 2351\n\tSYS___SINL_H                        = 0x930 // 2352\n\tSYS___SINH_H                        = 0x931 // 2353\n\tSYS___SINHF_H                       = 0x932 // 2354\n\tSYS___SINHL_H                       = 0x933 // 2355\n\tSYS___SQRT_H                        = 0x934 // 2356\n\tSYS___SQRTF_H                       = 0x935 // 2357\n\tSYS___SQRTL_H                       = 0x936 // 2358\n\tSYS___TAN_H                         = 0x937 // 2359\n\tSYS___TANF_H                        = 0x938 // 2360\n\tSYS___TANL_H                        = 0x939 // 2361\n\tSYS___TANH_H                        = 0x93A // 2362\n\tSYS___TANHF_H                       = 0x93B // 2363\n\tSYS___TANHL_H                       = 0x93C // 2364\n\tSYS___TGAMMA_H                      = 0x93D // 2365\n\tSYS___TGAMMAF_H                     = 0x93E // 2366\n\tSYS___TRUNC_H                       = 0x93F // 2367\n\tSYS___TRUNCF_H                      = 0x940 // 2368\n\tSYS___TRUNCL_H                      = 0x941 // 2369\n\tSYS___COSH_H                        = 0x942 // 2370\n\tSYS___LE_DEBUG_SET_RESUME_MCH       = 0x943 // 2371\n\tSYS_VFSCANF                         = 0x944 // 2372\n\tSYS_VSCANF                          = 0x946 // 2374\n\tSYS_VSSCANF                         = 0x948 // 2376\n\tSYS_VFWSCANF                        = 0x94A // 2378\n\tSYS_VWSCANF                         = 0x94C // 2380\n\tSYS_VSWSCANF                        = 0x94E // 2382\n\tSYS_IMAXABS                         = 0x950 // 2384\n\tSYS_IMAXDIV                         = 0x951 // 2385\n\tSYS_STRTOIMAX                       = 0x952 // 2386\n\tSYS_STRTOUMAX                       = 0x953 // 2387\n\tSYS_WCSTOIMAX                       = 0x954 // 2388\n\tSYS_WCSTOUMAX                       = 0x955 // 2389\n\tSYS_ATOLL                           = 0x956 // 2390\n\tSYS_STRTOF                          = 0x957 // 2391\n\tSYS_STRTOLD                         = 0x958 // 2392\n\tSYS_WCSTOF                          = 0x959 // 2393\n\tSYS_WCSTOLD                         = 0x95A // 2394\n\tSYS_INET6_RTH_SPACE                 = 0x95B // 2395\n\tSYS_INET6_RTH_INIT                  = 0x95C // 2396\n\tSYS_INET6_RTH_ADD                   = 0x95D // 2397\n\tSYS_INET6_RTH_REVERSE               = 0x95E // 2398\n\tSYS_INET6_RTH_SEGMENTS              = 0x95F // 2399\n\tSYS_INET6_RTH_GETADDR               = 0x960 // 2400\n\tSYS_INET6_OPT_INIT                  = 0x961 // 2401\n\tSYS_INET6_OPT_APPEND                = 0x962 // 2402\n\tSYS_INET6_OPT_FINISH                = 0x963 // 2403\n\tSYS_INET6_OPT_SET_VAL               = 0x964 // 2404\n\tSYS_INET6_OPT_NEXT                  = 0x965 // 2405\n\tSYS_INET6_OPT_FIND                  = 0x966 // 2406\n\tSYS_INET6_OPT_GET_VAL               = 0x967 // 2407\n\tSYS___POW_I                         = 0x987 // 2439\n\tSYS___POW_I_B                       = 0x988 // 2440\n\tSYS___POW_I_H                       = 0x989 // 2441\n\tSYS___POW_II                        = 0x98A // 2442\n\tSYS___POW_II_B                      = 0x98B // 2443\n\tSYS___POW_II_H                      = 0x98C // 2444\n\tSYS_CABS                            = 0x98E // 2446\n\tSYS___CABS_B                        = 0x98F // 2447\n\tSYS___CABS_H                        = 0x990 // 2448\n\tSYS_CABSF                           = 0x991 // 2449\n\tSYS___CABSF_B                       = 0x992 // 2450\n\tSYS___CABSF_H                       = 0x993 // 2451\n\tSYS_CABSL                           = 0x994 // 2452\n\tSYS___CABSL_B                       = 0x995 // 2453\n\tSYS___CABSL_H                       = 0x996 // 2454\n\tSYS_CACOS                           = 0x997 // 2455\n\tSYS___CACOS_B                       = 0x998 // 2456\n\tSYS___CACOS_H                       = 0x999 // 2457\n\tSYS_CACOSF                          = 0x99A // 2458\n\tSYS___CACOSF_B                      = 0x99B // 2459\n\tSYS___CACOSF_H                      = 0x99C // 2460\n\tSYS_CACOSL                          = 0x99D // 2461\n\tSYS___CACOSL_B                      = 0x99E // 2462\n\tSYS___CACOSL_H                      = 0x99F // 2463\n\tSYS_CACOSH                          = 0x9A0 // 2464\n\tSYS___CACOSH_B                      = 0x9A1 // 2465\n\tSYS___CACOSH_H                      = 0x9A2 // 2466\n\tSYS_CACOSHF                         = 0x9A3 // 2467\n\tSYS___CACOSHF_B                     = 0x9A4 // 2468\n\tSYS___CACOSHF_H                     = 0x9A5 // 2469\n\tSYS_CACOSHL                         = 0x9A6 // 2470\n\tSYS___CACOSHL_B                     = 0x9A7 // 2471\n\tSYS___CACOSHL_H                     = 0x9A8 // 2472\n\tSYS_CARG                            = 0x9A9 // 2473\n\tSYS___CARG_B                        = 0x9AA // 2474\n\tSYS___CARG_H                        = 0x9AB // 2475\n\tSYS_CARGF                           = 0x9AC // 2476\n\tSYS___CARGF_B                       = 0x9AD // 2477\n\tSYS___CARGF_H                       = 0x9AE // 2478\n\tSYS_CARGL                           = 0x9AF // 2479\n\tSYS___CARGL_B                       = 0x9B0 // 2480\n\tSYS___CARGL_H                       = 0x9B1 // 2481\n\tSYS_CASIN                           = 0x9B2 // 2482\n\tSYS___CASIN_B                       = 0x9B3 // 2483\n\tSYS___CASIN_H                       = 0x9B4 // 2484\n\tSYS_CASINF                          = 0x9B5 // 2485\n\tSYS___CASINF_B                      = 0x9B6 // 2486\n\tSYS___CASINF_H                      = 0x9B7 // 2487\n\tSYS_CASINL                          = 0x9B8 // 2488\n\tSYS___CASINL_B                      = 0x9B9 // 2489\n\tSYS___CASINL_H                      = 0x9BA // 2490\n\tSYS_CASINH                          = 0x9BB // 2491\n\tSYS___CASINH_B                      = 0x9BC // 2492\n\tSYS___CASINH_H                      = 0x9BD // 2493\n\tSYS_CASINHF                         = 0x9BE // 2494\n\tSYS___CASINHF_B                     = 0x9BF // 2495\n\tSYS___CASINHF_H                     = 0x9C0 // 2496\n\tSYS_CASINHL                         = 0x9C1 // 2497\n\tSYS___CASINHL_B                     = 0x9C2 // 2498\n\tSYS___CASINHL_H                     = 0x9C3 // 2499\n\tSYS_CATAN                           = 0x9C4 // 2500\n\tSYS___CATAN_B                       = 0x9C5 // 2501\n\tSYS___CATAN_H                       = 0x9C6 // 2502\n\tSYS_CATANF                          = 0x9C7 // 2503\n\tSYS___CATANF_B                      = 0x9C8 // 2504\n\tSYS___CATANF_H                      = 0x9C9 // 2505\n\tSYS_CATANL                          = 0x9CA // 2506\n\tSYS___CATANL_B                      = 0x9CB // 2507\n\tSYS___CATANL_H                      = 0x9CC // 2508\n\tSYS_CATANH                          = 0x9CD // 2509\n\tSYS___CATANH_B                      = 0x9CE // 2510\n\tSYS___CATANH_H                      = 0x9CF // 2511\n\tSYS_CATANHF                         = 0x9D0 // 2512\n\tSYS___CATANHF_B                     = 0x9D1 // 2513\n\tSYS___CATANHF_H                     = 0x9D2 // 2514\n\tSYS_CATANHL                         = 0x9D3 // 2515\n\tSYS___CATANHL_B                     = 0x9D4 // 2516\n\tSYS___CATANHL_H                     = 0x9D5 // 2517\n\tSYS_CCOS                            = 0x9D6 // 2518\n\tSYS___CCOS_B                        = 0x9D7 // 2519\n\tSYS___CCOS_H                        = 0x9D8 // 2520\n\tSYS_CCOSF                           = 0x9D9 // 2521\n\tSYS___CCOSF_B                       = 0x9DA // 2522\n\tSYS___CCOSF_H                       = 0x9DB // 2523\n\tSYS_CCOSL                           = 0x9DC // 2524\n\tSYS___CCOSL_B                       = 0x9DD // 2525\n\tSYS___CCOSL_H                       = 0x9DE // 2526\n\tSYS_CCOSH                           = 0x9DF // 2527\n\tSYS___CCOSH_B                       = 0x9E0 // 2528\n\tSYS___CCOSH_H                       = 0x9E1 // 2529\n\tSYS_CCOSHF                          = 0x9E2 // 2530\n\tSYS___CCOSHF_B                      = 0x9E3 // 2531\n\tSYS___CCOSHF_H                      = 0x9E4 // 2532\n\tSYS_CCOSHL                          = 0x9E5 // 2533\n\tSYS___CCOSHL_B                      = 0x9E6 // 2534\n\tSYS___CCOSHL_H                      = 0x9E7 // 2535\n\tSYS_CEXP                            = 0x9E8 // 2536\n\tSYS___CEXP_B                        = 0x9E9 // 2537\n\tSYS___CEXP_H                        = 0x9EA // 2538\n\tSYS_CEXPF                           = 0x9EB // 2539\n\tSYS___CEXPF_B                       = 0x9EC // 2540\n\tSYS___CEXPF_H                       = 0x9ED // 2541\n\tSYS_CEXPL                           = 0x9EE // 2542\n\tSYS___CEXPL_B                       = 0x9EF // 2543\n\tSYS___CEXPL_H                       = 0x9F0 // 2544\n\tSYS_CIMAG                           = 0x9F1 // 2545\n\tSYS___CIMAG_B                       = 0x9F2 // 2546\n\tSYS___CIMAG_H                       = 0x9F3 // 2547\n\tSYS_CIMAGF                          = 0x9F4 // 2548\n\tSYS___CIMAGF_B                      = 0x9F5 // 2549\n\tSYS___CIMAGF_H                      = 0x9F6 // 2550\n\tSYS_CIMAGL                          = 0x9F7 // 2551\n\tSYS___CIMAGL_B                      = 0x9F8 // 2552\n\tSYS___CIMAGL_H                      = 0x9F9 // 2553\n\tSYS___CLOG                          = 0x9FA // 2554\n\tSYS___CLOG_B                        = 0x9FB // 2555\n\tSYS___CLOG_H                        = 0x9FC // 2556\n\tSYS_CLOGF                           = 0x9FD // 2557\n\tSYS___CLOGF_B                       = 0x9FE // 2558\n\tSYS___CLOGF_H                       = 0x9FF // 2559\n\tSYS_CLOGL                           = 0xA00 // 2560\n\tSYS___CLOGL_B                       = 0xA01 // 2561\n\tSYS___CLOGL_H                       = 0xA02 // 2562\n\tSYS_CONJ                            = 0xA03 // 2563\n\tSYS___CONJ_B                        = 0xA04 // 2564\n\tSYS___CONJ_H                        = 0xA05 // 2565\n\tSYS_CONJF                           = 0xA06 // 2566\n\tSYS___CONJF_B                       = 0xA07 // 2567\n\tSYS___CONJF_H                       = 0xA08 // 2568\n\tSYS_CONJL                           = 0xA09 // 2569\n\tSYS___CONJL_B                       = 0xA0A // 2570\n\tSYS___CONJL_H                       = 0xA0B // 2571\n\tSYS_CPOW                            = 0xA0C // 2572\n\tSYS___CPOW_B                        = 0xA0D // 2573\n\tSYS___CPOW_H                        = 0xA0E // 2574\n\tSYS_CPOWF                           = 0xA0F // 2575\n\tSYS___CPOWF_B                       = 0xA10 // 2576\n\tSYS___CPOWF_H                       = 0xA11 // 2577\n\tSYS_CPOWL                           = 0xA12 // 2578\n\tSYS___CPOWL_B                       = 0xA13 // 2579\n\tSYS___CPOWL_H                       = 0xA14 // 2580\n\tSYS_CPROJ                           = 0xA15 // 2581\n\tSYS___CPROJ_B                       = 0xA16 // 2582\n\tSYS___CPROJ_H                       = 0xA17 // 2583\n\tSYS_CPROJF                          = 0xA18 // 2584\n\tSYS___CPROJF_B                      = 0xA19 // 2585\n\tSYS___CPROJF_H                      = 0xA1A // 2586\n\tSYS_CPROJL                          = 0xA1B // 2587\n\tSYS___CPROJL_B                      = 0xA1C // 2588\n\tSYS___CPROJL_H                      = 0xA1D // 2589\n\tSYS_CREAL                           = 0xA1E // 2590\n\tSYS___CREAL_B                       = 0xA1F // 2591\n\tSYS___CREAL_H                       = 0xA20 // 2592\n\tSYS_CREALF                          = 0xA21 // 2593\n\tSYS___CREALF_B                      = 0xA22 // 2594\n\tSYS___CREALF_H                      = 0xA23 // 2595\n\tSYS_CREALL                          = 0xA24 // 2596\n\tSYS___CREALL_B                      = 0xA25 // 2597\n\tSYS___CREALL_H                      = 0xA26 // 2598\n\tSYS_CSIN                            = 0xA27 // 2599\n\tSYS___CSIN_B                        = 0xA28 // 2600\n\tSYS___CSIN_H                        = 0xA29 // 2601\n\tSYS_CSINF                           = 0xA2A // 2602\n\tSYS___CSINF_B                       = 0xA2B // 2603\n\tSYS___CSINF_H                       = 0xA2C // 2604\n\tSYS_CSINL                           = 0xA2D // 2605\n\tSYS___CSINL_B                       = 0xA2E // 2606\n\tSYS___CSINL_H                       = 0xA2F // 2607\n\tSYS_CSINH                           = 0xA30 // 2608\n\tSYS___CSINH_B                       = 0xA31 // 2609\n\tSYS___CSINH_H                       = 0xA32 // 2610\n\tSYS_CSINHF                          = 0xA33 // 2611\n\tSYS___CSINHF_B                      = 0xA34 // 2612\n\tSYS___CSINHF_H                      = 0xA35 // 2613\n\tSYS_CSINHL                          = 0xA36 // 2614\n\tSYS___CSINHL_B                      = 0xA37 // 2615\n\tSYS___CSINHL_H                      = 0xA38 // 2616\n\tSYS_CSQRT                           = 0xA39 // 2617\n\tSYS___CSQRT_B                       = 0xA3A // 2618\n\tSYS___CSQRT_H                       = 0xA3B // 2619\n\tSYS_CSQRTF                          = 0xA3C // 2620\n\tSYS___CSQRTF_B                      = 0xA3D // 2621\n\tSYS___CSQRTF_H                      = 0xA3E // 2622\n\tSYS_CSQRTL                          = 0xA3F // 2623\n\tSYS___CSQRTL_B                      = 0xA40 // 2624\n\tSYS___CSQRTL_H                      = 0xA41 // 2625\n\tSYS_CTAN                            = 0xA42 // 2626\n\tSYS___CTAN_B                        = 0xA43 // 2627\n\tSYS___CTAN_H                        = 0xA44 // 2628\n\tSYS_CTANF                           = 0xA45 // 2629\n\tSYS___CTANF_B                       = 0xA46 // 2630\n\tSYS___CTANF_H                       = 0xA47 // 2631\n\tSYS_CTANL                           = 0xA48 // 2632\n\tSYS___CTANL_B                       = 0xA49 // 2633\n\tSYS___CTANL_H                       = 0xA4A // 2634\n\tSYS_CTANH                           = 0xA4B // 2635\n\tSYS___CTANH_B                       = 0xA4C // 2636\n\tSYS___CTANH_H                       = 0xA4D // 2637\n\tSYS_CTANHF                          = 0xA4E // 2638\n\tSYS___CTANHF_B                      = 0xA4F // 2639\n\tSYS___CTANHF_H                      = 0xA50 // 2640\n\tSYS_CTANHL                          = 0xA51 // 2641\n\tSYS___CTANHL_B                      = 0xA52 // 2642\n\tSYS___CTANHL_H                      = 0xA53 // 2643\n\tSYS___ACOSHF_H                      = 0xA54 // 2644\n\tSYS___ACOSHL_H                      = 0xA55 // 2645\n\tSYS___ASINHF_H                      = 0xA56 // 2646\n\tSYS___ASINHL_H                      = 0xA57 // 2647\n\tSYS___CBRTF_H                       = 0xA58 // 2648\n\tSYS___CBRTL_H                       = 0xA59 // 2649\n\tSYS___COPYSIGN_B                    = 0xA5A // 2650\n\tSYS___EXPM1F_H                      = 0xA5B // 2651\n\tSYS___EXPM1L_H                      = 0xA5C // 2652\n\tSYS___EXP2_H                        = 0xA5D // 2653\n\tSYS___EXP2F_H                       = 0xA5E // 2654\n\tSYS___EXP2L_H                       = 0xA5F // 2655\n\tSYS___LOG1PF_H                      = 0xA60 // 2656\n\tSYS___LOG1PL_H                      = 0xA61 // 2657\n\tSYS___LGAMMAL_H                     = 0xA62 // 2658\n\tSYS_FMA                             = 0xA63 // 2659\n\tSYS___FMA_B                         = 0xA64 // 2660\n\tSYS___FMA_H                         = 0xA65 // 2661\n\tSYS_FMAF                            = 0xA66 // 2662\n\tSYS___FMAF_B                        = 0xA67 // 2663\n\tSYS___FMAF_H                        = 0xA68 // 2664\n\tSYS_FMAL                            = 0xA69 // 2665\n\tSYS___FMAL_B                        = 0xA6A // 2666\n\tSYS___FMAL_H                        = 0xA6B // 2667\n\tSYS_FMAX                            = 0xA6C // 2668\n\tSYS___FMAX_B                        = 0xA6D // 2669\n\tSYS___FMAX_H                        = 0xA6E // 2670\n\tSYS_FMAXF                           = 0xA6F // 2671\n\tSYS___FMAXF_B                       = 0xA70 // 2672\n\tSYS___FMAXF_H                       = 0xA71 // 2673\n\tSYS_FMAXL                           = 0xA72 // 2674\n\tSYS___FMAXL_B                       = 0xA73 // 2675\n\tSYS___FMAXL_H                       = 0xA74 // 2676\n\tSYS_FMIN                            = 0xA75 // 2677\n\tSYS___FMIN_B                        = 0xA76 // 2678\n\tSYS___FMIN_H                        = 0xA77 // 2679\n\tSYS_FMINF                           = 0xA78 // 2680\n\tSYS___FMINF_B                       = 0xA79 // 2681\n\tSYS___FMINF_H                       = 0xA7A // 2682\n\tSYS_FMINL                           = 0xA7B // 2683\n\tSYS___FMINL_B                       = 0xA7C // 2684\n\tSYS___FMINL_H                       = 0xA7D // 2685\n\tSYS_ILOGBF                          = 0xA7E // 2686\n\tSYS___ILOGBF_B                      = 0xA7F // 2687\n\tSYS___ILOGBF_H                      = 0xA80 // 2688\n\tSYS_ILOGBL                          = 0xA81 // 2689\n\tSYS___ILOGBL_B                      = 0xA82 // 2690\n\tSYS___ILOGBL_H                      = 0xA83 // 2691\n\tSYS_LLRINT                          = 0xA84 // 2692\n\tSYS___LLRINT_B                      = 0xA85 // 2693\n\tSYS___LLRINT_H                      = 0xA86 // 2694\n\tSYS_LLRINTF                         = 0xA87 // 2695\n\tSYS___LLRINTF_B                     = 0xA88 // 2696\n\tSYS___LLRINTF_H                     = 0xA89 // 2697\n\tSYS_LLRINTL                         = 0xA8A // 2698\n\tSYS___LLRINTL_B                     = 0xA8B // 2699\n\tSYS___LLRINTL_H                     = 0xA8C // 2700\n\tSYS_LLROUND                         = 0xA8D // 2701\n\tSYS___LLROUND_B                     = 0xA8E // 2702\n\tSYS___LLROUND_H                     = 0xA8F // 2703\n\tSYS_LLROUNDF                        = 0xA90 // 2704\n\tSYS___LLROUNDF_B                    = 0xA91 // 2705\n\tSYS___LLROUNDF_H                    = 0xA92 // 2706\n\tSYS_LLROUNDL                        = 0xA93 // 2707\n\tSYS___LLROUNDL_B                    = 0xA94 // 2708\n\tSYS___LLROUNDL_H                    = 0xA95 // 2709\n\tSYS_LOGBF                           = 0xA96 // 2710\n\tSYS___LOGBF_B                       = 0xA97 // 2711\n\tSYS___LOGBF_H                       = 0xA98 // 2712\n\tSYS_LOGBL                           = 0xA99 // 2713\n\tSYS___LOGBL_B                       = 0xA9A // 2714\n\tSYS___LOGBL_H                       = 0xA9B // 2715\n\tSYS_LRINT                           = 0xA9C // 2716\n\tSYS___LRINT_B                       = 0xA9D // 2717\n\tSYS___LRINT_H                       = 0xA9E // 2718\n\tSYS_LRINTF                          = 0xA9F // 2719\n\tSYS___LRINTF_B                      = 0xAA0 // 2720\n\tSYS___LRINTF_H                      = 0xAA1 // 2721\n\tSYS_LRINTL                          = 0xAA2 // 2722\n\tSYS___LRINTL_B                      = 0xAA3 // 2723\n\tSYS___LRINTL_H                      = 0xAA4 // 2724\n\tSYS_LROUNDL                         = 0xAA5 // 2725\n\tSYS___LROUNDL_B                     = 0xAA6 // 2726\n\tSYS___LROUNDL_H                     = 0xAA7 // 2727\n\tSYS_NAN                             = 0xAA8 // 2728\n\tSYS___NAN_B                         = 0xAA9 // 2729\n\tSYS_NANF                            = 0xAAA // 2730\n\tSYS___NANF_B                        = 0xAAB // 2731\n\tSYS_NANL                            = 0xAAC // 2732\n\tSYS___NANL_B                        = 0xAAD // 2733\n\tSYS_NEARBYINT                       = 0xAAE // 2734\n\tSYS___NEARBYINT_B                   = 0xAAF // 2735\n\tSYS___NEARBYINT_H                   = 0xAB0 // 2736\n\tSYS_NEARBYINTF                      = 0xAB1 // 2737\n\tSYS___NEARBYINTF_B                  = 0xAB2 // 2738\n\tSYS___NEARBYINTF_H                  = 0xAB3 // 2739\n\tSYS_NEARBYINTL                      = 0xAB4 // 2740\n\tSYS___NEARBYINTL_B                  = 0xAB5 // 2741\n\tSYS___NEARBYINTL_H                  = 0xAB6 // 2742\n\tSYS_NEXTAFTERF                      = 0xAB7 // 2743\n\tSYS___NEXTAFTERF_B                  = 0xAB8 // 2744\n\tSYS___NEXTAFTERF_H                  = 0xAB9 // 2745\n\tSYS_NEXTAFTERL                      = 0xABA // 2746\n\tSYS___NEXTAFTERL_B                  = 0xABB // 2747\n\tSYS___NEXTAFTERL_H                  = 0xABC // 2748\n\tSYS_NEXTTOWARD                      = 0xABD // 2749\n\tSYS___NEXTTOWARD_B                  = 0xABE // 2750\n\tSYS___NEXTTOWARD_H                  = 0xABF // 2751\n\tSYS_NEXTTOWARDF                     = 0xAC0 // 2752\n\tSYS___NEXTTOWARDF_B                 = 0xAC1 // 2753\n\tSYS___NEXTTOWARDF_H                 = 0xAC2 // 2754\n\tSYS_NEXTTOWARDL                     = 0xAC3 // 2755\n\tSYS___NEXTTOWARDL_B                 = 0xAC4 // 2756\n\tSYS___NEXTTOWARDL_H                 = 0xAC5 // 2757\n\tSYS___REMAINDERF_H                  = 0xAC6 // 2758\n\tSYS___REMAINDERL_H                  = 0xAC7 // 2759\n\tSYS___REMQUO_H                      = 0xAC8 // 2760\n\tSYS___REMQUOF_H                     = 0xAC9 // 2761\n\tSYS___REMQUOL_H                     = 0xACA // 2762\n\tSYS_RINTF                           = 0xACB // 2763\n\tSYS___RINTF_B                       = 0xACC // 2764\n\tSYS_RINTL                           = 0xACD // 2765\n\tSYS___RINTL_B                       = 0xACE // 2766\n\tSYS_ROUND                           = 0xACF // 2767\n\tSYS___ROUND_B                       = 0xAD0 // 2768\n\tSYS___ROUND_H                       = 0xAD1 // 2769\n\tSYS_ROUNDF                          = 0xAD2 // 2770\n\tSYS___ROUNDF_B                      = 0xAD3 // 2771\n\tSYS___ROUNDF_H                      = 0xAD4 // 2772\n\tSYS_ROUNDL                          = 0xAD5 // 2773\n\tSYS___ROUNDL_B                      = 0xAD6 // 2774\n\tSYS___ROUNDL_H                      = 0xAD7 // 2775\n\tSYS_SCALBLN                         = 0xAD8 // 2776\n\tSYS___SCALBLN_B                     = 0xAD9 // 2777\n\tSYS___SCALBLN_H                     = 0xADA // 2778\n\tSYS_SCALBLNF                        = 0xADB // 2779\n\tSYS___SCALBLNF_B                    = 0xADC // 2780\n\tSYS___SCALBLNF_H                    = 0xADD // 2781\n\tSYS_SCALBLNL                        = 0xADE // 2782\n\tSYS___SCALBLNL_B                    = 0xADF // 2783\n\tSYS___SCALBLNL_H                    = 0xAE0 // 2784\n\tSYS___SCALBN_B                      = 0xAE1 // 2785\n\tSYS___SCALBN_H                      = 0xAE2 // 2786\n\tSYS_SCALBNF                         = 0xAE3 // 2787\n\tSYS___SCALBNF_B                     = 0xAE4 // 2788\n\tSYS___SCALBNF_H                     = 0xAE5 // 2789\n\tSYS_SCALBNL                         = 0xAE6 // 2790\n\tSYS___SCALBNL_B                     = 0xAE7 // 2791\n\tSYS___SCALBNL_H                     = 0xAE8 // 2792\n\tSYS___TGAMMAL_H                     = 0xAE9 // 2793\n\tSYS_FECLEAREXCEPT                   = 0xAEA // 2794\n\tSYS_FEGETENV                        = 0xAEB // 2795\n\tSYS_FEGETEXCEPTFLAG                 = 0xAEC // 2796\n\tSYS_FEGETROUND                      = 0xAED // 2797\n\tSYS_FEHOLDEXCEPT                    = 0xAEE // 2798\n\tSYS_FERAISEEXCEPT                   = 0xAEF // 2799\n\tSYS_FESETENV                        = 0xAF0 // 2800\n\tSYS_FESETEXCEPTFLAG                 = 0xAF1 // 2801\n\tSYS_FESETROUND                      = 0xAF2 // 2802\n\tSYS_FETESTEXCEPT                    = 0xAF3 // 2803\n\tSYS_FEUPDATEENV                     = 0xAF4 // 2804\n\tSYS___COPYSIGN_H                    = 0xAF5 // 2805\n\tSYS___HYPOTF_H                      = 0xAF6 // 2806\n\tSYS___HYPOTL_H                      = 0xAF7 // 2807\n\tSYS___CLASS                         = 0xAFA // 2810\n\tSYS___CLASS_B                       = 0xAFB // 2811\n\tSYS___CLASS_H                       = 0xAFC // 2812\n\tSYS___ISBLANK_A                     = 0xB2E // 2862\n\tSYS___ISWBLANK_A                    = 0xB2F // 2863\n\tSYS___LROUND_FIXUP                  = 0xB30 // 2864\n\tSYS___LROUNDF_FIXUP                 = 0xB31 // 2865\n\tSYS_SCHED_YIELD                     = 0xB32 // 2866\n\tSYS_STRERROR_R                      = 0xB33 // 2867\n\tSYS_UNSETENV                        = 0xB34 // 2868\n\tSYS___LGAMMA_H_C99                  = 0xB38 // 2872\n\tSYS___LGAMMA_B_C99                  = 0xB39 // 2873\n\tSYS___LGAMMA_R_C99                  = 0xB3A // 2874\n\tSYS___FTELL2                        = 0xB3B // 2875\n\tSYS___FSEEK2                        = 0xB3C // 2876\n\tSYS___STATIC_REINIT                 = 0xB3D // 2877\n\tSYS_PTHREAD_ATTR_GETSTACK           = 0xB3E // 2878\n\tSYS_PTHREAD_ATTR_SETSTACK           = 0xB3F // 2879\n\tSYS___TGAMMA_H_C99                  = 0xB78 // 2936\n\tSYS___TGAMMAF_H_C99                 = 0xB79 // 2937\n\tSYS___LE_TRACEBACK                  = 0xB7A // 2938\n\tSYS___MUST_STAY_CLEAN               = 0xB7C // 2940\n\tSYS___O_ENV                         = 0xB7D // 2941\n\tSYS_ACOSD32                         = 0xB7E // 2942\n\tSYS_ACOSD64                         = 0xB7F // 2943\n\tSYS_ACOSD128                        = 0xB80 // 2944\n\tSYS_ACOSHD32                        = 0xB81 // 2945\n\tSYS_ACOSHD64                        = 0xB82 // 2946\n\tSYS_ACOSHD128                       = 0xB83 // 2947\n\tSYS_ASIND32                         = 0xB84 // 2948\n\tSYS_ASIND64                         = 0xB85 // 2949\n\tSYS_ASIND128                        = 0xB86 // 2950\n\tSYS_ASINHD32                        = 0xB87 // 2951\n\tSYS_ASINHD64                        = 0xB88 // 2952\n\tSYS_ASINHD128                       = 0xB89 // 2953\n\tSYS_ATAND32                         = 0xB8A // 2954\n\tSYS_ATAND64                         = 0xB8B // 2955\n\tSYS_ATAND128                        = 0xB8C // 2956\n\tSYS_ATAN2D32                        = 0xB8D // 2957\n\tSYS_ATAN2D64                        = 0xB8E // 2958\n\tSYS_ATAN2D128                       = 0xB8F // 2959\n\tSYS_ATANHD32                        = 0xB90 // 2960\n\tSYS_ATANHD64                        = 0xB91 // 2961\n\tSYS_ATANHD128                       = 0xB92 // 2962\n\tSYS_CBRTD32                         = 0xB93 // 2963\n\tSYS_CBRTD64                         = 0xB94 // 2964\n\tSYS_CBRTD128                        = 0xB95 // 2965\n\tSYS_CEILD32                         = 0xB96 // 2966\n\tSYS_CEILD64                         = 0xB97 // 2967\n\tSYS_CEILD128                        = 0xB98 // 2968\n\tSYS___CLASS2                        = 0xB99 // 2969\n\tSYS___CLASS2_B                      = 0xB9A // 2970\n\tSYS___CLASS2_H                      = 0xB9B // 2971\n\tSYS_COPYSIGND32                     = 0xB9C // 2972\n\tSYS_COPYSIGND64                     = 0xB9D // 2973\n\tSYS_COPYSIGND128                    = 0xB9E // 2974\n\tSYS_COSD32                          = 0xB9F // 2975\n\tSYS_COSD64                          = 0xBA0 // 2976\n\tSYS_COSD128                         = 0xBA1 // 2977\n\tSYS_COSHD32                         = 0xBA2 // 2978\n\tSYS_COSHD64                         = 0xBA3 // 2979\n\tSYS_COSHD128                        = 0xBA4 // 2980\n\tSYS_ERFD32                          = 0xBA5 // 2981\n\tSYS_ERFD64                          = 0xBA6 // 2982\n\tSYS_ERFD128                         = 0xBA7 // 2983\n\tSYS_ERFCD32                         = 0xBA8 // 2984\n\tSYS_ERFCD64                         = 0xBA9 // 2985\n\tSYS_ERFCD128                        = 0xBAA // 2986\n\tSYS_EXPD32                          = 0xBAB // 2987\n\tSYS_EXPD64                          = 0xBAC // 2988\n\tSYS_EXPD128                         = 0xBAD // 2989\n\tSYS_EXP2D32                         = 0xBAE // 2990\n\tSYS_EXP2D64                         = 0xBAF // 2991\n\tSYS_EXP2D128                        = 0xBB0 // 2992\n\tSYS_EXPM1D32                        = 0xBB1 // 2993\n\tSYS_EXPM1D64                        = 0xBB2 // 2994\n\tSYS_EXPM1D128                       = 0xBB3 // 2995\n\tSYS_FABSD32                         = 0xBB4 // 2996\n\tSYS_FABSD64                         = 0xBB5 // 2997\n\tSYS_FABSD128                        = 0xBB6 // 2998\n\tSYS_FDIMD32                         = 0xBB7 // 2999\n\tSYS_FDIMD64                         = 0xBB8 // 3000\n\tSYS_FDIMD128                        = 0xBB9 // 3001\n\tSYS_FE_DEC_GETROUND                 = 0xBBA // 3002\n\tSYS_FE_DEC_SETROUND                 = 0xBBB // 3003\n\tSYS_FLOORD32                        = 0xBBC // 3004\n\tSYS_FLOORD64                        = 0xBBD // 3005\n\tSYS_FLOORD128                       = 0xBBE // 3006\n\tSYS_FMAD32                          = 0xBBF // 3007\n\tSYS_FMAD64                          = 0xBC0 // 3008\n\tSYS_FMAD128                         = 0xBC1 // 3009\n\tSYS_FMAXD32                         = 0xBC2 // 3010\n\tSYS_FMAXD64                         = 0xBC3 // 3011\n\tSYS_FMAXD128                        = 0xBC4 // 3012\n\tSYS_FMIND32                         = 0xBC5 // 3013\n\tSYS_FMIND64                         = 0xBC6 // 3014\n\tSYS_FMIND128                        = 0xBC7 // 3015\n\tSYS_FMODD32                         = 0xBC8 // 3016\n\tSYS_FMODD64                         = 0xBC9 // 3017\n\tSYS_FMODD128                        = 0xBCA // 3018\n\tSYS___FP_CAST_D                     = 0xBCB // 3019\n\tSYS_FREXPD32                        = 0xBCC // 3020\n\tSYS_FREXPD64                        = 0xBCD // 3021\n\tSYS_FREXPD128                       = 0xBCE // 3022\n\tSYS_HYPOTD32                        = 0xBCF // 3023\n\tSYS_HYPOTD64                        = 0xBD0 // 3024\n\tSYS_HYPOTD128                       = 0xBD1 // 3025\n\tSYS_ILOGBD32                        = 0xBD2 // 3026\n\tSYS_ILOGBD64                        = 0xBD3 // 3027\n\tSYS_ILOGBD128                       = 0xBD4 // 3028\n\tSYS_LDEXPD32                        = 0xBD5 // 3029\n\tSYS_LDEXPD64                        = 0xBD6 // 3030\n\tSYS_LDEXPD128                       = 0xBD7 // 3031\n\tSYS_LGAMMAD32                       = 0xBD8 // 3032\n\tSYS_LGAMMAD64                       = 0xBD9 // 3033\n\tSYS_LGAMMAD128                      = 0xBDA // 3034\n\tSYS_LLRINTD32                       = 0xBDB // 3035\n\tSYS_LLRINTD64                       = 0xBDC // 3036\n\tSYS_LLRINTD128                      = 0xBDD // 3037\n\tSYS_LLROUNDD32                      = 0xBDE // 3038\n\tSYS_LLROUNDD64                      = 0xBDF // 3039\n\tSYS_LLROUNDD128                     = 0xBE0 // 3040\n\tSYS_LOGD32                          = 0xBE1 // 3041\n\tSYS_LOGD64                          = 0xBE2 // 3042\n\tSYS_LOGD128                         = 0xBE3 // 3043\n\tSYS_LOG10D32                        = 0xBE4 // 3044\n\tSYS_LOG10D64                        = 0xBE5 // 3045\n\tSYS_LOG10D128                       = 0xBE6 // 3046\n\tSYS_LOG1PD32                        = 0xBE7 // 3047\n\tSYS_LOG1PD64                        = 0xBE8 // 3048\n\tSYS_LOG1PD128                       = 0xBE9 // 3049\n\tSYS_LOG2D32                         = 0xBEA // 3050\n\tSYS_LOG2D64                         = 0xBEB // 3051\n\tSYS_LOG2D128                        = 0xBEC // 3052\n\tSYS_LOGBD32                         = 0xBED // 3053\n\tSYS_LOGBD64                         = 0xBEE // 3054\n\tSYS_LOGBD128                        = 0xBEF // 3055\n\tSYS_LRINTD32                        = 0xBF0 // 3056\n\tSYS_LRINTD64                        = 0xBF1 // 3057\n\tSYS_LRINTD128                       = 0xBF2 // 3058\n\tSYS_LROUNDD32                       = 0xBF3 // 3059\n\tSYS_LROUNDD64                       = 0xBF4 // 3060\n\tSYS_LROUNDD128                      = 0xBF5 // 3061\n\tSYS_MODFD32                         = 0xBF6 // 3062\n\tSYS_MODFD64                         = 0xBF7 // 3063\n\tSYS_MODFD128                        = 0xBF8 // 3064\n\tSYS_NAND32                          = 0xBF9 // 3065\n\tSYS_NAND64                          = 0xBFA // 3066\n\tSYS_NAND128                         = 0xBFB // 3067\n\tSYS_NEARBYINTD32                    = 0xBFC // 3068\n\tSYS_NEARBYINTD64                    = 0xBFD // 3069\n\tSYS_NEARBYINTD128                   = 0xBFE // 3070\n\tSYS_NEXTAFTERD32                    = 0xBFF // 3071\n\tSYS_NEXTAFTERD64                    = 0xC00 // 3072\n\tSYS_NEXTAFTERD128                   = 0xC01 // 3073\n\tSYS_NEXTTOWARDD32                   = 0xC02 // 3074\n\tSYS_NEXTTOWARDD64                   = 0xC03 // 3075\n\tSYS_NEXTTOWARDD128                  = 0xC04 // 3076\n\tSYS_POWD32                          = 0xC05 // 3077\n\tSYS_POWD64                          = 0xC06 // 3078\n\tSYS_POWD128                         = 0xC07 // 3079\n\tSYS_QUANTIZED32                     = 0xC08 // 3080\n\tSYS_QUANTIZED64                     = 0xC09 // 3081\n\tSYS_QUANTIZED128                    = 0xC0A // 3082\n\tSYS_REMAINDERD32                    = 0xC0B // 3083\n\tSYS_REMAINDERD64                    = 0xC0C // 3084\n\tSYS_REMAINDERD128                   = 0xC0D // 3085\n\tSYS___REMQUOD32                     = 0xC0E // 3086\n\tSYS___REMQUOD64                     = 0xC0F // 3087\n\tSYS___REMQUOD128                    = 0xC10 // 3088\n\tSYS_RINTD32                         = 0xC11 // 3089\n\tSYS_RINTD64                         = 0xC12 // 3090\n\tSYS_RINTD128                        = 0xC13 // 3091\n\tSYS_ROUNDD32                        = 0xC14 // 3092\n\tSYS_ROUNDD64                        = 0xC15 // 3093\n\tSYS_ROUNDD128                       = 0xC16 // 3094\n\tSYS_SAMEQUANTUMD32                  = 0xC17 // 3095\n\tSYS_SAMEQUANTUMD64                  = 0xC18 // 3096\n\tSYS_SAMEQUANTUMD128                 = 0xC19 // 3097\n\tSYS_SCALBLND32                      = 0xC1A // 3098\n\tSYS_SCALBLND64                      = 0xC1B // 3099\n\tSYS_SCALBLND128                     = 0xC1C // 3100\n\tSYS_SCALBND32                       = 0xC1D // 3101\n\tSYS_SCALBND64                       = 0xC1E // 3102\n\tSYS_SCALBND128                      = 0xC1F // 3103\n\tSYS_SIND32                          = 0xC20 // 3104\n\tSYS_SIND64                          = 0xC21 // 3105\n\tSYS_SIND128                         = 0xC22 // 3106\n\tSYS_SINHD32                         = 0xC23 // 3107\n\tSYS_SINHD64                         = 0xC24 // 3108\n\tSYS_SINHD128                        = 0xC25 // 3109\n\tSYS_SQRTD32                         = 0xC26 // 3110\n\tSYS_SQRTD64                         = 0xC27 // 3111\n\tSYS_SQRTD128                        = 0xC28 // 3112\n\tSYS_STRTOD32                        = 0xC29 // 3113\n\tSYS_STRTOD64                        = 0xC2A // 3114\n\tSYS_STRTOD128                       = 0xC2B // 3115\n\tSYS_TAND32                          = 0xC2C // 3116\n\tSYS_TAND64                          = 0xC2D // 3117\n\tSYS_TAND128                         = 0xC2E // 3118\n\tSYS_TANHD32                         = 0xC2F // 3119\n\tSYS_TANHD64                         = 0xC30 // 3120\n\tSYS_TANHD128                        = 0xC31 // 3121\n\tSYS_TGAMMAD32                       = 0xC32 // 3122\n\tSYS_TGAMMAD64                       = 0xC33 // 3123\n\tSYS_TGAMMAD128                      = 0xC34 // 3124\n\tSYS_TRUNCD32                        = 0xC3E // 3134\n\tSYS_TRUNCD64                        = 0xC3F // 3135\n\tSYS_TRUNCD128                       = 0xC40 // 3136\n\tSYS_WCSTOD32                        = 0xC41 // 3137\n\tSYS_WCSTOD64                        = 0xC42 // 3138\n\tSYS_WCSTOD128                       = 0xC43 // 3139\n\tSYS___CODEPAGE_INFO                 = 0xC64 // 3172\n\tSYS_POSIX_OPENPT                    = 0xC66 // 3174\n\tSYS_PSELECT                         = 0xC67 // 3175\n\tSYS_SOCKATMARK                      = 0xC68 // 3176\n\tSYS_AIO_FSYNC                       = 0xC69 // 3177\n\tSYS_LIO_LISTIO                      = 0xC6A // 3178\n\tSYS___ATANPID32                     = 0xC6B // 3179\n\tSYS___ATANPID64                     = 0xC6C // 3180\n\tSYS___ATANPID128                    = 0xC6D // 3181\n\tSYS___COSPID32                      = 0xC6E // 3182\n\tSYS___COSPID64                      = 0xC6F // 3183\n\tSYS___COSPID128                     = 0xC70 // 3184\n\tSYS___SINPID32                      = 0xC71 // 3185\n\tSYS___SINPID64                      = 0xC72 // 3186\n\tSYS___SINPID128                     = 0xC73 // 3187\n\tSYS_SETIPV4SOURCEFILTER             = 0xC76 // 3190\n\tSYS_GETIPV4SOURCEFILTER             = 0xC77 // 3191\n\tSYS_SETSOURCEFILTER                 = 0xC78 // 3192\n\tSYS_GETSOURCEFILTER                 = 0xC79 // 3193\n\tSYS_FWRITE_UNLOCKED                 = 0xC7A // 3194\n\tSYS_FREAD_UNLOCKED                  = 0xC7B // 3195\n\tSYS_FGETS_UNLOCKED                  = 0xC7C // 3196\n\tSYS_GETS_UNLOCKED                   = 0xC7D // 3197\n\tSYS_FPUTS_UNLOCKED                  = 0xC7E // 3198\n\tSYS_PUTS_UNLOCKED                   = 0xC7F // 3199\n\tSYS_FGETC_UNLOCKED                  = 0xC80 // 3200\n\tSYS_FPUTC_UNLOCKED                  = 0xC81 // 3201\n\tSYS_DLADDR                          = 0xC82 // 3202\n\tSYS_SHM_OPEN                        = 0xC8C // 3212\n\tSYS_SHM_UNLINK                      = 0xC8D // 3213\n\tSYS___CLASS2F                       = 0xC91 // 3217\n\tSYS___CLASS2L                       = 0xC92 // 3218\n\tSYS___CLASS2F_B                     = 0xC93 // 3219\n\tSYS___CLASS2F_H                     = 0xC94 // 3220\n\tSYS___CLASS2L_B                     = 0xC95 // 3221\n\tSYS___CLASS2L_H                     = 0xC96 // 3222\n\tSYS___CLASS2D32                     = 0xC97 // 3223\n\tSYS___CLASS2D64                     = 0xC98 // 3224\n\tSYS___CLASS2D128                    = 0xC99 // 3225\n\tSYS___TOCSNAME2                     = 0xC9A // 3226\n\tSYS___D1TOP                         = 0xC9B // 3227\n\tSYS___D2TOP                         = 0xC9C // 3228\n\tSYS___D4TOP                         = 0xC9D // 3229\n\tSYS___PTOD1                         = 0xC9E // 3230\n\tSYS___PTOD2                         = 0xC9F // 3231\n\tSYS___PTOD4                         = 0xCA0 // 3232\n\tSYS_CLEARERR_UNLOCKED               = 0xCA1 // 3233\n\tSYS_FDELREC_UNLOCKED                = 0xCA2 // 3234\n\tSYS_FEOF_UNLOCKED                   = 0xCA3 // 3235\n\tSYS_FERROR_UNLOCKED                 = 0xCA4 // 3236\n\tSYS_FFLUSH_UNLOCKED                 = 0xCA5 // 3237\n\tSYS_FGETPOS_UNLOCKED                = 0xCA6 // 3238\n\tSYS_FGETWC_UNLOCKED                 = 0xCA7 // 3239\n\tSYS_FGETWS_UNLOCKED                 = 0xCA8 // 3240\n\tSYS_FILENO_UNLOCKED                 = 0xCA9 // 3241\n\tSYS_FLDATA_UNLOCKED                 = 0xCAA // 3242\n\tSYS_FLOCATE_UNLOCKED                = 0xCAB // 3243\n\tSYS_FPRINTF_UNLOCKED                = 0xCAC // 3244\n\tSYS_FPUTWC_UNLOCKED                 = 0xCAD // 3245\n\tSYS_FPUTWS_UNLOCKED                 = 0xCAE // 3246\n\tSYS_FSCANF_UNLOCKED                 = 0xCAF // 3247\n\tSYS_FSEEK_UNLOCKED                  = 0xCB0 // 3248\n\tSYS_FSEEKO_UNLOCKED                 = 0xCB1 // 3249\n\tSYS_FSETPOS_UNLOCKED                = 0xCB3 // 3251\n\tSYS_FTELL_UNLOCKED                  = 0xCB4 // 3252\n\tSYS_FTELLO_UNLOCKED                 = 0xCB5 // 3253\n\tSYS_FUPDATE_UNLOCKED                = 0xCB7 // 3255\n\tSYS_FWIDE_UNLOCKED                  = 0xCB8 // 3256\n\tSYS_FWPRINTF_UNLOCKED               = 0xCB9 // 3257\n\tSYS_FWSCANF_UNLOCKED                = 0xCBA // 3258\n\tSYS_GETWC_UNLOCKED                  = 0xCBB // 3259\n\tSYS_GETWCHAR_UNLOCKED               = 0xCBC // 3260\n\tSYS_PERROR_UNLOCKED                 = 0xCBD // 3261\n\tSYS_PRINTF_UNLOCKED                 = 0xCBE // 3262\n\tSYS_PUTWC_UNLOCKED                  = 0xCBF // 3263\n\tSYS_PUTWCHAR_UNLOCKED               = 0xCC0 // 3264\n\tSYS_REWIND_UNLOCKED                 = 0xCC1 // 3265\n\tSYS_SCANF_UNLOCKED                  = 0xCC2 // 3266\n\tSYS_UNGETC_UNLOCKED                 = 0xCC3 // 3267\n\tSYS_UNGETWC_UNLOCKED                = 0xCC4 // 3268\n\tSYS_VFPRINTF_UNLOCKED               = 0xCC5 // 3269\n\tSYS_VFSCANF_UNLOCKED                = 0xCC7 // 3271\n\tSYS_VFWPRINTF_UNLOCKED              = 0xCC9 // 3273\n\tSYS_VFWSCANF_UNLOCKED               = 0xCCB // 3275\n\tSYS_VPRINTF_UNLOCKED                = 0xCCD // 3277\n\tSYS_VSCANF_UNLOCKED                 = 0xCCF // 3279\n\tSYS_VWPRINTF_UNLOCKED               = 0xCD1 // 3281\n\tSYS_VWSCANF_UNLOCKED                = 0xCD3 // 3283\n\tSYS_WPRINTF_UNLOCKED                = 0xCD5 // 3285\n\tSYS_WSCANF_UNLOCKED                 = 0xCD6 // 3286\n\tSYS_ASCTIME64                       = 0xCD7 // 3287\n\tSYS_ASCTIME64_R                     = 0xCD8 // 3288\n\tSYS_CTIME64                         = 0xCD9 // 3289\n\tSYS_CTIME64_R                       = 0xCDA // 3290\n\tSYS_DIFFTIME64                      = 0xCDB // 3291\n\tSYS_GMTIME64                        = 0xCDC // 3292\n\tSYS_GMTIME64_R                      = 0xCDD // 3293\n\tSYS_LOCALTIME64                     = 0xCDE // 3294\n\tSYS_LOCALTIME64_R                   = 0xCDF // 3295\n\tSYS_MKTIME64                        = 0xCE0 // 3296\n\tSYS_TIME64                          = 0xCE1 // 3297\n\tSYS___LOGIN_APPLID                  = 0xCE2 // 3298\n\tSYS___PASSWD_APPLID                 = 0xCE3 // 3299\n\tSYS_PTHREAD_SECURITY_APPLID_NP      = 0xCE4 // 3300\n\tSYS___GETTHENT                      = 0xCE5 // 3301\n\tSYS_FREEIFADDRS                     = 0xCE6 // 3302\n\tSYS_GETIFADDRS                      = 0xCE7 // 3303\n\tSYS_POSIX_FALLOCATE                 = 0xCE8 // 3304\n\tSYS_POSIX_MEMALIGN                  = 0xCE9 // 3305\n\tSYS_SIZEOF_ALLOC                    = 0xCEA // 3306\n\tSYS_RESIZE_ALLOC                    = 0xCEB // 3307\n\tSYS_FREAD_NOUPDATE                  = 0xCEC // 3308\n\tSYS_FREAD_NOUPDATE_UNLOCKED         = 0xCED // 3309\n\tSYS_FGETPOS64                       = 0xCEE // 3310\n\tSYS_FSEEK64                         = 0xCEF // 3311\n\tSYS_FSEEKO64                        = 0xCF0 // 3312\n\tSYS_FSETPOS64                       = 0xCF1 // 3313\n\tSYS_FTELL64                         = 0xCF2 // 3314\n\tSYS_FTELLO64                        = 0xCF3 // 3315\n\tSYS_FGETPOS64_UNLOCKED              = 0xCF4 // 3316\n\tSYS_FSEEK64_UNLOCKED                = 0xCF5 // 3317\n\tSYS_FSEEKO64_UNLOCKED               = 0xCF6 // 3318\n\tSYS_FSETPOS64_UNLOCKED              = 0xCF7 // 3319\n\tSYS_FTELL64_UNLOCKED                = 0xCF8 // 3320\n\tSYS_FTELLO64_UNLOCKED               = 0xCF9 // 3321\n\tSYS_FOPEN_UNLOCKED                  = 0xCFA // 3322\n\tSYS_FREOPEN_UNLOCKED                = 0xCFB // 3323\n\tSYS_FDOPEN_UNLOCKED                 = 0xCFC // 3324\n\tSYS_TMPFILE_UNLOCKED                = 0xCFD // 3325\n\tSYS___MOSERVICES                    = 0xD3D // 3389\n\tSYS___GETTOD                        = 0xD3E // 3390\n\tSYS_C16RTOMB                        = 0xD40 // 3392\n\tSYS_C32RTOMB                        = 0xD41 // 3393\n\tSYS_MBRTOC16                        = 0xD42 // 3394\n\tSYS_MBRTOC32                        = 0xD43 // 3395\n\tSYS_QUANTEXPD32                     = 0xD44 // 3396\n\tSYS_QUANTEXPD64                     = 0xD45 // 3397\n\tSYS_QUANTEXPD128                    = 0xD46 // 3398\n\tSYS___LOCALE_CTL                    = 0xD47 // 3399\n\tSYS___SMF_RECORD2                   = 0xD48 // 3400\n\tSYS_FOPEN64                         = 0xD49 // 3401\n\tSYS_FOPEN64_UNLOCKED                = 0xD4A // 3402\n\tSYS_FREOPEN64                       = 0xD4B // 3403\n\tSYS_FREOPEN64_UNLOCKED              = 0xD4C // 3404\n\tSYS_TMPFILE64                       = 0xD4D // 3405\n\tSYS_TMPFILE64_UNLOCKED              = 0xD4E // 3406\n\tSYS_GETDATE64                       = 0xD4F // 3407\n\tSYS_GETTIMEOFDAY64                  = 0xD50 // 3408\n\tSYS_BIND2ADDRSEL                    = 0xD59 // 3417\n\tSYS_INET6_IS_SRCADDR                = 0xD5A // 3418\n\tSYS___GETGRGID1                     = 0xD5B // 3419\n\tSYS___GETGRNAM1                     = 0xD5C // 3420\n\tSYS___FBUFSIZE                      = 0xD60 // 3424\n\tSYS___FPENDING                      = 0xD61 // 3425\n\tSYS___FLBF                          = 0xD62 // 3426\n\tSYS___FREADABLE                     = 0xD63 // 3427\n\tSYS___FWRITABLE                     = 0xD64 // 3428\n\tSYS___FREADING                      = 0xD65 // 3429\n\tSYS___FWRITING                      = 0xD66 // 3430\n\tSYS___FSETLOCKING                   = 0xD67 // 3431\n\tSYS__FLUSHLBF                       = 0xD68 // 3432\n\tSYS___FPURGE                        = 0xD69 // 3433\n\tSYS___FREADAHEAD                    = 0xD6A // 3434\n\tSYS___FSETERR                       = 0xD6B // 3435\n\tSYS___FPENDING_UNLOCKED             = 0xD6C // 3436\n\tSYS___FREADING_UNLOCKED             = 0xD6D // 3437\n\tSYS___FWRITING_UNLOCKED             = 0xD6E // 3438\n\tSYS__FLUSHLBF_UNLOCKED              = 0xD6F // 3439\n\tSYS___FPURGE_UNLOCKED               = 0xD70 // 3440\n\tSYS___FREADAHEAD_UNLOCKED           = 0xD71 // 3441\n\tSYS___LE_CEEGTJS                    = 0xD72 // 3442\n\tSYS___LE_RECORD_DUMP                = 0xD73 // 3443\n\tSYS_FSTAT64                         = 0xD74 // 3444\n\tSYS_LSTAT64                         = 0xD75 // 3445\n\tSYS_STAT64                          = 0xD76 // 3446\n\tSYS___READDIR2_64                   = 0xD77 // 3447\n\tSYS___OPEN_STAT64                   = 0xD78 // 3448\n\tSYS_FTW64                           = 0xD79 // 3449\n\tSYS_NFTW64                          = 0xD7A // 3450\n\tSYS_UTIME64                         = 0xD7B // 3451\n\tSYS_UTIMES64                        = 0xD7C // 3452\n\tSYS___GETIPC64                      = 0xD7D // 3453\n\tSYS_MSGCTL64                        = 0xD7E // 3454\n\tSYS_SEMCTL64                        = 0xD7F // 3455\n\tSYS_SHMCTL64                        = 0xD80 // 3456\n\tSYS_MSGXRCV64                       = 0xD81 // 3457\n\tSYS___MGXR64                        = 0xD81 // 3457\n\tSYS_W_GETPSENT64                    = 0xD82 // 3458\n\tSYS_PTHREAD_COND_TIMEDWAIT64        = 0xD83 // 3459\n\tSYS_FTIME64                         = 0xD85 // 3461\n\tSYS_GETUTXENT64                     = 0xD86 // 3462\n\tSYS_GETUTXID64                      = 0xD87 // 3463\n\tSYS_GETUTXLINE64                    = 0xD88 // 3464\n\tSYS_PUTUTXLINE64                    = 0xD89 // 3465\n\tSYS_NEWLOCALE                       = 0xD8A // 3466\n\tSYS_FREELOCALE                      = 0xD8B // 3467\n\tSYS_USELOCALE                       = 0xD8C // 3468\n\tSYS_DUPLOCALE                       = 0xD8D // 3469\n\tSYS___CHATTR64                      = 0xD9C // 3484\n\tSYS___LCHATTR64                     = 0xD9D // 3485\n\tSYS___FCHATTR64                     = 0xD9E // 3486\n\tSYS_____CHATTR64_A                  = 0xD9F // 3487\n\tSYS_____LCHATTR64_A                 = 0xDA0 // 3488\n\tSYS___LE_CEEUSGD                    = 0xDA1 // 3489\n\tSYS___LE_IFAM_CON                   = 0xDA2 // 3490\n\tSYS___LE_IFAM_DSC                   = 0xDA3 // 3491\n\tSYS___LE_IFAM_GET                   = 0xDA4 // 3492\n\tSYS___LE_IFAM_QRY                   = 0xDA5 // 3493\n\tSYS_ALIGNED_ALLOC                   = 0xDA6 // 3494\n\tSYS_ACCEPT4                         = 0xDA7 // 3495\n\tSYS___ACCEPT4_A                     = 0xDA8 // 3496\n\tSYS_COPYFILERANGE                   = 0xDA9 // 3497\n\tSYS_GETLINE                         = 0xDAA // 3498\n\tSYS___GETLINE_A                     = 0xDAB // 3499\n\tSYS_DIRFD                           = 0xDAC // 3500\n\tSYS_CLOCK_GETTIME                   = 0xDAD // 3501\n\tSYS_DUP3                            = 0xDAE // 3502\n\tSYS_EPOLL_CREATE                    = 0xDAF // 3503\n\tSYS_EPOLL_CREATE1                   = 0xDB0 // 3504\n\tSYS_EPOLL_CTL                       = 0xDB1 // 3505\n\tSYS_EPOLL_WAIT                      = 0xDB2 // 3506\n\tSYS_EPOLL_PWAIT                     = 0xDB3 // 3507\n\tSYS_EVENTFD                         = 0xDB4 // 3508\n\tSYS_STATFS                          = 0xDB5 // 3509\n\tSYS___STATFS_A                      = 0xDB6 // 3510\n\tSYS_FSTATFS                         = 0xDB7 // 3511\n\tSYS_INOTIFY_INIT                    = 0xDB8 // 3512\n\tSYS_INOTIFY_INIT1                   = 0xDB9 // 3513\n\tSYS_INOTIFY_ADD_WATCH               = 0xDBA // 3514\n\tSYS___INOTIFY_ADD_WATCH_A           = 0xDBB // 3515\n\tSYS_INOTIFY_RM_WATCH                = 0xDBC // 3516\n\tSYS_PIPE2                           = 0xDBD // 3517\n\tSYS_PIVOT_ROOT                      = 0xDBE // 3518\n\tSYS___PIVOT_ROOT_A                  = 0xDBF // 3519\n\tSYS_PRCTL                           = 0xDC0 // 3520\n\tSYS_PRLIMIT                         = 0xDC1 // 3521\n\tSYS_SETHOSTNAME                     = 0xDC2 // 3522\n\tSYS___SETHOSTNAME_A                 = 0xDC3 // 3523\n\tSYS_SETRESUID                       = 0xDC4 // 3524\n\tSYS_SETRESGID                       = 0xDC5 // 3525\n\tSYS_PTHREAD_CONDATTR_GETCLOCK       = 0xDC6 // 3526\n\tSYS_FLOCK                           = 0xDC7 // 3527\n\tSYS_FGETXATTR                       = 0xDC8 // 3528\n\tSYS___FGETXATTR_A                   = 0xDC9 // 3529\n\tSYS_FLISTXATTR                      = 0xDCA // 3530\n\tSYS___FLISTXATTR_A                  = 0xDCB // 3531\n\tSYS_FREMOVEXATTR                    = 0xDCC // 3532\n\tSYS___FREMOVEXATTR_A                = 0xDCD // 3533\n\tSYS_FSETXATTR                       = 0xDCE // 3534\n\tSYS___FSETXATTR_A                   = 0xDCF // 3535\n\tSYS_GETXATTR                        = 0xDD0 // 3536\n\tSYS___GETXATTR_A                    = 0xDD1 // 3537\n\tSYS_LGETXATTR                       = 0xDD2 // 3538\n\tSYS___LGETXATTR_A                   = 0xDD3 // 3539\n\tSYS_LISTXATTR                       = 0xDD4 // 3540\n\tSYS___LISTXATTR_A                   = 0xDD5 // 3541\n\tSYS_LLISTXATTR                      = 0xDD6 // 3542\n\tSYS___LLISTXATTR_A                  = 0xDD7 // 3543\n\tSYS_LREMOVEXATTR                    = 0xDD8 // 3544\n\tSYS___LREMOVEXATTR_A                = 0xDD9 // 3545\n\tSYS_LSETXATTR                       = 0xDDA // 3546\n\tSYS___LSETXATTR_A                   = 0xDDB // 3547\n\tSYS_REMOVEXATTR                     = 0xDDC // 3548\n\tSYS___REMOVEXATTR_A                 = 0xDDD // 3549\n\tSYS_SETXATTR                        = 0xDDE // 3550\n\tSYS___SETXATTR_A                    = 0xDDF // 3551\n\tSYS_FDATASYNC                       = 0xDE0 // 3552\n\tSYS_SYNCFS                          = 0xDE1 // 3553\n\tSYS_FUTIMES                         = 0xDE2 // 3554\n\tSYS_FUTIMESAT                       = 0xDE3 // 3555\n\tSYS___FUTIMESAT_A                   = 0xDE4 // 3556\n\tSYS_LUTIMES                         = 0xDE5 // 3557\n\tSYS___LUTIMES_A                     = 0xDE6 // 3558\n\tSYS_INET_ATON                       = 0xDE7 // 3559\n\tSYS_GETRANDOM                       = 0xDE8 // 3560\n\tSYS_GETTID                          = 0xDE9 // 3561\n\tSYS_MEMFD_CREATE                    = 0xDEA // 3562\n\tSYS___MEMFD_CREATE_A                = 0xDEB // 3563\n\tSYS_FACCESSAT                       = 0xDEC // 3564\n\tSYS___FACCESSAT_A                   = 0xDED // 3565\n\tSYS_FCHMODAT                        = 0xDEE // 3566\n\tSYS___FCHMODAT_A                    = 0xDEF // 3567\n\tSYS_FCHOWNAT                        = 0xDF0 // 3568\n\tSYS___FCHOWNAT_A                    = 0xDF1 // 3569\n\tSYS_FSTATAT                         = 0xDF2 // 3570\n\tSYS___FSTATAT_A                     = 0xDF3 // 3571\n\tSYS_LINKAT                          = 0xDF4 // 3572\n\tSYS___LINKAT_A                      = 0xDF5 // 3573\n\tSYS_MKDIRAT                         = 0xDF6 // 3574\n\tSYS___MKDIRAT_A                     = 0xDF7 // 3575\n\tSYS_MKFIFOAT                        = 0xDF8 // 3576\n\tSYS___MKFIFOAT_A                    = 0xDF9 // 3577\n\tSYS_MKNODAT                         = 0xDFA // 3578\n\tSYS___MKNODAT_A                     = 0xDFB // 3579\n\tSYS_OPENAT                          = 0xDFC // 3580\n\tSYS___OPENAT_A                      = 0xDFD // 3581\n\tSYS_READLINKAT                      = 0xDFE // 3582\n\tSYS___READLINKAT_A                  = 0xDFF // 3583\n\tSYS_RENAMEAT                        = 0xE00 // 3584\n\tSYS___RENAMEAT_A                    = 0xE01 // 3585\n\tSYS_RENAMEAT2                       = 0xE02 // 3586\n\tSYS___RENAMEAT2_A                   = 0xE03 // 3587\n\tSYS_SYMLINKAT                       = 0xE04 // 3588\n\tSYS___SYMLINKAT_A                   = 0xE05 // 3589\n\tSYS_UNLINKAT                        = 0xE06 // 3590\n\tSYS___UNLINKAT_A                    = 0xE07 // 3591\n\tSYS_SYSINFO                         = 0xE08 // 3592\n\tSYS_WAIT4                           = 0xE0A // 3594\n\tSYS_CLONE                           = 0xE0B // 3595\n\tSYS_UNSHARE                         = 0xE0C // 3596\n\tSYS_SETNS                           = 0xE0D // 3597\n\tSYS_CAPGET                          = 0xE0E // 3598\n\tSYS_CAPSET                          = 0xE0F // 3599\n\tSYS_STRCHRNUL                       = 0xE10 // 3600\n\tSYS_PTHREAD_CONDATTR_SETCLOCK       = 0xE12 // 3602\n\tSYS_OPEN_BY_HANDLE_AT               = 0xE13 // 3603\n\tSYS___OPEN_BY_HANDLE_AT_A           = 0xE14 // 3604\n\tSYS___INET_ATON_A                   = 0xE15 // 3605\n\tSYS_MOUNT1                          = 0xE16 // 3606\n\tSYS___MOUNT1_A                      = 0xE17 // 3607\n\tSYS_UMOUNT1                         = 0xE18 // 3608\n\tSYS___UMOUNT1_A                     = 0xE19 // 3609\n\tSYS_UMOUNT2                         = 0xE1A // 3610\n\tSYS___UMOUNT2_A                     = 0xE1B // 3611\n\tSYS___PRCTL_A                       = 0xE1C // 3612\n\tSYS_LOCALTIME_R2                    = 0xE1D // 3613\n\tSYS___LOCALTIME_R2_A                = 0xE1E // 3614\n\tSYS_OPENAT2                         = 0xE1F // 3615\n\tSYS___OPENAT2_A                     = 0xE20 // 3616\n\tSYS___LE_CEEMICT                    = 0xE21 // 3617\n\tSYS_GETENTROPY                      = 0xE22 // 3618\n\tSYS_NANOSLEEP                       = 0xE23 // 3619\n\tSYS_UTIMENSAT                       = 0xE24 // 3620\n\tSYS___UTIMENSAT_A                   = 0xE25 // 3621\n\tSYS_ASPRINTF                        = 0xE26 // 3622\n\tSYS___ASPRINTF_A                    = 0xE27 // 3623\n\tSYS_VASPRINTF                       = 0xE28 // 3624\n\tSYS___VASPRINTF_A                   = 0xE29 // 3625\n\tSYS_DPRINTF                         = 0xE2A // 3626\n\tSYS___DPRINTF_A                     = 0xE2B // 3627\n\tSYS_GETOPT_LONG                     = 0xE2C // 3628\n\tSYS___GETOPT_LONG_A                 = 0xE2D // 3629\n\tSYS_PSIGNAL                         = 0xE2E // 3630\n\tSYS___PSIGNAL_A                     = 0xE2F // 3631\n\tSYS_PSIGNAL_UNLOCKED                = 0xE30 // 3632\n\tSYS___PSIGNAL_UNLOCKED_A            = 0xE31 // 3633\n\tSYS_FSTATAT_O                       = 0xE32 // 3634\n\tSYS___FSTATAT_O_A                   = 0xE33 // 3635\n\tSYS_FSTATAT64                       = 0xE34 // 3636\n\tSYS___FSTATAT64_A                   = 0xE35 // 3637\n\tSYS___CHATTRAT                      = 0xE36 // 3638\n\tSYS_____CHATTRAT_A                  = 0xE37 // 3639\n\tSYS___CHATTRAT64                    = 0xE38 // 3640\n\tSYS_____CHATTRAT64_A                = 0xE39 // 3641\n\tSYS_MADVISE                         = 0xE3A // 3642\n\tSYS___AUTHENTICATE                  = 0xE3B // 3643\n\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go",
    "content": "// cgo -godefs types_aix.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc && aix\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x3ff\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 off64 int64\ntype off int32\ntype Mode_t uint32\n\ntype Timespec struct {\n\tSec  int32\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Timeval32 struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Timex struct{}\n\ntype Time_t int32\n\ntype Tms struct{}\n\ntype Utimbuf struct {\n\tActime  int32\n\tModtime int32\n}\n\ntype Timezone struct {\n\tMinuteswest int32\n\tDsttime     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 Pid_t int32\n\ntype _Gid_t uint32\n\ntype dev_t uint32\n\ntype Stat_t struct {\n\tDev      uint32\n\tIno      uint32\n\tMode     uint32\n\tNlink    int16\n\tFlag     uint16\n\tUid      uint32\n\tGid      uint32\n\tRdev     uint32\n\tSize     int32\n\tAtim     Timespec\n\tMtim     Timespec\n\tCtim     Timespec\n\tBlksize  int32\n\tBlocks   int32\n\tVfstype  int32\n\tVfs      uint32\n\tType     uint32\n\tGen      uint32\n\tReserved [9]uint32\n}\n\ntype StatxTimestamp struct{}\n\ntype Statx_t struct{}\n\ntype Dirent struct {\n\tOffset uint32\n\tIno    uint32\n\tReclen uint16\n\tNamlen uint16\n\tName   [256]uint8\n}\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [1023]uint8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [120]uint8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]uint8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [1012]uint8\n}\n\ntype _Socklen uint32\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x404\n\tSizeofSockaddrUnix     = 0x401\n\tSizeofSockaddrDatalink = 0x80\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tSizeofIfMsghdr = 0x10\n)\n\ntype IfMsgHdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tAddrlen uint8\n\t_       [1]byte\n}\n\ntype FdSet struct {\n\tBits [2048]int32\n}\n\ntype Utsname struct {\n\tSysname  [32]byte\n\tNodename [32]byte\n\tRelease  [32]byte\n\tVersion  [32]byte\n\tMachine  [32]byte\n}\n\ntype Ustat_t struct{}\n\ntype Sigset_t struct {\n\tLosigs uint32\n\tHisigs uint32\n}\n\nconst (\n\tAT_FDCWD            = -0x2\n\tAT_REMOVEDIR        = 0x1\n\tAT_SYMLINK_NOFOLLOW = 0x1\n)\n\ntype Termios struct {\n\tIflag uint32\n\tOflag uint32\n\tCflag uint32\n\tLflag uint32\n\tCc    [16]uint8\n}\n\ntype Termio struct {\n\tIflag uint16\n\tOflag uint16\n\tCflag uint16\n\tLflag uint16\n\tLine  uint8\n\tCc    [8]uint8\n\t_     [1]byte\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  uint16\n\tRevents uint16\n}\n\nconst (\n\tPOLLERR    = 0x4000\n\tPOLLHUP    = 0x2000\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x8000\n\tPOLLOUT    = 0x2\n\tPOLLPRI    = 0x4\n\tPOLLRDBAND = 0x20\n\tPOLLRDNORM = 0x10\n\tPOLLWRBAND = 0x40\n\tPOLLWRNORM = 0x2\n)\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tSysid  uint32\n\tPid    int32\n\tVfs    int32\n\tStart  int64\n\tLen    int64\n}\n\ntype Fsid_t struct {\n\tVal [2]uint32\n}\ntype Fsid64_t struct {\n\tVal [2]uint64\n}\n\ntype Statfs_t struct {\n\tVersion   int32\n\tType      int32\n\tBsize     uint32\n\tBlocks    uint32\n\tBfree     uint32\n\tBavail    uint32\n\tFiles     uint32\n\tFfree     uint32\n\tFsid      Fsid_t\n\tVfstype   int32\n\tFsize     uint32\n\tVfsnumber int32\n\tVfsoff    int32\n\tVfslen    int32\n\tVfsvers   int32\n\tFname     [32]uint8\n\tFpack     [32]uint8\n\tName_max  int32\n}\n\nconst RNDGETENTCNT = 0x80045200\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go",
    "content": "// cgo -godefs types_aix.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64 && aix\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x3ff\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 off64 int64\ntype off int64\ntype Mode_t uint32\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int32\n\t_    [4]byte\n}\n\ntype Timeval32 struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Timex struct{}\n\ntype Time_t int64\n\ntype Tms struct{}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime int64\n}\n\ntype Timezone struct {\n\tMinuteswest int32\n\tDsttime     int32\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 Pid_t int32\n\ntype _Gid_t uint32\n\ntype dev_t uint64\n\ntype Stat_t struct {\n\tDev      uint64\n\tIno      uint64\n\tMode     uint32\n\tNlink    int16\n\tFlag     uint16\n\tUid      uint32\n\tGid      uint32\n\tRdev     uint64\n\tSsize    int32\n\tAtim     Timespec\n\tMtim     Timespec\n\tCtim     Timespec\n\tBlksize  int64\n\tBlocks   int64\n\tVfstype  int32\n\tVfs      uint32\n\tType     uint32\n\tGen      uint32\n\tReserved [9]uint32\n\tPadto_ll uint32\n\tSize     int64\n}\n\ntype StatxTimestamp struct{}\n\ntype Statx_t struct{}\n\ntype Dirent struct {\n\tOffset uint64\n\tIno    uint64\n\tReclen uint16\n\tNamlen uint16\n\tName   [256]uint8\n\t_      [4]byte\n}\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [1023]uint8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [120]uint8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]uint8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [1012]uint8\n}\n\ntype _Socklen uint32\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x404\n\tSizeofSockaddrUnix     = 0x401\n\tSizeofSockaddrDatalink = 0x80\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x10\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tSizeofIfMsghdr = 0x10\n)\n\ntype IfMsgHdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tAddrlen uint8\n\t_       [1]byte\n}\n\ntype FdSet struct {\n\tBits [1024]int64\n}\n\ntype Utsname struct {\n\tSysname  [32]byte\n\tNodename [32]byte\n\tRelease  [32]byte\n\tVersion  [32]byte\n\tMachine  [32]byte\n}\n\ntype Ustat_t struct{}\n\ntype Sigset_t struct {\n\tSet [4]uint64\n}\n\nconst (\n\tAT_FDCWD            = -0x2\n\tAT_REMOVEDIR        = 0x1\n\tAT_SYMLINK_NOFOLLOW = 0x1\n)\n\ntype Termios struct {\n\tIflag uint32\n\tOflag uint32\n\tCflag uint32\n\tLflag uint32\n\tCc    [16]uint8\n}\n\ntype Termio struct {\n\tIflag uint16\n\tOflag uint16\n\tCflag uint16\n\tLflag uint16\n\tLine  uint8\n\tCc    [8]uint8\n\t_     [1]byte\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  uint16\n\tRevents uint16\n}\n\nconst (\n\tPOLLERR    = 0x4000\n\tPOLLHUP    = 0x2000\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x8000\n\tPOLLOUT    = 0x2\n\tPOLLPRI    = 0x4\n\tPOLLRDBAND = 0x20\n\tPOLLRDNORM = 0x10\n\tPOLLWRBAND = 0x40\n\tPOLLWRNORM = 0x2\n)\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tSysid  uint32\n\tPid    int32\n\tVfs    int32\n\tStart  int64\n\tLen    int64\n}\n\ntype Fsid_t struct {\n\tVal [2]uint32\n}\ntype Fsid64_t struct {\n\tVal [2]uint64\n}\n\ntype Statfs_t struct {\n\tVersion   int32\n\tType      int32\n\tBsize     uint64\n\tBlocks    uint64\n\tBfree     uint64\n\tBavail    uint64\n\tFiles     uint64\n\tFfree     uint64\n\tFsid      Fsid64_t\n\tVfstype   int32\n\tFsize     uint64\n\tVfsnumber int32\n\tVfsoff    int32\n\tVfslen    int32\n\tVfsvers   int32\n\tFname     [32]uint8\n\tFpack     [32]uint8\n\tName_max  int32\n\t_         [4]byte\n}\n\nconst RNDGETENTCNT = 0x80045200\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go",
    "content": "// cgo -godefs types_darwin.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && darwin\n\npackage unix\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\t_    [4]byte\n}\n\ntype Timeval32 struct {\n\tSec  int32\n\tUsec int32\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 _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     int32\n\tMode    uint16\n\tNlink   uint16\n\tIno     uint64\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\tLspare  int32\n\tQspare  [2]int64\n}\n\ntype Statfs_t struct {\n\tBsize       uint32\n\tIosize      int32\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      uint64\n\tFiles       uint64\n\tFfree       uint64\n\tFsid        Fsid\n\tOwner       uint32\n\tType        uint32\n\tFlags       uint32\n\tFssubtype   uint32\n\tFstypename  [16]byte\n\tMntonname   [1024]byte\n\tMntfromname [1024]byte\n\tFlags_ext   uint32\n\tReserved    [7]uint32\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Fstore_t struct {\n\tFlags      uint32\n\tPosmode    int32\n\tOffset     int64\n\tLength     int64\n\tBytesalloc int64\n}\n\ntype Radvisory_t struct {\n\tOffset int64\n\tCount  int32\n\t_      [4]byte\n}\n\ntype Fbootstraptransfer_t struct {\n\tOffset int64\n\tLength uint64\n\tBuffer *byte\n}\n\ntype Log2phys_t struct {\n\tFlags uint32\n\t_     [16]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Dirent struct {\n\tIno     uint64\n\tSeekoff uint64\n\tReclen  uint16\n\tNamlen  uint16\n\tType    uint8\n\tName    [1024]int8\n\t_       [3]byte\n}\n\ntype Attrlist struct {\n\tBitmapcount uint16\n\tReserved    uint16\n\tCommonattr  uint32\n\tVolattr     uint32\n\tDirattr     uint32\n\tFileattr    uint32\n\tForkattr    uint32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype RawSockaddrCtl struct {\n\tSc_len      uint8\n\tSc_family   uint8\n\tSs_sysaddr  uint16\n\tSc_id       uint32\n\tSc_unit     uint32\n\tSc_reserved [5]uint32\n}\n\ntype RawSockaddrVM struct {\n\tLen       uint8\n\tFamily    uint8\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n}\n\ntype XVSockPCB struct {\n\tXv_len           uint32\n\tXv_vsockpp       uint64\n\tXvp_local_cid    uint32\n\tXvp_local_port   uint32\n\tXvp_remote_cid   uint32\n\tXvp_remote_port  uint32\n\tXvp_rxcnt        uint32\n\tXvp_txcnt        uint32\n\tXvp_peer_rxhiwat uint32\n\tXvp_peer_rxcnt   uint32\n\tXvp_last_pid     int32\n\tXvp_gencnt       uint64\n\tXv_socket        XSocket\n\t_                [4]byte\n}\n\ntype XSocket struct {\n\tXso_len      uint32\n\tXso_so       uint32\n\tSo_type      int16\n\tSo_options   int16\n\tSo_linger    int16\n\tSo_state     int16\n\tSo_pcb       uint32\n\tXso_protocol int32\n\tXso_family   int32\n\tSo_qlen      int16\n\tSo_incqlen   int16\n\tSo_qlimit    int16\n\tSo_timeo     int16\n\tSo_error     uint16\n\tSo_pgid      int32\n\tSo_oobmark   uint32\n\tSo_rcv       XSockbuf\n\tSo_snd       XSockbuf\n\tSo_uid       uint32\n}\n\ntype XSocket64 struct {\n\tXso_len      uint32\n\t_            [8]byte\n\tSo_type      int16\n\tSo_options   int16\n\tSo_linger    int16\n\tSo_state     int16\n\t_            [8]byte\n\tXso_protocol int32\n\tXso_family   int32\n\tSo_qlen      int16\n\tSo_incqlen   int16\n\tSo_qlimit    int16\n\tSo_timeo     int16\n\tSo_error     uint16\n\tSo_pgid      int32\n\tSo_oobmark   uint32\n\tSo_rcv       XSockbuf\n\tSo_snd       XSockbuf\n\tSo_uid       uint32\n}\n\ntype XSockbuf struct {\n\tCc    uint32\n\tHiwat uint32\n\tMbcnt uint32\n\tMbmax uint32\n\tLowat int32\n\tFlags int16\n\tTimeo int16\n}\n\ntype XVSockPgen struct {\n\tLen   uint32\n\tCount uint64\n\tGen   uint64\n\tSogen uint64\n}\n\ntype _Socklen uint32\n\ntype SaeAssocID uint32\n\ntype SaeConnID uint32\n\ntype SaEndpoints struct {\n\tSrcif      uint32\n\tSrcaddr    *RawSockaddr\n\tSrcaddrlen uint32\n\tDstaddr    *RawSockaddr\n\tDstaddrlen uint32\n\t_          [4]byte\n}\n\ntype Xucred struct {\n\tVersion uint32\n\tUid     uint32\n\tNgroups int16\n\tGroups  [16]uint32\n}\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  uint32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\ntype TCPConnectionInfo struct {\n\tState               uint8\n\tSnd_wscale          uint8\n\tRcv_wscale          uint8\n\t_                   uint8\n\tOptions             uint32\n\tFlags               uint32\n\tRto                 uint32\n\tMaxseg              uint32\n\tSnd_ssthresh        uint32\n\tSnd_cwnd            uint32\n\tSnd_wnd             uint32\n\tSnd_sbbytes         uint32\n\tRcv_wnd             uint32\n\tRttcur              uint32\n\tSrtt                uint32\n\tRttvar              uint32\n\tTxpackets           uint64\n\tTxbytes             uint64\n\tTxretransmitbytes   uint64\n\tRxpackets           uint64\n\tRxbytes             uint64\n\tRxoutoforderbytes   uint64\n\tTxretransmitpackets uint64\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x6c\n\tSizeofSockaddrUnix      = 0x6a\n\tSizeofSockaddrDatalink  = 0x14\n\tSizeofSockaddrCtl       = 0x20\n\tSizeofSockaddrVM        = 0xc\n\tSizeofXvsockpcb         = 0xa8\n\tSizeofXSocket           = 0x64\n\tSizeofXSockbuf          = 0x18\n\tSizeofXVSockPgen        = 0x20\n\tSizeofXucred            = 0x4c\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x10\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofMsghdr            = 0x30\n\tSizeofCmsghdr           = 0xc\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofTCPConnectionInfo = 0x70\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]int32\n}\n\nconst (\n\tSizeofIfMsghdr    = 0x70\n\tSizeofIfMsghdr2   = 0xa0\n\tSizeofIfData      = 0x60\n\tSizeofIfData64    = 0x80\n\tSizeofIfaMsghdr   = 0x14\n\tSizeofIfmaMsghdr  = 0x10\n\tSizeofIfmaMsghdr2 = 0x14\n\tSizeofRtMsghdr    = 0x5c\n\tSizeofRtMsghdr2   = 0x5c\n\tSizeofRtMetrics   = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tData    IfData\n}\n\ntype IfMsghdr2 struct {\n\tMsglen     uint16\n\tVersion    uint8\n\tType       uint8\n\tAddrs      int32\n\tFlags      int32\n\tIndex      uint16\n\tSnd_len    int32\n\tSnd_maxlen int32\n\tSnd_drops  int32\n\tTimer      int32\n\tData       IfData64\n}\n\ntype IfData struct {\n\tType       uint8\n\tTypelen    uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tRecvquota  uint8\n\tXmitquota  uint8\n\tUnused1    uint8\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint32\n\tIpackets   uint32\n\tIerrors    uint32\n\tOpackets   uint32\n\tOerrors    uint32\n\tCollisions uint32\n\tIbytes     uint32\n\tObytes     uint32\n\tImcasts    uint32\n\tOmcasts    uint32\n\tIqdrops    uint32\n\tNoproto    uint32\n\tRecvtiming uint32\n\tXmittiming uint32\n\tLastchange Timeval32\n\tUnused2    uint32\n\tHwassist   uint32\n\tReserved1  uint32\n\tReserved2  uint32\n}\n\ntype IfData64 struct {\n\tType       uint8\n\tTypelen    uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tRecvquota  uint8\n\tXmitquota  uint8\n\tUnused1    uint8\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tNoproto    uint64\n\tRecvtiming uint32\n\tXmittiming uint32\n\tLastchange Timeval32\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n}\n\ntype IfmaMsghdr2 struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tAddrs    int32\n\tFlags    int32\n\tIndex    uint16\n\tRefcount int32\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tUse     int32\n\tInits   uint32\n\tRmx     RtMetrics\n}\n\ntype RtMsghdr2 struct {\n\tMsglen      uint16\n\tVersion     uint8\n\tType        uint8\n\tIndex       uint16\n\tFlags       int32\n\tAddrs       int32\n\tRefcnt      int32\n\tParentflags int32\n\tReserved    int32\n\tUse         int32\n\tInits       uint32\n\tRmx         RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint32\n\tMtu      uint32\n\tHopcount uint32\n\tExpire   int32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPksent   uint32\n\tState    uint32\n\tFiller   [3]uint32\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval32\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [2]byte\n}\n\ntype Termios struct {\n\tIflag  uint64\n\tOflag  uint64\n\tCflag  uint64\n\tLflag  uint64\n\tCc     [20]uint8\n\tIspeed uint64\n\tOspeed uint64\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x2\n\tAT_REMOVEDIR        = 0x80\n\tAT_SYMLINK_FOLLOW   = 0x40\n\tAT_SYMLINK_NOFOLLOW = 0x20\n\tAT_EACCESS          = 0x10\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n\ntype CtlInfo struct {\n\tId   uint32\n\tName [96]byte\n}\n\nconst SizeofKinfoProc = 0x288\n\ntype Eproc struct {\n\tPaddr   uintptr\n\tSess    uintptr\n\tPcred   Pcred\n\tUcred   Ucred\n\tVm      Vmspace\n\tPpid    int32\n\tPgid    int32\n\tJobc    int16\n\tTdev    int32\n\tTpgid   int32\n\tTsess   uintptr\n\tWmesg   [8]byte\n\tXsize   int32\n\tXrssize int16\n\tXccount int16\n\tXswrss  int16\n\tFlag    int32\n\tLogin   [12]byte\n\tSpare   [4]int32\n\t_       [4]byte\n}\n\ntype ExternProc struct {\n\tP_starttime Timeval\n\tP_vmspace   *Vmspace\n\tP_sigacts   uintptr\n\tP_flag      int32\n\tP_stat      int8\n\tP_pid       int32\n\tP_oppid     int32\n\tP_dupfd     int32\n\tUser_stack  *int8\n\tExit_thread *byte\n\tP_debugger  int32\n\tSigwait     int32\n\tP_estcpu    uint32\n\tP_cpticks   int32\n\tP_pctcpu    uint32\n\tP_wchan     *byte\n\tP_wmesg     *int8\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\tP_tracep    uintptr\n\tP_siglist   int32\n\tP_textvp    uintptr\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]byte\n\tP_pgrp      uintptr\n\tP_addr      uintptr\n\tP_xstat     uint16\n\tP_acflag    uint16\n\tP_ru        *Rusage\n}\n\ntype Itimerval struct {\n\tInterval Timeval\n\tValue    Timeval\n}\n\ntype KinfoProc struct {\n\tProc  ExternProc\n\tEproc Eproc\n}\n\ntype Vmspace struct {\n\tDummy  int32\n\tDummy2 *int8\n\tDummy3 [5]int32\n\tDummy4 [3]*int8\n}\n\ntype Pcred struct {\n\tPc_lock  [72]int8\n\tPc_ucred uintptr\n\tP_ruid   uint32\n\tP_svuid  uint32\n\tP_rgid   uint32\n\tP_svgid  uint32\n\tP_refcnt int32\n\t_        [4]byte\n}\n\ntype Ucred struct {\n\tRef     int32\n\tUid     uint32\n\tNgroups int16\n\tGroups  [16]uint32\n}\n\ntype SysvIpcPerm struct {\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint16\n\t_    uint16\n\t_    int32\n}\ntype SysvShmDesc struct {\n\tPerm   SysvIpcPerm\n\tSegsz  uint64\n\tLpid   int32\n\tCpid   int32\n\tNattch uint16\n\t_      [34]byte\n}\n\nconst (\n\tIPC_CREAT   = 0x200\n\tIPC_EXCL    = 0x400\n\tIPC_NOWAIT  = 0x800\n\tIPC_PRIVATE = 0x0\n)\n\nconst (\n\tIPC_RMID = 0x0\n\tIPC_SET  = 0x1\n\tIPC_STAT = 0x2\n)\n\nconst (\n\tSHM_RDONLY = 0x1000\n\tSHM_RND    = 0x2000\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go",
    "content": "// cgo -godefs types_darwin.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && darwin\n\npackage unix\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\t_    [4]byte\n}\n\ntype Timeval32 struct {\n\tSec  int32\n\tUsec int32\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 _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     int32\n\tMode    uint16\n\tNlink   uint16\n\tIno     uint64\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\tLspare  int32\n\tQspare  [2]int64\n}\n\ntype Statfs_t struct {\n\tBsize       uint32\n\tIosize      int32\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      uint64\n\tFiles       uint64\n\tFfree       uint64\n\tFsid        Fsid\n\tOwner       uint32\n\tType        uint32\n\tFlags       uint32\n\tFssubtype   uint32\n\tFstypename  [16]byte\n\tMntonname   [1024]byte\n\tMntfromname [1024]byte\n\tFlags_ext   uint32\n\tReserved    [7]uint32\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Fstore_t struct {\n\tFlags      uint32\n\tPosmode    int32\n\tOffset     int64\n\tLength     int64\n\tBytesalloc int64\n}\n\ntype Radvisory_t struct {\n\tOffset int64\n\tCount  int32\n\t_      [4]byte\n}\n\ntype Fbootstraptransfer_t struct {\n\tOffset int64\n\tLength uint64\n\tBuffer *byte\n}\n\ntype Log2phys_t struct {\n\tFlags uint32\n\t_     [16]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Dirent struct {\n\tIno     uint64\n\tSeekoff uint64\n\tReclen  uint16\n\tNamlen  uint16\n\tType    uint8\n\tName    [1024]int8\n\t_       [3]byte\n}\n\ntype Attrlist struct {\n\tBitmapcount uint16\n\tReserved    uint16\n\tCommonattr  uint32\n\tVolattr     uint32\n\tDirattr     uint32\n\tFileattr    uint32\n\tForkattr    uint32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype RawSockaddrCtl struct {\n\tSc_len      uint8\n\tSc_family   uint8\n\tSs_sysaddr  uint16\n\tSc_id       uint32\n\tSc_unit     uint32\n\tSc_reserved [5]uint32\n}\n\ntype RawSockaddrVM struct {\n\tLen       uint8\n\tFamily    uint8\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n}\n\ntype XVSockPCB struct {\n\tXv_len           uint32\n\tXv_vsockpp       uint64\n\tXvp_local_cid    uint32\n\tXvp_local_port   uint32\n\tXvp_remote_cid   uint32\n\tXvp_remote_port  uint32\n\tXvp_rxcnt        uint32\n\tXvp_txcnt        uint32\n\tXvp_peer_rxhiwat uint32\n\tXvp_peer_rxcnt   uint32\n\tXvp_last_pid     int32\n\tXvp_gencnt       uint64\n\tXv_socket        XSocket\n\t_                [4]byte\n}\n\ntype XSocket struct {\n\tXso_len      uint32\n\tXso_so       uint32\n\tSo_type      int16\n\tSo_options   int16\n\tSo_linger    int16\n\tSo_state     int16\n\tSo_pcb       uint32\n\tXso_protocol int32\n\tXso_family   int32\n\tSo_qlen      int16\n\tSo_incqlen   int16\n\tSo_qlimit    int16\n\tSo_timeo     int16\n\tSo_error     uint16\n\tSo_pgid      int32\n\tSo_oobmark   uint32\n\tSo_rcv       XSockbuf\n\tSo_snd       XSockbuf\n\tSo_uid       uint32\n}\n\ntype XSocket64 struct {\n\tXso_len      uint32\n\t_            [8]byte\n\tSo_type      int16\n\tSo_options   int16\n\tSo_linger    int16\n\tSo_state     int16\n\t_            [8]byte\n\tXso_protocol int32\n\tXso_family   int32\n\tSo_qlen      int16\n\tSo_incqlen   int16\n\tSo_qlimit    int16\n\tSo_timeo     int16\n\tSo_error     uint16\n\tSo_pgid      int32\n\tSo_oobmark   uint32\n\tSo_rcv       XSockbuf\n\tSo_snd       XSockbuf\n\tSo_uid       uint32\n}\n\ntype XSockbuf struct {\n\tCc    uint32\n\tHiwat uint32\n\tMbcnt uint32\n\tMbmax uint32\n\tLowat int32\n\tFlags int16\n\tTimeo int16\n}\n\ntype XVSockPgen struct {\n\tLen   uint32\n\tCount uint64\n\tGen   uint64\n\tSogen uint64\n}\n\ntype _Socklen uint32\n\ntype SaeAssocID uint32\n\ntype SaeConnID uint32\n\ntype SaEndpoints struct {\n\tSrcif      uint32\n\tSrcaddr    *RawSockaddr\n\tSrcaddrlen uint32\n\tDstaddr    *RawSockaddr\n\tDstaddrlen uint32\n\t_          [4]byte\n}\n\ntype Xucred struct {\n\tVersion uint32\n\tUid     uint32\n\tNgroups int16\n\tGroups  [16]uint32\n}\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  uint32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\ntype TCPConnectionInfo struct {\n\tState               uint8\n\tSnd_wscale          uint8\n\tRcv_wscale          uint8\n\t_                   uint8\n\tOptions             uint32\n\tFlags               uint32\n\tRto                 uint32\n\tMaxseg              uint32\n\tSnd_ssthresh        uint32\n\tSnd_cwnd            uint32\n\tSnd_wnd             uint32\n\tSnd_sbbytes         uint32\n\tRcv_wnd             uint32\n\tRttcur              uint32\n\tSrtt                uint32\n\tRttvar              uint32\n\tTxpackets           uint64\n\tTxbytes             uint64\n\tTxretransmitbytes   uint64\n\tRxpackets           uint64\n\tRxbytes             uint64\n\tRxoutoforderbytes   uint64\n\tTxretransmitpackets uint64\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x6c\n\tSizeofSockaddrUnix      = 0x6a\n\tSizeofSockaddrDatalink  = 0x14\n\tSizeofSockaddrCtl       = 0x20\n\tSizeofSockaddrVM        = 0xc\n\tSizeofXvsockpcb         = 0xa8\n\tSizeofXSocket           = 0x64\n\tSizeofXSockbuf          = 0x18\n\tSizeofXVSockPgen        = 0x20\n\tSizeofXucred            = 0x4c\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x10\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofMsghdr            = 0x30\n\tSizeofCmsghdr           = 0xc\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofTCPConnectionInfo = 0x70\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]int32\n}\n\nconst (\n\tSizeofIfMsghdr    = 0x70\n\tSizeofIfMsghdr2   = 0xa0\n\tSizeofIfData      = 0x60\n\tSizeofIfData64    = 0x80\n\tSizeofIfaMsghdr   = 0x14\n\tSizeofIfmaMsghdr  = 0x10\n\tSizeofIfmaMsghdr2 = 0x14\n\tSizeofRtMsghdr    = 0x5c\n\tSizeofRtMsghdr2   = 0x5c\n\tSizeofRtMetrics   = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tData    IfData\n}\n\ntype IfMsghdr2 struct {\n\tMsglen     uint16\n\tVersion    uint8\n\tType       uint8\n\tAddrs      int32\n\tFlags      int32\n\tIndex      uint16\n\tSnd_len    int32\n\tSnd_maxlen int32\n\tSnd_drops  int32\n\tTimer      int32\n\tData       IfData64\n}\n\ntype IfData struct {\n\tType       uint8\n\tTypelen    uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tRecvquota  uint8\n\tXmitquota  uint8\n\tUnused1    uint8\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint32\n\tIpackets   uint32\n\tIerrors    uint32\n\tOpackets   uint32\n\tOerrors    uint32\n\tCollisions uint32\n\tIbytes     uint32\n\tObytes     uint32\n\tImcasts    uint32\n\tOmcasts    uint32\n\tIqdrops    uint32\n\tNoproto    uint32\n\tRecvtiming uint32\n\tXmittiming uint32\n\tLastchange Timeval32\n\tUnused2    uint32\n\tHwassist   uint32\n\tReserved1  uint32\n\tReserved2  uint32\n}\n\ntype IfData64 struct {\n\tType       uint8\n\tTypelen    uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tRecvquota  uint8\n\tXmitquota  uint8\n\tUnused1    uint8\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tNoproto    uint64\n\tRecvtiming uint32\n\tXmittiming uint32\n\tLastchange Timeval32\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n}\n\ntype IfmaMsghdr2 struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tAddrs    int32\n\tFlags    int32\n\tIndex    uint16\n\tRefcount int32\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tUse     int32\n\tInits   uint32\n\tRmx     RtMetrics\n}\n\ntype RtMsghdr2 struct {\n\tMsglen      uint16\n\tVersion     uint8\n\tType        uint8\n\tIndex       uint16\n\tFlags       int32\n\tAddrs       int32\n\tRefcnt      int32\n\tParentflags int32\n\tReserved    int32\n\tUse         int32\n\tInits       uint32\n\tRmx         RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint32\n\tMtu      uint32\n\tHopcount uint32\n\tExpire   int32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPksent   uint32\n\tState    uint32\n\tFiller   [3]uint32\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval32\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [2]byte\n}\n\ntype Termios struct {\n\tIflag  uint64\n\tOflag  uint64\n\tCflag  uint64\n\tLflag  uint64\n\tCc     [20]uint8\n\tIspeed uint64\n\tOspeed uint64\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x2\n\tAT_REMOVEDIR        = 0x80\n\tAT_SYMLINK_FOLLOW   = 0x40\n\tAT_SYMLINK_NOFOLLOW = 0x20\n\tAT_EACCESS          = 0x10\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n\ntype CtlInfo struct {\n\tId   uint32\n\tName [96]byte\n}\n\nconst SizeofKinfoProc = 0x288\n\ntype Eproc struct {\n\tPaddr   uintptr\n\tSess    uintptr\n\tPcred   Pcred\n\tUcred   Ucred\n\tVm      Vmspace\n\tPpid    int32\n\tPgid    int32\n\tJobc    int16\n\tTdev    int32\n\tTpgid   int32\n\tTsess   uintptr\n\tWmesg   [8]byte\n\tXsize   int32\n\tXrssize int16\n\tXccount int16\n\tXswrss  int16\n\tFlag    int32\n\tLogin   [12]byte\n\tSpare   [4]int32\n\t_       [4]byte\n}\n\ntype ExternProc struct {\n\tP_starttime Timeval\n\tP_vmspace   *Vmspace\n\tP_sigacts   uintptr\n\tP_flag      int32\n\tP_stat      int8\n\tP_pid       int32\n\tP_oppid     int32\n\tP_dupfd     int32\n\tUser_stack  *int8\n\tExit_thread *byte\n\tP_debugger  int32\n\tSigwait     int32\n\tP_estcpu    uint32\n\tP_cpticks   int32\n\tP_pctcpu    uint32\n\tP_wchan     *byte\n\tP_wmesg     *int8\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\tP_tracep    uintptr\n\tP_siglist   int32\n\tP_textvp    uintptr\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]byte\n\tP_pgrp      uintptr\n\tP_addr      uintptr\n\tP_xstat     uint16\n\tP_acflag    uint16\n\tP_ru        *Rusage\n}\n\ntype Itimerval struct {\n\tInterval Timeval\n\tValue    Timeval\n}\n\ntype KinfoProc struct {\n\tProc  ExternProc\n\tEproc Eproc\n}\n\ntype Vmspace struct {\n\tDummy  int32\n\tDummy2 *int8\n\tDummy3 [5]int32\n\tDummy4 [3]*int8\n}\n\ntype Pcred struct {\n\tPc_lock  [72]int8\n\tPc_ucred uintptr\n\tP_ruid   uint32\n\tP_svuid  uint32\n\tP_rgid   uint32\n\tP_svgid  uint32\n\tP_refcnt int32\n\t_        [4]byte\n}\n\ntype Ucred struct {\n\tRef     int32\n\tUid     uint32\n\tNgroups int16\n\tGroups  [16]uint32\n}\n\ntype SysvIpcPerm struct {\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint16\n\t_    uint16\n\t_    int32\n}\ntype SysvShmDesc struct {\n\tPerm   SysvIpcPerm\n\tSegsz  uint64\n\tLpid   int32\n\tCpid   int32\n\tNattch uint16\n\t_      [34]byte\n}\n\nconst (\n\tIPC_CREAT   = 0x200\n\tIPC_EXCL    = 0x400\n\tIPC_NOWAIT  = 0x800\n\tIPC_PRIVATE = 0x0\n)\n\nconst (\n\tIPC_RMID = 0x0\n\tIPC_SET  = 0x1\n\tIPC_STAT = 0x2\n)\n\nconst (\n\tSHM_RDONLY = 0x1000\n\tSHM_RND    = 0x2000\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go",
    "content": "// cgo -godefs types_dragonfly.go | go run mkpost.go\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\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 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 _Gid_t uint32\n\ntype Stat_t struct {\n\tIno     uint64\n\tNlink   uint32\n\tDev     uint32\n\tMode    uint16\n\t_1      uint16\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\t_       uint32\n\tFlags   uint32\n\tGen     uint32\n\tLspare  int32\n\tBlksize int64\n\tQspare2 int64\n}\n\ntype Statfs_t struct {\n\tSpare2      int64\n\tBsize       int64\n\tIosize      int64\n\tBlocks      int64\n\tBfree       int64\n\tBavail      int64\n\tFiles       int64\n\tFfree       int64\n\tFsid        Fsid\n\tOwner       uint32\n\tType        int32\n\tFlags       int32\n\tSyncwrites  int64\n\tAsyncwrites int64\n\tFstypename  [16]byte\n\tMntonname   [80]byte\n\tSyncreads   int64\n\tAsyncreads  int64\n\tSpares1     int16\n\tMntfromname [80]byte\n\tSpares2     int16\n\tSpare       [2]int64\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno  uint64\n\tNamlen  uint16\n\tType    uint8\n\tUnused1 uint8\n\tUnused2 uint32\n\tName    [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x36\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x10\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [16]uint64\n}\n\nconst (\n\tSizeofIfMsghdr         = 0xb0\n\tSizeofIfData           = 0xa0\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfmaMsghdr       = 0x10\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x98\n\tSizeofRtMetrics        = 0x70\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tFlags   int32\n\tAddrs   int32\n\tData    IfData\n}\n\ntype IfData struct {\n\tType       uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tRecvquota  uint8\n\tXmitquota  uint8\n\tMtu        uint64\n\tMetric     uint64\n\tLink_state uint64\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tNoproto    uint64\n\tHwassist   uint64\n\tOqdrops    uint64\n\tLastchange Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tIndex     uint16\n\tFlags     int32\n\tAddrs     int32\n\tAddrflags int32\n\tMetric    int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tFlags   int32\n\tAddrs   int32\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tUse     int32\n\tInits   uint64\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks     uint64\n\tMtu       uint64\n\tPksent    uint64\n\tExpire    uint64\n\tSendpipe  uint64\n\tSsthresh  uint64\n\tRtt       uint64\n\tRttvar    uint64\n\tRecvpipe  uint64\n\tHopcount  uint64\n\tMssopt    uint16\n\tPad       uint16\n\tMsl       uint64\n\tIwmaxsegs uint64\n\tIwcapsegs uint64\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [6]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = 0xfffafdcd\n\tAT_SYMLINK_NOFOLLOW = 0x1\n\tAT_REMOVEDIR        = 0x2\n\tAT_EACCESS          = 0x4\n\tAT_SYMLINK_FOLLOW   = 0x8\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Utsname struct {\n\tSysname  [32]byte\n\tNodename [32]byte\n\tRelease  [32]byte\n\tVersion  [32]byte\n\tMachine  [32]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go",
    "content": "// cgo -godefs types_freebsd.go | go run mkpost.go\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\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\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 Time_t int32\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 _Gid_t uint32\n\nconst (\n\t_statfsVersion = 0x20140518\n\t_dirblksiz     = 0x400\n)\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint16\n\t_0      int16\n\tUid     uint32\n\tGid     uint32\n\t_1      int32\n\tRdev    uint64\n\t_       int32\n\tAtim    Timespec\n\t_       int32\n\tMtim    Timespec\n\t_       int32\n\tCtim    Timespec\n\t_       int32\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint64\n\tSpare   [10]uint64\n}\n\ntype Statfs_t struct {\n\tVersion     uint32\n\tType        uint32\n\tFlags       uint64\n\tBsize       uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      int64\n\tFiles       uint64\n\tFfree       int64\n\tSyncwrites  uint64\n\tAsyncwrites uint64\n\tSyncreads   uint64\n\tAsyncreads  uint64\n\tSpare       [10]uint64\n\tNamemax     uint32\n\tOwner       uint32\n\tFsid        Fsid\n\tCharspare   [80]int8\n\tFstypename  [16]byte\n\tMntfromname [1024]byte\n\tMntonname   [1024]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n\tSysid  int32\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tPad0   uint8\n\tNamlen uint16\n\tPad1   uint16\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Xucred struct {\n\tVersion uint32\n\tUid     uint32\n\tNgroups int16\n\tGroups  [16]uint32\n\t_       *byte\n}\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x36\n\tSizeofXucred           = 0x50\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPMreqn          = 0xc\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype PtraceLwpInfoStruct struct {\n\tLwpid        int32\n\tEvent        int32\n\tFlags        int32\n\tSigmask      Sigset_t\n\tSiglist      Sigset_t\n\tSiginfo      __PtraceSiginfo\n\tTdname       [20]int8\n\tChild_pid    int32\n\tSyscall_code uint32\n\tSyscall_narg uint32\n}\n\ntype __Siginfo struct {\n\tSigno  int32\n\tErrno  int32\n\tCode   int32\n\tPid    int32\n\tUid    uint32\n\tStatus int32\n\tAddr   *byte\n\tValue  [4]byte\n\t_      [32]byte\n}\ntype __PtraceSiginfo struct {\n\tSigno  int32\n\tErrno  int32\n\tCode   int32\n\tPid    int32\n\tUid    uint32\n\tStatus int32\n\tAddr   uintptr\n\tValue  [4]byte\n\t_      [32]byte\n}\n\ntype Sigset_t struct {\n\tVal [4]uint32\n}\n\ntype Reg struct {\n\tFs     uint32\n\tEs     uint32\n\tDs     uint32\n\tEdi    uint32\n\tEsi    uint32\n\tEbp    uint32\n\tIsp    uint32\n\tEbx    uint32\n\tEdx    uint32\n\tEcx    uint32\n\tEax    uint32\n\tTrapno uint32\n\tErr    uint32\n\tEip    uint32\n\tCs     uint32\n\tEflags uint32\n\tEsp    uint32\n\tSs     uint32\n\tGs     uint32\n}\n\ntype FpReg struct {\n\tEnv   [7]uint32\n\tAcc   [8][10]uint8\n\tEx_sw uint32\n\tPad   [64]uint8\n}\n\ntype FpExtendedPrecision struct{}\n\ntype PtraceIoDesc struct {\n\tOp   int32\n\tOffs uintptr\n\tAddr *byte\n\tLen  uint32\n}\n\ntype Kevent_t struct {\n\tIdent  uint32\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n\tExt    [4]uint64\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tsizeofIfMsghdr         = 0xa8\n\tSizeofIfMsghdr         = 0x60\n\tsizeofIfData           = 0x98\n\tSizeofIfData           = 0x50\n\tSizeofIfaMsghdr        = 0x14\n\tSizeofIfmaMsghdr       = 0x10\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x5c\n\tSizeofRtMetrics        = 0x38\n)\n\ntype ifMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n\tData    ifData\n}\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tData    IfData\n}\n\ntype ifData struct {\n\tType       uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tLink_state uint8\n\tVhid       uint8\n\tDatalen    uint16\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tOqdrops    uint64\n\tNoproto    uint64\n\tHwassist   uint64\n\t_          [8]byte\n\t_          [16]byte\n}\n\ntype IfData struct {\n\tType        uint8\n\tPhysical    uint8\n\tAddrlen     uint8\n\tHdrlen      uint8\n\tLink_state  uint8\n\tSpare_char1 uint8\n\tSpare_char2 uint8\n\tDatalen     uint8\n\tMtu         uint32\n\tMetric      uint32\n\tBaudrate    uint32\n\tIpackets    uint32\n\tIerrors     uint32\n\tOpackets    uint32\n\tOerrors     uint32\n\tCollisions  uint32\n\tIbytes      uint32\n\tObytes      uint32\n\tImcasts     uint32\n\tOmcasts     uint32\n\tIqdrops     uint32\n\tNoproto     uint32\n\tHwassist    uint32\n\tEpoch       int32\n\tLastchange  Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       uint16\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tFmask   int32\n\tInits   uint32\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint32\n\tMtu      uint32\n\tHopcount uint32\n\tExpire   uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPksent   uint32\n\tWeight   uint32\n\tFiller   [3]uint32\n}\n\nconst (\n\tSizeofBpfVersion    = 0x4\n\tSizeofBpfStat       = 0x8\n\tSizeofBpfZbuf       = 0xc\n\tSizeofBpfProgram    = 0x8\n\tSizeofBpfInsn       = 0x8\n\tSizeofBpfHdr        = 0x14\n\tSizeofBpfZbufHeader = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfZbuf struct {\n\tBufa   *byte\n\tBufb   *byte\n\tBuflen uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [2]byte\n}\n\ntype BpfZbufHeader struct {\n\tKernel_gen uint32\n\tKernel_len uint32\n\tUser_gen   uint32\n\t_          [5]uint32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x100\n\tAT_SYMLINK_NOFOLLOW = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_REMOVEDIR        = 0x800\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR      = 0x8\n\tPOLLHUP      = 0x10\n\tPOLLIN       = 0x1\n\tPOLLINIGNEOF = 0x2000\n\tPOLLNVAL     = 0x20\n\tPOLLOUT      = 0x4\n\tPOLLPRI      = 0x2\n\tPOLLRDBAND   = 0x80\n\tPOLLRDNORM   = 0x40\n\tPOLLWRBAND   = 0x100\n\tPOLLWRNORM   = 0x4\n\tPOLLRDHUP    = 0x4000\n)\n\ntype CapRights struct {\n\tRights [2]uint64\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz     int32\n\tTick   int32\n\tSpare  int32\n\tStathz int32\n\tProfhz int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go",
    "content": "// cgo -godefs types_freebsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && freebsd\n\npackage unix\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 int64\n}\n\ntype Time_t int64\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 _Gid_t uint32\n\nconst (\n\t_statfsVersion = 0x20140518\n\t_dirblksiz     = 0x400\n)\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint16\n\t_0      int16\n\tUid     uint32\n\tGid     uint32\n\t_1      int32\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint64\n\tSpare   [10]uint64\n}\n\ntype Statfs_t struct {\n\tVersion     uint32\n\tType        uint32\n\tFlags       uint64\n\tBsize       uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      int64\n\tFiles       uint64\n\tFfree       int64\n\tSyncwrites  uint64\n\tAsyncwrites uint64\n\tSyncreads   uint64\n\tAsyncreads  uint64\n\tSpare       [10]uint64\n\tNamemax     uint32\n\tOwner       uint32\n\tFsid        Fsid\n\tCharspare   [80]int8\n\tFstypename  [16]byte\n\tMntfromname [1024]byte\n\tMntonname   [1024]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n\tSysid  int32\n\t_      [4]byte\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tPad0   uint8\n\tNamlen uint16\n\tPad1   uint16\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Xucred struct {\n\tVersion uint32\n\tUid     uint32\n\tNgroups int16\n\tGroups  [16]uint32\n\t_       *byte\n}\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x36\n\tSizeofXucred           = 0x58\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x10\n\tSizeofIPMreq           = 0x8\n\tSizeofIPMreqn          = 0xc\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype PtraceLwpInfoStruct struct {\n\tLwpid        int32\n\tEvent        int32\n\tFlags        int32\n\tSigmask      Sigset_t\n\tSiglist      Sigset_t\n\tSiginfo      __PtraceSiginfo\n\tTdname       [20]int8\n\tChild_pid    int32\n\tSyscall_code uint32\n\tSyscall_narg uint32\n}\n\ntype __Siginfo struct {\n\tSigno  int32\n\tErrno  int32\n\tCode   int32\n\tPid    int32\n\tUid    uint32\n\tStatus int32\n\tAddr   *byte\n\tValue  [8]byte\n\t_      [40]byte\n}\n\ntype __PtraceSiginfo struct {\n\tSigno  int32\n\tErrno  int32\n\tCode   int32\n\tPid    int32\n\tUid    uint32\n\tStatus int32\n\tAddr   uintptr\n\tValue  [8]byte\n\t_      [40]byte\n}\n\ntype Sigset_t struct {\n\tVal [4]uint32\n}\n\ntype Reg struct {\n\tR15    int64\n\tR14    int64\n\tR13    int64\n\tR12    int64\n\tR11    int64\n\tR10    int64\n\tR9     int64\n\tR8     int64\n\tRdi    int64\n\tRsi    int64\n\tRbp    int64\n\tRbx    int64\n\tRdx    int64\n\tRcx    int64\n\tRax    int64\n\tTrapno uint32\n\tFs     uint16\n\tGs     uint16\n\tErr    uint32\n\tEs     uint16\n\tDs     uint16\n\tRip    int64\n\tCs     int64\n\tRflags int64\n\tRsp    int64\n\tSs     int64\n}\n\ntype FpReg struct {\n\tEnv   [4]uint64\n\tAcc   [8][16]uint8\n\tXacc  [16][16]uint8\n\tSpare [12]uint64\n}\n\ntype FpExtendedPrecision struct{}\n\ntype PtraceIoDesc struct {\n\tOp   int32\n\tOffs uintptr\n\tAddr *byte\n\tLen  uint64\n}\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n\tExt    [4]uint64\n}\n\ntype FdSet struct {\n\tBits [16]uint64\n}\n\nconst (\n\tsizeofIfMsghdr         = 0xa8\n\tSizeofIfMsghdr         = 0xa8\n\tsizeofIfData           = 0x98\n\tSizeofIfData           = 0x98\n\tSizeofIfaMsghdr        = 0x14\n\tSizeofIfmaMsghdr       = 0x10\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x98\n\tSizeofRtMetrics        = 0x70\n)\n\ntype ifMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n\tData    ifData\n}\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tData    IfData\n}\n\ntype ifData struct {\n\tType       uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tLink_state uint8\n\tVhid       uint8\n\tDatalen    uint16\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tOqdrops    uint64\n\tNoproto    uint64\n\tHwassist   uint64\n\t_          [8]byte\n\t_          [16]byte\n}\n\ntype IfData struct {\n\tType        uint8\n\tPhysical    uint8\n\tAddrlen     uint8\n\tHdrlen      uint8\n\tLink_state  uint8\n\tSpare_char1 uint8\n\tSpare_char2 uint8\n\tDatalen     uint8\n\tMtu         uint64\n\tMetric      uint64\n\tBaudrate    uint64\n\tIpackets    uint64\n\tIerrors     uint64\n\tOpackets    uint64\n\tOerrors     uint64\n\tCollisions  uint64\n\tIbytes      uint64\n\tObytes      uint64\n\tImcasts     uint64\n\tOmcasts     uint64\n\tIqdrops     uint64\n\tNoproto     uint64\n\tHwassist    uint64\n\tEpoch       int64\n\tLastchange  Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       uint16\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tFmask   int32\n\tInits   uint64\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint64\n\tMtu      uint64\n\tHopcount uint64\n\tExpire   uint64\n\tRecvpipe uint64\n\tSendpipe uint64\n\tSsthresh uint64\n\tRtt      uint64\n\tRttvar   uint64\n\tPksent   uint64\n\tWeight   uint64\n\tFiller   [3]uint64\n}\n\nconst (\n\tSizeofBpfVersion    = 0x4\n\tSizeofBpfStat       = 0x8\n\tSizeofBpfZbuf       = 0x18\n\tSizeofBpfProgram    = 0x10\n\tSizeofBpfInsn       = 0x8\n\tSizeofBpfHdr        = 0x20\n\tSizeofBpfZbufHeader = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfZbuf struct {\n\tBufa   *byte\n\tBufb   *byte\n\tBuflen uint64\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [6]byte\n}\n\ntype BpfZbufHeader struct {\n\tKernel_gen uint32\n\tKernel_len uint32\n\tUser_gen   uint32\n\t_          [5]uint32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x100\n\tAT_SYMLINK_NOFOLLOW = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_REMOVEDIR        = 0x800\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR      = 0x8\n\tPOLLHUP      = 0x10\n\tPOLLIN       = 0x1\n\tPOLLINIGNEOF = 0x2000\n\tPOLLNVAL     = 0x20\n\tPOLLOUT      = 0x4\n\tPOLLPRI      = 0x2\n\tPOLLRDBAND   = 0x80\n\tPOLLRDNORM   = 0x40\n\tPOLLWRBAND   = 0x100\n\tPOLLWRNORM   = 0x4\n\tPOLLRDHUP    = 0x4000\n)\n\ntype CapRights struct {\n\tRights [2]uint64\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz     int32\n\tTick   int32\n\tSpare  int32\n\tStathz int32\n\tProfhz int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go",
    "content": "// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && freebsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\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\t_    [4]byte\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int32\n\t_    [4]byte\n}\n\ntype Time_t int64\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 _Gid_t uint32\n\nconst (\n\t_statfsVersion = 0x20140518\n\t_dirblksiz     = 0x400\n)\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint16\n\t_0      int16\n\tUid     uint32\n\tGid     uint32\n\t_1      int32\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint64\n\tSpare   [10]uint64\n}\n\ntype Statfs_t struct {\n\tVersion     uint32\n\tType        uint32\n\tFlags       uint64\n\tBsize       uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      int64\n\tFiles       uint64\n\tFfree       int64\n\tSyncwrites  uint64\n\tAsyncwrites uint64\n\tSyncreads   uint64\n\tAsyncreads  uint64\n\tSpare       [10]uint64\n\tNamemax     uint32\n\tOwner       uint32\n\tFsid        Fsid\n\tCharspare   [80]int8\n\tFstypename  [16]byte\n\tMntfromname [1024]byte\n\tMntonname   [1024]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n\tSysid  int32\n\t_      [4]byte\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tPad0   uint8\n\tNamlen uint16\n\tPad1   uint16\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Xucred struct {\n\tVersion uint32\n\tUid     uint32\n\tNgroups int16\n\tGroups  [16]uint32\n\t_       *byte\n}\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x36\n\tSizeofXucred           = 0x50\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPMreqn          = 0xc\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype PtraceLwpInfoStruct struct {\n\tLwpid        int32\n\tEvent        int32\n\tFlags        int32\n\tSigmask      Sigset_t\n\tSiglist      Sigset_t\n\tSiginfo      __PtraceSiginfo\n\tTdname       [20]int8\n\tChild_pid    int32\n\tSyscall_code uint32\n\tSyscall_narg uint32\n}\n\ntype __Siginfo struct {\n\tSigno  int32\n\tErrno  int32\n\tCode   int32\n\tPid    int32\n\tUid    uint32\n\tStatus int32\n\tAddr   *byte\n\tValue  [4]byte\n\t_      [32]byte\n}\n\ntype __PtraceSiginfo struct {\n\tSigno  int32\n\tErrno  int32\n\tCode   int32\n\tPid    int32\n\tUid    uint32\n\tStatus int32\n\tAddr   uintptr\n\tValue  [4]byte\n\t_      [32]byte\n}\n\ntype Sigset_t struct {\n\tVal [4]uint32\n}\n\ntype Reg struct {\n\tR    [13]uint32\n\tSp   uint32\n\tLr   uint32\n\tPc   uint32\n\tCpsr uint32\n}\n\ntype FpReg struct {\n\tFpsr uint32\n\tFpr  [8]FpExtendedPrecision\n}\n\ntype FpExtendedPrecision struct {\n\tExponent    uint32\n\tMantissa_hi uint32\n\tMantissa_lo uint32\n}\n\ntype PtraceIoDesc struct {\n\tOp   int32\n\tOffs uintptr\n\tAddr *byte\n\tLen  uint32\n}\n\ntype Kevent_t struct {\n\tIdent  uint32\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\t_      [4]byte\n\tData   int64\n\tUdata  *byte\n\t_      [4]byte\n\tExt    [4]uint64\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tsizeofIfMsghdr         = 0xa8\n\tSizeofIfMsghdr         = 0x70\n\tsizeofIfData           = 0x98\n\tSizeofIfData           = 0x60\n\tSizeofIfaMsghdr        = 0x14\n\tSizeofIfmaMsghdr       = 0x10\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x5c\n\tSizeofRtMetrics        = 0x38\n)\n\ntype ifMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n\tData    ifData\n}\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tData    IfData\n}\n\ntype ifData struct {\n\tType       uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tLink_state uint8\n\tVhid       uint8\n\tDatalen    uint16\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tOqdrops    uint64\n\tNoproto    uint64\n\tHwassist   uint64\n\t_          [8]byte\n\t_          [16]byte\n}\n\ntype IfData struct {\n\tType        uint8\n\tPhysical    uint8\n\tAddrlen     uint8\n\tHdrlen      uint8\n\tLink_state  uint8\n\tSpare_char1 uint8\n\tSpare_char2 uint8\n\tDatalen     uint8\n\tMtu         uint32\n\tMetric      uint32\n\tBaudrate    uint32\n\tIpackets    uint32\n\tIerrors     uint32\n\tOpackets    uint32\n\tOerrors     uint32\n\tCollisions  uint32\n\tIbytes      uint32\n\tObytes      uint32\n\tImcasts     uint32\n\tOmcasts     uint32\n\tIqdrops     uint32\n\tNoproto     uint32\n\tHwassist    uint32\n\t_           [4]byte\n\tEpoch       int64\n\tLastchange  Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       uint16\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tFmask   int32\n\tInits   uint32\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint32\n\tMtu      uint32\n\tHopcount uint32\n\tExpire   uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPksent   uint32\n\tWeight   uint32\n\tFiller   [3]uint32\n}\n\nconst (\n\tSizeofBpfVersion    = 0x4\n\tSizeofBpfStat       = 0x8\n\tSizeofBpfZbuf       = 0xc\n\tSizeofBpfProgram    = 0x8\n\tSizeofBpfInsn       = 0x8\n\tSizeofBpfHdr        = 0x20\n\tSizeofBpfZbufHeader = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfZbuf struct {\n\tBufa   *byte\n\tBufb   *byte\n\tBuflen uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [6]byte\n}\n\ntype BpfZbufHeader struct {\n\tKernel_gen uint32\n\tKernel_len uint32\n\tUser_gen   uint32\n\t_          [5]uint32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x100\n\tAT_SYMLINK_NOFOLLOW = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_REMOVEDIR        = 0x800\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR      = 0x8\n\tPOLLHUP      = 0x10\n\tPOLLIN       = 0x1\n\tPOLLINIGNEOF = 0x2000\n\tPOLLNVAL     = 0x20\n\tPOLLOUT      = 0x4\n\tPOLLPRI      = 0x2\n\tPOLLRDBAND   = 0x80\n\tPOLLRDNORM   = 0x40\n\tPOLLWRBAND   = 0x100\n\tPOLLWRNORM   = 0x4\n\tPOLLRDHUP    = 0x4000\n)\n\ntype CapRights struct {\n\tRights [2]uint64\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz     int32\n\tTick   int32\n\tSpare  int32\n\tStathz int32\n\tProfhz int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go",
    "content": "// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && freebsd\n\npackage unix\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 int64\n}\n\ntype Time_t int64\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 _Gid_t uint32\n\nconst (\n\t_statfsVersion = 0x20140518\n\t_dirblksiz     = 0x400\n)\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint16\n\t_0      int16\n\tUid     uint32\n\tGid     uint32\n\t_1      int32\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint64\n\tSpare   [10]uint64\n}\n\ntype Statfs_t struct {\n\tVersion     uint32\n\tType        uint32\n\tFlags       uint64\n\tBsize       uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      int64\n\tFiles       uint64\n\tFfree       int64\n\tSyncwrites  uint64\n\tAsyncwrites uint64\n\tSyncreads   uint64\n\tAsyncreads  uint64\n\tSpare       [10]uint64\n\tNamemax     uint32\n\tOwner       uint32\n\tFsid        Fsid\n\tCharspare   [80]int8\n\tFstypename  [16]byte\n\tMntfromname [1024]byte\n\tMntonname   [1024]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n\tSysid  int32\n\t_      [4]byte\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tPad0   uint8\n\tNamlen uint16\n\tPad1   uint16\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Xucred struct {\n\tVersion uint32\n\tUid     uint32\n\tNgroups int16\n\tGroups  [16]uint32\n\t_       *byte\n}\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x36\n\tSizeofXucred           = 0x58\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x10\n\tSizeofIPMreq           = 0x8\n\tSizeofIPMreqn          = 0xc\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype PtraceLwpInfoStruct struct {\n\tLwpid        int32\n\tEvent        int32\n\tFlags        int32\n\tSigmask      Sigset_t\n\tSiglist      Sigset_t\n\tSiginfo      __PtraceSiginfo\n\tTdname       [20]int8\n\tChild_pid    int32\n\tSyscall_code uint32\n\tSyscall_narg uint32\n}\n\ntype __Siginfo struct {\n\tSigno  int32\n\tErrno  int32\n\tCode   int32\n\tPid    int32\n\tUid    uint32\n\tStatus int32\n\tAddr   *byte\n\tValue  [8]byte\n\t_      [40]byte\n}\n\ntype __PtraceSiginfo struct {\n\tSigno  int32\n\tErrno  int32\n\tCode   int32\n\tPid    int32\n\tUid    uint32\n\tStatus int32\n\tAddr   uintptr\n\tValue  [8]byte\n\t_      [40]byte\n}\n\ntype Sigset_t struct {\n\tVal [4]uint32\n}\n\ntype Reg struct {\n\tX    [30]uint64\n\tLr   uint64\n\tSp   uint64\n\tElr  uint64\n\tSpsr uint32\n\t_    [4]byte\n}\n\ntype FpReg struct {\n\tQ  [32][16]uint8\n\tSr uint32\n\tCr uint32\n\t_  [8]byte\n}\n\ntype FpExtendedPrecision struct{}\n\ntype PtraceIoDesc struct {\n\tOp   int32\n\tOffs uintptr\n\tAddr *byte\n\tLen  uint64\n}\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n\tExt    [4]uint64\n}\n\ntype FdSet struct {\n\tBits [16]uint64\n}\n\nconst (\n\tsizeofIfMsghdr         = 0xa8\n\tSizeofIfMsghdr         = 0xa8\n\tsizeofIfData           = 0x98\n\tSizeofIfData           = 0x98\n\tSizeofIfaMsghdr        = 0x14\n\tSizeofIfmaMsghdr       = 0x10\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x98\n\tSizeofRtMetrics        = 0x70\n)\n\ntype ifMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n\tData    ifData\n}\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tData    IfData\n}\n\ntype ifData struct {\n\tType       uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tLink_state uint8\n\tVhid       uint8\n\tDatalen    uint16\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tOqdrops    uint64\n\tNoproto    uint64\n\tHwassist   uint64\n\t_          [8]byte\n\t_          [16]byte\n}\n\ntype IfData struct {\n\tType        uint8\n\tPhysical    uint8\n\tAddrlen     uint8\n\tHdrlen      uint8\n\tLink_state  uint8\n\tSpare_char1 uint8\n\tSpare_char2 uint8\n\tDatalen     uint8\n\tMtu         uint64\n\tMetric      uint64\n\tBaudrate    uint64\n\tIpackets    uint64\n\tIerrors     uint64\n\tOpackets    uint64\n\tOerrors     uint64\n\tCollisions  uint64\n\tIbytes      uint64\n\tObytes      uint64\n\tImcasts     uint64\n\tOmcasts     uint64\n\tIqdrops     uint64\n\tNoproto     uint64\n\tHwassist    uint64\n\tEpoch       int64\n\tLastchange  Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       uint16\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tFmask   int32\n\tInits   uint64\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint64\n\tMtu      uint64\n\tHopcount uint64\n\tExpire   uint64\n\tRecvpipe uint64\n\tSendpipe uint64\n\tSsthresh uint64\n\tRtt      uint64\n\tRttvar   uint64\n\tPksent   uint64\n\tWeight   uint64\n\tFiller   [3]uint64\n}\n\nconst (\n\tSizeofBpfVersion    = 0x4\n\tSizeofBpfStat       = 0x8\n\tSizeofBpfZbuf       = 0x18\n\tSizeofBpfProgram    = 0x10\n\tSizeofBpfInsn       = 0x8\n\tSizeofBpfHdr        = 0x20\n\tSizeofBpfZbufHeader = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfZbuf struct {\n\tBufa   *byte\n\tBufb   *byte\n\tBuflen uint64\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [6]byte\n}\n\ntype BpfZbufHeader struct {\n\tKernel_gen uint32\n\tKernel_len uint32\n\tUser_gen   uint32\n\t_          [5]uint32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x100\n\tAT_SYMLINK_NOFOLLOW = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_REMOVEDIR        = 0x800\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR      = 0x8\n\tPOLLHUP      = 0x10\n\tPOLLIN       = 0x1\n\tPOLLINIGNEOF = 0x2000\n\tPOLLNVAL     = 0x20\n\tPOLLOUT      = 0x4\n\tPOLLPRI      = 0x2\n\tPOLLRDBAND   = 0x80\n\tPOLLRDNORM   = 0x40\n\tPOLLWRBAND   = 0x100\n\tPOLLWRNORM   = 0x4\n\tPOLLRDHUP    = 0x4000\n)\n\ntype CapRights struct {\n\tRights [2]uint64\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz     int32\n\tTick   int32\n\tSpare  int32\n\tStathz int32\n\tProfhz int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go",
    "content": "// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go\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\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 int64\n}\n\ntype Time_t int64\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 _Gid_t uint32\n\nconst (\n\t_statfsVersion = 0x20140518\n\t_dirblksiz     = 0x400\n)\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint16\n\t_0      int16\n\tUid     uint32\n\tGid     uint32\n\t_1      int32\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint64\n\tSpare   [10]uint64\n}\n\ntype Statfs_t struct {\n\tVersion     uint32\n\tType        uint32\n\tFlags       uint64\n\tBsize       uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      int64\n\tFiles       uint64\n\tFfree       int64\n\tSyncwrites  uint64\n\tAsyncwrites uint64\n\tSyncreads   uint64\n\tAsyncreads  uint64\n\tSpare       [10]uint64\n\tNamemax     uint32\n\tOwner       uint32\n\tFsid        Fsid\n\tCharspare   [80]int8\n\tFstypename  [16]byte\n\tMntfromname [1024]byte\n\tMntonname   [1024]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n\tSysid  int32\n\t_      [4]byte\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tPad0   uint8\n\tNamlen uint16\n\tPad1   uint16\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Xucred struct {\n\tVersion uint32\n\tUid     uint32\n\tNgroups int16\n\tGroups  [16]uint32\n\t_       *byte\n}\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x36\n\tSizeofXucred           = 0x58\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x10\n\tSizeofIPMreq           = 0x8\n\tSizeofIPMreqn          = 0xc\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype PtraceLwpInfoStruct struct {\n\tLwpid        int32\n\tEvent        int32\n\tFlags        int32\n\tSigmask      Sigset_t\n\tSiglist      Sigset_t\n\tSiginfo      __PtraceSiginfo\n\tTdname       [20]int8\n\tChild_pid    int32\n\tSyscall_code uint32\n\tSyscall_narg uint32\n}\n\ntype __Siginfo struct {\n\tSigno  int32\n\tErrno  int32\n\tCode   int32\n\tPid    int32\n\tUid    uint32\n\tStatus int32\n\tAddr   *byte\n\tValue  [8]byte\n\t_      [40]byte\n}\n\ntype __PtraceSiginfo struct {\n\tSigno  int32\n\tErrno  int32\n\tCode   int32\n\tPid    int32\n\tUid    uint32\n\tStatus int32\n\tAddr   uintptr\n\tValue  [8]byte\n\t_      [40]byte\n}\n\ntype Sigset_t struct {\n\tVal [4]uint32\n}\n\ntype Reg struct {\n\tRa      uint64\n\tSp      uint64\n\tGp      uint64\n\tTp      uint64\n\tT       [7]uint64\n\tS       [12]uint64\n\tA       [8]uint64\n\tSepc    uint64\n\tSstatus uint64\n}\n\ntype FpReg struct {\n\tX    [32][2]uint64\n\tFcsr uint64\n}\n\ntype FpExtendedPrecision struct{}\n\ntype PtraceIoDesc struct {\n\tOp   int32\n\tOffs uintptr\n\tAddr *byte\n\tLen  uint64\n}\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n\tExt    [4]uint64\n}\n\ntype FdSet struct {\n\tBits [16]uint64\n}\n\nconst (\n\tsizeofIfMsghdr         = 0xa8\n\tSizeofIfMsghdr         = 0xa8\n\tsizeofIfData           = 0x98\n\tSizeofIfData           = 0x98\n\tSizeofIfaMsghdr        = 0x14\n\tSizeofIfmaMsghdr       = 0x10\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x98\n\tSizeofRtMetrics        = 0x70\n)\n\ntype ifMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n\tData    ifData\n}\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tData    IfData\n}\n\ntype ifData struct {\n\tType       uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tLink_state uint8\n\tVhid       uint8\n\tDatalen    uint16\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tOqdrops    uint64\n\tNoproto    uint64\n\tHwassist   uint64\n\t_          [8]byte\n\t_          [16]byte\n}\n\ntype IfData struct {\n\tType        uint8\n\tPhysical    uint8\n\tAddrlen     uint8\n\tHdrlen      uint8\n\tLink_state  uint8\n\tSpare_char1 uint8\n\tSpare_char2 uint8\n\tDatalen     uint8\n\tMtu         uint64\n\tMetric      uint64\n\tBaudrate    uint64\n\tIpackets    uint64\n\tIerrors     uint64\n\tOpackets    uint64\n\tOerrors     uint64\n\tCollisions  uint64\n\tIbytes      uint64\n\tObytes      uint64\n\tImcasts     uint64\n\tOmcasts     uint64\n\tIqdrops     uint64\n\tNoproto     uint64\n\tHwassist    uint64\n\tEpoch       int64\n\tLastchange  Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       uint16\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       uint16\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tFmask   int32\n\tInits   uint64\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint64\n\tMtu      uint64\n\tHopcount uint64\n\tExpire   uint64\n\tRecvpipe uint64\n\tSendpipe uint64\n\tSsthresh uint64\n\tRtt      uint64\n\tRttvar   uint64\n\tPksent   uint64\n\tWeight   uint64\n\tNhidx    uint64\n\tFiller   [2]uint64\n}\n\nconst (\n\tSizeofBpfVersion    = 0x4\n\tSizeofBpfStat       = 0x8\n\tSizeofBpfZbuf       = 0x18\n\tSizeofBpfProgram    = 0x10\n\tSizeofBpfInsn       = 0x8\n\tSizeofBpfHdr        = 0x20\n\tSizeofBpfZbufHeader = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfZbuf struct {\n\tBufa   *byte\n\tBufb   *byte\n\tBuflen uint64\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [6]byte\n}\n\ntype BpfZbufHeader struct {\n\tKernel_gen uint32\n\tKernel_len uint32\n\tUser_gen   uint32\n\t_          [5]uint32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x100\n\tAT_SYMLINK_NOFOLLOW = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_REMOVEDIR        = 0x800\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR      = 0x8\n\tPOLLHUP      = 0x10\n\tPOLLIN       = 0x1\n\tPOLLINIGNEOF = 0x2000\n\tPOLLNVAL     = 0x20\n\tPOLLOUT      = 0x4\n\tPOLLPRI      = 0x2\n\tPOLLRDBAND   = 0x80\n\tPOLLRDNORM   = 0x40\n\tPOLLWRBAND   = 0x100\n\tPOLLWRNORM   = 0x4\n\tPOLLRDHUP    = 0x4000\n)\n\ntype CapRights struct {\n\tRights [2]uint64\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz     int32\n\tTick   int32\n\tSpare  int32\n\tStathz int32\n\tProfhz int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux.go",
    "content": "// Code generated by mkmerge; DO NOT EDIT.\n\n//go:build linux\n\npackage unix\n\nconst (\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\ntype (\n\t_C_short int16\n\t_C_int   int32\n\n\t_C_long_long int64\n)\n\ntype ItimerSpec struct {\n\tInterval Timespec\n\tValue    Timespec\n}\n\ntype Itimerval struct {\n\tInterval Timeval\n\tValue    Timeval\n}\n\nconst (\n\tADJ_OFFSET            = 0x1\n\tADJ_FREQUENCY         = 0x2\n\tADJ_MAXERROR          = 0x4\n\tADJ_ESTERROR          = 0x8\n\tADJ_STATUS            = 0x10\n\tADJ_TIMECONST         = 0x20\n\tADJ_TAI               = 0x80\n\tADJ_SETOFFSET         = 0x100\n\tADJ_MICRO             = 0x1000\n\tADJ_NANO              = 0x2000\n\tADJ_TICK              = 0x4000\n\tADJ_OFFSET_SINGLESHOT = 0x8001\n\tADJ_OFFSET_SS_READ    = 0xa001\n)\n\nconst (\n\tSTA_PLL       = 0x1\n\tSTA_PPSFREQ   = 0x2\n\tSTA_PPSTIME   = 0x4\n\tSTA_FLL       = 0x8\n\tSTA_INS       = 0x10\n\tSTA_DEL       = 0x20\n\tSTA_UNSYNC    = 0x40\n\tSTA_FREQHOLD  = 0x80\n\tSTA_PPSSIGNAL = 0x100\n\tSTA_PPSJITTER = 0x200\n\tSTA_PPSWANDER = 0x400\n\tSTA_PPSERROR  = 0x800\n\tSTA_CLOCKERR  = 0x1000\n\tSTA_NANO      = 0x2000\n\tSTA_MODE      = 0x4000\n\tSTA_CLK       = 0x8000\n)\n\nconst (\n\tTIME_OK    = 0x0\n\tTIME_INS   = 0x1\n\tTIME_DEL   = 0x2\n\tTIME_OOP   = 0x3\n\tTIME_WAIT  = 0x4\n\tTIME_ERROR = 0x5\n\tTIME_BAD   = 0x5\n)\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype StatxTimestamp struct {\n\tSec  int64\n\tNsec uint32\n\t_    int32\n}\n\ntype Statx_t struct {\n\tMask                      uint32\n\tBlksize                   uint32\n\tAttributes                uint64\n\tNlink                     uint32\n\tUid                       uint32\n\tGid                       uint32\n\tMode                      uint16\n\t_                         [1]uint16\n\tIno                       uint64\n\tSize                      uint64\n\tBlocks                    uint64\n\tAttributes_mask           uint64\n\tAtime                     StatxTimestamp\n\tBtime                     StatxTimestamp\n\tCtime                     StatxTimestamp\n\tMtime                     StatxTimestamp\n\tRdev_major                uint32\n\tRdev_minor                uint32\n\tDev_major                 uint32\n\tDev_minor                 uint32\n\tMnt_id                    uint64\n\tDio_mem_align             uint32\n\tDio_offset_align          uint32\n\tSubvol                    uint64\n\tAtomic_write_unit_min     uint32\n\tAtomic_write_unit_max     uint32\n\tAtomic_write_segments_max uint32\n\tDio_read_offset_align     uint32\n\tAtomic_write_unit_max_opt uint32\n\t_                         [1]uint32\n\t_                         [8]uint64\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype FileCloneRange struct {\n\tSrc_fd      int64\n\tSrc_offset  uint64\n\tSrc_length  uint64\n\tDest_offset uint64\n}\n\ntype RawFileDedupeRange struct {\n\tSrc_offset uint64\n\tSrc_length uint64\n\tDest_count uint16\n\tReserved1  uint16\n\tReserved2  uint32\n}\n\ntype RawFileDedupeRangeInfo struct {\n\tDest_fd       int64\n\tDest_offset   uint64\n\tBytes_deduped uint64\n\tStatus        int32\n\tReserved      uint32\n}\n\nconst (\n\tSizeofRawFileDedupeRange     = 0x18\n\tSizeofRawFileDedupeRangeInfo = 0x20\n\tFILE_DEDUPE_RANGE_SAME       = 0x0\n\tFILE_DEDUPE_RANGE_DIFFERS    = 0x1\n)\n\ntype FscryptPolicy struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptKey struct {\n\tMode uint32\n\tRaw  [64]uint8\n\tSize uint32\n}\n\ntype FscryptPolicyV1 struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptPolicyV2 struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tLog2_data_unit_size       uint8\n\t_                         [3]uint8\n\tMaster_key_identifier     [16]uint8\n}\n\ntype FscryptGetPolicyExArg struct {\n\tSize   uint64\n\tPolicy [24]byte\n}\n\ntype FscryptKeySpecifier struct {\n\tType uint32\n\t_    uint32\n\tU    [32]byte\n}\n\ntype FscryptAddKeyArg struct {\n\tKey_spec FscryptKeySpecifier\n\tRaw_size uint32\n\tKey_id   uint32\n\tFlags    uint32\n\t_        [7]uint32\n}\n\ntype FscryptRemoveKeyArg struct {\n\tKey_spec             FscryptKeySpecifier\n\tRemoval_status_flags uint32\n\t_                    [5]uint32\n}\n\ntype FscryptGetKeyStatusArg struct {\n\tKey_spec     FscryptKeySpecifier\n\t_            [6]uint32\n\tStatus       uint32\n\tStatus_flags uint32\n\tUser_count   uint32\n\t_            [13]uint32\n}\n\ntype DmIoctl struct {\n\tVersion      [3]uint32\n\tData_size    uint32\n\tData_start   uint32\n\tTarget_count uint32\n\tOpen_count   int32\n\tFlags        uint32\n\tEvent_nr     uint32\n\t_            uint32\n\tDev          uint64\n\tName         [128]byte\n\tUuid         [129]byte\n\tData         [7]byte\n}\n\ntype DmTargetSpec struct {\n\tSector_start uint64\n\tLength       uint64\n\tStatus       int32\n\tNext         uint32\n\tTarget_type  [16]byte\n}\n\ntype DmTargetDeps struct {\n\tCount uint32\n\t_     uint32\n}\n\ntype DmTargetVersions struct {\n\tNext    uint32\n\tVersion [3]uint32\n}\n\ntype DmTargetMsg struct {\n\tSector uint64\n}\n\nconst (\n\tSizeofDmIoctl      = 0x138\n\tSizeofDmTargetSpec = 0x28\n)\n\ntype KeyctlDHParams struct {\n\tPrivate int32\n\tPrime   int32\n\tBase    int32\n}\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n)\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrLinklayer struct {\n\tFamily   uint16\n\tProtocol uint16\n\tIfindex  int32\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]uint8\n}\n\ntype RawSockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n}\n\ntype RawSockaddrHCI struct {\n\tFamily  uint16\n\tDev     uint16\n\tChannel uint16\n}\n\ntype RawSockaddrL2 struct {\n\tFamily      uint16\n\tPsm         uint16\n\tBdaddr      [6]uint8\n\tCid         uint16\n\tBdaddr_type uint8\n\t_           [1]byte\n}\n\ntype RawSockaddrRFCOMM struct {\n\tFamily  uint16\n\tBdaddr  [6]uint8\n\tChannel uint8\n\t_       [1]byte\n}\n\ntype RawSockaddrCAN struct {\n\tFamily  uint16\n\tIfindex int32\n\tAddr    [16]byte\n}\n\ntype RawSockaddrALG struct {\n\tFamily uint16\n\tType   [14]uint8\n\tFeat   uint32\n\tMask   uint32\n\tName   [64]uint8\n}\n\ntype RawSockaddrVM struct {\n\tFamily    uint16\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n\tFlags     uint8\n\tZero      [3]uint8\n}\n\ntype RawSockaddrXDP struct {\n\tFamily         uint16\n\tFlags          uint16\n\tIfindex        uint32\n\tQueue_id       uint32\n\tShared_umem_fd uint32\n}\n\ntype RawSockaddrPPPoX [0x1e]byte\n\ntype RawSockaddrTIPC struct {\n\tFamily   uint16\n\tAddrtype uint8\n\tScope    int8\n\tAddr     [12]byte\n}\n\ntype RawSockaddrL2TPIP struct {\n\tFamily  uint16\n\tUnused  uint16\n\tAddr    [4]byte /* in_addr */\n\tConn_id uint32\n\t_       [4]uint8\n}\n\ntype RawSockaddrL2TPIP6 struct {\n\tFamily   uint16\n\tUnused   uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n\tConn_id  uint32\n}\n\ntype RawSockaddrIUCV struct {\n\tFamily  uint16\n\tPort    uint16\n\tAddr    uint32\n\tNodeid  [8]int8\n\tUser_id [8]int8\n\tName    [8]int8\n}\n\ntype RawSockaddrNFC struct {\n\tSa_family    uint16\n\tDev_idx      uint32\n\tTarget_idx   uint32\n\tNfc_protocol uint32\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype PacketMreq struct {\n\tIfindex int32\n\tType    uint16\n\tAlen    uint16\n\tAddress [8]uint8\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  int32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype TCPInfo struct {\n\tState                uint8\n\tCa_state             uint8\n\tRetransmits          uint8\n\tProbes               uint8\n\tBackoff              uint8\n\tOptions              uint8\n\tRto                  uint32\n\tAto                  uint32\n\tSnd_mss              uint32\n\tRcv_mss              uint32\n\tUnacked              uint32\n\tSacked               uint32\n\tLost                 uint32\n\tRetrans              uint32\n\tFackets              uint32\n\tLast_data_sent       uint32\n\tLast_ack_sent        uint32\n\tLast_data_recv       uint32\n\tLast_ack_recv        uint32\n\tPmtu                 uint32\n\tRcv_ssthresh         uint32\n\tRtt                  uint32\n\tRttvar               uint32\n\tSnd_ssthresh         uint32\n\tSnd_cwnd             uint32\n\tAdvmss               uint32\n\tReordering           uint32\n\tRcv_rtt              uint32\n\tRcv_space            uint32\n\tTotal_retrans        uint32\n\tPacing_rate          uint64\n\tMax_pacing_rate      uint64\n\tBytes_acked          uint64\n\tBytes_received       uint64\n\tSegs_out             uint32\n\tSegs_in              uint32\n\tNotsent_bytes        uint32\n\tMin_rtt              uint32\n\tData_segs_in         uint32\n\tData_segs_out        uint32\n\tDelivery_rate        uint64\n\tBusy_time            uint64\n\tRwnd_limited         uint64\n\tSndbuf_limited       uint64\n\tDelivered            uint32\n\tDelivered_ce         uint32\n\tBytes_sent           uint64\n\tBytes_retrans        uint64\n\tDsack_dups           uint32\n\tReord_seen           uint32\n\tRcv_ooopack          uint32\n\tSnd_wnd              uint32\n\tRcv_wnd              uint32\n\tRehash               uint32\n\tTotal_rto            uint16\n\tTotal_rto_recoveries uint16\n\tTotal_rto_time       uint32\n}\n\ntype TCPVegasInfo struct {\n\tEnabled uint32\n\tRttcnt  uint32\n\tRtt     uint32\n\tMinrtt  uint32\n}\n\ntype TCPDCTCPInfo struct {\n\tEnabled  uint16\n\tCe_state uint16\n\tAlpha    uint32\n\tAb_ecn   uint32\n\tAb_tot   uint32\n}\n\ntype TCPBBRInfo struct {\n\tBw_lo       uint32\n\tBw_hi       uint32\n\tMin_rtt     uint32\n\tPacing_gain uint32\n\tCwnd_gain   uint32\n}\n\ntype CanFilter struct {\n\tId   uint32\n\tMask uint32\n}\n\ntype TCPRepairOpt struct {\n\tCode uint32\n\tVal  uint32\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrL2        = 0xe\n\tSizeofSockaddrRFCOMM    = 0xa\n\tSizeofSockaddrCAN       = 0x18\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofSockaddrXDP       = 0x10\n\tSizeofSockaddrPPPoX     = 0x1e\n\tSizeofSockaddrTIPC      = 0x10\n\tSizeofSockaddrL2TPIP    = 0x10\n\tSizeofSockaddrL2TPIP6   = 0x20\n\tSizeofSockaddrIUCV      = 0x20\n\tSizeofSockaddrNFC       = 0x10\n\tSizeofLinger            = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofPacketMreq        = 0x10\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofUcred             = 0xc\n\tSizeofTCPInfo           = 0xf8\n\tSizeofTCPCCInfo         = 0x14\n\tSizeofCanFilter         = 0x8\n\tSizeofTCPRepairOpt      = 0x8\n)\n\nconst (\n\tNDA_UNSPEC         = 0x0\n\tNDA_DST            = 0x1\n\tNDA_LLADDR         = 0x2\n\tNDA_CACHEINFO      = 0x3\n\tNDA_PROBES         = 0x4\n\tNDA_VLAN           = 0x5\n\tNDA_PORT           = 0x6\n\tNDA_VNI            = 0x7\n\tNDA_IFINDEX        = 0x8\n\tNDA_MASTER         = 0x9\n\tNDA_LINK_NETNSID   = 0xa\n\tNDA_SRC_VNI        = 0xb\n\tNTF_USE            = 0x1\n\tNTF_SELF           = 0x2\n\tNTF_MASTER         = 0x4\n\tNTF_PROXY          = 0x8\n\tNTF_EXT_LEARNED    = 0x10\n\tNTF_OFFLOADED      = 0x20\n\tNTF_ROUTER         = 0x80\n\tNUD_INCOMPLETE     = 0x1\n\tNUD_REACHABLE      = 0x2\n\tNUD_STALE          = 0x4\n\tNUD_DELAY          = 0x8\n\tNUD_PROBE          = 0x10\n\tNUD_FAILED         = 0x20\n\tNUD_NOARP          = 0x40\n\tNUD_PERMANENT      = 0x80\n\tNUD_NONE           = 0x0\n\tIFA_UNSPEC         = 0x0\n\tIFA_ADDRESS        = 0x1\n\tIFA_LOCAL          = 0x2\n\tIFA_LABEL          = 0x3\n\tIFA_BROADCAST      = 0x4\n\tIFA_ANYCAST        = 0x5\n\tIFA_CACHEINFO      = 0x6\n\tIFA_MULTICAST      = 0x7\n\tIFA_FLAGS          = 0x8\n\tIFA_RT_PRIORITY    = 0x9\n\tIFA_TARGET_NETNSID = 0xa\n\tIFAL_LABEL         = 0x2\n\tIFAL_ADDRESS       = 0x1\n\tRT_SCOPE_UNIVERSE  = 0x0\n\tRT_SCOPE_SITE      = 0xc8\n\tRT_SCOPE_LINK      = 0xfd\n\tRT_SCOPE_HOST      = 0xfe\n\tRT_SCOPE_NOWHERE   = 0xff\n\tRT_TABLE_UNSPEC    = 0x0\n\tRT_TABLE_COMPAT    = 0xfc\n\tRT_TABLE_DEFAULT   = 0xfd\n\tRT_TABLE_MAIN      = 0xfe\n\tRT_TABLE_LOCAL     = 0xff\n\tRT_TABLE_MAX       = 0xffffffff\n\tRTA_UNSPEC         = 0x0\n\tRTA_DST            = 0x1\n\tRTA_SRC            = 0x2\n\tRTA_IIF            = 0x3\n\tRTA_OIF            = 0x4\n\tRTA_GATEWAY        = 0x5\n\tRTA_PRIORITY       = 0x6\n\tRTA_PREFSRC        = 0x7\n\tRTA_METRICS        = 0x8\n\tRTA_MULTIPATH      = 0x9\n\tRTA_FLOW           = 0xb\n\tRTA_CACHEINFO      = 0xc\n\tRTA_TABLE          = 0xf\n\tRTA_MARK           = 0x10\n\tRTA_MFC_STATS      = 0x11\n\tRTA_VIA            = 0x12\n\tRTA_NEWDST         = 0x13\n\tRTA_PREF           = 0x14\n\tRTA_ENCAP_TYPE     = 0x15\n\tRTA_ENCAP          = 0x16\n\tRTA_EXPIRES        = 0x17\n\tRTA_PAD            = 0x18\n\tRTA_UID            = 0x19\n\tRTA_TTL_PROPAGATE  = 0x1a\n\tRTA_IP_PROTO       = 0x1b\n\tRTA_SPORT          = 0x1c\n\tRTA_DPORT          = 0x1d\n\tRTN_UNSPEC         = 0x0\n\tRTN_UNICAST        = 0x1\n\tRTN_LOCAL          = 0x2\n\tRTN_BROADCAST      = 0x3\n\tRTN_ANYCAST        = 0x4\n\tRTN_MULTICAST      = 0x5\n\tRTN_BLACKHOLE      = 0x6\n\tRTN_UNREACHABLE    = 0x7\n\tRTN_PROHIBIT       = 0x8\n\tRTN_THROW          = 0x9\n\tRTN_NAT            = 0xa\n\tRTN_XRESOLVE       = 0xb\n\tSizeofNlMsghdr     = 0x10\n\tSizeofNlMsgerr     = 0x14\n\tSizeofRtGenmsg     = 0x1\n\tSizeofNlAttr       = 0x4\n\tSizeofRtAttr       = 0x4\n\tSizeofIfInfomsg    = 0x10\n\tSizeofIfAddrmsg    = 0x8\n\tSizeofIfAddrlblmsg = 0xc\n\tSizeofIfaCacheinfo = 0x10\n\tSizeofRtMsg        = 0xc\n\tSizeofRtNexthop    = 0x8\n\tSizeofNdUseroptmsg = 0x10\n\tSizeofNdMsg        = 0xc\n)\n\ntype NlMsghdr struct {\n\tLen   uint32\n\tType  uint16\n\tFlags uint16\n\tSeq   uint32\n\tPid   uint32\n}\n\ntype NlMsgerr struct {\n\tError int32\n\tMsg   NlMsghdr\n}\n\ntype RtGenmsg struct {\n\tFamily uint8\n}\n\ntype NlAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype RtAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype IfInfomsg struct {\n\tFamily uint8\n\t_      uint8\n\tType   uint16\n\tIndex  int32\n\tFlags  uint32\n\tChange uint32\n}\n\ntype IfAddrmsg struct {\n\tFamily    uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tScope     uint8\n\tIndex     uint32\n}\n\ntype IfAddrlblmsg struct {\n\tFamily    uint8\n\t_         uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tIndex     uint32\n\tSeq       uint32\n}\n\ntype IfaCacheinfo struct {\n\tPrefered uint32\n\tValid    uint32\n\tCstamp   uint32\n\tTstamp   uint32\n}\n\ntype RtMsg struct {\n\tFamily   uint8\n\tDst_len  uint8\n\tSrc_len  uint8\n\tTos      uint8\n\tTable    uint8\n\tProtocol uint8\n\tScope    uint8\n\tType     uint8\n\tFlags    uint32\n}\n\ntype RtNexthop struct {\n\tLen     uint16\n\tFlags   uint8\n\tHops    uint8\n\tIfindex int32\n}\n\ntype NdUseroptmsg struct {\n\tFamily    uint8\n\tPad1      uint8\n\tOpts_len  uint16\n\tIfindex   int32\n\tIcmp_type uint8\n\tIcmp_code uint8\n\tPad2      uint16\n\tPad3      uint32\n}\n\ntype NdMsg struct {\n\tFamily  uint8\n\tPad1    uint8\n\tPad2    uint16\n\tIfindex int32\n\tState   uint16\n\tFlags   uint8\n\tType    uint8\n}\n\nconst (\n\tICMP_FILTER = 0x1\n\n\tICMPV6_FILTER             = 0x1\n\tICMPV6_FILTER_BLOCK       = 0x1\n\tICMPV6_FILTER_BLOCKOTHERS = 0x3\n\tICMPV6_FILTER_PASS        = 0x2\n\tICMPV6_FILTER_PASSONLY    = 0x4\n)\n\nconst (\n\tSizeofSockFilter = 0x8\n)\n\ntype SockFilter struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype SockFprog struct {\n\tLen    uint16\n\tFilter *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n}\n\nconst SizeofInotifyEvent = 0x10\n\nconst SI_LOAD_SHIFT = 0x10\n\ntype Utsname struct {\n\tSysname    [65]byte\n\tNodename   [65]byte\n\tRelease    [65]byte\n\tVersion    [65]byte\n\tMachine    [65]byte\n\tDomainname [65]byte\n}\n\nconst (\n\tAT_EMPTY_PATH   = 0x1000\n\tAT_FDCWD        = -0x64\n\tAT_NO_AUTOMOUNT = 0x800\n\tAT_REMOVEDIR    = 0x200\n\n\tAT_STATX_SYNC_AS_STAT = 0x0\n\tAT_STATX_FORCE_SYNC   = 0x2000\n\tAT_STATX_DONT_SYNC    = 0x4000\n\n\tAT_RECURSIVE = 0x8000\n\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\n\n\tAT_EACCESS = 0x200\n\n\tOPEN_TREE_CLONE = 0x1\n\n\tMOVE_MOUNT_F_SYMLINKS   = 0x1\n\tMOVE_MOUNT_F_AUTOMOUNTS = 0x2\n\tMOVE_MOUNT_F_EMPTY_PATH = 0x4\n\tMOVE_MOUNT_T_SYMLINKS   = 0x10\n\tMOVE_MOUNT_T_AUTOMOUNTS = 0x20\n\tMOVE_MOUNT_T_EMPTY_PATH = 0x40\n\tMOVE_MOUNT_SET_GROUP    = 0x100\n\n\tFSOPEN_CLOEXEC = 0x1\n\n\tFSPICK_CLOEXEC          = 0x1\n\tFSPICK_SYMLINK_NOFOLLOW = 0x2\n\tFSPICK_NO_AUTOMOUNT     = 0x4\n\tFSPICK_EMPTY_PATH       = 0x8\n\n\tFSMOUNT_CLOEXEC = 0x1\n\n\tFSCONFIG_SET_FLAG        = 0x0\n\tFSCONFIG_SET_STRING      = 0x1\n\tFSCONFIG_SET_BINARY      = 0x2\n\tFSCONFIG_SET_PATH        = 0x3\n\tFSCONFIG_SET_PATH_EMPTY  = 0x4\n\tFSCONFIG_SET_FD          = 0x5\n\tFSCONFIG_CMD_CREATE      = 0x6\n\tFSCONFIG_CMD_RECONFIGURE = 0x7\n)\n\ntype OpenHow struct {\n\tFlags   uint64\n\tMode    uint64\n\tResolve uint64\n}\n\nconst SizeofOpenHow = 0x18\n\nconst (\n\tRESOLVE_BENEATH       = 0x8\n\tRESOLVE_IN_ROOT       = 0x10\n\tRESOLVE_NO_MAGICLINKS = 0x2\n\tRESOLVE_NO_SYMLINKS   = 0x4\n\tRESOLVE_NO_XDEV       = 0x1\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLIN   = 0x1\n\tPOLLPRI  = 0x2\n\tPOLLOUT  = 0x4\n\tPOLLERR  = 0x8\n\tPOLLHUP  = 0x10\n\tPOLLNVAL = 0x20\n)\n\ntype sigset_argpack struct {\n\tss    *Sigset_t\n\tssLen uintptr\n}\n\ntype SignalfdSiginfo struct {\n\tSigno     uint32\n\tErrno     int32\n\tCode      int32\n\tPid       uint32\n\tUid       uint32\n\tFd        int32\n\tTid       uint32\n\tBand      uint32\n\tOverrun   uint32\n\tTrapno    uint32\n\tStatus    int32\n\tInt       int32\n\tPtr       uint64\n\tUtime     uint64\n\tStime     uint64\n\tAddr      uint64\n\tAddr_lsb  uint16\n\t_         uint16\n\tSyscall   int32\n\tCall_addr uint64\n\tArch      uint32\n\t_         [28]uint8\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tTASKSTATS_CMD_UNSPEC                  = 0x0\n\tTASKSTATS_CMD_GET                     = 0x1\n\tTASKSTATS_CMD_NEW                     = 0x2\n\tTASKSTATS_TYPE_UNSPEC                 = 0x0\n\tTASKSTATS_TYPE_PID                    = 0x1\n\tTASKSTATS_TYPE_TGID                   = 0x2\n\tTASKSTATS_TYPE_STATS                  = 0x3\n\tTASKSTATS_TYPE_AGGR_PID               = 0x4\n\tTASKSTATS_TYPE_AGGR_TGID              = 0x5\n\tTASKSTATS_TYPE_NULL                   = 0x6\n\tTASKSTATS_CMD_ATTR_UNSPEC             = 0x0\n\tTASKSTATS_CMD_ATTR_PID                = 0x1\n\tTASKSTATS_CMD_ATTR_TGID               = 0x2\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4\n)\n\ntype CGroupStats struct {\n\tSleeping        uint64\n\tRunning         uint64\n\tStopped         uint64\n\tUninterruptible uint64\n\tIo_wait         uint64\n}\n\nconst (\n\tCGROUPSTATS_CMD_UNSPEC        = 0x3\n\tCGROUPSTATS_CMD_GET           = 0x4\n\tCGROUPSTATS_CMD_NEW           = 0x5\n\tCGROUPSTATS_TYPE_UNSPEC       = 0x0\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 0x1\n\tCGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0\n\tCGROUPSTATS_CMD_ATTR_FD       = 0x1\n)\n\ntype Genlmsghdr struct {\n\tCmd      uint8\n\tVersion  uint8\n\tReserved uint16\n}\n\nconst (\n\tCTRL_CMD_UNSPEC            = 0x0\n\tCTRL_CMD_NEWFAMILY         = 0x1\n\tCTRL_CMD_DELFAMILY         = 0x2\n\tCTRL_CMD_GETFAMILY         = 0x3\n\tCTRL_CMD_NEWOPS            = 0x4\n\tCTRL_CMD_DELOPS            = 0x5\n\tCTRL_CMD_GETOPS            = 0x6\n\tCTRL_CMD_NEWMCAST_GRP      = 0x7\n\tCTRL_CMD_DELMCAST_GRP      = 0x8\n\tCTRL_CMD_GETMCAST_GRP      = 0x9\n\tCTRL_CMD_GETPOLICY         = 0xa\n\tCTRL_ATTR_UNSPEC           = 0x0\n\tCTRL_ATTR_FAMILY_ID        = 0x1\n\tCTRL_ATTR_FAMILY_NAME      = 0x2\n\tCTRL_ATTR_VERSION          = 0x3\n\tCTRL_ATTR_HDRSIZE          = 0x4\n\tCTRL_ATTR_MAXATTR          = 0x5\n\tCTRL_ATTR_OPS              = 0x6\n\tCTRL_ATTR_MCAST_GROUPS     = 0x7\n\tCTRL_ATTR_POLICY           = 0x8\n\tCTRL_ATTR_OP_POLICY        = 0x9\n\tCTRL_ATTR_OP               = 0xa\n\tCTRL_ATTR_OP_UNSPEC        = 0x0\n\tCTRL_ATTR_OP_ID            = 0x1\n\tCTRL_ATTR_OP_FLAGS         = 0x2\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0x0\n\tCTRL_ATTR_MCAST_GRP_NAME   = 0x1\n\tCTRL_ATTR_MCAST_GRP_ID     = 0x2\n\tCTRL_ATTR_POLICY_UNSPEC    = 0x0\n\tCTRL_ATTR_POLICY_DO        = 0x1\n\tCTRL_ATTR_POLICY_DUMP      = 0x2\n\tCTRL_ATTR_POLICY_DUMP_MAX  = 0x2\n)\n\nconst (\n\t_CPU_SETSIZE = 0x400\n)\n\nconst (\n\tBDADDR_BREDR     = 0x0\n\tBDADDR_LE_PUBLIC = 0x1\n\tBDADDR_LE_RANDOM = 0x2\n)\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n\t_                  uint16\n\tAux_sample_size    uint32\n\t_                  uint32\n\tSig_data           uint64\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\t_              uint32\n\tTime_cycles    uint64\n\tTime_mask      uint64\n\t_              [928]uint8\n\tData_head      uint64\n\tData_tail      uint64\n\tData_offset    uint64\n\tData_size      uint64\n\tAux_head       uint64\n\tAux_tail       uint64\n\tAux_offset     uint64\n\tAux_size       uint64\n}\n\nconst (\n\tPerfBitDisabled               uint64 = CBitFieldMaskBit0\n\tPerfBitInherit                       = CBitFieldMaskBit1\n\tPerfBitPinned                        = CBitFieldMaskBit2\n\tPerfBitExclusive                     = CBitFieldMaskBit3\n\tPerfBitExcludeUser                   = CBitFieldMaskBit4\n\tPerfBitExcludeKernel                 = CBitFieldMaskBit5\n\tPerfBitExcludeHv                     = CBitFieldMaskBit6\n\tPerfBitExcludeIdle                   = CBitFieldMaskBit7\n\tPerfBitMmap                          = CBitFieldMaskBit8\n\tPerfBitComm                          = CBitFieldMaskBit9\n\tPerfBitFreq                          = CBitFieldMaskBit10\n\tPerfBitInheritStat                   = CBitFieldMaskBit11\n\tPerfBitEnableOnExec                  = CBitFieldMaskBit12\n\tPerfBitTask                          = CBitFieldMaskBit13\n\tPerfBitWatermark                     = CBitFieldMaskBit14\n\tPerfBitPreciseIPBit1                 = CBitFieldMaskBit15\n\tPerfBitPreciseIPBit2                 = CBitFieldMaskBit16\n\tPerfBitMmapData                      = CBitFieldMaskBit17\n\tPerfBitSampleIDAll                   = CBitFieldMaskBit18\n\tPerfBitExcludeHost                   = CBitFieldMaskBit19\n\tPerfBitExcludeGuest                  = CBitFieldMaskBit20\n\tPerfBitExcludeCallchainKernel        = CBitFieldMaskBit21\n\tPerfBitExcludeCallchainUser          = CBitFieldMaskBit22\n\tPerfBitMmap2                         = CBitFieldMaskBit23\n\tPerfBitCommExec                      = CBitFieldMaskBit24\n\tPerfBitUseClockID                    = CBitFieldMaskBit25\n\tPerfBitContextSwitch                 = CBitFieldMaskBit26\n\tPerfBitWriteBackward                 = CBitFieldMaskBit27\n)\n\nconst (\n\tPERF_TYPE_HARDWARE                    = 0x0\n\tPERF_TYPE_SOFTWARE                    = 0x1\n\tPERF_TYPE_TRACEPOINT                  = 0x2\n\tPERF_TYPE_HW_CACHE                    = 0x3\n\tPERF_TYPE_RAW                         = 0x4\n\tPERF_TYPE_BREAKPOINT                  = 0x5\n\tPERF_TYPE_MAX                         = 0x6\n\tPERF_COUNT_HW_CPU_CYCLES              = 0x0\n\tPERF_COUNT_HW_INSTRUCTIONS            = 0x1\n\tPERF_COUNT_HW_CACHE_REFERENCES        = 0x2\n\tPERF_COUNT_HW_CACHE_MISSES            = 0x3\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4\n\tPERF_COUNT_HW_BRANCH_MISSES           = 0x5\n\tPERF_COUNT_HW_BUS_CYCLES              = 0x6\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8\n\tPERF_COUNT_HW_REF_CPU_CYCLES          = 0x9\n\tPERF_COUNT_HW_MAX                     = 0xa\n\tPERF_COUNT_HW_CACHE_L1D               = 0x0\n\tPERF_COUNT_HW_CACHE_L1I               = 0x1\n\tPERF_COUNT_HW_CACHE_LL                = 0x2\n\tPERF_COUNT_HW_CACHE_DTLB              = 0x3\n\tPERF_COUNT_HW_CACHE_ITLB              = 0x4\n\tPERF_COUNT_HW_CACHE_BPU               = 0x5\n\tPERF_COUNT_HW_CACHE_NODE              = 0x6\n\tPERF_COUNT_HW_CACHE_MAX               = 0x7\n\tPERF_COUNT_HW_CACHE_OP_READ           = 0x0\n\tPERF_COUNT_HW_CACHE_OP_WRITE          = 0x1\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH       = 0x2\n\tPERF_COUNT_HW_CACHE_OP_MAX            = 0x3\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS     = 0x0\n\tPERF_COUNT_HW_CACHE_RESULT_MISS       = 0x1\n\tPERF_COUNT_HW_CACHE_RESULT_MAX        = 0x2\n\tPERF_COUNT_SW_CPU_CLOCK               = 0x0\n\tPERF_COUNT_SW_TASK_CLOCK              = 0x1\n\tPERF_COUNT_SW_PAGE_FAULTS             = 0x2\n\tPERF_COUNT_SW_CONTEXT_SWITCHES        = 0x3\n\tPERF_COUNT_SW_CPU_MIGRATIONS          = 0x4\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN         = 0x5\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ         = 0x6\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS        = 0x7\n\tPERF_COUNT_SW_EMULATION_FAULTS        = 0x8\n\tPERF_COUNT_SW_DUMMY                   = 0x9\n\tPERF_COUNT_SW_BPF_OUTPUT              = 0xa\n\tPERF_COUNT_SW_MAX                     = 0xc\n\tPERF_SAMPLE_IP                        = 0x1\n\tPERF_SAMPLE_TID                       = 0x2\n\tPERF_SAMPLE_TIME                      = 0x4\n\tPERF_SAMPLE_ADDR                      = 0x8\n\tPERF_SAMPLE_READ                      = 0x10\n\tPERF_SAMPLE_CALLCHAIN                 = 0x20\n\tPERF_SAMPLE_ID                        = 0x40\n\tPERF_SAMPLE_CPU                       = 0x80\n\tPERF_SAMPLE_PERIOD                    = 0x100\n\tPERF_SAMPLE_STREAM_ID                 = 0x200\n\tPERF_SAMPLE_RAW                       = 0x400\n\tPERF_SAMPLE_BRANCH_STACK              = 0x800\n\tPERF_SAMPLE_REGS_USER                 = 0x1000\n\tPERF_SAMPLE_STACK_USER                = 0x2000\n\tPERF_SAMPLE_WEIGHT                    = 0x4000\n\tPERF_SAMPLE_DATA_SRC                  = 0x8000\n\tPERF_SAMPLE_IDENTIFIER                = 0x10000\n\tPERF_SAMPLE_TRANSACTION               = 0x20000\n\tPERF_SAMPLE_REGS_INTR                 = 0x40000\n\tPERF_SAMPLE_PHYS_ADDR                 = 0x80000\n\tPERF_SAMPLE_AUX                       = 0x100000\n\tPERF_SAMPLE_CGROUP                    = 0x200000\n\tPERF_SAMPLE_DATA_PAGE_SIZE            = 0x400000\n\tPERF_SAMPLE_CODE_PAGE_SIZE            = 0x800000\n\tPERF_SAMPLE_WEIGHT_STRUCT             = 0x1000000\n\tPERF_SAMPLE_MAX                       = 0x2000000\n\tPERF_SAMPLE_BRANCH_USER_SHIFT         = 0x0\n\tPERF_SAMPLE_BRANCH_KERNEL_SHIFT       = 0x1\n\tPERF_SAMPLE_BRANCH_HV_SHIFT           = 0x2\n\tPERF_SAMPLE_BRANCH_ANY_SHIFT          = 0x3\n\tPERF_SAMPLE_BRANCH_ANY_CALL_SHIFT     = 0x4\n\tPERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT   = 0x5\n\tPERF_SAMPLE_BRANCH_IND_CALL_SHIFT     = 0x6\n\tPERF_SAMPLE_BRANCH_ABORT_TX_SHIFT     = 0x7\n\tPERF_SAMPLE_BRANCH_IN_TX_SHIFT        = 0x8\n\tPERF_SAMPLE_BRANCH_NO_TX_SHIFT        = 0x9\n\tPERF_SAMPLE_BRANCH_COND_SHIFT         = 0xa\n\tPERF_SAMPLE_BRANCH_CALL_STACK_SHIFT   = 0xb\n\tPERF_SAMPLE_BRANCH_IND_JUMP_SHIFT     = 0xc\n\tPERF_SAMPLE_BRANCH_CALL_SHIFT         = 0xd\n\tPERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT     = 0xe\n\tPERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT    = 0xf\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT    = 0x10\n\tPERF_SAMPLE_BRANCH_HW_INDEX_SHIFT     = 0x11\n\tPERF_SAMPLE_BRANCH_PRIV_SAVE_SHIFT    = 0x12\n\tPERF_SAMPLE_BRANCH_COUNTERS           = 0x80000\n\tPERF_SAMPLE_BRANCH_MAX_SHIFT          = 0x14\n\tPERF_SAMPLE_BRANCH_USER               = 0x1\n\tPERF_SAMPLE_BRANCH_KERNEL             = 0x2\n\tPERF_SAMPLE_BRANCH_HV                 = 0x4\n\tPERF_SAMPLE_BRANCH_ANY                = 0x8\n\tPERF_SAMPLE_BRANCH_ANY_CALL           = 0x10\n\tPERF_SAMPLE_BRANCH_ANY_RETURN         = 0x20\n\tPERF_SAMPLE_BRANCH_IND_CALL           = 0x40\n\tPERF_SAMPLE_BRANCH_ABORT_TX           = 0x80\n\tPERF_SAMPLE_BRANCH_IN_TX              = 0x100\n\tPERF_SAMPLE_BRANCH_NO_TX              = 0x200\n\tPERF_SAMPLE_BRANCH_COND               = 0x400\n\tPERF_SAMPLE_BRANCH_CALL_STACK         = 0x800\n\tPERF_SAMPLE_BRANCH_IND_JUMP           = 0x1000\n\tPERF_SAMPLE_BRANCH_CALL               = 0x2000\n\tPERF_SAMPLE_BRANCH_NO_FLAGS           = 0x4000\n\tPERF_SAMPLE_BRANCH_NO_CYCLES          = 0x8000\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE          = 0x10000\n\tPERF_SAMPLE_BRANCH_HW_INDEX           = 0x20000\n\tPERF_SAMPLE_BRANCH_PRIV_SAVE          = 0x40000\n\tPERF_SAMPLE_BRANCH_MAX                = 0x100000\n\tPERF_BR_UNKNOWN                       = 0x0\n\tPERF_BR_COND                          = 0x1\n\tPERF_BR_UNCOND                        = 0x2\n\tPERF_BR_IND                           = 0x3\n\tPERF_BR_CALL                          = 0x4\n\tPERF_BR_IND_CALL                      = 0x5\n\tPERF_BR_RET                           = 0x6\n\tPERF_BR_SYSCALL                       = 0x7\n\tPERF_BR_SYSRET                        = 0x8\n\tPERF_BR_COND_CALL                     = 0x9\n\tPERF_BR_COND_RET                      = 0xa\n\tPERF_BR_ERET                          = 0xb\n\tPERF_BR_IRQ                           = 0xc\n\tPERF_BR_SERROR                        = 0xd\n\tPERF_BR_NO_TX                         = 0xe\n\tPERF_BR_EXTEND_ABI                    = 0xf\n\tPERF_BR_MAX                           = 0x10\n\tPERF_SAMPLE_REGS_ABI_NONE             = 0x0\n\tPERF_SAMPLE_REGS_ABI_32               = 0x1\n\tPERF_SAMPLE_REGS_ABI_64               = 0x2\n\tPERF_TXN_ELISION                      = 0x1\n\tPERF_TXN_TRANSACTION                  = 0x2\n\tPERF_TXN_SYNC                         = 0x4\n\tPERF_TXN_ASYNC                        = 0x8\n\tPERF_TXN_RETRY                        = 0x10\n\tPERF_TXN_CONFLICT                     = 0x20\n\tPERF_TXN_CAPACITY_WRITE               = 0x40\n\tPERF_TXN_CAPACITY_READ                = 0x80\n\tPERF_TXN_MAX                          = 0x100\n\tPERF_TXN_ABORT_MASK                   = -0x100000000\n\tPERF_TXN_ABORT_SHIFT                  = 0x20\n\tPERF_FORMAT_TOTAL_TIME_ENABLED        = 0x1\n\tPERF_FORMAT_TOTAL_TIME_RUNNING        = 0x2\n\tPERF_FORMAT_ID                        = 0x4\n\tPERF_FORMAT_GROUP                     = 0x8\n\tPERF_FORMAT_LOST                      = 0x10\n\tPERF_FORMAT_MAX                       = 0x20\n\tPERF_IOC_FLAG_GROUP                   = 0x1\n\tPERF_RECORD_MMAP                      = 0x1\n\tPERF_RECORD_LOST                      = 0x2\n\tPERF_RECORD_COMM                      = 0x3\n\tPERF_RECORD_EXIT                      = 0x4\n\tPERF_RECORD_THROTTLE                  = 0x5\n\tPERF_RECORD_UNTHROTTLE                = 0x6\n\tPERF_RECORD_FORK                      = 0x7\n\tPERF_RECORD_READ                      = 0x8\n\tPERF_RECORD_SAMPLE                    = 0x9\n\tPERF_RECORD_MMAP2                     = 0xa\n\tPERF_RECORD_AUX                       = 0xb\n\tPERF_RECORD_ITRACE_START              = 0xc\n\tPERF_RECORD_LOST_SAMPLES              = 0xd\n\tPERF_RECORD_SWITCH                    = 0xe\n\tPERF_RECORD_SWITCH_CPU_WIDE           = 0xf\n\tPERF_RECORD_NAMESPACES                = 0x10\n\tPERF_RECORD_KSYMBOL                   = 0x11\n\tPERF_RECORD_BPF_EVENT                 = 0x12\n\tPERF_RECORD_CGROUP                    = 0x13\n\tPERF_RECORD_TEXT_POKE                 = 0x14\n\tPERF_RECORD_AUX_OUTPUT_HW_ID          = 0x15\n\tPERF_RECORD_MAX                       = 0x16\n\tPERF_RECORD_KSYMBOL_TYPE_UNKNOWN      = 0x0\n\tPERF_RECORD_KSYMBOL_TYPE_BPF          = 0x1\n\tPERF_RECORD_KSYMBOL_TYPE_OOL          = 0x2\n\tPERF_RECORD_KSYMBOL_TYPE_MAX          = 0x3\n\tPERF_BPF_EVENT_UNKNOWN                = 0x0\n\tPERF_BPF_EVENT_PROG_LOAD              = 0x1\n\tPERF_BPF_EVENT_PROG_UNLOAD            = 0x2\n\tPERF_BPF_EVENT_MAX                    = 0x3\n\tPERF_CONTEXT_HV                       = -0x20\n\tPERF_CONTEXT_KERNEL                   = -0x80\n\tPERF_CONTEXT_USER                     = -0x200\n\tPERF_CONTEXT_GUEST                    = -0x800\n\tPERF_CONTEXT_GUEST_KERNEL             = -0x880\n\tPERF_CONTEXT_GUEST_USER               = -0xa00\n\tPERF_CONTEXT_MAX                      = -0xfff\n)\n\ntype TCPMD5Sig struct {\n\tAddr      SockaddrStorage\n\tFlags     uint8\n\tPrefixlen uint8\n\tKeylen    uint16\n\tIfindex   int32\n\tKey       [80]uint8\n}\n\ntype HDDriveCmdHdr struct {\n\tCommand uint8\n\tNumber  uint8\n\tFeature uint8\n\tCount   uint8\n}\n\ntype HDDriveID struct {\n\tConfig         uint16\n\tCyls           uint16\n\tReserved2      uint16\n\tHeads          uint16\n\tTrack_bytes    uint16\n\tSector_bytes   uint16\n\tSectors        uint16\n\tVendor0        uint16\n\tVendor1        uint16\n\tVendor2        uint16\n\tSerial_no      [20]uint8\n\tBuf_type       uint16\n\tBuf_size       uint16\n\tEcc_bytes      uint16\n\tFw_rev         [8]uint8\n\tModel          [40]uint8\n\tMax_multsect   uint8\n\tVendor3        uint8\n\tDword_io       uint16\n\tVendor4        uint8\n\tCapability     uint8\n\tReserved50     uint16\n\tVendor5        uint8\n\tTPIO           uint8\n\tVendor6        uint8\n\tTDMA           uint8\n\tField_valid    uint16\n\tCur_cyls       uint16\n\tCur_heads      uint16\n\tCur_sectors    uint16\n\tCur_capacity0  uint16\n\tCur_capacity1  uint16\n\tMultsect       uint8\n\tMultsect_valid uint8\n\tLba_capacity   uint32\n\tDma_1word      uint16\n\tDma_mword      uint16\n\tEide_pio_modes uint16\n\tEide_dma_min   uint16\n\tEide_dma_time  uint16\n\tEide_pio       uint16\n\tEide_pio_iordy uint16\n\tWords69_70     [2]uint16\n\tWords71_74     [4]uint16\n\tQueue_depth    uint16\n\tWords76_79     [4]uint16\n\tMajor_rev_num  uint16\n\tMinor_rev_num  uint16\n\tCommand_set_1  uint16\n\tCommand_set_2  uint16\n\tCfsse          uint16\n\tCfs_enable_1   uint16\n\tCfs_enable_2   uint16\n\tCsf_default    uint16\n\tDma_ultra      uint16\n\tTrseuc         uint16\n\tTrsEuc         uint16\n\tCurAPMvalues   uint16\n\tMprc           uint16\n\tHw_config      uint16\n\tAcoustic       uint16\n\tMsrqs          uint16\n\tSxfert         uint16\n\tSal            uint16\n\tSpg            uint32\n\tLba_capacity_2 uint64\n\tWords104_125   [22]uint16\n\tLast_lun       uint16\n\tWord127        uint16\n\tDlf            uint16\n\tCsfo           uint16\n\tWords130_155   [26]uint16\n\tWord156        uint16\n\tWords157_159   [3]uint16\n\tCfa_power      uint16\n\tWords161_175   [15]uint16\n\tWords176_205   [30]uint16\n\tWords206_254   [49]uint16\n\tIntegrity_word uint16\n}\n\nconst (\n\tST_MANDLOCK    = 0x40\n\tST_NOATIME     = 0x400\n\tST_NODEV       = 0x4\n\tST_NODIRATIME  = 0x800\n\tST_NOEXEC      = 0x8\n\tST_NOSUID      = 0x2\n\tST_RDONLY      = 0x1\n\tST_RELATIME    = 0x1000\n\tST_SYNCHRONOUS = 0x10\n)\n\ntype Tpacket2Hdr struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tSec       uint32\n\tNsec      uint32\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n\t_         [4]uint8\n}\n\ntype Tpacket3Hdr struct {\n\tNext_offset uint32\n\tSec         uint32\n\tNsec        uint32\n\tSnaplen     uint32\n\tLen         uint32\n\tStatus      uint32\n\tMac         uint16\n\tNet         uint16\n\tHv1         TpacketHdrVariant1\n\t_           [8]uint8\n}\n\ntype TpacketHdrVariant1 struct {\n\tRxhash    uint32\n\tVlan_tci  uint32\n\tVlan_tpid uint16\n\t_         uint16\n}\n\ntype TpacketBlockDesc struct {\n\tVersion uint32\n\tTo_priv uint32\n\tHdr     [40]byte\n}\n\ntype TpacketBDTS struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype TpacketHdrV1 struct {\n\tBlock_status        uint32\n\tNum_pkts            uint32\n\tOffset_to_first_pkt uint32\n\tBlk_len             uint32\n\tSeq_num             uint64\n\tTs_first_pkt        TpacketBDTS\n\tTs_last_pkt         TpacketBDTS\n}\n\ntype TpacketReq struct {\n\tBlock_size uint32\n\tBlock_nr   uint32\n\tFrame_size uint32\n\tFrame_nr   uint32\n}\n\ntype TpacketReq3 struct {\n\tBlock_size       uint32\n\tBlock_nr         uint32\n\tFrame_size       uint32\n\tFrame_nr         uint32\n\tRetire_blk_tov   uint32\n\tSizeof_priv      uint32\n\tFeature_req_word uint32\n}\n\ntype TpacketStats struct {\n\tPackets uint32\n\tDrops   uint32\n}\n\ntype TpacketStatsV3 struct {\n\tPackets      uint32\n\tDrops        uint32\n\tFreeze_q_cnt uint32\n}\n\ntype TpacketAuxdata struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n}\n\nconst (\n\tTPACKET_V1 = 0x0\n\tTPACKET_V2 = 0x1\n\tTPACKET_V3 = 0x2\n)\n\nconst (\n\tSizeofTpacket2Hdr = 0x20\n\tSizeofTpacket3Hdr = 0x30\n\n\tSizeofTpacketStats   = 0x8\n\tSizeofTpacketStatsV3 = 0xc\n)\n\nconst (\n\tIFLA_UNSPEC                                = 0x0\n\tIFLA_ADDRESS                               = 0x1\n\tIFLA_BROADCAST                             = 0x2\n\tIFLA_IFNAME                                = 0x3\n\tIFLA_MTU                                   = 0x4\n\tIFLA_LINK                                  = 0x5\n\tIFLA_QDISC                                 = 0x6\n\tIFLA_STATS                                 = 0x7\n\tIFLA_COST                                  = 0x8\n\tIFLA_PRIORITY                              = 0x9\n\tIFLA_MASTER                                = 0xa\n\tIFLA_WIRELESS                              = 0xb\n\tIFLA_PROTINFO                              = 0xc\n\tIFLA_TXQLEN                                = 0xd\n\tIFLA_MAP                                   = 0xe\n\tIFLA_WEIGHT                                = 0xf\n\tIFLA_OPERSTATE                             = 0x10\n\tIFLA_LINKMODE                              = 0x11\n\tIFLA_LINKINFO                              = 0x12\n\tIFLA_NET_NS_PID                            = 0x13\n\tIFLA_IFALIAS                               = 0x14\n\tIFLA_NUM_VF                                = 0x15\n\tIFLA_VFINFO_LIST                           = 0x16\n\tIFLA_STATS64                               = 0x17\n\tIFLA_VF_PORTS                              = 0x18\n\tIFLA_PORT_SELF                             = 0x19\n\tIFLA_AF_SPEC                               = 0x1a\n\tIFLA_GROUP                                 = 0x1b\n\tIFLA_NET_NS_FD                             = 0x1c\n\tIFLA_EXT_MASK                              = 0x1d\n\tIFLA_PROMISCUITY                           = 0x1e\n\tIFLA_NUM_TX_QUEUES                         = 0x1f\n\tIFLA_NUM_RX_QUEUES                         = 0x20\n\tIFLA_CARRIER                               = 0x21\n\tIFLA_PHYS_PORT_ID                          = 0x22\n\tIFLA_CARRIER_CHANGES                       = 0x23\n\tIFLA_PHYS_SWITCH_ID                        = 0x24\n\tIFLA_LINK_NETNSID                          = 0x25\n\tIFLA_PHYS_PORT_NAME                        = 0x26\n\tIFLA_PROTO_DOWN                            = 0x27\n\tIFLA_GSO_MAX_SEGS                          = 0x28\n\tIFLA_GSO_MAX_SIZE                          = 0x29\n\tIFLA_PAD                                   = 0x2a\n\tIFLA_XDP                                   = 0x2b\n\tIFLA_EVENT                                 = 0x2c\n\tIFLA_NEW_NETNSID                           = 0x2d\n\tIFLA_IF_NETNSID                            = 0x2e\n\tIFLA_TARGET_NETNSID                        = 0x2e\n\tIFLA_CARRIER_UP_COUNT                      = 0x2f\n\tIFLA_CARRIER_DOWN_COUNT                    = 0x30\n\tIFLA_NEW_IFINDEX                           = 0x31\n\tIFLA_MIN_MTU                               = 0x32\n\tIFLA_MAX_MTU                               = 0x33\n\tIFLA_PROP_LIST                             = 0x34\n\tIFLA_ALT_IFNAME                            = 0x35\n\tIFLA_PERM_ADDRESS                          = 0x36\n\tIFLA_PROTO_DOWN_REASON                     = 0x37\n\tIFLA_PARENT_DEV_NAME                       = 0x38\n\tIFLA_PARENT_DEV_BUS_NAME                   = 0x39\n\tIFLA_GRO_MAX_SIZE                          = 0x3a\n\tIFLA_TSO_MAX_SIZE                          = 0x3b\n\tIFLA_TSO_MAX_SEGS                          = 0x3c\n\tIFLA_ALLMULTI                              = 0x3d\n\tIFLA_DEVLINK_PORT                          = 0x3e\n\tIFLA_GSO_IPV4_MAX_SIZE                     = 0x3f\n\tIFLA_GRO_IPV4_MAX_SIZE                     = 0x40\n\tIFLA_DPLL_PIN                              = 0x41\n\tIFLA_PROTO_DOWN_REASON_UNSPEC              = 0x0\n\tIFLA_PROTO_DOWN_REASON_MASK                = 0x1\n\tIFLA_PROTO_DOWN_REASON_VALUE               = 0x2\n\tIFLA_PROTO_DOWN_REASON_MAX                 = 0x2\n\tIFLA_INET_UNSPEC                           = 0x0\n\tIFLA_INET_CONF                             = 0x1\n\tIFLA_INET6_UNSPEC                          = 0x0\n\tIFLA_INET6_FLAGS                           = 0x1\n\tIFLA_INET6_CONF                            = 0x2\n\tIFLA_INET6_STATS                           = 0x3\n\tIFLA_INET6_MCAST                           = 0x4\n\tIFLA_INET6_CACHEINFO                       = 0x5\n\tIFLA_INET6_ICMP6STATS                      = 0x6\n\tIFLA_INET6_TOKEN                           = 0x7\n\tIFLA_INET6_ADDR_GEN_MODE                   = 0x8\n\tIFLA_INET6_RA_MTU                          = 0x9\n\tIFLA_BR_UNSPEC                             = 0x0\n\tIFLA_BR_FORWARD_DELAY                      = 0x1\n\tIFLA_BR_HELLO_TIME                         = 0x2\n\tIFLA_BR_MAX_AGE                            = 0x3\n\tIFLA_BR_AGEING_TIME                        = 0x4\n\tIFLA_BR_STP_STATE                          = 0x5\n\tIFLA_BR_PRIORITY                           = 0x6\n\tIFLA_BR_VLAN_FILTERING                     = 0x7\n\tIFLA_BR_VLAN_PROTOCOL                      = 0x8\n\tIFLA_BR_GROUP_FWD_MASK                     = 0x9\n\tIFLA_BR_ROOT_ID                            = 0xa\n\tIFLA_BR_BRIDGE_ID                          = 0xb\n\tIFLA_BR_ROOT_PORT                          = 0xc\n\tIFLA_BR_ROOT_PATH_COST                     = 0xd\n\tIFLA_BR_TOPOLOGY_CHANGE                    = 0xe\n\tIFLA_BR_TOPOLOGY_CHANGE_DETECTED           = 0xf\n\tIFLA_BR_HELLO_TIMER                        = 0x10\n\tIFLA_BR_TCN_TIMER                          = 0x11\n\tIFLA_BR_TOPOLOGY_CHANGE_TIMER              = 0x12\n\tIFLA_BR_GC_TIMER                           = 0x13\n\tIFLA_BR_GROUP_ADDR                         = 0x14\n\tIFLA_BR_FDB_FLUSH                          = 0x15\n\tIFLA_BR_MCAST_ROUTER                       = 0x16\n\tIFLA_BR_MCAST_SNOOPING                     = 0x17\n\tIFLA_BR_MCAST_QUERY_USE_IFADDR             = 0x18\n\tIFLA_BR_MCAST_QUERIER                      = 0x19\n\tIFLA_BR_MCAST_HASH_ELASTICITY              = 0x1a\n\tIFLA_BR_MCAST_HASH_MAX                     = 0x1b\n\tIFLA_BR_MCAST_LAST_MEMBER_CNT              = 0x1c\n\tIFLA_BR_MCAST_STARTUP_QUERY_CNT            = 0x1d\n\tIFLA_BR_MCAST_LAST_MEMBER_INTVL            = 0x1e\n\tIFLA_BR_MCAST_MEMBERSHIP_INTVL             = 0x1f\n\tIFLA_BR_MCAST_QUERIER_INTVL                = 0x20\n\tIFLA_BR_MCAST_QUERY_INTVL                  = 0x21\n\tIFLA_BR_MCAST_QUERY_RESPONSE_INTVL         = 0x22\n\tIFLA_BR_MCAST_STARTUP_QUERY_INTVL          = 0x23\n\tIFLA_BR_NF_CALL_IPTABLES                   = 0x24\n\tIFLA_BR_NF_CALL_IP6TABLES                  = 0x25\n\tIFLA_BR_NF_CALL_ARPTABLES                  = 0x26\n\tIFLA_BR_VLAN_DEFAULT_PVID                  = 0x27\n\tIFLA_BR_PAD                                = 0x28\n\tIFLA_BR_VLAN_STATS_ENABLED                 = 0x29\n\tIFLA_BR_MCAST_STATS_ENABLED                = 0x2a\n\tIFLA_BR_MCAST_IGMP_VERSION                 = 0x2b\n\tIFLA_BR_MCAST_MLD_VERSION                  = 0x2c\n\tIFLA_BR_VLAN_STATS_PER_PORT                = 0x2d\n\tIFLA_BR_MULTI_BOOLOPT                      = 0x2e\n\tIFLA_BR_MCAST_QUERIER_STATE                = 0x2f\n\tIFLA_BR_FDB_N_LEARNED                      = 0x30\n\tIFLA_BR_FDB_MAX_LEARNED                    = 0x31\n\tIFLA_BRPORT_UNSPEC                         = 0x0\n\tIFLA_BRPORT_STATE                          = 0x1\n\tIFLA_BRPORT_PRIORITY                       = 0x2\n\tIFLA_BRPORT_COST                           = 0x3\n\tIFLA_BRPORT_MODE                           = 0x4\n\tIFLA_BRPORT_GUARD                          = 0x5\n\tIFLA_BRPORT_PROTECT                        = 0x6\n\tIFLA_BRPORT_FAST_LEAVE                     = 0x7\n\tIFLA_BRPORT_LEARNING                       = 0x8\n\tIFLA_BRPORT_UNICAST_FLOOD                  = 0x9\n\tIFLA_BRPORT_PROXYARP                       = 0xa\n\tIFLA_BRPORT_LEARNING_SYNC                  = 0xb\n\tIFLA_BRPORT_PROXYARP_WIFI                  = 0xc\n\tIFLA_BRPORT_ROOT_ID                        = 0xd\n\tIFLA_BRPORT_BRIDGE_ID                      = 0xe\n\tIFLA_BRPORT_DESIGNATED_PORT                = 0xf\n\tIFLA_BRPORT_DESIGNATED_COST                = 0x10\n\tIFLA_BRPORT_ID                             = 0x11\n\tIFLA_BRPORT_NO                             = 0x12\n\tIFLA_BRPORT_TOPOLOGY_CHANGE_ACK            = 0x13\n\tIFLA_BRPORT_CONFIG_PENDING                 = 0x14\n\tIFLA_BRPORT_MESSAGE_AGE_TIMER              = 0x15\n\tIFLA_BRPORT_FORWARD_DELAY_TIMER            = 0x16\n\tIFLA_BRPORT_HOLD_TIMER                     = 0x17\n\tIFLA_BRPORT_FLUSH                          = 0x18\n\tIFLA_BRPORT_MULTICAST_ROUTER               = 0x19\n\tIFLA_BRPORT_PAD                            = 0x1a\n\tIFLA_BRPORT_MCAST_FLOOD                    = 0x1b\n\tIFLA_BRPORT_MCAST_TO_UCAST                 = 0x1c\n\tIFLA_BRPORT_VLAN_TUNNEL                    = 0x1d\n\tIFLA_BRPORT_BCAST_FLOOD                    = 0x1e\n\tIFLA_BRPORT_GROUP_FWD_MASK                 = 0x1f\n\tIFLA_BRPORT_NEIGH_SUPPRESS                 = 0x20\n\tIFLA_BRPORT_ISOLATED                       = 0x21\n\tIFLA_BRPORT_BACKUP_PORT                    = 0x22\n\tIFLA_BRPORT_MRP_RING_OPEN                  = 0x23\n\tIFLA_BRPORT_MRP_IN_OPEN                    = 0x24\n\tIFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT          = 0x25\n\tIFLA_BRPORT_MCAST_EHT_HOSTS_CNT            = 0x26\n\tIFLA_BRPORT_LOCKED                         = 0x27\n\tIFLA_BRPORT_MAB                            = 0x28\n\tIFLA_BRPORT_MCAST_N_GROUPS                 = 0x29\n\tIFLA_BRPORT_MCAST_MAX_GROUPS               = 0x2a\n\tIFLA_BRPORT_NEIGH_VLAN_SUPPRESS            = 0x2b\n\tIFLA_BRPORT_BACKUP_NHID                    = 0x2c\n\tIFLA_INFO_UNSPEC                           = 0x0\n\tIFLA_INFO_KIND                             = 0x1\n\tIFLA_INFO_DATA                             = 0x2\n\tIFLA_INFO_XSTATS                           = 0x3\n\tIFLA_INFO_SLAVE_KIND                       = 0x4\n\tIFLA_INFO_SLAVE_DATA                       = 0x5\n\tIFLA_VLAN_UNSPEC                           = 0x0\n\tIFLA_VLAN_ID                               = 0x1\n\tIFLA_VLAN_FLAGS                            = 0x2\n\tIFLA_VLAN_EGRESS_QOS                       = 0x3\n\tIFLA_VLAN_INGRESS_QOS                      = 0x4\n\tIFLA_VLAN_PROTOCOL                         = 0x5\n\tIFLA_VLAN_QOS_UNSPEC                       = 0x0\n\tIFLA_VLAN_QOS_MAPPING                      = 0x1\n\tIFLA_MACVLAN_UNSPEC                        = 0x0\n\tIFLA_MACVLAN_MODE                          = 0x1\n\tIFLA_MACVLAN_FLAGS                         = 0x2\n\tIFLA_MACVLAN_MACADDR_MODE                  = 0x3\n\tIFLA_MACVLAN_MACADDR                       = 0x4\n\tIFLA_MACVLAN_MACADDR_DATA                  = 0x5\n\tIFLA_MACVLAN_MACADDR_COUNT                 = 0x6\n\tIFLA_MACVLAN_BC_QUEUE_LEN                  = 0x7\n\tIFLA_MACVLAN_BC_QUEUE_LEN_USED             = 0x8\n\tIFLA_MACVLAN_BC_CUTOFF                     = 0x9\n\tIFLA_VRF_UNSPEC                            = 0x0\n\tIFLA_VRF_TABLE                             = 0x1\n\tIFLA_VRF_PORT_UNSPEC                       = 0x0\n\tIFLA_VRF_PORT_TABLE                        = 0x1\n\tIFLA_MACSEC_UNSPEC                         = 0x0\n\tIFLA_MACSEC_SCI                            = 0x1\n\tIFLA_MACSEC_PORT                           = 0x2\n\tIFLA_MACSEC_ICV_LEN                        = 0x3\n\tIFLA_MACSEC_CIPHER_SUITE                   = 0x4\n\tIFLA_MACSEC_WINDOW                         = 0x5\n\tIFLA_MACSEC_ENCODING_SA                    = 0x6\n\tIFLA_MACSEC_ENCRYPT                        = 0x7\n\tIFLA_MACSEC_PROTECT                        = 0x8\n\tIFLA_MACSEC_INC_SCI                        = 0x9\n\tIFLA_MACSEC_ES                             = 0xa\n\tIFLA_MACSEC_SCB                            = 0xb\n\tIFLA_MACSEC_REPLAY_PROTECT                 = 0xc\n\tIFLA_MACSEC_VALIDATION                     = 0xd\n\tIFLA_MACSEC_PAD                            = 0xe\n\tIFLA_MACSEC_OFFLOAD                        = 0xf\n\tIFLA_XFRM_UNSPEC                           = 0x0\n\tIFLA_XFRM_LINK                             = 0x1\n\tIFLA_XFRM_IF_ID                            = 0x2\n\tIFLA_XFRM_COLLECT_METADATA                 = 0x3\n\tIFLA_IPVLAN_UNSPEC                         = 0x0\n\tIFLA_IPVLAN_MODE                           = 0x1\n\tIFLA_IPVLAN_FLAGS                          = 0x2\n\tIFLA_NETKIT_UNSPEC                         = 0x0\n\tIFLA_NETKIT_PEER_INFO                      = 0x1\n\tIFLA_NETKIT_PRIMARY                        = 0x2\n\tIFLA_NETKIT_POLICY                         = 0x3\n\tIFLA_NETKIT_PEER_POLICY                    = 0x4\n\tIFLA_NETKIT_MODE                           = 0x5\n\tIFLA_VXLAN_UNSPEC                          = 0x0\n\tIFLA_VXLAN_ID                              = 0x1\n\tIFLA_VXLAN_GROUP                           = 0x2\n\tIFLA_VXLAN_LINK                            = 0x3\n\tIFLA_VXLAN_LOCAL                           = 0x4\n\tIFLA_VXLAN_TTL                             = 0x5\n\tIFLA_VXLAN_TOS                             = 0x6\n\tIFLA_VXLAN_LEARNING                        = 0x7\n\tIFLA_VXLAN_AGEING                          = 0x8\n\tIFLA_VXLAN_LIMIT                           = 0x9\n\tIFLA_VXLAN_PORT_RANGE                      = 0xa\n\tIFLA_VXLAN_PROXY                           = 0xb\n\tIFLA_VXLAN_RSC                             = 0xc\n\tIFLA_VXLAN_L2MISS                          = 0xd\n\tIFLA_VXLAN_L3MISS                          = 0xe\n\tIFLA_VXLAN_PORT                            = 0xf\n\tIFLA_VXLAN_GROUP6                          = 0x10\n\tIFLA_VXLAN_LOCAL6                          = 0x11\n\tIFLA_VXLAN_UDP_CSUM                        = 0x12\n\tIFLA_VXLAN_UDP_ZERO_CSUM6_TX               = 0x13\n\tIFLA_VXLAN_UDP_ZERO_CSUM6_RX               = 0x14\n\tIFLA_VXLAN_REMCSUM_TX                      = 0x15\n\tIFLA_VXLAN_REMCSUM_RX                      = 0x16\n\tIFLA_VXLAN_GBP                             = 0x17\n\tIFLA_VXLAN_REMCSUM_NOPARTIAL               = 0x18\n\tIFLA_VXLAN_COLLECT_METADATA                = 0x19\n\tIFLA_VXLAN_LABEL                           = 0x1a\n\tIFLA_VXLAN_GPE                             = 0x1b\n\tIFLA_VXLAN_TTL_INHERIT                     = 0x1c\n\tIFLA_VXLAN_DF                              = 0x1d\n\tIFLA_VXLAN_VNIFILTER                       = 0x1e\n\tIFLA_VXLAN_LOCALBYPASS                     = 0x1f\n\tIFLA_VXLAN_LABEL_POLICY                    = 0x20\n\tIFLA_GENEVE_UNSPEC                         = 0x0\n\tIFLA_GENEVE_ID                             = 0x1\n\tIFLA_GENEVE_REMOTE                         = 0x2\n\tIFLA_GENEVE_TTL                            = 0x3\n\tIFLA_GENEVE_TOS                            = 0x4\n\tIFLA_GENEVE_PORT                           = 0x5\n\tIFLA_GENEVE_COLLECT_METADATA               = 0x6\n\tIFLA_GENEVE_REMOTE6                        = 0x7\n\tIFLA_GENEVE_UDP_CSUM                       = 0x8\n\tIFLA_GENEVE_UDP_ZERO_CSUM6_TX              = 0x9\n\tIFLA_GENEVE_UDP_ZERO_CSUM6_RX              = 0xa\n\tIFLA_GENEVE_LABEL                          = 0xb\n\tIFLA_GENEVE_TTL_INHERIT                    = 0xc\n\tIFLA_GENEVE_DF                             = 0xd\n\tIFLA_GENEVE_INNER_PROTO_INHERIT            = 0xe\n\tIFLA_BAREUDP_UNSPEC                        = 0x0\n\tIFLA_BAREUDP_PORT                          = 0x1\n\tIFLA_BAREUDP_ETHERTYPE                     = 0x2\n\tIFLA_BAREUDP_SRCPORT_MIN                   = 0x3\n\tIFLA_BAREUDP_MULTIPROTO_MODE               = 0x4\n\tIFLA_PPP_UNSPEC                            = 0x0\n\tIFLA_PPP_DEV_FD                            = 0x1\n\tIFLA_GTP_UNSPEC                            = 0x0\n\tIFLA_GTP_FD0                               = 0x1\n\tIFLA_GTP_FD1                               = 0x2\n\tIFLA_GTP_PDP_HASHSIZE                      = 0x3\n\tIFLA_GTP_ROLE                              = 0x4\n\tIFLA_GTP_CREATE_SOCKETS                    = 0x5\n\tIFLA_GTP_RESTART_COUNT                     = 0x6\n\tIFLA_GTP_LOCAL                             = 0x7\n\tIFLA_GTP_LOCAL6                            = 0x8\n\tIFLA_BOND_UNSPEC                           = 0x0\n\tIFLA_BOND_MODE                             = 0x1\n\tIFLA_BOND_ACTIVE_SLAVE                     = 0x2\n\tIFLA_BOND_MIIMON                           = 0x3\n\tIFLA_BOND_UPDELAY                          = 0x4\n\tIFLA_BOND_DOWNDELAY                        = 0x5\n\tIFLA_BOND_USE_CARRIER                      = 0x6\n\tIFLA_BOND_ARP_INTERVAL                     = 0x7\n\tIFLA_BOND_ARP_IP_TARGET                    = 0x8\n\tIFLA_BOND_ARP_VALIDATE                     = 0x9\n\tIFLA_BOND_ARP_ALL_TARGETS                  = 0xa\n\tIFLA_BOND_PRIMARY                          = 0xb\n\tIFLA_BOND_PRIMARY_RESELECT                 = 0xc\n\tIFLA_BOND_FAIL_OVER_MAC                    = 0xd\n\tIFLA_BOND_XMIT_HASH_POLICY                 = 0xe\n\tIFLA_BOND_RESEND_IGMP                      = 0xf\n\tIFLA_BOND_NUM_PEER_NOTIF                   = 0x10\n\tIFLA_BOND_ALL_SLAVES_ACTIVE                = 0x11\n\tIFLA_BOND_MIN_LINKS                        = 0x12\n\tIFLA_BOND_LP_INTERVAL                      = 0x13\n\tIFLA_BOND_PACKETS_PER_SLAVE                = 0x14\n\tIFLA_BOND_AD_LACP_RATE                     = 0x15\n\tIFLA_BOND_AD_SELECT                        = 0x16\n\tIFLA_BOND_AD_INFO                          = 0x17\n\tIFLA_BOND_AD_ACTOR_SYS_PRIO                = 0x18\n\tIFLA_BOND_AD_USER_PORT_KEY                 = 0x19\n\tIFLA_BOND_AD_ACTOR_SYSTEM                  = 0x1a\n\tIFLA_BOND_TLB_DYNAMIC_LB                   = 0x1b\n\tIFLA_BOND_PEER_NOTIF_DELAY                 = 0x1c\n\tIFLA_BOND_AD_LACP_ACTIVE                   = 0x1d\n\tIFLA_BOND_MISSED_MAX                       = 0x1e\n\tIFLA_BOND_NS_IP6_TARGET                    = 0x1f\n\tIFLA_BOND_COUPLED_CONTROL                  = 0x20\n\tIFLA_BOND_AD_INFO_UNSPEC                   = 0x0\n\tIFLA_BOND_AD_INFO_AGGREGATOR               = 0x1\n\tIFLA_BOND_AD_INFO_NUM_PORTS                = 0x2\n\tIFLA_BOND_AD_INFO_ACTOR_KEY                = 0x3\n\tIFLA_BOND_AD_INFO_PARTNER_KEY              = 0x4\n\tIFLA_BOND_AD_INFO_PARTNER_MAC              = 0x5\n\tIFLA_BOND_SLAVE_UNSPEC                     = 0x0\n\tIFLA_BOND_SLAVE_STATE                      = 0x1\n\tIFLA_BOND_SLAVE_MII_STATUS                 = 0x2\n\tIFLA_BOND_SLAVE_LINK_FAILURE_COUNT         = 0x3\n\tIFLA_BOND_SLAVE_PERM_HWADDR                = 0x4\n\tIFLA_BOND_SLAVE_QUEUE_ID                   = 0x5\n\tIFLA_BOND_SLAVE_AD_AGGREGATOR_ID           = 0x6\n\tIFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE   = 0x7\n\tIFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE = 0x8\n\tIFLA_BOND_SLAVE_PRIO                       = 0x9\n\tIFLA_VF_INFO_UNSPEC                        = 0x0\n\tIFLA_VF_INFO                               = 0x1\n\tIFLA_VF_UNSPEC                             = 0x0\n\tIFLA_VF_MAC                                = 0x1\n\tIFLA_VF_VLAN                               = 0x2\n\tIFLA_VF_TX_RATE                            = 0x3\n\tIFLA_VF_SPOOFCHK                           = 0x4\n\tIFLA_VF_LINK_STATE                         = 0x5\n\tIFLA_VF_RATE                               = 0x6\n\tIFLA_VF_RSS_QUERY_EN                       = 0x7\n\tIFLA_VF_STATS                              = 0x8\n\tIFLA_VF_TRUST                              = 0x9\n\tIFLA_VF_IB_NODE_GUID                       = 0xa\n\tIFLA_VF_IB_PORT_GUID                       = 0xb\n\tIFLA_VF_VLAN_LIST                          = 0xc\n\tIFLA_VF_BROADCAST                          = 0xd\n\tIFLA_VF_VLAN_INFO_UNSPEC                   = 0x0\n\tIFLA_VF_VLAN_INFO                          = 0x1\n\tIFLA_VF_LINK_STATE_AUTO                    = 0x0\n\tIFLA_VF_LINK_STATE_ENABLE                  = 0x1\n\tIFLA_VF_LINK_STATE_DISABLE                 = 0x2\n\tIFLA_VF_STATS_RX_PACKETS                   = 0x0\n\tIFLA_VF_STATS_TX_PACKETS                   = 0x1\n\tIFLA_VF_STATS_RX_BYTES                     = 0x2\n\tIFLA_VF_STATS_TX_BYTES                     = 0x3\n\tIFLA_VF_STATS_BROADCAST                    = 0x4\n\tIFLA_VF_STATS_MULTICAST                    = 0x5\n\tIFLA_VF_STATS_PAD                          = 0x6\n\tIFLA_VF_STATS_RX_DROPPED                   = 0x7\n\tIFLA_VF_STATS_TX_DROPPED                   = 0x8\n\tIFLA_VF_PORT_UNSPEC                        = 0x0\n\tIFLA_VF_PORT                               = 0x1\n\tIFLA_PORT_UNSPEC                           = 0x0\n\tIFLA_PORT_VF                               = 0x1\n\tIFLA_PORT_PROFILE                          = 0x2\n\tIFLA_PORT_VSI_TYPE                         = 0x3\n\tIFLA_PORT_INSTANCE_UUID                    = 0x4\n\tIFLA_PORT_HOST_UUID                        = 0x5\n\tIFLA_PORT_REQUEST                          = 0x6\n\tIFLA_PORT_RESPONSE                         = 0x7\n\tIFLA_IPOIB_UNSPEC                          = 0x0\n\tIFLA_IPOIB_PKEY                            = 0x1\n\tIFLA_IPOIB_MODE                            = 0x2\n\tIFLA_IPOIB_UMCAST                          = 0x3\n\tIFLA_HSR_UNSPEC                            = 0x0\n\tIFLA_HSR_SLAVE1                            = 0x1\n\tIFLA_HSR_SLAVE2                            = 0x2\n\tIFLA_HSR_MULTICAST_SPEC                    = 0x3\n\tIFLA_HSR_SUPERVISION_ADDR                  = 0x4\n\tIFLA_HSR_SEQ_NR                            = 0x5\n\tIFLA_HSR_VERSION                           = 0x6\n\tIFLA_HSR_PROTOCOL                          = 0x7\n\tIFLA_HSR_INTERLINK                         = 0x8\n\tIFLA_STATS_UNSPEC                          = 0x0\n\tIFLA_STATS_LINK_64                         = 0x1\n\tIFLA_STATS_LINK_XSTATS                     = 0x2\n\tIFLA_STATS_LINK_XSTATS_SLAVE               = 0x3\n\tIFLA_STATS_LINK_OFFLOAD_XSTATS             = 0x4\n\tIFLA_STATS_AF_SPEC                         = 0x5\n\tIFLA_STATS_GETSET_UNSPEC                   = 0x0\n\tIFLA_STATS_GET_FILTERS                     = 0x1\n\tIFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS     = 0x2\n\tIFLA_OFFLOAD_XSTATS_UNSPEC                 = 0x0\n\tIFLA_OFFLOAD_XSTATS_CPU_HIT                = 0x1\n\tIFLA_OFFLOAD_XSTATS_HW_S_INFO              = 0x2\n\tIFLA_OFFLOAD_XSTATS_L3_STATS               = 0x3\n\tIFLA_OFFLOAD_XSTATS_HW_S_INFO_UNSPEC       = 0x0\n\tIFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST      = 0x1\n\tIFLA_OFFLOAD_XSTATS_HW_S_INFO_USED         = 0x2\n\tIFLA_XDP_UNSPEC                            = 0x0\n\tIFLA_XDP_FD                                = 0x1\n\tIFLA_XDP_ATTACHED                          = 0x2\n\tIFLA_XDP_FLAGS                             = 0x3\n\tIFLA_XDP_PROG_ID                           = 0x4\n\tIFLA_XDP_DRV_PROG_ID                       = 0x5\n\tIFLA_XDP_SKB_PROG_ID                       = 0x6\n\tIFLA_XDP_HW_PROG_ID                        = 0x7\n\tIFLA_XDP_EXPECTED_FD                       = 0x8\n\tIFLA_EVENT_NONE                            = 0x0\n\tIFLA_EVENT_REBOOT                          = 0x1\n\tIFLA_EVENT_FEATURES                        = 0x2\n\tIFLA_EVENT_BONDING_FAILOVER                = 0x3\n\tIFLA_EVENT_NOTIFY_PEERS                    = 0x4\n\tIFLA_EVENT_IGMP_RESEND                     = 0x5\n\tIFLA_EVENT_BONDING_OPTIONS                 = 0x6\n\tIFLA_TUN_UNSPEC                            = 0x0\n\tIFLA_TUN_OWNER                             = 0x1\n\tIFLA_TUN_GROUP                             = 0x2\n\tIFLA_TUN_TYPE                              = 0x3\n\tIFLA_TUN_PI                                = 0x4\n\tIFLA_TUN_VNET_HDR                          = 0x5\n\tIFLA_TUN_PERSIST                           = 0x6\n\tIFLA_TUN_MULTI_QUEUE                       = 0x7\n\tIFLA_TUN_NUM_QUEUES                        = 0x8\n\tIFLA_TUN_NUM_DISABLED_QUEUES               = 0x9\n\tIFLA_RMNET_UNSPEC                          = 0x0\n\tIFLA_RMNET_MUX_ID                          = 0x1\n\tIFLA_RMNET_FLAGS                           = 0x2\n\tIFLA_MCTP_UNSPEC                           = 0x0\n\tIFLA_MCTP_NET                              = 0x1\n\tIFLA_DSA_UNSPEC                            = 0x0\n\tIFLA_DSA_CONDUIT                           = 0x1\n\tIFLA_DSA_MASTER                            = 0x1\n)\n\nconst (\n\tNETKIT_NEXT     = -0x1\n\tNETKIT_PASS     = 0x0\n\tNETKIT_DROP     = 0x2\n\tNETKIT_REDIRECT = 0x7\n\tNETKIT_L2       = 0x0\n\tNETKIT_L3       = 0x1\n)\n\nconst (\n\tNF_INET_PRE_ROUTING  = 0x0\n\tNF_INET_LOCAL_IN     = 0x1\n\tNF_INET_FORWARD      = 0x2\n\tNF_INET_LOCAL_OUT    = 0x3\n\tNF_INET_POST_ROUTING = 0x4\n\tNF_INET_NUMHOOKS     = 0x5\n)\n\nconst (\n\tNF_NETDEV_INGRESS  = 0x0\n\tNF_NETDEV_EGRESS   = 0x1\n\tNF_NETDEV_NUMHOOKS = 0x2\n)\n\nconst (\n\tNFPROTO_UNSPEC   = 0x0\n\tNFPROTO_INET     = 0x1\n\tNFPROTO_IPV4     = 0x2\n\tNFPROTO_ARP      = 0x3\n\tNFPROTO_NETDEV   = 0x5\n\tNFPROTO_BRIDGE   = 0x7\n\tNFPROTO_IPV6     = 0xa\n\tNFPROTO_DECNET   = 0xc\n\tNFPROTO_NUMPROTO = 0xd\n)\n\nconst SO_ORIGINAL_DST = 0x50\n\ntype Nfgenmsg struct {\n\tNfgen_family uint8\n\tVersion      uint8\n\tRes_id       uint16\n}\n\nconst (\n\tNFNL_BATCH_UNSPEC = 0x0\n\tNFNL_BATCH_GENID  = 0x1\n)\n\nconst (\n\tNFT_REG_VERDICT                   = 0x0\n\tNFT_REG_1                         = 0x1\n\tNFT_REG_2                         = 0x2\n\tNFT_REG_3                         = 0x3\n\tNFT_REG_4                         = 0x4\n\tNFT_REG32_00                      = 0x8\n\tNFT_REG32_01                      = 0x9\n\tNFT_REG32_02                      = 0xa\n\tNFT_REG32_03                      = 0xb\n\tNFT_REG32_04                      = 0xc\n\tNFT_REG32_05                      = 0xd\n\tNFT_REG32_06                      = 0xe\n\tNFT_REG32_07                      = 0xf\n\tNFT_REG32_08                      = 0x10\n\tNFT_REG32_09                      = 0x11\n\tNFT_REG32_10                      = 0x12\n\tNFT_REG32_11                      = 0x13\n\tNFT_REG32_12                      = 0x14\n\tNFT_REG32_13                      = 0x15\n\tNFT_REG32_14                      = 0x16\n\tNFT_REG32_15                      = 0x17\n\tNFT_CONTINUE                      = -0x1\n\tNFT_BREAK                         = -0x2\n\tNFT_JUMP                          = -0x3\n\tNFT_GOTO                          = -0x4\n\tNFT_RETURN                        = -0x5\n\tNFT_MSG_NEWTABLE                  = 0x0\n\tNFT_MSG_GETTABLE                  = 0x1\n\tNFT_MSG_DELTABLE                  = 0x2\n\tNFT_MSG_NEWCHAIN                  = 0x3\n\tNFT_MSG_GETCHAIN                  = 0x4\n\tNFT_MSG_DELCHAIN                  = 0x5\n\tNFT_MSG_NEWRULE                   = 0x6\n\tNFT_MSG_GETRULE                   = 0x7\n\tNFT_MSG_DELRULE                   = 0x8\n\tNFT_MSG_NEWSET                    = 0x9\n\tNFT_MSG_GETSET                    = 0xa\n\tNFT_MSG_DELSET                    = 0xb\n\tNFT_MSG_NEWSETELEM                = 0xc\n\tNFT_MSG_GETSETELEM                = 0xd\n\tNFT_MSG_DELSETELEM                = 0xe\n\tNFT_MSG_NEWGEN                    = 0xf\n\tNFT_MSG_GETGEN                    = 0x10\n\tNFT_MSG_TRACE                     = 0x11\n\tNFT_MSG_NEWOBJ                    = 0x12\n\tNFT_MSG_GETOBJ                    = 0x13\n\tNFT_MSG_DELOBJ                    = 0x14\n\tNFT_MSG_GETOBJ_RESET              = 0x15\n\tNFT_MSG_NEWFLOWTABLE              = 0x16\n\tNFT_MSG_GETFLOWTABLE              = 0x17\n\tNFT_MSG_DELFLOWTABLE              = 0x18\n\tNFT_MSG_GETRULE_RESET             = 0x19\n\tNFT_MSG_MAX                       = 0x22\n\tNFTA_LIST_UNSPEC                  = 0x0\n\tNFTA_LIST_ELEM                    = 0x1\n\tNFTA_HOOK_UNSPEC                  = 0x0\n\tNFTA_HOOK_HOOKNUM                 = 0x1\n\tNFTA_HOOK_PRIORITY                = 0x2\n\tNFTA_HOOK_DEV                     = 0x3\n\tNFT_TABLE_F_DORMANT               = 0x1\n\tNFTA_TABLE_UNSPEC                 = 0x0\n\tNFTA_TABLE_NAME                   = 0x1\n\tNFTA_TABLE_FLAGS                  = 0x2\n\tNFTA_TABLE_USE                    = 0x3\n\tNFTA_CHAIN_UNSPEC                 = 0x0\n\tNFTA_CHAIN_TABLE                  = 0x1\n\tNFTA_CHAIN_HANDLE                 = 0x2\n\tNFTA_CHAIN_NAME                   = 0x3\n\tNFTA_CHAIN_HOOK                   = 0x4\n\tNFTA_CHAIN_POLICY                 = 0x5\n\tNFTA_CHAIN_USE                    = 0x6\n\tNFTA_CHAIN_TYPE                   = 0x7\n\tNFTA_CHAIN_COUNTERS               = 0x8\n\tNFTA_CHAIN_PAD                    = 0x9\n\tNFTA_RULE_UNSPEC                  = 0x0\n\tNFTA_RULE_TABLE                   = 0x1\n\tNFTA_RULE_CHAIN                   = 0x2\n\tNFTA_RULE_HANDLE                  = 0x3\n\tNFTA_RULE_EXPRESSIONS             = 0x4\n\tNFTA_RULE_COMPAT                  = 0x5\n\tNFTA_RULE_POSITION                = 0x6\n\tNFTA_RULE_USERDATA                = 0x7\n\tNFTA_RULE_PAD                     = 0x8\n\tNFTA_RULE_ID                      = 0x9\n\tNFT_RULE_COMPAT_F_INV             = 0x2\n\tNFT_RULE_COMPAT_F_MASK            = 0x2\n\tNFTA_RULE_COMPAT_UNSPEC           = 0x0\n\tNFTA_RULE_COMPAT_PROTO            = 0x1\n\tNFTA_RULE_COMPAT_FLAGS            = 0x2\n\tNFT_SET_ANONYMOUS                 = 0x1\n\tNFT_SET_CONSTANT                  = 0x2\n\tNFT_SET_INTERVAL                  = 0x4\n\tNFT_SET_MAP                       = 0x8\n\tNFT_SET_TIMEOUT                   = 0x10\n\tNFT_SET_EVAL                      = 0x20\n\tNFT_SET_OBJECT                    = 0x40\n\tNFT_SET_POL_PERFORMANCE           = 0x0\n\tNFT_SET_POL_MEMORY                = 0x1\n\tNFTA_SET_DESC_UNSPEC              = 0x0\n\tNFTA_SET_DESC_SIZE                = 0x1\n\tNFTA_SET_UNSPEC                   = 0x0\n\tNFTA_SET_TABLE                    = 0x1\n\tNFTA_SET_NAME                     = 0x2\n\tNFTA_SET_FLAGS                    = 0x3\n\tNFTA_SET_KEY_TYPE                 = 0x4\n\tNFTA_SET_KEY_LEN                  = 0x5\n\tNFTA_SET_DATA_TYPE                = 0x6\n\tNFTA_SET_DATA_LEN                 = 0x7\n\tNFTA_SET_POLICY                   = 0x8\n\tNFTA_SET_DESC                     = 0x9\n\tNFTA_SET_ID                       = 0xa\n\tNFTA_SET_TIMEOUT                  = 0xb\n\tNFTA_SET_GC_INTERVAL              = 0xc\n\tNFTA_SET_USERDATA                 = 0xd\n\tNFTA_SET_PAD                      = 0xe\n\tNFTA_SET_OBJ_TYPE                 = 0xf\n\tNFT_SET_ELEM_INTERVAL_END         = 0x1\n\tNFTA_SET_ELEM_UNSPEC              = 0x0\n\tNFTA_SET_ELEM_KEY                 = 0x1\n\tNFTA_SET_ELEM_DATA                = 0x2\n\tNFTA_SET_ELEM_FLAGS               = 0x3\n\tNFTA_SET_ELEM_TIMEOUT             = 0x4\n\tNFTA_SET_ELEM_EXPIRATION          = 0x5\n\tNFTA_SET_ELEM_USERDATA            = 0x6\n\tNFTA_SET_ELEM_EXPR                = 0x7\n\tNFTA_SET_ELEM_PAD                 = 0x8\n\tNFTA_SET_ELEM_OBJREF              = 0x9\n\tNFTA_SET_ELEM_LIST_UNSPEC         = 0x0\n\tNFTA_SET_ELEM_LIST_TABLE          = 0x1\n\tNFTA_SET_ELEM_LIST_SET            = 0x2\n\tNFTA_SET_ELEM_LIST_ELEMENTS       = 0x3\n\tNFTA_SET_ELEM_LIST_SET_ID         = 0x4\n\tNFT_DATA_VALUE                    = 0x0\n\tNFT_DATA_VERDICT                  = 0xffffff00\n\tNFTA_DATA_UNSPEC                  = 0x0\n\tNFTA_DATA_VALUE                   = 0x1\n\tNFTA_DATA_VERDICT                 = 0x2\n\tNFTA_VERDICT_UNSPEC               = 0x0\n\tNFTA_VERDICT_CODE                 = 0x1\n\tNFTA_VERDICT_CHAIN                = 0x2\n\tNFTA_EXPR_UNSPEC                  = 0x0\n\tNFTA_EXPR_NAME                    = 0x1\n\tNFTA_EXPR_DATA                    = 0x2\n\tNFTA_IMMEDIATE_UNSPEC             = 0x0\n\tNFTA_IMMEDIATE_DREG               = 0x1\n\tNFTA_IMMEDIATE_DATA               = 0x2\n\tNFTA_BITWISE_UNSPEC               = 0x0\n\tNFTA_BITWISE_SREG                 = 0x1\n\tNFTA_BITWISE_DREG                 = 0x2\n\tNFTA_BITWISE_LEN                  = 0x3\n\tNFTA_BITWISE_MASK                 = 0x4\n\tNFTA_BITWISE_XOR                  = 0x5\n\tNFT_BYTEORDER_NTOH                = 0x0\n\tNFT_BYTEORDER_HTON                = 0x1\n\tNFTA_BYTEORDER_UNSPEC             = 0x0\n\tNFTA_BYTEORDER_SREG               = 0x1\n\tNFTA_BYTEORDER_DREG               = 0x2\n\tNFTA_BYTEORDER_OP                 = 0x3\n\tNFTA_BYTEORDER_LEN                = 0x4\n\tNFTA_BYTEORDER_SIZE               = 0x5\n\tNFT_CMP_EQ                        = 0x0\n\tNFT_CMP_NEQ                       = 0x1\n\tNFT_CMP_LT                        = 0x2\n\tNFT_CMP_LTE                       = 0x3\n\tNFT_CMP_GT                        = 0x4\n\tNFT_CMP_GTE                       = 0x5\n\tNFTA_CMP_UNSPEC                   = 0x0\n\tNFTA_CMP_SREG                     = 0x1\n\tNFTA_CMP_OP                       = 0x2\n\tNFTA_CMP_DATA                     = 0x3\n\tNFT_RANGE_EQ                      = 0x0\n\tNFT_RANGE_NEQ                     = 0x1\n\tNFTA_RANGE_UNSPEC                 = 0x0\n\tNFTA_RANGE_SREG                   = 0x1\n\tNFTA_RANGE_OP                     = 0x2\n\tNFTA_RANGE_FROM_DATA              = 0x3\n\tNFTA_RANGE_TO_DATA                = 0x4\n\tNFT_LOOKUP_F_INV                  = 0x1\n\tNFTA_LOOKUP_UNSPEC                = 0x0\n\tNFTA_LOOKUP_SET                   = 0x1\n\tNFTA_LOOKUP_SREG                  = 0x2\n\tNFTA_LOOKUP_DREG                  = 0x3\n\tNFTA_LOOKUP_SET_ID                = 0x4\n\tNFTA_LOOKUP_FLAGS                 = 0x5\n\tNFT_DYNSET_OP_ADD                 = 0x0\n\tNFT_DYNSET_OP_UPDATE              = 0x1\n\tNFT_DYNSET_F_INV                  = 0x1\n\tNFTA_DYNSET_UNSPEC                = 0x0\n\tNFTA_DYNSET_SET_NAME              = 0x1\n\tNFTA_DYNSET_SET_ID                = 0x2\n\tNFTA_DYNSET_OP                    = 0x3\n\tNFTA_DYNSET_SREG_KEY              = 0x4\n\tNFTA_DYNSET_SREG_DATA             = 0x5\n\tNFTA_DYNSET_TIMEOUT               = 0x6\n\tNFTA_DYNSET_EXPR                  = 0x7\n\tNFTA_DYNSET_PAD                   = 0x8\n\tNFTA_DYNSET_FLAGS                 = 0x9\n\tNFT_PAYLOAD_LL_HEADER             = 0x0\n\tNFT_PAYLOAD_NETWORK_HEADER        = 0x1\n\tNFT_PAYLOAD_TRANSPORT_HEADER      = 0x2\n\tNFT_PAYLOAD_INNER_HEADER          = 0x3\n\tNFT_PAYLOAD_TUN_HEADER            = 0x4\n\tNFT_PAYLOAD_CSUM_NONE             = 0x0\n\tNFT_PAYLOAD_CSUM_INET             = 0x1\n\tNFT_PAYLOAD_CSUM_SCTP             = 0x2\n\tNFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1\n\tNFTA_PAYLOAD_UNSPEC               = 0x0\n\tNFTA_PAYLOAD_DREG                 = 0x1\n\tNFTA_PAYLOAD_BASE                 = 0x2\n\tNFTA_PAYLOAD_OFFSET               = 0x3\n\tNFTA_PAYLOAD_LEN                  = 0x4\n\tNFTA_PAYLOAD_SREG                 = 0x5\n\tNFTA_PAYLOAD_CSUM_TYPE            = 0x6\n\tNFTA_PAYLOAD_CSUM_OFFSET          = 0x7\n\tNFTA_PAYLOAD_CSUM_FLAGS           = 0x8\n\tNFT_EXTHDR_F_PRESENT              = 0x1\n\tNFT_EXTHDR_OP_IPV6                = 0x0\n\tNFT_EXTHDR_OP_TCPOPT              = 0x1\n\tNFTA_EXTHDR_UNSPEC                = 0x0\n\tNFTA_EXTHDR_DREG                  = 0x1\n\tNFTA_EXTHDR_TYPE                  = 0x2\n\tNFTA_EXTHDR_OFFSET                = 0x3\n\tNFTA_EXTHDR_LEN                   = 0x4\n\tNFTA_EXTHDR_FLAGS                 = 0x5\n\tNFTA_EXTHDR_OP                    = 0x6\n\tNFTA_EXTHDR_SREG                  = 0x7\n\tNFT_META_LEN                      = 0x0\n\tNFT_META_PROTOCOL                 = 0x1\n\tNFT_META_PRIORITY                 = 0x2\n\tNFT_META_MARK                     = 0x3\n\tNFT_META_IIF                      = 0x4\n\tNFT_META_OIF                      = 0x5\n\tNFT_META_IIFNAME                  = 0x6\n\tNFT_META_OIFNAME                  = 0x7\n\tNFT_META_IIFTYPE                  = 0x8\n\tNFT_META_OIFTYPE                  = 0x9\n\tNFT_META_SKUID                    = 0xa\n\tNFT_META_SKGID                    = 0xb\n\tNFT_META_NFTRACE                  = 0xc\n\tNFT_META_RTCLASSID                = 0xd\n\tNFT_META_SECMARK                  = 0xe\n\tNFT_META_NFPROTO                  = 0xf\n\tNFT_META_L4PROTO                  = 0x10\n\tNFT_META_BRI_IIFNAME              = 0x11\n\tNFT_META_BRI_OIFNAME              = 0x12\n\tNFT_META_PKTTYPE                  = 0x13\n\tNFT_META_CPU                      = 0x14\n\tNFT_META_IIFGROUP                 = 0x15\n\tNFT_META_OIFGROUP                 = 0x16\n\tNFT_META_CGROUP                   = 0x17\n\tNFT_META_PRANDOM                  = 0x18\n\tNFT_RT_CLASSID                    = 0x0\n\tNFT_RT_NEXTHOP4                   = 0x1\n\tNFT_RT_NEXTHOP6                   = 0x2\n\tNFT_RT_TCPMSS                     = 0x3\n\tNFT_HASH_JENKINS                  = 0x0\n\tNFT_HASH_SYM                      = 0x1\n\tNFTA_HASH_UNSPEC                  = 0x0\n\tNFTA_HASH_SREG                    = 0x1\n\tNFTA_HASH_DREG                    = 0x2\n\tNFTA_HASH_LEN                     = 0x3\n\tNFTA_HASH_MODULUS                 = 0x4\n\tNFTA_HASH_SEED                    = 0x5\n\tNFTA_HASH_OFFSET                  = 0x6\n\tNFTA_HASH_TYPE                    = 0x7\n\tNFTA_META_UNSPEC                  = 0x0\n\tNFTA_META_DREG                    = 0x1\n\tNFTA_META_KEY                     = 0x2\n\tNFTA_META_SREG                    = 0x3\n\tNFTA_RT_UNSPEC                    = 0x0\n\tNFTA_RT_DREG                      = 0x1\n\tNFTA_RT_KEY                       = 0x2\n\tNFT_CT_STATE                      = 0x0\n\tNFT_CT_DIRECTION                  = 0x1\n\tNFT_CT_STATUS                     = 0x2\n\tNFT_CT_MARK                       = 0x3\n\tNFT_CT_SECMARK                    = 0x4\n\tNFT_CT_EXPIRATION                 = 0x5\n\tNFT_CT_HELPER                     = 0x6\n\tNFT_CT_L3PROTOCOL                 = 0x7\n\tNFT_CT_SRC                        = 0x8\n\tNFT_CT_DST                        = 0x9\n\tNFT_CT_PROTOCOL                   = 0xa\n\tNFT_CT_PROTO_SRC                  = 0xb\n\tNFT_CT_PROTO_DST                  = 0xc\n\tNFT_CT_LABELS                     = 0xd\n\tNFT_CT_PKTS                       = 0xe\n\tNFT_CT_BYTES                      = 0xf\n\tNFT_CT_AVGPKT                     = 0x10\n\tNFT_CT_ZONE                       = 0x11\n\tNFT_CT_EVENTMASK                  = 0x12\n\tNFT_CT_SRC_IP                     = 0x13\n\tNFT_CT_DST_IP                     = 0x14\n\tNFT_CT_SRC_IP6                    = 0x15\n\tNFT_CT_DST_IP6                    = 0x16\n\tNFT_CT_ID                         = 0x17\n\tNFTA_CT_UNSPEC                    = 0x0\n\tNFTA_CT_DREG                      = 0x1\n\tNFTA_CT_KEY                       = 0x2\n\tNFTA_CT_DIRECTION                 = 0x3\n\tNFTA_CT_SREG                      = 0x4\n\tNFT_LIMIT_PKTS                    = 0x0\n\tNFT_LIMIT_PKT_BYTES               = 0x1\n\tNFT_LIMIT_F_INV                   = 0x1\n\tNFTA_LIMIT_UNSPEC                 = 0x0\n\tNFTA_LIMIT_RATE                   = 0x1\n\tNFTA_LIMIT_UNIT                   = 0x2\n\tNFTA_LIMIT_BURST                  = 0x3\n\tNFTA_LIMIT_TYPE                   = 0x4\n\tNFTA_LIMIT_FLAGS                  = 0x5\n\tNFTA_LIMIT_PAD                    = 0x6\n\tNFTA_COUNTER_UNSPEC               = 0x0\n\tNFTA_COUNTER_BYTES                = 0x1\n\tNFTA_COUNTER_PACKETS              = 0x2\n\tNFTA_COUNTER_PAD                  = 0x3\n\tNFTA_LOG_UNSPEC                   = 0x0\n\tNFTA_LOG_GROUP                    = 0x1\n\tNFTA_LOG_PREFIX                   = 0x2\n\tNFTA_LOG_SNAPLEN                  = 0x3\n\tNFTA_LOG_QTHRESHOLD               = 0x4\n\tNFTA_LOG_LEVEL                    = 0x5\n\tNFTA_LOG_FLAGS                    = 0x6\n\tNFTA_QUEUE_UNSPEC                 = 0x0\n\tNFTA_QUEUE_NUM                    = 0x1\n\tNFTA_QUEUE_TOTAL                  = 0x2\n\tNFTA_QUEUE_FLAGS                  = 0x3\n\tNFTA_QUEUE_SREG_QNUM              = 0x4\n\tNFT_QUOTA_F_INV                   = 0x1\n\tNFT_QUOTA_F_DEPLETED              = 0x2\n\tNFTA_QUOTA_UNSPEC                 = 0x0\n\tNFTA_QUOTA_BYTES                  = 0x1\n\tNFTA_QUOTA_FLAGS                  = 0x2\n\tNFTA_QUOTA_PAD                    = 0x3\n\tNFTA_QUOTA_CONSUMED               = 0x4\n\tNFT_REJECT_ICMP_UNREACH           = 0x0\n\tNFT_REJECT_TCP_RST                = 0x1\n\tNFT_REJECT_ICMPX_UNREACH          = 0x2\n\tNFT_REJECT_ICMPX_NO_ROUTE         = 0x0\n\tNFT_REJECT_ICMPX_PORT_UNREACH     = 0x1\n\tNFT_REJECT_ICMPX_HOST_UNREACH     = 0x2\n\tNFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3\n\tNFTA_REJECT_UNSPEC                = 0x0\n\tNFTA_REJECT_TYPE                  = 0x1\n\tNFTA_REJECT_ICMP_CODE             = 0x2\n\tNFT_NAT_SNAT                      = 0x0\n\tNFT_NAT_DNAT                      = 0x1\n\tNFTA_NAT_UNSPEC                   = 0x0\n\tNFTA_NAT_TYPE                     = 0x1\n\tNFTA_NAT_FAMILY                   = 0x2\n\tNFTA_NAT_REG_ADDR_MIN             = 0x3\n\tNFTA_NAT_REG_ADDR_MAX             = 0x4\n\tNFTA_NAT_REG_PROTO_MIN            = 0x5\n\tNFTA_NAT_REG_PROTO_MAX            = 0x6\n\tNFTA_NAT_FLAGS                    = 0x7\n\tNFTA_MASQ_UNSPEC                  = 0x0\n\tNFTA_MASQ_FLAGS                   = 0x1\n\tNFTA_MASQ_REG_PROTO_MIN           = 0x2\n\tNFTA_MASQ_REG_PROTO_MAX           = 0x3\n\tNFTA_REDIR_UNSPEC                 = 0x0\n\tNFTA_REDIR_REG_PROTO_MIN          = 0x1\n\tNFTA_REDIR_REG_PROTO_MAX          = 0x2\n\tNFTA_REDIR_FLAGS                  = 0x3\n\tNFTA_DUP_UNSPEC                   = 0x0\n\tNFTA_DUP_SREG_ADDR                = 0x1\n\tNFTA_DUP_SREG_DEV                 = 0x2\n\tNFTA_FWD_UNSPEC                   = 0x0\n\tNFTA_FWD_SREG_DEV                 = 0x1\n\tNFTA_OBJREF_UNSPEC                = 0x0\n\tNFTA_OBJREF_IMM_TYPE              = 0x1\n\tNFTA_OBJREF_IMM_NAME              = 0x2\n\tNFTA_OBJREF_SET_SREG              = 0x3\n\tNFTA_OBJREF_SET_NAME              = 0x4\n\tNFTA_OBJREF_SET_ID                = 0x5\n\tNFTA_GEN_UNSPEC                   = 0x0\n\tNFTA_GEN_ID                       = 0x1\n\tNFTA_GEN_PROC_PID                 = 0x2\n\tNFTA_GEN_PROC_NAME                = 0x3\n\tNFTA_FIB_UNSPEC                   = 0x0\n\tNFTA_FIB_DREG                     = 0x1\n\tNFTA_FIB_RESULT                   = 0x2\n\tNFTA_FIB_FLAGS                    = 0x3\n\tNFT_FIB_RESULT_UNSPEC             = 0x0\n\tNFT_FIB_RESULT_OIF                = 0x1\n\tNFT_FIB_RESULT_OIFNAME            = 0x2\n\tNFT_FIB_RESULT_ADDRTYPE           = 0x3\n\tNFTA_FIB_F_SADDR                  = 0x1\n\tNFTA_FIB_F_DADDR                  = 0x2\n\tNFTA_FIB_F_MARK                   = 0x4\n\tNFTA_FIB_F_IIF                    = 0x8\n\tNFTA_FIB_F_OIF                    = 0x10\n\tNFTA_FIB_F_PRESENT                = 0x20\n\tNFTA_CT_HELPER_UNSPEC             = 0x0\n\tNFTA_CT_HELPER_NAME               = 0x1\n\tNFTA_CT_HELPER_L3PROTO            = 0x2\n\tNFTA_CT_HELPER_L4PROTO            = 0x3\n\tNFTA_OBJ_UNSPEC                   = 0x0\n\tNFTA_OBJ_TABLE                    = 0x1\n\tNFTA_OBJ_NAME                     = 0x2\n\tNFTA_OBJ_TYPE                     = 0x3\n\tNFTA_OBJ_DATA                     = 0x4\n\tNFTA_OBJ_USE                      = 0x5\n\tNFTA_TRACE_UNSPEC                 = 0x0\n\tNFTA_TRACE_TABLE                  = 0x1\n\tNFTA_TRACE_CHAIN                  = 0x2\n\tNFTA_TRACE_RULE_HANDLE            = 0x3\n\tNFTA_TRACE_TYPE                   = 0x4\n\tNFTA_TRACE_VERDICT                = 0x5\n\tNFTA_TRACE_ID                     = 0x6\n\tNFTA_TRACE_LL_HEADER              = 0x7\n\tNFTA_TRACE_NETWORK_HEADER         = 0x8\n\tNFTA_TRACE_TRANSPORT_HEADER       = 0x9\n\tNFTA_TRACE_IIF                    = 0xa\n\tNFTA_TRACE_IIFTYPE                = 0xb\n\tNFTA_TRACE_OIF                    = 0xc\n\tNFTA_TRACE_OIFTYPE                = 0xd\n\tNFTA_TRACE_MARK                   = 0xe\n\tNFTA_TRACE_NFPROTO                = 0xf\n\tNFTA_TRACE_POLICY                 = 0x10\n\tNFTA_TRACE_PAD                    = 0x11\n\tNFT_TRACETYPE_UNSPEC              = 0x0\n\tNFT_TRACETYPE_POLICY              = 0x1\n\tNFT_TRACETYPE_RETURN              = 0x2\n\tNFT_TRACETYPE_RULE                = 0x3\n\tNFTA_NG_UNSPEC                    = 0x0\n\tNFTA_NG_DREG                      = 0x1\n\tNFTA_NG_MODULUS                   = 0x2\n\tNFTA_NG_TYPE                      = 0x3\n\tNFTA_NG_OFFSET                    = 0x4\n\tNFT_NG_INCREMENTAL                = 0x0\n\tNFT_NG_RANDOM                     = 0x1\n)\n\nconst (\n\tNFTA_TARGET_UNSPEC = 0x0\n\tNFTA_TARGET_NAME   = 0x1\n\tNFTA_TARGET_REV    = 0x2\n\tNFTA_TARGET_INFO   = 0x3\n\tNFTA_MATCH_UNSPEC  = 0x0\n\tNFTA_MATCH_NAME    = 0x1\n\tNFTA_MATCH_REV     = 0x2\n\tNFTA_MATCH_INFO    = 0x3\n\tNFTA_COMPAT_UNSPEC = 0x0\n\tNFTA_COMPAT_NAME   = 0x1\n\tNFTA_COMPAT_REV    = 0x2\n\tNFTA_COMPAT_TYPE   = 0x3\n)\n\ntype RTCTime struct {\n\tSec   int32\n\tMin   int32\n\tHour  int32\n\tMday  int32\n\tMon   int32\n\tYear  int32\n\tWday  int32\n\tYday  int32\n\tIsdst int32\n}\n\ntype RTCWkAlrm struct {\n\tEnabled uint8\n\tPending uint8\n\tTime    RTCTime\n}\n\ntype BlkpgIoctlArg struct {\n\tOp      int32\n\tFlags   int32\n\tDatalen int32\n\tData    *byte\n}\n\nconst (\n\tBLKPG_ADD_PARTITION    = 0x1\n\tBLKPG_DEL_PARTITION    = 0x2\n\tBLKPG_RESIZE_PARTITION = 0x3\n)\n\nconst (\n\tNETNSA_NONE         = 0x0\n\tNETNSA_NSID         = 0x1\n\tNETNSA_PID          = 0x2\n\tNETNSA_FD           = 0x3\n\tNETNSA_TARGET_NSID  = 0x4\n\tNETNSA_CURRENT_NSID = 0x5\n)\n\ntype XDPRingOffset struct {\n\tProducer uint64\n\tConsumer uint64\n\tDesc     uint64\n\tFlags    uint64\n}\n\ntype XDPMmapOffsets struct {\n\tRx XDPRingOffset\n\tTx XDPRingOffset\n\tFr XDPRingOffset\n\tCr XDPRingOffset\n}\n\ntype XDPUmemReg struct {\n\tAddr            uint64\n\tLen             uint64\n\tSize            uint32\n\tHeadroom        uint32\n\tFlags           uint32\n\tTx_metadata_len uint32\n}\n\ntype XDPStatistics struct {\n\tRx_dropped               uint64\n\tRx_invalid_descs         uint64\n\tTx_invalid_descs         uint64\n\tRx_ring_full             uint64\n\tRx_fill_ring_empty_descs uint64\n\tTx_ring_empty_descs      uint64\n}\n\ntype XDPDesc struct {\n\tAddr    uint64\n\tLen     uint32\n\tOptions uint32\n}\n\nconst (\n\tNCSI_CMD_UNSPEC                 = 0x0\n\tNCSI_CMD_PKG_INFO               = 0x1\n\tNCSI_CMD_SET_INTERFACE          = 0x2\n\tNCSI_CMD_CLEAR_INTERFACE        = 0x3\n\tNCSI_ATTR_UNSPEC                = 0x0\n\tNCSI_ATTR_IFINDEX               = 0x1\n\tNCSI_ATTR_PACKAGE_LIST          = 0x2\n\tNCSI_ATTR_PACKAGE_ID            = 0x3\n\tNCSI_ATTR_CHANNEL_ID            = 0x4\n\tNCSI_PKG_ATTR_UNSPEC            = 0x0\n\tNCSI_PKG_ATTR                   = 0x1\n\tNCSI_PKG_ATTR_ID                = 0x2\n\tNCSI_PKG_ATTR_FORCED            = 0x3\n\tNCSI_PKG_ATTR_CHANNEL_LIST      = 0x4\n\tNCSI_CHANNEL_ATTR_UNSPEC        = 0x0\n\tNCSI_CHANNEL_ATTR               = 0x1\n\tNCSI_CHANNEL_ATTR_ID            = 0x2\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4\n\tNCSI_CHANNEL_ATTR_VERSION_STR   = 0x5\n\tNCSI_CHANNEL_ATTR_LINK_STATE    = 0x6\n\tNCSI_CHANNEL_ATTR_ACTIVE        = 0x7\n\tNCSI_CHANNEL_ATTR_FORCED        = 0x8\n\tNCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9\n\tNCSI_CHANNEL_ATTR_VLAN_ID       = 0xa\n)\n\ntype ScmTimestamping struct {\n\tTs [3]Timespec\n}\n\nconst (\n\tSOF_TIMESTAMPING_TX_HARDWARE  = 0x1\n\tSOF_TIMESTAMPING_TX_SOFTWARE  = 0x2\n\tSOF_TIMESTAMPING_RX_HARDWARE  = 0x4\n\tSOF_TIMESTAMPING_RX_SOFTWARE  = 0x8\n\tSOF_TIMESTAMPING_SOFTWARE     = 0x10\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 0x20\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 0x40\n\tSOF_TIMESTAMPING_OPT_ID       = 0x80\n\tSOF_TIMESTAMPING_TX_SCHED     = 0x100\n\tSOF_TIMESTAMPING_TX_ACK       = 0x200\n\tSOF_TIMESTAMPING_OPT_CMSG     = 0x400\n\tSOF_TIMESTAMPING_OPT_TSONLY   = 0x800\n\tSOF_TIMESTAMPING_OPT_STATS    = 0x1000\n\tSOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000\n\tSOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000\n\tSOF_TIMESTAMPING_BIND_PHC     = 0x8000\n\tSOF_TIMESTAMPING_OPT_ID_TCP   = 0x10000\n\n\tSOF_TIMESTAMPING_LAST = 0x40000\n\tSOF_TIMESTAMPING_MASK = 0x7ffff\n\n\tSCM_TSTAMP_SND   = 0x0\n\tSCM_TSTAMP_SCHED = 0x1\n\tSCM_TSTAMP_ACK   = 0x2\n)\n\ntype SockExtendedErr struct {\n\tErrno  uint32\n\tOrigin uint8\n\tType   uint8\n\tCode   uint8\n\tPad    uint8\n\tInfo   uint32\n\tData   uint32\n}\n\ntype FanotifyEventMetadata struct {\n\tEvent_len    uint32\n\tVers         uint8\n\tReserved     uint8\n\tMetadata_len uint16\n\tMask         uint64\n\tFd           int32\n\tPid          int32\n}\n\ntype FanotifyResponse struct {\n\tFd       int32\n\tResponse uint32\n}\n\nconst (\n\tCRYPTO_MSG_BASE      = 0x10\n\tCRYPTO_MSG_NEWALG    = 0x10\n\tCRYPTO_MSG_DELALG    = 0x11\n\tCRYPTO_MSG_UPDATEALG = 0x12\n\tCRYPTO_MSG_GETALG    = 0x13\n\tCRYPTO_MSG_DELRNG    = 0x14\n\tCRYPTO_MSG_GETSTAT   = 0x15\n)\n\nconst (\n\tCRYPTOCFGA_UNSPEC           = 0x0\n\tCRYPTOCFGA_PRIORITY_VAL     = 0x1\n\tCRYPTOCFGA_REPORT_LARVAL    = 0x2\n\tCRYPTOCFGA_REPORT_HASH      = 0x3\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 0x4\n\tCRYPTOCFGA_REPORT_AEAD      = 0x5\n\tCRYPTOCFGA_REPORT_COMPRESS  = 0x6\n\tCRYPTOCFGA_REPORT_RNG       = 0x7\n\tCRYPTOCFGA_REPORT_CIPHER    = 0x8\n\tCRYPTOCFGA_REPORT_AKCIPHER  = 0x9\n\tCRYPTOCFGA_REPORT_KPP       = 0xa\n\tCRYPTOCFGA_REPORT_ACOMP     = 0xb\n\tCRYPTOCFGA_STAT_LARVAL      = 0xc\n\tCRYPTOCFGA_STAT_HASH        = 0xd\n\tCRYPTOCFGA_STAT_BLKCIPHER   = 0xe\n\tCRYPTOCFGA_STAT_AEAD        = 0xf\n\tCRYPTOCFGA_STAT_COMPRESS    = 0x10\n\tCRYPTOCFGA_STAT_RNG         = 0x11\n\tCRYPTOCFGA_STAT_CIPHER      = 0x12\n\tCRYPTOCFGA_STAT_AKCIPHER    = 0x13\n\tCRYPTOCFGA_STAT_KPP         = 0x14\n\tCRYPTOCFGA_STAT_ACOMP       = 0x15\n)\n\nconst (\n\tBPF_REG_0                                  = 0x0\n\tBPF_REG_1                                  = 0x1\n\tBPF_REG_2                                  = 0x2\n\tBPF_REG_3                                  = 0x3\n\tBPF_REG_4                                  = 0x4\n\tBPF_REG_5                                  = 0x5\n\tBPF_REG_6                                  = 0x6\n\tBPF_REG_7                                  = 0x7\n\tBPF_REG_8                                  = 0x8\n\tBPF_REG_9                                  = 0x9\n\tBPF_REG_10                                 = 0xa\n\tBPF_CGROUP_ITER_ORDER_UNSPEC               = 0x0\n\tBPF_CGROUP_ITER_SELF_ONLY                  = 0x1\n\tBPF_CGROUP_ITER_DESCENDANTS_PRE            = 0x2\n\tBPF_CGROUP_ITER_DESCENDANTS_POST           = 0x3\n\tBPF_CGROUP_ITER_ANCESTORS_UP               = 0x4\n\tBPF_MAP_CREATE                             = 0x0\n\tBPF_MAP_LOOKUP_ELEM                        = 0x1\n\tBPF_MAP_UPDATE_ELEM                        = 0x2\n\tBPF_MAP_DELETE_ELEM                        = 0x3\n\tBPF_MAP_GET_NEXT_KEY                       = 0x4\n\tBPF_PROG_LOAD                              = 0x5\n\tBPF_OBJ_PIN                                = 0x6\n\tBPF_OBJ_GET                                = 0x7\n\tBPF_PROG_ATTACH                            = 0x8\n\tBPF_PROG_DETACH                            = 0x9\n\tBPF_PROG_TEST_RUN                          = 0xa\n\tBPF_PROG_RUN                               = 0xa\n\tBPF_PROG_GET_NEXT_ID                       = 0xb\n\tBPF_MAP_GET_NEXT_ID                        = 0xc\n\tBPF_PROG_GET_FD_BY_ID                      = 0xd\n\tBPF_MAP_GET_FD_BY_ID                       = 0xe\n\tBPF_OBJ_GET_INFO_BY_FD                     = 0xf\n\tBPF_PROG_QUERY                             = 0x10\n\tBPF_RAW_TRACEPOINT_OPEN                    = 0x11\n\tBPF_BTF_LOAD                               = 0x12\n\tBPF_BTF_GET_FD_BY_ID                       = 0x13\n\tBPF_TASK_FD_QUERY                          = 0x14\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM             = 0x15\n\tBPF_MAP_FREEZE                             = 0x16\n\tBPF_BTF_GET_NEXT_ID                        = 0x17\n\tBPF_MAP_LOOKUP_BATCH                       = 0x18\n\tBPF_MAP_LOOKUP_AND_DELETE_BATCH            = 0x19\n\tBPF_MAP_UPDATE_BATCH                       = 0x1a\n\tBPF_MAP_DELETE_BATCH                       = 0x1b\n\tBPF_LINK_CREATE                            = 0x1c\n\tBPF_LINK_UPDATE                            = 0x1d\n\tBPF_LINK_GET_FD_BY_ID                      = 0x1e\n\tBPF_LINK_GET_NEXT_ID                       = 0x1f\n\tBPF_ENABLE_STATS                           = 0x20\n\tBPF_ITER_CREATE                            = 0x21\n\tBPF_LINK_DETACH                            = 0x22\n\tBPF_PROG_BIND_MAP                          = 0x23\n\tBPF_MAP_TYPE_UNSPEC                        = 0x0\n\tBPF_MAP_TYPE_HASH                          = 0x1\n\tBPF_MAP_TYPE_ARRAY                         = 0x2\n\tBPF_MAP_TYPE_PROG_ARRAY                    = 0x3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY              = 0x4\n\tBPF_MAP_TYPE_PERCPU_HASH                   = 0x5\n\tBPF_MAP_TYPE_PERCPU_ARRAY                  = 0x6\n\tBPF_MAP_TYPE_STACK_TRACE                   = 0x7\n\tBPF_MAP_TYPE_CGROUP_ARRAY                  = 0x8\n\tBPF_MAP_TYPE_LRU_HASH                      = 0x9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH               = 0xa\n\tBPF_MAP_TYPE_LPM_TRIE                      = 0xb\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS                 = 0xc\n\tBPF_MAP_TYPE_HASH_OF_MAPS                  = 0xd\n\tBPF_MAP_TYPE_DEVMAP                        = 0xe\n\tBPF_MAP_TYPE_SOCKMAP                       = 0xf\n\tBPF_MAP_TYPE_CPUMAP                        = 0x10\n\tBPF_MAP_TYPE_XSKMAP                        = 0x11\n\tBPF_MAP_TYPE_SOCKHASH                      = 0x12\n\tBPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED     = 0x13\n\tBPF_MAP_TYPE_CGROUP_STORAGE                = 0x13\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY           = 0x14\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE         = 0x15\n\tBPF_MAP_TYPE_QUEUE                         = 0x16\n\tBPF_MAP_TYPE_STACK                         = 0x17\n\tBPF_MAP_TYPE_SK_STORAGE                    = 0x18\n\tBPF_MAP_TYPE_DEVMAP_HASH                   = 0x19\n\tBPF_MAP_TYPE_STRUCT_OPS                    = 0x1a\n\tBPF_MAP_TYPE_RINGBUF                       = 0x1b\n\tBPF_MAP_TYPE_INODE_STORAGE                 = 0x1c\n\tBPF_MAP_TYPE_TASK_STORAGE                  = 0x1d\n\tBPF_MAP_TYPE_BLOOM_FILTER                  = 0x1e\n\tBPF_MAP_TYPE_USER_RINGBUF                  = 0x1f\n\tBPF_MAP_TYPE_CGRP_STORAGE                  = 0x20\n\tBPF_PROG_TYPE_UNSPEC                       = 0x0\n\tBPF_PROG_TYPE_SOCKET_FILTER                = 0x1\n\tBPF_PROG_TYPE_KPROBE                       = 0x2\n\tBPF_PROG_TYPE_SCHED_CLS                    = 0x3\n\tBPF_PROG_TYPE_SCHED_ACT                    = 0x4\n\tBPF_PROG_TYPE_TRACEPOINT                   = 0x5\n\tBPF_PROG_TYPE_XDP                          = 0x6\n\tBPF_PROG_TYPE_PERF_EVENT                   = 0x7\n\tBPF_PROG_TYPE_CGROUP_SKB                   = 0x8\n\tBPF_PROG_TYPE_CGROUP_SOCK                  = 0x9\n\tBPF_PROG_TYPE_LWT_IN                       = 0xa\n\tBPF_PROG_TYPE_LWT_OUT                      = 0xb\n\tBPF_PROG_TYPE_LWT_XMIT                     = 0xc\n\tBPF_PROG_TYPE_SOCK_OPS                     = 0xd\n\tBPF_PROG_TYPE_SK_SKB                       = 0xe\n\tBPF_PROG_TYPE_CGROUP_DEVICE                = 0xf\n\tBPF_PROG_TYPE_SK_MSG                       = 0x10\n\tBPF_PROG_TYPE_RAW_TRACEPOINT               = 0x11\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR             = 0x12\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL                = 0x13\n\tBPF_PROG_TYPE_LIRC_MODE2                   = 0x14\n\tBPF_PROG_TYPE_SK_REUSEPORT                 = 0x15\n\tBPF_PROG_TYPE_FLOW_DISSECTOR               = 0x16\n\tBPF_PROG_TYPE_CGROUP_SYSCTL                = 0x17\n\tBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE      = 0x18\n\tBPF_PROG_TYPE_CGROUP_SOCKOPT               = 0x19\n\tBPF_PROG_TYPE_TRACING                      = 0x1a\n\tBPF_PROG_TYPE_STRUCT_OPS                   = 0x1b\n\tBPF_PROG_TYPE_EXT                          = 0x1c\n\tBPF_PROG_TYPE_LSM                          = 0x1d\n\tBPF_PROG_TYPE_SK_LOOKUP                    = 0x1e\n\tBPF_PROG_TYPE_SYSCALL                      = 0x1f\n\tBPF_PROG_TYPE_NETFILTER                    = 0x20\n\tBPF_CGROUP_INET_INGRESS                    = 0x0\n\tBPF_CGROUP_INET_EGRESS                     = 0x1\n\tBPF_CGROUP_INET_SOCK_CREATE                = 0x2\n\tBPF_CGROUP_SOCK_OPS                        = 0x3\n\tBPF_SK_SKB_STREAM_PARSER                   = 0x4\n\tBPF_SK_SKB_STREAM_VERDICT                  = 0x5\n\tBPF_CGROUP_DEVICE                          = 0x6\n\tBPF_SK_MSG_VERDICT                         = 0x7\n\tBPF_CGROUP_INET4_BIND                      = 0x8\n\tBPF_CGROUP_INET6_BIND                      = 0x9\n\tBPF_CGROUP_INET4_CONNECT                   = 0xa\n\tBPF_CGROUP_INET6_CONNECT                   = 0xb\n\tBPF_CGROUP_INET4_POST_BIND                 = 0xc\n\tBPF_CGROUP_INET6_POST_BIND                 = 0xd\n\tBPF_CGROUP_UDP4_SENDMSG                    = 0xe\n\tBPF_CGROUP_UDP6_SENDMSG                    = 0xf\n\tBPF_LIRC_MODE2                             = 0x10\n\tBPF_FLOW_DISSECTOR                         = 0x11\n\tBPF_CGROUP_SYSCTL                          = 0x12\n\tBPF_CGROUP_UDP4_RECVMSG                    = 0x13\n\tBPF_CGROUP_UDP6_RECVMSG                    = 0x14\n\tBPF_CGROUP_GETSOCKOPT                      = 0x15\n\tBPF_CGROUP_SETSOCKOPT                      = 0x16\n\tBPF_TRACE_RAW_TP                           = 0x17\n\tBPF_TRACE_FENTRY                           = 0x18\n\tBPF_TRACE_FEXIT                            = 0x19\n\tBPF_MODIFY_RETURN                          = 0x1a\n\tBPF_LSM_MAC                                = 0x1b\n\tBPF_TRACE_ITER                             = 0x1c\n\tBPF_CGROUP_INET4_GETPEERNAME               = 0x1d\n\tBPF_CGROUP_INET6_GETPEERNAME               = 0x1e\n\tBPF_CGROUP_INET4_GETSOCKNAME               = 0x1f\n\tBPF_CGROUP_INET6_GETSOCKNAME               = 0x20\n\tBPF_XDP_DEVMAP                             = 0x21\n\tBPF_CGROUP_INET_SOCK_RELEASE               = 0x22\n\tBPF_XDP_CPUMAP                             = 0x23\n\tBPF_SK_LOOKUP                              = 0x24\n\tBPF_XDP                                    = 0x25\n\tBPF_SK_SKB_VERDICT                         = 0x26\n\tBPF_SK_REUSEPORT_SELECT                    = 0x27\n\tBPF_SK_REUSEPORT_SELECT_OR_MIGRATE         = 0x28\n\tBPF_PERF_EVENT                             = 0x29\n\tBPF_TRACE_KPROBE_MULTI                     = 0x2a\n\tBPF_LSM_CGROUP                             = 0x2b\n\tBPF_STRUCT_OPS                             = 0x2c\n\tBPF_NETFILTER                              = 0x2d\n\tBPF_TCX_INGRESS                            = 0x2e\n\tBPF_TCX_EGRESS                             = 0x2f\n\tBPF_TRACE_UPROBE_MULTI                     = 0x30\n\tBPF_LINK_TYPE_UNSPEC                       = 0x0\n\tBPF_LINK_TYPE_RAW_TRACEPOINT               = 0x1\n\tBPF_LINK_TYPE_TRACING                      = 0x2\n\tBPF_LINK_TYPE_CGROUP                       = 0x3\n\tBPF_LINK_TYPE_ITER                         = 0x4\n\tBPF_LINK_TYPE_NETNS                        = 0x5\n\tBPF_LINK_TYPE_XDP                          = 0x6\n\tBPF_LINK_TYPE_PERF_EVENT                   = 0x7\n\tBPF_LINK_TYPE_KPROBE_MULTI                 = 0x8\n\tBPF_LINK_TYPE_STRUCT_OPS                   = 0x9\n\tBPF_LINK_TYPE_NETFILTER                    = 0xa\n\tBPF_LINK_TYPE_TCX                          = 0xb\n\tBPF_LINK_TYPE_UPROBE_MULTI                 = 0xc\n\tBPF_PERF_EVENT_UNSPEC                      = 0x0\n\tBPF_PERF_EVENT_UPROBE                      = 0x1\n\tBPF_PERF_EVENT_URETPROBE                   = 0x2\n\tBPF_PERF_EVENT_KPROBE                      = 0x3\n\tBPF_PERF_EVENT_KRETPROBE                   = 0x4\n\tBPF_PERF_EVENT_TRACEPOINT                  = 0x5\n\tBPF_PERF_EVENT_EVENT                       = 0x6\n\tBPF_F_KPROBE_MULTI_RETURN                  = 0x1\n\tBPF_F_UPROBE_MULTI_RETURN                  = 0x1\n\tBPF_ANY                                    = 0x0\n\tBPF_NOEXIST                                = 0x1\n\tBPF_EXIST                                  = 0x2\n\tBPF_F_LOCK                                 = 0x4\n\tBPF_F_NO_PREALLOC                          = 0x1\n\tBPF_F_NO_COMMON_LRU                        = 0x2\n\tBPF_F_NUMA_NODE                            = 0x4\n\tBPF_F_RDONLY                               = 0x8\n\tBPF_F_WRONLY                               = 0x10\n\tBPF_F_STACK_BUILD_ID                       = 0x20\n\tBPF_F_ZERO_SEED                            = 0x40\n\tBPF_F_RDONLY_PROG                          = 0x80\n\tBPF_F_WRONLY_PROG                          = 0x100\n\tBPF_F_CLONE                                = 0x200\n\tBPF_F_MMAPABLE                             = 0x400\n\tBPF_F_PRESERVE_ELEMS                       = 0x800\n\tBPF_F_INNER_MAP                            = 0x1000\n\tBPF_F_LINK                                 = 0x2000\n\tBPF_F_PATH_FD                              = 0x4000\n\tBPF_STATS_RUN_TIME                         = 0x0\n\tBPF_STACK_BUILD_ID_EMPTY                   = 0x0\n\tBPF_STACK_BUILD_ID_VALID                   = 0x1\n\tBPF_STACK_BUILD_ID_IP                      = 0x2\n\tBPF_F_RECOMPUTE_CSUM                       = 0x1\n\tBPF_F_INVALIDATE_HASH                      = 0x2\n\tBPF_F_HDR_FIELD_MASK                       = 0xf\n\tBPF_F_PSEUDO_HDR                           = 0x10\n\tBPF_F_MARK_MANGLED_0                       = 0x20\n\tBPF_F_MARK_ENFORCE                         = 0x40\n\tBPF_F_INGRESS                              = 0x1\n\tBPF_F_TUNINFO_IPV6                         = 0x1\n\tBPF_F_SKIP_FIELD_MASK                      = 0xff\n\tBPF_F_USER_STACK                           = 0x100\n\tBPF_F_FAST_STACK_CMP                       = 0x200\n\tBPF_F_REUSE_STACKID                        = 0x400\n\tBPF_F_USER_BUILD_ID                        = 0x800\n\tBPF_F_ZERO_CSUM_TX                         = 0x2\n\tBPF_F_DONT_FRAGMENT                        = 0x4\n\tBPF_F_SEQ_NUMBER                           = 0x8\n\tBPF_F_NO_TUNNEL_KEY                        = 0x10\n\tBPF_F_TUNINFO_FLAGS                        = 0x10\n\tBPF_F_INDEX_MASK                           = 0xffffffff\n\tBPF_F_CURRENT_CPU                          = 0xffffffff\n\tBPF_F_CTXLEN_MASK                          = 0xfffff00000000\n\tBPF_F_CURRENT_NETNS                        = -0x1\n\tBPF_CSUM_LEVEL_QUERY                       = 0x0\n\tBPF_CSUM_LEVEL_INC                         = 0x1\n\tBPF_CSUM_LEVEL_DEC                         = 0x2\n\tBPF_CSUM_LEVEL_RESET                       = 0x3\n\tBPF_F_ADJ_ROOM_FIXED_GSO                   = 0x1\n\tBPF_F_ADJ_ROOM_ENCAP_L3_IPV4               = 0x2\n\tBPF_F_ADJ_ROOM_ENCAP_L3_IPV6               = 0x4\n\tBPF_F_ADJ_ROOM_ENCAP_L4_GRE                = 0x8\n\tBPF_F_ADJ_ROOM_ENCAP_L4_UDP                = 0x10\n\tBPF_F_ADJ_ROOM_NO_CSUM_RESET               = 0x20\n\tBPF_F_ADJ_ROOM_ENCAP_L2_ETH                = 0x40\n\tBPF_F_ADJ_ROOM_DECAP_L3_IPV4               = 0x80\n\tBPF_F_ADJ_ROOM_DECAP_L3_IPV6               = 0x100\n\tBPF_ADJ_ROOM_ENCAP_L2_MASK                 = 0xff\n\tBPF_ADJ_ROOM_ENCAP_L2_SHIFT                = 0x38\n\tBPF_F_SYSCTL_BASE_NAME                     = 0x1\n\tBPF_LOCAL_STORAGE_GET_F_CREATE             = 0x1\n\tBPF_SK_STORAGE_GET_F_CREATE                = 0x1\n\tBPF_F_GET_BRANCH_RECORDS_SIZE              = 0x1\n\tBPF_RB_NO_WAKEUP                           = 0x1\n\tBPF_RB_FORCE_WAKEUP                        = 0x2\n\tBPF_RB_AVAIL_DATA                          = 0x0\n\tBPF_RB_RING_SIZE                           = 0x1\n\tBPF_RB_CONS_POS                            = 0x2\n\tBPF_RB_PROD_POS                            = 0x3\n\tBPF_RINGBUF_BUSY_BIT                       = 0x80000000\n\tBPF_RINGBUF_DISCARD_BIT                    = 0x40000000\n\tBPF_RINGBUF_HDR_SZ                         = 0x8\n\tBPF_SK_LOOKUP_F_REPLACE                    = 0x1\n\tBPF_SK_LOOKUP_F_NO_REUSEPORT               = 0x2\n\tBPF_ADJ_ROOM_NET                           = 0x0\n\tBPF_ADJ_ROOM_MAC                           = 0x1\n\tBPF_HDR_START_MAC                          = 0x0\n\tBPF_HDR_START_NET                          = 0x1\n\tBPF_LWT_ENCAP_SEG6                         = 0x0\n\tBPF_LWT_ENCAP_SEG6_INLINE                  = 0x1\n\tBPF_LWT_ENCAP_IP                           = 0x2\n\tBPF_F_BPRM_SECUREEXEC                      = 0x1\n\tBPF_F_BROADCAST                            = 0x8\n\tBPF_F_EXCLUDE_INGRESS                      = 0x10\n\tBPF_SKB_TSTAMP_UNSPEC                      = 0x0\n\tBPF_SKB_TSTAMP_DELIVERY_MONO               = 0x1\n\tBPF_OK                                     = 0x0\n\tBPF_DROP                                   = 0x2\n\tBPF_REDIRECT                               = 0x7\n\tBPF_LWT_REROUTE                            = 0x80\n\tBPF_FLOW_DISSECTOR_CONTINUE                = 0x81\n\tBPF_SOCK_OPS_RTO_CB_FLAG                   = 0x1\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG               = 0x2\n\tBPF_SOCK_OPS_STATE_CB_FLAG                 = 0x4\n\tBPF_SOCK_OPS_RTT_CB_FLAG                   = 0x8\n\tBPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG     = 0x10\n\tBPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 0x20\n\tBPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG         = 0x40\n\tBPF_SOCK_OPS_ALL_CB_FLAGS                  = 0x7f\n\tBPF_SOCK_OPS_VOID                          = 0x0\n\tBPF_SOCK_OPS_TIMEOUT_INIT                  = 0x1\n\tBPF_SOCK_OPS_RWND_INIT                     = 0x2\n\tBPF_SOCK_OPS_TCP_CONNECT_CB                = 0x3\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB         = 0x4\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB        = 0x5\n\tBPF_SOCK_OPS_NEEDS_ECN                     = 0x6\n\tBPF_SOCK_OPS_BASE_RTT                      = 0x7\n\tBPF_SOCK_OPS_RTO_CB                        = 0x8\n\tBPF_SOCK_OPS_RETRANS_CB                    = 0x9\n\tBPF_SOCK_OPS_STATE_CB                      = 0xa\n\tBPF_SOCK_OPS_TCP_LISTEN_CB                 = 0xb\n\tBPF_SOCK_OPS_RTT_CB                        = 0xc\n\tBPF_SOCK_OPS_PARSE_HDR_OPT_CB              = 0xd\n\tBPF_SOCK_OPS_HDR_OPT_LEN_CB                = 0xe\n\tBPF_SOCK_OPS_WRITE_HDR_OPT_CB              = 0xf\n\tBPF_TCP_ESTABLISHED                        = 0x1\n\tBPF_TCP_SYN_SENT                           = 0x2\n\tBPF_TCP_SYN_RECV                           = 0x3\n\tBPF_TCP_FIN_WAIT1                          = 0x4\n\tBPF_TCP_FIN_WAIT2                          = 0x5\n\tBPF_TCP_TIME_WAIT                          = 0x6\n\tBPF_TCP_CLOSE                              = 0x7\n\tBPF_TCP_CLOSE_WAIT                         = 0x8\n\tBPF_TCP_LAST_ACK                           = 0x9\n\tBPF_TCP_LISTEN                             = 0xa\n\tBPF_TCP_CLOSING                            = 0xb\n\tBPF_TCP_NEW_SYN_RECV                       = 0xc\n\tBPF_TCP_MAX_STATES                         = 0xe\n\tTCP_BPF_IW                                 = 0x3e9\n\tTCP_BPF_SNDCWND_CLAMP                      = 0x3ea\n\tTCP_BPF_DELACK_MAX                         = 0x3eb\n\tTCP_BPF_RTO_MIN                            = 0x3ec\n\tTCP_BPF_SYN                                = 0x3ed\n\tTCP_BPF_SYN_IP                             = 0x3ee\n\tTCP_BPF_SYN_MAC                            = 0x3ef\n\tBPF_LOAD_HDR_OPT_TCP_SYN                   = 0x1\n\tBPF_WRITE_HDR_TCP_CURRENT_MSS              = 0x1\n\tBPF_WRITE_HDR_TCP_SYNACK_COOKIE            = 0x2\n\tBPF_DEVCG_ACC_MKNOD                        = 0x1\n\tBPF_DEVCG_ACC_READ                         = 0x2\n\tBPF_DEVCG_ACC_WRITE                        = 0x4\n\tBPF_DEVCG_DEV_BLOCK                        = 0x1\n\tBPF_DEVCG_DEV_CHAR                         = 0x2\n\tBPF_FIB_LOOKUP_DIRECT                      = 0x1\n\tBPF_FIB_LOOKUP_OUTPUT                      = 0x2\n\tBPF_FIB_LOOKUP_SKIP_NEIGH                  = 0x4\n\tBPF_FIB_LOOKUP_TBID                        = 0x8\n\tBPF_FIB_LKUP_RET_SUCCESS                   = 0x0\n\tBPF_FIB_LKUP_RET_BLACKHOLE                 = 0x1\n\tBPF_FIB_LKUP_RET_UNREACHABLE               = 0x2\n\tBPF_FIB_LKUP_RET_PROHIBIT                  = 0x3\n\tBPF_FIB_LKUP_RET_NOT_FWDED                 = 0x4\n\tBPF_FIB_LKUP_RET_FWD_DISABLED              = 0x5\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT                = 0x6\n\tBPF_FIB_LKUP_RET_NO_NEIGH                  = 0x7\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED               = 0x8\n\tBPF_MTU_CHK_SEGS                           = 0x1\n\tBPF_MTU_CHK_RET_SUCCESS                    = 0x0\n\tBPF_MTU_CHK_RET_FRAG_NEEDED                = 0x1\n\tBPF_MTU_CHK_RET_SEGS_TOOBIG                = 0x2\n\tBPF_FD_TYPE_RAW_TRACEPOINT                 = 0x0\n\tBPF_FD_TYPE_TRACEPOINT                     = 0x1\n\tBPF_FD_TYPE_KPROBE                         = 0x2\n\tBPF_FD_TYPE_KRETPROBE                      = 0x3\n\tBPF_FD_TYPE_UPROBE                         = 0x4\n\tBPF_FD_TYPE_URETPROBE                      = 0x5\n\tBPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG        = 0x1\n\tBPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL    = 0x2\n\tBPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP         = 0x4\n\tBPF_CORE_FIELD_BYTE_OFFSET                 = 0x0\n\tBPF_CORE_FIELD_BYTE_SIZE                   = 0x1\n\tBPF_CORE_FIELD_EXISTS                      = 0x2\n\tBPF_CORE_FIELD_SIGNED                      = 0x3\n\tBPF_CORE_FIELD_LSHIFT_U64                  = 0x4\n\tBPF_CORE_FIELD_RSHIFT_U64                  = 0x5\n\tBPF_CORE_TYPE_ID_LOCAL                     = 0x6\n\tBPF_CORE_TYPE_ID_TARGET                    = 0x7\n\tBPF_CORE_TYPE_EXISTS                       = 0x8\n\tBPF_CORE_TYPE_SIZE                         = 0x9\n\tBPF_CORE_ENUMVAL_EXISTS                    = 0xa\n\tBPF_CORE_ENUMVAL_VALUE                     = 0xb\n\tBPF_CORE_TYPE_MATCHES                      = 0xc\n\tBPF_F_TIMER_ABS                            = 0x1\n)\n\nconst (\n\tTCA_UNSPEC            = 0x0\n\tTCA_KIND              = 0x1\n\tTCA_OPTIONS           = 0x2\n\tTCA_STATS             = 0x3\n\tTCA_XSTATS            = 0x4\n\tTCA_RATE              = 0x5\n\tTCA_FCNT              = 0x6\n\tTCA_STATS2            = 0x7\n\tTCA_STAB              = 0x8\n\tTCA_PAD               = 0x9\n\tTCA_DUMP_INVISIBLE    = 0xa\n\tTCA_CHAIN             = 0xb\n\tTCA_HW_OFFLOAD        = 0xc\n\tTCA_INGRESS_BLOCK     = 0xd\n\tTCA_EGRESS_BLOCK      = 0xe\n\tTCA_DUMP_FLAGS        = 0xf\n\tTCA_EXT_WARN_MSG      = 0x10\n\tRTNLGRP_NONE          = 0x0\n\tRTNLGRP_LINK          = 0x1\n\tRTNLGRP_NOTIFY        = 0x2\n\tRTNLGRP_NEIGH         = 0x3\n\tRTNLGRP_TC            = 0x4\n\tRTNLGRP_IPV4_IFADDR   = 0x5\n\tRTNLGRP_IPV4_MROUTE   = 0x6\n\tRTNLGRP_IPV4_ROUTE    = 0x7\n\tRTNLGRP_IPV4_RULE     = 0x8\n\tRTNLGRP_IPV6_IFADDR   = 0x9\n\tRTNLGRP_IPV6_MROUTE   = 0xa\n\tRTNLGRP_IPV6_ROUTE    = 0xb\n\tRTNLGRP_IPV6_IFINFO   = 0xc\n\tRTNLGRP_DECnet_IFADDR = 0xd\n\tRTNLGRP_NOP2          = 0xe\n\tRTNLGRP_DECnet_ROUTE  = 0xf\n\tRTNLGRP_DECnet_RULE   = 0x10\n\tRTNLGRP_NOP4          = 0x11\n\tRTNLGRP_IPV6_PREFIX   = 0x12\n\tRTNLGRP_IPV6_RULE     = 0x13\n\tRTNLGRP_ND_USEROPT    = 0x14\n\tRTNLGRP_PHONET_IFADDR = 0x15\n\tRTNLGRP_PHONET_ROUTE  = 0x16\n\tRTNLGRP_DCB           = 0x17\n\tRTNLGRP_IPV4_NETCONF  = 0x18\n\tRTNLGRP_IPV6_NETCONF  = 0x19\n\tRTNLGRP_MDB           = 0x1a\n\tRTNLGRP_MPLS_ROUTE    = 0x1b\n\tRTNLGRP_NSID          = 0x1c\n\tRTNLGRP_MPLS_NETCONF  = 0x1d\n\tRTNLGRP_IPV4_MROUTE_R = 0x1e\n\tRTNLGRP_IPV6_MROUTE_R = 0x1f\n\tRTNLGRP_NEXTHOP       = 0x20\n\tRTNLGRP_BRVLAN        = 0x21\n\tRTNLGRP_MCTP_IFADDR   = 0x22\n\tRTNLGRP_TUNNEL        = 0x23\n\tRTNLGRP_STATS         = 0x24\n\tRTNLGRP_IPV4_MCADDR   = 0x25\n\tRTNLGRP_IPV6_MCADDR   = 0x26\n\tRTNLGRP_IPV6_ACADDR   = 0x27\n\tTCA_ROOT_UNSPEC       = 0x0\n\tTCA_ROOT_TAB          = 0x1\n\tTCA_ROOT_FLAGS        = 0x2\n\tTCA_ROOT_COUNT        = 0x3\n\tTCA_ROOT_TIME_DELTA   = 0x4\n\tTCA_ROOT_EXT_WARN_MSG = 0x5\n)\n\ntype CapUserHeader struct {\n\tVersion uint32\n\tPid     int32\n}\n\ntype CapUserData struct {\n\tEffective   uint32\n\tPermitted   uint32\n\tInheritable uint32\n}\n\nconst (\n\tLINUX_CAPABILITY_VERSION_1 = 0x19980330\n\tLINUX_CAPABILITY_VERSION_2 = 0x20071026\n\tLINUX_CAPABILITY_VERSION_3 = 0x20080522\n)\n\nconst (\n\tLO_FLAGS_READ_ONLY = 0x1\n\tLO_FLAGS_AUTOCLEAR = 0x4\n\tLO_FLAGS_PARTSCAN  = 0x8\n\tLO_FLAGS_DIRECT_IO = 0x10\n)\n\ntype LoopInfo64 struct {\n\tDevice           uint64\n\tInode            uint64\n\tRdevice          uint64\n\tOffset           uint64\n\tSizelimit        uint64\n\tNumber           uint32\n\tEncrypt_type     uint32\n\tEncrypt_key_size uint32\n\tFlags            uint32\n\tFile_name        [64]uint8\n\tCrypt_name       [64]uint8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint64\n}\ntype LoopConfig struct {\n\tFd   uint32\n\tSize uint32\n\tInfo LoopInfo64\n\t_    [8]uint64\n}\n\ntype TIPCSocketAddr struct {\n\tRef  uint32\n\tNode uint32\n}\n\ntype TIPCServiceRange struct {\n\tType  uint32\n\tLower uint32\n\tUpper uint32\n}\n\ntype TIPCServiceName struct {\n\tType     uint32\n\tInstance uint32\n\tDomain   uint32\n}\n\ntype TIPCEvent struct {\n\tEvent uint32\n\tLower uint32\n\tUpper uint32\n\tPort  TIPCSocketAddr\n\tS     TIPCSubscr\n}\n\ntype TIPCGroupReq struct {\n\tType     uint32\n\tInstance uint32\n\tScope    uint32\n\tFlags    uint32\n}\n\nconst (\n\tTIPC_CLUSTER_SCOPE = 0x2\n\tTIPC_NODE_SCOPE    = 0x3\n)\n\nconst (\n\tSYSLOG_ACTION_CLOSE         = 0\n\tSYSLOG_ACTION_OPEN          = 1\n\tSYSLOG_ACTION_READ          = 2\n\tSYSLOG_ACTION_READ_ALL      = 3\n\tSYSLOG_ACTION_READ_CLEAR    = 4\n\tSYSLOG_ACTION_CLEAR         = 5\n\tSYSLOG_ACTION_CONSOLE_OFF   = 6\n\tSYSLOG_ACTION_CONSOLE_ON    = 7\n\tSYSLOG_ACTION_CONSOLE_LEVEL = 8\n\tSYSLOG_ACTION_SIZE_UNREAD   = 9\n\tSYSLOG_ACTION_SIZE_BUFFER   = 10\n)\n\nconst (\n\tDEVLINK_CMD_UNSPEC                                 = 0x0\n\tDEVLINK_CMD_GET                                    = 0x1\n\tDEVLINK_CMD_SET                                    = 0x2\n\tDEVLINK_CMD_NEW                                    = 0x3\n\tDEVLINK_CMD_DEL                                    = 0x4\n\tDEVLINK_CMD_PORT_GET                               = 0x5\n\tDEVLINK_CMD_PORT_SET                               = 0x6\n\tDEVLINK_CMD_PORT_NEW                               = 0x7\n\tDEVLINK_CMD_PORT_DEL                               = 0x8\n\tDEVLINK_CMD_PORT_SPLIT                             = 0x9\n\tDEVLINK_CMD_PORT_UNSPLIT                           = 0xa\n\tDEVLINK_CMD_SB_GET                                 = 0xb\n\tDEVLINK_CMD_SB_SET                                 = 0xc\n\tDEVLINK_CMD_SB_NEW                                 = 0xd\n\tDEVLINK_CMD_SB_DEL                                 = 0xe\n\tDEVLINK_CMD_SB_POOL_GET                            = 0xf\n\tDEVLINK_CMD_SB_POOL_SET                            = 0x10\n\tDEVLINK_CMD_SB_POOL_NEW                            = 0x11\n\tDEVLINK_CMD_SB_POOL_DEL                            = 0x12\n\tDEVLINK_CMD_SB_PORT_POOL_GET                       = 0x13\n\tDEVLINK_CMD_SB_PORT_POOL_SET                       = 0x14\n\tDEVLINK_CMD_SB_PORT_POOL_NEW                       = 0x15\n\tDEVLINK_CMD_SB_PORT_POOL_DEL                       = 0x16\n\tDEVLINK_CMD_SB_TC_POOL_BIND_GET                    = 0x17\n\tDEVLINK_CMD_SB_TC_POOL_BIND_SET                    = 0x18\n\tDEVLINK_CMD_SB_TC_POOL_BIND_NEW                    = 0x19\n\tDEVLINK_CMD_SB_TC_POOL_BIND_DEL                    = 0x1a\n\tDEVLINK_CMD_SB_OCC_SNAPSHOT                        = 0x1b\n\tDEVLINK_CMD_SB_OCC_MAX_CLEAR                       = 0x1c\n\tDEVLINK_CMD_ESWITCH_GET                            = 0x1d\n\tDEVLINK_CMD_ESWITCH_SET                            = 0x1e\n\tDEVLINK_CMD_DPIPE_TABLE_GET                        = 0x1f\n\tDEVLINK_CMD_DPIPE_ENTRIES_GET                      = 0x20\n\tDEVLINK_CMD_DPIPE_HEADERS_GET                      = 0x21\n\tDEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET               = 0x22\n\tDEVLINK_CMD_RESOURCE_SET                           = 0x23\n\tDEVLINK_CMD_RESOURCE_DUMP                          = 0x24\n\tDEVLINK_CMD_RELOAD                                 = 0x25\n\tDEVLINK_CMD_PARAM_GET                              = 0x26\n\tDEVLINK_CMD_PARAM_SET                              = 0x27\n\tDEVLINK_CMD_PARAM_NEW                              = 0x28\n\tDEVLINK_CMD_PARAM_DEL                              = 0x29\n\tDEVLINK_CMD_REGION_GET                             = 0x2a\n\tDEVLINK_CMD_REGION_SET                             = 0x2b\n\tDEVLINK_CMD_REGION_NEW                             = 0x2c\n\tDEVLINK_CMD_REGION_DEL                             = 0x2d\n\tDEVLINK_CMD_REGION_READ                            = 0x2e\n\tDEVLINK_CMD_PORT_PARAM_GET                         = 0x2f\n\tDEVLINK_CMD_PORT_PARAM_SET                         = 0x30\n\tDEVLINK_CMD_PORT_PARAM_NEW                         = 0x31\n\tDEVLINK_CMD_PORT_PARAM_DEL                         = 0x32\n\tDEVLINK_CMD_INFO_GET                               = 0x33\n\tDEVLINK_CMD_HEALTH_REPORTER_GET                    = 0x34\n\tDEVLINK_CMD_HEALTH_REPORTER_SET                    = 0x35\n\tDEVLINK_CMD_HEALTH_REPORTER_RECOVER                = 0x36\n\tDEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE               = 0x37\n\tDEVLINK_CMD_HEALTH_REPORTER_DUMP_GET               = 0x38\n\tDEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR             = 0x39\n\tDEVLINK_CMD_FLASH_UPDATE                           = 0x3a\n\tDEVLINK_CMD_FLASH_UPDATE_END                       = 0x3b\n\tDEVLINK_CMD_FLASH_UPDATE_STATUS                    = 0x3c\n\tDEVLINK_CMD_TRAP_GET                               = 0x3d\n\tDEVLINK_CMD_TRAP_SET                               = 0x3e\n\tDEVLINK_CMD_TRAP_NEW                               = 0x3f\n\tDEVLINK_CMD_TRAP_DEL                               = 0x40\n\tDEVLINK_CMD_TRAP_GROUP_GET                         = 0x41\n\tDEVLINK_CMD_TRAP_GROUP_SET                         = 0x42\n\tDEVLINK_CMD_TRAP_GROUP_NEW                         = 0x43\n\tDEVLINK_CMD_TRAP_GROUP_DEL                         = 0x44\n\tDEVLINK_CMD_TRAP_POLICER_GET                       = 0x45\n\tDEVLINK_CMD_TRAP_POLICER_SET                       = 0x46\n\tDEVLINK_CMD_TRAP_POLICER_NEW                       = 0x47\n\tDEVLINK_CMD_TRAP_POLICER_DEL                       = 0x48\n\tDEVLINK_CMD_HEALTH_REPORTER_TEST                   = 0x49\n\tDEVLINK_CMD_RATE_GET                               = 0x4a\n\tDEVLINK_CMD_RATE_SET                               = 0x4b\n\tDEVLINK_CMD_RATE_NEW                               = 0x4c\n\tDEVLINK_CMD_RATE_DEL                               = 0x4d\n\tDEVLINK_CMD_LINECARD_GET                           = 0x4e\n\tDEVLINK_CMD_LINECARD_SET                           = 0x4f\n\tDEVLINK_CMD_LINECARD_NEW                           = 0x50\n\tDEVLINK_CMD_LINECARD_DEL                           = 0x51\n\tDEVLINK_CMD_SELFTESTS_GET                          = 0x52\n\tDEVLINK_CMD_MAX                                    = 0x54\n\tDEVLINK_PORT_TYPE_NOTSET                           = 0x0\n\tDEVLINK_PORT_TYPE_AUTO                             = 0x1\n\tDEVLINK_PORT_TYPE_ETH                              = 0x2\n\tDEVLINK_PORT_TYPE_IB                               = 0x3\n\tDEVLINK_SB_POOL_TYPE_INGRESS                       = 0x0\n\tDEVLINK_SB_POOL_TYPE_EGRESS                        = 0x1\n\tDEVLINK_SB_THRESHOLD_TYPE_STATIC                   = 0x0\n\tDEVLINK_SB_THRESHOLD_TYPE_DYNAMIC                  = 0x1\n\tDEVLINK_ESWITCH_MODE_LEGACY                        = 0x0\n\tDEVLINK_ESWITCH_MODE_SWITCHDEV                     = 0x1\n\tDEVLINK_ESWITCH_INLINE_MODE_NONE                   = 0x0\n\tDEVLINK_ESWITCH_INLINE_MODE_LINK                   = 0x1\n\tDEVLINK_ESWITCH_INLINE_MODE_NETWORK                = 0x2\n\tDEVLINK_ESWITCH_INLINE_MODE_TRANSPORT              = 0x3\n\tDEVLINK_ESWITCH_ENCAP_MODE_NONE                    = 0x0\n\tDEVLINK_ESWITCH_ENCAP_MODE_BASIC                   = 0x1\n\tDEVLINK_PORT_FLAVOUR_PHYSICAL                      = 0x0\n\tDEVLINK_PORT_FLAVOUR_CPU                           = 0x1\n\tDEVLINK_PORT_FLAVOUR_DSA                           = 0x2\n\tDEVLINK_PORT_FLAVOUR_PCI_PF                        = 0x3\n\tDEVLINK_PORT_FLAVOUR_PCI_VF                        = 0x4\n\tDEVLINK_PORT_FLAVOUR_VIRTUAL                       = 0x5\n\tDEVLINK_PORT_FLAVOUR_UNUSED                        = 0x6\n\tDEVLINK_PARAM_CMODE_RUNTIME                        = 0x0\n\tDEVLINK_PARAM_CMODE_DRIVERINIT                     = 0x1\n\tDEVLINK_PARAM_CMODE_PERMANENT                      = 0x2\n\tDEVLINK_PARAM_CMODE_MAX                            = 0x2\n\tDEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DRIVER          = 0x0\n\tDEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH           = 0x1\n\tDEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DISK            = 0x2\n\tDEVLINK_PARAM_FW_LOAD_POLICY_VALUE_UNKNOWN         = 0x3\n\tDEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_UNKNOWN = 0x0\n\tDEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_ALWAYS  = 0x1\n\tDEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_NEVER   = 0x2\n\tDEVLINK_PARAM_RESET_DEV_ON_DRV_PROBE_VALUE_DISK    = 0x3\n\tDEVLINK_ATTR_STATS_RX_PACKETS                      = 0x0\n\tDEVLINK_ATTR_STATS_RX_BYTES                        = 0x1\n\tDEVLINK_ATTR_STATS_RX_DROPPED                      = 0x2\n\tDEVLINK_ATTR_STATS_MAX                             = 0x2\n\tDEVLINK_FLASH_OVERWRITE_SETTINGS_BIT               = 0x0\n\tDEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT            = 0x1\n\tDEVLINK_FLASH_OVERWRITE_MAX_BIT                    = 0x1\n\tDEVLINK_TRAP_ACTION_DROP                           = 0x0\n\tDEVLINK_TRAP_ACTION_TRAP                           = 0x1\n\tDEVLINK_TRAP_ACTION_MIRROR                         = 0x2\n\tDEVLINK_TRAP_TYPE_DROP                             = 0x0\n\tDEVLINK_TRAP_TYPE_EXCEPTION                        = 0x1\n\tDEVLINK_TRAP_TYPE_CONTROL                          = 0x2\n\tDEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT            = 0x0\n\tDEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE          = 0x1\n\tDEVLINK_RELOAD_ACTION_UNSPEC                       = 0x0\n\tDEVLINK_RELOAD_ACTION_DRIVER_REINIT                = 0x1\n\tDEVLINK_RELOAD_ACTION_FW_ACTIVATE                  = 0x2\n\tDEVLINK_RELOAD_ACTION_MAX                          = 0x2\n\tDEVLINK_RELOAD_LIMIT_UNSPEC                        = 0x0\n\tDEVLINK_RELOAD_LIMIT_NO_RESET                      = 0x1\n\tDEVLINK_RELOAD_LIMIT_MAX                           = 0x1\n\tDEVLINK_ATTR_UNSPEC                                = 0x0\n\tDEVLINK_ATTR_BUS_NAME                              = 0x1\n\tDEVLINK_ATTR_DEV_NAME                              = 0x2\n\tDEVLINK_ATTR_PORT_INDEX                            = 0x3\n\tDEVLINK_ATTR_PORT_TYPE                             = 0x4\n\tDEVLINK_ATTR_PORT_DESIRED_TYPE                     = 0x5\n\tDEVLINK_ATTR_PORT_NETDEV_IFINDEX                   = 0x6\n\tDEVLINK_ATTR_PORT_NETDEV_NAME                      = 0x7\n\tDEVLINK_ATTR_PORT_IBDEV_NAME                       = 0x8\n\tDEVLINK_ATTR_PORT_SPLIT_COUNT                      = 0x9\n\tDEVLINK_ATTR_PORT_SPLIT_GROUP                      = 0xa\n\tDEVLINK_ATTR_SB_INDEX                              = 0xb\n\tDEVLINK_ATTR_SB_SIZE                               = 0xc\n\tDEVLINK_ATTR_SB_INGRESS_POOL_COUNT                 = 0xd\n\tDEVLINK_ATTR_SB_EGRESS_POOL_COUNT                  = 0xe\n\tDEVLINK_ATTR_SB_INGRESS_TC_COUNT                   = 0xf\n\tDEVLINK_ATTR_SB_EGRESS_TC_COUNT                    = 0x10\n\tDEVLINK_ATTR_SB_POOL_INDEX                         = 0x11\n\tDEVLINK_ATTR_SB_POOL_TYPE                          = 0x12\n\tDEVLINK_ATTR_SB_POOL_SIZE                          = 0x13\n\tDEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE                = 0x14\n\tDEVLINK_ATTR_SB_THRESHOLD                          = 0x15\n\tDEVLINK_ATTR_SB_TC_INDEX                           = 0x16\n\tDEVLINK_ATTR_SB_OCC_CUR                            = 0x17\n\tDEVLINK_ATTR_SB_OCC_MAX                            = 0x18\n\tDEVLINK_ATTR_ESWITCH_MODE                          = 0x19\n\tDEVLINK_ATTR_ESWITCH_INLINE_MODE                   = 0x1a\n\tDEVLINK_ATTR_DPIPE_TABLES                          = 0x1b\n\tDEVLINK_ATTR_DPIPE_TABLE                           = 0x1c\n\tDEVLINK_ATTR_DPIPE_TABLE_NAME                      = 0x1d\n\tDEVLINK_ATTR_DPIPE_TABLE_SIZE                      = 0x1e\n\tDEVLINK_ATTR_DPIPE_TABLE_MATCHES                   = 0x1f\n\tDEVLINK_ATTR_DPIPE_TABLE_ACTIONS                   = 0x20\n\tDEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED          = 0x21\n\tDEVLINK_ATTR_DPIPE_ENTRIES                         = 0x22\n\tDEVLINK_ATTR_DPIPE_ENTRY                           = 0x23\n\tDEVLINK_ATTR_DPIPE_ENTRY_INDEX                     = 0x24\n\tDEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES              = 0x25\n\tDEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES             = 0x26\n\tDEVLINK_ATTR_DPIPE_ENTRY_COUNTER                   = 0x27\n\tDEVLINK_ATTR_DPIPE_MATCH                           = 0x28\n\tDEVLINK_ATTR_DPIPE_MATCH_VALUE                     = 0x29\n\tDEVLINK_ATTR_DPIPE_MATCH_TYPE                      = 0x2a\n\tDEVLINK_ATTR_DPIPE_ACTION                          = 0x2b\n\tDEVLINK_ATTR_DPIPE_ACTION_VALUE                    = 0x2c\n\tDEVLINK_ATTR_DPIPE_ACTION_TYPE                     = 0x2d\n\tDEVLINK_ATTR_DPIPE_VALUE                           = 0x2e\n\tDEVLINK_ATTR_DPIPE_VALUE_MASK                      = 0x2f\n\tDEVLINK_ATTR_DPIPE_VALUE_MAPPING                   = 0x30\n\tDEVLINK_ATTR_DPIPE_HEADERS                         = 0x31\n\tDEVLINK_ATTR_DPIPE_HEADER                          = 0x32\n\tDEVLINK_ATTR_DPIPE_HEADER_NAME                     = 0x33\n\tDEVLINK_ATTR_DPIPE_HEADER_ID                       = 0x34\n\tDEVLINK_ATTR_DPIPE_HEADER_FIELDS                   = 0x35\n\tDEVLINK_ATTR_DPIPE_HEADER_GLOBAL                   = 0x36\n\tDEVLINK_ATTR_DPIPE_HEADER_INDEX                    = 0x37\n\tDEVLINK_ATTR_DPIPE_FIELD                           = 0x38\n\tDEVLINK_ATTR_DPIPE_FIELD_NAME                      = 0x39\n\tDEVLINK_ATTR_DPIPE_FIELD_ID                        = 0x3a\n\tDEVLINK_ATTR_DPIPE_FIELD_BITWIDTH                  = 0x3b\n\tDEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE              = 0x3c\n\tDEVLINK_ATTR_PAD                                   = 0x3d\n\tDEVLINK_ATTR_ESWITCH_ENCAP_MODE                    = 0x3e\n\tDEVLINK_ATTR_RESOURCE_LIST                         = 0x3f\n\tDEVLINK_ATTR_RESOURCE                              = 0x40\n\tDEVLINK_ATTR_RESOURCE_NAME                         = 0x41\n\tDEVLINK_ATTR_RESOURCE_ID                           = 0x42\n\tDEVLINK_ATTR_RESOURCE_SIZE                         = 0x43\n\tDEVLINK_ATTR_RESOURCE_SIZE_NEW                     = 0x44\n\tDEVLINK_ATTR_RESOURCE_SIZE_VALID                   = 0x45\n\tDEVLINK_ATTR_RESOURCE_SIZE_MIN                     = 0x46\n\tDEVLINK_ATTR_RESOURCE_SIZE_MAX                     = 0x47\n\tDEVLINK_ATTR_RESOURCE_SIZE_GRAN                    = 0x48\n\tDEVLINK_ATTR_RESOURCE_UNIT                         = 0x49\n\tDEVLINK_ATTR_RESOURCE_OCC                          = 0x4a\n\tDEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID               = 0x4b\n\tDEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS            = 0x4c\n\tDEVLINK_ATTR_PORT_FLAVOUR                          = 0x4d\n\tDEVLINK_ATTR_PORT_NUMBER                           = 0x4e\n\tDEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER             = 0x4f\n\tDEVLINK_ATTR_PARAM                                 = 0x50\n\tDEVLINK_ATTR_PARAM_NAME                            = 0x51\n\tDEVLINK_ATTR_PARAM_GENERIC                         = 0x52\n\tDEVLINK_ATTR_PARAM_TYPE                            = 0x53\n\tDEVLINK_ATTR_PARAM_VALUES_LIST                     = 0x54\n\tDEVLINK_ATTR_PARAM_VALUE                           = 0x55\n\tDEVLINK_ATTR_PARAM_VALUE_DATA                      = 0x56\n\tDEVLINK_ATTR_PARAM_VALUE_CMODE                     = 0x57\n\tDEVLINK_ATTR_REGION_NAME                           = 0x58\n\tDEVLINK_ATTR_REGION_SIZE                           = 0x59\n\tDEVLINK_ATTR_REGION_SNAPSHOTS                      = 0x5a\n\tDEVLINK_ATTR_REGION_SNAPSHOT                       = 0x5b\n\tDEVLINK_ATTR_REGION_SNAPSHOT_ID                    = 0x5c\n\tDEVLINK_ATTR_REGION_CHUNKS                         = 0x5d\n\tDEVLINK_ATTR_REGION_CHUNK                          = 0x5e\n\tDEVLINK_ATTR_REGION_CHUNK_DATA                     = 0x5f\n\tDEVLINK_ATTR_REGION_CHUNK_ADDR                     = 0x60\n\tDEVLINK_ATTR_REGION_CHUNK_LEN                      = 0x61\n\tDEVLINK_ATTR_INFO_DRIVER_NAME                      = 0x62\n\tDEVLINK_ATTR_INFO_SERIAL_NUMBER                    = 0x63\n\tDEVLINK_ATTR_INFO_VERSION_FIXED                    = 0x64\n\tDEVLINK_ATTR_INFO_VERSION_RUNNING                  = 0x65\n\tDEVLINK_ATTR_INFO_VERSION_STORED                   = 0x66\n\tDEVLINK_ATTR_INFO_VERSION_NAME                     = 0x67\n\tDEVLINK_ATTR_INFO_VERSION_VALUE                    = 0x68\n\tDEVLINK_ATTR_SB_POOL_CELL_SIZE                     = 0x69\n\tDEVLINK_ATTR_FMSG                                  = 0x6a\n\tDEVLINK_ATTR_FMSG_OBJ_NEST_START                   = 0x6b\n\tDEVLINK_ATTR_FMSG_PAIR_NEST_START                  = 0x6c\n\tDEVLINK_ATTR_FMSG_ARR_NEST_START                   = 0x6d\n\tDEVLINK_ATTR_FMSG_NEST_END                         = 0x6e\n\tDEVLINK_ATTR_FMSG_OBJ_NAME                         = 0x6f\n\tDEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE                   = 0x70\n\tDEVLINK_ATTR_FMSG_OBJ_VALUE_DATA                   = 0x71\n\tDEVLINK_ATTR_HEALTH_REPORTER                       = 0x72\n\tDEVLINK_ATTR_HEALTH_REPORTER_NAME                  = 0x73\n\tDEVLINK_ATTR_HEALTH_REPORTER_STATE                 = 0x74\n\tDEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT             = 0x75\n\tDEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT         = 0x76\n\tDEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS               = 0x77\n\tDEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD       = 0x78\n\tDEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER          = 0x79\n\tDEVLINK_ATTR_FLASH_UPDATE_FILE_NAME                = 0x7a\n\tDEVLINK_ATTR_FLASH_UPDATE_COMPONENT                = 0x7b\n\tDEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG               = 0x7c\n\tDEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE              = 0x7d\n\tDEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL             = 0x7e\n\tDEVLINK_ATTR_PORT_PCI_PF_NUMBER                    = 0x7f\n\tDEVLINK_ATTR_PORT_PCI_VF_NUMBER                    = 0x80\n\tDEVLINK_ATTR_STATS                                 = 0x81\n\tDEVLINK_ATTR_TRAP_NAME                             = 0x82\n\tDEVLINK_ATTR_TRAP_ACTION                           = 0x83\n\tDEVLINK_ATTR_TRAP_TYPE                             = 0x84\n\tDEVLINK_ATTR_TRAP_GENERIC                          = 0x85\n\tDEVLINK_ATTR_TRAP_METADATA                         = 0x86\n\tDEVLINK_ATTR_TRAP_GROUP_NAME                       = 0x87\n\tDEVLINK_ATTR_RELOAD_FAILED                         = 0x88\n\tDEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS            = 0x89\n\tDEVLINK_ATTR_NETNS_FD                              = 0x8a\n\tDEVLINK_ATTR_NETNS_PID                             = 0x8b\n\tDEVLINK_ATTR_NETNS_ID                              = 0x8c\n\tDEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP             = 0x8d\n\tDEVLINK_ATTR_TRAP_POLICER_ID                       = 0x8e\n\tDEVLINK_ATTR_TRAP_POLICER_RATE                     = 0x8f\n\tDEVLINK_ATTR_TRAP_POLICER_BURST                    = 0x90\n\tDEVLINK_ATTR_PORT_FUNCTION                         = 0x91\n\tDEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER              = 0x92\n\tDEVLINK_ATTR_PORT_LANES                            = 0x93\n\tDEVLINK_ATTR_PORT_SPLITTABLE                       = 0x94\n\tDEVLINK_ATTR_PORT_EXTERNAL                         = 0x95\n\tDEVLINK_ATTR_PORT_CONTROLLER_NUMBER                = 0x96\n\tDEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT           = 0x97\n\tDEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK           = 0x98\n\tDEVLINK_ATTR_RELOAD_ACTION                         = 0x99\n\tDEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED              = 0x9a\n\tDEVLINK_ATTR_RELOAD_LIMITS                         = 0x9b\n\tDEVLINK_ATTR_DEV_STATS                             = 0x9c\n\tDEVLINK_ATTR_RELOAD_STATS                          = 0x9d\n\tDEVLINK_ATTR_RELOAD_STATS_ENTRY                    = 0x9e\n\tDEVLINK_ATTR_RELOAD_STATS_LIMIT                    = 0x9f\n\tDEVLINK_ATTR_RELOAD_STATS_VALUE                    = 0xa0\n\tDEVLINK_ATTR_REMOTE_RELOAD_STATS                   = 0xa1\n\tDEVLINK_ATTR_RELOAD_ACTION_INFO                    = 0xa2\n\tDEVLINK_ATTR_RELOAD_ACTION_STATS                   = 0xa3\n\tDEVLINK_ATTR_PORT_PCI_SF_NUMBER                    = 0xa4\n\tDEVLINK_ATTR_RATE_TYPE                             = 0xa5\n\tDEVLINK_ATTR_RATE_TX_SHARE                         = 0xa6\n\tDEVLINK_ATTR_RATE_TX_MAX                           = 0xa7\n\tDEVLINK_ATTR_RATE_NODE_NAME                        = 0xa8\n\tDEVLINK_ATTR_RATE_PARENT_NODE_NAME                 = 0xa9\n\tDEVLINK_ATTR_REGION_MAX_SNAPSHOTS                  = 0xaa\n\tDEVLINK_ATTR_LINECARD_INDEX                        = 0xab\n\tDEVLINK_ATTR_LINECARD_STATE                        = 0xac\n\tDEVLINK_ATTR_LINECARD_TYPE                         = 0xad\n\tDEVLINK_ATTR_LINECARD_SUPPORTED_TYPES              = 0xae\n\tDEVLINK_ATTR_NESTED_DEVLINK                        = 0xaf\n\tDEVLINK_ATTR_SELFTESTS                             = 0xb0\n\tDEVLINK_ATTR_MAX                                   = 0xb3\n\tDEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE              = 0x0\n\tDEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX           = 0x1\n\tDEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT               = 0x0\n\tDEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY             = 0x0\n\tDEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC               = 0x0\n\tDEVLINK_DPIPE_FIELD_IPV4_DST_IP                    = 0x0\n\tDEVLINK_DPIPE_FIELD_IPV6_DST_IP                    = 0x0\n\tDEVLINK_DPIPE_HEADER_ETHERNET                      = 0x0\n\tDEVLINK_DPIPE_HEADER_IPV4                          = 0x1\n\tDEVLINK_DPIPE_HEADER_IPV6                          = 0x2\n\tDEVLINK_RESOURCE_UNIT_ENTRY                        = 0x0\n\tDEVLINK_PORT_FUNCTION_ATTR_UNSPEC                  = 0x0\n\tDEVLINK_PORT_FUNCTION_ATTR_HW_ADDR                 = 0x1\n\tDEVLINK_PORT_FN_ATTR_STATE                         = 0x2\n\tDEVLINK_PORT_FN_ATTR_OPSTATE                       = 0x3\n\tDEVLINK_PORT_FN_ATTR_CAPS                          = 0x4\n\tDEVLINK_PORT_FUNCTION_ATTR_MAX                     = 0x6\n)\n\ntype FsverityDigest struct {\n\tAlgorithm uint16\n\tSize      uint16\n}\n\ntype FsverityEnableArg struct {\n\tVersion        uint32\n\tHash_algorithm uint32\n\tBlock_size     uint32\n\tSalt_size      uint32\n\tSalt_ptr       uint64\n\tSig_size       uint32\n\t_              uint32\n\tSig_ptr        uint64\n\t_              [11]uint64\n}\n\ntype Nhmsg struct {\n\tFamily   uint8\n\tScope    uint8\n\tProtocol uint8\n\tResvd    uint8\n\tFlags    uint32\n}\n\nconst SizeofNhmsg = 0x8\n\ntype NexthopGrp struct {\n\tId     uint32\n\tWeight uint8\n\tHigh   uint8\n\tResvd2 uint16\n}\n\nconst SizeofNexthopGrp = 0x8\n\nconst (\n\tNHA_UNSPEC     = 0x0\n\tNHA_ID         = 0x1\n\tNHA_GROUP      = 0x2\n\tNHA_GROUP_TYPE = 0x3\n\tNHA_BLACKHOLE  = 0x4\n\tNHA_OIF        = 0x5\n\tNHA_GATEWAY    = 0x6\n\tNHA_ENCAP_TYPE = 0x7\n\tNHA_ENCAP      = 0x8\n\tNHA_GROUPS     = 0x9\n\tNHA_MASTER     = 0xa\n)\n\nconst (\n\tCAN_RAW_FILTER        = 0x1\n\tCAN_RAW_ERR_FILTER    = 0x2\n\tCAN_RAW_LOOPBACK      = 0x3\n\tCAN_RAW_RECV_OWN_MSGS = 0x4\n\tCAN_RAW_FD_FRAMES     = 0x5\n\tCAN_RAW_JOIN_FILTERS  = 0x6\n)\n\ntype WatchdogInfo struct {\n\tOptions  uint32\n\tVersion  uint32\n\tIdentity [32]uint8\n}\n\ntype PPSFData struct {\n\tInfo    PPSKInfo\n\tTimeout PPSKTime\n}\n\ntype PPSKParams struct {\n\tApi_version   int32\n\tMode          int32\n\tAssert_off_tu PPSKTime\n\tClear_off_tu  PPSKTime\n}\n\ntype PPSKTime struct {\n\tSec   int64\n\tNsec  int32\n\tFlags uint32\n}\n\nconst (\n\tLWTUNNEL_ENCAP_NONE       = 0x0\n\tLWTUNNEL_ENCAP_MPLS       = 0x1\n\tLWTUNNEL_ENCAP_IP         = 0x2\n\tLWTUNNEL_ENCAP_ILA        = 0x3\n\tLWTUNNEL_ENCAP_IP6        = 0x4\n\tLWTUNNEL_ENCAP_SEG6       = 0x5\n\tLWTUNNEL_ENCAP_BPF        = 0x6\n\tLWTUNNEL_ENCAP_SEG6_LOCAL = 0x7\n\tLWTUNNEL_ENCAP_RPL        = 0x8\n\tLWTUNNEL_ENCAP_IOAM6      = 0x9\n\tLWTUNNEL_ENCAP_XFRM       = 0xa\n\tLWTUNNEL_ENCAP_MAX        = 0xa\n\n\tMPLS_IPTUNNEL_UNSPEC = 0x0\n\tMPLS_IPTUNNEL_DST    = 0x1\n\tMPLS_IPTUNNEL_TTL    = 0x2\n\tMPLS_IPTUNNEL_MAX    = 0x2\n)\n\nconst (\n\tETHTOOL_ID_UNSPEC                                                       = 0x0\n\tETHTOOL_RX_COPYBREAK                                                    = 0x1\n\tETHTOOL_TX_COPYBREAK                                                    = 0x2\n\tETHTOOL_PFC_PREVENTION_TOUT                                             = 0x3\n\tETHTOOL_TUNABLE_UNSPEC                                                  = 0x0\n\tETHTOOL_TUNABLE_U8                                                      = 0x1\n\tETHTOOL_TUNABLE_U16                                                     = 0x2\n\tETHTOOL_TUNABLE_U32                                                     = 0x3\n\tETHTOOL_TUNABLE_U64                                                     = 0x4\n\tETHTOOL_TUNABLE_STRING                                                  = 0x5\n\tETHTOOL_TUNABLE_S8                                                      = 0x6\n\tETHTOOL_TUNABLE_S16                                                     = 0x7\n\tETHTOOL_TUNABLE_S32                                                     = 0x8\n\tETHTOOL_TUNABLE_S64                                                     = 0x9\n\tETHTOOL_PHY_ID_UNSPEC                                                   = 0x0\n\tETHTOOL_PHY_DOWNSHIFT                                                   = 0x1\n\tETHTOOL_PHY_FAST_LINK_DOWN                                              = 0x2\n\tETHTOOL_PHY_EDPD                                                        = 0x3\n\tETHTOOL_LINK_EXT_STATE_AUTONEG                                          = 0x0\n\tETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE                            = 0x1\n\tETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH                            = 0x2\n\tETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY                             = 0x3\n\tETHTOOL_LINK_EXT_STATE_NO_CABLE                                         = 0x4\n\tETHTOOL_LINK_EXT_STATE_CABLE_ISSUE                                      = 0x5\n\tETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE                                     = 0x6\n\tETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE                              = 0x7\n\tETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED                            = 0x8\n\tETHTOOL_LINK_EXT_STATE_OVERHEAT                                         = 0x9\n\tETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED                        = 0x1\n\tETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED                           = 0x2\n\tETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED                  = 0x3\n\tETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE             = 0x4\n\tETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE               = 0x5\n\tETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD                                     = 0x6\n\tETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED                 = 0x1\n\tETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT                    = 0x2\n\tETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 0x3\n\tETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT                               = 0x4\n\tETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK            = 0x1\n\tETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK               = 0x2\n\tETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS              = 0x3\n\tETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED                      = 0x4\n\tETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED                      = 0x5\n\tETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS           = 0x1\n\tETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE                          = 0x2\n\tETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE                          = 0x1\n\tETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE                         = 0x2\n\tETHTOOL_FLASH_ALL_REGIONS                                               = 0x0\n\tETHTOOL_F_UNSUPPORTED__BIT                                              = 0x0\n\tETHTOOL_F_WISH__BIT                                                     = 0x1\n\tETHTOOL_F_COMPAT__BIT                                                   = 0x2\n\tETHTOOL_FEC_NONE_BIT                                                    = 0x0\n\tETHTOOL_FEC_AUTO_BIT                                                    = 0x1\n\tETHTOOL_FEC_OFF_BIT                                                     = 0x2\n\tETHTOOL_FEC_RS_BIT                                                      = 0x3\n\tETHTOOL_FEC_BASER_BIT                                                   = 0x4\n\tETHTOOL_FEC_LLRS_BIT                                                    = 0x5\n\tETHTOOL_LINK_MODE_10baseT_Half_BIT                                      = 0x0\n\tETHTOOL_LINK_MODE_10baseT_Full_BIT                                      = 0x1\n\tETHTOOL_LINK_MODE_100baseT_Half_BIT                                     = 0x2\n\tETHTOOL_LINK_MODE_100baseT_Full_BIT                                     = 0x3\n\tETHTOOL_LINK_MODE_1000baseT_Half_BIT                                    = 0x4\n\tETHTOOL_LINK_MODE_1000baseT_Full_BIT                                    = 0x5\n\tETHTOOL_LINK_MODE_Autoneg_BIT                                           = 0x6\n\tETHTOOL_LINK_MODE_TP_BIT                                                = 0x7\n\tETHTOOL_LINK_MODE_AUI_BIT                                               = 0x8\n\tETHTOOL_LINK_MODE_MII_BIT                                               = 0x9\n\tETHTOOL_LINK_MODE_FIBRE_BIT                                             = 0xa\n\tETHTOOL_LINK_MODE_BNC_BIT                                               = 0xb\n\tETHTOOL_LINK_MODE_10000baseT_Full_BIT                                   = 0xc\n\tETHTOOL_LINK_MODE_Pause_BIT                                             = 0xd\n\tETHTOOL_LINK_MODE_Asym_Pause_BIT                                        = 0xe\n\tETHTOOL_LINK_MODE_2500baseX_Full_BIT                                    = 0xf\n\tETHTOOL_LINK_MODE_Backplane_BIT                                         = 0x10\n\tETHTOOL_LINK_MODE_1000baseKX_Full_BIT                                   = 0x11\n\tETHTOOL_LINK_MODE_10000baseKX4_Full_BIT                                 = 0x12\n\tETHTOOL_LINK_MODE_10000baseKR_Full_BIT                                  = 0x13\n\tETHTOOL_LINK_MODE_10000baseR_FEC_BIT                                    = 0x14\n\tETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT                                = 0x15\n\tETHTOOL_LINK_MODE_20000baseKR2_Full_BIT                                 = 0x16\n\tETHTOOL_LINK_MODE_40000baseKR4_Full_BIT                                 = 0x17\n\tETHTOOL_LINK_MODE_40000baseCR4_Full_BIT                                 = 0x18\n\tETHTOOL_LINK_MODE_40000baseSR4_Full_BIT                                 = 0x19\n\tETHTOOL_LINK_MODE_40000baseLR4_Full_BIT                                 = 0x1a\n\tETHTOOL_LINK_MODE_56000baseKR4_Full_BIT                                 = 0x1b\n\tETHTOOL_LINK_MODE_56000baseCR4_Full_BIT                                 = 0x1c\n\tETHTOOL_LINK_MODE_56000baseSR4_Full_BIT                                 = 0x1d\n\tETHTOOL_LINK_MODE_56000baseLR4_Full_BIT                                 = 0x1e\n\tETHTOOL_LINK_MODE_25000baseCR_Full_BIT                                  = 0x1f\n\tETHTOOL_LINK_MODE_25000baseKR_Full_BIT                                  = 0x20\n\tETHTOOL_LINK_MODE_25000baseSR_Full_BIT                                  = 0x21\n\tETHTOOL_LINK_MODE_50000baseCR2_Full_BIT                                 = 0x22\n\tETHTOOL_LINK_MODE_50000baseKR2_Full_BIT                                 = 0x23\n\tETHTOOL_LINK_MODE_100000baseKR4_Full_BIT                                = 0x24\n\tETHTOOL_LINK_MODE_100000baseSR4_Full_BIT                                = 0x25\n\tETHTOOL_LINK_MODE_100000baseCR4_Full_BIT                                = 0x26\n\tETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT                            = 0x27\n\tETHTOOL_LINK_MODE_50000baseSR2_Full_BIT                                 = 0x28\n\tETHTOOL_LINK_MODE_1000baseX_Full_BIT                                    = 0x29\n\tETHTOOL_LINK_MODE_10000baseCR_Full_BIT                                  = 0x2a\n\tETHTOOL_LINK_MODE_10000baseSR_Full_BIT                                  = 0x2b\n\tETHTOOL_LINK_MODE_10000baseLR_Full_BIT                                  = 0x2c\n\tETHTOOL_LINK_MODE_10000baseLRM_Full_BIT                                 = 0x2d\n\tETHTOOL_LINK_MODE_10000baseER_Full_BIT                                  = 0x2e\n\tETHTOOL_LINK_MODE_2500baseT_Full_BIT                                    = 0x2f\n\tETHTOOL_LINK_MODE_5000baseT_Full_BIT                                    = 0x30\n\tETHTOOL_LINK_MODE_FEC_NONE_BIT                                          = 0x31\n\tETHTOOL_LINK_MODE_FEC_RS_BIT                                            = 0x32\n\tETHTOOL_LINK_MODE_FEC_BASER_BIT                                         = 0x33\n\tETHTOOL_LINK_MODE_50000baseKR_Full_BIT                                  = 0x34\n\tETHTOOL_LINK_MODE_50000baseSR_Full_BIT                                  = 0x35\n\tETHTOOL_LINK_MODE_50000baseCR_Full_BIT                                  = 0x36\n\tETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT                            = 0x37\n\tETHTOOL_LINK_MODE_50000baseDR_Full_BIT                                  = 0x38\n\tETHTOOL_LINK_MODE_100000baseKR2_Full_BIT                                = 0x39\n\tETHTOOL_LINK_MODE_100000baseSR2_Full_BIT                                = 0x3a\n\tETHTOOL_LINK_MODE_100000baseCR2_Full_BIT                                = 0x3b\n\tETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT                        = 0x3c\n\tETHTOOL_LINK_MODE_100000baseDR2_Full_BIT                                = 0x3d\n\tETHTOOL_LINK_MODE_200000baseKR4_Full_BIT                                = 0x3e\n\tETHTOOL_LINK_MODE_200000baseSR4_Full_BIT                                = 0x3f\n\tETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT                        = 0x40\n\tETHTOOL_LINK_MODE_200000baseDR4_Full_BIT                                = 0x41\n\tETHTOOL_LINK_MODE_200000baseCR4_Full_BIT                                = 0x42\n\tETHTOOL_LINK_MODE_100baseT1_Full_BIT                                    = 0x43\n\tETHTOOL_LINK_MODE_1000baseT1_Full_BIT                                   = 0x44\n\tETHTOOL_LINK_MODE_400000baseKR8_Full_BIT                                = 0x45\n\tETHTOOL_LINK_MODE_400000baseSR8_Full_BIT                                = 0x46\n\tETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT                        = 0x47\n\tETHTOOL_LINK_MODE_400000baseDR8_Full_BIT                                = 0x48\n\tETHTOOL_LINK_MODE_400000baseCR8_Full_BIT                                = 0x49\n\tETHTOOL_LINK_MODE_FEC_LLRS_BIT                                          = 0x4a\n\tETHTOOL_LINK_MODE_100000baseKR_Full_BIT                                 = 0x4b\n\tETHTOOL_LINK_MODE_100000baseSR_Full_BIT                                 = 0x4c\n\tETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT                           = 0x4d\n\tETHTOOL_LINK_MODE_100000baseCR_Full_BIT                                 = 0x4e\n\tETHTOOL_LINK_MODE_100000baseDR_Full_BIT                                 = 0x4f\n\tETHTOOL_LINK_MODE_200000baseKR2_Full_BIT                                = 0x50\n\tETHTOOL_LINK_MODE_200000baseSR2_Full_BIT                                = 0x51\n\tETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT                        = 0x52\n\tETHTOOL_LINK_MODE_200000baseDR2_Full_BIT                                = 0x53\n\tETHTOOL_LINK_MODE_200000baseCR2_Full_BIT                                = 0x54\n\tETHTOOL_LINK_MODE_400000baseKR4_Full_BIT                                = 0x55\n\tETHTOOL_LINK_MODE_400000baseSR4_Full_BIT                                = 0x56\n\tETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT                        = 0x57\n\tETHTOOL_LINK_MODE_400000baseDR4_Full_BIT                                = 0x58\n\tETHTOOL_LINK_MODE_400000baseCR4_Full_BIT                                = 0x59\n\tETHTOOL_LINK_MODE_100baseFX_Half_BIT                                    = 0x5a\n\tETHTOOL_LINK_MODE_100baseFX_Full_BIT                                    = 0x5b\n\n\tETHTOOL_MSG_USER_NONE                     = 0x0\n\tETHTOOL_MSG_STRSET_GET                    = 0x1\n\tETHTOOL_MSG_LINKINFO_GET                  = 0x2\n\tETHTOOL_MSG_LINKINFO_SET                  = 0x3\n\tETHTOOL_MSG_LINKMODES_GET                 = 0x4\n\tETHTOOL_MSG_LINKMODES_SET                 = 0x5\n\tETHTOOL_MSG_LINKSTATE_GET                 = 0x6\n\tETHTOOL_MSG_DEBUG_GET                     = 0x7\n\tETHTOOL_MSG_DEBUG_SET                     = 0x8\n\tETHTOOL_MSG_WOL_GET                       = 0x9\n\tETHTOOL_MSG_WOL_SET                       = 0xa\n\tETHTOOL_MSG_FEATURES_GET                  = 0xb\n\tETHTOOL_MSG_FEATURES_SET                  = 0xc\n\tETHTOOL_MSG_PRIVFLAGS_GET                 = 0xd\n\tETHTOOL_MSG_PRIVFLAGS_SET                 = 0xe\n\tETHTOOL_MSG_RINGS_GET                     = 0xf\n\tETHTOOL_MSG_RINGS_SET                     = 0x10\n\tETHTOOL_MSG_CHANNELS_GET                  = 0x11\n\tETHTOOL_MSG_CHANNELS_SET                  = 0x12\n\tETHTOOL_MSG_COALESCE_GET                  = 0x13\n\tETHTOOL_MSG_COALESCE_SET                  = 0x14\n\tETHTOOL_MSG_PAUSE_GET                     = 0x15\n\tETHTOOL_MSG_PAUSE_SET                     = 0x16\n\tETHTOOL_MSG_EEE_GET                       = 0x17\n\tETHTOOL_MSG_EEE_SET                       = 0x18\n\tETHTOOL_MSG_TSINFO_GET                    = 0x19\n\tETHTOOL_MSG_CABLE_TEST_ACT                = 0x1a\n\tETHTOOL_MSG_CABLE_TEST_TDR_ACT            = 0x1b\n\tETHTOOL_MSG_TUNNEL_INFO_GET               = 0x1c\n\tETHTOOL_MSG_FEC_GET                       = 0x1d\n\tETHTOOL_MSG_FEC_SET                       = 0x1e\n\tETHTOOL_MSG_MODULE_EEPROM_GET             = 0x1f\n\tETHTOOL_MSG_STATS_GET                     = 0x20\n\tETHTOOL_MSG_PHC_VCLOCKS_GET               = 0x21\n\tETHTOOL_MSG_MODULE_GET                    = 0x22\n\tETHTOOL_MSG_MODULE_SET                    = 0x23\n\tETHTOOL_MSG_PSE_GET                       = 0x24\n\tETHTOOL_MSG_PSE_SET                       = 0x25\n\tETHTOOL_MSG_RSS_GET                       = 0x26\n\tETHTOOL_MSG_PLCA_GET_CFG                  = 0x27\n\tETHTOOL_MSG_PLCA_SET_CFG                  = 0x28\n\tETHTOOL_MSG_PLCA_GET_STATUS               = 0x29\n\tETHTOOL_MSG_MM_GET                        = 0x2a\n\tETHTOOL_MSG_MM_SET                        = 0x2b\n\tETHTOOL_MSG_MODULE_FW_FLASH_ACT           = 0x2c\n\tETHTOOL_MSG_PHY_GET                       = 0x2d\n\tETHTOOL_MSG_TSCONFIG_GET                  = 0x2e\n\tETHTOOL_MSG_TSCONFIG_SET                  = 0x2f\n\tETHTOOL_MSG_USER_MAX                      = 0x2f\n\tETHTOOL_MSG_KERNEL_NONE                   = 0x0\n\tETHTOOL_MSG_STRSET_GET_REPLY              = 0x1\n\tETHTOOL_MSG_LINKINFO_GET_REPLY            = 0x2\n\tETHTOOL_MSG_LINKINFO_NTF                  = 0x3\n\tETHTOOL_MSG_LINKMODES_GET_REPLY           = 0x4\n\tETHTOOL_MSG_LINKMODES_NTF                 = 0x5\n\tETHTOOL_MSG_LINKSTATE_GET_REPLY           = 0x6\n\tETHTOOL_MSG_DEBUG_GET_REPLY               = 0x7\n\tETHTOOL_MSG_DEBUG_NTF                     = 0x8\n\tETHTOOL_MSG_WOL_GET_REPLY                 = 0x9\n\tETHTOOL_MSG_WOL_NTF                       = 0xa\n\tETHTOOL_MSG_FEATURES_GET_REPLY            = 0xb\n\tETHTOOL_MSG_FEATURES_SET_REPLY            = 0xc\n\tETHTOOL_MSG_FEATURES_NTF                  = 0xd\n\tETHTOOL_MSG_PRIVFLAGS_GET_REPLY           = 0xe\n\tETHTOOL_MSG_PRIVFLAGS_NTF                 = 0xf\n\tETHTOOL_MSG_RINGS_GET_REPLY               = 0x10\n\tETHTOOL_MSG_RINGS_NTF                     = 0x11\n\tETHTOOL_MSG_CHANNELS_GET_REPLY            = 0x12\n\tETHTOOL_MSG_CHANNELS_NTF                  = 0x13\n\tETHTOOL_MSG_COALESCE_GET_REPLY            = 0x14\n\tETHTOOL_MSG_COALESCE_NTF                  = 0x15\n\tETHTOOL_MSG_PAUSE_GET_REPLY               = 0x16\n\tETHTOOL_MSG_PAUSE_NTF                     = 0x17\n\tETHTOOL_MSG_EEE_GET_REPLY                 = 0x18\n\tETHTOOL_MSG_EEE_NTF                       = 0x19\n\tETHTOOL_MSG_TSINFO_GET_REPLY              = 0x1a\n\tETHTOOL_MSG_CABLE_TEST_NTF                = 0x1b\n\tETHTOOL_MSG_CABLE_TEST_TDR_NTF            = 0x1c\n\tETHTOOL_MSG_TUNNEL_INFO_GET_REPLY         = 0x1d\n\tETHTOOL_MSG_FEC_GET_REPLY                 = 0x1e\n\tETHTOOL_MSG_FEC_NTF                       = 0x1f\n\tETHTOOL_MSG_MODULE_EEPROM_GET_REPLY       = 0x20\n\tETHTOOL_MSG_STATS_GET_REPLY               = 0x21\n\tETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY         = 0x22\n\tETHTOOL_MSG_MODULE_GET_REPLY              = 0x23\n\tETHTOOL_MSG_MODULE_NTF                    = 0x24\n\tETHTOOL_MSG_PSE_GET_REPLY                 = 0x25\n\tETHTOOL_MSG_RSS_GET_REPLY                 = 0x26\n\tETHTOOL_MSG_PLCA_GET_CFG_REPLY            = 0x27\n\tETHTOOL_MSG_PLCA_GET_STATUS_REPLY         = 0x28\n\tETHTOOL_MSG_PLCA_NTF                      = 0x29\n\tETHTOOL_MSG_MM_GET_REPLY                  = 0x2a\n\tETHTOOL_MSG_MM_NTF                        = 0x2b\n\tETHTOOL_MSG_MODULE_FW_FLASH_NTF           = 0x2c\n\tETHTOOL_MSG_PHY_GET_REPLY                 = 0x2d\n\tETHTOOL_MSG_PHY_NTF                       = 0x2e\n\tETHTOOL_MSG_TSCONFIG_GET_REPLY            = 0x2f\n\tETHTOOL_MSG_TSCONFIG_SET_REPLY            = 0x30\n\tETHTOOL_MSG_KERNEL_MAX                    = 0x30\n\tETHTOOL_FLAG_COMPACT_BITSETS              = 0x1\n\tETHTOOL_FLAG_OMIT_REPLY                   = 0x2\n\tETHTOOL_FLAG_STATS                        = 0x4\n\tETHTOOL_A_HEADER_UNSPEC                   = 0x0\n\tETHTOOL_A_HEADER_DEV_INDEX                = 0x1\n\tETHTOOL_A_HEADER_DEV_NAME                 = 0x2\n\tETHTOOL_A_HEADER_FLAGS                    = 0x3\n\tETHTOOL_A_HEADER_MAX                      = 0x4\n\tETHTOOL_A_BITSET_BIT_UNSPEC               = 0x0\n\tETHTOOL_A_BITSET_BIT_INDEX                = 0x1\n\tETHTOOL_A_BITSET_BIT_NAME                 = 0x2\n\tETHTOOL_A_BITSET_BIT_VALUE                = 0x3\n\tETHTOOL_A_BITSET_BIT_MAX                  = 0x3\n\tETHTOOL_A_BITSET_BITS_UNSPEC              = 0x0\n\tETHTOOL_A_BITSET_BITS_BIT                 = 0x1\n\tETHTOOL_A_BITSET_BITS_MAX                 = 0x1\n\tETHTOOL_A_BITSET_UNSPEC                   = 0x0\n\tETHTOOL_A_BITSET_NOMASK                   = 0x1\n\tETHTOOL_A_BITSET_SIZE                     = 0x2\n\tETHTOOL_A_BITSET_BITS                     = 0x3\n\tETHTOOL_A_BITSET_VALUE                    = 0x4\n\tETHTOOL_A_BITSET_MASK                     = 0x5\n\tETHTOOL_A_BITSET_MAX                      = 0x5\n\tETHTOOL_A_STRING_UNSPEC                   = 0x0\n\tETHTOOL_A_STRING_INDEX                    = 0x1\n\tETHTOOL_A_STRING_VALUE                    = 0x2\n\tETHTOOL_A_STRING_MAX                      = 0x2\n\tETHTOOL_A_STRINGS_UNSPEC                  = 0x0\n\tETHTOOL_A_STRINGS_STRING                  = 0x1\n\tETHTOOL_A_STRINGS_MAX                     = 0x1\n\tETHTOOL_A_STRINGSET_UNSPEC                = 0x0\n\tETHTOOL_A_STRINGSET_ID                    = 0x1\n\tETHTOOL_A_STRINGSET_COUNT                 = 0x2\n\tETHTOOL_A_STRINGSET_STRINGS               = 0x3\n\tETHTOOL_A_STRINGSET_MAX                   = 0x3\n\tETHTOOL_A_STRINGSETS_UNSPEC               = 0x0\n\tETHTOOL_A_STRINGSETS_STRINGSET            = 0x1\n\tETHTOOL_A_STRINGSETS_MAX                  = 0x1\n\tETHTOOL_A_STRSET_UNSPEC                   = 0x0\n\tETHTOOL_A_STRSET_HEADER                   = 0x1\n\tETHTOOL_A_STRSET_STRINGSETS               = 0x2\n\tETHTOOL_A_STRSET_COUNTS_ONLY              = 0x3\n\tETHTOOL_A_STRSET_MAX                      = 0x3\n\tETHTOOL_A_LINKINFO_UNSPEC                 = 0x0\n\tETHTOOL_A_LINKINFO_HEADER                 = 0x1\n\tETHTOOL_A_LINKINFO_PORT                   = 0x2\n\tETHTOOL_A_LINKINFO_PHYADDR                = 0x3\n\tETHTOOL_A_LINKINFO_TP_MDIX                = 0x4\n\tETHTOOL_A_LINKINFO_TP_MDIX_CTRL           = 0x5\n\tETHTOOL_A_LINKINFO_TRANSCEIVER            = 0x6\n\tETHTOOL_A_LINKINFO_MAX                    = 0x6\n\tETHTOOL_A_LINKMODES_UNSPEC                = 0x0\n\tETHTOOL_A_LINKMODES_HEADER                = 0x1\n\tETHTOOL_A_LINKMODES_AUTONEG               = 0x2\n\tETHTOOL_A_LINKMODES_OURS                  = 0x3\n\tETHTOOL_A_LINKMODES_PEER                  = 0x4\n\tETHTOOL_A_LINKMODES_SPEED                 = 0x5\n\tETHTOOL_A_LINKMODES_DUPLEX                = 0x6\n\tETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG      = 0x7\n\tETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE    = 0x8\n\tETHTOOL_A_LINKMODES_LANES                 = 0x9\n\tETHTOOL_A_LINKMODES_RATE_MATCHING         = 0xa\n\tETHTOOL_A_LINKMODES_MAX                   = 0xa\n\tETHTOOL_A_LINKSTATE_UNSPEC                = 0x0\n\tETHTOOL_A_LINKSTATE_HEADER                = 0x1\n\tETHTOOL_A_LINKSTATE_LINK                  = 0x2\n\tETHTOOL_A_LINKSTATE_SQI                   = 0x3\n\tETHTOOL_A_LINKSTATE_SQI_MAX               = 0x4\n\tETHTOOL_A_LINKSTATE_EXT_STATE             = 0x5\n\tETHTOOL_A_LINKSTATE_EXT_SUBSTATE          = 0x6\n\tETHTOOL_A_LINKSTATE_EXT_DOWN_CNT          = 0x7\n\tETHTOOL_A_LINKSTATE_MAX                   = 0x7\n\tETHTOOL_A_DEBUG_UNSPEC                    = 0x0\n\tETHTOOL_A_DEBUG_HEADER                    = 0x1\n\tETHTOOL_A_DEBUG_MSGMASK                   = 0x2\n\tETHTOOL_A_DEBUG_MAX                       = 0x2\n\tETHTOOL_A_WOL_UNSPEC                      = 0x0\n\tETHTOOL_A_WOL_HEADER                      = 0x1\n\tETHTOOL_A_WOL_MODES                       = 0x2\n\tETHTOOL_A_WOL_SOPASS                      = 0x3\n\tETHTOOL_A_WOL_MAX                         = 0x3\n\tETHTOOL_A_FEATURES_UNSPEC                 = 0x0\n\tETHTOOL_A_FEATURES_HEADER                 = 0x1\n\tETHTOOL_A_FEATURES_HW                     = 0x2\n\tETHTOOL_A_FEATURES_WANTED                 = 0x3\n\tETHTOOL_A_FEATURES_ACTIVE                 = 0x4\n\tETHTOOL_A_FEATURES_NOCHANGE               = 0x5\n\tETHTOOL_A_FEATURES_MAX                    = 0x5\n\tETHTOOL_A_PRIVFLAGS_UNSPEC                = 0x0\n\tETHTOOL_A_PRIVFLAGS_HEADER                = 0x1\n\tETHTOOL_A_PRIVFLAGS_FLAGS                 = 0x2\n\tETHTOOL_A_PRIVFLAGS_MAX                   = 0x2\n\tETHTOOL_A_RINGS_UNSPEC                    = 0x0\n\tETHTOOL_A_RINGS_HEADER                    = 0x1\n\tETHTOOL_A_RINGS_RX_MAX                    = 0x2\n\tETHTOOL_A_RINGS_RX_MINI_MAX               = 0x3\n\tETHTOOL_A_RINGS_RX_JUMBO_MAX              = 0x4\n\tETHTOOL_A_RINGS_TX_MAX                    = 0x5\n\tETHTOOL_A_RINGS_RX                        = 0x6\n\tETHTOOL_A_RINGS_RX_MINI                   = 0x7\n\tETHTOOL_A_RINGS_RX_JUMBO                  = 0x8\n\tETHTOOL_A_RINGS_TX                        = 0x9\n\tETHTOOL_A_RINGS_RX_BUF_LEN                = 0xa\n\tETHTOOL_A_RINGS_TCP_DATA_SPLIT            = 0xb\n\tETHTOOL_A_RINGS_CQE_SIZE                  = 0xc\n\tETHTOOL_A_RINGS_TX_PUSH                   = 0xd\n\tETHTOOL_A_RINGS_RX_PUSH                   = 0xe\n\tETHTOOL_A_RINGS_TX_PUSH_BUF_LEN           = 0xf\n\tETHTOOL_A_RINGS_TX_PUSH_BUF_LEN_MAX       = 0x10\n\tETHTOOL_A_RINGS_HDS_THRESH                = 0x11\n\tETHTOOL_A_RINGS_HDS_THRESH_MAX            = 0x12\n\tETHTOOL_A_RINGS_MAX                       = 0x12\n\tETHTOOL_A_CHANNELS_UNSPEC                 = 0x0\n\tETHTOOL_A_CHANNELS_HEADER                 = 0x1\n\tETHTOOL_A_CHANNELS_RX_MAX                 = 0x2\n\tETHTOOL_A_CHANNELS_TX_MAX                 = 0x3\n\tETHTOOL_A_CHANNELS_OTHER_MAX              = 0x4\n\tETHTOOL_A_CHANNELS_COMBINED_MAX           = 0x5\n\tETHTOOL_A_CHANNELS_RX_COUNT               = 0x6\n\tETHTOOL_A_CHANNELS_TX_COUNT               = 0x7\n\tETHTOOL_A_CHANNELS_OTHER_COUNT            = 0x8\n\tETHTOOL_A_CHANNELS_COMBINED_COUNT         = 0x9\n\tETHTOOL_A_CHANNELS_MAX                    = 0x9\n\tETHTOOL_A_COALESCE_UNSPEC                 = 0x0\n\tETHTOOL_A_COALESCE_HEADER                 = 0x1\n\tETHTOOL_A_COALESCE_RX_USECS               = 0x2\n\tETHTOOL_A_COALESCE_RX_MAX_FRAMES          = 0x3\n\tETHTOOL_A_COALESCE_RX_USECS_IRQ           = 0x4\n\tETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ      = 0x5\n\tETHTOOL_A_COALESCE_TX_USECS               = 0x6\n\tETHTOOL_A_COALESCE_TX_MAX_FRAMES          = 0x7\n\tETHTOOL_A_COALESCE_TX_USECS_IRQ           = 0x8\n\tETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ      = 0x9\n\tETHTOOL_A_COALESCE_STATS_BLOCK_USECS      = 0xa\n\tETHTOOL_A_COALESCE_USE_ADAPTIVE_RX        = 0xb\n\tETHTOOL_A_COALESCE_USE_ADAPTIVE_TX        = 0xc\n\tETHTOOL_A_COALESCE_PKT_RATE_LOW           = 0xd\n\tETHTOOL_A_COALESCE_RX_USECS_LOW           = 0xe\n\tETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW      = 0xf\n\tETHTOOL_A_COALESCE_TX_USECS_LOW           = 0x10\n\tETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW      = 0x11\n\tETHTOOL_A_COALESCE_PKT_RATE_HIGH          = 0x12\n\tETHTOOL_A_COALESCE_RX_USECS_HIGH          = 0x13\n\tETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH     = 0x14\n\tETHTOOL_A_COALESCE_TX_USECS_HIGH          = 0x15\n\tETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH     = 0x16\n\tETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL   = 0x17\n\tETHTOOL_A_COALESCE_USE_CQE_MODE_TX        = 0x18\n\tETHTOOL_A_COALESCE_USE_CQE_MODE_RX        = 0x19\n\tETHTOOL_A_COALESCE_MAX                    = 0x1e\n\tETHTOOL_A_PAUSE_UNSPEC                    = 0x0\n\tETHTOOL_A_PAUSE_HEADER                    = 0x1\n\tETHTOOL_A_PAUSE_AUTONEG                   = 0x2\n\tETHTOOL_A_PAUSE_RX                        = 0x3\n\tETHTOOL_A_PAUSE_TX                        = 0x4\n\tETHTOOL_A_PAUSE_STATS                     = 0x5\n\tETHTOOL_A_PAUSE_MAX                       = 0x6\n\tETHTOOL_A_PAUSE_STAT_UNSPEC               = 0x0\n\tETHTOOL_A_PAUSE_STAT_PAD                  = 0x1\n\tETHTOOL_A_PAUSE_STAT_TX_FRAMES            = 0x2\n\tETHTOOL_A_PAUSE_STAT_RX_FRAMES            = 0x3\n\tETHTOOL_A_PAUSE_STAT_MAX                  = 0x3\n\tETHTOOL_A_EEE_UNSPEC                      = 0x0\n\tETHTOOL_A_EEE_HEADER                      = 0x1\n\tETHTOOL_A_EEE_MODES_OURS                  = 0x2\n\tETHTOOL_A_EEE_MODES_PEER                  = 0x3\n\tETHTOOL_A_EEE_ACTIVE                      = 0x4\n\tETHTOOL_A_EEE_ENABLED                     = 0x5\n\tETHTOOL_A_EEE_TX_LPI_ENABLED              = 0x6\n\tETHTOOL_A_EEE_TX_LPI_TIMER                = 0x7\n\tETHTOOL_A_EEE_MAX                         = 0x7\n\tETHTOOL_A_TSINFO_UNSPEC                   = 0x0\n\tETHTOOL_A_TSINFO_HEADER                   = 0x1\n\tETHTOOL_A_TSINFO_TIMESTAMPING             = 0x2\n\tETHTOOL_A_TSINFO_TX_TYPES                 = 0x3\n\tETHTOOL_A_TSINFO_RX_FILTERS               = 0x4\n\tETHTOOL_A_TSINFO_PHC_INDEX                = 0x5\n\tETHTOOL_A_TSINFO_STATS                    = 0x6\n\tETHTOOL_A_TSINFO_HWTSTAMP_PROVIDER        = 0x7\n\tETHTOOL_A_TSINFO_MAX                      = 0x9\n\tETHTOOL_A_CABLE_TEST_UNSPEC               = 0x0\n\tETHTOOL_A_CABLE_TEST_HEADER               = 0x1\n\tETHTOOL_A_CABLE_TEST_MAX                  = 0x1\n\tETHTOOL_A_CABLE_RESULT_CODE_UNSPEC        = 0x0\n\tETHTOOL_A_CABLE_RESULT_CODE_OK            = 0x1\n\tETHTOOL_A_CABLE_RESULT_CODE_OPEN          = 0x2\n\tETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT    = 0x3\n\tETHTOOL_A_CABLE_RESULT_CODE_CROSS_SHORT   = 0x4\n\tETHTOOL_A_CABLE_PAIR_A                    = 0x0\n\tETHTOOL_A_CABLE_PAIR_B                    = 0x1\n\tETHTOOL_A_CABLE_PAIR_C                    = 0x2\n\tETHTOOL_A_CABLE_PAIR_D                    = 0x3\n\tETHTOOL_A_CABLE_RESULT_UNSPEC             = 0x0\n\tETHTOOL_A_CABLE_RESULT_PAIR               = 0x1\n\tETHTOOL_A_CABLE_RESULT_CODE               = 0x2\n\tETHTOOL_A_CABLE_RESULT_MAX                = 0x3\n\tETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC       = 0x0\n\tETHTOOL_A_CABLE_FAULT_LENGTH_PAIR         = 0x1\n\tETHTOOL_A_CABLE_FAULT_LENGTH_CM           = 0x2\n\tETHTOOL_A_CABLE_FAULT_LENGTH_MAX          = 0x3\n\tETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC    = 0x0\n\tETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED   = 0x1\n\tETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 0x2\n\tETHTOOL_A_CABLE_NEST_UNSPEC               = 0x0\n\tETHTOOL_A_CABLE_NEST_RESULT               = 0x1\n\tETHTOOL_A_CABLE_NEST_FAULT_LENGTH         = 0x2\n\tETHTOOL_A_CABLE_NEST_MAX                  = 0x2\n\tETHTOOL_A_CABLE_TEST_NTF_UNSPEC           = 0x0\n\tETHTOOL_A_CABLE_TEST_NTF_HEADER           = 0x1\n\tETHTOOL_A_CABLE_TEST_NTF_STATUS           = 0x2\n\tETHTOOL_A_CABLE_TEST_NTF_NEST             = 0x3\n\tETHTOOL_A_CABLE_TEST_NTF_MAX              = 0x3\n\tETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC       = 0x0\n\tETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST        = 0x1\n\tETHTOOL_A_CABLE_TEST_TDR_CFG_LAST         = 0x2\n\tETHTOOL_A_CABLE_TEST_TDR_CFG_STEP         = 0x3\n\tETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR         = 0x4\n\tETHTOOL_A_CABLE_TEST_TDR_CFG_MAX          = 0x4\n\tETHTOOL_A_CABLE_TEST_TDR_UNSPEC           = 0x0\n\tETHTOOL_A_CABLE_TEST_TDR_HEADER           = 0x1\n\tETHTOOL_A_CABLE_TEST_TDR_CFG              = 0x2\n\tETHTOOL_A_CABLE_TEST_TDR_MAX              = 0x2\n\tETHTOOL_A_CABLE_AMPLITUDE_UNSPEC          = 0x0\n\tETHTOOL_A_CABLE_AMPLITUDE_PAIR            = 0x1\n\tETHTOOL_A_CABLE_AMPLITUDE_mV              = 0x2\n\tETHTOOL_A_CABLE_AMPLITUDE_MAX             = 0x2\n\tETHTOOL_A_CABLE_PULSE_UNSPEC              = 0x0\n\tETHTOOL_A_CABLE_PULSE_mV                  = 0x1\n\tETHTOOL_A_CABLE_PULSE_MAX                 = 0x1\n\tETHTOOL_A_CABLE_STEP_UNSPEC               = 0x0\n\tETHTOOL_A_CABLE_STEP_FIRST_DISTANCE       = 0x1\n\tETHTOOL_A_CABLE_STEP_LAST_DISTANCE        = 0x2\n\tETHTOOL_A_CABLE_STEP_STEP_DISTANCE        = 0x3\n\tETHTOOL_A_CABLE_STEP_MAX                  = 0x3\n\tETHTOOL_A_CABLE_TDR_NEST_UNSPEC           = 0x0\n\tETHTOOL_A_CABLE_TDR_NEST_STEP             = 0x1\n\tETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE        = 0x2\n\tETHTOOL_A_CABLE_TDR_NEST_PULSE            = 0x3\n\tETHTOOL_A_CABLE_TDR_NEST_MAX              = 0x3\n\tETHTOOL_A_CABLE_TEST_TDR_NTF_UNSPEC       = 0x0\n\tETHTOOL_A_CABLE_TEST_TDR_NTF_HEADER       = 0x1\n\tETHTOOL_A_CABLE_TEST_TDR_NTF_STATUS       = 0x2\n\tETHTOOL_A_CABLE_TEST_TDR_NTF_NEST         = 0x3\n\tETHTOOL_A_CABLE_TEST_TDR_NTF_MAX          = 0x3\n\tETHTOOL_UDP_TUNNEL_TYPE_VXLAN             = 0x0\n\tETHTOOL_UDP_TUNNEL_TYPE_GENEVE            = 0x1\n\tETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE         = 0x2\n\tETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC         = 0x0\n\tETHTOOL_A_TUNNEL_UDP_ENTRY_PORT           = 0x1\n\tETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE           = 0x2\n\tETHTOOL_A_TUNNEL_UDP_ENTRY_MAX            = 0x2\n\tETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC         = 0x0\n\tETHTOOL_A_TUNNEL_UDP_TABLE_SIZE           = 0x1\n\tETHTOOL_A_TUNNEL_UDP_TABLE_TYPES          = 0x2\n\tETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY          = 0x3\n\tETHTOOL_A_TUNNEL_UDP_TABLE_MAX            = 0x3\n\tETHTOOL_A_TUNNEL_UDP_UNSPEC               = 0x0\n\tETHTOOL_A_TUNNEL_UDP_TABLE                = 0x1\n\tETHTOOL_A_TUNNEL_UDP_MAX                  = 0x1\n\tETHTOOL_A_TUNNEL_INFO_UNSPEC              = 0x0\n\tETHTOOL_A_TUNNEL_INFO_HEADER              = 0x1\n\tETHTOOL_A_TUNNEL_INFO_UDP_PORTS           = 0x2\n\tETHTOOL_A_TUNNEL_INFO_MAX                 = 0x2\n)\n\nconst (\n\tTCP_V4_FLOW    = 0x1\n\tUDP_V4_FLOW    = 0x2\n\tTCP_V6_FLOW    = 0x5\n\tUDP_V6_FLOW    = 0x6\n\tESP_V4_FLOW    = 0xa\n\tESP_V6_FLOW    = 0xc\n\tIP_USER_FLOW   = 0xd\n\tIPV6_USER_FLOW = 0xe\n\tIPV6_FLOW      = 0x11\n\tETHER_FLOW     = 0x12\n)\n\nconst SPEED_UNKNOWN = -0x1\n\ntype EthtoolDrvinfo struct {\n\tCmd          uint32\n\tDriver       [32]byte\n\tVersion      [32]byte\n\tFw_version   [32]byte\n\tBus_info     [32]byte\n\tErom_version [32]byte\n\tReserved2    [12]byte\n\tN_priv_flags uint32\n\tN_stats      uint32\n\tTestinfo_len uint32\n\tEedump_len   uint32\n\tRegdump_len  uint32\n}\n\ntype EthtoolTsInfo struct {\n\tCmd             uint32\n\tSo_timestamping uint32\n\tPhc_index       int32\n\tTx_types        uint32\n\tTx_reserved     [3]uint32\n\tRx_filters      uint32\n\tRx_reserved     [3]uint32\n}\n\ntype HwTstampConfig struct {\n\tFlags     int32\n\tTx_type   int32\n\tRx_filter int32\n}\n\nconst (\n\tHWTSTAMP_FILTER_NONE            = 0x0\n\tHWTSTAMP_FILTER_ALL             = 0x1\n\tHWTSTAMP_FILTER_SOME            = 0x2\n\tHWTSTAMP_FILTER_PTP_V1_L4_EVENT = 0x3\n\tHWTSTAMP_FILTER_PTP_V2_L4_EVENT = 0x6\n\tHWTSTAMP_FILTER_PTP_V2_L2_EVENT = 0x9\n\tHWTSTAMP_FILTER_PTP_V2_EVENT    = 0xc\n)\n\nconst (\n\tHWTSTAMP_TX_OFF          = 0x0\n\tHWTSTAMP_TX_ON           = 0x1\n\tHWTSTAMP_TX_ONESTEP_SYNC = 0x2\n)\n\ntype (\n\tPtpClockCaps struct {\n\t\tMax_adj            int32\n\t\tN_alarm            int32\n\t\tN_ext_ts           int32\n\t\tN_per_out          int32\n\t\tPps                int32\n\t\tN_pins             int32\n\t\tCross_timestamping int32\n\t\tAdjust_phase       int32\n\t\tMax_phase_adj      int32\n\t\tRsv                [11]int32\n\t}\n\tPtpClockTime struct {\n\t\tSec      int64\n\t\tNsec     uint32\n\t\tReserved uint32\n\t}\n\tPtpExttsEvent struct {\n\t\tT     PtpClockTime\n\t\tIndex uint32\n\t\tFlags uint32\n\t\tRsv   [2]uint32\n\t}\n\tPtpExttsRequest struct {\n\t\tIndex uint32\n\t\tFlags uint32\n\t\tRsv   [2]uint32\n\t}\n\tPtpPeroutRequest struct {\n\t\tStartOrPhase PtpClockTime\n\t\tPeriod       PtpClockTime\n\t\tIndex        uint32\n\t\tFlags        uint32\n\t\tOn           PtpClockTime\n\t}\n\tPtpPinDesc struct {\n\t\tName  [64]byte\n\t\tIndex uint32\n\t\tFunc  uint32\n\t\tChan  uint32\n\t\tRsv   [5]uint32\n\t}\n\tPtpSysOffset struct {\n\t\tSamples uint32\n\t\tRsv     [3]uint32\n\t\tTs      [51]PtpClockTime\n\t}\n\tPtpSysOffsetExtended struct {\n\t\tSamples uint32\n\t\tClockid int32\n\t\tRsv     [2]uint32\n\t\tTs      [25][3]PtpClockTime\n\t}\n\tPtpSysOffsetPrecise struct {\n\t\tDevice   PtpClockTime\n\t\tRealtime PtpClockTime\n\t\tMonoraw  PtpClockTime\n\t\tRsv      [4]uint32\n\t}\n)\n\nconst (\n\tPTP_PF_NONE    = 0x0\n\tPTP_PF_EXTTS   = 0x1\n\tPTP_PF_PEROUT  = 0x2\n\tPTP_PF_PHYSYNC = 0x3\n)\n\ntype (\n\tHIDRawReportDescriptor struct {\n\t\tSize  uint32\n\t\tValue [4096]uint8\n\t}\n\tHIDRawDevInfo struct {\n\t\tBustype uint32\n\t\tVendor  int16\n\t\tProduct int16\n\t}\n)\n\nconst (\n\tCLOSE_RANGE_UNSHARE = 0x2\n\tCLOSE_RANGE_CLOEXEC = 0x4\n)\n\nconst (\n\tNLMSGERR_ATTR_MSG    = 0x1\n\tNLMSGERR_ATTR_OFFS   = 0x2\n\tNLMSGERR_ATTR_COOKIE = 0x3\n)\n\ntype (\n\tEraseInfo struct {\n\t\tStart  uint32\n\t\tLength uint32\n\t}\n\tEraseInfo64 struct {\n\t\tStart  uint64\n\t\tLength uint64\n\t}\n\tMtdOobBuf struct {\n\t\tStart  uint32\n\t\tLength uint32\n\t\tPtr    *uint8\n\t}\n\tMtdOobBuf64 struct {\n\t\tStart  uint64\n\t\tPad    uint32\n\t\tLength uint32\n\t\tPtr    uint64\n\t}\n\tMtdWriteReq struct {\n\t\tStart  uint64\n\t\tLen    uint64\n\t\tOoblen uint64\n\t\tData   uint64\n\t\tOob    uint64\n\t\tMode   uint8\n\t\t_      [7]uint8\n\t}\n\tMtdInfo struct {\n\t\tType      uint8\n\t\tFlags     uint32\n\t\tSize      uint32\n\t\tErasesize uint32\n\t\tWritesize uint32\n\t\tOobsize   uint32\n\t\t_         uint64\n\t}\n\tRegionInfo struct {\n\t\tOffset      uint32\n\t\tErasesize   uint32\n\t\tNumblocks   uint32\n\t\tRegionindex uint32\n\t}\n\tOtpInfo struct {\n\t\tStart  uint32\n\t\tLength uint32\n\t\tLocked uint32\n\t}\n\tNandOobinfo struct {\n\t\tUseecc   uint32\n\t\tEccbytes uint32\n\t\tOobfree  [8][2]uint32\n\t\tEccpos   [32]uint32\n\t}\n\tNandOobfree struct {\n\t\tOffset uint32\n\t\tLength uint32\n\t}\n\tNandEcclayout struct {\n\t\tEccbytes uint32\n\t\tEccpos   [64]uint32\n\t\tOobavail uint32\n\t\tOobfree  [8]NandOobfree\n\t}\n\tMtdEccStats struct {\n\t\tCorrected uint32\n\t\tFailed    uint32\n\t\tBadblocks uint32\n\t\tBbtblocks uint32\n\t}\n)\n\nconst (\n\tMTD_OPS_PLACE_OOB = 0x0\n\tMTD_OPS_AUTO_OOB  = 0x1\n\tMTD_OPS_RAW       = 0x2\n)\n\nconst (\n\tMTD_FILE_MODE_NORMAL      = 0x0\n\tMTD_FILE_MODE_OTP_FACTORY = 0x1\n\tMTD_FILE_MODE_OTP_USER    = 0x2\n\tMTD_FILE_MODE_RAW         = 0x3\n)\n\nconst (\n\tNFC_CMD_UNSPEC                    = 0x0\n\tNFC_CMD_GET_DEVICE                = 0x1\n\tNFC_CMD_DEV_UP                    = 0x2\n\tNFC_CMD_DEV_DOWN                  = 0x3\n\tNFC_CMD_DEP_LINK_UP               = 0x4\n\tNFC_CMD_DEP_LINK_DOWN             = 0x5\n\tNFC_CMD_START_POLL                = 0x6\n\tNFC_CMD_STOP_POLL                 = 0x7\n\tNFC_CMD_GET_TARGET                = 0x8\n\tNFC_EVENT_TARGETS_FOUND           = 0x9\n\tNFC_EVENT_DEVICE_ADDED            = 0xa\n\tNFC_EVENT_DEVICE_REMOVED          = 0xb\n\tNFC_EVENT_TARGET_LOST             = 0xc\n\tNFC_EVENT_TM_ACTIVATED            = 0xd\n\tNFC_EVENT_TM_DEACTIVATED          = 0xe\n\tNFC_CMD_LLC_GET_PARAMS            = 0xf\n\tNFC_CMD_LLC_SET_PARAMS            = 0x10\n\tNFC_CMD_ENABLE_SE                 = 0x11\n\tNFC_CMD_DISABLE_SE                = 0x12\n\tNFC_CMD_LLC_SDREQ                 = 0x13\n\tNFC_EVENT_LLC_SDRES               = 0x14\n\tNFC_CMD_FW_DOWNLOAD               = 0x15\n\tNFC_EVENT_SE_ADDED                = 0x16\n\tNFC_EVENT_SE_REMOVED              = 0x17\n\tNFC_EVENT_SE_CONNECTIVITY         = 0x18\n\tNFC_EVENT_SE_TRANSACTION          = 0x19\n\tNFC_CMD_GET_SE                    = 0x1a\n\tNFC_CMD_SE_IO                     = 0x1b\n\tNFC_CMD_ACTIVATE_TARGET           = 0x1c\n\tNFC_CMD_VENDOR                    = 0x1d\n\tNFC_CMD_DEACTIVATE_TARGET         = 0x1e\n\tNFC_ATTR_UNSPEC                   = 0x0\n\tNFC_ATTR_DEVICE_INDEX             = 0x1\n\tNFC_ATTR_DEVICE_NAME              = 0x2\n\tNFC_ATTR_PROTOCOLS                = 0x3\n\tNFC_ATTR_TARGET_INDEX             = 0x4\n\tNFC_ATTR_TARGET_SENS_RES          = 0x5\n\tNFC_ATTR_TARGET_SEL_RES           = 0x6\n\tNFC_ATTR_TARGET_NFCID1            = 0x7\n\tNFC_ATTR_TARGET_SENSB_RES         = 0x8\n\tNFC_ATTR_TARGET_SENSF_RES         = 0x9\n\tNFC_ATTR_COMM_MODE                = 0xa\n\tNFC_ATTR_RF_MODE                  = 0xb\n\tNFC_ATTR_DEVICE_POWERED           = 0xc\n\tNFC_ATTR_IM_PROTOCOLS             = 0xd\n\tNFC_ATTR_TM_PROTOCOLS             = 0xe\n\tNFC_ATTR_LLC_PARAM_LTO            = 0xf\n\tNFC_ATTR_LLC_PARAM_RW             = 0x10\n\tNFC_ATTR_LLC_PARAM_MIUX           = 0x11\n\tNFC_ATTR_SE                       = 0x12\n\tNFC_ATTR_LLC_SDP                  = 0x13\n\tNFC_ATTR_FIRMWARE_NAME            = 0x14\n\tNFC_ATTR_SE_INDEX                 = 0x15\n\tNFC_ATTR_SE_TYPE                  = 0x16\n\tNFC_ATTR_SE_AID                   = 0x17\n\tNFC_ATTR_FIRMWARE_DOWNLOAD_STATUS = 0x18\n\tNFC_ATTR_SE_APDU                  = 0x19\n\tNFC_ATTR_TARGET_ISO15693_DSFID    = 0x1a\n\tNFC_ATTR_TARGET_ISO15693_UID      = 0x1b\n\tNFC_ATTR_SE_PARAMS                = 0x1c\n\tNFC_ATTR_VENDOR_ID                = 0x1d\n\tNFC_ATTR_VENDOR_SUBCMD            = 0x1e\n\tNFC_ATTR_VENDOR_DATA              = 0x1f\n\tNFC_SDP_ATTR_UNSPEC               = 0x0\n\tNFC_SDP_ATTR_URI                  = 0x1\n\tNFC_SDP_ATTR_SAP                  = 0x2\n)\n\ntype LandlockRulesetAttr struct {\n\tAccess_fs  uint64\n\tAccess_net uint64\n\tScoped     uint64\n}\n\ntype LandlockPathBeneathAttr struct {\n\tAllowed_access uint64\n\tParent_fd      int32\n}\n\nconst (\n\tLANDLOCK_RULE_PATH_BENEATH = 0x1\n)\n\nconst (\n\tIPC_CREAT   = 0x200\n\tIPC_EXCL    = 0x400\n\tIPC_NOWAIT  = 0x800\n\tIPC_PRIVATE = 0x0\n\n\tipc_64 = 0x100\n)\n\nconst (\n\tIPC_RMID = 0x0\n\tIPC_SET  = 0x1\n\tIPC_STAT = 0x2\n)\n\nconst (\n\tSHM_RDONLY = 0x1000\n\tSHM_RND    = 0x2000\n)\n\ntype MountAttr struct {\n\tAttr_set    uint64\n\tAttr_clr    uint64\n\tPropagation uint64\n\tUserns_fd   uint64\n}\n\nconst (\n\tWG_CMD_GET_DEVICE                      = 0x0\n\tWG_CMD_SET_DEVICE                      = 0x1\n\tWGDEVICE_F_REPLACE_PEERS               = 0x1\n\tWGDEVICE_A_UNSPEC                      = 0x0\n\tWGDEVICE_A_IFINDEX                     = 0x1\n\tWGDEVICE_A_IFNAME                      = 0x2\n\tWGDEVICE_A_PRIVATE_KEY                 = 0x3\n\tWGDEVICE_A_PUBLIC_KEY                  = 0x4\n\tWGDEVICE_A_FLAGS                       = 0x5\n\tWGDEVICE_A_LISTEN_PORT                 = 0x6\n\tWGDEVICE_A_FWMARK                      = 0x7\n\tWGDEVICE_A_PEERS                       = 0x8\n\tWGPEER_F_REMOVE_ME                     = 0x1\n\tWGPEER_F_REPLACE_ALLOWEDIPS            = 0x2\n\tWGPEER_F_UPDATE_ONLY                   = 0x4\n\tWGPEER_A_UNSPEC                        = 0x0\n\tWGPEER_A_PUBLIC_KEY                    = 0x1\n\tWGPEER_A_PRESHARED_KEY                 = 0x2\n\tWGPEER_A_FLAGS                         = 0x3\n\tWGPEER_A_ENDPOINT                      = 0x4\n\tWGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL = 0x5\n\tWGPEER_A_LAST_HANDSHAKE_TIME           = 0x6\n\tWGPEER_A_RX_BYTES                      = 0x7\n\tWGPEER_A_TX_BYTES                      = 0x8\n\tWGPEER_A_ALLOWEDIPS                    = 0x9\n\tWGPEER_A_PROTOCOL_VERSION              = 0xa\n\tWGALLOWEDIP_A_UNSPEC                   = 0x0\n\tWGALLOWEDIP_A_FAMILY                   = 0x1\n\tWGALLOWEDIP_A_IPADDR                   = 0x2\n\tWGALLOWEDIP_A_CIDR_MASK                = 0x3\n)\n\nconst (\n\tNL_ATTR_TYPE_INVALID      = 0x0\n\tNL_ATTR_TYPE_FLAG         = 0x1\n\tNL_ATTR_TYPE_U8           = 0x2\n\tNL_ATTR_TYPE_U16          = 0x3\n\tNL_ATTR_TYPE_U32          = 0x4\n\tNL_ATTR_TYPE_U64          = 0x5\n\tNL_ATTR_TYPE_S8           = 0x6\n\tNL_ATTR_TYPE_S16          = 0x7\n\tNL_ATTR_TYPE_S32          = 0x8\n\tNL_ATTR_TYPE_S64          = 0x9\n\tNL_ATTR_TYPE_BINARY       = 0xa\n\tNL_ATTR_TYPE_STRING       = 0xb\n\tNL_ATTR_TYPE_NUL_STRING   = 0xc\n\tNL_ATTR_TYPE_NESTED       = 0xd\n\tNL_ATTR_TYPE_NESTED_ARRAY = 0xe\n\tNL_ATTR_TYPE_BITFIELD32   = 0xf\n\n\tNL_POLICY_TYPE_ATTR_UNSPEC          = 0x0\n\tNL_POLICY_TYPE_ATTR_TYPE            = 0x1\n\tNL_POLICY_TYPE_ATTR_MIN_VALUE_S     = 0x2\n\tNL_POLICY_TYPE_ATTR_MAX_VALUE_S     = 0x3\n\tNL_POLICY_TYPE_ATTR_MIN_VALUE_U     = 0x4\n\tNL_POLICY_TYPE_ATTR_MAX_VALUE_U     = 0x5\n\tNL_POLICY_TYPE_ATTR_MIN_LENGTH      = 0x6\n\tNL_POLICY_TYPE_ATTR_MAX_LENGTH      = 0x7\n\tNL_POLICY_TYPE_ATTR_POLICY_IDX      = 0x8\n\tNL_POLICY_TYPE_ATTR_POLICY_MAXTYPE  = 0x9\n\tNL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 0xa\n\tNL_POLICY_TYPE_ATTR_PAD             = 0xb\n\tNL_POLICY_TYPE_ATTR_MASK            = 0xc\n\tNL_POLICY_TYPE_ATTR_MAX             = 0xc\n)\n\ntype CANBitTiming struct {\n\tBitrate      uint32\n\tSample_point uint32\n\tTq           uint32\n\tProp_seg     uint32\n\tPhase_seg1   uint32\n\tPhase_seg2   uint32\n\tSjw          uint32\n\tBrp          uint32\n}\n\ntype CANBitTimingConst struct {\n\tName      [16]uint8\n\tTseg1_min uint32\n\tTseg1_max uint32\n\tTseg2_min uint32\n\tTseg2_max uint32\n\tSjw_max   uint32\n\tBrp_min   uint32\n\tBrp_max   uint32\n\tBrp_inc   uint32\n}\n\ntype CANClock struct {\n\tFreq uint32\n}\n\ntype CANBusErrorCounters struct {\n\tTxerr uint16\n\tRxerr uint16\n}\n\ntype CANCtrlMode struct {\n\tMask  uint32\n\tFlags uint32\n}\n\ntype CANDeviceStats struct {\n\tBus_error        uint32\n\tError_warning    uint32\n\tError_passive    uint32\n\tBus_off          uint32\n\tArbitration_lost uint32\n\tRestarts         uint32\n}\n\nconst (\n\tCAN_STATE_ERROR_ACTIVE  = 0x0\n\tCAN_STATE_ERROR_WARNING = 0x1\n\tCAN_STATE_ERROR_PASSIVE = 0x2\n\tCAN_STATE_BUS_OFF       = 0x3\n\tCAN_STATE_STOPPED       = 0x4\n\tCAN_STATE_SLEEPING      = 0x5\n\tCAN_STATE_MAX           = 0x6\n)\n\nconst (\n\tIFLA_CAN_UNSPEC               = 0x0\n\tIFLA_CAN_BITTIMING            = 0x1\n\tIFLA_CAN_BITTIMING_CONST      = 0x2\n\tIFLA_CAN_CLOCK                = 0x3\n\tIFLA_CAN_STATE                = 0x4\n\tIFLA_CAN_CTRLMODE             = 0x5\n\tIFLA_CAN_RESTART_MS           = 0x6\n\tIFLA_CAN_RESTART              = 0x7\n\tIFLA_CAN_BERR_COUNTER         = 0x8\n\tIFLA_CAN_DATA_BITTIMING       = 0x9\n\tIFLA_CAN_DATA_BITTIMING_CONST = 0xa\n\tIFLA_CAN_TERMINATION          = 0xb\n\tIFLA_CAN_TERMINATION_CONST    = 0xc\n\tIFLA_CAN_BITRATE_CONST        = 0xd\n\tIFLA_CAN_DATA_BITRATE_CONST   = 0xe\n\tIFLA_CAN_BITRATE_MAX          = 0xf\n)\n\ntype KCMAttach struct {\n\tFd     int32\n\tBpf_fd int32\n}\n\ntype KCMUnattach struct {\n\tFd int32\n}\n\ntype KCMClone struct {\n\tFd int32\n}\n\nconst (\n\tNL80211_AC_BE                                           = 0x2\n\tNL80211_AC_BK                                           = 0x3\n\tNL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED                 = 0x0\n\tNL80211_ACL_POLICY_DENY_UNLESS_LISTED                   = 0x1\n\tNL80211_AC_VI                                           = 0x1\n\tNL80211_AC_VO                                           = 0x0\n\tNL80211_AP_SETTINGS_EXTERNAL_AUTH_SUPPORT               = 0x1\n\tNL80211_AP_SETTINGS_SA_QUERY_OFFLOAD_SUPPORT            = 0x2\n\tNL80211_AP_SME_SA_QUERY_OFFLOAD                         = 0x1\n\tNL80211_ATTR_4ADDR                                      = 0x53\n\tNL80211_ATTR_ACK                                        = 0x5c\n\tNL80211_ATTR_ACK_SIGNAL                                 = 0x107\n\tNL80211_ATTR_ACL_POLICY                                 = 0xa5\n\tNL80211_ATTR_ADMITTED_TIME                              = 0xd4\n\tNL80211_ATTR_AIRTIME_WEIGHT                             = 0x112\n\tNL80211_ATTR_AKM_SUITES                                 = 0x4c\n\tNL80211_ATTR_AP_ISOLATE                                 = 0x60\n\tNL80211_ATTR_AP_SETTINGS_FLAGS                          = 0x135\n\tNL80211_ATTR_ASSOC_SPP_AMSDU                            = 0x14a\n\tNL80211_ATTR_AUTH_DATA                                  = 0x9c\n\tNL80211_ATTR_AUTH_TYPE                                  = 0x35\n\tNL80211_ATTR_BANDS                                      = 0xef\n\tNL80211_ATTR_BEACON_HEAD                                = 0xe\n\tNL80211_ATTR_BEACON_INTERVAL                            = 0xc\n\tNL80211_ATTR_BEACON_TAIL                                = 0xf\n\tNL80211_ATTR_BG_SCAN_PERIOD                             = 0x98\n\tNL80211_ATTR_BSS_BASIC_RATES                            = 0x24\n\tNL80211_ATTR_BSS                                        = 0x2f\n\tNL80211_ATTR_BSS_CTS_PROT                               = 0x1c\n\tNL80211_ATTR_BSS_DUMP_INCLUDE_USE_DATA                  = 0x147\n\tNL80211_ATTR_BSS_HT_OPMODE                              = 0x6d\n\tNL80211_ATTR_BSSID                                      = 0xf5\n\tNL80211_ATTR_BSS_SELECT                                 = 0xe3\n\tNL80211_ATTR_BSS_SHORT_PREAMBLE                         = 0x1d\n\tNL80211_ATTR_BSS_SHORT_SLOT_TIME                        = 0x1e\n\tNL80211_ATTR_CENTER_FREQ1                               = 0xa0\n\tNL80211_ATTR_CENTER_FREQ1_OFFSET                        = 0x123\n\tNL80211_ATTR_CENTER_FREQ2                               = 0xa1\n\tNL80211_ATTR_CHANNEL_WIDTH                              = 0x9f\n\tNL80211_ATTR_CH_SWITCH_BLOCK_TX                         = 0xb8\n\tNL80211_ATTR_CH_SWITCH_COUNT                            = 0xb7\n\tNL80211_ATTR_CIPHER_SUITE_GROUP                         = 0x4a\n\tNL80211_ATTR_CIPHER_SUITES                              = 0x39\n\tNL80211_ATTR_CIPHER_SUITES_PAIRWISE                     = 0x49\n\tNL80211_ATTR_CNTDWN_OFFS_BEACON                         = 0xba\n\tNL80211_ATTR_CNTDWN_OFFS_PRESP                          = 0xbb\n\tNL80211_ATTR_COALESCE_RULE                              = 0xb6\n\tNL80211_ATTR_COALESCE_RULE_CONDITION                    = 0x2\n\tNL80211_ATTR_COALESCE_RULE_DELAY                        = 0x1\n\tNL80211_ATTR_COALESCE_RULE_MAX                          = 0x3\n\tNL80211_ATTR_COALESCE_RULE_PKT_PATTERN                  = 0x3\n\tNL80211_ATTR_COLOR_CHANGE_COLOR                         = 0x130\n\tNL80211_ATTR_COLOR_CHANGE_COUNT                         = 0x12f\n\tNL80211_ATTR_COLOR_CHANGE_ELEMS                         = 0x131\n\tNL80211_ATTR_CONN_FAILED_REASON                         = 0x9b\n\tNL80211_ATTR_CONTROL_PORT                               = 0x44\n\tNL80211_ATTR_CONTROL_PORT_ETHERTYPE                     = 0x66\n\tNL80211_ATTR_CONTROL_PORT_NO_ENCRYPT                    = 0x67\n\tNL80211_ATTR_CONTROL_PORT_NO_PREAUTH                    = 0x11e\n\tNL80211_ATTR_CONTROL_PORT_OVER_NL80211                  = 0x108\n\tNL80211_ATTR_COOKIE                                     = 0x58\n\tNL80211_ATTR_CQM_BEACON_LOSS_EVENT                      = 0x8\n\tNL80211_ATTR_CQM                                        = 0x5e\n\tNL80211_ATTR_CQM_MAX                                    = 0x9\n\tNL80211_ATTR_CQM_PKT_LOSS_EVENT                         = 0x4\n\tNL80211_ATTR_CQM_RSSI_HYST                              = 0x2\n\tNL80211_ATTR_CQM_RSSI_LEVEL                             = 0x9\n\tNL80211_ATTR_CQM_RSSI_THOLD                             = 0x1\n\tNL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT                   = 0x3\n\tNL80211_ATTR_CQM_TXE_INTVL                              = 0x7\n\tNL80211_ATTR_CQM_TXE_PKTS                               = 0x6\n\tNL80211_ATTR_CQM_TXE_RATE                               = 0x5\n\tNL80211_ATTR_CRIT_PROT_ID                               = 0xb3\n\tNL80211_ATTR_CSA_C_OFF_BEACON                           = 0xba\n\tNL80211_ATTR_CSA_C_OFF_PRESP                            = 0xbb\n\tNL80211_ATTR_CSA_C_OFFSETS_TX                           = 0xcd\n\tNL80211_ATTR_CSA_IES                                    = 0xb9\n\tNL80211_ATTR_DEVICE_AP_SME                              = 0x8d\n\tNL80211_ATTR_DFS_CAC_TIME                               = 0x7\n\tNL80211_ATTR_DFS_REGION                                 = 0x92\n\tNL80211_ATTR_DISABLE_EHT                                = 0x137\n\tNL80211_ATTR_DISABLE_HE                                 = 0x12d\n\tNL80211_ATTR_DISABLE_HT                                 = 0x93\n\tNL80211_ATTR_DISABLE_VHT                                = 0xaf\n\tNL80211_ATTR_DISCONNECTED_BY_AP                         = 0x47\n\tNL80211_ATTR_DONT_WAIT_FOR_ACK                          = 0x8e\n\tNL80211_ATTR_DTIM_PERIOD                                = 0xd\n\tNL80211_ATTR_DURATION                                   = 0x57\n\tNL80211_ATTR_EHT_CAPABILITY                             = 0x136\n\tNL80211_ATTR_EMA_RNR_ELEMS                              = 0x145\n\tNL80211_ATTR_EML_CAPABILITY                             = 0x13d\n\tNL80211_ATTR_EXT_CAPA                                   = 0xa9\n\tNL80211_ATTR_EXT_CAPA_MASK                              = 0xaa\n\tNL80211_ATTR_EXTERNAL_AUTH_ACTION                       = 0x104\n\tNL80211_ATTR_EXTERNAL_AUTH_SUPPORT                      = 0x105\n\tNL80211_ATTR_EXT_FEATURES                               = 0xd9\n\tNL80211_ATTR_FEATURE_FLAGS                              = 0x8f\n\tNL80211_ATTR_FILS_CACHE_ID                              = 0xfd\n\tNL80211_ATTR_FILS_DISCOVERY                             = 0x126\n\tNL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM                      = 0xfb\n\tNL80211_ATTR_FILS_ERP_REALM                             = 0xfa\n\tNL80211_ATTR_FILS_ERP_RRK                               = 0xfc\n\tNL80211_ATTR_FILS_ERP_USERNAME                          = 0xf9\n\tNL80211_ATTR_FILS_KEK                                   = 0xf2\n\tNL80211_ATTR_FILS_NONCES                                = 0xf3\n\tNL80211_ATTR_FRAME                                      = 0x33\n\tNL80211_ATTR_FRAME_MATCH                                = 0x5b\n\tNL80211_ATTR_FRAME_TYPE                                 = 0x65\n\tNL80211_ATTR_FREQ_AFTER                                 = 0x3b\n\tNL80211_ATTR_FREQ_BEFORE                                = 0x3a\n\tNL80211_ATTR_FREQ_FIXED                                 = 0x3c\n\tNL80211_ATTR_FREQ_RANGE_END                             = 0x3\n\tNL80211_ATTR_FREQ_RANGE_MAX_BW                          = 0x4\n\tNL80211_ATTR_FREQ_RANGE_START                           = 0x2\n\tNL80211_ATTR_FTM_RESPONDER                              = 0x10e\n\tNL80211_ATTR_FTM_RESPONDER_STATS                        = 0x10f\n\tNL80211_ATTR_GENERATION                                 = 0x2e\n\tNL80211_ATTR_HANDLE_DFS                                 = 0xbf\n\tNL80211_ATTR_HE_6GHZ_CAPABILITY                         = 0x125\n\tNL80211_ATTR_HE_BSS_COLOR                               = 0x11b\n\tNL80211_ATTR_HE_CAPABILITY                              = 0x10d\n\tNL80211_ATTR_HE_OBSS_PD                                 = 0x117\n\tNL80211_ATTR_HIDDEN_SSID                                = 0x7e\n\tNL80211_ATTR_HT_CAPABILITY                              = 0x1f\n\tNL80211_ATTR_HT_CAPABILITY_MASK                         = 0x94\n\tNL80211_ATTR_HW_TIMESTAMP_ENABLED                       = 0x144\n\tNL80211_ATTR_IE_ASSOC_RESP                              = 0x80\n\tNL80211_ATTR_IE                                         = 0x2a\n\tNL80211_ATTR_IE_PROBE_RESP                              = 0x7f\n\tNL80211_ATTR_IE_RIC                                     = 0xb2\n\tNL80211_ATTR_IFACE_SOCKET_OWNER                         = 0xcc\n\tNL80211_ATTR_IFINDEX                                    = 0x3\n\tNL80211_ATTR_IFNAME                                     = 0x4\n\tNL80211_ATTR_IFTYPE_AKM_SUITES                          = 0x11c\n\tNL80211_ATTR_IFTYPE                                     = 0x5\n\tNL80211_ATTR_IFTYPE_EXT_CAPA                            = 0xe6\n\tNL80211_ATTR_INACTIVITY_TIMEOUT                         = 0x96\n\tNL80211_ATTR_INTERFACE_COMBINATIONS                     = 0x78\n\tNL80211_ATTR_KEY_CIPHER                                 = 0x9\n\tNL80211_ATTR_KEY                                        = 0x50\n\tNL80211_ATTR_KEY_DATA                                   = 0x7\n\tNL80211_ATTR_KEY_DEFAULT                                = 0xb\n\tNL80211_ATTR_KEY_DEFAULT_MGMT                           = 0x28\n\tNL80211_ATTR_KEY_DEFAULT_TYPES                          = 0x6e\n\tNL80211_ATTR_KEY_IDX                                    = 0x8\n\tNL80211_ATTR_KEYS                                       = 0x51\n\tNL80211_ATTR_KEY_SEQ                                    = 0xa\n\tNL80211_ATTR_KEY_TYPE                                   = 0x37\n\tNL80211_ATTR_LOCAL_MESH_POWER_MODE                      = 0xa4\n\tNL80211_ATTR_LOCAL_STATE_CHANGE                         = 0x5f\n\tNL80211_ATTR_MAC_ACL_MAX                                = 0xa7\n\tNL80211_ATTR_MAC_ADDRS                                  = 0xa6\n\tNL80211_ATTR_MAC                                        = 0x6\n\tNL80211_ATTR_MAC_HINT                                   = 0xc8\n\tNL80211_ATTR_MAC_MASK                                   = 0xd7\n\tNL80211_ATTR_MAX_AP_ASSOC_STA                           = 0xca\n\tNL80211_ATTR_MAX                                        = 0x151\n\tNL80211_ATTR_MAX_CRIT_PROT_DURATION                     = 0xb4\n\tNL80211_ATTR_MAX_CSA_COUNTERS                           = 0xce\n\tNL80211_ATTR_MAX_HW_TIMESTAMP_PEERS                     = 0x143\n\tNL80211_ATTR_MAX_MATCH_SETS                             = 0x85\n\tNL80211_ATTR_MAX_NUM_AKM_SUITES                         = 0x13c\n\tNL80211_ATTR_MAX_NUM_PMKIDS                             = 0x56\n\tNL80211_ATTR_MAX_NUM_SCAN_SSIDS                         = 0x2b\n\tNL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS                   = 0xde\n\tNL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS                   = 0x7b\n\tNL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION             = 0x6f\n\tNL80211_ATTR_MAX_SCAN_IE_LEN                            = 0x38\n\tNL80211_ATTR_MAX_SCAN_PLAN_INTERVAL                     = 0xdf\n\tNL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS                   = 0xe0\n\tNL80211_ATTR_MAX_SCHED_SCAN_IE_LEN                      = 0x7c\n\tNL80211_ATTR_MBSSID_CONFIG                              = 0x132\n\tNL80211_ATTR_MBSSID_ELEMS                               = 0x133\n\tNL80211_ATTR_MCAST_RATE                                 = 0x6b\n\tNL80211_ATTR_MDID                                       = 0xb1\n\tNL80211_ATTR_MEASUREMENT_DURATION                       = 0xeb\n\tNL80211_ATTR_MEASUREMENT_DURATION_MANDATORY             = 0xec\n\tNL80211_ATTR_MESH_CONFIG                                = 0x23\n\tNL80211_ATTR_MESH_ID                                    = 0x18\n\tNL80211_ATTR_MESH_PEER_AID                              = 0xed\n\tNL80211_ATTR_MESH_SETUP                                 = 0x70\n\tNL80211_ATTR_MGMT_SUBTYPE                               = 0x29\n\tNL80211_ATTR_MLD_ADDR                                   = 0x13a\n\tNL80211_ATTR_MLD_CAPA_AND_OPS                           = 0x13e\n\tNL80211_ATTR_MLO_LINK_DISABLED                          = 0x146\n\tNL80211_ATTR_MLO_LINK_ID                                = 0x139\n\tNL80211_ATTR_MLO_LINKS                                  = 0x138\n\tNL80211_ATTR_MLO_SUPPORT                                = 0x13b\n\tNL80211_ATTR_MLO_TTLM_DLINK                             = 0x148\n\tNL80211_ATTR_MLO_TTLM_ULINK                             = 0x149\n\tNL80211_ATTR_MNTR_FLAGS                                 = 0x17\n\tNL80211_ATTR_MPATH_INFO                                 = 0x1b\n\tNL80211_ATTR_MPATH_NEXT_HOP                             = 0x1a\n\tNL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED               = 0xf4\n\tNL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR                    = 0xe8\n\tNL80211_ATTR_MU_MIMO_GROUP_DATA                         = 0xe7\n\tNL80211_ATTR_NAN_FUNC                                   = 0xf0\n\tNL80211_ATTR_NAN_MASTER_PREF                            = 0xee\n\tNL80211_ATTR_NAN_MATCH                                  = 0xf1\n\tNL80211_ATTR_NETNS_FD                                   = 0xdb\n\tNL80211_ATTR_NOACK_MAP                                  = 0x95\n\tNL80211_ATTR_NSS                                        = 0x106\n\tNL80211_ATTR_OBSS_COLOR_BITMAP                          = 0x12e\n\tNL80211_ATTR_OFFCHANNEL_TX_OK                           = 0x6c\n\tNL80211_ATTR_OPER_CLASS                                 = 0xd6\n\tNL80211_ATTR_OPMODE_NOTIF                               = 0xc2\n\tNL80211_ATTR_P2P_CTWINDOW                               = 0xa2\n\tNL80211_ATTR_P2P_OPPPS                                  = 0xa3\n\tNL80211_ATTR_PAD                                        = 0xe5\n\tNL80211_ATTR_PBSS                                       = 0xe2\n\tNL80211_ATTR_PEER_AID                                   = 0xb5\n\tNL80211_ATTR_PEER_MEASUREMENTS                          = 0x111\n\tNL80211_ATTR_PID                                        = 0x52\n\tNL80211_ATTR_PMK                                        = 0xfe\n\tNL80211_ATTR_PMKID                                      = 0x55\n\tNL80211_ATTR_PMK_LIFETIME                               = 0x11f\n\tNL80211_ATTR_PMKR0_NAME                                 = 0x102\n\tNL80211_ATTR_PMK_REAUTH_THRESHOLD                       = 0x120\n\tNL80211_ATTR_PMKSA_CANDIDATE                            = 0x86\n\tNL80211_ATTR_PORT_AUTHORIZED                            = 0x103\n\tNL80211_ATTR_POWER_RULE_MAX_ANT_GAIN                    = 0x5\n\tNL80211_ATTR_POWER_RULE_MAX_EIRP                        = 0x6\n\tNL80211_ATTR_POWER_RULE_PSD                             = 0x8\n\tNL80211_ATTR_PREV_BSSID                                 = 0x4f\n\tNL80211_ATTR_PRIVACY                                    = 0x46\n\tNL80211_ATTR_PROBE_RESP                                 = 0x91\n\tNL80211_ATTR_PROBE_RESP_OFFLOAD                         = 0x90\n\tNL80211_ATTR_PROTOCOL_FEATURES                          = 0xad\n\tNL80211_ATTR_PS_STATE                                   = 0x5d\n\tNL80211_ATTR_PUNCT_BITMAP                               = 0x142\n\tNL80211_ATTR_QOS_MAP                                    = 0xc7\n\tNL80211_ATTR_RADAR_BACKGROUND                           = 0x134\n\tNL80211_ATTR_RADAR_EVENT                                = 0xa8\n\tNL80211_ATTR_REASON_CODE                                = 0x36\n\tNL80211_ATTR_RECEIVE_MULTICAST                          = 0x121\n\tNL80211_ATTR_RECONNECT_REQUESTED                        = 0x12b\n\tNL80211_ATTR_REG_ALPHA2                                 = 0x21\n\tNL80211_ATTR_REG_INDOOR                                 = 0xdd\n\tNL80211_ATTR_REG_INITIATOR                              = 0x30\n\tNL80211_ATTR_REG_RULE_FLAGS                             = 0x1\n\tNL80211_ATTR_REG_RULES                                  = 0x22\n\tNL80211_ATTR_REG_TYPE                                   = 0x31\n\tNL80211_ATTR_REKEY_DATA                                 = 0x7a\n\tNL80211_ATTR_REQ_IE                                     = 0x4d\n\tNL80211_ATTR_RESP_IE                                    = 0x4e\n\tNL80211_ATTR_ROAM_SUPPORT                               = 0x83\n\tNL80211_ATTR_RX_FRAME_TYPES                             = 0x64\n\tNL80211_ATTR_RX_HW_TIMESTAMP                            = 0x140\n\tNL80211_ATTR_RXMGMT_FLAGS                               = 0xbc\n\tNL80211_ATTR_RX_SIGNAL_DBM                              = 0x97\n\tNL80211_ATTR_S1G_CAPABILITY                             = 0x128\n\tNL80211_ATTR_S1G_CAPABILITY_MASK                        = 0x129\n\tNL80211_ATTR_SAE_DATA                                   = 0x9c\n\tNL80211_ATTR_SAE_PASSWORD                               = 0x115\n\tNL80211_ATTR_SAE_PWE                                    = 0x12a\n\tNL80211_ATTR_SAR_SPEC                                   = 0x12c\n\tNL80211_ATTR_SCAN_FLAGS                                 = 0x9e\n\tNL80211_ATTR_SCAN_FREQ_KHZ                              = 0x124\n\tNL80211_ATTR_SCAN_FREQUENCIES                           = 0x2c\n\tNL80211_ATTR_SCAN_GENERATION                            = 0x2e\n\tNL80211_ATTR_SCAN_SSIDS                                 = 0x2d\n\tNL80211_ATTR_SCAN_START_TIME_TSF_BSSID                  = 0xea\n\tNL80211_ATTR_SCAN_START_TIME_TSF                        = 0xe9\n\tNL80211_ATTR_SCAN_SUPP_RATES                            = 0x7d\n\tNL80211_ATTR_SCHED_SCAN_DELAY                           = 0xdc\n\tNL80211_ATTR_SCHED_SCAN_INTERVAL                        = 0x77\n\tNL80211_ATTR_SCHED_SCAN_MATCH                           = 0x84\n\tNL80211_ATTR_SCHED_SCAN_MATCH_SSID                      = 0x1\n\tNL80211_ATTR_SCHED_SCAN_MAX_REQS                        = 0x100\n\tNL80211_ATTR_SCHED_SCAN_MULTI                           = 0xff\n\tNL80211_ATTR_SCHED_SCAN_PLANS                           = 0xe1\n\tNL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI                   = 0xf6\n\tNL80211_ATTR_SCHED_SCAN_RSSI_ADJUST                     = 0xf7\n\tNL80211_ATTR_SMPS_MODE                                  = 0xd5\n\tNL80211_ATTR_SOCKET_OWNER                               = 0xcc\n\tNL80211_ATTR_SOFTWARE_IFTYPES                           = 0x79\n\tNL80211_ATTR_SPLIT_WIPHY_DUMP                           = 0xae\n\tNL80211_ATTR_SSID                                       = 0x34\n\tNL80211_ATTR_STA_AID                                    = 0x10\n\tNL80211_ATTR_STA_CAPABILITY                             = 0xab\n\tNL80211_ATTR_STA_EXT_CAPABILITY                         = 0xac\n\tNL80211_ATTR_STA_FLAGS2                                 = 0x43\n\tNL80211_ATTR_STA_FLAGS                                  = 0x11\n\tNL80211_ATTR_STA_INFO                                   = 0x15\n\tNL80211_ATTR_STA_LISTEN_INTERVAL                        = 0x12\n\tNL80211_ATTR_STA_PLINK_ACTION                           = 0x19\n\tNL80211_ATTR_STA_PLINK_STATE                            = 0x74\n\tNL80211_ATTR_STA_SUPPORTED_CHANNELS                     = 0xbd\n\tNL80211_ATTR_STA_SUPPORTED_OPER_CLASSES                 = 0xbe\n\tNL80211_ATTR_STA_SUPPORTED_RATES                        = 0x13\n\tNL80211_ATTR_STA_SUPPORT_P2P_PS                         = 0xe4\n\tNL80211_ATTR_STATUS_CODE                                = 0x48\n\tNL80211_ATTR_STA_TX_POWER                               = 0x114\n\tNL80211_ATTR_STA_TX_POWER_SETTING                       = 0x113\n\tNL80211_ATTR_STA_VLAN                                   = 0x14\n\tNL80211_ATTR_STA_WME                                    = 0x81\n\tNL80211_ATTR_SUPPORT_10_MHZ                             = 0xc1\n\tNL80211_ATTR_SUPPORT_5_MHZ                              = 0xc0\n\tNL80211_ATTR_SUPPORT_AP_UAPSD                           = 0x82\n\tNL80211_ATTR_SUPPORTED_COMMANDS                         = 0x32\n\tNL80211_ATTR_SUPPORTED_IFTYPES                          = 0x20\n\tNL80211_ATTR_SUPPORT_IBSS_RSN                           = 0x68\n\tNL80211_ATTR_SUPPORT_MESH_AUTH                          = 0x73\n\tNL80211_ATTR_SURVEY_INFO                                = 0x54\n\tNL80211_ATTR_SURVEY_RADIO_STATS                         = 0xda\n\tNL80211_ATTR_TD_BITMAP                                  = 0x141\n\tNL80211_ATTR_TDLS_ACTION                                = 0x88\n\tNL80211_ATTR_TDLS_DIALOG_TOKEN                          = 0x89\n\tNL80211_ATTR_TDLS_EXTERNAL_SETUP                        = 0x8c\n\tNL80211_ATTR_TDLS_INITIATOR                             = 0xcf\n\tNL80211_ATTR_TDLS_OPERATION                             = 0x8a\n\tNL80211_ATTR_TDLS_PEER_CAPABILITY                       = 0xcb\n\tNL80211_ATTR_TDLS_SUPPORT                               = 0x8b\n\tNL80211_ATTR_TESTDATA                                   = 0x45\n\tNL80211_ATTR_TID_CONFIG                                 = 0x11d\n\tNL80211_ATTR_TIMED_OUT                                  = 0x41\n\tNL80211_ATTR_TIMEOUT                                    = 0x110\n\tNL80211_ATTR_TIMEOUT_REASON                             = 0xf8\n\tNL80211_ATTR_TSID                                       = 0xd2\n\tNL80211_ATTR_TWT_RESPONDER                              = 0x116\n\tNL80211_ATTR_TX_FRAME_TYPES                             = 0x63\n\tNL80211_ATTR_TX_HW_TIMESTAMP                            = 0x13f\n\tNL80211_ATTR_TX_NO_CCK_RATE                             = 0x87\n\tNL80211_ATTR_TXQ_LIMIT                                  = 0x10a\n\tNL80211_ATTR_TXQ_MEMORY_LIMIT                           = 0x10b\n\tNL80211_ATTR_TXQ_QUANTUM                                = 0x10c\n\tNL80211_ATTR_TXQ_STATS                                  = 0x109\n\tNL80211_ATTR_TX_RATES                                   = 0x5a\n\tNL80211_ATTR_UNSOL_BCAST_PROBE_RESP                     = 0x127\n\tNL80211_ATTR_UNSPEC                                     = 0x0\n\tNL80211_ATTR_USE_MFP                                    = 0x42\n\tNL80211_ATTR_USER_PRIO                                  = 0xd3\n\tNL80211_ATTR_USER_REG_HINT_TYPE                         = 0x9a\n\tNL80211_ATTR_USE_RRM                                    = 0xd0\n\tNL80211_ATTR_VENDOR_DATA                                = 0xc5\n\tNL80211_ATTR_VENDOR_EVENTS                              = 0xc6\n\tNL80211_ATTR_VENDOR_ID                                  = 0xc3\n\tNL80211_ATTR_VENDOR_SUBCMD                              = 0xc4\n\tNL80211_ATTR_VHT_CAPABILITY                             = 0x9d\n\tNL80211_ATTR_VHT_CAPABILITY_MASK                        = 0xb0\n\tNL80211_ATTR_VLAN_ID                                    = 0x11a\n\tNL80211_ATTR_WANT_1X_4WAY_HS                            = 0x101\n\tNL80211_ATTR_WDEV                                       = 0x99\n\tNL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX                     = 0x72\n\tNL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX                     = 0x71\n\tNL80211_ATTR_WIPHY_ANTENNA_RX                           = 0x6a\n\tNL80211_ATTR_WIPHY_ANTENNA_TX                           = 0x69\n\tNL80211_ATTR_WIPHY_BANDS                                = 0x16\n\tNL80211_ATTR_WIPHY_CHANNEL_TYPE                         = 0x27\n\tNL80211_ATTR_WIPHY                                      = 0x1\n\tNL80211_ATTR_WIPHY_COVERAGE_CLASS                       = 0x59\n\tNL80211_ATTR_WIPHY_DYN_ACK                              = 0xd1\n\tNL80211_ATTR_WIPHY_EDMG_BW_CONFIG                       = 0x119\n\tNL80211_ATTR_WIPHY_EDMG_CHANNELS                        = 0x118\n\tNL80211_ATTR_WIPHY_FRAG_THRESHOLD                       = 0x3f\n\tNL80211_ATTR_WIPHY_FREQ                                 = 0x26\n\tNL80211_ATTR_WIPHY_FREQ_HINT                            = 0xc9\n\tNL80211_ATTR_WIPHY_FREQ_OFFSET                          = 0x122\n\tNL80211_ATTR_WIPHY_INTERFACE_COMBINATIONS               = 0x14c\n\tNL80211_ATTR_WIPHY_NAME                                 = 0x2\n\tNL80211_ATTR_WIPHY_RADIOS                               = 0x14b\n\tNL80211_ATTR_WIPHY_RETRY_LONG                           = 0x3e\n\tNL80211_ATTR_WIPHY_RETRY_SHORT                          = 0x3d\n\tNL80211_ATTR_WIPHY_RTS_THRESHOLD                        = 0x40\n\tNL80211_ATTR_WIPHY_SELF_MANAGED_REG                     = 0xd8\n\tNL80211_ATTR_WIPHY_TX_POWER_LEVEL                       = 0x62\n\tNL80211_ATTR_WIPHY_TX_POWER_SETTING                     = 0x61\n\tNL80211_ATTR_WIPHY_TXQ_PARAMS                           = 0x25\n\tNL80211_ATTR_WOWLAN_TRIGGERS                            = 0x75\n\tNL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED                  = 0x76\n\tNL80211_ATTR_WPA_VERSIONS                               = 0x4b\n\tNL80211_AUTHTYPE_AUTOMATIC                              = 0x8\n\tNL80211_AUTHTYPE_FILS_PK                                = 0x7\n\tNL80211_AUTHTYPE_FILS_SK                                = 0x5\n\tNL80211_AUTHTYPE_FILS_SK_PFS                            = 0x6\n\tNL80211_AUTHTYPE_FT                                     = 0x2\n\tNL80211_AUTHTYPE_MAX                                    = 0x7\n\tNL80211_AUTHTYPE_NETWORK_EAP                            = 0x3\n\tNL80211_AUTHTYPE_OPEN_SYSTEM                            = 0x0\n\tNL80211_AUTHTYPE_SAE                                    = 0x4\n\tNL80211_AUTHTYPE_SHARED_KEY                             = 0x1\n\tNL80211_BAND_2GHZ                                       = 0x0\n\tNL80211_BAND_5GHZ                                       = 0x1\n\tNL80211_BAND_60GHZ                                      = 0x2\n\tNL80211_BAND_6GHZ                                       = 0x3\n\tNL80211_BAND_ATTR_EDMG_BW_CONFIG                        = 0xb\n\tNL80211_BAND_ATTR_EDMG_CHANNELS                         = 0xa\n\tNL80211_BAND_ATTR_FREQS                                 = 0x1\n\tNL80211_BAND_ATTR_HT_AMPDU_DENSITY                      = 0x6\n\tNL80211_BAND_ATTR_HT_AMPDU_FACTOR                       = 0x5\n\tNL80211_BAND_ATTR_HT_CAPA                               = 0x4\n\tNL80211_BAND_ATTR_HT_MCS_SET                            = 0x3\n\tNL80211_BAND_ATTR_IFTYPE_DATA                           = 0x9\n\tNL80211_BAND_ATTR_MAX                                   = 0xd\n\tNL80211_BAND_ATTR_RATES                                 = 0x2\n\tNL80211_BAND_ATTR_S1G_CAPA                              = 0xd\n\tNL80211_BAND_ATTR_S1G_MCS_NSS_SET                       = 0xc\n\tNL80211_BAND_ATTR_VHT_CAPA                              = 0x8\n\tNL80211_BAND_ATTR_VHT_MCS_SET                           = 0x7\n\tNL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC                    = 0x8\n\tNL80211_BAND_IFTYPE_ATTR_EHT_CAP_MCS_SET                = 0xa\n\tNL80211_BAND_IFTYPE_ATTR_EHT_CAP_PHY                    = 0x9\n\tNL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE                    = 0xb\n\tNL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA                   = 0x6\n\tNL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC                     = 0x2\n\tNL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET                 = 0x4\n\tNL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY                     = 0x3\n\tNL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE                     = 0x5\n\tNL80211_BAND_IFTYPE_ATTR_IFTYPES                        = 0x1\n\tNL80211_BAND_IFTYPE_ATTR_MAX                            = 0xb\n\tNL80211_BAND_IFTYPE_ATTR_VENDOR_ELEMS                   = 0x7\n\tNL80211_BAND_LC                                         = 0x5\n\tNL80211_BAND_S1GHZ                                      = 0x4\n\tNL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE                 = 0x2\n\tNL80211_BITRATE_ATTR_MAX                                = 0x2\n\tNL80211_BITRATE_ATTR_RATE                               = 0x1\n\tNL80211_BSS_BEACON_IES                                  = 0xb\n\tNL80211_BSS_BEACON_INTERVAL                             = 0x4\n\tNL80211_BSS_BEACON_TSF                                  = 0xd\n\tNL80211_BSS_BSSID                                       = 0x1\n\tNL80211_BSS_CANNOT_USE_6GHZ_PWR_MISMATCH                = 0x2\n\tNL80211_BSS_CANNOT_USE_NSTR_NONPRIMARY                  = 0x1\n\tNL80211_BSS_CANNOT_USE_REASONS                          = 0x18\n\tNL80211_BSS_CANNOT_USE_UHB_PWR_MISMATCH                 = 0x2\n\tNL80211_BSS_CAPABILITY                                  = 0x5\n\tNL80211_BSS_CHAIN_SIGNAL                                = 0x13\n\tNL80211_BSS_CHAN_WIDTH_10                               = 0x1\n\tNL80211_BSS_CHAN_WIDTH_1                                = 0x3\n\tNL80211_BSS_CHAN_WIDTH_20                               = 0x0\n\tNL80211_BSS_CHAN_WIDTH_2                                = 0x4\n\tNL80211_BSS_CHAN_WIDTH_5                                = 0x2\n\tNL80211_BSS_CHAN_WIDTH                                  = 0xc\n\tNL80211_BSS_FREQUENCY                                   = 0x2\n\tNL80211_BSS_FREQUENCY_OFFSET                            = 0x14\n\tNL80211_BSS_INFORMATION_ELEMENTS                        = 0x6\n\tNL80211_BSS_LAST_SEEN_BOOTTIME                          = 0xf\n\tNL80211_BSS_MAX                                         = 0x18\n\tNL80211_BSS_MLD_ADDR                                    = 0x16\n\tNL80211_BSS_MLO_LINK_ID                                 = 0x15\n\tNL80211_BSS_PAD                                         = 0x10\n\tNL80211_BSS_PARENT_BSSID                                = 0x12\n\tNL80211_BSS_PARENT_TSF                                  = 0x11\n\tNL80211_BSS_PRESP_DATA                                  = 0xe\n\tNL80211_BSS_SEEN_MS_AGO                                 = 0xa\n\tNL80211_BSS_SELECT_ATTR_BAND_PREF                       = 0x2\n\tNL80211_BSS_SELECT_ATTR_MAX                             = 0x3\n\tNL80211_BSS_SELECT_ATTR_RSSI_ADJUST                     = 0x3\n\tNL80211_BSS_SELECT_ATTR_RSSI                            = 0x1\n\tNL80211_BSS_SIGNAL_MBM                                  = 0x7\n\tNL80211_BSS_SIGNAL_UNSPEC                               = 0x8\n\tNL80211_BSS_STATUS_ASSOCIATED                           = 0x1\n\tNL80211_BSS_STATUS_AUTHENTICATED                        = 0x0\n\tNL80211_BSS_STATUS                                      = 0x9\n\tNL80211_BSS_STATUS_IBSS_JOINED                          = 0x2\n\tNL80211_BSS_TSF                                         = 0x3\n\tNL80211_BSS_USE_FOR                                     = 0x17\n\tNL80211_BSS_USE_FOR_MLD_LINK                            = 0x2\n\tNL80211_BSS_USE_FOR_NORMAL                              = 0x1\n\tNL80211_CHAN_HT20                                       = 0x1\n\tNL80211_CHAN_HT40MINUS                                  = 0x2\n\tNL80211_CHAN_HT40PLUS                                   = 0x3\n\tNL80211_CHAN_NO_HT                                      = 0x0\n\tNL80211_CHAN_WIDTH_10                                   = 0x7\n\tNL80211_CHAN_WIDTH_160                                  = 0x5\n\tNL80211_CHAN_WIDTH_16                                   = 0xc\n\tNL80211_CHAN_WIDTH_1                                    = 0x8\n\tNL80211_CHAN_WIDTH_20                                   = 0x1\n\tNL80211_CHAN_WIDTH_20_NOHT                              = 0x0\n\tNL80211_CHAN_WIDTH_2                                    = 0x9\n\tNL80211_CHAN_WIDTH_320                                  = 0xd\n\tNL80211_CHAN_WIDTH_40                                   = 0x2\n\tNL80211_CHAN_WIDTH_4                                    = 0xa\n\tNL80211_CHAN_WIDTH_5                                    = 0x6\n\tNL80211_CHAN_WIDTH_80                                   = 0x3\n\tNL80211_CHAN_WIDTH_80P80                                = 0x4\n\tNL80211_CHAN_WIDTH_8                                    = 0xb\n\tNL80211_CMD_ABORT_SCAN                                  = 0x72\n\tNL80211_CMD_ACTION                                      = 0x3b\n\tNL80211_CMD_ACTION_TX_STATUS                            = 0x3c\n\tNL80211_CMD_ADD_LINK                                    = 0x94\n\tNL80211_CMD_ADD_LINK_STA                                = 0x96\n\tNL80211_CMD_ADD_NAN_FUNCTION                            = 0x75\n\tNL80211_CMD_ADD_TX_TS                                   = 0x69\n\tNL80211_CMD_ASSOC_COMEBACK                              = 0x93\n\tNL80211_CMD_ASSOCIATE                                   = 0x26\n\tNL80211_CMD_AUTHENTICATE                                = 0x25\n\tNL80211_CMD_CANCEL_REMAIN_ON_CHANNEL                    = 0x38\n\tNL80211_CMD_CHANGE_NAN_CONFIG                           = 0x77\n\tNL80211_CMD_CHANNEL_SWITCH                              = 0x66\n\tNL80211_CMD_CH_SWITCH_NOTIFY                            = 0x58\n\tNL80211_CMD_CH_SWITCH_STARTED_NOTIFY                    = 0x6e\n\tNL80211_CMD_COLOR_CHANGE_ABORTED                        = 0x90\n\tNL80211_CMD_COLOR_CHANGE_COMPLETED                      = 0x91\n\tNL80211_CMD_COLOR_CHANGE_REQUEST                        = 0x8e\n\tNL80211_CMD_COLOR_CHANGE_STARTED                        = 0x8f\n\tNL80211_CMD_CONNECT                                     = 0x2e\n\tNL80211_CMD_CONN_FAILED                                 = 0x5b\n\tNL80211_CMD_CONTROL_PORT_FRAME                          = 0x81\n\tNL80211_CMD_CONTROL_PORT_FRAME_TX_STATUS                = 0x8b\n\tNL80211_CMD_CRIT_PROTOCOL_START                         = 0x62\n\tNL80211_CMD_CRIT_PROTOCOL_STOP                          = 0x63\n\tNL80211_CMD_DEAUTHENTICATE                              = 0x27\n\tNL80211_CMD_DEL_BEACON                                  = 0x10\n\tNL80211_CMD_DEL_INTERFACE                               = 0x8\n\tNL80211_CMD_DEL_KEY                                     = 0xc\n\tNL80211_CMD_DEL_MPATH                                   = 0x18\n\tNL80211_CMD_DEL_NAN_FUNCTION                            = 0x76\n\tNL80211_CMD_DEL_PMK                                     = 0x7c\n\tNL80211_CMD_DEL_PMKSA                                   = 0x35\n\tNL80211_CMD_DEL_STATION                                 = 0x14\n\tNL80211_CMD_DEL_TX_TS                                   = 0x6a\n\tNL80211_CMD_DEL_WIPHY                                   = 0x4\n\tNL80211_CMD_DISASSOCIATE                                = 0x28\n\tNL80211_CMD_DISCONNECT                                  = 0x30\n\tNL80211_CMD_EXTERNAL_AUTH                               = 0x7f\n\tNL80211_CMD_FLUSH_PMKSA                                 = 0x36\n\tNL80211_CMD_FRAME                                       = 0x3b\n\tNL80211_CMD_FRAME_TX_STATUS                             = 0x3c\n\tNL80211_CMD_FRAME_WAIT_CANCEL                           = 0x43\n\tNL80211_CMD_FT_EVENT                                    = 0x61\n\tNL80211_CMD_GET_BEACON                                  = 0xd\n\tNL80211_CMD_GET_COALESCE                                = 0x64\n\tNL80211_CMD_GET_FTM_RESPONDER_STATS                     = 0x82\n\tNL80211_CMD_GET_INTERFACE                               = 0x5\n\tNL80211_CMD_GET_KEY                                     = 0x9\n\tNL80211_CMD_GET_MESH_CONFIG                             = 0x1c\n\tNL80211_CMD_GET_MESH_PARAMS                             = 0x1c\n\tNL80211_CMD_GET_MPATH                                   = 0x15\n\tNL80211_CMD_GET_MPP                                     = 0x6b\n\tNL80211_CMD_GET_POWER_SAVE                              = 0x3e\n\tNL80211_CMD_GET_PROTOCOL_FEATURES                       = 0x5f\n\tNL80211_CMD_GET_REG                                     = 0x1f\n\tNL80211_CMD_GET_SCAN                                    = 0x20\n\tNL80211_CMD_GET_STATION                                 = 0x11\n\tNL80211_CMD_GET_SURVEY                                  = 0x32\n\tNL80211_CMD_GET_WIPHY                                   = 0x1\n\tNL80211_CMD_GET_WOWLAN                                  = 0x49\n\tNL80211_CMD_JOIN_IBSS                                   = 0x2b\n\tNL80211_CMD_JOIN_MESH                                   = 0x44\n\tNL80211_CMD_JOIN_OCB                                    = 0x6c\n\tNL80211_CMD_LEAVE_IBSS                                  = 0x2c\n\tNL80211_CMD_LEAVE_MESH                                  = 0x45\n\tNL80211_CMD_LEAVE_OCB                                   = 0x6d\n\tNL80211_CMD_LINKS_REMOVED                               = 0x9a\n\tNL80211_CMD_MAX                                         = 0x9d\n\tNL80211_CMD_MICHAEL_MIC_FAILURE                         = 0x29\n\tNL80211_CMD_MODIFY_LINK_STA                             = 0x97\n\tNL80211_CMD_NAN_MATCH                                   = 0x78\n\tNL80211_CMD_NEW_BEACON                                  = 0xf\n\tNL80211_CMD_NEW_INTERFACE                               = 0x7\n\tNL80211_CMD_NEW_KEY                                     = 0xb\n\tNL80211_CMD_NEW_MPATH                                   = 0x17\n\tNL80211_CMD_NEW_PEER_CANDIDATE                          = 0x48\n\tNL80211_CMD_NEW_SCAN_RESULTS                            = 0x22\n\tNL80211_CMD_NEW_STATION                                 = 0x13\n\tNL80211_CMD_NEW_SURVEY_RESULTS                          = 0x33\n\tNL80211_CMD_NEW_WIPHY                                   = 0x3\n\tNL80211_CMD_NOTIFY_CQM                                  = 0x40\n\tNL80211_CMD_NOTIFY_RADAR                                = 0x86\n\tNL80211_CMD_OBSS_COLOR_COLLISION                        = 0x8d\n\tNL80211_CMD_PEER_MEASUREMENT_COMPLETE                   = 0x85\n\tNL80211_CMD_PEER_MEASUREMENT_RESULT                     = 0x84\n\tNL80211_CMD_PEER_MEASUREMENT_START                      = 0x83\n\tNL80211_CMD_PMKSA_CANDIDATE                             = 0x50\n\tNL80211_CMD_PORT_AUTHORIZED                             = 0x7d\n\tNL80211_CMD_PROBE_CLIENT                                = 0x54\n\tNL80211_CMD_PROBE_MESH_LINK                             = 0x88\n\tNL80211_CMD_RADAR_DETECT                                = 0x5e\n\tNL80211_CMD_REG_BEACON_HINT                             = 0x2a\n\tNL80211_CMD_REG_CHANGE                                  = 0x24\n\tNL80211_CMD_REGISTER_ACTION                             = 0x3a\n\tNL80211_CMD_REGISTER_BEACONS                            = 0x55\n\tNL80211_CMD_REGISTER_FRAME                              = 0x3a\n\tNL80211_CMD_RELOAD_REGDB                                = 0x7e\n\tNL80211_CMD_REMAIN_ON_CHANNEL                           = 0x37\n\tNL80211_CMD_REMOVE_LINK                                 = 0x95\n\tNL80211_CMD_REMOVE_LINK_STA                             = 0x98\n\tNL80211_CMD_REQ_SET_REG                                 = 0x1b\n\tNL80211_CMD_ROAM                                        = 0x2f\n\tNL80211_CMD_SCAN_ABORTED                                = 0x23\n\tNL80211_CMD_SCHED_SCAN_RESULTS                          = 0x4d\n\tNL80211_CMD_SCHED_SCAN_STOPPED                          = 0x4e\n\tNL80211_CMD_SET_BEACON                                  = 0xe\n\tNL80211_CMD_SET_BSS                                     = 0x19\n\tNL80211_CMD_SET_CHANNEL                                 = 0x41\n\tNL80211_CMD_SET_COALESCE                                = 0x65\n\tNL80211_CMD_SET_CQM                                     = 0x3f\n\tNL80211_CMD_SET_FILS_AAD                                = 0x92\n\tNL80211_CMD_SET_HW_TIMESTAMP                            = 0x99\n\tNL80211_CMD_SET_INTERFACE                               = 0x6\n\tNL80211_CMD_SET_KEY                                     = 0xa\n\tNL80211_CMD_SET_MAC_ACL                                 = 0x5d\n\tNL80211_CMD_SET_MCAST_RATE                              = 0x5c\n\tNL80211_CMD_SET_MESH_CONFIG                             = 0x1d\n\tNL80211_CMD_SET_MESH_PARAMS                             = 0x1d\n\tNL80211_CMD_SET_MGMT_EXTRA_IE                           = 0x1e\n\tNL80211_CMD_SET_MPATH                                   = 0x16\n\tNL80211_CMD_SET_MULTICAST_TO_UNICAST                    = 0x79\n\tNL80211_CMD_SET_NOACK_MAP                               = 0x57\n\tNL80211_CMD_SET_PMK                                     = 0x7b\n\tNL80211_CMD_SET_PMKSA                                   = 0x34\n\tNL80211_CMD_SET_POWER_SAVE                              = 0x3d\n\tNL80211_CMD_SET_QOS_MAP                                 = 0x68\n\tNL80211_CMD_SET_REG                                     = 0x1a\n\tNL80211_CMD_SET_REKEY_OFFLOAD                           = 0x4f\n\tNL80211_CMD_SET_SAR_SPECS                               = 0x8c\n\tNL80211_CMD_SET_STATION                                 = 0x12\n\tNL80211_CMD_SET_TID_CONFIG                              = 0x89\n\tNL80211_CMD_SET_TID_TO_LINK_MAPPING                     = 0x9b\n\tNL80211_CMD_SET_TX_BITRATE_MASK                         = 0x39\n\tNL80211_CMD_SET_WDS_PEER                                = 0x42\n\tNL80211_CMD_SET_WIPHY                                   = 0x2\n\tNL80211_CMD_SET_WIPHY_NETNS                             = 0x31\n\tNL80211_CMD_SET_WOWLAN                                  = 0x4a\n\tNL80211_CMD_STA_OPMODE_CHANGED                          = 0x80\n\tNL80211_CMD_START_AP                                    = 0xf\n\tNL80211_CMD_START_NAN                                   = 0x73\n\tNL80211_CMD_START_P2P_DEVICE                            = 0x59\n\tNL80211_CMD_START_SCHED_SCAN                            = 0x4b\n\tNL80211_CMD_STOP_AP                                     = 0x10\n\tNL80211_CMD_STOP_NAN                                    = 0x74\n\tNL80211_CMD_STOP_P2P_DEVICE                             = 0x5a\n\tNL80211_CMD_STOP_SCHED_SCAN                             = 0x4c\n\tNL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH                  = 0x70\n\tNL80211_CMD_TDLS_CHANNEL_SWITCH                         = 0x6f\n\tNL80211_CMD_TDLS_MGMT                                   = 0x52\n\tNL80211_CMD_TDLS_OPER                                   = 0x51\n\tNL80211_CMD_TESTMODE                                    = 0x2d\n\tNL80211_CMD_TRIGGER_SCAN                                = 0x21\n\tNL80211_CMD_UNEXPECTED_4ADDR_FRAME                      = 0x56\n\tNL80211_CMD_UNEXPECTED_FRAME                            = 0x53\n\tNL80211_CMD_UNPROT_BEACON                               = 0x8a\n\tNL80211_CMD_UNPROT_DEAUTHENTICATE                       = 0x46\n\tNL80211_CMD_UNPROT_DISASSOCIATE                         = 0x47\n\tNL80211_CMD_UNSPEC                                      = 0x0\n\tNL80211_CMD_UPDATE_CONNECT_PARAMS                       = 0x7a\n\tNL80211_CMD_UPDATE_FT_IES                               = 0x60\n\tNL80211_CMD_UPDATE_OWE_INFO                             = 0x87\n\tNL80211_CMD_VENDOR                                      = 0x67\n\tNL80211_CMD_WIPHY_REG_CHANGE                            = 0x71\n\tNL80211_COALESCE_CONDITION_MATCH                        = 0x0\n\tNL80211_COALESCE_CONDITION_NO_MATCH                     = 0x1\n\tNL80211_CONN_FAIL_BLOCKED_CLIENT                        = 0x1\n\tNL80211_CONN_FAIL_MAX_CLIENTS                           = 0x0\n\tNL80211_CQM_RSSI_BEACON_LOSS_EVENT                      = 0x2\n\tNL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH                   = 0x1\n\tNL80211_CQM_RSSI_THRESHOLD_EVENT_LOW                    = 0x0\n\tNL80211_CQM_TXE_MAX_INTVL                               = 0x708\n\tNL80211_CRIT_PROTO_APIPA                                = 0x3\n\tNL80211_CRIT_PROTO_DHCP                                 = 0x1\n\tNL80211_CRIT_PROTO_EAPOL                                = 0x2\n\tNL80211_CRIT_PROTO_MAX_DURATION                         = 0x1388\n\tNL80211_CRIT_PROTO_UNSPEC                               = 0x0\n\tNL80211_DFS_AVAILABLE                                   = 0x2\n\tNL80211_DFS_ETSI                                        = 0x2\n\tNL80211_DFS_FCC                                         = 0x1\n\tNL80211_DFS_JP                                          = 0x3\n\tNL80211_DFS_UNAVAILABLE                                 = 0x1\n\tNL80211_DFS_UNSET                                       = 0x0\n\tNL80211_DFS_USABLE                                      = 0x0\n\tNL80211_EDMG_BW_CONFIG_MAX                              = 0xf\n\tNL80211_EDMG_BW_CONFIG_MIN                              = 0x4\n\tNL80211_EDMG_CHANNELS_MAX                               = 0x3c\n\tNL80211_EDMG_CHANNELS_MIN                               = 0x1\n\tNL80211_EHT_MAX_CAPABILITY_LEN                          = 0x33\n\tNL80211_EHT_MIN_CAPABILITY_LEN                          = 0xd\n\tNL80211_EXTERNAL_AUTH_ABORT                             = 0x1\n\tNL80211_EXTERNAL_AUTH_START                             = 0x0\n\tNL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK               = 0x32\n\tNL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X               = 0x10\n\tNL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK              = 0xf\n\tNL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP             = 0x12\n\tNL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT                  = 0x1b\n\tNL80211_EXT_FEATURE_AIRTIME_FAIRNESS                    = 0x21\n\tNL80211_EXT_FEATURE_AP_PMKSA_CACHING                    = 0x22\n\tNL80211_EXT_FEATURE_AQL                                 = 0x28\n\tNL80211_EXT_FEATURE_AUTH_AND_DEAUTH_RANDOM_TA           = 0x40\n\tNL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT            = 0x2e\n\tNL80211_EXT_FEATURE_BEACON_PROTECTION                   = 0x29\n\tNL80211_EXT_FEATURE_BEACON_RATE_HE                      = 0x36\n\tNL80211_EXT_FEATURE_BEACON_RATE_HT                      = 0x7\n\tNL80211_EXT_FEATURE_BEACON_RATE_LEGACY                  = 0x6\n\tNL80211_EXT_FEATURE_BEACON_RATE_VHT                     = 0x8\n\tNL80211_EXT_FEATURE_BSS_COLOR                           = 0x3a\n\tNL80211_EXT_FEATURE_BSS_PARENT_TSF                      = 0x4\n\tNL80211_EXT_FEATURE_CAN_REPLACE_PTK0                    = 0x1f\n\tNL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH             = 0x2a\n\tNL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211           = 0x1a\n\tNL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS = 0x30\n\tNL80211_EXT_FEATURE_CQM_RSSI_LIST                       = 0xd\n\tNL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT             = 0x1b\n\tNL80211_EXT_FEATURE_DEL_IBSS_STA                        = 0x2c\n\tNL80211_EXT_FEATURE_DFS_CONCURRENT                      = 0x43\n\tNL80211_EXT_FEATURE_DFS_OFFLOAD                         = 0x19\n\tNL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER                = 0x20\n\tNL80211_EXT_FEATURE_EXT_KEY_ID                          = 0x24\n\tNL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD                 = 0x3b\n\tNL80211_EXT_FEATURE_FILS_DISCOVERY                      = 0x34\n\tNL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME               = 0x11\n\tNL80211_EXT_FEATURE_FILS_SK_OFFLOAD                     = 0xe\n\tNL80211_EXT_FEATURE_FILS_STA                            = 0x9\n\tNL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN                  = 0x18\n\tNL80211_EXT_FEATURE_LOW_POWER_SCAN                      = 0x17\n\tNL80211_EXT_FEATURE_LOW_SPAN_SCAN                       = 0x16\n\tNL80211_EXT_FEATURE_MFP_OPTIONAL                        = 0x15\n\tNL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA                   = 0xa\n\tNL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED         = 0xb\n\tNL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS             = 0x2d\n\tNL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER                 = 0x2\n\tNL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION  = 0x14\n\tNL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE          = 0x13\n\tNL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION        = 0x31\n\tNL80211_EXT_FEATURE_OWE_OFFLOAD_AP                      = 0x42\n\tNL80211_EXT_FEATURE_OWE_OFFLOAD                         = 0x41\n\tNL80211_EXT_FEATURE_POWERED_ADDR_CHANGE                 = 0x3d\n\tNL80211_EXT_FEATURE_PROTECTED_TWT                       = 0x2b\n\tNL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE         = 0x39\n\tNL80211_EXT_FEATURE_PUNCT                               = 0x3e\n\tNL80211_EXT_FEATURE_RADAR_BACKGROUND                    = 0x3c\n\tNL80211_EXT_FEATURE_RRM                                 = 0x1\n\tNL80211_EXT_FEATURE_SAE_OFFLOAD_AP                      = 0x33\n\tNL80211_EXT_FEATURE_SAE_OFFLOAD                         = 0x26\n\tNL80211_EXT_FEATURE_SCAN_FREQ_KHZ                       = 0x2f\n\tNL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT               = 0x1e\n\tNL80211_EXT_FEATURE_SCAN_RANDOM_SN                      = 0x1d\n\tNL80211_EXT_FEATURE_SCAN_START_TIME                     = 0x3\n\tNL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 0x23\n\tNL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI            = 0xc\n\tNL80211_EXT_FEATURE_SECURE_LTF                          = 0x37\n\tNL80211_EXT_FEATURE_SECURE_NAN                          = 0x3f\n\tNL80211_EXT_FEATURE_SECURE_RTT                          = 0x38\n\tNL80211_EXT_FEATURE_SET_SCAN_DWELL                      = 0x5\n\tNL80211_EXT_FEATURE_SPP_AMSDU_SUPPORT                   = 0x44\n\tNL80211_EXT_FEATURE_STA_TX_PWR                          = 0x25\n\tNL80211_EXT_FEATURE_TXQS                                = 0x1c\n\tNL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP              = 0x35\n\tNL80211_EXT_FEATURE_VHT_IBSS                            = 0x0\n\tNL80211_EXT_FEATURE_VLAN_OFFLOAD                        = 0x27\n\tNL80211_FEATURE_ACKTO_ESTIMATION                        = 0x800000\n\tNL80211_FEATURE_ACTIVE_MONITOR                          = 0x20000\n\tNL80211_FEATURE_ADVERTISE_CHAN_LIMITS                   = 0x4000\n\tNL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE               = 0x40000\n\tNL80211_FEATURE_AP_SCAN                                 = 0x100\n\tNL80211_FEATURE_CELL_BASE_REG_HINTS                     = 0x8\n\tNL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES               = 0x80000\n\tNL80211_FEATURE_DYNAMIC_SMPS                            = 0x2000000\n\tNL80211_FEATURE_FULL_AP_CLIENT_STATE                    = 0x8000\n\tNL80211_FEATURE_HT_IBSS                                 = 0x2\n\tNL80211_FEATURE_INACTIVITY_TIMER                        = 0x4\n\tNL80211_FEATURE_LOW_PRIORITY_SCAN                       = 0x40\n\tNL80211_FEATURE_MAC_ON_CREATE                           = 0x8000000\n\tNL80211_FEATURE_ND_RANDOM_MAC_ADDR                      = 0x80000000\n\tNL80211_FEATURE_NEED_OBSS_SCAN                          = 0x400\n\tNL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL                = 0x10\n\tNL80211_FEATURE_P2P_GO_CTWIN                            = 0x800\n\tNL80211_FEATURE_P2P_GO_OPPPS                            = 0x1000\n\tNL80211_FEATURE_QUIET                                   = 0x200000\n\tNL80211_FEATURE_SAE                                     = 0x20\n\tNL80211_FEATURE_SCAN_FLUSH                              = 0x80\n\tNL80211_FEATURE_SCAN_RANDOM_MAC_ADDR                    = 0x20000000\n\tNL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR              = 0x40000000\n\tNL80211_FEATURE_SK_TX_STATUS                            = 0x1\n\tNL80211_FEATURE_STATIC_SMPS                             = 0x1000000\n\tNL80211_FEATURE_SUPPORTS_WMM_ADMISSION                  = 0x4000000\n\tNL80211_FEATURE_TDLS_CHANNEL_SWITCH                     = 0x10000000\n\tNL80211_FEATURE_TX_POWER_INSERTION                      = 0x400000\n\tNL80211_FEATURE_USERSPACE_MPM                           = 0x10000\n\tNL80211_FEATURE_VIF_TXPOWER                             = 0x200\n\tNL80211_FEATURE_WFA_TPC_IE_IN_PROBES                    = 0x100000\n\tNL80211_FILS_DISCOVERY_ATTR_INT_MAX                     = 0x2\n\tNL80211_FILS_DISCOVERY_ATTR_INT_MIN                     = 0x1\n\tNL80211_FILS_DISCOVERY_ATTR_MAX                         = 0x3\n\tNL80211_FILS_DISCOVERY_ATTR_TMPL                        = 0x3\n\tNL80211_FILS_DISCOVERY_TMPL_MIN_LEN                     = 0x2a\n\tNL80211_FREQUENCY_ATTR_16MHZ                            = 0x19\n\tNL80211_FREQUENCY_ATTR_1MHZ                             = 0x15\n\tNL80211_FREQUENCY_ATTR_2MHZ                             = 0x16\n\tNL80211_FREQUENCY_ATTR_4MHZ                             = 0x17\n\tNL80211_FREQUENCY_ATTR_8MHZ                             = 0x18\n\tNL80211_FREQUENCY_ATTR_ALLOW_6GHZ_VLP_AP                = 0x21\n\tNL80211_FREQUENCY_ATTR_CAN_MONITOR                      = 0x20\n\tNL80211_FREQUENCY_ATTR_DFS_CAC_TIME                     = 0xd\n\tNL80211_FREQUENCY_ATTR_DFS_CONCURRENT                   = 0x1d\n\tNL80211_FREQUENCY_ATTR_DFS_STATE                        = 0x7\n\tNL80211_FREQUENCY_ATTR_DFS_TIME                         = 0x8\n\tNL80211_FREQUENCY_ATTR_DISABLED                         = 0x2\n\tNL80211_FREQUENCY_ATTR_FREQ                             = 0x1\n\tNL80211_FREQUENCY_ATTR_GO_CONCURRENT                    = 0xf\n\tNL80211_FREQUENCY_ATTR_INDOOR_ONLY                      = 0xe\n\tNL80211_FREQUENCY_ATTR_IR_CONCURRENT                    = 0xf\n\tNL80211_FREQUENCY_ATTR_MAX                              = 0x22\n\tNL80211_FREQUENCY_ATTR_MAX_TX_POWER                     = 0x6\n\tNL80211_FREQUENCY_ATTR_NO_10MHZ                         = 0x11\n\tNL80211_FREQUENCY_ATTR_NO_160MHZ                        = 0xc\n\tNL80211_FREQUENCY_ATTR_NO_20MHZ                         = 0x10\n\tNL80211_FREQUENCY_ATTR_NO_320MHZ                        = 0x1a\n\tNL80211_FREQUENCY_ATTR_NO_6GHZ_AFC_CLIENT               = 0x1f\n\tNL80211_FREQUENCY_ATTR_NO_6GHZ_VLP_CLIENT               = 0x1e\n\tNL80211_FREQUENCY_ATTR_NO_80MHZ                         = 0xb\n\tNL80211_FREQUENCY_ATTR_NO_EHT                           = 0x1b\n\tNL80211_FREQUENCY_ATTR_NO_HE                            = 0x13\n\tNL80211_FREQUENCY_ATTR_NO_HT40_MINUS                    = 0x9\n\tNL80211_FREQUENCY_ATTR_NO_HT40_PLUS                     = 0xa\n\tNL80211_FREQUENCY_ATTR_NO_IBSS                          = 0x3\n\tNL80211_FREQUENCY_ATTR_NO_IR                            = 0x3\n\tNL80211_FREQUENCY_ATTR_NO_UHB_AFC_CLIENT                = 0x1f\n\tNL80211_FREQUENCY_ATTR_NO_UHB_VLP_CLIENT                = 0x1e\n\tNL80211_FREQUENCY_ATTR_OFFSET                           = 0x14\n\tNL80211_FREQUENCY_ATTR_PASSIVE_SCAN                     = 0x3\n\tNL80211_FREQUENCY_ATTR_PSD                              = 0x1c\n\tNL80211_FREQUENCY_ATTR_RADAR                            = 0x5\n\tNL80211_FREQUENCY_ATTR_WMM                              = 0x12\n\tNL80211_FTM_RESP_ATTR_CIVICLOC                          = 0x3\n\tNL80211_FTM_RESP_ATTR_ENABLED                           = 0x1\n\tNL80211_FTM_RESP_ATTR_LCI                               = 0x2\n\tNL80211_FTM_RESP_ATTR_MAX                               = 0x3\n\tNL80211_FTM_STATS_ASAP_NUM                              = 0x4\n\tNL80211_FTM_STATS_FAILED_NUM                            = 0x3\n\tNL80211_FTM_STATS_MAX                                   = 0xa\n\tNL80211_FTM_STATS_NON_ASAP_NUM                          = 0x5\n\tNL80211_FTM_STATS_OUT_OF_WINDOW_TRIGGERS_NUM            = 0x9\n\tNL80211_FTM_STATS_PAD                                   = 0xa\n\tNL80211_FTM_STATS_PARTIAL_NUM                           = 0x2\n\tNL80211_FTM_STATS_RESCHEDULE_REQUESTS_NUM               = 0x8\n\tNL80211_FTM_STATS_SUCCESS_NUM                           = 0x1\n\tNL80211_FTM_STATS_TOTAL_DURATION_MSEC                   = 0x6\n\tNL80211_FTM_STATS_UNKNOWN_TRIGGERS_NUM                  = 0x7\n\tNL80211_GENL_NAME                                       = \"nl80211\"\n\tNL80211_HE_BSS_COLOR_ATTR_COLOR                         = 0x1\n\tNL80211_HE_BSS_COLOR_ATTR_DISABLED                      = 0x2\n\tNL80211_HE_BSS_COLOR_ATTR_MAX                           = 0x3\n\tNL80211_HE_BSS_COLOR_ATTR_PARTIAL                       = 0x3\n\tNL80211_HE_MAX_CAPABILITY_LEN                           = 0x36\n\tNL80211_HE_MIN_CAPABILITY_LEN                           = 0x10\n\tNL80211_HE_NSS_MAX                                      = 0x8\n\tNL80211_HE_OBSS_PD_ATTR_BSS_COLOR_BITMAP                = 0x4\n\tNL80211_HE_OBSS_PD_ATTR_MAX                             = 0x6\n\tNL80211_HE_OBSS_PD_ATTR_MAX_OFFSET                      = 0x2\n\tNL80211_HE_OBSS_PD_ATTR_MIN_OFFSET                      = 0x1\n\tNL80211_HE_OBSS_PD_ATTR_NON_SRG_MAX_OFFSET              = 0x3\n\tNL80211_HE_OBSS_PD_ATTR_PARTIAL_BSSID_BITMAP            = 0x5\n\tNL80211_HE_OBSS_PD_ATTR_SR_CTRL                         = 0x6\n\tNL80211_HIDDEN_SSID_NOT_IN_USE                          = 0x0\n\tNL80211_HIDDEN_SSID_ZERO_CONTENTS                       = 0x2\n\tNL80211_HIDDEN_SSID_ZERO_LEN                            = 0x1\n\tNL80211_HT_CAPABILITY_LEN                               = 0x1a\n\tNL80211_IFACE_COMB_BI_MIN_GCD                           = 0x7\n\tNL80211_IFACE_COMB_LIMITS                               = 0x1\n\tNL80211_IFACE_COMB_MAXNUM                               = 0x2\n\tNL80211_IFACE_COMB_NUM_CHANNELS                         = 0x4\n\tNL80211_IFACE_COMB_RADAR_DETECT_REGIONS                 = 0x6\n\tNL80211_IFACE_COMB_RADAR_DETECT_WIDTHS                  = 0x5\n\tNL80211_IFACE_COMB_STA_AP_BI_MATCH                      = 0x3\n\tNL80211_IFACE_COMB_UNSPEC                               = 0x0\n\tNL80211_IFACE_LIMIT_MAX                                 = 0x1\n\tNL80211_IFACE_LIMIT_TYPES                               = 0x2\n\tNL80211_IFACE_LIMIT_UNSPEC                              = 0x0\n\tNL80211_IFTYPE_ADHOC                                    = 0x1\n\tNL80211_IFTYPE_AKM_ATTR_IFTYPES                         = 0x1\n\tNL80211_IFTYPE_AKM_ATTR_MAX                             = 0x2\n\tNL80211_IFTYPE_AKM_ATTR_SUITES                          = 0x2\n\tNL80211_IFTYPE_AP                                       = 0x3\n\tNL80211_IFTYPE_AP_VLAN                                  = 0x4\n\tNL80211_IFTYPE_MAX                                      = 0xc\n\tNL80211_IFTYPE_MESH_POINT                               = 0x7\n\tNL80211_IFTYPE_MONITOR                                  = 0x6\n\tNL80211_IFTYPE_NAN                                      = 0xc\n\tNL80211_IFTYPE_OCB                                      = 0xb\n\tNL80211_IFTYPE_P2P_CLIENT                               = 0x8\n\tNL80211_IFTYPE_P2P_DEVICE                               = 0xa\n\tNL80211_IFTYPE_P2P_GO                                   = 0x9\n\tNL80211_IFTYPE_STATION                                  = 0x2\n\tNL80211_IFTYPE_UNSPECIFIED                              = 0x0\n\tNL80211_IFTYPE_WDS                                      = 0x5\n\tNL80211_KCK_EXT_LEN_32                                  = 0x20\n\tNL80211_KCK_EXT_LEN                                     = 0x18\n\tNL80211_KCK_LEN                                         = 0x10\n\tNL80211_KEK_EXT_LEN                                     = 0x20\n\tNL80211_KEK_LEN                                         = 0x10\n\tNL80211_KEY_CIPHER                                      = 0x3\n\tNL80211_KEY_DATA                                        = 0x1\n\tNL80211_KEY_DEFAULT_BEACON                              = 0xa\n\tNL80211_KEY_DEFAULT                                     = 0x5\n\tNL80211_KEY_DEFAULT_MGMT                                = 0x6\n\tNL80211_KEY_DEFAULT_TYPE_MULTICAST                      = 0x2\n\tNL80211_KEY_DEFAULT_TYPES                               = 0x8\n\tNL80211_KEY_DEFAULT_TYPE_UNICAST                        = 0x1\n\tNL80211_KEY_IDX                                         = 0x2\n\tNL80211_KEY_MAX                                         = 0xa\n\tNL80211_KEY_MODE                                        = 0x9\n\tNL80211_KEY_NO_TX                                       = 0x1\n\tNL80211_KEY_RX_TX                                       = 0x0\n\tNL80211_KEY_SEQ                                         = 0x4\n\tNL80211_KEY_SET_TX                                      = 0x2\n\tNL80211_KEY_TYPE                                        = 0x7\n\tNL80211_KEYTYPE_GROUP                                   = 0x0\n\tNL80211_KEYTYPE_PAIRWISE                                = 0x1\n\tNL80211_KEYTYPE_PEERKEY                                 = 0x2\n\tNL80211_MAX_NR_AKM_SUITES                               = 0x2\n\tNL80211_MAX_NR_CIPHER_SUITES                            = 0x5\n\tNL80211_MAX_SUPP_HT_RATES                               = 0x4d\n\tNL80211_MAX_SUPP_RATES                                  = 0x20\n\tNL80211_MAX_SUPP_REG_RULES                              = 0x80\n\tNL80211_MAX_SUPP_SELECTORS                              = 0x80\n\tNL80211_MBSSID_CONFIG_ATTR_EMA                          = 0x5\n\tNL80211_MBSSID_CONFIG_ATTR_INDEX                        = 0x3\n\tNL80211_MBSSID_CONFIG_ATTR_MAX                          = 0x6\n\tNL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY  = 0x2\n\tNL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES               = 0x1\n\tNL80211_MBSSID_CONFIG_ATTR_TX_IFINDEX                   = 0x4\n\tNL80211_MESHCONF_ATTR_MAX                               = 0x1f\n\tNL80211_MESHCONF_AUTO_OPEN_PLINKS                       = 0x7\n\tNL80211_MESHCONF_AWAKE_WINDOW                           = 0x1b\n\tNL80211_MESHCONF_CONFIRM_TIMEOUT                        = 0x2\n\tNL80211_MESHCONF_CONNECTED_TO_AS                        = 0x1f\n\tNL80211_MESHCONF_CONNECTED_TO_GATE                      = 0x1d\n\tNL80211_MESHCONF_ELEMENT_TTL                            = 0xf\n\tNL80211_MESHCONF_FORWARDING                             = 0x13\n\tNL80211_MESHCONF_GATE_ANNOUNCEMENTS                     = 0x11\n\tNL80211_MESHCONF_HOLDING_TIMEOUT                        = 0x3\n\tNL80211_MESHCONF_HT_OPMODE                              = 0x16\n\tNL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT               = 0xb\n\tNL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL             = 0x19\n\tNL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES                  = 0x8\n\tNL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME                = 0xd\n\tNL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT              = 0x17\n\tNL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL                 = 0x12\n\tNL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL                 = 0xc\n\tNL80211_MESHCONF_HWMP_RANN_INTERVAL                     = 0x10\n\tNL80211_MESHCONF_HWMP_ROOT_INTERVAL                     = 0x18\n\tNL80211_MESHCONF_HWMP_ROOTMODE                          = 0xe\n\tNL80211_MESHCONF_MAX_PEER_LINKS                         = 0x4\n\tNL80211_MESHCONF_MAX_RETRIES                            = 0x5\n\tNL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT                  = 0xa\n\tNL80211_MESHCONF_NOLEARN                                = 0x1e\n\tNL80211_MESHCONF_PATH_REFRESH_TIME                      = 0x9\n\tNL80211_MESHCONF_PLINK_TIMEOUT                          = 0x1c\n\tNL80211_MESHCONF_POWER_MODE                             = 0x1a\n\tNL80211_MESHCONF_RETRY_TIMEOUT                          = 0x1\n\tNL80211_MESHCONF_RSSI_THRESHOLD                         = 0x14\n\tNL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR               = 0x15\n\tNL80211_MESHCONF_TTL                                    = 0x6\n\tNL80211_MESH_POWER_ACTIVE                               = 0x1\n\tNL80211_MESH_POWER_DEEP_SLEEP                           = 0x3\n\tNL80211_MESH_POWER_LIGHT_SLEEP                          = 0x2\n\tNL80211_MESH_POWER_MAX                                  = 0x3\n\tNL80211_MESH_POWER_UNKNOWN                              = 0x0\n\tNL80211_MESH_SETUP_ATTR_MAX                             = 0x8\n\tNL80211_MESH_SETUP_AUTH_PROTOCOL                        = 0x8\n\tNL80211_MESH_SETUP_ENABLE_VENDOR_METRIC                 = 0x2\n\tNL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL               = 0x1\n\tNL80211_MESH_SETUP_ENABLE_VENDOR_SYNC                   = 0x6\n\tNL80211_MESH_SETUP_IE                                   = 0x3\n\tNL80211_MESH_SETUP_USERSPACE_AMPE                       = 0x5\n\tNL80211_MESH_SETUP_USERSPACE_AUTH                       = 0x4\n\tNL80211_MESH_SETUP_USERSPACE_MPM                        = 0x7\n\tNL80211_MESH_SETUP_VENDOR_PATH_SEL_IE                   = 0x3\n\tNL80211_MFP_NO                                          = 0x0\n\tNL80211_MFP_OPTIONAL                                    = 0x2\n\tNL80211_MFP_REQUIRED                                    = 0x1\n\tNL80211_MIN_REMAIN_ON_CHANNEL_TIME                      = 0xa\n\tNL80211_MNTR_FLAG_ACTIVE                                = 0x6\n\tNL80211_MNTR_FLAG_CONTROL                               = 0x3\n\tNL80211_MNTR_FLAG_COOK_FRAMES                           = 0x5\n\tNL80211_MNTR_FLAG_FCSFAIL                               = 0x1\n\tNL80211_MNTR_FLAG_MAX                                   = 0x7\n\tNL80211_MNTR_FLAG_OTHER_BSS                             = 0x4\n\tNL80211_MNTR_FLAG_PLCPFAIL                              = 0x2\n\tNL80211_MPATH_FLAG_ACTIVE                               = 0x1\n\tNL80211_MPATH_FLAG_FIXED                                = 0x8\n\tNL80211_MPATH_FLAG_RESOLVED                             = 0x10\n\tNL80211_MPATH_FLAG_RESOLVING                            = 0x2\n\tNL80211_MPATH_FLAG_SN_VALID                             = 0x4\n\tNL80211_MPATH_INFO_DISCOVERY_RETRIES                    = 0x7\n\tNL80211_MPATH_INFO_DISCOVERY_TIMEOUT                    = 0x6\n\tNL80211_MPATH_INFO_EXPTIME                              = 0x4\n\tNL80211_MPATH_INFO_FLAGS                                = 0x5\n\tNL80211_MPATH_INFO_FRAME_QLEN                           = 0x1\n\tNL80211_MPATH_INFO_HOP_COUNT                            = 0x8\n\tNL80211_MPATH_INFO_MAX                                  = 0x9\n\tNL80211_MPATH_INFO_METRIC                               = 0x3\n\tNL80211_MPATH_INFO_PATH_CHANGE                          = 0x9\n\tNL80211_MPATH_INFO_SN                                   = 0x2\n\tNL80211_MULTICAST_GROUP_CONFIG                          = \"config\"\n\tNL80211_MULTICAST_GROUP_MLME                            = \"mlme\"\n\tNL80211_MULTICAST_GROUP_NAN                             = \"nan\"\n\tNL80211_MULTICAST_GROUP_REG                             = \"regulatory\"\n\tNL80211_MULTICAST_GROUP_SCAN                            = \"scan\"\n\tNL80211_MULTICAST_GROUP_TESTMODE                        = \"testmode\"\n\tNL80211_MULTICAST_GROUP_VENDOR                          = \"vendor\"\n\tNL80211_NAN_FUNC_ATTR_MAX                               = 0x10\n\tNL80211_NAN_FUNC_CLOSE_RANGE                            = 0x9\n\tNL80211_NAN_FUNC_FOLLOW_UP                              = 0x2\n\tNL80211_NAN_FUNC_FOLLOW_UP_DEST                         = 0x8\n\tNL80211_NAN_FUNC_FOLLOW_UP_ID                           = 0x6\n\tNL80211_NAN_FUNC_FOLLOW_UP_REQ_ID                       = 0x7\n\tNL80211_NAN_FUNC_INSTANCE_ID                            = 0xf\n\tNL80211_NAN_FUNC_MAX_TYPE                               = 0x2\n\tNL80211_NAN_FUNC_PUBLISH_BCAST                          = 0x4\n\tNL80211_NAN_FUNC_PUBLISH                                = 0x0\n\tNL80211_NAN_FUNC_PUBLISH_TYPE                           = 0x3\n\tNL80211_NAN_FUNC_RX_MATCH_FILTER                        = 0xd\n\tNL80211_NAN_FUNC_SERVICE_ID                             = 0x2\n\tNL80211_NAN_FUNC_SERVICE_ID_LEN                         = 0x6\n\tNL80211_NAN_FUNC_SERVICE_INFO                           = 0xb\n\tNL80211_NAN_FUNC_SERVICE_SPEC_INFO_MAX_LEN              = 0xff\n\tNL80211_NAN_FUNC_SRF                                    = 0xc\n\tNL80211_NAN_FUNC_SRF_MAX_LEN                            = 0xff\n\tNL80211_NAN_FUNC_SUBSCRIBE_ACTIVE                       = 0x5\n\tNL80211_NAN_FUNC_SUBSCRIBE                              = 0x1\n\tNL80211_NAN_FUNC_TERM_REASON                            = 0x10\n\tNL80211_NAN_FUNC_TERM_REASON_ERROR                      = 0x2\n\tNL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED                = 0x1\n\tNL80211_NAN_FUNC_TERM_REASON_USER_REQUEST               = 0x0\n\tNL80211_NAN_FUNC_TTL                                    = 0xa\n\tNL80211_NAN_FUNC_TX_MATCH_FILTER                        = 0xe\n\tNL80211_NAN_FUNC_TYPE                                   = 0x1\n\tNL80211_NAN_MATCH_ATTR_MAX                              = 0x2\n\tNL80211_NAN_MATCH_FUNC_LOCAL                            = 0x1\n\tNL80211_NAN_MATCH_FUNC_PEER                             = 0x2\n\tNL80211_NAN_SOLICITED_PUBLISH                           = 0x1\n\tNL80211_NAN_SRF_ATTR_MAX                                = 0x4\n\tNL80211_NAN_SRF_BF                                      = 0x2\n\tNL80211_NAN_SRF_BF_IDX                                  = 0x3\n\tNL80211_NAN_SRF_INCLUDE                                 = 0x1\n\tNL80211_NAN_SRF_MAC_ADDRS                               = 0x4\n\tNL80211_NAN_UNSOLICITED_PUBLISH                         = 0x2\n\tNL80211_NUM_ACS                                         = 0x4\n\tNL80211_P2P_PS_SUPPORTED                                = 0x1\n\tNL80211_P2P_PS_UNSUPPORTED                              = 0x0\n\tNL80211_PKTPAT_MASK                                     = 0x1\n\tNL80211_PKTPAT_OFFSET                                   = 0x3\n\tNL80211_PKTPAT_PATTERN                                  = 0x2\n\tNL80211_PLINK_ACTION_BLOCK                              = 0x2\n\tNL80211_PLINK_ACTION_NO_ACTION                          = 0x0\n\tNL80211_PLINK_ACTION_OPEN                               = 0x1\n\tNL80211_PLINK_BLOCKED                                   = 0x6\n\tNL80211_PLINK_CNF_RCVD                                  = 0x3\n\tNL80211_PLINK_ESTAB                                     = 0x4\n\tNL80211_PLINK_HOLDING                                   = 0x5\n\tNL80211_PLINK_LISTEN                                    = 0x0\n\tNL80211_PLINK_OPN_RCVD                                  = 0x2\n\tNL80211_PLINK_OPN_SNT                                   = 0x1\n\tNL80211_PMKSA_CANDIDATE_BSSID                           = 0x2\n\tNL80211_PMKSA_CANDIDATE_INDEX                           = 0x1\n\tNL80211_PMKSA_CANDIDATE_PREAUTH                         = 0x3\n\tNL80211_PMSR_ATTR_MAX                                   = 0x5\n\tNL80211_PMSR_ATTR_MAX_PEERS                             = 0x1\n\tNL80211_PMSR_ATTR_PEERS                                 = 0x5\n\tNL80211_PMSR_ATTR_RANDOMIZE_MAC_ADDR                    = 0x3\n\tNL80211_PMSR_ATTR_REPORT_AP_TSF                         = 0x2\n\tNL80211_PMSR_ATTR_TYPE_CAPA                             = 0x4\n\tNL80211_PMSR_FTM_CAPA_ATTR_ASAP                         = 0x1\n\tNL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS                   = 0x6\n\tNL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT          = 0x7\n\tNL80211_PMSR_FTM_CAPA_ATTR_MAX                          = 0xa\n\tNL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST           = 0x8\n\tNL80211_PMSR_FTM_CAPA_ATTR_NON_ASAP                     = 0x2\n\tNL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED            = 0xa\n\tNL80211_PMSR_FTM_CAPA_ATTR_PREAMBLES                    = 0x5\n\tNL80211_PMSR_FTM_CAPA_ATTR_REQ_CIVICLOC                 = 0x4\n\tNL80211_PMSR_FTM_CAPA_ATTR_REQ_LCI                      = 0x3\n\tNL80211_PMSR_FTM_CAPA_ATTR_TRIGGER_BASED                = 0x9\n\tNL80211_PMSR_FTM_FAILURE_BAD_CHANGED_PARAMS             = 0x7\n\tNL80211_PMSR_FTM_FAILURE_INVALID_TIMESTAMP              = 0x5\n\tNL80211_PMSR_FTM_FAILURE_NO_RESPONSE                    = 0x1\n\tNL80211_PMSR_FTM_FAILURE_PEER_BUSY                      = 0x6\n\tNL80211_PMSR_FTM_FAILURE_PEER_NOT_CAPABLE               = 0x4\n\tNL80211_PMSR_FTM_FAILURE_REJECTED                       = 0x2\n\tNL80211_PMSR_FTM_FAILURE_UNSPECIFIED                    = 0x0\n\tNL80211_PMSR_FTM_FAILURE_WRONG_CHANNEL                  = 0x3\n\tNL80211_PMSR_FTM_REQ_ATTR_ASAP                          = 0x1\n\tNL80211_PMSR_FTM_REQ_ATTR_BSS_COLOR                     = 0xd\n\tNL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION                = 0x5\n\tNL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD                  = 0x4\n\tNL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST                = 0x6\n\tNL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK                  = 0xc\n\tNL80211_PMSR_FTM_REQ_ATTR_MAX                           = 0xd\n\tNL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED             = 0xb\n\tNL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP                = 0x3\n\tNL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES              = 0x7\n\tNL80211_PMSR_FTM_REQ_ATTR_PREAMBLE                      = 0x2\n\tNL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC              = 0x9\n\tNL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI                   = 0x8\n\tNL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED                 = 0xa\n\tNL80211_PMSR_FTM_RESP_ATTR_BURST_DURATION               = 0x7\n\tNL80211_PMSR_FTM_RESP_ATTR_BURST_INDEX                  = 0x2\n\tNL80211_PMSR_FTM_RESP_ATTR_BUSY_RETRY_TIME              = 0x5\n\tNL80211_PMSR_FTM_RESP_ATTR_CIVICLOC                     = 0x14\n\tNL80211_PMSR_FTM_RESP_ATTR_DIST_AVG                     = 0x10\n\tNL80211_PMSR_FTM_RESP_ATTR_DIST_SPREAD                  = 0x12\n\tNL80211_PMSR_FTM_RESP_ATTR_DIST_VARIANCE                = 0x11\n\tNL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON                  = 0x1\n\tNL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST               = 0x8\n\tNL80211_PMSR_FTM_RESP_ATTR_LCI                          = 0x13\n\tNL80211_PMSR_FTM_RESP_ATTR_MAX                          = 0x15\n\tNL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP               = 0x6\n\tNL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS            = 0x3\n\tNL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES           = 0x4\n\tNL80211_PMSR_FTM_RESP_ATTR_PAD                          = 0x15\n\tNL80211_PMSR_FTM_RESP_ATTR_RSSI_AVG                     = 0x9\n\tNL80211_PMSR_FTM_RESP_ATTR_RSSI_SPREAD                  = 0xa\n\tNL80211_PMSR_FTM_RESP_ATTR_RTT_AVG                      = 0xd\n\tNL80211_PMSR_FTM_RESP_ATTR_RTT_SPREAD                   = 0xf\n\tNL80211_PMSR_FTM_RESP_ATTR_RTT_VARIANCE                 = 0xe\n\tNL80211_PMSR_FTM_RESP_ATTR_RX_RATE                      = 0xc\n\tNL80211_PMSR_FTM_RESP_ATTR_TX_RATE                      = 0xb\n\tNL80211_PMSR_PEER_ATTR_ADDR                             = 0x1\n\tNL80211_PMSR_PEER_ATTR_CHAN                             = 0x2\n\tNL80211_PMSR_PEER_ATTR_MAX                              = 0x4\n\tNL80211_PMSR_PEER_ATTR_REQ                              = 0x3\n\tNL80211_PMSR_PEER_ATTR_RESP                             = 0x4\n\tNL80211_PMSR_REQ_ATTR_DATA                              = 0x1\n\tNL80211_PMSR_REQ_ATTR_GET_AP_TSF                        = 0x2\n\tNL80211_PMSR_REQ_ATTR_MAX                               = 0x2\n\tNL80211_PMSR_RESP_ATTR_AP_TSF                           = 0x4\n\tNL80211_PMSR_RESP_ATTR_DATA                             = 0x1\n\tNL80211_PMSR_RESP_ATTR_FINAL                            = 0x5\n\tNL80211_PMSR_RESP_ATTR_HOST_TIME                        = 0x3\n\tNL80211_PMSR_RESP_ATTR_MAX                              = 0x6\n\tNL80211_PMSR_RESP_ATTR_PAD                              = 0x6\n\tNL80211_PMSR_RESP_ATTR_STATUS                           = 0x2\n\tNL80211_PMSR_STATUS_FAILURE                             = 0x3\n\tNL80211_PMSR_STATUS_REFUSED                             = 0x1\n\tNL80211_PMSR_STATUS_SUCCESS                             = 0x0\n\tNL80211_PMSR_STATUS_TIMEOUT                             = 0x2\n\tNL80211_PMSR_TYPE_FTM                                   = 0x1\n\tNL80211_PMSR_TYPE_INVALID                               = 0x0\n\tNL80211_PMSR_TYPE_MAX                                   = 0x1\n\tNL80211_PREAMBLE_DMG                                    = 0x3\n\tNL80211_PREAMBLE_HE                                     = 0x4\n\tNL80211_PREAMBLE_HT                                     = 0x1\n\tNL80211_PREAMBLE_LEGACY                                 = 0x0\n\tNL80211_PREAMBLE_VHT                                    = 0x2\n\tNL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U               = 0x8\n\tNL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P                  = 0x4\n\tNL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2                 = 0x2\n\tNL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS                  = 0x1\n\tNL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP               = 0x1\n\tNL80211_PS_DISABLED                                     = 0x0\n\tNL80211_PS_ENABLED                                      = 0x1\n\tNL80211_RADAR_CAC_ABORTED                               = 0x2\n\tNL80211_RADAR_CAC_FINISHED                              = 0x1\n\tNL80211_RADAR_CAC_STARTED                               = 0x5\n\tNL80211_RADAR_DETECTED                                  = 0x0\n\tNL80211_RADAR_NOP_FINISHED                              = 0x3\n\tNL80211_RADAR_PRE_CAC_EXPIRED                           = 0x4\n\tNL80211_RATE_INFO_10_MHZ_WIDTH                          = 0xb\n\tNL80211_RATE_INFO_160_MHZ_WIDTH                         = 0xa\n\tNL80211_RATE_INFO_16_MHZ_WIDTH                          = 0x1d\n\tNL80211_RATE_INFO_1_MHZ_WIDTH                           = 0x19\n\tNL80211_RATE_INFO_2_MHZ_WIDTH                           = 0x1a\n\tNL80211_RATE_INFO_320_MHZ_WIDTH                         = 0x12\n\tNL80211_RATE_INFO_40_MHZ_WIDTH                          = 0x3\n\tNL80211_RATE_INFO_4_MHZ_WIDTH                           = 0x1b\n\tNL80211_RATE_INFO_5_MHZ_WIDTH                           = 0xc\n\tNL80211_RATE_INFO_80_MHZ_WIDTH                          = 0x8\n\tNL80211_RATE_INFO_80P80_MHZ_WIDTH                       = 0x9\n\tNL80211_RATE_INFO_8_MHZ_WIDTH                           = 0x1c\n\tNL80211_RATE_INFO_BITRATE32                             = 0x5\n\tNL80211_RATE_INFO_BITRATE                               = 0x1\n\tNL80211_RATE_INFO_EHT_GI_0_8                            = 0x0\n\tNL80211_RATE_INFO_EHT_GI_1_6                            = 0x1\n\tNL80211_RATE_INFO_EHT_GI_3_2                            = 0x2\n\tNL80211_RATE_INFO_EHT_GI                                = 0x15\n\tNL80211_RATE_INFO_EHT_MCS                               = 0x13\n\tNL80211_RATE_INFO_EHT_NSS                               = 0x14\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_106                      = 0x3\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_106P26                   = 0x4\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_242                      = 0x5\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_26                       = 0x0\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_2x996                    = 0xb\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_2x996P484                = 0xc\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_3x996                    = 0xd\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_3x996P484                = 0xe\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_484                      = 0x6\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_484P242                  = 0x7\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_4x996                    = 0xf\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_52                       = 0x1\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_52P26                    = 0x2\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_996                      = 0x8\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_996P484                  = 0x9\n\tNL80211_RATE_INFO_EHT_RU_ALLOC_996P484P242              = 0xa\n\tNL80211_RATE_INFO_EHT_RU_ALLOC                          = 0x16\n\tNL80211_RATE_INFO_HE_1XLTF                              = 0x0\n\tNL80211_RATE_INFO_HE_2XLTF                              = 0x1\n\tNL80211_RATE_INFO_HE_4XLTF                              = 0x2\n\tNL80211_RATE_INFO_HE_DCM                                = 0x10\n\tNL80211_RATE_INFO_HE_GI_0_8                             = 0x0\n\tNL80211_RATE_INFO_HE_GI_1_6                             = 0x1\n\tNL80211_RATE_INFO_HE_GI_3_2                             = 0x2\n\tNL80211_RATE_INFO_HE_GI                                 = 0xf\n\tNL80211_RATE_INFO_HE_MCS                                = 0xd\n\tNL80211_RATE_INFO_HE_NSS                                = 0xe\n\tNL80211_RATE_INFO_HE_RU_ALLOC_106                       = 0x2\n\tNL80211_RATE_INFO_HE_RU_ALLOC_242                       = 0x3\n\tNL80211_RATE_INFO_HE_RU_ALLOC_26                        = 0x0\n\tNL80211_RATE_INFO_HE_RU_ALLOC_2x996                     = 0x6\n\tNL80211_RATE_INFO_HE_RU_ALLOC_484                       = 0x4\n\tNL80211_RATE_INFO_HE_RU_ALLOC_52                        = 0x1\n\tNL80211_RATE_INFO_HE_RU_ALLOC_996                       = 0x5\n\tNL80211_RATE_INFO_HE_RU_ALLOC                           = 0x11\n\tNL80211_RATE_INFO_MAX                                   = 0x1d\n\tNL80211_RATE_INFO_MCS                                   = 0x2\n\tNL80211_RATE_INFO_S1G_MCS                               = 0x17\n\tNL80211_RATE_INFO_S1G_NSS                               = 0x18\n\tNL80211_RATE_INFO_SHORT_GI                              = 0x4\n\tNL80211_RATE_INFO_VHT_MCS                               = 0x6\n\tNL80211_RATE_INFO_VHT_NSS                               = 0x7\n\tNL80211_REGDOM_SET_BY_CORE                              = 0x0\n\tNL80211_REGDOM_SET_BY_COUNTRY_IE                        = 0x3\n\tNL80211_REGDOM_SET_BY_DRIVER                            = 0x2\n\tNL80211_REGDOM_SET_BY_USER                              = 0x1\n\tNL80211_REGDOM_TYPE_COUNTRY                             = 0x0\n\tNL80211_REGDOM_TYPE_CUSTOM_WORLD                        = 0x2\n\tNL80211_REGDOM_TYPE_INTERSECTION                        = 0x3\n\tNL80211_REGDOM_TYPE_WORLD                               = 0x1\n\tNL80211_REG_RULE_ATTR_MAX                               = 0x8\n\tNL80211_REKEY_DATA_AKM                                  = 0x4\n\tNL80211_REKEY_DATA_KCK                                  = 0x2\n\tNL80211_REKEY_DATA_KEK                                  = 0x1\n\tNL80211_REKEY_DATA_REPLAY_CTR                           = 0x3\n\tNL80211_REPLAY_CTR_LEN                                  = 0x8\n\tNL80211_RRF_ALLOW_6GHZ_VLP_AP                           = 0x1000000\n\tNL80211_RRF_AUTO_BW                                     = 0x800\n\tNL80211_RRF_DFS                                         = 0x10\n\tNL80211_RRF_DFS_CONCURRENT                              = 0x200000\n\tNL80211_RRF_GO_CONCURRENT                               = 0x1000\n\tNL80211_RRF_IR_CONCURRENT                               = 0x1000\n\tNL80211_RRF_NO_160MHZ                                   = 0x10000\n\tNL80211_RRF_NO_320MHZ                                   = 0x40000\n\tNL80211_RRF_NO_6GHZ_AFC_CLIENT                          = 0x800000\n\tNL80211_RRF_NO_6GHZ_VLP_CLIENT                          = 0x400000\n\tNL80211_RRF_NO_80MHZ                                    = 0x8000\n\tNL80211_RRF_NO_CCK                                      = 0x2\n\tNL80211_RRF_NO_EHT                                      = 0x80000\n\tNL80211_RRF_NO_HE                                       = 0x20000\n\tNL80211_RRF_NO_HT40                                     = 0x6000\n\tNL80211_RRF_NO_HT40MINUS                                = 0x2000\n\tNL80211_RRF_NO_HT40PLUS                                 = 0x4000\n\tNL80211_RRF_NO_IBSS                                     = 0x80\n\tNL80211_RRF_NO_INDOOR                                   = 0x4\n\tNL80211_RRF_NO_IR_ALL                                   = 0x180\n\tNL80211_RRF_NO_IR                                       = 0x80\n\tNL80211_RRF_NO_OFDM                                     = 0x1\n\tNL80211_RRF_NO_OUTDOOR                                  = 0x8\n\tNL80211_RRF_NO_UHB_AFC_CLIENT                           = 0x800000\n\tNL80211_RRF_NO_UHB_VLP_CLIENT                           = 0x400000\n\tNL80211_RRF_PASSIVE_SCAN                                = 0x80\n\tNL80211_RRF_PSD                                         = 0x100000\n\tNL80211_RRF_PTMP_ONLY                                   = 0x40\n\tNL80211_RRF_PTP_ONLY                                    = 0x20\n\tNL80211_RXMGMT_FLAG_ANSWERED                            = 0x1\n\tNL80211_RXMGMT_FLAG_EXTERNAL_AUTH                       = 0x2\n\tNL80211_SAE_PWE_BOTH                                    = 0x3\n\tNL80211_SAE_PWE_HASH_TO_ELEMENT                         = 0x2\n\tNL80211_SAE_PWE_HUNT_AND_PECK                           = 0x1\n\tNL80211_SAE_PWE_UNSPECIFIED                             = 0x0\n\tNL80211_SAR_ATTR_MAX                                    = 0x2\n\tNL80211_SAR_ATTR_SPECS                                  = 0x2\n\tNL80211_SAR_ATTR_SPECS_END_FREQ                         = 0x4\n\tNL80211_SAR_ATTR_SPECS_MAX                              = 0x4\n\tNL80211_SAR_ATTR_SPECS_POWER                            = 0x1\n\tNL80211_SAR_ATTR_SPECS_RANGE_INDEX                      = 0x2\n\tNL80211_SAR_ATTR_SPECS_START_FREQ                       = 0x3\n\tNL80211_SAR_ATTR_TYPE                                   = 0x1\n\tNL80211_SAR_TYPE_POWER                                  = 0x0\n\tNL80211_SCAN_FLAG_ACCEPT_BCAST_PROBE_RESP               = 0x20\n\tNL80211_SCAN_FLAG_AP                                    = 0x4\n\tNL80211_SCAN_FLAG_COLOCATED_6GHZ                        = 0x4000\n\tNL80211_SCAN_FLAG_FILS_MAX_CHANNEL_TIME                 = 0x10\n\tNL80211_SCAN_FLAG_FLUSH                                 = 0x2\n\tNL80211_SCAN_FLAG_FREQ_KHZ                              = 0x2000\n\tNL80211_SCAN_FLAG_HIGH_ACCURACY                         = 0x400\n\tNL80211_SCAN_FLAG_LOW_POWER                             = 0x200\n\tNL80211_SCAN_FLAG_LOW_PRIORITY                          = 0x1\n\tNL80211_SCAN_FLAG_LOW_SPAN                              = 0x100\n\tNL80211_SCAN_FLAG_MIN_PREQ_CONTENT                      = 0x1000\n\tNL80211_SCAN_FLAG_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION    = 0x80\n\tNL80211_SCAN_FLAG_OCE_PROBE_REQ_HIGH_TX_RATE            = 0x40\n\tNL80211_SCAN_FLAG_RANDOM_ADDR                           = 0x8\n\tNL80211_SCAN_FLAG_RANDOM_SN                             = 0x800\n\tNL80211_SCAN_RSSI_THOLD_OFF                             = -0x12c\n\tNL80211_SCHED_SCAN_MATCH_ATTR_BSSID                     = 0x5\n\tNL80211_SCHED_SCAN_MATCH_ATTR_MAX                       = 0x6\n\tNL80211_SCHED_SCAN_MATCH_ATTR_RELATIVE_RSSI             = 0x3\n\tNL80211_SCHED_SCAN_MATCH_ATTR_RSSI_ADJUST               = 0x4\n\tNL80211_SCHED_SCAN_MATCH_ATTR_RSSI                      = 0x2\n\tNL80211_SCHED_SCAN_MATCH_ATTR_SSID                      = 0x1\n\tNL80211_SCHED_SCAN_MATCH_PER_BAND_RSSI                  = 0x6\n\tNL80211_SCHED_SCAN_PLAN_INTERVAL                        = 0x1\n\tNL80211_SCHED_SCAN_PLAN_ITERATIONS                      = 0x2\n\tNL80211_SCHED_SCAN_PLAN_MAX                             = 0x2\n\tNL80211_SMPS_DYNAMIC                                    = 0x2\n\tNL80211_SMPS_MAX                                        = 0x2\n\tNL80211_SMPS_OFF                                        = 0x0\n\tNL80211_SMPS_STATIC                                     = 0x1\n\tNL80211_STA_BSS_PARAM_BEACON_INTERVAL                   = 0x5\n\tNL80211_STA_BSS_PARAM_CTS_PROT                          = 0x1\n\tNL80211_STA_BSS_PARAM_DTIM_PERIOD                       = 0x4\n\tNL80211_STA_BSS_PARAM_MAX                               = 0x5\n\tNL80211_STA_BSS_PARAM_SHORT_PREAMBLE                    = 0x2\n\tNL80211_STA_BSS_PARAM_SHORT_SLOT_TIME                   = 0x3\n\tNL80211_STA_FLAG_ASSOCIATED                             = 0x7\n\tNL80211_STA_FLAG_AUTHENTICATED                          = 0x5\n\tNL80211_STA_FLAG_AUTHORIZED                             = 0x1\n\tNL80211_STA_FLAG_MAX                                    = 0x8\n\tNL80211_STA_FLAG_MAX_OLD_API                            = 0x6\n\tNL80211_STA_FLAG_MFP                                    = 0x4\n\tNL80211_STA_FLAG_SHORT_PREAMBLE                         = 0x2\n\tNL80211_STA_FLAG_SPP_AMSDU                              = 0x8\n\tNL80211_STA_FLAG_TDLS_PEER                              = 0x6\n\tNL80211_STA_FLAG_WME                                    = 0x3\n\tNL80211_STA_INFO_ACK_SIGNAL_AVG                         = 0x23\n\tNL80211_STA_INFO_ACK_SIGNAL                             = 0x22\n\tNL80211_STA_INFO_AIRTIME_LINK_METRIC                    = 0x29\n\tNL80211_STA_INFO_AIRTIME_WEIGHT                         = 0x28\n\tNL80211_STA_INFO_ASSOC_AT_BOOTTIME                      = 0x2a\n\tNL80211_STA_INFO_BEACON_LOSS                            = 0x12\n\tNL80211_STA_INFO_BEACON_RX                              = 0x1d\n\tNL80211_STA_INFO_BEACON_SIGNAL_AVG                      = 0x1e\n\tNL80211_STA_INFO_BSS_PARAM                              = 0xf\n\tNL80211_STA_INFO_CHAIN_SIGNAL_AVG                       = 0x1a\n\tNL80211_STA_INFO_CHAIN_SIGNAL                           = 0x19\n\tNL80211_STA_INFO_CONNECTED_TIME                         = 0x10\n\tNL80211_STA_INFO_CONNECTED_TO_AS                        = 0x2b\n\tNL80211_STA_INFO_CONNECTED_TO_GATE                      = 0x26\n\tNL80211_STA_INFO_DATA_ACK_SIGNAL_AVG                    = 0x23\n\tNL80211_STA_INFO_EXPECTED_THROUGHPUT                    = 0x1b\n\tNL80211_STA_INFO_FCS_ERROR_COUNT                        = 0x25\n\tNL80211_STA_INFO_INACTIVE_TIME                          = 0x1\n\tNL80211_STA_INFO_LLID                                   = 0x4\n\tNL80211_STA_INFO_LOCAL_PM                               = 0x14\n\tNL80211_STA_INFO_MAX                                    = 0x2b\n\tNL80211_STA_INFO_NONPEER_PM                             = 0x16\n\tNL80211_STA_INFO_PAD                                    = 0x21\n\tNL80211_STA_INFO_PEER_PM                                = 0x15\n\tNL80211_STA_INFO_PLID                                   = 0x5\n\tNL80211_STA_INFO_PLINK_STATE                            = 0x6\n\tNL80211_STA_INFO_RX_BITRATE                             = 0xe\n\tNL80211_STA_INFO_RX_BYTES64                             = 0x17\n\tNL80211_STA_INFO_RX_BYTES                               = 0x2\n\tNL80211_STA_INFO_RX_DROP_MISC                           = 0x1c\n\tNL80211_STA_INFO_RX_DURATION                            = 0x20\n\tNL80211_STA_INFO_RX_MPDUS                               = 0x24\n\tNL80211_STA_INFO_RX_PACKETS                             = 0x9\n\tNL80211_STA_INFO_SIGNAL_AVG                             = 0xd\n\tNL80211_STA_INFO_SIGNAL                                 = 0x7\n\tNL80211_STA_INFO_STA_FLAGS                              = 0x11\n\tNL80211_STA_INFO_TID_STATS                              = 0x1f\n\tNL80211_STA_INFO_T_OFFSET                               = 0x13\n\tNL80211_STA_INFO_TX_BITRATE                             = 0x8\n\tNL80211_STA_INFO_TX_BYTES64                             = 0x18\n\tNL80211_STA_INFO_TX_BYTES                               = 0x3\n\tNL80211_STA_INFO_TX_DURATION                            = 0x27\n\tNL80211_STA_INFO_TX_FAILED                              = 0xc\n\tNL80211_STA_INFO_TX_PACKETS                             = 0xa\n\tNL80211_STA_INFO_TX_RETRIES                             = 0xb\n\tNL80211_STA_WME_MAX                                     = 0x2\n\tNL80211_STA_WME_MAX_SP                                  = 0x2\n\tNL80211_STA_WME_UAPSD_QUEUES                            = 0x1\n\tNL80211_SURVEY_INFO_CHANNEL_TIME_BUSY                   = 0x5\n\tNL80211_SURVEY_INFO_CHANNEL_TIME                        = 0x4\n\tNL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY               = 0x6\n\tNL80211_SURVEY_INFO_CHANNEL_TIME_RX                     = 0x7\n\tNL80211_SURVEY_INFO_CHANNEL_TIME_TX                     = 0x8\n\tNL80211_SURVEY_INFO_FREQUENCY                           = 0x1\n\tNL80211_SURVEY_INFO_FREQUENCY_OFFSET                    = 0xc\n\tNL80211_SURVEY_INFO_IN_USE                              = 0x3\n\tNL80211_SURVEY_INFO_MAX                                 = 0xc\n\tNL80211_SURVEY_INFO_NOISE                               = 0x2\n\tNL80211_SURVEY_INFO_PAD                                 = 0xa\n\tNL80211_SURVEY_INFO_TIME_BSS_RX                         = 0xb\n\tNL80211_SURVEY_INFO_TIME_BUSY                           = 0x5\n\tNL80211_SURVEY_INFO_TIME                                = 0x4\n\tNL80211_SURVEY_INFO_TIME_EXT_BUSY                       = 0x6\n\tNL80211_SURVEY_INFO_TIME_RX                             = 0x7\n\tNL80211_SURVEY_INFO_TIME_SCAN                           = 0x9\n\tNL80211_SURVEY_INFO_TIME_TX                             = 0x8\n\tNL80211_TDLS_DISABLE_LINK                               = 0x4\n\tNL80211_TDLS_DISCOVERY_REQ                              = 0x0\n\tNL80211_TDLS_ENABLE_LINK                                = 0x3\n\tNL80211_TDLS_PEER_HE                                    = 0x8\n\tNL80211_TDLS_PEER_HT                                    = 0x1\n\tNL80211_TDLS_PEER_VHT                                   = 0x2\n\tNL80211_TDLS_PEER_WMM                                   = 0x4\n\tNL80211_TDLS_SETUP                                      = 0x1\n\tNL80211_TDLS_TEARDOWN                                   = 0x2\n\tNL80211_TID_CONFIG_ATTR_AMPDU_CTRL                      = 0x9\n\tNL80211_TID_CONFIG_ATTR_AMSDU_CTRL                      = 0xb\n\tNL80211_TID_CONFIG_ATTR_MAX                             = 0xd\n\tNL80211_TID_CONFIG_ATTR_NOACK                           = 0x6\n\tNL80211_TID_CONFIG_ATTR_OVERRIDE                        = 0x4\n\tNL80211_TID_CONFIG_ATTR_PAD                             = 0x1\n\tNL80211_TID_CONFIG_ATTR_PEER_SUPP                       = 0x3\n\tNL80211_TID_CONFIG_ATTR_RETRY_LONG                      = 0x8\n\tNL80211_TID_CONFIG_ATTR_RETRY_SHORT                     = 0x7\n\tNL80211_TID_CONFIG_ATTR_RTSCTS_CTRL                     = 0xa\n\tNL80211_TID_CONFIG_ATTR_TIDS                            = 0x5\n\tNL80211_TID_CONFIG_ATTR_TX_RATE                         = 0xd\n\tNL80211_TID_CONFIG_ATTR_TX_RATE_TYPE                    = 0xc\n\tNL80211_TID_CONFIG_ATTR_VIF_SUPP                        = 0x2\n\tNL80211_TID_CONFIG_DISABLE                              = 0x1\n\tNL80211_TID_CONFIG_ENABLE                               = 0x0\n\tNL80211_TID_STATS_MAX                                   = 0x6\n\tNL80211_TID_STATS_PAD                                   = 0x5\n\tNL80211_TID_STATS_RX_MSDU                               = 0x1\n\tNL80211_TID_STATS_TX_MSDU                               = 0x2\n\tNL80211_TID_STATS_TX_MSDU_FAILED                        = 0x4\n\tNL80211_TID_STATS_TX_MSDU_RETRIES                       = 0x3\n\tNL80211_TID_STATS_TXQ_STATS                             = 0x6\n\tNL80211_TIMEOUT_ASSOC                                   = 0x3\n\tNL80211_TIMEOUT_AUTH                                    = 0x2\n\tNL80211_TIMEOUT_SCAN                                    = 0x1\n\tNL80211_TIMEOUT_UNSPECIFIED                             = 0x0\n\tNL80211_TKIP_DATA_OFFSET_ENCR_KEY                       = 0x0\n\tNL80211_TKIP_DATA_OFFSET_RX_MIC_KEY                     = 0x18\n\tNL80211_TKIP_DATA_OFFSET_TX_MIC_KEY                     = 0x10\n\tNL80211_TX_POWER_AUTOMATIC                              = 0x0\n\tNL80211_TX_POWER_FIXED                                  = 0x2\n\tNL80211_TX_POWER_LIMITED                                = 0x1\n\tNL80211_TXQ_ATTR_AC                                     = 0x1\n\tNL80211_TXQ_ATTR_AIFS                                   = 0x5\n\tNL80211_TXQ_ATTR_CWMAX                                  = 0x4\n\tNL80211_TXQ_ATTR_CWMIN                                  = 0x3\n\tNL80211_TXQ_ATTR_MAX                                    = 0x5\n\tNL80211_TXQ_ATTR_QUEUE                                  = 0x1\n\tNL80211_TXQ_ATTR_TXOP                                   = 0x2\n\tNL80211_TXQ_Q_BE                                        = 0x2\n\tNL80211_TXQ_Q_BK                                        = 0x3\n\tNL80211_TXQ_Q_VI                                        = 0x1\n\tNL80211_TXQ_Q_VO                                        = 0x0\n\tNL80211_TXQ_STATS_BACKLOG_BYTES                         = 0x1\n\tNL80211_TXQ_STATS_BACKLOG_PACKETS                       = 0x2\n\tNL80211_TXQ_STATS_COLLISIONS                            = 0x8\n\tNL80211_TXQ_STATS_DROPS                                 = 0x4\n\tNL80211_TXQ_STATS_ECN_MARKS                             = 0x5\n\tNL80211_TXQ_STATS_FLOWS                                 = 0x3\n\tNL80211_TXQ_STATS_MAX                                   = 0xb\n\tNL80211_TXQ_STATS_MAX_FLOWS                             = 0xb\n\tNL80211_TXQ_STATS_OVERLIMIT                             = 0x6\n\tNL80211_TXQ_STATS_OVERMEMORY                            = 0x7\n\tNL80211_TXQ_STATS_TX_BYTES                              = 0x9\n\tNL80211_TXQ_STATS_TX_PACKETS                            = 0xa\n\tNL80211_TX_RATE_AUTOMATIC                               = 0x0\n\tNL80211_TXRATE_DEFAULT_GI                               = 0x0\n\tNL80211_TX_RATE_FIXED                                   = 0x2\n\tNL80211_TXRATE_FORCE_LGI                                = 0x2\n\tNL80211_TXRATE_FORCE_SGI                                = 0x1\n\tNL80211_TXRATE_GI                                       = 0x4\n\tNL80211_TXRATE_HE                                       = 0x5\n\tNL80211_TXRATE_HE_GI                                    = 0x6\n\tNL80211_TXRATE_HE_LTF                                   = 0x7\n\tNL80211_TXRATE_HT                                       = 0x2\n\tNL80211_TXRATE_LEGACY                                   = 0x1\n\tNL80211_TX_RATE_LIMITED                                 = 0x1\n\tNL80211_TXRATE_MAX                                      = 0x7\n\tNL80211_TXRATE_MCS                                      = 0x2\n\tNL80211_TXRATE_VHT                                      = 0x3\n\tNL80211_UNSOL_BCAST_PROBE_RESP_ATTR_INT                 = 0x1\n\tNL80211_UNSOL_BCAST_PROBE_RESP_ATTR_MAX                 = 0x2\n\tNL80211_UNSOL_BCAST_PROBE_RESP_ATTR_TMPL                = 0x2\n\tNL80211_USER_REG_HINT_CELL_BASE                         = 0x1\n\tNL80211_USER_REG_HINT_INDOOR                            = 0x2\n\tNL80211_USER_REG_HINT_USER                              = 0x0\n\tNL80211_VENDOR_ID_IS_LINUX                              = 0x80000000\n\tNL80211_VHT_CAPABILITY_LEN                              = 0xc\n\tNL80211_VHT_NSS_MAX                                     = 0x8\n\tNL80211_WIPHY_NAME_MAXLEN                               = 0x40\n\tNL80211_WIPHY_RADIO_ATTR_FREQ_RANGE                     = 0x2\n\tNL80211_WIPHY_RADIO_ATTR_INDEX                          = 0x1\n\tNL80211_WIPHY_RADIO_ATTR_INTERFACE_COMBINATION          = 0x3\n\tNL80211_WIPHY_RADIO_ATTR_MAX                            = 0x4\n\tNL80211_WIPHY_RADIO_FREQ_ATTR_END                       = 0x2\n\tNL80211_WIPHY_RADIO_FREQ_ATTR_MAX                       = 0x2\n\tNL80211_WIPHY_RADIO_FREQ_ATTR_START                     = 0x1\n\tNL80211_WMMR_AIFSN                                      = 0x3\n\tNL80211_WMMR_CW_MAX                                     = 0x2\n\tNL80211_WMMR_CW_MIN                                     = 0x1\n\tNL80211_WMMR_MAX                                        = 0x4\n\tNL80211_WMMR_TXOP                                       = 0x4\n\tNL80211_WOWLAN_PKTPAT_MASK                              = 0x1\n\tNL80211_WOWLAN_PKTPAT_OFFSET                            = 0x3\n\tNL80211_WOWLAN_PKTPAT_PATTERN                           = 0x2\n\tNL80211_WOWLAN_TCP_DATA_INTERVAL                        = 0x9\n\tNL80211_WOWLAN_TCP_DATA_PAYLOAD                         = 0x6\n\tNL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ                     = 0x7\n\tNL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN                   = 0x8\n\tNL80211_WOWLAN_TCP_DST_IPV4                             = 0x2\n\tNL80211_WOWLAN_TCP_DST_MAC                              = 0x3\n\tNL80211_WOWLAN_TCP_DST_PORT                             = 0x5\n\tNL80211_WOWLAN_TCP_SRC_IPV4                             = 0x1\n\tNL80211_WOWLAN_TCP_SRC_PORT                             = 0x4\n\tNL80211_WOWLAN_TCP_WAKE_MASK                            = 0xb\n\tNL80211_WOWLAN_TCP_WAKE_PAYLOAD                         = 0xa\n\tNL80211_WOWLAN_TRIG_4WAY_HANDSHAKE                      = 0x8\n\tNL80211_WOWLAN_TRIG_ANY                                 = 0x1\n\tNL80211_WOWLAN_TRIG_DISCONNECT                          = 0x2\n\tNL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST                   = 0x7\n\tNL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE                   = 0x6\n\tNL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED                 = 0x5\n\tNL80211_WOWLAN_TRIG_MAGIC_PKT                           = 0x3\n\tNL80211_WOWLAN_TRIG_NET_DETECT                          = 0x12\n\tNL80211_WOWLAN_TRIG_NET_DETECT_RESULTS                  = 0x13\n\tNL80211_WOWLAN_TRIG_PKT_PATTERN                         = 0x4\n\tNL80211_WOWLAN_TRIG_RFKILL_RELEASE                      = 0x9\n\tNL80211_WOWLAN_TRIG_TCP_CONNECTION                      = 0xe\n\tNL80211_WOWLAN_TRIG_UNPROTECTED_DEAUTH_DISASSOC         = 0x14\n\tNL80211_WOWLAN_TRIG_WAKEUP_PKT_80211                    = 0xa\n\tNL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN                = 0xb\n\tNL80211_WOWLAN_TRIG_WAKEUP_PKT_8023                     = 0xc\n\tNL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN                 = 0xd\n\tNL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST                 = 0x10\n\tNL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH                    = 0xf\n\tNL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS             = 0x11\n\tNL80211_WPA_VERSION_1                                   = 0x1\n\tNL80211_WPA_VERSION_2                                   = 0x2\n\tNL80211_WPA_VERSION_3                                   = 0x4\n)\n\nconst (\n\tFRA_UNSPEC             = 0x0\n\tFRA_DST                = 0x1\n\tFRA_SRC                = 0x2\n\tFRA_IIFNAME            = 0x3\n\tFRA_GOTO               = 0x4\n\tFRA_UNUSED2            = 0x5\n\tFRA_PRIORITY           = 0x6\n\tFRA_UNUSED3            = 0x7\n\tFRA_UNUSED4            = 0x8\n\tFRA_UNUSED5            = 0x9\n\tFRA_FWMARK             = 0xa\n\tFRA_FLOW               = 0xb\n\tFRA_TUN_ID             = 0xc\n\tFRA_SUPPRESS_IFGROUP   = 0xd\n\tFRA_SUPPRESS_PREFIXLEN = 0xe\n\tFRA_TABLE              = 0xf\n\tFRA_FWMASK             = 0x10\n\tFRA_OIFNAME            = 0x11\n\tFRA_PAD                = 0x12\n\tFRA_L3MDEV             = 0x13\n\tFRA_UID_RANGE          = 0x14\n\tFRA_PROTOCOL           = 0x15\n\tFRA_IP_PROTO           = 0x16\n\tFRA_SPORT_RANGE        = 0x17\n\tFRA_DPORT_RANGE        = 0x18\n\tFR_ACT_UNSPEC          = 0x0\n\tFR_ACT_TO_TBL          = 0x1\n\tFR_ACT_GOTO            = 0x2\n\tFR_ACT_NOP             = 0x3\n\tFR_ACT_RES3            = 0x4\n\tFR_ACT_RES4            = 0x5\n\tFR_ACT_BLACKHOLE       = 0x6\n\tFR_ACT_UNREACHABLE     = 0x7\n\tFR_ACT_PROHIBIT        = 0x8\n)\n\nconst (\n\tAUDIT_NLGRP_NONE    = 0x0\n\tAUDIT_NLGRP_READLOG = 0x1\n)\n\nconst (\n\tTUN_F_CSUM    = 0x1\n\tTUN_F_TSO4    = 0x2\n\tTUN_F_TSO6    = 0x4\n\tTUN_F_TSO_ECN = 0x8\n\tTUN_F_UFO     = 0x10\n\tTUN_F_USO4    = 0x20\n\tTUN_F_USO6    = 0x40\n)\n\nconst (\n\tVIRTIO_NET_HDR_F_NEEDS_CSUM = 0x1\n\tVIRTIO_NET_HDR_F_DATA_VALID = 0x2\n\tVIRTIO_NET_HDR_F_RSC_INFO   = 0x4\n)\n\nconst (\n\tVIRTIO_NET_HDR_GSO_NONE   = 0x0\n\tVIRTIO_NET_HDR_GSO_TCPV4  = 0x1\n\tVIRTIO_NET_HDR_GSO_UDP    = 0x3\n\tVIRTIO_NET_HDR_GSO_TCPV6  = 0x4\n\tVIRTIO_NET_HDR_GSO_UDP_L4 = 0x5\n\tVIRTIO_NET_HDR_GSO_ECN    = 0x80\n)\n\ntype SchedAttr struct {\n\tSize     uint32\n\tPolicy   uint32\n\tFlags    uint64\n\tNice     int32\n\tPriority uint32\n\tRuntime  uint64\n\tDeadline uint64\n\tPeriod   uint64\n\tUtil_min uint32\n\tUtil_max uint32\n}\n\nconst SizeofSchedAttr = 0x38\n\ntype Cachestat_t struct {\n\tCache            uint64\n\tDirty            uint64\n\tWriteback        uint64\n\tEvicted          uint64\n\tRecently_evicted uint64\n}\ntype CachestatRange struct {\n\tOff uint64\n\tLen uint64\n}\n\nconst (\n\tSK_MEMINFO_RMEM_ALLOC          = 0x0\n\tSK_MEMINFO_RCVBUF              = 0x1\n\tSK_MEMINFO_WMEM_ALLOC          = 0x2\n\tSK_MEMINFO_SNDBUF              = 0x3\n\tSK_MEMINFO_FWD_ALLOC           = 0x4\n\tSK_MEMINFO_WMEM_QUEUED         = 0x5\n\tSK_MEMINFO_OPTMEM              = 0x6\n\tSK_MEMINFO_BACKLOG             = 0x7\n\tSK_MEMINFO_DROPS               = 0x8\n\tSK_MEMINFO_VARS                = 0x9\n\tSKNLGRP_NONE                   = 0x0\n\tSKNLGRP_INET_TCP_DESTROY       = 0x1\n\tSKNLGRP_INET_UDP_DESTROY       = 0x2\n\tSKNLGRP_INET6_TCP_DESTROY      = 0x3\n\tSKNLGRP_INET6_UDP_DESTROY      = 0x4\n\tSK_DIAG_BPF_STORAGE_REQ_NONE   = 0x0\n\tSK_DIAG_BPF_STORAGE_REQ_MAP_FD = 0x1\n\tSK_DIAG_BPF_STORAGE_REP_NONE   = 0x0\n\tSK_DIAG_BPF_STORAGE            = 0x1\n\tSK_DIAG_BPF_STORAGE_NONE       = 0x0\n\tSK_DIAG_BPF_STORAGE_PAD        = 0x1\n\tSK_DIAG_BPF_STORAGE_MAP_ID     = 0x2\n\tSK_DIAG_BPF_STORAGE_MAP_VALUE  = 0x3\n)\n\ntype SockDiagReq struct {\n\tFamily   uint8\n\tProtocol uint8\n}\n\nconst RTM_NEWNVLAN = 0x70\n\nconst (\n\tMPOL_BIND                = 0x2\n\tMPOL_DEFAULT             = 0x0\n\tMPOL_F_ADDR              = 0x2\n\tMPOL_F_MEMS_ALLOWED      = 0x4\n\tMPOL_F_MOF               = 0x8\n\tMPOL_F_MORON             = 0x10\n\tMPOL_F_NODE              = 0x1\n\tMPOL_F_NUMA_BALANCING    = 0x2000\n\tMPOL_F_RELATIVE_NODES    = 0x4000\n\tMPOL_F_SHARED            = 0x1\n\tMPOL_F_STATIC_NODES      = 0x8000\n\tMPOL_INTERLEAVE          = 0x3\n\tMPOL_LOCAL               = 0x4\n\tMPOL_MAX                 = 0x7\n\tMPOL_MF_INTERNAL         = 0x10\n\tMPOL_MF_LAZY             = 0x8\n\tMPOL_MF_MOVE_ALL         = 0x4\n\tMPOL_MF_MOVE             = 0x2\n\tMPOL_MF_STRICT           = 0x1\n\tMPOL_MF_VALID            = 0x7\n\tMPOL_MODE_FLAGS          = 0xe000\n\tMPOL_PREFERRED           = 0x1\n\tMPOL_PREFERRED_MANY      = 0x5\n\tMPOL_WEIGHTED_INTERLEAVE = 0x6\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_386.go",
    "content": "// cgo -godefs -objdir=/tmp/386/cgo -- -Wall -Werror -static -I/tmp/386/include -m32 linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && linux\n\npackage unix\n\nconst (\n\tSizeofPtr  = 0x4\n\tSizeofLong = 0x4\n)\n\ntype (\n\t_C_long int32\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 Timex struct {\n\tModes     uint32\n\tOffset    int32\n\tFreq      int32\n\tMaxerror  int32\n\tEsterror  int32\n\tStatus    int32\n\tConstant  int32\n\tPrecision int32\n\tTolerance int32\n\tTime      Timeval\n\tTick      int32\n\tPpsfreq   int32\n\tJitter    int32\n\tShift     int32\n\tStabil    int32\n\tJitcnt    int32\n\tCalcnt    int32\n\tErrcnt    int32\n\tStbcnt    int32\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int32\n\ntype Tms struct {\n\tUtime  int32\n\tStime  int32\n\tCutime int32\n\tCstime int32\n}\n\ntype Utimbuf struct {\n\tActime  int32\n\tModtime 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 Stat_t struct {\n\tDev     uint64\n\t_       uint16\n\t_       uint32\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\t_       uint16\n\tSize    int64\n\tBlksize int32\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tIno     uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [1]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n}\n\nconst (\n\tFADV_DONTNEED = 0x4\n\tFADV_NOREUSE  = 0x5\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint32\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [16]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x58\n\tSizeofIovec           = 0x8\n\tSizeofMsghdr          = 0x1c\n\tSizeofCmsghdr         = 0xc\n)\n\nconst (\n\tSizeofSockFprog = 0x8\n)\n\ntype PtraceRegs 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\ntype FdSet struct {\n\tBits [32]int32\n}\n\ntype Sysinfo_t struct {\n\tUptime    int32\n\tLoads     [3]uint32\n\tTotalram  uint32\n\tFreeram   uint32\n\tSharedram uint32\n\tBufferram uint32\n\tTotalswap uint32\n\tFreeswap  uint32\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint32\n\tFreehigh  uint32\n\tUnit      uint32\n\t_         [8]int8\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint32\n\tFname  [6]int8\n\tFpack  [6]int8\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x80000\n)\n\nconst (\n\tPOLLRDHUP = 0x2000\n)\n\ntype Sigset_t struct {\n\tVal [32]uint32\n}\n\nconst _C__NSIG = 0x41\n\nconst (\n\tSIG_BLOCK   = 0x0\n\tSIG_UNBLOCK = 0x1\n\tSIG_SETMASK = 0x2\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tErrno int32\n\tCode  int32\n\t_     [116]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\t_                         [6]byte\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\t_                         [4]byte\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\t_                         [4]byte\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint32\n\nconst (\n\t_NCPUBITS = 0x20\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [122]byte\n\t_      uint32\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint32\n}\n\ntype Statfs_t struct {\n\tType    int32\n\tBsize   int32\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int32\n\tFrsize  int32\n\tFlags   int32\n\tSpare   [4]int32\n}\n\ntype TpacketHdr struct {\n\tStatus  uint32\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n}\n\nconst (\n\tSizeofTpacketHdr = 0x18\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int32\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n}\n\nconst (\n\tBLKPG = 0x1269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint16\n\tInode            uint32\n\tRdevice          uint16\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]int8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint32\n\tReserved         [4]int8\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]int8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]int8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]int8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n}\n\nconst (\n\tPPS_GETPARAMS = 0x800470a1\n\tPPS_SETPARAMS = 0x400470a2\n\tPPS_GETCAP    = 0x800470a3\n\tPPS_FETCH     = 0xc00470a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x800\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint16\n\t_    [2]uint8\n\tSeq  uint16\n\t_    uint16\n\t_    uint32\n\t_    uint32\n}\ntype SysvShmDesc struct {\n\tPerm       SysvIpcPerm\n\tSegsz      uint32\n\tAtime      uint32\n\tAtime_high uint32\n\tDtime      uint32\n\tDtime_high uint32\n\tCtime      uint32\n\tCtime_high uint32\n\tCpid       int32\n\tLpid       int32\n\tNattch     uint32\n\t_          uint32\n\t_          uint32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go",
    "content": "// cgo -godefs -objdir=/tmp/amd64/cgo -- -Wall -Werror -static -I/tmp/amd64/include -m64 linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && linux\n\npackage unix\n\nconst (\n\tSizeofPtr  = 0x8\n\tSizeofLong = 0x8\n)\n\ntype (\n\t_C_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 Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime 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 Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint32\n\tUid     uint32\n\tGid     uint32\n\t_       int32\n\tRdev    uint64\n\tSize    int64\n\tBlksize int64\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\t_       [3]int64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n\tName [0]byte\n\t_    [4]byte\n}\n\nconst (\n\tFADV_DONTNEED = 0x4\n\tFADV_NOREUSE  = 0x5\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint64\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [24]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x60\n\tSizeofIovec           = 0x10\n\tSizeofMsghdr          = 0x38\n\tSizeofCmsghdr         = 0x10\n)\n\nconst (\n\tSizeofSockFprog = 0x10\n)\n\ntype PtraceRegs 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\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]int8\n\t_         [4]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x80000\n)\n\nconst (\n\tPOLLRDHUP = 0x2000\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\nconst (\n\tSIG_BLOCK   = 0x0\n\tSIG_UNBLOCK = 0x1\n\tSIG_SETMASK = 0x2\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tErrno int32\n\tCode  int32\n\t_     int32\n\t_     [112]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint64\n\nconst (\n\t_NCPUBITS = 0x40\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [118]byte\n\t_      uint64\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\nconst (\n\tSizeofTpacketHdr = 0x20\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG = 0x1269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint64\n\tInode            uint64\n\tRdevice          uint64\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]int8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint64\n\tReserved         [4]int8\n\t_                [4]byte\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]int8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]int8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]int8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n\t_               [4]byte\n}\n\nconst (\n\tPPS_GETPARAMS = 0x800870a1\n\tPPS_SETPARAMS = 0x400870a2\n\tPPS_GETCAP    = 0x800870a3\n\tPPS_FETCH     = 0xc00870a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x800\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint32\n\t_    [0]uint8\n\tSeq  uint16\n\t_    uint16\n\t_    uint64\n\t_    uint64\n}\ntype SysvShmDesc struct {\n\tPerm   SysvIpcPerm\n\tSegsz  uint64\n\tAtime  int64\n\tDtime  int64\n\tCtime  int64\n\tCpid   int32\n\tLpid   int32\n\tNattch uint64\n\t_      uint64\n\t_      uint64\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_arm.go",
    "content": "// cgo -godefs -objdir=/tmp/arm/cgo -- -Wall -Werror -static -I/tmp/arm/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && linux\n\npackage unix\n\nconst (\n\tSizeofPtr  = 0x4\n\tSizeofLong = 0x4\n)\n\ntype (\n\t_C_long int32\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 Timex struct {\n\tModes     uint32\n\tOffset    int32\n\tFreq      int32\n\tMaxerror  int32\n\tEsterror  int32\n\tStatus    int32\n\tConstant  int32\n\tPrecision int32\n\tTolerance int32\n\tTime      Timeval\n\tTick      int32\n\tPpsfreq   int32\n\tJitter    int32\n\tShift     int32\n\tStabil    int32\n\tJitcnt    int32\n\tCalcnt    int32\n\tErrcnt    int32\n\tStbcnt    int32\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int32\n\ntype Tms struct {\n\tUtime  int32\n\tStime  int32\n\tCutime int32\n\tCstime int32\n}\n\ntype Utimbuf struct {\n\tActime  int32\n\tModtime 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 Stat_t struct {\n\tDev     uint64\n\t_       uint16\n\t_       uint32\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\t_       uint16\n\t_       [6]byte\n\tSize    int64\n\tBlksize int32\n\t_       [4]byte\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tIno     uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]uint8\n\t_      [5]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\t_      [4]byte\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n\tName [0]byte\n\t_    [4]byte\n}\n\nconst (\n\tFADV_DONTNEED = 0x4\n\tFADV_NOREUSE  = 0x5\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint32\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]uint8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]uint8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [16]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x58\n\tSizeofIovec           = 0x8\n\tSizeofMsghdr          = 0x1c\n\tSizeofCmsghdr         = 0xc\n)\n\nconst (\n\tSizeofSockFprog = 0x8\n)\n\ntype PtraceRegs struct {\n\tUregs [18]uint32\n}\n\ntype FdSet struct {\n\tBits [32]int32\n}\n\ntype Sysinfo_t struct {\n\tUptime    int32\n\tLoads     [3]uint32\n\tTotalram  uint32\n\tFreeram   uint32\n\tSharedram uint32\n\tBufferram uint32\n\tTotalswap uint32\n\tFreeswap  uint32\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint32\n\tFreehigh  uint32\n\tUnit      uint32\n\t_         [8]uint8\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint32\n\tFname  [6]uint8\n\tFpack  [6]uint8\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tPadFd  int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x80000\n)\n\nconst (\n\tPOLLRDHUP = 0x2000\n)\n\ntype Sigset_t struct {\n\tVal [32]uint32\n}\n\nconst _C__NSIG = 0x41\n\nconst (\n\tSIG_BLOCK   = 0x0\n\tSIG_UNBLOCK = 0x1\n\tSIG_SETMASK = 0x2\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tErrno int32\n\tCode  int32\n\t_     [116]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\t_                         [6]byte\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]uint8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\t_                         [4]byte\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\t_                         [4]byte\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint32\n\nconst (\n\t_NCPUBITS = 0x20\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [122]byte\n\t_      uint32\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint32\n}\n\ntype Statfs_t struct {\n\tType    int32\n\tBsize   int32\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int32\n\tFrsize  int32\n\tFlags   int32\n\tSpare   [4]int32\n\t_       [4]byte\n}\n\ntype TpacketHdr struct {\n\tStatus  uint32\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n}\n\nconst (\n\tSizeofTpacketHdr = 0x18\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int32\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG = 0x1269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]uint8\n\tDriver_name [64]uint8\n\tModule_name [64]uint8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]uint8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]uint8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]uint8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]uint8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]uint8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]uint8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]uint8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]uint8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]uint8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]uint8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint16\n\tInode            uint32\n\tRdevice          uint16\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]uint8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint32\n\tReserved         [4]uint8\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]uint8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]uint8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]uint8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n\t_               [4]byte\n}\n\nconst (\n\tPPS_GETPARAMS = 0x800470a1\n\tPPS_SETPARAMS = 0x400470a2\n\tPPS_GETCAP    = 0x800470a3\n\tPPS_FETCH     = 0xc00470a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x800\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint16\n\t_    [2]uint8\n\tSeq  uint16\n\t_    uint16\n\t_    uint32\n\t_    uint32\n}\ntype SysvShmDesc struct {\n\tPerm       SysvIpcPerm\n\tSegsz      uint32\n\tAtime      uint32\n\tAtime_high uint32\n\tDtime      uint32\n\tDtime_high uint32\n\tCtime      uint32\n\tCtime_high uint32\n\tCpid       int32\n\tLpid       int32\n\tNattch     uint32\n\t_          uint32\n\t_          uint32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go",
    "content": "// cgo -godefs -objdir=/tmp/arm64/cgo -- -Wall -Werror -static -I/tmp/arm64/include -fsigned-char linux/types.go | go run mkpost.go\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\tSizeofPtr  = 0x8\n\tSizeofLong = 0x8\n)\n\ntype (\n\t_C_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 Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime 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 Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\t_       uint64\n\tSize    int64\n\tBlksize int32\n\t_       int32\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\t_       [2]int32\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n\tName [0]byte\n\t_    [4]byte\n}\n\nconst (\n\tFADV_DONTNEED = 0x4\n\tFADV_NOREUSE  = 0x5\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint64\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [24]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x60\n\tSizeofIovec           = 0x10\n\tSizeofMsghdr          = 0x38\n\tSizeofCmsghdr         = 0x10\n)\n\nconst (\n\tSizeofSockFprog = 0x10\n)\n\ntype PtraceRegs struct {\n\tRegs   [31]uint64\n\tSp     uint64\n\tPc     uint64\n\tPstate uint64\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]int8\n\t_         [4]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tPadFd  int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x80000\n)\n\nconst (\n\tPOLLRDHUP = 0x2000\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\nconst (\n\tSIG_BLOCK   = 0x0\n\tSIG_UNBLOCK = 0x1\n\tSIG_SETMASK = 0x2\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tErrno int32\n\tCode  int32\n\t_     int32\n\t_     [112]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint64\n\nconst (\n\t_NCPUBITS = 0x40\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [118]byte\n\t_      uint64\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\nconst (\n\tSizeofTpacketHdr = 0x20\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG = 0x1269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint32\n\tInode            uint64\n\tRdevice          uint32\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]int8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint64\n\tReserved         [4]int8\n\t_                [4]byte\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]int8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]int8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]int8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n\t_               [4]byte\n}\n\nconst (\n\tPPS_GETPARAMS = 0x800870a1\n\tPPS_SETPARAMS = 0x400870a2\n\tPPS_GETCAP    = 0x800870a3\n\tPPS_FETCH     = 0xc00870a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x800\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint32\n\t_    [0]uint8\n\tSeq  uint16\n\t_    uint16\n\t_    uint64\n\t_    uint64\n}\ntype SysvShmDesc struct {\n\tPerm   SysvIpcPerm\n\tSegsz  uint64\n\tAtime  int64\n\tDtime  int64\n\tCtime  int64\n\tCpid   int32\n\tLpid   int32\n\tNattch uint64\n\t_      uint64\n\t_      uint64\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go",
    "content": "// cgo -godefs -objdir=/tmp/loong64/cgo -- -Wall -Werror -static -I/tmp/loong64/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build loong64 && linux\n\npackage unix\n\nconst (\n\tSizeofPtr  = 0x8\n\tSizeofLong = 0x8\n)\n\ntype (\n\t_C_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 Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime 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 Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\t_       uint64\n\tSize    int64\n\tBlksize int32\n\t_       int32\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\t_       [2]int32\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n\tName [0]byte\n\t_    [4]byte\n}\n\nconst (\n\tFADV_DONTNEED = 0x4\n\tFADV_NOREUSE  = 0x5\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint64\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [24]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x60\n\tSizeofIovec           = 0x10\n\tSizeofMsghdr          = 0x38\n\tSizeofCmsghdr         = 0x10\n)\n\nconst (\n\tSizeofSockFprog = 0x10\n)\n\ntype PtraceRegs struct {\n\tRegs     [32]uint64\n\tOrig_a0  uint64\n\tEra      uint64\n\tBadv     uint64\n\tReserved [10]uint64\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]int8\n\t_         [4]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\t_      int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x80000\n)\n\nconst (\n\tPOLLRDHUP = 0x2000\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\nconst (\n\tSIG_BLOCK   = 0x0\n\tSIG_UNBLOCK = 0x1\n\tSIG_SETMASK = 0x2\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tErrno int32\n\tCode  int32\n\t_     int32\n\t_     [112]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint64\n\nconst (\n\t_NCPUBITS = 0x40\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [118]byte\n\t_      uint64\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\nconst (\n\tSizeofTpacketHdr = 0x20\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG = 0x1269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint32\n\tInode            uint64\n\tRdevice          uint32\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]int8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint64\n\tReserved         [4]int8\n\t_                [4]byte\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]int8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]int8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]int8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n\t_               [4]byte\n}\n\nconst (\n\tPPS_GETPARAMS = 0x800870a1\n\tPPS_SETPARAMS = 0x400870a2\n\tPPS_GETCAP    = 0x800870a3\n\tPPS_FETCH     = 0xc00870a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x800\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint32\n\t_    [0]uint8\n\tSeq  uint16\n\t_    uint16\n\t_    uint64\n\t_    uint64\n}\ntype SysvShmDesc struct {\n\tPerm   SysvIpcPerm\n\tSegsz  uint64\n\tAtime  int64\n\tDtime  int64\n\tCtime  int64\n\tCpid   int32\n\tLpid   int32\n\tNattch uint64\n\t_      uint64\n\t_      uint64\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_mips.go",
    "content": "// cgo -godefs -objdir=/tmp/mips/cgo -- -Wall -Werror -static -I/tmp/mips/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips && linux\n\npackage unix\n\nconst (\n\tSizeofPtr  = 0x4\n\tSizeofLong = 0x4\n)\n\ntype (\n\t_C_long int32\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 Timex struct {\n\tModes     uint32\n\tOffset    int32\n\tFreq      int32\n\tMaxerror  int32\n\tEsterror  int32\n\tStatus    int32\n\tConstant  int32\n\tPrecision int32\n\tTolerance int32\n\tTime      Timeval\n\tTick      int32\n\tPpsfreq   int32\n\tJitter    int32\n\tShift     int32\n\tStabil    int32\n\tJitcnt    int32\n\tCalcnt    int32\n\tErrcnt    int32\n\tStbcnt    int32\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int32\n\ntype Tms struct {\n\tUtime  int32\n\tStime  int32\n\tCutime int32\n\tCstime int32\n}\n\ntype Utimbuf struct {\n\tActime  int32\n\tModtime 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 Stat_t struct {\n\tDev     uint32\n\tPad1    [3]int32\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint32\n\tPad2    [3]int32\n\tSize    int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBlksize int32\n\tPad4    int32\n\tBlocks  int64\n\tPad5    [14]int32\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\t_      [4]byte\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n\tName [0]byte\n\t_    [4]byte\n}\n\nconst (\n\tFADV_DONTNEED = 0x4\n\tFADV_NOREUSE  = 0x5\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint32\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [16]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x58\n\tSizeofIovec           = 0x8\n\tSizeofMsghdr          = 0x1c\n\tSizeofCmsghdr         = 0xc\n)\n\nconst (\n\tSizeofSockFprog = 0x8\n)\n\ntype PtraceRegs 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\ntype FdSet struct {\n\tBits [32]int32\n}\n\ntype Sysinfo_t struct {\n\tUptime    int32\n\tLoads     [3]uint32\n\tTotalram  uint32\n\tFreeram   uint32\n\tSharedram uint32\n\tBufferram uint32\n\tTotalswap uint32\n\tFreeswap  uint32\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint32\n\tFreehigh  uint32\n\tUnit      uint32\n\t_         [8]int8\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint32\n\tFname  [6]int8\n\tFpack  [6]int8\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tPadFd  int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x80000\n)\n\nconst (\n\tPOLLRDHUP = 0x2000\n)\n\ntype Sigset_t struct {\n\tVal [32]uint32\n}\n\nconst _C__NSIG = 0x80\n\nconst (\n\tSIG_BLOCK   = 0x1\n\tSIG_UNBLOCK = 0x2\n\tSIG_SETMASK = 0x3\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tCode  int32\n\tErrno int32\n\t_     [116]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [23]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\t_                         [6]byte\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\t_                         [4]byte\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\t_                         [4]byte\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint32\n\nconst (\n\t_NCPUBITS = 0x20\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x8000000000000000\n\tCBitFieldMaskBit1  = 0x4000000000000000\n\tCBitFieldMaskBit2  = 0x2000000000000000\n\tCBitFieldMaskBit3  = 0x1000000000000000\n\tCBitFieldMaskBit4  = 0x800000000000000\n\tCBitFieldMaskBit5  = 0x400000000000000\n\tCBitFieldMaskBit6  = 0x200000000000000\n\tCBitFieldMaskBit7  = 0x100000000000000\n\tCBitFieldMaskBit8  = 0x80000000000000\n\tCBitFieldMaskBit9  = 0x40000000000000\n\tCBitFieldMaskBit10 = 0x20000000000000\n\tCBitFieldMaskBit11 = 0x10000000000000\n\tCBitFieldMaskBit12 = 0x8000000000000\n\tCBitFieldMaskBit13 = 0x4000000000000\n\tCBitFieldMaskBit14 = 0x2000000000000\n\tCBitFieldMaskBit15 = 0x1000000000000\n\tCBitFieldMaskBit16 = 0x800000000000\n\tCBitFieldMaskBit17 = 0x400000000000\n\tCBitFieldMaskBit18 = 0x200000000000\n\tCBitFieldMaskBit19 = 0x100000000000\n\tCBitFieldMaskBit20 = 0x80000000000\n\tCBitFieldMaskBit21 = 0x40000000000\n\tCBitFieldMaskBit22 = 0x20000000000\n\tCBitFieldMaskBit23 = 0x10000000000\n\tCBitFieldMaskBit24 = 0x8000000000\n\tCBitFieldMaskBit25 = 0x4000000000\n\tCBitFieldMaskBit26 = 0x2000000000\n\tCBitFieldMaskBit27 = 0x1000000000\n\tCBitFieldMaskBit28 = 0x800000000\n\tCBitFieldMaskBit29 = 0x400000000\n\tCBitFieldMaskBit30 = 0x200000000\n\tCBitFieldMaskBit31 = 0x100000000\n\tCBitFieldMaskBit32 = 0x80000000\n\tCBitFieldMaskBit33 = 0x40000000\n\tCBitFieldMaskBit34 = 0x20000000\n\tCBitFieldMaskBit35 = 0x10000000\n\tCBitFieldMaskBit36 = 0x8000000\n\tCBitFieldMaskBit37 = 0x4000000\n\tCBitFieldMaskBit38 = 0x2000000\n\tCBitFieldMaskBit39 = 0x1000000\n\tCBitFieldMaskBit40 = 0x800000\n\tCBitFieldMaskBit41 = 0x400000\n\tCBitFieldMaskBit42 = 0x200000\n\tCBitFieldMaskBit43 = 0x100000\n\tCBitFieldMaskBit44 = 0x80000\n\tCBitFieldMaskBit45 = 0x40000\n\tCBitFieldMaskBit46 = 0x20000\n\tCBitFieldMaskBit47 = 0x10000\n\tCBitFieldMaskBit48 = 0x8000\n\tCBitFieldMaskBit49 = 0x4000\n\tCBitFieldMaskBit50 = 0x2000\n\tCBitFieldMaskBit51 = 0x1000\n\tCBitFieldMaskBit52 = 0x800\n\tCBitFieldMaskBit53 = 0x400\n\tCBitFieldMaskBit54 = 0x200\n\tCBitFieldMaskBit55 = 0x100\n\tCBitFieldMaskBit56 = 0x80\n\tCBitFieldMaskBit57 = 0x40\n\tCBitFieldMaskBit58 = 0x20\n\tCBitFieldMaskBit59 = 0x10\n\tCBitFieldMaskBit60 = 0x8\n\tCBitFieldMaskBit61 = 0x4\n\tCBitFieldMaskBit62 = 0x2\n\tCBitFieldMaskBit63 = 0x1\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [122]byte\n\t_      uint32\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint32\n}\n\ntype Statfs_t struct {\n\tType    int32\n\tBsize   int32\n\tFrsize  int32\n\t_       [4]byte\n\tBlocks  uint64\n\tBfree   uint64\n\tFiles   uint64\n\tFfree   uint64\n\tBavail  uint64\n\tFsid    Fsid\n\tNamelen int32\n\tFlags   int32\n\tSpare   [5]int32\n\t_       [4]byte\n}\n\ntype TpacketHdr struct {\n\tStatus  uint32\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n}\n\nconst (\n\tSizeofTpacketHdr = 0x18\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int32\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG = 0x20001269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint32\n\tInode            uint32\n\tRdevice          uint32\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]int8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint32\n\tReserved         [4]int8\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]int8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]int8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]int8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n\t_               [4]byte\n}\n\nconst (\n\tPPS_GETPARAMS = 0x400470a1\n\tPPS_SETPARAMS = 0x800470a2\n\tPPS_GETCAP    = 0x400470a3\n\tPPS_FETCH     = 0xc00470a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x80\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint32\n\t_    [0]uint8\n\tSeq  uint16\n\t_    uint16\n\t_    uint32\n\t_    uint32\n}\ntype SysvShmDesc struct {\n\tPerm       SysvIpcPerm\n\tSegsz      uint32\n\tAtime      uint32\n\tDtime      uint32\n\tCtime      uint32\n\tCpid       int32\n\tLpid       int32\n\tNattch     uint32\n\tAtime_high uint16\n\tDtime_high uint16\n\tCtime_high uint16\n\t_          uint16\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go",
    "content": "// cgo -godefs -objdir=/tmp/mips64/cgo -- -Wall -Werror -static -I/tmp/mips64/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips64 && linux\n\npackage unix\n\nconst (\n\tSizeofPtr  = 0x8\n\tSizeofLong = 0x8\n)\n\ntype (\n\t_C_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 Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime 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 Stat_t struct {\n\tDev     uint32\n\tPad1    [3]uint32\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint32\n\tPad2    [3]uint32\n\tSize    int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBlksize uint32\n\tPad4    uint32\n\tBlocks  int64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n\tName [0]byte\n\t_    [4]byte\n}\n\nconst (\n\tFADV_DONTNEED = 0x4\n\tFADV_NOREUSE  = 0x5\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint64\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [24]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x60\n\tSizeofIovec           = 0x10\n\tSizeofMsghdr          = 0x38\n\tSizeofCmsghdr         = 0x10\n)\n\nconst (\n\tSizeofSockFprog = 0x10\n)\n\ntype PtraceRegs 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\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]int8\n\t_         [4]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\t_      int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x80000\n)\n\nconst (\n\tPOLLRDHUP = 0x2000\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x80\n\nconst (\n\tSIG_BLOCK   = 0x1\n\tSIG_UNBLOCK = 0x2\n\tSIG_SETMASK = 0x3\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tCode  int32\n\tErrno int32\n\t_     int32\n\t_     [112]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [23]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint64\n\nconst (\n\t_NCPUBITS = 0x40\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x8000000000000000\n\tCBitFieldMaskBit1  = 0x4000000000000000\n\tCBitFieldMaskBit2  = 0x2000000000000000\n\tCBitFieldMaskBit3  = 0x1000000000000000\n\tCBitFieldMaskBit4  = 0x800000000000000\n\tCBitFieldMaskBit5  = 0x400000000000000\n\tCBitFieldMaskBit6  = 0x200000000000000\n\tCBitFieldMaskBit7  = 0x100000000000000\n\tCBitFieldMaskBit8  = 0x80000000000000\n\tCBitFieldMaskBit9  = 0x40000000000000\n\tCBitFieldMaskBit10 = 0x20000000000000\n\tCBitFieldMaskBit11 = 0x10000000000000\n\tCBitFieldMaskBit12 = 0x8000000000000\n\tCBitFieldMaskBit13 = 0x4000000000000\n\tCBitFieldMaskBit14 = 0x2000000000000\n\tCBitFieldMaskBit15 = 0x1000000000000\n\tCBitFieldMaskBit16 = 0x800000000000\n\tCBitFieldMaskBit17 = 0x400000000000\n\tCBitFieldMaskBit18 = 0x200000000000\n\tCBitFieldMaskBit19 = 0x100000000000\n\tCBitFieldMaskBit20 = 0x80000000000\n\tCBitFieldMaskBit21 = 0x40000000000\n\tCBitFieldMaskBit22 = 0x20000000000\n\tCBitFieldMaskBit23 = 0x10000000000\n\tCBitFieldMaskBit24 = 0x8000000000\n\tCBitFieldMaskBit25 = 0x4000000000\n\tCBitFieldMaskBit26 = 0x2000000000\n\tCBitFieldMaskBit27 = 0x1000000000\n\tCBitFieldMaskBit28 = 0x800000000\n\tCBitFieldMaskBit29 = 0x400000000\n\tCBitFieldMaskBit30 = 0x200000000\n\tCBitFieldMaskBit31 = 0x100000000\n\tCBitFieldMaskBit32 = 0x80000000\n\tCBitFieldMaskBit33 = 0x40000000\n\tCBitFieldMaskBit34 = 0x20000000\n\tCBitFieldMaskBit35 = 0x10000000\n\tCBitFieldMaskBit36 = 0x8000000\n\tCBitFieldMaskBit37 = 0x4000000\n\tCBitFieldMaskBit38 = 0x2000000\n\tCBitFieldMaskBit39 = 0x1000000\n\tCBitFieldMaskBit40 = 0x800000\n\tCBitFieldMaskBit41 = 0x400000\n\tCBitFieldMaskBit42 = 0x200000\n\tCBitFieldMaskBit43 = 0x100000\n\tCBitFieldMaskBit44 = 0x80000\n\tCBitFieldMaskBit45 = 0x40000\n\tCBitFieldMaskBit46 = 0x20000\n\tCBitFieldMaskBit47 = 0x10000\n\tCBitFieldMaskBit48 = 0x8000\n\tCBitFieldMaskBit49 = 0x4000\n\tCBitFieldMaskBit50 = 0x2000\n\tCBitFieldMaskBit51 = 0x1000\n\tCBitFieldMaskBit52 = 0x800\n\tCBitFieldMaskBit53 = 0x400\n\tCBitFieldMaskBit54 = 0x200\n\tCBitFieldMaskBit55 = 0x100\n\tCBitFieldMaskBit56 = 0x80\n\tCBitFieldMaskBit57 = 0x40\n\tCBitFieldMaskBit58 = 0x20\n\tCBitFieldMaskBit59 = 0x10\n\tCBitFieldMaskBit60 = 0x8\n\tCBitFieldMaskBit61 = 0x4\n\tCBitFieldMaskBit62 = 0x2\n\tCBitFieldMaskBit63 = 0x1\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [118]byte\n\t_      uint64\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tFrsize  int64\n\tBlocks  uint64\n\tBfree   uint64\n\tFiles   uint64\n\tFfree   uint64\n\tBavail  uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFlags   int64\n\tSpare   [5]int64\n}\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\nconst (\n\tSizeofTpacketHdr = 0x20\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG = 0x20001269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint32\n\tInode            uint64\n\tRdevice          uint32\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]int8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint64\n\tReserved         [4]int8\n\t_                [4]byte\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]int8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]int8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]int8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n\t_               [4]byte\n}\n\nconst (\n\tPPS_GETPARAMS = 0x400870a1\n\tPPS_SETPARAMS = 0x800870a2\n\tPPS_GETCAP    = 0x400870a3\n\tPPS_FETCH     = 0xc00870a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x80\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint32\n\t_    [0]uint8\n\tSeq  uint16\n\t_    uint16\n\t_    uint64\n\t_    uint64\n}\ntype SysvShmDesc struct {\n\tPerm   SysvIpcPerm\n\tSegsz  uint64\n\tAtime  int64\n\tDtime  int64\n\tCtime  int64\n\tCpid   int32\n\tLpid   int32\n\tNattch uint64\n\t_      uint64\n\t_      uint64\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go",
    "content": "// cgo -godefs -objdir=/tmp/mips64le/cgo -- -Wall -Werror -static -I/tmp/mips64le/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips64le && linux\n\npackage unix\n\nconst (\n\tSizeofPtr  = 0x8\n\tSizeofLong = 0x8\n)\n\ntype (\n\t_C_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 Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime 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 Stat_t struct {\n\tDev     uint32\n\tPad1    [3]uint32\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint32\n\tPad2    [3]uint32\n\tSize    int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBlksize uint32\n\tPad4    uint32\n\tBlocks  int64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n\tName [0]byte\n\t_    [4]byte\n}\n\nconst (\n\tFADV_DONTNEED = 0x4\n\tFADV_NOREUSE  = 0x5\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint64\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [24]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x60\n\tSizeofIovec           = 0x10\n\tSizeofMsghdr          = 0x38\n\tSizeofCmsghdr         = 0x10\n)\n\nconst (\n\tSizeofSockFprog = 0x10\n)\n\ntype PtraceRegs 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\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]int8\n\t_         [4]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\t_      int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x80000\n)\n\nconst (\n\tPOLLRDHUP = 0x2000\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x80\n\nconst (\n\tSIG_BLOCK   = 0x1\n\tSIG_UNBLOCK = 0x2\n\tSIG_SETMASK = 0x3\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tCode  int32\n\tErrno int32\n\t_     int32\n\t_     [112]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [23]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint64\n\nconst (\n\t_NCPUBITS = 0x40\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [118]byte\n\t_      uint64\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tFrsize  int64\n\tBlocks  uint64\n\tBfree   uint64\n\tFiles   uint64\n\tFfree   uint64\n\tBavail  uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFlags   int64\n\tSpare   [5]int64\n}\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\nconst (\n\tSizeofTpacketHdr = 0x20\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG = 0x20001269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint32\n\tInode            uint64\n\tRdevice          uint32\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]int8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint64\n\tReserved         [4]int8\n\t_                [4]byte\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]int8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]int8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]int8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n\t_               [4]byte\n}\n\nconst (\n\tPPS_GETPARAMS = 0x400870a1\n\tPPS_SETPARAMS = 0x800870a2\n\tPPS_GETCAP    = 0x400870a3\n\tPPS_FETCH     = 0xc00870a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x80\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint32\n\t_    [0]uint8\n\tSeq  uint16\n\t_    uint16\n\t_    uint64\n\t_    uint64\n}\ntype SysvShmDesc struct {\n\tPerm   SysvIpcPerm\n\tSegsz  uint64\n\tAtime  int64\n\tDtime  int64\n\tCtime  int64\n\tCpid   int32\n\tLpid   int32\n\tNattch uint64\n\t_      uint64\n\t_      uint64\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go",
    "content": "// cgo -godefs -objdir=/tmp/mipsle/cgo -- -Wall -Werror -static -I/tmp/mipsle/include linux/types.go | go run mkpost.go\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\tSizeofPtr  = 0x4\n\tSizeofLong = 0x4\n)\n\ntype (\n\t_C_long int32\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 Timex struct {\n\tModes     uint32\n\tOffset    int32\n\tFreq      int32\n\tMaxerror  int32\n\tEsterror  int32\n\tStatus    int32\n\tConstant  int32\n\tPrecision int32\n\tTolerance int32\n\tTime      Timeval\n\tTick      int32\n\tPpsfreq   int32\n\tJitter    int32\n\tShift     int32\n\tStabil    int32\n\tJitcnt    int32\n\tCalcnt    int32\n\tErrcnt    int32\n\tStbcnt    int32\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int32\n\ntype Tms struct {\n\tUtime  int32\n\tStime  int32\n\tCutime int32\n\tCstime int32\n}\n\ntype Utimbuf struct {\n\tActime  int32\n\tModtime 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 Stat_t struct {\n\tDev     uint32\n\tPad1    [3]int32\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint32\n\tPad2    [3]int32\n\tSize    int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBlksize int32\n\tPad4    int32\n\tBlocks  int64\n\tPad5    [14]int32\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\t_      [4]byte\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n\tName [0]byte\n\t_    [4]byte\n}\n\nconst (\n\tFADV_DONTNEED = 0x4\n\tFADV_NOREUSE  = 0x5\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint32\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [16]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x58\n\tSizeofIovec           = 0x8\n\tSizeofMsghdr          = 0x1c\n\tSizeofCmsghdr         = 0xc\n)\n\nconst (\n\tSizeofSockFprog = 0x8\n)\n\ntype PtraceRegs 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\ntype FdSet struct {\n\tBits [32]int32\n}\n\ntype Sysinfo_t struct {\n\tUptime    int32\n\tLoads     [3]uint32\n\tTotalram  uint32\n\tFreeram   uint32\n\tSharedram uint32\n\tBufferram uint32\n\tTotalswap uint32\n\tFreeswap  uint32\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint32\n\tFreehigh  uint32\n\tUnit      uint32\n\t_         [8]int8\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint32\n\tFname  [6]int8\n\tFpack  [6]int8\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tPadFd  int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x80000\n)\n\nconst (\n\tPOLLRDHUP = 0x2000\n)\n\ntype Sigset_t struct {\n\tVal [32]uint32\n}\n\nconst _C__NSIG = 0x80\n\nconst (\n\tSIG_BLOCK   = 0x1\n\tSIG_UNBLOCK = 0x2\n\tSIG_SETMASK = 0x3\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tCode  int32\n\tErrno int32\n\t_     [116]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [23]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\t_                         [6]byte\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\t_                         [4]byte\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\t_                         [4]byte\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint32\n\nconst (\n\t_NCPUBITS = 0x20\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [122]byte\n\t_      uint32\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint32\n}\n\ntype Statfs_t struct {\n\tType    int32\n\tBsize   int32\n\tFrsize  int32\n\t_       [4]byte\n\tBlocks  uint64\n\tBfree   uint64\n\tFiles   uint64\n\tFfree   uint64\n\tBavail  uint64\n\tFsid    Fsid\n\tNamelen int32\n\tFlags   int32\n\tSpare   [5]int32\n\t_       [4]byte\n}\n\ntype TpacketHdr struct {\n\tStatus  uint32\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n}\n\nconst (\n\tSizeofTpacketHdr = 0x18\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int32\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG = 0x20001269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint32\n\tInode            uint32\n\tRdevice          uint32\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]int8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint32\n\tReserved         [4]int8\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]int8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]int8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]int8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n\t_               [4]byte\n}\n\nconst (\n\tPPS_GETPARAMS = 0x400470a1\n\tPPS_SETPARAMS = 0x800470a2\n\tPPS_GETCAP    = 0x400470a3\n\tPPS_FETCH     = 0xc00470a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x80\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint32\n\t_    [0]uint8\n\tSeq  uint16\n\t_    uint16\n\t_    uint32\n\t_    uint32\n}\ntype SysvShmDesc struct {\n\tPerm       SysvIpcPerm\n\tSegsz      uint32\n\tAtime      uint32\n\tDtime      uint32\n\tCtime      uint32\n\tCpid       int32\n\tLpid       int32\n\tNattch     uint32\n\tAtime_high uint16\n\tDtime_high uint16\n\tCtime_high uint16\n\t_          uint16\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go",
    "content": "// cgo -godefs -objdir=/tmp/ppc/cgo -- -Wall -Werror -static -I/tmp/ppc/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc && linux\n\npackage unix\n\nconst (\n\tSizeofPtr  = 0x4\n\tSizeofLong = 0x4\n)\n\ntype (\n\t_C_long int32\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 Timex struct {\n\tModes     uint32\n\tOffset    int32\n\tFreq      int32\n\tMaxerror  int32\n\tEsterror  int32\n\tStatus    int32\n\tConstant  int32\n\tPrecision int32\n\tTolerance int32\n\tTime      Timeval\n\tTick      int32\n\tPpsfreq   int32\n\tJitter    int32\n\tShift     int32\n\tStabil    int32\n\tJitcnt    int32\n\tCalcnt    int32\n\tErrcnt    int32\n\tStbcnt    int32\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int32\n\ntype Tms struct {\n\tUtime  int32\n\tStime  int32\n\tCutime int32\n\tCstime int32\n}\n\ntype Utimbuf struct {\n\tActime  int32\n\tModtime 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 Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\t_       uint16\n\t_       [6]byte\n\tSize    int64\n\tBlksize int32\n\t_       [4]byte\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\t_       uint32\n\t_       uint32\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]uint8\n\t_      [5]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\t_      [4]byte\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n\tName [0]byte\n\t_    [4]byte\n}\n\nconst (\n\tFADV_DONTNEED = 0x4\n\tFADV_NOREUSE  = 0x5\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint32\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]uint8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]uint8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [16]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x58\n\tSizeofIovec           = 0x8\n\tSizeofMsghdr          = 0x1c\n\tSizeofCmsghdr         = 0xc\n)\n\nconst (\n\tSizeofSockFprog = 0x8\n)\n\ntype PtraceRegs struct {\n\tGpr       [32]uint32\n\tNip       uint32\n\tMsr       uint32\n\tOrig_gpr3 uint32\n\tCtr       uint32\n\tLink      uint32\n\tXer       uint32\n\tCcr       uint32\n\tMq        uint32\n\tTrap      uint32\n\tDar       uint32\n\tDsisr     uint32\n\tResult    uint32\n}\n\ntype FdSet struct {\n\tBits [32]int32\n}\n\ntype Sysinfo_t struct {\n\tUptime    int32\n\tLoads     [3]uint32\n\tTotalram  uint32\n\tFreeram   uint32\n\tSharedram uint32\n\tBufferram uint32\n\tTotalswap uint32\n\tFreeswap  uint32\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint32\n\tFreehigh  uint32\n\tUnit      uint32\n\t_         [8]uint8\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint32\n\tFname  [6]uint8\n\tFpack  [6]uint8\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\t_      int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x80000\n)\n\nconst (\n\tPOLLRDHUP = 0x2000\n)\n\ntype Sigset_t struct {\n\tVal [32]uint32\n}\n\nconst _C__NSIG = 0x41\n\nconst (\n\tSIG_BLOCK   = 0x0\n\tSIG_UNBLOCK = 0x1\n\tSIG_SETMASK = 0x2\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tErrno int32\n\tCode  int32\n\t_     [116]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [19]uint8\n\tLine   uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\t_                         [6]byte\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]uint8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\t_                         [4]byte\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\t_                         [4]byte\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint32\n\nconst (\n\t_NCPUBITS = 0x20\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x8000000000000000\n\tCBitFieldMaskBit1  = 0x4000000000000000\n\tCBitFieldMaskBit2  = 0x2000000000000000\n\tCBitFieldMaskBit3  = 0x1000000000000000\n\tCBitFieldMaskBit4  = 0x800000000000000\n\tCBitFieldMaskBit5  = 0x400000000000000\n\tCBitFieldMaskBit6  = 0x200000000000000\n\tCBitFieldMaskBit7  = 0x100000000000000\n\tCBitFieldMaskBit8  = 0x80000000000000\n\tCBitFieldMaskBit9  = 0x40000000000000\n\tCBitFieldMaskBit10 = 0x20000000000000\n\tCBitFieldMaskBit11 = 0x10000000000000\n\tCBitFieldMaskBit12 = 0x8000000000000\n\tCBitFieldMaskBit13 = 0x4000000000000\n\tCBitFieldMaskBit14 = 0x2000000000000\n\tCBitFieldMaskBit15 = 0x1000000000000\n\tCBitFieldMaskBit16 = 0x800000000000\n\tCBitFieldMaskBit17 = 0x400000000000\n\tCBitFieldMaskBit18 = 0x200000000000\n\tCBitFieldMaskBit19 = 0x100000000000\n\tCBitFieldMaskBit20 = 0x80000000000\n\tCBitFieldMaskBit21 = 0x40000000000\n\tCBitFieldMaskBit22 = 0x20000000000\n\tCBitFieldMaskBit23 = 0x10000000000\n\tCBitFieldMaskBit24 = 0x8000000000\n\tCBitFieldMaskBit25 = 0x4000000000\n\tCBitFieldMaskBit26 = 0x2000000000\n\tCBitFieldMaskBit27 = 0x1000000000\n\tCBitFieldMaskBit28 = 0x800000000\n\tCBitFieldMaskBit29 = 0x400000000\n\tCBitFieldMaskBit30 = 0x200000000\n\tCBitFieldMaskBit31 = 0x100000000\n\tCBitFieldMaskBit32 = 0x80000000\n\tCBitFieldMaskBit33 = 0x40000000\n\tCBitFieldMaskBit34 = 0x20000000\n\tCBitFieldMaskBit35 = 0x10000000\n\tCBitFieldMaskBit36 = 0x8000000\n\tCBitFieldMaskBit37 = 0x4000000\n\tCBitFieldMaskBit38 = 0x2000000\n\tCBitFieldMaskBit39 = 0x1000000\n\tCBitFieldMaskBit40 = 0x800000\n\tCBitFieldMaskBit41 = 0x400000\n\tCBitFieldMaskBit42 = 0x200000\n\tCBitFieldMaskBit43 = 0x100000\n\tCBitFieldMaskBit44 = 0x80000\n\tCBitFieldMaskBit45 = 0x40000\n\tCBitFieldMaskBit46 = 0x20000\n\tCBitFieldMaskBit47 = 0x10000\n\tCBitFieldMaskBit48 = 0x8000\n\tCBitFieldMaskBit49 = 0x4000\n\tCBitFieldMaskBit50 = 0x2000\n\tCBitFieldMaskBit51 = 0x1000\n\tCBitFieldMaskBit52 = 0x800\n\tCBitFieldMaskBit53 = 0x400\n\tCBitFieldMaskBit54 = 0x200\n\tCBitFieldMaskBit55 = 0x100\n\tCBitFieldMaskBit56 = 0x80\n\tCBitFieldMaskBit57 = 0x40\n\tCBitFieldMaskBit58 = 0x20\n\tCBitFieldMaskBit59 = 0x10\n\tCBitFieldMaskBit60 = 0x8\n\tCBitFieldMaskBit61 = 0x4\n\tCBitFieldMaskBit62 = 0x2\n\tCBitFieldMaskBit63 = 0x1\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [122]byte\n\t_      uint32\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint32\n}\n\ntype Statfs_t struct {\n\tType    int32\n\tBsize   int32\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int32\n\tFrsize  int32\n\tFlags   int32\n\tSpare   [4]int32\n\t_       [4]byte\n}\n\ntype TpacketHdr struct {\n\tStatus  uint32\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n}\n\nconst (\n\tSizeofTpacketHdr = 0x18\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int32\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG = 0x20001269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]uint8\n\tDriver_name [64]uint8\n\tModule_name [64]uint8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]uint8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]uint8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]uint8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]uint8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]uint8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]uint8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]uint8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]uint8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]uint8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]uint8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint32\n\tInode            uint32\n\tRdevice          uint32\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]uint8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint32\n\tReserved         [4]uint8\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]uint8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]uint8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]uint8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n\t_               [4]byte\n}\n\nconst (\n\tPPS_GETPARAMS = 0x400470a1\n\tPPS_SETPARAMS = 0x800470a2\n\tPPS_GETCAP    = 0x400470a3\n\tPPS_FETCH     = 0xc00470a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x800\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint32\n\tSeq  uint32\n\t_    uint32\n\t_    uint64\n\t_    uint64\n}\ntype SysvShmDesc struct {\n\tPerm       SysvIpcPerm\n\tAtime_high uint32\n\tAtime      uint32\n\tDtime_high uint32\n\tDtime      uint32\n\tCtime_high uint32\n\tCtime      uint32\n\t_          uint32\n\tSegsz      uint32\n\tCpid       int32\n\tLpid       int32\n\tNattch     uint32\n\t_          uint32\n\t_          uint32\n\t_          [4]byte\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go",
    "content": "// cgo -godefs -objdir=/tmp/ppc64/cgo -- -Wall -Werror -static -I/tmp/ppc64/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64 && linux\n\npackage unix\n\nconst (\n\tSizeofPtr  = 0x8\n\tSizeofLong = 0x8\n)\n\ntype (\n\t_C_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 Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime 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 Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint32\n\tUid     uint32\n\tGid     uint32\n\t_       int32\n\tRdev    uint64\n\tSize    int64\n\tBlksize int64\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\t_       uint64\n\t_       uint64\n\t_       uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]uint8\n\t_      [5]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n\tName [0]byte\n\t_    [4]byte\n}\n\nconst (\n\tFADV_DONTNEED = 0x4\n\tFADV_NOREUSE  = 0x5\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint64\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]uint8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]uint8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [24]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x60\n\tSizeofIovec           = 0x10\n\tSizeofMsghdr          = 0x38\n\tSizeofCmsghdr         = 0x10\n)\n\nconst (\n\tSizeofSockFprog = 0x10\n)\n\ntype PtraceRegs struct {\n\tGpr       [32]uint64\n\tNip       uint64\n\tMsr       uint64\n\tOrig_gpr3 uint64\n\tCtr       uint64\n\tLink      uint64\n\tXer       uint64\n\tCcr       uint64\n\tSofte     uint64\n\tTrap      uint64\n\tDar       uint64\n\tDsisr     uint64\n\tResult    uint64\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]uint8\n\t_         [4]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]uint8\n\tFpack  [6]uint8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\t_      int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x80000\n)\n\nconst (\n\tPOLLRDHUP = 0x2000\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\nconst (\n\tSIG_BLOCK   = 0x0\n\tSIG_UNBLOCK = 0x1\n\tSIG_SETMASK = 0x2\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tErrno int32\n\tCode  int32\n\t_     int32\n\t_     [112]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [19]uint8\n\tLine   uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]uint8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint64\n\nconst (\n\t_NCPUBITS = 0x40\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x8000000000000000\n\tCBitFieldMaskBit1  = 0x4000000000000000\n\tCBitFieldMaskBit2  = 0x2000000000000000\n\tCBitFieldMaskBit3  = 0x1000000000000000\n\tCBitFieldMaskBit4  = 0x800000000000000\n\tCBitFieldMaskBit5  = 0x400000000000000\n\tCBitFieldMaskBit6  = 0x200000000000000\n\tCBitFieldMaskBit7  = 0x100000000000000\n\tCBitFieldMaskBit8  = 0x80000000000000\n\tCBitFieldMaskBit9  = 0x40000000000000\n\tCBitFieldMaskBit10 = 0x20000000000000\n\tCBitFieldMaskBit11 = 0x10000000000000\n\tCBitFieldMaskBit12 = 0x8000000000000\n\tCBitFieldMaskBit13 = 0x4000000000000\n\tCBitFieldMaskBit14 = 0x2000000000000\n\tCBitFieldMaskBit15 = 0x1000000000000\n\tCBitFieldMaskBit16 = 0x800000000000\n\tCBitFieldMaskBit17 = 0x400000000000\n\tCBitFieldMaskBit18 = 0x200000000000\n\tCBitFieldMaskBit19 = 0x100000000000\n\tCBitFieldMaskBit20 = 0x80000000000\n\tCBitFieldMaskBit21 = 0x40000000000\n\tCBitFieldMaskBit22 = 0x20000000000\n\tCBitFieldMaskBit23 = 0x10000000000\n\tCBitFieldMaskBit24 = 0x8000000000\n\tCBitFieldMaskBit25 = 0x4000000000\n\tCBitFieldMaskBit26 = 0x2000000000\n\tCBitFieldMaskBit27 = 0x1000000000\n\tCBitFieldMaskBit28 = 0x800000000\n\tCBitFieldMaskBit29 = 0x400000000\n\tCBitFieldMaskBit30 = 0x200000000\n\tCBitFieldMaskBit31 = 0x100000000\n\tCBitFieldMaskBit32 = 0x80000000\n\tCBitFieldMaskBit33 = 0x40000000\n\tCBitFieldMaskBit34 = 0x20000000\n\tCBitFieldMaskBit35 = 0x10000000\n\tCBitFieldMaskBit36 = 0x8000000\n\tCBitFieldMaskBit37 = 0x4000000\n\tCBitFieldMaskBit38 = 0x2000000\n\tCBitFieldMaskBit39 = 0x1000000\n\tCBitFieldMaskBit40 = 0x800000\n\tCBitFieldMaskBit41 = 0x400000\n\tCBitFieldMaskBit42 = 0x200000\n\tCBitFieldMaskBit43 = 0x100000\n\tCBitFieldMaskBit44 = 0x80000\n\tCBitFieldMaskBit45 = 0x40000\n\tCBitFieldMaskBit46 = 0x20000\n\tCBitFieldMaskBit47 = 0x10000\n\tCBitFieldMaskBit48 = 0x8000\n\tCBitFieldMaskBit49 = 0x4000\n\tCBitFieldMaskBit50 = 0x2000\n\tCBitFieldMaskBit51 = 0x1000\n\tCBitFieldMaskBit52 = 0x800\n\tCBitFieldMaskBit53 = 0x400\n\tCBitFieldMaskBit54 = 0x200\n\tCBitFieldMaskBit55 = 0x100\n\tCBitFieldMaskBit56 = 0x80\n\tCBitFieldMaskBit57 = 0x40\n\tCBitFieldMaskBit58 = 0x20\n\tCBitFieldMaskBit59 = 0x10\n\tCBitFieldMaskBit60 = 0x8\n\tCBitFieldMaskBit61 = 0x4\n\tCBitFieldMaskBit62 = 0x2\n\tCBitFieldMaskBit63 = 0x1\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [118]byte\n\t_      uint64\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\nconst (\n\tSizeofTpacketHdr = 0x20\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG = 0x20001269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]uint8\n\tDriver_name [64]uint8\n\tModule_name [64]uint8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]uint8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]uint8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]uint8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]uint8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]uint8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]uint8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]uint8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]uint8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]uint8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]uint8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint64\n\tInode            uint64\n\tRdevice          uint64\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]uint8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint64\n\tReserved         [4]uint8\n\t_                [4]byte\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]uint8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]uint8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]uint8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n\t_               [4]byte\n}\n\nconst (\n\tPPS_GETPARAMS = 0x400870a1\n\tPPS_SETPARAMS = 0x800870a2\n\tPPS_GETCAP    = 0x400870a3\n\tPPS_FETCH     = 0xc00870a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x800\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint32\n\tSeq  uint32\n\t_    uint32\n\t_    uint64\n\t_    uint64\n}\ntype SysvShmDesc struct {\n\tPerm   SysvIpcPerm\n\tAtime  int64\n\tDtime  int64\n\tCtime  int64\n\tSegsz  uint64\n\tCpid   int32\n\tLpid   int32\n\tNattch uint64\n\t_      uint64\n\t_      uint64\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go",
    "content": "// cgo -godefs -objdir=/tmp/ppc64le/cgo -- -Wall -Werror -static -I/tmp/ppc64le/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64le && linux\n\npackage unix\n\nconst (\n\tSizeofPtr  = 0x8\n\tSizeofLong = 0x8\n)\n\ntype (\n\t_C_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 Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime 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 Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint32\n\tUid     uint32\n\tGid     uint32\n\t_       int32\n\tRdev    uint64\n\tSize    int64\n\tBlksize int64\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\t_       uint64\n\t_       uint64\n\t_       uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]uint8\n\t_      [5]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n\tName [0]byte\n\t_    [4]byte\n}\n\nconst (\n\tFADV_DONTNEED = 0x4\n\tFADV_NOREUSE  = 0x5\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint64\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]uint8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]uint8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [24]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x60\n\tSizeofIovec           = 0x10\n\tSizeofMsghdr          = 0x38\n\tSizeofCmsghdr         = 0x10\n)\n\nconst (\n\tSizeofSockFprog = 0x10\n)\n\ntype PtraceRegs struct {\n\tGpr       [32]uint64\n\tNip       uint64\n\tMsr       uint64\n\tOrig_gpr3 uint64\n\tCtr       uint64\n\tLink      uint64\n\tXer       uint64\n\tCcr       uint64\n\tSofte     uint64\n\tTrap      uint64\n\tDar       uint64\n\tDsisr     uint64\n\tResult    uint64\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]uint8\n\t_         [4]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]uint8\n\tFpack  [6]uint8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\t_      int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x80000\n)\n\nconst (\n\tPOLLRDHUP = 0x2000\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\nconst (\n\tSIG_BLOCK   = 0x0\n\tSIG_UNBLOCK = 0x1\n\tSIG_SETMASK = 0x2\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tErrno int32\n\tCode  int32\n\t_     int32\n\t_     [112]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [19]uint8\n\tLine   uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]uint8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint64\n\nconst (\n\t_NCPUBITS = 0x40\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [118]byte\n\t_      uint64\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\nconst (\n\tSizeofTpacketHdr = 0x20\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG = 0x20001269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]uint8\n\tDriver_name [64]uint8\n\tModule_name [64]uint8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]uint8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]uint8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]uint8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]uint8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]uint8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]uint8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]uint8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]uint8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]uint8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]uint8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint64\n\tInode            uint64\n\tRdevice          uint64\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]uint8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint64\n\tReserved         [4]uint8\n\t_                [4]byte\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]uint8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]uint8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]uint8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n\t_               [4]byte\n}\n\nconst (\n\tPPS_GETPARAMS = 0x400870a1\n\tPPS_SETPARAMS = 0x800870a2\n\tPPS_GETCAP    = 0x400870a3\n\tPPS_FETCH     = 0xc00870a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x800\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint32\n\tSeq  uint32\n\t_    uint32\n\t_    uint64\n\t_    uint64\n}\ntype SysvShmDesc struct {\n\tPerm   SysvIpcPerm\n\tAtime  int64\n\tDtime  int64\n\tCtime  int64\n\tSegsz  uint64\n\tCpid   int32\n\tLpid   int32\n\tNattch uint64\n\t_      uint64\n\t_      uint64\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go",
    "content": "// cgo -godefs -objdir=/tmp/riscv64/cgo -- -Wall -Werror -static -I/tmp/riscv64/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build riscv64 && linux\n\npackage unix\n\nconst (\n\tSizeofPtr  = 0x8\n\tSizeofLong = 0x8\n)\n\ntype (\n\t_C_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 Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime 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 Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\t_       uint64\n\tSize    int64\n\tBlksize int32\n\t_       int32\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\t_       [2]int32\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]uint8\n\t_      [5]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n\tName [0]byte\n\t_    [4]byte\n}\n\nconst (\n\tFADV_DONTNEED = 0x4\n\tFADV_NOREUSE  = 0x5\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint64\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]uint8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]uint8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [24]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x60\n\tSizeofIovec           = 0x10\n\tSizeofMsghdr          = 0x38\n\tSizeofCmsghdr         = 0x10\n)\n\nconst (\n\tSizeofSockFprog = 0x10\n)\n\ntype PtraceRegs struct {\n\tPc  uint64\n\tRa  uint64\n\tSp  uint64\n\tGp  uint64\n\tTp  uint64\n\tT0  uint64\n\tT1  uint64\n\tT2  uint64\n\tS0  uint64\n\tS1  uint64\n\tA0  uint64\n\tA1  uint64\n\tA2  uint64\n\tA3  uint64\n\tA4  uint64\n\tA5  uint64\n\tA6  uint64\n\tA7  uint64\n\tS2  uint64\n\tS3  uint64\n\tS4  uint64\n\tS5  uint64\n\tS6  uint64\n\tS7  uint64\n\tS8  uint64\n\tS9  uint64\n\tS10 uint64\n\tS11 uint64\n\tT3  uint64\n\tT4  uint64\n\tT5  uint64\n\tT6  uint64\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]uint8\n\t_         [4]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]uint8\n\tFpack  [6]uint8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\t_      int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x80000\n)\n\nconst (\n\tPOLLRDHUP = 0x2000\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\nconst (\n\tSIG_BLOCK   = 0x0\n\tSIG_UNBLOCK = 0x1\n\tSIG_SETMASK = 0x2\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tErrno int32\n\tCode  int32\n\t_     int32\n\t_     [112]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]uint8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint64\n\nconst (\n\t_NCPUBITS = 0x40\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [118]byte\n\t_      uint64\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\nconst (\n\tSizeofTpacketHdr = 0x20\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG = 0x1269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]uint8\n\tDriver_name [64]uint8\n\tModule_name [64]uint8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]uint8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]uint8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]uint8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]uint8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]uint8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]uint8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]uint8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]uint8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]uint8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]uint8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint32\n\tInode            uint64\n\tRdevice          uint32\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]uint8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint64\n\tReserved         [4]uint8\n\t_                [4]byte\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]uint8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]uint8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]uint8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n\t_               [4]byte\n}\n\nconst (\n\tPPS_GETPARAMS = 0x800870a1\n\tPPS_SETPARAMS = 0x400870a2\n\tPPS_GETCAP    = 0x800870a3\n\tPPS_FETCH     = 0xc00870a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x800\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint32\n\t_    [0]uint8\n\tSeq  uint16\n\t_    uint16\n\t_    uint64\n\t_    uint64\n}\ntype SysvShmDesc struct {\n\tPerm   SysvIpcPerm\n\tSegsz  uint64\n\tAtime  int64\n\tDtime  int64\n\tCtime  int64\n\tCpid   int32\n\tLpid   int32\n\tNattch uint64\n\t_      uint64\n\t_      uint64\n}\n\ntype RISCVHWProbePairs struct {\n\tKey   int64\n\tValue uint64\n}\n\nconst (\n\tRISCV_HWPROBE_KEY_MVENDORID          = 0x0\n\tRISCV_HWPROBE_KEY_MARCHID            = 0x1\n\tRISCV_HWPROBE_KEY_MIMPID             = 0x2\n\tRISCV_HWPROBE_KEY_BASE_BEHAVIOR      = 0x3\n\tRISCV_HWPROBE_BASE_BEHAVIOR_IMA      = 0x1\n\tRISCV_HWPROBE_KEY_IMA_EXT_0          = 0x4\n\tRISCV_HWPROBE_IMA_FD                 = 0x1\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_EXT_ZICBOZ             = 0x40\n\tRISCV_HWPROBE_EXT_ZBC                = 0x80\n\tRISCV_HWPROBE_EXT_ZBKB               = 0x100\n\tRISCV_HWPROBE_EXT_ZBKC               = 0x200\n\tRISCV_HWPROBE_EXT_ZBKX               = 0x400\n\tRISCV_HWPROBE_EXT_ZKND               = 0x800\n\tRISCV_HWPROBE_EXT_ZKNE               = 0x1000\n\tRISCV_HWPROBE_EXT_ZKNH               = 0x2000\n\tRISCV_HWPROBE_EXT_ZKSED              = 0x4000\n\tRISCV_HWPROBE_EXT_ZKSH               = 0x8000\n\tRISCV_HWPROBE_EXT_ZKT                = 0x10000\n\tRISCV_HWPROBE_EXT_ZVBB               = 0x20000\n\tRISCV_HWPROBE_EXT_ZVBC               = 0x40000\n\tRISCV_HWPROBE_EXT_ZVKB               = 0x80000\n\tRISCV_HWPROBE_EXT_ZVKG               = 0x100000\n\tRISCV_HWPROBE_EXT_ZVKNED             = 0x200000\n\tRISCV_HWPROBE_EXT_ZVKNHA             = 0x400000\n\tRISCV_HWPROBE_EXT_ZVKNHB             = 0x800000\n\tRISCV_HWPROBE_EXT_ZVKSED             = 0x1000000\n\tRISCV_HWPROBE_EXT_ZVKSH              = 0x2000000\n\tRISCV_HWPROBE_EXT_ZVKT               = 0x4000000\n\tRISCV_HWPROBE_EXT_ZFH                = 0x8000000\n\tRISCV_HWPROBE_EXT_ZFHMIN             = 0x10000000\n\tRISCV_HWPROBE_EXT_ZIHINTNTL          = 0x20000000\n\tRISCV_HWPROBE_EXT_ZVFH               = 0x40000000\n\tRISCV_HWPROBE_EXT_ZVFHMIN            = 0x80000000\n\tRISCV_HWPROBE_EXT_ZFA                = 0x100000000\n\tRISCV_HWPROBE_EXT_ZTSO               = 0x200000000\n\tRISCV_HWPROBE_EXT_ZACAS              = 0x400000000\n\tRISCV_HWPROBE_EXT_ZICOND             = 0x800000000\n\tRISCV_HWPROBE_EXT_ZIHINTPAUSE        = 0x1000000000\n\tRISCV_HWPROBE_KEY_CPUPERF_0          = 0x5\n\tRISCV_HWPROBE_MISALIGNED_UNKNOWN     = 0x0\n\tRISCV_HWPROBE_MISALIGNED_EMULATED    = 0x1\n\tRISCV_HWPROBE_MISALIGNED_SLOW        = 0x2\n\tRISCV_HWPROBE_MISALIGNED_FAST        = 0x3\n\tRISCV_HWPROBE_MISALIGNED_UNSUPPORTED = 0x4\n\tRISCV_HWPROBE_MISALIGNED_MASK        = 0x7\n\tRISCV_HWPROBE_KEY_ZICBOZ_BLOCK_SIZE  = 0x6\n\tRISCV_HWPROBE_WHICH_CPUS             = 0x1\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go",
    "content": "// cgo -godefs -objdir=/tmp/s390x/cgo -- -Wall -Werror -static -I/tmp/s390x/include -fsigned-char linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build s390x && linux\n\npackage unix\n\nconst (\n\tSizeofPtr  = 0x8\n\tSizeofLong = 0x8\n)\n\ntype (\n\t_C_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 Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime 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 Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint32\n\tUid     uint32\n\tGid     uint32\n\t_       int32\n\tRdev    uint64\n\tSize    int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBlksize int64\n\tBlocks  int64\n\t_       [3]int64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n\tName [0]byte\n\t_    [4]byte\n}\n\nconst (\n\tFADV_DONTNEED = 0x6\n\tFADV_NOREUSE  = 0x7\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint64\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [24]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x60\n\tSizeofIovec           = 0x10\n\tSizeofMsghdr          = 0x38\n\tSizeofCmsghdr         = 0x10\n)\n\nconst (\n\tSizeofSockFprog = 0x10\n)\n\ntype PtraceRegs struct {\n\tPsw                      PtracePsw\n\tGprs                     [16]uint64\n\tAcrs                     [16]uint32\n\tOrig_gpr2                uint64\n\tFp_regs                  PtraceFpregs\n\tPer_info                 PtracePer\n\tIeee_instruction_pointer uint64\n}\n\ntype PtracePsw struct {\n\tMask uint64\n\tAddr uint64\n}\n\ntype PtraceFpregs struct {\n\tFpc  uint32\n\tFprs [16]float64\n}\n\ntype PtracePer struct {\n\tControl_regs  [3]uint64\n\t_             [8]byte\n\tStarting_addr uint64\n\tEnding_addr   uint64\n\tPerc_atmid    uint16\n\tAddress       uint64\n\tAccess_id     uint8\n\t_             [7]byte\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]int8\n\t_         [4]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\t_      int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x80000\n)\n\nconst (\n\tPOLLRDHUP = 0x2000\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\nconst (\n\tSIG_BLOCK   = 0x0\n\tSIG_UNBLOCK = 0x1\n\tSIG_SETMASK = 0x2\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tErrno int32\n\tCode  int32\n\t_     int32\n\t_     [112]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint64\n\nconst (\n\t_NCPUBITS = 0x40\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x8000000000000000\n\tCBitFieldMaskBit1  = 0x4000000000000000\n\tCBitFieldMaskBit2  = 0x2000000000000000\n\tCBitFieldMaskBit3  = 0x1000000000000000\n\tCBitFieldMaskBit4  = 0x800000000000000\n\tCBitFieldMaskBit5  = 0x400000000000000\n\tCBitFieldMaskBit6  = 0x200000000000000\n\tCBitFieldMaskBit7  = 0x100000000000000\n\tCBitFieldMaskBit8  = 0x80000000000000\n\tCBitFieldMaskBit9  = 0x40000000000000\n\tCBitFieldMaskBit10 = 0x20000000000000\n\tCBitFieldMaskBit11 = 0x10000000000000\n\tCBitFieldMaskBit12 = 0x8000000000000\n\tCBitFieldMaskBit13 = 0x4000000000000\n\tCBitFieldMaskBit14 = 0x2000000000000\n\tCBitFieldMaskBit15 = 0x1000000000000\n\tCBitFieldMaskBit16 = 0x800000000000\n\tCBitFieldMaskBit17 = 0x400000000000\n\tCBitFieldMaskBit18 = 0x200000000000\n\tCBitFieldMaskBit19 = 0x100000000000\n\tCBitFieldMaskBit20 = 0x80000000000\n\tCBitFieldMaskBit21 = 0x40000000000\n\tCBitFieldMaskBit22 = 0x20000000000\n\tCBitFieldMaskBit23 = 0x10000000000\n\tCBitFieldMaskBit24 = 0x8000000000\n\tCBitFieldMaskBit25 = 0x4000000000\n\tCBitFieldMaskBit26 = 0x2000000000\n\tCBitFieldMaskBit27 = 0x1000000000\n\tCBitFieldMaskBit28 = 0x800000000\n\tCBitFieldMaskBit29 = 0x400000000\n\tCBitFieldMaskBit30 = 0x200000000\n\tCBitFieldMaskBit31 = 0x100000000\n\tCBitFieldMaskBit32 = 0x80000000\n\tCBitFieldMaskBit33 = 0x40000000\n\tCBitFieldMaskBit34 = 0x20000000\n\tCBitFieldMaskBit35 = 0x10000000\n\tCBitFieldMaskBit36 = 0x8000000\n\tCBitFieldMaskBit37 = 0x4000000\n\tCBitFieldMaskBit38 = 0x2000000\n\tCBitFieldMaskBit39 = 0x1000000\n\tCBitFieldMaskBit40 = 0x800000\n\tCBitFieldMaskBit41 = 0x400000\n\tCBitFieldMaskBit42 = 0x200000\n\tCBitFieldMaskBit43 = 0x100000\n\tCBitFieldMaskBit44 = 0x80000\n\tCBitFieldMaskBit45 = 0x40000\n\tCBitFieldMaskBit46 = 0x20000\n\tCBitFieldMaskBit47 = 0x10000\n\tCBitFieldMaskBit48 = 0x8000\n\tCBitFieldMaskBit49 = 0x4000\n\tCBitFieldMaskBit50 = 0x2000\n\tCBitFieldMaskBit51 = 0x1000\n\tCBitFieldMaskBit52 = 0x800\n\tCBitFieldMaskBit53 = 0x400\n\tCBitFieldMaskBit54 = 0x200\n\tCBitFieldMaskBit55 = 0x100\n\tCBitFieldMaskBit56 = 0x80\n\tCBitFieldMaskBit57 = 0x40\n\tCBitFieldMaskBit58 = 0x20\n\tCBitFieldMaskBit59 = 0x10\n\tCBitFieldMaskBit60 = 0x8\n\tCBitFieldMaskBit61 = 0x4\n\tCBitFieldMaskBit62 = 0x2\n\tCBitFieldMaskBit63 = 0x1\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [118]byte\n\t_      uint64\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype Statfs_t struct {\n\tType    uint32\n\tBsize   uint32\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen uint32\n\tFrsize  uint32\n\tFlags   uint32\n\tSpare   [4]uint32\n\t_       [4]byte\n}\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\nconst (\n\tSizeofTpacketHdr = 0x20\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG = 0x1269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint16\n\tInode            uint64\n\tRdevice          uint16\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]int8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint64\n\tReserved         [4]int8\n\t_                [4]byte\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]int8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]int8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]int8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n\t_               [4]byte\n}\n\nconst (\n\tPPS_GETPARAMS = 0x800870a1\n\tPPS_SETPARAMS = 0x400870a2\n\tPPS_GETCAP    = 0x800870a3\n\tPPS_FETCH     = 0xc00870a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x800\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint32\n\t_    uint16\n\tSeq  uint16\n\t_    uint64\n\t_    uint64\n}\ntype SysvShmDesc struct {\n\tPerm   SysvIpcPerm\n\tSegsz  uint64\n\tAtime  int64\n\tDtime  int64\n\tCtime  int64\n\tCpid   int32\n\tLpid   int32\n\tNattch uint64\n\t_      uint64\n\t_      uint64\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go",
    "content": "// cgo -godefs -objdir=/tmp/sparc64/cgo -- -Wall -Werror -static -I/tmp/sparc64/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build sparc64 && linux\n\npackage unix\n\nconst (\n\tSizeofPtr  = 0x8\n\tSizeofLong = 0x8\n)\n\ntype (\n\t_C_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\t_    [4]byte\n}\n\ntype Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime 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 Stat_t struct {\n\tDev     uint64\n\t_       uint16\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\t_       uint16\n\tSize    int64\n\tBlksize int64\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\t_       uint64\n\t_       uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      int16\n\t_      [2]byte\n}\n\ntype DmNameList struct {\n\tDev  uint64\n\tNext uint32\n\tName [0]byte\n\t_    [4]byte\n}\n\nconst (\n\tFADV_DONTNEED = 0x4\n\tFADV_NOREUSE  = 0x5\n)\n\ntype RawSockaddrNFCLLCP struct {\n\tSa_family        uint16\n\tDev_idx          uint32\n\tTarget_idx       uint32\n\tNfc_protocol     uint32\n\tDsap             uint8\n\tSsap             uint8\n\tService_name     [63]uint8\n\tService_name_len uint64\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype ifreq struct {\n\tIfrn [16]byte\n\tIfru [24]byte\n}\n\nconst (\n\tSizeofSockaddrNFCLLCP = 0x60\n\tSizeofIovec           = 0x10\n\tSizeofMsghdr          = 0x38\n\tSizeofCmsghdr         = 0x10\n)\n\nconst (\n\tSizeofSockFprog = 0x10\n)\n\ntype PtraceRegs struct {\n\tRegs   [16]uint64\n\tTstate uint64\n\tTpc    uint64\n\tTnpc   uint64\n\tY      uint32\n\tMagic  uint32\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]int8\n\t_         [4]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\t_      int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tOPEN_TREE_CLOEXEC = 0x400000\n)\n\nconst (\n\tPOLLRDHUP = 0x800\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\nconst (\n\tSIG_BLOCK   = 0x1\n\tSIG_UNBLOCK = 0x2\n\tSIG_SETMASK = 0x4\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tErrno int32\n\tCode  int32\n\t_     int32\n\t_     [112]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n\tAc_btime64                uint64\n\tCompact_count             uint64\n\tCompact_delay_total       uint64\n\tAc_tgid                   uint32\n\tAc_tgetime                uint64\n\tAc_exe_dev                uint64\n\tAc_exe_inode              uint64\n\tWpcopy_count              uint64\n\tWpcopy_delay_total        uint64\n\tIrq_count                 uint64\n\tIrq_delay_total           uint64\n\tCpu_delay_max             uint64\n\tCpu_delay_min             uint64\n\tBlkio_delay_max           uint64\n\tBlkio_delay_min           uint64\n\tSwapin_delay_max          uint64\n\tSwapin_delay_min          uint64\n\tFreepages_delay_max       uint64\n\tFreepages_delay_min       uint64\n\tThrashing_delay_max       uint64\n\tThrashing_delay_min       uint64\n\tCompact_delay_max         uint64\n\tCompact_delay_min         uint64\n\tWpcopy_delay_max          uint64\n\tWpcopy_delay_min          uint64\n\tIrq_delay_max             uint64\n\tIrq_delay_min             uint64\n}\n\ntype cpuMask uint64\n\nconst (\n\t_NCPUBITS = 0x40\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x8000000000000000\n\tCBitFieldMaskBit1  = 0x4000000000000000\n\tCBitFieldMaskBit2  = 0x2000000000000000\n\tCBitFieldMaskBit3  = 0x1000000000000000\n\tCBitFieldMaskBit4  = 0x800000000000000\n\tCBitFieldMaskBit5  = 0x400000000000000\n\tCBitFieldMaskBit6  = 0x200000000000000\n\tCBitFieldMaskBit7  = 0x100000000000000\n\tCBitFieldMaskBit8  = 0x80000000000000\n\tCBitFieldMaskBit9  = 0x40000000000000\n\tCBitFieldMaskBit10 = 0x20000000000000\n\tCBitFieldMaskBit11 = 0x10000000000000\n\tCBitFieldMaskBit12 = 0x8000000000000\n\tCBitFieldMaskBit13 = 0x4000000000000\n\tCBitFieldMaskBit14 = 0x2000000000000\n\tCBitFieldMaskBit15 = 0x1000000000000\n\tCBitFieldMaskBit16 = 0x800000000000\n\tCBitFieldMaskBit17 = 0x400000000000\n\tCBitFieldMaskBit18 = 0x200000000000\n\tCBitFieldMaskBit19 = 0x100000000000\n\tCBitFieldMaskBit20 = 0x80000000000\n\tCBitFieldMaskBit21 = 0x40000000000\n\tCBitFieldMaskBit22 = 0x20000000000\n\tCBitFieldMaskBit23 = 0x10000000000\n\tCBitFieldMaskBit24 = 0x8000000000\n\tCBitFieldMaskBit25 = 0x4000000000\n\tCBitFieldMaskBit26 = 0x2000000000\n\tCBitFieldMaskBit27 = 0x1000000000\n\tCBitFieldMaskBit28 = 0x800000000\n\tCBitFieldMaskBit29 = 0x400000000\n\tCBitFieldMaskBit30 = 0x200000000\n\tCBitFieldMaskBit31 = 0x100000000\n\tCBitFieldMaskBit32 = 0x80000000\n\tCBitFieldMaskBit33 = 0x40000000\n\tCBitFieldMaskBit34 = 0x20000000\n\tCBitFieldMaskBit35 = 0x10000000\n\tCBitFieldMaskBit36 = 0x8000000\n\tCBitFieldMaskBit37 = 0x4000000\n\tCBitFieldMaskBit38 = 0x2000000\n\tCBitFieldMaskBit39 = 0x1000000\n\tCBitFieldMaskBit40 = 0x800000\n\tCBitFieldMaskBit41 = 0x400000\n\tCBitFieldMaskBit42 = 0x200000\n\tCBitFieldMaskBit43 = 0x100000\n\tCBitFieldMaskBit44 = 0x80000\n\tCBitFieldMaskBit45 = 0x40000\n\tCBitFieldMaskBit46 = 0x20000\n\tCBitFieldMaskBit47 = 0x10000\n\tCBitFieldMaskBit48 = 0x8000\n\tCBitFieldMaskBit49 = 0x4000\n\tCBitFieldMaskBit50 = 0x2000\n\tCBitFieldMaskBit51 = 0x1000\n\tCBitFieldMaskBit52 = 0x800\n\tCBitFieldMaskBit53 = 0x400\n\tCBitFieldMaskBit54 = 0x200\n\tCBitFieldMaskBit55 = 0x100\n\tCBitFieldMaskBit56 = 0x80\n\tCBitFieldMaskBit57 = 0x40\n\tCBitFieldMaskBit58 = 0x20\n\tCBitFieldMaskBit59 = 0x10\n\tCBitFieldMaskBit60 = 0x8\n\tCBitFieldMaskBit61 = 0x4\n\tCBitFieldMaskBit62 = 0x2\n\tCBitFieldMaskBit63 = 0x1\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\tData   [118]byte\n\t_      uint64\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\nconst (\n\tSizeofTpacketHdr = 0x20\n)\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG = 0x20001269\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\ntype LoopInfo struct {\n\tNumber           int32\n\tDevice           uint32\n\tInode            uint64\n\tRdevice          uint32\n\tOffset           int32\n\tEncrypt_type     int32\n\tEncrypt_key_size int32\n\tFlags            int32\n\tName             [64]int8\n\tEncrypt_key      [32]uint8\n\tInit             [2]uint64\n\tReserved         [4]int8\n\t_                [4]byte\n}\n\ntype TIPCSubscr struct {\n\tSeq     TIPCServiceRange\n\tTimeout uint32\n\tFilter  uint32\n\tHandle  [8]int8\n}\n\ntype TIPCSIOCLNReq struct {\n\tPeer     uint32\n\tId       uint32\n\tLinkname [68]int8\n}\n\ntype TIPCSIOCNodeIDReq struct {\n\tPeer uint32\n\tId   [16]int8\n}\n\ntype PPSKInfo struct {\n\tAssert_sequence uint32\n\tClear_sequence  uint32\n\tAssert_tu       PPSKTime\n\tClear_tu        PPSKTime\n\tCurrent_mode    int32\n\t_               [4]byte\n}\n\nconst (\n\tPPS_GETPARAMS = 0x400870a1\n\tPPS_SETPARAMS = 0x800870a2\n\tPPS_GETCAP    = 0x400870a3\n\tPPS_FETCH     = 0xc00870a4\n)\n\nconst (\n\tPIDFD_NONBLOCK = 0x4000\n)\n\ntype SysvIpcPerm struct {\n\tKey  int32\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode uint32\n\t_    uint16\n\tSeq  uint16\n\t_    uint64\n\t_    uint64\n}\ntype SysvShmDesc struct {\n\tPerm   SysvIpcPerm\n\tAtime  int64\n\tDtime  int64\n\tCtime  int64\n\tSegsz  uint64\n\tCpid   int32\n\tLpid   int32\n\tNattch uint64\n\t_      uint64\n\t_      uint64\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go",
    "content": "// cgo -godefs types_netbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && netbsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\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 _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tMode    uint32\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize uint32\n\tFlags   uint32\n\tGen     uint32\n\tSpare   [2]uint32\n}\n\ntype Statfs_t [0]byte\n\ntype Statvfs_t struct {\n\tFlag        uint32\n\tBsize       uint32\n\tFrsize      uint32\n\tIosize      uint32\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      uint64\n\tBresvd      uint64\n\tFiles       uint64\n\tFfree       uint64\n\tFavail      uint64\n\tFresvd      uint64\n\tSyncreads   uint64\n\tSyncwrites  uint64\n\tAsyncreads  uint64\n\tAsyncwrites uint64\n\tFsidx       Fsid\n\tFsid        uint32\n\tNamemax     uint32\n\tOwner       uint32\n\tSpare       [4]uint32\n\tFstypename  [32]byte\n\tMntonname   [1024]byte\n\tMntfromname [1024]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno    uint64\n\tReclen    uint16\n\tNamlen    uint16\n\tType      uint8\n\tName      [512]int8\n\tPad_cgo_0 [3]byte\n}\n\ntype Fsid struct {\n\tX__fsid_val [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tST_WAIT   = 0x1\n\tST_NOWAIT = 0x2\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x14\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint32\n\tFilter uint32\n\tFlags  uint32\n\tFflags uint32\n\tData   int64\n\tUdata  int32\n}\n\ntype FdSet struct {\n\tBits [8]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0x98\n\tSizeofIfData           = 0x84\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x78\n\tSizeofRtMetrics        = 0x50\n)\n\ntype IfMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tData      IfData\n\tPad_cgo_1 [4]byte\n}\n\ntype IfData struct {\n\tType       uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tPad_cgo_0  [1]byte\n\tLink_state int32\n\tMtu        uint64\n\tMetric     uint64\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tNoproto    uint64\n\tLastchange Timespec\n}\n\ntype IfaMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tMetric    int32\n\tIndex     uint16\n\tPad_cgo_0 [6]byte\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tFlags     int32\n\tAddrs     int32\n\tPid       int32\n\tSeq       int32\n\tErrno     int32\n\tUse       int32\n\tInits     int32\n\tPad_cgo_1 [4]byte\n\tRmx       RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint64\n\tMtu      uint64\n\tHopcount uint64\n\tRecvpipe uint64\n\tSendpipe uint64\n\tSsthresh uint64\n\tRtt      uint64\n\tRttvar   uint64\n\tExpire   int64\n\tPksent   int64\n}\n\ntype Mclpool [0]byte\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x80\n\tSizeofBpfProgram = 0x8\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv    uint64\n\tDrop    uint64\n\tCapt    uint64\n\tPadding [13]uint64\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp    BpfTimeval\n\tCaplen    uint32\n\tDatalen   uint32\n\tHdrlen    uint16\n\tPad_cgo_0 [2]byte\n}\n\ntype BpfTimeval struct {\n\tSec  int32\n\tUsec int32\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\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Ptmget struct {\n\tCfd int32\n\tSfd int32\n\tCn  [1024]byte\n\tSn  [1024]byte\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x100\n\tAT_SYMLINK_NOFOLLOW = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_REMOVEDIR        = 0x800\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sysctlnode struct {\n\tFlags           uint32\n\tNum             int32\n\tName            [32]int8\n\tVer             uint32\n\tX__rsvd         uint32\n\tUn              [16]byte\n\tX_sysctl_size   [8]byte\n\tX_sysctl_func   [8]byte\n\tX_sysctl_parent [8]byte\n\tX_sysctl_desc   [8]byte\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x278\n\ntype Uvmexp struct {\n\tPagesize           int64\n\tPagemask           int64\n\tPageshift          int64\n\tNpages             int64\n\tFree               int64\n\tActive             int64\n\tInactive           int64\n\tPaging             int64\n\tWired              int64\n\tZeropages          int64\n\tReserve_pagedaemon int64\n\tReserve_kernel     int64\n\tFreemin            int64\n\tFreetarg           int64\n\tInactarg           int64\n\tWiredmax           int64\n\tNswapdev           int64\n\tSwpages            int64\n\tSwpginuse          int64\n\tSwpgonly           int64\n\tNswget             int64\n\tUnused1            int64\n\tCpuhit             int64\n\tCpumiss            int64\n\tFaults             int64\n\tTraps              int64\n\tIntrs              int64\n\tSwtch              int64\n\tSofts              int64\n\tSyscalls           int64\n\tPageins            int64\n\tSwapins            int64\n\tSwapouts           int64\n\tPgswapin           int64\n\tPgswapout          int64\n\tForks              int64\n\tForks_ppwait       int64\n\tForks_sharevm      int64\n\tPga_zerohit        int64\n\tPga_zeromiss       int64\n\tZeroaborts         int64\n\tFltnoram           int64\n\tFltnoanon          int64\n\tFltpgwait          int64\n\tFltpgrele          int64\n\tFltrelck           int64\n\tFltrelckok         int64\n\tFltanget           int64\n\tFltanretry         int64\n\tFltamcopy          int64\n\tFltnamap           int64\n\tFltnomap           int64\n\tFltlget            int64\n\tFltget             int64\n\tFlt_anon           int64\n\tFlt_acow           int64\n\tFlt_obj            int64\n\tFlt_prcopy         int64\n\tFlt_przero         int64\n\tPdwoke             int64\n\tPdrevs             int64\n\tUnused4            int64\n\tPdfreed            int64\n\tPdscans            int64\n\tPdanscan           int64\n\tPdobscan           int64\n\tPdreact            int64\n\tPdbusy             int64\n\tPdpageouts         int64\n\tPdpending          int64\n\tPddeact            int64\n\tAnonpages          int64\n\tFilepages          int64\n\tExecpages          int64\n\tColorhit           int64\n\tColormiss          int64\n\tNcolors            int64\n\tBootpages          int64\n\tPoolpages          int64\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go",
    "content": "// cgo -godefs types_netbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && netbsd\n\npackage unix\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 _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tMode    uint32\n\t_       [4]byte\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\t_       [4]byte\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize uint32\n\tFlags   uint32\n\tGen     uint32\n\tSpare   [2]uint32\n\t_       [4]byte\n}\n\ntype Statfs_t [0]byte\n\ntype Statvfs_t struct {\n\tFlag        uint64\n\tBsize       uint64\n\tFrsize      uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      uint64\n\tBresvd      uint64\n\tFiles       uint64\n\tFfree       uint64\n\tFavail      uint64\n\tFresvd      uint64\n\tSyncreads   uint64\n\tSyncwrites  uint64\n\tAsyncreads  uint64\n\tAsyncwrites uint64\n\tFsidx       Fsid\n\tFsid        uint64\n\tNamemax     uint64\n\tOwner       uint32\n\tSpare       [4]uint32\n\tFstypename  [32]byte\n\tMntonname   [1024]byte\n\tMntfromname [1024]byte\n\t_           [4]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno    uint64\n\tReclen    uint16\n\tNamlen    uint16\n\tType      uint8\n\tName      [512]int8\n\tPad_cgo_0 [3]byte\n}\n\ntype Fsid struct {\n\tX__fsid_val [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tST_WAIT   = 0x1\n\tST_NOWAIT = 0x2\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tPad_cgo_0  [4]byte\n\tIov        *Iovec\n\tIovlen     int32\n\tPad_cgo_1  [4]byte\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x14\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x10\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent     uint64\n\tFilter    uint32\n\tFlags     uint32\n\tFflags    uint32\n\tPad_cgo_0 [4]byte\n\tData      int64\n\tUdata     int64\n}\n\ntype FdSet struct {\n\tBits [8]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0x98\n\tSizeofIfData           = 0x88\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x78\n\tSizeofRtMetrics        = 0x50\n)\n\ntype IfMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tData      IfData\n}\n\ntype IfData struct {\n\tType       uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tPad_cgo_0  [1]byte\n\tLink_state int32\n\tMtu        uint64\n\tMetric     uint64\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tNoproto    uint64\n\tLastchange Timespec\n}\n\ntype IfaMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tMetric    int32\n\tIndex     uint16\n\tPad_cgo_0 [6]byte\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tFlags     int32\n\tAddrs     int32\n\tPid       int32\n\tSeq       int32\n\tErrno     int32\n\tUse       int32\n\tInits     int32\n\tPad_cgo_1 [4]byte\n\tRmx       RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint64\n\tMtu      uint64\n\tHopcount uint64\n\tRecvpipe uint64\n\tSendpipe uint64\n\tSsthresh uint64\n\tRtt      uint64\n\tRttvar   uint64\n\tExpire   int64\n\tPksent   int64\n}\n\ntype Mclpool [0]byte\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x80\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv    uint64\n\tDrop    uint64\n\tCapt    uint64\n\tPadding [13]uint64\n}\n\ntype BpfProgram struct {\n\tLen       uint32\n\tPad_cgo_0 [4]byte\n\tInsns     *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp    BpfTimeval\n\tCaplen    uint32\n\tDatalen   uint32\n\tHdrlen    uint16\n\tPad_cgo_0 [6]byte\n}\n\ntype BpfTimeval struct {\n\tSec  int64\n\tUsec int64\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\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Ptmget struct {\n\tCfd int32\n\tSfd int32\n\tCn  [1024]byte\n\tSn  [1024]byte\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x100\n\tAT_SYMLINK_NOFOLLOW = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_REMOVEDIR        = 0x800\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sysctlnode struct {\n\tFlags           uint32\n\tNum             int32\n\tName            [32]int8\n\tVer             uint32\n\tX__rsvd         uint32\n\tUn              [16]byte\n\tX_sysctl_size   [8]byte\n\tX_sysctl_func   [8]byte\n\tX_sysctl_parent [8]byte\n\tX_sysctl_desc   [8]byte\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x278\n\ntype Uvmexp struct {\n\tPagesize           int64\n\tPagemask           int64\n\tPageshift          int64\n\tNpages             int64\n\tFree               int64\n\tActive             int64\n\tInactive           int64\n\tPaging             int64\n\tWired              int64\n\tZeropages          int64\n\tReserve_pagedaemon int64\n\tReserve_kernel     int64\n\tFreemin            int64\n\tFreetarg           int64\n\tInactarg           int64\n\tWiredmax           int64\n\tNswapdev           int64\n\tSwpages            int64\n\tSwpginuse          int64\n\tSwpgonly           int64\n\tNswget             int64\n\tUnused1            int64\n\tCpuhit             int64\n\tCpumiss            int64\n\tFaults             int64\n\tTraps              int64\n\tIntrs              int64\n\tSwtch              int64\n\tSofts              int64\n\tSyscalls           int64\n\tPageins            int64\n\tSwapins            int64\n\tSwapouts           int64\n\tPgswapin           int64\n\tPgswapout          int64\n\tForks              int64\n\tForks_ppwait       int64\n\tForks_sharevm      int64\n\tPga_zerohit        int64\n\tPga_zeromiss       int64\n\tZeroaborts         int64\n\tFltnoram           int64\n\tFltnoanon          int64\n\tFltpgwait          int64\n\tFltpgrele          int64\n\tFltrelck           int64\n\tFltrelckok         int64\n\tFltanget           int64\n\tFltanretry         int64\n\tFltamcopy          int64\n\tFltnamap           int64\n\tFltnomap           int64\n\tFltlget            int64\n\tFltget             int64\n\tFlt_anon           int64\n\tFlt_acow           int64\n\tFlt_obj            int64\n\tFlt_prcopy         int64\n\tFlt_przero         int64\n\tPdwoke             int64\n\tPdrevs             int64\n\tUnused4            int64\n\tPdfreed            int64\n\tPdscans            int64\n\tPdanscan           int64\n\tPdobscan           int64\n\tPdreact            int64\n\tPdbusy             int64\n\tPdpageouts         int64\n\tPdpending          int64\n\tPddeact            int64\n\tAnonpages          int64\n\tFilepages          int64\n\tExecpages          int64\n\tColorhit           int64\n\tColormiss          int64\n\tNcolors            int64\n\tBootpages          int64\n\tPoolpages          int64\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go",
    "content": "// cgo -godefs types_netbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && netbsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\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\tPad_cgo_0 [4]byte\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   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 _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tMode    uint32\n\t_       [4]byte\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\t_       [4]byte\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize uint32\n\tFlags   uint32\n\tGen     uint32\n\tSpare   [2]uint32\n\t_       [4]byte\n}\n\ntype Statfs_t [0]byte\n\ntype Statvfs_t struct {\n\tFlag        uint32\n\tBsize       uint32\n\tFrsize      uint32\n\tIosize      uint32\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      uint64\n\tBresvd      uint64\n\tFiles       uint64\n\tFfree       uint64\n\tFavail      uint64\n\tFresvd      uint64\n\tSyncreads   uint64\n\tSyncwrites  uint64\n\tAsyncreads  uint64\n\tAsyncwrites uint64\n\tFsidx       Fsid\n\tFsid        uint32\n\tNamemax     uint32\n\tOwner       uint32\n\tSpare       [4]uint64\n\tFstypename  [32]byte\n\tMntonname   [1024]byte\n\tMntfromname [1024]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno    uint64\n\tReclen    uint16\n\tNamlen    uint16\n\tType      uint8\n\tName      [512]int8\n\tPad_cgo_0 [3]byte\n}\n\ntype Fsid struct {\n\tX__fsid_val [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tST_WAIT   = 0x1\n\tST_NOWAIT = 0x2\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x14\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent     uint32\n\tFilter    uint32\n\tFlags     uint32\n\tFflags    uint32\n\tData      int64\n\tUdata     int32\n\tPad_cgo_0 [4]byte\n}\n\ntype FdSet struct {\n\tBits [8]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0x98\n\tSizeofIfData           = 0x88\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x78\n\tSizeofRtMetrics        = 0x50\n)\n\ntype IfMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tData      IfData\n}\n\ntype IfData struct {\n\tType       uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tPad_cgo_0  [1]byte\n\tLink_state int32\n\tMtu        uint64\n\tMetric     uint64\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tNoproto    uint64\n\tLastchange Timespec\n}\n\ntype IfaMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tMetric    int32\n\tIndex     uint16\n\tPad_cgo_0 [6]byte\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tFlags     int32\n\tAddrs     int32\n\tPid       int32\n\tSeq       int32\n\tErrno     int32\n\tUse       int32\n\tInits     int32\n\tPad_cgo_1 [4]byte\n\tRmx       RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint64\n\tMtu      uint64\n\tHopcount uint64\n\tRecvpipe uint64\n\tSendpipe uint64\n\tSsthresh uint64\n\tRtt      uint64\n\tRttvar   uint64\n\tExpire   int64\n\tPksent   int64\n}\n\ntype Mclpool [0]byte\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x80\n\tSizeofBpfProgram = 0x8\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv    uint64\n\tDrop    uint64\n\tCapt    uint64\n\tPadding [13]uint64\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp    BpfTimeval\n\tCaplen    uint32\n\tDatalen   uint32\n\tHdrlen    uint16\n\tPad_cgo_0 [2]byte\n}\n\ntype BpfTimeval struct {\n\tSec  int32\n\tUsec int32\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\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Ptmget struct {\n\tCfd int32\n\tSfd int32\n\tCn  [1024]byte\n\tSn  [1024]byte\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x100\n\tAT_SYMLINK_NOFOLLOW = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_REMOVEDIR        = 0x800\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sysctlnode struct {\n\tFlags           uint32\n\tNum             int32\n\tName            [32]int8\n\tVer             uint32\n\tX__rsvd         uint32\n\tUn              [16]byte\n\tX_sysctl_size   [8]byte\n\tX_sysctl_func   [8]byte\n\tX_sysctl_parent [8]byte\n\tX_sysctl_desc   [8]byte\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x278\n\ntype Uvmexp struct {\n\tPagesize           int64\n\tPagemask           int64\n\tPageshift          int64\n\tNpages             int64\n\tFree               int64\n\tActive             int64\n\tInactive           int64\n\tPaging             int64\n\tWired              int64\n\tZeropages          int64\n\tReserve_pagedaemon int64\n\tReserve_kernel     int64\n\tFreemin            int64\n\tFreetarg           int64\n\tInactarg           int64\n\tWiredmax           int64\n\tNswapdev           int64\n\tSwpages            int64\n\tSwpginuse          int64\n\tSwpgonly           int64\n\tNswget             int64\n\tUnused1            int64\n\tCpuhit             int64\n\tCpumiss            int64\n\tFaults             int64\n\tTraps              int64\n\tIntrs              int64\n\tSwtch              int64\n\tSofts              int64\n\tSyscalls           int64\n\tPageins            int64\n\tSwapins            int64\n\tSwapouts           int64\n\tPgswapin           int64\n\tPgswapout          int64\n\tForks              int64\n\tForks_ppwait       int64\n\tForks_sharevm      int64\n\tPga_zerohit        int64\n\tPga_zeromiss       int64\n\tZeroaborts         int64\n\tFltnoram           int64\n\tFltnoanon          int64\n\tFltpgwait          int64\n\tFltpgrele          int64\n\tFltrelck           int64\n\tFltrelckok         int64\n\tFltanget           int64\n\tFltanretry         int64\n\tFltamcopy          int64\n\tFltnamap           int64\n\tFltnomap           int64\n\tFltlget            int64\n\tFltget             int64\n\tFlt_anon           int64\n\tFlt_acow           int64\n\tFlt_obj            int64\n\tFlt_prcopy         int64\n\tFlt_przero         int64\n\tPdwoke             int64\n\tPdrevs             int64\n\tUnused4            int64\n\tPdfreed            int64\n\tPdscans            int64\n\tPdanscan           int64\n\tPdobscan           int64\n\tPdreact            int64\n\tPdbusy             int64\n\tPdpageouts         int64\n\tPdpending          int64\n\tPddeact            int64\n\tAnonpages          int64\n\tFilepages          int64\n\tExecpages          int64\n\tColorhit           int64\n\tColormiss          int64\n\tNcolors            int64\n\tBootpages          int64\n\tPoolpages          int64\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go",
    "content": "// cgo -godefs types_netbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && netbsd\n\npackage unix\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 _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tMode    uint32\n\t_       [4]byte\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\t_       [4]byte\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize uint32\n\tFlags   uint32\n\tGen     uint32\n\tSpare   [2]uint32\n\t_       [4]byte\n}\n\ntype Statfs_t [0]byte\n\ntype Statvfs_t struct {\n\tFlag        uint64\n\tBsize       uint64\n\tFrsize      uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      uint64\n\tBresvd      uint64\n\tFiles       uint64\n\tFfree       uint64\n\tFavail      uint64\n\tFresvd      uint64\n\tSyncreads   uint64\n\tSyncwrites  uint64\n\tAsyncreads  uint64\n\tAsyncwrites uint64\n\tFsidx       Fsid\n\tFsid        uint64\n\tNamemax     uint64\n\tOwner       uint32\n\tSpare       [4]uint32\n\tFstypename  [32]byte\n\tMntonname   [1024]byte\n\tMntfromname [1024]byte\n\t_           [4]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno    uint64\n\tReclen    uint16\n\tNamlen    uint16\n\tType      uint8\n\tName      [512]int8\n\tPad_cgo_0 [3]byte\n}\n\ntype Fsid struct {\n\tX__fsid_val [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tST_WAIT   = 0x1\n\tST_NOWAIT = 0x2\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tPad_cgo_0  [4]byte\n\tIov        *Iovec\n\tIovlen     int32\n\tPad_cgo_1  [4]byte\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x14\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x10\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent     uint64\n\tFilter    uint32\n\tFlags     uint32\n\tFflags    uint32\n\tPad_cgo_0 [4]byte\n\tData      int64\n\tUdata     int64\n}\n\ntype FdSet struct {\n\tBits [8]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0x98\n\tSizeofIfData           = 0x88\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x78\n\tSizeofRtMetrics        = 0x50\n)\n\ntype IfMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tData      IfData\n}\n\ntype IfData struct {\n\tType       uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tPad_cgo_0  [1]byte\n\tLink_state int32\n\tMtu        uint64\n\tMetric     uint64\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tNoproto    uint64\n\tLastchange Timespec\n}\n\ntype IfaMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tMetric    int32\n\tIndex     uint16\n\tPad_cgo_0 [6]byte\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tFlags     int32\n\tAddrs     int32\n\tPid       int32\n\tSeq       int32\n\tErrno     int32\n\tUse       int32\n\tInits     int32\n\tPad_cgo_1 [4]byte\n\tRmx       RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint64\n\tMtu      uint64\n\tHopcount uint64\n\tRecvpipe uint64\n\tSendpipe uint64\n\tSsthresh uint64\n\tRtt      uint64\n\tRttvar   uint64\n\tExpire   int64\n\tPksent   int64\n}\n\ntype Mclpool [0]byte\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x80\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv    uint64\n\tDrop    uint64\n\tCapt    uint64\n\tPadding [13]uint64\n}\n\ntype BpfProgram struct {\n\tLen       uint32\n\tPad_cgo_0 [4]byte\n\tInsns     *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp    BpfTimeval\n\tCaplen    uint32\n\tDatalen   uint32\n\tHdrlen    uint16\n\tPad_cgo_0 [6]byte\n}\n\ntype BpfTimeval struct {\n\tSec  int64\n\tUsec int64\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\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Ptmget struct {\n\tCfd int32\n\tSfd int32\n\tCn  [1024]byte\n\tSn  [1024]byte\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x100\n\tAT_SYMLINK_NOFOLLOW = 0x200\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_REMOVEDIR        = 0x800\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sysctlnode struct {\n\tFlags           uint32\n\tNum             int32\n\tName            [32]int8\n\tVer             uint32\n\tX__rsvd         uint32\n\tUn              [16]byte\n\tX_sysctl_size   [8]byte\n\tX_sysctl_func   [8]byte\n\tX_sysctl_parent [8]byte\n\tX_sysctl_desc   [8]byte\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x278\n\ntype Uvmexp struct {\n\tPagesize           int64\n\tPagemask           int64\n\tPageshift          int64\n\tNpages             int64\n\tFree               int64\n\tActive             int64\n\tInactive           int64\n\tPaging             int64\n\tWired              int64\n\tZeropages          int64\n\tReserve_pagedaemon int64\n\tReserve_kernel     int64\n\tFreemin            int64\n\tFreetarg           int64\n\tInactarg           int64\n\tWiredmax           int64\n\tNswapdev           int64\n\tSwpages            int64\n\tSwpginuse          int64\n\tSwpgonly           int64\n\tNswget             int64\n\tUnused1            int64\n\tCpuhit             int64\n\tCpumiss            int64\n\tFaults             int64\n\tTraps              int64\n\tIntrs              int64\n\tSwtch              int64\n\tSofts              int64\n\tSyscalls           int64\n\tPageins            int64\n\tSwapins            int64\n\tSwapouts           int64\n\tPgswapin           int64\n\tPgswapout          int64\n\tForks              int64\n\tForks_ppwait       int64\n\tForks_sharevm      int64\n\tPga_zerohit        int64\n\tPga_zeromiss       int64\n\tZeroaborts         int64\n\tFltnoram           int64\n\tFltnoanon          int64\n\tFltpgwait          int64\n\tFltpgrele          int64\n\tFltrelck           int64\n\tFltrelckok         int64\n\tFltanget           int64\n\tFltanretry         int64\n\tFltamcopy          int64\n\tFltnamap           int64\n\tFltnomap           int64\n\tFltlget            int64\n\tFltget             int64\n\tFlt_anon           int64\n\tFlt_acow           int64\n\tFlt_obj            int64\n\tFlt_prcopy         int64\n\tFlt_przero         int64\n\tPdwoke             int64\n\tPdrevs             int64\n\tUnused4            int64\n\tPdfreed            int64\n\tPdscans            int64\n\tPdanscan           int64\n\tPdobscan           int64\n\tPdreact            int64\n\tPdbusy             int64\n\tPdpageouts         int64\n\tPdpending          int64\n\tPddeact            int64\n\tAnonpages          int64\n\tFilepages          int64\n\tExecpages          int64\n\tColorhit           int64\n\tColormiss          int64\n\tNcolors            int64\n\tBootpages          int64\n\tPoolpages          int64\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go",
    "content": "// cgo -godefs types_openbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && openbsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\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 _Gid_t uint32\n\ntype Stat_t struct {\n\tMode    uint32\n\tDev     int32\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\t_       Timespec\n}\n\ntype Statfs_t struct {\n\tF_flags       uint32\n\tF_bsize       uint32\n\tF_iosize      uint32\n\tF_blocks      uint64\n\tF_bfree       uint64\n\tF_bavail      int64\n\tF_files       uint64\n\tF_ffree       uint64\n\tF_favail      int64\n\tF_syncwrites  uint64\n\tF_syncreads   uint64\n\tF_asyncwrites uint64\n\tF_asyncreads  uint64\n\tF_fsid        Fsid\n\tF_namemax     uint32\n\tF_owner       uint32\n\tF_ctime       uint64\n\tF_fstypename  [16]byte\n\tF_mntonname   [90]byte\n\tF_mntfromname [90]byte\n\tF_mntfromspec [90]byte\n\t_             [2]byte\n\tMount_info    [160]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tNamlen uint8\n\t_      [4]uint8\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x20\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint32\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0xa0\n\tSizeofIfData           = 0x88\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x1a\n\tSizeofRtMsghdr         = 0x60\n\tSizeofRtMetrics        = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tXflags  int32\n\tData    IfData\n}\n\ntype IfData struct {\n\tType         uint8\n\tAddrlen      uint8\n\tHdrlen       uint8\n\tLink_state   uint8\n\tMtu          uint32\n\tMetric       uint32\n\tRdomain      uint32\n\tBaudrate     uint64\n\tIpackets     uint64\n\tIerrors      uint64\n\tOpackets     uint64\n\tOerrors      uint64\n\tCollisions   uint64\n\tIbytes       uint64\n\tObytes       uint64\n\tImcasts      uint64\n\tOmcasts      uint64\n\tIqdrops      uint64\n\tOqdrops      uint64\n\tNoproto      uint64\n\tCapabilities uint32\n\tLastchange   Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tMetric  int32\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tWhat    uint16\n\tName    [16]int8\n}\n\ntype RtMsghdr struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tHdrlen   uint16\n\tIndex    uint16\n\tTableid  uint16\n\tPriority uint8\n\tMpls     uint8\n\tAddrs    int32\n\tFlags    int32\n\tFmask    int32\n\tPid      int32\n\tSeq      int32\n\tErrno    int32\n\tInits    uint32\n\tRmx      RtMetrics\n}\n\ntype RtMetrics struct {\n\tPksent   uint64\n\tExpire   int64\n\tLocks    uint32\n\tMtu      uint32\n\tRefcnt   uint32\n\tHopcount uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPad      uint32\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x8\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x18\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  BpfTimeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\tIfidx   uint16\n\tFlowid  uint16\n\tFlags   uint8\n\tDrops   uint8\n}\n\ntype BpfTimeval struct {\n\tSec  uint32\n\tUsec uint32\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\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x1\n\tAT_SYMLINK_NOFOLLOW = 0x2\n\tAT_SYMLINK_FOLLOW   = 0x4\n\tAT_REMOVEDIR        = 0x8\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sigset_t uint32\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x158\n\ntype Uvmexp struct {\n\tPagesize           int32\n\tPagemask           int32\n\tPageshift          int32\n\tNpages             int32\n\tFree               int32\n\tActive             int32\n\tInactive           int32\n\tPaging             int32\n\tWired              int32\n\tZeropages          int32\n\tReserve_pagedaemon int32\n\tReserve_kernel     int32\n\tUnused01           int32\n\tVnodepages         int32\n\tVtextpages         int32\n\tFreemin            int32\n\tFreetarg           int32\n\tInactarg           int32\n\tWiredmax           int32\n\tAnonmin            int32\n\tVtextmin           int32\n\tVnodemin           int32\n\tAnonminpct         int32\n\tVtextminpct        int32\n\tVnodeminpct        int32\n\tNswapdev           int32\n\tSwpages            int32\n\tSwpginuse          int32\n\tSwpgonly           int32\n\tNswget             int32\n\tNanon              int32\n\tUnused05           int32\n\tUnused06           int32\n\tFaults             int32\n\tTraps              int32\n\tIntrs              int32\n\tSwtch              int32\n\tSofts              int32\n\tSyscalls           int32\n\tPageins            int32\n\tUnused07           int32\n\tUnused08           int32\n\tPgswapin           int32\n\tPgswapout          int32\n\tForks              int32\n\tForks_ppwait       int32\n\tForks_sharevm      int32\n\tPga_zerohit        int32\n\tPga_zeromiss       int32\n\tUnused09           int32\n\tFltnoram           int32\n\tFltnoanon          int32\n\tFltnoamap          int32\n\tFltpgwait          int32\n\tFltpgrele          int32\n\tFltrelck           int32\n\tFltrelckok         int32\n\tFltanget           int32\n\tFltanretry         int32\n\tFltamcopy          int32\n\tFltnamap           int32\n\tFltnomap           int32\n\tFltlget            int32\n\tFltget             int32\n\tFlt_anon           int32\n\tFlt_acow           int32\n\tFlt_obj            int32\n\tFlt_prcopy         int32\n\tFlt_przero         int32\n\tPdwoke             int32\n\tPdrevs             int32\n\tPdswout            int32\n\tPdfreed            int32\n\tPdscans            int32\n\tPdanscan           int32\n\tPdobscan           int32\n\tPdreact            int32\n\tPdbusy             int32\n\tPdpageouts         int32\n\tPdpending          int32\n\tPddeact            int32\n\tUnused11           int32\n\tUnused12           int32\n\tUnused13           int32\n\tFpswtch            int32\n\tKmapent            int32\n}\n\nconst SizeofClockinfo = 0x10\n\ntype Clockinfo struct {\n\tHz     int32\n\tTick   int32\n\tStathz int32\n\tProfhz int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go",
    "content": "// cgo -godefs types_openbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && openbsd\n\npackage unix\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 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 _Gid_t uint32\n\ntype Stat_t struct {\n\tMode    uint32\n\tDev     int32\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\t_       Timespec\n}\n\ntype Statfs_t struct {\n\tF_flags       uint32\n\tF_bsize       uint32\n\tF_iosize      uint32\n\tF_blocks      uint64\n\tF_bfree       uint64\n\tF_bavail      int64\n\tF_files       uint64\n\tF_ffree       uint64\n\tF_favail      int64\n\tF_syncwrites  uint64\n\tF_syncreads   uint64\n\tF_asyncwrites uint64\n\tF_asyncreads  uint64\n\tF_fsid        Fsid\n\tF_namemax     uint32\n\tF_owner       uint32\n\tF_ctime       uint64\n\tF_fstypename  [16]byte\n\tF_mntonname   [90]byte\n\tF_mntfromname [90]byte\n\tF_mntfromspec [90]byte\n\t_             [2]byte\n\tMount_info    [160]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tNamlen uint8\n\t_      [4]uint8\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x20\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x10\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0xa8\n\tSizeofIfData           = 0x90\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x1a\n\tSizeofRtMsghdr         = 0x60\n\tSizeofRtMetrics        = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tXflags  int32\n\tData    IfData\n}\n\ntype IfData struct {\n\tType         uint8\n\tAddrlen      uint8\n\tHdrlen       uint8\n\tLink_state   uint8\n\tMtu          uint32\n\tMetric       uint32\n\tRdomain      uint32\n\tBaudrate     uint64\n\tIpackets     uint64\n\tIerrors      uint64\n\tOpackets     uint64\n\tOerrors      uint64\n\tCollisions   uint64\n\tIbytes       uint64\n\tObytes       uint64\n\tImcasts      uint64\n\tOmcasts      uint64\n\tIqdrops      uint64\n\tOqdrops      uint64\n\tNoproto      uint64\n\tCapabilities uint32\n\tLastchange   Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tMetric  int32\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tWhat    uint16\n\tName    [16]int8\n}\n\ntype RtMsghdr struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tHdrlen   uint16\n\tIndex    uint16\n\tTableid  uint16\n\tPriority uint8\n\tMpls     uint8\n\tAddrs    int32\n\tFlags    int32\n\tFmask    int32\n\tPid      int32\n\tSeq      int32\n\tErrno    int32\n\tInits    uint32\n\tRmx      RtMetrics\n}\n\ntype RtMetrics struct {\n\tPksent   uint64\n\tExpire   int64\n\tLocks    uint32\n\tMtu      uint32\n\tRefcnt   uint32\n\tHopcount uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPad      uint32\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x18\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  BpfTimeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\tIfidx   uint16\n\tFlowid  uint16\n\tFlags   uint8\n\tDrops   uint8\n}\n\ntype BpfTimeval struct {\n\tSec  uint32\n\tUsec uint32\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\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x1\n\tAT_SYMLINK_NOFOLLOW = 0x2\n\tAT_SYMLINK_FOLLOW   = 0x4\n\tAT_REMOVEDIR        = 0x8\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sigset_t uint32\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x158\n\ntype Uvmexp struct {\n\tPagesize           int32\n\tPagemask           int32\n\tPageshift          int32\n\tNpages             int32\n\tFree               int32\n\tActive             int32\n\tInactive           int32\n\tPaging             int32\n\tWired              int32\n\tZeropages          int32\n\tReserve_pagedaemon int32\n\tReserve_kernel     int32\n\tUnused01           int32\n\tVnodepages         int32\n\tVtextpages         int32\n\tFreemin            int32\n\tFreetarg           int32\n\tInactarg           int32\n\tWiredmax           int32\n\tAnonmin            int32\n\tVtextmin           int32\n\tVnodemin           int32\n\tAnonminpct         int32\n\tVtextminpct        int32\n\tVnodeminpct        int32\n\tNswapdev           int32\n\tSwpages            int32\n\tSwpginuse          int32\n\tSwpgonly           int32\n\tNswget             int32\n\tNanon              int32\n\tUnused05           int32\n\tUnused06           int32\n\tFaults             int32\n\tTraps              int32\n\tIntrs              int32\n\tSwtch              int32\n\tSofts              int32\n\tSyscalls           int32\n\tPageins            int32\n\tUnused07           int32\n\tUnused08           int32\n\tPgswapin           int32\n\tPgswapout          int32\n\tForks              int32\n\tForks_ppwait       int32\n\tForks_sharevm      int32\n\tPga_zerohit        int32\n\tPga_zeromiss       int32\n\tUnused09           int32\n\tFltnoram           int32\n\tFltnoanon          int32\n\tFltnoamap          int32\n\tFltpgwait          int32\n\tFltpgrele          int32\n\tFltrelck           int32\n\tFltrelckok         int32\n\tFltanget           int32\n\tFltanretry         int32\n\tFltamcopy          int32\n\tFltnamap           int32\n\tFltnomap           int32\n\tFltlget            int32\n\tFltget             int32\n\tFlt_anon           int32\n\tFlt_acow           int32\n\tFlt_obj            int32\n\tFlt_prcopy         int32\n\tFlt_przero         int32\n\tPdwoke             int32\n\tPdrevs             int32\n\tPdswout            int32\n\tPdfreed            int32\n\tPdscans            int32\n\tPdanscan           int32\n\tPdobscan           int32\n\tPdreact            int32\n\tPdbusy             int32\n\tPdpageouts         int32\n\tPdpending          int32\n\tPddeact            int32\n\tUnused11           int32\n\tUnused12           int32\n\tUnused13           int32\n\tFpswtch            int32\n\tKmapent            int32\n}\n\nconst SizeofClockinfo = 0x10\n\ntype Clockinfo struct {\n\tHz     int32\n\tTick   int32\n\tStathz int32\n\tProfhz int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go",
    "content": "// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && openbsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\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\t_    [4]byte\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int32\n\t_    [4]byte\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 _Gid_t uint32\n\ntype Stat_t struct {\n\tMode    uint32\n\tDev     int32\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\t_       [4]byte\n\t_       Timespec\n}\n\ntype Statfs_t struct {\n\tF_flags       uint32\n\tF_bsize       uint32\n\tF_iosize      uint32\n\t_             [4]byte\n\tF_blocks      uint64\n\tF_bfree       uint64\n\tF_bavail      int64\n\tF_files       uint64\n\tF_ffree       uint64\n\tF_favail      int64\n\tF_syncwrites  uint64\n\tF_syncreads   uint64\n\tF_asyncwrites uint64\n\tF_asyncreads  uint64\n\tF_fsid        Fsid\n\tF_namemax     uint32\n\tF_owner       uint32\n\tF_ctime       uint64\n\tF_fstypename  [16]byte\n\tF_mntonname   [90]byte\n\tF_mntfromname [90]byte\n\tF_mntfromspec [90]byte\n\t_             [2]byte\n\tMount_info    [160]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tNamlen uint8\n\t_      [4]uint8\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x20\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint32\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\t_      [4]byte\n\tData   int64\n\tUdata  *byte\n\t_      [4]byte\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0xa8\n\tSizeofIfData           = 0x90\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x1a\n\tSizeofRtMsghdr         = 0x60\n\tSizeofRtMetrics        = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tXflags  int32\n\tData    IfData\n}\n\ntype IfData struct {\n\tType         uint8\n\tAddrlen      uint8\n\tHdrlen       uint8\n\tLink_state   uint8\n\tMtu          uint32\n\tMetric       uint32\n\tRdomain      uint32\n\tBaudrate     uint64\n\tIpackets     uint64\n\tIerrors      uint64\n\tOpackets     uint64\n\tOerrors      uint64\n\tCollisions   uint64\n\tIbytes       uint64\n\tObytes       uint64\n\tImcasts      uint64\n\tOmcasts      uint64\n\tIqdrops      uint64\n\tOqdrops      uint64\n\tNoproto      uint64\n\tCapabilities uint32\n\t_            [4]byte\n\tLastchange   Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tMetric  int32\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tWhat    uint16\n\tName    [16]int8\n}\n\ntype RtMsghdr struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tHdrlen   uint16\n\tIndex    uint16\n\tTableid  uint16\n\tPriority uint8\n\tMpls     uint8\n\tAddrs    int32\n\tFlags    int32\n\tFmask    int32\n\tPid      int32\n\tSeq      int32\n\tErrno    int32\n\tInits    uint32\n\tRmx      RtMetrics\n}\n\ntype RtMetrics struct {\n\tPksent   uint64\n\tExpire   int64\n\tLocks    uint32\n\tMtu      uint32\n\tRefcnt   uint32\n\tHopcount uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPad      uint32\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x8\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x18\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  BpfTimeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\tIfidx   uint16\n\tFlowid  uint16\n\tFlags   uint8\n\tDrops   uint8\n}\n\ntype BpfTimeval struct {\n\tSec  uint32\n\tUsec uint32\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\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x1\n\tAT_SYMLINK_NOFOLLOW = 0x2\n\tAT_SYMLINK_FOLLOW   = 0x4\n\tAT_REMOVEDIR        = 0x8\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sigset_t uint32\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x158\n\ntype Uvmexp struct {\n\tPagesize           int32\n\tPagemask           int32\n\tPageshift          int32\n\tNpages             int32\n\tFree               int32\n\tActive             int32\n\tInactive           int32\n\tPaging             int32\n\tWired              int32\n\tZeropages          int32\n\tReserve_pagedaemon int32\n\tReserve_kernel     int32\n\tUnused01           int32\n\tVnodepages         int32\n\tVtextpages         int32\n\tFreemin            int32\n\tFreetarg           int32\n\tInactarg           int32\n\tWiredmax           int32\n\tAnonmin            int32\n\tVtextmin           int32\n\tVnodemin           int32\n\tAnonminpct         int32\n\tVtextminpct        int32\n\tVnodeminpct        int32\n\tNswapdev           int32\n\tSwpages            int32\n\tSwpginuse          int32\n\tSwpgonly           int32\n\tNswget             int32\n\tNanon              int32\n\tUnused05           int32\n\tUnused06           int32\n\tFaults             int32\n\tTraps              int32\n\tIntrs              int32\n\tSwtch              int32\n\tSofts              int32\n\tSyscalls           int32\n\tPageins            int32\n\tUnused07           int32\n\tUnused08           int32\n\tPgswapin           int32\n\tPgswapout          int32\n\tForks              int32\n\tForks_ppwait       int32\n\tForks_sharevm      int32\n\tPga_zerohit        int32\n\tPga_zeromiss       int32\n\tUnused09           int32\n\tFltnoram           int32\n\tFltnoanon          int32\n\tFltnoamap          int32\n\tFltpgwait          int32\n\tFltpgrele          int32\n\tFltrelck           int32\n\tFltrelckok         int32\n\tFltanget           int32\n\tFltanretry         int32\n\tFltamcopy          int32\n\tFltnamap           int32\n\tFltnomap           int32\n\tFltlget            int32\n\tFltget             int32\n\tFlt_anon           int32\n\tFlt_acow           int32\n\tFlt_obj            int32\n\tFlt_prcopy         int32\n\tFlt_przero         int32\n\tPdwoke             int32\n\tPdrevs             int32\n\tPdswout            int32\n\tPdfreed            int32\n\tPdscans            int32\n\tPdanscan           int32\n\tPdobscan           int32\n\tPdreact            int32\n\tPdbusy             int32\n\tPdpageouts         int32\n\tPdpending          int32\n\tPddeact            int32\n\tUnused11           int32\n\tUnused12           int32\n\tUnused13           int32\n\tFpswtch            int32\n\tKmapent            int32\n}\n\nconst SizeofClockinfo = 0x10\n\ntype Clockinfo struct {\n\tHz     int32\n\tTick   int32\n\tStathz int32\n\tProfhz int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go",
    "content": "// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && openbsd\n\npackage unix\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 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 _Gid_t uint32\n\ntype Stat_t struct {\n\tMode    uint32\n\tDev     int32\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\t_       Timespec\n}\n\ntype Statfs_t struct {\n\tF_flags       uint32\n\tF_bsize       uint32\n\tF_iosize      uint32\n\tF_blocks      uint64\n\tF_bfree       uint64\n\tF_bavail      int64\n\tF_files       uint64\n\tF_ffree       uint64\n\tF_favail      int64\n\tF_syncwrites  uint64\n\tF_syncreads   uint64\n\tF_asyncwrites uint64\n\tF_asyncreads  uint64\n\tF_fsid        Fsid\n\tF_namemax     uint32\n\tF_owner       uint32\n\tF_ctime       uint64\n\tF_fstypename  [16]byte\n\tF_mntonname   [90]byte\n\tF_mntfromname [90]byte\n\tF_mntfromspec [90]byte\n\t_             [2]byte\n\tMount_info    [160]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tNamlen uint8\n\t_      [4]uint8\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x20\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x10\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0xa8\n\tSizeofIfData           = 0x90\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x1a\n\tSizeofRtMsghdr         = 0x60\n\tSizeofRtMetrics        = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tXflags  int32\n\tData    IfData\n}\n\ntype IfData struct {\n\tType         uint8\n\tAddrlen      uint8\n\tHdrlen       uint8\n\tLink_state   uint8\n\tMtu          uint32\n\tMetric       uint32\n\tRdomain      uint32\n\tBaudrate     uint64\n\tIpackets     uint64\n\tIerrors      uint64\n\tOpackets     uint64\n\tOerrors      uint64\n\tCollisions   uint64\n\tIbytes       uint64\n\tObytes       uint64\n\tImcasts      uint64\n\tOmcasts      uint64\n\tIqdrops      uint64\n\tOqdrops      uint64\n\tNoproto      uint64\n\tCapabilities uint32\n\tLastchange   Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tMetric  int32\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tWhat    uint16\n\tName    [16]int8\n}\n\ntype RtMsghdr struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tHdrlen   uint16\n\tIndex    uint16\n\tTableid  uint16\n\tPriority uint8\n\tMpls     uint8\n\tAddrs    int32\n\tFlags    int32\n\tFmask    int32\n\tPid      int32\n\tSeq      int32\n\tErrno    int32\n\tInits    uint32\n\tRmx      RtMetrics\n}\n\ntype RtMetrics struct {\n\tPksent   uint64\n\tExpire   int64\n\tLocks    uint32\n\tMtu      uint32\n\tRefcnt   uint32\n\tHopcount uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPad      uint32\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x18\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  BpfTimeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\tIfidx   uint16\n\tFlowid  uint16\n\tFlags   uint8\n\tDrops   uint8\n}\n\ntype BpfTimeval struct {\n\tSec  uint32\n\tUsec uint32\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\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x1\n\tAT_SYMLINK_NOFOLLOW = 0x2\n\tAT_SYMLINK_FOLLOW   = 0x4\n\tAT_REMOVEDIR        = 0x8\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sigset_t uint32\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x158\n\ntype Uvmexp struct {\n\tPagesize           int32\n\tPagemask           int32\n\tPageshift          int32\n\tNpages             int32\n\tFree               int32\n\tActive             int32\n\tInactive           int32\n\tPaging             int32\n\tWired              int32\n\tZeropages          int32\n\tReserve_pagedaemon int32\n\tReserve_kernel     int32\n\tUnused01           int32\n\tVnodepages         int32\n\tVtextpages         int32\n\tFreemin            int32\n\tFreetarg           int32\n\tInactarg           int32\n\tWiredmax           int32\n\tAnonmin            int32\n\tVtextmin           int32\n\tVnodemin           int32\n\tAnonminpct         int32\n\tVtextminpct        int32\n\tVnodeminpct        int32\n\tNswapdev           int32\n\tSwpages            int32\n\tSwpginuse          int32\n\tSwpgonly           int32\n\tNswget             int32\n\tNanon              int32\n\tUnused05           int32\n\tUnused06           int32\n\tFaults             int32\n\tTraps              int32\n\tIntrs              int32\n\tSwtch              int32\n\tSofts              int32\n\tSyscalls           int32\n\tPageins            int32\n\tUnused07           int32\n\tUnused08           int32\n\tPgswapin           int32\n\tPgswapout          int32\n\tForks              int32\n\tForks_ppwait       int32\n\tForks_sharevm      int32\n\tPga_zerohit        int32\n\tPga_zeromiss       int32\n\tUnused09           int32\n\tFltnoram           int32\n\tFltnoanon          int32\n\tFltnoamap          int32\n\tFltpgwait          int32\n\tFltpgrele          int32\n\tFltrelck           int32\n\tFltrelckok         int32\n\tFltanget           int32\n\tFltanretry         int32\n\tFltamcopy          int32\n\tFltnamap           int32\n\tFltnomap           int32\n\tFltlget            int32\n\tFltget             int32\n\tFlt_anon           int32\n\tFlt_acow           int32\n\tFlt_obj            int32\n\tFlt_prcopy         int32\n\tFlt_przero         int32\n\tPdwoke             int32\n\tPdrevs             int32\n\tPdswout            int32\n\tPdfreed            int32\n\tPdscans            int32\n\tPdanscan           int32\n\tPdobscan           int32\n\tPdreact            int32\n\tPdbusy             int32\n\tPdpageouts         int32\n\tPdpending          int32\n\tPddeact            int32\n\tUnused11           int32\n\tUnused12           int32\n\tUnused13           int32\n\tFpswtch            int32\n\tKmapent            int32\n}\n\nconst SizeofClockinfo = 0x10\n\ntype Clockinfo struct {\n\tHz     int32\n\tTick   int32\n\tStathz int32\n\tProfhz int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go",
    "content": "// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips64 && openbsd\n\npackage unix\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 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 _Gid_t uint32\n\ntype Stat_t struct {\n\tMode    uint32\n\tDev     int32\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\t_       Timespec\n}\n\ntype Statfs_t struct {\n\tF_flags       uint32\n\tF_bsize       uint32\n\tF_iosize      uint32\n\tF_blocks      uint64\n\tF_bfree       uint64\n\tF_bavail      int64\n\tF_files       uint64\n\tF_ffree       uint64\n\tF_favail      int64\n\tF_syncwrites  uint64\n\tF_syncreads   uint64\n\tF_asyncwrites uint64\n\tF_asyncreads  uint64\n\tF_fsid        Fsid\n\tF_namemax     uint32\n\tF_owner       uint32\n\tF_ctime       uint64\n\tF_fstypename  [16]byte\n\tF_mntonname   [90]byte\n\tF_mntfromname [90]byte\n\tF_mntfromspec [90]byte\n\t_             [2]byte\n\tMount_info    [160]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tNamlen uint8\n\t_      [4]uint8\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x20\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x10\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0xa8\n\tSizeofIfData           = 0x90\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x1a\n\tSizeofRtMsghdr         = 0x60\n\tSizeofRtMetrics        = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tXflags  int32\n\tData    IfData\n}\n\ntype IfData struct {\n\tType         uint8\n\tAddrlen      uint8\n\tHdrlen       uint8\n\tLink_state   uint8\n\tMtu          uint32\n\tMetric       uint32\n\tRdomain      uint32\n\tBaudrate     uint64\n\tIpackets     uint64\n\tIerrors      uint64\n\tOpackets     uint64\n\tOerrors      uint64\n\tCollisions   uint64\n\tIbytes       uint64\n\tObytes       uint64\n\tImcasts      uint64\n\tOmcasts      uint64\n\tIqdrops      uint64\n\tOqdrops      uint64\n\tNoproto      uint64\n\tCapabilities uint32\n\tLastchange   Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tMetric  int32\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tWhat    uint16\n\tName    [16]int8\n}\n\ntype RtMsghdr struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tHdrlen   uint16\n\tIndex    uint16\n\tTableid  uint16\n\tPriority uint8\n\tMpls     uint8\n\tAddrs    int32\n\tFlags    int32\n\tFmask    int32\n\tPid      int32\n\tSeq      int32\n\tErrno    int32\n\tInits    uint32\n\tRmx      RtMetrics\n}\n\ntype RtMetrics struct {\n\tPksent   uint64\n\tExpire   int64\n\tLocks    uint32\n\tMtu      uint32\n\tRefcnt   uint32\n\tHopcount uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPad      uint32\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x18\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  BpfTimeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\tIfidx   uint16\n\tFlowid  uint16\n\tFlags   uint8\n\tDrops   uint8\n}\n\ntype BpfTimeval struct {\n\tSec  uint32\n\tUsec uint32\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\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x1\n\tAT_SYMLINK_NOFOLLOW = 0x2\n\tAT_SYMLINK_FOLLOW   = 0x4\n\tAT_REMOVEDIR        = 0x8\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sigset_t uint32\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x158\n\ntype Uvmexp struct {\n\tPagesize           int32\n\tPagemask           int32\n\tPageshift          int32\n\tNpages             int32\n\tFree               int32\n\tActive             int32\n\tInactive           int32\n\tPaging             int32\n\tWired              int32\n\tZeropages          int32\n\tReserve_pagedaemon int32\n\tReserve_kernel     int32\n\tUnused01           int32\n\tVnodepages         int32\n\tVtextpages         int32\n\tFreemin            int32\n\tFreetarg           int32\n\tInactarg           int32\n\tWiredmax           int32\n\tAnonmin            int32\n\tVtextmin           int32\n\tVnodemin           int32\n\tAnonminpct         int32\n\tVtextminpct        int32\n\tVnodeminpct        int32\n\tNswapdev           int32\n\tSwpages            int32\n\tSwpginuse          int32\n\tSwpgonly           int32\n\tNswget             int32\n\tNanon              int32\n\tUnused05           int32\n\tUnused06           int32\n\tFaults             int32\n\tTraps              int32\n\tIntrs              int32\n\tSwtch              int32\n\tSofts              int32\n\tSyscalls           int32\n\tPageins            int32\n\tUnused07           int32\n\tUnused08           int32\n\tPgswapin           int32\n\tPgswapout          int32\n\tForks              int32\n\tForks_ppwait       int32\n\tForks_sharevm      int32\n\tPga_zerohit        int32\n\tPga_zeromiss       int32\n\tUnused09           int32\n\tFltnoram           int32\n\tFltnoanon          int32\n\tFltnoamap          int32\n\tFltpgwait          int32\n\tFltpgrele          int32\n\tFltrelck           int32\n\tFltrelckok         int32\n\tFltanget           int32\n\tFltanretry         int32\n\tFltamcopy          int32\n\tFltnamap           int32\n\tFltnomap           int32\n\tFltlget            int32\n\tFltget             int32\n\tFlt_anon           int32\n\tFlt_acow           int32\n\tFlt_obj            int32\n\tFlt_prcopy         int32\n\tFlt_przero         int32\n\tPdwoke             int32\n\tPdrevs             int32\n\tPdswout            int32\n\tPdfreed            int32\n\tPdscans            int32\n\tPdanscan           int32\n\tPdobscan           int32\n\tPdreact            int32\n\tPdbusy             int32\n\tPdpageouts         int32\n\tPdpending          int32\n\tPddeact            int32\n\tUnused11           int32\n\tUnused12           int32\n\tUnused13           int32\n\tFpswtch            int32\n\tKmapent            int32\n}\n\nconst SizeofClockinfo = 0x10\n\ntype Clockinfo struct {\n\tHz     int32\n\tTick   int32\n\tStathz int32\n\tProfhz int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_openbsd_ppc64.go",
    "content": "// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64 && openbsd\n\npackage unix\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 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 _Gid_t uint32\n\ntype Stat_t struct {\n\tMode    uint32\n\tDev     int32\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\t_       Timespec\n}\n\ntype Statfs_t struct {\n\tF_flags       uint32\n\tF_bsize       uint32\n\tF_iosize      uint32\n\tF_blocks      uint64\n\tF_bfree       uint64\n\tF_bavail      int64\n\tF_files       uint64\n\tF_ffree       uint64\n\tF_favail      int64\n\tF_syncwrites  uint64\n\tF_syncreads   uint64\n\tF_asyncwrites uint64\n\tF_asyncreads  uint64\n\tF_fsid        Fsid\n\tF_namemax     uint32\n\tF_owner       uint32\n\tF_ctime       uint64\n\tF_fstypename  [16]byte\n\tF_mntonname   [90]byte\n\tF_mntfromname [90]byte\n\tF_mntfromspec [90]byte\n\t_             [2]byte\n\tMount_info    [160]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tNamlen uint8\n\t_      [4]uint8\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x20\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x10\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0xa8\n\tSizeofIfData           = 0x90\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x1a\n\tSizeofRtMsghdr         = 0x60\n\tSizeofRtMetrics        = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tXflags  int32\n\tData    IfData\n}\n\ntype IfData struct {\n\tType         uint8\n\tAddrlen      uint8\n\tHdrlen       uint8\n\tLink_state   uint8\n\tMtu          uint32\n\tMetric       uint32\n\tRdomain      uint32\n\tBaudrate     uint64\n\tIpackets     uint64\n\tIerrors      uint64\n\tOpackets     uint64\n\tOerrors      uint64\n\tCollisions   uint64\n\tIbytes       uint64\n\tObytes       uint64\n\tImcasts      uint64\n\tOmcasts      uint64\n\tIqdrops      uint64\n\tOqdrops      uint64\n\tNoproto      uint64\n\tCapabilities uint32\n\tLastchange   Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tMetric  int32\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tWhat    uint16\n\tName    [16]int8\n}\n\ntype RtMsghdr struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tHdrlen   uint16\n\tIndex    uint16\n\tTableid  uint16\n\tPriority uint8\n\tMpls     uint8\n\tAddrs    int32\n\tFlags    int32\n\tFmask    int32\n\tPid      int32\n\tSeq      int32\n\tErrno    int32\n\tInits    uint32\n\tRmx      RtMetrics\n}\n\ntype RtMetrics struct {\n\tPksent   uint64\n\tExpire   int64\n\tLocks    uint32\n\tMtu      uint32\n\tRefcnt   uint32\n\tHopcount uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPad      uint32\n}\n\ntype Mclpool struct{}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x18\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  BpfTimeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\tIfidx   uint16\n\tFlowid  uint16\n\tFlags   uint8\n\tDrops   uint8\n}\n\ntype BpfTimeval struct {\n\tSec  uint32\n\tUsec uint32\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\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x1\n\tAT_SYMLINK_NOFOLLOW = 0x2\n\tAT_SYMLINK_FOLLOW   = 0x4\n\tAT_REMOVEDIR        = 0x8\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sigset_t uint32\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x158\n\ntype Uvmexp struct {\n\tPagesize           int32\n\tPagemask           int32\n\tPageshift          int32\n\tNpages             int32\n\tFree               int32\n\tActive             int32\n\tInactive           int32\n\tPaging             int32\n\tWired              int32\n\tZeropages          int32\n\tReserve_pagedaemon int32\n\tReserve_kernel     int32\n\tUnused01           int32\n\tVnodepages         int32\n\tVtextpages         int32\n\tFreemin            int32\n\tFreetarg           int32\n\tInactarg           int32\n\tWiredmax           int32\n\tAnonmin            int32\n\tVtextmin           int32\n\tVnodemin           int32\n\tAnonminpct         int32\n\tVtextminpct        int32\n\tVnodeminpct        int32\n\tNswapdev           int32\n\tSwpages            int32\n\tSwpginuse          int32\n\tSwpgonly           int32\n\tNswget             int32\n\tNanon              int32\n\tUnused05           int32\n\tUnused06           int32\n\tFaults             int32\n\tTraps              int32\n\tIntrs              int32\n\tSwtch              int32\n\tSofts              int32\n\tSyscalls           int32\n\tPageins            int32\n\tUnused07           int32\n\tUnused08           int32\n\tPgswapin           int32\n\tPgswapout          int32\n\tForks              int32\n\tForks_ppwait       int32\n\tForks_sharevm      int32\n\tPga_zerohit        int32\n\tPga_zeromiss       int32\n\tUnused09           int32\n\tFltnoram           int32\n\tFltnoanon          int32\n\tFltnoamap          int32\n\tFltpgwait          int32\n\tFltpgrele          int32\n\tFltrelck           int32\n\tFltrelckok         int32\n\tFltanget           int32\n\tFltanretry         int32\n\tFltamcopy          int32\n\tFltnamap           int32\n\tFltnomap           int32\n\tFltlget            int32\n\tFltget             int32\n\tFlt_anon           int32\n\tFlt_acow           int32\n\tFlt_obj            int32\n\tFlt_prcopy         int32\n\tFlt_przero         int32\n\tPdwoke             int32\n\tPdrevs             int32\n\tPdswout            int32\n\tPdfreed            int32\n\tPdscans            int32\n\tPdanscan           int32\n\tPdobscan           int32\n\tPdreact            int32\n\tPdbusy             int32\n\tPdpageouts         int32\n\tPdpending          int32\n\tPddeact            int32\n\tUnused11           int32\n\tUnused12           int32\n\tUnused13           int32\n\tFpswtch            int32\n\tKmapent            int32\n}\n\nconst SizeofClockinfo = 0x10\n\ntype Clockinfo struct {\n\tHz     int32\n\tTick   int32\n\tStathz int32\n\tProfhz int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_openbsd_riscv64.go",
    "content": "// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build riscv64 && openbsd\n\npackage unix\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 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 _Gid_t uint32\n\ntype Stat_t struct {\n\tMode    uint32\n\tDev     int32\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\t_       Timespec\n}\n\ntype Statfs_t struct {\n\tF_flags       uint32\n\tF_bsize       uint32\n\tF_iosize      uint32\n\tF_blocks      uint64\n\tF_bfree       uint64\n\tF_bavail      int64\n\tF_files       uint64\n\tF_ffree       uint64\n\tF_favail      int64\n\tF_syncwrites  uint64\n\tF_syncreads   uint64\n\tF_asyncwrites uint64\n\tF_asyncreads  uint64\n\tF_fsid        Fsid\n\tF_namemax     uint32\n\tF_owner       uint32\n\tF_ctime       uint64\n\tF_fstypename  [16]byte\n\tF_mntonname   [90]byte\n\tF_mntfromname [90]byte\n\tF_mntfromspec [90]byte\n\t_             [2]byte\n\tMount_info    [160]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tNamlen uint8\n\t_      [4]uint8\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink 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}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x20\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x10\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0xa8\n\tSizeofIfData           = 0x90\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x1a\n\tSizeofRtMsghdr         = 0x60\n\tSizeofRtMetrics        = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tXflags  int32\n\tData    IfData\n}\n\ntype IfData struct {\n\tType         uint8\n\tAddrlen      uint8\n\tHdrlen       uint8\n\tLink_state   uint8\n\tMtu          uint32\n\tMetric       uint32\n\tRdomain      uint32\n\tBaudrate     uint64\n\tIpackets     uint64\n\tIerrors      uint64\n\tOpackets     uint64\n\tOerrors      uint64\n\tCollisions   uint64\n\tIbytes       uint64\n\tObytes       uint64\n\tImcasts      uint64\n\tOmcasts      uint64\n\tIqdrops      uint64\n\tOqdrops      uint64\n\tNoproto      uint64\n\tCapabilities uint32\n\tLastchange   Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tMetric  int32\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tWhat    uint16\n\tName    [16]int8\n}\n\ntype RtMsghdr struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tHdrlen   uint16\n\tIndex    uint16\n\tTableid  uint16\n\tPriority uint8\n\tMpls     uint8\n\tAddrs    int32\n\tFlags    int32\n\tFmask    int32\n\tPid      int32\n\tSeq      int32\n\tErrno    int32\n\tInits    uint32\n\tRmx      RtMetrics\n}\n\ntype RtMetrics struct {\n\tPksent   uint64\n\tExpire   int64\n\tLocks    uint32\n\tMtu      uint32\n\tRefcnt   uint32\n\tHopcount uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPad      uint32\n}\n\ntype Mclpool struct{}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x18\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  BpfTimeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\tIfidx   uint16\n\tFlowid  uint16\n\tFlags   uint8\n\tDrops   uint8\n}\n\ntype BpfTimeval struct {\n\tSec  uint32\n\tUsec uint32\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\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_EACCESS          = 0x1\n\tAT_SYMLINK_NOFOLLOW = 0x2\n\tAT_SYMLINK_FOLLOW   = 0x4\n\tAT_REMOVEDIR        = 0x8\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sigset_t uint32\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x158\n\ntype Uvmexp struct {\n\tPagesize           int32\n\tPagemask           int32\n\tPageshift          int32\n\tNpages             int32\n\tFree               int32\n\tActive             int32\n\tInactive           int32\n\tPaging             int32\n\tWired              int32\n\tZeropages          int32\n\tReserve_pagedaemon int32\n\tReserve_kernel     int32\n\tUnused01           int32\n\tVnodepages         int32\n\tVtextpages         int32\n\tFreemin            int32\n\tFreetarg           int32\n\tInactarg           int32\n\tWiredmax           int32\n\tAnonmin            int32\n\tVtextmin           int32\n\tVnodemin           int32\n\tAnonminpct         int32\n\tVtextminpct        int32\n\tVnodeminpct        int32\n\tNswapdev           int32\n\tSwpages            int32\n\tSwpginuse          int32\n\tSwpgonly           int32\n\tNswget             int32\n\tNanon              int32\n\tUnused05           int32\n\tUnused06           int32\n\tFaults             int32\n\tTraps              int32\n\tIntrs              int32\n\tSwtch              int32\n\tSofts              int32\n\tSyscalls           int32\n\tPageins            int32\n\tUnused07           int32\n\tUnused08           int32\n\tPgswapin           int32\n\tPgswapout          int32\n\tForks              int32\n\tForks_ppwait       int32\n\tForks_sharevm      int32\n\tPga_zerohit        int32\n\tPga_zeromiss       int32\n\tUnused09           int32\n\tFltnoram           int32\n\tFltnoanon          int32\n\tFltnoamap          int32\n\tFltpgwait          int32\n\tFltpgrele          int32\n\tFltrelck           int32\n\tFltrelckok         int32\n\tFltanget           int32\n\tFltanretry         int32\n\tFltamcopy          int32\n\tFltnamap           int32\n\tFltnomap           int32\n\tFltlget            int32\n\tFltget             int32\n\tFlt_anon           int32\n\tFlt_acow           int32\n\tFlt_obj            int32\n\tFlt_prcopy         int32\n\tFlt_przero         int32\n\tPdwoke             int32\n\tPdrevs             int32\n\tPdswout            int32\n\tPdfreed            int32\n\tPdscans            int32\n\tPdanscan           int32\n\tPdobscan           int32\n\tPdreact            int32\n\tPdbusy             int32\n\tPdpageouts         int32\n\tPdpending          int32\n\tPddeact            int32\n\tUnused11           int32\n\tUnused12           int32\n\tUnused13           int32\n\tFpswtch            int32\n\tKmapent            int32\n}\n\nconst SizeofClockinfo = 0x10\n\ntype Clockinfo struct {\n\tHz     int32\n\tTick   int32\n\tStathz int32\n\tProfhz int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go",
    "content": "// cgo -godefs types_solaris.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && solaris\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x400\n\tMaxHostNameLen = 0x100\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 Timeval32 struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime 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 _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\tSize    int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBlksize int32\n\tBlocks  int64\n\tFstype  [16]int8\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tSysid  int32\n\tPid    int32\n\tPad    [4]int64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tName   [1]int8\n\t_      [5]byte\n}\n\ntype _Fsblkcnt_t uint64\n\ntype Statvfs_t struct {\n\tBsize    uint64\n\tFrsize   uint64\n\tBlocks   uint64\n\tBfree    uint64\n\tBavail   uint64\n\tFiles    uint64\n\tFfree    uint64\n\tFavail   uint64\n\tFsid     uint64\n\tBasetype [16]int8\n\tFlag     uint64\n\tNamemax  uint64\n\tFstr     [32]int8\n}\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n\t_        uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tFamily uint16\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [244]int8\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [236]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName         *byte\n\tNamelen      uint32\n\tIov          *Iovec\n\tIovlen       int32\n\tAccrights    *int8\n\tAccrightslen int32\n\t_            [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  uint32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x20\n\tSizeofSockaddrAny      = 0xfc\n\tSizeofSockaddrUnix     = 0x6e\n\tSizeofSockaddrDatalink = 0xfc\n\tSizeofLinger           = 0x8\n\tSizeofIovec            = 0x10\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet4Pktinfo     = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x24\n\tSizeofICMPv6Filter     = 0x20\n)\n\ntype FdSet struct {\n\tBits [1024]int64\n}\n\ntype Utsname struct {\n\tSysname  [257]byte\n\tNodename [257]byte\n\tRelease  [257]byte\n\tVersion  [257]byte\n\tMachine  [257]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int64\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\nconst (\n\tAT_FDCWD            = 0xffd19553\n\tAT_SYMLINK_NOFOLLOW = 0x1000\n\tAT_SYMLINK_FOLLOW   = 0x2000\n\tAT_REMOVEDIR        = 0x1\n\tAT_EACCESS          = 0x4\n)\n\nconst (\n\tSizeofIfMsghdr  = 0x54\n\tSizeofIfData    = 0x44\n\tSizeofIfaMsghdr = 0x14\n\tSizeofRtMsghdr  = 0x4c\n\tSizeofRtMetrics = 0x28\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tData    IfData\n}\n\ntype IfData struct {\n\tType       uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint32\n\tIpackets   uint32\n\tIerrors    uint32\n\tOpackets   uint32\n\tOerrors    uint32\n\tCollisions uint32\n\tIbytes     uint32\n\tObytes     uint32\n\tImcasts    uint32\n\tOmcasts    uint32\n\tIqdrops    uint32\n\tNoproto    uint32\n\tLastchange Timeval32\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tMetric  int32\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tUse     int32\n\tInits   uint32\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint32\n\tMtu      uint32\n\tHopcount uint32\n\tExpire   uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPksent   uint32\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x80\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint64\n\tDrop uint64\n\tCapt uint64\n\t_    [13]uint64\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfTimeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype BpfHdr struct {\n\tTstamp  BpfTimeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [2]byte\n}\n\ntype Termios struct {\n\tIflag uint32\n\tOflag uint32\n\tCflag uint32\n\tLflag uint32\n\tCc    [19]uint8\n\t_     [1]byte\n}\n\ntype Termio struct {\n\tIflag uint16\n\tOflag uint16\n\tCflag uint16\n\tLflag uint16\n\tLine  int8\n\tCc    [8]uint8\n\t_     [1]byte\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype fileObj struct {\n\tAtim Timespec\n\tMtim Timespec\n\tCtim Timespec\n\tPad  [3]uint64\n\tName *int8\n}\n\ntype portEvent struct {\n\tEvents int32\n\tSource uint16\n\tPad    uint16\n\tObject uint64\n\tUser   *byte\n}\n\nconst (\n\tPORT_SOURCE_AIO    = 0x1\n\tPORT_SOURCE_TIMER  = 0x2\n\tPORT_SOURCE_USER   = 0x3\n\tPORT_SOURCE_FD     = 0x4\n\tPORT_SOURCE_ALERT  = 0x5\n\tPORT_SOURCE_MQ     = 0x6\n\tPORT_SOURCE_FILE   = 0x7\n\tPORT_ALERT_SET     = 0x1\n\tPORT_ALERT_UPDATE  = 0x2\n\tPORT_ALERT_INVALID = 0x3\n\tFILE_ACCESS        = 0x1\n\tFILE_MODIFIED      = 0x2\n\tFILE_ATTRIB        = 0x4\n\tFILE_TRUNC         = 0x100000\n\tFILE_NOFOLLOW      = 0x10000000\n\tFILE_DELETE        = 0x10\n\tFILE_RENAME_TO     = 0x20\n\tFILE_RENAME_FROM   = 0x40\n\tUNMOUNTED          = 0x20000000\n\tMOUNTEDOVER        = 0x40000000\n\tFILE_EXCEPTION     = 0x60000070\n)\n\nconst (\n\tTUNNEWPPA = 0x540001\n\tTUNSETPPA = 0x540002\n\n\tI_STR     = 0x5308\n\tI_POP     = 0x5303\n\tI_PUSH    = 0x5302\n\tI_LINK    = 0x530c\n\tI_UNLINK  = 0x530d\n\tI_PLINK   = 0x5316\n\tI_PUNLINK = 0x5317\n\n\tIF_UNITSEL = -0x7ffb8cca\n)\n\ntype strbuf struct {\n\tMaxlen int32\n\tLen    int32\n\tBuf    *int8\n}\n\ntype Strioctl struct {\n\tCmd    int32\n\tTimout int32\n\tLen    int32\n\tDp     *int8\n}\n\ntype Lifreq struct {\n\tName   [32]int8\n\tLifru1 [4]byte\n\tType   uint32\n\tLifru  [336]byte\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_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 ztypes_linux_s390x.go\n// TODO: auto-generate.\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\nconst (\n\tSizeofSockaddrAny   = 128\n\tSizeofCmsghdr       = 12\n\tSizeofIPMreq        = 8\n\tSizeofIPv6Mreq      = 20\n\tSizeofICMPv6Filter  = 32\n\tSizeofIPv6MTUInfo   = 32\n\tSizeofInet4Pktinfo  = 8\n\tSizeofInet6Pktinfo  = 20\n\tSizeofLinger        = 8\n\tSizeofSockaddrInet4 = 16\n\tSizeofSockaddrInet6 = 28\n\tSizeofTCPInfo       = 0x68\n\tSizeofUcred         = 12\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 timeval_zos struct { //correct (with padding and all)\n\tSec  int64\n\t_    [4]byte // pad\n\tUsec int32\n}\n\ntype Tms struct { //clock_t is 4-byte unsigned int in zos\n\tUtime  uint32\n\tStime  uint32\n\tCutime uint32\n\tCstime uint32\n}\n\ntype Time_t int64\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime int64\n}\n\ntype Utsname struct {\n\tSysname  [16]byte\n\tNodename [32]byte\n\tRelease  [8]byte\n\tVersion  [8]byte\n\tMachine  [16]byte\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [108]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]uint8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\t_    [112]uint8 // pad\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tIov        *Iovec\n\tControl    *byte\n\tFlags      int32\n\tNamelen    int32\n\tIovlen     int32\n\tControllen int32\n}\n\ntype Cmsghdr struct {\n\tLen   int32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tAddr    [4]byte /* in_addr */\n\tIfindex uint32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype TCPInfo struct {\n\tState          uint8\n\tCa_state       uint8\n\tRetransmits    uint8\n\tProbes         uint8\n\tBackoff        uint8\n\tOptions        uint8\n\tRto            uint32\n\tAto            uint32\n\tSnd_mss        uint32\n\tRcv_mss        uint32\n\tUnacked        uint32\n\tSacked         uint32\n\tLost           uint32\n\tRetrans        uint32\n\tFackets        uint32\n\tLast_data_sent uint32\n\tLast_ack_sent  uint32\n\tLast_data_recv uint32\n\tLast_ack_recv  uint32\n\tPmtu           uint32\n\tRcv_ssthresh   uint32\n\tRtt            uint32\n\tRttvar         uint32\n\tSnd_ssthresh   uint32\n\tSnd_cwnd       uint32\n\tAdvmss         uint32\n\tReordering     uint32\n\tRcv_rtt        uint32\n\tRcv_space      uint32\n\tTotal_retrans  uint32\n}\n\ntype _Gid_t uint32\n\ntype rusage_zos struct {\n\tUtime timeval_zos\n\tStime timeval_zos\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\n// { int, short, short } in poll.h\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\ntype Stat_t struct { //Linux Definition\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint32\n\tUid     uint32\n\tGid     uint32\n\t_       int32\n\tRdev    uint64\n\tSize    int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBlksize int64\n\tBlocks  int64\n\t_       [3]int64\n}\n\ntype Stat_LE_t struct {\n\t_            [4]byte // eye catcher\n\tLength       uint16\n\tVersion      uint16\n\tMode         int32\n\tIno          uint32\n\tDev          uint32\n\tNlink        int32\n\tUid          int32\n\tGid          int32\n\tSize         int64\n\tAtim31       [4]byte\n\tMtim31       [4]byte\n\tCtim31       [4]byte\n\tRdev         uint32\n\tAuditoraudit uint32\n\tUseraudit    uint32\n\tBlksize      int32\n\tCreatim31    [4]byte\n\tAuditID      [16]byte\n\t_            [4]byte // rsrvd1\n\tFile_tag     struct {\n\t\tCcsid   uint16\n\t\tTxtflag uint16 // aggregating Txflag:1 deferred:1 rsvflags:14\n\t}\n\tCharsetID [8]byte\n\tBlocks    int64\n\tGenvalue  uint32\n\tReftim31  [4]byte\n\tFid       [8]byte\n\tFilefmt   byte\n\tFspflag2  byte\n\t_         [2]byte // rsrvd2\n\tCtimemsec int32\n\tSeclabel  [8]byte\n\t_         [4]byte // rsrvd3\n\t_         [4]byte // rsrvd4\n\tAtim      Time_t\n\tMtim      Time_t\n\tCtim      Time_t\n\tCreatim   Time_t\n\tReftim    Time_t\n\t_         [24]byte // rsrvd5\n}\n\ntype Statvfs_t struct {\n\tID          [4]byte\n\tLen         int32\n\tBsize       uint64\n\tBlocks      uint64\n\tUsedspace   uint64\n\tBavail      uint64\n\tFlag        uint64\n\tMaxfilesize int64\n\t_           [16]byte\n\tFrsize      uint64\n\tBfree       uint64\n\tFiles       uint32\n\tFfree       uint32\n\tFavail      uint32\n\tNamemax31   uint32\n\tInvarsec    uint32\n\t_           [4]byte\n\tFsid        uint64\n\tNamemax     uint64\n}\n\ntype Statfs_t struct {\n\tType    uint64\n\tBsize   uint64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint32\n\tFfree   uint32\n\tFsid    uint64\n\tNamelen uint64\n\tFrsize  uint64\n\tFlags   uint64\n\t_       [4]uint64\n}\n\ntype direntLE struct {\n\tReclen uint16\n\tNamlen uint16\n\tIno    uint32\n\tExtra  uintptr\n\tName   [256]byte\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]uint8\n\t_      [5]byte\n}\n\ntype FdSet struct {\n\tBits [64]int32\n}\n\n// This struct is packed on z/OS so it can't be used directly.\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n}\n\ntype F_cnvrt struct {\n\tCvtcmd int32\n\tPccsid int16\n\tFccsid int16\n}\n\ntype Termios struct {\n\tCflag uint32\n\tIflag uint32\n\tLflag uint32\n\tOflag uint32\n\tCc    [11]uint8\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype W_Mnth struct {\n\tHid   [4]byte\n\tSize  int32\n\tCur1  int32 //32bit pointer\n\tCur2  int32 //^\n\tDevno uint32\n\t_     [4]byte\n}\n\ntype W_Mntent struct {\n\tFstype       uint32\n\tMode         uint32\n\tDev          uint32\n\tParentdev    uint32\n\tRootino      uint32\n\tStatus       byte\n\tDdname       [9]byte\n\tFstname      [9]byte\n\tFsname       [45]byte\n\tPathlen      uint32\n\tMountpoint   [1024]byte\n\tJobname      [8]byte\n\tPID          int32\n\tParmoffset   int32\n\tParmlen      int16\n\tOwner        [8]byte\n\tQuiesceowner [8]byte\n\t_            [38]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\t_      int32\n\tFd     int32\n\tPad    int32\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n\tName   string\n}\n\nconst (\n\tSizeofInotifyEvent = 0x10\n)\n\ntype ConsMsg2 struct {\n\tCm2Format       uint16\n\tCm2R1           uint16\n\tCm2Msglength    uint32\n\tCm2Msg          *byte\n\tCm2R2           [4]byte\n\tCm2R3           [4]byte\n\tCm2Routcde      *uint32\n\tCm2Descr        *uint32\n\tCm2Msgflag      uint32\n\tCm2Token        uint32\n\tCm2Msgid        *uint32\n\tCm2R4           [4]byte\n\tCm2DomToken     uint32\n\tCm2DomMsgid     *uint32\n\tCm2ModCartptr   *byte\n\tCm2ModConsidptr *byte\n\tCm2MsgCart      [8]byte\n\tCm2MsgConsid    [4]byte\n\tCm2R5           [12]byte\n}\n\nconst (\n\tCC_modify        = 1\n\tCC_stop          = 2\n\tCONSOLE_FORMAT_2 = 2\n\tCONSOLE_FORMAT_3 = 3\n\tCONSOLE_HRDCPY   = 0x80000000\n)\n\ntype OpenHow struct {\n\tFlags   uint64\n\tMode    uint64\n\tResolve uint64\n}\n\nconst SizeofOpenHow = 0x18\n\nconst (\n\tRESOLVE_CACHED        = 0x20\n\tRESOLVE_BENEATH       = 0x8\n\tRESOLVE_IN_ROOT       = 0x10\n\tRESOLVE_NO_MAGICLINKS = 0x2\n\tRESOLVE_NO_SYMLINKS   = 0x4\n\tRESOLVE_NO_XDEV       = 0x1\n)\n\ntype Siginfo struct {\n\tSigno int32\n\tErrno int32\n\tCode  int32\n\tPid   int32\n\tUid   uint32\n\t_     [44]byte\n}\n\ntype SysvIpcPerm struct {\n\tUid  uint32\n\tGid  uint32\n\tCuid uint32\n\tCgid uint32\n\tMode int32\n}\n\ntype SysvShmDesc struct {\n\tPerm   SysvIpcPerm\n\t_      [4]byte\n\tLpid   int32\n\tCpid   int32\n\tNattch uint32\n\t_      [4]byte\n\t_      [4]byte\n\t_      [4]byte\n\t_      int32\n\t_      uint8\n\t_      uint8\n\t_      uint16\n\t_      *byte\n\tSegsz  uint64\n\tAtime  Time_t\n\tDtime  Time_t\n\tCtime  Time_t\n}\n\ntype SysvShmDesc64 struct {\n\tPerm   SysvIpcPerm\n\t_      [4]byte\n\tLpid   int32\n\tCpid   int32\n\tNattch uint32\n\t_      [4]byte\n\t_      [4]byte\n\t_      [4]byte\n\t_      int32\n\t_      byte\n\t_      uint8\n\t_      uint16\n\t_      *byte\n\tSegsz  uint64\n\tAtime  int64\n\tDtime  int64\n\tCtime  int64\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/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 windows\n\npackage windows\n\nimport \"syscall\"\n\ntype Errno = syscall.Errno\ntype SysProcAttr = syscall.SysProcAttr\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/dll_windows.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 windows\n\nimport (\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// We need to use LoadLibrary and GetProcAddress from the Go runtime, because\n// the these symbols are loaded by the system linker and are required to\n// dynamically load additional symbols. Note that in the Go runtime, these\n// return syscall.Handle and syscall.Errno, but these are the same, in fact,\n// as windows.Handle and windows.Errno, and we intend to keep these the same.\n\n//go:linkname syscall_loadlibrary syscall.loadlibrary\nfunc syscall_loadlibrary(filename *uint16) (handle Handle, err Errno)\n\n//go:linkname syscall_getprocaddress syscall.getprocaddress\nfunc syscall_getprocaddress(handle Handle, procname *uint8) (proc uintptr, err Errno)\n\n// DLLError describes reasons for DLL load failures.\ntype DLLError struct {\n\tErr     error\n\tObjName string\n\tMsg     string\n}\n\nfunc (e *DLLError) Error() string { return e.Msg }\n\nfunc (e *DLLError) Unwrap() error { return e.Err }\n\n// A DLL implements access to a single DLL.\ntype DLL struct {\n\tName   string\n\tHandle Handle\n}\n\n// LoadDLL loads DLL file into memory.\n//\n// Warning: using LoadDLL without an absolute path name is subject to\n// DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL],\n// or use [LoadLibraryEx] directly.\nfunc LoadDLL(name string) (dll *DLL, err error) {\n\tnamep, err := UTF16PtrFromString(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\th, e := syscall_loadlibrary(namep)\n\tif e != 0 {\n\t\treturn nil, &DLLError{\n\t\t\tErr:     e,\n\t\t\tObjName: name,\n\t\t\tMsg:     \"Failed to load \" + name + \": \" + e.Error(),\n\t\t}\n\t}\n\td := &DLL{\n\t\tName:   name,\n\t\tHandle: h,\n\t}\n\treturn d, nil\n}\n\n// MustLoadDLL is like LoadDLL but panics if load operation fails.\nfunc MustLoadDLL(name string) *DLL {\n\td, e := LoadDLL(name)\n\tif e != nil {\n\t\tpanic(e)\n\t}\n\treturn d\n}\n\n// FindProc searches DLL d for procedure named name and returns *Proc\n// if found. It returns an error if search fails.\nfunc (d *DLL) FindProc(name string) (proc *Proc, err error) {\n\tnamep, err := BytePtrFromString(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ta, e := syscall_getprocaddress(d.Handle, namep)\n\tif e != 0 {\n\t\treturn nil, &DLLError{\n\t\t\tErr:     e,\n\t\t\tObjName: name,\n\t\t\tMsg:     \"Failed to find \" + name + \" procedure in \" + d.Name + \": \" + e.Error(),\n\t\t}\n\t}\n\tp := &Proc{\n\t\tDll:  d,\n\t\tName: name,\n\t\taddr: a,\n\t}\n\treturn p, nil\n}\n\n// MustFindProc is like FindProc but panics if search fails.\nfunc (d *DLL) MustFindProc(name string) *Proc {\n\tp, e := d.FindProc(name)\n\tif e != nil {\n\t\tpanic(e)\n\t}\n\treturn p\n}\n\n// FindProcByOrdinal searches DLL d for procedure by ordinal and returns *Proc\n// if found. It returns an error if search fails.\nfunc (d *DLL) FindProcByOrdinal(ordinal uintptr) (proc *Proc, err error) {\n\ta, e := GetProcAddressByOrdinal(d.Handle, ordinal)\n\tname := \"#\" + itoa(int(ordinal))\n\tif e != nil {\n\t\treturn nil, &DLLError{\n\t\t\tErr:     e,\n\t\t\tObjName: name,\n\t\t\tMsg:     \"Failed to find \" + name + \" procedure in \" + d.Name + \": \" + e.Error(),\n\t\t}\n\t}\n\tp := &Proc{\n\t\tDll:  d,\n\t\tName: name,\n\t\taddr: a,\n\t}\n\treturn p, nil\n}\n\n// MustFindProcByOrdinal is like FindProcByOrdinal but panics if search fails.\nfunc (d *DLL) MustFindProcByOrdinal(ordinal uintptr) *Proc {\n\tp, e := d.FindProcByOrdinal(ordinal)\n\tif e != nil {\n\t\tpanic(e)\n\t}\n\treturn p\n}\n\n// Release unloads DLL d from memory.\nfunc (d *DLL) Release() (err error) {\n\treturn FreeLibrary(d.Handle)\n}\n\n// A Proc implements access to a procedure inside a DLL.\ntype Proc struct {\n\tDll  *DLL\n\tName string\n\taddr uintptr\n}\n\n// Addr returns the address of the procedure represented by p.\n// The return value can be passed to Syscall to run the procedure.\nfunc (p *Proc) Addr() uintptr {\n\treturn p.addr\n}\n\n//go:uintptrescapes\n\n// Call executes procedure p with arguments a. It will panic, if more than 15 arguments\n// are supplied.\n//\n// The returned error is always non-nil, constructed from the result of GetLastError.\n// Callers must inspect the primary return value to decide whether an error occurred\n// (according to the semantics of the specific function being called) before consulting\n// the error. The error will be guaranteed to contain windows.Errno.\nfunc (p *Proc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) {\n\tswitch len(a) {\n\tcase 0:\n\t\treturn syscall.Syscall(p.Addr(), uintptr(len(a)), 0, 0, 0)\n\tcase 1:\n\t\treturn syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], 0, 0)\n\tcase 2:\n\t\treturn syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], 0)\n\tcase 3:\n\t\treturn syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], a[2])\n\tcase 4:\n\t\treturn syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], 0, 0)\n\tcase 5:\n\t\treturn syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], 0)\n\tcase 6:\n\t\treturn syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5])\n\tcase 7:\n\t\treturn syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], 0, 0)\n\tcase 8:\n\t\treturn syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 0)\n\tcase 9:\n\t\treturn syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8])\n\tcase 10:\n\t\treturn syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], 0, 0)\n\tcase 11:\n\t\treturn syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], 0)\n\tcase 12:\n\t\treturn syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11])\n\tcase 13:\n\t\treturn syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], 0, 0)\n\tcase 14:\n\t\treturn syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], 0)\n\tcase 15:\n\t\treturn syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14])\n\tdefault:\n\t\tpanic(\"Call \" + p.Name + \" with too many arguments \" + itoa(len(a)) + \".\")\n\t}\n}\n\n// A LazyDLL implements access to a single DLL.\n// It will delay the load of the DLL until the first\n// call to its Handle method or to one of its\n// LazyProc's Addr method.\ntype LazyDLL struct {\n\tName string\n\n\t// System determines whether the DLL must be loaded from the\n\t// Windows System directory, bypassing the normal DLL search\n\t// path.\n\tSystem bool\n\n\tmu  sync.Mutex\n\tdll *DLL // non nil once DLL is loaded\n}\n\n// Load loads DLL file d.Name into memory. It returns an error if fails.\n// Load will not try to load DLL, if it is already loaded into memory.\nfunc (d *LazyDLL) Load() error {\n\t// Non-racy version of:\n\t// if d.dll != nil {\n\tif atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&d.dll))) != nil {\n\t\treturn nil\n\t}\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\tif d.dll != nil {\n\t\treturn nil\n\t}\n\n\t// kernel32.dll is special, since it's where LoadLibraryEx comes from.\n\t// The kernel already special-cases its name, so it's always\n\t// loaded from system32.\n\tvar dll *DLL\n\tvar err error\n\tif d.Name == \"kernel32.dll\" {\n\t\tdll, err = LoadDLL(d.Name)\n\t} else {\n\t\tdll, err = loadLibraryEx(d.Name, d.System)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Non-racy version of:\n\t// d.dll = dll\n\tatomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&d.dll)), unsafe.Pointer(dll))\n\treturn nil\n}\n\n// mustLoad is like Load but panics if search fails.\nfunc (d *LazyDLL) mustLoad() {\n\te := d.Load()\n\tif e != nil {\n\t\tpanic(e)\n\t}\n}\n\n// Handle returns d's module handle.\nfunc (d *LazyDLL) Handle() uintptr {\n\td.mustLoad()\n\treturn uintptr(d.dll.Handle)\n}\n\n// NewProc returns a LazyProc for accessing the named procedure in the DLL d.\nfunc (d *LazyDLL) NewProc(name string) *LazyProc {\n\treturn &LazyProc{l: d, Name: name}\n}\n\n// NewLazyDLL creates new LazyDLL associated with DLL file.\n//\n// Warning: using NewLazyDLL without an absolute path name is subject to\n// DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL].\nfunc NewLazyDLL(name string) *LazyDLL {\n\treturn &LazyDLL{Name: name}\n}\n\n// NewLazySystemDLL is like NewLazyDLL, but will only\n// search Windows System directory for the DLL if name is\n// a base name (like \"advapi32.dll\").\nfunc NewLazySystemDLL(name string) *LazyDLL {\n\treturn &LazyDLL{Name: name, System: true}\n}\n\n// A LazyProc implements access to a procedure inside a LazyDLL.\n// It delays the lookup until the Addr method is called.\ntype LazyProc struct {\n\tName string\n\n\tmu   sync.Mutex\n\tl    *LazyDLL\n\tproc *Proc\n}\n\n// Find searches DLL for procedure named p.Name. It returns\n// an error if search fails. Find will not search procedure,\n// if it is already found and loaded into memory.\nfunc (p *LazyProc) Find() error {\n\t// Non-racy version of:\n\t// if p.proc == nil {\n\tif atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&p.proc))) == nil {\n\t\tp.mu.Lock()\n\t\tdefer p.mu.Unlock()\n\t\tif p.proc == nil {\n\t\t\te := p.l.Load()\n\t\t\tif e != nil {\n\t\t\t\treturn e\n\t\t\t}\n\t\t\tproc, e := p.l.dll.FindProc(p.Name)\n\t\t\tif e != nil {\n\t\t\t\treturn e\n\t\t\t}\n\t\t\t// Non-racy version of:\n\t\t\t// p.proc = proc\n\t\t\tatomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&p.proc)), unsafe.Pointer(proc))\n\t\t}\n\t}\n\treturn nil\n}\n\n// mustFind is like Find but panics if search fails.\nfunc (p *LazyProc) mustFind() {\n\te := p.Find()\n\tif e != nil {\n\t\tpanic(e)\n\t}\n}\n\n// Addr returns the address of the procedure represented by p.\n// The return value can be passed to Syscall to run the procedure.\n// It will panic if the procedure cannot be found.\nfunc (p *LazyProc) Addr() uintptr {\n\tp.mustFind()\n\treturn p.proc.Addr()\n}\n\n//go:uintptrescapes\n\n// Call executes procedure p with arguments a. It will panic, if more than 15 arguments\n// are supplied. It will also panic if the procedure cannot be found.\n//\n// The returned error is always non-nil, constructed from the result of GetLastError.\n// Callers must inspect the primary return value to decide whether an error occurred\n// (according to the semantics of the specific function being called) before consulting\n// the error. The error will be guaranteed to contain windows.Errno.\nfunc (p *LazyProc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) {\n\tp.mustFind()\n\treturn p.proc.Call(a...)\n}\n\nvar canDoSearchSystem32Once struct {\n\tsync.Once\n\tv bool\n}\n\nfunc initCanDoSearchSystem32() {\n\t// https://msdn.microsoft.com/en-us/library/ms684179(v=vs.85).aspx says:\n\t// \"Windows 7, Windows Server 2008 R2, Windows Vista, and Windows\n\t// Server 2008: The LOAD_LIBRARY_SEARCH_* flags are available on\n\t// systems that have KB2533623 installed. To determine whether the\n\t// flags are available, use GetProcAddress to get the address of the\n\t// AddDllDirectory, RemoveDllDirectory, or SetDefaultDllDirectories\n\t// function. If GetProcAddress succeeds, the LOAD_LIBRARY_SEARCH_*\n\t// flags can be used with LoadLibraryEx.\"\n\tcanDoSearchSystem32Once.v = (modkernel32.NewProc(\"AddDllDirectory\").Find() == nil)\n}\n\nfunc canDoSearchSystem32() bool {\n\tcanDoSearchSystem32Once.Do(initCanDoSearchSystem32)\n\treturn canDoSearchSystem32Once.v\n}\n\nfunc isBaseName(name string) bool {\n\tfor _, c := range name {\n\t\tif c == ':' || c == '/' || c == '\\\\' {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// loadLibraryEx wraps the Windows LoadLibraryEx function.\n//\n// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms684179(v=vs.85).aspx\n//\n// If name is not an absolute path, LoadLibraryEx searches for the DLL\n// in a variety of automatic locations unless constrained by flags.\n// See: https://msdn.microsoft.com/en-us/library/ff919712%28VS.85%29.aspx\nfunc loadLibraryEx(name string, system bool) (*DLL, error) {\n\tloadDLL := name\n\tvar flags uintptr\n\tif system {\n\t\tif canDoSearchSystem32() {\n\t\t\tflags = LOAD_LIBRARY_SEARCH_SYSTEM32\n\t\t} else if isBaseName(name) {\n\t\t\t// WindowsXP or unpatched Windows machine\n\t\t\t// trying to load \"foo.dll\" out of the system\n\t\t\t// folder, but LoadLibraryEx doesn't support\n\t\t\t// that yet on their system, so emulate it.\n\t\t\tsystemdir, err := GetSystemDirectory()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tloadDLL = systemdir + \"\\\\\" + name\n\t\t}\n\t}\n\th, err := LoadLibraryEx(loadDLL, 0, flags)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &DLL{Name: name, Handle: h}, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/env_windows.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// Windows environment variables.\n\npackage windows\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\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\n// Returns a default environment associated with the token, rather than the current\n// process. If inheritExisting is true, then this environment also inherits the\n// environment of the current process.\nfunc (token Token) Environ(inheritExisting bool) (env []string, err error) {\n\tvar block *uint16\n\terr = CreateEnvironmentBlock(&block, token, inheritExisting)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer DestroyEnvironmentBlock(block)\n\tsize := unsafe.Sizeof(*block)\n\tfor *block != 0 {\n\t\t// find NUL terminator\n\t\tend := unsafe.Pointer(block)\n\t\tfor *(*uint16)(end) != 0 {\n\t\t\tend = unsafe.Add(end, size)\n\t\t}\n\n\t\tentry := unsafe.Slice(block, (uintptr(end)-uintptr(unsafe.Pointer(block)))/size)\n\t\tenv = append(env, UTF16ToString(entry))\n\t\tblock = (*uint16)(unsafe.Add(end, size))\n\t}\n\treturn env, nil\n}\n\nfunc Unsetenv(key string) error {\n\treturn syscall.Unsetenv(key)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/eventlog.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 windows\n\npackage windows\n\nconst (\n\tEVENTLOG_SUCCESS          = 0\n\tEVENTLOG_ERROR_TYPE       = 1\n\tEVENTLOG_WARNING_TYPE     = 2\n\tEVENTLOG_INFORMATION_TYPE = 4\n\tEVENTLOG_AUDIT_SUCCESS    = 8\n\tEVENTLOG_AUDIT_FAILURE    = 16\n)\n\n//sys\tRegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) [failretval==0] = advapi32.RegisterEventSourceW\n//sys\tDeregisterEventSource(handle Handle) (err error) = advapi32.DeregisterEventSource\n//sys\tReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) = advapi32.ReportEventW\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/exec_windows.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// Fork, exec, wait, etc.\n\npackage windows\n\nimport (\n\terrorspkg \"errors\"\n\t\"unsafe\"\n)\n\n// EscapeArg rewrites command line argument s as prescribed\n// in http://msdn.microsoft.com/en-us/library/ms880421.\n// This function returns \"\" (2 double quotes) if s is empty.\n// Alternatively, these transformations are done:\n//   - every back slash (\\) is doubled, but only if immediately\n//     followed by double quote (\");\n//   - every double quote (\") is escaped by back slash (\\);\n//   - finally, s is wrapped with double quotes (arg -> \"arg\"),\n//     but only if there is space or tab inside s.\nfunc EscapeArg(s string) string {\n\tif len(s) == 0 {\n\t\treturn `\"\"`\n\t}\n\tn := len(s)\n\thasSpace := false\n\tfor i := 0; i < len(s); i++ {\n\t\tswitch s[i] {\n\t\tcase '\"', '\\\\':\n\t\t\tn++\n\t\tcase ' ', '\\t':\n\t\t\thasSpace = true\n\t\t}\n\t}\n\tif hasSpace {\n\t\tn += 2 // Reserve space for quotes.\n\t}\n\tif n == len(s) {\n\t\treturn s\n\t}\n\n\tqs := make([]byte, n)\n\tj := 0\n\tif hasSpace {\n\t\tqs[j] = '\"'\n\t\tj++\n\t}\n\tslashes := 0\n\tfor i := 0; i < len(s); i++ {\n\t\tswitch s[i] {\n\t\tdefault:\n\t\t\tslashes = 0\n\t\t\tqs[j] = s[i]\n\t\tcase '\\\\':\n\t\t\tslashes++\n\t\t\tqs[j] = s[i]\n\t\tcase '\"':\n\t\t\tfor ; slashes > 0; slashes-- {\n\t\t\t\tqs[j] = '\\\\'\n\t\t\t\tj++\n\t\t\t}\n\t\t\tqs[j] = '\\\\'\n\t\t\tj++\n\t\t\tqs[j] = s[i]\n\t\t}\n\t\tj++\n\t}\n\tif hasSpace {\n\t\tfor ; slashes > 0; slashes-- {\n\t\t\tqs[j] = '\\\\'\n\t\t\tj++\n\t\t}\n\t\tqs[j] = '\"'\n\t\tj++\n\t}\n\treturn string(qs[:j])\n}\n\n// ComposeCommandLine escapes and joins the given arguments suitable for use as a Windows command line,\n// in CreateProcess's CommandLine argument, CreateService/ChangeServiceConfig's BinaryPathName argument,\n// or any program that uses CommandLineToArgv.\nfunc ComposeCommandLine(args []string) string {\n\tif len(args) == 0 {\n\t\treturn \"\"\n\t}\n\n\t// Per https://learn.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-commandlinetoargvw:\n\t// “This function accepts command lines that contain a program name; the\n\t// program name can be enclosed in quotation marks or not.”\n\t//\n\t// Unfortunately, it provides no means of escaping interior quotation marks\n\t// within that program name, and we have no way to report them here.\n\tprog := args[0]\n\tmustQuote := len(prog) == 0\n\tfor i := 0; i < len(prog); i++ {\n\t\tc := prog[i]\n\t\tif c <= ' ' || (c == '\"' && i == 0) {\n\t\t\t// Force quotes for not only the ASCII space and tab as described in the\n\t\t\t// MSDN article, but also ASCII control characters.\n\t\t\t// The documentation for CommandLineToArgvW doesn't say what happens when\n\t\t\t// the first argument is not a valid program name, but it empirically\n\t\t\t// seems to drop unquoted control characters.\n\t\t\tmustQuote = true\n\t\t\tbreak\n\t\t}\n\t}\n\tvar commandLine []byte\n\tif mustQuote {\n\t\tcommandLine = make([]byte, 0, len(prog)+2)\n\t\tcommandLine = append(commandLine, '\"')\n\t\tfor i := 0; i < len(prog); i++ {\n\t\t\tc := prog[i]\n\t\t\tif c == '\"' {\n\t\t\t\t// This quote would interfere with our surrounding quotes.\n\t\t\t\t// We have no way to report an error, so just strip out\n\t\t\t\t// the offending character instead.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcommandLine = append(commandLine, c)\n\t\t}\n\t\tcommandLine = append(commandLine, '\"')\n\t} else {\n\t\tif len(args) == 1 {\n\t\t\t// args[0] is a valid command line representing itself.\n\t\t\t// No need to allocate a new slice or string for it.\n\t\t\treturn prog\n\t\t}\n\t\tcommandLine = []byte(prog)\n\t}\n\n\tfor _, arg := range args[1:] {\n\t\tcommandLine = append(commandLine, ' ')\n\t\t// TODO(bcmills): since we're already appending to a slice, it would be nice\n\t\t// to avoid the intermediate allocations of EscapeArg.\n\t\t// Perhaps we can factor out an appendEscapedArg function.\n\t\tcommandLine = append(commandLine, EscapeArg(arg)...)\n\t}\n\treturn string(commandLine)\n}\n\n// DecomposeCommandLine breaks apart its argument command line into unescaped parts using CommandLineToArgv,\n// as gathered from GetCommandLine, QUERY_SERVICE_CONFIG's BinaryPathName argument, or elsewhere that\n// command lines are passed around.\n// DecomposeCommandLine returns an error if commandLine contains NUL.\nfunc DecomposeCommandLine(commandLine string) ([]string, error) {\n\tif len(commandLine) == 0 {\n\t\treturn []string{}, nil\n\t}\n\tutf16CommandLine, err := UTF16FromString(commandLine)\n\tif err != nil {\n\t\treturn nil, errorspkg.New(\"string with NUL passed to DecomposeCommandLine\")\n\t}\n\tvar argc int32\n\targv, err := commandLineToArgv(&utf16CommandLine[0], &argc)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer LocalFree(Handle(unsafe.Pointer(argv)))\n\n\tvar args []string\n\tfor _, p := range unsafe.Slice(argv, argc) {\n\t\targs = append(args, UTF16PtrToString(p))\n\t}\n\treturn args, nil\n}\n\n// CommandLineToArgv parses a Unicode command line string and sets\n// argc to the number of parsed arguments.\n//\n// The returned memory should be freed using a single call to LocalFree.\n//\n// Note that although the return type of CommandLineToArgv indicates 8192\n// entries of up to 8192 characters each, the actual count of parsed arguments\n// may exceed 8192, and the documentation for CommandLineToArgvW does not mention\n// any bound on the lengths of the individual argument strings.\n// (See https://go.dev/issue/63236.)\nfunc CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) {\n\targp, err := commandLineToArgv(cmd, argc)\n\targv = (*[8192]*[8192]uint16)(unsafe.Pointer(argp))\n\treturn argv, err\n}\n\nfunc CloseOnExec(fd Handle) {\n\tSetHandleInformation(Handle(fd), HANDLE_FLAG_INHERIT, 0)\n}\n\n// FullPath retrieves the full path of the specified file.\nfunc FullPath(name string) (path string, err error) {\n\tp, err := UTF16PtrFromString(name)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tn := uint32(100)\n\tfor {\n\t\tbuf := make([]uint16, n)\n\t\tn, err = GetFullPathName(p, uint32(len(buf)), &buf[0], nil)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif n <= uint32(len(buf)) {\n\t\t\treturn UTF16ToString(buf[:n]), nil\n\t\t}\n\t}\n}\n\n// NewProcThreadAttributeList allocates a new ProcThreadAttributeListContainer, with the requested maximum number of attributes.\nfunc NewProcThreadAttributeList(maxAttrCount uint32) (*ProcThreadAttributeListContainer, error) {\n\tvar size uintptr\n\terr := initializeProcThreadAttributeList(nil, maxAttrCount, 0, &size)\n\tif err != ERROR_INSUFFICIENT_BUFFER {\n\t\tif err == nil {\n\t\t\treturn nil, errorspkg.New(\"unable to query buffer size from InitializeProcThreadAttributeList\")\n\t\t}\n\t\treturn nil, err\n\t}\n\talloc, err := LocalAlloc(LMEM_FIXED, uint32(size))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t// size is guaranteed to be ≥1 by InitializeProcThreadAttributeList.\n\tal := &ProcThreadAttributeListContainer{data: (*ProcThreadAttributeList)(unsafe.Pointer(alloc))}\n\terr = initializeProcThreadAttributeList(al.data, maxAttrCount, 0, &size)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn al, err\n}\n\n// Update modifies the ProcThreadAttributeList using UpdateProcThreadAttribute.\nfunc (al *ProcThreadAttributeListContainer) Update(attribute uintptr, value unsafe.Pointer, size uintptr) error {\n\tal.pointers = append(al.pointers, value)\n\treturn updateProcThreadAttribute(al.data, 0, attribute, value, size, nil, nil)\n}\n\n// Delete frees ProcThreadAttributeList's resources.\nfunc (al *ProcThreadAttributeListContainer) Delete() {\n\tdeleteProcThreadAttributeList(al.data)\n\tLocalFree(Handle(unsafe.Pointer(al.data)))\n\tal.data = nil\n\tal.pointers = nil\n}\n\n// List returns the actual ProcThreadAttributeList to be passed to StartupInfoEx.\nfunc (al *ProcThreadAttributeListContainer) List() *ProcThreadAttributeList {\n\treturn al.data\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/memory_windows.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\npackage windows\n\nconst (\n\tMEM_COMMIT      = 0x00001000\n\tMEM_RESERVE     = 0x00002000\n\tMEM_DECOMMIT    = 0x00004000\n\tMEM_RELEASE     = 0x00008000\n\tMEM_RESET       = 0x00080000\n\tMEM_TOP_DOWN    = 0x00100000\n\tMEM_WRITE_WATCH = 0x00200000\n\tMEM_PHYSICAL    = 0x00400000\n\tMEM_RESET_UNDO  = 0x01000000\n\tMEM_LARGE_PAGES = 0x20000000\n\n\tPAGE_NOACCESS          = 0x00000001\n\tPAGE_READONLY          = 0x00000002\n\tPAGE_READWRITE         = 0x00000004\n\tPAGE_WRITECOPY         = 0x00000008\n\tPAGE_EXECUTE           = 0x00000010\n\tPAGE_EXECUTE_READ      = 0x00000020\n\tPAGE_EXECUTE_READWRITE = 0x00000040\n\tPAGE_EXECUTE_WRITECOPY = 0x00000080\n\tPAGE_GUARD             = 0x00000100\n\tPAGE_NOCACHE           = 0x00000200\n\tPAGE_WRITECOMBINE      = 0x00000400\n\tPAGE_TARGETS_INVALID   = 0x40000000\n\tPAGE_TARGETS_NO_UPDATE = 0x40000000\n\n\tQUOTA_LIMITS_HARDWS_MIN_DISABLE = 0x00000002\n\tQUOTA_LIMITS_HARDWS_MIN_ENABLE  = 0x00000001\n\tQUOTA_LIMITS_HARDWS_MAX_DISABLE = 0x00000008\n\tQUOTA_LIMITS_HARDWS_MAX_ENABLE  = 0x00000004\n)\n\ntype MemoryBasicInformation struct {\n\tBaseAddress       uintptr\n\tAllocationBase    uintptr\n\tAllocationProtect uint32\n\tPartitionId       uint16\n\tRegionSize        uintptr\n\tState             uint32\n\tProtect           uint32\n\tType              uint32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/mkerrors.bash",
    "content": "#!/bin/bash\n\n# 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\nset -e\nshopt -s nullglob\n\nwinerror=\"$(printf '%s\\n' \"/mnt/c/Program Files (x86)/Windows Kits/\"/*/Include/*/shared/winerror.h | sort -Vr | head -n 1)\"\n[[ -n $winerror ]] || { echo \"Unable to find winerror.h\" >&2; exit 1; }\nntstatus=\"$(printf '%s\\n' \"/mnt/c/Program Files (x86)/Windows Kits/\"/*/Include/*/shared/ntstatus.h | sort -Vr | head -n 1)\"\n[[ -n $ntstatus ]] || { echo \"Unable to find ntstatus.h\" >&2; exit 1; }\n\ndeclare -A errors\n\n{\n\techo \"// Code generated by 'mkerrors.bash'; DO NOT EDIT.\"\n\techo\n\techo \"package windows\"\n\techo \"import \\\"syscall\\\"\"\n\techo \"const (\"\n\n\twhile read -r line; do\n\t\tunset vtype\n\t\tif [[ $line =~ ^#define\\ +([A-Z0-9_]+k?)\\ +([A-Z0-9_]+\\()?([A-Z][A-Z0-9_]+k?)\\)? ]]; then\n\t\t\tkey=\"${BASH_REMATCH[1]}\"\n\t\t\tvalue=\"${BASH_REMATCH[3]}\"\n\t\telif [[ $line =~ ^#define\\ +([A-Z0-9_]+k?)\\ +([A-Z0-9_]+\\()?((0x)?[0-9A-Fa-f]+)L?\\)? ]]; then\n\t\t\tkey=\"${BASH_REMATCH[1]}\"\n\t\t\tvalue=\"${BASH_REMATCH[3]}\"\n\t\t\tvtype=\"${BASH_REMATCH[2]}\"\n\t\telif [[ $line =~ ^#define\\ +([A-Z0-9_]+k?)\\ +\\(\\(([A-Z]+)\\)((0x)?[0-9A-Fa-f]+)L?\\) ]]; then\n\t\t\tkey=\"${BASH_REMATCH[1]}\"\n\t\t\tvalue=\"${BASH_REMATCH[3]}\"\n\t\t\tvtype=\"${BASH_REMATCH[2]}\"\n\t\telse\n\t\t\tcontinue\n\t\tfi\n\t\t[[ -n $key && -n $value ]] || continue\n\t\t[[ -z ${errors[\"$key\"]} ]] || continue\n\t\terrors[\"$key\"]=\"$value\"\n\t\tif [[ -v vtype ]]; then\n\t\t\tif [[ $key == FACILITY_* || $key == NO_ERROR ]]; then\n\t\t\t\tvtype=\"\"\n\t\t\telif [[ $vtype == *HANDLE* || $vtype == *HRESULT* ]]; then\n\t\t\t\tvtype=\"Handle\"\n\t\t\telse\n\t\t\t\tvtype=\"syscall.Errno\"\n\t\t\tfi\n\t\t\tlast_vtype=\"$vtype\"\n\t\telse\n\t\t\tvtype=\"\"\n\t\t\tif [[ $last_vtype == Handle && $value == NO_ERROR ]]; then\n\t\t\t\tvalue=\"S_OK\"\n\t\t\telif [[ $last_vtype == syscall.Errno && $value == NO_ERROR ]]; then\n\t\t\t\tvalue=\"ERROR_SUCCESS\"\n\t\t\tfi\n\t\tfi\n\n\t\techo \"$key $vtype = $value\"\n\tdone < \"$winerror\"\n\n\twhile read -r line; do\n\t\t[[ $line =~ ^#define\\ (STATUS_[^\\s]+)\\ +\\(\\(NTSTATUS\\)((0x)?[0-9a-fA-F]+)L?\\) ]] || continue\n\t\techo \"${BASH_REMATCH[1]} NTStatus = ${BASH_REMATCH[2]}\"\n\tdone < \"$ntstatus\"\n\n\techo \")\"\n} | gofmt > \"zerrors_windows.go\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/mkknownfolderids.bash",
    "content": "#!/bin/bash\n\n# 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\nset -e\nshopt -s nullglob\n\nknownfolders=\"$(printf '%s\\n' \"/mnt/c/Program Files (x86)/Windows Kits/\"/*/Include/*/um/KnownFolders.h | sort -Vr | head -n 1)\"\n[[ -n $knownfolders ]] || { echo \"Unable to find KnownFolders.h\" >&2; exit 1; }\n\n{\n\techo \"// Code generated by 'mkknownfolderids.bash'; DO NOT EDIT.\"\n\techo\n\techo \"package windows\"\n\techo \"type KNOWNFOLDERID GUID\"\n\techo \"var (\"\n\twhile read -r line; do\n\t\t[[ $line =~ DEFINE_KNOWN_FOLDER\\((FOLDERID_[^,]+),[\\t\\ ]*(0x[^,]+),[\\t\\ ]*(0x[^,]+),[\\t\\ ]*(0x[^,]+),[\\t\\ ]*(0x[^,]+),[\\t\\ ]*(0x[^,]+),[\\t\\ ]*(0x[^,]+),[\\t\\ ]*(0x[^,]+),[\\t\\ ]*(0x[^,]+),[\\t\\ ]*(0x[^,]+),[\\t\\ ]*(0x[^,]+),[\\t\\ ]*(0x[^,]+)\\) ]] || continue\n\t\tprintf \"%s = &KNOWNFOLDERID{0x%08x, 0x%04x, 0x%04x, [8]byte{0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x}}\\n\" \\\n\t\t\t\"${BASH_REMATCH[1]}\" $(( \"${BASH_REMATCH[2]}\" )) $(( \"${BASH_REMATCH[3]}\" )) $(( \"${BASH_REMATCH[4]}\" )) \\\n\t\t\t$(( \"${BASH_REMATCH[5]}\" )) $(( \"${BASH_REMATCH[6]}\" )) $(( \"${BASH_REMATCH[7]}\" )) $(( \"${BASH_REMATCH[8]}\" )) \\\n\t\t\t$(( \"${BASH_REMATCH[9]}\" )) $(( \"${BASH_REMATCH[10]}\" )) $(( \"${BASH_REMATCH[11]}\" )) $(( \"${BASH_REMATCH[12]}\" ))\n\tdone < \"$knownfolders\"\n\techo \")\"\n} | gofmt > \"zknownfolderids_windows.go\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/mksyscall.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 generate\n\npackage windows\n\n//go:generate go run golang.org/x/sys/windows/mkwinsyscall -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go setupapi_windows.go\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/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 windows && race\n\npackage windows\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/windows/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 windows && !race\n\npackage windows\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/windows/security_windows.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 windows\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nconst (\n\tNameUnknown          = 0\n\tNameFullyQualifiedDN = 1\n\tNameSamCompatible    = 2\n\tNameDisplay          = 3\n\tNameUniqueId         = 6\n\tNameCanonical        = 7\n\tNameUserPrincipal    = 8\n\tNameCanonicalEx      = 9\n\tNameServicePrincipal = 10\n\tNameDnsDomain        = 12\n)\n\n// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL.\n// http://blogs.msdn.com/b/drnick/archive/2007/12/19/windows-and-upn-format-credentials.aspx\n//sys\tTranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) [failretval&0xff==0] = secur32.TranslateNameW\n//sys\tGetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) [failretval&0xff==0] = secur32.GetUserNameExW\n\n// TranslateAccountName converts a directory service\n// object name from one format to another.\nfunc TranslateAccountName(username string, from, to uint32, initSize int) (string, error) {\n\tu, e := UTF16PtrFromString(username)\n\tif e != nil {\n\t\treturn \"\", e\n\t}\n\tn := uint32(50)\n\tfor {\n\t\tb := make([]uint16, n)\n\t\te = TranslateName(u, from, to, &b[0], &n)\n\t\tif e == nil {\n\t\t\treturn UTF16ToString(b[:n]), nil\n\t\t}\n\t\tif e != ERROR_INSUFFICIENT_BUFFER {\n\t\t\treturn \"\", e\n\t\t}\n\t\tif n <= uint32(len(b)) {\n\t\t\treturn \"\", e\n\t\t}\n\t}\n}\n\nconst (\n\t// do not reorder\n\tNetSetupUnknownStatus = iota\n\tNetSetupUnjoined\n\tNetSetupWorkgroupName\n\tNetSetupDomainName\n)\n\ntype UserInfo10 struct {\n\tName       *uint16\n\tComment    *uint16\n\tUsrComment *uint16\n\tFullName   *uint16\n}\n\n//sys\tNetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) = netapi32.NetUserGetInfo\n//sys\tNetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) = netapi32.NetGetJoinInformation\n//sys\tNetApiBufferFree(buf *byte) (neterr error) = netapi32.NetApiBufferFree\n//sys   NetUserEnum(serverName *uint16, level uint32, filter uint32, buf **byte, prefMaxLen uint32, entriesRead *uint32, totalEntries *uint32, resumeHandle *uint32) (neterr error) = netapi32.NetUserEnum\n\nconst (\n\t// do not reorder\n\tSidTypeUser = 1 + iota\n\tSidTypeGroup\n\tSidTypeDomain\n\tSidTypeAlias\n\tSidTypeWellKnownGroup\n\tSidTypeDeletedAccount\n\tSidTypeInvalid\n\tSidTypeUnknown\n\tSidTypeComputer\n\tSidTypeLabel\n)\n\ntype SidIdentifierAuthority struct {\n\tValue [6]byte\n}\n\nvar (\n\tSECURITY_NULL_SID_AUTHORITY        = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 0}}\n\tSECURITY_WORLD_SID_AUTHORITY       = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 1}}\n\tSECURITY_LOCAL_SID_AUTHORITY       = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 2}}\n\tSECURITY_CREATOR_SID_AUTHORITY     = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 3}}\n\tSECURITY_NON_UNIQUE_AUTHORITY      = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 4}}\n\tSECURITY_NT_AUTHORITY              = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 5}}\n\tSECURITY_MANDATORY_LABEL_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 16}}\n)\n\nconst (\n\tSECURITY_NULL_RID                   = 0\n\tSECURITY_WORLD_RID                  = 0\n\tSECURITY_LOCAL_RID                  = 0\n\tSECURITY_CREATOR_OWNER_RID          = 0\n\tSECURITY_CREATOR_GROUP_RID          = 1\n\tSECURITY_DIALUP_RID                 = 1\n\tSECURITY_NETWORK_RID                = 2\n\tSECURITY_BATCH_RID                  = 3\n\tSECURITY_INTERACTIVE_RID            = 4\n\tSECURITY_LOGON_IDS_RID              = 5\n\tSECURITY_SERVICE_RID                = 6\n\tSECURITY_LOCAL_SYSTEM_RID           = 18\n\tSECURITY_BUILTIN_DOMAIN_RID         = 32\n\tSECURITY_PRINCIPAL_SELF_RID         = 10\n\tSECURITY_CREATOR_OWNER_SERVER_RID   = 0x2\n\tSECURITY_CREATOR_GROUP_SERVER_RID   = 0x3\n\tSECURITY_LOGON_IDS_RID_COUNT        = 0x3\n\tSECURITY_ANONYMOUS_LOGON_RID        = 0x7\n\tSECURITY_PROXY_RID                  = 0x8\n\tSECURITY_ENTERPRISE_CONTROLLERS_RID = 0x9\n\tSECURITY_SERVER_LOGON_RID           = SECURITY_ENTERPRISE_CONTROLLERS_RID\n\tSECURITY_AUTHENTICATED_USER_RID     = 0xb\n\tSECURITY_RESTRICTED_CODE_RID        = 0xc\n\tSECURITY_NT_NON_UNIQUE_RID          = 0x15\n)\n\n// Predefined domain-relative RIDs for local groups.\n// See https://msdn.microsoft.com/en-us/library/windows/desktop/aa379649(v=vs.85).aspx\nconst (\n\tDOMAIN_ALIAS_RID_ADMINS                         = 0x220\n\tDOMAIN_ALIAS_RID_USERS                          = 0x221\n\tDOMAIN_ALIAS_RID_GUESTS                         = 0x222\n\tDOMAIN_ALIAS_RID_POWER_USERS                    = 0x223\n\tDOMAIN_ALIAS_RID_ACCOUNT_OPS                    = 0x224\n\tDOMAIN_ALIAS_RID_SYSTEM_OPS                     = 0x225\n\tDOMAIN_ALIAS_RID_PRINT_OPS                      = 0x226\n\tDOMAIN_ALIAS_RID_BACKUP_OPS                     = 0x227\n\tDOMAIN_ALIAS_RID_REPLICATOR                     = 0x228\n\tDOMAIN_ALIAS_RID_RAS_SERVERS                    = 0x229\n\tDOMAIN_ALIAS_RID_PREW2KCOMPACCESS               = 0x22a\n\tDOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS           = 0x22b\n\tDOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS      = 0x22c\n\tDOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS = 0x22d\n\tDOMAIN_ALIAS_RID_MONITORING_USERS               = 0x22e\n\tDOMAIN_ALIAS_RID_LOGGING_USERS                  = 0x22f\n\tDOMAIN_ALIAS_RID_AUTHORIZATIONACCESS            = 0x230\n\tDOMAIN_ALIAS_RID_TS_LICENSE_SERVERS             = 0x231\n\tDOMAIN_ALIAS_RID_DCOM_USERS                     = 0x232\n\tDOMAIN_ALIAS_RID_IUSERS                         = 0x238\n\tDOMAIN_ALIAS_RID_CRYPTO_OPERATORS               = 0x239\n\tDOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP     = 0x23b\n\tDOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP = 0x23c\n\tDOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP        = 0x23d\n\tDOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP      = 0x23e\n)\n\n//sys\tLookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountSidW\n//sys\tLookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountNameW\n//sys\tConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) = advapi32.ConvertSidToStringSidW\n//sys\tConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) = advapi32.ConvertStringSidToSidW\n//sys\tGetLengthSid(sid *SID) (len uint32) = advapi32.GetLengthSid\n//sys\tCopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) = advapi32.CopySid\n//sys\tAllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) = advapi32.AllocateAndInitializeSid\n//sys\tcreateWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, sizeSid *uint32) (err error) = advapi32.CreateWellKnownSid\n//sys\tisWellKnownSid(sid *SID, sidType WELL_KNOWN_SID_TYPE) (isWellKnown bool) = advapi32.IsWellKnownSid\n//sys\tFreeSid(sid *SID) (err error) [failretval!=0] = advapi32.FreeSid\n//sys\tEqualSid(sid1 *SID, sid2 *SID) (isEqual bool) = advapi32.EqualSid\n//sys\tgetSidIdentifierAuthority(sid *SID) (authority *SidIdentifierAuthority) = advapi32.GetSidIdentifierAuthority\n//sys\tgetSidSubAuthorityCount(sid *SID) (count *uint8) = advapi32.GetSidSubAuthorityCount\n//sys\tgetSidSubAuthority(sid *SID, index uint32) (subAuthority *uint32) = advapi32.GetSidSubAuthority\n//sys\tisValidSid(sid *SID) (isValid bool) = advapi32.IsValidSid\n\n// The security identifier (SID) structure is a variable-length\n// structure used to uniquely identify users or groups.\ntype SID struct{}\n\n// StringToSid converts a string-format security identifier\n// SID into a valid, functional SID.\nfunc StringToSid(s string) (*SID, error) {\n\tvar sid *SID\n\tp, e := UTF16PtrFromString(s)\n\tif e != nil {\n\t\treturn nil, e\n\t}\n\te = ConvertStringSidToSid(p, &sid)\n\tif e != nil {\n\t\treturn nil, e\n\t}\n\tdefer LocalFree((Handle)(unsafe.Pointer(sid)))\n\treturn sid.Copy()\n}\n\n// LookupSID retrieves a security identifier SID for the account\n// and the name of the domain on which the account was found.\n// System specify target computer to search.\nfunc LookupSID(system, account string) (sid *SID, domain string, accType uint32, err error) {\n\tif len(account) == 0 {\n\t\treturn nil, \"\", 0, syscall.EINVAL\n\t}\n\tacc, e := UTF16PtrFromString(account)\n\tif e != nil {\n\t\treturn nil, \"\", 0, e\n\t}\n\tvar sys *uint16\n\tif len(system) > 0 {\n\t\tsys, e = UTF16PtrFromString(system)\n\t\tif e != nil {\n\t\t\treturn nil, \"\", 0, e\n\t\t}\n\t}\n\tn := uint32(50)\n\tdn := uint32(50)\n\tfor {\n\t\tb := make([]byte, n)\n\t\tdb := make([]uint16, dn)\n\t\tsid = (*SID)(unsafe.Pointer(&b[0]))\n\t\te = LookupAccountName(sys, acc, sid, &n, &db[0], &dn, &accType)\n\t\tif e == nil {\n\t\t\treturn sid, UTF16ToString(db), accType, nil\n\t\t}\n\t\tif e != ERROR_INSUFFICIENT_BUFFER {\n\t\t\treturn nil, \"\", 0, e\n\t\t}\n\t\tif n <= uint32(len(b)) {\n\t\t\treturn nil, \"\", 0, e\n\t\t}\n\t}\n}\n\n// String converts SID to a string format suitable for display, storage, or transmission.\nfunc (sid *SID) String() string {\n\tvar s *uint16\n\te := ConvertSidToStringSid(sid, &s)\n\tif e != nil {\n\t\treturn \"\"\n\t}\n\tdefer LocalFree((Handle)(unsafe.Pointer(s)))\n\treturn UTF16ToString((*[256]uint16)(unsafe.Pointer(s))[:])\n}\n\n// Len returns the length, in bytes, of a valid security identifier SID.\nfunc (sid *SID) Len() int {\n\treturn int(GetLengthSid(sid))\n}\n\n// Copy creates a duplicate of security identifier SID.\nfunc (sid *SID) Copy() (*SID, error) {\n\tb := make([]byte, sid.Len())\n\tsid2 := (*SID)(unsafe.Pointer(&b[0]))\n\te := CopySid(uint32(len(b)), sid2, sid)\n\tif e != nil {\n\t\treturn nil, e\n\t}\n\treturn sid2, nil\n}\n\n// IdentifierAuthority returns the identifier authority of the SID.\nfunc (sid *SID) IdentifierAuthority() SidIdentifierAuthority {\n\treturn *getSidIdentifierAuthority(sid)\n}\n\n// SubAuthorityCount returns the number of sub-authorities in the SID.\nfunc (sid *SID) SubAuthorityCount() uint8 {\n\treturn *getSidSubAuthorityCount(sid)\n}\n\n// SubAuthority returns the sub-authority of the SID as specified by\n// the index, which must be less than sid.SubAuthorityCount().\nfunc (sid *SID) SubAuthority(idx uint32) uint32 {\n\tif idx >= uint32(sid.SubAuthorityCount()) {\n\t\tpanic(\"sub-authority index out of range\")\n\t}\n\treturn *getSidSubAuthority(sid, idx)\n}\n\n// IsValid returns whether the SID has a valid revision and length.\nfunc (sid *SID) IsValid() bool {\n\treturn isValidSid(sid)\n}\n\n// Equals compares two SIDs for equality.\nfunc (sid *SID) Equals(sid2 *SID) bool {\n\treturn EqualSid(sid, sid2)\n}\n\n// IsWellKnown determines whether the SID matches the well-known sidType.\nfunc (sid *SID) IsWellKnown(sidType WELL_KNOWN_SID_TYPE) bool {\n\treturn isWellKnownSid(sid, sidType)\n}\n\n// LookupAccount retrieves the name of the account for this SID\n// and the name of the first domain on which this SID is found.\n// System specify target computer to search for.\nfunc (sid *SID) LookupAccount(system string) (account, domain string, accType uint32, err error) {\n\tvar sys *uint16\n\tif len(system) > 0 {\n\t\tsys, err = UTF16PtrFromString(system)\n\t\tif err != nil {\n\t\t\treturn \"\", \"\", 0, err\n\t\t}\n\t}\n\tn := uint32(50)\n\tdn := uint32(50)\n\tfor {\n\t\tb := make([]uint16, n)\n\t\tdb := make([]uint16, dn)\n\t\te := LookupAccountSid(sys, sid, &b[0], &n, &db[0], &dn, &accType)\n\t\tif e == nil {\n\t\t\treturn UTF16ToString(b), UTF16ToString(db), accType, nil\n\t\t}\n\t\tif e != ERROR_INSUFFICIENT_BUFFER {\n\t\t\treturn \"\", \"\", 0, e\n\t\t}\n\t\tif n <= uint32(len(b)) {\n\t\t\treturn \"\", \"\", 0, e\n\t\t}\n\t}\n}\n\n// Various types of pre-specified SIDs that can be synthesized and compared at runtime.\ntype WELL_KNOWN_SID_TYPE uint32\n\nconst (\n\tWinNullSid                                    = 0\n\tWinWorldSid                                   = 1\n\tWinLocalSid                                   = 2\n\tWinCreatorOwnerSid                            = 3\n\tWinCreatorGroupSid                            = 4\n\tWinCreatorOwnerServerSid                      = 5\n\tWinCreatorGroupServerSid                      = 6\n\tWinNtAuthoritySid                             = 7\n\tWinDialupSid                                  = 8\n\tWinNetworkSid                                 = 9\n\tWinBatchSid                                   = 10\n\tWinInteractiveSid                             = 11\n\tWinServiceSid                                 = 12\n\tWinAnonymousSid                               = 13\n\tWinProxySid                                   = 14\n\tWinEnterpriseControllersSid                   = 15\n\tWinSelfSid                                    = 16\n\tWinAuthenticatedUserSid                       = 17\n\tWinRestrictedCodeSid                          = 18\n\tWinTerminalServerSid                          = 19\n\tWinRemoteLogonIdSid                           = 20\n\tWinLogonIdsSid                                = 21\n\tWinLocalSystemSid                             = 22\n\tWinLocalServiceSid                            = 23\n\tWinNetworkServiceSid                          = 24\n\tWinBuiltinDomainSid                           = 25\n\tWinBuiltinAdministratorsSid                   = 26\n\tWinBuiltinUsersSid                            = 27\n\tWinBuiltinGuestsSid                           = 28\n\tWinBuiltinPowerUsersSid                       = 29\n\tWinBuiltinAccountOperatorsSid                 = 30\n\tWinBuiltinSystemOperatorsSid                  = 31\n\tWinBuiltinPrintOperatorsSid                   = 32\n\tWinBuiltinBackupOperatorsSid                  = 33\n\tWinBuiltinReplicatorSid                       = 34\n\tWinBuiltinPreWindows2000CompatibleAccessSid   = 35\n\tWinBuiltinRemoteDesktopUsersSid               = 36\n\tWinBuiltinNetworkConfigurationOperatorsSid    = 37\n\tWinAccountAdministratorSid                    = 38\n\tWinAccountGuestSid                            = 39\n\tWinAccountKrbtgtSid                           = 40\n\tWinAccountDomainAdminsSid                     = 41\n\tWinAccountDomainUsersSid                      = 42\n\tWinAccountDomainGuestsSid                     = 43\n\tWinAccountComputersSid                        = 44\n\tWinAccountControllersSid                      = 45\n\tWinAccountCertAdminsSid                       = 46\n\tWinAccountSchemaAdminsSid                     = 47\n\tWinAccountEnterpriseAdminsSid                 = 48\n\tWinAccountPolicyAdminsSid                     = 49\n\tWinAccountRasAndIasServersSid                 = 50\n\tWinNTLMAuthenticationSid                      = 51\n\tWinDigestAuthenticationSid                    = 52\n\tWinSChannelAuthenticationSid                  = 53\n\tWinThisOrganizationSid                        = 54\n\tWinOtherOrganizationSid                       = 55\n\tWinBuiltinIncomingForestTrustBuildersSid      = 56\n\tWinBuiltinPerfMonitoringUsersSid              = 57\n\tWinBuiltinPerfLoggingUsersSid                 = 58\n\tWinBuiltinAuthorizationAccessSid              = 59\n\tWinBuiltinTerminalServerLicenseServersSid     = 60\n\tWinBuiltinDCOMUsersSid                        = 61\n\tWinBuiltinIUsersSid                           = 62\n\tWinIUserSid                                   = 63\n\tWinBuiltinCryptoOperatorsSid                  = 64\n\tWinUntrustedLabelSid                          = 65\n\tWinLowLabelSid                                = 66\n\tWinMediumLabelSid                             = 67\n\tWinHighLabelSid                               = 68\n\tWinSystemLabelSid                             = 69\n\tWinWriteRestrictedCodeSid                     = 70\n\tWinCreatorOwnerRightsSid                      = 71\n\tWinCacheablePrincipalsGroupSid                = 72\n\tWinNonCacheablePrincipalsGroupSid             = 73\n\tWinEnterpriseReadonlyControllersSid           = 74\n\tWinAccountReadonlyControllersSid              = 75\n\tWinBuiltinEventLogReadersGroup                = 76\n\tWinNewEnterpriseReadonlyControllersSid        = 77\n\tWinBuiltinCertSvcDComAccessGroup              = 78\n\tWinMediumPlusLabelSid                         = 79\n\tWinLocalLogonSid                              = 80\n\tWinConsoleLogonSid                            = 81\n\tWinThisOrganizationCertificateSid             = 82\n\tWinApplicationPackageAuthoritySid             = 83\n\tWinBuiltinAnyPackageSid                       = 84\n\tWinCapabilityInternetClientSid                = 85\n\tWinCapabilityInternetClientServerSid          = 86\n\tWinCapabilityPrivateNetworkClientServerSid    = 87\n\tWinCapabilityPicturesLibrarySid               = 88\n\tWinCapabilityVideosLibrarySid                 = 89\n\tWinCapabilityMusicLibrarySid                  = 90\n\tWinCapabilityDocumentsLibrarySid              = 91\n\tWinCapabilitySharedUserCertificatesSid        = 92\n\tWinCapabilityEnterpriseAuthenticationSid      = 93\n\tWinCapabilityRemovableStorageSid              = 94\n\tWinBuiltinRDSRemoteAccessServersSid           = 95\n\tWinBuiltinRDSEndpointServersSid               = 96\n\tWinBuiltinRDSManagementServersSid             = 97\n\tWinUserModeDriversSid                         = 98\n\tWinBuiltinHyperVAdminsSid                     = 99\n\tWinAccountCloneableControllersSid             = 100\n\tWinBuiltinAccessControlAssistanceOperatorsSid = 101\n\tWinBuiltinRemoteManagementUsersSid            = 102\n\tWinAuthenticationAuthorityAssertedSid         = 103\n\tWinAuthenticationServiceAssertedSid           = 104\n\tWinLocalAccountSid                            = 105\n\tWinLocalAccountAndAdministratorSid            = 106\n\tWinAccountProtectedUsersSid                   = 107\n\tWinCapabilityAppointmentsSid                  = 108\n\tWinCapabilityContactsSid                      = 109\n\tWinAccountDefaultSystemManagedSid             = 110\n\tWinBuiltinDefaultSystemManagedGroupSid        = 111\n\tWinBuiltinStorageReplicaAdminsSid             = 112\n\tWinAccountKeyAdminsSid                        = 113\n\tWinAccountEnterpriseKeyAdminsSid              = 114\n\tWinAuthenticationKeyTrustSid                  = 115\n\tWinAuthenticationKeyPropertyMFASid            = 116\n\tWinAuthenticationKeyPropertyAttestationSid    = 117\n\tWinAuthenticationFreshKeyAuthSid              = 118\n\tWinBuiltinDeviceOwnersSid                     = 119\n)\n\n// Creates a SID for a well-known predefined alias, generally using the constants of the form\n// Win*Sid, for the local machine.\nfunc CreateWellKnownSid(sidType WELL_KNOWN_SID_TYPE) (*SID, error) {\n\treturn CreateWellKnownDomainSid(sidType, nil)\n}\n\n// Creates a SID for a well-known predefined alias, generally using the constants of the form\n// Win*Sid, for the domain specified by the domainSid parameter.\nfunc CreateWellKnownDomainSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID) (*SID, error) {\n\tn := uint32(50)\n\tfor {\n\t\tb := make([]byte, n)\n\t\tsid := (*SID)(unsafe.Pointer(&b[0]))\n\t\terr := createWellKnownSid(sidType, domainSid, sid, &n)\n\t\tif err == nil {\n\t\t\treturn sid, nil\n\t\t}\n\t\tif err != ERROR_INSUFFICIENT_BUFFER {\n\t\t\treturn nil, err\n\t\t}\n\t\tif n <= uint32(len(b)) {\n\t\t\treturn nil, err\n\t\t}\n\t}\n}\n\nconst (\n\t// do not reorder\n\tTOKEN_ASSIGN_PRIMARY = 1 << iota\n\tTOKEN_DUPLICATE\n\tTOKEN_IMPERSONATE\n\tTOKEN_QUERY\n\tTOKEN_QUERY_SOURCE\n\tTOKEN_ADJUST_PRIVILEGES\n\tTOKEN_ADJUST_GROUPS\n\tTOKEN_ADJUST_DEFAULT\n\tTOKEN_ADJUST_SESSIONID\n\n\tTOKEN_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED |\n\t\tTOKEN_ASSIGN_PRIMARY |\n\t\tTOKEN_DUPLICATE |\n\t\tTOKEN_IMPERSONATE |\n\t\tTOKEN_QUERY |\n\t\tTOKEN_QUERY_SOURCE |\n\t\tTOKEN_ADJUST_PRIVILEGES |\n\t\tTOKEN_ADJUST_GROUPS |\n\t\tTOKEN_ADJUST_DEFAULT |\n\t\tTOKEN_ADJUST_SESSIONID\n\tTOKEN_READ  = STANDARD_RIGHTS_READ | TOKEN_QUERY\n\tTOKEN_WRITE = STANDARD_RIGHTS_WRITE |\n\t\tTOKEN_ADJUST_PRIVILEGES |\n\t\tTOKEN_ADJUST_GROUPS |\n\t\tTOKEN_ADJUST_DEFAULT\n\tTOKEN_EXECUTE = STANDARD_RIGHTS_EXECUTE\n)\n\nconst (\n\t// do not reorder\n\tTokenUser = 1 + iota\n\tTokenGroups\n\tTokenPrivileges\n\tTokenOwner\n\tTokenPrimaryGroup\n\tTokenDefaultDacl\n\tTokenSource\n\tTokenType\n\tTokenImpersonationLevel\n\tTokenStatistics\n\tTokenRestrictedSids\n\tTokenSessionId\n\tTokenGroupsAndPrivileges\n\tTokenSessionReference\n\tTokenSandBoxInert\n\tTokenAuditPolicy\n\tTokenOrigin\n\tTokenElevationType\n\tTokenLinkedToken\n\tTokenElevation\n\tTokenHasRestrictions\n\tTokenAccessInformation\n\tTokenVirtualizationAllowed\n\tTokenVirtualizationEnabled\n\tTokenIntegrityLevel\n\tTokenUIAccess\n\tTokenMandatoryPolicy\n\tTokenLogonSid\n\tMaxTokenInfoClass\n)\n\n// Group attributes inside of Tokengroups.Groups[i].Attributes\nconst (\n\tSE_GROUP_MANDATORY          = 0x00000001\n\tSE_GROUP_ENABLED_BY_DEFAULT = 0x00000002\n\tSE_GROUP_ENABLED            = 0x00000004\n\tSE_GROUP_OWNER              = 0x00000008\n\tSE_GROUP_USE_FOR_DENY_ONLY  = 0x00000010\n\tSE_GROUP_INTEGRITY          = 0x00000020\n\tSE_GROUP_INTEGRITY_ENABLED  = 0x00000040\n\tSE_GROUP_LOGON_ID           = 0xC0000000\n\tSE_GROUP_RESOURCE           = 0x20000000\n\tSE_GROUP_VALID_ATTRIBUTES   = SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED | SE_GROUP_OWNER | SE_GROUP_USE_FOR_DENY_ONLY | SE_GROUP_LOGON_ID | SE_GROUP_RESOURCE | SE_GROUP_INTEGRITY | SE_GROUP_INTEGRITY_ENABLED\n)\n\n// Privilege attributes\nconst (\n\tSE_PRIVILEGE_ENABLED_BY_DEFAULT = 0x00000001\n\tSE_PRIVILEGE_ENABLED            = 0x00000002\n\tSE_PRIVILEGE_REMOVED            = 0x00000004\n\tSE_PRIVILEGE_USED_FOR_ACCESS    = 0x80000000\n\tSE_PRIVILEGE_VALID_ATTRIBUTES   = SE_PRIVILEGE_ENABLED_BY_DEFAULT | SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_REMOVED | SE_PRIVILEGE_USED_FOR_ACCESS\n)\n\n// Token types\nconst (\n\tTokenPrimary       = 1\n\tTokenImpersonation = 2\n)\n\n// Impersonation levels\nconst (\n\tSecurityAnonymous      = 0\n\tSecurityIdentification = 1\n\tSecurityImpersonation  = 2\n\tSecurityDelegation     = 3\n)\n\ntype LUID struct {\n\tLowPart  uint32\n\tHighPart int32\n}\n\ntype LUIDAndAttributes struct {\n\tLuid       LUID\n\tAttributes uint32\n}\n\ntype SIDAndAttributes struct {\n\tSid        *SID\n\tAttributes uint32\n}\n\ntype Tokenuser struct {\n\tUser SIDAndAttributes\n}\n\ntype Tokenprimarygroup struct {\n\tPrimaryGroup *SID\n}\n\ntype Tokengroups struct {\n\tGroupCount uint32\n\tGroups     [1]SIDAndAttributes // Use AllGroups() for iterating.\n}\n\n// AllGroups returns a slice that can be used to iterate over the groups in g.\nfunc (g *Tokengroups) AllGroups() []SIDAndAttributes {\n\treturn (*[(1 << 28) - 1]SIDAndAttributes)(unsafe.Pointer(&g.Groups[0]))[:g.GroupCount:g.GroupCount]\n}\n\ntype Tokenprivileges struct {\n\tPrivilegeCount uint32\n\tPrivileges     [1]LUIDAndAttributes // Use AllPrivileges() for iterating.\n}\n\n// AllPrivileges returns a slice that can be used to iterate over the privileges in p.\nfunc (p *Tokenprivileges) AllPrivileges() []LUIDAndAttributes {\n\treturn (*[(1 << 27) - 1]LUIDAndAttributes)(unsafe.Pointer(&p.Privileges[0]))[:p.PrivilegeCount:p.PrivilegeCount]\n}\n\ntype Tokenmandatorylabel struct {\n\tLabel SIDAndAttributes\n}\n\nfunc (tml *Tokenmandatorylabel) Size() uint32 {\n\treturn uint32(unsafe.Sizeof(Tokenmandatorylabel{})) + GetLengthSid(tml.Label.Sid)\n}\n\n// Authorization Functions\n//sys\tcheckTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) = advapi32.CheckTokenMembership\n//sys\tisTokenRestricted(tokenHandle Token) (ret bool, err error) [!failretval] = advapi32.IsTokenRestricted\n//sys\tOpenProcessToken(process Handle, access uint32, token *Token) (err error) = advapi32.OpenProcessToken\n//sys\tOpenThreadToken(thread Handle, access uint32, openAsSelf bool, token *Token) (err error) = advapi32.OpenThreadToken\n//sys\tImpersonateSelf(impersonationlevel uint32) (err error) = advapi32.ImpersonateSelf\n//sys\tRevertToSelf() (err error) = advapi32.RevertToSelf\n//sys\tSetThreadToken(thread *Handle, token Token) (err error) = advapi32.SetThreadToken\n//sys\tLookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (err error) = advapi32.LookupPrivilegeValueW\n//sys\tAdjustTokenPrivileges(token Token, disableAllPrivileges bool, newstate *Tokenprivileges, buflen uint32, prevstate *Tokenprivileges, returnlen *uint32) (err error) = advapi32.AdjustTokenPrivileges\n//sys\tAdjustTokenGroups(token Token, resetToDefault bool, newstate *Tokengroups, buflen uint32, prevstate *Tokengroups, returnlen *uint32) (err error) = advapi32.AdjustTokenGroups\n//sys\tGetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) = advapi32.GetTokenInformation\n//sys\tSetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32) (err error) = advapi32.SetTokenInformation\n//sys\tDuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes *SecurityAttributes, impersonationLevel uint32, tokenType uint32, newToken *Token) (err error) = advapi32.DuplicateTokenEx\n//sys\tGetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) = userenv.GetUserProfileDirectoryW\n//sys\tgetSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetSystemDirectoryW\n//sys\tgetWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetWindowsDirectoryW\n//sys\tgetSystemWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetSystemWindowsDirectoryW\n\n// An access token contains the security information for a logon session.\n// The system creates an access token when a user logs on, and every\n// process executed on behalf of the user has a copy of the token.\n// The token identifies the user, the user's groups, and the user's\n// privileges. The system uses the token to control access to securable\n// objects and to control the ability of the user to perform various\n// system-related operations on the local computer.\ntype Token Handle\n\n// OpenCurrentProcessToken opens an access token associated with current\n// process with TOKEN_QUERY access. It is a real token that needs to be closed.\n//\n// Deprecated: Explicitly call OpenProcessToken(CurrentProcess(), ...)\n// with the desired access instead, or use GetCurrentProcessToken for a\n// TOKEN_QUERY token.\nfunc OpenCurrentProcessToken() (Token, error) {\n\tvar token Token\n\terr := OpenProcessToken(CurrentProcess(), TOKEN_QUERY, &token)\n\treturn token, err\n}\n\n// GetCurrentProcessToken returns the access token associated with\n// the current process. It is a pseudo token that does not need\n// to be closed.\nfunc GetCurrentProcessToken() Token {\n\treturn Token(^uintptr(4 - 1))\n}\n\n// GetCurrentThreadToken return the access token associated with\n// the current thread. It is a pseudo token that does not need\n// to be closed.\nfunc GetCurrentThreadToken() Token {\n\treturn Token(^uintptr(5 - 1))\n}\n\n// GetCurrentThreadEffectiveToken returns the effective access token\n// associated with the current thread. It is a pseudo token that does\n// not need to be closed.\nfunc GetCurrentThreadEffectiveToken() Token {\n\treturn Token(^uintptr(6 - 1))\n}\n\n// Close releases access to access token.\nfunc (t Token) Close() error {\n\treturn CloseHandle(Handle(t))\n}\n\n// getInfo retrieves a specified type of information about an access token.\nfunc (t Token) getInfo(class uint32, initSize int) (unsafe.Pointer, error) {\n\tn := uint32(initSize)\n\tfor {\n\t\tb := make([]byte, n)\n\t\te := GetTokenInformation(t, class, &b[0], uint32(len(b)), &n)\n\t\tif e == nil {\n\t\t\treturn unsafe.Pointer(&b[0]), nil\n\t\t}\n\t\tif e != ERROR_INSUFFICIENT_BUFFER {\n\t\t\treturn nil, e\n\t\t}\n\t\tif n <= uint32(len(b)) {\n\t\t\treturn nil, e\n\t\t}\n\t}\n}\n\n// GetTokenUser retrieves access token t user account information.\nfunc (t Token) GetTokenUser() (*Tokenuser, error) {\n\ti, e := t.getInfo(TokenUser, 50)\n\tif e != nil {\n\t\treturn nil, e\n\t}\n\treturn (*Tokenuser)(i), nil\n}\n\n// GetTokenGroups retrieves group accounts associated with access token t.\nfunc (t Token) GetTokenGroups() (*Tokengroups, error) {\n\ti, e := t.getInfo(TokenGroups, 50)\n\tif e != nil {\n\t\treturn nil, e\n\t}\n\treturn (*Tokengroups)(i), nil\n}\n\n// GetTokenPrimaryGroup retrieves access token t primary group information.\n// A pointer to a SID structure representing a group that will become\n// the primary group of any objects created by a process using this access token.\nfunc (t Token) GetTokenPrimaryGroup() (*Tokenprimarygroup, error) {\n\ti, e := t.getInfo(TokenPrimaryGroup, 50)\n\tif e != nil {\n\t\treturn nil, e\n\t}\n\treturn (*Tokenprimarygroup)(i), nil\n}\n\n// GetUserProfileDirectory retrieves path to the\n// root directory of the access token t user's profile.\nfunc (t Token) GetUserProfileDirectory() (string, error) {\n\tn := uint32(100)\n\tfor {\n\t\tb := make([]uint16, n)\n\t\te := GetUserProfileDirectory(t, &b[0], &n)\n\t\tif e == nil {\n\t\t\treturn UTF16ToString(b), nil\n\t\t}\n\t\tif e != ERROR_INSUFFICIENT_BUFFER {\n\t\t\treturn \"\", e\n\t\t}\n\t\tif n <= uint32(len(b)) {\n\t\t\treturn \"\", e\n\t\t}\n\t}\n}\n\n// IsElevated returns whether the current token is elevated from a UAC perspective.\nfunc (token Token) IsElevated() bool {\n\tvar isElevated uint32\n\tvar outLen uint32\n\terr := GetTokenInformation(token, TokenElevation, (*byte)(unsafe.Pointer(&isElevated)), uint32(unsafe.Sizeof(isElevated)), &outLen)\n\tif err != nil {\n\t\treturn false\n\t}\n\treturn outLen == uint32(unsafe.Sizeof(isElevated)) && isElevated != 0\n}\n\n// GetLinkedToken returns the linked token, which may be an elevated UAC token.\nfunc (token Token) GetLinkedToken() (Token, error) {\n\tvar linkedToken Token\n\tvar outLen uint32\n\terr := GetTokenInformation(token, TokenLinkedToken, (*byte)(unsafe.Pointer(&linkedToken)), uint32(unsafe.Sizeof(linkedToken)), &outLen)\n\tif err != nil {\n\t\treturn Token(0), err\n\t}\n\treturn linkedToken, nil\n}\n\n// GetSystemDirectory retrieves the path to current location of the system\n// directory, which is typically, though not always, `C:\\Windows\\System32`.\nfunc GetSystemDirectory() (string, error) {\n\tn := uint32(MAX_PATH)\n\tfor {\n\t\tb := make([]uint16, n)\n\t\tl, e := getSystemDirectory(&b[0], n)\n\t\tif e != nil {\n\t\t\treturn \"\", e\n\t\t}\n\t\tif l <= n {\n\t\t\treturn UTF16ToString(b[:l]), nil\n\t\t}\n\t\tn = l\n\t}\n}\n\n// GetWindowsDirectory retrieves the path to current location of the Windows\n// directory, which is typically, though not always, `C:\\Windows`. This may\n// be a private user directory in the case that the application is running\n// under a terminal server.\nfunc GetWindowsDirectory() (string, error) {\n\tn := uint32(MAX_PATH)\n\tfor {\n\t\tb := make([]uint16, n)\n\t\tl, e := getWindowsDirectory(&b[0], n)\n\t\tif e != nil {\n\t\t\treturn \"\", e\n\t\t}\n\t\tif l <= n {\n\t\t\treturn UTF16ToString(b[:l]), nil\n\t\t}\n\t\tn = l\n\t}\n}\n\n// GetSystemWindowsDirectory retrieves the path to current location of the\n// Windows directory, which is typically, though not always, `C:\\Windows`.\nfunc GetSystemWindowsDirectory() (string, error) {\n\tn := uint32(MAX_PATH)\n\tfor {\n\t\tb := make([]uint16, n)\n\t\tl, e := getSystemWindowsDirectory(&b[0], n)\n\t\tif e != nil {\n\t\t\treturn \"\", e\n\t\t}\n\t\tif l <= n {\n\t\t\treturn UTF16ToString(b[:l]), nil\n\t\t}\n\t\tn = l\n\t}\n}\n\n// IsMember reports whether the access token t is a member of the provided SID.\nfunc (t Token) IsMember(sid *SID) (bool, error) {\n\tvar b int32\n\tif e := checkTokenMembership(t, sid, &b); e != nil {\n\t\treturn false, e\n\t}\n\treturn b != 0, nil\n}\n\n// IsRestricted reports whether the access token t is a restricted token.\nfunc (t Token) IsRestricted() (isRestricted bool, err error) {\n\tisRestricted, err = isTokenRestricted(t)\n\tif !isRestricted && err == syscall.EINVAL {\n\t\t// If err is EINVAL, this returned ERROR_SUCCESS indicating a non-restricted token.\n\t\terr = nil\n\t}\n\treturn\n}\n\nconst (\n\tWTS_CONSOLE_CONNECT        = 0x1\n\tWTS_CONSOLE_DISCONNECT     = 0x2\n\tWTS_REMOTE_CONNECT         = 0x3\n\tWTS_REMOTE_DISCONNECT      = 0x4\n\tWTS_SESSION_LOGON          = 0x5\n\tWTS_SESSION_LOGOFF         = 0x6\n\tWTS_SESSION_LOCK           = 0x7\n\tWTS_SESSION_UNLOCK         = 0x8\n\tWTS_SESSION_REMOTE_CONTROL = 0x9\n\tWTS_SESSION_CREATE         = 0xa\n\tWTS_SESSION_TERMINATE      = 0xb\n)\n\nconst (\n\tWTSActive       = 0\n\tWTSConnected    = 1\n\tWTSConnectQuery = 2\n\tWTSShadow       = 3\n\tWTSDisconnected = 4\n\tWTSIdle         = 5\n\tWTSListen       = 6\n\tWTSReset        = 7\n\tWTSDown         = 8\n\tWTSInit         = 9\n)\n\ntype WTSSESSION_NOTIFICATION struct {\n\tSize      uint32\n\tSessionID uint32\n}\n\ntype WTS_SESSION_INFO struct {\n\tSessionID         uint32\n\tWindowStationName *uint16\n\tState             uint32\n}\n\n//sys WTSQueryUserToken(session uint32, token *Token) (err error) = wtsapi32.WTSQueryUserToken\n//sys WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessions **WTS_SESSION_INFO, count *uint32) (err error) = wtsapi32.WTSEnumerateSessionsW\n//sys WTSFreeMemory(ptr uintptr) = wtsapi32.WTSFreeMemory\n//sys WTSGetActiveConsoleSessionId() (sessionID uint32)\n\ntype ACL struct {\n\taclRevision byte\n\tsbz1        byte\n\taclSize     uint16\n\tAceCount    uint16\n\tsbz2        uint16\n}\n\ntype SECURITY_DESCRIPTOR struct {\n\trevision byte\n\tsbz1     byte\n\tcontrol  SECURITY_DESCRIPTOR_CONTROL\n\towner    *SID\n\tgroup    *SID\n\tsacl     *ACL\n\tdacl     *ACL\n}\n\ntype SECURITY_QUALITY_OF_SERVICE struct {\n\tLength              uint32\n\tImpersonationLevel  uint32\n\tContextTrackingMode byte\n\tEffectiveOnly       byte\n}\n\n// Constants for the ContextTrackingMode field of SECURITY_QUALITY_OF_SERVICE.\nconst (\n\tSECURITY_STATIC_TRACKING  = 0\n\tSECURITY_DYNAMIC_TRACKING = 1\n)\n\ntype SecurityAttributes struct {\n\tLength             uint32\n\tSecurityDescriptor *SECURITY_DESCRIPTOR\n\tInheritHandle      uint32\n}\n\ntype SE_OBJECT_TYPE uint32\n\n// Constants for type SE_OBJECT_TYPE\nconst (\n\tSE_UNKNOWN_OBJECT_TYPE     = 0\n\tSE_FILE_OBJECT             = 1\n\tSE_SERVICE                 = 2\n\tSE_PRINTER                 = 3\n\tSE_REGISTRY_KEY            = 4\n\tSE_LMSHARE                 = 5\n\tSE_KERNEL_OBJECT           = 6\n\tSE_WINDOW_OBJECT           = 7\n\tSE_DS_OBJECT               = 8\n\tSE_DS_OBJECT_ALL           = 9\n\tSE_PROVIDER_DEFINED_OBJECT = 10\n\tSE_WMIGUID_OBJECT          = 11\n\tSE_REGISTRY_WOW64_32KEY    = 12\n\tSE_REGISTRY_WOW64_64KEY    = 13\n)\n\ntype SECURITY_INFORMATION uint32\n\n// Constants for type SECURITY_INFORMATION\nconst (\n\tOWNER_SECURITY_INFORMATION            = 0x00000001\n\tGROUP_SECURITY_INFORMATION            = 0x00000002\n\tDACL_SECURITY_INFORMATION             = 0x00000004\n\tSACL_SECURITY_INFORMATION             = 0x00000008\n\tLABEL_SECURITY_INFORMATION            = 0x00000010\n\tATTRIBUTE_SECURITY_INFORMATION        = 0x00000020\n\tSCOPE_SECURITY_INFORMATION            = 0x00000040\n\tBACKUP_SECURITY_INFORMATION           = 0x00010000\n\tPROTECTED_DACL_SECURITY_INFORMATION   = 0x80000000\n\tPROTECTED_SACL_SECURITY_INFORMATION   = 0x40000000\n\tUNPROTECTED_DACL_SECURITY_INFORMATION = 0x20000000\n\tUNPROTECTED_SACL_SECURITY_INFORMATION = 0x10000000\n)\n\ntype SECURITY_DESCRIPTOR_CONTROL uint16\n\n// Constants for type SECURITY_DESCRIPTOR_CONTROL\nconst (\n\tSE_OWNER_DEFAULTED       = 0x0001\n\tSE_GROUP_DEFAULTED       = 0x0002\n\tSE_DACL_PRESENT          = 0x0004\n\tSE_DACL_DEFAULTED        = 0x0008\n\tSE_SACL_PRESENT          = 0x0010\n\tSE_SACL_DEFAULTED        = 0x0020\n\tSE_DACL_AUTO_INHERIT_REQ = 0x0100\n\tSE_SACL_AUTO_INHERIT_REQ = 0x0200\n\tSE_DACL_AUTO_INHERITED   = 0x0400\n\tSE_SACL_AUTO_INHERITED   = 0x0800\n\tSE_DACL_PROTECTED        = 0x1000\n\tSE_SACL_PROTECTED        = 0x2000\n\tSE_RM_CONTROL_VALID      = 0x4000\n\tSE_SELF_RELATIVE         = 0x8000\n)\n\ntype ACCESS_MASK uint32\n\n// Constants for type ACCESS_MASK\nconst (\n\tDELETE                   = 0x00010000\n\tREAD_CONTROL             = 0x00020000\n\tWRITE_DAC                = 0x00040000\n\tWRITE_OWNER              = 0x00080000\n\tSYNCHRONIZE              = 0x00100000\n\tSTANDARD_RIGHTS_REQUIRED = 0x000F0000\n\tSTANDARD_RIGHTS_READ     = READ_CONTROL\n\tSTANDARD_RIGHTS_WRITE    = READ_CONTROL\n\tSTANDARD_RIGHTS_EXECUTE  = READ_CONTROL\n\tSTANDARD_RIGHTS_ALL      = 0x001F0000\n\tSPECIFIC_RIGHTS_ALL      = 0x0000FFFF\n\tACCESS_SYSTEM_SECURITY   = 0x01000000\n\tMAXIMUM_ALLOWED          = 0x02000000\n\tGENERIC_READ             = 0x80000000\n\tGENERIC_WRITE            = 0x40000000\n\tGENERIC_EXECUTE          = 0x20000000\n\tGENERIC_ALL              = 0x10000000\n)\n\ntype ACCESS_MODE uint32\n\n// Constants for type ACCESS_MODE\nconst (\n\tNOT_USED_ACCESS   = 0\n\tGRANT_ACCESS      = 1\n\tSET_ACCESS        = 2\n\tDENY_ACCESS       = 3\n\tREVOKE_ACCESS     = 4\n\tSET_AUDIT_SUCCESS = 5\n\tSET_AUDIT_FAILURE = 6\n)\n\n// Constants for AceFlags and Inheritance fields\nconst (\n\tNO_INHERITANCE                     = 0x0\n\tSUB_OBJECTS_ONLY_INHERIT           = 0x1\n\tSUB_CONTAINERS_ONLY_INHERIT        = 0x2\n\tSUB_CONTAINERS_AND_OBJECTS_INHERIT = 0x3\n\tINHERIT_NO_PROPAGATE               = 0x4\n\tINHERIT_ONLY                       = 0x8\n\tINHERITED_ACCESS_ENTRY             = 0x10\n\tINHERITED_PARENT                   = 0x10000000\n\tINHERITED_GRANDPARENT              = 0x20000000\n\tOBJECT_INHERIT_ACE                 = 0x1\n\tCONTAINER_INHERIT_ACE              = 0x2\n\tNO_PROPAGATE_INHERIT_ACE           = 0x4\n\tINHERIT_ONLY_ACE                   = 0x8\n\tINHERITED_ACE                      = 0x10\n\tVALID_INHERIT_FLAGS                = 0x1F\n)\n\ntype MULTIPLE_TRUSTEE_OPERATION uint32\n\n// Constants for MULTIPLE_TRUSTEE_OPERATION\nconst (\n\tNO_MULTIPLE_TRUSTEE    = 0\n\tTRUSTEE_IS_IMPERSONATE = 1\n)\n\ntype TRUSTEE_FORM uint32\n\n// Constants for TRUSTEE_FORM\nconst (\n\tTRUSTEE_IS_SID              = 0\n\tTRUSTEE_IS_NAME             = 1\n\tTRUSTEE_BAD_FORM            = 2\n\tTRUSTEE_IS_OBJECTS_AND_SID  = 3\n\tTRUSTEE_IS_OBJECTS_AND_NAME = 4\n)\n\ntype TRUSTEE_TYPE uint32\n\n// Constants for TRUSTEE_TYPE\nconst (\n\tTRUSTEE_IS_UNKNOWN          = 0\n\tTRUSTEE_IS_USER             = 1\n\tTRUSTEE_IS_GROUP            = 2\n\tTRUSTEE_IS_DOMAIN           = 3\n\tTRUSTEE_IS_ALIAS            = 4\n\tTRUSTEE_IS_WELL_KNOWN_GROUP = 5\n\tTRUSTEE_IS_DELETED          = 6\n\tTRUSTEE_IS_INVALID          = 7\n\tTRUSTEE_IS_COMPUTER         = 8\n)\n\n// Constants for ObjectsPresent field\nconst (\n\tACE_OBJECT_TYPE_PRESENT           = 0x1\n\tACE_INHERITED_OBJECT_TYPE_PRESENT = 0x2\n)\n\ntype EXPLICIT_ACCESS struct {\n\tAccessPermissions ACCESS_MASK\n\tAccessMode        ACCESS_MODE\n\tInheritance       uint32\n\tTrustee           TRUSTEE\n}\n\n// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-ace_header\ntype ACE_HEADER struct {\n\tAceType  uint8\n\tAceFlags uint8\n\tAceSize  uint16\n}\n\n// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-access_allowed_ace\ntype ACCESS_ALLOWED_ACE struct {\n\tHeader   ACE_HEADER\n\tMask     ACCESS_MASK\n\tSidStart uint32\n}\n\nconst (\n\t// Constants for AceType\n\t// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-ace_header\n\tACCESS_ALLOWED_ACE_TYPE = 0\n\tACCESS_DENIED_ACE_TYPE  = 1\n)\n\n// This type is the union inside of TRUSTEE and must be created using one of the TrusteeValueFrom* functions.\ntype TrusteeValue uintptr\n\nfunc TrusteeValueFromString(str string) TrusteeValue {\n\treturn TrusteeValue(unsafe.Pointer(StringToUTF16Ptr(str)))\n}\nfunc TrusteeValueFromSID(sid *SID) TrusteeValue {\n\treturn TrusteeValue(unsafe.Pointer(sid))\n}\nfunc TrusteeValueFromObjectsAndSid(objectsAndSid *OBJECTS_AND_SID) TrusteeValue {\n\treturn TrusteeValue(unsafe.Pointer(objectsAndSid))\n}\nfunc TrusteeValueFromObjectsAndName(objectsAndName *OBJECTS_AND_NAME) TrusteeValue {\n\treturn TrusteeValue(unsafe.Pointer(objectsAndName))\n}\n\ntype TRUSTEE struct {\n\tMultipleTrustee          *TRUSTEE\n\tMultipleTrusteeOperation MULTIPLE_TRUSTEE_OPERATION\n\tTrusteeForm              TRUSTEE_FORM\n\tTrusteeType              TRUSTEE_TYPE\n\tTrusteeValue             TrusteeValue\n}\n\ntype OBJECTS_AND_SID struct {\n\tObjectsPresent          uint32\n\tObjectTypeGuid          GUID\n\tInheritedObjectTypeGuid GUID\n\tSid                     *SID\n}\n\ntype OBJECTS_AND_NAME struct {\n\tObjectsPresent          uint32\n\tObjectType              SE_OBJECT_TYPE\n\tObjectTypeName          *uint16\n\tInheritedObjectTypeName *uint16\n\tName                    *uint16\n}\n\n//sys\tgetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) = advapi32.GetSecurityInfo\n//sys\tSetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) = advapi32.SetSecurityInfo\n//sys\tgetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) = advapi32.GetNamedSecurityInfoW\n//sys\tSetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) = advapi32.SetNamedSecurityInfoW\n//sys\tSetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) = advapi32.SetKernelObjectSecurity\n\n//sys\tbuildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, countAccessEntries uint32, accessEntries *EXPLICIT_ACCESS, countAuditEntries uint32, auditEntries *EXPLICIT_ACCESS, oldSecurityDescriptor *SECURITY_DESCRIPTOR, sizeNewSecurityDescriptor *uint32, newSecurityDescriptor **SECURITY_DESCRIPTOR) (ret error) = advapi32.BuildSecurityDescriptorW\n//sys\tinitializeSecurityDescriptor(absoluteSD *SECURITY_DESCRIPTOR, revision uint32) (err error) = advapi32.InitializeSecurityDescriptor\n\n//sys\tgetSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, control *SECURITY_DESCRIPTOR_CONTROL, revision *uint32) (err error) = advapi32.GetSecurityDescriptorControl\n//sys\tgetSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent *bool, dacl **ACL, daclDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorDacl\n//sys\tgetSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent *bool, sacl **ACL, saclDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorSacl\n//sys\tgetSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner **SID, ownerDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorOwner\n//sys\tgetSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group **SID, groupDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorGroup\n//sys\tgetSecurityDescriptorLength(sd *SECURITY_DESCRIPTOR) (len uint32) = advapi32.GetSecurityDescriptorLength\n//sys\tgetSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) (ret error) [failretval!=0] = advapi32.GetSecurityDescriptorRMControl\n//sys\tisValidSecurityDescriptor(sd *SECURITY_DESCRIPTOR) (isValid bool) = advapi32.IsValidSecurityDescriptor\n\n//sys\tsetSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) (err error) = advapi32.SetSecurityDescriptorControl\n//sys\tsetSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent bool, dacl *ACL, daclDefaulted bool) (err error) = advapi32.SetSecurityDescriptorDacl\n//sys\tsetSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent bool, sacl *ACL, saclDefaulted bool) (err error) = advapi32.SetSecurityDescriptorSacl\n//sys\tsetSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner *SID, ownerDefaulted bool) (err error) = advapi32.SetSecurityDescriptorOwner\n//sys\tsetSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group *SID, groupDefaulted bool) (err error) = advapi32.SetSecurityDescriptorGroup\n//sys\tsetSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) = advapi32.SetSecurityDescriptorRMControl\n\n//sys\tconvertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) = advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW\n//sys\tconvertSecurityDescriptorToStringSecurityDescriptor(sd *SECURITY_DESCRIPTOR, revision uint32, securityInformation SECURITY_INFORMATION, str **uint16, strLen *uint32) (err error) = advapi32.ConvertSecurityDescriptorToStringSecurityDescriptorW\n\n//sys\tmakeAbsoluteSD(selfRelativeSD *SECURITY_DESCRIPTOR, absoluteSD *SECURITY_DESCRIPTOR, absoluteSDSize *uint32, dacl *ACL, daclSize *uint32, sacl *ACL, saclSize *uint32, owner *SID, ownerSize *uint32, group *SID, groupSize *uint32) (err error) = advapi32.MakeAbsoluteSD\n//sys\tmakeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) = advapi32.MakeSelfRelativeSD\n\n//sys\tsetEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) = advapi32.SetEntriesInAclW\n//sys\tGetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (err error) = advapi32.GetAce\n\n// Control returns the security descriptor control bits.\nfunc (sd *SECURITY_DESCRIPTOR) Control() (control SECURITY_DESCRIPTOR_CONTROL, revision uint32, err error) {\n\terr = getSecurityDescriptorControl(sd, &control, &revision)\n\treturn\n}\n\n// SetControl sets the security descriptor control bits.\nfunc (sd *SECURITY_DESCRIPTOR) SetControl(controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) error {\n\treturn setSecurityDescriptorControl(sd, controlBitsOfInterest, controlBitsToSet)\n}\n\n// RMControl returns the security descriptor resource manager control bits.\nfunc (sd *SECURITY_DESCRIPTOR) RMControl() (control uint8, err error) {\n\terr = getSecurityDescriptorRMControl(sd, &control)\n\treturn\n}\n\n// SetRMControl sets the security descriptor resource manager control bits.\nfunc (sd *SECURITY_DESCRIPTOR) SetRMControl(rmControl uint8) {\n\tsetSecurityDescriptorRMControl(sd, &rmControl)\n}\n\n// DACL returns the security descriptor DACL and whether it was defaulted. The dacl return value may be nil\n// if a DACL exists but is an \"empty DACL\", meaning fully permissive. If the DACL does not exist, err returns\n// ERROR_OBJECT_NOT_FOUND.\nfunc (sd *SECURITY_DESCRIPTOR) DACL() (dacl *ACL, defaulted bool, err error) {\n\tvar present bool\n\terr = getSecurityDescriptorDacl(sd, &present, &dacl, &defaulted)\n\tif !present {\n\t\terr = ERROR_OBJECT_NOT_FOUND\n\t}\n\treturn\n}\n\n// SetDACL sets the absolute security descriptor DACL.\nfunc (absoluteSD *SECURITY_DESCRIPTOR) SetDACL(dacl *ACL, present, defaulted bool) error {\n\treturn setSecurityDescriptorDacl(absoluteSD, present, dacl, defaulted)\n}\n\n// SACL returns the security descriptor SACL and whether it was defaulted. The sacl return value may be nil\n// if a SACL exists but is an \"empty SACL\", meaning fully permissive. If the SACL does not exist, err returns\n// ERROR_OBJECT_NOT_FOUND.\nfunc (sd *SECURITY_DESCRIPTOR) SACL() (sacl *ACL, defaulted bool, err error) {\n\tvar present bool\n\terr = getSecurityDescriptorSacl(sd, &present, &sacl, &defaulted)\n\tif !present {\n\t\terr = ERROR_OBJECT_NOT_FOUND\n\t}\n\treturn\n}\n\n// SetSACL sets the absolute security descriptor SACL.\nfunc (absoluteSD *SECURITY_DESCRIPTOR) SetSACL(sacl *ACL, present, defaulted bool) error {\n\treturn setSecurityDescriptorSacl(absoluteSD, present, sacl, defaulted)\n}\n\n// Owner returns the security descriptor owner and whether it was defaulted.\nfunc (sd *SECURITY_DESCRIPTOR) Owner() (owner *SID, defaulted bool, err error) {\n\terr = getSecurityDescriptorOwner(sd, &owner, &defaulted)\n\treturn\n}\n\n// SetOwner sets the absolute security descriptor owner.\nfunc (absoluteSD *SECURITY_DESCRIPTOR) SetOwner(owner *SID, defaulted bool) error {\n\treturn setSecurityDescriptorOwner(absoluteSD, owner, defaulted)\n}\n\n// Group returns the security descriptor group and whether it was defaulted.\nfunc (sd *SECURITY_DESCRIPTOR) Group() (group *SID, defaulted bool, err error) {\n\terr = getSecurityDescriptorGroup(sd, &group, &defaulted)\n\treturn\n}\n\n// SetGroup sets the absolute security descriptor owner.\nfunc (absoluteSD *SECURITY_DESCRIPTOR) SetGroup(group *SID, defaulted bool) error {\n\treturn setSecurityDescriptorGroup(absoluteSD, group, defaulted)\n}\n\n// Length returns the length of the security descriptor.\nfunc (sd *SECURITY_DESCRIPTOR) Length() uint32 {\n\treturn getSecurityDescriptorLength(sd)\n}\n\n// IsValid returns whether the security descriptor is valid.\nfunc (sd *SECURITY_DESCRIPTOR) IsValid() bool {\n\treturn isValidSecurityDescriptor(sd)\n}\n\n// String returns the SDDL form of the security descriptor, with a function signature that can be\n// used with %v formatting directives.\nfunc (sd *SECURITY_DESCRIPTOR) String() string {\n\tvar sddl *uint16\n\terr := convertSecurityDescriptorToStringSecurityDescriptor(sd, 1, 0xff, &sddl, nil)\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\tdefer LocalFree(Handle(unsafe.Pointer(sddl)))\n\treturn UTF16PtrToString(sddl)\n}\n\n// ToAbsolute converts a self-relative security descriptor into an absolute one.\nfunc (selfRelativeSD *SECURITY_DESCRIPTOR) ToAbsolute() (absoluteSD *SECURITY_DESCRIPTOR, err error) {\n\tcontrol, _, err := selfRelativeSD.Control()\n\tif err != nil {\n\t\treturn\n\t}\n\tif control&SE_SELF_RELATIVE == 0 {\n\t\terr = ERROR_INVALID_PARAMETER\n\t\treturn\n\t}\n\tvar absoluteSDSize, daclSize, saclSize, ownerSize, groupSize uint32\n\terr = makeAbsoluteSD(selfRelativeSD, nil, &absoluteSDSize,\n\t\tnil, &daclSize, nil, &saclSize, nil, &ownerSize, nil, &groupSize)\n\tswitch err {\n\tcase ERROR_INSUFFICIENT_BUFFER:\n\tcase nil:\n\t\t// makeAbsoluteSD is expected to fail, but it succeeds.\n\t\treturn nil, ERROR_INTERNAL_ERROR\n\tdefault:\n\t\treturn nil, err\n\t}\n\tif absoluteSDSize > 0 {\n\t\tabsoluteSD = new(SECURITY_DESCRIPTOR)\n\t\tif unsafe.Sizeof(*absoluteSD) < uintptr(absoluteSDSize) {\n\t\t\tpanic(\"sizeof(SECURITY_DESCRIPTOR) too small\")\n\t\t}\n\t}\n\tvar (\n\t\tdacl  *ACL\n\t\tsacl  *ACL\n\t\towner *SID\n\t\tgroup *SID\n\t)\n\tif daclSize > 0 {\n\t\tdacl = (*ACL)(unsafe.Pointer(unsafe.SliceData(make([]byte, daclSize))))\n\t}\n\tif saclSize > 0 {\n\t\tsacl = (*ACL)(unsafe.Pointer(unsafe.SliceData(make([]byte, saclSize))))\n\t}\n\tif ownerSize > 0 {\n\t\towner = (*SID)(unsafe.Pointer(unsafe.SliceData(make([]byte, ownerSize))))\n\t}\n\tif groupSize > 0 {\n\t\tgroup = (*SID)(unsafe.Pointer(unsafe.SliceData(make([]byte, groupSize))))\n\t}\n\t// We call into Windows via makeAbsoluteSD, which sets up\n\t// pointers within absoluteSD that point to other chunks of memory\n\t// we pass into makeAbsoluteSD, and that happens outside the view of the GC.\n\t// We therefore take some care here to then verify the pointers are as we expect\n\t// and set them explicitly in view of the GC. See https://go.dev/issue/73199.\n\t// TODO: consider weak pointers once Go 1.24 is appropriate. See suggestion in https://go.dev/cl/663575.\n\terr = makeAbsoluteSD(selfRelativeSD, absoluteSD, &absoluteSDSize,\n\t\tdacl, &daclSize, sacl, &saclSize, owner, &ownerSize, group, &groupSize)\n\tif err != nil {\n\t\t// Don't return absoluteSD, which might be partially initialized.\n\t\treturn nil, err\n\t}\n\t// Before using any fields, verify absoluteSD is in the format we expect according to Windows.\n\t// See https://learn.microsoft.com/en-us/windows/win32/secauthz/absolute-and-self-relative-security-descriptors\n\tabsControl, _, err := absoluteSD.Control()\n\tif err != nil {\n\t\tpanic(\"absoluteSD: \" + err.Error())\n\t}\n\tif absControl&SE_SELF_RELATIVE != 0 {\n\t\tpanic(\"absoluteSD not in absolute format\")\n\t}\n\tif absoluteSD.dacl != dacl {\n\t\tpanic(\"dacl pointer mismatch\")\n\t}\n\tif absoluteSD.sacl != sacl {\n\t\tpanic(\"sacl pointer mismatch\")\n\t}\n\tif absoluteSD.owner != owner {\n\t\tpanic(\"owner pointer mismatch\")\n\t}\n\tif absoluteSD.group != group {\n\t\tpanic(\"group pointer mismatch\")\n\t}\n\tabsoluteSD.dacl = dacl\n\tabsoluteSD.sacl = sacl\n\tabsoluteSD.owner = owner\n\tabsoluteSD.group = group\n\n\treturn\n}\n\n// ToSelfRelative converts an absolute security descriptor into a self-relative one.\nfunc (absoluteSD *SECURITY_DESCRIPTOR) ToSelfRelative() (selfRelativeSD *SECURITY_DESCRIPTOR, err error) {\n\tcontrol, _, err := absoluteSD.Control()\n\tif err != nil {\n\t\treturn\n\t}\n\tif control&SE_SELF_RELATIVE != 0 {\n\t\terr = ERROR_INVALID_PARAMETER\n\t\treturn\n\t}\n\tvar selfRelativeSDSize uint32\n\terr = makeSelfRelativeSD(absoluteSD, nil, &selfRelativeSDSize)\n\tswitch err {\n\tcase ERROR_INSUFFICIENT_BUFFER:\n\tcase nil:\n\t\t// makeSelfRelativeSD is expected to fail, but it succeeds.\n\t\treturn nil, ERROR_INTERNAL_ERROR\n\tdefault:\n\t\treturn nil, err\n\t}\n\tif selfRelativeSDSize > 0 {\n\t\tselfRelativeSD = (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&make([]byte, selfRelativeSDSize)[0]))\n\t}\n\terr = makeSelfRelativeSD(absoluteSD, selfRelativeSD, &selfRelativeSDSize)\n\treturn\n}\n\nfunc (selfRelativeSD *SECURITY_DESCRIPTOR) copySelfRelativeSecurityDescriptor() *SECURITY_DESCRIPTOR {\n\tsdLen := int(selfRelativeSD.Length())\n\tconst min = int(unsafe.Sizeof(SECURITY_DESCRIPTOR{}))\n\tif sdLen < min {\n\t\tsdLen = min\n\t}\n\n\tsrc := unsafe.Slice((*byte)(unsafe.Pointer(selfRelativeSD)), sdLen)\n\t// SECURITY_DESCRIPTOR has pointers in it, which means checkptr expects for it to\n\t// be aligned properly. When we're copying a Windows-allocated struct to a\n\t// Go-allocated one, make sure that the Go allocation is aligned to the\n\t// pointer size.\n\tconst psize = int(unsafe.Sizeof(uintptr(0)))\n\talloc := make([]uintptr, (sdLen+psize-1)/psize)\n\tdst := unsafe.Slice((*byte)(unsafe.Pointer(&alloc[0])), sdLen)\n\tcopy(dst, src)\n\treturn (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&dst[0]))\n}\n\n// SecurityDescriptorFromString converts an SDDL string describing a security descriptor into a\n// self-relative security descriptor object allocated on the Go heap.\nfunc SecurityDescriptorFromString(sddl string) (sd *SECURITY_DESCRIPTOR, err error) {\n\tvar winHeapSD *SECURITY_DESCRIPTOR\n\terr = convertStringSecurityDescriptorToSecurityDescriptor(sddl, 1, &winHeapSD, nil)\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer LocalFree(Handle(unsafe.Pointer(winHeapSD)))\n\treturn winHeapSD.copySelfRelativeSecurityDescriptor(), nil\n}\n\n// GetSecurityInfo queries the security information for a given handle and returns the self-relative security\n// descriptor result on the Go heap.\nfunc GetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION) (sd *SECURITY_DESCRIPTOR, err error) {\n\tvar winHeapSD *SECURITY_DESCRIPTOR\n\terr = getSecurityInfo(handle, objectType, securityInformation, nil, nil, nil, nil, &winHeapSD)\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer LocalFree(Handle(unsafe.Pointer(winHeapSD)))\n\treturn winHeapSD.copySelfRelativeSecurityDescriptor(), nil\n}\n\n// GetNamedSecurityInfo queries the security information for a given named object and returns the self-relative security\n// descriptor result on the Go heap.\nfunc GetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION) (sd *SECURITY_DESCRIPTOR, err error) {\n\tvar winHeapSD *SECURITY_DESCRIPTOR\n\terr = getNamedSecurityInfo(objectName, objectType, securityInformation, nil, nil, nil, nil, &winHeapSD)\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer LocalFree(Handle(unsafe.Pointer(winHeapSD)))\n\treturn winHeapSD.copySelfRelativeSecurityDescriptor(), nil\n}\n\n// BuildSecurityDescriptor makes a new security descriptor using the input trustees, explicit access lists, and\n// prior security descriptor to be merged, any of which can be nil, returning the self-relative security descriptor\n// result on the Go heap.\nfunc BuildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, accessEntries []EXPLICIT_ACCESS, auditEntries []EXPLICIT_ACCESS, mergedSecurityDescriptor *SECURITY_DESCRIPTOR) (sd *SECURITY_DESCRIPTOR, err error) {\n\tvar winHeapSD *SECURITY_DESCRIPTOR\n\tvar winHeapSDSize uint32\n\tvar firstAccessEntry *EXPLICIT_ACCESS\n\tif len(accessEntries) > 0 {\n\t\tfirstAccessEntry = &accessEntries[0]\n\t}\n\tvar firstAuditEntry *EXPLICIT_ACCESS\n\tif len(auditEntries) > 0 {\n\t\tfirstAuditEntry = &auditEntries[0]\n\t}\n\terr = buildSecurityDescriptor(owner, group, uint32(len(accessEntries)), firstAccessEntry, uint32(len(auditEntries)), firstAuditEntry, mergedSecurityDescriptor, &winHeapSDSize, &winHeapSD)\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer LocalFree(Handle(unsafe.Pointer(winHeapSD)))\n\treturn winHeapSD.copySelfRelativeSecurityDescriptor(), nil\n}\n\n// NewSecurityDescriptor creates and initializes a new absolute security descriptor.\nfunc NewSecurityDescriptor() (absoluteSD *SECURITY_DESCRIPTOR, err error) {\n\tabsoluteSD = &SECURITY_DESCRIPTOR{}\n\terr = initializeSecurityDescriptor(absoluteSD, 1)\n\treturn\n}\n\n// ACLFromEntries returns a new ACL on the Go heap containing a list of explicit entries as well as those of another ACL.\n// Both explicitEntries and mergedACL are optional and can be nil.\nfunc ACLFromEntries(explicitEntries []EXPLICIT_ACCESS, mergedACL *ACL) (acl *ACL, err error) {\n\tvar firstExplicitEntry *EXPLICIT_ACCESS\n\tif len(explicitEntries) > 0 {\n\t\tfirstExplicitEntry = &explicitEntries[0]\n\t}\n\tvar winHeapACL *ACL\n\terr = setEntriesInAcl(uint32(len(explicitEntries)), firstExplicitEntry, mergedACL, &winHeapACL)\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer LocalFree(Handle(unsafe.Pointer(winHeapACL)))\n\taclBytes := make([]byte, winHeapACL.aclSize)\n\tcopy(aclBytes, (*[(1 << 31) - 1]byte)(unsafe.Pointer(winHeapACL))[:len(aclBytes):len(aclBytes)])\n\treturn (*ACL)(unsafe.Pointer(&aclBytes[0])), nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/service.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 windows\n\npackage windows\n\nconst (\n\tSC_MANAGER_CONNECT            = 1\n\tSC_MANAGER_CREATE_SERVICE     = 2\n\tSC_MANAGER_ENUMERATE_SERVICE  = 4\n\tSC_MANAGER_LOCK               = 8\n\tSC_MANAGER_QUERY_LOCK_STATUS  = 16\n\tSC_MANAGER_MODIFY_BOOT_CONFIG = 32\n\tSC_MANAGER_ALL_ACCESS         = 0xf003f\n)\n\nconst (\n\tSERVICE_KERNEL_DRIVER       = 1\n\tSERVICE_FILE_SYSTEM_DRIVER  = 2\n\tSERVICE_ADAPTER             = 4\n\tSERVICE_RECOGNIZER_DRIVER   = 8\n\tSERVICE_WIN32_OWN_PROCESS   = 16\n\tSERVICE_WIN32_SHARE_PROCESS = 32\n\tSERVICE_WIN32               = SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS\n\tSERVICE_INTERACTIVE_PROCESS = 256\n\tSERVICE_DRIVER              = SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER\n\tSERVICE_TYPE_ALL            = SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS\n\n\tSERVICE_BOOT_START   = 0\n\tSERVICE_SYSTEM_START = 1\n\tSERVICE_AUTO_START   = 2\n\tSERVICE_DEMAND_START = 3\n\tSERVICE_DISABLED     = 4\n\n\tSERVICE_ERROR_IGNORE   = 0\n\tSERVICE_ERROR_NORMAL   = 1\n\tSERVICE_ERROR_SEVERE   = 2\n\tSERVICE_ERROR_CRITICAL = 3\n\n\tSC_STATUS_PROCESS_INFO = 0\n\n\tSC_ACTION_NONE        = 0\n\tSC_ACTION_RESTART     = 1\n\tSC_ACTION_REBOOT      = 2\n\tSC_ACTION_RUN_COMMAND = 3\n\n\tSERVICE_STOPPED          = 1\n\tSERVICE_START_PENDING    = 2\n\tSERVICE_STOP_PENDING     = 3\n\tSERVICE_RUNNING          = 4\n\tSERVICE_CONTINUE_PENDING = 5\n\tSERVICE_PAUSE_PENDING    = 6\n\tSERVICE_PAUSED           = 7\n\tSERVICE_NO_CHANGE        = 0xffffffff\n\n\tSERVICE_ACCEPT_STOP                  = 1\n\tSERVICE_ACCEPT_PAUSE_CONTINUE        = 2\n\tSERVICE_ACCEPT_SHUTDOWN              = 4\n\tSERVICE_ACCEPT_PARAMCHANGE           = 8\n\tSERVICE_ACCEPT_NETBINDCHANGE         = 16\n\tSERVICE_ACCEPT_HARDWAREPROFILECHANGE = 32\n\tSERVICE_ACCEPT_POWEREVENT            = 64\n\tSERVICE_ACCEPT_SESSIONCHANGE         = 128\n\tSERVICE_ACCEPT_PRESHUTDOWN           = 256\n\n\tSERVICE_CONTROL_STOP                  = 1\n\tSERVICE_CONTROL_PAUSE                 = 2\n\tSERVICE_CONTROL_CONTINUE              = 3\n\tSERVICE_CONTROL_INTERROGATE           = 4\n\tSERVICE_CONTROL_SHUTDOWN              = 5\n\tSERVICE_CONTROL_PARAMCHANGE           = 6\n\tSERVICE_CONTROL_NETBINDADD            = 7\n\tSERVICE_CONTROL_NETBINDREMOVE         = 8\n\tSERVICE_CONTROL_NETBINDENABLE         = 9\n\tSERVICE_CONTROL_NETBINDDISABLE        = 10\n\tSERVICE_CONTROL_DEVICEEVENT           = 11\n\tSERVICE_CONTROL_HARDWAREPROFILECHANGE = 12\n\tSERVICE_CONTROL_POWEREVENT            = 13\n\tSERVICE_CONTROL_SESSIONCHANGE         = 14\n\tSERVICE_CONTROL_PRESHUTDOWN           = 15\n\n\tSERVICE_ACTIVE    = 1\n\tSERVICE_INACTIVE  = 2\n\tSERVICE_STATE_ALL = 3\n\n\tSERVICE_QUERY_CONFIG         = 1\n\tSERVICE_CHANGE_CONFIG        = 2\n\tSERVICE_QUERY_STATUS         = 4\n\tSERVICE_ENUMERATE_DEPENDENTS = 8\n\tSERVICE_START                = 16\n\tSERVICE_STOP                 = 32\n\tSERVICE_PAUSE_CONTINUE       = 64\n\tSERVICE_INTERROGATE          = 128\n\tSERVICE_USER_DEFINED_CONTROL = 256\n\tSERVICE_ALL_ACCESS           = STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL\n\n\tSERVICE_RUNS_IN_SYSTEM_PROCESS = 1\n\n\tSERVICE_CONFIG_DESCRIPTION              = 1\n\tSERVICE_CONFIG_FAILURE_ACTIONS          = 2\n\tSERVICE_CONFIG_DELAYED_AUTO_START_INFO  = 3\n\tSERVICE_CONFIG_FAILURE_ACTIONS_FLAG     = 4\n\tSERVICE_CONFIG_SERVICE_SID_INFO         = 5\n\tSERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO = 6\n\tSERVICE_CONFIG_PRESHUTDOWN_INFO         = 7\n\tSERVICE_CONFIG_TRIGGER_INFO             = 8\n\tSERVICE_CONFIG_PREFERRED_NODE           = 9\n\tSERVICE_CONFIG_LAUNCH_PROTECTED         = 12\n\n\tSERVICE_SID_TYPE_NONE         = 0\n\tSERVICE_SID_TYPE_UNRESTRICTED = 1\n\tSERVICE_SID_TYPE_RESTRICTED   = 2 | SERVICE_SID_TYPE_UNRESTRICTED\n\n\tSC_ENUM_PROCESS_INFO = 0\n\n\tSERVICE_NOTIFY_STATUS_CHANGE    = 2\n\tSERVICE_NOTIFY_STOPPED          = 0x00000001\n\tSERVICE_NOTIFY_START_PENDING    = 0x00000002\n\tSERVICE_NOTIFY_STOP_PENDING     = 0x00000004\n\tSERVICE_NOTIFY_RUNNING          = 0x00000008\n\tSERVICE_NOTIFY_CONTINUE_PENDING = 0x00000010\n\tSERVICE_NOTIFY_PAUSE_PENDING    = 0x00000020\n\tSERVICE_NOTIFY_PAUSED           = 0x00000040\n\tSERVICE_NOTIFY_CREATED          = 0x00000080\n\tSERVICE_NOTIFY_DELETED          = 0x00000100\n\tSERVICE_NOTIFY_DELETE_PENDING   = 0x00000200\n\n\tSC_EVENT_DATABASE_CHANGE = 0\n\tSC_EVENT_PROPERTY_CHANGE = 1\n\tSC_EVENT_STATUS_CHANGE   = 2\n\n\tSERVICE_START_REASON_DEMAND             = 0x00000001\n\tSERVICE_START_REASON_AUTO               = 0x00000002\n\tSERVICE_START_REASON_TRIGGER            = 0x00000004\n\tSERVICE_START_REASON_RESTART_ON_FAILURE = 0x00000008\n\tSERVICE_START_REASON_DELAYEDAUTO        = 0x00000010\n\n\tSERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON = 1\n)\n\ntype ENUM_SERVICE_STATUS struct {\n\tServiceName   *uint16\n\tDisplayName   *uint16\n\tServiceStatus SERVICE_STATUS\n}\n\ntype SERVICE_STATUS struct {\n\tServiceType             uint32\n\tCurrentState            uint32\n\tControlsAccepted        uint32\n\tWin32ExitCode           uint32\n\tServiceSpecificExitCode uint32\n\tCheckPoint              uint32\n\tWaitHint                uint32\n}\n\ntype SERVICE_TABLE_ENTRY struct {\n\tServiceName *uint16\n\tServiceProc uintptr\n}\n\ntype QUERY_SERVICE_CONFIG struct {\n\tServiceType      uint32\n\tStartType        uint32\n\tErrorControl     uint32\n\tBinaryPathName   *uint16\n\tLoadOrderGroup   *uint16\n\tTagId            uint32\n\tDependencies     *uint16\n\tServiceStartName *uint16\n\tDisplayName      *uint16\n}\n\ntype SERVICE_DESCRIPTION struct {\n\tDescription *uint16\n}\n\ntype SERVICE_DELAYED_AUTO_START_INFO struct {\n\tIsDelayedAutoStartUp uint32\n}\n\ntype SERVICE_STATUS_PROCESS struct {\n\tServiceType             uint32\n\tCurrentState            uint32\n\tControlsAccepted        uint32\n\tWin32ExitCode           uint32\n\tServiceSpecificExitCode uint32\n\tCheckPoint              uint32\n\tWaitHint                uint32\n\tProcessId               uint32\n\tServiceFlags            uint32\n}\n\ntype ENUM_SERVICE_STATUS_PROCESS struct {\n\tServiceName          *uint16\n\tDisplayName          *uint16\n\tServiceStatusProcess SERVICE_STATUS_PROCESS\n}\n\ntype SERVICE_NOTIFY struct {\n\tVersion               uint32\n\tNotifyCallback        uintptr\n\tContext               uintptr\n\tNotificationStatus    uint32\n\tServiceStatus         SERVICE_STATUS_PROCESS\n\tNotificationTriggered uint32\n\tServiceNames          *uint16\n}\n\ntype SERVICE_FAILURE_ACTIONS struct {\n\tResetPeriod  uint32\n\tRebootMsg    *uint16\n\tCommand      *uint16\n\tActionsCount uint32\n\tActions      *SC_ACTION\n}\n\ntype SERVICE_FAILURE_ACTIONS_FLAG struct {\n\tFailureActionsOnNonCrashFailures int32\n}\n\ntype SC_ACTION struct {\n\tType  uint32\n\tDelay uint32\n}\n\ntype QUERY_SERVICE_LOCK_STATUS struct {\n\tIsLocked     uint32\n\tLockOwner    *uint16\n\tLockDuration uint32\n}\n\n//sys\tOpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenSCManagerW\n//sys\tCloseServiceHandle(handle Handle) (err error) = advapi32.CloseServiceHandle\n//sys\tCreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) [failretval==0] = advapi32.CreateServiceW\n//sys\tOpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenServiceW\n//sys\tDeleteService(service Handle) (err error) = advapi32.DeleteService\n//sys\tStartService(service Handle, numArgs uint32, argVectors **uint16) (err error) = advapi32.StartServiceW\n//sys\tQueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) = advapi32.QueryServiceStatus\n//sys\tQueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, bufSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceLockStatusW\n//sys\tControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) = advapi32.ControlService\n//sys\tStartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) = advapi32.StartServiceCtrlDispatcherW\n//sys\tSetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) = advapi32.SetServiceStatus\n//sys\tChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) = advapi32.ChangeServiceConfigW\n//sys\tQueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfigW\n//sys\tChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) = advapi32.ChangeServiceConfig2W\n//sys\tQueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfig2W\n//sys\tEnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) = advapi32.EnumServicesStatusExW\n//sys\tQueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceStatusEx\n//sys\tNotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) = advapi32.NotifyServiceStatusChangeW\n//sys\tSubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) = sechost.SubscribeServiceChangeNotifications?\n//sys\tUnsubscribeServiceChangeNotifications(subscription uintptr) = sechost.UnsubscribeServiceChangeNotifications?\n//sys\tRegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) = advapi32.RegisterServiceCtrlHandlerExW\n//sys\tQueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) = advapi32.QueryServiceDynamicInformation?\n//sys\tEnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) = advapi32.EnumDependentServicesW\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/setupapi_windows.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 windows\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"runtime\"\n\t\"strings\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// This file contains functions that wrap SetupAPI.dll and CfgMgr32.dll,\n// core system functions for managing hardware devices, drivers, and the PnP tree.\n// Information about these APIs can be found at:\n//     https://docs.microsoft.com/en-us/windows-hardware/drivers/install/setupapi\n//     https://docs.microsoft.com/en-us/windows/win32/devinst/cfgmgr32-\n\nconst (\n\tERROR_EXPECTED_SECTION_NAME                  Errno = 0x20000000 | 0xC0000000 | 0\n\tERROR_BAD_SECTION_NAME_LINE                  Errno = 0x20000000 | 0xC0000000 | 1\n\tERROR_SECTION_NAME_TOO_LONG                  Errno = 0x20000000 | 0xC0000000 | 2\n\tERROR_GENERAL_SYNTAX                         Errno = 0x20000000 | 0xC0000000 | 3\n\tERROR_WRONG_INF_STYLE                        Errno = 0x20000000 | 0xC0000000 | 0x100\n\tERROR_SECTION_NOT_FOUND                      Errno = 0x20000000 | 0xC0000000 | 0x101\n\tERROR_LINE_NOT_FOUND                         Errno = 0x20000000 | 0xC0000000 | 0x102\n\tERROR_NO_BACKUP                              Errno = 0x20000000 | 0xC0000000 | 0x103\n\tERROR_NO_ASSOCIATED_CLASS                    Errno = 0x20000000 | 0xC0000000 | 0x200\n\tERROR_CLASS_MISMATCH                         Errno = 0x20000000 | 0xC0000000 | 0x201\n\tERROR_DUPLICATE_FOUND                        Errno = 0x20000000 | 0xC0000000 | 0x202\n\tERROR_NO_DRIVER_SELECTED                     Errno = 0x20000000 | 0xC0000000 | 0x203\n\tERROR_KEY_DOES_NOT_EXIST                     Errno = 0x20000000 | 0xC0000000 | 0x204\n\tERROR_INVALID_DEVINST_NAME                   Errno = 0x20000000 | 0xC0000000 | 0x205\n\tERROR_INVALID_CLASS                          Errno = 0x20000000 | 0xC0000000 | 0x206\n\tERROR_DEVINST_ALREADY_EXISTS                 Errno = 0x20000000 | 0xC0000000 | 0x207\n\tERROR_DEVINFO_NOT_REGISTERED                 Errno = 0x20000000 | 0xC0000000 | 0x208\n\tERROR_INVALID_REG_PROPERTY                   Errno = 0x20000000 | 0xC0000000 | 0x209\n\tERROR_NO_INF                                 Errno = 0x20000000 | 0xC0000000 | 0x20A\n\tERROR_NO_SUCH_DEVINST                        Errno = 0x20000000 | 0xC0000000 | 0x20B\n\tERROR_CANT_LOAD_CLASS_ICON                   Errno = 0x20000000 | 0xC0000000 | 0x20C\n\tERROR_INVALID_CLASS_INSTALLER                Errno = 0x20000000 | 0xC0000000 | 0x20D\n\tERROR_DI_DO_DEFAULT                          Errno = 0x20000000 | 0xC0000000 | 0x20E\n\tERROR_DI_NOFILECOPY                          Errno = 0x20000000 | 0xC0000000 | 0x20F\n\tERROR_INVALID_HWPROFILE                      Errno = 0x20000000 | 0xC0000000 | 0x210\n\tERROR_NO_DEVICE_SELECTED                     Errno = 0x20000000 | 0xC0000000 | 0x211\n\tERROR_DEVINFO_LIST_LOCKED                    Errno = 0x20000000 | 0xC0000000 | 0x212\n\tERROR_DEVINFO_DATA_LOCKED                    Errno = 0x20000000 | 0xC0000000 | 0x213\n\tERROR_DI_BAD_PATH                            Errno = 0x20000000 | 0xC0000000 | 0x214\n\tERROR_NO_CLASSINSTALL_PARAMS                 Errno = 0x20000000 | 0xC0000000 | 0x215\n\tERROR_FILEQUEUE_LOCKED                       Errno = 0x20000000 | 0xC0000000 | 0x216\n\tERROR_BAD_SERVICE_INSTALLSECT                Errno = 0x20000000 | 0xC0000000 | 0x217\n\tERROR_NO_CLASS_DRIVER_LIST                   Errno = 0x20000000 | 0xC0000000 | 0x218\n\tERROR_NO_ASSOCIATED_SERVICE                  Errno = 0x20000000 | 0xC0000000 | 0x219\n\tERROR_NO_DEFAULT_DEVICE_INTERFACE            Errno = 0x20000000 | 0xC0000000 | 0x21A\n\tERROR_DEVICE_INTERFACE_ACTIVE                Errno = 0x20000000 | 0xC0000000 | 0x21B\n\tERROR_DEVICE_INTERFACE_REMOVED               Errno = 0x20000000 | 0xC0000000 | 0x21C\n\tERROR_BAD_INTERFACE_INSTALLSECT              Errno = 0x20000000 | 0xC0000000 | 0x21D\n\tERROR_NO_SUCH_INTERFACE_CLASS                Errno = 0x20000000 | 0xC0000000 | 0x21E\n\tERROR_INVALID_REFERENCE_STRING               Errno = 0x20000000 | 0xC0000000 | 0x21F\n\tERROR_INVALID_MACHINENAME                    Errno = 0x20000000 | 0xC0000000 | 0x220\n\tERROR_REMOTE_COMM_FAILURE                    Errno = 0x20000000 | 0xC0000000 | 0x221\n\tERROR_MACHINE_UNAVAILABLE                    Errno = 0x20000000 | 0xC0000000 | 0x222\n\tERROR_NO_CONFIGMGR_SERVICES                  Errno = 0x20000000 | 0xC0000000 | 0x223\n\tERROR_INVALID_PROPPAGE_PROVIDER              Errno = 0x20000000 | 0xC0000000 | 0x224\n\tERROR_NO_SUCH_DEVICE_INTERFACE               Errno = 0x20000000 | 0xC0000000 | 0x225\n\tERROR_DI_POSTPROCESSING_REQUIRED             Errno = 0x20000000 | 0xC0000000 | 0x226\n\tERROR_INVALID_COINSTALLER                    Errno = 0x20000000 | 0xC0000000 | 0x227\n\tERROR_NO_COMPAT_DRIVERS                      Errno = 0x20000000 | 0xC0000000 | 0x228\n\tERROR_NO_DEVICE_ICON                         Errno = 0x20000000 | 0xC0000000 | 0x229\n\tERROR_INVALID_INF_LOGCONFIG                  Errno = 0x20000000 | 0xC0000000 | 0x22A\n\tERROR_DI_DONT_INSTALL                        Errno = 0x20000000 | 0xC0000000 | 0x22B\n\tERROR_INVALID_FILTER_DRIVER                  Errno = 0x20000000 | 0xC0000000 | 0x22C\n\tERROR_NON_WINDOWS_NT_DRIVER                  Errno = 0x20000000 | 0xC0000000 | 0x22D\n\tERROR_NON_WINDOWS_DRIVER                     Errno = 0x20000000 | 0xC0000000 | 0x22E\n\tERROR_NO_CATALOG_FOR_OEM_INF                 Errno = 0x20000000 | 0xC0000000 | 0x22F\n\tERROR_DEVINSTALL_QUEUE_NONNATIVE             Errno = 0x20000000 | 0xC0000000 | 0x230\n\tERROR_NOT_DISABLEABLE                        Errno = 0x20000000 | 0xC0000000 | 0x231\n\tERROR_CANT_REMOVE_DEVINST                    Errno = 0x20000000 | 0xC0000000 | 0x232\n\tERROR_INVALID_TARGET                         Errno = 0x20000000 | 0xC0000000 | 0x233\n\tERROR_DRIVER_NONNATIVE                       Errno = 0x20000000 | 0xC0000000 | 0x234\n\tERROR_IN_WOW64                               Errno = 0x20000000 | 0xC0000000 | 0x235\n\tERROR_SET_SYSTEM_RESTORE_POINT               Errno = 0x20000000 | 0xC0000000 | 0x236\n\tERROR_SCE_DISABLED                           Errno = 0x20000000 | 0xC0000000 | 0x238\n\tERROR_UNKNOWN_EXCEPTION                      Errno = 0x20000000 | 0xC0000000 | 0x239\n\tERROR_PNP_REGISTRY_ERROR                     Errno = 0x20000000 | 0xC0000000 | 0x23A\n\tERROR_REMOTE_REQUEST_UNSUPPORTED             Errno = 0x20000000 | 0xC0000000 | 0x23B\n\tERROR_NOT_AN_INSTALLED_OEM_INF               Errno = 0x20000000 | 0xC0000000 | 0x23C\n\tERROR_INF_IN_USE_BY_DEVICES                  Errno = 0x20000000 | 0xC0000000 | 0x23D\n\tERROR_DI_FUNCTION_OBSOLETE                   Errno = 0x20000000 | 0xC0000000 | 0x23E\n\tERROR_NO_AUTHENTICODE_CATALOG                Errno = 0x20000000 | 0xC0000000 | 0x23F\n\tERROR_AUTHENTICODE_DISALLOWED                Errno = 0x20000000 | 0xC0000000 | 0x240\n\tERROR_AUTHENTICODE_TRUSTED_PUBLISHER         Errno = 0x20000000 | 0xC0000000 | 0x241\n\tERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED     Errno = 0x20000000 | 0xC0000000 | 0x242\n\tERROR_AUTHENTICODE_PUBLISHER_NOT_TRUSTED     Errno = 0x20000000 | 0xC0000000 | 0x243\n\tERROR_SIGNATURE_OSATTRIBUTE_MISMATCH         Errno = 0x20000000 | 0xC0000000 | 0x244\n\tERROR_ONLY_VALIDATE_VIA_AUTHENTICODE         Errno = 0x20000000 | 0xC0000000 | 0x245\n\tERROR_DEVICE_INSTALLER_NOT_READY             Errno = 0x20000000 | 0xC0000000 | 0x246\n\tERROR_DRIVER_STORE_ADD_FAILED                Errno = 0x20000000 | 0xC0000000 | 0x247\n\tERROR_DEVICE_INSTALL_BLOCKED                 Errno = 0x20000000 | 0xC0000000 | 0x248\n\tERROR_DRIVER_INSTALL_BLOCKED                 Errno = 0x20000000 | 0xC0000000 | 0x249\n\tERROR_WRONG_INF_TYPE                         Errno = 0x20000000 | 0xC0000000 | 0x24A\n\tERROR_FILE_HASH_NOT_IN_CATALOG               Errno = 0x20000000 | 0xC0000000 | 0x24B\n\tERROR_DRIVER_STORE_DELETE_FAILED             Errno = 0x20000000 | 0xC0000000 | 0x24C\n\tERROR_UNRECOVERABLE_STACK_OVERFLOW           Errno = 0x20000000 | 0xC0000000 | 0x300\n\tEXCEPTION_SPAPI_UNRECOVERABLE_STACK_OVERFLOW Errno = ERROR_UNRECOVERABLE_STACK_OVERFLOW\n\tERROR_NO_DEFAULT_INTERFACE_DEVICE            Errno = ERROR_NO_DEFAULT_DEVICE_INTERFACE\n\tERROR_INTERFACE_DEVICE_ACTIVE                Errno = ERROR_DEVICE_INTERFACE_ACTIVE\n\tERROR_INTERFACE_DEVICE_REMOVED               Errno = ERROR_DEVICE_INTERFACE_REMOVED\n\tERROR_NO_SUCH_INTERFACE_DEVICE               Errno = ERROR_NO_SUCH_DEVICE_INTERFACE\n)\n\nconst (\n\tMAX_DEVICE_ID_LEN   = 200\n\tMAX_DEVNODE_ID_LEN  = MAX_DEVICE_ID_LEN\n\tMAX_GUID_STRING_LEN = 39 // 38 chars + terminator null\n\tMAX_CLASS_NAME_LEN  = 32\n\tMAX_PROFILE_LEN     = 80\n\tMAX_CONFIG_VALUE    = 9999\n\tMAX_INSTANCE_VALUE  = 9999\n\tCONFIGMG_VERSION    = 0x0400\n)\n\n// Maximum string length constants\nconst (\n\tLINE_LEN                    = 256  // Windows 9x-compatible maximum for displayable strings coming from a device INF.\n\tMAX_INF_STRING_LENGTH       = 4096 // Actual maximum size of an INF string (including string substitutions).\n\tMAX_INF_SECTION_NAME_LENGTH = 255  // For Windows 9x compatibility, INF section names should be constrained to 32 characters.\n\tMAX_TITLE_LEN               = 60\n\tMAX_INSTRUCTION_LEN         = 256\n\tMAX_LABEL_LEN               = 30\n\tMAX_SERVICE_NAME_LEN        = 256\n\tMAX_SUBTITLE_LEN            = 256\n)\n\nconst (\n\t// SP_MAX_MACHINENAME_LENGTH defines maximum length of a machine name in the format expected by ConfigMgr32 CM_Connect_Machine (i.e., \"\\\\\\\\MachineName\\0\").\n\tSP_MAX_MACHINENAME_LENGTH = MAX_PATH + 3\n)\n\n// HSPFILEQ is type for setup file queue\ntype HSPFILEQ uintptr\n\n// DevInfo holds reference to device information set\ntype DevInfo Handle\n\n// DEVINST is a handle usually recognized by cfgmgr32 APIs\ntype DEVINST uint32\n\n// DevInfoData is a device information structure (references a device instance that is a member of a device information set)\ntype DevInfoData struct {\n\tsize      uint32\n\tClassGUID GUID\n\tDevInst   DEVINST\n\t_         uintptr\n}\n\n// DevInfoListDetailData is a structure for detailed information on a device information set (used for SetupDiGetDeviceInfoListDetail which supersedes the functionality of SetupDiGetDeviceInfoListClass).\ntype DevInfoListDetailData struct {\n\tsize                uint32 // Use unsafeSizeOf method\n\tClassGUID           GUID\n\tRemoteMachineHandle Handle\n\tremoteMachineName   [SP_MAX_MACHINENAME_LENGTH]uint16\n}\n\nfunc (*DevInfoListDetailData) unsafeSizeOf() uint32 {\n\tif unsafe.Sizeof(uintptr(0)) == 4 {\n\t\t// Windows declares this with pshpack1.h\n\t\treturn uint32(unsafe.Offsetof(DevInfoListDetailData{}.remoteMachineName) + unsafe.Sizeof(DevInfoListDetailData{}.remoteMachineName))\n\t}\n\treturn uint32(unsafe.Sizeof(DevInfoListDetailData{}))\n}\n\nfunc (data *DevInfoListDetailData) RemoteMachineName() string {\n\treturn UTF16ToString(data.remoteMachineName[:])\n}\n\nfunc (data *DevInfoListDetailData) SetRemoteMachineName(remoteMachineName string) error {\n\tstr, err := UTF16FromString(remoteMachineName)\n\tif err != nil {\n\t\treturn err\n\t}\n\tcopy(data.remoteMachineName[:], str)\n\treturn nil\n}\n\n// DI_FUNCTION is function type for device installer\ntype DI_FUNCTION uint32\n\nconst (\n\tDIF_SELECTDEVICE                   DI_FUNCTION = 0x00000001\n\tDIF_INSTALLDEVICE                  DI_FUNCTION = 0x00000002\n\tDIF_ASSIGNRESOURCES                DI_FUNCTION = 0x00000003\n\tDIF_PROPERTIES                     DI_FUNCTION = 0x00000004\n\tDIF_REMOVE                         DI_FUNCTION = 0x00000005\n\tDIF_FIRSTTIMESETUP                 DI_FUNCTION = 0x00000006\n\tDIF_FOUNDDEVICE                    DI_FUNCTION = 0x00000007\n\tDIF_SELECTCLASSDRIVERS             DI_FUNCTION = 0x00000008\n\tDIF_VALIDATECLASSDRIVERS           DI_FUNCTION = 0x00000009\n\tDIF_INSTALLCLASSDRIVERS            DI_FUNCTION = 0x0000000A\n\tDIF_CALCDISKSPACE                  DI_FUNCTION = 0x0000000B\n\tDIF_DESTROYPRIVATEDATA             DI_FUNCTION = 0x0000000C\n\tDIF_VALIDATEDRIVER                 DI_FUNCTION = 0x0000000D\n\tDIF_DETECT                         DI_FUNCTION = 0x0000000F\n\tDIF_INSTALLWIZARD                  DI_FUNCTION = 0x00000010\n\tDIF_DESTROYWIZARDDATA              DI_FUNCTION = 0x00000011\n\tDIF_PROPERTYCHANGE                 DI_FUNCTION = 0x00000012\n\tDIF_ENABLECLASS                    DI_FUNCTION = 0x00000013\n\tDIF_DETECTVERIFY                   DI_FUNCTION = 0x00000014\n\tDIF_INSTALLDEVICEFILES             DI_FUNCTION = 0x00000015\n\tDIF_UNREMOVE                       DI_FUNCTION = 0x00000016\n\tDIF_SELECTBESTCOMPATDRV            DI_FUNCTION = 0x00000017\n\tDIF_ALLOW_INSTALL                  DI_FUNCTION = 0x00000018\n\tDIF_REGISTERDEVICE                 DI_FUNCTION = 0x00000019\n\tDIF_NEWDEVICEWIZARD_PRESELECT      DI_FUNCTION = 0x0000001A\n\tDIF_NEWDEVICEWIZARD_SELECT         DI_FUNCTION = 0x0000001B\n\tDIF_NEWDEVICEWIZARD_PREANALYZE     DI_FUNCTION = 0x0000001C\n\tDIF_NEWDEVICEWIZARD_POSTANALYZE    DI_FUNCTION = 0x0000001D\n\tDIF_NEWDEVICEWIZARD_FINISHINSTALL  DI_FUNCTION = 0x0000001E\n\tDIF_INSTALLINTERFACES              DI_FUNCTION = 0x00000020\n\tDIF_DETECTCANCEL                   DI_FUNCTION = 0x00000021\n\tDIF_REGISTER_COINSTALLERS          DI_FUNCTION = 0x00000022\n\tDIF_ADDPROPERTYPAGE_ADVANCED       DI_FUNCTION = 0x00000023\n\tDIF_ADDPROPERTYPAGE_BASIC          DI_FUNCTION = 0x00000024\n\tDIF_TROUBLESHOOTER                 DI_FUNCTION = 0x00000026\n\tDIF_POWERMESSAGEWAKE               DI_FUNCTION = 0x00000027\n\tDIF_ADDREMOTEPROPERTYPAGE_ADVANCED DI_FUNCTION = 0x00000028\n\tDIF_UPDATEDRIVER_UI                DI_FUNCTION = 0x00000029\n\tDIF_FINISHINSTALL_ACTION           DI_FUNCTION = 0x0000002A\n)\n\n// DevInstallParams is device installation parameters structure (associated with a particular device information element, or globally with a device information set)\ntype DevInstallParams struct {\n\tsize                     uint32\n\tFlags                    DI_FLAGS\n\tFlagsEx                  DI_FLAGSEX\n\thwndParent               uintptr\n\tInstallMsgHandler        uintptr\n\tInstallMsgHandlerContext uintptr\n\tFileQueue                HSPFILEQ\n\t_                        uintptr\n\t_                        uint32\n\tdriverPath               [MAX_PATH]uint16\n}\n\nfunc (params *DevInstallParams) DriverPath() string {\n\treturn UTF16ToString(params.driverPath[:])\n}\n\nfunc (params *DevInstallParams) SetDriverPath(driverPath string) error {\n\tstr, err := UTF16FromString(driverPath)\n\tif err != nil {\n\t\treturn err\n\t}\n\tcopy(params.driverPath[:], str)\n\treturn nil\n}\n\n// DI_FLAGS is SP_DEVINSTALL_PARAMS.Flags values\ntype DI_FLAGS uint32\n\nconst (\n\t// Flags for choosing a device\n\tDI_SHOWOEM       DI_FLAGS = 0x00000001 // support Other... button\n\tDI_SHOWCOMPAT    DI_FLAGS = 0x00000002 // show compatibility list\n\tDI_SHOWCLASS     DI_FLAGS = 0x00000004 // show class list\n\tDI_SHOWALL       DI_FLAGS = 0x00000007 // both class & compat list shown\n\tDI_NOVCP         DI_FLAGS = 0x00000008 // don't create a new copy queue--use caller-supplied FileQueue\n\tDI_DIDCOMPAT     DI_FLAGS = 0x00000010 // Searched for compatible devices\n\tDI_DIDCLASS      DI_FLAGS = 0x00000020 // Searched for class devices\n\tDI_AUTOASSIGNRES DI_FLAGS = 0x00000040 // No UI for resources if possible\n\n\t// Flags returned by DiInstallDevice to indicate need to reboot/restart\n\tDI_NEEDRESTART DI_FLAGS = 0x00000080 // Reboot required to take effect\n\tDI_NEEDREBOOT  DI_FLAGS = 0x00000100 // \"\"\n\n\t// Flags for device installation\n\tDI_NOBROWSE DI_FLAGS = 0x00000200 // no Browse... in InsertDisk\n\n\t// Flags set by DiBuildDriverInfoList\n\tDI_MULTMFGS DI_FLAGS = 0x00000400 // Set if multiple manufacturers in class driver list\n\n\t// Flag indicates that device is disabled\n\tDI_DISABLED DI_FLAGS = 0x00000800 // Set if device disabled\n\n\t// Flags for Device/Class Properties\n\tDI_GENERALPAGE_ADDED  DI_FLAGS = 0x00001000\n\tDI_RESOURCEPAGE_ADDED DI_FLAGS = 0x00002000\n\n\t// Flag to indicate the setting properties for this Device (or class) caused a change so the Dev Mgr UI probably needs to be updated.\n\tDI_PROPERTIES_CHANGE DI_FLAGS = 0x00004000\n\n\t// Flag to indicate that the sorting from the INF file should be used.\n\tDI_INF_IS_SORTED DI_FLAGS = 0x00008000\n\n\t// Flag to indicate that only the INF specified by SP_DEVINSTALL_PARAMS.DriverPath should be searched.\n\tDI_ENUMSINGLEINF DI_FLAGS = 0x00010000\n\n\t// Flag that prevents ConfigMgr from removing/re-enumerating devices during device\n\t// registration, installation, and deletion.\n\tDI_DONOTCALLCONFIGMG DI_FLAGS = 0x00020000\n\n\t// The following flag can be used to install a device disabled\n\tDI_INSTALLDISABLED DI_FLAGS = 0x00040000\n\n\t// Flag that causes SetupDiBuildDriverInfoList to build a device's compatible driver\n\t// list from its existing class driver list, instead of the normal INF search.\n\tDI_COMPAT_FROM_CLASS DI_FLAGS = 0x00080000\n\n\t// This flag is set if the Class Install params should be used.\n\tDI_CLASSINSTALLPARAMS DI_FLAGS = 0x00100000\n\n\t// This flag is set if the caller of DiCallClassInstaller does NOT want the internal default action performed if the Class installer returns ERROR_DI_DO_DEFAULT.\n\tDI_NODI_DEFAULTACTION DI_FLAGS = 0x00200000\n\n\t// Flags for device installation\n\tDI_QUIETINSTALL        DI_FLAGS = 0x00800000 // don't confuse the user with questions or excess info\n\tDI_NOFILECOPY          DI_FLAGS = 0x01000000 // No file Copy necessary\n\tDI_FORCECOPY           DI_FLAGS = 0x02000000 // Force files to be copied from install path\n\tDI_DRIVERPAGE_ADDED    DI_FLAGS = 0x04000000 // Prop provider added Driver page.\n\tDI_USECI_SELECTSTRINGS DI_FLAGS = 0x08000000 // Use Class Installer Provided strings in the Select Device Dlg\n\tDI_OVERRIDE_INFFLAGS   DI_FLAGS = 0x10000000 // Override INF flags\n\tDI_PROPS_NOCHANGEUSAGE DI_FLAGS = 0x20000000 // No Enable/Disable in General Props\n\n\tDI_NOSELECTICONS DI_FLAGS = 0x40000000 // No small icons in select device dialogs\n\n\tDI_NOWRITE_IDS DI_FLAGS = 0x80000000 // Don't write HW & Compat IDs on install\n)\n\n// DI_FLAGSEX is SP_DEVINSTALL_PARAMS.FlagsEx values\ntype DI_FLAGSEX uint32\n\nconst (\n\tDI_FLAGSEX_CI_FAILED                DI_FLAGSEX = 0x00000004 // Failed to Load/Call class installer\n\tDI_FLAGSEX_FINISHINSTALL_ACTION     DI_FLAGSEX = 0x00000008 // Class/co-installer wants to get a DIF_FINISH_INSTALL action in client context.\n\tDI_FLAGSEX_DIDINFOLIST              DI_FLAGSEX = 0x00000010 // Did the Class Info List\n\tDI_FLAGSEX_DIDCOMPATINFO            DI_FLAGSEX = 0x00000020 // Did the Compat Info List\n\tDI_FLAGSEX_FILTERCLASSES            DI_FLAGSEX = 0x00000040\n\tDI_FLAGSEX_SETFAILEDINSTALL         DI_FLAGSEX = 0x00000080\n\tDI_FLAGSEX_DEVICECHANGE             DI_FLAGSEX = 0x00000100\n\tDI_FLAGSEX_ALWAYSWRITEIDS           DI_FLAGSEX = 0x00000200\n\tDI_FLAGSEX_PROPCHANGE_PENDING       DI_FLAGSEX = 0x00000400 // One or more device property sheets have had changes made to them, and need to have a DIF_PROPERTYCHANGE occur.\n\tDI_FLAGSEX_ALLOWEXCLUDEDDRVS        DI_FLAGSEX = 0x00000800\n\tDI_FLAGSEX_NOUIONQUERYREMOVE        DI_FLAGSEX = 0x00001000\n\tDI_FLAGSEX_USECLASSFORCOMPAT        DI_FLAGSEX = 0x00002000 // Use the device's class when building compat drv list. (Ignored if DI_COMPAT_FROM_CLASS flag is specified.)\n\tDI_FLAGSEX_NO_DRVREG_MODIFY         DI_FLAGSEX = 0x00008000 // Don't run AddReg and DelReg for device's software (driver) key.\n\tDI_FLAGSEX_IN_SYSTEM_SETUP          DI_FLAGSEX = 0x00010000 // Installation is occurring during initial system setup.\n\tDI_FLAGSEX_INET_DRIVER              DI_FLAGSEX = 0x00020000 // Driver came from Windows Update\n\tDI_FLAGSEX_APPENDDRIVERLIST         DI_FLAGSEX = 0x00040000 // Cause SetupDiBuildDriverInfoList to append a new driver list to an existing list.\n\tDI_FLAGSEX_PREINSTALLBACKUP         DI_FLAGSEX = 0x00080000 // not used\n\tDI_FLAGSEX_BACKUPONREPLACE          DI_FLAGSEX = 0x00100000 // not used\n\tDI_FLAGSEX_DRIVERLIST_FROM_URL      DI_FLAGSEX = 0x00200000 // build driver list from INF(s) retrieved from URL specified in SP_DEVINSTALL_PARAMS.DriverPath (empty string means Windows Update website)\n\tDI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS DI_FLAGSEX = 0x00800000 // Don't include old Internet drivers when building a driver list. Ignored on Windows Vista and later.\n\tDI_FLAGSEX_POWERPAGE_ADDED          DI_FLAGSEX = 0x01000000 // class installer added their own power page\n\tDI_FLAGSEX_FILTERSIMILARDRIVERS     DI_FLAGSEX = 0x02000000 // only include similar drivers in class list\n\tDI_FLAGSEX_INSTALLEDDRIVER          DI_FLAGSEX = 0x04000000 // only add the installed driver to the class or compat driver list.  Used in calls to SetupDiBuildDriverInfoList\n\tDI_FLAGSEX_NO_CLASSLIST_NODE_MERGE  DI_FLAGSEX = 0x08000000 // Don't remove identical driver nodes from the class list\n\tDI_FLAGSEX_ALTPLATFORM_DRVSEARCH    DI_FLAGSEX = 0x10000000 // Build driver list based on alternate platform information specified in associated file queue\n\tDI_FLAGSEX_RESTART_DEVICE_ONLY      DI_FLAGSEX = 0x20000000 // only restart the device drivers are being installed on as opposed to restarting all devices using those drivers.\n\tDI_FLAGSEX_RECURSIVESEARCH          DI_FLAGSEX = 0x40000000 // Tell SetupDiBuildDriverInfoList to do a recursive search\n\tDI_FLAGSEX_SEARCH_PUBLISHED_INFS    DI_FLAGSEX = 0x80000000 // Tell SetupDiBuildDriverInfoList to do a \"published INF\" search\n)\n\n// ClassInstallHeader is the first member of any class install parameters structure. It contains the device installation request code that defines the format of the rest of the install parameters structure.\ntype ClassInstallHeader struct {\n\tsize            uint32\n\tInstallFunction DI_FUNCTION\n}\n\nfunc MakeClassInstallHeader(installFunction DI_FUNCTION) *ClassInstallHeader {\n\thdr := &ClassInstallHeader{InstallFunction: installFunction}\n\thdr.size = uint32(unsafe.Sizeof(*hdr))\n\treturn hdr\n}\n\n// DICS_STATE specifies values indicating a change in a device's state\ntype DICS_STATE uint32\n\nconst (\n\tDICS_ENABLE     DICS_STATE = 0x00000001 // The device is being enabled.\n\tDICS_DISABLE    DICS_STATE = 0x00000002 // The device is being disabled.\n\tDICS_PROPCHANGE DICS_STATE = 0x00000003 // The properties of the device have changed.\n\tDICS_START      DICS_STATE = 0x00000004 // The device is being started (if the request is for the currently active hardware profile).\n\tDICS_STOP       DICS_STATE = 0x00000005 // The device is being stopped. The driver stack will be unloaded and the CSCONFIGFLAG_DO_NOT_START flag will be set for the device.\n)\n\n// DICS_FLAG specifies the scope of a device property change\ntype DICS_FLAG uint32\n\nconst (\n\tDICS_FLAG_GLOBAL         DICS_FLAG = 0x00000001 // make change in all hardware profiles\n\tDICS_FLAG_CONFIGSPECIFIC DICS_FLAG = 0x00000002 // make change in specified profile only\n\tDICS_FLAG_CONFIGGENERAL  DICS_FLAG = 0x00000004 // 1 or more hardware profile-specific changes to follow (obsolete)\n)\n\n// PropChangeParams is a structure corresponding to a DIF_PROPERTYCHANGE install function.\ntype PropChangeParams struct {\n\tClassInstallHeader ClassInstallHeader\n\tStateChange        DICS_STATE\n\tScope              DICS_FLAG\n\tHwProfile          uint32\n}\n\n// DI_REMOVEDEVICE specifies the scope of the device removal\ntype DI_REMOVEDEVICE uint32\n\nconst (\n\tDI_REMOVEDEVICE_GLOBAL         DI_REMOVEDEVICE = 0x00000001 // Make this change in all hardware profiles. Remove information about the device from the registry.\n\tDI_REMOVEDEVICE_CONFIGSPECIFIC DI_REMOVEDEVICE = 0x00000002 // Make this change to only the hardware profile specified by HwProfile. this flag only applies to root-enumerated devices. When Windows removes the device from the last hardware profile in which it was configured, Windows performs a global removal.\n)\n\n// RemoveDeviceParams is a structure corresponding to a DIF_REMOVE install function.\ntype RemoveDeviceParams struct {\n\tClassInstallHeader ClassInstallHeader\n\tScope              DI_REMOVEDEVICE\n\tHwProfile          uint32\n}\n\n// DrvInfoData is driver information structure (member of a driver info list that may be associated with a particular device instance, or (globally) with a device information set)\ntype DrvInfoData struct {\n\tsize          uint32\n\tDriverType    uint32\n\t_             uintptr\n\tdescription   [LINE_LEN]uint16\n\tmfgName       [LINE_LEN]uint16\n\tproviderName  [LINE_LEN]uint16\n\tDriverDate    Filetime\n\tDriverVersion uint64\n}\n\nfunc (data *DrvInfoData) Description() string {\n\treturn UTF16ToString(data.description[:])\n}\n\nfunc (data *DrvInfoData) SetDescription(description string) error {\n\tstr, err := UTF16FromString(description)\n\tif err != nil {\n\t\treturn err\n\t}\n\tcopy(data.description[:], str)\n\treturn nil\n}\n\nfunc (data *DrvInfoData) MfgName() string {\n\treturn UTF16ToString(data.mfgName[:])\n}\n\nfunc (data *DrvInfoData) SetMfgName(mfgName string) error {\n\tstr, err := UTF16FromString(mfgName)\n\tif err != nil {\n\t\treturn err\n\t}\n\tcopy(data.mfgName[:], str)\n\treturn nil\n}\n\nfunc (data *DrvInfoData) ProviderName() string {\n\treturn UTF16ToString(data.providerName[:])\n}\n\nfunc (data *DrvInfoData) SetProviderName(providerName string) error {\n\tstr, err := UTF16FromString(providerName)\n\tif err != nil {\n\t\treturn err\n\t}\n\tcopy(data.providerName[:], str)\n\treturn nil\n}\n\n// IsNewer method returns true if DrvInfoData date and version is newer than supplied parameters.\nfunc (data *DrvInfoData) IsNewer(driverDate Filetime, driverVersion uint64) bool {\n\tif data.DriverDate.HighDateTime > driverDate.HighDateTime {\n\t\treturn true\n\t}\n\tif data.DriverDate.HighDateTime < driverDate.HighDateTime {\n\t\treturn false\n\t}\n\n\tif data.DriverDate.LowDateTime > driverDate.LowDateTime {\n\t\treturn true\n\t}\n\tif data.DriverDate.LowDateTime < driverDate.LowDateTime {\n\t\treturn false\n\t}\n\n\tif data.DriverVersion > driverVersion {\n\t\treturn true\n\t}\n\tif data.DriverVersion < driverVersion {\n\t\treturn false\n\t}\n\n\treturn false\n}\n\n// DrvInfoDetailData is driver information details structure (provides detailed information about a particular driver information structure)\ntype DrvInfoDetailData struct {\n\tsize            uint32 // Use unsafeSizeOf method\n\tInfDate         Filetime\n\tcompatIDsOffset uint32\n\tcompatIDsLength uint32\n\t_               uintptr\n\tsectionName     [LINE_LEN]uint16\n\tinfFileName     [MAX_PATH]uint16\n\tdrvDescription  [LINE_LEN]uint16\n\thardwareID      [1]uint16\n}\n\nfunc (*DrvInfoDetailData) unsafeSizeOf() uint32 {\n\tif unsafe.Sizeof(uintptr(0)) == 4 {\n\t\t// Windows declares this with pshpack1.h\n\t\treturn uint32(unsafe.Offsetof(DrvInfoDetailData{}.hardwareID) + unsafe.Sizeof(DrvInfoDetailData{}.hardwareID))\n\t}\n\treturn uint32(unsafe.Sizeof(DrvInfoDetailData{}))\n}\n\nfunc (data *DrvInfoDetailData) SectionName() string {\n\treturn UTF16ToString(data.sectionName[:])\n}\n\nfunc (data *DrvInfoDetailData) InfFileName() string {\n\treturn UTF16ToString(data.infFileName[:])\n}\n\nfunc (data *DrvInfoDetailData) DrvDescription() string {\n\treturn UTF16ToString(data.drvDescription[:])\n}\n\nfunc (data *DrvInfoDetailData) HardwareID() string {\n\tif data.compatIDsOffset > 1 {\n\t\tbufW := data.getBuf()\n\t\treturn UTF16ToString(bufW[:wcslen(bufW)])\n\t}\n\n\treturn \"\"\n}\n\nfunc (data *DrvInfoDetailData) CompatIDs() []string {\n\ta := make([]string, 0)\n\n\tif data.compatIDsLength > 0 {\n\t\tbufW := data.getBuf()\n\t\tbufW = bufW[data.compatIDsOffset : data.compatIDsOffset+data.compatIDsLength]\n\t\tfor i := 0; i < len(bufW); {\n\t\t\tj := i + wcslen(bufW[i:])\n\t\t\tif i < j {\n\t\t\t\ta = append(a, UTF16ToString(bufW[i:j]))\n\t\t\t}\n\t\t\ti = j + 1\n\t\t}\n\t}\n\n\treturn a\n}\n\nfunc (data *DrvInfoDetailData) getBuf() []uint16 {\n\tlen := (data.size - uint32(unsafe.Offsetof(data.hardwareID))) / 2\n\tsl := struct {\n\t\taddr *uint16\n\t\tlen  int\n\t\tcap  int\n\t}{&data.hardwareID[0], int(len), int(len)}\n\treturn *(*[]uint16)(unsafe.Pointer(&sl))\n}\n\n// IsCompatible method tests if given hardware ID matches the driver or is listed on the compatible ID list.\nfunc (data *DrvInfoDetailData) IsCompatible(hwid string) bool {\n\thwidLC := strings.ToLower(hwid)\n\tif strings.ToLower(data.HardwareID()) == hwidLC {\n\t\treturn true\n\t}\n\ta := data.CompatIDs()\n\tfor i := range a {\n\t\tif strings.ToLower(a[i]) == hwidLC {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// DICD flags control SetupDiCreateDeviceInfo\ntype DICD uint32\n\nconst (\n\tDICD_GENERATE_ID       DICD = 0x00000001\n\tDICD_INHERIT_CLASSDRVS DICD = 0x00000002\n)\n\n// SUOI flags control SetupUninstallOEMInf\ntype SUOI uint32\n\nconst (\n\tSUOI_FORCEDELETE SUOI = 0x0001\n)\n\n// SPDIT flags to distinguish between class drivers and\n// device drivers. (Passed in 'DriverType' parameter of\n// driver information list APIs)\ntype SPDIT uint32\n\nconst (\n\tSPDIT_NODRIVER     SPDIT = 0x00000000\n\tSPDIT_CLASSDRIVER  SPDIT = 0x00000001\n\tSPDIT_COMPATDRIVER SPDIT = 0x00000002\n)\n\n// DIGCF flags control what is included in the device information set built by SetupDiGetClassDevs\ntype DIGCF uint32\n\nconst (\n\tDIGCF_DEFAULT         DIGCF = 0x00000001 // only valid with DIGCF_DEVICEINTERFACE\n\tDIGCF_PRESENT         DIGCF = 0x00000002\n\tDIGCF_ALLCLASSES      DIGCF = 0x00000004\n\tDIGCF_PROFILE         DIGCF = 0x00000008\n\tDIGCF_DEVICEINTERFACE DIGCF = 0x00000010\n)\n\n// DIREG specifies values for SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and SetupDiDeleteDevRegKey.\ntype DIREG uint32\n\nconst (\n\tDIREG_DEV  DIREG = 0x00000001 // Open/Create/Delete device key\n\tDIREG_DRV  DIREG = 0x00000002 // Open/Create/Delete driver key\n\tDIREG_BOTH DIREG = 0x00000004 // Delete both driver and Device key\n)\n\n// SPDRP specifies device registry property codes\n// (Codes marked as read-only (R) may only be used for\n// SetupDiGetDeviceRegistryProperty)\n//\n// These values should cover the same set of registry properties\n// as defined by the CM_DRP codes in cfgmgr32.h.\n//\n// Note that SPDRP codes are zero based while CM_DRP codes are one based!\ntype SPDRP uint32\n\nconst (\n\tSPDRP_DEVICEDESC                  SPDRP = 0x00000000 // DeviceDesc (R/W)\n\tSPDRP_HARDWAREID                  SPDRP = 0x00000001 // HardwareID (R/W)\n\tSPDRP_COMPATIBLEIDS               SPDRP = 0x00000002 // CompatibleIDs (R/W)\n\tSPDRP_SERVICE                     SPDRP = 0x00000004 // Service (R/W)\n\tSPDRP_CLASS                       SPDRP = 0x00000007 // Class (R--tied to ClassGUID)\n\tSPDRP_CLASSGUID                   SPDRP = 0x00000008 // ClassGUID (R/W)\n\tSPDRP_DRIVER                      SPDRP = 0x00000009 // Driver (R/W)\n\tSPDRP_CONFIGFLAGS                 SPDRP = 0x0000000A // ConfigFlags (R/W)\n\tSPDRP_MFG                         SPDRP = 0x0000000B // Mfg (R/W)\n\tSPDRP_FRIENDLYNAME                SPDRP = 0x0000000C // FriendlyName (R/W)\n\tSPDRP_LOCATION_INFORMATION        SPDRP = 0x0000000D // LocationInformation (R/W)\n\tSPDRP_PHYSICAL_DEVICE_OBJECT_NAME SPDRP = 0x0000000E // PhysicalDeviceObjectName (R)\n\tSPDRP_CAPABILITIES                SPDRP = 0x0000000F // Capabilities (R)\n\tSPDRP_UI_NUMBER                   SPDRP = 0x00000010 // UiNumber (R)\n\tSPDRP_UPPERFILTERS                SPDRP = 0x00000011 // UpperFilters (R/W)\n\tSPDRP_LOWERFILTERS                SPDRP = 0x00000012 // LowerFilters (R/W)\n\tSPDRP_BUSTYPEGUID                 SPDRP = 0x00000013 // BusTypeGUID (R)\n\tSPDRP_LEGACYBUSTYPE               SPDRP = 0x00000014 // LegacyBusType (R)\n\tSPDRP_BUSNUMBER                   SPDRP = 0x00000015 // BusNumber (R)\n\tSPDRP_ENUMERATOR_NAME             SPDRP = 0x00000016 // Enumerator Name (R)\n\tSPDRP_SECURITY                    SPDRP = 0x00000017 // Security (R/W, binary form)\n\tSPDRP_SECURITY_SDS                SPDRP = 0x00000018 // Security (W, SDS form)\n\tSPDRP_DEVTYPE                     SPDRP = 0x00000019 // Device Type (R/W)\n\tSPDRP_EXCLUSIVE                   SPDRP = 0x0000001A // Device is exclusive-access (R/W)\n\tSPDRP_CHARACTERISTICS             SPDRP = 0x0000001B // Device Characteristics (R/W)\n\tSPDRP_ADDRESS                     SPDRP = 0x0000001C // Device Address (R)\n\tSPDRP_UI_NUMBER_DESC_FORMAT       SPDRP = 0x0000001D // UiNumberDescFormat (R/W)\n\tSPDRP_DEVICE_POWER_DATA           SPDRP = 0x0000001E // Device Power Data (R)\n\tSPDRP_REMOVAL_POLICY              SPDRP = 0x0000001F // Removal Policy (R)\n\tSPDRP_REMOVAL_POLICY_HW_DEFAULT   SPDRP = 0x00000020 // Hardware Removal Policy (R)\n\tSPDRP_REMOVAL_POLICY_OVERRIDE     SPDRP = 0x00000021 // Removal Policy Override (RW)\n\tSPDRP_INSTALL_STATE               SPDRP = 0x00000022 // Device Install State (R)\n\tSPDRP_LOCATION_PATHS              SPDRP = 0x00000023 // Device Location Paths (R)\n\tSPDRP_BASE_CONTAINERID            SPDRP = 0x00000024 // Base ContainerID (R)\n\n\tSPDRP_MAXIMUM_PROPERTY SPDRP = 0x00000025 // Upper bound on ordinals\n)\n\n// DEVPROPTYPE represents the property-data-type identifier that specifies the\n// data type of a device property value in the unified device property model.\ntype DEVPROPTYPE uint32\n\nconst (\n\tDEVPROP_TYPEMOD_ARRAY DEVPROPTYPE = 0x00001000\n\tDEVPROP_TYPEMOD_LIST  DEVPROPTYPE = 0x00002000\n\n\tDEVPROP_TYPE_EMPTY                      DEVPROPTYPE = 0x00000000\n\tDEVPROP_TYPE_NULL                       DEVPROPTYPE = 0x00000001\n\tDEVPROP_TYPE_SBYTE                      DEVPROPTYPE = 0x00000002\n\tDEVPROP_TYPE_BYTE                       DEVPROPTYPE = 0x00000003\n\tDEVPROP_TYPE_INT16                      DEVPROPTYPE = 0x00000004\n\tDEVPROP_TYPE_UINT16                     DEVPROPTYPE = 0x00000005\n\tDEVPROP_TYPE_INT32                      DEVPROPTYPE = 0x00000006\n\tDEVPROP_TYPE_UINT32                     DEVPROPTYPE = 0x00000007\n\tDEVPROP_TYPE_INT64                      DEVPROPTYPE = 0x00000008\n\tDEVPROP_TYPE_UINT64                     DEVPROPTYPE = 0x00000009\n\tDEVPROP_TYPE_FLOAT                      DEVPROPTYPE = 0x0000000A\n\tDEVPROP_TYPE_DOUBLE                     DEVPROPTYPE = 0x0000000B\n\tDEVPROP_TYPE_DECIMAL                    DEVPROPTYPE = 0x0000000C\n\tDEVPROP_TYPE_GUID                       DEVPROPTYPE = 0x0000000D\n\tDEVPROP_TYPE_CURRENCY                   DEVPROPTYPE = 0x0000000E\n\tDEVPROP_TYPE_DATE                       DEVPROPTYPE = 0x0000000F\n\tDEVPROP_TYPE_FILETIME                   DEVPROPTYPE = 0x00000010\n\tDEVPROP_TYPE_BOOLEAN                    DEVPROPTYPE = 0x00000011\n\tDEVPROP_TYPE_STRING                     DEVPROPTYPE = 0x00000012\n\tDEVPROP_TYPE_STRING_LIST                DEVPROPTYPE = DEVPROP_TYPE_STRING | DEVPROP_TYPEMOD_LIST\n\tDEVPROP_TYPE_SECURITY_DESCRIPTOR        DEVPROPTYPE = 0x00000013\n\tDEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING DEVPROPTYPE = 0x00000014\n\tDEVPROP_TYPE_DEVPROPKEY                 DEVPROPTYPE = 0x00000015\n\tDEVPROP_TYPE_DEVPROPTYPE                DEVPROPTYPE = 0x00000016\n\tDEVPROP_TYPE_BINARY                     DEVPROPTYPE = DEVPROP_TYPE_BYTE | DEVPROP_TYPEMOD_ARRAY\n\tDEVPROP_TYPE_ERROR                      DEVPROPTYPE = 0x00000017\n\tDEVPROP_TYPE_NTSTATUS                   DEVPROPTYPE = 0x00000018\n\tDEVPROP_TYPE_STRING_INDIRECT            DEVPROPTYPE = 0x00000019\n\n\tMAX_DEVPROP_TYPE    DEVPROPTYPE = 0x00000019\n\tMAX_DEVPROP_TYPEMOD DEVPROPTYPE = 0x00002000\n\n\tDEVPROP_MASK_TYPE    DEVPROPTYPE = 0x00000FFF\n\tDEVPROP_MASK_TYPEMOD DEVPROPTYPE = 0x0000F000\n)\n\n// DEVPROPGUID specifies a property category.\ntype DEVPROPGUID GUID\n\n// DEVPROPID uniquely identifies the property within the property category.\ntype DEVPROPID uint32\n\nconst DEVPROPID_FIRST_USABLE DEVPROPID = 2\n\n// DEVPROPKEY represents a device property key for a device property in the\n// unified device property model.\ntype DEVPROPKEY struct {\n\tFmtID DEVPROPGUID\n\tPID   DEVPROPID\n}\n\n// CONFIGRET is a return value or error code from cfgmgr32 APIs\ntype CONFIGRET uint32\n\nfunc (ret CONFIGRET) Error() string {\n\tif win32Error, ok := ret.Unwrap().(Errno); ok {\n\t\treturn fmt.Sprintf(\"%s (CfgMgr error: 0x%08x)\", win32Error.Error(), uint32(ret))\n\t}\n\treturn fmt.Sprintf(\"CfgMgr error: 0x%08x\", uint32(ret))\n}\n\nfunc (ret CONFIGRET) Win32Error(defaultError Errno) Errno {\n\treturn cm_MapCrToWin32Err(ret, defaultError)\n}\n\nfunc (ret CONFIGRET) Unwrap() error {\n\tconst noMatch = Errno(^uintptr(0))\n\twin32Error := ret.Win32Error(noMatch)\n\tif win32Error == noMatch {\n\t\treturn nil\n\t}\n\treturn win32Error\n}\n\nconst (\n\tCR_SUCCESS                  CONFIGRET = 0x00000000\n\tCR_DEFAULT                  CONFIGRET = 0x00000001\n\tCR_OUT_OF_MEMORY            CONFIGRET = 0x00000002\n\tCR_INVALID_POINTER          CONFIGRET = 0x00000003\n\tCR_INVALID_FLAG             CONFIGRET = 0x00000004\n\tCR_INVALID_DEVNODE          CONFIGRET = 0x00000005\n\tCR_INVALID_DEVINST                    = CR_INVALID_DEVNODE\n\tCR_INVALID_RES_DES          CONFIGRET = 0x00000006\n\tCR_INVALID_LOG_CONF         CONFIGRET = 0x00000007\n\tCR_INVALID_ARBITRATOR       CONFIGRET = 0x00000008\n\tCR_INVALID_NODELIST         CONFIGRET = 0x00000009\n\tCR_DEVNODE_HAS_REQS         CONFIGRET = 0x0000000A\n\tCR_DEVINST_HAS_REQS                   = CR_DEVNODE_HAS_REQS\n\tCR_INVALID_RESOURCEID       CONFIGRET = 0x0000000B\n\tCR_DLVXD_NOT_FOUND          CONFIGRET = 0x0000000C\n\tCR_NO_SUCH_DEVNODE          CONFIGRET = 0x0000000D\n\tCR_NO_SUCH_DEVINST                    = CR_NO_SUCH_DEVNODE\n\tCR_NO_MORE_LOG_CONF         CONFIGRET = 0x0000000E\n\tCR_NO_MORE_RES_DES          CONFIGRET = 0x0000000F\n\tCR_ALREADY_SUCH_DEVNODE     CONFIGRET = 0x00000010\n\tCR_ALREADY_SUCH_DEVINST               = CR_ALREADY_SUCH_DEVNODE\n\tCR_INVALID_RANGE_LIST       CONFIGRET = 0x00000011\n\tCR_INVALID_RANGE            CONFIGRET = 0x00000012\n\tCR_FAILURE                  CONFIGRET = 0x00000013\n\tCR_NO_SUCH_LOGICAL_DEV      CONFIGRET = 0x00000014\n\tCR_CREATE_BLOCKED           CONFIGRET = 0x00000015\n\tCR_NOT_SYSTEM_VM            CONFIGRET = 0x00000016\n\tCR_REMOVE_VETOED            CONFIGRET = 0x00000017\n\tCR_APM_VETOED               CONFIGRET = 0x00000018\n\tCR_INVALID_LOAD_TYPE        CONFIGRET = 0x00000019\n\tCR_BUFFER_SMALL             CONFIGRET = 0x0000001A\n\tCR_NO_ARBITRATOR            CONFIGRET = 0x0000001B\n\tCR_NO_REGISTRY_HANDLE       CONFIGRET = 0x0000001C\n\tCR_REGISTRY_ERROR           CONFIGRET = 0x0000001D\n\tCR_INVALID_DEVICE_ID        CONFIGRET = 0x0000001E\n\tCR_INVALID_DATA             CONFIGRET = 0x0000001F\n\tCR_INVALID_API              CONFIGRET = 0x00000020\n\tCR_DEVLOADER_NOT_READY      CONFIGRET = 0x00000021\n\tCR_NEED_RESTART             CONFIGRET = 0x00000022\n\tCR_NO_MORE_HW_PROFILES      CONFIGRET = 0x00000023\n\tCR_DEVICE_NOT_THERE         CONFIGRET = 0x00000024\n\tCR_NO_SUCH_VALUE            CONFIGRET = 0x00000025\n\tCR_WRONG_TYPE               CONFIGRET = 0x00000026\n\tCR_INVALID_PRIORITY         CONFIGRET = 0x00000027\n\tCR_NOT_DISABLEABLE          CONFIGRET = 0x00000028\n\tCR_FREE_RESOURCES           CONFIGRET = 0x00000029\n\tCR_QUERY_VETOED             CONFIGRET = 0x0000002A\n\tCR_CANT_SHARE_IRQ           CONFIGRET = 0x0000002B\n\tCR_NO_DEPENDENT             CONFIGRET = 0x0000002C\n\tCR_SAME_RESOURCES           CONFIGRET = 0x0000002D\n\tCR_NO_SUCH_REGISTRY_KEY     CONFIGRET = 0x0000002E\n\tCR_INVALID_MACHINENAME      CONFIGRET = 0x0000002F\n\tCR_REMOTE_COMM_FAILURE      CONFIGRET = 0x00000030\n\tCR_MACHINE_UNAVAILABLE      CONFIGRET = 0x00000031\n\tCR_NO_CM_SERVICES           CONFIGRET = 0x00000032\n\tCR_ACCESS_DENIED            CONFIGRET = 0x00000033\n\tCR_CALL_NOT_IMPLEMENTED     CONFIGRET = 0x00000034\n\tCR_INVALID_PROPERTY         CONFIGRET = 0x00000035\n\tCR_DEVICE_INTERFACE_ACTIVE  CONFIGRET = 0x00000036\n\tCR_NO_SUCH_DEVICE_INTERFACE CONFIGRET = 0x00000037\n\tCR_INVALID_REFERENCE_STRING CONFIGRET = 0x00000038\n\tCR_INVALID_CONFLICT_LIST    CONFIGRET = 0x00000039\n\tCR_INVALID_INDEX            CONFIGRET = 0x0000003A\n\tCR_INVALID_STRUCTURE_SIZE   CONFIGRET = 0x0000003B\n\tNUM_CR_RESULTS              CONFIGRET = 0x0000003C\n)\n\nconst (\n\tCM_GET_DEVICE_INTERFACE_LIST_PRESENT     = 0 // only currently 'live' device interfaces\n\tCM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES = 1 // all registered device interfaces, live or not\n)\n\nconst (\n\tDN_ROOT_ENUMERATED       = 0x00000001        // Was enumerated by ROOT\n\tDN_DRIVER_LOADED         = 0x00000002        // Has Register_Device_Driver\n\tDN_ENUM_LOADED           = 0x00000004        // Has Register_Enumerator\n\tDN_STARTED               = 0x00000008        // Is currently configured\n\tDN_MANUAL                = 0x00000010        // Manually installed\n\tDN_NEED_TO_ENUM          = 0x00000020        // May need reenumeration\n\tDN_NOT_FIRST_TIME        = 0x00000040        // Has received a config\n\tDN_HARDWARE_ENUM         = 0x00000080        // Enum generates hardware ID\n\tDN_LIAR                  = 0x00000100        // Lied about can reconfig once\n\tDN_HAS_MARK              = 0x00000200        // Not CM_Create_DevInst lately\n\tDN_HAS_PROBLEM           = 0x00000400        // Need device installer\n\tDN_FILTERED              = 0x00000800        // Is filtered\n\tDN_MOVED                 = 0x00001000        // Has been moved\n\tDN_DISABLEABLE           = 0x00002000        // Can be disabled\n\tDN_REMOVABLE             = 0x00004000        // Can be removed\n\tDN_PRIVATE_PROBLEM       = 0x00008000        // Has a private problem\n\tDN_MF_PARENT             = 0x00010000        // Multi function parent\n\tDN_MF_CHILD              = 0x00020000        // Multi function child\n\tDN_WILL_BE_REMOVED       = 0x00040000        // DevInst is being removed\n\tDN_NOT_FIRST_TIMEE       = 0x00080000        // Has received a config enumerate\n\tDN_STOP_FREE_RES         = 0x00100000        // When child is stopped, free resources\n\tDN_REBAL_CANDIDATE       = 0x00200000        // Don't skip during rebalance\n\tDN_BAD_PARTIAL           = 0x00400000        // This devnode's log_confs do not have same resources\n\tDN_NT_ENUMERATOR         = 0x00800000        // This devnode's is an NT enumerator\n\tDN_NT_DRIVER             = 0x01000000        // This devnode's is an NT driver\n\tDN_NEEDS_LOCKING         = 0x02000000        // Devnode need lock resume processing\n\tDN_ARM_WAKEUP            = 0x04000000        // Devnode can be the wakeup device\n\tDN_APM_ENUMERATOR        = 0x08000000        // APM aware enumerator\n\tDN_APM_DRIVER            = 0x10000000        // APM aware driver\n\tDN_SILENT_INSTALL        = 0x20000000        // Silent install\n\tDN_NO_SHOW_IN_DM         = 0x40000000        // No show in device manager\n\tDN_BOOT_LOG_PROB         = 0x80000000        // Had a problem during preassignment of boot log conf\n\tDN_NEED_RESTART          = DN_LIAR           // System needs to be restarted for this Devnode to work properly\n\tDN_DRIVER_BLOCKED        = DN_NOT_FIRST_TIME // One or more drivers are blocked from loading for this Devnode\n\tDN_LEGACY_DRIVER         = DN_MOVED          // This device is using a legacy driver\n\tDN_CHILD_WITH_INVALID_ID = DN_HAS_MARK       // One or more children have invalid IDs\n\tDN_DEVICE_DISCONNECTED   = DN_NEEDS_LOCKING  // The function driver for a device reported that the device is not connected.  Typically this means a wireless device is out of range.\n\tDN_QUERY_REMOVE_PENDING  = DN_MF_PARENT      // Device is part of a set of related devices collectively pending query-removal\n\tDN_QUERY_REMOVE_ACTIVE   = DN_MF_CHILD       // Device is actively engaged in a query-remove IRP\n\tDN_CHANGEABLE_FLAGS      = DN_NOT_FIRST_TIME | DN_HARDWARE_ENUM | DN_HAS_MARK | DN_DISABLEABLE | DN_REMOVABLE | DN_MF_CHILD | DN_MF_PARENT | DN_NOT_FIRST_TIMEE | DN_STOP_FREE_RES | DN_REBAL_CANDIDATE | DN_NT_ENUMERATOR | DN_NT_DRIVER | DN_SILENT_INSTALL | DN_NO_SHOW_IN_DM\n)\n\n//sys\tsetupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName *uint16, reserved uintptr) (handle DevInfo, err error) [failretval==DevInfo(InvalidHandle)] = setupapi.SetupDiCreateDeviceInfoListExW\n\n// SetupDiCreateDeviceInfoListEx function creates an empty device information set on a remote or a local computer and optionally associates the set with a device setup class.\nfunc SetupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName string) (deviceInfoSet DevInfo, err error) {\n\tvar machineNameUTF16 *uint16\n\tif machineName != \"\" {\n\t\tmachineNameUTF16, err = UTF16PtrFromString(machineName)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn setupDiCreateDeviceInfoListEx(classGUID, hwndParent, machineNameUTF16, 0)\n}\n\n//sys\tsetupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) = setupapi.SetupDiGetDeviceInfoListDetailW\n\n// SetupDiGetDeviceInfoListDetail function retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name.\nfunc SetupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo) (deviceInfoSetDetailData *DevInfoListDetailData, err error) {\n\tdata := &DevInfoListDetailData{}\n\tdata.size = data.unsafeSizeOf()\n\n\treturn data, setupDiGetDeviceInfoListDetail(deviceInfoSet, data)\n}\n\n// DeviceInfoListDetail method retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name.\nfunc (deviceInfoSet DevInfo) DeviceInfoListDetail() (*DevInfoListDetailData, error) {\n\treturn SetupDiGetDeviceInfoListDetail(deviceInfoSet)\n}\n\n//sys\tsetupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUID *GUID, DeviceDescription *uint16, hwndParent uintptr, CreationFlags DICD, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiCreateDeviceInfoW\n\n// SetupDiCreateDeviceInfo function creates a new device information element and adds it as a new member to the specified device information set.\nfunc SetupDiCreateDeviceInfo(deviceInfoSet DevInfo, deviceName string, classGUID *GUID, deviceDescription string, hwndParent uintptr, creationFlags DICD) (deviceInfoData *DevInfoData, err error) {\n\tdeviceNameUTF16, err := UTF16PtrFromString(deviceName)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tvar deviceDescriptionUTF16 *uint16\n\tif deviceDescription != \"\" {\n\t\tdeviceDescriptionUTF16, err = UTF16PtrFromString(deviceDescription)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\tdata := &DevInfoData{}\n\tdata.size = uint32(unsafe.Sizeof(*data))\n\n\treturn data, setupDiCreateDeviceInfo(deviceInfoSet, deviceNameUTF16, classGUID, deviceDescriptionUTF16, hwndParent, creationFlags, data)\n}\n\n// CreateDeviceInfo method creates a new device information element and adds it as a new member to the specified device information set.\nfunc (deviceInfoSet DevInfo) CreateDeviceInfo(deviceName string, classGUID *GUID, deviceDescription string, hwndParent uintptr, creationFlags DICD) (*DevInfoData, error) {\n\treturn SetupDiCreateDeviceInfo(deviceInfoSet, deviceName, classGUID, deviceDescription, hwndParent, creationFlags)\n}\n\n//sys\tsetupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiEnumDeviceInfo\n\n// SetupDiEnumDeviceInfo function returns a DevInfoData structure that specifies a device information element in a device information set.\nfunc SetupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex int) (*DevInfoData, error) {\n\tdata := &DevInfoData{}\n\tdata.size = uint32(unsafe.Sizeof(*data))\n\n\treturn data, setupDiEnumDeviceInfo(deviceInfoSet, uint32(memberIndex), data)\n}\n\n// EnumDeviceInfo method returns a DevInfoData structure that specifies a device information element in a device information set.\nfunc (deviceInfoSet DevInfo) EnumDeviceInfo(memberIndex int) (*DevInfoData, error) {\n\treturn SetupDiEnumDeviceInfo(deviceInfoSet, memberIndex)\n}\n\n// SetupDiDestroyDeviceInfoList function deletes a device information set and frees all associated memory.\n//sys\tSetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) = setupapi.SetupDiDestroyDeviceInfoList\n\n// Close method deletes a device information set and frees all associated memory.\nfunc (deviceInfoSet DevInfo) Close() error {\n\treturn SetupDiDestroyDeviceInfoList(deviceInfoSet)\n}\n\n//sys\tSetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) = setupapi.SetupDiBuildDriverInfoList\n\n// BuildDriverInfoList method builds a list of drivers that is associated with a specific device or with the global class driver list for a device information set.\nfunc (deviceInfoSet DevInfo) BuildDriverInfoList(deviceInfoData *DevInfoData, driverType SPDIT) error {\n\treturn SetupDiBuildDriverInfoList(deviceInfoSet, deviceInfoData, driverType)\n}\n\n//sys\tSetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) = setupapi.SetupDiCancelDriverInfoSearch\n\n// CancelDriverInfoSearch method cancels a driver list search that is currently in progress in a different thread.\nfunc (deviceInfoSet DevInfo) CancelDriverInfoSearch() error {\n\treturn SetupDiCancelDriverInfoSearch(deviceInfoSet)\n}\n\n//sys\tsetupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex uint32, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiEnumDriverInfoW\n\n// SetupDiEnumDriverInfo function enumerates the members of a driver list.\nfunc SetupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex int) (*DrvInfoData, error) {\n\tdata := &DrvInfoData{}\n\tdata.size = uint32(unsafe.Sizeof(*data))\n\n\treturn data, setupDiEnumDriverInfo(deviceInfoSet, deviceInfoData, driverType, uint32(memberIndex), data)\n}\n\n// EnumDriverInfo method enumerates the members of a driver list.\nfunc (deviceInfoSet DevInfo) EnumDriverInfo(deviceInfoData *DevInfoData, driverType SPDIT, memberIndex int) (*DrvInfoData, error) {\n\treturn SetupDiEnumDriverInfo(deviceInfoSet, deviceInfoData, driverType, memberIndex)\n}\n\n//sys\tsetupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiGetSelectedDriverW\n\n// SetupDiGetSelectedDriver function retrieves the selected driver for a device information set or a particular device information element.\nfunc SetupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (*DrvInfoData, error) {\n\tdata := &DrvInfoData{}\n\tdata.size = uint32(unsafe.Sizeof(*data))\n\n\treturn data, setupDiGetSelectedDriver(deviceInfoSet, deviceInfoData, data)\n}\n\n// SelectedDriver method retrieves the selected driver for a device information set or a particular device information element.\nfunc (deviceInfoSet DevInfo) SelectedDriver(deviceInfoData *DevInfoData) (*DrvInfoData, error) {\n\treturn SetupDiGetSelectedDriver(deviceInfoSet, deviceInfoData)\n}\n\n//sys\tSetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) = setupapi.SetupDiSetSelectedDriverW\n\n// SetSelectedDriver method sets, or resets, the selected driver for a device information element or the selected class driver for a device information set.\nfunc (deviceInfoSet DevInfo) SetSelectedDriver(deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) error {\n\treturn SetupDiSetSelectedDriver(deviceInfoSet, deviceInfoData, driverInfoData)\n}\n\n//sys\tsetupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData, driverInfoDetailData *DrvInfoDetailData, driverInfoDetailDataSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetDriverInfoDetailW\n\n// SetupDiGetDriverInfoDetail function retrieves driver information detail for a device information set or a particular device information element in the device information set.\nfunc SetupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (*DrvInfoDetailData, error) {\n\treqSize := uint32(2048)\n\tfor {\n\t\tbuf := make([]byte, reqSize)\n\t\tdata := (*DrvInfoDetailData)(unsafe.Pointer(&buf[0]))\n\t\tdata.size = data.unsafeSizeOf()\n\t\terr := setupDiGetDriverInfoDetail(deviceInfoSet, deviceInfoData, driverInfoData, data, uint32(len(buf)), &reqSize)\n\t\tif err == ERROR_INSUFFICIENT_BUFFER {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdata.size = reqSize\n\t\treturn data, nil\n\t}\n}\n\n// DriverInfoDetail method retrieves driver information detail for a device information set or a particular device information element in the device information set.\nfunc (deviceInfoSet DevInfo) DriverInfoDetail(deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (*DrvInfoDetailData, error) {\n\treturn SetupDiGetDriverInfoDetail(deviceInfoSet, deviceInfoData, driverInfoData)\n}\n\n//sys\tSetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) = setupapi.SetupDiDestroyDriverInfoList\n\n// DestroyDriverInfoList method deletes a driver list.\nfunc (deviceInfoSet DevInfo) DestroyDriverInfoList(deviceInfoData *DevInfoData, driverType SPDIT) error {\n\treturn SetupDiDestroyDriverInfoList(deviceInfoSet, deviceInfoData, driverType)\n}\n\n//sys\tsetupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, deviceInfoSet DevInfo, machineName *uint16, reserved uintptr) (handle DevInfo, err error) [failretval==DevInfo(InvalidHandle)] = setupapi.SetupDiGetClassDevsExW\n\n// SetupDiGetClassDevsEx function returns a handle to a device information set that contains requested device information elements for a local or a remote computer.\nfunc SetupDiGetClassDevsEx(classGUID *GUID, enumerator string, hwndParent uintptr, flags DIGCF, deviceInfoSet DevInfo, machineName string) (handle DevInfo, err error) {\n\tvar enumeratorUTF16 *uint16\n\tif enumerator != \"\" {\n\t\tenumeratorUTF16, err = UTF16PtrFromString(enumerator)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\tvar machineNameUTF16 *uint16\n\tif machineName != \"\" {\n\t\tmachineNameUTF16, err = UTF16PtrFromString(machineName)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn setupDiGetClassDevsEx(classGUID, enumeratorUTF16, hwndParent, flags, deviceInfoSet, machineNameUTF16, 0)\n}\n\n// SetupDiCallClassInstaller function calls the appropriate class installer, and any registered co-installers, with the specified installation request (DIF code).\n//sys\tSetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiCallClassInstaller\n\n// CallClassInstaller member calls the appropriate class installer, and any registered co-installers, with the specified installation request (DIF code).\nfunc (deviceInfoSet DevInfo) CallClassInstaller(installFunction DI_FUNCTION, deviceInfoData *DevInfoData) error {\n\treturn SetupDiCallClassInstaller(installFunction, deviceInfoSet, deviceInfoData)\n}\n\n// SetupDiOpenDevRegKey function opens a registry key for device-specific configuration information.\n//sys\tSetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key Handle, err error) [failretval==InvalidHandle] = setupapi.SetupDiOpenDevRegKey\n\n// OpenDevRegKey method opens a registry key for device-specific configuration information.\nfunc (deviceInfoSet DevInfo) OpenDevRegKey(DeviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (Handle, error) {\n\treturn SetupDiOpenDevRegKey(deviceInfoSet, DeviceInfoData, Scope, HwProfile, KeyType, samDesired)\n}\n\n//sys\tsetupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY, propertyType *DEVPROPTYPE, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32, flags uint32) (err error) = setupapi.SetupDiGetDevicePropertyW\n\n// SetupDiGetDeviceProperty function retrieves a specified device instance property.\nfunc SetupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY) (value interface{}, err error) {\n\treqSize := uint32(256)\n\tfor {\n\t\tvar dataType DEVPROPTYPE\n\t\tbuf := make([]byte, reqSize)\n\t\terr = setupDiGetDeviceProperty(deviceInfoSet, deviceInfoData, propertyKey, &dataType, &buf[0], uint32(len(buf)), &reqSize, 0)\n\t\tif err == ERROR_INSUFFICIENT_BUFFER {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tswitch dataType {\n\t\tcase DEVPROP_TYPE_STRING:\n\t\t\tret := UTF16ToString(bufToUTF16(buf))\n\t\t\truntime.KeepAlive(buf)\n\t\t\treturn ret, nil\n\t\t}\n\t\treturn nil, errors.New(\"unimplemented property type\")\n\t}\n}\n\n//sys\tsetupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyRegDataType *uint32, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetDeviceRegistryPropertyW\n\n// SetupDiGetDeviceRegistryProperty function retrieves a specified Plug and Play device property.\nfunc SetupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP) (value interface{}, err error) {\n\treqSize := uint32(256)\n\tfor {\n\t\tvar dataType uint32\n\t\tbuf := make([]byte, reqSize)\n\t\terr = setupDiGetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, &dataType, &buf[0], uint32(len(buf)), &reqSize)\n\t\tif err == ERROR_INSUFFICIENT_BUFFER {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\treturn getRegistryValue(buf[:reqSize], dataType)\n\t}\n}\n\nfunc getRegistryValue(buf []byte, dataType uint32) (interface{}, error) {\n\tswitch dataType {\n\tcase REG_SZ:\n\t\tret := UTF16ToString(bufToUTF16(buf))\n\t\truntime.KeepAlive(buf)\n\t\treturn ret, nil\n\tcase REG_EXPAND_SZ:\n\t\tvalue := UTF16ToString(bufToUTF16(buf))\n\t\tif value == \"\" {\n\t\t\treturn \"\", nil\n\t\t}\n\t\tp, err := syscall.UTF16PtrFromString(value)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tret := make([]uint16, 100)\n\t\tfor {\n\t\t\tn, err := ExpandEnvironmentStrings(p, &ret[0], uint32(len(ret)))\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\t\t\tif n <= uint32(len(ret)) {\n\t\t\t\treturn UTF16ToString(ret[:n]), nil\n\t\t\t}\n\t\t\tret = make([]uint16, n)\n\t\t}\n\tcase REG_BINARY:\n\t\treturn buf, nil\n\tcase REG_DWORD_LITTLE_ENDIAN:\n\t\treturn binary.LittleEndian.Uint32(buf), nil\n\tcase REG_DWORD_BIG_ENDIAN:\n\t\treturn binary.BigEndian.Uint32(buf), nil\n\tcase REG_MULTI_SZ:\n\t\tbufW := bufToUTF16(buf)\n\t\ta := []string{}\n\t\tfor i := 0; i < len(bufW); {\n\t\t\tj := i + wcslen(bufW[i:])\n\t\t\tif i < j {\n\t\t\t\ta = append(a, UTF16ToString(bufW[i:j]))\n\t\t\t}\n\t\t\ti = j + 1\n\t\t}\n\t\truntime.KeepAlive(buf)\n\t\treturn a, nil\n\tcase REG_QWORD_LITTLE_ENDIAN:\n\t\treturn binary.LittleEndian.Uint64(buf), nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"Unsupported registry value type: %v\", dataType)\n\t}\n}\n\n// bufToUTF16 function reinterprets []byte buffer as []uint16\nfunc bufToUTF16(buf []byte) []uint16 {\n\tsl := struct {\n\t\taddr *uint16\n\t\tlen  int\n\t\tcap  int\n\t}{(*uint16)(unsafe.Pointer(&buf[0])), len(buf) / 2, cap(buf) / 2}\n\treturn *(*[]uint16)(unsafe.Pointer(&sl))\n}\n\n// utf16ToBuf function reinterprets []uint16 as []byte\nfunc utf16ToBuf(buf []uint16) []byte {\n\tsl := struct {\n\t\taddr *byte\n\t\tlen  int\n\t\tcap  int\n\t}{(*byte)(unsafe.Pointer(&buf[0])), len(buf) * 2, cap(buf) * 2}\n\treturn *(*[]byte)(unsafe.Pointer(&sl))\n}\n\nfunc wcslen(str []uint16) int {\n\tfor i := 0; i < len(str); i++ {\n\t\tif str[i] == 0 {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn len(str)\n}\n\n// DeviceRegistryProperty method retrieves a specified Plug and Play device property.\nfunc (deviceInfoSet DevInfo) DeviceRegistryProperty(deviceInfoData *DevInfoData, property SPDRP) (interface{}, error) {\n\treturn SetupDiGetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property)\n}\n\n//sys\tsetupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffer *byte, propertyBufferSize uint32) (err error) = setupapi.SetupDiSetDeviceRegistryPropertyW\n\n// SetupDiSetDeviceRegistryProperty function sets a Plug and Play device property for a device.\nfunc SetupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffers []byte) error {\n\treturn setupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, &propertyBuffers[0], uint32(len(propertyBuffers)))\n}\n\n// SetDeviceRegistryProperty function sets a Plug and Play device property for a device.\nfunc (deviceInfoSet DevInfo) SetDeviceRegistryProperty(deviceInfoData *DevInfoData, property SPDRP, propertyBuffers []byte) error {\n\treturn SetupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, propertyBuffers)\n}\n\n// SetDeviceRegistryPropertyString method sets a Plug and Play device property string for a device.\nfunc (deviceInfoSet DevInfo) SetDeviceRegistryPropertyString(deviceInfoData *DevInfoData, property SPDRP, str string) error {\n\tstr16, err := UTF16FromString(str)\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = SetupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, utf16ToBuf(append(str16, 0)))\n\truntime.KeepAlive(str16)\n\treturn err\n}\n\n//sys\tsetupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) = setupapi.SetupDiGetDeviceInstallParamsW\n\n// SetupDiGetDeviceInstallParams function retrieves device installation parameters for a device information set or a particular device information element.\nfunc SetupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (*DevInstallParams, error) {\n\tparams := &DevInstallParams{}\n\tparams.size = uint32(unsafe.Sizeof(*params))\n\n\treturn params, setupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData, params)\n}\n\n// DeviceInstallParams method retrieves device installation parameters for a device information set or a particular device information element.\nfunc (deviceInfoSet DevInfo) DeviceInstallParams(deviceInfoData *DevInfoData) (*DevInstallParams, error) {\n\treturn SetupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData)\n}\n\n//sys\tsetupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) = setupapi.SetupDiGetDeviceInstanceIdW\n\n// SetupDiGetDeviceInstanceId function retrieves the instance ID of the device.\nfunc SetupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (string, error) {\n\treqSize := uint32(1024)\n\tfor {\n\t\tbuf := make([]uint16, reqSize)\n\t\terr := setupDiGetDeviceInstanceId(deviceInfoSet, deviceInfoData, &buf[0], uint32(len(buf)), &reqSize)\n\t\tif err == ERROR_INSUFFICIENT_BUFFER {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\treturn UTF16ToString(buf), nil\n\t}\n}\n\n// DeviceInstanceID method retrieves the instance ID of the device.\nfunc (deviceInfoSet DevInfo) DeviceInstanceID(deviceInfoData *DevInfoData) (string, error) {\n\treturn SetupDiGetDeviceInstanceId(deviceInfoSet, deviceInfoData)\n}\n\n// SetupDiGetClassInstallParams function retrieves class installation parameters for a device information set or a particular device information element.\n//sys\tSetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetClassInstallParamsW\n\n// ClassInstallParams method retrieves class installation parameters for a device information set or a particular device information element.\nfunc (deviceInfoSet DevInfo) ClassInstallParams(deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) error {\n\treturn SetupDiGetClassInstallParams(deviceInfoSet, deviceInfoData, classInstallParams, classInstallParamsSize, requiredSize)\n}\n\n//sys\tSetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) = setupapi.SetupDiSetDeviceInstallParamsW\n\n// SetDeviceInstallParams member sets device installation parameters for a device information set or a particular device information element.\nfunc (deviceInfoSet DevInfo) SetDeviceInstallParams(deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) error {\n\treturn SetupDiSetDeviceInstallParams(deviceInfoSet, deviceInfoData, deviceInstallParams)\n}\n\n// SetupDiSetClassInstallParams function sets or clears class install parameters for a device information set or a particular device information element.\n//sys\tSetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) (err error) = setupapi.SetupDiSetClassInstallParamsW\n\n// SetClassInstallParams method sets or clears class install parameters for a device information set or a particular device information element.\nfunc (deviceInfoSet DevInfo) SetClassInstallParams(deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) error {\n\treturn SetupDiSetClassInstallParams(deviceInfoSet, deviceInfoData, classInstallParams, classInstallParamsSize)\n}\n\n//sys\tsetupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) = setupapi.SetupDiClassNameFromGuidExW\n\n// SetupDiClassNameFromGuidEx function retrieves the class name associated with a class GUID. The class can be installed on a local or remote computer.\nfunc SetupDiClassNameFromGuidEx(classGUID *GUID, machineName string) (className string, err error) {\n\tvar classNameUTF16 [MAX_CLASS_NAME_LEN]uint16\n\n\tvar machineNameUTF16 *uint16\n\tif machineName != \"\" {\n\t\tmachineNameUTF16, err = UTF16PtrFromString(machineName)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\terr = setupDiClassNameFromGuidEx(classGUID, &classNameUTF16[0], MAX_CLASS_NAME_LEN, nil, machineNameUTF16, 0)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tclassName = UTF16ToString(classNameUTF16[:])\n\treturn\n}\n\n//sys\tsetupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGuidListSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) = setupapi.SetupDiClassGuidsFromNameExW\n\n// SetupDiClassGuidsFromNameEx function retrieves the GUIDs associated with the specified class name. This resulting list contains the classes currently installed on a local or remote computer.\nfunc SetupDiClassGuidsFromNameEx(className string, machineName string) ([]GUID, error) {\n\tclassNameUTF16, err := UTF16PtrFromString(className)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar machineNameUTF16 *uint16\n\tif machineName != \"\" {\n\t\tmachineNameUTF16, err = UTF16PtrFromString(machineName)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treqSize := uint32(4)\n\tfor {\n\t\tbuf := make([]GUID, reqSize)\n\t\terr = setupDiClassGuidsFromNameEx(classNameUTF16, &buf[0], uint32(len(buf)), &reqSize, machineNameUTF16, 0)\n\t\tif err == ERROR_INSUFFICIENT_BUFFER {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn buf[:reqSize], nil\n\t}\n}\n\n//sys\tsetupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiGetSelectedDevice\n\n// SetupDiGetSelectedDevice function retrieves the selected device information element in a device information set.\nfunc SetupDiGetSelectedDevice(deviceInfoSet DevInfo) (*DevInfoData, error) {\n\tdata := &DevInfoData{}\n\tdata.size = uint32(unsafe.Sizeof(*data))\n\n\treturn data, setupDiGetSelectedDevice(deviceInfoSet, data)\n}\n\n// SelectedDevice method retrieves the selected device information element in a device information set.\nfunc (deviceInfoSet DevInfo) SelectedDevice() (*DevInfoData, error) {\n\treturn SetupDiGetSelectedDevice(deviceInfoSet)\n}\n\n// SetupDiSetSelectedDevice function sets a device information element as the selected member of a device information set. This function is typically used by an installation wizard.\n//sys\tSetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) = setupapi.SetupDiSetSelectedDevice\n\n// SetSelectedDevice method sets a device information element as the selected member of a device information set. This function is typically used by an installation wizard.\nfunc (deviceInfoSet DevInfo) SetSelectedDevice(deviceInfoData *DevInfoData) error {\n\treturn SetupDiSetSelectedDevice(deviceInfoSet, deviceInfoData)\n}\n\n//sys\tsetupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (err error) = setupapi.SetupUninstallOEMInfW\n\n// SetupUninstallOEMInf uninstalls the specified driver.\nfunc SetupUninstallOEMInf(infFileName string, flags SUOI) error {\n\tinfFileName16, err := UTF16PtrFromString(infFileName)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn setupUninstallOEMInf(infFileName16, flags, 0)\n}\n\n//sys cm_MapCrToWin32Err(configRet CONFIGRET, defaultWin32Error Errno) (ret Errno) = CfgMgr32.CM_MapCrToWin32Err\n\n//sys cm_Get_Device_Interface_List_Size(len *uint32, interfaceClass *GUID, deviceID *uint16, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_Device_Interface_List_SizeW\n//sys cm_Get_Device_Interface_List(interfaceClass *GUID, deviceID *uint16, buffer *uint16, bufferLen uint32, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_Device_Interface_ListW\n\nfunc CM_Get_Device_Interface_List(deviceID string, interfaceClass *GUID, flags uint32) ([]string, error) {\n\tdeviceID16, err := UTF16PtrFromString(deviceID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar buf []uint16\n\tvar buflen uint32\n\tfor {\n\t\tif ret := cm_Get_Device_Interface_List_Size(&buflen, interfaceClass, deviceID16, flags); ret != CR_SUCCESS {\n\t\t\treturn nil, ret\n\t\t}\n\t\tbuf = make([]uint16, buflen)\n\t\tif ret := cm_Get_Device_Interface_List(interfaceClass, deviceID16, &buf[0], buflen, flags); ret == CR_SUCCESS {\n\t\t\tbreak\n\t\t} else if ret != CR_BUFFER_SMALL {\n\t\t\treturn nil, ret\n\t\t}\n\t}\n\tvar interfaces []string\n\tfor i := 0; i < len(buf); {\n\t\tj := i + wcslen(buf[i:])\n\t\tif i < j {\n\t\t\tinterfaces = append(interfaces, UTF16ToString(buf[i:j]))\n\t\t}\n\t\ti = j + 1\n\t}\n\tif interfaces == nil {\n\t\treturn nil, ERROR_NO_SUCH_DEVICE_INTERFACE\n\t}\n\treturn interfaces, nil\n}\n\n//sys cm_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) (ret CONFIGRET) = CfgMgr32.CM_Get_DevNode_Status\n\nfunc CM_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) error {\n\tret := cm_Get_DevNode_Status(status, problemNumber, devInst, flags)\n\tif ret == CR_SUCCESS {\n\t\treturn nil\n\t}\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/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 windows\n\npackage windows\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/windows/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 windows\n\n// Package windows 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 syscall 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 windows // import \"golang.org/x/sys/windows\"\n\nimport (\n\t\"bytes\"\n\t\"strings\"\n\t\"syscall\"\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, syscall.EINVAL).\nfunc ByteSliceFromString(s string) ([]byte, error) {\n\tif strings.IndexByte(s, 0) != -1 {\n\t\treturn nil, syscall.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, syscall.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"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/syscall_windows.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// Windows system calls.\n\npackage windows\n\nimport (\n\terrorspkg \"errors\"\n\t\"fmt\"\n\t\"runtime\"\n\t\"sync\"\n\t\"syscall\"\n\t\"time\"\n\t\"unicode/utf16\"\n\t\"unsafe\"\n)\n\ntype (\n\tHandle uintptr\n\tHWND   uintptr\n)\n\nconst (\n\tInvalidHandle = ^Handle(0)\n\tInvalidHWND   = ^HWND(0)\n\n\t// Flags for DefineDosDevice.\n\tDDD_EXACT_MATCH_ON_REMOVE = 0x00000004\n\tDDD_NO_BROADCAST_SYSTEM   = 0x00000008\n\tDDD_RAW_TARGET_PATH       = 0x00000001\n\tDDD_REMOVE_DEFINITION     = 0x00000002\n\n\t// Return values for GetDriveType.\n\tDRIVE_UNKNOWN     = 0\n\tDRIVE_NO_ROOT_DIR = 1\n\tDRIVE_REMOVABLE   = 2\n\tDRIVE_FIXED       = 3\n\tDRIVE_REMOTE      = 4\n\tDRIVE_CDROM       = 5\n\tDRIVE_RAMDISK     = 6\n\n\t// File system flags from GetVolumeInformation and GetVolumeInformationByHandle.\n\tFILE_CASE_SENSITIVE_SEARCH        = 0x00000001\n\tFILE_CASE_PRESERVED_NAMES         = 0x00000002\n\tFILE_FILE_COMPRESSION             = 0x00000010\n\tFILE_DAX_VOLUME                   = 0x20000000\n\tFILE_NAMED_STREAMS                = 0x00040000\n\tFILE_PERSISTENT_ACLS              = 0x00000008\n\tFILE_READ_ONLY_VOLUME             = 0x00080000\n\tFILE_SEQUENTIAL_WRITE_ONCE        = 0x00100000\n\tFILE_SUPPORTS_ENCRYPTION          = 0x00020000\n\tFILE_SUPPORTS_EXTENDED_ATTRIBUTES = 0x00800000\n\tFILE_SUPPORTS_HARD_LINKS          = 0x00400000\n\tFILE_SUPPORTS_OBJECT_IDS          = 0x00010000\n\tFILE_SUPPORTS_OPEN_BY_FILE_ID     = 0x01000000\n\tFILE_SUPPORTS_REPARSE_POINTS      = 0x00000080\n\tFILE_SUPPORTS_SPARSE_FILES        = 0x00000040\n\tFILE_SUPPORTS_TRANSACTIONS        = 0x00200000\n\tFILE_SUPPORTS_USN_JOURNAL         = 0x02000000\n\tFILE_UNICODE_ON_DISK              = 0x00000004\n\tFILE_VOLUME_IS_COMPRESSED         = 0x00008000\n\tFILE_VOLUME_QUOTAS                = 0x00000020\n\n\t// Flags for LockFileEx.\n\tLOCKFILE_FAIL_IMMEDIATELY = 0x00000001\n\tLOCKFILE_EXCLUSIVE_LOCK   = 0x00000002\n\n\t// Return value of SleepEx and other APC functions\n\tWAIT_IO_COMPLETION = 0x000000C0\n)\n\n// StringToUTF16 is deprecated. Use UTF16FromString instead.\n// If s contains a NUL byte this function panics instead of\n// returning an error.\nfunc StringToUTF16(s string) []uint16 {\n\ta, err := UTF16FromString(s)\n\tif err != nil {\n\t\tpanic(\"windows: string with NUL passed to StringToUTF16\")\n\t}\n\treturn a\n}\n\n// UTF16FromString returns the UTF-16 encoding of the UTF-8 string\n// s, with a terminating NUL added. If s contains a NUL byte at any\n// location, it returns (nil, syscall.EINVAL).\nfunc UTF16FromString(s string) ([]uint16, error) {\n\treturn syscall.UTF16FromString(s)\n}\n\n// UTF16ToString returns the UTF-8 encoding of the UTF-16 sequence s,\n// with a terminating NUL and any bytes after the NUL removed.\nfunc UTF16ToString(s []uint16) string {\n\treturn syscall.UTF16ToString(s)\n}\n\n// StringToUTF16Ptr is deprecated. Use UTF16PtrFromString instead.\n// If s contains a NUL byte this function panics instead of\n// returning an error.\nfunc StringToUTF16Ptr(s string) *uint16 { return &StringToUTF16(s)[0] }\n\n// UTF16PtrFromString returns pointer to the UTF-16 encoding of\n// the UTF-8 string s, with a terminating NUL added. If s\n// contains a NUL byte at any location, it returns (nil, syscall.EINVAL).\nfunc UTF16PtrFromString(s string) (*uint16, error) {\n\ta, err := UTF16FromString(s)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &a[0], nil\n}\n\n// UTF16PtrToString takes a pointer to a UTF-16 sequence and returns the corresponding UTF-8 encoded string.\n// If the pointer is nil, it returns the empty string. It assumes that the UTF-16 sequence is terminated\n// at a zero word; if the zero word is not present, the program may crash.\nfunc UTF16PtrToString(p *uint16) 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); *(*uint16)(ptr) != 0; n++ {\n\t\tptr = unsafe.Pointer(uintptr(ptr) + unsafe.Sizeof(*p))\n\t}\n\treturn UTF16ToString(unsafe.Slice(p, n))\n}\n\nfunc Getpagesize() int { return 4096 }\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.\n// The argument is expected to be a function with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr.\nfunc NewCallback(fn interface{}) uintptr {\n\treturn syscall.NewCallback(fn)\n}\n\n// NewCallbackCDecl converts a Go function to a function pointer conforming to the cdecl calling convention.\n// This is useful when interoperating with Windows code requiring callbacks.\n// The argument is expected to be a function with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr.\nfunc NewCallbackCDecl(fn interface{}) uintptr {\n\treturn syscall.NewCallbackCDecl(fn)\n}\n\n// windows api calls\n\n//sys\tGetLastError() (lasterr error)\n//sys\tLoadLibrary(libname string) (handle Handle, err error) = LoadLibraryW\n//sys\tLoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) = LoadLibraryExW\n//sys\tFreeLibrary(handle Handle) (err error)\n//sys\tGetProcAddress(module Handle, procname string) (proc uintptr, err error)\n//sys\tGetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) = kernel32.GetModuleFileNameW\n//sys\tGetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) = kernel32.GetModuleHandleExW\n//sys\tSetDefaultDllDirectories(directoryFlags uint32) (err error)\n//sys\tAddDllDirectory(path *uint16) (cookie uintptr, err error) = kernel32.AddDllDirectory\n//sys\tRemoveDllDirectory(cookie uintptr) (err error) = kernel32.RemoveDllDirectory\n//sys\tSetDllDirectory(path string) (err error) = kernel32.SetDllDirectoryW\n//sys\tGetVersion() (ver uint32, err error)\n//sys\tFormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) = FormatMessageW\n//sys\tExitProcess(exitcode uint32)\n//sys\tIsWow64Process(handle Handle, isWow64 *bool) (err error) = IsWow64Process\n//sys\tIsWow64Process2(handle Handle, processMachine *uint16, nativeMachine *uint16) (err error) = IsWow64Process2?\n//sys\tCreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile Handle) (handle Handle, err error) [failretval==InvalidHandle] = CreateFileW\n//sys\tCreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error)  [failretval==InvalidHandle] = CreateNamedPipeW\n//sys\tConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error)\n//sys\tDisconnectNamedPipe(pipe Handle) (err error)\n//sys   GetNamedPipeClientProcessId(pipe Handle, clientProcessID *uint32) (err error)\n//sys   GetNamedPipeServerProcessId(pipe Handle, serverProcessID *uint32) (err error)\n//sys\tGetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error)\n//sys\tGetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW\n//sys\tSetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) = SetNamedPipeHandleState\n//sys\treadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = ReadFile\n//sys\twriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = WriteFile\n//sys\tGetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error)\n//sys\tSetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) [failretval==0xffffffff]\n//sys\tCloseHandle(handle Handle) (err error)\n//sys\tGetStdHandle(stdhandle uint32) (handle Handle, err error) [failretval==InvalidHandle]\n//sys\tSetStdHandle(stdhandle uint32, handle Handle) (err error)\n//sys\tfindFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstFileW\n//sys\tfindNextFile1(handle Handle, data *win32finddata1) (err error) = FindNextFileW\n//sys\tFindClose(handle Handle) (err error)\n//sys\tGetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error)\n//sys\tGetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error)\n//sys\tSetFileInformationByHandle(handle Handle, class uint32, inBuffer *byte, inBufferLen uint32) (err error)\n//sys\tGetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) = GetCurrentDirectoryW\n//sys\tSetCurrentDirectory(path *uint16) (err error) = SetCurrentDirectoryW\n//sys\tCreateDirectory(path *uint16, sa *SecurityAttributes) (err error) = CreateDirectoryW\n//sys\tRemoveDirectory(path *uint16) (err error) = RemoveDirectoryW\n//sys\tDeleteFile(path *uint16) (err error) = DeleteFileW\n//sys\tMoveFile(from *uint16, to *uint16) (err error) = MoveFileW\n//sys\tMoveFileEx(from *uint16, to *uint16, flags uint32) (err error) = MoveFileExW\n//sys\tLockFileEx(file Handle, flags uint32, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error)\n//sys\tUnlockFileEx(file Handle, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error)\n//sys\tGetComputerName(buf *uint16, n *uint32) (err error) = GetComputerNameW\n//sys\tGetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW\n//sys\tSetEndOfFile(handle Handle) (err error)\n//sys\tSetFileValidData(handle Handle, validDataLength int64) (err error)\n//sys\tGetSystemTimeAsFileTime(time *Filetime)\n//sys\tGetSystemTimePreciseAsFileTime(time *Filetime)\n//sys\tGetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) [failretval==0xffffffff]\n//sys\tCreateIoCompletionPort(filehandle Handle, cphandle Handle, key uintptr, threadcnt uint32) (handle Handle, err error)\n//sys\tGetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uintptr, overlapped **Overlapped, timeout uint32) (err error)\n//sys\tPostQueuedCompletionStatus(cphandle Handle, qty uint32, key uintptr, overlapped *Overlapped) (err error)\n//sys\tCancelIo(s Handle) (err error)\n//sys\tCancelIoEx(s Handle, o *Overlapped) (err error)\n//sys\tCreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = CreateProcessW\n//sys\tCreateProcessAsUser(token Token, appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = advapi32.CreateProcessAsUserW\n//sys   initializeProcThreadAttributeList(attrlist *ProcThreadAttributeList, attrcount uint32, flags uint32, size *uintptr) (err error) = InitializeProcThreadAttributeList\n//sys   deleteProcThreadAttributeList(attrlist *ProcThreadAttributeList) = DeleteProcThreadAttributeList\n//sys   updateProcThreadAttribute(attrlist *ProcThreadAttributeList, flags uint32, attr uintptr, value unsafe.Pointer, size uintptr, prevvalue unsafe.Pointer, returnedsize *uintptr) (err error) = UpdateProcThreadAttribute\n//sys\tOpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error)\n//sys\tShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) [failretval<=32] = shell32.ShellExecuteW\n//sys\tGetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) = user32.GetWindowThreadProcessId\n//sys\tLoadKeyboardLayout(name *uint16, flags uint32) (hkl Handle, err error) [failretval==0] = user32.LoadKeyboardLayoutW\n//sys\tUnloadKeyboardLayout(hkl Handle) (err error) = user32.UnloadKeyboardLayout\n//sys\tGetKeyboardLayout(tid uint32) (hkl Handle) = user32.GetKeyboardLayout\n//sys\tToUnicodeEx(vkey uint32, scancode uint32, keystate *byte, pwszBuff *uint16, cchBuff int32, flags uint32, hkl Handle) (ret int32) = user32.ToUnicodeEx\n//sys\tGetShellWindow() (shellWindow HWND) = user32.GetShellWindow\n//sys\tMessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW\n//sys\tExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx\n//sys\tshGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) = shell32.SHGetKnownFolderPath\n//sys\tTerminateProcess(handle Handle, exitcode uint32) (err error)\n//sys\tGetExitCodeProcess(handle Handle, exitcode *uint32) (err error)\n//sys\tgetStartupInfo(startupInfo *StartupInfo) = GetStartupInfoW\n//sys\tGetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error)\n//sys\tDuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error)\n//sys\tWaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) [failretval==0xffffffff]\n//sys\twaitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMilliseconds uint32) (event uint32, err error) [failretval==0xffffffff] = WaitForMultipleObjects\n//sys\tGetTempPath(buflen uint32, buf *uint16) (n uint32, err error) = GetTempPathW\n//sys\tCreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error)\n//sys\tGetFileType(filehandle Handle) (n uint32, err error)\n//sys\tCryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) = advapi32.CryptAcquireContextW\n//sys\tCryptReleaseContext(provhandle Handle, flags uint32) (err error) = advapi32.CryptReleaseContext\n//sys\tCryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) = advapi32.CryptGenRandom\n//sys\tGetEnvironmentStrings() (envs *uint16, err error) [failretval==nil] = kernel32.GetEnvironmentStringsW\n//sys\tFreeEnvironmentStrings(envs *uint16) (err error) = kernel32.FreeEnvironmentStringsW\n//sys\tGetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) = kernel32.GetEnvironmentVariableW\n//sys\tSetEnvironmentVariable(name *uint16, value *uint16) (err error) = kernel32.SetEnvironmentVariableW\n//sys\tExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) = kernel32.ExpandEnvironmentStringsW\n//sys\tCreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) = userenv.CreateEnvironmentBlock\n//sys\tDestroyEnvironmentBlock(block *uint16) (err error) = userenv.DestroyEnvironmentBlock\n//sys\tgetTickCount64() (ms uint64) = kernel32.GetTickCount64\n//sys   GetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error)\n//sys\tSetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error)\n//sys\tGetFileAttributes(name *uint16) (attrs uint32, err error) [failretval==INVALID_FILE_ATTRIBUTES] = kernel32.GetFileAttributesW\n//sys\tSetFileAttributes(name *uint16, attrs uint32) (err error) = kernel32.SetFileAttributesW\n//sys\tGetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) = kernel32.GetFileAttributesExW\n//sys\tGetCommandLine() (cmd *uint16) = kernel32.GetCommandLineW\n//sys\tcommandLineToArgv(cmd *uint16, argc *int32) (argv **uint16, err error) [failretval==nil] = shell32.CommandLineToArgvW\n//sys\tLocalFree(hmem Handle) (handle Handle, err error) [failretval!=0]\n//sys\tLocalAlloc(flags uint32, length uint32) (ptr uintptr, err error)\n//sys\tSetHandleInformation(handle Handle, mask uint32, flags uint32) (err error)\n//sys\tFlushFileBuffers(handle Handle) (err error)\n//sys\tGetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) = kernel32.GetFullPathNameW\n//sys\tGetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) = kernel32.GetLongPathNameW\n//sys\tGetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) = kernel32.GetShortPathNameW\n//sys\tGetFinalPathNameByHandle(file Handle, filePath *uint16, filePathSize uint32, flags uint32) (n uint32, err error) = kernel32.GetFinalPathNameByHandleW\n//sys\tCreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateFileMappingW\n//sys\tMapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error)\n//sys\tUnmapViewOfFile(addr uintptr) (err error)\n//sys\tFlushViewOfFile(addr uintptr, length uintptr) (err error)\n//sys\tVirtualLock(addr uintptr, length uintptr) (err error)\n//sys\tVirtualUnlock(addr uintptr, length uintptr) (err error)\n//sys\tVirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) = kernel32.VirtualAlloc\n//sys\tVirtualFree(address uintptr, size uintptr, freetype uint32) (err error) = kernel32.VirtualFree\n//sys\tVirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) = kernel32.VirtualProtect\n//sys\tVirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) = kernel32.VirtualProtectEx\n//sys\tVirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQuery\n//sys\tVirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQueryEx\n//sys\tReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) = kernel32.ReadProcessMemory\n//sys\tWriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) = kernel32.WriteProcessMemory\n//sys\tTransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) = mswsock.TransmitFile\n//sys\tReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) = kernel32.ReadDirectoryChangesW\n//sys\tFindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.FindFirstChangeNotificationW\n//sys\tFindNextChangeNotification(handle Handle) (err error)\n//sys\tFindCloseChangeNotification(handle Handle) (err error)\n//sys\tCertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) = crypt32.CertOpenSystemStoreW\n//sys\tCertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) = crypt32.CertOpenStore\n//sys\tCertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) [failretval==nil] = crypt32.CertEnumCertificatesInStore\n//sys\tCertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) = crypt32.CertAddCertificateContextToStore\n//sys\tCertCloseStore(store Handle, flags uint32) (err error) = crypt32.CertCloseStore\n//sys\tCertDeleteCertificateFromStore(certContext *CertContext) (err error) = crypt32.CertDeleteCertificateFromStore\n//sys\tCertDuplicateCertificateContext(certContext *CertContext) (dupContext *CertContext) = crypt32.CertDuplicateCertificateContext\n//sys\tPFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) = crypt32.PFXImportCertStore\n//sys\tCertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) = crypt32.CertGetCertificateChain\n//sys\tCertFreeCertificateChain(ctx *CertChainContext) = crypt32.CertFreeCertificateChain\n//sys\tCertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) [failretval==nil] = crypt32.CertCreateCertificateContext\n//sys\tCertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertFreeCertificateContext\n//sys\tCertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = crypt32.CertVerifyCertificateChainPolicy\n//sys\tCertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) = crypt32.CertGetNameStringW\n//sys\tCertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) = crypt32.CertFindExtension\n//sys   CertFindCertificateInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevCertContext *CertContext) (cert *CertContext, err error) [failretval==nil] = crypt32.CertFindCertificateInStore\n//sys   CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevChainContext *CertChainContext) (certchain *CertChainContext, err error) [failretval==nil] = crypt32.CertFindChainInStore\n//sys   CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, parameters unsafe.Pointer, cryptProvOrNCryptKey *Handle, keySpec *uint32, callerFreeProvOrNCryptKey *bool) (err error) = crypt32.CryptAcquireCertificatePrivateKey\n//sys\tCryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) = crypt32.CryptQueryObject\n//sys\tCryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) = crypt32.CryptDecodeObject\n//sys\tCryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) = crypt32.CryptProtectData\n//sys\tCryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) = crypt32.CryptUnprotectData\n//sys\tWinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) = wintrust.WinVerifyTrustEx\n//sys\tRegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) = advapi32.RegOpenKeyExW\n//sys\tRegCloseKey(key Handle) (regerrno error) = advapi32.RegCloseKey\n//sys\tRegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegQueryInfoKeyW\n//sys\tRegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegEnumKeyExW\n//sys\tRegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegQueryValueExW\n//sys\tRegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, event Handle, asynchronous bool) (regerrno error) = advapi32.RegNotifyChangeKeyValue\n//sys\tGetCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId\n//sys\tProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) = kernel32.ProcessIdToSessionId\n//sys\tClosePseudoConsole(console Handle) = kernel32.ClosePseudoConsole\n//sys\tcreatePseudoConsole(size uint32, in Handle, out Handle, flags uint32, pconsole *Handle) (hr error) = kernel32.CreatePseudoConsole\n//sys\tGetConsoleMode(console Handle, mode *uint32) (err error) = kernel32.GetConsoleMode\n//sys\tSetConsoleMode(console Handle, mode uint32) (err error) = kernel32.SetConsoleMode\n//sys\tGetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) = kernel32.GetConsoleScreenBufferInfo\n//sys\tsetConsoleCursorPosition(console Handle, position uint32) (err error) = kernel32.SetConsoleCursorPosition\n//sys\tGetConsoleCP() (cp uint32, err error) = kernel32.GetConsoleCP\n//sys\tGetConsoleOutputCP() (cp uint32, err error) = kernel32.GetConsoleOutputCP\n//sys\tSetConsoleCP(cp uint32) (err error) = kernel32.SetConsoleCP\n//sys\tSetConsoleOutputCP(cp uint32) (err error) = kernel32.SetConsoleOutputCP\n//sys\tWriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW\n//sys\tReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW\n//sys\tGetNumberOfConsoleInputEvents(console Handle, numevents *uint32) (err error) = kernel32.GetNumberOfConsoleInputEvents\n//sys\tFlushConsoleInputBuffer(console Handle) (err error) = kernel32.FlushConsoleInputBuffer\n//sys\tresizePseudoConsole(pconsole Handle, size uint32) (hr error) = kernel32.ResizePseudoConsole\n//sys\tCreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot\n//sys\tModule32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32FirstW\n//sys\tModule32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32NextW\n//sys\tProcess32First(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32FirstW\n//sys\tProcess32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32NextW\n//sys\tThread32First(snapshot Handle, threadEntry *ThreadEntry32) (err error)\n//sys\tThread32Next(snapshot Handle, threadEntry *ThreadEntry32) (err error)\n//sys\tDeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error)\n// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL.\n//sys\tCreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) [failretval&0xff==0] = CreateSymbolicLinkW\n//sys\tCreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) [failretval&0xff==0] = CreateHardLinkW\n//sys\tGetCurrentThreadId() (id uint32)\n//sys\tCreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateEventW\n//sys\tCreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateEventExW\n//sys\tOpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) = kernel32.OpenEventW\n//sys\tSetEvent(event Handle) (err error) = kernel32.SetEvent\n//sys\tResetEvent(event Handle) (err error) = kernel32.ResetEvent\n//sys\tPulseEvent(event Handle) (err error) = kernel32.PulseEvent\n//sys\tCreateMutex(mutexAttrs *SecurityAttributes, initialOwner bool, name *uint16) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateMutexW\n//sys\tCreateMutexEx(mutexAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateMutexExW\n//sys\tOpenMutex(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) = kernel32.OpenMutexW\n//sys\tReleaseMutex(mutex Handle) (err error) = kernel32.ReleaseMutex\n//sys\tSleepEx(milliseconds uint32, alertable bool) (ret uint32) = kernel32.SleepEx\n//sys\tCreateJobObject(jobAttr *SecurityAttributes, name *uint16) (handle Handle, err error) = kernel32.CreateJobObjectW\n//sys\tAssignProcessToJobObject(job Handle, process Handle) (err error) = kernel32.AssignProcessToJobObject\n//sys\tTerminateJobObject(job Handle, exitCode uint32) (err error) = kernel32.TerminateJobObject\n//sys\tSetErrorMode(mode uint32) (ret uint32) = kernel32.SetErrorMode\n//sys\tResumeThread(thread Handle) (ret uint32, err error) [failretval==0xffffffff] = kernel32.ResumeThread\n//sys\tSetPriorityClass(process Handle, priorityClass uint32) (err error) = kernel32.SetPriorityClass\n//sys\tGetPriorityClass(process Handle) (ret uint32, err error) = kernel32.GetPriorityClass\n//sys\tQueryInformationJobObject(job Handle, JobObjectInformationClass int32, JobObjectInformation uintptr, JobObjectInformationLength uint32, retlen *uint32) (err error) = kernel32.QueryInformationJobObject\n//sys\tSetInformationJobObject(job Handle, JobObjectInformationClass uint32, JobObjectInformation uintptr, JobObjectInformationLength uint32) (ret int, err error)\n//sys\tGenerateConsoleCtrlEvent(ctrlEvent uint32, processGroupID uint32) (err error)\n//sys\tGetProcessId(process Handle) (id uint32, err error)\n//sys\tQueryFullProcessImageName(proc Handle, flags uint32, exeName *uint16, size *uint32) (err error) = kernel32.QueryFullProcessImageNameW\n//sys\tOpenThread(desiredAccess uint32, inheritHandle bool, threadId uint32) (handle Handle, err error)\n//sys\tSetProcessPriorityBoost(process Handle, disable bool) (err error) = kernel32.SetProcessPriorityBoost\n//sys\tGetProcessWorkingSetSizeEx(hProcess Handle, lpMinimumWorkingSetSize *uintptr, lpMaximumWorkingSetSize *uintptr, flags *uint32)\n//sys\tSetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr, dwMaximumWorkingSetSize uintptr, flags uint32) (err error)\n//sys\tClearCommBreak(handle Handle) (err error)\n//sys\tClearCommError(handle Handle, lpErrors *uint32, lpStat *ComStat) (err error)\n//sys\tEscapeCommFunction(handle Handle, dwFunc uint32) (err error)\n//sys\tGetCommState(handle Handle, lpDCB *DCB) (err error)\n//sys\tGetCommModemStatus(handle Handle, lpModemStat *uint32) (err error)\n//sys\tGetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error)\n//sys\tPurgeComm(handle Handle, dwFlags uint32) (err error)\n//sys\tSetCommBreak(handle Handle) (err error)\n//sys\tSetCommMask(handle Handle, dwEvtMask uint32) (err error)\n//sys\tSetCommState(handle Handle, lpDCB *DCB) (err error)\n//sys\tSetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error)\n//sys\tSetupComm(handle Handle, dwInQueue uint32, dwOutQueue uint32) (err error)\n//sys\tWaitCommEvent(handle Handle, lpEvtMask *uint32, lpOverlapped *Overlapped) (err error)\n//sys\tGetActiveProcessorCount(groupNumber uint16) (ret uint32)\n//sys\tGetMaximumProcessorCount(groupNumber uint16) (ret uint32)\n//sys\tEnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) = user32.EnumWindows\n//sys\tEnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) = user32.EnumChildWindows\n//sys\tGetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) = user32.GetClassNameW\n//sys\tGetDesktopWindow() (hwnd HWND) = user32.GetDesktopWindow\n//sys\tGetForegroundWindow() (hwnd HWND) = user32.GetForegroundWindow\n//sys\tIsWindow(hwnd HWND) (isWindow bool) = user32.IsWindow\n//sys\tIsWindowUnicode(hwnd HWND) (isUnicode bool) = user32.IsWindowUnicode\n//sys\tIsWindowVisible(hwnd HWND) (isVisible bool) = user32.IsWindowVisible\n//sys\tGetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) = user32.GetGUIThreadInfo\n//sys\tGetLargePageMinimum() (size uintptr)\n\n// Volume Management Functions\n//sys\tDefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW\n//sys\tDeleteVolumeMountPoint(volumeMountPoint *uint16) (err error) = DeleteVolumeMountPointW\n//sys\tFindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstVolumeW\n//sys\tFindFirstVolumeMountPoint(rootPathName *uint16, volumeMountPoint *uint16, bufferLength uint32) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstVolumeMountPointW\n//sys\tFindNextVolume(findVolume Handle, volumeName *uint16, bufferLength uint32) (err error) = FindNextVolumeW\n//sys\tFindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uint16, bufferLength uint32) (err error) = FindNextVolumeMountPointW\n//sys\tFindVolumeClose(findVolume Handle) (err error)\n//sys\tFindVolumeMountPointClose(findVolumeMountPoint Handle) (err error)\n//sys\tGetDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *uint64, totalNumberOfBytes *uint64, totalNumberOfFreeBytes *uint64) (err error) = GetDiskFreeSpaceExW\n//sys\tGetDriveType(rootPathName *uint16) (driveType uint32) = GetDriveTypeW\n//sys\tGetLogicalDrives() (drivesBitMask uint32, err error) [failretval==0]\n//sys\tGetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err error) [failretval==0] = GetLogicalDriveStringsW\n//sys\tGetVolumeInformation(rootPathName *uint16, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) = GetVolumeInformationW\n//sys\tGetVolumeInformationByHandle(file Handle, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) = GetVolumeInformationByHandleW\n//sys\tGetVolumeNameForVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16, bufferlength uint32) (err error) = GetVolumeNameForVolumeMountPointW\n//sys\tGetVolumePathName(fileName *uint16, volumePathName *uint16, bufferLength uint32) (err error) = GetVolumePathNameW\n//sys\tGetVolumePathNamesForVolumeName(volumeName *uint16, volumePathNames *uint16, bufferLength uint32, returnLength *uint32) (err error) = GetVolumePathNamesForVolumeNameW\n//sys\tQueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) [failretval==0] = QueryDosDeviceW\n//sys\tSetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) = SetVolumeLabelW\n//sys\tSetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) = SetVolumeMountPointW\n//sys\tInitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint32, forceAppsClosed bool, rebootAfterShutdown bool, reason uint32) (err error) = advapi32.InitiateSystemShutdownExW\n//sys\tSetProcessShutdownParameters(level uint32, flags uint32) (err error) = kernel32.SetProcessShutdownParameters\n//sys\tGetProcessShutdownParameters(level *uint32, flags *uint32) (err error) = kernel32.GetProcessShutdownParameters\n//sys\tclsidFromString(lpsz *uint16, pclsid *GUID) (ret error) = ole32.CLSIDFromString\n//sys\tstringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) = ole32.StringFromGUID2\n//sys\tcoCreateGuid(pguid *GUID) (ret error) = ole32.CoCreateGuid\n//sys\tCoTaskMemFree(address unsafe.Pointer) = ole32.CoTaskMemFree\n//sys\tCoInitializeEx(reserved uintptr, coInit uint32) (ret error) = ole32.CoInitializeEx\n//sys\tCoUninitialize() = ole32.CoUninitialize\n//sys\tCoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable **uintptr) (ret error) = ole32.CoGetObject\n//sys\tgetProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetProcessPreferredUILanguages\n//sys\tgetThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetThreadPreferredUILanguages\n//sys\tgetUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetUserPreferredUILanguages\n//sys\tgetSystemPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetSystemPreferredUILanguages\n//sys\tfindResource(module Handle, name uintptr, resType uintptr) (resInfo Handle, err error) = kernel32.FindResourceW\n//sys\tSizeofResource(module Handle, resInfo Handle) (size uint32, err error) = kernel32.SizeofResource\n//sys\tLoadResource(module Handle, resInfo Handle) (resData Handle, err error) = kernel32.LoadResource\n//sys\tLockResource(resData Handle) (addr uintptr, err error) = kernel32.LockResource\n\n// Version APIs\n//sys\tGetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32, err error) = version.GetFileVersionInfoSizeW\n//sys\tGetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) = version.GetFileVersionInfoW\n//sys\tVerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) = version.VerQueryValueW\n\n// Process Status API (PSAPI)\n//sys\tenumProcesses(processIds *uint32, nSize uint32, bytesReturned *uint32) (err error) = psapi.EnumProcesses\n//sys\tEnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) = psapi.EnumProcessModules\n//sys\tEnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) = psapi.EnumProcessModulesEx\n//sys\tGetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) = psapi.GetModuleInformation\n//sys\tGetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) = psapi.GetModuleFileNameExW\n//sys\tGetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) = psapi.GetModuleBaseNameW\n//sys   QueryWorkingSetEx(process Handle, pv uintptr, cb uint32) (err error) = psapi.QueryWorkingSetEx\n\n// NT Native APIs\n//sys\trtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) = ntdll.RtlNtStatusToDosErrorNoTeb\n//sys\trtlGetVersion(info *OsVersionInfoEx) (ntstatus error) = ntdll.RtlGetVersion\n//sys\trtlGetNtVersionNumbers(majorVersion *uint32, minorVersion *uint32, buildNumber *uint32) = ntdll.RtlGetNtVersionNumbers\n//sys\tRtlGetCurrentPeb() (peb *PEB) = ntdll.RtlGetCurrentPeb\n//sys\tRtlInitUnicodeString(destinationString *NTUnicodeString, sourceString *uint16) = ntdll.RtlInitUnicodeString\n//sys\tRtlInitString(destinationString *NTString, sourceString *byte) = ntdll.RtlInitString\n//sys\tNtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, allocationSize *int64, attributes uint32, share uint32, disposition uint32, options uint32, eabuffer uintptr, ealength uint32) (ntstatus error) = ntdll.NtCreateFile\n//sys\tNtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (ntstatus error) = ntdll.NtCreateNamedPipeFile\n//sys\tNtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) = ntdll.NtSetInformationFile\n//sys\tRtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToNtPathName_U_WithStatus\n//sys\tRtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToRelativeNtPathName_U_WithStatus\n//sys\tRtlDefaultNpAcl(acl **ACL) (ntstatus error) = ntdll.RtlDefaultNpAcl\n//sys\tNtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQueryInformationProcess\n//sys\tNtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) = ntdll.NtSetInformationProcess\n//sys\tNtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQuerySystemInformation\n//sys\tNtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) = ntdll.NtSetSystemInformation\n//sys\tRtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) = ntdll.RtlAddFunctionTable\n//sys\tRtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) = ntdll.RtlDeleteFunctionTable\n\n// Desktop Window Manager API (Dwmapi)\n//sys\tDwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmGetWindowAttribute\n//sys\tDwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmSetWindowAttribute\n\n// Windows Multimedia API\n//sys TimeBeginPeriod (period uint32) (err error) [failretval != 0] = winmm.timeBeginPeriod\n//sys TimeEndPeriod (period uint32) (err error) [failretval != 0] = winmm.timeEndPeriod\n\n// syscall interface implementation for other packages\n\n// GetCurrentProcess returns the handle for the current process.\n// It is a pseudo handle that does not need to be closed.\n// The returned error is always nil.\n//\n// Deprecated: use CurrentProcess for the same Handle without the nil\n// error.\nfunc GetCurrentProcess() (Handle, error) {\n\treturn CurrentProcess(), nil\n}\n\n// CurrentProcess returns the handle for the current process.\n// It is a pseudo handle that does not need to be closed.\nfunc CurrentProcess() Handle { return Handle(^uintptr(1 - 1)) }\n\n// GetCurrentThread returns the handle for the current thread.\n// It is a pseudo handle that does not need to be closed.\n// The returned error is always nil.\n//\n// Deprecated: use CurrentThread for the same Handle without the nil\n// error.\nfunc GetCurrentThread() (Handle, error) {\n\treturn CurrentThread(), nil\n}\n\n// CurrentThread returns the handle for the current thread.\n// It is a pseudo handle that does not need to be closed.\nfunc CurrentThread() Handle { return Handle(^uintptr(2 - 1)) }\n\n// GetProcAddressByOrdinal retrieves the address of the exported\n// function from module by ordinal.\nfunc GetProcAddressByOrdinal(module Handle, ordinal uintptr) (proc uintptr, err error) {\n\tr0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), ordinal, 0)\n\tproc = uintptr(r0)\n\tif proc == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc Exit(code int) { ExitProcess(uint32(code)) }\n\nfunc makeInheritSa() *SecurityAttributes {\n\tvar sa SecurityAttributes\n\tsa.Length = uint32(unsafe.Sizeof(sa))\n\tsa.InheritHandle = 1\n\treturn &sa\n}\n\nfunc Open(path string, mode int, perm uint32) (fd Handle, err error) {\n\tif len(path) == 0 {\n\t\treturn InvalidHandle, ERROR_FILE_NOT_FOUND\n\t}\n\tpathp, err := UTF16PtrFromString(path)\n\tif err != nil {\n\t\treturn InvalidHandle, err\n\t}\n\tvar access uint32\n\tswitch mode & (O_RDONLY | O_WRONLY | O_RDWR) {\n\tcase O_RDONLY:\n\t\taccess = GENERIC_READ\n\tcase O_WRONLY:\n\t\taccess = GENERIC_WRITE\n\tcase O_RDWR:\n\t\taccess = GENERIC_READ | GENERIC_WRITE\n\t}\n\tif mode&O_CREAT != 0 {\n\t\taccess |= GENERIC_WRITE\n\t}\n\tif mode&O_APPEND != 0 {\n\t\taccess &^= GENERIC_WRITE\n\t\taccess |= FILE_APPEND_DATA\n\t}\n\tsharemode := uint32(FILE_SHARE_READ | FILE_SHARE_WRITE)\n\tvar sa *SecurityAttributes\n\tif mode&O_CLOEXEC == 0 {\n\t\tsa = makeInheritSa()\n\t}\n\tvar createmode uint32\n\tswitch {\n\tcase mode&(O_CREAT|O_EXCL) == (O_CREAT | O_EXCL):\n\t\tcreatemode = CREATE_NEW\n\tcase mode&(O_CREAT|O_TRUNC) == (O_CREAT | O_TRUNC):\n\t\tcreatemode = CREATE_ALWAYS\n\tcase mode&O_CREAT == O_CREAT:\n\t\tcreatemode = OPEN_ALWAYS\n\tcase mode&O_TRUNC == O_TRUNC:\n\t\tcreatemode = TRUNCATE_EXISTING\n\tdefault:\n\t\tcreatemode = OPEN_EXISTING\n\t}\n\tvar attrs uint32 = FILE_ATTRIBUTE_NORMAL\n\tif perm&S_IWRITE == 0 {\n\t\tattrs = FILE_ATTRIBUTE_READONLY\n\t}\n\th, e := CreateFile(pathp, access, sharemode, sa, createmode, attrs, 0)\n\treturn h, e\n}\n\nfunc Read(fd Handle, p []byte) (n int, err error) {\n\tvar done uint32\n\te := ReadFile(fd, p, &done, nil)\n\tif e != nil {\n\t\tif e == ERROR_BROKEN_PIPE {\n\t\t\t// NOTE(brainman): work around ERROR_BROKEN_PIPE is returned on reading EOF from stdin\n\t\t\treturn 0, nil\n\t\t}\n\t\treturn 0, e\n\t}\n\treturn int(done), nil\n}\n\nfunc Write(fd Handle, p []byte) (n int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tvar done uint32\n\te := WriteFile(fd, p, &done, nil)\n\tif e != nil {\n\t\treturn 0, e\n\t}\n\treturn int(done), nil\n}\n\nfunc ReadFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error {\n\terr := readFile(fd, p, done, overlapped)\n\tif raceenabled {\n\t\tif *done > 0 {\n\t\t\traceWriteRange(unsafe.Pointer(&p[0]), int(*done))\n\t\t}\n\t\traceAcquire(unsafe.Pointer(&ioSync))\n\t}\n\treturn err\n}\n\nfunc WriteFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\terr := writeFile(fd, p, done, overlapped)\n\tif raceenabled && *done > 0 {\n\t\traceReadRange(unsafe.Pointer(&p[0]), int(*done))\n\t}\n\treturn err\n}\n\nvar ioSync int64\n\nfunc Seek(fd Handle, offset int64, whence int) (newoffset int64, err error) {\n\tvar w uint32\n\tswitch whence {\n\tcase 0:\n\t\tw = FILE_BEGIN\n\tcase 1:\n\t\tw = FILE_CURRENT\n\tcase 2:\n\t\tw = FILE_END\n\t}\n\thi := int32(offset >> 32)\n\tlo := int32(offset)\n\t// use GetFileType to check pipe, pipe can't do seek\n\tft, _ := GetFileType(fd)\n\tif ft == FILE_TYPE_PIPE {\n\t\treturn 0, syscall.EPIPE\n\t}\n\trlo, e := SetFilePointer(fd, lo, &hi, w)\n\tif e != nil {\n\t\treturn 0, e\n\t}\n\treturn int64(hi)<<32 + int64(rlo), nil\n}\n\nfunc Close(fd Handle) (err error) {\n\treturn CloseHandle(fd)\n}\n\nvar (\n\tStdin  = getStdHandle(STD_INPUT_HANDLE)\n\tStdout = getStdHandle(STD_OUTPUT_HANDLE)\n\tStderr = getStdHandle(STD_ERROR_HANDLE)\n)\n\nfunc getStdHandle(stdhandle uint32) (fd Handle) {\n\tr, _ := GetStdHandle(stdhandle)\n\treturn r\n}\n\nconst ImplementsGetwd = true\n\nfunc Getwd() (wd string, err error) {\n\tb := make([]uint16, 300)\n\tn, e := GetCurrentDirectory(uint32(len(b)), &b[0])\n\tif e != nil {\n\t\treturn \"\", e\n\t}\n\treturn string(utf16.Decode(b[0:n])), nil\n}\n\nfunc Chdir(path string) (err error) {\n\tpathp, err := UTF16PtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn SetCurrentDirectory(pathp)\n}\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tpathp, err := UTF16PtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn CreateDirectory(pathp, nil)\n}\n\nfunc Rmdir(path string) (err error) {\n\tpathp, err := UTF16PtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn RemoveDirectory(pathp)\n}\n\nfunc Unlink(path string) (err error) {\n\tpathp, err := UTF16PtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn DeleteFile(pathp)\n}\n\nfunc Rename(oldpath, newpath string) (err error) {\n\tfrom, err := UTF16PtrFromString(oldpath)\n\tif err != nil {\n\t\treturn err\n\t}\n\tto, err := UTF16PtrFromString(newpath)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn MoveFileEx(from, to, MOVEFILE_REPLACE_EXISTING)\n}\n\nfunc ComputerName() (name string, err error) {\n\tvar n uint32 = MAX_COMPUTERNAME_LENGTH + 1\n\tb := make([]uint16, n)\n\te := GetComputerName(&b[0], &n)\n\tif e != nil {\n\t\treturn \"\", e\n\t}\n\treturn string(utf16.Decode(b[0:n])), nil\n}\n\nfunc DurationSinceBoot() time.Duration {\n\treturn time.Duration(getTickCount64()) * time.Millisecond\n}\n\nfunc Ftruncate(fd Handle, length int64) (err error) {\n\ttype _FILE_END_OF_FILE_INFO struct {\n\t\tEndOfFile int64\n\t}\n\tvar info _FILE_END_OF_FILE_INFO\n\tinfo.EndOfFile = length\n\treturn SetFileInformationByHandle(fd, FileEndOfFileInfo, (*byte)(unsafe.Pointer(&info)), uint32(unsafe.Sizeof(info)))\n}\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\tvar ft Filetime\n\tGetSystemTimeAsFileTime(&ft)\n\t*tv = NsecToTimeval(ft.Nanoseconds())\n\treturn nil\n}\n\nfunc Pipe(p []Handle) (err error) {\n\tif len(p) != 2 {\n\t\treturn syscall.EINVAL\n\t}\n\tvar r, w Handle\n\te := CreatePipe(&r, &w, makeInheritSa(), 0)\n\tif e != nil {\n\t\treturn e\n\t}\n\tp[0] = r\n\tp[1] = w\n\treturn nil\n}\n\nfunc Utimes(path string, tv []Timeval) (err error) {\n\tif len(tv) != 2 {\n\t\treturn syscall.EINVAL\n\t}\n\tpathp, e := UTF16PtrFromString(path)\n\tif e != nil {\n\t\treturn e\n\t}\n\th, e := CreateFile(pathp,\n\t\tFILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil,\n\t\tOPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)\n\tif e != nil {\n\t\treturn e\n\t}\n\tdefer CloseHandle(h)\n\ta := NsecToFiletime(tv[0].Nanoseconds())\n\tw := NsecToFiletime(tv[1].Nanoseconds())\n\treturn SetFileTime(h, nil, &a, &w)\n}\n\nfunc UtimesNano(path string, ts []Timespec) (err error) {\n\tif len(ts) != 2 {\n\t\treturn syscall.EINVAL\n\t}\n\tpathp, e := UTF16PtrFromString(path)\n\tif e != nil {\n\t\treturn e\n\t}\n\th, e := CreateFile(pathp,\n\t\tFILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil,\n\t\tOPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)\n\tif e != nil {\n\t\treturn e\n\t}\n\tdefer CloseHandle(h)\n\ta := NsecToFiletime(TimespecToNsec(ts[0]))\n\tw := NsecToFiletime(TimespecToNsec(ts[1]))\n\treturn SetFileTime(h, nil, &a, &w)\n}\n\nfunc Fsync(fd Handle) (err error) {\n\treturn FlushFileBuffers(fd)\n}\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tp, e := UTF16PtrFromString(path)\n\tif e != nil {\n\t\treturn e\n\t}\n\tattrs, e := GetFileAttributes(p)\n\tif e != nil {\n\t\treturn e\n\t}\n\tif mode&S_IWRITE != 0 {\n\t\tattrs &^= FILE_ATTRIBUTE_READONLY\n\t} else {\n\t\tattrs |= FILE_ATTRIBUTE_READONLY\n\t}\n\treturn SetFileAttributes(p, attrs)\n}\n\nfunc LoadGetSystemTimePreciseAsFileTime() error {\n\treturn procGetSystemTimePreciseAsFileTime.Find()\n}\n\nfunc LoadCancelIoEx() error {\n\treturn procCancelIoEx.Find()\n}\n\nfunc LoadSetFileCompletionNotificationModes() error {\n\treturn procSetFileCompletionNotificationModes.Find()\n}\n\nfunc WaitForMultipleObjects(handles []Handle, waitAll bool, waitMilliseconds uint32) (event uint32, err error) {\n\t// Every other win32 array API takes arguments as \"pointer, count\", except for this function. So we\n\t// can't declare it as a usual [] type, because mksyscall will use the opposite order. We therefore\n\t// trivially stub this ourselves.\n\n\tvar handlePtr *Handle\n\tif len(handles) > 0 {\n\t\thandlePtr = &handles[0]\n\t}\n\treturn waitForMultipleObjects(uint32(len(handles)), uintptr(unsafe.Pointer(handlePtr)), waitAll, waitMilliseconds)\n}\n\n// net api calls\n\nconst socket_error = uintptr(^uint32(0))\n\n//sys\tWSAStartup(verreq uint32, data *WSAData) (sockerr error) = ws2_32.WSAStartup\n//sys\tWSACleanup() (err error) [failretval==socket_error] = ws2_32.WSACleanup\n//sys\tWSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) [failretval==socket_error] = ws2_32.WSAIoctl\n//sys\tWSALookupServiceBegin(querySet *WSAQUERYSET, flags uint32, handle *Handle) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceBeginW\n//sys\tWSALookupServiceNext(handle Handle, flags uint32, size *int32, querySet *WSAQUERYSET) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceNextW\n//sys\tWSALookupServiceEnd(handle Handle) (err error) [failretval==socket_error] = ws2_32.WSALookupServiceEnd\n//sys\tsocket(af int32, typ int32, protocol int32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.socket\n//sys\tsendto(s Handle, buf []byte, flags int32, to unsafe.Pointer, tolen int32) (err error) [failretval==socket_error] = ws2_32.sendto\n//sys\trecvfrom(s Handle, buf []byte, flags int32, from *RawSockaddrAny, fromlen *int32) (n int32, err error) [failretval==-1] = ws2_32.recvfrom\n//sys\tSetsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) [failretval==socket_error] = ws2_32.setsockopt\n//sys\tGetsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockopt\n//sys\tbind(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.bind\n//sys\tconnect(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.connect\n//sys\tgetsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockname\n//sys\tgetpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) [failretval==socket_error] = ws2_32.getpeername\n//sys\tlisten(s Handle, backlog int32) (err error) [failretval==socket_error] = ws2_32.listen\n//sys\tshutdown(s Handle, how int32) (err error) [failretval==socket_error] = ws2_32.shutdown\n//sys\tClosesocket(s Handle) (err error) [failretval==socket_error] = ws2_32.closesocket\n//sys\tAcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) = mswsock.AcceptEx\n//sys\tGetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) = mswsock.GetAcceptExSockaddrs\n//sys\tWSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecv\n//sys\tWSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASend\n//sys\tWSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32,  from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecvFrom\n//sys\tWSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32,  overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASendTo\n//sys\tWSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.WSASocketW\n//sys\tWSADuplicateSocket(s Handle, processID uint32, info *WSAProtocolInfo) (err error) [failretval!=0] = ws2_32.WSADuplicateSocketW\n//sys\tGetHostByName(name string) (h *Hostent, err error) [failretval==nil] = ws2_32.gethostbyname\n//sys\tGetServByName(name string, proto string) (s *Servent, err error) [failretval==nil] = ws2_32.getservbyname\n//sys\tNtohs(netshort uint16) (u uint16) = ws2_32.ntohs\n//sys\tGetProtoByName(name string) (p *Protoent, err error) [failretval==nil] = ws2_32.getprotobyname\n//sys\tDnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) = dnsapi.DnsQuery_W\n//sys\tDnsRecordListFree(rl *DNSRecord, freetype uint32) = dnsapi.DnsRecordListFree\n//sys\tDnsNameCompare(name1 *uint16, name2 *uint16) (same bool) = dnsapi.DnsNameCompare_W\n//sys\tGetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) = ws2_32.GetAddrInfoW\n//sys\tFreeAddrInfoW(addrinfo *AddrinfoW) = ws2_32.FreeAddrInfoW\n//sys\tGetIfEntry(pIfRow *MibIfRow) (errcode error) = iphlpapi.GetIfEntry\n//sys\tGetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) = iphlpapi.GetAdaptersInfo\n//sys\tSetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) = kernel32.SetFileCompletionNotificationModes\n//sys\tWSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) [failretval==-1] = ws2_32.WSAEnumProtocolsW\n//sys\tWSAGetOverlappedResult(h Handle, o *Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult\n//sys\tGetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) = iphlpapi.GetAdaptersAddresses\n//sys\tGetACP() (acp uint32) = kernel32.GetACP\n//sys\tMultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar\n//sys\tgetBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) = iphlpapi.GetBestInterfaceEx\n//sys   GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) = iphlpapi.GetIfEntry2Ex\n//sys   GetIpForwardEntry2(row *MibIpForwardRow2) (errcode error) = iphlpapi.GetIpForwardEntry2\n//sys   GetIpForwardTable2(family uint16, table **MibIpForwardTable2) (errcode error) = iphlpapi.GetIpForwardTable2\n//sys   GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) = iphlpapi.GetUnicastIpAddressEntry\n//sys   FreeMibTable(memory unsafe.Pointer) = iphlpapi.FreeMibTable\n//sys   NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyIpInterfaceChange\n//sys   NotifyRouteChange2(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyRouteChange2\n//sys   NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyUnicastIpAddressChange\n//sys   CancelMibChangeNotify2(notificationHandle Handle) (errcode error) = iphlpapi.CancelMibChangeNotify2\n//sys\tIsProcessorFeaturePresent(ProcessorFeature uint32) (ret bool) = kernel32.IsProcessorFeaturePresent\n\n// For testing: clients can set this flag to force\n// creation of IPv6 sockets to return EAFNOSUPPORT.\nvar SocketDisableIPv6 bool\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\n// RawSockaddrInet is a union that contains an IPv4, an IPv6 address, or an address family. See\n// https://learn.microsoft.com/en-us/windows/win32/api/ws2ipdef/ns-ws2ipdef-sockaddr_inet.\n//\n// A [*RawSockaddrInet] may be converted to a [*RawSockaddrInet4] or [*RawSockaddrInet6] using\n// unsafe, depending on the address family.\ntype RawSockaddrInet struct {\n\tFamily uint16\n\tPort   uint16\n\tData   [6]uint32\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [100]int8\n}\n\ntype Sockaddr interface {\n\tsockaddr() (ptr unsafe.Pointer, len int32, err error) // lowercase; only we can define Sockaddrs\n}\n\ntype SockaddrInet4 struct {\n\tPort int\n\tAddr [4]byte\n\traw  RawSockaddrInet4\n}\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, int32, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, syscall.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), int32(unsafe.Sizeof(sa.raw)), nil\n}\n\ntype SockaddrInet6 struct {\n\tPort   int\n\tZoneId uint32\n\tAddr   [16]byte\n\traw    RawSockaddrInet6\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, int32, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, syscall.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), int32(unsafe.Sizeof(sa.raw)), nil\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [UNIX_PATH_MAX]int8\n}\n\ntype SockaddrUnix struct {\n\tName string\n\traw  RawSockaddrUnix\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, int32, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n > len(sa.raw.Path) {\n\t\treturn nil, 0, syscall.EINVAL\n\t}\n\tif n == len(sa.raw.Path) && name[0] != '@' {\n\t\treturn nil, 0, syscall.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 := int32(2)\n\tif n > 0 {\n\t\tsl += int32(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\ntype RawSockaddrBth struct {\n\tAddressFamily  [2]byte\n\tBtAddr         [8]byte\n\tServiceClassId [16]byte\n\tPort           [4]byte\n}\n\ntype SockaddrBth struct {\n\tBtAddr         uint64\n\tServiceClassId GUID\n\tPort           uint32\n\n\traw RawSockaddrBth\n}\n\nfunc (sa *SockaddrBth) sockaddr() (unsafe.Pointer, int32, error) {\n\tfamily := AF_BTH\n\tsa.raw = RawSockaddrBth{\n\t\tAddressFamily:  *(*[2]byte)(unsafe.Pointer(&family)),\n\t\tBtAddr:         *(*[8]byte)(unsafe.Pointer(&sa.BtAddr)),\n\t\tPort:           *(*[4]byte)(unsafe.Pointer(&sa.Port)),\n\t\tServiceClassId: *(*[16]byte)(unsafe.Pointer(&sa.ServiceClassId)),\n\t}\n\treturn unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil\n}\n\nfunc (rsa *RawSockaddrAny) Sockaddr() (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\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\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, syscall.EAFNOSUPPORT\n}\n\nfunc Socket(domain, typ, proto int) (fd Handle, err error) {\n\tif domain == AF_INET6 && SocketDisableIPv6 {\n\t\treturn InvalidHandle, syscall.EAFNOSUPPORT\n\t}\n\treturn socket(int32(domain), int32(typ), int32(proto))\n}\n\nfunc SetsockoptInt(fd Handle, level, opt int, value int) (err error) {\n\tv := int32(value)\n\treturn Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&v)), int32(unsafe.Sizeof(v)))\n}\n\nfunc Bind(fd Handle, 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 Handle, 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 GetBestInterfaceEx(sa Sockaddr, pdwBestIfIndex *uint32) (err error) {\n\tptr, _, err := sa.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn getBestInterfaceEx(ptr, pdwBestIfIndex)\n}\n\nfunc Getsockname(fd Handle) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tl := int32(unsafe.Sizeof(rsa))\n\tif err = getsockname(fd, &rsa, &l); err != nil {\n\t\treturn\n\t}\n\treturn rsa.Sockaddr()\n}\n\nfunc Getpeername(fd Handle) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tl := int32(unsafe.Sizeof(rsa))\n\tif err = getpeername(fd, &rsa, &l); err != nil {\n\t\treturn\n\t}\n\treturn rsa.Sockaddr()\n}\n\nfunc Listen(s Handle, n int) (err error) {\n\treturn listen(s, int32(n))\n}\n\nfunc Shutdown(fd Handle, how int) (err error) {\n\treturn shutdown(fd, int32(how))\n}\n\nfunc WSASendto(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to Sockaddr, overlapped *Overlapped, croutine *byte) (err error) {\n\tvar rsa unsafe.Pointer\n\tvar l int32\n\tif to != nil {\n\t\trsa, l, err = to.sockaddr()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn WSASendTo(s, bufs, bufcnt, sent, flags, (*RawSockaddrAny)(unsafe.Pointer(rsa)), l, overlapped, croutine)\n}\n\nfunc LoadGetAddrInfo() error {\n\treturn procGetAddrInfoW.Find()\n}\n\nvar connectExFunc struct {\n\tonce sync.Once\n\taddr uintptr\n\terr  error\n}\n\nfunc LoadConnectEx() error {\n\tconnectExFunc.once.Do(func() {\n\t\tvar s Handle\n\t\ts, connectExFunc.err = Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)\n\t\tif connectExFunc.err != nil {\n\t\t\treturn\n\t\t}\n\t\tdefer CloseHandle(s)\n\t\tvar n uint32\n\t\tconnectExFunc.err = WSAIoctl(s,\n\t\t\tSIO_GET_EXTENSION_FUNCTION_POINTER,\n\t\t\t(*byte)(unsafe.Pointer(&WSAID_CONNECTEX)),\n\t\t\tuint32(unsafe.Sizeof(WSAID_CONNECTEX)),\n\t\t\t(*byte)(unsafe.Pointer(&connectExFunc.addr)),\n\t\t\tuint32(unsafe.Sizeof(connectExFunc.addr)),\n\t\t\t&n, nil, 0)\n\t})\n\treturn connectExFunc.err\n}\n\nfunc connectEx(s Handle, name unsafe.Pointer, namelen int32, sendBuf *byte, sendDataLen uint32, bytesSent *uint32, overlapped *Overlapped) (err error) {\n\tr1, _, e1 := syscall.Syscall9(connectExFunc.addr, 7, uintptr(s), uintptr(name), uintptr(namelen), uintptr(unsafe.Pointer(sendBuf)), uintptr(sendDataLen), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), 0, 0)\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\nfunc ConnectEx(fd Handle, sa Sockaddr, sendBuf *byte, sendDataLen uint32, bytesSent *uint32, overlapped *Overlapped) error {\n\terr := LoadConnectEx()\n\tif err != nil {\n\t\treturn errorspkg.New(\"failed to find ConnectEx: \" + err.Error())\n\t}\n\tptr, n, err := sa.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn connectEx(fd, ptr, n, sendBuf, sendDataLen, bytesSent, overlapped)\n}\n\nvar sendRecvMsgFunc struct {\n\tonce     sync.Once\n\tsendAddr uintptr\n\trecvAddr uintptr\n\terr      error\n}\n\nfunc loadWSASendRecvMsg() error {\n\tsendRecvMsgFunc.once.Do(func() {\n\t\tvar s Handle\n\t\ts, sendRecvMsgFunc.err = Socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)\n\t\tif sendRecvMsgFunc.err != nil {\n\t\t\treturn\n\t\t}\n\t\tdefer CloseHandle(s)\n\t\tvar n uint32\n\t\tsendRecvMsgFunc.err = WSAIoctl(s,\n\t\t\tSIO_GET_EXTENSION_FUNCTION_POINTER,\n\t\t\t(*byte)(unsafe.Pointer(&WSAID_WSARECVMSG)),\n\t\t\tuint32(unsafe.Sizeof(WSAID_WSARECVMSG)),\n\t\t\t(*byte)(unsafe.Pointer(&sendRecvMsgFunc.recvAddr)),\n\t\t\tuint32(unsafe.Sizeof(sendRecvMsgFunc.recvAddr)),\n\t\t\t&n, nil, 0)\n\t\tif sendRecvMsgFunc.err != nil {\n\t\t\treturn\n\t\t}\n\t\tsendRecvMsgFunc.err = WSAIoctl(s,\n\t\t\tSIO_GET_EXTENSION_FUNCTION_POINTER,\n\t\t\t(*byte)(unsafe.Pointer(&WSAID_WSASENDMSG)),\n\t\t\tuint32(unsafe.Sizeof(WSAID_WSASENDMSG)),\n\t\t\t(*byte)(unsafe.Pointer(&sendRecvMsgFunc.sendAddr)),\n\t\t\tuint32(unsafe.Sizeof(sendRecvMsgFunc.sendAddr)),\n\t\t\t&n, nil, 0)\n\t})\n\treturn sendRecvMsgFunc.err\n}\n\nfunc WSASendMsg(fd Handle, msg *WSAMsg, flags uint32, bytesSent *uint32, overlapped *Overlapped, croutine *byte) error {\n\terr := loadWSASendRecvMsg()\n\tif err != nil {\n\t\treturn err\n\t}\n\tr1, _, e1 := syscall.Syscall6(sendRecvMsgFunc.sendAddr, 6, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(flags), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn err\n}\n\nfunc WSARecvMsg(fd Handle, msg *WSAMsg, bytesReceived *uint32, overlapped *Overlapped, croutine *byte) error {\n\terr := loadWSASendRecvMsg()\n\tif err != nil {\n\t\treturn err\n\t}\n\tr1, _, e1 := syscall.Syscall6(sendRecvMsgFunc.recvAddr, 5, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(bytesReceived)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0)\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn err\n}\n\n// Invented structures to support what package os expects.\ntype Rusage struct {\n\tCreationTime Filetime\n\tExitTime     Filetime\n\tKernelTime   Filetime\n\tUserTime     Filetime\n}\n\ntype WaitStatus struct {\n\tExitCode uint32\n}\n\nfunc (w WaitStatus) Exited() bool { return true }\n\nfunc (w WaitStatus) ExitStatus() int { return int(w.ExitCode) }\n\nfunc (w WaitStatus) Signal() Signal { return -1 }\n\nfunc (w WaitStatus) CoreDump() bool { return false }\n\nfunc (w WaitStatus) Stopped() bool { return false }\n\nfunc (w WaitStatus) Continued() bool { return false }\n\nfunc (w WaitStatus) StopSignal() Signal { return -1 }\n\nfunc (w WaitStatus) Signaled() bool { return false }\n\nfunc (w WaitStatus) TrapCause() int { return -1 }\n\n// Timespec is an invented structure on Windows, but here for\n// consistency with the corresponding package for other operating systems.\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\nfunc NsecToTimespec(nsec int64) (ts Timespec) {\n\tts.Sec = nsec / 1e9\n\tts.Nsec = nsec % 1e9\n\treturn\n}\n\n// TODO(brainman): fix all needed for net\n\nfunc Accept(fd Handle) (nfd Handle, sa Sockaddr, err error) { return 0, nil, syscall.EWINDOWS }\n\nfunc Recvfrom(fd Handle, p []byte, flags int) (n int, from Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tl := int32(unsafe.Sizeof(rsa))\n\tn32, err := recvfrom(fd, p, int32(flags), &rsa, &l)\n\tn = int(n32)\n\tif err != nil {\n\t\treturn\n\t}\n\tfrom, err = rsa.Sockaddr()\n\treturn\n}\n\nfunc Sendto(fd Handle, p []byte, flags int, to Sockaddr) (err error) {\n\tptr, l, err := to.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn sendto(fd, p, int32(flags), ptr, l)\n}\n\nfunc SetsockoptTimeval(fd Handle, level, opt int, tv *Timeval) (err error) { return syscall.EWINDOWS }\n\n// The Linger struct is wrong but we only noticed after Go 1.\n// sysLinger is the real system call structure.\n\n// BUG(brainman): The definition of Linger is not appropriate for direct use\n// with Setsockopt and Getsockopt.\n// Use SetsockoptLinger instead.\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype sysLinger struct {\n\tOnoff  uint16\n\tLinger uint16\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\nfunc GetsockoptInt(fd Handle, level, opt int) (int, error) {\n\tv := int32(0)\n\tl := int32(unsafe.Sizeof(v))\n\terr := Getsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&v)), &l)\n\treturn int(v), err\n}\n\nfunc SetsockoptLinger(fd Handle, level, opt int, l *Linger) (err error) {\n\tsys := sysLinger{Onoff: uint16(l.Onoff), Linger: uint16(l.Linger)}\n\treturn Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&sys)), int32(unsafe.Sizeof(sys)))\n}\n\nfunc SetsockoptInet4Addr(fd Handle, level, opt int, value [4]byte) (err error) {\n\treturn Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&value[0])), 4)\n}\n\nfunc SetsockoptIPMreq(fd Handle, level, opt int, mreq *IPMreq) (err error) {\n\treturn Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(mreq)), int32(unsafe.Sizeof(*mreq)))\n}\n\nfunc SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (err error) {\n\treturn syscall.EWINDOWS\n}\n\nfunc EnumProcesses(processIds []uint32, bytesReturned *uint32) error {\n\t// EnumProcesses syscall expects the size parameter to be in bytes, but the code generated with mksyscall uses\n\t// the length of the processIds slice instead. Hence, this wrapper function is added to fix the discrepancy.\n\tvar p *uint32\n\tif len(processIds) > 0 {\n\t\tp = &processIds[0]\n\t}\n\tsize := uint32(len(processIds) * 4)\n\treturn enumProcesses(p, size, bytesReturned)\n}\n\nfunc Getpid() (pid int) { return int(GetCurrentProcessId()) }\n\nfunc FindFirstFile(name *uint16, data *Win32finddata) (handle Handle, err error) {\n\t// NOTE(rsc): The Win32finddata struct is wrong for the system call:\n\t// the two paths are each one uint16 short. Use the correct struct,\n\t// a win32finddata1, and then copy the results out.\n\t// There is no loss of expressivity here, because the final\n\t// uint16, if it is used, is supposed to be a NUL, and Go doesn't need that.\n\t// For Go 1.1, we might avoid the allocation of win32finddata1 here\n\t// by adding a final Bug [2]uint16 field to the struct and then\n\t// adjusting the fields in the result directly.\n\tvar data1 win32finddata1\n\thandle, err = findFirstFile1(name, &data1)\n\tif err == nil {\n\t\tcopyFindData(data, &data1)\n\t}\n\treturn\n}\n\nfunc FindNextFile(handle Handle, data *Win32finddata) (err error) {\n\tvar data1 win32finddata1\n\terr = findNextFile1(handle, &data1)\n\tif err == nil {\n\t\tcopyFindData(data, &data1)\n\t}\n\treturn\n}\n\nfunc getProcessEntry(pid int) (*ProcessEntry32, error) {\n\tsnapshot, err := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer CloseHandle(snapshot)\n\tvar procEntry ProcessEntry32\n\tprocEntry.Size = uint32(unsafe.Sizeof(procEntry))\n\tif err = Process32First(snapshot, &procEntry); err != nil {\n\t\treturn nil, err\n\t}\n\tfor {\n\t\tif procEntry.ProcessID == uint32(pid) {\n\t\t\treturn &procEntry, nil\n\t\t}\n\t\terr = Process32Next(snapshot, &procEntry)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n}\n\nfunc Getppid() (ppid int) {\n\tpe, err := getProcessEntry(Getpid())\n\tif err != nil {\n\t\treturn -1\n\t}\n\treturn int(pe.ParentProcessID)\n}\n\n// TODO(brainman): fix all needed for os\nfunc Fchdir(fd Handle) (err error)             { return syscall.EWINDOWS }\nfunc Link(oldpath, newpath string) (err error) { return syscall.EWINDOWS }\nfunc Symlink(path, link string) (err error)    { return syscall.EWINDOWS }\n\nfunc Fchmod(fd Handle, mode uint32) (err error)        { return syscall.EWINDOWS }\nfunc Chown(path string, uid int, gid int) (err error)  { return syscall.EWINDOWS }\nfunc Lchown(path string, uid int, gid int) (err error) { return syscall.EWINDOWS }\nfunc Fchown(fd Handle, uid int, gid int) (err error)   { return syscall.EWINDOWS }\n\nfunc Getuid() (uid int)                  { return -1 }\nfunc Geteuid() (euid int)                { return -1 }\nfunc Getgid() (gid int)                  { return -1 }\nfunc Getegid() (egid int)                { return -1 }\nfunc Getgroups() (gids []int, err error) { return nil, syscall.EWINDOWS }\n\ntype Signal int\n\nfunc (s Signal) Signal() {}\n\nfunc (s Signal) String() string {\n\tif 0 <= s && int(s) < len(signals) {\n\t\tstr := signals[s]\n\t\tif str != \"\" {\n\t\t\treturn str\n\t\t}\n\t}\n\treturn \"signal \" + itoa(int(s))\n}\n\nfunc LoadCreateSymbolicLink() error {\n\treturn procCreateSymbolicLinkW.Find()\n}\n\n// Readlink returns the destination of the named symbolic link.\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tfd, err := CreateFile(StringToUTF16Ptr(path), GENERIC_READ, 0, nil, OPEN_EXISTING,\n\t\tFILE_FLAG_OPEN_REPARSE_POINT|FILE_FLAG_BACKUP_SEMANTICS, 0)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\tdefer CloseHandle(fd)\n\n\trdbbuf := make([]byte, MAXIMUM_REPARSE_DATA_BUFFER_SIZE)\n\tvar bytesReturned uint32\n\terr = DeviceIoControl(fd, FSCTL_GET_REPARSE_POINT, nil, 0, &rdbbuf[0], uint32(len(rdbbuf)), &bytesReturned, nil)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\trdb := (*reparseDataBuffer)(unsafe.Pointer(&rdbbuf[0]))\n\tvar s string\n\tswitch rdb.ReparseTag {\n\tcase IO_REPARSE_TAG_SYMLINK:\n\t\tdata := (*symbolicLinkReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer))\n\t\tp := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0]))\n\t\ts = UTF16ToString(p[data.PrintNameOffset/2 : (data.PrintNameLength-data.PrintNameOffset)/2])\n\tcase IO_REPARSE_TAG_MOUNT_POINT:\n\t\tdata := (*mountPointReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer))\n\t\tp := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0]))\n\t\ts = UTF16ToString(p[data.PrintNameOffset/2 : (data.PrintNameLength-data.PrintNameOffset)/2])\n\tdefault:\n\t\t// the path is not a symlink or junction but another type of reparse\n\t\t// point\n\t\treturn -1, syscall.ENOENT\n\t}\n\tn = copy(buf, []byte(s))\n\n\treturn n, nil\n}\n\n// GUIDFromString parses a string in the form of\n// \"{XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\" into a GUID.\nfunc GUIDFromString(str string) (GUID, error) {\n\tguid := GUID{}\n\tstr16, err := syscall.UTF16PtrFromString(str)\n\tif err != nil {\n\t\treturn guid, err\n\t}\n\terr = clsidFromString(str16, &guid)\n\tif err != nil {\n\t\treturn guid, err\n\t}\n\treturn guid, nil\n}\n\n// GenerateGUID creates a new random GUID.\nfunc GenerateGUID() (GUID, error) {\n\tguid := GUID{}\n\terr := coCreateGuid(&guid)\n\tif err != nil {\n\t\treturn guid, err\n\t}\n\treturn guid, nil\n}\n\n// String returns the canonical string form of the GUID,\n// in the form of \"{XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\".\nfunc (guid GUID) String() string {\n\tvar str [100]uint16\n\tchars := stringFromGUID2(&guid, &str[0], int32(len(str)))\n\tif chars <= 1 {\n\t\treturn \"\"\n\t}\n\treturn string(utf16.Decode(str[:chars-1]))\n}\n\n// KnownFolderPath returns a well-known folder path for the current user, specified by one of\n// the FOLDERID_ constants, and chosen and optionally created based on a KF_ flag.\nfunc KnownFolderPath(folderID *KNOWNFOLDERID, flags uint32) (string, error) {\n\treturn Token(0).KnownFolderPath(folderID, flags)\n}\n\n// KnownFolderPath returns a well-known folder path for the user token, specified by one of\n// the FOLDERID_ constants, and chosen and optionally created based on a KF_ flag.\nfunc (t Token) KnownFolderPath(folderID *KNOWNFOLDERID, flags uint32) (string, error) {\n\tvar p *uint16\n\terr := shGetKnownFolderPath(folderID, flags, t, &p)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer CoTaskMemFree(unsafe.Pointer(p))\n\treturn UTF16PtrToString(p), nil\n}\n\n// RtlGetVersion returns the version of the underlying operating system, ignoring\n// manifest semantics but is affected by the application compatibility layer.\nfunc RtlGetVersion() *OsVersionInfoEx {\n\tinfo := &OsVersionInfoEx{}\n\tinfo.osVersionInfoSize = uint32(unsafe.Sizeof(*info))\n\t// According to documentation, this function always succeeds.\n\t// The function doesn't even check the validity of the\n\t// osVersionInfoSize member. Disassembling ntdll.dll indicates\n\t// that the documentation is indeed correct about that.\n\t_ = rtlGetVersion(info)\n\treturn info\n}\n\n// RtlGetNtVersionNumbers returns the version of the underlying operating system,\n// ignoring manifest semantics and the application compatibility layer.\nfunc RtlGetNtVersionNumbers() (majorVersion, minorVersion, buildNumber uint32) {\n\trtlGetNtVersionNumbers(&majorVersion, &minorVersion, &buildNumber)\n\tbuildNumber &= 0xffff\n\treturn\n}\n\n// GetProcessPreferredUILanguages retrieves the process preferred UI languages.\nfunc GetProcessPreferredUILanguages(flags uint32) ([]string, error) {\n\treturn getUILanguages(flags, getProcessPreferredUILanguages)\n}\n\n// GetThreadPreferredUILanguages retrieves the thread preferred UI languages for the current thread.\nfunc GetThreadPreferredUILanguages(flags uint32) ([]string, error) {\n\treturn getUILanguages(flags, getThreadPreferredUILanguages)\n}\n\n// GetUserPreferredUILanguages retrieves information about the user preferred UI languages.\nfunc GetUserPreferredUILanguages(flags uint32) ([]string, error) {\n\treturn getUILanguages(flags, getUserPreferredUILanguages)\n}\n\n// GetSystemPreferredUILanguages retrieves the system preferred UI languages.\nfunc GetSystemPreferredUILanguages(flags uint32) ([]string, error) {\n\treturn getUILanguages(flags, getSystemPreferredUILanguages)\n}\n\nfunc getUILanguages(flags uint32, f func(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) error) ([]string, error) {\n\tsize := uint32(128)\n\tfor {\n\t\tvar numLanguages uint32\n\t\tbuf := make([]uint16, size)\n\t\terr := f(flags, &numLanguages, &buf[0], &size)\n\t\tif err == ERROR_INSUFFICIENT_BUFFER {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tbuf = buf[:size]\n\t\tif numLanguages == 0 || len(buf) == 0 { // GetProcessPreferredUILanguages may return numLanguages==0 with \"\\0\\0\"\n\t\t\treturn []string{}, nil\n\t\t}\n\t\tif buf[len(buf)-1] == 0 {\n\t\t\tbuf = buf[:len(buf)-1] // remove terminating null\n\t\t}\n\t\tlanguages := make([]string, 0, numLanguages)\n\t\tfrom := 0\n\t\tfor i, c := range buf {\n\t\t\tif c == 0 {\n\t\t\t\tlanguages = append(languages, string(utf16.Decode(buf[from:i])))\n\t\t\t\tfrom = i + 1\n\t\t\t}\n\t\t}\n\t\treturn languages, nil\n\t}\n}\n\nfunc SetConsoleCursorPosition(console Handle, position Coord) error {\n\treturn setConsoleCursorPosition(console, *((*uint32)(unsafe.Pointer(&position))))\n}\n\nfunc GetStartupInfo(startupInfo *StartupInfo) error {\n\tgetStartupInfo(startupInfo)\n\treturn nil\n}\n\nfunc (s NTStatus) Errno() syscall.Errno {\n\treturn rtlNtStatusToDosErrorNoTeb(s)\n}\n\nfunc langID(pri, sub uint16) uint32 { return uint32(sub)<<10 | uint32(pri) }\n\nfunc (s NTStatus) Error() string {\n\tb := make([]uint16, 300)\n\tn, err := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_FROM_HMODULE|FORMAT_MESSAGE_ARGUMENT_ARRAY, modntdll.Handle(), uint32(s), langID(LANG_ENGLISH, SUBLANG_ENGLISH_US), b, nil)\n\tif err != nil {\n\t\treturn fmt.Sprintf(\"NTSTATUS 0x%08x\", uint32(s))\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\n// NewNTUnicodeString returns a new NTUnicodeString structure for use with native\n// NT APIs that work over the NTUnicodeString type. Note that most Windows APIs\n// do not use NTUnicodeString, and instead UTF16PtrFromString should be used for\n// the more common *uint16 string type.\nfunc NewNTUnicodeString(s string) (*NTUnicodeString, error) {\n\ts16, err := UTF16FromString(s)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tn := uint16(len(s16) * 2)\n\treturn &NTUnicodeString{\n\t\tLength:        n - 2, // subtract 2 bytes for the NULL terminator\n\t\tMaximumLength: n,\n\t\tBuffer:        &s16[0],\n\t}, nil\n}\n\n// Slice returns a uint16 slice that aliases the data in the NTUnicodeString.\nfunc (s *NTUnicodeString) Slice() []uint16 {\n\t// Note: this rounds the length down, if it happens\n\t// to (incorrectly) be odd. Probably safer than rounding up.\n\treturn unsafe.Slice(s.Buffer, s.MaximumLength/2)[:s.Length/2]\n}\n\nfunc (s *NTUnicodeString) String() string {\n\treturn UTF16ToString(s.Slice())\n}\n\n// NewNTString returns a new NTString structure for use with native\n// NT APIs that work over the NTString type. Note that most Windows APIs\n// do not use NTString, and instead UTF16PtrFromString should be used for\n// the more common *uint16 string type.\nfunc NewNTString(s string) (*NTString, error) {\n\tvar nts NTString\n\ts8, err := BytePtrFromString(s)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tRtlInitString(&nts, s8)\n\treturn &nts, nil\n}\n\n// Slice returns a byte slice that aliases the data in the NTString.\nfunc (s *NTString) Slice() []byte {\n\tslice := unsafe.Slice(s.Buffer, s.MaximumLength)\n\treturn slice[:s.Length]\n}\n\nfunc (s *NTString) String() string {\n\treturn ByteSliceToString(s.Slice())\n}\n\n// FindResource resolves a resource of the given name and resource type.\nfunc FindResource(module Handle, name, resType ResourceIDOrString) (Handle, error) {\n\tvar namePtr, resTypePtr uintptr\n\tvar name16, resType16 *uint16\n\tvar err error\n\tresolvePtr := func(i interface{}, keep **uint16) (uintptr, error) {\n\t\tswitch v := i.(type) {\n\t\tcase string:\n\t\t\t*keep, err = UTF16PtrFromString(v)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\treturn uintptr(unsafe.Pointer(*keep)), nil\n\t\tcase ResourceID:\n\t\t\treturn uintptr(v), nil\n\t\t}\n\t\treturn 0, errorspkg.New(\"parameter must be a ResourceID or a string\")\n\t}\n\tnamePtr, err = resolvePtr(name, &name16)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tresTypePtr, err = resolvePtr(resType, &resType16)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tresInfo, err := findResource(module, namePtr, resTypePtr)\n\truntime.KeepAlive(name16)\n\truntime.KeepAlive(resType16)\n\treturn resInfo, err\n}\n\nfunc LoadResourceData(module, resInfo Handle) (data []byte, err error) {\n\tsize, err := SizeofResource(module, resInfo)\n\tif err != nil {\n\t\treturn\n\t}\n\tresData, err := LoadResource(module, resInfo)\n\tif err != nil {\n\t\treturn\n\t}\n\tptr, err := LockResource(resData)\n\tif err != nil {\n\t\treturn\n\t}\n\tdata = unsafe.Slice((*byte)(unsafe.Pointer(ptr)), size)\n\treturn\n}\n\n// PSAPI_WORKING_SET_EX_BLOCK contains extended working set information for a page.\ntype PSAPI_WORKING_SET_EX_BLOCK uint64\n\n// Valid returns the validity of this page.\n// If this bit is 1, the subsequent members are valid; otherwise they should be ignored.\nfunc (b PSAPI_WORKING_SET_EX_BLOCK) Valid() bool {\n\treturn (b & 1) == 1\n}\n\n// ShareCount is the number of processes that share this page. The maximum value of this member is 7.\nfunc (b PSAPI_WORKING_SET_EX_BLOCK) ShareCount() uint64 {\n\treturn b.intField(1, 3)\n}\n\n// Win32Protection is the memory protection attributes of the page. For a list of values, see\n// https://docs.microsoft.com/en-us/windows/win32/memory/memory-protection-constants\nfunc (b PSAPI_WORKING_SET_EX_BLOCK) Win32Protection() uint64 {\n\treturn b.intField(4, 11)\n}\n\n// Shared returns the shared status of this page.\n// If this bit is 1, the page can be shared.\nfunc (b PSAPI_WORKING_SET_EX_BLOCK) Shared() bool {\n\treturn (b & (1 << 15)) == 1\n}\n\n// Node is the NUMA node. The maximum value of this member is 63.\nfunc (b PSAPI_WORKING_SET_EX_BLOCK) Node() uint64 {\n\treturn b.intField(16, 6)\n}\n\n// Locked returns the locked status of this page.\n// If this bit is 1, the virtual page is locked in physical memory.\nfunc (b PSAPI_WORKING_SET_EX_BLOCK) Locked() bool {\n\treturn (b & (1 << 22)) == 1\n}\n\n// LargePage returns the large page status of this page.\n// If this bit is 1, the page is a large page.\nfunc (b PSAPI_WORKING_SET_EX_BLOCK) LargePage() bool {\n\treturn (b & (1 << 23)) == 1\n}\n\n// Bad returns the bad status of this page.\n// If this bit is 1, the page is has been reported as bad.\nfunc (b PSAPI_WORKING_SET_EX_BLOCK) Bad() bool {\n\treturn (b & (1 << 31)) == 1\n}\n\n// intField extracts an integer field in the PSAPI_WORKING_SET_EX_BLOCK union.\nfunc (b PSAPI_WORKING_SET_EX_BLOCK) intField(start, length int) uint64 {\n\tvar mask PSAPI_WORKING_SET_EX_BLOCK\n\tfor pos := start; pos < start+length; pos++ {\n\t\tmask |= (1 << pos)\n\t}\n\n\tmasked := b & mask\n\treturn uint64(masked >> start)\n}\n\n// PSAPI_WORKING_SET_EX_INFORMATION contains extended working set information for a process.\ntype PSAPI_WORKING_SET_EX_INFORMATION struct {\n\t// The virtual address.\n\tVirtualAddress Pointer\n\t// A PSAPI_WORKING_SET_EX_BLOCK union that indicates the attributes of the page at VirtualAddress.\n\tVirtualAttributes PSAPI_WORKING_SET_EX_BLOCK\n}\n\n// CreatePseudoConsole creates a windows pseudo console.\nfunc CreatePseudoConsole(size Coord, in Handle, out Handle, flags uint32, pconsole *Handle) error {\n\t// We need this wrapper to manually cast Coord to uint32. The autogenerated wrappers only\n\t// accept arguments that can be casted to uintptr, and Coord can't.\n\treturn createPseudoConsole(*((*uint32)(unsafe.Pointer(&size))), in, out, flags, pconsole)\n}\n\n// ResizePseudoConsole resizes the internal buffers of the pseudo console to the width and height specified in `size`.\nfunc ResizePseudoConsole(pconsole Handle, size Coord) error {\n\t// We need this wrapper to manually cast Coord to uint32. The autogenerated wrappers only\n\t// accept arguments that can be casted to uintptr, and Coord can't.\n\treturn resizePseudoConsole(pconsole, *((*uint32)(unsafe.Pointer(&size))))\n}\n\n// DCB constants. See https://learn.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-dcb.\nconst (\n\tCBR_110    = 110\n\tCBR_300    = 300\n\tCBR_600    = 600\n\tCBR_1200   = 1200\n\tCBR_2400   = 2400\n\tCBR_4800   = 4800\n\tCBR_9600   = 9600\n\tCBR_14400  = 14400\n\tCBR_19200  = 19200\n\tCBR_38400  = 38400\n\tCBR_57600  = 57600\n\tCBR_115200 = 115200\n\tCBR_128000 = 128000\n\tCBR_256000 = 256000\n\n\tDTR_CONTROL_DISABLE   = 0x00000000\n\tDTR_CONTROL_ENABLE    = 0x00000010\n\tDTR_CONTROL_HANDSHAKE = 0x00000020\n\n\tRTS_CONTROL_DISABLE   = 0x00000000\n\tRTS_CONTROL_ENABLE    = 0x00001000\n\tRTS_CONTROL_HANDSHAKE = 0x00002000\n\tRTS_CONTROL_TOGGLE    = 0x00003000\n\n\tNOPARITY    = 0\n\tODDPARITY   = 1\n\tEVENPARITY  = 2\n\tMARKPARITY  = 3\n\tSPACEPARITY = 4\n\n\tONESTOPBIT   = 0\n\tONE5STOPBITS = 1\n\tTWOSTOPBITS  = 2\n)\n\n// EscapeCommFunction constants. See https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-escapecommfunction.\nconst (\n\tSETXOFF  = 1\n\tSETXON   = 2\n\tSETRTS   = 3\n\tCLRRTS   = 4\n\tSETDTR   = 5\n\tCLRDTR   = 6\n\tSETBREAK = 8\n\tCLRBREAK = 9\n)\n\n// PurgeComm constants. See https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-purgecomm.\nconst (\n\tPURGE_TXABORT = 0x0001\n\tPURGE_RXABORT = 0x0002\n\tPURGE_TXCLEAR = 0x0004\n\tPURGE_RXCLEAR = 0x0008\n)\n\n// SetCommMask constants. See https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setcommmask.\nconst (\n\tEV_RXCHAR  = 0x0001\n\tEV_RXFLAG  = 0x0002\n\tEV_TXEMPTY = 0x0004\n\tEV_CTS     = 0x0008\n\tEV_DSR     = 0x0010\n\tEV_RLSD    = 0x0020\n\tEV_BREAK   = 0x0040\n\tEV_ERR     = 0x0080\n\tEV_RING    = 0x0100\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/types_windows.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 windows\n\nimport (\n\t\"net\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// NTStatus corresponds with NTSTATUS, error values returned by ntdll.dll and\n// other native functions.\ntype NTStatus uint32\n\nconst (\n\t// Invented values to support what package os expects.\n\tO_RDONLY   = 0x00000\n\tO_WRONLY   = 0x00001\n\tO_RDWR     = 0x00002\n\tO_CREAT    = 0x00040\n\tO_EXCL     = 0x00080\n\tO_NOCTTY   = 0x00100\n\tO_TRUNC    = 0x00200\n\tO_NONBLOCK = 0x00800\n\tO_APPEND   = 0x00400\n\tO_SYNC     = 0x01000\n\tO_ASYNC    = 0x02000\n\tO_CLOEXEC  = 0x80000\n)\n\nconst (\n\t// More invented values for signals\n\tSIGHUP  = Signal(0x1)\n\tSIGINT  = Signal(0x2)\n\tSIGQUIT = Signal(0x3)\n\tSIGILL  = Signal(0x4)\n\tSIGTRAP = Signal(0x5)\n\tSIGABRT = Signal(0x6)\n\tSIGBUS  = Signal(0x7)\n\tSIGFPE  = Signal(0x8)\n\tSIGKILL = Signal(0x9)\n\tSIGSEGV = Signal(0xb)\n\tSIGPIPE = Signal(0xd)\n\tSIGALRM = Signal(0xe)\n\tSIGTERM = Signal(0xf)\n)\n\nvar signals = [...]string{\n\t1:  \"hangup\",\n\t2:  \"interrupt\",\n\t3:  \"quit\",\n\t4:  \"illegal instruction\",\n\t5:  \"trace/breakpoint trap\",\n\t6:  \"aborted\",\n\t7:  \"bus error\",\n\t8:  \"floating point exception\",\n\t9:  \"killed\",\n\t10: \"user defined signal 1\",\n\t11: \"segmentation fault\",\n\t12: \"user defined signal 2\",\n\t13: \"broken pipe\",\n\t14: \"alarm clock\",\n\t15: \"terminated\",\n}\n\n// File flags for [os.OpenFile]. The O_ prefix is used to indicate\n// that these flags are specific to the OpenFile function.\nconst (\n\tO_FILE_FLAG_OPEN_NO_RECALL     = FILE_FLAG_OPEN_NO_RECALL\n\tO_FILE_FLAG_OPEN_REPARSE_POINT = FILE_FLAG_OPEN_REPARSE_POINT\n\tO_FILE_FLAG_SESSION_AWARE      = FILE_FLAG_SESSION_AWARE\n\tO_FILE_FLAG_POSIX_SEMANTICS    = FILE_FLAG_POSIX_SEMANTICS\n\tO_FILE_FLAG_BACKUP_SEMANTICS   = FILE_FLAG_BACKUP_SEMANTICS\n\tO_FILE_FLAG_DELETE_ON_CLOSE    = FILE_FLAG_DELETE_ON_CLOSE\n\tO_FILE_FLAG_SEQUENTIAL_SCAN    = FILE_FLAG_SEQUENTIAL_SCAN\n\tO_FILE_FLAG_RANDOM_ACCESS      = FILE_FLAG_RANDOM_ACCESS\n\tO_FILE_FLAG_NO_BUFFERING       = FILE_FLAG_NO_BUFFERING\n\tO_FILE_FLAG_OVERLAPPED         = FILE_FLAG_OVERLAPPED\n\tO_FILE_FLAG_WRITE_THROUGH      = FILE_FLAG_WRITE_THROUGH\n)\n\nconst (\n\tFILE_READ_DATA        = 0x00000001\n\tFILE_READ_ATTRIBUTES  = 0x00000080\n\tFILE_READ_EA          = 0x00000008\n\tFILE_WRITE_DATA       = 0x00000002\n\tFILE_WRITE_ATTRIBUTES = 0x00000100\n\tFILE_WRITE_EA         = 0x00000010\n\tFILE_APPEND_DATA      = 0x00000004\n\tFILE_EXECUTE          = 0x00000020\n\n\tFILE_GENERIC_READ    = STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE\n\tFILE_GENERIC_WRITE   = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE\n\tFILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE\n\n\tFILE_LIST_DIRECTORY = 0x00000001\n\tFILE_TRAVERSE       = 0x00000020\n\n\tFILE_SHARE_READ   = 0x00000001\n\tFILE_SHARE_WRITE  = 0x00000002\n\tFILE_SHARE_DELETE = 0x00000004\n\n\tFILE_ATTRIBUTE_READONLY              = 0x00000001\n\tFILE_ATTRIBUTE_HIDDEN                = 0x00000002\n\tFILE_ATTRIBUTE_SYSTEM                = 0x00000004\n\tFILE_ATTRIBUTE_DIRECTORY             = 0x00000010\n\tFILE_ATTRIBUTE_ARCHIVE               = 0x00000020\n\tFILE_ATTRIBUTE_DEVICE                = 0x00000040\n\tFILE_ATTRIBUTE_NORMAL                = 0x00000080\n\tFILE_ATTRIBUTE_TEMPORARY             = 0x00000100\n\tFILE_ATTRIBUTE_SPARSE_FILE           = 0x00000200\n\tFILE_ATTRIBUTE_REPARSE_POINT         = 0x00000400\n\tFILE_ATTRIBUTE_COMPRESSED            = 0x00000800\n\tFILE_ATTRIBUTE_OFFLINE               = 0x00001000\n\tFILE_ATTRIBUTE_NOT_CONTENT_INDEXED   = 0x00002000\n\tFILE_ATTRIBUTE_ENCRYPTED             = 0x00004000\n\tFILE_ATTRIBUTE_INTEGRITY_STREAM      = 0x00008000\n\tFILE_ATTRIBUTE_VIRTUAL               = 0x00010000\n\tFILE_ATTRIBUTE_NO_SCRUB_DATA         = 0x00020000\n\tFILE_ATTRIBUTE_RECALL_ON_OPEN        = 0x00040000\n\tFILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = 0x00400000\n\n\tINVALID_FILE_ATTRIBUTES = 0xffffffff\n\n\tCREATE_NEW        = 1\n\tCREATE_ALWAYS     = 2\n\tOPEN_EXISTING     = 3\n\tOPEN_ALWAYS       = 4\n\tTRUNCATE_EXISTING = 5\n\n\tFILE_FLAG_OPEN_REQUIRING_OPLOCK = 0x00040000\n\tFILE_FLAG_FIRST_PIPE_INSTANCE   = 0x00080000\n\tFILE_FLAG_OPEN_NO_RECALL        = 0x00100000\n\tFILE_FLAG_OPEN_REPARSE_POINT    = 0x00200000\n\tFILE_FLAG_SESSION_AWARE         = 0x00800000\n\tFILE_FLAG_POSIX_SEMANTICS       = 0x01000000\n\tFILE_FLAG_BACKUP_SEMANTICS      = 0x02000000\n\tFILE_FLAG_DELETE_ON_CLOSE       = 0x04000000\n\tFILE_FLAG_SEQUENTIAL_SCAN       = 0x08000000\n\tFILE_FLAG_RANDOM_ACCESS         = 0x10000000\n\tFILE_FLAG_NO_BUFFERING          = 0x20000000\n\tFILE_FLAG_OVERLAPPED            = 0x40000000\n\tFILE_FLAG_WRITE_THROUGH         = 0x80000000\n\n\tHANDLE_FLAG_INHERIT    = 0x00000001\n\tSTARTF_USESTDHANDLES   = 0x00000100\n\tSTARTF_USESHOWWINDOW   = 0x00000001\n\tDUPLICATE_CLOSE_SOURCE = 0x00000001\n\tDUPLICATE_SAME_ACCESS  = 0x00000002\n\n\tSTD_INPUT_HANDLE  = -10 & (1<<32 - 1)\n\tSTD_OUTPUT_HANDLE = -11 & (1<<32 - 1)\n\tSTD_ERROR_HANDLE  = -12 & (1<<32 - 1)\n\n\tFILE_BEGIN   = 0\n\tFILE_CURRENT = 1\n\tFILE_END     = 2\n\n\tLANG_ENGLISH       = 0x09\n\tSUBLANG_ENGLISH_US = 0x01\n\n\tFORMAT_MESSAGE_ALLOCATE_BUFFER = 256\n\tFORMAT_MESSAGE_IGNORE_INSERTS  = 512\n\tFORMAT_MESSAGE_FROM_STRING     = 1024\n\tFORMAT_MESSAGE_FROM_HMODULE    = 2048\n\tFORMAT_MESSAGE_FROM_SYSTEM     = 4096\n\tFORMAT_MESSAGE_ARGUMENT_ARRAY  = 8192\n\tFORMAT_MESSAGE_MAX_WIDTH_MASK  = 255\n\n\tMAX_PATH      = 260\n\tMAX_LONG_PATH = 32768\n\n\tMAX_MODULE_NAME32 = 255\n\n\tMAX_COMPUTERNAME_LENGTH = 15\n\n\tMAX_DHCPV6_DUID_LENGTH = 130\n\n\tMAX_DNS_SUFFIX_STRING_LENGTH = 256\n\n\tTIME_ZONE_ID_UNKNOWN  = 0\n\tTIME_ZONE_ID_STANDARD = 1\n\n\tTIME_ZONE_ID_DAYLIGHT = 2\n\tIGNORE                = 0\n\tINFINITE              = 0xffffffff\n\n\tWAIT_ABANDONED = 0x00000080\n\tWAIT_OBJECT_0  = 0x00000000\n\tWAIT_FAILED    = 0xFFFFFFFF\n\n\t// Access rights for process.\n\tPROCESS_ALL_ACCESS                = 0xFFFF\n\tPROCESS_CREATE_PROCESS            = 0x0080\n\tPROCESS_CREATE_THREAD             = 0x0002\n\tPROCESS_DUP_HANDLE                = 0x0040\n\tPROCESS_QUERY_INFORMATION         = 0x0400\n\tPROCESS_QUERY_LIMITED_INFORMATION = 0x1000\n\tPROCESS_SET_INFORMATION           = 0x0200\n\tPROCESS_SET_QUOTA                 = 0x0100\n\tPROCESS_SUSPEND_RESUME            = 0x0800\n\tPROCESS_TERMINATE                 = 0x0001\n\tPROCESS_VM_OPERATION              = 0x0008\n\tPROCESS_VM_READ                   = 0x0010\n\tPROCESS_VM_WRITE                  = 0x0020\n\n\t// Access rights for thread.\n\tTHREAD_DIRECT_IMPERSONATION      = 0x0200\n\tTHREAD_GET_CONTEXT               = 0x0008\n\tTHREAD_IMPERSONATE               = 0x0100\n\tTHREAD_QUERY_INFORMATION         = 0x0040\n\tTHREAD_QUERY_LIMITED_INFORMATION = 0x0800\n\tTHREAD_SET_CONTEXT               = 0x0010\n\tTHREAD_SET_INFORMATION           = 0x0020\n\tTHREAD_SET_LIMITED_INFORMATION   = 0x0400\n\tTHREAD_SET_THREAD_TOKEN          = 0x0080\n\tTHREAD_SUSPEND_RESUME            = 0x0002\n\tTHREAD_TERMINATE                 = 0x0001\n\n\tFILE_MAP_COPY    = 0x01\n\tFILE_MAP_WRITE   = 0x02\n\tFILE_MAP_READ    = 0x04\n\tFILE_MAP_EXECUTE = 0x20\n\n\tCTRL_C_EVENT        = 0\n\tCTRL_BREAK_EVENT    = 1\n\tCTRL_CLOSE_EVENT    = 2\n\tCTRL_LOGOFF_EVENT   = 5\n\tCTRL_SHUTDOWN_EVENT = 6\n\n\t// Windows reserves errors >= 1<<29 for application use.\n\tAPPLICATION_ERROR = 1 << 29\n)\n\nconst (\n\t// Process creation flags.\n\tCREATE_BREAKAWAY_FROM_JOB        = 0x01000000\n\tCREATE_DEFAULT_ERROR_MODE        = 0x04000000\n\tCREATE_NEW_CONSOLE               = 0x00000010\n\tCREATE_NEW_PROCESS_GROUP         = 0x00000200\n\tCREATE_NO_WINDOW                 = 0x08000000\n\tCREATE_PROTECTED_PROCESS         = 0x00040000\n\tCREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000\n\tCREATE_SEPARATE_WOW_VDM          = 0x00000800\n\tCREATE_SHARED_WOW_VDM            = 0x00001000\n\tCREATE_SUSPENDED                 = 0x00000004\n\tCREATE_UNICODE_ENVIRONMENT       = 0x00000400\n\tDEBUG_ONLY_THIS_PROCESS          = 0x00000002\n\tDEBUG_PROCESS                    = 0x00000001\n\tDETACHED_PROCESS                 = 0x00000008\n\tEXTENDED_STARTUPINFO_PRESENT     = 0x00080000\n\tINHERIT_PARENT_AFFINITY          = 0x00010000\n)\n\nconst (\n\t// attributes for ProcThreadAttributeList\n\tPROC_THREAD_ATTRIBUTE_PARENT_PROCESS    = 0x00020000\n\tPROC_THREAD_ATTRIBUTE_HANDLE_LIST       = 0x00020002\n\tPROC_THREAD_ATTRIBUTE_GROUP_AFFINITY    = 0x00030003\n\tPROC_THREAD_ATTRIBUTE_PREFERRED_NODE    = 0x00020004\n\tPROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR   = 0x00030005\n\tPROC_THREAD_ATTRIBUTE_MITIGATION_POLICY = 0x00020007\n\tPROC_THREAD_ATTRIBUTE_UMS_THREAD        = 0x00030006\n\tPROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL  = 0x0002000b\n\tPROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE     = 0x00020016\n)\n\nconst (\n\t// flags for CreateToolhelp32Snapshot\n\tTH32CS_SNAPHEAPLIST = 0x01\n\tTH32CS_SNAPPROCESS  = 0x02\n\tTH32CS_SNAPTHREAD   = 0x04\n\tTH32CS_SNAPMODULE   = 0x08\n\tTH32CS_SNAPMODULE32 = 0x10\n\tTH32CS_SNAPALL      = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD\n\tTH32CS_INHERIT      = 0x80000000\n)\n\nconst (\n\t// flags for EnumProcessModulesEx\n\tLIST_MODULES_32BIT   = 0x01\n\tLIST_MODULES_64BIT   = 0x02\n\tLIST_MODULES_ALL     = 0x03\n\tLIST_MODULES_DEFAULT = 0x00\n)\n\nconst (\n\t// filters for ReadDirectoryChangesW and FindFirstChangeNotificationW\n\tFILE_NOTIFY_CHANGE_FILE_NAME   = 0x001\n\tFILE_NOTIFY_CHANGE_DIR_NAME    = 0x002\n\tFILE_NOTIFY_CHANGE_ATTRIBUTES  = 0x004\n\tFILE_NOTIFY_CHANGE_SIZE        = 0x008\n\tFILE_NOTIFY_CHANGE_LAST_WRITE  = 0x010\n\tFILE_NOTIFY_CHANGE_LAST_ACCESS = 0x020\n\tFILE_NOTIFY_CHANGE_CREATION    = 0x040\n\tFILE_NOTIFY_CHANGE_SECURITY    = 0x100\n)\n\nconst (\n\t// do not reorder\n\tFILE_ACTION_ADDED = iota + 1\n\tFILE_ACTION_REMOVED\n\tFILE_ACTION_MODIFIED\n\tFILE_ACTION_RENAMED_OLD_NAME\n\tFILE_ACTION_RENAMED_NEW_NAME\n)\n\nconst (\n\t// wincrypt.h\n\t/* certenrolld_begin -- PROV_RSA_*/\n\tPROV_RSA_FULL      = 1\n\tPROV_RSA_SIG       = 2\n\tPROV_DSS           = 3\n\tPROV_FORTEZZA      = 4\n\tPROV_MS_EXCHANGE   = 5\n\tPROV_SSL           = 6\n\tPROV_RSA_SCHANNEL  = 12\n\tPROV_DSS_DH        = 13\n\tPROV_EC_ECDSA_SIG  = 14\n\tPROV_EC_ECNRA_SIG  = 15\n\tPROV_EC_ECDSA_FULL = 16\n\tPROV_EC_ECNRA_FULL = 17\n\tPROV_DH_SCHANNEL   = 18\n\tPROV_SPYRUS_LYNKS  = 20\n\tPROV_RNG           = 21\n\tPROV_INTEL_SEC     = 22\n\tPROV_REPLACE_OWF   = 23\n\tPROV_RSA_AES       = 24\n\n\t/* dwFlags definitions for CryptAcquireContext */\n\tCRYPT_VERIFYCONTEXT              = 0xF0000000\n\tCRYPT_NEWKEYSET                  = 0x00000008\n\tCRYPT_DELETEKEYSET               = 0x00000010\n\tCRYPT_MACHINE_KEYSET             = 0x00000020\n\tCRYPT_SILENT                     = 0x00000040\n\tCRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080\n\n\t/* Flags for PFXImportCertStore */\n\tCRYPT_EXPORTABLE                   = 0x00000001\n\tCRYPT_USER_PROTECTED               = 0x00000002\n\tCRYPT_USER_KEYSET                  = 0x00001000\n\tPKCS12_PREFER_CNG_KSP              = 0x00000100\n\tPKCS12_ALWAYS_CNG_KSP              = 0x00000200\n\tPKCS12_ALLOW_OVERWRITE_KEY         = 0x00004000\n\tPKCS12_NO_PERSIST_KEY              = 0x00008000\n\tPKCS12_INCLUDE_EXTENDED_PROPERTIES = 0x00000010\n\n\t/* Flags for CryptAcquireCertificatePrivateKey */\n\tCRYPT_ACQUIRE_CACHE_FLAG             = 0x00000001\n\tCRYPT_ACQUIRE_USE_PROV_INFO_FLAG     = 0x00000002\n\tCRYPT_ACQUIRE_COMPARE_KEY_FLAG       = 0x00000004\n\tCRYPT_ACQUIRE_NO_HEALING             = 0x00000008\n\tCRYPT_ACQUIRE_SILENT_FLAG            = 0x00000040\n\tCRYPT_ACQUIRE_WINDOW_HANDLE_FLAG     = 0x00000080\n\tCRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK  = 0x00070000\n\tCRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG  = 0x00010000\n\tCRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG = 0x00020000\n\tCRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG   = 0x00040000\n\n\t/* pdwKeySpec for CryptAcquireCertificatePrivateKey */\n\tAT_KEYEXCHANGE       = 1\n\tAT_SIGNATURE         = 2\n\tCERT_NCRYPT_KEY_SPEC = 0xFFFFFFFF\n\n\t/* Default usage match type is AND with value zero */\n\tUSAGE_MATCH_TYPE_AND = 0\n\tUSAGE_MATCH_TYPE_OR  = 1\n\n\t/* msgAndCertEncodingType values for CertOpenStore function */\n\tX509_ASN_ENCODING   = 0x00000001\n\tPKCS_7_ASN_ENCODING = 0x00010000\n\n\t/* storeProvider values for CertOpenStore function */\n\tCERT_STORE_PROV_MSG               = 1\n\tCERT_STORE_PROV_MEMORY            = 2\n\tCERT_STORE_PROV_FILE              = 3\n\tCERT_STORE_PROV_REG               = 4\n\tCERT_STORE_PROV_PKCS7             = 5\n\tCERT_STORE_PROV_SERIALIZED        = 6\n\tCERT_STORE_PROV_FILENAME_A        = 7\n\tCERT_STORE_PROV_FILENAME_W        = 8\n\tCERT_STORE_PROV_FILENAME          = CERT_STORE_PROV_FILENAME_W\n\tCERT_STORE_PROV_SYSTEM_A          = 9\n\tCERT_STORE_PROV_SYSTEM_W          = 10\n\tCERT_STORE_PROV_SYSTEM            = CERT_STORE_PROV_SYSTEM_W\n\tCERT_STORE_PROV_COLLECTION        = 11\n\tCERT_STORE_PROV_SYSTEM_REGISTRY_A = 12\n\tCERT_STORE_PROV_SYSTEM_REGISTRY_W = 13\n\tCERT_STORE_PROV_SYSTEM_REGISTRY   = CERT_STORE_PROV_SYSTEM_REGISTRY_W\n\tCERT_STORE_PROV_PHYSICAL_W        = 14\n\tCERT_STORE_PROV_PHYSICAL          = CERT_STORE_PROV_PHYSICAL_W\n\tCERT_STORE_PROV_SMART_CARD_W      = 15\n\tCERT_STORE_PROV_SMART_CARD        = CERT_STORE_PROV_SMART_CARD_W\n\tCERT_STORE_PROV_LDAP_W            = 16\n\tCERT_STORE_PROV_LDAP              = CERT_STORE_PROV_LDAP_W\n\tCERT_STORE_PROV_PKCS12            = 17\n\n\t/* store characteristics (low WORD of flag) for CertOpenStore function */\n\tCERT_STORE_NO_CRYPT_RELEASE_FLAG            = 0x00000001\n\tCERT_STORE_SET_LOCALIZED_NAME_FLAG          = 0x00000002\n\tCERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004\n\tCERT_STORE_DELETE_FLAG                      = 0x00000010\n\tCERT_STORE_UNSAFE_PHYSICAL_FLAG             = 0x00000020\n\tCERT_STORE_SHARE_STORE_FLAG                 = 0x00000040\n\tCERT_STORE_SHARE_CONTEXT_FLAG               = 0x00000080\n\tCERT_STORE_MANIFOLD_FLAG                    = 0x00000100\n\tCERT_STORE_ENUM_ARCHIVED_FLAG               = 0x00000200\n\tCERT_STORE_UPDATE_KEYID_FLAG                = 0x00000400\n\tCERT_STORE_BACKUP_RESTORE_FLAG              = 0x00000800\n\tCERT_STORE_MAXIMUM_ALLOWED_FLAG             = 0x00001000\n\tCERT_STORE_CREATE_NEW_FLAG                  = 0x00002000\n\tCERT_STORE_OPEN_EXISTING_FLAG               = 0x00004000\n\tCERT_STORE_READONLY_FLAG                    = 0x00008000\n\n\t/* store locations (high WORD of flag) for CertOpenStore function */\n\tCERT_SYSTEM_STORE_CURRENT_USER               = 0x00010000\n\tCERT_SYSTEM_STORE_LOCAL_MACHINE              = 0x00020000\n\tCERT_SYSTEM_STORE_CURRENT_SERVICE            = 0x00040000\n\tCERT_SYSTEM_STORE_SERVICES                   = 0x00050000\n\tCERT_SYSTEM_STORE_USERS                      = 0x00060000\n\tCERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY  = 0x00070000\n\tCERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 0x00080000\n\tCERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE   = 0x00090000\n\tCERT_SYSTEM_STORE_UNPROTECTED_FLAG           = 0x40000000\n\tCERT_SYSTEM_STORE_RELOCATE_FLAG              = 0x80000000\n\n\t/* Miscellaneous high-WORD flags for CertOpenStore function */\n\tCERT_REGISTRY_STORE_REMOTE_FLAG      = 0x00010000\n\tCERT_REGISTRY_STORE_SERIALIZED_FLAG  = 0x00020000\n\tCERT_REGISTRY_STORE_ROAMING_FLAG     = 0x00040000\n\tCERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG = 0x00080000\n\tCERT_REGISTRY_STORE_LM_GPT_FLAG      = 0x01000000\n\tCERT_REGISTRY_STORE_CLIENT_GPT_FLAG  = 0x80000000\n\tCERT_FILE_STORE_COMMIT_ENABLE_FLAG   = 0x00010000\n\tCERT_LDAP_STORE_SIGN_FLAG            = 0x00010000\n\tCERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG  = 0x00020000\n\tCERT_LDAP_STORE_OPENED_FLAG          = 0x00040000\n\tCERT_LDAP_STORE_UNBIND_FLAG          = 0x00080000\n\n\t/* addDisposition values for CertAddCertificateContextToStore function */\n\tCERT_STORE_ADD_NEW                                 = 1\n\tCERT_STORE_ADD_USE_EXISTING                        = 2\n\tCERT_STORE_ADD_REPLACE_EXISTING                    = 3\n\tCERT_STORE_ADD_ALWAYS                              = 4\n\tCERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = 5\n\tCERT_STORE_ADD_NEWER                               = 6\n\tCERT_STORE_ADD_NEWER_INHERIT_PROPERTIES            = 7\n\n\t/* ErrorStatus values for CertTrustStatus struct */\n\tCERT_TRUST_NO_ERROR                          = 0x00000000\n\tCERT_TRUST_IS_NOT_TIME_VALID                 = 0x00000001\n\tCERT_TRUST_IS_REVOKED                        = 0x00000004\n\tCERT_TRUST_IS_NOT_SIGNATURE_VALID            = 0x00000008\n\tCERT_TRUST_IS_NOT_VALID_FOR_USAGE            = 0x00000010\n\tCERT_TRUST_IS_UNTRUSTED_ROOT                 = 0x00000020\n\tCERT_TRUST_REVOCATION_STATUS_UNKNOWN         = 0x00000040\n\tCERT_TRUST_IS_CYCLIC                         = 0x00000080\n\tCERT_TRUST_INVALID_EXTENSION                 = 0x00000100\n\tCERT_TRUST_INVALID_POLICY_CONSTRAINTS        = 0x00000200\n\tCERT_TRUST_INVALID_BASIC_CONSTRAINTS         = 0x00000400\n\tCERT_TRUST_INVALID_NAME_CONSTRAINTS          = 0x00000800\n\tCERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000\n\tCERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT   = 0x00002000\n\tCERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000\n\tCERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT      = 0x00008000\n\tCERT_TRUST_IS_PARTIAL_CHAIN                  = 0x00010000\n\tCERT_TRUST_CTL_IS_NOT_TIME_VALID             = 0x00020000\n\tCERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID        = 0x00040000\n\tCERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE        = 0x00080000\n\tCERT_TRUST_HAS_WEAK_SIGNATURE                = 0x00100000\n\tCERT_TRUST_IS_OFFLINE_REVOCATION             = 0x01000000\n\tCERT_TRUST_NO_ISSUANCE_CHAIN_POLICY          = 0x02000000\n\tCERT_TRUST_IS_EXPLICIT_DISTRUST              = 0x04000000\n\tCERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT    = 0x08000000\n\n\t/* InfoStatus values for CertTrustStatus struct */\n\tCERT_TRUST_HAS_EXACT_MATCH_ISSUER        = 0x00000001\n\tCERT_TRUST_HAS_KEY_MATCH_ISSUER          = 0x00000002\n\tCERT_TRUST_HAS_NAME_MATCH_ISSUER         = 0x00000004\n\tCERT_TRUST_IS_SELF_SIGNED                = 0x00000008\n\tCERT_TRUST_HAS_PREFERRED_ISSUER          = 0x00000100\n\tCERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY     = 0x00000400\n\tCERT_TRUST_HAS_VALID_NAME_CONSTRAINTS    = 0x00000400\n\tCERT_TRUST_IS_PEER_TRUSTED               = 0x00000800\n\tCERT_TRUST_HAS_CRL_VALIDITY_EXTENDED     = 0x00001000\n\tCERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE = 0x00002000\n\tCERT_TRUST_IS_CA_TRUSTED                 = 0x00004000\n\tCERT_TRUST_IS_COMPLEX_CHAIN              = 0x00010000\n\n\t/* Certificate Information Flags */\n\tCERT_INFO_VERSION_FLAG                 = 1\n\tCERT_INFO_SERIAL_NUMBER_FLAG           = 2\n\tCERT_INFO_SIGNATURE_ALGORITHM_FLAG     = 3\n\tCERT_INFO_ISSUER_FLAG                  = 4\n\tCERT_INFO_NOT_BEFORE_FLAG              = 5\n\tCERT_INFO_NOT_AFTER_FLAG               = 6\n\tCERT_INFO_SUBJECT_FLAG                 = 7\n\tCERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG = 8\n\tCERT_INFO_ISSUER_UNIQUE_ID_FLAG        = 9\n\tCERT_INFO_SUBJECT_UNIQUE_ID_FLAG       = 10\n\tCERT_INFO_EXTENSION_FLAG               = 11\n\n\t/* dwFindType for CertFindCertificateInStore  */\n\tCERT_COMPARE_MASK                     = 0xFFFF\n\tCERT_COMPARE_SHIFT                    = 16\n\tCERT_COMPARE_ANY                      = 0\n\tCERT_COMPARE_SHA1_HASH                = 1\n\tCERT_COMPARE_NAME                     = 2\n\tCERT_COMPARE_ATTR                     = 3\n\tCERT_COMPARE_MD5_HASH                 = 4\n\tCERT_COMPARE_PROPERTY                 = 5\n\tCERT_COMPARE_PUBLIC_KEY               = 6\n\tCERT_COMPARE_HASH                     = CERT_COMPARE_SHA1_HASH\n\tCERT_COMPARE_NAME_STR_A               = 7\n\tCERT_COMPARE_NAME_STR_W               = 8\n\tCERT_COMPARE_KEY_SPEC                 = 9\n\tCERT_COMPARE_ENHKEY_USAGE             = 10\n\tCERT_COMPARE_CTL_USAGE                = CERT_COMPARE_ENHKEY_USAGE\n\tCERT_COMPARE_SUBJECT_CERT             = 11\n\tCERT_COMPARE_ISSUER_OF                = 12\n\tCERT_COMPARE_EXISTING                 = 13\n\tCERT_COMPARE_SIGNATURE_HASH           = 14\n\tCERT_COMPARE_KEY_IDENTIFIER           = 15\n\tCERT_COMPARE_CERT_ID                  = 16\n\tCERT_COMPARE_CROSS_CERT_DIST_POINTS   = 17\n\tCERT_COMPARE_PUBKEY_MD5_HASH          = 18\n\tCERT_COMPARE_SUBJECT_INFO_ACCESS      = 19\n\tCERT_COMPARE_HASH_STR                 = 20\n\tCERT_COMPARE_HAS_PRIVATE_KEY          = 21\n\tCERT_FIND_ANY                         = (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT)\n\tCERT_FIND_SHA1_HASH                   = (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT)\n\tCERT_FIND_MD5_HASH                    = (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT)\n\tCERT_FIND_SIGNATURE_HASH              = (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT)\n\tCERT_FIND_KEY_IDENTIFIER              = (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT)\n\tCERT_FIND_HASH                        = CERT_FIND_SHA1_HASH\n\tCERT_FIND_PROPERTY                    = (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT)\n\tCERT_FIND_PUBLIC_KEY                  = (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT)\n\tCERT_FIND_SUBJECT_NAME                = (CERT_COMPARE_NAME<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)\n\tCERT_FIND_SUBJECT_ATTR                = (CERT_COMPARE_ATTR<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)\n\tCERT_FIND_ISSUER_NAME                 = (CERT_COMPARE_NAME<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)\n\tCERT_FIND_ISSUER_ATTR                 = (CERT_COMPARE_ATTR<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)\n\tCERT_FIND_SUBJECT_STR_A               = (CERT_COMPARE_NAME_STR_A<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)\n\tCERT_FIND_SUBJECT_STR_W               = (CERT_COMPARE_NAME_STR_W<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)\n\tCERT_FIND_SUBJECT_STR                 = CERT_FIND_SUBJECT_STR_W\n\tCERT_FIND_ISSUER_STR_A                = (CERT_COMPARE_NAME_STR_A<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)\n\tCERT_FIND_ISSUER_STR_W                = (CERT_COMPARE_NAME_STR_W<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)\n\tCERT_FIND_ISSUER_STR                  = CERT_FIND_ISSUER_STR_W\n\tCERT_FIND_KEY_SPEC                    = (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT)\n\tCERT_FIND_ENHKEY_USAGE                = (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT)\n\tCERT_FIND_CTL_USAGE                   = CERT_FIND_ENHKEY_USAGE\n\tCERT_FIND_SUBJECT_CERT                = (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT)\n\tCERT_FIND_ISSUER_OF                   = (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT)\n\tCERT_FIND_EXISTING                    = (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT)\n\tCERT_FIND_CERT_ID                     = (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT)\n\tCERT_FIND_CROSS_CERT_DIST_POINTS      = (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT)\n\tCERT_FIND_PUBKEY_MD5_HASH             = (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT)\n\tCERT_FIND_SUBJECT_INFO_ACCESS         = (CERT_COMPARE_SUBJECT_INFO_ACCESS << CERT_COMPARE_SHIFT)\n\tCERT_FIND_HASH_STR                    = (CERT_COMPARE_HASH_STR << CERT_COMPARE_SHIFT)\n\tCERT_FIND_HAS_PRIVATE_KEY             = (CERT_COMPARE_HAS_PRIVATE_KEY << CERT_COMPARE_SHIFT)\n\tCERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG  = 0x1\n\tCERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG  = 0x2\n\tCERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG = 0x4\n\tCERT_FIND_NO_ENHKEY_USAGE_FLAG        = 0x8\n\tCERT_FIND_OR_ENHKEY_USAGE_FLAG        = 0x10\n\tCERT_FIND_VALID_ENHKEY_USAGE_FLAG     = 0x20\n\tCERT_FIND_OPTIONAL_CTL_USAGE_FLAG     = CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG\n\tCERT_FIND_EXT_ONLY_CTL_USAGE_FLAG     = CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG\n\tCERT_FIND_PROP_ONLY_CTL_USAGE_FLAG    = CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG\n\tCERT_FIND_NO_CTL_USAGE_FLAG           = CERT_FIND_NO_ENHKEY_USAGE_FLAG\n\tCERT_FIND_OR_CTL_USAGE_FLAG           = CERT_FIND_OR_ENHKEY_USAGE_FLAG\n\tCERT_FIND_VALID_CTL_USAGE_FLAG        = CERT_FIND_VALID_ENHKEY_USAGE_FLAG\n\n\t/* policyOID values for CertVerifyCertificateChainPolicy function */\n\tCERT_CHAIN_POLICY_BASE              = 1\n\tCERT_CHAIN_POLICY_AUTHENTICODE      = 2\n\tCERT_CHAIN_POLICY_AUTHENTICODE_TS   = 3\n\tCERT_CHAIN_POLICY_SSL               = 4\n\tCERT_CHAIN_POLICY_BASIC_CONSTRAINTS = 5\n\tCERT_CHAIN_POLICY_NT_AUTH           = 6\n\tCERT_CHAIN_POLICY_MICROSOFT_ROOT    = 7\n\tCERT_CHAIN_POLICY_EV                = 8\n\tCERT_CHAIN_POLICY_SSL_F12           = 9\n\n\t/* flag for dwFindType CertFindChainInStore  */\n\tCERT_CHAIN_FIND_BY_ISSUER = 1\n\n\t/* dwFindFlags for CertFindChainInStore when dwFindType == CERT_CHAIN_FIND_BY_ISSUER */\n\tCERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG    = 0x0001\n\tCERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG  = 0x0002\n\tCERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG = 0x0004\n\tCERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG  = 0x0008\n\tCERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG         = 0x4000\n\tCERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG     = 0x8000\n\n\t/* Certificate Store close flags */\n\tCERT_CLOSE_STORE_FORCE_FLAG = 0x00000001\n\tCERT_CLOSE_STORE_CHECK_FLAG = 0x00000002\n\n\t/* CryptQueryObject object type */\n\tCERT_QUERY_OBJECT_FILE = 1\n\tCERT_QUERY_OBJECT_BLOB = 2\n\n\t/* CryptQueryObject content type flags */\n\tCERT_QUERY_CONTENT_CERT                    = 1\n\tCERT_QUERY_CONTENT_CTL                     = 2\n\tCERT_QUERY_CONTENT_CRL                     = 3\n\tCERT_QUERY_CONTENT_SERIALIZED_STORE        = 4\n\tCERT_QUERY_CONTENT_SERIALIZED_CERT         = 5\n\tCERT_QUERY_CONTENT_SERIALIZED_CTL          = 6\n\tCERT_QUERY_CONTENT_SERIALIZED_CRL          = 7\n\tCERT_QUERY_CONTENT_PKCS7_SIGNED            = 8\n\tCERT_QUERY_CONTENT_PKCS7_UNSIGNED          = 9\n\tCERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED      = 10\n\tCERT_QUERY_CONTENT_PKCS10                  = 11\n\tCERT_QUERY_CONTENT_PFX                     = 12\n\tCERT_QUERY_CONTENT_CERT_PAIR               = 13\n\tCERT_QUERY_CONTENT_PFX_AND_LOAD            = 14\n\tCERT_QUERY_CONTENT_FLAG_CERT               = (1 << CERT_QUERY_CONTENT_CERT)\n\tCERT_QUERY_CONTENT_FLAG_CTL                = (1 << CERT_QUERY_CONTENT_CTL)\n\tCERT_QUERY_CONTENT_FLAG_CRL                = (1 << CERT_QUERY_CONTENT_CRL)\n\tCERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE   = (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE)\n\tCERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT    = (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT)\n\tCERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL     = (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL)\n\tCERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL     = (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL)\n\tCERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED       = (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED)\n\tCERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED     = (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED)\n\tCERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED = (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED)\n\tCERT_QUERY_CONTENT_FLAG_PKCS10             = (1 << CERT_QUERY_CONTENT_PKCS10)\n\tCERT_QUERY_CONTENT_FLAG_PFX                = (1 << CERT_QUERY_CONTENT_PFX)\n\tCERT_QUERY_CONTENT_FLAG_CERT_PAIR          = (1 << CERT_QUERY_CONTENT_CERT_PAIR)\n\tCERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD       = (1 << CERT_QUERY_CONTENT_PFX_AND_LOAD)\n\tCERT_QUERY_CONTENT_FLAG_ALL                = (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_CTL | CERT_QUERY_CONTENT_FLAG_CRL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | CERT_QUERY_CONTENT_FLAG_PKCS10 | CERT_QUERY_CONTENT_FLAG_PFX | CERT_QUERY_CONTENT_FLAG_CERT_PAIR)\n\tCERT_QUERY_CONTENT_FLAG_ALL_ISSUER_CERT    = (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED)\n\n\t/* CryptQueryObject format type flags */\n\tCERT_QUERY_FORMAT_BINARY                     = 1\n\tCERT_QUERY_FORMAT_BASE64_ENCODED             = 2\n\tCERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED      = 3\n\tCERT_QUERY_FORMAT_FLAG_BINARY                = (1 << CERT_QUERY_FORMAT_BINARY)\n\tCERT_QUERY_FORMAT_FLAG_BASE64_ENCODED        = (1 << CERT_QUERY_FORMAT_BASE64_ENCODED)\n\tCERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED = (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED)\n\tCERT_QUERY_FORMAT_FLAG_ALL                   = (CERT_QUERY_FORMAT_FLAG_BINARY | CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED)\n\n\t/* CertGetNameString name types */\n\tCERT_NAME_EMAIL_TYPE            = 1\n\tCERT_NAME_RDN_TYPE              = 2\n\tCERT_NAME_ATTR_TYPE             = 3\n\tCERT_NAME_SIMPLE_DISPLAY_TYPE   = 4\n\tCERT_NAME_FRIENDLY_DISPLAY_TYPE = 5\n\tCERT_NAME_DNS_TYPE              = 6\n\tCERT_NAME_URL_TYPE              = 7\n\tCERT_NAME_UPN_TYPE              = 8\n\n\t/* CertGetNameString flags */\n\tCERT_NAME_ISSUER_FLAG              = 0x1\n\tCERT_NAME_DISABLE_IE4_UTF8_FLAG    = 0x10000\n\tCERT_NAME_SEARCH_ALL_NAMES_FLAG    = 0x2\n\tCERT_NAME_STR_ENABLE_PUNYCODE_FLAG = 0x00200000\n\n\t/* AuthType values for SSLExtraCertChainPolicyPara struct */\n\tAUTHTYPE_CLIENT = 1\n\tAUTHTYPE_SERVER = 2\n\n\t/* Checks values for SSLExtraCertChainPolicyPara struct */\n\tSECURITY_FLAG_IGNORE_REVOCATION        = 0x00000080\n\tSECURITY_FLAG_IGNORE_UNKNOWN_CA        = 0x00000100\n\tSECURITY_FLAG_IGNORE_WRONG_USAGE       = 0x00000200\n\tSECURITY_FLAG_IGNORE_CERT_CN_INVALID   = 0x00001000\n\tSECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000\n\n\t/* Flags for Crypt[Un]ProtectData */\n\tCRYPTPROTECT_UI_FORBIDDEN      = 0x1\n\tCRYPTPROTECT_LOCAL_MACHINE     = 0x4\n\tCRYPTPROTECT_CRED_SYNC         = 0x8\n\tCRYPTPROTECT_AUDIT             = 0x10\n\tCRYPTPROTECT_NO_RECOVERY       = 0x20\n\tCRYPTPROTECT_VERIFY_PROTECTION = 0x40\n\tCRYPTPROTECT_CRED_REGENERATE   = 0x80\n\n\t/* Flags for CryptProtectPromptStruct */\n\tCRYPTPROTECT_PROMPT_ON_UNPROTECT   = 1\n\tCRYPTPROTECT_PROMPT_ON_PROTECT     = 2\n\tCRYPTPROTECT_PROMPT_RESERVED       = 4\n\tCRYPTPROTECT_PROMPT_STRONG         = 8\n\tCRYPTPROTECT_PROMPT_REQUIRE_STRONG = 16\n)\n\nconst (\n\t// flags for SetErrorMode\n\tSEM_FAILCRITICALERRORS     = 0x0001\n\tSEM_NOALIGNMENTFAULTEXCEPT = 0x0004\n\tSEM_NOGPFAULTERRORBOX      = 0x0002\n\tSEM_NOOPENFILEERRORBOX     = 0x8000\n)\n\nconst (\n\t// Priority class.\n\tABOVE_NORMAL_PRIORITY_CLASS   = 0x00008000\n\tBELOW_NORMAL_PRIORITY_CLASS   = 0x00004000\n\tHIGH_PRIORITY_CLASS           = 0x00000080\n\tIDLE_PRIORITY_CLASS           = 0x00000040\n\tNORMAL_PRIORITY_CLASS         = 0x00000020\n\tPROCESS_MODE_BACKGROUND_BEGIN = 0x00100000\n\tPROCESS_MODE_BACKGROUND_END   = 0x00200000\n\tREALTIME_PRIORITY_CLASS       = 0x00000100\n)\n\n/* wintrust.h constants for WinVerifyTrustEx */\nconst (\n\tWTD_UI_ALL    = 1\n\tWTD_UI_NONE   = 2\n\tWTD_UI_NOBAD  = 3\n\tWTD_UI_NOGOOD = 4\n\n\tWTD_REVOKE_NONE       = 0\n\tWTD_REVOKE_WHOLECHAIN = 1\n\n\tWTD_CHOICE_FILE    = 1\n\tWTD_CHOICE_CATALOG = 2\n\tWTD_CHOICE_BLOB    = 3\n\tWTD_CHOICE_SIGNER  = 4\n\tWTD_CHOICE_CERT    = 5\n\n\tWTD_STATEACTION_IGNORE           = 0x00000000\n\tWTD_STATEACTION_VERIFY           = 0x00000001\n\tWTD_STATEACTION_CLOSE            = 0x00000002\n\tWTD_STATEACTION_AUTO_CACHE       = 0x00000003\n\tWTD_STATEACTION_AUTO_CACHE_FLUSH = 0x00000004\n\n\tWTD_USE_IE4_TRUST_FLAG                  = 0x1\n\tWTD_NO_IE4_CHAIN_FLAG                   = 0x2\n\tWTD_NO_POLICY_USAGE_FLAG                = 0x4\n\tWTD_REVOCATION_CHECK_NONE               = 0x10\n\tWTD_REVOCATION_CHECK_END_CERT           = 0x20\n\tWTD_REVOCATION_CHECK_CHAIN              = 0x40\n\tWTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT = 0x80\n\tWTD_SAFER_FLAG                          = 0x100\n\tWTD_HASH_ONLY_FLAG                      = 0x200\n\tWTD_USE_DEFAULT_OSVER_CHECK             = 0x400\n\tWTD_LIFETIME_SIGNING_FLAG               = 0x800\n\tWTD_CACHE_ONLY_URL_RETRIEVAL            = 0x1000\n\tWTD_DISABLE_MD2_MD4                     = 0x2000\n\tWTD_MOTW                                = 0x4000\n\n\tWTD_UICONTEXT_EXECUTE = 0\n\tWTD_UICONTEXT_INSTALL = 1\n)\n\nvar (\n\tOID_PKIX_KP_SERVER_AUTH = []byte(\"1.3.6.1.5.5.7.3.1\\x00\")\n\tOID_SERVER_GATED_CRYPTO = []byte(\"1.3.6.1.4.1.311.10.3.3\\x00\")\n\tOID_SGC_NETSCAPE        = []byte(\"2.16.840.1.113730.4.1\\x00\")\n\n\tWINTRUST_ACTION_GENERIC_VERIFY_V2 = GUID{\n\t\tData1: 0xaac56b,\n\t\tData2: 0xcd44,\n\t\tData3: 0x11d0,\n\t\tData4: [8]byte{0x8c, 0xc2, 0x0, 0xc0, 0x4f, 0xc2, 0x95, 0xee},\n\t}\n)\n\n// Pointer represents a pointer to an arbitrary Windows type.\n//\n// Pointer-typed fields may point to one of many different types. It's\n// up to the caller to provide a pointer to the appropriate type, cast\n// to Pointer. The caller must obey the unsafe.Pointer rules while\n// doing so.\ntype Pointer *struct{}\n\n// Invented values to support what package os expects.\ntype Timeval struct {\n\tSec  int32\n\tUsec int32\n}\n\nfunc (tv *Timeval) Nanoseconds() int64 {\n\treturn (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\ttv.Sec = int32(nsec / 1e9)\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\treturn\n}\n\ntype Overlapped struct {\n\tInternal     uintptr\n\tInternalHigh uintptr\n\tOffset       uint32\n\tOffsetHigh   uint32\n\tHEvent       Handle\n}\n\ntype FileNotifyInformation struct {\n\tNextEntryOffset uint32\n\tAction          uint32\n\tFileNameLength  uint32\n\tFileName        uint16\n}\n\ntype Filetime struct {\n\tLowDateTime  uint32\n\tHighDateTime uint32\n}\n\n// Nanoseconds returns Filetime ft in nanoseconds\n// since Epoch (00:00:00 UTC, January 1, 1970).\nfunc (ft *Filetime) Nanoseconds() int64 {\n\t// 100-nanosecond intervals since January 1, 1601\n\tnsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime)\n\t// change starting time to the Epoch (00:00:00 UTC, January 1, 1970)\n\tnsec -= 116444736000000000\n\t// convert into nanoseconds\n\tnsec *= 100\n\treturn nsec\n}\n\nfunc NsecToFiletime(nsec int64) (ft Filetime) {\n\t// convert into 100-nanosecond\n\tnsec /= 100\n\t// change starting time to January 1, 1601\n\tnsec += 116444736000000000\n\t// split into high / low\n\tft.LowDateTime = uint32(nsec & 0xffffffff)\n\tft.HighDateTime = uint32(nsec >> 32 & 0xffffffff)\n\treturn ft\n}\n\ntype Win32finddata struct {\n\tFileAttributes    uint32\n\tCreationTime      Filetime\n\tLastAccessTime    Filetime\n\tLastWriteTime     Filetime\n\tFileSizeHigh      uint32\n\tFileSizeLow       uint32\n\tReserved0         uint32\n\tReserved1         uint32\n\tFileName          [MAX_PATH - 1]uint16\n\tAlternateFileName [13]uint16\n}\n\n// This is the actual system call structure.\n// Win32finddata is what we committed to in Go 1.\ntype win32finddata1 struct {\n\tFileAttributes    uint32\n\tCreationTime      Filetime\n\tLastAccessTime    Filetime\n\tLastWriteTime     Filetime\n\tFileSizeHigh      uint32\n\tFileSizeLow       uint32\n\tReserved0         uint32\n\tReserved1         uint32\n\tFileName          [MAX_PATH]uint16\n\tAlternateFileName [14]uint16\n\n\t// The Microsoft documentation for this struct¹ describes three additional\n\t// fields: dwFileType, dwCreatorType, and wFinderFlags. However, those fields\n\t// are empirically only present in the macOS port of the Win32 API,² and thus\n\t// not needed for binaries built for Windows.\n\t//\n\t// ¹ https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-win32_find_dataw describe\n\t// ² https://golang.org/issue/42637#issuecomment-760715755.\n}\n\nfunc copyFindData(dst *Win32finddata, src *win32finddata1) {\n\tdst.FileAttributes = src.FileAttributes\n\tdst.CreationTime = src.CreationTime\n\tdst.LastAccessTime = src.LastAccessTime\n\tdst.LastWriteTime = src.LastWriteTime\n\tdst.FileSizeHigh = src.FileSizeHigh\n\tdst.FileSizeLow = src.FileSizeLow\n\tdst.Reserved0 = src.Reserved0\n\tdst.Reserved1 = src.Reserved1\n\n\t// The src is 1 element bigger than dst, but it must be NUL.\n\tcopy(dst.FileName[:], src.FileName[:])\n\tcopy(dst.AlternateFileName[:], src.AlternateFileName[:])\n}\n\ntype ByHandleFileInformation struct {\n\tFileAttributes     uint32\n\tCreationTime       Filetime\n\tLastAccessTime     Filetime\n\tLastWriteTime      Filetime\n\tVolumeSerialNumber uint32\n\tFileSizeHigh       uint32\n\tFileSizeLow        uint32\n\tNumberOfLinks      uint32\n\tFileIndexHigh      uint32\n\tFileIndexLow       uint32\n}\n\nconst (\n\tGetFileExInfoStandard = 0\n\tGetFileExMaxInfoLevel = 1\n)\n\ntype Win32FileAttributeData struct {\n\tFileAttributes uint32\n\tCreationTime   Filetime\n\tLastAccessTime Filetime\n\tLastWriteTime  Filetime\n\tFileSizeHigh   uint32\n\tFileSizeLow    uint32\n}\n\n// ShowWindow constants\nconst (\n\t// winuser.h\n\tSW_HIDE            = 0\n\tSW_NORMAL          = 1\n\tSW_SHOWNORMAL      = 1\n\tSW_SHOWMINIMIZED   = 2\n\tSW_SHOWMAXIMIZED   = 3\n\tSW_MAXIMIZE        = 3\n\tSW_SHOWNOACTIVATE  = 4\n\tSW_SHOW            = 5\n\tSW_MINIMIZE        = 6\n\tSW_SHOWMINNOACTIVE = 7\n\tSW_SHOWNA          = 8\n\tSW_RESTORE         = 9\n\tSW_SHOWDEFAULT     = 10\n\tSW_FORCEMINIMIZE   = 11\n)\n\ntype StartupInfo struct {\n\tCb            uint32\n\t_             *uint16\n\tDesktop       *uint16\n\tTitle         *uint16\n\tX             uint32\n\tY             uint32\n\tXSize         uint32\n\tYSize         uint32\n\tXCountChars   uint32\n\tYCountChars   uint32\n\tFillAttribute uint32\n\tFlags         uint32\n\tShowWindow    uint16\n\t_             uint16\n\t_             *byte\n\tStdInput      Handle\n\tStdOutput     Handle\n\tStdErr        Handle\n}\n\ntype StartupInfoEx struct {\n\tStartupInfo\n\tProcThreadAttributeList *ProcThreadAttributeList\n}\n\n// ProcThreadAttributeList is a placeholder type to represent a PROC_THREAD_ATTRIBUTE_LIST.\n//\n// To create a *ProcThreadAttributeList, use NewProcThreadAttributeList, update\n// it with ProcThreadAttributeListContainer.Update, free its memory using\n// ProcThreadAttributeListContainer.Delete, and access the list itself using\n// ProcThreadAttributeListContainer.List.\ntype ProcThreadAttributeList struct{}\n\ntype ProcThreadAttributeListContainer struct {\n\tdata     *ProcThreadAttributeList\n\tpointers []unsafe.Pointer\n}\n\ntype ProcessInformation struct {\n\tProcess   Handle\n\tThread    Handle\n\tProcessId uint32\n\tThreadId  uint32\n}\n\ntype ProcessEntry32 struct {\n\tSize            uint32\n\tUsage           uint32\n\tProcessID       uint32\n\tDefaultHeapID   uintptr\n\tModuleID        uint32\n\tThreads         uint32\n\tParentProcessID uint32\n\tPriClassBase    int32\n\tFlags           uint32\n\tExeFile         [MAX_PATH]uint16\n}\n\ntype ThreadEntry32 struct {\n\tSize           uint32\n\tUsage          uint32\n\tThreadID       uint32\n\tOwnerProcessID uint32\n\tBasePri        int32\n\tDeltaPri       int32\n\tFlags          uint32\n}\n\ntype ModuleEntry32 struct {\n\tSize         uint32\n\tModuleID     uint32\n\tProcessID    uint32\n\tGlblcntUsage uint32\n\tProccntUsage uint32\n\tModBaseAddr  uintptr\n\tModBaseSize  uint32\n\tModuleHandle Handle\n\tModule       [MAX_MODULE_NAME32 + 1]uint16\n\tExePath      [MAX_PATH]uint16\n}\n\nconst SizeofModuleEntry32 = unsafe.Sizeof(ModuleEntry32{})\n\ntype Systemtime struct {\n\tYear         uint16\n\tMonth        uint16\n\tDayOfWeek    uint16\n\tDay          uint16\n\tHour         uint16\n\tMinute       uint16\n\tSecond       uint16\n\tMilliseconds uint16\n}\n\ntype Timezoneinformation struct {\n\tBias         int32\n\tStandardName [32]uint16\n\tStandardDate Systemtime\n\tStandardBias int32\n\tDaylightName [32]uint16\n\tDaylightDate Systemtime\n\tDaylightBias int32\n}\n\n// Socket related.\n\nconst (\n\tAF_UNSPEC  = 0\n\tAF_UNIX    = 1\n\tAF_INET    = 2\n\tAF_NETBIOS = 17\n\tAF_INET6   = 23\n\tAF_IRDA    = 26\n\tAF_BTH     = 32\n\n\tSOCK_STREAM    = 1\n\tSOCK_DGRAM     = 2\n\tSOCK_RAW       = 3\n\tSOCK_RDM       = 4\n\tSOCK_SEQPACKET = 5\n\n\tIPPROTO_IP      = 0\n\tIPPROTO_ICMP    = 1\n\tIPPROTO_IGMP    = 2\n\tBTHPROTO_RFCOMM = 3\n\tIPPROTO_TCP     = 6\n\tIPPROTO_UDP     = 17\n\tIPPROTO_IPV6    = 41\n\tIPPROTO_ICMPV6  = 58\n\tIPPROTO_RM      = 113\n\n\tSOL_SOCKET                = 0xffff\n\tSO_REUSEADDR              = 4\n\tSO_KEEPALIVE              = 8\n\tSO_DONTROUTE              = 16\n\tSO_BROADCAST              = 32\n\tSO_LINGER                 = 128\n\tSO_RCVBUF                 = 0x1002\n\tSO_RCVTIMEO               = 0x1006\n\tSO_SNDBUF                 = 0x1001\n\tSO_UPDATE_ACCEPT_CONTEXT  = 0x700b\n\tSO_UPDATE_CONNECT_CONTEXT = 0x7010\n\n\tIOC_OUT                            = 0x40000000\n\tIOC_IN                             = 0x80000000\n\tIOC_VENDOR                         = 0x18000000\n\tIOC_INOUT                          = IOC_IN | IOC_OUT\n\tIOC_WS2                            = 0x08000000\n\tSIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6\n\tSIO_KEEPALIVE_VALS                 = IOC_IN | IOC_VENDOR | 4\n\tSIO_UDP_CONNRESET                  = IOC_IN | IOC_VENDOR | 12\n\tSIO_UDP_NETRESET                   = IOC_IN | IOC_VENDOR | 15\n\n\t// cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460\n\n\tIP_HDRINCL         = 0x2\n\tIP_TOS             = 0x3\n\tIP_TTL             = 0x4\n\tIP_MULTICAST_IF    = 0x9\n\tIP_MULTICAST_TTL   = 0xa\n\tIP_MULTICAST_LOOP  = 0xb\n\tIP_ADD_MEMBERSHIP  = 0xc\n\tIP_DROP_MEMBERSHIP = 0xd\n\tIP_PKTINFO         = 0x13\n\tIP_MTU_DISCOVER    = 0x47\n\n\tIPV6_V6ONLY         = 0x1b\n\tIPV6_UNICAST_HOPS   = 0x4\n\tIPV6_MULTICAST_IF   = 0x9\n\tIPV6_MULTICAST_HOPS = 0xa\n\tIPV6_MULTICAST_LOOP = 0xb\n\tIPV6_JOIN_GROUP     = 0xc\n\tIPV6_LEAVE_GROUP    = 0xd\n\tIPV6_PKTINFO        = 0x13\n\tIPV6_MTU_DISCOVER   = 0x47\n\n\tMSG_OOB       = 0x1\n\tMSG_PEEK      = 0x2\n\tMSG_DONTROUTE = 0x4\n\tMSG_WAITALL   = 0x8\n\n\tMSG_TRUNC  = 0x0100\n\tMSG_CTRUNC = 0x0200\n\tMSG_BCAST  = 0x0400\n\tMSG_MCAST  = 0x0800\n\n\tSOMAXCONN = 0x7fffffff\n\n\tTCP_NODELAY                    = 1\n\tTCP_EXPEDITED_1122             = 2\n\tTCP_KEEPALIVE                  = 3\n\tTCP_MAXSEG                     = 4\n\tTCP_MAXRT                      = 5\n\tTCP_STDURG                     = 6\n\tTCP_NOURG                      = 7\n\tTCP_ATMARK                     = 8\n\tTCP_NOSYNRETRIES               = 9\n\tTCP_TIMESTAMPS                 = 10\n\tTCP_OFFLOAD_PREFERENCE         = 11\n\tTCP_CONGESTION_ALGORITHM       = 12\n\tTCP_DELAY_FIN_ACK              = 13\n\tTCP_MAXRTMS                    = 14\n\tTCP_FASTOPEN                   = 15\n\tTCP_KEEPCNT                    = 16\n\tTCP_KEEPIDLE                   = TCP_KEEPALIVE\n\tTCP_KEEPINTVL                  = 17\n\tTCP_FAIL_CONNECT_ON_ICMP_ERROR = 18\n\tTCP_ICMP_ERROR_INFO            = 19\n\n\tUDP_NOCHECKSUM              = 1\n\tUDP_SEND_MSG_SIZE           = 2\n\tUDP_RECV_MAX_COALESCED_SIZE = 3\n\tUDP_CHECKSUM_COVERAGE       = 20\n\n\tUDP_COALESCED_INFO = 3\n\n\tSHUT_RD   = 0\n\tSHUT_WR   = 1\n\tSHUT_RDWR = 2\n\n\tWSADESCRIPTION_LEN = 256\n\tWSASYS_STATUS_LEN  = 128\n)\n\n// enum PMTUD_STATE from ws2ipdef.h\nconst (\n\tIP_PMTUDISC_NOT_SET = 0\n\tIP_PMTUDISC_DO      = 1\n\tIP_PMTUDISC_DONT    = 2\n\tIP_PMTUDISC_PROBE   = 3\n\tIP_PMTUDISC_MAX     = 4\n)\n\ntype WSABuf struct {\n\tLen uint32\n\tBuf *byte\n}\n\ntype WSAMsg struct {\n\tName        *syscall.RawSockaddrAny\n\tNamelen     int32\n\tBuffers     *WSABuf\n\tBufferCount uint32\n\tControl     WSABuf\n\tFlags       uint32\n}\n\ntype WSACMSGHDR struct {\n\tLen   uintptr\n\tLevel int32\n\tType  int32\n}\n\ntype IN_PKTINFO struct {\n\tAddr    [4]byte\n\tIfindex uint32\n}\n\ntype IN6_PKTINFO struct {\n\tAddr    [16]byte\n\tIfindex uint32\n}\n\n// Flags for WSASocket\nconst (\n\tWSA_FLAG_OVERLAPPED             = 0x01\n\tWSA_FLAG_MULTIPOINT_C_ROOT      = 0x02\n\tWSA_FLAG_MULTIPOINT_C_LEAF      = 0x04\n\tWSA_FLAG_MULTIPOINT_D_ROOT      = 0x08\n\tWSA_FLAG_MULTIPOINT_D_LEAF      = 0x10\n\tWSA_FLAG_ACCESS_SYSTEM_SECURITY = 0x40\n\tWSA_FLAG_NO_HANDLE_INHERIT      = 0x80\n\tWSA_FLAG_REGISTERED_IO          = 0x100\n)\n\n// Invented values to support what package os expects.\nconst (\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\tS_ISUID  = 0x800\n\tS_ISGID  = 0x400\n\tS_ISVTX  = 0x200\n\tS_IRUSR  = 0x100\n\tS_IWRITE = 0x80\n\tS_IWUSR  = 0x80\n\tS_IXUSR  = 0x40\n)\n\nconst (\n\tFILE_TYPE_CHAR    = 0x0002\n\tFILE_TYPE_DISK    = 0x0001\n\tFILE_TYPE_PIPE    = 0x0003\n\tFILE_TYPE_REMOTE  = 0x8000\n\tFILE_TYPE_UNKNOWN = 0x0000\n)\n\ntype Hostent struct {\n\tName     *byte\n\tAliases  **byte\n\tAddrType uint16\n\tLength   uint16\n\tAddrList **byte\n}\n\ntype Protoent struct {\n\tName    *byte\n\tAliases **byte\n\tProto   uint16\n}\n\nconst (\n\tDNS_TYPE_A       = 0x0001\n\tDNS_TYPE_NS      = 0x0002\n\tDNS_TYPE_MD      = 0x0003\n\tDNS_TYPE_MF      = 0x0004\n\tDNS_TYPE_CNAME   = 0x0005\n\tDNS_TYPE_SOA     = 0x0006\n\tDNS_TYPE_MB      = 0x0007\n\tDNS_TYPE_MG      = 0x0008\n\tDNS_TYPE_MR      = 0x0009\n\tDNS_TYPE_NULL    = 0x000a\n\tDNS_TYPE_WKS     = 0x000b\n\tDNS_TYPE_PTR     = 0x000c\n\tDNS_TYPE_HINFO   = 0x000d\n\tDNS_TYPE_MINFO   = 0x000e\n\tDNS_TYPE_MX      = 0x000f\n\tDNS_TYPE_TEXT    = 0x0010\n\tDNS_TYPE_RP      = 0x0011\n\tDNS_TYPE_AFSDB   = 0x0012\n\tDNS_TYPE_X25     = 0x0013\n\tDNS_TYPE_ISDN    = 0x0014\n\tDNS_TYPE_RT      = 0x0015\n\tDNS_TYPE_NSAP    = 0x0016\n\tDNS_TYPE_NSAPPTR = 0x0017\n\tDNS_TYPE_SIG     = 0x0018\n\tDNS_TYPE_KEY     = 0x0019\n\tDNS_TYPE_PX      = 0x001a\n\tDNS_TYPE_GPOS    = 0x001b\n\tDNS_TYPE_AAAA    = 0x001c\n\tDNS_TYPE_LOC     = 0x001d\n\tDNS_TYPE_NXT     = 0x001e\n\tDNS_TYPE_EID     = 0x001f\n\tDNS_TYPE_NIMLOC  = 0x0020\n\tDNS_TYPE_SRV     = 0x0021\n\tDNS_TYPE_ATMA    = 0x0022\n\tDNS_TYPE_NAPTR   = 0x0023\n\tDNS_TYPE_KX      = 0x0024\n\tDNS_TYPE_CERT    = 0x0025\n\tDNS_TYPE_A6      = 0x0026\n\tDNS_TYPE_DNAME   = 0x0027\n\tDNS_TYPE_SINK    = 0x0028\n\tDNS_TYPE_OPT     = 0x0029\n\tDNS_TYPE_DS      = 0x002B\n\tDNS_TYPE_RRSIG   = 0x002E\n\tDNS_TYPE_NSEC    = 0x002F\n\tDNS_TYPE_DNSKEY  = 0x0030\n\tDNS_TYPE_DHCID   = 0x0031\n\tDNS_TYPE_UINFO   = 0x0064\n\tDNS_TYPE_UID     = 0x0065\n\tDNS_TYPE_GID     = 0x0066\n\tDNS_TYPE_UNSPEC  = 0x0067\n\tDNS_TYPE_ADDRS   = 0x00f8\n\tDNS_TYPE_TKEY    = 0x00f9\n\tDNS_TYPE_TSIG    = 0x00fa\n\tDNS_TYPE_IXFR    = 0x00fb\n\tDNS_TYPE_AXFR    = 0x00fc\n\tDNS_TYPE_MAILB   = 0x00fd\n\tDNS_TYPE_MAILA   = 0x00fe\n\tDNS_TYPE_ALL     = 0x00ff\n\tDNS_TYPE_ANY     = 0x00ff\n\tDNS_TYPE_WINS    = 0xff01\n\tDNS_TYPE_WINSR   = 0xff02\n\tDNS_TYPE_NBSTAT  = 0xff01\n)\n\nconst (\n\t// flags inside DNSRecord.Dw\n\tDnsSectionQuestion   = 0x0000\n\tDnsSectionAnswer     = 0x0001\n\tDnsSectionAuthority  = 0x0002\n\tDnsSectionAdditional = 0x0003\n)\n\nconst (\n\t// flags of WSALookupService\n\tLUP_DEEP                = 0x0001\n\tLUP_CONTAINERS          = 0x0002\n\tLUP_NOCONTAINERS        = 0x0004\n\tLUP_NEAREST             = 0x0008\n\tLUP_RETURN_NAME         = 0x0010\n\tLUP_RETURN_TYPE         = 0x0020\n\tLUP_RETURN_VERSION      = 0x0040\n\tLUP_RETURN_COMMENT      = 0x0080\n\tLUP_RETURN_ADDR         = 0x0100\n\tLUP_RETURN_BLOB         = 0x0200\n\tLUP_RETURN_ALIASES      = 0x0400\n\tLUP_RETURN_QUERY_STRING = 0x0800\n\tLUP_RETURN_ALL          = 0x0FF0\n\tLUP_RES_SERVICE         = 0x8000\n\n\tLUP_FLUSHCACHE    = 0x1000\n\tLUP_FLUSHPREVIOUS = 0x2000\n\n\tLUP_NON_AUTHORITATIVE      = 0x4000\n\tLUP_SECURE                 = 0x8000\n\tLUP_RETURN_PREFERRED_NAMES = 0x10000\n\tLUP_DNS_ONLY               = 0x20000\n\n\tLUP_ADDRCONFIG           = 0x100000\n\tLUP_DUAL_ADDR            = 0x200000\n\tLUP_FILESERVER           = 0x400000\n\tLUP_DISABLE_IDN_ENCODING = 0x00800000\n\tLUP_API_ANSI             = 0x01000000\n\n\tLUP_RESOLUTION_HANDLE = 0x80000000\n)\n\nconst (\n\t// values of WSAQUERYSET's namespace\n\tNS_ALL       = 0\n\tNS_DNS       = 12\n\tNS_NLA       = 15\n\tNS_BTH       = 16\n\tNS_EMAIL     = 37\n\tNS_PNRPNAME  = 38\n\tNS_PNRPCLOUD = 39\n)\n\ntype DNSSRVData struct {\n\tTarget   *uint16\n\tPriority uint16\n\tWeight   uint16\n\tPort     uint16\n\tPad      uint16\n}\n\ntype DNSPTRData struct {\n\tHost *uint16\n}\n\ntype DNSMXData struct {\n\tNameExchange *uint16\n\tPreference   uint16\n\tPad          uint16\n}\n\ntype DNSTXTData struct {\n\tStringCount uint16\n\tStringArray [1]*uint16\n}\n\ntype DNSRecord struct {\n\tNext     *DNSRecord\n\tName     *uint16\n\tType     uint16\n\tLength   uint16\n\tDw       uint32\n\tTtl      uint32\n\tReserved uint32\n\tData     [40]byte\n}\n\nconst (\n\tTF_DISCONNECT         = 1\n\tTF_REUSE_SOCKET       = 2\n\tTF_WRITE_BEHIND       = 4\n\tTF_USE_DEFAULT_WORKER = 0\n\tTF_USE_SYSTEM_THREAD  = 16\n\tTF_USE_KERNEL_APC     = 32\n)\n\ntype TransmitFileBuffers struct {\n\tHead       uintptr\n\tHeadLength uint32\n\tTail       uintptr\n\tTailLength uint32\n}\n\nconst (\n\tIFF_UP           = 1\n\tIFF_BROADCAST    = 2\n\tIFF_LOOPBACK     = 4\n\tIFF_POINTTOPOINT = 8\n\tIFF_MULTICAST    = 16\n)\n\nconst SIO_GET_INTERFACE_LIST = 0x4004747F\n\n// TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old.\n// will be fixed to change variable type as suitable.\n\ntype SockaddrGen [24]byte\n\ntype InterfaceInfo struct {\n\tFlags            uint32\n\tAddress          SockaddrGen\n\tBroadcastAddress SockaddrGen\n\tNetmask          SockaddrGen\n}\n\ntype IpAddressString struct {\n\tString [16]byte\n}\n\ntype IpMaskString IpAddressString\n\ntype IpAddrString struct {\n\tNext      *IpAddrString\n\tIpAddress IpAddressString\n\tIpMask    IpMaskString\n\tContext   uint32\n}\n\nconst MAX_ADAPTER_NAME_LENGTH = 256\nconst MAX_ADAPTER_DESCRIPTION_LENGTH = 128\nconst MAX_ADAPTER_ADDRESS_LENGTH = 8\n\ntype IpAdapterInfo struct {\n\tNext                *IpAdapterInfo\n\tComboIndex          uint32\n\tAdapterName         [MAX_ADAPTER_NAME_LENGTH + 4]byte\n\tDescription         [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte\n\tAddressLength       uint32\n\tAddress             [MAX_ADAPTER_ADDRESS_LENGTH]byte\n\tIndex               uint32\n\tType                uint32\n\tDhcpEnabled         uint32\n\tCurrentIpAddress    *IpAddrString\n\tIpAddressList       IpAddrString\n\tGatewayList         IpAddrString\n\tDhcpServer          IpAddrString\n\tHaveWins            bool\n\tPrimaryWinsServer   IpAddrString\n\tSecondaryWinsServer IpAddrString\n\tLeaseObtained       int64\n\tLeaseExpires        int64\n}\n\nconst MAXLEN_PHYSADDR = 8\nconst MAX_INTERFACE_NAME_LEN = 256\nconst MAXLEN_IFDESCR = 256\n\ntype MibIfRow struct {\n\tName            [MAX_INTERFACE_NAME_LEN]uint16\n\tIndex           uint32\n\tType            uint32\n\tMtu             uint32\n\tSpeed           uint32\n\tPhysAddrLen     uint32\n\tPhysAddr        [MAXLEN_PHYSADDR]byte\n\tAdminStatus     uint32\n\tOperStatus      uint32\n\tLastChange      uint32\n\tInOctets        uint32\n\tInUcastPkts     uint32\n\tInNUcastPkts    uint32\n\tInDiscards      uint32\n\tInErrors        uint32\n\tInUnknownProtos uint32\n\tOutOctets       uint32\n\tOutUcastPkts    uint32\n\tOutNUcastPkts   uint32\n\tOutDiscards     uint32\n\tOutErrors       uint32\n\tOutQLen         uint32\n\tDescrLen        uint32\n\tDescr           [MAXLEN_IFDESCR]byte\n}\n\ntype CertInfo struct {\n\tVersion              uint32\n\tSerialNumber         CryptIntegerBlob\n\tSignatureAlgorithm   CryptAlgorithmIdentifier\n\tIssuer               CertNameBlob\n\tNotBefore            Filetime\n\tNotAfter             Filetime\n\tSubject              CertNameBlob\n\tSubjectPublicKeyInfo CertPublicKeyInfo\n\tIssuerUniqueId       CryptBitBlob\n\tSubjectUniqueId      CryptBitBlob\n\tCountExtensions      uint32\n\tExtensions           *CertExtension\n}\n\ntype CertExtension struct {\n\tObjId    *byte\n\tCritical int32\n\tValue    CryptObjidBlob\n}\n\ntype CryptAlgorithmIdentifier struct {\n\tObjId      *byte\n\tParameters CryptObjidBlob\n}\n\ntype CertPublicKeyInfo struct {\n\tAlgorithm CryptAlgorithmIdentifier\n\tPublicKey CryptBitBlob\n}\n\ntype DataBlob struct {\n\tSize uint32\n\tData *byte\n}\ntype CryptIntegerBlob DataBlob\ntype CryptUintBlob DataBlob\ntype CryptObjidBlob DataBlob\ntype CertNameBlob DataBlob\ntype CertRdnValueBlob DataBlob\ntype CertBlob DataBlob\ntype CrlBlob DataBlob\ntype CryptDataBlob DataBlob\ntype CryptHashBlob DataBlob\ntype CryptDigestBlob DataBlob\ntype CryptDerBlob DataBlob\ntype CryptAttrBlob DataBlob\n\ntype CryptBitBlob struct {\n\tSize       uint32\n\tData       *byte\n\tUnusedBits uint32\n}\n\ntype CertContext struct {\n\tEncodingType uint32\n\tEncodedCert  *byte\n\tLength       uint32\n\tCertInfo     *CertInfo\n\tStore        Handle\n}\n\ntype CertChainContext struct {\n\tSize                       uint32\n\tTrustStatus                CertTrustStatus\n\tChainCount                 uint32\n\tChains                     **CertSimpleChain\n\tLowerQualityChainCount     uint32\n\tLowerQualityChains         **CertChainContext\n\tHasRevocationFreshnessTime uint32\n\tRevocationFreshnessTime    uint32\n}\n\ntype CertTrustListInfo struct {\n\t// Not implemented\n}\n\ntype CertSimpleChain struct {\n\tSize                       uint32\n\tTrustStatus                CertTrustStatus\n\tNumElements                uint32\n\tElements                   **CertChainElement\n\tTrustListInfo              *CertTrustListInfo\n\tHasRevocationFreshnessTime uint32\n\tRevocationFreshnessTime    uint32\n}\n\ntype CertChainElement struct {\n\tSize              uint32\n\tCertContext       *CertContext\n\tTrustStatus       CertTrustStatus\n\tRevocationInfo    *CertRevocationInfo\n\tIssuanceUsage     *CertEnhKeyUsage\n\tApplicationUsage  *CertEnhKeyUsage\n\tExtendedErrorInfo *uint16\n}\n\ntype CertRevocationCrlInfo struct {\n\t// Not implemented\n}\n\ntype CertRevocationInfo struct {\n\tSize             uint32\n\tRevocationResult uint32\n\tRevocationOid    *byte\n\tOidSpecificInfo  Pointer\n\tHasFreshnessTime uint32\n\tFreshnessTime    uint32\n\tCrlInfo          *CertRevocationCrlInfo\n}\n\ntype CertTrustStatus struct {\n\tErrorStatus uint32\n\tInfoStatus  uint32\n}\n\ntype CertUsageMatch struct {\n\tType  uint32\n\tUsage CertEnhKeyUsage\n}\n\ntype CertEnhKeyUsage struct {\n\tLength           uint32\n\tUsageIdentifiers **byte\n}\n\ntype CertChainPara struct {\n\tSize                         uint32\n\tRequestedUsage               CertUsageMatch\n\tRequstedIssuancePolicy       CertUsageMatch\n\tURLRetrievalTimeout          uint32\n\tCheckRevocationFreshnessTime uint32\n\tRevocationFreshnessTime      uint32\n\tCacheResync                  *Filetime\n}\n\ntype CertChainPolicyPara struct {\n\tSize            uint32\n\tFlags           uint32\n\tExtraPolicyPara Pointer\n}\n\ntype SSLExtraCertChainPolicyPara struct {\n\tSize       uint32\n\tAuthType   uint32\n\tChecks     uint32\n\tServerName *uint16\n}\n\ntype CertChainPolicyStatus struct {\n\tSize              uint32\n\tError             uint32\n\tChainIndex        uint32\n\tElementIndex      uint32\n\tExtraPolicyStatus Pointer\n}\n\ntype CertPolicyInfo struct {\n\tIdentifier      *byte\n\tCountQualifiers uint32\n\tQualifiers      *CertPolicyQualifierInfo\n}\n\ntype CertPoliciesInfo struct {\n\tCount       uint32\n\tPolicyInfos *CertPolicyInfo\n}\n\ntype CertPolicyQualifierInfo struct {\n\t// Not implemented\n}\n\ntype CertStrongSignPara struct {\n\tSize                      uint32\n\tInfoChoice                uint32\n\tInfoOrSerializedInfoOrOID unsafe.Pointer\n}\n\ntype CryptProtectPromptStruct struct {\n\tSize        uint32\n\tPromptFlags uint32\n\tApp         HWND\n\tPrompt      *uint16\n}\n\ntype CertChainFindByIssuerPara struct {\n\tSize                   uint32\n\tUsageIdentifier        *byte\n\tKeySpec                uint32\n\tAcquirePrivateKeyFlags uint32\n\tIssuerCount            uint32\n\tIssuer                 Pointer\n\tFindCallback           Pointer\n\tFindArg                Pointer\n\tIssuerChainIndex       *uint32\n\tIssuerElementIndex     *uint32\n}\n\ntype WinTrustData struct {\n\tSize                            uint32\n\tPolicyCallbackData              uintptr\n\tSIPClientData                   uintptr\n\tUIChoice                        uint32\n\tRevocationChecks                uint32\n\tUnionChoice                     uint32\n\tFileOrCatalogOrBlobOrSgnrOrCert unsafe.Pointer\n\tStateAction                     uint32\n\tStateData                       Handle\n\tURLReference                    *uint16\n\tProvFlags                       uint32\n\tUIContext                       uint32\n\tSignatureSettings               *WinTrustSignatureSettings\n}\n\ntype WinTrustFileInfo struct {\n\tSize         uint32\n\tFilePath     *uint16\n\tFile         Handle\n\tKnownSubject *GUID\n}\n\ntype WinTrustSignatureSettings struct {\n\tSize             uint32\n\tIndex            uint32\n\tFlags            uint32\n\tSecondarySigs    uint32\n\tVerifiedSigIndex uint32\n\tCryptoPolicy     *CertStrongSignPara\n}\n\nconst (\n\t// do not reorder\n\tHKEY_CLASSES_ROOT = 0x80000000 + iota\n\tHKEY_CURRENT_USER\n\tHKEY_LOCAL_MACHINE\n\tHKEY_USERS\n\tHKEY_PERFORMANCE_DATA\n\tHKEY_CURRENT_CONFIG\n\tHKEY_DYN_DATA\n\n\tKEY_QUERY_VALUE        = 1\n\tKEY_SET_VALUE          = 2\n\tKEY_CREATE_SUB_KEY     = 4\n\tKEY_ENUMERATE_SUB_KEYS = 8\n\tKEY_NOTIFY             = 16\n\tKEY_CREATE_LINK        = 32\n\tKEY_WRITE              = 0x20006\n\tKEY_EXECUTE            = 0x20019\n\tKEY_READ               = 0x20019\n\tKEY_WOW64_64KEY        = 0x0100\n\tKEY_WOW64_32KEY        = 0x0200\n\tKEY_ALL_ACCESS         = 0xf003f\n)\n\nconst (\n\t// do not reorder\n\tREG_NONE = iota\n\tREG_SZ\n\tREG_EXPAND_SZ\n\tREG_BINARY\n\tREG_DWORD_LITTLE_ENDIAN\n\tREG_DWORD_BIG_ENDIAN\n\tREG_LINK\n\tREG_MULTI_SZ\n\tREG_RESOURCE_LIST\n\tREG_FULL_RESOURCE_DESCRIPTOR\n\tREG_RESOURCE_REQUIREMENTS_LIST\n\tREG_QWORD_LITTLE_ENDIAN\n\tREG_DWORD = REG_DWORD_LITTLE_ENDIAN\n\tREG_QWORD = REG_QWORD_LITTLE_ENDIAN\n)\n\nconst (\n\tEVENT_MODIFY_STATE = 0x0002\n\tEVENT_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3\n\n\tMUTANT_QUERY_STATE = 0x0001\n\tMUTANT_ALL_ACCESS  = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | MUTANT_QUERY_STATE\n\n\tSEMAPHORE_MODIFY_STATE = 0x0002\n\tSEMAPHORE_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3\n\n\tTIMER_QUERY_STATE  = 0x0001\n\tTIMER_MODIFY_STATE = 0x0002\n\tTIMER_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | TIMER_QUERY_STATE | TIMER_MODIFY_STATE\n\n\tMUTEX_MODIFY_STATE = MUTANT_QUERY_STATE\n\tMUTEX_ALL_ACCESS   = MUTANT_ALL_ACCESS\n\n\tCREATE_EVENT_MANUAL_RESET  = 0x1\n\tCREATE_EVENT_INITIAL_SET   = 0x2\n\tCREATE_MUTEX_INITIAL_OWNER = 0x1\n)\n\ntype AddrinfoW struct {\n\tFlags     int32\n\tFamily    int32\n\tSocktype  int32\n\tProtocol  int32\n\tAddrlen   uintptr\n\tCanonname *uint16\n\tAddr      uintptr\n\tNext      *AddrinfoW\n}\n\nconst (\n\tAI_PASSIVE     = 1\n\tAI_CANONNAME   = 2\n\tAI_NUMERICHOST = 4\n)\n\ntype GUID struct {\n\tData1 uint32\n\tData2 uint16\n\tData3 uint16\n\tData4 [8]byte\n}\n\nvar WSAID_CONNECTEX = GUID{\n\t0x25a207b9,\n\t0xddf3,\n\t0x4660,\n\t[8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e},\n}\n\nvar WSAID_WSASENDMSG = GUID{\n\t0xa441e712,\n\t0x754f,\n\t0x43ca,\n\t[8]byte{0x84, 0xa7, 0x0d, 0xee, 0x44, 0xcf, 0x60, 0x6d},\n}\n\nvar WSAID_WSARECVMSG = GUID{\n\t0xf689d7c8,\n\t0x6f1f,\n\t0x436b,\n\t[8]byte{0x8a, 0x53, 0xe5, 0x4f, 0xe3, 0x51, 0xc3, 0x22},\n}\n\nconst (\n\tFILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1\n\tFILE_SKIP_SET_EVENT_ON_HANDLE        = 2\n)\n\nconst (\n\tWSAPROTOCOL_LEN    = 255\n\tMAX_PROTOCOL_CHAIN = 7\n\tBASE_PROTOCOL      = 1\n\tLAYERED_PROTOCOL   = 0\n\n\tXP1_CONNECTIONLESS           = 0x00000001\n\tXP1_GUARANTEED_DELIVERY      = 0x00000002\n\tXP1_GUARANTEED_ORDER         = 0x00000004\n\tXP1_MESSAGE_ORIENTED         = 0x00000008\n\tXP1_PSEUDO_STREAM            = 0x00000010\n\tXP1_GRACEFUL_CLOSE           = 0x00000020\n\tXP1_EXPEDITED_DATA           = 0x00000040\n\tXP1_CONNECT_DATA             = 0x00000080\n\tXP1_DISCONNECT_DATA          = 0x00000100\n\tXP1_SUPPORT_BROADCAST        = 0x00000200\n\tXP1_SUPPORT_MULTIPOINT       = 0x00000400\n\tXP1_MULTIPOINT_CONTROL_PLANE = 0x00000800\n\tXP1_MULTIPOINT_DATA_PLANE    = 0x00001000\n\tXP1_QOS_SUPPORTED            = 0x00002000\n\tXP1_UNI_SEND                 = 0x00008000\n\tXP1_UNI_RECV                 = 0x00010000\n\tXP1_IFS_HANDLES              = 0x00020000\n\tXP1_PARTIAL_MESSAGE          = 0x00040000\n\tXP1_SAN_SUPPORT_SDP          = 0x00080000\n\n\tPFL_MULTIPLE_PROTO_ENTRIES  = 0x00000001\n\tPFL_RECOMMENDED_PROTO_ENTRY = 0x00000002\n\tPFL_HIDDEN                  = 0x00000004\n\tPFL_MATCHES_PROTOCOL_ZERO   = 0x00000008\n\tPFL_NETWORKDIRECT_PROVIDER  = 0x00000010\n)\n\ntype WSAProtocolInfo struct {\n\tServiceFlags1     uint32\n\tServiceFlags2     uint32\n\tServiceFlags3     uint32\n\tServiceFlags4     uint32\n\tProviderFlags     uint32\n\tProviderId        GUID\n\tCatalogEntryId    uint32\n\tProtocolChain     WSAProtocolChain\n\tVersion           int32\n\tAddressFamily     int32\n\tMaxSockAddr       int32\n\tMinSockAddr       int32\n\tSocketType        int32\n\tProtocol          int32\n\tProtocolMaxOffset int32\n\tNetworkByteOrder  int32\n\tSecurityScheme    int32\n\tMessageSize       uint32\n\tProviderReserved  uint32\n\tProtocolName      [WSAPROTOCOL_LEN + 1]uint16\n}\n\ntype WSAProtocolChain struct {\n\tChainLen     int32\n\tChainEntries [MAX_PROTOCOL_CHAIN]uint32\n}\n\ntype TCPKeepalive struct {\n\tOnOff    uint32\n\tTime     uint32\n\tInterval uint32\n}\n\ntype symbolicLinkReparseBuffer struct {\n\tSubstituteNameOffset uint16\n\tSubstituteNameLength uint16\n\tPrintNameOffset      uint16\n\tPrintNameLength      uint16\n\tFlags                uint32\n\tPathBuffer           [1]uint16\n}\n\ntype mountPointReparseBuffer struct {\n\tSubstituteNameOffset uint16\n\tSubstituteNameLength uint16\n\tPrintNameOffset      uint16\n\tPrintNameLength      uint16\n\tPathBuffer           [1]uint16\n}\n\ntype reparseDataBuffer struct {\n\tReparseTag        uint32\n\tReparseDataLength uint16\n\tReserved          uint16\n\n\t// GenericReparseBuffer\n\treparseBuffer byte\n}\n\nconst (\n\tFSCTL_CREATE_OR_GET_OBJECT_ID             = 0x0900C0\n\tFSCTL_DELETE_OBJECT_ID                    = 0x0900A0\n\tFSCTL_DELETE_REPARSE_POINT                = 0x0900AC\n\tFSCTL_DUPLICATE_EXTENTS_TO_FILE           = 0x098344\n\tFSCTL_DUPLICATE_EXTENTS_TO_FILE_EX        = 0x0983E8\n\tFSCTL_FILESYSTEM_GET_STATISTICS           = 0x090060\n\tFSCTL_FILE_LEVEL_TRIM                     = 0x098208\n\tFSCTL_FIND_FILES_BY_SID                   = 0x09008F\n\tFSCTL_GET_COMPRESSION                     = 0x09003C\n\tFSCTL_GET_INTEGRITY_INFORMATION           = 0x09027C\n\tFSCTL_GET_NTFS_VOLUME_DATA                = 0x090064\n\tFSCTL_GET_REFS_VOLUME_DATA                = 0x0902D8\n\tFSCTL_GET_OBJECT_ID                       = 0x09009C\n\tFSCTL_GET_REPARSE_POINT                   = 0x0900A8\n\tFSCTL_GET_RETRIEVAL_POINTER_COUNT         = 0x09042B\n\tFSCTL_GET_RETRIEVAL_POINTERS              = 0x090073\n\tFSCTL_GET_RETRIEVAL_POINTERS_AND_REFCOUNT = 0x0903D3\n\tFSCTL_IS_PATHNAME_VALID                   = 0x09002C\n\tFSCTL_LMR_SET_LINK_TRACKING_INFORMATION   = 0x1400EC\n\tFSCTL_MARK_HANDLE                         = 0x0900FC\n\tFSCTL_OFFLOAD_READ                        = 0x094264\n\tFSCTL_OFFLOAD_WRITE                       = 0x098268\n\tFSCTL_PIPE_PEEK                           = 0x11400C\n\tFSCTL_PIPE_TRANSCEIVE                     = 0x11C017\n\tFSCTL_PIPE_WAIT                           = 0x110018\n\tFSCTL_QUERY_ALLOCATED_RANGES              = 0x0940CF\n\tFSCTL_QUERY_FAT_BPB                       = 0x090058\n\tFSCTL_QUERY_FILE_REGIONS                  = 0x090284\n\tFSCTL_QUERY_ON_DISK_VOLUME_INFO           = 0x09013C\n\tFSCTL_QUERY_SPARING_INFO                  = 0x090138\n\tFSCTL_READ_FILE_USN_DATA                  = 0x0900EB\n\tFSCTL_RECALL_FILE                         = 0x090117\n\tFSCTL_REFS_STREAM_SNAPSHOT_MANAGEMENT     = 0x090440\n\tFSCTL_SET_COMPRESSION                     = 0x09C040\n\tFSCTL_SET_DEFECT_MANAGEMENT               = 0x098134\n\tFSCTL_SET_ENCRYPTION                      = 0x0900D7\n\tFSCTL_SET_INTEGRITY_INFORMATION           = 0x09C280\n\tFSCTL_SET_INTEGRITY_INFORMATION_EX        = 0x090380\n\tFSCTL_SET_OBJECT_ID                       = 0x090098\n\tFSCTL_SET_OBJECT_ID_EXTENDED              = 0x0900BC\n\tFSCTL_SET_REPARSE_POINT                   = 0x0900A4\n\tFSCTL_SET_SPARSE                          = 0x0900C4\n\tFSCTL_SET_ZERO_DATA                       = 0x0980C8\n\tFSCTL_SET_ZERO_ON_DEALLOCATION            = 0x090194\n\tFSCTL_SIS_COPYFILE                        = 0x090100\n\tFSCTL_WRITE_USN_CLOSE_RECORD              = 0x0900EF\n\n\tMAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024\n\tIO_REPARSE_TAG_MOUNT_POINT       = 0xA0000003\n\tIO_REPARSE_TAG_SYMLINK           = 0xA000000C\n\tSYMBOLIC_LINK_FLAG_DIRECTORY     = 0x1\n)\n\n// FILE_ZERO_DATA_INFORMATION from winioctl.h\ntype FileZeroDataInformation struct {\n\tFileOffset      int64\n\tBeyondFinalZero int64\n}\n\nconst (\n\tComputerNameNetBIOS                   = 0\n\tComputerNameDnsHostname               = 1\n\tComputerNameDnsDomain                 = 2\n\tComputerNameDnsFullyQualified         = 3\n\tComputerNamePhysicalNetBIOS           = 4\n\tComputerNamePhysicalDnsHostname       = 5\n\tComputerNamePhysicalDnsDomain         = 6\n\tComputerNamePhysicalDnsFullyQualified = 7\n\tComputerNameMax                       = 8\n)\n\n// For MessageBox()\nconst (\n\tMB_OK                   = 0x00000000\n\tMB_OKCANCEL             = 0x00000001\n\tMB_ABORTRETRYIGNORE     = 0x00000002\n\tMB_YESNOCANCEL          = 0x00000003\n\tMB_YESNO                = 0x00000004\n\tMB_RETRYCANCEL          = 0x00000005\n\tMB_CANCELTRYCONTINUE    = 0x00000006\n\tMB_ICONHAND             = 0x00000010\n\tMB_ICONQUESTION         = 0x00000020\n\tMB_ICONEXCLAMATION      = 0x00000030\n\tMB_ICONASTERISK         = 0x00000040\n\tMB_USERICON             = 0x00000080\n\tMB_ICONWARNING          = MB_ICONEXCLAMATION\n\tMB_ICONERROR            = MB_ICONHAND\n\tMB_ICONINFORMATION      = MB_ICONASTERISK\n\tMB_ICONSTOP             = MB_ICONHAND\n\tMB_DEFBUTTON1           = 0x00000000\n\tMB_DEFBUTTON2           = 0x00000100\n\tMB_DEFBUTTON3           = 0x00000200\n\tMB_DEFBUTTON4           = 0x00000300\n\tMB_APPLMODAL            = 0x00000000\n\tMB_SYSTEMMODAL          = 0x00001000\n\tMB_TASKMODAL            = 0x00002000\n\tMB_HELP                 = 0x00004000\n\tMB_NOFOCUS              = 0x00008000\n\tMB_SETFOREGROUND        = 0x00010000\n\tMB_DEFAULT_DESKTOP_ONLY = 0x00020000\n\tMB_TOPMOST              = 0x00040000\n\tMB_RIGHT                = 0x00080000\n\tMB_RTLREADING           = 0x00100000\n\tMB_SERVICE_NOTIFICATION = 0x00200000\n)\n\nconst (\n\tMOVEFILE_REPLACE_EXISTING      = 0x1\n\tMOVEFILE_COPY_ALLOWED          = 0x2\n\tMOVEFILE_DELAY_UNTIL_REBOOT    = 0x4\n\tMOVEFILE_WRITE_THROUGH         = 0x8\n\tMOVEFILE_CREATE_HARDLINK       = 0x10\n\tMOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20\n)\n\n// Flags for GetAdaptersAddresses, see\n// https://learn.microsoft.com/en-us/windows/win32/api/iphlpapi/nf-iphlpapi-getadaptersaddresses.\nconst (\n\tGAA_FLAG_SKIP_UNICAST                = 0x1\n\tGAA_FLAG_SKIP_ANYCAST                = 0x2\n\tGAA_FLAG_SKIP_MULTICAST              = 0x4\n\tGAA_FLAG_SKIP_DNS_SERVER             = 0x8\n\tGAA_FLAG_INCLUDE_PREFIX              = 0x10\n\tGAA_FLAG_SKIP_FRIENDLY_NAME          = 0x20\n\tGAA_FLAG_INCLUDE_WINS_INFO           = 0x40\n\tGAA_FLAG_INCLUDE_GATEWAYS            = 0x80\n\tGAA_FLAG_INCLUDE_ALL_INTERFACES      = 0x100\n\tGAA_FLAG_INCLUDE_ALL_COMPARTMENTS    = 0x200\n\tGAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER = 0x400\n)\n\nconst (\n\tIF_TYPE_OTHER              = 1\n\tIF_TYPE_ETHERNET_CSMACD    = 6\n\tIF_TYPE_ISO88025_TOKENRING = 9\n\tIF_TYPE_PPP                = 23\n\tIF_TYPE_SOFTWARE_LOOPBACK  = 24\n\tIF_TYPE_ATM                = 37\n\tIF_TYPE_IEEE80211          = 71\n\tIF_TYPE_TUNNEL             = 131\n\tIF_TYPE_IEEE1394           = 144\n)\n\n// Enum NL_PREFIX_ORIGIN for [IpAdapterUnicastAddress], see\n// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_prefix_origin\nconst (\n\tIpPrefixOriginOther               = 0\n\tIpPrefixOriginManual              = 1\n\tIpPrefixOriginWellKnown           = 2\n\tIpPrefixOriginDhcp                = 3\n\tIpPrefixOriginRouterAdvertisement = 4\n\tIpPrefixOriginUnchanged           = 1 << 4\n)\n\n// Enum NL_SUFFIX_ORIGIN for [IpAdapterUnicastAddress], see\n// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_suffix_origin\nconst (\n\tNlsoOther                      = 0\n\tNlsoManual                     = 1\n\tNlsoWellKnown                  = 2\n\tNlsoDhcp                       = 3\n\tNlsoLinkLayerAddress           = 4\n\tNlsoRandom                     = 5\n\tIpSuffixOriginOther            = 0\n\tIpSuffixOriginManual           = 1\n\tIpSuffixOriginWellKnown        = 2\n\tIpSuffixOriginDhcp             = 3\n\tIpSuffixOriginLinkLayerAddress = 4\n\tIpSuffixOriginRandom           = 5\n\tIpSuffixOriginUnchanged        = 1 << 4\n)\n\n// Enum NL_DAD_STATE for [IpAdapterUnicastAddress], see\n// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_dad_state\nconst (\n\tNldsInvalid          = 0\n\tNldsTentative        = 1\n\tNldsDuplicate        = 2\n\tNldsDeprecated       = 3\n\tNldsPreferred        = 4\n\tIpDadStateInvalid    = 0\n\tIpDadStateTentative  = 1\n\tIpDadStateDuplicate  = 2\n\tIpDadStateDeprecated = 3\n\tIpDadStatePreferred  = 4\n)\n\ntype SocketAddress struct {\n\tSockaddr       *syscall.RawSockaddrAny\n\tSockaddrLength int32\n}\n\n// IP returns an IPv4 or IPv6 address, or nil if the underlying SocketAddress is neither.\nfunc (addr *SocketAddress) IP() net.IP {\n\tif uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet4{}) && addr.Sockaddr.Addr.Family == AF_INET {\n\t\treturn (*RawSockaddrInet4)(unsafe.Pointer(addr.Sockaddr)).Addr[:]\n\t} else if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet6{}) && addr.Sockaddr.Addr.Family == AF_INET6 {\n\t\treturn (*RawSockaddrInet6)(unsafe.Pointer(addr.Sockaddr)).Addr[:]\n\t}\n\treturn nil\n}\n\ntype IpAdapterUnicastAddress struct {\n\tLength             uint32\n\tFlags              uint32\n\tNext               *IpAdapterUnicastAddress\n\tAddress            SocketAddress\n\tPrefixOrigin       int32\n\tSuffixOrigin       int32\n\tDadState           int32\n\tValidLifetime      uint32\n\tPreferredLifetime  uint32\n\tLeaseLifetime      uint32\n\tOnLinkPrefixLength uint8\n}\n\ntype IpAdapterAnycastAddress struct {\n\tLength  uint32\n\tFlags   uint32\n\tNext    *IpAdapterAnycastAddress\n\tAddress SocketAddress\n}\n\ntype IpAdapterMulticastAddress struct {\n\tLength  uint32\n\tFlags   uint32\n\tNext    *IpAdapterMulticastAddress\n\tAddress SocketAddress\n}\n\ntype IpAdapterDnsServerAdapter struct {\n\tLength   uint32\n\tReserved uint32\n\tNext     *IpAdapterDnsServerAdapter\n\tAddress  SocketAddress\n}\n\ntype IpAdapterPrefix struct {\n\tLength       uint32\n\tFlags        uint32\n\tNext         *IpAdapterPrefix\n\tAddress      SocketAddress\n\tPrefixLength uint32\n}\n\ntype IpAdapterAddresses struct {\n\tLength                 uint32\n\tIfIndex                uint32\n\tNext                   *IpAdapterAddresses\n\tAdapterName            *byte\n\tFirstUnicastAddress    *IpAdapterUnicastAddress\n\tFirstAnycastAddress    *IpAdapterAnycastAddress\n\tFirstMulticastAddress  *IpAdapterMulticastAddress\n\tFirstDnsServerAddress  *IpAdapterDnsServerAdapter\n\tDnsSuffix              *uint16\n\tDescription            *uint16\n\tFriendlyName           *uint16\n\tPhysicalAddress        [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte\n\tPhysicalAddressLength  uint32\n\tFlags                  uint32\n\tMtu                    uint32\n\tIfType                 uint32\n\tOperStatus             uint32\n\tIpv6IfIndex            uint32\n\tZoneIndices            [16]uint32\n\tFirstPrefix            *IpAdapterPrefix\n\tTransmitLinkSpeed      uint64\n\tReceiveLinkSpeed       uint64\n\tFirstWinsServerAddress *IpAdapterWinsServerAddress\n\tFirstGatewayAddress    *IpAdapterGatewayAddress\n\tIpv4Metric             uint32\n\tIpv6Metric             uint32\n\tLuid                   uint64\n\tDhcpv4Server           SocketAddress\n\tCompartmentId          uint32\n\tNetworkGuid            GUID\n\tConnectionType         uint32\n\tTunnelType             uint32\n\tDhcpv6Server           SocketAddress\n\tDhcpv6ClientDuid       [MAX_DHCPV6_DUID_LENGTH]byte\n\tDhcpv6ClientDuidLength uint32\n\tDhcpv6Iaid             uint32\n\tFirstDnsSuffix         *IpAdapterDNSSuffix\n}\n\ntype IpAdapterWinsServerAddress struct {\n\tLength   uint32\n\tReserved uint32\n\tNext     *IpAdapterWinsServerAddress\n\tAddress  SocketAddress\n}\n\ntype IpAdapterGatewayAddress struct {\n\tLength   uint32\n\tReserved uint32\n\tNext     *IpAdapterGatewayAddress\n\tAddress  SocketAddress\n}\n\ntype IpAdapterDNSSuffix struct {\n\tNext   *IpAdapterDNSSuffix\n\tString [MAX_DNS_SUFFIX_STRING_LENGTH]uint16\n}\n\nconst (\n\tIfOperStatusUp             = 1\n\tIfOperStatusDown           = 2\n\tIfOperStatusTesting        = 3\n\tIfOperStatusUnknown        = 4\n\tIfOperStatusDormant        = 5\n\tIfOperStatusNotPresent     = 6\n\tIfOperStatusLowerLayerDown = 7\n)\n\nconst (\n\tIF_MAX_PHYS_ADDRESS_LENGTH = 32\n\tIF_MAX_STRING_SIZE         = 256\n)\n\n// MIB_IF_ENTRY_LEVEL enumeration from netioapi.h or\n// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/nf-netioapi-getifentry2ex.\nconst (\n\tMibIfEntryNormal                  = 0\n\tMibIfEntryNormalWithoutStatistics = 2\n)\n\n// MIB_NOTIFICATION_TYPE enumeration from netioapi.h or\n// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ne-netioapi-mib_notification_type.\nconst (\n\tMibParameterNotification = 0\n\tMibAddInstance           = 1\n\tMibDeleteInstance        = 2\n\tMibInitialNotification   = 3\n)\n\n// MibIfRow2 stores information about a particular interface. See\n// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_if_row2.\ntype MibIfRow2 struct {\n\tInterfaceLuid               uint64\n\tInterfaceIndex              uint32\n\tInterfaceGuid               GUID\n\tAlias                       [IF_MAX_STRING_SIZE + 1]uint16\n\tDescription                 [IF_MAX_STRING_SIZE + 1]uint16\n\tPhysicalAddressLength       uint32\n\tPhysicalAddress             [IF_MAX_PHYS_ADDRESS_LENGTH]uint8\n\tPermanentPhysicalAddress    [IF_MAX_PHYS_ADDRESS_LENGTH]uint8\n\tMtu                         uint32\n\tType                        uint32\n\tTunnelType                  uint32\n\tMediaType                   uint32\n\tPhysicalMediumType          uint32\n\tAccessType                  uint32\n\tDirectionType               uint32\n\tInterfaceAndOperStatusFlags uint8\n\tOperStatus                  uint32\n\tAdminStatus                 uint32\n\tMediaConnectState           uint32\n\tNetworkGuid                 GUID\n\tConnectionType              uint32\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\n// IP_ADDRESS_PREFIX stores an IP address prefix. See\n// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-ip_address_prefix.\ntype IpAddressPrefix struct {\n\tPrefix       RawSockaddrInet\n\tPrefixLength uint8\n}\n\n// NL_ROUTE_ORIGIN enumeration from nldef.h or\n// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_route_origin.\nconst (\n\tNlroManual              = 0\n\tNlroWellKnown           = 1\n\tNlroDHCP                = 2\n\tNlroRouterAdvertisement = 3\n\tNlro6to4                = 4\n)\n\n// NL_ROUTE_ORIGIN enumeration from nldef.h or\n// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_route_protocol.\nconst (\n\tMIB_IPPROTO_OTHER             = 1\n\tMIB_IPPROTO_LOCAL             = 2\n\tMIB_IPPROTO_NETMGMT           = 3\n\tMIB_IPPROTO_ICMP              = 4\n\tMIB_IPPROTO_EGP               = 5\n\tMIB_IPPROTO_GGP               = 6\n\tMIB_IPPROTO_HELLO             = 7\n\tMIB_IPPROTO_RIP               = 8\n\tMIB_IPPROTO_IS_IS             = 9\n\tMIB_IPPROTO_ES_IS             = 10\n\tMIB_IPPROTO_CISCO             = 11\n\tMIB_IPPROTO_BBN               = 12\n\tMIB_IPPROTO_OSPF              = 13\n\tMIB_IPPROTO_BGP               = 14\n\tMIB_IPPROTO_IDPR              = 15\n\tMIB_IPPROTO_EIGRP             = 16\n\tMIB_IPPROTO_DVMRP             = 17\n\tMIB_IPPROTO_RPL               = 18\n\tMIB_IPPROTO_DHCP              = 19\n\tMIB_IPPROTO_NT_AUTOSTATIC     = 10002\n\tMIB_IPPROTO_NT_STATIC         = 10006\n\tMIB_IPPROTO_NT_STATIC_NON_DOD = 10007\n)\n\n// MIB_IPFORWARD_ROW2 stores information about an IP route entry. See\n// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipforward_row2.\ntype MibIpForwardRow2 struct {\n\tInterfaceLuid        uint64\n\tInterfaceIndex       uint32\n\tDestinationPrefix    IpAddressPrefix\n\tNextHop              RawSockaddrInet\n\tSitePrefixLength     uint8\n\tValidLifetime        uint32\n\tPreferredLifetime    uint32\n\tMetric               uint32\n\tProtocol             uint32\n\tLoopback             uint8\n\tAutoconfigureAddress uint8\n\tPublish              uint8\n\tImmortal             uint8\n\tAge                  uint32\n\tOrigin               uint32\n}\n\n// MIB_IPFORWARD_TABLE2 contains a table of IP route entries. See\n// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipforward_table2.\ntype MibIpForwardTable2 struct {\n\tNumEntries uint32\n\tTable      [1]MibIpForwardRow2\n}\n\n// Rows returns the IP route entries in the table.\nfunc (t *MibIpForwardTable2) Rows() []MibIpForwardRow2 {\n\treturn unsafe.Slice(&t.Table[0], t.NumEntries)\n}\n\n// MIB_UNICASTIPADDRESS_ROW stores information about a unicast IP address. See\n// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_unicastipaddress_row.\ntype MibUnicastIpAddressRow struct {\n\tAddress            RawSockaddrInet6 // SOCKADDR_INET union\n\tInterfaceLuid      uint64\n\tInterfaceIndex     uint32\n\tPrefixOrigin       uint32\n\tSuffixOrigin       uint32\n\tValidLifetime      uint32\n\tPreferredLifetime  uint32\n\tOnLinkPrefixLength uint8\n\tSkipAsSource       uint8\n\tDadState           uint32\n\tScopeId            uint32\n\tCreationTimeStamp  Filetime\n}\n\nconst ScopeLevelCount = 16\n\n// MIB_IPINTERFACE_ROW stores interface management information for a particular IP address family on a network interface.\n// See https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipinterface_row.\ntype MibIpInterfaceRow struct {\n\tFamily                               uint16\n\tInterfaceLuid                        uint64\n\tInterfaceIndex                       uint32\n\tMaxReassemblySize                    uint32\n\tInterfaceIdentifier                  uint64\n\tMinRouterAdvertisementInterval       uint32\n\tMaxRouterAdvertisementInterval       uint32\n\tAdvertisingEnabled                   uint8\n\tForwardingEnabled                    uint8\n\tWeakHostSend                         uint8\n\tWeakHostReceive                      uint8\n\tUseAutomaticMetric                   uint8\n\tUseNeighborUnreachabilityDetection   uint8\n\tManagedAddressConfigurationSupported uint8\n\tOtherStatefulConfigurationSupported  uint8\n\tAdvertiseDefaultRoute                uint8\n\tRouterDiscoveryBehavior              uint32\n\tDadTransmits                         uint32\n\tBaseReachableTime                    uint32\n\tRetransmitTime                       uint32\n\tPathMtuDiscoveryTimeout              uint32\n\tLinkLocalAddressBehavior             uint32\n\tLinkLocalAddressTimeout              uint32\n\tZoneIndices                          [ScopeLevelCount]uint32\n\tSitePrefixLength                     uint32\n\tMetric                               uint32\n\tNlMtu                                uint32\n\tConnected                            uint8\n\tSupportsWakeUpPatterns               uint8\n\tSupportsNeighborDiscovery            uint8\n\tSupportsRouterDiscovery              uint8\n\tReachableTime                        uint32\n\tTransmitOffload                      uint32\n\tReceiveOffload                       uint32\n\tDisableDefaultRoutes                 uint8\n}\n\n// Console related constants used for the mode parameter to SetConsoleMode. See\n// https://docs.microsoft.com/en-us/windows/console/setconsolemode for details.\n\nconst (\n\tENABLE_PROCESSED_INPUT        = 0x1\n\tENABLE_LINE_INPUT             = 0x2\n\tENABLE_ECHO_INPUT             = 0x4\n\tENABLE_WINDOW_INPUT           = 0x8\n\tENABLE_MOUSE_INPUT            = 0x10\n\tENABLE_INSERT_MODE            = 0x20\n\tENABLE_QUICK_EDIT_MODE        = 0x40\n\tENABLE_EXTENDED_FLAGS         = 0x80\n\tENABLE_AUTO_POSITION          = 0x100\n\tENABLE_VIRTUAL_TERMINAL_INPUT = 0x200\n\n\tENABLE_PROCESSED_OUTPUT            = 0x1\n\tENABLE_WRAP_AT_EOL_OUTPUT          = 0x2\n\tENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4\n\tDISABLE_NEWLINE_AUTO_RETURN        = 0x8\n\tENABLE_LVB_GRID_WORLDWIDE          = 0x10\n)\n\n// Pseudo console related constants used for the flags parameter to\n// CreatePseudoConsole. See: https://learn.microsoft.com/en-us/windows/console/createpseudoconsole\nconst (\n\tPSEUDOCONSOLE_INHERIT_CURSOR = 0x1\n)\n\ntype Coord struct {\n\tX int16\n\tY int16\n}\n\ntype SmallRect struct {\n\tLeft   int16\n\tTop    int16\n\tRight  int16\n\tBottom int16\n}\n\n// Used with GetConsoleScreenBuffer to retrieve information about a console\n// screen buffer. See\n// https://docs.microsoft.com/en-us/windows/console/console-screen-buffer-info-str\n// for details.\n\ntype ConsoleScreenBufferInfo struct {\n\tSize              Coord\n\tCursorPosition    Coord\n\tAttributes        uint16\n\tWindow            SmallRect\n\tMaximumWindowSize Coord\n}\n\nconst UNIX_PATH_MAX = 108 // defined in afunix.h\n\nconst (\n\t// flags for JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags\n\tJOB_OBJECT_LIMIT_ACTIVE_PROCESS             = 0x00000008\n\tJOB_OBJECT_LIMIT_AFFINITY                   = 0x00000010\n\tJOB_OBJECT_LIMIT_BREAKAWAY_OK               = 0x00000800\n\tJOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x00000400\n\tJOB_OBJECT_LIMIT_JOB_MEMORY                 = 0x00000200\n\tJOB_OBJECT_LIMIT_JOB_TIME                   = 0x00000004\n\tJOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE          = 0x00002000\n\tJOB_OBJECT_LIMIT_PRESERVE_JOB_TIME          = 0x00000040\n\tJOB_OBJECT_LIMIT_PRIORITY_CLASS             = 0x00000020\n\tJOB_OBJECT_LIMIT_PROCESS_MEMORY             = 0x00000100\n\tJOB_OBJECT_LIMIT_PROCESS_TIME               = 0x00000002\n\tJOB_OBJECT_LIMIT_SCHEDULING_CLASS           = 0x00000080\n\tJOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK        = 0x00001000\n\tJOB_OBJECT_LIMIT_SUBSET_AFFINITY            = 0x00004000\n\tJOB_OBJECT_LIMIT_WORKINGSET                 = 0x00000001\n)\n\ntype IO_COUNTERS struct {\n\tReadOperationCount  uint64\n\tWriteOperationCount uint64\n\tOtherOperationCount uint64\n\tReadTransferCount   uint64\n\tWriteTransferCount  uint64\n\tOtherTransferCount  uint64\n}\n\ntype JOBOBJECT_EXTENDED_LIMIT_INFORMATION struct {\n\tBasicLimitInformation JOBOBJECT_BASIC_LIMIT_INFORMATION\n\tIoInfo                IO_COUNTERS\n\tProcessMemoryLimit    uintptr\n\tJobMemoryLimit        uintptr\n\tPeakProcessMemoryUsed uintptr\n\tPeakJobMemoryUsed     uintptr\n}\n\nconst (\n\t// UIRestrictionsClass\n\tJOB_OBJECT_UILIMIT_DESKTOP          = 0x00000040\n\tJOB_OBJECT_UILIMIT_DISPLAYSETTINGS  = 0x00000010\n\tJOB_OBJECT_UILIMIT_EXITWINDOWS      = 0x00000080\n\tJOB_OBJECT_UILIMIT_GLOBALATOMS      = 0x00000020\n\tJOB_OBJECT_UILIMIT_HANDLES          = 0x00000001\n\tJOB_OBJECT_UILIMIT_READCLIPBOARD    = 0x00000002\n\tJOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = 0x00000008\n\tJOB_OBJECT_UILIMIT_WRITECLIPBOARD   = 0x00000004\n)\n\ntype JOBOBJECT_BASIC_UI_RESTRICTIONS struct {\n\tUIRestrictionsClass uint32\n}\n\nconst (\n\t// JobObjectInformationClass for QueryInformationJobObject and SetInformationJobObject\n\tJobObjectAssociateCompletionPortInformation = 7\n\tJobObjectBasicAccountingInformation         = 1\n\tJobObjectBasicAndIoAccountingInformation    = 8\n\tJobObjectBasicLimitInformation              = 2\n\tJobObjectBasicProcessIdList                 = 3\n\tJobObjectBasicUIRestrictions                = 4\n\tJobObjectCpuRateControlInformation          = 15\n\tJobObjectEndOfJobTimeInformation            = 6\n\tJobObjectExtendedLimitInformation           = 9\n\tJobObjectGroupInformation                   = 11\n\tJobObjectGroupInformationEx                 = 14\n\tJobObjectLimitViolationInformation          = 13\n\tJobObjectLimitViolationInformation2         = 34\n\tJobObjectNetRateControlInformation          = 32\n\tJobObjectNotificationLimitInformation       = 12\n\tJobObjectNotificationLimitInformation2      = 33\n\tJobObjectSecurityLimitInformation           = 5\n)\n\nconst (\n\tKF_FLAG_DEFAULT                          = 0x00000000\n\tKF_FLAG_FORCE_APP_DATA_REDIRECTION       = 0x00080000\n\tKF_FLAG_RETURN_FILTER_REDIRECTION_TARGET = 0x00040000\n\tKF_FLAG_FORCE_PACKAGE_REDIRECTION        = 0x00020000\n\tKF_FLAG_NO_PACKAGE_REDIRECTION           = 0x00010000\n\tKF_FLAG_FORCE_APPCONTAINER_REDIRECTION   = 0x00020000\n\tKF_FLAG_NO_APPCONTAINER_REDIRECTION      = 0x00010000\n\tKF_FLAG_CREATE                           = 0x00008000\n\tKF_FLAG_DONT_VERIFY                      = 0x00004000\n\tKF_FLAG_DONT_UNEXPAND                    = 0x00002000\n\tKF_FLAG_NO_ALIAS                         = 0x00001000\n\tKF_FLAG_INIT                             = 0x00000800\n\tKF_FLAG_DEFAULT_PATH                     = 0x00000400\n\tKF_FLAG_NOT_PARENT_RELATIVE              = 0x00000200\n\tKF_FLAG_SIMPLE_IDLIST                    = 0x00000100\n\tKF_FLAG_ALIAS_ONLY                       = 0x80000000\n)\n\ntype OsVersionInfoEx struct {\n\tosVersionInfoSize uint32\n\tMajorVersion      uint32\n\tMinorVersion      uint32\n\tBuildNumber       uint32\n\tPlatformId        uint32\n\tCsdVersion        [128]uint16\n\tServicePackMajor  uint16\n\tServicePackMinor  uint16\n\tSuiteMask         uint16\n\tProductType       byte\n\t_                 byte\n}\n\nconst (\n\tEWX_LOGOFF          = 0x00000000\n\tEWX_SHUTDOWN        = 0x00000001\n\tEWX_REBOOT          = 0x00000002\n\tEWX_FORCE           = 0x00000004\n\tEWX_POWEROFF        = 0x00000008\n\tEWX_FORCEIFHUNG     = 0x00000010\n\tEWX_QUICKRESOLVE    = 0x00000020\n\tEWX_RESTARTAPPS     = 0x00000040\n\tEWX_HYBRID_SHUTDOWN = 0x00400000\n\tEWX_BOOTOPTIONS     = 0x01000000\n\n\tSHTDN_REASON_FLAG_COMMENT_REQUIRED          = 0x01000000\n\tSHTDN_REASON_FLAG_DIRTY_PROBLEM_ID_REQUIRED = 0x02000000\n\tSHTDN_REASON_FLAG_CLEAN_UI                  = 0x04000000\n\tSHTDN_REASON_FLAG_DIRTY_UI                  = 0x08000000\n\tSHTDN_REASON_FLAG_USER_DEFINED              = 0x40000000\n\tSHTDN_REASON_FLAG_PLANNED                   = 0x80000000\n\tSHTDN_REASON_MAJOR_OTHER                    = 0x00000000\n\tSHTDN_REASON_MAJOR_NONE                     = 0x00000000\n\tSHTDN_REASON_MAJOR_HARDWARE                 = 0x00010000\n\tSHTDN_REASON_MAJOR_OPERATINGSYSTEM          = 0x00020000\n\tSHTDN_REASON_MAJOR_SOFTWARE                 = 0x00030000\n\tSHTDN_REASON_MAJOR_APPLICATION              = 0x00040000\n\tSHTDN_REASON_MAJOR_SYSTEM                   = 0x00050000\n\tSHTDN_REASON_MAJOR_POWER                    = 0x00060000\n\tSHTDN_REASON_MAJOR_LEGACY_API               = 0x00070000\n\tSHTDN_REASON_MINOR_OTHER                    = 0x00000000\n\tSHTDN_REASON_MINOR_NONE                     = 0x000000ff\n\tSHTDN_REASON_MINOR_MAINTENANCE              = 0x00000001\n\tSHTDN_REASON_MINOR_INSTALLATION             = 0x00000002\n\tSHTDN_REASON_MINOR_UPGRADE                  = 0x00000003\n\tSHTDN_REASON_MINOR_RECONFIG                 = 0x00000004\n\tSHTDN_REASON_MINOR_HUNG                     = 0x00000005\n\tSHTDN_REASON_MINOR_UNSTABLE                 = 0x00000006\n\tSHTDN_REASON_MINOR_DISK                     = 0x00000007\n\tSHTDN_REASON_MINOR_PROCESSOR                = 0x00000008\n\tSHTDN_REASON_MINOR_NETWORKCARD              = 0x00000009\n\tSHTDN_REASON_MINOR_POWER_SUPPLY             = 0x0000000a\n\tSHTDN_REASON_MINOR_CORDUNPLUGGED            = 0x0000000b\n\tSHTDN_REASON_MINOR_ENVIRONMENT              = 0x0000000c\n\tSHTDN_REASON_MINOR_HARDWARE_DRIVER          = 0x0000000d\n\tSHTDN_REASON_MINOR_OTHERDRIVER              = 0x0000000e\n\tSHTDN_REASON_MINOR_BLUESCREEN               = 0x0000000F\n\tSHTDN_REASON_MINOR_SERVICEPACK              = 0x00000010\n\tSHTDN_REASON_MINOR_HOTFIX                   = 0x00000011\n\tSHTDN_REASON_MINOR_SECURITYFIX              = 0x00000012\n\tSHTDN_REASON_MINOR_SECURITY                 = 0x00000013\n\tSHTDN_REASON_MINOR_NETWORK_CONNECTIVITY     = 0x00000014\n\tSHTDN_REASON_MINOR_WMI                      = 0x00000015\n\tSHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL    = 0x00000016\n\tSHTDN_REASON_MINOR_HOTFIX_UNINSTALL         = 0x00000017\n\tSHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL    = 0x00000018\n\tSHTDN_REASON_MINOR_MMC                      = 0x00000019\n\tSHTDN_REASON_MINOR_SYSTEMRESTORE            = 0x0000001a\n\tSHTDN_REASON_MINOR_TERMSRV                  = 0x00000020\n\tSHTDN_REASON_MINOR_DC_PROMOTION             = 0x00000021\n\tSHTDN_REASON_MINOR_DC_DEMOTION              = 0x00000022\n\tSHTDN_REASON_UNKNOWN                        = SHTDN_REASON_MINOR_NONE\n\tSHTDN_REASON_LEGACY_API                     = SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED\n\tSHTDN_REASON_VALID_BIT_MASK                 = 0xc0ffffff\n\n\tSHUTDOWN_NORETRY = 0x1\n)\n\n// Flags used for GetModuleHandleEx\nconst (\n\tGET_MODULE_HANDLE_EX_FLAG_PIN                = 1\n\tGET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2\n\tGET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS       = 4\n)\n\n// MUI function flag values\nconst (\n\tMUI_LANGUAGE_ID                    = 0x4\n\tMUI_LANGUAGE_NAME                  = 0x8\n\tMUI_MERGE_SYSTEM_FALLBACK          = 0x10\n\tMUI_MERGE_USER_FALLBACK            = 0x20\n\tMUI_UI_FALLBACK                    = MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK\n\tMUI_THREAD_LANGUAGES               = 0x40\n\tMUI_CONSOLE_FILTER                 = 0x100\n\tMUI_COMPLEX_SCRIPT_FILTER          = 0x200\n\tMUI_RESET_FILTERS                  = 0x001\n\tMUI_USER_PREFERRED_UI_LANGUAGES    = 0x10\n\tMUI_USE_INSTALLED_LANGUAGES        = 0x20\n\tMUI_USE_SEARCH_ALL_LANGUAGES       = 0x40\n\tMUI_LANG_NEUTRAL_PE_FILE           = 0x100\n\tMUI_NON_LANG_NEUTRAL_FILE          = 0x200\n\tMUI_MACHINE_LANGUAGE_SETTINGS      = 0x400\n\tMUI_FILETYPE_NOT_LANGUAGE_NEUTRAL  = 0x001\n\tMUI_FILETYPE_LANGUAGE_NEUTRAL_MAIN = 0x002\n\tMUI_FILETYPE_LANGUAGE_NEUTRAL_MUI  = 0x004\n\tMUI_QUERY_TYPE                     = 0x001\n\tMUI_QUERY_CHECKSUM                 = 0x002\n\tMUI_QUERY_LANGUAGE_NAME            = 0x004\n\tMUI_QUERY_RESOURCE_TYPES           = 0x008\n\tMUI_FILEINFO_VERSION               = 0x001\n\n\tMUI_FULL_LANGUAGE      = 0x01\n\tMUI_PARTIAL_LANGUAGE   = 0x02\n\tMUI_LIP_LANGUAGE       = 0x04\n\tMUI_LANGUAGE_INSTALLED = 0x20\n\tMUI_LANGUAGE_LICENSED  = 0x40\n)\n\n// FILE_INFO_BY_HANDLE_CLASS constants for SetFileInformationByHandle/GetFileInformationByHandleEx\nconst (\n\tFileBasicInfo                  = 0\n\tFileStandardInfo               = 1\n\tFileNameInfo                   = 2\n\tFileRenameInfo                 = 3\n\tFileDispositionInfo            = 4\n\tFileAllocationInfo             = 5\n\tFileEndOfFileInfo              = 6\n\tFileStreamInfo                 = 7\n\tFileCompressionInfo            = 8\n\tFileAttributeTagInfo           = 9\n\tFileIdBothDirectoryInfo        = 10\n\tFileIdBothDirectoryRestartInfo = 11\n\tFileIoPriorityHintInfo         = 12\n\tFileRemoteProtocolInfo         = 13\n\tFileFullDirectoryInfo          = 14\n\tFileFullDirectoryRestartInfo   = 15\n\tFileStorageInfo                = 16\n\tFileAlignmentInfo              = 17\n\tFileIdInfo                     = 18\n\tFileIdExtdDirectoryInfo        = 19\n\tFileIdExtdDirectoryRestartInfo = 20\n\tFileDispositionInfoEx          = 21\n\tFileRenameInfoEx               = 22\n\tFileCaseSensitiveInfo          = 23\n\tFileNormalizedNameInfo         = 24\n)\n\n// LoadLibrary flags for determining from where to search for a DLL\nconst (\n\tDONT_RESOLVE_DLL_REFERENCES               = 0x1\n\tLOAD_LIBRARY_AS_DATAFILE                  = 0x2\n\tLOAD_WITH_ALTERED_SEARCH_PATH             = 0x8\n\tLOAD_IGNORE_CODE_AUTHZ_LEVEL              = 0x10\n\tLOAD_LIBRARY_AS_IMAGE_RESOURCE            = 0x20\n\tLOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE        = 0x40\n\tLOAD_LIBRARY_REQUIRE_SIGNED_TARGET        = 0x80\n\tLOAD_LIBRARY_SEARCH_DLL_LOAD_DIR          = 0x100\n\tLOAD_LIBRARY_SEARCH_APPLICATION_DIR       = 0x200\n\tLOAD_LIBRARY_SEARCH_USER_DIRS             = 0x400\n\tLOAD_LIBRARY_SEARCH_SYSTEM32              = 0x800\n\tLOAD_LIBRARY_SEARCH_DEFAULT_DIRS          = 0x1000\n\tLOAD_LIBRARY_SAFE_CURRENT_DIRS            = 0x00002000\n\tLOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER = 0x00004000\n\tLOAD_LIBRARY_OS_INTEGRITY_CONTINUITY      = 0x00008000\n)\n\n// RegNotifyChangeKeyValue notifyFilter flags.\nconst (\n\t// REG_NOTIFY_CHANGE_NAME notifies the caller if a subkey is added or deleted.\n\tREG_NOTIFY_CHANGE_NAME = 0x00000001\n\n\t// REG_NOTIFY_CHANGE_ATTRIBUTES notifies the caller of changes to the attributes of the key, such as the security descriptor information.\n\tREG_NOTIFY_CHANGE_ATTRIBUTES = 0x00000002\n\n\t// REG_NOTIFY_CHANGE_LAST_SET notifies the caller of changes to a value of the key. This can include adding or deleting a value, or changing an existing value.\n\tREG_NOTIFY_CHANGE_LAST_SET = 0x00000004\n\n\t// REG_NOTIFY_CHANGE_SECURITY notifies the caller of changes to the security descriptor of the key.\n\tREG_NOTIFY_CHANGE_SECURITY = 0x00000008\n\n\t// REG_NOTIFY_THREAD_AGNOSTIC indicates that the lifetime of the registration must not be tied to the lifetime of the thread issuing the RegNotifyChangeKeyValue call. Note: This flag value is only supported in Windows 8 and later.\n\tREG_NOTIFY_THREAD_AGNOSTIC = 0x10000000\n)\n\ntype CommTimeouts struct {\n\tReadIntervalTimeout         uint32\n\tReadTotalTimeoutMultiplier  uint32\n\tReadTotalTimeoutConstant    uint32\n\tWriteTotalTimeoutMultiplier uint32\n\tWriteTotalTimeoutConstant   uint32\n}\n\n// NTUnicodeString is a UTF-16 string for NT native APIs, corresponding to UNICODE_STRING.\ntype NTUnicodeString struct {\n\t// Note: Length and MaximumLength are in *bytes*, not uint16s.\n\t// They should always be even.\n\tLength        uint16\n\tMaximumLength uint16\n\tBuffer        *uint16\n}\n\n// NTString is an ANSI string for NT native APIs, corresponding to STRING.\ntype NTString struct {\n\tLength        uint16\n\tMaximumLength uint16\n\tBuffer        *byte\n}\n\ntype LIST_ENTRY struct {\n\tFlink *LIST_ENTRY\n\tBlink *LIST_ENTRY\n}\n\ntype RUNTIME_FUNCTION struct {\n\tBeginAddress uint32\n\tEndAddress   uint32\n\tUnwindData   uint32\n}\n\ntype LDR_DATA_TABLE_ENTRY struct {\n\treserved1          [2]uintptr\n\tInMemoryOrderLinks LIST_ENTRY\n\treserved2          [2]uintptr\n\tDllBase            uintptr\n\treserved3          [2]uintptr\n\tFullDllName        NTUnicodeString\n\treserved4          [8]byte\n\treserved5          [3]uintptr\n\treserved6          uintptr\n\tTimeDateStamp      uint32\n}\n\ntype PEB_LDR_DATA struct {\n\treserved1               [8]byte\n\treserved2               [3]uintptr\n\tInMemoryOrderModuleList LIST_ENTRY\n}\n\ntype CURDIR struct {\n\tDosPath NTUnicodeString\n\tHandle  Handle\n}\n\ntype RTL_DRIVE_LETTER_CURDIR struct {\n\tFlags     uint16\n\tLength    uint16\n\tTimeStamp uint32\n\tDosPath   NTString\n}\n\ntype RTL_USER_PROCESS_PARAMETERS struct {\n\tMaximumLength, Length uint32\n\n\tFlags, DebugFlags uint32\n\n\tConsoleHandle                                Handle\n\tConsoleFlags                                 uint32\n\tStandardInput, StandardOutput, StandardError Handle\n\n\tCurrentDirectory CURDIR\n\tDllPath          NTUnicodeString\n\tImagePathName    NTUnicodeString\n\tCommandLine      NTUnicodeString\n\tEnvironment      unsafe.Pointer\n\n\tStartingX, StartingY, CountX, CountY, CountCharsX, CountCharsY, FillAttribute uint32\n\n\tWindowFlags, ShowWindowFlags                     uint32\n\tWindowTitle, DesktopInfo, ShellInfo, RuntimeData NTUnicodeString\n\tCurrentDirectories                               [32]RTL_DRIVE_LETTER_CURDIR\n\n\tEnvironmentSize, EnvironmentVersion uintptr\n\n\tPackageDependencyData unsafe.Pointer\n\tProcessGroupId        uint32\n\tLoaderThreads         uint32\n\n\tRedirectionDllName               NTUnicodeString\n\tHeapPartitionName                NTUnicodeString\n\tDefaultThreadpoolCpuSetMasks     uintptr\n\tDefaultThreadpoolCpuSetMaskCount uint32\n}\n\ntype PEB struct {\n\treserved1              [2]byte\n\tBeingDebugged          byte\n\tBitField               byte\n\treserved3              uintptr\n\tImageBaseAddress       uintptr\n\tLdr                    *PEB_LDR_DATA\n\tProcessParameters      *RTL_USER_PROCESS_PARAMETERS\n\treserved4              [3]uintptr\n\tAtlThunkSListPtr       uintptr\n\treserved5              uintptr\n\treserved6              uint32\n\treserved7              uintptr\n\treserved8              uint32\n\tAtlThunkSListPtr32     uint32\n\treserved9              [45]uintptr\n\treserved10             [96]byte\n\tPostProcessInitRoutine uintptr\n\treserved11             [128]byte\n\treserved12             [1]uintptr\n\tSessionId              uint32\n}\n\ntype OBJECT_ATTRIBUTES struct {\n\tLength             uint32\n\tRootDirectory      Handle\n\tObjectName         *NTUnicodeString\n\tAttributes         uint32\n\tSecurityDescriptor *SECURITY_DESCRIPTOR\n\tSecurityQoS        *SECURITY_QUALITY_OF_SERVICE\n}\n\n// Values for the Attributes member of OBJECT_ATTRIBUTES.\nconst (\n\tOBJ_INHERIT                       = 0x00000002\n\tOBJ_PERMANENT                     = 0x00000010\n\tOBJ_EXCLUSIVE                     = 0x00000020\n\tOBJ_CASE_INSENSITIVE              = 0x00000040\n\tOBJ_OPENIF                        = 0x00000080\n\tOBJ_OPENLINK                      = 0x00000100\n\tOBJ_KERNEL_HANDLE                 = 0x00000200\n\tOBJ_FORCE_ACCESS_CHECK            = 0x00000400\n\tOBJ_IGNORE_IMPERSONATED_DEVICEMAP = 0x00000800\n\tOBJ_DONT_REPARSE                  = 0x00001000\n\tOBJ_VALID_ATTRIBUTES              = 0x00001FF2\n)\n\ntype IO_STATUS_BLOCK struct {\n\tStatus      NTStatus\n\tInformation uintptr\n}\n\ntype RTLP_CURDIR_REF struct {\n\tRefCount int32\n\tHandle   Handle\n}\n\ntype RTL_RELATIVE_NAME struct {\n\tRelativeName        NTUnicodeString\n\tContainingDirectory Handle\n\tCurDirRef           *RTLP_CURDIR_REF\n}\n\nconst (\n\t// CreateDisposition flags for NtCreateFile and NtCreateNamedPipeFile.\n\tFILE_SUPERSEDE           = 0x00000000\n\tFILE_OPEN                = 0x00000001\n\tFILE_CREATE              = 0x00000002\n\tFILE_OPEN_IF             = 0x00000003\n\tFILE_OVERWRITE           = 0x00000004\n\tFILE_OVERWRITE_IF        = 0x00000005\n\tFILE_MAXIMUM_DISPOSITION = 0x00000005\n\n\t// CreateOptions flags for NtCreateFile and NtCreateNamedPipeFile.\n\tFILE_DIRECTORY_FILE            = 0x00000001\n\tFILE_WRITE_THROUGH             = 0x00000002\n\tFILE_SEQUENTIAL_ONLY           = 0x00000004\n\tFILE_NO_INTERMEDIATE_BUFFERING = 0x00000008\n\tFILE_SYNCHRONOUS_IO_ALERT      = 0x00000010\n\tFILE_SYNCHRONOUS_IO_NONALERT   = 0x00000020\n\tFILE_NON_DIRECTORY_FILE        = 0x00000040\n\tFILE_CREATE_TREE_CONNECTION    = 0x00000080\n\tFILE_COMPLETE_IF_OPLOCKED      = 0x00000100\n\tFILE_NO_EA_KNOWLEDGE           = 0x00000200\n\tFILE_OPEN_REMOTE_INSTANCE      = 0x00000400\n\tFILE_RANDOM_ACCESS             = 0x00000800\n\tFILE_DELETE_ON_CLOSE           = 0x00001000\n\tFILE_OPEN_BY_FILE_ID           = 0x00002000\n\tFILE_OPEN_FOR_BACKUP_INTENT    = 0x00004000\n\tFILE_NO_COMPRESSION            = 0x00008000\n\tFILE_OPEN_REQUIRING_OPLOCK     = 0x00010000\n\tFILE_DISALLOW_EXCLUSIVE        = 0x00020000\n\tFILE_RESERVE_OPFILTER          = 0x00100000\n\tFILE_OPEN_REPARSE_POINT        = 0x00200000\n\tFILE_OPEN_NO_RECALL            = 0x00400000\n\tFILE_OPEN_FOR_FREE_SPACE_QUERY = 0x00800000\n\n\t// Parameter constants for NtCreateNamedPipeFile.\n\n\tFILE_PIPE_BYTE_STREAM_TYPE = 0x00000000\n\tFILE_PIPE_MESSAGE_TYPE     = 0x00000001\n\n\tFILE_PIPE_ACCEPT_REMOTE_CLIENTS = 0x00000000\n\tFILE_PIPE_REJECT_REMOTE_CLIENTS = 0x00000002\n\n\tFILE_PIPE_TYPE_VALID_MASK = 0x00000003\n\n\tFILE_PIPE_BYTE_STREAM_MODE = 0x00000000\n\tFILE_PIPE_MESSAGE_MODE     = 0x00000001\n\n\tFILE_PIPE_QUEUE_OPERATION    = 0x00000000\n\tFILE_PIPE_COMPLETE_OPERATION = 0x00000001\n\n\tFILE_PIPE_INBOUND     = 0x00000000\n\tFILE_PIPE_OUTBOUND    = 0x00000001\n\tFILE_PIPE_FULL_DUPLEX = 0x00000002\n\n\tFILE_PIPE_DISCONNECTED_STATE = 0x00000001\n\tFILE_PIPE_LISTENING_STATE    = 0x00000002\n\tFILE_PIPE_CONNECTED_STATE    = 0x00000003\n\tFILE_PIPE_CLOSING_STATE      = 0x00000004\n\n\tFILE_PIPE_CLIENT_END = 0x00000000\n\tFILE_PIPE_SERVER_END = 0x00000001\n)\n\nconst (\n\t// FileInformationClass for NtSetInformationFile\n\tFileBasicInformation                         = 4\n\tFileRenameInformation                        = 10\n\tFileDispositionInformation                   = 13\n\tFilePositionInformation                      = 14\n\tFileEndOfFileInformation                     = 20\n\tFileValidDataLengthInformation               = 39\n\tFileShortNameInformation                     = 40\n\tFileIoPriorityHintInformation                = 43\n\tFileReplaceCompletionInformation             = 61\n\tFileDispositionInformationEx                 = 64\n\tFileCaseSensitiveInformation                 = 71\n\tFileLinkInformation                          = 72\n\tFileCaseSensitiveInformationForceAccessCheck = 75\n\tFileKnownFolderInformation                   = 76\n\n\t// Flags for FILE_RENAME_INFORMATION\n\tFILE_RENAME_REPLACE_IF_EXISTS                    = 0x00000001\n\tFILE_RENAME_POSIX_SEMANTICS                      = 0x00000002\n\tFILE_RENAME_SUPPRESS_PIN_STATE_INHERITANCE       = 0x00000004\n\tFILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE = 0x00000008\n\tFILE_RENAME_NO_INCREASE_AVAILABLE_SPACE          = 0x00000010\n\tFILE_RENAME_NO_DECREASE_AVAILABLE_SPACE          = 0x00000020\n\tFILE_RENAME_PRESERVE_AVAILABLE_SPACE             = 0x00000030\n\tFILE_RENAME_IGNORE_READONLY_ATTRIBUTE            = 0x00000040\n\tFILE_RENAME_FORCE_RESIZE_TARGET_SR               = 0x00000080\n\tFILE_RENAME_FORCE_RESIZE_SOURCE_SR               = 0x00000100\n\tFILE_RENAME_FORCE_RESIZE_SR                      = 0x00000180\n\n\t// Flags for FILE_DISPOSITION_INFORMATION_EX\n\tFILE_DISPOSITION_DO_NOT_DELETE             = 0x00000000\n\tFILE_DISPOSITION_DELETE                    = 0x00000001\n\tFILE_DISPOSITION_POSIX_SEMANTICS           = 0x00000002\n\tFILE_DISPOSITION_FORCE_IMAGE_SECTION_CHECK = 0x00000004\n\tFILE_DISPOSITION_ON_CLOSE                  = 0x00000008\n\tFILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE = 0x00000010\n\n\t// Flags for FILE_CASE_SENSITIVE_INFORMATION\n\tFILE_CS_FLAG_CASE_SENSITIVE_DIR = 0x00000001\n\n\t// Flags for FILE_LINK_INFORMATION\n\tFILE_LINK_REPLACE_IF_EXISTS                    = 0x00000001\n\tFILE_LINK_POSIX_SEMANTICS                      = 0x00000002\n\tFILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE = 0x00000008\n\tFILE_LINK_NO_INCREASE_AVAILABLE_SPACE          = 0x00000010\n\tFILE_LINK_NO_DECREASE_AVAILABLE_SPACE          = 0x00000020\n\tFILE_LINK_PRESERVE_AVAILABLE_SPACE             = 0x00000030\n\tFILE_LINK_IGNORE_READONLY_ATTRIBUTE            = 0x00000040\n\tFILE_LINK_FORCE_RESIZE_TARGET_SR               = 0x00000080\n\tFILE_LINK_FORCE_RESIZE_SOURCE_SR               = 0x00000100\n\tFILE_LINK_FORCE_RESIZE_SR                      = 0x00000180\n)\n\n// ProcessInformationClasses for NtQueryInformationProcess and NtSetInformationProcess.\nconst (\n\tProcessBasicInformation = iota\n\tProcessQuotaLimits\n\tProcessIoCounters\n\tProcessVmCounters\n\tProcessTimes\n\tProcessBasePriority\n\tProcessRaisePriority\n\tProcessDebugPort\n\tProcessExceptionPort\n\tProcessAccessToken\n\tProcessLdtInformation\n\tProcessLdtSize\n\tProcessDefaultHardErrorMode\n\tProcessIoPortHandlers\n\tProcessPooledUsageAndLimits\n\tProcessWorkingSetWatch\n\tProcessUserModeIOPL\n\tProcessEnableAlignmentFaultFixup\n\tProcessPriorityClass\n\tProcessWx86Information\n\tProcessHandleCount\n\tProcessAffinityMask\n\tProcessPriorityBoost\n\tProcessDeviceMap\n\tProcessSessionInformation\n\tProcessForegroundInformation\n\tProcessWow64Information\n\tProcessImageFileName\n\tProcessLUIDDeviceMapsEnabled\n\tProcessBreakOnTermination\n\tProcessDebugObjectHandle\n\tProcessDebugFlags\n\tProcessHandleTracing\n\tProcessIoPriority\n\tProcessExecuteFlags\n\tProcessTlsInformation\n\tProcessCookie\n\tProcessImageInformation\n\tProcessCycleTime\n\tProcessPagePriority\n\tProcessInstrumentationCallback\n\tProcessThreadStackAllocation\n\tProcessWorkingSetWatchEx\n\tProcessImageFileNameWin32\n\tProcessImageFileMapping\n\tProcessAffinityUpdateMode\n\tProcessMemoryAllocationMode\n\tProcessGroupInformation\n\tProcessTokenVirtualizationEnabled\n\tProcessConsoleHostProcess\n\tProcessWindowInformation\n\tProcessHandleInformation\n\tProcessMitigationPolicy\n\tProcessDynamicFunctionTableInformation\n\tProcessHandleCheckingMode\n\tProcessKeepAliveCount\n\tProcessRevokeFileHandles\n\tProcessWorkingSetControl\n\tProcessHandleTable\n\tProcessCheckStackExtentsMode\n\tProcessCommandLineInformation\n\tProcessProtectionInformation\n\tProcessMemoryExhaustion\n\tProcessFaultInformation\n\tProcessTelemetryIdInformation\n\tProcessCommitReleaseInformation\n\tProcessDefaultCpuSetsInformation\n\tProcessAllowedCpuSetsInformation\n\tProcessSubsystemProcess\n\tProcessJobMemoryInformation\n\tProcessInPrivate\n\tProcessRaiseUMExceptionOnInvalidHandleClose\n\tProcessIumChallengeResponse\n\tProcessChildProcessInformation\n\tProcessHighGraphicsPriorityInformation\n\tProcessSubsystemInformation\n\tProcessEnergyValues\n\tProcessActivityThrottleState\n\tProcessActivityThrottlePolicy\n\tProcessWin32kSyscallFilterInformation\n\tProcessDisableSystemAllowedCpuSets\n\tProcessWakeInformation\n\tProcessEnergyTrackingState\n\tProcessManageWritesToExecutableMemory\n\tProcessCaptureTrustletLiveDump\n\tProcessTelemetryCoverage\n\tProcessEnclaveInformation\n\tProcessEnableReadWriteVmLogging\n\tProcessUptimeInformation\n\tProcessImageSection\n\tProcessDebugAuthInformation\n\tProcessSystemResourceManagement\n\tProcessSequenceNumber\n\tProcessLoaderDetour\n\tProcessSecurityDomainInformation\n\tProcessCombineSecurityDomainsInformation\n\tProcessEnableLogging\n\tProcessLeapSecondInformation\n\tProcessFiberShadowStackAllocation\n\tProcessFreeFiberShadowStackAllocation\n\tProcessAltSystemCallInformation\n\tProcessDynamicEHContinuationTargets\n\tProcessDynamicEnforcedCetCompatibleRanges\n)\n\ntype PROCESS_BASIC_INFORMATION struct {\n\tExitStatus                   NTStatus\n\tPebBaseAddress               *PEB\n\tAffinityMask                 uintptr\n\tBasePriority                 int32\n\tUniqueProcessId              uintptr\n\tInheritedFromUniqueProcessId uintptr\n}\n\ntype SYSTEM_PROCESS_INFORMATION struct {\n\tNextEntryOffset              uint32\n\tNumberOfThreads              uint32\n\tWorkingSetPrivateSize        int64\n\tHardFaultCount               uint32\n\tNumberOfThreadsHighWatermark uint32\n\tCycleTime                    uint64\n\tCreateTime                   int64\n\tUserTime                     int64\n\tKernelTime                   int64\n\tImageName                    NTUnicodeString\n\tBasePriority                 int32\n\tUniqueProcessID              uintptr\n\tInheritedFromUniqueProcessID uintptr\n\tHandleCount                  uint32\n\tSessionID                    uint32\n\tUniqueProcessKey             *uint32\n\tPeakVirtualSize              uintptr\n\tVirtualSize                  uintptr\n\tPageFaultCount               uint32\n\tPeakWorkingSetSize           uintptr\n\tWorkingSetSize               uintptr\n\tQuotaPeakPagedPoolUsage      uintptr\n\tQuotaPagedPoolUsage          uintptr\n\tQuotaPeakNonPagedPoolUsage   uintptr\n\tQuotaNonPagedPoolUsage       uintptr\n\tPagefileUsage                uintptr\n\tPeakPagefileUsage            uintptr\n\tPrivatePageCount             uintptr\n\tReadOperationCount           int64\n\tWriteOperationCount          int64\n\tOtherOperationCount          int64\n\tReadTransferCount            int64\n\tWriteTransferCount           int64\n\tOtherTransferCount           int64\n}\n\n// SystemInformationClasses for NtQuerySystemInformation and NtSetSystemInformation\nconst (\n\tSystemBasicInformation = iota\n\tSystemProcessorInformation\n\tSystemPerformanceInformation\n\tSystemTimeOfDayInformation\n\tSystemPathInformation\n\tSystemProcessInformation\n\tSystemCallCountInformation\n\tSystemDeviceInformation\n\tSystemProcessorPerformanceInformation\n\tSystemFlagsInformation\n\tSystemCallTimeInformation\n\tSystemModuleInformation\n\tSystemLocksInformation\n\tSystemStackTraceInformation\n\tSystemPagedPoolInformation\n\tSystemNonPagedPoolInformation\n\tSystemHandleInformation\n\tSystemObjectInformation\n\tSystemPageFileInformation\n\tSystemVdmInstemulInformation\n\tSystemVdmBopInformation\n\tSystemFileCacheInformation\n\tSystemPoolTagInformation\n\tSystemInterruptInformation\n\tSystemDpcBehaviorInformation\n\tSystemFullMemoryInformation\n\tSystemLoadGdiDriverInformation\n\tSystemUnloadGdiDriverInformation\n\tSystemTimeAdjustmentInformation\n\tSystemSummaryMemoryInformation\n\tSystemMirrorMemoryInformation\n\tSystemPerformanceTraceInformation\n\tsystemObsolete0\n\tSystemExceptionInformation\n\tSystemCrashDumpStateInformation\n\tSystemKernelDebuggerInformation\n\tSystemContextSwitchInformation\n\tSystemRegistryQuotaInformation\n\tSystemExtendServiceTableInformation\n\tSystemPrioritySeperation\n\tSystemVerifierAddDriverInformation\n\tSystemVerifierRemoveDriverInformation\n\tSystemProcessorIdleInformation\n\tSystemLegacyDriverInformation\n\tSystemCurrentTimeZoneInformation\n\tSystemLookasideInformation\n\tSystemTimeSlipNotification\n\tSystemSessionCreate\n\tSystemSessionDetach\n\tSystemSessionInformation\n\tSystemRangeStartInformation\n\tSystemVerifierInformation\n\tSystemVerifierThunkExtend\n\tSystemSessionProcessInformation\n\tSystemLoadGdiDriverInSystemSpace\n\tSystemNumaProcessorMap\n\tSystemPrefetcherInformation\n\tSystemExtendedProcessInformation\n\tSystemRecommendedSharedDataAlignment\n\tSystemComPlusPackage\n\tSystemNumaAvailableMemory\n\tSystemProcessorPowerInformation\n\tSystemEmulationBasicInformation\n\tSystemEmulationProcessorInformation\n\tSystemExtendedHandleInformation\n\tSystemLostDelayedWriteInformation\n\tSystemBigPoolInformation\n\tSystemSessionPoolTagInformation\n\tSystemSessionMappedViewInformation\n\tSystemHotpatchInformation\n\tSystemObjectSecurityMode\n\tSystemWatchdogTimerHandler\n\tSystemWatchdogTimerInformation\n\tSystemLogicalProcessorInformation\n\tSystemWow64SharedInformationObsolete\n\tSystemRegisterFirmwareTableInformationHandler\n\tSystemFirmwareTableInformation\n\tSystemModuleInformationEx\n\tSystemVerifierTriageInformation\n\tSystemSuperfetchInformation\n\tSystemMemoryListInformation\n\tSystemFileCacheInformationEx\n\tSystemThreadPriorityClientIdInformation\n\tSystemProcessorIdleCycleTimeInformation\n\tSystemVerifierCancellationInformation\n\tSystemProcessorPowerInformationEx\n\tSystemRefTraceInformation\n\tSystemSpecialPoolInformation\n\tSystemProcessIdInformation\n\tSystemErrorPortInformation\n\tSystemBootEnvironmentInformation\n\tSystemHypervisorInformation\n\tSystemVerifierInformationEx\n\tSystemTimeZoneInformation\n\tSystemImageFileExecutionOptionsInformation\n\tSystemCoverageInformation\n\tSystemPrefetchPatchInformation\n\tSystemVerifierFaultsInformation\n\tSystemSystemPartitionInformation\n\tSystemSystemDiskInformation\n\tSystemProcessorPerformanceDistribution\n\tSystemNumaProximityNodeInformation\n\tSystemDynamicTimeZoneInformation\n\tSystemCodeIntegrityInformation\n\tSystemProcessorMicrocodeUpdateInformation\n\tSystemProcessorBrandString\n\tSystemVirtualAddressInformation\n\tSystemLogicalProcessorAndGroupInformation\n\tSystemProcessorCycleTimeInformation\n\tSystemStoreInformation\n\tSystemRegistryAppendString\n\tSystemAitSamplingValue\n\tSystemVhdBootInformation\n\tSystemCpuQuotaInformation\n\tSystemNativeBasicInformation\n\tsystemSpare1\n\tSystemLowPriorityIoInformation\n\tSystemTpmBootEntropyInformation\n\tSystemVerifierCountersInformation\n\tSystemPagedPoolInformationEx\n\tSystemSystemPtesInformationEx\n\tSystemNodeDistanceInformation\n\tSystemAcpiAuditInformation\n\tSystemBasicPerformanceInformation\n\tSystemQueryPerformanceCounterInformation\n\tSystemSessionBigPoolInformation\n\tSystemBootGraphicsInformation\n\tSystemScrubPhysicalMemoryInformation\n\tSystemBadPageInformation\n\tSystemProcessorProfileControlArea\n\tSystemCombinePhysicalMemoryInformation\n\tSystemEntropyInterruptTimingCallback\n\tSystemConsoleInformation\n\tSystemPlatformBinaryInformation\n\tSystemThrottleNotificationInformation\n\tSystemHypervisorProcessorCountInformation\n\tSystemDeviceDataInformation\n\tSystemDeviceDataEnumerationInformation\n\tSystemMemoryTopologyInformation\n\tSystemMemoryChannelInformation\n\tSystemBootLogoInformation\n\tSystemProcessorPerformanceInformationEx\n\tsystemSpare0\n\tSystemSecureBootPolicyInformation\n\tSystemPageFileInformationEx\n\tSystemSecureBootInformation\n\tSystemEntropyInterruptTimingRawInformation\n\tSystemPortableWorkspaceEfiLauncherInformation\n\tSystemFullProcessInformation\n\tSystemKernelDebuggerInformationEx\n\tSystemBootMetadataInformation\n\tSystemSoftRebootInformation\n\tSystemElamCertificateInformation\n\tSystemOfflineDumpConfigInformation\n\tSystemProcessorFeaturesInformation\n\tSystemRegistryReconciliationInformation\n\tSystemEdidInformation\n\tSystemManufacturingInformation\n\tSystemEnergyEstimationConfigInformation\n\tSystemHypervisorDetailInformation\n\tSystemProcessorCycleStatsInformation\n\tSystemVmGenerationCountInformation\n\tSystemTrustedPlatformModuleInformation\n\tSystemKernelDebuggerFlags\n\tSystemCodeIntegrityPolicyInformation\n\tSystemIsolatedUserModeInformation\n\tSystemHardwareSecurityTestInterfaceResultsInformation\n\tSystemSingleModuleInformation\n\tSystemAllowedCpuSetsInformation\n\tSystemDmaProtectionInformation\n\tSystemInterruptCpuSetsInformation\n\tSystemSecureBootPolicyFullInformation\n\tSystemCodeIntegrityPolicyFullInformation\n\tSystemAffinitizedInterruptProcessorInformation\n\tSystemRootSiloInformation\n)\n\ntype RTL_PROCESS_MODULE_INFORMATION struct {\n\tSection          Handle\n\tMappedBase       uintptr\n\tImageBase        uintptr\n\tImageSize        uint32\n\tFlags            uint32\n\tLoadOrderIndex   uint16\n\tInitOrderIndex   uint16\n\tLoadCount        uint16\n\tOffsetToFileName uint16\n\tFullPathName     [256]byte\n}\n\ntype RTL_PROCESS_MODULES struct {\n\tNumberOfModules uint32\n\tModules         [1]RTL_PROCESS_MODULE_INFORMATION\n}\n\n// Constants for LocalAlloc flags.\nconst (\n\tLMEM_FIXED          = 0x0\n\tLMEM_MOVEABLE       = 0x2\n\tLMEM_NOCOMPACT      = 0x10\n\tLMEM_NODISCARD      = 0x20\n\tLMEM_ZEROINIT       = 0x40\n\tLMEM_MODIFY         = 0x80\n\tLMEM_DISCARDABLE    = 0xf00\n\tLMEM_VALID_FLAGS    = 0xf72\n\tLMEM_INVALID_HANDLE = 0x8000\n\tLHND                = LMEM_MOVEABLE | LMEM_ZEROINIT\n\tLPTR                = LMEM_FIXED | LMEM_ZEROINIT\n\tNONZEROLHND         = LMEM_MOVEABLE\n\tNONZEROLPTR         = LMEM_FIXED\n)\n\n// Constants for the CreateNamedPipe-family of functions.\nconst (\n\tPIPE_ACCESS_INBOUND  = 0x1\n\tPIPE_ACCESS_OUTBOUND = 0x2\n\tPIPE_ACCESS_DUPLEX   = 0x3\n\n\tPIPE_CLIENT_END = 0x0\n\tPIPE_SERVER_END = 0x1\n\n\tPIPE_WAIT                  = 0x0\n\tPIPE_NOWAIT                = 0x1\n\tPIPE_READMODE_BYTE         = 0x0\n\tPIPE_READMODE_MESSAGE      = 0x2\n\tPIPE_TYPE_BYTE             = 0x0\n\tPIPE_TYPE_MESSAGE          = 0x4\n\tPIPE_ACCEPT_REMOTE_CLIENTS = 0x0\n\tPIPE_REJECT_REMOTE_CLIENTS = 0x8\n\n\tPIPE_UNLIMITED_INSTANCES = 255\n)\n\n// Constants for security attributes when opening named pipes.\nconst (\n\tSECURITY_ANONYMOUS      = SecurityAnonymous << 16\n\tSECURITY_IDENTIFICATION = SecurityIdentification << 16\n\tSECURITY_IMPERSONATION  = SecurityImpersonation << 16\n\tSECURITY_DELEGATION     = SecurityDelegation << 16\n\n\tSECURITY_CONTEXT_TRACKING = 0x40000\n\tSECURITY_EFFECTIVE_ONLY   = 0x80000\n\n\tSECURITY_SQOS_PRESENT     = 0x100000\n\tSECURITY_VALID_SQOS_FLAGS = 0x1f0000\n)\n\n// ResourceID represents a 16-bit resource identifier, traditionally created with the MAKEINTRESOURCE macro.\ntype ResourceID uint16\n\n// ResourceIDOrString must be either a ResourceID, to specify a resource or resource type by ID,\n// or a string, to specify a resource or resource type by name.\ntype ResourceIDOrString interface{}\n\n// Predefined resource names and types.\nvar (\n\t// Predefined names.\n\tCREATEPROCESS_MANIFEST_RESOURCE_ID                 ResourceID = 1\n\tISOLATIONAWARE_MANIFEST_RESOURCE_ID                ResourceID = 2\n\tISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID ResourceID = 3\n\tISOLATIONPOLICY_MANIFEST_RESOURCE_ID               ResourceID = 4\n\tISOLATIONPOLICY_BROWSER_MANIFEST_RESOURCE_ID       ResourceID = 5\n\tMINIMUM_RESERVED_MANIFEST_RESOURCE_ID              ResourceID = 1  // inclusive\n\tMAXIMUM_RESERVED_MANIFEST_RESOURCE_ID              ResourceID = 16 // inclusive\n\n\t// Predefined types.\n\tRT_CURSOR       ResourceID = 1\n\tRT_BITMAP       ResourceID = 2\n\tRT_ICON         ResourceID = 3\n\tRT_MENU         ResourceID = 4\n\tRT_DIALOG       ResourceID = 5\n\tRT_STRING       ResourceID = 6\n\tRT_FONTDIR      ResourceID = 7\n\tRT_FONT         ResourceID = 8\n\tRT_ACCELERATOR  ResourceID = 9\n\tRT_RCDATA       ResourceID = 10\n\tRT_MESSAGETABLE ResourceID = 11\n\tRT_GROUP_CURSOR ResourceID = 12\n\tRT_GROUP_ICON   ResourceID = 14\n\tRT_VERSION      ResourceID = 16\n\tRT_DLGINCLUDE   ResourceID = 17\n\tRT_PLUGPLAY     ResourceID = 19\n\tRT_VXD          ResourceID = 20\n\tRT_ANICURSOR    ResourceID = 21\n\tRT_ANIICON      ResourceID = 22\n\tRT_HTML         ResourceID = 23\n\tRT_MANIFEST     ResourceID = 24\n)\n\ntype VS_FIXEDFILEINFO struct {\n\tSignature        uint32\n\tStrucVersion     uint32\n\tFileVersionMS    uint32\n\tFileVersionLS    uint32\n\tProductVersionMS uint32\n\tProductVersionLS uint32\n\tFileFlagsMask    uint32\n\tFileFlags        uint32\n\tFileOS           uint32\n\tFileType         uint32\n\tFileSubtype      uint32\n\tFileDateMS       uint32\n\tFileDateLS       uint32\n}\n\ntype COAUTHIDENTITY struct {\n\tUser           *uint16\n\tUserLength     uint32\n\tDomain         *uint16\n\tDomainLength   uint32\n\tPassword       *uint16\n\tPasswordLength uint32\n\tFlags          uint32\n}\n\ntype COAUTHINFO struct {\n\tAuthnSvc           uint32\n\tAuthzSvc           uint32\n\tServerPrincName    *uint16\n\tAuthnLevel         uint32\n\tImpersonationLevel uint32\n\tAuthIdentityData   *COAUTHIDENTITY\n\tCapabilities       uint32\n}\n\ntype COSERVERINFO struct {\n\tReserved1 uint32\n\tAame      *uint16\n\tAuthInfo  *COAUTHINFO\n\tReserved2 uint32\n}\n\ntype BIND_OPTS3 struct {\n\tCbStruct          uint32\n\tFlags             uint32\n\tMode              uint32\n\tTickCountDeadline uint32\n\tTrackFlags        uint32\n\tClassContext      uint32\n\tLocale            uint32\n\tServerInfo        *COSERVERINFO\n\tHwnd              HWND\n}\n\nconst (\n\tCLSCTX_INPROC_SERVER          = 0x1\n\tCLSCTX_INPROC_HANDLER         = 0x2\n\tCLSCTX_LOCAL_SERVER           = 0x4\n\tCLSCTX_INPROC_SERVER16        = 0x8\n\tCLSCTX_REMOTE_SERVER          = 0x10\n\tCLSCTX_INPROC_HANDLER16       = 0x20\n\tCLSCTX_RESERVED1              = 0x40\n\tCLSCTX_RESERVED2              = 0x80\n\tCLSCTX_RESERVED3              = 0x100\n\tCLSCTX_RESERVED4              = 0x200\n\tCLSCTX_NO_CODE_DOWNLOAD       = 0x400\n\tCLSCTX_RESERVED5              = 0x800\n\tCLSCTX_NO_CUSTOM_MARSHAL      = 0x1000\n\tCLSCTX_ENABLE_CODE_DOWNLOAD   = 0x2000\n\tCLSCTX_NO_FAILURE_LOG         = 0x4000\n\tCLSCTX_DISABLE_AAA            = 0x8000\n\tCLSCTX_ENABLE_AAA             = 0x10000\n\tCLSCTX_FROM_DEFAULT_CONTEXT   = 0x20000\n\tCLSCTX_ACTIVATE_32_BIT_SERVER = 0x40000\n\tCLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000\n\tCLSCTX_ENABLE_CLOAKING        = 0x100000\n\tCLSCTX_APPCONTAINER           = 0x400000\n\tCLSCTX_ACTIVATE_AAA_AS_IU     = 0x800000\n\tCLSCTX_PS_DLL                 = 0x80000000\n\n\tCOINIT_MULTITHREADED     = 0x0\n\tCOINIT_APARTMENTTHREADED = 0x2\n\tCOINIT_DISABLE_OLE1DDE   = 0x4\n\tCOINIT_SPEED_OVER_MEMORY = 0x8\n)\n\n// Flag for QueryFullProcessImageName.\nconst PROCESS_NAME_NATIVE = 1\n\ntype ModuleInfo struct {\n\tBaseOfDll   uintptr\n\tSizeOfImage uint32\n\tEntryPoint  uintptr\n}\n\nconst ALL_PROCESSOR_GROUPS = 0xFFFF\n\ntype Rect struct {\n\tLeft   int32\n\tTop    int32\n\tRight  int32\n\tBottom int32\n}\n\ntype GUIThreadInfo struct {\n\tSize        uint32\n\tFlags       uint32\n\tActive      HWND\n\tFocus       HWND\n\tCapture     HWND\n\tMenuOwner   HWND\n\tMoveSize    HWND\n\tCaretHandle HWND\n\tCaretRect   Rect\n}\n\nconst (\n\tDWMWA_NCRENDERING_ENABLED            = 1\n\tDWMWA_NCRENDERING_POLICY             = 2\n\tDWMWA_TRANSITIONS_FORCEDISABLED      = 3\n\tDWMWA_ALLOW_NCPAINT                  = 4\n\tDWMWA_CAPTION_BUTTON_BOUNDS          = 5\n\tDWMWA_NONCLIENT_RTL_LAYOUT           = 6\n\tDWMWA_FORCE_ICONIC_REPRESENTATION    = 7\n\tDWMWA_FLIP3D_POLICY                  = 8\n\tDWMWA_EXTENDED_FRAME_BOUNDS          = 9\n\tDWMWA_HAS_ICONIC_BITMAP              = 10\n\tDWMWA_DISALLOW_PEEK                  = 11\n\tDWMWA_EXCLUDED_FROM_PEEK             = 12\n\tDWMWA_CLOAK                          = 13\n\tDWMWA_CLOAKED                        = 14\n\tDWMWA_FREEZE_REPRESENTATION          = 15\n\tDWMWA_PASSIVE_UPDATE_MODE            = 16\n\tDWMWA_USE_HOSTBACKDROPBRUSH          = 17\n\tDWMWA_USE_IMMERSIVE_DARK_MODE        = 20\n\tDWMWA_WINDOW_CORNER_PREFERENCE       = 33\n\tDWMWA_BORDER_COLOR                   = 34\n\tDWMWA_CAPTION_COLOR                  = 35\n\tDWMWA_TEXT_COLOR                     = 36\n\tDWMWA_VISIBLE_FRAME_BORDER_THICKNESS = 37\n)\n\ntype WSAQUERYSET struct {\n\tSize                uint32\n\tServiceInstanceName *uint16\n\tServiceClassId      *GUID\n\tVersion             *WSAVersion\n\tComment             *uint16\n\tNameSpace           uint32\n\tNSProviderId        *GUID\n\tContext             *uint16\n\tNumberOfProtocols   uint32\n\tAfpProtocols        *AFProtocols\n\tQueryString         *uint16\n\tNumberOfCsAddrs     uint32\n\tSaBuffer            *CSAddrInfo\n\tOutputFlags         uint32\n\tBlob                *BLOB\n}\n\ntype WSAVersion struct {\n\tVersion                 uint32\n\tEnumerationOfComparison int32\n}\n\ntype AFProtocols struct {\n\tAddressFamily int32\n\tProtocol      int32\n}\n\ntype CSAddrInfo struct {\n\tLocalAddr  SocketAddress\n\tRemoteAddr SocketAddress\n\tSocketType int32\n\tProtocol   int32\n}\n\ntype BLOB struct {\n\tSize     uint32\n\tBlobData *byte\n}\n\ntype ComStat struct {\n\tFlags    uint32\n\tCBInQue  uint32\n\tCBOutQue uint32\n}\n\ntype DCB struct {\n\tDCBlength  uint32\n\tBaudRate   uint32\n\tFlags      uint32\n\twReserved  uint16\n\tXonLim     uint16\n\tXoffLim    uint16\n\tByteSize   uint8\n\tParity     uint8\n\tStopBits   uint8\n\tXonChar    byte\n\tXoffChar   byte\n\tErrorChar  byte\n\tEofChar    byte\n\tEvtChar    byte\n\twReserved1 uint16\n}\n\n// Keyboard Layout Flags.\n// See https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadkeyboardlayoutw\nconst (\n\tKLF_ACTIVATE      = 0x00000001\n\tKLF_SUBSTITUTE_OK = 0x00000002\n\tKLF_REORDER       = 0x00000008\n\tKLF_REPLACELANG   = 0x00000010\n\tKLF_NOTELLSHELL   = 0x00000080\n\tKLF_SETFORPROCESS = 0x00000100\n)\n\n// Virtual Key codes\n// https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes\nconst (\n\tVK_LBUTTON             = 0x01\n\tVK_RBUTTON             = 0x02\n\tVK_CANCEL              = 0x03\n\tVK_MBUTTON             = 0x04\n\tVK_XBUTTON1            = 0x05\n\tVK_XBUTTON2            = 0x06\n\tVK_BACK                = 0x08\n\tVK_TAB                 = 0x09\n\tVK_CLEAR               = 0x0C\n\tVK_RETURN              = 0x0D\n\tVK_SHIFT               = 0x10\n\tVK_CONTROL             = 0x11\n\tVK_MENU                = 0x12\n\tVK_PAUSE               = 0x13\n\tVK_CAPITAL             = 0x14\n\tVK_KANA                = 0x15\n\tVK_HANGEUL             = 0x15\n\tVK_HANGUL              = 0x15\n\tVK_IME_ON              = 0x16\n\tVK_JUNJA               = 0x17\n\tVK_FINAL               = 0x18\n\tVK_HANJA               = 0x19\n\tVK_KANJI               = 0x19\n\tVK_IME_OFF             = 0x1A\n\tVK_ESCAPE              = 0x1B\n\tVK_CONVERT             = 0x1C\n\tVK_NONCONVERT          = 0x1D\n\tVK_ACCEPT              = 0x1E\n\tVK_MODECHANGE          = 0x1F\n\tVK_SPACE               = 0x20\n\tVK_PRIOR               = 0x21\n\tVK_NEXT                = 0x22\n\tVK_END                 = 0x23\n\tVK_HOME                = 0x24\n\tVK_LEFT                = 0x25\n\tVK_UP                  = 0x26\n\tVK_RIGHT               = 0x27\n\tVK_DOWN                = 0x28\n\tVK_SELECT              = 0x29\n\tVK_PRINT               = 0x2A\n\tVK_EXECUTE             = 0x2B\n\tVK_SNAPSHOT            = 0x2C\n\tVK_INSERT              = 0x2D\n\tVK_DELETE              = 0x2E\n\tVK_HELP                = 0x2F\n\tVK_LWIN                = 0x5B\n\tVK_RWIN                = 0x5C\n\tVK_APPS                = 0x5D\n\tVK_SLEEP               = 0x5F\n\tVK_NUMPAD0             = 0x60\n\tVK_NUMPAD1             = 0x61\n\tVK_NUMPAD2             = 0x62\n\tVK_NUMPAD3             = 0x63\n\tVK_NUMPAD4             = 0x64\n\tVK_NUMPAD5             = 0x65\n\tVK_NUMPAD6             = 0x66\n\tVK_NUMPAD7             = 0x67\n\tVK_NUMPAD8             = 0x68\n\tVK_NUMPAD9             = 0x69\n\tVK_MULTIPLY            = 0x6A\n\tVK_ADD                 = 0x6B\n\tVK_SEPARATOR           = 0x6C\n\tVK_SUBTRACT            = 0x6D\n\tVK_DECIMAL             = 0x6E\n\tVK_DIVIDE              = 0x6F\n\tVK_F1                  = 0x70\n\tVK_F2                  = 0x71\n\tVK_F3                  = 0x72\n\tVK_F4                  = 0x73\n\tVK_F5                  = 0x74\n\tVK_F6                  = 0x75\n\tVK_F7                  = 0x76\n\tVK_F8                  = 0x77\n\tVK_F9                  = 0x78\n\tVK_F10                 = 0x79\n\tVK_F11                 = 0x7A\n\tVK_F12                 = 0x7B\n\tVK_F13                 = 0x7C\n\tVK_F14                 = 0x7D\n\tVK_F15                 = 0x7E\n\tVK_F16                 = 0x7F\n\tVK_F17                 = 0x80\n\tVK_F18                 = 0x81\n\tVK_F19                 = 0x82\n\tVK_F20                 = 0x83\n\tVK_F21                 = 0x84\n\tVK_F22                 = 0x85\n\tVK_F23                 = 0x86\n\tVK_F24                 = 0x87\n\tVK_NUMLOCK             = 0x90\n\tVK_SCROLL              = 0x91\n\tVK_OEM_NEC_EQUAL       = 0x92\n\tVK_OEM_FJ_JISHO        = 0x92\n\tVK_OEM_FJ_MASSHOU      = 0x93\n\tVK_OEM_FJ_TOUROKU      = 0x94\n\tVK_OEM_FJ_LOYA         = 0x95\n\tVK_OEM_FJ_ROYA         = 0x96\n\tVK_LSHIFT              = 0xA0\n\tVK_RSHIFT              = 0xA1\n\tVK_LCONTROL            = 0xA2\n\tVK_RCONTROL            = 0xA3\n\tVK_LMENU               = 0xA4\n\tVK_RMENU               = 0xA5\n\tVK_BROWSER_BACK        = 0xA6\n\tVK_BROWSER_FORWARD     = 0xA7\n\tVK_BROWSER_REFRESH     = 0xA8\n\tVK_BROWSER_STOP        = 0xA9\n\tVK_BROWSER_SEARCH      = 0xAA\n\tVK_BROWSER_FAVORITES   = 0xAB\n\tVK_BROWSER_HOME        = 0xAC\n\tVK_VOLUME_MUTE         = 0xAD\n\tVK_VOLUME_DOWN         = 0xAE\n\tVK_VOLUME_UP           = 0xAF\n\tVK_MEDIA_NEXT_TRACK    = 0xB0\n\tVK_MEDIA_PREV_TRACK    = 0xB1\n\tVK_MEDIA_STOP          = 0xB2\n\tVK_MEDIA_PLAY_PAUSE    = 0xB3\n\tVK_LAUNCH_MAIL         = 0xB4\n\tVK_LAUNCH_MEDIA_SELECT = 0xB5\n\tVK_LAUNCH_APP1         = 0xB6\n\tVK_LAUNCH_APP2         = 0xB7\n\tVK_OEM_1               = 0xBA\n\tVK_OEM_PLUS            = 0xBB\n\tVK_OEM_COMMA           = 0xBC\n\tVK_OEM_MINUS           = 0xBD\n\tVK_OEM_PERIOD          = 0xBE\n\tVK_OEM_2               = 0xBF\n\tVK_OEM_3               = 0xC0\n\tVK_OEM_4               = 0xDB\n\tVK_OEM_5               = 0xDC\n\tVK_OEM_6               = 0xDD\n\tVK_OEM_7               = 0xDE\n\tVK_OEM_8               = 0xDF\n\tVK_OEM_AX              = 0xE1\n\tVK_OEM_102             = 0xE2\n\tVK_ICO_HELP            = 0xE3\n\tVK_ICO_00              = 0xE4\n\tVK_PROCESSKEY          = 0xE5\n\tVK_ICO_CLEAR           = 0xE6\n\tVK_OEM_RESET           = 0xE9\n\tVK_OEM_JUMP            = 0xEA\n\tVK_OEM_PA1             = 0xEB\n\tVK_OEM_PA2             = 0xEC\n\tVK_OEM_PA3             = 0xED\n\tVK_OEM_WSCTRL          = 0xEE\n\tVK_OEM_CUSEL           = 0xEF\n\tVK_OEM_ATTN            = 0xF0\n\tVK_OEM_FINISH          = 0xF1\n\tVK_OEM_COPY            = 0xF2\n\tVK_OEM_AUTO            = 0xF3\n\tVK_OEM_ENLW            = 0xF4\n\tVK_OEM_BACKTAB         = 0xF5\n\tVK_ATTN                = 0xF6\n\tVK_CRSEL               = 0xF7\n\tVK_EXSEL               = 0xF8\n\tVK_EREOF               = 0xF9\n\tVK_PLAY                = 0xFA\n\tVK_ZOOM                = 0xFB\n\tVK_NONAME              = 0xFC\n\tVK_PA1                 = 0xFD\n\tVK_OEM_CLEAR           = 0xFE\n)\n\n// Mouse button constants.\n// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str\nconst (\n\tFROM_LEFT_1ST_BUTTON_PRESSED = 0x0001\n\tRIGHTMOST_BUTTON_PRESSED     = 0x0002\n\tFROM_LEFT_2ND_BUTTON_PRESSED = 0x0004\n\tFROM_LEFT_3RD_BUTTON_PRESSED = 0x0008\n\tFROM_LEFT_4TH_BUTTON_PRESSED = 0x0010\n)\n\n// Control key state constaints.\n// https://docs.microsoft.com/en-us/windows/console/key-event-record-str\n// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str\nconst (\n\tCAPSLOCK_ON        = 0x0080\n\tENHANCED_KEY       = 0x0100\n\tLEFT_ALT_PRESSED   = 0x0002\n\tLEFT_CTRL_PRESSED  = 0x0008\n\tNUMLOCK_ON         = 0x0020\n\tRIGHT_ALT_PRESSED  = 0x0001\n\tRIGHT_CTRL_PRESSED = 0x0004\n\tSCROLLLOCK_ON      = 0x0040\n\tSHIFT_PRESSED      = 0x0010\n)\n\n// Mouse event record event flags.\n// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str\nconst (\n\tMOUSE_MOVED    = 0x0001\n\tDOUBLE_CLICK   = 0x0002\n\tMOUSE_WHEELED  = 0x0004\n\tMOUSE_HWHEELED = 0x0008\n)\n\n// Input Record Event Types\n// https://learn.microsoft.com/en-us/windows/console/input-record-str\nconst (\n\tFOCUS_EVENT              = 0x0010\n\tKEY_EVENT                = 0x0001\n\tMENU_EVENT               = 0x0008\n\tMOUSE_EVENT              = 0x0002\n\tWINDOW_BUFFER_SIZE_EVENT = 0x0004\n)\n\n// The processor features to be tested for IsProcessorFeaturePresent, see\n// https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-isprocessorfeaturepresent\nconst (\n\tPF_ARM_64BIT_LOADSTORE_ATOMIC              = 25\n\tPF_ARM_DIVIDE_INSTRUCTION_AVAILABLE        = 24\n\tPF_ARM_EXTERNAL_CACHE_AVAILABLE            = 26\n\tPF_ARM_FMAC_INSTRUCTIONS_AVAILABLE         = 27\n\tPF_ARM_VFP_32_REGISTERS_AVAILABLE          = 18\n\tPF_3DNOW_INSTRUCTIONS_AVAILABLE            = 7\n\tPF_CHANNELS_ENABLED                        = 16\n\tPF_COMPARE_EXCHANGE_DOUBLE                 = 2\n\tPF_COMPARE_EXCHANGE128                     = 14\n\tPF_COMPARE64_EXCHANGE128                   = 15\n\tPF_FASTFAIL_AVAILABLE                      = 23\n\tPF_FLOATING_POINT_EMULATED                 = 1\n\tPF_FLOATING_POINT_PRECISION_ERRATA         = 0\n\tPF_MMX_INSTRUCTIONS_AVAILABLE              = 3\n\tPF_NX_ENABLED                              = 12\n\tPF_PAE_ENABLED                             = 9\n\tPF_RDTSC_INSTRUCTION_AVAILABLE             = 8\n\tPF_RDWRFSGSBASE_AVAILABLE                  = 22\n\tPF_SECOND_LEVEL_ADDRESS_TRANSLATION        = 20\n\tPF_SSE3_INSTRUCTIONS_AVAILABLE             = 13\n\tPF_SSSE3_INSTRUCTIONS_AVAILABLE            = 36\n\tPF_SSE4_1_INSTRUCTIONS_AVAILABLE           = 37\n\tPF_SSE4_2_INSTRUCTIONS_AVAILABLE           = 38\n\tPF_AVX_INSTRUCTIONS_AVAILABLE              = 39\n\tPF_AVX2_INSTRUCTIONS_AVAILABLE             = 40\n\tPF_AVX512F_INSTRUCTIONS_AVAILABLE          = 41\n\tPF_VIRT_FIRMWARE_ENABLED                   = 21\n\tPF_XMMI_INSTRUCTIONS_AVAILABLE             = 6\n\tPF_XMMI64_INSTRUCTIONS_AVAILABLE           = 10\n\tPF_XSAVE_ENABLED                           = 17\n\tPF_ARM_V8_INSTRUCTIONS_AVAILABLE           = 29\n\tPF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE    = 30\n\tPF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE     = 31\n\tPF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE   = 34\n\tPF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE       = 43\n\tPF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE    = 44\n\tPF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE    = 45\n\tPF_ARM_SVE_INSTRUCTIONS_AVAILABLE          = 46\n\tPF_ARM_SVE2_INSTRUCTIONS_AVAILABLE         = 47\n\tPF_ARM_SVE2_1_INSTRUCTIONS_AVAILABLE       = 48\n\tPF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE      = 49\n\tPF_ARM_SVE_PMULL128_INSTRUCTIONS_AVAILABLE = 50\n\tPF_ARM_SVE_BITPERM_INSTRUCTIONS_AVAILABLE  = 51\n\tPF_ARM_SVE_BF16_INSTRUCTIONS_AVAILABLE     = 52\n\tPF_ARM_SVE_EBF16_INSTRUCTIONS_AVAILABLE    = 53\n\tPF_ARM_SVE_B16B16_INSTRUCTIONS_AVAILABLE   = 54\n\tPF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE     = 55\n\tPF_ARM_SVE_SM4_INSTRUCTIONS_AVAILABLE      = 56\n\tPF_ARM_SVE_I8MM_INSTRUCTIONS_AVAILABLE     = 57\n\tPF_ARM_SVE_F32MM_INSTRUCTIONS_AVAILABLE    = 58\n\tPF_ARM_SVE_F64MM_INSTRUCTIONS_AVAILABLE    = 59\n\tPF_BMI2_INSTRUCTIONS_AVAILABLE             = 60\n\tPF_MOVDIR64B_INSTRUCTION_AVAILABLE         = 61\n\tPF_ARM_LSE2_AVAILABLE                      = 62\n\tPF_ARM_SHA3_INSTRUCTIONS_AVAILABLE         = 64\n\tPF_ARM_SHA512_INSTRUCTIONS_AVAILABLE       = 65\n\tPF_ARM_V82_I8MM_INSTRUCTIONS_AVAILABLE     = 66\n\tPF_ARM_V82_FP16_INSTRUCTIONS_AVAILABLE     = 67\n\tPF_ARM_V86_BF16_INSTRUCTIONS_AVAILABLE     = 68\n\tPF_ARM_V86_EBF16_INSTRUCTIONS_AVAILABLE    = 69\n\tPF_ARM_SME_INSTRUCTIONS_AVAILABLE          = 70\n\tPF_ARM_SME2_INSTRUCTIONS_AVAILABLE         = 71\n\tPF_ARM_SME2_1_INSTRUCTIONS_AVAILABLE       = 72\n\tPF_ARM_SME2_2_INSTRUCTIONS_AVAILABLE       = 73\n\tPF_ARM_SME_AES_INSTRUCTIONS_AVAILABLE      = 74\n\tPF_ARM_SME_SBITPERM_INSTRUCTIONS_AVAILABLE = 75\n\tPF_ARM_SME_SF8MM4_INSTRUCTIONS_AVAILABLE   = 76\n\tPF_ARM_SME_SF8MM8_INSTRUCTIONS_AVAILABLE   = 77\n\tPF_ARM_SME_SF8DP2_INSTRUCTIONS_AVAILABLE   = 78\n\tPF_ARM_SME_SF8DP4_INSTRUCTIONS_AVAILABLE   = 79\n\tPF_ARM_SME_SF8FMA_INSTRUCTIONS_AVAILABLE   = 80\n\tPF_ARM_SME_F8F32_INSTRUCTIONS_AVAILABLE    = 81\n\tPF_ARM_SME_F8F16_INSTRUCTIONS_AVAILABLE    = 82\n\tPF_ARM_SME_F16F16_INSTRUCTIONS_AVAILABLE   = 83\n\tPF_ARM_SME_B16B16_INSTRUCTIONS_AVAILABLE   = 84\n\tPF_ARM_SME_F64F64_INSTRUCTIONS_AVAILABLE   = 85\n\tPF_ARM_SME_I16I64_INSTRUCTIONS_AVAILABLE   = 86\n\tPF_ARM_SME_LUTv2_INSTRUCTIONS_AVAILABLE    = 87\n\tPF_ARM_SME_FA64_INSTRUCTIONS_AVAILABLE     = 88\n\tPF_UMONITOR_INSTRUCTION_AVAILABLE          = 89\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/types_windows_386.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 windows\n\ntype WSAData struct {\n\tVersion      uint16\n\tHighVersion  uint16\n\tDescription  [WSADESCRIPTION_LEN + 1]byte\n\tSystemStatus [WSASYS_STATUS_LEN + 1]byte\n\tMaxSockets   uint16\n\tMaxUdpDg     uint16\n\tVendorInfo   *byte\n}\n\ntype Servent struct {\n\tName    *byte\n\tAliases **byte\n\tPort    uint16\n\tProto   *byte\n}\n\ntype JOBOBJECT_BASIC_LIMIT_INFORMATION struct {\n\tPerProcessUserTimeLimit int64\n\tPerJobUserTimeLimit     int64\n\tLimitFlags              uint32\n\tMinimumWorkingSetSize   uintptr\n\tMaximumWorkingSetSize   uintptr\n\tActiveProcessLimit      uint32\n\tAffinity                uintptr\n\tPriorityClass           uint32\n\tSchedulingClass         uint32\n\t_                       uint32 // pad to 8 byte boundary\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/types_windows_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\npackage windows\n\ntype WSAData struct {\n\tVersion      uint16\n\tHighVersion  uint16\n\tMaxSockets   uint16\n\tMaxUdpDg     uint16\n\tVendorInfo   *byte\n\tDescription  [WSADESCRIPTION_LEN + 1]byte\n\tSystemStatus [WSASYS_STATUS_LEN + 1]byte\n}\n\ntype Servent struct {\n\tName    *byte\n\tAliases **byte\n\tProto   *byte\n\tPort    uint16\n}\n\ntype JOBOBJECT_BASIC_LIMIT_INFORMATION struct {\n\tPerProcessUserTimeLimit int64\n\tPerJobUserTimeLimit     int64\n\tLimitFlags              uint32\n\tMinimumWorkingSetSize   uintptr\n\tMaximumWorkingSetSize   uintptr\n\tActiveProcessLimit      uint32\n\tAffinity                uintptr\n\tPriorityClass           uint32\n\tSchedulingClass         uint32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/types_windows_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 windows\n\ntype WSAData struct {\n\tVersion      uint16\n\tHighVersion  uint16\n\tDescription  [WSADESCRIPTION_LEN + 1]byte\n\tSystemStatus [WSASYS_STATUS_LEN + 1]byte\n\tMaxSockets   uint16\n\tMaxUdpDg     uint16\n\tVendorInfo   *byte\n}\n\ntype Servent struct {\n\tName    *byte\n\tAliases **byte\n\tPort    uint16\n\tProto   *byte\n}\n\ntype JOBOBJECT_BASIC_LIMIT_INFORMATION struct {\n\tPerProcessUserTimeLimit int64\n\tPerJobUserTimeLimit     int64\n\tLimitFlags              uint32\n\tMinimumWorkingSetSize   uintptr\n\tMaximumWorkingSetSize   uintptr\n\tActiveProcessLimit      uint32\n\tAffinity                uintptr\n\tPriorityClass           uint32\n\tSchedulingClass         uint32\n\t_                       uint32 // pad to 8 byte boundary\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/types_windows_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\npackage windows\n\ntype WSAData struct {\n\tVersion      uint16\n\tHighVersion  uint16\n\tMaxSockets   uint16\n\tMaxUdpDg     uint16\n\tVendorInfo   *byte\n\tDescription  [WSADESCRIPTION_LEN + 1]byte\n\tSystemStatus [WSASYS_STATUS_LEN + 1]byte\n}\n\ntype Servent struct {\n\tName    *byte\n\tAliases **byte\n\tProto   *byte\n\tPort    uint16\n}\n\ntype JOBOBJECT_BASIC_LIMIT_INFORMATION struct {\n\tPerProcessUserTimeLimit int64\n\tPerJobUserTimeLimit     int64\n\tLimitFlags              uint32\n\tMinimumWorkingSetSize   uintptr\n\tMaximumWorkingSetSize   uintptr\n\tActiveProcessLimit      uint32\n\tAffinity                uintptr\n\tPriorityClass           uint32\n\tSchedulingClass         uint32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/zerrors_windows.go",
    "content": "// Code generated by 'mkerrors.bash'; DO NOT EDIT.\n\npackage windows\n\nimport \"syscall\"\n\nconst (\n\tFACILITY_NULL                                                                           = 0\n\tFACILITY_RPC                                                                            = 1\n\tFACILITY_DISPATCH                                                                       = 2\n\tFACILITY_STORAGE                                                                        = 3\n\tFACILITY_ITF                                                                            = 4\n\tFACILITY_WIN32                                                                          = 7\n\tFACILITY_WINDOWS                                                                        = 8\n\tFACILITY_SSPI                                                                           = 9\n\tFACILITY_SECURITY                                                                       = 9\n\tFACILITY_CONTROL                                                                        = 10\n\tFACILITY_CERT                                                                           = 11\n\tFACILITY_INTERNET                                                                       = 12\n\tFACILITY_MEDIASERVER                                                                    = 13\n\tFACILITY_MSMQ                                                                           = 14\n\tFACILITY_SETUPAPI                                                                       = 15\n\tFACILITY_SCARD                                                                          = 16\n\tFACILITY_COMPLUS                                                                        = 17\n\tFACILITY_AAF                                                                            = 18\n\tFACILITY_URT                                                                            = 19\n\tFACILITY_ACS                                                                            = 20\n\tFACILITY_DPLAY                                                                          = 21\n\tFACILITY_UMI                                                                            = 22\n\tFACILITY_SXS                                                                            = 23\n\tFACILITY_WINDOWS_CE                                                                     = 24\n\tFACILITY_HTTP                                                                           = 25\n\tFACILITY_USERMODE_COMMONLOG                                                             = 26\n\tFACILITY_WER                                                                            = 27\n\tFACILITY_USERMODE_FILTER_MANAGER                                                        = 31\n\tFACILITY_BACKGROUNDCOPY                                                                 = 32\n\tFACILITY_CONFIGURATION                                                                  = 33\n\tFACILITY_WIA                                                                            = 33\n\tFACILITY_STATE_MANAGEMENT                                                               = 34\n\tFACILITY_METADIRECTORY                                                                  = 35\n\tFACILITY_WINDOWSUPDATE                                                                  = 36\n\tFACILITY_DIRECTORYSERVICE                                                               = 37\n\tFACILITY_GRAPHICS                                                                       = 38\n\tFACILITY_SHELL                                                                          = 39\n\tFACILITY_NAP                                                                            = 39\n\tFACILITY_TPM_SERVICES                                                                   = 40\n\tFACILITY_TPM_SOFTWARE                                                                   = 41\n\tFACILITY_UI                                                                             = 42\n\tFACILITY_XAML                                                                           = 43\n\tFACILITY_ACTION_QUEUE                                                                   = 44\n\tFACILITY_PLA                                                                            = 48\n\tFACILITY_WINDOWS_SETUP                                                                  = 48\n\tFACILITY_FVE                                                                            = 49\n\tFACILITY_FWP                                                                            = 50\n\tFACILITY_WINRM                                                                          = 51\n\tFACILITY_NDIS                                                                           = 52\n\tFACILITY_USERMODE_HYPERVISOR                                                            = 53\n\tFACILITY_CMI                                                                            = 54\n\tFACILITY_USERMODE_VIRTUALIZATION                                                        = 55\n\tFACILITY_USERMODE_VOLMGR                                                                = 56\n\tFACILITY_BCD                                                                            = 57\n\tFACILITY_USERMODE_VHD                                                                   = 58\n\tFACILITY_USERMODE_HNS                                                                   = 59\n\tFACILITY_SDIAG                                                                          = 60\n\tFACILITY_WEBSERVICES                                                                    = 61\n\tFACILITY_WINPE                                                                          = 61\n\tFACILITY_WPN                                                                            = 62\n\tFACILITY_WINDOWS_STORE                                                                  = 63\n\tFACILITY_INPUT                                                                          = 64\n\tFACILITY_EAP                                                                            = 66\n\tFACILITY_WINDOWS_DEFENDER                                                               = 80\n\tFACILITY_OPC                                                                            = 81\n\tFACILITY_XPS                                                                            = 82\n\tFACILITY_MBN                                                                            = 84\n\tFACILITY_POWERSHELL                                                                     = 84\n\tFACILITY_RAS                                                                            = 83\n\tFACILITY_P2P_INT                                                                        = 98\n\tFACILITY_P2P                                                                            = 99\n\tFACILITY_DAF                                                                            = 100\n\tFACILITY_BLUETOOTH_ATT                                                                  = 101\n\tFACILITY_AUDIO                                                                          = 102\n\tFACILITY_STATEREPOSITORY                                                                = 103\n\tFACILITY_VISUALCPP                                                                      = 109\n\tFACILITY_SCRIPT                                                                         = 112\n\tFACILITY_PARSE                                                                          = 113\n\tFACILITY_BLB                                                                            = 120\n\tFACILITY_BLB_CLI                                                                        = 121\n\tFACILITY_WSBAPP                                                                         = 122\n\tFACILITY_BLBUI                                                                          = 128\n\tFACILITY_USN                                                                            = 129\n\tFACILITY_USERMODE_VOLSNAP                                                               = 130\n\tFACILITY_TIERING                                                                        = 131\n\tFACILITY_WSB_ONLINE                                                                     = 133\n\tFACILITY_ONLINE_ID                                                                      = 134\n\tFACILITY_DEVICE_UPDATE_AGENT                                                            = 135\n\tFACILITY_DRVSERVICING                                                                   = 136\n\tFACILITY_DLS                                                                            = 153\n\tFACILITY_DELIVERY_OPTIMIZATION                                                          = 208\n\tFACILITY_USERMODE_SPACES                                                                = 231\n\tFACILITY_USER_MODE_SECURITY_CORE                                                        = 232\n\tFACILITY_USERMODE_LICENSING                                                             = 234\n\tFACILITY_SOS                                                                            = 160\n\tFACILITY_DEBUGGERS                                                                      = 176\n\tFACILITY_SPP                                                                            = 256\n\tFACILITY_RESTORE                                                                        = 256\n\tFACILITY_DMSERVER                                                                       = 256\n\tFACILITY_DEPLOYMENT_SERVICES_SERVER                                                     = 257\n\tFACILITY_DEPLOYMENT_SERVICES_IMAGING                                                    = 258\n\tFACILITY_DEPLOYMENT_SERVICES_MANAGEMENT                                                 = 259\n\tFACILITY_DEPLOYMENT_SERVICES_UTIL                                                       = 260\n\tFACILITY_DEPLOYMENT_SERVICES_BINLSVC                                                    = 261\n\tFACILITY_DEPLOYMENT_SERVICES_PXE                                                        = 263\n\tFACILITY_DEPLOYMENT_SERVICES_TFTP                                                       = 264\n\tFACILITY_DEPLOYMENT_SERVICES_TRANSPORT_MANAGEMENT                                       = 272\n\tFACILITY_DEPLOYMENT_SERVICES_DRIVER_PROVISIONING                                        = 278\n\tFACILITY_DEPLOYMENT_SERVICES_MULTICAST_SERVER                                           = 289\n\tFACILITY_DEPLOYMENT_SERVICES_MULTICAST_CLIENT                                           = 290\n\tFACILITY_DEPLOYMENT_SERVICES_CONTENT_PROVIDER                                           = 293\n\tFACILITY_LINGUISTIC_SERVICES                                                            = 305\n\tFACILITY_AUDIOSTREAMING                                                                 = 1094\n\tFACILITY_ACCELERATOR                                                                    = 1536\n\tFACILITY_WMAAECMA                                                                       = 1996\n\tFACILITY_DIRECTMUSIC                                                                    = 2168\n\tFACILITY_DIRECT3D10                                                                     = 2169\n\tFACILITY_DXGI                                                                           = 2170\n\tFACILITY_DXGI_DDI                                                                       = 2171\n\tFACILITY_DIRECT3D11                                                                     = 2172\n\tFACILITY_DIRECT3D11_DEBUG                                                               = 2173\n\tFACILITY_DIRECT3D12                                                                     = 2174\n\tFACILITY_DIRECT3D12_DEBUG                                                               = 2175\n\tFACILITY_LEAP                                                                           = 2184\n\tFACILITY_AUDCLNT                                                                        = 2185\n\tFACILITY_WINCODEC_DWRITE_DWM                                                            = 2200\n\tFACILITY_WINML                                                                          = 2192\n\tFACILITY_DIRECT2D                                                                       = 2201\n\tFACILITY_DEFRAG                                                                         = 2304\n\tFACILITY_USERMODE_SDBUS                                                                 = 2305\n\tFACILITY_JSCRIPT                                                                        = 2306\n\tFACILITY_PIDGENX                                                                        = 2561\n\tFACILITY_EAS                                                                            = 85\n\tFACILITY_WEB                                                                            = 885\n\tFACILITY_WEB_SOCKET                                                                     = 886\n\tFACILITY_MOBILE                                                                         = 1793\n\tFACILITY_SQLITE                                                                         = 1967\n\tFACILITY_UTC                                                                            = 1989\n\tFACILITY_WEP                                                                            = 2049\n\tFACILITY_SYNCENGINE                                                                     = 2050\n\tFACILITY_XBOX                                                                           = 2339\n\tFACILITY_GAME                                                                           = 2340\n\tFACILITY_PIX                                                                            = 2748\n\tERROR_SUCCESS                                                             syscall.Errno = 0\n\tNO_ERROR                                                                                = 0\n\tSEC_E_OK                                                                  Handle        = 0x00000000\n\tERROR_INVALID_FUNCTION                                                    syscall.Errno = 1\n\tERROR_FILE_NOT_FOUND                                                      syscall.Errno = 2\n\tERROR_PATH_NOT_FOUND                                                      syscall.Errno = 3\n\tERROR_TOO_MANY_OPEN_FILES                                                 syscall.Errno = 4\n\tERROR_ACCESS_DENIED                                                       syscall.Errno = 5\n\tERROR_INVALID_HANDLE                                                      syscall.Errno = 6\n\tERROR_ARENA_TRASHED                                                       syscall.Errno = 7\n\tERROR_NOT_ENOUGH_MEMORY                                                   syscall.Errno = 8\n\tERROR_INVALID_BLOCK                                                       syscall.Errno = 9\n\tERROR_BAD_ENVIRONMENT                                                     syscall.Errno = 10\n\tERROR_BAD_FORMAT                                                          syscall.Errno = 11\n\tERROR_INVALID_ACCESS                                                      syscall.Errno = 12\n\tERROR_INVALID_DATA                                                        syscall.Errno = 13\n\tERROR_OUTOFMEMORY                                                         syscall.Errno = 14\n\tERROR_INVALID_DRIVE                                                       syscall.Errno = 15\n\tERROR_CURRENT_DIRECTORY                                                   syscall.Errno = 16\n\tERROR_NOT_SAME_DEVICE                                                     syscall.Errno = 17\n\tERROR_NO_MORE_FILES                                                       syscall.Errno = 18\n\tERROR_WRITE_PROTECT                                                       syscall.Errno = 19\n\tERROR_BAD_UNIT                                                            syscall.Errno = 20\n\tERROR_NOT_READY                                                           syscall.Errno = 21\n\tERROR_BAD_COMMAND                                                         syscall.Errno = 22\n\tERROR_CRC                                                                 syscall.Errno = 23\n\tERROR_BAD_LENGTH                                                          syscall.Errno = 24\n\tERROR_SEEK                                                                syscall.Errno = 25\n\tERROR_NOT_DOS_DISK                                                        syscall.Errno = 26\n\tERROR_SECTOR_NOT_FOUND                                                    syscall.Errno = 27\n\tERROR_OUT_OF_PAPER                                                        syscall.Errno = 28\n\tERROR_WRITE_FAULT                                                         syscall.Errno = 29\n\tERROR_READ_FAULT                                                          syscall.Errno = 30\n\tERROR_GEN_FAILURE                                                         syscall.Errno = 31\n\tERROR_SHARING_VIOLATION                                                   syscall.Errno = 32\n\tERROR_LOCK_VIOLATION                                                      syscall.Errno = 33\n\tERROR_WRONG_DISK                                                          syscall.Errno = 34\n\tERROR_SHARING_BUFFER_EXCEEDED                                             syscall.Errno = 36\n\tERROR_HANDLE_EOF                                                          syscall.Errno = 38\n\tERROR_HANDLE_DISK_FULL                                                    syscall.Errno = 39\n\tERROR_NOT_SUPPORTED                                                       syscall.Errno = 50\n\tERROR_REM_NOT_LIST                                                        syscall.Errno = 51\n\tERROR_DUP_NAME                                                            syscall.Errno = 52\n\tERROR_BAD_NETPATH                                                         syscall.Errno = 53\n\tERROR_NETWORK_BUSY                                                        syscall.Errno = 54\n\tERROR_DEV_NOT_EXIST                                                       syscall.Errno = 55\n\tERROR_TOO_MANY_CMDS                                                       syscall.Errno = 56\n\tERROR_ADAP_HDW_ERR                                                        syscall.Errno = 57\n\tERROR_BAD_NET_RESP                                                        syscall.Errno = 58\n\tERROR_UNEXP_NET_ERR                                                       syscall.Errno = 59\n\tERROR_BAD_REM_ADAP                                                        syscall.Errno = 60\n\tERROR_PRINTQ_FULL                                                         syscall.Errno = 61\n\tERROR_NO_SPOOL_SPACE                                                      syscall.Errno = 62\n\tERROR_PRINT_CANCELLED                                                     syscall.Errno = 63\n\tERROR_NETNAME_DELETED                                                     syscall.Errno = 64\n\tERROR_NETWORK_ACCESS_DENIED                                               syscall.Errno = 65\n\tERROR_BAD_DEV_TYPE                                                        syscall.Errno = 66\n\tERROR_BAD_NET_NAME                                                        syscall.Errno = 67\n\tERROR_TOO_MANY_NAMES                                                      syscall.Errno = 68\n\tERROR_TOO_MANY_SESS                                                       syscall.Errno = 69\n\tERROR_SHARING_PAUSED                                                      syscall.Errno = 70\n\tERROR_REQ_NOT_ACCEP                                                       syscall.Errno = 71\n\tERROR_REDIR_PAUSED                                                        syscall.Errno = 72\n\tERROR_FILE_EXISTS                                                         syscall.Errno = 80\n\tERROR_CANNOT_MAKE                                                         syscall.Errno = 82\n\tERROR_FAIL_I24                                                            syscall.Errno = 83\n\tERROR_OUT_OF_STRUCTURES                                                   syscall.Errno = 84\n\tERROR_ALREADY_ASSIGNED                                                    syscall.Errno = 85\n\tERROR_INVALID_PASSWORD                                                    syscall.Errno = 86\n\tERROR_INVALID_PARAMETER                                                   syscall.Errno = 87\n\tERROR_NET_WRITE_FAULT                                                     syscall.Errno = 88\n\tERROR_NO_PROC_SLOTS                                                       syscall.Errno = 89\n\tERROR_TOO_MANY_SEMAPHORES                                                 syscall.Errno = 100\n\tERROR_EXCL_SEM_ALREADY_OWNED                                              syscall.Errno = 101\n\tERROR_SEM_IS_SET                                                          syscall.Errno = 102\n\tERROR_TOO_MANY_SEM_REQUESTS                                               syscall.Errno = 103\n\tERROR_INVALID_AT_INTERRUPT_TIME                                           syscall.Errno = 104\n\tERROR_SEM_OWNER_DIED                                                      syscall.Errno = 105\n\tERROR_SEM_USER_LIMIT                                                      syscall.Errno = 106\n\tERROR_DISK_CHANGE                                                         syscall.Errno = 107\n\tERROR_DRIVE_LOCKED                                                        syscall.Errno = 108\n\tERROR_BROKEN_PIPE                                                         syscall.Errno = 109\n\tERROR_OPEN_FAILED                                                         syscall.Errno = 110\n\tERROR_BUFFER_OVERFLOW                                                     syscall.Errno = 111\n\tERROR_DISK_FULL                                                           syscall.Errno = 112\n\tERROR_NO_MORE_SEARCH_HANDLES                                              syscall.Errno = 113\n\tERROR_INVALID_TARGET_HANDLE                                               syscall.Errno = 114\n\tERROR_INVALID_CATEGORY                                                    syscall.Errno = 117\n\tERROR_INVALID_VERIFY_SWITCH                                               syscall.Errno = 118\n\tERROR_BAD_DRIVER_LEVEL                                                    syscall.Errno = 119\n\tERROR_CALL_NOT_IMPLEMENTED                                                syscall.Errno = 120\n\tERROR_SEM_TIMEOUT                                                         syscall.Errno = 121\n\tERROR_INSUFFICIENT_BUFFER                                                 syscall.Errno = 122\n\tERROR_INVALID_NAME                                                        syscall.Errno = 123\n\tERROR_INVALID_LEVEL                                                       syscall.Errno = 124\n\tERROR_NO_VOLUME_LABEL                                                     syscall.Errno = 125\n\tERROR_MOD_NOT_FOUND                                                       syscall.Errno = 126\n\tERROR_PROC_NOT_FOUND                                                      syscall.Errno = 127\n\tERROR_WAIT_NO_CHILDREN                                                    syscall.Errno = 128\n\tERROR_CHILD_NOT_COMPLETE                                                  syscall.Errno = 129\n\tERROR_DIRECT_ACCESS_HANDLE                                                syscall.Errno = 130\n\tERROR_NEGATIVE_SEEK                                                       syscall.Errno = 131\n\tERROR_SEEK_ON_DEVICE                                                      syscall.Errno = 132\n\tERROR_IS_JOIN_TARGET                                                      syscall.Errno = 133\n\tERROR_IS_JOINED                                                           syscall.Errno = 134\n\tERROR_IS_SUBSTED                                                          syscall.Errno = 135\n\tERROR_NOT_JOINED                                                          syscall.Errno = 136\n\tERROR_NOT_SUBSTED                                                         syscall.Errno = 137\n\tERROR_JOIN_TO_JOIN                                                        syscall.Errno = 138\n\tERROR_SUBST_TO_SUBST                                                      syscall.Errno = 139\n\tERROR_JOIN_TO_SUBST                                                       syscall.Errno = 140\n\tERROR_SUBST_TO_JOIN                                                       syscall.Errno = 141\n\tERROR_BUSY_DRIVE                                                          syscall.Errno = 142\n\tERROR_SAME_DRIVE                                                          syscall.Errno = 143\n\tERROR_DIR_NOT_ROOT                                                        syscall.Errno = 144\n\tERROR_DIR_NOT_EMPTY                                                       syscall.Errno = 145\n\tERROR_IS_SUBST_PATH                                                       syscall.Errno = 146\n\tERROR_IS_JOIN_PATH                                                        syscall.Errno = 147\n\tERROR_PATH_BUSY                                                           syscall.Errno = 148\n\tERROR_IS_SUBST_TARGET                                                     syscall.Errno = 149\n\tERROR_SYSTEM_TRACE                                                        syscall.Errno = 150\n\tERROR_INVALID_EVENT_COUNT                                                 syscall.Errno = 151\n\tERROR_TOO_MANY_MUXWAITERS                                                 syscall.Errno = 152\n\tERROR_INVALID_LIST_FORMAT                                                 syscall.Errno = 153\n\tERROR_LABEL_TOO_LONG                                                      syscall.Errno = 154\n\tERROR_TOO_MANY_TCBS                                                       syscall.Errno = 155\n\tERROR_SIGNAL_REFUSED                                                      syscall.Errno = 156\n\tERROR_DISCARDED                                                           syscall.Errno = 157\n\tERROR_NOT_LOCKED                                                          syscall.Errno = 158\n\tERROR_BAD_THREADID_ADDR                                                   syscall.Errno = 159\n\tERROR_BAD_ARGUMENTS                                                       syscall.Errno = 160\n\tERROR_BAD_PATHNAME                                                        syscall.Errno = 161\n\tERROR_SIGNAL_PENDING                                                      syscall.Errno = 162\n\tERROR_MAX_THRDS_REACHED                                                   syscall.Errno = 164\n\tERROR_LOCK_FAILED                                                         syscall.Errno = 167\n\tERROR_BUSY                                                                syscall.Errno = 170\n\tERROR_DEVICE_SUPPORT_IN_PROGRESS                                          syscall.Errno = 171\n\tERROR_CANCEL_VIOLATION                                                    syscall.Errno = 173\n\tERROR_ATOMIC_LOCKS_NOT_SUPPORTED                                          syscall.Errno = 174\n\tERROR_INVALID_SEGMENT_NUMBER                                              syscall.Errno = 180\n\tERROR_INVALID_ORDINAL                                                     syscall.Errno = 182\n\tERROR_ALREADY_EXISTS                                                      syscall.Errno = 183\n\tERROR_INVALID_FLAG_NUMBER                                                 syscall.Errno = 186\n\tERROR_SEM_NOT_FOUND                                                       syscall.Errno = 187\n\tERROR_INVALID_STARTING_CODESEG                                            syscall.Errno = 188\n\tERROR_INVALID_STACKSEG                                                    syscall.Errno = 189\n\tERROR_INVALID_MODULETYPE                                                  syscall.Errno = 190\n\tERROR_INVALID_EXE_SIGNATURE                                               syscall.Errno = 191\n\tERROR_EXE_MARKED_INVALID                                                  syscall.Errno = 192\n\tERROR_BAD_EXE_FORMAT                                                      syscall.Errno = 193\n\tERROR_ITERATED_DATA_EXCEEDS_64k                                           syscall.Errno = 194\n\tERROR_INVALID_MINALLOCSIZE                                                syscall.Errno = 195\n\tERROR_DYNLINK_FROM_INVALID_RING                                           syscall.Errno = 196\n\tERROR_IOPL_NOT_ENABLED                                                    syscall.Errno = 197\n\tERROR_INVALID_SEGDPL                                                      syscall.Errno = 198\n\tERROR_AUTODATASEG_EXCEEDS_64k                                             syscall.Errno = 199\n\tERROR_RING2SEG_MUST_BE_MOVABLE                                            syscall.Errno = 200\n\tERROR_RELOC_CHAIN_XEEDS_SEGLIM                                            syscall.Errno = 201\n\tERROR_INFLOOP_IN_RELOC_CHAIN                                              syscall.Errno = 202\n\tERROR_ENVVAR_NOT_FOUND                                                    syscall.Errno = 203\n\tERROR_NO_SIGNAL_SENT                                                      syscall.Errno = 205\n\tERROR_FILENAME_EXCED_RANGE                                                syscall.Errno = 206\n\tERROR_RING2_STACK_IN_USE                                                  syscall.Errno = 207\n\tERROR_META_EXPANSION_TOO_LONG                                             syscall.Errno = 208\n\tERROR_INVALID_SIGNAL_NUMBER                                               syscall.Errno = 209\n\tERROR_THREAD_1_INACTIVE                                                   syscall.Errno = 210\n\tERROR_LOCKED                                                              syscall.Errno = 212\n\tERROR_TOO_MANY_MODULES                                                    syscall.Errno = 214\n\tERROR_NESTING_NOT_ALLOWED                                                 syscall.Errno = 215\n\tERROR_EXE_MACHINE_TYPE_MISMATCH                                           syscall.Errno = 216\n\tERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY                                     syscall.Errno = 217\n\tERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY                              syscall.Errno = 218\n\tERROR_FILE_CHECKED_OUT                                                    syscall.Errno = 220\n\tERROR_CHECKOUT_REQUIRED                                                   syscall.Errno = 221\n\tERROR_BAD_FILE_TYPE                                                       syscall.Errno = 222\n\tERROR_FILE_TOO_LARGE                                                      syscall.Errno = 223\n\tERROR_FORMS_AUTH_REQUIRED                                                 syscall.Errno = 224\n\tERROR_VIRUS_INFECTED                                                      syscall.Errno = 225\n\tERROR_VIRUS_DELETED                                                       syscall.Errno = 226\n\tERROR_PIPE_LOCAL                                                          syscall.Errno = 229\n\tERROR_BAD_PIPE                                                            syscall.Errno = 230\n\tERROR_PIPE_BUSY                                                           syscall.Errno = 231\n\tERROR_NO_DATA                                                             syscall.Errno = 232\n\tERROR_PIPE_NOT_CONNECTED                                                  syscall.Errno = 233\n\tERROR_MORE_DATA                                                           syscall.Errno = 234\n\tERROR_NO_WORK_DONE                                                        syscall.Errno = 235\n\tERROR_VC_DISCONNECTED                                                     syscall.Errno = 240\n\tERROR_INVALID_EA_NAME                                                     syscall.Errno = 254\n\tERROR_EA_LIST_INCONSISTENT                                                syscall.Errno = 255\n\tWAIT_TIMEOUT                                                              syscall.Errno = 258\n\tERROR_NO_MORE_ITEMS                                                       syscall.Errno = 259\n\tERROR_CANNOT_COPY                                                         syscall.Errno = 266\n\tERROR_DIRECTORY                                                           syscall.Errno = 267\n\tERROR_EAS_DIDNT_FIT                                                       syscall.Errno = 275\n\tERROR_EA_FILE_CORRUPT                                                     syscall.Errno = 276\n\tERROR_EA_TABLE_FULL                                                       syscall.Errno = 277\n\tERROR_INVALID_EA_HANDLE                                                   syscall.Errno = 278\n\tERROR_EAS_NOT_SUPPORTED                                                   syscall.Errno = 282\n\tERROR_NOT_OWNER                                                           syscall.Errno = 288\n\tERROR_TOO_MANY_POSTS                                                      syscall.Errno = 298\n\tERROR_PARTIAL_COPY                                                        syscall.Errno = 299\n\tERROR_OPLOCK_NOT_GRANTED                                                  syscall.Errno = 300\n\tERROR_INVALID_OPLOCK_PROTOCOL                                             syscall.Errno = 301\n\tERROR_DISK_TOO_FRAGMENTED                                                 syscall.Errno = 302\n\tERROR_DELETE_PENDING                                                      syscall.Errno = 303\n\tERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING                syscall.Errno = 304\n\tERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME                                   syscall.Errno = 305\n\tERROR_SECURITY_STREAM_IS_INCONSISTENT                                     syscall.Errno = 306\n\tERROR_INVALID_LOCK_RANGE                                                  syscall.Errno = 307\n\tERROR_IMAGE_SUBSYSTEM_NOT_PRESENT                                         syscall.Errno = 308\n\tERROR_NOTIFICATION_GUID_ALREADY_DEFINED                                   syscall.Errno = 309\n\tERROR_INVALID_EXCEPTION_HANDLER                                           syscall.Errno = 310\n\tERROR_DUPLICATE_PRIVILEGES                                                syscall.Errno = 311\n\tERROR_NO_RANGES_PROCESSED                                                 syscall.Errno = 312\n\tERROR_NOT_ALLOWED_ON_SYSTEM_FILE                                          syscall.Errno = 313\n\tERROR_DISK_RESOURCES_EXHAUSTED                                            syscall.Errno = 314\n\tERROR_INVALID_TOKEN                                                       syscall.Errno = 315\n\tERROR_DEVICE_FEATURE_NOT_SUPPORTED                                        syscall.Errno = 316\n\tERROR_MR_MID_NOT_FOUND                                                    syscall.Errno = 317\n\tERROR_SCOPE_NOT_FOUND                                                     syscall.Errno = 318\n\tERROR_UNDEFINED_SCOPE                                                     syscall.Errno = 319\n\tERROR_INVALID_CAP                                                         syscall.Errno = 320\n\tERROR_DEVICE_UNREACHABLE                                                  syscall.Errno = 321\n\tERROR_DEVICE_NO_RESOURCES                                                 syscall.Errno = 322\n\tERROR_DATA_CHECKSUM_ERROR                                                 syscall.Errno = 323\n\tERROR_INTERMIXED_KERNEL_EA_OPERATION                                      syscall.Errno = 324\n\tERROR_FILE_LEVEL_TRIM_NOT_SUPPORTED                                       syscall.Errno = 326\n\tERROR_OFFSET_ALIGNMENT_VIOLATION                                          syscall.Errno = 327\n\tERROR_INVALID_FIELD_IN_PARAMETER_LIST                                     syscall.Errno = 328\n\tERROR_OPERATION_IN_PROGRESS                                               syscall.Errno = 329\n\tERROR_BAD_DEVICE_PATH                                                     syscall.Errno = 330\n\tERROR_TOO_MANY_DESCRIPTORS                                                syscall.Errno = 331\n\tERROR_SCRUB_DATA_DISABLED                                                 syscall.Errno = 332\n\tERROR_NOT_REDUNDANT_STORAGE                                               syscall.Errno = 333\n\tERROR_RESIDENT_FILE_NOT_SUPPORTED                                         syscall.Errno = 334\n\tERROR_COMPRESSED_FILE_NOT_SUPPORTED                                       syscall.Errno = 335\n\tERROR_DIRECTORY_NOT_SUPPORTED                                             syscall.Errno = 336\n\tERROR_NOT_READ_FROM_COPY                                                  syscall.Errno = 337\n\tERROR_FT_WRITE_FAILURE                                                    syscall.Errno = 338\n\tERROR_FT_DI_SCAN_REQUIRED                                                 syscall.Errno = 339\n\tERROR_INVALID_KERNEL_INFO_VERSION                                         syscall.Errno = 340\n\tERROR_INVALID_PEP_INFO_VERSION                                            syscall.Errno = 341\n\tERROR_OBJECT_NOT_EXTERNALLY_BACKED                                        syscall.Errno = 342\n\tERROR_EXTERNAL_BACKING_PROVIDER_UNKNOWN                                   syscall.Errno = 343\n\tERROR_COMPRESSION_NOT_BENEFICIAL                                          syscall.Errno = 344\n\tERROR_STORAGE_TOPOLOGY_ID_MISMATCH                                        syscall.Errno = 345\n\tERROR_BLOCKED_BY_PARENTAL_CONTROLS                                        syscall.Errno = 346\n\tERROR_BLOCK_TOO_MANY_REFERENCES                                           syscall.Errno = 347\n\tERROR_MARKED_TO_DISALLOW_WRITES                                           syscall.Errno = 348\n\tERROR_ENCLAVE_FAILURE                                                     syscall.Errno = 349\n\tERROR_FAIL_NOACTION_REBOOT                                                syscall.Errno = 350\n\tERROR_FAIL_SHUTDOWN                                                       syscall.Errno = 351\n\tERROR_FAIL_RESTART                                                        syscall.Errno = 352\n\tERROR_MAX_SESSIONS_REACHED                                                syscall.Errno = 353\n\tERROR_NETWORK_ACCESS_DENIED_EDP                                           syscall.Errno = 354\n\tERROR_DEVICE_HINT_NAME_BUFFER_TOO_SMALL                                   syscall.Errno = 355\n\tERROR_EDP_POLICY_DENIES_OPERATION                                         syscall.Errno = 356\n\tERROR_EDP_DPL_POLICY_CANT_BE_SATISFIED                                    syscall.Errno = 357\n\tERROR_CLOUD_FILE_SYNC_ROOT_METADATA_CORRUPT                               syscall.Errno = 358\n\tERROR_DEVICE_IN_MAINTENANCE                                               syscall.Errno = 359\n\tERROR_NOT_SUPPORTED_ON_DAX                                                syscall.Errno = 360\n\tERROR_DAX_MAPPING_EXISTS                                                  syscall.Errno = 361\n\tERROR_CLOUD_FILE_PROVIDER_NOT_RUNNING                                     syscall.Errno = 362\n\tERROR_CLOUD_FILE_METADATA_CORRUPT                                         syscall.Errno = 363\n\tERROR_CLOUD_FILE_METADATA_TOO_LARGE                                       syscall.Errno = 364\n\tERROR_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE                                  syscall.Errno = 365\n\tERROR_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH                          syscall.Errno = 366\n\tERROR_CHILD_PROCESS_BLOCKED                                               syscall.Errno = 367\n\tERROR_STORAGE_LOST_DATA_PERSISTENCE                                       syscall.Errno = 368\n\tERROR_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE                              syscall.Errno = 369\n\tERROR_FILE_SYSTEM_VIRTUALIZATION_METADATA_CORRUPT                         syscall.Errno = 370\n\tERROR_FILE_SYSTEM_VIRTUALIZATION_BUSY                                     syscall.Errno = 371\n\tERROR_FILE_SYSTEM_VIRTUALIZATION_PROVIDER_UNKNOWN                         syscall.Errno = 372\n\tERROR_GDI_HANDLE_LEAK                                                     syscall.Errno = 373\n\tERROR_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS                                  syscall.Errno = 374\n\tERROR_CLOUD_FILE_PROPERTY_VERSION_NOT_SUPPORTED                           syscall.Errno = 375\n\tERROR_NOT_A_CLOUD_FILE                                                    syscall.Errno = 376\n\tERROR_CLOUD_FILE_NOT_IN_SYNC                                              syscall.Errno = 377\n\tERROR_CLOUD_FILE_ALREADY_CONNECTED                                        syscall.Errno = 378\n\tERROR_CLOUD_FILE_NOT_SUPPORTED                                            syscall.Errno = 379\n\tERROR_CLOUD_FILE_INVALID_REQUEST                                          syscall.Errno = 380\n\tERROR_CLOUD_FILE_READ_ONLY_VOLUME                                         syscall.Errno = 381\n\tERROR_CLOUD_FILE_CONNECTED_PROVIDER_ONLY                                  syscall.Errno = 382\n\tERROR_CLOUD_FILE_VALIDATION_FAILED                                        syscall.Errno = 383\n\tERROR_SMB1_NOT_AVAILABLE                                                  syscall.Errno = 384\n\tERROR_FILE_SYSTEM_VIRTUALIZATION_INVALID_OPERATION                        syscall.Errno = 385\n\tERROR_CLOUD_FILE_AUTHENTICATION_FAILED                                    syscall.Errno = 386\n\tERROR_CLOUD_FILE_INSUFFICIENT_RESOURCES                                   syscall.Errno = 387\n\tERROR_CLOUD_FILE_NETWORK_UNAVAILABLE                                      syscall.Errno = 388\n\tERROR_CLOUD_FILE_UNSUCCESSFUL                                             syscall.Errno = 389\n\tERROR_CLOUD_FILE_NOT_UNDER_SYNC_ROOT                                      syscall.Errno = 390\n\tERROR_CLOUD_FILE_IN_USE                                                   syscall.Errno = 391\n\tERROR_CLOUD_FILE_PINNED                                                   syscall.Errno = 392\n\tERROR_CLOUD_FILE_REQUEST_ABORTED                                          syscall.Errno = 393\n\tERROR_CLOUD_FILE_PROPERTY_CORRUPT                                         syscall.Errno = 394\n\tERROR_CLOUD_FILE_ACCESS_DENIED                                            syscall.Errno = 395\n\tERROR_CLOUD_FILE_INCOMPATIBLE_HARDLINKS                                   syscall.Errno = 396\n\tERROR_CLOUD_FILE_PROPERTY_LOCK_CONFLICT                                   syscall.Errno = 397\n\tERROR_CLOUD_FILE_REQUEST_CANCELED                                         syscall.Errno = 398\n\tERROR_EXTERNAL_SYSKEY_NOT_SUPPORTED                                       syscall.Errno = 399\n\tERROR_THREAD_MODE_ALREADY_BACKGROUND                                      syscall.Errno = 400\n\tERROR_THREAD_MODE_NOT_BACKGROUND                                          syscall.Errno = 401\n\tERROR_PROCESS_MODE_ALREADY_BACKGROUND                                     syscall.Errno = 402\n\tERROR_PROCESS_MODE_NOT_BACKGROUND                                         syscall.Errno = 403\n\tERROR_CLOUD_FILE_PROVIDER_TERMINATED                                      syscall.Errno = 404\n\tERROR_NOT_A_CLOUD_SYNC_ROOT                                               syscall.Errno = 405\n\tERROR_FILE_PROTECTED_UNDER_DPL                                            syscall.Errno = 406\n\tERROR_VOLUME_NOT_CLUSTER_ALIGNED                                          syscall.Errno = 407\n\tERROR_NO_PHYSICALLY_ALIGNED_FREE_SPACE_FOUND                              syscall.Errno = 408\n\tERROR_APPX_FILE_NOT_ENCRYPTED                                             syscall.Errno = 409\n\tERROR_RWRAW_ENCRYPTED_FILE_NOT_ENCRYPTED                                  syscall.Errno = 410\n\tERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILEOFFSET                        syscall.Errno = 411\n\tERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILERANGE                         syscall.Errno = 412\n\tERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_PARAMETER                         syscall.Errno = 413\n\tERROR_LINUX_SUBSYSTEM_NOT_PRESENT                                         syscall.Errno = 414\n\tERROR_FT_READ_FAILURE                                                     syscall.Errno = 415\n\tERROR_STORAGE_RESERVE_ID_INVALID                                          syscall.Errno = 416\n\tERROR_STORAGE_RESERVE_DOES_NOT_EXIST                                      syscall.Errno = 417\n\tERROR_STORAGE_RESERVE_ALREADY_EXISTS                                      syscall.Errno = 418\n\tERROR_STORAGE_RESERVE_NOT_EMPTY                                           syscall.Errno = 419\n\tERROR_NOT_A_DAX_VOLUME                                                    syscall.Errno = 420\n\tERROR_NOT_DAX_MAPPABLE                                                    syscall.Errno = 421\n\tERROR_TIME_SENSITIVE_THREAD                                               syscall.Errno = 422\n\tERROR_DPL_NOT_SUPPORTED_FOR_USER                                          syscall.Errno = 423\n\tERROR_CASE_DIFFERING_NAMES_IN_DIR                                         syscall.Errno = 424\n\tERROR_FILE_NOT_SUPPORTED                                                  syscall.Errno = 425\n\tERROR_CLOUD_FILE_REQUEST_TIMEOUT                                          syscall.Errno = 426\n\tERROR_NO_TASK_QUEUE                                                       syscall.Errno = 427\n\tERROR_SRC_SRV_DLL_LOAD_FAILED                                             syscall.Errno = 428\n\tERROR_NOT_SUPPORTED_WITH_BTT                                              syscall.Errno = 429\n\tERROR_ENCRYPTION_DISABLED                                                 syscall.Errno = 430\n\tERROR_ENCRYPTING_METADATA_DISALLOWED                                      syscall.Errno = 431\n\tERROR_CANT_CLEAR_ENCRYPTION_FLAG                                          syscall.Errno = 432\n\tERROR_NO_SUCH_DEVICE                                                      syscall.Errno = 433\n\tERROR_CAPAUTHZ_NOT_DEVUNLOCKED                                            syscall.Errno = 450\n\tERROR_CAPAUTHZ_CHANGE_TYPE                                                syscall.Errno = 451\n\tERROR_CAPAUTHZ_NOT_PROVISIONED                                            syscall.Errno = 452\n\tERROR_CAPAUTHZ_NOT_AUTHORIZED                                             syscall.Errno = 453\n\tERROR_CAPAUTHZ_NO_POLICY                                                  syscall.Errno = 454\n\tERROR_CAPAUTHZ_DB_CORRUPTED                                               syscall.Errno = 455\n\tERROR_CAPAUTHZ_SCCD_INVALID_CATALOG                                       syscall.Errno = 456\n\tERROR_CAPAUTHZ_SCCD_NO_AUTH_ENTITY                                        syscall.Errno = 457\n\tERROR_CAPAUTHZ_SCCD_PARSE_ERROR                                           syscall.Errno = 458\n\tERROR_CAPAUTHZ_SCCD_DEV_MODE_REQUIRED                                     syscall.Errno = 459\n\tERROR_CAPAUTHZ_SCCD_NO_CAPABILITY_MATCH                                   syscall.Errno = 460\n\tERROR_PNP_QUERY_REMOVE_DEVICE_TIMEOUT                                     syscall.Errno = 480\n\tERROR_PNP_QUERY_REMOVE_RELATED_DEVICE_TIMEOUT                             syscall.Errno = 481\n\tERROR_PNP_QUERY_REMOVE_UNRELATED_DEVICE_TIMEOUT                           syscall.Errno = 482\n\tERROR_DEVICE_HARDWARE_ERROR                                               syscall.Errno = 483\n\tERROR_INVALID_ADDRESS                                                     syscall.Errno = 487\n\tERROR_VRF_CFG_ENABLED                                                     syscall.Errno = 1183\n\tERROR_PARTITION_TERMINATING                                               syscall.Errno = 1184\n\tERROR_USER_PROFILE_LOAD                                                   syscall.Errno = 500\n\tERROR_ARITHMETIC_OVERFLOW                                                 syscall.Errno = 534\n\tERROR_PIPE_CONNECTED                                                      syscall.Errno = 535\n\tERROR_PIPE_LISTENING                                                      syscall.Errno = 536\n\tERROR_VERIFIER_STOP                                                       syscall.Errno = 537\n\tERROR_ABIOS_ERROR                                                         syscall.Errno = 538\n\tERROR_WX86_WARNING                                                        syscall.Errno = 539\n\tERROR_WX86_ERROR                                                          syscall.Errno = 540\n\tERROR_TIMER_NOT_CANCELED                                                  syscall.Errno = 541\n\tERROR_UNWIND                                                              syscall.Errno = 542\n\tERROR_BAD_STACK                                                           syscall.Errno = 543\n\tERROR_INVALID_UNWIND_TARGET                                               syscall.Errno = 544\n\tERROR_INVALID_PORT_ATTRIBUTES                                             syscall.Errno = 545\n\tERROR_PORT_MESSAGE_TOO_LONG                                               syscall.Errno = 546\n\tERROR_INVALID_QUOTA_LOWER                                                 syscall.Errno = 547\n\tERROR_DEVICE_ALREADY_ATTACHED                                             syscall.Errno = 548\n\tERROR_INSTRUCTION_MISALIGNMENT                                            syscall.Errno = 549\n\tERROR_PROFILING_NOT_STARTED                                               syscall.Errno = 550\n\tERROR_PROFILING_NOT_STOPPED                                               syscall.Errno = 551\n\tERROR_COULD_NOT_INTERPRET                                                 syscall.Errno = 552\n\tERROR_PROFILING_AT_LIMIT                                                  syscall.Errno = 553\n\tERROR_CANT_WAIT                                                           syscall.Errno = 554\n\tERROR_CANT_TERMINATE_SELF                                                 syscall.Errno = 555\n\tERROR_UNEXPECTED_MM_CREATE_ERR                                            syscall.Errno = 556\n\tERROR_UNEXPECTED_MM_MAP_ERROR                                             syscall.Errno = 557\n\tERROR_UNEXPECTED_MM_EXTEND_ERR                                            syscall.Errno = 558\n\tERROR_BAD_FUNCTION_TABLE                                                  syscall.Errno = 559\n\tERROR_NO_GUID_TRANSLATION                                                 syscall.Errno = 560\n\tERROR_INVALID_LDT_SIZE                                                    syscall.Errno = 561\n\tERROR_INVALID_LDT_OFFSET                                                  syscall.Errno = 563\n\tERROR_INVALID_LDT_DESCRIPTOR                                              syscall.Errno = 564\n\tERROR_TOO_MANY_THREADS                                                    syscall.Errno = 565\n\tERROR_THREAD_NOT_IN_PROCESS                                               syscall.Errno = 566\n\tERROR_PAGEFILE_QUOTA_EXCEEDED                                             syscall.Errno = 567\n\tERROR_LOGON_SERVER_CONFLICT                                               syscall.Errno = 568\n\tERROR_SYNCHRONIZATION_REQUIRED                                            syscall.Errno = 569\n\tERROR_NET_OPEN_FAILED                                                     syscall.Errno = 570\n\tERROR_IO_PRIVILEGE_FAILED                                                 syscall.Errno = 571\n\tERROR_CONTROL_C_EXIT                                                      syscall.Errno = 572\n\tERROR_MISSING_SYSTEMFILE                                                  syscall.Errno = 573\n\tERROR_UNHANDLED_EXCEPTION                                                 syscall.Errno = 574\n\tERROR_APP_INIT_FAILURE                                                    syscall.Errno = 575\n\tERROR_PAGEFILE_CREATE_FAILED                                              syscall.Errno = 576\n\tERROR_INVALID_IMAGE_HASH                                                  syscall.Errno = 577\n\tERROR_NO_PAGEFILE                                                         syscall.Errno = 578\n\tERROR_ILLEGAL_FLOAT_CONTEXT                                               syscall.Errno = 579\n\tERROR_NO_EVENT_PAIR                                                       syscall.Errno = 580\n\tERROR_DOMAIN_CTRLR_CONFIG_ERROR                                           syscall.Errno = 581\n\tERROR_ILLEGAL_CHARACTER                                                   syscall.Errno = 582\n\tERROR_UNDEFINED_CHARACTER                                                 syscall.Errno = 583\n\tERROR_FLOPPY_VOLUME                                                       syscall.Errno = 584\n\tERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT                                    syscall.Errno = 585\n\tERROR_BACKUP_CONTROLLER                                                   syscall.Errno = 586\n\tERROR_MUTANT_LIMIT_EXCEEDED                                               syscall.Errno = 587\n\tERROR_FS_DRIVER_REQUIRED                                                  syscall.Errno = 588\n\tERROR_CANNOT_LOAD_REGISTRY_FILE                                           syscall.Errno = 589\n\tERROR_DEBUG_ATTACH_FAILED                                                 syscall.Errno = 590\n\tERROR_SYSTEM_PROCESS_TERMINATED                                           syscall.Errno = 591\n\tERROR_DATA_NOT_ACCEPTED                                                   syscall.Errno = 592\n\tERROR_VDM_HARD_ERROR                                                      syscall.Errno = 593\n\tERROR_DRIVER_CANCEL_TIMEOUT                                               syscall.Errno = 594\n\tERROR_REPLY_MESSAGE_MISMATCH                                              syscall.Errno = 595\n\tERROR_LOST_WRITEBEHIND_DATA                                               syscall.Errno = 596\n\tERROR_CLIENT_SERVER_PARAMETERS_INVALID                                    syscall.Errno = 597\n\tERROR_NOT_TINY_STREAM                                                     syscall.Errno = 598\n\tERROR_STACK_OVERFLOW_READ                                                 syscall.Errno = 599\n\tERROR_CONVERT_TO_LARGE                                                    syscall.Errno = 600\n\tERROR_FOUND_OUT_OF_SCOPE                                                  syscall.Errno = 601\n\tERROR_ALLOCATE_BUCKET                                                     syscall.Errno = 602\n\tERROR_MARSHALL_OVERFLOW                                                   syscall.Errno = 603\n\tERROR_INVALID_VARIANT                                                     syscall.Errno = 604\n\tERROR_BAD_COMPRESSION_BUFFER                                              syscall.Errno = 605\n\tERROR_AUDIT_FAILED                                                        syscall.Errno = 606\n\tERROR_TIMER_RESOLUTION_NOT_SET                                            syscall.Errno = 607\n\tERROR_INSUFFICIENT_LOGON_INFO                                             syscall.Errno = 608\n\tERROR_BAD_DLL_ENTRYPOINT                                                  syscall.Errno = 609\n\tERROR_BAD_SERVICE_ENTRYPOINT                                              syscall.Errno = 610\n\tERROR_IP_ADDRESS_CONFLICT1                                                syscall.Errno = 611\n\tERROR_IP_ADDRESS_CONFLICT2                                                syscall.Errno = 612\n\tERROR_REGISTRY_QUOTA_LIMIT                                                syscall.Errno = 613\n\tERROR_NO_CALLBACK_ACTIVE                                                  syscall.Errno = 614\n\tERROR_PWD_TOO_SHORT                                                       syscall.Errno = 615\n\tERROR_PWD_TOO_RECENT                                                      syscall.Errno = 616\n\tERROR_PWD_HISTORY_CONFLICT                                                syscall.Errno = 617\n\tERROR_UNSUPPORTED_COMPRESSION                                             syscall.Errno = 618\n\tERROR_INVALID_HW_PROFILE                                                  syscall.Errno = 619\n\tERROR_INVALID_PLUGPLAY_DEVICE_PATH                                        syscall.Errno = 620\n\tERROR_QUOTA_LIST_INCONSISTENT                                             syscall.Errno = 621\n\tERROR_EVALUATION_EXPIRATION                                               syscall.Errno = 622\n\tERROR_ILLEGAL_DLL_RELOCATION                                              syscall.Errno = 623\n\tERROR_DLL_INIT_FAILED_LOGOFF                                              syscall.Errno = 624\n\tERROR_VALIDATE_CONTINUE                                                   syscall.Errno = 625\n\tERROR_NO_MORE_MATCHES                                                     syscall.Errno = 626\n\tERROR_RANGE_LIST_CONFLICT                                                 syscall.Errno = 627\n\tERROR_SERVER_SID_MISMATCH                                                 syscall.Errno = 628\n\tERROR_CANT_ENABLE_DENY_ONLY                                               syscall.Errno = 629\n\tERROR_FLOAT_MULTIPLE_FAULTS                                               syscall.Errno = 630\n\tERROR_FLOAT_MULTIPLE_TRAPS                                                syscall.Errno = 631\n\tERROR_NOINTERFACE                                                         syscall.Errno = 632\n\tERROR_DRIVER_FAILED_SLEEP                                                 syscall.Errno = 633\n\tERROR_CORRUPT_SYSTEM_FILE                                                 syscall.Errno = 634\n\tERROR_COMMITMENT_MINIMUM                                                  syscall.Errno = 635\n\tERROR_PNP_RESTART_ENUMERATION                                             syscall.Errno = 636\n\tERROR_SYSTEM_IMAGE_BAD_SIGNATURE                                          syscall.Errno = 637\n\tERROR_PNP_REBOOT_REQUIRED                                                 syscall.Errno = 638\n\tERROR_INSUFFICIENT_POWER                                                  syscall.Errno = 639\n\tERROR_MULTIPLE_FAULT_VIOLATION                                            syscall.Errno = 640\n\tERROR_SYSTEM_SHUTDOWN                                                     syscall.Errno = 641\n\tERROR_PORT_NOT_SET                                                        syscall.Errno = 642\n\tERROR_DS_VERSION_CHECK_FAILURE                                            syscall.Errno = 643\n\tERROR_RANGE_NOT_FOUND                                                     syscall.Errno = 644\n\tERROR_NOT_SAFE_MODE_DRIVER                                                syscall.Errno = 646\n\tERROR_FAILED_DRIVER_ENTRY                                                 syscall.Errno = 647\n\tERROR_DEVICE_ENUMERATION_ERROR                                            syscall.Errno = 648\n\tERROR_MOUNT_POINT_NOT_RESOLVED                                            syscall.Errno = 649\n\tERROR_INVALID_DEVICE_OBJECT_PARAMETER                                     syscall.Errno = 650\n\tERROR_MCA_OCCURED                                                         syscall.Errno = 651\n\tERROR_DRIVER_DATABASE_ERROR                                               syscall.Errno = 652\n\tERROR_SYSTEM_HIVE_TOO_LARGE                                               syscall.Errno = 653\n\tERROR_DRIVER_FAILED_PRIOR_UNLOAD                                          syscall.Errno = 654\n\tERROR_VOLSNAP_PREPARE_HIBERNATE                                           syscall.Errno = 655\n\tERROR_HIBERNATION_FAILURE                                                 syscall.Errno = 656\n\tERROR_PWD_TOO_LONG                                                        syscall.Errno = 657\n\tERROR_FILE_SYSTEM_LIMITATION                                              syscall.Errno = 665\n\tERROR_ASSERTION_FAILURE                                                   syscall.Errno = 668\n\tERROR_ACPI_ERROR                                                          syscall.Errno = 669\n\tERROR_WOW_ASSERTION                                                       syscall.Errno = 670\n\tERROR_PNP_BAD_MPS_TABLE                                                   syscall.Errno = 671\n\tERROR_PNP_TRANSLATION_FAILED                                              syscall.Errno = 672\n\tERROR_PNP_IRQ_TRANSLATION_FAILED                                          syscall.Errno = 673\n\tERROR_PNP_INVALID_ID                                                      syscall.Errno = 674\n\tERROR_WAKE_SYSTEM_DEBUGGER                                                syscall.Errno = 675\n\tERROR_HANDLES_CLOSED                                                      syscall.Errno = 676\n\tERROR_EXTRANEOUS_INFORMATION                                              syscall.Errno = 677\n\tERROR_RXACT_COMMIT_NECESSARY                                              syscall.Errno = 678\n\tERROR_MEDIA_CHECK                                                         syscall.Errno = 679\n\tERROR_GUID_SUBSTITUTION_MADE                                              syscall.Errno = 680\n\tERROR_STOPPED_ON_SYMLINK                                                  syscall.Errno = 681\n\tERROR_LONGJUMP                                                            syscall.Errno = 682\n\tERROR_PLUGPLAY_QUERY_VETOED                                               syscall.Errno = 683\n\tERROR_UNWIND_CONSOLIDATE                                                  syscall.Errno = 684\n\tERROR_REGISTRY_HIVE_RECOVERED                                             syscall.Errno = 685\n\tERROR_DLL_MIGHT_BE_INSECURE                                               syscall.Errno = 686\n\tERROR_DLL_MIGHT_BE_INCOMPATIBLE                                           syscall.Errno = 687\n\tERROR_DBG_EXCEPTION_NOT_HANDLED                                           syscall.Errno = 688\n\tERROR_DBG_REPLY_LATER                                                     syscall.Errno = 689\n\tERROR_DBG_UNABLE_TO_PROVIDE_HANDLE                                        syscall.Errno = 690\n\tERROR_DBG_TERMINATE_THREAD                                                syscall.Errno = 691\n\tERROR_DBG_TERMINATE_PROCESS                                               syscall.Errno = 692\n\tERROR_DBG_CONTROL_C                                                       syscall.Errno = 693\n\tERROR_DBG_PRINTEXCEPTION_C                                                syscall.Errno = 694\n\tERROR_DBG_RIPEXCEPTION                                                    syscall.Errno = 695\n\tERROR_DBG_CONTROL_BREAK                                                   syscall.Errno = 696\n\tERROR_DBG_COMMAND_EXCEPTION                                               syscall.Errno = 697\n\tERROR_OBJECT_NAME_EXISTS                                                  syscall.Errno = 698\n\tERROR_THREAD_WAS_SUSPENDED                                                syscall.Errno = 699\n\tERROR_IMAGE_NOT_AT_BASE                                                   syscall.Errno = 700\n\tERROR_RXACT_STATE_CREATED                                                 syscall.Errno = 701\n\tERROR_SEGMENT_NOTIFICATION                                                syscall.Errno = 702\n\tERROR_BAD_CURRENT_DIRECTORY                                               syscall.Errno = 703\n\tERROR_FT_READ_RECOVERY_FROM_BACKUP                                        syscall.Errno = 704\n\tERROR_FT_WRITE_RECOVERY                                                   syscall.Errno = 705\n\tERROR_IMAGE_MACHINE_TYPE_MISMATCH                                         syscall.Errno = 706\n\tERROR_RECEIVE_PARTIAL                                                     syscall.Errno = 707\n\tERROR_RECEIVE_EXPEDITED                                                   syscall.Errno = 708\n\tERROR_RECEIVE_PARTIAL_EXPEDITED                                           syscall.Errno = 709\n\tERROR_EVENT_DONE                                                          syscall.Errno = 710\n\tERROR_EVENT_PENDING                                                       syscall.Errno = 711\n\tERROR_CHECKING_FILE_SYSTEM                                                syscall.Errno = 712\n\tERROR_FATAL_APP_EXIT                                                      syscall.Errno = 713\n\tERROR_PREDEFINED_HANDLE                                                   syscall.Errno = 714\n\tERROR_WAS_UNLOCKED                                                        syscall.Errno = 715\n\tERROR_SERVICE_NOTIFICATION                                                syscall.Errno = 716\n\tERROR_WAS_LOCKED                                                          syscall.Errno = 717\n\tERROR_LOG_HARD_ERROR                                                      syscall.Errno = 718\n\tERROR_ALREADY_WIN32                                                       syscall.Errno = 719\n\tERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE                                     syscall.Errno = 720\n\tERROR_NO_YIELD_PERFORMED                                                  syscall.Errno = 721\n\tERROR_TIMER_RESUME_IGNORED                                                syscall.Errno = 722\n\tERROR_ARBITRATION_UNHANDLED                                               syscall.Errno = 723\n\tERROR_CARDBUS_NOT_SUPPORTED                                               syscall.Errno = 724\n\tERROR_MP_PROCESSOR_MISMATCH                                               syscall.Errno = 725\n\tERROR_HIBERNATED                                                          syscall.Errno = 726\n\tERROR_RESUME_HIBERNATION                                                  syscall.Errno = 727\n\tERROR_FIRMWARE_UPDATED                                                    syscall.Errno = 728\n\tERROR_DRIVERS_LEAKING_LOCKED_PAGES                                        syscall.Errno = 729\n\tERROR_WAKE_SYSTEM                                                         syscall.Errno = 730\n\tERROR_WAIT_1                                                              syscall.Errno = 731\n\tERROR_WAIT_2                                                              syscall.Errno = 732\n\tERROR_WAIT_3                                                              syscall.Errno = 733\n\tERROR_WAIT_63                                                             syscall.Errno = 734\n\tERROR_ABANDONED_WAIT_0                                                    syscall.Errno = 735\n\tERROR_ABANDONED_WAIT_63                                                   syscall.Errno = 736\n\tERROR_USER_APC                                                            syscall.Errno = 737\n\tERROR_KERNEL_APC                                                          syscall.Errno = 738\n\tERROR_ALERTED                                                             syscall.Errno = 739\n\tERROR_ELEVATION_REQUIRED                                                  syscall.Errno = 740\n\tERROR_REPARSE                                                             syscall.Errno = 741\n\tERROR_OPLOCK_BREAK_IN_PROGRESS                                            syscall.Errno = 742\n\tERROR_VOLUME_MOUNTED                                                      syscall.Errno = 743\n\tERROR_RXACT_COMMITTED                                                     syscall.Errno = 744\n\tERROR_NOTIFY_CLEANUP                                                      syscall.Errno = 745\n\tERROR_PRIMARY_TRANSPORT_CONNECT_FAILED                                    syscall.Errno = 746\n\tERROR_PAGE_FAULT_TRANSITION                                               syscall.Errno = 747\n\tERROR_PAGE_FAULT_DEMAND_ZERO                                              syscall.Errno = 748\n\tERROR_PAGE_FAULT_COPY_ON_WRITE                                            syscall.Errno = 749\n\tERROR_PAGE_FAULT_GUARD_PAGE                                               syscall.Errno = 750\n\tERROR_PAGE_FAULT_PAGING_FILE                                              syscall.Errno = 751\n\tERROR_CACHE_PAGE_LOCKED                                                   syscall.Errno = 752\n\tERROR_CRASH_DUMP                                                          syscall.Errno = 753\n\tERROR_BUFFER_ALL_ZEROS                                                    syscall.Errno = 754\n\tERROR_REPARSE_OBJECT                                                      syscall.Errno = 755\n\tERROR_RESOURCE_REQUIREMENTS_CHANGED                                       syscall.Errno = 756\n\tERROR_TRANSLATION_COMPLETE                                                syscall.Errno = 757\n\tERROR_NOTHING_TO_TERMINATE                                                syscall.Errno = 758\n\tERROR_PROCESS_NOT_IN_JOB                                                  syscall.Errno = 759\n\tERROR_PROCESS_IN_JOB                                                      syscall.Errno = 760\n\tERROR_VOLSNAP_HIBERNATE_READY                                             syscall.Errno = 761\n\tERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY                                  syscall.Errno = 762\n\tERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED                                  syscall.Errno = 763\n\tERROR_INTERRUPT_STILL_CONNECTED                                           syscall.Errno = 764\n\tERROR_WAIT_FOR_OPLOCK                                                     syscall.Errno = 765\n\tERROR_DBG_EXCEPTION_HANDLED                                               syscall.Errno = 766\n\tERROR_DBG_CONTINUE                                                        syscall.Errno = 767\n\tERROR_CALLBACK_POP_STACK                                                  syscall.Errno = 768\n\tERROR_COMPRESSION_DISABLED                                                syscall.Errno = 769\n\tERROR_CANTFETCHBACKWARDS                                                  syscall.Errno = 770\n\tERROR_CANTSCROLLBACKWARDS                                                 syscall.Errno = 771\n\tERROR_ROWSNOTRELEASED                                                     syscall.Errno = 772\n\tERROR_BAD_ACCESSOR_FLAGS                                                  syscall.Errno = 773\n\tERROR_ERRORS_ENCOUNTERED                                                  syscall.Errno = 774\n\tERROR_NOT_CAPABLE                                                         syscall.Errno = 775\n\tERROR_REQUEST_OUT_OF_SEQUENCE                                             syscall.Errno = 776\n\tERROR_VERSION_PARSE_ERROR                                                 syscall.Errno = 777\n\tERROR_BADSTARTPOSITION                                                    syscall.Errno = 778\n\tERROR_MEMORY_HARDWARE                                                     syscall.Errno = 779\n\tERROR_DISK_REPAIR_DISABLED                                                syscall.Errno = 780\n\tERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE             syscall.Errno = 781\n\tERROR_SYSTEM_POWERSTATE_TRANSITION                                        syscall.Errno = 782\n\tERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION                                syscall.Errno = 783\n\tERROR_MCA_EXCEPTION                                                       syscall.Errno = 784\n\tERROR_ACCESS_AUDIT_BY_POLICY                                              syscall.Errno = 785\n\tERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY                               syscall.Errno = 786\n\tERROR_ABANDON_HIBERFILE                                                   syscall.Errno = 787\n\tERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED                          syscall.Errno = 788\n\tERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR                          syscall.Errno = 789\n\tERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR                              syscall.Errno = 790\n\tERROR_BAD_MCFG_TABLE                                                      syscall.Errno = 791\n\tERROR_DISK_REPAIR_REDIRECTED                                              syscall.Errno = 792\n\tERROR_DISK_REPAIR_UNSUCCESSFUL                                            syscall.Errno = 793\n\tERROR_CORRUPT_LOG_OVERFULL                                                syscall.Errno = 794\n\tERROR_CORRUPT_LOG_CORRUPTED                                               syscall.Errno = 795\n\tERROR_CORRUPT_LOG_UNAVAILABLE                                             syscall.Errno = 796\n\tERROR_CORRUPT_LOG_DELETED_FULL                                            syscall.Errno = 797\n\tERROR_CORRUPT_LOG_CLEARED                                                 syscall.Errno = 798\n\tERROR_ORPHAN_NAME_EXHAUSTED                                               syscall.Errno = 799\n\tERROR_OPLOCK_SWITCHED_TO_NEW_HANDLE                                       syscall.Errno = 800\n\tERROR_CANNOT_GRANT_REQUESTED_OPLOCK                                       syscall.Errno = 801\n\tERROR_CANNOT_BREAK_OPLOCK                                                 syscall.Errno = 802\n\tERROR_OPLOCK_HANDLE_CLOSED                                                syscall.Errno = 803\n\tERROR_NO_ACE_CONDITION                                                    syscall.Errno = 804\n\tERROR_INVALID_ACE_CONDITION                                               syscall.Errno = 805\n\tERROR_FILE_HANDLE_REVOKED                                                 syscall.Errno = 806\n\tERROR_IMAGE_AT_DIFFERENT_BASE                                             syscall.Errno = 807\n\tERROR_ENCRYPTED_IO_NOT_POSSIBLE                                           syscall.Errno = 808\n\tERROR_FILE_METADATA_OPTIMIZATION_IN_PROGRESS                              syscall.Errno = 809\n\tERROR_QUOTA_ACTIVITY                                                      syscall.Errno = 810\n\tERROR_HANDLE_REVOKED                                                      syscall.Errno = 811\n\tERROR_CALLBACK_INVOKE_INLINE                                              syscall.Errno = 812\n\tERROR_CPU_SET_INVALID                                                     syscall.Errno = 813\n\tERROR_ENCLAVE_NOT_TERMINATED                                              syscall.Errno = 814\n\tERROR_ENCLAVE_VIOLATION                                                   syscall.Errno = 815\n\tERROR_EA_ACCESS_DENIED                                                    syscall.Errno = 994\n\tERROR_OPERATION_ABORTED                                                   syscall.Errno = 995\n\tERROR_IO_INCOMPLETE                                                       syscall.Errno = 996\n\tERROR_IO_PENDING                                                          syscall.Errno = 997\n\tERROR_NOACCESS                                                            syscall.Errno = 998\n\tERROR_SWAPERROR                                                           syscall.Errno = 999\n\tERROR_STACK_OVERFLOW                                                      syscall.Errno = 1001\n\tERROR_INVALID_MESSAGE                                                     syscall.Errno = 1002\n\tERROR_CAN_NOT_COMPLETE                                                    syscall.Errno = 1003\n\tERROR_INVALID_FLAGS                                                       syscall.Errno = 1004\n\tERROR_UNRECOGNIZED_VOLUME                                                 syscall.Errno = 1005\n\tERROR_FILE_INVALID                                                        syscall.Errno = 1006\n\tERROR_FULLSCREEN_MODE                                                     syscall.Errno = 1007\n\tERROR_NO_TOKEN                                                            syscall.Errno = 1008\n\tERROR_BADDB                                                               syscall.Errno = 1009\n\tERROR_BADKEY                                                              syscall.Errno = 1010\n\tERROR_CANTOPEN                                                            syscall.Errno = 1011\n\tERROR_CANTREAD                                                            syscall.Errno = 1012\n\tERROR_CANTWRITE                                                           syscall.Errno = 1013\n\tERROR_REGISTRY_RECOVERED                                                  syscall.Errno = 1014\n\tERROR_REGISTRY_CORRUPT                                                    syscall.Errno = 1015\n\tERROR_REGISTRY_IO_FAILED                                                  syscall.Errno = 1016\n\tERROR_NOT_REGISTRY_FILE                                                   syscall.Errno = 1017\n\tERROR_KEY_DELETED                                                         syscall.Errno = 1018\n\tERROR_NO_LOG_SPACE                                                        syscall.Errno = 1019\n\tERROR_KEY_HAS_CHILDREN                                                    syscall.Errno = 1020\n\tERROR_CHILD_MUST_BE_VOLATILE                                              syscall.Errno = 1021\n\tERROR_NOTIFY_ENUM_DIR                                                     syscall.Errno = 1022\n\tERROR_DEPENDENT_SERVICES_RUNNING                                          syscall.Errno = 1051\n\tERROR_INVALID_SERVICE_CONTROL                                             syscall.Errno = 1052\n\tERROR_SERVICE_REQUEST_TIMEOUT                                             syscall.Errno = 1053\n\tERROR_SERVICE_NO_THREAD                                                   syscall.Errno = 1054\n\tERROR_SERVICE_DATABASE_LOCKED                                             syscall.Errno = 1055\n\tERROR_SERVICE_ALREADY_RUNNING                                             syscall.Errno = 1056\n\tERROR_INVALID_SERVICE_ACCOUNT                                             syscall.Errno = 1057\n\tERROR_SERVICE_DISABLED                                                    syscall.Errno = 1058\n\tERROR_CIRCULAR_DEPENDENCY                                                 syscall.Errno = 1059\n\tERROR_SERVICE_DOES_NOT_EXIST                                              syscall.Errno = 1060\n\tERROR_SERVICE_CANNOT_ACCEPT_CTRL                                          syscall.Errno = 1061\n\tERROR_SERVICE_NOT_ACTIVE                                                  syscall.Errno = 1062\n\tERROR_FAILED_SERVICE_CONTROLLER_CONNECT                                   syscall.Errno = 1063\n\tERROR_EXCEPTION_IN_SERVICE                                                syscall.Errno = 1064\n\tERROR_DATABASE_DOES_NOT_EXIST                                             syscall.Errno = 1065\n\tERROR_SERVICE_SPECIFIC_ERROR                                              syscall.Errno = 1066\n\tERROR_PROCESS_ABORTED                                                     syscall.Errno = 1067\n\tERROR_SERVICE_DEPENDENCY_FAIL                                             syscall.Errno = 1068\n\tERROR_SERVICE_LOGON_FAILED                                                syscall.Errno = 1069\n\tERROR_SERVICE_START_HANG                                                  syscall.Errno = 1070\n\tERROR_INVALID_SERVICE_LOCK                                                syscall.Errno = 1071\n\tERROR_SERVICE_MARKED_FOR_DELETE                                           syscall.Errno = 1072\n\tERROR_SERVICE_EXISTS                                                      syscall.Errno = 1073\n\tERROR_ALREADY_RUNNING_LKG                                                 syscall.Errno = 1074\n\tERROR_SERVICE_DEPENDENCY_DELETED                                          syscall.Errno = 1075\n\tERROR_BOOT_ALREADY_ACCEPTED                                               syscall.Errno = 1076\n\tERROR_SERVICE_NEVER_STARTED                                               syscall.Errno = 1077\n\tERROR_DUPLICATE_SERVICE_NAME                                              syscall.Errno = 1078\n\tERROR_DIFFERENT_SERVICE_ACCOUNT                                           syscall.Errno = 1079\n\tERROR_CANNOT_DETECT_DRIVER_FAILURE                                        syscall.Errno = 1080\n\tERROR_CANNOT_DETECT_PROCESS_ABORT                                         syscall.Errno = 1081\n\tERROR_NO_RECOVERY_PROGRAM                                                 syscall.Errno = 1082\n\tERROR_SERVICE_NOT_IN_EXE                                                  syscall.Errno = 1083\n\tERROR_NOT_SAFEBOOT_SERVICE                                                syscall.Errno = 1084\n\tERROR_END_OF_MEDIA                                                        syscall.Errno = 1100\n\tERROR_FILEMARK_DETECTED                                                   syscall.Errno = 1101\n\tERROR_BEGINNING_OF_MEDIA                                                  syscall.Errno = 1102\n\tERROR_SETMARK_DETECTED                                                    syscall.Errno = 1103\n\tERROR_NO_DATA_DETECTED                                                    syscall.Errno = 1104\n\tERROR_PARTITION_FAILURE                                                   syscall.Errno = 1105\n\tERROR_INVALID_BLOCK_LENGTH                                                syscall.Errno = 1106\n\tERROR_DEVICE_NOT_PARTITIONED                                              syscall.Errno = 1107\n\tERROR_UNABLE_TO_LOCK_MEDIA                                                syscall.Errno = 1108\n\tERROR_UNABLE_TO_UNLOAD_MEDIA                                              syscall.Errno = 1109\n\tERROR_MEDIA_CHANGED                                                       syscall.Errno = 1110\n\tERROR_BUS_RESET                                                           syscall.Errno = 1111\n\tERROR_NO_MEDIA_IN_DRIVE                                                   syscall.Errno = 1112\n\tERROR_NO_UNICODE_TRANSLATION                                              syscall.Errno = 1113\n\tERROR_DLL_INIT_FAILED                                                     syscall.Errno = 1114\n\tERROR_SHUTDOWN_IN_PROGRESS                                                syscall.Errno = 1115\n\tERROR_NO_SHUTDOWN_IN_PROGRESS                                             syscall.Errno = 1116\n\tERROR_IO_DEVICE                                                           syscall.Errno = 1117\n\tERROR_SERIAL_NO_DEVICE                                                    syscall.Errno = 1118\n\tERROR_IRQ_BUSY                                                            syscall.Errno = 1119\n\tERROR_MORE_WRITES                                                         syscall.Errno = 1120\n\tERROR_COUNTER_TIMEOUT                                                     syscall.Errno = 1121\n\tERROR_FLOPPY_ID_MARK_NOT_FOUND                                            syscall.Errno = 1122\n\tERROR_FLOPPY_WRONG_CYLINDER                                               syscall.Errno = 1123\n\tERROR_FLOPPY_UNKNOWN_ERROR                                                syscall.Errno = 1124\n\tERROR_FLOPPY_BAD_REGISTERS                                                syscall.Errno = 1125\n\tERROR_DISK_RECALIBRATE_FAILED                                             syscall.Errno = 1126\n\tERROR_DISK_OPERATION_FAILED                                               syscall.Errno = 1127\n\tERROR_DISK_RESET_FAILED                                                   syscall.Errno = 1128\n\tERROR_EOM_OVERFLOW                                                        syscall.Errno = 1129\n\tERROR_NOT_ENOUGH_SERVER_MEMORY                                            syscall.Errno = 1130\n\tERROR_POSSIBLE_DEADLOCK                                                   syscall.Errno = 1131\n\tERROR_MAPPED_ALIGNMENT                                                    syscall.Errno = 1132\n\tERROR_SET_POWER_STATE_VETOED                                              syscall.Errno = 1140\n\tERROR_SET_POWER_STATE_FAILED                                              syscall.Errno = 1141\n\tERROR_TOO_MANY_LINKS                                                      syscall.Errno = 1142\n\tERROR_OLD_WIN_VERSION                                                     syscall.Errno = 1150\n\tERROR_APP_WRONG_OS                                                        syscall.Errno = 1151\n\tERROR_SINGLE_INSTANCE_APP                                                 syscall.Errno = 1152\n\tERROR_RMODE_APP                                                           syscall.Errno = 1153\n\tERROR_INVALID_DLL                                                         syscall.Errno = 1154\n\tERROR_NO_ASSOCIATION                                                      syscall.Errno = 1155\n\tERROR_DDE_FAIL                                                            syscall.Errno = 1156\n\tERROR_DLL_NOT_FOUND                                                       syscall.Errno = 1157\n\tERROR_NO_MORE_USER_HANDLES                                                syscall.Errno = 1158\n\tERROR_MESSAGE_SYNC_ONLY                                                   syscall.Errno = 1159\n\tERROR_SOURCE_ELEMENT_EMPTY                                                syscall.Errno = 1160\n\tERROR_DESTINATION_ELEMENT_FULL                                            syscall.Errno = 1161\n\tERROR_ILLEGAL_ELEMENT_ADDRESS                                             syscall.Errno = 1162\n\tERROR_MAGAZINE_NOT_PRESENT                                                syscall.Errno = 1163\n\tERROR_DEVICE_REINITIALIZATION_NEEDED                                      syscall.Errno = 1164\n\tERROR_DEVICE_REQUIRES_CLEANING                                            syscall.Errno = 1165\n\tERROR_DEVICE_DOOR_OPEN                                                    syscall.Errno = 1166\n\tERROR_DEVICE_NOT_CONNECTED                                                syscall.Errno = 1167\n\tERROR_NOT_FOUND                                                           syscall.Errno = 1168\n\tERROR_NO_MATCH                                                            syscall.Errno = 1169\n\tERROR_SET_NOT_FOUND                                                       syscall.Errno = 1170\n\tERROR_POINT_NOT_FOUND                                                     syscall.Errno = 1171\n\tERROR_NO_TRACKING_SERVICE                                                 syscall.Errno = 1172\n\tERROR_NO_VOLUME_ID                                                        syscall.Errno = 1173\n\tERROR_UNABLE_TO_REMOVE_REPLACED                                           syscall.Errno = 1175\n\tERROR_UNABLE_TO_MOVE_REPLACEMENT                                          syscall.Errno = 1176\n\tERROR_UNABLE_TO_MOVE_REPLACEMENT_2                                        syscall.Errno = 1177\n\tERROR_JOURNAL_DELETE_IN_PROGRESS                                          syscall.Errno = 1178\n\tERROR_JOURNAL_NOT_ACTIVE                                                  syscall.Errno = 1179\n\tERROR_POTENTIAL_FILE_FOUND                                                syscall.Errno = 1180\n\tERROR_JOURNAL_ENTRY_DELETED                                               syscall.Errno = 1181\n\tERROR_SHUTDOWN_IS_SCHEDULED                                               syscall.Errno = 1190\n\tERROR_SHUTDOWN_USERS_LOGGED_ON                                            syscall.Errno = 1191\n\tERROR_BAD_DEVICE                                                          syscall.Errno = 1200\n\tERROR_CONNECTION_UNAVAIL                                                  syscall.Errno = 1201\n\tERROR_DEVICE_ALREADY_REMEMBERED                                           syscall.Errno = 1202\n\tERROR_NO_NET_OR_BAD_PATH                                                  syscall.Errno = 1203\n\tERROR_BAD_PROVIDER                                                        syscall.Errno = 1204\n\tERROR_CANNOT_OPEN_PROFILE                                                 syscall.Errno = 1205\n\tERROR_BAD_PROFILE                                                         syscall.Errno = 1206\n\tERROR_NOT_CONTAINER                                                       syscall.Errno = 1207\n\tERROR_EXTENDED_ERROR                                                      syscall.Errno = 1208\n\tERROR_INVALID_GROUPNAME                                                   syscall.Errno = 1209\n\tERROR_INVALID_COMPUTERNAME                                                syscall.Errno = 1210\n\tERROR_INVALID_EVENTNAME                                                   syscall.Errno = 1211\n\tERROR_INVALID_DOMAINNAME                                                  syscall.Errno = 1212\n\tERROR_INVALID_SERVICENAME                                                 syscall.Errno = 1213\n\tERROR_INVALID_NETNAME                                                     syscall.Errno = 1214\n\tERROR_INVALID_SHARENAME                                                   syscall.Errno = 1215\n\tERROR_INVALID_PASSWORDNAME                                                syscall.Errno = 1216\n\tERROR_INVALID_MESSAGENAME                                                 syscall.Errno = 1217\n\tERROR_INVALID_MESSAGEDEST                                                 syscall.Errno = 1218\n\tERROR_SESSION_CREDENTIAL_CONFLICT                                         syscall.Errno = 1219\n\tERROR_REMOTE_SESSION_LIMIT_EXCEEDED                                       syscall.Errno = 1220\n\tERROR_DUP_DOMAINNAME                                                      syscall.Errno = 1221\n\tERROR_NO_NETWORK                                                          syscall.Errno = 1222\n\tERROR_CANCELLED                                                           syscall.Errno = 1223\n\tERROR_USER_MAPPED_FILE                                                    syscall.Errno = 1224\n\tERROR_CONNECTION_REFUSED                                                  syscall.Errno = 1225\n\tERROR_GRACEFUL_DISCONNECT                                                 syscall.Errno = 1226\n\tERROR_ADDRESS_ALREADY_ASSOCIATED                                          syscall.Errno = 1227\n\tERROR_ADDRESS_NOT_ASSOCIATED                                              syscall.Errno = 1228\n\tERROR_CONNECTION_INVALID                                                  syscall.Errno = 1229\n\tERROR_CONNECTION_ACTIVE                                                   syscall.Errno = 1230\n\tERROR_NETWORK_UNREACHABLE                                                 syscall.Errno = 1231\n\tERROR_HOST_UNREACHABLE                                                    syscall.Errno = 1232\n\tERROR_PROTOCOL_UNREACHABLE                                                syscall.Errno = 1233\n\tERROR_PORT_UNREACHABLE                                                    syscall.Errno = 1234\n\tERROR_REQUEST_ABORTED                                                     syscall.Errno = 1235\n\tERROR_CONNECTION_ABORTED                                                  syscall.Errno = 1236\n\tERROR_RETRY                                                               syscall.Errno = 1237\n\tERROR_CONNECTION_COUNT_LIMIT                                              syscall.Errno = 1238\n\tERROR_LOGIN_TIME_RESTRICTION                                              syscall.Errno = 1239\n\tERROR_LOGIN_WKSTA_RESTRICTION                                             syscall.Errno = 1240\n\tERROR_INCORRECT_ADDRESS                                                   syscall.Errno = 1241\n\tERROR_ALREADY_REGISTERED                                                  syscall.Errno = 1242\n\tERROR_SERVICE_NOT_FOUND                                                   syscall.Errno = 1243\n\tERROR_NOT_AUTHENTICATED                                                   syscall.Errno = 1244\n\tERROR_NOT_LOGGED_ON                                                       syscall.Errno = 1245\n\tERROR_CONTINUE                                                            syscall.Errno = 1246\n\tERROR_ALREADY_INITIALIZED                                                 syscall.Errno = 1247\n\tERROR_NO_MORE_DEVICES                                                     syscall.Errno = 1248\n\tERROR_NO_SUCH_SITE                                                        syscall.Errno = 1249\n\tERROR_DOMAIN_CONTROLLER_EXISTS                                            syscall.Errno = 1250\n\tERROR_ONLY_IF_CONNECTED                                                   syscall.Errno = 1251\n\tERROR_OVERRIDE_NOCHANGES                                                  syscall.Errno = 1252\n\tERROR_BAD_USER_PROFILE                                                    syscall.Errno = 1253\n\tERROR_NOT_SUPPORTED_ON_SBS                                                syscall.Errno = 1254\n\tERROR_SERVER_SHUTDOWN_IN_PROGRESS                                         syscall.Errno = 1255\n\tERROR_HOST_DOWN                                                           syscall.Errno = 1256\n\tERROR_NON_ACCOUNT_SID                                                     syscall.Errno = 1257\n\tERROR_NON_DOMAIN_SID                                                      syscall.Errno = 1258\n\tERROR_APPHELP_BLOCK                                                       syscall.Errno = 1259\n\tERROR_ACCESS_DISABLED_BY_POLICY                                           syscall.Errno = 1260\n\tERROR_REG_NAT_CONSUMPTION                                                 syscall.Errno = 1261\n\tERROR_CSCSHARE_OFFLINE                                                    syscall.Errno = 1262\n\tERROR_PKINIT_FAILURE                                                      syscall.Errno = 1263\n\tERROR_SMARTCARD_SUBSYSTEM_FAILURE                                         syscall.Errno = 1264\n\tERROR_DOWNGRADE_DETECTED                                                  syscall.Errno = 1265\n\tERROR_MACHINE_LOCKED                                                      syscall.Errno = 1271\n\tERROR_SMB_GUEST_LOGON_BLOCKED                                             syscall.Errno = 1272\n\tERROR_CALLBACK_SUPPLIED_INVALID_DATA                                      syscall.Errno = 1273\n\tERROR_SYNC_FOREGROUND_REFRESH_REQUIRED                                    syscall.Errno = 1274\n\tERROR_DRIVER_BLOCKED                                                      syscall.Errno = 1275\n\tERROR_INVALID_IMPORT_OF_NON_DLL                                           syscall.Errno = 1276\n\tERROR_ACCESS_DISABLED_WEBBLADE                                            syscall.Errno = 1277\n\tERROR_ACCESS_DISABLED_WEBBLADE_TAMPER                                     syscall.Errno = 1278\n\tERROR_RECOVERY_FAILURE                                                    syscall.Errno = 1279\n\tERROR_ALREADY_FIBER                                                       syscall.Errno = 1280\n\tERROR_ALREADY_THREAD                                                      syscall.Errno = 1281\n\tERROR_STACK_BUFFER_OVERRUN                                                syscall.Errno = 1282\n\tERROR_PARAMETER_QUOTA_EXCEEDED                                            syscall.Errno = 1283\n\tERROR_DEBUGGER_INACTIVE                                                   syscall.Errno = 1284\n\tERROR_DELAY_LOAD_FAILED                                                   syscall.Errno = 1285\n\tERROR_VDM_DISALLOWED                                                      syscall.Errno = 1286\n\tERROR_UNIDENTIFIED_ERROR                                                  syscall.Errno = 1287\n\tERROR_INVALID_CRUNTIME_PARAMETER                                          syscall.Errno = 1288\n\tERROR_BEYOND_VDL                                                          syscall.Errno = 1289\n\tERROR_INCOMPATIBLE_SERVICE_SID_TYPE                                       syscall.Errno = 1290\n\tERROR_DRIVER_PROCESS_TERMINATED                                           syscall.Errno = 1291\n\tERROR_IMPLEMENTATION_LIMIT                                                syscall.Errno = 1292\n\tERROR_PROCESS_IS_PROTECTED                                                syscall.Errno = 1293\n\tERROR_SERVICE_NOTIFY_CLIENT_LAGGING                                       syscall.Errno = 1294\n\tERROR_DISK_QUOTA_EXCEEDED                                                 syscall.Errno = 1295\n\tERROR_CONTENT_BLOCKED                                                     syscall.Errno = 1296\n\tERROR_INCOMPATIBLE_SERVICE_PRIVILEGE                                      syscall.Errno = 1297\n\tERROR_APP_HANG                                                            syscall.Errno = 1298\n\tERROR_INVALID_LABEL                                                       syscall.Errno = 1299\n\tERROR_NOT_ALL_ASSIGNED                                                    syscall.Errno = 1300\n\tERROR_SOME_NOT_MAPPED                                                     syscall.Errno = 1301\n\tERROR_NO_QUOTAS_FOR_ACCOUNT                                               syscall.Errno = 1302\n\tERROR_LOCAL_USER_SESSION_KEY                                              syscall.Errno = 1303\n\tERROR_NULL_LM_PASSWORD                                                    syscall.Errno = 1304\n\tERROR_UNKNOWN_REVISION                                                    syscall.Errno = 1305\n\tERROR_REVISION_MISMATCH                                                   syscall.Errno = 1306\n\tERROR_INVALID_OWNER                                                       syscall.Errno = 1307\n\tERROR_INVALID_PRIMARY_GROUP                                               syscall.Errno = 1308\n\tERROR_NO_IMPERSONATION_TOKEN                                              syscall.Errno = 1309\n\tERROR_CANT_DISABLE_MANDATORY                                              syscall.Errno = 1310\n\tERROR_NO_LOGON_SERVERS                                                    syscall.Errno = 1311\n\tERROR_NO_SUCH_LOGON_SESSION                                               syscall.Errno = 1312\n\tERROR_NO_SUCH_PRIVILEGE                                                   syscall.Errno = 1313\n\tERROR_PRIVILEGE_NOT_HELD                                                  syscall.Errno = 1314\n\tERROR_INVALID_ACCOUNT_NAME                                                syscall.Errno = 1315\n\tERROR_USER_EXISTS                                                         syscall.Errno = 1316\n\tERROR_NO_SUCH_USER                                                        syscall.Errno = 1317\n\tERROR_GROUP_EXISTS                                                        syscall.Errno = 1318\n\tERROR_NO_SUCH_GROUP                                                       syscall.Errno = 1319\n\tERROR_MEMBER_IN_GROUP                                                     syscall.Errno = 1320\n\tERROR_MEMBER_NOT_IN_GROUP                                                 syscall.Errno = 1321\n\tERROR_LAST_ADMIN                                                          syscall.Errno = 1322\n\tERROR_WRONG_PASSWORD                                                      syscall.Errno = 1323\n\tERROR_ILL_FORMED_PASSWORD                                                 syscall.Errno = 1324\n\tERROR_PASSWORD_RESTRICTION                                                syscall.Errno = 1325\n\tERROR_LOGON_FAILURE                                                       syscall.Errno = 1326\n\tERROR_ACCOUNT_RESTRICTION                                                 syscall.Errno = 1327\n\tERROR_INVALID_LOGON_HOURS                                                 syscall.Errno = 1328\n\tERROR_INVALID_WORKSTATION                                                 syscall.Errno = 1329\n\tERROR_PASSWORD_EXPIRED                                                    syscall.Errno = 1330\n\tERROR_ACCOUNT_DISABLED                                                    syscall.Errno = 1331\n\tERROR_NONE_MAPPED                                                         syscall.Errno = 1332\n\tERROR_TOO_MANY_LUIDS_REQUESTED                                            syscall.Errno = 1333\n\tERROR_LUIDS_EXHAUSTED                                                     syscall.Errno = 1334\n\tERROR_INVALID_SUB_AUTHORITY                                               syscall.Errno = 1335\n\tERROR_INVALID_ACL                                                         syscall.Errno = 1336\n\tERROR_INVALID_SID                                                         syscall.Errno = 1337\n\tERROR_INVALID_SECURITY_DESCR                                              syscall.Errno = 1338\n\tERROR_BAD_INHERITANCE_ACL                                                 syscall.Errno = 1340\n\tERROR_SERVER_DISABLED                                                     syscall.Errno = 1341\n\tERROR_SERVER_NOT_DISABLED                                                 syscall.Errno = 1342\n\tERROR_INVALID_ID_AUTHORITY                                                syscall.Errno = 1343\n\tERROR_ALLOTTED_SPACE_EXCEEDED                                             syscall.Errno = 1344\n\tERROR_INVALID_GROUP_ATTRIBUTES                                            syscall.Errno = 1345\n\tERROR_BAD_IMPERSONATION_LEVEL                                             syscall.Errno = 1346\n\tERROR_CANT_OPEN_ANONYMOUS                                                 syscall.Errno = 1347\n\tERROR_BAD_VALIDATION_CLASS                                                syscall.Errno = 1348\n\tERROR_BAD_TOKEN_TYPE                                                      syscall.Errno = 1349\n\tERROR_NO_SECURITY_ON_OBJECT                                               syscall.Errno = 1350\n\tERROR_CANT_ACCESS_DOMAIN_INFO                                             syscall.Errno = 1351\n\tERROR_INVALID_SERVER_STATE                                                syscall.Errno = 1352\n\tERROR_INVALID_DOMAIN_STATE                                                syscall.Errno = 1353\n\tERROR_INVALID_DOMAIN_ROLE                                                 syscall.Errno = 1354\n\tERROR_NO_SUCH_DOMAIN                                                      syscall.Errno = 1355\n\tERROR_DOMAIN_EXISTS                                                       syscall.Errno = 1356\n\tERROR_DOMAIN_LIMIT_EXCEEDED                                               syscall.Errno = 1357\n\tERROR_INTERNAL_DB_CORRUPTION                                              syscall.Errno = 1358\n\tERROR_INTERNAL_ERROR                                                      syscall.Errno = 1359\n\tERROR_GENERIC_NOT_MAPPED                                                  syscall.Errno = 1360\n\tERROR_BAD_DESCRIPTOR_FORMAT                                               syscall.Errno = 1361\n\tERROR_NOT_LOGON_PROCESS                                                   syscall.Errno = 1362\n\tERROR_LOGON_SESSION_EXISTS                                                syscall.Errno = 1363\n\tERROR_NO_SUCH_PACKAGE                                                     syscall.Errno = 1364\n\tERROR_BAD_LOGON_SESSION_STATE                                             syscall.Errno = 1365\n\tERROR_LOGON_SESSION_COLLISION                                             syscall.Errno = 1366\n\tERROR_INVALID_LOGON_TYPE                                                  syscall.Errno = 1367\n\tERROR_CANNOT_IMPERSONATE                                                  syscall.Errno = 1368\n\tERROR_RXACT_INVALID_STATE                                                 syscall.Errno = 1369\n\tERROR_RXACT_COMMIT_FAILURE                                                syscall.Errno = 1370\n\tERROR_SPECIAL_ACCOUNT                                                     syscall.Errno = 1371\n\tERROR_SPECIAL_GROUP                                                       syscall.Errno = 1372\n\tERROR_SPECIAL_USER                                                        syscall.Errno = 1373\n\tERROR_MEMBERS_PRIMARY_GROUP                                               syscall.Errno = 1374\n\tERROR_TOKEN_ALREADY_IN_USE                                                syscall.Errno = 1375\n\tERROR_NO_SUCH_ALIAS                                                       syscall.Errno = 1376\n\tERROR_MEMBER_NOT_IN_ALIAS                                                 syscall.Errno = 1377\n\tERROR_MEMBER_IN_ALIAS                                                     syscall.Errno = 1378\n\tERROR_ALIAS_EXISTS                                                        syscall.Errno = 1379\n\tERROR_LOGON_NOT_GRANTED                                                   syscall.Errno = 1380\n\tERROR_TOO_MANY_SECRETS                                                    syscall.Errno = 1381\n\tERROR_SECRET_TOO_LONG                                                     syscall.Errno = 1382\n\tERROR_INTERNAL_DB_ERROR                                                   syscall.Errno = 1383\n\tERROR_TOO_MANY_CONTEXT_IDS                                                syscall.Errno = 1384\n\tERROR_LOGON_TYPE_NOT_GRANTED                                              syscall.Errno = 1385\n\tERROR_NT_CROSS_ENCRYPTION_REQUIRED                                        syscall.Errno = 1386\n\tERROR_NO_SUCH_MEMBER                                                      syscall.Errno = 1387\n\tERROR_INVALID_MEMBER                                                      syscall.Errno = 1388\n\tERROR_TOO_MANY_SIDS                                                       syscall.Errno = 1389\n\tERROR_LM_CROSS_ENCRYPTION_REQUIRED                                        syscall.Errno = 1390\n\tERROR_NO_INHERITANCE                                                      syscall.Errno = 1391\n\tERROR_FILE_CORRUPT                                                        syscall.Errno = 1392\n\tERROR_DISK_CORRUPT                                                        syscall.Errno = 1393\n\tERROR_NO_USER_SESSION_KEY                                                 syscall.Errno = 1394\n\tERROR_LICENSE_QUOTA_EXCEEDED                                              syscall.Errno = 1395\n\tERROR_WRONG_TARGET_NAME                                                   syscall.Errno = 1396\n\tERROR_MUTUAL_AUTH_FAILED                                                  syscall.Errno = 1397\n\tERROR_TIME_SKEW                                                           syscall.Errno = 1398\n\tERROR_CURRENT_DOMAIN_NOT_ALLOWED                                          syscall.Errno = 1399\n\tERROR_INVALID_WINDOW_HANDLE                                               syscall.Errno = 1400\n\tERROR_INVALID_MENU_HANDLE                                                 syscall.Errno = 1401\n\tERROR_INVALID_CURSOR_HANDLE                                               syscall.Errno = 1402\n\tERROR_INVALID_ACCEL_HANDLE                                                syscall.Errno = 1403\n\tERROR_INVALID_HOOK_HANDLE                                                 syscall.Errno = 1404\n\tERROR_INVALID_DWP_HANDLE                                                  syscall.Errno = 1405\n\tERROR_TLW_WITH_WSCHILD                                                    syscall.Errno = 1406\n\tERROR_CANNOT_FIND_WND_CLASS                                               syscall.Errno = 1407\n\tERROR_WINDOW_OF_OTHER_THREAD                                              syscall.Errno = 1408\n\tERROR_HOTKEY_ALREADY_REGISTERED                                           syscall.Errno = 1409\n\tERROR_CLASS_ALREADY_EXISTS                                                syscall.Errno = 1410\n\tERROR_CLASS_DOES_NOT_EXIST                                                syscall.Errno = 1411\n\tERROR_CLASS_HAS_WINDOWS                                                   syscall.Errno = 1412\n\tERROR_INVALID_INDEX                                                       syscall.Errno = 1413\n\tERROR_INVALID_ICON_HANDLE                                                 syscall.Errno = 1414\n\tERROR_PRIVATE_DIALOG_INDEX                                                syscall.Errno = 1415\n\tERROR_LISTBOX_ID_NOT_FOUND                                                syscall.Errno = 1416\n\tERROR_NO_WILDCARD_CHARACTERS                                              syscall.Errno = 1417\n\tERROR_CLIPBOARD_NOT_OPEN                                                  syscall.Errno = 1418\n\tERROR_HOTKEY_NOT_REGISTERED                                               syscall.Errno = 1419\n\tERROR_WINDOW_NOT_DIALOG                                                   syscall.Errno = 1420\n\tERROR_CONTROL_ID_NOT_FOUND                                                syscall.Errno = 1421\n\tERROR_INVALID_COMBOBOX_MESSAGE                                            syscall.Errno = 1422\n\tERROR_WINDOW_NOT_COMBOBOX                                                 syscall.Errno = 1423\n\tERROR_INVALID_EDIT_HEIGHT                                                 syscall.Errno = 1424\n\tERROR_DC_NOT_FOUND                                                        syscall.Errno = 1425\n\tERROR_INVALID_HOOK_FILTER                                                 syscall.Errno = 1426\n\tERROR_INVALID_FILTER_PROC                                                 syscall.Errno = 1427\n\tERROR_HOOK_NEEDS_HMOD                                                     syscall.Errno = 1428\n\tERROR_GLOBAL_ONLY_HOOK                                                    syscall.Errno = 1429\n\tERROR_JOURNAL_HOOK_SET                                                    syscall.Errno = 1430\n\tERROR_HOOK_NOT_INSTALLED                                                  syscall.Errno = 1431\n\tERROR_INVALID_LB_MESSAGE                                                  syscall.Errno = 1432\n\tERROR_SETCOUNT_ON_BAD_LB                                                  syscall.Errno = 1433\n\tERROR_LB_WITHOUT_TABSTOPS                                                 syscall.Errno = 1434\n\tERROR_DESTROY_OBJECT_OF_OTHER_THREAD                                      syscall.Errno = 1435\n\tERROR_CHILD_WINDOW_MENU                                                   syscall.Errno = 1436\n\tERROR_NO_SYSTEM_MENU                                                      syscall.Errno = 1437\n\tERROR_INVALID_MSGBOX_STYLE                                                syscall.Errno = 1438\n\tERROR_INVALID_SPI_VALUE                                                   syscall.Errno = 1439\n\tERROR_SCREEN_ALREADY_LOCKED                                               syscall.Errno = 1440\n\tERROR_HWNDS_HAVE_DIFF_PARENT                                              syscall.Errno = 1441\n\tERROR_NOT_CHILD_WINDOW                                                    syscall.Errno = 1442\n\tERROR_INVALID_GW_COMMAND                                                  syscall.Errno = 1443\n\tERROR_INVALID_THREAD_ID                                                   syscall.Errno = 1444\n\tERROR_NON_MDICHILD_WINDOW                                                 syscall.Errno = 1445\n\tERROR_POPUP_ALREADY_ACTIVE                                                syscall.Errno = 1446\n\tERROR_NO_SCROLLBARS                                                       syscall.Errno = 1447\n\tERROR_INVALID_SCROLLBAR_RANGE                                             syscall.Errno = 1448\n\tERROR_INVALID_SHOWWIN_COMMAND                                             syscall.Errno = 1449\n\tERROR_NO_SYSTEM_RESOURCES                                                 syscall.Errno = 1450\n\tERROR_NONPAGED_SYSTEM_RESOURCES                                           syscall.Errno = 1451\n\tERROR_PAGED_SYSTEM_RESOURCES                                              syscall.Errno = 1452\n\tERROR_WORKING_SET_QUOTA                                                   syscall.Errno = 1453\n\tERROR_PAGEFILE_QUOTA                                                      syscall.Errno = 1454\n\tERROR_COMMITMENT_LIMIT                                                    syscall.Errno = 1455\n\tERROR_MENU_ITEM_NOT_FOUND                                                 syscall.Errno = 1456\n\tERROR_INVALID_KEYBOARD_HANDLE                                             syscall.Errno = 1457\n\tERROR_HOOK_TYPE_NOT_ALLOWED                                               syscall.Errno = 1458\n\tERROR_REQUIRES_INTERACTIVE_WINDOWSTATION                                  syscall.Errno = 1459\n\tERROR_TIMEOUT                                                             syscall.Errno = 1460\n\tERROR_INVALID_MONITOR_HANDLE                                              syscall.Errno = 1461\n\tERROR_INCORRECT_SIZE                                                      syscall.Errno = 1462\n\tERROR_SYMLINK_CLASS_DISABLED                                              syscall.Errno = 1463\n\tERROR_SYMLINK_NOT_SUPPORTED                                               syscall.Errno = 1464\n\tERROR_XML_PARSE_ERROR                                                     syscall.Errno = 1465\n\tERROR_XMLDSIG_ERROR                                                       syscall.Errno = 1466\n\tERROR_RESTART_APPLICATION                                                 syscall.Errno = 1467\n\tERROR_WRONG_COMPARTMENT                                                   syscall.Errno = 1468\n\tERROR_AUTHIP_FAILURE                                                      syscall.Errno = 1469\n\tERROR_NO_NVRAM_RESOURCES                                                  syscall.Errno = 1470\n\tERROR_NOT_GUI_PROCESS                                                     syscall.Errno = 1471\n\tERROR_EVENTLOG_FILE_CORRUPT                                               syscall.Errno = 1500\n\tERROR_EVENTLOG_CANT_START                                                 syscall.Errno = 1501\n\tERROR_LOG_FILE_FULL                                                       syscall.Errno = 1502\n\tERROR_EVENTLOG_FILE_CHANGED                                               syscall.Errno = 1503\n\tERROR_CONTAINER_ASSIGNED                                                  syscall.Errno = 1504\n\tERROR_JOB_NO_CONTAINER                                                    syscall.Errno = 1505\n\tERROR_INVALID_TASK_NAME                                                   syscall.Errno = 1550\n\tERROR_INVALID_TASK_INDEX                                                  syscall.Errno = 1551\n\tERROR_THREAD_ALREADY_IN_TASK                                              syscall.Errno = 1552\n\tERROR_INSTALL_SERVICE_FAILURE                                             syscall.Errno = 1601\n\tERROR_INSTALL_USEREXIT                                                    syscall.Errno = 1602\n\tERROR_INSTALL_FAILURE                                                     syscall.Errno = 1603\n\tERROR_INSTALL_SUSPEND                                                     syscall.Errno = 1604\n\tERROR_UNKNOWN_PRODUCT                                                     syscall.Errno = 1605\n\tERROR_UNKNOWN_FEATURE                                                     syscall.Errno = 1606\n\tERROR_UNKNOWN_COMPONENT                                                   syscall.Errno = 1607\n\tERROR_UNKNOWN_PROPERTY                                                    syscall.Errno = 1608\n\tERROR_INVALID_HANDLE_STATE                                                syscall.Errno = 1609\n\tERROR_BAD_CONFIGURATION                                                   syscall.Errno = 1610\n\tERROR_INDEX_ABSENT                                                        syscall.Errno = 1611\n\tERROR_INSTALL_SOURCE_ABSENT                                               syscall.Errno = 1612\n\tERROR_INSTALL_PACKAGE_VERSION                                             syscall.Errno = 1613\n\tERROR_PRODUCT_UNINSTALLED                                                 syscall.Errno = 1614\n\tERROR_BAD_QUERY_SYNTAX                                                    syscall.Errno = 1615\n\tERROR_INVALID_FIELD                                                       syscall.Errno = 1616\n\tERROR_DEVICE_REMOVED                                                      syscall.Errno = 1617\n\tERROR_INSTALL_ALREADY_RUNNING                                             syscall.Errno = 1618\n\tERROR_INSTALL_PACKAGE_OPEN_FAILED                                         syscall.Errno = 1619\n\tERROR_INSTALL_PACKAGE_INVALID                                             syscall.Errno = 1620\n\tERROR_INSTALL_UI_FAILURE                                                  syscall.Errno = 1621\n\tERROR_INSTALL_LOG_FAILURE                                                 syscall.Errno = 1622\n\tERROR_INSTALL_LANGUAGE_UNSUPPORTED                                        syscall.Errno = 1623\n\tERROR_INSTALL_TRANSFORM_FAILURE                                           syscall.Errno = 1624\n\tERROR_INSTALL_PACKAGE_REJECTED                                            syscall.Errno = 1625\n\tERROR_FUNCTION_NOT_CALLED                                                 syscall.Errno = 1626\n\tERROR_FUNCTION_FAILED                                                     syscall.Errno = 1627\n\tERROR_INVALID_TABLE                                                       syscall.Errno = 1628\n\tERROR_DATATYPE_MISMATCH                                                   syscall.Errno = 1629\n\tERROR_UNSUPPORTED_TYPE                                                    syscall.Errno = 1630\n\tERROR_CREATE_FAILED                                                       syscall.Errno = 1631\n\tERROR_INSTALL_TEMP_UNWRITABLE                                             syscall.Errno = 1632\n\tERROR_INSTALL_PLATFORM_UNSUPPORTED                                        syscall.Errno = 1633\n\tERROR_INSTALL_NOTUSED                                                     syscall.Errno = 1634\n\tERROR_PATCH_PACKAGE_OPEN_FAILED                                           syscall.Errno = 1635\n\tERROR_PATCH_PACKAGE_INVALID                                               syscall.Errno = 1636\n\tERROR_PATCH_PACKAGE_UNSUPPORTED                                           syscall.Errno = 1637\n\tERROR_PRODUCT_VERSION                                                     syscall.Errno = 1638\n\tERROR_INVALID_COMMAND_LINE                                                syscall.Errno = 1639\n\tERROR_INSTALL_REMOTE_DISALLOWED                                           syscall.Errno = 1640\n\tERROR_SUCCESS_REBOOT_INITIATED                                            syscall.Errno = 1641\n\tERROR_PATCH_TARGET_NOT_FOUND                                              syscall.Errno = 1642\n\tERROR_PATCH_PACKAGE_REJECTED                                              syscall.Errno = 1643\n\tERROR_INSTALL_TRANSFORM_REJECTED                                          syscall.Errno = 1644\n\tERROR_INSTALL_REMOTE_PROHIBITED                                           syscall.Errno = 1645\n\tERROR_PATCH_REMOVAL_UNSUPPORTED                                           syscall.Errno = 1646\n\tERROR_UNKNOWN_PATCH                                                       syscall.Errno = 1647\n\tERROR_PATCH_NO_SEQUENCE                                                   syscall.Errno = 1648\n\tERROR_PATCH_REMOVAL_DISALLOWED                                            syscall.Errno = 1649\n\tERROR_INVALID_PATCH_XML                                                   syscall.Errno = 1650\n\tERROR_PATCH_MANAGED_ADVERTISED_PRODUCT                                    syscall.Errno = 1651\n\tERROR_INSTALL_SERVICE_SAFEBOOT                                            syscall.Errno = 1652\n\tERROR_FAIL_FAST_EXCEPTION                                                 syscall.Errno = 1653\n\tERROR_INSTALL_REJECTED                                                    syscall.Errno = 1654\n\tERROR_DYNAMIC_CODE_BLOCKED                                                syscall.Errno = 1655\n\tERROR_NOT_SAME_OBJECT                                                     syscall.Errno = 1656\n\tERROR_STRICT_CFG_VIOLATION                                                syscall.Errno = 1657\n\tERROR_SET_CONTEXT_DENIED                                                  syscall.Errno = 1660\n\tERROR_CROSS_PARTITION_VIOLATION                                           syscall.Errno = 1661\n\tRPC_S_INVALID_STRING_BINDING                                              syscall.Errno = 1700\n\tRPC_S_WRONG_KIND_OF_BINDING                                               syscall.Errno = 1701\n\tRPC_S_INVALID_BINDING                                                     syscall.Errno = 1702\n\tRPC_S_PROTSEQ_NOT_SUPPORTED                                               syscall.Errno = 1703\n\tRPC_S_INVALID_RPC_PROTSEQ                                                 syscall.Errno = 1704\n\tRPC_S_INVALID_STRING_UUID                                                 syscall.Errno = 1705\n\tRPC_S_INVALID_ENDPOINT_FORMAT                                             syscall.Errno = 1706\n\tRPC_S_INVALID_NET_ADDR                                                    syscall.Errno = 1707\n\tRPC_S_NO_ENDPOINT_FOUND                                                   syscall.Errno = 1708\n\tRPC_S_INVALID_TIMEOUT                                                     syscall.Errno = 1709\n\tRPC_S_OBJECT_NOT_FOUND                                                    syscall.Errno = 1710\n\tRPC_S_ALREADY_REGISTERED                                                  syscall.Errno = 1711\n\tRPC_S_TYPE_ALREADY_REGISTERED                                             syscall.Errno = 1712\n\tRPC_S_ALREADY_LISTENING                                                   syscall.Errno = 1713\n\tRPC_S_NO_PROTSEQS_REGISTERED                                              syscall.Errno = 1714\n\tRPC_S_NOT_LISTENING                                                       syscall.Errno = 1715\n\tRPC_S_UNKNOWN_MGR_TYPE                                                    syscall.Errno = 1716\n\tRPC_S_UNKNOWN_IF                                                          syscall.Errno = 1717\n\tRPC_S_NO_BINDINGS                                                         syscall.Errno = 1718\n\tRPC_S_NO_PROTSEQS                                                         syscall.Errno = 1719\n\tRPC_S_CANT_CREATE_ENDPOINT                                                syscall.Errno = 1720\n\tRPC_S_OUT_OF_RESOURCES                                                    syscall.Errno = 1721\n\tRPC_S_SERVER_UNAVAILABLE                                                  syscall.Errno = 1722\n\tRPC_S_SERVER_TOO_BUSY                                                     syscall.Errno = 1723\n\tRPC_S_INVALID_NETWORK_OPTIONS                                             syscall.Errno = 1724\n\tRPC_S_NO_CALL_ACTIVE                                                      syscall.Errno = 1725\n\tRPC_S_CALL_FAILED                                                         syscall.Errno = 1726\n\tRPC_S_CALL_FAILED_DNE                                                     syscall.Errno = 1727\n\tRPC_S_PROTOCOL_ERROR                                                      syscall.Errno = 1728\n\tRPC_S_PROXY_ACCESS_DENIED                                                 syscall.Errno = 1729\n\tRPC_S_UNSUPPORTED_TRANS_SYN                                               syscall.Errno = 1730\n\tRPC_S_UNSUPPORTED_TYPE                                                    syscall.Errno = 1732\n\tRPC_S_INVALID_TAG                                                         syscall.Errno = 1733\n\tRPC_S_INVALID_BOUND                                                       syscall.Errno = 1734\n\tRPC_S_NO_ENTRY_NAME                                                       syscall.Errno = 1735\n\tRPC_S_INVALID_NAME_SYNTAX                                                 syscall.Errno = 1736\n\tRPC_S_UNSUPPORTED_NAME_SYNTAX                                             syscall.Errno = 1737\n\tRPC_S_UUID_NO_ADDRESS                                                     syscall.Errno = 1739\n\tRPC_S_DUPLICATE_ENDPOINT                                                  syscall.Errno = 1740\n\tRPC_S_UNKNOWN_AUTHN_TYPE                                                  syscall.Errno = 1741\n\tRPC_S_MAX_CALLS_TOO_SMALL                                                 syscall.Errno = 1742\n\tRPC_S_STRING_TOO_LONG                                                     syscall.Errno = 1743\n\tRPC_S_PROTSEQ_NOT_FOUND                                                   syscall.Errno = 1744\n\tRPC_S_PROCNUM_OUT_OF_RANGE                                                syscall.Errno = 1745\n\tRPC_S_BINDING_HAS_NO_AUTH                                                 syscall.Errno = 1746\n\tRPC_S_UNKNOWN_AUTHN_SERVICE                                               syscall.Errno = 1747\n\tRPC_S_UNKNOWN_AUTHN_LEVEL                                                 syscall.Errno = 1748\n\tRPC_S_INVALID_AUTH_IDENTITY                                               syscall.Errno = 1749\n\tRPC_S_UNKNOWN_AUTHZ_SERVICE                                               syscall.Errno = 1750\n\tEPT_S_INVALID_ENTRY                                                       syscall.Errno = 1751\n\tEPT_S_CANT_PERFORM_OP                                                     syscall.Errno = 1752\n\tEPT_S_NOT_REGISTERED                                                      syscall.Errno = 1753\n\tRPC_S_NOTHING_TO_EXPORT                                                   syscall.Errno = 1754\n\tRPC_S_INCOMPLETE_NAME                                                     syscall.Errno = 1755\n\tRPC_S_INVALID_VERS_OPTION                                                 syscall.Errno = 1756\n\tRPC_S_NO_MORE_MEMBERS                                                     syscall.Errno = 1757\n\tRPC_S_NOT_ALL_OBJS_UNEXPORTED                                             syscall.Errno = 1758\n\tRPC_S_INTERFACE_NOT_FOUND                                                 syscall.Errno = 1759\n\tRPC_S_ENTRY_ALREADY_EXISTS                                                syscall.Errno = 1760\n\tRPC_S_ENTRY_NOT_FOUND                                                     syscall.Errno = 1761\n\tRPC_S_NAME_SERVICE_UNAVAILABLE                                            syscall.Errno = 1762\n\tRPC_S_INVALID_NAF_ID                                                      syscall.Errno = 1763\n\tRPC_S_CANNOT_SUPPORT                                                      syscall.Errno = 1764\n\tRPC_S_NO_CONTEXT_AVAILABLE                                                syscall.Errno = 1765\n\tRPC_S_INTERNAL_ERROR                                                      syscall.Errno = 1766\n\tRPC_S_ZERO_DIVIDE                                                         syscall.Errno = 1767\n\tRPC_S_ADDRESS_ERROR                                                       syscall.Errno = 1768\n\tRPC_S_FP_DIV_ZERO                                                         syscall.Errno = 1769\n\tRPC_S_FP_UNDERFLOW                                                        syscall.Errno = 1770\n\tRPC_S_FP_OVERFLOW                                                         syscall.Errno = 1771\n\tRPC_X_NO_MORE_ENTRIES                                                     syscall.Errno = 1772\n\tRPC_X_SS_CHAR_TRANS_OPEN_FAIL                                             syscall.Errno = 1773\n\tRPC_X_SS_CHAR_TRANS_SHORT_FILE                                            syscall.Errno = 1774\n\tRPC_X_SS_IN_NULL_CONTEXT                                                  syscall.Errno = 1775\n\tRPC_X_SS_CONTEXT_DAMAGED                                                  syscall.Errno = 1777\n\tRPC_X_SS_HANDLES_MISMATCH                                                 syscall.Errno = 1778\n\tRPC_X_SS_CANNOT_GET_CALL_HANDLE                                           syscall.Errno = 1779\n\tRPC_X_NULL_REF_POINTER                                                    syscall.Errno = 1780\n\tRPC_X_ENUM_VALUE_OUT_OF_RANGE                                             syscall.Errno = 1781\n\tRPC_X_BYTE_COUNT_TOO_SMALL                                                syscall.Errno = 1782\n\tRPC_X_BAD_STUB_DATA                                                       syscall.Errno = 1783\n\tERROR_INVALID_USER_BUFFER                                                 syscall.Errno = 1784\n\tERROR_UNRECOGNIZED_MEDIA                                                  syscall.Errno = 1785\n\tERROR_NO_TRUST_LSA_SECRET                                                 syscall.Errno = 1786\n\tERROR_NO_TRUST_SAM_ACCOUNT                                                syscall.Errno = 1787\n\tERROR_TRUSTED_DOMAIN_FAILURE                                              syscall.Errno = 1788\n\tERROR_TRUSTED_RELATIONSHIP_FAILURE                                        syscall.Errno = 1789\n\tERROR_TRUST_FAILURE                                                       syscall.Errno = 1790\n\tRPC_S_CALL_IN_PROGRESS                                                    syscall.Errno = 1791\n\tERROR_NETLOGON_NOT_STARTED                                                syscall.Errno = 1792\n\tERROR_ACCOUNT_EXPIRED                                                     syscall.Errno = 1793\n\tERROR_REDIRECTOR_HAS_OPEN_HANDLES                                         syscall.Errno = 1794\n\tERROR_PRINTER_DRIVER_ALREADY_INSTALLED                                    syscall.Errno = 1795\n\tERROR_UNKNOWN_PORT                                                        syscall.Errno = 1796\n\tERROR_UNKNOWN_PRINTER_DRIVER                                              syscall.Errno = 1797\n\tERROR_UNKNOWN_PRINTPROCESSOR                                              syscall.Errno = 1798\n\tERROR_INVALID_SEPARATOR_FILE                                              syscall.Errno = 1799\n\tERROR_INVALID_PRIORITY                                                    syscall.Errno = 1800\n\tERROR_INVALID_PRINTER_NAME                                                syscall.Errno = 1801\n\tERROR_PRINTER_ALREADY_EXISTS                                              syscall.Errno = 1802\n\tERROR_INVALID_PRINTER_COMMAND                                             syscall.Errno = 1803\n\tERROR_INVALID_DATATYPE                                                    syscall.Errno = 1804\n\tERROR_INVALID_ENVIRONMENT                                                 syscall.Errno = 1805\n\tRPC_S_NO_MORE_BINDINGS                                                    syscall.Errno = 1806\n\tERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT                                   syscall.Errno = 1807\n\tERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT                                   syscall.Errno = 1808\n\tERROR_NOLOGON_SERVER_TRUST_ACCOUNT                                        syscall.Errno = 1809\n\tERROR_DOMAIN_TRUST_INCONSISTENT                                           syscall.Errno = 1810\n\tERROR_SERVER_HAS_OPEN_HANDLES                                             syscall.Errno = 1811\n\tERROR_RESOURCE_DATA_NOT_FOUND                                             syscall.Errno = 1812\n\tERROR_RESOURCE_TYPE_NOT_FOUND                                             syscall.Errno = 1813\n\tERROR_RESOURCE_NAME_NOT_FOUND                                             syscall.Errno = 1814\n\tERROR_RESOURCE_LANG_NOT_FOUND                                             syscall.Errno = 1815\n\tERROR_NOT_ENOUGH_QUOTA                                                    syscall.Errno = 1816\n\tRPC_S_NO_INTERFACES                                                       syscall.Errno = 1817\n\tRPC_S_CALL_CANCELLED                                                      syscall.Errno = 1818\n\tRPC_S_BINDING_INCOMPLETE                                                  syscall.Errno = 1819\n\tRPC_S_COMM_FAILURE                                                        syscall.Errno = 1820\n\tRPC_S_UNSUPPORTED_AUTHN_LEVEL                                             syscall.Errno = 1821\n\tRPC_S_NO_PRINC_NAME                                                       syscall.Errno = 1822\n\tRPC_S_NOT_RPC_ERROR                                                       syscall.Errno = 1823\n\tRPC_S_UUID_LOCAL_ONLY                                                     syscall.Errno = 1824\n\tRPC_S_SEC_PKG_ERROR                                                       syscall.Errno = 1825\n\tRPC_S_NOT_CANCELLED                                                       syscall.Errno = 1826\n\tRPC_X_INVALID_ES_ACTION                                                   syscall.Errno = 1827\n\tRPC_X_WRONG_ES_VERSION                                                    syscall.Errno = 1828\n\tRPC_X_WRONG_STUB_VERSION                                                  syscall.Errno = 1829\n\tRPC_X_INVALID_PIPE_OBJECT                                                 syscall.Errno = 1830\n\tRPC_X_WRONG_PIPE_ORDER                                                    syscall.Errno = 1831\n\tRPC_X_WRONG_PIPE_VERSION                                                  syscall.Errno = 1832\n\tRPC_S_COOKIE_AUTH_FAILED                                                  syscall.Errno = 1833\n\tRPC_S_DO_NOT_DISTURB                                                      syscall.Errno = 1834\n\tRPC_S_SYSTEM_HANDLE_COUNT_EXCEEDED                                        syscall.Errno = 1835\n\tRPC_S_SYSTEM_HANDLE_TYPE_MISMATCH                                         syscall.Errno = 1836\n\tRPC_S_GROUP_MEMBER_NOT_FOUND                                              syscall.Errno = 1898\n\tEPT_S_CANT_CREATE                                                         syscall.Errno = 1899\n\tRPC_S_INVALID_OBJECT                                                      syscall.Errno = 1900\n\tERROR_INVALID_TIME                                                        syscall.Errno = 1901\n\tERROR_INVALID_FORM_NAME                                                   syscall.Errno = 1902\n\tERROR_INVALID_FORM_SIZE                                                   syscall.Errno = 1903\n\tERROR_ALREADY_WAITING                                                     syscall.Errno = 1904\n\tERROR_PRINTER_DELETED                                                     syscall.Errno = 1905\n\tERROR_INVALID_PRINTER_STATE                                               syscall.Errno = 1906\n\tERROR_PASSWORD_MUST_CHANGE                                                syscall.Errno = 1907\n\tERROR_DOMAIN_CONTROLLER_NOT_FOUND                                         syscall.Errno = 1908\n\tERROR_ACCOUNT_LOCKED_OUT                                                  syscall.Errno = 1909\n\tOR_INVALID_OXID                                                           syscall.Errno = 1910\n\tOR_INVALID_OID                                                            syscall.Errno = 1911\n\tOR_INVALID_SET                                                            syscall.Errno = 1912\n\tRPC_S_SEND_INCOMPLETE                                                     syscall.Errno = 1913\n\tRPC_S_INVALID_ASYNC_HANDLE                                                syscall.Errno = 1914\n\tRPC_S_INVALID_ASYNC_CALL                                                  syscall.Errno = 1915\n\tRPC_X_PIPE_CLOSED                                                         syscall.Errno = 1916\n\tRPC_X_PIPE_DISCIPLINE_ERROR                                               syscall.Errno = 1917\n\tRPC_X_PIPE_EMPTY                                                          syscall.Errno = 1918\n\tERROR_NO_SITENAME                                                         syscall.Errno = 1919\n\tERROR_CANT_ACCESS_FILE                                                    syscall.Errno = 1920\n\tERROR_CANT_RESOLVE_FILENAME                                               syscall.Errno = 1921\n\tRPC_S_ENTRY_TYPE_MISMATCH                                                 syscall.Errno = 1922\n\tRPC_S_NOT_ALL_OBJS_EXPORTED                                               syscall.Errno = 1923\n\tRPC_S_INTERFACE_NOT_EXPORTED                                              syscall.Errno = 1924\n\tRPC_S_PROFILE_NOT_ADDED                                                   syscall.Errno = 1925\n\tRPC_S_PRF_ELT_NOT_ADDED                                                   syscall.Errno = 1926\n\tRPC_S_PRF_ELT_NOT_REMOVED                                                 syscall.Errno = 1927\n\tRPC_S_GRP_ELT_NOT_ADDED                                                   syscall.Errno = 1928\n\tRPC_S_GRP_ELT_NOT_REMOVED                                                 syscall.Errno = 1929\n\tERROR_KM_DRIVER_BLOCKED                                                   syscall.Errno = 1930\n\tERROR_CONTEXT_EXPIRED                                                     syscall.Errno = 1931\n\tERROR_PER_USER_TRUST_QUOTA_EXCEEDED                                       syscall.Errno = 1932\n\tERROR_ALL_USER_TRUST_QUOTA_EXCEEDED                                       syscall.Errno = 1933\n\tERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED                                    syscall.Errno = 1934\n\tERROR_AUTHENTICATION_FIREWALL_FAILED                                      syscall.Errno = 1935\n\tERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED                                    syscall.Errno = 1936\n\tERROR_NTLM_BLOCKED                                                        syscall.Errno = 1937\n\tERROR_PASSWORD_CHANGE_REQUIRED                                            syscall.Errno = 1938\n\tERROR_LOST_MODE_LOGON_RESTRICTION                                         syscall.Errno = 1939\n\tERROR_INVALID_PIXEL_FORMAT                                                syscall.Errno = 2000\n\tERROR_BAD_DRIVER                                                          syscall.Errno = 2001\n\tERROR_INVALID_WINDOW_STYLE                                                syscall.Errno = 2002\n\tERROR_METAFILE_NOT_SUPPORTED                                              syscall.Errno = 2003\n\tERROR_TRANSFORM_NOT_SUPPORTED                                             syscall.Errno = 2004\n\tERROR_CLIPPING_NOT_SUPPORTED                                              syscall.Errno = 2005\n\tERROR_INVALID_CMM                                                         syscall.Errno = 2010\n\tERROR_INVALID_PROFILE                                                     syscall.Errno = 2011\n\tERROR_TAG_NOT_FOUND                                                       syscall.Errno = 2012\n\tERROR_TAG_NOT_PRESENT                                                     syscall.Errno = 2013\n\tERROR_DUPLICATE_TAG                                                       syscall.Errno = 2014\n\tERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE                                  syscall.Errno = 2015\n\tERROR_PROFILE_NOT_FOUND                                                   syscall.Errno = 2016\n\tERROR_INVALID_COLORSPACE                                                  syscall.Errno = 2017\n\tERROR_ICM_NOT_ENABLED                                                     syscall.Errno = 2018\n\tERROR_DELETING_ICM_XFORM                                                  syscall.Errno = 2019\n\tERROR_INVALID_TRANSFORM                                                   syscall.Errno = 2020\n\tERROR_COLORSPACE_MISMATCH                                                 syscall.Errno = 2021\n\tERROR_INVALID_COLORINDEX                                                  syscall.Errno = 2022\n\tERROR_PROFILE_DOES_NOT_MATCH_DEVICE                                       syscall.Errno = 2023\n\tERROR_CONNECTED_OTHER_PASSWORD                                            syscall.Errno = 2108\n\tERROR_CONNECTED_OTHER_PASSWORD_DEFAULT                                    syscall.Errno = 2109\n\tERROR_BAD_USERNAME                                                        syscall.Errno = 2202\n\tERROR_NOT_CONNECTED                                                       syscall.Errno = 2250\n\tERROR_OPEN_FILES                                                          syscall.Errno = 2401\n\tERROR_ACTIVE_CONNECTIONS                                                  syscall.Errno = 2402\n\tERROR_DEVICE_IN_USE                                                       syscall.Errno = 2404\n\tERROR_UNKNOWN_PRINT_MONITOR                                               syscall.Errno = 3000\n\tERROR_PRINTER_DRIVER_IN_USE                                               syscall.Errno = 3001\n\tERROR_SPOOL_FILE_NOT_FOUND                                                syscall.Errno = 3002\n\tERROR_SPL_NO_STARTDOC                                                     syscall.Errno = 3003\n\tERROR_SPL_NO_ADDJOB                                                       syscall.Errno = 3004\n\tERROR_PRINT_PROCESSOR_ALREADY_INSTALLED                                   syscall.Errno = 3005\n\tERROR_PRINT_MONITOR_ALREADY_INSTALLED                                     syscall.Errno = 3006\n\tERROR_INVALID_PRINT_MONITOR                                               syscall.Errno = 3007\n\tERROR_PRINT_MONITOR_IN_USE                                                syscall.Errno = 3008\n\tERROR_PRINTER_HAS_JOBS_QUEUED                                             syscall.Errno = 3009\n\tERROR_SUCCESS_REBOOT_REQUIRED                                             syscall.Errno = 3010\n\tERROR_SUCCESS_RESTART_REQUIRED                                            syscall.Errno = 3011\n\tERROR_PRINTER_NOT_FOUND                                                   syscall.Errno = 3012\n\tERROR_PRINTER_DRIVER_WARNED                                               syscall.Errno = 3013\n\tERROR_PRINTER_DRIVER_BLOCKED                                              syscall.Errno = 3014\n\tERROR_PRINTER_DRIVER_PACKAGE_IN_USE                                       syscall.Errno = 3015\n\tERROR_CORE_DRIVER_PACKAGE_NOT_FOUND                                       syscall.Errno = 3016\n\tERROR_FAIL_REBOOT_REQUIRED                                                syscall.Errno = 3017\n\tERROR_FAIL_REBOOT_INITIATED                                               syscall.Errno = 3018\n\tERROR_PRINTER_DRIVER_DOWNLOAD_NEEDED                                      syscall.Errno = 3019\n\tERROR_PRINT_JOB_RESTART_REQUIRED                                          syscall.Errno = 3020\n\tERROR_INVALID_PRINTER_DRIVER_MANIFEST                                     syscall.Errno = 3021\n\tERROR_PRINTER_NOT_SHAREABLE                                               syscall.Errno = 3022\n\tERROR_REQUEST_PAUSED                                                      syscall.Errno = 3050\n\tERROR_APPEXEC_CONDITION_NOT_SATISFIED                                     syscall.Errno = 3060\n\tERROR_APPEXEC_HANDLE_INVALIDATED                                          syscall.Errno = 3061\n\tERROR_APPEXEC_INVALID_HOST_GENERATION                                     syscall.Errno = 3062\n\tERROR_APPEXEC_UNEXPECTED_PROCESS_REGISTRATION                             syscall.Errno = 3063\n\tERROR_APPEXEC_INVALID_HOST_STATE                                          syscall.Errno = 3064\n\tERROR_APPEXEC_NO_DONOR                                                    syscall.Errno = 3065\n\tERROR_APPEXEC_HOST_ID_MISMATCH                                            syscall.Errno = 3066\n\tERROR_APPEXEC_UNKNOWN_USER                                                syscall.Errno = 3067\n\tERROR_IO_REISSUE_AS_CACHED                                                syscall.Errno = 3950\n\tERROR_WINS_INTERNAL                                                       syscall.Errno = 4000\n\tERROR_CAN_NOT_DEL_LOCAL_WINS                                              syscall.Errno = 4001\n\tERROR_STATIC_INIT                                                         syscall.Errno = 4002\n\tERROR_INC_BACKUP                                                          syscall.Errno = 4003\n\tERROR_FULL_BACKUP                                                         syscall.Errno = 4004\n\tERROR_REC_NON_EXISTENT                                                    syscall.Errno = 4005\n\tERROR_RPL_NOT_ALLOWED                                                     syscall.Errno = 4006\n\tPEERDIST_ERROR_CONTENTINFO_VERSION_UNSUPPORTED                            syscall.Errno = 4050\n\tPEERDIST_ERROR_CANNOT_PARSE_CONTENTINFO                                   syscall.Errno = 4051\n\tPEERDIST_ERROR_MISSING_DATA                                               syscall.Errno = 4052\n\tPEERDIST_ERROR_NO_MORE                                                    syscall.Errno = 4053\n\tPEERDIST_ERROR_NOT_INITIALIZED                                            syscall.Errno = 4054\n\tPEERDIST_ERROR_ALREADY_INITIALIZED                                        syscall.Errno = 4055\n\tPEERDIST_ERROR_SHUTDOWN_IN_PROGRESS                                       syscall.Errno = 4056\n\tPEERDIST_ERROR_INVALIDATED                                                syscall.Errno = 4057\n\tPEERDIST_ERROR_ALREADY_EXISTS                                             syscall.Errno = 4058\n\tPEERDIST_ERROR_OPERATION_NOTFOUND                                         syscall.Errno = 4059\n\tPEERDIST_ERROR_ALREADY_COMPLETED                                          syscall.Errno = 4060\n\tPEERDIST_ERROR_OUT_OF_BOUNDS                                              syscall.Errno = 4061\n\tPEERDIST_ERROR_VERSION_UNSUPPORTED                                        syscall.Errno = 4062\n\tPEERDIST_ERROR_INVALID_CONFIGURATION                                      syscall.Errno = 4063\n\tPEERDIST_ERROR_NOT_LICENSED                                               syscall.Errno = 4064\n\tPEERDIST_ERROR_SERVICE_UNAVAILABLE                                        syscall.Errno = 4065\n\tPEERDIST_ERROR_TRUST_FAILURE                                              syscall.Errno = 4066\n\tERROR_DHCP_ADDRESS_CONFLICT                                               syscall.Errno = 4100\n\tERROR_WMI_GUID_NOT_FOUND                                                  syscall.Errno = 4200\n\tERROR_WMI_INSTANCE_NOT_FOUND                                              syscall.Errno = 4201\n\tERROR_WMI_ITEMID_NOT_FOUND                                                syscall.Errno = 4202\n\tERROR_WMI_TRY_AGAIN                                                       syscall.Errno = 4203\n\tERROR_WMI_DP_NOT_FOUND                                                    syscall.Errno = 4204\n\tERROR_WMI_UNRESOLVED_INSTANCE_REF                                         syscall.Errno = 4205\n\tERROR_WMI_ALREADY_ENABLED                                                 syscall.Errno = 4206\n\tERROR_WMI_GUID_DISCONNECTED                                               syscall.Errno = 4207\n\tERROR_WMI_SERVER_UNAVAILABLE                                              syscall.Errno = 4208\n\tERROR_WMI_DP_FAILED                                                       syscall.Errno = 4209\n\tERROR_WMI_INVALID_MOF                                                     syscall.Errno = 4210\n\tERROR_WMI_INVALID_REGINFO                                                 syscall.Errno = 4211\n\tERROR_WMI_ALREADY_DISABLED                                                syscall.Errno = 4212\n\tERROR_WMI_READ_ONLY                                                       syscall.Errno = 4213\n\tERROR_WMI_SET_FAILURE                                                     syscall.Errno = 4214\n\tERROR_NOT_APPCONTAINER                                                    syscall.Errno = 4250\n\tERROR_APPCONTAINER_REQUIRED                                               syscall.Errno = 4251\n\tERROR_NOT_SUPPORTED_IN_APPCONTAINER                                       syscall.Errno = 4252\n\tERROR_INVALID_PACKAGE_SID_LENGTH                                          syscall.Errno = 4253\n\tERROR_INVALID_MEDIA                                                       syscall.Errno = 4300\n\tERROR_INVALID_LIBRARY                                                     syscall.Errno = 4301\n\tERROR_INVALID_MEDIA_POOL                                                  syscall.Errno = 4302\n\tERROR_DRIVE_MEDIA_MISMATCH                                                syscall.Errno = 4303\n\tERROR_MEDIA_OFFLINE                                                       syscall.Errno = 4304\n\tERROR_LIBRARY_OFFLINE                                                     syscall.Errno = 4305\n\tERROR_EMPTY                                                               syscall.Errno = 4306\n\tERROR_NOT_EMPTY                                                           syscall.Errno = 4307\n\tERROR_MEDIA_UNAVAILABLE                                                   syscall.Errno = 4308\n\tERROR_RESOURCE_DISABLED                                                   syscall.Errno = 4309\n\tERROR_INVALID_CLEANER                                                     syscall.Errno = 4310\n\tERROR_UNABLE_TO_CLEAN                                                     syscall.Errno = 4311\n\tERROR_OBJECT_NOT_FOUND                                                    syscall.Errno = 4312\n\tERROR_DATABASE_FAILURE                                                    syscall.Errno = 4313\n\tERROR_DATABASE_FULL                                                       syscall.Errno = 4314\n\tERROR_MEDIA_INCOMPATIBLE                                                  syscall.Errno = 4315\n\tERROR_RESOURCE_NOT_PRESENT                                                syscall.Errno = 4316\n\tERROR_INVALID_OPERATION                                                   syscall.Errno = 4317\n\tERROR_MEDIA_NOT_AVAILABLE                                                 syscall.Errno = 4318\n\tERROR_DEVICE_NOT_AVAILABLE                                                syscall.Errno = 4319\n\tERROR_REQUEST_REFUSED                                                     syscall.Errno = 4320\n\tERROR_INVALID_DRIVE_OBJECT                                                syscall.Errno = 4321\n\tERROR_LIBRARY_FULL                                                        syscall.Errno = 4322\n\tERROR_MEDIUM_NOT_ACCESSIBLE                                               syscall.Errno = 4323\n\tERROR_UNABLE_TO_LOAD_MEDIUM                                               syscall.Errno = 4324\n\tERROR_UNABLE_TO_INVENTORY_DRIVE                                           syscall.Errno = 4325\n\tERROR_UNABLE_TO_INVENTORY_SLOT                                            syscall.Errno = 4326\n\tERROR_UNABLE_TO_INVENTORY_TRANSPORT                                       syscall.Errno = 4327\n\tERROR_TRANSPORT_FULL                                                      syscall.Errno = 4328\n\tERROR_CONTROLLING_IEPORT                                                  syscall.Errno = 4329\n\tERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA                                       syscall.Errno = 4330\n\tERROR_CLEANER_SLOT_SET                                                    syscall.Errno = 4331\n\tERROR_CLEANER_SLOT_NOT_SET                                                syscall.Errno = 4332\n\tERROR_CLEANER_CARTRIDGE_SPENT                                             syscall.Errno = 4333\n\tERROR_UNEXPECTED_OMID                                                     syscall.Errno = 4334\n\tERROR_CANT_DELETE_LAST_ITEM                                               syscall.Errno = 4335\n\tERROR_MESSAGE_EXCEEDS_MAX_SIZE                                            syscall.Errno = 4336\n\tERROR_VOLUME_CONTAINS_SYS_FILES                                           syscall.Errno = 4337\n\tERROR_INDIGENOUS_TYPE                                                     syscall.Errno = 4338\n\tERROR_NO_SUPPORTING_DRIVES                                                syscall.Errno = 4339\n\tERROR_CLEANER_CARTRIDGE_INSTALLED                                         syscall.Errno = 4340\n\tERROR_IEPORT_FULL                                                         syscall.Errno = 4341\n\tERROR_FILE_OFFLINE                                                        syscall.Errno = 4350\n\tERROR_REMOTE_STORAGE_NOT_ACTIVE                                           syscall.Errno = 4351\n\tERROR_REMOTE_STORAGE_MEDIA_ERROR                                          syscall.Errno = 4352\n\tERROR_NOT_A_REPARSE_POINT                                                 syscall.Errno = 4390\n\tERROR_REPARSE_ATTRIBUTE_CONFLICT                                          syscall.Errno = 4391\n\tERROR_INVALID_REPARSE_DATA                                                syscall.Errno = 4392\n\tERROR_REPARSE_TAG_INVALID                                                 syscall.Errno = 4393\n\tERROR_REPARSE_TAG_MISMATCH                                                syscall.Errno = 4394\n\tERROR_REPARSE_POINT_ENCOUNTERED                                           syscall.Errno = 4395\n\tERROR_APP_DATA_NOT_FOUND                                                  syscall.Errno = 4400\n\tERROR_APP_DATA_EXPIRED                                                    syscall.Errno = 4401\n\tERROR_APP_DATA_CORRUPT                                                    syscall.Errno = 4402\n\tERROR_APP_DATA_LIMIT_EXCEEDED                                             syscall.Errno = 4403\n\tERROR_APP_DATA_REBOOT_REQUIRED                                            syscall.Errno = 4404\n\tERROR_SECUREBOOT_ROLLBACK_DETECTED                                        syscall.Errno = 4420\n\tERROR_SECUREBOOT_POLICY_VIOLATION                                         syscall.Errno = 4421\n\tERROR_SECUREBOOT_INVALID_POLICY                                           syscall.Errno = 4422\n\tERROR_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND                               syscall.Errno = 4423\n\tERROR_SECUREBOOT_POLICY_NOT_SIGNED                                        syscall.Errno = 4424\n\tERROR_SECUREBOOT_NOT_ENABLED                                              syscall.Errno = 4425\n\tERROR_SECUREBOOT_FILE_REPLACED                                            syscall.Errno = 4426\n\tERROR_SECUREBOOT_POLICY_NOT_AUTHORIZED                                    syscall.Errno = 4427\n\tERROR_SECUREBOOT_POLICY_UNKNOWN                                           syscall.Errno = 4428\n\tERROR_SECUREBOOT_POLICY_MISSING_ANTIROLLBACKVERSION                       syscall.Errno = 4429\n\tERROR_SECUREBOOT_PLATFORM_ID_MISMATCH                                     syscall.Errno = 4430\n\tERROR_SECUREBOOT_POLICY_ROLLBACK_DETECTED                                 syscall.Errno = 4431\n\tERROR_SECUREBOOT_POLICY_UPGRADE_MISMATCH                                  syscall.Errno = 4432\n\tERROR_SECUREBOOT_REQUIRED_POLICY_FILE_MISSING                             syscall.Errno = 4433\n\tERROR_SECUREBOOT_NOT_BASE_POLICY                                          syscall.Errno = 4434\n\tERROR_SECUREBOOT_NOT_SUPPLEMENTAL_POLICY                                  syscall.Errno = 4435\n\tERROR_OFFLOAD_READ_FLT_NOT_SUPPORTED                                      syscall.Errno = 4440\n\tERROR_OFFLOAD_WRITE_FLT_NOT_SUPPORTED                                     syscall.Errno = 4441\n\tERROR_OFFLOAD_READ_FILE_NOT_SUPPORTED                                     syscall.Errno = 4442\n\tERROR_OFFLOAD_WRITE_FILE_NOT_SUPPORTED                                    syscall.Errno = 4443\n\tERROR_ALREADY_HAS_STREAM_ID                                               syscall.Errno = 4444\n\tERROR_SMR_GARBAGE_COLLECTION_REQUIRED                                     syscall.Errno = 4445\n\tERROR_WOF_WIM_HEADER_CORRUPT                                              syscall.Errno = 4446\n\tERROR_WOF_WIM_RESOURCE_TABLE_CORRUPT                                      syscall.Errno = 4447\n\tERROR_WOF_FILE_RESOURCE_TABLE_CORRUPT                                     syscall.Errno = 4448\n\tERROR_VOLUME_NOT_SIS_ENABLED                                              syscall.Errno = 4500\n\tERROR_SYSTEM_INTEGRITY_ROLLBACK_DETECTED                                  syscall.Errno = 4550\n\tERROR_SYSTEM_INTEGRITY_POLICY_VIOLATION                                   syscall.Errno = 4551\n\tERROR_SYSTEM_INTEGRITY_INVALID_POLICY                                     syscall.Errno = 4552\n\tERROR_SYSTEM_INTEGRITY_POLICY_NOT_SIGNED                                  syscall.Errno = 4553\n\tERROR_SYSTEM_INTEGRITY_TOO_MANY_POLICIES                                  syscall.Errno = 4554\n\tERROR_SYSTEM_INTEGRITY_SUPPLEMENTAL_POLICY_NOT_AUTHORIZED                 syscall.Errno = 4555\n\tERROR_VSM_NOT_INITIALIZED                                                 syscall.Errno = 4560\n\tERROR_VSM_DMA_PROTECTION_NOT_IN_USE                                       syscall.Errno = 4561\n\tERROR_PLATFORM_MANIFEST_NOT_AUTHORIZED                                    syscall.Errno = 4570\n\tERROR_PLATFORM_MANIFEST_INVALID                                           syscall.Errno = 4571\n\tERROR_PLATFORM_MANIFEST_FILE_NOT_AUTHORIZED                               syscall.Errno = 4572\n\tERROR_PLATFORM_MANIFEST_CATALOG_NOT_AUTHORIZED                            syscall.Errno = 4573\n\tERROR_PLATFORM_MANIFEST_BINARY_ID_NOT_FOUND                               syscall.Errno = 4574\n\tERROR_PLATFORM_MANIFEST_NOT_ACTIVE                                        syscall.Errno = 4575\n\tERROR_PLATFORM_MANIFEST_NOT_SIGNED                                        syscall.Errno = 4576\n\tERROR_DEPENDENT_RESOURCE_EXISTS                                           syscall.Errno = 5001\n\tERROR_DEPENDENCY_NOT_FOUND                                                syscall.Errno = 5002\n\tERROR_DEPENDENCY_ALREADY_EXISTS                                           syscall.Errno = 5003\n\tERROR_RESOURCE_NOT_ONLINE                                                 syscall.Errno = 5004\n\tERROR_HOST_NODE_NOT_AVAILABLE                                             syscall.Errno = 5005\n\tERROR_RESOURCE_NOT_AVAILABLE                                              syscall.Errno = 5006\n\tERROR_RESOURCE_NOT_FOUND                                                  syscall.Errno = 5007\n\tERROR_SHUTDOWN_CLUSTER                                                    syscall.Errno = 5008\n\tERROR_CANT_EVICT_ACTIVE_NODE                                              syscall.Errno = 5009\n\tERROR_OBJECT_ALREADY_EXISTS                                               syscall.Errno = 5010\n\tERROR_OBJECT_IN_LIST                                                      syscall.Errno = 5011\n\tERROR_GROUP_NOT_AVAILABLE                                                 syscall.Errno = 5012\n\tERROR_GROUP_NOT_FOUND                                                     syscall.Errno = 5013\n\tERROR_GROUP_NOT_ONLINE                                                    syscall.Errno = 5014\n\tERROR_HOST_NODE_NOT_RESOURCE_OWNER                                        syscall.Errno = 5015\n\tERROR_HOST_NODE_NOT_GROUP_OWNER                                           syscall.Errno = 5016\n\tERROR_RESMON_CREATE_FAILED                                                syscall.Errno = 5017\n\tERROR_RESMON_ONLINE_FAILED                                                syscall.Errno = 5018\n\tERROR_RESOURCE_ONLINE                                                     syscall.Errno = 5019\n\tERROR_QUORUM_RESOURCE                                                     syscall.Errno = 5020\n\tERROR_NOT_QUORUM_CAPABLE                                                  syscall.Errno = 5021\n\tERROR_CLUSTER_SHUTTING_DOWN                                               syscall.Errno = 5022\n\tERROR_INVALID_STATE                                                       syscall.Errno = 5023\n\tERROR_RESOURCE_PROPERTIES_STORED                                          syscall.Errno = 5024\n\tERROR_NOT_QUORUM_CLASS                                                    syscall.Errno = 5025\n\tERROR_CORE_RESOURCE                                                       syscall.Errno = 5026\n\tERROR_QUORUM_RESOURCE_ONLINE_FAILED                                       syscall.Errno = 5027\n\tERROR_QUORUMLOG_OPEN_FAILED                                               syscall.Errno = 5028\n\tERROR_CLUSTERLOG_CORRUPT                                                  syscall.Errno = 5029\n\tERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE                                   syscall.Errno = 5030\n\tERROR_CLUSTERLOG_EXCEEDS_MAXSIZE                                          syscall.Errno = 5031\n\tERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND                                       syscall.Errno = 5032\n\tERROR_CLUSTERLOG_NOT_ENOUGH_SPACE                                         syscall.Errno = 5033\n\tERROR_QUORUM_OWNER_ALIVE                                                  syscall.Errno = 5034\n\tERROR_NETWORK_NOT_AVAILABLE                                               syscall.Errno = 5035\n\tERROR_NODE_NOT_AVAILABLE                                                  syscall.Errno = 5036\n\tERROR_ALL_NODES_NOT_AVAILABLE                                             syscall.Errno = 5037\n\tERROR_RESOURCE_FAILED                                                     syscall.Errno = 5038\n\tERROR_CLUSTER_INVALID_NODE                                                syscall.Errno = 5039\n\tERROR_CLUSTER_NODE_EXISTS                                                 syscall.Errno = 5040\n\tERROR_CLUSTER_JOIN_IN_PROGRESS                                            syscall.Errno = 5041\n\tERROR_CLUSTER_NODE_NOT_FOUND                                              syscall.Errno = 5042\n\tERROR_CLUSTER_LOCAL_NODE_NOT_FOUND                                        syscall.Errno = 5043\n\tERROR_CLUSTER_NETWORK_EXISTS                                              syscall.Errno = 5044\n\tERROR_CLUSTER_NETWORK_NOT_FOUND                                           syscall.Errno = 5045\n\tERROR_CLUSTER_NETINTERFACE_EXISTS                                         syscall.Errno = 5046\n\tERROR_CLUSTER_NETINTERFACE_NOT_FOUND                                      syscall.Errno = 5047\n\tERROR_CLUSTER_INVALID_REQUEST                                             syscall.Errno = 5048\n\tERROR_CLUSTER_INVALID_NETWORK_PROVIDER                                    syscall.Errno = 5049\n\tERROR_CLUSTER_NODE_DOWN                                                   syscall.Errno = 5050\n\tERROR_CLUSTER_NODE_UNREACHABLE                                            syscall.Errno = 5051\n\tERROR_CLUSTER_NODE_NOT_MEMBER                                             syscall.Errno = 5052\n\tERROR_CLUSTER_JOIN_NOT_IN_PROGRESS                                        syscall.Errno = 5053\n\tERROR_CLUSTER_INVALID_NETWORK                                             syscall.Errno = 5054\n\tERROR_CLUSTER_NODE_UP                                                     syscall.Errno = 5056\n\tERROR_CLUSTER_IPADDR_IN_USE                                               syscall.Errno = 5057\n\tERROR_CLUSTER_NODE_NOT_PAUSED                                             syscall.Errno = 5058\n\tERROR_CLUSTER_NO_SECURITY_CONTEXT                                         syscall.Errno = 5059\n\tERROR_CLUSTER_NETWORK_NOT_INTERNAL                                        syscall.Errno = 5060\n\tERROR_CLUSTER_NODE_ALREADY_UP                                             syscall.Errno = 5061\n\tERROR_CLUSTER_NODE_ALREADY_DOWN                                           syscall.Errno = 5062\n\tERROR_CLUSTER_NETWORK_ALREADY_ONLINE                                      syscall.Errno = 5063\n\tERROR_CLUSTER_NETWORK_ALREADY_OFFLINE                                     syscall.Errno = 5064\n\tERROR_CLUSTER_NODE_ALREADY_MEMBER                                         syscall.Errno = 5065\n\tERROR_CLUSTER_LAST_INTERNAL_NETWORK                                       syscall.Errno = 5066\n\tERROR_CLUSTER_NETWORK_HAS_DEPENDENTS                                      syscall.Errno = 5067\n\tERROR_INVALID_OPERATION_ON_QUORUM                                         syscall.Errno = 5068\n\tERROR_DEPENDENCY_NOT_ALLOWED                                              syscall.Errno = 5069\n\tERROR_CLUSTER_NODE_PAUSED                                                 syscall.Errno = 5070\n\tERROR_NODE_CANT_HOST_RESOURCE                                             syscall.Errno = 5071\n\tERROR_CLUSTER_NODE_NOT_READY                                              syscall.Errno = 5072\n\tERROR_CLUSTER_NODE_SHUTTING_DOWN                                          syscall.Errno = 5073\n\tERROR_CLUSTER_JOIN_ABORTED                                                syscall.Errno = 5074\n\tERROR_CLUSTER_INCOMPATIBLE_VERSIONS                                       syscall.Errno = 5075\n\tERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED                                syscall.Errno = 5076\n\tERROR_CLUSTER_SYSTEM_CONFIG_CHANGED                                       syscall.Errno = 5077\n\tERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND                                     syscall.Errno = 5078\n\tERROR_CLUSTER_RESTYPE_NOT_SUPPORTED                                       syscall.Errno = 5079\n\tERROR_CLUSTER_RESNAME_NOT_FOUND                                           syscall.Errno = 5080\n\tERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED                                  syscall.Errno = 5081\n\tERROR_CLUSTER_OWNER_NOT_IN_PREFLIST                                       syscall.Errno = 5082\n\tERROR_CLUSTER_DATABASE_SEQMISMATCH                                        syscall.Errno = 5083\n\tERROR_RESMON_INVALID_STATE                                                syscall.Errno = 5084\n\tERROR_CLUSTER_GUM_NOT_LOCKER                                              syscall.Errno = 5085\n\tERROR_QUORUM_DISK_NOT_FOUND                                               syscall.Errno = 5086\n\tERROR_DATABASE_BACKUP_CORRUPT                                             syscall.Errno = 5087\n\tERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT                                   syscall.Errno = 5088\n\tERROR_RESOURCE_PROPERTY_UNCHANGEABLE                                      syscall.Errno = 5089\n\tERROR_NO_ADMIN_ACCESS_POINT                                               syscall.Errno = 5090\n\tERROR_CLUSTER_MEMBERSHIP_INVALID_STATE                                    syscall.Errno = 5890\n\tERROR_CLUSTER_QUORUMLOG_NOT_FOUND                                         syscall.Errno = 5891\n\tERROR_CLUSTER_MEMBERSHIP_HALT                                             syscall.Errno = 5892\n\tERROR_CLUSTER_INSTANCE_ID_MISMATCH                                        syscall.Errno = 5893\n\tERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP                                    syscall.Errno = 5894\n\tERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH                                 syscall.Errno = 5895\n\tERROR_CLUSTER_EVICT_WITHOUT_CLEANUP                                       syscall.Errno = 5896\n\tERROR_CLUSTER_PARAMETER_MISMATCH                                          syscall.Errno = 5897\n\tERROR_NODE_CANNOT_BE_CLUSTERED                                            syscall.Errno = 5898\n\tERROR_CLUSTER_WRONG_OS_VERSION                                            syscall.Errno = 5899\n\tERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME                                syscall.Errno = 5900\n\tERROR_CLUSCFG_ALREADY_COMMITTED                                           syscall.Errno = 5901\n\tERROR_CLUSCFG_ROLLBACK_FAILED                                             syscall.Errno = 5902\n\tERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT                           syscall.Errno = 5903\n\tERROR_CLUSTER_OLD_VERSION                                                 syscall.Errno = 5904\n\tERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME                               syscall.Errno = 5905\n\tERROR_CLUSTER_NO_NET_ADAPTERS                                             syscall.Errno = 5906\n\tERROR_CLUSTER_POISONED                                                    syscall.Errno = 5907\n\tERROR_CLUSTER_GROUP_MOVING                                                syscall.Errno = 5908\n\tERROR_CLUSTER_RESOURCE_TYPE_BUSY                                          syscall.Errno = 5909\n\tERROR_RESOURCE_CALL_TIMED_OUT                                             syscall.Errno = 5910\n\tERROR_INVALID_CLUSTER_IPV6_ADDRESS                                        syscall.Errno = 5911\n\tERROR_CLUSTER_INTERNAL_INVALID_FUNCTION                                   syscall.Errno = 5912\n\tERROR_CLUSTER_PARAMETER_OUT_OF_BOUNDS                                     syscall.Errno = 5913\n\tERROR_CLUSTER_PARTIAL_SEND                                                syscall.Errno = 5914\n\tERROR_CLUSTER_REGISTRY_INVALID_FUNCTION                                   syscall.Errno = 5915\n\tERROR_CLUSTER_INVALID_STRING_TERMINATION                                  syscall.Errno = 5916\n\tERROR_CLUSTER_INVALID_STRING_FORMAT                                       syscall.Errno = 5917\n\tERROR_CLUSTER_DATABASE_TRANSACTION_IN_PROGRESS                            syscall.Errno = 5918\n\tERROR_CLUSTER_DATABASE_TRANSACTION_NOT_IN_PROGRESS                        syscall.Errno = 5919\n\tERROR_CLUSTER_NULL_DATA                                                   syscall.Errno = 5920\n\tERROR_CLUSTER_PARTIAL_READ                                                syscall.Errno = 5921\n\tERROR_CLUSTER_PARTIAL_WRITE                                               syscall.Errno = 5922\n\tERROR_CLUSTER_CANT_DESERIALIZE_DATA                                       syscall.Errno = 5923\n\tERROR_DEPENDENT_RESOURCE_PROPERTY_CONFLICT                                syscall.Errno = 5924\n\tERROR_CLUSTER_NO_QUORUM                                                   syscall.Errno = 5925\n\tERROR_CLUSTER_INVALID_IPV6_NETWORK                                        syscall.Errno = 5926\n\tERROR_CLUSTER_INVALID_IPV6_TUNNEL_NETWORK                                 syscall.Errno = 5927\n\tERROR_QUORUM_NOT_ALLOWED_IN_THIS_GROUP                                    syscall.Errno = 5928\n\tERROR_DEPENDENCY_TREE_TOO_COMPLEX                                         syscall.Errno = 5929\n\tERROR_EXCEPTION_IN_RESOURCE_CALL                                          syscall.Errno = 5930\n\tERROR_CLUSTER_RHS_FAILED_INITIALIZATION                                   syscall.Errno = 5931\n\tERROR_CLUSTER_NOT_INSTALLED                                               syscall.Errno = 5932\n\tERROR_CLUSTER_RESOURCES_MUST_BE_ONLINE_ON_THE_SAME_NODE                   syscall.Errno = 5933\n\tERROR_CLUSTER_MAX_NODES_IN_CLUSTER                                        syscall.Errno = 5934\n\tERROR_CLUSTER_TOO_MANY_NODES                                              syscall.Errno = 5935\n\tERROR_CLUSTER_OBJECT_ALREADY_USED                                         syscall.Errno = 5936\n\tERROR_NONCORE_GROUPS_FOUND                                                syscall.Errno = 5937\n\tERROR_FILE_SHARE_RESOURCE_CONFLICT                                        syscall.Errno = 5938\n\tERROR_CLUSTER_EVICT_INVALID_REQUEST                                       syscall.Errno = 5939\n\tERROR_CLUSTER_SINGLETON_RESOURCE                                          syscall.Errno = 5940\n\tERROR_CLUSTER_GROUP_SINGLETON_RESOURCE                                    syscall.Errno = 5941\n\tERROR_CLUSTER_RESOURCE_PROVIDER_FAILED                                    syscall.Errno = 5942\n\tERROR_CLUSTER_RESOURCE_CONFIGURATION_ERROR                                syscall.Errno = 5943\n\tERROR_CLUSTER_GROUP_BUSY                                                  syscall.Errno = 5944\n\tERROR_CLUSTER_NOT_SHARED_VOLUME                                           syscall.Errno = 5945\n\tERROR_CLUSTER_INVALID_SECURITY_DESCRIPTOR                                 syscall.Errno = 5946\n\tERROR_CLUSTER_SHARED_VOLUMES_IN_USE                                       syscall.Errno = 5947\n\tERROR_CLUSTER_USE_SHARED_VOLUMES_API                                      syscall.Errno = 5948\n\tERROR_CLUSTER_BACKUP_IN_PROGRESS                                          syscall.Errno = 5949\n\tERROR_NON_CSV_PATH                                                        syscall.Errno = 5950\n\tERROR_CSV_VOLUME_NOT_LOCAL                                                syscall.Errno = 5951\n\tERROR_CLUSTER_WATCHDOG_TERMINATING                                        syscall.Errno = 5952\n\tERROR_CLUSTER_RESOURCE_VETOED_MOVE_INCOMPATIBLE_NODES                     syscall.Errno = 5953\n\tERROR_CLUSTER_INVALID_NODE_WEIGHT                                         syscall.Errno = 5954\n\tERROR_CLUSTER_RESOURCE_VETOED_CALL                                        syscall.Errno = 5955\n\tERROR_RESMON_SYSTEM_RESOURCES_LACKING                                     syscall.Errno = 5956\n\tERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_DESTINATION    syscall.Errno = 5957\n\tERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_SOURCE         syscall.Errno = 5958\n\tERROR_CLUSTER_GROUP_QUEUED                                                syscall.Errno = 5959\n\tERROR_CLUSTER_RESOURCE_LOCKED_STATUS                                      syscall.Errno = 5960\n\tERROR_CLUSTER_SHARED_VOLUME_FAILOVER_NOT_ALLOWED                          syscall.Errno = 5961\n\tERROR_CLUSTER_NODE_DRAIN_IN_PROGRESS                                      syscall.Errno = 5962\n\tERROR_CLUSTER_DISK_NOT_CONNECTED                                          syscall.Errno = 5963\n\tERROR_DISK_NOT_CSV_CAPABLE                                                syscall.Errno = 5964\n\tERROR_RESOURCE_NOT_IN_AVAILABLE_STORAGE                                   syscall.Errno = 5965\n\tERROR_CLUSTER_SHARED_VOLUME_REDIRECTED                                    syscall.Errno = 5966\n\tERROR_CLUSTER_SHARED_VOLUME_NOT_REDIRECTED                                syscall.Errno = 5967\n\tERROR_CLUSTER_CANNOT_RETURN_PROPERTIES                                    syscall.Errno = 5968\n\tERROR_CLUSTER_RESOURCE_CONTAINS_UNSUPPORTED_DIFF_AREA_FOR_SHARED_VOLUMES  syscall.Errno = 5969\n\tERROR_CLUSTER_RESOURCE_IS_IN_MAINTENANCE_MODE                             syscall.Errno = 5970\n\tERROR_CLUSTER_AFFINITY_CONFLICT                                           syscall.Errno = 5971\n\tERROR_CLUSTER_RESOURCE_IS_REPLICA_VIRTUAL_MACHINE                         syscall.Errno = 5972\n\tERROR_CLUSTER_UPGRADE_INCOMPATIBLE_VERSIONS                               syscall.Errno = 5973\n\tERROR_CLUSTER_UPGRADE_FIX_QUORUM_NOT_SUPPORTED                            syscall.Errno = 5974\n\tERROR_CLUSTER_UPGRADE_RESTART_REQUIRED                                    syscall.Errno = 5975\n\tERROR_CLUSTER_UPGRADE_IN_PROGRESS                                         syscall.Errno = 5976\n\tERROR_CLUSTER_UPGRADE_INCOMPLETE                                          syscall.Errno = 5977\n\tERROR_CLUSTER_NODE_IN_GRACE_PERIOD                                        syscall.Errno = 5978\n\tERROR_CLUSTER_CSV_IO_PAUSE_TIMEOUT                                        syscall.Errno = 5979\n\tERROR_NODE_NOT_ACTIVE_CLUSTER_MEMBER                                      syscall.Errno = 5980\n\tERROR_CLUSTER_RESOURCE_NOT_MONITORED                                      syscall.Errno = 5981\n\tERROR_CLUSTER_RESOURCE_DOES_NOT_SUPPORT_UNMONITORED                       syscall.Errno = 5982\n\tERROR_CLUSTER_RESOURCE_IS_REPLICATED                                      syscall.Errno = 5983\n\tERROR_CLUSTER_NODE_ISOLATED                                               syscall.Errno = 5984\n\tERROR_CLUSTER_NODE_QUARANTINED                                            syscall.Errno = 5985\n\tERROR_CLUSTER_DATABASE_UPDATE_CONDITION_FAILED                            syscall.Errno = 5986\n\tERROR_CLUSTER_SPACE_DEGRADED                                              syscall.Errno = 5987\n\tERROR_CLUSTER_TOKEN_DELEGATION_NOT_SUPPORTED                              syscall.Errno = 5988\n\tERROR_CLUSTER_CSV_INVALID_HANDLE                                          syscall.Errno = 5989\n\tERROR_CLUSTER_CSV_SUPPORTED_ONLY_ON_COORDINATOR                           syscall.Errno = 5990\n\tERROR_GROUPSET_NOT_AVAILABLE                                              syscall.Errno = 5991\n\tERROR_GROUPSET_NOT_FOUND                                                  syscall.Errno = 5992\n\tERROR_GROUPSET_CANT_PROVIDE                                               syscall.Errno = 5993\n\tERROR_CLUSTER_FAULT_DOMAIN_PARENT_NOT_FOUND                               syscall.Errno = 5994\n\tERROR_CLUSTER_FAULT_DOMAIN_INVALID_HIERARCHY                              syscall.Errno = 5995\n\tERROR_CLUSTER_FAULT_DOMAIN_FAILED_S2D_VALIDATION                          syscall.Errno = 5996\n\tERROR_CLUSTER_FAULT_DOMAIN_S2D_CONNECTIVITY_LOSS                          syscall.Errno = 5997\n\tERROR_CLUSTER_INVALID_INFRASTRUCTURE_FILESERVER_NAME                      syscall.Errno = 5998\n\tERROR_CLUSTERSET_MANAGEMENT_CLUSTER_UNREACHABLE                           syscall.Errno = 5999\n\tERROR_ENCRYPTION_FAILED                                                   syscall.Errno = 6000\n\tERROR_DECRYPTION_FAILED                                                   syscall.Errno = 6001\n\tERROR_FILE_ENCRYPTED                                                      syscall.Errno = 6002\n\tERROR_NO_RECOVERY_POLICY                                                  syscall.Errno = 6003\n\tERROR_NO_EFS                                                              syscall.Errno = 6004\n\tERROR_WRONG_EFS                                                           syscall.Errno = 6005\n\tERROR_NO_USER_KEYS                                                        syscall.Errno = 6006\n\tERROR_FILE_NOT_ENCRYPTED                                                  syscall.Errno = 6007\n\tERROR_NOT_EXPORT_FORMAT                                                   syscall.Errno = 6008\n\tERROR_FILE_READ_ONLY                                                      syscall.Errno = 6009\n\tERROR_DIR_EFS_DISALLOWED                                                  syscall.Errno = 6010\n\tERROR_EFS_SERVER_NOT_TRUSTED                                              syscall.Errno = 6011\n\tERROR_BAD_RECOVERY_POLICY                                                 syscall.Errno = 6012\n\tERROR_EFS_ALG_BLOB_TOO_BIG                                                syscall.Errno = 6013\n\tERROR_VOLUME_NOT_SUPPORT_EFS                                              syscall.Errno = 6014\n\tERROR_EFS_DISABLED                                                        syscall.Errno = 6015\n\tERROR_EFS_VERSION_NOT_SUPPORT                                             syscall.Errno = 6016\n\tERROR_CS_ENCRYPTION_INVALID_SERVER_RESPONSE                               syscall.Errno = 6017\n\tERROR_CS_ENCRYPTION_UNSUPPORTED_SERVER                                    syscall.Errno = 6018\n\tERROR_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE                               syscall.Errno = 6019\n\tERROR_CS_ENCRYPTION_NEW_ENCRYPTED_FILE                                    syscall.Errno = 6020\n\tERROR_CS_ENCRYPTION_FILE_NOT_CSE                                          syscall.Errno = 6021\n\tERROR_ENCRYPTION_POLICY_DENIES_OPERATION                                  syscall.Errno = 6022\n\tERROR_WIP_ENCRYPTION_FAILED                                               syscall.Errno = 6023\n\tERROR_NO_BROWSER_SERVERS_FOUND                                            syscall.Errno = 6118\n\tSCHED_E_SERVICE_NOT_LOCALSYSTEM                                           syscall.Errno = 6200\n\tERROR_LOG_SECTOR_INVALID                                                  syscall.Errno = 6600\n\tERROR_LOG_SECTOR_PARITY_INVALID                                           syscall.Errno = 6601\n\tERROR_LOG_SECTOR_REMAPPED                                                 syscall.Errno = 6602\n\tERROR_LOG_BLOCK_INCOMPLETE                                                syscall.Errno = 6603\n\tERROR_LOG_INVALID_RANGE                                                   syscall.Errno = 6604\n\tERROR_LOG_BLOCKS_EXHAUSTED                                                syscall.Errno = 6605\n\tERROR_LOG_READ_CONTEXT_INVALID                                            syscall.Errno = 6606\n\tERROR_LOG_RESTART_INVALID                                                 syscall.Errno = 6607\n\tERROR_LOG_BLOCK_VERSION                                                   syscall.Errno = 6608\n\tERROR_LOG_BLOCK_INVALID                                                   syscall.Errno = 6609\n\tERROR_LOG_READ_MODE_INVALID                                               syscall.Errno = 6610\n\tERROR_LOG_NO_RESTART                                                      syscall.Errno = 6611\n\tERROR_LOG_METADATA_CORRUPT                                                syscall.Errno = 6612\n\tERROR_LOG_METADATA_INVALID                                                syscall.Errno = 6613\n\tERROR_LOG_METADATA_INCONSISTENT                                           syscall.Errno = 6614\n\tERROR_LOG_RESERVATION_INVALID                                             syscall.Errno = 6615\n\tERROR_LOG_CANT_DELETE                                                     syscall.Errno = 6616\n\tERROR_LOG_CONTAINER_LIMIT_EXCEEDED                                        syscall.Errno = 6617\n\tERROR_LOG_START_OF_LOG                                                    syscall.Errno = 6618\n\tERROR_LOG_POLICY_ALREADY_INSTALLED                                        syscall.Errno = 6619\n\tERROR_LOG_POLICY_NOT_INSTALLED                                            syscall.Errno = 6620\n\tERROR_LOG_POLICY_INVALID                                                  syscall.Errno = 6621\n\tERROR_LOG_POLICY_CONFLICT                                                 syscall.Errno = 6622\n\tERROR_LOG_PINNED_ARCHIVE_TAIL                                             syscall.Errno = 6623\n\tERROR_LOG_RECORD_NONEXISTENT                                              syscall.Errno = 6624\n\tERROR_LOG_RECORDS_RESERVED_INVALID                                        syscall.Errno = 6625\n\tERROR_LOG_SPACE_RESERVED_INVALID                                          syscall.Errno = 6626\n\tERROR_LOG_TAIL_INVALID                                                    syscall.Errno = 6627\n\tERROR_LOG_FULL                                                            syscall.Errno = 6628\n\tERROR_COULD_NOT_RESIZE_LOG                                                syscall.Errno = 6629\n\tERROR_LOG_MULTIPLEXED                                                     syscall.Errno = 6630\n\tERROR_LOG_DEDICATED                                                       syscall.Errno = 6631\n\tERROR_LOG_ARCHIVE_NOT_IN_PROGRESS                                         syscall.Errno = 6632\n\tERROR_LOG_ARCHIVE_IN_PROGRESS                                             syscall.Errno = 6633\n\tERROR_LOG_EPHEMERAL                                                       syscall.Errno = 6634\n\tERROR_LOG_NOT_ENOUGH_CONTAINERS                                           syscall.Errno = 6635\n\tERROR_LOG_CLIENT_ALREADY_REGISTERED                                       syscall.Errno = 6636\n\tERROR_LOG_CLIENT_NOT_REGISTERED                                           syscall.Errno = 6637\n\tERROR_LOG_FULL_HANDLER_IN_PROGRESS                                        syscall.Errno = 6638\n\tERROR_LOG_CONTAINER_READ_FAILED                                           syscall.Errno = 6639\n\tERROR_LOG_CONTAINER_WRITE_FAILED                                          syscall.Errno = 6640\n\tERROR_LOG_CONTAINER_OPEN_FAILED                                           syscall.Errno = 6641\n\tERROR_LOG_CONTAINER_STATE_INVALID                                         syscall.Errno = 6642\n\tERROR_LOG_STATE_INVALID                                                   syscall.Errno = 6643\n\tERROR_LOG_PINNED                                                          syscall.Errno = 6644\n\tERROR_LOG_METADATA_FLUSH_FAILED                                           syscall.Errno = 6645\n\tERROR_LOG_INCONSISTENT_SECURITY                                           syscall.Errno = 6646\n\tERROR_LOG_APPENDED_FLUSH_FAILED                                           syscall.Errno = 6647\n\tERROR_LOG_PINNED_RESERVATION                                              syscall.Errno = 6648\n\tERROR_INVALID_TRANSACTION                                                 syscall.Errno = 6700\n\tERROR_TRANSACTION_NOT_ACTIVE                                              syscall.Errno = 6701\n\tERROR_TRANSACTION_REQUEST_NOT_VALID                                       syscall.Errno = 6702\n\tERROR_TRANSACTION_NOT_REQUESTED                                           syscall.Errno = 6703\n\tERROR_TRANSACTION_ALREADY_ABORTED                                         syscall.Errno = 6704\n\tERROR_TRANSACTION_ALREADY_COMMITTED                                       syscall.Errno = 6705\n\tERROR_TM_INITIALIZATION_FAILED                                            syscall.Errno = 6706\n\tERROR_RESOURCEMANAGER_READ_ONLY                                           syscall.Errno = 6707\n\tERROR_TRANSACTION_NOT_JOINED                                              syscall.Errno = 6708\n\tERROR_TRANSACTION_SUPERIOR_EXISTS                                         syscall.Errno = 6709\n\tERROR_CRM_PROTOCOL_ALREADY_EXISTS                                         syscall.Errno = 6710\n\tERROR_TRANSACTION_PROPAGATION_FAILED                                      syscall.Errno = 6711\n\tERROR_CRM_PROTOCOL_NOT_FOUND                                              syscall.Errno = 6712\n\tERROR_TRANSACTION_INVALID_MARSHALL_BUFFER                                 syscall.Errno = 6713\n\tERROR_CURRENT_TRANSACTION_NOT_VALID                                       syscall.Errno = 6714\n\tERROR_TRANSACTION_NOT_FOUND                                               syscall.Errno = 6715\n\tERROR_RESOURCEMANAGER_NOT_FOUND                                           syscall.Errno = 6716\n\tERROR_ENLISTMENT_NOT_FOUND                                                syscall.Errno = 6717\n\tERROR_TRANSACTIONMANAGER_NOT_FOUND                                        syscall.Errno = 6718\n\tERROR_TRANSACTIONMANAGER_NOT_ONLINE                                       syscall.Errno = 6719\n\tERROR_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION                          syscall.Errno = 6720\n\tERROR_TRANSACTION_NOT_ROOT                                                syscall.Errno = 6721\n\tERROR_TRANSACTION_OBJECT_EXPIRED                                          syscall.Errno = 6722\n\tERROR_TRANSACTION_RESPONSE_NOT_ENLISTED                                   syscall.Errno = 6723\n\tERROR_TRANSACTION_RECORD_TOO_LONG                                         syscall.Errno = 6724\n\tERROR_IMPLICIT_TRANSACTION_NOT_SUPPORTED                                  syscall.Errno = 6725\n\tERROR_TRANSACTION_INTEGRITY_VIOLATED                                      syscall.Errno = 6726\n\tERROR_TRANSACTIONMANAGER_IDENTITY_MISMATCH                                syscall.Errno = 6727\n\tERROR_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT                                    syscall.Errno = 6728\n\tERROR_TRANSACTION_MUST_WRITETHROUGH                                       syscall.Errno = 6729\n\tERROR_TRANSACTION_NO_SUPERIOR                                             syscall.Errno = 6730\n\tERROR_HEURISTIC_DAMAGE_POSSIBLE                                           syscall.Errno = 6731\n\tERROR_TRANSACTIONAL_CONFLICT                                              syscall.Errno = 6800\n\tERROR_RM_NOT_ACTIVE                                                       syscall.Errno = 6801\n\tERROR_RM_METADATA_CORRUPT                                                 syscall.Errno = 6802\n\tERROR_DIRECTORY_NOT_RM                                                    syscall.Errno = 6803\n\tERROR_TRANSACTIONS_UNSUPPORTED_REMOTE                                     syscall.Errno = 6805\n\tERROR_LOG_RESIZE_INVALID_SIZE                                             syscall.Errno = 6806\n\tERROR_OBJECT_NO_LONGER_EXISTS                                             syscall.Errno = 6807\n\tERROR_STREAM_MINIVERSION_NOT_FOUND                                        syscall.Errno = 6808\n\tERROR_STREAM_MINIVERSION_NOT_VALID                                        syscall.Errno = 6809\n\tERROR_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION                 syscall.Errno = 6810\n\tERROR_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT                            syscall.Errno = 6811\n\tERROR_CANT_CREATE_MORE_STREAM_MINIVERSIONS                                syscall.Errno = 6812\n\tERROR_REMOTE_FILE_VERSION_MISMATCH                                        syscall.Errno = 6814\n\tERROR_HANDLE_NO_LONGER_VALID                                              syscall.Errno = 6815\n\tERROR_NO_TXF_METADATA                                                     syscall.Errno = 6816\n\tERROR_LOG_CORRUPTION_DETECTED                                             syscall.Errno = 6817\n\tERROR_CANT_RECOVER_WITH_HANDLE_OPEN                                       syscall.Errno = 6818\n\tERROR_RM_DISCONNECTED                                                     syscall.Errno = 6819\n\tERROR_ENLISTMENT_NOT_SUPERIOR                                             syscall.Errno = 6820\n\tERROR_RECOVERY_NOT_NEEDED                                                 syscall.Errno = 6821\n\tERROR_RM_ALREADY_STARTED                                                  syscall.Errno = 6822\n\tERROR_FILE_IDENTITY_NOT_PERSISTENT                                        syscall.Errno = 6823\n\tERROR_CANT_BREAK_TRANSACTIONAL_DEPENDENCY                                 syscall.Errno = 6824\n\tERROR_CANT_CROSS_RM_BOUNDARY                                              syscall.Errno = 6825\n\tERROR_TXF_DIR_NOT_EMPTY                                                   syscall.Errno = 6826\n\tERROR_INDOUBT_TRANSACTIONS_EXIST                                          syscall.Errno = 6827\n\tERROR_TM_VOLATILE                                                         syscall.Errno = 6828\n\tERROR_ROLLBACK_TIMER_EXPIRED                                              syscall.Errno = 6829\n\tERROR_TXF_ATTRIBUTE_CORRUPT                                               syscall.Errno = 6830\n\tERROR_EFS_NOT_ALLOWED_IN_TRANSACTION                                      syscall.Errno = 6831\n\tERROR_TRANSACTIONAL_OPEN_NOT_ALLOWED                                      syscall.Errno = 6832\n\tERROR_LOG_GROWTH_FAILED                                                   syscall.Errno = 6833\n\tERROR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE                               syscall.Errno = 6834\n\tERROR_TXF_METADATA_ALREADY_PRESENT                                        syscall.Errno = 6835\n\tERROR_TRANSACTION_SCOPE_CALLBACKS_NOT_SET                                 syscall.Errno = 6836\n\tERROR_TRANSACTION_REQUIRED_PROMOTION                                      syscall.Errno = 6837\n\tERROR_CANNOT_EXECUTE_FILE_IN_TRANSACTION                                  syscall.Errno = 6838\n\tERROR_TRANSACTIONS_NOT_FROZEN                                             syscall.Errno = 6839\n\tERROR_TRANSACTION_FREEZE_IN_PROGRESS                                      syscall.Errno = 6840\n\tERROR_NOT_SNAPSHOT_VOLUME                                                 syscall.Errno = 6841\n\tERROR_NO_SAVEPOINT_WITH_OPEN_FILES                                        syscall.Errno = 6842\n\tERROR_DATA_LOST_REPAIR                                                    syscall.Errno = 6843\n\tERROR_SPARSE_NOT_ALLOWED_IN_TRANSACTION                                   syscall.Errno = 6844\n\tERROR_TM_IDENTITY_MISMATCH                                                syscall.Errno = 6845\n\tERROR_FLOATED_SECTION                                                     syscall.Errno = 6846\n\tERROR_CANNOT_ACCEPT_TRANSACTED_WORK                                       syscall.Errno = 6847\n\tERROR_CANNOT_ABORT_TRANSACTIONS                                           syscall.Errno = 6848\n\tERROR_BAD_CLUSTERS                                                        syscall.Errno = 6849\n\tERROR_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION                              syscall.Errno = 6850\n\tERROR_VOLUME_DIRTY                                                        syscall.Errno = 6851\n\tERROR_NO_LINK_TRACKING_IN_TRANSACTION                                     syscall.Errno = 6852\n\tERROR_OPERATION_NOT_SUPPORTED_IN_TRANSACTION                              syscall.Errno = 6853\n\tERROR_EXPIRED_HANDLE                                                      syscall.Errno = 6854\n\tERROR_TRANSACTION_NOT_ENLISTED                                            syscall.Errno = 6855\n\tERROR_CTX_WINSTATION_NAME_INVALID                                         syscall.Errno = 7001\n\tERROR_CTX_INVALID_PD                                                      syscall.Errno = 7002\n\tERROR_CTX_PD_NOT_FOUND                                                    syscall.Errno = 7003\n\tERROR_CTX_WD_NOT_FOUND                                                    syscall.Errno = 7004\n\tERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY                                      syscall.Errno = 7005\n\tERROR_CTX_SERVICE_NAME_COLLISION                                          syscall.Errno = 7006\n\tERROR_CTX_CLOSE_PENDING                                                   syscall.Errno = 7007\n\tERROR_CTX_NO_OUTBUF                                                       syscall.Errno = 7008\n\tERROR_CTX_MODEM_INF_NOT_FOUND                                             syscall.Errno = 7009\n\tERROR_CTX_INVALID_MODEMNAME                                               syscall.Errno = 7010\n\tERROR_CTX_MODEM_RESPONSE_ERROR                                            syscall.Errno = 7011\n\tERROR_CTX_MODEM_RESPONSE_TIMEOUT                                          syscall.Errno = 7012\n\tERROR_CTX_MODEM_RESPONSE_NO_CARRIER                                       syscall.Errno = 7013\n\tERROR_CTX_MODEM_RESPONSE_NO_DIALTONE                                      syscall.Errno = 7014\n\tERROR_CTX_MODEM_RESPONSE_BUSY                                             syscall.Errno = 7015\n\tERROR_CTX_MODEM_RESPONSE_VOICE                                            syscall.Errno = 7016\n\tERROR_CTX_TD_ERROR                                                        syscall.Errno = 7017\n\tERROR_CTX_WINSTATION_NOT_FOUND                                            syscall.Errno = 7022\n\tERROR_CTX_WINSTATION_ALREADY_EXISTS                                       syscall.Errno = 7023\n\tERROR_CTX_WINSTATION_BUSY                                                 syscall.Errno = 7024\n\tERROR_CTX_BAD_VIDEO_MODE                                                  syscall.Errno = 7025\n\tERROR_CTX_GRAPHICS_INVALID                                                syscall.Errno = 7035\n\tERROR_CTX_LOGON_DISABLED                                                  syscall.Errno = 7037\n\tERROR_CTX_NOT_CONSOLE                                                     syscall.Errno = 7038\n\tERROR_CTX_CLIENT_QUERY_TIMEOUT                                            syscall.Errno = 7040\n\tERROR_CTX_CONSOLE_DISCONNECT                                              syscall.Errno = 7041\n\tERROR_CTX_CONSOLE_CONNECT                                                 syscall.Errno = 7042\n\tERROR_CTX_SHADOW_DENIED                                                   syscall.Errno = 7044\n\tERROR_CTX_WINSTATION_ACCESS_DENIED                                        syscall.Errno = 7045\n\tERROR_CTX_INVALID_WD                                                      syscall.Errno = 7049\n\tERROR_CTX_SHADOW_INVALID                                                  syscall.Errno = 7050\n\tERROR_CTX_SHADOW_DISABLED                                                 syscall.Errno = 7051\n\tERROR_CTX_CLIENT_LICENSE_IN_USE                                           syscall.Errno = 7052\n\tERROR_CTX_CLIENT_LICENSE_NOT_SET                                          syscall.Errno = 7053\n\tERROR_CTX_LICENSE_NOT_AVAILABLE                                           syscall.Errno = 7054\n\tERROR_CTX_LICENSE_CLIENT_INVALID                                          syscall.Errno = 7055\n\tERROR_CTX_LICENSE_EXPIRED                                                 syscall.Errno = 7056\n\tERROR_CTX_SHADOW_NOT_RUNNING                                              syscall.Errno = 7057\n\tERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE                                     syscall.Errno = 7058\n\tERROR_ACTIVATION_COUNT_EXCEEDED                                           syscall.Errno = 7059\n\tERROR_CTX_WINSTATIONS_DISABLED                                            syscall.Errno = 7060\n\tERROR_CTX_ENCRYPTION_LEVEL_REQUIRED                                       syscall.Errno = 7061\n\tERROR_CTX_SESSION_IN_USE                                                  syscall.Errno = 7062\n\tERROR_CTX_NO_FORCE_LOGOFF                                                 syscall.Errno = 7063\n\tERROR_CTX_ACCOUNT_RESTRICTION                                             syscall.Errno = 7064\n\tERROR_RDP_PROTOCOL_ERROR                                                  syscall.Errno = 7065\n\tERROR_CTX_CDM_CONNECT                                                     syscall.Errno = 7066\n\tERROR_CTX_CDM_DISCONNECT                                                  syscall.Errno = 7067\n\tERROR_CTX_SECURITY_LAYER_ERROR                                            syscall.Errno = 7068\n\tERROR_TS_INCOMPATIBLE_SESSIONS                                            syscall.Errno = 7069\n\tERROR_TS_VIDEO_SUBSYSTEM_ERROR                                            syscall.Errno = 7070\n\tFRS_ERR_INVALID_API_SEQUENCE                                              syscall.Errno = 8001\n\tFRS_ERR_STARTING_SERVICE                                                  syscall.Errno = 8002\n\tFRS_ERR_STOPPING_SERVICE                                                  syscall.Errno = 8003\n\tFRS_ERR_INTERNAL_API                                                      syscall.Errno = 8004\n\tFRS_ERR_INTERNAL                                                          syscall.Errno = 8005\n\tFRS_ERR_SERVICE_COMM                                                      syscall.Errno = 8006\n\tFRS_ERR_INSUFFICIENT_PRIV                                                 syscall.Errno = 8007\n\tFRS_ERR_AUTHENTICATION                                                    syscall.Errno = 8008\n\tFRS_ERR_PARENT_INSUFFICIENT_PRIV                                          syscall.Errno = 8009\n\tFRS_ERR_PARENT_AUTHENTICATION                                             syscall.Errno = 8010\n\tFRS_ERR_CHILD_TO_PARENT_COMM                                              syscall.Errno = 8011\n\tFRS_ERR_PARENT_TO_CHILD_COMM                                              syscall.Errno = 8012\n\tFRS_ERR_SYSVOL_POPULATE                                                   syscall.Errno = 8013\n\tFRS_ERR_SYSVOL_POPULATE_TIMEOUT                                           syscall.Errno = 8014\n\tFRS_ERR_SYSVOL_IS_BUSY                                                    syscall.Errno = 8015\n\tFRS_ERR_SYSVOL_DEMOTE                                                     syscall.Errno = 8016\n\tFRS_ERR_INVALID_SERVICE_PARAMETER                                         syscall.Errno = 8017\n\tDS_S_SUCCESS                                                                            = ERROR_SUCCESS\n\tERROR_DS_NOT_INSTALLED                                                    syscall.Errno = 8200\n\tERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY                                     syscall.Errno = 8201\n\tERROR_DS_NO_ATTRIBUTE_OR_VALUE                                            syscall.Errno = 8202\n\tERROR_DS_INVALID_ATTRIBUTE_SYNTAX                                         syscall.Errno = 8203\n\tERROR_DS_ATTRIBUTE_TYPE_UNDEFINED                                         syscall.Errno = 8204\n\tERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS                                        syscall.Errno = 8205\n\tERROR_DS_BUSY                                                             syscall.Errno = 8206\n\tERROR_DS_UNAVAILABLE                                                      syscall.Errno = 8207\n\tERROR_DS_NO_RIDS_ALLOCATED                                                syscall.Errno = 8208\n\tERROR_DS_NO_MORE_RIDS                                                     syscall.Errno = 8209\n\tERROR_DS_INCORRECT_ROLE_OWNER                                             syscall.Errno = 8210\n\tERROR_DS_RIDMGR_INIT_ERROR                                                syscall.Errno = 8211\n\tERROR_DS_OBJ_CLASS_VIOLATION                                              syscall.Errno = 8212\n\tERROR_DS_CANT_ON_NON_LEAF                                                 syscall.Errno = 8213\n\tERROR_DS_CANT_ON_RDN                                                      syscall.Errno = 8214\n\tERROR_DS_CANT_MOD_OBJ_CLASS                                               syscall.Errno = 8215\n\tERROR_DS_CROSS_DOM_MOVE_ERROR                                             syscall.Errno = 8216\n\tERROR_DS_GC_NOT_AVAILABLE                                                 syscall.Errno = 8217\n\tERROR_SHARED_POLICY                                                       syscall.Errno = 8218\n\tERROR_POLICY_OBJECT_NOT_FOUND                                             syscall.Errno = 8219\n\tERROR_POLICY_ONLY_IN_DS                                                   syscall.Errno = 8220\n\tERROR_PROMOTION_ACTIVE                                                    syscall.Errno = 8221\n\tERROR_NO_PROMOTION_ACTIVE                                                 syscall.Errno = 8222\n\tERROR_DS_OPERATIONS_ERROR                                                 syscall.Errno = 8224\n\tERROR_DS_PROTOCOL_ERROR                                                   syscall.Errno = 8225\n\tERROR_DS_TIMELIMIT_EXCEEDED                                               syscall.Errno = 8226\n\tERROR_DS_SIZELIMIT_EXCEEDED                                               syscall.Errno = 8227\n\tERROR_DS_ADMIN_LIMIT_EXCEEDED                                             syscall.Errno = 8228\n\tERROR_DS_COMPARE_FALSE                                                    syscall.Errno = 8229\n\tERROR_DS_COMPARE_TRUE                                                     syscall.Errno = 8230\n\tERROR_DS_AUTH_METHOD_NOT_SUPPORTED                                        syscall.Errno = 8231\n\tERROR_DS_STRONG_AUTH_REQUIRED                                             syscall.Errno = 8232\n\tERROR_DS_INAPPROPRIATE_AUTH                                               syscall.Errno = 8233\n\tERROR_DS_AUTH_UNKNOWN                                                     syscall.Errno = 8234\n\tERROR_DS_REFERRAL                                                         syscall.Errno = 8235\n\tERROR_DS_UNAVAILABLE_CRIT_EXTENSION                                       syscall.Errno = 8236\n\tERROR_DS_CONFIDENTIALITY_REQUIRED                                         syscall.Errno = 8237\n\tERROR_DS_INAPPROPRIATE_MATCHING                                           syscall.Errno = 8238\n\tERROR_DS_CONSTRAINT_VIOLATION                                             syscall.Errno = 8239\n\tERROR_DS_NO_SUCH_OBJECT                                                   syscall.Errno = 8240\n\tERROR_DS_ALIAS_PROBLEM                                                    syscall.Errno = 8241\n\tERROR_DS_INVALID_DN_SYNTAX                                                syscall.Errno = 8242\n\tERROR_DS_IS_LEAF                                                          syscall.Errno = 8243\n\tERROR_DS_ALIAS_DEREF_PROBLEM                                              syscall.Errno = 8244\n\tERROR_DS_UNWILLING_TO_PERFORM                                             syscall.Errno = 8245\n\tERROR_DS_LOOP_DETECT                                                      syscall.Errno = 8246\n\tERROR_DS_NAMING_VIOLATION                                                 syscall.Errno = 8247\n\tERROR_DS_OBJECT_RESULTS_TOO_LARGE                                         syscall.Errno = 8248\n\tERROR_DS_AFFECTS_MULTIPLE_DSAS                                            syscall.Errno = 8249\n\tERROR_DS_SERVER_DOWN                                                      syscall.Errno = 8250\n\tERROR_DS_LOCAL_ERROR                                                      syscall.Errno = 8251\n\tERROR_DS_ENCODING_ERROR                                                   syscall.Errno = 8252\n\tERROR_DS_DECODING_ERROR                                                   syscall.Errno = 8253\n\tERROR_DS_FILTER_UNKNOWN                                                   syscall.Errno = 8254\n\tERROR_DS_PARAM_ERROR                                                      syscall.Errno = 8255\n\tERROR_DS_NOT_SUPPORTED                                                    syscall.Errno = 8256\n\tERROR_DS_NO_RESULTS_RETURNED                                              syscall.Errno = 8257\n\tERROR_DS_CONTROL_NOT_FOUND                                                syscall.Errno = 8258\n\tERROR_DS_CLIENT_LOOP                                                      syscall.Errno = 8259\n\tERROR_DS_REFERRAL_LIMIT_EXCEEDED                                          syscall.Errno = 8260\n\tERROR_DS_SORT_CONTROL_MISSING                                             syscall.Errno = 8261\n\tERROR_DS_OFFSET_RANGE_ERROR                                               syscall.Errno = 8262\n\tERROR_DS_RIDMGR_DISABLED                                                  syscall.Errno = 8263\n\tERROR_DS_ROOT_MUST_BE_NC                                                  syscall.Errno = 8301\n\tERROR_DS_ADD_REPLICA_INHIBITED                                            syscall.Errno = 8302\n\tERROR_DS_ATT_NOT_DEF_IN_SCHEMA                                            syscall.Errno = 8303\n\tERROR_DS_MAX_OBJ_SIZE_EXCEEDED                                            syscall.Errno = 8304\n\tERROR_DS_OBJ_STRING_NAME_EXISTS                                           syscall.Errno = 8305\n\tERROR_DS_NO_RDN_DEFINED_IN_SCHEMA                                         syscall.Errno = 8306\n\tERROR_DS_RDN_DOESNT_MATCH_SCHEMA                                          syscall.Errno = 8307\n\tERROR_DS_NO_REQUESTED_ATTS_FOUND                                          syscall.Errno = 8308\n\tERROR_DS_USER_BUFFER_TO_SMALL                                             syscall.Errno = 8309\n\tERROR_DS_ATT_IS_NOT_ON_OBJ                                                syscall.Errno = 8310\n\tERROR_DS_ILLEGAL_MOD_OPERATION                                            syscall.Errno = 8311\n\tERROR_DS_OBJ_TOO_LARGE                                                    syscall.Errno = 8312\n\tERROR_DS_BAD_INSTANCE_TYPE                                                syscall.Errno = 8313\n\tERROR_DS_MASTERDSA_REQUIRED                                               syscall.Errno = 8314\n\tERROR_DS_OBJECT_CLASS_REQUIRED                                            syscall.Errno = 8315\n\tERROR_DS_MISSING_REQUIRED_ATT                                             syscall.Errno = 8316\n\tERROR_DS_ATT_NOT_DEF_FOR_CLASS                                            syscall.Errno = 8317\n\tERROR_DS_ATT_ALREADY_EXISTS                                               syscall.Errno = 8318\n\tERROR_DS_CANT_ADD_ATT_VALUES                                              syscall.Errno = 8320\n\tERROR_DS_SINGLE_VALUE_CONSTRAINT                                          syscall.Errno = 8321\n\tERROR_DS_RANGE_CONSTRAINT                                                 syscall.Errno = 8322\n\tERROR_DS_ATT_VAL_ALREADY_EXISTS                                           syscall.Errno = 8323\n\tERROR_DS_CANT_REM_MISSING_ATT                                             syscall.Errno = 8324\n\tERROR_DS_CANT_REM_MISSING_ATT_VAL                                         syscall.Errno = 8325\n\tERROR_DS_ROOT_CANT_BE_SUBREF                                              syscall.Errno = 8326\n\tERROR_DS_NO_CHAINING                                                      syscall.Errno = 8327\n\tERROR_DS_NO_CHAINED_EVAL                                                  syscall.Errno = 8328\n\tERROR_DS_NO_PARENT_OBJECT                                                 syscall.Errno = 8329\n\tERROR_DS_PARENT_IS_AN_ALIAS                                               syscall.Errno = 8330\n\tERROR_DS_CANT_MIX_MASTER_AND_REPS                                         syscall.Errno = 8331\n\tERROR_DS_CHILDREN_EXIST                                                   syscall.Errno = 8332\n\tERROR_DS_OBJ_NOT_FOUND                                                    syscall.Errno = 8333\n\tERROR_DS_ALIASED_OBJ_MISSING                                              syscall.Errno = 8334\n\tERROR_DS_BAD_NAME_SYNTAX                                                  syscall.Errno = 8335\n\tERROR_DS_ALIAS_POINTS_TO_ALIAS                                            syscall.Errno = 8336\n\tERROR_DS_CANT_DEREF_ALIAS                                                 syscall.Errno = 8337\n\tERROR_DS_OUT_OF_SCOPE                                                     syscall.Errno = 8338\n\tERROR_DS_OBJECT_BEING_REMOVED                                             syscall.Errno = 8339\n\tERROR_DS_CANT_DELETE_DSA_OBJ                                              syscall.Errno = 8340\n\tERROR_DS_GENERIC_ERROR                                                    syscall.Errno = 8341\n\tERROR_DS_DSA_MUST_BE_INT_MASTER                                           syscall.Errno = 8342\n\tERROR_DS_CLASS_NOT_DSA                                                    syscall.Errno = 8343\n\tERROR_DS_INSUFF_ACCESS_RIGHTS                                             syscall.Errno = 8344\n\tERROR_DS_ILLEGAL_SUPERIOR                                                 syscall.Errno = 8345\n\tERROR_DS_ATTRIBUTE_OWNED_BY_SAM                                           syscall.Errno = 8346\n\tERROR_DS_NAME_TOO_MANY_PARTS                                              syscall.Errno = 8347\n\tERROR_DS_NAME_TOO_LONG                                                    syscall.Errno = 8348\n\tERROR_DS_NAME_VALUE_TOO_LONG                                              syscall.Errno = 8349\n\tERROR_DS_NAME_UNPARSEABLE                                                 syscall.Errno = 8350\n\tERROR_DS_NAME_TYPE_UNKNOWN                                                syscall.Errno = 8351\n\tERROR_DS_NOT_AN_OBJECT                                                    syscall.Errno = 8352\n\tERROR_DS_SEC_DESC_TOO_SHORT                                               syscall.Errno = 8353\n\tERROR_DS_SEC_DESC_INVALID                                                 syscall.Errno = 8354\n\tERROR_DS_NO_DELETED_NAME                                                  syscall.Errno = 8355\n\tERROR_DS_SUBREF_MUST_HAVE_PARENT                                          syscall.Errno = 8356\n\tERROR_DS_NCNAME_MUST_BE_NC                                                syscall.Errno = 8357\n\tERROR_DS_CANT_ADD_SYSTEM_ONLY                                             syscall.Errno = 8358\n\tERROR_DS_CLASS_MUST_BE_CONCRETE                                           syscall.Errno = 8359\n\tERROR_DS_INVALID_DMD                                                      syscall.Errno = 8360\n\tERROR_DS_OBJ_GUID_EXISTS                                                  syscall.Errno = 8361\n\tERROR_DS_NOT_ON_BACKLINK                                                  syscall.Errno = 8362\n\tERROR_DS_NO_CROSSREF_FOR_NC                                               syscall.Errno = 8363\n\tERROR_DS_SHUTTING_DOWN                                                    syscall.Errno = 8364\n\tERROR_DS_UNKNOWN_OPERATION                                                syscall.Errno = 8365\n\tERROR_DS_INVALID_ROLE_OWNER                                               syscall.Errno = 8366\n\tERROR_DS_COULDNT_CONTACT_FSMO                                             syscall.Errno = 8367\n\tERROR_DS_CROSS_NC_DN_RENAME                                               syscall.Errno = 8368\n\tERROR_DS_CANT_MOD_SYSTEM_ONLY                                             syscall.Errno = 8369\n\tERROR_DS_REPLICATOR_ONLY                                                  syscall.Errno = 8370\n\tERROR_DS_OBJ_CLASS_NOT_DEFINED                                            syscall.Errno = 8371\n\tERROR_DS_OBJ_CLASS_NOT_SUBCLASS                                           syscall.Errno = 8372\n\tERROR_DS_NAME_REFERENCE_INVALID                                           syscall.Errno = 8373\n\tERROR_DS_CROSS_REF_EXISTS                                                 syscall.Errno = 8374\n\tERROR_DS_CANT_DEL_MASTER_CROSSREF                                         syscall.Errno = 8375\n\tERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD                                       syscall.Errno = 8376\n\tERROR_DS_NOTIFY_FILTER_TOO_COMPLEX                                        syscall.Errno = 8377\n\tERROR_DS_DUP_RDN                                                          syscall.Errno = 8378\n\tERROR_DS_DUP_OID                                                          syscall.Errno = 8379\n\tERROR_DS_DUP_MAPI_ID                                                      syscall.Errno = 8380\n\tERROR_DS_DUP_SCHEMA_ID_GUID                                               syscall.Errno = 8381\n\tERROR_DS_DUP_LDAP_DISPLAY_NAME                                            syscall.Errno = 8382\n\tERROR_DS_SEMANTIC_ATT_TEST                                                syscall.Errno = 8383\n\tERROR_DS_SYNTAX_MISMATCH                                                  syscall.Errno = 8384\n\tERROR_DS_EXISTS_IN_MUST_HAVE                                              syscall.Errno = 8385\n\tERROR_DS_EXISTS_IN_MAY_HAVE                                               syscall.Errno = 8386\n\tERROR_DS_NONEXISTENT_MAY_HAVE                                             syscall.Errno = 8387\n\tERROR_DS_NONEXISTENT_MUST_HAVE                                            syscall.Errno = 8388\n\tERROR_DS_AUX_CLS_TEST_FAIL                                                syscall.Errno = 8389\n\tERROR_DS_NONEXISTENT_POSS_SUP                                             syscall.Errno = 8390\n\tERROR_DS_SUB_CLS_TEST_FAIL                                                syscall.Errno = 8391\n\tERROR_DS_BAD_RDN_ATT_ID_SYNTAX                                            syscall.Errno = 8392\n\tERROR_DS_EXISTS_IN_AUX_CLS                                                syscall.Errno = 8393\n\tERROR_DS_EXISTS_IN_SUB_CLS                                                syscall.Errno = 8394\n\tERROR_DS_EXISTS_IN_POSS_SUP                                               syscall.Errno = 8395\n\tERROR_DS_RECALCSCHEMA_FAILED                                              syscall.Errno = 8396\n\tERROR_DS_TREE_DELETE_NOT_FINISHED                                         syscall.Errno = 8397\n\tERROR_DS_CANT_DELETE                                                      syscall.Errno = 8398\n\tERROR_DS_ATT_SCHEMA_REQ_ID                                                syscall.Errno = 8399\n\tERROR_DS_BAD_ATT_SCHEMA_SYNTAX                                            syscall.Errno = 8400\n\tERROR_DS_CANT_CACHE_ATT                                                   syscall.Errno = 8401\n\tERROR_DS_CANT_CACHE_CLASS                                                 syscall.Errno = 8402\n\tERROR_DS_CANT_REMOVE_ATT_CACHE                                            syscall.Errno = 8403\n\tERROR_DS_CANT_REMOVE_CLASS_CACHE                                          syscall.Errno = 8404\n\tERROR_DS_CANT_RETRIEVE_DN                                                 syscall.Errno = 8405\n\tERROR_DS_MISSING_SUPREF                                                   syscall.Errno = 8406\n\tERROR_DS_CANT_RETRIEVE_INSTANCE                                           syscall.Errno = 8407\n\tERROR_DS_CODE_INCONSISTENCY                                               syscall.Errno = 8408\n\tERROR_DS_DATABASE_ERROR                                                   syscall.Errno = 8409\n\tERROR_DS_GOVERNSID_MISSING                                                syscall.Errno = 8410\n\tERROR_DS_MISSING_EXPECTED_ATT                                             syscall.Errno = 8411\n\tERROR_DS_NCNAME_MISSING_CR_REF                                            syscall.Errno = 8412\n\tERROR_DS_SECURITY_CHECKING_ERROR                                          syscall.Errno = 8413\n\tERROR_DS_SCHEMA_NOT_LOADED                                                syscall.Errno = 8414\n\tERROR_DS_SCHEMA_ALLOC_FAILED                                              syscall.Errno = 8415\n\tERROR_DS_ATT_SCHEMA_REQ_SYNTAX                                            syscall.Errno = 8416\n\tERROR_DS_GCVERIFY_ERROR                                                   syscall.Errno = 8417\n\tERROR_DS_DRA_SCHEMA_MISMATCH                                              syscall.Errno = 8418\n\tERROR_DS_CANT_FIND_DSA_OBJ                                                syscall.Errno = 8419\n\tERROR_DS_CANT_FIND_EXPECTED_NC                                            syscall.Errno = 8420\n\tERROR_DS_CANT_FIND_NC_IN_CACHE                                            syscall.Errno = 8421\n\tERROR_DS_CANT_RETRIEVE_CHILD                                              syscall.Errno = 8422\n\tERROR_DS_SECURITY_ILLEGAL_MODIFY                                          syscall.Errno = 8423\n\tERROR_DS_CANT_REPLACE_HIDDEN_REC                                          syscall.Errno = 8424\n\tERROR_DS_BAD_HIERARCHY_FILE                                               syscall.Errno = 8425\n\tERROR_DS_BUILD_HIERARCHY_TABLE_FAILED                                     syscall.Errno = 8426\n\tERROR_DS_CONFIG_PARAM_MISSING                                             syscall.Errno = 8427\n\tERROR_DS_COUNTING_AB_INDICES_FAILED                                       syscall.Errno = 8428\n\tERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED                                    syscall.Errno = 8429\n\tERROR_DS_INTERNAL_FAILURE                                                 syscall.Errno = 8430\n\tERROR_DS_UNKNOWN_ERROR                                                    syscall.Errno = 8431\n\tERROR_DS_ROOT_REQUIRES_CLASS_TOP                                          syscall.Errno = 8432\n\tERROR_DS_REFUSING_FSMO_ROLES                                              syscall.Errno = 8433\n\tERROR_DS_MISSING_FSMO_SETTINGS                                            syscall.Errno = 8434\n\tERROR_DS_UNABLE_TO_SURRENDER_ROLES                                        syscall.Errno = 8435\n\tERROR_DS_DRA_GENERIC                                                      syscall.Errno = 8436\n\tERROR_DS_DRA_INVALID_PARAMETER                                            syscall.Errno = 8437\n\tERROR_DS_DRA_BUSY                                                         syscall.Errno = 8438\n\tERROR_DS_DRA_BAD_DN                                                       syscall.Errno = 8439\n\tERROR_DS_DRA_BAD_NC                                                       syscall.Errno = 8440\n\tERROR_DS_DRA_DN_EXISTS                                                    syscall.Errno = 8441\n\tERROR_DS_DRA_INTERNAL_ERROR                                               syscall.Errno = 8442\n\tERROR_DS_DRA_INCONSISTENT_DIT                                             syscall.Errno = 8443\n\tERROR_DS_DRA_CONNECTION_FAILED                                            syscall.Errno = 8444\n\tERROR_DS_DRA_BAD_INSTANCE_TYPE                                            syscall.Errno = 8445\n\tERROR_DS_DRA_OUT_OF_MEM                                                   syscall.Errno = 8446\n\tERROR_DS_DRA_MAIL_PROBLEM                                                 syscall.Errno = 8447\n\tERROR_DS_DRA_REF_ALREADY_EXISTS                                           syscall.Errno = 8448\n\tERROR_DS_DRA_REF_NOT_FOUND                                                syscall.Errno = 8449\n\tERROR_DS_DRA_OBJ_IS_REP_SOURCE                                            syscall.Errno = 8450\n\tERROR_DS_DRA_DB_ERROR                                                     syscall.Errno = 8451\n\tERROR_DS_DRA_NO_REPLICA                                                   syscall.Errno = 8452\n\tERROR_DS_DRA_ACCESS_DENIED                                                syscall.Errno = 8453\n\tERROR_DS_DRA_NOT_SUPPORTED                                                syscall.Errno = 8454\n\tERROR_DS_DRA_RPC_CANCELLED                                                syscall.Errno = 8455\n\tERROR_DS_DRA_SOURCE_DISABLED                                              syscall.Errno = 8456\n\tERROR_DS_DRA_SINK_DISABLED                                                syscall.Errno = 8457\n\tERROR_DS_DRA_NAME_COLLISION                                               syscall.Errno = 8458\n\tERROR_DS_DRA_SOURCE_REINSTALLED                                           syscall.Errno = 8459\n\tERROR_DS_DRA_MISSING_PARENT                                               syscall.Errno = 8460\n\tERROR_DS_DRA_PREEMPTED                                                    syscall.Errno = 8461\n\tERROR_DS_DRA_ABANDON_SYNC                                                 syscall.Errno = 8462\n\tERROR_DS_DRA_SHUTDOWN                                                     syscall.Errno = 8463\n\tERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET                                     syscall.Errno = 8464\n\tERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA                                    syscall.Errno = 8465\n\tERROR_DS_DRA_EXTN_CONNECTION_FAILED                                       syscall.Errno = 8466\n\tERROR_DS_INSTALL_SCHEMA_MISMATCH                                          syscall.Errno = 8467\n\tERROR_DS_DUP_LINK_ID                                                      syscall.Errno = 8468\n\tERROR_DS_NAME_ERROR_RESOLVING                                             syscall.Errno = 8469\n\tERROR_DS_NAME_ERROR_NOT_FOUND                                             syscall.Errno = 8470\n\tERROR_DS_NAME_ERROR_NOT_UNIQUE                                            syscall.Errno = 8471\n\tERROR_DS_NAME_ERROR_NO_MAPPING                                            syscall.Errno = 8472\n\tERROR_DS_NAME_ERROR_DOMAIN_ONLY                                           syscall.Errno = 8473\n\tERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING                                syscall.Errno = 8474\n\tERROR_DS_CONSTRUCTED_ATT_MOD                                              syscall.Errno = 8475\n\tERROR_DS_WRONG_OM_OBJ_CLASS                                               syscall.Errno = 8476\n\tERROR_DS_DRA_REPL_PENDING                                                 syscall.Errno = 8477\n\tERROR_DS_DS_REQUIRED                                                      syscall.Errno = 8478\n\tERROR_DS_INVALID_LDAP_DISPLAY_NAME                                        syscall.Errno = 8479\n\tERROR_DS_NON_BASE_SEARCH                                                  syscall.Errno = 8480\n\tERROR_DS_CANT_RETRIEVE_ATTS                                               syscall.Errno = 8481\n\tERROR_DS_BACKLINK_WITHOUT_LINK                                            syscall.Errno = 8482\n\tERROR_DS_EPOCH_MISMATCH                                                   syscall.Errno = 8483\n\tERROR_DS_SRC_NAME_MISMATCH                                                syscall.Errno = 8484\n\tERROR_DS_SRC_AND_DST_NC_IDENTICAL                                         syscall.Errno = 8485\n\tERROR_DS_DST_NC_MISMATCH                                                  syscall.Errno = 8486\n\tERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC                                       syscall.Errno = 8487\n\tERROR_DS_SRC_GUID_MISMATCH                                                syscall.Errno = 8488\n\tERROR_DS_CANT_MOVE_DELETED_OBJECT                                         syscall.Errno = 8489\n\tERROR_DS_PDC_OPERATION_IN_PROGRESS                                        syscall.Errno = 8490\n\tERROR_DS_CROSS_DOMAIN_CLEANUP_REQD                                        syscall.Errno = 8491\n\tERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION                                      syscall.Errno = 8492\n\tERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS                                  syscall.Errno = 8493\n\tERROR_DS_NC_MUST_HAVE_NC_PARENT                                           syscall.Errno = 8494\n\tERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE                                        syscall.Errno = 8495\n\tERROR_DS_DST_DOMAIN_NOT_NATIVE                                            syscall.Errno = 8496\n\tERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER                                 syscall.Errno = 8497\n\tERROR_DS_CANT_MOVE_ACCOUNT_GROUP                                          syscall.Errno = 8498\n\tERROR_DS_CANT_MOVE_RESOURCE_GROUP                                         syscall.Errno = 8499\n\tERROR_DS_INVALID_SEARCH_FLAG                                              syscall.Errno = 8500\n\tERROR_DS_NO_TREE_DELETE_ABOVE_NC                                          syscall.Errno = 8501\n\tERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE                                     syscall.Errno = 8502\n\tERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE                         syscall.Errno = 8503\n\tERROR_DS_SAM_INIT_FAILURE                                                 syscall.Errno = 8504\n\tERROR_DS_SENSITIVE_GROUP_VIOLATION                                        syscall.Errno = 8505\n\tERROR_DS_CANT_MOD_PRIMARYGROUPID                                          syscall.Errno = 8506\n\tERROR_DS_ILLEGAL_BASE_SCHEMA_MOD                                          syscall.Errno = 8507\n\tERROR_DS_NONSAFE_SCHEMA_CHANGE                                            syscall.Errno = 8508\n\tERROR_DS_SCHEMA_UPDATE_DISALLOWED                                         syscall.Errno = 8509\n\tERROR_DS_CANT_CREATE_UNDER_SCHEMA                                         syscall.Errno = 8510\n\tERROR_DS_INSTALL_NO_SRC_SCH_VERSION                                       syscall.Errno = 8511\n\tERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE                                syscall.Errno = 8512\n\tERROR_DS_INVALID_GROUP_TYPE                                               syscall.Errno = 8513\n\tERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN                               syscall.Errno = 8514\n\tERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN                                syscall.Errno = 8515\n\tERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER                                    syscall.Errno = 8516\n\tERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER                                syscall.Errno = 8517\n\tERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER                                 syscall.Errno = 8518\n\tERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER                              syscall.Errno = 8519\n\tERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER                         syscall.Errno = 8520\n\tERROR_DS_HAVE_PRIMARY_MEMBERS                                             syscall.Errno = 8521\n\tERROR_DS_STRING_SD_CONVERSION_FAILED                                      syscall.Errno = 8522\n\tERROR_DS_NAMING_MASTER_GC                                                 syscall.Errno = 8523\n\tERROR_DS_DNS_LOOKUP_FAILURE                                               syscall.Errno = 8524\n\tERROR_DS_COULDNT_UPDATE_SPNS                                              syscall.Errno = 8525\n\tERROR_DS_CANT_RETRIEVE_SD                                                 syscall.Errno = 8526\n\tERROR_DS_KEY_NOT_UNIQUE                                                   syscall.Errno = 8527\n\tERROR_DS_WRONG_LINKED_ATT_SYNTAX                                          syscall.Errno = 8528\n\tERROR_DS_SAM_NEED_BOOTKEY_PASSWORD                                        syscall.Errno = 8529\n\tERROR_DS_SAM_NEED_BOOTKEY_FLOPPY                                          syscall.Errno = 8530\n\tERROR_DS_CANT_START                                                       syscall.Errno = 8531\n\tERROR_DS_INIT_FAILURE                                                     syscall.Errno = 8532\n\tERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION                                     syscall.Errno = 8533\n\tERROR_DS_SOURCE_DOMAIN_IN_FOREST                                          syscall.Errno = 8534\n\tERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST                                 syscall.Errno = 8535\n\tERROR_DS_DESTINATION_AUDITING_NOT_ENABLED                                 syscall.Errno = 8536\n\tERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN                                      syscall.Errno = 8537\n\tERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER                                        syscall.Errno = 8538\n\tERROR_DS_SRC_SID_EXISTS_IN_FOREST                                         syscall.Errno = 8539\n\tERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH                                syscall.Errno = 8540\n\tERROR_SAM_INIT_FAILURE                                                    syscall.Errno = 8541\n\tERROR_DS_DRA_SCHEMA_INFO_SHIP                                             syscall.Errno = 8542\n\tERROR_DS_DRA_SCHEMA_CONFLICT                                              syscall.Errno = 8543\n\tERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT                                      syscall.Errno = 8544\n\tERROR_DS_DRA_OBJ_NC_MISMATCH                                              syscall.Errno = 8545\n\tERROR_DS_NC_STILL_HAS_DSAS                                                syscall.Errno = 8546\n\tERROR_DS_GC_REQUIRED                                                      syscall.Errno = 8547\n\tERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY                                       syscall.Errno = 8548\n\tERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS                                       syscall.Errno = 8549\n\tERROR_DS_CANT_ADD_TO_GC                                                   syscall.Errno = 8550\n\tERROR_DS_NO_CHECKPOINT_WITH_PDC                                           syscall.Errno = 8551\n\tERROR_DS_SOURCE_AUDITING_NOT_ENABLED                                      syscall.Errno = 8552\n\tERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC                                      syscall.Errno = 8553\n\tERROR_DS_INVALID_NAME_FOR_SPN                                             syscall.Errno = 8554\n\tERROR_DS_FILTER_USES_CONTRUCTED_ATTRS                                     syscall.Errno = 8555\n\tERROR_DS_UNICODEPWD_NOT_IN_QUOTES                                         syscall.Errno = 8556\n\tERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED                                   syscall.Errno = 8557\n\tERROR_DS_MUST_BE_RUN_ON_DST_DC                                            syscall.Errno = 8558\n\tERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER                                    syscall.Errno = 8559\n\tERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ                                    syscall.Errno = 8560\n\tERROR_DS_INIT_FAILURE_CONSOLE                                             syscall.Errno = 8561\n\tERROR_DS_SAM_INIT_FAILURE_CONSOLE                                         syscall.Errno = 8562\n\tERROR_DS_FOREST_VERSION_TOO_HIGH                                          syscall.Errno = 8563\n\tERROR_DS_DOMAIN_VERSION_TOO_HIGH                                          syscall.Errno = 8564\n\tERROR_DS_FOREST_VERSION_TOO_LOW                                           syscall.Errno = 8565\n\tERROR_DS_DOMAIN_VERSION_TOO_LOW                                           syscall.Errno = 8566\n\tERROR_DS_INCOMPATIBLE_VERSION                                             syscall.Errno = 8567\n\tERROR_DS_LOW_DSA_VERSION                                                  syscall.Errno = 8568\n\tERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN                               syscall.Errno = 8569\n\tERROR_DS_NOT_SUPPORTED_SORT_ORDER                                         syscall.Errno = 8570\n\tERROR_DS_NAME_NOT_UNIQUE                                                  syscall.Errno = 8571\n\tERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4                                   syscall.Errno = 8572\n\tERROR_DS_OUT_OF_VERSION_STORE                                             syscall.Errno = 8573\n\tERROR_DS_INCOMPATIBLE_CONTROLS_USED                                       syscall.Errno = 8574\n\tERROR_DS_NO_REF_DOMAIN                                                    syscall.Errno = 8575\n\tERROR_DS_RESERVED_LINK_ID                                                 syscall.Errno = 8576\n\tERROR_DS_LINK_ID_NOT_AVAILABLE                                            syscall.Errno = 8577\n\tERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER                                    syscall.Errno = 8578\n\tERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE                             syscall.Errno = 8579\n\tERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC                                      syscall.Errno = 8580\n\tERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG                                      syscall.Errno = 8581\n\tERROR_DS_MODIFYDN_WRONG_GRANDPARENT                                       syscall.Errno = 8582\n\tERROR_DS_NAME_ERROR_TRUST_REFERRAL                                        syscall.Errno = 8583\n\tERROR_NOT_SUPPORTED_ON_STANDARD_SERVER                                    syscall.Errno = 8584\n\tERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD                                    syscall.Errno = 8585\n\tERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2                                     syscall.Errno = 8586\n\tERROR_DS_THREAD_LIMIT_EXCEEDED                                            syscall.Errno = 8587\n\tERROR_DS_NOT_CLOSEST                                                      syscall.Errno = 8588\n\tERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF                               syscall.Errno = 8589\n\tERROR_DS_SINGLE_USER_MODE_FAILED                                          syscall.Errno = 8590\n\tERROR_DS_NTDSCRIPT_SYNTAX_ERROR                                           syscall.Errno = 8591\n\tERROR_DS_NTDSCRIPT_PROCESS_ERROR                                          syscall.Errno = 8592\n\tERROR_DS_DIFFERENT_REPL_EPOCHS                                            syscall.Errno = 8593\n\tERROR_DS_DRS_EXTENSIONS_CHANGED                                           syscall.Errno = 8594\n\tERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR                    syscall.Errno = 8595\n\tERROR_DS_NO_MSDS_INTID                                                    syscall.Errno = 8596\n\tERROR_DS_DUP_MSDS_INTID                                                   syscall.Errno = 8597\n\tERROR_DS_EXISTS_IN_RDNATTID                                               syscall.Errno = 8598\n\tERROR_DS_AUTHORIZATION_FAILED                                             syscall.Errno = 8599\n\tERROR_DS_INVALID_SCRIPT                                                   syscall.Errno = 8600\n\tERROR_DS_REMOTE_CROSSREF_OP_FAILED                                        syscall.Errno = 8601\n\tERROR_DS_CROSS_REF_BUSY                                                   syscall.Errno = 8602\n\tERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN                               syscall.Errno = 8603\n\tERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC                                    syscall.Errno = 8604\n\tERROR_DS_DUPLICATE_ID_FOUND                                               syscall.Errno = 8605\n\tERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT                               syscall.Errno = 8606\n\tERROR_DS_GROUP_CONVERSION_ERROR                                           syscall.Errno = 8607\n\tERROR_DS_CANT_MOVE_APP_BASIC_GROUP                                        syscall.Errno = 8608\n\tERROR_DS_CANT_MOVE_APP_QUERY_GROUP                                        syscall.Errno = 8609\n\tERROR_DS_ROLE_NOT_VERIFIED                                                syscall.Errno = 8610\n\tERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL                                  syscall.Errno = 8611\n\tERROR_DS_DOMAIN_RENAME_IN_PROGRESS                                        syscall.Errno = 8612\n\tERROR_DS_EXISTING_AD_CHILD_NC                                             syscall.Errno = 8613\n\tERROR_DS_REPL_LIFETIME_EXCEEDED                                           syscall.Errno = 8614\n\tERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER                                   syscall.Errno = 8615\n\tERROR_DS_LDAP_SEND_QUEUE_FULL                                             syscall.Errno = 8616\n\tERROR_DS_DRA_OUT_SCHEDULE_WINDOW                                          syscall.Errno = 8617\n\tERROR_DS_POLICY_NOT_KNOWN                                                 syscall.Errno = 8618\n\tERROR_NO_SITE_SETTINGS_OBJECT                                             syscall.Errno = 8619\n\tERROR_NO_SECRETS                                                          syscall.Errno = 8620\n\tERROR_NO_WRITABLE_DC_FOUND                                                syscall.Errno = 8621\n\tERROR_DS_NO_SERVER_OBJECT                                                 syscall.Errno = 8622\n\tERROR_DS_NO_NTDSA_OBJECT                                                  syscall.Errno = 8623\n\tERROR_DS_NON_ASQ_SEARCH                                                   syscall.Errno = 8624\n\tERROR_DS_AUDIT_FAILURE                                                    syscall.Errno = 8625\n\tERROR_DS_INVALID_SEARCH_FLAG_SUBTREE                                      syscall.Errno = 8626\n\tERROR_DS_INVALID_SEARCH_FLAG_TUPLE                                        syscall.Errno = 8627\n\tERROR_DS_HIERARCHY_TABLE_TOO_DEEP                                         syscall.Errno = 8628\n\tERROR_DS_DRA_CORRUPT_UTD_VECTOR                                           syscall.Errno = 8629\n\tERROR_DS_DRA_SECRETS_DENIED                                               syscall.Errno = 8630\n\tERROR_DS_RESERVED_MAPI_ID                                                 syscall.Errno = 8631\n\tERROR_DS_MAPI_ID_NOT_AVAILABLE                                            syscall.Errno = 8632\n\tERROR_DS_DRA_MISSING_KRBTGT_SECRET                                        syscall.Errno = 8633\n\tERROR_DS_DOMAIN_NAME_EXISTS_IN_FOREST                                     syscall.Errno = 8634\n\tERROR_DS_FLAT_NAME_EXISTS_IN_FOREST                                       syscall.Errno = 8635\n\tERROR_INVALID_USER_PRINCIPAL_NAME                                         syscall.Errno = 8636\n\tERROR_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS                               syscall.Errno = 8637\n\tERROR_DS_OID_NOT_FOUND                                                    syscall.Errno = 8638\n\tERROR_DS_DRA_RECYCLED_TARGET                                              syscall.Errno = 8639\n\tERROR_DS_DISALLOWED_NC_REDIRECT                                           syscall.Errno = 8640\n\tERROR_DS_HIGH_ADLDS_FFL                                                   syscall.Errno = 8641\n\tERROR_DS_HIGH_DSA_VERSION                                                 syscall.Errno = 8642\n\tERROR_DS_LOW_ADLDS_FFL                                                    syscall.Errno = 8643\n\tERROR_DOMAIN_SID_SAME_AS_LOCAL_WORKSTATION                                syscall.Errno = 8644\n\tERROR_DS_UNDELETE_SAM_VALIDATION_FAILED                                   syscall.Errno = 8645\n\tERROR_INCORRECT_ACCOUNT_TYPE                                              syscall.Errno = 8646\n\tERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST                                   syscall.Errno = 8647\n\tERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST                                   syscall.Errno = 8648\n\tERROR_DS_MISSING_FOREST_TRUST                                             syscall.Errno = 8649\n\tERROR_DS_VALUE_KEY_NOT_UNIQUE                                             syscall.Errno = 8650\n\tDNS_ERROR_RESPONSE_CODES_BASE                                             syscall.Errno = 9000\n\tDNS_ERROR_RCODE_NO_ERROR                                                                = ERROR_SUCCESS\n\tDNS_ERROR_MASK                                                            syscall.Errno = 0x00002328\n\tDNS_ERROR_RCODE_FORMAT_ERROR                                              syscall.Errno = 9001\n\tDNS_ERROR_RCODE_SERVER_FAILURE                                            syscall.Errno = 9002\n\tDNS_ERROR_RCODE_NAME_ERROR                                                syscall.Errno = 9003\n\tDNS_ERROR_RCODE_NOT_IMPLEMENTED                                           syscall.Errno = 9004\n\tDNS_ERROR_RCODE_REFUSED                                                   syscall.Errno = 9005\n\tDNS_ERROR_RCODE_YXDOMAIN                                                  syscall.Errno = 9006\n\tDNS_ERROR_RCODE_YXRRSET                                                   syscall.Errno = 9007\n\tDNS_ERROR_RCODE_NXRRSET                                                   syscall.Errno = 9008\n\tDNS_ERROR_RCODE_NOTAUTH                                                   syscall.Errno = 9009\n\tDNS_ERROR_RCODE_NOTZONE                                                   syscall.Errno = 9010\n\tDNS_ERROR_RCODE_BADSIG                                                    syscall.Errno = 9016\n\tDNS_ERROR_RCODE_BADKEY                                                    syscall.Errno = 9017\n\tDNS_ERROR_RCODE_BADTIME                                                   syscall.Errno = 9018\n\tDNS_ERROR_RCODE_LAST                                                                    = DNS_ERROR_RCODE_BADTIME\n\tDNS_ERROR_DNSSEC_BASE                                                     syscall.Errno = 9100\n\tDNS_ERROR_KEYMASTER_REQUIRED                                              syscall.Errno = 9101\n\tDNS_ERROR_NOT_ALLOWED_ON_SIGNED_ZONE                                      syscall.Errno = 9102\n\tDNS_ERROR_NSEC3_INCOMPATIBLE_WITH_RSA_SHA1                                syscall.Errno = 9103\n\tDNS_ERROR_NOT_ENOUGH_SIGNING_KEY_DESCRIPTORS                              syscall.Errno = 9104\n\tDNS_ERROR_UNSUPPORTED_ALGORITHM                                           syscall.Errno = 9105\n\tDNS_ERROR_INVALID_KEY_SIZE                                                syscall.Errno = 9106\n\tDNS_ERROR_SIGNING_KEY_NOT_ACCESSIBLE                                      syscall.Errno = 9107\n\tDNS_ERROR_KSP_DOES_NOT_SUPPORT_PROTECTION                                 syscall.Errno = 9108\n\tDNS_ERROR_UNEXPECTED_DATA_PROTECTION_ERROR                                syscall.Errno = 9109\n\tDNS_ERROR_UNEXPECTED_CNG_ERROR                                            syscall.Errno = 9110\n\tDNS_ERROR_UNKNOWN_SIGNING_PARAMETER_VERSION                               syscall.Errno = 9111\n\tDNS_ERROR_KSP_NOT_ACCESSIBLE                                              syscall.Errno = 9112\n\tDNS_ERROR_TOO_MANY_SKDS                                                   syscall.Errno = 9113\n\tDNS_ERROR_INVALID_ROLLOVER_PERIOD                                         syscall.Errno = 9114\n\tDNS_ERROR_INVALID_INITIAL_ROLLOVER_OFFSET                                 syscall.Errno = 9115\n\tDNS_ERROR_ROLLOVER_IN_PROGRESS                                            syscall.Errno = 9116\n\tDNS_ERROR_STANDBY_KEY_NOT_PRESENT                                         syscall.Errno = 9117\n\tDNS_ERROR_NOT_ALLOWED_ON_ZSK                                              syscall.Errno = 9118\n\tDNS_ERROR_NOT_ALLOWED_ON_ACTIVE_SKD                                       syscall.Errno = 9119\n\tDNS_ERROR_ROLLOVER_ALREADY_QUEUED                                         syscall.Errno = 9120\n\tDNS_ERROR_NOT_ALLOWED_ON_UNSIGNED_ZONE                                    syscall.Errno = 9121\n\tDNS_ERROR_BAD_KEYMASTER                                                   syscall.Errno = 9122\n\tDNS_ERROR_INVALID_SIGNATURE_VALIDITY_PERIOD                               syscall.Errno = 9123\n\tDNS_ERROR_INVALID_NSEC3_ITERATION_COUNT                                   syscall.Errno = 9124\n\tDNS_ERROR_DNSSEC_IS_DISABLED                                              syscall.Errno = 9125\n\tDNS_ERROR_INVALID_XML                                                     syscall.Errno = 9126\n\tDNS_ERROR_NO_VALID_TRUST_ANCHORS                                          syscall.Errno = 9127\n\tDNS_ERROR_ROLLOVER_NOT_POKEABLE                                           syscall.Errno = 9128\n\tDNS_ERROR_NSEC3_NAME_COLLISION                                            syscall.Errno = 9129\n\tDNS_ERROR_NSEC_INCOMPATIBLE_WITH_NSEC3_RSA_SHA1                           syscall.Errno = 9130\n\tDNS_ERROR_PACKET_FMT_BASE                                                 syscall.Errno = 9500\n\tDNS_INFO_NO_RECORDS                                                       syscall.Errno = 9501\n\tDNS_ERROR_BAD_PACKET                                                      syscall.Errno = 9502\n\tDNS_ERROR_NO_PACKET                                                       syscall.Errno = 9503\n\tDNS_ERROR_RCODE                                                           syscall.Errno = 9504\n\tDNS_ERROR_UNSECURE_PACKET                                                 syscall.Errno = 9505\n\tDNS_STATUS_PACKET_UNSECURE                                                              = DNS_ERROR_UNSECURE_PACKET\n\tDNS_REQUEST_PENDING                                                       syscall.Errno = 9506\n\tDNS_ERROR_NO_MEMORY                                                                     = ERROR_OUTOFMEMORY\n\tDNS_ERROR_INVALID_NAME                                                                  = ERROR_INVALID_NAME\n\tDNS_ERROR_INVALID_DATA                                                                  = ERROR_INVALID_DATA\n\tDNS_ERROR_GENERAL_API_BASE                                                syscall.Errno = 9550\n\tDNS_ERROR_INVALID_TYPE                                                    syscall.Errno = 9551\n\tDNS_ERROR_INVALID_IP_ADDRESS                                              syscall.Errno = 9552\n\tDNS_ERROR_INVALID_PROPERTY                                                syscall.Errno = 9553\n\tDNS_ERROR_TRY_AGAIN_LATER                                                 syscall.Errno = 9554\n\tDNS_ERROR_NOT_UNIQUE                                                      syscall.Errno = 9555\n\tDNS_ERROR_NON_RFC_NAME                                                    syscall.Errno = 9556\n\tDNS_STATUS_FQDN                                                           syscall.Errno = 9557\n\tDNS_STATUS_DOTTED_NAME                                                    syscall.Errno = 9558\n\tDNS_STATUS_SINGLE_PART_NAME                                               syscall.Errno = 9559\n\tDNS_ERROR_INVALID_NAME_CHAR                                               syscall.Errno = 9560\n\tDNS_ERROR_NUMERIC_NAME                                                    syscall.Errno = 9561\n\tDNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER                                      syscall.Errno = 9562\n\tDNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION                                    syscall.Errno = 9563\n\tDNS_ERROR_CANNOT_FIND_ROOT_HINTS                                          syscall.Errno = 9564\n\tDNS_ERROR_INCONSISTENT_ROOT_HINTS                                         syscall.Errno = 9565\n\tDNS_ERROR_DWORD_VALUE_TOO_SMALL                                           syscall.Errno = 9566\n\tDNS_ERROR_DWORD_VALUE_TOO_LARGE                                           syscall.Errno = 9567\n\tDNS_ERROR_BACKGROUND_LOADING                                              syscall.Errno = 9568\n\tDNS_ERROR_NOT_ALLOWED_ON_RODC                                             syscall.Errno = 9569\n\tDNS_ERROR_NOT_ALLOWED_UNDER_DNAME                                         syscall.Errno = 9570\n\tDNS_ERROR_DELEGATION_REQUIRED                                             syscall.Errno = 9571\n\tDNS_ERROR_INVALID_POLICY_TABLE                                            syscall.Errno = 9572\n\tDNS_ERROR_ADDRESS_REQUIRED                                                syscall.Errno = 9573\n\tDNS_ERROR_ZONE_BASE                                                       syscall.Errno = 9600\n\tDNS_ERROR_ZONE_DOES_NOT_EXIST                                             syscall.Errno = 9601\n\tDNS_ERROR_NO_ZONE_INFO                                                    syscall.Errno = 9602\n\tDNS_ERROR_INVALID_ZONE_OPERATION                                          syscall.Errno = 9603\n\tDNS_ERROR_ZONE_CONFIGURATION_ERROR                                        syscall.Errno = 9604\n\tDNS_ERROR_ZONE_HAS_NO_SOA_RECORD                                          syscall.Errno = 9605\n\tDNS_ERROR_ZONE_HAS_NO_NS_RECORDS                                          syscall.Errno = 9606\n\tDNS_ERROR_ZONE_LOCKED                                                     syscall.Errno = 9607\n\tDNS_ERROR_ZONE_CREATION_FAILED                                            syscall.Errno = 9608\n\tDNS_ERROR_ZONE_ALREADY_EXISTS                                             syscall.Errno = 9609\n\tDNS_ERROR_AUTOZONE_ALREADY_EXISTS                                         syscall.Errno = 9610\n\tDNS_ERROR_INVALID_ZONE_TYPE                                               syscall.Errno = 9611\n\tDNS_ERROR_SECONDARY_REQUIRES_MASTER_IP                                    syscall.Errno = 9612\n\tDNS_ERROR_ZONE_NOT_SECONDARY                                              syscall.Errno = 9613\n\tDNS_ERROR_NEED_SECONDARY_ADDRESSES                                        syscall.Errno = 9614\n\tDNS_ERROR_WINS_INIT_FAILED                                                syscall.Errno = 9615\n\tDNS_ERROR_NEED_WINS_SERVERS                                               syscall.Errno = 9616\n\tDNS_ERROR_NBSTAT_INIT_FAILED                                              syscall.Errno = 9617\n\tDNS_ERROR_SOA_DELETE_INVALID                                              syscall.Errno = 9618\n\tDNS_ERROR_FORWARDER_ALREADY_EXISTS                                        syscall.Errno = 9619\n\tDNS_ERROR_ZONE_REQUIRES_MASTER_IP                                         syscall.Errno = 9620\n\tDNS_ERROR_ZONE_IS_SHUTDOWN                                                syscall.Errno = 9621\n\tDNS_ERROR_ZONE_LOCKED_FOR_SIGNING                                         syscall.Errno = 9622\n\tDNS_ERROR_DATAFILE_BASE                                                   syscall.Errno = 9650\n\tDNS_ERROR_PRIMARY_REQUIRES_DATAFILE                                       syscall.Errno = 9651\n\tDNS_ERROR_INVALID_DATAFILE_NAME                                           syscall.Errno = 9652\n\tDNS_ERROR_DATAFILE_OPEN_FAILURE                                           syscall.Errno = 9653\n\tDNS_ERROR_FILE_WRITEBACK_FAILED                                           syscall.Errno = 9654\n\tDNS_ERROR_DATAFILE_PARSING                                                syscall.Errno = 9655\n\tDNS_ERROR_DATABASE_BASE                                                   syscall.Errno = 9700\n\tDNS_ERROR_RECORD_DOES_NOT_EXIST                                           syscall.Errno = 9701\n\tDNS_ERROR_RECORD_FORMAT                                                   syscall.Errno = 9702\n\tDNS_ERROR_NODE_CREATION_FAILED                                            syscall.Errno = 9703\n\tDNS_ERROR_UNKNOWN_RECORD_TYPE                                             syscall.Errno = 9704\n\tDNS_ERROR_RECORD_TIMED_OUT                                                syscall.Errno = 9705\n\tDNS_ERROR_NAME_NOT_IN_ZONE                                                syscall.Errno = 9706\n\tDNS_ERROR_CNAME_LOOP                                                      syscall.Errno = 9707\n\tDNS_ERROR_NODE_IS_CNAME                                                   syscall.Errno = 9708\n\tDNS_ERROR_CNAME_COLLISION                                                 syscall.Errno = 9709\n\tDNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT                                        syscall.Errno = 9710\n\tDNS_ERROR_RECORD_ALREADY_EXISTS                                           syscall.Errno = 9711\n\tDNS_ERROR_SECONDARY_DATA                                                  syscall.Errno = 9712\n\tDNS_ERROR_NO_CREATE_CACHE_DATA                                            syscall.Errno = 9713\n\tDNS_ERROR_NAME_DOES_NOT_EXIST                                             syscall.Errno = 9714\n\tDNS_WARNING_PTR_CREATE_FAILED                                             syscall.Errno = 9715\n\tDNS_WARNING_DOMAIN_UNDELETED                                              syscall.Errno = 9716\n\tDNS_ERROR_DS_UNAVAILABLE                                                  syscall.Errno = 9717\n\tDNS_ERROR_DS_ZONE_ALREADY_EXISTS                                          syscall.Errno = 9718\n\tDNS_ERROR_NO_BOOTFILE_IF_DS_ZONE                                          syscall.Errno = 9719\n\tDNS_ERROR_NODE_IS_DNAME                                                   syscall.Errno = 9720\n\tDNS_ERROR_DNAME_COLLISION                                                 syscall.Errno = 9721\n\tDNS_ERROR_ALIAS_LOOP                                                      syscall.Errno = 9722\n\tDNS_ERROR_OPERATION_BASE                                                  syscall.Errno = 9750\n\tDNS_INFO_AXFR_COMPLETE                                                    syscall.Errno = 9751\n\tDNS_ERROR_AXFR                                                            syscall.Errno = 9752\n\tDNS_INFO_ADDED_LOCAL_WINS                                                 syscall.Errno = 9753\n\tDNS_ERROR_SECURE_BASE                                                     syscall.Errno = 9800\n\tDNS_STATUS_CONTINUE_NEEDED                                                syscall.Errno = 9801\n\tDNS_ERROR_SETUP_BASE                                                      syscall.Errno = 9850\n\tDNS_ERROR_NO_TCPIP                                                        syscall.Errno = 9851\n\tDNS_ERROR_NO_DNS_SERVERS                                                  syscall.Errno = 9852\n\tDNS_ERROR_DP_BASE                                                         syscall.Errno = 9900\n\tDNS_ERROR_DP_DOES_NOT_EXIST                                               syscall.Errno = 9901\n\tDNS_ERROR_DP_ALREADY_EXISTS                                               syscall.Errno = 9902\n\tDNS_ERROR_DP_NOT_ENLISTED                                                 syscall.Errno = 9903\n\tDNS_ERROR_DP_ALREADY_ENLISTED                                             syscall.Errno = 9904\n\tDNS_ERROR_DP_NOT_AVAILABLE                                                syscall.Errno = 9905\n\tDNS_ERROR_DP_FSMO_ERROR                                                   syscall.Errno = 9906\n\tDNS_ERROR_RRL_NOT_ENABLED                                                 syscall.Errno = 9911\n\tDNS_ERROR_RRL_INVALID_WINDOW_SIZE                                         syscall.Errno = 9912\n\tDNS_ERROR_RRL_INVALID_IPV4_PREFIX                                         syscall.Errno = 9913\n\tDNS_ERROR_RRL_INVALID_IPV6_PREFIX                                         syscall.Errno = 9914\n\tDNS_ERROR_RRL_INVALID_TC_RATE                                             syscall.Errno = 9915\n\tDNS_ERROR_RRL_INVALID_LEAK_RATE                                           syscall.Errno = 9916\n\tDNS_ERROR_RRL_LEAK_RATE_LESSTHAN_TC_RATE                                  syscall.Errno = 9917\n\tDNS_ERROR_VIRTUALIZATION_INSTANCE_ALREADY_EXISTS                          syscall.Errno = 9921\n\tDNS_ERROR_VIRTUALIZATION_INSTANCE_DOES_NOT_EXIST                          syscall.Errno = 9922\n\tDNS_ERROR_VIRTUALIZATION_TREE_LOCKED                                      syscall.Errno = 9923\n\tDNS_ERROR_INVAILD_VIRTUALIZATION_INSTANCE_NAME                            syscall.Errno = 9924\n\tDNS_ERROR_DEFAULT_VIRTUALIZATION_INSTANCE                                 syscall.Errno = 9925\n\tDNS_ERROR_ZONESCOPE_ALREADY_EXISTS                                        syscall.Errno = 9951\n\tDNS_ERROR_ZONESCOPE_DOES_NOT_EXIST                                        syscall.Errno = 9952\n\tDNS_ERROR_DEFAULT_ZONESCOPE                                               syscall.Errno = 9953\n\tDNS_ERROR_INVALID_ZONESCOPE_NAME                                          syscall.Errno = 9954\n\tDNS_ERROR_NOT_ALLOWED_WITH_ZONESCOPES                                     syscall.Errno = 9955\n\tDNS_ERROR_LOAD_ZONESCOPE_FAILED                                           syscall.Errno = 9956\n\tDNS_ERROR_ZONESCOPE_FILE_WRITEBACK_FAILED                                 syscall.Errno = 9957\n\tDNS_ERROR_INVALID_SCOPE_NAME                                              syscall.Errno = 9958\n\tDNS_ERROR_SCOPE_DOES_NOT_EXIST                                            syscall.Errno = 9959\n\tDNS_ERROR_DEFAULT_SCOPE                                                   syscall.Errno = 9960\n\tDNS_ERROR_INVALID_SCOPE_OPERATION                                         syscall.Errno = 9961\n\tDNS_ERROR_SCOPE_LOCKED                                                    syscall.Errno = 9962\n\tDNS_ERROR_SCOPE_ALREADY_EXISTS                                            syscall.Errno = 9963\n\tDNS_ERROR_POLICY_ALREADY_EXISTS                                           syscall.Errno = 9971\n\tDNS_ERROR_POLICY_DOES_NOT_EXIST                                           syscall.Errno = 9972\n\tDNS_ERROR_POLICY_INVALID_CRITERIA                                         syscall.Errno = 9973\n\tDNS_ERROR_POLICY_INVALID_SETTINGS                                         syscall.Errno = 9974\n\tDNS_ERROR_CLIENT_SUBNET_IS_ACCESSED                                       syscall.Errno = 9975\n\tDNS_ERROR_CLIENT_SUBNET_DOES_NOT_EXIST                                    syscall.Errno = 9976\n\tDNS_ERROR_CLIENT_SUBNET_ALREADY_EXISTS                                    syscall.Errno = 9977\n\tDNS_ERROR_SUBNET_DOES_NOT_EXIST                                           syscall.Errno = 9978\n\tDNS_ERROR_SUBNET_ALREADY_EXISTS                                           syscall.Errno = 9979\n\tDNS_ERROR_POLICY_LOCKED                                                   syscall.Errno = 9980\n\tDNS_ERROR_POLICY_INVALID_WEIGHT                                           syscall.Errno = 9981\n\tDNS_ERROR_POLICY_INVALID_NAME                                             syscall.Errno = 9982\n\tDNS_ERROR_POLICY_MISSING_CRITERIA                                         syscall.Errno = 9983\n\tDNS_ERROR_INVALID_CLIENT_SUBNET_NAME                                      syscall.Errno = 9984\n\tDNS_ERROR_POLICY_PROCESSING_ORDER_INVALID                                 syscall.Errno = 9985\n\tDNS_ERROR_POLICY_SCOPE_MISSING                                            syscall.Errno = 9986\n\tDNS_ERROR_POLICY_SCOPE_NOT_ALLOWED                                        syscall.Errno = 9987\n\tDNS_ERROR_SERVERSCOPE_IS_REFERENCED                                       syscall.Errno = 9988\n\tDNS_ERROR_ZONESCOPE_IS_REFERENCED                                         syscall.Errno = 9989\n\tDNS_ERROR_POLICY_INVALID_CRITERIA_CLIENT_SUBNET                           syscall.Errno = 9990\n\tDNS_ERROR_POLICY_INVALID_CRITERIA_TRANSPORT_PROTOCOL                      syscall.Errno = 9991\n\tDNS_ERROR_POLICY_INVALID_CRITERIA_NETWORK_PROTOCOL                        syscall.Errno = 9992\n\tDNS_ERROR_POLICY_INVALID_CRITERIA_INTERFACE                               syscall.Errno = 9993\n\tDNS_ERROR_POLICY_INVALID_CRITERIA_FQDN                                    syscall.Errno = 9994\n\tDNS_ERROR_POLICY_INVALID_CRITERIA_QUERY_TYPE                              syscall.Errno = 9995\n\tDNS_ERROR_POLICY_INVALID_CRITERIA_TIME_OF_DAY                             syscall.Errno = 9996\n\tWSABASEERR                                                                syscall.Errno = 10000\n\tWSAEINTR                                                                  syscall.Errno = 10004\n\tWSAEBADF                                                                  syscall.Errno = 10009\n\tWSAEACCES                                                                 syscall.Errno = 10013\n\tWSAEFAULT                                                                 syscall.Errno = 10014\n\tWSAEINVAL                                                                 syscall.Errno = 10022\n\tWSAEMFILE                                                                 syscall.Errno = 10024\n\tWSAEWOULDBLOCK                                                            syscall.Errno = 10035\n\tWSAEINPROGRESS                                                            syscall.Errno = 10036\n\tWSAEALREADY                                                               syscall.Errno = 10037\n\tWSAENOTSOCK                                                               syscall.Errno = 10038\n\tWSAEDESTADDRREQ                                                           syscall.Errno = 10039\n\tWSAEMSGSIZE                                                               syscall.Errno = 10040\n\tWSAEPROTOTYPE                                                             syscall.Errno = 10041\n\tWSAENOPROTOOPT                                                            syscall.Errno = 10042\n\tWSAEPROTONOSUPPORT                                                        syscall.Errno = 10043\n\tWSAESOCKTNOSUPPORT                                                        syscall.Errno = 10044\n\tWSAEOPNOTSUPP                                                             syscall.Errno = 10045\n\tWSAEPFNOSUPPORT                                                           syscall.Errno = 10046\n\tWSAEAFNOSUPPORT                                                           syscall.Errno = 10047\n\tWSAEADDRINUSE                                                             syscall.Errno = 10048\n\tWSAEADDRNOTAVAIL                                                          syscall.Errno = 10049\n\tWSAENETDOWN                                                               syscall.Errno = 10050\n\tWSAENETUNREACH                                                            syscall.Errno = 10051\n\tWSAENETRESET                                                              syscall.Errno = 10052\n\tWSAECONNABORTED                                                           syscall.Errno = 10053\n\tWSAECONNRESET                                                             syscall.Errno = 10054\n\tWSAENOBUFS                                                                syscall.Errno = 10055\n\tWSAEISCONN                                                                syscall.Errno = 10056\n\tWSAENOTCONN                                                               syscall.Errno = 10057\n\tWSAESHUTDOWN                                                              syscall.Errno = 10058\n\tWSAETOOMANYREFS                                                           syscall.Errno = 10059\n\tWSAETIMEDOUT                                                              syscall.Errno = 10060\n\tWSAECONNREFUSED                                                           syscall.Errno = 10061\n\tWSAELOOP                                                                  syscall.Errno = 10062\n\tWSAENAMETOOLONG                                                           syscall.Errno = 10063\n\tWSAEHOSTDOWN                                                              syscall.Errno = 10064\n\tWSAEHOSTUNREACH                                                           syscall.Errno = 10065\n\tWSAENOTEMPTY                                                              syscall.Errno = 10066\n\tWSAEPROCLIM                                                               syscall.Errno = 10067\n\tWSAEUSERS                                                                 syscall.Errno = 10068\n\tWSAEDQUOT                                                                 syscall.Errno = 10069\n\tWSAESTALE                                                                 syscall.Errno = 10070\n\tWSAEREMOTE                                                                syscall.Errno = 10071\n\tWSASYSNOTREADY                                                            syscall.Errno = 10091\n\tWSAVERNOTSUPPORTED                                                        syscall.Errno = 10092\n\tWSANOTINITIALISED                                                         syscall.Errno = 10093\n\tWSAEDISCON                                                                syscall.Errno = 10101\n\tWSAENOMORE                                                                syscall.Errno = 10102\n\tWSAECANCELLED                                                             syscall.Errno = 10103\n\tWSAEINVALIDPROCTABLE                                                      syscall.Errno = 10104\n\tWSAEINVALIDPROVIDER                                                       syscall.Errno = 10105\n\tWSAEPROVIDERFAILEDINIT                                                    syscall.Errno = 10106\n\tWSASYSCALLFAILURE                                                         syscall.Errno = 10107\n\tWSASERVICE_NOT_FOUND                                                      syscall.Errno = 10108\n\tWSATYPE_NOT_FOUND                                                         syscall.Errno = 10109\n\tWSA_E_NO_MORE                                                             syscall.Errno = 10110\n\tWSA_E_CANCELLED                                                           syscall.Errno = 10111\n\tWSAEREFUSED                                                               syscall.Errno = 10112\n\tWSAHOST_NOT_FOUND                                                         syscall.Errno = 11001\n\tWSATRY_AGAIN                                                              syscall.Errno = 11002\n\tWSANO_RECOVERY                                                            syscall.Errno = 11003\n\tWSANO_DATA                                                                syscall.Errno = 11004\n\tWSA_QOS_RECEIVERS                                                         syscall.Errno = 11005\n\tWSA_QOS_SENDERS                                                           syscall.Errno = 11006\n\tWSA_QOS_NO_SENDERS                                                        syscall.Errno = 11007\n\tWSA_QOS_NO_RECEIVERS                                                      syscall.Errno = 11008\n\tWSA_QOS_REQUEST_CONFIRMED                                                 syscall.Errno = 11009\n\tWSA_QOS_ADMISSION_FAILURE                                                 syscall.Errno = 11010\n\tWSA_QOS_POLICY_FAILURE                                                    syscall.Errno = 11011\n\tWSA_QOS_BAD_STYLE                                                         syscall.Errno = 11012\n\tWSA_QOS_BAD_OBJECT                                                        syscall.Errno = 11013\n\tWSA_QOS_TRAFFIC_CTRL_ERROR                                                syscall.Errno = 11014\n\tWSA_QOS_GENERIC_ERROR                                                     syscall.Errno = 11015\n\tWSA_QOS_ESERVICETYPE                                                      syscall.Errno = 11016\n\tWSA_QOS_EFLOWSPEC                                                         syscall.Errno = 11017\n\tWSA_QOS_EPROVSPECBUF                                                      syscall.Errno = 11018\n\tWSA_QOS_EFILTERSTYLE                                                      syscall.Errno = 11019\n\tWSA_QOS_EFILTERTYPE                                                       syscall.Errno = 11020\n\tWSA_QOS_EFILTERCOUNT                                                      syscall.Errno = 11021\n\tWSA_QOS_EOBJLENGTH                                                        syscall.Errno = 11022\n\tWSA_QOS_EFLOWCOUNT                                                        syscall.Errno = 11023\n\tWSA_QOS_EUNKOWNPSOBJ                                                      syscall.Errno = 11024\n\tWSA_QOS_EPOLICYOBJ                                                        syscall.Errno = 11025\n\tWSA_QOS_EFLOWDESC                                                         syscall.Errno = 11026\n\tWSA_QOS_EPSFLOWSPEC                                                       syscall.Errno = 11027\n\tWSA_QOS_EPSFILTERSPEC                                                     syscall.Errno = 11028\n\tWSA_QOS_ESDMODEOBJ                                                        syscall.Errno = 11029\n\tWSA_QOS_ESHAPERATEOBJ                                                     syscall.Errno = 11030\n\tWSA_QOS_RESERVED_PETYPE                                                   syscall.Errno = 11031\n\tWSA_SECURE_HOST_NOT_FOUND                                                 syscall.Errno = 11032\n\tWSA_IPSEC_NAME_POLICY_ERROR                                               syscall.Errno = 11033\n\tERROR_IPSEC_QM_POLICY_EXISTS                                              syscall.Errno = 13000\n\tERROR_IPSEC_QM_POLICY_NOT_FOUND                                           syscall.Errno = 13001\n\tERROR_IPSEC_QM_POLICY_IN_USE                                              syscall.Errno = 13002\n\tERROR_IPSEC_MM_POLICY_EXISTS                                              syscall.Errno = 13003\n\tERROR_IPSEC_MM_POLICY_NOT_FOUND                                           syscall.Errno = 13004\n\tERROR_IPSEC_MM_POLICY_IN_USE                                              syscall.Errno = 13005\n\tERROR_IPSEC_MM_FILTER_EXISTS                                              syscall.Errno = 13006\n\tERROR_IPSEC_MM_FILTER_NOT_FOUND                                           syscall.Errno = 13007\n\tERROR_IPSEC_TRANSPORT_FILTER_EXISTS                                       syscall.Errno = 13008\n\tERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND                                    syscall.Errno = 13009\n\tERROR_IPSEC_MM_AUTH_EXISTS                                                syscall.Errno = 13010\n\tERROR_IPSEC_MM_AUTH_NOT_FOUND                                             syscall.Errno = 13011\n\tERROR_IPSEC_MM_AUTH_IN_USE                                                syscall.Errno = 13012\n\tERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND                                   syscall.Errno = 13013\n\tERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND                                     syscall.Errno = 13014\n\tERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND                                   syscall.Errno = 13015\n\tERROR_IPSEC_TUNNEL_FILTER_EXISTS                                          syscall.Errno = 13016\n\tERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND                                       syscall.Errno = 13017\n\tERROR_IPSEC_MM_FILTER_PENDING_DELETION                                    syscall.Errno = 13018\n\tERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION                             syscall.Errno = 13019\n\tERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION                                syscall.Errno = 13020\n\tERROR_IPSEC_MM_POLICY_PENDING_DELETION                                    syscall.Errno = 13021\n\tERROR_IPSEC_MM_AUTH_PENDING_DELETION                                      syscall.Errno = 13022\n\tERROR_IPSEC_QM_POLICY_PENDING_DELETION                                    syscall.Errno = 13023\n\tWARNING_IPSEC_MM_POLICY_PRUNED                                            syscall.Errno = 13024\n\tWARNING_IPSEC_QM_POLICY_PRUNED                                            syscall.Errno = 13025\n\tERROR_IPSEC_IKE_NEG_STATUS_BEGIN                                          syscall.Errno = 13800\n\tERROR_IPSEC_IKE_AUTH_FAIL                                                 syscall.Errno = 13801\n\tERROR_IPSEC_IKE_ATTRIB_FAIL                                               syscall.Errno = 13802\n\tERROR_IPSEC_IKE_NEGOTIATION_PENDING                                       syscall.Errno = 13803\n\tERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR                                  syscall.Errno = 13804\n\tERROR_IPSEC_IKE_TIMED_OUT                                                 syscall.Errno = 13805\n\tERROR_IPSEC_IKE_NO_CERT                                                   syscall.Errno = 13806\n\tERROR_IPSEC_IKE_SA_DELETED                                                syscall.Errno = 13807\n\tERROR_IPSEC_IKE_SA_REAPED                                                 syscall.Errno = 13808\n\tERROR_IPSEC_IKE_MM_ACQUIRE_DROP                                           syscall.Errno = 13809\n\tERROR_IPSEC_IKE_QM_ACQUIRE_DROP                                           syscall.Errno = 13810\n\tERROR_IPSEC_IKE_QUEUE_DROP_MM                                             syscall.Errno = 13811\n\tERROR_IPSEC_IKE_QUEUE_DROP_NO_MM                                          syscall.Errno = 13812\n\tERROR_IPSEC_IKE_DROP_NO_RESPONSE                                          syscall.Errno = 13813\n\tERROR_IPSEC_IKE_MM_DELAY_DROP                                             syscall.Errno = 13814\n\tERROR_IPSEC_IKE_QM_DELAY_DROP                                             syscall.Errno = 13815\n\tERROR_IPSEC_IKE_ERROR                                                     syscall.Errno = 13816\n\tERROR_IPSEC_IKE_CRL_FAILED                                                syscall.Errno = 13817\n\tERROR_IPSEC_IKE_INVALID_KEY_USAGE                                         syscall.Errno = 13818\n\tERROR_IPSEC_IKE_INVALID_CERT_TYPE                                         syscall.Errno = 13819\n\tERROR_IPSEC_IKE_NO_PRIVATE_KEY                                            syscall.Errno = 13820\n\tERROR_IPSEC_IKE_SIMULTANEOUS_REKEY                                        syscall.Errno = 13821\n\tERROR_IPSEC_IKE_DH_FAIL                                                   syscall.Errno = 13822\n\tERROR_IPSEC_IKE_CRITICAL_PAYLOAD_NOT_RECOGNIZED                           syscall.Errno = 13823\n\tERROR_IPSEC_IKE_INVALID_HEADER                                            syscall.Errno = 13824\n\tERROR_IPSEC_IKE_NO_POLICY                                                 syscall.Errno = 13825\n\tERROR_IPSEC_IKE_INVALID_SIGNATURE                                         syscall.Errno = 13826\n\tERROR_IPSEC_IKE_KERBEROS_ERROR                                            syscall.Errno = 13827\n\tERROR_IPSEC_IKE_NO_PUBLIC_KEY                                             syscall.Errno = 13828\n\tERROR_IPSEC_IKE_PROCESS_ERR                                               syscall.Errno = 13829\n\tERROR_IPSEC_IKE_PROCESS_ERR_SA                                            syscall.Errno = 13830\n\tERROR_IPSEC_IKE_PROCESS_ERR_PROP                                          syscall.Errno = 13831\n\tERROR_IPSEC_IKE_PROCESS_ERR_TRANS                                         syscall.Errno = 13832\n\tERROR_IPSEC_IKE_PROCESS_ERR_KE                                            syscall.Errno = 13833\n\tERROR_IPSEC_IKE_PROCESS_ERR_ID                                            syscall.Errno = 13834\n\tERROR_IPSEC_IKE_PROCESS_ERR_CERT                                          syscall.Errno = 13835\n\tERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ                                      syscall.Errno = 13836\n\tERROR_IPSEC_IKE_PROCESS_ERR_HASH                                          syscall.Errno = 13837\n\tERROR_IPSEC_IKE_PROCESS_ERR_SIG                                           syscall.Errno = 13838\n\tERROR_IPSEC_IKE_PROCESS_ERR_NONCE                                         syscall.Errno = 13839\n\tERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY                                        syscall.Errno = 13840\n\tERROR_IPSEC_IKE_PROCESS_ERR_DELETE                                        syscall.Errno = 13841\n\tERROR_IPSEC_IKE_PROCESS_ERR_VENDOR                                        syscall.Errno = 13842\n\tERROR_IPSEC_IKE_INVALID_PAYLOAD                                           syscall.Errno = 13843\n\tERROR_IPSEC_IKE_LOAD_SOFT_SA                                              syscall.Errno = 13844\n\tERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN                                         syscall.Errno = 13845\n\tERROR_IPSEC_IKE_INVALID_COOKIE                                            syscall.Errno = 13846\n\tERROR_IPSEC_IKE_NO_PEER_CERT                                              syscall.Errno = 13847\n\tERROR_IPSEC_IKE_PEER_CRL_FAILED                                           syscall.Errno = 13848\n\tERROR_IPSEC_IKE_POLICY_CHANGE                                             syscall.Errno = 13849\n\tERROR_IPSEC_IKE_NO_MM_POLICY                                              syscall.Errno = 13850\n\tERROR_IPSEC_IKE_NOTCBPRIV                                                 syscall.Errno = 13851\n\tERROR_IPSEC_IKE_SECLOADFAIL                                               syscall.Errno = 13852\n\tERROR_IPSEC_IKE_FAILSSPINIT                                               syscall.Errno = 13853\n\tERROR_IPSEC_IKE_FAILQUERYSSP                                              syscall.Errno = 13854\n\tERROR_IPSEC_IKE_SRVACQFAIL                                                syscall.Errno = 13855\n\tERROR_IPSEC_IKE_SRVQUERYCRED                                              syscall.Errno = 13856\n\tERROR_IPSEC_IKE_GETSPIFAIL                                                syscall.Errno = 13857\n\tERROR_IPSEC_IKE_INVALID_FILTER                                            syscall.Errno = 13858\n\tERROR_IPSEC_IKE_OUT_OF_MEMORY                                             syscall.Errno = 13859\n\tERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED                                     syscall.Errno = 13860\n\tERROR_IPSEC_IKE_INVALID_POLICY                                            syscall.Errno = 13861\n\tERROR_IPSEC_IKE_UNKNOWN_DOI                                               syscall.Errno = 13862\n\tERROR_IPSEC_IKE_INVALID_SITUATION                                         syscall.Errno = 13863\n\tERROR_IPSEC_IKE_DH_FAILURE                                                syscall.Errno = 13864\n\tERROR_IPSEC_IKE_INVALID_GROUP                                             syscall.Errno = 13865\n\tERROR_IPSEC_IKE_ENCRYPT                                                   syscall.Errno = 13866\n\tERROR_IPSEC_IKE_DECRYPT                                                   syscall.Errno = 13867\n\tERROR_IPSEC_IKE_POLICY_MATCH                                              syscall.Errno = 13868\n\tERROR_IPSEC_IKE_UNSUPPORTED_ID                                            syscall.Errno = 13869\n\tERROR_IPSEC_IKE_INVALID_HASH                                              syscall.Errno = 13870\n\tERROR_IPSEC_IKE_INVALID_HASH_ALG                                          syscall.Errno = 13871\n\tERROR_IPSEC_IKE_INVALID_HASH_SIZE                                         syscall.Errno = 13872\n\tERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG                                       syscall.Errno = 13873\n\tERROR_IPSEC_IKE_INVALID_AUTH_ALG                                          syscall.Errno = 13874\n\tERROR_IPSEC_IKE_INVALID_SIG                                               syscall.Errno = 13875\n\tERROR_IPSEC_IKE_LOAD_FAILED                                               syscall.Errno = 13876\n\tERROR_IPSEC_IKE_RPC_DELETE                                                syscall.Errno = 13877\n\tERROR_IPSEC_IKE_BENIGN_REINIT                                             syscall.Errno = 13878\n\tERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY                         syscall.Errno = 13879\n\tERROR_IPSEC_IKE_INVALID_MAJOR_VERSION                                     syscall.Errno = 13880\n\tERROR_IPSEC_IKE_INVALID_CERT_KEYLEN                                       syscall.Errno = 13881\n\tERROR_IPSEC_IKE_MM_LIMIT                                                  syscall.Errno = 13882\n\tERROR_IPSEC_IKE_NEGOTIATION_DISABLED                                      syscall.Errno = 13883\n\tERROR_IPSEC_IKE_QM_LIMIT                                                  syscall.Errno = 13884\n\tERROR_IPSEC_IKE_MM_EXPIRED                                                syscall.Errno = 13885\n\tERROR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID                                   syscall.Errno = 13886\n\tERROR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH                                syscall.Errno = 13887\n\tERROR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID                                     syscall.Errno = 13888\n\tERROR_IPSEC_IKE_INVALID_AUTH_PAYLOAD                                      syscall.Errno = 13889\n\tERROR_IPSEC_IKE_DOS_COOKIE_SENT                                           syscall.Errno = 13890\n\tERROR_IPSEC_IKE_SHUTTING_DOWN                                             syscall.Errno = 13891\n\tERROR_IPSEC_IKE_CGA_AUTH_FAILED                                           syscall.Errno = 13892\n\tERROR_IPSEC_IKE_PROCESS_ERR_NATOA                                         syscall.Errno = 13893\n\tERROR_IPSEC_IKE_INVALID_MM_FOR_QM                                         syscall.Errno = 13894\n\tERROR_IPSEC_IKE_QM_EXPIRED                                                syscall.Errno = 13895\n\tERROR_IPSEC_IKE_TOO_MANY_FILTERS                                          syscall.Errno = 13896\n\tERROR_IPSEC_IKE_NEG_STATUS_END                                            syscall.Errno = 13897\n\tERROR_IPSEC_IKE_KILL_DUMMY_NAP_TUNNEL                                     syscall.Errno = 13898\n\tERROR_IPSEC_IKE_INNER_IP_ASSIGNMENT_FAILURE                               syscall.Errno = 13899\n\tERROR_IPSEC_IKE_REQUIRE_CP_PAYLOAD_MISSING                                syscall.Errno = 13900\n\tERROR_IPSEC_KEY_MODULE_IMPERSONATION_NEGOTIATION_PENDING                  syscall.Errno = 13901\n\tERROR_IPSEC_IKE_COEXISTENCE_SUPPRESS                                      syscall.Errno = 13902\n\tERROR_IPSEC_IKE_RATELIMIT_DROP                                            syscall.Errno = 13903\n\tERROR_IPSEC_IKE_PEER_DOESNT_SUPPORT_MOBIKE                                syscall.Errno = 13904\n\tERROR_IPSEC_IKE_AUTHORIZATION_FAILURE                                     syscall.Errno = 13905\n\tERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_FAILURE                         syscall.Errno = 13906\n\tERROR_IPSEC_IKE_AUTHORIZATION_FAILURE_WITH_OPTIONAL_RETRY                 syscall.Errno = 13907\n\tERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_AND_CERTMAP_FAILURE             syscall.Errno = 13908\n\tERROR_IPSEC_IKE_NEG_STATUS_EXTENDED_END                                   syscall.Errno = 13909\n\tERROR_IPSEC_BAD_SPI                                                       syscall.Errno = 13910\n\tERROR_IPSEC_SA_LIFETIME_EXPIRED                                           syscall.Errno = 13911\n\tERROR_IPSEC_WRONG_SA                                                      syscall.Errno = 13912\n\tERROR_IPSEC_REPLAY_CHECK_FAILED                                           syscall.Errno = 13913\n\tERROR_IPSEC_INVALID_PACKET                                                syscall.Errno = 13914\n\tERROR_IPSEC_INTEGRITY_CHECK_FAILED                                        syscall.Errno = 13915\n\tERROR_IPSEC_CLEAR_TEXT_DROP                                               syscall.Errno = 13916\n\tERROR_IPSEC_AUTH_FIREWALL_DROP                                            syscall.Errno = 13917\n\tERROR_IPSEC_THROTTLE_DROP                                                 syscall.Errno = 13918\n\tERROR_IPSEC_DOSP_BLOCK                                                    syscall.Errno = 13925\n\tERROR_IPSEC_DOSP_RECEIVED_MULTICAST                                       syscall.Errno = 13926\n\tERROR_IPSEC_DOSP_INVALID_PACKET                                           syscall.Errno = 13927\n\tERROR_IPSEC_DOSP_STATE_LOOKUP_FAILED                                      syscall.Errno = 13928\n\tERROR_IPSEC_DOSP_MAX_ENTRIES                                              syscall.Errno = 13929\n\tERROR_IPSEC_DOSP_KEYMOD_NOT_ALLOWED                                       syscall.Errno = 13930\n\tERROR_IPSEC_DOSP_NOT_INSTALLED                                            syscall.Errno = 13931\n\tERROR_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES                              syscall.Errno = 13932\n\tERROR_SXS_SECTION_NOT_FOUND                                               syscall.Errno = 14000\n\tERROR_SXS_CANT_GEN_ACTCTX                                                 syscall.Errno = 14001\n\tERROR_SXS_INVALID_ACTCTXDATA_FORMAT                                       syscall.Errno = 14002\n\tERROR_SXS_ASSEMBLY_NOT_FOUND                                              syscall.Errno = 14003\n\tERROR_SXS_MANIFEST_FORMAT_ERROR                                           syscall.Errno = 14004\n\tERROR_SXS_MANIFEST_PARSE_ERROR                                            syscall.Errno = 14005\n\tERROR_SXS_ACTIVATION_CONTEXT_DISABLED                                     syscall.Errno = 14006\n\tERROR_SXS_KEY_NOT_FOUND                                                   syscall.Errno = 14007\n\tERROR_SXS_VERSION_CONFLICT                                                syscall.Errno = 14008\n\tERROR_SXS_WRONG_SECTION_TYPE                                              syscall.Errno = 14009\n\tERROR_SXS_THREAD_QUERIES_DISABLED                                         syscall.Errno = 14010\n\tERROR_SXS_PROCESS_DEFAULT_ALREADY_SET                                     syscall.Errno = 14011\n\tERROR_SXS_UNKNOWN_ENCODING_GROUP                                          syscall.Errno = 14012\n\tERROR_SXS_UNKNOWN_ENCODING                                                syscall.Errno = 14013\n\tERROR_SXS_INVALID_XML_NAMESPACE_URI                                       syscall.Errno = 14014\n\tERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED                          syscall.Errno = 14015\n\tERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED                          syscall.Errno = 14016\n\tERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE                             syscall.Errno = 14017\n\tERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE                     syscall.Errno = 14018\n\tERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE                     syscall.Errno = 14019\n\tERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT                  syscall.Errno = 14020\n\tERROR_SXS_DUPLICATE_DLL_NAME                                              syscall.Errno = 14021\n\tERROR_SXS_DUPLICATE_WINDOWCLASS_NAME                                      syscall.Errno = 14022\n\tERROR_SXS_DUPLICATE_CLSID                                                 syscall.Errno = 14023\n\tERROR_SXS_DUPLICATE_IID                                                   syscall.Errno = 14024\n\tERROR_SXS_DUPLICATE_TLBID                                                 syscall.Errno = 14025\n\tERROR_SXS_DUPLICATE_PROGID                                                syscall.Errno = 14026\n\tERROR_SXS_DUPLICATE_ASSEMBLY_NAME                                         syscall.Errno = 14027\n\tERROR_SXS_FILE_HASH_MISMATCH                                              syscall.Errno = 14028\n\tERROR_SXS_POLICY_PARSE_ERROR                                              syscall.Errno = 14029\n\tERROR_SXS_XML_E_MISSINGQUOTE                                              syscall.Errno = 14030\n\tERROR_SXS_XML_E_COMMENTSYNTAX                                             syscall.Errno = 14031\n\tERROR_SXS_XML_E_BADSTARTNAMECHAR                                          syscall.Errno = 14032\n\tERROR_SXS_XML_E_BADNAMECHAR                                               syscall.Errno = 14033\n\tERROR_SXS_XML_E_BADCHARINSTRING                                           syscall.Errno = 14034\n\tERROR_SXS_XML_E_XMLDECLSYNTAX                                             syscall.Errno = 14035\n\tERROR_SXS_XML_E_BADCHARDATA                                               syscall.Errno = 14036\n\tERROR_SXS_XML_E_MISSINGWHITESPACE                                         syscall.Errno = 14037\n\tERROR_SXS_XML_E_EXPECTINGTAGEND                                           syscall.Errno = 14038\n\tERROR_SXS_XML_E_MISSINGSEMICOLON                                          syscall.Errno = 14039\n\tERROR_SXS_XML_E_UNBALANCEDPAREN                                           syscall.Errno = 14040\n\tERROR_SXS_XML_E_INTERNALERROR                                             syscall.Errno = 14041\n\tERROR_SXS_XML_E_UNEXPECTED_WHITESPACE                                     syscall.Errno = 14042\n\tERROR_SXS_XML_E_INCOMPLETE_ENCODING                                       syscall.Errno = 14043\n\tERROR_SXS_XML_E_MISSING_PAREN                                             syscall.Errno = 14044\n\tERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE                                       syscall.Errno = 14045\n\tERROR_SXS_XML_E_MULTIPLE_COLONS                                           syscall.Errno = 14046\n\tERROR_SXS_XML_E_INVALID_DECIMAL                                           syscall.Errno = 14047\n\tERROR_SXS_XML_E_INVALID_HEXIDECIMAL                                       syscall.Errno = 14048\n\tERROR_SXS_XML_E_INVALID_UNICODE                                           syscall.Errno = 14049\n\tERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK                                  syscall.Errno = 14050\n\tERROR_SXS_XML_E_UNEXPECTEDENDTAG                                          syscall.Errno = 14051\n\tERROR_SXS_XML_E_UNCLOSEDTAG                                               syscall.Errno = 14052\n\tERROR_SXS_XML_E_DUPLICATEATTRIBUTE                                        syscall.Errno = 14053\n\tERROR_SXS_XML_E_MULTIPLEROOTS                                             syscall.Errno = 14054\n\tERROR_SXS_XML_E_INVALIDATROOTLEVEL                                        syscall.Errno = 14055\n\tERROR_SXS_XML_E_BADXMLDECL                                                syscall.Errno = 14056\n\tERROR_SXS_XML_E_MISSINGROOT                                               syscall.Errno = 14057\n\tERROR_SXS_XML_E_UNEXPECTEDEOF                                             syscall.Errno = 14058\n\tERROR_SXS_XML_E_BADPEREFINSUBSET                                          syscall.Errno = 14059\n\tERROR_SXS_XML_E_UNCLOSEDSTARTTAG                                          syscall.Errno = 14060\n\tERROR_SXS_XML_E_UNCLOSEDENDTAG                                            syscall.Errno = 14061\n\tERROR_SXS_XML_E_UNCLOSEDSTRING                                            syscall.Errno = 14062\n\tERROR_SXS_XML_E_UNCLOSEDCOMMENT                                           syscall.Errno = 14063\n\tERROR_SXS_XML_E_UNCLOSEDDECL                                              syscall.Errno = 14064\n\tERROR_SXS_XML_E_UNCLOSEDCDATA                                             syscall.Errno = 14065\n\tERROR_SXS_XML_E_RESERVEDNAMESPACE                                         syscall.Errno = 14066\n\tERROR_SXS_XML_E_INVALIDENCODING                                           syscall.Errno = 14067\n\tERROR_SXS_XML_E_INVALIDSWITCH                                             syscall.Errno = 14068\n\tERROR_SXS_XML_E_BADXMLCASE                                                syscall.Errno = 14069\n\tERROR_SXS_XML_E_INVALID_STANDALONE                                        syscall.Errno = 14070\n\tERROR_SXS_XML_E_UNEXPECTED_STANDALONE                                     syscall.Errno = 14071\n\tERROR_SXS_XML_E_INVALID_VERSION                                           syscall.Errno = 14072\n\tERROR_SXS_XML_E_MISSINGEQUALS                                             syscall.Errno = 14073\n\tERROR_SXS_PROTECTION_RECOVERY_FAILED                                      syscall.Errno = 14074\n\tERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT                                 syscall.Errno = 14075\n\tERROR_SXS_PROTECTION_CATALOG_NOT_VALID                                    syscall.Errno = 14076\n\tERROR_SXS_UNTRANSLATABLE_HRESULT                                          syscall.Errno = 14077\n\tERROR_SXS_PROTECTION_CATALOG_FILE_MISSING                                 syscall.Errno = 14078\n\tERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE                             syscall.Errno = 14079\n\tERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME                        syscall.Errno = 14080\n\tERROR_SXS_ASSEMBLY_MISSING                                                syscall.Errno = 14081\n\tERROR_SXS_CORRUPT_ACTIVATION_STACK                                        syscall.Errno = 14082\n\tERROR_SXS_CORRUPTION                                                      syscall.Errno = 14083\n\tERROR_SXS_EARLY_DEACTIVATION                                              syscall.Errno = 14084\n\tERROR_SXS_INVALID_DEACTIVATION                                            syscall.Errno = 14085\n\tERROR_SXS_MULTIPLE_DEACTIVATION                                           syscall.Errno = 14086\n\tERROR_SXS_PROCESS_TERMINATION_REQUESTED                                   syscall.Errno = 14087\n\tERROR_SXS_RELEASE_ACTIVATION_CONTEXT                                      syscall.Errno = 14088\n\tERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY                         syscall.Errno = 14089\n\tERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE                                syscall.Errno = 14090\n\tERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME                                 syscall.Errno = 14091\n\tERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE                                    syscall.Errno = 14092\n\tERROR_SXS_IDENTITY_PARSE_ERROR                                            syscall.Errno = 14093\n\tERROR_MALFORMED_SUBSTITUTION_STRING                                       syscall.Errno = 14094\n\tERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN                                      syscall.Errno = 14095\n\tERROR_UNMAPPED_SUBSTITUTION_STRING                                        syscall.Errno = 14096\n\tERROR_SXS_ASSEMBLY_NOT_LOCKED                                             syscall.Errno = 14097\n\tERROR_SXS_COMPONENT_STORE_CORRUPT                                         syscall.Errno = 14098\n\tERROR_ADVANCED_INSTALLER_FAILED                                           syscall.Errno = 14099\n\tERROR_XML_ENCODING_MISMATCH                                               syscall.Errno = 14100\n\tERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT                   syscall.Errno = 14101\n\tERROR_SXS_IDENTITIES_DIFFERENT                                            syscall.Errno = 14102\n\tERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT                                    syscall.Errno = 14103\n\tERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY                                       syscall.Errno = 14104\n\tERROR_SXS_MANIFEST_TOO_BIG                                                syscall.Errno = 14105\n\tERROR_SXS_SETTING_NOT_REGISTERED                                          syscall.Errno = 14106\n\tERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE                                  syscall.Errno = 14107\n\tERROR_SMI_PRIMITIVE_INSTALLER_FAILED                                      syscall.Errno = 14108\n\tERROR_GENERIC_COMMAND_FAILED                                              syscall.Errno = 14109\n\tERROR_SXS_FILE_HASH_MISSING                                               syscall.Errno = 14110\n\tERROR_SXS_DUPLICATE_ACTIVATABLE_CLASS                                     syscall.Errno = 14111\n\tERROR_EVT_INVALID_CHANNEL_PATH                                            syscall.Errno = 15000\n\tERROR_EVT_INVALID_QUERY                                                   syscall.Errno = 15001\n\tERROR_EVT_PUBLISHER_METADATA_NOT_FOUND                                    syscall.Errno = 15002\n\tERROR_EVT_EVENT_TEMPLATE_NOT_FOUND                                        syscall.Errno = 15003\n\tERROR_EVT_INVALID_PUBLISHER_NAME                                          syscall.Errno = 15004\n\tERROR_EVT_INVALID_EVENT_DATA                                              syscall.Errno = 15005\n\tERROR_EVT_CHANNEL_NOT_FOUND                                               syscall.Errno = 15007\n\tERROR_EVT_MALFORMED_XML_TEXT                                              syscall.Errno = 15008\n\tERROR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL                                  syscall.Errno = 15009\n\tERROR_EVT_CONFIGURATION_ERROR                                             syscall.Errno = 15010\n\tERROR_EVT_QUERY_RESULT_STALE                                              syscall.Errno = 15011\n\tERROR_EVT_QUERY_RESULT_INVALID_POSITION                                   syscall.Errno = 15012\n\tERROR_EVT_NON_VALIDATING_MSXML                                            syscall.Errno = 15013\n\tERROR_EVT_FILTER_ALREADYSCOPED                                            syscall.Errno = 15014\n\tERROR_EVT_FILTER_NOTELTSET                                                syscall.Errno = 15015\n\tERROR_EVT_FILTER_INVARG                                                   syscall.Errno = 15016\n\tERROR_EVT_FILTER_INVTEST                                                  syscall.Errno = 15017\n\tERROR_EVT_FILTER_INVTYPE                                                  syscall.Errno = 15018\n\tERROR_EVT_FILTER_PARSEERR                                                 syscall.Errno = 15019\n\tERROR_EVT_FILTER_UNSUPPORTEDOP                                            syscall.Errno = 15020\n\tERROR_EVT_FILTER_UNEXPECTEDTOKEN                                          syscall.Errno = 15021\n\tERROR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL                   syscall.Errno = 15022\n\tERROR_EVT_INVALID_CHANNEL_PROPERTY_VALUE                                  syscall.Errno = 15023\n\tERROR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE                                syscall.Errno = 15024\n\tERROR_EVT_CHANNEL_CANNOT_ACTIVATE                                         syscall.Errno = 15025\n\tERROR_EVT_FILTER_TOO_COMPLEX                                              syscall.Errno = 15026\n\tERROR_EVT_MESSAGE_NOT_FOUND                                               syscall.Errno = 15027\n\tERROR_EVT_MESSAGE_ID_NOT_FOUND                                            syscall.Errno = 15028\n\tERROR_EVT_UNRESOLVED_VALUE_INSERT                                         syscall.Errno = 15029\n\tERROR_EVT_UNRESOLVED_PARAMETER_INSERT                                     syscall.Errno = 15030\n\tERROR_EVT_MAX_INSERTS_REACHED                                             syscall.Errno = 15031\n\tERROR_EVT_EVENT_DEFINITION_NOT_FOUND                                      syscall.Errno = 15032\n\tERROR_EVT_MESSAGE_LOCALE_NOT_FOUND                                        syscall.Errno = 15033\n\tERROR_EVT_VERSION_TOO_OLD                                                 syscall.Errno = 15034\n\tERROR_EVT_VERSION_TOO_NEW                                                 syscall.Errno = 15035\n\tERROR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY                                    syscall.Errno = 15036\n\tERROR_EVT_PUBLISHER_DISABLED                                              syscall.Errno = 15037\n\tERROR_EVT_FILTER_OUT_OF_RANGE                                             syscall.Errno = 15038\n\tERROR_EC_SUBSCRIPTION_CANNOT_ACTIVATE                                     syscall.Errno = 15080\n\tERROR_EC_LOG_DISABLED                                                     syscall.Errno = 15081\n\tERROR_EC_CIRCULAR_FORWARDING                                              syscall.Errno = 15082\n\tERROR_EC_CREDSTORE_FULL                                                   syscall.Errno = 15083\n\tERROR_EC_CRED_NOT_FOUND                                                   syscall.Errno = 15084\n\tERROR_EC_NO_ACTIVE_CHANNEL                                                syscall.Errno = 15085\n\tERROR_MUI_FILE_NOT_FOUND                                                  syscall.Errno = 15100\n\tERROR_MUI_INVALID_FILE                                                    syscall.Errno = 15101\n\tERROR_MUI_INVALID_RC_CONFIG                                               syscall.Errno = 15102\n\tERROR_MUI_INVALID_LOCALE_NAME                                             syscall.Errno = 15103\n\tERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME                                   syscall.Errno = 15104\n\tERROR_MUI_FILE_NOT_LOADED                                                 syscall.Errno = 15105\n\tERROR_RESOURCE_ENUM_USER_STOP                                             syscall.Errno = 15106\n\tERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED                               syscall.Errno = 15107\n\tERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME                                syscall.Errno = 15108\n\tERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE                          syscall.Errno = 15110\n\tERROR_MRM_INVALID_PRICONFIG                                               syscall.Errno = 15111\n\tERROR_MRM_INVALID_FILE_TYPE                                               syscall.Errno = 15112\n\tERROR_MRM_UNKNOWN_QUALIFIER                                               syscall.Errno = 15113\n\tERROR_MRM_INVALID_QUALIFIER_VALUE                                         syscall.Errno = 15114\n\tERROR_MRM_NO_CANDIDATE                                                    syscall.Errno = 15115\n\tERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE                                   syscall.Errno = 15116\n\tERROR_MRM_RESOURCE_TYPE_MISMATCH                                          syscall.Errno = 15117\n\tERROR_MRM_DUPLICATE_MAP_NAME                                              syscall.Errno = 15118\n\tERROR_MRM_DUPLICATE_ENTRY                                                 syscall.Errno = 15119\n\tERROR_MRM_INVALID_RESOURCE_IDENTIFIER                                     syscall.Errno = 15120\n\tERROR_MRM_FILEPATH_TOO_LONG                                               syscall.Errno = 15121\n\tERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE                                      syscall.Errno = 15122\n\tERROR_MRM_INVALID_PRI_FILE                                                syscall.Errno = 15126\n\tERROR_MRM_NAMED_RESOURCE_NOT_FOUND                                        syscall.Errno = 15127\n\tERROR_MRM_MAP_NOT_FOUND                                                   syscall.Errno = 15135\n\tERROR_MRM_UNSUPPORTED_PROFILE_TYPE                                        syscall.Errno = 15136\n\tERROR_MRM_INVALID_QUALIFIER_OPERATOR                                      syscall.Errno = 15137\n\tERROR_MRM_INDETERMINATE_QUALIFIER_VALUE                                   syscall.Errno = 15138\n\tERROR_MRM_AUTOMERGE_ENABLED                                               syscall.Errno = 15139\n\tERROR_MRM_TOO_MANY_RESOURCES                                              syscall.Errno = 15140\n\tERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_MERGE                                 syscall.Errno = 15141\n\tERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_LOAD_UNLOAD_PRI_FILE                  syscall.Errno = 15142\n\tERROR_MRM_NO_CURRENT_VIEW_ON_THREAD                                       syscall.Errno = 15143\n\tERROR_DIFFERENT_PROFILE_RESOURCE_MANAGER_EXIST                            syscall.Errno = 15144\n\tERROR_OPERATION_NOT_ALLOWED_FROM_SYSTEM_COMPONENT                         syscall.Errno = 15145\n\tERROR_MRM_DIRECT_REF_TO_NON_DEFAULT_RESOURCE                              syscall.Errno = 15146\n\tERROR_MRM_GENERATION_COUNT_MISMATCH                                       syscall.Errno = 15147\n\tERROR_PRI_MERGE_VERSION_MISMATCH                                          syscall.Errno = 15148\n\tERROR_PRI_MERGE_MISSING_SCHEMA                                            syscall.Errno = 15149\n\tERROR_PRI_MERGE_LOAD_FILE_FAILED                                          syscall.Errno = 15150\n\tERROR_PRI_MERGE_ADD_FILE_FAILED                                           syscall.Errno = 15151\n\tERROR_PRI_MERGE_WRITE_FILE_FAILED                                         syscall.Errno = 15152\n\tERROR_PRI_MERGE_MULTIPLE_PACKAGE_FAMILIES_NOT_ALLOWED                     syscall.Errno = 15153\n\tERROR_PRI_MERGE_MULTIPLE_MAIN_PACKAGES_NOT_ALLOWED                        syscall.Errno = 15154\n\tERROR_PRI_MERGE_BUNDLE_PACKAGES_NOT_ALLOWED                               syscall.Errno = 15155\n\tERROR_PRI_MERGE_MAIN_PACKAGE_REQUIRED                                     syscall.Errno = 15156\n\tERROR_PRI_MERGE_RESOURCE_PACKAGE_REQUIRED                                 syscall.Errno = 15157\n\tERROR_PRI_MERGE_INVALID_FILE_NAME                                         syscall.Errno = 15158\n\tERROR_MRM_PACKAGE_NOT_FOUND                                               syscall.Errno = 15159\n\tERROR_MRM_MISSING_DEFAULT_LANGUAGE                                        syscall.Errno = 15160\n\tERROR_MCA_INVALID_CAPABILITIES_STRING                                     syscall.Errno = 15200\n\tERROR_MCA_INVALID_VCP_VERSION                                             syscall.Errno = 15201\n\tERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION                             syscall.Errno = 15202\n\tERROR_MCA_MCCS_VERSION_MISMATCH                                           syscall.Errno = 15203\n\tERROR_MCA_UNSUPPORTED_MCCS_VERSION                                        syscall.Errno = 15204\n\tERROR_MCA_INTERNAL_ERROR                                                  syscall.Errno = 15205\n\tERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED                                syscall.Errno = 15206\n\tERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE                                   syscall.Errno = 15207\n\tERROR_AMBIGUOUS_SYSTEM_DEVICE                                             syscall.Errno = 15250\n\tERROR_SYSTEM_DEVICE_NOT_FOUND                                             syscall.Errno = 15299\n\tERROR_HASH_NOT_SUPPORTED                                                  syscall.Errno = 15300\n\tERROR_HASH_NOT_PRESENT                                                    syscall.Errno = 15301\n\tERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED                                syscall.Errno = 15321\n\tERROR_GPIO_CLIENT_INFORMATION_INVALID                                     syscall.Errno = 15322\n\tERROR_GPIO_VERSION_NOT_SUPPORTED                                          syscall.Errno = 15323\n\tERROR_GPIO_INVALID_REGISTRATION_PACKET                                    syscall.Errno = 15324\n\tERROR_GPIO_OPERATION_DENIED                                               syscall.Errno = 15325\n\tERROR_GPIO_INCOMPATIBLE_CONNECT_MODE                                      syscall.Errno = 15326\n\tERROR_GPIO_INTERRUPT_ALREADY_UNMASKED                                     syscall.Errno = 15327\n\tERROR_CANNOT_SWITCH_RUNLEVEL                                              syscall.Errno = 15400\n\tERROR_INVALID_RUNLEVEL_SETTING                                            syscall.Errno = 15401\n\tERROR_RUNLEVEL_SWITCH_TIMEOUT                                             syscall.Errno = 15402\n\tERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT                                       syscall.Errno = 15403\n\tERROR_RUNLEVEL_SWITCH_IN_PROGRESS                                         syscall.Errno = 15404\n\tERROR_SERVICES_FAILED_AUTOSTART                                           syscall.Errno = 15405\n\tERROR_COM_TASK_STOP_PENDING                                               syscall.Errno = 15501\n\tERROR_INSTALL_OPEN_PACKAGE_FAILED                                         syscall.Errno = 15600\n\tERROR_INSTALL_PACKAGE_NOT_FOUND                                           syscall.Errno = 15601\n\tERROR_INSTALL_INVALID_PACKAGE                                             syscall.Errno = 15602\n\tERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED                                   syscall.Errno = 15603\n\tERROR_INSTALL_OUT_OF_DISK_SPACE                                           syscall.Errno = 15604\n\tERROR_INSTALL_NETWORK_FAILURE                                             syscall.Errno = 15605\n\tERROR_INSTALL_REGISTRATION_FAILURE                                        syscall.Errno = 15606\n\tERROR_INSTALL_DEREGISTRATION_FAILURE                                      syscall.Errno = 15607\n\tERROR_INSTALL_CANCEL                                                      syscall.Errno = 15608\n\tERROR_INSTALL_FAILED                                                      syscall.Errno = 15609\n\tERROR_REMOVE_FAILED                                                       syscall.Errno = 15610\n\tERROR_PACKAGE_ALREADY_EXISTS                                              syscall.Errno = 15611\n\tERROR_NEEDS_REMEDIATION                                                   syscall.Errno = 15612\n\tERROR_INSTALL_PREREQUISITE_FAILED                                         syscall.Errno = 15613\n\tERROR_PACKAGE_REPOSITORY_CORRUPTED                                        syscall.Errno = 15614\n\tERROR_INSTALL_POLICY_FAILURE                                              syscall.Errno = 15615\n\tERROR_PACKAGE_UPDATING                                                    syscall.Errno = 15616\n\tERROR_DEPLOYMENT_BLOCKED_BY_POLICY                                        syscall.Errno = 15617\n\tERROR_PACKAGES_IN_USE                                                     syscall.Errno = 15618\n\tERROR_RECOVERY_FILE_CORRUPT                                               syscall.Errno = 15619\n\tERROR_INVALID_STAGED_SIGNATURE                                            syscall.Errno = 15620\n\tERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED                      syscall.Errno = 15621\n\tERROR_INSTALL_PACKAGE_DOWNGRADE                                           syscall.Errno = 15622\n\tERROR_SYSTEM_NEEDS_REMEDIATION                                            syscall.Errno = 15623\n\tERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN                                     syscall.Errno = 15624\n\tERROR_RESILIENCY_FILE_CORRUPT                                             syscall.Errno = 15625\n\tERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING                                syscall.Errno = 15626\n\tERROR_PACKAGE_MOVE_FAILED                                                 syscall.Errno = 15627\n\tERROR_INSTALL_VOLUME_NOT_EMPTY                                            syscall.Errno = 15628\n\tERROR_INSTALL_VOLUME_OFFLINE                                              syscall.Errno = 15629\n\tERROR_INSTALL_VOLUME_CORRUPT                                              syscall.Errno = 15630\n\tERROR_NEEDS_REGISTRATION                                                  syscall.Errno = 15631\n\tERROR_INSTALL_WRONG_PROCESSOR_ARCHITECTURE                                syscall.Errno = 15632\n\tERROR_DEV_SIDELOAD_LIMIT_EXCEEDED                                         syscall.Errno = 15633\n\tERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE                      syscall.Errno = 15634\n\tERROR_PACKAGE_NOT_SUPPORTED_ON_FILESYSTEM                                 syscall.Errno = 15635\n\tERROR_PACKAGE_MOVE_BLOCKED_BY_STREAMING                                   syscall.Errno = 15636\n\tERROR_INSTALL_OPTIONAL_PACKAGE_APPLICATIONID_NOT_UNIQUE                   syscall.Errno = 15637\n\tERROR_PACKAGE_STAGING_ONHOLD                                              syscall.Errno = 15638\n\tERROR_INSTALL_INVALID_RELATED_SET_UPDATE                                  syscall.Errno = 15639\n\tERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_FULLTRUST_CAPABILITY syscall.Errno = 15640\n\tERROR_DEPLOYMENT_BLOCKED_BY_USER_LOG_OFF                                  syscall.Errno = 15641\n\tERROR_PROVISION_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_PROVISIONED        syscall.Errno = 15642\n\tERROR_PACKAGES_REPUTATION_CHECK_FAILED                                    syscall.Errno = 15643\n\tERROR_PACKAGES_REPUTATION_CHECK_TIMEDOUT                                  syscall.Errno = 15644\n\tERROR_DEPLOYMENT_OPTION_NOT_SUPPORTED                                     syscall.Errno = 15645\n\tERROR_APPINSTALLER_ACTIVATION_BLOCKED                                     syscall.Errno = 15646\n\tERROR_REGISTRATION_FROM_REMOTE_DRIVE_NOT_SUPPORTED                        syscall.Errno = 15647\n\tERROR_APPX_RAW_DATA_WRITE_FAILED                                          syscall.Errno = 15648\n\tERROR_DEPLOYMENT_BLOCKED_BY_VOLUME_POLICY_PACKAGE                         syscall.Errno = 15649\n\tERROR_DEPLOYMENT_BLOCKED_BY_VOLUME_POLICY_MACHINE                         syscall.Errno = 15650\n\tERROR_DEPLOYMENT_BLOCKED_BY_PROFILE_POLICY                                syscall.Errno = 15651\n\tERROR_DEPLOYMENT_FAILED_CONFLICTING_MUTABLE_PACKAGE_DIRECTORY             syscall.Errno = 15652\n\tERROR_SINGLETON_RESOURCE_INSTALLED_IN_ACTIVE_USER                         syscall.Errno = 15653\n\tERROR_DIFFERENT_VERSION_OF_PACKAGED_SERVICE_INSTALLED                     syscall.Errno = 15654\n\tERROR_SERVICE_EXISTS_AS_NON_PACKAGED_SERVICE                              syscall.Errno = 15655\n\tERROR_PACKAGED_SERVICE_REQUIRES_ADMIN_PRIVILEGES                          syscall.Errno = 15656\n\tAPPMODEL_ERROR_NO_PACKAGE                                                 syscall.Errno = 15700\n\tAPPMODEL_ERROR_PACKAGE_RUNTIME_CORRUPT                                    syscall.Errno = 15701\n\tAPPMODEL_ERROR_PACKAGE_IDENTITY_CORRUPT                                   syscall.Errno = 15702\n\tAPPMODEL_ERROR_NO_APPLICATION                                             syscall.Errno = 15703\n\tAPPMODEL_ERROR_DYNAMIC_PROPERTY_READ_FAILED                               syscall.Errno = 15704\n\tAPPMODEL_ERROR_DYNAMIC_PROPERTY_INVALID                                   syscall.Errno = 15705\n\tAPPMODEL_ERROR_PACKAGE_NOT_AVAILABLE                                      syscall.Errno = 15706\n\tAPPMODEL_ERROR_NO_MUTABLE_DIRECTORY                                       syscall.Errno = 15707\n\tERROR_STATE_LOAD_STORE_FAILED                                             syscall.Errno = 15800\n\tERROR_STATE_GET_VERSION_FAILED                                            syscall.Errno = 15801\n\tERROR_STATE_SET_VERSION_FAILED                                            syscall.Errno = 15802\n\tERROR_STATE_STRUCTURED_RESET_FAILED                                       syscall.Errno = 15803\n\tERROR_STATE_OPEN_CONTAINER_FAILED                                         syscall.Errno = 15804\n\tERROR_STATE_CREATE_CONTAINER_FAILED                                       syscall.Errno = 15805\n\tERROR_STATE_DELETE_CONTAINER_FAILED                                       syscall.Errno = 15806\n\tERROR_STATE_READ_SETTING_FAILED                                           syscall.Errno = 15807\n\tERROR_STATE_WRITE_SETTING_FAILED                                          syscall.Errno = 15808\n\tERROR_STATE_DELETE_SETTING_FAILED                                         syscall.Errno = 15809\n\tERROR_STATE_QUERY_SETTING_FAILED                                          syscall.Errno = 15810\n\tERROR_STATE_READ_COMPOSITE_SETTING_FAILED                                 syscall.Errno = 15811\n\tERROR_STATE_WRITE_COMPOSITE_SETTING_FAILED                                syscall.Errno = 15812\n\tERROR_STATE_ENUMERATE_CONTAINER_FAILED                                    syscall.Errno = 15813\n\tERROR_STATE_ENUMERATE_SETTINGS_FAILED                                     syscall.Errno = 15814\n\tERROR_STATE_COMPOSITE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED                   syscall.Errno = 15815\n\tERROR_STATE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED                             syscall.Errno = 15816\n\tERROR_STATE_SETTING_NAME_SIZE_LIMIT_EXCEEDED                              syscall.Errno = 15817\n\tERROR_STATE_CONTAINER_NAME_SIZE_LIMIT_EXCEEDED                            syscall.Errno = 15818\n\tERROR_API_UNAVAILABLE                                                     syscall.Errno = 15841\n\tSTORE_ERROR_UNLICENSED                                                    syscall.Errno = 15861\n\tSTORE_ERROR_UNLICENSED_USER                                               syscall.Errno = 15862\n\tSTORE_ERROR_PENDING_COM_TRANSACTION                                       syscall.Errno = 15863\n\tSTORE_ERROR_LICENSE_REVOKED                                               syscall.Errno = 15864\n\tSEVERITY_SUCCESS                                                          syscall.Errno = 0\n\tSEVERITY_ERROR                                                            syscall.Errno = 1\n\tFACILITY_NT_BIT                                                                         = 0x10000000\n\tE_NOT_SET                                                                               = ERROR_NOT_FOUND\n\tE_NOT_VALID_STATE                                                                       = ERROR_INVALID_STATE\n\tE_NOT_SUFFICIENT_BUFFER                                                                 = ERROR_INSUFFICIENT_BUFFER\n\tE_TIME_SENSITIVE_THREAD                                                                 = ERROR_TIME_SENSITIVE_THREAD\n\tE_NO_TASK_QUEUE                                                                         = ERROR_NO_TASK_QUEUE\n\tNOERROR                                                                   syscall.Errno = 0\n\tE_UNEXPECTED                                                              Handle        = 0x8000FFFF\n\tE_NOTIMPL                                                                 Handle        = 0x80004001\n\tE_OUTOFMEMORY                                                             Handle        = 0x8007000E\n\tE_INVALIDARG                                                              Handle        = 0x80070057\n\tE_NOINTERFACE                                                             Handle        = 0x80004002\n\tE_POINTER                                                                 Handle        = 0x80004003\n\tE_HANDLE                                                                  Handle        = 0x80070006\n\tE_ABORT                                                                   Handle        = 0x80004004\n\tE_FAIL                                                                    Handle        = 0x80004005\n\tE_ACCESSDENIED                                                            Handle        = 0x80070005\n\tE_PENDING                                                                 Handle        = 0x8000000A\n\tE_BOUNDS                                                                  Handle        = 0x8000000B\n\tE_CHANGED_STATE                                                           Handle        = 0x8000000C\n\tE_ILLEGAL_STATE_CHANGE                                                    Handle        = 0x8000000D\n\tE_ILLEGAL_METHOD_CALL                                                     Handle        = 0x8000000E\n\tRO_E_METADATA_NAME_NOT_FOUND                                              Handle        = 0x8000000F\n\tRO_E_METADATA_NAME_IS_NAMESPACE                                           Handle        = 0x80000010\n\tRO_E_METADATA_INVALID_TYPE_FORMAT                                         Handle        = 0x80000011\n\tRO_E_INVALID_METADATA_FILE                                                Handle        = 0x80000012\n\tRO_E_CLOSED                                                               Handle        = 0x80000013\n\tRO_E_EXCLUSIVE_WRITE                                                      Handle        = 0x80000014\n\tRO_E_CHANGE_NOTIFICATION_IN_PROGRESS                                      Handle        = 0x80000015\n\tRO_E_ERROR_STRING_NOT_FOUND                                               Handle        = 0x80000016\n\tE_STRING_NOT_NULL_TERMINATED                                              Handle        = 0x80000017\n\tE_ILLEGAL_DELEGATE_ASSIGNMENT                                             Handle        = 0x80000018\n\tE_ASYNC_OPERATION_NOT_STARTED                                             Handle        = 0x80000019\n\tE_APPLICATION_EXITING                                                     Handle        = 0x8000001A\n\tE_APPLICATION_VIEW_EXITING                                                Handle        = 0x8000001B\n\tRO_E_MUST_BE_AGILE                                                        Handle        = 0x8000001C\n\tRO_E_UNSUPPORTED_FROM_MTA                                                 Handle        = 0x8000001D\n\tRO_E_COMMITTED                                                            Handle        = 0x8000001E\n\tRO_E_BLOCKED_CROSS_ASTA_CALL                                              Handle        = 0x8000001F\n\tRO_E_CANNOT_ACTIVATE_FULL_TRUST_SERVER                                    Handle        = 0x80000020\n\tRO_E_CANNOT_ACTIVATE_UNIVERSAL_APPLICATION_SERVER                         Handle        = 0x80000021\n\tCO_E_INIT_TLS                                                             Handle        = 0x80004006\n\tCO_E_INIT_SHARED_ALLOCATOR                                                Handle        = 0x80004007\n\tCO_E_INIT_MEMORY_ALLOCATOR                                                Handle        = 0x80004008\n\tCO_E_INIT_CLASS_CACHE                                                     Handle        = 0x80004009\n\tCO_E_INIT_RPC_CHANNEL                                                     Handle        = 0x8000400A\n\tCO_E_INIT_TLS_SET_CHANNEL_CONTROL                                         Handle        = 0x8000400B\n\tCO_E_INIT_TLS_CHANNEL_CONTROL                                             Handle        = 0x8000400C\n\tCO_E_INIT_UNACCEPTED_USER_ALLOCATOR                                       Handle        = 0x8000400D\n\tCO_E_INIT_SCM_MUTEX_EXISTS                                                Handle        = 0x8000400E\n\tCO_E_INIT_SCM_FILE_MAPPING_EXISTS                                         Handle        = 0x8000400F\n\tCO_E_INIT_SCM_MAP_VIEW_OF_FILE                                            Handle        = 0x80004010\n\tCO_E_INIT_SCM_EXEC_FAILURE                                                Handle        = 0x80004011\n\tCO_E_INIT_ONLY_SINGLE_THREADED                                            Handle        = 0x80004012\n\tCO_E_CANT_REMOTE                                                          Handle        = 0x80004013\n\tCO_E_BAD_SERVER_NAME                                                      Handle        = 0x80004014\n\tCO_E_WRONG_SERVER_IDENTITY                                                Handle        = 0x80004015\n\tCO_E_OLE1DDE_DISABLED                                                     Handle        = 0x80004016\n\tCO_E_RUNAS_SYNTAX                                                         Handle        = 0x80004017\n\tCO_E_CREATEPROCESS_FAILURE                                                Handle        = 0x80004018\n\tCO_E_RUNAS_CREATEPROCESS_FAILURE                                          Handle        = 0x80004019\n\tCO_E_RUNAS_LOGON_FAILURE                                                  Handle        = 0x8000401A\n\tCO_E_LAUNCH_PERMSSION_DENIED                                              Handle        = 0x8000401B\n\tCO_E_START_SERVICE_FAILURE                                                Handle        = 0x8000401C\n\tCO_E_REMOTE_COMMUNICATION_FAILURE                                         Handle        = 0x8000401D\n\tCO_E_SERVER_START_TIMEOUT                                                 Handle        = 0x8000401E\n\tCO_E_CLSREG_INCONSISTENT                                                  Handle        = 0x8000401F\n\tCO_E_IIDREG_INCONSISTENT                                                  Handle        = 0x80004020\n\tCO_E_NOT_SUPPORTED                                                        Handle        = 0x80004021\n\tCO_E_RELOAD_DLL                                                           Handle        = 0x80004022\n\tCO_E_MSI_ERROR                                                            Handle        = 0x80004023\n\tCO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT                             Handle        = 0x80004024\n\tCO_E_SERVER_PAUSED                                                        Handle        = 0x80004025\n\tCO_E_SERVER_NOT_PAUSED                                                    Handle        = 0x80004026\n\tCO_E_CLASS_DISABLED                                                       Handle        = 0x80004027\n\tCO_E_CLRNOTAVAILABLE                                                      Handle        = 0x80004028\n\tCO_E_ASYNC_WORK_REJECTED                                                  Handle        = 0x80004029\n\tCO_E_SERVER_INIT_TIMEOUT                                                  Handle        = 0x8000402A\n\tCO_E_NO_SECCTX_IN_ACTIVATE                                                Handle        = 0x8000402B\n\tCO_E_TRACKER_CONFIG                                                       Handle        = 0x80004030\n\tCO_E_THREADPOOL_CONFIG                                                    Handle        = 0x80004031\n\tCO_E_SXS_CONFIG                                                           Handle        = 0x80004032\n\tCO_E_MALFORMED_SPN                                                        Handle        = 0x80004033\n\tCO_E_UNREVOKED_REGISTRATION_ON_APARTMENT_SHUTDOWN                         Handle        = 0x80004034\n\tCO_E_PREMATURE_STUB_RUNDOWN                                               Handle        = 0x80004035\n\tS_OK                                                                      Handle        = 0\n\tS_FALSE                                                                   Handle        = 1\n\tOLE_E_FIRST                                                               Handle        = 0x80040000\n\tOLE_E_LAST                                                                Handle        = 0x800400FF\n\tOLE_S_FIRST                                                               Handle        = 0x00040000\n\tOLE_S_LAST                                                                Handle        = 0x000400FF\n\tOLE_E_OLEVERB                                                             Handle        = 0x80040000\n\tOLE_E_ADVF                                                                Handle        = 0x80040001\n\tOLE_E_ENUM_NOMORE                                                         Handle        = 0x80040002\n\tOLE_E_ADVISENOTSUPPORTED                                                  Handle        = 0x80040003\n\tOLE_E_NOCONNECTION                                                        Handle        = 0x80040004\n\tOLE_E_NOTRUNNING                                                          Handle        = 0x80040005\n\tOLE_E_NOCACHE                                                             Handle        = 0x80040006\n\tOLE_E_BLANK                                                               Handle        = 0x80040007\n\tOLE_E_CLASSDIFF                                                           Handle        = 0x80040008\n\tOLE_E_CANT_GETMONIKER                                                     Handle        = 0x80040009\n\tOLE_E_CANT_BINDTOSOURCE                                                   Handle        = 0x8004000A\n\tOLE_E_STATIC                                                              Handle        = 0x8004000B\n\tOLE_E_PROMPTSAVECANCELLED                                                 Handle        = 0x8004000C\n\tOLE_E_INVALIDRECT                                                         Handle        = 0x8004000D\n\tOLE_E_WRONGCOMPOBJ                                                        Handle        = 0x8004000E\n\tOLE_E_INVALIDHWND                                                         Handle        = 0x8004000F\n\tOLE_E_NOT_INPLACEACTIVE                                                   Handle        = 0x80040010\n\tOLE_E_CANTCONVERT                                                         Handle        = 0x80040011\n\tOLE_E_NOSTORAGE                                                           Handle        = 0x80040012\n\tDV_E_FORMATETC                                                            Handle        = 0x80040064\n\tDV_E_DVTARGETDEVICE                                                       Handle        = 0x80040065\n\tDV_E_STGMEDIUM                                                            Handle        = 0x80040066\n\tDV_E_STATDATA                                                             Handle        = 0x80040067\n\tDV_E_LINDEX                                                               Handle        = 0x80040068\n\tDV_E_TYMED                                                                Handle        = 0x80040069\n\tDV_E_CLIPFORMAT                                                           Handle        = 0x8004006A\n\tDV_E_DVASPECT                                                             Handle        = 0x8004006B\n\tDV_E_DVTARGETDEVICE_SIZE                                                  Handle        = 0x8004006C\n\tDV_E_NOIVIEWOBJECT                                                        Handle        = 0x8004006D\n\tDRAGDROP_E_FIRST                                                          syscall.Errno = 0x80040100\n\tDRAGDROP_E_LAST                                                           syscall.Errno = 0x8004010F\n\tDRAGDROP_S_FIRST                                                          syscall.Errno = 0x00040100\n\tDRAGDROP_S_LAST                                                           syscall.Errno = 0x0004010F\n\tDRAGDROP_E_NOTREGISTERED                                                  Handle        = 0x80040100\n\tDRAGDROP_E_ALREADYREGISTERED                                              Handle        = 0x80040101\n\tDRAGDROP_E_INVALIDHWND                                                    Handle        = 0x80040102\n\tDRAGDROP_E_CONCURRENT_DRAG_ATTEMPTED                                      Handle        = 0x80040103\n\tCLASSFACTORY_E_FIRST                                                      syscall.Errno = 0x80040110\n\tCLASSFACTORY_E_LAST                                                       syscall.Errno = 0x8004011F\n\tCLASSFACTORY_S_FIRST                                                      syscall.Errno = 0x00040110\n\tCLASSFACTORY_S_LAST                                                       syscall.Errno = 0x0004011F\n\tCLASS_E_NOAGGREGATION                                                     Handle        = 0x80040110\n\tCLASS_E_CLASSNOTAVAILABLE                                                 Handle        = 0x80040111\n\tCLASS_E_NOTLICENSED                                                       Handle        = 0x80040112\n\tMARSHAL_E_FIRST                                                           syscall.Errno = 0x80040120\n\tMARSHAL_E_LAST                                                            syscall.Errno = 0x8004012F\n\tMARSHAL_S_FIRST                                                           syscall.Errno = 0x00040120\n\tMARSHAL_S_LAST                                                            syscall.Errno = 0x0004012F\n\tDATA_E_FIRST                                                              syscall.Errno = 0x80040130\n\tDATA_E_LAST                                                               syscall.Errno = 0x8004013F\n\tDATA_S_FIRST                                                              syscall.Errno = 0x00040130\n\tDATA_S_LAST                                                               syscall.Errno = 0x0004013F\n\tVIEW_E_FIRST                                                              syscall.Errno = 0x80040140\n\tVIEW_E_LAST                                                               syscall.Errno = 0x8004014F\n\tVIEW_S_FIRST                                                              syscall.Errno = 0x00040140\n\tVIEW_S_LAST                                                               syscall.Errno = 0x0004014F\n\tVIEW_E_DRAW                                                               Handle        = 0x80040140\n\tREGDB_E_FIRST                                                             syscall.Errno = 0x80040150\n\tREGDB_E_LAST                                                              syscall.Errno = 0x8004015F\n\tREGDB_S_FIRST                                                             syscall.Errno = 0x00040150\n\tREGDB_S_LAST                                                              syscall.Errno = 0x0004015F\n\tREGDB_E_READREGDB                                                         Handle        = 0x80040150\n\tREGDB_E_WRITEREGDB                                                        Handle        = 0x80040151\n\tREGDB_E_KEYMISSING                                                        Handle        = 0x80040152\n\tREGDB_E_INVALIDVALUE                                                      Handle        = 0x80040153\n\tREGDB_E_CLASSNOTREG                                                       Handle        = 0x80040154\n\tREGDB_E_IIDNOTREG                                                         Handle        = 0x80040155\n\tREGDB_E_BADTHREADINGMODEL                                                 Handle        = 0x80040156\n\tREGDB_E_PACKAGEPOLICYVIOLATION                                            Handle        = 0x80040157\n\tCAT_E_FIRST                                                               syscall.Errno = 0x80040160\n\tCAT_E_LAST                                                                syscall.Errno = 0x80040161\n\tCAT_E_CATIDNOEXIST                                                        Handle        = 0x80040160\n\tCAT_E_NODESCRIPTION                                                       Handle        = 0x80040161\n\tCS_E_FIRST                                                                syscall.Errno = 0x80040164\n\tCS_E_LAST                                                                 syscall.Errno = 0x8004016F\n\tCS_E_PACKAGE_NOTFOUND                                                     Handle        = 0x80040164\n\tCS_E_NOT_DELETABLE                                                        Handle        = 0x80040165\n\tCS_E_CLASS_NOTFOUND                                                       Handle        = 0x80040166\n\tCS_E_INVALID_VERSION                                                      Handle        = 0x80040167\n\tCS_E_NO_CLASSSTORE                                                        Handle        = 0x80040168\n\tCS_E_OBJECT_NOTFOUND                                                      Handle        = 0x80040169\n\tCS_E_OBJECT_ALREADY_EXISTS                                                Handle        = 0x8004016A\n\tCS_E_INVALID_PATH                                                         Handle        = 0x8004016B\n\tCS_E_NETWORK_ERROR                                                        Handle        = 0x8004016C\n\tCS_E_ADMIN_LIMIT_EXCEEDED                                                 Handle        = 0x8004016D\n\tCS_E_SCHEMA_MISMATCH                                                      Handle        = 0x8004016E\n\tCS_E_INTERNAL_ERROR                                                       Handle        = 0x8004016F\n\tCACHE_E_FIRST                                                             syscall.Errno = 0x80040170\n\tCACHE_E_LAST                                                              syscall.Errno = 0x8004017F\n\tCACHE_S_FIRST                                                             syscall.Errno = 0x00040170\n\tCACHE_S_LAST                                                              syscall.Errno = 0x0004017F\n\tCACHE_E_NOCACHE_UPDATED                                                   Handle        = 0x80040170\n\tOLEOBJ_E_FIRST                                                            syscall.Errno = 0x80040180\n\tOLEOBJ_E_LAST                                                             syscall.Errno = 0x8004018F\n\tOLEOBJ_S_FIRST                                                            syscall.Errno = 0x00040180\n\tOLEOBJ_S_LAST                                                             syscall.Errno = 0x0004018F\n\tOLEOBJ_E_NOVERBS                                                          Handle        = 0x80040180\n\tOLEOBJ_E_INVALIDVERB                                                      Handle        = 0x80040181\n\tCLIENTSITE_E_FIRST                                                        syscall.Errno = 0x80040190\n\tCLIENTSITE_E_LAST                                                         syscall.Errno = 0x8004019F\n\tCLIENTSITE_S_FIRST                                                        syscall.Errno = 0x00040190\n\tCLIENTSITE_S_LAST                                                         syscall.Errno = 0x0004019F\n\tINPLACE_E_NOTUNDOABLE                                                     Handle        = 0x800401A0\n\tINPLACE_E_NOTOOLSPACE                                                     Handle        = 0x800401A1\n\tINPLACE_E_FIRST                                                           syscall.Errno = 0x800401A0\n\tINPLACE_E_LAST                                                            syscall.Errno = 0x800401AF\n\tINPLACE_S_FIRST                                                           syscall.Errno = 0x000401A0\n\tINPLACE_S_LAST                                                            syscall.Errno = 0x000401AF\n\tENUM_E_FIRST                                                              syscall.Errno = 0x800401B0\n\tENUM_E_LAST                                                               syscall.Errno = 0x800401BF\n\tENUM_S_FIRST                                                              syscall.Errno = 0x000401B0\n\tENUM_S_LAST                                                               syscall.Errno = 0x000401BF\n\tCONVERT10_E_FIRST                                                         syscall.Errno = 0x800401C0\n\tCONVERT10_E_LAST                                                          syscall.Errno = 0x800401CF\n\tCONVERT10_S_FIRST                                                         syscall.Errno = 0x000401C0\n\tCONVERT10_S_LAST                                                          syscall.Errno = 0x000401CF\n\tCONVERT10_E_OLESTREAM_GET                                                 Handle        = 0x800401C0\n\tCONVERT10_E_OLESTREAM_PUT                                                 Handle        = 0x800401C1\n\tCONVERT10_E_OLESTREAM_FMT                                                 Handle        = 0x800401C2\n\tCONVERT10_E_OLESTREAM_BITMAP_TO_DIB                                       Handle        = 0x800401C3\n\tCONVERT10_E_STG_FMT                                                       Handle        = 0x800401C4\n\tCONVERT10_E_STG_NO_STD_STREAM                                             Handle        = 0x800401C5\n\tCONVERT10_E_STG_DIB_TO_BITMAP                                             Handle        = 0x800401C6\n\tCLIPBRD_E_FIRST                                                           syscall.Errno = 0x800401D0\n\tCLIPBRD_E_LAST                                                            syscall.Errno = 0x800401DF\n\tCLIPBRD_S_FIRST                                                           syscall.Errno = 0x000401D0\n\tCLIPBRD_S_LAST                                                            syscall.Errno = 0x000401DF\n\tCLIPBRD_E_CANT_OPEN                                                       Handle        = 0x800401D0\n\tCLIPBRD_E_CANT_EMPTY                                                      Handle        = 0x800401D1\n\tCLIPBRD_E_CANT_SET                                                        Handle        = 0x800401D2\n\tCLIPBRD_E_BAD_DATA                                                        Handle        = 0x800401D3\n\tCLIPBRD_E_CANT_CLOSE                                                      Handle        = 0x800401D4\n\tMK_E_FIRST                                                                syscall.Errno = 0x800401E0\n\tMK_E_LAST                                                                 syscall.Errno = 0x800401EF\n\tMK_S_FIRST                                                                syscall.Errno = 0x000401E0\n\tMK_S_LAST                                                                 syscall.Errno = 0x000401EF\n\tMK_E_CONNECTMANUALLY                                                      Handle        = 0x800401E0\n\tMK_E_EXCEEDEDDEADLINE                                                     Handle        = 0x800401E1\n\tMK_E_NEEDGENERIC                                                          Handle        = 0x800401E2\n\tMK_E_UNAVAILABLE                                                          Handle        = 0x800401E3\n\tMK_E_SYNTAX                                                               Handle        = 0x800401E4\n\tMK_E_NOOBJECT                                                             Handle        = 0x800401E5\n\tMK_E_INVALIDEXTENSION                                                     Handle        = 0x800401E6\n\tMK_E_INTERMEDIATEINTERFACENOTSUPPORTED                                    Handle        = 0x800401E7\n\tMK_E_NOTBINDABLE                                                          Handle        = 0x800401E8\n\tMK_E_NOTBOUND                                                             Handle        = 0x800401E9\n\tMK_E_CANTOPENFILE                                                         Handle        = 0x800401EA\n\tMK_E_MUSTBOTHERUSER                                                       Handle        = 0x800401EB\n\tMK_E_NOINVERSE                                                            Handle        = 0x800401EC\n\tMK_E_NOSTORAGE                                                            Handle        = 0x800401ED\n\tMK_E_NOPREFIX                                                             Handle        = 0x800401EE\n\tMK_E_ENUMERATION_FAILED                                                   Handle        = 0x800401EF\n\tCO_E_FIRST                                                                syscall.Errno = 0x800401F0\n\tCO_E_LAST                                                                 syscall.Errno = 0x800401FF\n\tCO_S_FIRST                                                                syscall.Errno = 0x000401F0\n\tCO_S_LAST                                                                 syscall.Errno = 0x000401FF\n\tCO_E_NOTINITIALIZED                                                       Handle        = 0x800401F0\n\tCO_E_ALREADYINITIALIZED                                                   Handle        = 0x800401F1\n\tCO_E_CANTDETERMINECLASS                                                   Handle        = 0x800401F2\n\tCO_E_CLASSSTRING                                                          Handle        = 0x800401F3\n\tCO_E_IIDSTRING                                                            Handle        = 0x800401F4\n\tCO_E_APPNOTFOUND                                                          Handle        = 0x800401F5\n\tCO_E_APPSINGLEUSE                                                         Handle        = 0x800401F6\n\tCO_E_ERRORINAPP                                                           Handle        = 0x800401F7\n\tCO_E_DLLNOTFOUND                                                          Handle        = 0x800401F8\n\tCO_E_ERRORINDLL                                                           Handle        = 0x800401F9\n\tCO_E_WRONGOSFORAPP                                                        Handle        = 0x800401FA\n\tCO_E_OBJNOTREG                                                            Handle        = 0x800401FB\n\tCO_E_OBJISREG                                                             Handle        = 0x800401FC\n\tCO_E_OBJNOTCONNECTED                                                      Handle        = 0x800401FD\n\tCO_E_APPDIDNTREG                                                          Handle        = 0x800401FE\n\tCO_E_RELEASED                                                             Handle        = 0x800401FF\n\tEVENT_E_FIRST                                                             syscall.Errno = 0x80040200\n\tEVENT_E_LAST                                                              syscall.Errno = 0x8004021F\n\tEVENT_S_FIRST                                                             syscall.Errno = 0x00040200\n\tEVENT_S_LAST                                                              syscall.Errno = 0x0004021F\n\tEVENT_S_SOME_SUBSCRIBERS_FAILED                                           Handle        = 0x00040200\n\tEVENT_E_ALL_SUBSCRIBERS_FAILED                                            Handle        = 0x80040201\n\tEVENT_S_NOSUBSCRIBERS                                                     Handle        = 0x00040202\n\tEVENT_E_QUERYSYNTAX                                                       Handle        = 0x80040203\n\tEVENT_E_QUERYFIELD                                                        Handle        = 0x80040204\n\tEVENT_E_INTERNALEXCEPTION                                                 Handle        = 0x80040205\n\tEVENT_E_INTERNALERROR                                                     Handle        = 0x80040206\n\tEVENT_E_INVALID_PER_USER_SID                                              Handle        = 0x80040207\n\tEVENT_E_USER_EXCEPTION                                                    Handle        = 0x80040208\n\tEVENT_E_TOO_MANY_METHODS                                                  Handle        = 0x80040209\n\tEVENT_E_MISSING_EVENTCLASS                                                Handle        = 0x8004020A\n\tEVENT_E_NOT_ALL_REMOVED                                                   Handle        = 0x8004020B\n\tEVENT_E_COMPLUS_NOT_INSTALLED                                             Handle        = 0x8004020C\n\tEVENT_E_CANT_MODIFY_OR_DELETE_UNCONFIGURED_OBJECT                         Handle        = 0x8004020D\n\tEVENT_E_CANT_MODIFY_OR_DELETE_CONFIGURED_OBJECT                           Handle        = 0x8004020E\n\tEVENT_E_INVALID_EVENT_CLASS_PARTITION                                     Handle        = 0x8004020F\n\tEVENT_E_PER_USER_SID_NOT_LOGGED_ON                                        Handle        = 0x80040210\n\tTPC_E_INVALID_PROPERTY                                                    Handle        = 0x80040241\n\tTPC_E_NO_DEFAULT_TABLET                                                   Handle        = 0x80040212\n\tTPC_E_UNKNOWN_PROPERTY                                                    Handle        = 0x8004021B\n\tTPC_E_INVALID_INPUT_RECT                                                  Handle        = 0x80040219\n\tTPC_E_INVALID_STROKE                                                      Handle        = 0x80040222\n\tTPC_E_INITIALIZE_FAIL                                                     Handle        = 0x80040223\n\tTPC_E_NOT_RELEVANT                                                        Handle        = 0x80040232\n\tTPC_E_INVALID_PACKET_DESCRIPTION                                          Handle        = 0x80040233\n\tTPC_E_RECOGNIZER_NOT_REGISTERED                                           Handle        = 0x80040235\n\tTPC_E_INVALID_RIGHTS                                                      Handle        = 0x80040236\n\tTPC_E_OUT_OF_ORDER_CALL                                                   Handle        = 0x80040237\n\tTPC_E_QUEUE_FULL                                                          Handle        = 0x80040238\n\tTPC_E_INVALID_CONFIGURATION                                               Handle        = 0x80040239\n\tTPC_E_INVALID_DATA_FROM_RECOGNIZER                                        Handle        = 0x8004023A\n\tTPC_S_TRUNCATED                                                           Handle        = 0x00040252\n\tTPC_S_INTERRUPTED                                                         Handle        = 0x00040253\n\tTPC_S_NO_DATA_TO_PROCESS                                                  Handle        = 0x00040254\n\tXACT_E_FIRST                                                              syscall.Errno = 0x8004D000\n\tXACT_E_LAST                                                               syscall.Errno = 0x8004D02B\n\tXACT_S_FIRST                                                              syscall.Errno = 0x0004D000\n\tXACT_S_LAST                                                               syscall.Errno = 0x0004D010\n\tXACT_E_ALREADYOTHERSINGLEPHASE                                            Handle        = 0x8004D000\n\tXACT_E_CANTRETAIN                                                         Handle        = 0x8004D001\n\tXACT_E_COMMITFAILED                                                       Handle        = 0x8004D002\n\tXACT_E_COMMITPREVENTED                                                    Handle        = 0x8004D003\n\tXACT_E_HEURISTICABORT                                                     Handle        = 0x8004D004\n\tXACT_E_HEURISTICCOMMIT                                                    Handle        = 0x8004D005\n\tXACT_E_HEURISTICDAMAGE                                                    Handle        = 0x8004D006\n\tXACT_E_HEURISTICDANGER                                                    Handle        = 0x8004D007\n\tXACT_E_ISOLATIONLEVEL                                                     Handle        = 0x8004D008\n\tXACT_E_NOASYNC                                                            Handle        = 0x8004D009\n\tXACT_E_NOENLIST                                                           Handle        = 0x8004D00A\n\tXACT_E_NOISORETAIN                                                        Handle        = 0x8004D00B\n\tXACT_E_NORESOURCE                                                         Handle        = 0x8004D00C\n\tXACT_E_NOTCURRENT                                                         Handle        = 0x8004D00D\n\tXACT_E_NOTRANSACTION                                                      Handle        = 0x8004D00E\n\tXACT_E_NOTSUPPORTED                                                       Handle        = 0x8004D00F\n\tXACT_E_UNKNOWNRMGRID                                                      Handle        = 0x8004D010\n\tXACT_E_WRONGSTATE                                                         Handle        = 0x8004D011\n\tXACT_E_WRONGUOW                                                           Handle        = 0x8004D012\n\tXACT_E_XTIONEXISTS                                                        Handle        = 0x8004D013\n\tXACT_E_NOIMPORTOBJECT                                                     Handle        = 0x8004D014\n\tXACT_E_INVALIDCOOKIE                                                      Handle        = 0x8004D015\n\tXACT_E_INDOUBT                                                            Handle        = 0x8004D016\n\tXACT_E_NOTIMEOUT                                                          Handle        = 0x8004D017\n\tXACT_E_ALREADYINPROGRESS                                                  Handle        = 0x8004D018\n\tXACT_E_ABORTED                                                            Handle        = 0x8004D019\n\tXACT_E_LOGFULL                                                            Handle        = 0x8004D01A\n\tXACT_E_TMNOTAVAILABLE                                                     Handle        = 0x8004D01B\n\tXACT_E_CONNECTION_DOWN                                                    Handle        = 0x8004D01C\n\tXACT_E_CONNECTION_DENIED                                                  Handle        = 0x8004D01D\n\tXACT_E_REENLISTTIMEOUT                                                    Handle        = 0x8004D01E\n\tXACT_E_TIP_CONNECT_FAILED                                                 Handle        = 0x8004D01F\n\tXACT_E_TIP_PROTOCOL_ERROR                                                 Handle        = 0x8004D020\n\tXACT_E_TIP_PULL_FAILED                                                    Handle        = 0x8004D021\n\tXACT_E_DEST_TMNOTAVAILABLE                                                Handle        = 0x8004D022\n\tXACT_E_TIP_DISABLED                                                       Handle        = 0x8004D023\n\tXACT_E_NETWORK_TX_DISABLED                                                Handle        = 0x8004D024\n\tXACT_E_PARTNER_NETWORK_TX_DISABLED                                        Handle        = 0x8004D025\n\tXACT_E_XA_TX_DISABLED                                                     Handle        = 0x8004D026\n\tXACT_E_UNABLE_TO_READ_DTC_CONFIG                                          Handle        = 0x8004D027\n\tXACT_E_UNABLE_TO_LOAD_DTC_PROXY                                           Handle        = 0x8004D028\n\tXACT_E_ABORTING                                                           Handle        = 0x8004D029\n\tXACT_E_PUSH_COMM_FAILURE                                                  Handle        = 0x8004D02A\n\tXACT_E_PULL_COMM_FAILURE                                                  Handle        = 0x8004D02B\n\tXACT_E_LU_TX_DISABLED                                                     Handle        = 0x8004D02C\n\tXACT_E_CLERKNOTFOUND                                                      Handle        = 0x8004D080\n\tXACT_E_CLERKEXISTS                                                        Handle        = 0x8004D081\n\tXACT_E_RECOVERYINPROGRESS                                                 Handle        = 0x8004D082\n\tXACT_E_TRANSACTIONCLOSED                                                  Handle        = 0x8004D083\n\tXACT_E_INVALIDLSN                                                         Handle        = 0x8004D084\n\tXACT_E_REPLAYREQUEST                                                      Handle        = 0x8004D085\n\tXACT_S_ASYNC                                                              Handle        = 0x0004D000\n\tXACT_S_DEFECT                                                             Handle        = 0x0004D001\n\tXACT_S_READONLY                                                           Handle        = 0x0004D002\n\tXACT_S_SOMENORETAIN                                                       Handle        = 0x0004D003\n\tXACT_S_OKINFORM                                                           Handle        = 0x0004D004\n\tXACT_S_MADECHANGESCONTENT                                                 Handle        = 0x0004D005\n\tXACT_S_MADECHANGESINFORM                                                  Handle        = 0x0004D006\n\tXACT_S_ALLNORETAIN                                                        Handle        = 0x0004D007\n\tXACT_S_ABORTING                                                           Handle        = 0x0004D008\n\tXACT_S_SINGLEPHASE                                                        Handle        = 0x0004D009\n\tXACT_S_LOCALLY_OK                                                         Handle        = 0x0004D00A\n\tXACT_S_LASTRESOURCEMANAGER                                                Handle        = 0x0004D010\n\tCONTEXT_E_FIRST                                                           syscall.Errno = 0x8004E000\n\tCONTEXT_E_LAST                                                            syscall.Errno = 0x8004E02F\n\tCONTEXT_S_FIRST                                                           syscall.Errno = 0x0004E000\n\tCONTEXT_S_LAST                                                            syscall.Errno = 0x0004E02F\n\tCONTEXT_E_ABORTED                                                         Handle        = 0x8004E002\n\tCONTEXT_E_ABORTING                                                        Handle        = 0x8004E003\n\tCONTEXT_E_NOCONTEXT                                                       Handle        = 0x8004E004\n\tCONTEXT_E_WOULD_DEADLOCK                                                  Handle        = 0x8004E005\n\tCONTEXT_E_SYNCH_TIMEOUT                                                   Handle        = 0x8004E006\n\tCONTEXT_E_OLDREF                                                          Handle        = 0x8004E007\n\tCONTEXT_E_ROLENOTFOUND                                                    Handle        = 0x8004E00C\n\tCONTEXT_E_TMNOTAVAILABLE                                                  Handle        = 0x8004E00F\n\tCO_E_ACTIVATIONFAILED                                                     Handle        = 0x8004E021\n\tCO_E_ACTIVATIONFAILED_EVENTLOGGED                                         Handle        = 0x8004E022\n\tCO_E_ACTIVATIONFAILED_CATALOGERROR                                        Handle        = 0x8004E023\n\tCO_E_ACTIVATIONFAILED_TIMEOUT                                             Handle        = 0x8004E024\n\tCO_E_INITIALIZATIONFAILED                                                 Handle        = 0x8004E025\n\tCONTEXT_E_NOJIT                                                           Handle        = 0x8004E026\n\tCONTEXT_E_NOTRANSACTION                                                   Handle        = 0x8004E027\n\tCO_E_THREADINGMODEL_CHANGED                                               Handle        = 0x8004E028\n\tCO_E_NOIISINTRINSICS                                                      Handle        = 0x8004E029\n\tCO_E_NOCOOKIES                                                            Handle        = 0x8004E02A\n\tCO_E_DBERROR                                                              Handle        = 0x8004E02B\n\tCO_E_NOTPOOLED                                                            Handle        = 0x8004E02C\n\tCO_E_NOTCONSTRUCTED                                                       Handle        = 0x8004E02D\n\tCO_E_NOSYNCHRONIZATION                                                    Handle        = 0x8004E02E\n\tCO_E_ISOLEVELMISMATCH                                                     Handle        = 0x8004E02F\n\tCO_E_CALL_OUT_OF_TX_SCOPE_NOT_ALLOWED                                     Handle        = 0x8004E030\n\tCO_E_EXIT_TRANSACTION_SCOPE_NOT_CALLED                                    Handle        = 0x8004E031\n\tOLE_S_USEREG                                                              Handle        = 0x00040000\n\tOLE_S_STATIC                                                              Handle        = 0x00040001\n\tOLE_S_MAC_CLIPFORMAT                                                      Handle        = 0x00040002\n\tDRAGDROP_S_DROP                                                           Handle        = 0x00040100\n\tDRAGDROP_S_CANCEL                                                         Handle        = 0x00040101\n\tDRAGDROP_S_USEDEFAULTCURSORS                                              Handle        = 0x00040102\n\tDATA_S_SAMEFORMATETC                                                      Handle        = 0x00040130\n\tVIEW_S_ALREADY_FROZEN                                                     Handle        = 0x00040140\n\tCACHE_S_FORMATETC_NOTSUPPORTED                                            Handle        = 0x00040170\n\tCACHE_S_SAMECACHE                                                         Handle        = 0x00040171\n\tCACHE_S_SOMECACHES_NOTUPDATED                                             Handle        = 0x00040172\n\tOLEOBJ_S_INVALIDVERB                                                      Handle        = 0x00040180\n\tOLEOBJ_S_CANNOT_DOVERB_NOW                                                Handle        = 0x00040181\n\tOLEOBJ_S_INVALIDHWND                                                      Handle        = 0x00040182\n\tINPLACE_S_TRUNCATED                                                       Handle        = 0x000401A0\n\tCONVERT10_S_NO_PRESENTATION                                               Handle        = 0x000401C0\n\tMK_S_REDUCED_TO_SELF                                                      Handle        = 0x000401E2\n\tMK_S_ME                                                                   Handle        = 0x000401E4\n\tMK_S_HIM                                                                  Handle        = 0x000401E5\n\tMK_S_US                                                                   Handle        = 0x000401E6\n\tMK_S_MONIKERALREADYREGISTERED                                             Handle        = 0x000401E7\n\tSCHED_S_TASK_READY                                                        Handle        = 0x00041300\n\tSCHED_S_TASK_RUNNING                                                      Handle        = 0x00041301\n\tSCHED_S_TASK_DISABLED                                                     Handle        = 0x00041302\n\tSCHED_S_TASK_HAS_NOT_RUN                                                  Handle        = 0x00041303\n\tSCHED_S_TASK_NO_MORE_RUNS                                                 Handle        = 0x00041304\n\tSCHED_S_TASK_NOT_SCHEDULED                                                Handle        = 0x00041305\n\tSCHED_S_TASK_TERMINATED                                                   Handle        = 0x00041306\n\tSCHED_S_TASK_NO_VALID_TRIGGERS                                            Handle        = 0x00041307\n\tSCHED_S_EVENT_TRIGGER                                                     Handle        = 0x00041308\n\tSCHED_E_TRIGGER_NOT_FOUND                                                 Handle        = 0x80041309\n\tSCHED_E_TASK_NOT_READY                                                    Handle        = 0x8004130A\n\tSCHED_E_TASK_NOT_RUNNING                                                  Handle        = 0x8004130B\n\tSCHED_E_SERVICE_NOT_INSTALLED                                             Handle        = 0x8004130C\n\tSCHED_E_CANNOT_OPEN_TASK                                                  Handle        = 0x8004130D\n\tSCHED_E_INVALID_TASK                                                      Handle        = 0x8004130E\n\tSCHED_E_ACCOUNT_INFORMATION_NOT_SET                                       Handle        = 0x8004130F\n\tSCHED_E_ACCOUNT_NAME_NOT_FOUND                                            Handle        = 0x80041310\n\tSCHED_E_ACCOUNT_DBASE_CORRUPT                                             Handle        = 0x80041311\n\tSCHED_E_NO_SECURITY_SERVICES                                              Handle        = 0x80041312\n\tSCHED_E_UNKNOWN_OBJECT_VERSION                                            Handle        = 0x80041313\n\tSCHED_E_UNSUPPORTED_ACCOUNT_OPTION                                        Handle        = 0x80041314\n\tSCHED_E_SERVICE_NOT_RUNNING                                               Handle        = 0x80041315\n\tSCHED_E_UNEXPECTEDNODE                                                    Handle        = 0x80041316\n\tSCHED_E_NAMESPACE                                                         Handle        = 0x80041317\n\tSCHED_E_INVALIDVALUE                                                      Handle        = 0x80041318\n\tSCHED_E_MISSINGNODE                                                       Handle        = 0x80041319\n\tSCHED_E_MALFORMEDXML                                                      Handle        = 0x8004131A\n\tSCHED_S_SOME_TRIGGERS_FAILED                                              Handle        = 0x0004131B\n\tSCHED_S_BATCH_LOGON_PROBLEM                                               Handle        = 0x0004131C\n\tSCHED_E_TOO_MANY_NODES                                                    Handle        = 0x8004131D\n\tSCHED_E_PAST_END_BOUNDARY                                                 Handle        = 0x8004131E\n\tSCHED_E_ALREADY_RUNNING                                                   Handle        = 0x8004131F\n\tSCHED_E_USER_NOT_LOGGED_ON                                                Handle        = 0x80041320\n\tSCHED_E_INVALID_TASK_HASH                                                 Handle        = 0x80041321\n\tSCHED_E_SERVICE_NOT_AVAILABLE                                             Handle        = 0x80041322\n\tSCHED_E_SERVICE_TOO_BUSY                                                  Handle        = 0x80041323\n\tSCHED_E_TASK_ATTEMPTED                                                    Handle        = 0x80041324\n\tSCHED_S_TASK_QUEUED                                                       Handle        = 0x00041325\n\tSCHED_E_TASK_DISABLED                                                     Handle        = 0x80041326\n\tSCHED_E_TASK_NOT_V1_COMPAT                                                Handle        = 0x80041327\n\tSCHED_E_START_ON_DEMAND                                                   Handle        = 0x80041328\n\tSCHED_E_TASK_NOT_UBPM_COMPAT                                              Handle        = 0x80041329\n\tSCHED_E_DEPRECATED_FEATURE_USED                                           Handle        = 0x80041330\n\tCO_E_CLASS_CREATE_FAILED                                                  Handle        = 0x80080001\n\tCO_E_SCM_ERROR                                                            Handle        = 0x80080002\n\tCO_E_SCM_RPC_FAILURE                                                      Handle        = 0x80080003\n\tCO_E_BAD_PATH                                                             Handle        = 0x80080004\n\tCO_E_SERVER_EXEC_FAILURE                                                  Handle        = 0x80080005\n\tCO_E_OBJSRV_RPC_FAILURE                                                   Handle        = 0x80080006\n\tMK_E_NO_NORMALIZED                                                        Handle        = 0x80080007\n\tCO_E_SERVER_STOPPING                                                      Handle        = 0x80080008\n\tMEM_E_INVALID_ROOT                                                        Handle        = 0x80080009\n\tMEM_E_INVALID_LINK                                                        Handle        = 0x80080010\n\tMEM_E_INVALID_SIZE                                                        Handle        = 0x80080011\n\tCO_S_NOTALLINTERFACES                                                     Handle        = 0x00080012\n\tCO_S_MACHINENAMENOTFOUND                                                  Handle        = 0x00080013\n\tCO_E_MISSING_DISPLAYNAME                                                  Handle        = 0x80080015\n\tCO_E_RUNAS_VALUE_MUST_BE_AAA                                              Handle        = 0x80080016\n\tCO_E_ELEVATION_DISABLED                                                   Handle        = 0x80080017\n\tAPPX_E_PACKAGING_INTERNAL                                                 Handle        = 0x80080200\n\tAPPX_E_INTERLEAVING_NOT_ALLOWED                                           Handle        = 0x80080201\n\tAPPX_E_RELATIONSHIPS_NOT_ALLOWED                                          Handle        = 0x80080202\n\tAPPX_E_MISSING_REQUIRED_FILE                                              Handle        = 0x80080203\n\tAPPX_E_INVALID_MANIFEST                                                   Handle        = 0x80080204\n\tAPPX_E_INVALID_BLOCKMAP                                                   Handle        = 0x80080205\n\tAPPX_E_CORRUPT_CONTENT                                                    Handle        = 0x80080206\n\tAPPX_E_BLOCK_HASH_INVALID                                                 Handle        = 0x80080207\n\tAPPX_E_REQUESTED_RANGE_TOO_LARGE                                          Handle        = 0x80080208\n\tAPPX_E_INVALID_SIP_CLIENT_DATA                                            Handle        = 0x80080209\n\tAPPX_E_INVALID_KEY_INFO                                                   Handle        = 0x8008020A\n\tAPPX_E_INVALID_CONTENTGROUPMAP                                            Handle        = 0x8008020B\n\tAPPX_E_INVALID_APPINSTALLER                                               Handle        = 0x8008020C\n\tAPPX_E_DELTA_BASELINE_VERSION_MISMATCH                                    Handle        = 0x8008020D\n\tAPPX_E_DELTA_PACKAGE_MISSING_FILE                                         Handle        = 0x8008020E\n\tAPPX_E_INVALID_DELTA_PACKAGE                                              Handle        = 0x8008020F\n\tAPPX_E_DELTA_APPENDED_PACKAGE_NOT_ALLOWED                                 Handle        = 0x80080210\n\tAPPX_E_INVALID_PACKAGING_LAYOUT                                           Handle        = 0x80080211\n\tAPPX_E_INVALID_PACKAGESIGNCONFIG                                          Handle        = 0x80080212\n\tAPPX_E_RESOURCESPRI_NOT_ALLOWED                                           Handle        = 0x80080213\n\tAPPX_E_FILE_COMPRESSION_MISMATCH                                          Handle        = 0x80080214\n\tAPPX_E_INVALID_PAYLOAD_PACKAGE_EXTENSION                                  Handle        = 0x80080215\n\tAPPX_E_INVALID_ENCRYPTION_EXCLUSION_FILE_LIST                             Handle        = 0x80080216\n\tBT_E_SPURIOUS_ACTIVATION                                                  Handle        = 0x80080300\n\tDISP_E_UNKNOWNINTERFACE                                                   Handle        = 0x80020001\n\tDISP_E_MEMBERNOTFOUND                                                     Handle        = 0x80020003\n\tDISP_E_PARAMNOTFOUND                                                      Handle        = 0x80020004\n\tDISP_E_TYPEMISMATCH                                                       Handle        = 0x80020005\n\tDISP_E_UNKNOWNNAME                                                        Handle        = 0x80020006\n\tDISP_E_NONAMEDARGS                                                        Handle        = 0x80020007\n\tDISP_E_BADVARTYPE                                                         Handle        = 0x80020008\n\tDISP_E_EXCEPTION                                                          Handle        = 0x80020009\n\tDISP_E_OVERFLOW                                                           Handle        = 0x8002000A\n\tDISP_E_BADINDEX                                                           Handle        = 0x8002000B\n\tDISP_E_UNKNOWNLCID                                                        Handle        = 0x8002000C\n\tDISP_E_ARRAYISLOCKED                                                      Handle        = 0x8002000D\n\tDISP_E_BADPARAMCOUNT                                                      Handle        = 0x8002000E\n\tDISP_E_PARAMNOTOPTIONAL                                                   Handle        = 0x8002000F\n\tDISP_E_BADCALLEE                                                          Handle        = 0x80020010\n\tDISP_E_NOTACOLLECTION                                                     Handle        = 0x80020011\n\tDISP_E_DIVBYZERO                                                          Handle        = 0x80020012\n\tDISP_E_BUFFERTOOSMALL                                                     Handle        = 0x80020013\n\tTYPE_E_BUFFERTOOSMALL                                                     Handle        = 0x80028016\n\tTYPE_E_FIELDNOTFOUND                                                      Handle        = 0x80028017\n\tTYPE_E_INVDATAREAD                                                        Handle        = 0x80028018\n\tTYPE_E_UNSUPFORMAT                                                        Handle        = 0x80028019\n\tTYPE_E_REGISTRYACCESS                                                     Handle        = 0x8002801C\n\tTYPE_E_LIBNOTREGISTERED                                                   Handle        = 0x8002801D\n\tTYPE_E_UNDEFINEDTYPE                                                      Handle        = 0x80028027\n\tTYPE_E_QUALIFIEDNAMEDISALLOWED                                            Handle        = 0x80028028\n\tTYPE_E_INVALIDSTATE                                                       Handle        = 0x80028029\n\tTYPE_E_WRONGTYPEKIND                                                      Handle        = 0x8002802A\n\tTYPE_E_ELEMENTNOTFOUND                                                    Handle        = 0x8002802B\n\tTYPE_E_AMBIGUOUSNAME                                                      Handle        = 0x8002802C\n\tTYPE_E_NAMECONFLICT                                                       Handle        = 0x8002802D\n\tTYPE_E_UNKNOWNLCID                                                        Handle        = 0x8002802E\n\tTYPE_E_DLLFUNCTIONNOTFOUND                                                Handle        = 0x8002802F\n\tTYPE_E_BADMODULEKIND                                                      Handle        = 0x800288BD\n\tTYPE_E_SIZETOOBIG                                                         Handle        = 0x800288C5\n\tTYPE_E_DUPLICATEID                                                        Handle        = 0x800288C6\n\tTYPE_E_INVALIDID                                                          Handle        = 0x800288CF\n\tTYPE_E_TYPEMISMATCH                                                       Handle        = 0x80028CA0\n\tTYPE_E_OUTOFBOUNDS                                                        Handle        = 0x80028CA1\n\tTYPE_E_IOERROR                                                            Handle        = 0x80028CA2\n\tTYPE_E_CANTCREATETMPFILE                                                  Handle        = 0x80028CA3\n\tTYPE_E_CANTLOADLIBRARY                                                    Handle        = 0x80029C4A\n\tTYPE_E_INCONSISTENTPROPFUNCS                                              Handle        = 0x80029C83\n\tTYPE_E_CIRCULARTYPE                                                       Handle        = 0x80029C84\n\tSTG_E_INVALIDFUNCTION                                                     Handle        = 0x80030001\n\tSTG_E_FILENOTFOUND                                                        Handle        = 0x80030002\n\tSTG_E_PATHNOTFOUND                                                        Handle        = 0x80030003\n\tSTG_E_TOOMANYOPENFILES                                                    Handle        = 0x80030004\n\tSTG_E_ACCESSDENIED                                                        Handle        = 0x80030005\n\tSTG_E_INVALIDHANDLE                                                       Handle        = 0x80030006\n\tSTG_E_INSUFFICIENTMEMORY                                                  Handle        = 0x80030008\n\tSTG_E_INVALIDPOINTER                                                      Handle        = 0x80030009\n\tSTG_E_NOMOREFILES                                                         Handle        = 0x80030012\n\tSTG_E_DISKISWRITEPROTECTED                                                Handle        = 0x80030013\n\tSTG_E_SEEKERROR                                                           Handle        = 0x80030019\n\tSTG_E_WRITEFAULT                                                          Handle        = 0x8003001D\n\tSTG_E_READFAULT                                                           Handle        = 0x8003001E\n\tSTG_E_SHAREVIOLATION                                                      Handle        = 0x80030020\n\tSTG_E_LOCKVIOLATION                                                       Handle        = 0x80030021\n\tSTG_E_FILEALREADYEXISTS                                                   Handle        = 0x80030050\n\tSTG_E_INVALIDPARAMETER                                                    Handle        = 0x80030057\n\tSTG_E_MEDIUMFULL                                                          Handle        = 0x80030070\n\tSTG_E_PROPSETMISMATCHED                                                   Handle        = 0x800300F0\n\tSTG_E_ABNORMALAPIEXIT                                                     Handle        = 0x800300FA\n\tSTG_E_INVALIDHEADER                                                       Handle        = 0x800300FB\n\tSTG_E_INVALIDNAME                                                         Handle        = 0x800300FC\n\tSTG_E_UNKNOWN                                                             Handle        = 0x800300FD\n\tSTG_E_UNIMPLEMENTEDFUNCTION                                               Handle        = 0x800300FE\n\tSTG_E_INVALIDFLAG                                                         Handle        = 0x800300FF\n\tSTG_E_INUSE                                                               Handle        = 0x80030100\n\tSTG_E_NOTCURRENT                                                          Handle        = 0x80030101\n\tSTG_E_REVERTED                                                            Handle        = 0x80030102\n\tSTG_E_CANTSAVE                                                            Handle        = 0x80030103\n\tSTG_E_OLDFORMAT                                                           Handle        = 0x80030104\n\tSTG_E_OLDDLL                                                              Handle        = 0x80030105\n\tSTG_E_SHAREREQUIRED                                                       Handle        = 0x80030106\n\tSTG_E_NOTFILEBASEDSTORAGE                                                 Handle        = 0x80030107\n\tSTG_E_EXTANTMARSHALLINGS                                                  Handle        = 0x80030108\n\tSTG_E_DOCFILECORRUPT                                                      Handle        = 0x80030109\n\tSTG_E_BADBASEADDRESS                                                      Handle        = 0x80030110\n\tSTG_E_DOCFILETOOLARGE                                                     Handle        = 0x80030111\n\tSTG_E_NOTSIMPLEFORMAT                                                     Handle        = 0x80030112\n\tSTG_E_INCOMPLETE                                                          Handle        = 0x80030201\n\tSTG_E_TERMINATED                                                          Handle        = 0x80030202\n\tSTG_S_CONVERTED                                                           Handle        = 0x00030200\n\tSTG_S_BLOCK                                                               Handle        = 0x00030201\n\tSTG_S_RETRYNOW                                                            Handle        = 0x00030202\n\tSTG_S_MONITORING                                                          Handle        = 0x00030203\n\tSTG_S_MULTIPLEOPENS                                                       Handle        = 0x00030204\n\tSTG_S_CONSOLIDATIONFAILED                                                 Handle        = 0x00030205\n\tSTG_S_CANNOTCONSOLIDATE                                                   Handle        = 0x00030206\n\tSTG_S_POWER_CYCLE_REQUIRED                                                Handle        = 0x00030207\n\tSTG_E_FIRMWARE_SLOT_INVALID                                               Handle        = 0x80030208\n\tSTG_E_FIRMWARE_IMAGE_INVALID                                              Handle        = 0x80030209\n\tSTG_E_DEVICE_UNRESPONSIVE                                                 Handle        = 0x8003020A\n\tSTG_E_STATUS_COPY_PROTECTION_FAILURE                                      Handle        = 0x80030305\n\tSTG_E_CSS_AUTHENTICATION_FAILURE                                          Handle        = 0x80030306\n\tSTG_E_CSS_KEY_NOT_PRESENT                                                 Handle        = 0x80030307\n\tSTG_E_CSS_KEY_NOT_ESTABLISHED                                             Handle        = 0x80030308\n\tSTG_E_CSS_SCRAMBLED_SECTOR                                                Handle        = 0x80030309\n\tSTG_E_CSS_REGION_MISMATCH                                                 Handle        = 0x8003030A\n\tSTG_E_RESETS_EXHAUSTED                                                    Handle        = 0x8003030B\n\tRPC_E_CALL_REJECTED                                                       Handle        = 0x80010001\n\tRPC_E_CALL_CANCELED                                                       Handle        = 0x80010002\n\tRPC_E_CANTPOST_INSENDCALL                                                 Handle        = 0x80010003\n\tRPC_E_CANTCALLOUT_INASYNCCALL                                             Handle        = 0x80010004\n\tRPC_E_CANTCALLOUT_INEXTERNALCALL                                          Handle        = 0x80010005\n\tRPC_E_CONNECTION_TERMINATED                                               Handle        = 0x80010006\n\tRPC_E_SERVER_DIED                                                         Handle        = 0x80010007\n\tRPC_E_CLIENT_DIED                                                         Handle        = 0x80010008\n\tRPC_E_INVALID_DATAPACKET                                                  Handle        = 0x80010009\n\tRPC_E_CANTTRANSMIT_CALL                                                   Handle        = 0x8001000A\n\tRPC_E_CLIENT_CANTMARSHAL_DATA                                             Handle        = 0x8001000B\n\tRPC_E_CLIENT_CANTUNMARSHAL_DATA                                           Handle        = 0x8001000C\n\tRPC_E_SERVER_CANTMARSHAL_DATA                                             Handle        = 0x8001000D\n\tRPC_E_SERVER_CANTUNMARSHAL_DATA                                           Handle        = 0x8001000E\n\tRPC_E_INVALID_DATA                                                        Handle        = 0x8001000F\n\tRPC_E_INVALID_PARAMETER                                                   Handle        = 0x80010010\n\tRPC_E_CANTCALLOUT_AGAIN                                                   Handle        = 0x80010011\n\tRPC_E_SERVER_DIED_DNE                                                     Handle        = 0x80010012\n\tRPC_E_SYS_CALL_FAILED                                                     Handle        = 0x80010100\n\tRPC_E_OUT_OF_RESOURCES                                                    Handle        = 0x80010101\n\tRPC_E_ATTEMPTED_MULTITHREAD                                               Handle        = 0x80010102\n\tRPC_E_NOT_REGISTERED                                                      Handle        = 0x80010103\n\tRPC_E_FAULT                                                               Handle        = 0x80010104\n\tRPC_E_SERVERFAULT                                                         Handle        = 0x80010105\n\tRPC_E_CHANGED_MODE                                                        Handle        = 0x80010106\n\tRPC_E_INVALIDMETHOD                                                       Handle        = 0x80010107\n\tRPC_E_DISCONNECTED                                                        Handle        = 0x80010108\n\tRPC_E_RETRY                                                               Handle        = 0x80010109\n\tRPC_E_SERVERCALL_RETRYLATER                                               Handle        = 0x8001010A\n\tRPC_E_SERVERCALL_REJECTED                                                 Handle        = 0x8001010B\n\tRPC_E_INVALID_CALLDATA                                                    Handle        = 0x8001010C\n\tRPC_E_CANTCALLOUT_ININPUTSYNCCALL                                         Handle        = 0x8001010D\n\tRPC_E_WRONG_THREAD                                                        Handle        = 0x8001010E\n\tRPC_E_THREAD_NOT_INIT                                                     Handle        = 0x8001010F\n\tRPC_E_VERSION_MISMATCH                                                    Handle        = 0x80010110\n\tRPC_E_INVALID_HEADER                                                      Handle        = 0x80010111\n\tRPC_E_INVALID_EXTENSION                                                   Handle        = 0x80010112\n\tRPC_E_INVALID_IPID                                                        Handle        = 0x80010113\n\tRPC_E_INVALID_OBJECT                                                      Handle        = 0x80010114\n\tRPC_S_CALLPENDING                                                         Handle        = 0x80010115\n\tRPC_S_WAITONTIMER                                                         Handle        = 0x80010116\n\tRPC_E_CALL_COMPLETE                                                       Handle        = 0x80010117\n\tRPC_E_UNSECURE_CALL                                                       Handle        = 0x80010118\n\tRPC_E_TOO_LATE                                                            Handle        = 0x80010119\n\tRPC_E_NO_GOOD_SECURITY_PACKAGES                                           Handle        = 0x8001011A\n\tRPC_E_ACCESS_DENIED                                                       Handle        = 0x8001011B\n\tRPC_E_REMOTE_DISABLED                                                     Handle        = 0x8001011C\n\tRPC_E_INVALID_OBJREF                                                      Handle        = 0x8001011D\n\tRPC_E_NO_CONTEXT                                                          Handle        = 0x8001011E\n\tRPC_E_TIMEOUT                                                             Handle        = 0x8001011F\n\tRPC_E_NO_SYNC                                                             Handle        = 0x80010120\n\tRPC_E_FULLSIC_REQUIRED                                                    Handle        = 0x80010121\n\tRPC_E_INVALID_STD_NAME                                                    Handle        = 0x80010122\n\tCO_E_FAILEDTOIMPERSONATE                                                  Handle        = 0x80010123\n\tCO_E_FAILEDTOGETSECCTX                                                    Handle        = 0x80010124\n\tCO_E_FAILEDTOOPENTHREADTOKEN                                              Handle        = 0x80010125\n\tCO_E_FAILEDTOGETTOKENINFO                                                 Handle        = 0x80010126\n\tCO_E_TRUSTEEDOESNTMATCHCLIENT                                             Handle        = 0x80010127\n\tCO_E_FAILEDTOQUERYCLIENTBLANKET                                           Handle        = 0x80010128\n\tCO_E_FAILEDTOSETDACL                                                      Handle        = 0x80010129\n\tCO_E_ACCESSCHECKFAILED                                                    Handle        = 0x8001012A\n\tCO_E_NETACCESSAPIFAILED                                                   Handle        = 0x8001012B\n\tCO_E_WRONGTRUSTEENAMESYNTAX                                               Handle        = 0x8001012C\n\tCO_E_INVALIDSID                                                           Handle        = 0x8001012D\n\tCO_E_CONVERSIONFAILED                                                     Handle        = 0x8001012E\n\tCO_E_NOMATCHINGSIDFOUND                                                   Handle        = 0x8001012F\n\tCO_E_LOOKUPACCSIDFAILED                                                   Handle        = 0x80010130\n\tCO_E_NOMATCHINGNAMEFOUND                                                  Handle        = 0x80010131\n\tCO_E_LOOKUPACCNAMEFAILED                                                  Handle        = 0x80010132\n\tCO_E_SETSERLHNDLFAILED                                                    Handle        = 0x80010133\n\tCO_E_FAILEDTOGETWINDIR                                                    Handle        = 0x80010134\n\tCO_E_PATHTOOLONG                                                          Handle        = 0x80010135\n\tCO_E_FAILEDTOGENUUID                                                      Handle        = 0x80010136\n\tCO_E_FAILEDTOCREATEFILE                                                   Handle        = 0x80010137\n\tCO_E_FAILEDTOCLOSEHANDLE                                                  Handle        = 0x80010138\n\tCO_E_EXCEEDSYSACLLIMIT                                                    Handle        = 0x80010139\n\tCO_E_ACESINWRONGORDER                                                     Handle        = 0x8001013A\n\tCO_E_INCOMPATIBLESTREAMVERSION                                            Handle        = 0x8001013B\n\tCO_E_FAILEDTOOPENPROCESSTOKEN                                             Handle        = 0x8001013C\n\tCO_E_DECODEFAILED                                                         Handle        = 0x8001013D\n\tCO_E_ACNOTINITIALIZED                                                     Handle        = 0x8001013F\n\tCO_E_CANCEL_DISABLED                                                      Handle        = 0x80010140\n\tRPC_E_UNEXPECTED                                                          Handle        = 0x8001FFFF\n\tERROR_AUDITING_DISABLED                                                   Handle        = 0xC0090001\n\tERROR_ALL_SIDS_FILTERED                                                   Handle        = 0xC0090002\n\tERROR_BIZRULES_NOT_ENABLED                                                Handle        = 0xC0090003\n\tNTE_BAD_UID                                                               Handle        = 0x80090001\n\tNTE_BAD_HASH                                                              Handle        = 0x80090002\n\tNTE_BAD_KEY                                                               Handle        = 0x80090003\n\tNTE_BAD_LEN                                                               Handle        = 0x80090004\n\tNTE_BAD_DATA                                                              Handle        = 0x80090005\n\tNTE_BAD_SIGNATURE                                                         Handle        = 0x80090006\n\tNTE_BAD_VER                                                               Handle        = 0x80090007\n\tNTE_BAD_ALGID                                                             Handle        = 0x80090008\n\tNTE_BAD_FLAGS                                                             Handle        = 0x80090009\n\tNTE_BAD_TYPE                                                              Handle        = 0x8009000A\n\tNTE_BAD_KEY_STATE                                                         Handle        = 0x8009000B\n\tNTE_BAD_HASH_STATE                                                        Handle        = 0x8009000C\n\tNTE_NO_KEY                                                                Handle        = 0x8009000D\n\tNTE_NO_MEMORY                                                             Handle        = 0x8009000E\n\tNTE_EXISTS                                                                Handle        = 0x8009000F\n\tNTE_PERM                                                                  Handle        = 0x80090010\n\tNTE_NOT_FOUND                                                             Handle        = 0x80090011\n\tNTE_DOUBLE_ENCRYPT                                                        Handle        = 0x80090012\n\tNTE_BAD_PROVIDER                                                          Handle        = 0x80090013\n\tNTE_BAD_PROV_TYPE                                                         Handle        = 0x80090014\n\tNTE_BAD_PUBLIC_KEY                                                        Handle        = 0x80090015\n\tNTE_BAD_KEYSET                                                            Handle        = 0x80090016\n\tNTE_PROV_TYPE_NOT_DEF                                                     Handle        = 0x80090017\n\tNTE_PROV_TYPE_ENTRY_BAD                                                   Handle        = 0x80090018\n\tNTE_KEYSET_NOT_DEF                                                        Handle        = 0x80090019\n\tNTE_KEYSET_ENTRY_BAD                                                      Handle        = 0x8009001A\n\tNTE_PROV_TYPE_NO_MATCH                                                    Handle        = 0x8009001B\n\tNTE_SIGNATURE_FILE_BAD                                                    Handle        = 0x8009001C\n\tNTE_PROVIDER_DLL_FAIL                                                     Handle        = 0x8009001D\n\tNTE_PROV_DLL_NOT_FOUND                                                    Handle        = 0x8009001E\n\tNTE_BAD_KEYSET_PARAM                                                      Handle        = 0x8009001F\n\tNTE_FAIL                                                                  Handle        = 0x80090020\n\tNTE_SYS_ERR                                                               Handle        = 0x80090021\n\tNTE_SILENT_CONTEXT                                                        Handle        = 0x80090022\n\tNTE_TOKEN_KEYSET_STORAGE_FULL                                             Handle        = 0x80090023\n\tNTE_TEMPORARY_PROFILE                                                     Handle        = 0x80090024\n\tNTE_FIXEDPARAMETER                                                        Handle        = 0x80090025\n\tNTE_INVALID_HANDLE                                                        Handle        = 0x80090026\n\tNTE_INVALID_PARAMETER                                                     Handle        = 0x80090027\n\tNTE_BUFFER_TOO_SMALL                                                      Handle        = 0x80090028\n\tNTE_NOT_SUPPORTED                                                         Handle        = 0x80090029\n\tNTE_NO_MORE_ITEMS                                                         Handle        = 0x8009002A\n\tNTE_BUFFERS_OVERLAP                                                       Handle        = 0x8009002B\n\tNTE_DECRYPTION_FAILURE                                                    Handle        = 0x8009002C\n\tNTE_INTERNAL_ERROR                                                        Handle        = 0x8009002D\n\tNTE_UI_REQUIRED                                                           Handle        = 0x8009002E\n\tNTE_HMAC_NOT_SUPPORTED                                                    Handle        = 0x8009002F\n\tNTE_DEVICE_NOT_READY                                                      Handle        = 0x80090030\n\tNTE_AUTHENTICATION_IGNORED                                                Handle        = 0x80090031\n\tNTE_VALIDATION_FAILED                                                     Handle        = 0x80090032\n\tNTE_INCORRECT_PASSWORD                                                    Handle        = 0x80090033\n\tNTE_ENCRYPTION_FAILURE                                                    Handle        = 0x80090034\n\tNTE_DEVICE_NOT_FOUND                                                      Handle        = 0x80090035\n\tNTE_USER_CANCELLED                                                        Handle        = 0x80090036\n\tNTE_PASSWORD_CHANGE_REQUIRED                                              Handle        = 0x80090037\n\tNTE_NOT_ACTIVE_CONSOLE                                                    Handle        = 0x80090038\n\tSEC_E_INSUFFICIENT_MEMORY                                                 Handle        = 0x80090300\n\tSEC_E_INVALID_HANDLE                                                      Handle        = 0x80090301\n\tSEC_E_UNSUPPORTED_FUNCTION                                                Handle        = 0x80090302\n\tSEC_E_TARGET_UNKNOWN                                                      Handle        = 0x80090303\n\tSEC_E_INTERNAL_ERROR                                                      Handle        = 0x80090304\n\tSEC_E_SECPKG_NOT_FOUND                                                    Handle        = 0x80090305\n\tSEC_E_NOT_OWNER                                                           Handle        = 0x80090306\n\tSEC_E_CANNOT_INSTALL                                                      Handle        = 0x80090307\n\tSEC_E_INVALID_TOKEN                                                       Handle        = 0x80090308\n\tSEC_E_CANNOT_PACK                                                         Handle        = 0x80090309\n\tSEC_E_QOP_NOT_SUPPORTED                                                   Handle        = 0x8009030A\n\tSEC_E_NO_IMPERSONATION                                                    Handle        = 0x8009030B\n\tSEC_E_LOGON_DENIED                                                        Handle        = 0x8009030C\n\tSEC_E_UNKNOWN_CREDENTIALS                                                 Handle        = 0x8009030D\n\tSEC_E_NO_CREDENTIALS                                                      Handle        = 0x8009030E\n\tSEC_E_MESSAGE_ALTERED                                                     Handle        = 0x8009030F\n\tSEC_E_OUT_OF_SEQUENCE                                                     Handle        = 0x80090310\n\tSEC_E_NO_AUTHENTICATING_AUTHORITY                                         Handle        = 0x80090311\n\tSEC_I_CONTINUE_NEEDED                                                     Handle        = 0x00090312\n\tSEC_I_COMPLETE_NEEDED                                                     Handle        = 0x00090313\n\tSEC_I_COMPLETE_AND_CONTINUE                                               Handle        = 0x00090314\n\tSEC_I_LOCAL_LOGON                                                         Handle        = 0x00090315\n\tSEC_I_GENERIC_EXTENSION_RECEIVED                                          Handle        = 0x00090316\n\tSEC_E_BAD_PKGID                                                           Handle        = 0x80090316\n\tSEC_E_CONTEXT_EXPIRED                                                     Handle        = 0x80090317\n\tSEC_I_CONTEXT_EXPIRED                                                     Handle        = 0x00090317\n\tSEC_E_INCOMPLETE_MESSAGE                                                  Handle        = 0x80090318\n\tSEC_E_INCOMPLETE_CREDENTIALS                                              Handle        = 0x80090320\n\tSEC_E_BUFFER_TOO_SMALL                                                    Handle        = 0x80090321\n\tSEC_I_INCOMPLETE_CREDENTIALS                                              Handle        = 0x00090320\n\tSEC_I_RENEGOTIATE                                                         Handle        = 0x00090321\n\tSEC_E_WRONG_PRINCIPAL                                                     Handle        = 0x80090322\n\tSEC_I_NO_LSA_CONTEXT                                                      Handle        = 0x00090323\n\tSEC_E_TIME_SKEW                                                           Handle        = 0x80090324\n\tSEC_E_UNTRUSTED_ROOT                                                      Handle        = 0x80090325\n\tSEC_E_ILLEGAL_MESSAGE                                                     Handle        = 0x80090326\n\tSEC_E_CERT_UNKNOWN                                                        Handle        = 0x80090327\n\tSEC_E_CERT_EXPIRED                                                        Handle        = 0x80090328\n\tSEC_E_ENCRYPT_FAILURE                                                     Handle        = 0x80090329\n\tSEC_E_DECRYPT_FAILURE                                                     Handle        = 0x80090330\n\tSEC_E_ALGORITHM_MISMATCH                                                  Handle        = 0x80090331\n\tSEC_E_SECURITY_QOS_FAILED                                                 Handle        = 0x80090332\n\tSEC_E_UNFINISHED_CONTEXT_DELETED                                          Handle        = 0x80090333\n\tSEC_E_NO_TGT_REPLY                                                        Handle        = 0x80090334\n\tSEC_E_NO_IP_ADDRESSES                                                     Handle        = 0x80090335\n\tSEC_E_WRONG_CREDENTIAL_HANDLE                                             Handle        = 0x80090336\n\tSEC_E_CRYPTO_SYSTEM_INVALID                                               Handle        = 0x80090337\n\tSEC_E_MAX_REFERRALS_EXCEEDED                                              Handle        = 0x80090338\n\tSEC_E_MUST_BE_KDC                                                         Handle        = 0x80090339\n\tSEC_E_STRONG_CRYPTO_NOT_SUPPORTED                                         Handle        = 0x8009033A\n\tSEC_E_TOO_MANY_PRINCIPALS                                                 Handle        = 0x8009033B\n\tSEC_E_NO_PA_DATA                                                          Handle        = 0x8009033C\n\tSEC_E_PKINIT_NAME_MISMATCH                                                Handle        = 0x8009033D\n\tSEC_E_SMARTCARD_LOGON_REQUIRED                                            Handle        = 0x8009033E\n\tSEC_E_SHUTDOWN_IN_PROGRESS                                                Handle        = 0x8009033F\n\tSEC_E_KDC_INVALID_REQUEST                                                 Handle        = 0x80090340\n\tSEC_E_KDC_UNABLE_TO_REFER                                                 Handle        = 0x80090341\n\tSEC_E_KDC_UNKNOWN_ETYPE                                                   Handle        = 0x80090342\n\tSEC_E_UNSUPPORTED_PREAUTH                                                 Handle        = 0x80090343\n\tSEC_E_DELEGATION_REQUIRED                                                 Handle        = 0x80090345\n\tSEC_E_BAD_BINDINGS                                                        Handle        = 0x80090346\n\tSEC_E_MULTIPLE_ACCOUNTS                                                   Handle        = 0x80090347\n\tSEC_E_NO_KERB_KEY                                                         Handle        = 0x80090348\n\tSEC_E_CERT_WRONG_USAGE                                                    Handle        = 0x80090349\n\tSEC_E_DOWNGRADE_DETECTED                                                  Handle        = 0x80090350\n\tSEC_E_SMARTCARD_CERT_REVOKED                                              Handle        = 0x80090351\n\tSEC_E_ISSUING_CA_UNTRUSTED                                                Handle        = 0x80090352\n\tSEC_E_REVOCATION_OFFLINE_C                                                Handle        = 0x80090353\n\tSEC_E_PKINIT_CLIENT_FAILURE                                               Handle        = 0x80090354\n\tSEC_E_SMARTCARD_CERT_EXPIRED                                              Handle        = 0x80090355\n\tSEC_E_NO_S4U_PROT_SUPPORT                                                 Handle        = 0x80090356\n\tSEC_E_CROSSREALM_DELEGATION_FAILURE                                       Handle        = 0x80090357\n\tSEC_E_REVOCATION_OFFLINE_KDC                                              Handle        = 0x80090358\n\tSEC_E_ISSUING_CA_UNTRUSTED_KDC                                            Handle        = 0x80090359\n\tSEC_E_KDC_CERT_EXPIRED                                                    Handle        = 0x8009035A\n\tSEC_E_KDC_CERT_REVOKED                                                    Handle        = 0x8009035B\n\tSEC_I_SIGNATURE_NEEDED                                                    Handle        = 0x0009035C\n\tSEC_E_INVALID_PARAMETER                                                   Handle        = 0x8009035D\n\tSEC_E_DELEGATION_POLICY                                                   Handle        = 0x8009035E\n\tSEC_E_POLICY_NLTM_ONLY                                                    Handle        = 0x8009035F\n\tSEC_I_NO_RENEGOTIATION                                                    Handle        = 0x00090360\n\tSEC_E_NO_CONTEXT                                                          Handle        = 0x80090361\n\tSEC_E_PKU2U_CERT_FAILURE                                                  Handle        = 0x80090362\n\tSEC_E_MUTUAL_AUTH_FAILED                                                  Handle        = 0x80090363\n\tSEC_I_MESSAGE_FRAGMENT                                                    Handle        = 0x00090364\n\tSEC_E_ONLY_HTTPS_ALLOWED                                                  Handle        = 0x80090365\n\tSEC_I_CONTINUE_NEEDED_MESSAGE_OK                                          Handle        = 0x00090366\n\tSEC_E_APPLICATION_PROTOCOL_MISMATCH                                       Handle        = 0x80090367\n\tSEC_I_ASYNC_CALL_PENDING                                                  Handle        = 0x00090368\n\tSEC_E_INVALID_UPN_NAME                                                    Handle        = 0x80090369\n\tSEC_E_EXT_BUFFER_TOO_SMALL                                                Handle        = 0x8009036A\n\tSEC_E_INSUFFICIENT_BUFFERS                                                Handle        = 0x8009036B\n\tSEC_E_NO_SPM                                                                            = SEC_E_INTERNAL_ERROR\n\tSEC_E_NOT_SUPPORTED                                                                     = SEC_E_UNSUPPORTED_FUNCTION\n\tCRYPT_E_MSG_ERROR                                                         Handle        = 0x80091001\n\tCRYPT_E_UNKNOWN_ALGO                                                      Handle        = 0x80091002\n\tCRYPT_E_OID_FORMAT                                                        Handle        = 0x80091003\n\tCRYPT_E_INVALID_MSG_TYPE                                                  Handle        = 0x80091004\n\tCRYPT_E_UNEXPECTED_ENCODING                                               Handle        = 0x80091005\n\tCRYPT_E_AUTH_ATTR_MISSING                                                 Handle        = 0x80091006\n\tCRYPT_E_HASH_VALUE                                                        Handle        = 0x80091007\n\tCRYPT_E_INVALID_INDEX                                                     Handle        = 0x80091008\n\tCRYPT_E_ALREADY_DECRYPTED                                                 Handle        = 0x80091009\n\tCRYPT_E_NOT_DECRYPTED                                                     Handle        = 0x8009100A\n\tCRYPT_E_RECIPIENT_NOT_FOUND                                               Handle        = 0x8009100B\n\tCRYPT_E_CONTROL_TYPE                                                      Handle        = 0x8009100C\n\tCRYPT_E_ISSUER_SERIALNUMBER                                               Handle        = 0x8009100D\n\tCRYPT_E_SIGNER_NOT_FOUND                                                  Handle        = 0x8009100E\n\tCRYPT_E_ATTRIBUTES_MISSING                                                Handle        = 0x8009100F\n\tCRYPT_E_STREAM_MSG_NOT_READY                                              Handle        = 0x80091010\n\tCRYPT_E_STREAM_INSUFFICIENT_DATA                                          Handle        = 0x80091011\n\tCRYPT_I_NEW_PROTECTION_REQUIRED                                           Handle        = 0x00091012\n\tCRYPT_E_BAD_LEN                                                           Handle        = 0x80092001\n\tCRYPT_E_BAD_ENCODE                                                        Handle        = 0x80092002\n\tCRYPT_E_FILE_ERROR                                                        Handle        = 0x80092003\n\tCRYPT_E_NOT_FOUND                                                         Handle        = 0x80092004\n\tCRYPT_E_EXISTS                                                            Handle        = 0x80092005\n\tCRYPT_E_NO_PROVIDER                                                       Handle        = 0x80092006\n\tCRYPT_E_SELF_SIGNED                                                       Handle        = 0x80092007\n\tCRYPT_E_DELETED_PREV                                                      Handle        = 0x80092008\n\tCRYPT_E_NO_MATCH                                                          Handle        = 0x80092009\n\tCRYPT_E_UNEXPECTED_MSG_TYPE                                               Handle        = 0x8009200A\n\tCRYPT_E_NO_KEY_PROPERTY                                                   Handle        = 0x8009200B\n\tCRYPT_E_NO_DECRYPT_CERT                                                   Handle        = 0x8009200C\n\tCRYPT_E_BAD_MSG                                                           Handle        = 0x8009200D\n\tCRYPT_E_NO_SIGNER                                                         Handle        = 0x8009200E\n\tCRYPT_E_PENDING_CLOSE                                                     Handle        = 0x8009200F\n\tCRYPT_E_REVOKED                                                           Handle        = 0x80092010\n\tCRYPT_E_NO_REVOCATION_DLL                                                 Handle        = 0x80092011\n\tCRYPT_E_NO_REVOCATION_CHECK                                               Handle        = 0x80092012\n\tCRYPT_E_REVOCATION_OFFLINE                                                Handle        = 0x80092013\n\tCRYPT_E_NOT_IN_REVOCATION_DATABASE                                        Handle        = 0x80092014\n\tCRYPT_E_INVALID_NUMERIC_STRING                                            Handle        = 0x80092020\n\tCRYPT_E_INVALID_PRINTABLE_STRING                                          Handle        = 0x80092021\n\tCRYPT_E_INVALID_IA5_STRING                                                Handle        = 0x80092022\n\tCRYPT_E_INVALID_X500_STRING                                               Handle        = 0x80092023\n\tCRYPT_E_NOT_CHAR_STRING                                                   Handle        = 0x80092024\n\tCRYPT_E_FILERESIZED                                                       Handle        = 0x80092025\n\tCRYPT_E_SECURITY_SETTINGS                                                 Handle        = 0x80092026\n\tCRYPT_E_NO_VERIFY_USAGE_DLL                                               Handle        = 0x80092027\n\tCRYPT_E_NO_VERIFY_USAGE_CHECK                                             Handle        = 0x80092028\n\tCRYPT_E_VERIFY_USAGE_OFFLINE                                              Handle        = 0x80092029\n\tCRYPT_E_NOT_IN_CTL                                                        Handle        = 0x8009202A\n\tCRYPT_E_NO_TRUSTED_SIGNER                                                 Handle        = 0x8009202B\n\tCRYPT_E_MISSING_PUBKEY_PARA                                               Handle        = 0x8009202C\n\tCRYPT_E_OBJECT_LOCATOR_OBJECT_NOT_FOUND                                   Handle        = 0x8009202D\n\tCRYPT_E_OSS_ERROR                                                         Handle        = 0x80093000\n\tOSS_MORE_BUF                                                              Handle        = 0x80093001\n\tOSS_NEGATIVE_UINTEGER                                                     Handle        = 0x80093002\n\tOSS_PDU_RANGE                                                             Handle        = 0x80093003\n\tOSS_MORE_INPUT                                                            Handle        = 0x80093004\n\tOSS_DATA_ERROR                                                            Handle        = 0x80093005\n\tOSS_BAD_ARG                                                               Handle        = 0x80093006\n\tOSS_BAD_VERSION                                                           Handle        = 0x80093007\n\tOSS_OUT_MEMORY                                                            Handle        = 0x80093008\n\tOSS_PDU_MISMATCH                                                          Handle        = 0x80093009\n\tOSS_LIMITED                                                               Handle        = 0x8009300A\n\tOSS_BAD_PTR                                                               Handle        = 0x8009300B\n\tOSS_BAD_TIME                                                              Handle        = 0x8009300C\n\tOSS_INDEFINITE_NOT_SUPPORTED                                              Handle        = 0x8009300D\n\tOSS_MEM_ERROR                                                             Handle        = 0x8009300E\n\tOSS_BAD_TABLE                                                             Handle        = 0x8009300F\n\tOSS_TOO_LONG                                                              Handle        = 0x80093010\n\tOSS_CONSTRAINT_VIOLATED                                                   Handle        = 0x80093011\n\tOSS_FATAL_ERROR                                                           Handle        = 0x80093012\n\tOSS_ACCESS_SERIALIZATION_ERROR                                            Handle        = 0x80093013\n\tOSS_NULL_TBL                                                              Handle        = 0x80093014\n\tOSS_NULL_FCN                                                              Handle        = 0x80093015\n\tOSS_BAD_ENCRULES                                                          Handle        = 0x80093016\n\tOSS_UNAVAIL_ENCRULES                                                      Handle        = 0x80093017\n\tOSS_CANT_OPEN_TRACE_WINDOW                                                Handle        = 0x80093018\n\tOSS_UNIMPLEMENTED                                                         Handle        = 0x80093019\n\tOSS_OID_DLL_NOT_LINKED                                                    Handle        = 0x8009301A\n\tOSS_CANT_OPEN_TRACE_FILE                                                  Handle        = 0x8009301B\n\tOSS_TRACE_FILE_ALREADY_OPEN                                               Handle        = 0x8009301C\n\tOSS_TABLE_MISMATCH                                                        Handle        = 0x8009301D\n\tOSS_TYPE_NOT_SUPPORTED                                                    Handle        = 0x8009301E\n\tOSS_REAL_DLL_NOT_LINKED                                                   Handle        = 0x8009301F\n\tOSS_REAL_CODE_NOT_LINKED                                                  Handle        = 0x80093020\n\tOSS_OUT_OF_RANGE                                                          Handle        = 0x80093021\n\tOSS_COPIER_DLL_NOT_LINKED                                                 Handle        = 0x80093022\n\tOSS_CONSTRAINT_DLL_NOT_LINKED                                             Handle        = 0x80093023\n\tOSS_COMPARATOR_DLL_NOT_LINKED                                             Handle        = 0x80093024\n\tOSS_COMPARATOR_CODE_NOT_LINKED                                            Handle        = 0x80093025\n\tOSS_MEM_MGR_DLL_NOT_LINKED                                                Handle        = 0x80093026\n\tOSS_PDV_DLL_NOT_LINKED                                                    Handle        = 0x80093027\n\tOSS_PDV_CODE_NOT_LINKED                                                   Handle        = 0x80093028\n\tOSS_API_DLL_NOT_LINKED                                                    Handle        = 0x80093029\n\tOSS_BERDER_DLL_NOT_LINKED                                                 Handle        = 0x8009302A\n\tOSS_PER_DLL_NOT_LINKED                                                    Handle        = 0x8009302B\n\tOSS_OPEN_TYPE_ERROR                                                       Handle        = 0x8009302C\n\tOSS_MUTEX_NOT_CREATED                                                     Handle        = 0x8009302D\n\tOSS_CANT_CLOSE_TRACE_FILE                                                 Handle        = 0x8009302E\n\tCRYPT_E_ASN1_ERROR                                                        Handle        = 0x80093100\n\tCRYPT_E_ASN1_INTERNAL                                                     Handle        = 0x80093101\n\tCRYPT_E_ASN1_EOD                                                          Handle        = 0x80093102\n\tCRYPT_E_ASN1_CORRUPT                                                      Handle        = 0x80093103\n\tCRYPT_E_ASN1_LARGE                                                        Handle        = 0x80093104\n\tCRYPT_E_ASN1_CONSTRAINT                                                   Handle        = 0x80093105\n\tCRYPT_E_ASN1_MEMORY                                                       Handle        = 0x80093106\n\tCRYPT_E_ASN1_OVERFLOW                                                     Handle        = 0x80093107\n\tCRYPT_E_ASN1_BADPDU                                                       Handle        = 0x80093108\n\tCRYPT_E_ASN1_BADARGS                                                      Handle        = 0x80093109\n\tCRYPT_E_ASN1_BADREAL                                                      Handle        = 0x8009310A\n\tCRYPT_E_ASN1_BADTAG                                                       Handle        = 0x8009310B\n\tCRYPT_E_ASN1_CHOICE                                                       Handle        = 0x8009310C\n\tCRYPT_E_ASN1_RULE                                                         Handle        = 0x8009310D\n\tCRYPT_E_ASN1_UTF8                                                         Handle        = 0x8009310E\n\tCRYPT_E_ASN1_PDU_TYPE                                                     Handle        = 0x80093133\n\tCRYPT_E_ASN1_NYI                                                          Handle        = 0x80093134\n\tCRYPT_E_ASN1_EXTENDED                                                     Handle        = 0x80093201\n\tCRYPT_E_ASN1_NOEOD                                                        Handle        = 0x80093202\n\tCERTSRV_E_BAD_REQUESTSUBJECT                                              Handle        = 0x80094001\n\tCERTSRV_E_NO_REQUEST                                                      Handle        = 0x80094002\n\tCERTSRV_E_BAD_REQUESTSTATUS                                               Handle        = 0x80094003\n\tCERTSRV_E_PROPERTY_EMPTY                                                  Handle        = 0x80094004\n\tCERTSRV_E_INVALID_CA_CERTIFICATE                                          Handle        = 0x80094005\n\tCERTSRV_E_SERVER_SUSPENDED                                                Handle        = 0x80094006\n\tCERTSRV_E_ENCODING_LENGTH                                                 Handle        = 0x80094007\n\tCERTSRV_E_ROLECONFLICT                                                    Handle        = 0x80094008\n\tCERTSRV_E_RESTRICTEDOFFICER                                               Handle        = 0x80094009\n\tCERTSRV_E_KEY_ARCHIVAL_NOT_CONFIGURED                                     Handle        = 0x8009400A\n\tCERTSRV_E_NO_VALID_KRA                                                    Handle        = 0x8009400B\n\tCERTSRV_E_BAD_REQUEST_KEY_ARCHIVAL                                        Handle        = 0x8009400C\n\tCERTSRV_E_NO_CAADMIN_DEFINED                                              Handle        = 0x8009400D\n\tCERTSRV_E_BAD_RENEWAL_CERT_ATTRIBUTE                                      Handle        = 0x8009400E\n\tCERTSRV_E_NO_DB_SESSIONS                                                  Handle        = 0x8009400F\n\tCERTSRV_E_ALIGNMENT_FAULT                                                 Handle        = 0x80094010\n\tCERTSRV_E_ENROLL_DENIED                                                   Handle        = 0x80094011\n\tCERTSRV_E_TEMPLATE_DENIED                                                 Handle        = 0x80094012\n\tCERTSRV_E_DOWNLEVEL_DC_SSL_OR_UPGRADE                                     Handle        = 0x80094013\n\tCERTSRV_E_ADMIN_DENIED_REQUEST                                            Handle        = 0x80094014\n\tCERTSRV_E_NO_POLICY_SERVER                                                Handle        = 0x80094015\n\tCERTSRV_E_WEAK_SIGNATURE_OR_KEY                                           Handle        = 0x80094016\n\tCERTSRV_E_KEY_ATTESTATION_NOT_SUPPORTED                                   Handle        = 0x80094017\n\tCERTSRV_E_ENCRYPTION_CERT_REQUIRED                                        Handle        = 0x80094018\n\tCERTSRV_E_UNSUPPORTED_CERT_TYPE                                           Handle        = 0x80094800\n\tCERTSRV_E_NO_CERT_TYPE                                                    Handle        = 0x80094801\n\tCERTSRV_E_TEMPLATE_CONFLICT                                               Handle        = 0x80094802\n\tCERTSRV_E_SUBJECT_ALT_NAME_REQUIRED                                       Handle        = 0x80094803\n\tCERTSRV_E_ARCHIVED_KEY_REQUIRED                                           Handle        = 0x80094804\n\tCERTSRV_E_SMIME_REQUIRED                                                  Handle        = 0x80094805\n\tCERTSRV_E_BAD_RENEWAL_SUBJECT                                             Handle        = 0x80094806\n\tCERTSRV_E_BAD_TEMPLATE_VERSION                                            Handle        = 0x80094807\n\tCERTSRV_E_TEMPLATE_POLICY_REQUIRED                                        Handle        = 0x80094808\n\tCERTSRV_E_SIGNATURE_POLICY_REQUIRED                                       Handle        = 0x80094809\n\tCERTSRV_E_SIGNATURE_COUNT                                                 Handle        = 0x8009480A\n\tCERTSRV_E_SIGNATURE_REJECTED                                              Handle        = 0x8009480B\n\tCERTSRV_E_ISSUANCE_POLICY_REQUIRED                                        Handle        = 0x8009480C\n\tCERTSRV_E_SUBJECT_UPN_REQUIRED                                            Handle        = 0x8009480D\n\tCERTSRV_E_SUBJECT_DIRECTORY_GUID_REQUIRED                                 Handle        = 0x8009480E\n\tCERTSRV_E_SUBJECT_DNS_REQUIRED                                            Handle        = 0x8009480F\n\tCERTSRV_E_ARCHIVED_KEY_UNEXPECTED                                         Handle        = 0x80094810\n\tCERTSRV_E_KEY_LENGTH                                                      Handle        = 0x80094811\n\tCERTSRV_E_SUBJECT_EMAIL_REQUIRED                                          Handle        = 0x80094812\n\tCERTSRV_E_UNKNOWN_CERT_TYPE                                               Handle        = 0x80094813\n\tCERTSRV_E_CERT_TYPE_OVERLAP                                               Handle        = 0x80094814\n\tCERTSRV_E_TOO_MANY_SIGNATURES                                             Handle        = 0x80094815\n\tCERTSRV_E_RENEWAL_BAD_PUBLIC_KEY                                          Handle        = 0x80094816\n\tCERTSRV_E_INVALID_EK                                                      Handle        = 0x80094817\n\tCERTSRV_E_INVALID_IDBINDING                                               Handle        = 0x80094818\n\tCERTSRV_E_INVALID_ATTESTATION                                             Handle        = 0x80094819\n\tCERTSRV_E_KEY_ATTESTATION                                                 Handle        = 0x8009481A\n\tCERTSRV_E_CORRUPT_KEY_ATTESTATION                                         Handle        = 0x8009481B\n\tCERTSRV_E_EXPIRED_CHALLENGE                                               Handle        = 0x8009481C\n\tCERTSRV_E_INVALID_RESPONSE                                                Handle        = 0x8009481D\n\tCERTSRV_E_INVALID_REQUESTID                                               Handle        = 0x8009481E\n\tCERTSRV_E_REQUEST_PRECERTIFICATE_MISMATCH                                 Handle        = 0x8009481F\n\tCERTSRV_E_PENDING_CLIENT_RESPONSE                                         Handle        = 0x80094820\n\tXENROLL_E_KEY_NOT_EXPORTABLE                                              Handle        = 0x80095000\n\tXENROLL_E_CANNOT_ADD_ROOT_CERT                                            Handle        = 0x80095001\n\tXENROLL_E_RESPONSE_KA_HASH_NOT_FOUND                                      Handle        = 0x80095002\n\tXENROLL_E_RESPONSE_UNEXPECTED_KA_HASH                                     Handle        = 0x80095003\n\tXENROLL_E_RESPONSE_KA_HASH_MISMATCH                                       Handle        = 0x80095004\n\tXENROLL_E_KEYSPEC_SMIME_MISMATCH                                          Handle        = 0x80095005\n\tTRUST_E_SYSTEM_ERROR                                                      Handle        = 0x80096001\n\tTRUST_E_NO_SIGNER_CERT                                                    Handle        = 0x80096002\n\tTRUST_E_COUNTER_SIGNER                                                    Handle        = 0x80096003\n\tTRUST_E_CERT_SIGNATURE                                                    Handle        = 0x80096004\n\tTRUST_E_TIME_STAMP                                                        Handle        = 0x80096005\n\tTRUST_E_BAD_DIGEST                                                        Handle        = 0x80096010\n\tTRUST_E_MALFORMED_SIGNATURE                                               Handle        = 0x80096011\n\tTRUST_E_BASIC_CONSTRAINTS                                                 Handle        = 0x80096019\n\tTRUST_E_FINANCIAL_CRITERIA                                                Handle        = 0x8009601E\n\tMSSIPOTF_E_OUTOFMEMRANGE                                                  Handle        = 0x80097001\n\tMSSIPOTF_E_CANTGETOBJECT                                                  Handle        = 0x80097002\n\tMSSIPOTF_E_NOHEADTABLE                                                    Handle        = 0x80097003\n\tMSSIPOTF_E_BAD_MAGICNUMBER                                                Handle        = 0x80097004\n\tMSSIPOTF_E_BAD_OFFSET_TABLE                                               Handle        = 0x80097005\n\tMSSIPOTF_E_TABLE_TAGORDER                                                 Handle        = 0x80097006\n\tMSSIPOTF_E_TABLE_LONGWORD                                                 Handle        = 0x80097007\n\tMSSIPOTF_E_BAD_FIRST_TABLE_PLACEMENT                                      Handle        = 0x80097008\n\tMSSIPOTF_E_TABLES_OVERLAP                                                 Handle        = 0x80097009\n\tMSSIPOTF_E_TABLE_PADBYTES                                                 Handle        = 0x8009700A\n\tMSSIPOTF_E_FILETOOSMALL                                                   Handle        = 0x8009700B\n\tMSSIPOTF_E_TABLE_CHECKSUM                                                 Handle        = 0x8009700C\n\tMSSIPOTF_E_FILE_CHECKSUM                                                  Handle        = 0x8009700D\n\tMSSIPOTF_E_FAILED_POLICY                                                  Handle        = 0x80097010\n\tMSSIPOTF_E_FAILED_HINTS_CHECK                                             Handle        = 0x80097011\n\tMSSIPOTF_E_NOT_OPENTYPE                                                   Handle        = 0x80097012\n\tMSSIPOTF_E_FILE                                                           Handle        = 0x80097013\n\tMSSIPOTF_E_CRYPT                                                          Handle        = 0x80097014\n\tMSSIPOTF_E_BADVERSION                                                     Handle        = 0x80097015\n\tMSSIPOTF_E_DSIG_STRUCTURE                                                 Handle        = 0x80097016\n\tMSSIPOTF_E_PCONST_CHECK                                                   Handle        = 0x80097017\n\tMSSIPOTF_E_STRUCTURE                                                      Handle        = 0x80097018\n\tERROR_CRED_REQUIRES_CONFIRMATION                                          Handle        = 0x80097019\n\tNTE_OP_OK                                                                 syscall.Errno = 0\n\tTRUST_E_PROVIDER_UNKNOWN                                                  Handle        = 0x800B0001\n\tTRUST_E_ACTION_UNKNOWN                                                    Handle        = 0x800B0002\n\tTRUST_E_SUBJECT_FORM_UNKNOWN                                              Handle        = 0x800B0003\n\tTRUST_E_SUBJECT_NOT_TRUSTED                                               Handle        = 0x800B0004\n\tDIGSIG_E_ENCODE                                                           Handle        = 0x800B0005\n\tDIGSIG_E_DECODE                                                           Handle        = 0x800B0006\n\tDIGSIG_E_EXTENSIBILITY                                                    Handle        = 0x800B0007\n\tDIGSIG_E_CRYPTO                                                           Handle        = 0x800B0008\n\tPERSIST_E_SIZEDEFINITE                                                    Handle        = 0x800B0009\n\tPERSIST_E_SIZEINDEFINITE                                                  Handle        = 0x800B000A\n\tPERSIST_E_NOTSELFSIZING                                                   Handle        = 0x800B000B\n\tTRUST_E_NOSIGNATURE                                                       Handle        = 0x800B0100\n\tCERT_E_EXPIRED                                                            Handle        = 0x800B0101\n\tCERT_E_VALIDITYPERIODNESTING                                              Handle        = 0x800B0102\n\tCERT_E_ROLE                                                               Handle        = 0x800B0103\n\tCERT_E_PATHLENCONST                                                       Handle        = 0x800B0104\n\tCERT_E_CRITICAL                                                           Handle        = 0x800B0105\n\tCERT_E_PURPOSE                                                            Handle        = 0x800B0106\n\tCERT_E_ISSUERCHAINING                                                     Handle        = 0x800B0107\n\tCERT_E_MALFORMED                                                          Handle        = 0x800B0108\n\tCERT_E_UNTRUSTEDROOT                                                      Handle        = 0x800B0109\n\tCERT_E_CHAINING                                                           Handle        = 0x800B010A\n\tTRUST_E_FAIL                                                              Handle        = 0x800B010B\n\tCERT_E_REVOKED                                                            Handle        = 0x800B010C\n\tCERT_E_UNTRUSTEDTESTROOT                                                  Handle        = 0x800B010D\n\tCERT_E_REVOCATION_FAILURE                                                 Handle        = 0x800B010E\n\tCERT_E_CN_NO_MATCH                                                        Handle        = 0x800B010F\n\tCERT_E_WRONG_USAGE                                                        Handle        = 0x800B0110\n\tTRUST_E_EXPLICIT_DISTRUST                                                 Handle        = 0x800B0111\n\tCERT_E_UNTRUSTEDCA                                                        Handle        = 0x800B0112\n\tCERT_E_INVALID_POLICY                                                     Handle        = 0x800B0113\n\tCERT_E_INVALID_NAME                                                       Handle        = 0x800B0114\n\tSPAPI_E_EXPECTED_SECTION_NAME                                             Handle        = 0x800F0000\n\tSPAPI_E_BAD_SECTION_NAME_LINE                                             Handle        = 0x800F0001\n\tSPAPI_E_SECTION_NAME_TOO_LONG                                             Handle        = 0x800F0002\n\tSPAPI_E_GENERAL_SYNTAX                                                    Handle        = 0x800F0003\n\tSPAPI_E_WRONG_INF_STYLE                                                   Handle        = 0x800F0100\n\tSPAPI_E_SECTION_NOT_FOUND                                                 Handle        = 0x800F0101\n\tSPAPI_E_LINE_NOT_FOUND                                                    Handle        = 0x800F0102\n\tSPAPI_E_NO_BACKUP                                                         Handle        = 0x800F0103\n\tSPAPI_E_NO_ASSOCIATED_CLASS                                               Handle        = 0x800F0200\n\tSPAPI_E_CLASS_MISMATCH                                                    Handle        = 0x800F0201\n\tSPAPI_E_DUPLICATE_FOUND                                                   Handle        = 0x800F0202\n\tSPAPI_E_NO_DRIVER_SELECTED                                                Handle        = 0x800F0203\n\tSPAPI_E_KEY_DOES_NOT_EXIST                                                Handle        = 0x800F0204\n\tSPAPI_E_INVALID_DEVINST_NAME                                              Handle        = 0x800F0205\n\tSPAPI_E_INVALID_CLASS                                                     Handle        = 0x800F0206\n\tSPAPI_E_DEVINST_ALREADY_EXISTS                                            Handle        = 0x800F0207\n\tSPAPI_E_DEVINFO_NOT_REGISTERED                                            Handle        = 0x800F0208\n\tSPAPI_E_INVALID_REG_PROPERTY                                              Handle        = 0x800F0209\n\tSPAPI_E_NO_INF                                                            Handle        = 0x800F020A\n\tSPAPI_E_NO_SUCH_DEVINST                                                   Handle        = 0x800F020B\n\tSPAPI_E_CANT_LOAD_CLASS_ICON                                              Handle        = 0x800F020C\n\tSPAPI_E_INVALID_CLASS_INSTALLER                                           Handle        = 0x800F020D\n\tSPAPI_E_DI_DO_DEFAULT                                                     Handle        = 0x800F020E\n\tSPAPI_E_DI_NOFILECOPY                                                     Handle        = 0x800F020F\n\tSPAPI_E_INVALID_HWPROFILE                                                 Handle        = 0x800F0210\n\tSPAPI_E_NO_DEVICE_SELECTED                                                Handle        = 0x800F0211\n\tSPAPI_E_DEVINFO_LIST_LOCKED                                               Handle        = 0x800F0212\n\tSPAPI_E_DEVINFO_DATA_LOCKED                                               Handle        = 0x800F0213\n\tSPAPI_E_DI_BAD_PATH                                                       Handle        = 0x800F0214\n\tSPAPI_E_NO_CLASSINSTALL_PARAMS                                            Handle        = 0x800F0215\n\tSPAPI_E_FILEQUEUE_LOCKED                                                  Handle        = 0x800F0216\n\tSPAPI_E_BAD_SERVICE_INSTALLSECT                                           Handle        = 0x800F0217\n\tSPAPI_E_NO_CLASS_DRIVER_LIST                                              Handle        = 0x800F0218\n\tSPAPI_E_NO_ASSOCIATED_SERVICE                                             Handle        = 0x800F0219\n\tSPAPI_E_NO_DEFAULT_DEVICE_INTERFACE                                       Handle        = 0x800F021A\n\tSPAPI_E_DEVICE_INTERFACE_ACTIVE                                           Handle        = 0x800F021B\n\tSPAPI_E_DEVICE_INTERFACE_REMOVED                                          Handle        = 0x800F021C\n\tSPAPI_E_BAD_INTERFACE_INSTALLSECT                                         Handle        = 0x800F021D\n\tSPAPI_E_NO_SUCH_INTERFACE_CLASS                                           Handle        = 0x800F021E\n\tSPAPI_E_INVALID_REFERENCE_STRING                                          Handle        = 0x800F021F\n\tSPAPI_E_INVALID_MACHINENAME                                               Handle        = 0x800F0220\n\tSPAPI_E_REMOTE_COMM_FAILURE                                               Handle        = 0x800F0221\n\tSPAPI_E_MACHINE_UNAVAILABLE                                               Handle        = 0x800F0222\n\tSPAPI_E_NO_CONFIGMGR_SERVICES                                             Handle        = 0x800F0223\n\tSPAPI_E_INVALID_PROPPAGE_PROVIDER                                         Handle        = 0x800F0224\n\tSPAPI_E_NO_SUCH_DEVICE_INTERFACE                                          Handle        = 0x800F0225\n\tSPAPI_E_DI_POSTPROCESSING_REQUIRED                                        Handle        = 0x800F0226\n\tSPAPI_E_INVALID_COINSTALLER                                               Handle        = 0x800F0227\n\tSPAPI_E_NO_COMPAT_DRIVERS                                                 Handle        = 0x800F0228\n\tSPAPI_E_NO_DEVICE_ICON                                                    Handle        = 0x800F0229\n\tSPAPI_E_INVALID_INF_LOGCONFIG                                             Handle        = 0x800F022A\n\tSPAPI_E_DI_DONT_INSTALL                                                   Handle        = 0x800F022B\n\tSPAPI_E_INVALID_FILTER_DRIVER                                             Handle        = 0x800F022C\n\tSPAPI_E_NON_WINDOWS_NT_DRIVER                                             Handle        = 0x800F022D\n\tSPAPI_E_NON_WINDOWS_DRIVER                                                Handle        = 0x800F022E\n\tSPAPI_E_NO_CATALOG_FOR_OEM_INF                                            Handle        = 0x800F022F\n\tSPAPI_E_DEVINSTALL_QUEUE_NONNATIVE                                        Handle        = 0x800F0230\n\tSPAPI_E_NOT_DISABLEABLE                                                   Handle        = 0x800F0231\n\tSPAPI_E_CANT_REMOVE_DEVINST                                               Handle        = 0x800F0232\n\tSPAPI_E_INVALID_TARGET                                                    Handle        = 0x800F0233\n\tSPAPI_E_DRIVER_NONNATIVE                                                  Handle        = 0x800F0234\n\tSPAPI_E_IN_WOW64                                                          Handle        = 0x800F0235\n\tSPAPI_E_SET_SYSTEM_RESTORE_POINT                                          Handle        = 0x800F0236\n\tSPAPI_E_INCORRECTLY_COPIED_INF                                            Handle        = 0x800F0237\n\tSPAPI_E_SCE_DISABLED                                                      Handle        = 0x800F0238\n\tSPAPI_E_UNKNOWN_EXCEPTION                                                 Handle        = 0x800F0239\n\tSPAPI_E_PNP_REGISTRY_ERROR                                                Handle        = 0x800F023A\n\tSPAPI_E_REMOTE_REQUEST_UNSUPPORTED                                        Handle        = 0x800F023B\n\tSPAPI_E_NOT_AN_INSTALLED_OEM_INF                                          Handle        = 0x800F023C\n\tSPAPI_E_INF_IN_USE_BY_DEVICES                                             Handle        = 0x800F023D\n\tSPAPI_E_DI_FUNCTION_OBSOLETE                                              Handle        = 0x800F023E\n\tSPAPI_E_NO_AUTHENTICODE_CATALOG                                           Handle        = 0x800F023F\n\tSPAPI_E_AUTHENTICODE_DISALLOWED                                           Handle        = 0x800F0240\n\tSPAPI_E_AUTHENTICODE_TRUSTED_PUBLISHER                                    Handle        = 0x800F0241\n\tSPAPI_E_AUTHENTICODE_TRUST_NOT_ESTABLISHED                                Handle        = 0x800F0242\n\tSPAPI_E_AUTHENTICODE_PUBLISHER_NOT_TRUSTED                                Handle        = 0x800F0243\n\tSPAPI_E_SIGNATURE_OSATTRIBUTE_MISMATCH                                    Handle        = 0x800F0244\n\tSPAPI_E_ONLY_VALIDATE_VIA_AUTHENTICODE                                    Handle        = 0x800F0245\n\tSPAPI_E_DEVICE_INSTALLER_NOT_READY                                        Handle        = 0x800F0246\n\tSPAPI_E_DRIVER_STORE_ADD_FAILED                                           Handle        = 0x800F0247\n\tSPAPI_E_DEVICE_INSTALL_BLOCKED                                            Handle        = 0x800F0248\n\tSPAPI_E_DRIVER_INSTALL_BLOCKED                                            Handle        = 0x800F0249\n\tSPAPI_E_WRONG_INF_TYPE                                                    Handle        = 0x800F024A\n\tSPAPI_E_FILE_HASH_NOT_IN_CATALOG                                          Handle        = 0x800F024B\n\tSPAPI_E_DRIVER_STORE_DELETE_FAILED                                        Handle        = 0x800F024C\n\tSPAPI_E_UNRECOVERABLE_STACK_OVERFLOW                                      Handle        = 0x800F0300\n\tSPAPI_E_ERROR_NOT_INSTALLED                                               Handle        = 0x800F1000\n\tSCARD_S_SUCCESS                                                                         = S_OK\n\tSCARD_F_INTERNAL_ERROR                                                    Handle        = 0x80100001\n\tSCARD_E_CANCELLED                                                         Handle        = 0x80100002\n\tSCARD_E_INVALID_HANDLE                                                    Handle        = 0x80100003\n\tSCARD_E_INVALID_PARAMETER                                                 Handle        = 0x80100004\n\tSCARD_E_INVALID_TARGET                                                    Handle        = 0x80100005\n\tSCARD_E_NO_MEMORY                                                         Handle        = 0x80100006\n\tSCARD_F_WAITED_TOO_LONG                                                   Handle        = 0x80100007\n\tSCARD_E_INSUFFICIENT_BUFFER                                               Handle        = 0x80100008\n\tSCARD_E_UNKNOWN_READER                                                    Handle        = 0x80100009\n\tSCARD_E_TIMEOUT                                                           Handle        = 0x8010000A\n\tSCARD_E_SHARING_VIOLATION                                                 Handle        = 0x8010000B\n\tSCARD_E_NO_SMARTCARD                                                      Handle        = 0x8010000C\n\tSCARD_E_UNKNOWN_CARD                                                      Handle        = 0x8010000D\n\tSCARD_E_CANT_DISPOSE                                                      Handle        = 0x8010000E\n\tSCARD_E_PROTO_MISMATCH                                                    Handle        = 0x8010000F\n\tSCARD_E_NOT_READY                                                         Handle        = 0x80100010\n\tSCARD_E_INVALID_VALUE                                                     Handle        = 0x80100011\n\tSCARD_E_SYSTEM_CANCELLED                                                  Handle        = 0x80100012\n\tSCARD_F_COMM_ERROR                                                        Handle        = 0x80100013\n\tSCARD_F_UNKNOWN_ERROR                                                     Handle        = 0x80100014\n\tSCARD_E_INVALID_ATR                                                       Handle        = 0x80100015\n\tSCARD_E_NOT_TRANSACTED                                                    Handle        = 0x80100016\n\tSCARD_E_READER_UNAVAILABLE                                                Handle        = 0x80100017\n\tSCARD_P_SHUTDOWN                                                          Handle        = 0x80100018\n\tSCARD_E_PCI_TOO_SMALL                                                     Handle        = 0x80100019\n\tSCARD_E_READER_UNSUPPORTED                                                Handle        = 0x8010001A\n\tSCARD_E_DUPLICATE_READER                                                  Handle        = 0x8010001B\n\tSCARD_E_CARD_UNSUPPORTED                                                  Handle        = 0x8010001C\n\tSCARD_E_NO_SERVICE                                                        Handle        = 0x8010001D\n\tSCARD_E_SERVICE_STOPPED                                                   Handle        = 0x8010001E\n\tSCARD_E_UNEXPECTED                                                        Handle        = 0x8010001F\n\tSCARD_E_ICC_INSTALLATION                                                  Handle        = 0x80100020\n\tSCARD_E_ICC_CREATEORDER                                                   Handle        = 0x80100021\n\tSCARD_E_UNSUPPORTED_FEATURE                                               Handle        = 0x80100022\n\tSCARD_E_DIR_NOT_FOUND                                                     Handle        = 0x80100023\n\tSCARD_E_FILE_NOT_FOUND                                                    Handle        = 0x80100024\n\tSCARD_E_NO_DIR                                                            Handle        = 0x80100025\n\tSCARD_E_NO_FILE                                                           Handle        = 0x80100026\n\tSCARD_E_NO_ACCESS                                                         Handle        = 0x80100027\n\tSCARD_E_WRITE_TOO_MANY                                                    Handle        = 0x80100028\n\tSCARD_E_BAD_SEEK                                                          Handle        = 0x80100029\n\tSCARD_E_INVALID_CHV                                                       Handle        = 0x8010002A\n\tSCARD_E_UNKNOWN_RES_MNG                                                   Handle        = 0x8010002B\n\tSCARD_E_NO_SUCH_CERTIFICATE                                               Handle        = 0x8010002C\n\tSCARD_E_CERTIFICATE_UNAVAILABLE                                           Handle        = 0x8010002D\n\tSCARD_E_NO_READERS_AVAILABLE                                              Handle        = 0x8010002E\n\tSCARD_E_COMM_DATA_LOST                                                    Handle        = 0x8010002F\n\tSCARD_E_NO_KEY_CONTAINER                                                  Handle        = 0x80100030\n\tSCARD_E_SERVER_TOO_BUSY                                                   Handle        = 0x80100031\n\tSCARD_E_PIN_CACHE_EXPIRED                                                 Handle        = 0x80100032\n\tSCARD_E_NO_PIN_CACHE                                                      Handle        = 0x80100033\n\tSCARD_E_READ_ONLY_CARD                                                    Handle        = 0x80100034\n\tSCARD_W_UNSUPPORTED_CARD                                                  Handle        = 0x80100065\n\tSCARD_W_UNRESPONSIVE_CARD                                                 Handle        = 0x80100066\n\tSCARD_W_UNPOWERED_CARD                                                    Handle        = 0x80100067\n\tSCARD_W_RESET_CARD                                                        Handle        = 0x80100068\n\tSCARD_W_REMOVED_CARD                                                      Handle        = 0x80100069\n\tSCARD_W_SECURITY_VIOLATION                                                Handle        = 0x8010006A\n\tSCARD_W_WRONG_CHV                                                         Handle        = 0x8010006B\n\tSCARD_W_CHV_BLOCKED                                                       Handle        = 0x8010006C\n\tSCARD_W_EOF                                                               Handle        = 0x8010006D\n\tSCARD_W_CANCELLED_BY_USER                                                 Handle        = 0x8010006E\n\tSCARD_W_CARD_NOT_AUTHENTICATED                                            Handle        = 0x8010006F\n\tSCARD_W_CACHE_ITEM_NOT_FOUND                                              Handle        = 0x80100070\n\tSCARD_W_CACHE_ITEM_STALE                                                  Handle        = 0x80100071\n\tSCARD_W_CACHE_ITEM_TOO_BIG                                                Handle        = 0x80100072\n\tCOMADMIN_E_OBJECTERRORS                                                   Handle        = 0x80110401\n\tCOMADMIN_E_OBJECTINVALID                                                  Handle        = 0x80110402\n\tCOMADMIN_E_KEYMISSING                                                     Handle        = 0x80110403\n\tCOMADMIN_E_ALREADYINSTALLED                                               Handle        = 0x80110404\n\tCOMADMIN_E_APP_FILE_WRITEFAIL                                             Handle        = 0x80110407\n\tCOMADMIN_E_APP_FILE_READFAIL                                              Handle        = 0x80110408\n\tCOMADMIN_E_APP_FILE_VERSION                                               Handle        = 0x80110409\n\tCOMADMIN_E_BADPATH                                                        Handle        = 0x8011040A\n\tCOMADMIN_E_APPLICATIONEXISTS                                              Handle        = 0x8011040B\n\tCOMADMIN_E_ROLEEXISTS                                                     Handle        = 0x8011040C\n\tCOMADMIN_E_CANTCOPYFILE                                                   Handle        = 0x8011040D\n\tCOMADMIN_E_NOUSER                                                         Handle        = 0x8011040F\n\tCOMADMIN_E_INVALIDUSERIDS                                                 Handle        = 0x80110410\n\tCOMADMIN_E_NOREGISTRYCLSID                                                Handle        = 0x80110411\n\tCOMADMIN_E_BADREGISTRYPROGID                                              Handle        = 0x80110412\n\tCOMADMIN_E_AUTHENTICATIONLEVEL                                            Handle        = 0x80110413\n\tCOMADMIN_E_USERPASSWDNOTVALID                                             Handle        = 0x80110414\n\tCOMADMIN_E_CLSIDORIIDMISMATCH                                             Handle        = 0x80110418\n\tCOMADMIN_E_REMOTEINTERFACE                                                Handle        = 0x80110419\n\tCOMADMIN_E_DLLREGISTERSERVER                                              Handle        = 0x8011041A\n\tCOMADMIN_E_NOSERVERSHARE                                                  Handle        = 0x8011041B\n\tCOMADMIN_E_DLLLOADFAILED                                                  Handle        = 0x8011041D\n\tCOMADMIN_E_BADREGISTRYLIBID                                               Handle        = 0x8011041E\n\tCOMADMIN_E_APPDIRNOTFOUND                                                 Handle        = 0x8011041F\n\tCOMADMIN_E_REGISTRARFAILED                                                Handle        = 0x80110423\n\tCOMADMIN_E_COMPFILE_DOESNOTEXIST                                          Handle        = 0x80110424\n\tCOMADMIN_E_COMPFILE_LOADDLLFAIL                                           Handle        = 0x80110425\n\tCOMADMIN_E_COMPFILE_GETCLASSOBJ                                           Handle        = 0x80110426\n\tCOMADMIN_E_COMPFILE_CLASSNOTAVAIL                                         Handle        = 0x80110427\n\tCOMADMIN_E_COMPFILE_BADTLB                                                Handle        = 0x80110428\n\tCOMADMIN_E_COMPFILE_NOTINSTALLABLE                                        Handle        = 0x80110429\n\tCOMADMIN_E_NOTCHANGEABLE                                                  Handle        = 0x8011042A\n\tCOMADMIN_E_NOTDELETEABLE                                                  Handle        = 0x8011042B\n\tCOMADMIN_E_SESSION                                                        Handle        = 0x8011042C\n\tCOMADMIN_E_COMP_MOVE_LOCKED                                               Handle        = 0x8011042D\n\tCOMADMIN_E_COMP_MOVE_BAD_DEST                                             Handle        = 0x8011042E\n\tCOMADMIN_E_REGISTERTLB                                                    Handle        = 0x80110430\n\tCOMADMIN_E_SYSTEMAPP                                                      Handle        = 0x80110433\n\tCOMADMIN_E_COMPFILE_NOREGISTRAR                                           Handle        = 0x80110434\n\tCOMADMIN_E_COREQCOMPINSTALLED                                             Handle        = 0x80110435\n\tCOMADMIN_E_SERVICENOTINSTALLED                                            Handle        = 0x80110436\n\tCOMADMIN_E_PROPERTYSAVEFAILED                                             Handle        = 0x80110437\n\tCOMADMIN_E_OBJECTEXISTS                                                   Handle        = 0x80110438\n\tCOMADMIN_E_COMPONENTEXISTS                                                Handle        = 0x80110439\n\tCOMADMIN_E_REGFILE_CORRUPT                                                Handle        = 0x8011043B\n\tCOMADMIN_E_PROPERTY_OVERFLOW                                              Handle        = 0x8011043C\n\tCOMADMIN_E_NOTINREGISTRY                                                  Handle        = 0x8011043E\n\tCOMADMIN_E_OBJECTNOTPOOLABLE                                              Handle        = 0x8011043F\n\tCOMADMIN_E_APPLID_MATCHES_CLSID                                           Handle        = 0x80110446\n\tCOMADMIN_E_ROLE_DOES_NOT_EXIST                                            Handle        = 0x80110447\n\tCOMADMIN_E_START_APP_NEEDS_COMPONENTS                                     Handle        = 0x80110448\n\tCOMADMIN_E_REQUIRES_DIFFERENT_PLATFORM                                    Handle        = 0x80110449\n\tCOMADMIN_E_CAN_NOT_EXPORT_APP_PROXY                                       Handle        = 0x8011044A\n\tCOMADMIN_E_CAN_NOT_START_APP                                              Handle        = 0x8011044B\n\tCOMADMIN_E_CAN_NOT_EXPORT_SYS_APP                                         Handle        = 0x8011044C\n\tCOMADMIN_E_CANT_SUBSCRIBE_TO_COMPONENT                                    Handle        = 0x8011044D\n\tCOMADMIN_E_EVENTCLASS_CANT_BE_SUBSCRIBER                                  Handle        = 0x8011044E\n\tCOMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE                                     Handle        = 0x8011044F\n\tCOMADMIN_E_BASE_PARTITION_ONLY                                            Handle        = 0x80110450\n\tCOMADMIN_E_START_APP_DISABLED                                             Handle        = 0x80110451\n\tCOMADMIN_E_CAT_DUPLICATE_PARTITION_NAME                                   Handle        = 0x80110457\n\tCOMADMIN_E_CAT_INVALID_PARTITION_NAME                                     Handle        = 0x80110458\n\tCOMADMIN_E_CAT_PARTITION_IN_USE                                           Handle        = 0x80110459\n\tCOMADMIN_E_FILE_PARTITION_DUPLICATE_FILES                                 Handle        = 0x8011045A\n\tCOMADMIN_E_CAT_IMPORTED_COMPONENTS_NOT_ALLOWED                            Handle        = 0x8011045B\n\tCOMADMIN_E_AMBIGUOUS_APPLICATION_NAME                                     Handle        = 0x8011045C\n\tCOMADMIN_E_AMBIGUOUS_PARTITION_NAME                                       Handle        = 0x8011045D\n\tCOMADMIN_E_REGDB_NOTINITIALIZED                                           Handle        = 0x80110472\n\tCOMADMIN_E_REGDB_NOTOPEN                                                  Handle        = 0x80110473\n\tCOMADMIN_E_REGDB_SYSTEMERR                                                Handle        = 0x80110474\n\tCOMADMIN_E_REGDB_ALREADYRUNNING                                           Handle        = 0x80110475\n\tCOMADMIN_E_MIG_VERSIONNOTSUPPORTED                                        Handle        = 0x80110480\n\tCOMADMIN_E_MIG_SCHEMANOTFOUND                                             Handle        = 0x80110481\n\tCOMADMIN_E_CAT_BITNESSMISMATCH                                            Handle        = 0x80110482\n\tCOMADMIN_E_CAT_UNACCEPTABLEBITNESS                                        Handle        = 0x80110483\n\tCOMADMIN_E_CAT_WRONGAPPBITNESS                                            Handle        = 0x80110484\n\tCOMADMIN_E_CAT_PAUSE_RESUME_NOT_SUPPORTED                                 Handle        = 0x80110485\n\tCOMADMIN_E_CAT_SERVERFAULT                                                Handle        = 0x80110486\n\tCOMQC_E_APPLICATION_NOT_QUEUED                                            Handle        = 0x80110600\n\tCOMQC_E_NO_QUEUEABLE_INTERFACES                                           Handle        = 0x80110601\n\tCOMQC_E_QUEUING_SERVICE_NOT_AVAILABLE                                     Handle        = 0x80110602\n\tCOMQC_E_NO_IPERSISTSTREAM                                                 Handle        = 0x80110603\n\tCOMQC_E_BAD_MESSAGE                                                       Handle        = 0x80110604\n\tCOMQC_E_UNAUTHENTICATED                                                   Handle        = 0x80110605\n\tCOMQC_E_UNTRUSTED_ENQUEUER                                                Handle        = 0x80110606\n\tMSDTC_E_DUPLICATE_RESOURCE                                                Handle        = 0x80110701\n\tCOMADMIN_E_OBJECT_PARENT_MISSING                                          Handle        = 0x80110808\n\tCOMADMIN_E_OBJECT_DOES_NOT_EXIST                                          Handle        = 0x80110809\n\tCOMADMIN_E_APP_NOT_RUNNING                                                Handle        = 0x8011080A\n\tCOMADMIN_E_INVALID_PARTITION                                              Handle        = 0x8011080B\n\tCOMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE                              Handle        = 0x8011080D\n\tCOMADMIN_E_USER_IN_SET                                                    Handle        = 0x8011080E\n\tCOMADMIN_E_CANTRECYCLELIBRARYAPPS                                         Handle        = 0x8011080F\n\tCOMADMIN_E_CANTRECYCLESERVICEAPPS                                         Handle        = 0x80110811\n\tCOMADMIN_E_PROCESSALREADYRECYCLED                                         Handle        = 0x80110812\n\tCOMADMIN_E_PAUSEDPROCESSMAYNOTBERECYCLED                                  Handle        = 0x80110813\n\tCOMADMIN_E_CANTMAKEINPROCSERVICE                                          Handle        = 0x80110814\n\tCOMADMIN_E_PROGIDINUSEBYCLSID                                             Handle        = 0x80110815\n\tCOMADMIN_E_DEFAULT_PARTITION_NOT_IN_SET                                   Handle        = 0x80110816\n\tCOMADMIN_E_RECYCLEDPROCESSMAYNOTBEPAUSED                                  Handle        = 0x80110817\n\tCOMADMIN_E_PARTITION_ACCESSDENIED                                         Handle        = 0x80110818\n\tCOMADMIN_E_PARTITION_MSI_ONLY                                             Handle        = 0x80110819\n\tCOMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_1_0_FORMAT                          Handle        = 0x8011081A\n\tCOMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_NONBASE_PARTITIONS                  Handle        = 0x8011081B\n\tCOMADMIN_E_COMP_MOVE_SOURCE                                               Handle        = 0x8011081C\n\tCOMADMIN_E_COMP_MOVE_DEST                                                 Handle        = 0x8011081D\n\tCOMADMIN_E_COMP_MOVE_PRIVATE                                              Handle        = 0x8011081E\n\tCOMADMIN_E_BASEPARTITION_REQUIRED_IN_SET                                  Handle        = 0x8011081F\n\tCOMADMIN_E_CANNOT_ALIAS_EVENTCLASS                                        Handle        = 0x80110820\n\tCOMADMIN_E_PRIVATE_ACCESSDENIED                                           Handle        = 0x80110821\n\tCOMADMIN_E_SAFERINVALID                                                   Handle        = 0x80110822\n\tCOMADMIN_E_REGISTRY_ACCESSDENIED                                          Handle        = 0x80110823\n\tCOMADMIN_E_PARTITIONS_DISABLED                                            Handle        = 0x80110824\n\tWER_S_REPORT_DEBUG                                                        Handle        = 0x001B0000\n\tWER_S_REPORT_UPLOADED                                                     Handle        = 0x001B0001\n\tWER_S_REPORT_QUEUED                                                       Handle        = 0x001B0002\n\tWER_S_DISABLED                                                            Handle        = 0x001B0003\n\tWER_S_SUSPENDED_UPLOAD                                                    Handle        = 0x001B0004\n\tWER_S_DISABLED_QUEUE                                                      Handle        = 0x001B0005\n\tWER_S_DISABLED_ARCHIVE                                                    Handle        = 0x001B0006\n\tWER_S_REPORT_ASYNC                                                        Handle        = 0x001B0007\n\tWER_S_IGNORE_ASSERT_INSTANCE                                              Handle        = 0x001B0008\n\tWER_S_IGNORE_ALL_ASSERTS                                                  Handle        = 0x001B0009\n\tWER_S_ASSERT_CONTINUE                                                     Handle        = 0x001B000A\n\tWER_S_THROTTLED                                                           Handle        = 0x001B000B\n\tWER_S_REPORT_UPLOADED_CAB                                                 Handle        = 0x001B000C\n\tWER_E_CRASH_FAILURE                                                       Handle        = 0x801B8000\n\tWER_E_CANCELED                                                            Handle        = 0x801B8001\n\tWER_E_NETWORK_FAILURE                                                     Handle        = 0x801B8002\n\tWER_E_NOT_INITIALIZED                                                     Handle        = 0x801B8003\n\tWER_E_ALREADY_REPORTING                                                   Handle        = 0x801B8004\n\tWER_E_DUMP_THROTTLED                                                      Handle        = 0x801B8005\n\tWER_E_INSUFFICIENT_CONSENT                                                Handle        = 0x801B8006\n\tWER_E_TOO_HEAVY                                                           Handle        = 0x801B8007\n\tERROR_FLT_IO_COMPLETE                                                     Handle        = 0x001F0001\n\tERROR_FLT_NO_HANDLER_DEFINED                                              Handle        = 0x801F0001\n\tERROR_FLT_CONTEXT_ALREADY_DEFINED                                         Handle        = 0x801F0002\n\tERROR_FLT_INVALID_ASYNCHRONOUS_REQUEST                                    Handle        = 0x801F0003\n\tERROR_FLT_DISALLOW_FAST_IO                                                Handle        = 0x801F0004\n\tERROR_FLT_INVALID_NAME_REQUEST                                            Handle        = 0x801F0005\n\tERROR_FLT_NOT_SAFE_TO_POST_OPERATION                                      Handle        = 0x801F0006\n\tERROR_FLT_NOT_INITIALIZED                                                 Handle        = 0x801F0007\n\tERROR_FLT_FILTER_NOT_READY                                                Handle        = 0x801F0008\n\tERROR_FLT_POST_OPERATION_CLEANUP                                          Handle        = 0x801F0009\n\tERROR_FLT_INTERNAL_ERROR                                                  Handle        = 0x801F000A\n\tERROR_FLT_DELETING_OBJECT                                                 Handle        = 0x801F000B\n\tERROR_FLT_MUST_BE_NONPAGED_POOL                                           Handle        = 0x801F000C\n\tERROR_FLT_DUPLICATE_ENTRY                                                 Handle        = 0x801F000D\n\tERROR_FLT_CBDQ_DISABLED                                                   Handle        = 0x801F000E\n\tERROR_FLT_DO_NOT_ATTACH                                                   Handle        = 0x801F000F\n\tERROR_FLT_DO_NOT_DETACH                                                   Handle        = 0x801F0010\n\tERROR_FLT_INSTANCE_ALTITUDE_COLLISION                                     Handle        = 0x801F0011\n\tERROR_FLT_INSTANCE_NAME_COLLISION                                         Handle        = 0x801F0012\n\tERROR_FLT_FILTER_NOT_FOUND                                                Handle        = 0x801F0013\n\tERROR_FLT_VOLUME_NOT_FOUND                                                Handle        = 0x801F0014\n\tERROR_FLT_INSTANCE_NOT_FOUND                                              Handle        = 0x801F0015\n\tERROR_FLT_CONTEXT_ALLOCATION_NOT_FOUND                                    Handle        = 0x801F0016\n\tERROR_FLT_INVALID_CONTEXT_REGISTRATION                                    Handle        = 0x801F0017\n\tERROR_FLT_NAME_CACHE_MISS                                                 Handle        = 0x801F0018\n\tERROR_FLT_NO_DEVICE_OBJECT                                                Handle        = 0x801F0019\n\tERROR_FLT_VOLUME_ALREADY_MOUNTED                                          Handle        = 0x801F001A\n\tERROR_FLT_ALREADY_ENLISTED                                                Handle        = 0x801F001B\n\tERROR_FLT_CONTEXT_ALREADY_LINKED                                          Handle        = 0x801F001C\n\tERROR_FLT_NO_WAITER_FOR_REPLY                                             Handle        = 0x801F0020\n\tERROR_FLT_REGISTRATION_BUSY                                               Handle        = 0x801F0023\n\tERROR_HUNG_DISPLAY_DRIVER_THREAD                                          Handle        = 0x80260001\n\tDWM_E_COMPOSITIONDISABLED                                                 Handle        = 0x80263001\n\tDWM_E_REMOTING_NOT_SUPPORTED                                              Handle        = 0x80263002\n\tDWM_E_NO_REDIRECTION_SURFACE_AVAILABLE                                    Handle        = 0x80263003\n\tDWM_E_NOT_QUEUING_PRESENTS                                                Handle        = 0x80263004\n\tDWM_E_ADAPTER_NOT_FOUND                                                   Handle        = 0x80263005\n\tDWM_S_GDI_REDIRECTION_SURFACE                                             Handle        = 0x00263005\n\tDWM_E_TEXTURE_TOO_LARGE                                                   Handle        = 0x80263007\n\tDWM_S_GDI_REDIRECTION_SURFACE_BLT_VIA_GDI                                 Handle        = 0x00263008\n\tERROR_MONITOR_NO_DESCRIPTOR                                               Handle        = 0x00261001\n\tERROR_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT                                   Handle        = 0x00261002\n\tERROR_MONITOR_INVALID_DESCRIPTOR_CHECKSUM                                 Handle        = 0xC0261003\n\tERROR_MONITOR_INVALID_STANDARD_TIMING_BLOCK                               Handle        = 0xC0261004\n\tERROR_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED                           Handle        = 0xC0261005\n\tERROR_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK                          Handle        = 0xC0261006\n\tERROR_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK                          Handle        = 0xC0261007\n\tERROR_MONITOR_NO_MORE_DESCRIPTOR_DATA                                     Handle        = 0xC0261008\n\tERROR_MONITOR_INVALID_DETAILED_TIMING_BLOCK                               Handle        = 0xC0261009\n\tERROR_MONITOR_INVALID_MANUFACTURE_DATE                                    Handle        = 0xC026100A\n\tERROR_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER                                   Handle        = 0xC0262000\n\tERROR_GRAPHICS_INSUFFICIENT_DMA_BUFFER                                    Handle        = 0xC0262001\n\tERROR_GRAPHICS_INVALID_DISPLAY_ADAPTER                                    Handle        = 0xC0262002\n\tERROR_GRAPHICS_ADAPTER_WAS_RESET                                          Handle        = 0xC0262003\n\tERROR_GRAPHICS_INVALID_DRIVER_MODEL                                       Handle        = 0xC0262004\n\tERROR_GRAPHICS_PRESENT_MODE_CHANGED                                       Handle        = 0xC0262005\n\tERROR_GRAPHICS_PRESENT_OCCLUDED                                           Handle        = 0xC0262006\n\tERROR_GRAPHICS_PRESENT_DENIED                                             Handle        = 0xC0262007\n\tERROR_GRAPHICS_CANNOTCOLORCONVERT                                         Handle        = 0xC0262008\n\tERROR_GRAPHICS_DRIVER_MISMATCH                                            Handle        = 0xC0262009\n\tERROR_GRAPHICS_PARTIAL_DATA_POPULATED                                     Handle        = 0x4026200A\n\tERROR_GRAPHICS_PRESENT_REDIRECTION_DISABLED                               Handle        = 0xC026200B\n\tERROR_GRAPHICS_PRESENT_UNOCCLUDED                                         Handle        = 0xC026200C\n\tERROR_GRAPHICS_WINDOWDC_NOT_AVAILABLE                                     Handle        = 0xC026200D\n\tERROR_GRAPHICS_WINDOWLESS_PRESENT_DISABLED                                Handle        = 0xC026200E\n\tERROR_GRAPHICS_PRESENT_INVALID_WINDOW                                     Handle        = 0xC026200F\n\tERROR_GRAPHICS_PRESENT_BUFFER_NOT_BOUND                                   Handle        = 0xC0262010\n\tERROR_GRAPHICS_VAIL_STATE_CHANGED                                         Handle        = 0xC0262011\n\tERROR_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN                         Handle        = 0xC0262012\n\tERROR_GRAPHICS_INDIRECT_DISPLAY_DEVICE_STOPPED                            Handle        = 0xC0262013\n\tERROR_GRAPHICS_NO_VIDEO_MEMORY                                            Handle        = 0xC0262100\n\tERROR_GRAPHICS_CANT_LOCK_MEMORY                                           Handle        = 0xC0262101\n\tERROR_GRAPHICS_ALLOCATION_BUSY                                            Handle        = 0xC0262102\n\tERROR_GRAPHICS_TOO_MANY_REFERENCES                                        Handle        = 0xC0262103\n\tERROR_GRAPHICS_TRY_AGAIN_LATER                                            Handle        = 0xC0262104\n\tERROR_GRAPHICS_TRY_AGAIN_NOW                                              Handle        = 0xC0262105\n\tERROR_GRAPHICS_ALLOCATION_INVALID                                         Handle        = 0xC0262106\n\tERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE                           Handle        = 0xC0262107\n\tERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED                           Handle        = 0xC0262108\n\tERROR_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION                               Handle        = 0xC0262109\n\tERROR_GRAPHICS_INVALID_ALLOCATION_USAGE                                   Handle        = 0xC0262110\n\tERROR_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION                              Handle        = 0xC0262111\n\tERROR_GRAPHICS_ALLOCATION_CLOSED                                          Handle        = 0xC0262112\n\tERROR_GRAPHICS_INVALID_ALLOCATION_INSTANCE                                Handle        = 0xC0262113\n\tERROR_GRAPHICS_INVALID_ALLOCATION_HANDLE                                  Handle        = 0xC0262114\n\tERROR_GRAPHICS_WRONG_ALLOCATION_DEVICE                                    Handle        = 0xC0262115\n\tERROR_GRAPHICS_ALLOCATION_CONTENT_LOST                                    Handle        = 0xC0262116\n\tERROR_GRAPHICS_GPU_EXCEPTION_ON_DEVICE                                    Handle        = 0xC0262200\n\tERROR_GRAPHICS_SKIP_ALLOCATION_PREPARATION                                Handle        = 0x40262201\n\tERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY                                     Handle        = 0xC0262300\n\tERROR_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED                               Handle        = 0xC0262301\n\tERROR_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED                     Handle        = 0xC0262302\n\tERROR_GRAPHICS_INVALID_VIDPN                                              Handle        = 0xC0262303\n\tERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE                               Handle        = 0xC0262304\n\tERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET                               Handle        = 0xC0262305\n\tERROR_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED                               Handle        = 0xC0262306\n\tERROR_GRAPHICS_MODE_NOT_PINNED                                            Handle        = 0x00262307\n\tERROR_GRAPHICS_INVALID_VIDPN_SOURCEMODESET                                Handle        = 0xC0262308\n\tERROR_GRAPHICS_INVALID_VIDPN_TARGETMODESET                                Handle        = 0xC0262309\n\tERROR_GRAPHICS_INVALID_FREQUENCY                                          Handle        = 0xC026230A\n\tERROR_GRAPHICS_INVALID_ACTIVE_REGION                                      Handle        = 0xC026230B\n\tERROR_GRAPHICS_INVALID_TOTAL_REGION                                       Handle        = 0xC026230C\n\tERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE                          Handle        = 0xC0262310\n\tERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE                          Handle        = 0xC0262311\n\tERROR_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET                             Handle        = 0xC0262312\n\tERROR_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY                                   Handle        = 0xC0262313\n\tERROR_GRAPHICS_MODE_ALREADY_IN_MODESET                                    Handle        = 0xC0262314\n\tERROR_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET                              Handle        = 0xC0262315\n\tERROR_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET                              Handle        = 0xC0262316\n\tERROR_GRAPHICS_SOURCE_ALREADY_IN_SET                                      Handle        = 0xC0262317\n\tERROR_GRAPHICS_TARGET_ALREADY_IN_SET                                      Handle        = 0xC0262318\n\tERROR_GRAPHICS_INVALID_VIDPN_PRESENT_PATH                                 Handle        = 0xC0262319\n\tERROR_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY                              Handle        = 0xC026231A\n\tERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET                          Handle        = 0xC026231B\n\tERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE                             Handle        = 0xC026231C\n\tERROR_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET                                  Handle        = 0xC026231D\n\tERROR_GRAPHICS_NO_PREFERRED_MODE                                          Handle        = 0x0026231E\n\tERROR_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET                              Handle        = 0xC026231F\n\tERROR_GRAPHICS_STALE_MODESET                                              Handle        = 0xC0262320\n\tERROR_GRAPHICS_INVALID_MONITOR_SOURCEMODESET                              Handle        = 0xC0262321\n\tERROR_GRAPHICS_INVALID_MONITOR_SOURCE_MODE                                Handle        = 0xC0262322\n\tERROR_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN                            Handle        = 0xC0262323\n\tERROR_GRAPHICS_MODE_ID_MUST_BE_UNIQUE                                     Handle        = 0xC0262324\n\tERROR_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION            Handle        = 0xC0262325\n\tERROR_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES                    Handle        = 0xC0262326\n\tERROR_GRAPHICS_PATH_NOT_IN_TOPOLOGY                                       Handle        = 0xC0262327\n\tERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE                      Handle        = 0xC0262328\n\tERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET                      Handle        = 0xC0262329\n\tERROR_GRAPHICS_INVALID_MONITORDESCRIPTORSET                               Handle        = 0xC026232A\n\tERROR_GRAPHICS_INVALID_MONITORDESCRIPTOR                                  Handle        = 0xC026232B\n\tERROR_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET                               Handle        = 0xC026232C\n\tERROR_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET                           Handle        = 0xC026232D\n\tERROR_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE                        Handle        = 0xC026232E\n\tERROR_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE                           Handle        = 0xC026232F\n\tERROR_GRAPHICS_RESOURCES_NOT_RELATED                                      Handle        = 0xC0262330\n\tERROR_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE                                   Handle        = 0xC0262331\n\tERROR_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE                                   Handle        = 0xC0262332\n\tERROR_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET                                  Handle        = 0xC0262333\n\tERROR_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER               Handle        = 0xC0262334\n\tERROR_GRAPHICS_NO_VIDPNMGR                                                Handle        = 0xC0262335\n\tERROR_GRAPHICS_NO_ACTIVE_VIDPN                                            Handle        = 0xC0262336\n\tERROR_GRAPHICS_STALE_VIDPN_TOPOLOGY                                       Handle        = 0xC0262337\n\tERROR_GRAPHICS_MONITOR_NOT_CONNECTED                                      Handle        = 0xC0262338\n\tERROR_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY                                     Handle        = 0xC0262339\n\tERROR_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE                                Handle        = 0xC026233A\n\tERROR_GRAPHICS_INVALID_VISIBLEREGION_SIZE                                 Handle        = 0xC026233B\n\tERROR_GRAPHICS_INVALID_STRIDE                                             Handle        = 0xC026233C\n\tERROR_GRAPHICS_INVALID_PIXELFORMAT                                        Handle        = 0xC026233D\n\tERROR_GRAPHICS_INVALID_COLORBASIS                                         Handle        = 0xC026233E\n\tERROR_GRAPHICS_INVALID_PIXELVALUEACCESSMODE                               Handle        = 0xC026233F\n\tERROR_GRAPHICS_TARGET_NOT_IN_TOPOLOGY                                     Handle        = 0xC0262340\n\tERROR_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT                         Handle        = 0xC0262341\n\tERROR_GRAPHICS_VIDPN_SOURCE_IN_USE                                        Handle        = 0xC0262342\n\tERROR_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN                                   Handle        = 0xC0262343\n\tERROR_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL                            Handle        = 0xC0262344\n\tERROR_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION               Handle        = 0xC0262345\n\tERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED         Handle        = 0xC0262346\n\tERROR_GRAPHICS_INVALID_GAMMA_RAMP                                         Handle        = 0xC0262347\n\tERROR_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED                                   Handle        = 0xC0262348\n\tERROR_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED                                Handle        = 0xC0262349\n\tERROR_GRAPHICS_MODE_NOT_IN_MODESET                                        Handle        = 0xC026234A\n\tERROR_GRAPHICS_DATASET_IS_EMPTY                                           Handle        = 0x0026234B\n\tERROR_GRAPHICS_NO_MORE_ELEMENTS_IN_DATASET                                Handle        = 0x0026234C\n\tERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON               Handle        = 0xC026234D\n\tERROR_GRAPHICS_INVALID_PATH_CONTENT_TYPE                                  Handle        = 0xC026234E\n\tERROR_GRAPHICS_INVALID_COPYPROTECTION_TYPE                                Handle        = 0xC026234F\n\tERROR_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS                          Handle        = 0xC0262350\n\tERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_PINNED            Handle        = 0x00262351\n\tERROR_GRAPHICS_INVALID_SCANLINE_ORDERING                                  Handle        = 0xC0262352\n\tERROR_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED                               Handle        = 0xC0262353\n\tERROR_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS                           Handle        = 0xC0262354\n\tERROR_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT                                Handle        = 0xC0262355\n\tERROR_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM                             Handle        = 0xC0262356\n\tERROR_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN                          Handle        = 0xC0262357\n\tERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT                  Handle        = 0xC0262358\n\tERROR_GRAPHICS_MAX_NUM_PATHS_REACHED                                      Handle        = 0xC0262359\n\tERROR_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION                         Handle        = 0xC026235A\n\tERROR_GRAPHICS_INVALID_CLIENT_TYPE                                        Handle        = 0xC026235B\n\tERROR_GRAPHICS_CLIENTVIDPN_NOT_SET                                        Handle        = 0xC026235C\n\tERROR_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED                          Handle        = 0xC0262400\n\tERROR_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED                             Handle        = 0xC0262401\n\tERROR_GRAPHICS_UNKNOWN_CHILD_STATUS                                       Handle        = 0x4026242F\n\tERROR_GRAPHICS_NOT_A_LINKED_ADAPTER                                       Handle        = 0xC0262430\n\tERROR_GRAPHICS_LEADLINK_NOT_ENUMERATED                                    Handle        = 0xC0262431\n\tERROR_GRAPHICS_CHAINLINKS_NOT_ENUMERATED                                  Handle        = 0xC0262432\n\tERROR_GRAPHICS_ADAPTER_CHAIN_NOT_READY                                    Handle        = 0xC0262433\n\tERROR_GRAPHICS_CHAINLINKS_NOT_STARTED                                     Handle        = 0xC0262434\n\tERROR_GRAPHICS_CHAINLINKS_NOT_POWERED_ON                                  Handle        = 0xC0262435\n\tERROR_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE                             Handle        = 0xC0262436\n\tERROR_GRAPHICS_LEADLINK_START_DEFERRED                                    Handle        = 0x40262437\n\tERROR_GRAPHICS_NOT_POST_DEVICE_DRIVER                                     Handle        = 0xC0262438\n\tERROR_GRAPHICS_POLLING_TOO_FREQUENTLY                                     Handle        = 0x40262439\n\tERROR_GRAPHICS_START_DEFERRED                                             Handle        = 0x4026243A\n\tERROR_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED                                Handle        = 0xC026243B\n\tERROR_GRAPHICS_DEPENDABLE_CHILD_STATUS                                    Handle        = 0x4026243C\n\tERROR_GRAPHICS_OPM_NOT_SUPPORTED                                          Handle        = 0xC0262500\n\tERROR_GRAPHICS_COPP_NOT_SUPPORTED                                         Handle        = 0xC0262501\n\tERROR_GRAPHICS_UAB_NOT_SUPPORTED                                          Handle        = 0xC0262502\n\tERROR_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS                           Handle        = 0xC0262503\n\tERROR_GRAPHICS_OPM_NO_VIDEO_OUTPUTS_EXIST                                 Handle        = 0xC0262505\n\tERROR_GRAPHICS_OPM_INTERNAL_ERROR                                         Handle        = 0xC026250B\n\tERROR_GRAPHICS_OPM_INVALID_HANDLE                                         Handle        = 0xC026250C\n\tERROR_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH                             Handle        = 0xC026250E\n\tERROR_GRAPHICS_OPM_SPANNING_MODE_ENABLED                                  Handle        = 0xC026250F\n\tERROR_GRAPHICS_OPM_THEATER_MODE_ENABLED                                   Handle        = 0xC0262510\n\tERROR_GRAPHICS_PVP_HFS_FAILED                                             Handle        = 0xC0262511\n\tERROR_GRAPHICS_OPM_INVALID_SRM                                            Handle        = 0xC0262512\n\tERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP                           Handle        = 0xC0262513\n\tERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP                            Handle        = 0xC0262514\n\tERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA                          Handle        = 0xC0262515\n\tERROR_GRAPHICS_OPM_HDCP_SRM_NEVER_SET                                     Handle        = 0xC0262516\n\tERROR_GRAPHICS_OPM_RESOLUTION_TOO_HIGH                                    Handle        = 0xC0262517\n\tERROR_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE                       Handle        = 0xC0262518\n\tERROR_GRAPHICS_OPM_VIDEO_OUTPUT_NO_LONGER_EXISTS                          Handle        = 0xC026251A\n\tERROR_GRAPHICS_OPM_SESSION_TYPE_CHANGE_IN_PROGRESS                        Handle        = 0xC026251B\n\tERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS              Handle        = 0xC026251C\n\tERROR_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST                            Handle        = 0xC026251D\n\tERROR_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR                                  Handle        = 0xC026251E\n\tERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS               Handle        = 0xC026251F\n\tERROR_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED                                Handle        = 0xC0262520\n\tERROR_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST                          Handle        = 0xC0262521\n\tERROR_GRAPHICS_I2C_NOT_SUPPORTED                                          Handle        = 0xC0262580\n\tERROR_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST                                  Handle        = 0xC0262581\n\tERROR_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA                                Handle        = 0xC0262582\n\tERROR_GRAPHICS_I2C_ERROR_RECEIVING_DATA                                   Handle        = 0xC0262583\n\tERROR_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED                                    Handle        = 0xC0262584\n\tERROR_GRAPHICS_DDCCI_INVALID_DATA                                         Handle        = 0xC0262585\n\tERROR_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE          Handle        = 0xC0262586\n\tERROR_GRAPHICS_MCA_INVALID_CAPABILITIES_STRING                            Handle        = 0xC0262587\n\tERROR_GRAPHICS_MCA_INTERNAL_ERROR                                         Handle        = 0xC0262588\n\tERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND                              Handle        = 0xC0262589\n\tERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH                               Handle        = 0xC026258A\n\tERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM                             Handle        = 0xC026258B\n\tERROR_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE                            Handle        = 0xC026258C\n\tERROR_GRAPHICS_MONITOR_NO_LONGER_EXISTS                                   Handle        = 0xC026258D\n\tERROR_GRAPHICS_DDCCI_CURRENT_CURRENT_VALUE_GREATER_THAN_MAXIMUM_VALUE     Handle        = 0xC02625D8\n\tERROR_GRAPHICS_MCA_INVALID_VCP_VERSION                                    Handle        = 0xC02625D9\n\tERROR_GRAPHICS_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION                    Handle        = 0xC02625DA\n\tERROR_GRAPHICS_MCA_MCCS_VERSION_MISMATCH                                  Handle        = 0xC02625DB\n\tERROR_GRAPHICS_MCA_UNSUPPORTED_MCCS_VERSION                               Handle        = 0xC02625DC\n\tERROR_GRAPHICS_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED                       Handle        = 0xC02625DE\n\tERROR_GRAPHICS_MCA_UNSUPPORTED_COLOR_TEMPERATURE                          Handle        = 0xC02625DF\n\tERROR_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED                             Handle        = 0xC02625E0\n\tERROR_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME                      Handle        = 0xC02625E1\n\tERROR_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP                     Handle        = 0xC02625E2\n\tERROR_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED                            Handle        = 0xC02625E3\n\tERROR_GRAPHICS_INVALID_POINTER                                            Handle        = 0xC02625E4\n\tERROR_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE                   Handle        = 0xC02625E5\n\tERROR_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL                                  Handle        = 0xC02625E6\n\tERROR_GRAPHICS_INTERNAL_ERROR                                             Handle        = 0xC02625E7\n\tERROR_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS                            Handle        = 0xC02605E8\n\tNAP_E_INVALID_PACKET                                                      Handle        = 0x80270001\n\tNAP_E_MISSING_SOH                                                         Handle        = 0x80270002\n\tNAP_E_CONFLICTING_ID                                                      Handle        = 0x80270003\n\tNAP_E_NO_CACHED_SOH                                                       Handle        = 0x80270004\n\tNAP_E_STILL_BOUND                                                         Handle        = 0x80270005\n\tNAP_E_NOT_REGISTERED                                                      Handle        = 0x80270006\n\tNAP_E_NOT_INITIALIZED                                                     Handle        = 0x80270007\n\tNAP_E_MISMATCHED_ID                                                       Handle        = 0x80270008\n\tNAP_E_NOT_PENDING                                                         Handle        = 0x80270009\n\tNAP_E_ID_NOT_FOUND                                                        Handle        = 0x8027000A\n\tNAP_E_MAXSIZE_TOO_SMALL                                                   Handle        = 0x8027000B\n\tNAP_E_SERVICE_NOT_RUNNING                                                 Handle        = 0x8027000C\n\tNAP_S_CERT_ALREADY_PRESENT                                                Handle        = 0x0027000D\n\tNAP_E_ENTITY_DISABLED                                                     Handle        = 0x8027000E\n\tNAP_E_NETSH_GROUPPOLICY_ERROR                                             Handle        = 0x8027000F\n\tNAP_E_TOO_MANY_CALLS                                                      Handle        = 0x80270010\n\tNAP_E_SHV_CONFIG_EXISTED                                                  Handle        = 0x80270011\n\tNAP_E_SHV_CONFIG_NOT_FOUND                                                Handle        = 0x80270012\n\tNAP_E_SHV_TIMEOUT                                                         Handle        = 0x80270013\n\tTPM_E_ERROR_MASK                                                          Handle        = 0x80280000\n\tTPM_E_AUTHFAIL                                                            Handle        = 0x80280001\n\tTPM_E_BADINDEX                                                            Handle        = 0x80280002\n\tTPM_E_BAD_PARAMETER                                                       Handle        = 0x80280003\n\tTPM_E_AUDITFAILURE                                                        Handle        = 0x80280004\n\tTPM_E_CLEAR_DISABLED                                                      Handle        = 0x80280005\n\tTPM_E_DEACTIVATED                                                         Handle        = 0x80280006\n\tTPM_E_DISABLED                                                            Handle        = 0x80280007\n\tTPM_E_DISABLED_CMD                                                        Handle        = 0x80280008\n\tTPM_E_FAIL                                                                Handle        = 0x80280009\n\tTPM_E_BAD_ORDINAL                                                         Handle        = 0x8028000A\n\tTPM_E_INSTALL_DISABLED                                                    Handle        = 0x8028000B\n\tTPM_E_INVALID_KEYHANDLE                                                   Handle        = 0x8028000C\n\tTPM_E_KEYNOTFOUND                                                         Handle        = 0x8028000D\n\tTPM_E_INAPPROPRIATE_ENC                                                   Handle        = 0x8028000E\n\tTPM_E_MIGRATEFAIL                                                         Handle        = 0x8028000F\n\tTPM_E_INVALID_PCR_INFO                                                    Handle        = 0x80280010\n\tTPM_E_NOSPACE                                                             Handle        = 0x80280011\n\tTPM_E_NOSRK                                                               Handle        = 0x80280012\n\tTPM_E_NOTSEALED_BLOB                                                      Handle        = 0x80280013\n\tTPM_E_OWNER_SET                                                           Handle        = 0x80280014\n\tTPM_E_RESOURCES                                                           Handle        = 0x80280015\n\tTPM_E_SHORTRANDOM                                                         Handle        = 0x80280016\n\tTPM_E_SIZE                                                                Handle        = 0x80280017\n\tTPM_E_WRONGPCRVAL                                                         Handle        = 0x80280018\n\tTPM_E_BAD_PARAM_SIZE                                                      Handle        = 0x80280019\n\tTPM_E_SHA_THREAD                                                          Handle        = 0x8028001A\n\tTPM_E_SHA_ERROR                                                           Handle        = 0x8028001B\n\tTPM_E_FAILEDSELFTEST                                                      Handle        = 0x8028001C\n\tTPM_E_AUTH2FAIL                                                           Handle        = 0x8028001D\n\tTPM_E_BADTAG                                                              Handle        = 0x8028001E\n\tTPM_E_IOERROR                                                             Handle        = 0x8028001F\n\tTPM_E_ENCRYPT_ERROR                                                       Handle        = 0x80280020\n\tTPM_E_DECRYPT_ERROR                                                       Handle        = 0x80280021\n\tTPM_E_INVALID_AUTHHANDLE                                                  Handle        = 0x80280022\n\tTPM_E_NO_ENDORSEMENT                                                      Handle        = 0x80280023\n\tTPM_E_INVALID_KEYUSAGE                                                    Handle        = 0x80280024\n\tTPM_E_WRONG_ENTITYTYPE                                                    Handle        = 0x80280025\n\tTPM_E_INVALID_POSTINIT                                                    Handle        = 0x80280026\n\tTPM_E_INAPPROPRIATE_SIG                                                   Handle        = 0x80280027\n\tTPM_E_BAD_KEY_PROPERTY                                                    Handle        = 0x80280028\n\tTPM_E_BAD_MIGRATION                                                       Handle        = 0x80280029\n\tTPM_E_BAD_SCHEME                                                          Handle        = 0x8028002A\n\tTPM_E_BAD_DATASIZE                                                        Handle        = 0x8028002B\n\tTPM_E_BAD_MODE                                                            Handle        = 0x8028002C\n\tTPM_E_BAD_PRESENCE                                                        Handle        = 0x8028002D\n\tTPM_E_BAD_VERSION                                                         Handle        = 0x8028002E\n\tTPM_E_NO_WRAP_TRANSPORT                                                   Handle        = 0x8028002F\n\tTPM_E_AUDITFAIL_UNSUCCESSFUL                                              Handle        = 0x80280030\n\tTPM_E_AUDITFAIL_SUCCESSFUL                                                Handle        = 0x80280031\n\tTPM_E_NOTRESETABLE                                                        Handle        = 0x80280032\n\tTPM_E_NOTLOCAL                                                            Handle        = 0x80280033\n\tTPM_E_BAD_TYPE                                                            Handle        = 0x80280034\n\tTPM_E_INVALID_RESOURCE                                                    Handle        = 0x80280035\n\tTPM_E_NOTFIPS                                                             Handle        = 0x80280036\n\tTPM_E_INVALID_FAMILY                                                      Handle        = 0x80280037\n\tTPM_E_NO_NV_PERMISSION                                                    Handle        = 0x80280038\n\tTPM_E_REQUIRES_SIGN                                                       Handle        = 0x80280039\n\tTPM_E_KEY_NOTSUPPORTED                                                    Handle        = 0x8028003A\n\tTPM_E_AUTH_CONFLICT                                                       Handle        = 0x8028003B\n\tTPM_E_AREA_LOCKED                                                         Handle        = 0x8028003C\n\tTPM_E_BAD_LOCALITY                                                        Handle        = 0x8028003D\n\tTPM_E_READ_ONLY                                                           Handle        = 0x8028003E\n\tTPM_E_PER_NOWRITE                                                         Handle        = 0x8028003F\n\tTPM_E_FAMILYCOUNT                                                         Handle        = 0x80280040\n\tTPM_E_WRITE_LOCKED                                                        Handle        = 0x80280041\n\tTPM_E_BAD_ATTRIBUTES                                                      Handle        = 0x80280042\n\tTPM_E_INVALID_STRUCTURE                                                   Handle        = 0x80280043\n\tTPM_E_KEY_OWNER_CONTROL                                                   Handle        = 0x80280044\n\tTPM_E_BAD_COUNTER                                                         Handle        = 0x80280045\n\tTPM_E_NOT_FULLWRITE                                                       Handle        = 0x80280046\n\tTPM_E_CONTEXT_GAP                                                         Handle        = 0x80280047\n\tTPM_E_MAXNVWRITES                                                         Handle        = 0x80280048\n\tTPM_E_NOOPERATOR                                                          Handle        = 0x80280049\n\tTPM_E_RESOURCEMISSING                                                     Handle        = 0x8028004A\n\tTPM_E_DELEGATE_LOCK                                                       Handle        = 0x8028004B\n\tTPM_E_DELEGATE_FAMILY                                                     Handle        = 0x8028004C\n\tTPM_E_DELEGATE_ADMIN                                                      Handle        = 0x8028004D\n\tTPM_E_TRANSPORT_NOTEXCLUSIVE                                              Handle        = 0x8028004E\n\tTPM_E_OWNER_CONTROL                                                       Handle        = 0x8028004F\n\tTPM_E_DAA_RESOURCES                                                       Handle        = 0x80280050\n\tTPM_E_DAA_INPUT_DATA0                                                     Handle        = 0x80280051\n\tTPM_E_DAA_INPUT_DATA1                                                     Handle        = 0x80280052\n\tTPM_E_DAA_ISSUER_SETTINGS                                                 Handle        = 0x80280053\n\tTPM_E_DAA_TPM_SETTINGS                                                    Handle        = 0x80280054\n\tTPM_E_DAA_STAGE                                                           Handle        = 0x80280055\n\tTPM_E_DAA_ISSUER_VALIDITY                                                 Handle        = 0x80280056\n\tTPM_E_DAA_WRONG_W                                                         Handle        = 0x80280057\n\tTPM_E_BAD_HANDLE                                                          Handle        = 0x80280058\n\tTPM_E_BAD_DELEGATE                                                        Handle        = 0x80280059\n\tTPM_E_BADCONTEXT                                                          Handle        = 0x8028005A\n\tTPM_E_TOOMANYCONTEXTS                                                     Handle        = 0x8028005B\n\tTPM_E_MA_TICKET_SIGNATURE                                                 Handle        = 0x8028005C\n\tTPM_E_MA_DESTINATION                                                      Handle        = 0x8028005D\n\tTPM_E_MA_SOURCE                                                           Handle        = 0x8028005E\n\tTPM_E_MA_AUTHORITY                                                        Handle        = 0x8028005F\n\tTPM_E_PERMANENTEK                                                         Handle        = 0x80280061\n\tTPM_E_BAD_SIGNATURE                                                       Handle        = 0x80280062\n\tTPM_E_NOCONTEXTSPACE                                                      Handle        = 0x80280063\n\tTPM_20_E_ASYMMETRIC                                                       Handle        = 0x80280081\n\tTPM_20_E_ATTRIBUTES                                                       Handle        = 0x80280082\n\tTPM_20_E_HASH                                                             Handle        = 0x80280083\n\tTPM_20_E_VALUE                                                            Handle        = 0x80280084\n\tTPM_20_E_HIERARCHY                                                        Handle        = 0x80280085\n\tTPM_20_E_KEY_SIZE                                                         Handle        = 0x80280087\n\tTPM_20_E_MGF                                                              Handle        = 0x80280088\n\tTPM_20_E_MODE                                                             Handle        = 0x80280089\n\tTPM_20_E_TYPE                                                             Handle        = 0x8028008A\n\tTPM_20_E_HANDLE                                                           Handle        = 0x8028008B\n\tTPM_20_E_KDF                                                              Handle        = 0x8028008C\n\tTPM_20_E_RANGE                                                            Handle        = 0x8028008D\n\tTPM_20_E_AUTH_FAIL                                                        Handle        = 0x8028008E\n\tTPM_20_E_NONCE                                                            Handle        = 0x8028008F\n\tTPM_20_E_PP                                                               Handle        = 0x80280090\n\tTPM_20_E_SCHEME                                                           Handle        = 0x80280092\n\tTPM_20_E_SIZE                                                             Handle        = 0x80280095\n\tTPM_20_E_SYMMETRIC                                                        Handle        = 0x80280096\n\tTPM_20_E_TAG                                                              Handle        = 0x80280097\n\tTPM_20_E_SELECTOR                                                         Handle        = 0x80280098\n\tTPM_20_E_INSUFFICIENT                                                     Handle        = 0x8028009A\n\tTPM_20_E_SIGNATURE                                                        Handle        = 0x8028009B\n\tTPM_20_E_KEY                                                              Handle        = 0x8028009C\n\tTPM_20_E_POLICY_FAIL                                                      Handle        = 0x8028009D\n\tTPM_20_E_INTEGRITY                                                        Handle        = 0x8028009F\n\tTPM_20_E_TICKET                                                           Handle        = 0x802800A0\n\tTPM_20_E_RESERVED_BITS                                                    Handle        = 0x802800A1\n\tTPM_20_E_BAD_AUTH                                                         Handle        = 0x802800A2\n\tTPM_20_E_EXPIRED                                                          Handle        = 0x802800A3\n\tTPM_20_E_POLICY_CC                                                        Handle        = 0x802800A4\n\tTPM_20_E_BINDING                                                          Handle        = 0x802800A5\n\tTPM_20_E_CURVE                                                            Handle        = 0x802800A6\n\tTPM_20_E_ECC_POINT                                                        Handle        = 0x802800A7\n\tTPM_20_E_INITIALIZE                                                       Handle        = 0x80280100\n\tTPM_20_E_FAILURE                                                          Handle        = 0x80280101\n\tTPM_20_E_SEQUENCE                                                         Handle        = 0x80280103\n\tTPM_20_E_PRIVATE                                                          Handle        = 0x8028010B\n\tTPM_20_E_HMAC                                                             Handle        = 0x80280119\n\tTPM_20_E_DISABLED                                                         Handle        = 0x80280120\n\tTPM_20_E_EXCLUSIVE                                                        Handle        = 0x80280121\n\tTPM_20_E_ECC_CURVE                                                        Handle        = 0x80280123\n\tTPM_20_E_AUTH_TYPE                                                        Handle        = 0x80280124\n\tTPM_20_E_AUTH_MISSING                                                     Handle        = 0x80280125\n\tTPM_20_E_POLICY                                                           Handle        = 0x80280126\n\tTPM_20_E_PCR                                                              Handle        = 0x80280127\n\tTPM_20_E_PCR_CHANGED                                                      Handle        = 0x80280128\n\tTPM_20_E_UPGRADE                                                          Handle        = 0x8028012D\n\tTPM_20_E_TOO_MANY_CONTEXTS                                                Handle        = 0x8028012E\n\tTPM_20_E_AUTH_UNAVAILABLE                                                 Handle        = 0x8028012F\n\tTPM_20_E_REBOOT                                                           Handle        = 0x80280130\n\tTPM_20_E_UNBALANCED                                                       Handle        = 0x80280131\n\tTPM_20_E_COMMAND_SIZE                                                     Handle        = 0x80280142\n\tTPM_20_E_COMMAND_CODE                                                     Handle        = 0x80280143\n\tTPM_20_E_AUTHSIZE                                                         Handle        = 0x80280144\n\tTPM_20_E_AUTH_CONTEXT                                                     Handle        = 0x80280145\n\tTPM_20_E_NV_RANGE                                                         Handle        = 0x80280146\n\tTPM_20_E_NV_SIZE                                                          Handle        = 0x80280147\n\tTPM_20_E_NV_LOCKED                                                        Handle        = 0x80280148\n\tTPM_20_E_NV_AUTHORIZATION                                                 Handle        = 0x80280149\n\tTPM_20_E_NV_UNINITIALIZED                                                 Handle        = 0x8028014A\n\tTPM_20_E_NV_SPACE                                                         Handle        = 0x8028014B\n\tTPM_20_E_NV_DEFINED                                                       Handle        = 0x8028014C\n\tTPM_20_E_BAD_CONTEXT                                                      Handle        = 0x80280150\n\tTPM_20_E_CPHASH                                                           Handle        = 0x80280151\n\tTPM_20_E_PARENT                                                           Handle        = 0x80280152\n\tTPM_20_E_NEEDS_TEST                                                       Handle        = 0x80280153\n\tTPM_20_E_NO_RESULT                                                        Handle        = 0x80280154\n\tTPM_20_E_SENSITIVE                                                        Handle        = 0x80280155\n\tTPM_E_COMMAND_BLOCKED                                                     Handle        = 0x80280400\n\tTPM_E_INVALID_HANDLE                                                      Handle        = 0x80280401\n\tTPM_E_DUPLICATE_VHANDLE                                                   Handle        = 0x80280402\n\tTPM_E_EMBEDDED_COMMAND_BLOCKED                                            Handle        = 0x80280403\n\tTPM_E_EMBEDDED_COMMAND_UNSUPPORTED                                        Handle        = 0x80280404\n\tTPM_E_RETRY                                                               Handle        = 0x80280800\n\tTPM_E_NEEDS_SELFTEST                                                      Handle        = 0x80280801\n\tTPM_E_DOING_SELFTEST                                                      Handle        = 0x80280802\n\tTPM_E_DEFEND_LOCK_RUNNING                                                 Handle        = 0x80280803\n\tTPM_20_E_CONTEXT_GAP                                                      Handle        = 0x80280901\n\tTPM_20_E_OBJECT_MEMORY                                                    Handle        = 0x80280902\n\tTPM_20_E_SESSION_MEMORY                                                   Handle        = 0x80280903\n\tTPM_20_E_MEMORY                                                           Handle        = 0x80280904\n\tTPM_20_E_SESSION_HANDLES                                                  Handle        = 0x80280905\n\tTPM_20_E_OBJECT_HANDLES                                                   Handle        = 0x80280906\n\tTPM_20_E_LOCALITY                                                         Handle        = 0x80280907\n\tTPM_20_E_YIELDED                                                          Handle        = 0x80280908\n\tTPM_20_E_CANCELED                                                         Handle        = 0x80280909\n\tTPM_20_E_TESTING                                                          Handle        = 0x8028090A\n\tTPM_20_E_NV_RATE                                                          Handle        = 0x80280920\n\tTPM_20_E_LOCKOUT                                                          Handle        = 0x80280921\n\tTPM_20_E_RETRY                                                            Handle        = 0x80280922\n\tTPM_20_E_NV_UNAVAILABLE                                                   Handle        = 0x80280923\n\tTBS_E_INTERNAL_ERROR                                                      Handle        = 0x80284001\n\tTBS_E_BAD_PARAMETER                                                       Handle        = 0x80284002\n\tTBS_E_INVALID_OUTPUT_POINTER                                              Handle        = 0x80284003\n\tTBS_E_INVALID_CONTEXT                                                     Handle        = 0x80284004\n\tTBS_E_INSUFFICIENT_BUFFER                                                 Handle        = 0x80284005\n\tTBS_E_IOERROR                                                             Handle        = 0x80284006\n\tTBS_E_INVALID_CONTEXT_PARAM                                               Handle        = 0x80284007\n\tTBS_E_SERVICE_NOT_RUNNING                                                 Handle        = 0x80284008\n\tTBS_E_TOO_MANY_TBS_CONTEXTS                                               Handle        = 0x80284009\n\tTBS_E_TOO_MANY_RESOURCES                                                  Handle        = 0x8028400A\n\tTBS_E_SERVICE_START_PENDING                                               Handle        = 0x8028400B\n\tTBS_E_PPI_NOT_SUPPORTED                                                   Handle        = 0x8028400C\n\tTBS_E_COMMAND_CANCELED                                                    Handle        = 0x8028400D\n\tTBS_E_BUFFER_TOO_LARGE                                                    Handle        = 0x8028400E\n\tTBS_E_TPM_NOT_FOUND                                                       Handle        = 0x8028400F\n\tTBS_E_SERVICE_DISABLED                                                    Handle        = 0x80284010\n\tTBS_E_NO_EVENT_LOG                                                        Handle        = 0x80284011\n\tTBS_E_ACCESS_DENIED                                                       Handle        = 0x80284012\n\tTBS_E_PROVISIONING_NOT_ALLOWED                                            Handle        = 0x80284013\n\tTBS_E_PPI_FUNCTION_UNSUPPORTED                                            Handle        = 0x80284014\n\tTBS_E_OWNERAUTH_NOT_FOUND                                                 Handle        = 0x80284015\n\tTBS_E_PROVISIONING_INCOMPLETE                                             Handle        = 0x80284016\n\tTPMAPI_E_INVALID_STATE                                                    Handle        = 0x80290100\n\tTPMAPI_E_NOT_ENOUGH_DATA                                                  Handle        = 0x80290101\n\tTPMAPI_E_TOO_MUCH_DATA                                                    Handle        = 0x80290102\n\tTPMAPI_E_INVALID_OUTPUT_POINTER                                           Handle        = 0x80290103\n\tTPMAPI_E_INVALID_PARAMETER                                                Handle        = 0x80290104\n\tTPMAPI_E_OUT_OF_MEMORY                                                    Handle        = 0x80290105\n\tTPMAPI_E_BUFFER_TOO_SMALL                                                 Handle        = 0x80290106\n\tTPMAPI_E_INTERNAL_ERROR                                                   Handle        = 0x80290107\n\tTPMAPI_E_ACCESS_DENIED                                                    Handle        = 0x80290108\n\tTPMAPI_E_AUTHORIZATION_FAILED                                             Handle        = 0x80290109\n\tTPMAPI_E_INVALID_CONTEXT_HANDLE                                           Handle        = 0x8029010A\n\tTPMAPI_E_TBS_COMMUNICATION_ERROR                                          Handle        = 0x8029010B\n\tTPMAPI_E_TPM_COMMAND_ERROR                                                Handle        = 0x8029010C\n\tTPMAPI_E_MESSAGE_TOO_LARGE                                                Handle        = 0x8029010D\n\tTPMAPI_E_INVALID_ENCODING                                                 Handle        = 0x8029010E\n\tTPMAPI_E_INVALID_KEY_SIZE                                                 Handle        = 0x8029010F\n\tTPMAPI_E_ENCRYPTION_FAILED                                                Handle        = 0x80290110\n\tTPMAPI_E_INVALID_KEY_PARAMS                                               Handle        = 0x80290111\n\tTPMAPI_E_INVALID_MIGRATION_AUTHORIZATION_BLOB                             Handle        = 0x80290112\n\tTPMAPI_E_INVALID_PCR_INDEX                                                Handle        = 0x80290113\n\tTPMAPI_E_INVALID_DELEGATE_BLOB                                            Handle        = 0x80290114\n\tTPMAPI_E_INVALID_CONTEXT_PARAMS                                           Handle        = 0x80290115\n\tTPMAPI_E_INVALID_KEY_BLOB                                                 Handle        = 0x80290116\n\tTPMAPI_E_INVALID_PCR_DATA                                                 Handle        = 0x80290117\n\tTPMAPI_E_INVALID_OWNER_AUTH                                               Handle        = 0x80290118\n\tTPMAPI_E_FIPS_RNG_CHECK_FAILED                                            Handle        = 0x80290119\n\tTPMAPI_E_EMPTY_TCG_LOG                                                    Handle        = 0x8029011A\n\tTPMAPI_E_INVALID_TCG_LOG_ENTRY                                            Handle        = 0x8029011B\n\tTPMAPI_E_TCG_SEPARATOR_ABSENT                                             Handle        = 0x8029011C\n\tTPMAPI_E_TCG_INVALID_DIGEST_ENTRY                                         Handle        = 0x8029011D\n\tTPMAPI_E_POLICY_DENIES_OPERATION                                          Handle        = 0x8029011E\n\tTPMAPI_E_NV_BITS_NOT_DEFINED                                              Handle        = 0x8029011F\n\tTPMAPI_E_NV_BITS_NOT_READY                                                Handle        = 0x80290120\n\tTPMAPI_E_SEALING_KEY_NOT_AVAILABLE                                        Handle        = 0x80290121\n\tTPMAPI_E_NO_AUTHORIZATION_CHAIN_FOUND                                     Handle        = 0x80290122\n\tTPMAPI_E_SVN_COUNTER_NOT_AVAILABLE                                        Handle        = 0x80290123\n\tTPMAPI_E_OWNER_AUTH_NOT_NULL                                              Handle        = 0x80290124\n\tTPMAPI_E_ENDORSEMENT_AUTH_NOT_NULL                                        Handle        = 0x80290125\n\tTPMAPI_E_AUTHORIZATION_REVOKED                                            Handle        = 0x80290126\n\tTPMAPI_E_MALFORMED_AUTHORIZATION_KEY                                      Handle        = 0x80290127\n\tTPMAPI_E_AUTHORIZING_KEY_NOT_SUPPORTED                                    Handle        = 0x80290128\n\tTPMAPI_E_INVALID_AUTHORIZATION_SIGNATURE                                  Handle        = 0x80290129\n\tTPMAPI_E_MALFORMED_AUTHORIZATION_POLICY                                   Handle        = 0x8029012A\n\tTPMAPI_E_MALFORMED_AUTHORIZATION_OTHER                                    Handle        = 0x8029012B\n\tTPMAPI_E_SEALING_KEY_CHANGED                                              Handle        = 0x8029012C\n\tTBSIMP_E_BUFFER_TOO_SMALL                                                 Handle        = 0x80290200\n\tTBSIMP_E_CLEANUP_FAILED                                                   Handle        = 0x80290201\n\tTBSIMP_E_INVALID_CONTEXT_HANDLE                                           Handle        = 0x80290202\n\tTBSIMP_E_INVALID_CONTEXT_PARAM                                            Handle        = 0x80290203\n\tTBSIMP_E_TPM_ERROR                                                        Handle        = 0x80290204\n\tTBSIMP_E_HASH_BAD_KEY                                                     Handle        = 0x80290205\n\tTBSIMP_E_DUPLICATE_VHANDLE                                                Handle        = 0x80290206\n\tTBSIMP_E_INVALID_OUTPUT_POINTER                                           Handle        = 0x80290207\n\tTBSIMP_E_INVALID_PARAMETER                                                Handle        = 0x80290208\n\tTBSIMP_E_RPC_INIT_FAILED                                                  Handle        = 0x80290209\n\tTBSIMP_E_SCHEDULER_NOT_RUNNING                                            Handle        = 0x8029020A\n\tTBSIMP_E_COMMAND_CANCELED                                                 Handle        = 0x8029020B\n\tTBSIMP_E_OUT_OF_MEMORY                                                    Handle        = 0x8029020C\n\tTBSIMP_E_LIST_NO_MORE_ITEMS                                               Handle        = 0x8029020D\n\tTBSIMP_E_LIST_NOT_FOUND                                                   Handle        = 0x8029020E\n\tTBSIMP_E_NOT_ENOUGH_SPACE                                                 Handle        = 0x8029020F\n\tTBSIMP_E_NOT_ENOUGH_TPM_CONTEXTS                                          Handle        = 0x80290210\n\tTBSIMP_E_COMMAND_FAILED                                                   Handle        = 0x80290211\n\tTBSIMP_E_UNKNOWN_ORDINAL                                                  Handle        = 0x80290212\n\tTBSIMP_E_RESOURCE_EXPIRED                                                 Handle        = 0x80290213\n\tTBSIMP_E_INVALID_RESOURCE                                                 Handle        = 0x80290214\n\tTBSIMP_E_NOTHING_TO_UNLOAD                                                Handle        = 0x80290215\n\tTBSIMP_E_HASH_TABLE_FULL                                                  Handle        = 0x80290216\n\tTBSIMP_E_TOO_MANY_TBS_CONTEXTS                                            Handle        = 0x80290217\n\tTBSIMP_E_TOO_MANY_RESOURCES                                               Handle        = 0x80290218\n\tTBSIMP_E_PPI_NOT_SUPPORTED                                                Handle        = 0x80290219\n\tTBSIMP_E_TPM_INCOMPATIBLE                                                 Handle        = 0x8029021A\n\tTBSIMP_E_NO_EVENT_LOG                                                     Handle        = 0x8029021B\n\tTPM_E_PPI_ACPI_FAILURE                                                    Handle        = 0x80290300\n\tTPM_E_PPI_USER_ABORT                                                      Handle        = 0x80290301\n\tTPM_E_PPI_BIOS_FAILURE                                                    Handle        = 0x80290302\n\tTPM_E_PPI_NOT_SUPPORTED                                                   Handle        = 0x80290303\n\tTPM_E_PPI_BLOCKED_IN_BIOS                                                 Handle        = 0x80290304\n\tTPM_E_PCP_ERROR_MASK                                                      Handle        = 0x80290400\n\tTPM_E_PCP_DEVICE_NOT_READY                                                Handle        = 0x80290401\n\tTPM_E_PCP_INVALID_HANDLE                                                  Handle        = 0x80290402\n\tTPM_E_PCP_INVALID_PARAMETER                                               Handle        = 0x80290403\n\tTPM_E_PCP_FLAG_NOT_SUPPORTED                                              Handle        = 0x80290404\n\tTPM_E_PCP_NOT_SUPPORTED                                                   Handle        = 0x80290405\n\tTPM_E_PCP_BUFFER_TOO_SMALL                                                Handle        = 0x80290406\n\tTPM_E_PCP_INTERNAL_ERROR                                                  Handle        = 0x80290407\n\tTPM_E_PCP_AUTHENTICATION_FAILED                                           Handle        = 0x80290408\n\tTPM_E_PCP_AUTHENTICATION_IGNORED                                          Handle        = 0x80290409\n\tTPM_E_PCP_POLICY_NOT_FOUND                                                Handle        = 0x8029040A\n\tTPM_E_PCP_PROFILE_NOT_FOUND                                               Handle        = 0x8029040B\n\tTPM_E_PCP_VALIDATION_FAILED                                               Handle        = 0x8029040C\n\tTPM_E_PCP_WRONG_PARENT                                                    Handle        = 0x8029040E\n\tTPM_E_KEY_NOT_LOADED                                                      Handle        = 0x8029040F\n\tTPM_E_NO_KEY_CERTIFICATION                                                Handle        = 0x80290410\n\tTPM_E_KEY_NOT_FINALIZED                                                   Handle        = 0x80290411\n\tTPM_E_ATTESTATION_CHALLENGE_NOT_SET                                       Handle        = 0x80290412\n\tTPM_E_NOT_PCR_BOUND                                                       Handle        = 0x80290413\n\tTPM_E_KEY_ALREADY_FINALIZED                                               Handle        = 0x80290414\n\tTPM_E_KEY_USAGE_POLICY_NOT_SUPPORTED                                      Handle        = 0x80290415\n\tTPM_E_KEY_USAGE_POLICY_INVALID                                            Handle        = 0x80290416\n\tTPM_E_SOFT_KEY_ERROR                                                      Handle        = 0x80290417\n\tTPM_E_KEY_NOT_AUTHENTICATED                                               Handle        = 0x80290418\n\tTPM_E_PCP_KEY_NOT_AIK                                                     Handle        = 0x80290419\n\tTPM_E_KEY_NOT_SIGNING_KEY                                                 Handle        = 0x8029041A\n\tTPM_E_LOCKED_OUT                                                          Handle        = 0x8029041B\n\tTPM_E_CLAIM_TYPE_NOT_SUPPORTED                                            Handle        = 0x8029041C\n\tTPM_E_VERSION_NOT_SUPPORTED                                               Handle        = 0x8029041D\n\tTPM_E_BUFFER_LENGTH_MISMATCH                                              Handle        = 0x8029041E\n\tTPM_E_PCP_IFX_RSA_KEY_CREATION_BLOCKED                                    Handle        = 0x8029041F\n\tTPM_E_PCP_TICKET_MISSING                                                  Handle        = 0x80290420\n\tTPM_E_PCP_RAW_POLICY_NOT_SUPPORTED                                        Handle        = 0x80290421\n\tTPM_E_PCP_KEY_HANDLE_INVALIDATED                                          Handle        = 0x80290422\n\tTPM_E_PCP_UNSUPPORTED_PSS_SALT                                            Handle        = 0x40290423\n\tTPM_E_ZERO_EXHAUST_ENABLED                                                Handle        = 0x80290500\n\tPLA_E_DCS_NOT_FOUND                                                       Handle        = 0x80300002\n\tPLA_E_DCS_IN_USE                                                          Handle        = 0x803000AA\n\tPLA_E_TOO_MANY_FOLDERS                                                    Handle        = 0x80300045\n\tPLA_E_NO_MIN_DISK                                                         Handle        = 0x80300070\n\tPLA_E_DCS_ALREADY_EXISTS                                                  Handle        = 0x803000B7\n\tPLA_S_PROPERTY_IGNORED                                                    Handle        = 0x00300100\n\tPLA_E_PROPERTY_CONFLICT                                                   Handle        = 0x80300101\n\tPLA_E_DCS_SINGLETON_REQUIRED                                              Handle        = 0x80300102\n\tPLA_E_CREDENTIALS_REQUIRED                                                Handle        = 0x80300103\n\tPLA_E_DCS_NOT_RUNNING                                                     Handle        = 0x80300104\n\tPLA_E_CONFLICT_INCL_EXCL_API                                              Handle        = 0x80300105\n\tPLA_E_NETWORK_EXE_NOT_VALID                                               Handle        = 0x80300106\n\tPLA_E_EXE_ALREADY_CONFIGURED                                              Handle        = 0x80300107\n\tPLA_E_EXE_PATH_NOT_VALID                                                  Handle        = 0x80300108\n\tPLA_E_DC_ALREADY_EXISTS                                                   Handle        = 0x80300109\n\tPLA_E_DCS_START_WAIT_TIMEOUT                                              Handle        = 0x8030010A\n\tPLA_E_DC_START_WAIT_TIMEOUT                                               Handle        = 0x8030010B\n\tPLA_E_REPORT_WAIT_TIMEOUT                                                 Handle        = 0x8030010C\n\tPLA_E_NO_DUPLICATES                                                       Handle        = 0x8030010D\n\tPLA_E_EXE_FULL_PATH_REQUIRED                                              Handle        = 0x8030010E\n\tPLA_E_INVALID_SESSION_NAME                                                Handle        = 0x8030010F\n\tPLA_E_PLA_CHANNEL_NOT_ENABLED                                             Handle        = 0x80300110\n\tPLA_E_TASKSCHED_CHANNEL_NOT_ENABLED                                       Handle        = 0x80300111\n\tPLA_E_RULES_MANAGER_FAILED                                                Handle        = 0x80300112\n\tPLA_E_CABAPI_FAILURE                                                      Handle        = 0x80300113\n\tFVE_E_LOCKED_VOLUME                                                       Handle        = 0x80310000\n\tFVE_E_NOT_ENCRYPTED                                                       Handle        = 0x80310001\n\tFVE_E_NO_TPM_BIOS                                                         Handle        = 0x80310002\n\tFVE_E_NO_MBR_METRIC                                                       Handle        = 0x80310003\n\tFVE_E_NO_BOOTSECTOR_METRIC                                                Handle        = 0x80310004\n\tFVE_E_NO_BOOTMGR_METRIC                                                   Handle        = 0x80310005\n\tFVE_E_WRONG_BOOTMGR                                                       Handle        = 0x80310006\n\tFVE_E_SECURE_KEY_REQUIRED                                                 Handle        = 0x80310007\n\tFVE_E_NOT_ACTIVATED                                                       Handle        = 0x80310008\n\tFVE_E_ACTION_NOT_ALLOWED                                                  Handle        = 0x80310009\n\tFVE_E_AD_SCHEMA_NOT_INSTALLED                                             Handle        = 0x8031000A\n\tFVE_E_AD_INVALID_DATATYPE                                                 Handle        = 0x8031000B\n\tFVE_E_AD_INVALID_DATASIZE                                                 Handle        = 0x8031000C\n\tFVE_E_AD_NO_VALUES                                                        Handle        = 0x8031000D\n\tFVE_E_AD_ATTR_NOT_SET                                                     Handle        = 0x8031000E\n\tFVE_E_AD_GUID_NOT_FOUND                                                   Handle        = 0x8031000F\n\tFVE_E_BAD_INFORMATION                                                     Handle        = 0x80310010\n\tFVE_E_TOO_SMALL                                                           Handle        = 0x80310011\n\tFVE_E_SYSTEM_VOLUME                                                       Handle        = 0x80310012\n\tFVE_E_FAILED_WRONG_FS                                                     Handle        = 0x80310013\n\tFVE_E_BAD_PARTITION_SIZE                                                  Handle        = 0x80310014\n\tFVE_E_NOT_SUPPORTED                                                       Handle        = 0x80310015\n\tFVE_E_BAD_DATA                                                            Handle        = 0x80310016\n\tFVE_E_VOLUME_NOT_BOUND                                                    Handle        = 0x80310017\n\tFVE_E_TPM_NOT_OWNED                                                       Handle        = 0x80310018\n\tFVE_E_NOT_DATA_VOLUME                                                     Handle        = 0x80310019\n\tFVE_E_AD_INSUFFICIENT_BUFFER                                              Handle        = 0x8031001A\n\tFVE_E_CONV_READ                                                           Handle        = 0x8031001B\n\tFVE_E_CONV_WRITE                                                          Handle        = 0x8031001C\n\tFVE_E_KEY_REQUIRED                                                        Handle        = 0x8031001D\n\tFVE_E_CLUSTERING_NOT_SUPPORTED                                            Handle        = 0x8031001E\n\tFVE_E_VOLUME_BOUND_ALREADY                                                Handle        = 0x8031001F\n\tFVE_E_OS_NOT_PROTECTED                                                    Handle        = 0x80310020\n\tFVE_E_PROTECTION_DISABLED                                                 Handle        = 0x80310021\n\tFVE_E_RECOVERY_KEY_REQUIRED                                               Handle        = 0x80310022\n\tFVE_E_FOREIGN_VOLUME                                                      Handle        = 0x80310023\n\tFVE_E_OVERLAPPED_UPDATE                                                   Handle        = 0x80310024\n\tFVE_E_TPM_SRK_AUTH_NOT_ZERO                                               Handle        = 0x80310025\n\tFVE_E_FAILED_SECTOR_SIZE                                                  Handle        = 0x80310026\n\tFVE_E_FAILED_AUTHENTICATION                                               Handle        = 0x80310027\n\tFVE_E_NOT_OS_VOLUME                                                       Handle        = 0x80310028\n\tFVE_E_AUTOUNLOCK_ENABLED                                                  Handle        = 0x80310029\n\tFVE_E_WRONG_BOOTSECTOR                                                    Handle        = 0x8031002A\n\tFVE_E_WRONG_SYSTEM_FS                                                     Handle        = 0x8031002B\n\tFVE_E_POLICY_PASSWORD_REQUIRED                                            Handle        = 0x8031002C\n\tFVE_E_CANNOT_SET_FVEK_ENCRYPTED                                           Handle        = 0x8031002D\n\tFVE_E_CANNOT_ENCRYPT_NO_KEY                                               Handle        = 0x8031002E\n\tFVE_E_BOOTABLE_CDDVD                                                      Handle        = 0x80310030\n\tFVE_E_PROTECTOR_EXISTS                                                    Handle        = 0x80310031\n\tFVE_E_RELATIVE_PATH                                                       Handle        = 0x80310032\n\tFVE_E_PROTECTOR_NOT_FOUND                                                 Handle        = 0x80310033\n\tFVE_E_INVALID_KEY_FORMAT                                                  Handle        = 0x80310034\n\tFVE_E_INVALID_PASSWORD_FORMAT                                             Handle        = 0x80310035\n\tFVE_E_FIPS_RNG_CHECK_FAILED                                               Handle        = 0x80310036\n\tFVE_E_FIPS_PREVENTS_RECOVERY_PASSWORD                                     Handle        = 0x80310037\n\tFVE_E_FIPS_PREVENTS_EXTERNAL_KEY_EXPORT                                   Handle        = 0x80310038\n\tFVE_E_NOT_DECRYPTED                                                       Handle        = 0x80310039\n\tFVE_E_INVALID_PROTECTOR_TYPE                                              Handle        = 0x8031003A\n\tFVE_E_NO_PROTECTORS_TO_TEST                                               Handle        = 0x8031003B\n\tFVE_E_KEYFILE_NOT_FOUND                                                   Handle        = 0x8031003C\n\tFVE_E_KEYFILE_INVALID                                                     Handle        = 0x8031003D\n\tFVE_E_KEYFILE_NO_VMK                                                      Handle        = 0x8031003E\n\tFVE_E_TPM_DISABLED                                                        Handle        = 0x8031003F\n\tFVE_E_NOT_ALLOWED_IN_SAFE_MODE                                            Handle        = 0x80310040\n\tFVE_E_TPM_INVALID_PCR                                                     Handle        = 0x80310041\n\tFVE_E_TPM_NO_VMK                                                          Handle        = 0x80310042\n\tFVE_E_PIN_INVALID                                                         Handle        = 0x80310043\n\tFVE_E_AUTH_INVALID_APPLICATION                                            Handle        = 0x80310044\n\tFVE_E_AUTH_INVALID_CONFIG                                                 Handle        = 0x80310045\n\tFVE_E_FIPS_DISABLE_PROTECTION_NOT_ALLOWED                                 Handle        = 0x80310046\n\tFVE_E_FS_NOT_EXTENDED                                                     Handle        = 0x80310047\n\tFVE_E_FIRMWARE_TYPE_NOT_SUPPORTED                                         Handle        = 0x80310048\n\tFVE_E_NO_LICENSE                                                          Handle        = 0x80310049\n\tFVE_E_NOT_ON_STACK                                                        Handle        = 0x8031004A\n\tFVE_E_FS_MOUNTED                                                          Handle        = 0x8031004B\n\tFVE_E_TOKEN_NOT_IMPERSONATED                                              Handle        = 0x8031004C\n\tFVE_E_DRY_RUN_FAILED                                                      Handle        = 0x8031004D\n\tFVE_E_REBOOT_REQUIRED                                                     Handle        = 0x8031004E\n\tFVE_E_DEBUGGER_ENABLED                                                    Handle        = 0x8031004F\n\tFVE_E_RAW_ACCESS                                                          Handle        = 0x80310050\n\tFVE_E_RAW_BLOCKED                                                         Handle        = 0x80310051\n\tFVE_E_BCD_APPLICATIONS_PATH_INCORRECT                                     Handle        = 0x80310052\n\tFVE_E_NOT_ALLOWED_IN_VERSION                                              Handle        = 0x80310053\n\tFVE_E_NO_AUTOUNLOCK_MASTER_KEY                                            Handle        = 0x80310054\n\tFVE_E_MOR_FAILED                                                          Handle        = 0x80310055\n\tFVE_E_HIDDEN_VOLUME                                                       Handle        = 0x80310056\n\tFVE_E_TRANSIENT_STATE                                                     Handle        = 0x80310057\n\tFVE_E_PUBKEY_NOT_ALLOWED                                                  Handle        = 0x80310058\n\tFVE_E_VOLUME_HANDLE_OPEN                                                  Handle        = 0x80310059\n\tFVE_E_NO_FEATURE_LICENSE                                                  Handle        = 0x8031005A\n\tFVE_E_INVALID_STARTUP_OPTIONS                                             Handle        = 0x8031005B\n\tFVE_E_POLICY_RECOVERY_PASSWORD_NOT_ALLOWED                                Handle        = 0x8031005C\n\tFVE_E_POLICY_RECOVERY_PASSWORD_REQUIRED                                   Handle        = 0x8031005D\n\tFVE_E_POLICY_RECOVERY_KEY_NOT_ALLOWED                                     Handle        = 0x8031005E\n\tFVE_E_POLICY_RECOVERY_KEY_REQUIRED                                        Handle        = 0x8031005F\n\tFVE_E_POLICY_STARTUP_PIN_NOT_ALLOWED                                      Handle        = 0x80310060\n\tFVE_E_POLICY_STARTUP_PIN_REQUIRED                                         Handle        = 0x80310061\n\tFVE_E_POLICY_STARTUP_KEY_NOT_ALLOWED                                      Handle        = 0x80310062\n\tFVE_E_POLICY_STARTUP_KEY_REQUIRED                                         Handle        = 0x80310063\n\tFVE_E_POLICY_STARTUP_PIN_KEY_NOT_ALLOWED                                  Handle        = 0x80310064\n\tFVE_E_POLICY_STARTUP_PIN_KEY_REQUIRED                                     Handle        = 0x80310065\n\tFVE_E_POLICY_STARTUP_TPM_NOT_ALLOWED                                      Handle        = 0x80310066\n\tFVE_E_POLICY_STARTUP_TPM_REQUIRED                                         Handle        = 0x80310067\n\tFVE_E_POLICY_INVALID_PIN_LENGTH                                           Handle        = 0x80310068\n\tFVE_E_KEY_PROTECTOR_NOT_SUPPORTED                                         Handle        = 0x80310069\n\tFVE_E_POLICY_PASSPHRASE_NOT_ALLOWED                                       Handle        = 0x8031006A\n\tFVE_E_POLICY_PASSPHRASE_REQUIRED                                          Handle        = 0x8031006B\n\tFVE_E_FIPS_PREVENTS_PASSPHRASE                                            Handle        = 0x8031006C\n\tFVE_E_OS_VOLUME_PASSPHRASE_NOT_ALLOWED                                    Handle        = 0x8031006D\n\tFVE_E_INVALID_BITLOCKER_OID                                               Handle        = 0x8031006E\n\tFVE_E_VOLUME_TOO_SMALL                                                    Handle        = 0x8031006F\n\tFVE_E_DV_NOT_SUPPORTED_ON_FS                                              Handle        = 0x80310070\n\tFVE_E_DV_NOT_ALLOWED_BY_GP                                                Handle        = 0x80310071\n\tFVE_E_POLICY_USER_CERTIFICATE_NOT_ALLOWED                                 Handle        = 0x80310072\n\tFVE_E_POLICY_USER_CERTIFICATE_REQUIRED                                    Handle        = 0x80310073\n\tFVE_E_POLICY_USER_CERT_MUST_BE_HW                                         Handle        = 0x80310074\n\tFVE_E_POLICY_USER_CONFIGURE_FDV_AUTOUNLOCK_NOT_ALLOWED                    Handle        = 0x80310075\n\tFVE_E_POLICY_USER_CONFIGURE_RDV_AUTOUNLOCK_NOT_ALLOWED                    Handle        = 0x80310076\n\tFVE_E_POLICY_USER_CONFIGURE_RDV_NOT_ALLOWED                               Handle        = 0x80310077\n\tFVE_E_POLICY_USER_ENABLE_RDV_NOT_ALLOWED                                  Handle        = 0x80310078\n\tFVE_E_POLICY_USER_DISABLE_RDV_NOT_ALLOWED                                 Handle        = 0x80310079\n\tFVE_E_POLICY_INVALID_PASSPHRASE_LENGTH                                    Handle        = 0x80310080\n\tFVE_E_POLICY_PASSPHRASE_TOO_SIMPLE                                        Handle        = 0x80310081\n\tFVE_E_RECOVERY_PARTITION                                                  Handle        = 0x80310082\n\tFVE_E_POLICY_CONFLICT_FDV_RK_OFF_AUK_ON                                   Handle        = 0x80310083\n\tFVE_E_POLICY_CONFLICT_RDV_RK_OFF_AUK_ON                                   Handle        = 0x80310084\n\tFVE_E_NON_BITLOCKER_OID                                                   Handle        = 0x80310085\n\tFVE_E_POLICY_PROHIBITS_SELFSIGNED                                         Handle        = 0x80310086\n\tFVE_E_POLICY_CONFLICT_RO_AND_STARTUP_KEY_REQUIRED                         Handle        = 0x80310087\n\tFVE_E_CONV_RECOVERY_FAILED                                                Handle        = 0x80310088\n\tFVE_E_VIRTUALIZED_SPACE_TOO_BIG                                           Handle        = 0x80310089\n\tFVE_E_POLICY_CONFLICT_OSV_RP_OFF_ADB_ON                                   Handle        = 0x80310090\n\tFVE_E_POLICY_CONFLICT_FDV_RP_OFF_ADB_ON                                   Handle        = 0x80310091\n\tFVE_E_POLICY_CONFLICT_RDV_RP_OFF_ADB_ON                                   Handle        = 0x80310092\n\tFVE_E_NON_BITLOCKER_KU                                                    Handle        = 0x80310093\n\tFVE_E_PRIVATEKEY_AUTH_FAILED                                              Handle        = 0x80310094\n\tFVE_E_REMOVAL_OF_DRA_FAILED                                               Handle        = 0x80310095\n\tFVE_E_OPERATION_NOT_SUPPORTED_ON_VISTA_VOLUME                             Handle        = 0x80310096\n\tFVE_E_CANT_LOCK_AUTOUNLOCK_ENABLED_VOLUME                                 Handle        = 0x80310097\n\tFVE_E_FIPS_HASH_KDF_NOT_ALLOWED                                           Handle        = 0x80310098\n\tFVE_E_ENH_PIN_INVALID                                                     Handle        = 0x80310099\n\tFVE_E_INVALID_PIN_CHARS                                                   Handle        = 0x8031009A\n\tFVE_E_INVALID_DATUM_TYPE                                                  Handle        = 0x8031009B\n\tFVE_E_EFI_ONLY                                                            Handle        = 0x8031009C\n\tFVE_E_MULTIPLE_NKP_CERTS                                                  Handle        = 0x8031009D\n\tFVE_E_REMOVAL_OF_NKP_FAILED                                               Handle        = 0x8031009E\n\tFVE_E_INVALID_NKP_CERT                                                    Handle        = 0x8031009F\n\tFVE_E_NO_EXISTING_PIN                                                     Handle        = 0x803100A0\n\tFVE_E_PROTECTOR_CHANGE_PIN_MISMATCH                                       Handle        = 0x803100A1\n\tFVE_E_PIN_PROTECTOR_CHANGE_BY_STD_USER_DISALLOWED                         Handle        = 0x803100A2\n\tFVE_E_PROTECTOR_CHANGE_MAX_PIN_CHANGE_ATTEMPTS_REACHED                    Handle        = 0x803100A3\n\tFVE_E_POLICY_PASSPHRASE_REQUIRES_ASCII                                    Handle        = 0x803100A4\n\tFVE_E_FULL_ENCRYPTION_NOT_ALLOWED_ON_TP_STORAGE                           Handle        = 0x803100A5\n\tFVE_E_WIPE_NOT_ALLOWED_ON_TP_STORAGE                                      Handle        = 0x803100A6\n\tFVE_E_KEY_LENGTH_NOT_SUPPORTED_BY_EDRIVE                                  Handle        = 0x803100A7\n\tFVE_E_NO_EXISTING_PASSPHRASE                                              Handle        = 0x803100A8\n\tFVE_E_PROTECTOR_CHANGE_PASSPHRASE_MISMATCH                                Handle        = 0x803100A9\n\tFVE_E_PASSPHRASE_TOO_LONG                                                 Handle        = 0x803100AA\n\tFVE_E_NO_PASSPHRASE_WITH_TPM                                              Handle        = 0x803100AB\n\tFVE_E_NO_TPM_WITH_PASSPHRASE                                              Handle        = 0x803100AC\n\tFVE_E_NOT_ALLOWED_ON_CSV_STACK                                            Handle        = 0x803100AD\n\tFVE_E_NOT_ALLOWED_ON_CLUSTER                                              Handle        = 0x803100AE\n\tFVE_E_EDRIVE_NO_FAILOVER_TO_SW                                            Handle        = 0x803100AF\n\tFVE_E_EDRIVE_BAND_IN_USE                                                  Handle        = 0x803100B0\n\tFVE_E_EDRIVE_DISALLOWED_BY_GP                                             Handle        = 0x803100B1\n\tFVE_E_EDRIVE_INCOMPATIBLE_VOLUME                                          Handle        = 0x803100B2\n\tFVE_E_NOT_ALLOWED_TO_UPGRADE_WHILE_CONVERTING                             Handle        = 0x803100B3\n\tFVE_E_EDRIVE_DV_NOT_SUPPORTED                                             Handle        = 0x803100B4\n\tFVE_E_NO_PREBOOT_KEYBOARD_DETECTED                                        Handle        = 0x803100B5\n\tFVE_E_NO_PREBOOT_KEYBOARD_OR_WINRE_DETECTED                               Handle        = 0x803100B6\n\tFVE_E_POLICY_REQUIRES_STARTUP_PIN_ON_TOUCH_DEVICE                         Handle        = 0x803100B7\n\tFVE_E_POLICY_REQUIRES_RECOVERY_PASSWORD_ON_TOUCH_DEVICE                   Handle        = 0x803100B8\n\tFVE_E_WIPE_CANCEL_NOT_APPLICABLE                                          Handle        = 0x803100B9\n\tFVE_E_SECUREBOOT_DISABLED                                                 Handle        = 0x803100BA\n\tFVE_E_SECUREBOOT_CONFIGURATION_INVALID                                    Handle        = 0x803100BB\n\tFVE_E_EDRIVE_DRY_RUN_FAILED                                               Handle        = 0x803100BC\n\tFVE_E_SHADOW_COPY_PRESENT                                                 Handle        = 0x803100BD\n\tFVE_E_POLICY_INVALID_ENHANCED_BCD_SETTINGS                                Handle        = 0x803100BE\n\tFVE_E_EDRIVE_INCOMPATIBLE_FIRMWARE                                        Handle        = 0x803100BF\n\tFVE_E_PROTECTOR_CHANGE_MAX_PASSPHRASE_CHANGE_ATTEMPTS_REACHED             Handle        = 0x803100C0\n\tFVE_E_PASSPHRASE_PROTECTOR_CHANGE_BY_STD_USER_DISALLOWED                  Handle        = 0x803100C1\n\tFVE_E_LIVEID_ACCOUNT_SUSPENDED                                            Handle        = 0x803100C2\n\tFVE_E_LIVEID_ACCOUNT_BLOCKED                                              Handle        = 0x803100C3\n\tFVE_E_NOT_PROVISIONED_ON_ALL_VOLUMES                                      Handle        = 0x803100C4\n\tFVE_E_DE_FIXED_DATA_NOT_SUPPORTED                                         Handle        = 0x803100C5\n\tFVE_E_DE_HARDWARE_NOT_COMPLIANT                                           Handle        = 0x803100C6\n\tFVE_E_DE_WINRE_NOT_CONFIGURED                                             Handle        = 0x803100C7\n\tFVE_E_DE_PROTECTION_SUSPENDED                                             Handle        = 0x803100C8\n\tFVE_E_DE_OS_VOLUME_NOT_PROTECTED                                          Handle        = 0x803100C9\n\tFVE_E_DE_DEVICE_LOCKEDOUT                                                 Handle        = 0x803100CA\n\tFVE_E_DE_PROTECTION_NOT_YET_ENABLED                                       Handle        = 0x803100CB\n\tFVE_E_INVALID_PIN_CHARS_DETAILED                                          Handle        = 0x803100CC\n\tFVE_E_DEVICE_LOCKOUT_COUNTER_UNAVAILABLE                                  Handle        = 0x803100CD\n\tFVE_E_DEVICELOCKOUT_COUNTER_MISMATCH                                      Handle        = 0x803100CE\n\tFVE_E_BUFFER_TOO_LARGE                                                    Handle        = 0x803100CF\n\tFVE_E_NO_SUCH_CAPABILITY_ON_TARGET                                        Handle        = 0x803100D0\n\tFVE_E_DE_PREVENTED_FOR_OS                                                 Handle        = 0x803100D1\n\tFVE_E_DE_VOLUME_OPTED_OUT                                                 Handle        = 0x803100D2\n\tFVE_E_DE_VOLUME_NOT_SUPPORTED                                             Handle        = 0x803100D3\n\tFVE_E_EOW_NOT_SUPPORTED_IN_VERSION                                        Handle        = 0x803100D4\n\tFVE_E_ADBACKUP_NOT_ENABLED                                                Handle        = 0x803100D5\n\tFVE_E_VOLUME_EXTEND_PREVENTS_EOW_DECRYPT                                  Handle        = 0x803100D6\n\tFVE_E_NOT_DE_VOLUME                                                       Handle        = 0x803100D7\n\tFVE_E_PROTECTION_CANNOT_BE_DISABLED                                       Handle        = 0x803100D8\n\tFVE_E_OSV_KSR_NOT_ALLOWED                                                 Handle        = 0x803100D9\n\tFVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_OS_DRIVE                          Handle        = 0x803100DA\n\tFVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_FIXED_DRIVE                       Handle        = 0x803100DB\n\tFVE_E_AD_BACKUP_REQUIRED_POLICY_NOT_SET_REMOVABLE_DRIVE                   Handle        = 0x803100DC\n\tFVE_E_KEY_ROTATION_NOT_SUPPORTED                                          Handle        = 0x803100DD\n\tFVE_E_EXECUTE_REQUEST_SENT_TOO_SOON                                       Handle        = 0x803100DE\n\tFVE_E_KEY_ROTATION_NOT_ENABLED                                            Handle        = 0x803100DF\n\tFVE_E_DEVICE_NOT_JOINED                                                   Handle        = 0x803100E0\n\tFWP_E_CALLOUT_NOT_FOUND                                                   Handle        = 0x80320001\n\tFWP_E_CONDITION_NOT_FOUND                                                 Handle        = 0x80320002\n\tFWP_E_FILTER_NOT_FOUND                                                    Handle        = 0x80320003\n\tFWP_E_LAYER_NOT_FOUND                                                     Handle        = 0x80320004\n\tFWP_E_PROVIDER_NOT_FOUND                                                  Handle        = 0x80320005\n\tFWP_E_PROVIDER_CONTEXT_NOT_FOUND                                          Handle        = 0x80320006\n\tFWP_E_SUBLAYER_NOT_FOUND                                                  Handle        = 0x80320007\n\tFWP_E_NOT_FOUND                                                           Handle        = 0x80320008\n\tFWP_E_ALREADY_EXISTS                                                      Handle        = 0x80320009\n\tFWP_E_IN_USE                                                              Handle        = 0x8032000A\n\tFWP_E_DYNAMIC_SESSION_IN_PROGRESS                                         Handle        = 0x8032000B\n\tFWP_E_WRONG_SESSION                                                       Handle        = 0x8032000C\n\tFWP_E_NO_TXN_IN_PROGRESS                                                  Handle        = 0x8032000D\n\tFWP_E_TXN_IN_PROGRESS                                                     Handle        = 0x8032000E\n\tFWP_E_TXN_ABORTED                                                         Handle        = 0x8032000F\n\tFWP_E_SESSION_ABORTED                                                     Handle        = 0x80320010\n\tFWP_E_INCOMPATIBLE_TXN                                                    Handle        = 0x80320011\n\tFWP_E_TIMEOUT                                                             Handle        = 0x80320012\n\tFWP_E_NET_EVENTS_DISABLED                                                 Handle        = 0x80320013\n\tFWP_E_INCOMPATIBLE_LAYER                                                  Handle        = 0x80320014\n\tFWP_E_KM_CLIENTS_ONLY                                                     Handle        = 0x80320015\n\tFWP_E_LIFETIME_MISMATCH                                                   Handle        = 0x80320016\n\tFWP_E_BUILTIN_OBJECT                                                      Handle        = 0x80320017\n\tFWP_E_TOO_MANY_CALLOUTS                                                   Handle        = 0x80320018\n\tFWP_E_NOTIFICATION_DROPPED                                                Handle        = 0x80320019\n\tFWP_E_TRAFFIC_MISMATCH                                                    Handle        = 0x8032001A\n\tFWP_E_INCOMPATIBLE_SA_STATE                                               Handle        = 0x8032001B\n\tFWP_E_NULL_POINTER                                                        Handle        = 0x8032001C\n\tFWP_E_INVALID_ENUMERATOR                                                  Handle        = 0x8032001D\n\tFWP_E_INVALID_FLAGS                                                       Handle        = 0x8032001E\n\tFWP_E_INVALID_NET_MASK                                                    Handle        = 0x8032001F\n\tFWP_E_INVALID_RANGE                                                       Handle        = 0x80320020\n\tFWP_E_INVALID_INTERVAL                                                    Handle        = 0x80320021\n\tFWP_E_ZERO_LENGTH_ARRAY                                                   Handle        = 0x80320022\n\tFWP_E_NULL_DISPLAY_NAME                                                   Handle        = 0x80320023\n\tFWP_E_INVALID_ACTION_TYPE                                                 Handle        = 0x80320024\n\tFWP_E_INVALID_WEIGHT                                                      Handle        = 0x80320025\n\tFWP_E_MATCH_TYPE_MISMATCH                                                 Handle        = 0x80320026\n\tFWP_E_TYPE_MISMATCH                                                       Handle        = 0x80320027\n\tFWP_E_OUT_OF_BOUNDS                                                       Handle        = 0x80320028\n\tFWP_E_RESERVED                                                            Handle        = 0x80320029\n\tFWP_E_DUPLICATE_CONDITION                                                 Handle        = 0x8032002A\n\tFWP_E_DUPLICATE_KEYMOD                                                    Handle        = 0x8032002B\n\tFWP_E_ACTION_INCOMPATIBLE_WITH_LAYER                                      Handle        = 0x8032002C\n\tFWP_E_ACTION_INCOMPATIBLE_WITH_SUBLAYER                                   Handle        = 0x8032002D\n\tFWP_E_CONTEXT_INCOMPATIBLE_WITH_LAYER                                     Handle        = 0x8032002E\n\tFWP_E_CONTEXT_INCOMPATIBLE_WITH_CALLOUT                                   Handle        = 0x8032002F\n\tFWP_E_INCOMPATIBLE_AUTH_METHOD                                            Handle        = 0x80320030\n\tFWP_E_INCOMPATIBLE_DH_GROUP                                               Handle        = 0x80320031\n\tFWP_E_EM_NOT_SUPPORTED                                                    Handle        = 0x80320032\n\tFWP_E_NEVER_MATCH                                                         Handle        = 0x80320033\n\tFWP_E_PROVIDER_CONTEXT_MISMATCH                                           Handle        = 0x80320034\n\tFWP_E_INVALID_PARAMETER                                                   Handle        = 0x80320035\n\tFWP_E_TOO_MANY_SUBLAYERS                                                  Handle        = 0x80320036\n\tFWP_E_CALLOUT_NOTIFICATION_FAILED                                         Handle        = 0x80320037\n\tFWP_E_INVALID_AUTH_TRANSFORM                                              Handle        = 0x80320038\n\tFWP_E_INVALID_CIPHER_TRANSFORM                                            Handle        = 0x80320039\n\tFWP_E_INCOMPATIBLE_CIPHER_TRANSFORM                                       Handle        = 0x8032003A\n\tFWP_E_INVALID_TRANSFORM_COMBINATION                                       Handle        = 0x8032003B\n\tFWP_E_DUPLICATE_AUTH_METHOD                                               Handle        = 0x8032003C\n\tFWP_E_INVALID_TUNNEL_ENDPOINT                                             Handle        = 0x8032003D\n\tFWP_E_L2_DRIVER_NOT_READY                                                 Handle        = 0x8032003E\n\tFWP_E_KEY_DICTATOR_ALREADY_REGISTERED                                     Handle        = 0x8032003F\n\tFWP_E_KEY_DICTATION_INVALID_KEYING_MATERIAL                               Handle        = 0x80320040\n\tFWP_E_CONNECTIONS_DISABLED                                                Handle        = 0x80320041\n\tFWP_E_INVALID_DNS_NAME                                                    Handle        = 0x80320042\n\tFWP_E_STILL_ON                                                            Handle        = 0x80320043\n\tFWP_E_IKEEXT_NOT_RUNNING                                                  Handle        = 0x80320044\n\tFWP_E_DROP_NOICMP                                                         Handle        = 0x80320104\n\tWS_S_ASYNC                                                                Handle        = 0x003D0000\n\tWS_S_END                                                                  Handle        = 0x003D0001\n\tWS_E_INVALID_FORMAT                                                       Handle        = 0x803D0000\n\tWS_E_OBJECT_FAULTED                                                       Handle        = 0x803D0001\n\tWS_E_NUMERIC_OVERFLOW                                                     Handle        = 0x803D0002\n\tWS_E_INVALID_OPERATION                                                    Handle        = 0x803D0003\n\tWS_E_OPERATION_ABORTED                                                    Handle        = 0x803D0004\n\tWS_E_ENDPOINT_ACCESS_DENIED                                               Handle        = 0x803D0005\n\tWS_E_OPERATION_TIMED_OUT                                                  Handle        = 0x803D0006\n\tWS_E_OPERATION_ABANDONED                                                  Handle        = 0x803D0007\n\tWS_E_QUOTA_EXCEEDED                                                       Handle        = 0x803D0008\n\tWS_E_NO_TRANSLATION_AVAILABLE                                             Handle        = 0x803D0009\n\tWS_E_SECURITY_VERIFICATION_FAILURE                                        Handle        = 0x803D000A\n\tWS_E_ADDRESS_IN_USE                                                       Handle        = 0x803D000B\n\tWS_E_ADDRESS_NOT_AVAILABLE                                                Handle        = 0x803D000C\n\tWS_E_ENDPOINT_NOT_FOUND                                                   Handle        = 0x803D000D\n\tWS_E_ENDPOINT_NOT_AVAILABLE                                               Handle        = 0x803D000E\n\tWS_E_ENDPOINT_FAILURE                                                     Handle        = 0x803D000F\n\tWS_E_ENDPOINT_UNREACHABLE                                                 Handle        = 0x803D0010\n\tWS_E_ENDPOINT_ACTION_NOT_SUPPORTED                                        Handle        = 0x803D0011\n\tWS_E_ENDPOINT_TOO_BUSY                                                    Handle        = 0x803D0012\n\tWS_E_ENDPOINT_FAULT_RECEIVED                                              Handle        = 0x803D0013\n\tWS_E_ENDPOINT_DISCONNECTED                                                Handle        = 0x803D0014\n\tWS_E_PROXY_FAILURE                                                        Handle        = 0x803D0015\n\tWS_E_PROXY_ACCESS_DENIED                                                  Handle        = 0x803D0016\n\tWS_E_NOT_SUPPORTED                                                        Handle        = 0x803D0017\n\tWS_E_PROXY_REQUIRES_BASIC_AUTH                                            Handle        = 0x803D0018\n\tWS_E_PROXY_REQUIRES_DIGEST_AUTH                                           Handle        = 0x803D0019\n\tWS_E_PROXY_REQUIRES_NTLM_AUTH                                             Handle        = 0x803D001A\n\tWS_E_PROXY_REQUIRES_NEGOTIATE_AUTH                                        Handle        = 0x803D001B\n\tWS_E_SERVER_REQUIRES_BASIC_AUTH                                           Handle        = 0x803D001C\n\tWS_E_SERVER_REQUIRES_DIGEST_AUTH                                          Handle        = 0x803D001D\n\tWS_E_SERVER_REQUIRES_NTLM_AUTH                                            Handle        = 0x803D001E\n\tWS_E_SERVER_REQUIRES_NEGOTIATE_AUTH                                       Handle        = 0x803D001F\n\tWS_E_INVALID_ENDPOINT_URL                                                 Handle        = 0x803D0020\n\tWS_E_OTHER                                                                Handle        = 0x803D0021\n\tWS_E_SECURITY_TOKEN_EXPIRED                                               Handle        = 0x803D0022\n\tWS_E_SECURITY_SYSTEM_FAILURE                                              Handle        = 0x803D0023\n\tERROR_NDIS_INTERFACE_CLOSING                                              syscall.Errno = 0x80340002\n\tERROR_NDIS_BAD_VERSION                                                    syscall.Errno = 0x80340004\n\tERROR_NDIS_BAD_CHARACTERISTICS                                            syscall.Errno = 0x80340005\n\tERROR_NDIS_ADAPTER_NOT_FOUND                                              syscall.Errno = 0x80340006\n\tERROR_NDIS_OPEN_FAILED                                                    syscall.Errno = 0x80340007\n\tERROR_NDIS_DEVICE_FAILED                                                  syscall.Errno = 0x80340008\n\tERROR_NDIS_MULTICAST_FULL                                                 syscall.Errno = 0x80340009\n\tERROR_NDIS_MULTICAST_EXISTS                                               syscall.Errno = 0x8034000A\n\tERROR_NDIS_MULTICAST_NOT_FOUND                                            syscall.Errno = 0x8034000B\n\tERROR_NDIS_REQUEST_ABORTED                                                syscall.Errno = 0x8034000C\n\tERROR_NDIS_RESET_IN_PROGRESS                                              syscall.Errno = 0x8034000D\n\tERROR_NDIS_NOT_SUPPORTED                                                  syscall.Errno = 0x803400BB\n\tERROR_NDIS_INVALID_PACKET                                                 syscall.Errno = 0x8034000F\n\tERROR_NDIS_ADAPTER_NOT_READY                                              syscall.Errno = 0x80340011\n\tERROR_NDIS_INVALID_LENGTH                                                 syscall.Errno = 0x80340014\n\tERROR_NDIS_INVALID_DATA                                                   syscall.Errno = 0x80340015\n\tERROR_NDIS_BUFFER_TOO_SHORT                                               syscall.Errno = 0x80340016\n\tERROR_NDIS_INVALID_OID                                                    syscall.Errno = 0x80340017\n\tERROR_NDIS_ADAPTER_REMOVED                                                syscall.Errno = 0x80340018\n\tERROR_NDIS_UNSUPPORTED_MEDIA                                              syscall.Errno = 0x80340019\n\tERROR_NDIS_GROUP_ADDRESS_IN_USE                                           syscall.Errno = 0x8034001A\n\tERROR_NDIS_FILE_NOT_FOUND                                                 syscall.Errno = 0x8034001B\n\tERROR_NDIS_ERROR_READING_FILE                                             syscall.Errno = 0x8034001C\n\tERROR_NDIS_ALREADY_MAPPED                                                 syscall.Errno = 0x8034001D\n\tERROR_NDIS_RESOURCE_CONFLICT                                              syscall.Errno = 0x8034001E\n\tERROR_NDIS_MEDIA_DISCONNECTED                                             syscall.Errno = 0x8034001F\n\tERROR_NDIS_INVALID_ADDRESS                                                syscall.Errno = 0x80340022\n\tERROR_NDIS_INVALID_DEVICE_REQUEST                                         syscall.Errno = 0x80340010\n\tERROR_NDIS_PAUSED                                                         syscall.Errno = 0x8034002A\n\tERROR_NDIS_INTERFACE_NOT_FOUND                                            syscall.Errno = 0x8034002B\n\tERROR_NDIS_UNSUPPORTED_REVISION                                           syscall.Errno = 0x8034002C\n\tERROR_NDIS_INVALID_PORT                                                   syscall.Errno = 0x8034002D\n\tERROR_NDIS_INVALID_PORT_STATE                                             syscall.Errno = 0x8034002E\n\tERROR_NDIS_LOW_POWER_STATE                                                syscall.Errno = 0x8034002F\n\tERROR_NDIS_REINIT_REQUIRED                                                syscall.Errno = 0x80340030\n\tERROR_NDIS_NO_QUEUES                                                      syscall.Errno = 0x80340031\n\tERROR_NDIS_DOT11_AUTO_CONFIG_ENABLED                                      syscall.Errno = 0x80342000\n\tERROR_NDIS_DOT11_MEDIA_IN_USE                                             syscall.Errno = 0x80342001\n\tERROR_NDIS_DOT11_POWER_STATE_INVALID                                      syscall.Errno = 0x80342002\n\tERROR_NDIS_PM_WOL_PATTERN_LIST_FULL                                       syscall.Errno = 0x80342003\n\tERROR_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL                                  syscall.Errno = 0x80342004\n\tERROR_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE                       syscall.Errno = 0x80342005\n\tERROR_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE                          syscall.Errno = 0x80342006\n\tERROR_NDIS_DOT11_AP_CHANNEL_NOT_ALLOWED                                   syscall.Errno = 0x80342007\n\tERROR_NDIS_DOT11_AP_BAND_NOT_ALLOWED                                      syscall.Errno = 0x80342008\n\tERROR_NDIS_INDICATION_REQUIRED                                            syscall.Errno = 0x00340001\n\tERROR_NDIS_OFFLOAD_POLICY                                                 syscall.Errno = 0xC034100F\n\tERROR_NDIS_OFFLOAD_CONNECTION_REJECTED                                    syscall.Errno = 0xC0341012\n\tERROR_NDIS_OFFLOAD_PATH_REJECTED                                          syscall.Errno = 0xC0341013\n\tERROR_HV_INVALID_HYPERCALL_CODE                                           syscall.Errno = 0xC0350002\n\tERROR_HV_INVALID_HYPERCALL_INPUT                                          syscall.Errno = 0xC0350003\n\tERROR_HV_INVALID_ALIGNMENT                                                syscall.Errno = 0xC0350004\n\tERROR_HV_INVALID_PARAMETER                                                syscall.Errno = 0xC0350005\n\tERROR_HV_ACCESS_DENIED                                                    syscall.Errno = 0xC0350006\n\tERROR_HV_INVALID_PARTITION_STATE                                          syscall.Errno = 0xC0350007\n\tERROR_HV_OPERATION_DENIED                                                 syscall.Errno = 0xC0350008\n\tERROR_HV_UNKNOWN_PROPERTY                                                 syscall.Errno = 0xC0350009\n\tERROR_HV_PROPERTY_VALUE_OUT_OF_RANGE                                      syscall.Errno = 0xC035000A\n\tERROR_HV_INSUFFICIENT_MEMORY                                              syscall.Errno = 0xC035000B\n\tERROR_HV_PARTITION_TOO_DEEP                                               syscall.Errno = 0xC035000C\n\tERROR_HV_INVALID_PARTITION_ID                                             syscall.Errno = 0xC035000D\n\tERROR_HV_INVALID_VP_INDEX                                                 syscall.Errno = 0xC035000E\n\tERROR_HV_INVALID_PORT_ID                                                  syscall.Errno = 0xC0350011\n\tERROR_HV_INVALID_CONNECTION_ID                                            syscall.Errno = 0xC0350012\n\tERROR_HV_INSUFFICIENT_BUFFERS                                             syscall.Errno = 0xC0350013\n\tERROR_HV_NOT_ACKNOWLEDGED                                                 syscall.Errno = 0xC0350014\n\tERROR_HV_INVALID_VP_STATE                                                 syscall.Errno = 0xC0350015\n\tERROR_HV_ACKNOWLEDGED                                                     syscall.Errno = 0xC0350016\n\tERROR_HV_INVALID_SAVE_RESTORE_STATE                                       syscall.Errno = 0xC0350017\n\tERROR_HV_INVALID_SYNIC_STATE                                              syscall.Errno = 0xC0350018\n\tERROR_HV_OBJECT_IN_USE                                                    syscall.Errno = 0xC0350019\n\tERROR_HV_INVALID_PROXIMITY_DOMAIN_INFO                                    syscall.Errno = 0xC035001A\n\tERROR_HV_NO_DATA                                                          syscall.Errno = 0xC035001B\n\tERROR_HV_INACTIVE                                                         syscall.Errno = 0xC035001C\n\tERROR_HV_NO_RESOURCES                                                     syscall.Errno = 0xC035001D\n\tERROR_HV_FEATURE_UNAVAILABLE                                              syscall.Errno = 0xC035001E\n\tERROR_HV_INSUFFICIENT_BUFFER                                              syscall.Errno = 0xC0350033\n\tERROR_HV_INSUFFICIENT_DEVICE_DOMAINS                                      syscall.Errno = 0xC0350038\n\tERROR_HV_CPUID_FEATURE_VALIDATION                                         syscall.Errno = 0xC035003C\n\tERROR_HV_CPUID_XSAVE_FEATURE_VALIDATION                                   syscall.Errno = 0xC035003D\n\tERROR_HV_PROCESSOR_STARTUP_TIMEOUT                                        syscall.Errno = 0xC035003E\n\tERROR_HV_SMX_ENABLED                                                      syscall.Errno = 0xC035003F\n\tERROR_HV_INVALID_LP_INDEX                                                 syscall.Errno = 0xC0350041\n\tERROR_HV_INVALID_REGISTER_VALUE                                           syscall.Errno = 0xC0350050\n\tERROR_HV_INVALID_VTL_STATE                                                syscall.Errno = 0xC0350051\n\tERROR_HV_NX_NOT_DETECTED                                                  syscall.Errno = 0xC0350055\n\tERROR_HV_INVALID_DEVICE_ID                                                syscall.Errno = 0xC0350057\n\tERROR_HV_INVALID_DEVICE_STATE                                             syscall.Errno = 0xC0350058\n\tERROR_HV_PENDING_PAGE_REQUESTS                                            syscall.Errno = 0x00350059\n\tERROR_HV_PAGE_REQUEST_INVALID                                             syscall.Errno = 0xC0350060\n\tERROR_HV_INVALID_CPU_GROUP_ID                                             syscall.Errno = 0xC035006F\n\tERROR_HV_INVALID_CPU_GROUP_STATE                                          syscall.Errno = 0xC0350070\n\tERROR_HV_OPERATION_FAILED                                                 syscall.Errno = 0xC0350071\n\tERROR_HV_NOT_ALLOWED_WITH_NESTED_VIRT_ACTIVE                              syscall.Errno = 0xC0350072\n\tERROR_HV_INSUFFICIENT_ROOT_MEMORY                                         syscall.Errno = 0xC0350073\n\tERROR_HV_NOT_PRESENT                                                      syscall.Errno = 0xC0351000\n\tERROR_VID_DUPLICATE_HANDLER                                               syscall.Errno = 0xC0370001\n\tERROR_VID_TOO_MANY_HANDLERS                                               syscall.Errno = 0xC0370002\n\tERROR_VID_QUEUE_FULL                                                      syscall.Errno = 0xC0370003\n\tERROR_VID_HANDLER_NOT_PRESENT                                             syscall.Errno = 0xC0370004\n\tERROR_VID_INVALID_OBJECT_NAME                                             syscall.Errno = 0xC0370005\n\tERROR_VID_PARTITION_NAME_TOO_LONG                                         syscall.Errno = 0xC0370006\n\tERROR_VID_MESSAGE_QUEUE_NAME_TOO_LONG                                     syscall.Errno = 0xC0370007\n\tERROR_VID_PARTITION_ALREADY_EXISTS                                        syscall.Errno = 0xC0370008\n\tERROR_VID_PARTITION_DOES_NOT_EXIST                                        syscall.Errno = 0xC0370009\n\tERROR_VID_PARTITION_NAME_NOT_FOUND                                        syscall.Errno = 0xC037000A\n\tERROR_VID_MESSAGE_QUEUE_ALREADY_EXISTS                                    syscall.Errno = 0xC037000B\n\tERROR_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT                                    syscall.Errno = 0xC037000C\n\tERROR_VID_MB_STILL_REFERENCED                                             syscall.Errno = 0xC037000D\n\tERROR_VID_CHILD_GPA_PAGE_SET_CORRUPTED                                    syscall.Errno = 0xC037000E\n\tERROR_VID_INVALID_NUMA_SETTINGS                                           syscall.Errno = 0xC037000F\n\tERROR_VID_INVALID_NUMA_NODE_INDEX                                         syscall.Errno = 0xC0370010\n\tERROR_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED                           syscall.Errno = 0xC0370011\n\tERROR_VID_INVALID_MEMORY_BLOCK_HANDLE                                     syscall.Errno = 0xC0370012\n\tERROR_VID_PAGE_RANGE_OVERFLOW                                             syscall.Errno = 0xC0370013\n\tERROR_VID_INVALID_MESSAGE_QUEUE_HANDLE                                    syscall.Errno = 0xC0370014\n\tERROR_VID_INVALID_GPA_RANGE_HANDLE                                        syscall.Errno = 0xC0370015\n\tERROR_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE                              syscall.Errno = 0xC0370016\n\tERROR_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED                                syscall.Errno = 0xC0370017\n\tERROR_VID_INVALID_PPM_HANDLE                                              syscall.Errno = 0xC0370018\n\tERROR_VID_MBPS_ARE_LOCKED                                                 syscall.Errno = 0xC0370019\n\tERROR_VID_MESSAGE_QUEUE_CLOSED                                            syscall.Errno = 0xC037001A\n\tERROR_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED                                syscall.Errno = 0xC037001B\n\tERROR_VID_STOP_PENDING                                                    syscall.Errno = 0xC037001C\n\tERROR_VID_INVALID_PROCESSOR_STATE                                         syscall.Errno = 0xC037001D\n\tERROR_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT                                 syscall.Errno = 0xC037001E\n\tERROR_VID_KM_INTERFACE_ALREADY_INITIALIZED                                syscall.Errno = 0xC037001F\n\tERROR_VID_MB_PROPERTY_ALREADY_SET_RESET                                   syscall.Errno = 0xC0370020\n\tERROR_VID_MMIO_RANGE_DESTROYED                                            syscall.Errno = 0xC0370021\n\tERROR_VID_INVALID_CHILD_GPA_PAGE_SET                                      syscall.Errno = 0xC0370022\n\tERROR_VID_RESERVE_PAGE_SET_IS_BEING_USED                                  syscall.Errno = 0xC0370023\n\tERROR_VID_RESERVE_PAGE_SET_TOO_SMALL                                      syscall.Errno = 0xC0370024\n\tERROR_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE                          syscall.Errno = 0xC0370025\n\tERROR_VID_MBP_COUNT_EXCEEDED_LIMIT                                        syscall.Errno = 0xC0370026\n\tERROR_VID_SAVED_STATE_CORRUPT                                             syscall.Errno = 0xC0370027\n\tERROR_VID_SAVED_STATE_UNRECOGNIZED_ITEM                                   syscall.Errno = 0xC0370028\n\tERROR_VID_SAVED_STATE_INCOMPATIBLE                                        syscall.Errno = 0xC0370029\n\tERROR_VID_VTL_ACCESS_DENIED                                               syscall.Errno = 0xC037002A\n\tERROR_VMCOMPUTE_TERMINATED_DURING_START                                   syscall.Errno = 0xC0370100\n\tERROR_VMCOMPUTE_IMAGE_MISMATCH                                            syscall.Errno = 0xC0370101\n\tERROR_VMCOMPUTE_HYPERV_NOT_INSTALLED                                      syscall.Errno = 0xC0370102\n\tERROR_VMCOMPUTE_OPERATION_PENDING                                         syscall.Errno = 0xC0370103\n\tERROR_VMCOMPUTE_TOO_MANY_NOTIFICATIONS                                    syscall.Errno = 0xC0370104\n\tERROR_VMCOMPUTE_INVALID_STATE                                             syscall.Errno = 0xC0370105\n\tERROR_VMCOMPUTE_UNEXPECTED_EXIT                                           syscall.Errno = 0xC0370106\n\tERROR_VMCOMPUTE_TERMINATED                                                syscall.Errno = 0xC0370107\n\tERROR_VMCOMPUTE_CONNECT_FAILED                                            syscall.Errno = 0xC0370108\n\tERROR_VMCOMPUTE_TIMEOUT                                                   syscall.Errno = 0xC0370109\n\tERROR_VMCOMPUTE_CONNECTION_CLOSED                                         syscall.Errno = 0xC037010A\n\tERROR_VMCOMPUTE_UNKNOWN_MESSAGE                                           syscall.Errno = 0xC037010B\n\tERROR_VMCOMPUTE_UNSUPPORTED_PROTOCOL_VERSION                              syscall.Errno = 0xC037010C\n\tERROR_VMCOMPUTE_INVALID_JSON                                              syscall.Errno = 0xC037010D\n\tERROR_VMCOMPUTE_SYSTEM_NOT_FOUND                                          syscall.Errno = 0xC037010E\n\tERROR_VMCOMPUTE_SYSTEM_ALREADY_EXISTS                                     syscall.Errno = 0xC037010F\n\tERROR_VMCOMPUTE_SYSTEM_ALREADY_STOPPED                                    syscall.Errno = 0xC0370110\n\tERROR_VMCOMPUTE_PROTOCOL_ERROR                                            syscall.Errno = 0xC0370111\n\tERROR_VMCOMPUTE_INVALID_LAYER                                             syscall.Errno = 0xC0370112\n\tERROR_VMCOMPUTE_WINDOWS_INSIDER_REQUIRED                                  syscall.Errno = 0xC0370113\n\tHCS_E_TERMINATED_DURING_START                                             Handle        = 0x80370100\n\tHCS_E_IMAGE_MISMATCH                                                      Handle        = 0x80370101\n\tHCS_E_HYPERV_NOT_INSTALLED                                                Handle        = 0x80370102\n\tHCS_E_INVALID_STATE                                                       Handle        = 0x80370105\n\tHCS_E_UNEXPECTED_EXIT                                                     Handle        = 0x80370106\n\tHCS_E_TERMINATED                                                          Handle        = 0x80370107\n\tHCS_E_CONNECT_FAILED                                                      Handle        = 0x80370108\n\tHCS_E_CONNECTION_TIMEOUT                                                  Handle        = 0x80370109\n\tHCS_E_CONNECTION_CLOSED                                                   Handle        = 0x8037010A\n\tHCS_E_UNKNOWN_MESSAGE                                                     Handle        = 0x8037010B\n\tHCS_E_UNSUPPORTED_PROTOCOL_VERSION                                        Handle        = 0x8037010C\n\tHCS_E_INVALID_JSON                                                        Handle        = 0x8037010D\n\tHCS_E_SYSTEM_NOT_FOUND                                                    Handle        = 0x8037010E\n\tHCS_E_SYSTEM_ALREADY_EXISTS                                               Handle        = 0x8037010F\n\tHCS_E_SYSTEM_ALREADY_STOPPED                                              Handle        = 0x80370110\n\tHCS_E_PROTOCOL_ERROR                                                      Handle        = 0x80370111\n\tHCS_E_INVALID_LAYER                                                       Handle        = 0x80370112\n\tHCS_E_WINDOWS_INSIDER_REQUIRED                                            Handle        = 0x80370113\n\tHCS_E_SERVICE_NOT_AVAILABLE                                               Handle        = 0x80370114\n\tHCS_E_OPERATION_NOT_STARTED                                               Handle        = 0x80370115\n\tHCS_E_OPERATION_ALREADY_STARTED                                           Handle        = 0x80370116\n\tHCS_E_OPERATION_PENDING                                                   Handle        = 0x80370117\n\tHCS_E_OPERATION_TIMEOUT                                                   Handle        = 0x80370118\n\tHCS_E_OPERATION_SYSTEM_CALLBACK_ALREADY_SET                               Handle        = 0x80370119\n\tHCS_E_OPERATION_RESULT_ALLOCATION_FAILED                                  Handle        = 0x8037011A\n\tHCS_E_ACCESS_DENIED                                                       Handle        = 0x8037011B\n\tHCS_E_GUEST_CRITICAL_ERROR                                                Handle        = 0x8037011C\n\tERROR_VNET_VIRTUAL_SWITCH_NAME_NOT_FOUND                                  syscall.Errno = 0xC0370200\n\tERROR_VID_REMOTE_NODE_PARENT_GPA_PAGES_USED                               syscall.Errno = 0x80370001\n\tWHV_E_UNKNOWN_CAPABILITY                                                  Handle        = 0x80370300\n\tWHV_E_INSUFFICIENT_BUFFER                                                 Handle        = 0x80370301\n\tWHV_E_UNKNOWN_PROPERTY                                                    Handle        = 0x80370302\n\tWHV_E_UNSUPPORTED_HYPERVISOR_CONFIG                                       Handle        = 0x80370303\n\tWHV_E_INVALID_PARTITION_CONFIG                                            Handle        = 0x80370304\n\tWHV_E_GPA_RANGE_NOT_FOUND                                                 Handle        = 0x80370305\n\tWHV_E_VP_ALREADY_EXISTS                                                   Handle        = 0x80370306\n\tWHV_E_VP_DOES_NOT_EXIST                                                   Handle        = 0x80370307\n\tWHV_E_INVALID_VP_STATE                                                    Handle        = 0x80370308\n\tWHV_E_INVALID_VP_REGISTER_NAME                                            Handle        = 0x80370309\n\tERROR_VSMB_SAVED_STATE_FILE_NOT_FOUND                                     syscall.Errno = 0xC0370400\n\tERROR_VSMB_SAVED_STATE_CORRUPT                                            syscall.Errno = 0xC0370401\n\tERROR_VOLMGR_INCOMPLETE_REGENERATION                                      syscall.Errno = 0x80380001\n\tERROR_VOLMGR_INCOMPLETE_DISK_MIGRATION                                    syscall.Errno = 0x80380002\n\tERROR_VOLMGR_DATABASE_FULL                                                syscall.Errno = 0xC0380001\n\tERROR_VOLMGR_DISK_CONFIGURATION_CORRUPTED                                 syscall.Errno = 0xC0380002\n\tERROR_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC                               syscall.Errno = 0xC0380003\n\tERROR_VOLMGR_PACK_CONFIG_UPDATE_FAILED                                    syscall.Errno = 0xC0380004\n\tERROR_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME                              syscall.Errno = 0xC0380005\n\tERROR_VOLMGR_DISK_DUPLICATE                                               syscall.Errno = 0xC0380006\n\tERROR_VOLMGR_DISK_DYNAMIC                                                 syscall.Errno = 0xC0380007\n\tERROR_VOLMGR_DISK_ID_INVALID                                              syscall.Errno = 0xC0380008\n\tERROR_VOLMGR_DISK_INVALID                                                 syscall.Errno = 0xC0380009\n\tERROR_VOLMGR_DISK_LAST_VOTER                                              syscall.Errno = 0xC038000A\n\tERROR_VOLMGR_DISK_LAYOUT_INVALID                                          syscall.Errno = 0xC038000B\n\tERROR_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS               syscall.Errno = 0xC038000C\n\tERROR_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED                             syscall.Errno = 0xC038000D\n\tERROR_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL                             syscall.Errno = 0xC038000E\n\tERROR_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS               syscall.Errno = 0xC038000F\n\tERROR_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS                              syscall.Errno = 0xC0380010\n\tERROR_VOLMGR_DISK_MISSING                                                 syscall.Errno = 0xC0380011\n\tERROR_VOLMGR_DISK_NOT_EMPTY                                               syscall.Errno = 0xC0380012\n\tERROR_VOLMGR_DISK_NOT_ENOUGH_SPACE                                        syscall.Errno = 0xC0380013\n\tERROR_VOLMGR_DISK_REVECTORING_FAILED                                      syscall.Errno = 0xC0380014\n\tERROR_VOLMGR_DISK_SECTOR_SIZE_INVALID                                     syscall.Errno = 0xC0380015\n\tERROR_VOLMGR_DISK_SET_NOT_CONTAINED                                       syscall.Errno = 0xC0380016\n\tERROR_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS                                syscall.Errno = 0xC0380017\n\tERROR_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES                                 syscall.Errno = 0xC0380018\n\tERROR_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED                                   syscall.Errno = 0xC0380019\n\tERROR_VOLMGR_EXTENT_ALREADY_USED                                          syscall.Errno = 0xC038001A\n\tERROR_VOLMGR_EXTENT_NOT_CONTIGUOUS                                        syscall.Errno = 0xC038001B\n\tERROR_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION                                  syscall.Errno = 0xC038001C\n\tERROR_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED                                    syscall.Errno = 0xC038001D\n\tERROR_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION                                syscall.Errno = 0xC038001E\n\tERROR_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH                           syscall.Errno = 0xC038001F\n\tERROR_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED                                 syscall.Errno = 0xC0380020\n\tERROR_VOLMGR_INTERLEAVE_LENGTH_INVALID                                    syscall.Errno = 0xC0380021\n\tERROR_VOLMGR_MAXIMUM_REGISTERED_USERS                                     syscall.Errno = 0xC0380022\n\tERROR_VOLMGR_MEMBER_IN_SYNC                                               syscall.Errno = 0xC0380023\n\tERROR_VOLMGR_MEMBER_INDEX_DUPLICATE                                       syscall.Errno = 0xC0380024\n\tERROR_VOLMGR_MEMBER_INDEX_INVALID                                         syscall.Errno = 0xC0380025\n\tERROR_VOLMGR_MEMBER_MISSING                                               syscall.Errno = 0xC0380026\n\tERROR_VOLMGR_MEMBER_NOT_DETACHED                                          syscall.Errno = 0xC0380027\n\tERROR_VOLMGR_MEMBER_REGENERATING                                          syscall.Errno = 0xC0380028\n\tERROR_VOLMGR_ALL_DISKS_FAILED                                             syscall.Errno = 0xC0380029\n\tERROR_VOLMGR_NO_REGISTERED_USERS                                          syscall.Errno = 0xC038002A\n\tERROR_VOLMGR_NO_SUCH_USER                                                 syscall.Errno = 0xC038002B\n\tERROR_VOLMGR_NOTIFICATION_RESET                                           syscall.Errno = 0xC038002C\n\tERROR_VOLMGR_NUMBER_OF_MEMBERS_INVALID                                    syscall.Errno = 0xC038002D\n\tERROR_VOLMGR_NUMBER_OF_PLEXES_INVALID                                     syscall.Errno = 0xC038002E\n\tERROR_VOLMGR_PACK_DUPLICATE                                               syscall.Errno = 0xC038002F\n\tERROR_VOLMGR_PACK_ID_INVALID                                              syscall.Errno = 0xC0380030\n\tERROR_VOLMGR_PACK_INVALID                                                 syscall.Errno = 0xC0380031\n\tERROR_VOLMGR_PACK_NAME_INVALID                                            syscall.Errno = 0xC0380032\n\tERROR_VOLMGR_PACK_OFFLINE                                                 syscall.Errno = 0xC0380033\n\tERROR_VOLMGR_PACK_HAS_QUORUM                                              syscall.Errno = 0xC0380034\n\tERROR_VOLMGR_PACK_WITHOUT_QUORUM                                          syscall.Errno = 0xC0380035\n\tERROR_VOLMGR_PARTITION_STYLE_INVALID                                      syscall.Errno = 0xC0380036\n\tERROR_VOLMGR_PARTITION_UPDATE_FAILED                                      syscall.Errno = 0xC0380037\n\tERROR_VOLMGR_PLEX_IN_SYNC                                                 syscall.Errno = 0xC0380038\n\tERROR_VOLMGR_PLEX_INDEX_DUPLICATE                                         syscall.Errno = 0xC0380039\n\tERROR_VOLMGR_PLEX_INDEX_INVALID                                           syscall.Errno = 0xC038003A\n\tERROR_VOLMGR_PLEX_LAST_ACTIVE                                             syscall.Errno = 0xC038003B\n\tERROR_VOLMGR_PLEX_MISSING                                                 syscall.Errno = 0xC038003C\n\tERROR_VOLMGR_PLEX_REGENERATING                                            syscall.Errno = 0xC038003D\n\tERROR_VOLMGR_PLEX_TYPE_INVALID                                            syscall.Errno = 0xC038003E\n\tERROR_VOLMGR_PLEX_NOT_RAID5                                               syscall.Errno = 0xC038003F\n\tERROR_VOLMGR_PLEX_NOT_SIMPLE                                              syscall.Errno = 0xC0380040\n\tERROR_VOLMGR_STRUCTURE_SIZE_INVALID                                       syscall.Errno = 0xC0380041\n\tERROR_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS                               syscall.Errno = 0xC0380042\n\tERROR_VOLMGR_TRANSACTION_IN_PROGRESS                                      syscall.Errno = 0xC0380043\n\tERROR_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE                                syscall.Errno = 0xC0380044\n\tERROR_VOLMGR_VOLUME_CONTAINS_MISSING_DISK                                 syscall.Errno = 0xC0380045\n\tERROR_VOLMGR_VOLUME_ID_INVALID                                            syscall.Errno = 0xC0380046\n\tERROR_VOLMGR_VOLUME_LENGTH_INVALID                                        syscall.Errno = 0xC0380047\n\tERROR_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE                       syscall.Errno = 0xC0380048\n\tERROR_VOLMGR_VOLUME_NOT_MIRRORED                                          syscall.Errno = 0xC0380049\n\tERROR_VOLMGR_VOLUME_NOT_RETAINED                                          syscall.Errno = 0xC038004A\n\tERROR_VOLMGR_VOLUME_OFFLINE                                               syscall.Errno = 0xC038004B\n\tERROR_VOLMGR_VOLUME_RETAINED                                              syscall.Errno = 0xC038004C\n\tERROR_VOLMGR_NUMBER_OF_EXTENTS_INVALID                                    syscall.Errno = 0xC038004D\n\tERROR_VOLMGR_DIFFERENT_SECTOR_SIZE                                        syscall.Errno = 0xC038004E\n\tERROR_VOLMGR_BAD_BOOT_DISK                                                syscall.Errno = 0xC038004F\n\tERROR_VOLMGR_PACK_CONFIG_OFFLINE                                          syscall.Errno = 0xC0380050\n\tERROR_VOLMGR_PACK_CONFIG_ONLINE                                           syscall.Errno = 0xC0380051\n\tERROR_VOLMGR_NOT_PRIMARY_PACK                                             syscall.Errno = 0xC0380052\n\tERROR_VOLMGR_PACK_LOG_UPDATE_FAILED                                       syscall.Errno = 0xC0380053\n\tERROR_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID                              syscall.Errno = 0xC0380054\n\tERROR_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID                            syscall.Errno = 0xC0380055\n\tERROR_VOLMGR_VOLUME_MIRRORED                                              syscall.Errno = 0xC0380056\n\tERROR_VOLMGR_PLEX_NOT_SIMPLE_SPANNED                                      syscall.Errno = 0xC0380057\n\tERROR_VOLMGR_NO_VALID_LOG_COPIES                                          syscall.Errno = 0xC0380058\n\tERROR_VOLMGR_PRIMARY_PACK_PRESENT                                         syscall.Errno = 0xC0380059\n\tERROR_VOLMGR_NUMBER_OF_DISKS_INVALID                                      syscall.Errno = 0xC038005A\n\tERROR_VOLMGR_MIRROR_NOT_SUPPORTED                                         syscall.Errno = 0xC038005B\n\tERROR_VOLMGR_RAID5_NOT_SUPPORTED                                          syscall.Errno = 0xC038005C\n\tERROR_BCD_NOT_ALL_ENTRIES_IMPORTED                                        syscall.Errno = 0x80390001\n\tERROR_BCD_TOO_MANY_ELEMENTS                                               syscall.Errno = 0xC0390002\n\tERROR_BCD_NOT_ALL_ENTRIES_SYNCHRONIZED                                    syscall.Errno = 0x80390003\n\tERROR_VHD_DRIVE_FOOTER_MISSING                                            syscall.Errno = 0xC03A0001\n\tERROR_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH                                  syscall.Errno = 0xC03A0002\n\tERROR_VHD_DRIVE_FOOTER_CORRUPT                                            syscall.Errno = 0xC03A0003\n\tERROR_VHD_FORMAT_UNKNOWN                                                  syscall.Errno = 0xC03A0004\n\tERROR_VHD_FORMAT_UNSUPPORTED_VERSION                                      syscall.Errno = 0xC03A0005\n\tERROR_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH                                 syscall.Errno = 0xC03A0006\n\tERROR_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION                               syscall.Errno = 0xC03A0007\n\tERROR_VHD_SPARSE_HEADER_CORRUPT                                           syscall.Errno = 0xC03A0008\n\tERROR_VHD_BLOCK_ALLOCATION_FAILURE                                        syscall.Errno = 0xC03A0009\n\tERROR_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT                                  syscall.Errno = 0xC03A000A\n\tERROR_VHD_INVALID_BLOCK_SIZE                                              syscall.Errno = 0xC03A000B\n\tERROR_VHD_BITMAP_MISMATCH                                                 syscall.Errno = 0xC03A000C\n\tERROR_VHD_PARENT_VHD_NOT_FOUND                                            syscall.Errno = 0xC03A000D\n\tERROR_VHD_CHILD_PARENT_ID_MISMATCH                                        syscall.Errno = 0xC03A000E\n\tERROR_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH                                 syscall.Errno = 0xC03A000F\n\tERROR_VHD_METADATA_READ_FAILURE                                           syscall.Errno = 0xC03A0010\n\tERROR_VHD_METADATA_WRITE_FAILURE                                          syscall.Errno = 0xC03A0011\n\tERROR_VHD_INVALID_SIZE                                                    syscall.Errno = 0xC03A0012\n\tERROR_VHD_INVALID_FILE_SIZE                                               syscall.Errno = 0xC03A0013\n\tERROR_VIRTDISK_PROVIDER_NOT_FOUND                                         syscall.Errno = 0xC03A0014\n\tERROR_VIRTDISK_NOT_VIRTUAL_DISK                                           syscall.Errno = 0xC03A0015\n\tERROR_VHD_PARENT_VHD_ACCESS_DENIED                                        syscall.Errno = 0xC03A0016\n\tERROR_VHD_CHILD_PARENT_SIZE_MISMATCH                                      syscall.Errno = 0xC03A0017\n\tERROR_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED                               syscall.Errno = 0xC03A0018\n\tERROR_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT                              syscall.Errno = 0xC03A0019\n\tERROR_VIRTUAL_DISK_LIMITATION                                             syscall.Errno = 0xC03A001A\n\tERROR_VHD_INVALID_TYPE                                                    syscall.Errno = 0xC03A001B\n\tERROR_VHD_INVALID_STATE                                                   syscall.Errno = 0xC03A001C\n\tERROR_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE                               syscall.Errno = 0xC03A001D\n\tERROR_VIRTDISK_DISK_ALREADY_OWNED                                         syscall.Errno = 0xC03A001E\n\tERROR_VIRTDISK_DISK_ONLINE_AND_WRITABLE                                   syscall.Errno = 0xC03A001F\n\tERROR_CTLOG_TRACKING_NOT_INITIALIZED                                      syscall.Errno = 0xC03A0020\n\tERROR_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE                                 syscall.Errno = 0xC03A0021\n\tERROR_CTLOG_VHD_CHANGED_OFFLINE                                           syscall.Errno = 0xC03A0022\n\tERROR_CTLOG_INVALID_TRACKING_STATE                                        syscall.Errno = 0xC03A0023\n\tERROR_CTLOG_INCONSISTENT_TRACKING_FILE                                    syscall.Errno = 0xC03A0024\n\tERROR_VHD_RESIZE_WOULD_TRUNCATE_DATA                                      syscall.Errno = 0xC03A0025\n\tERROR_VHD_COULD_NOT_COMPUTE_MINIMUM_VIRTUAL_SIZE                          syscall.Errno = 0xC03A0026\n\tERROR_VHD_ALREADY_AT_OR_BELOW_MINIMUM_VIRTUAL_SIZE                        syscall.Errno = 0xC03A0027\n\tERROR_VHD_METADATA_FULL                                                   syscall.Errno = 0xC03A0028\n\tERROR_VHD_INVALID_CHANGE_TRACKING_ID                                      syscall.Errno = 0xC03A0029\n\tERROR_VHD_CHANGE_TRACKING_DISABLED                                        syscall.Errno = 0xC03A002A\n\tERROR_VHD_MISSING_CHANGE_TRACKING_INFORMATION                             syscall.Errno = 0xC03A0030\n\tERROR_QUERY_STORAGE_ERROR                                                 syscall.Errno = 0x803A0001\n\tHCN_E_NETWORK_NOT_FOUND                                                   Handle        = 0x803B0001\n\tHCN_E_ENDPOINT_NOT_FOUND                                                  Handle        = 0x803B0002\n\tHCN_E_LAYER_NOT_FOUND                                                     Handle        = 0x803B0003\n\tHCN_E_SWITCH_NOT_FOUND                                                    Handle        = 0x803B0004\n\tHCN_E_SUBNET_NOT_FOUND                                                    Handle        = 0x803B0005\n\tHCN_E_ADAPTER_NOT_FOUND                                                   Handle        = 0x803B0006\n\tHCN_E_PORT_NOT_FOUND                                                      Handle        = 0x803B0007\n\tHCN_E_POLICY_NOT_FOUND                                                    Handle        = 0x803B0008\n\tHCN_E_VFP_PORTSETTING_NOT_FOUND                                           Handle        = 0x803B0009\n\tHCN_E_INVALID_NETWORK                                                     Handle        = 0x803B000A\n\tHCN_E_INVALID_NETWORK_TYPE                                                Handle        = 0x803B000B\n\tHCN_E_INVALID_ENDPOINT                                                    Handle        = 0x803B000C\n\tHCN_E_INVALID_POLICY                                                      Handle        = 0x803B000D\n\tHCN_E_INVALID_POLICY_TYPE                                                 Handle        = 0x803B000E\n\tHCN_E_INVALID_REMOTE_ENDPOINT_OPERATION                                   Handle        = 0x803B000F\n\tHCN_E_NETWORK_ALREADY_EXISTS                                              Handle        = 0x803B0010\n\tHCN_E_LAYER_ALREADY_EXISTS                                                Handle        = 0x803B0011\n\tHCN_E_POLICY_ALREADY_EXISTS                                               Handle        = 0x803B0012\n\tHCN_E_PORT_ALREADY_EXISTS                                                 Handle        = 0x803B0013\n\tHCN_E_ENDPOINT_ALREADY_ATTACHED                                           Handle        = 0x803B0014\n\tHCN_E_REQUEST_UNSUPPORTED                                                 Handle        = 0x803B0015\n\tHCN_E_MAPPING_NOT_SUPPORTED                                               Handle        = 0x803B0016\n\tHCN_E_DEGRADED_OPERATION                                                  Handle        = 0x803B0017\n\tHCN_E_SHARED_SWITCH_MODIFICATION                                          Handle        = 0x803B0018\n\tHCN_E_GUID_CONVERSION_FAILURE                                             Handle        = 0x803B0019\n\tHCN_E_REGKEY_FAILURE                                                      Handle        = 0x803B001A\n\tHCN_E_INVALID_JSON                                                        Handle        = 0x803B001B\n\tHCN_E_INVALID_JSON_REFERENCE                                              Handle        = 0x803B001C\n\tHCN_E_ENDPOINT_SHARING_DISABLED                                           Handle        = 0x803B001D\n\tHCN_E_INVALID_IP                                                          Handle        = 0x803B001E\n\tHCN_E_SWITCH_EXTENSION_NOT_FOUND                                          Handle        = 0x803B001F\n\tHCN_E_MANAGER_STOPPED                                                     Handle        = 0x803B0020\n\tGCN_E_MODULE_NOT_FOUND                                                    Handle        = 0x803B0021\n\tGCN_E_NO_REQUEST_HANDLERS                                                 Handle        = 0x803B0022\n\tGCN_E_REQUEST_UNSUPPORTED                                                 Handle        = 0x803B0023\n\tGCN_E_RUNTIMEKEYS_FAILED                                                  Handle        = 0x803B0024\n\tGCN_E_NETADAPTER_TIMEOUT                                                  Handle        = 0x803B0025\n\tGCN_E_NETADAPTER_NOT_FOUND                                                Handle        = 0x803B0026\n\tGCN_E_NETCOMPARTMENT_NOT_FOUND                                            Handle        = 0x803B0027\n\tGCN_E_NETINTERFACE_NOT_FOUND                                              Handle        = 0x803B0028\n\tGCN_E_DEFAULTNAMESPACE_EXISTS                                             Handle        = 0x803B0029\n\tHCN_E_ICS_DISABLED                                                        Handle        = 0x803B002A\n\tHCN_E_ENDPOINT_NAMESPACE_ALREADY_EXISTS                                   Handle        = 0x803B002B\n\tHCN_E_ENTITY_HAS_REFERENCES                                               Handle        = 0x803B002C\n\tHCN_E_INVALID_INTERNAL_PORT                                               Handle        = 0x803B002D\n\tHCN_E_NAMESPACE_ATTACH_FAILED                                             Handle        = 0x803B002E\n\tHCN_E_ADDR_INVALID_OR_RESERVED                                            Handle        = 0x803B002F\n\tSDIAG_E_CANCELLED                                                         syscall.Errno = 0x803C0100\n\tSDIAG_E_SCRIPT                                                            syscall.Errno = 0x803C0101\n\tSDIAG_E_POWERSHELL                                                        syscall.Errno = 0x803C0102\n\tSDIAG_E_MANAGEDHOST                                                       syscall.Errno = 0x803C0103\n\tSDIAG_E_NOVERIFIER                                                        syscall.Errno = 0x803C0104\n\tSDIAG_S_CANNOTRUN                                                         syscall.Errno = 0x003C0105\n\tSDIAG_E_DISABLED                                                          syscall.Errno = 0x803C0106\n\tSDIAG_E_TRUST                                                             syscall.Errno = 0x803C0107\n\tSDIAG_E_CANNOTRUN                                                         syscall.Errno = 0x803C0108\n\tSDIAG_E_VERSION                                                           syscall.Errno = 0x803C0109\n\tSDIAG_E_RESOURCE                                                          syscall.Errno = 0x803C010A\n\tSDIAG_E_ROOTCAUSE                                                         syscall.Errno = 0x803C010B\n\tWPN_E_CHANNEL_CLOSED                                                      Handle        = 0x803E0100\n\tWPN_E_CHANNEL_REQUEST_NOT_COMPLETE                                        Handle        = 0x803E0101\n\tWPN_E_INVALID_APP                                                         Handle        = 0x803E0102\n\tWPN_E_OUTSTANDING_CHANNEL_REQUEST                                         Handle        = 0x803E0103\n\tWPN_E_DUPLICATE_CHANNEL                                                   Handle        = 0x803E0104\n\tWPN_E_PLATFORM_UNAVAILABLE                                                Handle        = 0x803E0105\n\tWPN_E_NOTIFICATION_POSTED                                                 Handle        = 0x803E0106\n\tWPN_E_NOTIFICATION_HIDDEN                                                 Handle        = 0x803E0107\n\tWPN_E_NOTIFICATION_NOT_POSTED                                             Handle        = 0x803E0108\n\tWPN_E_CLOUD_DISABLED                                                      Handle        = 0x803E0109\n\tWPN_E_CLOUD_INCAPABLE                                                     Handle        = 0x803E0110\n\tWPN_E_CLOUD_AUTH_UNAVAILABLE                                              Handle        = 0x803E011A\n\tWPN_E_CLOUD_SERVICE_UNAVAILABLE                                           Handle        = 0x803E011B\n\tWPN_E_FAILED_LOCK_SCREEN_UPDATE_INTIALIZATION                             Handle        = 0x803E011C\n\tWPN_E_NOTIFICATION_DISABLED                                               Handle        = 0x803E0111\n\tWPN_E_NOTIFICATION_INCAPABLE                                              Handle        = 0x803E0112\n\tWPN_E_INTERNET_INCAPABLE                                                  Handle        = 0x803E0113\n\tWPN_E_NOTIFICATION_TYPE_DISABLED                                          Handle        = 0x803E0114\n\tWPN_E_NOTIFICATION_SIZE                                                   Handle        = 0x803E0115\n\tWPN_E_TAG_SIZE                                                            Handle        = 0x803E0116\n\tWPN_E_ACCESS_DENIED                                                       Handle        = 0x803E0117\n\tWPN_E_DUPLICATE_REGISTRATION                                              Handle        = 0x803E0118\n\tWPN_E_PUSH_NOTIFICATION_INCAPABLE                                         Handle        = 0x803E0119\n\tWPN_E_DEV_ID_SIZE                                                         Handle        = 0x803E0120\n\tWPN_E_TAG_ALPHANUMERIC                                                    Handle        = 0x803E012A\n\tWPN_E_INVALID_HTTP_STATUS_CODE                                            Handle        = 0x803E012B\n\tWPN_E_OUT_OF_SESSION                                                      Handle        = 0x803E0200\n\tWPN_E_POWER_SAVE                                                          Handle        = 0x803E0201\n\tWPN_E_IMAGE_NOT_FOUND_IN_CACHE                                            Handle        = 0x803E0202\n\tWPN_E_ALL_URL_NOT_COMPLETED                                               Handle        = 0x803E0203\n\tWPN_E_INVALID_CLOUD_IMAGE                                                 Handle        = 0x803E0204\n\tWPN_E_NOTIFICATION_ID_MATCHED                                             Handle        = 0x803E0205\n\tWPN_E_CALLBACK_ALREADY_REGISTERED                                         Handle        = 0x803E0206\n\tWPN_E_TOAST_NOTIFICATION_DROPPED                                          Handle        = 0x803E0207\n\tWPN_E_STORAGE_LOCKED                                                      Handle        = 0x803E0208\n\tWPN_E_GROUP_SIZE                                                          Handle        = 0x803E0209\n\tWPN_E_GROUP_ALPHANUMERIC                                                  Handle        = 0x803E020A\n\tWPN_E_CLOUD_DISABLED_FOR_APP                                              Handle        = 0x803E020B\n\tE_MBN_CONTEXT_NOT_ACTIVATED                                               Handle        = 0x80548201\n\tE_MBN_BAD_SIM                                                             Handle        = 0x80548202\n\tE_MBN_DATA_CLASS_NOT_AVAILABLE                                            Handle        = 0x80548203\n\tE_MBN_INVALID_ACCESS_STRING                                               Handle        = 0x80548204\n\tE_MBN_MAX_ACTIVATED_CONTEXTS                                              Handle        = 0x80548205\n\tE_MBN_PACKET_SVC_DETACHED                                                 Handle        = 0x80548206\n\tE_MBN_PROVIDER_NOT_VISIBLE                                                Handle        = 0x80548207\n\tE_MBN_RADIO_POWER_OFF                                                     Handle        = 0x80548208\n\tE_MBN_SERVICE_NOT_ACTIVATED                                               Handle        = 0x80548209\n\tE_MBN_SIM_NOT_INSERTED                                                    Handle        = 0x8054820A\n\tE_MBN_VOICE_CALL_IN_PROGRESS                                              Handle        = 0x8054820B\n\tE_MBN_INVALID_CACHE                                                       Handle        = 0x8054820C\n\tE_MBN_NOT_REGISTERED                                                      Handle        = 0x8054820D\n\tE_MBN_PROVIDERS_NOT_FOUND                                                 Handle        = 0x8054820E\n\tE_MBN_PIN_NOT_SUPPORTED                                                   Handle        = 0x8054820F\n\tE_MBN_PIN_REQUIRED                                                        Handle        = 0x80548210\n\tE_MBN_PIN_DISABLED                                                        Handle        = 0x80548211\n\tE_MBN_FAILURE                                                             Handle        = 0x80548212\n\tE_MBN_INVALID_PROFILE                                                     Handle        = 0x80548218\n\tE_MBN_DEFAULT_PROFILE_EXIST                                               Handle        = 0x80548219\n\tE_MBN_SMS_ENCODING_NOT_SUPPORTED                                          Handle        = 0x80548220\n\tE_MBN_SMS_FILTER_NOT_SUPPORTED                                            Handle        = 0x80548221\n\tE_MBN_SMS_INVALID_MEMORY_INDEX                                            Handle        = 0x80548222\n\tE_MBN_SMS_LANG_NOT_SUPPORTED                                              Handle        = 0x80548223\n\tE_MBN_SMS_MEMORY_FAILURE                                                  Handle        = 0x80548224\n\tE_MBN_SMS_NETWORK_TIMEOUT                                                 Handle        = 0x80548225\n\tE_MBN_SMS_UNKNOWN_SMSC_ADDRESS                                            Handle        = 0x80548226\n\tE_MBN_SMS_FORMAT_NOT_SUPPORTED                                            Handle        = 0x80548227\n\tE_MBN_SMS_OPERATION_NOT_ALLOWED                                           Handle        = 0x80548228\n\tE_MBN_SMS_MEMORY_FULL                                                     Handle        = 0x80548229\n\tPEER_E_IPV6_NOT_INSTALLED                                                 Handle        = 0x80630001\n\tPEER_E_NOT_INITIALIZED                                                    Handle        = 0x80630002\n\tPEER_E_CANNOT_START_SERVICE                                               Handle        = 0x80630003\n\tPEER_E_NOT_LICENSED                                                       Handle        = 0x80630004\n\tPEER_E_INVALID_GRAPH                                                      Handle        = 0x80630010\n\tPEER_E_DBNAME_CHANGED                                                     Handle        = 0x80630011\n\tPEER_E_DUPLICATE_GRAPH                                                    Handle        = 0x80630012\n\tPEER_E_GRAPH_NOT_READY                                                    Handle        = 0x80630013\n\tPEER_E_GRAPH_SHUTTING_DOWN                                                Handle        = 0x80630014\n\tPEER_E_GRAPH_IN_USE                                                       Handle        = 0x80630015\n\tPEER_E_INVALID_DATABASE                                                   Handle        = 0x80630016\n\tPEER_E_TOO_MANY_ATTRIBUTES                                                Handle        = 0x80630017\n\tPEER_E_CONNECTION_NOT_FOUND                                               Handle        = 0x80630103\n\tPEER_E_CONNECT_SELF                                                       Handle        = 0x80630106\n\tPEER_E_ALREADY_LISTENING                                                  Handle        = 0x80630107\n\tPEER_E_NODE_NOT_FOUND                                                     Handle        = 0x80630108\n\tPEER_E_CONNECTION_FAILED                                                  Handle        = 0x80630109\n\tPEER_E_CONNECTION_NOT_AUTHENTICATED                                       Handle        = 0x8063010A\n\tPEER_E_CONNECTION_REFUSED                                                 Handle        = 0x8063010B\n\tPEER_E_CLASSIFIER_TOO_LONG                                                Handle        = 0x80630201\n\tPEER_E_TOO_MANY_IDENTITIES                                                Handle        = 0x80630202\n\tPEER_E_NO_KEY_ACCESS                                                      Handle        = 0x80630203\n\tPEER_E_GROUPS_EXIST                                                       Handle        = 0x80630204\n\tPEER_E_RECORD_NOT_FOUND                                                   Handle        = 0x80630301\n\tPEER_E_DATABASE_ACCESSDENIED                                              Handle        = 0x80630302\n\tPEER_E_DBINITIALIZATION_FAILED                                            Handle        = 0x80630303\n\tPEER_E_MAX_RECORD_SIZE_EXCEEDED                                           Handle        = 0x80630304\n\tPEER_E_DATABASE_ALREADY_PRESENT                                           Handle        = 0x80630305\n\tPEER_E_DATABASE_NOT_PRESENT                                               Handle        = 0x80630306\n\tPEER_E_IDENTITY_NOT_FOUND                                                 Handle        = 0x80630401\n\tPEER_E_EVENT_HANDLE_NOT_FOUND                                             Handle        = 0x80630501\n\tPEER_E_INVALID_SEARCH                                                     Handle        = 0x80630601\n\tPEER_E_INVALID_ATTRIBUTES                                                 Handle        = 0x80630602\n\tPEER_E_INVITATION_NOT_TRUSTED                                             Handle        = 0x80630701\n\tPEER_E_CHAIN_TOO_LONG                                                     Handle        = 0x80630703\n\tPEER_E_INVALID_TIME_PERIOD                                                Handle        = 0x80630705\n\tPEER_E_CIRCULAR_CHAIN_DETECTED                                            Handle        = 0x80630706\n\tPEER_E_CERT_STORE_CORRUPTED                                               Handle        = 0x80630801\n\tPEER_E_NO_CLOUD                                                           Handle        = 0x80631001\n\tPEER_E_CLOUD_NAME_AMBIGUOUS                                               Handle        = 0x80631005\n\tPEER_E_INVALID_RECORD                                                     Handle        = 0x80632010\n\tPEER_E_NOT_AUTHORIZED                                                     Handle        = 0x80632020\n\tPEER_E_PASSWORD_DOES_NOT_MEET_POLICY                                      Handle        = 0x80632021\n\tPEER_E_DEFERRED_VALIDATION                                                Handle        = 0x80632030\n\tPEER_E_INVALID_GROUP_PROPERTIES                                           Handle        = 0x80632040\n\tPEER_E_INVALID_PEER_NAME                                                  Handle        = 0x80632050\n\tPEER_E_INVALID_CLASSIFIER                                                 Handle        = 0x80632060\n\tPEER_E_INVALID_FRIENDLY_NAME                                              Handle        = 0x80632070\n\tPEER_E_INVALID_ROLE_PROPERTY                                              Handle        = 0x80632071\n\tPEER_E_INVALID_CLASSIFIER_PROPERTY                                        Handle        = 0x80632072\n\tPEER_E_INVALID_RECORD_EXPIRATION                                          Handle        = 0x80632080\n\tPEER_E_INVALID_CREDENTIAL_INFO                                            Handle        = 0x80632081\n\tPEER_E_INVALID_CREDENTIAL                                                 Handle        = 0x80632082\n\tPEER_E_INVALID_RECORD_SIZE                                                Handle        = 0x80632083\n\tPEER_E_UNSUPPORTED_VERSION                                                Handle        = 0x80632090\n\tPEER_E_GROUP_NOT_READY                                                    Handle        = 0x80632091\n\tPEER_E_GROUP_IN_USE                                                       Handle        = 0x80632092\n\tPEER_E_INVALID_GROUP                                                      Handle        = 0x80632093\n\tPEER_E_NO_MEMBERS_FOUND                                                   Handle        = 0x80632094\n\tPEER_E_NO_MEMBER_CONNECTIONS                                              Handle        = 0x80632095\n\tPEER_E_UNABLE_TO_LISTEN                                                   Handle        = 0x80632096\n\tPEER_E_IDENTITY_DELETED                                                   Handle        = 0x806320A0\n\tPEER_E_SERVICE_NOT_AVAILABLE                                              Handle        = 0x806320A1\n\tPEER_E_CONTACT_NOT_FOUND                                                  Handle        = 0x80636001\n\tPEER_S_GRAPH_DATA_CREATED                                                 Handle        = 0x00630001\n\tPEER_S_NO_EVENT_DATA                                                      Handle        = 0x00630002\n\tPEER_S_ALREADY_CONNECTED                                                  Handle        = 0x00632000\n\tPEER_S_SUBSCRIPTION_EXISTS                                                Handle        = 0x00636000\n\tPEER_S_NO_CONNECTIVITY                                                    Handle        = 0x00630005\n\tPEER_S_ALREADY_A_MEMBER                                                   Handle        = 0x00630006\n\tPEER_E_CANNOT_CONVERT_PEER_NAME                                           Handle        = 0x80634001\n\tPEER_E_INVALID_PEER_HOST_NAME                                             Handle        = 0x80634002\n\tPEER_E_NO_MORE                                                            Handle        = 0x80634003\n\tPEER_E_PNRP_DUPLICATE_PEER_NAME                                           Handle        = 0x80634005\n\tPEER_E_INVITE_CANCELLED                                                   Handle        = 0x80637000\n\tPEER_E_INVITE_RESPONSE_NOT_AVAILABLE                                      Handle        = 0x80637001\n\tPEER_E_NOT_SIGNED_IN                                                      Handle        = 0x80637003\n\tPEER_E_PRIVACY_DECLINED                                                   Handle        = 0x80637004\n\tPEER_E_TIMEOUT                                                            Handle        = 0x80637005\n\tPEER_E_INVALID_ADDRESS                                                    Handle        = 0x80637007\n\tPEER_E_FW_EXCEPTION_DISABLED                                              Handle        = 0x80637008\n\tPEER_E_FW_BLOCKED_BY_POLICY                                               Handle        = 0x80637009\n\tPEER_E_FW_BLOCKED_BY_SHIELDS_UP                                           Handle        = 0x8063700A\n\tPEER_E_FW_DECLINED                                                        Handle        = 0x8063700B\n\tUI_E_CREATE_FAILED                                                        Handle        = 0x802A0001\n\tUI_E_SHUTDOWN_CALLED                                                      Handle        = 0x802A0002\n\tUI_E_ILLEGAL_REENTRANCY                                                   Handle        = 0x802A0003\n\tUI_E_OBJECT_SEALED                                                        Handle        = 0x802A0004\n\tUI_E_VALUE_NOT_SET                                                        Handle        = 0x802A0005\n\tUI_E_VALUE_NOT_DETERMINED                                                 Handle        = 0x802A0006\n\tUI_E_INVALID_OUTPUT                                                       Handle        = 0x802A0007\n\tUI_E_BOOLEAN_EXPECTED                                                     Handle        = 0x802A0008\n\tUI_E_DIFFERENT_OWNER                                                      Handle        = 0x802A0009\n\tUI_E_AMBIGUOUS_MATCH                                                      Handle        = 0x802A000A\n\tUI_E_FP_OVERFLOW                                                          Handle        = 0x802A000B\n\tUI_E_WRONG_THREAD                                                         Handle        = 0x802A000C\n\tUI_E_STORYBOARD_ACTIVE                                                    Handle        = 0x802A0101\n\tUI_E_STORYBOARD_NOT_PLAYING                                               Handle        = 0x802A0102\n\tUI_E_START_KEYFRAME_AFTER_END                                             Handle        = 0x802A0103\n\tUI_E_END_KEYFRAME_NOT_DETERMINED                                          Handle        = 0x802A0104\n\tUI_E_LOOPS_OVERLAP                                                        Handle        = 0x802A0105\n\tUI_E_TRANSITION_ALREADY_USED                                              Handle        = 0x802A0106\n\tUI_E_TRANSITION_NOT_IN_STORYBOARD                                         Handle        = 0x802A0107\n\tUI_E_TRANSITION_ECLIPSED                                                  Handle        = 0x802A0108\n\tUI_E_TIME_BEFORE_LAST_UPDATE                                              Handle        = 0x802A0109\n\tUI_E_TIMER_CLIENT_ALREADY_CONNECTED                                       Handle        = 0x802A010A\n\tUI_E_INVALID_DIMENSION                                                    Handle        = 0x802A010B\n\tUI_E_PRIMITIVE_OUT_OF_BOUNDS                                              Handle        = 0x802A010C\n\tUI_E_WINDOW_CLOSED                                                        Handle        = 0x802A0201\n\tE_BLUETOOTH_ATT_INVALID_HANDLE                                            Handle        = 0x80650001\n\tE_BLUETOOTH_ATT_READ_NOT_PERMITTED                                        Handle        = 0x80650002\n\tE_BLUETOOTH_ATT_WRITE_NOT_PERMITTED                                       Handle        = 0x80650003\n\tE_BLUETOOTH_ATT_INVALID_PDU                                               Handle        = 0x80650004\n\tE_BLUETOOTH_ATT_INSUFFICIENT_AUTHENTICATION                               Handle        = 0x80650005\n\tE_BLUETOOTH_ATT_REQUEST_NOT_SUPPORTED                                     Handle        = 0x80650006\n\tE_BLUETOOTH_ATT_INVALID_OFFSET                                            Handle        = 0x80650007\n\tE_BLUETOOTH_ATT_INSUFFICIENT_AUTHORIZATION                                Handle        = 0x80650008\n\tE_BLUETOOTH_ATT_PREPARE_QUEUE_FULL                                        Handle        = 0x80650009\n\tE_BLUETOOTH_ATT_ATTRIBUTE_NOT_FOUND                                       Handle        = 0x8065000A\n\tE_BLUETOOTH_ATT_ATTRIBUTE_NOT_LONG                                        Handle        = 0x8065000B\n\tE_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE                          Handle        = 0x8065000C\n\tE_BLUETOOTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH                            Handle        = 0x8065000D\n\tE_BLUETOOTH_ATT_UNLIKELY                                                  Handle        = 0x8065000E\n\tE_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION                                   Handle        = 0x8065000F\n\tE_BLUETOOTH_ATT_UNSUPPORTED_GROUP_TYPE                                    Handle        = 0x80650010\n\tE_BLUETOOTH_ATT_INSUFFICIENT_RESOURCES                                    Handle        = 0x80650011\n\tE_BLUETOOTH_ATT_UNKNOWN_ERROR                                             Handle        = 0x80651000\n\tE_AUDIO_ENGINE_NODE_NOT_FOUND                                             Handle        = 0x80660001\n\tE_HDAUDIO_EMPTY_CONNECTION_LIST                                           Handle        = 0x80660002\n\tE_HDAUDIO_CONNECTION_LIST_NOT_SUPPORTED                                   Handle        = 0x80660003\n\tE_HDAUDIO_NO_LOGICAL_DEVICES_CREATED                                      Handle        = 0x80660004\n\tE_HDAUDIO_NULL_LINKED_LIST_ENTRY                                          Handle        = 0x80660005\n\tSTATEREPOSITORY_E_CONCURRENCY_LOCKING_FAILURE                             Handle        = 0x80670001\n\tSTATEREPOSITORY_E_STATEMENT_INPROGRESS                                    Handle        = 0x80670002\n\tSTATEREPOSITORY_E_CONFIGURATION_INVALID                                   Handle        = 0x80670003\n\tSTATEREPOSITORY_E_UNKNOWN_SCHEMA_VERSION                                  Handle        = 0x80670004\n\tSTATEREPOSITORY_ERROR_DICTIONARY_CORRUPTED                                Handle        = 0x80670005\n\tSTATEREPOSITORY_E_BLOCKED                                                 Handle        = 0x80670006\n\tSTATEREPOSITORY_E_BUSY_RETRY                                              Handle        = 0x80670007\n\tSTATEREPOSITORY_E_BUSY_RECOVERY_RETRY                                     Handle        = 0x80670008\n\tSTATEREPOSITORY_E_LOCKED_RETRY                                            Handle        = 0x80670009\n\tSTATEREPOSITORY_E_LOCKED_SHAREDCACHE_RETRY                                Handle        = 0x8067000A\n\tSTATEREPOSITORY_E_TRANSACTION_REQUIRED                                    Handle        = 0x8067000B\n\tSTATEREPOSITORY_E_BUSY_TIMEOUT_EXCEEDED                                   Handle        = 0x8067000C\n\tSTATEREPOSITORY_E_BUSY_RECOVERY_TIMEOUT_EXCEEDED                          Handle        = 0x8067000D\n\tSTATEREPOSITORY_E_LOCKED_TIMEOUT_EXCEEDED                                 Handle        = 0x8067000E\n\tSTATEREPOSITORY_E_LOCKED_SHAREDCACHE_TIMEOUT_EXCEEDED                     Handle        = 0x8067000F\n\tSTATEREPOSITORY_E_SERVICE_STOP_IN_PROGRESS                                Handle        = 0x80670010\n\tSTATEREPOSTORY_E_NESTED_TRANSACTION_NOT_SUPPORTED                         Handle        = 0x80670011\n\tSTATEREPOSITORY_ERROR_CACHE_CORRUPTED                                     Handle        = 0x80670012\n\tSTATEREPOSITORY_TRANSACTION_CALLER_ID_CHANGED                             Handle        = 0x00670013\n\tSTATEREPOSITORY_TRANSACTION_IN_PROGRESS                                   Handle        = 0x00670014\n\tERROR_SPACES_POOL_WAS_DELETED                                             Handle        = 0x00E70001\n\tERROR_SPACES_FAULT_DOMAIN_TYPE_INVALID                                    Handle        = 0x80E70001\n\tERROR_SPACES_INTERNAL_ERROR                                               Handle        = 0x80E70002\n\tERROR_SPACES_RESILIENCY_TYPE_INVALID                                      Handle        = 0x80E70003\n\tERROR_SPACES_DRIVE_SECTOR_SIZE_INVALID                                    Handle        = 0x80E70004\n\tERROR_SPACES_DRIVE_REDUNDANCY_INVALID                                     Handle        = 0x80E70006\n\tERROR_SPACES_NUMBER_OF_DATA_COPIES_INVALID                                Handle        = 0x80E70007\n\tERROR_SPACES_PARITY_LAYOUT_INVALID                                        Handle        = 0x80E70008\n\tERROR_SPACES_INTERLEAVE_LENGTH_INVALID                                    Handle        = 0x80E70009\n\tERROR_SPACES_NUMBER_OF_COLUMNS_INVALID                                    Handle        = 0x80E7000A\n\tERROR_SPACES_NOT_ENOUGH_DRIVES                                            Handle        = 0x80E7000B\n\tERROR_SPACES_EXTENDED_ERROR                                               Handle        = 0x80E7000C\n\tERROR_SPACES_PROVISIONING_TYPE_INVALID                                    Handle        = 0x80E7000D\n\tERROR_SPACES_ALLOCATION_SIZE_INVALID                                      Handle        = 0x80E7000E\n\tERROR_SPACES_ENCLOSURE_AWARE_INVALID                                      Handle        = 0x80E7000F\n\tERROR_SPACES_WRITE_CACHE_SIZE_INVALID                                     Handle        = 0x80E70010\n\tERROR_SPACES_NUMBER_OF_GROUPS_INVALID                                     Handle        = 0x80E70011\n\tERROR_SPACES_DRIVE_OPERATIONAL_STATE_INVALID                              Handle        = 0x80E70012\n\tERROR_SPACES_ENTRY_INCOMPLETE                                             Handle        = 0x80E70013\n\tERROR_SPACES_ENTRY_INVALID                                                Handle        = 0x80E70014\n\tERROR_VOLSNAP_BOOTFILE_NOT_VALID                                          Handle        = 0x80820001\n\tERROR_VOLSNAP_ACTIVATION_TIMEOUT                                          Handle        = 0x80820002\n\tERROR_TIERING_NOT_SUPPORTED_ON_VOLUME                                     Handle        = 0x80830001\n\tERROR_TIERING_VOLUME_DISMOUNT_IN_PROGRESS                                 Handle        = 0x80830002\n\tERROR_TIERING_STORAGE_TIER_NOT_FOUND                                      Handle        = 0x80830003\n\tERROR_TIERING_INVALID_FILE_ID                                             Handle        = 0x80830004\n\tERROR_TIERING_WRONG_CLUSTER_NODE                                          Handle        = 0x80830005\n\tERROR_TIERING_ALREADY_PROCESSING                                          Handle        = 0x80830006\n\tERROR_TIERING_CANNOT_PIN_OBJECT                                           Handle        = 0x80830007\n\tERROR_TIERING_FILE_IS_NOT_PINNED                                          Handle        = 0x80830008\n\tERROR_NOT_A_TIERED_VOLUME                                                 Handle        = 0x80830009\n\tERROR_ATTRIBUTE_NOT_PRESENT                                               Handle        = 0x8083000A\n\tERROR_SECCORE_INVALID_COMMAND                                             Handle        = 0xC0E80000\n\tERROR_NO_APPLICABLE_APP_LICENSES_FOUND                                    Handle        = 0xC0EA0001\n\tERROR_CLIP_LICENSE_NOT_FOUND                                              Handle        = 0xC0EA0002\n\tERROR_CLIP_DEVICE_LICENSE_MISSING                                         Handle        = 0xC0EA0003\n\tERROR_CLIP_LICENSE_INVALID_SIGNATURE                                      Handle        = 0xC0EA0004\n\tERROR_CLIP_KEYHOLDER_LICENSE_MISSING_OR_INVALID                           Handle        = 0xC0EA0005\n\tERROR_CLIP_LICENSE_EXPIRED                                                Handle        = 0xC0EA0006\n\tERROR_CLIP_LICENSE_SIGNED_BY_UNKNOWN_SOURCE                               Handle        = 0xC0EA0007\n\tERROR_CLIP_LICENSE_NOT_SIGNED                                             Handle        = 0xC0EA0008\n\tERROR_CLIP_LICENSE_HARDWARE_ID_OUT_OF_TOLERANCE                           Handle        = 0xC0EA0009\n\tERROR_CLIP_LICENSE_DEVICE_ID_MISMATCH                                     Handle        = 0xC0EA000A\n\tDXGI_STATUS_OCCLUDED                                                      Handle        = 0x087A0001\n\tDXGI_STATUS_CLIPPED                                                       Handle        = 0x087A0002\n\tDXGI_STATUS_NO_REDIRECTION                                                Handle        = 0x087A0004\n\tDXGI_STATUS_NO_DESKTOP_ACCESS                                             Handle        = 0x087A0005\n\tDXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE                                  Handle        = 0x087A0006\n\tDXGI_STATUS_MODE_CHANGED                                                  Handle        = 0x087A0007\n\tDXGI_STATUS_MODE_CHANGE_IN_PROGRESS                                       Handle        = 0x087A0008\n\tDXGI_ERROR_INVALID_CALL                                                   Handle        = 0x887A0001\n\tDXGI_ERROR_NOT_FOUND                                                      Handle        = 0x887A0002\n\tDXGI_ERROR_MORE_DATA                                                      Handle        = 0x887A0003\n\tDXGI_ERROR_UNSUPPORTED                                                    Handle        = 0x887A0004\n\tDXGI_ERROR_DEVICE_REMOVED                                                 Handle        = 0x887A0005\n\tDXGI_ERROR_DEVICE_HUNG                                                    Handle        = 0x887A0006\n\tDXGI_ERROR_DEVICE_RESET                                                   Handle        = 0x887A0007\n\tDXGI_ERROR_WAS_STILL_DRAWING                                              Handle        = 0x887A000A\n\tDXGI_ERROR_FRAME_STATISTICS_DISJOINT                                      Handle        = 0x887A000B\n\tDXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE                                   Handle        = 0x887A000C\n\tDXGI_ERROR_DRIVER_INTERNAL_ERROR                                          Handle        = 0x887A0020\n\tDXGI_ERROR_NONEXCLUSIVE                                                   Handle        = 0x887A0021\n\tDXGI_ERROR_NOT_CURRENTLY_AVAILABLE                                        Handle        = 0x887A0022\n\tDXGI_ERROR_REMOTE_CLIENT_DISCONNECTED                                     Handle        = 0x887A0023\n\tDXGI_ERROR_REMOTE_OUTOFMEMORY                                             Handle        = 0x887A0024\n\tDXGI_ERROR_ACCESS_LOST                                                    Handle        = 0x887A0026\n\tDXGI_ERROR_WAIT_TIMEOUT                                                   Handle        = 0x887A0027\n\tDXGI_ERROR_SESSION_DISCONNECTED                                           Handle        = 0x887A0028\n\tDXGI_ERROR_RESTRICT_TO_OUTPUT_STALE                                       Handle        = 0x887A0029\n\tDXGI_ERROR_CANNOT_PROTECT_CONTENT                                         Handle        = 0x887A002A\n\tDXGI_ERROR_ACCESS_DENIED                                                  Handle        = 0x887A002B\n\tDXGI_ERROR_NAME_ALREADY_EXISTS                                            Handle        = 0x887A002C\n\tDXGI_ERROR_SDK_COMPONENT_MISSING                                          Handle        = 0x887A002D\n\tDXGI_ERROR_NOT_CURRENT                                                    Handle        = 0x887A002E\n\tDXGI_ERROR_HW_PROTECTION_OUTOFMEMORY                                      Handle        = 0x887A0030\n\tDXGI_ERROR_DYNAMIC_CODE_POLICY_VIOLATION                                  Handle        = 0x887A0031\n\tDXGI_ERROR_NON_COMPOSITED_UI                                              Handle        = 0x887A0032\n\tDXGI_STATUS_UNOCCLUDED                                                    Handle        = 0x087A0009\n\tDXGI_STATUS_DDA_WAS_STILL_DRAWING                                         Handle        = 0x087A000A\n\tDXGI_ERROR_MODE_CHANGE_IN_PROGRESS                                        Handle        = 0x887A0025\n\tDXGI_STATUS_PRESENT_REQUIRED                                              Handle        = 0x087A002F\n\tDXGI_ERROR_CACHE_CORRUPT                                                  Handle        = 0x887A0033\n\tDXGI_ERROR_CACHE_FULL                                                     Handle        = 0x887A0034\n\tDXGI_ERROR_CACHE_HASH_COLLISION                                           Handle        = 0x887A0035\n\tDXGI_ERROR_ALREADY_EXISTS                                                 Handle        = 0x887A0036\n\tDXGI_DDI_ERR_WASSTILLDRAWING                                              Handle        = 0x887B0001\n\tDXGI_DDI_ERR_UNSUPPORTED                                                  Handle        = 0x887B0002\n\tDXGI_DDI_ERR_NONEXCLUSIVE                                                 Handle        = 0x887B0003\n\tD3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS                                 Handle        = 0x88790001\n\tD3D10_ERROR_FILE_NOT_FOUND                                                Handle        = 0x88790002\n\tD3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS                                 Handle        = 0x887C0001\n\tD3D11_ERROR_FILE_NOT_FOUND                                                Handle        = 0x887C0002\n\tD3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS                                  Handle        = 0x887C0003\n\tD3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD                  Handle        = 0x887C0004\n\tD3D12_ERROR_ADAPTER_NOT_FOUND                                             Handle        = 0x887E0001\n\tD3D12_ERROR_DRIVER_VERSION_MISMATCH                                       Handle        = 0x887E0002\n\tD2DERR_WRONG_STATE                                                        Handle        = 0x88990001\n\tD2DERR_NOT_INITIALIZED                                                    Handle        = 0x88990002\n\tD2DERR_UNSUPPORTED_OPERATION                                              Handle        = 0x88990003\n\tD2DERR_SCANNER_FAILED                                                     Handle        = 0x88990004\n\tD2DERR_SCREEN_ACCESS_DENIED                                               Handle        = 0x88990005\n\tD2DERR_DISPLAY_STATE_INVALID                                              Handle        = 0x88990006\n\tD2DERR_ZERO_VECTOR                                                        Handle        = 0x88990007\n\tD2DERR_INTERNAL_ERROR                                                     Handle        = 0x88990008\n\tD2DERR_DISPLAY_FORMAT_NOT_SUPPORTED                                       Handle        = 0x88990009\n\tD2DERR_INVALID_CALL                                                       Handle        = 0x8899000A\n\tD2DERR_NO_HARDWARE_DEVICE                                                 Handle        = 0x8899000B\n\tD2DERR_RECREATE_TARGET                                                    Handle        = 0x8899000C\n\tD2DERR_TOO_MANY_SHADER_ELEMENTS                                           Handle        = 0x8899000D\n\tD2DERR_SHADER_COMPILE_FAILED                                              Handle        = 0x8899000E\n\tD2DERR_MAX_TEXTURE_SIZE_EXCEEDED                                          Handle        = 0x8899000F\n\tD2DERR_UNSUPPORTED_VERSION                                                Handle        = 0x88990010\n\tD2DERR_BAD_NUMBER                                                         Handle        = 0x88990011\n\tD2DERR_WRONG_FACTORY                                                      Handle        = 0x88990012\n\tD2DERR_LAYER_ALREADY_IN_USE                                               Handle        = 0x88990013\n\tD2DERR_POP_CALL_DID_NOT_MATCH_PUSH                                        Handle        = 0x88990014\n\tD2DERR_WRONG_RESOURCE_DOMAIN                                              Handle        = 0x88990015\n\tD2DERR_PUSH_POP_UNBALANCED                                                Handle        = 0x88990016\n\tD2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT                                Handle        = 0x88990017\n\tD2DERR_INCOMPATIBLE_BRUSH_TYPES                                           Handle        = 0x88990018\n\tD2DERR_WIN32_ERROR                                                        Handle        = 0x88990019\n\tD2DERR_TARGET_NOT_GDI_COMPATIBLE                                          Handle        = 0x8899001A\n\tD2DERR_TEXT_EFFECT_IS_WRONG_TYPE                                          Handle        = 0x8899001B\n\tD2DERR_TEXT_RENDERER_NOT_RELEASED                                         Handle        = 0x8899001C\n\tD2DERR_EXCEEDS_MAX_BITMAP_SIZE                                            Handle        = 0x8899001D\n\tD2DERR_INVALID_GRAPH_CONFIGURATION                                        Handle        = 0x8899001E\n\tD2DERR_INVALID_INTERNAL_GRAPH_CONFIGURATION                               Handle        = 0x8899001F\n\tD2DERR_CYCLIC_GRAPH                                                       Handle        = 0x88990020\n\tD2DERR_BITMAP_CANNOT_DRAW                                                 Handle        = 0x88990021\n\tD2DERR_OUTSTANDING_BITMAP_REFERENCES                                      Handle        = 0x88990022\n\tD2DERR_ORIGINAL_TARGET_NOT_BOUND                                          Handle        = 0x88990023\n\tD2DERR_INVALID_TARGET                                                     Handle        = 0x88990024\n\tD2DERR_BITMAP_BOUND_AS_TARGET                                             Handle        = 0x88990025\n\tD2DERR_INSUFFICIENT_DEVICE_CAPABILITIES                                   Handle        = 0x88990026\n\tD2DERR_INTERMEDIATE_TOO_LARGE                                             Handle        = 0x88990027\n\tD2DERR_EFFECT_IS_NOT_REGISTERED                                           Handle        = 0x88990028\n\tD2DERR_INVALID_PROPERTY                                                   Handle        = 0x88990029\n\tD2DERR_NO_SUBPROPERTIES                                                   Handle        = 0x8899002A\n\tD2DERR_PRINT_JOB_CLOSED                                                   Handle        = 0x8899002B\n\tD2DERR_PRINT_FORMAT_NOT_SUPPORTED                                         Handle        = 0x8899002C\n\tD2DERR_TOO_MANY_TRANSFORM_INPUTS                                          Handle        = 0x8899002D\n\tD2DERR_INVALID_GLYPH_IMAGE                                                Handle        = 0x8899002E\n\tDWRITE_E_FILEFORMAT                                                       Handle        = 0x88985000\n\tDWRITE_E_UNEXPECTED                                                       Handle        = 0x88985001\n\tDWRITE_E_NOFONT                                                           Handle        = 0x88985002\n\tDWRITE_E_FILENOTFOUND                                                     Handle        = 0x88985003\n\tDWRITE_E_FILEACCESS                                                       Handle        = 0x88985004\n\tDWRITE_E_FONTCOLLECTIONOBSOLETE                                           Handle        = 0x88985005\n\tDWRITE_E_ALREADYREGISTERED                                                Handle        = 0x88985006\n\tDWRITE_E_CACHEFORMAT                                                      Handle        = 0x88985007\n\tDWRITE_E_CACHEVERSION                                                     Handle        = 0x88985008\n\tDWRITE_E_UNSUPPORTEDOPERATION                                             Handle        = 0x88985009\n\tDWRITE_E_TEXTRENDERERINCOMPATIBLE                                         Handle        = 0x8898500A\n\tDWRITE_E_FLOWDIRECTIONCONFLICTS                                           Handle        = 0x8898500B\n\tDWRITE_E_NOCOLOR                                                          Handle        = 0x8898500C\n\tDWRITE_E_REMOTEFONT                                                       Handle        = 0x8898500D\n\tDWRITE_E_DOWNLOADCANCELLED                                                Handle        = 0x8898500E\n\tDWRITE_E_DOWNLOADFAILED                                                   Handle        = 0x8898500F\n\tDWRITE_E_TOOMANYDOWNLOADS                                                 Handle        = 0x88985010\n\tWINCODEC_ERR_WRONGSTATE                                                   Handle        = 0x88982F04\n\tWINCODEC_ERR_VALUEOUTOFRANGE                                              Handle        = 0x88982F05\n\tWINCODEC_ERR_UNKNOWNIMAGEFORMAT                                           Handle        = 0x88982F07\n\tWINCODEC_ERR_UNSUPPORTEDVERSION                                           Handle        = 0x88982F0B\n\tWINCODEC_ERR_NOTINITIALIZED                                               Handle        = 0x88982F0C\n\tWINCODEC_ERR_ALREADYLOCKED                                                Handle        = 0x88982F0D\n\tWINCODEC_ERR_PROPERTYNOTFOUND                                             Handle        = 0x88982F40\n\tWINCODEC_ERR_PROPERTYNOTSUPPORTED                                         Handle        = 0x88982F41\n\tWINCODEC_ERR_PROPERTYSIZE                                                 Handle        = 0x88982F42\n\tWINCODEC_ERR_CODECPRESENT                                                 Handle        = 0x88982F43\n\tWINCODEC_ERR_CODECNOTHUMBNAIL                                             Handle        = 0x88982F44\n\tWINCODEC_ERR_PALETTEUNAVAILABLE                                           Handle        = 0x88982F45\n\tWINCODEC_ERR_CODECTOOMANYSCANLINES                                        Handle        = 0x88982F46\n\tWINCODEC_ERR_INTERNALERROR                                                Handle        = 0x88982F48\n\tWINCODEC_ERR_SOURCERECTDOESNOTMATCHDIMENSIONS                             Handle        = 0x88982F49\n\tWINCODEC_ERR_COMPONENTNOTFOUND                                            Handle        = 0x88982F50\n\tWINCODEC_ERR_IMAGESIZEOUTOFRANGE                                          Handle        = 0x88982F51\n\tWINCODEC_ERR_TOOMUCHMETADATA                                              Handle        = 0x88982F52\n\tWINCODEC_ERR_BADIMAGE                                                     Handle        = 0x88982F60\n\tWINCODEC_ERR_BADHEADER                                                    Handle        = 0x88982F61\n\tWINCODEC_ERR_FRAMEMISSING                                                 Handle        = 0x88982F62\n\tWINCODEC_ERR_BADMETADATAHEADER                                            Handle        = 0x88982F63\n\tWINCODEC_ERR_BADSTREAMDATA                                                Handle        = 0x88982F70\n\tWINCODEC_ERR_STREAMWRITE                                                  Handle        = 0x88982F71\n\tWINCODEC_ERR_STREAMREAD                                                   Handle        = 0x88982F72\n\tWINCODEC_ERR_STREAMNOTAVAILABLE                                           Handle        = 0x88982F73\n\tWINCODEC_ERR_UNSUPPORTEDPIXELFORMAT                                       Handle        = 0x88982F80\n\tWINCODEC_ERR_UNSUPPORTEDOPERATION                                         Handle        = 0x88982F81\n\tWINCODEC_ERR_INVALIDREGISTRATION                                          Handle        = 0x88982F8A\n\tWINCODEC_ERR_COMPONENTINITIALIZEFAILURE                                   Handle        = 0x88982F8B\n\tWINCODEC_ERR_INSUFFICIENTBUFFER                                           Handle        = 0x88982F8C\n\tWINCODEC_ERR_DUPLICATEMETADATAPRESENT                                     Handle        = 0x88982F8D\n\tWINCODEC_ERR_PROPERTYUNEXPECTEDTYPE                                       Handle        = 0x88982F8E\n\tWINCODEC_ERR_UNEXPECTEDSIZE                                               Handle        = 0x88982F8F\n\tWINCODEC_ERR_INVALIDQUERYREQUEST                                          Handle        = 0x88982F90\n\tWINCODEC_ERR_UNEXPECTEDMETADATATYPE                                       Handle        = 0x88982F91\n\tWINCODEC_ERR_REQUESTONLYVALIDATMETADATAROOT                               Handle        = 0x88982F92\n\tWINCODEC_ERR_INVALIDQUERYCHARACTER                                        Handle        = 0x88982F93\n\tWINCODEC_ERR_WIN32ERROR                                                   Handle        = 0x88982F94\n\tWINCODEC_ERR_INVALIDPROGRESSIVELEVEL                                      Handle        = 0x88982F95\n\tWINCODEC_ERR_INVALIDJPEGSCANINDEX                                         Handle        = 0x88982F96\n\tMILERR_OBJECTBUSY                                                         Handle        = 0x88980001\n\tMILERR_INSUFFICIENTBUFFER                                                 Handle        = 0x88980002\n\tMILERR_WIN32ERROR                                                         Handle        = 0x88980003\n\tMILERR_SCANNER_FAILED                                                     Handle        = 0x88980004\n\tMILERR_SCREENACCESSDENIED                                                 Handle        = 0x88980005\n\tMILERR_DISPLAYSTATEINVALID                                                Handle        = 0x88980006\n\tMILERR_NONINVERTIBLEMATRIX                                                Handle        = 0x88980007\n\tMILERR_ZEROVECTOR                                                         Handle        = 0x88980008\n\tMILERR_TERMINATED                                                         Handle        = 0x88980009\n\tMILERR_BADNUMBER                                                          Handle        = 0x8898000A\n\tMILERR_INTERNALERROR                                                      Handle        = 0x88980080\n\tMILERR_DISPLAYFORMATNOTSUPPORTED                                          Handle        = 0x88980084\n\tMILERR_INVALIDCALL                                                        Handle        = 0x88980085\n\tMILERR_ALREADYLOCKED                                                      Handle        = 0x88980086\n\tMILERR_NOTLOCKED                                                          Handle        = 0x88980087\n\tMILERR_DEVICECANNOTRENDERTEXT                                             Handle        = 0x88980088\n\tMILERR_GLYPHBITMAPMISSED                                                  Handle        = 0x88980089\n\tMILERR_MALFORMEDGLYPHCACHE                                                Handle        = 0x8898008A\n\tMILERR_GENERIC_IGNORE                                                     Handle        = 0x8898008B\n\tMILERR_MALFORMED_GUIDELINE_DATA                                           Handle        = 0x8898008C\n\tMILERR_NO_HARDWARE_DEVICE                                                 Handle        = 0x8898008D\n\tMILERR_NEED_RECREATE_AND_PRESENT                                          Handle        = 0x8898008E\n\tMILERR_ALREADY_INITIALIZED                                                Handle        = 0x8898008F\n\tMILERR_MISMATCHED_SIZE                                                    Handle        = 0x88980090\n\tMILERR_NO_REDIRECTION_SURFACE_AVAILABLE                                   Handle        = 0x88980091\n\tMILERR_REMOTING_NOT_SUPPORTED                                             Handle        = 0x88980092\n\tMILERR_QUEUED_PRESENT_NOT_SUPPORTED                                       Handle        = 0x88980093\n\tMILERR_NOT_QUEUING_PRESENTS                                               Handle        = 0x88980094\n\tMILERR_NO_REDIRECTION_SURFACE_RETRY_LATER                                 Handle        = 0x88980095\n\tMILERR_TOOMANYSHADERELEMNTS                                               Handle        = 0x88980096\n\tMILERR_MROW_READLOCK_FAILED                                               Handle        = 0x88980097\n\tMILERR_MROW_UPDATE_FAILED                                                 Handle        = 0x88980098\n\tMILERR_SHADER_COMPILE_FAILED                                              Handle        = 0x88980099\n\tMILERR_MAX_TEXTURE_SIZE_EXCEEDED                                          Handle        = 0x8898009A\n\tMILERR_QPC_TIME_WENT_BACKWARD                                             Handle        = 0x8898009B\n\tMILERR_DXGI_ENUMERATION_OUT_OF_SYNC                                       Handle        = 0x8898009D\n\tMILERR_ADAPTER_NOT_FOUND                                                  Handle        = 0x8898009E\n\tMILERR_COLORSPACE_NOT_SUPPORTED                                           Handle        = 0x8898009F\n\tMILERR_PREFILTER_NOT_SUPPORTED                                            Handle        = 0x889800A0\n\tMILERR_DISPLAYID_ACCESS_DENIED                                            Handle        = 0x889800A1\n\tUCEERR_INVALIDPACKETHEADER                                                Handle        = 0x88980400\n\tUCEERR_UNKNOWNPACKET                                                      Handle        = 0x88980401\n\tUCEERR_ILLEGALPACKET                                                      Handle        = 0x88980402\n\tUCEERR_MALFORMEDPACKET                                                    Handle        = 0x88980403\n\tUCEERR_ILLEGALHANDLE                                                      Handle        = 0x88980404\n\tUCEERR_HANDLELOOKUPFAILED                                                 Handle        = 0x88980405\n\tUCEERR_RENDERTHREADFAILURE                                                Handle        = 0x88980406\n\tUCEERR_CTXSTACKFRSTTARGETNULL                                             Handle        = 0x88980407\n\tUCEERR_CONNECTIONIDLOOKUPFAILED                                           Handle        = 0x88980408\n\tUCEERR_BLOCKSFULL                                                         Handle        = 0x88980409\n\tUCEERR_MEMORYFAILURE                                                      Handle        = 0x8898040A\n\tUCEERR_PACKETRECORDOUTOFRANGE                                             Handle        = 0x8898040B\n\tUCEERR_ILLEGALRECORDTYPE                                                  Handle        = 0x8898040C\n\tUCEERR_OUTOFHANDLES                                                       Handle        = 0x8898040D\n\tUCEERR_UNCHANGABLE_UPDATE_ATTEMPTED                                       Handle        = 0x8898040E\n\tUCEERR_NO_MULTIPLE_WORKER_THREADS                                         Handle        = 0x8898040F\n\tUCEERR_REMOTINGNOTSUPPORTED                                               Handle        = 0x88980410\n\tUCEERR_MISSINGENDCOMMAND                                                  Handle        = 0x88980411\n\tUCEERR_MISSINGBEGINCOMMAND                                                Handle        = 0x88980412\n\tUCEERR_CHANNELSYNCTIMEDOUT                                                Handle        = 0x88980413\n\tUCEERR_CHANNELSYNCABANDONED                                               Handle        = 0x88980414\n\tUCEERR_UNSUPPORTEDTRANSPORTVERSION                                        Handle        = 0x88980415\n\tUCEERR_TRANSPORTUNAVAILABLE                                               Handle        = 0x88980416\n\tUCEERR_FEEDBACK_UNSUPPORTED                                               Handle        = 0x88980417\n\tUCEERR_COMMANDTRANSPORTDENIED                                             Handle        = 0x88980418\n\tUCEERR_GRAPHICSSTREAMUNAVAILABLE                                          Handle        = 0x88980419\n\tUCEERR_GRAPHICSSTREAMALREADYOPEN                                          Handle        = 0x88980420\n\tUCEERR_TRANSPORTDISCONNECTED                                              Handle        = 0x88980421\n\tUCEERR_TRANSPORTOVERLOADED                                                Handle        = 0x88980422\n\tUCEERR_PARTITION_ZOMBIED                                                  Handle        = 0x88980423\n\tMILAVERR_NOCLOCK                                                          Handle        = 0x88980500\n\tMILAVERR_NOMEDIATYPE                                                      Handle        = 0x88980501\n\tMILAVERR_NOVIDEOMIXER                                                     Handle        = 0x88980502\n\tMILAVERR_NOVIDEOPRESENTER                                                 Handle        = 0x88980503\n\tMILAVERR_NOREADYFRAMES                                                    Handle        = 0x88980504\n\tMILAVERR_MODULENOTLOADED                                                  Handle        = 0x88980505\n\tMILAVERR_WMPFACTORYNOTREGISTERED                                          Handle        = 0x88980506\n\tMILAVERR_INVALIDWMPVERSION                                                Handle        = 0x88980507\n\tMILAVERR_INSUFFICIENTVIDEORESOURCES                                       Handle        = 0x88980508\n\tMILAVERR_VIDEOACCELERATIONNOTAVAILABLE                                    Handle        = 0x88980509\n\tMILAVERR_REQUESTEDTEXTURETOOBIG                                           Handle        = 0x8898050A\n\tMILAVERR_SEEKFAILED                                                       Handle        = 0x8898050B\n\tMILAVERR_UNEXPECTEDWMPFAILURE                                             Handle        = 0x8898050C\n\tMILAVERR_MEDIAPLAYERCLOSED                                                Handle        = 0x8898050D\n\tMILAVERR_UNKNOWNHARDWAREERROR                                             Handle        = 0x8898050E\n\tMILEFFECTSERR_UNKNOWNPROPERTY                                             Handle        = 0x8898060E\n\tMILEFFECTSERR_EFFECTNOTPARTOFGROUP                                        Handle        = 0x8898060F\n\tMILEFFECTSERR_NOINPUTSOURCEATTACHED                                       Handle        = 0x88980610\n\tMILEFFECTSERR_CONNECTORNOTCONNECTED                                       Handle        = 0x88980611\n\tMILEFFECTSERR_CONNECTORNOTASSOCIATEDWITHEFFECT                            Handle        = 0x88980612\n\tMILEFFECTSERR_RESERVED                                                    Handle        = 0x88980613\n\tMILEFFECTSERR_CYCLEDETECTED                                               Handle        = 0x88980614\n\tMILEFFECTSERR_EFFECTINMORETHANONEGRAPH                                    Handle        = 0x88980615\n\tMILEFFECTSERR_EFFECTALREADYINAGRAPH                                       Handle        = 0x88980616\n\tMILEFFECTSERR_EFFECTHASNOCHILDREN                                         Handle        = 0x88980617\n\tMILEFFECTSERR_ALREADYATTACHEDTOLISTENER                                   Handle        = 0x88980618\n\tMILEFFECTSERR_NOTAFFINETRANSFORM                                          Handle        = 0x88980619\n\tMILEFFECTSERR_EMPTYBOUNDS                                                 Handle        = 0x8898061A\n\tMILEFFECTSERR_OUTPUTSIZETOOLARGE                                          Handle        = 0x8898061B\n\tDWMERR_STATE_TRANSITION_FAILED                                            Handle        = 0x88980700\n\tDWMERR_THEME_FAILED                                                       Handle        = 0x88980701\n\tDWMERR_CATASTROPHIC_FAILURE                                               Handle        = 0x88980702\n\tDCOMPOSITION_ERROR_WINDOW_ALREADY_COMPOSED                                Handle        = 0x88980800\n\tDCOMPOSITION_ERROR_SURFACE_BEING_RENDERED                                 Handle        = 0x88980801\n\tDCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED                             Handle        = 0x88980802\n\tONL_E_INVALID_AUTHENTICATION_TARGET                                       Handle        = 0x80860001\n\tONL_E_ACCESS_DENIED_BY_TOU                                                Handle        = 0x80860002\n\tONL_E_INVALID_APPLICATION                                                 Handle        = 0x80860003\n\tONL_E_PASSWORD_UPDATE_REQUIRED                                            Handle        = 0x80860004\n\tONL_E_ACCOUNT_UPDATE_REQUIRED                                             Handle        = 0x80860005\n\tONL_E_FORCESIGNIN                                                         Handle        = 0x80860006\n\tONL_E_ACCOUNT_LOCKED                                                      Handle        = 0x80860007\n\tONL_E_PARENTAL_CONSENT_REQUIRED                                           Handle        = 0x80860008\n\tONL_E_EMAIL_VERIFICATION_REQUIRED                                         Handle        = 0x80860009\n\tONL_E_ACCOUNT_SUSPENDED_COMPROIMISE                                       Handle        = 0x8086000A\n\tONL_E_ACCOUNT_SUSPENDED_ABUSE                                             Handle        = 0x8086000B\n\tONL_E_ACTION_REQUIRED                                                     Handle        = 0x8086000C\n\tONL_CONNECTION_COUNT_LIMIT                                                Handle        = 0x8086000D\n\tONL_E_CONNECTED_ACCOUNT_CAN_NOT_SIGNOUT                                   Handle        = 0x8086000E\n\tONL_E_USER_AUTHENTICATION_REQUIRED                                        Handle        = 0x8086000F\n\tONL_E_REQUEST_THROTTLED                                                   Handle        = 0x80860010\n\tFA_E_MAX_PERSISTED_ITEMS_REACHED                                          Handle        = 0x80270220\n\tFA_E_HOMEGROUP_NOT_AVAILABLE                                              Handle        = 0x80270222\n\tE_MONITOR_RESOLUTION_TOO_LOW                                              Handle        = 0x80270250\n\tE_ELEVATED_ACTIVATION_NOT_SUPPORTED                                       Handle        = 0x80270251\n\tE_UAC_DISABLED                                                            Handle        = 0x80270252\n\tE_FULL_ADMIN_NOT_SUPPORTED                                                Handle        = 0x80270253\n\tE_APPLICATION_NOT_REGISTERED                                              Handle        = 0x80270254\n\tE_MULTIPLE_EXTENSIONS_FOR_APPLICATION                                     Handle        = 0x80270255\n\tE_MULTIPLE_PACKAGES_FOR_FAMILY                                            Handle        = 0x80270256\n\tE_APPLICATION_MANAGER_NOT_RUNNING                                         Handle        = 0x80270257\n\tS_STORE_LAUNCHED_FOR_REMEDIATION                                          Handle        = 0x00270258\n\tS_APPLICATION_ACTIVATION_ERROR_HANDLED_BY_DIALOG                          Handle        = 0x00270259\n\tE_APPLICATION_ACTIVATION_TIMED_OUT                                        Handle        = 0x8027025A\n\tE_APPLICATION_ACTIVATION_EXEC_FAILURE                                     Handle        = 0x8027025B\n\tE_APPLICATION_TEMPORARY_LICENSE_ERROR                                     Handle        = 0x8027025C\n\tE_APPLICATION_TRIAL_LICENSE_EXPIRED                                       Handle        = 0x8027025D\n\tE_SKYDRIVE_ROOT_TARGET_FILE_SYSTEM_NOT_SUPPORTED                          Handle        = 0x80270260\n\tE_SKYDRIVE_ROOT_TARGET_OVERLAP                                            Handle        = 0x80270261\n\tE_SKYDRIVE_ROOT_TARGET_CANNOT_INDEX                                       Handle        = 0x80270262\n\tE_SKYDRIVE_FILE_NOT_UPLOADED                                              Handle        = 0x80270263\n\tE_SKYDRIVE_UPDATE_AVAILABILITY_FAIL                                       Handle        = 0x80270264\n\tE_SKYDRIVE_ROOT_TARGET_VOLUME_ROOT_NOT_SUPPORTED                          Handle        = 0x80270265\n\tE_SYNCENGINE_FILE_SIZE_OVER_LIMIT                                         Handle        = 0x8802B001\n\tE_SYNCENGINE_FILE_SIZE_EXCEEDS_REMAINING_QUOTA                            Handle        = 0x8802B002\n\tE_SYNCENGINE_UNSUPPORTED_FILE_NAME                                        Handle        = 0x8802B003\n\tE_SYNCENGINE_FOLDER_ITEM_COUNT_LIMIT_EXCEEDED                             Handle        = 0x8802B004\n\tE_SYNCENGINE_FILE_SYNC_PARTNER_ERROR                                      Handle        = 0x8802B005\n\tE_SYNCENGINE_SYNC_PAUSED_BY_SERVICE                                       Handle        = 0x8802B006\n\tE_SYNCENGINE_FILE_IDENTIFIER_UNKNOWN                                      Handle        = 0x8802C002\n\tE_SYNCENGINE_SERVICE_AUTHENTICATION_FAILED                                Handle        = 0x8802C003\n\tE_SYNCENGINE_UNKNOWN_SERVICE_ERROR                                        Handle        = 0x8802C004\n\tE_SYNCENGINE_SERVICE_RETURNED_UNEXPECTED_SIZE                             Handle        = 0x8802C005\n\tE_SYNCENGINE_REQUEST_BLOCKED_BY_SERVICE                                   Handle        = 0x8802C006\n\tE_SYNCENGINE_REQUEST_BLOCKED_DUE_TO_CLIENT_ERROR                          Handle        = 0x8802C007\n\tE_SYNCENGINE_FOLDER_INACCESSIBLE                                          Handle        = 0x8802D001\n\tE_SYNCENGINE_UNSUPPORTED_FOLDER_NAME                                      Handle        = 0x8802D002\n\tE_SYNCENGINE_UNSUPPORTED_MARKET                                           Handle        = 0x8802D003\n\tE_SYNCENGINE_PATH_LENGTH_LIMIT_EXCEEDED                                   Handle        = 0x8802D004\n\tE_SYNCENGINE_REMOTE_PATH_LENGTH_LIMIT_EXCEEDED                            Handle        = 0x8802D005\n\tE_SYNCENGINE_CLIENT_UPDATE_NEEDED                                         Handle        = 0x8802D006\n\tE_SYNCENGINE_PROXY_AUTHENTICATION_REQUIRED                                Handle        = 0x8802D007\n\tE_SYNCENGINE_STORAGE_SERVICE_PROVISIONING_FAILED                          Handle        = 0x8802D008\n\tE_SYNCENGINE_UNSUPPORTED_REPARSE_POINT                                    Handle        = 0x8802D009\n\tE_SYNCENGINE_STORAGE_SERVICE_BLOCKED                                      Handle        = 0x8802D00A\n\tE_SYNCENGINE_FOLDER_IN_REDIRECTION                                        Handle        = 0x8802D00B\n\tEAS_E_POLICY_NOT_MANAGED_BY_OS                                            Handle        = 0x80550001\n\tEAS_E_POLICY_COMPLIANT_WITH_ACTIONS                                       Handle        = 0x80550002\n\tEAS_E_REQUESTED_POLICY_NOT_ENFORCEABLE                                    Handle        = 0x80550003\n\tEAS_E_CURRENT_USER_HAS_BLANK_PASSWORD                                     Handle        = 0x80550004\n\tEAS_E_REQUESTED_POLICY_PASSWORD_EXPIRATION_INCOMPATIBLE                   Handle        = 0x80550005\n\tEAS_E_USER_CANNOT_CHANGE_PASSWORD                                         Handle        = 0x80550006\n\tEAS_E_ADMINS_HAVE_BLANK_PASSWORD                                          Handle        = 0x80550007\n\tEAS_E_ADMINS_CANNOT_CHANGE_PASSWORD                                       Handle        = 0x80550008\n\tEAS_E_LOCAL_CONTROLLED_USERS_CANNOT_CHANGE_PASSWORD                       Handle        = 0x80550009\n\tEAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CONNECTED_ADMINS                Handle        = 0x8055000A\n\tEAS_E_CONNECTED_ADMINS_NEED_TO_CHANGE_PASSWORD                            Handle        = 0x8055000B\n\tEAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CURRENT_CONNECTED_USER          Handle        = 0x8055000C\n\tEAS_E_CURRENT_CONNECTED_USER_NEED_TO_CHANGE_PASSWORD                      Handle        = 0x8055000D\n\tWEB_E_UNSUPPORTED_FORMAT                                                  Handle        = 0x83750001\n\tWEB_E_INVALID_XML                                                         Handle        = 0x83750002\n\tWEB_E_MISSING_REQUIRED_ELEMENT                                            Handle        = 0x83750003\n\tWEB_E_MISSING_REQUIRED_ATTRIBUTE                                          Handle        = 0x83750004\n\tWEB_E_UNEXPECTED_CONTENT                                                  Handle        = 0x83750005\n\tWEB_E_RESOURCE_TOO_LARGE                                                  Handle        = 0x83750006\n\tWEB_E_INVALID_JSON_STRING                                                 Handle        = 0x83750007\n\tWEB_E_INVALID_JSON_NUMBER                                                 Handle        = 0x83750008\n\tWEB_E_JSON_VALUE_NOT_FOUND                                                Handle        = 0x83750009\n\tHTTP_E_STATUS_UNEXPECTED                                                  Handle        = 0x80190001\n\tHTTP_E_STATUS_UNEXPECTED_REDIRECTION                                      Handle        = 0x80190003\n\tHTTP_E_STATUS_UNEXPECTED_CLIENT_ERROR                                     Handle        = 0x80190004\n\tHTTP_E_STATUS_UNEXPECTED_SERVER_ERROR                                     Handle        = 0x80190005\n\tHTTP_E_STATUS_AMBIGUOUS                                                   Handle        = 0x8019012C\n\tHTTP_E_STATUS_MOVED                                                       Handle        = 0x8019012D\n\tHTTP_E_STATUS_REDIRECT                                                    Handle        = 0x8019012E\n\tHTTP_E_STATUS_REDIRECT_METHOD                                             Handle        = 0x8019012F\n\tHTTP_E_STATUS_NOT_MODIFIED                                                Handle        = 0x80190130\n\tHTTP_E_STATUS_USE_PROXY                                                   Handle        = 0x80190131\n\tHTTP_E_STATUS_REDIRECT_KEEP_VERB                                          Handle        = 0x80190133\n\tHTTP_E_STATUS_BAD_REQUEST                                                 Handle        = 0x80190190\n\tHTTP_E_STATUS_DENIED                                                      Handle        = 0x80190191\n\tHTTP_E_STATUS_PAYMENT_REQ                                                 Handle        = 0x80190192\n\tHTTP_E_STATUS_FORBIDDEN                                                   Handle        = 0x80190193\n\tHTTP_E_STATUS_NOT_FOUND                                                   Handle        = 0x80190194\n\tHTTP_E_STATUS_BAD_METHOD                                                  Handle        = 0x80190195\n\tHTTP_E_STATUS_NONE_ACCEPTABLE                                             Handle        = 0x80190196\n\tHTTP_E_STATUS_PROXY_AUTH_REQ                                              Handle        = 0x80190197\n\tHTTP_E_STATUS_REQUEST_TIMEOUT                                             Handle        = 0x80190198\n\tHTTP_E_STATUS_CONFLICT                                                    Handle        = 0x80190199\n\tHTTP_E_STATUS_GONE                                                        Handle        = 0x8019019A\n\tHTTP_E_STATUS_LENGTH_REQUIRED                                             Handle        = 0x8019019B\n\tHTTP_E_STATUS_PRECOND_FAILED                                              Handle        = 0x8019019C\n\tHTTP_E_STATUS_REQUEST_TOO_LARGE                                           Handle        = 0x8019019D\n\tHTTP_E_STATUS_URI_TOO_LONG                                                Handle        = 0x8019019E\n\tHTTP_E_STATUS_UNSUPPORTED_MEDIA                                           Handle        = 0x8019019F\n\tHTTP_E_STATUS_RANGE_NOT_SATISFIABLE                                       Handle        = 0x801901A0\n\tHTTP_E_STATUS_EXPECTATION_FAILED                                          Handle        = 0x801901A1\n\tHTTP_E_STATUS_SERVER_ERROR                                                Handle        = 0x801901F4\n\tHTTP_E_STATUS_NOT_SUPPORTED                                               Handle        = 0x801901F5\n\tHTTP_E_STATUS_BAD_GATEWAY                                                 Handle        = 0x801901F6\n\tHTTP_E_STATUS_SERVICE_UNAVAIL                                             Handle        = 0x801901F7\n\tHTTP_E_STATUS_GATEWAY_TIMEOUT                                             Handle        = 0x801901F8\n\tHTTP_E_STATUS_VERSION_NOT_SUP                                             Handle        = 0x801901F9\n\tE_INVALID_PROTOCOL_OPERATION                                              Handle        = 0x83760001\n\tE_INVALID_PROTOCOL_FORMAT                                                 Handle        = 0x83760002\n\tE_PROTOCOL_EXTENSIONS_NOT_SUPPORTED                                       Handle        = 0x83760003\n\tE_SUBPROTOCOL_NOT_SUPPORTED                                               Handle        = 0x83760004\n\tE_PROTOCOL_VERSION_NOT_SUPPORTED                                          Handle        = 0x83760005\n\tINPUT_E_OUT_OF_ORDER                                                      Handle        = 0x80400000\n\tINPUT_E_REENTRANCY                                                        Handle        = 0x80400001\n\tINPUT_E_MULTIMODAL                                                        Handle        = 0x80400002\n\tINPUT_E_PACKET                                                            Handle        = 0x80400003\n\tINPUT_E_FRAME                                                             Handle        = 0x80400004\n\tINPUT_E_HISTORY                                                           Handle        = 0x80400005\n\tINPUT_E_DEVICE_INFO                                                       Handle        = 0x80400006\n\tINPUT_E_TRANSFORM                                                         Handle        = 0x80400007\n\tINPUT_E_DEVICE_PROPERTY                                                   Handle        = 0x80400008\n\tINET_E_INVALID_URL                                                        Handle        = 0x800C0002\n\tINET_E_NO_SESSION                                                         Handle        = 0x800C0003\n\tINET_E_CANNOT_CONNECT                                                     Handle        = 0x800C0004\n\tINET_E_RESOURCE_NOT_FOUND                                                 Handle        = 0x800C0005\n\tINET_E_OBJECT_NOT_FOUND                                                   Handle        = 0x800C0006\n\tINET_E_DATA_NOT_AVAILABLE                                                 Handle        = 0x800C0007\n\tINET_E_DOWNLOAD_FAILURE                                                   Handle        = 0x800C0008\n\tINET_E_AUTHENTICATION_REQUIRED                                            Handle        = 0x800C0009\n\tINET_E_NO_VALID_MEDIA                                                     Handle        = 0x800C000A\n\tINET_E_CONNECTION_TIMEOUT                                                 Handle        = 0x800C000B\n\tINET_E_INVALID_REQUEST                                                    Handle        = 0x800C000C\n\tINET_E_UNKNOWN_PROTOCOL                                                   Handle        = 0x800C000D\n\tINET_E_SECURITY_PROBLEM                                                   Handle        = 0x800C000E\n\tINET_E_CANNOT_LOAD_DATA                                                   Handle        = 0x800C000F\n\tINET_E_CANNOT_INSTANTIATE_OBJECT                                          Handle        = 0x800C0010\n\tINET_E_INVALID_CERTIFICATE                                                Handle        = 0x800C0019\n\tINET_E_REDIRECT_FAILED                                                    Handle        = 0x800C0014\n\tINET_E_REDIRECT_TO_DIR                                                    Handle        = 0x800C0015\n\tERROR_DBG_CREATE_PROCESS_FAILURE_LOCKDOWN                                 Handle        = 0x80B00001\n\tERROR_DBG_ATTACH_PROCESS_FAILURE_LOCKDOWN                                 Handle        = 0x80B00002\n\tERROR_DBG_CONNECT_SERVER_FAILURE_LOCKDOWN                                 Handle        = 0x80B00003\n\tERROR_DBG_START_SERVER_FAILURE_LOCKDOWN                                   Handle        = 0x80B00004\n\tERROR_IO_PREEMPTED                                                        Handle        = 0x89010001\n\tJSCRIPT_E_CANTEXECUTE                                                     Handle        = 0x89020001\n\tWEP_E_NOT_PROVISIONED_ON_ALL_VOLUMES                                      Handle        = 0x88010001\n\tWEP_E_FIXED_DATA_NOT_SUPPORTED                                            Handle        = 0x88010002\n\tWEP_E_HARDWARE_NOT_COMPLIANT                                              Handle        = 0x88010003\n\tWEP_E_LOCK_NOT_CONFIGURED                                                 Handle        = 0x88010004\n\tWEP_E_PROTECTION_SUSPENDED                                                Handle        = 0x88010005\n\tWEP_E_NO_LICENSE                                                          Handle        = 0x88010006\n\tWEP_E_OS_NOT_PROTECTED                                                    Handle        = 0x88010007\n\tWEP_E_UNEXPECTED_FAIL                                                     Handle        = 0x88010008\n\tWEP_E_BUFFER_TOO_LARGE                                                    Handle        = 0x88010009\n\tERROR_SVHDX_ERROR_STORED                                                  Handle        = 0xC05C0000\n\tERROR_SVHDX_ERROR_NOT_AVAILABLE                                           Handle        = 0xC05CFF00\n\tERROR_SVHDX_UNIT_ATTENTION_AVAILABLE                                      Handle        = 0xC05CFF01\n\tERROR_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED                          Handle        = 0xC05CFF02\n\tERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED                         Handle        = 0xC05CFF03\n\tERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED                          Handle        = 0xC05CFF04\n\tERROR_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED                        Handle        = 0xC05CFF05\n\tERROR_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED                   Handle        = 0xC05CFF06\n\tERROR_SVHDX_RESERVATION_CONFLICT                                          Handle        = 0xC05CFF07\n\tERROR_SVHDX_WRONG_FILE_TYPE                                               Handle        = 0xC05CFF08\n\tERROR_SVHDX_VERSION_MISMATCH                                              Handle        = 0xC05CFF09\n\tERROR_VHD_SHARED                                                          Handle        = 0xC05CFF0A\n\tERROR_SVHDX_NO_INITIATOR                                                  Handle        = 0xC05CFF0B\n\tERROR_VHDSET_BACKING_STORAGE_NOT_FOUND                                    Handle        = 0xC05CFF0C\n\tERROR_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP                               Handle        = 0xC05D0000\n\tERROR_SMB_BAD_CLUSTER_DIALECT                                             Handle        = 0xC05D0001\n\tWININET_E_OUT_OF_HANDLES                                                  Handle        = 0x80072EE1\n\tWININET_E_TIMEOUT                                                         Handle        = 0x80072EE2\n\tWININET_E_EXTENDED_ERROR                                                  Handle        = 0x80072EE3\n\tWININET_E_INTERNAL_ERROR                                                  Handle        = 0x80072EE4\n\tWININET_E_INVALID_URL                                                     Handle        = 0x80072EE5\n\tWININET_E_UNRECOGNIZED_SCHEME                                             Handle        = 0x80072EE6\n\tWININET_E_NAME_NOT_RESOLVED                                               Handle        = 0x80072EE7\n\tWININET_E_PROTOCOL_NOT_FOUND                                              Handle        = 0x80072EE8\n\tWININET_E_INVALID_OPTION                                                  Handle        = 0x80072EE9\n\tWININET_E_BAD_OPTION_LENGTH                                               Handle        = 0x80072EEA\n\tWININET_E_OPTION_NOT_SETTABLE                                             Handle        = 0x80072EEB\n\tWININET_E_SHUTDOWN                                                        Handle        = 0x80072EEC\n\tWININET_E_INCORRECT_USER_NAME                                             Handle        = 0x80072EED\n\tWININET_E_INCORRECT_PASSWORD                                              Handle        = 0x80072EEE\n\tWININET_E_LOGIN_FAILURE                                                   Handle        = 0x80072EEF\n\tWININET_E_INVALID_OPERATION                                               Handle        = 0x80072EF0\n\tWININET_E_OPERATION_CANCELLED                                             Handle        = 0x80072EF1\n\tWININET_E_INCORRECT_HANDLE_TYPE                                           Handle        = 0x80072EF2\n\tWININET_E_INCORRECT_HANDLE_STATE                                          Handle        = 0x80072EF3\n\tWININET_E_NOT_PROXY_REQUEST                                               Handle        = 0x80072EF4\n\tWININET_E_REGISTRY_VALUE_NOT_FOUND                                        Handle        = 0x80072EF5\n\tWININET_E_BAD_REGISTRY_PARAMETER                                          Handle        = 0x80072EF6\n\tWININET_E_NO_DIRECT_ACCESS                                                Handle        = 0x80072EF7\n\tWININET_E_NO_CONTEXT                                                      Handle        = 0x80072EF8\n\tWININET_E_NO_CALLBACK                                                     Handle        = 0x80072EF9\n\tWININET_E_REQUEST_PENDING                                                 Handle        = 0x80072EFA\n\tWININET_E_INCORRECT_FORMAT                                                Handle        = 0x80072EFB\n\tWININET_E_ITEM_NOT_FOUND                                                  Handle        = 0x80072EFC\n\tWININET_E_CANNOT_CONNECT                                                  Handle        = 0x80072EFD\n\tWININET_E_CONNECTION_ABORTED                                              Handle        = 0x80072EFE\n\tWININET_E_CONNECTION_RESET                                                Handle        = 0x80072EFF\n\tWININET_E_FORCE_RETRY                                                     Handle        = 0x80072F00\n\tWININET_E_INVALID_PROXY_REQUEST                                           Handle        = 0x80072F01\n\tWININET_E_NEED_UI                                                         Handle        = 0x80072F02\n\tWININET_E_HANDLE_EXISTS                                                   Handle        = 0x80072F04\n\tWININET_E_SEC_CERT_DATE_INVALID                                           Handle        = 0x80072F05\n\tWININET_E_SEC_CERT_CN_INVALID                                             Handle        = 0x80072F06\n\tWININET_E_HTTP_TO_HTTPS_ON_REDIR                                          Handle        = 0x80072F07\n\tWININET_E_HTTPS_TO_HTTP_ON_REDIR                                          Handle        = 0x80072F08\n\tWININET_E_MIXED_SECURITY                                                  Handle        = 0x80072F09\n\tWININET_E_CHG_POST_IS_NON_SECURE                                          Handle        = 0x80072F0A\n\tWININET_E_POST_IS_NON_SECURE                                              Handle        = 0x80072F0B\n\tWININET_E_CLIENT_AUTH_CERT_NEEDED                                         Handle        = 0x80072F0C\n\tWININET_E_INVALID_CA                                                      Handle        = 0x80072F0D\n\tWININET_E_CLIENT_AUTH_NOT_SETUP                                           Handle        = 0x80072F0E\n\tWININET_E_ASYNC_THREAD_FAILED                                             Handle        = 0x80072F0F\n\tWININET_E_REDIRECT_SCHEME_CHANGE                                          Handle        = 0x80072F10\n\tWININET_E_DIALOG_PENDING                                                  Handle        = 0x80072F11\n\tWININET_E_RETRY_DIALOG                                                    Handle        = 0x80072F12\n\tWININET_E_NO_NEW_CONTAINERS                                               Handle        = 0x80072F13\n\tWININET_E_HTTPS_HTTP_SUBMIT_REDIR                                         Handle        = 0x80072F14\n\tWININET_E_SEC_CERT_ERRORS                                                 Handle        = 0x80072F17\n\tWININET_E_SEC_CERT_REV_FAILED                                             Handle        = 0x80072F19\n\tWININET_E_HEADER_NOT_FOUND                                                Handle        = 0x80072F76\n\tWININET_E_DOWNLEVEL_SERVER                                                Handle        = 0x80072F77\n\tWININET_E_INVALID_SERVER_RESPONSE                                         Handle        = 0x80072F78\n\tWININET_E_INVALID_HEADER                                                  Handle        = 0x80072F79\n\tWININET_E_INVALID_QUERY_REQUEST                                           Handle        = 0x80072F7A\n\tWININET_E_HEADER_ALREADY_EXISTS                                           Handle        = 0x80072F7B\n\tWININET_E_REDIRECT_FAILED                                                 Handle        = 0x80072F7C\n\tWININET_E_SECURITY_CHANNEL_ERROR                                          Handle        = 0x80072F7D\n\tWININET_E_UNABLE_TO_CACHE_FILE                                            Handle        = 0x80072F7E\n\tWININET_E_TCPIP_NOT_INSTALLED                                             Handle        = 0x80072F7F\n\tWININET_E_DISCONNECTED                                                    Handle        = 0x80072F83\n\tWININET_E_SERVER_UNREACHABLE                                              Handle        = 0x80072F84\n\tWININET_E_PROXY_SERVER_UNREACHABLE                                        Handle        = 0x80072F85\n\tWININET_E_BAD_AUTO_PROXY_SCRIPT                                           Handle        = 0x80072F86\n\tWININET_E_UNABLE_TO_DOWNLOAD_SCRIPT                                       Handle        = 0x80072F87\n\tWININET_E_SEC_INVALID_CERT                                                Handle        = 0x80072F89\n\tWININET_E_SEC_CERT_REVOKED                                                Handle        = 0x80072F8A\n\tWININET_E_FAILED_DUETOSECURITYCHECK                                       Handle        = 0x80072F8B\n\tWININET_E_NOT_INITIALIZED                                                 Handle        = 0x80072F8C\n\tWININET_E_LOGIN_FAILURE_DISPLAY_ENTITY_BODY                               Handle        = 0x80072F8E\n\tWININET_E_DECODING_FAILED                                                 Handle        = 0x80072F8F\n\tWININET_E_NOT_REDIRECTED                                                  Handle        = 0x80072F80\n\tWININET_E_COOKIE_NEEDS_CONFIRMATION                                       Handle        = 0x80072F81\n\tWININET_E_COOKIE_DECLINED                                                 Handle        = 0x80072F82\n\tWININET_E_REDIRECT_NEEDS_CONFIRMATION                                     Handle        = 0x80072F88\n\tSQLITE_E_ERROR                                                            Handle        = 0x87AF0001\n\tSQLITE_E_INTERNAL                                                         Handle        = 0x87AF0002\n\tSQLITE_E_PERM                                                             Handle        = 0x87AF0003\n\tSQLITE_E_ABORT                                                            Handle        = 0x87AF0004\n\tSQLITE_E_BUSY                                                             Handle        = 0x87AF0005\n\tSQLITE_E_LOCKED                                                           Handle        = 0x87AF0006\n\tSQLITE_E_NOMEM                                                            Handle        = 0x87AF0007\n\tSQLITE_E_READONLY                                                         Handle        = 0x87AF0008\n\tSQLITE_E_INTERRUPT                                                        Handle        = 0x87AF0009\n\tSQLITE_E_IOERR                                                            Handle        = 0x87AF000A\n\tSQLITE_E_CORRUPT                                                          Handle        = 0x87AF000B\n\tSQLITE_E_NOTFOUND                                                         Handle        = 0x87AF000C\n\tSQLITE_E_FULL                                                             Handle        = 0x87AF000D\n\tSQLITE_E_CANTOPEN                                                         Handle        = 0x87AF000E\n\tSQLITE_E_PROTOCOL                                                         Handle        = 0x87AF000F\n\tSQLITE_E_EMPTY                                                            Handle        = 0x87AF0010\n\tSQLITE_E_SCHEMA                                                           Handle        = 0x87AF0011\n\tSQLITE_E_TOOBIG                                                           Handle        = 0x87AF0012\n\tSQLITE_E_CONSTRAINT                                                       Handle        = 0x87AF0013\n\tSQLITE_E_MISMATCH                                                         Handle        = 0x87AF0014\n\tSQLITE_E_MISUSE                                                           Handle        = 0x87AF0015\n\tSQLITE_E_NOLFS                                                            Handle        = 0x87AF0016\n\tSQLITE_E_AUTH                                                             Handle        = 0x87AF0017\n\tSQLITE_E_FORMAT                                                           Handle        = 0x87AF0018\n\tSQLITE_E_RANGE                                                            Handle        = 0x87AF0019\n\tSQLITE_E_NOTADB                                                           Handle        = 0x87AF001A\n\tSQLITE_E_NOTICE                                                           Handle        = 0x87AF001B\n\tSQLITE_E_WARNING                                                          Handle        = 0x87AF001C\n\tSQLITE_E_ROW                                                              Handle        = 0x87AF0064\n\tSQLITE_E_DONE                                                             Handle        = 0x87AF0065\n\tSQLITE_E_IOERR_READ                                                       Handle        = 0x87AF010A\n\tSQLITE_E_IOERR_SHORT_READ                                                 Handle        = 0x87AF020A\n\tSQLITE_E_IOERR_WRITE                                                      Handle        = 0x87AF030A\n\tSQLITE_E_IOERR_FSYNC                                                      Handle        = 0x87AF040A\n\tSQLITE_E_IOERR_DIR_FSYNC                                                  Handle        = 0x87AF050A\n\tSQLITE_E_IOERR_TRUNCATE                                                   Handle        = 0x87AF060A\n\tSQLITE_E_IOERR_FSTAT                                                      Handle        = 0x87AF070A\n\tSQLITE_E_IOERR_UNLOCK                                                     Handle        = 0x87AF080A\n\tSQLITE_E_IOERR_RDLOCK                                                     Handle        = 0x87AF090A\n\tSQLITE_E_IOERR_DELETE                                                     Handle        = 0x87AF0A0A\n\tSQLITE_E_IOERR_BLOCKED                                                    Handle        = 0x87AF0B0A\n\tSQLITE_E_IOERR_NOMEM                                                      Handle        = 0x87AF0C0A\n\tSQLITE_E_IOERR_ACCESS                                                     Handle        = 0x87AF0D0A\n\tSQLITE_E_IOERR_CHECKRESERVEDLOCK                                          Handle        = 0x87AF0E0A\n\tSQLITE_E_IOERR_LOCK                                                       Handle        = 0x87AF0F0A\n\tSQLITE_E_IOERR_CLOSE                                                      Handle        = 0x87AF100A\n\tSQLITE_E_IOERR_DIR_CLOSE                                                  Handle        = 0x87AF110A\n\tSQLITE_E_IOERR_SHMOPEN                                                    Handle        = 0x87AF120A\n\tSQLITE_E_IOERR_SHMSIZE                                                    Handle        = 0x87AF130A\n\tSQLITE_E_IOERR_SHMLOCK                                                    Handle        = 0x87AF140A\n\tSQLITE_E_IOERR_SHMMAP                                                     Handle        = 0x87AF150A\n\tSQLITE_E_IOERR_SEEK                                                       Handle        = 0x87AF160A\n\tSQLITE_E_IOERR_DELETE_NOENT                                               Handle        = 0x87AF170A\n\tSQLITE_E_IOERR_MMAP                                                       Handle        = 0x87AF180A\n\tSQLITE_E_IOERR_GETTEMPPATH                                                Handle        = 0x87AF190A\n\tSQLITE_E_IOERR_CONVPATH                                                   Handle        = 0x87AF1A0A\n\tSQLITE_E_IOERR_VNODE                                                      Handle        = 0x87AF1A02\n\tSQLITE_E_IOERR_AUTH                                                       Handle        = 0x87AF1A03\n\tSQLITE_E_LOCKED_SHAREDCACHE                                               Handle        = 0x87AF0106\n\tSQLITE_E_BUSY_RECOVERY                                                    Handle        = 0x87AF0105\n\tSQLITE_E_BUSY_SNAPSHOT                                                    Handle        = 0x87AF0205\n\tSQLITE_E_CANTOPEN_NOTEMPDIR                                               Handle        = 0x87AF010E\n\tSQLITE_E_CANTOPEN_ISDIR                                                   Handle        = 0x87AF020E\n\tSQLITE_E_CANTOPEN_FULLPATH                                                Handle        = 0x87AF030E\n\tSQLITE_E_CANTOPEN_CONVPATH                                                Handle        = 0x87AF040E\n\tSQLITE_E_CORRUPT_VTAB                                                     Handle        = 0x87AF010B\n\tSQLITE_E_READONLY_RECOVERY                                                Handle        = 0x87AF0108\n\tSQLITE_E_READONLY_CANTLOCK                                                Handle        = 0x87AF0208\n\tSQLITE_E_READONLY_ROLLBACK                                                Handle        = 0x87AF0308\n\tSQLITE_E_READONLY_DBMOVED                                                 Handle        = 0x87AF0408\n\tSQLITE_E_ABORT_ROLLBACK                                                   Handle        = 0x87AF0204\n\tSQLITE_E_CONSTRAINT_CHECK                                                 Handle        = 0x87AF0113\n\tSQLITE_E_CONSTRAINT_COMMITHOOK                                            Handle        = 0x87AF0213\n\tSQLITE_E_CONSTRAINT_FOREIGNKEY                                            Handle        = 0x87AF0313\n\tSQLITE_E_CONSTRAINT_FUNCTION                                              Handle        = 0x87AF0413\n\tSQLITE_E_CONSTRAINT_NOTNULL                                               Handle        = 0x87AF0513\n\tSQLITE_E_CONSTRAINT_PRIMARYKEY                                            Handle        = 0x87AF0613\n\tSQLITE_E_CONSTRAINT_TRIGGER                                               Handle        = 0x87AF0713\n\tSQLITE_E_CONSTRAINT_UNIQUE                                                Handle        = 0x87AF0813\n\tSQLITE_E_CONSTRAINT_VTAB                                                  Handle        = 0x87AF0913\n\tSQLITE_E_CONSTRAINT_ROWID                                                 Handle        = 0x87AF0A13\n\tSQLITE_E_NOTICE_RECOVER_WAL                                               Handle        = 0x87AF011B\n\tSQLITE_E_NOTICE_RECOVER_ROLLBACK                                          Handle        = 0x87AF021B\n\tSQLITE_E_WARNING_AUTOINDEX                                                Handle        = 0x87AF011C\n\tUTC_E_TOGGLE_TRACE_STARTED                                                Handle        = 0x87C51001\n\tUTC_E_ALTERNATIVE_TRACE_CANNOT_PREEMPT                                    Handle        = 0x87C51002\n\tUTC_E_AOT_NOT_RUNNING                                                     Handle        = 0x87C51003\n\tUTC_E_SCRIPT_TYPE_INVALID                                                 Handle        = 0x87C51004\n\tUTC_E_SCENARIODEF_NOT_FOUND                                               Handle        = 0x87C51005\n\tUTC_E_TRACEPROFILE_NOT_FOUND                                              Handle        = 0x87C51006\n\tUTC_E_FORWARDER_ALREADY_ENABLED                                           Handle        = 0x87C51007\n\tUTC_E_FORWARDER_ALREADY_DISABLED                                          Handle        = 0x87C51008\n\tUTC_E_EVENTLOG_ENTRY_MALFORMED                                            Handle        = 0x87C51009\n\tUTC_E_DIAGRULES_SCHEMAVERSION_MISMATCH                                    Handle        = 0x87C5100A\n\tUTC_E_SCRIPT_TERMINATED                                                   Handle        = 0x87C5100B\n\tUTC_E_INVALID_CUSTOM_FILTER                                               Handle        = 0x87C5100C\n\tUTC_E_TRACE_NOT_RUNNING                                                   Handle        = 0x87C5100D\n\tUTC_E_REESCALATED_TOO_QUICKLY                                             Handle        = 0x87C5100E\n\tUTC_E_ESCALATION_ALREADY_RUNNING                                          Handle        = 0x87C5100F\n\tUTC_E_PERFTRACK_ALREADY_TRACING                                           Handle        = 0x87C51010\n\tUTC_E_REACHED_MAX_ESCALATIONS                                             Handle        = 0x87C51011\n\tUTC_E_FORWARDER_PRODUCER_MISMATCH                                         Handle        = 0x87C51012\n\tUTC_E_INTENTIONAL_SCRIPT_FAILURE                                          Handle        = 0x87C51013\n\tUTC_E_SQM_INIT_FAILED                                                     Handle        = 0x87C51014\n\tUTC_E_NO_WER_LOGGER_SUPPORTED                                             Handle        = 0x87C51015\n\tUTC_E_TRACERS_DONT_EXIST                                                  Handle        = 0x87C51016\n\tUTC_E_WINRT_INIT_FAILED                                                   Handle        = 0x87C51017\n\tUTC_E_SCENARIODEF_SCHEMAVERSION_MISMATCH                                  Handle        = 0x87C51018\n\tUTC_E_INVALID_FILTER                                                      Handle        = 0x87C51019\n\tUTC_E_EXE_TERMINATED                                                      Handle        = 0x87C5101A\n\tUTC_E_ESCALATION_NOT_AUTHORIZED                                           Handle        = 0x87C5101B\n\tUTC_E_SETUP_NOT_AUTHORIZED                                                Handle        = 0x87C5101C\n\tUTC_E_CHILD_PROCESS_FAILED                                                Handle        = 0x87C5101D\n\tUTC_E_COMMAND_LINE_NOT_AUTHORIZED                                         Handle        = 0x87C5101E\n\tUTC_E_CANNOT_LOAD_SCENARIO_EDITOR_XML                                     Handle        = 0x87C5101F\n\tUTC_E_ESCALATION_TIMED_OUT                                                Handle        = 0x87C51020\n\tUTC_E_SETUP_TIMED_OUT                                                     Handle        = 0x87C51021\n\tUTC_E_TRIGGER_MISMATCH                                                    Handle        = 0x87C51022\n\tUTC_E_TRIGGER_NOT_FOUND                                                   Handle        = 0x87C51023\n\tUTC_E_SIF_NOT_SUPPORTED                                                   Handle        = 0x87C51024\n\tUTC_E_DELAY_TERMINATED                                                    Handle        = 0x87C51025\n\tUTC_E_DEVICE_TICKET_ERROR                                                 Handle        = 0x87C51026\n\tUTC_E_TRACE_BUFFER_LIMIT_EXCEEDED                                         Handle        = 0x87C51027\n\tUTC_E_API_RESULT_UNAVAILABLE                                              Handle        = 0x87C51028\n\tUTC_E_RPC_TIMEOUT                                                         Handle        = 0x87C51029\n\tUTC_E_RPC_WAIT_FAILED                                                     Handle        = 0x87C5102A\n\tUTC_E_API_BUSY                                                            Handle        = 0x87C5102B\n\tUTC_E_TRACE_MIN_DURATION_REQUIREMENT_NOT_MET                              Handle        = 0x87C5102C\n\tUTC_E_EXCLUSIVITY_NOT_AVAILABLE                                           Handle        = 0x87C5102D\n\tUTC_E_GETFILE_FILE_PATH_NOT_APPROVED                                      Handle        = 0x87C5102E\n\tUTC_E_ESCALATION_DIRECTORY_ALREADY_EXISTS                                 Handle        = 0x87C5102F\n\tUTC_E_TIME_TRIGGER_ON_START_INVALID                                       Handle        = 0x87C51030\n\tUTC_E_TIME_TRIGGER_ONLY_VALID_ON_SINGLE_TRANSITION                        Handle        = 0x87C51031\n\tUTC_E_TIME_TRIGGER_INVALID_TIME_RANGE                                     Handle        = 0x87C51032\n\tUTC_E_MULTIPLE_TIME_TRIGGER_ON_SINGLE_STATE                               Handle        = 0x87C51033\n\tUTC_E_BINARY_MISSING                                                      Handle        = 0x87C51034\n\tUTC_E_NETWORK_CAPTURE_NOT_ALLOWED                                         Handle        = 0x87C51035\n\tUTC_E_FAILED_TO_RESOLVE_CONTAINER_ID                                      Handle        = 0x87C51036\n\tUTC_E_UNABLE_TO_RESOLVE_SESSION                                           Handle        = 0x87C51037\n\tUTC_E_THROTTLED                                                           Handle        = 0x87C51038\n\tUTC_E_UNAPPROVED_SCRIPT                                                   Handle        = 0x87C51039\n\tUTC_E_SCRIPT_MISSING                                                      Handle        = 0x87C5103A\n\tUTC_E_SCENARIO_THROTTLED                                                  Handle        = 0x87C5103B\n\tUTC_E_API_NOT_SUPPORTED                                                   Handle        = 0x87C5103C\n\tUTC_E_GETFILE_EXTERNAL_PATH_NOT_APPROVED                                  Handle        = 0x87C5103D\n\tUTC_E_TRY_GET_SCENARIO_TIMEOUT_EXCEEDED                                   Handle        = 0x87C5103E\n\tUTC_E_CERT_REV_FAILED                                                     Handle        = 0x87C5103F\n\tUTC_E_FAILED_TO_START_NDISCAP                                             Handle        = 0x87C51040\n\tUTC_E_KERNELDUMP_LIMIT_REACHED                                            Handle        = 0x87C51041\n\tUTC_E_MISSING_AGGREGATE_EVENT_TAG                                         Handle        = 0x87C51042\n\tUTC_E_INVALID_AGGREGATION_STRUCT                                          Handle        = 0x87C51043\n\tUTC_E_ACTION_NOT_SUPPORTED_IN_DESTINATION                                 Handle        = 0x87C51044\n\tUTC_E_FILTER_MISSING_ATTRIBUTE                                            Handle        = 0x87C51045\n\tUTC_E_FILTER_INVALID_TYPE                                                 Handle        = 0x87C51046\n\tUTC_E_FILTER_VARIABLE_NOT_FOUND                                           Handle        = 0x87C51047\n\tUTC_E_FILTER_FUNCTION_RESTRICTED                                          Handle        = 0x87C51048\n\tUTC_E_FILTER_VERSION_MISMATCH                                             Handle        = 0x87C51049\n\tUTC_E_FILTER_INVALID_FUNCTION                                             Handle        = 0x87C51050\n\tUTC_E_FILTER_INVALID_FUNCTION_PARAMS                                      Handle        = 0x87C51051\n\tUTC_E_FILTER_INVALID_COMMAND                                              Handle        = 0x87C51052\n\tUTC_E_FILTER_ILLEGAL_EVAL                                                 Handle        = 0x87C51053\n\tUTC_E_TTTRACER_RETURNED_ERROR                                             Handle        = 0x87C51054\n\tUTC_E_AGENT_DIAGNOSTICS_TOO_LARGE                                         Handle        = 0x87C51055\n\tUTC_E_FAILED_TO_RECEIVE_AGENT_DIAGNOSTICS                                 Handle        = 0x87C51056\n\tUTC_E_SCENARIO_HAS_NO_ACTIONS                                             Handle        = 0x87C51057\n\tUTC_E_TTTRACER_STORAGE_FULL                                               Handle        = 0x87C51058\n\tUTC_E_INSUFFICIENT_SPACE_TO_START_TRACE                                   Handle        = 0x87C51059\n\tUTC_E_ESCALATION_CANCELLED_AT_SHUTDOWN                                    Handle        = 0x87C5105A\n\tUTC_E_GETFILEINFOACTION_FILE_NOT_APPROVED                                 Handle        = 0x87C5105B\n\tUTC_E_SETREGKEYACTION_TYPE_NOT_APPROVED                                   Handle        = 0x87C5105C\n\tWINML_ERR_INVALID_DEVICE                                                  Handle        = 0x88900001\n\tWINML_ERR_INVALID_BINDING                                                 Handle        = 0x88900002\n\tWINML_ERR_VALUE_NOTFOUND                                                  Handle        = 0x88900003\n\tWINML_ERR_SIZE_MISMATCH                                                   Handle        = 0x88900004\n\tSTATUS_WAIT_0                                                             NTStatus      = 0x00000000\n\tSTATUS_SUCCESS                                                            NTStatus      = 0x00000000\n\tSTATUS_WAIT_1                                                             NTStatus      = 0x00000001\n\tSTATUS_WAIT_2                                                             NTStatus      = 0x00000002\n\tSTATUS_WAIT_3                                                             NTStatus      = 0x00000003\n\tSTATUS_WAIT_63                                                            NTStatus      = 0x0000003F\n\tSTATUS_ABANDONED                                                          NTStatus      = 0x00000080\n\tSTATUS_ABANDONED_WAIT_0                                                   NTStatus      = 0x00000080\n\tSTATUS_ABANDONED_WAIT_63                                                  NTStatus      = 0x000000BF\n\tSTATUS_USER_APC                                                           NTStatus      = 0x000000C0\n\tSTATUS_ALREADY_COMPLETE                                                   NTStatus      = 0x000000FF\n\tSTATUS_KERNEL_APC                                                         NTStatus      = 0x00000100\n\tSTATUS_ALERTED                                                            NTStatus      = 0x00000101\n\tSTATUS_TIMEOUT                                                            NTStatus      = 0x00000102\n\tSTATUS_PENDING                                                            NTStatus      = 0x00000103\n\tSTATUS_REPARSE                                                            NTStatus      = 0x00000104\n\tSTATUS_MORE_ENTRIES                                                       NTStatus      = 0x00000105\n\tSTATUS_NOT_ALL_ASSIGNED                                                   NTStatus      = 0x00000106\n\tSTATUS_SOME_NOT_MAPPED                                                    NTStatus      = 0x00000107\n\tSTATUS_OPLOCK_BREAK_IN_PROGRESS                                           NTStatus      = 0x00000108\n\tSTATUS_VOLUME_MOUNTED                                                     NTStatus      = 0x00000109\n\tSTATUS_RXACT_COMMITTED                                                    NTStatus      = 0x0000010A\n\tSTATUS_NOTIFY_CLEANUP                                                     NTStatus      = 0x0000010B\n\tSTATUS_NOTIFY_ENUM_DIR                                                    NTStatus      = 0x0000010C\n\tSTATUS_NO_QUOTAS_FOR_ACCOUNT                                              NTStatus      = 0x0000010D\n\tSTATUS_PRIMARY_TRANSPORT_CONNECT_FAILED                                   NTStatus      = 0x0000010E\n\tSTATUS_PAGE_FAULT_TRANSITION                                              NTStatus      = 0x00000110\n\tSTATUS_PAGE_FAULT_DEMAND_ZERO                                             NTStatus      = 0x00000111\n\tSTATUS_PAGE_FAULT_COPY_ON_WRITE                                           NTStatus      = 0x00000112\n\tSTATUS_PAGE_FAULT_GUARD_PAGE                                              NTStatus      = 0x00000113\n\tSTATUS_PAGE_FAULT_PAGING_FILE                                             NTStatus      = 0x00000114\n\tSTATUS_CACHE_PAGE_LOCKED                                                  NTStatus      = 0x00000115\n\tSTATUS_CRASH_DUMP                                                         NTStatus      = 0x00000116\n\tSTATUS_BUFFER_ALL_ZEROS                                                   NTStatus      = 0x00000117\n\tSTATUS_REPARSE_OBJECT                                                     NTStatus      = 0x00000118\n\tSTATUS_RESOURCE_REQUIREMENTS_CHANGED                                      NTStatus      = 0x00000119\n\tSTATUS_TRANSLATION_COMPLETE                                               NTStatus      = 0x00000120\n\tSTATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY                                    NTStatus      = 0x00000121\n\tSTATUS_NOTHING_TO_TERMINATE                                               NTStatus      = 0x00000122\n\tSTATUS_PROCESS_NOT_IN_JOB                                                 NTStatus      = 0x00000123\n\tSTATUS_PROCESS_IN_JOB                                                     NTStatus      = 0x00000124\n\tSTATUS_VOLSNAP_HIBERNATE_READY                                            NTStatus      = 0x00000125\n\tSTATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY                                 NTStatus      = 0x00000126\n\tSTATUS_INTERRUPT_VECTOR_ALREADY_CONNECTED                                 NTStatus      = 0x00000127\n\tSTATUS_INTERRUPT_STILL_CONNECTED                                          NTStatus      = 0x00000128\n\tSTATUS_PROCESS_CLONED                                                     NTStatus      = 0x00000129\n\tSTATUS_FILE_LOCKED_WITH_ONLY_READERS                                      NTStatus      = 0x0000012A\n\tSTATUS_FILE_LOCKED_WITH_WRITERS                                           NTStatus      = 0x0000012B\n\tSTATUS_VALID_IMAGE_HASH                                                   NTStatus      = 0x0000012C\n\tSTATUS_VALID_CATALOG_HASH                                                 NTStatus      = 0x0000012D\n\tSTATUS_VALID_STRONG_CODE_HASH                                             NTStatus      = 0x0000012E\n\tSTATUS_GHOSTED                                                            NTStatus      = 0x0000012F\n\tSTATUS_DATA_OVERWRITTEN                                                   NTStatus      = 0x00000130\n\tSTATUS_RESOURCEMANAGER_READ_ONLY                                          NTStatus      = 0x00000202\n\tSTATUS_RING_PREVIOUSLY_EMPTY                                              NTStatus      = 0x00000210\n\tSTATUS_RING_PREVIOUSLY_FULL                                               NTStatus      = 0x00000211\n\tSTATUS_RING_PREVIOUSLY_ABOVE_QUOTA                                        NTStatus      = 0x00000212\n\tSTATUS_RING_NEWLY_EMPTY                                                   NTStatus      = 0x00000213\n\tSTATUS_RING_SIGNAL_OPPOSITE_ENDPOINT                                      NTStatus      = 0x00000214\n\tSTATUS_OPLOCK_SWITCHED_TO_NEW_HANDLE                                      NTStatus      = 0x00000215\n\tSTATUS_OPLOCK_HANDLE_CLOSED                                               NTStatus      = 0x00000216\n\tSTATUS_WAIT_FOR_OPLOCK                                                    NTStatus      = 0x00000367\n\tSTATUS_REPARSE_GLOBAL                                                     NTStatus      = 0x00000368\n\tSTATUS_FLT_IO_COMPLETE                                                    NTStatus      = 0x001C0001\n\tSTATUS_OBJECT_NAME_EXISTS                                                 NTStatus      = 0x40000000\n\tSTATUS_THREAD_WAS_SUSPENDED                                               NTStatus      = 0x40000001\n\tSTATUS_WORKING_SET_LIMIT_RANGE                                            NTStatus      = 0x40000002\n\tSTATUS_IMAGE_NOT_AT_BASE                                                  NTStatus      = 0x40000003\n\tSTATUS_RXACT_STATE_CREATED                                                NTStatus      = 0x40000004\n\tSTATUS_SEGMENT_NOTIFICATION                                               NTStatus      = 0x40000005\n\tSTATUS_LOCAL_USER_SESSION_KEY                                             NTStatus      = 0x40000006\n\tSTATUS_BAD_CURRENT_DIRECTORY                                              NTStatus      = 0x40000007\n\tSTATUS_SERIAL_MORE_WRITES                                                 NTStatus      = 0x40000008\n\tSTATUS_REGISTRY_RECOVERED                                                 NTStatus      = 0x40000009\n\tSTATUS_FT_READ_RECOVERY_FROM_BACKUP                                       NTStatus      = 0x4000000A\n\tSTATUS_FT_WRITE_RECOVERY                                                  NTStatus      = 0x4000000B\n\tSTATUS_SERIAL_COUNTER_TIMEOUT                                             NTStatus      = 0x4000000C\n\tSTATUS_NULL_LM_PASSWORD                                                   NTStatus      = 0x4000000D\n\tSTATUS_IMAGE_MACHINE_TYPE_MISMATCH                                        NTStatus      = 0x4000000E\n\tSTATUS_RECEIVE_PARTIAL                                                    NTStatus      = 0x4000000F\n\tSTATUS_RECEIVE_EXPEDITED                                                  NTStatus      = 0x40000010\n\tSTATUS_RECEIVE_PARTIAL_EXPEDITED                                          NTStatus      = 0x40000011\n\tSTATUS_EVENT_DONE                                                         NTStatus      = 0x40000012\n\tSTATUS_EVENT_PENDING                                                      NTStatus      = 0x40000013\n\tSTATUS_CHECKING_FILE_SYSTEM                                               NTStatus      = 0x40000014\n\tSTATUS_FATAL_APP_EXIT                                                     NTStatus      = 0x40000015\n\tSTATUS_PREDEFINED_HANDLE                                                  NTStatus      = 0x40000016\n\tSTATUS_WAS_UNLOCKED                                                       NTStatus      = 0x40000017\n\tSTATUS_SERVICE_NOTIFICATION                                               NTStatus      = 0x40000018\n\tSTATUS_WAS_LOCKED                                                         NTStatus      = 0x40000019\n\tSTATUS_LOG_HARD_ERROR                                                     NTStatus      = 0x4000001A\n\tSTATUS_ALREADY_WIN32                                                      NTStatus      = 0x4000001B\n\tSTATUS_WX86_UNSIMULATE                                                    NTStatus      = 0x4000001C\n\tSTATUS_WX86_CONTINUE                                                      NTStatus      = 0x4000001D\n\tSTATUS_WX86_SINGLE_STEP                                                   NTStatus      = 0x4000001E\n\tSTATUS_WX86_BREAKPOINT                                                    NTStatus      = 0x4000001F\n\tSTATUS_WX86_EXCEPTION_CONTINUE                                            NTStatus      = 0x40000020\n\tSTATUS_WX86_EXCEPTION_LASTCHANCE                                          NTStatus      = 0x40000021\n\tSTATUS_WX86_EXCEPTION_CHAIN                                               NTStatus      = 0x40000022\n\tSTATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE                                    NTStatus      = 0x40000023\n\tSTATUS_NO_YIELD_PERFORMED                                                 NTStatus      = 0x40000024\n\tSTATUS_TIMER_RESUME_IGNORED                                               NTStatus      = 0x40000025\n\tSTATUS_ARBITRATION_UNHANDLED                                              NTStatus      = 0x40000026\n\tSTATUS_CARDBUS_NOT_SUPPORTED                                              NTStatus      = 0x40000027\n\tSTATUS_WX86_CREATEWX86TIB                                                 NTStatus      = 0x40000028\n\tSTATUS_MP_PROCESSOR_MISMATCH                                              NTStatus      = 0x40000029\n\tSTATUS_HIBERNATED                                                         NTStatus      = 0x4000002A\n\tSTATUS_RESUME_HIBERNATION                                                 NTStatus      = 0x4000002B\n\tSTATUS_FIRMWARE_UPDATED                                                   NTStatus      = 0x4000002C\n\tSTATUS_DRIVERS_LEAKING_LOCKED_PAGES                                       NTStatus      = 0x4000002D\n\tSTATUS_MESSAGE_RETRIEVED                                                  NTStatus      = 0x4000002E\n\tSTATUS_SYSTEM_POWERSTATE_TRANSITION                                       NTStatus      = 0x4000002F\n\tSTATUS_ALPC_CHECK_COMPLETION_LIST                                         NTStatus      = 0x40000030\n\tSTATUS_SYSTEM_POWERSTATE_COMPLEX_TRANSITION                               NTStatus      = 0x40000031\n\tSTATUS_ACCESS_AUDIT_BY_POLICY                                             NTStatus      = 0x40000032\n\tSTATUS_ABANDON_HIBERFILE                                                  NTStatus      = 0x40000033\n\tSTATUS_BIZRULES_NOT_ENABLED                                               NTStatus      = 0x40000034\n\tSTATUS_FT_READ_FROM_COPY                                                  NTStatus      = 0x40000035\n\tSTATUS_IMAGE_AT_DIFFERENT_BASE                                            NTStatus      = 0x40000036\n\tSTATUS_PATCH_DEFERRED                                                     NTStatus      = 0x40000037\n\tSTATUS_HEURISTIC_DAMAGE_POSSIBLE                                          NTStatus      = 0x40190001\n\tSTATUS_GUARD_PAGE_VIOLATION                                               NTStatus      = 0x80000001\n\tSTATUS_DATATYPE_MISALIGNMENT                                              NTStatus      = 0x80000002\n\tSTATUS_BREAKPOINT                                                         NTStatus      = 0x80000003\n\tSTATUS_SINGLE_STEP                                                        NTStatus      = 0x80000004\n\tSTATUS_BUFFER_OVERFLOW                                                    NTStatus      = 0x80000005\n\tSTATUS_NO_MORE_FILES                                                      NTStatus      = 0x80000006\n\tSTATUS_WAKE_SYSTEM_DEBUGGER                                               NTStatus      = 0x80000007\n\tSTATUS_HANDLES_CLOSED                                                     NTStatus      = 0x8000000A\n\tSTATUS_NO_INHERITANCE                                                     NTStatus      = 0x8000000B\n\tSTATUS_GUID_SUBSTITUTION_MADE                                             NTStatus      = 0x8000000C\n\tSTATUS_PARTIAL_COPY                                                       NTStatus      = 0x8000000D\n\tSTATUS_DEVICE_PAPER_EMPTY                                                 NTStatus      = 0x8000000E\n\tSTATUS_DEVICE_POWERED_OFF                                                 NTStatus      = 0x8000000F\n\tSTATUS_DEVICE_OFF_LINE                                                    NTStatus      = 0x80000010\n\tSTATUS_DEVICE_BUSY                                                        NTStatus      = 0x80000011\n\tSTATUS_NO_MORE_EAS                                                        NTStatus      = 0x80000012\n\tSTATUS_INVALID_EA_NAME                                                    NTStatus      = 0x80000013\n\tSTATUS_EA_LIST_INCONSISTENT                                               NTStatus      = 0x80000014\n\tSTATUS_INVALID_EA_FLAG                                                    NTStatus      = 0x80000015\n\tSTATUS_VERIFY_REQUIRED                                                    NTStatus      = 0x80000016\n\tSTATUS_EXTRANEOUS_INFORMATION                                             NTStatus      = 0x80000017\n\tSTATUS_RXACT_COMMIT_NECESSARY                                             NTStatus      = 0x80000018\n\tSTATUS_NO_MORE_ENTRIES                                                    NTStatus      = 0x8000001A\n\tSTATUS_FILEMARK_DETECTED                                                  NTStatus      = 0x8000001B\n\tSTATUS_MEDIA_CHANGED                                                      NTStatus      = 0x8000001C\n\tSTATUS_BUS_RESET                                                          NTStatus      = 0x8000001D\n\tSTATUS_END_OF_MEDIA                                                       NTStatus      = 0x8000001E\n\tSTATUS_BEGINNING_OF_MEDIA                                                 NTStatus      = 0x8000001F\n\tSTATUS_MEDIA_CHECK                                                        NTStatus      = 0x80000020\n\tSTATUS_SETMARK_DETECTED                                                   NTStatus      = 0x80000021\n\tSTATUS_NO_DATA_DETECTED                                                   NTStatus      = 0x80000022\n\tSTATUS_REDIRECTOR_HAS_OPEN_HANDLES                                        NTStatus      = 0x80000023\n\tSTATUS_SERVER_HAS_OPEN_HANDLES                                            NTStatus      = 0x80000024\n\tSTATUS_ALREADY_DISCONNECTED                                               NTStatus      = 0x80000025\n\tSTATUS_LONGJUMP                                                           NTStatus      = 0x80000026\n\tSTATUS_CLEANER_CARTRIDGE_INSTALLED                                        NTStatus      = 0x80000027\n\tSTATUS_PLUGPLAY_QUERY_VETOED                                              NTStatus      = 0x80000028\n\tSTATUS_UNWIND_CONSOLIDATE                                                 NTStatus      = 0x80000029\n\tSTATUS_REGISTRY_HIVE_RECOVERED                                            NTStatus      = 0x8000002A\n\tSTATUS_DLL_MIGHT_BE_INSECURE                                              NTStatus      = 0x8000002B\n\tSTATUS_DLL_MIGHT_BE_INCOMPATIBLE                                          NTStatus      = 0x8000002C\n\tSTATUS_STOPPED_ON_SYMLINK                                                 NTStatus      = 0x8000002D\n\tSTATUS_CANNOT_GRANT_REQUESTED_OPLOCK                                      NTStatus      = 0x8000002E\n\tSTATUS_NO_ACE_CONDITION                                                   NTStatus      = 0x8000002F\n\tSTATUS_DEVICE_SUPPORT_IN_PROGRESS                                         NTStatus      = 0x80000030\n\tSTATUS_DEVICE_POWER_CYCLE_REQUIRED                                        NTStatus      = 0x80000031\n\tSTATUS_NO_WORK_DONE                                                       NTStatus      = 0x80000032\n\tSTATUS_CLUSTER_NODE_ALREADY_UP                                            NTStatus      = 0x80130001\n\tSTATUS_CLUSTER_NODE_ALREADY_DOWN                                          NTStatus      = 0x80130002\n\tSTATUS_CLUSTER_NETWORK_ALREADY_ONLINE                                     NTStatus      = 0x80130003\n\tSTATUS_CLUSTER_NETWORK_ALREADY_OFFLINE                                    NTStatus      = 0x80130004\n\tSTATUS_CLUSTER_NODE_ALREADY_MEMBER                                        NTStatus      = 0x80130005\n\tSTATUS_FLT_BUFFER_TOO_SMALL                                               NTStatus      = 0x801C0001\n\tSTATUS_FVE_PARTIAL_METADATA                                               NTStatus      = 0x80210001\n\tSTATUS_FVE_TRANSIENT_STATE                                                NTStatus      = 0x80210002\n\tSTATUS_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH                         NTStatus      = 0x8000CF00\n\tSTATUS_UNSUCCESSFUL                                                       NTStatus      = 0xC0000001\n\tSTATUS_NOT_IMPLEMENTED                                                    NTStatus      = 0xC0000002\n\tSTATUS_INVALID_INFO_CLASS                                                 NTStatus      = 0xC0000003\n\tSTATUS_INFO_LENGTH_MISMATCH                                               NTStatus      = 0xC0000004\n\tSTATUS_ACCESS_VIOLATION                                                   NTStatus      = 0xC0000005\n\tSTATUS_IN_PAGE_ERROR                                                      NTStatus      = 0xC0000006\n\tSTATUS_PAGEFILE_QUOTA                                                     NTStatus      = 0xC0000007\n\tSTATUS_INVALID_HANDLE                                                     NTStatus      = 0xC0000008\n\tSTATUS_BAD_INITIAL_STACK                                                  NTStatus      = 0xC0000009\n\tSTATUS_BAD_INITIAL_PC                                                     NTStatus      = 0xC000000A\n\tSTATUS_INVALID_CID                                                        NTStatus      = 0xC000000B\n\tSTATUS_TIMER_NOT_CANCELED                                                 NTStatus      = 0xC000000C\n\tSTATUS_INVALID_PARAMETER                                                  NTStatus      = 0xC000000D\n\tSTATUS_NO_SUCH_DEVICE                                                     NTStatus      = 0xC000000E\n\tSTATUS_NO_SUCH_FILE                                                       NTStatus      = 0xC000000F\n\tSTATUS_INVALID_DEVICE_REQUEST                                             NTStatus      = 0xC0000010\n\tSTATUS_END_OF_FILE                                                        NTStatus      = 0xC0000011\n\tSTATUS_WRONG_VOLUME                                                       NTStatus      = 0xC0000012\n\tSTATUS_NO_MEDIA_IN_DEVICE                                                 NTStatus      = 0xC0000013\n\tSTATUS_UNRECOGNIZED_MEDIA                                                 NTStatus      = 0xC0000014\n\tSTATUS_NONEXISTENT_SECTOR                                                 NTStatus      = 0xC0000015\n\tSTATUS_MORE_PROCESSING_REQUIRED                                           NTStatus      = 0xC0000016\n\tSTATUS_NO_MEMORY                                                          NTStatus      = 0xC0000017\n\tSTATUS_CONFLICTING_ADDRESSES                                              NTStatus      = 0xC0000018\n\tSTATUS_NOT_MAPPED_VIEW                                                    NTStatus      = 0xC0000019\n\tSTATUS_UNABLE_TO_FREE_VM                                                  NTStatus      = 0xC000001A\n\tSTATUS_UNABLE_TO_DELETE_SECTION                                           NTStatus      = 0xC000001B\n\tSTATUS_INVALID_SYSTEM_SERVICE                                             NTStatus      = 0xC000001C\n\tSTATUS_ILLEGAL_INSTRUCTION                                                NTStatus      = 0xC000001D\n\tSTATUS_INVALID_LOCK_SEQUENCE                                              NTStatus      = 0xC000001E\n\tSTATUS_INVALID_VIEW_SIZE                                                  NTStatus      = 0xC000001F\n\tSTATUS_INVALID_FILE_FOR_SECTION                                           NTStatus      = 0xC0000020\n\tSTATUS_ALREADY_COMMITTED                                                  NTStatus      = 0xC0000021\n\tSTATUS_ACCESS_DENIED                                                      NTStatus      = 0xC0000022\n\tSTATUS_BUFFER_TOO_SMALL                                                   NTStatus      = 0xC0000023\n\tSTATUS_OBJECT_TYPE_MISMATCH                                               NTStatus      = 0xC0000024\n\tSTATUS_NONCONTINUABLE_EXCEPTION                                           NTStatus      = 0xC0000025\n\tSTATUS_INVALID_DISPOSITION                                                NTStatus      = 0xC0000026\n\tSTATUS_UNWIND                                                             NTStatus      = 0xC0000027\n\tSTATUS_BAD_STACK                                                          NTStatus      = 0xC0000028\n\tSTATUS_INVALID_UNWIND_TARGET                                              NTStatus      = 0xC0000029\n\tSTATUS_NOT_LOCKED                                                         NTStatus      = 0xC000002A\n\tSTATUS_PARITY_ERROR                                                       NTStatus      = 0xC000002B\n\tSTATUS_UNABLE_TO_DECOMMIT_VM                                              NTStatus      = 0xC000002C\n\tSTATUS_NOT_COMMITTED                                                      NTStatus      = 0xC000002D\n\tSTATUS_INVALID_PORT_ATTRIBUTES                                            NTStatus      = 0xC000002E\n\tSTATUS_PORT_MESSAGE_TOO_LONG                                              NTStatus      = 0xC000002F\n\tSTATUS_INVALID_PARAMETER_MIX                                              NTStatus      = 0xC0000030\n\tSTATUS_INVALID_QUOTA_LOWER                                                NTStatus      = 0xC0000031\n\tSTATUS_DISK_CORRUPT_ERROR                                                 NTStatus      = 0xC0000032\n\tSTATUS_OBJECT_NAME_INVALID                                                NTStatus      = 0xC0000033\n\tSTATUS_OBJECT_NAME_NOT_FOUND                                              NTStatus      = 0xC0000034\n\tSTATUS_OBJECT_NAME_COLLISION                                              NTStatus      = 0xC0000035\n\tSTATUS_PORT_DO_NOT_DISTURB                                                NTStatus      = 0xC0000036\n\tSTATUS_PORT_DISCONNECTED                                                  NTStatus      = 0xC0000037\n\tSTATUS_DEVICE_ALREADY_ATTACHED                                            NTStatus      = 0xC0000038\n\tSTATUS_OBJECT_PATH_INVALID                                                NTStatus      = 0xC0000039\n\tSTATUS_OBJECT_PATH_NOT_FOUND                                              NTStatus      = 0xC000003A\n\tSTATUS_OBJECT_PATH_SYNTAX_BAD                                             NTStatus      = 0xC000003B\n\tSTATUS_DATA_OVERRUN                                                       NTStatus      = 0xC000003C\n\tSTATUS_DATA_LATE_ERROR                                                    NTStatus      = 0xC000003D\n\tSTATUS_DATA_ERROR                                                         NTStatus      = 0xC000003E\n\tSTATUS_CRC_ERROR                                                          NTStatus      = 0xC000003F\n\tSTATUS_SECTION_TOO_BIG                                                    NTStatus      = 0xC0000040\n\tSTATUS_PORT_CONNECTION_REFUSED                                            NTStatus      = 0xC0000041\n\tSTATUS_INVALID_PORT_HANDLE                                                NTStatus      = 0xC0000042\n\tSTATUS_SHARING_VIOLATION                                                  NTStatus      = 0xC0000043\n\tSTATUS_QUOTA_EXCEEDED                                                     NTStatus      = 0xC0000044\n\tSTATUS_INVALID_PAGE_PROTECTION                                            NTStatus      = 0xC0000045\n\tSTATUS_MUTANT_NOT_OWNED                                                   NTStatus      = 0xC0000046\n\tSTATUS_SEMAPHORE_LIMIT_EXCEEDED                                           NTStatus      = 0xC0000047\n\tSTATUS_PORT_ALREADY_SET                                                   NTStatus      = 0xC0000048\n\tSTATUS_SECTION_NOT_IMAGE                                                  NTStatus      = 0xC0000049\n\tSTATUS_SUSPEND_COUNT_EXCEEDED                                             NTStatus      = 0xC000004A\n\tSTATUS_THREAD_IS_TERMINATING                                              NTStatus      = 0xC000004B\n\tSTATUS_BAD_WORKING_SET_LIMIT                                              NTStatus      = 0xC000004C\n\tSTATUS_INCOMPATIBLE_FILE_MAP                                              NTStatus      = 0xC000004D\n\tSTATUS_SECTION_PROTECTION                                                 NTStatus      = 0xC000004E\n\tSTATUS_EAS_NOT_SUPPORTED                                                  NTStatus      = 0xC000004F\n\tSTATUS_EA_TOO_LARGE                                                       NTStatus      = 0xC0000050\n\tSTATUS_NONEXISTENT_EA_ENTRY                                               NTStatus      = 0xC0000051\n\tSTATUS_NO_EAS_ON_FILE                                                     NTStatus      = 0xC0000052\n\tSTATUS_EA_CORRUPT_ERROR                                                   NTStatus      = 0xC0000053\n\tSTATUS_FILE_LOCK_CONFLICT                                                 NTStatus      = 0xC0000054\n\tSTATUS_LOCK_NOT_GRANTED                                                   NTStatus      = 0xC0000055\n\tSTATUS_DELETE_PENDING                                                     NTStatus      = 0xC0000056\n\tSTATUS_CTL_FILE_NOT_SUPPORTED                                             NTStatus      = 0xC0000057\n\tSTATUS_UNKNOWN_REVISION                                                   NTStatus      = 0xC0000058\n\tSTATUS_REVISION_MISMATCH                                                  NTStatus      = 0xC0000059\n\tSTATUS_INVALID_OWNER                                                      NTStatus      = 0xC000005A\n\tSTATUS_INVALID_PRIMARY_GROUP                                              NTStatus      = 0xC000005B\n\tSTATUS_NO_IMPERSONATION_TOKEN                                             NTStatus      = 0xC000005C\n\tSTATUS_CANT_DISABLE_MANDATORY                                             NTStatus      = 0xC000005D\n\tSTATUS_NO_LOGON_SERVERS                                                   NTStatus      = 0xC000005E\n\tSTATUS_NO_SUCH_LOGON_SESSION                                              NTStatus      = 0xC000005F\n\tSTATUS_NO_SUCH_PRIVILEGE                                                  NTStatus      = 0xC0000060\n\tSTATUS_PRIVILEGE_NOT_HELD                                                 NTStatus      = 0xC0000061\n\tSTATUS_INVALID_ACCOUNT_NAME                                               NTStatus      = 0xC0000062\n\tSTATUS_USER_EXISTS                                                        NTStatus      = 0xC0000063\n\tSTATUS_NO_SUCH_USER                                                       NTStatus      = 0xC0000064\n\tSTATUS_GROUP_EXISTS                                                       NTStatus      = 0xC0000065\n\tSTATUS_NO_SUCH_GROUP                                                      NTStatus      = 0xC0000066\n\tSTATUS_MEMBER_IN_GROUP                                                    NTStatus      = 0xC0000067\n\tSTATUS_MEMBER_NOT_IN_GROUP                                                NTStatus      = 0xC0000068\n\tSTATUS_LAST_ADMIN                                                         NTStatus      = 0xC0000069\n\tSTATUS_WRONG_PASSWORD                                                     NTStatus      = 0xC000006A\n\tSTATUS_ILL_FORMED_PASSWORD                                                NTStatus      = 0xC000006B\n\tSTATUS_PASSWORD_RESTRICTION                                               NTStatus      = 0xC000006C\n\tSTATUS_LOGON_FAILURE                                                      NTStatus      = 0xC000006D\n\tSTATUS_ACCOUNT_RESTRICTION                                                NTStatus      = 0xC000006E\n\tSTATUS_INVALID_LOGON_HOURS                                                NTStatus      = 0xC000006F\n\tSTATUS_INVALID_WORKSTATION                                                NTStatus      = 0xC0000070\n\tSTATUS_PASSWORD_EXPIRED                                                   NTStatus      = 0xC0000071\n\tSTATUS_ACCOUNT_DISABLED                                                   NTStatus      = 0xC0000072\n\tSTATUS_NONE_MAPPED                                                        NTStatus      = 0xC0000073\n\tSTATUS_TOO_MANY_LUIDS_REQUESTED                                           NTStatus      = 0xC0000074\n\tSTATUS_LUIDS_EXHAUSTED                                                    NTStatus      = 0xC0000075\n\tSTATUS_INVALID_SUB_AUTHORITY                                              NTStatus      = 0xC0000076\n\tSTATUS_INVALID_ACL                                                        NTStatus      = 0xC0000077\n\tSTATUS_INVALID_SID                                                        NTStatus      = 0xC0000078\n\tSTATUS_INVALID_SECURITY_DESCR                                             NTStatus      = 0xC0000079\n\tSTATUS_PROCEDURE_NOT_FOUND                                                NTStatus      = 0xC000007A\n\tSTATUS_INVALID_IMAGE_FORMAT                                               NTStatus      = 0xC000007B\n\tSTATUS_NO_TOKEN                                                           NTStatus      = 0xC000007C\n\tSTATUS_BAD_INHERITANCE_ACL                                                NTStatus      = 0xC000007D\n\tSTATUS_RANGE_NOT_LOCKED                                                   NTStatus      = 0xC000007E\n\tSTATUS_DISK_FULL                                                          NTStatus      = 0xC000007F\n\tSTATUS_SERVER_DISABLED                                                    NTStatus      = 0xC0000080\n\tSTATUS_SERVER_NOT_DISABLED                                                NTStatus      = 0xC0000081\n\tSTATUS_TOO_MANY_GUIDS_REQUESTED                                           NTStatus      = 0xC0000082\n\tSTATUS_GUIDS_EXHAUSTED                                                    NTStatus      = 0xC0000083\n\tSTATUS_INVALID_ID_AUTHORITY                                               NTStatus      = 0xC0000084\n\tSTATUS_AGENTS_EXHAUSTED                                                   NTStatus      = 0xC0000085\n\tSTATUS_INVALID_VOLUME_LABEL                                               NTStatus      = 0xC0000086\n\tSTATUS_SECTION_NOT_EXTENDED                                               NTStatus      = 0xC0000087\n\tSTATUS_NOT_MAPPED_DATA                                                    NTStatus      = 0xC0000088\n\tSTATUS_RESOURCE_DATA_NOT_FOUND                                            NTStatus      = 0xC0000089\n\tSTATUS_RESOURCE_TYPE_NOT_FOUND                                            NTStatus      = 0xC000008A\n\tSTATUS_RESOURCE_NAME_NOT_FOUND                                            NTStatus      = 0xC000008B\n\tSTATUS_ARRAY_BOUNDS_EXCEEDED                                              NTStatus      = 0xC000008C\n\tSTATUS_FLOAT_DENORMAL_OPERAND                                             NTStatus      = 0xC000008D\n\tSTATUS_FLOAT_DIVIDE_BY_ZERO                                               NTStatus      = 0xC000008E\n\tSTATUS_FLOAT_INEXACT_RESULT                                               NTStatus      = 0xC000008F\n\tSTATUS_FLOAT_INVALID_OPERATION                                            NTStatus      = 0xC0000090\n\tSTATUS_FLOAT_OVERFLOW                                                     NTStatus      = 0xC0000091\n\tSTATUS_FLOAT_STACK_CHECK                                                  NTStatus      = 0xC0000092\n\tSTATUS_FLOAT_UNDERFLOW                                                    NTStatus      = 0xC0000093\n\tSTATUS_INTEGER_DIVIDE_BY_ZERO                                             NTStatus      = 0xC0000094\n\tSTATUS_INTEGER_OVERFLOW                                                   NTStatus      = 0xC0000095\n\tSTATUS_PRIVILEGED_INSTRUCTION                                             NTStatus      = 0xC0000096\n\tSTATUS_TOO_MANY_PAGING_FILES                                              NTStatus      = 0xC0000097\n\tSTATUS_FILE_INVALID                                                       NTStatus      = 0xC0000098\n\tSTATUS_ALLOTTED_SPACE_EXCEEDED                                            NTStatus      = 0xC0000099\n\tSTATUS_INSUFFICIENT_RESOURCES                                             NTStatus      = 0xC000009A\n\tSTATUS_DFS_EXIT_PATH_FOUND                                                NTStatus      = 0xC000009B\n\tSTATUS_DEVICE_DATA_ERROR                                                  NTStatus      = 0xC000009C\n\tSTATUS_DEVICE_NOT_CONNECTED                                               NTStatus      = 0xC000009D\n\tSTATUS_DEVICE_POWER_FAILURE                                               NTStatus      = 0xC000009E\n\tSTATUS_FREE_VM_NOT_AT_BASE                                                NTStatus      = 0xC000009F\n\tSTATUS_MEMORY_NOT_ALLOCATED                                               NTStatus      = 0xC00000A0\n\tSTATUS_WORKING_SET_QUOTA                                                  NTStatus      = 0xC00000A1\n\tSTATUS_MEDIA_WRITE_PROTECTED                                              NTStatus      = 0xC00000A2\n\tSTATUS_DEVICE_NOT_READY                                                   NTStatus      = 0xC00000A3\n\tSTATUS_INVALID_GROUP_ATTRIBUTES                                           NTStatus      = 0xC00000A4\n\tSTATUS_BAD_IMPERSONATION_LEVEL                                            NTStatus      = 0xC00000A5\n\tSTATUS_CANT_OPEN_ANONYMOUS                                                NTStatus      = 0xC00000A6\n\tSTATUS_BAD_VALIDATION_CLASS                                               NTStatus      = 0xC00000A7\n\tSTATUS_BAD_TOKEN_TYPE                                                     NTStatus      = 0xC00000A8\n\tSTATUS_BAD_MASTER_BOOT_RECORD                                             NTStatus      = 0xC00000A9\n\tSTATUS_INSTRUCTION_MISALIGNMENT                                           NTStatus      = 0xC00000AA\n\tSTATUS_INSTANCE_NOT_AVAILABLE                                             NTStatus      = 0xC00000AB\n\tSTATUS_PIPE_NOT_AVAILABLE                                                 NTStatus      = 0xC00000AC\n\tSTATUS_INVALID_PIPE_STATE                                                 NTStatus      = 0xC00000AD\n\tSTATUS_PIPE_BUSY                                                          NTStatus      = 0xC00000AE\n\tSTATUS_ILLEGAL_FUNCTION                                                   NTStatus      = 0xC00000AF\n\tSTATUS_PIPE_DISCONNECTED                                                  NTStatus      = 0xC00000B0\n\tSTATUS_PIPE_CLOSING                                                       NTStatus      = 0xC00000B1\n\tSTATUS_PIPE_CONNECTED                                                     NTStatus      = 0xC00000B2\n\tSTATUS_PIPE_LISTENING                                                     NTStatus      = 0xC00000B3\n\tSTATUS_INVALID_READ_MODE                                                  NTStatus      = 0xC00000B4\n\tSTATUS_IO_TIMEOUT                                                         NTStatus      = 0xC00000B5\n\tSTATUS_FILE_FORCED_CLOSED                                                 NTStatus      = 0xC00000B6\n\tSTATUS_PROFILING_NOT_STARTED                                              NTStatus      = 0xC00000B7\n\tSTATUS_PROFILING_NOT_STOPPED                                              NTStatus      = 0xC00000B8\n\tSTATUS_COULD_NOT_INTERPRET                                                NTStatus      = 0xC00000B9\n\tSTATUS_FILE_IS_A_DIRECTORY                                                NTStatus      = 0xC00000BA\n\tSTATUS_NOT_SUPPORTED                                                      NTStatus      = 0xC00000BB\n\tSTATUS_REMOTE_NOT_LISTENING                                               NTStatus      = 0xC00000BC\n\tSTATUS_DUPLICATE_NAME                                                     NTStatus      = 0xC00000BD\n\tSTATUS_BAD_NETWORK_PATH                                                   NTStatus      = 0xC00000BE\n\tSTATUS_NETWORK_BUSY                                                       NTStatus      = 0xC00000BF\n\tSTATUS_DEVICE_DOES_NOT_EXIST                                              NTStatus      = 0xC00000C0\n\tSTATUS_TOO_MANY_COMMANDS                                                  NTStatus      = 0xC00000C1\n\tSTATUS_ADAPTER_HARDWARE_ERROR                                             NTStatus      = 0xC00000C2\n\tSTATUS_INVALID_NETWORK_RESPONSE                                           NTStatus      = 0xC00000C3\n\tSTATUS_UNEXPECTED_NETWORK_ERROR                                           NTStatus      = 0xC00000C4\n\tSTATUS_BAD_REMOTE_ADAPTER                                                 NTStatus      = 0xC00000C5\n\tSTATUS_PRINT_QUEUE_FULL                                                   NTStatus      = 0xC00000C6\n\tSTATUS_NO_SPOOL_SPACE                                                     NTStatus      = 0xC00000C7\n\tSTATUS_PRINT_CANCELLED                                                    NTStatus      = 0xC00000C8\n\tSTATUS_NETWORK_NAME_DELETED                                               NTStatus      = 0xC00000C9\n\tSTATUS_NETWORK_ACCESS_DENIED                                              NTStatus      = 0xC00000CA\n\tSTATUS_BAD_DEVICE_TYPE                                                    NTStatus      = 0xC00000CB\n\tSTATUS_BAD_NETWORK_NAME                                                   NTStatus      = 0xC00000CC\n\tSTATUS_TOO_MANY_NAMES                                                     NTStatus      = 0xC00000CD\n\tSTATUS_TOO_MANY_SESSIONS                                                  NTStatus      = 0xC00000CE\n\tSTATUS_SHARING_PAUSED                                                     NTStatus      = 0xC00000CF\n\tSTATUS_REQUEST_NOT_ACCEPTED                                               NTStatus      = 0xC00000D0\n\tSTATUS_REDIRECTOR_PAUSED                                                  NTStatus      = 0xC00000D1\n\tSTATUS_NET_WRITE_FAULT                                                    NTStatus      = 0xC00000D2\n\tSTATUS_PROFILING_AT_LIMIT                                                 NTStatus      = 0xC00000D3\n\tSTATUS_NOT_SAME_DEVICE                                                    NTStatus      = 0xC00000D4\n\tSTATUS_FILE_RENAMED                                                       NTStatus      = 0xC00000D5\n\tSTATUS_VIRTUAL_CIRCUIT_CLOSED                                             NTStatus      = 0xC00000D6\n\tSTATUS_NO_SECURITY_ON_OBJECT                                              NTStatus      = 0xC00000D7\n\tSTATUS_CANT_WAIT                                                          NTStatus      = 0xC00000D8\n\tSTATUS_PIPE_EMPTY                                                         NTStatus      = 0xC00000D9\n\tSTATUS_CANT_ACCESS_DOMAIN_INFO                                            NTStatus      = 0xC00000DA\n\tSTATUS_CANT_TERMINATE_SELF                                                NTStatus      = 0xC00000DB\n\tSTATUS_INVALID_SERVER_STATE                                               NTStatus      = 0xC00000DC\n\tSTATUS_INVALID_DOMAIN_STATE                                               NTStatus      = 0xC00000DD\n\tSTATUS_INVALID_DOMAIN_ROLE                                                NTStatus      = 0xC00000DE\n\tSTATUS_NO_SUCH_DOMAIN                                                     NTStatus      = 0xC00000DF\n\tSTATUS_DOMAIN_EXISTS                                                      NTStatus      = 0xC00000E0\n\tSTATUS_DOMAIN_LIMIT_EXCEEDED                                              NTStatus      = 0xC00000E1\n\tSTATUS_OPLOCK_NOT_GRANTED                                                 NTStatus      = 0xC00000E2\n\tSTATUS_INVALID_OPLOCK_PROTOCOL                                            NTStatus      = 0xC00000E3\n\tSTATUS_INTERNAL_DB_CORRUPTION                                             NTStatus      = 0xC00000E4\n\tSTATUS_INTERNAL_ERROR                                                     NTStatus      = 0xC00000E5\n\tSTATUS_GENERIC_NOT_MAPPED                                                 NTStatus      = 0xC00000E6\n\tSTATUS_BAD_DESCRIPTOR_FORMAT                                              NTStatus      = 0xC00000E7\n\tSTATUS_INVALID_USER_BUFFER                                                NTStatus      = 0xC00000E8\n\tSTATUS_UNEXPECTED_IO_ERROR                                                NTStatus      = 0xC00000E9\n\tSTATUS_UNEXPECTED_MM_CREATE_ERR                                           NTStatus      = 0xC00000EA\n\tSTATUS_UNEXPECTED_MM_MAP_ERROR                                            NTStatus      = 0xC00000EB\n\tSTATUS_UNEXPECTED_MM_EXTEND_ERR                                           NTStatus      = 0xC00000EC\n\tSTATUS_NOT_LOGON_PROCESS                                                  NTStatus      = 0xC00000ED\n\tSTATUS_LOGON_SESSION_EXISTS                                               NTStatus      = 0xC00000EE\n\tSTATUS_INVALID_PARAMETER_1                                                NTStatus      = 0xC00000EF\n\tSTATUS_INVALID_PARAMETER_2                                                NTStatus      = 0xC00000F0\n\tSTATUS_INVALID_PARAMETER_3                                                NTStatus      = 0xC00000F1\n\tSTATUS_INVALID_PARAMETER_4                                                NTStatus      = 0xC00000F2\n\tSTATUS_INVALID_PARAMETER_5                                                NTStatus      = 0xC00000F3\n\tSTATUS_INVALID_PARAMETER_6                                                NTStatus      = 0xC00000F4\n\tSTATUS_INVALID_PARAMETER_7                                                NTStatus      = 0xC00000F5\n\tSTATUS_INVALID_PARAMETER_8                                                NTStatus      = 0xC00000F6\n\tSTATUS_INVALID_PARAMETER_9                                                NTStatus      = 0xC00000F7\n\tSTATUS_INVALID_PARAMETER_10                                               NTStatus      = 0xC00000F8\n\tSTATUS_INVALID_PARAMETER_11                                               NTStatus      = 0xC00000F9\n\tSTATUS_INVALID_PARAMETER_12                                               NTStatus      = 0xC00000FA\n\tSTATUS_REDIRECTOR_NOT_STARTED                                             NTStatus      = 0xC00000FB\n\tSTATUS_REDIRECTOR_STARTED                                                 NTStatus      = 0xC00000FC\n\tSTATUS_STACK_OVERFLOW                                                     NTStatus      = 0xC00000FD\n\tSTATUS_NO_SUCH_PACKAGE                                                    NTStatus      = 0xC00000FE\n\tSTATUS_BAD_FUNCTION_TABLE                                                 NTStatus      = 0xC00000FF\n\tSTATUS_VARIABLE_NOT_FOUND                                                 NTStatus      = 0xC0000100\n\tSTATUS_DIRECTORY_NOT_EMPTY                                                NTStatus      = 0xC0000101\n\tSTATUS_FILE_CORRUPT_ERROR                                                 NTStatus      = 0xC0000102\n\tSTATUS_NOT_A_DIRECTORY                                                    NTStatus      = 0xC0000103\n\tSTATUS_BAD_LOGON_SESSION_STATE                                            NTStatus      = 0xC0000104\n\tSTATUS_LOGON_SESSION_COLLISION                                            NTStatus      = 0xC0000105\n\tSTATUS_NAME_TOO_LONG                                                      NTStatus      = 0xC0000106\n\tSTATUS_FILES_OPEN                                                         NTStatus      = 0xC0000107\n\tSTATUS_CONNECTION_IN_USE                                                  NTStatus      = 0xC0000108\n\tSTATUS_MESSAGE_NOT_FOUND                                                  NTStatus      = 0xC0000109\n\tSTATUS_PROCESS_IS_TERMINATING                                             NTStatus      = 0xC000010A\n\tSTATUS_INVALID_LOGON_TYPE                                                 NTStatus      = 0xC000010B\n\tSTATUS_NO_GUID_TRANSLATION                                                NTStatus      = 0xC000010C\n\tSTATUS_CANNOT_IMPERSONATE                                                 NTStatus      = 0xC000010D\n\tSTATUS_IMAGE_ALREADY_LOADED                                               NTStatus      = 0xC000010E\n\tSTATUS_ABIOS_NOT_PRESENT                                                  NTStatus      = 0xC000010F\n\tSTATUS_ABIOS_LID_NOT_EXIST                                                NTStatus      = 0xC0000110\n\tSTATUS_ABIOS_LID_ALREADY_OWNED                                            NTStatus      = 0xC0000111\n\tSTATUS_ABIOS_NOT_LID_OWNER                                                NTStatus      = 0xC0000112\n\tSTATUS_ABIOS_INVALID_COMMAND                                              NTStatus      = 0xC0000113\n\tSTATUS_ABIOS_INVALID_LID                                                  NTStatus      = 0xC0000114\n\tSTATUS_ABIOS_SELECTOR_NOT_AVAILABLE                                       NTStatus      = 0xC0000115\n\tSTATUS_ABIOS_INVALID_SELECTOR                                             NTStatus      = 0xC0000116\n\tSTATUS_NO_LDT                                                             NTStatus      = 0xC0000117\n\tSTATUS_INVALID_LDT_SIZE                                                   NTStatus      = 0xC0000118\n\tSTATUS_INVALID_LDT_OFFSET                                                 NTStatus      = 0xC0000119\n\tSTATUS_INVALID_LDT_DESCRIPTOR                                             NTStatus      = 0xC000011A\n\tSTATUS_INVALID_IMAGE_NE_FORMAT                                            NTStatus      = 0xC000011B\n\tSTATUS_RXACT_INVALID_STATE                                                NTStatus      = 0xC000011C\n\tSTATUS_RXACT_COMMIT_FAILURE                                               NTStatus      = 0xC000011D\n\tSTATUS_MAPPED_FILE_SIZE_ZERO                                              NTStatus      = 0xC000011E\n\tSTATUS_TOO_MANY_OPENED_FILES                                              NTStatus      = 0xC000011F\n\tSTATUS_CANCELLED                                                          NTStatus      = 0xC0000120\n\tSTATUS_CANNOT_DELETE                                                      NTStatus      = 0xC0000121\n\tSTATUS_INVALID_COMPUTER_NAME                                              NTStatus      = 0xC0000122\n\tSTATUS_FILE_DELETED                                                       NTStatus      = 0xC0000123\n\tSTATUS_SPECIAL_ACCOUNT                                                    NTStatus      = 0xC0000124\n\tSTATUS_SPECIAL_GROUP                                                      NTStatus      = 0xC0000125\n\tSTATUS_SPECIAL_USER                                                       NTStatus      = 0xC0000126\n\tSTATUS_MEMBERS_PRIMARY_GROUP                                              NTStatus      = 0xC0000127\n\tSTATUS_FILE_CLOSED                                                        NTStatus      = 0xC0000128\n\tSTATUS_TOO_MANY_THREADS                                                   NTStatus      = 0xC0000129\n\tSTATUS_THREAD_NOT_IN_PROCESS                                              NTStatus      = 0xC000012A\n\tSTATUS_TOKEN_ALREADY_IN_USE                                               NTStatus      = 0xC000012B\n\tSTATUS_PAGEFILE_QUOTA_EXCEEDED                                            NTStatus      = 0xC000012C\n\tSTATUS_COMMITMENT_LIMIT                                                   NTStatus      = 0xC000012D\n\tSTATUS_INVALID_IMAGE_LE_FORMAT                                            NTStatus      = 0xC000012E\n\tSTATUS_INVALID_IMAGE_NOT_MZ                                               NTStatus      = 0xC000012F\n\tSTATUS_INVALID_IMAGE_PROTECT                                              NTStatus      = 0xC0000130\n\tSTATUS_INVALID_IMAGE_WIN_16                                               NTStatus      = 0xC0000131\n\tSTATUS_LOGON_SERVER_CONFLICT                                              NTStatus      = 0xC0000132\n\tSTATUS_TIME_DIFFERENCE_AT_DC                                              NTStatus      = 0xC0000133\n\tSTATUS_SYNCHRONIZATION_REQUIRED                                           NTStatus      = 0xC0000134\n\tSTATUS_DLL_NOT_FOUND                                                      NTStatus      = 0xC0000135\n\tSTATUS_OPEN_FAILED                                                        NTStatus      = 0xC0000136\n\tSTATUS_IO_PRIVILEGE_FAILED                                                NTStatus      = 0xC0000137\n\tSTATUS_ORDINAL_NOT_FOUND                                                  NTStatus      = 0xC0000138\n\tSTATUS_ENTRYPOINT_NOT_FOUND                                               NTStatus      = 0xC0000139\n\tSTATUS_CONTROL_C_EXIT                                                     NTStatus      = 0xC000013A\n\tSTATUS_LOCAL_DISCONNECT                                                   NTStatus      = 0xC000013B\n\tSTATUS_REMOTE_DISCONNECT                                                  NTStatus      = 0xC000013C\n\tSTATUS_REMOTE_RESOURCES                                                   NTStatus      = 0xC000013D\n\tSTATUS_LINK_FAILED                                                        NTStatus      = 0xC000013E\n\tSTATUS_LINK_TIMEOUT                                                       NTStatus      = 0xC000013F\n\tSTATUS_INVALID_CONNECTION                                                 NTStatus      = 0xC0000140\n\tSTATUS_INVALID_ADDRESS                                                    NTStatus      = 0xC0000141\n\tSTATUS_DLL_INIT_FAILED                                                    NTStatus      = 0xC0000142\n\tSTATUS_MISSING_SYSTEMFILE                                                 NTStatus      = 0xC0000143\n\tSTATUS_UNHANDLED_EXCEPTION                                                NTStatus      = 0xC0000144\n\tSTATUS_APP_INIT_FAILURE                                                   NTStatus      = 0xC0000145\n\tSTATUS_PAGEFILE_CREATE_FAILED                                             NTStatus      = 0xC0000146\n\tSTATUS_NO_PAGEFILE                                                        NTStatus      = 0xC0000147\n\tSTATUS_INVALID_LEVEL                                                      NTStatus      = 0xC0000148\n\tSTATUS_WRONG_PASSWORD_CORE                                                NTStatus      = 0xC0000149\n\tSTATUS_ILLEGAL_FLOAT_CONTEXT                                              NTStatus      = 0xC000014A\n\tSTATUS_PIPE_BROKEN                                                        NTStatus      = 0xC000014B\n\tSTATUS_REGISTRY_CORRUPT                                                   NTStatus      = 0xC000014C\n\tSTATUS_REGISTRY_IO_FAILED                                                 NTStatus      = 0xC000014D\n\tSTATUS_NO_EVENT_PAIR                                                      NTStatus      = 0xC000014E\n\tSTATUS_UNRECOGNIZED_VOLUME                                                NTStatus      = 0xC000014F\n\tSTATUS_SERIAL_NO_DEVICE_INITED                                            NTStatus      = 0xC0000150\n\tSTATUS_NO_SUCH_ALIAS                                                      NTStatus      = 0xC0000151\n\tSTATUS_MEMBER_NOT_IN_ALIAS                                                NTStatus      = 0xC0000152\n\tSTATUS_MEMBER_IN_ALIAS                                                    NTStatus      = 0xC0000153\n\tSTATUS_ALIAS_EXISTS                                                       NTStatus      = 0xC0000154\n\tSTATUS_LOGON_NOT_GRANTED                                                  NTStatus      = 0xC0000155\n\tSTATUS_TOO_MANY_SECRETS                                                   NTStatus      = 0xC0000156\n\tSTATUS_SECRET_TOO_LONG                                                    NTStatus      = 0xC0000157\n\tSTATUS_INTERNAL_DB_ERROR                                                  NTStatus      = 0xC0000158\n\tSTATUS_FULLSCREEN_MODE                                                    NTStatus      = 0xC0000159\n\tSTATUS_TOO_MANY_CONTEXT_IDS                                               NTStatus      = 0xC000015A\n\tSTATUS_LOGON_TYPE_NOT_GRANTED                                             NTStatus      = 0xC000015B\n\tSTATUS_NOT_REGISTRY_FILE                                                  NTStatus      = 0xC000015C\n\tSTATUS_NT_CROSS_ENCRYPTION_REQUIRED                                       NTStatus      = 0xC000015D\n\tSTATUS_DOMAIN_CTRLR_CONFIG_ERROR                                          NTStatus      = 0xC000015E\n\tSTATUS_FT_MISSING_MEMBER                                                  NTStatus      = 0xC000015F\n\tSTATUS_ILL_FORMED_SERVICE_ENTRY                                           NTStatus      = 0xC0000160\n\tSTATUS_ILLEGAL_CHARACTER                                                  NTStatus      = 0xC0000161\n\tSTATUS_UNMAPPABLE_CHARACTER                                               NTStatus      = 0xC0000162\n\tSTATUS_UNDEFINED_CHARACTER                                                NTStatus      = 0xC0000163\n\tSTATUS_FLOPPY_VOLUME                                                      NTStatus      = 0xC0000164\n\tSTATUS_FLOPPY_ID_MARK_NOT_FOUND                                           NTStatus      = 0xC0000165\n\tSTATUS_FLOPPY_WRONG_CYLINDER                                              NTStatus      = 0xC0000166\n\tSTATUS_FLOPPY_UNKNOWN_ERROR                                               NTStatus      = 0xC0000167\n\tSTATUS_FLOPPY_BAD_REGISTERS                                               NTStatus      = 0xC0000168\n\tSTATUS_DISK_RECALIBRATE_FAILED                                            NTStatus      = 0xC0000169\n\tSTATUS_DISK_OPERATION_FAILED                                              NTStatus      = 0xC000016A\n\tSTATUS_DISK_RESET_FAILED                                                  NTStatus      = 0xC000016B\n\tSTATUS_SHARED_IRQ_BUSY                                                    NTStatus      = 0xC000016C\n\tSTATUS_FT_ORPHANING                                                       NTStatus      = 0xC000016D\n\tSTATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT                                   NTStatus      = 0xC000016E\n\tSTATUS_PARTITION_FAILURE                                                  NTStatus      = 0xC0000172\n\tSTATUS_INVALID_BLOCK_LENGTH                                               NTStatus      = 0xC0000173\n\tSTATUS_DEVICE_NOT_PARTITIONED                                             NTStatus      = 0xC0000174\n\tSTATUS_UNABLE_TO_LOCK_MEDIA                                               NTStatus      = 0xC0000175\n\tSTATUS_UNABLE_TO_UNLOAD_MEDIA                                             NTStatus      = 0xC0000176\n\tSTATUS_EOM_OVERFLOW                                                       NTStatus      = 0xC0000177\n\tSTATUS_NO_MEDIA                                                           NTStatus      = 0xC0000178\n\tSTATUS_NO_SUCH_MEMBER                                                     NTStatus      = 0xC000017A\n\tSTATUS_INVALID_MEMBER                                                     NTStatus      = 0xC000017B\n\tSTATUS_KEY_DELETED                                                        NTStatus      = 0xC000017C\n\tSTATUS_NO_LOG_SPACE                                                       NTStatus      = 0xC000017D\n\tSTATUS_TOO_MANY_SIDS                                                      NTStatus      = 0xC000017E\n\tSTATUS_LM_CROSS_ENCRYPTION_REQUIRED                                       NTStatus      = 0xC000017F\n\tSTATUS_KEY_HAS_CHILDREN                                                   NTStatus      = 0xC0000180\n\tSTATUS_CHILD_MUST_BE_VOLATILE                                             NTStatus      = 0xC0000181\n\tSTATUS_DEVICE_CONFIGURATION_ERROR                                         NTStatus      = 0xC0000182\n\tSTATUS_DRIVER_INTERNAL_ERROR                                              NTStatus      = 0xC0000183\n\tSTATUS_INVALID_DEVICE_STATE                                               NTStatus      = 0xC0000184\n\tSTATUS_IO_DEVICE_ERROR                                                    NTStatus      = 0xC0000185\n\tSTATUS_DEVICE_PROTOCOL_ERROR                                              NTStatus      = 0xC0000186\n\tSTATUS_BACKUP_CONTROLLER                                                  NTStatus      = 0xC0000187\n\tSTATUS_LOG_FILE_FULL                                                      NTStatus      = 0xC0000188\n\tSTATUS_TOO_LATE                                                           NTStatus      = 0xC0000189\n\tSTATUS_NO_TRUST_LSA_SECRET                                                NTStatus      = 0xC000018A\n\tSTATUS_NO_TRUST_SAM_ACCOUNT                                               NTStatus      = 0xC000018B\n\tSTATUS_TRUSTED_DOMAIN_FAILURE                                             NTStatus      = 0xC000018C\n\tSTATUS_TRUSTED_RELATIONSHIP_FAILURE                                       NTStatus      = 0xC000018D\n\tSTATUS_EVENTLOG_FILE_CORRUPT                                              NTStatus      = 0xC000018E\n\tSTATUS_EVENTLOG_CANT_START                                                NTStatus      = 0xC000018F\n\tSTATUS_TRUST_FAILURE                                                      NTStatus      = 0xC0000190\n\tSTATUS_MUTANT_LIMIT_EXCEEDED                                              NTStatus      = 0xC0000191\n\tSTATUS_NETLOGON_NOT_STARTED                                               NTStatus      = 0xC0000192\n\tSTATUS_ACCOUNT_EXPIRED                                                    NTStatus      = 0xC0000193\n\tSTATUS_POSSIBLE_DEADLOCK                                                  NTStatus      = 0xC0000194\n\tSTATUS_NETWORK_CREDENTIAL_CONFLICT                                        NTStatus      = 0xC0000195\n\tSTATUS_REMOTE_SESSION_LIMIT                                               NTStatus      = 0xC0000196\n\tSTATUS_EVENTLOG_FILE_CHANGED                                              NTStatus      = 0xC0000197\n\tSTATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT                                  NTStatus      = 0xC0000198\n\tSTATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT                                  NTStatus      = 0xC0000199\n\tSTATUS_NOLOGON_SERVER_TRUST_ACCOUNT                                       NTStatus      = 0xC000019A\n\tSTATUS_DOMAIN_TRUST_INCONSISTENT                                          NTStatus      = 0xC000019B\n\tSTATUS_FS_DRIVER_REQUIRED                                                 NTStatus      = 0xC000019C\n\tSTATUS_IMAGE_ALREADY_LOADED_AS_DLL                                        NTStatus      = 0xC000019D\n\tSTATUS_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING               NTStatus      = 0xC000019E\n\tSTATUS_SHORT_NAMES_NOT_ENABLED_ON_VOLUME                                  NTStatus      = 0xC000019F\n\tSTATUS_SECURITY_STREAM_IS_INCONSISTENT                                    NTStatus      = 0xC00001A0\n\tSTATUS_INVALID_LOCK_RANGE                                                 NTStatus      = 0xC00001A1\n\tSTATUS_INVALID_ACE_CONDITION                                              NTStatus      = 0xC00001A2\n\tSTATUS_IMAGE_SUBSYSTEM_NOT_PRESENT                                        NTStatus      = 0xC00001A3\n\tSTATUS_NOTIFICATION_GUID_ALREADY_DEFINED                                  NTStatus      = 0xC00001A4\n\tSTATUS_INVALID_EXCEPTION_HANDLER                                          NTStatus      = 0xC00001A5\n\tSTATUS_DUPLICATE_PRIVILEGES                                               NTStatus      = 0xC00001A6\n\tSTATUS_NOT_ALLOWED_ON_SYSTEM_FILE                                         NTStatus      = 0xC00001A7\n\tSTATUS_REPAIR_NEEDED                                                      NTStatus      = 0xC00001A8\n\tSTATUS_QUOTA_NOT_ENABLED                                                  NTStatus      = 0xC00001A9\n\tSTATUS_NO_APPLICATION_PACKAGE                                             NTStatus      = 0xC00001AA\n\tSTATUS_FILE_METADATA_OPTIMIZATION_IN_PROGRESS                             NTStatus      = 0xC00001AB\n\tSTATUS_NOT_SAME_OBJECT                                                    NTStatus      = 0xC00001AC\n\tSTATUS_FATAL_MEMORY_EXHAUSTION                                            NTStatus      = 0xC00001AD\n\tSTATUS_ERROR_PROCESS_NOT_IN_JOB                                           NTStatus      = 0xC00001AE\n\tSTATUS_CPU_SET_INVALID                                                    NTStatus      = 0xC00001AF\n\tSTATUS_IO_DEVICE_INVALID_DATA                                             NTStatus      = 0xC00001B0\n\tSTATUS_IO_UNALIGNED_WRITE                                                 NTStatus      = 0xC00001B1\n\tSTATUS_NETWORK_OPEN_RESTRICTION                                           NTStatus      = 0xC0000201\n\tSTATUS_NO_USER_SESSION_KEY                                                NTStatus      = 0xC0000202\n\tSTATUS_USER_SESSION_DELETED                                               NTStatus      = 0xC0000203\n\tSTATUS_RESOURCE_LANG_NOT_FOUND                                            NTStatus      = 0xC0000204\n\tSTATUS_INSUFF_SERVER_RESOURCES                                            NTStatus      = 0xC0000205\n\tSTATUS_INVALID_BUFFER_SIZE                                                NTStatus      = 0xC0000206\n\tSTATUS_INVALID_ADDRESS_COMPONENT                                          NTStatus      = 0xC0000207\n\tSTATUS_INVALID_ADDRESS_WILDCARD                                           NTStatus      = 0xC0000208\n\tSTATUS_TOO_MANY_ADDRESSES                                                 NTStatus      = 0xC0000209\n\tSTATUS_ADDRESS_ALREADY_EXISTS                                             NTStatus      = 0xC000020A\n\tSTATUS_ADDRESS_CLOSED                                                     NTStatus      = 0xC000020B\n\tSTATUS_CONNECTION_DISCONNECTED                                            NTStatus      = 0xC000020C\n\tSTATUS_CONNECTION_RESET                                                   NTStatus      = 0xC000020D\n\tSTATUS_TOO_MANY_NODES                                                     NTStatus      = 0xC000020E\n\tSTATUS_TRANSACTION_ABORTED                                                NTStatus      = 0xC000020F\n\tSTATUS_TRANSACTION_TIMED_OUT                                              NTStatus      = 0xC0000210\n\tSTATUS_TRANSACTION_NO_RELEASE                                             NTStatus      = 0xC0000211\n\tSTATUS_TRANSACTION_NO_MATCH                                               NTStatus      = 0xC0000212\n\tSTATUS_TRANSACTION_RESPONDED                                              NTStatus      = 0xC0000213\n\tSTATUS_TRANSACTION_INVALID_ID                                             NTStatus      = 0xC0000214\n\tSTATUS_TRANSACTION_INVALID_TYPE                                           NTStatus      = 0xC0000215\n\tSTATUS_NOT_SERVER_SESSION                                                 NTStatus      = 0xC0000216\n\tSTATUS_NOT_CLIENT_SESSION                                                 NTStatus      = 0xC0000217\n\tSTATUS_CANNOT_LOAD_REGISTRY_FILE                                          NTStatus      = 0xC0000218\n\tSTATUS_DEBUG_ATTACH_FAILED                                                NTStatus      = 0xC0000219\n\tSTATUS_SYSTEM_PROCESS_TERMINATED                                          NTStatus      = 0xC000021A\n\tSTATUS_DATA_NOT_ACCEPTED                                                  NTStatus      = 0xC000021B\n\tSTATUS_NO_BROWSER_SERVERS_FOUND                                           NTStatus      = 0xC000021C\n\tSTATUS_VDM_HARD_ERROR                                                     NTStatus      = 0xC000021D\n\tSTATUS_DRIVER_CANCEL_TIMEOUT                                              NTStatus      = 0xC000021E\n\tSTATUS_REPLY_MESSAGE_MISMATCH                                             NTStatus      = 0xC000021F\n\tSTATUS_MAPPED_ALIGNMENT                                                   NTStatus      = 0xC0000220\n\tSTATUS_IMAGE_CHECKSUM_MISMATCH                                            NTStatus      = 0xC0000221\n\tSTATUS_LOST_WRITEBEHIND_DATA                                              NTStatus      = 0xC0000222\n\tSTATUS_CLIENT_SERVER_PARAMETERS_INVALID                                   NTStatus      = 0xC0000223\n\tSTATUS_PASSWORD_MUST_CHANGE                                               NTStatus      = 0xC0000224\n\tSTATUS_NOT_FOUND                                                          NTStatus      = 0xC0000225\n\tSTATUS_NOT_TINY_STREAM                                                    NTStatus      = 0xC0000226\n\tSTATUS_RECOVERY_FAILURE                                                   NTStatus      = 0xC0000227\n\tSTATUS_STACK_OVERFLOW_READ                                                NTStatus      = 0xC0000228\n\tSTATUS_FAIL_CHECK                                                         NTStatus      = 0xC0000229\n\tSTATUS_DUPLICATE_OBJECTID                                                 NTStatus      = 0xC000022A\n\tSTATUS_OBJECTID_EXISTS                                                    NTStatus      = 0xC000022B\n\tSTATUS_CONVERT_TO_LARGE                                                   NTStatus      = 0xC000022C\n\tSTATUS_RETRY                                                              NTStatus      = 0xC000022D\n\tSTATUS_FOUND_OUT_OF_SCOPE                                                 NTStatus      = 0xC000022E\n\tSTATUS_ALLOCATE_BUCKET                                                    NTStatus      = 0xC000022F\n\tSTATUS_PROPSET_NOT_FOUND                                                  NTStatus      = 0xC0000230\n\tSTATUS_MARSHALL_OVERFLOW                                                  NTStatus      = 0xC0000231\n\tSTATUS_INVALID_VARIANT                                                    NTStatus      = 0xC0000232\n\tSTATUS_DOMAIN_CONTROLLER_NOT_FOUND                                        NTStatus      = 0xC0000233\n\tSTATUS_ACCOUNT_LOCKED_OUT                                                 NTStatus      = 0xC0000234\n\tSTATUS_HANDLE_NOT_CLOSABLE                                                NTStatus      = 0xC0000235\n\tSTATUS_CONNECTION_REFUSED                                                 NTStatus      = 0xC0000236\n\tSTATUS_GRACEFUL_DISCONNECT                                                NTStatus      = 0xC0000237\n\tSTATUS_ADDRESS_ALREADY_ASSOCIATED                                         NTStatus      = 0xC0000238\n\tSTATUS_ADDRESS_NOT_ASSOCIATED                                             NTStatus      = 0xC0000239\n\tSTATUS_CONNECTION_INVALID                                                 NTStatus      = 0xC000023A\n\tSTATUS_CONNECTION_ACTIVE                                                  NTStatus      = 0xC000023B\n\tSTATUS_NETWORK_UNREACHABLE                                                NTStatus      = 0xC000023C\n\tSTATUS_HOST_UNREACHABLE                                                   NTStatus      = 0xC000023D\n\tSTATUS_PROTOCOL_UNREACHABLE                                               NTStatus      = 0xC000023E\n\tSTATUS_PORT_UNREACHABLE                                                   NTStatus      = 0xC000023F\n\tSTATUS_REQUEST_ABORTED                                                    NTStatus      = 0xC0000240\n\tSTATUS_CONNECTION_ABORTED                                                 NTStatus      = 0xC0000241\n\tSTATUS_BAD_COMPRESSION_BUFFER                                             NTStatus      = 0xC0000242\n\tSTATUS_USER_MAPPED_FILE                                                   NTStatus      = 0xC0000243\n\tSTATUS_AUDIT_FAILED                                                       NTStatus      = 0xC0000244\n\tSTATUS_TIMER_RESOLUTION_NOT_SET                                           NTStatus      = 0xC0000245\n\tSTATUS_CONNECTION_COUNT_LIMIT                                             NTStatus      = 0xC0000246\n\tSTATUS_LOGIN_TIME_RESTRICTION                                             NTStatus      = 0xC0000247\n\tSTATUS_LOGIN_WKSTA_RESTRICTION                                            NTStatus      = 0xC0000248\n\tSTATUS_IMAGE_MP_UP_MISMATCH                                               NTStatus      = 0xC0000249\n\tSTATUS_INSUFFICIENT_LOGON_INFO                                            NTStatus      = 0xC0000250\n\tSTATUS_BAD_DLL_ENTRYPOINT                                                 NTStatus      = 0xC0000251\n\tSTATUS_BAD_SERVICE_ENTRYPOINT                                             NTStatus      = 0xC0000252\n\tSTATUS_LPC_REPLY_LOST                                                     NTStatus      = 0xC0000253\n\tSTATUS_IP_ADDRESS_CONFLICT1                                               NTStatus      = 0xC0000254\n\tSTATUS_IP_ADDRESS_CONFLICT2                                               NTStatus      = 0xC0000255\n\tSTATUS_REGISTRY_QUOTA_LIMIT                                               NTStatus      = 0xC0000256\n\tSTATUS_PATH_NOT_COVERED                                                   NTStatus      = 0xC0000257\n\tSTATUS_NO_CALLBACK_ACTIVE                                                 NTStatus      = 0xC0000258\n\tSTATUS_LICENSE_QUOTA_EXCEEDED                                             NTStatus      = 0xC0000259\n\tSTATUS_PWD_TOO_SHORT                                                      NTStatus      = 0xC000025A\n\tSTATUS_PWD_TOO_RECENT                                                     NTStatus      = 0xC000025B\n\tSTATUS_PWD_HISTORY_CONFLICT                                               NTStatus      = 0xC000025C\n\tSTATUS_PLUGPLAY_NO_DEVICE                                                 NTStatus      = 0xC000025E\n\tSTATUS_UNSUPPORTED_COMPRESSION                                            NTStatus      = 0xC000025F\n\tSTATUS_INVALID_HW_PROFILE                                                 NTStatus      = 0xC0000260\n\tSTATUS_INVALID_PLUGPLAY_DEVICE_PATH                                       NTStatus      = 0xC0000261\n\tSTATUS_DRIVER_ORDINAL_NOT_FOUND                                           NTStatus      = 0xC0000262\n\tSTATUS_DRIVER_ENTRYPOINT_NOT_FOUND                                        NTStatus      = 0xC0000263\n\tSTATUS_RESOURCE_NOT_OWNED                                                 NTStatus      = 0xC0000264\n\tSTATUS_TOO_MANY_LINKS                                                     NTStatus      = 0xC0000265\n\tSTATUS_QUOTA_LIST_INCONSISTENT                                            NTStatus      = 0xC0000266\n\tSTATUS_FILE_IS_OFFLINE                                                    NTStatus      = 0xC0000267\n\tSTATUS_EVALUATION_EXPIRATION                                              NTStatus      = 0xC0000268\n\tSTATUS_ILLEGAL_DLL_RELOCATION                                             NTStatus      = 0xC0000269\n\tSTATUS_LICENSE_VIOLATION                                                  NTStatus      = 0xC000026A\n\tSTATUS_DLL_INIT_FAILED_LOGOFF                                             NTStatus      = 0xC000026B\n\tSTATUS_DRIVER_UNABLE_TO_LOAD                                              NTStatus      = 0xC000026C\n\tSTATUS_DFS_UNAVAILABLE                                                    NTStatus      = 0xC000026D\n\tSTATUS_VOLUME_DISMOUNTED                                                  NTStatus      = 0xC000026E\n\tSTATUS_WX86_INTERNAL_ERROR                                                NTStatus      = 0xC000026F\n\tSTATUS_WX86_FLOAT_STACK_CHECK                                             NTStatus      = 0xC0000270\n\tSTATUS_VALIDATE_CONTINUE                                                  NTStatus      = 0xC0000271\n\tSTATUS_NO_MATCH                                                           NTStatus      = 0xC0000272\n\tSTATUS_NO_MORE_MATCHES                                                    NTStatus      = 0xC0000273\n\tSTATUS_NOT_A_REPARSE_POINT                                                NTStatus      = 0xC0000275\n\tSTATUS_IO_REPARSE_TAG_INVALID                                             NTStatus      = 0xC0000276\n\tSTATUS_IO_REPARSE_TAG_MISMATCH                                            NTStatus      = 0xC0000277\n\tSTATUS_IO_REPARSE_DATA_INVALID                                            NTStatus      = 0xC0000278\n\tSTATUS_IO_REPARSE_TAG_NOT_HANDLED                                         NTStatus      = 0xC0000279\n\tSTATUS_PWD_TOO_LONG                                                       NTStatus      = 0xC000027A\n\tSTATUS_STOWED_EXCEPTION                                                   NTStatus      = 0xC000027B\n\tSTATUS_CONTEXT_STOWED_EXCEPTION                                           NTStatus      = 0xC000027C\n\tSTATUS_REPARSE_POINT_NOT_RESOLVED                                         NTStatus      = 0xC0000280\n\tSTATUS_DIRECTORY_IS_A_REPARSE_POINT                                       NTStatus      = 0xC0000281\n\tSTATUS_RANGE_LIST_CONFLICT                                                NTStatus      = 0xC0000282\n\tSTATUS_SOURCE_ELEMENT_EMPTY                                               NTStatus      = 0xC0000283\n\tSTATUS_DESTINATION_ELEMENT_FULL                                           NTStatus      = 0xC0000284\n\tSTATUS_ILLEGAL_ELEMENT_ADDRESS                                            NTStatus      = 0xC0000285\n\tSTATUS_MAGAZINE_NOT_PRESENT                                               NTStatus      = 0xC0000286\n\tSTATUS_REINITIALIZATION_NEEDED                                            NTStatus      = 0xC0000287\n\tSTATUS_DEVICE_REQUIRES_CLEANING                                           NTStatus      = 0x80000288\n\tSTATUS_DEVICE_DOOR_OPEN                                                   NTStatus      = 0x80000289\n\tSTATUS_ENCRYPTION_FAILED                                                  NTStatus      = 0xC000028A\n\tSTATUS_DECRYPTION_FAILED                                                  NTStatus      = 0xC000028B\n\tSTATUS_RANGE_NOT_FOUND                                                    NTStatus      = 0xC000028C\n\tSTATUS_NO_RECOVERY_POLICY                                                 NTStatus      = 0xC000028D\n\tSTATUS_NO_EFS                                                             NTStatus      = 0xC000028E\n\tSTATUS_WRONG_EFS                                                          NTStatus      = 0xC000028F\n\tSTATUS_NO_USER_KEYS                                                       NTStatus      = 0xC0000290\n\tSTATUS_FILE_NOT_ENCRYPTED                                                 NTStatus      = 0xC0000291\n\tSTATUS_NOT_EXPORT_FORMAT                                                  NTStatus      = 0xC0000292\n\tSTATUS_FILE_ENCRYPTED                                                     NTStatus      = 0xC0000293\n\tSTATUS_WAKE_SYSTEM                                                        NTStatus      = 0x40000294\n\tSTATUS_WMI_GUID_NOT_FOUND                                                 NTStatus      = 0xC0000295\n\tSTATUS_WMI_INSTANCE_NOT_FOUND                                             NTStatus      = 0xC0000296\n\tSTATUS_WMI_ITEMID_NOT_FOUND                                               NTStatus      = 0xC0000297\n\tSTATUS_WMI_TRY_AGAIN                                                      NTStatus      = 0xC0000298\n\tSTATUS_SHARED_POLICY                                                      NTStatus      = 0xC0000299\n\tSTATUS_POLICY_OBJECT_NOT_FOUND                                            NTStatus      = 0xC000029A\n\tSTATUS_POLICY_ONLY_IN_DS                                                  NTStatus      = 0xC000029B\n\tSTATUS_VOLUME_NOT_UPGRADED                                                NTStatus      = 0xC000029C\n\tSTATUS_REMOTE_STORAGE_NOT_ACTIVE                                          NTStatus      = 0xC000029D\n\tSTATUS_REMOTE_STORAGE_MEDIA_ERROR                                         NTStatus      = 0xC000029E\n\tSTATUS_NO_TRACKING_SERVICE                                                NTStatus      = 0xC000029F\n\tSTATUS_SERVER_SID_MISMATCH                                                NTStatus      = 0xC00002A0\n\tSTATUS_DS_NO_ATTRIBUTE_OR_VALUE                                           NTStatus      = 0xC00002A1\n\tSTATUS_DS_INVALID_ATTRIBUTE_SYNTAX                                        NTStatus      = 0xC00002A2\n\tSTATUS_DS_ATTRIBUTE_TYPE_UNDEFINED                                        NTStatus      = 0xC00002A3\n\tSTATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS                                       NTStatus      = 0xC00002A4\n\tSTATUS_DS_BUSY                                                            NTStatus      = 0xC00002A5\n\tSTATUS_DS_UNAVAILABLE                                                     NTStatus      = 0xC00002A6\n\tSTATUS_DS_NO_RIDS_ALLOCATED                                               NTStatus      = 0xC00002A7\n\tSTATUS_DS_NO_MORE_RIDS                                                    NTStatus      = 0xC00002A8\n\tSTATUS_DS_INCORRECT_ROLE_OWNER                                            NTStatus      = 0xC00002A9\n\tSTATUS_DS_RIDMGR_INIT_ERROR                                               NTStatus      = 0xC00002AA\n\tSTATUS_DS_OBJ_CLASS_VIOLATION                                             NTStatus      = 0xC00002AB\n\tSTATUS_DS_CANT_ON_NON_LEAF                                                NTStatus      = 0xC00002AC\n\tSTATUS_DS_CANT_ON_RDN                                                     NTStatus      = 0xC00002AD\n\tSTATUS_DS_CANT_MOD_OBJ_CLASS                                              NTStatus      = 0xC00002AE\n\tSTATUS_DS_CROSS_DOM_MOVE_FAILED                                           NTStatus      = 0xC00002AF\n\tSTATUS_DS_GC_NOT_AVAILABLE                                                NTStatus      = 0xC00002B0\n\tSTATUS_DIRECTORY_SERVICE_REQUIRED                                         NTStatus      = 0xC00002B1\n\tSTATUS_REPARSE_ATTRIBUTE_CONFLICT                                         NTStatus      = 0xC00002B2\n\tSTATUS_CANT_ENABLE_DENY_ONLY                                              NTStatus      = 0xC00002B3\n\tSTATUS_FLOAT_MULTIPLE_FAULTS                                              NTStatus      = 0xC00002B4\n\tSTATUS_FLOAT_MULTIPLE_TRAPS                                               NTStatus      = 0xC00002B5\n\tSTATUS_DEVICE_REMOVED                                                     NTStatus      = 0xC00002B6\n\tSTATUS_JOURNAL_DELETE_IN_PROGRESS                                         NTStatus      = 0xC00002B7\n\tSTATUS_JOURNAL_NOT_ACTIVE                                                 NTStatus      = 0xC00002B8\n\tSTATUS_NOINTERFACE                                                        NTStatus      = 0xC00002B9\n\tSTATUS_DS_RIDMGR_DISABLED                                                 NTStatus      = 0xC00002BA\n\tSTATUS_DS_ADMIN_LIMIT_EXCEEDED                                            NTStatus      = 0xC00002C1\n\tSTATUS_DRIVER_FAILED_SLEEP                                                NTStatus      = 0xC00002C2\n\tSTATUS_MUTUAL_AUTHENTICATION_FAILED                                       NTStatus      = 0xC00002C3\n\tSTATUS_CORRUPT_SYSTEM_FILE                                                NTStatus      = 0xC00002C4\n\tSTATUS_DATATYPE_MISALIGNMENT_ERROR                                        NTStatus      = 0xC00002C5\n\tSTATUS_WMI_READ_ONLY                                                      NTStatus      = 0xC00002C6\n\tSTATUS_WMI_SET_FAILURE                                                    NTStatus      = 0xC00002C7\n\tSTATUS_COMMITMENT_MINIMUM                                                 NTStatus      = 0xC00002C8\n\tSTATUS_REG_NAT_CONSUMPTION                                                NTStatus      = 0xC00002C9\n\tSTATUS_TRANSPORT_FULL                                                     NTStatus      = 0xC00002CA\n\tSTATUS_DS_SAM_INIT_FAILURE                                                NTStatus      = 0xC00002CB\n\tSTATUS_ONLY_IF_CONNECTED                                                  NTStatus      = 0xC00002CC\n\tSTATUS_DS_SENSITIVE_GROUP_VIOLATION                                       NTStatus      = 0xC00002CD\n\tSTATUS_PNP_RESTART_ENUMERATION                                            NTStatus      = 0xC00002CE\n\tSTATUS_JOURNAL_ENTRY_DELETED                                              NTStatus      = 0xC00002CF\n\tSTATUS_DS_CANT_MOD_PRIMARYGROUPID                                         NTStatus      = 0xC00002D0\n\tSTATUS_SYSTEM_IMAGE_BAD_SIGNATURE                                         NTStatus      = 0xC00002D1\n\tSTATUS_PNP_REBOOT_REQUIRED                                                NTStatus      = 0xC00002D2\n\tSTATUS_POWER_STATE_INVALID                                                NTStatus      = 0xC00002D3\n\tSTATUS_DS_INVALID_GROUP_TYPE                                              NTStatus      = 0xC00002D4\n\tSTATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN                              NTStatus      = 0xC00002D5\n\tSTATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN                               NTStatus      = 0xC00002D6\n\tSTATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER                                   NTStatus      = 0xC00002D7\n\tSTATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER                               NTStatus      = 0xC00002D8\n\tSTATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER                                NTStatus      = 0xC00002D9\n\tSTATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER                             NTStatus      = 0xC00002DA\n\tSTATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER                        NTStatus      = 0xC00002DB\n\tSTATUS_DS_HAVE_PRIMARY_MEMBERS                                            NTStatus      = 0xC00002DC\n\tSTATUS_WMI_NOT_SUPPORTED                                                  NTStatus      = 0xC00002DD\n\tSTATUS_INSUFFICIENT_POWER                                                 NTStatus      = 0xC00002DE\n\tSTATUS_SAM_NEED_BOOTKEY_PASSWORD                                          NTStatus      = 0xC00002DF\n\tSTATUS_SAM_NEED_BOOTKEY_FLOPPY                                            NTStatus      = 0xC00002E0\n\tSTATUS_DS_CANT_START                                                      NTStatus      = 0xC00002E1\n\tSTATUS_DS_INIT_FAILURE                                                    NTStatus      = 0xC00002E2\n\tSTATUS_SAM_INIT_FAILURE                                                   NTStatus      = 0xC00002E3\n\tSTATUS_DS_GC_REQUIRED                                                     NTStatus      = 0xC00002E4\n\tSTATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY                                      NTStatus      = 0xC00002E5\n\tSTATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS                                      NTStatus      = 0xC00002E6\n\tSTATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED                                  NTStatus      = 0xC00002E7\n\tSTATUS_MULTIPLE_FAULT_VIOLATION                                           NTStatus      = 0xC00002E8\n\tSTATUS_CURRENT_DOMAIN_NOT_ALLOWED                                         NTStatus      = 0xC00002E9\n\tSTATUS_CANNOT_MAKE                                                        NTStatus      = 0xC00002EA\n\tSTATUS_SYSTEM_SHUTDOWN                                                    NTStatus      = 0xC00002EB\n\tSTATUS_DS_INIT_FAILURE_CONSOLE                                            NTStatus      = 0xC00002EC\n\tSTATUS_DS_SAM_INIT_FAILURE_CONSOLE                                        NTStatus      = 0xC00002ED\n\tSTATUS_UNFINISHED_CONTEXT_DELETED                                         NTStatus      = 0xC00002EE\n\tSTATUS_NO_TGT_REPLY                                                       NTStatus      = 0xC00002EF\n\tSTATUS_OBJECTID_NOT_FOUND                                                 NTStatus      = 0xC00002F0\n\tSTATUS_NO_IP_ADDRESSES                                                    NTStatus      = 0xC00002F1\n\tSTATUS_WRONG_CREDENTIAL_HANDLE                                            NTStatus      = 0xC00002F2\n\tSTATUS_CRYPTO_SYSTEM_INVALID                                              NTStatus      = 0xC00002F3\n\tSTATUS_MAX_REFERRALS_EXCEEDED                                             NTStatus      = 0xC00002F4\n\tSTATUS_MUST_BE_KDC                                                        NTStatus      = 0xC00002F5\n\tSTATUS_STRONG_CRYPTO_NOT_SUPPORTED                                        NTStatus      = 0xC00002F6\n\tSTATUS_TOO_MANY_PRINCIPALS                                                NTStatus      = 0xC00002F7\n\tSTATUS_NO_PA_DATA                                                         NTStatus      = 0xC00002F8\n\tSTATUS_PKINIT_NAME_MISMATCH                                               NTStatus      = 0xC00002F9\n\tSTATUS_SMARTCARD_LOGON_REQUIRED                                           NTStatus      = 0xC00002FA\n\tSTATUS_KDC_INVALID_REQUEST                                                NTStatus      = 0xC00002FB\n\tSTATUS_KDC_UNABLE_TO_REFER                                                NTStatus      = 0xC00002FC\n\tSTATUS_KDC_UNKNOWN_ETYPE                                                  NTStatus      = 0xC00002FD\n\tSTATUS_SHUTDOWN_IN_PROGRESS                                               NTStatus      = 0xC00002FE\n\tSTATUS_SERVER_SHUTDOWN_IN_PROGRESS                                        NTStatus      = 0xC00002FF\n\tSTATUS_NOT_SUPPORTED_ON_SBS                                               NTStatus      = 0xC0000300\n\tSTATUS_WMI_GUID_DISCONNECTED                                              NTStatus      = 0xC0000301\n\tSTATUS_WMI_ALREADY_DISABLED                                               NTStatus      = 0xC0000302\n\tSTATUS_WMI_ALREADY_ENABLED                                                NTStatus      = 0xC0000303\n\tSTATUS_MFT_TOO_FRAGMENTED                                                 NTStatus      = 0xC0000304\n\tSTATUS_COPY_PROTECTION_FAILURE                                            NTStatus      = 0xC0000305\n\tSTATUS_CSS_AUTHENTICATION_FAILURE                                         NTStatus      = 0xC0000306\n\tSTATUS_CSS_KEY_NOT_PRESENT                                                NTStatus      = 0xC0000307\n\tSTATUS_CSS_KEY_NOT_ESTABLISHED                                            NTStatus      = 0xC0000308\n\tSTATUS_CSS_SCRAMBLED_SECTOR                                               NTStatus      = 0xC0000309\n\tSTATUS_CSS_REGION_MISMATCH                                                NTStatus      = 0xC000030A\n\tSTATUS_CSS_RESETS_EXHAUSTED                                               NTStatus      = 0xC000030B\n\tSTATUS_PASSWORD_CHANGE_REQUIRED                                           NTStatus      = 0xC000030C\n\tSTATUS_LOST_MODE_LOGON_RESTRICTION                                        NTStatus      = 0xC000030D\n\tSTATUS_PKINIT_FAILURE                                                     NTStatus      = 0xC0000320\n\tSTATUS_SMARTCARD_SUBSYSTEM_FAILURE                                        NTStatus      = 0xC0000321\n\tSTATUS_NO_KERB_KEY                                                        NTStatus      = 0xC0000322\n\tSTATUS_HOST_DOWN                                                          NTStatus      = 0xC0000350\n\tSTATUS_UNSUPPORTED_PREAUTH                                                NTStatus      = 0xC0000351\n\tSTATUS_EFS_ALG_BLOB_TOO_BIG                                               NTStatus      = 0xC0000352\n\tSTATUS_PORT_NOT_SET                                                       NTStatus      = 0xC0000353\n\tSTATUS_DEBUGGER_INACTIVE                                                  NTStatus      = 0xC0000354\n\tSTATUS_DS_VERSION_CHECK_FAILURE                                           NTStatus      = 0xC0000355\n\tSTATUS_AUDITING_DISABLED                                                  NTStatus      = 0xC0000356\n\tSTATUS_PRENT4_MACHINE_ACCOUNT                                             NTStatus      = 0xC0000357\n\tSTATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER                                   NTStatus      = 0xC0000358\n\tSTATUS_INVALID_IMAGE_WIN_32                                               NTStatus      = 0xC0000359\n\tSTATUS_INVALID_IMAGE_WIN_64                                               NTStatus      = 0xC000035A\n\tSTATUS_BAD_BINDINGS                                                       NTStatus      = 0xC000035B\n\tSTATUS_NETWORK_SESSION_EXPIRED                                            NTStatus      = 0xC000035C\n\tSTATUS_APPHELP_BLOCK                                                      NTStatus      = 0xC000035D\n\tSTATUS_ALL_SIDS_FILTERED                                                  NTStatus      = 0xC000035E\n\tSTATUS_NOT_SAFE_MODE_DRIVER                                               NTStatus      = 0xC000035F\n\tSTATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT                                  NTStatus      = 0xC0000361\n\tSTATUS_ACCESS_DISABLED_BY_POLICY_PATH                                     NTStatus      = 0xC0000362\n\tSTATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER                                NTStatus      = 0xC0000363\n\tSTATUS_ACCESS_DISABLED_BY_POLICY_OTHER                                    NTStatus      = 0xC0000364\n\tSTATUS_FAILED_DRIVER_ENTRY                                                NTStatus      = 0xC0000365\n\tSTATUS_DEVICE_ENUMERATION_ERROR                                           NTStatus      = 0xC0000366\n\tSTATUS_MOUNT_POINT_NOT_RESOLVED                                           NTStatus      = 0xC0000368\n\tSTATUS_INVALID_DEVICE_OBJECT_PARAMETER                                    NTStatus      = 0xC0000369\n\tSTATUS_MCA_OCCURED                                                        NTStatus      = 0xC000036A\n\tSTATUS_DRIVER_BLOCKED_CRITICAL                                            NTStatus      = 0xC000036B\n\tSTATUS_DRIVER_BLOCKED                                                     NTStatus      = 0xC000036C\n\tSTATUS_DRIVER_DATABASE_ERROR                                              NTStatus      = 0xC000036D\n\tSTATUS_SYSTEM_HIVE_TOO_LARGE                                              NTStatus      = 0xC000036E\n\tSTATUS_INVALID_IMPORT_OF_NON_DLL                                          NTStatus      = 0xC000036F\n\tSTATUS_DS_SHUTTING_DOWN                                                   NTStatus      = 0x40000370\n\tSTATUS_NO_SECRETS                                                         NTStatus      = 0xC0000371\n\tSTATUS_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY                              NTStatus      = 0xC0000372\n\tSTATUS_FAILED_STACK_SWITCH                                                NTStatus      = 0xC0000373\n\tSTATUS_HEAP_CORRUPTION                                                    NTStatus      = 0xC0000374\n\tSTATUS_SMARTCARD_WRONG_PIN                                                NTStatus      = 0xC0000380\n\tSTATUS_SMARTCARD_CARD_BLOCKED                                             NTStatus      = 0xC0000381\n\tSTATUS_SMARTCARD_CARD_NOT_AUTHENTICATED                                   NTStatus      = 0xC0000382\n\tSTATUS_SMARTCARD_NO_CARD                                                  NTStatus      = 0xC0000383\n\tSTATUS_SMARTCARD_NO_KEY_CONTAINER                                         NTStatus      = 0xC0000384\n\tSTATUS_SMARTCARD_NO_CERTIFICATE                                           NTStatus      = 0xC0000385\n\tSTATUS_SMARTCARD_NO_KEYSET                                                NTStatus      = 0xC0000386\n\tSTATUS_SMARTCARD_IO_ERROR                                                 NTStatus      = 0xC0000387\n\tSTATUS_DOWNGRADE_DETECTED                                                 NTStatus      = 0xC0000388\n\tSTATUS_SMARTCARD_CERT_REVOKED                                             NTStatus      = 0xC0000389\n\tSTATUS_ISSUING_CA_UNTRUSTED                                               NTStatus      = 0xC000038A\n\tSTATUS_REVOCATION_OFFLINE_C                                               NTStatus      = 0xC000038B\n\tSTATUS_PKINIT_CLIENT_FAILURE                                              NTStatus      = 0xC000038C\n\tSTATUS_SMARTCARD_CERT_EXPIRED                                             NTStatus      = 0xC000038D\n\tSTATUS_DRIVER_FAILED_PRIOR_UNLOAD                                         NTStatus      = 0xC000038E\n\tSTATUS_SMARTCARD_SILENT_CONTEXT                                           NTStatus      = 0xC000038F\n\tSTATUS_PER_USER_TRUST_QUOTA_EXCEEDED                                      NTStatus      = 0xC0000401\n\tSTATUS_ALL_USER_TRUST_QUOTA_EXCEEDED                                      NTStatus      = 0xC0000402\n\tSTATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED                                   NTStatus      = 0xC0000403\n\tSTATUS_DS_NAME_NOT_UNIQUE                                                 NTStatus      = 0xC0000404\n\tSTATUS_DS_DUPLICATE_ID_FOUND                                              NTStatus      = 0xC0000405\n\tSTATUS_DS_GROUP_CONVERSION_ERROR                                          NTStatus      = 0xC0000406\n\tSTATUS_VOLSNAP_PREPARE_HIBERNATE                                          NTStatus      = 0xC0000407\n\tSTATUS_USER2USER_REQUIRED                                                 NTStatus      = 0xC0000408\n\tSTATUS_STACK_BUFFER_OVERRUN                                               NTStatus      = 0xC0000409\n\tSTATUS_NO_S4U_PROT_SUPPORT                                                NTStatus      = 0xC000040A\n\tSTATUS_CROSSREALM_DELEGATION_FAILURE                                      NTStatus      = 0xC000040B\n\tSTATUS_REVOCATION_OFFLINE_KDC                                             NTStatus      = 0xC000040C\n\tSTATUS_ISSUING_CA_UNTRUSTED_KDC                                           NTStatus      = 0xC000040D\n\tSTATUS_KDC_CERT_EXPIRED                                                   NTStatus      = 0xC000040E\n\tSTATUS_KDC_CERT_REVOKED                                                   NTStatus      = 0xC000040F\n\tSTATUS_PARAMETER_QUOTA_EXCEEDED                                           NTStatus      = 0xC0000410\n\tSTATUS_HIBERNATION_FAILURE                                                NTStatus      = 0xC0000411\n\tSTATUS_DELAY_LOAD_FAILED                                                  NTStatus      = 0xC0000412\n\tSTATUS_AUTHENTICATION_FIREWALL_FAILED                                     NTStatus      = 0xC0000413\n\tSTATUS_VDM_DISALLOWED                                                     NTStatus      = 0xC0000414\n\tSTATUS_HUNG_DISPLAY_DRIVER_THREAD                                         NTStatus      = 0xC0000415\n\tSTATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE            NTStatus      = 0xC0000416\n\tSTATUS_INVALID_CRUNTIME_PARAMETER                                         NTStatus      = 0xC0000417\n\tSTATUS_NTLM_BLOCKED                                                       NTStatus      = 0xC0000418\n\tSTATUS_DS_SRC_SID_EXISTS_IN_FOREST                                        NTStatus      = 0xC0000419\n\tSTATUS_DS_DOMAIN_NAME_EXISTS_IN_FOREST                                    NTStatus      = 0xC000041A\n\tSTATUS_DS_FLAT_NAME_EXISTS_IN_FOREST                                      NTStatus      = 0xC000041B\n\tSTATUS_INVALID_USER_PRINCIPAL_NAME                                        NTStatus      = 0xC000041C\n\tSTATUS_FATAL_USER_CALLBACK_EXCEPTION                                      NTStatus      = 0xC000041D\n\tSTATUS_ASSERTION_FAILURE                                                  NTStatus      = 0xC0000420\n\tSTATUS_VERIFIER_STOP                                                      NTStatus      = 0xC0000421\n\tSTATUS_CALLBACK_POP_STACK                                                 NTStatus      = 0xC0000423\n\tSTATUS_INCOMPATIBLE_DRIVER_BLOCKED                                        NTStatus      = 0xC0000424\n\tSTATUS_HIVE_UNLOADED                                                      NTStatus      = 0xC0000425\n\tSTATUS_COMPRESSION_DISABLED                                               NTStatus      = 0xC0000426\n\tSTATUS_FILE_SYSTEM_LIMITATION                                             NTStatus      = 0xC0000427\n\tSTATUS_INVALID_IMAGE_HASH                                                 NTStatus      = 0xC0000428\n\tSTATUS_NOT_CAPABLE                                                        NTStatus      = 0xC0000429\n\tSTATUS_REQUEST_OUT_OF_SEQUENCE                                            NTStatus      = 0xC000042A\n\tSTATUS_IMPLEMENTATION_LIMIT                                               NTStatus      = 0xC000042B\n\tSTATUS_ELEVATION_REQUIRED                                                 NTStatus      = 0xC000042C\n\tSTATUS_NO_SECURITY_CONTEXT                                                NTStatus      = 0xC000042D\n\tSTATUS_PKU2U_CERT_FAILURE                                                 NTStatus      = 0xC000042F\n\tSTATUS_BEYOND_VDL                                                         NTStatus      = 0xC0000432\n\tSTATUS_ENCOUNTERED_WRITE_IN_PROGRESS                                      NTStatus      = 0xC0000433\n\tSTATUS_PTE_CHANGED                                                        NTStatus      = 0xC0000434\n\tSTATUS_PURGE_FAILED                                                       NTStatus      = 0xC0000435\n\tSTATUS_CRED_REQUIRES_CONFIRMATION                                         NTStatus      = 0xC0000440\n\tSTATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE                              NTStatus      = 0xC0000441\n\tSTATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER                                   NTStatus      = 0xC0000442\n\tSTATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE                              NTStatus      = 0xC0000443\n\tSTATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE                                   NTStatus      = 0xC0000444\n\tSTATUS_CS_ENCRYPTION_FILE_NOT_CSE                                         NTStatus      = 0xC0000445\n\tSTATUS_INVALID_LABEL                                                      NTStatus      = 0xC0000446\n\tSTATUS_DRIVER_PROCESS_TERMINATED                                          NTStatus      = 0xC0000450\n\tSTATUS_AMBIGUOUS_SYSTEM_DEVICE                                            NTStatus      = 0xC0000451\n\tSTATUS_SYSTEM_DEVICE_NOT_FOUND                                            NTStatus      = 0xC0000452\n\tSTATUS_RESTART_BOOT_APPLICATION                                           NTStatus      = 0xC0000453\n\tSTATUS_INSUFFICIENT_NVRAM_RESOURCES                                       NTStatus      = 0xC0000454\n\tSTATUS_INVALID_SESSION                                                    NTStatus      = 0xC0000455\n\tSTATUS_THREAD_ALREADY_IN_SESSION                                          NTStatus      = 0xC0000456\n\tSTATUS_THREAD_NOT_IN_SESSION                                              NTStatus      = 0xC0000457\n\tSTATUS_INVALID_WEIGHT                                                     NTStatus      = 0xC0000458\n\tSTATUS_REQUEST_PAUSED                                                     NTStatus      = 0xC0000459\n\tSTATUS_NO_RANGES_PROCESSED                                                NTStatus      = 0xC0000460\n\tSTATUS_DISK_RESOURCES_EXHAUSTED                                           NTStatus      = 0xC0000461\n\tSTATUS_NEEDS_REMEDIATION                                                  NTStatus      = 0xC0000462\n\tSTATUS_DEVICE_FEATURE_NOT_SUPPORTED                                       NTStatus      = 0xC0000463\n\tSTATUS_DEVICE_UNREACHABLE                                                 NTStatus      = 0xC0000464\n\tSTATUS_INVALID_TOKEN                                                      NTStatus      = 0xC0000465\n\tSTATUS_SERVER_UNAVAILABLE                                                 NTStatus      = 0xC0000466\n\tSTATUS_FILE_NOT_AVAILABLE                                                 NTStatus      = 0xC0000467\n\tSTATUS_DEVICE_INSUFFICIENT_RESOURCES                                      NTStatus      = 0xC0000468\n\tSTATUS_PACKAGE_UPDATING                                                   NTStatus      = 0xC0000469\n\tSTATUS_NOT_READ_FROM_COPY                                                 NTStatus      = 0xC000046A\n\tSTATUS_FT_WRITE_FAILURE                                                   NTStatus      = 0xC000046B\n\tSTATUS_FT_DI_SCAN_REQUIRED                                                NTStatus      = 0xC000046C\n\tSTATUS_OBJECT_NOT_EXTERNALLY_BACKED                                       NTStatus      = 0xC000046D\n\tSTATUS_EXTERNAL_BACKING_PROVIDER_UNKNOWN                                  NTStatus      = 0xC000046E\n\tSTATUS_COMPRESSION_NOT_BENEFICIAL                                         NTStatus      = 0xC000046F\n\tSTATUS_DATA_CHECKSUM_ERROR                                                NTStatus      = 0xC0000470\n\tSTATUS_INTERMIXED_KERNEL_EA_OPERATION                                     NTStatus      = 0xC0000471\n\tSTATUS_TRIM_READ_ZERO_NOT_SUPPORTED                                       NTStatus      = 0xC0000472\n\tSTATUS_TOO_MANY_SEGMENT_DESCRIPTORS                                       NTStatus      = 0xC0000473\n\tSTATUS_INVALID_OFFSET_ALIGNMENT                                           NTStatus      = 0xC0000474\n\tSTATUS_INVALID_FIELD_IN_PARAMETER_LIST                                    NTStatus      = 0xC0000475\n\tSTATUS_OPERATION_IN_PROGRESS                                              NTStatus      = 0xC0000476\n\tSTATUS_INVALID_INITIATOR_TARGET_PATH                                      NTStatus      = 0xC0000477\n\tSTATUS_SCRUB_DATA_DISABLED                                                NTStatus      = 0xC0000478\n\tSTATUS_NOT_REDUNDANT_STORAGE                                              NTStatus      = 0xC0000479\n\tSTATUS_RESIDENT_FILE_NOT_SUPPORTED                                        NTStatus      = 0xC000047A\n\tSTATUS_COMPRESSED_FILE_NOT_SUPPORTED                                      NTStatus      = 0xC000047B\n\tSTATUS_DIRECTORY_NOT_SUPPORTED                                            NTStatus      = 0xC000047C\n\tSTATUS_IO_OPERATION_TIMEOUT                                               NTStatus      = 0xC000047D\n\tSTATUS_SYSTEM_NEEDS_REMEDIATION                                           NTStatus      = 0xC000047E\n\tSTATUS_APPX_INTEGRITY_FAILURE_CLR_NGEN                                    NTStatus      = 0xC000047F\n\tSTATUS_SHARE_UNAVAILABLE                                                  NTStatus      = 0xC0000480\n\tSTATUS_APISET_NOT_HOSTED                                                  NTStatus      = 0xC0000481\n\tSTATUS_APISET_NOT_PRESENT                                                 NTStatus      = 0xC0000482\n\tSTATUS_DEVICE_HARDWARE_ERROR                                              NTStatus      = 0xC0000483\n\tSTATUS_FIRMWARE_SLOT_INVALID                                              NTStatus      = 0xC0000484\n\tSTATUS_FIRMWARE_IMAGE_INVALID                                             NTStatus      = 0xC0000485\n\tSTATUS_STORAGE_TOPOLOGY_ID_MISMATCH                                       NTStatus      = 0xC0000486\n\tSTATUS_WIM_NOT_BOOTABLE                                                   NTStatus      = 0xC0000487\n\tSTATUS_BLOCKED_BY_PARENTAL_CONTROLS                                       NTStatus      = 0xC0000488\n\tSTATUS_NEEDS_REGISTRATION                                                 NTStatus      = 0xC0000489\n\tSTATUS_QUOTA_ACTIVITY                                                     NTStatus      = 0xC000048A\n\tSTATUS_CALLBACK_INVOKE_INLINE                                             NTStatus      = 0xC000048B\n\tSTATUS_BLOCK_TOO_MANY_REFERENCES                                          NTStatus      = 0xC000048C\n\tSTATUS_MARKED_TO_DISALLOW_WRITES                                          NTStatus      = 0xC000048D\n\tSTATUS_NETWORK_ACCESS_DENIED_EDP                                          NTStatus      = 0xC000048E\n\tSTATUS_ENCLAVE_FAILURE                                                    NTStatus      = 0xC000048F\n\tSTATUS_PNP_NO_COMPAT_DRIVERS                                              NTStatus      = 0xC0000490\n\tSTATUS_PNP_DRIVER_PACKAGE_NOT_FOUND                                       NTStatus      = 0xC0000491\n\tSTATUS_PNP_DRIVER_CONFIGURATION_NOT_FOUND                                 NTStatus      = 0xC0000492\n\tSTATUS_PNP_DRIVER_CONFIGURATION_INCOMPLETE                                NTStatus      = 0xC0000493\n\tSTATUS_PNP_FUNCTION_DRIVER_REQUIRED                                       NTStatus      = 0xC0000494\n\tSTATUS_PNP_DEVICE_CONFIGURATION_PENDING                                   NTStatus      = 0xC0000495\n\tSTATUS_DEVICE_HINT_NAME_BUFFER_TOO_SMALL                                  NTStatus      = 0xC0000496\n\tSTATUS_PACKAGE_NOT_AVAILABLE                                              NTStatus      = 0xC0000497\n\tSTATUS_DEVICE_IN_MAINTENANCE                                              NTStatus      = 0xC0000499\n\tSTATUS_NOT_SUPPORTED_ON_DAX                                               NTStatus      = 0xC000049A\n\tSTATUS_FREE_SPACE_TOO_FRAGMENTED                                          NTStatus      = 0xC000049B\n\tSTATUS_DAX_MAPPING_EXISTS                                                 NTStatus      = 0xC000049C\n\tSTATUS_CHILD_PROCESS_BLOCKED                                              NTStatus      = 0xC000049D\n\tSTATUS_STORAGE_LOST_DATA_PERSISTENCE                                      NTStatus      = 0xC000049E\n\tSTATUS_VRF_CFG_ENABLED                                                    NTStatus      = 0xC000049F\n\tSTATUS_PARTITION_TERMINATING                                              NTStatus      = 0xC00004A0\n\tSTATUS_EXTERNAL_SYSKEY_NOT_SUPPORTED                                      NTStatus      = 0xC00004A1\n\tSTATUS_ENCLAVE_VIOLATION                                                  NTStatus      = 0xC00004A2\n\tSTATUS_FILE_PROTECTED_UNDER_DPL                                           NTStatus      = 0xC00004A3\n\tSTATUS_VOLUME_NOT_CLUSTER_ALIGNED                                         NTStatus      = 0xC00004A4\n\tSTATUS_NO_PHYSICALLY_ALIGNED_FREE_SPACE_FOUND                             NTStatus      = 0xC00004A5\n\tSTATUS_APPX_FILE_NOT_ENCRYPTED                                            NTStatus      = 0xC00004A6\n\tSTATUS_RWRAW_ENCRYPTED_FILE_NOT_ENCRYPTED                                 NTStatus      = 0xC00004A7\n\tSTATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILEOFFSET                       NTStatus      = 0xC00004A8\n\tSTATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILERANGE                        NTStatus      = 0xC00004A9\n\tSTATUS_RWRAW_ENCRYPTED_INVALID_EDATAINFO_PARAMETER                        NTStatus      = 0xC00004AA\n\tSTATUS_FT_READ_FAILURE                                                    NTStatus      = 0xC00004AB\n\tSTATUS_PATCH_CONFLICT                                                     NTStatus      = 0xC00004AC\n\tSTATUS_STORAGE_RESERVE_ID_INVALID                                         NTStatus      = 0xC00004AD\n\tSTATUS_STORAGE_RESERVE_DOES_NOT_EXIST                                     NTStatus      = 0xC00004AE\n\tSTATUS_STORAGE_RESERVE_ALREADY_EXISTS                                     NTStatus      = 0xC00004AF\n\tSTATUS_STORAGE_RESERVE_NOT_EMPTY                                          NTStatus      = 0xC00004B0\n\tSTATUS_NOT_A_DAX_VOLUME                                                   NTStatus      = 0xC00004B1\n\tSTATUS_NOT_DAX_MAPPABLE                                                   NTStatus      = 0xC00004B2\n\tSTATUS_CASE_DIFFERING_NAMES_IN_DIR                                        NTStatus      = 0xC00004B3\n\tSTATUS_FILE_NOT_SUPPORTED                                                 NTStatus      = 0xC00004B4\n\tSTATUS_NOT_SUPPORTED_WITH_BTT                                             NTStatus      = 0xC00004B5\n\tSTATUS_ENCRYPTION_DISABLED                                                NTStatus      = 0xC00004B6\n\tSTATUS_ENCRYPTING_METADATA_DISALLOWED                                     NTStatus      = 0xC00004B7\n\tSTATUS_CANT_CLEAR_ENCRYPTION_FLAG                                         NTStatus      = 0xC00004B8\n\tSTATUS_INVALID_TASK_NAME                                                  NTStatus      = 0xC0000500\n\tSTATUS_INVALID_TASK_INDEX                                                 NTStatus      = 0xC0000501\n\tSTATUS_THREAD_ALREADY_IN_TASK                                             NTStatus      = 0xC0000502\n\tSTATUS_CALLBACK_BYPASS                                                    NTStatus      = 0xC0000503\n\tSTATUS_UNDEFINED_SCOPE                                                    NTStatus      = 0xC0000504\n\tSTATUS_INVALID_CAP                                                        NTStatus      = 0xC0000505\n\tSTATUS_NOT_GUI_PROCESS                                                    NTStatus      = 0xC0000506\n\tSTATUS_DEVICE_HUNG                                                        NTStatus      = 0xC0000507\n\tSTATUS_CONTAINER_ASSIGNED                                                 NTStatus      = 0xC0000508\n\tSTATUS_JOB_NO_CONTAINER                                                   NTStatus      = 0xC0000509\n\tSTATUS_DEVICE_UNRESPONSIVE                                                NTStatus      = 0xC000050A\n\tSTATUS_REPARSE_POINT_ENCOUNTERED                                          NTStatus      = 0xC000050B\n\tSTATUS_ATTRIBUTE_NOT_PRESENT                                              NTStatus      = 0xC000050C\n\tSTATUS_NOT_A_TIERED_VOLUME                                                NTStatus      = 0xC000050D\n\tSTATUS_ALREADY_HAS_STREAM_ID                                              NTStatus      = 0xC000050E\n\tSTATUS_JOB_NOT_EMPTY                                                      NTStatus      = 0xC000050F\n\tSTATUS_ALREADY_INITIALIZED                                                NTStatus      = 0xC0000510\n\tSTATUS_ENCLAVE_NOT_TERMINATED                                             NTStatus      = 0xC0000511\n\tSTATUS_ENCLAVE_IS_TERMINATING                                             NTStatus      = 0xC0000512\n\tSTATUS_SMB1_NOT_AVAILABLE                                                 NTStatus      = 0xC0000513\n\tSTATUS_SMR_GARBAGE_COLLECTION_REQUIRED                                    NTStatus      = 0xC0000514\n\tSTATUS_INTERRUPTED                                                        NTStatus      = 0xC0000515\n\tSTATUS_THREAD_NOT_RUNNING                                                 NTStatus      = 0xC0000516\n\tSTATUS_FAIL_FAST_EXCEPTION                                                NTStatus      = 0xC0000602\n\tSTATUS_IMAGE_CERT_REVOKED                                                 NTStatus      = 0xC0000603\n\tSTATUS_DYNAMIC_CODE_BLOCKED                                               NTStatus      = 0xC0000604\n\tSTATUS_IMAGE_CERT_EXPIRED                                                 NTStatus      = 0xC0000605\n\tSTATUS_STRICT_CFG_VIOLATION                                               NTStatus      = 0xC0000606\n\tSTATUS_SET_CONTEXT_DENIED                                                 NTStatus      = 0xC000060A\n\tSTATUS_CROSS_PARTITION_VIOLATION                                          NTStatus      = 0xC000060B\n\tSTATUS_PORT_CLOSED                                                        NTStatus      = 0xC0000700\n\tSTATUS_MESSAGE_LOST                                                       NTStatus      = 0xC0000701\n\tSTATUS_INVALID_MESSAGE                                                    NTStatus      = 0xC0000702\n\tSTATUS_REQUEST_CANCELED                                                   NTStatus      = 0xC0000703\n\tSTATUS_RECURSIVE_DISPATCH                                                 NTStatus      = 0xC0000704\n\tSTATUS_LPC_RECEIVE_BUFFER_EXPECTED                                        NTStatus      = 0xC0000705\n\tSTATUS_LPC_INVALID_CONNECTION_USAGE                                       NTStatus      = 0xC0000706\n\tSTATUS_LPC_REQUESTS_NOT_ALLOWED                                           NTStatus      = 0xC0000707\n\tSTATUS_RESOURCE_IN_USE                                                    NTStatus      = 0xC0000708\n\tSTATUS_HARDWARE_MEMORY_ERROR                                              NTStatus      = 0xC0000709\n\tSTATUS_THREADPOOL_HANDLE_EXCEPTION                                        NTStatus      = 0xC000070A\n\tSTATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED                          NTStatus      = 0xC000070B\n\tSTATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED                  NTStatus      = 0xC000070C\n\tSTATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED                      NTStatus      = 0xC000070D\n\tSTATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED                       NTStatus      = 0xC000070E\n\tSTATUS_THREADPOOL_RELEASED_DURING_OPERATION                               NTStatus      = 0xC000070F\n\tSTATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING                              NTStatus      = 0xC0000710\n\tSTATUS_APC_RETURNED_WHILE_IMPERSONATING                                   NTStatus      = 0xC0000711\n\tSTATUS_PROCESS_IS_PROTECTED                                               NTStatus      = 0xC0000712\n\tSTATUS_MCA_EXCEPTION                                                      NTStatus      = 0xC0000713\n\tSTATUS_CERTIFICATE_MAPPING_NOT_UNIQUE                                     NTStatus      = 0xC0000714\n\tSTATUS_SYMLINK_CLASS_DISABLED                                             NTStatus      = 0xC0000715\n\tSTATUS_INVALID_IDN_NORMALIZATION                                          NTStatus      = 0xC0000716\n\tSTATUS_NO_UNICODE_TRANSLATION                                             NTStatus      = 0xC0000717\n\tSTATUS_ALREADY_REGISTERED                                                 NTStatus      = 0xC0000718\n\tSTATUS_CONTEXT_MISMATCH                                                   NTStatus      = 0xC0000719\n\tSTATUS_PORT_ALREADY_HAS_COMPLETION_LIST                                   NTStatus      = 0xC000071A\n\tSTATUS_CALLBACK_RETURNED_THREAD_PRIORITY                                  NTStatus      = 0xC000071B\n\tSTATUS_INVALID_THREAD                                                     NTStatus      = 0xC000071C\n\tSTATUS_CALLBACK_RETURNED_TRANSACTION                                      NTStatus      = 0xC000071D\n\tSTATUS_CALLBACK_RETURNED_LDR_LOCK                                         NTStatus      = 0xC000071E\n\tSTATUS_CALLBACK_RETURNED_LANG                                             NTStatus      = 0xC000071F\n\tSTATUS_CALLBACK_RETURNED_PRI_BACK                                         NTStatus      = 0xC0000720\n\tSTATUS_CALLBACK_RETURNED_THREAD_AFFINITY                                  NTStatus      = 0xC0000721\n\tSTATUS_LPC_HANDLE_COUNT_EXCEEDED                                          NTStatus      = 0xC0000722\n\tSTATUS_EXECUTABLE_MEMORY_WRITE                                            NTStatus      = 0xC0000723\n\tSTATUS_KERNEL_EXECUTABLE_MEMORY_WRITE                                     NTStatus      = 0xC0000724\n\tSTATUS_ATTACHED_EXECUTABLE_MEMORY_WRITE                                   NTStatus      = 0xC0000725\n\tSTATUS_TRIGGERED_EXECUTABLE_MEMORY_WRITE                                  NTStatus      = 0xC0000726\n\tSTATUS_DISK_REPAIR_DISABLED                                               NTStatus      = 0xC0000800\n\tSTATUS_DS_DOMAIN_RENAME_IN_PROGRESS                                       NTStatus      = 0xC0000801\n\tSTATUS_DISK_QUOTA_EXCEEDED                                                NTStatus      = 0xC0000802\n\tSTATUS_DATA_LOST_REPAIR                                                   NTStatus      = 0x80000803\n\tSTATUS_CONTENT_BLOCKED                                                    NTStatus      = 0xC0000804\n\tSTATUS_BAD_CLUSTERS                                                       NTStatus      = 0xC0000805\n\tSTATUS_VOLUME_DIRTY                                                       NTStatus      = 0xC0000806\n\tSTATUS_DISK_REPAIR_REDIRECTED                                             NTStatus      = 0x40000807\n\tSTATUS_DISK_REPAIR_UNSUCCESSFUL                                           NTStatus      = 0xC0000808\n\tSTATUS_CORRUPT_LOG_OVERFULL                                               NTStatus      = 0xC0000809\n\tSTATUS_CORRUPT_LOG_CORRUPTED                                              NTStatus      = 0xC000080A\n\tSTATUS_CORRUPT_LOG_UNAVAILABLE                                            NTStatus      = 0xC000080B\n\tSTATUS_CORRUPT_LOG_DELETED_FULL                                           NTStatus      = 0xC000080C\n\tSTATUS_CORRUPT_LOG_CLEARED                                                NTStatus      = 0xC000080D\n\tSTATUS_ORPHAN_NAME_EXHAUSTED                                              NTStatus      = 0xC000080E\n\tSTATUS_PROACTIVE_SCAN_IN_PROGRESS                                         NTStatus      = 0xC000080F\n\tSTATUS_ENCRYPTED_IO_NOT_POSSIBLE                                          NTStatus      = 0xC0000810\n\tSTATUS_CORRUPT_LOG_UPLEVEL_RECORDS                                        NTStatus      = 0xC0000811\n\tSTATUS_FILE_CHECKED_OUT                                                   NTStatus      = 0xC0000901\n\tSTATUS_CHECKOUT_REQUIRED                                                  NTStatus      = 0xC0000902\n\tSTATUS_BAD_FILE_TYPE                                                      NTStatus      = 0xC0000903\n\tSTATUS_FILE_TOO_LARGE                                                     NTStatus      = 0xC0000904\n\tSTATUS_FORMS_AUTH_REQUIRED                                                NTStatus      = 0xC0000905\n\tSTATUS_VIRUS_INFECTED                                                     NTStatus      = 0xC0000906\n\tSTATUS_VIRUS_DELETED                                                      NTStatus      = 0xC0000907\n\tSTATUS_BAD_MCFG_TABLE                                                     NTStatus      = 0xC0000908\n\tSTATUS_CANNOT_BREAK_OPLOCK                                                NTStatus      = 0xC0000909\n\tSTATUS_BAD_KEY                                                            NTStatus      = 0xC000090A\n\tSTATUS_BAD_DATA                                                           NTStatus      = 0xC000090B\n\tSTATUS_NO_KEY                                                             NTStatus      = 0xC000090C\n\tSTATUS_FILE_HANDLE_REVOKED                                                NTStatus      = 0xC0000910\n\tSTATUS_WOW_ASSERTION                                                      NTStatus      = 0xC0009898\n\tSTATUS_INVALID_SIGNATURE                                                  NTStatus      = 0xC000A000\n\tSTATUS_HMAC_NOT_SUPPORTED                                                 NTStatus      = 0xC000A001\n\tSTATUS_AUTH_TAG_MISMATCH                                                  NTStatus      = 0xC000A002\n\tSTATUS_INVALID_STATE_TRANSITION                                           NTStatus      = 0xC000A003\n\tSTATUS_INVALID_KERNEL_INFO_VERSION                                        NTStatus      = 0xC000A004\n\tSTATUS_INVALID_PEP_INFO_VERSION                                           NTStatus      = 0xC000A005\n\tSTATUS_HANDLE_REVOKED                                                     NTStatus      = 0xC000A006\n\tSTATUS_EOF_ON_GHOSTED_RANGE                                               NTStatus      = 0xC000A007\n\tSTATUS_IPSEC_QUEUE_OVERFLOW                                               NTStatus      = 0xC000A010\n\tSTATUS_ND_QUEUE_OVERFLOW                                                  NTStatus      = 0xC000A011\n\tSTATUS_HOPLIMIT_EXCEEDED                                                  NTStatus      = 0xC000A012\n\tSTATUS_PROTOCOL_NOT_SUPPORTED                                             NTStatus      = 0xC000A013\n\tSTATUS_FASTPATH_REJECTED                                                  NTStatus      = 0xC000A014\n\tSTATUS_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED                         NTStatus      = 0xC000A080\n\tSTATUS_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR                         NTStatus      = 0xC000A081\n\tSTATUS_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR                             NTStatus      = 0xC000A082\n\tSTATUS_XML_PARSE_ERROR                                                    NTStatus      = 0xC000A083\n\tSTATUS_XMLDSIG_ERROR                                                      NTStatus      = 0xC000A084\n\tSTATUS_WRONG_COMPARTMENT                                                  NTStatus      = 0xC000A085\n\tSTATUS_AUTHIP_FAILURE                                                     NTStatus      = 0xC000A086\n\tSTATUS_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS                              NTStatus      = 0xC000A087\n\tSTATUS_DS_OID_NOT_FOUND                                                   NTStatus      = 0xC000A088\n\tSTATUS_INCORRECT_ACCOUNT_TYPE                                             NTStatus      = 0xC000A089\n\tSTATUS_HASH_NOT_SUPPORTED                                                 NTStatus      = 0xC000A100\n\tSTATUS_HASH_NOT_PRESENT                                                   NTStatus      = 0xC000A101\n\tSTATUS_SECONDARY_IC_PROVIDER_NOT_REGISTERED                               NTStatus      = 0xC000A121\n\tSTATUS_GPIO_CLIENT_INFORMATION_INVALID                                    NTStatus      = 0xC000A122\n\tSTATUS_GPIO_VERSION_NOT_SUPPORTED                                         NTStatus      = 0xC000A123\n\tSTATUS_GPIO_INVALID_REGISTRATION_PACKET                                   NTStatus      = 0xC000A124\n\tSTATUS_GPIO_OPERATION_DENIED                                              NTStatus      = 0xC000A125\n\tSTATUS_GPIO_INCOMPATIBLE_CONNECT_MODE                                     NTStatus      = 0xC000A126\n\tSTATUS_GPIO_INTERRUPT_ALREADY_UNMASKED                                    NTStatus      = 0x8000A127\n\tSTATUS_CANNOT_SWITCH_RUNLEVEL                                             NTStatus      = 0xC000A141\n\tSTATUS_INVALID_RUNLEVEL_SETTING                                           NTStatus      = 0xC000A142\n\tSTATUS_RUNLEVEL_SWITCH_TIMEOUT                                            NTStatus      = 0xC000A143\n\tSTATUS_SERVICES_FAILED_AUTOSTART                                          NTStatus      = 0x4000A144\n\tSTATUS_RUNLEVEL_SWITCH_AGENT_TIMEOUT                                      NTStatus      = 0xC000A145\n\tSTATUS_RUNLEVEL_SWITCH_IN_PROGRESS                                        NTStatus      = 0xC000A146\n\tSTATUS_NOT_APPCONTAINER                                                   NTStatus      = 0xC000A200\n\tSTATUS_NOT_SUPPORTED_IN_APPCONTAINER                                      NTStatus      = 0xC000A201\n\tSTATUS_INVALID_PACKAGE_SID_LENGTH                                         NTStatus      = 0xC000A202\n\tSTATUS_LPAC_ACCESS_DENIED                                                 NTStatus      = 0xC000A203\n\tSTATUS_ADMINLESS_ACCESS_DENIED                                            NTStatus      = 0xC000A204\n\tSTATUS_APP_DATA_NOT_FOUND                                                 NTStatus      = 0xC000A281\n\tSTATUS_APP_DATA_EXPIRED                                                   NTStatus      = 0xC000A282\n\tSTATUS_APP_DATA_CORRUPT                                                   NTStatus      = 0xC000A283\n\tSTATUS_APP_DATA_LIMIT_EXCEEDED                                            NTStatus      = 0xC000A284\n\tSTATUS_APP_DATA_REBOOT_REQUIRED                                           NTStatus      = 0xC000A285\n\tSTATUS_OFFLOAD_READ_FLT_NOT_SUPPORTED                                     NTStatus      = 0xC000A2A1\n\tSTATUS_OFFLOAD_WRITE_FLT_NOT_SUPPORTED                                    NTStatus      = 0xC000A2A2\n\tSTATUS_OFFLOAD_READ_FILE_NOT_SUPPORTED                                    NTStatus      = 0xC000A2A3\n\tSTATUS_OFFLOAD_WRITE_FILE_NOT_SUPPORTED                                   NTStatus      = 0xC000A2A4\n\tSTATUS_WOF_WIM_HEADER_CORRUPT                                             NTStatus      = 0xC000A2A5\n\tSTATUS_WOF_WIM_RESOURCE_TABLE_CORRUPT                                     NTStatus      = 0xC000A2A6\n\tSTATUS_WOF_FILE_RESOURCE_TABLE_CORRUPT                                    NTStatus      = 0xC000A2A7\n\tSTATUS_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE                             NTStatus      = 0xC000CE01\n\tSTATUS_FILE_SYSTEM_VIRTUALIZATION_METADATA_CORRUPT                        NTStatus      = 0xC000CE02\n\tSTATUS_FILE_SYSTEM_VIRTUALIZATION_BUSY                                    NTStatus      = 0xC000CE03\n\tSTATUS_FILE_SYSTEM_VIRTUALIZATION_PROVIDER_UNKNOWN                        NTStatus      = 0xC000CE04\n\tSTATUS_FILE_SYSTEM_VIRTUALIZATION_INVALID_OPERATION                       NTStatus      = 0xC000CE05\n\tSTATUS_CLOUD_FILE_SYNC_ROOT_METADATA_CORRUPT                              NTStatus      = 0xC000CF00\n\tSTATUS_CLOUD_FILE_PROVIDER_NOT_RUNNING                                    NTStatus      = 0xC000CF01\n\tSTATUS_CLOUD_FILE_METADATA_CORRUPT                                        NTStatus      = 0xC000CF02\n\tSTATUS_CLOUD_FILE_METADATA_TOO_LARGE                                      NTStatus      = 0xC000CF03\n\tSTATUS_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE                                 NTStatus      = 0x8000CF04\n\tSTATUS_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS                                 NTStatus      = 0x8000CF05\n\tSTATUS_CLOUD_FILE_PROPERTY_VERSION_NOT_SUPPORTED                          NTStatus      = 0xC000CF06\n\tSTATUS_NOT_A_CLOUD_FILE                                                   NTStatus      = 0xC000CF07\n\tSTATUS_CLOUD_FILE_NOT_IN_SYNC                                             NTStatus      = 0xC000CF08\n\tSTATUS_CLOUD_FILE_ALREADY_CONNECTED                                       NTStatus      = 0xC000CF09\n\tSTATUS_CLOUD_FILE_NOT_SUPPORTED                                           NTStatus      = 0xC000CF0A\n\tSTATUS_CLOUD_FILE_INVALID_REQUEST                                         NTStatus      = 0xC000CF0B\n\tSTATUS_CLOUD_FILE_READ_ONLY_VOLUME                                        NTStatus      = 0xC000CF0C\n\tSTATUS_CLOUD_FILE_CONNECTED_PROVIDER_ONLY                                 NTStatus      = 0xC000CF0D\n\tSTATUS_CLOUD_FILE_VALIDATION_FAILED                                       NTStatus      = 0xC000CF0E\n\tSTATUS_CLOUD_FILE_AUTHENTICATION_FAILED                                   NTStatus      = 0xC000CF0F\n\tSTATUS_CLOUD_FILE_INSUFFICIENT_RESOURCES                                  NTStatus      = 0xC000CF10\n\tSTATUS_CLOUD_FILE_NETWORK_UNAVAILABLE                                     NTStatus      = 0xC000CF11\n\tSTATUS_CLOUD_FILE_UNSUCCESSFUL                                            NTStatus      = 0xC000CF12\n\tSTATUS_CLOUD_FILE_NOT_UNDER_SYNC_ROOT                                     NTStatus      = 0xC000CF13\n\tSTATUS_CLOUD_FILE_IN_USE                                                  NTStatus      = 0xC000CF14\n\tSTATUS_CLOUD_FILE_PINNED                                                  NTStatus      = 0xC000CF15\n\tSTATUS_CLOUD_FILE_REQUEST_ABORTED                                         NTStatus      = 0xC000CF16\n\tSTATUS_CLOUD_FILE_PROPERTY_CORRUPT                                        NTStatus      = 0xC000CF17\n\tSTATUS_CLOUD_FILE_ACCESS_DENIED                                           NTStatus      = 0xC000CF18\n\tSTATUS_CLOUD_FILE_INCOMPATIBLE_HARDLINKS                                  NTStatus      = 0xC000CF19\n\tSTATUS_CLOUD_FILE_PROPERTY_LOCK_CONFLICT                                  NTStatus      = 0xC000CF1A\n\tSTATUS_CLOUD_FILE_REQUEST_CANCELED                                        NTStatus      = 0xC000CF1B\n\tSTATUS_CLOUD_FILE_PROVIDER_TERMINATED                                     NTStatus      = 0xC000CF1D\n\tSTATUS_NOT_A_CLOUD_SYNC_ROOT                                              NTStatus      = 0xC000CF1E\n\tSTATUS_CLOUD_FILE_REQUEST_TIMEOUT                                         NTStatus      = 0xC000CF1F\n\tSTATUS_ACPI_INVALID_OPCODE                                                NTStatus      = 0xC0140001\n\tSTATUS_ACPI_STACK_OVERFLOW                                                NTStatus      = 0xC0140002\n\tSTATUS_ACPI_ASSERT_FAILED                                                 NTStatus      = 0xC0140003\n\tSTATUS_ACPI_INVALID_INDEX                                                 NTStatus      = 0xC0140004\n\tSTATUS_ACPI_INVALID_ARGUMENT                                              NTStatus      = 0xC0140005\n\tSTATUS_ACPI_FATAL                                                         NTStatus      = 0xC0140006\n\tSTATUS_ACPI_INVALID_SUPERNAME                                             NTStatus      = 0xC0140007\n\tSTATUS_ACPI_INVALID_ARGTYPE                                               NTStatus      = 0xC0140008\n\tSTATUS_ACPI_INVALID_OBJTYPE                                               NTStatus      = 0xC0140009\n\tSTATUS_ACPI_INVALID_TARGETTYPE                                            NTStatus      = 0xC014000A\n\tSTATUS_ACPI_INCORRECT_ARGUMENT_COUNT                                      NTStatus      = 0xC014000B\n\tSTATUS_ACPI_ADDRESS_NOT_MAPPED                                            NTStatus      = 0xC014000C\n\tSTATUS_ACPI_INVALID_EVENTTYPE                                             NTStatus      = 0xC014000D\n\tSTATUS_ACPI_HANDLER_COLLISION                                             NTStatus      = 0xC014000E\n\tSTATUS_ACPI_INVALID_DATA                                                  NTStatus      = 0xC014000F\n\tSTATUS_ACPI_INVALID_REGION                                                NTStatus      = 0xC0140010\n\tSTATUS_ACPI_INVALID_ACCESS_SIZE                                           NTStatus      = 0xC0140011\n\tSTATUS_ACPI_ACQUIRE_GLOBAL_LOCK                                           NTStatus      = 0xC0140012\n\tSTATUS_ACPI_ALREADY_INITIALIZED                                           NTStatus      = 0xC0140013\n\tSTATUS_ACPI_NOT_INITIALIZED                                               NTStatus      = 0xC0140014\n\tSTATUS_ACPI_INVALID_MUTEX_LEVEL                                           NTStatus      = 0xC0140015\n\tSTATUS_ACPI_MUTEX_NOT_OWNED                                               NTStatus      = 0xC0140016\n\tSTATUS_ACPI_MUTEX_NOT_OWNER                                               NTStatus      = 0xC0140017\n\tSTATUS_ACPI_RS_ACCESS                                                     NTStatus      = 0xC0140018\n\tSTATUS_ACPI_INVALID_TABLE                                                 NTStatus      = 0xC0140019\n\tSTATUS_ACPI_REG_HANDLER_FAILED                                            NTStatus      = 0xC0140020\n\tSTATUS_ACPI_POWER_REQUEST_FAILED                                          NTStatus      = 0xC0140021\n\tSTATUS_CTX_WINSTATION_NAME_INVALID                                        NTStatus      = 0xC00A0001\n\tSTATUS_CTX_INVALID_PD                                                     NTStatus      = 0xC00A0002\n\tSTATUS_CTX_PD_NOT_FOUND                                                   NTStatus      = 0xC00A0003\n\tSTATUS_CTX_CDM_CONNECT                                                    NTStatus      = 0x400A0004\n\tSTATUS_CTX_CDM_DISCONNECT                                                 NTStatus      = 0x400A0005\n\tSTATUS_CTX_CLOSE_PENDING                                                  NTStatus      = 0xC00A0006\n\tSTATUS_CTX_NO_OUTBUF                                                      NTStatus      = 0xC00A0007\n\tSTATUS_CTX_MODEM_INF_NOT_FOUND                                            NTStatus      = 0xC00A0008\n\tSTATUS_CTX_INVALID_MODEMNAME                                              NTStatus      = 0xC00A0009\n\tSTATUS_CTX_RESPONSE_ERROR                                                 NTStatus      = 0xC00A000A\n\tSTATUS_CTX_MODEM_RESPONSE_TIMEOUT                                         NTStatus      = 0xC00A000B\n\tSTATUS_CTX_MODEM_RESPONSE_NO_CARRIER                                      NTStatus      = 0xC00A000C\n\tSTATUS_CTX_MODEM_RESPONSE_NO_DIALTONE                                     NTStatus      = 0xC00A000D\n\tSTATUS_CTX_MODEM_RESPONSE_BUSY                                            NTStatus      = 0xC00A000E\n\tSTATUS_CTX_MODEM_RESPONSE_VOICE                                           NTStatus      = 0xC00A000F\n\tSTATUS_CTX_TD_ERROR                                                       NTStatus      = 0xC00A0010\n\tSTATUS_CTX_LICENSE_CLIENT_INVALID                                         NTStatus      = 0xC00A0012\n\tSTATUS_CTX_LICENSE_NOT_AVAILABLE                                          NTStatus      = 0xC00A0013\n\tSTATUS_CTX_LICENSE_EXPIRED                                                NTStatus      = 0xC00A0014\n\tSTATUS_CTX_WINSTATION_NOT_FOUND                                           NTStatus      = 0xC00A0015\n\tSTATUS_CTX_WINSTATION_NAME_COLLISION                                      NTStatus      = 0xC00A0016\n\tSTATUS_CTX_WINSTATION_BUSY                                                NTStatus      = 0xC00A0017\n\tSTATUS_CTX_BAD_VIDEO_MODE                                                 NTStatus      = 0xC00A0018\n\tSTATUS_CTX_GRAPHICS_INVALID                                               NTStatus      = 0xC00A0022\n\tSTATUS_CTX_NOT_CONSOLE                                                    NTStatus      = 0xC00A0024\n\tSTATUS_CTX_CLIENT_QUERY_TIMEOUT                                           NTStatus      = 0xC00A0026\n\tSTATUS_CTX_CONSOLE_DISCONNECT                                             NTStatus      = 0xC00A0027\n\tSTATUS_CTX_CONSOLE_CONNECT                                                NTStatus      = 0xC00A0028\n\tSTATUS_CTX_SHADOW_DENIED                                                  NTStatus      = 0xC00A002A\n\tSTATUS_CTX_WINSTATION_ACCESS_DENIED                                       NTStatus      = 0xC00A002B\n\tSTATUS_CTX_INVALID_WD                                                     NTStatus      = 0xC00A002E\n\tSTATUS_CTX_WD_NOT_FOUND                                                   NTStatus      = 0xC00A002F\n\tSTATUS_CTX_SHADOW_INVALID                                                 NTStatus      = 0xC00A0030\n\tSTATUS_CTX_SHADOW_DISABLED                                                NTStatus      = 0xC00A0031\n\tSTATUS_RDP_PROTOCOL_ERROR                                                 NTStatus      = 0xC00A0032\n\tSTATUS_CTX_CLIENT_LICENSE_NOT_SET                                         NTStatus      = 0xC00A0033\n\tSTATUS_CTX_CLIENT_LICENSE_IN_USE                                          NTStatus      = 0xC00A0034\n\tSTATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE                                    NTStatus      = 0xC00A0035\n\tSTATUS_CTX_SHADOW_NOT_RUNNING                                             NTStatus      = 0xC00A0036\n\tSTATUS_CTX_LOGON_DISABLED                                                 NTStatus      = 0xC00A0037\n\tSTATUS_CTX_SECURITY_LAYER_ERROR                                           NTStatus      = 0xC00A0038\n\tSTATUS_TS_INCOMPATIBLE_SESSIONS                                           NTStatus      = 0xC00A0039\n\tSTATUS_TS_VIDEO_SUBSYSTEM_ERROR                                           NTStatus      = 0xC00A003A\n\tSTATUS_PNP_BAD_MPS_TABLE                                                  NTStatus      = 0xC0040035\n\tSTATUS_PNP_TRANSLATION_FAILED                                             NTStatus      = 0xC0040036\n\tSTATUS_PNP_IRQ_TRANSLATION_FAILED                                         NTStatus      = 0xC0040037\n\tSTATUS_PNP_INVALID_ID                                                     NTStatus      = 0xC0040038\n\tSTATUS_IO_REISSUE_AS_CACHED                                               NTStatus      = 0xC0040039\n\tSTATUS_MUI_FILE_NOT_FOUND                                                 NTStatus      = 0xC00B0001\n\tSTATUS_MUI_INVALID_FILE                                                   NTStatus      = 0xC00B0002\n\tSTATUS_MUI_INVALID_RC_CONFIG                                              NTStatus      = 0xC00B0003\n\tSTATUS_MUI_INVALID_LOCALE_NAME                                            NTStatus      = 0xC00B0004\n\tSTATUS_MUI_INVALID_ULTIMATEFALLBACK_NAME                                  NTStatus      = 0xC00B0005\n\tSTATUS_MUI_FILE_NOT_LOADED                                                NTStatus      = 0xC00B0006\n\tSTATUS_RESOURCE_ENUM_USER_STOP                                            NTStatus      = 0xC00B0007\n\tSTATUS_FLT_NO_HANDLER_DEFINED                                             NTStatus      = 0xC01C0001\n\tSTATUS_FLT_CONTEXT_ALREADY_DEFINED                                        NTStatus      = 0xC01C0002\n\tSTATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST                                   NTStatus      = 0xC01C0003\n\tSTATUS_FLT_DISALLOW_FAST_IO                                               NTStatus      = 0xC01C0004\n\tSTATUS_FLT_INVALID_NAME_REQUEST                                           NTStatus      = 0xC01C0005\n\tSTATUS_FLT_NOT_SAFE_TO_POST_OPERATION                                     NTStatus      = 0xC01C0006\n\tSTATUS_FLT_NOT_INITIALIZED                                                NTStatus      = 0xC01C0007\n\tSTATUS_FLT_FILTER_NOT_READY                                               NTStatus      = 0xC01C0008\n\tSTATUS_FLT_POST_OPERATION_CLEANUP                                         NTStatus      = 0xC01C0009\n\tSTATUS_FLT_INTERNAL_ERROR                                                 NTStatus      = 0xC01C000A\n\tSTATUS_FLT_DELETING_OBJECT                                                NTStatus      = 0xC01C000B\n\tSTATUS_FLT_MUST_BE_NONPAGED_POOL                                          NTStatus      = 0xC01C000C\n\tSTATUS_FLT_DUPLICATE_ENTRY                                                NTStatus      = 0xC01C000D\n\tSTATUS_FLT_CBDQ_DISABLED                                                  NTStatus      = 0xC01C000E\n\tSTATUS_FLT_DO_NOT_ATTACH                                                  NTStatus      = 0xC01C000F\n\tSTATUS_FLT_DO_NOT_DETACH                                                  NTStatus      = 0xC01C0010\n\tSTATUS_FLT_INSTANCE_ALTITUDE_COLLISION                                    NTStatus      = 0xC01C0011\n\tSTATUS_FLT_INSTANCE_NAME_COLLISION                                        NTStatus      = 0xC01C0012\n\tSTATUS_FLT_FILTER_NOT_FOUND                                               NTStatus      = 0xC01C0013\n\tSTATUS_FLT_VOLUME_NOT_FOUND                                               NTStatus      = 0xC01C0014\n\tSTATUS_FLT_INSTANCE_NOT_FOUND                                             NTStatus      = 0xC01C0015\n\tSTATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND                                   NTStatus      = 0xC01C0016\n\tSTATUS_FLT_INVALID_CONTEXT_REGISTRATION                                   NTStatus      = 0xC01C0017\n\tSTATUS_FLT_NAME_CACHE_MISS                                                NTStatus      = 0xC01C0018\n\tSTATUS_FLT_NO_DEVICE_OBJECT                                               NTStatus      = 0xC01C0019\n\tSTATUS_FLT_VOLUME_ALREADY_MOUNTED                                         NTStatus      = 0xC01C001A\n\tSTATUS_FLT_ALREADY_ENLISTED                                               NTStatus      = 0xC01C001B\n\tSTATUS_FLT_CONTEXT_ALREADY_LINKED                                         NTStatus      = 0xC01C001C\n\tSTATUS_FLT_NO_WAITER_FOR_REPLY                                            NTStatus      = 0xC01C0020\n\tSTATUS_FLT_REGISTRATION_BUSY                                              NTStatus      = 0xC01C0023\n\tSTATUS_SXS_SECTION_NOT_FOUND                                              NTStatus      = 0xC0150001\n\tSTATUS_SXS_CANT_GEN_ACTCTX                                                NTStatus      = 0xC0150002\n\tSTATUS_SXS_INVALID_ACTCTXDATA_FORMAT                                      NTStatus      = 0xC0150003\n\tSTATUS_SXS_ASSEMBLY_NOT_FOUND                                             NTStatus      = 0xC0150004\n\tSTATUS_SXS_MANIFEST_FORMAT_ERROR                                          NTStatus      = 0xC0150005\n\tSTATUS_SXS_MANIFEST_PARSE_ERROR                                           NTStatus      = 0xC0150006\n\tSTATUS_SXS_ACTIVATION_CONTEXT_DISABLED                                    NTStatus      = 0xC0150007\n\tSTATUS_SXS_KEY_NOT_FOUND                                                  NTStatus      = 0xC0150008\n\tSTATUS_SXS_VERSION_CONFLICT                                               NTStatus      = 0xC0150009\n\tSTATUS_SXS_WRONG_SECTION_TYPE                                             NTStatus      = 0xC015000A\n\tSTATUS_SXS_THREAD_QUERIES_DISABLED                                        NTStatus      = 0xC015000B\n\tSTATUS_SXS_ASSEMBLY_MISSING                                               NTStatus      = 0xC015000C\n\tSTATUS_SXS_RELEASE_ACTIVATION_CONTEXT                                     NTStatus      = 0x4015000D\n\tSTATUS_SXS_PROCESS_DEFAULT_ALREADY_SET                                    NTStatus      = 0xC015000E\n\tSTATUS_SXS_EARLY_DEACTIVATION                                             NTStatus      = 0xC015000F\n\tSTATUS_SXS_INVALID_DEACTIVATION                                           NTStatus      = 0xC0150010\n\tSTATUS_SXS_MULTIPLE_DEACTIVATION                                          NTStatus      = 0xC0150011\n\tSTATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY                        NTStatus      = 0xC0150012\n\tSTATUS_SXS_PROCESS_TERMINATION_REQUESTED                                  NTStatus      = 0xC0150013\n\tSTATUS_SXS_CORRUPT_ACTIVATION_STACK                                       NTStatus      = 0xC0150014\n\tSTATUS_SXS_CORRUPTION                                                     NTStatus      = 0xC0150015\n\tSTATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE                               NTStatus      = 0xC0150016\n\tSTATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME                                NTStatus      = 0xC0150017\n\tSTATUS_SXS_IDENTITY_DUPLICATE_ATTRIBUTE                                   NTStatus      = 0xC0150018\n\tSTATUS_SXS_IDENTITY_PARSE_ERROR                                           NTStatus      = 0xC0150019\n\tSTATUS_SXS_COMPONENT_STORE_CORRUPT                                        NTStatus      = 0xC015001A\n\tSTATUS_SXS_FILE_HASH_MISMATCH                                             NTStatus      = 0xC015001B\n\tSTATUS_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT                  NTStatus      = 0xC015001C\n\tSTATUS_SXS_IDENTITIES_DIFFERENT                                           NTStatus      = 0xC015001D\n\tSTATUS_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT                                   NTStatus      = 0xC015001E\n\tSTATUS_SXS_FILE_NOT_PART_OF_ASSEMBLY                                      NTStatus      = 0xC015001F\n\tSTATUS_ADVANCED_INSTALLER_FAILED                                          NTStatus      = 0xC0150020\n\tSTATUS_XML_ENCODING_MISMATCH                                              NTStatus      = 0xC0150021\n\tSTATUS_SXS_MANIFEST_TOO_BIG                                               NTStatus      = 0xC0150022\n\tSTATUS_SXS_SETTING_NOT_REGISTERED                                         NTStatus      = 0xC0150023\n\tSTATUS_SXS_TRANSACTION_CLOSURE_INCOMPLETE                                 NTStatus      = 0xC0150024\n\tSTATUS_SMI_PRIMITIVE_INSTALLER_FAILED                                     NTStatus      = 0xC0150025\n\tSTATUS_GENERIC_COMMAND_FAILED                                             NTStatus      = 0xC0150026\n\tSTATUS_SXS_FILE_HASH_MISSING                                              NTStatus      = 0xC0150027\n\tSTATUS_CLUSTER_INVALID_NODE                                               NTStatus      = 0xC0130001\n\tSTATUS_CLUSTER_NODE_EXISTS                                                NTStatus      = 0xC0130002\n\tSTATUS_CLUSTER_JOIN_IN_PROGRESS                                           NTStatus      = 0xC0130003\n\tSTATUS_CLUSTER_NODE_NOT_FOUND                                             NTStatus      = 0xC0130004\n\tSTATUS_CLUSTER_LOCAL_NODE_NOT_FOUND                                       NTStatus      = 0xC0130005\n\tSTATUS_CLUSTER_NETWORK_EXISTS                                             NTStatus      = 0xC0130006\n\tSTATUS_CLUSTER_NETWORK_NOT_FOUND                                          NTStatus      = 0xC0130007\n\tSTATUS_CLUSTER_NETINTERFACE_EXISTS                                        NTStatus      = 0xC0130008\n\tSTATUS_CLUSTER_NETINTERFACE_NOT_FOUND                                     NTStatus      = 0xC0130009\n\tSTATUS_CLUSTER_INVALID_REQUEST                                            NTStatus      = 0xC013000A\n\tSTATUS_CLUSTER_INVALID_NETWORK_PROVIDER                                   NTStatus      = 0xC013000B\n\tSTATUS_CLUSTER_NODE_DOWN                                                  NTStatus      = 0xC013000C\n\tSTATUS_CLUSTER_NODE_UNREACHABLE                                           NTStatus      = 0xC013000D\n\tSTATUS_CLUSTER_NODE_NOT_MEMBER                                            NTStatus      = 0xC013000E\n\tSTATUS_CLUSTER_JOIN_NOT_IN_PROGRESS                                       NTStatus      = 0xC013000F\n\tSTATUS_CLUSTER_INVALID_NETWORK                                            NTStatus      = 0xC0130010\n\tSTATUS_CLUSTER_NO_NET_ADAPTERS                                            NTStatus      = 0xC0130011\n\tSTATUS_CLUSTER_NODE_UP                                                    NTStatus      = 0xC0130012\n\tSTATUS_CLUSTER_NODE_PAUSED                                                NTStatus      = 0xC0130013\n\tSTATUS_CLUSTER_NODE_NOT_PAUSED                                            NTStatus      = 0xC0130014\n\tSTATUS_CLUSTER_NO_SECURITY_CONTEXT                                        NTStatus      = 0xC0130015\n\tSTATUS_CLUSTER_NETWORK_NOT_INTERNAL                                       NTStatus      = 0xC0130016\n\tSTATUS_CLUSTER_POISONED                                                   NTStatus      = 0xC0130017\n\tSTATUS_CLUSTER_NON_CSV_PATH                                               NTStatus      = 0xC0130018\n\tSTATUS_CLUSTER_CSV_VOLUME_NOT_LOCAL                                       NTStatus      = 0xC0130019\n\tSTATUS_CLUSTER_CSV_READ_OPLOCK_BREAK_IN_PROGRESS                          NTStatus      = 0xC0130020\n\tSTATUS_CLUSTER_CSV_AUTO_PAUSE_ERROR                                       NTStatus      = 0xC0130021\n\tSTATUS_CLUSTER_CSV_REDIRECTED                                             NTStatus      = 0xC0130022\n\tSTATUS_CLUSTER_CSV_NOT_REDIRECTED                                         NTStatus      = 0xC0130023\n\tSTATUS_CLUSTER_CSV_VOLUME_DRAINING                                        NTStatus      = 0xC0130024\n\tSTATUS_CLUSTER_CSV_SNAPSHOT_CREATION_IN_PROGRESS                          NTStatus      = 0xC0130025\n\tSTATUS_CLUSTER_CSV_VOLUME_DRAINING_SUCCEEDED_DOWNLEVEL                    NTStatus      = 0xC0130026\n\tSTATUS_CLUSTER_CSV_NO_SNAPSHOTS                                           NTStatus      = 0xC0130027\n\tSTATUS_CSV_IO_PAUSE_TIMEOUT                                               NTStatus      = 0xC0130028\n\tSTATUS_CLUSTER_CSV_INVALID_HANDLE                                         NTStatus      = 0xC0130029\n\tSTATUS_CLUSTER_CSV_SUPPORTED_ONLY_ON_COORDINATOR                          NTStatus      = 0xC0130030\n\tSTATUS_CLUSTER_CAM_TICKET_REPLAY_DETECTED                                 NTStatus      = 0xC0130031\n\tSTATUS_TRANSACTIONAL_CONFLICT                                             NTStatus      = 0xC0190001\n\tSTATUS_INVALID_TRANSACTION                                                NTStatus      = 0xC0190002\n\tSTATUS_TRANSACTION_NOT_ACTIVE                                             NTStatus      = 0xC0190003\n\tSTATUS_TM_INITIALIZATION_FAILED                                           NTStatus      = 0xC0190004\n\tSTATUS_RM_NOT_ACTIVE                                                      NTStatus      = 0xC0190005\n\tSTATUS_RM_METADATA_CORRUPT                                                NTStatus      = 0xC0190006\n\tSTATUS_TRANSACTION_NOT_JOINED                                             NTStatus      = 0xC0190007\n\tSTATUS_DIRECTORY_NOT_RM                                                   NTStatus      = 0xC0190008\n\tSTATUS_COULD_NOT_RESIZE_LOG                                               NTStatus      = 0x80190009\n\tSTATUS_TRANSACTIONS_UNSUPPORTED_REMOTE                                    NTStatus      = 0xC019000A\n\tSTATUS_LOG_RESIZE_INVALID_SIZE                                            NTStatus      = 0xC019000B\n\tSTATUS_REMOTE_FILE_VERSION_MISMATCH                                       NTStatus      = 0xC019000C\n\tSTATUS_CRM_PROTOCOL_ALREADY_EXISTS                                        NTStatus      = 0xC019000F\n\tSTATUS_TRANSACTION_PROPAGATION_FAILED                                     NTStatus      = 0xC0190010\n\tSTATUS_CRM_PROTOCOL_NOT_FOUND                                             NTStatus      = 0xC0190011\n\tSTATUS_TRANSACTION_SUPERIOR_EXISTS                                        NTStatus      = 0xC0190012\n\tSTATUS_TRANSACTION_REQUEST_NOT_VALID                                      NTStatus      = 0xC0190013\n\tSTATUS_TRANSACTION_NOT_REQUESTED                                          NTStatus      = 0xC0190014\n\tSTATUS_TRANSACTION_ALREADY_ABORTED                                        NTStatus      = 0xC0190015\n\tSTATUS_TRANSACTION_ALREADY_COMMITTED                                      NTStatus      = 0xC0190016\n\tSTATUS_TRANSACTION_INVALID_MARSHALL_BUFFER                                NTStatus      = 0xC0190017\n\tSTATUS_CURRENT_TRANSACTION_NOT_VALID                                      NTStatus      = 0xC0190018\n\tSTATUS_LOG_GROWTH_FAILED                                                  NTStatus      = 0xC0190019\n\tSTATUS_OBJECT_NO_LONGER_EXISTS                                            NTStatus      = 0xC0190021\n\tSTATUS_STREAM_MINIVERSION_NOT_FOUND                                       NTStatus      = 0xC0190022\n\tSTATUS_STREAM_MINIVERSION_NOT_VALID                                       NTStatus      = 0xC0190023\n\tSTATUS_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION                NTStatus      = 0xC0190024\n\tSTATUS_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT                           NTStatus      = 0xC0190025\n\tSTATUS_CANT_CREATE_MORE_STREAM_MINIVERSIONS                               NTStatus      = 0xC0190026\n\tSTATUS_HANDLE_NO_LONGER_VALID                                             NTStatus      = 0xC0190028\n\tSTATUS_NO_TXF_METADATA                                                    NTStatus      = 0x80190029\n\tSTATUS_LOG_CORRUPTION_DETECTED                                            NTStatus      = 0xC0190030\n\tSTATUS_CANT_RECOVER_WITH_HANDLE_OPEN                                      NTStatus      = 0x80190031\n\tSTATUS_RM_DISCONNECTED                                                    NTStatus      = 0xC0190032\n\tSTATUS_ENLISTMENT_NOT_SUPERIOR                                            NTStatus      = 0xC0190033\n\tSTATUS_RECOVERY_NOT_NEEDED                                                NTStatus      = 0x40190034\n\tSTATUS_RM_ALREADY_STARTED                                                 NTStatus      = 0x40190035\n\tSTATUS_FILE_IDENTITY_NOT_PERSISTENT                                       NTStatus      = 0xC0190036\n\tSTATUS_CANT_BREAK_TRANSACTIONAL_DEPENDENCY                                NTStatus      = 0xC0190037\n\tSTATUS_CANT_CROSS_RM_BOUNDARY                                             NTStatus      = 0xC0190038\n\tSTATUS_TXF_DIR_NOT_EMPTY                                                  NTStatus      = 0xC0190039\n\tSTATUS_INDOUBT_TRANSACTIONS_EXIST                                         NTStatus      = 0xC019003A\n\tSTATUS_TM_VOLATILE                                                        NTStatus      = 0xC019003B\n\tSTATUS_ROLLBACK_TIMER_EXPIRED                                             NTStatus      = 0xC019003C\n\tSTATUS_TXF_ATTRIBUTE_CORRUPT                                              NTStatus      = 0xC019003D\n\tSTATUS_EFS_NOT_ALLOWED_IN_TRANSACTION                                     NTStatus      = 0xC019003E\n\tSTATUS_TRANSACTIONAL_OPEN_NOT_ALLOWED                                     NTStatus      = 0xC019003F\n\tSTATUS_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE                              NTStatus      = 0xC0190040\n\tSTATUS_TXF_METADATA_ALREADY_PRESENT                                       NTStatus      = 0x80190041\n\tSTATUS_TRANSACTION_SCOPE_CALLBACKS_NOT_SET                                NTStatus      = 0x80190042\n\tSTATUS_TRANSACTION_REQUIRED_PROMOTION                                     NTStatus      = 0xC0190043\n\tSTATUS_CANNOT_EXECUTE_FILE_IN_TRANSACTION                                 NTStatus      = 0xC0190044\n\tSTATUS_TRANSACTIONS_NOT_FROZEN                                            NTStatus      = 0xC0190045\n\tSTATUS_TRANSACTION_FREEZE_IN_PROGRESS                                     NTStatus      = 0xC0190046\n\tSTATUS_NOT_SNAPSHOT_VOLUME                                                NTStatus      = 0xC0190047\n\tSTATUS_NO_SAVEPOINT_WITH_OPEN_FILES                                       NTStatus      = 0xC0190048\n\tSTATUS_SPARSE_NOT_ALLOWED_IN_TRANSACTION                                  NTStatus      = 0xC0190049\n\tSTATUS_TM_IDENTITY_MISMATCH                                               NTStatus      = 0xC019004A\n\tSTATUS_FLOATED_SECTION                                                    NTStatus      = 0xC019004B\n\tSTATUS_CANNOT_ACCEPT_TRANSACTED_WORK                                      NTStatus      = 0xC019004C\n\tSTATUS_CANNOT_ABORT_TRANSACTIONS                                          NTStatus      = 0xC019004D\n\tSTATUS_TRANSACTION_NOT_FOUND                                              NTStatus      = 0xC019004E\n\tSTATUS_RESOURCEMANAGER_NOT_FOUND                                          NTStatus      = 0xC019004F\n\tSTATUS_ENLISTMENT_NOT_FOUND                                               NTStatus      = 0xC0190050\n\tSTATUS_TRANSACTIONMANAGER_NOT_FOUND                                       NTStatus      = 0xC0190051\n\tSTATUS_TRANSACTIONMANAGER_NOT_ONLINE                                      NTStatus      = 0xC0190052\n\tSTATUS_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION                         NTStatus      = 0xC0190053\n\tSTATUS_TRANSACTION_NOT_ROOT                                               NTStatus      = 0xC0190054\n\tSTATUS_TRANSACTION_OBJECT_EXPIRED                                         NTStatus      = 0xC0190055\n\tSTATUS_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION                             NTStatus      = 0xC0190056\n\tSTATUS_TRANSACTION_RESPONSE_NOT_ENLISTED                                  NTStatus      = 0xC0190057\n\tSTATUS_TRANSACTION_RECORD_TOO_LONG                                        NTStatus      = 0xC0190058\n\tSTATUS_NO_LINK_TRACKING_IN_TRANSACTION                                    NTStatus      = 0xC0190059\n\tSTATUS_OPERATION_NOT_SUPPORTED_IN_TRANSACTION                             NTStatus      = 0xC019005A\n\tSTATUS_TRANSACTION_INTEGRITY_VIOLATED                                     NTStatus      = 0xC019005B\n\tSTATUS_TRANSACTIONMANAGER_IDENTITY_MISMATCH                               NTStatus      = 0xC019005C\n\tSTATUS_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT                                   NTStatus      = 0xC019005D\n\tSTATUS_TRANSACTION_MUST_WRITETHROUGH                                      NTStatus      = 0xC019005E\n\tSTATUS_TRANSACTION_NO_SUPERIOR                                            NTStatus      = 0xC019005F\n\tSTATUS_EXPIRED_HANDLE                                                     NTStatus      = 0xC0190060\n\tSTATUS_TRANSACTION_NOT_ENLISTED                                           NTStatus      = 0xC0190061\n\tSTATUS_LOG_SECTOR_INVALID                                                 NTStatus      = 0xC01A0001\n\tSTATUS_LOG_SECTOR_PARITY_INVALID                                          NTStatus      = 0xC01A0002\n\tSTATUS_LOG_SECTOR_REMAPPED                                                NTStatus      = 0xC01A0003\n\tSTATUS_LOG_BLOCK_INCOMPLETE                                               NTStatus      = 0xC01A0004\n\tSTATUS_LOG_INVALID_RANGE                                                  NTStatus      = 0xC01A0005\n\tSTATUS_LOG_BLOCKS_EXHAUSTED                                               NTStatus      = 0xC01A0006\n\tSTATUS_LOG_READ_CONTEXT_INVALID                                           NTStatus      = 0xC01A0007\n\tSTATUS_LOG_RESTART_INVALID                                                NTStatus      = 0xC01A0008\n\tSTATUS_LOG_BLOCK_VERSION                                                  NTStatus      = 0xC01A0009\n\tSTATUS_LOG_BLOCK_INVALID                                                  NTStatus      = 0xC01A000A\n\tSTATUS_LOG_READ_MODE_INVALID                                              NTStatus      = 0xC01A000B\n\tSTATUS_LOG_NO_RESTART                                                     NTStatus      = 0x401A000C\n\tSTATUS_LOG_METADATA_CORRUPT                                               NTStatus      = 0xC01A000D\n\tSTATUS_LOG_METADATA_INVALID                                               NTStatus      = 0xC01A000E\n\tSTATUS_LOG_METADATA_INCONSISTENT                                          NTStatus      = 0xC01A000F\n\tSTATUS_LOG_RESERVATION_INVALID                                            NTStatus      = 0xC01A0010\n\tSTATUS_LOG_CANT_DELETE                                                    NTStatus      = 0xC01A0011\n\tSTATUS_LOG_CONTAINER_LIMIT_EXCEEDED                                       NTStatus      = 0xC01A0012\n\tSTATUS_LOG_START_OF_LOG                                                   NTStatus      = 0xC01A0013\n\tSTATUS_LOG_POLICY_ALREADY_INSTALLED                                       NTStatus      = 0xC01A0014\n\tSTATUS_LOG_POLICY_NOT_INSTALLED                                           NTStatus      = 0xC01A0015\n\tSTATUS_LOG_POLICY_INVALID                                                 NTStatus      = 0xC01A0016\n\tSTATUS_LOG_POLICY_CONFLICT                                                NTStatus      = 0xC01A0017\n\tSTATUS_LOG_PINNED_ARCHIVE_TAIL                                            NTStatus      = 0xC01A0018\n\tSTATUS_LOG_RECORD_NONEXISTENT                                             NTStatus      = 0xC01A0019\n\tSTATUS_LOG_RECORDS_RESERVED_INVALID                                       NTStatus      = 0xC01A001A\n\tSTATUS_LOG_SPACE_RESERVED_INVALID                                         NTStatus      = 0xC01A001B\n\tSTATUS_LOG_TAIL_INVALID                                                   NTStatus      = 0xC01A001C\n\tSTATUS_LOG_FULL                                                           NTStatus      = 0xC01A001D\n\tSTATUS_LOG_MULTIPLEXED                                                    NTStatus      = 0xC01A001E\n\tSTATUS_LOG_DEDICATED                                                      NTStatus      = 0xC01A001F\n\tSTATUS_LOG_ARCHIVE_NOT_IN_PROGRESS                                        NTStatus      = 0xC01A0020\n\tSTATUS_LOG_ARCHIVE_IN_PROGRESS                                            NTStatus      = 0xC01A0021\n\tSTATUS_LOG_EPHEMERAL                                                      NTStatus      = 0xC01A0022\n\tSTATUS_LOG_NOT_ENOUGH_CONTAINERS                                          NTStatus      = 0xC01A0023\n\tSTATUS_LOG_CLIENT_ALREADY_REGISTERED                                      NTStatus      = 0xC01A0024\n\tSTATUS_LOG_CLIENT_NOT_REGISTERED                                          NTStatus      = 0xC01A0025\n\tSTATUS_LOG_FULL_HANDLER_IN_PROGRESS                                       NTStatus      = 0xC01A0026\n\tSTATUS_LOG_CONTAINER_READ_FAILED                                          NTStatus      = 0xC01A0027\n\tSTATUS_LOG_CONTAINER_WRITE_FAILED                                         NTStatus      = 0xC01A0028\n\tSTATUS_LOG_CONTAINER_OPEN_FAILED                                          NTStatus      = 0xC01A0029\n\tSTATUS_LOG_CONTAINER_STATE_INVALID                                        NTStatus      = 0xC01A002A\n\tSTATUS_LOG_STATE_INVALID                                                  NTStatus      = 0xC01A002B\n\tSTATUS_LOG_PINNED                                                         NTStatus      = 0xC01A002C\n\tSTATUS_LOG_METADATA_FLUSH_FAILED                                          NTStatus      = 0xC01A002D\n\tSTATUS_LOG_INCONSISTENT_SECURITY                                          NTStatus      = 0xC01A002E\n\tSTATUS_LOG_APPENDED_FLUSH_FAILED                                          NTStatus      = 0xC01A002F\n\tSTATUS_LOG_PINNED_RESERVATION                                             NTStatus      = 0xC01A0030\n\tSTATUS_VIDEO_HUNG_DISPLAY_DRIVER_THREAD                                   NTStatus      = 0xC01B00EA\n\tSTATUS_VIDEO_HUNG_DISPLAY_DRIVER_THREAD_RECOVERED                         NTStatus      = 0x801B00EB\n\tSTATUS_VIDEO_DRIVER_DEBUG_REPORT_REQUEST                                  NTStatus      = 0x401B00EC\n\tSTATUS_MONITOR_NO_DESCRIPTOR                                              NTStatus      = 0xC01D0001\n\tSTATUS_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT                                  NTStatus      = 0xC01D0002\n\tSTATUS_MONITOR_INVALID_DESCRIPTOR_CHECKSUM                                NTStatus      = 0xC01D0003\n\tSTATUS_MONITOR_INVALID_STANDARD_TIMING_BLOCK                              NTStatus      = 0xC01D0004\n\tSTATUS_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED                          NTStatus      = 0xC01D0005\n\tSTATUS_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK                         NTStatus      = 0xC01D0006\n\tSTATUS_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK                         NTStatus      = 0xC01D0007\n\tSTATUS_MONITOR_NO_MORE_DESCRIPTOR_DATA                                    NTStatus      = 0xC01D0008\n\tSTATUS_MONITOR_INVALID_DETAILED_TIMING_BLOCK                              NTStatus      = 0xC01D0009\n\tSTATUS_MONITOR_INVALID_MANUFACTURE_DATE                                   NTStatus      = 0xC01D000A\n\tSTATUS_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER                                  NTStatus      = 0xC01E0000\n\tSTATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER                                   NTStatus      = 0xC01E0001\n\tSTATUS_GRAPHICS_INVALID_DISPLAY_ADAPTER                                   NTStatus      = 0xC01E0002\n\tSTATUS_GRAPHICS_ADAPTER_WAS_RESET                                         NTStatus      = 0xC01E0003\n\tSTATUS_GRAPHICS_INVALID_DRIVER_MODEL                                      NTStatus      = 0xC01E0004\n\tSTATUS_GRAPHICS_PRESENT_MODE_CHANGED                                      NTStatus      = 0xC01E0005\n\tSTATUS_GRAPHICS_PRESENT_OCCLUDED                                          NTStatus      = 0xC01E0006\n\tSTATUS_GRAPHICS_PRESENT_DENIED                                            NTStatus      = 0xC01E0007\n\tSTATUS_GRAPHICS_CANNOTCOLORCONVERT                                        NTStatus      = 0xC01E0008\n\tSTATUS_GRAPHICS_DRIVER_MISMATCH                                           NTStatus      = 0xC01E0009\n\tSTATUS_GRAPHICS_PARTIAL_DATA_POPULATED                                    NTStatus      = 0x401E000A\n\tSTATUS_GRAPHICS_PRESENT_REDIRECTION_DISABLED                              NTStatus      = 0xC01E000B\n\tSTATUS_GRAPHICS_PRESENT_UNOCCLUDED                                        NTStatus      = 0xC01E000C\n\tSTATUS_GRAPHICS_WINDOWDC_NOT_AVAILABLE                                    NTStatus      = 0xC01E000D\n\tSTATUS_GRAPHICS_WINDOWLESS_PRESENT_DISABLED                               NTStatus      = 0xC01E000E\n\tSTATUS_GRAPHICS_PRESENT_INVALID_WINDOW                                    NTStatus      = 0xC01E000F\n\tSTATUS_GRAPHICS_PRESENT_BUFFER_NOT_BOUND                                  NTStatus      = 0xC01E0010\n\tSTATUS_GRAPHICS_VAIL_STATE_CHANGED                                        NTStatus      = 0xC01E0011\n\tSTATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN                        NTStatus      = 0xC01E0012\n\tSTATUS_GRAPHICS_INDIRECT_DISPLAY_DEVICE_STOPPED                           NTStatus      = 0xC01E0013\n\tSTATUS_GRAPHICS_NO_VIDEO_MEMORY                                           NTStatus      = 0xC01E0100\n\tSTATUS_GRAPHICS_CANT_LOCK_MEMORY                                          NTStatus      = 0xC01E0101\n\tSTATUS_GRAPHICS_ALLOCATION_BUSY                                           NTStatus      = 0xC01E0102\n\tSTATUS_GRAPHICS_TOO_MANY_REFERENCES                                       NTStatus      = 0xC01E0103\n\tSTATUS_GRAPHICS_TRY_AGAIN_LATER                                           NTStatus      = 0xC01E0104\n\tSTATUS_GRAPHICS_TRY_AGAIN_NOW                                             NTStatus      = 0xC01E0105\n\tSTATUS_GRAPHICS_ALLOCATION_INVALID                                        NTStatus      = 0xC01E0106\n\tSTATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE                          NTStatus      = 0xC01E0107\n\tSTATUS_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED                          NTStatus      = 0xC01E0108\n\tSTATUS_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION                              NTStatus      = 0xC01E0109\n\tSTATUS_GRAPHICS_INVALID_ALLOCATION_USAGE                                  NTStatus      = 0xC01E0110\n\tSTATUS_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION                             NTStatus      = 0xC01E0111\n\tSTATUS_GRAPHICS_ALLOCATION_CLOSED                                         NTStatus      = 0xC01E0112\n\tSTATUS_GRAPHICS_INVALID_ALLOCATION_INSTANCE                               NTStatus      = 0xC01E0113\n\tSTATUS_GRAPHICS_INVALID_ALLOCATION_HANDLE                                 NTStatus      = 0xC01E0114\n\tSTATUS_GRAPHICS_WRONG_ALLOCATION_DEVICE                                   NTStatus      = 0xC01E0115\n\tSTATUS_GRAPHICS_ALLOCATION_CONTENT_LOST                                   NTStatus      = 0xC01E0116\n\tSTATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE                                   NTStatus      = 0xC01E0200\n\tSTATUS_GRAPHICS_SKIP_ALLOCATION_PREPARATION                               NTStatus      = 0x401E0201\n\tSTATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY                                    NTStatus      = 0xC01E0300\n\tSTATUS_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED                              NTStatus      = 0xC01E0301\n\tSTATUS_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED                    NTStatus      = 0xC01E0302\n\tSTATUS_GRAPHICS_INVALID_VIDPN                                             NTStatus      = 0xC01E0303\n\tSTATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE                              NTStatus      = 0xC01E0304\n\tSTATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET                              NTStatus      = 0xC01E0305\n\tSTATUS_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED                              NTStatus      = 0xC01E0306\n\tSTATUS_GRAPHICS_MODE_NOT_PINNED                                           NTStatus      = 0x401E0307\n\tSTATUS_GRAPHICS_INVALID_VIDPN_SOURCEMODESET                               NTStatus      = 0xC01E0308\n\tSTATUS_GRAPHICS_INVALID_VIDPN_TARGETMODESET                               NTStatus      = 0xC01E0309\n\tSTATUS_GRAPHICS_INVALID_FREQUENCY                                         NTStatus      = 0xC01E030A\n\tSTATUS_GRAPHICS_INVALID_ACTIVE_REGION                                     NTStatus      = 0xC01E030B\n\tSTATUS_GRAPHICS_INVALID_TOTAL_REGION                                      NTStatus      = 0xC01E030C\n\tSTATUS_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE                         NTStatus      = 0xC01E0310\n\tSTATUS_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE                         NTStatus      = 0xC01E0311\n\tSTATUS_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET                            NTStatus      = 0xC01E0312\n\tSTATUS_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY                                  NTStatus      = 0xC01E0313\n\tSTATUS_GRAPHICS_MODE_ALREADY_IN_MODESET                                   NTStatus      = 0xC01E0314\n\tSTATUS_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET                             NTStatus      = 0xC01E0315\n\tSTATUS_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET                             NTStatus      = 0xC01E0316\n\tSTATUS_GRAPHICS_SOURCE_ALREADY_IN_SET                                     NTStatus      = 0xC01E0317\n\tSTATUS_GRAPHICS_TARGET_ALREADY_IN_SET                                     NTStatus      = 0xC01E0318\n\tSTATUS_GRAPHICS_INVALID_VIDPN_PRESENT_PATH                                NTStatus      = 0xC01E0319\n\tSTATUS_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY                             NTStatus      = 0xC01E031A\n\tSTATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET                         NTStatus      = 0xC01E031B\n\tSTATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE                            NTStatus      = 0xC01E031C\n\tSTATUS_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET                                 NTStatus      = 0xC01E031D\n\tSTATUS_GRAPHICS_NO_PREFERRED_MODE                                         NTStatus      = 0x401E031E\n\tSTATUS_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET                             NTStatus      = 0xC01E031F\n\tSTATUS_GRAPHICS_STALE_MODESET                                             NTStatus      = 0xC01E0320\n\tSTATUS_GRAPHICS_INVALID_MONITOR_SOURCEMODESET                             NTStatus      = 0xC01E0321\n\tSTATUS_GRAPHICS_INVALID_MONITOR_SOURCE_MODE                               NTStatus      = 0xC01E0322\n\tSTATUS_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN                           NTStatus      = 0xC01E0323\n\tSTATUS_GRAPHICS_MODE_ID_MUST_BE_UNIQUE                                    NTStatus      = 0xC01E0324\n\tSTATUS_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION           NTStatus      = 0xC01E0325\n\tSTATUS_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES                   NTStatus      = 0xC01E0326\n\tSTATUS_GRAPHICS_PATH_NOT_IN_TOPOLOGY                                      NTStatus      = 0xC01E0327\n\tSTATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE                     NTStatus      = 0xC01E0328\n\tSTATUS_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET                     NTStatus      = 0xC01E0329\n\tSTATUS_GRAPHICS_INVALID_MONITORDESCRIPTORSET                              NTStatus      = 0xC01E032A\n\tSTATUS_GRAPHICS_INVALID_MONITORDESCRIPTOR                                 NTStatus      = 0xC01E032B\n\tSTATUS_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET                              NTStatus      = 0xC01E032C\n\tSTATUS_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET                          NTStatus      = 0xC01E032D\n\tSTATUS_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE                       NTStatus      = 0xC01E032E\n\tSTATUS_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE                          NTStatus      = 0xC01E032F\n\tSTATUS_GRAPHICS_RESOURCES_NOT_RELATED                                     NTStatus      = 0xC01E0330\n\tSTATUS_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE                                  NTStatus      = 0xC01E0331\n\tSTATUS_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE                                  NTStatus      = 0xC01E0332\n\tSTATUS_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET                                 NTStatus      = 0xC01E0333\n\tSTATUS_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER              NTStatus      = 0xC01E0334\n\tSTATUS_GRAPHICS_NO_VIDPNMGR                                               NTStatus      = 0xC01E0335\n\tSTATUS_GRAPHICS_NO_ACTIVE_VIDPN                                           NTStatus      = 0xC01E0336\n\tSTATUS_GRAPHICS_STALE_VIDPN_TOPOLOGY                                      NTStatus      = 0xC01E0337\n\tSTATUS_GRAPHICS_MONITOR_NOT_CONNECTED                                     NTStatus      = 0xC01E0338\n\tSTATUS_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY                                    NTStatus      = 0xC01E0339\n\tSTATUS_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE                               NTStatus      = 0xC01E033A\n\tSTATUS_GRAPHICS_INVALID_VISIBLEREGION_SIZE                                NTStatus      = 0xC01E033B\n\tSTATUS_GRAPHICS_INVALID_STRIDE                                            NTStatus      = 0xC01E033C\n\tSTATUS_GRAPHICS_INVALID_PIXELFORMAT                                       NTStatus      = 0xC01E033D\n\tSTATUS_GRAPHICS_INVALID_COLORBASIS                                        NTStatus      = 0xC01E033E\n\tSTATUS_GRAPHICS_INVALID_PIXELVALUEACCESSMODE                              NTStatus      = 0xC01E033F\n\tSTATUS_GRAPHICS_TARGET_NOT_IN_TOPOLOGY                                    NTStatus      = 0xC01E0340\n\tSTATUS_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT                        NTStatus      = 0xC01E0341\n\tSTATUS_GRAPHICS_VIDPN_SOURCE_IN_USE                                       NTStatus      = 0xC01E0342\n\tSTATUS_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN                                  NTStatus      = 0xC01E0343\n\tSTATUS_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL                           NTStatus      = 0xC01E0344\n\tSTATUS_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION              NTStatus      = 0xC01E0345\n\tSTATUS_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED        NTStatus      = 0xC01E0346\n\tSTATUS_GRAPHICS_INVALID_GAMMA_RAMP                                        NTStatus      = 0xC01E0347\n\tSTATUS_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED                                  NTStatus      = 0xC01E0348\n\tSTATUS_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED                               NTStatus      = 0xC01E0349\n\tSTATUS_GRAPHICS_MODE_NOT_IN_MODESET                                       NTStatus      = 0xC01E034A\n\tSTATUS_GRAPHICS_DATASET_IS_EMPTY                                          NTStatus      = 0x401E034B\n\tSTATUS_GRAPHICS_NO_MORE_ELEMENTS_IN_DATASET                               NTStatus      = 0x401E034C\n\tSTATUS_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON              NTStatus      = 0xC01E034D\n\tSTATUS_GRAPHICS_INVALID_PATH_CONTENT_TYPE                                 NTStatus      = 0xC01E034E\n\tSTATUS_GRAPHICS_INVALID_COPYPROTECTION_TYPE                               NTStatus      = 0xC01E034F\n\tSTATUS_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS                         NTStatus      = 0xC01E0350\n\tSTATUS_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_PINNED           NTStatus      = 0x401E0351\n\tSTATUS_GRAPHICS_INVALID_SCANLINE_ORDERING                                 NTStatus      = 0xC01E0352\n\tSTATUS_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED                              NTStatus      = 0xC01E0353\n\tSTATUS_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS                          NTStatus      = 0xC01E0354\n\tSTATUS_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT                               NTStatus      = 0xC01E0355\n\tSTATUS_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM                            NTStatus      = 0xC01E0356\n\tSTATUS_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN                         NTStatus      = 0xC01E0357\n\tSTATUS_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT                 NTStatus      = 0xC01E0358\n\tSTATUS_GRAPHICS_MAX_NUM_PATHS_REACHED                                     NTStatus      = 0xC01E0359\n\tSTATUS_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION                        NTStatus      = 0xC01E035A\n\tSTATUS_GRAPHICS_INVALID_CLIENT_TYPE                                       NTStatus      = 0xC01E035B\n\tSTATUS_GRAPHICS_CLIENTVIDPN_NOT_SET                                       NTStatus      = 0xC01E035C\n\tSTATUS_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED                         NTStatus      = 0xC01E0400\n\tSTATUS_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED                            NTStatus      = 0xC01E0401\n\tSTATUS_GRAPHICS_UNKNOWN_CHILD_STATUS                                      NTStatus      = 0x401E042F\n\tSTATUS_GRAPHICS_NOT_A_LINKED_ADAPTER                                      NTStatus      = 0xC01E0430\n\tSTATUS_GRAPHICS_LEADLINK_NOT_ENUMERATED                                   NTStatus      = 0xC01E0431\n\tSTATUS_GRAPHICS_CHAINLINKS_NOT_ENUMERATED                                 NTStatus      = 0xC01E0432\n\tSTATUS_GRAPHICS_ADAPTER_CHAIN_NOT_READY                                   NTStatus      = 0xC01E0433\n\tSTATUS_GRAPHICS_CHAINLINKS_NOT_STARTED                                    NTStatus      = 0xC01E0434\n\tSTATUS_GRAPHICS_CHAINLINKS_NOT_POWERED_ON                                 NTStatus      = 0xC01E0435\n\tSTATUS_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE                            NTStatus      = 0xC01E0436\n\tSTATUS_GRAPHICS_LEADLINK_START_DEFERRED                                   NTStatus      = 0x401E0437\n\tSTATUS_GRAPHICS_NOT_POST_DEVICE_DRIVER                                    NTStatus      = 0xC01E0438\n\tSTATUS_GRAPHICS_POLLING_TOO_FREQUENTLY                                    NTStatus      = 0x401E0439\n\tSTATUS_GRAPHICS_START_DEFERRED                                            NTStatus      = 0x401E043A\n\tSTATUS_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED                               NTStatus      = 0xC01E043B\n\tSTATUS_GRAPHICS_DEPENDABLE_CHILD_STATUS                                   NTStatus      = 0x401E043C\n\tSTATUS_GRAPHICS_OPM_NOT_SUPPORTED                                         NTStatus      = 0xC01E0500\n\tSTATUS_GRAPHICS_COPP_NOT_SUPPORTED                                        NTStatus      = 0xC01E0501\n\tSTATUS_GRAPHICS_UAB_NOT_SUPPORTED                                         NTStatus      = 0xC01E0502\n\tSTATUS_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS                          NTStatus      = 0xC01E0503\n\tSTATUS_GRAPHICS_OPM_NO_PROTECTED_OUTPUTS_EXIST                            NTStatus      = 0xC01E0505\n\tSTATUS_GRAPHICS_OPM_INTERNAL_ERROR                                        NTStatus      = 0xC01E050B\n\tSTATUS_GRAPHICS_OPM_INVALID_HANDLE                                        NTStatus      = 0xC01E050C\n\tSTATUS_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH                            NTStatus      = 0xC01E050E\n\tSTATUS_GRAPHICS_OPM_SPANNING_MODE_ENABLED                                 NTStatus      = 0xC01E050F\n\tSTATUS_GRAPHICS_OPM_THEATER_MODE_ENABLED                                  NTStatus      = 0xC01E0510\n\tSTATUS_GRAPHICS_PVP_HFS_FAILED                                            NTStatus      = 0xC01E0511\n\tSTATUS_GRAPHICS_OPM_INVALID_SRM                                           NTStatus      = 0xC01E0512\n\tSTATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP                          NTStatus      = 0xC01E0513\n\tSTATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP                           NTStatus      = 0xC01E0514\n\tSTATUS_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA                         NTStatus      = 0xC01E0515\n\tSTATUS_GRAPHICS_OPM_HDCP_SRM_NEVER_SET                                    NTStatus      = 0xC01E0516\n\tSTATUS_GRAPHICS_OPM_RESOLUTION_TOO_HIGH                                   NTStatus      = 0xC01E0517\n\tSTATUS_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE                      NTStatus      = 0xC01E0518\n\tSTATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_NO_LONGER_EXISTS                     NTStatus      = 0xC01E051A\n\tSTATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS         NTStatus      = 0xC01E051C\n\tSTATUS_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST                           NTStatus      = 0xC01E051D\n\tSTATUS_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR                                 NTStatus      = 0xC01E051E\n\tSTATUS_GRAPHICS_OPM_PROTECTED_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS          NTStatus      = 0xC01E051F\n\tSTATUS_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED                               NTStatus      = 0xC01E0520\n\tSTATUS_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST                         NTStatus      = 0xC01E0521\n\tSTATUS_GRAPHICS_I2C_NOT_SUPPORTED                                         NTStatus      = 0xC01E0580\n\tSTATUS_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST                                 NTStatus      = 0xC01E0581\n\tSTATUS_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA                               NTStatus      = 0xC01E0582\n\tSTATUS_GRAPHICS_I2C_ERROR_RECEIVING_DATA                                  NTStatus      = 0xC01E0583\n\tSTATUS_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED                                   NTStatus      = 0xC01E0584\n\tSTATUS_GRAPHICS_DDCCI_INVALID_DATA                                        NTStatus      = 0xC01E0585\n\tSTATUS_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE         NTStatus      = 0xC01E0586\n\tSTATUS_GRAPHICS_DDCCI_INVALID_CAPABILITIES_STRING                         NTStatus      = 0xC01E0587\n\tSTATUS_GRAPHICS_MCA_INTERNAL_ERROR                                        NTStatus      = 0xC01E0588\n\tSTATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND                             NTStatus      = 0xC01E0589\n\tSTATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH                              NTStatus      = 0xC01E058A\n\tSTATUS_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM                            NTStatus      = 0xC01E058B\n\tSTATUS_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE                           NTStatus      = 0xC01E058C\n\tSTATUS_GRAPHICS_MONITOR_NO_LONGER_EXISTS                                  NTStatus      = 0xC01E058D\n\tSTATUS_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED                            NTStatus      = 0xC01E05E0\n\tSTATUS_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME                     NTStatus      = 0xC01E05E1\n\tSTATUS_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP                    NTStatus      = 0xC01E05E2\n\tSTATUS_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED                           NTStatus      = 0xC01E05E3\n\tSTATUS_GRAPHICS_INVALID_POINTER                                           NTStatus      = 0xC01E05E4\n\tSTATUS_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE                  NTStatus      = 0xC01E05E5\n\tSTATUS_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL                                 NTStatus      = 0xC01E05E6\n\tSTATUS_GRAPHICS_INTERNAL_ERROR                                            NTStatus      = 0xC01E05E7\n\tSTATUS_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS                           NTStatus      = 0xC01E05E8\n\tSTATUS_FVE_LOCKED_VOLUME                                                  NTStatus      = 0xC0210000\n\tSTATUS_FVE_NOT_ENCRYPTED                                                  NTStatus      = 0xC0210001\n\tSTATUS_FVE_BAD_INFORMATION                                                NTStatus      = 0xC0210002\n\tSTATUS_FVE_TOO_SMALL                                                      NTStatus      = 0xC0210003\n\tSTATUS_FVE_FAILED_WRONG_FS                                                NTStatus      = 0xC0210004\n\tSTATUS_FVE_BAD_PARTITION_SIZE                                             NTStatus      = 0xC0210005\n\tSTATUS_FVE_FS_NOT_EXTENDED                                                NTStatus      = 0xC0210006\n\tSTATUS_FVE_FS_MOUNTED                                                     NTStatus      = 0xC0210007\n\tSTATUS_FVE_NO_LICENSE                                                     NTStatus      = 0xC0210008\n\tSTATUS_FVE_ACTION_NOT_ALLOWED                                             NTStatus      = 0xC0210009\n\tSTATUS_FVE_BAD_DATA                                                       NTStatus      = 0xC021000A\n\tSTATUS_FVE_VOLUME_NOT_BOUND                                               NTStatus      = 0xC021000B\n\tSTATUS_FVE_NOT_DATA_VOLUME                                                NTStatus      = 0xC021000C\n\tSTATUS_FVE_CONV_READ_ERROR                                                NTStatus      = 0xC021000D\n\tSTATUS_FVE_CONV_WRITE_ERROR                                               NTStatus      = 0xC021000E\n\tSTATUS_FVE_OVERLAPPED_UPDATE                                              NTStatus      = 0xC021000F\n\tSTATUS_FVE_FAILED_SECTOR_SIZE                                             NTStatus      = 0xC0210010\n\tSTATUS_FVE_FAILED_AUTHENTICATION                                          NTStatus      = 0xC0210011\n\tSTATUS_FVE_NOT_OS_VOLUME                                                  NTStatus      = 0xC0210012\n\tSTATUS_FVE_KEYFILE_NOT_FOUND                                              NTStatus      = 0xC0210013\n\tSTATUS_FVE_KEYFILE_INVALID                                                NTStatus      = 0xC0210014\n\tSTATUS_FVE_KEYFILE_NO_VMK                                                 NTStatus      = 0xC0210015\n\tSTATUS_FVE_TPM_DISABLED                                                   NTStatus      = 0xC0210016\n\tSTATUS_FVE_TPM_SRK_AUTH_NOT_ZERO                                          NTStatus      = 0xC0210017\n\tSTATUS_FVE_TPM_INVALID_PCR                                                NTStatus      = 0xC0210018\n\tSTATUS_FVE_TPM_NO_VMK                                                     NTStatus      = 0xC0210019\n\tSTATUS_FVE_PIN_INVALID                                                    NTStatus      = 0xC021001A\n\tSTATUS_FVE_AUTH_INVALID_APPLICATION                                       NTStatus      = 0xC021001B\n\tSTATUS_FVE_AUTH_INVALID_CONFIG                                            NTStatus      = 0xC021001C\n\tSTATUS_FVE_DEBUGGER_ENABLED                                               NTStatus      = 0xC021001D\n\tSTATUS_FVE_DRY_RUN_FAILED                                                 NTStatus      = 0xC021001E\n\tSTATUS_FVE_BAD_METADATA_POINTER                                           NTStatus      = 0xC021001F\n\tSTATUS_FVE_OLD_METADATA_COPY                                              NTStatus      = 0xC0210020\n\tSTATUS_FVE_REBOOT_REQUIRED                                                NTStatus      = 0xC0210021\n\tSTATUS_FVE_RAW_ACCESS                                                     NTStatus      = 0xC0210022\n\tSTATUS_FVE_RAW_BLOCKED                                                    NTStatus      = 0xC0210023\n\tSTATUS_FVE_NO_AUTOUNLOCK_MASTER_KEY                                       NTStatus      = 0xC0210024\n\tSTATUS_FVE_MOR_FAILED                                                     NTStatus      = 0xC0210025\n\tSTATUS_FVE_NO_FEATURE_LICENSE                                             NTStatus      = 0xC0210026\n\tSTATUS_FVE_POLICY_USER_DISABLE_RDV_NOT_ALLOWED                            NTStatus      = 0xC0210027\n\tSTATUS_FVE_CONV_RECOVERY_FAILED                                           NTStatus      = 0xC0210028\n\tSTATUS_FVE_VIRTUALIZED_SPACE_TOO_BIG                                      NTStatus      = 0xC0210029\n\tSTATUS_FVE_INVALID_DATUM_TYPE                                             NTStatus      = 0xC021002A\n\tSTATUS_FVE_VOLUME_TOO_SMALL                                               NTStatus      = 0xC0210030\n\tSTATUS_FVE_ENH_PIN_INVALID                                                NTStatus      = 0xC0210031\n\tSTATUS_FVE_FULL_ENCRYPTION_NOT_ALLOWED_ON_TP_STORAGE                      NTStatus      = 0xC0210032\n\tSTATUS_FVE_WIPE_NOT_ALLOWED_ON_TP_STORAGE                                 NTStatus      = 0xC0210033\n\tSTATUS_FVE_NOT_ALLOWED_ON_CSV_STACK                                       NTStatus      = 0xC0210034\n\tSTATUS_FVE_NOT_ALLOWED_ON_CLUSTER                                         NTStatus      = 0xC0210035\n\tSTATUS_FVE_NOT_ALLOWED_TO_UPGRADE_WHILE_CONVERTING                        NTStatus      = 0xC0210036\n\tSTATUS_FVE_WIPE_CANCEL_NOT_APPLICABLE                                     NTStatus      = 0xC0210037\n\tSTATUS_FVE_EDRIVE_DRY_RUN_FAILED                                          NTStatus      = 0xC0210038\n\tSTATUS_FVE_SECUREBOOT_DISABLED                                            NTStatus      = 0xC0210039\n\tSTATUS_FVE_SECUREBOOT_CONFIG_CHANGE                                       NTStatus      = 0xC021003A\n\tSTATUS_FVE_DEVICE_LOCKEDOUT                                               NTStatus      = 0xC021003B\n\tSTATUS_FVE_VOLUME_EXTEND_PREVENTS_EOW_DECRYPT                             NTStatus      = 0xC021003C\n\tSTATUS_FVE_NOT_DE_VOLUME                                                  NTStatus      = 0xC021003D\n\tSTATUS_FVE_PROTECTION_DISABLED                                            NTStatus      = 0xC021003E\n\tSTATUS_FVE_PROTECTION_CANNOT_BE_DISABLED                                  NTStatus      = 0xC021003F\n\tSTATUS_FVE_OSV_KSR_NOT_ALLOWED                                            NTStatus      = 0xC0210040\n\tSTATUS_FWP_CALLOUT_NOT_FOUND                                              NTStatus      = 0xC0220001\n\tSTATUS_FWP_CONDITION_NOT_FOUND                                            NTStatus      = 0xC0220002\n\tSTATUS_FWP_FILTER_NOT_FOUND                                               NTStatus      = 0xC0220003\n\tSTATUS_FWP_LAYER_NOT_FOUND                                                NTStatus      = 0xC0220004\n\tSTATUS_FWP_PROVIDER_NOT_FOUND                                             NTStatus      = 0xC0220005\n\tSTATUS_FWP_PROVIDER_CONTEXT_NOT_FOUND                                     NTStatus      = 0xC0220006\n\tSTATUS_FWP_SUBLAYER_NOT_FOUND                                             NTStatus      = 0xC0220007\n\tSTATUS_FWP_NOT_FOUND                                                      NTStatus      = 0xC0220008\n\tSTATUS_FWP_ALREADY_EXISTS                                                 NTStatus      = 0xC0220009\n\tSTATUS_FWP_IN_USE                                                         NTStatus      = 0xC022000A\n\tSTATUS_FWP_DYNAMIC_SESSION_IN_PROGRESS                                    NTStatus      = 0xC022000B\n\tSTATUS_FWP_WRONG_SESSION                                                  NTStatus      = 0xC022000C\n\tSTATUS_FWP_NO_TXN_IN_PROGRESS                                             NTStatus      = 0xC022000D\n\tSTATUS_FWP_TXN_IN_PROGRESS                                                NTStatus      = 0xC022000E\n\tSTATUS_FWP_TXN_ABORTED                                                    NTStatus      = 0xC022000F\n\tSTATUS_FWP_SESSION_ABORTED                                                NTStatus      = 0xC0220010\n\tSTATUS_FWP_INCOMPATIBLE_TXN                                               NTStatus      = 0xC0220011\n\tSTATUS_FWP_TIMEOUT                                                        NTStatus      = 0xC0220012\n\tSTATUS_FWP_NET_EVENTS_DISABLED                                            NTStatus      = 0xC0220013\n\tSTATUS_FWP_INCOMPATIBLE_LAYER                                             NTStatus      = 0xC0220014\n\tSTATUS_FWP_KM_CLIENTS_ONLY                                                NTStatus      = 0xC0220015\n\tSTATUS_FWP_LIFETIME_MISMATCH                                              NTStatus      = 0xC0220016\n\tSTATUS_FWP_BUILTIN_OBJECT                                                 NTStatus      = 0xC0220017\n\tSTATUS_FWP_TOO_MANY_CALLOUTS                                              NTStatus      = 0xC0220018\n\tSTATUS_FWP_NOTIFICATION_DROPPED                                           NTStatus      = 0xC0220019\n\tSTATUS_FWP_TRAFFIC_MISMATCH                                               NTStatus      = 0xC022001A\n\tSTATUS_FWP_INCOMPATIBLE_SA_STATE                                          NTStatus      = 0xC022001B\n\tSTATUS_FWP_NULL_POINTER                                                   NTStatus      = 0xC022001C\n\tSTATUS_FWP_INVALID_ENUMERATOR                                             NTStatus      = 0xC022001D\n\tSTATUS_FWP_INVALID_FLAGS                                                  NTStatus      = 0xC022001E\n\tSTATUS_FWP_INVALID_NET_MASK                                               NTStatus      = 0xC022001F\n\tSTATUS_FWP_INVALID_RANGE                                                  NTStatus      = 0xC0220020\n\tSTATUS_FWP_INVALID_INTERVAL                                               NTStatus      = 0xC0220021\n\tSTATUS_FWP_ZERO_LENGTH_ARRAY                                              NTStatus      = 0xC0220022\n\tSTATUS_FWP_NULL_DISPLAY_NAME                                              NTStatus      = 0xC0220023\n\tSTATUS_FWP_INVALID_ACTION_TYPE                                            NTStatus      = 0xC0220024\n\tSTATUS_FWP_INVALID_WEIGHT                                                 NTStatus      = 0xC0220025\n\tSTATUS_FWP_MATCH_TYPE_MISMATCH                                            NTStatus      = 0xC0220026\n\tSTATUS_FWP_TYPE_MISMATCH                                                  NTStatus      = 0xC0220027\n\tSTATUS_FWP_OUT_OF_BOUNDS                                                  NTStatus      = 0xC0220028\n\tSTATUS_FWP_RESERVED                                                       NTStatus      = 0xC0220029\n\tSTATUS_FWP_DUPLICATE_CONDITION                                            NTStatus      = 0xC022002A\n\tSTATUS_FWP_DUPLICATE_KEYMOD                                               NTStatus      = 0xC022002B\n\tSTATUS_FWP_ACTION_INCOMPATIBLE_WITH_LAYER                                 NTStatus      = 0xC022002C\n\tSTATUS_FWP_ACTION_INCOMPATIBLE_WITH_SUBLAYER                              NTStatus      = 0xC022002D\n\tSTATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_LAYER                                NTStatus      = 0xC022002E\n\tSTATUS_FWP_CONTEXT_INCOMPATIBLE_WITH_CALLOUT                              NTStatus      = 0xC022002F\n\tSTATUS_FWP_INCOMPATIBLE_AUTH_METHOD                                       NTStatus      = 0xC0220030\n\tSTATUS_FWP_INCOMPATIBLE_DH_GROUP                                          NTStatus      = 0xC0220031\n\tSTATUS_FWP_EM_NOT_SUPPORTED                                               NTStatus      = 0xC0220032\n\tSTATUS_FWP_NEVER_MATCH                                                    NTStatus      = 0xC0220033\n\tSTATUS_FWP_PROVIDER_CONTEXT_MISMATCH                                      NTStatus      = 0xC0220034\n\tSTATUS_FWP_INVALID_PARAMETER                                              NTStatus      = 0xC0220035\n\tSTATUS_FWP_TOO_MANY_SUBLAYERS                                             NTStatus      = 0xC0220036\n\tSTATUS_FWP_CALLOUT_NOTIFICATION_FAILED                                    NTStatus      = 0xC0220037\n\tSTATUS_FWP_INVALID_AUTH_TRANSFORM                                         NTStatus      = 0xC0220038\n\tSTATUS_FWP_INVALID_CIPHER_TRANSFORM                                       NTStatus      = 0xC0220039\n\tSTATUS_FWP_INCOMPATIBLE_CIPHER_TRANSFORM                                  NTStatus      = 0xC022003A\n\tSTATUS_FWP_INVALID_TRANSFORM_COMBINATION                                  NTStatus      = 0xC022003B\n\tSTATUS_FWP_DUPLICATE_AUTH_METHOD                                          NTStatus      = 0xC022003C\n\tSTATUS_FWP_INVALID_TUNNEL_ENDPOINT                                        NTStatus      = 0xC022003D\n\tSTATUS_FWP_L2_DRIVER_NOT_READY                                            NTStatus      = 0xC022003E\n\tSTATUS_FWP_KEY_DICTATOR_ALREADY_REGISTERED                                NTStatus      = 0xC022003F\n\tSTATUS_FWP_KEY_DICTATION_INVALID_KEYING_MATERIAL                          NTStatus      = 0xC0220040\n\tSTATUS_FWP_CONNECTIONS_DISABLED                                           NTStatus      = 0xC0220041\n\tSTATUS_FWP_INVALID_DNS_NAME                                               NTStatus      = 0xC0220042\n\tSTATUS_FWP_STILL_ON                                                       NTStatus      = 0xC0220043\n\tSTATUS_FWP_IKEEXT_NOT_RUNNING                                             NTStatus      = 0xC0220044\n\tSTATUS_FWP_TCPIP_NOT_READY                                                NTStatus      = 0xC0220100\n\tSTATUS_FWP_INJECT_HANDLE_CLOSING                                          NTStatus      = 0xC0220101\n\tSTATUS_FWP_INJECT_HANDLE_STALE                                            NTStatus      = 0xC0220102\n\tSTATUS_FWP_CANNOT_PEND                                                    NTStatus      = 0xC0220103\n\tSTATUS_FWP_DROP_NOICMP                                                    NTStatus      = 0xC0220104\n\tSTATUS_NDIS_CLOSING                                                       NTStatus      = 0xC0230002\n\tSTATUS_NDIS_BAD_VERSION                                                   NTStatus      = 0xC0230004\n\tSTATUS_NDIS_BAD_CHARACTERISTICS                                           NTStatus      = 0xC0230005\n\tSTATUS_NDIS_ADAPTER_NOT_FOUND                                             NTStatus      = 0xC0230006\n\tSTATUS_NDIS_OPEN_FAILED                                                   NTStatus      = 0xC0230007\n\tSTATUS_NDIS_DEVICE_FAILED                                                 NTStatus      = 0xC0230008\n\tSTATUS_NDIS_MULTICAST_FULL                                                NTStatus      = 0xC0230009\n\tSTATUS_NDIS_MULTICAST_EXISTS                                              NTStatus      = 0xC023000A\n\tSTATUS_NDIS_MULTICAST_NOT_FOUND                                           NTStatus      = 0xC023000B\n\tSTATUS_NDIS_REQUEST_ABORTED                                               NTStatus      = 0xC023000C\n\tSTATUS_NDIS_RESET_IN_PROGRESS                                             NTStatus      = 0xC023000D\n\tSTATUS_NDIS_NOT_SUPPORTED                                                 NTStatus      = 0xC02300BB\n\tSTATUS_NDIS_INVALID_PACKET                                                NTStatus      = 0xC023000F\n\tSTATUS_NDIS_ADAPTER_NOT_READY                                             NTStatus      = 0xC0230011\n\tSTATUS_NDIS_INVALID_LENGTH                                                NTStatus      = 0xC0230014\n\tSTATUS_NDIS_INVALID_DATA                                                  NTStatus      = 0xC0230015\n\tSTATUS_NDIS_BUFFER_TOO_SHORT                                              NTStatus      = 0xC0230016\n\tSTATUS_NDIS_INVALID_OID                                                   NTStatus      = 0xC0230017\n\tSTATUS_NDIS_ADAPTER_REMOVED                                               NTStatus      = 0xC0230018\n\tSTATUS_NDIS_UNSUPPORTED_MEDIA                                             NTStatus      = 0xC0230019\n\tSTATUS_NDIS_GROUP_ADDRESS_IN_USE                                          NTStatus      = 0xC023001A\n\tSTATUS_NDIS_FILE_NOT_FOUND                                                NTStatus      = 0xC023001B\n\tSTATUS_NDIS_ERROR_READING_FILE                                            NTStatus      = 0xC023001C\n\tSTATUS_NDIS_ALREADY_MAPPED                                                NTStatus      = 0xC023001D\n\tSTATUS_NDIS_RESOURCE_CONFLICT                                             NTStatus      = 0xC023001E\n\tSTATUS_NDIS_MEDIA_DISCONNECTED                                            NTStatus      = 0xC023001F\n\tSTATUS_NDIS_INVALID_ADDRESS                                               NTStatus      = 0xC0230022\n\tSTATUS_NDIS_INVALID_DEVICE_REQUEST                                        NTStatus      = 0xC0230010\n\tSTATUS_NDIS_PAUSED                                                        NTStatus      = 0xC023002A\n\tSTATUS_NDIS_INTERFACE_NOT_FOUND                                           NTStatus      = 0xC023002B\n\tSTATUS_NDIS_UNSUPPORTED_REVISION                                          NTStatus      = 0xC023002C\n\tSTATUS_NDIS_INVALID_PORT                                                  NTStatus      = 0xC023002D\n\tSTATUS_NDIS_INVALID_PORT_STATE                                            NTStatus      = 0xC023002E\n\tSTATUS_NDIS_LOW_POWER_STATE                                               NTStatus      = 0xC023002F\n\tSTATUS_NDIS_REINIT_REQUIRED                                               NTStatus      = 0xC0230030\n\tSTATUS_NDIS_NO_QUEUES                                                     NTStatus      = 0xC0230031\n\tSTATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED                                     NTStatus      = 0xC0232000\n\tSTATUS_NDIS_DOT11_MEDIA_IN_USE                                            NTStatus      = 0xC0232001\n\tSTATUS_NDIS_DOT11_POWER_STATE_INVALID                                     NTStatus      = 0xC0232002\n\tSTATUS_NDIS_PM_WOL_PATTERN_LIST_FULL                                      NTStatus      = 0xC0232003\n\tSTATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL                                 NTStatus      = 0xC0232004\n\tSTATUS_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE                      NTStatus      = 0xC0232005\n\tSTATUS_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE                         NTStatus      = 0xC0232006\n\tSTATUS_NDIS_DOT11_AP_CHANNEL_NOT_ALLOWED                                  NTStatus      = 0xC0232007\n\tSTATUS_NDIS_DOT11_AP_BAND_NOT_ALLOWED                                     NTStatus      = 0xC0232008\n\tSTATUS_NDIS_INDICATION_REQUIRED                                           NTStatus      = 0x40230001\n\tSTATUS_NDIS_OFFLOAD_POLICY                                                NTStatus      = 0xC023100F\n\tSTATUS_NDIS_OFFLOAD_CONNECTION_REJECTED                                   NTStatus      = 0xC0231012\n\tSTATUS_NDIS_OFFLOAD_PATH_REJECTED                                         NTStatus      = 0xC0231013\n\tSTATUS_TPM_ERROR_MASK                                                     NTStatus      = 0xC0290000\n\tSTATUS_TPM_AUTHFAIL                                                       NTStatus      = 0xC0290001\n\tSTATUS_TPM_BADINDEX                                                       NTStatus      = 0xC0290002\n\tSTATUS_TPM_BAD_PARAMETER                                                  NTStatus      = 0xC0290003\n\tSTATUS_TPM_AUDITFAILURE                                                   NTStatus      = 0xC0290004\n\tSTATUS_TPM_CLEAR_DISABLED                                                 NTStatus      = 0xC0290005\n\tSTATUS_TPM_DEACTIVATED                                                    NTStatus      = 0xC0290006\n\tSTATUS_TPM_DISABLED                                                       NTStatus      = 0xC0290007\n\tSTATUS_TPM_DISABLED_CMD                                                   NTStatus      = 0xC0290008\n\tSTATUS_TPM_FAIL                                                           NTStatus      = 0xC0290009\n\tSTATUS_TPM_BAD_ORDINAL                                                    NTStatus      = 0xC029000A\n\tSTATUS_TPM_INSTALL_DISABLED                                               NTStatus      = 0xC029000B\n\tSTATUS_TPM_INVALID_KEYHANDLE                                              NTStatus      = 0xC029000C\n\tSTATUS_TPM_KEYNOTFOUND                                                    NTStatus      = 0xC029000D\n\tSTATUS_TPM_INAPPROPRIATE_ENC                                              NTStatus      = 0xC029000E\n\tSTATUS_TPM_MIGRATEFAIL                                                    NTStatus      = 0xC029000F\n\tSTATUS_TPM_INVALID_PCR_INFO                                               NTStatus      = 0xC0290010\n\tSTATUS_TPM_NOSPACE                                                        NTStatus      = 0xC0290011\n\tSTATUS_TPM_NOSRK                                                          NTStatus      = 0xC0290012\n\tSTATUS_TPM_NOTSEALED_BLOB                                                 NTStatus      = 0xC0290013\n\tSTATUS_TPM_OWNER_SET                                                      NTStatus      = 0xC0290014\n\tSTATUS_TPM_RESOURCES                                                      NTStatus      = 0xC0290015\n\tSTATUS_TPM_SHORTRANDOM                                                    NTStatus      = 0xC0290016\n\tSTATUS_TPM_SIZE                                                           NTStatus      = 0xC0290017\n\tSTATUS_TPM_WRONGPCRVAL                                                    NTStatus      = 0xC0290018\n\tSTATUS_TPM_BAD_PARAM_SIZE                                                 NTStatus      = 0xC0290019\n\tSTATUS_TPM_SHA_THREAD                                                     NTStatus      = 0xC029001A\n\tSTATUS_TPM_SHA_ERROR                                                      NTStatus      = 0xC029001B\n\tSTATUS_TPM_FAILEDSELFTEST                                                 NTStatus      = 0xC029001C\n\tSTATUS_TPM_AUTH2FAIL                                                      NTStatus      = 0xC029001D\n\tSTATUS_TPM_BADTAG                                                         NTStatus      = 0xC029001E\n\tSTATUS_TPM_IOERROR                                                        NTStatus      = 0xC029001F\n\tSTATUS_TPM_ENCRYPT_ERROR                                                  NTStatus      = 0xC0290020\n\tSTATUS_TPM_DECRYPT_ERROR                                                  NTStatus      = 0xC0290021\n\tSTATUS_TPM_INVALID_AUTHHANDLE                                             NTStatus      = 0xC0290022\n\tSTATUS_TPM_NO_ENDORSEMENT                                                 NTStatus      = 0xC0290023\n\tSTATUS_TPM_INVALID_KEYUSAGE                                               NTStatus      = 0xC0290024\n\tSTATUS_TPM_WRONG_ENTITYTYPE                                               NTStatus      = 0xC0290025\n\tSTATUS_TPM_INVALID_POSTINIT                                               NTStatus      = 0xC0290026\n\tSTATUS_TPM_INAPPROPRIATE_SIG                                              NTStatus      = 0xC0290027\n\tSTATUS_TPM_BAD_KEY_PROPERTY                                               NTStatus      = 0xC0290028\n\tSTATUS_TPM_BAD_MIGRATION                                                  NTStatus      = 0xC0290029\n\tSTATUS_TPM_BAD_SCHEME                                                     NTStatus      = 0xC029002A\n\tSTATUS_TPM_BAD_DATASIZE                                                   NTStatus      = 0xC029002B\n\tSTATUS_TPM_BAD_MODE                                                       NTStatus      = 0xC029002C\n\tSTATUS_TPM_BAD_PRESENCE                                                   NTStatus      = 0xC029002D\n\tSTATUS_TPM_BAD_VERSION                                                    NTStatus      = 0xC029002E\n\tSTATUS_TPM_NO_WRAP_TRANSPORT                                              NTStatus      = 0xC029002F\n\tSTATUS_TPM_AUDITFAIL_UNSUCCESSFUL                                         NTStatus      = 0xC0290030\n\tSTATUS_TPM_AUDITFAIL_SUCCESSFUL                                           NTStatus      = 0xC0290031\n\tSTATUS_TPM_NOTRESETABLE                                                   NTStatus      = 0xC0290032\n\tSTATUS_TPM_NOTLOCAL                                                       NTStatus      = 0xC0290033\n\tSTATUS_TPM_BAD_TYPE                                                       NTStatus      = 0xC0290034\n\tSTATUS_TPM_INVALID_RESOURCE                                               NTStatus      = 0xC0290035\n\tSTATUS_TPM_NOTFIPS                                                        NTStatus      = 0xC0290036\n\tSTATUS_TPM_INVALID_FAMILY                                                 NTStatus      = 0xC0290037\n\tSTATUS_TPM_NO_NV_PERMISSION                                               NTStatus      = 0xC0290038\n\tSTATUS_TPM_REQUIRES_SIGN                                                  NTStatus      = 0xC0290039\n\tSTATUS_TPM_KEY_NOTSUPPORTED                                               NTStatus      = 0xC029003A\n\tSTATUS_TPM_AUTH_CONFLICT                                                  NTStatus      = 0xC029003B\n\tSTATUS_TPM_AREA_LOCKED                                                    NTStatus      = 0xC029003C\n\tSTATUS_TPM_BAD_LOCALITY                                                   NTStatus      = 0xC029003D\n\tSTATUS_TPM_READ_ONLY                                                      NTStatus      = 0xC029003E\n\tSTATUS_TPM_PER_NOWRITE                                                    NTStatus      = 0xC029003F\n\tSTATUS_TPM_FAMILYCOUNT                                                    NTStatus      = 0xC0290040\n\tSTATUS_TPM_WRITE_LOCKED                                                   NTStatus      = 0xC0290041\n\tSTATUS_TPM_BAD_ATTRIBUTES                                                 NTStatus      = 0xC0290042\n\tSTATUS_TPM_INVALID_STRUCTURE                                              NTStatus      = 0xC0290043\n\tSTATUS_TPM_KEY_OWNER_CONTROL                                              NTStatus      = 0xC0290044\n\tSTATUS_TPM_BAD_COUNTER                                                    NTStatus      = 0xC0290045\n\tSTATUS_TPM_NOT_FULLWRITE                                                  NTStatus      = 0xC0290046\n\tSTATUS_TPM_CONTEXT_GAP                                                    NTStatus      = 0xC0290047\n\tSTATUS_TPM_MAXNVWRITES                                                    NTStatus      = 0xC0290048\n\tSTATUS_TPM_NOOPERATOR                                                     NTStatus      = 0xC0290049\n\tSTATUS_TPM_RESOURCEMISSING                                                NTStatus      = 0xC029004A\n\tSTATUS_TPM_DELEGATE_LOCK                                                  NTStatus      = 0xC029004B\n\tSTATUS_TPM_DELEGATE_FAMILY                                                NTStatus      = 0xC029004C\n\tSTATUS_TPM_DELEGATE_ADMIN                                                 NTStatus      = 0xC029004D\n\tSTATUS_TPM_TRANSPORT_NOTEXCLUSIVE                                         NTStatus      = 0xC029004E\n\tSTATUS_TPM_OWNER_CONTROL                                                  NTStatus      = 0xC029004F\n\tSTATUS_TPM_DAA_RESOURCES                                                  NTStatus      = 0xC0290050\n\tSTATUS_TPM_DAA_INPUT_DATA0                                                NTStatus      = 0xC0290051\n\tSTATUS_TPM_DAA_INPUT_DATA1                                                NTStatus      = 0xC0290052\n\tSTATUS_TPM_DAA_ISSUER_SETTINGS                                            NTStatus      = 0xC0290053\n\tSTATUS_TPM_DAA_TPM_SETTINGS                                               NTStatus      = 0xC0290054\n\tSTATUS_TPM_DAA_STAGE                                                      NTStatus      = 0xC0290055\n\tSTATUS_TPM_DAA_ISSUER_VALIDITY                                            NTStatus      = 0xC0290056\n\tSTATUS_TPM_DAA_WRONG_W                                                    NTStatus      = 0xC0290057\n\tSTATUS_TPM_BAD_HANDLE                                                     NTStatus      = 0xC0290058\n\tSTATUS_TPM_BAD_DELEGATE                                                   NTStatus      = 0xC0290059\n\tSTATUS_TPM_BADCONTEXT                                                     NTStatus      = 0xC029005A\n\tSTATUS_TPM_TOOMANYCONTEXTS                                                NTStatus      = 0xC029005B\n\tSTATUS_TPM_MA_TICKET_SIGNATURE                                            NTStatus      = 0xC029005C\n\tSTATUS_TPM_MA_DESTINATION                                                 NTStatus      = 0xC029005D\n\tSTATUS_TPM_MA_SOURCE                                                      NTStatus      = 0xC029005E\n\tSTATUS_TPM_MA_AUTHORITY                                                   NTStatus      = 0xC029005F\n\tSTATUS_TPM_PERMANENTEK                                                    NTStatus      = 0xC0290061\n\tSTATUS_TPM_BAD_SIGNATURE                                                  NTStatus      = 0xC0290062\n\tSTATUS_TPM_NOCONTEXTSPACE                                                 NTStatus      = 0xC0290063\n\tSTATUS_TPM_20_E_ASYMMETRIC                                                NTStatus      = 0xC0290081\n\tSTATUS_TPM_20_E_ATTRIBUTES                                                NTStatus      = 0xC0290082\n\tSTATUS_TPM_20_E_HASH                                                      NTStatus      = 0xC0290083\n\tSTATUS_TPM_20_E_VALUE                                                     NTStatus      = 0xC0290084\n\tSTATUS_TPM_20_E_HIERARCHY                                                 NTStatus      = 0xC0290085\n\tSTATUS_TPM_20_E_KEY_SIZE                                                  NTStatus      = 0xC0290087\n\tSTATUS_TPM_20_E_MGF                                                       NTStatus      = 0xC0290088\n\tSTATUS_TPM_20_E_MODE                                                      NTStatus      = 0xC0290089\n\tSTATUS_TPM_20_E_TYPE                                                      NTStatus      = 0xC029008A\n\tSTATUS_TPM_20_E_HANDLE                                                    NTStatus      = 0xC029008B\n\tSTATUS_TPM_20_E_KDF                                                       NTStatus      = 0xC029008C\n\tSTATUS_TPM_20_E_RANGE                                                     NTStatus      = 0xC029008D\n\tSTATUS_TPM_20_E_AUTH_FAIL                                                 NTStatus      = 0xC029008E\n\tSTATUS_TPM_20_E_NONCE                                                     NTStatus      = 0xC029008F\n\tSTATUS_TPM_20_E_PP                                                        NTStatus      = 0xC0290090\n\tSTATUS_TPM_20_E_SCHEME                                                    NTStatus      = 0xC0290092\n\tSTATUS_TPM_20_E_SIZE                                                      NTStatus      = 0xC0290095\n\tSTATUS_TPM_20_E_SYMMETRIC                                                 NTStatus      = 0xC0290096\n\tSTATUS_TPM_20_E_TAG                                                       NTStatus      = 0xC0290097\n\tSTATUS_TPM_20_E_SELECTOR                                                  NTStatus      = 0xC0290098\n\tSTATUS_TPM_20_E_INSUFFICIENT                                              NTStatus      = 0xC029009A\n\tSTATUS_TPM_20_E_SIGNATURE                                                 NTStatus      = 0xC029009B\n\tSTATUS_TPM_20_E_KEY                                                       NTStatus      = 0xC029009C\n\tSTATUS_TPM_20_E_POLICY_FAIL                                               NTStatus      = 0xC029009D\n\tSTATUS_TPM_20_E_INTEGRITY                                                 NTStatus      = 0xC029009F\n\tSTATUS_TPM_20_E_TICKET                                                    NTStatus      = 0xC02900A0\n\tSTATUS_TPM_20_E_RESERVED_BITS                                             NTStatus      = 0xC02900A1\n\tSTATUS_TPM_20_E_BAD_AUTH                                                  NTStatus      = 0xC02900A2\n\tSTATUS_TPM_20_E_EXPIRED                                                   NTStatus      = 0xC02900A3\n\tSTATUS_TPM_20_E_POLICY_CC                                                 NTStatus      = 0xC02900A4\n\tSTATUS_TPM_20_E_BINDING                                                   NTStatus      = 0xC02900A5\n\tSTATUS_TPM_20_E_CURVE                                                     NTStatus      = 0xC02900A6\n\tSTATUS_TPM_20_E_ECC_POINT                                                 NTStatus      = 0xC02900A7\n\tSTATUS_TPM_20_E_INITIALIZE                                                NTStatus      = 0xC0290100\n\tSTATUS_TPM_20_E_FAILURE                                                   NTStatus      = 0xC0290101\n\tSTATUS_TPM_20_E_SEQUENCE                                                  NTStatus      = 0xC0290103\n\tSTATUS_TPM_20_E_PRIVATE                                                   NTStatus      = 0xC029010B\n\tSTATUS_TPM_20_E_HMAC                                                      NTStatus      = 0xC0290119\n\tSTATUS_TPM_20_E_DISABLED                                                  NTStatus      = 0xC0290120\n\tSTATUS_TPM_20_E_EXCLUSIVE                                                 NTStatus      = 0xC0290121\n\tSTATUS_TPM_20_E_ECC_CURVE                                                 NTStatus      = 0xC0290123\n\tSTATUS_TPM_20_E_AUTH_TYPE                                                 NTStatus      = 0xC0290124\n\tSTATUS_TPM_20_E_AUTH_MISSING                                              NTStatus      = 0xC0290125\n\tSTATUS_TPM_20_E_POLICY                                                    NTStatus      = 0xC0290126\n\tSTATUS_TPM_20_E_PCR                                                       NTStatus      = 0xC0290127\n\tSTATUS_TPM_20_E_PCR_CHANGED                                               NTStatus      = 0xC0290128\n\tSTATUS_TPM_20_E_UPGRADE                                                   NTStatus      = 0xC029012D\n\tSTATUS_TPM_20_E_TOO_MANY_CONTEXTS                                         NTStatus      = 0xC029012E\n\tSTATUS_TPM_20_E_AUTH_UNAVAILABLE                                          NTStatus      = 0xC029012F\n\tSTATUS_TPM_20_E_REBOOT                                                    NTStatus      = 0xC0290130\n\tSTATUS_TPM_20_E_UNBALANCED                                                NTStatus      = 0xC0290131\n\tSTATUS_TPM_20_E_COMMAND_SIZE                                              NTStatus      = 0xC0290142\n\tSTATUS_TPM_20_E_COMMAND_CODE                                              NTStatus      = 0xC0290143\n\tSTATUS_TPM_20_E_AUTHSIZE                                                  NTStatus      = 0xC0290144\n\tSTATUS_TPM_20_E_AUTH_CONTEXT                                              NTStatus      = 0xC0290145\n\tSTATUS_TPM_20_E_NV_RANGE                                                  NTStatus      = 0xC0290146\n\tSTATUS_TPM_20_E_NV_SIZE                                                   NTStatus      = 0xC0290147\n\tSTATUS_TPM_20_E_NV_LOCKED                                                 NTStatus      = 0xC0290148\n\tSTATUS_TPM_20_E_NV_AUTHORIZATION                                          NTStatus      = 0xC0290149\n\tSTATUS_TPM_20_E_NV_UNINITIALIZED                                          NTStatus      = 0xC029014A\n\tSTATUS_TPM_20_E_NV_SPACE                                                  NTStatus      = 0xC029014B\n\tSTATUS_TPM_20_E_NV_DEFINED                                                NTStatus      = 0xC029014C\n\tSTATUS_TPM_20_E_BAD_CONTEXT                                               NTStatus      = 0xC0290150\n\tSTATUS_TPM_20_E_CPHASH                                                    NTStatus      = 0xC0290151\n\tSTATUS_TPM_20_E_PARENT                                                    NTStatus      = 0xC0290152\n\tSTATUS_TPM_20_E_NEEDS_TEST                                                NTStatus      = 0xC0290153\n\tSTATUS_TPM_20_E_NO_RESULT                                                 NTStatus      = 0xC0290154\n\tSTATUS_TPM_20_E_SENSITIVE                                                 NTStatus      = 0xC0290155\n\tSTATUS_TPM_COMMAND_BLOCKED                                                NTStatus      = 0xC0290400\n\tSTATUS_TPM_INVALID_HANDLE                                                 NTStatus      = 0xC0290401\n\tSTATUS_TPM_DUPLICATE_VHANDLE                                              NTStatus      = 0xC0290402\n\tSTATUS_TPM_EMBEDDED_COMMAND_BLOCKED                                       NTStatus      = 0xC0290403\n\tSTATUS_TPM_EMBEDDED_COMMAND_UNSUPPORTED                                   NTStatus      = 0xC0290404\n\tSTATUS_TPM_RETRY                                                          NTStatus      = 0xC0290800\n\tSTATUS_TPM_NEEDS_SELFTEST                                                 NTStatus      = 0xC0290801\n\tSTATUS_TPM_DOING_SELFTEST                                                 NTStatus      = 0xC0290802\n\tSTATUS_TPM_DEFEND_LOCK_RUNNING                                            NTStatus      = 0xC0290803\n\tSTATUS_TPM_COMMAND_CANCELED                                               NTStatus      = 0xC0291001\n\tSTATUS_TPM_TOO_MANY_CONTEXTS                                              NTStatus      = 0xC0291002\n\tSTATUS_TPM_NOT_FOUND                                                      NTStatus      = 0xC0291003\n\tSTATUS_TPM_ACCESS_DENIED                                                  NTStatus      = 0xC0291004\n\tSTATUS_TPM_INSUFFICIENT_BUFFER                                            NTStatus      = 0xC0291005\n\tSTATUS_TPM_PPI_FUNCTION_UNSUPPORTED                                       NTStatus      = 0xC0291006\n\tSTATUS_PCP_ERROR_MASK                                                     NTStatus      = 0xC0292000\n\tSTATUS_PCP_DEVICE_NOT_READY                                               NTStatus      = 0xC0292001\n\tSTATUS_PCP_INVALID_HANDLE                                                 NTStatus      = 0xC0292002\n\tSTATUS_PCP_INVALID_PARAMETER                                              NTStatus      = 0xC0292003\n\tSTATUS_PCP_FLAG_NOT_SUPPORTED                                             NTStatus      = 0xC0292004\n\tSTATUS_PCP_NOT_SUPPORTED                                                  NTStatus      = 0xC0292005\n\tSTATUS_PCP_BUFFER_TOO_SMALL                                               NTStatus      = 0xC0292006\n\tSTATUS_PCP_INTERNAL_ERROR                                                 NTStatus      = 0xC0292007\n\tSTATUS_PCP_AUTHENTICATION_FAILED                                          NTStatus      = 0xC0292008\n\tSTATUS_PCP_AUTHENTICATION_IGNORED                                         NTStatus      = 0xC0292009\n\tSTATUS_PCP_POLICY_NOT_FOUND                                               NTStatus      = 0xC029200A\n\tSTATUS_PCP_PROFILE_NOT_FOUND                                              NTStatus      = 0xC029200B\n\tSTATUS_PCP_VALIDATION_FAILED                                              NTStatus      = 0xC029200C\n\tSTATUS_PCP_DEVICE_NOT_FOUND                                               NTStatus      = 0xC029200D\n\tSTATUS_PCP_WRONG_PARENT                                                   NTStatus      = 0xC029200E\n\tSTATUS_PCP_KEY_NOT_LOADED                                                 NTStatus      = 0xC029200F\n\tSTATUS_PCP_NO_KEY_CERTIFICATION                                           NTStatus      = 0xC0292010\n\tSTATUS_PCP_KEY_NOT_FINALIZED                                              NTStatus      = 0xC0292011\n\tSTATUS_PCP_ATTESTATION_CHALLENGE_NOT_SET                                  NTStatus      = 0xC0292012\n\tSTATUS_PCP_NOT_PCR_BOUND                                                  NTStatus      = 0xC0292013\n\tSTATUS_PCP_KEY_ALREADY_FINALIZED                                          NTStatus      = 0xC0292014\n\tSTATUS_PCP_KEY_USAGE_POLICY_NOT_SUPPORTED                                 NTStatus      = 0xC0292015\n\tSTATUS_PCP_KEY_USAGE_POLICY_INVALID                                       NTStatus      = 0xC0292016\n\tSTATUS_PCP_SOFT_KEY_ERROR                                                 NTStatus      = 0xC0292017\n\tSTATUS_PCP_KEY_NOT_AUTHENTICATED                                          NTStatus      = 0xC0292018\n\tSTATUS_PCP_KEY_NOT_AIK                                                    NTStatus      = 0xC0292019\n\tSTATUS_PCP_KEY_NOT_SIGNING_KEY                                            NTStatus      = 0xC029201A\n\tSTATUS_PCP_LOCKED_OUT                                                     NTStatus      = 0xC029201B\n\tSTATUS_PCP_CLAIM_TYPE_NOT_SUPPORTED                                       NTStatus      = 0xC029201C\n\tSTATUS_PCP_TPM_VERSION_NOT_SUPPORTED                                      NTStatus      = 0xC029201D\n\tSTATUS_PCP_BUFFER_LENGTH_MISMATCH                                         NTStatus      = 0xC029201E\n\tSTATUS_PCP_IFX_RSA_KEY_CREATION_BLOCKED                                   NTStatus      = 0xC029201F\n\tSTATUS_PCP_TICKET_MISSING                                                 NTStatus      = 0xC0292020\n\tSTATUS_PCP_RAW_POLICY_NOT_SUPPORTED                                       NTStatus      = 0xC0292021\n\tSTATUS_PCP_KEY_HANDLE_INVALIDATED                                         NTStatus      = 0xC0292022\n\tSTATUS_PCP_UNSUPPORTED_PSS_SALT                                           NTStatus      = 0x40292023\n\tSTATUS_RTPM_CONTEXT_CONTINUE                                              NTStatus      = 0x00293000\n\tSTATUS_RTPM_CONTEXT_COMPLETE                                              NTStatus      = 0x00293001\n\tSTATUS_RTPM_NO_RESULT                                                     NTStatus      = 0xC0293002\n\tSTATUS_RTPM_PCR_READ_INCOMPLETE                                           NTStatus      = 0xC0293003\n\tSTATUS_RTPM_INVALID_CONTEXT                                               NTStatus      = 0xC0293004\n\tSTATUS_RTPM_UNSUPPORTED_CMD                                               NTStatus      = 0xC0293005\n\tSTATUS_TPM_ZERO_EXHAUST_ENABLED                                           NTStatus      = 0xC0294000\n\tSTATUS_HV_INVALID_HYPERCALL_CODE                                          NTStatus      = 0xC0350002\n\tSTATUS_HV_INVALID_HYPERCALL_INPUT                                         NTStatus      = 0xC0350003\n\tSTATUS_HV_INVALID_ALIGNMENT                                               NTStatus      = 0xC0350004\n\tSTATUS_HV_INVALID_PARAMETER                                               NTStatus      = 0xC0350005\n\tSTATUS_HV_ACCESS_DENIED                                                   NTStatus      = 0xC0350006\n\tSTATUS_HV_INVALID_PARTITION_STATE                                         NTStatus      = 0xC0350007\n\tSTATUS_HV_OPERATION_DENIED                                                NTStatus      = 0xC0350008\n\tSTATUS_HV_UNKNOWN_PROPERTY                                                NTStatus      = 0xC0350009\n\tSTATUS_HV_PROPERTY_VALUE_OUT_OF_RANGE                                     NTStatus      = 0xC035000A\n\tSTATUS_HV_INSUFFICIENT_MEMORY                                             NTStatus      = 0xC035000B\n\tSTATUS_HV_PARTITION_TOO_DEEP                                              NTStatus      = 0xC035000C\n\tSTATUS_HV_INVALID_PARTITION_ID                                            NTStatus      = 0xC035000D\n\tSTATUS_HV_INVALID_VP_INDEX                                                NTStatus      = 0xC035000E\n\tSTATUS_HV_INVALID_PORT_ID                                                 NTStatus      = 0xC0350011\n\tSTATUS_HV_INVALID_CONNECTION_ID                                           NTStatus      = 0xC0350012\n\tSTATUS_HV_INSUFFICIENT_BUFFERS                                            NTStatus      = 0xC0350013\n\tSTATUS_HV_NOT_ACKNOWLEDGED                                                NTStatus      = 0xC0350014\n\tSTATUS_HV_INVALID_VP_STATE                                                NTStatus      = 0xC0350015\n\tSTATUS_HV_ACKNOWLEDGED                                                    NTStatus      = 0xC0350016\n\tSTATUS_HV_INVALID_SAVE_RESTORE_STATE                                      NTStatus      = 0xC0350017\n\tSTATUS_HV_INVALID_SYNIC_STATE                                             NTStatus      = 0xC0350018\n\tSTATUS_HV_OBJECT_IN_USE                                                   NTStatus      = 0xC0350019\n\tSTATUS_HV_INVALID_PROXIMITY_DOMAIN_INFO                                   NTStatus      = 0xC035001A\n\tSTATUS_HV_NO_DATA                                                         NTStatus      = 0xC035001B\n\tSTATUS_HV_INACTIVE                                                        NTStatus      = 0xC035001C\n\tSTATUS_HV_NO_RESOURCES                                                    NTStatus      = 0xC035001D\n\tSTATUS_HV_FEATURE_UNAVAILABLE                                             NTStatus      = 0xC035001E\n\tSTATUS_HV_INSUFFICIENT_BUFFER                                             NTStatus      = 0xC0350033\n\tSTATUS_HV_INSUFFICIENT_DEVICE_DOMAINS                                     NTStatus      = 0xC0350038\n\tSTATUS_HV_CPUID_FEATURE_VALIDATION_ERROR                                  NTStatus      = 0xC035003C\n\tSTATUS_HV_CPUID_XSAVE_FEATURE_VALIDATION_ERROR                            NTStatus      = 0xC035003D\n\tSTATUS_HV_PROCESSOR_STARTUP_TIMEOUT                                       NTStatus      = 0xC035003E\n\tSTATUS_HV_SMX_ENABLED                                                     NTStatus      = 0xC035003F\n\tSTATUS_HV_INVALID_LP_INDEX                                                NTStatus      = 0xC0350041\n\tSTATUS_HV_INVALID_REGISTER_VALUE                                          NTStatus      = 0xC0350050\n\tSTATUS_HV_INVALID_VTL_STATE                                               NTStatus      = 0xC0350051\n\tSTATUS_HV_NX_NOT_DETECTED                                                 NTStatus      = 0xC0350055\n\tSTATUS_HV_INVALID_DEVICE_ID                                               NTStatus      = 0xC0350057\n\tSTATUS_HV_INVALID_DEVICE_STATE                                            NTStatus      = 0xC0350058\n\tSTATUS_HV_PENDING_PAGE_REQUESTS                                           NTStatus      = 0x00350059\n\tSTATUS_HV_PAGE_REQUEST_INVALID                                            NTStatus      = 0xC0350060\n\tSTATUS_HV_INVALID_CPU_GROUP_ID                                            NTStatus      = 0xC035006F\n\tSTATUS_HV_INVALID_CPU_GROUP_STATE                                         NTStatus      = 0xC0350070\n\tSTATUS_HV_OPERATION_FAILED                                                NTStatus      = 0xC0350071\n\tSTATUS_HV_NOT_ALLOWED_WITH_NESTED_VIRT_ACTIVE                             NTStatus      = 0xC0350072\n\tSTATUS_HV_INSUFFICIENT_ROOT_MEMORY                                        NTStatus      = 0xC0350073\n\tSTATUS_HV_NOT_PRESENT                                                     NTStatus      = 0xC0351000\n\tSTATUS_VID_DUPLICATE_HANDLER                                              NTStatus      = 0xC0370001\n\tSTATUS_VID_TOO_MANY_HANDLERS                                              NTStatus      = 0xC0370002\n\tSTATUS_VID_QUEUE_FULL                                                     NTStatus      = 0xC0370003\n\tSTATUS_VID_HANDLER_NOT_PRESENT                                            NTStatus      = 0xC0370004\n\tSTATUS_VID_INVALID_OBJECT_NAME                                            NTStatus      = 0xC0370005\n\tSTATUS_VID_PARTITION_NAME_TOO_LONG                                        NTStatus      = 0xC0370006\n\tSTATUS_VID_MESSAGE_QUEUE_NAME_TOO_LONG                                    NTStatus      = 0xC0370007\n\tSTATUS_VID_PARTITION_ALREADY_EXISTS                                       NTStatus      = 0xC0370008\n\tSTATUS_VID_PARTITION_DOES_NOT_EXIST                                       NTStatus      = 0xC0370009\n\tSTATUS_VID_PARTITION_NAME_NOT_FOUND                                       NTStatus      = 0xC037000A\n\tSTATUS_VID_MESSAGE_QUEUE_ALREADY_EXISTS                                   NTStatus      = 0xC037000B\n\tSTATUS_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT                                   NTStatus      = 0xC037000C\n\tSTATUS_VID_MB_STILL_REFERENCED                                            NTStatus      = 0xC037000D\n\tSTATUS_VID_CHILD_GPA_PAGE_SET_CORRUPTED                                   NTStatus      = 0xC037000E\n\tSTATUS_VID_INVALID_NUMA_SETTINGS                                          NTStatus      = 0xC037000F\n\tSTATUS_VID_INVALID_NUMA_NODE_INDEX                                        NTStatus      = 0xC0370010\n\tSTATUS_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED                          NTStatus      = 0xC0370011\n\tSTATUS_VID_INVALID_MEMORY_BLOCK_HANDLE                                    NTStatus      = 0xC0370012\n\tSTATUS_VID_PAGE_RANGE_OVERFLOW                                            NTStatus      = 0xC0370013\n\tSTATUS_VID_INVALID_MESSAGE_QUEUE_HANDLE                                   NTStatus      = 0xC0370014\n\tSTATUS_VID_INVALID_GPA_RANGE_HANDLE                                       NTStatus      = 0xC0370015\n\tSTATUS_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE                             NTStatus      = 0xC0370016\n\tSTATUS_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED                               NTStatus      = 0xC0370017\n\tSTATUS_VID_INVALID_PPM_HANDLE                                             NTStatus      = 0xC0370018\n\tSTATUS_VID_MBPS_ARE_LOCKED                                                NTStatus      = 0xC0370019\n\tSTATUS_VID_MESSAGE_QUEUE_CLOSED                                           NTStatus      = 0xC037001A\n\tSTATUS_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED                               NTStatus      = 0xC037001B\n\tSTATUS_VID_STOP_PENDING                                                   NTStatus      = 0xC037001C\n\tSTATUS_VID_INVALID_PROCESSOR_STATE                                        NTStatus      = 0xC037001D\n\tSTATUS_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT                                NTStatus      = 0xC037001E\n\tSTATUS_VID_KM_INTERFACE_ALREADY_INITIALIZED                               NTStatus      = 0xC037001F\n\tSTATUS_VID_MB_PROPERTY_ALREADY_SET_RESET                                  NTStatus      = 0xC0370020\n\tSTATUS_VID_MMIO_RANGE_DESTROYED                                           NTStatus      = 0xC0370021\n\tSTATUS_VID_INVALID_CHILD_GPA_PAGE_SET                                     NTStatus      = 0xC0370022\n\tSTATUS_VID_RESERVE_PAGE_SET_IS_BEING_USED                                 NTStatus      = 0xC0370023\n\tSTATUS_VID_RESERVE_PAGE_SET_TOO_SMALL                                     NTStatus      = 0xC0370024\n\tSTATUS_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE                         NTStatus      = 0xC0370025\n\tSTATUS_VID_MBP_COUNT_EXCEEDED_LIMIT                                       NTStatus      = 0xC0370026\n\tSTATUS_VID_SAVED_STATE_CORRUPT                                            NTStatus      = 0xC0370027\n\tSTATUS_VID_SAVED_STATE_UNRECOGNIZED_ITEM                                  NTStatus      = 0xC0370028\n\tSTATUS_VID_SAVED_STATE_INCOMPATIBLE                                       NTStatus      = 0xC0370029\n\tSTATUS_VID_VTL_ACCESS_DENIED                                              NTStatus      = 0xC037002A\n\tSTATUS_VID_REMOTE_NODE_PARENT_GPA_PAGES_USED                              NTStatus      = 0x80370001\n\tSTATUS_IPSEC_BAD_SPI                                                      NTStatus      = 0xC0360001\n\tSTATUS_IPSEC_SA_LIFETIME_EXPIRED                                          NTStatus      = 0xC0360002\n\tSTATUS_IPSEC_WRONG_SA                                                     NTStatus      = 0xC0360003\n\tSTATUS_IPSEC_REPLAY_CHECK_FAILED                                          NTStatus      = 0xC0360004\n\tSTATUS_IPSEC_INVALID_PACKET                                               NTStatus      = 0xC0360005\n\tSTATUS_IPSEC_INTEGRITY_CHECK_FAILED                                       NTStatus      = 0xC0360006\n\tSTATUS_IPSEC_CLEAR_TEXT_DROP                                              NTStatus      = 0xC0360007\n\tSTATUS_IPSEC_AUTH_FIREWALL_DROP                                           NTStatus      = 0xC0360008\n\tSTATUS_IPSEC_THROTTLE_DROP                                                NTStatus      = 0xC0360009\n\tSTATUS_IPSEC_DOSP_BLOCK                                                   NTStatus      = 0xC0368000\n\tSTATUS_IPSEC_DOSP_RECEIVED_MULTICAST                                      NTStatus      = 0xC0368001\n\tSTATUS_IPSEC_DOSP_INVALID_PACKET                                          NTStatus      = 0xC0368002\n\tSTATUS_IPSEC_DOSP_STATE_LOOKUP_FAILED                                     NTStatus      = 0xC0368003\n\tSTATUS_IPSEC_DOSP_MAX_ENTRIES                                             NTStatus      = 0xC0368004\n\tSTATUS_IPSEC_DOSP_KEYMOD_NOT_ALLOWED                                      NTStatus      = 0xC0368005\n\tSTATUS_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES                             NTStatus      = 0xC0368006\n\tSTATUS_VOLMGR_INCOMPLETE_REGENERATION                                     NTStatus      = 0x80380001\n\tSTATUS_VOLMGR_INCOMPLETE_DISK_MIGRATION                                   NTStatus      = 0x80380002\n\tSTATUS_VOLMGR_DATABASE_FULL                                               NTStatus      = 0xC0380001\n\tSTATUS_VOLMGR_DISK_CONFIGURATION_CORRUPTED                                NTStatus      = 0xC0380002\n\tSTATUS_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC                              NTStatus      = 0xC0380003\n\tSTATUS_VOLMGR_PACK_CONFIG_UPDATE_FAILED                                   NTStatus      = 0xC0380004\n\tSTATUS_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME                             NTStatus      = 0xC0380005\n\tSTATUS_VOLMGR_DISK_DUPLICATE                                              NTStatus      = 0xC0380006\n\tSTATUS_VOLMGR_DISK_DYNAMIC                                                NTStatus      = 0xC0380007\n\tSTATUS_VOLMGR_DISK_ID_INVALID                                             NTStatus      = 0xC0380008\n\tSTATUS_VOLMGR_DISK_INVALID                                                NTStatus      = 0xC0380009\n\tSTATUS_VOLMGR_DISK_LAST_VOTER                                             NTStatus      = 0xC038000A\n\tSTATUS_VOLMGR_DISK_LAYOUT_INVALID                                         NTStatus      = 0xC038000B\n\tSTATUS_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS              NTStatus      = 0xC038000C\n\tSTATUS_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED                            NTStatus      = 0xC038000D\n\tSTATUS_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL                            NTStatus      = 0xC038000E\n\tSTATUS_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS              NTStatus      = 0xC038000F\n\tSTATUS_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS                             NTStatus      = 0xC0380010\n\tSTATUS_VOLMGR_DISK_MISSING                                                NTStatus      = 0xC0380011\n\tSTATUS_VOLMGR_DISK_NOT_EMPTY                                              NTStatus      = 0xC0380012\n\tSTATUS_VOLMGR_DISK_NOT_ENOUGH_SPACE                                       NTStatus      = 0xC0380013\n\tSTATUS_VOLMGR_DISK_REVECTORING_FAILED                                     NTStatus      = 0xC0380014\n\tSTATUS_VOLMGR_DISK_SECTOR_SIZE_INVALID                                    NTStatus      = 0xC0380015\n\tSTATUS_VOLMGR_DISK_SET_NOT_CONTAINED                                      NTStatus      = 0xC0380016\n\tSTATUS_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS                               NTStatus      = 0xC0380017\n\tSTATUS_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES                                NTStatus      = 0xC0380018\n\tSTATUS_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED                                  NTStatus      = 0xC0380019\n\tSTATUS_VOLMGR_EXTENT_ALREADY_USED                                         NTStatus      = 0xC038001A\n\tSTATUS_VOLMGR_EXTENT_NOT_CONTIGUOUS                                       NTStatus      = 0xC038001B\n\tSTATUS_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION                                 NTStatus      = 0xC038001C\n\tSTATUS_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED                                   NTStatus      = 0xC038001D\n\tSTATUS_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION                               NTStatus      = 0xC038001E\n\tSTATUS_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH                          NTStatus      = 0xC038001F\n\tSTATUS_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED                                NTStatus      = 0xC0380020\n\tSTATUS_VOLMGR_INTERLEAVE_LENGTH_INVALID                                   NTStatus      = 0xC0380021\n\tSTATUS_VOLMGR_MAXIMUM_REGISTERED_USERS                                    NTStatus      = 0xC0380022\n\tSTATUS_VOLMGR_MEMBER_IN_SYNC                                              NTStatus      = 0xC0380023\n\tSTATUS_VOLMGR_MEMBER_INDEX_DUPLICATE                                      NTStatus      = 0xC0380024\n\tSTATUS_VOLMGR_MEMBER_INDEX_INVALID                                        NTStatus      = 0xC0380025\n\tSTATUS_VOLMGR_MEMBER_MISSING                                              NTStatus      = 0xC0380026\n\tSTATUS_VOLMGR_MEMBER_NOT_DETACHED                                         NTStatus      = 0xC0380027\n\tSTATUS_VOLMGR_MEMBER_REGENERATING                                         NTStatus      = 0xC0380028\n\tSTATUS_VOLMGR_ALL_DISKS_FAILED                                            NTStatus      = 0xC0380029\n\tSTATUS_VOLMGR_NO_REGISTERED_USERS                                         NTStatus      = 0xC038002A\n\tSTATUS_VOLMGR_NO_SUCH_USER                                                NTStatus      = 0xC038002B\n\tSTATUS_VOLMGR_NOTIFICATION_RESET                                          NTStatus      = 0xC038002C\n\tSTATUS_VOLMGR_NUMBER_OF_MEMBERS_INVALID                                   NTStatus      = 0xC038002D\n\tSTATUS_VOLMGR_NUMBER_OF_PLEXES_INVALID                                    NTStatus      = 0xC038002E\n\tSTATUS_VOLMGR_PACK_DUPLICATE                                              NTStatus      = 0xC038002F\n\tSTATUS_VOLMGR_PACK_ID_INVALID                                             NTStatus      = 0xC0380030\n\tSTATUS_VOLMGR_PACK_INVALID                                                NTStatus      = 0xC0380031\n\tSTATUS_VOLMGR_PACK_NAME_INVALID                                           NTStatus      = 0xC0380032\n\tSTATUS_VOLMGR_PACK_OFFLINE                                                NTStatus      = 0xC0380033\n\tSTATUS_VOLMGR_PACK_HAS_QUORUM                                             NTStatus      = 0xC0380034\n\tSTATUS_VOLMGR_PACK_WITHOUT_QUORUM                                         NTStatus      = 0xC0380035\n\tSTATUS_VOLMGR_PARTITION_STYLE_INVALID                                     NTStatus      = 0xC0380036\n\tSTATUS_VOLMGR_PARTITION_UPDATE_FAILED                                     NTStatus      = 0xC0380037\n\tSTATUS_VOLMGR_PLEX_IN_SYNC                                                NTStatus      = 0xC0380038\n\tSTATUS_VOLMGR_PLEX_INDEX_DUPLICATE                                        NTStatus      = 0xC0380039\n\tSTATUS_VOLMGR_PLEX_INDEX_INVALID                                          NTStatus      = 0xC038003A\n\tSTATUS_VOLMGR_PLEX_LAST_ACTIVE                                            NTStatus      = 0xC038003B\n\tSTATUS_VOLMGR_PLEX_MISSING                                                NTStatus      = 0xC038003C\n\tSTATUS_VOLMGR_PLEX_REGENERATING                                           NTStatus      = 0xC038003D\n\tSTATUS_VOLMGR_PLEX_TYPE_INVALID                                           NTStatus      = 0xC038003E\n\tSTATUS_VOLMGR_PLEX_NOT_RAID5                                              NTStatus      = 0xC038003F\n\tSTATUS_VOLMGR_PLEX_NOT_SIMPLE                                             NTStatus      = 0xC0380040\n\tSTATUS_VOLMGR_STRUCTURE_SIZE_INVALID                                      NTStatus      = 0xC0380041\n\tSTATUS_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS                              NTStatus      = 0xC0380042\n\tSTATUS_VOLMGR_TRANSACTION_IN_PROGRESS                                     NTStatus      = 0xC0380043\n\tSTATUS_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE                               NTStatus      = 0xC0380044\n\tSTATUS_VOLMGR_VOLUME_CONTAINS_MISSING_DISK                                NTStatus      = 0xC0380045\n\tSTATUS_VOLMGR_VOLUME_ID_INVALID                                           NTStatus      = 0xC0380046\n\tSTATUS_VOLMGR_VOLUME_LENGTH_INVALID                                       NTStatus      = 0xC0380047\n\tSTATUS_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE                      NTStatus      = 0xC0380048\n\tSTATUS_VOLMGR_VOLUME_NOT_MIRRORED                                         NTStatus      = 0xC0380049\n\tSTATUS_VOLMGR_VOLUME_NOT_RETAINED                                         NTStatus      = 0xC038004A\n\tSTATUS_VOLMGR_VOLUME_OFFLINE                                              NTStatus      = 0xC038004B\n\tSTATUS_VOLMGR_VOLUME_RETAINED                                             NTStatus      = 0xC038004C\n\tSTATUS_VOLMGR_NUMBER_OF_EXTENTS_INVALID                                   NTStatus      = 0xC038004D\n\tSTATUS_VOLMGR_DIFFERENT_SECTOR_SIZE                                       NTStatus      = 0xC038004E\n\tSTATUS_VOLMGR_BAD_BOOT_DISK                                               NTStatus      = 0xC038004F\n\tSTATUS_VOLMGR_PACK_CONFIG_OFFLINE                                         NTStatus      = 0xC0380050\n\tSTATUS_VOLMGR_PACK_CONFIG_ONLINE                                          NTStatus      = 0xC0380051\n\tSTATUS_VOLMGR_NOT_PRIMARY_PACK                                            NTStatus      = 0xC0380052\n\tSTATUS_VOLMGR_PACK_LOG_UPDATE_FAILED                                      NTStatus      = 0xC0380053\n\tSTATUS_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID                             NTStatus      = 0xC0380054\n\tSTATUS_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID                           NTStatus      = 0xC0380055\n\tSTATUS_VOLMGR_VOLUME_MIRRORED                                             NTStatus      = 0xC0380056\n\tSTATUS_VOLMGR_PLEX_NOT_SIMPLE_SPANNED                                     NTStatus      = 0xC0380057\n\tSTATUS_VOLMGR_NO_VALID_LOG_COPIES                                         NTStatus      = 0xC0380058\n\tSTATUS_VOLMGR_PRIMARY_PACK_PRESENT                                        NTStatus      = 0xC0380059\n\tSTATUS_VOLMGR_NUMBER_OF_DISKS_INVALID                                     NTStatus      = 0xC038005A\n\tSTATUS_VOLMGR_MIRROR_NOT_SUPPORTED                                        NTStatus      = 0xC038005B\n\tSTATUS_VOLMGR_RAID5_NOT_SUPPORTED                                         NTStatus      = 0xC038005C\n\tSTATUS_BCD_NOT_ALL_ENTRIES_IMPORTED                                       NTStatus      = 0x80390001\n\tSTATUS_BCD_TOO_MANY_ELEMENTS                                              NTStatus      = 0xC0390002\n\tSTATUS_BCD_NOT_ALL_ENTRIES_SYNCHRONIZED                                   NTStatus      = 0x80390003\n\tSTATUS_VHD_DRIVE_FOOTER_MISSING                                           NTStatus      = 0xC03A0001\n\tSTATUS_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH                                 NTStatus      = 0xC03A0002\n\tSTATUS_VHD_DRIVE_FOOTER_CORRUPT                                           NTStatus      = 0xC03A0003\n\tSTATUS_VHD_FORMAT_UNKNOWN                                                 NTStatus      = 0xC03A0004\n\tSTATUS_VHD_FORMAT_UNSUPPORTED_VERSION                                     NTStatus      = 0xC03A0005\n\tSTATUS_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH                                NTStatus      = 0xC03A0006\n\tSTATUS_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION                              NTStatus      = 0xC03A0007\n\tSTATUS_VHD_SPARSE_HEADER_CORRUPT                                          NTStatus      = 0xC03A0008\n\tSTATUS_VHD_BLOCK_ALLOCATION_FAILURE                                       NTStatus      = 0xC03A0009\n\tSTATUS_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT                                 NTStatus      = 0xC03A000A\n\tSTATUS_VHD_INVALID_BLOCK_SIZE                                             NTStatus      = 0xC03A000B\n\tSTATUS_VHD_BITMAP_MISMATCH                                                NTStatus      = 0xC03A000C\n\tSTATUS_VHD_PARENT_VHD_NOT_FOUND                                           NTStatus      = 0xC03A000D\n\tSTATUS_VHD_CHILD_PARENT_ID_MISMATCH                                       NTStatus      = 0xC03A000E\n\tSTATUS_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH                                NTStatus      = 0xC03A000F\n\tSTATUS_VHD_METADATA_READ_FAILURE                                          NTStatus      = 0xC03A0010\n\tSTATUS_VHD_METADATA_WRITE_FAILURE                                         NTStatus      = 0xC03A0011\n\tSTATUS_VHD_INVALID_SIZE                                                   NTStatus      = 0xC03A0012\n\tSTATUS_VHD_INVALID_FILE_SIZE                                              NTStatus      = 0xC03A0013\n\tSTATUS_VIRTDISK_PROVIDER_NOT_FOUND                                        NTStatus      = 0xC03A0014\n\tSTATUS_VIRTDISK_NOT_VIRTUAL_DISK                                          NTStatus      = 0xC03A0015\n\tSTATUS_VHD_PARENT_VHD_ACCESS_DENIED                                       NTStatus      = 0xC03A0016\n\tSTATUS_VHD_CHILD_PARENT_SIZE_MISMATCH                                     NTStatus      = 0xC03A0017\n\tSTATUS_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED                              NTStatus      = 0xC03A0018\n\tSTATUS_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT                             NTStatus      = 0xC03A0019\n\tSTATUS_VIRTUAL_DISK_LIMITATION                                            NTStatus      = 0xC03A001A\n\tSTATUS_VHD_INVALID_TYPE                                                   NTStatus      = 0xC03A001B\n\tSTATUS_VHD_INVALID_STATE                                                  NTStatus      = 0xC03A001C\n\tSTATUS_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE                              NTStatus      = 0xC03A001D\n\tSTATUS_VIRTDISK_DISK_ALREADY_OWNED                                        NTStatus      = 0xC03A001E\n\tSTATUS_VIRTDISK_DISK_ONLINE_AND_WRITABLE                                  NTStatus      = 0xC03A001F\n\tSTATUS_CTLOG_TRACKING_NOT_INITIALIZED                                     NTStatus      = 0xC03A0020\n\tSTATUS_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE                                NTStatus      = 0xC03A0021\n\tSTATUS_CTLOG_VHD_CHANGED_OFFLINE                                          NTStatus      = 0xC03A0022\n\tSTATUS_CTLOG_INVALID_TRACKING_STATE                                       NTStatus      = 0xC03A0023\n\tSTATUS_CTLOG_INCONSISTENT_TRACKING_FILE                                   NTStatus      = 0xC03A0024\n\tSTATUS_VHD_METADATA_FULL                                                  NTStatus      = 0xC03A0028\n\tSTATUS_VHD_INVALID_CHANGE_TRACKING_ID                                     NTStatus      = 0xC03A0029\n\tSTATUS_VHD_CHANGE_TRACKING_DISABLED                                       NTStatus      = 0xC03A002A\n\tSTATUS_VHD_MISSING_CHANGE_TRACKING_INFORMATION                            NTStatus      = 0xC03A0030\n\tSTATUS_VHD_RESIZE_WOULD_TRUNCATE_DATA                                     NTStatus      = 0xC03A0031\n\tSTATUS_VHD_COULD_NOT_COMPUTE_MINIMUM_VIRTUAL_SIZE                         NTStatus      = 0xC03A0032\n\tSTATUS_VHD_ALREADY_AT_OR_BELOW_MINIMUM_VIRTUAL_SIZE                       NTStatus      = 0xC03A0033\n\tSTATUS_QUERY_STORAGE_ERROR                                                NTStatus      = 0x803A0001\n\tSTATUS_GDI_HANDLE_LEAK                                                    NTStatus      = 0x803F0001\n\tSTATUS_RKF_KEY_NOT_FOUND                                                  NTStatus      = 0xC0400001\n\tSTATUS_RKF_DUPLICATE_KEY                                                  NTStatus      = 0xC0400002\n\tSTATUS_RKF_BLOB_FULL                                                      NTStatus      = 0xC0400003\n\tSTATUS_RKF_STORE_FULL                                                     NTStatus      = 0xC0400004\n\tSTATUS_RKF_FILE_BLOCKED                                                   NTStatus      = 0xC0400005\n\tSTATUS_RKF_ACTIVE_KEY                                                     NTStatus      = 0xC0400006\n\tSTATUS_RDBSS_RESTART_OPERATION                                            NTStatus      = 0xC0410001\n\tSTATUS_RDBSS_CONTINUE_OPERATION                                           NTStatus      = 0xC0410002\n\tSTATUS_RDBSS_POST_OPERATION                                               NTStatus      = 0xC0410003\n\tSTATUS_RDBSS_RETRY_LOOKUP                                                 NTStatus      = 0xC0410004\n\tSTATUS_BTH_ATT_INVALID_HANDLE                                             NTStatus      = 0xC0420001\n\tSTATUS_BTH_ATT_READ_NOT_PERMITTED                                         NTStatus      = 0xC0420002\n\tSTATUS_BTH_ATT_WRITE_NOT_PERMITTED                                        NTStatus      = 0xC0420003\n\tSTATUS_BTH_ATT_INVALID_PDU                                                NTStatus      = 0xC0420004\n\tSTATUS_BTH_ATT_INSUFFICIENT_AUTHENTICATION                                NTStatus      = 0xC0420005\n\tSTATUS_BTH_ATT_REQUEST_NOT_SUPPORTED                                      NTStatus      = 0xC0420006\n\tSTATUS_BTH_ATT_INVALID_OFFSET                                             NTStatus      = 0xC0420007\n\tSTATUS_BTH_ATT_INSUFFICIENT_AUTHORIZATION                                 NTStatus      = 0xC0420008\n\tSTATUS_BTH_ATT_PREPARE_QUEUE_FULL                                         NTStatus      = 0xC0420009\n\tSTATUS_BTH_ATT_ATTRIBUTE_NOT_FOUND                                        NTStatus      = 0xC042000A\n\tSTATUS_BTH_ATT_ATTRIBUTE_NOT_LONG                                         NTStatus      = 0xC042000B\n\tSTATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE                           NTStatus      = 0xC042000C\n\tSTATUS_BTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH                             NTStatus      = 0xC042000D\n\tSTATUS_BTH_ATT_UNLIKELY                                                   NTStatus      = 0xC042000E\n\tSTATUS_BTH_ATT_INSUFFICIENT_ENCRYPTION                                    NTStatus      = 0xC042000F\n\tSTATUS_BTH_ATT_UNSUPPORTED_GROUP_TYPE                                     NTStatus      = 0xC0420010\n\tSTATUS_BTH_ATT_INSUFFICIENT_RESOURCES                                     NTStatus      = 0xC0420011\n\tSTATUS_BTH_ATT_UNKNOWN_ERROR                                              NTStatus      = 0xC0421000\n\tSTATUS_SECUREBOOT_ROLLBACK_DETECTED                                       NTStatus      = 0xC0430001\n\tSTATUS_SECUREBOOT_POLICY_VIOLATION                                        NTStatus      = 0xC0430002\n\tSTATUS_SECUREBOOT_INVALID_POLICY                                          NTStatus      = 0xC0430003\n\tSTATUS_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND                              NTStatus      = 0xC0430004\n\tSTATUS_SECUREBOOT_POLICY_NOT_SIGNED                                       NTStatus      = 0xC0430005\n\tSTATUS_SECUREBOOT_NOT_ENABLED                                             NTStatus      = 0x80430006\n\tSTATUS_SECUREBOOT_FILE_REPLACED                                           NTStatus      = 0xC0430007\n\tSTATUS_SECUREBOOT_POLICY_NOT_AUTHORIZED                                   NTStatus      = 0xC0430008\n\tSTATUS_SECUREBOOT_POLICY_UNKNOWN                                          NTStatus      = 0xC0430009\n\tSTATUS_SECUREBOOT_POLICY_MISSING_ANTIROLLBACKVERSION                      NTStatus      = 0xC043000A\n\tSTATUS_SECUREBOOT_PLATFORM_ID_MISMATCH                                    NTStatus      = 0xC043000B\n\tSTATUS_SECUREBOOT_POLICY_ROLLBACK_DETECTED                                NTStatus      = 0xC043000C\n\tSTATUS_SECUREBOOT_POLICY_UPGRADE_MISMATCH                                 NTStatus      = 0xC043000D\n\tSTATUS_SECUREBOOT_REQUIRED_POLICY_FILE_MISSING                            NTStatus      = 0xC043000E\n\tSTATUS_SECUREBOOT_NOT_BASE_POLICY                                         NTStatus      = 0xC043000F\n\tSTATUS_SECUREBOOT_NOT_SUPPLEMENTAL_POLICY                                 NTStatus      = 0xC0430010\n\tSTATUS_PLATFORM_MANIFEST_NOT_AUTHORIZED                                   NTStatus      = 0xC0EB0001\n\tSTATUS_PLATFORM_MANIFEST_INVALID                                          NTStatus      = 0xC0EB0002\n\tSTATUS_PLATFORM_MANIFEST_FILE_NOT_AUTHORIZED                              NTStatus      = 0xC0EB0003\n\tSTATUS_PLATFORM_MANIFEST_CATALOG_NOT_AUTHORIZED                           NTStatus      = 0xC0EB0004\n\tSTATUS_PLATFORM_MANIFEST_BINARY_ID_NOT_FOUND                              NTStatus      = 0xC0EB0005\n\tSTATUS_PLATFORM_MANIFEST_NOT_ACTIVE                                       NTStatus      = 0xC0EB0006\n\tSTATUS_PLATFORM_MANIFEST_NOT_SIGNED                                       NTStatus      = 0xC0EB0007\n\tSTATUS_SYSTEM_INTEGRITY_ROLLBACK_DETECTED                                 NTStatus      = 0xC0E90001\n\tSTATUS_SYSTEM_INTEGRITY_POLICY_VIOLATION                                  NTStatus      = 0xC0E90002\n\tSTATUS_SYSTEM_INTEGRITY_INVALID_POLICY                                    NTStatus      = 0xC0E90003\n\tSTATUS_SYSTEM_INTEGRITY_POLICY_NOT_SIGNED                                 NTStatus      = 0xC0E90004\n\tSTATUS_SYSTEM_INTEGRITY_TOO_MANY_POLICIES                                 NTStatus      = 0xC0E90005\n\tSTATUS_SYSTEM_INTEGRITY_SUPPLEMENTAL_POLICY_NOT_AUTHORIZED                NTStatus      = 0xC0E90006\n\tSTATUS_NO_APPLICABLE_APP_LICENSES_FOUND                                   NTStatus      = 0xC0EA0001\n\tSTATUS_CLIP_LICENSE_NOT_FOUND                                             NTStatus      = 0xC0EA0002\n\tSTATUS_CLIP_DEVICE_LICENSE_MISSING                                        NTStatus      = 0xC0EA0003\n\tSTATUS_CLIP_LICENSE_INVALID_SIGNATURE                                     NTStatus      = 0xC0EA0004\n\tSTATUS_CLIP_KEYHOLDER_LICENSE_MISSING_OR_INVALID                          NTStatus      = 0xC0EA0005\n\tSTATUS_CLIP_LICENSE_EXPIRED                                               NTStatus      = 0xC0EA0006\n\tSTATUS_CLIP_LICENSE_SIGNED_BY_UNKNOWN_SOURCE                              NTStatus      = 0xC0EA0007\n\tSTATUS_CLIP_LICENSE_NOT_SIGNED                                            NTStatus      = 0xC0EA0008\n\tSTATUS_CLIP_LICENSE_HARDWARE_ID_OUT_OF_TOLERANCE                          NTStatus      = 0xC0EA0009\n\tSTATUS_CLIP_LICENSE_DEVICE_ID_MISMATCH                                    NTStatus      = 0xC0EA000A\n\tSTATUS_AUDIO_ENGINE_NODE_NOT_FOUND                                        NTStatus      = 0xC0440001\n\tSTATUS_HDAUDIO_EMPTY_CONNECTION_LIST                                      NTStatus      = 0xC0440002\n\tSTATUS_HDAUDIO_CONNECTION_LIST_NOT_SUPPORTED                              NTStatus      = 0xC0440003\n\tSTATUS_HDAUDIO_NO_LOGICAL_DEVICES_CREATED                                 NTStatus      = 0xC0440004\n\tSTATUS_HDAUDIO_NULL_LINKED_LIST_ENTRY                                     NTStatus      = 0xC0440005\n\tSTATUS_SPACES_REPAIRED                                                    NTStatus      = 0x00E70000\n\tSTATUS_SPACES_PAUSE                                                       NTStatus      = 0x00E70001\n\tSTATUS_SPACES_COMPLETE                                                    NTStatus      = 0x00E70002\n\tSTATUS_SPACES_REDIRECT                                                    NTStatus      = 0x00E70003\n\tSTATUS_SPACES_FAULT_DOMAIN_TYPE_INVALID                                   NTStatus      = 0xC0E70001\n\tSTATUS_SPACES_RESILIENCY_TYPE_INVALID                                     NTStatus      = 0xC0E70003\n\tSTATUS_SPACES_DRIVE_SECTOR_SIZE_INVALID                                   NTStatus      = 0xC0E70004\n\tSTATUS_SPACES_DRIVE_REDUNDANCY_INVALID                                    NTStatus      = 0xC0E70006\n\tSTATUS_SPACES_NUMBER_OF_DATA_COPIES_INVALID                               NTStatus      = 0xC0E70007\n\tSTATUS_SPACES_INTERLEAVE_LENGTH_INVALID                                   NTStatus      = 0xC0E70009\n\tSTATUS_SPACES_NUMBER_OF_COLUMNS_INVALID                                   NTStatus      = 0xC0E7000A\n\tSTATUS_SPACES_NOT_ENOUGH_DRIVES                                           NTStatus      = 0xC0E7000B\n\tSTATUS_SPACES_EXTENDED_ERROR                                              NTStatus      = 0xC0E7000C\n\tSTATUS_SPACES_PROVISIONING_TYPE_INVALID                                   NTStatus      = 0xC0E7000D\n\tSTATUS_SPACES_ALLOCATION_SIZE_INVALID                                     NTStatus      = 0xC0E7000E\n\tSTATUS_SPACES_ENCLOSURE_AWARE_INVALID                                     NTStatus      = 0xC0E7000F\n\tSTATUS_SPACES_WRITE_CACHE_SIZE_INVALID                                    NTStatus      = 0xC0E70010\n\tSTATUS_SPACES_NUMBER_OF_GROUPS_INVALID                                    NTStatus      = 0xC0E70011\n\tSTATUS_SPACES_DRIVE_OPERATIONAL_STATE_INVALID                             NTStatus      = 0xC0E70012\n\tSTATUS_SPACES_UPDATE_COLUMN_STATE                                         NTStatus      = 0xC0E70013\n\tSTATUS_SPACES_MAP_REQUIRED                                                NTStatus      = 0xC0E70014\n\tSTATUS_SPACES_UNSUPPORTED_VERSION                                         NTStatus      = 0xC0E70015\n\tSTATUS_SPACES_CORRUPT_METADATA                                            NTStatus      = 0xC0E70016\n\tSTATUS_SPACES_DRT_FULL                                                    NTStatus      = 0xC0E70017\n\tSTATUS_SPACES_INCONSISTENCY                                               NTStatus      = 0xC0E70018\n\tSTATUS_SPACES_LOG_NOT_READY                                               NTStatus      = 0xC0E70019\n\tSTATUS_SPACES_NO_REDUNDANCY                                               NTStatus      = 0xC0E7001A\n\tSTATUS_SPACES_DRIVE_NOT_READY                                             NTStatus      = 0xC0E7001B\n\tSTATUS_SPACES_DRIVE_SPLIT                                                 NTStatus      = 0xC0E7001C\n\tSTATUS_SPACES_DRIVE_LOST_DATA                                             NTStatus      = 0xC0E7001D\n\tSTATUS_SPACES_ENTRY_INCOMPLETE                                            NTStatus      = 0xC0E7001E\n\tSTATUS_SPACES_ENTRY_INVALID                                               NTStatus      = 0xC0E7001F\n\tSTATUS_SPACES_MARK_DIRTY                                                  NTStatus      = 0xC0E70020\n\tSTATUS_VOLSNAP_BOOTFILE_NOT_VALID                                         NTStatus      = 0xC0500003\n\tSTATUS_VOLSNAP_ACTIVATION_TIMEOUT                                         NTStatus      = 0xC0500004\n\tSTATUS_IO_PREEMPTED                                                       NTStatus      = 0xC0510001\n\tSTATUS_SVHDX_ERROR_STORED                                                 NTStatus      = 0xC05C0000\n\tSTATUS_SVHDX_ERROR_NOT_AVAILABLE                                          NTStatus      = 0xC05CFF00\n\tSTATUS_SVHDX_UNIT_ATTENTION_AVAILABLE                                     NTStatus      = 0xC05CFF01\n\tSTATUS_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED                         NTStatus      = 0xC05CFF02\n\tSTATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED                        NTStatus      = 0xC05CFF03\n\tSTATUS_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED                         NTStatus      = 0xC05CFF04\n\tSTATUS_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED                       NTStatus      = 0xC05CFF05\n\tSTATUS_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED                  NTStatus      = 0xC05CFF06\n\tSTATUS_SVHDX_RESERVATION_CONFLICT                                         NTStatus      = 0xC05CFF07\n\tSTATUS_SVHDX_WRONG_FILE_TYPE                                              NTStatus      = 0xC05CFF08\n\tSTATUS_SVHDX_VERSION_MISMATCH                                             NTStatus      = 0xC05CFF09\n\tSTATUS_VHD_SHARED                                                         NTStatus      = 0xC05CFF0A\n\tSTATUS_SVHDX_NO_INITIATOR                                                 NTStatus      = 0xC05CFF0B\n\tSTATUS_VHDSET_BACKING_STORAGE_NOT_FOUND                                   NTStatus      = 0xC05CFF0C\n\tSTATUS_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP                              NTStatus      = 0xC05D0000\n\tSTATUS_SMB_BAD_CLUSTER_DIALECT                                            NTStatus      = 0xC05D0001\n\tSTATUS_SMB_GUEST_LOGON_BLOCKED                                            NTStatus      = 0xC05D0002\n\tSTATUS_SECCORE_INVALID_COMMAND                                            NTStatus      = 0xC0E80000\n\tSTATUS_VSM_NOT_INITIALIZED                                                NTStatus      = 0xC0450000\n\tSTATUS_VSM_DMA_PROTECTION_NOT_IN_USE                                      NTStatus      = 0xC0450001\n\tSTATUS_APPEXEC_CONDITION_NOT_SATISFIED                                    NTStatus      = 0xC0EC0000\n\tSTATUS_APPEXEC_HANDLE_INVALIDATED                                         NTStatus      = 0xC0EC0001\n\tSTATUS_APPEXEC_INVALID_HOST_GENERATION                                    NTStatus      = 0xC0EC0002\n\tSTATUS_APPEXEC_UNEXPECTED_PROCESS_REGISTRATION                            NTStatus      = 0xC0EC0003\n\tSTATUS_APPEXEC_INVALID_HOST_STATE                                         NTStatus      = 0xC0EC0004\n\tSTATUS_APPEXEC_NO_DONOR                                                   NTStatus      = 0xC0EC0005\n\tSTATUS_APPEXEC_HOST_ID_MISMATCH                                           NTStatus      = 0xC0EC0006\n\tSTATUS_APPEXEC_UNKNOWN_USER                                               NTStatus      = 0xC0EC0007\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/zknownfolderids_windows.go",
    "content": "// Code generated by 'mkknownfolderids.bash'; DO NOT EDIT.\n\npackage windows\n\ntype KNOWNFOLDERID GUID\n\nvar (\n\tFOLDERID_NetworkFolder          = &KNOWNFOLDERID{0xd20beec4, 0x5ca8, 0x4905, [8]byte{0xae, 0x3b, 0xbf, 0x25, 0x1e, 0xa0, 0x9b, 0x53}}\n\tFOLDERID_ComputerFolder         = &KNOWNFOLDERID{0x0ac0837c, 0xbbf8, 0x452a, [8]byte{0x85, 0x0d, 0x79, 0xd0, 0x8e, 0x66, 0x7c, 0xa7}}\n\tFOLDERID_InternetFolder         = &KNOWNFOLDERID{0x4d9f7874, 0x4e0c, 0x4904, [8]byte{0x96, 0x7b, 0x40, 0xb0, 0xd2, 0x0c, 0x3e, 0x4b}}\n\tFOLDERID_ControlPanelFolder     = &KNOWNFOLDERID{0x82a74aeb, 0xaeb4, 0x465c, [8]byte{0xa0, 0x14, 0xd0, 0x97, 0xee, 0x34, 0x6d, 0x63}}\n\tFOLDERID_PrintersFolder         = &KNOWNFOLDERID{0x76fc4e2d, 0xd6ad, 0x4519, [8]byte{0xa6, 0x63, 0x37, 0xbd, 0x56, 0x06, 0x81, 0x85}}\n\tFOLDERID_SyncManagerFolder      = &KNOWNFOLDERID{0x43668bf8, 0xc14e, 0x49b2, [8]byte{0x97, 0xc9, 0x74, 0x77, 0x84, 0xd7, 0x84, 0xb7}}\n\tFOLDERID_SyncSetupFolder        = &KNOWNFOLDERID{0x0f214138, 0xb1d3, 0x4a90, [8]byte{0xbb, 0xa9, 0x27, 0xcb, 0xc0, 0xc5, 0x38, 0x9a}}\n\tFOLDERID_ConflictFolder         = &KNOWNFOLDERID{0x4bfefb45, 0x347d, 0x4006, [8]byte{0xa5, 0xbe, 0xac, 0x0c, 0xb0, 0x56, 0x71, 0x92}}\n\tFOLDERID_SyncResultsFolder      = &KNOWNFOLDERID{0x289a9a43, 0xbe44, 0x4057, [8]byte{0xa4, 0x1b, 0x58, 0x7a, 0x76, 0xd7, 0xe7, 0xf9}}\n\tFOLDERID_RecycleBinFolder       = &KNOWNFOLDERID{0xb7534046, 0x3ecb, 0x4c18, [8]byte{0xbe, 0x4e, 0x64, 0xcd, 0x4c, 0xb7, 0xd6, 0xac}}\n\tFOLDERID_ConnectionsFolder      = &KNOWNFOLDERID{0x6f0cd92b, 0x2e97, 0x45d1, [8]byte{0x88, 0xff, 0xb0, 0xd1, 0x86, 0xb8, 0xde, 0xdd}}\n\tFOLDERID_Fonts                  = &KNOWNFOLDERID{0xfd228cb7, 0xae11, 0x4ae3, [8]byte{0x86, 0x4c, 0x16, 0xf3, 0x91, 0x0a, 0xb8, 0xfe}}\n\tFOLDERID_Desktop                = &KNOWNFOLDERID{0xb4bfcc3a, 0xdb2c, 0x424c, [8]byte{0xb0, 0x29, 0x7f, 0xe9, 0x9a, 0x87, 0xc6, 0x41}}\n\tFOLDERID_Startup                = &KNOWNFOLDERID{0xb97d20bb, 0xf46a, 0x4c97, [8]byte{0xba, 0x10, 0x5e, 0x36, 0x08, 0x43, 0x08, 0x54}}\n\tFOLDERID_Programs               = &KNOWNFOLDERID{0xa77f5d77, 0x2e2b, 0x44c3, [8]byte{0xa6, 0xa2, 0xab, 0xa6, 0x01, 0x05, 0x4a, 0x51}}\n\tFOLDERID_StartMenu              = &KNOWNFOLDERID{0x625b53c3, 0xab48, 0x4ec1, [8]byte{0xba, 0x1f, 0xa1, 0xef, 0x41, 0x46, 0xfc, 0x19}}\n\tFOLDERID_Recent                 = &KNOWNFOLDERID{0xae50c081, 0xebd2, 0x438a, [8]byte{0x86, 0x55, 0x8a, 0x09, 0x2e, 0x34, 0x98, 0x7a}}\n\tFOLDERID_SendTo                 = &KNOWNFOLDERID{0x8983036c, 0x27c0, 0x404b, [8]byte{0x8f, 0x08, 0x10, 0x2d, 0x10, 0xdc, 0xfd, 0x74}}\n\tFOLDERID_Documents              = &KNOWNFOLDERID{0xfdd39ad0, 0x238f, 0x46af, [8]byte{0xad, 0xb4, 0x6c, 0x85, 0x48, 0x03, 0x69, 0xc7}}\n\tFOLDERID_Favorites              = &KNOWNFOLDERID{0x1777f761, 0x68ad, 0x4d8a, [8]byte{0x87, 0xbd, 0x30, 0xb7, 0x59, 0xfa, 0x33, 0xdd}}\n\tFOLDERID_NetHood                = &KNOWNFOLDERID{0xc5abbf53, 0xe17f, 0x4121, [8]byte{0x89, 0x00, 0x86, 0x62, 0x6f, 0xc2, 0xc9, 0x73}}\n\tFOLDERID_PrintHood              = &KNOWNFOLDERID{0x9274bd8d, 0xcfd1, 0x41c3, [8]byte{0xb3, 0x5e, 0xb1, 0x3f, 0x55, 0xa7, 0x58, 0xf4}}\n\tFOLDERID_Templates              = &KNOWNFOLDERID{0xa63293e8, 0x664e, 0x48db, [8]byte{0xa0, 0x79, 0xdf, 0x75, 0x9e, 0x05, 0x09, 0xf7}}\n\tFOLDERID_CommonStartup          = &KNOWNFOLDERID{0x82a5ea35, 0xd9cd, 0x47c5, [8]byte{0x96, 0x29, 0xe1, 0x5d, 0x2f, 0x71, 0x4e, 0x6e}}\n\tFOLDERID_CommonPrograms         = &KNOWNFOLDERID{0x0139d44e, 0x6afe, 0x49f2, [8]byte{0x86, 0x90, 0x3d, 0xaf, 0xca, 0xe6, 0xff, 0xb8}}\n\tFOLDERID_CommonStartMenu        = &KNOWNFOLDERID{0xa4115719, 0xd62e, 0x491d, [8]byte{0xaa, 0x7c, 0xe7, 0x4b, 0x8b, 0xe3, 0xb0, 0x67}}\n\tFOLDERID_PublicDesktop          = &KNOWNFOLDERID{0xc4aa340d, 0xf20f, 0x4863, [8]byte{0xaf, 0xef, 0xf8, 0x7e, 0xf2, 0xe6, 0xba, 0x25}}\n\tFOLDERID_ProgramData            = &KNOWNFOLDERID{0x62ab5d82, 0xfdc1, 0x4dc3, [8]byte{0xa9, 0xdd, 0x07, 0x0d, 0x1d, 0x49, 0x5d, 0x97}}\n\tFOLDERID_CommonTemplates        = &KNOWNFOLDERID{0xb94237e7, 0x57ac, 0x4347, [8]byte{0x91, 0x51, 0xb0, 0x8c, 0x6c, 0x32, 0xd1, 0xf7}}\n\tFOLDERID_PublicDocuments        = &KNOWNFOLDERID{0xed4824af, 0xdce4, 0x45a8, [8]byte{0x81, 0xe2, 0xfc, 0x79, 0x65, 0x08, 0x36, 0x34}}\n\tFOLDERID_RoamingAppData         = &KNOWNFOLDERID{0x3eb685db, 0x65f9, 0x4cf6, [8]byte{0xa0, 0x3a, 0xe3, 0xef, 0x65, 0x72, 0x9f, 0x3d}}\n\tFOLDERID_LocalAppData           = &KNOWNFOLDERID{0xf1b32785, 0x6fba, 0x4fcf, [8]byte{0x9d, 0x55, 0x7b, 0x8e, 0x7f, 0x15, 0x70, 0x91}}\n\tFOLDERID_LocalAppDataLow        = &KNOWNFOLDERID{0xa520a1a4, 0x1780, 0x4ff6, [8]byte{0xbd, 0x18, 0x16, 0x73, 0x43, 0xc5, 0xaf, 0x16}}\n\tFOLDERID_InternetCache          = &KNOWNFOLDERID{0x352481e8, 0x33be, 0x4251, [8]byte{0xba, 0x85, 0x60, 0x07, 0xca, 0xed, 0xcf, 0x9d}}\n\tFOLDERID_Cookies                = &KNOWNFOLDERID{0x2b0f765d, 0xc0e9, 0x4171, [8]byte{0x90, 0x8e, 0x08, 0xa6, 0x11, 0xb8, 0x4f, 0xf6}}\n\tFOLDERID_History                = &KNOWNFOLDERID{0xd9dc8a3b, 0xb784, 0x432e, [8]byte{0xa7, 0x81, 0x5a, 0x11, 0x30, 0xa7, 0x59, 0x63}}\n\tFOLDERID_System                 = &KNOWNFOLDERID{0x1ac14e77, 0x02e7, 0x4e5d, [8]byte{0xb7, 0x44, 0x2e, 0xb1, 0xae, 0x51, 0x98, 0xb7}}\n\tFOLDERID_SystemX86              = &KNOWNFOLDERID{0xd65231b0, 0xb2f1, 0x4857, [8]byte{0xa4, 0xce, 0xa8, 0xe7, 0xc6, 0xea, 0x7d, 0x27}}\n\tFOLDERID_Windows                = &KNOWNFOLDERID{0xf38bf404, 0x1d43, 0x42f2, [8]byte{0x93, 0x05, 0x67, 0xde, 0x0b, 0x28, 0xfc, 0x23}}\n\tFOLDERID_Profile                = &KNOWNFOLDERID{0x5e6c858f, 0x0e22, 0x4760, [8]byte{0x9a, 0xfe, 0xea, 0x33, 0x17, 0xb6, 0x71, 0x73}}\n\tFOLDERID_Pictures               = &KNOWNFOLDERID{0x33e28130, 0x4e1e, 0x4676, [8]byte{0x83, 0x5a, 0x98, 0x39, 0x5c, 0x3b, 0xc3, 0xbb}}\n\tFOLDERID_ProgramFilesX86        = &KNOWNFOLDERID{0x7c5a40ef, 0xa0fb, 0x4bfc, [8]byte{0x87, 0x4a, 0xc0, 0xf2, 0xe0, 0xb9, 0xfa, 0x8e}}\n\tFOLDERID_ProgramFilesCommonX86  = &KNOWNFOLDERID{0xde974d24, 0xd9c6, 0x4d3e, [8]byte{0xbf, 0x91, 0xf4, 0x45, 0x51, 0x20, 0xb9, 0x17}}\n\tFOLDERID_ProgramFilesX64        = &KNOWNFOLDERID{0x6d809377, 0x6af0, 0x444b, [8]byte{0x89, 0x57, 0xa3, 0x77, 0x3f, 0x02, 0x20, 0x0e}}\n\tFOLDERID_ProgramFilesCommonX64  = &KNOWNFOLDERID{0x6365d5a7, 0x0f0d, 0x45e5, [8]byte{0x87, 0xf6, 0x0d, 0xa5, 0x6b, 0x6a, 0x4f, 0x7d}}\n\tFOLDERID_ProgramFiles           = &KNOWNFOLDERID{0x905e63b6, 0xc1bf, 0x494e, [8]byte{0xb2, 0x9c, 0x65, 0xb7, 0x32, 0xd3, 0xd2, 0x1a}}\n\tFOLDERID_ProgramFilesCommon     = &KNOWNFOLDERID{0xf7f1ed05, 0x9f6d, 0x47a2, [8]byte{0xaa, 0xae, 0x29, 0xd3, 0x17, 0xc6, 0xf0, 0x66}}\n\tFOLDERID_UserProgramFiles       = &KNOWNFOLDERID{0x5cd7aee2, 0x2219, 0x4a67, [8]byte{0xb8, 0x5d, 0x6c, 0x9c, 0xe1, 0x56, 0x60, 0xcb}}\n\tFOLDERID_UserProgramFilesCommon = &KNOWNFOLDERID{0xbcbd3057, 0xca5c, 0x4622, [8]byte{0xb4, 0x2d, 0xbc, 0x56, 0xdb, 0x0a, 0xe5, 0x16}}\n\tFOLDERID_AdminTools             = &KNOWNFOLDERID{0x724ef170, 0xa42d, 0x4fef, [8]byte{0x9f, 0x26, 0xb6, 0x0e, 0x84, 0x6f, 0xba, 0x4f}}\n\tFOLDERID_CommonAdminTools       = &KNOWNFOLDERID{0xd0384e7d, 0xbac3, 0x4797, [8]byte{0x8f, 0x14, 0xcb, 0xa2, 0x29, 0xb3, 0x92, 0xb5}}\n\tFOLDERID_Music                  = &KNOWNFOLDERID{0x4bd8d571, 0x6d19, 0x48d3, [8]byte{0xbe, 0x97, 0x42, 0x22, 0x20, 0x08, 0x0e, 0x43}}\n\tFOLDERID_Videos                 = &KNOWNFOLDERID{0x18989b1d, 0x99b5, 0x455b, [8]byte{0x84, 0x1c, 0xab, 0x7c, 0x74, 0xe4, 0xdd, 0xfc}}\n\tFOLDERID_Ringtones              = &KNOWNFOLDERID{0xc870044b, 0xf49e, 0x4126, [8]byte{0xa9, 0xc3, 0xb5, 0x2a, 0x1f, 0xf4, 0x11, 0xe8}}\n\tFOLDERID_PublicPictures         = &KNOWNFOLDERID{0xb6ebfb86, 0x6907, 0x413c, [8]byte{0x9a, 0xf7, 0x4f, 0xc2, 0xab, 0xf0, 0x7c, 0xc5}}\n\tFOLDERID_PublicMusic            = &KNOWNFOLDERID{0x3214fab5, 0x9757, 0x4298, [8]byte{0xbb, 0x61, 0x92, 0xa9, 0xde, 0xaa, 0x44, 0xff}}\n\tFOLDERID_PublicVideos           = &KNOWNFOLDERID{0x2400183a, 0x6185, 0x49fb, [8]byte{0xa2, 0xd8, 0x4a, 0x39, 0x2a, 0x60, 0x2b, 0xa3}}\n\tFOLDERID_PublicRingtones        = &KNOWNFOLDERID{0xe555ab60, 0x153b, 0x4d17, [8]byte{0x9f, 0x04, 0xa5, 0xfe, 0x99, 0xfc, 0x15, 0xec}}\n\tFOLDERID_ResourceDir            = &KNOWNFOLDERID{0x8ad10c31, 0x2adb, 0x4296, [8]byte{0xa8, 0xf7, 0xe4, 0x70, 0x12, 0x32, 0xc9, 0x72}}\n\tFOLDERID_LocalizedResourcesDir  = &KNOWNFOLDERID{0x2a00375e, 0x224c, 0x49de, [8]byte{0xb8, 0xd1, 0x44, 0x0d, 0xf7, 0xef, 0x3d, 0xdc}}\n\tFOLDERID_CommonOEMLinks         = &KNOWNFOLDERID{0xc1bae2d0, 0x10df, 0x4334, [8]byte{0xbe, 0xdd, 0x7a, 0xa2, 0x0b, 0x22, 0x7a, 0x9d}}\n\tFOLDERID_CDBurning              = &KNOWNFOLDERID{0x9e52ab10, 0xf80d, 0x49df, [8]byte{0xac, 0xb8, 0x43, 0x30, 0xf5, 0x68, 0x78, 0x55}}\n\tFOLDERID_UserProfiles           = &KNOWNFOLDERID{0x0762d272, 0xc50a, 0x4bb0, [8]byte{0xa3, 0x82, 0x69, 0x7d, 0xcd, 0x72, 0x9b, 0x80}}\n\tFOLDERID_Playlists              = &KNOWNFOLDERID{0xde92c1c7, 0x837f, 0x4f69, [8]byte{0xa3, 0xbb, 0x86, 0xe6, 0x31, 0x20, 0x4a, 0x23}}\n\tFOLDERID_SamplePlaylists        = &KNOWNFOLDERID{0x15ca69b3, 0x30ee, 0x49c1, [8]byte{0xac, 0xe1, 0x6b, 0x5e, 0xc3, 0x72, 0xaf, 0xb5}}\n\tFOLDERID_SampleMusic            = &KNOWNFOLDERID{0xb250c668, 0xf57d, 0x4ee1, [8]byte{0xa6, 0x3c, 0x29, 0x0e, 0xe7, 0xd1, 0xaa, 0x1f}}\n\tFOLDERID_SamplePictures         = &KNOWNFOLDERID{0xc4900540, 0x2379, 0x4c75, [8]byte{0x84, 0x4b, 0x64, 0xe6, 0xfa, 0xf8, 0x71, 0x6b}}\n\tFOLDERID_SampleVideos           = &KNOWNFOLDERID{0x859ead94, 0x2e85, 0x48ad, [8]byte{0xa7, 0x1a, 0x09, 0x69, 0xcb, 0x56, 0xa6, 0xcd}}\n\tFOLDERID_PhotoAlbums            = &KNOWNFOLDERID{0x69d2cf90, 0xfc33, 0x4fb7, [8]byte{0x9a, 0x0c, 0xeb, 0xb0, 0xf0, 0xfc, 0xb4, 0x3c}}\n\tFOLDERID_Public                 = &KNOWNFOLDERID{0xdfdf76a2, 0xc82a, 0x4d63, [8]byte{0x90, 0x6a, 0x56, 0x44, 0xac, 0x45, 0x73, 0x85}}\n\tFOLDERID_ChangeRemovePrograms   = &KNOWNFOLDERID{0xdf7266ac, 0x9274, 0x4867, [8]byte{0x8d, 0x55, 0x3b, 0xd6, 0x61, 0xde, 0x87, 0x2d}}\n\tFOLDERID_AppUpdates             = &KNOWNFOLDERID{0xa305ce99, 0xf527, 0x492b, [8]byte{0x8b, 0x1a, 0x7e, 0x76, 0xfa, 0x98, 0xd6, 0xe4}}\n\tFOLDERID_AddNewPrograms         = &KNOWNFOLDERID{0xde61d971, 0x5ebc, 0x4f02, [8]byte{0xa3, 0xa9, 0x6c, 0x82, 0x89, 0x5e, 0x5c, 0x04}}\n\tFOLDERID_Downloads              = &KNOWNFOLDERID{0x374de290, 0x123f, 0x4565, [8]byte{0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b}}\n\tFOLDERID_PublicDownloads        = &KNOWNFOLDERID{0x3d644c9b, 0x1fb8, 0x4f30, [8]byte{0x9b, 0x45, 0xf6, 0x70, 0x23, 0x5f, 0x79, 0xc0}}\n\tFOLDERID_SavedSearches          = &KNOWNFOLDERID{0x7d1d3a04, 0xdebb, 0x4115, [8]byte{0x95, 0xcf, 0x2f, 0x29, 0xda, 0x29, 0x20, 0xda}}\n\tFOLDERID_QuickLaunch            = &KNOWNFOLDERID{0x52a4f021, 0x7b75, 0x48a9, [8]byte{0x9f, 0x6b, 0x4b, 0x87, 0xa2, 0x10, 0xbc, 0x8f}}\n\tFOLDERID_Contacts               = &KNOWNFOLDERID{0x56784854, 0xc6cb, 0x462b, [8]byte{0x81, 0x69, 0x88, 0xe3, 0x50, 0xac, 0xb8, 0x82}}\n\tFOLDERID_SidebarParts           = &KNOWNFOLDERID{0xa75d362e, 0x50fc, 0x4fb7, [8]byte{0xac, 0x2c, 0xa8, 0xbe, 0xaa, 0x31, 0x44, 0x93}}\n\tFOLDERID_SidebarDefaultParts    = &KNOWNFOLDERID{0x7b396e54, 0x9ec5, 0x4300, [8]byte{0xbe, 0x0a, 0x24, 0x82, 0xeb, 0xae, 0x1a, 0x26}}\n\tFOLDERID_PublicGameTasks        = &KNOWNFOLDERID{0xdebf2536, 0xe1a8, 0x4c59, [8]byte{0xb6, 0xa2, 0x41, 0x45, 0x86, 0x47, 0x6a, 0xea}}\n\tFOLDERID_GameTasks              = &KNOWNFOLDERID{0x054fae61, 0x4dd8, 0x4787, [8]byte{0x80, 0xb6, 0x09, 0x02, 0x20, 0xc4, 0xb7, 0x00}}\n\tFOLDERID_SavedGames             = &KNOWNFOLDERID{0x4c5c32ff, 0xbb9d, 0x43b0, [8]byte{0xb5, 0xb4, 0x2d, 0x72, 0xe5, 0x4e, 0xaa, 0xa4}}\n\tFOLDERID_Games                  = &KNOWNFOLDERID{0xcac52c1a, 0xb53d, 0x4edc, [8]byte{0x92, 0xd7, 0x6b, 0x2e, 0x8a, 0xc1, 0x94, 0x34}}\n\tFOLDERID_SEARCH_MAPI            = &KNOWNFOLDERID{0x98ec0e18, 0x2098, 0x4d44, [8]byte{0x86, 0x44, 0x66, 0x97, 0x93, 0x15, 0xa2, 0x81}}\n\tFOLDERID_SEARCH_CSC             = &KNOWNFOLDERID{0xee32e446, 0x31ca, 0x4aba, [8]byte{0x81, 0x4f, 0xa5, 0xeb, 0xd2, 0xfd, 0x6d, 0x5e}}\n\tFOLDERID_Links                  = &KNOWNFOLDERID{0xbfb9d5e0, 0xc6a9, 0x404c, [8]byte{0xb2, 0xb2, 0xae, 0x6d, 0xb6, 0xaf, 0x49, 0x68}}\n\tFOLDERID_UsersFiles             = &KNOWNFOLDERID{0xf3ce0f7c, 0x4901, 0x4acc, [8]byte{0x86, 0x48, 0xd5, 0xd4, 0x4b, 0x04, 0xef, 0x8f}}\n\tFOLDERID_UsersLibraries         = &KNOWNFOLDERID{0xa302545d, 0xdeff, 0x464b, [8]byte{0xab, 0xe8, 0x61, 0xc8, 0x64, 0x8d, 0x93, 0x9b}}\n\tFOLDERID_SearchHome             = &KNOWNFOLDERID{0x190337d1, 0xb8ca, 0x4121, [8]byte{0xa6, 0x39, 0x6d, 0x47, 0x2d, 0x16, 0x97, 0x2a}}\n\tFOLDERID_OriginalImages         = &KNOWNFOLDERID{0x2c36c0aa, 0x5812, 0x4b87, [8]byte{0xbf, 0xd0, 0x4c, 0xd0, 0xdf, 0xb1, 0x9b, 0x39}}\n\tFOLDERID_DocumentsLibrary       = &KNOWNFOLDERID{0x7b0db17d, 0x9cd2, 0x4a93, [8]byte{0x97, 0x33, 0x46, 0xcc, 0x89, 0x02, 0x2e, 0x7c}}\n\tFOLDERID_MusicLibrary           = &KNOWNFOLDERID{0x2112ab0a, 0xc86a, 0x4ffe, [8]byte{0xa3, 0x68, 0x0d, 0xe9, 0x6e, 0x47, 0x01, 0x2e}}\n\tFOLDERID_PicturesLibrary        = &KNOWNFOLDERID{0xa990ae9f, 0xa03b, 0x4e80, [8]byte{0x94, 0xbc, 0x99, 0x12, 0xd7, 0x50, 0x41, 0x04}}\n\tFOLDERID_VideosLibrary          = &KNOWNFOLDERID{0x491e922f, 0x5643, 0x4af4, [8]byte{0xa7, 0xeb, 0x4e, 0x7a, 0x13, 0x8d, 0x81, 0x74}}\n\tFOLDERID_RecordedTVLibrary      = &KNOWNFOLDERID{0x1a6fdba2, 0xf42d, 0x4358, [8]byte{0xa7, 0x98, 0xb7, 0x4d, 0x74, 0x59, 0x26, 0xc5}}\n\tFOLDERID_HomeGroup              = &KNOWNFOLDERID{0x52528a6b, 0xb9e3, 0x4add, [8]byte{0xb6, 0x0d, 0x58, 0x8c, 0x2d, 0xba, 0x84, 0x2d}}\n\tFOLDERID_HomeGroupCurrentUser   = &KNOWNFOLDERID{0x9b74b6a3, 0x0dfd, 0x4f11, [8]byte{0x9e, 0x78, 0x5f, 0x78, 0x00, 0xf2, 0xe7, 0x72}}\n\tFOLDERID_DeviceMetadataStore    = &KNOWNFOLDERID{0x5ce4a5e9, 0xe4eb, 0x479d, [8]byte{0xb8, 0x9f, 0x13, 0x0c, 0x02, 0x88, 0x61, 0x55}}\n\tFOLDERID_Libraries              = &KNOWNFOLDERID{0x1b3ea5dc, 0xb587, 0x4786, [8]byte{0xb4, 0xef, 0xbd, 0x1d, 0xc3, 0x32, 0xae, 0xae}}\n\tFOLDERID_PublicLibraries        = &KNOWNFOLDERID{0x48daf80b, 0xe6cf, 0x4f4e, [8]byte{0xb8, 0x00, 0x0e, 0x69, 0xd8, 0x4e, 0xe3, 0x84}}\n\tFOLDERID_UserPinned             = &KNOWNFOLDERID{0x9e3995ab, 0x1f9c, 0x4f13, [8]byte{0xb8, 0x27, 0x48, 0xb2, 0x4b, 0x6c, 0x71, 0x74}}\n\tFOLDERID_ImplicitAppShortcuts   = &KNOWNFOLDERID{0xbcb5256f, 0x79f6, 0x4cee, [8]byte{0xb7, 0x25, 0xdc, 0x34, 0xe4, 0x02, 0xfd, 0x46}}\n\tFOLDERID_AccountPictures        = &KNOWNFOLDERID{0x008ca0b1, 0x55b4, 0x4c56, [8]byte{0xb8, 0xa8, 0x4d, 0xe4, 0xb2, 0x99, 0xd3, 0xbe}}\n\tFOLDERID_PublicUserTiles        = &KNOWNFOLDERID{0x0482af6c, 0x08f1, 0x4c34, [8]byte{0x8c, 0x90, 0xe1, 0x7e, 0xc9, 0x8b, 0x1e, 0x17}}\n\tFOLDERID_AppsFolder             = &KNOWNFOLDERID{0x1e87508d, 0x89c2, 0x42f0, [8]byte{0x8a, 0x7e, 0x64, 0x5a, 0x0f, 0x50, 0xca, 0x58}}\n\tFOLDERID_StartMenuAllPrograms   = &KNOWNFOLDERID{0xf26305ef, 0x6948, 0x40b9, [8]byte{0xb2, 0x55, 0x81, 0x45, 0x3d, 0x09, 0xc7, 0x85}}\n\tFOLDERID_CommonStartMenuPlaces  = &KNOWNFOLDERID{0xa440879f, 0x87a0, 0x4f7d, [8]byte{0xb7, 0x00, 0x02, 0x07, 0xb9, 0x66, 0x19, 0x4a}}\n\tFOLDERID_ApplicationShortcuts   = &KNOWNFOLDERID{0xa3918781, 0xe5f2, 0x4890, [8]byte{0xb3, 0xd9, 0xa7, 0xe5, 0x43, 0x32, 0x32, 0x8c}}\n\tFOLDERID_RoamingTiles           = &KNOWNFOLDERID{0x00bcfc5a, 0xed94, 0x4e48, [8]byte{0x96, 0xa1, 0x3f, 0x62, 0x17, 0xf2, 0x19, 0x90}}\n\tFOLDERID_RoamedTileImages       = &KNOWNFOLDERID{0xaaa8d5a5, 0xf1d6, 0x4259, [8]byte{0xba, 0xa8, 0x78, 0xe7, 0xef, 0x60, 0x83, 0x5e}}\n\tFOLDERID_Screenshots            = &KNOWNFOLDERID{0xb7bede81, 0xdf94, 0x4682, [8]byte{0xa7, 0xd8, 0x57, 0xa5, 0x26, 0x20, 0xb8, 0x6f}}\n\tFOLDERID_CameraRoll             = &KNOWNFOLDERID{0xab5fb87b, 0x7ce2, 0x4f83, [8]byte{0x91, 0x5d, 0x55, 0x08, 0x46, 0xc9, 0x53, 0x7b}}\n\tFOLDERID_SkyDrive               = &KNOWNFOLDERID{0xa52bba46, 0xe9e1, 0x435f, [8]byte{0xb3, 0xd9, 0x28, 0xda, 0xa6, 0x48, 0xc0, 0xf6}}\n\tFOLDERID_OneDrive               = &KNOWNFOLDERID{0xa52bba46, 0xe9e1, 0x435f, [8]byte{0xb3, 0xd9, 0x28, 0xda, 0xa6, 0x48, 0xc0, 0xf6}}\n\tFOLDERID_SkyDriveDocuments      = &KNOWNFOLDERID{0x24d89e24, 0x2f19, 0x4534, [8]byte{0x9d, 0xde, 0x6a, 0x66, 0x71, 0xfb, 0xb8, 0xfe}}\n\tFOLDERID_SkyDrivePictures       = &KNOWNFOLDERID{0x339719b5, 0x8c47, 0x4894, [8]byte{0x94, 0xc2, 0xd8, 0xf7, 0x7a, 0xdd, 0x44, 0xa6}}\n\tFOLDERID_SkyDriveMusic          = &KNOWNFOLDERID{0xc3f2459e, 0x80d6, 0x45dc, [8]byte{0xbf, 0xef, 0x1f, 0x76, 0x9f, 0x2b, 0xe7, 0x30}}\n\tFOLDERID_SkyDriveCameraRoll     = &KNOWNFOLDERID{0x767e6811, 0x49cb, 0x4273, [8]byte{0x87, 0xc2, 0x20, 0xf3, 0x55, 0xe1, 0x08, 0x5b}}\n\tFOLDERID_SearchHistory          = &KNOWNFOLDERID{0x0d4c3db6, 0x03a3, 0x462f, [8]byte{0xa0, 0xe6, 0x08, 0x92, 0x4c, 0x41, 0xb5, 0xd4}}\n\tFOLDERID_SearchTemplates        = &KNOWNFOLDERID{0x7e636bfe, 0xdfa9, 0x4d5e, [8]byte{0xb4, 0x56, 0xd7, 0xb3, 0x98, 0x51, 0xd8, 0xa9}}\n\tFOLDERID_CameraRollLibrary      = &KNOWNFOLDERID{0x2b20df75, 0x1eda, 0x4039, [8]byte{0x80, 0x97, 0x38, 0x79, 0x82, 0x27, 0xd5, 0xb7}}\n\tFOLDERID_SavedPictures          = &KNOWNFOLDERID{0x3b193882, 0xd3ad, 0x4eab, [8]byte{0x96, 0x5a, 0x69, 0x82, 0x9d, 0x1f, 0xb5, 0x9f}}\n\tFOLDERID_SavedPicturesLibrary   = &KNOWNFOLDERID{0xe25b5812, 0xbe88, 0x4bd9, [8]byte{0x94, 0xb0, 0x29, 0x23, 0x34, 0x77, 0xb6, 0xc3}}\n\tFOLDERID_RetailDemo             = &KNOWNFOLDERID{0x12d4c69e, 0x24ad, 0x4923, [8]byte{0xbe, 0x19, 0x31, 0x32, 0x1c, 0x43, 0xa7, 0x67}}\n\tFOLDERID_Device                 = &KNOWNFOLDERID{0x1c2ac1dc, 0x4358, 0x4b6c, [8]byte{0x97, 0x33, 0xaf, 0x21, 0x15, 0x65, 0x76, 0xf0}}\n\tFOLDERID_DevelopmentFiles       = &KNOWNFOLDERID{0xdbe8e08e, 0x3053, 0x4bbc, [8]byte{0xb1, 0x83, 0x2a, 0x7b, 0x2b, 0x19, 0x1e, 0x59}}\n\tFOLDERID_Objects3D              = &KNOWNFOLDERID{0x31c0dd25, 0x9439, 0x4f12, [8]byte{0xbf, 0x41, 0x7f, 0xf4, 0xed, 0xa3, 0x87, 0x22}}\n\tFOLDERID_AppCaptures            = &KNOWNFOLDERID{0xedc0fe71, 0x98d8, 0x4f4a, [8]byte{0xb9, 0x20, 0xc8, 0xdc, 0x13, 0x3c, 0xb1, 0x65}}\n\tFOLDERID_LocalDocuments         = &KNOWNFOLDERID{0xf42ee2d3, 0x909f, 0x4907, [8]byte{0x88, 0x71, 0x4c, 0x22, 0xfc, 0x0b, 0xf7, 0x56}}\n\tFOLDERID_LocalPictures          = &KNOWNFOLDERID{0x0ddd015d, 0xb06c, 0x45d5, [8]byte{0x8c, 0x4c, 0xf5, 0x97, 0x13, 0x85, 0x46, 0x39}}\n\tFOLDERID_LocalVideos            = &KNOWNFOLDERID{0x35286a68, 0x3c57, 0x41a1, [8]byte{0xbb, 0xb1, 0x0e, 0xae, 0x73, 0xd7, 0x6c, 0x95}}\n\tFOLDERID_LocalMusic             = &KNOWNFOLDERID{0xa0c69a99, 0x21c8, 0x4671, [8]byte{0x87, 0x03, 0x79, 0x34, 0x16, 0x2f, 0xcf, 0x1d}}\n\tFOLDERID_LocalDownloads         = &KNOWNFOLDERID{0x7d83ee9b, 0x2244, 0x4e70, [8]byte{0xb1, 0xf5, 0x53, 0x93, 0x04, 0x2a, 0xf1, 0xe4}}\n\tFOLDERID_RecordedCalls          = &KNOWNFOLDERID{0x2f8b40c2, 0x83ed, 0x48ee, [8]byte{0xb3, 0x83, 0xa1, 0xf1, 0x57, 0xec, 0x6f, 0x9a}}\n\tFOLDERID_AllAppMods             = &KNOWNFOLDERID{0x7ad67899, 0x66af, 0x43ba, [8]byte{0x91, 0x56, 0x6a, 0xad, 0x42, 0xe6, 0xc5, 0x96}}\n\tFOLDERID_CurrentAppMods         = &KNOWNFOLDERID{0x3db40b20, 0x2a30, 0x4dbe, [8]byte{0x91, 0x7e, 0x77, 0x1d, 0xd2, 0x1d, 0xd0, 0x99}}\n\tFOLDERID_AppDataDesktop         = &KNOWNFOLDERID{0xb2c5e279, 0x7add, 0x439f, [8]byte{0xb2, 0x8c, 0xc4, 0x1f, 0xe1, 0xbb, 0xf6, 0x72}}\n\tFOLDERID_AppDataDocuments       = &KNOWNFOLDERID{0x7be16610, 0x1f7f, 0x44ac, [8]byte{0xbf, 0xf0, 0x83, 0xe1, 0x5f, 0x2f, 0xfc, 0xa1}}\n\tFOLDERID_AppDataFavorites       = &KNOWNFOLDERID{0x7cfbefbc, 0xde1f, 0x45aa, [8]byte{0xb8, 0x43, 0xa5, 0x42, 0xac, 0x53, 0x6c, 0xc9}}\n\tFOLDERID_AppDataProgramData     = &KNOWNFOLDERID{0x559d40a3, 0xa036, 0x40fa, [8]byte{0xaf, 0x61, 0x84, 0xcb, 0x43, 0x0a, 0x4d, 0x34}}\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/windows/zsyscall_windows.go",
    "content": "// Code generated by 'go generate'; DO NOT EDIT.\n\npackage windows\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\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\t// TODO: add more here, after collecting data on the common\n\t// error values see on Windows. (perhaps when running\n\t// all.bat?)\n\treturn e\n}\n\nvar (\n\tmodCfgMgr32 = NewLazySystemDLL(\"CfgMgr32.dll\")\n\tmodadvapi32 = NewLazySystemDLL(\"advapi32.dll\")\n\tmodcrypt32  = NewLazySystemDLL(\"crypt32.dll\")\n\tmoddnsapi   = NewLazySystemDLL(\"dnsapi.dll\")\n\tmoddwmapi   = NewLazySystemDLL(\"dwmapi.dll\")\n\tmodiphlpapi = NewLazySystemDLL(\"iphlpapi.dll\")\n\tmodkernel32 = NewLazySystemDLL(\"kernel32.dll\")\n\tmodmswsock  = NewLazySystemDLL(\"mswsock.dll\")\n\tmodnetapi32 = NewLazySystemDLL(\"netapi32.dll\")\n\tmodntdll    = NewLazySystemDLL(\"ntdll.dll\")\n\tmodole32    = NewLazySystemDLL(\"ole32.dll\")\n\tmodpsapi    = NewLazySystemDLL(\"psapi.dll\")\n\tmodsechost  = NewLazySystemDLL(\"sechost.dll\")\n\tmodsecur32  = NewLazySystemDLL(\"secur32.dll\")\n\tmodsetupapi = NewLazySystemDLL(\"setupapi.dll\")\n\tmodshell32  = NewLazySystemDLL(\"shell32.dll\")\n\tmoduser32   = NewLazySystemDLL(\"user32.dll\")\n\tmoduserenv  = NewLazySystemDLL(\"userenv.dll\")\n\tmodversion  = NewLazySystemDLL(\"version.dll\")\n\tmodwinmm    = NewLazySystemDLL(\"winmm.dll\")\n\tmodwintrust = NewLazySystemDLL(\"wintrust.dll\")\n\tmodws2_32   = NewLazySystemDLL(\"ws2_32.dll\")\n\tmodwtsapi32 = NewLazySystemDLL(\"wtsapi32.dll\")\n\n\tprocCM_Get_DevNode_Status                                = modCfgMgr32.NewProc(\"CM_Get_DevNode_Status\")\n\tprocCM_Get_Device_Interface_ListW                        = modCfgMgr32.NewProc(\"CM_Get_Device_Interface_ListW\")\n\tprocCM_Get_Device_Interface_List_SizeW                   = modCfgMgr32.NewProc(\"CM_Get_Device_Interface_List_SizeW\")\n\tprocCM_MapCrToWin32Err                                   = modCfgMgr32.NewProc(\"CM_MapCrToWin32Err\")\n\tprocAdjustTokenGroups                                    = modadvapi32.NewProc(\"AdjustTokenGroups\")\n\tprocAdjustTokenPrivileges                                = modadvapi32.NewProc(\"AdjustTokenPrivileges\")\n\tprocAllocateAndInitializeSid                             = modadvapi32.NewProc(\"AllocateAndInitializeSid\")\n\tprocBuildSecurityDescriptorW                             = modadvapi32.NewProc(\"BuildSecurityDescriptorW\")\n\tprocChangeServiceConfig2W                                = modadvapi32.NewProc(\"ChangeServiceConfig2W\")\n\tprocChangeServiceConfigW                                 = modadvapi32.NewProc(\"ChangeServiceConfigW\")\n\tprocCheckTokenMembership                                 = modadvapi32.NewProc(\"CheckTokenMembership\")\n\tprocCloseServiceHandle                                   = modadvapi32.NewProc(\"CloseServiceHandle\")\n\tprocControlService                                       = modadvapi32.NewProc(\"ControlService\")\n\tprocConvertSecurityDescriptorToStringSecurityDescriptorW = modadvapi32.NewProc(\"ConvertSecurityDescriptorToStringSecurityDescriptorW\")\n\tprocConvertSidToStringSidW                               = modadvapi32.NewProc(\"ConvertSidToStringSidW\")\n\tprocConvertStringSecurityDescriptorToSecurityDescriptorW = modadvapi32.NewProc(\"ConvertStringSecurityDescriptorToSecurityDescriptorW\")\n\tprocConvertStringSidToSidW                               = modadvapi32.NewProc(\"ConvertStringSidToSidW\")\n\tprocCopySid                                              = modadvapi32.NewProc(\"CopySid\")\n\tprocCreateProcessAsUserW                                 = modadvapi32.NewProc(\"CreateProcessAsUserW\")\n\tprocCreateServiceW                                       = modadvapi32.NewProc(\"CreateServiceW\")\n\tprocCreateWellKnownSid                                   = modadvapi32.NewProc(\"CreateWellKnownSid\")\n\tprocCryptAcquireContextW                                 = modadvapi32.NewProc(\"CryptAcquireContextW\")\n\tprocCryptGenRandom                                       = modadvapi32.NewProc(\"CryptGenRandom\")\n\tprocCryptReleaseContext                                  = modadvapi32.NewProc(\"CryptReleaseContext\")\n\tprocDeleteService                                        = modadvapi32.NewProc(\"DeleteService\")\n\tprocDeregisterEventSource                                = modadvapi32.NewProc(\"DeregisterEventSource\")\n\tprocDuplicateTokenEx                                     = modadvapi32.NewProc(\"DuplicateTokenEx\")\n\tprocEnumDependentServicesW                               = modadvapi32.NewProc(\"EnumDependentServicesW\")\n\tprocEnumServicesStatusExW                                = modadvapi32.NewProc(\"EnumServicesStatusExW\")\n\tprocEqualSid                                             = modadvapi32.NewProc(\"EqualSid\")\n\tprocFreeSid                                              = modadvapi32.NewProc(\"FreeSid\")\n\tprocGetAce                                               = modadvapi32.NewProc(\"GetAce\")\n\tprocGetLengthSid                                         = modadvapi32.NewProc(\"GetLengthSid\")\n\tprocGetNamedSecurityInfoW                                = modadvapi32.NewProc(\"GetNamedSecurityInfoW\")\n\tprocGetSecurityDescriptorControl                         = modadvapi32.NewProc(\"GetSecurityDescriptorControl\")\n\tprocGetSecurityDescriptorDacl                            = modadvapi32.NewProc(\"GetSecurityDescriptorDacl\")\n\tprocGetSecurityDescriptorGroup                           = modadvapi32.NewProc(\"GetSecurityDescriptorGroup\")\n\tprocGetSecurityDescriptorLength                          = modadvapi32.NewProc(\"GetSecurityDescriptorLength\")\n\tprocGetSecurityDescriptorOwner                           = modadvapi32.NewProc(\"GetSecurityDescriptorOwner\")\n\tprocGetSecurityDescriptorRMControl                       = modadvapi32.NewProc(\"GetSecurityDescriptorRMControl\")\n\tprocGetSecurityDescriptorSacl                            = modadvapi32.NewProc(\"GetSecurityDescriptorSacl\")\n\tprocGetSecurityInfo                                      = modadvapi32.NewProc(\"GetSecurityInfo\")\n\tprocGetSidIdentifierAuthority                            = modadvapi32.NewProc(\"GetSidIdentifierAuthority\")\n\tprocGetSidSubAuthority                                   = modadvapi32.NewProc(\"GetSidSubAuthority\")\n\tprocGetSidSubAuthorityCount                              = modadvapi32.NewProc(\"GetSidSubAuthorityCount\")\n\tprocGetTokenInformation                                  = modadvapi32.NewProc(\"GetTokenInformation\")\n\tprocImpersonateSelf                                      = modadvapi32.NewProc(\"ImpersonateSelf\")\n\tprocInitializeSecurityDescriptor                         = modadvapi32.NewProc(\"InitializeSecurityDescriptor\")\n\tprocInitiateSystemShutdownExW                            = modadvapi32.NewProc(\"InitiateSystemShutdownExW\")\n\tprocIsTokenRestricted                                    = modadvapi32.NewProc(\"IsTokenRestricted\")\n\tprocIsValidSecurityDescriptor                            = modadvapi32.NewProc(\"IsValidSecurityDescriptor\")\n\tprocIsValidSid                                           = modadvapi32.NewProc(\"IsValidSid\")\n\tprocIsWellKnownSid                                       = modadvapi32.NewProc(\"IsWellKnownSid\")\n\tprocLookupAccountNameW                                   = modadvapi32.NewProc(\"LookupAccountNameW\")\n\tprocLookupAccountSidW                                    = modadvapi32.NewProc(\"LookupAccountSidW\")\n\tprocLookupPrivilegeValueW                                = modadvapi32.NewProc(\"LookupPrivilegeValueW\")\n\tprocMakeAbsoluteSD                                       = modadvapi32.NewProc(\"MakeAbsoluteSD\")\n\tprocMakeSelfRelativeSD                                   = modadvapi32.NewProc(\"MakeSelfRelativeSD\")\n\tprocNotifyServiceStatusChangeW                           = modadvapi32.NewProc(\"NotifyServiceStatusChangeW\")\n\tprocOpenProcessToken                                     = modadvapi32.NewProc(\"OpenProcessToken\")\n\tprocOpenSCManagerW                                       = modadvapi32.NewProc(\"OpenSCManagerW\")\n\tprocOpenServiceW                                         = modadvapi32.NewProc(\"OpenServiceW\")\n\tprocOpenThreadToken                                      = modadvapi32.NewProc(\"OpenThreadToken\")\n\tprocQueryServiceConfig2W                                 = modadvapi32.NewProc(\"QueryServiceConfig2W\")\n\tprocQueryServiceConfigW                                  = modadvapi32.NewProc(\"QueryServiceConfigW\")\n\tprocQueryServiceDynamicInformation                       = modadvapi32.NewProc(\"QueryServiceDynamicInformation\")\n\tprocQueryServiceLockStatusW                              = modadvapi32.NewProc(\"QueryServiceLockStatusW\")\n\tprocQueryServiceStatus                                   = modadvapi32.NewProc(\"QueryServiceStatus\")\n\tprocQueryServiceStatusEx                                 = modadvapi32.NewProc(\"QueryServiceStatusEx\")\n\tprocRegCloseKey                                          = modadvapi32.NewProc(\"RegCloseKey\")\n\tprocRegEnumKeyExW                                        = modadvapi32.NewProc(\"RegEnumKeyExW\")\n\tprocRegNotifyChangeKeyValue                              = modadvapi32.NewProc(\"RegNotifyChangeKeyValue\")\n\tprocRegOpenKeyExW                                        = modadvapi32.NewProc(\"RegOpenKeyExW\")\n\tprocRegQueryInfoKeyW                                     = modadvapi32.NewProc(\"RegQueryInfoKeyW\")\n\tprocRegQueryValueExW                                     = modadvapi32.NewProc(\"RegQueryValueExW\")\n\tprocRegisterEventSourceW                                 = modadvapi32.NewProc(\"RegisterEventSourceW\")\n\tprocRegisterServiceCtrlHandlerExW                        = modadvapi32.NewProc(\"RegisterServiceCtrlHandlerExW\")\n\tprocReportEventW                                         = modadvapi32.NewProc(\"ReportEventW\")\n\tprocRevertToSelf                                         = modadvapi32.NewProc(\"RevertToSelf\")\n\tprocSetEntriesInAclW                                     = modadvapi32.NewProc(\"SetEntriesInAclW\")\n\tprocSetKernelObjectSecurity                              = modadvapi32.NewProc(\"SetKernelObjectSecurity\")\n\tprocSetNamedSecurityInfoW                                = modadvapi32.NewProc(\"SetNamedSecurityInfoW\")\n\tprocSetSecurityDescriptorControl                         = modadvapi32.NewProc(\"SetSecurityDescriptorControl\")\n\tprocSetSecurityDescriptorDacl                            = modadvapi32.NewProc(\"SetSecurityDescriptorDacl\")\n\tprocSetSecurityDescriptorGroup                           = modadvapi32.NewProc(\"SetSecurityDescriptorGroup\")\n\tprocSetSecurityDescriptorOwner                           = modadvapi32.NewProc(\"SetSecurityDescriptorOwner\")\n\tprocSetSecurityDescriptorRMControl                       = modadvapi32.NewProc(\"SetSecurityDescriptorRMControl\")\n\tprocSetSecurityDescriptorSacl                            = modadvapi32.NewProc(\"SetSecurityDescriptorSacl\")\n\tprocSetSecurityInfo                                      = modadvapi32.NewProc(\"SetSecurityInfo\")\n\tprocSetServiceStatus                                     = modadvapi32.NewProc(\"SetServiceStatus\")\n\tprocSetThreadToken                                       = modadvapi32.NewProc(\"SetThreadToken\")\n\tprocSetTokenInformation                                  = modadvapi32.NewProc(\"SetTokenInformation\")\n\tprocStartServiceCtrlDispatcherW                          = modadvapi32.NewProc(\"StartServiceCtrlDispatcherW\")\n\tprocStartServiceW                                        = modadvapi32.NewProc(\"StartServiceW\")\n\tprocCertAddCertificateContextToStore                     = modcrypt32.NewProc(\"CertAddCertificateContextToStore\")\n\tprocCertCloseStore                                       = modcrypt32.NewProc(\"CertCloseStore\")\n\tprocCertCreateCertificateContext                         = modcrypt32.NewProc(\"CertCreateCertificateContext\")\n\tprocCertDeleteCertificateFromStore                       = modcrypt32.NewProc(\"CertDeleteCertificateFromStore\")\n\tprocCertDuplicateCertificateContext                      = modcrypt32.NewProc(\"CertDuplicateCertificateContext\")\n\tprocCertEnumCertificatesInStore                          = modcrypt32.NewProc(\"CertEnumCertificatesInStore\")\n\tprocCertFindCertificateInStore                           = modcrypt32.NewProc(\"CertFindCertificateInStore\")\n\tprocCertFindChainInStore                                 = modcrypt32.NewProc(\"CertFindChainInStore\")\n\tprocCertFindExtension                                    = modcrypt32.NewProc(\"CertFindExtension\")\n\tprocCertFreeCertificateChain                             = modcrypt32.NewProc(\"CertFreeCertificateChain\")\n\tprocCertFreeCertificateContext                           = modcrypt32.NewProc(\"CertFreeCertificateContext\")\n\tprocCertGetCertificateChain                              = modcrypt32.NewProc(\"CertGetCertificateChain\")\n\tprocCertGetNameStringW                                   = modcrypt32.NewProc(\"CertGetNameStringW\")\n\tprocCertOpenStore                                        = modcrypt32.NewProc(\"CertOpenStore\")\n\tprocCertOpenSystemStoreW                                 = modcrypt32.NewProc(\"CertOpenSystemStoreW\")\n\tprocCertVerifyCertificateChainPolicy                     = modcrypt32.NewProc(\"CertVerifyCertificateChainPolicy\")\n\tprocCryptAcquireCertificatePrivateKey                    = modcrypt32.NewProc(\"CryptAcquireCertificatePrivateKey\")\n\tprocCryptDecodeObject                                    = modcrypt32.NewProc(\"CryptDecodeObject\")\n\tprocCryptProtectData                                     = modcrypt32.NewProc(\"CryptProtectData\")\n\tprocCryptQueryObject                                     = modcrypt32.NewProc(\"CryptQueryObject\")\n\tprocCryptUnprotectData                                   = modcrypt32.NewProc(\"CryptUnprotectData\")\n\tprocPFXImportCertStore                                   = modcrypt32.NewProc(\"PFXImportCertStore\")\n\tprocDnsNameCompare_W                                     = moddnsapi.NewProc(\"DnsNameCompare_W\")\n\tprocDnsQuery_W                                           = moddnsapi.NewProc(\"DnsQuery_W\")\n\tprocDnsRecordListFree                                    = moddnsapi.NewProc(\"DnsRecordListFree\")\n\tprocDwmGetWindowAttribute                                = moddwmapi.NewProc(\"DwmGetWindowAttribute\")\n\tprocDwmSetWindowAttribute                                = moddwmapi.NewProc(\"DwmSetWindowAttribute\")\n\tprocCancelMibChangeNotify2                               = modiphlpapi.NewProc(\"CancelMibChangeNotify2\")\n\tprocFreeMibTable                                         = modiphlpapi.NewProc(\"FreeMibTable\")\n\tprocGetAdaptersAddresses                                 = modiphlpapi.NewProc(\"GetAdaptersAddresses\")\n\tprocGetAdaptersInfo                                      = modiphlpapi.NewProc(\"GetAdaptersInfo\")\n\tprocGetBestInterfaceEx                                   = modiphlpapi.NewProc(\"GetBestInterfaceEx\")\n\tprocGetIfEntry                                           = modiphlpapi.NewProc(\"GetIfEntry\")\n\tprocGetIfEntry2Ex                                        = modiphlpapi.NewProc(\"GetIfEntry2Ex\")\n\tprocGetIpForwardEntry2                                   = modiphlpapi.NewProc(\"GetIpForwardEntry2\")\n\tprocGetIpForwardTable2                                   = modiphlpapi.NewProc(\"GetIpForwardTable2\")\n\tprocGetUnicastIpAddressEntry                             = modiphlpapi.NewProc(\"GetUnicastIpAddressEntry\")\n\tprocNotifyIpInterfaceChange                              = modiphlpapi.NewProc(\"NotifyIpInterfaceChange\")\n\tprocNotifyRouteChange2                                   = modiphlpapi.NewProc(\"NotifyRouteChange2\")\n\tprocNotifyUnicastIpAddressChange                         = modiphlpapi.NewProc(\"NotifyUnicastIpAddressChange\")\n\tprocAddDllDirectory                                      = modkernel32.NewProc(\"AddDllDirectory\")\n\tprocAssignProcessToJobObject                             = modkernel32.NewProc(\"AssignProcessToJobObject\")\n\tprocCancelIo                                             = modkernel32.NewProc(\"CancelIo\")\n\tprocCancelIoEx                                           = modkernel32.NewProc(\"CancelIoEx\")\n\tprocClearCommBreak                                       = modkernel32.NewProc(\"ClearCommBreak\")\n\tprocClearCommError                                       = modkernel32.NewProc(\"ClearCommError\")\n\tprocCloseHandle                                          = modkernel32.NewProc(\"CloseHandle\")\n\tprocClosePseudoConsole                                   = modkernel32.NewProc(\"ClosePseudoConsole\")\n\tprocConnectNamedPipe                                     = modkernel32.NewProc(\"ConnectNamedPipe\")\n\tprocCreateDirectoryW                                     = modkernel32.NewProc(\"CreateDirectoryW\")\n\tprocCreateEventExW                                       = modkernel32.NewProc(\"CreateEventExW\")\n\tprocCreateEventW                                         = modkernel32.NewProc(\"CreateEventW\")\n\tprocCreateFileMappingW                                   = modkernel32.NewProc(\"CreateFileMappingW\")\n\tprocCreateFileW                                          = modkernel32.NewProc(\"CreateFileW\")\n\tprocCreateHardLinkW                                      = modkernel32.NewProc(\"CreateHardLinkW\")\n\tprocCreateIoCompletionPort                               = modkernel32.NewProc(\"CreateIoCompletionPort\")\n\tprocCreateJobObjectW                                     = modkernel32.NewProc(\"CreateJobObjectW\")\n\tprocCreateMutexExW                                       = modkernel32.NewProc(\"CreateMutexExW\")\n\tprocCreateMutexW                                         = modkernel32.NewProc(\"CreateMutexW\")\n\tprocCreateNamedPipeW                                     = modkernel32.NewProc(\"CreateNamedPipeW\")\n\tprocCreatePipe                                           = modkernel32.NewProc(\"CreatePipe\")\n\tprocCreateProcessW                                       = modkernel32.NewProc(\"CreateProcessW\")\n\tprocCreatePseudoConsole                                  = modkernel32.NewProc(\"CreatePseudoConsole\")\n\tprocCreateSymbolicLinkW                                  = modkernel32.NewProc(\"CreateSymbolicLinkW\")\n\tprocCreateToolhelp32Snapshot                             = modkernel32.NewProc(\"CreateToolhelp32Snapshot\")\n\tprocDefineDosDeviceW                                     = modkernel32.NewProc(\"DefineDosDeviceW\")\n\tprocDeleteFileW                                          = modkernel32.NewProc(\"DeleteFileW\")\n\tprocDeleteProcThreadAttributeList                        = modkernel32.NewProc(\"DeleteProcThreadAttributeList\")\n\tprocDeleteVolumeMountPointW                              = modkernel32.NewProc(\"DeleteVolumeMountPointW\")\n\tprocDeviceIoControl                                      = modkernel32.NewProc(\"DeviceIoControl\")\n\tprocDisconnectNamedPipe                                  = modkernel32.NewProc(\"DisconnectNamedPipe\")\n\tprocDuplicateHandle                                      = modkernel32.NewProc(\"DuplicateHandle\")\n\tprocEscapeCommFunction                                   = modkernel32.NewProc(\"EscapeCommFunction\")\n\tprocExitProcess                                          = modkernel32.NewProc(\"ExitProcess\")\n\tprocExpandEnvironmentStringsW                            = modkernel32.NewProc(\"ExpandEnvironmentStringsW\")\n\tprocFindClose                                            = modkernel32.NewProc(\"FindClose\")\n\tprocFindCloseChangeNotification                          = modkernel32.NewProc(\"FindCloseChangeNotification\")\n\tprocFindFirstChangeNotificationW                         = modkernel32.NewProc(\"FindFirstChangeNotificationW\")\n\tprocFindFirstFileW                                       = modkernel32.NewProc(\"FindFirstFileW\")\n\tprocFindFirstVolumeMountPointW                           = modkernel32.NewProc(\"FindFirstVolumeMountPointW\")\n\tprocFindFirstVolumeW                                     = modkernel32.NewProc(\"FindFirstVolumeW\")\n\tprocFindNextChangeNotification                           = modkernel32.NewProc(\"FindNextChangeNotification\")\n\tprocFindNextFileW                                        = modkernel32.NewProc(\"FindNextFileW\")\n\tprocFindNextVolumeMountPointW                            = modkernel32.NewProc(\"FindNextVolumeMountPointW\")\n\tprocFindNextVolumeW                                      = modkernel32.NewProc(\"FindNextVolumeW\")\n\tprocFindResourceW                                        = modkernel32.NewProc(\"FindResourceW\")\n\tprocFindVolumeClose                                      = modkernel32.NewProc(\"FindVolumeClose\")\n\tprocFindVolumeMountPointClose                            = modkernel32.NewProc(\"FindVolumeMountPointClose\")\n\tprocFlushConsoleInputBuffer                              = modkernel32.NewProc(\"FlushConsoleInputBuffer\")\n\tprocFlushFileBuffers                                     = modkernel32.NewProc(\"FlushFileBuffers\")\n\tprocFlushViewOfFile                                      = modkernel32.NewProc(\"FlushViewOfFile\")\n\tprocFormatMessageW                                       = modkernel32.NewProc(\"FormatMessageW\")\n\tprocFreeEnvironmentStringsW                              = modkernel32.NewProc(\"FreeEnvironmentStringsW\")\n\tprocFreeLibrary                                          = modkernel32.NewProc(\"FreeLibrary\")\n\tprocGenerateConsoleCtrlEvent                             = modkernel32.NewProc(\"GenerateConsoleCtrlEvent\")\n\tprocGetACP                                               = modkernel32.NewProc(\"GetACP\")\n\tprocGetActiveProcessorCount                              = modkernel32.NewProc(\"GetActiveProcessorCount\")\n\tprocGetCommModemStatus                                   = modkernel32.NewProc(\"GetCommModemStatus\")\n\tprocGetCommState                                         = modkernel32.NewProc(\"GetCommState\")\n\tprocGetCommTimeouts                                      = modkernel32.NewProc(\"GetCommTimeouts\")\n\tprocGetCommandLineW                                      = modkernel32.NewProc(\"GetCommandLineW\")\n\tprocGetComputerNameExW                                   = modkernel32.NewProc(\"GetComputerNameExW\")\n\tprocGetComputerNameW                                     = modkernel32.NewProc(\"GetComputerNameW\")\n\tprocGetConsoleCP                                         = modkernel32.NewProc(\"GetConsoleCP\")\n\tprocGetConsoleMode                                       = modkernel32.NewProc(\"GetConsoleMode\")\n\tprocGetConsoleOutputCP                                   = modkernel32.NewProc(\"GetConsoleOutputCP\")\n\tprocGetConsoleScreenBufferInfo                           = modkernel32.NewProc(\"GetConsoleScreenBufferInfo\")\n\tprocGetCurrentDirectoryW                                 = modkernel32.NewProc(\"GetCurrentDirectoryW\")\n\tprocGetCurrentProcessId                                  = modkernel32.NewProc(\"GetCurrentProcessId\")\n\tprocGetCurrentThreadId                                   = modkernel32.NewProc(\"GetCurrentThreadId\")\n\tprocGetDiskFreeSpaceExW                                  = modkernel32.NewProc(\"GetDiskFreeSpaceExW\")\n\tprocGetDriveTypeW                                        = modkernel32.NewProc(\"GetDriveTypeW\")\n\tprocGetEnvironmentStringsW                               = modkernel32.NewProc(\"GetEnvironmentStringsW\")\n\tprocGetEnvironmentVariableW                              = modkernel32.NewProc(\"GetEnvironmentVariableW\")\n\tprocGetExitCodeProcess                                   = modkernel32.NewProc(\"GetExitCodeProcess\")\n\tprocGetFileAttributesExW                                 = modkernel32.NewProc(\"GetFileAttributesExW\")\n\tprocGetFileAttributesW                                   = modkernel32.NewProc(\"GetFileAttributesW\")\n\tprocGetFileInformationByHandle                           = modkernel32.NewProc(\"GetFileInformationByHandle\")\n\tprocGetFileInformationByHandleEx                         = modkernel32.NewProc(\"GetFileInformationByHandleEx\")\n\tprocGetFileTime                                          = modkernel32.NewProc(\"GetFileTime\")\n\tprocGetFileType                                          = modkernel32.NewProc(\"GetFileType\")\n\tprocGetFinalPathNameByHandleW                            = modkernel32.NewProc(\"GetFinalPathNameByHandleW\")\n\tprocGetFullPathNameW                                     = modkernel32.NewProc(\"GetFullPathNameW\")\n\tprocGetLargePageMinimum                                  = modkernel32.NewProc(\"GetLargePageMinimum\")\n\tprocGetLastError                                         = modkernel32.NewProc(\"GetLastError\")\n\tprocGetLogicalDriveStringsW                              = modkernel32.NewProc(\"GetLogicalDriveStringsW\")\n\tprocGetLogicalDrives                                     = modkernel32.NewProc(\"GetLogicalDrives\")\n\tprocGetLongPathNameW                                     = modkernel32.NewProc(\"GetLongPathNameW\")\n\tprocGetMaximumProcessorCount                             = modkernel32.NewProc(\"GetMaximumProcessorCount\")\n\tprocGetModuleFileNameW                                   = modkernel32.NewProc(\"GetModuleFileNameW\")\n\tprocGetModuleHandleExW                                   = modkernel32.NewProc(\"GetModuleHandleExW\")\n\tprocGetNamedPipeClientProcessId                          = modkernel32.NewProc(\"GetNamedPipeClientProcessId\")\n\tprocGetNamedPipeHandleStateW                             = modkernel32.NewProc(\"GetNamedPipeHandleStateW\")\n\tprocGetNamedPipeInfo                                     = modkernel32.NewProc(\"GetNamedPipeInfo\")\n\tprocGetNamedPipeServerProcessId                          = modkernel32.NewProc(\"GetNamedPipeServerProcessId\")\n\tprocGetNumberOfConsoleInputEvents                        = modkernel32.NewProc(\"GetNumberOfConsoleInputEvents\")\n\tprocGetOverlappedResult                                  = modkernel32.NewProc(\"GetOverlappedResult\")\n\tprocGetPriorityClass                                     = modkernel32.NewProc(\"GetPriorityClass\")\n\tprocGetProcAddress                                       = modkernel32.NewProc(\"GetProcAddress\")\n\tprocGetProcessId                                         = modkernel32.NewProc(\"GetProcessId\")\n\tprocGetProcessPreferredUILanguages                       = modkernel32.NewProc(\"GetProcessPreferredUILanguages\")\n\tprocGetProcessShutdownParameters                         = modkernel32.NewProc(\"GetProcessShutdownParameters\")\n\tprocGetProcessTimes                                      = modkernel32.NewProc(\"GetProcessTimes\")\n\tprocGetProcessWorkingSetSizeEx                           = modkernel32.NewProc(\"GetProcessWorkingSetSizeEx\")\n\tprocGetQueuedCompletionStatus                            = modkernel32.NewProc(\"GetQueuedCompletionStatus\")\n\tprocGetShortPathNameW                                    = modkernel32.NewProc(\"GetShortPathNameW\")\n\tprocGetStartupInfoW                                      = modkernel32.NewProc(\"GetStartupInfoW\")\n\tprocGetStdHandle                                         = modkernel32.NewProc(\"GetStdHandle\")\n\tprocGetSystemDirectoryW                                  = modkernel32.NewProc(\"GetSystemDirectoryW\")\n\tprocGetSystemPreferredUILanguages                        = modkernel32.NewProc(\"GetSystemPreferredUILanguages\")\n\tprocGetSystemTimeAsFileTime                              = modkernel32.NewProc(\"GetSystemTimeAsFileTime\")\n\tprocGetSystemTimePreciseAsFileTime                       = modkernel32.NewProc(\"GetSystemTimePreciseAsFileTime\")\n\tprocGetSystemWindowsDirectoryW                           = modkernel32.NewProc(\"GetSystemWindowsDirectoryW\")\n\tprocGetTempPathW                                         = modkernel32.NewProc(\"GetTempPathW\")\n\tprocGetThreadPreferredUILanguages                        = modkernel32.NewProc(\"GetThreadPreferredUILanguages\")\n\tprocGetTickCount64                                       = modkernel32.NewProc(\"GetTickCount64\")\n\tprocGetTimeZoneInformation                               = modkernel32.NewProc(\"GetTimeZoneInformation\")\n\tprocGetUserPreferredUILanguages                          = modkernel32.NewProc(\"GetUserPreferredUILanguages\")\n\tprocGetVersion                                           = modkernel32.NewProc(\"GetVersion\")\n\tprocGetVolumeInformationByHandleW                        = modkernel32.NewProc(\"GetVolumeInformationByHandleW\")\n\tprocGetVolumeInformationW                                = modkernel32.NewProc(\"GetVolumeInformationW\")\n\tprocGetVolumeNameForVolumeMountPointW                    = modkernel32.NewProc(\"GetVolumeNameForVolumeMountPointW\")\n\tprocGetVolumePathNameW                                   = modkernel32.NewProc(\"GetVolumePathNameW\")\n\tprocGetVolumePathNamesForVolumeNameW                     = modkernel32.NewProc(\"GetVolumePathNamesForVolumeNameW\")\n\tprocGetWindowsDirectoryW                                 = modkernel32.NewProc(\"GetWindowsDirectoryW\")\n\tprocInitializeProcThreadAttributeList                    = modkernel32.NewProc(\"InitializeProcThreadAttributeList\")\n\tprocIsProcessorFeaturePresent                            = modkernel32.NewProc(\"IsProcessorFeaturePresent\")\n\tprocIsWow64Process                                       = modkernel32.NewProc(\"IsWow64Process\")\n\tprocIsWow64Process2                                      = modkernel32.NewProc(\"IsWow64Process2\")\n\tprocLoadLibraryExW                                       = modkernel32.NewProc(\"LoadLibraryExW\")\n\tprocLoadLibraryW                                         = modkernel32.NewProc(\"LoadLibraryW\")\n\tprocLoadResource                                         = modkernel32.NewProc(\"LoadResource\")\n\tprocLocalAlloc                                           = modkernel32.NewProc(\"LocalAlloc\")\n\tprocLocalFree                                            = modkernel32.NewProc(\"LocalFree\")\n\tprocLockFileEx                                           = modkernel32.NewProc(\"LockFileEx\")\n\tprocLockResource                                         = modkernel32.NewProc(\"LockResource\")\n\tprocMapViewOfFile                                        = modkernel32.NewProc(\"MapViewOfFile\")\n\tprocModule32FirstW                                       = modkernel32.NewProc(\"Module32FirstW\")\n\tprocModule32NextW                                        = modkernel32.NewProc(\"Module32NextW\")\n\tprocMoveFileExW                                          = modkernel32.NewProc(\"MoveFileExW\")\n\tprocMoveFileW                                            = modkernel32.NewProc(\"MoveFileW\")\n\tprocMultiByteToWideChar                                  = modkernel32.NewProc(\"MultiByteToWideChar\")\n\tprocOpenEventW                                           = modkernel32.NewProc(\"OpenEventW\")\n\tprocOpenMutexW                                           = modkernel32.NewProc(\"OpenMutexW\")\n\tprocOpenProcess                                          = modkernel32.NewProc(\"OpenProcess\")\n\tprocOpenThread                                           = modkernel32.NewProc(\"OpenThread\")\n\tprocPostQueuedCompletionStatus                           = modkernel32.NewProc(\"PostQueuedCompletionStatus\")\n\tprocProcess32FirstW                                      = modkernel32.NewProc(\"Process32FirstW\")\n\tprocProcess32NextW                                       = modkernel32.NewProc(\"Process32NextW\")\n\tprocProcessIdToSessionId                                 = modkernel32.NewProc(\"ProcessIdToSessionId\")\n\tprocPulseEvent                                           = modkernel32.NewProc(\"PulseEvent\")\n\tprocPurgeComm                                            = modkernel32.NewProc(\"PurgeComm\")\n\tprocQueryDosDeviceW                                      = modkernel32.NewProc(\"QueryDosDeviceW\")\n\tprocQueryFullProcessImageNameW                           = modkernel32.NewProc(\"QueryFullProcessImageNameW\")\n\tprocQueryInformationJobObject                            = modkernel32.NewProc(\"QueryInformationJobObject\")\n\tprocReadConsoleW                                         = modkernel32.NewProc(\"ReadConsoleW\")\n\tprocReadDirectoryChangesW                                = modkernel32.NewProc(\"ReadDirectoryChangesW\")\n\tprocReadFile                                             = modkernel32.NewProc(\"ReadFile\")\n\tprocReadProcessMemory                                    = modkernel32.NewProc(\"ReadProcessMemory\")\n\tprocReleaseMutex                                         = modkernel32.NewProc(\"ReleaseMutex\")\n\tprocRemoveDirectoryW                                     = modkernel32.NewProc(\"RemoveDirectoryW\")\n\tprocRemoveDllDirectory                                   = modkernel32.NewProc(\"RemoveDllDirectory\")\n\tprocResetEvent                                           = modkernel32.NewProc(\"ResetEvent\")\n\tprocResizePseudoConsole                                  = modkernel32.NewProc(\"ResizePseudoConsole\")\n\tprocResumeThread                                         = modkernel32.NewProc(\"ResumeThread\")\n\tprocSetCommBreak                                         = modkernel32.NewProc(\"SetCommBreak\")\n\tprocSetCommMask                                          = modkernel32.NewProc(\"SetCommMask\")\n\tprocSetCommState                                         = modkernel32.NewProc(\"SetCommState\")\n\tprocSetCommTimeouts                                      = modkernel32.NewProc(\"SetCommTimeouts\")\n\tprocSetConsoleCP                                         = modkernel32.NewProc(\"SetConsoleCP\")\n\tprocSetConsoleCursorPosition                             = modkernel32.NewProc(\"SetConsoleCursorPosition\")\n\tprocSetConsoleMode                                       = modkernel32.NewProc(\"SetConsoleMode\")\n\tprocSetConsoleOutputCP                                   = modkernel32.NewProc(\"SetConsoleOutputCP\")\n\tprocSetCurrentDirectoryW                                 = modkernel32.NewProc(\"SetCurrentDirectoryW\")\n\tprocSetDefaultDllDirectories                             = modkernel32.NewProc(\"SetDefaultDllDirectories\")\n\tprocSetDllDirectoryW                                     = modkernel32.NewProc(\"SetDllDirectoryW\")\n\tprocSetEndOfFile                                         = modkernel32.NewProc(\"SetEndOfFile\")\n\tprocSetEnvironmentVariableW                              = modkernel32.NewProc(\"SetEnvironmentVariableW\")\n\tprocSetErrorMode                                         = modkernel32.NewProc(\"SetErrorMode\")\n\tprocSetEvent                                             = modkernel32.NewProc(\"SetEvent\")\n\tprocSetFileAttributesW                                   = modkernel32.NewProc(\"SetFileAttributesW\")\n\tprocSetFileCompletionNotificationModes                   = modkernel32.NewProc(\"SetFileCompletionNotificationModes\")\n\tprocSetFileInformationByHandle                           = modkernel32.NewProc(\"SetFileInformationByHandle\")\n\tprocSetFilePointer                                       = modkernel32.NewProc(\"SetFilePointer\")\n\tprocSetFileTime                                          = modkernel32.NewProc(\"SetFileTime\")\n\tprocSetFileValidData                                     = modkernel32.NewProc(\"SetFileValidData\")\n\tprocSetHandleInformation                                 = modkernel32.NewProc(\"SetHandleInformation\")\n\tprocSetInformationJobObject                              = modkernel32.NewProc(\"SetInformationJobObject\")\n\tprocSetNamedPipeHandleState                              = modkernel32.NewProc(\"SetNamedPipeHandleState\")\n\tprocSetPriorityClass                                     = modkernel32.NewProc(\"SetPriorityClass\")\n\tprocSetProcessPriorityBoost                              = modkernel32.NewProc(\"SetProcessPriorityBoost\")\n\tprocSetProcessShutdownParameters                         = modkernel32.NewProc(\"SetProcessShutdownParameters\")\n\tprocSetProcessWorkingSetSizeEx                           = modkernel32.NewProc(\"SetProcessWorkingSetSizeEx\")\n\tprocSetStdHandle                                         = modkernel32.NewProc(\"SetStdHandle\")\n\tprocSetVolumeLabelW                                      = modkernel32.NewProc(\"SetVolumeLabelW\")\n\tprocSetVolumeMountPointW                                 = modkernel32.NewProc(\"SetVolumeMountPointW\")\n\tprocSetupComm                                            = modkernel32.NewProc(\"SetupComm\")\n\tprocSizeofResource                                       = modkernel32.NewProc(\"SizeofResource\")\n\tprocSleepEx                                              = modkernel32.NewProc(\"SleepEx\")\n\tprocTerminateJobObject                                   = modkernel32.NewProc(\"TerminateJobObject\")\n\tprocTerminateProcess                                     = modkernel32.NewProc(\"TerminateProcess\")\n\tprocThread32First                                        = modkernel32.NewProc(\"Thread32First\")\n\tprocThread32Next                                         = modkernel32.NewProc(\"Thread32Next\")\n\tprocUnlockFileEx                                         = modkernel32.NewProc(\"UnlockFileEx\")\n\tprocUnmapViewOfFile                                      = modkernel32.NewProc(\"UnmapViewOfFile\")\n\tprocUpdateProcThreadAttribute                            = modkernel32.NewProc(\"UpdateProcThreadAttribute\")\n\tprocVirtualAlloc                                         = modkernel32.NewProc(\"VirtualAlloc\")\n\tprocVirtualFree                                          = modkernel32.NewProc(\"VirtualFree\")\n\tprocVirtualLock                                          = modkernel32.NewProc(\"VirtualLock\")\n\tprocVirtualProtect                                       = modkernel32.NewProc(\"VirtualProtect\")\n\tprocVirtualProtectEx                                     = modkernel32.NewProc(\"VirtualProtectEx\")\n\tprocVirtualQuery                                         = modkernel32.NewProc(\"VirtualQuery\")\n\tprocVirtualQueryEx                                       = modkernel32.NewProc(\"VirtualQueryEx\")\n\tprocVirtualUnlock                                        = modkernel32.NewProc(\"VirtualUnlock\")\n\tprocWTSGetActiveConsoleSessionId                         = modkernel32.NewProc(\"WTSGetActiveConsoleSessionId\")\n\tprocWaitCommEvent                                        = modkernel32.NewProc(\"WaitCommEvent\")\n\tprocWaitForMultipleObjects                               = modkernel32.NewProc(\"WaitForMultipleObjects\")\n\tprocWaitForSingleObject                                  = modkernel32.NewProc(\"WaitForSingleObject\")\n\tprocWriteConsoleW                                        = modkernel32.NewProc(\"WriteConsoleW\")\n\tprocWriteFile                                            = modkernel32.NewProc(\"WriteFile\")\n\tprocWriteProcessMemory                                   = modkernel32.NewProc(\"WriteProcessMemory\")\n\tprocAcceptEx                                             = modmswsock.NewProc(\"AcceptEx\")\n\tprocGetAcceptExSockaddrs                                 = modmswsock.NewProc(\"GetAcceptExSockaddrs\")\n\tprocTransmitFile                                         = modmswsock.NewProc(\"TransmitFile\")\n\tprocNetApiBufferFree                                     = modnetapi32.NewProc(\"NetApiBufferFree\")\n\tprocNetGetJoinInformation                                = modnetapi32.NewProc(\"NetGetJoinInformation\")\n\tprocNetUserEnum                                          = modnetapi32.NewProc(\"NetUserEnum\")\n\tprocNetUserGetInfo                                       = modnetapi32.NewProc(\"NetUserGetInfo\")\n\tprocNtCreateFile                                         = modntdll.NewProc(\"NtCreateFile\")\n\tprocNtCreateNamedPipeFile                                = modntdll.NewProc(\"NtCreateNamedPipeFile\")\n\tprocNtQueryInformationProcess                            = modntdll.NewProc(\"NtQueryInformationProcess\")\n\tprocNtQuerySystemInformation                             = modntdll.NewProc(\"NtQuerySystemInformation\")\n\tprocNtSetInformationFile                                 = modntdll.NewProc(\"NtSetInformationFile\")\n\tprocNtSetInformationProcess                              = modntdll.NewProc(\"NtSetInformationProcess\")\n\tprocNtSetSystemInformation                               = modntdll.NewProc(\"NtSetSystemInformation\")\n\tprocRtlAddFunctionTable                                  = modntdll.NewProc(\"RtlAddFunctionTable\")\n\tprocRtlDefaultNpAcl                                      = modntdll.NewProc(\"RtlDefaultNpAcl\")\n\tprocRtlDeleteFunctionTable                               = modntdll.NewProc(\"RtlDeleteFunctionTable\")\n\tprocRtlDosPathNameToNtPathName_U_WithStatus              = modntdll.NewProc(\"RtlDosPathNameToNtPathName_U_WithStatus\")\n\tprocRtlDosPathNameToRelativeNtPathName_U_WithStatus      = modntdll.NewProc(\"RtlDosPathNameToRelativeNtPathName_U_WithStatus\")\n\tprocRtlGetCurrentPeb                                     = modntdll.NewProc(\"RtlGetCurrentPeb\")\n\tprocRtlGetNtVersionNumbers                               = modntdll.NewProc(\"RtlGetNtVersionNumbers\")\n\tprocRtlGetVersion                                        = modntdll.NewProc(\"RtlGetVersion\")\n\tprocRtlInitString                                        = modntdll.NewProc(\"RtlInitString\")\n\tprocRtlInitUnicodeString                                 = modntdll.NewProc(\"RtlInitUnicodeString\")\n\tprocRtlNtStatusToDosErrorNoTeb                           = modntdll.NewProc(\"RtlNtStatusToDosErrorNoTeb\")\n\tprocCLSIDFromString                                      = modole32.NewProc(\"CLSIDFromString\")\n\tprocCoCreateGuid                                         = modole32.NewProc(\"CoCreateGuid\")\n\tprocCoGetObject                                          = modole32.NewProc(\"CoGetObject\")\n\tprocCoInitializeEx                                       = modole32.NewProc(\"CoInitializeEx\")\n\tprocCoTaskMemFree                                        = modole32.NewProc(\"CoTaskMemFree\")\n\tprocCoUninitialize                                       = modole32.NewProc(\"CoUninitialize\")\n\tprocStringFromGUID2                                      = modole32.NewProc(\"StringFromGUID2\")\n\tprocEnumProcessModules                                   = modpsapi.NewProc(\"EnumProcessModules\")\n\tprocEnumProcessModulesEx                                 = modpsapi.NewProc(\"EnumProcessModulesEx\")\n\tprocEnumProcesses                                        = modpsapi.NewProc(\"EnumProcesses\")\n\tprocGetModuleBaseNameW                                   = modpsapi.NewProc(\"GetModuleBaseNameW\")\n\tprocGetModuleFileNameExW                                 = modpsapi.NewProc(\"GetModuleFileNameExW\")\n\tprocGetModuleInformation                                 = modpsapi.NewProc(\"GetModuleInformation\")\n\tprocQueryWorkingSetEx                                    = modpsapi.NewProc(\"QueryWorkingSetEx\")\n\tprocSubscribeServiceChangeNotifications                  = modsechost.NewProc(\"SubscribeServiceChangeNotifications\")\n\tprocUnsubscribeServiceChangeNotifications                = modsechost.NewProc(\"UnsubscribeServiceChangeNotifications\")\n\tprocGetUserNameExW                                       = modsecur32.NewProc(\"GetUserNameExW\")\n\tprocTranslateNameW                                       = modsecur32.NewProc(\"TranslateNameW\")\n\tprocSetupDiBuildDriverInfoList                           = modsetupapi.NewProc(\"SetupDiBuildDriverInfoList\")\n\tprocSetupDiCallClassInstaller                            = modsetupapi.NewProc(\"SetupDiCallClassInstaller\")\n\tprocSetupDiCancelDriverInfoSearch                        = modsetupapi.NewProc(\"SetupDiCancelDriverInfoSearch\")\n\tprocSetupDiClassGuidsFromNameExW                         = modsetupapi.NewProc(\"SetupDiClassGuidsFromNameExW\")\n\tprocSetupDiClassNameFromGuidExW                          = modsetupapi.NewProc(\"SetupDiClassNameFromGuidExW\")\n\tprocSetupDiCreateDeviceInfoListExW                       = modsetupapi.NewProc(\"SetupDiCreateDeviceInfoListExW\")\n\tprocSetupDiCreateDeviceInfoW                             = modsetupapi.NewProc(\"SetupDiCreateDeviceInfoW\")\n\tprocSetupDiDestroyDeviceInfoList                         = modsetupapi.NewProc(\"SetupDiDestroyDeviceInfoList\")\n\tprocSetupDiDestroyDriverInfoList                         = modsetupapi.NewProc(\"SetupDiDestroyDriverInfoList\")\n\tprocSetupDiEnumDeviceInfo                                = modsetupapi.NewProc(\"SetupDiEnumDeviceInfo\")\n\tprocSetupDiEnumDriverInfoW                               = modsetupapi.NewProc(\"SetupDiEnumDriverInfoW\")\n\tprocSetupDiGetClassDevsExW                               = modsetupapi.NewProc(\"SetupDiGetClassDevsExW\")\n\tprocSetupDiGetClassInstallParamsW                        = modsetupapi.NewProc(\"SetupDiGetClassInstallParamsW\")\n\tprocSetupDiGetDeviceInfoListDetailW                      = modsetupapi.NewProc(\"SetupDiGetDeviceInfoListDetailW\")\n\tprocSetupDiGetDeviceInstallParamsW                       = modsetupapi.NewProc(\"SetupDiGetDeviceInstallParamsW\")\n\tprocSetupDiGetDeviceInstanceIdW                          = modsetupapi.NewProc(\"SetupDiGetDeviceInstanceIdW\")\n\tprocSetupDiGetDevicePropertyW                            = modsetupapi.NewProc(\"SetupDiGetDevicePropertyW\")\n\tprocSetupDiGetDeviceRegistryPropertyW                    = modsetupapi.NewProc(\"SetupDiGetDeviceRegistryPropertyW\")\n\tprocSetupDiGetDriverInfoDetailW                          = modsetupapi.NewProc(\"SetupDiGetDriverInfoDetailW\")\n\tprocSetupDiGetSelectedDevice                             = modsetupapi.NewProc(\"SetupDiGetSelectedDevice\")\n\tprocSetupDiGetSelectedDriverW                            = modsetupapi.NewProc(\"SetupDiGetSelectedDriverW\")\n\tprocSetupDiOpenDevRegKey                                 = modsetupapi.NewProc(\"SetupDiOpenDevRegKey\")\n\tprocSetupDiSetClassInstallParamsW                        = modsetupapi.NewProc(\"SetupDiSetClassInstallParamsW\")\n\tprocSetupDiSetDeviceInstallParamsW                       = modsetupapi.NewProc(\"SetupDiSetDeviceInstallParamsW\")\n\tprocSetupDiSetDeviceRegistryPropertyW                    = modsetupapi.NewProc(\"SetupDiSetDeviceRegistryPropertyW\")\n\tprocSetupDiSetSelectedDevice                             = modsetupapi.NewProc(\"SetupDiSetSelectedDevice\")\n\tprocSetupDiSetSelectedDriverW                            = modsetupapi.NewProc(\"SetupDiSetSelectedDriverW\")\n\tprocSetupUninstallOEMInfW                                = modsetupapi.NewProc(\"SetupUninstallOEMInfW\")\n\tprocCommandLineToArgvW                                   = modshell32.NewProc(\"CommandLineToArgvW\")\n\tprocSHGetKnownFolderPath                                 = modshell32.NewProc(\"SHGetKnownFolderPath\")\n\tprocShellExecuteW                                        = modshell32.NewProc(\"ShellExecuteW\")\n\tprocEnumChildWindows                                     = moduser32.NewProc(\"EnumChildWindows\")\n\tprocEnumWindows                                          = moduser32.NewProc(\"EnumWindows\")\n\tprocExitWindowsEx                                        = moduser32.NewProc(\"ExitWindowsEx\")\n\tprocGetClassNameW                                        = moduser32.NewProc(\"GetClassNameW\")\n\tprocGetDesktopWindow                                     = moduser32.NewProc(\"GetDesktopWindow\")\n\tprocGetForegroundWindow                                  = moduser32.NewProc(\"GetForegroundWindow\")\n\tprocGetGUIThreadInfo                                     = moduser32.NewProc(\"GetGUIThreadInfo\")\n\tprocGetKeyboardLayout                                    = moduser32.NewProc(\"GetKeyboardLayout\")\n\tprocGetShellWindow                                       = moduser32.NewProc(\"GetShellWindow\")\n\tprocGetWindowThreadProcessId                             = moduser32.NewProc(\"GetWindowThreadProcessId\")\n\tprocIsWindow                                             = moduser32.NewProc(\"IsWindow\")\n\tprocIsWindowUnicode                                      = moduser32.NewProc(\"IsWindowUnicode\")\n\tprocIsWindowVisible                                      = moduser32.NewProc(\"IsWindowVisible\")\n\tprocLoadKeyboardLayoutW                                  = moduser32.NewProc(\"LoadKeyboardLayoutW\")\n\tprocMessageBoxW                                          = moduser32.NewProc(\"MessageBoxW\")\n\tprocToUnicodeEx                                          = moduser32.NewProc(\"ToUnicodeEx\")\n\tprocUnloadKeyboardLayout                                 = moduser32.NewProc(\"UnloadKeyboardLayout\")\n\tprocCreateEnvironmentBlock                               = moduserenv.NewProc(\"CreateEnvironmentBlock\")\n\tprocDestroyEnvironmentBlock                              = moduserenv.NewProc(\"DestroyEnvironmentBlock\")\n\tprocGetUserProfileDirectoryW                             = moduserenv.NewProc(\"GetUserProfileDirectoryW\")\n\tprocGetFileVersionInfoSizeW                              = modversion.NewProc(\"GetFileVersionInfoSizeW\")\n\tprocGetFileVersionInfoW                                  = modversion.NewProc(\"GetFileVersionInfoW\")\n\tprocVerQueryValueW                                       = modversion.NewProc(\"VerQueryValueW\")\n\tproctimeBeginPeriod                                      = modwinmm.NewProc(\"timeBeginPeriod\")\n\tproctimeEndPeriod                                        = modwinmm.NewProc(\"timeEndPeriod\")\n\tprocWinVerifyTrustEx                                     = modwintrust.NewProc(\"WinVerifyTrustEx\")\n\tprocFreeAddrInfoW                                        = modws2_32.NewProc(\"FreeAddrInfoW\")\n\tprocGetAddrInfoW                                         = modws2_32.NewProc(\"GetAddrInfoW\")\n\tprocWSACleanup                                           = modws2_32.NewProc(\"WSACleanup\")\n\tprocWSADuplicateSocketW                                  = modws2_32.NewProc(\"WSADuplicateSocketW\")\n\tprocWSAEnumProtocolsW                                    = modws2_32.NewProc(\"WSAEnumProtocolsW\")\n\tprocWSAGetOverlappedResult                               = modws2_32.NewProc(\"WSAGetOverlappedResult\")\n\tprocWSAIoctl                                             = modws2_32.NewProc(\"WSAIoctl\")\n\tprocWSALookupServiceBeginW                               = modws2_32.NewProc(\"WSALookupServiceBeginW\")\n\tprocWSALookupServiceEnd                                  = modws2_32.NewProc(\"WSALookupServiceEnd\")\n\tprocWSALookupServiceNextW                                = modws2_32.NewProc(\"WSALookupServiceNextW\")\n\tprocWSARecv                                              = modws2_32.NewProc(\"WSARecv\")\n\tprocWSARecvFrom                                          = modws2_32.NewProc(\"WSARecvFrom\")\n\tprocWSASend                                              = modws2_32.NewProc(\"WSASend\")\n\tprocWSASendTo                                            = modws2_32.NewProc(\"WSASendTo\")\n\tprocWSASocketW                                           = modws2_32.NewProc(\"WSASocketW\")\n\tprocWSAStartup                                           = modws2_32.NewProc(\"WSAStartup\")\n\tprocbind                                                 = modws2_32.NewProc(\"bind\")\n\tprocclosesocket                                          = modws2_32.NewProc(\"closesocket\")\n\tprocconnect                                              = modws2_32.NewProc(\"connect\")\n\tprocgethostbyname                                        = modws2_32.NewProc(\"gethostbyname\")\n\tprocgetpeername                                          = modws2_32.NewProc(\"getpeername\")\n\tprocgetprotobyname                                       = modws2_32.NewProc(\"getprotobyname\")\n\tprocgetservbyname                                        = modws2_32.NewProc(\"getservbyname\")\n\tprocgetsockname                                          = modws2_32.NewProc(\"getsockname\")\n\tprocgetsockopt                                           = modws2_32.NewProc(\"getsockopt\")\n\tproclisten                                               = modws2_32.NewProc(\"listen\")\n\tprocntohs                                                = modws2_32.NewProc(\"ntohs\")\n\tprocrecvfrom                                             = modws2_32.NewProc(\"recvfrom\")\n\tprocsendto                                               = modws2_32.NewProc(\"sendto\")\n\tprocsetsockopt                                           = modws2_32.NewProc(\"setsockopt\")\n\tprocshutdown                                             = modws2_32.NewProc(\"shutdown\")\n\tprocsocket                                               = modws2_32.NewProc(\"socket\")\n\tprocWTSEnumerateSessionsW                                = modwtsapi32.NewProc(\"WTSEnumerateSessionsW\")\n\tprocWTSFreeMemory                                        = modwtsapi32.NewProc(\"WTSFreeMemory\")\n\tprocWTSQueryUserToken                                    = modwtsapi32.NewProc(\"WTSQueryUserToken\")\n)\n\nfunc cm_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) (ret CONFIGRET) {\n\tr0, _, _ := syscall.SyscallN(procCM_Get_DevNode_Status.Addr(), uintptr(unsafe.Pointer(status)), uintptr(unsafe.Pointer(problemNumber)), uintptr(devInst), uintptr(flags))\n\tret = CONFIGRET(r0)\n\treturn\n}\n\nfunc cm_Get_Device_Interface_List(interfaceClass *GUID, deviceID *uint16, buffer *uint16, bufferLen uint32, flags uint32) (ret CONFIGRET) {\n\tr0, _, _ := syscall.SyscallN(procCM_Get_Device_Interface_ListW.Addr(), uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(flags))\n\tret = CONFIGRET(r0)\n\treturn\n}\n\nfunc cm_Get_Device_Interface_List_Size(len *uint32, interfaceClass *GUID, deviceID *uint16, flags uint32) (ret CONFIGRET) {\n\tr0, _, _ := syscall.SyscallN(procCM_Get_Device_Interface_List_SizeW.Addr(), uintptr(unsafe.Pointer(len)), uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(flags))\n\tret = CONFIGRET(r0)\n\treturn\n}\n\nfunc cm_MapCrToWin32Err(configRet CONFIGRET, defaultWin32Error Errno) (ret Errno) {\n\tr0, _, _ := syscall.SyscallN(procCM_MapCrToWin32Err.Addr(), uintptr(configRet), uintptr(defaultWin32Error))\n\tret = Errno(r0)\n\treturn\n}\n\nfunc AdjustTokenGroups(token Token, resetToDefault bool, newstate *Tokengroups, buflen uint32, prevstate *Tokengroups, returnlen *uint32) (err error) {\n\tvar _p0 uint32\n\tif resetToDefault {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procAdjustTokenGroups.Addr(), uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc AdjustTokenPrivileges(token Token, disableAllPrivileges bool, newstate *Tokenprivileges, buflen uint32, prevstate *Tokenprivileges, returnlen *uint32) (err error) {\n\tvar _p0 uint32\n\tif disableAllPrivileges {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procAdjustTokenPrivileges.Addr(), uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procAllocateAndInitializeSid.Addr(), uintptr(unsafe.Pointer(identAuth)), uintptr(subAuth), uintptr(subAuth0), uintptr(subAuth1), uintptr(subAuth2), uintptr(subAuth3), uintptr(subAuth4), uintptr(subAuth5), uintptr(subAuth6), uintptr(subAuth7), uintptr(unsafe.Pointer(sid)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc buildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, countAccessEntries uint32, accessEntries *EXPLICIT_ACCESS, countAuditEntries uint32, auditEntries *EXPLICIT_ACCESS, oldSecurityDescriptor *SECURITY_DESCRIPTOR, sizeNewSecurityDescriptor *uint32, newSecurityDescriptor **SECURITY_DESCRIPTOR) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procBuildSecurityDescriptorW.Addr(), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(countAccessEntries), uintptr(unsafe.Pointer(accessEntries)), uintptr(countAuditEntries), uintptr(unsafe.Pointer(auditEntries)), uintptr(unsafe.Pointer(oldSecurityDescriptor)), uintptr(unsafe.Pointer(sizeNewSecurityDescriptor)), uintptr(unsafe.Pointer(newSecurityDescriptor)))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procChangeServiceConfig2W.Addr(), uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(info)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procChangeServiceConfigW.Addr(), uintptr(service), uintptr(serviceType), uintptr(startType), uintptr(errorControl), uintptr(unsafe.Pointer(binaryPathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), uintptr(unsafe.Pointer(displayName)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCheckTokenMembership.Addr(), uintptr(tokenHandle), uintptr(unsafe.Pointer(sidToCheck)), uintptr(unsafe.Pointer(isMember)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CloseServiceHandle(handle Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCloseServiceHandle.Addr(), uintptr(handle))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procControlService.Addr(), uintptr(service), uintptr(control), uintptr(unsafe.Pointer(status)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc convertSecurityDescriptorToStringSecurityDescriptor(sd *SECURITY_DESCRIPTOR, revision uint32, securityInformation SECURITY_INFORMATION, str **uint16, strLen *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procConvertSecurityDescriptorToStringSecurityDescriptorW.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(revision), uintptr(securityInformation), uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(strLen)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procConvertSidToStringSidW.Addr(), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(stringSid)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) {\n\tvar _p0 *uint16\n\t_p0, err = syscall.UTF16PtrFromString(str)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _convertStringSecurityDescriptorToSecurityDescriptor(_p0, revision, sd, size)\n}\n\nfunc _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procConvertStringSecurityDescriptorToSecurityDescriptorW.Addr(), uintptr(unsafe.Pointer(str)), uintptr(revision), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(size)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procConvertStringSidToSidW.Addr(), uintptr(unsafe.Pointer(stringSid)), uintptr(unsafe.Pointer(sid)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCopySid.Addr(), uintptr(destSidLen), uintptr(unsafe.Pointer(destSid)), uintptr(unsafe.Pointer(srcSid)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateProcessAsUser(token Token, appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) {\n\tvar _p0 uint32\n\tif inheritHandles {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procCreateProcessAsUserW.Addr(), uintptr(token), uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCreateServiceW.Addr(), uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(unsafe.Pointer(displayName)), uintptr(access), uintptr(srvType), uintptr(startType), uintptr(errCtl), uintptr(unsafe.Pointer(pathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)))\n\thandle = Handle(r0)\n\tif handle == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc createWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, sizeSid *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCreateWellKnownSid.Addr(), uintptr(sidType), uintptr(unsafe.Pointer(domainSid)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sizeSid)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCryptAcquireContextW.Addr(), uintptr(unsafe.Pointer(provhandle)), uintptr(unsafe.Pointer(container)), uintptr(unsafe.Pointer(provider)), uintptr(provtype), uintptr(flags))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCryptGenRandom.Addr(), uintptr(provhandle), uintptr(buflen), uintptr(unsafe.Pointer(buf)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CryptReleaseContext(provhandle Handle, flags uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCryptReleaseContext.Addr(), uintptr(provhandle), uintptr(flags))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc DeleteService(service Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procDeleteService.Addr(), uintptr(service))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc DeregisterEventSource(handle Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procDeregisterEventSource.Addr(), uintptr(handle))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes *SecurityAttributes, impersonationLevel uint32, tokenType uint32, newToken *Token) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procDuplicateTokenEx.Addr(), uintptr(existingToken), uintptr(desiredAccess), uintptr(unsafe.Pointer(tokenAttributes)), uintptr(impersonationLevel), uintptr(tokenType), uintptr(unsafe.Pointer(newToken)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procEnumDependentServicesW.Addr(), uintptr(service), uintptr(activityState), uintptr(unsafe.Pointer(services)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procEnumServicesStatusExW.Addr(), uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) {\n\tr0, _, _ := syscall.SyscallN(procEqualSid.Addr(), uintptr(unsafe.Pointer(sid1)), uintptr(unsafe.Pointer(sid2)))\n\tisEqual = r0 != 0\n\treturn\n}\n\nfunc FreeSid(sid *SID) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procFreeSid.Addr(), uintptr(unsafe.Pointer(sid)))\n\tif r1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetAce.Addr(), uintptr(unsafe.Pointer(acl)), uintptr(aceIndex), uintptr(unsafe.Pointer(pAce)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetLengthSid(sid *SID) (len uint32) {\n\tr0, _, _ := syscall.SyscallN(procGetLengthSid.Addr(), uintptr(unsafe.Pointer(sid)))\n\tlen = uint32(r0)\n\treturn\n}\n\nfunc getNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) {\n\tvar _p0 *uint16\n\t_p0, ret = syscall.UTF16PtrFromString(objectName)\n\tif ret != nil {\n\t\treturn\n\t}\n\treturn _getNamedSecurityInfo(_p0, objectType, securityInformation, owner, group, dacl, sacl, sd)\n}\n\nfunc _getNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procGetNamedSecurityInfoW.Addr(), uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd)))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc getSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, control *SECURITY_DESCRIPTOR_CONTROL, revision *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorControl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(control)), uintptr(unsafe.Pointer(revision)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent *bool, dacl **ACL, daclDefaulted *bool) (err error) {\n\tvar _p0 uint32\n\tif *daclPresent {\n\t\t_p0 = 1\n\t}\n\tvar _p1 uint32\n\tif *daclDefaulted {\n\t\t_p1 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorDacl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(&_p1)))\n\t*daclPresent = _p0 != 0\n\t*daclDefaulted = _p1 != 0\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group **SID, groupDefaulted *bool) (err error) {\n\tvar _p0 uint32\n\tif *groupDefaulted {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorGroup.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(&_p0)))\n\t*groupDefaulted = _p0 != 0\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getSecurityDescriptorLength(sd *SECURITY_DESCRIPTOR) (len uint32) {\n\tr0, _, _ := syscall.SyscallN(procGetSecurityDescriptorLength.Addr(), uintptr(unsafe.Pointer(sd)))\n\tlen = uint32(r0)\n\treturn\n}\n\nfunc getSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner **SID, ownerDefaulted *bool) (err error) {\n\tvar _p0 uint32\n\tif *ownerDefaulted {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorOwner.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(&_p0)))\n\t*ownerDefaulted = _p0 != 0\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procGetSecurityDescriptorRMControl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl)))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc getSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent *bool, sacl **ACL, saclDefaulted *bool) (err error) {\n\tvar _p0 uint32\n\tif *saclPresent {\n\t\t_p0 = 1\n\t}\n\tvar _p1 uint32\n\tif *saclDefaulted {\n\t\t_p1 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorSacl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(&_p1)))\n\t*saclPresent = _p0 != 0\n\t*saclDefaulted = _p1 != 0\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procGetSecurityInfo.Addr(), uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd)))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc getSidIdentifierAuthority(sid *SID) (authority *SidIdentifierAuthority) {\n\tr0, _, _ := syscall.SyscallN(procGetSidIdentifierAuthority.Addr(), uintptr(unsafe.Pointer(sid)))\n\tauthority = (*SidIdentifierAuthority)(unsafe.Pointer(r0))\n\treturn\n}\n\nfunc getSidSubAuthority(sid *SID, index uint32) (subAuthority *uint32) {\n\tr0, _, _ := syscall.SyscallN(procGetSidSubAuthority.Addr(), uintptr(unsafe.Pointer(sid)), uintptr(index))\n\tsubAuthority = (*uint32)(unsafe.Pointer(r0))\n\treturn\n}\n\nfunc getSidSubAuthorityCount(sid *SID) (count *uint8) {\n\tr0, _, _ := syscall.SyscallN(procGetSidSubAuthorityCount.Addr(), uintptr(unsafe.Pointer(sid)))\n\tcount = (*uint8)(unsafe.Pointer(r0))\n\treturn\n}\n\nfunc GetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetTokenInformation.Addr(), uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), uintptr(unsafe.Pointer(returnedLen)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ImpersonateSelf(impersonationlevel uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procImpersonateSelf.Addr(), uintptr(impersonationlevel))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc initializeSecurityDescriptor(absoluteSD *SECURITY_DESCRIPTOR, revision uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procInitializeSecurityDescriptor.Addr(), uintptr(unsafe.Pointer(absoluteSD)), uintptr(revision))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint32, forceAppsClosed bool, rebootAfterShutdown bool, reason uint32) (err error) {\n\tvar _p0 uint32\n\tif forceAppsClosed {\n\t\t_p0 = 1\n\t}\n\tvar _p1 uint32\n\tif rebootAfterShutdown {\n\t\t_p1 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procInitiateSystemShutdownExW.Addr(), uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(message)), uintptr(timeout), uintptr(_p0), uintptr(_p1), uintptr(reason))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc isTokenRestricted(tokenHandle Token) (ret bool, err error) {\n\tr0, _, e1 := syscall.SyscallN(procIsTokenRestricted.Addr(), uintptr(tokenHandle))\n\tret = r0 != 0\n\tif !ret {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc isValidSecurityDescriptor(sd *SECURITY_DESCRIPTOR) (isValid bool) {\n\tr0, _, _ := syscall.SyscallN(procIsValidSecurityDescriptor.Addr(), uintptr(unsafe.Pointer(sd)))\n\tisValid = r0 != 0\n\treturn\n}\n\nfunc isValidSid(sid *SID) (isValid bool) {\n\tr0, _, _ := syscall.SyscallN(procIsValidSid.Addr(), uintptr(unsafe.Pointer(sid)))\n\tisValid = r0 != 0\n\treturn\n}\n\nfunc isWellKnownSid(sid *SID, sidType WELL_KNOWN_SID_TYPE) (isWellKnown bool) {\n\tr0, _, _ := syscall.SyscallN(procIsWellKnownSid.Addr(), uintptr(unsafe.Pointer(sid)), uintptr(sidType))\n\tisWellKnown = r0 != 0\n\treturn\n}\n\nfunc LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *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(sidLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *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(nameLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc LookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (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 makeAbsoluteSD(selfRelativeSD *SECURITY_DESCRIPTOR, absoluteSD *SECURITY_DESCRIPTOR, absoluteSDSize *uint32, dacl *ACL, daclSize *uint32, sacl *ACL, saclSize *uint32, owner *SID, ownerSize *uint32, group *SID, groupSize *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procMakeAbsoluteSD.Addr(), uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(absoluteSDSize)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(daclSize)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(saclSize)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(ownerSize)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(groupSize)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procMakeSelfRelativeSD.Addr(), uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(selfRelativeSDSize)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procNotifyServiceStatusChangeW.Addr(), uintptr(service), uintptr(notifyMask), uintptr(unsafe.Pointer(notifier)))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc OpenProcessToken(process Handle, access uint32, token *Token) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procOpenProcessToken.Addr(), uintptr(process), uintptr(access), uintptr(unsafe.Pointer(token)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procOpenSCManagerW.Addr(), uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(databaseName)), uintptr(access))\n\thandle = Handle(r0)\n\tif handle == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procOpenServiceW.Addr(), uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(access))\n\thandle = Handle(r0)\n\tif handle == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc OpenThreadToken(thread Handle, access uint32, openAsSelf bool, token *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(access), uintptr(_p0), uintptr(unsafe.Pointer(token)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procQueryServiceConfig2W.Addr(), uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procQueryServiceConfigW.Addr(), uintptr(service), uintptr(unsafe.Pointer(serviceConfig)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) {\n\terr = procQueryServiceDynamicInformation.Find()\n\tif err != nil {\n\t\treturn\n\t}\n\tr1, _, e1 := syscall.SyscallN(procQueryServiceDynamicInformation.Addr(), uintptr(service), uintptr(infoLevel), uintptr(dynamicInfo))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc QueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, bufSize uint32, bytesNeeded *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procQueryServiceLockStatusW.Addr(), uintptr(mgr), uintptr(unsafe.Pointer(lockStatus)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procQueryServiceStatus.Addr(), uintptr(service), uintptr(unsafe.Pointer(status)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procQueryServiceStatusEx.Addr(), uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc RegCloseKey(key Handle) (regerrno error) {\n\tr0, _, _ := syscall.SyscallN(procRegCloseKey.Addr(), uintptr(key))\n\tif r0 != 0 {\n\t\tregerrno = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) {\n\tr0, _, _ := syscall.SyscallN(procRegEnumKeyExW.Addr(), uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(lastWriteTime)))\n\tif r0 != 0 {\n\t\tregerrno = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, event Handle, asynchronous bool) (regerrno error) {\n\tvar _p0 uint32\n\tif watchSubtree {\n\t\t_p0 = 1\n\t}\n\tvar _p1 uint32\n\tif asynchronous {\n\t\t_p1 = 1\n\t}\n\tr0, _, _ := syscall.SyscallN(procRegNotifyChangeKeyValue.Addr(), uintptr(key), uintptr(_p0), uintptr(notifyFilter), uintptr(event), uintptr(_p1))\n\tif r0 != 0 {\n\t\tregerrno = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) {\n\tr0, _, _ := syscall.SyscallN(procRegOpenKeyExW.Addr(), uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(options), uintptr(desiredAccess), uintptr(unsafe.Pointer(result)))\n\tif r0 != 0 {\n\t\tregerrno = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) {\n\tr0, _, _ := syscall.SyscallN(procRegQueryInfoKeyW.Addr(), uintptr(key), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(subkeysLen)), uintptr(unsafe.Pointer(maxSubkeyLen)), uintptr(unsafe.Pointer(maxClassLen)), uintptr(unsafe.Pointer(valuesLen)), uintptr(unsafe.Pointer(maxValueNameLen)), uintptr(unsafe.Pointer(maxValueLen)), uintptr(unsafe.Pointer(saLen)), uintptr(unsafe.Pointer(lastWriteTime)))\n\tif r0 != 0 {\n\t\tregerrno = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) {\n\tr0, _, _ := syscall.SyscallN(procRegQueryValueExW.Addr(), uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen)))\n\tif r0 != 0 {\n\t\tregerrno = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procRegisterEventSourceW.Addr(), uintptr(unsafe.Pointer(uncServerName)), uintptr(unsafe.Pointer(sourceName)))\n\thandle = Handle(r0)\n\tif handle == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procRegisterServiceCtrlHandlerExW.Addr(), uintptr(unsafe.Pointer(serviceName)), uintptr(handlerProc), uintptr(context))\n\thandle = Handle(r0)\n\tif handle == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procReportEventW.Addr(), uintptr(log), uintptr(etype), uintptr(category), uintptr(eventId), uintptr(usrSId), uintptr(numStrings), uintptr(dataSize), uintptr(unsafe.Pointer(strings)), uintptr(unsafe.Pointer(rawData)))\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 setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procSetEntriesInAclW.Addr(), uintptr(countExplicitEntries), uintptr(unsafe.Pointer(explicitEntries)), uintptr(unsafe.Pointer(oldACL)), uintptr(unsafe.Pointer(newACL)))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetKernelObjectSecurity.Addr(), uintptr(handle), uintptr(securityInformation), uintptr(unsafe.Pointer(securityDescriptor)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) {\n\tvar _p0 *uint16\n\t_p0, ret = syscall.UTF16PtrFromString(objectName)\n\tif ret != nil {\n\t\treturn\n\t}\n\treturn _SetNamedSecurityInfo(_p0, objectType, securityInformation, owner, group, dacl, sacl)\n}\n\nfunc _SetNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procSetNamedSecurityInfoW.Addr(), uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc setSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorControl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(controlBitsOfInterest), uintptr(controlBitsToSet))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent bool, dacl *ACL, daclDefaulted bool) (err error) {\n\tvar _p0 uint32\n\tif daclPresent {\n\t\t_p0 = 1\n\t}\n\tvar _p1 uint32\n\tif daclDefaulted {\n\t\t_p1 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorDacl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(dacl)), uintptr(_p1))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group *SID, groupDefaulted bool) (err error) {\n\tvar _p0 uint32\n\tif groupDefaulted {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorGroup.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(_p0))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner *SID, ownerDefaulted bool) (err error) {\n\tvar _p0 uint32\n\tif ownerDefaulted {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorOwner.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(_p0))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) {\n\tsyscall.SyscallN(procSetSecurityDescriptorRMControl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl)))\n\treturn\n}\n\nfunc setSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent bool, sacl *ACL, saclDefaulted bool) (err error) {\n\tvar _p0 uint32\n\tif saclPresent {\n\t\t_p0 = 1\n\t}\n\tvar _p1 uint32\n\tif saclDefaulted {\n\t\t_p1 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorSacl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(sacl)), uintptr(_p1))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procSetSecurityInfo.Addr(), uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetServiceStatus.Addr(), uintptr(service), uintptr(unsafe.Pointer(serviceStatus)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetThreadToken(thread *Handle, token Token) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetThreadToken.Addr(), uintptr(unsafe.Pointer(thread)), uintptr(token))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetTokenInformation.Addr(), uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procStartServiceCtrlDispatcherW.Addr(), uintptr(unsafe.Pointer(serviceTable)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procStartServiceW.Addr(), uintptr(service), uintptr(numArgs), uintptr(unsafe.Pointer(argVectors)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCertAddCertificateContextToStore.Addr(), uintptr(store), uintptr(unsafe.Pointer(certContext)), uintptr(addDisposition), uintptr(unsafe.Pointer(storeContext)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CertCloseStore(store Handle, flags uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCertCloseStore.Addr(), uintptr(store), uintptr(flags))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCertCreateCertificateContext.Addr(), uintptr(certEncodingType), uintptr(unsafe.Pointer(certEncoded)), uintptr(encodedLen))\n\tcontext = (*CertContext)(unsafe.Pointer(r0))\n\tif context == nil {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CertDeleteCertificateFromStore(certContext *CertContext) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCertDeleteCertificateFromStore.Addr(), uintptr(unsafe.Pointer(certContext)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CertDuplicateCertificateContext(certContext *CertContext) (dupContext *CertContext) {\n\tr0, _, _ := syscall.SyscallN(procCertDuplicateCertificateContext.Addr(), uintptr(unsafe.Pointer(certContext)))\n\tdupContext = (*CertContext)(unsafe.Pointer(r0))\n\treturn\n}\n\nfunc CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCertEnumCertificatesInStore.Addr(), uintptr(store), uintptr(unsafe.Pointer(prevContext)))\n\tcontext = (*CertContext)(unsafe.Pointer(r0))\n\tif context == nil {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CertFindCertificateInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevCertContext *CertContext) (cert *CertContext, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCertFindCertificateInStore.Addr(), uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevCertContext)))\n\tcert = (*CertContext)(unsafe.Pointer(r0))\n\tif cert == nil {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevChainContext *CertChainContext) (certchain *CertChainContext, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCertFindChainInStore.Addr(), uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevChainContext)))\n\tcertchain = (*CertChainContext)(unsafe.Pointer(r0))\n\tif certchain == nil {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) {\n\tr0, _, _ := syscall.SyscallN(procCertFindExtension.Addr(), uintptr(unsafe.Pointer(objId)), uintptr(countExtensions), uintptr(unsafe.Pointer(extensions)))\n\tret = (*CertExtension)(unsafe.Pointer(r0))\n\treturn\n}\n\nfunc CertFreeCertificateChain(ctx *CertChainContext) {\n\tsyscall.SyscallN(procCertFreeCertificateChain.Addr(), uintptr(unsafe.Pointer(ctx)))\n\treturn\n}\n\nfunc CertFreeCertificateContext(ctx *CertContext) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCertFreeCertificateContext.Addr(), uintptr(unsafe.Pointer(ctx)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCertGetCertificateChain.Addr(), uintptr(engine), uintptr(unsafe.Pointer(leaf)), uintptr(unsafe.Pointer(time)), uintptr(additionalStore), uintptr(unsafe.Pointer(para)), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(chainCtx)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) {\n\tr0, _, _ := syscall.SyscallN(procCertGetNameStringW.Addr(), uintptr(unsafe.Pointer(certContext)), uintptr(nameType), uintptr(flags), uintptr(typePara), uintptr(unsafe.Pointer(name)), uintptr(size))\n\tchars = uint32(r0)\n\treturn\n}\n\nfunc CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCertOpenStore.Addr(), uintptr(storeProvider), uintptr(msgAndCertEncodingType), uintptr(cryptProv), uintptr(flags), uintptr(para))\n\thandle = Handle(r0)\n\tif handle == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCertOpenSystemStoreW.Addr(), uintptr(hprov), uintptr(unsafe.Pointer(name)))\n\tstore = Handle(r0)\n\tif store == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCertVerifyCertificateChainPolicy.Addr(), uintptr(policyOID), uintptr(unsafe.Pointer(chain)), uintptr(unsafe.Pointer(para)), uintptr(unsafe.Pointer(status)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, parameters unsafe.Pointer, cryptProvOrNCryptKey *Handle, keySpec *uint32, callerFreeProvOrNCryptKey *bool) (err error) {\n\tvar _p0 uint32\n\tif *callerFreeProvOrNCryptKey {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procCryptAcquireCertificatePrivateKey.Addr(), uintptr(unsafe.Pointer(cert)), uintptr(flags), uintptr(parameters), uintptr(unsafe.Pointer(cryptProvOrNCryptKey)), uintptr(unsafe.Pointer(keySpec)), uintptr(unsafe.Pointer(&_p0)))\n\t*callerFreeProvOrNCryptKey = _p0 != 0\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCryptDecodeObject.Addr(), uintptr(encodingType), uintptr(unsafe.Pointer(structType)), uintptr(unsafe.Pointer(encodedBytes)), uintptr(lenEncodedBytes), uintptr(flags), uintptr(decoded), uintptr(unsafe.Pointer(decodedLen)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCryptProtectData.Addr(), uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCryptQueryObject.Addr(), uintptr(objectType), uintptr(object), uintptr(expectedContentTypeFlags), uintptr(expectedFormatTypeFlags), uintptr(flags), uintptr(unsafe.Pointer(msgAndCertEncodingType)), uintptr(unsafe.Pointer(contentType)), uintptr(unsafe.Pointer(formatType)), uintptr(unsafe.Pointer(certStore)), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(context)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCryptUnprotectData.Addr(), uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procPFXImportCertStore.Addr(), uintptr(unsafe.Pointer(pfx)), uintptr(unsafe.Pointer(password)), uintptr(flags))\n\tstore = Handle(r0)\n\tif store == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) {\n\tr0, _, _ := syscall.SyscallN(procDnsNameCompare_W.Addr(), uintptr(unsafe.Pointer(name1)), uintptr(unsafe.Pointer(name2)))\n\tsame = r0 != 0\n\treturn\n}\n\nfunc DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) {\n\tvar _p0 *uint16\n\t_p0, status = syscall.UTF16PtrFromString(name)\n\tif status != nil {\n\t\treturn\n\t}\n\treturn _DnsQuery(_p0, qtype, options, extra, qrs, pr)\n}\n\nfunc _DnsQuery(name *uint16, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) {\n\tr0, _, _ := syscall.SyscallN(procDnsQuery_W.Addr(), uintptr(unsafe.Pointer(name)), uintptr(qtype), uintptr(options), uintptr(unsafe.Pointer(extra)), uintptr(unsafe.Pointer(qrs)), uintptr(unsafe.Pointer(pr)))\n\tif r0 != 0 {\n\t\tstatus = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc DnsRecordListFree(rl *DNSRecord, freetype uint32) {\n\tsyscall.SyscallN(procDnsRecordListFree.Addr(), uintptr(unsafe.Pointer(rl)), uintptr(freetype))\n\treturn\n}\n\nfunc DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procDwmGetWindowAttribute.Addr(), uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procDwmSetWindowAttribute.Addr(), uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc CancelMibChangeNotify2(notificationHandle Handle) (errcode error) {\n\tr0, _, _ := syscall.SyscallN(procCancelMibChangeNotify2.Addr(), uintptr(notificationHandle))\n\tif r0 != 0 {\n\t\terrcode = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc FreeMibTable(memory unsafe.Pointer) {\n\tsyscall.SyscallN(procFreeMibTable.Addr(), uintptr(memory))\n\treturn\n}\n\nfunc GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) {\n\tr0, _, _ := syscall.SyscallN(procGetAdaptersAddresses.Addr(), uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)))\n\tif r0 != 0 {\n\t\terrcode = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) {\n\tr0, _, _ := syscall.SyscallN(procGetAdaptersInfo.Addr(), uintptr(unsafe.Pointer(ai)), uintptr(unsafe.Pointer(ol)))\n\tif r0 != 0 {\n\t\terrcode = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) {\n\tr0, _, _ := syscall.SyscallN(procGetBestInterfaceEx.Addr(), uintptr(sockaddr), uintptr(unsafe.Pointer(pdwBestIfIndex)))\n\tif r0 != 0 {\n\t\terrcode = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc GetIfEntry(pIfRow *MibIfRow) (errcode error) {\n\tr0, _, _ := syscall.SyscallN(procGetIfEntry.Addr(), uintptr(unsafe.Pointer(pIfRow)))\n\tif r0 != 0 {\n\t\terrcode = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) {\n\tr0, _, _ := syscall.SyscallN(procGetIfEntry2Ex.Addr(), uintptr(level), uintptr(unsafe.Pointer(row)))\n\tif r0 != 0 {\n\t\terrcode = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc GetIpForwardEntry2(row *MibIpForwardRow2) (errcode error) {\n\tr0, _, _ := syscall.SyscallN(procGetIpForwardEntry2.Addr(), uintptr(unsafe.Pointer(row)))\n\tif r0 != 0 {\n\t\terrcode = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc GetIpForwardTable2(family uint16, table **MibIpForwardTable2) (errcode error) {\n\tr0, _, _ := syscall.SyscallN(procGetIpForwardTable2.Addr(), uintptr(family), uintptr(unsafe.Pointer(table)))\n\tif r0 != 0 {\n\t\terrcode = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) {\n\tr0, _, _ := syscall.SyscallN(procGetUnicastIpAddressEntry.Addr(), uintptr(unsafe.Pointer(row)))\n\tif r0 != 0 {\n\t\terrcode = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) {\n\tvar _p0 uint32\n\tif initialNotification {\n\t\t_p0 = 1\n\t}\n\tr0, _, _ := syscall.SyscallN(procNotifyIpInterfaceChange.Addr(), uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle)))\n\tif r0 != 0 {\n\t\terrcode = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc NotifyRouteChange2(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) {\n\tvar _p0 uint32\n\tif initialNotification {\n\t\t_p0 = 1\n\t}\n\tr0, _, _ := syscall.SyscallN(procNotifyRouteChange2.Addr(), uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle)))\n\tif r0 != 0 {\n\t\terrcode = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) {\n\tvar _p0 uint32\n\tif initialNotification {\n\t\t_p0 = 1\n\t}\n\tr0, _, _ := syscall.SyscallN(procNotifyUnicastIpAddressChange.Addr(), uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle)))\n\tif r0 != 0 {\n\t\terrcode = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc AddDllDirectory(path *uint16) (cookie uintptr, err error) {\n\tr0, _, e1 := syscall.SyscallN(procAddDllDirectory.Addr(), uintptr(unsafe.Pointer(path)))\n\tcookie = uintptr(r0)\n\tif cookie == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc AssignProcessToJobObject(job Handle, process Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procAssignProcessToJobObject.Addr(), uintptr(job), uintptr(process))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CancelIo(s Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCancelIo.Addr(), uintptr(s))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CancelIoEx(s Handle, o *Overlapped) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCancelIoEx.Addr(), uintptr(s), uintptr(unsafe.Pointer(o)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ClearCommBreak(handle Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procClearCommBreak.Addr(), uintptr(handle))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ClearCommError(handle Handle, lpErrors *uint32, lpStat *ComStat) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procClearCommError.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpErrors)), uintptr(unsafe.Pointer(lpStat)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CloseHandle(handle Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCloseHandle.Addr(), uintptr(handle))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ClosePseudoConsole(console Handle) {\n\tsyscall.SyscallN(procClosePseudoConsole.Addr(), uintptr(console))\n\treturn\n}\n\nfunc ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procConnectNamedPipe.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(overlapped)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCreateDirectoryW.Addr(), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(sa)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCreateEventExW.Addr(), uintptr(unsafe.Pointer(eventAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess))\n\thandle = Handle(r0)\n\tif handle == 0 || e1 == ERROR_ALREADY_EXISTS {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCreateEventW.Addr(), uintptr(unsafe.Pointer(eventAttrs)), uintptr(manualReset), uintptr(initialState), uintptr(unsafe.Pointer(name)))\n\thandle = Handle(r0)\n\tif handle == 0 || e1 == ERROR_ALREADY_EXISTS {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCreateFileMappingW.Addr(), uintptr(fhandle), uintptr(unsafe.Pointer(sa)), uintptr(prot), uintptr(maxSizeHigh), uintptr(maxSizeLow), uintptr(unsafe.Pointer(name)))\n\thandle = Handle(r0)\n\tif handle == 0 || e1 == ERROR_ALREADY_EXISTS {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile Handle) (handle 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 = Handle(r0)\n\tif handle == InvalidHandle {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCreateHardLinkW.Addr(), uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(existingfilename)), uintptr(reserved))\n\tif r1&0xff == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uintptr, threadcnt uint32) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCreateIoCompletionPort.Addr(), uintptr(filehandle), uintptr(cphandle), uintptr(key), uintptr(threadcnt))\n\thandle = Handle(r0)\n\tif handle == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateJobObject(jobAttr *SecurityAttributes, name *uint16) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCreateJobObjectW.Addr(), uintptr(unsafe.Pointer(jobAttr)), uintptr(unsafe.Pointer(name)))\n\thandle = Handle(r0)\n\tif handle == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateMutexEx(mutexAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCreateMutexExW.Addr(), uintptr(unsafe.Pointer(mutexAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess))\n\thandle = Handle(r0)\n\tif handle == 0 || e1 == ERROR_ALREADY_EXISTS {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateMutex(mutexAttrs *SecurityAttributes, initialOwner bool, name *uint16) (handle Handle, err error) {\n\tvar _p0 uint32\n\tif initialOwner {\n\t\t_p0 = 1\n\t}\n\tr0, _, e1 := syscall.SyscallN(procCreateMutexW.Addr(), uintptr(unsafe.Pointer(mutexAttrs)), uintptr(_p0), uintptr(unsafe.Pointer(name)))\n\thandle = Handle(r0)\n\tif handle == 0 || e1 == ERROR_ALREADY_EXISTS {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle 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 = Handle(r0)\n\tif handle == InvalidHandle {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCreatePipe.Addr(), uintptr(unsafe.Pointer(readhandle)), uintptr(unsafe.Pointer(writehandle)), uintptr(unsafe.Pointer(sa)), uintptr(size))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) {\n\tvar _p0 uint32\n\tif inheritHandles {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procCreateProcessW.Addr(), uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc createPseudoConsole(size uint32, in Handle, out Handle, flags uint32, pconsole *Handle) (hr error) {\n\tr0, _, _ := syscall.SyscallN(procCreatePseudoConsole.Addr(), uintptr(size), uintptr(in), uintptr(out), uintptr(flags), uintptr(unsafe.Pointer(pconsole)))\n\tif r0 != 0 {\n\t\thr = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCreateSymbolicLinkW.Addr(), uintptr(unsafe.Pointer(symlinkfilename)), uintptr(unsafe.Pointer(targetfilename)), uintptr(flags))\n\tif r1&0xff == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCreateToolhelp32Snapshot.Addr(), uintptr(flags), uintptr(processId))\n\thandle = Handle(r0)\n\tif handle == InvalidHandle {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procDefineDosDeviceW.Addr(), uintptr(flags), uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc DeleteFile(path *uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procDeleteFileW.Addr(), uintptr(unsafe.Pointer(path)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc deleteProcThreadAttributeList(attrlist *ProcThreadAttributeList) {\n\tsyscall.SyscallN(procDeleteProcThreadAttributeList.Addr(), uintptr(unsafe.Pointer(attrlist)))\n\treturn\n}\n\nfunc DeleteVolumeMountPoint(volumeMountPoint *uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procDeleteVolumeMountPointW.Addr(), uintptr(unsafe.Pointer(volumeMountPoint)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procDeviceIoControl.Addr(), uintptr(handle), uintptr(ioControlCode), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferSize), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferSize), uintptr(unsafe.Pointer(bytesReturned)), uintptr(unsafe.Pointer(overlapped)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc DisconnectNamedPipe(pipe 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 DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) {\n\tvar _p0 uint32\n\tif bInheritHandle {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procDuplicateHandle.Addr(), uintptr(hSourceProcessHandle), uintptr(hSourceHandle), uintptr(hTargetProcessHandle), uintptr(unsafe.Pointer(lpTargetHandle)), uintptr(dwDesiredAccess), uintptr(_p0), uintptr(dwOptions))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc EscapeCommFunction(handle Handle, dwFunc uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procEscapeCommFunction.Addr(), uintptr(handle), uintptr(dwFunc))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ExitProcess(exitcode uint32) {\n\tsyscall.SyscallN(procExitProcess.Addr(), uintptr(exitcode))\n\treturn\n}\n\nfunc ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procExpandEnvironmentStringsW.Addr(), uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size))\n\tn = uint32(r0)\n\tif n == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FindClose(handle Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procFindClose.Addr(), uintptr(handle))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FindCloseChangeNotification(handle Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procFindCloseChangeNotification.Addr(), uintptr(handle))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) {\n\tvar _p0 *uint16\n\t_p0, err = syscall.UTF16PtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _FindFirstChangeNotification(_p0, watchSubtree, notifyFilter)\n}\n\nfunc _FindFirstChangeNotification(path *uint16, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) {\n\tvar _p1 uint32\n\tif watchSubtree {\n\t\t_p1 = 1\n\t}\n\tr0, _, e1 := syscall.SyscallN(procFindFirstChangeNotificationW.Addr(), uintptr(unsafe.Pointer(path)), uintptr(_p1), uintptr(notifyFilter))\n\thandle = Handle(r0)\n\tif handle == InvalidHandle {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procFindFirstFileW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data)))\n\thandle = Handle(r0)\n\tif handle == InvalidHandle {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FindFirstVolumeMountPoint(rootPathName *uint16, volumeMountPoint *uint16, bufferLength uint32) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procFindFirstVolumeMountPointW.Addr(), uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength))\n\thandle = Handle(r0)\n\tif handle == InvalidHandle {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procFindFirstVolumeW.Addr(), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength))\n\thandle = Handle(r0)\n\tif handle == InvalidHandle {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FindNextChangeNotification(handle Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procFindNextChangeNotification.Addr(), uintptr(handle))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc findNextFile1(handle Handle, data *win32finddata1) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procFindNextFileW.Addr(), uintptr(handle), uintptr(unsafe.Pointer(data)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uint16, bufferLength uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procFindNextVolumeMountPointW.Addr(), uintptr(findVolumeMountPoint), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FindNextVolume(findVolume Handle, volumeName *uint16, bufferLength uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procFindNextVolumeW.Addr(), uintptr(findVolume), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc findResource(module Handle, name uintptr, resType uintptr) (resInfo Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procFindResourceW.Addr(), uintptr(module), uintptr(name), uintptr(resType))\n\tresInfo = Handle(r0)\n\tif resInfo == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FindVolumeClose(findVolume Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procFindVolumeClose.Addr(), uintptr(findVolume))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FindVolumeMountPointClose(findVolumeMountPoint Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procFindVolumeMountPointClose.Addr(), uintptr(findVolumeMountPoint))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FlushConsoleInputBuffer(console Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procFlushConsoleInputBuffer.Addr(), uintptr(console))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FlushFileBuffers(handle Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procFlushFileBuffers.Addr(), uintptr(handle))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FlushViewOfFile(addr uintptr, length uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procFlushViewOfFile.Addr(), uintptr(addr), uintptr(length))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) {\n\tvar _p0 *uint16\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, _, e1 := syscall.SyscallN(procFormatMessageW.Addr(), uintptr(flags), uintptr(msgsrc), uintptr(msgid), uintptr(langid), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(args)))\n\tn = uint32(r0)\n\tif n == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FreeEnvironmentStrings(envs *uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procFreeEnvironmentStringsW.Addr(), uintptr(unsafe.Pointer(envs)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc FreeLibrary(handle Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procFreeLibrary.Addr(), uintptr(handle))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GenerateConsoleCtrlEvent(ctrlEvent uint32, processGroupID uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGenerateConsoleCtrlEvent.Addr(), uintptr(ctrlEvent), uintptr(processGroupID))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetACP() (acp uint32) {\n\tr0, _, _ := syscall.SyscallN(procGetACP.Addr())\n\tacp = uint32(r0)\n\treturn\n}\n\nfunc GetActiveProcessorCount(groupNumber uint16) (ret uint32) {\n\tr0, _, _ := syscall.SyscallN(procGetActiveProcessorCount.Addr(), uintptr(groupNumber))\n\tret = uint32(r0)\n\treturn\n}\n\nfunc GetCommModemStatus(handle Handle, lpModemStat *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetCommModemStatus.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpModemStat)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetCommState(handle Handle, lpDCB *DCB) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetCommState.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpDCB)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetCommTimeouts.Addr(), uintptr(handle), uintptr(unsafe.Pointer(timeouts)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetCommandLine() (cmd *uint16) {\n\tr0, _, _ := syscall.SyscallN(procGetCommandLineW.Addr())\n\tcmd = (*uint16)(unsafe.Pointer(r0))\n\treturn\n}\n\nfunc GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetComputerNameExW.Addr(), uintptr(nametype), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetComputerName(buf *uint16, n *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetComputerNameW.Addr(), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetConsoleCP() (cp uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetConsoleCP.Addr())\n\tcp = uint32(r0)\n\tif cp == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetConsoleMode(console Handle, mode *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetConsoleMode.Addr(), uintptr(console), uintptr(unsafe.Pointer(mode)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetConsoleOutputCP() (cp uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetConsoleOutputCP.Addr())\n\tcp = uint32(r0)\n\tif cp == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetConsoleScreenBufferInfo.Addr(), uintptr(console), uintptr(unsafe.Pointer(info)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetCurrentDirectoryW.Addr(), uintptr(buflen), uintptr(unsafe.Pointer(buf)))\n\tn = uint32(r0)\n\tif n == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetCurrentProcessId() (pid uint32) {\n\tr0, _, _ := syscall.SyscallN(procGetCurrentProcessId.Addr())\n\tpid = uint32(r0)\n\treturn\n}\n\nfunc GetCurrentThreadId() (id uint32) {\n\tr0, _, _ := syscall.SyscallN(procGetCurrentThreadId.Addr())\n\tid = uint32(r0)\n\treturn\n}\n\nfunc GetDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *uint64, totalNumberOfBytes *uint64, totalNumberOfFreeBytes *uint64) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetDiskFreeSpaceExW.Addr(), uintptr(unsafe.Pointer(directoryName)), uintptr(unsafe.Pointer(freeBytesAvailableToCaller)), uintptr(unsafe.Pointer(totalNumberOfBytes)), uintptr(unsafe.Pointer(totalNumberOfFreeBytes)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetDriveType(rootPathName *uint16) (driveType uint32) {\n\tr0, _, _ := syscall.SyscallN(procGetDriveTypeW.Addr(), uintptr(unsafe.Pointer(rootPathName)))\n\tdriveType = uint32(r0)\n\treturn\n}\n\nfunc GetEnvironmentStrings() (envs *uint16, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetEnvironmentStringsW.Addr())\n\tenvs = (*uint16)(unsafe.Pointer(r0))\n\tif envs == nil {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetEnvironmentVariableW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(size))\n\tn = uint32(r0)\n\tif n == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetExitCodeProcess.Addr(), uintptr(handle), uintptr(unsafe.Pointer(exitcode)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetFileAttributesExW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(level), uintptr(unsafe.Pointer(info)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetFileAttributes(name *uint16) (attrs uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetFileAttributesW.Addr(), uintptr(unsafe.Pointer(name)))\n\tattrs = uint32(r0)\n\tif attrs == INVALID_FILE_ATTRIBUTES {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetFileInformationByHandle.Addr(), uintptr(handle), uintptr(unsafe.Pointer(data)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetFileInformationByHandleEx.Addr(), uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferLen))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetFileTime.Addr(), uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetFileType(filehandle Handle) (n uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetFileType.Addr(), uintptr(filehandle))\n\tn = uint32(r0)\n\tif n == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetFinalPathNameByHandle(file Handle, filePath *uint16, filePathSize uint32, flags uint32) (n uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetFinalPathNameByHandleW.Addr(), uintptr(file), uintptr(unsafe.Pointer(filePath)), uintptr(filePathSize), uintptr(flags))\n\tn = uint32(r0)\n\tif n == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetFullPathNameW.Addr(), uintptr(unsafe.Pointer(path)), uintptr(buflen), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(fname)))\n\tn = uint32(r0)\n\tif n == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetLargePageMinimum() (size uintptr) {\n\tr0, _, _ := syscall.SyscallN(procGetLargePageMinimum.Addr())\n\tsize = uintptr(r0)\n\treturn\n}\n\nfunc GetLastError() (lasterr error) {\n\tr0, _, _ := syscall.SyscallN(procGetLastError.Addr())\n\tif r0 != 0 {\n\t\tlasterr = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc GetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetLogicalDriveStringsW.Addr(), uintptr(bufferLength), uintptr(unsafe.Pointer(buffer)))\n\tn = uint32(r0)\n\tif n == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetLogicalDrives() (drivesBitMask uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetLogicalDrives.Addr())\n\tdrivesBitMask = uint32(r0)\n\tif drivesBitMask == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetLongPathNameW.Addr(), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(buf)), uintptr(buflen))\n\tn = uint32(r0)\n\tif n == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetMaximumProcessorCount(groupNumber uint16) (ret uint32) {\n\tr0, _, _ := syscall.SyscallN(procGetMaximumProcessorCount.Addr(), uintptr(groupNumber))\n\tret = uint32(r0)\n\treturn\n}\n\nfunc GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetModuleFileNameW.Addr(), uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size))\n\tn = uint32(r0)\n\tif n == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetModuleHandleExW.Addr(), uintptr(flags), uintptr(unsafe.Pointer(moduleName)), uintptr(unsafe.Pointer(module)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetNamedPipeClientProcessId(pipe Handle, clientProcessID *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetNamedPipeClientProcessId.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(clientProcessID)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetNamedPipeHandleState(pipe 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 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 GetNamedPipeServerProcessId(pipe Handle, serverProcessID *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetNamedPipeServerProcessId.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(serverProcessID)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetNumberOfConsoleInputEvents(console Handle, numevents *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetNumberOfConsoleInputEvents.Addr(), uintptr(console), uintptr(unsafe.Pointer(numevents)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error) {\n\tvar _p0 uint32\n\tif wait {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procGetOverlappedResult.Addr(), uintptr(handle), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(done)), uintptr(_p0))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetPriorityClass(process Handle) (ret uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetPriorityClass.Addr(), uintptr(process))\n\tret = uint32(r0)\n\tif ret == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetProcAddress(module Handle, procname string) (proc uintptr, err error) {\n\tvar _p0 *byte\n\t_p0, err = syscall.BytePtrFromString(procname)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _GetProcAddress(module, _p0)\n}\n\nfunc _GetProcAddress(module Handle, procname *byte) (proc uintptr, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetProcAddress.Addr(), uintptr(module), uintptr(unsafe.Pointer(procname)))\n\tproc = uintptr(r0)\n\tif proc == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetProcessId(process Handle) (id uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetProcessId.Addr(), uintptr(process))\n\tid = uint32(r0)\n\tif id == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetProcessPreferredUILanguages.Addr(), uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetProcessShutdownParameters.Addr(), uintptr(unsafe.Pointer(level)), uintptr(unsafe.Pointer(flags)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetProcessTimes.Addr(), uintptr(handle), uintptr(unsafe.Pointer(creationTime)), uintptr(unsafe.Pointer(exitTime)), uintptr(unsafe.Pointer(kernelTime)), uintptr(unsafe.Pointer(userTime)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetProcessWorkingSetSizeEx(hProcess Handle, lpMinimumWorkingSetSize *uintptr, lpMaximumWorkingSetSize *uintptr, flags *uint32) {\n\tsyscall.SyscallN(procGetProcessWorkingSetSizeEx.Addr(), uintptr(hProcess), uintptr(unsafe.Pointer(lpMinimumWorkingSetSize)), uintptr(unsafe.Pointer(lpMaximumWorkingSetSize)), uintptr(unsafe.Pointer(flags)))\n\treturn\n}\n\nfunc GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uintptr, overlapped **Overlapped, timeout uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetQueuedCompletionStatus.Addr(), uintptr(cphandle), uintptr(unsafe.Pointer(qty)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(overlapped)), uintptr(timeout))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetShortPathNameW.Addr(), uintptr(unsafe.Pointer(longpath)), uintptr(unsafe.Pointer(shortpath)), uintptr(buflen))\n\tn = uint32(r0)\n\tif n == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getStartupInfo(startupInfo *StartupInfo) {\n\tsyscall.SyscallN(procGetStartupInfoW.Addr(), uintptr(unsafe.Pointer(startupInfo)))\n\treturn\n}\n\nfunc GetStdHandle(stdhandle uint32) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetStdHandle.Addr(), uintptr(stdhandle))\n\thandle = Handle(r0)\n\tif handle == InvalidHandle {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetSystemDirectoryW.Addr(), uintptr(unsafe.Pointer(dir)), uintptr(dirLen))\n\tlen = uint32(r0)\n\tif len == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getSystemPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetSystemPreferredUILanguages.Addr(), uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetSystemTimeAsFileTime(time *Filetime) {\n\tsyscall.SyscallN(procGetSystemTimeAsFileTime.Addr(), uintptr(unsafe.Pointer(time)))\n\treturn\n}\n\nfunc GetSystemTimePreciseAsFileTime(time *Filetime) {\n\tsyscall.SyscallN(procGetSystemTimePreciseAsFileTime.Addr(), uintptr(unsafe.Pointer(time)))\n\treturn\n}\n\nfunc getSystemWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetSystemWindowsDirectoryW.Addr(), uintptr(unsafe.Pointer(dir)), uintptr(dirLen))\n\tlen = uint32(r0)\n\tif len == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetTempPathW.Addr(), uintptr(buflen), uintptr(unsafe.Pointer(buf)))\n\tn = uint32(r0)\n\tif n == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetThreadPreferredUILanguages.Addr(), uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getTickCount64() (ms uint64) {\n\tr0, _, _ := syscall.SyscallN(procGetTickCount64.Addr())\n\tms = uint64(r0)\n\treturn\n}\n\nfunc GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetTimeZoneInformation.Addr(), uintptr(unsafe.Pointer(tzi)))\n\trc = uint32(r0)\n\tif rc == 0xffffffff {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetUserPreferredUILanguages.Addr(), uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetVersion() (ver uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetVersion.Addr())\n\tver = uint32(r0)\n\tif ver == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetVolumeInformationByHandle(file Handle, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetVolumeInformationByHandleW.Addr(), uintptr(file), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetVolumeInformation(rootPathName *uint16, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetVolumeInformationW.Addr(), uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetVolumeNameForVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16, bufferlength uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetVolumeNameForVolumeMountPointW.Addr(), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferlength))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetVolumePathName(fileName *uint16, volumePathName *uint16, bufferLength uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetVolumePathNameW.Addr(), uintptr(unsafe.Pointer(fileName)), uintptr(unsafe.Pointer(volumePathName)), uintptr(bufferLength))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetVolumePathNamesForVolumeName(volumeName *uint16, volumePathNames *uint16, bufferLength uint32, returnLength *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetVolumePathNamesForVolumeNameW.Addr(), uintptr(unsafe.Pointer(volumeName)), uintptr(unsafe.Pointer(volumePathNames)), uintptr(bufferLength), uintptr(unsafe.Pointer(returnLength)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetWindowsDirectoryW.Addr(), uintptr(unsafe.Pointer(dir)), uintptr(dirLen))\n\tlen = uint32(r0)\n\tif len == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc initializeProcThreadAttributeList(attrlist *ProcThreadAttributeList, attrcount uint32, flags uint32, size *uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procInitializeProcThreadAttributeList.Addr(), uintptr(unsafe.Pointer(attrlist)), uintptr(attrcount), uintptr(flags), uintptr(unsafe.Pointer(size)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc IsProcessorFeaturePresent(ProcessorFeature uint32) (ret bool) {\n\tr0, _, _ := syscall.SyscallN(procIsProcessorFeaturePresent.Addr(), uintptr(ProcessorFeature))\n\tret = r0 != 0\n\treturn\n}\n\nfunc IsWow64Process(handle Handle, isWow64 *bool) (err error) {\n\tvar _p0 uint32\n\tif *isWow64 {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procIsWow64Process.Addr(), uintptr(handle), uintptr(unsafe.Pointer(&_p0)))\n\t*isWow64 = _p0 != 0\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc IsWow64Process2(handle Handle, processMachine *uint16, nativeMachine *uint16) (err error) {\n\terr = procIsWow64Process2.Find()\n\tif err != nil {\n\t\treturn\n\t}\n\tr1, _, e1 := syscall.SyscallN(procIsWow64Process2.Addr(), uintptr(handle), uintptr(unsafe.Pointer(processMachine)), uintptr(unsafe.Pointer(nativeMachine)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) {\n\tvar _p0 *uint16\n\t_p0, err = syscall.UTF16PtrFromString(libname)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _LoadLibraryEx(_p0, zero, flags)\n}\n\nfunc _LoadLibraryEx(libname *uint16, zero Handle, flags uintptr) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procLoadLibraryExW.Addr(), uintptr(unsafe.Pointer(libname)), uintptr(zero), uintptr(flags))\n\thandle = Handle(r0)\n\tif handle == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc LoadLibrary(libname string) (handle Handle, err error) {\n\tvar _p0 *uint16\n\t_p0, err = syscall.UTF16PtrFromString(libname)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _LoadLibrary(_p0)\n}\n\nfunc _LoadLibrary(libname *uint16) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procLoadLibraryW.Addr(), uintptr(unsafe.Pointer(libname)))\n\thandle = Handle(r0)\n\tif handle == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc LoadResource(module Handle, resInfo Handle) (resData Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procLoadResource.Addr(), uintptr(module), uintptr(resInfo))\n\tresData = Handle(r0)\n\tif resData == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc LocalAlloc(flags uint32, length uint32) (ptr uintptr, err error) {\n\tr0, _, e1 := syscall.SyscallN(procLocalAlloc.Addr(), uintptr(flags), uintptr(length))\n\tptr = uintptr(r0)\n\tif ptr == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc LocalFree(hmem Handle) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procLocalFree.Addr(), uintptr(hmem))\n\thandle = Handle(r0)\n\tif handle != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc LockFileEx(file Handle, flags uint32, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procLockFileEx.Addr(), uintptr(file), uintptr(flags), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc LockResource(resData Handle) (addr uintptr, err error) {\n\tr0, _, e1 := syscall.SyscallN(procLockResource.Addr(), uintptr(resData))\n\taddr = uintptr(r0)\n\tif addr == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) {\n\tr0, _, e1 := syscall.SyscallN(procMapViewOfFile.Addr(), uintptr(handle), uintptr(access), uintptr(offsetHigh), uintptr(offsetLow), uintptr(length))\n\taddr = uintptr(r0)\n\tif addr == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procModule32FirstW.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procModule32NextW.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procMoveFileExW.Addr(), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc MoveFile(from *uint16, to *uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procMoveFileW.Addr(), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procMultiByteToWideChar.Addr(), uintptr(codePage), uintptr(dwFlags), uintptr(unsafe.Pointer(str)), uintptr(nstr), uintptr(unsafe.Pointer(wchar)), uintptr(nwchar))\n\tnwrite = int32(r0)\n\tif nwrite == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc OpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) {\n\tvar _p0 uint32\n\tif inheritHandle {\n\t\t_p0 = 1\n\t}\n\tr0, _, e1 := syscall.SyscallN(procOpenEventW.Addr(), uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name)))\n\thandle = Handle(r0)\n\tif handle == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc OpenMutex(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) {\n\tvar _p0 uint32\n\tif inheritHandle {\n\t\t_p0 = 1\n\t}\n\tr0, _, e1 := syscall.SyscallN(procOpenMutexW.Addr(), uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name)))\n\thandle = Handle(r0)\n\tif handle == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error) {\n\tvar _p0 uint32\n\tif inheritHandle {\n\t\t_p0 = 1\n\t}\n\tr0, _, e1 := syscall.SyscallN(procOpenProcess.Addr(), uintptr(desiredAccess), uintptr(_p0), uintptr(processId))\n\thandle = Handle(r0)\n\tif handle == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc OpenThread(desiredAccess uint32, inheritHandle bool, threadId uint32) (handle Handle, err error) {\n\tvar _p0 uint32\n\tif inheritHandle {\n\t\t_p0 = 1\n\t}\n\tr0, _, e1 := syscall.SyscallN(procOpenThread.Addr(), uintptr(desiredAccess), uintptr(_p0), uintptr(threadId))\n\thandle = Handle(r0)\n\tif handle == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uintptr, overlapped *Overlapped) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procPostQueuedCompletionStatus.Addr(), uintptr(cphandle), uintptr(qty), uintptr(key), uintptr(unsafe.Pointer(overlapped)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procProcess32FirstW.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procProcess32NextW.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procProcessIdToSessionId.Addr(), uintptr(pid), uintptr(unsafe.Pointer(sessionid)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc PulseEvent(event Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procPulseEvent.Addr(), uintptr(event))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc PurgeComm(handle Handle, dwFlags uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procPurgeComm.Addr(), uintptr(handle), uintptr(dwFlags))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procQueryDosDeviceW.Addr(), uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath)), uintptr(max))\n\tn = uint32(r0)\n\tif n == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc QueryFullProcessImageName(proc Handle, flags uint32, exeName *uint16, size *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procQueryFullProcessImageNameW.Addr(), uintptr(proc), uintptr(flags), uintptr(unsafe.Pointer(exeName)), uintptr(unsafe.Pointer(size)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc QueryInformationJobObject(job Handle, JobObjectInformationClass int32, JobObjectInformation uintptr, JobObjectInformationLength uint32, retlen *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procQueryInformationJobObject.Addr(), uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength), uintptr(unsafe.Pointer(retlen)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procReadConsoleW.Addr(), uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(toread), uintptr(unsafe.Pointer(read)), uintptr(unsafe.Pointer(inputControl)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) {\n\tvar _p0 uint32\n\tif watchSubTree {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procReadDirectoryChangesW.Addr(), uintptr(handle), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(_p0), uintptr(mask), uintptr(unsafe.Pointer(retlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr1, _, e1 := syscall.SyscallN(procReadFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procReadProcessMemory.Addr(), uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesRead)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ReleaseMutex(mutex Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procReleaseMutex.Addr(), uintptr(mutex))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc RemoveDirectory(path *uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procRemoveDirectoryW.Addr(), uintptr(unsafe.Pointer(path)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc RemoveDllDirectory(cookie uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procRemoveDllDirectory.Addr(), uintptr(cookie))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ResetEvent(event Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procResetEvent.Addr(), uintptr(event))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc resizePseudoConsole(pconsole Handle, size uint32) (hr error) {\n\tr0, _, _ := syscall.SyscallN(procResizePseudoConsole.Addr(), uintptr(pconsole), uintptr(size))\n\tif r0 != 0 {\n\t\thr = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc ResumeThread(thread Handle) (ret uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procResumeThread.Addr(), uintptr(thread))\n\tret = uint32(r0)\n\tif ret == 0xffffffff {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetCommBreak(handle Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetCommBreak.Addr(), uintptr(handle))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetCommMask(handle Handle, dwEvtMask uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetCommMask.Addr(), uintptr(handle), uintptr(dwEvtMask))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetCommState(handle Handle, lpDCB *DCB) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetCommState.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpDCB)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetCommTimeouts.Addr(), uintptr(handle), uintptr(unsafe.Pointer(timeouts)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetConsoleCP(cp uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetConsoleCP.Addr(), uintptr(cp))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setConsoleCursorPosition(console Handle, position uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetConsoleCursorPosition.Addr(), uintptr(console), uintptr(position))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetConsoleMode(console Handle, mode uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetConsoleMode.Addr(), uintptr(console), uintptr(mode))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetConsoleOutputCP(cp uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetConsoleOutputCP.Addr(), uintptr(cp))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetCurrentDirectory(path *uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetCurrentDirectoryW.Addr(), uintptr(unsafe.Pointer(path)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetDefaultDllDirectories(directoryFlags uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetDefaultDllDirectories.Addr(), uintptr(directoryFlags))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetDllDirectory(path string) (err error) {\n\tvar _p0 *uint16\n\t_p0, err = syscall.UTF16PtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _SetDllDirectory(_p0)\n}\n\nfunc _SetDllDirectory(path *uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetDllDirectoryW.Addr(), uintptr(unsafe.Pointer(path)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetEndOfFile(handle Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetEndOfFile.Addr(), uintptr(handle))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetEnvironmentVariable(name *uint16, value *uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetEnvironmentVariableW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetErrorMode(mode uint32) (ret uint32) {\n\tr0, _, _ := syscall.SyscallN(procSetErrorMode.Addr(), uintptr(mode))\n\tret = uint32(r0)\n\treturn\n}\n\nfunc SetEvent(event Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetEvent.Addr(), uintptr(event))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetFileAttributes(name *uint16, attrs uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetFileAttributesW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(attrs))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetFileCompletionNotificationModes.Addr(), uintptr(handle), uintptr(flags))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetFileInformationByHandle(handle Handle, class uint32, inBuffer *byte, inBufferLen uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetFileInformationByHandle.Addr(), uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procSetFilePointer.Addr(), uintptr(handle), uintptr(lowoffset), uintptr(unsafe.Pointer(highoffsetptr)), uintptr(whence))\n\tnewlowoffset = uint32(r0)\n\tif newlowoffset == 0xffffffff {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetFileTime.Addr(), uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetFileValidData(handle Handle, validDataLength int64) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetFileValidData.Addr(), uintptr(handle), uintptr(validDataLength))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetHandleInformation.Addr(), uintptr(handle), uintptr(mask), uintptr(flags))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetInformationJobObject(job Handle, JobObjectInformationClass uint32, JobObjectInformation uintptr, JobObjectInformationLength uint32) (ret int, err error) {\n\tr0, _, e1 := syscall.SyscallN(procSetInformationJobObject.Addr(), uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength))\n\tret = int(r0)\n\tif ret == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetNamedPipeHandleState.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetPriorityClass(process Handle, priorityClass uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetPriorityClass.Addr(), uintptr(process), uintptr(priorityClass))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetProcessPriorityBoost(process Handle, disable bool) (err error) {\n\tvar _p0 uint32\n\tif disable {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procSetProcessPriorityBoost.Addr(), uintptr(process), uintptr(_p0))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetProcessShutdownParameters(level uint32, flags uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetProcessShutdownParameters.Addr(), uintptr(level), uintptr(flags))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr, dwMaximumWorkingSetSize uintptr, flags uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetProcessWorkingSetSizeEx.Addr(), uintptr(hProcess), uintptr(dwMinimumWorkingSetSize), uintptr(dwMaximumWorkingSetSize), uintptr(flags))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetStdHandle(stdhandle uint32, handle Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetStdHandle.Addr(), uintptr(stdhandle), uintptr(handle))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetVolumeLabelW.Addr(), uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeName)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetVolumeMountPointW.Addr(), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetupComm(handle Handle, dwInQueue uint32, dwOutQueue uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupComm.Addr(), uintptr(handle), uintptr(dwInQueue), uintptr(dwOutQueue))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SizeofResource(module Handle, resInfo Handle) (size uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procSizeofResource.Addr(), uintptr(module), uintptr(resInfo))\n\tsize = uint32(r0)\n\tif size == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SleepEx(milliseconds uint32, alertable bool) (ret uint32) {\n\tvar _p0 uint32\n\tif alertable {\n\t\t_p0 = 1\n\t}\n\tr0, _, _ := syscall.SyscallN(procSleepEx.Addr(), uintptr(milliseconds), uintptr(_p0))\n\tret = uint32(r0)\n\treturn\n}\n\nfunc TerminateJobObject(job Handle, exitCode uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procTerminateJobObject.Addr(), uintptr(job), uintptr(exitCode))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc TerminateProcess(handle Handle, exitcode uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procTerminateProcess.Addr(), uintptr(handle), uintptr(exitcode))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc Thread32First(snapshot Handle, threadEntry *ThreadEntry32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procThread32First.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc Thread32Next(snapshot Handle, threadEntry *ThreadEntry32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procThread32Next.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc UnlockFileEx(file Handle, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procUnlockFileEx.Addr(), uintptr(file), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc UnmapViewOfFile(addr uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procUnmapViewOfFile.Addr(), uintptr(addr))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc updateProcThreadAttribute(attrlist *ProcThreadAttributeList, flags uint32, attr uintptr, value unsafe.Pointer, size uintptr, prevvalue unsafe.Pointer, returnedsize *uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procUpdateProcThreadAttribute.Addr(), uintptr(unsafe.Pointer(attrlist)), uintptr(flags), uintptr(attr), uintptr(value), uintptr(size), uintptr(prevvalue), uintptr(unsafe.Pointer(returnedsize)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) {\n\tr0, _, e1 := syscall.SyscallN(procVirtualAlloc.Addr(), uintptr(address), uintptr(size), uintptr(alloctype), uintptr(protect))\n\tvalue = uintptr(r0)\n\tif value == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procVirtualFree.Addr(), uintptr(address), uintptr(size), uintptr(freetype))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc VirtualLock(addr uintptr, length uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procVirtualLock.Addr(), uintptr(addr), uintptr(length))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procVirtualProtect.Addr(), uintptr(address), uintptr(size), uintptr(newprotect), uintptr(unsafe.Pointer(oldprotect)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procVirtualProtectEx.Addr(), uintptr(process), uintptr(address), uintptr(size), uintptr(newProtect), uintptr(unsafe.Pointer(oldProtect)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procVirtualQuery.Addr(), uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procVirtualQueryEx.Addr(), uintptr(process), uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc VirtualUnlock(addr uintptr, length uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procVirtualUnlock.Addr(), uintptr(addr), uintptr(length))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WTSGetActiveConsoleSessionId() (sessionID uint32) {\n\tr0, _, _ := syscall.SyscallN(procWTSGetActiveConsoleSessionId.Addr())\n\tsessionID = uint32(r0)\n\treturn\n}\n\nfunc WaitCommEvent(handle Handle, lpEvtMask *uint32, lpOverlapped *Overlapped) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWaitCommEvent.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpEvtMask)), uintptr(unsafe.Pointer(lpOverlapped)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMilliseconds uint32) (event uint32, err error) {\n\tvar _p0 uint32\n\tif waitAll {\n\t\t_p0 = 1\n\t}\n\tr0, _, e1 := syscall.SyscallN(procWaitForMultipleObjects.Addr(), uintptr(count), uintptr(handles), uintptr(_p0), uintptr(waitMilliseconds))\n\tevent = uint32(r0)\n\tif event == 0xffffffff {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procWaitForSingleObject.Addr(), uintptr(handle), uintptr(waitMilliseconds))\n\tevent = uint32(r0)\n\tif event == 0xffffffff {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWriteConsoleW.Addr(), uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(towrite), uintptr(unsafe.Pointer(written)), uintptr(unsafe.Pointer(reserved)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr1, _, e1 := syscall.SyscallN(procWriteFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWriteProcessMemory.Addr(), uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesWritten)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procAcceptEx.Addr(), uintptr(ls), uintptr(as), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(overlapped)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) {\n\tsyscall.SyscallN(procGetAcceptExSockaddrs.Addr(), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(lrsa)), uintptr(unsafe.Pointer(lrsalen)), uintptr(unsafe.Pointer(rrsa)), uintptr(unsafe.Pointer(rrsalen)))\n\treturn\n}\n\nfunc TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procTransmitFile.Addr(), uintptr(s), uintptr(handle), uintptr(bytesToWrite), uintptr(bytsPerSend), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(transmitFileBuf)), uintptr(flags))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc NetApiBufferFree(buf *byte) (neterr error) {\n\tr0, _, _ := syscall.SyscallN(procNetApiBufferFree.Addr(), uintptr(unsafe.Pointer(buf)))\n\tif r0 != 0 {\n\t\tneterr = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) {\n\tr0, _, _ := syscall.SyscallN(procNetGetJoinInformation.Addr(), uintptr(unsafe.Pointer(server)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bufType)))\n\tif r0 != 0 {\n\t\tneterr = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc NetUserEnum(serverName *uint16, level uint32, filter uint32, buf **byte, prefMaxLen uint32, entriesRead *uint32, totalEntries *uint32, resumeHandle *uint32) (neterr error) {\n\tr0, _, _ := syscall.SyscallN(procNetUserEnum.Addr(), uintptr(unsafe.Pointer(serverName)), uintptr(level), uintptr(filter), uintptr(unsafe.Pointer(buf)), uintptr(prefMaxLen), uintptr(unsafe.Pointer(entriesRead)), uintptr(unsafe.Pointer(totalEntries)), uintptr(unsafe.Pointer(resumeHandle)))\n\tif r0 != 0 {\n\t\tneterr = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) {\n\tr0, _, _ := syscall.SyscallN(procNetUserGetInfo.Addr(), uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(userName)), uintptr(level), uintptr(unsafe.Pointer(buf)))\n\tif r0 != 0 {\n\t\tneterr = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, allocationSize *int64, attributes uint32, share uint32, disposition uint32, options uint32, eabuffer uintptr, ealength uint32) (ntstatus error) {\n\tr0, _, _ := syscall.SyscallN(procNtCreateFile.Addr(), uintptr(unsafe.Pointer(handle)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(allocationSize)), uintptr(attributes), uintptr(share), uintptr(disposition), uintptr(options), uintptr(eabuffer), uintptr(ealength))\n\tif r0 != 0 {\n\t\tntstatus = NTStatus(r0)\n\t}\n\treturn\n}\n\nfunc NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (ntstatus error) {\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\tif r0 != 0 {\n\t\tntstatus = NTStatus(r0)\n\t}\n\treturn\n}\n\nfunc NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32, retLen *uint32) (ntstatus error) {\n\tr0, _, _ := syscall.SyscallN(procNtQueryInformationProcess.Addr(), uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), uintptr(unsafe.Pointer(retLen)))\n\tif r0 != 0 {\n\t\tntstatus = NTStatus(r0)\n\t}\n\treturn\n}\n\nfunc NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) {\n\tr0, _, _ := syscall.SyscallN(procNtQuerySystemInformation.Addr(), uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen), uintptr(unsafe.Pointer(retLen)))\n\tif r0 != 0 {\n\t\tntstatus = NTStatus(r0)\n\t}\n\treturn\n}\n\nfunc NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) {\n\tr0, _, _ := syscall.SyscallN(procNtSetInformationFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), uintptr(class))\n\tif r0 != 0 {\n\t\tntstatus = NTStatus(r0)\n\t}\n\treturn\n}\n\nfunc NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) {\n\tr0, _, _ := syscall.SyscallN(procNtSetInformationProcess.Addr(), uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen))\n\tif r0 != 0 {\n\t\tntstatus = NTStatus(r0)\n\t}\n\treturn\n}\n\nfunc NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) {\n\tr0, _, _ := syscall.SyscallN(procNtSetSystemInformation.Addr(), uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen))\n\tif r0 != 0 {\n\t\tntstatus = NTStatus(r0)\n\t}\n\treturn\n}\n\nfunc RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) {\n\tr0, _, _ := syscall.SyscallN(procRtlAddFunctionTable.Addr(), uintptr(unsafe.Pointer(functionTable)), uintptr(entryCount), uintptr(baseAddress))\n\tret = r0 != 0\n\treturn\n}\n\nfunc RtlDefaultNpAcl(acl **ACL) (ntstatus error) {\n\tr0, _, _ := syscall.SyscallN(procRtlDefaultNpAcl.Addr(), uintptr(unsafe.Pointer(acl)))\n\tif r0 != 0 {\n\t\tntstatus = NTStatus(r0)\n\t}\n\treturn\n}\n\nfunc RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) {\n\tr0, _, _ := syscall.SyscallN(procRtlDeleteFunctionTable.Addr(), uintptr(unsafe.Pointer(functionTable)))\n\tret = r0 != 0\n\treturn\n}\n\nfunc RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) {\n\tr0, _, _ := syscall.SyscallN(procRtlDosPathNameToNtPathName_U_WithStatus.Addr(), uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName)))\n\tif r0 != 0 {\n\t\tntstatus = NTStatus(r0)\n\t}\n\treturn\n}\n\nfunc RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) {\n\tr0, _, _ := syscall.SyscallN(procRtlDosPathNameToRelativeNtPathName_U_WithStatus.Addr(), uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName)))\n\tif r0 != 0 {\n\t\tntstatus = NTStatus(r0)\n\t}\n\treturn\n}\n\nfunc RtlGetCurrentPeb() (peb *PEB) {\n\tr0, _, _ := syscall.SyscallN(procRtlGetCurrentPeb.Addr())\n\tpeb = (*PEB)(unsafe.Pointer(r0))\n\treturn\n}\n\nfunc rtlGetNtVersionNumbers(majorVersion *uint32, minorVersion *uint32, buildNumber *uint32) {\n\tsyscall.SyscallN(procRtlGetNtVersionNumbers.Addr(), uintptr(unsafe.Pointer(majorVersion)), uintptr(unsafe.Pointer(minorVersion)), uintptr(unsafe.Pointer(buildNumber)))\n\treturn\n}\n\nfunc rtlGetVersion(info *OsVersionInfoEx) (ntstatus error) {\n\tr0, _, _ := syscall.SyscallN(procRtlGetVersion.Addr(), uintptr(unsafe.Pointer(info)))\n\tif r0 != 0 {\n\t\tntstatus = NTStatus(r0)\n\t}\n\treturn\n}\n\nfunc RtlInitString(destinationString *NTString, sourceString *byte) {\n\tsyscall.SyscallN(procRtlInitString.Addr(), uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString)))\n\treturn\n}\n\nfunc RtlInitUnicodeString(destinationString *NTUnicodeString, sourceString *uint16) {\n\tsyscall.SyscallN(procRtlInitUnicodeString.Addr(), uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString)))\n\treturn\n}\n\nfunc rtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) {\n\tr0, _, _ := syscall.SyscallN(procRtlNtStatusToDosErrorNoTeb.Addr(), uintptr(ntstatus))\n\tret = syscall.Errno(r0)\n\treturn\n}\n\nfunc clsidFromString(lpsz *uint16, pclsid *GUID) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procCLSIDFromString.Addr(), uintptr(unsafe.Pointer(lpsz)), uintptr(unsafe.Pointer(pclsid)))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc coCreateGuid(pguid *GUID) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procCoCreateGuid.Addr(), uintptr(unsafe.Pointer(pguid)))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc CoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable **uintptr) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procCoGetObject.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bindOpts)), uintptr(unsafe.Pointer(guid)), uintptr(unsafe.Pointer(functionTable)))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc CoInitializeEx(reserved uintptr, coInit uint32) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procCoInitializeEx.Addr(), uintptr(reserved), uintptr(coInit))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc CoTaskMemFree(address unsafe.Pointer) {\n\tsyscall.SyscallN(procCoTaskMemFree.Addr(), uintptr(address))\n\treturn\n}\n\nfunc CoUninitialize() {\n\tsyscall.SyscallN(procCoUninitialize.Addr())\n\treturn\n}\n\nfunc stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) {\n\tr0, _, _ := syscall.SyscallN(procStringFromGUID2.Addr(), uintptr(unsafe.Pointer(rguid)), uintptr(unsafe.Pointer(lpsz)), uintptr(cchMax))\n\tchars = int32(r0)\n\treturn\n}\n\nfunc EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procEnumProcessModules.Addr(), uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procEnumProcessModulesEx.Addr(), uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), uintptr(filterFlag))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc enumProcesses(processIds *uint32, nSize uint32, bytesReturned *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procEnumProcesses.Addr(), uintptr(unsafe.Pointer(processIds)), uintptr(nSize), uintptr(unsafe.Pointer(bytesReturned)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetModuleBaseNameW.Addr(), uintptr(process), uintptr(module), uintptr(unsafe.Pointer(baseName)), uintptr(size))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetModuleFileNameExW.Addr(), uintptr(process), uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetModuleInformation.Addr(), uintptr(process), uintptr(module), uintptr(unsafe.Pointer(modinfo)), uintptr(cb))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc QueryWorkingSetEx(process Handle, pv uintptr, cb uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procQueryWorkingSetEx.Addr(), uintptr(process), uintptr(pv), uintptr(cb))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) {\n\tret = procSubscribeServiceChangeNotifications.Find()\n\tif ret != nil {\n\t\treturn\n\t}\n\tr0, _, _ := syscall.SyscallN(procSubscribeServiceChangeNotifications.Addr(), uintptr(service), uintptr(eventType), uintptr(callback), uintptr(callbackCtx), uintptr(unsafe.Pointer(subscription)))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc UnsubscribeServiceChangeNotifications(subscription uintptr) (err error) {\n\terr = procUnsubscribeServiceChangeNotifications.Find()\n\tif err != nil {\n\t\treturn\n\t}\n\tsyscall.SyscallN(procUnsubscribeServiceChangeNotifications.Addr(), uintptr(subscription))\n\treturn\n}\n\nfunc GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetUserNameExW.Addr(), uintptr(nameFormat), uintptr(unsafe.Pointer(nameBuffre)), uintptr(unsafe.Pointer(nSize)))\n\tif r1&0xff == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procTranslateNameW.Addr(), uintptr(unsafe.Pointer(accName)), uintptr(accNameFormat), uintptr(desiredNameFormat), uintptr(unsafe.Pointer(translatedName)), uintptr(unsafe.Pointer(nSize)))\n\tif r1&0xff == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiBuildDriverInfoList.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiCallClassInstaller.Addr(), uintptr(installFunction), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiCancelDriverInfoSearch.Addr(), uintptr(deviceInfoSet))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGuidListSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiClassGuidsFromNameExW.Addr(), uintptr(unsafe.Pointer(className)), uintptr(unsafe.Pointer(classGuidList)), uintptr(classGuidListSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiClassNameFromGuidExW.Addr(), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(className)), uintptr(classNameSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName *uint16, reserved uintptr) (handle DevInfo, err error) {\n\tr0, _, e1 := syscall.SyscallN(procSetupDiCreateDeviceInfoListExW.Addr(), uintptr(unsafe.Pointer(classGUID)), uintptr(hwndParent), uintptr(unsafe.Pointer(machineName)), uintptr(reserved))\n\thandle = DevInfo(r0)\n\tif handle == DevInfo(InvalidHandle) {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUID *GUID, DeviceDescription *uint16, hwndParent uintptr, CreationFlags DICD, deviceInfoData *DevInfoData) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiCreateDeviceInfoW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(DeviceName)), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(DeviceDescription)), uintptr(hwndParent), uintptr(CreationFlags), uintptr(unsafe.Pointer(deviceInfoData)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiDestroyDeviceInfoList.Addr(), uintptr(deviceInfoSet))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiDestroyDriverInfoList.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfoData *DevInfoData) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiEnumDeviceInfo.Addr(), uintptr(deviceInfoSet), uintptr(memberIndex), uintptr(unsafe.Pointer(deviceInfoData)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex uint32, driverInfoData *DrvInfoData) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiEnumDriverInfoW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType), uintptr(memberIndex), uintptr(unsafe.Pointer(driverInfoData)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, deviceInfoSet DevInfo, machineName *uint16, reserved uintptr) (handle DevInfo, err error) {\n\tr0, _, e1 := syscall.SyscallN(procSetupDiGetClassDevsExW.Addr(), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(Enumerator)), uintptr(hwndParent), uintptr(Flags), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(machineName)), uintptr(reserved))\n\thandle = DevInfo(r0)\n\tif handle == DevInfo(InvalidHandle) {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiGetClassInstallParamsW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), uintptr(unsafe.Pointer(requiredSize)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiGetDeviceInfoListDetailW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoSetDetailData)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiGetDeviceInstallParamsW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiGetDeviceInstanceIdW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(instanceId)), uintptr(instanceIdSize), uintptr(unsafe.Pointer(instanceIdRequiredSize)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY, propertyType *DEVPROPTYPE, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32, flags uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiGetDevicePropertyW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(flags))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyRegDataType *uint32, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiGetDeviceRegistryPropertyW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyRegDataType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData, driverInfoDetailData *DrvInfoDetailData, driverInfoDetailDataSize uint32, requiredSize *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiGetDriverInfoDetailW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)), uintptr(unsafe.Pointer(driverInfoDetailData)), uintptr(driverInfoDetailDataSize), uintptr(unsafe.Pointer(requiredSize)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiGetSelectedDevice.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiGetSelectedDriverW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procSetupDiOpenDevRegKey.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(Scope), uintptr(HwProfile), uintptr(KeyType), uintptr(samDesired))\n\tkey = Handle(r0)\n\tif key == InvalidHandle {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiSetClassInstallParamsW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiSetDeviceInstallParamsW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffer *byte, propertyBufferSize uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiSetDeviceRegistryPropertyW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiSetSelectedDevice.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupDiSetSelectedDriverW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetupUninstallOEMInfW.Addr(), uintptr(unsafe.Pointer(infFileName)), uintptr(flags), uintptr(reserved))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc commandLineToArgv(cmd *uint16, argc *int32) (argv **uint16, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCommandLineToArgvW.Addr(), uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc)))\n\targv = (**uint16)(unsafe.Pointer(r0))\n\tif argv == nil {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procSHGetKnownFolderPath.Addr(), uintptr(unsafe.Pointer(id)), uintptr(flags), uintptr(token), uintptr(unsafe.Pointer(path)))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procShellExecuteW.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(verb)), uintptr(unsafe.Pointer(file)), uintptr(unsafe.Pointer(args)), uintptr(unsafe.Pointer(cwd)), uintptr(showCmd))\n\tif r1 <= 32 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc EnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) {\n\tsyscall.SyscallN(procEnumChildWindows.Addr(), uintptr(hwnd), uintptr(enumFunc), uintptr(param))\n\treturn\n}\n\nfunc EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procEnumWindows.Addr(), uintptr(enumFunc), uintptr(param))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ExitWindowsEx(flags uint32, reason uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procExitWindowsEx.Addr(), uintptr(flags), uintptr(reason))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetClassNameW.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(className)), uintptr(maxCount))\n\tcopied = int32(r0)\n\tif copied == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetDesktopWindow() (hwnd HWND) {\n\tr0, _, _ := syscall.SyscallN(procGetDesktopWindow.Addr())\n\thwnd = HWND(r0)\n\treturn\n}\n\nfunc GetForegroundWindow() (hwnd HWND) {\n\tr0, _, _ := syscall.SyscallN(procGetForegroundWindow.Addr())\n\thwnd = HWND(r0)\n\treturn\n}\n\nfunc GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetGUIThreadInfo.Addr(), uintptr(thread), uintptr(unsafe.Pointer(info)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetKeyboardLayout(tid uint32) (hkl Handle) {\n\tr0, _, _ := syscall.SyscallN(procGetKeyboardLayout.Addr(), uintptr(tid))\n\thkl = Handle(r0)\n\treturn\n}\n\nfunc GetShellWindow() (shellWindow HWND) {\n\tr0, _, _ := syscall.SyscallN(procGetShellWindow.Addr())\n\tshellWindow = HWND(r0)\n\treturn\n}\n\nfunc GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetWindowThreadProcessId.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(pid)))\n\ttid = uint32(r0)\n\tif tid == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc IsWindow(hwnd HWND) (isWindow bool) {\n\tr0, _, _ := syscall.SyscallN(procIsWindow.Addr(), uintptr(hwnd))\n\tisWindow = r0 != 0\n\treturn\n}\n\nfunc IsWindowUnicode(hwnd HWND) (isUnicode bool) {\n\tr0, _, _ := syscall.SyscallN(procIsWindowUnicode.Addr(), uintptr(hwnd))\n\tisUnicode = r0 != 0\n\treturn\n}\n\nfunc IsWindowVisible(hwnd HWND) (isVisible bool) {\n\tr0, _, _ := syscall.SyscallN(procIsWindowVisible.Addr(), uintptr(hwnd))\n\tisVisible = r0 != 0\n\treturn\n}\n\nfunc LoadKeyboardLayout(name *uint16, flags uint32) (hkl Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procLoadKeyboardLayoutW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(flags))\n\thkl = Handle(r0)\n\tif hkl == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procMessageBoxW.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype))\n\tret = int32(r0)\n\tif ret == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ToUnicodeEx(vkey uint32, scancode uint32, keystate *byte, pwszBuff *uint16, cchBuff int32, flags uint32, hkl Handle) (ret int32) {\n\tr0, _, _ := syscall.SyscallN(procToUnicodeEx.Addr(), uintptr(vkey), uintptr(scancode), uintptr(unsafe.Pointer(keystate)), uintptr(unsafe.Pointer(pwszBuff)), uintptr(cchBuff), uintptr(flags), uintptr(hkl))\n\tret = int32(r0)\n\treturn\n}\n\nfunc UnloadKeyboardLayout(hkl Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procUnloadKeyboardLayout.Addr(), uintptr(hkl))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) {\n\tvar _p0 uint32\n\tif inheritExisting {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procCreateEnvironmentBlock.Addr(), uintptr(unsafe.Pointer(block)), uintptr(token), uintptr(_p0))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc DestroyEnvironmentBlock(block *uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procDestroyEnvironmentBlock.Addr(), uintptr(unsafe.Pointer(block)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetUserProfileDirectoryW.Addr(), uintptr(t), uintptr(unsafe.Pointer(dir)), uintptr(unsafe.Pointer(dirLen)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32, err error) {\n\tvar _p0 *uint16\n\t_p0, err = syscall.UTF16PtrFromString(filename)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _GetFileVersionInfoSize(_p0, zeroHandle)\n}\n\nfunc _GetFileVersionInfoSize(filename *uint16, zeroHandle *Handle) (bufSize uint32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procGetFileVersionInfoSizeW.Addr(), uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(zeroHandle)))\n\tbufSize = uint32(r0)\n\tif bufSize == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) {\n\tvar _p0 *uint16\n\t_p0, err = syscall.UTF16PtrFromString(filename)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _GetFileVersionInfo(_p0, handle, bufSize, buffer)\n}\n\nfunc _GetFileVersionInfo(filename *uint16, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetFileVersionInfoW.Addr(), uintptr(unsafe.Pointer(filename)), uintptr(handle), uintptr(bufSize), uintptr(buffer))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) {\n\tvar _p0 *uint16\n\t_p0, err = syscall.UTF16PtrFromString(subBlock)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _VerQueryValue(block, _p0, pointerToBufferPointer, bufSize)\n}\n\nfunc _VerQueryValue(block unsafe.Pointer, subBlock *uint16, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procVerQueryValueW.Addr(), uintptr(block), uintptr(unsafe.Pointer(subBlock)), uintptr(pointerToBufferPointer), uintptr(unsafe.Pointer(bufSize)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc TimeBeginPeriod(period uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(proctimeBeginPeriod.Addr(), uintptr(period))\n\tif r1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc TimeEndPeriod(period uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(proctimeEndPeriod.Addr(), uintptr(period))\n\tif r1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) {\n\tr0, _, _ := syscall.SyscallN(procWinVerifyTrustEx.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(actionId)), uintptr(unsafe.Pointer(data)))\n\tif r0 != 0 {\n\t\tret = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc FreeAddrInfoW(addrinfo *AddrinfoW) {\n\tsyscall.SyscallN(procFreeAddrInfoW.Addr(), uintptr(unsafe.Pointer(addrinfo)))\n\treturn\n}\n\nfunc GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) {\n\tr0, _, _ := syscall.SyscallN(procGetAddrInfoW.Addr(), uintptr(unsafe.Pointer(nodename)), uintptr(unsafe.Pointer(servicename)), uintptr(unsafe.Pointer(hints)), uintptr(unsafe.Pointer(result)))\n\tif r0 != 0 {\n\t\tsockerr = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc WSACleanup() (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWSACleanup.Addr())\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WSADuplicateSocket(s Handle, processID uint32, info *WSAProtocolInfo) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWSADuplicateSocketW.Addr(), uintptr(s), uintptr(processID), uintptr(unsafe.Pointer(info)))\n\tif r1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) {\n\tr0, _, e1 := syscall.SyscallN(procWSAEnumProtocolsW.Addr(), uintptr(unsafe.Pointer(protocols)), uintptr(unsafe.Pointer(protocolBuffer)), uintptr(unsafe.Pointer(bufferLength)))\n\tn = int32(r0)\n\tif n == -1 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WSAGetOverlappedResult(h Handle, o *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\nfunc WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWSAIoctl.Addr(), uintptr(s), uintptr(iocc), uintptr(unsafe.Pointer(inbuf)), uintptr(cbif), uintptr(unsafe.Pointer(outbuf)), uintptr(cbob), uintptr(unsafe.Pointer(cbbr)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WSALookupServiceBegin(querySet *WSAQUERYSET, flags uint32, handle *Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWSALookupServiceBeginW.Addr(), uintptr(unsafe.Pointer(querySet)), uintptr(flags), uintptr(unsafe.Pointer(handle)))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WSALookupServiceEnd(handle Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWSALookupServiceEnd.Addr(), uintptr(handle))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WSALookupServiceNext(handle Handle, flags uint32, size *int32, querySet *WSAQUERYSET) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWSALookupServiceNextW.Addr(), uintptr(handle), uintptr(flags), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(querySet)))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWSARecv.Addr(), uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWSARecvFrom.Addr(), uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWSASend.Addr(), uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWSASendTo.Addr(), uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(to)), uintptr(tolen), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procWSASocketW.Addr(), uintptr(af), uintptr(typ), uintptr(protocol), uintptr(unsafe.Pointer(protoInfo)), uintptr(group), uintptr(flags))\n\thandle = Handle(r0)\n\tif handle == InvalidHandle {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WSAStartup(verreq uint32, data *WSAData) (sockerr error) {\n\tr0, _, _ := syscall.SyscallN(procWSAStartup.Addr(), uintptr(verreq), uintptr(unsafe.Pointer(data)))\n\tif r0 != 0 {\n\t\tsockerr = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc bind(s Handle, name unsafe.Pointer, namelen int32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procbind.Addr(), uintptr(s), uintptr(name), uintptr(namelen))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc Closesocket(s Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procclosesocket.Addr(), uintptr(s))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc connect(s Handle, name unsafe.Pointer, namelen int32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procconnect.Addr(), uintptr(s), uintptr(name), uintptr(namelen))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetHostByName(name string) (h *Hostent, err error) {\n\tvar _p0 *byte\n\t_p0, err = syscall.BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _GetHostByName(_p0)\n}\n\nfunc _GetHostByName(name *byte) (h *Hostent, err error) {\n\tr0, _, e1 := syscall.SyscallN(procgethostbyname.Addr(), uintptr(unsafe.Pointer(name)))\n\th = (*Hostent)(unsafe.Pointer(r0))\n\tif h == nil {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procgetpeername.Addr(), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetProtoByName(name string) (p *Protoent, err error) {\n\tvar _p0 *byte\n\t_p0, err = syscall.BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _GetProtoByName(_p0)\n}\n\nfunc _GetProtoByName(name *byte) (p *Protoent, err error) {\n\tr0, _, e1 := syscall.SyscallN(procgetprotobyname.Addr(), uintptr(unsafe.Pointer(name)))\n\tp = (*Protoent)(unsafe.Pointer(r0))\n\tif p == nil {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc GetServByName(name string, proto string) (s *Servent, err error) {\n\tvar _p0 *byte\n\t_p0, err = syscall.BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = syscall.BytePtrFromString(proto)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _GetServByName(_p0, _p1)\n}\n\nfunc _GetServByName(name *byte, proto *byte) (s *Servent, err error) {\n\tr0, _, e1 := syscall.SyscallN(procgetservbyname.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(proto)))\n\ts = (*Servent)(unsafe.Pointer(r0))\n\tif s == nil {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procgetsockname.Addr(), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procgetsockopt.Addr(), uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(unsafe.Pointer(optlen)))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc listen(s Handle, backlog int32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(proclisten.Addr(), uintptr(s), uintptr(backlog))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc Ntohs(netshort uint16) (u uint16) {\n\tr0, _, _ := syscall.SyscallN(procntohs.Addr(), uintptr(netshort))\n\tu = uint16(r0)\n\treturn\n}\n\nfunc recvfrom(s Handle, buf []byte, flags int32, from *RawSockaddrAny, fromlen *int32) (n int32, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, _, e1 := syscall.SyscallN(procrecvfrom.Addr(), uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int32(r0)\n\tif n == -1 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc sendto(s Handle, buf []byte, flags int32, to unsafe.Pointer, tolen int32) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr1, _, e1 := syscall.SyscallN(procsendto.Addr(), uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(tolen))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procsetsockopt.Addr(), uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(optlen))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc shutdown(s Handle, how int32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procshutdown.Addr(), uintptr(s), uintptr(how))\n\tif r1 == socket_error {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc socket(af int32, typ int32, protocol int32) (handle Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procsocket.Addr(), uintptr(af), uintptr(typ), uintptr(protocol))\n\thandle = Handle(r0)\n\tif handle == InvalidHandle {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessions **WTS_SESSION_INFO, count *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWTSEnumerateSessionsW.Addr(), uintptr(handle), uintptr(reserved), uintptr(version), uintptr(unsafe.Pointer(sessions)), uintptr(unsafe.Pointer(count)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc WTSFreeMemory(ptr uintptr) {\n\tsyscall.SyscallN(procWTSFreeMemory.Addr(), uintptr(ptr))\n\treturn\n}\n\nfunc WTSQueryUserToken(session uint32, token *Token) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procWTSQueryUserToken.Addr(), uintptr(session), uintptr(unsafe.Pointer(token)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/LICENSE",
    "content": "Copyright (c) 2018 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/google.golang.org/protobuf/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/google.golang.org/protobuf/encoding/prototext/decode.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 prototext\n\nimport (\n\t\"fmt\"\n\t\"unicode/utf8\"\n\n\t\"google.golang.org/protobuf/internal/encoding/messageset\"\n\t\"google.golang.org/protobuf/internal/encoding/text\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/internal/flags\"\n\t\"google.golang.org/protobuf/internal/genid\"\n\t\"google.golang.org/protobuf/internal/pragma\"\n\t\"google.golang.org/protobuf/internal/set\"\n\t\"google.golang.org/protobuf/internal/strs\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/reflect/protoregistry\"\n)\n\n// Unmarshal reads the given []byte into the given [proto.Message].\n// The provided message must be mutable (e.g., a non-nil pointer to a message).\nfunc Unmarshal(b []byte, m proto.Message) error {\n\treturn UnmarshalOptions{}.Unmarshal(b, m)\n}\n\n// UnmarshalOptions is a configurable textproto format unmarshaler.\ntype UnmarshalOptions struct {\n\tpragma.NoUnkeyedLiterals\n\n\t// AllowPartial accepts input for messages that will result in missing\n\t// required fields. If AllowPartial is false (the default), Unmarshal will\n\t// return error if there are any missing required fields.\n\tAllowPartial bool\n\n\t// DiscardUnknown specifies whether to ignore unknown fields when parsing.\n\t// An unknown field is any field whose field name or field number does not\n\t// resolve to any known or extension field in the message.\n\t// By default, unmarshal rejects unknown fields as an error.\n\tDiscardUnknown bool\n\n\t// Resolver is used for looking up types when unmarshaling\n\t// google.protobuf.Any messages or extension fields.\n\t// If nil, this defaults to using protoregistry.GlobalTypes.\n\tResolver interface {\n\t\tprotoregistry.MessageTypeResolver\n\t\tprotoregistry.ExtensionTypeResolver\n\t}\n}\n\n// Unmarshal reads the given []byte and populates the given [proto.Message]\n// using options in the UnmarshalOptions object.\n// The provided message must be mutable (e.g., a non-nil pointer to a message).\nfunc (o UnmarshalOptions) Unmarshal(b []byte, m proto.Message) error {\n\treturn o.unmarshal(b, m)\n}\n\n// unmarshal is a centralized function that all unmarshal operations go through.\n// For profiling purposes, avoid changing the name of this function or\n// introducing other code paths for unmarshal that do not go through this.\nfunc (o UnmarshalOptions) unmarshal(b []byte, m proto.Message) error {\n\tproto.Reset(m)\n\n\tif o.Resolver == nil {\n\t\to.Resolver = protoregistry.GlobalTypes\n\t}\n\n\tdec := decoder{text.NewDecoder(b), o}\n\tif err := dec.unmarshalMessage(m.ProtoReflect(), false); err != nil {\n\t\treturn err\n\t}\n\tif o.AllowPartial {\n\t\treturn nil\n\t}\n\treturn proto.CheckInitialized(m)\n}\n\ntype decoder struct {\n\t*text.Decoder\n\topts UnmarshalOptions\n}\n\n// newError returns an error object with position info.\nfunc (d decoder) newError(pos int, f string, x ...any) error {\n\tline, column := d.Position(pos)\n\thead := fmt.Sprintf(\"(line %d:%d): \", line, column)\n\treturn errors.New(head+f, x...)\n}\n\n// unexpectedTokenError returns a syntax error for the given unexpected token.\nfunc (d decoder) unexpectedTokenError(tok text.Token) error {\n\treturn d.syntaxError(tok.Pos(), \"unexpected token: %s\", tok.RawString())\n}\n\n// syntaxError returns a syntax error for given position.\nfunc (d decoder) syntaxError(pos int, f string, x ...any) error {\n\tline, column := d.Position(pos)\n\thead := fmt.Sprintf(\"syntax error (line %d:%d): \", line, column)\n\treturn errors.New(head+f, x...)\n}\n\n// unmarshalMessage unmarshals into the given protoreflect.Message.\nfunc (d decoder) unmarshalMessage(m protoreflect.Message, checkDelims bool) error {\n\tmessageDesc := m.Descriptor()\n\tif !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) {\n\t\treturn errors.New(\"no support for proto1 MessageSets\")\n\t}\n\n\tif messageDesc.FullName() == genid.Any_message_fullname {\n\t\treturn d.unmarshalAny(m, checkDelims)\n\t}\n\n\tif checkDelims {\n\t\ttok, err := d.Read()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif tok.Kind() != text.MessageOpen {\n\t\t\treturn d.unexpectedTokenError(tok)\n\t\t}\n\t}\n\n\tvar seenNums set.Ints\n\tvar seenOneofs set.Ints\n\tfieldDescs := messageDesc.Fields()\n\n\tfor {\n\t\t// Read field name.\n\t\ttok, err := d.Read()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch typ := tok.Kind(); typ {\n\t\tcase text.Name:\n\t\t\t// Continue below.\n\t\tcase text.EOF:\n\t\t\tif checkDelims {\n\t\t\t\treturn text.ErrUnexpectedEOF\n\t\t\t}\n\t\t\treturn nil\n\t\tdefault:\n\t\t\tif checkDelims && typ == text.MessageClose {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn d.unexpectedTokenError(tok)\n\t\t}\n\n\t\t// Resolve the field descriptor.\n\t\tvar name protoreflect.Name\n\t\tvar fd protoreflect.FieldDescriptor\n\t\tvar xt protoreflect.ExtensionType\n\t\tvar xtErr error\n\t\tvar isFieldNumberName bool\n\n\t\tswitch tok.NameKind() {\n\t\tcase text.IdentName:\n\t\t\tname = protoreflect.Name(tok.IdentName())\n\t\t\tfd = fieldDescs.ByTextName(string(name))\n\n\t\tcase text.TypeName:\n\t\t\t// Handle extensions only. This code path is not for Any.\n\t\t\txt, xtErr = d.opts.Resolver.FindExtensionByName(protoreflect.FullName(tok.TypeName()))\n\n\t\tcase text.FieldNumber:\n\t\t\tisFieldNumberName = true\n\t\t\tnum := protoreflect.FieldNumber(tok.FieldNumber())\n\t\t\tif !num.IsValid() {\n\t\t\t\treturn d.newError(tok.Pos(), \"invalid field number: %d\", num)\n\t\t\t}\n\t\t\tfd = fieldDescs.ByNumber(num)\n\t\t\tif fd == nil {\n\t\t\t\txt, xtErr = d.opts.Resolver.FindExtensionByNumber(messageDesc.FullName(), num)\n\t\t\t}\n\t\t}\n\n\t\tif xt != nil {\n\t\t\tfd = xt.TypeDescriptor()\n\t\t\tif !messageDesc.ExtensionRanges().Has(fd.Number()) || fd.ContainingMessage().FullName() != messageDesc.FullName() {\n\t\t\t\treturn d.newError(tok.Pos(), \"message %v cannot be extended by %v\", messageDesc.FullName(), fd.FullName())\n\t\t\t}\n\t\t} else if xtErr != nil && xtErr != protoregistry.NotFound {\n\t\t\treturn d.newError(tok.Pos(), \"unable to resolve [%s]: %v\", tok.RawString(), xtErr)\n\t\t}\n\n\t\t// Handle unknown fields.\n\t\tif fd == nil {\n\t\t\tif d.opts.DiscardUnknown || messageDesc.ReservedNames().Has(name) {\n\t\t\t\td.skipValue()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn d.newError(tok.Pos(), \"unknown field: %v\", tok.RawString())\n\t\t}\n\n\t\t// Handle fields identified by field number.\n\t\tif isFieldNumberName {\n\t\t\t// TODO: Add an option to permit parsing field numbers.\n\t\t\t//\n\t\t\t// This requires careful thought as the MarshalOptions.EmitUnknown\n\t\t\t// option allows formatting unknown fields as the field number and the\n\t\t\t// best-effort textual representation of the field value.  In that case,\n\t\t\t// it may not be possible to unmarshal the value from a parser that does\n\t\t\t// have information about the unknown field.\n\t\t\treturn d.newError(tok.Pos(), \"cannot specify field by number: %v\", tok.RawString())\n\t\t}\n\n\t\tswitch {\n\t\tcase fd.IsList():\n\t\t\tkind := fd.Kind()\n\t\t\tif kind != protoreflect.MessageKind && kind != protoreflect.GroupKind && !tok.HasSeparator() {\n\t\t\t\treturn d.syntaxError(tok.Pos(), \"missing field separator :\")\n\t\t\t}\n\n\t\t\tlist := m.Mutable(fd).List()\n\t\t\tif err := d.unmarshalList(fd, list); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\tcase fd.IsMap():\n\t\t\tmmap := m.Mutable(fd).Map()\n\t\t\tif err := d.unmarshalMap(fd, mmap); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\tdefault:\n\t\t\tkind := fd.Kind()\n\t\t\tif kind != protoreflect.MessageKind && kind != protoreflect.GroupKind && !tok.HasSeparator() {\n\t\t\t\treturn d.syntaxError(tok.Pos(), \"missing field separator :\")\n\t\t\t}\n\n\t\t\t// If field is a oneof, check if it has already been set.\n\t\t\tif od := fd.ContainingOneof(); od != nil {\n\t\t\t\tidx := uint64(od.Index())\n\t\t\t\tif seenOneofs.Has(idx) {\n\t\t\t\t\treturn d.newError(tok.Pos(), \"error parsing %q, oneof %v is already set\", tok.RawString(), od.FullName())\n\t\t\t\t}\n\t\t\t\tseenOneofs.Set(idx)\n\t\t\t}\n\n\t\t\tnum := uint64(fd.Number())\n\t\t\tif seenNums.Has(num) {\n\t\t\t\treturn d.newError(tok.Pos(), \"non-repeated field %q is repeated\", tok.RawString())\n\t\t\t}\n\n\t\t\tif err := d.unmarshalSingular(fd, m); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tseenNums.Set(num)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// unmarshalSingular unmarshals a non-repeated field value specified by the\n// given FieldDescriptor.\nfunc (d decoder) unmarshalSingular(fd protoreflect.FieldDescriptor, m protoreflect.Message) error {\n\tvar val protoreflect.Value\n\tvar err error\n\tswitch fd.Kind() {\n\tcase protoreflect.MessageKind, protoreflect.GroupKind:\n\t\tval = m.NewField(fd)\n\t\terr = d.unmarshalMessage(val.Message(), true)\n\tdefault:\n\t\tval, err = d.unmarshalScalar(fd)\n\t}\n\tif err == nil {\n\t\tm.Set(fd, val)\n\t}\n\treturn err\n}\n\n// unmarshalScalar unmarshals a scalar/enum protoreflect.Value specified by the\n// given FieldDescriptor.\nfunc (d decoder) unmarshalScalar(fd protoreflect.FieldDescriptor) (protoreflect.Value, error) {\n\ttok, err := d.Read()\n\tif err != nil {\n\t\treturn protoreflect.Value{}, err\n\t}\n\n\tif tok.Kind() != text.Scalar {\n\t\treturn protoreflect.Value{}, d.unexpectedTokenError(tok)\n\t}\n\n\tkind := fd.Kind()\n\tswitch kind {\n\tcase protoreflect.BoolKind:\n\t\tif b, ok := tok.Bool(); ok {\n\t\t\treturn protoreflect.ValueOfBool(b), nil\n\t\t}\n\n\tcase protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:\n\t\tif n, ok := tok.Int32(); ok {\n\t\t\treturn protoreflect.ValueOfInt32(n), nil\n\t\t}\n\n\tcase protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:\n\t\tif n, ok := tok.Int64(); ok {\n\t\t\treturn protoreflect.ValueOfInt64(n), nil\n\t\t}\n\n\tcase protoreflect.Uint32Kind, protoreflect.Fixed32Kind:\n\t\tif n, ok := tok.Uint32(); ok {\n\t\t\treturn protoreflect.ValueOfUint32(n), nil\n\t\t}\n\n\tcase protoreflect.Uint64Kind, protoreflect.Fixed64Kind:\n\t\tif n, ok := tok.Uint64(); ok {\n\t\t\treturn protoreflect.ValueOfUint64(n), nil\n\t\t}\n\n\tcase protoreflect.FloatKind:\n\t\tif n, ok := tok.Float32(); ok {\n\t\t\treturn protoreflect.ValueOfFloat32(n), nil\n\t\t}\n\n\tcase protoreflect.DoubleKind:\n\t\tif n, ok := tok.Float64(); ok {\n\t\t\treturn protoreflect.ValueOfFloat64(n), nil\n\t\t}\n\n\tcase protoreflect.StringKind:\n\t\tif s, ok := tok.String(); ok {\n\t\t\tif strs.EnforceUTF8(fd) && !utf8.ValidString(s) {\n\t\t\t\treturn protoreflect.Value{}, d.newError(tok.Pos(), \"contains invalid UTF-8\")\n\t\t\t}\n\t\t\treturn protoreflect.ValueOfString(s), nil\n\t\t}\n\n\tcase protoreflect.BytesKind:\n\t\tif b, ok := tok.String(); ok {\n\t\t\treturn protoreflect.ValueOfBytes([]byte(b)), nil\n\t\t}\n\n\tcase protoreflect.EnumKind:\n\t\tif lit, ok := tok.Enum(); ok {\n\t\t\t// Lookup EnumNumber based on name.\n\t\t\tif enumVal := fd.Enum().Values().ByName(protoreflect.Name(lit)); enumVal != nil {\n\t\t\t\treturn protoreflect.ValueOfEnum(enumVal.Number()), nil\n\t\t\t}\n\t\t}\n\t\tif num, ok := tok.Int32(); ok {\n\t\t\treturn protoreflect.ValueOfEnum(protoreflect.EnumNumber(num)), nil\n\t\t}\n\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"invalid scalar kind %v\", kind))\n\t}\n\n\treturn protoreflect.Value{}, d.newError(tok.Pos(), \"invalid value for %v type: %v\", kind, tok.RawString())\n}\n\n// unmarshalList unmarshals into given protoreflect.List. A list value can\n// either be in [] syntax or simply just a single scalar/message value.\nfunc (d decoder) unmarshalList(fd protoreflect.FieldDescriptor, list protoreflect.List) error {\n\ttok, err := d.Peek()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch fd.Kind() {\n\tcase protoreflect.MessageKind, protoreflect.GroupKind:\n\t\tswitch tok.Kind() {\n\t\tcase text.ListOpen:\n\t\t\td.Read()\n\t\t\tfor {\n\t\t\t\ttok, err := d.Peek()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\n\t\t\t\tswitch tok.Kind() {\n\t\t\t\tcase text.ListClose:\n\t\t\t\t\td.Read()\n\t\t\t\t\treturn nil\n\t\t\t\tcase text.MessageOpen:\n\t\t\t\t\tpval := list.NewElement()\n\t\t\t\t\tif err := d.unmarshalMessage(pval.Message(), true); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tlist.Append(pval)\n\t\t\t\tdefault:\n\t\t\t\t\treturn d.unexpectedTokenError(tok)\n\t\t\t\t}\n\t\t\t}\n\n\t\tcase text.MessageOpen:\n\t\t\tpval := list.NewElement()\n\t\t\tif err := d.unmarshalMessage(pval.Message(), true); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tlist.Append(pval)\n\t\t\treturn nil\n\t\t}\n\n\tdefault:\n\t\tswitch tok.Kind() {\n\t\tcase text.ListOpen:\n\t\t\td.Read()\n\t\t\tfor {\n\t\t\t\ttok, err := d.Peek()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\n\t\t\t\tswitch tok.Kind() {\n\t\t\t\tcase text.ListClose:\n\t\t\t\t\td.Read()\n\t\t\t\t\treturn nil\n\t\t\t\tcase text.Scalar:\n\t\t\t\t\tpval, err := d.unmarshalScalar(fd)\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\tlist.Append(pval)\n\t\t\t\tdefault:\n\t\t\t\t\treturn d.unexpectedTokenError(tok)\n\t\t\t\t}\n\t\t\t}\n\n\t\tcase text.Scalar:\n\t\t\tpval, err := d.unmarshalScalar(fd)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tlist.Append(pval)\n\t\t\treturn nil\n\t\t}\n\t}\n\n\treturn d.unexpectedTokenError(tok)\n}\n\n// unmarshalMap unmarshals into given protoreflect.Map. A map value is a\n// textproto message containing {key: <kvalue>, value: <mvalue>}.\nfunc (d decoder) unmarshalMap(fd protoreflect.FieldDescriptor, mmap protoreflect.Map) error {\n\t// Determine ahead whether map entry is a scalar type or a message type in\n\t// order to call the appropriate unmarshalMapValue func inside\n\t// unmarshalMapEntry.\n\tvar unmarshalMapValue func() (protoreflect.Value, error)\n\tswitch fd.MapValue().Kind() {\n\tcase protoreflect.MessageKind, protoreflect.GroupKind:\n\t\tunmarshalMapValue = func() (protoreflect.Value, error) {\n\t\t\tpval := mmap.NewValue()\n\t\t\tif err := d.unmarshalMessage(pval.Message(), true); err != nil {\n\t\t\t\treturn protoreflect.Value{}, err\n\t\t\t}\n\t\t\treturn pval, nil\n\t\t}\n\tdefault:\n\t\tunmarshalMapValue = func() (protoreflect.Value, error) {\n\t\t\treturn d.unmarshalScalar(fd.MapValue())\n\t\t}\n\t}\n\n\ttok, err := d.Read()\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch tok.Kind() {\n\tcase text.MessageOpen:\n\t\treturn d.unmarshalMapEntry(fd, mmap, unmarshalMapValue)\n\n\tcase text.ListOpen:\n\t\tfor {\n\t\t\ttok, err := d.Read()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tswitch tok.Kind() {\n\t\t\tcase text.ListClose:\n\t\t\t\treturn nil\n\t\t\tcase text.MessageOpen:\n\t\t\t\tif err := d.unmarshalMapEntry(fd, mmap, unmarshalMapValue); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn d.unexpectedTokenError(tok)\n\t\t\t}\n\t\t}\n\n\tdefault:\n\t\treturn d.unexpectedTokenError(tok)\n\t}\n}\n\n// unmarshalMap unmarshals into given protoreflect.Map. A map value is a\n// textproto message containing {key: <kvalue>, value: <mvalue>}.\nfunc (d decoder) unmarshalMapEntry(fd protoreflect.FieldDescriptor, mmap protoreflect.Map, unmarshalMapValue func() (protoreflect.Value, error)) error {\n\tvar key protoreflect.MapKey\n\tvar pval protoreflect.Value\nLoop:\n\tfor {\n\t\t// Read field name.\n\t\ttok, err := d.Read()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch tok.Kind() {\n\t\tcase text.Name:\n\t\t\tif tok.NameKind() != text.IdentName {\n\t\t\t\tif !d.opts.DiscardUnknown {\n\t\t\t\t\treturn d.newError(tok.Pos(), \"unknown map entry field %q\", tok.RawString())\n\t\t\t\t}\n\t\t\t\td.skipValue()\n\t\t\t\tcontinue Loop\n\t\t\t}\n\t\t\t// Continue below.\n\t\tcase text.MessageClose:\n\t\t\tbreak Loop\n\t\tdefault:\n\t\t\treturn d.unexpectedTokenError(tok)\n\t\t}\n\n\t\tswitch name := protoreflect.Name(tok.IdentName()); name {\n\t\tcase genid.MapEntry_Key_field_name:\n\t\t\tif !tok.HasSeparator() {\n\t\t\t\treturn d.syntaxError(tok.Pos(), \"missing field separator :\")\n\t\t\t}\n\t\t\tif key.IsValid() {\n\t\t\t\treturn d.newError(tok.Pos(), \"map entry %q cannot be repeated\", name)\n\t\t\t}\n\t\t\tval, err := d.unmarshalScalar(fd.MapKey())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tkey = val.MapKey()\n\n\t\tcase genid.MapEntry_Value_field_name:\n\t\t\tif kind := fd.MapValue().Kind(); (kind != protoreflect.MessageKind) && (kind != protoreflect.GroupKind) {\n\t\t\t\tif !tok.HasSeparator() {\n\t\t\t\t\treturn d.syntaxError(tok.Pos(), \"missing field separator :\")\n\t\t\t\t}\n\t\t\t}\n\t\t\tif pval.IsValid() {\n\t\t\t\treturn d.newError(tok.Pos(), \"map entry %q cannot be repeated\", name)\n\t\t\t}\n\t\t\tpval, err = unmarshalMapValue()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\tdefault:\n\t\t\tif !d.opts.DiscardUnknown {\n\t\t\t\treturn d.newError(tok.Pos(), \"unknown map entry field %q\", name)\n\t\t\t}\n\t\t\td.skipValue()\n\t\t}\n\t}\n\n\tif !key.IsValid() {\n\t\tkey = fd.MapKey().Default().MapKey()\n\t}\n\tif !pval.IsValid() {\n\t\tswitch fd.MapValue().Kind() {\n\t\tcase protoreflect.MessageKind, protoreflect.GroupKind:\n\t\t\t// If value field is not set for message/group types, construct an\n\t\t\t// empty one as default.\n\t\t\tpval = mmap.NewValue()\n\t\tdefault:\n\t\t\tpval = fd.MapValue().Default()\n\t\t}\n\t}\n\tmmap.Set(key, pval)\n\treturn nil\n}\n\n// unmarshalAny unmarshals an Any textproto. It can either be in expanded form\n// or non-expanded form.\nfunc (d decoder) unmarshalAny(m protoreflect.Message, checkDelims bool) error {\n\tvar typeURL string\n\tvar bValue []byte\n\tvar seenTypeUrl bool\n\tvar seenValue bool\n\tvar isExpanded bool\n\n\tif checkDelims {\n\t\ttok, err := d.Read()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif tok.Kind() != text.MessageOpen {\n\t\t\treturn d.unexpectedTokenError(tok)\n\t\t}\n\t}\n\nLoop:\n\tfor {\n\t\t// Read field name. Can only have 3 possible field names, i.e. type_url,\n\t\t// value and type URL name inside [].\n\t\ttok, err := d.Read()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif typ := tok.Kind(); typ != text.Name {\n\t\t\tif checkDelims {\n\t\t\t\tif typ == text.MessageClose {\n\t\t\t\t\tbreak Loop\n\t\t\t\t}\n\t\t\t} else if typ == text.EOF {\n\t\t\t\tbreak Loop\n\t\t\t}\n\t\t\treturn d.unexpectedTokenError(tok)\n\t\t}\n\n\t\tswitch tok.NameKind() {\n\t\tcase text.IdentName:\n\t\t\t// Both type_url and value fields require field separator :.\n\t\t\tif !tok.HasSeparator() {\n\t\t\t\treturn d.syntaxError(tok.Pos(), \"missing field separator :\")\n\t\t\t}\n\n\t\t\tswitch name := protoreflect.Name(tok.IdentName()); name {\n\t\t\tcase genid.Any_TypeUrl_field_name:\n\t\t\t\tif seenTypeUrl {\n\t\t\t\t\treturn d.newError(tok.Pos(), \"duplicate %v field\", genid.Any_TypeUrl_field_fullname)\n\t\t\t\t}\n\t\t\t\tif isExpanded {\n\t\t\t\t\treturn d.newError(tok.Pos(), \"conflict with [%s] field\", typeURL)\n\t\t\t\t}\n\t\t\t\ttok, err := d.Read()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tvar ok bool\n\t\t\t\ttypeURL, ok = tok.String()\n\t\t\t\tif !ok {\n\t\t\t\t\treturn d.newError(tok.Pos(), \"invalid %v field value: %v\", genid.Any_TypeUrl_field_fullname, tok.RawString())\n\t\t\t\t}\n\t\t\t\tseenTypeUrl = true\n\n\t\t\tcase genid.Any_Value_field_name:\n\t\t\t\tif seenValue {\n\t\t\t\t\treturn d.newError(tok.Pos(), \"duplicate %v field\", genid.Any_Value_field_fullname)\n\t\t\t\t}\n\t\t\t\tif isExpanded {\n\t\t\t\t\treturn d.newError(tok.Pos(), \"conflict with [%s] field\", typeURL)\n\t\t\t\t}\n\t\t\t\ttok, err := d.Read()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\ts, ok := tok.String()\n\t\t\t\tif !ok {\n\t\t\t\t\treturn d.newError(tok.Pos(), \"invalid %v field value: %v\", genid.Any_Value_field_fullname, tok.RawString())\n\t\t\t\t}\n\t\t\t\tbValue = []byte(s)\n\t\t\t\tseenValue = true\n\n\t\t\tdefault:\n\t\t\t\tif !d.opts.DiscardUnknown {\n\t\t\t\t\treturn d.newError(tok.Pos(), \"invalid field name %q in %v message\", tok.RawString(), genid.Any_message_fullname)\n\t\t\t\t}\n\t\t\t}\n\n\t\tcase text.TypeName:\n\t\t\tif isExpanded {\n\t\t\t\treturn d.newError(tok.Pos(), \"cannot have more than one type\")\n\t\t\t}\n\t\t\tif seenTypeUrl {\n\t\t\t\treturn d.newError(tok.Pos(), \"conflict with type_url field\")\n\t\t\t}\n\t\t\ttypeURL = tok.TypeName()\n\t\t\tvar err error\n\t\t\tbValue, err = d.unmarshalExpandedAny(typeURL, tok.Pos())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tisExpanded = true\n\n\t\tdefault:\n\t\t\tif !d.opts.DiscardUnknown {\n\t\t\t\treturn d.newError(tok.Pos(), \"invalid field name %q in %v message\", tok.RawString(), genid.Any_message_fullname)\n\t\t\t}\n\t\t}\n\t}\n\n\tfds := m.Descriptor().Fields()\n\tif len(typeURL) > 0 {\n\t\tm.Set(fds.ByNumber(genid.Any_TypeUrl_field_number), protoreflect.ValueOfString(typeURL))\n\t}\n\tif len(bValue) > 0 {\n\t\tm.Set(fds.ByNumber(genid.Any_Value_field_number), protoreflect.ValueOfBytes(bValue))\n\t}\n\treturn nil\n}\n\nfunc (d decoder) unmarshalExpandedAny(typeURL string, pos int) ([]byte, error) {\n\tmt, err := d.opts.Resolver.FindMessageByURL(typeURL)\n\tif err != nil {\n\t\treturn nil, d.newError(pos, \"unable to resolve message [%v]: %v\", typeURL, err)\n\t}\n\t// Create new message for the embedded message type and unmarshal the value\n\t// field into it.\n\tm := mt.New()\n\tif err := d.unmarshalMessage(m, true); err != nil {\n\t\treturn nil, err\n\t}\n\t// Serialize the embedded message and return the resulting bytes.\n\tb, err := proto.MarshalOptions{\n\t\tAllowPartial:  true, // Never check required fields inside an Any.\n\t\tDeterministic: true,\n\t}.Marshal(m.Interface())\n\tif err != nil {\n\t\treturn nil, d.newError(pos, \"error in marshaling message into Any.value: %v\", err)\n\t}\n\treturn b, nil\n}\n\n// skipValue makes the decoder parse a field value in order to advance the read\n// to the next field. It relies on Read returning an error if the types are not\n// in valid sequence.\nfunc (d decoder) skipValue() error {\n\ttok, err := d.Read()\n\tif err != nil {\n\t\treturn err\n\t}\n\t// Only need to continue reading for messages and lists.\n\tswitch tok.Kind() {\n\tcase text.MessageOpen:\n\t\treturn d.skipMessageValue()\n\n\tcase text.ListOpen:\n\t\tfor {\n\t\t\ttok, err := d.Read()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tswitch tok.Kind() {\n\t\t\tcase text.ListClose:\n\t\t\t\treturn nil\n\t\t\tcase text.MessageOpen:\n\t\t\t\tif err := d.skipMessageValue(); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\t// Skip items. This will not validate whether skipped values are\n\t\t\t\t// of the same type or not, same behavior as C++\n\t\t\t\t// TextFormat::Parser::AllowUnknownField(true) version 3.8.0.\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// skipMessageValue makes the decoder parse and skip over all fields in a\n// message. It assumes that the previous read type is MessageOpen.\nfunc (d decoder) skipMessageValue() error {\n\tfor {\n\t\ttok, err := d.Read()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch tok.Kind() {\n\t\tcase text.MessageClose:\n\t\t\treturn nil\n\t\tcase text.Name:\n\t\t\tif err := d.skipValue(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/encoding/prototext/doc.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 prototext marshals and unmarshals protocol buffer messages as the\n// textproto format.\npackage prototext\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/encoding/prototext/encode.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 prototext\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"unicode/utf8\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/encoding/messageset\"\n\t\"google.golang.org/protobuf/internal/encoding/text\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/internal/flags\"\n\t\"google.golang.org/protobuf/internal/genid\"\n\t\"google.golang.org/protobuf/internal/order\"\n\t\"google.golang.org/protobuf/internal/pragma\"\n\t\"google.golang.org/protobuf/internal/strs\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/reflect/protoregistry\"\n)\n\nconst defaultIndent = \"  \"\n\n// Format formats the message as a multiline string.\n// This function is only intended for human consumption and ignores errors.\n// Do not depend on the output being stable. Its output will change across\n// different builds of your program, even when using the same version of the\n// protobuf module.\nfunc Format(m proto.Message) string {\n\treturn MarshalOptions{Multiline: true}.Format(m)\n}\n\n// Marshal writes the given [proto.Message] in textproto format using default\n// options. Do not depend on the output being stable. Its output will change\n// across different builds of your program, even when using the same version of\n// the protobuf module.\nfunc Marshal(m proto.Message) ([]byte, error) {\n\treturn MarshalOptions{}.Marshal(m)\n}\n\n// MarshalOptions is a configurable text format marshaler.\ntype MarshalOptions struct {\n\tpragma.NoUnkeyedLiterals\n\n\t// Multiline specifies whether the marshaler should format the output in\n\t// indented-form with every textual element on a new line.\n\t// If Indent is an empty string, then an arbitrary indent is chosen.\n\tMultiline bool\n\n\t// Indent specifies the set of indentation characters to use in a multiline\n\t// formatted output such that every entry is preceded by Indent and\n\t// terminated by a newline. If non-empty, then Multiline is treated as true.\n\t// Indent can only be composed of space or tab characters.\n\tIndent string\n\n\t// EmitASCII specifies whether to format strings and bytes as ASCII only\n\t// as opposed to using UTF-8 encoding when possible.\n\tEmitASCII bool\n\n\t// allowInvalidUTF8 specifies whether to permit the encoding of strings\n\t// with invalid UTF-8. This is unexported as it is intended to only\n\t// be specified by the Format method.\n\tallowInvalidUTF8 bool\n\n\t// AllowPartial allows messages that have missing required fields to marshal\n\t// without returning an error. If AllowPartial is false (the default),\n\t// Marshal will return error if there are any missing required fields.\n\tAllowPartial bool\n\n\t// EmitUnknown specifies whether to emit unknown fields in the output.\n\t// If specified, the unmarshaler may be unable to parse the output.\n\t// The default is to exclude unknown fields.\n\tEmitUnknown bool\n\n\t// Resolver is used for looking up types when expanding google.protobuf.Any\n\t// messages. If nil, this defaults to using protoregistry.GlobalTypes.\n\tResolver interface {\n\t\tprotoregistry.ExtensionTypeResolver\n\t\tprotoregistry.MessageTypeResolver\n\t}\n}\n\n// Format formats the message as a string.\n// This method is only intended for human consumption and ignores errors.\n// Do not depend on the output being stable. Its output will change across\n// different builds of your program, even when using the same version of the\n// protobuf module.\nfunc (o MarshalOptions) Format(m proto.Message) string {\n\tif m == nil || !m.ProtoReflect().IsValid() {\n\t\treturn \"<nil>\" // invalid syntax, but okay since this is for debugging\n\t}\n\to.allowInvalidUTF8 = true\n\to.AllowPartial = true\n\to.EmitUnknown = true\n\tb, _ := o.Marshal(m)\n\treturn string(b)\n}\n\n// Marshal writes the given [proto.Message] in textproto format using options in\n// MarshalOptions object. Do not depend on the output being stable. Its output\n// will change across different builds of your program, even when using the\n// same version of the protobuf module.\nfunc (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) {\n\treturn o.marshal(nil, m)\n}\n\n// MarshalAppend appends the textproto format encoding of m to b,\n// returning the result.\nfunc (o MarshalOptions) MarshalAppend(b []byte, m proto.Message) ([]byte, error) {\n\treturn o.marshal(b, m)\n}\n\n// marshal is a centralized function that all marshal operations go through.\n// For profiling purposes, avoid changing the name of this function or\n// introducing other code paths for marshal that do not go through this.\nfunc (o MarshalOptions) marshal(b []byte, m proto.Message) ([]byte, error) {\n\tvar delims = [2]byte{'{', '}'}\n\n\tif o.Multiline && o.Indent == \"\" {\n\t\to.Indent = defaultIndent\n\t}\n\tif o.Resolver == nil {\n\t\to.Resolver = protoregistry.GlobalTypes\n\t}\n\n\tinternalEnc, err := text.NewEncoder(b, o.Indent, delims, o.EmitASCII)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Treat nil message interface as an empty message,\n\t// in which case there is nothing to output.\n\tif m == nil {\n\t\treturn b, nil\n\t}\n\n\tenc := encoder{internalEnc, o}\n\terr = enc.marshalMessage(m.ProtoReflect(), false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tout := enc.Bytes()\n\tif len(o.Indent) > 0 && len(out) > 0 {\n\t\tout = append(out, '\\n')\n\t}\n\tif o.AllowPartial {\n\t\treturn out, nil\n\t}\n\treturn out, proto.CheckInitialized(m)\n}\n\ntype encoder struct {\n\t*text.Encoder\n\topts MarshalOptions\n}\n\n// marshalMessage marshals the given protoreflect.Message.\nfunc (e encoder) marshalMessage(m protoreflect.Message, inclDelims bool) error {\n\tmessageDesc := m.Descriptor()\n\tif !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) {\n\t\treturn errors.New(\"no support for proto1 MessageSets\")\n\t}\n\n\tif inclDelims {\n\t\te.StartMessage()\n\t\tdefer e.EndMessage()\n\t}\n\n\t// Handle Any expansion.\n\tif messageDesc.FullName() == genid.Any_message_fullname {\n\t\tif e.marshalAny(m) {\n\t\t\treturn nil\n\t\t}\n\t\t// If unable to expand, continue on to marshal Any as a regular message.\n\t}\n\n\t// Marshal fields.\n\tvar err error\n\torder.RangeFields(m, order.IndexNameFieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {\n\t\tif err = e.marshalField(fd.TextName(), v, fd); err != nil {\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Marshal unknown fields.\n\tif e.opts.EmitUnknown {\n\t\te.marshalUnknown(m.GetUnknown())\n\t}\n\n\treturn nil\n}\n\n// marshalField marshals the given field with protoreflect.Value.\nfunc (e encoder) marshalField(name string, val protoreflect.Value, fd protoreflect.FieldDescriptor) error {\n\tswitch {\n\tcase fd.IsList():\n\t\treturn e.marshalList(name, val.List(), fd)\n\tcase fd.IsMap():\n\t\treturn e.marshalMap(name, val.Map(), fd)\n\tdefault:\n\t\te.WriteName(name)\n\t\treturn e.marshalSingular(val, fd)\n\t}\n}\n\n// marshalSingular marshals the given non-repeated field value. This includes\n// all scalar types, enums, messages, and groups.\nfunc (e encoder) marshalSingular(val protoreflect.Value, fd protoreflect.FieldDescriptor) error {\n\tkind := fd.Kind()\n\tswitch kind {\n\tcase protoreflect.BoolKind:\n\t\te.WriteBool(val.Bool())\n\n\tcase protoreflect.StringKind:\n\t\ts := val.String()\n\t\tif !e.opts.allowInvalidUTF8 && strs.EnforceUTF8(fd) && !utf8.ValidString(s) {\n\t\t\treturn errors.InvalidUTF8(string(fd.FullName()))\n\t\t}\n\t\te.WriteString(s)\n\n\tcase protoreflect.Int32Kind, protoreflect.Int64Kind,\n\t\tprotoreflect.Sint32Kind, protoreflect.Sint64Kind,\n\t\tprotoreflect.Sfixed32Kind, protoreflect.Sfixed64Kind:\n\t\te.WriteInt(val.Int())\n\n\tcase protoreflect.Uint32Kind, protoreflect.Uint64Kind,\n\t\tprotoreflect.Fixed32Kind, protoreflect.Fixed64Kind:\n\t\te.WriteUint(val.Uint())\n\n\tcase protoreflect.FloatKind:\n\t\t// Encoder.WriteFloat handles the special numbers NaN and infinites.\n\t\te.WriteFloat(val.Float(), 32)\n\n\tcase protoreflect.DoubleKind:\n\t\t// Encoder.WriteFloat handles the special numbers NaN and infinites.\n\t\te.WriteFloat(val.Float(), 64)\n\n\tcase protoreflect.BytesKind:\n\t\te.WriteString(string(val.Bytes()))\n\n\tcase protoreflect.EnumKind:\n\t\tnum := val.Enum()\n\t\tif desc := fd.Enum().Values().ByNumber(num); desc != nil {\n\t\t\te.WriteLiteral(string(desc.Name()))\n\t\t} else {\n\t\t\t// Use numeric value if there is no enum description.\n\t\t\te.WriteInt(int64(num))\n\t\t}\n\n\tcase protoreflect.MessageKind, protoreflect.GroupKind:\n\t\treturn e.marshalMessage(val.Message(), true)\n\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"%v has unknown kind: %v\", fd.FullName(), kind))\n\t}\n\treturn nil\n}\n\n// marshalList marshals the given protoreflect.List as multiple name-value fields.\nfunc (e encoder) marshalList(name string, list protoreflect.List, fd protoreflect.FieldDescriptor) error {\n\tsize := list.Len()\n\tfor i := 0; i < size; i++ {\n\t\te.WriteName(name)\n\t\tif err := e.marshalSingular(list.Get(i), fd); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// marshalMap marshals the given protoreflect.Map as multiple name-value fields.\nfunc (e encoder) marshalMap(name string, mmap protoreflect.Map, fd protoreflect.FieldDescriptor) error {\n\tvar err error\n\torder.RangeEntries(mmap, order.GenericKeyOrder, func(key protoreflect.MapKey, val protoreflect.Value) bool {\n\t\te.WriteName(name)\n\t\te.StartMessage()\n\t\tdefer e.EndMessage()\n\n\t\te.WriteName(string(genid.MapEntry_Key_field_name))\n\t\terr = e.marshalSingular(key.Value(), fd.MapKey())\n\t\tif err != nil {\n\t\t\treturn false\n\t\t}\n\n\t\te.WriteName(string(genid.MapEntry_Value_field_name))\n\t\terr = e.marshalSingular(val, fd.MapValue())\n\t\tif err != nil {\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t})\n\treturn err\n}\n\n// marshalUnknown parses the given []byte and marshals fields out.\n// This function assumes proper encoding in the given []byte.\nfunc (e encoder) marshalUnknown(b []byte) {\n\tconst dec = 10\n\tconst hex = 16\n\tfor len(b) > 0 {\n\t\tnum, wtype, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\te.WriteName(strconv.FormatInt(int64(num), dec))\n\n\t\tswitch wtype {\n\t\tcase protowire.VarintType:\n\t\t\tvar v uint64\n\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\te.WriteUint(v)\n\t\tcase protowire.Fixed32Type:\n\t\t\tvar v uint32\n\t\t\tv, n = protowire.ConsumeFixed32(b)\n\t\t\te.WriteLiteral(\"0x\" + strconv.FormatUint(uint64(v), hex))\n\t\tcase protowire.Fixed64Type:\n\t\t\tvar v uint64\n\t\t\tv, n = protowire.ConsumeFixed64(b)\n\t\t\te.WriteLiteral(\"0x\" + strconv.FormatUint(v, hex))\n\t\tcase protowire.BytesType:\n\t\t\tvar v []byte\n\t\t\tv, n = protowire.ConsumeBytes(b)\n\t\t\te.WriteString(string(v))\n\t\tcase protowire.StartGroupType:\n\t\t\te.StartMessage()\n\t\t\tvar v []byte\n\t\t\tv, n = protowire.ConsumeGroup(num, b)\n\t\t\te.marshalUnknown(v)\n\t\t\te.EndMessage()\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"prototext: error parsing unknown field wire type: %v\", wtype))\n\t\t}\n\n\t\tb = b[n:]\n\t}\n}\n\n// marshalAny marshals the given google.protobuf.Any message in expanded form.\n// It returns true if it was able to marshal, else false.\nfunc (e encoder) marshalAny(any protoreflect.Message) bool {\n\t// Construct the embedded message.\n\tfds := any.Descriptor().Fields()\n\tfdType := fds.ByNumber(genid.Any_TypeUrl_field_number)\n\ttypeURL := any.Get(fdType).String()\n\tmt, err := e.opts.Resolver.FindMessageByURL(typeURL)\n\tif err != nil {\n\t\treturn false\n\t}\n\tm := mt.New().Interface()\n\n\t// Unmarshal bytes into embedded message.\n\tfdValue := fds.ByNumber(genid.Any_Value_field_number)\n\tvalue := any.Get(fdValue)\n\terr = proto.UnmarshalOptions{\n\t\tAllowPartial: true,\n\t\tResolver:     e.opts.Resolver,\n\t}.Unmarshal(value.Bytes(), m)\n\tif err != nil {\n\t\treturn false\n\t}\n\n\t// Get current encoder position. If marshaling fails, reset encoder output\n\t// back to this position.\n\tpos := e.Snapshot()\n\n\t// Field name is the proto field name enclosed in [].\n\te.WriteName(\"[\" + typeURL + \"]\")\n\terr = e.marshalMessage(m.ProtoReflect(), true)\n\tif err != nil {\n\t\te.Reset(pos)\n\t\treturn false\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/encoding/protowire/wire.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 protowire parses and formats the raw wire encoding.\n// See https://protobuf.dev/programming-guides/encoding.\n//\n// For marshaling and unmarshaling entire protobuf messages,\n// use the [google.golang.org/protobuf/proto] package instead.\npackage protowire\n\nimport (\n\t\"io\"\n\t\"math\"\n\t\"math/bits\"\n\n\t\"google.golang.org/protobuf/internal/errors\"\n)\n\n// Number represents the field number.\ntype Number int32\n\nconst (\n\tMinValidNumber        Number = 1\n\tFirstReservedNumber   Number = 19000\n\tLastReservedNumber    Number = 19999\n\tMaxValidNumber        Number = 1<<29 - 1\n\tDefaultRecursionLimit        = 10000\n)\n\n// IsValid reports whether the field number is semantically valid.\nfunc (n Number) IsValid() bool {\n\treturn MinValidNumber <= n && n <= MaxValidNumber\n}\n\n// Type represents the wire type.\ntype Type int8\n\nconst (\n\tVarintType     Type = 0\n\tFixed32Type    Type = 5\n\tFixed64Type    Type = 1\n\tBytesType      Type = 2\n\tStartGroupType Type = 3\n\tEndGroupType   Type = 4\n)\n\nconst (\n\t_ = -iota\n\terrCodeTruncated\n\terrCodeFieldNumber\n\terrCodeOverflow\n\terrCodeReserved\n\terrCodeEndGroup\n\terrCodeRecursionDepth\n)\n\nvar (\n\terrFieldNumber = errors.New(\"invalid field number\")\n\terrOverflow    = errors.New(\"variable length integer overflow\")\n\terrReserved    = errors.New(\"cannot parse reserved wire type\")\n\terrEndGroup    = errors.New(\"mismatching end group marker\")\n\terrParse       = errors.New(\"parse error\")\n)\n\n// ParseError converts an error code into an error value.\n// This returns nil if n is a non-negative number.\nfunc ParseError(n int) error {\n\tif n >= 0 {\n\t\treturn nil\n\t}\n\tswitch n {\n\tcase errCodeTruncated:\n\t\treturn io.ErrUnexpectedEOF\n\tcase errCodeFieldNumber:\n\t\treturn errFieldNumber\n\tcase errCodeOverflow:\n\t\treturn errOverflow\n\tcase errCodeReserved:\n\t\treturn errReserved\n\tcase errCodeEndGroup:\n\t\treturn errEndGroup\n\tdefault:\n\t\treturn errParse\n\t}\n}\n\n// ConsumeField parses an entire field record (both tag and value) and returns\n// the field number, the wire type, and the total length.\n// This returns a negative length upon an error (see [ParseError]).\n//\n// The total length includes the tag header and the end group marker (if the\n// field is a group).\nfunc ConsumeField(b []byte) (Number, Type, int) {\n\tnum, typ, n := ConsumeTag(b)\n\tif n < 0 {\n\t\treturn 0, 0, n // forward error code\n\t}\n\tm := ConsumeFieldValue(num, typ, b[n:])\n\tif m < 0 {\n\t\treturn 0, 0, m // forward error code\n\t}\n\treturn num, typ, n + m\n}\n\n// ConsumeFieldValue parses a field value and returns its length.\n// This assumes that the field [Number] and wire [Type] have already been parsed.\n// This returns a negative length upon an error (see [ParseError]).\n//\n// When parsing a group, the length includes the end group marker and\n// the end group is verified to match the starting field number.\nfunc ConsumeFieldValue(num Number, typ Type, b []byte) (n int) {\n\treturn consumeFieldValueD(num, typ, b, DefaultRecursionLimit)\n}\n\nfunc consumeFieldValueD(num Number, typ Type, b []byte, depth int) (n int) {\n\tswitch typ {\n\tcase VarintType:\n\t\t_, n = ConsumeVarint(b)\n\t\treturn n\n\tcase Fixed32Type:\n\t\t_, n = ConsumeFixed32(b)\n\t\treturn n\n\tcase Fixed64Type:\n\t\t_, n = ConsumeFixed64(b)\n\t\treturn n\n\tcase BytesType:\n\t\t_, n = ConsumeBytes(b)\n\t\treturn n\n\tcase StartGroupType:\n\t\tif depth < 0 {\n\t\t\treturn errCodeRecursionDepth\n\t\t}\n\t\tn0 := len(b)\n\t\tfor {\n\t\t\tnum2, typ2, n := ConsumeTag(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn n // forward error code\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tif typ2 == EndGroupType {\n\t\t\t\tif num != num2 {\n\t\t\t\t\treturn errCodeEndGroup\n\t\t\t\t}\n\t\t\t\treturn n0 - len(b)\n\t\t\t}\n\n\t\t\tn = consumeFieldValueD(num2, typ2, b, depth-1)\n\t\t\tif n < 0 {\n\t\t\t\treturn n // forward error code\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t}\n\tcase EndGroupType:\n\t\treturn errCodeEndGroup\n\tdefault:\n\t\treturn errCodeReserved\n\t}\n}\n\n// AppendTag encodes num and typ as a varint-encoded tag and appends it to b.\nfunc AppendTag(b []byte, num Number, typ Type) []byte {\n\treturn AppendVarint(b, EncodeTag(num, typ))\n}\n\n// ConsumeTag parses b as a varint-encoded tag, reporting its length.\n// This returns a negative length upon an error (see [ParseError]).\nfunc ConsumeTag(b []byte) (Number, Type, int) {\n\tv, n := ConsumeVarint(b)\n\tif n < 0 {\n\t\treturn 0, 0, n // forward error code\n\t}\n\tnum, typ := DecodeTag(v)\n\tif num < MinValidNumber {\n\t\treturn 0, 0, errCodeFieldNumber\n\t}\n\treturn num, typ, n\n}\n\nfunc SizeTag(num Number) int {\n\treturn SizeVarint(EncodeTag(num, 0)) // wire type has no effect on size\n}\n\n// AppendVarint appends v to b as a varint-encoded uint64.\nfunc AppendVarint(b []byte, v uint64) []byte {\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>>0)&0x7f|0x80),\n\t\t\tbyte(v>>7))\n\tcase v < 1<<21:\n\t\tb = append(b,\n\t\t\tbyte((v>>0)&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>>0)&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>>0)&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>>0)&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>>0)&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>>0)&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>>0)&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>>0)&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\n// ConsumeVarint parses b as a varint-encoded uint64, reporting its length.\n// This returns a negative length upon an error (see [ParseError]).\nfunc ConsumeVarint(b []byte) (v uint64, n int) {\n\tvar y uint64\n\tif len(b) <= 0 {\n\t\treturn 0, errCodeTruncated\n\t}\n\tv = uint64(b[0])\n\tif v < 0x80 {\n\t\treturn v, 1\n\t}\n\tv -= 0x80\n\n\tif len(b) <= 1 {\n\t\treturn 0, errCodeTruncated\n\t}\n\ty = uint64(b[1])\n\tv += y << 7\n\tif y < 0x80 {\n\t\treturn v, 2\n\t}\n\tv -= 0x80 << 7\n\n\tif len(b) <= 2 {\n\t\treturn 0, errCodeTruncated\n\t}\n\ty = uint64(b[2])\n\tv += y << 14\n\tif y < 0x80 {\n\t\treturn v, 3\n\t}\n\tv -= 0x80 << 14\n\n\tif len(b) <= 3 {\n\t\treturn 0, errCodeTruncated\n\t}\n\ty = uint64(b[3])\n\tv += y << 21\n\tif y < 0x80 {\n\t\treturn v, 4\n\t}\n\tv -= 0x80 << 21\n\n\tif len(b) <= 4 {\n\t\treturn 0, errCodeTruncated\n\t}\n\ty = uint64(b[4])\n\tv += y << 28\n\tif y < 0x80 {\n\t\treturn v, 5\n\t}\n\tv -= 0x80 << 28\n\n\tif len(b) <= 5 {\n\t\treturn 0, errCodeTruncated\n\t}\n\ty = uint64(b[5])\n\tv += y << 35\n\tif y < 0x80 {\n\t\treturn v, 6\n\t}\n\tv -= 0x80 << 35\n\n\tif len(b) <= 6 {\n\t\treturn 0, errCodeTruncated\n\t}\n\ty = uint64(b[6])\n\tv += y << 42\n\tif y < 0x80 {\n\t\treturn v, 7\n\t}\n\tv -= 0x80 << 42\n\n\tif len(b) <= 7 {\n\t\treturn 0, errCodeTruncated\n\t}\n\ty = uint64(b[7])\n\tv += y << 49\n\tif y < 0x80 {\n\t\treturn v, 8\n\t}\n\tv -= 0x80 << 49\n\n\tif len(b) <= 8 {\n\t\treturn 0, errCodeTruncated\n\t}\n\ty = uint64(b[8])\n\tv += y << 56\n\tif y < 0x80 {\n\t\treturn v, 9\n\t}\n\tv -= 0x80 << 56\n\n\tif len(b) <= 9 {\n\t\treturn 0, errCodeTruncated\n\t}\n\ty = uint64(b[9])\n\tv += y << 63\n\tif y < 2 {\n\t\treturn v, 10\n\t}\n\treturn 0, errCodeOverflow\n}\n\n// SizeVarint returns the encoded size of a varint.\n// The size is guaranteed to be within 1 and 10, inclusive.\nfunc SizeVarint(v uint64) int {\n\t// This computes 1 + (bits.Len64(v)-1)/7.\n\t// 9/64 is a good enough approximation of 1/7\n\t//\n\t// The Go compiler can translate the bits.LeadingZeros64 call into the LZCNT\n\t// instruction, which is very fast on CPUs from the last few years. The\n\t// specific way of expressing the calculation matches C++ Protobuf, see\n\t// https://godbolt.org/z/4P3h53oM4 for the C++ code and how gcc/clang\n\t// optimize that function for GOAMD64=v1 and GOAMD64=v3 (-march=haswell).\n\n\t// By OR'ing v with 1, we guarantee that v is never 0, without changing the\n\t// result of SizeVarint. LZCNT is not defined for 0, meaning the compiler\n\t// needs to add extra instructions to handle that case.\n\t//\n\t// The Go compiler currently (go1.24.4) does not make use of this knowledge.\n\t// This opportunity (removing the XOR instruction, which handles the 0 case)\n\t// results in a small (1%) performance win across CPU architectures.\n\t//\n\t// Independently of avoiding the 0 case, we need the v |= 1 line because\n\t// it allows the Go compiler to eliminate an extra XCHGL barrier.\n\tv |= 1\n\n\t// It would be clearer to write log2value := 63 - uint32(...), but\n\t// writing uint32(...) ^ 63 is much more efficient (-14% ARM, -20% Intel).\n\t// Proof of identity for our value range [0..63]:\n\t// https://go.dev/play/p/Pdn9hEWYakX\n\tlog2value := uint32(bits.LeadingZeros64(v)) ^ 63\n\treturn int((log2value*9 + (64 + 9)) / 64)\n}\n\n// AppendFixed32 appends v to b as a little-endian uint32.\nfunc AppendFixed32(b []byte, v uint32) []byte {\n\treturn append(b,\n\t\tbyte(v>>0),\n\t\tbyte(v>>8),\n\t\tbyte(v>>16),\n\t\tbyte(v>>24))\n}\n\n// ConsumeFixed32 parses b as a little-endian uint32, reporting its length.\n// This returns a negative length upon an error (see [ParseError]).\nfunc ConsumeFixed32(b []byte) (v uint32, n int) {\n\tif len(b) < 4 {\n\t\treturn 0, errCodeTruncated\n\t}\n\tv = uint32(b[0])<<0 | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n\treturn v, 4\n}\n\n// SizeFixed32 returns the encoded size of a fixed32; which is always 4.\nfunc SizeFixed32() int {\n\treturn 4\n}\n\n// AppendFixed64 appends v to b as a little-endian uint64.\nfunc AppendFixed64(b []byte, v uint64) []byte {\n\treturn append(b,\n\t\tbyte(v>>0),\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}\n\n// ConsumeFixed64 parses b as a little-endian uint64, reporting its length.\n// This returns a negative length upon an error (see [ParseError]).\nfunc ConsumeFixed64(b []byte) (v uint64, n int) {\n\tif len(b) < 8 {\n\t\treturn 0, errCodeTruncated\n\t}\n\tv = uint64(b[0])<<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\treturn v, 8\n}\n\n// SizeFixed64 returns the encoded size of a fixed64; which is always 8.\nfunc SizeFixed64() int {\n\treturn 8\n}\n\n// AppendBytes appends v to b as a length-prefixed bytes value.\nfunc AppendBytes(b []byte, v []byte) []byte {\n\treturn append(AppendVarint(b, uint64(len(v))), v...)\n}\n\n// ConsumeBytes parses b as a length-prefixed bytes value, reporting its length.\n// This returns a negative length upon an error (see [ParseError]).\nfunc ConsumeBytes(b []byte) (v []byte, n int) {\n\tm, n := ConsumeVarint(b)\n\tif n < 0 {\n\t\treturn nil, n // forward error code\n\t}\n\tif m > uint64(len(b[n:])) {\n\t\treturn nil, errCodeTruncated\n\t}\n\treturn b[n:][:m], n + int(m)\n}\n\n// SizeBytes returns the encoded size of a length-prefixed bytes value,\n// given only the length.\nfunc SizeBytes(n int) int {\n\treturn SizeVarint(uint64(n)) + n\n}\n\n// AppendString appends v to b as a length-prefixed bytes value.\nfunc AppendString(b []byte, v string) []byte {\n\treturn append(AppendVarint(b, uint64(len(v))), v...)\n}\n\n// ConsumeString parses b as a length-prefixed bytes value, reporting its length.\n// This returns a negative length upon an error (see [ParseError]).\nfunc ConsumeString(b []byte) (v string, n int) {\n\tbb, n := ConsumeBytes(b)\n\treturn string(bb), n\n}\n\n// AppendGroup appends v to b as group value, with a trailing end group marker.\n// The value v must not contain the end marker.\nfunc AppendGroup(b []byte, num Number, v []byte) []byte {\n\treturn AppendVarint(append(b, v...), EncodeTag(num, EndGroupType))\n}\n\n// ConsumeGroup parses b as a group value until the trailing end group marker,\n// and verifies that the end marker matches the provided num. The value v\n// does not contain the end marker, while the length does contain the end marker.\n// This returns a negative length upon an error (see [ParseError]).\nfunc ConsumeGroup(num Number, b []byte) (v []byte, n int) {\n\tn = ConsumeFieldValue(num, StartGroupType, b)\n\tif n < 0 {\n\t\treturn nil, n // forward error code\n\t}\n\tb = b[:n]\n\n\t// Truncate off end group marker, but need to handle denormalized varints.\n\t// Assuming end marker is never 0 (which is always the case since\n\t// EndGroupType is non-zero), we can truncate all trailing bytes where the\n\t// lower 7 bits are all zero (implying that the varint is denormalized).\n\tfor len(b) > 0 && b[len(b)-1]&0x7f == 0 {\n\t\tb = b[:len(b)-1]\n\t}\n\tb = b[:len(b)-SizeTag(num)]\n\treturn b, n\n}\n\n// SizeGroup returns the encoded size of a group, given only the length.\nfunc SizeGroup(num Number, n int) int {\n\treturn n + SizeTag(num)\n}\n\n// DecodeTag decodes the field [Number] and wire [Type] from its unified form.\n// The [Number] is -1 if the decoded field number overflows int32.\n// Other than overflow, this does not check for field number validity.\nfunc DecodeTag(x uint64) (Number, Type) {\n\t// NOTE: MessageSet allows for larger field numbers than normal.\n\tif x>>3 > uint64(math.MaxInt32) {\n\t\treturn -1, 0\n\t}\n\treturn Number(x >> 3), Type(x & 7)\n}\n\n// EncodeTag encodes the field [Number] and wire [Type] into its unified form.\nfunc EncodeTag(num Number, typ Type) uint64 {\n\treturn uint64(num)<<3 | uint64(typ&7)\n}\n\n// DecodeZigZag decodes a zig-zag-encoded uint64 as an int64.\n//\n//\tInput:  {…,  5,  3,  1,  0,  2,  4,  6, …}\n//\tOutput: {…, -3, -2, -1,  0, +1, +2, +3, …}\nfunc DecodeZigZag(x uint64) int64 {\n\treturn int64(x>>1) ^ int64(x)<<63>>63\n}\n\n// EncodeZigZag encodes an int64 as a zig-zag-encoded uint64.\n//\n//\tInput:  {…, -3, -2, -1,  0, +1, +2, +3, …}\n//\tOutput: {…,  5,  3,  1,  0,  2,  4,  6, …}\nfunc EncodeZigZag(x int64) uint64 {\n\treturn uint64(x<<1) ^ uint64(x>>63)\n}\n\n// DecodeBool decodes a uint64 as a bool.\n//\n//\tInput:  {    0,    1,    2, …}\n//\tOutput: {false, true, true, …}\nfunc DecodeBool(x uint64) bool {\n\treturn x != 0\n}\n\n// EncodeBool encodes a bool as a uint64.\n//\n//\tInput:  {false, true}\n//\tOutput: {    0,    1}\nfunc EncodeBool(x bool) uint64 {\n\tif x {\n\t\treturn 1\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/descfmt/stringer.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 descfmt provides functionality to format descriptors.\npackage descfmt\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"google.golang.org/protobuf/internal/detrand\"\n\t\"google.golang.org/protobuf/internal/pragma\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\ntype list interface {\n\tLen() int\n\tpragma.DoNotImplement\n}\n\nfunc FormatList(s fmt.State, r rune, vs list) {\n\tio.WriteString(s, formatListOpt(vs, true, r == 'v' && (s.Flag('+') || s.Flag('#'))))\n}\nfunc formatListOpt(vs list, isRoot, allowMulti bool) string {\n\tstart, end := \"[\", \"]\"\n\tif isRoot {\n\t\tvar name string\n\t\tswitch vs.(type) {\n\t\tcase protoreflect.Names:\n\t\t\tname = \"Names\"\n\t\tcase protoreflect.FieldNumbers:\n\t\t\tname = \"FieldNumbers\"\n\t\tcase protoreflect.FieldRanges:\n\t\t\tname = \"FieldRanges\"\n\t\tcase protoreflect.EnumRanges:\n\t\t\tname = \"EnumRanges\"\n\t\tcase protoreflect.FileImports:\n\t\t\tname = \"FileImports\"\n\t\tcase protoreflect.Descriptor:\n\t\t\tname = reflect.ValueOf(vs).MethodByName(\"Get\").Type().Out(0).Name() + \"s\"\n\t\tdefault:\n\t\t\tname = reflect.ValueOf(vs).Elem().Type().Name()\n\t\t}\n\t\tstart, end = name+\"{\", \"}\"\n\t}\n\n\tvar ss []string\n\tswitch vs := vs.(type) {\n\tcase protoreflect.Names:\n\t\tfor i := 0; i < vs.Len(); i++ {\n\t\t\tss = append(ss, fmt.Sprint(vs.Get(i)))\n\t\t}\n\t\treturn start + joinStrings(ss, false) + end\n\tcase protoreflect.FieldNumbers:\n\t\tfor i := 0; i < vs.Len(); i++ {\n\t\t\tss = append(ss, fmt.Sprint(vs.Get(i)))\n\t\t}\n\t\treturn start + joinStrings(ss, false) + end\n\tcase protoreflect.FieldRanges:\n\t\tfor i := 0; i < vs.Len(); i++ {\n\t\t\tr := vs.Get(i)\n\t\t\tif r[0]+1 == r[1] {\n\t\t\t\tss = append(ss, fmt.Sprintf(\"%d\", r[0]))\n\t\t\t} else {\n\t\t\t\tss = append(ss, fmt.Sprintf(\"%d:%d\", r[0], r[1])) // enum ranges are end exclusive\n\t\t\t}\n\t\t}\n\t\treturn start + joinStrings(ss, false) + end\n\tcase protoreflect.EnumRanges:\n\t\tfor i := 0; i < vs.Len(); i++ {\n\t\t\tr := vs.Get(i)\n\t\t\tif r[0] == r[1] {\n\t\t\t\tss = append(ss, fmt.Sprintf(\"%d\", r[0]))\n\t\t\t} else {\n\t\t\t\tss = append(ss, fmt.Sprintf(\"%d:%d\", r[0], int64(r[1])+1)) // enum ranges are end inclusive\n\t\t\t}\n\t\t}\n\t\treturn start + joinStrings(ss, false) + end\n\tcase protoreflect.FileImports:\n\t\tfor i := 0; i < vs.Len(); i++ {\n\t\t\tvar rs records\n\t\t\trv := reflect.ValueOf(vs.Get(i))\n\t\t\trs.Append(rv, []methodAndName{\n\t\t\t\t{rv.MethodByName(\"Path\"), \"Path\"},\n\t\t\t\t{rv.MethodByName(\"Package\"), \"Package\"},\n\t\t\t\t{rv.MethodByName(\"IsPublic\"), \"IsPublic\"},\n\t\t\t\t{rv.MethodByName(\"IsWeak\"), \"IsWeak\"},\n\t\t\t}...)\n\t\t\tss = append(ss, \"{\"+rs.Join()+\"}\")\n\t\t}\n\t\treturn start + joinStrings(ss, allowMulti) + end\n\tdefault:\n\t\t_, isEnumValue := vs.(protoreflect.EnumValueDescriptors)\n\t\tfor i := 0; i < vs.Len(); i++ {\n\t\t\tm := reflect.ValueOf(vs).MethodByName(\"Get\")\n\t\t\tv := m.Call([]reflect.Value{reflect.ValueOf(i)})[0].Interface()\n\t\t\tss = append(ss, formatDescOpt(v.(protoreflect.Descriptor), false, allowMulti && !isEnumValue, nil))\n\t\t}\n\t\treturn start + joinStrings(ss, allowMulti && isEnumValue) + end\n\t}\n}\n\ntype methodAndName struct {\n\tmethod reflect.Value\n\tname   string\n}\n\nfunc FormatDesc(s fmt.State, r rune, t protoreflect.Descriptor) {\n\tio.WriteString(s, formatDescOpt(t, true, r == 'v' && (s.Flag('+') || s.Flag('#')), nil))\n}\n\nfunc InternalFormatDescOptForTesting(t protoreflect.Descriptor, isRoot, allowMulti bool, record func(string)) string {\n\treturn formatDescOpt(t, isRoot, allowMulti, record)\n}\n\nfunc formatDescOpt(t protoreflect.Descriptor, isRoot, allowMulti bool, record func(string)) string {\n\trv := reflect.ValueOf(t)\n\trt := rv.MethodByName(\"ProtoType\").Type().In(0)\n\n\tstart, end := \"{\", \"}\"\n\tif isRoot {\n\t\tstart = rt.Name() + \"{\"\n\t}\n\n\t_, isFile := t.(protoreflect.FileDescriptor)\n\trs := records{\n\t\tallowMulti: allowMulti,\n\t\trecord:     record,\n\t}\n\tif t.IsPlaceholder() {\n\t\tif isFile {\n\t\t\trs.Append(rv, []methodAndName{\n\t\t\t\t{rv.MethodByName(\"Path\"), \"Path\"},\n\t\t\t\t{rv.MethodByName(\"Package\"), \"Package\"},\n\t\t\t\t{rv.MethodByName(\"IsPlaceholder\"), \"IsPlaceholder\"},\n\t\t\t}...)\n\t\t} else {\n\t\t\trs.Append(rv, []methodAndName{\n\t\t\t\t{rv.MethodByName(\"FullName\"), \"FullName\"},\n\t\t\t\t{rv.MethodByName(\"IsPlaceholder\"), \"IsPlaceholder\"},\n\t\t\t}...)\n\t\t}\n\t} else {\n\t\tswitch {\n\t\tcase isFile:\n\t\t\trs.Append(rv, methodAndName{rv.MethodByName(\"Syntax\"), \"Syntax\"})\n\t\tcase isRoot:\n\t\t\trs.Append(rv, []methodAndName{\n\t\t\t\t{rv.MethodByName(\"Syntax\"), \"Syntax\"},\n\t\t\t\t{rv.MethodByName(\"FullName\"), \"FullName\"},\n\t\t\t}...)\n\t\tdefault:\n\t\t\trs.Append(rv, methodAndName{rv.MethodByName(\"Name\"), \"Name\"})\n\t\t}\n\t\tswitch t := t.(type) {\n\t\tcase protoreflect.FieldDescriptor:\n\t\t\taccessors := []methodAndName{\n\t\t\t\t{rv.MethodByName(\"Number\"), \"Number\"},\n\t\t\t\t{rv.MethodByName(\"Cardinality\"), \"Cardinality\"},\n\t\t\t\t{rv.MethodByName(\"Kind\"), \"Kind\"},\n\t\t\t\t{rv.MethodByName(\"HasJSONName\"), \"HasJSONName\"},\n\t\t\t\t{rv.MethodByName(\"JSONName\"), \"JSONName\"},\n\t\t\t\t{rv.MethodByName(\"HasPresence\"), \"HasPresence\"},\n\t\t\t\t{rv.MethodByName(\"IsExtension\"), \"IsExtension\"},\n\t\t\t\t{rv.MethodByName(\"IsPacked\"), \"IsPacked\"},\n\t\t\t\t{rv.MethodByName(\"IsWeak\"), \"IsWeak\"},\n\t\t\t\t{rv.MethodByName(\"IsList\"), \"IsList\"},\n\t\t\t\t{rv.MethodByName(\"IsMap\"), \"IsMap\"},\n\t\t\t\t{rv.MethodByName(\"MapKey\"), \"MapKey\"},\n\t\t\t\t{rv.MethodByName(\"MapValue\"), \"MapValue\"},\n\t\t\t\t{rv.MethodByName(\"HasDefault\"), \"HasDefault\"},\n\t\t\t\t{rv.MethodByName(\"Default\"), \"Default\"},\n\t\t\t\t{rv.MethodByName(\"ContainingOneof\"), \"ContainingOneof\"},\n\t\t\t\t{rv.MethodByName(\"ContainingMessage\"), \"ContainingMessage\"},\n\t\t\t\t{rv.MethodByName(\"Message\"), \"Message\"},\n\t\t\t\t{rv.MethodByName(\"Enum\"), \"Enum\"},\n\t\t\t}\n\t\t\tfor _, s := range accessors {\n\t\t\t\tswitch s.name {\n\t\t\t\tcase \"MapKey\":\n\t\t\t\t\tif k := t.MapKey(); k != nil {\n\t\t\t\t\t\trs.recs = append(rs.recs, [2]string{\"MapKey\", k.Kind().String()})\n\t\t\t\t\t}\n\t\t\t\tcase \"MapValue\":\n\t\t\t\t\tif v := t.MapValue(); v != nil {\n\t\t\t\t\t\tswitch v.Kind() {\n\t\t\t\t\t\tcase protoreflect.EnumKind:\n\t\t\t\t\t\t\trs.AppendRecs(\"MapValue\", [2]string{\"MapValue\", string(v.Enum().FullName())})\n\t\t\t\t\t\tcase protoreflect.MessageKind, protoreflect.GroupKind:\n\t\t\t\t\t\t\trs.AppendRecs(\"MapValue\", [2]string{\"MapValue\", string(v.Message().FullName())})\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\trs.AppendRecs(\"MapValue\", [2]string{\"MapValue\", v.Kind().String()})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\tcase \"ContainingOneof\":\n\t\t\t\t\tif od := t.ContainingOneof(); od != nil {\n\t\t\t\t\t\trs.AppendRecs(\"ContainingOneof\", [2]string{\"Oneof\", string(od.Name())})\n\t\t\t\t\t}\n\t\t\t\tcase \"ContainingMessage\":\n\t\t\t\t\tif t.IsExtension() {\n\t\t\t\t\t\trs.AppendRecs(\"ContainingMessage\", [2]string{\"Extendee\", string(t.ContainingMessage().FullName())})\n\t\t\t\t\t}\n\t\t\t\tcase \"Message\":\n\t\t\t\t\tif !t.IsMap() {\n\t\t\t\t\t\trs.Append(rv, s)\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\trs.Append(rv, s)\n\t\t\t\t}\n\t\t\t}\n\t\tcase protoreflect.OneofDescriptor:\n\t\t\tvar ss []string\n\t\t\tfs := t.Fields()\n\t\t\tfor i := 0; i < fs.Len(); i++ {\n\t\t\t\tss = append(ss, string(fs.Get(i).Name()))\n\t\t\t}\n\t\t\tif len(ss) > 0 {\n\t\t\t\trs.AppendRecs(\"Fields\", [2]string{\"Fields\", \"[\" + joinStrings(ss, false) + \"]\"})\n\t\t\t}\n\n\t\tcase protoreflect.FileDescriptor:\n\t\t\trs.Append(rv, []methodAndName{\n\t\t\t\t{rv.MethodByName(\"Path\"), \"Path\"},\n\t\t\t\t{rv.MethodByName(\"Package\"), \"Package\"},\n\t\t\t\t{rv.MethodByName(\"Imports\"), \"Imports\"},\n\t\t\t\t{rv.MethodByName(\"Messages\"), \"Messages\"},\n\t\t\t\t{rv.MethodByName(\"Enums\"), \"Enums\"},\n\t\t\t\t{rv.MethodByName(\"Extensions\"), \"Extensions\"},\n\t\t\t\t{rv.MethodByName(\"Services\"), \"Services\"},\n\t\t\t}...)\n\n\t\tcase protoreflect.MessageDescriptor:\n\t\t\trs.Append(rv, []methodAndName{\n\t\t\t\t{rv.MethodByName(\"IsMapEntry\"), \"IsMapEntry\"},\n\t\t\t\t{rv.MethodByName(\"Fields\"), \"Fields\"},\n\t\t\t\t{rv.MethodByName(\"Oneofs\"), \"Oneofs\"},\n\t\t\t\t{rv.MethodByName(\"ReservedNames\"), \"ReservedNames\"},\n\t\t\t\t{rv.MethodByName(\"ReservedRanges\"), \"ReservedRanges\"},\n\t\t\t\t{rv.MethodByName(\"RequiredNumbers\"), \"RequiredNumbers\"},\n\t\t\t\t{rv.MethodByName(\"ExtensionRanges\"), \"ExtensionRanges\"},\n\t\t\t\t{rv.MethodByName(\"Messages\"), \"Messages\"},\n\t\t\t\t{rv.MethodByName(\"Enums\"), \"Enums\"},\n\t\t\t\t{rv.MethodByName(\"Extensions\"), \"Extensions\"},\n\t\t\t}...)\n\n\t\tcase protoreflect.EnumDescriptor:\n\t\t\trs.Append(rv, []methodAndName{\n\t\t\t\t{rv.MethodByName(\"Values\"), \"Values\"},\n\t\t\t\t{rv.MethodByName(\"ReservedNames\"), \"ReservedNames\"},\n\t\t\t\t{rv.MethodByName(\"ReservedRanges\"), \"ReservedRanges\"},\n\t\t\t\t{rv.MethodByName(\"IsClosed\"), \"IsClosed\"},\n\t\t\t}...)\n\n\t\tcase protoreflect.EnumValueDescriptor:\n\t\t\trs.Append(rv, []methodAndName{\n\t\t\t\t{rv.MethodByName(\"Number\"), \"Number\"},\n\t\t\t}...)\n\n\t\tcase protoreflect.ServiceDescriptor:\n\t\t\trs.Append(rv, []methodAndName{\n\t\t\t\t{rv.MethodByName(\"Methods\"), \"Methods\"},\n\t\t\t}...)\n\n\t\tcase protoreflect.MethodDescriptor:\n\t\t\trs.Append(rv, []methodAndName{\n\t\t\t\t{rv.MethodByName(\"Input\"), \"Input\"},\n\t\t\t\t{rv.MethodByName(\"Output\"), \"Output\"},\n\t\t\t\t{rv.MethodByName(\"IsStreamingClient\"), \"IsStreamingClient\"},\n\t\t\t\t{rv.MethodByName(\"IsStreamingServer\"), \"IsStreamingServer\"},\n\t\t\t}...)\n\t\t}\n\t\tif m := rv.MethodByName(\"GoType\"); m.IsValid() {\n\t\t\trs.Append(rv, methodAndName{m, \"GoType\"})\n\t\t}\n\t}\n\treturn start + rs.Join() + end\n}\n\ntype records struct {\n\trecs       [][2]string\n\tallowMulti bool\n\n\t// record is a function that will be called for every Append() or\n\t// AppendRecs() call, to be used for testing with the\n\t// InternalFormatDescOptForTesting function.\n\trecord func(string)\n}\n\nfunc (rs *records) AppendRecs(fieldName string, newRecs [2]string) {\n\tif rs.record != nil {\n\t\trs.record(fieldName)\n\t}\n\trs.recs = append(rs.recs, newRecs)\n}\n\nfunc (rs *records) Append(v reflect.Value, accessors ...methodAndName) {\n\tfor _, a := range accessors {\n\t\tif rs.record != nil {\n\t\t\trs.record(a.name)\n\t\t}\n\t\tvar rv reflect.Value\n\t\tif a.method.IsValid() {\n\t\t\trv = a.method.Call(nil)[0]\n\t\t}\n\t\tif v.Kind() == reflect.Struct && !rv.IsValid() {\n\t\t\trv = v.FieldByName(a.name)\n\t\t}\n\t\tif !rv.IsValid() {\n\t\t\tpanic(fmt.Sprintf(\"unknown accessor: %v.%s\", v.Type(), a.name))\n\t\t}\n\t\tif _, ok := rv.Interface().(protoreflect.Value); ok {\n\t\t\trv = rv.MethodByName(\"Interface\").Call(nil)[0]\n\t\t\tif !rv.IsNil() {\n\t\t\t\trv = rv.Elem()\n\t\t\t}\n\t\t}\n\n\t\t// Ignore zero values.\n\t\tvar isZero bool\n\t\tswitch rv.Kind() {\n\t\tcase reflect.Interface, reflect.Slice:\n\t\t\tisZero = rv.IsNil()\n\t\tcase reflect.Bool:\n\t\t\tisZero = rv.Bool() == false\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\tisZero = rv.Int() == 0\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\tisZero = rv.Uint() == 0\n\t\tcase reflect.String:\n\t\t\tisZero = rv.String() == \"\"\n\t\t}\n\t\tif n, ok := rv.Interface().(list); ok {\n\t\t\tisZero = n.Len() == 0\n\t\t}\n\t\tif isZero {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Format the value.\n\t\tvar s string\n\t\tv := rv.Interface()\n\t\tswitch v := v.(type) {\n\t\tcase list:\n\t\t\ts = formatListOpt(v, false, rs.allowMulti)\n\t\tcase protoreflect.FieldDescriptor, protoreflect.OneofDescriptor, protoreflect.EnumValueDescriptor, protoreflect.MethodDescriptor:\n\t\t\ts = string(v.(protoreflect.Descriptor).Name())\n\t\tcase protoreflect.Descriptor:\n\t\t\ts = string(v.FullName())\n\t\tcase string:\n\t\t\ts = strconv.Quote(v)\n\t\tcase []byte:\n\t\t\ts = fmt.Sprintf(\"%q\", v)\n\t\tdefault:\n\t\t\ts = fmt.Sprint(v)\n\t\t}\n\t\trs.recs = append(rs.recs, [2]string{a.name, s})\n\t}\n}\n\nfunc (rs *records) Join() string {\n\tvar ss []string\n\n\t// In single line mode, simply join all records with commas.\n\tif !rs.allowMulti {\n\t\tfor _, r := range rs.recs {\n\t\t\tss = append(ss, r[0]+formatColon(0)+r[1])\n\t\t}\n\t\treturn joinStrings(ss, false)\n\t}\n\n\t// In allowMulti line mode, align single line records for more readable output.\n\tvar maxLen int\n\tflush := func(i int) {\n\t\tfor _, r := range rs.recs[len(ss):i] {\n\t\t\tss = append(ss, r[0]+formatColon(maxLen-len(r[0]))+r[1])\n\t\t}\n\t\tmaxLen = 0\n\t}\n\tfor i, r := range rs.recs {\n\t\tif isMulti := strings.Contains(r[1], \"\\n\"); isMulti {\n\t\t\tflush(i)\n\t\t\tss = append(ss, r[0]+formatColon(0)+strings.Join(strings.Split(r[1], \"\\n\"), \"\\n\\t\"))\n\t\t} else if maxLen < len(r[0]) {\n\t\t\tmaxLen = len(r[0])\n\t\t}\n\t}\n\tflush(len(rs.recs))\n\treturn joinStrings(ss, true)\n}\n\nfunc formatColon(padding int) string {\n\t// Deliberately introduce instability into the debug output to\n\t// discourage users from performing string comparisons.\n\t// This provides us flexibility to change the output in the future.\n\tif detrand.Bool() {\n\t\treturn \":\" + strings.Repeat(\" \", 1+padding) // use non-breaking spaces (U+00a0)\n\t} else {\n\t\treturn \":\" + strings.Repeat(\" \", 1+padding) // use regular spaces (U+0020)\n\t}\n}\n\nfunc joinStrings(ss []string, isMulti bool) string {\n\tif len(ss) == 0 {\n\t\treturn \"\"\n\t}\n\tif isMulti {\n\t\treturn \"\\n\\t\" + strings.Join(ss, \"\\n\\t\") + \"\\n\"\n\t}\n\treturn strings.Join(ss, \", \")\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/descopts/options.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 descopts contains the nil pointers to concrete descriptor options.\n//\n// This package exists as a form of reverse dependency injection so that certain\n// packages (e.g., internal/filedesc and internal/filetype can avoid a direct\n// dependency on the descriptor proto package).\npackage descopts\n\nimport \"google.golang.org/protobuf/reflect/protoreflect\"\n\n// These variables are set by the init function in descriptor.pb.go via logic\n// in internal/filetype. In other words, so long as the descriptor proto package\n// is linked in, these variables will be populated.\n//\n// Each variable is populated with a nil pointer to the options struct.\nvar (\n\tFile           protoreflect.ProtoMessage\n\tEnum           protoreflect.ProtoMessage\n\tEnumValue      protoreflect.ProtoMessage\n\tMessage        protoreflect.ProtoMessage\n\tField          protoreflect.ProtoMessage\n\tOneof          protoreflect.ProtoMessage\n\tExtensionRange protoreflect.ProtoMessage\n\tService        protoreflect.ProtoMessage\n\tMethod         protoreflect.ProtoMessage\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/detrand/rand.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 detrand provides deterministically random functionality.\n//\n// The pseudo-randomness of these functions is seeded by the program binary\n// itself and guarantees that the output does not change within a program,\n// while ensuring that the output is unstable across different builds.\npackage detrand\n\nimport (\n\t\"encoding/binary\"\n\t\"hash/fnv\"\n\t\"os\"\n)\n\n// Disable disables detrand such that all functions returns the zero value.\n// This function is not concurrent-safe and must be called during program init.\nfunc Disable() {\n\trandSeed = 0\n}\n\n// Bool returns a deterministically random boolean.\nfunc Bool() bool {\n\treturn randSeed%2 == 1\n}\n\n// Intn returns a deterministically random integer between 0 and n-1, inclusive.\nfunc Intn(n int) int {\n\tif n <= 0 {\n\t\tpanic(\"must be positive\")\n\t}\n\treturn int(randSeed % uint64(n))\n}\n\n// randSeed is a best-effort at an approximate hash of the Go binary.\nvar randSeed = binaryHash()\n\nfunc binaryHash() uint64 {\n\t// Open the Go binary.\n\ts, err := os.Executable()\n\tif err != nil {\n\t\treturn 0\n\t}\n\tf, err := os.Open(s)\n\tif err != nil {\n\t\treturn 0\n\t}\n\tdefer f.Close()\n\n\t// Hash the size and several samples of the Go binary.\n\tconst numSamples = 8\n\tvar buf [64]byte\n\th := fnv.New64()\n\tfi, err := f.Stat()\n\tif err != nil {\n\t\treturn 0\n\t}\n\tbinary.LittleEndian.PutUint64(buf[:8], uint64(fi.Size()))\n\th.Write(buf[:8])\n\tfor i := int64(0); i < numSamples; i++ {\n\t\tif _, err := f.ReadAt(buf[:], i*fi.Size()/numSamples); err != nil {\n\t\t\treturn 0\n\t\t}\n\t\th.Write(buf[:])\n\t}\n\treturn h.Sum64()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/editiondefaults/defaults.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// Package editiondefaults contains the binary representation of the editions\n// defaults.\npackage editiondefaults\n\nimport _ \"embed\"\n\n//go:embed editions_defaults.binpb\nvar Defaults []byte\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/encoding/defval/default.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 defval marshals and unmarshals textual forms of default values.\n//\n// This package handles both the form historically used in Go struct field tags\n// and also the form used by google.protobuf.FieldDescriptorProto.default_value\n// since they differ in superficial ways.\npackage defval\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"strconv\"\n\n\tptext \"google.golang.org/protobuf/internal/encoding/text\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// Format is the serialization format used to represent the default value.\ntype Format int\n\nconst (\n\t_ Format = iota\n\n\t// Descriptor uses the serialization format that protoc uses with the\n\t// google.protobuf.FieldDescriptorProto.default_value field.\n\tDescriptor\n\n\t// GoTag uses the historical serialization format in Go struct field tags.\n\tGoTag\n)\n\n// Unmarshal deserializes the default string s according to the given kind k.\n// When k is an enum, a list of enum value descriptors must be provided.\nfunc Unmarshal(s string, k protoreflect.Kind, evs protoreflect.EnumValueDescriptors, f Format) (protoreflect.Value, protoreflect.EnumValueDescriptor, error) {\n\tswitch k {\n\tcase protoreflect.BoolKind:\n\t\tif f == GoTag {\n\t\t\tswitch s {\n\t\t\tcase \"1\":\n\t\t\t\treturn protoreflect.ValueOfBool(true), nil, nil\n\t\t\tcase \"0\":\n\t\t\t\treturn protoreflect.ValueOfBool(false), nil, nil\n\t\t\t}\n\t\t} else {\n\t\t\tswitch s {\n\t\t\tcase \"true\":\n\t\t\t\treturn protoreflect.ValueOfBool(true), nil, nil\n\t\t\tcase \"false\":\n\t\t\t\treturn protoreflect.ValueOfBool(false), nil, nil\n\t\t\t}\n\t\t}\n\tcase protoreflect.EnumKind:\n\t\tif f == GoTag {\n\t\t\t// Go tags use the numeric form of the enum value.\n\t\t\tif n, err := strconv.ParseInt(s, 10, 32); err == nil {\n\t\t\t\tif ev := evs.ByNumber(protoreflect.EnumNumber(n)); ev != nil {\n\t\t\t\t\treturn protoreflect.ValueOfEnum(ev.Number()), ev, nil\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Descriptor default_value use the enum identifier.\n\t\t\tev := evs.ByName(protoreflect.Name(s))\n\t\t\tif ev != nil {\n\t\t\t\treturn protoreflect.ValueOfEnum(ev.Number()), ev, nil\n\t\t\t}\n\t\t}\n\tcase protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:\n\t\tif v, err := strconv.ParseInt(s, 10, 32); err == nil {\n\t\t\treturn protoreflect.ValueOfInt32(int32(v)), nil, nil\n\t\t}\n\tcase protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:\n\t\tif v, err := strconv.ParseInt(s, 10, 64); err == nil {\n\t\t\treturn protoreflect.ValueOfInt64(int64(v)), nil, nil\n\t\t}\n\tcase protoreflect.Uint32Kind, protoreflect.Fixed32Kind:\n\t\tif v, err := strconv.ParseUint(s, 10, 32); err == nil {\n\t\t\treturn protoreflect.ValueOfUint32(uint32(v)), nil, nil\n\t\t}\n\tcase protoreflect.Uint64Kind, protoreflect.Fixed64Kind:\n\t\tif v, err := strconv.ParseUint(s, 10, 64); err == nil {\n\t\t\treturn protoreflect.ValueOfUint64(uint64(v)), nil, nil\n\t\t}\n\tcase protoreflect.FloatKind, protoreflect.DoubleKind:\n\t\tvar v float64\n\t\tvar err error\n\t\tswitch s {\n\t\tcase \"-inf\":\n\t\t\tv = math.Inf(-1)\n\t\tcase \"inf\":\n\t\t\tv = math.Inf(+1)\n\t\tcase \"nan\":\n\t\t\tv = math.NaN()\n\t\tdefault:\n\t\t\tv, err = strconv.ParseFloat(s, 64)\n\t\t}\n\t\tif err == nil {\n\t\t\tif k == protoreflect.FloatKind {\n\t\t\t\treturn protoreflect.ValueOfFloat32(float32(v)), nil, nil\n\t\t\t} else {\n\t\t\t\treturn protoreflect.ValueOfFloat64(float64(v)), nil, nil\n\t\t\t}\n\t\t}\n\tcase protoreflect.StringKind:\n\t\t// String values are already unescaped and can be used as is.\n\t\treturn protoreflect.ValueOfString(s), nil, nil\n\tcase protoreflect.BytesKind:\n\t\tif b, ok := unmarshalBytes(s); ok {\n\t\t\treturn protoreflect.ValueOfBytes(b), nil, nil\n\t\t}\n\t}\n\treturn protoreflect.Value{}, nil, errors.New(\"could not parse value for %v: %q\", k, s)\n}\n\n// Marshal serializes v as the default string according to the given kind k.\n// When specifying the Descriptor format for an enum kind, the associated\n// enum value descriptor must be provided.\nfunc Marshal(v protoreflect.Value, ev protoreflect.EnumValueDescriptor, k protoreflect.Kind, f Format) (string, error) {\n\tswitch k {\n\tcase protoreflect.BoolKind:\n\t\tif f == GoTag {\n\t\t\tif v.Bool() {\n\t\t\t\treturn \"1\", nil\n\t\t\t} else {\n\t\t\t\treturn \"0\", nil\n\t\t\t}\n\t\t} else {\n\t\t\tif v.Bool() {\n\t\t\t\treturn \"true\", nil\n\t\t\t} else {\n\t\t\t\treturn \"false\", nil\n\t\t\t}\n\t\t}\n\tcase protoreflect.EnumKind:\n\t\tif f == GoTag {\n\t\t\treturn strconv.FormatInt(int64(v.Enum()), 10), nil\n\t\t} else {\n\t\t\treturn string(ev.Name()), nil\n\t\t}\n\tcase protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind, protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:\n\t\treturn strconv.FormatInt(v.Int(), 10), nil\n\tcase protoreflect.Uint32Kind, protoreflect.Fixed32Kind, protoreflect.Uint64Kind, protoreflect.Fixed64Kind:\n\t\treturn strconv.FormatUint(v.Uint(), 10), nil\n\tcase protoreflect.FloatKind, protoreflect.DoubleKind:\n\t\tf := v.Float()\n\t\tswitch {\n\t\tcase math.IsInf(f, -1):\n\t\t\treturn \"-inf\", nil\n\t\tcase math.IsInf(f, +1):\n\t\t\treturn \"inf\", nil\n\t\tcase math.IsNaN(f):\n\t\t\treturn \"nan\", nil\n\t\tdefault:\n\t\t\tif k == protoreflect.FloatKind {\n\t\t\t\treturn strconv.FormatFloat(f, 'g', -1, 32), nil\n\t\t\t} else {\n\t\t\t\treturn strconv.FormatFloat(f, 'g', -1, 64), nil\n\t\t\t}\n\t\t}\n\tcase protoreflect.StringKind:\n\t\t// String values are serialized as is without any escaping.\n\t\treturn v.String(), nil\n\tcase protoreflect.BytesKind:\n\t\tif s, ok := marshalBytes(v.Bytes()); ok {\n\t\t\treturn s, nil\n\t\t}\n\t}\n\treturn \"\", errors.New(\"could not format value for %v: %v\", k, v)\n}\n\n// unmarshalBytes deserializes bytes by applying C unescaping.\nfunc unmarshalBytes(s string) ([]byte, bool) {\n\t// Bytes values use the same escaping as the text format,\n\t// however they lack the surrounding double quotes.\n\tv, err := ptext.UnmarshalString(`\"` + s + `\"`)\n\tif err != nil {\n\t\treturn nil, false\n\t}\n\treturn []byte(v), true\n}\n\n// marshalBytes serializes bytes by using C escaping.\n// To match the exact output of protoc, this is identical to the\n// CEscape function in strutil.cc of the protoc source code.\nfunc marshalBytes(b []byte) (string, bool) {\n\tvar s []byte\n\tfor _, c := range b {\n\t\tswitch c {\n\t\tcase '\\n':\n\t\t\ts = append(s, `\\n`...)\n\t\tcase '\\r':\n\t\t\ts = append(s, `\\r`...)\n\t\tcase '\\t':\n\t\t\ts = append(s, `\\t`...)\n\t\tcase '\"':\n\t\t\ts = append(s, `\\\"`...)\n\t\tcase '\\'':\n\t\t\ts = append(s, `\\'`...)\n\t\tcase '\\\\':\n\t\t\ts = append(s, `\\\\`...)\n\t\tdefault:\n\t\t\tif printableASCII := c >= 0x20 && c <= 0x7e; printableASCII {\n\t\t\t\ts = append(s, c)\n\t\t\t} else {\n\t\t\t\ts = append(s, fmt.Sprintf(`\\%03o`, c)...)\n\t\t\t}\n\t\t}\n\t}\n\treturn string(s), true\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.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 messageset encodes and decodes the obsolete MessageSet wire format.\npackage messageset\n\nimport (\n\t\"math\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// The MessageSet wire format is equivalent to a message defined as follows,\n// where each Item defines an extension field with a field number of 'type_id'\n// and content of 'message'. MessageSet extensions must be non-repeated message\n// fields.\n//\n//\tmessage MessageSet {\n//\t\trepeated group Item = 1 {\n//\t\t\trequired int32 type_id = 2;\n//\t\t\trequired string message = 3;\n//\t\t}\n//\t}\nconst (\n\tFieldItem    = protowire.Number(1)\n\tFieldTypeID  = protowire.Number(2)\n\tFieldMessage = protowire.Number(3)\n)\n\n// ExtensionName is the field name for extensions of MessageSet.\n//\n// A valid MessageSet extension must be of the form:\n//\n//\tmessage MyMessage {\n//\t\textend proto2.bridge.MessageSet {\n//\t\t\toptional MyMessage message_set_extension = 1234;\n//\t\t}\n//\t\t...\n//\t}\nconst ExtensionName = \"message_set_extension\"\n\n// IsMessageSet returns whether the message uses the MessageSet wire format.\nfunc IsMessageSet(md protoreflect.MessageDescriptor) bool {\n\txmd, ok := md.(interface{ IsMessageSet() bool })\n\treturn ok && xmd.IsMessageSet()\n}\n\n// IsMessageSetExtension reports this field properly extends a MessageSet.\nfunc IsMessageSetExtension(fd protoreflect.FieldDescriptor) bool {\n\tswitch {\n\tcase fd.Name() != ExtensionName:\n\t\treturn false\n\tcase !IsMessageSet(fd.ContainingMessage()):\n\t\treturn false\n\tcase fd.FullName().Parent() != fd.Message().FullName():\n\t\treturn false\n\t}\n\treturn true\n}\n\n// SizeField returns the size of a MessageSet item field containing an extension\n// with the given field number, not counting the contents of the message subfield.\nfunc SizeField(num protowire.Number) int {\n\treturn 2*protowire.SizeTag(FieldItem) + protowire.SizeTag(FieldTypeID) + protowire.SizeVarint(uint64(num))\n}\n\n// Unmarshal parses a MessageSet.\n//\n// It calls fn with the type ID and value of each item in the MessageSet.\n// Unknown fields are discarded.\n//\n// If wantLen is true, the item values include the varint length prefix.\n// This is ugly, but simplifies the fast-path decoder in internal/impl.\nfunc Unmarshal(b []byte, wantLen bool, fn func(typeID protowire.Number, value []byte) error) error {\n\tfor len(b) > 0 {\n\t\tnum, wtyp, n := protowire.ConsumeTag(b)\n\t\tif n < 0 {\n\t\t\treturn protowire.ParseError(n)\n\t\t}\n\t\tb = b[n:]\n\t\tif num != FieldItem || wtyp != protowire.StartGroupType {\n\t\t\tn := protowire.ConsumeFieldValue(num, wtyp, b)\n\t\t\tif n < 0 {\n\t\t\t\treturn protowire.ParseError(n)\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tcontinue\n\t\t}\n\t\ttypeID, value, n, err := ConsumeFieldValue(b, wantLen)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tb = b[n:]\n\t\tif typeID == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif err := fn(typeID, value); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// ConsumeFieldValue parses b as a MessageSet item field value until and including\n// the trailing end group marker. It assumes the start group tag has already been parsed.\n// It returns the contents of the type_id and message subfields and the total\n// item length.\n//\n// If wantLen is true, the returned message value includes the length prefix.\nfunc ConsumeFieldValue(b []byte, wantLen bool) (typeid protowire.Number, message []byte, n int, err error) {\n\tilen := len(b)\n\tfor {\n\t\tnum, wtyp, n := protowire.ConsumeTag(b)\n\t\tif n < 0 {\n\t\t\treturn 0, nil, 0, protowire.ParseError(n)\n\t\t}\n\t\tb = b[n:]\n\t\tswitch {\n\t\tcase num == FieldItem && wtyp == protowire.EndGroupType:\n\t\t\tif wantLen && len(message) == 0 {\n\t\t\t\t// The message field was missing, which should never happen.\n\t\t\t\t// Be prepared for this case anyway.\n\t\t\t\tmessage = protowire.AppendVarint(message, 0)\n\t\t\t}\n\t\t\treturn typeid, message, ilen - len(b), nil\n\t\tcase num == FieldTypeID && wtyp == protowire.VarintType:\n\t\t\tv, n := protowire.ConsumeVarint(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, nil, 0, protowire.ParseError(n)\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tif v < 1 || v > math.MaxInt32 {\n\t\t\t\treturn 0, nil, 0, errors.New(\"invalid type_id in message set\")\n\t\t\t}\n\t\t\ttypeid = protowire.Number(v)\n\t\tcase num == FieldMessage && wtyp == protowire.BytesType:\n\t\t\tm, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, nil, 0, protowire.ParseError(n)\n\t\t\t}\n\t\t\tif message == nil {\n\t\t\t\tif wantLen {\n\t\t\t\t\tmessage = b[:n:n]\n\t\t\t\t} else {\n\t\t\t\t\tmessage = m[:len(m):len(m)]\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// This case should never happen in practice, but handle it for\n\t\t\t\t// correctness: The MessageSet item contains multiple message\n\t\t\t\t// fields, which need to be merged.\n\t\t\t\t//\n\t\t\t\t// In the case where we're returning the length, this becomes\n\t\t\t\t// quite inefficient since we need to strip the length off\n\t\t\t\t// the existing data and reconstruct it with the combined length.\n\t\t\t\tif wantLen {\n\t\t\t\t\t_, nn := protowire.ConsumeVarint(message)\n\t\t\t\t\tm0 := message[nn:]\n\t\t\t\t\tmessage = nil\n\t\t\t\t\tmessage = protowire.AppendVarint(message, uint64(len(m0)+len(m)))\n\t\t\t\t\tmessage = append(message, m0...)\n\t\t\t\t\tmessage = append(message, m...)\n\t\t\t\t} else {\n\t\t\t\t\tmessage = append(message, m...)\n\t\t\t\t}\n\t\t\t}\n\t\t\tb = b[n:]\n\t\tdefault:\n\t\t\t// We have no place to put it, so we just ignore unknown fields.\n\t\t\tn := protowire.ConsumeFieldValue(num, wtyp, b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, nil, 0, protowire.ParseError(n)\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t}\n\t}\n}\n\n// AppendFieldStart appends the start of a MessageSet item field containing\n// an extension with the given number. The caller must add the message\n// subfield (including the tag).\nfunc AppendFieldStart(b []byte, num protowire.Number) []byte {\n\tb = protowire.AppendTag(b, FieldItem, protowire.StartGroupType)\n\tb = protowire.AppendTag(b, FieldTypeID, protowire.VarintType)\n\tb = protowire.AppendVarint(b, uint64(num))\n\treturn b\n}\n\n// AppendFieldEnd appends the trailing end group marker for a MessageSet item field.\nfunc AppendFieldEnd(b []byte) []byte {\n\treturn protowire.AppendTag(b, FieldItem, protowire.EndGroupType)\n}\n\n// SizeUnknown returns the size of an unknown fields section in MessageSet format.\n//\n// See AppendUnknown.\nfunc SizeUnknown(unknown []byte) (size int) {\n\tfor len(unknown) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(unknown)\n\t\tif n < 0 || typ != protowire.BytesType {\n\t\t\treturn 0\n\t\t}\n\t\tunknown = unknown[n:]\n\t\t_, n = protowire.ConsumeBytes(unknown)\n\t\tif n < 0 {\n\t\t\treturn 0\n\t\t}\n\t\tunknown = unknown[n:]\n\t\tsize += SizeField(num) + protowire.SizeTag(FieldMessage) + n\n\t}\n\treturn size\n}\n\n// AppendUnknown appends unknown fields to b in MessageSet format.\n//\n// For historic reasons, unresolved items in a MessageSet are stored in a\n// message's unknown fields section in non-MessageSet format. That is, an\n// unknown item with typeID T and value V appears in the unknown fields as\n// a field with number T and value V.\n//\n// This function converts the unknown fields back into MessageSet form.\nfunc AppendUnknown(b, unknown []byte) ([]byte, error) {\n\tfor len(unknown) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(unknown)\n\t\tif n < 0 || typ != protowire.BytesType {\n\t\t\treturn nil, errors.New(\"invalid data in message set unknown fields\")\n\t\t}\n\t\tunknown = unknown[n:]\n\t\t_, n = protowire.ConsumeBytes(unknown)\n\t\tif n < 0 {\n\t\t\treturn nil, errors.New(\"invalid data in message set unknown fields\")\n\t\t}\n\t\tb = AppendFieldStart(b, num)\n\t\tb = protowire.AppendTag(b, FieldMessage, protowire.BytesType)\n\t\tb = append(b, unknown[:n]...)\n\t\tb = AppendFieldEnd(b)\n\t\tunknown = unknown[n:]\n\t}\n\treturn b, nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/encoding/tag/tag.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 tag marshals and unmarshals the legacy struct tags as generated\n// by historical versions of protoc-gen-go.\npackage tag\n\nimport (\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"google.golang.org/protobuf/internal/encoding/defval\"\n\t\"google.golang.org/protobuf/internal/filedesc\"\n\t\"google.golang.org/protobuf/internal/strs\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nvar byteType = reflect.TypeOf(byte(0))\n\n// Unmarshal decodes the tag into a prototype.Field.\n//\n// The goType is needed to determine the original protoreflect.Kind since the\n// tag does not record sufficient information to determine that.\n// The type is the underlying field type (e.g., a repeated field may be\n// represented by []T, but the Go type passed in is just T).\n// A list of enum value descriptors must be provided for enum fields.\n// This does not populate the Enum or Message.\n//\n// This function is a best effort attempt; parsing errors are ignored.\nfunc Unmarshal(tag string, goType reflect.Type, evs protoreflect.EnumValueDescriptors) protoreflect.FieldDescriptor {\n\tf := new(filedesc.Field)\n\tf.L0.ParentFile = filedesc.SurrogateProto2\n\tpacked := false\n\tfor len(tag) > 0 {\n\t\ti := strings.IndexByte(tag, ',')\n\t\tif i < 0 {\n\t\t\ti = len(tag)\n\t\t}\n\t\tswitch s := tag[:i]; {\n\t\tcase strings.HasPrefix(s, \"name=\"):\n\t\t\tf.L0.FullName = protoreflect.FullName(s[len(\"name=\"):])\n\t\tcase strings.Trim(s, \"0123456789\") == \"\":\n\t\t\tn, _ := strconv.ParseUint(s, 10, 32)\n\t\t\tf.L1.Number = protoreflect.FieldNumber(n)\n\t\tcase s == \"opt\":\n\t\t\tf.L1.Cardinality = protoreflect.Optional\n\t\tcase s == \"req\":\n\t\t\tf.L1.Cardinality = protoreflect.Required\n\t\tcase s == \"rep\":\n\t\t\tf.L1.Cardinality = protoreflect.Repeated\n\t\tcase s == \"varint\":\n\t\t\tswitch goType.Kind() {\n\t\t\tcase reflect.Bool:\n\t\t\t\tf.L1.Kind = protoreflect.BoolKind\n\t\t\tcase reflect.Int32:\n\t\t\t\tf.L1.Kind = protoreflect.Int32Kind\n\t\t\tcase reflect.Int64:\n\t\t\t\tf.L1.Kind = protoreflect.Int64Kind\n\t\t\tcase reflect.Uint32:\n\t\t\t\tf.L1.Kind = protoreflect.Uint32Kind\n\t\t\tcase reflect.Uint64:\n\t\t\t\tf.L1.Kind = protoreflect.Uint64Kind\n\t\t\t}\n\t\tcase s == \"zigzag32\":\n\t\t\tif goType.Kind() == reflect.Int32 {\n\t\t\t\tf.L1.Kind = protoreflect.Sint32Kind\n\t\t\t}\n\t\tcase s == \"zigzag64\":\n\t\t\tif goType.Kind() == reflect.Int64 {\n\t\t\t\tf.L1.Kind = protoreflect.Sint64Kind\n\t\t\t}\n\t\tcase s == \"fixed32\":\n\t\t\tswitch goType.Kind() {\n\t\t\tcase reflect.Int32:\n\t\t\t\tf.L1.Kind = protoreflect.Sfixed32Kind\n\t\t\tcase reflect.Uint32:\n\t\t\t\tf.L1.Kind = protoreflect.Fixed32Kind\n\t\t\tcase reflect.Float32:\n\t\t\t\tf.L1.Kind = protoreflect.FloatKind\n\t\t\t}\n\t\tcase s == \"fixed64\":\n\t\t\tswitch goType.Kind() {\n\t\t\tcase reflect.Int64:\n\t\t\t\tf.L1.Kind = protoreflect.Sfixed64Kind\n\t\t\tcase reflect.Uint64:\n\t\t\t\tf.L1.Kind = protoreflect.Fixed64Kind\n\t\t\tcase reflect.Float64:\n\t\t\t\tf.L1.Kind = protoreflect.DoubleKind\n\t\t\t}\n\t\tcase s == \"bytes\":\n\t\t\tswitch {\n\t\t\tcase goType.Kind() == reflect.String:\n\t\t\t\tf.L1.Kind = protoreflect.StringKind\n\t\t\tcase goType.Kind() == reflect.Slice && goType.Elem() == byteType:\n\t\t\t\tf.L1.Kind = protoreflect.BytesKind\n\t\t\tdefault:\n\t\t\t\tf.L1.Kind = protoreflect.MessageKind\n\t\t\t}\n\t\tcase s == \"group\":\n\t\t\tf.L1.Kind = protoreflect.GroupKind\n\t\tcase strings.HasPrefix(s, \"enum=\"):\n\t\t\tf.L1.Kind = protoreflect.EnumKind\n\t\tcase strings.HasPrefix(s, \"json=\"):\n\t\t\tjsonName := s[len(\"json=\"):]\n\t\t\tif jsonName != strs.JSONCamelCase(string(f.L0.FullName.Name())) {\n\t\t\t\tf.L1.StringName.InitJSON(jsonName)\n\t\t\t}\n\t\tcase s == \"packed\":\n\t\t\tpacked = true\n\t\tcase strings.HasPrefix(s, \"def=\"):\n\t\t\t// The default tag is special in that everything afterwards is the\n\t\t\t// default regardless of the presence of commas.\n\t\t\ts, i = tag[len(\"def=\"):], len(tag)\n\t\t\tv, ev, _ := defval.Unmarshal(s, f.L1.Kind, evs, defval.GoTag)\n\t\t\tf.L1.Default = filedesc.DefaultValue(v, ev)\n\t\tcase s == \"proto3\":\n\t\t\tf.L0.ParentFile = filedesc.SurrogateProto3\n\t\t}\n\t\ttag = strings.TrimPrefix(tag[i:], \",\")\n\t}\n\n\t// Update EditionFeatures after the loop and after we know whether this is\n\t// a proto2 or proto3 field.\n\tf.L1.EditionFeatures = f.L0.ParentFile.L1.EditionFeatures\n\tif packed {\n\t\tf.L1.EditionFeatures.IsPacked = true\n\t}\n\n\t// The generator uses the group message name instead of the field name.\n\t// We obtain the real field name by lowercasing the group name.\n\tif f.L1.Kind == protoreflect.GroupKind {\n\t\tf.L0.FullName = protoreflect.FullName(strings.ToLower(string(f.L0.FullName)))\n\t}\n\treturn f\n}\n\n// Marshal encodes the protoreflect.FieldDescriptor as a tag.\n//\n// The enumName must be provided if the kind is an enum.\n// Historically, the formulation of the enum \"name\" was the proto package\n// dot-concatenated with the generated Go identifier for the enum type.\n// Depending on the context on how Marshal is called, there are different ways\n// through which that information is determined. As such it is the caller's\n// responsibility to provide a function to obtain that information.\nfunc Marshal(fd protoreflect.FieldDescriptor, enumName string) string {\n\tvar tag []string\n\tswitch fd.Kind() {\n\tcase protoreflect.BoolKind, protoreflect.EnumKind, protoreflect.Int32Kind, protoreflect.Uint32Kind, protoreflect.Int64Kind, protoreflect.Uint64Kind:\n\t\ttag = append(tag, \"varint\")\n\tcase protoreflect.Sint32Kind:\n\t\ttag = append(tag, \"zigzag32\")\n\tcase protoreflect.Sint64Kind:\n\t\ttag = append(tag, \"zigzag64\")\n\tcase protoreflect.Sfixed32Kind, protoreflect.Fixed32Kind, protoreflect.FloatKind:\n\t\ttag = append(tag, \"fixed32\")\n\tcase protoreflect.Sfixed64Kind, protoreflect.Fixed64Kind, protoreflect.DoubleKind:\n\t\ttag = append(tag, \"fixed64\")\n\tcase protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind:\n\t\ttag = append(tag, \"bytes\")\n\tcase protoreflect.GroupKind:\n\t\ttag = append(tag, \"group\")\n\t}\n\ttag = append(tag, strconv.Itoa(int(fd.Number())))\n\tswitch fd.Cardinality() {\n\tcase protoreflect.Optional:\n\t\ttag = append(tag, \"opt\")\n\tcase protoreflect.Required:\n\t\ttag = append(tag, \"req\")\n\tcase protoreflect.Repeated:\n\t\ttag = append(tag, \"rep\")\n\t}\n\tif fd.IsPacked() {\n\t\ttag = append(tag, \"packed\")\n\t}\n\tname := string(fd.Name())\n\tif fd.Kind() == protoreflect.GroupKind {\n\t\t// The name of the FieldDescriptor for a group field is\n\t\t// lowercased. To find the original capitalization, we\n\t\t// look in the field's MessageType.\n\t\tname = string(fd.Message().Name())\n\t}\n\ttag = append(tag, \"name=\"+name)\n\tif jsonName := fd.JSONName(); jsonName != \"\" && jsonName != name && !fd.IsExtension() {\n\t\t// NOTE: The jsonName != name condition is suspect, but it preserve\n\t\t// the exact same semantics from the previous generator.\n\t\ttag = append(tag, \"json=\"+jsonName)\n\t}\n\t// The previous implementation does not tag extension fields as proto3,\n\t// even when the field is defined in a proto3 file. Match that behavior\n\t// for consistency.\n\tif fd.Syntax() == protoreflect.Proto3 && !fd.IsExtension() {\n\t\ttag = append(tag, \"proto3\")\n\t}\n\tif fd.Kind() == protoreflect.EnumKind && enumName != \"\" {\n\t\ttag = append(tag, \"enum=\"+enumName)\n\t}\n\tif fd.ContainingOneof() != nil {\n\t\ttag = append(tag, \"oneof\")\n\t}\n\t// This must appear last in the tag, since commas in strings aren't escaped.\n\tif fd.HasDefault() {\n\t\tdef, _ := defval.Marshal(fd.Default(), fd.DefaultEnumValue(), fd.Kind(), defval.GoTag)\n\t\ttag = append(tag, \"def=\"+def)\n\t}\n\treturn strings.Join(tag, \",\")\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/encoding/text/decode.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 text\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strconv\"\n\t\"unicode/utf8\"\n\n\t\"google.golang.org/protobuf/internal/errors\"\n)\n\n// Decoder is a token-based textproto decoder.\ntype Decoder struct {\n\t// lastCall is last method called, either readCall or peekCall.\n\t// Initial value is readCall.\n\tlastCall call\n\n\t// lastToken contains the last read token.\n\tlastToken Token\n\n\t// lastErr contains the last read error.\n\tlastErr error\n\n\t// openStack is a stack containing the byte characters for MessageOpen and\n\t// ListOpen kinds. The top of stack represents the message or the list that\n\t// the current token is nested in. An empty stack means the current token is\n\t// at the top level message. The characters '{' and '<' both represent the\n\t// MessageOpen kind.\n\topenStack []byte\n\n\t// orig is used in reporting line and column.\n\torig []byte\n\t// in contains the unconsumed input.\n\tin []byte\n}\n\n// NewDecoder returns a Decoder to read the given []byte.\nfunc NewDecoder(b []byte) *Decoder {\n\treturn &Decoder{orig: b, in: b}\n}\n\n// ErrUnexpectedEOF means that EOF was encountered in the middle of the input.\nvar ErrUnexpectedEOF = errors.New(\"%v\", io.ErrUnexpectedEOF)\n\n// call specifies which Decoder method was invoked.\ntype call uint8\n\nconst (\n\treadCall call = iota\n\tpeekCall\n)\n\n// Peek looks ahead and returns the next token and error without advancing a read.\nfunc (d *Decoder) Peek() (Token, error) {\n\tdefer func() { d.lastCall = peekCall }()\n\tif d.lastCall == readCall {\n\t\td.lastToken, d.lastErr = d.Read()\n\t}\n\treturn d.lastToken, d.lastErr\n}\n\n// Read returns the next token.\n// It will return an error if there is no valid token.\nfunc (d *Decoder) Read() (Token, error) {\n\tdefer func() { d.lastCall = readCall }()\n\tif d.lastCall == peekCall {\n\t\treturn d.lastToken, d.lastErr\n\t}\n\n\ttok, err := d.parseNext(d.lastToken.kind)\n\tif err != nil {\n\t\treturn Token{}, err\n\t}\n\n\tswitch tok.kind {\n\tcase comma, semicolon:\n\t\ttok, err = d.parseNext(tok.kind)\n\t\tif err != nil {\n\t\t\treturn Token{}, err\n\t\t}\n\t}\n\td.lastToken = tok\n\treturn tok, nil\n}\n\nconst (\n\tmismatchedFmt = \"mismatched close character %q\"\n\tunexpectedFmt = \"unexpected character %q\"\n)\n\n// parseNext parses the next Token based on given last kind.\nfunc (d *Decoder) parseNext(lastKind Kind) (Token, error) {\n\t// Trim leading spaces.\n\td.consume(0)\n\tisEOF := false\n\tif len(d.in) == 0 {\n\t\tisEOF = true\n\t}\n\n\tswitch lastKind {\n\tcase EOF:\n\t\treturn d.consumeToken(EOF, 0, 0), nil\n\n\tcase bof:\n\t\t// Start of top level message. Next token can be EOF or Name.\n\t\tif isEOF {\n\t\t\treturn d.consumeToken(EOF, 0, 0), nil\n\t\t}\n\t\treturn d.parseFieldName()\n\n\tcase Name:\n\t\t// Next token can be MessageOpen, ListOpen or Scalar.\n\t\tif isEOF {\n\t\t\treturn Token{}, ErrUnexpectedEOF\n\t\t}\n\t\tswitch ch := d.in[0]; ch {\n\t\tcase '{', '<':\n\t\t\td.pushOpenStack(ch)\n\t\t\treturn d.consumeToken(MessageOpen, 1, 0), nil\n\t\tcase '[':\n\t\t\td.pushOpenStack(ch)\n\t\t\treturn d.consumeToken(ListOpen, 1, 0), nil\n\t\tdefault:\n\t\t\treturn d.parseScalar()\n\t\t}\n\n\tcase Scalar:\n\t\topenKind, closeCh := d.currentOpenKind()\n\t\tswitch openKind {\n\t\tcase bof:\n\t\t\t// Top level message.\n\t\t\t// \tNext token can be EOF, comma, semicolon or Name.\n\t\t\tif isEOF {\n\t\t\t\treturn d.consumeToken(EOF, 0, 0), nil\n\t\t\t}\n\t\t\tswitch d.in[0] {\n\t\t\tcase ',':\n\t\t\t\treturn d.consumeToken(comma, 1, 0), nil\n\t\t\tcase ';':\n\t\t\t\treturn d.consumeToken(semicolon, 1, 0), nil\n\t\t\tdefault:\n\t\t\t\treturn d.parseFieldName()\n\t\t\t}\n\n\t\tcase MessageOpen:\n\t\t\t// Next token can be MessageClose, comma, semicolon or Name.\n\t\t\tif isEOF {\n\t\t\t\treturn Token{}, ErrUnexpectedEOF\n\t\t\t}\n\t\t\tswitch ch := d.in[0]; ch {\n\t\t\tcase closeCh:\n\t\t\t\td.popOpenStack()\n\t\t\t\treturn d.consumeToken(MessageClose, 1, 0), nil\n\t\t\tcase otherCloseChar[closeCh]:\n\t\t\t\treturn Token{}, d.newSyntaxError(mismatchedFmt, ch)\n\t\t\tcase ',':\n\t\t\t\treturn d.consumeToken(comma, 1, 0), nil\n\t\t\tcase ';':\n\t\t\t\treturn d.consumeToken(semicolon, 1, 0), nil\n\t\t\tdefault:\n\t\t\t\treturn d.parseFieldName()\n\t\t\t}\n\n\t\tcase ListOpen:\n\t\t\t// Next token can be ListClose or comma.\n\t\t\tif isEOF {\n\t\t\t\treturn Token{}, ErrUnexpectedEOF\n\t\t\t}\n\t\t\tswitch ch := d.in[0]; ch {\n\t\t\tcase ']':\n\t\t\t\td.popOpenStack()\n\t\t\t\treturn d.consumeToken(ListClose, 1, 0), nil\n\t\t\tcase ',':\n\t\t\t\treturn d.consumeToken(comma, 1, 0), nil\n\t\t\tdefault:\n\t\t\t\treturn Token{}, d.newSyntaxError(unexpectedFmt, ch)\n\t\t\t}\n\t\t}\n\n\tcase MessageOpen:\n\t\t// Next token can be MessageClose or Name.\n\t\tif isEOF {\n\t\t\treturn Token{}, ErrUnexpectedEOF\n\t\t}\n\t\t_, closeCh := d.currentOpenKind()\n\t\tswitch ch := d.in[0]; ch {\n\t\tcase closeCh:\n\t\t\td.popOpenStack()\n\t\t\treturn d.consumeToken(MessageClose, 1, 0), nil\n\t\tcase otherCloseChar[closeCh]:\n\t\t\treturn Token{}, d.newSyntaxError(mismatchedFmt, ch)\n\t\tdefault:\n\t\t\treturn d.parseFieldName()\n\t\t}\n\n\tcase MessageClose:\n\t\topenKind, closeCh := d.currentOpenKind()\n\t\tswitch openKind {\n\t\tcase bof:\n\t\t\t// Top level message.\n\t\t\t// Next token can be EOF, comma, semicolon or Name.\n\t\t\tif isEOF {\n\t\t\t\treturn d.consumeToken(EOF, 0, 0), nil\n\t\t\t}\n\t\t\tswitch ch := d.in[0]; ch {\n\t\t\tcase ',':\n\t\t\t\treturn d.consumeToken(comma, 1, 0), nil\n\t\t\tcase ';':\n\t\t\t\treturn d.consumeToken(semicolon, 1, 0), nil\n\t\t\tdefault:\n\t\t\t\treturn d.parseFieldName()\n\t\t\t}\n\n\t\tcase MessageOpen:\n\t\t\t// Next token can be MessageClose, comma, semicolon or Name.\n\t\t\tif isEOF {\n\t\t\t\treturn Token{}, ErrUnexpectedEOF\n\t\t\t}\n\t\t\tswitch ch := d.in[0]; ch {\n\t\t\tcase closeCh:\n\t\t\t\td.popOpenStack()\n\t\t\t\treturn d.consumeToken(MessageClose, 1, 0), nil\n\t\t\tcase otherCloseChar[closeCh]:\n\t\t\t\treturn Token{}, d.newSyntaxError(mismatchedFmt, ch)\n\t\t\tcase ',':\n\t\t\t\treturn d.consumeToken(comma, 1, 0), nil\n\t\t\tcase ';':\n\t\t\t\treturn d.consumeToken(semicolon, 1, 0), nil\n\t\t\tdefault:\n\t\t\t\treturn d.parseFieldName()\n\t\t\t}\n\n\t\tcase ListOpen:\n\t\t\t// Next token can be ListClose or comma\n\t\t\tif isEOF {\n\t\t\t\treturn Token{}, ErrUnexpectedEOF\n\t\t\t}\n\t\t\tswitch ch := d.in[0]; ch {\n\t\t\tcase closeCh:\n\t\t\t\td.popOpenStack()\n\t\t\t\treturn d.consumeToken(ListClose, 1, 0), nil\n\t\t\tcase ',':\n\t\t\t\treturn d.consumeToken(comma, 1, 0), nil\n\t\t\tdefault:\n\t\t\t\treturn Token{}, d.newSyntaxError(unexpectedFmt, ch)\n\t\t\t}\n\t\t}\n\n\tcase ListOpen:\n\t\t// Next token can be ListClose, MessageStart or Scalar.\n\t\tif isEOF {\n\t\t\treturn Token{}, ErrUnexpectedEOF\n\t\t}\n\t\tswitch ch := d.in[0]; ch {\n\t\tcase ']':\n\t\t\td.popOpenStack()\n\t\t\treturn d.consumeToken(ListClose, 1, 0), nil\n\t\tcase '{', '<':\n\t\t\td.pushOpenStack(ch)\n\t\t\treturn d.consumeToken(MessageOpen, 1, 0), nil\n\t\tdefault:\n\t\t\treturn d.parseScalar()\n\t\t}\n\n\tcase ListClose:\n\t\topenKind, closeCh := d.currentOpenKind()\n\t\tswitch openKind {\n\t\tcase bof:\n\t\t\t// Top level message.\n\t\t\t// Next token can be EOF, comma, semicolon or Name.\n\t\t\tif isEOF {\n\t\t\t\treturn d.consumeToken(EOF, 0, 0), nil\n\t\t\t}\n\t\t\tswitch ch := d.in[0]; ch {\n\t\t\tcase ',':\n\t\t\t\treturn d.consumeToken(comma, 1, 0), nil\n\t\t\tcase ';':\n\t\t\t\treturn d.consumeToken(semicolon, 1, 0), nil\n\t\t\tdefault:\n\t\t\t\treturn d.parseFieldName()\n\t\t\t}\n\n\t\tcase MessageOpen:\n\t\t\t// Next token can be MessageClose, comma, semicolon or Name.\n\t\t\tif isEOF {\n\t\t\t\treturn Token{}, ErrUnexpectedEOF\n\t\t\t}\n\t\t\tswitch ch := d.in[0]; ch {\n\t\t\tcase closeCh:\n\t\t\t\td.popOpenStack()\n\t\t\t\treturn d.consumeToken(MessageClose, 1, 0), nil\n\t\t\tcase otherCloseChar[closeCh]:\n\t\t\t\treturn Token{}, d.newSyntaxError(mismatchedFmt, ch)\n\t\t\tcase ',':\n\t\t\t\treturn d.consumeToken(comma, 1, 0), nil\n\t\t\tcase ';':\n\t\t\t\treturn d.consumeToken(semicolon, 1, 0), nil\n\t\t\tdefault:\n\t\t\t\treturn d.parseFieldName()\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// It is not possible to have this case. Let it panic below.\n\t\t}\n\n\tcase comma, semicolon:\n\t\topenKind, closeCh := d.currentOpenKind()\n\t\tswitch openKind {\n\t\tcase bof:\n\t\t\t// Top level message. Next token can be EOF or Name.\n\t\t\tif isEOF {\n\t\t\t\treturn d.consumeToken(EOF, 0, 0), nil\n\t\t\t}\n\t\t\treturn d.parseFieldName()\n\n\t\tcase MessageOpen:\n\t\t\t// Next token can be MessageClose or Name.\n\t\t\tif isEOF {\n\t\t\t\treturn Token{}, ErrUnexpectedEOF\n\t\t\t}\n\t\t\tswitch ch := d.in[0]; ch {\n\t\t\tcase closeCh:\n\t\t\t\td.popOpenStack()\n\t\t\t\treturn d.consumeToken(MessageClose, 1, 0), nil\n\t\t\tcase otherCloseChar[closeCh]:\n\t\t\t\treturn Token{}, d.newSyntaxError(mismatchedFmt, ch)\n\t\t\tdefault:\n\t\t\t\treturn d.parseFieldName()\n\t\t\t}\n\n\t\tcase ListOpen:\n\t\t\tif lastKind == semicolon {\n\t\t\t\t// It is not be possible to have this case as logic here\n\t\t\t\t// should not have produced a semicolon Token when inside a\n\t\t\t\t// list. Let it panic below.\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// Next token can be MessageOpen or Scalar.\n\t\t\tif isEOF {\n\t\t\t\treturn Token{}, ErrUnexpectedEOF\n\t\t\t}\n\t\t\tswitch ch := d.in[0]; ch {\n\t\t\tcase '{', '<':\n\t\t\t\td.pushOpenStack(ch)\n\t\t\t\treturn d.consumeToken(MessageOpen, 1, 0), nil\n\t\t\tdefault:\n\t\t\t\treturn d.parseScalar()\n\t\t\t}\n\t\t}\n\t}\n\n\tline, column := d.Position(len(d.orig) - len(d.in))\n\tpanic(fmt.Sprintf(\"Decoder.parseNext: bug at handling line %d:%d with lastKind=%v\", line, column, lastKind))\n}\n\nvar otherCloseChar = map[byte]byte{\n\t'}': '>',\n\t'>': '}',\n}\n\n// currentOpenKind indicates whether current position is inside a message, list\n// or top-level message by returning MessageOpen, ListOpen or bof respectively.\n// If the returned kind is either a MessageOpen or ListOpen, it also returns the\n// corresponding closing character.\nfunc (d *Decoder) currentOpenKind() (Kind, byte) {\n\tif len(d.openStack) == 0 {\n\t\treturn bof, 0\n\t}\n\topenCh := d.openStack[len(d.openStack)-1]\n\tswitch openCh {\n\tcase '{':\n\t\treturn MessageOpen, '}'\n\tcase '<':\n\t\treturn MessageOpen, '>'\n\tcase '[':\n\t\treturn ListOpen, ']'\n\t}\n\tpanic(fmt.Sprintf(\"Decoder: openStack contains invalid byte %c\", openCh))\n}\n\nfunc (d *Decoder) pushOpenStack(ch byte) {\n\td.openStack = append(d.openStack, ch)\n}\n\nfunc (d *Decoder) popOpenStack() {\n\td.openStack = d.openStack[:len(d.openStack)-1]\n}\n\n// parseFieldName parses field name and separator.\nfunc (d *Decoder) parseFieldName() (tok Token, err error) {\n\tdefer func() {\n\t\tif err == nil && d.tryConsumeChar(':') {\n\t\t\ttok.attrs |= hasSeparator\n\t\t}\n\t}()\n\n\t// Extension or Any type URL.\n\tif d.in[0] == '[' {\n\t\treturn d.parseTypeName()\n\t}\n\n\t// Identifier.\n\tif size := parseIdent(d.in, false); size > 0 {\n\t\treturn d.consumeToken(Name, size, uint8(IdentName)), nil\n\t}\n\n\t// Field number. Identify if input is a valid number that is not negative\n\t// and is decimal integer within 32-bit range.\n\tif num := parseNumber(d.in); num.size > 0 {\n\t\tstr := num.string(d.in)\n\t\tif !num.neg && num.kind == numDec {\n\t\t\tif _, err := strconv.ParseInt(str, 10, 32); err == nil {\n\t\t\t\treturn d.consumeToken(Name, num.size, uint8(FieldNumber)), nil\n\t\t\t}\n\t\t}\n\t\treturn Token{}, d.newSyntaxError(\"invalid field number: %s\", str)\n\t}\n\n\treturn Token{}, d.newSyntaxError(\"invalid field name: %s\", errId(d.in))\n}\n\n// parseTypeName parses an Any type URL or an extension field name. The name is\n// enclosed in [ and ] characters. We allow almost arbitrary type URL prefixes,\n// closely following the text-format spec [1,2]. We implement \"ExtensionName |\n// AnyName\" as follows (with some exceptions for backwards compatibility):\n//\n// char      = [-_a-zA-Z0-9]\n// url_char  = char | [.~!$&'()*+,;=] | \"%\", hex, hex\n//\n// Ident         = char, { char }\n// TypeName      = Ident, { \".\", Ident } ;\n// UrlPrefix     = url_char, { url_char | \"/\" } ;\n// ExtensionName = \"[\", TypeName, \"]\" ;\n// AnyName       = \"[\", UrlPrefix, \"/\", TypeName, \"]\" ;\n//\n// Additionally, we allow arbitrary whitespace and comments between [ and ].\n//\n// [1] https://protobuf.dev/reference/protobuf/textformat-spec/#characters\n// [2] https://protobuf.dev/reference/protobuf/textformat-spec/#field-names\nfunc (d *Decoder) parseTypeName() (Token, error) {\n\t// Use alias s to advance first in order to use d.in for error handling.\n\t// Caller already checks for [ as first character (d.in[0] == '[').\n\ts := consume(d.in[1:], 0)\n\tif len(s) == 0 {\n\t\treturn Token{}, ErrUnexpectedEOF\n\t}\n\n\t// Collect everything between [ and ] in name.\n\tvar name []byte\n\tvar closed bool\n\tfor len(s) > 0 && !closed {\n\t\tswitch {\n\t\tcase s[0] == ']':\n\t\t\ts = s[1:]\n\t\t\tclosed = true\n\n\t\tcase s[0] == '/' || isTypeNameChar(s[0]) || isUrlExtraChar(s[0]):\n\t\t\tname = append(name, s[0])\n\t\t\ts = consume(s[1:], 0)\n\n\t\t// URL percent-encoded chars\n\t\tcase s[0] == '%':\n\t\t\tif len(s) < 3 || !isHexChar(s[1]) || !isHexChar(s[2]) {\n\t\t\t\treturn Token{}, d.parseTypeNameError(s, 3)\n\t\t\t}\n\t\t\tname = append(name, s[0], s[1], s[2])\n\t\t\ts = consume(s[3:], 0)\n\n\t\tdefault:\n\t\t\treturn Token{}, d.parseTypeNameError(s, 1)\n\t\t}\n\t}\n\n\tif !closed {\n\t\treturn Token{}, ErrUnexpectedEOF\n\t}\n\n\t// Split collected name on last '/' into urlPrefix and typeName (if '/' is\n\t// present).\n\ttypeName := name\n\tif i := bytes.LastIndexByte(name, '/'); i != -1 {\n\t\turlPrefix := name[:i]\n\t\ttypeName = name[i+1:]\n\n\t\t// urlPrefix may be empty (for backwards compatibility).\n\t\t// If non-empty, it must not start with '/'.\n\t\tif len(urlPrefix) > 0 && urlPrefix[0] == '/' {\n\t\t\treturn Token{}, d.parseTypeNameError(s, 0)\n\t\t}\n\t}\n\n\t// typeName must not be empty (note: \"\" splits to [\"\"]) and all identifier\n\t// parts must not be empty.\n\tfor _, ident := range bytes.Split(typeName, []byte{'.'}) {\n\t\tif len(ident) == 0 {\n\t\t\treturn Token{}, d.parseTypeNameError(s, 0)\n\t\t}\n\t}\n\n\t// typeName must not contain any percent-encoded or special URL chars.\n\tfor _, b := range typeName {\n\t\tif b == '%' || (b != '.' && isUrlExtraChar(b)) {\n\t\t\treturn Token{}, d.parseTypeNameError(s, 0)\n\t\t}\n\t}\n\n\tstartPos := len(d.orig) - len(d.in)\n\tendPos := len(d.orig) - len(s)\n\td.in = s\n\td.consume(0)\n\n\treturn Token{\n\t\tkind:  Name,\n\t\tattrs: uint8(TypeName),\n\t\tpos:   startPos,\n\t\traw:   d.orig[startPos:endPos],\n\t\tstr:   string(name),\n\t}, nil\n}\n\nfunc (d *Decoder) parseTypeNameError(s []byte, numUnconsumedChars int) error {\n\treturn d.newSyntaxError(\n\t\t\"invalid type URL/extension field name: %s\",\n\t\td.in[:len(d.in)-len(s)+min(numUnconsumedChars, len(s))],\n\t)\n}\n\nfunc isHexChar(b byte) bool {\n\treturn ('0' <= b && b <= '9') ||\n\t\t('a' <= b && b <= 'f') ||\n\t\t('A' <= b && b <= 'F')\n}\n\nfunc isTypeNameChar(b byte) bool {\n\treturn b == '-' || b == '_' ||\n\t\t('0' <= b && b <= '9') ||\n\t\t('a' <= b && b <= 'z') ||\n\t\t('A' <= b && b <= 'Z')\n}\n\n// isUrlExtraChar complements isTypeNameChar with extra characters that we allow\n// in URLs but not in type names. Note that '/' is not included so that it can\n// be treated specially.\nfunc isUrlExtraChar(b byte) bool {\n\tswitch b {\n\tcase '.', '~', '!', '$', '&', '(', ')', '*', '+', ',', ';', '=':\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// parseIdent parses an unquoted proto identifier and returns size.\n// If allowNeg is true, it allows '-' to be the first character in the\n// identifier. This is used when parsing literal values like -infinity, etc.\n// Regular expression matches an identifier: `^[_a-zA-Z][_a-zA-Z0-9]*`\nfunc parseIdent(input []byte, allowNeg bool) int {\n\tvar size int\n\n\ts := input\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\n\tif allowNeg && s[0] == '-' {\n\t\ts = s[1:]\n\t\tsize++\n\t\tif len(s) == 0 {\n\t\t\treturn 0\n\t\t}\n\t}\n\n\tswitch {\n\tcase s[0] == '_',\n\t\t'a' <= s[0] && s[0] <= 'z',\n\t\t'A' <= s[0] && s[0] <= 'Z':\n\t\ts = s[1:]\n\t\tsize++\n\tdefault:\n\t\treturn 0\n\t}\n\n\tfor len(s) > 0 && (s[0] == '_' ||\n\t\t'a' <= s[0] && s[0] <= 'z' ||\n\t\t'A' <= s[0] && s[0] <= 'Z' ||\n\t\t'0' <= s[0] && s[0] <= '9') {\n\t\ts = s[1:]\n\t\tsize++\n\t}\n\n\tif len(s) > 0 && !isDelim(s[0]) {\n\t\treturn 0\n\t}\n\n\treturn size\n}\n\n// parseScalar parses for a string, literal or number value.\nfunc (d *Decoder) parseScalar() (Token, error) {\n\tif d.in[0] == '\"' || d.in[0] == '\\'' {\n\t\treturn d.parseStringValue()\n\t}\n\n\tif tok, ok := d.parseLiteralValue(); ok {\n\t\treturn tok, nil\n\t}\n\n\tif tok, ok := d.parseNumberValue(); ok {\n\t\treturn tok, nil\n\t}\n\n\treturn Token{}, d.newSyntaxError(\"invalid scalar value: %s\", errId(d.in))\n}\n\n// parseLiteralValue parses a literal value. A literal value is used for\n// bools, special floats and enums. This function simply identifies that the\n// field value is a literal.\nfunc (d *Decoder) parseLiteralValue() (Token, bool) {\n\tsize := parseIdent(d.in, true)\n\tif size == 0 {\n\t\treturn Token{}, false\n\t}\n\treturn d.consumeToken(Scalar, size, literalValue), true\n}\n\n// consumeToken constructs a Token for given Kind from d.in and consumes given\n// size-length from it.\nfunc (d *Decoder) consumeToken(kind Kind, size int, attrs uint8) Token {\n\t// Important to compute raw and pos before consuming.\n\ttok := Token{\n\t\tkind:  kind,\n\t\tattrs: attrs,\n\t\tpos:   len(d.orig) - len(d.in),\n\t\traw:   d.in[:size],\n\t}\n\td.consume(size)\n\treturn tok\n}\n\n// newSyntaxError returns a syntax error with line and column information for\n// current position.\nfunc (d *Decoder) newSyntaxError(f string, x ...any) error {\n\te := errors.New(f, x...)\n\tline, column := d.Position(len(d.orig) - len(d.in))\n\treturn errors.New(\"syntax error (line %d:%d): %v\", line, column, e)\n}\n\n// Position returns line and column number of given index of the original input.\n// It will panic if index is out of range.\nfunc (d *Decoder) Position(idx int) (line int, column int) {\n\tb := d.orig[:idx]\n\tline = bytes.Count(b, []byte(\"\\n\")) + 1\n\tif i := bytes.LastIndexByte(b, '\\n'); i >= 0 {\n\t\tb = b[i+1:]\n\t}\n\tcolumn = utf8.RuneCount(b) + 1 // ignore multi-rune characters\n\treturn line, column\n}\n\nfunc (d *Decoder) tryConsumeChar(c byte) bool {\n\tif len(d.in) > 0 && d.in[0] == c {\n\t\td.consume(1)\n\t\treturn true\n\t}\n\treturn false\n}\n\n// consume consumes n bytes of input and any subsequent whitespace or comments.\nfunc (d *Decoder) consume(n int) {\n\td.in = consume(d.in, n)\n\treturn\n}\n\n// consume consumes n bytes of input and any subsequent whitespace or comments.\nfunc consume(b []byte, n int) []byte {\n\tb = b[n:]\n\tfor len(b) > 0 {\n\t\tswitch b[0] {\n\t\tcase ' ', '\\n', '\\r', '\\t':\n\t\t\tb = b[1:]\n\t\tcase '#':\n\t\t\tif i := bytes.IndexByte(b, '\\n'); i >= 0 {\n\t\t\t\tb = b[i+len(\"\\n\"):]\n\t\t\t} else {\n\t\t\t\tb = nil\n\t\t\t}\n\t\tdefault:\n\t\t\treturn b\n\t\t}\n\t}\n\treturn b\n}\n\n// errId extracts a byte sequence that looks like an invalid ID\n// (for the purposes of error reporting).\nfunc errId(seq []byte) []byte {\n\tconst maxLen = 32\n\tfor i := 0; i < len(seq); {\n\t\tif i > maxLen {\n\t\t\treturn append(seq[:i:i], \"…\"...)\n\t\t}\n\t\tr, size := utf8.DecodeRune(seq[i:])\n\t\tif r > utf8.RuneSelf || (r != '/' && isDelim(byte(r))) {\n\t\t\tif i == 0 {\n\t\t\t\t// Either the first byte is invalid UTF-8 or a\n\t\t\t\t// delimiter, or the first rune is non-ASCII.\n\t\t\t\t// Return it as-is.\n\t\t\t\ti = size\n\t\t\t}\n\t\t\treturn seq[:i:i]\n\t\t}\n\t\ti += size\n\t}\n\t// No delimiter found.\n\treturn seq\n}\n\n// isDelim returns true if given byte is a delimiter character.\nfunc isDelim(c byte) bool {\n\treturn !(c == '-' || c == '+' || c == '.' || c == '_' ||\n\t\t('a' <= c && c <= 'z') ||\n\t\t('A' <= c && c <= 'Z') ||\n\t\t('0' <= c && c <= '9'))\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.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 text\n\n// parseNumberValue parses a number from the input and returns a Token object.\nfunc (d *Decoder) parseNumberValue() (Token, bool) {\n\tin := d.in\n\tnum := parseNumber(in)\n\tif num.size == 0 {\n\t\treturn Token{}, false\n\t}\n\tnumAttrs := num.kind\n\tif num.neg {\n\t\tnumAttrs |= isNegative\n\t}\n\ttok := Token{\n\t\tkind:     Scalar,\n\t\tattrs:    numberValue,\n\t\tpos:      len(d.orig) - len(d.in),\n\t\traw:      d.in[:num.size],\n\t\tstr:      num.string(d.in),\n\t\tnumAttrs: numAttrs,\n\t}\n\td.consume(num.size)\n\treturn tok, true\n}\n\nconst (\n\tnumDec uint8 = (1 << iota) / 2\n\tnumHex\n\tnumOct\n\tnumFloat\n)\n\n// number is the result of parsing out a valid number from parseNumber. It\n// contains data for doing float or integer conversion via the strconv package\n// in conjunction with the input bytes.\ntype number struct {\n\tkind uint8\n\tneg  bool\n\tsize int\n\t// if neg, this is the length of whitespace and comments between\n\t// the minus sign and the rest fo the number literal\n\tsep int\n}\n\nfunc (num number) string(data []byte) string {\n\tstrSize := num.size\n\tlast := num.size - 1\n\tif num.kind == numFloat && (data[last] == 'f' || data[last] == 'F') {\n\t\tstrSize = last\n\t}\n\tif num.neg && num.sep > 0 {\n\t\t// strip whitespace/comments between negative sign and the rest\n\t\tstrLen := strSize - num.sep\n\t\tstr := make([]byte, strLen)\n\t\tstr[0] = data[0]\n\t\tcopy(str[1:], data[num.sep+1:strSize])\n\t\treturn string(str)\n\t}\n\treturn string(data[:strSize])\n\n}\n\n// parseNumber constructs a number object from given input. It allows for the\n// following patterns:\n//\n//\tinteger: ^-?([1-9][0-9]*|0[xX][0-9a-fA-F]+|0[0-7]*)\n//\tfloat: ^-?((0|[1-9][0-9]*)?([.][0-9]*)?([eE][+-]?[0-9]+)?[fF]?)\n//\n// It also returns the number of parsed bytes for the given number, 0 if it is\n// not a number.\nfunc parseNumber(input []byte) number {\n\tkind := numDec\n\tvar size int\n\tvar neg bool\n\n\ts := input\n\tif len(s) == 0 {\n\t\treturn number{}\n\t}\n\n\t// Optional -\n\tvar sep int\n\tif s[0] == '-' {\n\t\tneg = true\n\t\ts = s[1:]\n\t\tsize++\n\t\t// Consume any whitespace or comments between the\n\t\t// negative sign and the rest of the number\n\t\tlenBefore := len(s)\n\t\ts = consume(s, 0)\n\t\tsep = lenBefore - len(s)\n\t\tsize += sep\n\t\tif len(s) == 0 {\n\t\t\treturn number{}\n\t\t}\n\t}\n\n\tswitch {\n\tcase s[0] == '0':\n\t\tif len(s) > 1 {\n\t\t\tswitch {\n\t\t\tcase s[1] == 'x' || s[1] == 'X':\n\t\t\t\t// Parse as hex number.\n\t\t\t\tkind = numHex\n\t\t\t\tn := 2\n\t\t\t\ts = s[2:]\n\t\t\t\tfor len(s) > 0 && (('0' <= s[0] && s[0] <= '9') ||\n\t\t\t\t\t('a' <= s[0] && s[0] <= 'f') ||\n\t\t\t\t\t('A' <= s[0] && s[0] <= 'F')) {\n\t\t\t\t\ts = s[1:]\n\t\t\t\t\tn++\n\t\t\t\t}\n\t\t\t\tif n == 2 {\n\t\t\t\t\treturn number{}\n\t\t\t\t}\n\t\t\t\tsize += n\n\n\t\t\tcase '0' <= s[1] && s[1] <= '7':\n\t\t\t\t// Parse as octal number.\n\t\t\t\tkind = numOct\n\t\t\t\tn := 2\n\t\t\t\ts = s[2:]\n\t\t\t\tfor len(s) > 0 && '0' <= s[0] && s[0] <= '7' {\n\t\t\t\t\ts = s[1:]\n\t\t\t\t\tn++\n\t\t\t\t}\n\t\t\t\tsize += n\n\t\t\t}\n\n\t\t\tif kind&(numHex|numOct) > 0 {\n\t\t\t\tif len(s) > 0 && !isDelim(s[0]) {\n\t\t\t\t\treturn number{}\n\t\t\t\t}\n\t\t\t\treturn number{kind: kind, neg: neg, size: size, sep: sep}\n\t\t\t}\n\t\t}\n\t\ts = s[1:]\n\t\tsize++\n\n\tcase '1' <= s[0] && s[0] <= '9':\n\t\tn := 1\n\t\ts = s[1:]\n\t\tfor len(s) > 0 && '0' <= s[0] && s[0] <= '9' {\n\t\t\ts = s[1:]\n\t\t\tn++\n\t\t}\n\t\tsize += n\n\n\tcase s[0] == '.':\n\t\t// Set kind to numFloat to signify the intent to parse as float. And\n\t\t// that it needs to have other digits after '.'.\n\t\tkind = numFloat\n\n\tdefault:\n\t\treturn number{}\n\t}\n\n\t// . followed by 0 or more digits.\n\tif len(s) > 0 && s[0] == '.' {\n\t\tn := 1\n\t\ts = s[1:]\n\t\t// If decimal point was before any digits, it should be followed by\n\t\t// other digits.\n\t\tif len(s) == 0 && kind == numFloat {\n\t\t\treturn number{}\n\t\t}\n\t\tfor len(s) > 0 && '0' <= s[0] && s[0] <= '9' {\n\t\t\ts = s[1:]\n\t\t\tn++\n\t\t}\n\t\tsize += n\n\t\tkind = numFloat\n\t}\n\n\t// e or E followed by an optional - or + and 1 or more digits.\n\tif len(s) >= 2 && (s[0] == 'e' || s[0] == 'E') {\n\t\tkind = numFloat\n\t\ts = s[1:]\n\t\tn := 1\n\t\tif s[0] == '+' || s[0] == '-' {\n\t\t\ts = s[1:]\n\t\t\tn++\n\t\t\tif len(s) == 0 {\n\t\t\t\treturn number{}\n\t\t\t}\n\t\t}\n\t\tfor len(s) > 0 && '0' <= s[0] && s[0] <= '9' {\n\t\t\ts = s[1:]\n\t\t\tn++\n\t\t}\n\t\tsize += n\n\t}\n\n\t// Optional suffix f or F for floats.\n\tif len(s) > 0 && (s[0] == 'f' || s[0] == 'F') {\n\t\tkind = numFloat\n\t\ts = s[1:]\n\t\tsize++\n\t}\n\n\t// Check that next byte is a delimiter or it is at the end.\n\tif len(s) > 0 && !isDelim(s[0]) {\n\t\treturn number{}\n\t}\n\n\treturn number{kind: kind, neg: neg, size: size, sep: sep}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.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 text\n\nimport (\n\t\"bytes\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf16\"\n\t\"unicode/utf8\"\n\n\t\"google.golang.org/protobuf/internal/strs\"\n)\n\n// parseStringValue parses string field token.\n// This differs from parseString since the text format allows\n// multiple back-to-back string literals where they are semantically treated\n// as a single large string with all values concatenated.\n//\n// E.g., `\"foo\" \"bar\" \"baz\"` => \"foobarbaz\"\nfunc (d *Decoder) parseStringValue() (Token, error) {\n\t// Note that the ending quote is sufficient to unambiguously mark the end\n\t// of a string. Thus, the text grammar does not require intervening\n\t// whitespace or control characters in-between strings.\n\t// Thus, the following is valid:\n\t//\t`\"foo\"'bar'\"baz\"` => \"foobarbaz\"\n\tin0 := d.in\n\tvar ss []string\n\tfor len(d.in) > 0 && (d.in[0] == '\"' || d.in[0] == '\\'') {\n\t\ts, err := d.parseString()\n\t\tif err != nil {\n\t\t\treturn Token{}, err\n\t\t}\n\t\tss = append(ss, s)\n\t}\n\t// d.in already points to the end of the value at this point.\n\treturn Token{\n\t\tkind:  Scalar,\n\t\tattrs: stringValue,\n\t\tpos:   len(d.orig) - len(in0),\n\t\traw:   in0[:len(in0)-len(d.in)],\n\t\tstr:   strings.Join(ss, \"\"),\n\t}, nil\n}\n\n// parseString parses a string value enclosed in \" or '.\nfunc (d *Decoder) parseString() (string, error) {\n\tin := d.in\n\tif len(in) == 0 {\n\t\treturn \"\", ErrUnexpectedEOF\n\t}\n\tquote := in[0]\n\tin = in[1:]\n\ti := indexNeedEscapeInBytes(in)\n\tin, out := in[i:], in[:i:i] // set cap to prevent mutations\n\tfor len(in) > 0 {\n\t\tswitch r, n := utf8.DecodeRune(in); {\n\t\tcase r == utf8.RuneError && n == 1:\n\t\t\treturn \"\", d.newSyntaxError(\"invalid UTF-8 detected\")\n\t\tcase r == 0 || r == '\\n':\n\t\t\treturn \"\", d.newSyntaxError(\"invalid character %q in string\", r)\n\t\tcase r == rune(quote):\n\t\t\tin = in[1:]\n\t\t\td.consume(len(d.in) - len(in))\n\t\t\treturn string(out), nil\n\t\tcase r == '\\\\':\n\t\t\tif len(in) < 2 {\n\t\t\t\treturn \"\", ErrUnexpectedEOF\n\t\t\t}\n\t\t\tswitch r := in[1]; r {\n\t\t\tcase '\"', '\\'', '\\\\', '?':\n\t\t\t\tin, out = in[2:], append(out, r)\n\t\t\tcase 'a':\n\t\t\t\tin, out = in[2:], append(out, '\\a')\n\t\t\tcase 'b':\n\t\t\t\tin, out = in[2:], append(out, '\\b')\n\t\t\tcase 'n':\n\t\t\t\tin, out = in[2:], append(out, '\\n')\n\t\t\tcase 'r':\n\t\t\t\tin, out = in[2:], append(out, '\\r')\n\t\t\tcase 't':\n\t\t\t\tin, out = in[2:], append(out, '\\t')\n\t\t\tcase 'v':\n\t\t\t\tin, out = in[2:], append(out, '\\v')\n\t\t\tcase 'f':\n\t\t\t\tin, out = in[2:], append(out, '\\f')\n\t\t\tcase '0', '1', '2', '3', '4', '5', '6', '7':\n\t\t\t\t// One, two, or three octal characters.\n\t\t\t\tn := len(in[1:]) - len(bytes.TrimLeft(in[1:], \"01234567\"))\n\t\t\t\tif n > 3 {\n\t\t\t\t\tn = 3\n\t\t\t\t}\n\t\t\t\tv, err := strconv.ParseUint(string(in[1:1+n]), 8, 8)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn \"\", d.newSyntaxError(\"invalid octal escape code %q in string\", in[:1+n])\n\t\t\t\t}\n\t\t\t\tin, out = in[1+n:], append(out, byte(v))\n\t\t\tcase 'x':\n\t\t\t\t// One or two hexadecimal characters.\n\t\t\t\tn := len(in[2:]) - len(bytes.TrimLeft(in[2:], \"0123456789abcdefABCDEF\"))\n\t\t\t\tif n > 2 {\n\t\t\t\t\tn = 2\n\t\t\t\t}\n\t\t\t\tv, err := strconv.ParseUint(string(in[2:2+n]), 16, 8)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn \"\", d.newSyntaxError(\"invalid hex escape code %q in string\", in[:2+n])\n\t\t\t\t}\n\t\t\t\tin, out = in[2+n:], append(out, byte(v))\n\t\t\tcase 'u', 'U':\n\t\t\t\t// Four or eight hexadecimal characters\n\t\t\t\tn := 6\n\t\t\t\tif r == 'U' {\n\t\t\t\t\tn = 10\n\t\t\t\t}\n\t\t\t\tif len(in) < n {\n\t\t\t\t\treturn \"\", ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tv, err := strconv.ParseUint(string(in[2:n]), 16, 32)\n\t\t\t\tif utf8.MaxRune < v || err != nil {\n\t\t\t\t\treturn \"\", d.newSyntaxError(\"invalid Unicode escape code %q in string\", in[:n])\n\t\t\t\t}\n\t\t\t\tin = in[n:]\n\n\t\t\t\tr := rune(v)\n\t\t\t\tif utf16.IsSurrogate(r) {\n\t\t\t\t\tif len(in) < 6 {\n\t\t\t\t\t\treturn \"\", ErrUnexpectedEOF\n\t\t\t\t\t}\n\t\t\t\t\tv, err := strconv.ParseUint(string(in[2:6]), 16, 16)\n\t\t\t\t\tr = utf16.DecodeRune(r, rune(v))\n\t\t\t\t\tif in[0] != '\\\\' || in[1] != 'u' || r == unicode.ReplacementChar || err != nil {\n\t\t\t\t\t\treturn \"\", d.newSyntaxError(\"invalid Unicode escape code %q in string\", in[:6])\n\t\t\t\t\t}\n\t\t\t\t\tin = in[6:]\n\t\t\t\t}\n\t\t\t\tout = append(out, string(r)...)\n\t\t\tdefault:\n\t\t\t\treturn \"\", d.newSyntaxError(\"invalid escape code %q in string\", in[:2])\n\t\t\t}\n\t\tdefault:\n\t\t\ti := indexNeedEscapeInBytes(in[n:])\n\t\t\tin, out = in[n+i:], append(out, in[:n+i]...)\n\t\t}\n\t}\n\treturn \"\", ErrUnexpectedEOF\n}\n\n// indexNeedEscapeInString returns the index of the character that needs\n// escaping. If no characters need escaping, this returns the input length.\nfunc indexNeedEscapeInBytes(b []byte) int { return indexNeedEscapeInString(strs.UnsafeString(b)) }\n\n// UnmarshalString returns an unescaped string given a textproto string value.\n// String value needs to contain single or double quotes. This is only used by\n// internal/encoding/defval package for unmarshaling bytes.\nfunc UnmarshalString(s string) (string, error) {\n\td := NewDecoder([]byte(s))\n\treturn d.parseString()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.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 text\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"math\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"google.golang.org/protobuf/internal/flags\"\n)\n\n// Kind represents a token kind expressible in the textproto format.\ntype Kind uint8\n\n// Kind values.\nconst (\n\tInvalid Kind = iota\n\tEOF\n\tName   // Name indicates the field name.\n\tScalar // Scalar are scalar values, e.g. \"string\", 47, ENUM_LITERAL, true.\n\tMessageOpen\n\tMessageClose\n\tListOpen\n\tListClose\n\n\t// comma and semi-colon are only for parsing in between values and should not be exposed.\n\tcomma\n\tsemicolon\n\n\t// bof indicates beginning of file, which is the default token\n\t// kind at the beginning of parsing.\n\tbof = Invalid\n)\n\nfunc (t Kind) String() string {\n\tswitch t {\n\tcase Invalid:\n\t\treturn \"<invalid>\"\n\tcase EOF:\n\t\treturn \"eof\"\n\tcase Scalar:\n\t\treturn \"scalar\"\n\tcase Name:\n\t\treturn \"name\"\n\tcase MessageOpen:\n\t\treturn \"{\"\n\tcase MessageClose:\n\t\treturn \"}\"\n\tcase ListOpen:\n\t\treturn \"[\"\n\tcase ListClose:\n\t\treturn \"]\"\n\tcase comma:\n\t\treturn \",\"\n\tcase semicolon:\n\t\treturn \";\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"<invalid:%v>\", uint8(t))\n\t}\n}\n\n// NameKind represents different types of field names.\ntype NameKind uint8\n\n// NameKind values.\nconst (\n\tIdentName NameKind = iota + 1\n\tTypeName\n\tFieldNumber\n)\n\nfunc (t NameKind) String() string {\n\tswitch t {\n\tcase IdentName:\n\t\treturn \"IdentName\"\n\tcase TypeName:\n\t\treturn \"TypeName\"\n\tcase FieldNumber:\n\t\treturn \"FieldNumber\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"<invalid:%v>\", uint8(t))\n\t}\n}\n\n// Bit mask in Token.attrs to indicate if a Name token is followed by the\n// separator char ':'. The field name separator char is optional for message\n// field or repeated message field, but required for all other types. Decoder\n// simply indicates whether a Name token is followed by separator or not.  It is\n// up to the prototext package to validate.\nconst hasSeparator = 1 << 7\n\n// Scalar value types.\nconst (\n\tnumberValue = iota + 1\n\tstringValue\n\tliteralValue\n)\n\n// Bit mask in Token.numAttrs to indicate that the number is a negative.\nconst isNegative = 1 << 7\n\n// Token provides a parsed token kind and value. Values are provided by the\n// different accessor methods.\ntype Token struct {\n\t// Kind of the Token object.\n\tkind Kind\n\t// attrs contains metadata for the following Kinds:\n\t// Name: hasSeparator bit and one of NameKind.\n\t// Scalar: one of numberValue, stringValue, literalValue.\n\tattrs uint8\n\t// numAttrs contains metadata for numberValue:\n\t// - highest bit is whether negative or positive.\n\t// - lower bits indicate one of numDec, numHex, numOct, numFloat.\n\tnumAttrs uint8\n\t// pos provides the position of the token in the original input.\n\tpos int\n\t// raw bytes of the serialized token.\n\t// This is a subslice into the original input.\n\traw []byte\n\t// str contains parsed string for the following:\n\t// - stringValue of Scalar kind\n\t// - numberValue of Scalar kind\n\t// - TypeName of Name kind\n\tstr string\n}\n\n// Kind returns the token kind.\nfunc (t Token) Kind() Kind {\n\treturn t.kind\n}\n\n// RawString returns the read value in string.\nfunc (t Token) RawString() string {\n\treturn string(t.raw)\n}\n\n// Pos returns the token position from the input.\nfunc (t Token) Pos() int {\n\treturn t.pos\n}\n\n// NameKind returns IdentName, TypeName or FieldNumber.\n// It panics if type is not Name.\nfunc (t Token) NameKind() NameKind {\n\tif t.kind == Name {\n\t\treturn NameKind(t.attrs &^ hasSeparator)\n\t}\n\tpanic(fmt.Sprintf(\"Token is not a Name type: %s\", t.kind))\n}\n\n// HasSeparator returns true if the field name is followed by the separator char\n// ':', else false. It panics if type is not Name.\nfunc (t Token) HasSeparator() bool {\n\tif t.kind == Name {\n\t\treturn t.attrs&hasSeparator != 0\n\t}\n\tpanic(fmt.Sprintf(\"Token is not a Name type: %s\", t.kind))\n}\n\n// IdentName returns the value for IdentName type.\nfunc (t Token) IdentName() string {\n\tif t.kind == Name && t.attrs&uint8(IdentName) != 0 {\n\t\treturn string(t.raw)\n\t}\n\tpanic(fmt.Sprintf(\"Token is not an IdentName: %s:%s\", t.kind, NameKind(t.attrs&^hasSeparator)))\n}\n\n// TypeName returns the value for TypeName type.\nfunc (t Token) TypeName() string {\n\tif t.kind == Name && t.attrs&uint8(TypeName) != 0 {\n\t\treturn t.str\n\t}\n\tpanic(fmt.Sprintf(\"Token is not a TypeName: %s:%s\", t.kind, NameKind(t.attrs&^hasSeparator)))\n}\n\n// FieldNumber returns the value for FieldNumber type. It returns a\n// non-negative int32 value. Caller will still need to validate for the correct\n// field number range.\nfunc (t Token) FieldNumber() int32 {\n\tif t.kind != Name || t.attrs&uint8(FieldNumber) == 0 {\n\t\tpanic(fmt.Sprintf(\"Token is not a FieldNumber: %s:%s\", t.kind, NameKind(t.attrs&^hasSeparator)))\n\t}\n\t// Following should not return an error as it had already been called right\n\t// before this Token was constructed.\n\tnum, _ := strconv.ParseInt(string(t.raw), 10, 32)\n\treturn int32(num)\n}\n\n// String returns the string value for a Scalar type.\nfunc (t Token) String() (string, bool) {\n\tif t.kind != Scalar || t.attrs != stringValue {\n\t\treturn \"\", false\n\t}\n\treturn t.str, true\n}\n\n// Enum returns the literal value for a Scalar type for use as enum literals.\nfunc (t Token) Enum() (string, bool) {\n\tif t.kind != Scalar || t.attrs != literalValue || (len(t.raw) > 0 && t.raw[0] == '-') {\n\t\treturn \"\", false\n\t}\n\treturn string(t.raw), true\n}\n\n// Bool returns the bool value for a Scalar type.\nfunc (t Token) Bool() (bool, bool) {\n\tif t.kind != Scalar {\n\t\treturn false, false\n\t}\n\tswitch t.attrs {\n\tcase literalValue:\n\t\tif b, ok := boolLits[string(t.raw)]; ok {\n\t\t\treturn b, true\n\t\t}\n\tcase numberValue:\n\t\t// Unsigned integer representation of 0 or 1 is permitted: 00, 0x0, 01,\n\t\t// 0x1, etc.\n\t\tn, err := strconv.ParseUint(t.str, 0, 64)\n\t\tif err == nil {\n\t\t\tswitch n {\n\t\t\tcase 0:\n\t\t\t\treturn false, true\n\t\t\tcase 1:\n\t\t\t\treturn true, true\n\t\t\t}\n\t\t}\n\t}\n\treturn false, false\n}\n\n// These exact boolean literals are the ones supported in C++.\nvar boolLits = map[string]bool{\n\t\"t\":     true,\n\t\"true\":  true,\n\t\"True\":  true,\n\t\"f\":     false,\n\t\"false\": false,\n\t\"False\": false,\n}\n\n// Uint64 returns the uint64 value for a Scalar type.\nfunc (t Token) Uint64() (uint64, bool) {\n\tif t.kind != Scalar || t.attrs != numberValue ||\n\t\tt.numAttrs&isNegative > 0 || t.numAttrs&numFloat > 0 {\n\t\treturn 0, false\n\t}\n\tn, err := strconv.ParseUint(t.str, 0, 64)\n\tif err != nil {\n\t\treturn 0, false\n\t}\n\treturn n, true\n}\n\n// Uint32 returns the uint32 value for a Scalar type.\nfunc (t Token) Uint32() (uint32, bool) {\n\tif t.kind != Scalar || t.attrs != numberValue ||\n\t\tt.numAttrs&isNegative > 0 || t.numAttrs&numFloat > 0 {\n\t\treturn 0, false\n\t}\n\tn, err := strconv.ParseUint(t.str, 0, 32)\n\tif err != nil {\n\t\treturn 0, false\n\t}\n\treturn uint32(n), true\n}\n\n// Int64 returns the int64 value for a Scalar type.\nfunc (t Token) Int64() (int64, bool) {\n\tif t.kind != Scalar || t.attrs != numberValue || t.numAttrs&numFloat > 0 {\n\t\treturn 0, false\n\t}\n\tif n, err := strconv.ParseInt(t.str, 0, 64); err == nil {\n\t\treturn n, true\n\t}\n\t// C++ accepts large positive hex numbers as negative values.\n\t// This feature is here for proto1 backwards compatibility purposes.\n\tif flags.ProtoLegacy && (t.numAttrs == numHex) {\n\t\tif n, err := strconv.ParseUint(t.str, 0, 64); err == nil {\n\t\t\treturn int64(n), true\n\t\t}\n\t}\n\treturn 0, false\n}\n\n// Int32 returns the int32 value for a Scalar type.\nfunc (t Token) Int32() (int32, bool) {\n\tif t.kind != Scalar || t.attrs != numberValue || t.numAttrs&numFloat > 0 {\n\t\treturn 0, false\n\t}\n\tif n, err := strconv.ParseInt(t.str, 0, 32); err == nil {\n\t\treturn int32(n), true\n\t}\n\t// C++ accepts large positive hex numbers as negative values.\n\t// This feature is here for proto1 backwards compatibility purposes.\n\tif flags.ProtoLegacy && (t.numAttrs == numHex) {\n\t\tif n, err := strconv.ParseUint(t.str, 0, 32); err == nil {\n\t\t\treturn int32(n), true\n\t\t}\n\t}\n\treturn 0, false\n}\n\n// Float64 returns the float64 value for a Scalar type.\nfunc (t Token) Float64() (float64, bool) {\n\tif t.kind != Scalar {\n\t\treturn 0, false\n\t}\n\tswitch t.attrs {\n\tcase literalValue:\n\t\tif f, ok := floatLits[strings.ToLower(string(t.raw))]; ok {\n\t\t\treturn f, true\n\t\t}\n\tcase numberValue:\n\t\tn, err := strconv.ParseFloat(t.str, 64)\n\t\tif err == nil {\n\t\t\treturn n, true\n\t\t}\n\t\tnerr := err.(*strconv.NumError)\n\t\tif nerr.Err == strconv.ErrRange {\n\t\t\treturn n, true\n\t\t}\n\t}\n\treturn 0, false\n}\n\n// Float32 returns the float32 value for a Scalar type.\nfunc (t Token) Float32() (float32, bool) {\n\tif t.kind != Scalar {\n\t\treturn 0, false\n\t}\n\tswitch t.attrs {\n\tcase literalValue:\n\t\tif f, ok := floatLits[strings.ToLower(string(t.raw))]; ok {\n\t\t\treturn float32(f), true\n\t\t}\n\tcase numberValue:\n\t\tn, err := strconv.ParseFloat(t.str, 64)\n\t\tif err == nil {\n\t\t\t// Overflows are treated as (-)infinity.\n\t\t\treturn float32(n), true\n\t\t}\n\t\tnerr := err.(*strconv.NumError)\n\t\tif nerr.Err == strconv.ErrRange {\n\t\t\treturn float32(n), true\n\t\t}\n\t}\n\treturn 0, false\n}\n\n// These are the supported float literals which C++ permits case-insensitive\n// variants of these.\nvar floatLits = map[string]float64{\n\t\"nan\":       math.NaN(),\n\t\"inf\":       math.Inf(1),\n\t\"infinity\":  math.Inf(1),\n\t\"-inf\":      math.Inf(-1),\n\t\"-infinity\": math.Inf(-1),\n}\n\n// TokenEquals returns true if given Tokens are equal, else false.\nfunc TokenEquals(x, y Token) bool {\n\treturn x.kind == y.kind &&\n\t\tx.attrs == y.attrs &&\n\t\tx.numAttrs == y.numAttrs &&\n\t\tx.pos == y.pos &&\n\t\tbytes.Equal(x.raw, y.raw) &&\n\t\tx.str == y.str\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/encoding/text/doc.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 text implements the text format for protocol buffers.\n// This package has no semantic understanding for protocol buffers and is only\n// a parser and composer for the format.\n//\n// There is no formal specification for the protobuf text format, as such the\n// C++ implementation (see google::protobuf::TextFormat) is the reference\n// implementation of the text format.\n//\n// This package is neither a superset nor a subset of the C++ implementation.\n// This implementation permits a more liberal grammar in some cases to be\n// backwards compatible with the historical Go implementation.\n// Future parsings unique to Go should not be added.\n// Some grammars allowed by the C++ implementation are deliberately\n// not implemented here because they are considered a bug by the protobuf team\n// and should not be replicated.\n//\n// The Go implementation should implement a sufficient amount of the C++\n// grammar such that the default text serialization by C++ can be parsed by Go.\n// However, just because the C++ parser accepts some input does not mean that\n// the Go implementation should as well.\n//\n// The text format is almost a superset of JSON except:\n//   - message keys are not quoted strings, but identifiers\n//   - the top-level value must be a message without the delimiters\npackage text\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/encoding/text/encode.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 text\n\nimport (\n\t\"math\"\n\t\"math/bits\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode/utf8\"\n\n\t\"google.golang.org/protobuf/internal/detrand\"\n\t\"google.golang.org/protobuf/internal/errors\"\n)\n\n// encType represents an encoding type.\ntype encType uint8\n\nconst (\n\t_ encType = (1 << iota) / 2\n\tname\n\tscalar\n\tmessageOpen\n\tmessageClose\n)\n\n// Encoder provides methods to write out textproto constructs and values. The user is\n// responsible for producing valid sequences of constructs and values.\ntype Encoder struct {\n\tencoderState\n\n\tindent      string\n\tdelims      [2]byte\n\toutputASCII bool\n}\n\ntype encoderState struct {\n\tlastType encType\n\tindents  []byte\n\tout      []byte\n}\n\n// NewEncoder returns an Encoder.\n//\n// If indent is a non-empty string, it causes every entry in a List or Message\n// to be preceded by the indent and trailed by a newline.\n//\n// If delims is not the zero value, it controls the delimiter characters used\n// for messages (e.g., \"{}\" vs \"<>\").\n//\n// If outputASCII is true, strings will be serialized in such a way that\n// multi-byte UTF-8 sequences are escaped. This property ensures that the\n// overall output is ASCII (as opposed to UTF-8).\nfunc NewEncoder(buf []byte, indent string, delims [2]byte, outputASCII bool) (*Encoder, error) {\n\te := &Encoder{\n\t\tencoderState: encoderState{out: buf},\n\t}\n\tif len(indent) > 0 {\n\t\tif strings.Trim(indent, \" \\t\") != \"\" {\n\t\t\treturn nil, errors.New(\"indent may only be composed of space and tab characters\")\n\t\t}\n\t\te.indent = indent\n\t}\n\tswitch delims {\n\tcase [2]byte{0, 0}:\n\t\te.delims = [2]byte{'{', '}'}\n\tcase [2]byte{'{', '}'}, [2]byte{'<', '>'}:\n\t\te.delims = delims\n\tdefault:\n\t\treturn nil, errors.New(\"delimiters may only be \\\"{}\\\" or \\\"<>\\\"\")\n\t}\n\te.outputASCII = outputASCII\n\n\treturn e, nil\n}\n\n// Bytes returns the content of the written bytes.\nfunc (e *Encoder) Bytes() []byte {\n\treturn e.out\n}\n\n// StartMessage writes out the '{' or '<' symbol.\nfunc (e *Encoder) StartMessage() {\n\te.prepareNext(messageOpen)\n\te.out = append(e.out, e.delims[0])\n}\n\n// EndMessage writes out the '}' or '>' symbol.\nfunc (e *Encoder) EndMessage() {\n\te.prepareNext(messageClose)\n\te.out = append(e.out, e.delims[1])\n}\n\n// WriteName writes out the field name and the separator ':'.\nfunc (e *Encoder) WriteName(s string) {\n\te.prepareNext(name)\n\te.out = append(e.out, s...)\n\te.out = append(e.out, ':')\n}\n\n// WriteBool writes out the given boolean value.\nfunc (e *Encoder) WriteBool(b bool) {\n\tif b {\n\t\te.WriteLiteral(\"true\")\n\t} else {\n\t\te.WriteLiteral(\"false\")\n\t}\n}\n\n// WriteString writes out the given string value.\nfunc (e *Encoder) WriteString(s string) {\n\te.prepareNext(scalar)\n\te.out = appendString(e.out, s, e.outputASCII)\n}\n\nfunc appendString(out []byte, in string, outputASCII bool) []byte {\n\tout = append(out, '\"')\n\ti := indexNeedEscapeInString(in)\n\tin, out = in[i:], append(out, in[:i]...)\n\tfor len(in) > 0 {\n\t\tswitch r, n := utf8.DecodeRuneInString(in); {\n\t\tcase r == utf8.RuneError && n == 1:\n\t\t\t// We do not report invalid UTF-8 because strings in the text format\n\t\t\t// are used to represent both the proto string and bytes type.\n\t\t\tr = rune(in[0])\n\t\t\tfallthrough\n\t\tcase r < ' ' || r == '\"' || r == '\\\\' || r == 0x7f:\n\t\t\tout = append(out, '\\\\')\n\t\t\tswitch r {\n\t\t\tcase '\"', '\\\\':\n\t\t\t\tout = append(out, byte(r))\n\t\t\tcase '\\n':\n\t\t\t\tout = append(out, 'n')\n\t\t\tcase '\\r':\n\t\t\t\tout = append(out, 'r')\n\t\t\tcase '\\t':\n\t\t\t\tout = append(out, 't')\n\t\t\tdefault:\n\t\t\t\tout = append(out, 'x')\n\t\t\t\tout = append(out, \"00\"[1+(bits.Len32(uint32(r))-1)/4:]...)\n\t\t\t\tout = strconv.AppendUint(out, uint64(r), 16)\n\t\t\t}\n\t\t\tin = in[n:]\n\t\tcase r >= utf8.RuneSelf && (outputASCII || r <= 0x009f):\n\t\t\tout = append(out, '\\\\')\n\t\t\tif r <= math.MaxUint16 {\n\t\t\t\tout = append(out, 'u')\n\t\t\t\tout = append(out, \"0000\"[1+(bits.Len32(uint32(r))-1)/4:]...)\n\t\t\t\tout = strconv.AppendUint(out, uint64(r), 16)\n\t\t\t} else {\n\t\t\t\tout = append(out, 'U')\n\t\t\t\tout = append(out, \"00000000\"[1+(bits.Len32(uint32(r))-1)/4:]...)\n\t\t\t\tout = strconv.AppendUint(out, uint64(r), 16)\n\t\t\t}\n\t\t\tin = in[n:]\n\t\tdefault:\n\t\t\ti := indexNeedEscapeInString(in[n:])\n\t\t\tin, out = in[n+i:], append(out, in[:n+i]...)\n\t\t}\n\t}\n\tout = append(out, '\"')\n\treturn out\n}\n\n// indexNeedEscapeInString returns the index of the character that needs\n// escaping. If no characters need escaping, this returns the input length.\nfunc indexNeedEscapeInString(s string) int {\n\tfor i := 0; i < len(s); i++ {\n\t\tif c := s[i]; c < ' ' || c == '\"' || c == '\\'' || c == '\\\\' || c >= 0x7f {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn len(s)\n}\n\n// WriteFloat writes out the given float value for given bitSize.\nfunc (e *Encoder) WriteFloat(n float64, bitSize int) {\n\te.prepareNext(scalar)\n\te.out = appendFloat(e.out, n, bitSize)\n}\n\nfunc appendFloat(out []byte, n float64, bitSize int) []byte {\n\tswitch {\n\tcase math.IsNaN(n):\n\t\treturn append(out, \"nan\"...)\n\tcase math.IsInf(n, +1):\n\t\treturn append(out, \"inf\"...)\n\tcase math.IsInf(n, -1):\n\t\treturn append(out, \"-inf\"...)\n\tdefault:\n\t\treturn strconv.AppendFloat(out, n, 'g', -1, bitSize)\n\t}\n}\n\n// WriteInt writes out the given signed integer value.\nfunc (e *Encoder) WriteInt(n int64) {\n\te.prepareNext(scalar)\n\te.out = strconv.AppendInt(e.out, n, 10)\n}\n\n// WriteUint writes out the given unsigned integer value.\nfunc (e *Encoder) WriteUint(n uint64) {\n\te.prepareNext(scalar)\n\te.out = strconv.AppendUint(e.out, n, 10)\n}\n\n// WriteLiteral writes out the given string as a literal value without quotes.\n// This is used for writing enum literal strings.\nfunc (e *Encoder) WriteLiteral(s string) {\n\te.prepareNext(scalar)\n\te.out = append(e.out, s...)\n}\n\n// prepareNext adds possible space and indentation for the next value based\n// on last encType and indent option. It also updates e.lastType to next.\nfunc (e *Encoder) prepareNext(next encType) {\n\tdefer func() {\n\t\te.lastType = next\n\t}()\n\n\t// Single line.\n\tif len(e.indent) == 0 {\n\t\t// Add space after each field before the next one.\n\t\tif e.lastType&(scalar|messageClose) != 0 && next == name {\n\t\t\te.out = append(e.out, ' ')\n\t\t\t// Add a random extra space to make output unstable.\n\t\t\tif detrand.Bool() {\n\t\t\t\te.out = append(e.out, ' ')\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\t// Multi-line.\n\tswitch {\n\tcase e.lastType == name:\n\t\te.out = append(e.out, ' ')\n\t\t// Add a random extra space after name: to make output unstable.\n\t\tif detrand.Bool() {\n\t\t\te.out = append(e.out, ' ')\n\t\t}\n\n\tcase e.lastType == messageOpen && next != messageClose:\n\t\te.indents = append(e.indents, e.indent...)\n\t\te.out = append(e.out, '\\n')\n\t\te.out = append(e.out, e.indents...)\n\n\tcase e.lastType&(scalar|messageClose) != 0:\n\t\tif next == messageClose {\n\t\t\te.indents = e.indents[:len(e.indents)-len(e.indent)]\n\t\t}\n\t\te.out = append(e.out, '\\n')\n\t\te.out = append(e.out, e.indents...)\n\t}\n}\n\n// Snapshot returns the current snapshot for use in Reset.\nfunc (e *Encoder) Snapshot() encoderState {\n\treturn e.encoderState\n}\n\n// Reset resets the Encoder to the given encoderState from a Snapshot.\nfunc (e *Encoder) Reset(es encoderState) {\n\te.encoderState = es\n}\n\n// AppendString appends the escaped form of the input string to b.\nfunc AppendString(b []byte, s string) []byte {\n\treturn appendString(b, s, false)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/errors/errors.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 errors implements functions to manipulate errors.\npackage errors\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"google.golang.org/protobuf/internal/detrand\"\n)\n\n// Error is a sentinel matching all errors produced by this package.\nvar Error = errors.New(\"protobuf error\")\n\n// New formats a string according to the format specifier and arguments and\n// returns an error that has a \"proto\" prefix.\nfunc New(f string, x ...any) error {\n\treturn &prefixError{s: format(f, x...)}\n}\n\ntype prefixError struct{ s string }\n\nvar prefix = func() string {\n\t// Deliberately introduce instability into the error message string to\n\t// discourage users from performing error string comparisons.\n\tif detrand.Bool() {\n\t\treturn \"proto: \" // use non-breaking spaces (U+00a0)\n\t} else {\n\t\treturn \"proto: \" // use regular spaces (U+0020)\n\t}\n}()\n\nfunc (e *prefixError) Error() string {\n\treturn prefix + e.s\n}\n\nfunc (e *prefixError) Unwrap() error {\n\treturn Error\n}\n\n// Wrap returns an error that has a \"proto\" prefix, the formatted string described\n// by the format specifier and arguments, and a suffix of err. The error wraps err.\nfunc Wrap(err error, f string, x ...any) error {\n\treturn &wrapError{\n\t\ts:   format(f, x...),\n\t\terr: err,\n\t}\n}\n\ntype wrapError struct {\n\ts   string\n\terr error\n}\n\nfunc (e *wrapError) Error() string {\n\treturn format(\"%v%v: %v\", prefix, e.s, e.err)\n}\n\nfunc (e *wrapError) Unwrap() error {\n\treturn e.err\n}\n\nfunc (e *wrapError) Is(target error) bool {\n\treturn target == Error\n}\n\nfunc format(f string, x ...any) string {\n\t// avoid \"proto: \" prefix when chaining\n\tfor i := 0; i < len(x); i++ {\n\t\tswitch e := x[i].(type) {\n\t\tcase *prefixError:\n\t\t\tx[i] = e.s\n\t\tcase *wrapError:\n\t\t\tx[i] = format(\"%v: %v\", e.s, e.err)\n\t\t}\n\t}\n\treturn fmt.Sprintf(f, x...)\n}\n\nfunc InvalidUTF8(name string) error {\n\treturn New(\"field %v contains invalid UTF-8\", name)\n}\n\nfunc RequiredNotSet(name string) error {\n\treturn New(\"required field %v not set\", name)\n}\n\ntype SizeMismatchError struct {\n\tCalculated, Measured int\n}\n\nfunc (e *SizeMismatchError) Error() string {\n\treturn fmt.Sprintf(\"size mismatch (see https://github.com/golang/protobuf/issues/1609): calculated=%d, measured=%d\", e.Calculated, e.Measured)\n}\n\nfunc MismatchedSizeCalculation(calculated, measured int) error {\n\treturn &SizeMismatchError{\n\t\tCalculated: calculated,\n\t\tMeasured:   measured,\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/filedesc/build.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 filedesc provides functionality for constructing descriptors.\n//\n// The types in this package implement interfaces in the protoreflect package\n// related to protobuf descripriptors.\npackage filedesc\n\nimport (\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/genid\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/reflect/protoregistry\"\n)\n\n// Builder construct a protoreflect.FileDescriptor from the raw descriptor.\ntype Builder struct {\n\t// GoPackagePath is the Go package path that is invoking this builder.\n\tGoPackagePath string\n\n\t// RawDescriptor is the wire-encoded bytes of FileDescriptorProto\n\t// and must be populated.\n\tRawDescriptor []byte\n\n\t// NumEnums is the total number of enums declared in the file.\n\tNumEnums int32\n\t// NumMessages is the total number of messages declared in the file.\n\t// It includes the implicit message declarations for map entries.\n\tNumMessages int32\n\t// NumExtensions is the total number of extensions declared in the file.\n\tNumExtensions int32\n\t// NumServices is the total number of services declared in the file.\n\tNumServices int32\n\n\t// TypeResolver resolves extension field types for descriptor options.\n\t// If nil, it uses protoregistry.GlobalTypes.\n\tTypeResolver interface {\n\t\tprotoregistry.ExtensionTypeResolver\n\t}\n\n\t// FileRegistry is use to lookup file, enum, and message dependencies.\n\t// Once constructed, the file descriptor is registered here.\n\t// If nil, it uses protoregistry.GlobalFiles.\n\tFileRegistry interface {\n\t\tFindFileByPath(string) (protoreflect.FileDescriptor, error)\n\t\tFindDescriptorByName(protoreflect.FullName) (protoreflect.Descriptor, error)\n\t\tRegisterFile(protoreflect.FileDescriptor) error\n\t}\n}\n\n// resolverByIndex is an interface Builder.FileRegistry may implement.\n// If so, it permits looking up an enum or message dependency based on the\n// sub-list and element index into filetype.Builder.DependencyIndexes.\ntype resolverByIndex interface {\n\tFindEnumByIndex(int32, int32, []Enum, []Message) protoreflect.EnumDescriptor\n\tFindMessageByIndex(int32, int32, []Enum, []Message) protoreflect.MessageDescriptor\n}\n\n// Indexes of each sub-list in filetype.Builder.DependencyIndexes.\nconst (\n\tlistFieldDeps int32 = iota\n\tlistExtTargets\n\tlistExtDeps\n\tlistMethInDeps\n\tlistMethOutDeps\n)\n\n// Out is the output of the Builder.\ntype Out struct {\n\tFile protoreflect.FileDescriptor\n\n\t// Enums is all enum descriptors in \"flattened ordering\".\n\tEnums []Enum\n\t// Messages is all message descriptors in \"flattened ordering\".\n\t// It includes the implicit message declarations for map entries.\n\tMessages []Message\n\t// Extensions is all extension descriptors in \"flattened ordering\".\n\tExtensions []Extension\n\t// Service is all service descriptors in \"flattened ordering\".\n\tServices []Service\n}\n\n// Build constructs a FileDescriptor given the parameters set in Builder.\n// It assumes that the inputs are well-formed and panics if any inconsistencies\n// are encountered.\n//\n// If NumEnums+NumMessages+NumExtensions+NumServices is zero,\n// then Build automatically derives them from the raw descriptor.\nfunc (db Builder) Build() (out Out) {\n\t// Populate the counts if uninitialized.\n\tif db.NumEnums+db.NumMessages+db.NumExtensions+db.NumServices == 0 {\n\t\tdb.unmarshalCounts(db.RawDescriptor, true)\n\t}\n\n\t// Initialize resolvers and registries if unpopulated.\n\tif db.TypeResolver == nil {\n\t\tdb.TypeResolver = protoregistry.GlobalTypes\n\t}\n\tif db.FileRegistry == nil {\n\t\tdb.FileRegistry = protoregistry.GlobalFiles\n\t}\n\n\tfd := newRawFile(db)\n\tout.File = fd\n\tout.Enums = fd.allEnums\n\tout.Messages = fd.allMessages\n\tout.Extensions = fd.allExtensions\n\tout.Services = fd.allServices\n\n\tif err := db.FileRegistry.RegisterFile(fd); err != nil {\n\t\tpanic(err)\n\t}\n\treturn out\n}\n\n// unmarshalCounts counts the number of enum, message, extension, and service\n// declarations in the raw message, which is either a FileDescriptorProto\n// or a MessageDescriptorProto depending on whether isFile is set.\nfunc (db *Builder) unmarshalCounts(b []byte, isFile bool) {\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tif isFile {\n\t\t\t\tswitch num {\n\t\t\t\tcase genid.FileDescriptorProto_EnumType_field_number:\n\t\t\t\t\tdb.NumEnums++\n\t\t\t\tcase genid.FileDescriptorProto_MessageType_field_number:\n\t\t\t\t\tdb.unmarshalCounts(v, false)\n\t\t\t\t\tdb.NumMessages++\n\t\t\t\tcase genid.FileDescriptorProto_Extension_field_number:\n\t\t\t\t\tdb.NumExtensions++\n\t\t\t\tcase genid.FileDescriptorProto_Service_field_number:\n\t\t\t\t\tdb.NumServices++\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch num {\n\t\t\t\tcase genid.DescriptorProto_EnumType_field_number:\n\t\t\t\t\tdb.NumEnums++\n\t\t\t\tcase genid.DescriptorProto_NestedType_field_number:\n\t\t\t\t\tdb.unmarshalCounts(v, false)\n\t\t\t\t\tdb.NumMessages++\n\t\t\t\tcase genid.DescriptorProto_Extension_field_number:\n\t\t\t\t\tdb.NumExtensions++\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/filedesc/desc.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 filedesc\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\n\t\"google.golang.org/protobuf/internal/descfmt\"\n\t\"google.golang.org/protobuf/internal/descopts\"\n\t\"google.golang.org/protobuf/internal/encoding/defval\"\n\t\"google.golang.org/protobuf/internal/encoding/messageset\"\n\t\"google.golang.org/protobuf/internal/genid\"\n\t\"google.golang.org/protobuf/internal/pragma\"\n\t\"google.golang.org/protobuf/internal/strs\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// Edition is an Enum for proto2.Edition\ntype Edition int32\n\n// These values align with the value of Enum in descriptor.proto which allows\n// direct conversion between the proto enum and this enum.\nconst (\n\tEditionUnknown     Edition = 0\n\tEditionProto2      Edition = 998\n\tEditionProto3      Edition = 999\n\tEdition2023        Edition = 1000\n\tEdition2024        Edition = 1001\n\tEditionUnstable    Edition = 9999\n\tEditionUnsupported Edition = 100000\n)\n\n// The types in this file may have a suffix:\n//\t• L0: Contains fields common to all descriptors (except File) and\n//\tmust be initialized up front.\n//\t• L1: Contains fields specific to a descriptor and\n//\tmust be initialized up front. If the associated proto uses Editions, the\n//  Editions features must always be resolved. If not explicitly set, the\n//  appropriate default must be resolved and set.\n//\t• L2: Contains fields that are lazily initialized when constructing\n//\tfrom the raw file descriptor. When constructing as a literal, the L2\n//\tfields must be initialized up front.\n//\n// The types are exported so that packages like reflect/protodesc can\n// directly construct descriptors.\n\ntype (\n\tFile struct {\n\t\tfileRaw\n\t\tL1 FileL1\n\n\t\tonce uint32     // atomically set if L2 is valid\n\t\tmu   sync.Mutex // protects L2\n\t\tL2   *FileL2\n\t}\n\tFileL1 struct {\n\t\tSyntax  protoreflect.Syntax\n\t\tEdition Edition // Only used if Syntax == Editions\n\t\tPath    string\n\t\tPackage protoreflect.FullName\n\n\t\tEnums      Enums\n\t\tMessages   Messages\n\t\tExtensions Extensions\n\t\tServices   Services\n\n\t\tEditionFeatures EditionFeatures\n\t}\n\tFileL2 struct {\n\t\tOptions       func() protoreflect.ProtoMessage\n\t\tImports       FileImports\n\t\tOptionImports func() protoreflect.FileImports\n\t\tLocations     SourceLocations\n\t}\n\n\t// EditionFeatures is a frequently-instantiated struct, so please take care\n\t// to minimize padding when adding new fields to this struct (add them in\n\t// the right place/order).\n\tEditionFeatures struct {\n\t\t// StripEnumPrefix determines if the plugin generates enum value\n\t\t// constants as-is, with their prefix stripped, or both variants.\n\t\tStripEnumPrefix int\n\n\t\t// IsFieldPresence is true if field_presence is EXPLICIT\n\t\t// https://protobuf.dev/editions/features/#field_presence\n\t\tIsFieldPresence bool\n\n\t\t// IsFieldPresence is true if field_presence is LEGACY_REQUIRED\n\t\t// https://protobuf.dev/editions/features/#field_presence\n\t\tIsLegacyRequired bool\n\n\t\t// IsOpenEnum is true if enum_type is OPEN\n\t\t// https://protobuf.dev/editions/features/#enum_type\n\t\tIsOpenEnum bool\n\n\t\t// IsPacked is true if repeated_field_encoding is PACKED\n\t\t// https://protobuf.dev/editions/features/#repeated_field_encoding\n\t\tIsPacked bool\n\n\t\t// IsUTF8Validated is true if utf_validation is VERIFY\n\t\t// https://protobuf.dev/editions/features/#utf8_validation\n\t\tIsUTF8Validated bool\n\n\t\t// IsDelimitedEncoded is true if message_encoding is DELIMITED\n\t\t// https://protobuf.dev/editions/features/#message_encoding\n\t\tIsDelimitedEncoded bool\n\n\t\t// IsJSONCompliant is true if json_format is ALLOW\n\t\t// https://protobuf.dev/editions/features/#json_format\n\t\tIsJSONCompliant bool\n\n\t\t// GenerateLegacyUnmarshalJSON determines if the plugin generates the\n\t\t// UnmarshalJSON([]byte) error method for enums.\n\t\tGenerateLegacyUnmarshalJSON bool\n\t\t// APILevel controls which API (Open, Hybrid or Opaque) should be used\n\t\t// for generated code (.pb.go files).\n\t\tAPILevel int\n\t}\n)\n\nfunc (fd *File) ParentFile() protoreflect.FileDescriptor { return fd }\nfunc (fd *File) Parent() protoreflect.Descriptor         { return nil }\nfunc (fd *File) Index() int                              { return 0 }\nfunc (fd *File) Syntax() protoreflect.Syntax             { return fd.L1.Syntax }\nfunc (fd *File) Name() protoreflect.Name                 { return fd.L1.Package.Name() }\nfunc (fd *File) FullName() protoreflect.FullName         { return fd.L1.Package }\nfunc (fd *File) IsPlaceholder() bool                     { return false }\nfunc (fd *File) Options() protoreflect.ProtoMessage {\n\tif f := fd.lazyInit().Options; f != nil {\n\t\treturn f()\n\t}\n\treturn descopts.File\n}\nfunc (fd *File) Path() string                                  { return fd.L1.Path }\nfunc (fd *File) Package() protoreflect.FullName                { return fd.L1.Package }\nfunc (fd *File) Imports() protoreflect.FileImports             { return &fd.lazyInit().Imports }\nfunc (fd *File) Enums() protoreflect.EnumDescriptors           { return &fd.L1.Enums }\nfunc (fd *File) Messages() protoreflect.MessageDescriptors     { return &fd.L1.Messages }\nfunc (fd *File) Extensions() protoreflect.ExtensionDescriptors { return &fd.L1.Extensions }\nfunc (fd *File) Services() protoreflect.ServiceDescriptors     { return &fd.L1.Services }\nfunc (fd *File) SourceLocations() protoreflect.SourceLocations { return &fd.lazyInit().Locations }\nfunc (fd *File) Format(s fmt.State, r rune)                    { descfmt.FormatDesc(s, r, fd) }\nfunc (fd *File) ProtoType(protoreflect.FileDescriptor)         {}\nfunc (fd *File) ProtoInternal(pragma.DoNotImplement)           {}\n\n// The next two are not part of the FileDescriptor interface. They are just used to reconstruct\n// the original FileDescriptor proto.\nfunc (fd *File) Edition() int32 { return int32(fd.L1.Edition) }\nfunc (fd *File) OptionImports() protoreflect.FileImports {\n\tif f := fd.lazyInit().OptionImports; f != nil {\n\t\treturn f()\n\t}\n\treturn emptyFiles\n}\n\nfunc (fd *File) lazyInit() *FileL2 {\n\tif atomic.LoadUint32(&fd.once) == 0 {\n\t\tfd.lazyInitOnce()\n\t}\n\treturn fd.L2\n}\n\nfunc (fd *File) lazyInitOnce() {\n\tfd.mu.Lock()\n\tif fd.L2 == nil {\n\t\tfd.lazyRawInit() // recursively initializes all L2 structures\n\t}\n\tatomic.StoreUint32(&fd.once, 1)\n\tfd.mu.Unlock()\n}\n\n// GoPackagePath is a pseudo-internal API for determining the Go package path\n// that this file descriptor is declared in.\n//\n// WARNING: This method is exempt from the compatibility promise and may be\n// removed in the future without warning.\nfunc (fd *File) GoPackagePath() string {\n\treturn fd.builder.GoPackagePath\n}\n\ntype (\n\tEnum struct {\n\t\tBase\n\t\tL1 EnumL1\n\t\tL2 *EnumL2 // protected by fileDesc.once\n\t}\n\tEnumL1 struct {\n\t\tEditionFeatures EditionFeatures\n\t\tVisibility      int32\n\t\teagerValues     bool // controls whether EnumL2.Values is already populated\n\t}\n\tEnumL2 struct {\n\t\tOptions        func() protoreflect.ProtoMessage\n\t\tValues         EnumValues\n\t\tReservedNames  Names\n\t\tReservedRanges EnumRanges\n\t}\n\n\tEnumValue struct {\n\t\tBase\n\t\tL1 EnumValueL1\n\t}\n\tEnumValueL1 struct {\n\t\tOptions func() protoreflect.ProtoMessage\n\t\tNumber  protoreflect.EnumNumber\n\t}\n)\n\nfunc (ed *Enum) Options() protoreflect.ProtoMessage {\n\tif f := ed.lazyInit().Options; f != nil {\n\t\treturn f()\n\t}\n\treturn descopts.Enum\n}\nfunc (ed *Enum) Values() protoreflect.EnumValueDescriptors {\n\tif ed.L1.eagerValues {\n\t\treturn &ed.L2.Values\n\t}\n\treturn &ed.lazyInit().Values\n}\nfunc (ed *Enum) ReservedNames() protoreflect.Names       { return &ed.lazyInit().ReservedNames }\nfunc (ed *Enum) ReservedRanges() protoreflect.EnumRanges { return &ed.lazyInit().ReservedRanges }\nfunc (ed *Enum) Format(s fmt.State, r rune)              { descfmt.FormatDesc(s, r, ed) }\nfunc (ed *Enum) ProtoType(protoreflect.EnumDescriptor)   {}\n\n// This is not part of the EnumDescriptor interface. It is just used to reconstruct\n// the original FileDescriptor proto.\nfunc (ed *Enum) Visibility() int32 { return ed.L1.Visibility }\n\nfunc (ed *Enum) lazyInit() *EnumL2 {\n\ted.L0.ParentFile.lazyInit() // implicitly initializes L2\n\treturn ed.L2\n}\nfunc (ed *Enum) IsClosed() bool {\n\treturn !ed.L1.EditionFeatures.IsOpenEnum\n}\n\nfunc (ed *EnumValue) Options() protoreflect.ProtoMessage {\n\tif f := ed.L1.Options; f != nil {\n\t\treturn f()\n\t}\n\treturn descopts.EnumValue\n}\nfunc (ed *EnumValue) Number() protoreflect.EnumNumber            { return ed.L1.Number }\nfunc (ed *EnumValue) Format(s fmt.State, r rune)                 { descfmt.FormatDesc(s, r, ed) }\nfunc (ed *EnumValue) ProtoType(protoreflect.EnumValueDescriptor) {}\n\ntype (\n\tMessage struct {\n\t\tBase\n\t\tL1 MessageL1\n\t\tL2 *MessageL2 // protected by fileDesc.once\n\t}\n\tMessageL1 struct {\n\t\tEnums           Enums\n\t\tMessages        Messages\n\t\tExtensions      Extensions\n\t\tEditionFeatures EditionFeatures\n\t\tVisibility      int32\n\t\tIsMapEntry      bool // promoted from google.protobuf.MessageOptions\n\t\tIsMessageSet    bool // promoted from google.protobuf.MessageOptions\n\t}\n\tMessageL2 struct {\n\t\tOptions               func() protoreflect.ProtoMessage\n\t\tFields                Fields\n\t\tOneofs                Oneofs\n\t\tReservedNames         Names\n\t\tReservedRanges        FieldRanges\n\t\tRequiredNumbers       FieldNumbers // must be consistent with Fields.Cardinality\n\t\tExtensionRanges       FieldRanges\n\t\tExtensionRangeOptions []func() protoreflect.ProtoMessage // must be same length as ExtensionRanges\n\t}\n\n\tField struct {\n\t\tBase\n\t\tL1 FieldL1\n\t}\n\tFieldL1 struct {\n\t\tOptions          func() protoreflect.ProtoMessage\n\t\tNumber           protoreflect.FieldNumber\n\t\tCardinality      protoreflect.Cardinality // must be consistent with Message.RequiredNumbers\n\t\tKind             protoreflect.Kind\n\t\tStringName       stringName\n\t\tIsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto\n\t\tIsLazy           bool // promoted from google.protobuf.FieldOptions\n\t\tDefault          defaultValue\n\t\tContainingOneof  protoreflect.OneofDescriptor // must be consistent with Message.Oneofs.Fields\n\t\tEnum             protoreflect.EnumDescriptor\n\t\tMessage          protoreflect.MessageDescriptor\n\n\t\tEditionFeatures EditionFeatures\n\t}\n\n\tOneof struct {\n\t\tBase\n\t\tL1 OneofL1\n\t}\n\tOneofL1 struct {\n\t\tOptions func() protoreflect.ProtoMessage\n\t\tFields  OneofFields // must be consistent with Message.Fields.ContainingOneof\n\n\t\tEditionFeatures EditionFeatures\n\t}\n)\n\nfunc (md *Message) Options() protoreflect.ProtoMessage {\n\tif f := md.lazyInit().Options; f != nil {\n\t\treturn f()\n\t}\n\treturn descopts.Message\n}\nfunc (md *Message) IsMapEntry() bool                           { return md.L1.IsMapEntry }\nfunc (md *Message) Fields() protoreflect.FieldDescriptors      { return &md.lazyInit().Fields }\nfunc (md *Message) Oneofs() protoreflect.OneofDescriptors      { return &md.lazyInit().Oneofs }\nfunc (md *Message) ReservedNames() protoreflect.Names          { return &md.lazyInit().ReservedNames }\nfunc (md *Message) ReservedRanges() protoreflect.FieldRanges   { return &md.lazyInit().ReservedRanges }\nfunc (md *Message) RequiredNumbers() protoreflect.FieldNumbers { return &md.lazyInit().RequiredNumbers }\nfunc (md *Message) ExtensionRanges() protoreflect.FieldRanges  { return &md.lazyInit().ExtensionRanges }\nfunc (md *Message) ExtensionRangeOptions(i int) protoreflect.ProtoMessage {\n\tif f := md.lazyInit().ExtensionRangeOptions[i]; f != nil {\n\t\treturn f()\n\t}\n\treturn descopts.ExtensionRange\n}\nfunc (md *Message) Enums() protoreflect.EnumDescriptors           { return &md.L1.Enums }\nfunc (md *Message) Messages() protoreflect.MessageDescriptors     { return &md.L1.Messages }\nfunc (md *Message) Extensions() protoreflect.ExtensionDescriptors { return &md.L1.Extensions }\nfunc (md *Message) ProtoType(protoreflect.MessageDescriptor)      {}\nfunc (md *Message) Format(s fmt.State, r rune)                    { descfmt.FormatDesc(s, r, md) }\n\n// This is not part of the MessageDescriptor interface. It is just used to reconstruct\n// the original FileDescriptor proto.\nfunc (md *Message) Visibility() int32 { return md.L1.Visibility }\n\nfunc (md *Message) lazyInit() *MessageL2 {\n\tmd.L0.ParentFile.lazyInit() // implicitly initializes L2\n\treturn md.L2\n}\n\n// IsMessageSet is a pseudo-internal API for checking whether a message\n// should serialize in the proto1 message format.\n//\n// WARNING: This method is exempt from the compatibility promise and may be\n// removed in the future without warning.\nfunc (md *Message) IsMessageSet() bool {\n\treturn md.L1.IsMessageSet\n}\n\nfunc (fd *Field) Options() protoreflect.ProtoMessage {\n\tif f := fd.L1.Options; f != nil {\n\t\treturn f()\n\t}\n\treturn descopts.Field\n}\nfunc (fd *Field) Number() protoreflect.FieldNumber      { return fd.L1.Number }\nfunc (fd *Field) Cardinality() protoreflect.Cardinality { return fd.L1.Cardinality }\nfunc (fd *Field) Kind() protoreflect.Kind {\n\treturn fd.L1.Kind\n}\nfunc (fd *Field) HasJSONName() bool { return fd.L1.StringName.hasJSON }\nfunc (fd *Field) JSONName() string  { return fd.L1.StringName.getJSON(fd) }\nfunc (fd *Field) TextName() string  { return fd.L1.StringName.getText(fd) }\nfunc (fd *Field) HasPresence() bool {\n\tif fd.L1.Cardinality == protoreflect.Repeated {\n\t\treturn false\n\t}\n\treturn fd.IsExtension() || fd.L1.EditionFeatures.IsFieldPresence || fd.L1.Message != nil || fd.L1.ContainingOneof != nil\n}\nfunc (fd *Field) HasOptionalKeyword() bool {\n\treturn (fd.L0.ParentFile.L1.Syntax == protoreflect.Proto2 && fd.L1.Cardinality == protoreflect.Optional && fd.L1.ContainingOneof == nil) || fd.L1.IsProto3Optional\n}\nfunc (fd *Field) IsPacked() bool {\n\tif fd.L1.Cardinality != protoreflect.Repeated {\n\t\treturn false\n\t}\n\tswitch fd.L1.Kind {\n\tcase protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind, protoreflect.GroupKind:\n\t\treturn false\n\t}\n\treturn fd.L1.EditionFeatures.IsPacked\n}\nfunc (fd *Field) IsExtension() bool { return false }\nfunc (fd *Field) IsWeak() bool      { return false }\nfunc (fd *Field) IsLazy() bool      { return fd.L1.IsLazy }\nfunc (fd *Field) IsList() bool      { return fd.Cardinality() == protoreflect.Repeated && !fd.IsMap() }\nfunc (fd *Field) IsMap() bool       { return fd.Message() != nil && fd.Message().IsMapEntry() }\nfunc (fd *Field) MapKey() protoreflect.FieldDescriptor {\n\tif !fd.IsMap() {\n\t\treturn nil\n\t}\n\treturn fd.Message().Fields().ByNumber(genid.MapEntry_Key_field_number)\n}\nfunc (fd *Field) MapValue() protoreflect.FieldDescriptor {\n\tif !fd.IsMap() {\n\t\treturn nil\n\t}\n\treturn fd.Message().Fields().ByNumber(genid.MapEntry_Value_field_number)\n}\nfunc (fd *Field) HasDefault() bool                                   { return fd.L1.Default.has }\nfunc (fd *Field) Default() protoreflect.Value                        { return fd.L1.Default.get(fd) }\nfunc (fd *Field) DefaultEnumValue() protoreflect.EnumValueDescriptor { return fd.L1.Default.enum }\nfunc (fd *Field) ContainingOneof() protoreflect.OneofDescriptor      { return fd.L1.ContainingOneof }\nfunc (fd *Field) ContainingMessage() protoreflect.MessageDescriptor {\n\treturn fd.L0.Parent.(protoreflect.MessageDescriptor)\n}\nfunc (fd *Field) Enum() protoreflect.EnumDescriptor {\n\treturn fd.L1.Enum\n}\nfunc (fd *Field) Message() protoreflect.MessageDescriptor {\n\treturn fd.L1.Message\n}\nfunc (fd *Field) IsMapEntry() bool {\n\tparent, ok := fd.L0.Parent.(protoreflect.MessageDescriptor)\n\treturn ok && parent.IsMapEntry()\n}\nfunc (fd *Field) Format(s fmt.State, r rune)             { descfmt.FormatDesc(s, r, fd) }\nfunc (fd *Field) ProtoType(protoreflect.FieldDescriptor) {}\n\n// EnforceUTF8 is a pseudo-internal API to determine whether to enforce UTF-8\n// validation for the string field. This exists for Google-internal use only\n// since proto3 did not enforce UTF-8 validity prior to the open-source release.\n// If this method does not exist, the default is to enforce valid UTF-8.\n//\n// WARNING: This method is exempt from the compatibility promise and may be\n// removed in the future without warning.\nfunc (fd *Field) EnforceUTF8() bool {\n\treturn fd.L1.EditionFeatures.IsUTF8Validated\n}\n\nfunc (od *Oneof) IsSynthetic() bool {\n\treturn od.L0.ParentFile.L1.Syntax == protoreflect.Proto3 && len(od.L1.Fields.List) == 1 && od.L1.Fields.List[0].HasOptionalKeyword()\n}\nfunc (od *Oneof) Options() protoreflect.ProtoMessage {\n\tif f := od.L1.Options; f != nil {\n\t\treturn f()\n\t}\n\treturn descopts.Oneof\n}\nfunc (od *Oneof) Fields() protoreflect.FieldDescriptors  { return &od.L1.Fields }\nfunc (od *Oneof) Format(s fmt.State, r rune)             { descfmt.FormatDesc(s, r, od) }\nfunc (od *Oneof) ProtoType(protoreflect.OneofDescriptor) {}\n\ntype (\n\tExtension struct {\n\t\tBase\n\t\tL1 ExtensionL1\n\t\tL2 *ExtensionL2 // protected by fileDesc.once\n\t}\n\tExtensionL1 struct {\n\t\tNumber          protoreflect.FieldNumber\n\t\tExtendee        protoreflect.MessageDescriptor\n\t\tCardinality     protoreflect.Cardinality\n\t\tKind            protoreflect.Kind\n\t\tIsLazy          bool\n\t\tEditionFeatures EditionFeatures\n\t}\n\tExtensionL2 struct {\n\t\tOptions          func() protoreflect.ProtoMessage\n\t\tStringName       stringName\n\t\tIsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto\n\t\tDefault          defaultValue\n\t\tEnum             protoreflect.EnumDescriptor\n\t\tMessage          protoreflect.MessageDescriptor\n\t}\n)\n\nfunc (xd *Extension) Options() protoreflect.ProtoMessage {\n\tif f := xd.lazyInit().Options; f != nil {\n\t\treturn f()\n\t}\n\treturn descopts.Field\n}\nfunc (xd *Extension) Number() protoreflect.FieldNumber      { return xd.L1.Number }\nfunc (xd *Extension) Cardinality() protoreflect.Cardinality { return xd.L1.Cardinality }\nfunc (xd *Extension) Kind() protoreflect.Kind               { return xd.L1.Kind }\nfunc (xd *Extension) HasJSONName() bool                     { return xd.lazyInit().StringName.hasJSON }\nfunc (xd *Extension) JSONName() string                      { return xd.lazyInit().StringName.getJSON(xd) }\nfunc (xd *Extension) TextName() string                      { return xd.lazyInit().StringName.getText(xd) }\nfunc (xd *Extension) HasPresence() bool                     { return xd.L1.Cardinality != protoreflect.Repeated }\nfunc (xd *Extension) HasOptionalKeyword() bool {\n\treturn (xd.L0.ParentFile.L1.Syntax == protoreflect.Proto2 && xd.L1.Cardinality == protoreflect.Optional) || xd.lazyInit().IsProto3Optional\n}\nfunc (xd *Extension) IsPacked() bool {\n\tif xd.L1.Cardinality != protoreflect.Repeated {\n\t\treturn false\n\t}\n\tswitch xd.L1.Kind {\n\tcase protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind, protoreflect.GroupKind:\n\t\treturn false\n\t}\n\treturn xd.L1.EditionFeatures.IsPacked\n}\nfunc (xd *Extension) IsExtension() bool                      { return true }\nfunc (xd *Extension) IsWeak() bool                           { return false }\nfunc (xd *Extension) IsLazy() bool                           { return xd.L1.IsLazy }\nfunc (xd *Extension) IsList() bool                           { return xd.Cardinality() == protoreflect.Repeated }\nfunc (xd *Extension) IsMap() bool                            { return false }\nfunc (xd *Extension) MapKey() protoreflect.FieldDescriptor   { return nil }\nfunc (xd *Extension) MapValue() protoreflect.FieldDescriptor { return nil }\nfunc (xd *Extension) HasDefault() bool                       { return xd.lazyInit().Default.has }\nfunc (xd *Extension) Default() protoreflect.Value            { return xd.lazyInit().Default.get(xd) }\nfunc (xd *Extension) DefaultEnumValue() protoreflect.EnumValueDescriptor {\n\treturn xd.lazyInit().Default.enum\n}\nfunc (xd *Extension) ContainingOneof() protoreflect.OneofDescriptor     { return nil }\nfunc (xd *Extension) ContainingMessage() protoreflect.MessageDescriptor { return xd.L1.Extendee }\nfunc (xd *Extension) Enum() protoreflect.EnumDescriptor                 { return xd.lazyInit().Enum }\nfunc (xd *Extension) Message() protoreflect.MessageDescriptor           { return xd.lazyInit().Message }\nfunc (xd *Extension) Format(s fmt.State, r rune)                        { descfmt.FormatDesc(s, r, xd) }\nfunc (xd *Extension) ProtoType(protoreflect.FieldDescriptor)            {}\nfunc (xd *Extension) ProtoInternal(pragma.DoNotImplement)               {}\nfunc (xd *Extension) lazyInit() *ExtensionL2 {\n\txd.L0.ParentFile.lazyInit() // implicitly initializes L2\n\treturn xd.L2\n}\n\ntype (\n\tService struct {\n\t\tBase\n\t\tL1 ServiceL1\n\t\tL2 *ServiceL2 // protected by fileDesc.once\n\t}\n\tServiceL1 struct{}\n\tServiceL2 struct {\n\t\tOptions func() protoreflect.ProtoMessage\n\t\tMethods Methods\n\t}\n\n\tMethod struct {\n\t\tBase\n\t\tL1 MethodL1\n\t}\n\tMethodL1 struct {\n\t\tOptions           func() protoreflect.ProtoMessage\n\t\tInput             protoreflect.MessageDescriptor\n\t\tOutput            protoreflect.MessageDescriptor\n\t\tIsStreamingClient bool\n\t\tIsStreamingServer bool\n\t}\n)\n\nfunc (sd *Service) Options() protoreflect.ProtoMessage {\n\tif f := sd.lazyInit().Options; f != nil {\n\t\treturn f()\n\t}\n\treturn descopts.Service\n}\nfunc (sd *Service) Methods() protoreflect.MethodDescriptors  { return &sd.lazyInit().Methods }\nfunc (sd *Service) Format(s fmt.State, r rune)               { descfmt.FormatDesc(s, r, sd) }\nfunc (sd *Service) ProtoType(protoreflect.ServiceDescriptor) {}\nfunc (sd *Service) ProtoInternal(pragma.DoNotImplement)      {}\nfunc (sd *Service) lazyInit() *ServiceL2 {\n\tsd.L0.ParentFile.lazyInit() // implicitly initializes L2\n\treturn sd.L2\n}\n\nfunc (md *Method) Options() protoreflect.ProtoMessage {\n\tif f := md.L1.Options; f != nil {\n\t\treturn f()\n\t}\n\treturn descopts.Method\n}\nfunc (md *Method) Input() protoreflect.MessageDescriptor   { return md.L1.Input }\nfunc (md *Method) Output() protoreflect.MessageDescriptor  { return md.L1.Output }\nfunc (md *Method) IsStreamingClient() bool                 { return md.L1.IsStreamingClient }\nfunc (md *Method) IsStreamingServer() bool                 { return md.L1.IsStreamingServer }\nfunc (md *Method) Format(s fmt.State, r rune)              { descfmt.FormatDesc(s, r, md) }\nfunc (md *Method) ProtoType(protoreflect.MethodDescriptor) {}\nfunc (md *Method) ProtoInternal(pragma.DoNotImplement)     {}\n\n// Surrogate files are can be used to create standalone descriptors\n// where the syntax is only information derived from the parent file.\nvar (\n\tSurrogateProto2      = &File{L1: FileL1{Syntax: protoreflect.Proto2}, L2: &FileL2{}}\n\tSurrogateProto3      = &File{L1: FileL1{Syntax: protoreflect.Proto3}, L2: &FileL2{}}\n\tSurrogateEdition2023 = &File{L1: FileL1{Syntax: protoreflect.Editions, Edition: Edition2023}, L2: &FileL2{}}\n)\n\ntype (\n\tBase struct {\n\t\tL0 BaseL0\n\t}\n\tBaseL0 struct {\n\t\tFullName   protoreflect.FullName // must be populated\n\t\tParentFile *File                 // must be populated\n\t\tParent     protoreflect.Descriptor\n\t\tIndex      int\n\t}\n)\n\nfunc (d *Base) Name() protoreflect.Name         { return d.L0.FullName.Name() }\nfunc (d *Base) FullName() protoreflect.FullName { return d.L0.FullName }\nfunc (d *Base) ParentFile() protoreflect.FileDescriptor {\n\tif d.L0.ParentFile == SurrogateProto2 || d.L0.ParentFile == SurrogateProto3 {\n\t\treturn nil // surrogate files are not real parents\n\t}\n\treturn d.L0.ParentFile\n}\nfunc (d *Base) Parent() protoreflect.Descriptor     { return d.L0.Parent }\nfunc (d *Base) Index() int                          { return d.L0.Index }\nfunc (d *Base) Syntax() protoreflect.Syntax         { return d.L0.ParentFile.Syntax() }\nfunc (d *Base) IsPlaceholder() bool                 { return false }\nfunc (d *Base) ProtoInternal(pragma.DoNotImplement) {}\n\ntype stringName struct {\n\thasJSON  bool\n\tonce     sync.Once\n\tnameJSON string\n\tnameText string\n}\n\n// InitJSON initializes the name. It is exported for use by other internal packages.\nfunc (s *stringName) InitJSON(name string) {\n\ts.hasJSON = true\n\ts.nameJSON = name\n}\n\n// Returns true if this field is structured like the synthetic field of a proto2\n// group. This allows us to expand our treatment of delimited fields without\n// breaking proto2 files that have been upgraded to editions.\nfunc isGroupLike(fd protoreflect.FieldDescriptor) bool {\n\t// Groups are always group types.\n\tif fd.Kind() != protoreflect.GroupKind {\n\t\treturn false\n\t}\n\n\t// Group fields are always the lowercase type name.\n\tif strings.ToLower(string(fd.Message().Name())) != string(fd.Name()) {\n\t\treturn false\n\t}\n\n\t// Groups could only be defined in the same file they're used.\n\tif fd.Message().ParentFile() != fd.ParentFile() {\n\t\treturn false\n\t}\n\n\t// Group messages are always defined in the same scope as the field.  File\n\t// level extensions will compare NULL == NULL here, which is why the file\n\t// comparison above is necessary to ensure both come from the same file.\n\tif fd.IsExtension() {\n\t\treturn fd.Parent() == fd.Message().Parent()\n\t}\n\treturn fd.ContainingMessage() == fd.Message().Parent()\n}\n\nfunc (s *stringName) lazyInit(fd protoreflect.FieldDescriptor) *stringName {\n\ts.once.Do(func() {\n\t\tif fd.IsExtension() {\n\t\t\t// For extensions, JSON and text are formatted the same way.\n\t\t\tvar name string\n\t\t\tif messageset.IsMessageSetExtension(fd) {\n\t\t\t\tname = string(\"[\" + fd.FullName().Parent() + \"]\")\n\t\t\t} else {\n\t\t\t\tname = string(\"[\" + fd.FullName() + \"]\")\n\t\t\t}\n\t\t\ts.nameJSON = name\n\t\t\ts.nameText = name\n\t\t} else {\n\t\t\t// Format the JSON name.\n\t\t\tif !s.hasJSON {\n\t\t\t\ts.nameJSON = strs.JSONCamelCase(string(fd.Name()))\n\t\t\t}\n\n\t\t\t// Format the text name.\n\t\t\ts.nameText = string(fd.Name())\n\t\t\tif isGroupLike(fd) {\n\t\t\t\ts.nameText = string(fd.Message().Name())\n\t\t\t}\n\t\t}\n\t})\n\treturn s\n}\n\nfunc (s *stringName) getJSON(fd protoreflect.FieldDescriptor) string { return s.lazyInit(fd).nameJSON }\nfunc (s *stringName) getText(fd protoreflect.FieldDescriptor) string { return s.lazyInit(fd).nameText }\n\nfunc DefaultValue(v protoreflect.Value, ev protoreflect.EnumValueDescriptor) defaultValue {\n\tdv := defaultValue{has: v.IsValid(), val: v, enum: ev}\n\tif b, ok := v.Interface().([]byte); ok {\n\t\t// Store a copy of the default bytes, so that we can detect\n\t\t// accidental mutations of the original value.\n\t\tdv.bytes = append([]byte(nil), b...)\n\t}\n\treturn dv\n}\n\nfunc unmarshalDefault(b []byte, k protoreflect.Kind, pf *File, ed protoreflect.EnumDescriptor) defaultValue {\n\tvar evs protoreflect.EnumValueDescriptors\n\tif k == protoreflect.EnumKind {\n\t\t// If the enum is declared within the same file, be careful not to\n\t\t// blindly call the Values method, lest we bind ourselves in a deadlock.\n\t\tif e, ok := ed.(*Enum); ok && e.L0.ParentFile == pf {\n\t\t\tevs = &e.L2.Values\n\t\t} else {\n\t\t\tevs = ed.Values()\n\t\t}\n\n\t\t// If we are unable to resolve the enum dependency, use a placeholder\n\t\t// enum value since we will not be able to parse the default value.\n\t\tif ed.IsPlaceholder() && protoreflect.Name(b).IsValid() {\n\t\t\tv := protoreflect.ValueOfEnum(0)\n\t\t\tev := PlaceholderEnumValue(ed.FullName().Parent().Append(protoreflect.Name(b)))\n\t\t\treturn DefaultValue(v, ev)\n\t\t}\n\t}\n\n\tv, ev, err := defval.Unmarshal(string(b), k, evs, defval.Descriptor)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn DefaultValue(v, ev)\n}\n\ntype defaultValue struct {\n\thas   bool\n\tval   protoreflect.Value\n\tenum  protoreflect.EnumValueDescriptor\n\tbytes []byte\n}\n\nfunc (dv *defaultValue) get(fd protoreflect.FieldDescriptor) protoreflect.Value {\n\t// Return the zero value as the default if unpopulated.\n\tif !dv.has {\n\t\tif fd.Cardinality() == protoreflect.Repeated {\n\t\t\treturn protoreflect.Value{}\n\t\t}\n\t\tswitch fd.Kind() {\n\t\tcase protoreflect.BoolKind:\n\t\t\treturn protoreflect.ValueOfBool(false)\n\t\tcase protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:\n\t\t\treturn protoreflect.ValueOfInt32(0)\n\t\tcase protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:\n\t\t\treturn protoreflect.ValueOfInt64(0)\n\t\tcase protoreflect.Uint32Kind, protoreflect.Fixed32Kind:\n\t\t\treturn protoreflect.ValueOfUint32(0)\n\t\tcase protoreflect.Uint64Kind, protoreflect.Fixed64Kind:\n\t\t\treturn protoreflect.ValueOfUint64(0)\n\t\tcase protoreflect.FloatKind:\n\t\t\treturn protoreflect.ValueOfFloat32(0)\n\t\tcase protoreflect.DoubleKind:\n\t\t\treturn protoreflect.ValueOfFloat64(0)\n\t\tcase protoreflect.StringKind:\n\t\t\treturn protoreflect.ValueOfString(\"\")\n\t\tcase protoreflect.BytesKind:\n\t\t\treturn protoreflect.ValueOfBytes(nil)\n\t\tcase protoreflect.EnumKind:\n\t\t\tif evs := fd.Enum().Values(); evs.Len() > 0 {\n\t\t\t\treturn protoreflect.ValueOfEnum(evs.Get(0).Number())\n\t\t\t}\n\t\t\treturn protoreflect.ValueOfEnum(0)\n\t\t}\n\t}\n\n\tif len(dv.bytes) > 0 && !bytes.Equal(dv.bytes, dv.val.Bytes()) {\n\t\t// TODO: Avoid panic if we're running with the race detector\n\t\t// and instead spawn a goroutine that periodically resets\n\t\t// this value back to the original to induce a race.\n\t\tpanic(fmt.Sprintf(\"detected mutation on the default bytes for %v\", fd.FullName()))\n\t}\n\treturn dv.val\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/filedesc/desc_init.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 filedesc\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/genid\"\n\t\"google.golang.org/protobuf/internal/strs\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// fileRaw is a data struct used when initializing a file descriptor from\n// a raw FileDescriptorProto.\ntype fileRaw struct {\n\tbuilder       Builder\n\tallEnums      []Enum\n\tallMessages   []Message\n\tallExtensions []Extension\n\tallServices   []Service\n}\n\nfunc newRawFile(db Builder) *File {\n\tfd := &File{fileRaw: fileRaw{builder: db}}\n\tfd.initDecls(db.NumEnums, db.NumMessages, db.NumExtensions, db.NumServices)\n\tfd.unmarshalSeed(db.RawDescriptor)\n\n\t// Extended message targets are eagerly resolved since registration\n\t// needs this information at program init time.\n\tfor i := range fd.allExtensions {\n\t\txd := &fd.allExtensions[i]\n\t\txd.L1.Extendee = fd.resolveMessageDependency(xd.L1.Extendee, listExtTargets, int32(i))\n\t}\n\n\tfd.checkDecls()\n\treturn fd\n}\n\n// initDecls pre-allocates slices for the exact number of enums, messages\n// (including map entries), extensions, and services declared in the proto file.\n// This is done to avoid regrowing the slice, which would change the address\n// for any previously seen declaration.\n//\n// The alloc methods \"allocates\" slices by pulling from the capacity.\nfunc (fd *File) initDecls(numEnums, numMessages, numExtensions, numServices int32) {\n\tfd.allEnums = make([]Enum, 0, numEnums)\n\tfd.allMessages = make([]Message, 0, numMessages)\n\tfd.allExtensions = make([]Extension, 0, numExtensions)\n\tfd.allServices = make([]Service, 0, numServices)\n}\n\nfunc (fd *File) allocEnums(n int) []Enum {\n\ttotal := len(fd.allEnums)\n\tes := fd.allEnums[total : total+n]\n\tfd.allEnums = fd.allEnums[:total+n]\n\treturn es\n}\nfunc (fd *File) allocMessages(n int) []Message {\n\ttotal := len(fd.allMessages)\n\tms := fd.allMessages[total : total+n]\n\tfd.allMessages = fd.allMessages[:total+n]\n\treturn ms\n}\nfunc (fd *File) allocExtensions(n int) []Extension {\n\ttotal := len(fd.allExtensions)\n\txs := fd.allExtensions[total : total+n]\n\tfd.allExtensions = fd.allExtensions[:total+n]\n\treturn xs\n}\nfunc (fd *File) allocServices(n int) []Service {\n\ttotal := len(fd.allServices)\n\txs := fd.allServices[total : total+n]\n\tfd.allServices = fd.allServices[:total+n]\n\treturn xs\n}\n\n// checkDecls performs a sanity check that the expected number of expected\n// declarations matches the number that were found in the descriptor proto.\nfunc (fd *File) checkDecls() {\n\tswitch {\n\tcase len(fd.allEnums) != cap(fd.allEnums):\n\tcase len(fd.allMessages) != cap(fd.allMessages):\n\tcase len(fd.allExtensions) != cap(fd.allExtensions):\n\tcase len(fd.allServices) != cap(fd.allServices):\n\tdefault:\n\t\treturn\n\t}\n\tpanic(\"mismatching cardinality\")\n}\n\nfunc (fd *File) unmarshalSeed(b []byte) {\n\tsb := getBuilder()\n\tdefer putBuilder(sb)\n\n\tvar prevField protoreflect.FieldNumber\n\tvar numEnums, numMessages, numExtensions, numServices int\n\tvar posEnums, posMessages, posExtensions, posServices int\n\tvar options []byte\n\tb0 := b\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FileDescriptorProto_Syntax_field_number:\n\t\t\t\tswitch string(v) {\n\t\t\t\tcase \"proto2\":\n\t\t\t\t\tfd.L1.Syntax = protoreflect.Proto2\n\t\t\t\t\tfd.L1.Edition = EditionProto2\n\t\t\t\tcase \"proto3\":\n\t\t\t\t\tfd.L1.Syntax = protoreflect.Proto3\n\t\t\t\t\tfd.L1.Edition = EditionProto3\n\t\t\t\tcase \"editions\":\n\t\t\t\t\tfd.L1.Syntax = protoreflect.Editions\n\t\t\t\tdefault:\n\t\t\t\t\tpanic(\"invalid syntax\")\n\t\t\t\t}\n\t\t\tcase genid.FileDescriptorProto_Name_field_number:\n\t\t\t\tfd.L1.Path = sb.MakeString(v)\n\t\t\tcase genid.FileDescriptorProto_Package_field_number:\n\t\t\t\tfd.L1.Package = protoreflect.FullName(sb.MakeString(v))\n\t\t\tcase genid.FileDescriptorProto_Options_field_number:\n\t\t\t\toptions = v\n\t\t\tcase genid.FileDescriptorProto_EnumType_field_number:\n\t\t\t\tif prevField != genid.FileDescriptorProto_EnumType_field_number {\n\t\t\t\t\tif numEnums > 0 {\n\t\t\t\t\t\tpanic(\"non-contiguous repeated field\")\n\t\t\t\t\t}\n\t\t\t\t\tposEnums = len(b0) - len(b) - n - m\n\t\t\t\t}\n\t\t\t\tnumEnums++\n\t\t\tcase genid.FileDescriptorProto_MessageType_field_number:\n\t\t\t\tif prevField != genid.FileDescriptorProto_MessageType_field_number {\n\t\t\t\t\tif numMessages > 0 {\n\t\t\t\t\t\tpanic(\"non-contiguous repeated field\")\n\t\t\t\t\t}\n\t\t\t\t\tposMessages = len(b0) - len(b) - n - m\n\t\t\t\t}\n\t\t\t\tnumMessages++\n\t\t\tcase genid.FileDescriptorProto_Extension_field_number:\n\t\t\t\tif prevField != genid.FileDescriptorProto_Extension_field_number {\n\t\t\t\t\tif numExtensions > 0 {\n\t\t\t\t\t\tpanic(\"non-contiguous repeated field\")\n\t\t\t\t\t}\n\t\t\t\t\tposExtensions = len(b0) - len(b) - n - m\n\t\t\t\t}\n\t\t\t\tnumExtensions++\n\t\t\tcase genid.FileDescriptorProto_Service_field_number:\n\t\t\t\tif prevField != genid.FileDescriptorProto_Service_field_number {\n\t\t\t\t\tif numServices > 0 {\n\t\t\t\t\t\tpanic(\"non-contiguous repeated field\")\n\t\t\t\t\t}\n\t\t\t\t\tposServices = len(b0) - len(b) - n - m\n\t\t\t\t}\n\t\t\t\tnumServices++\n\t\t\t}\n\t\t\tprevField = num\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FileDescriptorProto_Edition_field_number:\n\t\t\t\tfd.L1.Edition = Edition(v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t\tprevField = -1 // ignore known field numbers of unknown wire type\n\t\t}\n\t}\n\n\t// If syntax is missing, it is assumed to be proto2.\n\tif fd.L1.Syntax == 0 {\n\t\tfd.L1.Syntax = protoreflect.Proto2\n\t\tfd.L1.Edition = EditionProto2\n\t}\n\n\tfd.L1.EditionFeatures = getFeaturesFor(fd.L1.Edition)\n\n\t// Parse editions features from options if any\n\tif options != nil {\n\t\tfd.unmarshalSeedOptions(options)\n\t}\n\n\t// Must allocate all declarations before parsing each descriptor type\n\t// to ensure we handled all descriptors in \"flattened ordering\".\n\tif numEnums > 0 {\n\t\tfd.L1.Enums.List = fd.allocEnums(numEnums)\n\t}\n\tif numMessages > 0 {\n\t\tfd.L1.Messages.List = fd.allocMessages(numMessages)\n\t}\n\tif numExtensions > 0 {\n\t\tfd.L1.Extensions.List = fd.allocExtensions(numExtensions)\n\t}\n\tif numServices > 0 {\n\t\tfd.L1.Services.List = fd.allocServices(numServices)\n\t}\n\n\tif numEnums > 0 {\n\t\tb := b0[posEnums:]\n\t\tfor i := range fd.L1.Enums.List {\n\t\t\t_, n := protowire.ConsumeVarint(b)\n\t\t\tv, m := protowire.ConsumeBytes(b[n:])\n\t\t\tfd.L1.Enums.List[i].unmarshalSeed(v, sb, fd, fd, i)\n\t\t\tb = b[n+m:]\n\t\t}\n\t}\n\tif numMessages > 0 {\n\t\tb := b0[posMessages:]\n\t\tfor i := range fd.L1.Messages.List {\n\t\t\t_, n := protowire.ConsumeVarint(b)\n\t\t\tv, m := protowire.ConsumeBytes(b[n:])\n\t\t\tfd.L1.Messages.List[i].unmarshalSeed(v, sb, fd, fd, i)\n\t\t\tb = b[n+m:]\n\t\t}\n\t}\n\tif numExtensions > 0 {\n\t\tb := b0[posExtensions:]\n\t\tfor i := range fd.L1.Extensions.List {\n\t\t\t_, n := protowire.ConsumeVarint(b)\n\t\t\tv, m := protowire.ConsumeBytes(b[n:])\n\t\t\tfd.L1.Extensions.List[i].unmarshalSeed(v, sb, fd, fd, i)\n\t\t\tb = b[n+m:]\n\t\t}\n\t}\n\tif numServices > 0 {\n\t\tb := b0[posServices:]\n\t\tfor i := range fd.L1.Services.List {\n\t\t\t_, n := protowire.ConsumeVarint(b)\n\t\t\tv, m := protowire.ConsumeBytes(b[n:])\n\t\t\tfd.L1.Services.List[i].unmarshalSeed(v, sb, fd, fd, i)\n\t\t\tb = b[n+m:]\n\t\t}\n\t}\n}\n\nfunc (fd *File) unmarshalSeedOptions(b []byte) {\n\tfor b := b; len(b) > 0; {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FileOptions_Features_field_number:\n\t\t\t\tif fd.Syntax() != protoreflect.Editions {\n\t\t\t\t\tpanic(fmt.Sprintf(\"invalid descriptor: using edition features in a proto with syntax %s\", fd.Syntax()))\n\t\t\t\t}\n\t\t\t\tfd.L1.EditionFeatures = unmarshalFeatureSet(v, fd.L1.EditionFeatures)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n}\n\nfunc (ed *Enum) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {\n\ted.L0.ParentFile = pf\n\ted.L0.Parent = pd\n\ted.L0.Index = i\n\ted.L1.EditionFeatures = featuresFromParentDesc(ed.Parent())\n\n\tvar numValues int\n\tfor b := b; len(b) > 0; {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.EnumDescriptorProto_Name_field_number:\n\t\t\t\ted.L0.FullName = appendFullName(sb, pd.FullName(), v)\n\t\t\tcase genid.EnumDescriptorProto_Value_field_number:\n\t\t\t\tnumValues++\n\t\t\t}\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.EnumDescriptorProto_Visibility_field_number:\n\t\t\t\ted.L1.Visibility = int32(v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n\n\t// Only construct enum value descriptors for top-level enums since\n\t// they are needed for registration.\n\tif pd != pf {\n\t\treturn\n\t}\n\ted.L1.eagerValues = true\n\ted.L2 = new(EnumL2)\n\ted.L2.Values.List = make([]EnumValue, numValues)\n\tfor i := 0; len(b) > 0; {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.EnumDescriptorProto_Value_field_number:\n\t\t\t\ted.L2.Values.List[i].unmarshalFull(v, sb, pf, ed, i)\n\t\t\t\ti++\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n}\n\nfunc (md *Message) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {\n\tmd.L0.ParentFile = pf\n\tmd.L0.Parent = pd\n\tmd.L0.Index = i\n\tmd.L1.EditionFeatures = featuresFromParentDesc(md.Parent())\n\n\tvar prevField protoreflect.FieldNumber\n\tvar numEnums, numMessages, numExtensions int\n\tvar posEnums, posMessages, posExtensions int\n\tb0 := b\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.DescriptorProto_Name_field_number:\n\t\t\t\tmd.L0.FullName = appendFullName(sb, pd.FullName(), v)\n\t\t\tcase genid.DescriptorProto_EnumType_field_number:\n\t\t\t\tif prevField != genid.DescriptorProto_EnumType_field_number {\n\t\t\t\t\tif numEnums > 0 {\n\t\t\t\t\t\tpanic(\"non-contiguous repeated field\")\n\t\t\t\t\t}\n\t\t\t\t\tposEnums = len(b0) - len(b) - n - m\n\t\t\t\t}\n\t\t\t\tnumEnums++\n\t\t\tcase genid.DescriptorProto_NestedType_field_number:\n\t\t\t\tif prevField != genid.DescriptorProto_NestedType_field_number {\n\t\t\t\t\tif numMessages > 0 {\n\t\t\t\t\t\tpanic(\"non-contiguous repeated field\")\n\t\t\t\t\t}\n\t\t\t\t\tposMessages = len(b0) - len(b) - n - m\n\t\t\t\t}\n\t\t\t\tnumMessages++\n\t\t\tcase genid.DescriptorProto_Extension_field_number:\n\t\t\t\tif prevField != genid.DescriptorProto_Extension_field_number {\n\t\t\t\t\tif numExtensions > 0 {\n\t\t\t\t\t\tpanic(\"non-contiguous repeated field\")\n\t\t\t\t\t}\n\t\t\t\t\tposExtensions = len(b0) - len(b) - n - m\n\t\t\t\t}\n\t\t\t\tnumExtensions++\n\t\t\tcase genid.DescriptorProto_Options_field_number:\n\t\t\t\tmd.unmarshalSeedOptions(v)\n\t\t\t}\n\t\t\tprevField = num\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.DescriptorProto_Visibility_field_number:\n\t\t\t\tmd.L1.Visibility = int32(v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t\tprevField = -1 // ignore known field numbers of unknown wire type\n\t\t}\n\t}\n\n\t// Must allocate all declarations before parsing each descriptor type\n\t// to ensure we handled all descriptors in \"flattened ordering\".\n\tif numEnums > 0 {\n\t\tmd.L1.Enums.List = pf.allocEnums(numEnums)\n\t}\n\tif numMessages > 0 {\n\t\tmd.L1.Messages.List = pf.allocMessages(numMessages)\n\t}\n\tif numExtensions > 0 {\n\t\tmd.L1.Extensions.List = pf.allocExtensions(numExtensions)\n\t}\n\n\tif numEnums > 0 {\n\t\tb := b0[posEnums:]\n\t\tfor i := range md.L1.Enums.List {\n\t\t\t_, n := protowire.ConsumeVarint(b)\n\t\t\tv, m := protowire.ConsumeBytes(b[n:])\n\t\t\tmd.L1.Enums.List[i].unmarshalSeed(v, sb, pf, md, i)\n\t\t\tb = b[n+m:]\n\t\t}\n\t}\n\tif numMessages > 0 {\n\t\tb := b0[posMessages:]\n\t\tfor i := range md.L1.Messages.List {\n\t\t\t_, n := protowire.ConsumeVarint(b)\n\t\t\tv, m := protowire.ConsumeBytes(b[n:])\n\t\t\tmd.L1.Messages.List[i].unmarshalSeed(v, sb, pf, md, i)\n\t\t\tb = b[n+m:]\n\t\t}\n\t}\n\tif numExtensions > 0 {\n\t\tb := b0[posExtensions:]\n\t\tfor i := range md.L1.Extensions.List {\n\t\t\t_, n := protowire.ConsumeVarint(b)\n\t\t\tv, m := protowire.ConsumeBytes(b[n:])\n\t\t\tmd.L1.Extensions.List[i].unmarshalSeed(v, sb, pf, md, i)\n\t\t\tb = b[n+m:]\n\t\t}\n\t}\n}\n\nfunc (md *Message) unmarshalSeedOptions(b []byte) {\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.MessageOptions_MapEntry_field_number:\n\t\t\t\tmd.L1.IsMapEntry = protowire.DecodeBool(v)\n\t\t\tcase genid.MessageOptions_MessageSetWireFormat_field_number:\n\t\t\t\tmd.L1.IsMessageSet = protowire.DecodeBool(v)\n\t\t\t}\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.MessageOptions_Features_field_number:\n\t\t\t\tmd.L1.EditionFeatures = unmarshalFeatureSet(v, md.L1.EditionFeatures)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n}\n\nfunc (xd *Extension) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {\n\txd.L0.ParentFile = pf\n\txd.L0.Parent = pd\n\txd.L0.Index = i\n\txd.L1.EditionFeatures = featuresFromParentDesc(pd)\n\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FieldDescriptorProto_Number_field_number:\n\t\t\t\txd.L1.Number = protoreflect.FieldNumber(v)\n\t\t\tcase genid.FieldDescriptorProto_Label_field_number:\n\t\t\t\txd.L1.Cardinality = protoreflect.Cardinality(v)\n\t\t\tcase genid.FieldDescriptorProto_Type_field_number:\n\t\t\t\txd.L1.Kind = protoreflect.Kind(v)\n\t\t\t}\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FieldDescriptorProto_Name_field_number:\n\t\t\t\txd.L0.FullName = appendFullName(sb, pd.FullName(), v)\n\t\t\tcase genid.FieldDescriptorProto_Extendee_field_number:\n\t\t\t\txd.L1.Extendee = PlaceholderMessage(makeFullName(sb, v))\n\t\t\tcase genid.FieldDescriptorProto_Options_field_number:\n\t\t\t\txd.unmarshalOptions(v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n\n\tif xd.L1.Kind == protoreflect.MessageKind && xd.L1.EditionFeatures.IsDelimitedEncoded {\n\t\txd.L1.Kind = protoreflect.GroupKind\n\t}\n}\n\nfunc (xd *Extension) unmarshalOptions(b []byte) {\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FieldOptions_Packed_field_number:\n\t\t\t\txd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v)\n\t\t\tcase genid.FieldOptions_Lazy_field_number:\n\t\t\t\txd.L1.IsLazy = protowire.DecodeBool(v)\n\t\t\t}\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FieldOptions_Features_field_number:\n\t\t\t\txd.L1.EditionFeatures = unmarshalFeatureSet(v, xd.L1.EditionFeatures)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n}\n\nfunc (sd *Service) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {\n\tsd.L0.ParentFile = pf\n\tsd.L0.Parent = pd\n\tsd.L0.Index = i\n\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.ServiceDescriptorProto_Name_field_number:\n\t\t\t\tsd.L0.FullName = appendFullName(sb, pd.FullName(), v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n}\n\nvar nameBuilderPool = sync.Pool{\n\tNew: func() any { return new(strs.Builder) },\n}\n\nfunc getBuilder() *strs.Builder {\n\treturn nameBuilderPool.Get().(*strs.Builder)\n}\nfunc putBuilder(b *strs.Builder) {\n\tnameBuilderPool.Put(b)\n}\n\n// makeFullName converts b to a protoreflect.FullName,\n// where b must start with a leading dot.\nfunc makeFullName(sb *strs.Builder, b []byte) protoreflect.FullName {\n\tif len(b) == 0 || b[0] != '.' {\n\t\tpanic(\"name reference must be fully qualified\")\n\t}\n\treturn protoreflect.FullName(sb.MakeString(b[1:]))\n}\n\nfunc appendFullName(sb *strs.Builder, prefix protoreflect.FullName, suffix []byte) protoreflect.FullName {\n\treturn sb.AppendFullName(prefix, protoreflect.Name(strs.UnsafeString(suffix)))\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.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 filedesc\n\nimport (\n\t\"reflect\"\n\t\"sync\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/descopts\"\n\t\"google.golang.org/protobuf/internal/genid\"\n\t\"google.golang.org/protobuf/internal/strs\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nfunc (fd *File) lazyRawInit() {\n\tfd.unmarshalFull(fd.builder.RawDescriptor)\n\tfd.resolveMessages()\n\tfd.resolveExtensions()\n\tfd.resolveServices()\n}\n\nfunc (file *File) resolveMessages() {\n\tvar depIdx int32\n\tfor i := range file.allMessages {\n\t\tmd := &file.allMessages[i]\n\n\t\t// Resolve message field dependencies.\n\t\tfor j := range md.L2.Fields.List {\n\t\t\tfd := &md.L2.Fields.List[j]\n\n\t\t\t// Resolve message field dependency.\n\t\t\tswitch fd.L1.Kind {\n\t\t\tcase protoreflect.EnumKind:\n\t\t\t\tfd.L1.Enum = file.resolveEnumDependency(fd.L1.Enum, listFieldDeps, depIdx)\n\t\t\t\tdepIdx++\n\t\t\tcase protoreflect.MessageKind, protoreflect.GroupKind:\n\t\t\t\tfd.L1.Message = file.resolveMessageDependency(fd.L1.Message, listFieldDeps, depIdx)\n\t\t\t\tdepIdx++\n\t\t\t\tif fd.L1.Kind == protoreflect.GroupKind && (fd.IsMap() || fd.IsMapEntry()) {\n\t\t\t\t\t// A map field might inherit delimited encoding from a file-wide default feature.\n\t\t\t\t\t// But maps never actually use delimited encoding. (At least for now...)\n\t\t\t\t\tfd.L1.Kind = protoreflect.MessageKind\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Default is resolved here since it depends on Enum being resolved.\n\t\t\tif v := fd.L1.Default.val; v.IsValid() {\n\t\t\t\tfd.L1.Default = unmarshalDefault(v.Bytes(), fd.L1.Kind, file, fd.L1.Enum)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (file *File) resolveExtensions() {\n\tvar depIdx int32\n\tfor i := range file.allExtensions {\n\t\txd := &file.allExtensions[i]\n\n\t\t// Resolve extension field dependency.\n\t\tswitch xd.L1.Kind {\n\t\tcase protoreflect.EnumKind:\n\t\t\txd.L2.Enum = file.resolveEnumDependency(xd.L2.Enum, listExtDeps, depIdx)\n\t\t\tdepIdx++\n\t\tcase protoreflect.MessageKind, protoreflect.GroupKind:\n\t\t\txd.L2.Message = file.resolveMessageDependency(xd.L2.Message, listExtDeps, depIdx)\n\t\t\tdepIdx++\n\t\t}\n\n\t\t// Default is resolved here since it depends on Enum being resolved.\n\t\tif v := xd.L2.Default.val; v.IsValid() {\n\t\t\txd.L2.Default = unmarshalDefault(v.Bytes(), xd.L1.Kind, file, xd.L2.Enum)\n\t\t}\n\t}\n}\n\nfunc (file *File) resolveServices() {\n\tvar depIdx int32\n\tfor i := range file.allServices {\n\t\tsd := &file.allServices[i]\n\n\t\t// Resolve method dependencies.\n\t\tfor j := range sd.L2.Methods.List {\n\t\t\tmd := &sd.L2.Methods.List[j]\n\t\t\tmd.L1.Input = file.resolveMessageDependency(md.L1.Input, listMethInDeps, depIdx)\n\t\t\tmd.L1.Output = file.resolveMessageDependency(md.L1.Output, listMethOutDeps, depIdx)\n\t\t\tdepIdx++\n\t\t}\n\t}\n}\n\nfunc (file *File) resolveEnumDependency(ed protoreflect.EnumDescriptor, i, j int32) protoreflect.EnumDescriptor {\n\tr := file.builder.FileRegistry\n\tif r, ok := r.(resolverByIndex); ok {\n\t\tif ed2 := r.FindEnumByIndex(i, j, file.allEnums, file.allMessages); ed2 != nil {\n\t\t\treturn ed2\n\t\t}\n\t}\n\tfor i := range file.allEnums {\n\t\tif ed2 := &file.allEnums[i]; ed2.L0.FullName == ed.FullName() {\n\t\t\treturn ed2\n\t\t}\n\t}\n\tif d, _ := r.FindDescriptorByName(ed.FullName()); d != nil {\n\t\treturn d.(protoreflect.EnumDescriptor)\n\t}\n\treturn ed\n}\n\nfunc (file *File) resolveMessageDependency(md protoreflect.MessageDescriptor, i, j int32) protoreflect.MessageDescriptor {\n\tr := file.builder.FileRegistry\n\tif r, ok := r.(resolverByIndex); ok {\n\t\tif md2 := r.FindMessageByIndex(i, j, file.allEnums, file.allMessages); md2 != nil {\n\t\t\treturn md2\n\t\t}\n\t}\n\tfor i := range file.allMessages {\n\t\tif md2 := &file.allMessages[i]; md2.L0.FullName == md.FullName() {\n\t\t\treturn md2\n\t\t}\n\t}\n\tif d, _ := r.FindDescriptorByName(md.FullName()); d != nil {\n\t\treturn d.(protoreflect.MessageDescriptor)\n\t}\n\treturn md\n}\n\nfunc (fd *File) unmarshalFull(b []byte) {\n\tsb := getBuilder()\n\tdefer putBuilder(sb)\n\n\tvar enumIdx, messageIdx, extensionIdx, serviceIdx int\n\tvar rawOptions []byte\n\tvar optionImports []string\n\tfd.L2 = new(FileL2)\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FileDescriptorProto_PublicDependency_field_number:\n\t\t\t\tfd.L2.Imports[v].IsPublic = true\n\t\t\t}\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FileDescriptorProto_Dependency_field_number:\n\t\t\t\tpath := sb.MakeString(v)\n\t\t\t\timp, _ := fd.builder.FileRegistry.FindFileByPath(path)\n\t\t\t\tif imp == nil {\n\t\t\t\t\timp = PlaceholderFile(path)\n\t\t\t\t}\n\t\t\t\tfd.L2.Imports = append(fd.L2.Imports, protoreflect.FileImport{FileDescriptor: imp})\n\t\t\tcase genid.FileDescriptorProto_OptionDependency_field_number:\n\t\t\t\toptionImports = append(optionImports, sb.MakeString(v))\n\t\t\tcase genid.FileDescriptorProto_EnumType_field_number:\n\t\t\t\tfd.L1.Enums.List[enumIdx].unmarshalFull(v, sb)\n\t\t\t\tenumIdx++\n\t\t\tcase genid.FileDescriptorProto_MessageType_field_number:\n\t\t\t\tfd.L1.Messages.List[messageIdx].unmarshalFull(v, sb)\n\t\t\t\tmessageIdx++\n\t\t\tcase genid.FileDescriptorProto_Extension_field_number:\n\t\t\t\tfd.L1.Extensions.List[extensionIdx].unmarshalFull(v, sb)\n\t\t\t\textensionIdx++\n\t\t\tcase genid.FileDescriptorProto_Service_field_number:\n\t\t\t\tfd.L1.Services.List[serviceIdx].unmarshalFull(v, sb)\n\t\t\t\tserviceIdx++\n\t\t\tcase genid.FileDescriptorProto_Options_field_number:\n\t\t\t\trawOptions = appendOptions(rawOptions, v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n\tfd.L2.Options = fd.builder.optionsUnmarshaler(&descopts.File, rawOptions)\n\tif len(optionImports) > 0 {\n\t\tvar imps FileImports\n\t\tvar once sync.Once\n\t\tfd.L2.OptionImports = func() protoreflect.FileImports {\n\t\t\tonce.Do(func() {\n\t\t\t\timps = make(FileImports, len(optionImports))\n\t\t\t\tfor i, path := range optionImports {\n\t\t\t\t\timp, _ := fd.builder.FileRegistry.FindFileByPath(path)\n\t\t\t\t\tif imp == nil {\n\t\t\t\t\t\timp = PlaceholderFile(path)\n\t\t\t\t\t}\n\t\t\t\t\timps[i] = protoreflect.FileImport{FileDescriptor: imp}\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn &imps\n\t\t}\n\t}\n}\n\nfunc (ed *Enum) unmarshalFull(b []byte, sb *strs.Builder) {\n\tvar rawValues [][]byte\n\tvar rawOptions []byte\n\tif !ed.L1.eagerValues {\n\t\ted.L2 = new(EnumL2)\n\t}\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.EnumDescriptorProto_Value_field_number:\n\t\t\t\trawValues = append(rawValues, v)\n\t\t\tcase genid.EnumDescriptorProto_ReservedName_field_number:\n\t\t\t\ted.L2.ReservedNames.List = append(ed.L2.ReservedNames.List, protoreflect.Name(sb.MakeString(v)))\n\t\t\tcase genid.EnumDescriptorProto_ReservedRange_field_number:\n\t\t\t\ted.L2.ReservedRanges.List = append(ed.L2.ReservedRanges.List, unmarshalEnumReservedRange(v))\n\t\t\tcase genid.EnumDescriptorProto_Options_field_number:\n\t\t\t\trawOptions = appendOptions(rawOptions, v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n\tif !ed.L1.eagerValues && len(rawValues) > 0 {\n\t\ted.L2.Values.List = make([]EnumValue, len(rawValues))\n\t\tfor i, b := range rawValues {\n\t\t\ted.L2.Values.List[i].unmarshalFull(b, sb, ed.L0.ParentFile, ed, i)\n\t\t}\n\t}\n\ted.L2.Options = ed.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Enum, rawOptions)\n}\n\nfunc unmarshalEnumReservedRange(b []byte) (r [2]protoreflect.EnumNumber) {\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.EnumDescriptorProto_EnumReservedRange_Start_field_number:\n\t\t\t\tr[0] = protoreflect.EnumNumber(v)\n\t\t\tcase genid.EnumDescriptorProto_EnumReservedRange_End_field_number:\n\t\t\t\tr[1] = protoreflect.EnumNumber(v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n\treturn r\n}\n\nfunc (vd *EnumValue) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {\n\tvd.L0.ParentFile = pf\n\tvd.L0.Parent = pd\n\tvd.L0.Index = i\n\n\tvar rawOptions []byte\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.EnumValueDescriptorProto_Number_field_number:\n\t\t\t\tvd.L1.Number = protoreflect.EnumNumber(v)\n\t\t\t}\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.EnumValueDescriptorProto_Name_field_number:\n\t\t\t\t// NOTE: Enum values are in the same scope as the enum parent.\n\t\t\t\tvd.L0.FullName = appendFullName(sb, pd.Parent().FullName(), v)\n\t\t\tcase genid.EnumValueDescriptorProto_Options_field_number:\n\t\t\t\trawOptions = appendOptions(rawOptions, v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n\tvd.L1.Options = pf.builder.optionsUnmarshaler(&descopts.EnumValue, rawOptions)\n}\n\nfunc (md *Message) unmarshalFull(b []byte, sb *strs.Builder) {\n\tvar rawFields, rawOneofs [][]byte\n\tvar enumIdx, messageIdx, extensionIdx int\n\tvar rawOptions []byte\n\tmd.L2 = new(MessageL2)\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.DescriptorProto_Field_field_number:\n\t\t\t\trawFields = append(rawFields, v)\n\t\t\tcase genid.DescriptorProto_OneofDecl_field_number:\n\t\t\t\trawOneofs = append(rawOneofs, v)\n\t\t\tcase genid.DescriptorProto_ReservedName_field_number:\n\t\t\t\tmd.L2.ReservedNames.List = append(md.L2.ReservedNames.List, protoreflect.Name(sb.MakeString(v)))\n\t\t\tcase genid.DescriptorProto_ReservedRange_field_number:\n\t\t\t\tmd.L2.ReservedRanges.List = append(md.L2.ReservedRanges.List, unmarshalMessageReservedRange(v))\n\t\t\tcase genid.DescriptorProto_ExtensionRange_field_number:\n\t\t\t\tr, rawOptions := unmarshalMessageExtensionRange(v)\n\t\t\t\topts := md.L0.ParentFile.builder.optionsUnmarshaler(&descopts.ExtensionRange, rawOptions)\n\t\t\t\tmd.L2.ExtensionRanges.List = append(md.L2.ExtensionRanges.List, r)\n\t\t\t\tmd.L2.ExtensionRangeOptions = append(md.L2.ExtensionRangeOptions, opts)\n\t\t\tcase genid.DescriptorProto_EnumType_field_number:\n\t\t\t\tmd.L1.Enums.List[enumIdx].unmarshalFull(v, sb)\n\t\t\t\tenumIdx++\n\t\t\tcase genid.DescriptorProto_NestedType_field_number:\n\t\t\t\tmd.L1.Messages.List[messageIdx].unmarshalFull(v, sb)\n\t\t\t\tmessageIdx++\n\t\t\tcase genid.DescriptorProto_Extension_field_number:\n\t\t\t\tmd.L1.Extensions.List[extensionIdx].unmarshalFull(v, sb)\n\t\t\t\textensionIdx++\n\t\t\tcase genid.DescriptorProto_Options_field_number:\n\t\t\t\trawOptions = appendOptions(rawOptions, v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n\tif len(rawFields) > 0 || len(rawOneofs) > 0 {\n\t\tmd.L2.Fields.List = make([]Field, len(rawFields))\n\t\tmd.L2.Oneofs.List = make([]Oneof, len(rawOneofs))\n\t\tfor i, b := range rawFields {\n\t\t\tfd := &md.L2.Fields.List[i]\n\t\t\tfd.unmarshalFull(b, sb, md.L0.ParentFile, md, i)\n\t\t\tif fd.L1.Cardinality == protoreflect.Required {\n\t\t\t\tmd.L2.RequiredNumbers.List = append(md.L2.RequiredNumbers.List, fd.L1.Number)\n\t\t\t}\n\t\t}\n\t\tfor i, b := range rawOneofs {\n\t\t\tod := &md.L2.Oneofs.List[i]\n\t\t\tod.unmarshalFull(b, sb, md.L0.ParentFile, md, i)\n\t\t}\n\t}\n\tmd.L2.Options = md.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Message, rawOptions)\n}\n\nfunc unmarshalMessageReservedRange(b []byte) (r [2]protoreflect.FieldNumber) {\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.DescriptorProto_ReservedRange_Start_field_number:\n\t\t\t\tr[0] = protoreflect.FieldNumber(v)\n\t\t\tcase genid.DescriptorProto_ReservedRange_End_field_number:\n\t\t\t\tr[1] = protoreflect.FieldNumber(v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n\treturn r\n}\n\nfunc unmarshalMessageExtensionRange(b []byte) (r [2]protoreflect.FieldNumber, rawOptions []byte) {\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.DescriptorProto_ExtensionRange_Start_field_number:\n\t\t\t\tr[0] = protoreflect.FieldNumber(v)\n\t\t\tcase genid.DescriptorProto_ExtensionRange_End_field_number:\n\t\t\t\tr[1] = protoreflect.FieldNumber(v)\n\t\t\t}\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.DescriptorProto_ExtensionRange_Options_field_number:\n\t\t\t\trawOptions = appendOptions(rawOptions, v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n\treturn r, rawOptions\n}\n\nfunc (fd *Field) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {\n\tfd.L0.ParentFile = pf\n\tfd.L0.Parent = pd\n\tfd.L0.Index = i\n\tfd.L1.EditionFeatures = featuresFromParentDesc(fd.Parent())\n\n\tvar rawTypeName []byte\n\tvar rawOptions []byte\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FieldDescriptorProto_Number_field_number:\n\t\t\t\tfd.L1.Number = protoreflect.FieldNumber(v)\n\t\t\tcase genid.FieldDescriptorProto_Label_field_number:\n\t\t\t\tfd.L1.Cardinality = protoreflect.Cardinality(v)\n\t\t\tcase genid.FieldDescriptorProto_Type_field_number:\n\t\t\t\tfd.L1.Kind = protoreflect.Kind(v)\n\t\t\tcase genid.FieldDescriptorProto_OneofIndex_field_number:\n\t\t\t\t// In Message.unmarshalFull, we allocate slices for both\n\t\t\t\t// the field and oneof descriptors before unmarshaling either\n\t\t\t\t// of them. This ensures pointers to slice elements are stable.\n\t\t\t\tod := &pd.(*Message).L2.Oneofs.List[v]\n\t\t\t\tod.L1.Fields.List = append(od.L1.Fields.List, fd)\n\t\t\t\tif fd.L1.ContainingOneof != nil {\n\t\t\t\t\tpanic(\"oneof type already set\")\n\t\t\t\t}\n\t\t\t\tfd.L1.ContainingOneof = od\n\t\t\tcase genid.FieldDescriptorProto_Proto3Optional_field_number:\n\t\t\t\tfd.L1.IsProto3Optional = protowire.DecodeBool(v)\n\t\t\t}\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FieldDescriptorProto_Name_field_number:\n\t\t\t\tfd.L0.FullName = appendFullName(sb, pd.FullName(), v)\n\t\t\tcase genid.FieldDescriptorProto_JsonName_field_number:\n\t\t\t\tfd.L1.StringName.InitJSON(sb.MakeString(v))\n\t\t\tcase genid.FieldDescriptorProto_DefaultValue_field_number:\n\t\t\t\tfd.L1.Default.val = protoreflect.ValueOfBytes(v) // temporarily store as bytes; later resolved in resolveMessages\n\t\t\tcase genid.FieldDescriptorProto_TypeName_field_number:\n\t\t\t\trawTypeName = v\n\t\t\tcase genid.FieldDescriptorProto_Options_field_number:\n\t\t\t\tfd.unmarshalOptions(v)\n\t\t\t\trawOptions = appendOptions(rawOptions, v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n\tif fd.L1.Kind == protoreflect.MessageKind && fd.L1.EditionFeatures.IsDelimitedEncoded {\n\t\tfd.L1.Kind = protoreflect.GroupKind\n\t}\n\tif fd.L1.EditionFeatures.IsLegacyRequired {\n\t\tfd.L1.Cardinality = protoreflect.Required\n\t}\n\tif rawTypeName != nil {\n\t\tname := makeFullName(sb, rawTypeName)\n\t\tswitch fd.L1.Kind {\n\t\tcase protoreflect.EnumKind:\n\t\t\tfd.L1.Enum = PlaceholderEnum(name)\n\t\tcase protoreflect.MessageKind, protoreflect.GroupKind:\n\t\t\tfd.L1.Message = PlaceholderMessage(name)\n\t\t}\n\t}\n\tfd.L1.Options = pf.builder.optionsUnmarshaler(&descopts.Field, rawOptions)\n}\n\nfunc (fd *Field) unmarshalOptions(b []byte) {\n\tconst FieldOptions_EnforceUTF8 = 13\n\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FieldOptions_Packed_field_number:\n\t\t\t\tfd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v)\n\t\t\tcase genid.FieldOptions_Lazy_field_number:\n\t\t\t\tfd.L1.IsLazy = protowire.DecodeBool(v)\n\t\t\tcase FieldOptions_EnforceUTF8:\n\t\t\t\tfd.L1.EditionFeatures.IsUTF8Validated = protowire.DecodeBool(v)\n\t\t\t}\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FieldOptions_Features_field_number:\n\t\t\t\tfd.L1.EditionFeatures = unmarshalFeatureSet(v, fd.L1.EditionFeatures)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n}\n\nfunc (od *Oneof) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {\n\tod.L0.ParentFile = pf\n\tod.L0.Parent = pd\n\tod.L0.Index = i\n\n\tvar rawOptions []byte\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.OneofDescriptorProto_Name_field_number:\n\t\t\t\tod.L0.FullName = appendFullName(sb, pd.FullName(), v)\n\t\t\tcase genid.OneofDescriptorProto_Options_field_number:\n\t\t\t\trawOptions = appendOptions(rawOptions, v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n\tod.L1.Options = pf.builder.optionsUnmarshaler(&descopts.Oneof, rawOptions)\n}\n\nfunc (xd *Extension) unmarshalFull(b []byte, sb *strs.Builder) {\n\tvar rawTypeName []byte\n\tvar rawOptions []byte\n\txd.L2 = new(ExtensionL2)\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FieldDescriptorProto_Proto3Optional_field_number:\n\t\t\t\txd.L2.IsProto3Optional = protowire.DecodeBool(v)\n\t\t\t}\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FieldDescriptorProto_JsonName_field_number:\n\t\t\t\txd.L2.StringName.InitJSON(sb.MakeString(v))\n\t\t\tcase genid.FieldDescriptorProto_DefaultValue_field_number:\n\t\t\t\txd.L2.Default.val = protoreflect.ValueOfBytes(v) // temporarily store as bytes; later resolved in resolveExtensions\n\t\t\tcase genid.FieldDescriptorProto_TypeName_field_number:\n\t\t\t\trawTypeName = v\n\t\t\tcase genid.FieldDescriptorProto_Options_field_number:\n\t\t\t\trawOptions = appendOptions(rawOptions, v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n\tif rawTypeName != nil {\n\t\tname := makeFullName(sb, rawTypeName)\n\t\tswitch xd.L1.Kind {\n\t\tcase protoreflect.EnumKind:\n\t\t\txd.L2.Enum = PlaceholderEnum(name)\n\t\tcase protoreflect.MessageKind, protoreflect.GroupKind:\n\t\t\txd.L2.Message = PlaceholderMessage(name)\n\t\t}\n\t}\n\txd.L2.Options = xd.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Field, rawOptions)\n}\n\nfunc (sd *Service) unmarshalFull(b []byte, sb *strs.Builder) {\n\tvar rawMethods [][]byte\n\tvar rawOptions []byte\n\tsd.L2 = new(ServiceL2)\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.ServiceDescriptorProto_Method_field_number:\n\t\t\t\trawMethods = append(rawMethods, v)\n\t\t\tcase genid.ServiceDescriptorProto_Options_field_number:\n\t\t\t\trawOptions = appendOptions(rawOptions, v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n\tif len(rawMethods) > 0 {\n\t\tsd.L2.Methods.List = make([]Method, len(rawMethods))\n\t\tfor i, b := range rawMethods {\n\t\t\tsd.L2.Methods.List[i].unmarshalFull(b, sb, sd.L0.ParentFile, sd, i)\n\t\t}\n\t}\n\tsd.L2.Options = sd.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Service, rawOptions)\n}\n\nfunc (md *Method) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) {\n\tmd.L0.ParentFile = pf\n\tmd.L0.Parent = pd\n\tmd.L0.Index = i\n\n\tvar rawOptions []byte\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.MethodDescriptorProto_ClientStreaming_field_number:\n\t\t\t\tmd.L1.IsStreamingClient = protowire.DecodeBool(v)\n\t\t\tcase genid.MethodDescriptorProto_ServerStreaming_field_number:\n\t\t\t\tmd.L1.IsStreamingServer = protowire.DecodeBool(v)\n\t\t\t}\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.MethodDescriptorProto_Name_field_number:\n\t\t\t\tmd.L0.FullName = appendFullName(sb, pd.FullName(), v)\n\t\t\tcase genid.MethodDescriptorProto_InputType_field_number:\n\t\t\t\tmd.L1.Input = PlaceholderMessage(makeFullName(sb, v))\n\t\t\tcase genid.MethodDescriptorProto_OutputType_field_number:\n\t\t\t\tmd.L1.Output = PlaceholderMessage(makeFullName(sb, v))\n\t\t\tcase genid.MethodDescriptorProto_Options_field_number:\n\t\t\t\trawOptions = appendOptions(rawOptions, v)\n\t\t\t}\n\t\tdefault:\n\t\t\tm := protowire.ConsumeFieldValue(num, typ, b)\n\t\t\tb = b[m:]\n\t\t}\n\t}\n\tmd.L1.Options = pf.builder.optionsUnmarshaler(&descopts.Method, rawOptions)\n}\n\n// appendOptions appends src to dst, where the returned slice is never nil.\n// This is necessary to distinguish between empty and unpopulated options.\nfunc appendOptions(dst, src []byte) []byte {\n\tif dst == nil {\n\t\tdst = []byte{}\n\t}\n\treturn append(dst, src...)\n}\n\n// optionsUnmarshaler constructs a lazy unmarshal function for an options message.\n//\n// The type of message to unmarshal to is passed as a pointer since the\n// vars in descopts may not yet be populated at the time this function is called.\nfunc (db *Builder) optionsUnmarshaler(p *protoreflect.ProtoMessage, b []byte) func() protoreflect.ProtoMessage {\n\tif b == nil {\n\t\treturn nil\n\t}\n\tvar opts protoreflect.ProtoMessage\n\tvar once sync.Once\n\treturn func() protoreflect.ProtoMessage {\n\t\tonce.Do(func() {\n\t\t\tif *p == nil {\n\t\t\t\tpanic(\"Descriptor.Options called without importing the descriptor package\")\n\t\t\t}\n\t\t\topts = reflect.New(reflect.TypeOf(*p).Elem()).Interface().(protoreflect.ProtoMessage)\n\t\t\tif err := (proto.UnmarshalOptions{\n\t\t\t\tAllowPartial: true,\n\t\t\t\tResolver:     db.TypeResolver,\n\t\t\t}).Unmarshal(b, opts); err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t})\n\t\treturn opts\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/filedesc/desc_list.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 filedesc\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"sort\"\n\t\"sync\"\n\n\t\"google.golang.org/protobuf/internal/genid\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/descfmt\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/internal/pragma\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\ntype FileImports []protoreflect.FileImport\n\nfunc (p *FileImports) Len() int                            { return len(*p) }\nfunc (p *FileImports) Get(i int) protoreflect.FileImport   { return (*p)[i] }\nfunc (p *FileImports) Format(s fmt.State, r rune)          { descfmt.FormatList(s, r, p) }\nfunc (p *FileImports) ProtoInternal(pragma.DoNotImplement) {}\n\ntype Names struct {\n\tList []protoreflect.Name\n\tonce sync.Once\n\thas  map[protoreflect.Name]int // protected by once\n}\n\nfunc (p *Names) Len() int                            { return len(p.List) }\nfunc (p *Names) Get(i int) protoreflect.Name         { return p.List[i] }\nfunc (p *Names) Has(s protoreflect.Name) bool        { return p.lazyInit().has[s] > 0 }\nfunc (p *Names) Format(s fmt.State, r rune)          { descfmt.FormatList(s, r, p) }\nfunc (p *Names) ProtoInternal(pragma.DoNotImplement) {}\nfunc (p *Names) lazyInit() *Names {\n\tp.once.Do(func() {\n\t\tif len(p.List) > 0 {\n\t\t\tp.has = make(map[protoreflect.Name]int, len(p.List))\n\t\t\tfor _, s := range p.List {\n\t\t\t\tp.has[s] = p.has[s] + 1\n\t\t\t}\n\t\t}\n\t})\n\treturn p\n}\n\n// CheckValid reports any errors with the set of names with an error message\n// that completes the sentence: \"ranges is invalid because it has ...\"\nfunc (p *Names) CheckValid() error {\n\tfor s, n := range p.lazyInit().has {\n\t\tswitch {\n\t\tcase n > 1:\n\t\t\treturn errors.New(\"duplicate name: %q\", s)\n\t\tcase false && !s.IsValid():\n\t\t\t// NOTE: The C++ implementation does not validate the identifier.\n\t\t\t// See https://github.com/protocolbuffers/protobuf/issues/6335.\n\t\t\treturn errors.New(\"invalid name: %q\", s)\n\t\t}\n\t}\n\treturn nil\n}\n\ntype EnumRanges struct {\n\tList   [][2]protoreflect.EnumNumber // start inclusive; end inclusive\n\tonce   sync.Once\n\tsorted [][2]protoreflect.EnumNumber // protected by once\n}\n\nfunc (p *EnumRanges) Len() int                             { return len(p.List) }\nfunc (p *EnumRanges) Get(i int) [2]protoreflect.EnumNumber { return p.List[i] }\nfunc (p *EnumRanges) Has(n protoreflect.EnumNumber) bool {\n\tfor ls := p.lazyInit().sorted; len(ls) > 0; {\n\t\ti := len(ls) / 2\n\t\tswitch r := enumRange(ls[i]); {\n\t\tcase n < r.Start():\n\t\t\tls = ls[:i] // search lower\n\t\tcase n > r.End():\n\t\t\tls = ls[i+1:] // search upper\n\t\tdefault:\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\nfunc (p *EnumRanges) Format(s fmt.State, r rune)          { descfmt.FormatList(s, r, p) }\nfunc (p *EnumRanges) ProtoInternal(pragma.DoNotImplement) {}\nfunc (p *EnumRanges) lazyInit() *EnumRanges {\n\tp.once.Do(func() {\n\t\tp.sorted = append(p.sorted, p.List...)\n\t\tsort.Slice(p.sorted, func(i, j int) bool {\n\t\t\treturn p.sorted[i][0] < p.sorted[j][0]\n\t\t})\n\t})\n\treturn p\n}\n\n// CheckValid reports any errors with the set of names with an error message\n// that completes the sentence: \"ranges is invalid because it has ...\"\nfunc (p *EnumRanges) CheckValid() error {\n\tvar rp enumRange\n\tfor i, r := range p.lazyInit().sorted {\n\t\tr := enumRange(r)\n\t\tswitch {\n\t\tcase !(r.Start() <= r.End()):\n\t\t\treturn errors.New(\"invalid range: %v\", r)\n\t\tcase !(rp.End() < r.Start()) && i > 0:\n\t\t\treturn errors.New(\"overlapping ranges: %v with %v\", rp, r)\n\t\t}\n\t\trp = r\n\t}\n\treturn nil\n}\n\ntype enumRange [2]protoreflect.EnumNumber\n\nfunc (r enumRange) Start() protoreflect.EnumNumber { return r[0] } // inclusive\nfunc (r enumRange) End() protoreflect.EnumNumber   { return r[1] } // inclusive\nfunc (r enumRange) String() string {\n\tif r.Start() == r.End() {\n\t\treturn fmt.Sprintf(\"%d\", r.Start())\n\t}\n\treturn fmt.Sprintf(\"%d to %d\", r.Start(), r.End())\n}\n\ntype FieldRanges struct {\n\tList   [][2]protoreflect.FieldNumber // start inclusive; end exclusive\n\tonce   sync.Once\n\tsorted [][2]protoreflect.FieldNumber // protected by once\n}\n\nfunc (p *FieldRanges) Len() int                              { return len(p.List) }\nfunc (p *FieldRanges) Get(i int) [2]protoreflect.FieldNumber { return p.List[i] }\nfunc (p *FieldRanges) Has(n protoreflect.FieldNumber) bool {\n\tfor ls := p.lazyInit().sorted; len(ls) > 0; {\n\t\ti := len(ls) / 2\n\t\tswitch r := fieldRange(ls[i]); {\n\t\tcase n < r.Start():\n\t\t\tls = ls[:i] // search lower\n\t\tcase n > r.End():\n\t\t\tls = ls[i+1:] // search upper\n\t\tdefault:\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\nfunc (p *FieldRanges) Format(s fmt.State, r rune)          { descfmt.FormatList(s, r, p) }\nfunc (p *FieldRanges) ProtoInternal(pragma.DoNotImplement) {}\nfunc (p *FieldRanges) lazyInit() *FieldRanges {\n\tp.once.Do(func() {\n\t\tp.sorted = append(p.sorted, p.List...)\n\t\tsort.Slice(p.sorted, func(i, j int) bool {\n\t\t\treturn p.sorted[i][0] < p.sorted[j][0]\n\t\t})\n\t})\n\treturn p\n}\n\n// CheckValid reports any errors with the set of ranges with an error message\n// that completes the sentence: \"ranges is invalid because it has ...\"\nfunc (p *FieldRanges) CheckValid(isMessageSet bool) error {\n\tvar rp fieldRange\n\tfor i, r := range p.lazyInit().sorted {\n\t\tr := fieldRange(r)\n\t\tswitch {\n\t\tcase !isValidFieldNumber(r.Start(), isMessageSet):\n\t\t\treturn errors.New(\"invalid field number: %d\", r.Start())\n\t\tcase !isValidFieldNumber(r.End(), isMessageSet):\n\t\t\treturn errors.New(\"invalid field number: %d\", r.End())\n\t\tcase !(r.Start() <= r.End()):\n\t\t\treturn errors.New(\"invalid range: %v\", r)\n\t\tcase !(rp.End() < r.Start()) && i > 0:\n\t\t\treturn errors.New(\"overlapping ranges: %v with %v\", rp, r)\n\t\t}\n\t\trp = r\n\t}\n\treturn nil\n}\n\n// isValidFieldNumber reports whether the field number is valid.\n// Unlike the FieldNumber.IsValid method, it allows ranges that cover the\n// reserved number range.\nfunc isValidFieldNumber(n protoreflect.FieldNumber, isMessageSet bool) bool {\n\treturn protowire.MinValidNumber <= n && (n <= protowire.MaxValidNumber || isMessageSet)\n}\n\n// CheckOverlap reports an error if p and q overlap.\nfunc (p *FieldRanges) CheckOverlap(q *FieldRanges) error {\n\trps := p.lazyInit().sorted\n\trqs := q.lazyInit().sorted\n\tfor pi, qi := 0, 0; pi < len(rps) && qi < len(rqs); {\n\t\trp := fieldRange(rps[pi])\n\t\trq := fieldRange(rqs[qi])\n\t\tif !(rp.End() < rq.Start() || rq.End() < rp.Start()) {\n\t\t\treturn errors.New(\"overlapping ranges: %v with %v\", rp, rq)\n\t\t}\n\t\tif rp.Start() < rq.Start() {\n\t\t\tpi++\n\t\t} else {\n\t\t\tqi++\n\t\t}\n\t}\n\treturn nil\n}\n\ntype fieldRange [2]protoreflect.FieldNumber\n\nfunc (r fieldRange) Start() protoreflect.FieldNumber { return r[0] }     // inclusive\nfunc (r fieldRange) End() protoreflect.FieldNumber   { return r[1] - 1 } // inclusive\nfunc (r fieldRange) String() string {\n\tif r.Start() == r.End() {\n\t\treturn fmt.Sprintf(\"%d\", r.Start())\n\t}\n\treturn fmt.Sprintf(\"%d to %d\", r.Start(), r.End())\n}\n\ntype FieldNumbers struct {\n\tList []protoreflect.FieldNumber\n\tonce sync.Once\n\thas  map[protoreflect.FieldNumber]struct{} // protected by once\n}\n\nfunc (p *FieldNumbers) Len() int                           { return len(p.List) }\nfunc (p *FieldNumbers) Get(i int) protoreflect.FieldNumber { return p.List[i] }\nfunc (p *FieldNumbers) Has(n protoreflect.FieldNumber) bool {\n\tp.once.Do(func() {\n\t\tif len(p.List) > 0 {\n\t\t\tp.has = make(map[protoreflect.FieldNumber]struct{}, len(p.List))\n\t\t\tfor _, n := range p.List {\n\t\t\t\tp.has[n] = struct{}{}\n\t\t\t}\n\t\t}\n\t})\n\t_, ok := p.has[n]\n\treturn ok\n}\nfunc (p *FieldNumbers) Format(s fmt.State, r rune)          { descfmt.FormatList(s, r, p) }\nfunc (p *FieldNumbers) ProtoInternal(pragma.DoNotImplement) {}\n\ntype OneofFields struct {\n\tList   []protoreflect.FieldDescriptor\n\tonce   sync.Once\n\tbyName map[protoreflect.Name]protoreflect.FieldDescriptor        // protected by once\n\tbyJSON map[string]protoreflect.FieldDescriptor                   // protected by once\n\tbyText map[string]protoreflect.FieldDescriptor                   // protected by once\n\tbyNum  map[protoreflect.FieldNumber]protoreflect.FieldDescriptor // protected by once\n}\n\nfunc (p *OneofFields) Len() int                               { return len(p.List) }\nfunc (p *OneofFields) Get(i int) protoreflect.FieldDescriptor { return p.List[i] }\nfunc (p *OneofFields) ByName(s protoreflect.Name) protoreflect.FieldDescriptor {\n\treturn p.lazyInit().byName[s]\n}\nfunc (p *OneofFields) ByJSONName(s string) protoreflect.FieldDescriptor {\n\treturn p.lazyInit().byJSON[s]\n}\nfunc (p *OneofFields) ByTextName(s string) protoreflect.FieldDescriptor {\n\treturn p.lazyInit().byText[s]\n}\nfunc (p *OneofFields) ByNumber(n protoreflect.FieldNumber) protoreflect.FieldDescriptor {\n\treturn p.lazyInit().byNum[n]\n}\nfunc (p *OneofFields) Format(s fmt.State, r rune)          { descfmt.FormatList(s, r, p) }\nfunc (p *OneofFields) ProtoInternal(pragma.DoNotImplement) {}\n\nfunc (p *OneofFields) lazyInit() *OneofFields {\n\tp.once.Do(func() {\n\t\tif len(p.List) > 0 {\n\t\t\tp.byName = make(map[protoreflect.Name]protoreflect.FieldDescriptor, len(p.List))\n\t\t\tp.byJSON = make(map[string]protoreflect.FieldDescriptor, len(p.List))\n\t\t\tp.byText = make(map[string]protoreflect.FieldDescriptor, len(p.List))\n\t\t\tp.byNum = make(map[protoreflect.FieldNumber]protoreflect.FieldDescriptor, len(p.List))\n\t\t\tfor _, f := range p.List {\n\t\t\t\t// Field names and numbers are guaranteed to be unique.\n\t\t\t\tp.byName[f.Name()] = f\n\t\t\t\tp.byJSON[f.JSONName()] = f\n\t\t\t\tp.byText[f.TextName()] = f\n\t\t\t\tp.byNum[f.Number()] = f\n\t\t\t}\n\t\t}\n\t})\n\treturn p\n}\n\ntype SourceLocations struct {\n\t// List is a list of SourceLocations.\n\t// The SourceLocation.Next field does not need to be populated\n\t// as it will be lazily populated upon first need.\n\tList []protoreflect.SourceLocation\n\n\t// File is the parent file descriptor that these locations are relative to.\n\t// If non-nil, ByDescriptor verifies that the provided descriptor\n\t// is a child of this file descriptor.\n\tFile protoreflect.FileDescriptor\n\n\tonce   sync.Once\n\tbyPath map[pathKey]int\n}\n\nfunc (p *SourceLocations) Len() int                              { return len(p.List) }\nfunc (p *SourceLocations) Get(i int) protoreflect.SourceLocation { return p.lazyInit().List[i] }\nfunc (p *SourceLocations) byKey(k pathKey) protoreflect.SourceLocation {\n\tif i, ok := p.lazyInit().byPath[k]; ok {\n\t\treturn p.List[i]\n\t}\n\treturn protoreflect.SourceLocation{}\n}\nfunc (p *SourceLocations) ByPath(path protoreflect.SourcePath) protoreflect.SourceLocation {\n\treturn p.byKey(newPathKey(path))\n}\nfunc (p *SourceLocations) ByDescriptor(desc protoreflect.Descriptor) protoreflect.SourceLocation {\n\tif p.File != nil && desc != nil && p.File != desc.ParentFile() {\n\t\treturn protoreflect.SourceLocation{} // mismatching parent files\n\t}\n\tvar pathArr [16]int32\n\tpath := pathArr[:0]\n\tfor {\n\t\tswitch desc.(type) {\n\t\tcase protoreflect.FileDescriptor:\n\t\t\t// Reverse the path since it was constructed in reverse.\n\t\t\tfor i, j := 0, len(path)-1; i < j; i, j = i+1, j-1 {\n\t\t\t\tpath[i], path[j] = path[j], path[i]\n\t\t\t}\n\t\t\treturn p.byKey(newPathKey(path))\n\t\tcase protoreflect.MessageDescriptor:\n\t\t\tpath = append(path, int32(desc.Index()))\n\t\t\tdesc = desc.Parent()\n\t\t\tswitch desc.(type) {\n\t\t\tcase protoreflect.FileDescriptor:\n\t\t\t\tpath = append(path, int32(genid.FileDescriptorProto_MessageType_field_number))\n\t\t\tcase protoreflect.MessageDescriptor:\n\t\t\t\tpath = append(path, int32(genid.DescriptorProto_NestedType_field_number))\n\t\t\tdefault:\n\t\t\t\treturn protoreflect.SourceLocation{}\n\t\t\t}\n\t\tcase protoreflect.FieldDescriptor:\n\t\t\tisExtension := desc.(protoreflect.FieldDescriptor).IsExtension()\n\t\t\tpath = append(path, int32(desc.Index()))\n\t\t\tdesc = desc.Parent()\n\t\t\tif isExtension {\n\t\t\t\tswitch desc.(type) {\n\t\t\t\tcase protoreflect.FileDescriptor:\n\t\t\t\t\tpath = append(path, int32(genid.FileDescriptorProto_Extension_field_number))\n\t\t\t\tcase protoreflect.MessageDescriptor:\n\t\t\t\t\tpath = append(path, int32(genid.DescriptorProto_Extension_field_number))\n\t\t\t\tdefault:\n\t\t\t\t\treturn protoreflect.SourceLocation{}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch desc.(type) {\n\t\t\t\tcase protoreflect.MessageDescriptor:\n\t\t\t\t\tpath = append(path, int32(genid.DescriptorProto_Field_field_number))\n\t\t\t\tdefault:\n\t\t\t\t\treturn protoreflect.SourceLocation{}\n\t\t\t\t}\n\t\t\t}\n\t\tcase protoreflect.OneofDescriptor:\n\t\t\tpath = append(path, int32(desc.Index()))\n\t\t\tdesc = desc.Parent()\n\t\t\tswitch desc.(type) {\n\t\t\tcase protoreflect.MessageDescriptor:\n\t\t\t\tpath = append(path, int32(genid.DescriptorProto_OneofDecl_field_number))\n\t\t\tdefault:\n\t\t\t\treturn protoreflect.SourceLocation{}\n\t\t\t}\n\t\tcase protoreflect.EnumDescriptor:\n\t\t\tpath = append(path, int32(desc.Index()))\n\t\t\tdesc = desc.Parent()\n\t\t\tswitch desc.(type) {\n\t\t\tcase protoreflect.FileDescriptor:\n\t\t\t\tpath = append(path, int32(genid.FileDescriptorProto_EnumType_field_number))\n\t\t\tcase protoreflect.MessageDescriptor:\n\t\t\t\tpath = append(path, int32(genid.DescriptorProto_EnumType_field_number))\n\t\t\tdefault:\n\t\t\t\treturn protoreflect.SourceLocation{}\n\t\t\t}\n\t\tcase protoreflect.EnumValueDescriptor:\n\t\t\tpath = append(path, int32(desc.Index()))\n\t\t\tdesc = desc.Parent()\n\t\t\tswitch desc.(type) {\n\t\t\tcase protoreflect.EnumDescriptor:\n\t\t\t\tpath = append(path, int32(genid.EnumDescriptorProto_Value_field_number))\n\t\t\tdefault:\n\t\t\t\treturn protoreflect.SourceLocation{}\n\t\t\t}\n\t\tcase protoreflect.ServiceDescriptor:\n\t\t\tpath = append(path, int32(desc.Index()))\n\t\t\tdesc = desc.Parent()\n\t\t\tswitch desc.(type) {\n\t\t\tcase protoreflect.FileDescriptor:\n\t\t\t\tpath = append(path, int32(genid.FileDescriptorProto_Service_field_number))\n\t\t\tdefault:\n\t\t\t\treturn protoreflect.SourceLocation{}\n\t\t\t}\n\t\tcase protoreflect.MethodDescriptor:\n\t\t\tpath = append(path, int32(desc.Index()))\n\t\t\tdesc = desc.Parent()\n\t\t\tswitch desc.(type) {\n\t\t\tcase protoreflect.ServiceDescriptor:\n\t\t\t\tpath = append(path, int32(genid.ServiceDescriptorProto_Method_field_number))\n\t\t\tdefault:\n\t\t\t\treturn protoreflect.SourceLocation{}\n\t\t\t}\n\t\tdefault:\n\t\t\treturn protoreflect.SourceLocation{}\n\t\t}\n\t}\n}\nfunc (p *SourceLocations) lazyInit() *SourceLocations {\n\tp.once.Do(func() {\n\t\tif len(p.List) > 0 {\n\t\t\t// Collect all the indexes for a given path.\n\t\t\tpathIdxs := make(map[pathKey][]int, len(p.List))\n\t\t\tfor i, l := range p.List {\n\t\t\t\tk := newPathKey(l.Path)\n\t\t\t\tpathIdxs[k] = append(pathIdxs[k], i)\n\t\t\t}\n\n\t\t\t// Update the next index for all locations.\n\t\t\tp.byPath = make(map[pathKey]int, len(p.List))\n\t\t\tfor k, idxs := range pathIdxs {\n\t\t\t\tfor i := 0; i < len(idxs)-1; i++ {\n\t\t\t\t\tp.List[idxs[i]].Next = idxs[i+1]\n\t\t\t\t}\n\t\t\t\tp.List[idxs[len(idxs)-1]].Next = 0\n\t\t\t\tp.byPath[k] = idxs[0] // record the first location for this path\n\t\t\t}\n\t\t}\n\t})\n\treturn p\n}\nfunc (p *SourceLocations) ProtoInternal(pragma.DoNotImplement) {}\n\n// pathKey is a comparable representation of protoreflect.SourcePath.\ntype pathKey struct {\n\tarr [16]uint8 // first n-1 path segments; last element is the length\n\tstr string    // used if the path does not fit in arr\n}\n\nfunc newPathKey(p protoreflect.SourcePath) (k pathKey) {\n\tif len(p) < len(k.arr) {\n\t\tfor i, ps := range p {\n\t\t\tif ps < 0 || math.MaxUint8 <= ps {\n\t\t\t\treturn pathKey{str: p.String()}\n\t\t\t}\n\t\t\tk.arr[i] = uint8(ps)\n\t\t}\n\t\tk.arr[len(k.arr)-1] = uint8(len(p))\n\t\treturn k\n\t}\n\treturn pathKey{str: p.String()}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.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 generated by generate-types. DO NOT EDIT.\n\npackage filedesc\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"google.golang.org/protobuf/internal/descfmt\"\n\t\"google.golang.org/protobuf/internal/pragma\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\ntype Enums struct {\n\tList   []Enum\n\tonce   sync.Once\n\tbyName map[protoreflect.Name]*Enum // protected by once\n}\n\nfunc (p *Enums) Len() int {\n\treturn len(p.List)\n}\nfunc (p *Enums) Get(i int) protoreflect.EnumDescriptor {\n\treturn &p.List[i]\n}\nfunc (p *Enums) ByName(s protoreflect.Name) protoreflect.EnumDescriptor {\n\tif d := p.lazyInit().byName[s]; d != nil {\n\t\treturn d\n\t}\n\treturn nil\n}\nfunc (p *Enums) Format(s fmt.State, r rune) {\n\tdescfmt.FormatList(s, r, p)\n}\nfunc (p *Enums) ProtoInternal(pragma.DoNotImplement) {}\nfunc (p *Enums) lazyInit() *Enums {\n\tp.once.Do(func() {\n\t\tif len(p.List) > 0 {\n\t\t\tp.byName = make(map[protoreflect.Name]*Enum, len(p.List))\n\t\t\tfor i := range p.List {\n\t\t\t\td := &p.List[i]\n\t\t\t\tif _, ok := p.byName[d.Name()]; !ok {\n\t\t\t\t\tp.byName[d.Name()] = d\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\treturn p\n}\n\ntype EnumValues struct {\n\tList   []EnumValue\n\tonce   sync.Once\n\tbyName map[protoreflect.Name]*EnumValue       // protected by once\n\tbyNum  map[protoreflect.EnumNumber]*EnumValue // protected by once\n}\n\nfunc (p *EnumValues) Len() int {\n\treturn len(p.List)\n}\nfunc (p *EnumValues) Get(i int) protoreflect.EnumValueDescriptor {\n\treturn &p.List[i]\n}\nfunc (p *EnumValues) ByName(s protoreflect.Name) protoreflect.EnumValueDescriptor {\n\tif d := p.lazyInit().byName[s]; d != nil {\n\t\treturn d\n\t}\n\treturn nil\n}\nfunc (p *EnumValues) ByNumber(n protoreflect.EnumNumber) protoreflect.EnumValueDescriptor {\n\tif d := p.lazyInit().byNum[n]; d != nil {\n\t\treturn d\n\t}\n\treturn nil\n}\nfunc (p *EnumValues) Format(s fmt.State, r rune) {\n\tdescfmt.FormatList(s, r, p)\n}\nfunc (p *EnumValues) ProtoInternal(pragma.DoNotImplement) {}\nfunc (p *EnumValues) lazyInit() *EnumValues {\n\tp.once.Do(func() {\n\t\tif len(p.List) > 0 {\n\t\t\tp.byName = make(map[protoreflect.Name]*EnumValue, len(p.List))\n\t\t\tp.byNum = make(map[protoreflect.EnumNumber]*EnumValue, len(p.List))\n\t\t\tfor i := range p.List {\n\t\t\t\td := &p.List[i]\n\t\t\t\tif _, ok := p.byName[d.Name()]; !ok {\n\t\t\t\t\tp.byName[d.Name()] = d\n\t\t\t\t}\n\t\t\t\tif _, ok := p.byNum[d.Number()]; !ok {\n\t\t\t\t\tp.byNum[d.Number()] = d\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\treturn p\n}\n\ntype Messages struct {\n\tList   []Message\n\tonce   sync.Once\n\tbyName map[protoreflect.Name]*Message // protected by once\n}\n\nfunc (p *Messages) Len() int {\n\treturn len(p.List)\n}\nfunc (p *Messages) Get(i int) protoreflect.MessageDescriptor {\n\treturn &p.List[i]\n}\nfunc (p *Messages) ByName(s protoreflect.Name) protoreflect.MessageDescriptor {\n\tif d := p.lazyInit().byName[s]; d != nil {\n\t\treturn d\n\t}\n\treturn nil\n}\nfunc (p *Messages) Format(s fmt.State, r rune) {\n\tdescfmt.FormatList(s, r, p)\n}\nfunc (p *Messages) ProtoInternal(pragma.DoNotImplement) {}\nfunc (p *Messages) lazyInit() *Messages {\n\tp.once.Do(func() {\n\t\tif len(p.List) > 0 {\n\t\t\tp.byName = make(map[protoreflect.Name]*Message, len(p.List))\n\t\t\tfor i := range p.List {\n\t\t\t\td := &p.List[i]\n\t\t\t\tif _, ok := p.byName[d.Name()]; !ok {\n\t\t\t\t\tp.byName[d.Name()] = d\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\treturn p\n}\n\ntype Fields struct {\n\tList   []Field\n\tonce   sync.Once\n\tbyName map[protoreflect.Name]*Field        // protected by once\n\tbyJSON map[string]*Field                   // protected by once\n\tbyText map[string]*Field                   // protected by once\n\tbyNum  map[protoreflect.FieldNumber]*Field // protected by once\n}\n\nfunc (p *Fields) Len() int {\n\treturn len(p.List)\n}\nfunc (p *Fields) Get(i int) protoreflect.FieldDescriptor {\n\treturn &p.List[i]\n}\nfunc (p *Fields) ByName(s protoreflect.Name) protoreflect.FieldDescriptor {\n\tif d := p.lazyInit().byName[s]; d != nil {\n\t\treturn d\n\t}\n\treturn nil\n}\nfunc (p *Fields) ByJSONName(s string) protoreflect.FieldDescriptor {\n\tif d := p.lazyInit().byJSON[s]; d != nil {\n\t\treturn d\n\t}\n\treturn nil\n}\nfunc (p *Fields) ByTextName(s string) protoreflect.FieldDescriptor {\n\tif d := p.lazyInit().byText[s]; d != nil {\n\t\treturn d\n\t}\n\treturn nil\n}\nfunc (p *Fields) ByNumber(n protoreflect.FieldNumber) protoreflect.FieldDescriptor {\n\tif d := p.lazyInit().byNum[n]; d != nil {\n\t\treturn d\n\t}\n\treturn nil\n}\nfunc (p *Fields) Format(s fmt.State, r rune) {\n\tdescfmt.FormatList(s, r, p)\n}\nfunc (p *Fields) ProtoInternal(pragma.DoNotImplement) {}\nfunc (p *Fields) lazyInit() *Fields {\n\tp.once.Do(func() {\n\t\tif len(p.List) > 0 {\n\t\t\tp.byName = make(map[protoreflect.Name]*Field, len(p.List))\n\t\t\tp.byJSON = make(map[string]*Field, len(p.List))\n\t\t\tp.byText = make(map[string]*Field, len(p.List))\n\t\t\tp.byNum = make(map[protoreflect.FieldNumber]*Field, len(p.List))\n\t\t\tfor i := range p.List {\n\t\t\t\td := &p.List[i]\n\t\t\t\tif _, ok := p.byName[d.Name()]; !ok {\n\t\t\t\t\tp.byName[d.Name()] = d\n\t\t\t\t}\n\t\t\t\tif _, ok := p.byJSON[d.JSONName()]; !ok {\n\t\t\t\t\tp.byJSON[d.JSONName()] = d\n\t\t\t\t}\n\t\t\t\tif _, ok := p.byText[d.TextName()]; !ok {\n\t\t\t\t\tp.byText[d.TextName()] = d\n\t\t\t\t}\n\t\t\t\tif isGroupLike(d) {\n\t\t\t\t\tlowerJSONName := strings.ToLower(d.JSONName())\n\t\t\t\t\tif _, ok := p.byJSON[lowerJSONName]; !ok {\n\t\t\t\t\t\tp.byJSON[lowerJSONName] = d\n\t\t\t\t\t}\n\t\t\t\t\tlowerTextName := strings.ToLower(d.TextName())\n\t\t\t\t\tif _, ok := p.byText[lowerTextName]; !ok {\n\t\t\t\t\t\tp.byText[lowerTextName] = d\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif _, ok := p.byNum[d.Number()]; !ok {\n\t\t\t\t\tp.byNum[d.Number()] = d\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\treturn p\n}\n\ntype Oneofs struct {\n\tList   []Oneof\n\tonce   sync.Once\n\tbyName map[protoreflect.Name]*Oneof // protected by once\n}\n\nfunc (p *Oneofs) Len() int {\n\treturn len(p.List)\n}\nfunc (p *Oneofs) Get(i int) protoreflect.OneofDescriptor {\n\treturn &p.List[i]\n}\nfunc (p *Oneofs) ByName(s protoreflect.Name) protoreflect.OneofDescriptor {\n\tif d := p.lazyInit().byName[s]; d != nil {\n\t\treturn d\n\t}\n\treturn nil\n}\nfunc (p *Oneofs) Format(s fmt.State, r rune) {\n\tdescfmt.FormatList(s, r, p)\n}\nfunc (p *Oneofs) ProtoInternal(pragma.DoNotImplement) {}\nfunc (p *Oneofs) lazyInit() *Oneofs {\n\tp.once.Do(func() {\n\t\tif len(p.List) > 0 {\n\t\t\tp.byName = make(map[protoreflect.Name]*Oneof, len(p.List))\n\t\t\tfor i := range p.List {\n\t\t\t\td := &p.List[i]\n\t\t\t\tif _, ok := p.byName[d.Name()]; !ok {\n\t\t\t\t\tp.byName[d.Name()] = d\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\treturn p\n}\n\ntype Extensions struct {\n\tList   []Extension\n\tonce   sync.Once\n\tbyName map[protoreflect.Name]*Extension // protected by once\n}\n\nfunc (p *Extensions) Len() int {\n\treturn len(p.List)\n}\nfunc (p *Extensions) Get(i int) protoreflect.ExtensionDescriptor {\n\treturn &p.List[i]\n}\nfunc (p *Extensions) ByName(s protoreflect.Name) protoreflect.ExtensionDescriptor {\n\tif d := p.lazyInit().byName[s]; d != nil {\n\t\treturn d\n\t}\n\treturn nil\n}\nfunc (p *Extensions) Format(s fmt.State, r rune) {\n\tdescfmt.FormatList(s, r, p)\n}\nfunc (p *Extensions) ProtoInternal(pragma.DoNotImplement) {}\nfunc (p *Extensions) lazyInit() *Extensions {\n\tp.once.Do(func() {\n\t\tif len(p.List) > 0 {\n\t\t\tp.byName = make(map[protoreflect.Name]*Extension, len(p.List))\n\t\t\tfor i := range p.List {\n\t\t\t\td := &p.List[i]\n\t\t\t\tif _, ok := p.byName[d.Name()]; !ok {\n\t\t\t\t\tp.byName[d.Name()] = d\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\treturn p\n}\n\ntype Services struct {\n\tList   []Service\n\tonce   sync.Once\n\tbyName map[protoreflect.Name]*Service // protected by once\n}\n\nfunc (p *Services) Len() int {\n\treturn len(p.List)\n}\nfunc (p *Services) Get(i int) protoreflect.ServiceDescriptor {\n\treturn &p.List[i]\n}\nfunc (p *Services) ByName(s protoreflect.Name) protoreflect.ServiceDescriptor {\n\tif d := p.lazyInit().byName[s]; d != nil {\n\t\treturn d\n\t}\n\treturn nil\n}\nfunc (p *Services) Format(s fmt.State, r rune) {\n\tdescfmt.FormatList(s, r, p)\n}\nfunc (p *Services) ProtoInternal(pragma.DoNotImplement) {}\nfunc (p *Services) lazyInit() *Services {\n\tp.once.Do(func() {\n\t\tif len(p.List) > 0 {\n\t\t\tp.byName = make(map[protoreflect.Name]*Service, len(p.List))\n\t\t\tfor i := range p.List {\n\t\t\t\td := &p.List[i]\n\t\t\t\tif _, ok := p.byName[d.Name()]; !ok {\n\t\t\t\t\tp.byName[d.Name()] = d\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\treturn p\n}\n\ntype Methods struct {\n\tList   []Method\n\tonce   sync.Once\n\tbyName map[protoreflect.Name]*Method // protected by once\n}\n\nfunc (p *Methods) Len() int {\n\treturn len(p.List)\n}\nfunc (p *Methods) Get(i int) protoreflect.MethodDescriptor {\n\treturn &p.List[i]\n}\nfunc (p *Methods) ByName(s protoreflect.Name) protoreflect.MethodDescriptor {\n\tif d := p.lazyInit().byName[s]; d != nil {\n\t\treturn d\n\t}\n\treturn nil\n}\nfunc (p *Methods) Format(s fmt.State, r rune) {\n\tdescfmt.FormatList(s, r, p)\n}\nfunc (p *Methods) ProtoInternal(pragma.DoNotImplement) {}\nfunc (p *Methods) lazyInit() *Methods {\n\tp.once.Do(func() {\n\t\tif len(p.List) > 0 {\n\t\t\tp.byName = make(map[protoreflect.Name]*Method, len(p.List))\n\t\t\tfor i := range p.List {\n\t\t\t\td := &p.List[i]\n\t\t\t\tif _, ok := p.byName[d.Name()]; !ok {\n\t\t\t\t\tp.byName[d.Name()] = d\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\treturn p\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/filedesc/editions.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 filedesc\n\nimport (\n\t\"fmt\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/editiondefaults\"\n\t\"google.golang.org/protobuf/internal/genid\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nvar (\n\tdefaultsCache = make(map[Edition]EditionFeatures)\n\tdefaultsKeys  = []Edition{}\n)\n\nfunc init() {\n\tunmarshalEditionDefaults(editiondefaults.Defaults)\n\tSurrogateProto2.L1.EditionFeatures = getFeaturesFor(EditionProto2)\n\tSurrogateProto3.L1.EditionFeatures = getFeaturesFor(EditionProto3)\n\tSurrogateEdition2023.L1.EditionFeatures = getFeaturesFor(Edition2023)\n}\n\nfunc unmarshalGoFeature(b []byte, parent EditionFeatures) EditionFeatures {\n\tfor len(b) > 0 {\n\t\tnum, _, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch num {\n\t\tcase genid.GoFeatures_LegacyUnmarshalJsonEnum_field_number:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tparent.GenerateLegacyUnmarshalJSON = protowire.DecodeBool(v)\n\t\tcase genid.GoFeatures_ApiLevel_field_number:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tparent.APILevel = int(v)\n\t\tcase genid.GoFeatures_StripEnumPrefix_field_number:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tparent.StripEnumPrefix = int(v)\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"unknown field number %d while unmarshalling GoFeatures\", num))\n\t\t}\n\t}\n\treturn parent\n}\n\nfunc unmarshalFeatureSet(b []byte, parent EditionFeatures) EditionFeatures {\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FeatureSet_FieldPresence_field_number:\n\t\t\t\tparent.IsFieldPresence = v == genid.FeatureSet_EXPLICIT_enum_value || v == genid.FeatureSet_LEGACY_REQUIRED_enum_value\n\t\t\t\tparent.IsLegacyRequired = v == genid.FeatureSet_LEGACY_REQUIRED_enum_value\n\t\t\tcase genid.FeatureSet_EnumType_field_number:\n\t\t\t\tparent.IsOpenEnum = v == genid.FeatureSet_OPEN_enum_value\n\t\t\tcase genid.FeatureSet_RepeatedFieldEncoding_field_number:\n\t\t\t\tparent.IsPacked = v == genid.FeatureSet_PACKED_enum_value\n\t\t\tcase genid.FeatureSet_Utf8Validation_field_number:\n\t\t\t\tparent.IsUTF8Validated = v == genid.FeatureSet_VERIFY_enum_value\n\t\t\tcase genid.FeatureSet_MessageEncoding_field_number:\n\t\t\t\tparent.IsDelimitedEncoded = v == genid.FeatureSet_DELIMITED_enum_value\n\t\t\tcase genid.FeatureSet_JsonFormat_field_number:\n\t\t\t\tparent.IsJSONCompliant = v == genid.FeatureSet_ALLOW_enum_value\n\t\t\tcase genid.FeatureSet_EnforceNamingStyle_field_number:\n\t\t\t\t// EnforceNamingStyle is enforced in protoc, languages other than C++\n\t\t\t\t// are not supposed to do anything with this feature.\n\t\t\tcase genid.FeatureSet_DefaultSymbolVisibility_field_number:\n\t\t\t\t// DefaultSymbolVisibility is enforced in protoc, runtimes should not\n\t\t\t\t// inspect this value.\n\t\t\tdefault:\n\t\t\t\tpanic(fmt.Sprintf(\"unknown field number %d while unmarshalling FeatureSet\", num))\n\t\t\t}\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FeatureSet_Go_ext_number:\n\t\t\t\tparent = unmarshalGoFeature(v, parent)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn parent\n}\n\nfunc featuresFromParentDesc(parentDesc protoreflect.Descriptor) EditionFeatures {\n\tvar parentFS EditionFeatures\n\tswitch p := parentDesc.(type) {\n\tcase *File:\n\t\tparentFS = p.L1.EditionFeatures\n\tcase *Message:\n\t\tparentFS = p.L1.EditionFeatures\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unknown parent type %T\", parentDesc))\n\t}\n\treturn parentFS\n}\n\nfunc unmarshalEditionDefault(b []byte) {\n\tvar ed Edition\n\tvar fs EditionFeatures\n\tfor len(b) > 0 {\n\t\tnum, typ, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch typ {\n\t\tcase protowire.VarintType:\n\t\t\tv, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FeatureSetDefaults_FeatureSetEditionDefault_Edition_field_number:\n\t\t\t\ted = Edition(v)\n\t\t\t}\n\t\tcase protowire.BytesType:\n\t\t\tv, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tswitch num {\n\t\t\tcase genid.FeatureSetDefaults_FeatureSetEditionDefault_FixedFeatures_field_number:\n\t\t\t\tfs = unmarshalFeatureSet(v, fs)\n\t\t\tcase genid.FeatureSetDefaults_FeatureSetEditionDefault_OverridableFeatures_field_number:\n\t\t\t\tfs = unmarshalFeatureSet(v, fs)\n\t\t\t}\n\t\t}\n\t}\n\tdefaultsCache[ed] = fs\n\tdefaultsKeys = append(defaultsKeys, ed)\n}\n\nfunc unmarshalEditionDefaults(b []byte) {\n\tfor len(b) > 0 {\n\t\tnum, _, n := protowire.ConsumeTag(b)\n\t\tb = b[n:]\n\t\tswitch num {\n\t\tcase genid.FeatureSetDefaults_Defaults_field_number:\n\t\t\tdef, m := protowire.ConsumeBytes(b)\n\t\t\tb = b[m:]\n\t\t\tunmarshalEditionDefault(def)\n\t\tcase genid.FeatureSetDefaults_MinimumEdition_field_number,\n\t\t\tgenid.FeatureSetDefaults_MaximumEdition_field_number:\n\t\t\t// We don't care about the minimum and maximum editions. If the\n\t\t\t// edition we are looking for later on is not in the cache we know\n\t\t\t// it is outside of the range between minimum and maximum edition.\n\t\t\t_, m := protowire.ConsumeVarint(b)\n\t\t\tb = b[m:]\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"unknown field number %d while unmarshalling EditionDefault\", num))\n\t\t}\n\t}\n}\n\nfunc getFeaturesFor(ed Edition) EditionFeatures {\n\tmatch := EditionUnknown\n\tfor _, key := range defaultsKeys {\n\t\tif key > ed {\n\t\t\tbreak\n\t\t}\n\t\tmatch = key\n\t}\n\tif match == EditionUnknown {\n\t\tpanic(fmt.Sprintf(\"unsupported edition: %v\", ed))\n\t}\n\treturn defaultsCache[match]\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/filedesc/placeholder.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 filedesc\n\nimport (\n\t\"google.golang.org/protobuf/internal/descopts\"\n\t\"google.golang.org/protobuf/internal/pragma\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nvar (\n\temptyNames           = new(Names)\n\temptyEnumRanges      = new(EnumRanges)\n\temptyFieldRanges     = new(FieldRanges)\n\temptyFieldNumbers    = new(FieldNumbers)\n\temptySourceLocations = new(SourceLocations)\n\n\temptyFiles      = new(FileImports)\n\temptyMessages   = new(Messages)\n\temptyFields     = new(Fields)\n\temptyOneofs     = new(Oneofs)\n\temptyEnums      = new(Enums)\n\temptyEnumValues = new(EnumValues)\n\temptyExtensions = new(Extensions)\n\temptyServices   = new(Services)\n)\n\n// PlaceholderFile is a placeholder, representing only the file path.\ntype PlaceholderFile string\n\nfunc (f PlaceholderFile) ParentFile() protoreflect.FileDescriptor       { return f }\nfunc (f PlaceholderFile) Parent() protoreflect.Descriptor               { return nil }\nfunc (f PlaceholderFile) Index() int                                    { return 0 }\nfunc (f PlaceholderFile) Syntax() protoreflect.Syntax                   { return 0 }\nfunc (f PlaceholderFile) Name() protoreflect.Name                       { return \"\" }\nfunc (f PlaceholderFile) FullName() protoreflect.FullName               { return \"\" }\nfunc (f PlaceholderFile) IsPlaceholder() bool                           { return true }\nfunc (f PlaceholderFile) Options() protoreflect.ProtoMessage            { return descopts.File }\nfunc (f PlaceholderFile) Path() string                                  { return string(f) }\nfunc (f PlaceholderFile) Package() protoreflect.FullName                { return \"\" }\nfunc (f PlaceholderFile) Imports() protoreflect.FileImports             { return emptyFiles }\nfunc (f PlaceholderFile) Messages() protoreflect.MessageDescriptors     { return emptyMessages }\nfunc (f PlaceholderFile) Enums() protoreflect.EnumDescriptors           { return emptyEnums }\nfunc (f PlaceholderFile) Extensions() protoreflect.ExtensionDescriptors { return emptyExtensions }\nfunc (f PlaceholderFile) Services() protoreflect.ServiceDescriptors     { return emptyServices }\nfunc (f PlaceholderFile) SourceLocations() protoreflect.SourceLocations { return emptySourceLocations }\nfunc (f PlaceholderFile) ProtoType(protoreflect.FileDescriptor)         { return }\nfunc (f PlaceholderFile) ProtoInternal(pragma.DoNotImplement)           { return }\n\n// PlaceholderEnum is a placeholder, representing only the full name.\ntype PlaceholderEnum protoreflect.FullName\n\nfunc (e PlaceholderEnum) ParentFile() protoreflect.FileDescriptor   { return nil }\nfunc (e PlaceholderEnum) Parent() protoreflect.Descriptor           { return nil }\nfunc (e PlaceholderEnum) Index() int                                { return 0 }\nfunc (e PlaceholderEnum) Syntax() protoreflect.Syntax               { return 0 }\nfunc (e PlaceholderEnum) Name() protoreflect.Name                   { return protoreflect.FullName(e).Name() }\nfunc (e PlaceholderEnum) FullName() protoreflect.FullName           { return protoreflect.FullName(e) }\nfunc (e PlaceholderEnum) IsPlaceholder() bool                       { return true }\nfunc (e PlaceholderEnum) Options() protoreflect.ProtoMessage        { return descopts.Enum }\nfunc (e PlaceholderEnum) Values() protoreflect.EnumValueDescriptors { return emptyEnumValues }\nfunc (e PlaceholderEnum) ReservedNames() protoreflect.Names         { return emptyNames }\nfunc (e PlaceholderEnum) ReservedRanges() protoreflect.EnumRanges   { return emptyEnumRanges }\nfunc (e PlaceholderEnum) IsClosed() bool                            { return false }\nfunc (e PlaceholderEnum) ProtoType(protoreflect.EnumDescriptor)     { return }\nfunc (e PlaceholderEnum) ProtoInternal(pragma.DoNotImplement)       { return }\n\n// PlaceholderEnumValue is a placeholder, representing only the full name.\ntype PlaceholderEnumValue protoreflect.FullName\n\nfunc (e PlaceholderEnumValue) ParentFile() protoreflect.FileDescriptor    { return nil }\nfunc (e PlaceholderEnumValue) Parent() protoreflect.Descriptor            { return nil }\nfunc (e PlaceholderEnumValue) Index() int                                 { return 0 }\nfunc (e PlaceholderEnumValue) Syntax() protoreflect.Syntax                { return 0 }\nfunc (e PlaceholderEnumValue) Name() protoreflect.Name                    { return protoreflect.FullName(e).Name() }\nfunc (e PlaceholderEnumValue) FullName() protoreflect.FullName            { return protoreflect.FullName(e) }\nfunc (e PlaceholderEnumValue) IsPlaceholder() bool                        { return true }\nfunc (e PlaceholderEnumValue) Options() protoreflect.ProtoMessage         { return descopts.EnumValue }\nfunc (e PlaceholderEnumValue) Number() protoreflect.EnumNumber            { return 0 }\nfunc (e PlaceholderEnumValue) ProtoType(protoreflect.EnumValueDescriptor) { return }\nfunc (e PlaceholderEnumValue) ProtoInternal(pragma.DoNotImplement)        { return }\n\n// PlaceholderMessage is a placeholder, representing only the full name.\ntype PlaceholderMessage protoreflect.FullName\n\nfunc (m PlaceholderMessage) ParentFile() protoreflect.FileDescriptor    { return nil }\nfunc (m PlaceholderMessage) Parent() protoreflect.Descriptor            { return nil }\nfunc (m PlaceholderMessage) Index() int                                 { return 0 }\nfunc (m PlaceholderMessage) Syntax() protoreflect.Syntax                { return 0 }\nfunc (m PlaceholderMessage) Name() protoreflect.Name                    { return protoreflect.FullName(m).Name() }\nfunc (m PlaceholderMessage) FullName() protoreflect.FullName            { return protoreflect.FullName(m) }\nfunc (m PlaceholderMessage) IsPlaceholder() bool                        { return true }\nfunc (m PlaceholderMessage) Options() protoreflect.ProtoMessage         { return descopts.Message }\nfunc (m PlaceholderMessage) IsMapEntry() bool                           { return false }\nfunc (m PlaceholderMessage) Fields() protoreflect.FieldDescriptors      { return emptyFields }\nfunc (m PlaceholderMessage) Oneofs() protoreflect.OneofDescriptors      { return emptyOneofs }\nfunc (m PlaceholderMessage) ReservedNames() protoreflect.Names          { return emptyNames }\nfunc (m PlaceholderMessage) ReservedRanges() protoreflect.FieldRanges   { return emptyFieldRanges }\nfunc (m PlaceholderMessage) RequiredNumbers() protoreflect.FieldNumbers { return emptyFieldNumbers }\nfunc (m PlaceholderMessage) ExtensionRanges() protoreflect.FieldRanges  { return emptyFieldRanges }\nfunc (m PlaceholderMessage) ExtensionRangeOptions(int) protoreflect.ProtoMessage {\n\tpanic(\"index out of range\")\n}\nfunc (m PlaceholderMessage) Messages() protoreflect.MessageDescriptors     { return emptyMessages }\nfunc (m PlaceholderMessage) Enums() protoreflect.EnumDescriptors           { return emptyEnums }\nfunc (m PlaceholderMessage) Extensions() protoreflect.ExtensionDescriptors { return emptyExtensions }\nfunc (m PlaceholderMessage) ProtoType(protoreflect.MessageDescriptor)      { return }\nfunc (m PlaceholderMessage) ProtoInternal(pragma.DoNotImplement)           { return }\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/filedesc/presence.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 filedesc\n\nimport \"google.golang.org/protobuf/reflect/protoreflect\"\n\n// UsePresenceForField reports whether the presence bitmap should be used for\n// the specified field.\nfunc UsePresenceForField(fd protoreflect.FieldDescriptor) (usePresence, canBeLazy bool) {\n\tswitch {\n\tcase fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic():\n\t\t// Oneof fields never use the presence bitmap.\n\t\t//\n\t\t// Synthetic oneofs are an exception: Those are used to implement proto3\n\t\t// optional fields and hence should follow non-oneof field semantics.\n\t\treturn false, false\n\n\tcase fd.IsMap():\n\t\t// Map-typed fields never use the presence bitmap.\n\t\treturn false, false\n\n\tcase fd.Kind() == protoreflect.MessageKind || fd.Kind() == protoreflect.GroupKind:\n\t\t// Lazy fields always use the presence bitmap (only messages can be lazy).\n\t\tisLazy := fd.(interface{ IsLazy() bool }).IsLazy()\n\t\treturn isLazy, isLazy\n\n\tdefault:\n\t\t// If the field has presence, use the presence bitmap.\n\t\treturn fd.HasPresence(), false\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/filetype/build.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 filetype provides functionality for wrapping descriptors\n// with Go type information.\npackage filetype\n\nimport (\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/internal/descopts\"\n\t\"google.golang.org/protobuf/internal/filedesc\"\n\tpimpl \"google.golang.org/protobuf/internal/impl\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/reflect/protoregistry\"\n)\n\n// Builder constructs type descriptors from a raw file descriptor\n// and associated Go types for each enum and message declaration.\n//\n// # Flattened Ordering\n//\n// The protobuf type system represents declarations as a tree. Certain nodes in\n// the tree require us to either associate it with a concrete Go type or to\n// resolve a dependency, which is information that must be provided separately\n// since it cannot be derived from the file descriptor alone.\n//\n// However, representing a tree as Go literals is difficult to simply do in a\n// space and time efficient way. Thus, we store them as a flattened list of\n// objects where the serialization order from the tree-based form is important.\n//\n// The \"flattened ordering\" is defined as a tree traversal of all enum, message,\n// extension, and service declarations using the following algorithm:\n//\n//\tdef VisitFileDecls(fd):\n//\t\tfor e in fd.Enums:      yield e\n//\t\tfor m in fd.Messages:   yield m\n//\t\tfor x in fd.Extensions: yield x\n//\t\tfor s in fd.Services:   yield s\n//\t\tfor m in fd.Messages:   yield from VisitMessageDecls(m)\n//\n//\tdef VisitMessageDecls(md):\n//\t\tfor e in md.Enums:      yield e\n//\t\tfor m in md.Messages:   yield m\n//\t\tfor x in md.Extensions: yield x\n//\t\tfor m in md.Messages:   yield from VisitMessageDecls(m)\n//\n// The traversal starts at the root file descriptor and yields each direct\n// declaration within each node before traversing into sub-declarations\n// that children themselves may have.\ntype Builder struct {\n\t// File is the underlying file descriptor builder.\n\tFile filedesc.Builder\n\n\t// GoTypes is a unique set of the Go types for all declarations and\n\t// dependencies. Each type is represented as a zero value of the Go type.\n\t//\n\t// Declarations are Go types generated for enums and messages directly\n\t// declared (not publicly imported) in the proto source file.\n\t// Messages for map entries are accounted for, but represented by nil.\n\t// Enum declarations in \"flattened ordering\" come first, followed by\n\t// message declarations in \"flattened ordering\".\n\t//\n\t// Dependencies are Go types for enums or messages referenced by\n\t// message fields, for parent extended messages of\n\t// extension fields, for enums or messages referenced by extension fields,\n\t// and for input and output messages referenced by service methods.\n\t// Dependencies must come after declarations, but the ordering of\n\t// dependencies themselves is unspecified.\n\tGoTypes []any\n\n\t// DependencyIndexes is an ordered list of indexes into GoTypes for the\n\t// dependencies of messages, extensions, or services.\n\t//\n\t// There are 5 sub-lists in \"flattened ordering\" concatenated back-to-back:\n\t//\t0. Message field dependencies: list of the enum or message type\n\t//\treferred to by every message field.\n\t//\t1. Extension field targets: list of the extended parent message of\n\t//\tevery extension.\n\t//\t2. Extension field dependencies: list of the enum or message type\n\t//\treferred to by every extension field.\n\t//\t3. Service method inputs: list of the input message type\n\t//\treferred to by every service method.\n\t//\t4. Service method outputs: list of the output message type\n\t//\treferred to by every service method.\n\t//\n\t// The offset into DependencyIndexes for the start of each sub-list\n\t// is appended to the end in reverse order.\n\tDependencyIndexes []int32\n\n\t// EnumInfos is a list of enum infos in \"flattened ordering\".\n\tEnumInfos []pimpl.EnumInfo\n\n\t// MessageInfos is a list of message infos in \"flattened ordering\".\n\t// If provided, the GoType and PBType for each element is populated.\n\t//\n\t// Requirement: len(MessageInfos) == len(Build.Messages)\n\tMessageInfos []pimpl.MessageInfo\n\n\t// ExtensionInfos is a list of extension infos in \"flattened ordering\".\n\t// Each element is initialized and registered with the protoregistry package.\n\t//\n\t// Requirement: len(LegacyExtensions) == len(Build.Extensions)\n\tExtensionInfos []pimpl.ExtensionInfo\n\n\t// TypeRegistry is the registry to register each type descriptor.\n\t// If nil, it uses protoregistry.GlobalTypes.\n\tTypeRegistry interface {\n\t\tRegisterMessage(protoreflect.MessageType) error\n\t\tRegisterEnum(protoreflect.EnumType) error\n\t\tRegisterExtension(protoreflect.ExtensionType) error\n\t}\n}\n\n// Out is the output of the builder.\ntype Out struct {\n\tFile protoreflect.FileDescriptor\n}\n\nfunc (tb Builder) Build() (out Out) {\n\t// Replace the resolver with one that resolves dependencies by index,\n\t// which is faster and more reliable than relying on the global registry.\n\tif tb.File.FileRegistry == nil {\n\t\ttb.File.FileRegistry = protoregistry.GlobalFiles\n\t}\n\ttb.File.FileRegistry = &resolverByIndex{\n\t\tgoTypes:      tb.GoTypes,\n\t\tdepIdxs:      tb.DependencyIndexes,\n\t\tfileRegistry: tb.File.FileRegistry,\n\t}\n\n\t// Initialize registry if unpopulated.\n\tif tb.TypeRegistry == nil {\n\t\ttb.TypeRegistry = protoregistry.GlobalTypes\n\t}\n\n\tfbOut := tb.File.Build()\n\tout.File = fbOut.File\n\n\t// Process enums.\n\tenumGoTypes := tb.GoTypes[:len(fbOut.Enums)]\n\tif len(tb.EnumInfos) != len(fbOut.Enums) {\n\t\tpanic(\"mismatching enum lengths\")\n\t}\n\tif len(fbOut.Enums) > 0 {\n\t\tfor i := range fbOut.Enums {\n\t\t\ttb.EnumInfos[i] = pimpl.EnumInfo{\n\t\t\t\tGoReflectType: reflect.TypeOf(enumGoTypes[i]),\n\t\t\t\tDesc:          &fbOut.Enums[i],\n\t\t\t}\n\t\t\t// Register enum types.\n\t\t\tif err := tb.TypeRegistry.RegisterEnum(&tb.EnumInfos[i]); err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Process messages.\n\tmessageGoTypes := tb.GoTypes[len(fbOut.Enums):][:len(fbOut.Messages)]\n\tif len(tb.MessageInfos) != len(fbOut.Messages) {\n\t\tpanic(\"mismatching message lengths\")\n\t}\n\tif len(fbOut.Messages) > 0 {\n\t\tfor i := range fbOut.Messages {\n\t\t\tif messageGoTypes[i] == nil {\n\t\t\t\tcontinue // skip map entry\n\t\t\t}\n\n\t\t\ttb.MessageInfos[i].GoReflectType = reflect.TypeOf(messageGoTypes[i])\n\t\t\ttb.MessageInfos[i].Desc = &fbOut.Messages[i]\n\n\t\t\t// Register message types.\n\t\t\tif err := tb.TypeRegistry.RegisterMessage(&tb.MessageInfos[i]); err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t}\n\n\t\t// As a special-case for descriptor.proto,\n\t\t// locally register concrete message type for the options.\n\t\tif out.File.Path() == \"google/protobuf/descriptor.proto\" && out.File.Package() == \"google.protobuf\" {\n\t\t\tfor i := range fbOut.Messages {\n\t\t\t\tswitch fbOut.Messages[i].Name() {\n\t\t\t\tcase \"FileOptions\":\n\t\t\t\t\tdescopts.File = messageGoTypes[i].(protoreflect.ProtoMessage)\n\t\t\t\tcase \"EnumOptions\":\n\t\t\t\t\tdescopts.Enum = messageGoTypes[i].(protoreflect.ProtoMessage)\n\t\t\t\tcase \"EnumValueOptions\":\n\t\t\t\t\tdescopts.EnumValue = messageGoTypes[i].(protoreflect.ProtoMessage)\n\t\t\t\tcase \"MessageOptions\":\n\t\t\t\t\tdescopts.Message = messageGoTypes[i].(protoreflect.ProtoMessage)\n\t\t\t\tcase \"FieldOptions\":\n\t\t\t\t\tdescopts.Field = messageGoTypes[i].(protoreflect.ProtoMessage)\n\t\t\t\tcase \"OneofOptions\":\n\t\t\t\t\tdescopts.Oneof = messageGoTypes[i].(protoreflect.ProtoMessage)\n\t\t\t\tcase \"ExtensionRangeOptions\":\n\t\t\t\t\tdescopts.ExtensionRange = messageGoTypes[i].(protoreflect.ProtoMessage)\n\t\t\t\tcase \"ServiceOptions\":\n\t\t\t\t\tdescopts.Service = messageGoTypes[i].(protoreflect.ProtoMessage)\n\t\t\t\tcase \"MethodOptions\":\n\t\t\t\t\tdescopts.Method = messageGoTypes[i].(protoreflect.ProtoMessage)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Process extensions.\n\tif len(tb.ExtensionInfos) != len(fbOut.Extensions) {\n\t\tpanic(\"mismatching extension lengths\")\n\t}\n\tvar depIdx int32\n\tfor i := range fbOut.Extensions {\n\t\t// For enum and message kinds, determine the referent Go type so\n\t\t// that we can construct their constructors.\n\t\tconst listExtDeps = 2\n\t\tvar goType reflect.Type\n\t\tswitch fbOut.Extensions[i].L1.Kind {\n\t\tcase protoreflect.EnumKind:\n\t\t\tj := depIdxs.Get(tb.DependencyIndexes, listExtDeps, depIdx)\n\t\t\tgoType = reflect.TypeOf(tb.GoTypes[j])\n\t\t\tdepIdx++\n\t\tcase protoreflect.MessageKind, protoreflect.GroupKind:\n\t\t\tj := depIdxs.Get(tb.DependencyIndexes, listExtDeps, depIdx)\n\t\t\tgoType = reflect.TypeOf(tb.GoTypes[j])\n\t\t\tdepIdx++\n\t\tdefault:\n\t\t\tgoType = goTypeForPBKind[fbOut.Extensions[i].L1.Kind]\n\t\t}\n\t\tif fbOut.Extensions[i].IsList() {\n\t\t\tgoType = reflect.SliceOf(goType)\n\t\t}\n\n\t\tpimpl.InitExtensionInfo(&tb.ExtensionInfos[i], &fbOut.Extensions[i], goType)\n\n\t\t// Register extension types.\n\t\tif err := tb.TypeRegistry.RegisterExtension(&tb.ExtensionInfos[i]); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t}\n\n\treturn out\n}\n\nvar goTypeForPBKind = map[protoreflect.Kind]reflect.Type{\n\tprotoreflect.BoolKind:     reflect.TypeOf(bool(false)),\n\tprotoreflect.Int32Kind:    reflect.TypeOf(int32(0)),\n\tprotoreflect.Sint32Kind:   reflect.TypeOf(int32(0)),\n\tprotoreflect.Sfixed32Kind: reflect.TypeOf(int32(0)),\n\tprotoreflect.Int64Kind:    reflect.TypeOf(int64(0)),\n\tprotoreflect.Sint64Kind:   reflect.TypeOf(int64(0)),\n\tprotoreflect.Sfixed64Kind: reflect.TypeOf(int64(0)),\n\tprotoreflect.Uint32Kind:   reflect.TypeOf(uint32(0)),\n\tprotoreflect.Fixed32Kind:  reflect.TypeOf(uint32(0)),\n\tprotoreflect.Uint64Kind:   reflect.TypeOf(uint64(0)),\n\tprotoreflect.Fixed64Kind:  reflect.TypeOf(uint64(0)),\n\tprotoreflect.FloatKind:    reflect.TypeOf(float32(0)),\n\tprotoreflect.DoubleKind:   reflect.TypeOf(float64(0)),\n\tprotoreflect.StringKind:   reflect.TypeOf(string(\"\")),\n\tprotoreflect.BytesKind:    reflect.TypeOf([]byte(nil)),\n}\n\ntype depIdxs []int32\n\n// Get retrieves the jth element of the ith sub-list.\nfunc (x depIdxs) Get(i, j int32) int32 {\n\treturn x[x[int32(len(x))-i-1]+j]\n}\n\ntype (\n\tresolverByIndex struct {\n\t\tgoTypes []any\n\t\tdepIdxs depIdxs\n\t\tfileRegistry\n\t}\n\tfileRegistry interface {\n\t\tFindFileByPath(string) (protoreflect.FileDescriptor, error)\n\t\tFindDescriptorByName(protoreflect.FullName) (protoreflect.Descriptor, error)\n\t\tRegisterFile(protoreflect.FileDescriptor) error\n\t}\n)\n\nfunc (r *resolverByIndex) FindEnumByIndex(i, j int32, es []filedesc.Enum, ms []filedesc.Message) protoreflect.EnumDescriptor {\n\tif depIdx := int(r.depIdxs.Get(i, j)); int(depIdx) < len(es)+len(ms) {\n\t\treturn &es[depIdx]\n\t} else {\n\t\treturn pimpl.Export{}.EnumDescriptorOf(r.goTypes[depIdx])\n\t}\n}\n\nfunc (r *resolverByIndex) FindMessageByIndex(i, j int32, es []filedesc.Enum, ms []filedesc.Message) protoreflect.MessageDescriptor {\n\tif depIdx := int(r.depIdxs.Get(i, j)); depIdx < len(es)+len(ms) {\n\t\treturn &ms[depIdx-len(es)]\n\t} else {\n\t\treturn pimpl.Export{}.MessageDescriptorOf(r.goTypes[depIdx])\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/flags/flags.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 flags provides a set of flags controlled by build tags.\npackage flags\n\n// ProtoLegacy specifies whether to enable support for legacy functionality\n// such as MessageSets, and various other obscure behavior\n// that is necessary to maintain backwards compatibility with proto1 or\n// the pre-release variants of proto2 and proto3.\n//\n// This is disabled by default unless built with the \"protolegacy\" tag.\n//\n// WARNING: The compatibility agreement covers nothing provided by this flag.\n// As such, functionality may suddenly be removed or changed at our discretion.\nconst ProtoLegacy = protoLegacy\n\n// LazyUnmarshalExtensions specifies whether to lazily unmarshal extensions.\n//\n// Lazy extension unmarshaling validates the contents of message-valued\n// extension fields at unmarshal time, but defers creating the message\n// structure until the extension is first accessed.\nconst LazyUnmarshalExtensions = ProtoLegacy\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.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 !protolegacy\n// +build !protolegacy\n\npackage flags\n\nconst protoLegacy = false\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.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 protolegacy\n// +build protolegacy\n\npackage flags\n\nconst protoLegacy = true\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/any_gen.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// Code generated by generate-protos. DO NOT EDIT.\n\npackage genid\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nconst File_google_protobuf_any_proto = \"google/protobuf/any.proto\"\n\n// Names for google.protobuf.Any.\nconst (\n\tAny_message_name     protoreflect.Name     = \"Any\"\n\tAny_message_fullname protoreflect.FullName = \"google.protobuf.Any\"\n)\n\n// Field names for google.protobuf.Any.\nconst (\n\tAny_TypeUrl_field_name protoreflect.Name = \"type_url\"\n\tAny_Value_field_name   protoreflect.Name = \"value\"\n\n\tAny_TypeUrl_field_fullname protoreflect.FullName = \"google.protobuf.Any.type_url\"\n\tAny_Value_field_fullname   protoreflect.FullName = \"google.protobuf.Any.value\"\n)\n\n// Field numbers for google.protobuf.Any.\nconst (\n\tAny_TypeUrl_field_number protoreflect.FieldNumber = 1\n\tAny_Value_field_number   protoreflect.FieldNumber = 2\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/api_gen.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// Code generated by generate-protos. DO NOT EDIT.\n\npackage genid\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nconst File_google_protobuf_api_proto = \"google/protobuf/api.proto\"\n\n// Names for google.protobuf.Api.\nconst (\n\tApi_message_name     protoreflect.Name     = \"Api\"\n\tApi_message_fullname protoreflect.FullName = \"google.protobuf.Api\"\n)\n\n// Field names for google.protobuf.Api.\nconst (\n\tApi_Name_field_name          protoreflect.Name = \"name\"\n\tApi_Methods_field_name       protoreflect.Name = \"methods\"\n\tApi_Options_field_name       protoreflect.Name = \"options\"\n\tApi_Version_field_name       protoreflect.Name = \"version\"\n\tApi_SourceContext_field_name protoreflect.Name = \"source_context\"\n\tApi_Mixins_field_name        protoreflect.Name = \"mixins\"\n\tApi_Syntax_field_name        protoreflect.Name = \"syntax\"\n\tApi_Edition_field_name       protoreflect.Name = \"edition\"\n\n\tApi_Name_field_fullname          protoreflect.FullName = \"google.protobuf.Api.name\"\n\tApi_Methods_field_fullname       protoreflect.FullName = \"google.protobuf.Api.methods\"\n\tApi_Options_field_fullname       protoreflect.FullName = \"google.protobuf.Api.options\"\n\tApi_Version_field_fullname       protoreflect.FullName = \"google.protobuf.Api.version\"\n\tApi_SourceContext_field_fullname protoreflect.FullName = \"google.protobuf.Api.source_context\"\n\tApi_Mixins_field_fullname        protoreflect.FullName = \"google.protobuf.Api.mixins\"\n\tApi_Syntax_field_fullname        protoreflect.FullName = \"google.protobuf.Api.syntax\"\n\tApi_Edition_field_fullname       protoreflect.FullName = \"google.protobuf.Api.edition\"\n)\n\n// Field numbers for google.protobuf.Api.\nconst (\n\tApi_Name_field_number          protoreflect.FieldNumber = 1\n\tApi_Methods_field_number       protoreflect.FieldNumber = 2\n\tApi_Options_field_number       protoreflect.FieldNumber = 3\n\tApi_Version_field_number       protoreflect.FieldNumber = 4\n\tApi_SourceContext_field_number protoreflect.FieldNumber = 5\n\tApi_Mixins_field_number        protoreflect.FieldNumber = 6\n\tApi_Syntax_field_number        protoreflect.FieldNumber = 7\n\tApi_Edition_field_number       protoreflect.FieldNumber = 8\n)\n\n// Names for google.protobuf.Method.\nconst (\n\tMethod_message_name     protoreflect.Name     = \"Method\"\n\tMethod_message_fullname protoreflect.FullName = \"google.protobuf.Method\"\n)\n\n// Field names for google.protobuf.Method.\nconst (\n\tMethod_Name_field_name              protoreflect.Name = \"name\"\n\tMethod_RequestTypeUrl_field_name    protoreflect.Name = \"request_type_url\"\n\tMethod_RequestStreaming_field_name  protoreflect.Name = \"request_streaming\"\n\tMethod_ResponseTypeUrl_field_name   protoreflect.Name = \"response_type_url\"\n\tMethod_ResponseStreaming_field_name protoreflect.Name = \"response_streaming\"\n\tMethod_Options_field_name           protoreflect.Name = \"options\"\n\tMethod_Syntax_field_name            protoreflect.Name = \"syntax\"\n\tMethod_Edition_field_name           protoreflect.Name = \"edition\"\n\n\tMethod_Name_field_fullname              protoreflect.FullName = \"google.protobuf.Method.name\"\n\tMethod_RequestTypeUrl_field_fullname    protoreflect.FullName = \"google.protobuf.Method.request_type_url\"\n\tMethod_RequestStreaming_field_fullname  protoreflect.FullName = \"google.protobuf.Method.request_streaming\"\n\tMethod_ResponseTypeUrl_field_fullname   protoreflect.FullName = \"google.protobuf.Method.response_type_url\"\n\tMethod_ResponseStreaming_field_fullname protoreflect.FullName = \"google.protobuf.Method.response_streaming\"\n\tMethod_Options_field_fullname           protoreflect.FullName = \"google.protobuf.Method.options\"\n\tMethod_Syntax_field_fullname            protoreflect.FullName = \"google.protobuf.Method.syntax\"\n\tMethod_Edition_field_fullname           protoreflect.FullName = \"google.protobuf.Method.edition\"\n)\n\n// Field numbers for google.protobuf.Method.\nconst (\n\tMethod_Name_field_number              protoreflect.FieldNumber = 1\n\tMethod_RequestTypeUrl_field_number    protoreflect.FieldNumber = 2\n\tMethod_RequestStreaming_field_number  protoreflect.FieldNumber = 3\n\tMethod_ResponseTypeUrl_field_number   protoreflect.FieldNumber = 4\n\tMethod_ResponseStreaming_field_number protoreflect.FieldNumber = 5\n\tMethod_Options_field_number           protoreflect.FieldNumber = 6\n\tMethod_Syntax_field_number            protoreflect.FieldNumber = 7\n\tMethod_Edition_field_number           protoreflect.FieldNumber = 8\n)\n\n// Names for google.protobuf.Mixin.\nconst (\n\tMixin_message_name     protoreflect.Name     = \"Mixin\"\n\tMixin_message_fullname protoreflect.FullName = \"google.protobuf.Mixin\"\n)\n\n// Field names for google.protobuf.Mixin.\nconst (\n\tMixin_Name_field_name protoreflect.Name = \"name\"\n\tMixin_Root_field_name protoreflect.Name = \"root\"\n\n\tMixin_Name_field_fullname protoreflect.FullName = \"google.protobuf.Mixin.name\"\n\tMixin_Root_field_fullname protoreflect.FullName = \"google.protobuf.Mixin.root\"\n)\n\n// Field numbers for google.protobuf.Mixin.\nconst (\n\tMixin_Name_field_number protoreflect.FieldNumber = 1\n\tMixin_Root_field_number protoreflect.FieldNumber = 2\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.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// Code generated by generate-protos. DO NOT EDIT.\n\npackage genid\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nconst File_google_protobuf_descriptor_proto = \"google/protobuf/descriptor.proto\"\n\n// Full and short names for google.protobuf.Edition.\nconst (\n\tEdition_enum_fullname = \"google.protobuf.Edition\"\n\tEdition_enum_name     = \"Edition\"\n)\n\n// Enum values for google.protobuf.Edition.\nconst (\n\tEdition_EDITION_UNKNOWN_enum_value         = 0\n\tEdition_EDITION_LEGACY_enum_value          = 900\n\tEdition_EDITION_PROTO2_enum_value          = 998\n\tEdition_EDITION_PROTO3_enum_value          = 999\n\tEdition_EDITION_2023_enum_value            = 1000\n\tEdition_EDITION_2024_enum_value            = 1001\n\tEdition_EDITION_UNSTABLE_enum_value        = 9999\n\tEdition_EDITION_1_TEST_ONLY_enum_value     = 1\n\tEdition_EDITION_2_TEST_ONLY_enum_value     = 2\n\tEdition_EDITION_99997_TEST_ONLY_enum_value = 99997\n\tEdition_EDITION_99998_TEST_ONLY_enum_value = 99998\n\tEdition_EDITION_99999_TEST_ONLY_enum_value = 99999\n\tEdition_EDITION_MAX_enum_value             = 2147483647\n)\n\n// Full and short names for google.protobuf.SymbolVisibility.\nconst (\n\tSymbolVisibility_enum_fullname = \"google.protobuf.SymbolVisibility\"\n\tSymbolVisibility_enum_name     = \"SymbolVisibility\"\n)\n\n// Enum values for google.protobuf.SymbolVisibility.\nconst (\n\tSymbolVisibility_VISIBILITY_UNSET_enum_value  = 0\n\tSymbolVisibility_VISIBILITY_LOCAL_enum_value  = 1\n\tSymbolVisibility_VISIBILITY_EXPORT_enum_value = 2\n)\n\n// Names for google.protobuf.FileDescriptorSet.\nconst (\n\tFileDescriptorSet_message_name     protoreflect.Name     = \"FileDescriptorSet\"\n\tFileDescriptorSet_message_fullname protoreflect.FullName = \"google.protobuf.FileDescriptorSet\"\n)\n\n// Field names for google.protobuf.FileDescriptorSet.\nconst (\n\tFileDescriptorSet_File_field_name protoreflect.Name = \"file\"\n\n\tFileDescriptorSet_File_field_fullname protoreflect.FullName = \"google.protobuf.FileDescriptorSet.file\"\n)\n\n// Field numbers for google.protobuf.FileDescriptorSet.\nconst (\n\tFileDescriptorSet_File_field_number protoreflect.FieldNumber = 1\n)\n\n// Names for google.protobuf.FileDescriptorProto.\nconst (\n\tFileDescriptorProto_message_name     protoreflect.Name     = \"FileDescriptorProto\"\n\tFileDescriptorProto_message_fullname protoreflect.FullName = \"google.protobuf.FileDescriptorProto\"\n)\n\n// Field names for google.protobuf.FileDescriptorProto.\nconst (\n\tFileDescriptorProto_Name_field_name             protoreflect.Name = \"name\"\n\tFileDescriptorProto_Package_field_name          protoreflect.Name = \"package\"\n\tFileDescriptorProto_Dependency_field_name       protoreflect.Name = \"dependency\"\n\tFileDescriptorProto_PublicDependency_field_name protoreflect.Name = \"public_dependency\"\n\tFileDescriptorProto_WeakDependency_field_name   protoreflect.Name = \"weak_dependency\"\n\tFileDescriptorProto_OptionDependency_field_name protoreflect.Name = \"option_dependency\"\n\tFileDescriptorProto_MessageType_field_name      protoreflect.Name = \"message_type\"\n\tFileDescriptorProto_EnumType_field_name         protoreflect.Name = \"enum_type\"\n\tFileDescriptorProto_Service_field_name          protoreflect.Name = \"service\"\n\tFileDescriptorProto_Extension_field_name        protoreflect.Name = \"extension\"\n\tFileDescriptorProto_Options_field_name          protoreflect.Name = \"options\"\n\tFileDescriptorProto_SourceCodeInfo_field_name   protoreflect.Name = \"source_code_info\"\n\tFileDescriptorProto_Syntax_field_name           protoreflect.Name = \"syntax\"\n\tFileDescriptorProto_Edition_field_name          protoreflect.Name = \"edition\"\n\n\tFileDescriptorProto_Name_field_fullname             protoreflect.FullName = \"google.protobuf.FileDescriptorProto.name\"\n\tFileDescriptorProto_Package_field_fullname          protoreflect.FullName = \"google.protobuf.FileDescriptorProto.package\"\n\tFileDescriptorProto_Dependency_field_fullname       protoreflect.FullName = \"google.protobuf.FileDescriptorProto.dependency\"\n\tFileDescriptorProto_PublicDependency_field_fullname protoreflect.FullName = \"google.protobuf.FileDescriptorProto.public_dependency\"\n\tFileDescriptorProto_WeakDependency_field_fullname   protoreflect.FullName = \"google.protobuf.FileDescriptorProto.weak_dependency\"\n\tFileDescriptorProto_OptionDependency_field_fullname protoreflect.FullName = \"google.protobuf.FileDescriptorProto.option_dependency\"\n\tFileDescriptorProto_MessageType_field_fullname      protoreflect.FullName = \"google.protobuf.FileDescriptorProto.message_type\"\n\tFileDescriptorProto_EnumType_field_fullname         protoreflect.FullName = \"google.protobuf.FileDescriptorProto.enum_type\"\n\tFileDescriptorProto_Service_field_fullname          protoreflect.FullName = \"google.protobuf.FileDescriptorProto.service\"\n\tFileDescriptorProto_Extension_field_fullname        protoreflect.FullName = \"google.protobuf.FileDescriptorProto.extension\"\n\tFileDescriptorProto_Options_field_fullname          protoreflect.FullName = \"google.protobuf.FileDescriptorProto.options\"\n\tFileDescriptorProto_SourceCodeInfo_field_fullname   protoreflect.FullName = \"google.protobuf.FileDescriptorProto.source_code_info\"\n\tFileDescriptorProto_Syntax_field_fullname           protoreflect.FullName = \"google.protobuf.FileDescriptorProto.syntax\"\n\tFileDescriptorProto_Edition_field_fullname          protoreflect.FullName = \"google.protobuf.FileDescriptorProto.edition\"\n)\n\n// Field numbers for google.protobuf.FileDescriptorProto.\nconst (\n\tFileDescriptorProto_Name_field_number             protoreflect.FieldNumber = 1\n\tFileDescriptorProto_Package_field_number          protoreflect.FieldNumber = 2\n\tFileDescriptorProto_Dependency_field_number       protoreflect.FieldNumber = 3\n\tFileDescriptorProto_PublicDependency_field_number protoreflect.FieldNumber = 10\n\tFileDescriptorProto_WeakDependency_field_number   protoreflect.FieldNumber = 11\n\tFileDescriptorProto_OptionDependency_field_number protoreflect.FieldNumber = 15\n\tFileDescriptorProto_MessageType_field_number      protoreflect.FieldNumber = 4\n\tFileDescriptorProto_EnumType_field_number         protoreflect.FieldNumber = 5\n\tFileDescriptorProto_Service_field_number          protoreflect.FieldNumber = 6\n\tFileDescriptorProto_Extension_field_number        protoreflect.FieldNumber = 7\n\tFileDescriptorProto_Options_field_number          protoreflect.FieldNumber = 8\n\tFileDescriptorProto_SourceCodeInfo_field_number   protoreflect.FieldNumber = 9\n\tFileDescriptorProto_Syntax_field_number           protoreflect.FieldNumber = 12\n\tFileDescriptorProto_Edition_field_number          protoreflect.FieldNumber = 14\n)\n\n// Names for google.protobuf.DescriptorProto.\nconst (\n\tDescriptorProto_message_name     protoreflect.Name     = \"DescriptorProto\"\n\tDescriptorProto_message_fullname protoreflect.FullName = \"google.protobuf.DescriptorProto\"\n)\n\n// Field names for google.protobuf.DescriptorProto.\nconst (\n\tDescriptorProto_Name_field_name           protoreflect.Name = \"name\"\n\tDescriptorProto_Field_field_name          protoreflect.Name = \"field\"\n\tDescriptorProto_Extension_field_name      protoreflect.Name = \"extension\"\n\tDescriptorProto_NestedType_field_name     protoreflect.Name = \"nested_type\"\n\tDescriptorProto_EnumType_field_name       protoreflect.Name = \"enum_type\"\n\tDescriptorProto_ExtensionRange_field_name protoreflect.Name = \"extension_range\"\n\tDescriptorProto_OneofDecl_field_name      protoreflect.Name = \"oneof_decl\"\n\tDescriptorProto_Options_field_name        protoreflect.Name = \"options\"\n\tDescriptorProto_ReservedRange_field_name  protoreflect.Name = \"reserved_range\"\n\tDescriptorProto_ReservedName_field_name   protoreflect.Name = \"reserved_name\"\n\tDescriptorProto_Visibility_field_name     protoreflect.Name = \"visibility\"\n\n\tDescriptorProto_Name_field_fullname           protoreflect.FullName = \"google.protobuf.DescriptorProto.name\"\n\tDescriptorProto_Field_field_fullname          protoreflect.FullName = \"google.protobuf.DescriptorProto.field\"\n\tDescriptorProto_Extension_field_fullname      protoreflect.FullName = \"google.protobuf.DescriptorProto.extension\"\n\tDescriptorProto_NestedType_field_fullname     protoreflect.FullName = \"google.protobuf.DescriptorProto.nested_type\"\n\tDescriptorProto_EnumType_field_fullname       protoreflect.FullName = \"google.protobuf.DescriptorProto.enum_type\"\n\tDescriptorProto_ExtensionRange_field_fullname protoreflect.FullName = \"google.protobuf.DescriptorProto.extension_range\"\n\tDescriptorProto_OneofDecl_field_fullname      protoreflect.FullName = \"google.protobuf.DescriptorProto.oneof_decl\"\n\tDescriptorProto_Options_field_fullname        protoreflect.FullName = \"google.protobuf.DescriptorProto.options\"\n\tDescriptorProto_ReservedRange_field_fullname  protoreflect.FullName = \"google.protobuf.DescriptorProto.reserved_range\"\n\tDescriptorProto_ReservedName_field_fullname   protoreflect.FullName = \"google.protobuf.DescriptorProto.reserved_name\"\n\tDescriptorProto_Visibility_field_fullname     protoreflect.FullName = \"google.protobuf.DescriptorProto.visibility\"\n)\n\n// Field numbers for google.protobuf.DescriptorProto.\nconst (\n\tDescriptorProto_Name_field_number           protoreflect.FieldNumber = 1\n\tDescriptorProto_Field_field_number          protoreflect.FieldNumber = 2\n\tDescriptorProto_Extension_field_number      protoreflect.FieldNumber = 6\n\tDescriptorProto_NestedType_field_number     protoreflect.FieldNumber = 3\n\tDescriptorProto_EnumType_field_number       protoreflect.FieldNumber = 4\n\tDescriptorProto_ExtensionRange_field_number protoreflect.FieldNumber = 5\n\tDescriptorProto_OneofDecl_field_number      protoreflect.FieldNumber = 8\n\tDescriptorProto_Options_field_number        protoreflect.FieldNumber = 7\n\tDescriptorProto_ReservedRange_field_number  protoreflect.FieldNumber = 9\n\tDescriptorProto_ReservedName_field_number   protoreflect.FieldNumber = 10\n\tDescriptorProto_Visibility_field_number     protoreflect.FieldNumber = 11\n)\n\n// Names for google.protobuf.DescriptorProto.ExtensionRange.\nconst (\n\tDescriptorProto_ExtensionRange_message_name     protoreflect.Name     = \"ExtensionRange\"\n\tDescriptorProto_ExtensionRange_message_fullname protoreflect.FullName = \"google.protobuf.DescriptorProto.ExtensionRange\"\n)\n\n// Field names for google.protobuf.DescriptorProto.ExtensionRange.\nconst (\n\tDescriptorProto_ExtensionRange_Start_field_name   protoreflect.Name = \"start\"\n\tDescriptorProto_ExtensionRange_End_field_name     protoreflect.Name = \"end\"\n\tDescriptorProto_ExtensionRange_Options_field_name protoreflect.Name = \"options\"\n\n\tDescriptorProto_ExtensionRange_Start_field_fullname   protoreflect.FullName = \"google.protobuf.DescriptorProto.ExtensionRange.start\"\n\tDescriptorProto_ExtensionRange_End_field_fullname     protoreflect.FullName = \"google.protobuf.DescriptorProto.ExtensionRange.end\"\n\tDescriptorProto_ExtensionRange_Options_field_fullname protoreflect.FullName = \"google.protobuf.DescriptorProto.ExtensionRange.options\"\n)\n\n// Field numbers for google.protobuf.DescriptorProto.ExtensionRange.\nconst (\n\tDescriptorProto_ExtensionRange_Start_field_number   protoreflect.FieldNumber = 1\n\tDescriptorProto_ExtensionRange_End_field_number     protoreflect.FieldNumber = 2\n\tDescriptorProto_ExtensionRange_Options_field_number protoreflect.FieldNumber = 3\n)\n\n// Names for google.protobuf.DescriptorProto.ReservedRange.\nconst (\n\tDescriptorProto_ReservedRange_message_name     protoreflect.Name     = \"ReservedRange\"\n\tDescriptorProto_ReservedRange_message_fullname protoreflect.FullName = \"google.protobuf.DescriptorProto.ReservedRange\"\n)\n\n// Field names for google.protobuf.DescriptorProto.ReservedRange.\nconst (\n\tDescriptorProto_ReservedRange_Start_field_name protoreflect.Name = \"start\"\n\tDescriptorProto_ReservedRange_End_field_name   protoreflect.Name = \"end\"\n\n\tDescriptorProto_ReservedRange_Start_field_fullname protoreflect.FullName = \"google.protobuf.DescriptorProto.ReservedRange.start\"\n\tDescriptorProto_ReservedRange_End_field_fullname   protoreflect.FullName = \"google.protobuf.DescriptorProto.ReservedRange.end\"\n)\n\n// Field numbers for google.protobuf.DescriptorProto.ReservedRange.\nconst (\n\tDescriptorProto_ReservedRange_Start_field_number protoreflect.FieldNumber = 1\n\tDescriptorProto_ReservedRange_End_field_number   protoreflect.FieldNumber = 2\n)\n\n// Names for google.protobuf.ExtensionRangeOptions.\nconst (\n\tExtensionRangeOptions_message_name     protoreflect.Name     = \"ExtensionRangeOptions\"\n\tExtensionRangeOptions_message_fullname protoreflect.FullName = \"google.protobuf.ExtensionRangeOptions\"\n)\n\n// Field names for google.protobuf.ExtensionRangeOptions.\nconst (\n\tExtensionRangeOptions_UninterpretedOption_field_name protoreflect.Name = \"uninterpreted_option\"\n\tExtensionRangeOptions_Declaration_field_name         protoreflect.Name = \"declaration\"\n\tExtensionRangeOptions_Features_field_name            protoreflect.Name = \"features\"\n\tExtensionRangeOptions_Verification_field_name        protoreflect.Name = \"verification\"\n\n\tExtensionRangeOptions_UninterpretedOption_field_fullname protoreflect.FullName = \"google.protobuf.ExtensionRangeOptions.uninterpreted_option\"\n\tExtensionRangeOptions_Declaration_field_fullname         protoreflect.FullName = \"google.protobuf.ExtensionRangeOptions.declaration\"\n\tExtensionRangeOptions_Features_field_fullname            protoreflect.FullName = \"google.protobuf.ExtensionRangeOptions.features\"\n\tExtensionRangeOptions_Verification_field_fullname        protoreflect.FullName = \"google.protobuf.ExtensionRangeOptions.verification\"\n)\n\n// Field numbers for google.protobuf.ExtensionRangeOptions.\nconst (\n\tExtensionRangeOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999\n\tExtensionRangeOptions_Declaration_field_number         protoreflect.FieldNumber = 2\n\tExtensionRangeOptions_Features_field_number            protoreflect.FieldNumber = 50\n\tExtensionRangeOptions_Verification_field_number        protoreflect.FieldNumber = 3\n)\n\n// Full and short names for google.protobuf.ExtensionRangeOptions.VerificationState.\nconst (\n\tExtensionRangeOptions_VerificationState_enum_fullname = \"google.protobuf.ExtensionRangeOptions.VerificationState\"\n\tExtensionRangeOptions_VerificationState_enum_name     = \"VerificationState\"\n)\n\n// Enum values for google.protobuf.ExtensionRangeOptions.VerificationState.\nconst (\n\tExtensionRangeOptions_DECLARATION_enum_value = 0\n\tExtensionRangeOptions_UNVERIFIED_enum_value  = 1\n)\n\n// Names for google.protobuf.ExtensionRangeOptions.Declaration.\nconst (\n\tExtensionRangeOptions_Declaration_message_name     protoreflect.Name     = \"Declaration\"\n\tExtensionRangeOptions_Declaration_message_fullname protoreflect.FullName = \"google.protobuf.ExtensionRangeOptions.Declaration\"\n)\n\n// Field names for google.protobuf.ExtensionRangeOptions.Declaration.\nconst (\n\tExtensionRangeOptions_Declaration_Number_field_name   protoreflect.Name = \"number\"\n\tExtensionRangeOptions_Declaration_FullName_field_name protoreflect.Name = \"full_name\"\n\tExtensionRangeOptions_Declaration_Type_field_name     protoreflect.Name = \"type\"\n\tExtensionRangeOptions_Declaration_Reserved_field_name protoreflect.Name = \"reserved\"\n\tExtensionRangeOptions_Declaration_Repeated_field_name protoreflect.Name = \"repeated\"\n\n\tExtensionRangeOptions_Declaration_Number_field_fullname   protoreflect.FullName = \"google.protobuf.ExtensionRangeOptions.Declaration.number\"\n\tExtensionRangeOptions_Declaration_FullName_field_fullname protoreflect.FullName = \"google.protobuf.ExtensionRangeOptions.Declaration.full_name\"\n\tExtensionRangeOptions_Declaration_Type_field_fullname     protoreflect.FullName = \"google.protobuf.ExtensionRangeOptions.Declaration.type\"\n\tExtensionRangeOptions_Declaration_Reserved_field_fullname protoreflect.FullName = \"google.protobuf.ExtensionRangeOptions.Declaration.reserved\"\n\tExtensionRangeOptions_Declaration_Repeated_field_fullname protoreflect.FullName = \"google.protobuf.ExtensionRangeOptions.Declaration.repeated\"\n)\n\n// Field numbers for google.protobuf.ExtensionRangeOptions.Declaration.\nconst (\n\tExtensionRangeOptions_Declaration_Number_field_number   protoreflect.FieldNumber = 1\n\tExtensionRangeOptions_Declaration_FullName_field_number protoreflect.FieldNumber = 2\n\tExtensionRangeOptions_Declaration_Type_field_number     protoreflect.FieldNumber = 3\n\tExtensionRangeOptions_Declaration_Reserved_field_number protoreflect.FieldNumber = 5\n\tExtensionRangeOptions_Declaration_Repeated_field_number protoreflect.FieldNumber = 6\n)\n\n// Names for google.protobuf.FieldDescriptorProto.\nconst (\n\tFieldDescriptorProto_message_name     protoreflect.Name     = \"FieldDescriptorProto\"\n\tFieldDescriptorProto_message_fullname protoreflect.FullName = \"google.protobuf.FieldDescriptorProto\"\n)\n\n// Field names for google.protobuf.FieldDescriptorProto.\nconst (\n\tFieldDescriptorProto_Name_field_name           protoreflect.Name = \"name\"\n\tFieldDescriptorProto_Number_field_name         protoreflect.Name = \"number\"\n\tFieldDescriptorProto_Label_field_name          protoreflect.Name = \"label\"\n\tFieldDescriptorProto_Type_field_name           protoreflect.Name = \"type\"\n\tFieldDescriptorProto_TypeName_field_name       protoreflect.Name = \"type_name\"\n\tFieldDescriptorProto_Extendee_field_name       protoreflect.Name = \"extendee\"\n\tFieldDescriptorProto_DefaultValue_field_name   protoreflect.Name = \"default_value\"\n\tFieldDescriptorProto_OneofIndex_field_name     protoreflect.Name = \"oneof_index\"\n\tFieldDescriptorProto_JsonName_field_name       protoreflect.Name = \"json_name\"\n\tFieldDescriptorProto_Options_field_name        protoreflect.Name = \"options\"\n\tFieldDescriptorProto_Proto3Optional_field_name protoreflect.Name = \"proto3_optional\"\n\n\tFieldDescriptorProto_Name_field_fullname           protoreflect.FullName = \"google.protobuf.FieldDescriptorProto.name\"\n\tFieldDescriptorProto_Number_field_fullname         protoreflect.FullName = \"google.protobuf.FieldDescriptorProto.number\"\n\tFieldDescriptorProto_Label_field_fullname          protoreflect.FullName = \"google.protobuf.FieldDescriptorProto.label\"\n\tFieldDescriptorProto_Type_field_fullname           protoreflect.FullName = \"google.protobuf.FieldDescriptorProto.type\"\n\tFieldDescriptorProto_TypeName_field_fullname       protoreflect.FullName = \"google.protobuf.FieldDescriptorProto.type_name\"\n\tFieldDescriptorProto_Extendee_field_fullname       protoreflect.FullName = \"google.protobuf.FieldDescriptorProto.extendee\"\n\tFieldDescriptorProto_DefaultValue_field_fullname   protoreflect.FullName = \"google.protobuf.FieldDescriptorProto.default_value\"\n\tFieldDescriptorProto_OneofIndex_field_fullname     protoreflect.FullName = \"google.protobuf.FieldDescriptorProto.oneof_index\"\n\tFieldDescriptorProto_JsonName_field_fullname       protoreflect.FullName = \"google.protobuf.FieldDescriptorProto.json_name\"\n\tFieldDescriptorProto_Options_field_fullname        protoreflect.FullName = \"google.protobuf.FieldDescriptorProto.options\"\n\tFieldDescriptorProto_Proto3Optional_field_fullname protoreflect.FullName = \"google.protobuf.FieldDescriptorProto.proto3_optional\"\n)\n\n// Field numbers for google.protobuf.FieldDescriptorProto.\nconst (\n\tFieldDescriptorProto_Name_field_number           protoreflect.FieldNumber = 1\n\tFieldDescriptorProto_Number_field_number         protoreflect.FieldNumber = 3\n\tFieldDescriptorProto_Label_field_number          protoreflect.FieldNumber = 4\n\tFieldDescriptorProto_Type_field_number           protoreflect.FieldNumber = 5\n\tFieldDescriptorProto_TypeName_field_number       protoreflect.FieldNumber = 6\n\tFieldDescriptorProto_Extendee_field_number       protoreflect.FieldNumber = 2\n\tFieldDescriptorProto_DefaultValue_field_number   protoreflect.FieldNumber = 7\n\tFieldDescriptorProto_OneofIndex_field_number     protoreflect.FieldNumber = 9\n\tFieldDescriptorProto_JsonName_field_number       protoreflect.FieldNumber = 10\n\tFieldDescriptorProto_Options_field_number        protoreflect.FieldNumber = 8\n\tFieldDescriptorProto_Proto3Optional_field_number protoreflect.FieldNumber = 17\n)\n\n// Full and short names for google.protobuf.FieldDescriptorProto.Type.\nconst (\n\tFieldDescriptorProto_Type_enum_fullname = \"google.protobuf.FieldDescriptorProto.Type\"\n\tFieldDescriptorProto_Type_enum_name     = \"Type\"\n)\n\n// Enum values for google.protobuf.FieldDescriptorProto.Type.\nconst (\n\tFieldDescriptorProto_TYPE_DOUBLE_enum_value   = 1\n\tFieldDescriptorProto_TYPE_FLOAT_enum_value    = 2\n\tFieldDescriptorProto_TYPE_INT64_enum_value    = 3\n\tFieldDescriptorProto_TYPE_UINT64_enum_value   = 4\n\tFieldDescriptorProto_TYPE_INT32_enum_value    = 5\n\tFieldDescriptorProto_TYPE_FIXED64_enum_value  = 6\n\tFieldDescriptorProto_TYPE_FIXED32_enum_value  = 7\n\tFieldDescriptorProto_TYPE_BOOL_enum_value     = 8\n\tFieldDescriptorProto_TYPE_STRING_enum_value   = 9\n\tFieldDescriptorProto_TYPE_GROUP_enum_value    = 10\n\tFieldDescriptorProto_TYPE_MESSAGE_enum_value  = 11\n\tFieldDescriptorProto_TYPE_BYTES_enum_value    = 12\n\tFieldDescriptorProto_TYPE_UINT32_enum_value   = 13\n\tFieldDescriptorProto_TYPE_ENUM_enum_value     = 14\n\tFieldDescriptorProto_TYPE_SFIXED32_enum_value = 15\n\tFieldDescriptorProto_TYPE_SFIXED64_enum_value = 16\n\tFieldDescriptorProto_TYPE_SINT32_enum_value   = 17\n\tFieldDescriptorProto_TYPE_SINT64_enum_value   = 18\n)\n\n// Full and short names for google.protobuf.FieldDescriptorProto.Label.\nconst (\n\tFieldDescriptorProto_Label_enum_fullname = \"google.protobuf.FieldDescriptorProto.Label\"\n\tFieldDescriptorProto_Label_enum_name     = \"Label\"\n)\n\n// Enum values for google.protobuf.FieldDescriptorProto.Label.\nconst (\n\tFieldDescriptorProto_LABEL_OPTIONAL_enum_value = 1\n\tFieldDescriptorProto_LABEL_REPEATED_enum_value = 3\n\tFieldDescriptorProto_LABEL_REQUIRED_enum_value = 2\n)\n\n// Names for google.protobuf.OneofDescriptorProto.\nconst (\n\tOneofDescriptorProto_message_name     protoreflect.Name     = \"OneofDescriptorProto\"\n\tOneofDescriptorProto_message_fullname protoreflect.FullName = \"google.protobuf.OneofDescriptorProto\"\n)\n\n// Field names for google.protobuf.OneofDescriptorProto.\nconst (\n\tOneofDescriptorProto_Name_field_name    protoreflect.Name = \"name\"\n\tOneofDescriptorProto_Options_field_name protoreflect.Name = \"options\"\n\n\tOneofDescriptorProto_Name_field_fullname    protoreflect.FullName = \"google.protobuf.OneofDescriptorProto.name\"\n\tOneofDescriptorProto_Options_field_fullname protoreflect.FullName = \"google.protobuf.OneofDescriptorProto.options\"\n)\n\n// Field numbers for google.protobuf.OneofDescriptorProto.\nconst (\n\tOneofDescriptorProto_Name_field_number    protoreflect.FieldNumber = 1\n\tOneofDescriptorProto_Options_field_number protoreflect.FieldNumber = 2\n)\n\n// Names for google.protobuf.EnumDescriptorProto.\nconst (\n\tEnumDescriptorProto_message_name     protoreflect.Name     = \"EnumDescriptorProto\"\n\tEnumDescriptorProto_message_fullname protoreflect.FullName = \"google.protobuf.EnumDescriptorProto\"\n)\n\n// Field names for google.protobuf.EnumDescriptorProto.\nconst (\n\tEnumDescriptorProto_Name_field_name          protoreflect.Name = \"name\"\n\tEnumDescriptorProto_Value_field_name         protoreflect.Name = \"value\"\n\tEnumDescriptorProto_Options_field_name       protoreflect.Name = \"options\"\n\tEnumDescriptorProto_ReservedRange_field_name protoreflect.Name = \"reserved_range\"\n\tEnumDescriptorProto_ReservedName_field_name  protoreflect.Name = \"reserved_name\"\n\tEnumDescriptorProto_Visibility_field_name    protoreflect.Name = \"visibility\"\n\n\tEnumDescriptorProto_Name_field_fullname          protoreflect.FullName = \"google.protobuf.EnumDescriptorProto.name\"\n\tEnumDescriptorProto_Value_field_fullname         protoreflect.FullName = \"google.protobuf.EnumDescriptorProto.value\"\n\tEnumDescriptorProto_Options_field_fullname       protoreflect.FullName = \"google.protobuf.EnumDescriptorProto.options\"\n\tEnumDescriptorProto_ReservedRange_field_fullname protoreflect.FullName = \"google.protobuf.EnumDescriptorProto.reserved_range\"\n\tEnumDescriptorProto_ReservedName_field_fullname  protoreflect.FullName = \"google.protobuf.EnumDescriptorProto.reserved_name\"\n\tEnumDescriptorProto_Visibility_field_fullname    protoreflect.FullName = \"google.protobuf.EnumDescriptorProto.visibility\"\n)\n\n// Field numbers for google.protobuf.EnumDescriptorProto.\nconst (\n\tEnumDescriptorProto_Name_field_number          protoreflect.FieldNumber = 1\n\tEnumDescriptorProto_Value_field_number         protoreflect.FieldNumber = 2\n\tEnumDescriptorProto_Options_field_number       protoreflect.FieldNumber = 3\n\tEnumDescriptorProto_ReservedRange_field_number protoreflect.FieldNumber = 4\n\tEnumDescriptorProto_ReservedName_field_number  protoreflect.FieldNumber = 5\n\tEnumDescriptorProto_Visibility_field_number    protoreflect.FieldNumber = 6\n)\n\n// Names for google.protobuf.EnumDescriptorProto.EnumReservedRange.\nconst (\n\tEnumDescriptorProto_EnumReservedRange_message_name     protoreflect.Name     = \"EnumReservedRange\"\n\tEnumDescriptorProto_EnumReservedRange_message_fullname protoreflect.FullName = \"google.protobuf.EnumDescriptorProto.EnumReservedRange\"\n)\n\n// Field names for google.protobuf.EnumDescriptorProto.EnumReservedRange.\nconst (\n\tEnumDescriptorProto_EnumReservedRange_Start_field_name protoreflect.Name = \"start\"\n\tEnumDescriptorProto_EnumReservedRange_End_field_name   protoreflect.Name = \"end\"\n\n\tEnumDescriptorProto_EnumReservedRange_Start_field_fullname protoreflect.FullName = \"google.protobuf.EnumDescriptorProto.EnumReservedRange.start\"\n\tEnumDescriptorProto_EnumReservedRange_End_field_fullname   protoreflect.FullName = \"google.protobuf.EnumDescriptorProto.EnumReservedRange.end\"\n)\n\n// Field numbers for google.protobuf.EnumDescriptorProto.EnumReservedRange.\nconst (\n\tEnumDescriptorProto_EnumReservedRange_Start_field_number protoreflect.FieldNumber = 1\n\tEnumDescriptorProto_EnumReservedRange_End_field_number   protoreflect.FieldNumber = 2\n)\n\n// Names for google.protobuf.EnumValueDescriptorProto.\nconst (\n\tEnumValueDescriptorProto_message_name     protoreflect.Name     = \"EnumValueDescriptorProto\"\n\tEnumValueDescriptorProto_message_fullname protoreflect.FullName = \"google.protobuf.EnumValueDescriptorProto\"\n)\n\n// Field names for google.protobuf.EnumValueDescriptorProto.\nconst (\n\tEnumValueDescriptorProto_Name_field_name    protoreflect.Name = \"name\"\n\tEnumValueDescriptorProto_Number_field_name  protoreflect.Name = \"number\"\n\tEnumValueDescriptorProto_Options_field_name protoreflect.Name = \"options\"\n\n\tEnumValueDescriptorProto_Name_field_fullname    protoreflect.FullName = \"google.protobuf.EnumValueDescriptorProto.name\"\n\tEnumValueDescriptorProto_Number_field_fullname  protoreflect.FullName = \"google.protobuf.EnumValueDescriptorProto.number\"\n\tEnumValueDescriptorProto_Options_field_fullname protoreflect.FullName = \"google.protobuf.EnumValueDescriptorProto.options\"\n)\n\n// Field numbers for google.protobuf.EnumValueDescriptorProto.\nconst (\n\tEnumValueDescriptorProto_Name_field_number    protoreflect.FieldNumber = 1\n\tEnumValueDescriptorProto_Number_field_number  protoreflect.FieldNumber = 2\n\tEnumValueDescriptorProto_Options_field_number protoreflect.FieldNumber = 3\n)\n\n// Names for google.protobuf.ServiceDescriptorProto.\nconst (\n\tServiceDescriptorProto_message_name     protoreflect.Name     = \"ServiceDescriptorProto\"\n\tServiceDescriptorProto_message_fullname protoreflect.FullName = \"google.protobuf.ServiceDescriptorProto\"\n)\n\n// Field names for google.protobuf.ServiceDescriptorProto.\nconst (\n\tServiceDescriptorProto_Name_field_name    protoreflect.Name = \"name\"\n\tServiceDescriptorProto_Method_field_name  protoreflect.Name = \"method\"\n\tServiceDescriptorProto_Options_field_name protoreflect.Name = \"options\"\n\n\tServiceDescriptorProto_Name_field_fullname    protoreflect.FullName = \"google.protobuf.ServiceDescriptorProto.name\"\n\tServiceDescriptorProto_Method_field_fullname  protoreflect.FullName = \"google.protobuf.ServiceDescriptorProto.method\"\n\tServiceDescriptorProto_Options_field_fullname protoreflect.FullName = \"google.protobuf.ServiceDescriptorProto.options\"\n)\n\n// Field numbers for google.protobuf.ServiceDescriptorProto.\nconst (\n\tServiceDescriptorProto_Name_field_number    protoreflect.FieldNumber = 1\n\tServiceDescriptorProto_Method_field_number  protoreflect.FieldNumber = 2\n\tServiceDescriptorProto_Options_field_number protoreflect.FieldNumber = 3\n)\n\n// Names for google.protobuf.MethodDescriptorProto.\nconst (\n\tMethodDescriptorProto_message_name     protoreflect.Name     = \"MethodDescriptorProto\"\n\tMethodDescriptorProto_message_fullname protoreflect.FullName = \"google.protobuf.MethodDescriptorProto\"\n)\n\n// Field names for google.protobuf.MethodDescriptorProto.\nconst (\n\tMethodDescriptorProto_Name_field_name            protoreflect.Name = \"name\"\n\tMethodDescriptorProto_InputType_field_name       protoreflect.Name = \"input_type\"\n\tMethodDescriptorProto_OutputType_field_name      protoreflect.Name = \"output_type\"\n\tMethodDescriptorProto_Options_field_name         protoreflect.Name = \"options\"\n\tMethodDescriptorProto_ClientStreaming_field_name protoreflect.Name = \"client_streaming\"\n\tMethodDescriptorProto_ServerStreaming_field_name protoreflect.Name = \"server_streaming\"\n\n\tMethodDescriptorProto_Name_field_fullname            protoreflect.FullName = \"google.protobuf.MethodDescriptorProto.name\"\n\tMethodDescriptorProto_InputType_field_fullname       protoreflect.FullName = \"google.protobuf.MethodDescriptorProto.input_type\"\n\tMethodDescriptorProto_OutputType_field_fullname      protoreflect.FullName = \"google.protobuf.MethodDescriptorProto.output_type\"\n\tMethodDescriptorProto_Options_field_fullname         protoreflect.FullName = \"google.protobuf.MethodDescriptorProto.options\"\n\tMethodDescriptorProto_ClientStreaming_field_fullname protoreflect.FullName = \"google.protobuf.MethodDescriptorProto.client_streaming\"\n\tMethodDescriptorProto_ServerStreaming_field_fullname protoreflect.FullName = \"google.protobuf.MethodDescriptorProto.server_streaming\"\n)\n\n// Field numbers for google.protobuf.MethodDescriptorProto.\nconst (\n\tMethodDescriptorProto_Name_field_number            protoreflect.FieldNumber = 1\n\tMethodDescriptorProto_InputType_field_number       protoreflect.FieldNumber = 2\n\tMethodDescriptorProto_OutputType_field_number      protoreflect.FieldNumber = 3\n\tMethodDescriptorProto_Options_field_number         protoreflect.FieldNumber = 4\n\tMethodDescriptorProto_ClientStreaming_field_number protoreflect.FieldNumber = 5\n\tMethodDescriptorProto_ServerStreaming_field_number protoreflect.FieldNumber = 6\n)\n\n// Names for google.protobuf.FileOptions.\nconst (\n\tFileOptions_message_name     protoreflect.Name     = \"FileOptions\"\n\tFileOptions_message_fullname protoreflect.FullName = \"google.protobuf.FileOptions\"\n)\n\n// Field names for google.protobuf.FileOptions.\nconst (\n\tFileOptions_JavaPackage_field_name               protoreflect.Name = \"java_package\"\n\tFileOptions_JavaOuterClassname_field_name        protoreflect.Name = \"java_outer_classname\"\n\tFileOptions_JavaMultipleFiles_field_name         protoreflect.Name = \"java_multiple_files\"\n\tFileOptions_JavaGenerateEqualsAndHash_field_name protoreflect.Name = \"java_generate_equals_and_hash\"\n\tFileOptions_JavaStringCheckUtf8_field_name       protoreflect.Name = \"java_string_check_utf8\"\n\tFileOptions_OptimizeFor_field_name               protoreflect.Name = \"optimize_for\"\n\tFileOptions_GoPackage_field_name                 protoreflect.Name = \"go_package\"\n\tFileOptions_CcGenericServices_field_name         protoreflect.Name = \"cc_generic_services\"\n\tFileOptions_JavaGenericServices_field_name       protoreflect.Name = \"java_generic_services\"\n\tFileOptions_PyGenericServices_field_name         protoreflect.Name = \"py_generic_services\"\n\tFileOptions_Deprecated_field_name                protoreflect.Name = \"deprecated\"\n\tFileOptions_CcEnableArenas_field_name            protoreflect.Name = \"cc_enable_arenas\"\n\tFileOptions_ObjcClassPrefix_field_name           protoreflect.Name = \"objc_class_prefix\"\n\tFileOptions_CsharpNamespace_field_name           protoreflect.Name = \"csharp_namespace\"\n\tFileOptions_SwiftPrefix_field_name               protoreflect.Name = \"swift_prefix\"\n\tFileOptions_PhpClassPrefix_field_name            protoreflect.Name = \"php_class_prefix\"\n\tFileOptions_PhpNamespace_field_name              protoreflect.Name = \"php_namespace\"\n\tFileOptions_PhpMetadataNamespace_field_name      protoreflect.Name = \"php_metadata_namespace\"\n\tFileOptions_RubyPackage_field_name               protoreflect.Name = \"ruby_package\"\n\tFileOptions_Features_field_name                  protoreflect.Name = \"features\"\n\tFileOptions_UninterpretedOption_field_name       protoreflect.Name = \"uninterpreted_option\"\n\n\tFileOptions_JavaPackage_field_fullname               protoreflect.FullName = \"google.protobuf.FileOptions.java_package\"\n\tFileOptions_JavaOuterClassname_field_fullname        protoreflect.FullName = \"google.protobuf.FileOptions.java_outer_classname\"\n\tFileOptions_JavaMultipleFiles_field_fullname         protoreflect.FullName = \"google.protobuf.FileOptions.java_multiple_files\"\n\tFileOptions_JavaGenerateEqualsAndHash_field_fullname protoreflect.FullName = \"google.protobuf.FileOptions.java_generate_equals_and_hash\"\n\tFileOptions_JavaStringCheckUtf8_field_fullname       protoreflect.FullName = \"google.protobuf.FileOptions.java_string_check_utf8\"\n\tFileOptions_OptimizeFor_field_fullname               protoreflect.FullName = \"google.protobuf.FileOptions.optimize_for\"\n\tFileOptions_GoPackage_field_fullname                 protoreflect.FullName = \"google.protobuf.FileOptions.go_package\"\n\tFileOptions_CcGenericServices_field_fullname         protoreflect.FullName = \"google.protobuf.FileOptions.cc_generic_services\"\n\tFileOptions_JavaGenericServices_field_fullname       protoreflect.FullName = \"google.protobuf.FileOptions.java_generic_services\"\n\tFileOptions_PyGenericServices_field_fullname         protoreflect.FullName = \"google.protobuf.FileOptions.py_generic_services\"\n\tFileOptions_Deprecated_field_fullname                protoreflect.FullName = \"google.protobuf.FileOptions.deprecated\"\n\tFileOptions_CcEnableArenas_field_fullname            protoreflect.FullName = \"google.protobuf.FileOptions.cc_enable_arenas\"\n\tFileOptions_ObjcClassPrefix_field_fullname           protoreflect.FullName = \"google.protobuf.FileOptions.objc_class_prefix\"\n\tFileOptions_CsharpNamespace_field_fullname           protoreflect.FullName = \"google.protobuf.FileOptions.csharp_namespace\"\n\tFileOptions_SwiftPrefix_field_fullname               protoreflect.FullName = \"google.protobuf.FileOptions.swift_prefix\"\n\tFileOptions_PhpClassPrefix_field_fullname            protoreflect.FullName = \"google.protobuf.FileOptions.php_class_prefix\"\n\tFileOptions_PhpNamespace_field_fullname              protoreflect.FullName = \"google.protobuf.FileOptions.php_namespace\"\n\tFileOptions_PhpMetadataNamespace_field_fullname      protoreflect.FullName = \"google.protobuf.FileOptions.php_metadata_namespace\"\n\tFileOptions_RubyPackage_field_fullname               protoreflect.FullName = \"google.protobuf.FileOptions.ruby_package\"\n\tFileOptions_Features_field_fullname                  protoreflect.FullName = \"google.protobuf.FileOptions.features\"\n\tFileOptions_UninterpretedOption_field_fullname       protoreflect.FullName = \"google.protobuf.FileOptions.uninterpreted_option\"\n)\n\n// Field numbers for google.protobuf.FileOptions.\nconst (\n\tFileOptions_JavaPackage_field_number               protoreflect.FieldNumber = 1\n\tFileOptions_JavaOuterClassname_field_number        protoreflect.FieldNumber = 8\n\tFileOptions_JavaMultipleFiles_field_number         protoreflect.FieldNumber = 10\n\tFileOptions_JavaGenerateEqualsAndHash_field_number protoreflect.FieldNumber = 20\n\tFileOptions_JavaStringCheckUtf8_field_number       protoreflect.FieldNumber = 27\n\tFileOptions_OptimizeFor_field_number               protoreflect.FieldNumber = 9\n\tFileOptions_GoPackage_field_number                 protoreflect.FieldNumber = 11\n\tFileOptions_CcGenericServices_field_number         protoreflect.FieldNumber = 16\n\tFileOptions_JavaGenericServices_field_number       protoreflect.FieldNumber = 17\n\tFileOptions_PyGenericServices_field_number         protoreflect.FieldNumber = 18\n\tFileOptions_Deprecated_field_number                protoreflect.FieldNumber = 23\n\tFileOptions_CcEnableArenas_field_number            protoreflect.FieldNumber = 31\n\tFileOptions_ObjcClassPrefix_field_number           protoreflect.FieldNumber = 36\n\tFileOptions_CsharpNamespace_field_number           protoreflect.FieldNumber = 37\n\tFileOptions_SwiftPrefix_field_number               protoreflect.FieldNumber = 39\n\tFileOptions_PhpClassPrefix_field_number            protoreflect.FieldNumber = 40\n\tFileOptions_PhpNamespace_field_number              protoreflect.FieldNumber = 41\n\tFileOptions_PhpMetadataNamespace_field_number      protoreflect.FieldNumber = 44\n\tFileOptions_RubyPackage_field_number               protoreflect.FieldNumber = 45\n\tFileOptions_Features_field_number                  protoreflect.FieldNumber = 50\n\tFileOptions_UninterpretedOption_field_number       protoreflect.FieldNumber = 999\n)\n\n// Full and short names for google.protobuf.FileOptions.OptimizeMode.\nconst (\n\tFileOptions_OptimizeMode_enum_fullname = \"google.protobuf.FileOptions.OptimizeMode\"\n\tFileOptions_OptimizeMode_enum_name     = \"OptimizeMode\"\n)\n\n// Enum values for google.protobuf.FileOptions.OptimizeMode.\nconst (\n\tFileOptions_SPEED_enum_value        = 1\n\tFileOptions_CODE_SIZE_enum_value    = 2\n\tFileOptions_LITE_RUNTIME_enum_value = 3\n)\n\n// Names for google.protobuf.MessageOptions.\nconst (\n\tMessageOptions_message_name     protoreflect.Name     = \"MessageOptions\"\n\tMessageOptions_message_fullname protoreflect.FullName = \"google.protobuf.MessageOptions\"\n)\n\n// Field names for google.protobuf.MessageOptions.\nconst (\n\tMessageOptions_MessageSetWireFormat_field_name               protoreflect.Name = \"message_set_wire_format\"\n\tMessageOptions_NoStandardDescriptorAccessor_field_name       protoreflect.Name = \"no_standard_descriptor_accessor\"\n\tMessageOptions_Deprecated_field_name                         protoreflect.Name = \"deprecated\"\n\tMessageOptions_MapEntry_field_name                           protoreflect.Name = \"map_entry\"\n\tMessageOptions_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = \"deprecated_legacy_json_field_conflicts\"\n\tMessageOptions_Features_field_name                           protoreflect.Name = \"features\"\n\tMessageOptions_UninterpretedOption_field_name                protoreflect.Name = \"uninterpreted_option\"\n\n\tMessageOptions_MessageSetWireFormat_field_fullname               protoreflect.FullName = \"google.protobuf.MessageOptions.message_set_wire_format\"\n\tMessageOptions_NoStandardDescriptorAccessor_field_fullname       protoreflect.FullName = \"google.protobuf.MessageOptions.no_standard_descriptor_accessor\"\n\tMessageOptions_Deprecated_field_fullname                         protoreflect.FullName = \"google.protobuf.MessageOptions.deprecated\"\n\tMessageOptions_MapEntry_field_fullname                           protoreflect.FullName = \"google.protobuf.MessageOptions.map_entry\"\n\tMessageOptions_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = \"google.protobuf.MessageOptions.deprecated_legacy_json_field_conflicts\"\n\tMessageOptions_Features_field_fullname                           protoreflect.FullName = \"google.protobuf.MessageOptions.features\"\n\tMessageOptions_UninterpretedOption_field_fullname                protoreflect.FullName = \"google.protobuf.MessageOptions.uninterpreted_option\"\n)\n\n// Field numbers for google.protobuf.MessageOptions.\nconst (\n\tMessageOptions_MessageSetWireFormat_field_number               protoreflect.FieldNumber = 1\n\tMessageOptions_NoStandardDescriptorAccessor_field_number       protoreflect.FieldNumber = 2\n\tMessageOptions_Deprecated_field_number                         protoreflect.FieldNumber = 3\n\tMessageOptions_MapEntry_field_number                           protoreflect.FieldNumber = 7\n\tMessageOptions_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 11\n\tMessageOptions_Features_field_number                           protoreflect.FieldNumber = 12\n\tMessageOptions_UninterpretedOption_field_number                protoreflect.FieldNumber = 999\n)\n\n// Names for google.protobuf.FieldOptions.\nconst (\n\tFieldOptions_message_name     protoreflect.Name     = \"FieldOptions\"\n\tFieldOptions_message_fullname protoreflect.FullName = \"google.protobuf.FieldOptions\"\n)\n\n// Field names for google.protobuf.FieldOptions.\nconst (\n\tFieldOptions_Ctype_field_name               protoreflect.Name = \"ctype\"\n\tFieldOptions_Packed_field_name              protoreflect.Name = \"packed\"\n\tFieldOptions_Jstype_field_name              protoreflect.Name = \"jstype\"\n\tFieldOptions_Lazy_field_name                protoreflect.Name = \"lazy\"\n\tFieldOptions_UnverifiedLazy_field_name      protoreflect.Name = \"unverified_lazy\"\n\tFieldOptions_Deprecated_field_name          protoreflect.Name = \"deprecated\"\n\tFieldOptions_Weak_field_name                protoreflect.Name = \"weak\"\n\tFieldOptions_DebugRedact_field_name         protoreflect.Name = \"debug_redact\"\n\tFieldOptions_Retention_field_name           protoreflect.Name = \"retention\"\n\tFieldOptions_Targets_field_name             protoreflect.Name = \"targets\"\n\tFieldOptions_EditionDefaults_field_name     protoreflect.Name = \"edition_defaults\"\n\tFieldOptions_Features_field_name            protoreflect.Name = \"features\"\n\tFieldOptions_FeatureSupport_field_name      protoreflect.Name = \"feature_support\"\n\tFieldOptions_UninterpretedOption_field_name protoreflect.Name = \"uninterpreted_option\"\n\n\tFieldOptions_Ctype_field_fullname               protoreflect.FullName = \"google.protobuf.FieldOptions.ctype\"\n\tFieldOptions_Packed_field_fullname              protoreflect.FullName = \"google.protobuf.FieldOptions.packed\"\n\tFieldOptions_Jstype_field_fullname              protoreflect.FullName = \"google.protobuf.FieldOptions.jstype\"\n\tFieldOptions_Lazy_field_fullname                protoreflect.FullName = \"google.protobuf.FieldOptions.lazy\"\n\tFieldOptions_UnverifiedLazy_field_fullname      protoreflect.FullName = \"google.protobuf.FieldOptions.unverified_lazy\"\n\tFieldOptions_Deprecated_field_fullname          protoreflect.FullName = \"google.protobuf.FieldOptions.deprecated\"\n\tFieldOptions_Weak_field_fullname                protoreflect.FullName = \"google.protobuf.FieldOptions.weak\"\n\tFieldOptions_DebugRedact_field_fullname         protoreflect.FullName = \"google.protobuf.FieldOptions.debug_redact\"\n\tFieldOptions_Retention_field_fullname           protoreflect.FullName = \"google.protobuf.FieldOptions.retention\"\n\tFieldOptions_Targets_field_fullname             protoreflect.FullName = \"google.protobuf.FieldOptions.targets\"\n\tFieldOptions_EditionDefaults_field_fullname     protoreflect.FullName = \"google.protobuf.FieldOptions.edition_defaults\"\n\tFieldOptions_Features_field_fullname            protoreflect.FullName = \"google.protobuf.FieldOptions.features\"\n\tFieldOptions_FeatureSupport_field_fullname      protoreflect.FullName = \"google.protobuf.FieldOptions.feature_support\"\n\tFieldOptions_UninterpretedOption_field_fullname protoreflect.FullName = \"google.protobuf.FieldOptions.uninterpreted_option\"\n)\n\n// Field numbers for google.protobuf.FieldOptions.\nconst (\n\tFieldOptions_Ctype_field_number               protoreflect.FieldNumber = 1\n\tFieldOptions_Packed_field_number              protoreflect.FieldNumber = 2\n\tFieldOptions_Jstype_field_number              protoreflect.FieldNumber = 6\n\tFieldOptions_Lazy_field_number                protoreflect.FieldNumber = 5\n\tFieldOptions_UnverifiedLazy_field_number      protoreflect.FieldNumber = 15\n\tFieldOptions_Deprecated_field_number          protoreflect.FieldNumber = 3\n\tFieldOptions_Weak_field_number                protoreflect.FieldNumber = 10\n\tFieldOptions_DebugRedact_field_number         protoreflect.FieldNumber = 16\n\tFieldOptions_Retention_field_number           protoreflect.FieldNumber = 17\n\tFieldOptions_Targets_field_number             protoreflect.FieldNumber = 19\n\tFieldOptions_EditionDefaults_field_number     protoreflect.FieldNumber = 20\n\tFieldOptions_Features_field_number            protoreflect.FieldNumber = 21\n\tFieldOptions_FeatureSupport_field_number      protoreflect.FieldNumber = 22\n\tFieldOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999\n)\n\n// Full and short names for google.protobuf.FieldOptions.CType.\nconst (\n\tFieldOptions_CType_enum_fullname = \"google.protobuf.FieldOptions.CType\"\n\tFieldOptions_CType_enum_name     = \"CType\"\n)\n\n// Enum values for google.protobuf.FieldOptions.CType.\nconst (\n\tFieldOptions_STRING_enum_value       = 0\n\tFieldOptions_CORD_enum_value         = 1\n\tFieldOptions_STRING_PIECE_enum_value = 2\n)\n\n// Full and short names for google.protobuf.FieldOptions.JSType.\nconst (\n\tFieldOptions_JSType_enum_fullname = \"google.protobuf.FieldOptions.JSType\"\n\tFieldOptions_JSType_enum_name     = \"JSType\"\n)\n\n// Enum values for google.protobuf.FieldOptions.JSType.\nconst (\n\tFieldOptions_JS_NORMAL_enum_value = 0\n\tFieldOptions_JS_STRING_enum_value = 1\n\tFieldOptions_JS_NUMBER_enum_value = 2\n)\n\n// Full and short names for google.protobuf.FieldOptions.OptionRetention.\nconst (\n\tFieldOptions_OptionRetention_enum_fullname = \"google.protobuf.FieldOptions.OptionRetention\"\n\tFieldOptions_OptionRetention_enum_name     = \"OptionRetention\"\n)\n\n// Enum values for google.protobuf.FieldOptions.OptionRetention.\nconst (\n\tFieldOptions_RETENTION_UNKNOWN_enum_value = 0\n\tFieldOptions_RETENTION_RUNTIME_enum_value = 1\n\tFieldOptions_RETENTION_SOURCE_enum_value  = 2\n)\n\n// Full and short names for google.protobuf.FieldOptions.OptionTargetType.\nconst (\n\tFieldOptions_OptionTargetType_enum_fullname = \"google.protobuf.FieldOptions.OptionTargetType\"\n\tFieldOptions_OptionTargetType_enum_name     = \"OptionTargetType\"\n)\n\n// Enum values for google.protobuf.FieldOptions.OptionTargetType.\nconst (\n\tFieldOptions_TARGET_TYPE_UNKNOWN_enum_value         = 0\n\tFieldOptions_TARGET_TYPE_FILE_enum_value            = 1\n\tFieldOptions_TARGET_TYPE_EXTENSION_RANGE_enum_value = 2\n\tFieldOptions_TARGET_TYPE_MESSAGE_enum_value         = 3\n\tFieldOptions_TARGET_TYPE_FIELD_enum_value           = 4\n\tFieldOptions_TARGET_TYPE_ONEOF_enum_value           = 5\n\tFieldOptions_TARGET_TYPE_ENUM_enum_value            = 6\n\tFieldOptions_TARGET_TYPE_ENUM_ENTRY_enum_value      = 7\n\tFieldOptions_TARGET_TYPE_SERVICE_enum_value         = 8\n\tFieldOptions_TARGET_TYPE_METHOD_enum_value          = 9\n)\n\n// Names for google.protobuf.FieldOptions.EditionDefault.\nconst (\n\tFieldOptions_EditionDefault_message_name     protoreflect.Name     = \"EditionDefault\"\n\tFieldOptions_EditionDefault_message_fullname protoreflect.FullName = \"google.protobuf.FieldOptions.EditionDefault\"\n)\n\n// Field names for google.protobuf.FieldOptions.EditionDefault.\nconst (\n\tFieldOptions_EditionDefault_Edition_field_name protoreflect.Name = \"edition\"\n\tFieldOptions_EditionDefault_Value_field_name   protoreflect.Name = \"value\"\n\n\tFieldOptions_EditionDefault_Edition_field_fullname protoreflect.FullName = \"google.protobuf.FieldOptions.EditionDefault.edition\"\n\tFieldOptions_EditionDefault_Value_field_fullname   protoreflect.FullName = \"google.protobuf.FieldOptions.EditionDefault.value\"\n)\n\n// Field numbers for google.protobuf.FieldOptions.EditionDefault.\nconst (\n\tFieldOptions_EditionDefault_Edition_field_number protoreflect.FieldNumber = 3\n\tFieldOptions_EditionDefault_Value_field_number   protoreflect.FieldNumber = 2\n)\n\n// Names for google.protobuf.FieldOptions.FeatureSupport.\nconst (\n\tFieldOptions_FeatureSupport_message_name     protoreflect.Name     = \"FeatureSupport\"\n\tFieldOptions_FeatureSupport_message_fullname protoreflect.FullName = \"google.protobuf.FieldOptions.FeatureSupport\"\n)\n\n// Field names for google.protobuf.FieldOptions.FeatureSupport.\nconst (\n\tFieldOptions_FeatureSupport_EditionIntroduced_field_name  protoreflect.Name = \"edition_introduced\"\n\tFieldOptions_FeatureSupport_EditionDeprecated_field_name  protoreflect.Name = \"edition_deprecated\"\n\tFieldOptions_FeatureSupport_DeprecationWarning_field_name protoreflect.Name = \"deprecation_warning\"\n\tFieldOptions_FeatureSupport_EditionRemoved_field_name     protoreflect.Name = \"edition_removed\"\n\n\tFieldOptions_FeatureSupport_EditionIntroduced_field_fullname  protoreflect.FullName = \"google.protobuf.FieldOptions.FeatureSupport.edition_introduced\"\n\tFieldOptions_FeatureSupport_EditionDeprecated_field_fullname  protoreflect.FullName = \"google.protobuf.FieldOptions.FeatureSupport.edition_deprecated\"\n\tFieldOptions_FeatureSupport_DeprecationWarning_field_fullname protoreflect.FullName = \"google.protobuf.FieldOptions.FeatureSupport.deprecation_warning\"\n\tFieldOptions_FeatureSupport_EditionRemoved_field_fullname     protoreflect.FullName = \"google.protobuf.FieldOptions.FeatureSupport.edition_removed\"\n)\n\n// Field numbers for google.protobuf.FieldOptions.FeatureSupport.\nconst (\n\tFieldOptions_FeatureSupport_EditionIntroduced_field_number  protoreflect.FieldNumber = 1\n\tFieldOptions_FeatureSupport_EditionDeprecated_field_number  protoreflect.FieldNumber = 2\n\tFieldOptions_FeatureSupport_DeprecationWarning_field_number protoreflect.FieldNumber = 3\n\tFieldOptions_FeatureSupport_EditionRemoved_field_number     protoreflect.FieldNumber = 4\n)\n\n// Names for google.protobuf.OneofOptions.\nconst (\n\tOneofOptions_message_name     protoreflect.Name     = \"OneofOptions\"\n\tOneofOptions_message_fullname protoreflect.FullName = \"google.protobuf.OneofOptions\"\n)\n\n// Field names for google.protobuf.OneofOptions.\nconst (\n\tOneofOptions_Features_field_name            protoreflect.Name = \"features\"\n\tOneofOptions_UninterpretedOption_field_name protoreflect.Name = \"uninterpreted_option\"\n\n\tOneofOptions_Features_field_fullname            protoreflect.FullName = \"google.protobuf.OneofOptions.features\"\n\tOneofOptions_UninterpretedOption_field_fullname protoreflect.FullName = \"google.protobuf.OneofOptions.uninterpreted_option\"\n)\n\n// Field numbers for google.protobuf.OneofOptions.\nconst (\n\tOneofOptions_Features_field_number            protoreflect.FieldNumber = 1\n\tOneofOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999\n)\n\n// Names for google.protobuf.EnumOptions.\nconst (\n\tEnumOptions_message_name     protoreflect.Name     = \"EnumOptions\"\n\tEnumOptions_message_fullname protoreflect.FullName = \"google.protobuf.EnumOptions\"\n)\n\n// Field names for google.protobuf.EnumOptions.\nconst (\n\tEnumOptions_AllowAlias_field_name                         protoreflect.Name = \"allow_alias\"\n\tEnumOptions_Deprecated_field_name                         protoreflect.Name = \"deprecated\"\n\tEnumOptions_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = \"deprecated_legacy_json_field_conflicts\"\n\tEnumOptions_Features_field_name                           protoreflect.Name = \"features\"\n\tEnumOptions_UninterpretedOption_field_name                protoreflect.Name = \"uninterpreted_option\"\n\n\tEnumOptions_AllowAlias_field_fullname                         protoreflect.FullName = \"google.protobuf.EnumOptions.allow_alias\"\n\tEnumOptions_Deprecated_field_fullname                         protoreflect.FullName = \"google.protobuf.EnumOptions.deprecated\"\n\tEnumOptions_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = \"google.protobuf.EnumOptions.deprecated_legacy_json_field_conflicts\"\n\tEnumOptions_Features_field_fullname                           protoreflect.FullName = \"google.protobuf.EnumOptions.features\"\n\tEnumOptions_UninterpretedOption_field_fullname                protoreflect.FullName = \"google.protobuf.EnumOptions.uninterpreted_option\"\n)\n\n// Field numbers for google.protobuf.EnumOptions.\nconst (\n\tEnumOptions_AllowAlias_field_number                         protoreflect.FieldNumber = 2\n\tEnumOptions_Deprecated_field_number                         protoreflect.FieldNumber = 3\n\tEnumOptions_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 6\n\tEnumOptions_Features_field_number                           protoreflect.FieldNumber = 7\n\tEnumOptions_UninterpretedOption_field_number                protoreflect.FieldNumber = 999\n)\n\n// Names for google.protobuf.EnumValueOptions.\nconst (\n\tEnumValueOptions_message_name     protoreflect.Name     = \"EnumValueOptions\"\n\tEnumValueOptions_message_fullname protoreflect.FullName = \"google.protobuf.EnumValueOptions\"\n)\n\n// Field names for google.protobuf.EnumValueOptions.\nconst (\n\tEnumValueOptions_Deprecated_field_name          protoreflect.Name = \"deprecated\"\n\tEnumValueOptions_Features_field_name            protoreflect.Name = \"features\"\n\tEnumValueOptions_DebugRedact_field_name         protoreflect.Name = \"debug_redact\"\n\tEnumValueOptions_FeatureSupport_field_name      protoreflect.Name = \"feature_support\"\n\tEnumValueOptions_UninterpretedOption_field_name protoreflect.Name = \"uninterpreted_option\"\n\n\tEnumValueOptions_Deprecated_field_fullname          protoreflect.FullName = \"google.protobuf.EnumValueOptions.deprecated\"\n\tEnumValueOptions_Features_field_fullname            protoreflect.FullName = \"google.protobuf.EnumValueOptions.features\"\n\tEnumValueOptions_DebugRedact_field_fullname         protoreflect.FullName = \"google.protobuf.EnumValueOptions.debug_redact\"\n\tEnumValueOptions_FeatureSupport_field_fullname      protoreflect.FullName = \"google.protobuf.EnumValueOptions.feature_support\"\n\tEnumValueOptions_UninterpretedOption_field_fullname protoreflect.FullName = \"google.protobuf.EnumValueOptions.uninterpreted_option\"\n)\n\n// Field numbers for google.protobuf.EnumValueOptions.\nconst (\n\tEnumValueOptions_Deprecated_field_number          protoreflect.FieldNumber = 1\n\tEnumValueOptions_Features_field_number            protoreflect.FieldNumber = 2\n\tEnumValueOptions_DebugRedact_field_number         protoreflect.FieldNumber = 3\n\tEnumValueOptions_FeatureSupport_field_number      protoreflect.FieldNumber = 4\n\tEnumValueOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999\n)\n\n// Names for google.protobuf.ServiceOptions.\nconst (\n\tServiceOptions_message_name     protoreflect.Name     = \"ServiceOptions\"\n\tServiceOptions_message_fullname protoreflect.FullName = \"google.protobuf.ServiceOptions\"\n)\n\n// Field names for google.protobuf.ServiceOptions.\nconst (\n\tServiceOptions_Features_field_name            protoreflect.Name = \"features\"\n\tServiceOptions_Deprecated_field_name          protoreflect.Name = \"deprecated\"\n\tServiceOptions_UninterpretedOption_field_name protoreflect.Name = \"uninterpreted_option\"\n\n\tServiceOptions_Features_field_fullname            protoreflect.FullName = \"google.protobuf.ServiceOptions.features\"\n\tServiceOptions_Deprecated_field_fullname          protoreflect.FullName = \"google.protobuf.ServiceOptions.deprecated\"\n\tServiceOptions_UninterpretedOption_field_fullname protoreflect.FullName = \"google.protobuf.ServiceOptions.uninterpreted_option\"\n)\n\n// Field numbers for google.protobuf.ServiceOptions.\nconst (\n\tServiceOptions_Features_field_number            protoreflect.FieldNumber = 34\n\tServiceOptions_Deprecated_field_number          protoreflect.FieldNumber = 33\n\tServiceOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999\n)\n\n// Names for google.protobuf.MethodOptions.\nconst (\n\tMethodOptions_message_name     protoreflect.Name     = \"MethodOptions\"\n\tMethodOptions_message_fullname protoreflect.FullName = \"google.protobuf.MethodOptions\"\n)\n\n// Field names for google.protobuf.MethodOptions.\nconst (\n\tMethodOptions_Deprecated_field_name          protoreflect.Name = \"deprecated\"\n\tMethodOptions_IdempotencyLevel_field_name    protoreflect.Name = \"idempotency_level\"\n\tMethodOptions_Features_field_name            protoreflect.Name = \"features\"\n\tMethodOptions_UninterpretedOption_field_name protoreflect.Name = \"uninterpreted_option\"\n\n\tMethodOptions_Deprecated_field_fullname          protoreflect.FullName = \"google.protobuf.MethodOptions.deprecated\"\n\tMethodOptions_IdempotencyLevel_field_fullname    protoreflect.FullName = \"google.protobuf.MethodOptions.idempotency_level\"\n\tMethodOptions_Features_field_fullname            protoreflect.FullName = \"google.protobuf.MethodOptions.features\"\n\tMethodOptions_UninterpretedOption_field_fullname protoreflect.FullName = \"google.protobuf.MethodOptions.uninterpreted_option\"\n)\n\n// Field numbers for google.protobuf.MethodOptions.\nconst (\n\tMethodOptions_Deprecated_field_number          protoreflect.FieldNumber = 33\n\tMethodOptions_IdempotencyLevel_field_number    protoreflect.FieldNumber = 34\n\tMethodOptions_Features_field_number            protoreflect.FieldNumber = 35\n\tMethodOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999\n)\n\n// Full and short names for google.protobuf.MethodOptions.IdempotencyLevel.\nconst (\n\tMethodOptions_IdempotencyLevel_enum_fullname = \"google.protobuf.MethodOptions.IdempotencyLevel\"\n\tMethodOptions_IdempotencyLevel_enum_name     = \"IdempotencyLevel\"\n)\n\n// Enum values for google.protobuf.MethodOptions.IdempotencyLevel.\nconst (\n\tMethodOptions_IDEMPOTENCY_UNKNOWN_enum_value = 0\n\tMethodOptions_NO_SIDE_EFFECTS_enum_value     = 1\n\tMethodOptions_IDEMPOTENT_enum_value          = 2\n)\n\n// Names for google.protobuf.UninterpretedOption.\nconst (\n\tUninterpretedOption_message_name     protoreflect.Name     = \"UninterpretedOption\"\n\tUninterpretedOption_message_fullname protoreflect.FullName = \"google.protobuf.UninterpretedOption\"\n)\n\n// Field names for google.protobuf.UninterpretedOption.\nconst (\n\tUninterpretedOption_Name_field_name             protoreflect.Name = \"name\"\n\tUninterpretedOption_IdentifierValue_field_name  protoreflect.Name = \"identifier_value\"\n\tUninterpretedOption_PositiveIntValue_field_name protoreflect.Name = \"positive_int_value\"\n\tUninterpretedOption_NegativeIntValue_field_name protoreflect.Name = \"negative_int_value\"\n\tUninterpretedOption_DoubleValue_field_name      protoreflect.Name = \"double_value\"\n\tUninterpretedOption_StringValue_field_name      protoreflect.Name = \"string_value\"\n\tUninterpretedOption_AggregateValue_field_name   protoreflect.Name = \"aggregate_value\"\n\n\tUninterpretedOption_Name_field_fullname             protoreflect.FullName = \"google.protobuf.UninterpretedOption.name\"\n\tUninterpretedOption_IdentifierValue_field_fullname  protoreflect.FullName = \"google.protobuf.UninterpretedOption.identifier_value\"\n\tUninterpretedOption_PositiveIntValue_field_fullname protoreflect.FullName = \"google.protobuf.UninterpretedOption.positive_int_value\"\n\tUninterpretedOption_NegativeIntValue_field_fullname protoreflect.FullName = \"google.protobuf.UninterpretedOption.negative_int_value\"\n\tUninterpretedOption_DoubleValue_field_fullname      protoreflect.FullName = \"google.protobuf.UninterpretedOption.double_value\"\n\tUninterpretedOption_StringValue_field_fullname      protoreflect.FullName = \"google.protobuf.UninterpretedOption.string_value\"\n\tUninterpretedOption_AggregateValue_field_fullname   protoreflect.FullName = \"google.protobuf.UninterpretedOption.aggregate_value\"\n)\n\n// Field numbers for google.protobuf.UninterpretedOption.\nconst (\n\tUninterpretedOption_Name_field_number             protoreflect.FieldNumber = 2\n\tUninterpretedOption_IdentifierValue_field_number  protoreflect.FieldNumber = 3\n\tUninterpretedOption_PositiveIntValue_field_number protoreflect.FieldNumber = 4\n\tUninterpretedOption_NegativeIntValue_field_number protoreflect.FieldNumber = 5\n\tUninterpretedOption_DoubleValue_field_number      protoreflect.FieldNumber = 6\n\tUninterpretedOption_StringValue_field_number      protoreflect.FieldNumber = 7\n\tUninterpretedOption_AggregateValue_field_number   protoreflect.FieldNumber = 8\n)\n\n// Names for google.protobuf.UninterpretedOption.NamePart.\nconst (\n\tUninterpretedOption_NamePart_message_name     protoreflect.Name     = \"NamePart\"\n\tUninterpretedOption_NamePart_message_fullname protoreflect.FullName = \"google.protobuf.UninterpretedOption.NamePart\"\n)\n\n// Field names for google.protobuf.UninterpretedOption.NamePart.\nconst (\n\tUninterpretedOption_NamePart_NamePart_field_name    protoreflect.Name = \"name_part\"\n\tUninterpretedOption_NamePart_IsExtension_field_name protoreflect.Name = \"is_extension\"\n\n\tUninterpretedOption_NamePart_NamePart_field_fullname    protoreflect.FullName = \"google.protobuf.UninterpretedOption.NamePart.name_part\"\n\tUninterpretedOption_NamePart_IsExtension_field_fullname protoreflect.FullName = \"google.protobuf.UninterpretedOption.NamePart.is_extension\"\n)\n\n// Field numbers for google.protobuf.UninterpretedOption.NamePart.\nconst (\n\tUninterpretedOption_NamePart_NamePart_field_number    protoreflect.FieldNumber = 1\n\tUninterpretedOption_NamePart_IsExtension_field_number protoreflect.FieldNumber = 2\n)\n\n// Names for google.protobuf.FeatureSet.\nconst (\n\tFeatureSet_message_name     protoreflect.Name     = \"FeatureSet\"\n\tFeatureSet_message_fullname protoreflect.FullName = \"google.protobuf.FeatureSet\"\n)\n\n// Field names for google.protobuf.FeatureSet.\nconst (\n\tFeatureSet_FieldPresence_field_name           protoreflect.Name = \"field_presence\"\n\tFeatureSet_EnumType_field_name                protoreflect.Name = \"enum_type\"\n\tFeatureSet_RepeatedFieldEncoding_field_name   protoreflect.Name = \"repeated_field_encoding\"\n\tFeatureSet_Utf8Validation_field_name          protoreflect.Name = \"utf8_validation\"\n\tFeatureSet_MessageEncoding_field_name         protoreflect.Name = \"message_encoding\"\n\tFeatureSet_JsonFormat_field_name              protoreflect.Name = \"json_format\"\n\tFeatureSet_EnforceNamingStyle_field_name      protoreflect.Name = \"enforce_naming_style\"\n\tFeatureSet_DefaultSymbolVisibility_field_name protoreflect.Name = \"default_symbol_visibility\"\n\n\tFeatureSet_FieldPresence_field_fullname           protoreflect.FullName = \"google.protobuf.FeatureSet.field_presence\"\n\tFeatureSet_EnumType_field_fullname                protoreflect.FullName = \"google.protobuf.FeatureSet.enum_type\"\n\tFeatureSet_RepeatedFieldEncoding_field_fullname   protoreflect.FullName = \"google.protobuf.FeatureSet.repeated_field_encoding\"\n\tFeatureSet_Utf8Validation_field_fullname          protoreflect.FullName = \"google.protobuf.FeatureSet.utf8_validation\"\n\tFeatureSet_MessageEncoding_field_fullname         protoreflect.FullName = \"google.protobuf.FeatureSet.message_encoding\"\n\tFeatureSet_JsonFormat_field_fullname              protoreflect.FullName = \"google.protobuf.FeatureSet.json_format\"\n\tFeatureSet_EnforceNamingStyle_field_fullname      protoreflect.FullName = \"google.protobuf.FeatureSet.enforce_naming_style\"\n\tFeatureSet_DefaultSymbolVisibility_field_fullname protoreflect.FullName = \"google.protobuf.FeatureSet.default_symbol_visibility\"\n)\n\n// Field numbers for google.protobuf.FeatureSet.\nconst (\n\tFeatureSet_FieldPresence_field_number           protoreflect.FieldNumber = 1\n\tFeatureSet_EnumType_field_number                protoreflect.FieldNumber = 2\n\tFeatureSet_RepeatedFieldEncoding_field_number   protoreflect.FieldNumber = 3\n\tFeatureSet_Utf8Validation_field_number          protoreflect.FieldNumber = 4\n\tFeatureSet_MessageEncoding_field_number         protoreflect.FieldNumber = 5\n\tFeatureSet_JsonFormat_field_number              protoreflect.FieldNumber = 6\n\tFeatureSet_EnforceNamingStyle_field_number      protoreflect.FieldNumber = 7\n\tFeatureSet_DefaultSymbolVisibility_field_number protoreflect.FieldNumber = 8\n)\n\n// Full and short names for google.protobuf.FeatureSet.FieldPresence.\nconst (\n\tFeatureSet_FieldPresence_enum_fullname = \"google.protobuf.FeatureSet.FieldPresence\"\n\tFeatureSet_FieldPresence_enum_name     = \"FieldPresence\"\n)\n\n// Enum values for google.protobuf.FeatureSet.FieldPresence.\nconst (\n\tFeatureSet_FIELD_PRESENCE_UNKNOWN_enum_value = 0\n\tFeatureSet_EXPLICIT_enum_value               = 1\n\tFeatureSet_IMPLICIT_enum_value               = 2\n\tFeatureSet_LEGACY_REQUIRED_enum_value        = 3\n)\n\n// Full and short names for google.protobuf.FeatureSet.EnumType.\nconst (\n\tFeatureSet_EnumType_enum_fullname = \"google.protobuf.FeatureSet.EnumType\"\n\tFeatureSet_EnumType_enum_name     = \"EnumType\"\n)\n\n// Enum values for google.protobuf.FeatureSet.EnumType.\nconst (\n\tFeatureSet_ENUM_TYPE_UNKNOWN_enum_value = 0\n\tFeatureSet_OPEN_enum_value              = 1\n\tFeatureSet_CLOSED_enum_value            = 2\n)\n\n// Full and short names for google.protobuf.FeatureSet.RepeatedFieldEncoding.\nconst (\n\tFeatureSet_RepeatedFieldEncoding_enum_fullname = \"google.protobuf.FeatureSet.RepeatedFieldEncoding\"\n\tFeatureSet_RepeatedFieldEncoding_enum_name     = \"RepeatedFieldEncoding\"\n)\n\n// Enum values for google.protobuf.FeatureSet.RepeatedFieldEncoding.\nconst (\n\tFeatureSet_REPEATED_FIELD_ENCODING_UNKNOWN_enum_value = 0\n\tFeatureSet_PACKED_enum_value                          = 1\n\tFeatureSet_EXPANDED_enum_value                        = 2\n)\n\n// Full and short names for google.protobuf.FeatureSet.Utf8Validation.\nconst (\n\tFeatureSet_Utf8Validation_enum_fullname = \"google.protobuf.FeatureSet.Utf8Validation\"\n\tFeatureSet_Utf8Validation_enum_name     = \"Utf8Validation\"\n)\n\n// Enum values for google.protobuf.FeatureSet.Utf8Validation.\nconst (\n\tFeatureSet_UTF8_VALIDATION_UNKNOWN_enum_value = 0\n\tFeatureSet_VERIFY_enum_value                  = 2\n\tFeatureSet_NONE_enum_value                    = 3\n)\n\n// Full and short names for google.protobuf.FeatureSet.MessageEncoding.\nconst (\n\tFeatureSet_MessageEncoding_enum_fullname = \"google.protobuf.FeatureSet.MessageEncoding\"\n\tFeatureSet_MessageEncoding_enum_name     = \"MessageEncoding\"\n)\n\n// Enum values for google.protobuf.FeatureSet.MessageEncoding.\nconst (\n\tFeatureSet_MESSAGE_ENCODING_UNKNOWN_enum_value = 0\n\tFeatureSet_LENGTH_PREFIXED_enum_value          = 1\n\tFeatureSet_DELIMITED_enum_value                = 2\n)\n\n// Full and short names for google.protobuf.FeatureSet.JsonFormat.\nconst (\n\tFeatureSet_JsonFormat_enum_fullname = \"google.protobuf.FeatureSet.JsonFormat\"\n\tFeatureSet_JsonFormat_enum_name     = \"JsonFormat\"\n)\n\n// Enum values for google.protobuf.FeatureSet.JsonFormat.\nconst (\n\tFeatureSet_JSON_FORMAT_UNKNOWN_enum_value = 0\n\tFeatureSet_ALLOW_enum_value               = 1\n\tFeatureSet_LEGACY_BEST_EFFORT_enum_value  = 2\n)\n\n// Full and short names for google.protobuf.FeatureSet.EnforceNamingStyle.\nconst (\n\tFeatureSet_EnforceNamingStyle_enum_fullname = \"google.protobuf.FeatureSet.EnforceNamingStyle\"\n\tFeatureSet_EnforceNamingStyle_enum_name     = \"EnforceNamingStyle\"\n)\n\n// Enum values for google.protobuf.FeatureSet.EnforceNamingStyle.\nconst (\n\tFeatureSet_ENFORCE_NAMING_STYLE_UNKNOWN_enum_value = 0\n\tFeatureSet_STYLE2024_enum_value                    = 1\n\tFeatureSet_STYLE_LEGACY_enum_value                 = 2\n)\n\n// Names for google.protobuf.FeatureSet.VisibilityFeature.\nconst (\n\tFeatureSet_VisibilityFeature_message_name     protoreflect.Name     = \"VisibilityFeature\"\n\tFeatureSet_VisibilityFeature_message_fullname protoreflect.FullName = \"google.protobuf.FeatureSet.VisibilityFeature\"\n)\n\n// Full and short names for google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility.\nconst (\n\tFeatureSet_VisibilityFeature_DefaultSymbolVisibility_enum_fullname = \"google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility\"\n\tFeatureSet_VisibilityFeature_DefaultSymbolVisibility_enum_name     = \"DefaultSymbolVisibility\"\n)\n\n// Enum values for google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility.\nconst (\n\tFeatureSet_VisibilityFeature_DEFAULT_SYMBOL_VISIBILITY_UNKNOWN_enum_value = 0\n\tFeatureSet_VisibilityFeature_EXPORT_ALL_enum_value                        = 1\n\tFeatureSet_VisibilityFeature_EXPORT_TOP_LEVEL_enum_value                  = 2\n\tFeatureSet_VisibilityFeature_LOCAL_ALL_enum_value                         = 3\n\tFeatureSet_VisibilityFeature_STRICT_enum_value                            = 4\n)\n\n// Names for google.protobuf.FeatureSetDefaults.\nconst (\n\tFeatureSetDefaults_message_name     protoreflect.Name     = \"FeatureSetDefaults\"\n\tFeatureSetDefaults_message_fullname protoreflect.FullName = \"google.protobuf.FeatureSetDefaults\"\n)\n\n// Field names for google.protobuf.FeatureSetDefaults.\nconst (\n\tFeatureSetDefaults_Defaults_field_name       protoreflect.Name = \"defaults\"\n\tFeatureSetDefaults_MinimumEdition_field_name protoreflect.Name = \"minimum_edition\"\n\tFeatureSetDefaults_MaximumEdition_field_name protoreflect.Name = \"maximum_edition\"\n\n\tFeatureSetDefaults_Defaults_field_fullname       protoreflect.FullName = \"google.protobuf.FeatureSetDefaults.defaults\"\n\tFeatureSetDefaults_MinimumEdition_field_fullname protoreflect.FullName = \"google.protobuf.FeatureSetDefaults.minimum_edition\"\n\tFeatureSetDefaults_MaximumEdition_field_fullname protoreflect.FullName = \"google.protobuf.FeatureSetDefaults.maximum_edition\"\n)\n\n// Field numbers for google.protobuf.FeatureSetDefaults.\nconst (\n\tFeatureSetDefaults_Defaults_field_number       protoreflect.FieldNumber = 1\n\tFeatureSetDefaults_MinimumEdition_field_number protoreflect.FieldNumber = 4\n\tFeatureSetDefaults_MaximumEdition_field_number protoreflect.FieldNumber = 5\n)\n\n// Names for google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.\nconst (\n\tFeatureSetDefaults_FeatureSetEditionDefault_message_name     protoreflect.Name     = \"FeatureSetEditionDefault\"\n\tFeatureSetDefaults_FeatureSetEditionDefault_message_fullname protoreflect.FullName = \"google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault\"\n)\n\n// Field names for google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.\nconst (\n\tFeatureSetDefaults_FeatureSetEditionDefault_Edition_field_name             protoreflect.Name = \"edition\"\n\tFeatureSetDefaults_FeatureSetEditionDefault_OverridableFeatures_field_name protoreflect.Name = \"overridable_features\"\n\tFeatureSetDefaults_FeatureSetEditionDefault_FixedFeatures_field_name       protoreflect.Name = \"fixed_features\"\n\n\tFeatureSetDefaults_FeatureSetEditionDefault_Edition_field_fullname             protoreflect.FullName = \"google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.edition\"\n\tFeatureSetDefaults_FeatureSetEditionDefault_OverridableFeatures_field_fullname protoreflect.FullName = \"google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.overridable_features\"\n\tFeatureSetDefaults_FeatureSetEditionDefault_FixedFeatures_field_fullname       protoreflect.FullName = \"google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fixed_features\"\n)\n\n// Field numbers for google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.\nconst (\n\tFeatureSetDefaults_FeatureSetEditionDefault_Edition_field_number             protoreflect.FieldNumber = 3\n\tFeatureSetDefaults_FeatureSetEditionDefault_OverridableFeatures_field_number protoreflect.FieldNumber = 4\n\tFeatureSetDefaults_FeatureSetEditionDefault_FixedFeatures_field_number       protoreflect.FieldNumber = 5\n)\n\n// Names for google.protobuf.SourceCodeInfo.\nconst (\n\tSourceCodeInfo_message_name     protoreflect.Name     = \"SourceCodeInfo\"\n\tSourceCodeInfo_message_fullname protoreflect.FullName = \"google.protobuf.SourceCodeInfo\"\n)\n\n// Field names for google.protobuf.SourceCodeInfo.\nconst (\n\tSourceCodeInfo_Location_field_name protoreflect.Name = \"location\"\n\n\tSourceCodeInfo_Location_field_fullname protoreflect.FullName = \"google.protobuf.SourceCodeInfo.location\"\n)\n\n// Field numbers for google.protobuf.SourceCodeInfo.\nconst (\n\tSourceCodeInfo_Location_field_number protoreflect.FieldNumber = 1\n)\n\n// Names for google.protobuf.SourceCodeInfo.Location.\nconst (\n\tSourceCodeInfo_Location_message_name     protoreflect.Name     = \"Location\"\n\tSourceCodeInfo_Location_message_fullname protoreflect.FullName = \"google.protobuf.SourceCodeInfo.Location\"\n)\n\n// Field names for google.protobuf.SourceCodeInfo.Location.\nconst (\n\tSourceCodeInfo_Location_Path_field_name                    protoreflect.Name = \"path\"\n\tSourceCodeInfo_Location_Span_field_name                    protoreflect.Name = \"span\"\n\tSourceCodeInfo_Location_LeadingComments_field_name         protoreflect.Name = \"leading_comments\"\n\tSourceCodeInfo_Location_TrailingComments_field_name        protoreflect.Name = \"trailing_comments\"\n\tSourceCodeInfo_Location_LeadingDetachedComments_field_name protoreflect.Name = \"leading_detached_comments\"\n\n\tSourceCodeInfo_Location_Path_field_fullname                    protoreflect.FullName = \"google.protobuf.SourceCodeInfo.Location.path\"\n\tSourceCodeInfo_Location_Span_field_fullname                    protoreflect.FullName = \"google.protobuf.SourceCodeInfo.Location.span\"\n\tSourceCodeInfo_Location_LeadingComments_field_fullname         protoreflect.FullName = \"google.protobuf.SourceCodeInfo.Location.leading_comments\"\n\tSourceCodeInfo_Location_TrailingComments_field_fullname        protoreflect.FullName = \"google.protobuf.SourceCodeInfo.Location.trailing_comments\"\n\tSourceCodeInfo_Location_LeadingDetachedComments_field_fullname protoreflect.FullName = \"google.protobuf.SourceCodeInfo.Location.leading_detached_comments\"\n)\n\n// Field numbers for google.protobuf.SourceCodeInfo.Location.\nconst (\n\tSourceCodeInfo_Location_Path_field_number                    protoreflect.FieldNumber = 1\n\tSourceCodeInfo_Location_Span_field_number                    protoreflect.FieldNumber = 2\n\tSourceCodeInfo_Location_LeadingComments_field_number         protoreflect.FieldNumber = 3\n\tSourceCodeInfo_Location_TrailingComments_field_number        protoreflect.FieldNumber = 4\n\tSourceCodeInfo_Location_LeadingDetachedComments_field_number protoreflect.FieldNumber = 6\n)\n\n// Names for google.protobuf.GeneratedCodeInfo.\nconst (\n\tGeneratedCodeInfo_message_name     protoreflect.Name     = \"GeneratedCodeInfo\"\n\tGeneratedCodeInfo_message_fullname protoreflect.FullName = \"google.protobuf.GeneratedCodeInfo\"\n)\n\n// Field names for google.protobuf.GeneratedCodeInfo.\nconst (\n\tGeneratedCodeInfo_Annotation_field_name protoreflect.Name = \"annotation\"\n\n\tGeneratedCodeInfo_Annotation_field_fullname protoreflect.FullName = \"google.protobuf.GeneratedCodeInfo.annotation\"\n)\n\n// Field numbers for google.protobuf.GeneratedCodeInfo.\nconst (\n\tGeneratedCodeInfo_Annotation_field_number protoreflect.FieldNumber = 1\n)\n\n// Names for google.protobuf.GeneratedCodeInfo.Annotation.\nconst (\n\tGeneratedCodeInfo_Annotation_message_name     protoreflect.Name     = \"Annotation\"\n\tGeneratedCodeInfo_Annotation_message_fullname protoreflect.FullName = \"google.protobuf.GeneratedCodeInfo.Annotation\"\n)\n\n// Field names for google.protobuf.GeneratedCodeInfo.Annotation.\nconst (\n\tGeneratedCodeInfo_Annotation_Path_field_name       protoreflect.Name = \"path\"\n\tGeneratedCodeInfo_Annotation_SourceFile_field_name protoreflect.Name = \"source_file\"\n\tGeneratedCodeInfo_Annotation_Begin_field_name      protoreflect.Name = \"begin\"\n\tGeneratedCodeInfo_Annotation_End_field_name        protoreflect.Name = \"end\"\n\tGeneratedCodeInfo_Annotation_Semantic_field_name   protoreflect.Name = \"semantic\"\n\n\tGeneratedCodeInfo_Annotation_Path_field_fullname       protoreflect.FullName = \"google.protobuf.GeneratedCodeInfo.Annotation.path\"\n\tGeneratedCodeInfo_Annotation_SourceFile_field_fullname protoreflect.FullName = \"google.protobuf.GeneratedCodeInfo.Annotation.source_file\"\n\tGeneratedCodeInfo_Annotation_Begin_field_fullname      protoreflect.FullName = \"google.protobuf.GeneratedCodeInfo.Annotation.begin\"\n\tGeneratedCodeInfo_Annotation_End_field_fullname        protoreflect.FullName = \"google.protobuf.GeneratedCodeInfo.Annotation.end\"\n\tGeneratedCodeInfo_Annotation_Semantic_field_fullname   protoreflect.FullName = \"google.protobuf.GeneratedCodeInfo.Annotation.semantic\"\n)\n\n// Field numbers for google.protobuf.GeneratedCodeInfo.Annotation.\nconst (\n\tGeneratedCodeInfo_Annotation_Path_field_number       protoreflect.FieldNumber = 1\n\tGeneratedCodeInfo_Annotation_SourceFile_field_number protoreflect.FieldNumber = 2\n\tGeneratedCodeInfo_Annotation_Begin_field_number      protoreflect.FieldNumber = 3\n\tGeneratedCodeInfo_Annotation_End_field_number        protoreflect.FieldNumber = 4\n\tGeneratedCodeInfo_Annotation_Semantic_field_number   protoreflect.FieldNumber = 5\n)\n\n// Full and short names for google.protobuf.GeneratedCodeInfo.Annotation.Semantic.\nconst (\n\tGeneratedCodeInfo_Annotation_Semantic_enum_fullname = \"google.protobuf.GeneratedCodeInfo.Annotation.Semantic\"\n\tGeneratedCodeInfo_Annotation_Semantic_enum_name     = \"Semantic\"\n)\n\n// Enum values for google.protobuf.GeneratedCodeInfo.Annotation.Semantic.\nconst (\n\tGeneratedCodeInfo_Annotation_NONE_enum_value  = 0\n\tGeneratedCodeInfo_Annotation_SET_enum_value   = 1\n\tGeneratedCodeInfo_Annotation_ALIAS_enum_value = 2\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/doc.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 genid contains constants for declarations in descriptor.proto\n// and the well-known types.\npackage genid\n\nimport \"google.golang.org/protobuf/reflect/protoreflect\"\n\nconst GoogleProtobuf_package protoreflect.FullName = \"google.protobuf\"\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/duration_gen.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// Code generated by generate-protos. DO NOT EDIT.\n\npackage genid\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nconst File_google_protobuf_duration_proto = \"google/protobuf/duration.proto\"\n\n// Names for google.protobuf.Duration.\nconst (\n\tDuration_message_name     protoreflect.Name     = \"Duration\"\n\tDuration_message_fullname protoreflect.FullName = \"google.protobuf.Duration\"\n)\n\n// Field names for google.protobuf.Duration.\nconst (\n\tDuration_Seconds_field_name protoreflect.Name = \"seconds\"\n\tDuration_Nanos_field_name   protoreflect.Name = \"nanos\"\n\n\tDuration_Seconds_field_fullname protoreflect.FullName = \"google.protobuf.Duration.seconds\"\n\tDuration_Nanos_field_fullname   protoreflect.FullName = \"google.protobuf.Duration.nanos\"\n)\n\n// Field numbers for google.protobuf.Duration.\nconst (\n\tDuration_Seconds_field_number protoreflect.FieldNumber = 1\n\tDuration_Nanos_field_number   protoreflect.FieldNumber = 2\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/empty_gen.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// Code generated by generate-protos. DO NOT EDIT.\n\npackage genid\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nconst File_google_protobuf_empty_proto = \"google/protobuf/empty.proto\"\n\n// Names for google.protobuf.Empty.\nconst (\n\tEmpty_message_name     protoreflect.Name     = \"Empty\"\n\tEmpty_message_fullname protoreflect.FullName = \"google.protobuf.Empty\"\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.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// Code generated by generate-protos. DO NOT EDIT.\n\npackage genid\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nconst File_google_protobuf_field_mask_proto = \"google/protobuf/field_mask.proto\"\n\n// Names for google.protobuf.FieldMask.\nconst (\n\tFieldMask_message_name     protoreflect.Name     = \"FieldMask\"\n\tFieldMask_message_fullname protoreflect.FullName = \"google.protobuf.FieldMask\"\n)\n\n// Field names for google.protobuf.FieldMask.\nconst (\n\tFieldMask_Paths_field_name protoreflect.Name = \"paths\"\n\n\tFieldMask_Paths_field_fullname protoreflect.FullName = \"google.protobuf.FieldMask.paths\"\n)\n\n// Field numbers for google.protobuf.FieldMask.\nconst (\n\tFieldMask_Paths_field_number protoreflect.FieldNumber = 1\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/go_features_gen.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// Code generated by generate-protos. DO NOT EDIT.\n\npackage genid\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nconst File_google_protobuf_go_features_proto = \"google/protobuf/go_features.proto\"\n\n// Names for pb.GoFeatures.\nconst (\n\tGoFeatures_message_name     protoreflect.Name     = \"GoFeatures\"\n\tGoFeatures_message_fullname protoreflect.FullName = \"pb.GoFeatures\"\n)\n\n// Field names for pb.GoFeatures.\nconst (\n\tGoFeatures_LegacyUnmarshalJsonEnum_field_name protoreflect.Name = \"legacy_unmarshal_json_enum\"\n\tGoFeatures_ApiLevel_field_name                protoreflect.Name = \"api_level\"\n\tGoFeatures_StripEnumPrefix_field_name         protoreflect.Name = \"strip_enum_prefix\"\n\n\tGoFeatures_LegacyUnmarshalJsonEnum_field_fullname protoreflect.FullName = \"pb.GoFeatures.legacy_unmarshal_json_enum\"\n\tGoFeatures_ApiLevel_field_fullname                protoreflect.FullName = \"pb.GoFeatures.api_level\"\n\tGoFeatures_StripEnumPrefix_field_fullname         protoreflect.FullName = \"pb.GoFeatures.strip_enum_prefix\"\n)\n\n// Field numbers for pb.GoFeatures.\nconst (\n\tGoFeatures_LegacyUnmarshalJsonEnum_field_number protoreflect.FieldNumber = 1\n\tGoFeatures_ApiLevel_field_number                protoreflect.FieldNumber = 2\n\tGoFeatures_StripEnumPrefix_field_number         protoreflect.FieldNumber = 3\n)\n\n// Full and short names for pb.GoFeatures.APILevel.\nconst (\n\tGoFeatures_APILevel_enum_fullname = \"pb.GoFeatures.APILevel\"\n\tGoFeatures_APILevel_enum_name     = \"APILevel\"\n)\n\n// Enum values for pb.GoFeatures.APILevel.\nconst (\n\tGoFeatures_API_LEVEL_UNSPECIFIED_enum_value = 0\n\tGoFeatures_API_OPEN_enum_value              = 1\n\tGoFeatures_API_HYBRID_enum_value            = 2\n\tGoFeatures_API_OPAQUE_enum_value            = 3\n)\n\n// Full and short names for pb.GoFeatures.StripEnumPrefix.\nconst (\n\tGoFeatures_StripEnumPrefix_enum_fullname = \"pb.GoFeatures.StripEnumPrefix\"\n\tGoFeatures_StripEnumPrefix_enum_name     = \"StripEnumPrefix\"\n)\n\n// Enum values for pb.GoFeatures.StripEnumPrefix.\nconst (\n\tGoFeatures_STRIP_ENUM_PREFIX_UNSPECIFIED_enum_value   = 0\n\tGoFeatures_STRIP_ENUM_PREFIX_KEEP_enum_value          = 1\n\tGoFeatures_STRIP_ENUM_PREFIX_GENERATE_BOTH_enum_value = 2\n\tGoFeatures_STRIP_ENUM_PREFIX_STRIP_enum_value         = 3\n)\n\n// Extension numbers\nconst (\n\tFeatureSet_Go_ext_number protoreflect.FieldNumber = 1002\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/goname.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 genid\n\n// Go names of implementation-specific struct fields in generated messages.\nconst (\n\tState_goname = \"state\"\n\n\tSizeCache_goname  = \"sizeCache\"\n\tSizeCacheA_goname = \"XXX_sizecache\"\n\n\tUnknownFields_goname  = \"unknownFields\"\n\tUnknownFieldsA_goname = \"XXX_unrecognized\"\n\n\tExtensionFields_goname  = \"extensionFields\"\n\tExtensionFieldsA_goname = \"XXX_InternalExtensions\"\n\tExtensionFieldsB_goname = \"XXX_extensions\"\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/map_entry.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 genid\n\nimport \"google.golang.org/protobuf/reflect/protoreflect\"\n\n// Generic field names and numbers for synthetic map entry messages.\nconst (\n\tMapEntry_Key_field_name   protoreflect.Name = \"key\"\n\tMapEntry_Value_field_name protoreflect.Name = \"value\"\n\n\tMapEntry_Key_field_number   protoreflect.FieldNumber = 1\n\tMapEntry_Value_field_number protoreflect.FieldNumber = 2\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/name.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 genid\n\nconst (\n\tNoUnkeyedLiteral_goname  = \"noUnkeyedLiteral\"\n\tNoUnkeyedLiteralA_goname = \"XXX_NoUnkeyedLiteral\"\n\n\tBuilderSuffix_goname = \"_builder\"\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/source_context_gen.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// Code generated by generate-protos. DO NOT EDIT.\n\npackage genid\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nconst File_google_protobuf_source_context_proto = \"google/protobuf/source_context.proto\"\n\n// Names for google.protobuf.SourceContext.\nconst (\n\tSourceContext_message_name     protoreflect.Name     = \"SourceContext\"\n\tSourceContext_message_fullname protoreflect.FullName = \"google.protobuf.SourceContext\"\n)\n\n// Field names for google.protobuf.SourceContext.\nconst (\n\tSourceContext_FileName_field_name protoreflect.Name = \"file_name\"\n\n\tSourceContext_FileName_field_fullname protoreflect.FullName = \"google.protobuf.SourceContext.file_name\"\n)\n\n// Field numbers for google.protobuf.SourceContext.\nconst (\n\tSourceContext_FileName_field_number protoreflect.FieldNumber = 1\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/struct_gen.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// Code generated by generate-protos. DO NOT EDIT.\n\npackage genid\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nconst File_google_protobuf_struct_proto = \"google/protobuf/struct.proto\"\n\n// Full and short names for google.protobuf.NullValue.\nconst (\n\tNullValue_enum_fullname = \"google.protobuf.NullValue\"\n\tNullValue_enum_name     = \"NullValue\"\n)\n\n// Enum values for google.protobuf.NullValue.\nconst (\n\tNullValue_NULL_VALUE_enum_value = 0\n)\n\n// Names for google.protobuf.Struct.\nconst (\n\tStruct_message_name     protoreflect.Name     = \"Struct\"\n\tStruct_message_fullname protoreflect.FullName = \"google.protobuf.Struct\"\n)\n\n// Field names for google.protobuf.Struct.\nconst (\n\tStruct_Fields_field_name protoreflect.Name = \"fields\"\n\n\tStruct_Fields_field_fullname protoreflect.FullName = \"google.protobuf.Struct.fields\"\n)\n\n// Field numbers for google.protobuf.Struct.\nconst (\n\tStruct_Fields_field_number protoreflect.FieldNumber = 1\n)\n\n// Names for google.protobuf.Struct.FieldsEntry.\nconst (\n\tStruct_FieldsEntry_message_name     protoreflect.Name     = \"FieldsEntry\"\n\tStruct_FieldsEntry_message_fullname protoreflect.FullName = \"google.protobuf.Struct.FieldsEntry\"\n)\n\n// Field names for google.protobuf.Struct.FieldsEntry.\nconst (\n\tStruct_FieldsEntry_Key_field_name   protoreflect.Name = \"key\"\n\tStruct_FieldsEntry_Value_field_name protoreflect.Name = \"value\"\n\n\tStruct_FieldsEntry_Key_field_fullname   protoreflect.FullName = \"google.protobuf.Struct.FieldsEntry.key\"\n\tStruct_FieldsEntry_Value_field_fullname protoreflect.FullName = \"google.protobuf.Struct.FieldsEntry.value\"\n)\n\n// Field numbers for google.protobuf.Struct.FieldsEntry.\nconst (\n\tStruct_FieldsEntry_Key_field_number   protoreflect.FieldNumber = 1\n\tStruct_FieldsEntry_Value_field_number protoreflect.FieldNumber = 2\n)\n\n// Names for google.protobuf.Value.\nconst (\n\tValue_message_name     protoreflect.Name     = \"Value\"\n\tValue_message_fullname protoreflect.FullName = \"google.protobuf.Value\"\n)\n\n// Field names for google.protobuf.Value.\nconst (\n\tValue_NullValue_field_name   protoreflect.Name = \"null_value\"\n\tValue_NumberValue_field_name protoreflect.Name = \"number_value\"\n\tValue_StringValue_field_name protoreflect.Name = \"string_value\"\n\tValue_BoolValue_field_name   protoreflect.Name = \"bool_value\"\n\tValue_StructValue_field_name protoreflect.Name = \"struct_value\"\n\tValue_ListValue_field_name   protoreflect.Name = \"list_value\"\n\n\tValue_NullValue_field_fullname   protoreflect.FullName = \"google.protobuf.Value.null_value\"\n\tValue_NumberValue_field_fullname protoreflect.FullName = \"google.protobuf.Value.number_value\"\n\tValue_StringValue_field_fullname protoreflect.FullName = \"google.protobuf.Value.string_value\"\n\tValue_BoolValue_field_fullname   protoreflect.FullName = \"google.protobuf.Value.bool_value\"\n\tValue_StructValue_field_fullname protoreflect.FullName = \"google.protobuf.Value.struct_value\"\n\tValue_ListValue_field_fullname   protoreflect.FullName = \"google.protobuf.Value.list_value\"\n)\n\n// Field numbers for google.protobuf.Value.\nconst (\n\tValue_NullValue_field_number   protoreflect.FieldNumber = 1\n\tValue_NumberValue_field_number protoreflect.FieldNumber = 2\n\tValue_StringValue_field_number protoreflect.FieldNumber = 3\n\tValue_BoolValue_field_number   protoreflect.FieldNumber = 4\n\tValue_StructValue_field_number protoreflect.FieldNumber = 5\n\tValue_ListValue_field_number   protoreflect.FieldNumber = 6\n)\n\n// Oneof names for google.protobuf.Value.\nconst (\n\tValue_Kind_oneof_name protoreflect.Name = \"kind\"\n\n\tValue_Kind_oneof_fullname protoreflect.FullName = \"google.protobuf.Value.kind\"\n)\n\n// Names for google.protobuf.ListValue.\nconst (\n\tListValue_message_name     protoreflect.Name     = \"ListValue\"\n\tListValue_message_fullname protoreflect.FullName = \"google.protobuf.ListValue\"\n)\n\n// Field names for google.protobuf.ListValue.\nconst (\n\tListValue_Values_field_name protoreflect.Name = \"values\"\n\n\tListValue_Values_field_fullname protoreflect.FullName = \"google.protobuf.ListValue.values\"\n)\n\n// Field numbers for google.protobuf.ListValue.\nconst (\n\tListValue_Values_field_number protoreflect.FieldNumber = 1\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.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// Code generated by generate-protos. DO NOT EDIT.\n\npackage genid\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nconst File_google_protobuf_timestamp_proto = \"google/protobuf/timestamp.proto\"\n\n// Names for google.protobuf.Timestamp.\nconst (\n\tTimestamp_message_name     protoreflect.Name     = \"Timestamp\"\n\tTimestamp_message_fullname protoreflect.FullName = \"google.protobuf.Timestamp\"\n)\n\n// Field names for google.protobuf.Timestamp.\nconst (\n\tTimestamp_Seconds_field_name protoreflect.Name = \"seconds\"\n\tTimestamp_Nanos_field_name   protoreflect.Name = \"nanos\"\n\n\tTimestamp_Seconds_field_fullname protoreflect.FullName = \"google.protobuf.Timestamp.seconds\"\n\tTimestamp_Nanos_field_fullname   protoreflect.FullName = \"google.protobuf.Timestamp.nanos\"\n)\n\n// Field numbers for google.protobuf.Timestamp.\nconst (\n\tTimestamp_Seconds_field_number protoreflect.FieldNumber = 1\n\tTimestamp_Nanos_field_number   protoreflect.FieldNumber = 2\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/type_gen.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// Code generated by generate-protos. DO NOT EDIT.\n\npackage genid\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nconst File_google_protobuf_type_proto = \"google/protobuf/type.proto\"\n\n// Full and short names for google.protobuf.Syntax.\nconst (\n\tSyntax_enum_fullname = \"google.protobuf.Syntax\"\n\tSyntax_enum_name     = \"Syntax\"\n)\n\n// Enum values for google.protobuf.Syntax.\nconst (\n\tSyntax_SYNTAX_PROTO2_enum_value   = 0\n\tSyntax_SYNTAX_PROTO3_enum_value   = 1\n\tSyntax_SYNTAX_EDITIONS_enum_value = 2\n)\n\n// Names for google.protobuf.Type.\nconst (\n\tType_message_name     protoreflect.Name     = \"Type\"\n\tType_message_fullname protoreflect.FullName = \"google.protobuf.Type\"\n)\n\n// Field names for google.protobuf.Type.\nconst (\n\tType_Name_field_name          protoreflect.Name = \"name\"\n\tType_Fields_field_name        protoreflect.Name = \"fields\"\n\tType_Oneofs_field_name        protoreflect.Name = \"oneofs\"\n\tType_Options_field_name       protoreflect.Name = \"options\"\n\tType_SourceContext_field_name protoreflect.Name = \"source_context\"\n\tType_Syntax_field_name        protoreflect.Name = \"syntax\"\n\tType_Edition_field_name       protoreflect.Name = \"edition\"\n\n\tType_Name_field_fullname          protoreflect.FullName = \"google.protobuf.Type.name\"\n\tType_Fields_field_fullname        protoreflect.FullName = \"google.protobuf.Type.fields\"\n\tType_Oneofs_field_fullname        protoreflect.FullName = \"google.protobuf.Type.oneofs\"\n\tType_Options_field_fullname       protoreflect.FullName = \"google.protobuf.Type.options\"\n\tType_SourceContext_field_fullname protoreflect.FullName = \"google.protobuf.Type.source_context\"\n\tType_Syntax_field_fullname        protoreflect.FullName = \"google.protobuf.Type.syntax\"\n\tType_Edition_field_fullname       protoreflect.FullName = \"google.protobuf.Type.edition\"\n)\n\n// Field numbers for google.protobuf.Type.\nconst (\n\tType_Name_field_number          protoreflect.FieldNumber = 1\n\tType_Fields_field_number        protoreflect.FieldNumber = 2\n\tType_Oneofs_field_number        protoreflect.FieldNumber = 3\n\tType_Options_field_number       protoreflect.FieldNumber = 4\n\tType_SourceContext_field_number protoreflect.FieldNumber = 5\n\tType_Syntax_field_number        protoreflect.FieldNumber = 6\n\tType_Edition_field_number       protoreflect.FieldNumber = 7\n)\n\n// Names for google.protobuf.Field.\nconst (\n\tField_message_name     protoreflect.Name     = \"Field\"\n\tField_message_fullname protoreflect.FullName = \"google.protobuf.Field\"\n)\n\n// Field names for google.protobuf.Field.\nconst (\n\tField_Kind_field_name         protoreflect.Name = \"kind\"\n\tField_Cardinality_field_name  protoreflect.Name = \"cardinality\"\n\tField_Number_field_name       protoreflect.Name = \"number\"\n\tField_Name_field_name         protoreflect.Name = \"name\"\n\tField_TypeUrl_field_name      protoreflect.Name = \"type_url\"\n\tField_OneofIndex_field_name   protoreflect.Name = \"oneof_index\"\n\tField_Packed_field_name       protoreflect.Name = \"packed\"\n\tField_Options_field_name      protoreflect.Name = \"options\"\n\tField_JsonName_field_name     protoreflect.Name = \"json_name\"\n\tField_DefaultValue_field_name protoreflect.Name = \"default_value\"\n\n\tField_Kind_field_fullname         protoreflect.FullName = \"google.protobuf.Field.kind\"\n\tField_Cardinality_field_fullname  protoreflect.FullName = \"google.protobuf.Field.cardinality\"\n\tField_Number_field_fullname       protoreflect.FullName = \"google.protobuf.Field.number\"\n\tField_Name_field_fullname         protoreflect.FullName = \"google.protobuf.Field.name\"\n\tField_TypeUrl_field_fullname      protoreflect.FullName = \"google.protobuf.Field.type_url\"\n\tField_OneofIndex_field_fullname   protoreflect.FullName = \"google.protobuf.Field.oneof_index\"\n\tField_Packed_field_fullname       protoreflect.FullName = \"google.protobuf.Field.packed\"\n\tField_Options_field_fullname      protoreflect.FullName = \"google.protobuf.Field.options\"\n\tField_JsonName_field_fullname     protoreflect.FullName = \"google.protobuf.Field.json_name\"\n\tField_DefaultValue_field_fullname protoreflect.FullName = \"google.protobuf.Field.default_value\"\n)\n\n// Field numbers for google.protobuf.Field.\nconst (\n\tField_Kind_field_number         protoreflect.FieldNumber = 1\n\tField_Cardinality_field_number  protoreflect.FieldNumber = 2\n\tField_Number_field_number       protoreflect.FieldNumber = 3\n\tField_Name_field_number         protoreflect.FieldNumber = 4\n\tField_TypeUrl_field_number      protoreflect.FieldNumber = 6\n\tField_OneofIndex_field_number   protoreflect.FieldNumber = 7\n\tField_Packed_field_number       protoreflect.FieldNumber = 8\n\tField_Options_field_number      protoreflect.FieldNumber = 9\n\tField_JsonName_field_number     protoreflect.FieldNumber = 10\n\tField_DefaultValue_field_number protoreflect.FieldNumber = 11\n)\n\n// Full and short names for google.protobuf.Field.Kind.\nconst (\n\tField_Kind_enum_fullname = \"google.protobuf.Field.Kind\"\n\tField_Kind_enum_name     = \"Kind\"\n)\n\n// Enum values for google.protobuf.Field.Kind.\nconst (\n\tField_TYPE_UNKNOWN_enum_value  = 0\n\tField_TYPE_DOUBLE_enum_value   = 1\n\tField_TYPE_FLOAT_enum_value    = 2\n\tField_TYPE_INT64_enum_value    = 3\n\tField_TYPE_UINT64_enum_value   = 4\n\tField_TYPE_INT32_enum_value    = 5\n\tField_TYPE_FIXED64_enum_value  = 6\n\tField_TYPE_FIXED32_enum_value  = 7\n\tField_TYPE_BOOL_enum_value     = 8\n\tField_TYPE_STRING_enum_value   = 9\n\tField_TYPE_GROUP_enum_value    = 10\n\tField_TYPE_MESSAGE_enum_value  = 11\n\tField_TYPE_BYTES_enum_value    = 12\n\tField_TYPE_UINT32_enum_value   = 13\n\tField_TYPE_ENUM_enum_value     = 14\n\tField_TYPE_SFIXED32_enum_value = 15\n\tField_TYPE_SFIXED64_enum_value = 16\n\tField_TYPE_SINT32_enum_value   = 17\n\tField_TYPE_SINT64_enum_value   = 18\n)\n\n// Full and short names for google.protobuf.Field.Cardinality.\nconst (\n\tField_Cardinality_enum_fullname = \"google.protobuf.Field.Cardinality\"\n\tField_Cardinality_enum_name     = \"Cardinality\"\n)\n\n// Enum values for google.protobuf.Field.Cardinality.\nconst (\n\tField_CARDINALITY_UNKNOWN_enum_value  = 0\n\tField_CARDINALITY_OPTIONAL_enum_value = 1\n\tField_CARDINALITY_REQUIRED_enum_value = 2\n\tField_CARDINALITY_REPEATED_enum_value = 3\n)\n\n// Names for google.protobuf.Enum.\nconst (\n\tEnum_message_name     protoreflect.Name     = \"Enum\"\n\tEnum_message_fullname protoreflect.FullName = \"google.protobuf.Enum\"\n)\n\n// Field names for google.protobuf.Enum.\nconst (\n\tEnum_Name_field_name          protoreflect.Name = \"name\"\n\tEnum_Enumvalue_field_name     protoreflect.Name = \"enumvalue\"\n\tEnum_Options_field_name       protoreflect.Name = \"options\"\n\tEnum_SourceContext_field_name protoreflect.Name = \"source_context\"\n\tEnum_Syntax_field_name        protoreflect.Name = \"syntax\"\n\tEnum_Edition_field_name       protoreflect.Name = \"edition\"\n\n\tEnum_Name_field_fullname          protoreflect.FullName = \"google.protobuf.Enum.name\"\n\tEnum_Enumvalue_field_fullname     protoreflect.FullName = \"google.protobuf.Enum.enumvalue\"\n\tEnum_Options_field_fullname       protoreflect.FullName = \"google.protobuf.Enum.options\"\n\tEnum_SourceContext_field_fullname protoreflect.FullName = \"google.protobuf.Enum.source_context\"\n\tEnum_Syntax_field_fullname        protoreflect.FullName = \"google.protobuf.Enum.syntax\"\n\tEnum_Edition_field_fullname       protoreflect.FullName = \"google.protobuf.Enum.edition\"\n)\n\n// Field numbers for google.protobuf.Enum.\nconst (\n\tEnum_Name_field_number          protoreflect.FieldNumber = 1\n\tEnum_Enumvalue_field_number     protoreflect.FieldNumber = 2\n\tEnum_Options_field_number       protoreflect.FieldNumber = 3\n\tEnum_SourceContext_field_number protoreflect.FieldNumber = 4\n\tEnum_Syntax_field_number        protoreflect.FieldNumber = 5\n\tEnum_Edition_field_number       protoreflect.FieldNumber = 6\n)\n\n// Names for google.protobuf.EnumValue.\nconst (\n\tEnumValue_message_name     protoreflect.Name     = \"EnumValue\"\n\tEnumValue_message_fullname protoreflect.FullName = \"google.protobuf.EnumValue\"\n)\n\n// Field names for google.protobuf.EnumValue.\nconst (\n\tEnumValue_Name_field_name    protoreflect.Name = \"name\"\n\tEnumValue_Number_field_name  protoreflect.Name = \"number\"\n\tEnumValue_Options_field_name protoreflect.Name = \"options\"\n\n\tEnumValue_Name_field_fullname    protoreflect.FullName = \"google.protobuf.EnumValue.name\"\n\tEnumValue_Number_field_fullname  protoreflect.FullName = \"google.protobuf.EnumValue.number\"\n\tEnumValue_Options_field_fullname protoreflect.FullName = \"google.protobuf.EnumValue.options\"\n)\n\n// Field numbers for google.protobuf.EnumValue.\nconst (\n\tEnumValue_Name_field_number    protoreflect.FieldNumber = 1\n\tEnumValue_Number_field_number  protoreflect.FieldNumber = 2\n\tEnumValue_Options_field_number protoreflect.FieldNumber = 3\n)\n\n// Names for google.protobuf.Option.\nconst (\n\tOption_message_name     protoreflect.Name     = \"Option\"\n\tOption_message_fullname protoreflect.FullName = \"google.protobuf.Option\"\n)\n\n// Field names for google.protobuf.Option.\nconst (\n\tOption_Name_field_name  protoreflect.Name = \"name\"\n\tOption_Value_field_name protoreflect.Name = \"value\"\n\n\tOption_Name_field_fullname  protoreflect.FullName = \"google.protobuf.Option.name\"\n\tOption_Value_field_fullname protoreflect.FullName = \"google.protobuf.Option.value\"\n)\n\n// Field numbers for google.protobuf.Option.\nconst (\n\tOption_Name_field_number  protoreflect.FieldNumber = 1\n\tOption_Value_field_number protoreflect.FieldNumber = 2\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/wrappers.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 genid\n\nimport \"google.golang.org/protobuf/reflect/protoreflect\"\n\n// Generic field name and number for messages in wrappers.proto.\nconst (\n\tWrapperValue_Value_field_name   protoreflect.Name        = \"value\"\n\tWrapperValue_Value_field_number protoreflect.FieldNumber = 1\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.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// Code generated by generate-protos. DO NOT EDIT.\n\npackage genid\n\nimport (\n\tprotoreflect \"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nconst File_google_protobuf_wrappers_proto = \"google/protobuf/wrappers.proto\"\n\n// Names for google.protobuf.DoubleValue.\nconst (\n\tDoubleValue_message_name     protoreflect.Name     = \"DoubleValue\"\n\tDoubleValue_message_fullname protoreflect.FullName = \"google.protobuf.DoubleValue\"\n)\n\n// Field names for google.protobuf.DoubleValue.\nconst (\n\tDoubleValue_Value_field_name protoreflect.Name = \"value\"\n\n\tDoubleValue_Value_field_fullname protoreflect.FullName = \"google.protobuf.DoubleValue.value\"\n)\n\n// Field numbers for google.protobuf.DoubleValue.\nconst (\n\tDoubleValue_Value_field_number protoreflect.FieldNumber = 1\n)\n\n// Names for google.protobuf.FloatValue.\nconst (\n\tFloatValue_message_name     protoreflect.Name     = \"FloatValue\"\n\tFloatValue_message_fullname protoreflect.FullName = \"google.protobuf.FloatValue\"\n)\n\n// Field names for google.protobuf.FloatValue.\nconst (\n\tFloatValue_Value_field_name protoreflect.Name = \"value\"\n\n\tFloatValue_Value_field_fullname protoreflect.FullName = \"google.protobuf.FloatValue.value\"\n)\n\n// Field numbers for google.protobuf.FloatValue.\nconst (\n\tFloatValue_Value_field_number protoreflect.FieldNumber = 1\n)\n\n// Names for google.protobuf.Int64Value.\nconst (\n\tInt64Value_message_name     protoreflect.Name     = \"Int64Value\"\n\tInt64Value_message_fullname protoreflect.FullName = \"google.protobuf.Int64Value\"\n)\n\n// Field names for google.protobuf.Int64Value.\nconst (\n\tInt64Value_Value_field_name protoreflect.Name = \"value\"\n\n\tInt64Value_Value_field_fullname protoreflect.FullName = \"google.protobuf.Int64Value.value\"\n)\n\n// Field numbers for google.protobuf.Int64Value.\nconst (\n\tInt64Value_Value_field_number protoreflect.FieldNumber = 1\n)\n\n// Names for google.protobuf.UInt64Value.\nconst (\n\tUInt64Value_message_name     protoreflect.Name     = \"UInt64Value\"\n\tUInt64Value_message_fullname protoreflect.FullName = \"google.protobuf.UInt64Value\"\n)\n\n// Field names for google.protobuf.UInt64Value.\nconst (\n\tUInt64Value_Value_field_name protoreflect.Name = \"value\"\n\n\tUInt64Value_Value_field_fullname protoreflect.FullName = \"google.protobuf.UInt64Value.value\"\n)\n\n// Field numbers for google.protobuf.UInt64Value.\nconst (\n\tUInt64Value_Value_field_number protoreflect.FieldNumber = 1\n)\n\n// Names for google.protobuf.Int32Value.\nconst (\n\tInt32Value_message_name     protoreflect.Name     = \"Int32Value\"\n\tInt32Value_message_fullname protoreflect.FullName = \"google.protobuf.Int32Value\"\n)\n\n// Field names for google.protobuf.Int32Value.\nconst (\n\tInt32Value_Value_field_name protoreflect.Name = \"value\"\n\n\tInt32Value_Value_field_fullname protoreflect.FullName = \"google.protobuf.Int32Value.value\"\n)\n\n// Field numbers for google.protobuf.Int32Value.\nconst (\n\tInt32Value_Value_field_number protoreflect.FieldNumber = 1\n)\n\n// Names for google.protobuf.UInt32Value.\nconst (\n\tUInt32Value_message_name     protoreflect.Name     = \"UInt32Value\"\n\tUInt32Value_message_fullname protoreflect.FullName = \"google.protobuf.UInt32Value\"\n)\n\n// Field names for google.protobuf.UInt32Value.\nconst (\n\tUInt32Value_Value_field_name protoreflect.Name = \"value\"\n\n\tUInt32Value_Value_field_fullname protoreflect.FullName = \"google.protobuf.UInt32Value.value\"\n)\n\n// Field numbers for google.protobuf.UInt32Value.\nconst (\n\tUInt32Value_Value_field_number protoreflect.FieldNumber = 1\n)\n\n// Names for google.protobuf.BoolValue.\nconst (\n\tBoolValue_message_name     protoreflect.Name     = \"BoolValue\"\n\tBoolValue_message_fullname protoreflect.FullName = \"google.protobuf.BoolValue\"\n)\n\n// Field names for google.protobuf.BoolValue.\nconst (\n\tBoolValue_Value_field_name protoreflect.Name = \"value\"\n\n\tBoolValue_Value_field_fullname protoreflect.FullName = \"google.protobuf.BoolValue.value\"\n)\n\n// Field numbers for google.protobuf.BoolValue.\nconst (\n\tBoolValue_Value_field_number protoreflect.FieldNumber = 1\n)\n\n// Names for google.protobuf.StringValue.\nconst (\n\tStringValue_message_name     protoreflect.Name     = \"StringValue\"\n\tStringValue_message_fullname protoreflect.FullName = \"google.protobuf.StringValue\"\n)\n\n// Field names for google.protobuf.StringValue.\nconst (\n\tStringValue_Value_field_name protoreflect.Name = \"value\"\n\n\tStringValue_Value_field_fullname protoreflect.FullName = \"google.protobuf.StringValue.value\"\n)\n\n// Field numbers for google.protobuf.StringValue.\nconst (\n\tStringValue_Value_field_number protoreflect.FieldNumber = 1\n)\n\n// Names for google.protobuf.BytesValue.\nconst (\n\tBytesValue_message_name     protoreflect.Name     = \"BytesValue\"\n\tBytesValue_message_fullname protoreflect.FullName = \"google.protobuf.BytesValue\"\n)\n\n// Field names for google.protobuf.BytesValue.\nconst (\n\tBytesValue_Value_field_name protoreflect.Name = \"value\"\n\n\tBytesValue_Value_field_fullname protoreflect.FullName = \"google.protobuf.BytesValue.value\"\n)\n\n// Field numbers for google.protobuf.BytesValue.\nconst (\n\tBytesValue_Value_field_number protoreflect.FieldNumber = 1\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/api_export.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 impl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\n\t\"google.golang.org/protobuf/encoding/prototext\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\n// Export is a zero-length named type that exists only to export a set of\n// functions that we do not want to appear in godoc.\ntype Export struct{}\n\n// NewError formats a string according to the format specifier and arguments and\n// returns an error that has a \"proto\" prefix.\nfunc (Export) NewError(f string, x ...any) error {\n\treturn errors.New(f, x...)\n}\n\n// enum is any enum type generated by protoc-gen-go\n// and must be a named int32 type.\ntype enum = any\n\n// EnumOf returns the protoreflect.Enum interface over e.\n// It returns nil if e is nil.\nfunc (Export) EnumOf(e enum) protoreflect.Enum {\n\tswitch e := e.(type) {\n\tcase nil:\n\t\treturn nil\n\tcase protoreflect.Enum:\n\t\treturn e\n\tdefault:\n\t\treturn legacyWrapEnum(reflect.ValueOf(e))\n\t}\n}\n\n// EnumDescriptorOf returns the protoreflect.EnumDescriptor for e.\n// It returns nil if e is nil.\nfunc (Export) EnumDescriptorOf(e enum) protoreflect.EnumDescriptor {\n\tswitch e := e.(type) {\n\tcase nil:\n\t\treturn nil\n\tcase protoreflect.Enum:\n\t\treturn e.Descriptor()\n\tdefault:\n\t\treturn LegacyLoadEnumDesc(reflect.TypeOf(e))\n\t}\n}\n\n// EnumTypeOf returns the protoreflect.EnumType for e.\n// It returns nil if e is nil.\nfunc (Export) EnumTypeOf(e enum) protoreflect.EnumType {\n\tswitch e := e.(type) {\n\tcase nil:\n\t\treturn nil\n\tcase protoreflect.Enum:\n\t\treturn e.Type()\n\tdefault:\n\t\treturn legacyLoadEnumType(reflect.TypeOf(e))\n\t}\n}\n\n// EnumStringOf returns the enum value as a string, either as the name if\n// the number is resolvable, or the number formatted as a string.\nfunc (Export) EnumStringOf(ed protoreflect.EnumDescriptor, n protoreflect.EnumNumber) string {\n\tev := ed.Values().ByNumber(n)\n\tif ev != nil {\n\t\treturn string(ev.Name())\n\t}\n\treturn strconv.Itoa(int(n))\n}\n\n// message is any message type generated by protoc-gen-go\n// and must be a pointer to a named struct type.\ntype message = any\n\n// legacyMessageWrapper wraps a v2 message as a v1 message.\ntype legacyMessageWrapper struct{ m protoreflect.ProtoMessage }\n\nfunc (m legacyMessageWrapper) Reset()         { proto.Reset(m.m) }\nfunc (m legacyMessageWrapper) String() string { return Export{}.MessageStringOf(m.m) }\nfunc (m legacyMessageWrapper) ProtoMessage()  {}\n\n// ProtoMessageV1Of converts either a v1 or v2 message to a v1 message.\n// It returns nil if m is nil.\nfunc (Export) ProtoMessageV1Of(m message) protoiface.MessageV1 {\n\tswitch mv := m.(type) {\n\tcase nil:\n\t\treturn nil\n\tcase protoiface.MessageV1:\n\t\treturn mv\n\tcase unwrapper:\n\t\treturn Export{}.ProtoMessageV1Of(mv.protoUnwrap())\n\tcase protoreflect.ProtoMessage:\n\t\treturn legacyMessageWrapper{mv}\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"message %T is neither a v1 or v2 Message\", m))\n\t}\n}\n\nfunc (Export) protoMessageV2Of(m message) protoreflect.ProtoMessage {\n\tswitch mv := m.(type) {\n\tcase nil:\n\t\treturn nil\n\tcase protoreflect.ProtoMessage:\n\t\treturn mv\n\tcase legacyMessageWrapper:\n\t\treturn mv.m\n\tcase protoiface.MessageV1:\n\t\treturn nil\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"message %T is neither a v1 or v2 Message\", m))\n\t}\n}\n\n// ProtoMessageV2Of converts either a v1 or v2 message to a v2 message.\n// It returns nil if m is nil.\nfunc (Export) ProtoMessageV2Of(m message) protoreflect.ProtoMessage {\n\tif m == nil {\n\t\treturn nil\n\t}\n\tif mv := (Export{}).protoMessageV2Of(m); mv != nil {\n\t\treturn mv\n\t}\n\treturn legacyWrapMessage(reflect.ValueOf(m)).Interface()\n}\n\n// MessageOf returns the protoreflect.Message interface over m.\n// It returns nil if m is nil.\nfunc (Export) MessageOf(m message) protoreflect.Message {\n\tif m == nil {\n\t\treturn nil\n\t}\n\tif mv := (Export{}).protoMessageV2Of(m); mv != nil {\n\t\treturn mv.ProtoReflect()\n\t}\n\treturn legacyWrapMessage(reflect.ValueOf(m))\n}\n\n// MessageDescriptorOf returns the protoreflect.MessageDescriptor for m.\n// It returns nil if m is nil.\nfunc (Export) MessageDescriptorOf(m message) protoreflect.MessageDescriptor {\n\tif m == nil {\n\t\treturn nil\n\t}\n\tif mv := (Export{}).protoMessageV2Of(m); mv != nil {\n\t\treturn mv.ProtoReflect().Descriptor()\n\t}\n\treturn LegacyLoadMessageDesc(reflect.TypeOf(m))\n}\n\n// MessageTypeOf returns the protoreflect.MessageType for m.\n// It returns nil if m is nil.\nfunc (Export) MessageTypeOf(m message) protoreflect.MessageType {\n\tif m == nil {\n\t\treturn nil\n\t}\n\tif mv := (Export{}).protoMessageV2Of(m); mv != nil {\n\t\treturn mv.ProtoReflect().Type()\n\t}\n\treturn legacyLoadMessageType(reflect.TypeOf(m), \"\")\n}\n\n// MessageStringOf returns the message value as a string,\n// which is the message serialized in the protobuf text format.\nfunc (Export) MessageStringOf(m protoreflect.ProtoMessage) string {\n\treturn prototext.MarshalOptions{Multiline: false}.Format(m)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/api_export_opaque.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 impl\n\nimport (\n\t\"strconv\"\n\t\"sync/atomic\"\n\t\"unsafe\"\n\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nfunc (Export) UnmarshalField(msg any, fieldNum int32) {\n\tUnmarshalField(msg.(protoreflect.ProtoMessage).ProtoReflect(), protoreflect.FieldNumber(fieldNum))\n}\n\n// Present checks the presence set for a certain field number (zero\n// based, ordered by appearance in original proto file). part is\n// a pointer to the correct element in the bitmask array, num is the\n// field number unaltered.  Example (field number 70 -> part =\n// &m.XXX_presence[1], num = 70)\nfunc (Export) Present(part *uint32, num uint32) bool {\n\t// This hook will read an unprotected shadow presence set if\n\t// we're unning under the race detector\n\traceDetectHookPresent(part, num)\n\treturn atomic.LoadUint32(part)&(1<<(num%32)) > 0\n}\n\n// SetPresent adds a field to the presence set. part is a pointer to\n// the relevant element in the array and num is the field number\n// unaltered.  size is the number of fields in the protocol\n// buffer.\nfunc (Export) SetPresent(part *uint32, num uint32, size uint32) {\n\t// This hook will mutate an unprotected shadow presence set if\n\t// we're running under the race detector\n\traceDetectHookSetPresent(part, num, presenceSize(size))\n\tfor {\n\t\told := atomic.LoadUint32(part)\n\t\tif atomic.CompareAndSwapUint32(part, old, old|(1<<(num%32))) {\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// SetPresentNonAtomic is like SetPresent, but operates non-atomically.\n// It is meant for use by builder methods, where the message is known not\n// to be accessible yet by other goroutines.\nfunc (Export) SetPresentNonAtomic(part *uint32, num uint32, size uint32) {\n\t// This hook will mutate an unprotected shadow presence set if\n\t// we're running under the race detector\n\traceDetectHookSetPresent(part, num, presenceSize(size))\n\t*part |= 1 << (num % 32)\n}\n\n// ClearPresence removes a field from the presence set. part is a\n// pointer to the relevant element in the presence array and num is\n// the field number unaltered.\nfunc (Export) ClearPresent(part *uint32, num uint32) {\n\t// This hook will mutate an unprotected shadow presence set if\n\t// we're running under the race detector\n\traceDetectHookClearPresent(part, num)\n\tfor {\n\t\told := atomic.LoadUint32(part)\n\t\tif atomic.CompareAndSwapUint32(part, old, old&^(1<<(num%32))) {\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// interfaceToPointer takes a pointer to an empty interface whose value is a\n// pointer type, and converts it into a \"pointer\" that points to the same\n// target\nfunc interfaceToPointer(i *any) pointer {\n\treturn pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}\n}\n\nfunc (p pointer) atomicGetPointer() pointer {\n\treturn pointer{p: atomic.LoadPointer((*unsafe.Pointer)(p.p))}\n}\n\nfunc (p pointer) atomicSetPointer(q pointer) {\n\tatomic.StorePointer((*unsafe.Pointer)(p.p), q.p)\n}\n\n// AtomicCheckPointerIsNil takes an interface (which is a pointer to a\n// pointer) and returns true if the pointed-to pointer is nil (using an\n// atomic load).  This function is inlineable and, on x86, just becomes a\n// simple load and compare.\nfunc (Export) AtomicCheckPointerIsNil(ptr any) bool {\n\treturn interfaceToPointer(&ptr).atomicGetPointer().IsNil()\n}\n\n// AtomicSetPointer takes two interfaces (first is a pointer to a pointer,\n// second is a pointer) and atomically sets the second pointer into location\n// referenced by first pointer.  Unfortunately, atomicSetPointer() does not inline\n// (even on x86), so this does not become a simple store on x86.\nfunc (Export) AtomicSetPointer(dstPtr, valPtr any) {\n\tinterfaceToPointer(&dstPtr).atomicSetPointer(interfaceToPointer(&valPtr))\n}\n\n// AtomicLoadPointer loads the pointer at the location pointed at by src,\n// and stores that pointer value into the location pointed at by dst.\nfunc (Export) AtomicLoadPointer(ptr Pointer, dst Pointer) {\n\t*(*unsafe.Pointer)(unsafe.Pointer(dst)) = atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(ptr)))\n}\n\n// AtomicInitializePointer makes ptr and dst point to the same value.\n//\n// If *ptr is a nil pointer, it sets *ptr = *dst.\n//\n// If *ptr is a non-nil pointer, it sets *dst = *ptr.\nfunc (Export) AtomicInitializePointer(ptr Pointer, dst Pointer) {\n\tif !atomic.CompareAndSwapPointer((*unsafe.Pointer)(ptr), unsafe.Pointer(nil), *(*unsafe.Pointer)(dst)) {\n\t\t*(*unsafe.Pointer)(unsafe.Pointer(dst)) = atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(ptr)))\n\t}\n}\n\n// MessageFieldStringOf returns the field formatted as a string,\n// either as the field name if resolvable otherwise as a decimal string.\nfunc (Export) MessageFieldStringOf(md protoreflect.MessageDescriptor, n protoreflect.FieldNumber) string {\n\tfd := md.Fields().ByNumber(n)\n\tif fd != nil {\n\t\treturn string(fd.Name())\n\t}\n\treturn strconv.Itoa(int(n))\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/bitmap.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 !race\n\npackage impl\n\n// There is no additional data as we're not running under race detector.\ntype RaceDetectHookData struct{}\n\n// Empty stubs for when not using the race detector. Calls to these from index.go should be optimized away.\nfunc (presence) raceDetectHookPresent(num uint32)                       {}\nfunc (presence) raceDetectHookSetPresent(num uint32, size presenceSize) {}\nfunc (presence) raceDetectHookClearPresent(num uint32)                  {}\nfunc (presence) raceDetectHookAllocAndCopy(src presence)                {}\n\n// raceDetectHookPresent is called by the generated file interface\n// (*proto.internalFuncs) Present to optionally read an unprotected\n// shadow bitmap when race detection is enabled. In regular code it is\n// a noop.\nfunc raceDetectHookPresent(field *uint32, num uint32) {}\n\n// raceDetectHookSetPresent is called by the generated file interface\n// (*proto.internalFuncs) SetPresent to optionally write an unprotected\n// shadow bitmap when race detection is enabled. In regular code it is\n// a noop.\nfunc raceDetectHookSetPresent(field *uint32, num uint32, size presenceSize) {}\n\n// raceDetectHookClearPresent is called by the generated file interface\n// (*proto.internalFuncs) ClearPresent to optionally write an unprotected\n// shadow bitmap when race detection is enabled. In regular code it is\n// a noop.\nfunc raceDetectHookClearPresent(field *uint32, num uint32) {}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/bitmap_race.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 race\n\npackage impl\n\n// When running under race detector, we add a presence map of bytes, that we can access\n// in the hook functions so that we trigger the race detection whenever we have concurrent\n// Read-Writes or Write-Writes. The race detector does not otherwise detect invalid concurrent\n// access to lazy fields as all updates of bitmaps and pointers are done using atomic operations.\ntype RaceDetectHookData struct {\n\tshadowPresence *[]byte\n}\n\n// Hooks for presence bitmap operations that allocate, read and write the shadowPresence\n// using non-atomic operations.\nfunc (data *RaceDetectHookData) raceDetectHookAlloc(size presenceSize) {\n\tsp := make([]byte, size)\n\tatomicStoreShadowPresence(&data.shadowPresence, &sp)\n}\n\nfunc (p presence) raceDetectHookPresent(num uint32) {\n\tdata := p.toRaceDetectData()\n\tif data == nil {\n\t\treturn\n\t}\n\tsp := atomicLoadShadowPresence(&data.shadowPresence)\n\tif sp != nil {\n\t\t_ = (*sp)[num]\n\t}\n}\n\nfunc (p presence) raceDetectHookSetPresent(num uint32, size presenceSize) {\n\tdata := p.toRaceDetectData()\n\tif data == nil {\n\t\treturn\n\t}\n\tsp := atomicLoadShadowPresence(&data.shadowPresence)\n\tif sp == nil {\n\t\tdata.raceDetectHookAlloc(size)\n\t\tsp = atomicLoadShadowPresence(&data.shadowPresence)\n\t}\n\t(*sp)[num] = 1\n}\n\nfunc (p presence) raceDetectHookClearPresent(num uint32) {\n\tdata := p.toRaceDetectData()\n\tif data == nil {\n\t\treturn\n\t}\n\tsp := atomicLoadShadowPresence(&data.shadowPresence)\n\tif sp != nil {\n\t\t(*sp)[num] = 0\n\n\t}\n}\n\n// raceDetectHookAllocAndCopy allocates a new shadowPresence slice at lazy and copies\n// shadowPresence bytes from src to lazy.\nfunc (p presence) raceDetectHookAllocAndCopy(q presence) {\n\tsData := q.toRaceDetectData()\n\tdData := p.toRaceDetectData()\n\tif sData == nil {\n\t\treturn\n\t}\n\tsrcSp := atomicLoadShadowPresence(&sData.shadowPresence)\n\tif srcSp == nil {\n\t\tatomicStoreShadowPresence(&dData.shadowPresence, nil)\n\t\treturn\n\t}\n\tn := len(*srcSp)\n\tdSlice := make([]byte, n)\n\tatomicStoreShadowPresence(&dData.shadowPresence, &dSlice)\n\tfor i := 0; i < n; i++ {\n\t\tdSlice[i] = (*srcSp)[i]\n\t}\n}\n\n// raceDetectHookPresent is called by the generated file interface\n// (*proto.internalFuncs) Present to optionally read an unprotected\n// shadow bitmap when race detection is enabled. In regular code it is\n// a noop.\nfunc raceDetectHookPresent(field *uint32, num uint32) {\n\tdata := findPointerToRaceDetectData(field, num)\n\tif data == nil {\n\t\treturn\n\t}\n\tsp := atomicLoadShadowPresence(&data.shadowPresence)\n\tif sp != nil {\n\t\t_ = (*sp)[num]\n\t}\n}\n\n// raceDetectHookSetPresent is called by the generated file interface\n// (*proto.internalFuncs) SetPresent to optionally write an unprotected\n// shadow bitmap when race detection is enabled. In regular code it is\n// a noop.\nfunc raceDetectHookSetPresent(field *uint32, num uint32, size presenceSize) {\n\tdata := findPointerToRaceDetectData(field, num)\n\tif data == nil {\n\t\treturn\n\t}\n\tsp := atomicLoadShadowPresence(&data.shadowPresence)\n\tif sp == nil {\n\t\tdata.raceDetectHookAlloc(size)\n\t\tsp = atomicLoadShadowPresence(&data.shadowPresence)\n\t}\n\t(*sp)[num] = 1\n}\n\n// raceDetectHookClearPresent is called by the generated file interface\n// (*proto.internalFuncs) ClearPresent to optionally write an unprotected\n// shadow bitmap when race detection is enabled. In regular code it is\n// a noop.\nfunc raceDetectHookClearPresent(field *uint32, num uint32) {\n\tdata := findPointerToRaceDetectData(field, num)\n\tif data == nil {\n\t\treturn\n\t}\n\tsp := atomicLoadShadowPresence(&data.shadowPresence)\n\tif sp != nil {\n\t\t(*sp)[num] = 0\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/checkinit.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 impl\n\nimport (\n\t\"sync\"\n\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\nfunc (mi *MessageInfo) checkInitialized(in protoiface.CheckInitializedInput) (protoiface.CheckInitializedOutput, error) {\n\tvar p pointer\n\tif ms, ok := in.Message.(*messageState); ok {\n\t\tp = ms.pointer()\n\t} else {\n\t\tp = in.Message.(*messageReflectWrapper).pointer()\n\t}\n\treturn protoiface.CheckInitializedOutput{}, mi.checkInitializedPointer(p)\n}\n\nfunc (mi *MessageInfo) checkInitializedPointer(p pointer) error {\n\tmi.init()\n\tif !mi.needsInitCheck {\n\t\treturn nil\n\t}\n\tif p.IsNil() {\n\t\tfor _, f := range mi.orderedCoderFields {\n\t\t\tif f.isRequired {\n\t\t\t\treturn errors.RequiredNotSet(string(mi.Desc.Fields().ByNumber(f.num).FullName()))\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tvar presence presence\n\tif mi.presenceOffset.IsValid() {\n\t\tpresence = p.Apply(mi.presenceOffset).PresenceInfo()\n\t}\n\n\tif mi.extensionOffset.IsValid() {\n\t\te := p.Apply(mi.extensionOffset).Extensions()\n\t\tif err := mi.isInitExtensions(e); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tfor _, f := range mi.orderedCoderFields {\n\t\tif !f.isRequired && f.funcs.isInit == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tif f.presenceIndex != noPresence {\n\t\t\tif !presence.Present(f.presenceIndex) {\n\t\t\t\tif f.isRequired {\n\t\t\t\t\treturn errors.RequiredNotSet(string(mi.Desc.Fields().ByNumber(f.num).FullName()))\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif f.funcs.isInit != nil {\n\t\t\t\tf.mi.init()\n\t\t\t\tif f.mi.needsInitCheck {\n\t\t\t\t\tif f.isLazy && p.Apply(f.offset).AtomicGetPointer().IsNil() {\n\t\t\t\t\t\tlazy := *p.Apply(mi.lazyOffset).LazyInfoPtr()\n\t\t\t\t\t\tif !lazy.AllowedPartial() {\n\t\t\t\t\t\t\t// Nothing to see here, it was checked on unmarshal\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmi.lazyUnmarshal(p, f.num)\n\t\t\t\t\t}\n\t\t\t\t\tif err := f.funcs.isInit(p.Apply(f.offset), f); 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\tcontinue\n\t\t}\n\n\t\tfptr := p.Apply(f.offset)\n\t\tif f.isPointer && fptr.Elem().IsNil() {\n\t\t\tif f.isRequired {\n\t\t\t\treturn errors.RequiredNotSet(string(mi.Desc.Fields().ByNumber(f.num).FullName()))\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif f.funcs.isInit == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif err := f.funcs.isInit(fptr, f); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (mi *MessageInfo) isInitExtensions(ext *map[int32]ExtensionField) error {\n\tif ext == nil {\n\t\treturn nil\n\t}\n\tfor _, x := range *ext {\n\t\tei := getExtensionFieldInfo(x.Type())\n\t\tif ei.funcs.isInit == nil || x.isUnexpandedLazy() {\n\t\t\tcontinue\n\t\t}\n\t\tv := x.Value()\n\t\tif !v.IsValid() {\n\t\t\tcontinue\n\t\t}\n\t\tif err := ei.funcs.isInit(v); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nvar (\n\tneedsInitCheckMu  sync.Mutex\n\tneedsInitCheckMap sync.Map\n)\n\n// needsInitCheck reports whether a message needs to be checked for partial initialization.\n//\n// It returns true if the message transitively includes any required or extension fields.\nfunc needsInitCheck(md protoreflect.MessageDescriptor) bool {\n\tif v, ok := needsInitCheckMap.Load(md); ok {\n\t\tif has, ok := v.(bool); ok {\n\t\t\treturn has\n\t\t}\n\t}\n\tneedsInitCheckMu.Lock()\n\tdefer needsInitCheckMu.Unlock()\n\treturn needsInitCheckLocked(md)\n}\n\nfunc needsInitCheckLocked(md protoreflect.MessageDescriptor) (has bool) {\n\tif v, ok := needsInitCheckMap.Load(md); ok {\n\t\t// If has is true, we've previously determined that this message\n\t\t// needs init checks.\n\t\t//\n\t\t// If has is false, we've previously determined that it can never\n\t\t// be uninitialized.\n\t\t//\n\t\t// If has is not a bool, we've just encountered a cycle in the\n\t\t// message graph. In this case, it is safe to return false: If\n\t\t// the message does have required fields, we'll detect them later\n\t\t// in the graph traversal.\n\t\thas, ok := v.(bool)\n\t\treturn ok && has\n\t}\n\tneedsInitCheckMap.Store(md, struct{}{}) // avoid cycles while descending into this message\n\tdefer func() {\n\t\tneedsInitCheckMap.Store(md, has)\n\t}()\n\tif md.RequiredNumbers().Len() > 0 {\n\t\treturn true\n\t}\n\tif md.ExtensionRanges().Len() > 0 {\n\t\treturn true\n\t}\n\tfor i := 0; i < md.Fields().Len(); i++ {\n\t\tfd := md.Fields().Get(i)\n\t\t// Map keys are never messages, so just consider the map value.\n\t\tif fd.IsMap() {\n\t\t\tfd = fd.MapValue()\n\t\t}\n\t\tfmd := fd.Message()\n\t\tif fmd != nil && needsInitCheckLocked(fmd) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/codec_extension.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 impl\n\nimport (\n\t\"sync\"\n\t\"sync/atomic\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\ntype extensionFieldInfo struct {\n\twiretag             uint64\n\ttagsize             int\n\tunmarshalNeedsValue bool\n\tfuncs               valueCoderFuncs\n\tvalidation          validationInfo\n}\n\nfunc getExtensionFieldInfo(xt protoreflect.ExtensionType) *extensionFieldInfo {\n\tif xi, ok := xt.(*ExtensionInfo); ok {\n\t\txi.lazyInit()\n\t\treturn xi.info\n\t}\n\t// Ideally we'd cache the resulting *extensionFieldInfo so we don't have to\n\t// recompute this metadata repeatedly. But without support for something like\n\t// weak references, such a cache would pin temporary values (like dynamic\n\t// extension types, constructed for the duration of a user request) to the\n\t// heap forever, causing memory usage of the cache to grow unbounded.\n\t// See discussion in https://github.com/golang/protobuf/issues/1521.\n\treturn makeExtensionFieldInfo(xt.TypeDescriptor())\n}\n\nfunc makeExtensionFieldInfo(xd protoreflect.ExtensionDescriptor) *extensionFieldInfo {\n\tvar wiretag uint64\n\tif !xd.IsPacked() {\n\t\twiretag = protowire.EncodeTag(xd.Number(), wireTypes[xd.Kind()])\n\t} else {\n\t\twiretag = protowire.EncodeTag(xd.Number(), protowire.BytesType)\n\t}\n\te := &extensionFieldInfo{\n\t\twiretag: wiretag,\n\t\ttagsize: protowire.SizeVarint(wiretag),\n\t\tfuncs:   encoderFuncsForValue(xd),\n\t}\n\t// Does the unmarshal function need a value passed to it?\n\t// This is true for composite types, where we pass in a message, list, or map to fill in,\n\t// and for enums, where we pass in a prototype value to specify the concrete enum type.\n\tswitch xd.Kind() {\n\tcase protoreflect.MessageKind, protoreflect.GroupKind, protoreflect.EnumKind:\n\t\te.unmarshalNeedsValue = true\n\tdefault:\n\t\tif xd.Cardinality() == protoreflect.Repeated {\n\t\t\te.unmarshalNeedsValue = true\n\t\t}\n\t}\n\treturn e\n}\n\ntype lazyExtensionValue struct {\n\tatomicOnce uint32 // atomically set if value is valid\n\tmu         sync.Mutex\n\txi         *extensionFieldInfo\n\tvalue      protoreflect.Value\n\tb          []byte\n}\n\ntype ExtensionField struct {\n\ttyp protoreflect.ExtensionType\n\n\t// value is either the value of GetValue,\n\t// or a *lazyExtensionValue that then returns the value of GetValue.\n\tvalue protoreflect.Value\n\tlazy  *lazyExtensionValue\n}\n\nfunc (f *ExtensionField) appendLazyBytes(xt protoreflect.ExtensionType, xi *extensionFieldInfo, num protowire.Number, wtyp protowire.Type, b []byte) {\n\tif f.lazy == nil {\n\t\tf.lazy = &lazyExtensionValue{xi: xi}\n\t}\n\tf.typ = xt\n\tf.lazy.xi = xi\n\tf.lazy.b = protowire.AppendTag(f.lazy.b, num, wtyp)\n\tf.lazy.b = append(f.lazy.b, b...)\n}\n\nfunc (f *ExtensionField) canLazy(xt protoreflect.ExtensionType) bool {\n\tif f.typ == nil {\n\t\treturn true\n\t}\n\tif f.typ == xt && f.lazy != nil && atomic.LoadUint32(&f.lazy.atomicOnce) == 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// isUnexpandedLazy returns true if the ExensionField is lazy and not\n// yet expanded, which means it's present and already checked for\n// initialized required fields.\nfunc (f *ExtensionField) isUnexpandedLazy() bool {\n\treturn f.lazy != nil && atomic.LoadUint32(&f.lazy.atomicOnce) == 0\n}\n\n// lazyBuffer retrieves the buffer for a lazy extension if it's not yet expanded.\n//\n// The returned buffer has to be kept over whatever operation we're planning,\n// as re-retrieving it will fail after the message is lazily decoded.\nfunc (f *ExtensionField) lazyBuffer() []byte {\n\t// This function might be in the critical path, so check the atomic without\n\t// taking a look first, then only take the lock if needed.\n\tif !f.isUnexpandedLazy() {\n\t\treturn nil\n\t}\n\tf.lazy.mu.Lock()\n\tdefer f.lazy.mu.Unlock()\n\treturn f.lazy.b\n}\n\nfunc (f *ExtensionField) lazyInit() {\n\tf.lazy.mu.Lock()\n\tdefer f.lazy.mu.Unlock()\n\tif atomic.LoadUint32(&f.lazy.atomicOnce) == 1 {\n\t\treturn\n\t}\n\tif f.lazy.xi != nil {\n\t\tb := f.lazy.b\n\t\tval := f.typ.New()\n\t\tfor len(b) > 0 {\n\t\t\tvar tag uint64\n\t\t\tif b[0] < 0x80 {\n\t\t\t\ttag = uint64(b[0])\n\t\t\t\tb = b[1:]\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\ttag = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tb = b[2:]\n\t\t\t} else {\n\t\t\t\tvar n int\n\t\t\t\ttag, n = protowire.ConsumeVarint(b)\n\t\t\t\tif n < 0 {\n\t\t\t\t\tpanic(errors.New(\"bad tag in lazy extension decoding\"))\n\t\t\t\t}\n\t\t\t\tb = b[n:]\n\t\t\t}\n\t\t\tnum := protowire.Number(tag >> 3)\n\t\t\twtyp := protowire.Type(tag & 7)\n\t\t\tvar out unmarshalOutput\n\t\t\tvar err error\n\t\t\tval, out, err = f.lazy.xi.funcs.unmarshal(b, val, num, wtyp, lazyUnmarshalOptions)\n\t\t\tif err != nil {\n\t\t\t\tpanic(errors.New(\"decode failure in lazy extension decoding: %v\", err))\n\t\t\t}\n\t\t\tb = b[out.n:]\n\t\t}\n\t\tf.lazy.value = val\n\t} else {\n\t\tpanic(\"No support for lazy fns for ExtensionField\")\n\t}\n\tf.lazy.xi = nil\n\tf.lazy.b = nil\n\tatomic.StoreUint32(&f.lazy.atomicOnce, 1)\n}\n\n// Set sets the type and value of the extension field.\n// This must not be called concurrently.\nfunc (f *ExtensionField) Set(t protoreflect.ExtensionType, v protoreflect.Value) {\n\tf.typ = t\n\tf.value = v\n\tf.lazy = nil\n}\n\n// Value returns the value of the extension field.\n// This may be called concurrently.\nfunc (f *ExtensionField) Value() protoreflect.Value {\n\tif f.lazy != nil {\n\t\tif atomic.LoadUint32(&f.lazy.atomicOnce) == 0 {\n\t\t\tf.lazyInit()\n\t\t}\n\t\treturn f.lazy.value\n\t}\n\treturn f.value\n}\n\n// Type returns the type of the extension field.\n// This may be called concurrently.\nfunc (f ExtensionField) Type() protoreflect.ExtensionType {\n\treturn f.typ\n}\n\n// IsSet returns whether the extension field is set.\n// This may be called concurrently.\nfunc (f ExtensionField) IsSet() bool {\n\treturn f.typ != nil\n}\n\n// IsLazy reports whether a field is lazily encoded.\n// It is exported for testing.\nfunc IsLazy(m protoreflect.Message, fd protoreflect.FieldDescriptor) bool {\n\tvar mi *MessageInfo\n\tvar p pointer\n\tswitch m := m.(type) {\n\tcase *messageState:\n\t\tmi = m.messageInfo()\n\t\tp = m.pointer()\n\tcase *messageReflectWrapper:\n\t\tmi = m.messageInfo()\n\t\tp = m.pointer()\n\tdefault:\n\t\treturn false\n\t}\n\txd, ok := fd.(protoreflect.ExtensionTypeDescriptor)\n\tif !ok {\n\t\treturn false\n\t}\n\txt := xd.Type()\n\text := mi.extensionMap(p)\n\tif ext == nil {\n\t\treturn false\n\t}\n\tf, ok := (*ext)[int32(fd.Number())]\n\tif !ok {\n\t\treturn false\n\t}\n\treturn f.typ == xt && f.lazy != nil && atomic.LoadUint32(&f.lazy.atomicOnce) == 0\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/codec_field.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 impl\n\nimport (\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\ntype errInvalidUTF8 struct{}\n\nfunc (errInvalidUTF8) Error() string     { return \"string field contains invalid UTF-8\" }\nfunc (errInvalidUTF8) InvalidUTF8() bool { return true }\nfunc (errInvalidUTF8) Unwrap() error     { return errors.Error }\n\n// initOneofFieldCoders initializes the fast-path functions for the fields in a oneof.\n//\n// For size, marshal, and isInit operations, functions are set only on the first field\n// in the oneof. The functions are called when the oneof is non-nil, and will dispatch\n// to the appropriate field-specific function as necessary.\n//\n// The unmarshal function is set on each field individually as usual.\nfunc (mi *MessageInfo) initOneofFieldCoders(od protoreflect.OneofDescriptor, si structInfo) {\n\tfs := si.oneofsByName[od.Name()]\n\tft := fs.Type\n\toneofFields := make(map[reflect.Type]*coderFieldInfo)\n\tneedIsInit := false\n\tfields := od.Fields()\n\tfor i, lim := 0, fields.Len(); i < lim; i++ {\n\t\tfd := od.Fields().Get(i)\n\t\tnum := fd.Number()\n\t\t// Make a copy of the original coderFieldInfo for use in unmarshaling.\n\t\t//\n\t\t// oneofFields[oneofType].funcs.marshal is the field-specific marshal function.\n\t\t//\n\t\t// mi.coderFields[num].marshal is set on only the first field in the oneof,\n\t\t// and dispatches to the field-specific marshaler in oneofFields.\n\t\tcf := *mi.coderFields[num]\n\t\tot := si.oneofWrappersByNumber[num]\n\t\tcf.ft = ot.Field(0).Type\n\t\tcf.mi, cf.funcs = fieldCoder(fd, cf.ft)\n\t\toneofFields[ot] = &cf\n\t\tif cf.funcs.isInit != nil {\n\t\t\tneedIsInit = true\n\t\t}\n\t\tmi.coderFields[num].funcs.unmarshal = func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {\n\t\t\tvar vw reflect.Value         // pointer to wrapper type\n\t\t\tvi := p.AsValueOf(ft).Elem() // oneof field value of interface kind\n\t\t\tif !vi.IsNil() && !vi.Elem().IsNil() && vi.Elem().Elem().Type() == ot {\n\t\t\t\tvw = vi.Elem()\n\t\t\t} else {\n\t\t\t\tvw = reflect.New(ot)\n\t\t\t}\n\t\t\tout, err := cf.funcs.unmarshal(b, pointerOfValue(vw).Apply(zeroOffset), wtyp, &cf, opts)\n\t\t\tif err != nil {\n\t\t\t\treturn out, err\n\t\t\t}\n\t\t\tif cf.funcs.isInit == nil {\n\t\t\t\tout.initialized = true\n\t\t\t}\n\t\t\tvi.Set(vw)\n\t\t\treturn out, nil\n\t\t}\n\t}\n\tgetInfo := func(p pointer) (pointer, *coderFieldInfo) {\n\t\tv := p.AsValueOf(ft).Elem()\n\t\tif v.IsNil() {\n\t\t\treturn pointer{}, nil\n\t\t}\n\t\tv = v.Elem() // interface -> *struct\n\t\tif v.IsNil() {\n\t\t\treturn pointer{}, nil\n\t\t}\n\t\treturn pointerOfValue(v).Apply(zeroOffset), oneofFields[v.Elem().Type()]\n\t}\n\tfirst := mi.coderFields[od.Fields().Get(0).Number()]\n\tfirst.funcs.size = func(p pointer, _ *coderFieldInfo, opts marshalOptions) int {\n\t\tp, info := getInfo(p)\n\t\tif info == nil || info.funcs.size == nil {\n\t\t\treturn 0\n\t\t}\n\t\treturn info.funcs.size(p, info, opts)\n\t}\n\tfirst.funcs.marshal = func(b []byte, p pointer, _ *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\t\tp, info := getInfo(p)\n\t\tif info == nil || info.funcs.marshal == nil {\n\t\t\treturn b, nil\n\t\t}\n\t\treturn info.funcs.marshal(b, p, info, opts)\n\t}\n\tfirst.funcs.merge = func(dst, src pointer, _ *coderFieldInfo, opts mergeOptions) {\n\t\tsrcp, srcinfo := getInfo(src)\n\t\tif srcinfo == nil || srcinfo.funcs.merge == nil {\n\t\t\treturn\n\t\t}\n\t\tdstp, dstinfo := getInfo(dst)\n\t\tif dstinfo != srcinfo {\n\t\t\tdst.AsValueOf(ft).Elem().Set(reflect.New(src.AsValueOf(ft).Elem().Elem().Elem().Type()))\n\t\t\tdstp = pointerOfValue(dst.AsValueOf(ft).Elem().Elem()).Apply(zeroOffset)\n\t\t}\n\t\tsrcinfo.funcs.merge(dstp, srcp, srcinfo, opts)\n\t}\n\tif needIsInit {\n\t\tfirst.funcs.isInit = func(p pointer, _ *coderFieldInfo) error {\n\t\t\tp, info := getInfo(p)\n\t\t\tif info == nil || info.funcs.isInit == nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn info.funcs.isInit(p, info)\n\t\t}\n\t}\n}\n\nfunc makeMessageFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {\n\tif mi := getMessageInfo(ft); mi != nil {\n\t\tfuncs := pointerCoderFuncs{\n\t\t\tsize:      sizeMessageInfo,\n\t\t\tmarshal:   appendMessageInfo,\n\t\t\tunmarshal: consumeMessageInfo,\n\t\t\tmerge:     mergeMessage,\n\t\t}\n\t\tif needsInitCheck(mi.Desc) {\n\t\t\tfuncs.isInit = isInitMessageInfo\n\t\t}\n\t\treturn funcs\n\t} else {\n\t\treturn pointerCoderFuncs{\n\t\t\tsize: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {\n\t\t\t\tm := asMessage(p.AsValueOf(ft).Elem())\n\t\t\t\treturn sizeMessage(m, f.tagsize, opts)\n\t\t\t},\n\t\t\tmarshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\t\t\t\tm := asMessage(p.AsValueOf(ft).Elem())\n\t\t\t\treturn appendMessage(b, m, f.wiretag, opts)\n\t\t\t},\n\t\t\tunmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {\n\t\t\t\tmp := p.AsValueOf(ft).Elem()\n\t\t\t\tif mp.IsNil() {\n\t\t\t\t\tmp.Set(reflect.New(ft.Elem()))\n\t\t\t\t}\n\t\t\t\treturn consumeMessage(b, asMessage(mp), wtyp, opts)\n\t\t\t},\n\t\t\tisInit: func(p pointer, f *coderFieldInfo) error {\n\t\t\t\tm := asMessage(p.AsValueOf(ft).Elem())\n\t\t\t\treturn proto.CheckInitialized(m)\n\t\t\t},\n\t\t\tmerge: mergeMessage,\n\t\t}\n\t}\n}\n\nfunc sizeMessageInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int {\n\treturn protowire.SizeBytes(f.mi.sizePointer(p.Elem(), opts)) + f.tagsize\n}\n\nfunc appendMessageInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tcalculatedSize := f.mi.sizePointer(p.Elem(), opts)\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, uint64(calculatedSize))\n\tbefore := len(b)\n\tb, err := f.mi.marshalAppendPointer(b, p.Elem(), opts)\n\tif measuredSize := len(b) - before; calculatedSize != measuredSize && err == nil {\n\t\treturn nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize)\n\t}\n\treturn b, err\n}\n\nfunc consumeMessageInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tif p.Elem().IsNil() {\n\t\tp.SetPointer(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())))\n\t}\n\to, err := f.mi.unmarshalPointer(v, p.Elem(), 0, opts)\n\tif err != nil {\n\t\treturn out, err\n\t}\n\tout.n = n\n\tout.initialized = o.initialized\n\treturn out, nil\n}\n\nfunc isInitMessageInfo(p pointer, f *coderFieldInfo) error {\n\treturn f.mi.checkInitializedPointer(p.Elem())\n}\n\nfunc sizeMessage(m proto.Message, tagsize int, opts marshalOptions) int {\n\treturn protowire.SizeBytes(opts.Options().Size(m)) + tagsize\n}\n\nfunc appendMessage(b []byte, m proto.Message, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tmopts := opts.Options()\n\tcalculatedSize := mopts.Size(m)\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendVarint(b, uint64(calculatedSize))\n\tbefore := len(b)\n\tb, err := mopts.MarshalAppend(b, m)\n\tif measuredSize := len(b) - before; calculatedSize != measuredSize && err == nil {\n\t\treturn nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize)\n\t}\n\treturn b, err\n}\n\nfunc consumeMessage(b []byte, m proto.Message, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\to, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{\n\t\tBuf:     v,\n\t\tMessage: m.ProtoReflect(),\n\t})\n\tif err != nil {\n\t\treturn out, err\n\t}\n\tout.n = n\n\tout.initialized = o.Flags&protoiface.UnmarshalInitialized != 0\n\treturn out, nil\n}\n\nfunc sizeMessageValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\tm := v.Message().Interface()\n\treturn sizeMessage(m, tagsize, opts)\n}\n\nfunc appendMessageValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tm := v.Message().Interface()\n\treturn appendMessage(b, m, wiretag, opts)\n}\n\nfunc consumeMessageValue(b []byte, v protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (protoreflect.Value, unmarshalOutput, error) {\n\tm := v.Message().Interface()\n\tout, err := consumeMessage(b, m, wtyp, opts)\n\treturn v, out, err\n}\n\nfunc isInitMessageValue(v protoreflect.Value) error {\n\tm := v.Message().Interface()\n\treturn proto.CheckInitialized(m)\n}\n\nvar coderMessageValue = valueCoderFuncs{\n\tsize:      sizeMessageValue,\n\tmarshal:   appendMessageValue,\n\tunmarshal: consumeMessageValue,\n\tisInit:    isInitMessageValue,\n\tmerge:     mergeMessageValue,\n}\n\nfunc sizeGroupValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\tm := v.Message().Interface()\n\treturn sizeGroup(m, tagsize, opts)\n}\n\nfunc appendGroupValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tm := v.Message().Interface()\n\treturn appendGroup(b, m, wiretag, opts)\n}\n\nfunc consumeGroupValue(b []byte, v protoreflect.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (protoreflect.Value, unmarshalOutput, error) {\n\tm := v.Message().Interface()\n\tout, err := consumeGroup(b, m, num, wtyp, opts)\n\treturn v, out, err\n}\n\nvar coderGroupValue = valueCoderFuncs{\n\tsize:      sizeGroupValue,\n\tmarshal:   appendGroupValue,\n\tunmarshal: consumeGroupValue,\n\tisInit:    isInitMessageValue,\n\tmerge:     mergeMessageValue,\n}\n\nfunc makeGroupFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {\n\tnum := fd.Number()\n\tif mi := getMessageInfo(ft); mi != nil {\n\t\tfuncs := pointerCoderFuncs{\n\t\t\tsize:      sizeGroupType,\n\t\t\tmarshal:   appendGroupType,\n\t\t\tunmarshal: consumeGroupType,\n\t\t\tmerge:     mergeMessage,\n\t\t}\n\t\tif needsInitCheck(mi.Desc) {\n\t\t\tfuncs.isInit = isInitMessageInfo\n\t\t}\n\t\treturn funcs\n\t} else {\n\t\treturn pointerCoderFuncs{\n\t\t\tsize: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {\n\t\t\t\tm := asMessage(p.AsValueOf(ft).Elem())\n\t\t\t\treturn sizeGroup(m, f.tagsize, opts)\n\t\t\t},\n\t\t\tmarshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\t\t\t\tm := asMessage(p.AsValueOf(ft).Elem())\n\t\t\t\treturn appendGroup(b, m, f.wiretag, opts)\n\t\t\t},\n\t\t\tunmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {\n\t\t\t\tmp := p.AsValueOf(ft).Elem()\n\t\t\t\tif mp.IsNil() {\n\t\t\t\t\tmp.Set(reflect.New(ft.Elem()))\n\t\t\t\t}\n\t\t\t\treturn consumeGroup(b, asMessage(mp), num, wtyp, opts)\n\t\t\t},\n\t\t\tisInit: func(p pointer, f *coderFieldInfo) error {\n\t\t\t\tm := asMessage(p.AsValueOf(ft).Elem())\n\t\t\t\treturn proto.CheckInitialized(m)\n\t\t\t},\n\t\t\tmerge: mergeMessage,\n\t\t}\n\t}\n}\n\nfunc sizeGroupType(p pointer, f *coderFieldInfo, opts marshalOptions) int {\n\treturn 2*f.tagsize + f.mi.sizePointer(p.Elem(), opts)\n}\n\nfunc appendGroupType(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, f.wiretag) // start group\n\tb, err := f.mi.marshalAppendPointer(b, p.Elem(), opts)\n\tb = protowire.AppendVarint(b, f.wiretag+1) // end group\n\treturn b, err\n}\n\nfunc consumeGroupType(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.StartGroupType {\n\t\treturn out, errUnknown\n\t}\n\tif p.Elem().IsNil() {\n\t\tp.SetPointer(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())))\n\t}\n\treturn f.mi.unmarshalPointer(b, p.Elem(), f.num, opts)\n}\n\nfunc sizeGroup(m proto.Message, tagsize int, opts marshalOptions) int {\n\treturn 2*tagsize + opts.Options().Size(m)\n}\n\nfunc appendGroup(b []byte, m proto.Message, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag) // start group\n\tb, err := opts.Options().MarshalAppend(b, m)\n\tb = protowire.AppendVarint(b, wiretag+1) // end group\n\treturn b, err\n}\n\nfunc consumeGroup(b []byte, m proto.Message, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.StartGroupType {\n\t\treturn out, errUnknown\n\t}\n\tb, n := protowire.ConsumeGroup(num, b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\to, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{\n\t\tBuf:     b,\n\t\tMessage: m.ProtoReflect(),\n\t})\n\tif err != nil {\n\t\treturn out, err\n\t}\n\tout.n = n\n\tout.initialized = o.Flags&protoiface.UnmarshalInitialized != 0\n\treturn out, nil\n}\n\nfunc makeMessageSliceFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {\n\tif mi := getMessageInfo(ft); mi != nil {\n\t\tfuncs := pointerCoderFuncs{\n\t\t\tsize:      sizeMessageSliceInfo,\n\t\t\tmarshal:   appendMessageSliceInfo,\n\t\t\tunmarshal: consumeMessageSliceInfo,\n\t\t\tmerge:     mergeMessageSlice,\n\t\t}\n\t\tif needsInitCheck(mi.Desc) {\n\t\t\tfuncs.isInit = isInitMessageSliceInfo\n\t\t}\n\t\treturn funcs\n\t}\n\treturn pointerCoderFuncs{\n\t\tsize: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {\n\t\t\treturn sizeMessageSlice(p, ft, f.tagsize, opts)\n\t\t},\n\t\tmarshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\t\t\treturn appendMessageSlice(b, p, f.wiretag, ft, opts)\n\t\t},\n\t\tunmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {\n\t\t\treturn consumeMessageSlice(b, p, ft, wtyp, opts)\n\t\t},\n\t\tisInit: func(p pointer, f *coderFieldInfo) error {\n\t\t\treturn isInitMessageSlice(p, ft)\n\t\t},\n\t\tmerge: mergeMessageSlice,\n\t}\n}\n\nfunc sizeMessageSliceInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int {\n\ts := p.PointerSlice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeBytes(f.mi.sizePointer(v, opts)) + f.tagsize\n\t}\n\treturn n\n}\n\nfunc appendMessageSliceInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := p.PointerSlice()\n\tvar err error\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tsiz := f.mi.sizePointer(v, opts)\n\t\tb = protowire.AppendVarint(b, uint64(siz))\n\t\tbefore := len(b)\n\t\tb, err = f.mi.marshalAppendPointer(b, v, opts)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t\tif measuredSize := len(b) - before; siz != measuredSize {\n\t\t\treturn nil, errors.MismatchedSizeCalculation(siz, measuredSize)\n\t\t}\n\t}\n\treturn b, nil\n}\n\nfunc consumeMessageSliceInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tm := reflect.New(f.mi.GoReflectType.Elem()).Interface()\n\tmp := pointerOfIface(m)\n\to, err := f.mi.unmarshalPointer(v, mp, 0, opts)\n\tif err != nil {\n\t\treturn out, err\n\t}\n\tp.AppendPointerSlice(mp)\n\tout.n = n\n\tout.initialized = o.initialized\n\treturn out, nil\n}\n\nfunc isInitMessageSliceInfo(p pointer, f *coderFieldInfo) error {\n\ts := p.PointerSlice()\n\tfor _, v := range s {\n\t\tif err := f.mi.checkInitializedPointer(v); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc sizeMessageSlice(p pointer, goType reflect.Type, tagsize int, opts marshalOptions) int {\n\tmopts := opts.Options()\n\ts := p.PointerSlice()\n\tn := 0\n\tfor _, v := range s {\n\t\tm := asMessage(v.AsValueOf(goType.Elem()))\n\t\tn += protowire.SizeBytes(mopts.Size(m)) + tagsize\n\t}\n\treturn n\n}\n\nfunc appendMessageSlice(b []byte, p pointer, wiretag uint64, goType reflect.Type, opts marshalOptions) ([]byte, error) {\n\tmopts := opts.Options()\n\ts := p.PointerSlice()\n\tvar err error\n\tfor _, v := range s {\n\t\tm := asMessage(v.AsValueOf(goType.Elem()))\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tsiz := mopts.Size(m)\n\t\tb = protowire.AppendVarint(b, uint64(siz))\n\t\tbefore := len(b)\n\t\tb, err = mopts.MarshalAppend(b, m)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t\tif measuredSize := len(b) - before; siz != measuredSize {\n\t\t\treturn nil, errors.MismatchedSizeCalculation(siz, measuredSize)\n\t\t}\n\t}\n\treturn b, nil\n}\n\nfunc consumeMessageSlice(b []byte, p pointer, goType reflect.Type, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tmp := reflect.New(goType.Elem())\n\to, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{\n\t\tBuf:     v,\n\t\tMessage: asMessage(mp).ProtoReflect(),\n\t})\n\tif err != nil {\n\t\treturn out, err\n\t}\n\tp.AppendPointerSlice(pointerOfValue(mp))\n\tout.n = n\n\tout.initialized = o.Flags&protoiface.UnmarshalInitialized != 0\n\treturn out, nil\n}\n\nfunc isInitMessageSlice(p pointer, goType reflect.Type) error {\n\ts := p.PointerSlice()\n\tfor _, v := range s {\n\t\tm := asMessage(v.AsValueOf(goType.Elem()))\n\t\tif err := proto.CheckInitialized(m); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// Slices of messages\n\nfunc sizeMessageSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) int {\n\tmopts := opts.Options()\n\tlist := listv.List()\n\tn := 0\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tm := list.Get(i).Message().Interface()\n\t\tn += protowire.SizeBytes(mopts.Size(m)) + tagsize\n\t}\n\treturn n\n}\n\nfunc appendMessageSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tmopts := opts.Options()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tm := list.Get(i).Message().Interface()\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tsiz := mopts.Size(m)\n\t\tb = protowire.AppendVarint(b, uint64(siz))\n\t\tbefore := len(b)\n\t\tvar err error\n\t\tb, err = mopts.MarshalAppend(b, m)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t\tif measuredSize := len(b) - before; siz != measuredSize {\n\t\t\treturn nil, errors.MismatchedSizeCalculation(siz, measuredSize)\n\t\t}\n\t}\n\treturn b, nil\n}\n\nfunc consumeMessageSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp != protowire.BytesType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tm := list.NewElement()\n\to, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{\n\t\tBuf:     v,\n\t\tMessage: m.Message(),\n\t})\n\tif err != nil {\n\t\treturn protoreflect.Value{}, out, err\n\t}\n\tlist.Append(m)\n\tout.n = n\n\tout.initialized = o.Flags&protoiface.UnmarshalInitialized != 0\n\treturn listv, out, nil\n}\n\nfunc isInitMessageSliceValue(listv protoreflect.Value) error {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tm := list.Get(i).Message().Interface()\n\t\tif err := proto.CheckInitialized(m); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nvar coderMessageSliceValue = valueCoderFuncs{\n\tsize:      sizeMessageSliceValue,\n\tmarshal:   appendMessageSliceValue,\n\tunmarshal: consumeMessageSliceValue,\n\tisInit:    isInitMessageSliceValue,\n\tmerge:     mergeMessageListValue,\n}\n\nfunc sizeGroupSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) int {\n\tmopts := opts.Options()\n\tlist := listv.List()\n\tn := 0\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tm := list.Get(i).Message().Interface()\n\t\tn += 2*tagsize + mopts.Size(m)\n\t}\n\treturn n\n}\n\nfunc appendGroupSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tmopts := opts.Options()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tm := list.Get(i).Message().Interface()\n\t\tb = protowire.AppendVarint(b, wiretag) // start group\n\t\tvar err error\n\t\tb, err = mopts.MarshalAppend(b, m)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t\tb = protowire.AppendVarint(b, wiretag+1) // end group\n\t}\n\treturn b, nil\n}\n\nfunc consumeGroupSliceValue(b []byte, listv protoreflect.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp != protowire.StartGroupType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tb, n := protowire.ConsumeGroup(num, b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tm := list.NewElement()\n\to, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{\n\t\tBuf:     b,\n\t\tMessage: m.Message(),\n\t})\n\tif err != nil {\n\t\treturn protoreflect.Value{}, out, err\n\t}\n\tlist.Append(m)\n\tout.n = n\n\tout.initialized = o.Flags&protoiface.UnmarshalInitialized != 0\n\treturn listv, out, nil\n}\n\nvar coderGroupSliceValue = valueCoderFuncs{\n\tsize:      sizeGroupSliceValue,\n\tmarshal:   appendGroupSliceValue,\n\tunmarshal: consumeGroupSliceValue,\n\tisInit:    isInitMessageSliceValue,\n\tmerge:     mergeMessageListValue,\n}\n\nfunc makeGroupSliceFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs {\n\tnum := fd.Number()\n\tif mi := getMessageInfo(ft); mi != nil {\n\t\tfuncs := pointerCoderFuncs{\n\t\t\tsize:      sizeGroupSliceInfo,\n\t\t\tmarshal:   appendGroupSliceInfo,\n\t\t\tunmarshal: consumeGroupSliceInfo,\n\t\t\tmerge:     mergeMessageSlice,\n\t\t}\n\t\tif needsInitCheck(mi.Desc) {\n\t\t\tfuncs.isInit = isInitMessageSliceInfo\n\t\t}\n\t\treturn funcs\n\t}\n\treturn pointerCoderFuncs{\n\t\tsize: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {\n\t\t\treturn sizeGroupSlice(p, ft, f.tagsize, opts)\n\t\t},\n\t\tmarshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\t\t\treturn appendGroupSlice(b, p, f.wiretag, ft, opts)\n\t\t},\n\t\tunmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {\n\t\t\treturn consumeGroupSlice(b, p, num, wtyp, ft, opts)\n\t\t},\n\t\tisInit: func(p pointer, f *coderFieldInfo) error {\n\t\t\treturn isInitMessageSlice(p, ft)\n\t\t},\n\t\tmerge: mergeMessageSlice,\n\t}\n}\n\nfunc sizeGroupSlice(p pointer, messageType reflect.Type, tagsize int, opts marshalOptions) int {\n\tmopts := opts.Options()\n\ts := p.PointerSlice()\n\tn := 0\n\tfor _, v := range s {\n\t\tm := asMessage(v.AsValueOf(messageType.Elem()))\n\t\tn += 2*tagsize + mopts.Size(m)\n\t}\n\treturn n\n}\n\nfunc appendGroupSlice(b []byte, p pointer, wiretag uint64, messageType reflect.Type, opts marshalOptions) ([]byte, error) {\n\ts := p.PointerSlice()\n\tvar err error\n\tfor _, v := range s {\n\t\tm := asMessage(v.AsValueOf(messageType.Elem()))\n\t\tb = protowire.AppendVarint(b, wiretag) // start group\n\t\tb, err = opts.Options().MarshalAppend(b, m)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t\tb = protowire.AppendVarint(b, wiretag+1) // end group\n\t}\n\treturn b, nil\n}\n\nfunc consumeGroupSlice(b []byte, p pointer, num protowire.Number, wtyp protowire.Type, goType reflect.Type, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.StartGroupType {\n\t\treturn out, errUnknown\n\t}\n\tb, n := protowire.ConsumeGroup(num, b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tmp := reflect.New(goType.Elem())\n\to, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{\n\t\tBuf:     b,\n\t\tMessage: asMessage(mp).ProtoReflect(),\n\t})\n\tif err != nil {\n\t\treturn out, err\n\t}\n\tp.AppendPointerSlice(pointerOfValue(mp))\n\tout.n = n\n\tout.initialized = o.Flags&protoiface.UnmarshalInitialized != 0\n\treturn out, nil\n}\n\nfunc sizeGroupSliceInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int {\n\ts := p.PointerSlice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += 2*f.tagsize + f.mi.sizePointer(v, opts)\n\t}\n\treturn n\n}\n\nfunc appendGroupSliceInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := p.PointerSlice()\n\tvar err error\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag) // start group\n\t\tb, err = f.mi.marshalAppendPointer(b, v, opts)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t\tb = protowire.AppendVarint(b, f.wiretag+1) // end group\n\t}\n\treturn b, nil\n}\n\nfunc consumeGroupSliceInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {\n\tif wtyp != protowire.StartGroupType {\n\t\treturn unmarshalOutput{}, errUnknown\n\t}\n\tm := reflect.New(f.mi.GoReflectType.Elem()).Interface()\n\tmp := pointerOfIface(m)\n\tout, err := f.mi.unmarshalPointer(b, mp, f.num, opts)\n\tif err != nil {\n\t\treturn out, err\n\t}\n\tp.AppendPointerSlice(mp)\n\treturn out, nil\n}\n\nfunc asMessage(v reflect.Value) protoreflect.ProtoMessage {\n\tif m, ok := v.Interface().(protoreflect.ProtoMessage); ok {\n\t\treturn m\n\t}\n\treturn legacyWrapMessage(v).Interface()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/codec_field_opaque.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 impl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nfunc makeOpaqueMessageFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointerCoderFuncs) {\n\tmi := getMessageInfo(ft)\n\tif mi == nil {\n\t\tpanic(fmt.Sprintf(\"invalid field: %v: unsupported message type %v\", fd.FullName(), ft))\n\t}\n\tswitch fd.Kind() {\n\tcase protoreflect.MessageKind:\n\t\treturn mi, pointerCoderFuncs{\n\t\t\tsize:      sizeOpaqueMessage,\n\t\t\tmarshal:   appendOpaqueMessage,\n\t\t\tunmarshal: consumeOpaqueMessage,\n\t\t\tisInit:    isInitOpaqueMessage,\n\t\t\tmerge:     mergeOpaqueMessage,\n\t\t}\n\tcase protoreflect.GroupKind:\n\t\treturn mi, pointerCoderFuncs{\n\t\t\tsize:      sizeOpaqueGroup,\n\t\t\tmarshal:   appendOpaqueGroup,\n\t\t\tunmarshal: consumeOpaqueGroup,\n\t\t\tisInit:    isInitOpaqueMessage,\n\t\t\tmerge:     mergeOpaqueMessage,\n\t\t}\n\t}\n\tpanic(\"unexpected field kind\")\n}\n\nfunc sizeOpaqueMessage(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\treturn protowire.SizeBytes(f.mi.sizePointer(p.AtomicGetPointer(), opts)) + f.tagsize\n}\n\nfunc appendOpaqueMessage(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tmp := p.AtomicGetPointer()\n\tcalculatedSize := f.mi.sizePointer(mp, opts)\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, uint64(calculatedSize))\n\tbefore := len(b)\n\tb, err := f.mi.marshalAppendPointer(b, mp, opts)\n\tif measuredSize := len(b) - before; calculatedSize != measuredSize && err == nil {\n\t\treturn nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize)\n\t}\n\treturn b, err\n}\n\nfunc consumeOpaqueMessage(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tmp := p.AtomicGetPointer()\n\tif mp.IsNil() {\n\t\tmp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())))\n\t}\n\to, err := f.mi.unmarshalPointer(v, mp, 0, opts)\n\tif err != nil {\n\t\treturn out, err\n\t}\n\tout.n = n\n\tout.initialized = o.initialized\n\treturn out, nil\n}\n\nfunc isInitOpaqueMessage(p pointer, f *coderFieldInfo) error {\n\tmp := p.AtomicGetPointer()\n\tif mp.IsNil() {\n\t\treturn nil\n\t}\n\treturn f.mi.checkInitializedPointer(mp)\n}\n\nfunc mergeOpaqueMessage(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {\n\tdstmp := dst.AtomicGetPointer()\n\tif dstmp.IsNil() {\n\t\tdstmp = dst.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())))\n\t}\n\tf.mi.mergePointer(dstmp, src.AtomicGetPointer(), opts)\n}\n\nfunc sizeOpaqueGroup(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\treturn 2*f.tagsize + f.mi.sizePointer(p.AtomicGetPointer(), opts)\n}\n\nfunc appendOpaqueGroup(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, f.wiretag) // start group\n\tb, err := f.mi.marshalAppendPointer(b, p.AtomicGetPointer(), opts)\n\tb = protowire.AppendVarint(b, f.wiretag+1) // end group\n\treturn b, err\n}\n\nfunc consumeOpaqueGroup(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.StartGroupType {\n\t\treturn out, errUnknown\n\t}\n\tmp := p.AtomicGetPointer()\n\tif mp.IsNil() {\n\t\tmp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())))\n\t}\n\to, e := f.mi.unmarshalPointer(b, mp, f.num, opts)\n\treturn o, e\n}\n\nfunc makeOpaqueRepeatedMessageFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointerCoderFuncs) {\n\tif ft.Kind() != reflect.Ptr || ft.Elem().Kind() != reflect.Slice {\n\t\tpanic(fmt.Sprintf(\"invalid field: %v: unsupported type for opaque repeated message: %v\", fd.FullName(), ft))\n\t}\n\tmt := ft.Elem().Elem() // *[]*T -> *T\n\tmi := getMessageInfo(mt)\n\tif mi == nil {\n\t\tpanic(fmt.Sprintf(\"invalid field: %v: unsupported message type %v\", fd.FullName(), mt))\n\t}\n\tswitch fd.Kind() {\n\tcase protoreflect.MessageKind:\n\t\treturn mi, pointerCoderFuncs{\n\t\t\tsize:      sizeOpaqueMessageSlice,\n\t\t\tmarshal:   appendOpaqueMessageSlice,\n\t\t\tunmarshal: consumeOpaqueMessageSlice,\n\t\t\tisInit:    isInitOpaqueMessageSlice,\n\t\t\tmerge:     mergeOpaqueMessageSlice,\n\t\t}\n\tcase protoreflect.GroupKind:\n\t\treturn mi, pointerCoderFuncs{\n\t\t\tsize:      sizeOpaqueGroupSlice,\n\t\t\tmarshal:   appendOpaqueGroupSlice,\n\t\t\tunmarshal: consumeOpaqueGroupSlice,\n\t\t\tisInit:    isInitOpaqueMessageSlice,\n\t\t\tmerge:     mergeOpaqueMessageSlice,\n\t\t}\n\t}\n\tpanic(\"unexpected field kind\")\n}\n\nfunc sizeOpaqueMessageSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := p.AtomicGetPointer().PointerSlice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeBytes(f.mi.sizePointer(v, opts)) + f.tagsize\n\t}\n\treturn n\n}\n\nfunc appendOpaqueMessageSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := p.AtomicGetPointer().PointerSlice()\n\tvar err error\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tsiz := f.mi.sizePointer(v, opts)\n\t\tb = protowire.AppendVarint(b, uint64(siz))\n\t\tbefore := len(b)\n\t\tb, err = f.mi.marshalAppendPointer(b, v, opts)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t\tif measuredSize := len(b) - before; siz != measuredSize {\n\t\t\treturn nil, errors.MismatchedSizeCalculation(siz, measuredSize)\n\t\t}\n\t}\n\treturn b, nil\n}\n\nfunc consumeOpaqueMessageSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tmp := pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))\n\to, err := f.mi.unmarshalPointer(v, mp, 0, opts)\n\tif err != nil {\n\t\treturn out, err\n\t}\n\tsp := p.AtomicGetPointer()\n\tif sp.IsNil() {\n\t\tsp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.ft.Elem())))\n\t}\n\tsp.AppendPointerSlice(mp)\n\tout.n = n\n\tout.initialized = o.initialized\n\treturn out, nil\n}\n\nfunc isInitOpaqueMessageSlice(p pointer, f *coderFieldInfo) error {\n\tsp := p.AtomicGetPointer()\n\tif sp.IsNil() {\n\t\treturn nil\n\t}\n\ts := sp.PointerSlice()\n\tfor _, v := range s {\n\t\tif err := f.mi.checkInitializedPointer(v); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc mergeOpaqueMessageSlice(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {\n\tds := dst.AtomicGetPointer()\n\tif ds.IsNil() {\n\t\tds = dst.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.ft.Elem())))\n\t}\n\tfor _, sp := range src.AtomicGetPointer().PointerSlice() {\n\t\tdm := pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))\n\t\tf.mi.mergePointer(dm, sp, opts)\n\t\tds.AppendPointerSlice(dm)\n\t}\n}\n\nfunc sizeOpaqueGroupSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := p.AtomicGetPointer().PointerSlice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += 2*f.tagsize + f.mi.sizePointer(v, opts)\n\t}\n\treturn n\n}\n\nfunc appendOpaqueGroupSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := p.AtomicGetPointer().PointerSlice()\n\tvar err error\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag) // start group\n\t\tb, err = f.mi.marshalAppendPointer(b, v, opts)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t\tb = protowire.AppendVarint(b, f.wiretag+1) // end group\n\t}\n\treturn b, nil\n}\n\nfunc consumeOpaqueGroupSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.StartGroupType {\n\t\treturn out, errUnknown\n\t}\n\tmp := pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))\n\tout, err = f.mi.unmarshalPointer(b, mp, f.num, opts)\n\tif err != nil {\n\t\treturn out, err\n\t}\n\tsp := p.AtomicGetPointer()\n\tif sp.IsNil() {\n\t\tsp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.ft.Elem())))\n\t}\n\tsp.AppendPointerSlice(mp)\n\treturn out, err\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/codec_gen.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 generated by generate-types. DO NOT EDIT.\n\npackage impl\n\nimport (\n\t\"math\"\n\t\"unicode/utf8\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// sizeBool returns the size of wire encoding a bool pointer as a Bool.\nfunc sizeBool(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Bool()\n\treturn f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v))\n}\n\n// appendBool wire encodes a bool pointer as a Bool.\nfunc appendBool(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Bool()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, protowire.EncodeBool(v))\n\treturn b, nil\n}\n\n// consumeBool wire decodes a bool pointer as a Bool.\nfunc consumeBool(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Bool() = protowire.DecodeBool(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderBool = pointerCoderFuncs{\n\tsize:      sizeBool,\n\tmarshal:   appendBool,\n\tunmarshal: consumeBool,\n\tmerge:     mergeBool,\n}\n\n// sizeBoolNoZero returns the size of wire encoding a bool pointer as a Bool.\n// The zero value is not encoded.\nfunc sizeBoolNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Bool()\n\tif v == false {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v))\n}\n\n// appendBoolNoZero wire encodes a bool pointer as a Bool.\n// The zero value is not encoded.\nfunc appendBoolNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Bool()\n\tif v == false {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, protowire.EncodeBool(v))\n\treturn b, nil\n}\n\nvar coderBoolNoZero = pointerCoderFuncs{\n\tsize:      sizeBoolNoZero,\n\tmarshal:   appendBoolNoZero,\n\tunmarshal: consumeBool,\n\tmerge:     mergeBoolNoZero,\n}\n\n// sizeBoolPtr returns the size of wire encoding a *bool pointer as a Bool.\n// It panics if the pointer is nil.\nfunc sizeBoolPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := **p.BoolPtr()\n\treturn f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v))\n}\n\n// appendBoolPtr wire encodes a *bool pointer as a Bool.\n// It panics if the pointer is nil.\nfunc appendBoolPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.BoolPtr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, protowire.EncodeBool(v))\n\treturn b, nil\n}\n\n// consumeBoolPtr wire decodes a *bool pointer as a Bool.\nfunc consumeBoolPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvp := p.BoolPtr()\n\tif *vp == nil {\n\t\t*vp = new(bool)\n\t}\n\t**vp = protowire.DecodeBool(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderBoolPtr = pointerCoderFuncs{\n\tsize:      sizeBoolPtr,\n\tmarshal:   appendBoolPtr,\n\tunmarshal: consumeBoolPtr,\n\tmerge:     mergeBoolPtr,\n}\n\n// sizeBoolSlice returns the size of wire encoding a []bool pointer as a repeated Bool.\nfunc sizeBoolSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.BoolSlice()\n\tfor _, v := range s {\n\t\tsize += f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v))\n\t}\n\treturn size\n}\n\n// appendBoolSlice encodes a []bool pointer as a repeated Bool.\nfunc appendBoolSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.BoolSlice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendVarint(b, protowire.EncodeBool(v))\n\t}\n\treturn b, nil\n}\n\n// consumeBoolSlice wire decodes a []bool pointer as a repeated Bool.\nfunc consumeBoolSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.BoolSlice()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tcount := 0\n\t\tfor _, v := range b {\n\t\t\tif v < 0x80 {\n\t\t\t\tcount++\n\t\t\t}\n\t\t}\n\t\tif count > 0 {\n\t\t\tp.growBoolSlice(count)\n\t\t}\n\t\ts := *sp\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\ts = append(s, protowire.DecodeBool(v))\n\t\t\tb = b[n:]\n\t\t}\n\t\t*sp = s\n\t\tout.n = n\n\t\treturn out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, protowire.DecodeBool(v))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderBoolSlice = pointerCoderFuncs{\n\tsize:      sizeBoolSlice,\n\tmarshal:   appendBoolSlice,\n\tunmarshal: consumeBoolSlice,\n\tmerge:     mergeBoolSlice,\n}\n\n// sizeBoolPackedSlice returns the size of wire encoding a []bool pointer as a packed repeated Bool.\nfunc sizeBoolPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.BoolSlice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeVarint(protowire.EncodeBool(v))\n\t}\n\treturn f.tagsize + protowire.SizeBytes(n)\n}\n\n// appendBoolPackedSlice encodes a []bool pointer as a packed repeated Bool.\nfunc appendBoolPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.BoolSlice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeVarint(protowire.EncodeBool(v))\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, protowire.EncodeBool(v))\n\t}\n\treturn b, nil\n}\n\nvar coderBoolPackedSlice = pointerCoderFuncs{\n\tsize:      sizeBoolPackedSlice,\n\tmarshal:   appendBoolPackedSlice,\n\tunmarshal: consumeBoolSlice,\n\tmerge:     mergeBoolSlice,\n}\n\n// sizeBoolValue returns the size of wire encoding a bool value as a Bool.\nfunc sizeBoolValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeVarint(protowire.EncodeBool(v.Bool()))\n}\n\n// appendBoolValue encodes a bool value as a Bool.\nfunc appendBoolValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool()))\n\treturn b, nil\n}\n\n// consumeBoolValue decodes a bool value as a Bool.\nfunc consumeBoolValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfBool(protowire.DecodeBool(v)), out, nil\n}\n\nvar coderBoolValue = valueCoderFuncs{\n\tsize:      sizeBoolValue,\n\tmarshal:   appendBoolValue,\n\tunmarshal: consumeBoolValue,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeBoolSliceValue returns the size of wire encoding a []bool value as a repeated Bool.\nfunc sizeBoolSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tsize += tagsize + protowire.SizeVarint(protowire.EncodeBool(v.Bool()))\n\t}\n\treturn size\n}\n\n// appendBoolSliceValue encodes a []bool value as a repeated Bool.\nfunc appendBoolSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool()))\n\t}\n\treturn b, nil\n}\n\n// consumeBoolSliceValue wire decodes a []bool value as a repeated Bool.\nfunc consumeBoolSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t}\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t\t}\n\t\t\tlist.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v)))\n\t\t\tb = b[n:]\n\t\t}\n\t\tout.n = n\n\t\treturn listv, out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v)))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderBoolSliceValue = valueCoderFuncs{\n\tsize:      sizeBoolSliceValue,\n\tmarshal:   appendBoolSliceValue,\n\tunmarshal: consumeBoolSliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeBoolPackedSliceValue returns the size of wire encoding a []bool value as a packed repeated Bool.\nfunc sizeBoolPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor i, llen := 0, llen; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(protowire.EncodeBool(v.Bool()))\n\t}\n\treturn tagsize + protowire.SizeBytes(n)\n}\n\n// appendBoolPackedSliceValue encodes a []bool value as a packed repeated Bool.\nfunc appendBoolPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, wiretag)\n\tn := 0\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(protowire.EncodeBool(v.Bool()))\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool()))\n\t}\n\treturn b, nil\n}\n\nvar coderBoolPackedSliceValue = valueCoderFuncs{\n\tsize:      sizeBoolPackedSliceValue,\n\tmarshal:   appendBoolPackedSliceValue,\n\tunmarshal: consumeBoolSliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeEnumValue returns the size of wire encoding a  value as a Enum.\nfunc sizeEnumValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeVarint(uint64(v.Enum()))\n}\n\n// appendEnumValue encodes a  value as a Enum.\nfunc appendEnumValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendVarint(b, uint64(v.Enum()))\n\treturn b, nil\n}\n\n// consumeEnumValue decodes a  value as a Enum.\nfunc consumeEnumValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)), out, nil\n}\n\nvar coderEnumValue = valueCoderFuncs{\n\tsize:      sizeEnumValue,\n\tmarshal:   appendEnumValue,\n\tunmarshal: consumeEnumValue,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeEnumSliceValue returns the size of wire encoding a [] value as a repeated Enum.\nfunc sizeEnumSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tsize += tagsize + protowire.SizeVarint(uint64(v.Enum()))\n\t}\n\treturn size\n}\n\n// appendEnumSliceValue encodes a [] value as a repeated Enum.\nfunc appendEnumSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendVarint(b, uint64(v.Enum()))\n\t}\n\treturn b, nil\n}\n\n// consumeEnumSliceValue wire decodes a [] value as a repeated Enum.\nfunc consumeEnumSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t}\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t\t}\n\t\t\tlist.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))\n\t\t\tb = b[n:]\n\t\t}\n\t\tout.n = n\n\t\treturn listv, out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderEnumSliceValue = valueCoderFuncs{\n\tsize:      sizeEnumSliceValue,\n\tmarshal:   appendEnumSliceValue,\n\tunmarshal: consumeEnumSliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeEnumPackedSliceValue returns the size of wire encoding a [] value as a packed repeated Enum.\nfunc sizeEnumPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor i, llen := 0, llen; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(uint64(v.Enum()))\n\t}\n\treturn tagsize + protowire.SizeBytes(n)\n}\n\n// appendEnumPackedSliceValue encodes a [] value as a packed repeated Enum.\nfunc appendEnumPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, wiretag)\n\tn := 0\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(uint64(v.Enum()))\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, uint64(v.Enum()))\n\t}\n\treturn b, nil\n}\n\nvar coderEnumPackedSliceValue = valueCoderFuncs{\n\tsize:      sizeEnumPackedSliceValue,\n\tmarshal:   appendEnumPackedSliceValue,\n\tunmarshal: consumeEnumSliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeInt32 returns the size of wire encoding a int32 pointer as a Int32.\nfunc sizeInt32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Int32()\n\treturn f.tagsize + protowire.SizeVarint(uint64(v))\n}\n\n// appendInt32 wire encodes a int32 pointer as a Int32.\nfunc appendInt32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Int32()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, uint64(v))\n\treturn b, nil\n}\n\n// consumeInt32 wire decodes a int32 pointer as a Int32.\nfunc consumeInt32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Int32() = int32(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderInt32 = pointerCoderFuncs{\n\tsize:      sizeInt32,\n\tmarshal:   appendInt32,\n\tunmarshal: consumeInt32,\n\tmerge:     mergeInt32,\n}\n\n// sizeInt32NoZero returns the size of wire encoding a int32 pointer as a Int32.\n// The zero value is not encoded.\nfunc sizeInt32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Int32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeVarint(uint64(v))\n}\n\n// appendInt32NoZero wire encodes a int32 pointer as a Int32.\n// The zero value is not encoded.\nfunc appendInt32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Int32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, uint64(v))\n\treturn b, nil\n}\n\nvar coderInt32NoZero = pointerCoderFuncs{\n\tsize:      sizeInt32NoZero,\n\tmarshal:   appendInt32NoZero,\n\tunmarshal: consumeInt32,\n\tmerge:     mergeInt32NoZero,\n}\n\n// sizeInt32Ptr returns the size of wire encoding a *int32 pointer as a Int32.\n// It panics if the pointer is nil.\nfunc sizeInt32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := **p.Int32Ptr()\n\treturn f.tagsize + protowire.SizeVarint(uint64(v))\n}\n\n// appendInt32Ptr wire encodes a *int32 pointer as a Int32.\n// It panics if the pointer is nil.\nfunc appendInt32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.Int32Ptr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, uint64(v))\n\treturn b, nil\n}\n\n// consumeInt32Ptr wire decodes a *int32 pointer as a Int32.\nfunc consumeInt32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvp := p.Int32Ptr()\n\tif *vp == nil {\n\t\t*vp = new(int32)\n\t}\n\t**vp = int32(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderInt32Ptr = pointerCoderFuncs{\n\tsize:      sizeInt32Ptr,\n\tmarshal:   appendInt32Ptr,\n\tunmarshal: consumeInt32Ptr,\n\tmerge:     mergeInt32Ptr,\n}\n\n// sizeInt32Slice returns the size of wire encoding a []int32 pointer as a repeated Int32.\nfunc sizeInt32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Int32Slice()\n\tfor _, v := range s {\n\t\tsize += f.tagsize + protowire.SizeVarint(uint64(v))\n\t}\n\treturn size\n}\n\n// appendInt32Slice encodes a []int32 pointer as a repeated Int32.\nfunc appendInt32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Int32Slice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\n\n// consumeInt32Slice wire decodes a []int32 pointer as a repeated Int32.\nfunc consumeInt32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.Int32Slice()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tcount := 0\n\t\tfor _, v := range b {\n\t\t\tif v < 0x80 {\n\t\t\t\tcount++\n\t\t\t}\n\t\t}\n\t\tif count > 0 {\n\t\t\tp.growInt32Slice(count)\n\t\t}\n\t\ts := *sp\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\ts = append(s, int32(v))\n\t\t\tb = b[n:]\n\t\t}\n\t\t*sp = s\n\t\tout.n = n\n\t\treturn out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, int32(v))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderInt32Slice = pointerCoderFuncs{\n\tsize:      sizeInt32Slice,\n\tmarshal:   appendInt32Slice,\n\tunmarshal: consumeInt32Slice,\n\tmerge:     mergeInt32Slice,\n}\n\n// sizeInt32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Int32.\nfunc sizeInt32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Int32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeVarint(uint64(v))\n\t}\n\treturn f.tagsize + protowire.SizeBytes(n)\n}\n\n// appendInt32PackedSlice encodes a []int32 pointer as a packed repeated Int32.\nfunc appendInt32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Int32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeVarint(uint64(v))\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\n\nvar coderInt32PackedSlice = pointerCoderFuncs{\n\tsize:      sizeInt32PackedSlice,\n\tmarshal:   appendInt32PackedSlice,\n\tunmarshal: consumeInt32Slice,\n\tmerge:     mergeInt32Slice,\n}\n\n// sizeInt32Value returns the size of wire encoding a int32 value as a Int32.\nfunc sizeInt32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeVarint(uint64(int32(v.Int())))\n}\n\n// appendInt32Value encodes a int32 value as a Int32.\nfunc appendInt32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendVarint(b, uint64(int32(v.Int())))\n\treturn b, nil\n}\n\n// consumeInt32Value decodes a int32 value as a Int32.\nfunc consumeInt32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfInt32(int32(v)), out, nil\n}\n\nvar coderInt32Value = valueCoderFuncs{\n\tsize:      sizeInt32Value,\n\tmarshal:   appendInt32Value,\n\tunmarshal: consumeInt32Value,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeInt32SliceValue returns the size of wire encoding a []int32 value as a repeated Int32.\nfunc sizeInt32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tsize += tagsize + protowire.SizeVarint(uint64(int32(v.Int())))\n\t}\n\treturn size\n}\n\n// appendInt32SliceValue encodes a []int32 value as a repeated Int32.\nfunc appendInt32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendVarint(b, uint64(int32(v.Int())))\n\t}\n\treturn b, nil\n}\n\n// consumeInt32SliceValue wire decodes a []int32 value as a repeated Int32.\nfunc consumeInt32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t}\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t\t}\n\t\t\tlist.Append(protoreflect.ValueOfInt32(int32(v)))\n\t\t\tb = b[n:]\n\t\t}\n\t\tout.n = n\n\t\treturn listv, out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfInt32(int32(v)))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderInt32SliceValue = valueCoderFuncs{\n\tsize:      sizeInt32SliceValue,\n\tmarshal:   appendInt32SliceValue,\n\tunmarshal: consumeInt32SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeInt32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Int32.\nfunc sizeInt32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor i, llen := 0, llen; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(uint64(int32(v.Int())))\n\t}\n\treturn tagsize + protowire.SizeBytes(n)\n}\n\n// appendInt32PackedSliceValue encodes a []int32 value as a packed repeated Int32.\nfunc appendInt32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, wiretag)\n\tn := 0\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(uint64(int32(v.Int())))\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, uint64(int32(v.Int())))\n\t}\n\treturn b, nil\n}\n\nvar coderInt32PackedSliceValue = valueCoderFuncs{\n\tsize:      sizeInt32PackedSliceValue,\n\tmarshal:   appendInt32PackedSliceValue,\n\tunmarshal: consumeInt32SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeSint32 returns the size of wire encoding a int32 pointer as a Sint32.\nfunc sizeSint32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Int32()\n\treturn f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))\n}\n\n// appendSint32 wire encodes a int32 pointer as a Sint32.\nfunc appendSint32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Int32()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))\n\treturn b, nil\n}\n\n// consumeSint32 wire decodes a int32 pointer as a Sint32.\nfunc consumeSint32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Int32() = int32(protowire.DecodeZigZag(v & math.MaxUint32))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderSint32 = pointerCoderFuncs{\n\tsize:      sizeSint32,\n\tmarshal:   appendSint32,\n\tunmarshal: consumeSint32,\n\tmerge:     mergeInt32,\n}\n\n// sizeSint32NoZero returns the size of wire encoding a int32 pointer as a Sint32.\n// The zero value is not encoded.\nfunc sizeSint32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Int32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))\n}\n\n// appendSint32NoZero wire encodes a int32 pointer as a Sint32.\n// The zero value is not encoded.\nfunc appendSint32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Int32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))\n\treturn b, nil\n}\n\nvar coderSint32NoZero = pointerCoderFuncs{\n\tsize:      sizeSint32NoZero,\n\tmarshal:   appendSint32NoZero,\n\tunmarshal: consumeSint32,\n\tmerge:     mergeInt32NoZero,\n}\n\n// sizeSint32Ptr returns the size of wire encoding a *int32 pointer as a Sint32.\n// It panics if the pointer is nil.\nfunc sizeSint32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := **p.Int32Ptr()\n\treturn f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))\n}\n\n// appendSint32Ptr wire encodes a *int32 pointer as a Sint32.\n// It panics if the pointer is nil.\nfunc appendSint32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.Int32Ptr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))\n\treturn b, nil\n}\n\n// consumeSint32Ptr wire decodes a *int32 pointer as a Sint32.\nfunc consumeSint32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvp := p.Int32Ptr()\n\tif *vp == nil {\n\t\t*vp = new(int32)\n\t}\n\t**vp = int32(protowire.DecodeZigZag(v & math.MaxUint32))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderSint32Ptr = pointerCoderFuncs{\n\tsize:      sizeSint32Ptr,\n\tmarshal:   appendSint32Ptr,\n\tunmarshal: consumeSint32Ptr,\n\tmerge:     mergeInt32Ptr,\n}\n\n// sizeSint32Slice returns the size of wire encoding a []int32 pointer as a repeated Sint32.\nfunc sizeSint32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Int32Slice()\n\tfor _, v := range s {\n\t\tsize += f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))\n\t}\n\treturn size\n}\n\n// appendSint32Slice encodes a []int32 pointer as a repeated Sint32.\nfunc appendSint32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Int32Slice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))\n\t}\n\treturn b, nil\n}\n\n// consumeSint32Slice wire decodes a []int32 pointer as a repeated Sint32.\nfunc consumeSint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.Int32Slice()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tcount := 0\n\t\tfor _, v := range b {\n\t\t\tif v < 0x80 {\n\t\t\t\tcount++\n\t\t\t}\n\t\t}\n\t\tif count > 0 {\n\t\t\tp.growInt32Slice(count)\n\t\t}\n\t\ts := *sp\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\ts = append(s, int32(protowire.DecodeZigZag(v&math.MaxUint32)))\n\t\t\tb = b[n:]\n\t\t}\n\t\t*sp = s\n\t\tout.n = n\n\t\treturn out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, int32(protowire.DecodeZigZag(v&math.MaxUint32)))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderSint32Slice = pointerCoderFuncs{\n\tsize:      sizeSint32Slice,\n\tmarshal:   appendSint32Slice,\n\tunmarshal: consumeSint32Slice,\n\tmerge:     mergeInt32Slice,\n}\n\n// sizeSint32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Sint32.\nfunc sizeSint32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Int32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))\n\t}\n\treturn f.tagsize + protowire.SizeBytes(n)\n}\n\n// appendSint32PackedSlice encodes a []int32 pointer as a packed repeated Sint32.\nfunc appendSint32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Int32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeVarint(protowire.EncodeZigZag(int64(v)))\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v)))\n\t}\n\treturn b, nil\n}\n\nvar coderSint32PackedSlice = pointerCoderFuncs{\n\tsize:      sizeSint32PackedSlice,\n\tmarshal:   appendSint32PackedSlice,\n\tunmarshal: consumeSint32Slice,\n\tmerge:     mergeInt32Slice,\n}\n\n// sizeSint32Value returns the size of wire encoding a int32 value as a Sint32.\nfunc sizeSint32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))\n}\n\n// appendSint32Value encodes a int32 value as a Sint32.\nfunc appendSint32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int()))))\n\treturn b, nil\n}\n\n// consumeSint32Value decodes a int32 value as a Sint32.\nfunc consumeSint32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))), out, nil\n}\n\nvar coderSint32Value = valueCoderFuncs{\n\tsize:      sizeSint32Value,\n\tmarshal:   appendSint32Value,\n\tunmarshal: consumeSint32Value,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeSint32SliceValue returns the size of wire encoding a []int32 value as a repeated Sint32.\nfunc sizeSint32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tsize += tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))\n\t}\n\treturn size\n}\n\n// appendSint32SliceValue encodes a []int32 value as a repeated Sint32.\nfunc appendSint32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int()))))\n\t}\n\treturn b, nil\n}\n\n// consumeSint32SliceValue wire decodes a []int32 value as a repeated Sint32.\nfunc consumeSint32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t}\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t\t}\n\t\t\tlist.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))))\n\t\t\tb = b[n:]\n\t\t}\n\t\tout.n = n\n\t\treturn listv, out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderSint32SliceValue = valueCoderFuncs{\n\tsize:      sizeSint32SliceValue,\n\tmarshal:   appendSint32SliceValue,\n\tunmarshal: consumeSint32SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeSint32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Sint32.\nfunc sizeSint32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor i, llen := 0, llen; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))\n\t}\n\treturn tagsize + protowire.SizeBytes(n)\n}\n\n// appendSint32PackedSliceValue encodes a []int32 value as a packed repeated Sint32.\nfunc appendSint32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, wiretag)\n\tn := 0\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int()))))\n\t}\n\treturn b, nil\n}\n\nvar coderSint32PackedSliceValue = valueCoderFuncs{\n\tsize:      sizeSint32PackedSliceValue,\n\tmarshal:   appendSint32PackedSliceValue,\n\tunmarshal: consumeSint32SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeUint32 returns the size of wire encoding a uint32 pointer as a Uint32.\nfunc sizeUint32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Uint32()\n\treturn f.tagsize + protowire.SizeVarint(uint64(v))\n}\n\n// appendUint32 wire encodes a uint32 pointer as a Uint32.\nfunc appendUint32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Uint32()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, uint64(v))\n\treturn b, nil\n}\n\n// consumeUint32 wire decodes a uint32 pointer as a Uint32.\nfunc consumeUint32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Uint32() = uint32(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderUint32 = pointerCoderFuncs{\n\tsize:      sizeUint32,\n\tmarshal:   appendUint32,\n\tunmarshal: consumeUint32,\n\tmerge:     mergeUint32,\n}\n\n// sizeUint32NoZero returns the size of wire encoding a uint32 pointer as a Uint32.\n// The zero value is not encoded.\nfunc sizeUint32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Uint32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeVarint(uint64(v))\n}\n\n// appendUint32NoZero wire encodes a uint32 pointer as a Uint32.\n// The zero value is not encoded.\nfunc appendUint32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Uint32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, uint64(v))\n\treturn b, nil\n}\n\nvar coderUint32NoZero = pointerCoderFuncs{\n\tsize:      sizeUint32NoZero,\n\tmarshal:   appendUint32NoZero,\n\tunmarshal: consumeUint32,\n\tmerge:     mergeUint32NoZero,\n}\n\n// sizeUint32Ptr returns the size of wire encoding a *uint32 pointer as a Uint32.\n// It panics if the pointer is nil.\nfunc sizeUint32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := **p.Uint32Ptr()\n\treturn f.tagsize + protowire.SizeVarint(uint64(v))\n}\n\n// appendUint32Ptr wire encodes a *uint32 pointer as a Uint32.\n// It panics if the pointer is nil.\nfunc appendUint32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.Uint32Ptr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, uint64(v))\n\treturn b, nil\n}\n\n// consumeUint32Ptr wire decodes a *uint32 pointer as a Uint32.\nfunc consumeUint32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvp := p.Uint32Ptr()\n\tif *vp == nil {\n\t\t*vp = new(uint32)\n\t}\n\t**vp = uint32(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderUint32Ptr = pointerCoderFuncs{\n\tsize:      sizeUint32Ptr,\n\tmarshal:   appendUint32Ptr,\n\tunmarshal: consumeUint32Ptr,\n\tmerge:     mergeUint32Ptr,\n}\n\n// sizeUint32Slice returns the size of wire encoding a []uint32 pointer as a repeated Uint32.\nfunc sizeUint32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Uint32Slice()\n\tfor _, v := range s {\n\t\tsize += f.tagsize + protowire.SizeVarint(uint64(v))\n\t}\n\treturn size\n}\n\n// appendUint32Slice encodes a []uint32 pointer as a repeated Uint32.\nfunc appendUint32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Uint32Slice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\n\n// consumeUint32Slice wire decodes a []uint32 pointer as a repeated Uint32.\nfunc consumeUint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.Uint32Slice()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tcount := 0\n\t\tfor _, v := range b {\n\t\t\tif v < 0x80 {\n\t\t\t\tcount++\n\t\t\t}\n\t\t}\n\t\tif count > 0 {\n\t\t\tp.growUint32Slice(count)\n\t\t}\n\t\ts := *sp\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\ts = append(s, uint32(v))\n\t\t\tb = b[n:]\n\t\t}\n\t\t*sp = s\n\t\tout.n = n\n\t\treturn out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, uint32(v))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderUint32Slice = pointerCoderFuncs{\n\tsize:      sizeUint32Slice,\n\tmarshal:   appendUint32Slice,\n\tunmarshal: consumeUint32Slice,\n\tmerge:     mergeUint32Slice,\n}\n\n// sizeUint32PackedSlice returns the size of wire encoding a []uint32 pointer as a packed repeated Uint32.\nfunc sizeUint32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Uint32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeVarint(uint64(v))\n\t}\n\treturn f.tagsize + protowire.SizeBytes(n)\n}\n\n// appendUint32PackedSlice encodes a []uint32 pointer as a packed repeated Uint32.\nfunc appendUint32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Uint32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeVarint(uint64(v))\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\n\nvar coderUint32PackedSlice = pointerCoderFuncs{\n\tsize:      sizeUint32PackedSlice,\n\tmarshal:   appendUint32PackedSlice,\n\tunmarshal: consumeUint32Slice,\n\tmerge:     mergeUint32Slice,\n}\n\n// sizeUint32Value returns the size of wire encoding a uint32 value as a Uint32.\nfunc sizeUint32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeVarint(uint64(uint32(v.Uint())))\n}\n\n// appendUint32Value encodes a uint32 value as a Uint32.\nfunc appendUint32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendVarint(b, uint64(uint32(v.Uint())))\n\treturn b, nil\n}\n\n// consumeUint32Value decodes a uint32 value as a Uint32.\nfunc consumeUint32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfUint32(uint32(v)), out, nil\n}\n\nvar coderUint32Value = valueCoderFuncs{\n\tsize:      sizeUint32Value,\n\tmarshal:   appendUint32Value,\n\tunmarshal: consumeUint32Value,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeUint32SliceValue returns the size of wire encoding a []uint32 value as a repeated Uint32.\nfunc sizeUint32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tsize += tagsize + protowire.SizeVarint(uint64(uint32(v.Uint())))\n\t}\n\treturn size\n}\n\n// appendUint32SliceValue encodes a []uint32 value as a repeated Uint32.\nfunc appendUint32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendVarint(b, uint64(uint32(v.Uint())))\n\t}\n\treturn b, nil\n}\n\n// consumeUint32SliceValue wire decodes a []uint32 value as a repeated Uint32.\nfunc consumeUint32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t}\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t\t}\n\t\t\tlist.Append(protoreflect.ValueOfUint32(uint32(v)))\n\t\t\tb = b[n:]\n\t\t}\n\t\tout.n = n\n\t\treturn listv, out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfUint32(uint32(v)))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderUint32SliceValue = valueCoderFuncs{\n\tsize:      sizeUint32SliceValue,\n\tmarshal:   appendUint32SliceValue,\n\tunmarshal: consumeUint32SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeUint32PackedSliceValue returns the size of wire encoding a []uint32 value as a packed repeated Uint32.\nfunc sizeUint32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor i, llen := 0, llen; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(uint64(uint32(v.Uint())))\n\t}\n\treturn tagsize + protowire.SizeBytes(n)\n}\n\n// appendUint32PackedSliceValue encodes a []uint32 value as a packed repeated Uint32.\nfunc appendUint32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, wiretag)\n\tn := 0\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(uint64(uint32(v.Uint())))\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, uint64(uint32(v.Uint())))\n\t}\n\treturn b, nil\n}\n\nvar coderUint32PackedSliceValue = valueCoderFuncs{\n\tsize:      sizeUint32PackedSliceValue,\n\tmarshal:   appendUint32PackedSliceValue,\n\tunmarshal: consumeUint32SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeInt64 returns the size of wire encoding a int64 pointer as a Int64.\nfunc sizeInt64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Int64()\n\treturn f.tagsize + protowire.SizeVarint(uint64(v))\n}\n\n// appendInt64 wire encodes a int64 pointer as a Int64.\nfunc appendInt64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Int64()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, uint64(v))\n\treturn b, nil\n}\n\n// consumeInt64 wire decodes a int64 pointer as a Int64.\nfunc consumeInt64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Int64() = int64(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderInt64 = pointerCoderFuncs{\n\tsize:      sizeInt64,\n\tmarshal:   appendInt64,\n\tunmarshal: consumeInt64,\n\tmerge:     mergeInt64,\n}\n\n// sizeInt64NoZero returns the size of wire encoding a int64 pointer as a Int64.\n// The zero value is not encoded.\nfunc sizeInt64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Int64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeVarint(uint64(v))\n}\n\n// appendInt64NoZero wire encodes a int64 pointer as a Int64.\n// The zero value is not encoded.\nfunc appendInt64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Int64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, uint64(v))\n\treturn b, nil\n}\n\nvar coderInt64NoZero = pointerCoderFuncs{\n\tsize:      sizeInt64NoZero,\n\tmarshal:   appendInt64NoZero,\n\tunmarshal: consumeInt64,\n\tmerge:     mergeInt64NoZero,\n}\n\n// sizeInt64Ptr returns the size of wire encoding a *int64 pointer as a Int64.\n// It panics if the pointer is nil.\nfunc sizeInt64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := **p.Int64Ptr()\n\treturn f.tagsize + protowire.SizeVarint(uint64(v))\n}\n\n// appendInt64Ptr wire encodes a *int64 pointer as a Int64.\n// It panics if the pointer is nil.\nfunc appendInt64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.Int64Ptr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, uint64(v))\n\treturn b, nil\n}\n\n// consumeInt64Ptr wire decodes a *int64 pointer as a Int64.\nfunc consumeInt64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvp := p.Int64Ptr()\n\tif *vp == nil {\n\t\t*vp = new(int64)\n\t}\n\t**vp = int64(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderInt64Ptr = pointerCoderFuncs{\n\tsize:      sizeInt64Ptr,\n\tmarshal:   appendInt64Ptr,\n\tunmarshal: consumeInt64Ptr,\n\tmerge:     mergeInt64Ptr,\n}\n\n// sizeInt64Slice returns the size of wire encoding a []int64 pointer as a repeated Int64.\nfunc sizeInt64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Int64Slice()\n\tfor _, v := range s {\n\t\tsize += f.tagsize + protowire.SizeVarint(uint64(v))\n\t}\n\treturn size\n}\n\n// appendInt64Slice encodes a []int64 pointer as a repeated Int64.\nfunc appendInt64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Int64Slice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\n\n// consumeInt64Slice wire decodes a []int64 pointer as a repeated Int64.\nfunc consumeInt64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.Int64Slice()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tcount := 0\n\t\tfor _, v := range b {\n\t\t\tif v < 0x80 {\n\t\t\t\tcount++\n\t\t\t}\n\t\t}\n\t\tif count > 0 {\n\t\t\tp.growInt64Slice(count)\n\t\t}\n\t\ts := *sp\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\ts = append(s, int64(v))\n\t\t\tb = b[n:]\n\t\t}\n\t\t*sp = s\n\t\tout.n = n\n\t\treturn out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, int64(v))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderInt64Slice = pointerCoderFuncs{\n\tsize:      sizeInt64Slice,\n\tmarshal:   appendInt64Slice,\n\tunmarshal: consumeInt64Slice,\n\tmerge:     mergeInt64Slice,\n}\n\n// sizeInt64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Int64.\nfunc sizeInt64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Int64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeVarint(uint64(v))\n\t}\n\treturn f.tagsize + protowire.SizeBytes(n)\n}\n\n// appendInt64PackedSlice encodes a []int64 pointer as a packed repeated Int64.\nfunc appendInt64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Int64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeVarint(uint64(v))\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\n\nvar coderInt64PackedSlice = pointerCoderFuncs{\n\tsize:      sizeInt64PackedSlice,\n\tmarshal:   appendInt64PackedSlice,\n\tunmarshal: consumeInt64Slice,\n\tmerge:     mergeInt64Slice,\n}\n\n// sizeInt64Value returns the size of wire encoding a int64 value as a Int64.\nfunc sizeInt64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeVarint(uint64(v.Int()))\n}\n\n// appendInt64Value encodes a int64 value as a Int64.\nfunc appendInt64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendVarint(b, uint64(v.Int()))\n\treturn b, nil\n}\n\n// consumeInt64Value decodes a int64 value as a Int64.\nfunc consumeInt64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfInt64(int64(v)), out, nil\n}\n\nvar coderInt64Value = valueCoderFuncs{\n\tsize:      sizeInt64Value,\n\tmarshal:   appendInt64Value,\n\tunmarshal: consumeInt64Value,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeInt64SliceValue returns the size of wire encoding a []int64 value as a repeated Int64.\nfunc sizeInt64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tsize += tagsize + protowire.SizeVarint(uint64(v.Int()))\n\t}\n\treturn size\n}\n\n// appendInt64SliceValue encodes a []int64 value as a repeated Int64.\nfunc appendInt64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendVarint(b, uint64(v.Int()))\n\t}\n\treturn b, nil\n}\n\n// consumeInt64SliceValue wire decodes a []int64 value as a repeated Int64.\nfunc consumeInt64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t}\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t\t}\n\t\t\tlist.Append(protoreflect.ValueOfInt64(int64(v)))\n\t\t\tb = b[n:]\n\t\t}\n\t\tout.n = n\n\t\treturn listv, out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfInt64(int64(v)))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderInt64SliceValue = valueCoderFuncs{\n\tsize:      sizeInt64SliceValue,\n\tmarshal:   appendInt64SliceValue,\n\tunmarshal: consumeInt64SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeInt64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Int64.\nfunc sizeInt64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor i, llen := 0, llen; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(uint64(v.Int()))\n\t}\n\treturn tagsize + protowire.SizeBytes(n)\n}\n\n// appendInt64PackedSliceValue encodes a []int64 value as a packed repeated Int64.\nfunc appendInt64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, wiretag)\n\tn := 0\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(uint64(v.Int()))\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, uint64(v.Int()))\n\t}\n\treturn b, nil\n}\n\nvar coderInt64PackedSliceValue = valueCoderFuncs{\n\tsize:      sizeInt64PackedSliceValue,\n\tmarshal:   appendInt64PackedSliceValue,\n\tunmarshal: consumeInt64SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeSint64 returns the size of wire encoding a int64 pointer as a Sint64.\nfunc sizeSint64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Int64()\n\treturn f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v))\n}\n\n// appendSint64 wire encodes a int64 pointer as a Sint64.\nfunc appendSint64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Int64()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(v))\n\treturn b, nil\n}\n\n// consumeSint64 wire decodes a int64 pointer as a Sint64.\nfunc consumeSint64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Int64() = protowire.DecodeZigZag(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderSint64 = pointerCoderFuncs{\n\tsize:      sizeSint64,\n\tmarshal:   appendSint64,\n\tunmarshal: consumeSint64,\n\tmerge:     mergeInt64,\n}\n\n// sizeSint64NoZero returns the size of wire encoding a int64 pointer as a Sint64.\n// The zero value is not encoded.\nfunc sizeSint64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Int64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v))\n}\n\n// appendSint64NoZero wire encodes a int64 pointer as a Sint64.\n// The zero value is not encoded.\nfunc appendSint64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Int64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(v))\n\treturn b, nil\n}\n\nvar coderSint64NoZero = pointerCoderFuncs{\n\tsize:      sizeSint64NoZero,\n\tmarshal:   appendSint64NoZero,\n\tunmarshal: consumeSint64,\n\tmerge:     mergeInt64NoZero,\n}\n\n// sizeSint64Ptr returns the size of wire encoding a *int64 pointer as a Sint64.\n// It panics if the pointer is nil.\nfunc sizeSint64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := **p.Int64Ptr()\n\treturn f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v))\n}\n\n// appendSint64Ptr wire encodes a *int64 pointer as a Sint64.\n// It panics if the pointer is nil.\nfunc appendSint64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.Int64Ptr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(v))\n\treturn b, nil\n}\n\n// consumeSint64Ptr wire decodes a *int64 pointer as a Sint64.\nfunc consumeSint64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvp := p.Int64Ptr()\n\tif *vp == nil {\n\t\t*vp = new(int64)\n\t}\n\t**vp = protowire.DecodeZigZag(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderSint64Ptr = pointerCoderFuncs{\n\tsize:      sizeSint64Ptr,\n\tmarshal:   appendSint64Ptr,\n\tunmarshal: consumeSint64Ptr,\n\tmerge:     mergeInt64Ptr,\n}\n\n// sizeSint64Slice returns the size of wire encoding a []int64 pointer as a repeated Sint64.\nfunc sizeSint64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Int64Slice()\n\tfor _, v := range s {\n\t\tsize += f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v))\n\t}\n\treturn size\n}\n\n// appendSint64Slice encodes a []int64 pointer as a repeated Sint64.\nfunc appendSint64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Int64Slice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(v))\n\t}\n\treturn b, nil\n}\n\n// consumeSint64Slice wire decodes a []int64 pointer as a repeated Sint64.\nfunc consumeSint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.Int64Slice()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tcount := 0\n\t\tfor _, v := range b {\n\t\t\tif v < 0x80 {\n\t\t\t\tcount++\n\t\t\t}\n\t\t}\n\t\tif count > 0 {\n\t\t\tp.growInt64Slice(count)\n\t\t}\n\t\ts := *sp\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\ts = append(s, protowire.DecodeZigZag(v))\n\t\t\tb = b[n:]\n\t\t}\n\t\t*sp = s\n\t\tout.n = n\n\t\treturn out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, protowire.DecodeZigZag(v))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderSint64Slice = pointerCoderFuncs{\n\tsize:      sizeSint64Slice,\n\tmarshal:   appendSint64Slice,\n\tunmarshal: consumeSint64Slice,\n\tmerge:     mergeInt64Slice,\n}\n\n// sizeSint64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Sint64.\nfunc sizeSint64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Int64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeVarint(protowire.EncodeZigZag(v))\n\t}\n\treturn f.tagsize + protowire.SizeBytes(n)\n}\n\n// appendSint64PackedSlice encodes a []int64 pointer as a packed repeated Sint64.\nfunc appendSint64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Int64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeVarint(protowire.EncodeZigZag(v))\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(v))\n\t}\n\treturn b, nil\n}\n\nvar coderSint64PackedSlice = pointerCoderFuncs{\n\tsize:      sizeSint64PackedSlice,\n\tmarshal:   appendSint64PackedSlice,\n\tunmarshal: consumeSint64Slice,\n\tmerge:     mergeInt64Slice,\n}\n\n// sizeSint64Value returns the size of wire encoding a int64 value as a Sint64.\nfunc sizeSint64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))\n}\n\n// appendSint64Value encodes a int64 value as a Sint64.\nfunc appendSint64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int()))\n\treturn b, nil\n}\n\n// consumeSint64Value decodes a int64 value as a Sint64.\nfunc consumeSint64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)), out, nil\n}\n\nvar coderSint64Value = valueCoderFuncs{\n\tsize:      sizeSint64Value,\n\tmarshal:   appendSint64Value,\n\tunmarshal: consumeSint64Value,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeSint64SliceValue returns the size of wire encoding a []int64 value as a repeated Sint64.\nfunc sizeSint64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tsize += tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))\n\t}\n\treturn size\n}\n\n// appendSint64SliceValue encodes a []int64 value as a repeated Sint64.\nfunc appendSint64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int()))\n\t}\n\treturn b, nil\n}\n\n// consumeSint64SliceValue wire decodes a []int64 value as a repeated Sint64.\nfunc consumeSint64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t}\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t\t}\n\t\t\tlist.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)))\n\t\t\tb = b[n:]\n\t\t}\n\t\tout.n = n\n\t\treturn listv, out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderSint64SliceValue = valueCoderFuncs{\n\tsize:      sizeSint64SliceValue,\n\tmarshal:   appendSint64SliceValue,\n\tunmarshal: consumeSint64SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeSint64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Sint64.\nfunc sizeSint64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor i, llen := 0, llen; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))\n\t}\n\treturn tagsize + protowire.SizeBytes(n)\n}\n\n// appendSint64PackedSliceValue encodes a []int64 value as a packed repeated Sint64.\nfunc appendSint64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, wiretag)\n\tn := 0\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int()))\n\t}\n\treturn b, nil\n}\n\nvar coderSint64PackedSliceValue = valueCoderFuncs{\n\tsize:      sizeSint64PackedSliceValue,\n\tmarshal:   appendSint64PackedSliceValue,\n\tunmarshal: consumeSint64SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeUint64 returns the size of wire encoding a uint64 pointer as a Uint64.\nfunc sizeUint64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Uint64()\n\treturn f.tagsize + protowire.SizeVarint(v)\n}\n\n// appendUint64 wire encodes a uint64 pointer as a Uint64.\nfunc appendUint64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Uint64()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, v)\n\treturn b, nil\n}\n\n// consumeUint64 wire decodes a uint64 pointer as a Uint64.\nfunc consumeUint64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Uint64() = v\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderUint64 = pointerCoderFuncs{\n\tsize:      sizeUint64,\n\tmarshal:   appendUint64,\n\tunmarshal: consumeUint64,\n\tmerge:     mergeUint64,\n}\n\n// sizeUint64NoZero returns the size of wire encoding a uint64 pointer as a Uint64.\n// The zero value is not encoded.\nfunc sizeUint64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Uint64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeVarint(v)\n}\n\n// appendUint64NoZero wire encodes a uint64 pointer as a Uint64.\n// The zero value is not encoded.\nfunc appendUint64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Uint64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, v)\n\treturn b, nil\n}\n\nvar coderUint64NoZero = pointerCoderFuncs{\n\tsize:      sizeUint64NoZero,\n\tmarshal:   appendUint64NoZero,\n\tunmarshal: consumeUint64,\n\tmerge:     mergeUint64NoZero,\n}\n\n// sizeUint64Ptr returns the size of wire encoding a *uint64 pointer as a Uint64.\n// It panics if the pointer is nil.\nfunc sizeUint64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := **p.Uint64Ptr()\n\treturn f.tagsize + protowire.SizeVarint(v)\n}\n\n// appendUint64Ptr wire encodes a *uint64 pointer as a Uint64.\n// It panics if the pointer is nil.\nfunc appendUint64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.Uint64Ptr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendVarint(b, v)\n\treturn b, nil\n}\n\n// consumeUint64Ptr wire decodes a *uint64 pointer as a Uint64.\nfunc consumeUint64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvp := p.Uint64Ptr()\n\tif *vp == nil {\n\t\t*vp = new(uint64)\n\t}\n\t**vp = v\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderUint64Ptr = pointerCoderFuncs{\n\tsize:      sizeUint64Ptr,\n\tmarshal:   appendUint64Ptr,\n\tunmarshal: consumeUint64Ptr,\n\tmerge:     mergeUint64Ptr,\n}\n\n// sizeUint64Slice returns the size of wire encoding a []uint64 pointer as a repeated Uint64.\nfunc sizeUint64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Uint64Slice()\n\tfor _, v := range s {\n\t\tsize += f.tagsize + protowire.SizeVarint(v)\n\t}\n\treturn size\n}\n\n// appendUint64Slice encodes a []uint64 pointer as a repeated Uint64.\nfunc appendUint64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Uint64Slice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendVarint(b, v)\n\t}\n\treturn b, nil\n}\n\n// consumeUint64Slice wire decodes a []uint64 pointer as a repeated Uint64.\nfunc consumeUint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.Uint64Slice()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tcount := 0\n\t\tfor _, v := range b {\n\t\t\tif v < 0x80 {\n\t\t\t\tcount++\n\t\t\t}\n\t\t}\n\t\tif count > 0 {\n\t\t\tp.growUint64Slice(count)\n\t\t}\n\t\ts := *sp\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\ts = append(s, v)\n\t\t\tb = b[n:]\n\t\t}\n\t\t*sp = s\n\t\tout.n = n\n\t\treturn out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderUint64Slice = pointerCoderFuncs{\n\tsize:      sizeUint64Slice,\n\tmarshal:   appendUint64Slice,\n\tunmarshal: consumeUint64Slice,\n\tmerge:     mergeUint64Slice,\n}\n\n// sizeUint64PackedSlice returns the size of wire encoding a []uint64 pointer as a packed repeated Uint64.\nfunc sizeUint64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Uint64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeVarint(v)\n\t}\n\treturn f.tagsize + protowire.SizeBytes(n)\n}\n\n// appendUint64PackedSlice encodes a []uint64 pointer as a packed repeated Uint64.\nfunc appendUint64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Uint64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tn := 0\n\tfor _, v := range s {\n\t\tn += protowire.SizeVarint(v)\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, v)\n\t}\n\treturn b, nil\n}\n\nvar coderUint64PackedSlice = pointerCoderFuncs{\n\tsize:      sizeUint64PackedSlice,\n\tmarshal:   appendUint64PackedSlice,\n\tunmarshal: consumeUint64Slice,\n\tmerge:     mergeUint64Slice,\n}\n\n// sizeUint64Value returns the size of wire encoding a uint64 value as a Uint64.\nfunc sizeUint64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeVarint(v.Uint())\n}\n\n// appendUint64Value encodes a uint64 value as a Uint64.\nfunc appendUint64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendVarint(b, v.Uint())\n\treturn b, nil\n}\n\n// consumeUint64Value decodes a uint64 value as a Uint64.\nfunc consumeUint64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfUint64(v), out, nil\n}\n\nvar coderUint64Value = valueCoderFuncs{\n\tsize:      sizeUint64Value,\n\tmarshal:   appendUint64Value,\n\tunmarshal: consumeUint64Value,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeUint64SliceValue returns the size of wire encoding a []uint64 value as a repeated Uint64.\nfunc sizeUint64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tsize += tagsize + protowire.SizeVarint(v.Uint())\n\t}\n\treturn size\n}\n\n// appendUint64SliceValue encodes a []uint64 value as a repeated Uint64.\nfunc appendUint64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendVarint(b, v.Uint())\n\t}\n\treturn b, nil\n}\n\n// consumeUint64SliceValue wire decodes a []uint64 value as a repeated Uint64.\nfunc consumeUint64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t}\n\t\tfor len(b) > 0 {\n\t\t\tvar v uint64\n\t\t\tvar n int\n\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\tv = uint64(b[0])\n\t\t\t\tn = 1\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tn = 2\n\t\t\t} else {\n\t\t\t\tv, n = protowire.ConsumeVarint(b)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t\t}\n\t\t\tlist.Append(protoreflect.ValueOfUint64(v))\n\t\t\tb = b[n:]\n\t\t}\n\t\tout.n = n\n\t\treturn listv, out, nil\n\t}\n\tif wtyp != protowire.VarintType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tvar v uint64\n\tvar n int\n\tif len(b) >= 1 && b[0] < 0x80 {\n\t\tv = uint64(b[0])\n\t\tn = 1\n\t} else if len(b) >= 2 && b[1] < 128 {\n\t\tv = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\tn = 2\n\t} else {\n\t\tv, n = protowire.ConsumeVarint(b)\n\t}\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfUint64(v))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderUint64SliceValue = valueCoderFuncs{\n\tsize:      sizeUint64SliceValue,\n\tmarshal:   appendUint64SliceValue,\n\tunmarshal: consumeUint64SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeUint64PackedSliceValue returns the size of wire encoding a []uint64 value as a packed repeated Uint64.\nfunc sizeUint64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor i, llen := 0, llen; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(v.Uint())\n\t}\n\treturn tagsize + protowire.SizeBytes(n)\n}\n\n// appendUint64PackedSliceValue encodes a []uint64 value as a packed repeated Uint64.\nfunc appendUint64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, wiretag)\n\tn := 0\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tn += protowire.SizeVarint(v.Uint())\n\t}\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, v.Uint())\n\t}\n\treturn b, nil\n}\n\nvar coderUint64PackedSliceValue = valueCoderFuncs{\n\tsize:      sizeUint64PackedSliceValue,\n\tmarshal:   appendUint64PackedSliceValue,\n\tunmarshal: consumeUint64SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeSfixed32 returns the size of wire encoding a int32 pointer as a Sfixed32.\nfunc sizeSfixed32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\n\treturn f.tagsize + protowire.SizeFixed32()\n}\n\n// appendSfixed32 wire encodes a int32 pointer as a Sfixed32.\nfunc appendSfixed32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Int32()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed32(b, uint32(v))\n\treturn b, nil\n}\n\n// consumeSfixed32 wire decodes a int32 pointer as a Sfixed32.\nfunc consumeSfixed32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Int32() = int32(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderSfixed32 = pointerCoderFuncs{\n\tsize:      sizeSfixed32,\n\tmarshal:   appendSfixed32,\n\tunmarshal: consumeSfixed32,\n\tmerge:     mergeInt32,\n}\n\n// sizeSfixed32NoZero returns the size of wire encoding a int32 pointer as a Sfixed32.\n// The zero value is not encoded.\nfunc sizeSfixed32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Int32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeFixed32()\n}\n\n// appendSfixed32NoZero wire encodes a int32 pointer as a Sfixed32.\n// The zero value is not encoded.\nfunc appendSfixed32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Int32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed32(b, uint32(v))\n\treturn b, nil\n}\n\nvar coderSfixed32NoZero = pointerCoderFuncs{\n\tsize:      sizeSfixed32NoZero,\n\tmarshal:   appendSfixed32NoZero,\n\tunmarshal: consumeSfixed32,\n\tmerge:     mergeInt32NoZero,\n}\n\n// sizeSfixed32Ptr returns the size of wire encoding a *int32 pointer as a Sfixed32.\n// It panics if the pointer is nil.\nfunc sizeSfixed32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\treturn f.tagsize + protowire.SizeFixed32()\n}\n\n// appendSfixed32Ptr wire encodes a *int32 pointer as a Sfixed32.\n// It panics if the pointer is nil.\nfunc appendSfixed32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.Int32Ptr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed32(b, uint32(v))\n\treturn b, nil\n}\n\n// consumeSfixed32Ptr wire decodes a *int32 pointer as a Sfixed32.\nfunc consumeSfixed32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvp := p.Int32Ptr()\n\tif *vp == nil {\n\t\t*vp = new(int32)\n\t}\n\t**vp = int32(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderSfixed32Ptr = pointerCoderFuncs{\n\tsize:      sizeSfixed32Ptr,\n\tmarshal:   appendSfixed32Ptr,\n\tunmarshal: consumeSfixed32Ptr,\n\tmerge:     mergeInt32Ptr,\n}\n\n// sizeSfixed32Slice returns the size of wire encoding a []int32 pointer as a repeated Sfixed32.\nfunc sizeSfixed32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Int32Slice()\n\tsize = len(s) * (f.tagsize + protowire.SizeFixed32())\n\treturn size\n}\n\n// appendSfixed32Slice encodes a []int32 pointer as a repeated Sfixed32.\nfunc appendSfixed32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Int32Slice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendFixed32(b, uint32(v))\n\t}\n\treturn b, nil\n}\n\n// consumeSfixed32Slice wire decodes a []int32 pointer as a repeated Sfixed32.\nfunc consumeSfixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.Int32Slice()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tcount := len(b) / protowire.SizeFixed32()\n\t\tif count > 0 {\n\t\t\tp.growInt32Slice(count)\n\t\t}\n\t\ts := *sp\n\t\tfor len(b) > 0 {\n\t\t\tv, n := protowire.ConsumeFixed32(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\ts = append(s, int32(v))\n\t\t\tb = b[n:]\n\t\t}\n\t\t*sp = s\n\t\tout.n = n\n\t\treturn out, nil\n\t}\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, int32(v))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderSfixed32Slice = pointerCoderFuncs{\n\tsize:      sizeSfixed32Slice,\n\tmarshal:   appendSfixed32Slice,\n\tunmarshal: consumeSfixed32Slice,\n\tmerge:     mergeInt32Slice,\n}\n\n// sizeSfixed32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Sfixed32.\nfunc sizeSfixed32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Int32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := len(s) * protowire.SizeFixed32()\n\treturn f.tagsize + protowire.SizeBytes(n)\n}\n\n// appendSfixed32PackedSlice encodes a []int32 pointer as a packed repeated Sfixed32.\nfunc appendSfixed32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Int32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tn := len(s) * protowire.SizeFixed32()\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = protowire.AppendFixed32(b, uint32(v))\n\t}\n\treturn b, nil\n}\n\nvar coderSfixed32PackedSlice = pointerCoderFuncs{\n\tsize:      sizeSfixed32PackedSlice,\n\tmarshal:   appendSfixed32PackedSlice,\n\tunmarshal: consumeSfixed32Slice,\n\tmerge:     mergeInt32Slice,\n}\n\n// sizeSfixed32Value returns the size of wire encoding a int32 value as a Sfixed32.\nfunc sizeSfixed32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeFixed32()\n}\n\n// appendSfixed32Value encodes a int32 value as a Sfixed32.\nfunc appendSfixed32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendFixed32(b, uint32(v.Int()))\n\treturn b, nil\n}\n\n// consumeSfixed32Value decodes a int32 value as a Sfixed32.\nfunc consumeSfixed32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfInt32(int32(v)), out, nil\n}\n\nvar coderSfixed32Value = valueCoderFuncs{\n\tsize:      sizeSfixed32Value,\n\tmarshal:   appendSfixed32Value,\n\tunmarshal: consumeSfixed32Value,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeSfixed32SliceValue returns the size of wire encoding a []int32 value as a repeated Sfixed32.\nfunc sizeSfixed32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tsize = list.Len() * (tagsize + protowire.SizeFixed32())\n\treturn size\n}\n\n// appendSfixed32SliceValue encodes a []int32 value as a repeated Sfixed32.\nfunc appendSfixed32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendFixed32(b, uint32(v.Int()))\n\t}\n\treturn b, nil\n}\n\n// consumeSfixed32SliceValue wire decodes a []int32 value as a repeated Sfixed32.\nfunc consumeSfixed32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t}\n\t\tfor len(b) > 0 {\n\t\t\tv, n := protowire.ConsumeFixed32(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t\t}\n\t\t\tlist.Append(protoreflect.ValueOfInt32(int32(v)))\n\t\t\tb = b[n:]\n\t\t}\n\t\tout.n = n\n\t\treturn listv, out, nil\n\t}\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfInt32(int32(v)))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderSfixed32SliceValue = valueCoderFuncs{\n\tsize:      sizeSfixed32SliceValue,\n\tmarshal:   appendSfixed32SliceValue,\n\tunmarshal: consumeSfixed32SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeSfixed32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Sfixed32.\nfunc sizeSfixed32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn 0\n\t}\n\tn := llen * protowire.SizeFixed32()\n\treturn tagsize + protowire.SizeBytes(n)\n}\n\n// appendSfixed32PackedSliceValue encodes a []int32 value as a packed repeated Sfixed32.\nfunc appendSfixed32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, wiretag)\n\tn := llen * protowire.SizeFixed32()\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendFixed32(b, uint32(v.Int()))\n\t}\n\treturn b, nil\n}\n\nvar coderSfixed32PackedSliceValue = valueCoderFuncs{\n\tsize:      sizeSfixed32PackedSliceValue,\n\tmarshal:   appendSfixed32PackedSliceValue,\n\tunmarshal: consumeSfixed32SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeFixed32 returns the size of wire encoding a uint32 pointer as a Fixed32.\nfunc sizeFixed32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\n\treturn f.tagsize + protowire.SizeFixed32()\n}\n\n// appendFixed32 wire encodes a uint32 pointer as a Fixed32.\nfunc appendFixed32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Uint32()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed32(b, v)\n\treturn b, nil\n}\n\n// consumeFixed32 wire decodes a uint32 pointer as a Fixed32.\nfunc consumeFixed32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Uint32() = v\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderFixed32 = pointerCoderFuncs{\n\tsize:      sizeFixed32,\n\tmarshal:   appendFixed32,\n\tunmarshal: consumeFixed32,\n\tmerge:     mergeUint32,\n}\n\n// sizeFixed32NoZero returns the size of wire encoding a uint32 pointer as a Fixed32.\n// The zero value is not encoded.\nfunc sizeFixed32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Uint32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeFixed32()\n}\n\n// appendFixed32NoZero wire encodes a uint32 pointer as a Fixed32.\n// The zero value is not encoded.\nfunc appendFixed32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Uint32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed32(b, v)\n\treturn b, nil\n}\n\nvar coderFixed32NoZero = pointerCoderFuncs{\n\tsize:      sizeFixed32NoZero,\n\tmarshal:   appendFixed32NoZero,\n\tunmarshal: consumeFixed32,\n\tmerge:     mergeUint32NoZero,\n}\n\n// sizeFixed32Ptr returns the size of wire encoding a *uint32 pointer as a Fixed32.\n// It panics if the pointer is nil.\nfunc sizeFixed32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\treturn f.tagsize + protowire.SizeFixed32()\n}\n\n// appendFixed32Ptr wire encodes a *uint32 pointer as a Fixed32.\n// It panics if the pointer is nil.\nfunc appendFixed32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.Uint32Ptr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed32(b, v)\n\treturn b, nil\n}\n\n// consumeFixed32Ptr wire decodes a *uint32 pointer as a Fixed32.\nfunc consumeFixed32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvp := p.Uint32Ptr()\n\tif *vp == nil {\n\t\t*vp = new(uint32)\n\t}\n\t**vp = v\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderFixed32Ptr = pointerCoderFuncs{\n\tsize:      sizeFixed32Ptr,\n\tmarshal:   appendFixed32Ptr,\n\tunmarshal: consumeFixed32Ptr,\n\tmerge:     mergeUint32Ptr,\n}\n\n// sizeFixed32Slice returns the size of wire encoding a []uint32 pointer as a repeated Fixed32.\nfunc sizeFixed32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Uint32Slice()\n\tsize = len(s) * (f.tagsize + protowire.SizeFixed32())\n\treturn size\n}\n\n// appendFixed32Slice encodes a []uint32 pointer as a repeated Fixed32.\nfunc appendFixed32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Uint32Slice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendFixed32(b, v)\n\t}\n\treturn b, nil\n}\n\n// consumeFixed32Slice wire decodes a []uint32 pointer as a repeated Fixed32.\nfunc consumeFixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.Uint32Slice()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tcount := len(b) / protowire.SizeFixed32()\n\t\tif count > 0 {\n\t\t\tp.growUint32Slice(count)\n\t\t}\n\t\ts := *sp\n\t\tfor len(b) > 0 {\n\t\t\tv, n := protowire.ConsumeFixed32(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\ts = append(s, v)\n\t\t\tb = b[n:]\n\t\t}\n\t\t*sp = s\n\t\tout.n = n\n\t\treturn out, nil\n\t}\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderFixed32Slice = pointerCoderFuncs{\n\tsize:      sizeFixed32Slice,\n\tmarshal:   appendFixed32Slice,\n\tunmarshal: consumeFixed32Slice,\n\tmerge:     mergeUint32Slice,\n}\n\n// sizeFixed32PackedSlice returns the size of wire encoding a []uint32 pointer as a packed repeated Fixed32.\nfunc sizeFixed32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Uint32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := len(s) * protowire.SizeFixed32()\n\treturn f.tagsize + protowire.SizeBytes(n)\n}\n\n// appendFixed32PackedSlice encodes a []uint32 pointer as a packed repeated Fixed32.\nfunc appendFixed32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Uint32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tn := len(s) * protowire.SizeFixed32()\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = protowire.AppendFixed32(b, v)\n\t}\n\treturn b, nil\n}\n\nvar coderFixed32PackedSlice = pointerCoderFuncs{\n\tsize:      sizeFixed32PackedSlice,\n\tmarshal:   appendFixed32PackedSlice,\n\tunmarshal: consumeFixed32Slice,\n\tmerge:     mergeUint32Slice,\n}\n\n// sizeFixed32Value returns the size of wire encoding a uint32 value as a Fixed32.\nfunc sizeFixed32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeFixed32()\n}\n\n// appendFixed32Value encodes a uint32 value as a Fixed32.\nfunc appendFixed32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendFixed32(b, uint32(v.Uint()))\n\treturn b, nil\n}\n\n// consumeFixed32Value decodes a uint32 value as a Fixed32.\nfunc consumeFixed32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfUint32(uint32(v)), out, nil\n}\n\nvar coderFixed32Value = valueCoderFuncs{\n\tsize:      sizeFixed32Value,\n\tmarshal:   appendFixed32Value,\n\tunmarshal: consumeFixed32Value,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeFixed32SliceValue returns the size of wire encoding a []uint32 value as a repeated Fixed32.\nfunc sizeFixed32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tsize = list.Len() * (tagsize + protowire.SizeFixed32())\n\treturn size\n}\n\n// appendFixed32SliceValue encodes a []uint32 value as a repeated Fixed32.\nfunc appendFixed32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendFixed32(b, uint32(v.Uint()))\n\t}\n\treturn b, nil\n}\n\n// consumeFixed32SliceValue wire decodes a []uint32 value as a repeated Fixed32.\nfunc consumeFixed32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t}\n\t\tfor len(b) > 0 {\n\t\t\tv, n := protowire.ConsumeFixed32(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t\t}\n\t\t\tlist.Append(protoreflect.ValueOfUint32(uint32(v)))\n\t\t\tb = b[n:]\n\t\t}\n\t\tout.n = n\n\t\treturn listv, out, nil\n\t}\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfUint32(uint32(v)))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderFixed32SliceValue = valueCoderFuncs{\n\tsize:      sizeFixed32SliceValue,\n\tmarshal:   appendFixed32SliceValue,\n\tunmarshal: consumeFixed32SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeFixed32PackedSliceValue returns the size of wire encoding a []uint32 value as a packed repeated Fixed32.\nfunc sizeFixed32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn 0\n\t}\n\tn := llen * protowire.SizeFixed32()\n\treturn tagsize + protowire.SizeBytes(n)\n}\n\n// appendFixed32PackedSliceValue encodes a []uint32 value as a packed repeated Fixed32.\nfunc appendFixed32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, wiretag)\n\tn := llen * protowire.SizeFixed32()\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendFixed32(b, uint32(v.Uint()))\n\t}\n\treturn b, nil\n}\n\nvar coderFixed32PackedSliceValue = valueCoderFuncs{\n\tsize:      sizeFixed32PackedSliceValue,\n\tmarshal:   appendFixed32PackedSliceValue,\n\tunmarshal: consumeFixed32SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeFloat returns the size of wire encoding a float32 pointer as a Float.\nfunc sizeFloat(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\n\treturn f.tagsize + protowire.SizeFixed32()\n}\n\n// appendFloat wire encodes a float32 pointer as a Float.\nfunc appendFloat(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Float32()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed32(b, math.Float32bits(v))\n\treturn b, nil\n}\n\n// consumeFloat wire decodes a float32 pointer as a Float.\nfunc consumeFloat(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Float32() = math.Float32frombits(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderFloat = pointerCoderFuncs{\n\tsize:      sizeFloat,\n\tmarshal:   appendFloat,\n\tunmarshal: consumeFloat,\n\tmerge:     mergeFloat32,\n}\n\n// sizeFloatNoZero returns the size of wire encoding a float32 pointer as a Float.\n// The zero value is not encoded.\nfunc sizeFloatNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Float32()\n\tif v == 0 && !math.Signbit(float64(v)) {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeFixed32()\n}\n\n// appendFloatNoZero wire encodes a float32 pointer as a Float.\n// The zero value is not encoded.\nfunc appendFloatNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Float32()\n\tif v == 0 && !math.Signbit(float64(v)) {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed32(b, math.Float32bits(v))\n\treturn b, nil\n}\n\nvar coderFloatNoZero = pointerCoderFuncs{\n\tsize:      sizeFloatNoZero,\n\tmarshal:   appendFloatNoZero,\n\tunmarshal: consumeFloat,\n\tmerge:     mergeFloat32NoZero,\n}\n\n// sizeFloatPtr returns the size of wire encoding a *float32 pointer as a Float.\n// It panics if the pointer is nil.\nfunc sizeFloatPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\treturn f.tagsize + protowire.SizeFixed32()\n}\n\n// appendFloatPtr wire encodes a *float32 pointer as a Float.\n// It panics if the pointer is nil.\nfunc appendFloatPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.Float32Ptr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed32(b, math.Float32bits(v))\n\treturn b, nil\n}\n\n// consumeFloatPtr wire decodes a *float32 pointer as a Float.\nfunc consumeFloatPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvp := p.Float32Ptr()\n\tif *vp == nil {\n\t\t*vp = new(float32)\n\t}\n\t**vp = math.Float32frombits(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderFloatPtr = pointerCoderFuncs{\n\tsize:      sizeFloatPtr,\n\tmarshal:   appendFloatPtr,\n\tunmarshal: consumeFloatPtr,\n\tmerge:     mergeFloat32Ptr,\n}\n\n// sizeFloatSlice returns the size of wire encoding a []float32 pointer as a repeated Float.\nfunc sizeFloatSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Float32Slice()\n\tsize = len(s) * (f.tagsize + protowire.SizeFixed32())\n\treturn size\n}\n\n// appendFloatSlice encodes a []float32 pointer as a repeated Float.\nfunc appendFloatSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Float32Slice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendFixed32(b, math.Float32bits(v))\n\t}\n\treturn b, nil\n}\n\n// consumeFloatSlice wire decodes a []float32 pointer as a repeated Float.\nfunc consumeFloatSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.Float32Slice()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tcount := len(b) / protowire.SizeFixed32()\n\t\tif count > 0 {\n\t\t\tp.growFloat32Slice(count)\n\t\t}\n\t\ts := *sp\n\t\tfor len(b) > 0 {\n\t\t\tv, n := protowire.ConsumeFixed32(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\ts = append(s, math.Float32frombits(v))\n\t\t\tb = b[n:]\n\t\t}\n\t\t*sp = s\n\t\tout.n = n\n\t\treturn out, nil\n\t}\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, math.Float32frombits(v))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderFloatSlice = pointerCoderFuncs{\n\tsize:      sizeFloatSlice,\n\tmarshal:   appendFloatSlice,\n\tunmarshal: consumeFloatSlice,\n\tmerge:     mergeFloat32Slice,\n}\n\n// sizeFloatPackedSlice returns the size of wire encoding a []float32 pointer as a packed repeated Float.\nfunc sizeFloatPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Float32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := len(s) * protowire.SizeFixed32()\n\treturn f.tagsize + protowire.SizeBytes(n)\n}\n\n// appendFloatPackedSlice encodes a []float32 pointer as a packed repeated Float.\nfunc appendFloatPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Float32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tn := len(s) * protowire.SizeFixed32()\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = protowire.AppendFixed32(b, math.Float32bits(v))\n\t}\n\treturn b, nil\n}\n\nvar coderFloatPackedSlice = pointerCoderFuncs{\n\tsize:      sizeFloatPackedSlice,\n\tmarshal:   appendFloatPackedSlice,\n\tunmarshal: consumeFloatSlice,\n\tmerge:     mergeFloat32Slice,\n}\n\n// sizeFloatValue returns the size of wire encoding a float32 value as a Float.\nfunc sizeFloatValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeFixed32()\n}\n\n// appendFloatValue encodes a float32 value as a Float.\nfunc appendFloatValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float())))\n\treturn b, nil\n}\n\n// consumeFloatValue decodes a float32 value as a Float.\nfunc consumeFloatValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))), out, nil\n}\n\nvar coderFloatValue = valueCoderFuncs{\n\tsize:      sizeFloatValue,\n\tmarshal:   appendFloatValue,\n\tunmarshal: consumeFloatValue,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeFloatSliceValue returns the size of wire encoding a []float32 value as a repeated Float.\nfunc sizeFloatSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tsize = list.Len() * (tagsize + protowire.SizeFixed32())\n\treturn size\n}\n\n// appendFloatSliceValue encodes a []float32 value as a repeated Float.\nfunc appendFloatSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float())))\n\t}\n\treturn b, nil\n}\n\n// consumeFloatSliceValue wire decodes a []float32 value as a repeated Float.\nfunc consumeFloatSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t}\n\t\tfor len(b) > 0 {\n\t\t\tv, n := protowire.ConsumeFixed32(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t\t}\n\t\t\tlist.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))\n\t\t\tb = b[n:]\n\t\t}\n\t\tout.n = n\n\t\treturn listv, out, nil\n\t}\n\tif wtyp != protowire.Fixed32Type {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed32(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderFloatSliceValue = valueCoderFuncs{\n\tsize:      sizeFloatSliceValue,\n\tmarshal:   appendFloatSliceValue,\n\tunmarshal: consumeFloatSliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeFloatPackedSliceValue returns the size of wire encoding a []float32 value as a packed repeated Float.\nfunc sizeFloatPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn 0\n\t}\n\tn := llen * protowire.SizeFixed32()\n\treturn tagsize + protowire.SizeBytes(n)\n}\n\n// appendFloatPackedSliceValue encodes a []float32 value as a packed repeated Float.\nfunc appendFloatPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, wiretag)\n\tn := llen * protowire.SizeFixed32()\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float())))\n\t}\n\treturn b, nil\n}\n\nvar coderFloatPackedSliceValue = valueCoderFuncs{\n\tsize:      sizeFloatPackedSliceValue,\n\tmarshal:   appendFloatPackedSliceValue,\n\tunmarshal: consumeFloatSliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeSfixed64 returns the size of wire encoding a int64 pointer as a Sfixed64.\nfunc sizeSfixed64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\n\treturn f.tagsize + protowire.SizeFixed64()\n}\n\n// appendSfixed64 wire encodes a int64 pointer as a Sfixed64.\nfunc appendSfixed64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Int64()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed64(b, uint64(v))\n\treturn b, nil\n}\n\n// consumeSfixed64 wire decodes a int64 pointer as a Sfixed64.\nfunc consumeSfixed64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Int64() = int64(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderSfixed64 = pointerCoderFuncs{\n\tsize:      sizeSfixed64,\n\tmarshal:   appendSfixed64,\n\tunmarshal: consumeSfixed64,\n\tmerge:     mergeInt64,\n}\n\n// sizeSfixed64NoZero returns the size of wire encoding a int64 pointer as a Sfixed64.\n// The zero value is not encoded.\nfunc sizeSfixed64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Int64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeFixed64()\n}\n\n// appendSfixed64NoZero wire encodes a int64 pointer as a Sfixed64.\n// The zero value is not encoded.\nfunc appendSfixed64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Int64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed64(b, uint64(v))\n\treturn b, nil\n}\n\nvar coderSfixed64NoZero = pointerCoderFuncs{\n\tsize:      sizeSfixed64NoZero,\n\tmarshal:   appendSfixed64NoZero,\n\tunmarshal: consumeSfixed64,\n\tmerge:     mergeInt64NoZero,\n}\n\n// sizeSfixed64Ptr returns the size of wire encoding a *int64 pointer as a Sfixed64.\n// It panics if the pointer is nil.\nfunc sizeSfixed64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\treturn f.tagsize + protowire.SizeFixed64()\n}\n\n// appendSfixed64Ptr wire encodes a *int64 pointer as a Sfixed64.\n// It panics if the pointer is nil.\nfunc appendSfixed64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.Int64Ptr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed64(b, uint64(v))\n\treturn b, nil\n}\n\n// consumeSfixed64Ptr wire decodes a *int64 pointer as a Sfixed64.\nfunc consumeSfixed64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvp := p.Int64Ptr()\n\tif *vp == nil {\n\t\t*vp = new(int64)\n\t}\n\t**vp = int64(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderSfixed64Ptr = pointerCoderFuncs{\n\tsize:      sizeSfixed64Ptr,\n\tmarshal:   appendSfixed64Ptr,\n\tunmarshal: consumeSfixed64Ptr,\n\tmerge:     mergeInt64Ptr,\n}\n\n// sizeSfixed64Slice returns the size of wire encoding a []int64 pointer as a repeated Sfixed64.\nfunc sizeSfixed64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Int64Slice()\n\tsize = len(s) * (f.tagsize + protowire.SizeFixed64())\n\treturn size\n}\n\n// appendSfixed64Slice encodes a []int64 pointer as a repeated Sfixed64.\nfunc appendSfixed64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Int64Slice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendFixed64(b, uint64(v))\n\t}\n\treturn b, nil\n}\n\n// consumeSfixed64Slice wire decodes a []int64 pointer as a repeated Sfixed64.\nfunc consumeSfixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.Int64Slice()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tcount := len(b) / protowire.SizeFixed64()\n\t\tif count > 0 {\n\t\t\tp.growInt64Slice(count)\n\t\t}\n\t\ts := *sp\n\t\tfor len(b) > 0 {\n\t\t\tv, n := protowire.ConsumeFixed64(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\ts = append(s, int64(v))\n\t\t\tb = b[n:]\n\t\t}\n\t\t*sp = s\n\t\tout.n = n\n\t\treturn out, nil\n\t}\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, int64(v))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderSfixed64Slice = pointerCoderFuncs{\n\tsize:      sizeSfixed64Slice,\n\tmarshal:   appendSfixed64Slice,\n\tunmarshal: consumeSfixed64Slice,\n\tmerge:     mergeInt64Slice,\n}\n\n// sizeSfixed64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Sfixed64.\nfunc sizeSfixed64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Int64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := len(s) * protowire.SizeFixed64()\n\treturn f.tagsize + protowire.SizeBytes(n)\n}\n\n// appendSfixed64PackedSlice encodes a []int64 pointer as a packed repeated Sfixed64.\nfunc appendSfixed64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Int64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tn := len(s) * protowire.SizeFixed64()\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = protowire.AppendFixed64(b, uint64(v))\n\t}\n\treturn b, nil\n}\n\nvar coderSfixed64PackedSlice = pointerCoderFuncs{\n\tsize:      sizeSfixed64PackedSlice,\n\tmarshal:   appendSfixed64PackedSlice,\n\tunmarshal: consumeSfixed64Slice,\n\tmerge:     mergeInt64Slice,\n}\n\n// sizeSfixed64Value returns the size of wire encoding a int64 value as a Sfixed64.\nfunc sizeSfixed64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeFixed64()\n}\n\n// appendSfixed64Value encodes a int64 value as a Sfixed64.\nfunc appendSfixed64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendFixed64(b, uint64(v.Int()))\n\treturn b, nil\n}\n\n// consumeSfixed64Value decodes a int64 value as a Sfixed64.\nfunc consumeSfixed64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfInt64(int64(v)), out, nil\n}\n\nvar coderSfixed64Value = valueCoderFuncs{\n\tsize:      sizeSfixed64Value,\n\tmarshal:   appendSfixed64Value,\n\tunmarshal: consumeSfixed64Value,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeSfixed64SliceValue returns the size of wire encoding a []int64 value as a repeated Sfixed64.\nfunc sizeSfixed64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tsize = list.Len() * (tagsize + protowire.SizeFixed64())\n\treturn size\n}\n\n// appendSfixed64SliceValue encodes a []int64 value as a repeated Sfixed64.\nfunc appendSfixed64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendFixed64(b, uint64(v.Int()))\n\t}\n\treturn b, nil\n}\n\n// consumeSfixed64SliceValue wire decodes a []int64 value as a repeated Sfixed64.\nfunc consumeSfixed64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t}\n\t\tfor len(b) > 0 {\n\t\t\tv, n := protowire.ConsumeFixed64(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t\t}\n\t\t\tlist.Append(protoreflect.ValueOfInt64(int64(v)))\n\t\t\tb = b[n:]\n\t\t}\n\t\tout.n = n\n\t\treturn listv, out, nil\n\t}\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfInt64(int64(v)))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderSfixed64SliceValue = valueCoderFuncs{\n\tsize:      sizeSfixed64SliceValue,\n\tmarshal:   appendSfixed64SliceValue,\n\tunmarshal: consumeSfixed64SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeSfixed64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Sfixed64.\nfunc sizeSfixed64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn 0\n\t}\n\tn := llen * protowire.SizeFixed64()\n\treturn tagsize + protowire.SizeBytes(n)\n}\n\n// appendSfixed64PackedSliceValue encodes a []int64 value as a packed repeated Sfixed64.\nfunc appendSfixed64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, wiretag)\n\tn := llen * protowire.SizeFixed64()\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendFixed64(b, uint64(v.Int()))\n\t}\n\treturn b, nil\n}\n\nvar coderSfixed64PackedSliceValue = valueCoderFuncs{\n\tsize:      sizeSfixed64PackedSliceValue,\n\tmarshal:   appendSfixed64PackedSliceValue,\n\tunmarshal: consumeSfixed64SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeFixed64 returns the size of wire encoding a uint64 pointer as a Fixed64.\nfunc sizeFixed64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\n\treturn f.tagsize + protowire.SizeFixed64()\n}\n\n// appendFixed64 wire encodes a uint64 pointer as a Fixed64.\nfunc appendFixed64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Uint64()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed64(b, v)\n\treturn b, nil\n}\n\n// consumeFixed64 wire decodes a uint64 pointer as a Fixed64.\nfunc consumeFixed64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Uint64() = v\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderFixed64 = pointerCoderFuncs{\n\tsize:      sizeFixed64,\n\tmarshal:   appendFixed64,\n\tunmarshal: consumeFixed64,\n\tmerge:     mergeUint64,\n}\n\n// sizeFixed64NoZero returns the size of wire encoding a uint64 pointer as a Fixed64.\n// The zero value is not encoded.\nfunc sizeFixed64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Uint64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeFixed64()\n}\n\n// appendFixed64NoZero wire encodes a uint64 pointer as a Fixed64.\n// The zero value is not encoded.\nfunc appendFixed64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Uint64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed64(b, v)\n\treturn b, nil\n}\n\nvar coderFixed64NoZero = pointerCoderFuncs{\n\tsize:      sizeFixed64NoZero,\n\tmarshal:   appendFixed64NoZero,\n\tunmarshal: consumeFixed64,\n\tmerge:     mergeUint64NoZero,\n}\n\n// sizeFixed64Ptr returns the size of wire encoding a *uint64 pointer as a Fixed64.\n// It panics if the pointer is nil.\nfunc sizeFixed64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\treturn f.tagsize + protowire.SizeFixed64()\n}\n\n// appendFixed64Ptr wire encodes a *uint64 pointer as a Fixed64.\n// It panics if the pointer is nil.\nfunc appendFixed64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.Uint64Ptr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed64(b, v)\n\treturn b, nil\n}\n\n// consumeFixed64Ptr wire decodes a *uint64 pointer as a Fixed64.\nfunc consumeFixed64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvp := p.Uint64Ptr()\n\tif *vp == nil {\n\t\t*vp = new(uint64)\n\t}\n\t**vp = v\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderFixed64Ptr = pointerCoderFuncs{\n\tsize:      sizeFixed64Ptr,\n\tmarshal:   appendFixed64Ptr,\n\tunmarshal: consumeFixed64Ptr,\n\tmerge:     mergeUint64Ptr,\n}\n\n// sizeFixed64Slice returns the size of wire encoding a []uint64 pointer as a repeated Fixed64.\nfunc sizeFixed64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Uint64Slice()\n\tsize = len(s) * (f.tagsize + protowire.SizeFixed64())\n\treturn size\n}\n\n// appendFixed64Slice encodes a []uint64 pointer as a repeated Fixed64.\nfunc appendFixed64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Uint64Slice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendFixed64(b, v)\n\t}\n\treturn b, nil\n}\n\n// consumeFixed64Slice wire decodes a []uint64 pointer as a repeated Fixed64.\nfunc consumeFixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.Uint64Slice()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tcount := len(b) / protowire.SizeFixed64()\n\t\tif count > 0 {\n\t\t\tp.growUint64Slice(count)\n\t\t}\n\t\ts := *sp\n\t\tfor len(b) > 0 {\n\t\t\tv, n := protowire.ConsumeFixed64(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\ts = append(s, v)\n\t\t\tb = b[n:]\n\t\t}\n\t\t*sp = s\n\t\tout.n = n\n\t\treturn out, nil\n\t}\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderFixed64Slice = pointerCoderFuncs{\n\tsize:      sizeFixed64Slice,\n\tmarshal:   appendFixed64Slice,\n\tunmarshal: consumeFixed64Slice,\n\tmerge:     mergeUint64Slice,\n}\n\n// sizeFixed64PackedSlice returns the size of wire encoding a []uint64 pointer as a packed repeated Fixed64.\nfunc sizeFixed64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Uint64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := len(s) * protowire.SizeFixed64()\n\treturn f.tagsize + protowire.SizeBytes(n)\n}\n\n// appendFixed64PackedSlice encodes a []uint64 pointer as a packed repeated Fixed64.\nfunc appendFixed64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Uint64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tn := len(s) * protowire.SizeFixed64()\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = protowire.AppendFixed64(b, v)\n\t}\n\treturn b, nil\n}\n\nvar coderFixed64PackedSlice = pointerCoderFuncs{\n\tsize:      sizeFixed64PackedSlice,\n\tmarshal:   appendFixed64PackedSlice,\n\tunmarshal: consumeFixed64Slice,\n\tmerge:     mergeUint64Slice,\n}\n\n// sizeFixed64Value returns the size of wire encoding a uint64 value as a Fixed64.\nfunc sizeFixed64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeFixed64()\n}\n\n// appendFixed64Value encodes a uint64 value as a Fixed64.\nfunc appendFixed64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendFixed64(b, v.Uint())\n\treturn b, nil\n}\n\n// consumeFixed64Value decodes a uint64 value as a Fixed64.\nfunc consumeFixed64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfUint64(v), out, nil\n}\n\nvar coderFixed64Value = valueCoderFuncs{\n\tsize:      sizeFixed64Value,\n\tmarshal:   appendFixed64Value,\n\tunmarshal: consumeFixed64Value,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeFixed64SliceValue returns the size of wire encoding a []uint64 value as a repeated Fixed64.\nfunc sizeFixed64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tsize = list.Len() * (tagsize + protowire.SizeFixed64())\n\treturn size\n}\n\n// appendFixed64SliceValue encodes a []uint64 value as a repeated Fixed64.\nfunc appendFixed64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendFixed64(b, v.Uint())\n\t}\n\treturn b, nil\n}\n\n// consumeFixed64SliceValue wire decodes a []uint64 value as a repeated Fixed64.\nfunc consumeFixed64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t}\n\t\tfor len(b) > 0 {\n\t\t\tv, n := protowire.ConsumeFixed64(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t\t}\n\t\t\tlist.Append(protoreflect.ValueOfUint64(v))\n\t\t\tb = b[n:]\n\t\t}\n\t\tout.n = n\n\t\treturn listv, out, nil\n\t}\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfUint64(v))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderFixed64SliceValue = valueCoderFuncs{\n\tsize:      sizeFixed64SliceValue,\n\tmarshal:   appendFixed64SliceValue,\n\tunmarshal: consumeFixed64SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeFixed64PackedSliceValue returns the size of wire encoding a []uint64 value as a packed repeated Fixed64.\nfunc sizeFixed64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn 0\n\t}\n\tn := llen * protowire.SizeFixed64()\n\treturn tagsize + protowire.SizeBytes(n)\n}\n\n// appendFixed64PackedSliceValue encodes a []uint64 value as a packed repeated Fixed64.\nfunc appendFixed64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, wiretag)\n\tn := llen * protowire.SizeFixed64()\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendFixed64(b, v.Uint())\n\t}\n\treturn b, nil\n}\n\nvar coderFixed64PackedSliceValue = valueCoderFuncs{\n\tsize:      sizeFixed64PackedSliceValue,\n\tmarshal:   appendFixed64PackedSliceValue,\n\tunmarshal: consumeFixed64SliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeDouble returns the size of wire encoding a float64 pointer as a Double.\nfunc sizeDouble(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\n\treturn f.tagsize + protowire.SizeFixed64()\n}\n\n// appendDouble wire encodes a float64 pointer as a Double.\nfunc appendDouble(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Float64()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed64(b, math.Float64bits(v))\n\treturn b, nil\n}\n\n// consumeDouble wire decodes a float64 pointer as a Double.\nfunc consumeDouble(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Float64() = math.Float64frombits(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderDouble = pointerCoderFuncs{\n\tsize:      sizeDouble,\n\tmarshal:   appendDouble,\n\tunmarshal: consumeDouble,\n\tmerge:     mergeFloat64,\n}\n\n// sizeDoubleNoZero returns the size of wire encoding a float64 pointer as a Double.\n// The zero value is not encoded.\nfunc sizeDoubleNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Float64()\n\tif v == 0 && !math.Signbit(float64(v)) {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeFixed64()\n}\n\n// appendDoubleNoZero wire encodes a float64 pointer as a Double.\n// The zero value is not encoded.\nfunc appendDoubleNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Float64()\n\tif v == 0 && !math.Signbit(float64(v)) {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed64(b, math.Float64bits(v))\n\treturn b, nil\n}\n\nvar coderDoubleNoZero = pointerCoderFuncs{\n\tsize:      sizeDoubleNoZero,\n\tmarshal:   appendDoubleNoZero,\n\tunmarshal: consumeDouble,\n\tmerge:     mergeFloat64NoZero,\n}\n\n// sizeDoublePtr returns the size of wire encoding a *float64 pointer as a Double.\n// It panics if the pointer is nil.\nfunc sizeDoublePtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\treturn f.tagsize + protowire.SizeFixed64()\n}\n\n// appendDoublePtr wire encodes a *float64 pointer as a Double.\n// It panics if the pointer is nil.\nfunc appendDoublePtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.Float64Ptr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendFixed64(b, math.Float64bits(v))\n\treturn b, nil\n}\n\n// consumeDoublePtr wire decodes a *float64 pointer as a Double.\nfunc consumeDoublePtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvp := p.Float64Ptr()\n\tif *vp == nil {\n\t\t*vp = new(float64)\n\t}\n\t**vp = math.Float64frombits(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderDoublePtr = pointerCoderFuncs{\n\tsize:      sizeDoublePtr,\n\tmarshal:   appendDoublePtr,\n\tunmarshal: consumeDoublePtr,\n\tmerge:     mergeFloat64Ptr,\n}\n\n// sizeDoubleSlice returns the size of wire encoding a []float64 pointer as a repeated Double.\nfunc sizeDoubleSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Float64Slice()\n\tsize = len(s) * (f.tagsize + protowire.SizeFixed64())\n\treturn size\n}\n\n// appendDoubleSlice encodes a []float64 pointer as a repeated Double.\nfunc appendDoubleSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Float64Slice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendFixed64(b, math.Float64bits(v))\n\t}\n\treturn b, nil\n}\n\n// consumeDoubleSlice wire decodes a []float64 pointer as a repeated Double.\nfunc consumeDoubleSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.Float64Slice()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tcount := len(b) / protowire.SizeFixed64()\n\t\tif count > 0 {\n\t\t\tp.growFloat64Slice(count)\n\t\t}\n\t\ts := *sp\n\t\tfor len(b) > 0 {\n\t\t\tv, n := protowire.ConsumeFixed64(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\ts = append(s, math.Float64frombits(v))\n\t\t\tb = b[n:]\n\t\t}\n\t\t*sp = s\n\t\tout.n = n\n\t\treturn out, nil\n\t}\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, math.Float64frombits(v))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderDoubleSlice = pointerCoderFuncs{\n\tsize:      sizeDoubleSlice,\n\tmarshal:   appendDoubleSlice,\n\tunmarshal: consumeDoubleSlice,\n\tmerge:     mergeFloat64Slice,\n}\n\n// sizeDoublePackedSlice returns the size of wire encoding a []float64 pointer as a packed repeated Double.\nfunc sizeDoublePackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.Float64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := len(s) * protowire.SizeFixed64()\n\treturn f.tagsize + protowire.SizeBytes(n)\n}\n\n// appendDoublePackedSlice encodes a []float64 pointer as a packed repeated Double.\nfunc appendDoublePackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.Float64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tn := len(s) * protowire.SizeFixed64()\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = protowire.AppendFixed64(b, math.Float64bits(v))\n\t}\n\treturn b, nil\n}\n\nvar coderDoublePackedSlice = pointerCoderFuncs{\n\tsize:      sizeDoublePackedSlice,\n\tmarshal:   appendDoublePackedSlice,\n\tunmarshal: consumeDoubleSlice,\n\tmerge:     mergeFloat64Slice,\n}\n\n// sizeDoubleValue returns the size of wire encoding a float64 value as a Double.\nfunc sizeDoubleValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeFixed64()\n}\n\n// appendDoubleValue encodes a float64 value as a Double.\nfunc appendDoubleValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendFixed64(b, math.Float64bits(v.Float()))\n\treturn b, nil\n}\n\n// consumeDoubleValue decodes a float64 value as a Double.\nfunc consumeDoubleValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfFloat64(math.Float64frombits(v)), out, nil\n}\n\nvar coderDoubleValue = valueCoderFuncs{\n\tsize:      sizeDoubleValue,\n\tmarshal:   appendDoubleValue,\n\tunmarshal: consumeDoubleValue,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeDoubleSliceValue returns the size of wire encoding a []float64 value as a repeated Double.\nfunc sizeDoubleSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tsize = list.Len() * (tagsize + protowire.SizeFixed64())\n\treturn size\n}\n\n// appendDoubleSliceValue encodes a []float64 value as a repeated Double.\nfunc appendDoubleSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendFixed64(b, math.Float64bits(v.Float()))\n\t}\n\treturn b, nil\n}\n\n// consumeDoubleSliceValue wire decodes a []float64 value as a repeated Double.\nfunc consumeDoubleSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp == protowire.BytesType {\n\t\tb, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t}\n\t\tfor len(b) > 0 {\n\t\t\tv, n := protowire.ConsumeFixed64(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn protoreflect.Value{}, out, errDecode\n\t\t\t}\n\t\t\tlist.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))\n\t\t\tb = b[n:]\n\t\t}\n\t\tout.n = n\n\t\treturn listv, out, nil\n\t}\n\tif wtyp != protowire.Fixed64Type {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeFixed64(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderDoubleSliceValue = valueCoderFuncs{\n\tsize:      sizeDoubleSliceValue,\n\tmarshal:   appendDoubleSliceValue,\n\tunmarshal: consumeDoubleSliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeDoublePackedSliceValue returns the size of wire encoding a []float64 value as a packed repeated Double.\nfunc sizeDoublePackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn 0\n\t}\n\tn := llen * protowire.SizeFixed64()\n\treturn tagsize + protowire.SizeBytes(n)\n}\n\n// appendDoublePackedSliceValue encodes a []float64 value as a packed repeated Double.\nfunc appendDoublePackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tllen := list.Len()\n\tif llen == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, wiretag)\n\tn := llen * protowire.SizeFixed64()\n\tb = protowire.AppendVarint(b, uint64(n))\n\tfor i := 0; i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendFixed64(b, math.Float64bits(v.Float()))\n\t}\n\treturn b, nil\n}\n\nvar coderDoublePackedSliceValue = valueCoderFuncs{\n\tsize:      sizeDoublePackedSliceValue,\n\tmarshal:   appendDoublePackedSliceValue,\n\tunmarshal: consumeDoubleSliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeString returns the size of wire encoding a string pointer as a String.\nfunc sizeString(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.String()\n\treturn f.tagsize + protowire.SizeBytes(len(v))\n}\n\n// appendString wire encodes a string pointer as a String.\nfunc appendString(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.String()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendString(b, v)\n\treturn b, nil\n}\n\n// consumeString wire decodes a string pointer as a String.\nfunc consumeString(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.String() = string(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderString = pointerCoderFuncs{\n\tsize:      sizeString,\n\tmarshal:   appendString,\n\tunmarshal: consumeString,\n\tmerge:     mergeString,\n}\n\n// appendStringValidateUTF8 wire encodes a string pointer as a String.\nfunc appendStringValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.String()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendString(b, v)\n\tif !utf8.ValidString(v) {\n\t\treturn b, errInvalidUTF8{}\n\t}\n\treturn b, nil\n}\n\n// consumeStringValidateUTF8 wire decodes a string pointer as a String.\nfunc consumeStringValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tif !utf8.Valid(v) {\n\t\treturn out, errInvalidUTF8{}\n\t}\n\t*p.String() = string(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderStringValidateUTF8 = pointerCoderFuncs{\n\tsize:      sizeString,\n\tmarshal:   appendStringValidateUTF8,\n\tunmarshal: consumeStringValidateUTF8,\n\tmerge:     mergeString,\n}\n\n// sizeStringNoZero returns the size of wire encoding a string pointer as a String.\n// The zero value is not encoded.\nfunc sizeStringNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.String()\n\tif len(v) == 0 {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeBytes(len(v))\n}\n\n// appendStringNoZero wire encodes a string pointer as a String.\n// The zero value is not encoded.\nfunc appendStringNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.String()\n\tif len(v) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendString(b, v)\n\treturn b, nil\n}\n\nvar coderStringNoZero = pointerCoderFuncs{\n\tsize:      sizeStringNoZero,\n\tmarshal:   appendStringNoZero,\n\tunmarshal: consumeString,\n\tmerge:     mergeStringNoZero,\n}\n\n// appendStringNoZeroValidateUTF8 wire encodes a string pointer as a String.\n// The zero value is not encoded.\nfunc appendStringNoZeroValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.String()\n\tif len(v) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendString(b, v)\n\tif !utf8.ValidString(v) {\n\t\treturn b, errInvalidUTF8{}\n\t}\n\treturn b, nil\n}\n\nvar coderStringNoZeroValidateUTF8 = pointerCoderFuncs{\n\tsize:      sizeStringNoZero,\n\tmarshal:   appendStringNoZeroValidateUTF8,\n\tunmarshal: consumeStringValidateUTF8,\n\tmerge:     mergeStringNoZero,\n}\n\n// sizeStringPtr returns the size of wire encoding a *string pointer as a String.\n// It panics if the pointer is nil.\nfunc sizeStringPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := **p.StringPtr()\n\treturn f.tagsize + protowire.SizeBytes(len(v))\n}\n\n// appendStringPtr wire encodes a *string pointer as a String.\n// It panics if the pointer is nil.\nfunc appendStringPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.StringPtr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendString(b, v)\n\treturn b, nil\n}\n\n// consumeStringPtr wire decodes a *string pointer as a String.\nfunc consumeStringPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvp := p.StringPtr()\n\tif *vp == nil {\n\t\t*vp = new(string)\n\t}\n\t**vp = string(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderStringPtr = pointerCoderFuncs{\n\tsize:      sizeStringPtr,\n\tmarshal:   appendStringPtr,\n\tunmarshal: consumeStringPtr,\n\tmerge:     mergeStringPtr,\n}\n\n// appendStringPtrValidateUTF8 wire encodes a *string pointer as a String.\n// It panics if the pointer is nil.\nfunc appendStringPtrValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := **p.StringPtr()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendString(b, v)\n\tif !utf8.ValidString(v) {\n\t\treturn b, errInvalidUTF8{}\n\t}\n\treturn b, nil\n}\n\n// consumeStringPtrValidateUTF8 wire decodes a *string pointer as a String.\nfunc consumeStringPtrValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tif !utf8.Valid(v) {\n\t\treturn out, errInvalidUTF8{}\n\t}\n\tvp := p.StringPtr()\n\tif *vp == nil {\n\t\t*vp = new(string)\n\t}\n\t**vp = string(v)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderStringPtrValidateUTF8 = pointerCoderFuncs{\n\tsize:      sizeStringPtr,\n\tmarshal:   appendStringPtrValidateUTF8,\n\tunmarshal: consumeStringPtrValidateUTF8,\n\tmerge:     mergeStringPtr,\n}\n\n// sizeStringSlice returns the size of wire encoding a []string pointer as a repeated String.\nfunc sizeStringSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.StringSlice()\n\tfor _, v := range s {\n\t\tsize += f.tagsize + protowire.SizeBytes(len(v))\n\t}\n\treturn size\n}\n\n// appendStringSlice encodes a []string pointer as a repeated String.\nfunc appendStringSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.StringSlice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendString(b, v)\n\t}\n\treturn b, nil\n}\n\n// consumeStringSlice wire decodes a []string pointer as a repeated String.\nfunc consumeStringSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.StringSlice()\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, string(v))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderStringSlice = pointerCoderFuncs{\n\tsize:      sizeStringSlice,\n\tmarshal:   appendStringSlice,\n\tunmarshal: consumeStringSlice,\n\tmerge:     mergeStringSlice,\n}\n\n// appendStringSliceValidateUTF8 encodes a []string pointer as a repeated String.\nfunc appendStringSliceValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.StringSlice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendString(b, v)\n\t\tif !utf8.ValidString(v) {\n\t\t\treturn b, errInvalidUTF8{}\n\t\t}\n\t}\n\treturn b, nil\n}\n\n// consumeStringSliceValidateUTF8 wire decodes a []string pointer as a repeated String.\nfunc consumeStringSliceValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tif !utf8.Valid(v) {\n\t\treturn out, errInvalidUTF8{}\n\t}\n\tsp := p.StringSlice()\n\t*sp = append(*sp, string(v))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderStringSliceValidateUTF8 = pointerCoderFuncs{\n\tsize:      sizeStringSlice,\n\tmarshal:   appendStringSliceValidateUTF8,\n\tunmarshal: consumeStringSliceValidateUTF8,\n\tmerge:     mergeStringSlice,\n}\n\n// sizeStringValue returns the size of wire encoding a string value as a String.\nfunc sizeStringValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeBytes(len(v.String()))\n}\n\n// appendStringValue encodes a string value as a String.\nfunc appendStringValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendString(b, v.String())\n\treturn b, nil\n}\n\n// consumeStringValue decodes a string value as a String.\nfunc consumeStringValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfString(string(v)), out, nil\n}\n\nvar coderStringValue = valueCoderFuncs{\n\tsize:      sizeStringValue,\n\tmarshal:   appendStringValue,\n\tunmarshal: consumeStringValue,\n\tmerge:     mergeScalarValue,\n}\n\n// appendStringValueValidateUTF8 encodes a string value as a String.\nfunc appendStringValueValidateUTF8(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendString(b, v.String())\n\tif !utf8.ValidString(v.String()) {\n\t\treturn b, errInvalidUTF8{}\n\t}\n\treturn b, nil\n}\n\n// consumeStringValueValidateUTF8 decodes a string value as a String.\nfunc consumeStringValueValidateUTF8(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tif !utf8.Valid(v) {\n\t\treturn protoreflect.Value{}, out, errInvalidUTF8{}\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfString(string(v)), out, nil\n}\n\nvar coderStringValueValidateUTF8 = valueCoderFuncs{\n\tsize:      sizeStringValue,\n\tmarshal:   appendStringValueValidateUTF8,\n\tunmarshal: consumeStringValueValidateUTF8,\n\tmerge:     mergeScalarValue,\n}\n\n// sizeStringSliceValue returns the size of wire encoding a []string value as a repeated String.\nfunc sizeStringSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tsize += tagsize + protowire.SizeBytes(len(v.String()))\n\t}\n\treturn size\n}\n\n// appendStringSliceValue encodes a []string value as a repeated String.\nfunc appendStringSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendString(b, v.String())\n\t}\n\treturn b, nil\n}\n\n// consumeStringSliceValue wire decodes a []string value as a repeated String.\nfunc consumeStringSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp != protowire.BytesType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfString(string(v)))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderStringSliceValue = valueCoderFuncs{\n\tsize:      sizeStringSliceValue,\n\tmarshal:   appendStringSliceValue,\n\tunmarshal: consumeStringSliceValue,\n\tmerge:     mergeListValue,\n}\n\n// sizeBytes returns the size of wire encoding a []byte pointer as a Bytes.\nfunc sizeBytes(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Bytes()\n\treturn f.tagsize + protowire.SizeBytes(len(v))\n}\n\n// appendBytes wire encodes a []byte pointer as a Bytes.\nfunc appendBytes(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Bytes()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendBytes(b, v)\n\treturn b, nil\n}\n\n// consumeBytes wire decodes a []byte pointer as a Bytes.\nfunc consumeBytes(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Bytes() = append(emptyBuf[:], v...)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderBytes = pointerCoderFuncs{\n\tsize:      sizeBytes,\n\tmarshal:   appendBytes,\n\tunmarshal: consumeBytes,\n\tmerge:     mergeBytes,\n}\n\n// appendBytesValidateUTF8 wire encodes a []byte pointer as a Bytes.\nfunc appendBytesValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Bytes()\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendBytes(b, v)\n\tif !utf8.Valid(v) {\n\t\treturn b, errInvalidUTF8{}\n\t}\n\treturn b, nil\n}\n\n// consumeBytesValidateUTF8 wire decodes a []byte pointer as a Bytes.\nfunc consumeBytesValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tif !utf8.Valid(v) {\n\t\treturn out, errInvalidUTF8{}\n\t}\n\t*p.Bytes() = append(emptyBuf[:], v...)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderBytesValidateUTF8 = pointerCoderFuncs{\n\tsize:      sizeBytes,\n\tmarshal:   appendBytesValidateUTF8,\n\tunmarshal: consumeBytesValidateUTF8,\n\tmerge:     mergeBytes,\n}\n\n// sizeBytesNoZero returns the size of wire encoding a []byte pointer as a Bytes.\n// The zero value is not encoded.\nfunc sizeBytesNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\tv := *p.Bytes()\n\tif len(v) == 0 {\n\t\treturn 0\n\t}\n\treturn f.tagsize + protowire.SizeBytes(len(v))\n}\n\n// appendBytesNoZero wire encodes a []byte pointer as a Bytes.\n// The zero value is not encoded.\nfunc appendBytesNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Bytes()\n\tif len(v) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendBytes(b, v)\n\treturn b, nil\n}\n\n// consumeBytesNoZero wire decodes a []byte pointer as a Bytes.\n// The zero value is not decoded.\nfunc consumeBytesNoZero(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*p.Bytes() = append(([]byte)(nil), v...)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderBytesNoZero = pointerCoderFuncs{\n\tsize:      sizeBytesNoZero,\n\tmarshal:   appendBytesNoZero,\n\tunmarshal: consumeBytesNoZero,\n\tmerge:     mergeBytesNoZero,\n}\n\n// appendBytesNoZeroValidateUTF8 wire encodes a []byte pointer as a Bytes.\n// The zero value is not encoded.\nfunc appendBytesNoZeroValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tv := *p.Bytes()\n\tif len(v) == 0 {\n\t\treturn b, nil\n\t}\n\tb = protowire.AppendVarint(b, f.wiretag)\n\tb = protowire.AppendBytes(b, v)\n\tif !utf8.Valid(v) {\n\t\treturn b, errInvalidUTF8{}\n\t}\n\treturn b, nil\n}\n\n// consumeBytesNoZeroValidateUTF8 wire decodes a []byte pointer as a Bytes.\nfunc consumeBytesNoZeroValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tif !utf8.Valid(v) {\n\t\treturn out, errInvalidUTF8{}\n\t}\n\t*p.Bytes() = append(([]byte)(nil), v...)\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderBytesNoZeroValidateUTF8 = pointerCoderFuncs{\n\tsize:      sizeBytesNoZero,\n\tmarshal:   appendBytesNoZeroValidateUTF8,\n\tunmarshal: consumeBytesNoZeroValidateUTF8,\n\tmerge:     mergeBytesNoZero,\n}\n\n// sizeBytesSlice returns the size of wire encoding a [][]byte pointer as a repeated Bytes.\nfunc sizeBytesSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) {\n\ts := *p.BytesSlice()\n\tfor _, v := range s {\n\t\tsize += f.tagsize + protowire.SizeBytes(len(v))\n\t}\n\treturn size\n}\n\n// appendBytesSlice encodes a [][]byte pointer as a repeated Bytes.\nfunc appendBytesSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.BytesSlice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendBytes(b, v)\n\t}\n\treturn b, nil\n}\n\n// consumeBytesSlice wire decodes a [][]byte pointer as a repeated Bytes.\nfunc consumeBytesSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tsp := p.BytesSlice()\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\t*sp = append(*sp, append(emptyBuf[:], v...))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderBytesSlice = pointerCoderFuncs{\n\tsize:      sizeBytesSlice,\n\tmarshal:   appendBytesSlice,\n\tunmarshal: consumeBytesSlice,\n\tmerge:     mergeBytesSlice,\n}\n\n// appendBytesSliceValidateUTF8 encodes a [][]byte pointer as a repeated Bytes.\nfunc appendBytesSliceValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\ts := *p.BytesSlice()\n\tfor _, v := range s {\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb = protowire.AppendBytes(b, v)\n\t\tif !utf8.Valid(v) {\n\t\t\treturn b, errInvalidUTF8{}\n\t\t}\n\t}\n\treturn b, nil\n}\n\n// consumeBytesSliceValidateUTF8 wire decodes a [][]byte pointer as a repeated Bytes.\nfunc consumeBytesSliceValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tif !utf8.Valid(v) {\n\t\treturn out, errInvalidUTF8{}\n\t}\n\tsp := p.BytesSlice()\n\t*sp = append(*sp, append(emptyBuf[:], v...))\n\tout.n = n\n\treturn out, nil\n}\n\nvar coderBytesSliceValidateUTF8 = pointerCoderFuncs{\n\tsize:      sizeBytesSlice,\n\tmarshal:   appendBytesSliceValidateUTF8,\n\tunmarshal: consumeBytesSliceValidateUTF8,\n\tmerge:     mergeBytesSlice,\n}\n\n// sizeBytesValue returns the size of wire encoding a []byte value as a Bytes.\nfunc sizeBytesValue(v protoreflect.Value, tagsize int, opts marshalOptions) int {\n\treturn tagsize + protowire.SizeBytes(len(v.Bytes()))\n}\n\n// appendBytesValue encodes a []byte value as a Bytes.\nfunc appendBytesValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tb = protowire.AppendVarint(b, wiretag)\n\tb = protowire.AppendBytes(b, v.Bytes())\n\treturn b, nil\n}\n\n// consumeBytesValue decodes a []byte value as a Bytes.\nfunc consumeBytesValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tif wtyp != protowire.BytesType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tout.n = n\n\treturn protoreflect.ValueOfBytes(append(emptyBuf[:], v...)), out, nil\n}\n\nvar coderBytesValue = valueCoderFuncs{\n\tsize:      sizeBytesValue,\n\tmarshal:   appendBytesValue,\n\tunmarshal: consumeBytesValue,\n\tmerge:     mergeBytesValue,\n}\n\n// sizeBytesSliceValue returns the size of wire encoding a [][]byte value as a repeated Bytes.\nfunc sizeBytesSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tsize += tagsize + protowire.SizeBytes(len(v.Bytes()))\n\t}\n\treturn size\n}\n\n// appendBytesSliceValue encodes a [][]byte value as a repeated Bytes.\nfunc appendBytesSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) {\n\tlist := listv.List()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tv := list.Get(i)\n\t\tb = protowire.AppendVarint(b, wiretag)\n\t\tb = protowire.AppendBytes(b, v.Bytes())\n\t}\n\treturn b, nil\n}\n\n// consumeBytesSliceValue wire decodes a [][]byte value as a repeated Bytes.\nfunc consumeBytesSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) {\n\tlist := listv.List()\n\tif wtyp != protowire.BytesType {\n\t\treturn protoreflect.Value{}, out, errUnknown\n\t}\n\tv, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn protoreflect.Value{}, out, errDecode\n\t}\n\tlist.Append(protoreflect.ValueOfBytes(append(emptyBuf[:], v...)))\n\tout.n = n\n\treturn listv, out, nil\n}\n\nvar coderBytesSliceValue = valueCoderFuncs{\n\tsize:      sizeBytesSliceValue,\n\tmarshal:   appendBytesSliceValue,\n\tunmarshal: consumeBytesSliceValue,\n\tmerge:     mergeBytesListValue,\n}\n\n// We append to an empty array rather than a nil []byte to get non-nil zero-length byte slices.\nvar emptyBuf [0]byte\n\nvar wireTypes = map[protoreflect.Kind]protowire.Type{\n\tprotoreflect.BoolKind:     protowire.VarintType,\n\tprotoreflect.EnumKind:     protowire.VarintType,\n\tprotoreflect.Int32Kind:    protowire.VarintType,\n\tprotoreflect.Sint32Kind:   protowire.VarintType,\n\tprotoreflect.Uint32Kind:   protowire.VarintType,\n\tprotoreflect.Int64Kind:    protowire.VarintType,\n\tprotoreflect.Sint64Kind:   protowire.VarintType,\n\tprotoreflect.Uint64Kind:   protowire.VarintType,\n\tprotoreflect.Sfixed32Kind: protowire.Fixed32Type,\n\tprotoreflect.Fixed32Kind:  protowire.Fixed32Type,\n\tprotoreflect.FloatKind:    protowire.Fixed32Type,\n\tprotoreflect.Sfixed64Kind: protowire.Fixed64Type,\n\tprotoreflect.Fixed64Kind:  protowire.Fixed64Type,\n\tprotoreflect.DoubleKind:   protowire.Fixed64Type,\n\tprotoreflect.StringKind:   protowire.BytesType,\n\tprotoreflect.BytesKind:    protowire.BytesType,\n\tprotoreflect.MessageKind:  protowire.BytesType,\n\tprotoreflect.GroupKind:    protowire.StartGroupType,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/codec_map.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 impl\n\nimport (\n\t\"reflect\"\n\t\"sort\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/internal/genid\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\ntype mapInfo struct {\n\tgoType     reflect.Type\n\tkeyWiretag uint64\n\tvalWiretag uint64\n\tkeyFuncs   valueCoderFuncs\n\tvalFuncs   valueCoderFuncs\n\tkeyZero    protoreflect.Value\n\tkeyKind    protoreflect.Kind\n\tconv       *mapConverter\n}\n\nfunc encoderFuncsForMap(fd protoreflect.FieldDescriptor, ft reflect.Type) (valueMessage *MessageInfo, funcs pointerCoderFuncs) {\n\t// TODO: Consider generating specialized map coders.\n\tkeyField := fd.MapKey()\n\tvalField := fd.MapValue()\n\tkeyWiretag := protowire.EncodeTag(1, wireTypes[keyField.Kind()])\n\tvalWiretag := protowire.EncodeTag(2, wireTypes[valField.Kind()])\n\tkeyFuncs := encoderFuncsForValue(keyField)\n\tvalFuncs := encoderFuncsForValue(valField)\n\tconv := newMapConverter(ft, fd)\n\n\tmapi := &mapInfo{\n\t\tgoType:     ft,\n\t\tkeyWiretag: keyWiretag,\n\t\tvalWiretag: valWiretag,\n\t\tkeyFuncs:   keyFuncs,\n\t\tvalFuncs:   valFuncs,\n\t\tkeyZero:    keyField.Default(),\n\t\tkeyKind:    keyField.Kind(),\n\t\tconv:       conv,\n\t}\n\tif valField.Kind() == protoreflect.MessageKind {\n\t\tvalueMessage = getMessageInfo(ft.Elem())\n\t}\n\n\tfuncs = pointerCoderFuncs{\n\t\tsize: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {\n\t\t\treturn sizeMap(p.AsValueOf(ft).Elem(), mapi, f, opts)\n\t\t},\n\t\tmarshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\t\t\treturn appendMap(b, p.AsValueOf(ft).Elem(), mapi, f, opts)\n\t\t},\n\t\tunmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {\n\t\t\tmp := p.AsValueOf(ft)\n\t\t\tif mp.Elem().IsNil() {\n\t\t\t\tmp.Elem().Set(reflect.MakeMap(mapi.goType))\n\t\t\t}\n\t\t\tif f.mi == nil {\n\t\t\t\treturn consumeMap(b, mp.Elem(), wtyp, mapi, f, opts)\n\t\t\t} else {\n\t\t\t\treturn consumeMapOfMessage(b, mp.Elem(), wtyp, mapi, f, opts)\n\t\t\t}\n\t\t},\n\t}\n\tswitch valField.Kind() {\n\tcase protoreflect.MessageKind:\n\t\tfuncs.merge = mergeMapOfMessage\n\tcase protoreflect.BytesKind:\n\t\tfuncs.merge = mergeMapOfBytes\n\tdefault:\n\t\tfuncs.merge = mergeMap\n\t}\n\tif valFuncs.isInit != nil {\n\t\tfuncs.isInit = func(p pointer, f *coderFieldInfo) error {\n\t\t\treturn isInitMap(p.AsValueOf(ft).Elem(), mapi, f)\n\t\t}\n\t}\n\treturn valueMessage, funcs\n}\n\nconst (\n\tmapKeyTagSize = 1 // field 1, tag size 1.\n\tmapValTagSize = 1 // field 2, tag size 2.\n)\n\nfunc sizeMap(mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) int {\n\tif mapv.Len() == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\titer := mapv.MapRange()\n\tfor iter.Next() {\n\t\tkey := mapi.conv.keyConv.PBValueOf(iter.Key()).MapKey()\n\t\tkeySize := mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts)\n\t\tvar valSize int\n\t\tvalue := mapi.conv.valConv.PBValueOf(iter.Value())\n\t\tif f.mi == nil {\n\t\t\tvalSize = mapi.valFuncs.size(value, mapValTagSize, opts)\n\t\t} else {\n\t\t\tp := pointerOfValue(iter.Value())\n\t\t\tvalSize += mapValTagSize\n\t\t\tvalSize += protowire.SizeBytes(f.mi.sizePointer(p, opts))\n\t\t}\n\t\tn += f.tagsize + protowire.SizeBytes(keySize+valSize)\n\t}\n\treturn n\n}\n\nfunc consumeMap(b []byte, mapv reflect.Value, wtyp protowire.Type, mapi *mapInfo, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif opts.depth--; opts.depth < 0 {\n\t\treturn out, errRecursionDepth\n\t}\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tb, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvar (\n\t\tkey = mapi.keyZero\n\t\tval = mapi.conv.valConv.New()\n\t)\n\tfor len(b) > 0 {\n\t\tnum, wtyp, n := protowire.ConsumeTag(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tif num > protowire.MaxValidNumber {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tb = b[n:]\n\t\terr := errUnknown\n\t\tswitch num {\n\t\tcase genid.MapEntry_Key_field_number:\n\t\t\tvar v protoreflect.Value\n\t\t\tvar o unmarshalOutput\n\t\t\tv, o, err = mapi.keyFuncs.unmarshal(b, key, num, wtyp, opts)\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tkey = v\n\t\t\tn = o.n\n\t\tcase genid.MapEntry_Value_field_number:\n\t\t\tvar v protoreflect.Value\n\t\t\tvar o unmarshalOutput\n\t\t\tv, o, err = mapi.valFuncs.unmarshal(b, val, num, wtyp, opts)\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tval = v\n\t\t\tn = o.n\n\t\t}\n\t\tif err == errUnknown {\n\t\t\tn = protowire.ConsumeFieldValue(num, wtyp, b)\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t} else if err != nil {\n\t\t\treturn out, err\n\t\t}\n\t\tb = b[n:]\n\t}\n\tmapv.SetMapIndex(mapi.conv.keyConv.GoValueOf(key), mapi.conv.valConv.GoValueOf(val))\n\tout.n = n\n\treturn out, nil\n}\n\nfunc consumeMapOfMessage(b []byte, mapv reflect.Value, wtyp protowire.Type, mapi *mapInfo, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif opts.depth--; opts.depth < 0 {\n\t\treturn out, errRecursionDepth\n\t}\n\tif wtyp != protowire.BytesType {\n\t\treturn out, errUnknown\n\t}\n\tb, n := protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn out, errDecode\n\t}\n\tvar (\n\t\tkey = mapi.keyZero\n\t\tval = reflect.New(f.mi.GoReflectType.Elem())\n\t)\n\tfor len(b) > 0 {\n\t\tnum, wtyp, n := protowire.ConsumeTag(b)\n\t\tif n < 0 {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tif num > protowire.MaxValidNumber {\n\t\t\treturn out, errDecode\n\t\t}\n\t\tb = b[n:]\n\t\terr := errUnknown\n\t\tswitch num {\n\t\tcase 1:\n\t\t\tvar v protoreflect.Value\n\t\t\tvar o unmarshalOutput\n\t\t\tv, o, err = mapi.keyFuncs.unmarshal(b, key, num, wtyp, opts)\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tkey = v\n\t\t\tn = o.n\n\t\tcase 2:\n\t\t\tif wtyp != protowire.BytesType {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tvar v []byte\n\t\t\tv, n = protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\tvar o unmarshalOutput\n\t\t\to, err = f.mi.unmarshalPointer(v, pointerOfValue(val), 0, opts)\n\t\t\tif o.initialized {\n\t\t\t\t// Consider this map item initialized so long as we see\n\t\t\t\t// an initialized value.\n\t\t\t\tout.initialized = true\n\t\t\t}\n\t\t}\n\t\tif err == errUnknown {\n\t\t\tn = protowire.ConsumeFieldValue(num, wtyp, b)\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t} else if err != nil {\n\t\t\treturn out, err\n\t\t}\n\t\tb = b[n:]\n\t}\n\tmapv.SetMapIndex(mapi.conv.keyConv.GoValueOf(key), val)\n\tout.n = n\n\treturn out, nil\n}\n\nfunc appendMapItem(b []byte, keyrv, valrv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tif f.mi == nil {\n\t\tkey := mapi.conv.keyConv.PBValueOf(keyrv).MapKey()\n\t\tval := mapi.conv.valConv.PBValueOf(valrv)\n\t\tsize := 0\n\t\tsize += mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts)\n\t\tsize += mapi.valFuncs.size(val, mapValTagSize, opts)\n\t\tb = protowire.AppendVarint(b, uint64(size))\n\t\tbefore := len(b)\n\t\tb, err := mapi.keyFuncs.marshal(b, key.Value(), mapi.keyWiretag, opts)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tb, err = mapi.valFuncs.marshal(b, val, mapi.valWiretag, opts)\n\t\tif measuredSize := len(b) - before; size != measuredSize && err == nil {\n\t\t\treturn nil, errors.MismatchedSizeCalculation(size, measuredSize)\n\t\t}\n\t\treturn b, err\n\t} else {\n\t\tkey := mapi.conv.keyConv.PBValueOf(keyrv).MapKey()\n\t\tval := pointerOfValue(valrv)\n\t\tvalSize := f.mi.sizePointer(val, opts)\n\t\tsize := 0\n\t\tsize += mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts)\n\t\tsize += mapValTagSize + protowire.SizeBytes(valSize)\n\t\tb = protowire.AppendVarint(b, uint64(size))\n\t\tb, err := mapi.keyFuncs.marshal(b, key.Value(), mapi.keyWiretag, opts)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tb = protowire.AppendVarint(b, mapi.valWiretag)\n\t\tb = protowire.AppendVarint(b, uint64(valSize))\n\t\tbefore := len(b)\n\t\tb, err = f.mi.marshalAppendPointer(b, val, opts)\n\t\tif measuredSize := len(b) - before; valSize != measuredSize && err == nil {\n\t\t\treturn nil, errors.MismatchedSizeCalculation(valSize, measuredSize)\n\t\t}\n\t\treturn b, err\n\t}\n}\n\nfunc appendMap(b []byte, mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tif mapv.Len() == 0 {\n\t\treturn b, nil\n\t}\n\tif opts.Deterministic() {\n\t\treturn appendMapDeterministic(b, mapv, mapi, f, opts)\n\t}\n\titer := mapv.MapRange()\n\tfor iter.Next() {\n\t\tvar err error\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb, err = appendMapItem(b, iter.Key(), iter.Value(), mapi, f, opts)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t}\n\treturn b, nil\n}\n\nfunc appendMapDeterministic(b []byte, mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\tkeys := mapv.MapKeys()\n\tsort.Slice(keys, func(i, j int) bool {\n\t\tswitch keys[i].Kind() {\n\t\tcase reflect.Bool:\n\t\t\treturn !keys[i].Bool() && keys[j].Bool()\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\treturn keys[i].Int() < keys[j].Int()\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\t\treturn keys[i].Uint() < keys[j].Uint()\n\t\tcase reflect.Float32, reflect.Float64:\n\t\t\treturn keys[i].Float() < keys[j].Float()\n\t\tcase reflect.String:\n\t\t\treturn keys[i].String() < keys[j].String()\n\t\tdefault:\n\t\t\tpanic(\"invalid kind: \" + keys[i].Kind().String())\n\t\t}\n\t})\n\tfor _, key := range keys {\n\t\tvar err error\n\t\tb = protowire.AppendVarint(b, f.wiretag)\n\t\tb, err = appendMapItem(b, key, mapv.MapIndex(key), mapi, f, opts)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t}\n\treturn b, nil\n}\n\nfunc isInitMap(mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo) error {\n\tif mi := f.mi; mi != nil {\n\t\tmi.init()\n\t\tif !mi.needsInitCheck {\n\t\t\treturn nil\n\t\t}\n\t\titer := mapv.MapRange()\n\t\tfor iter.Next() {\n\t\t\tval := pointerOfValue(iter.Value())\n\t\t\tif err := mi.checkInitializedPointer(val); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t} else {\n\t\titer := mapv.MapRange()\n\t\tfor iter.Next() {\n\t\t\tval := mapi.conv.valConv.PBValueOf(iter.Value())\n\t\t\tif err := mapi.valFuncs.isInit(val); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc mergeMap(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {\n\tdstm := dst.AsValueOf(f.ft).Elem()\n\tsrcm := src.AsValueOf(f.ft).Elem()\n\tif srcm.Len() == 0 {\n\t\treturn\n\t}\n\tif dstm.IsNil() {\n\t\tdstm.Set(reflect.MakeMap(f.ft))\n\t}\n\titer := srcm.MapRange()\n\tfor iter.Next() {\n\t\tdstm.SetMapIndex(iter.Key(), iter.Value())\n\t}\n}\n\nfunc mergeMapOfBytes(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {\n\tdstm := dst.AsValueOf(f.ft).Elem()\n\tsrcm := src.AsValueOf(f.ft).Elem()\n\tif srcm.Len() == 0 {\n\t\treturn\n\t}\n\tif dstm.IsNil() {\n\t\tdstm.Set(reflect.MakeMap(f.ft))\n\t}\n\titer := srcm.MapRange()\n\tfor iter.Next() {\n\t\tdstm.SetMapIndex(iter.Key(), reflect.ValueOf(append(emptyBuf[:], iter.Value().Bytes()...)))\n\t}\n}\n\nfunc mergeMapOfMessage(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {\n\tdstm := dst.AsValueOf(f.ft).Elem()\n\tsrcm := src.AsValueOf(f.ft).Elem()\n\tif srcm.Len() == 0 {\n\t\treturn\n\t}\n\tif dstm.IsNil() {\n\t\tdstm.Set(reflect.MakeMap(f.ft))\n\t}\n\titer := srcm.MapRange()\n\tfor iter.Next() {\n\t\tval := reflect.New(f.ft.Elem().Elem())\n\t\tif f.mi != nil {\n\t\t\tf.mi.mergePointer(pointerOfValue(val), pointerOfValue(iter.Value()), opts)\n\t\t} else {\n\t\t\topts.Merge(asMessage(val), asMessage(iter.Value()))\n\t\t}\n\t\tdstm.SetMapIndex(iter.Key(), val)\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/codec_message.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 impl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"sort\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/encoding/messageset\"\n\t\"google.golang.org/protobuf/internal/order\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\n// coderMessageInfo contains per-message information used by the fast-path functions.\n// This is a different type from MessageInfo to keep MessageInfo as general-purpose as\n// possible.\ntype coderMessageInfo struct {\n\tmethods protoiface.Methods\n\n\torderedCoderFields []*coderFieldInfo\n\tdenseCoderFields   []*coderFieldInfo\n\tcoderFields        map[protowire.Number]*coderFieldInfo\n\tsizecacheOffset    offset\n\tunknownOffset      offset\n\tunknownPtrKind     bool\n\textensionOffset    offset\n\tneedsInitCheck     bool\n\tisMessageSet       bool\n\tnumRequiredFields  uint8\n\n\tlazyOffset     offset\n\tpresenceOffset offset\n\tpresenceSize   presenceSize\n}\n\ntype coderFieldInfo struct {\n\tfuncs      pointerCoderFuncs // fast-path per-field functions\n\tmi         *MessageInfo      // field's message\n\tft         reflect.Type\n\tvalidation validationInfo           // information used by message validation\n\tnum        protoreflect.FieldNumber // field number\n\toffset     offset                   // struct field offset\n\twiretag    uint64                   // field tag (number + wire type)\n\ttagsize    int                      // size of the varint-encoded tag\n\tisPointer  bool                     // true if IsNil may be called on the struct field\n\tisRequired bool                     // true if field is required\n\n\tisLazy        bool\n\tpresenceIndex uint32\n}\n\nconst noPresence = 0xffffffff\n\nfunc (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) {\n\tmi.sizecacheOffset = invalidOffset\n\tmi.unknownOffset = invalidOffset\n\tmi.extensionOffset = invalidOffset\n\tmi.lazyOffset = invalidOffset\n\tmi.presenceOffset = si.presenceOffset\n\n\tif si.sizecacheOffset.IsValid() && si.sizecacheType == sizecacheType {\n\t\tmi.sizecacheOffset = si.sizecacheOffset\n\t}\n\tif si.unknownOffset.IsValid() && (si.unknownType == unknownFieldsAType || si.unknownType == unknownFieldsBType) {\n\t\tmi.unknownOffset = si.unknownOffset\n\t\tmi.unknownPtrKind = si.unknownType.Kind() == reflect.Ptr\n\t}\n\tif si.extensionOffset.IsValid() && si.extensionType == extensionFieldsType {\n\t\tmi.extensionOffset = si.extensionOffset\n\t}\n\n\tmi.coderFields = make(map[protowire.Number]*coderFieldInfo)\n\tfields := mi.Desc.Fields()\n\tpreallocFields := make([]coderFieldInfo, fields.Len())\n\tfor i := 0; i < fields.Len(); i++ {\n\t\tfd := fields.Get(i)\n\n\t\tfs := si.fieldsByNumber[fd.Number()]\n\t\tisOneof := fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic()\n\t\tif isOneof {\n\t\t\tfs = si.oneofsByName[fd.ContainingOneof().Name()]\n\t\t}\n\t\tft := fs.Type\n\t\tvar wiretag uint64\n\t\tif !fd.IsPacked() {\n\t\t\twiretag = protowire.EncodeTag(fd.Number(), wireTypes[fd.Kind()])\n\t\t} else {\n\t\t\twiretag = protowire.EncodeTag(fd.Number(), protowire.BytesType)\n\t\t}\n\t\tvar fieldOffset offset\n\t\tvar funcs pointerCoderFuncs\n\t\tvar childMessage *MessageInfo\n\t\tswitch {\n\t\tcase ft == nil:\n\t\t\t// This never occurs for generated message types.\n\t\t\t// It implies that a hand-crafted type has missing Go fields\n\t\t\t// for specific protobuf message fields.\n\t\t\tfuncs = pointerCoderFuncs{\n\t\t\t\tsize: func(p pointer, f *coderFieldInfo, opts marshalOptions) int {\n\t\t\t\t\treturn 0\n\t\t\t\t},\n\t\t\t\tmarshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) {\n\t\t\t\t\treturn nil, nil\n\t\t\t\t},\n\t\t\t\tunmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) {\n\t\t\t\t\tpanic(\"missing Go struct field for \" + string(fd.FullName()))\n\t\t\t\t},\n\t\t\t\tisInit: func(p pointer, f *coderFieldInfo) error {\n\t\t\t\t\tpanic(\"missing Go struct field for \" + string(fd.FullName()))\n\t\t\t\t},\n\t\t\t\tmerge: func(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {\n\t\t\t\t\tpanic(\"missing Go struct field for \" + string(fd.FullName()))\n\t\t\t\t},\n\t\t\t}\n\t\tcase isOneof:\n\t\t\tfieldOffset = offsetOf(fs)\n\t\tdefault:\n\t\t\tfieldOffset = offsetOf(fs)\n\t\t\tchildMessage, funcs = fieldCoder(fd, ft)\n\t\t}\n\t\tcf := &preallocFields[i]\n\t\t*cf = coderFieldInfo{\n\t\t\tnum:        fd.Number(),\n\t\t\toffset:     fieldOffset,\n\t\t\twiretag:    wiretag,\n\t\t\tft:         ft,\n\t\t\ttagsize:    protowire.SizeVarint(wiretag),\n\t\t\tfuncs:      funcs,\n\t\t\tmi:         childMessage,\n\t\t\tvalidation: newFieldValidationInfo(mi, si, fd, ft),\n\t\t\tisPointer:  fd.Cardinality() == protoreflect.Repeated || fd.HasPresence(),\n\t\t\tisRequired: fd.Cardinality() == protoreflect.Required,\n\n\t\t\tpresenceIndex: noPresence,\n\t\t}\n\t\tmi.orderedCoderFields = append(mi.orderedCoderFields, cf)\n\t\tmi.coderFields[cf.num] = cf\n\t}\n\tfor i, oneofs := 0, mi.Desc.Oneofs(); i < oneofs.Len(); i++ {\n\t\tif od := oneofs.Get(i); !od.IsSynthetic() {\n\t\t\tmi.initOneofFieldCoders(od, si)\n\t\t}\n\t}\n\tif messageset.IsMessageSet(mi.Desc) {\n\t\tif !mi.extensionOffset.IsValid() {\n\t\t\tpanic(fmt.Sprintf(\"%v: MessageSet with no extensions field\", mi.Desc.FullName()))\n\t\t}\n\t\tif !mi.unknownOffset.IsValid() {\n\t\t\tpanic(fmt.Sprintf(\"%v: MessageSet with no unknown field\", mi.Desc.FullName()))\n\t\t}\n\t\tmi.isMessageSet = true\n\t}\n\tsort.Slice(mi.orderedCoderFields, func(i, j int) bool {\n\t\treturn mi.orderedCoderFields[i].num < mi.orderedCoderFields[j].num\n\t})\n\n\tvar maxDense protoreflect.FieldNumber\n\tfor _, cf := range mi.orderedCoderFields {\n\t\tif cf.num >= 16 && cf.num >= 2*maxDense {\n\t\t\tbreak\n\t\t}\n\t\tmaxDense = cf.num\n\t}\n\tmi.denseCoderFields = make([]*coderFieldInfo, maxDense+1)\n\tfor _, cf := range mi.orderedCoderFields {\n\t\tif int(cf.num) >= len(mi.denseCoderFields) {\n\t\t\tbreak\n\t\t}\n\t\tmi.denseCoderFields[cf.num] = cf\n\t}\n\n\t// To preserve compatibility with historic wire output, marshal oneofs last.\n\tif mi.Desc.Oneofs().Len() > 0 {\n\t\tsort.Slice(mi.orderedCoderFields, func(i, j int) bool {\n\t\t\tfi := fields.ByNumber(mi.orderedCoderFields[i].num)\n\t\t\tfj := fields.ByNumber(mi.orderedCoderFields[j].num)\n\t\t\treturn order.LegacyFieldOrder(fi, fj)\n\t\t})\n\t}\n\n\tmi.needsInitCheck = needsInitCheck(mi.Desc)\n\tif mi.methods.Marshal == nil && mi.methods.Size == nil {\n\t\tmi.methods.Flags |= protoiface.SupportMarshalDeterministic\n\t\tmi.methods.Marshal = mi.marshal\n\t\tmi.methods.Size = mi.size\n\t}\n\tif mi.methods.Unmarshal == nil {\n\t\tmi.methods.Flags |= protoiface.SupportUnmarshalDiscardUnknown\n\t\tmi.methods.Unmarshal = mi.unmarshal\n\t}\n\tif mi.methods.CheckInitialized == nil {\n\t\tmi.methods.CheckInitialized = mi.checkInitialized\n\t}\n\tif mi.methods.Merge == nil {\n\t\tmi.methods.Merge = mi.merge\n\t}\n\tif mi.methods.Equal == nil {\n\t\tmi.methods.Equal = equal\n\t}\n}\n\n// getUnknownBytes returns a *[]byte for the unknown fields.\n// It is the caller's responsibility to check whether the pointer is nil.\n// This function is specially designed to be inlineable.\nfunc (mi *MessageInfo) getUnknownBytes(p pointer) *[]byte {\n\tif mi.unknownPtrKind {\n\t\treturn *p.Apply(mi.unknownOffset).BytesPtr()\n\t} else {\n\t\treturn p.Apply(mi.unknownOffset).Bytes()\n\t}\n}\n\n// mutableUnknownBytes returns a *[]byte for the unknown fields.\n// The returned pointer is guaranteed to not be nil.\nfunc (mi *MessageInfo) mutableUnknownBytes(p pointer) *[]byte {\n\tif mi.unknownPtrKind {\n\t\tbp := p.Apply(mi.unknownOffset).BytesPtr()\n\t\tif *bp == nil {\n\t\t\t*bp = new([]byte)\n\t\t}\n\t\treturn *bp\n\t} else {\n\t\treturn p.Apply(mi.unknownOffset).Bytes()\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.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 impl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"sort\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/encoding/messageset\"\n\t\"google.golang.org/protobuf/internal/filedesc\"\n\t\"google.golang.org/protobuf/internal/order\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\tpiface \"google.golang.org/protobuf/runtime/protoiface\"\n)\n\nfunc (mi *MessageInfo) makeOpaqueCoderMethods(t reflect.Type, si opaqueStructInfo) {\n\tmi.sizecacheOffset = si.sizecacheOffset\n\tmi.unknownOffset = si.unknownOffset\n\tmi.unknownPtrKind = si.unknownType.Kind() == reflect.Ptr\n\tmi.extensionOffset = si.extensionOffset\n\tmi.lazyOffset = si.lazyOffset\n\tmi.presenceOffset = si.presenceOffset\n\n\tmi.coderFields = make(map[protowire.Number]*coderFieldInfo)\n\tfields := mi.Desc.Fields()\n\tfor i := 0; i < fields.Len(); i++ {\n\t\tfd := fields.Get(i)\n\n\t\tfs := si.fieldsByNumber[fd.Number()]\n\t\tif fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic() {\n\t\t\tfs = si.oneofsByName[fd.ContainingOneof().Name()]\n\t\t}\n\t\tft := fs.Type\n\t\tvar wiretag uint64\n\t\tif !fd.IsPacked() {\n\t\t\twiretag = protowire.EncodeTag(fd.Number(), wireTypes[fd.Kind()])\n\t\t} else {\n\t\t\twiretag = protowire.EncodeTag(fd.Number(), protowire.BytesType)\n\t\t}\n\t\tvar fieldOffset offset\n\t\tvar funcs pointerCoderFuncs\n\t\tvar childMessage *MessageInfo\n\t\tswitch {\n\t\tcase fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic():\n\t\t\tfieldOffset = offsetOf(fs)\n\t\tcase fd.Message() != nil && !fd.IsMap():\n\t\t\tfieldOffset = offsetOf(fs)\n\t\t\tif fd.IsList() {\n\t\t\t\tchildMessage, funcs = makeOpaqueRepeatedMessageFieldCoder(fd, ft)\n\t\t\t} else {\n\t\t\t\tchildMessage, funcs = makeOpaqueMessageFieldCoder(fd, ft)\n\t\t\t}\n\t\tdefault:\n\t\t\tfieldOffset = offsetOf(fs)\n\t\t\tchildMessage, funcs = fieldCoder(fd, ft)\n\t\t}\n\t\tcf := &coderFieldInfo{\n\t\t\tnum:        fd.Number(),\n\t\t\toffset:     fieldOffset,\n\t\t\twiretag:    wiretag,\n\t\t\tft:         ft,\n\t\t\ttagsize:    protowire.SizeVarint(wiretag),\n\t\t\tfuncs:      funcs,\n\t\t\tmi:         childMessage,\n\t\t\tvalidation: newFieldValidationInfo(mi, si.structInfo, fd, ft),\n\t\t\tisPointer: (fd.Cardinality() == protoreflect.Repeated ||\n\t\t\t\tfd.Kind() == protoreflect.MessageKind ||\n\t\t\t\tfd.Kind() == protoreflect.GroupKind),\n\t\t\tisRequired:    fd.Cardinality() == protoreflect.Required,\n\t\t\tpresenceIndex: noPresence,\n\t\t}\n\n\t\t// TODO: Use presence for all fields.\n\t\t//\n\t\t// In some cases, such as maps, presence means only \"might be set\" rather\n\t\t// than \"is definitely set\", but every field should have a presence bit to\n\t\t// permit us to skip over definitely-unset fields at marshal time.\n\n\t\tvar hasPresence bool\n\t\thasPresence, cf.isLazy = filedesc.UsePresenceForField(fd)\n\n\t\tif hasPresence {\n\t\t\tcf.presenceIndex, mi.presenceSize = presenceIndex(mi.Desc, fd)\n\t\t}\n\n\t\tmi.orderedCoderFields = append(mi.orderedCoderFields, cf)\n\t\tmi.coderFields[cf.num] = cf\n\t}\n\tfor i, oneofs := 0, mi.Desc.Oneofs(); i < oneofs.Len(); i++ {\n\t\tif od := oneofs.Get(i); !od.IsSynthetic() {\n\t\t\tmi.initOneofFieldCoders(od, si.structInfo)\n\t\t}\n\t}\n\tif messageset.IsMessageSet(mi.Desc) {\n\t\tif !mi.extensionOffset.IsValid() {\n\t\t\tpanic(fmt.Sprintf(\"%v: MessageSet with no extensions field\", mi.Desc.FullName()))\n\t\t}\n\t\tif !mi.unknownOffset.IsValid() {\n\t\t\tpanic(fmt.Sprintf(\"%v: MessageSet with no unknown field\", mi.Desc.FullName()))\n\t\t}\n\t\tmi.isMessageSet = true\n\t}\n\tsort.Slice(mi.orderedCoderFields, func(i, j int) bool {\n\t\treturn mi.orderedCoderFields[i].num < mi.orderedCoderFields[j].num\n\t})\n\n\tvar maxDense protoreflect.FieldNumber\n\tfor _, cf := range mi.orderedCoderFields {\n\t\tif cf.num >= 16 && cf.num >= 2*maxDense {\n\t\t\tbreak\n\t\t}\n\t\tmaxDense = cf.num\n\t}\n\tmi.denseCoderFields = make([]*coderFieldInfo, maxDense+1)\n\tfor _, cf := range mi.orderedCoderFields {\n\t\tif int(cf.num) > len(mi.denseCoderFields) {\n\t\t\tbreak\n\t\t}\n\t\tmi.denseCoderFields[cf.num] = cf\n\t}\n\n\t// To preserve compatibility with historic wire output, marshal oneofs last.\n\tif mi.Desc.Oneofs().Len() > 0 {\n\t\tsort.Slice(mi.orderedCoderFields, func(i, j int) bool {\n\t\t\tfi := fields.ByNumber(mi.orderedCoderFields[i].num)\n\t\t\tfj := fields.ByNumber(mi.orderedCoderFields[j].num)\n\t\t\treturn order.LegacyFieldOrder(fi, fj)\n\t\t})\n\t}\n\n\tmi.needsInitCheck = needsInitCheck(mi.Desc)\n\tif mi.methods.Marshal == nil && mi.methods.Size == nil {\n\t\tmi.methods.Flags |= piface.SupportMarshalDeterministic\n\t\tmi.methods.Marshal = mi.marshal\n\t\tmi.methods.Size = mi.size\n\t}\n\tif mi.methods.Unmarshal == nil {\n\t\tmi.methods.Flags |= piface.SupportUnmarshalDiscardUnknown\n\t\tmi.methods.Unmarshal = mi.unmarshal\n\t}\n\tif mi.methods.CheckInitialized == nil {\n\t\tmi.methods.CheckInitialized = mi.checkInitialized\n\t}\n\tif mi.methods.Merge == nil {\n\t\tmi.methods.Merge = mi.merge\n\t}\n\tif mi.methods.Equal == nil {\n\t\tmi.methods.Equal = equal\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/codec_messageset.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 impl\n\nimport (\n\t\"sort\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/encoding/messageset\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/internal/flags\"\n)\n\nfunc sizeMessageSet(mi *MessageInfo, p pointer, opts marshalOptions) (size int) {\n\tif !flags.ProtoLegacy {\n\t\treturn 0\n\t}\n\n\text := *p.Apply(mi.extensionOffset).Extensions()\n\tfor _, x := range ext {\n\t\txi := getExtensionFieldInfo(x.Type())\n\t\tif xi.funcs.size == nil {\n\t\t\tcontinue\n\t\t}\n\t\tnum, _ := protowire.DecodeTag(xi.wiretag)\n\t\tsize += messageset.SizeField(num)\n\t\tif fullyLazyExtensions(opts) {\n\t\t\t// Don't expand the extension, instead use the buffer to calculate size\n\t\t\tif lb := x.lazyBuffer(); lb != nil {\n\t\t\t\t// We got hold of the buffer, so it's still lazy.\n\t\t\t\t// Don't count the tag size in the extension buffer, it's already added.\n\t\t\t\tsize += protowire.SizeTag(messageset.FieldMessage) + len(lb) - xi.tagsize\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tsize += xi.funcs.size(x.Value(), protowire.SizeTag(messageset.FieldMessage), opts)\n\t}\n\n\tif u := mi.getUnknownBytes(p); u != nil {\n\t\tsize += messageset.SizeUnknown(*u)\n\t}\n\n\treturn size\n}\n\nfunc marshalMessageSet(mi *MessageInfo, b []byte, p pointer, opts marshalOptions) ([]byte, error) {\n\tif !flags.ProtoLegacy {\n\t\treturn b, errors.New(\"no support for message_set_wire_format\")\n\t}\n\n\text := *p.Apply(mi.extensionOffset).Extensions()\n\tswitch len(ext) {\n\tcase 0:\n\tcase 1:\n\t\t// Fast-path for one extension: Don't bother sorting the keys.\n\t\tfor _, x := range ext {\n\t\t\tvar err error\n\t\t\tb, err = marshalMessageSetField(mi, b, x, opts)\n\t\t\tif err != nil {\n\t\t\t\treturn b, err\n\t\t\t}\n\t\t}\n\tdefault:\n\t\t// Sort the keys to provide a deterministic encoding.\n\t\t// Not sure this is required, but the old code does it.\n\t\tkeys := make([]int, 0, len(ext))\n\t\tfor k := range ext {\n\t\t\tkeys = append(keys, int(k))\n\t\t}\n\t\tsort.Ints(keys)\n\t\tfor _, k := range keys {\n\t\t\tvar err error\n\t\t\tb, err = marshalMessageSetField(mi, b, ext[int32(k)], opts)\n\t\t\tif err != nil {\n\t\t\t\treturn b, err\n\t\t\t}\n\t\t}\n\t}\n\n\tif u := mi.getUnknownBytes(p); u != nil {\n\t\tvar err error\n\t\tb, err = messageset.AppendUnknown(b, *u)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t}\n\n\treturn b, nil\n}\n\nfunc marshalMessageSetField(mi *MessageInfo, b []byte, x ExtensionField, opts marshalOptions) ([]byte, error) {\n\txi := getExtensionFieldInfo(x.Type())\n\tnum, _ := protowire.DecodeTag(xi.wiretag)\n\tb = messageset.AppendFieldStart(b, num)\n\n\tif fullyLazyExtensions(opts) {\n\t\t// Don't expand the extension if it's still in wire format, instead use the buffer content.\n\t\tif lb := x.lazyBuffer(); lb != nil {\n\t\t\t// The tag inside the lazy buffer is a different tag (the extension\n\t\t\t// number), but what we need here is the tag for FieldMessage:\n\t\t\tb = protowire.AppendVarint(b, protowire.EncodeTag(messageset.FieldMessage, protowire.BytesType))\n\t\t\tb = append(b, lb[xi.tagsize:]...)\n\t\t\tb = messageset.AppendFieldEnd(b)\n\t\t\treturn b, nil\n\t\t}\n\t}\n\n\tb, err := xi.funcs.marshal(b, x.Value(), protowire.EncodeTag(messageset.FieldMessage, protowire.BytesType), opts)\n\tif err != nil {\n\t\treturn b, err\n\t}\n\tb = messageset.AppendFieldEnd(b)\n\treturn b, nil\n}\n\nfunc unmarshalMessageSet(mi *MessageInfo, b []byte, p pointer, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tif !flags.ProtoLegacy {\n\t\treturn out, errors.New(\"no support for message_set_wire_format\")\n\t}\n\n\tep := p.Apply(mi.extensionOffset).Extensions()\n\tif *ep == nil {\n\t\t*ep = make(map[int32]ExtensionField)\n\t}\n\text := *ep\n\tinitialized := true\n\terr = messageset.Unmarshal(b, true, func(num protowire.Number, v []byte) error {\n\t\to, err := mi.unmarshalExtension(v, num, protowire.BytesType, ext, opts)\n\t\tif err == errUnknown {\n\t\t\tu := mi.mutableUnknownBytes(p)\n\t\t\t*u = protowire.AppendTag(*u, num, protowire.BytesType)\n\t\t\t*u = append(*u, v...)\n\t\t\treturn nil\n\t\t}\n\t\tif !o.initialized {\n\t\t\tinitialized = false\n\t\t}\n\t\treturn err\n\t})\n\tout.n = len(b)\n\tout.initialized = initialized\n\treturn out, err\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/codec_tables.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 impl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/strs\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// pointerCoderFuncs is a set of pointer encoding functions.\ntype pointerCoderFuncs struct {\n\tmi        *MessageInfo\n\tsize      func(p pointer, f *coderFieldInfo, opts marshalOptions) int\n\tmarshal   func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error)\n\tunmarshal func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error)\n\tisInit    func(p pointer, f *coderFieldInfo) error\n\tmerge     func(dst, src pointer, f *coderFieldInfo, opts mergeOptions)\n}\n\n// valueCoderFuncs is a set of protoreflect.Value encoding functions.\ntype valueCoderFuncs struct {\n\tsize      func(v protoreflect.Value, tagsize int, opts marshalOptions) int\n\tmarshal   func(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error)\n\tunmarshal func(b []byte, v protoreflect.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (protoreflect.Value, unmarshalOutput, error)\n\tisInit    func(v protoreflect.Value) error\n\tmerge     func(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value\n}\n\n// fieldCoder returns pointer functions for a field, used for operating on\n// struct fields.\nfunc fieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointerCoderFuncs) {\n\tswitch {\n\tcase fd.IsMap():\n\t\treturn encoderFuncsForMap(fd, ft)\n\tcase fd.Cardinality() == protoreflect.Repeated && !fd.IsPacked():\n\t\t// Repeated fields (not packed).\n\t\tif ft.Kind() != reflect.Slice {\n\t\t\tbreak\n\t\t}\n\t\tft := ft.Elem()\n\t\tswitch fd.Kind() {\n\t\tcase protoreflect.BoolKind:\n\t\t\tif ft.Kind() == reflect.Bool {\n\t\t\t\treturn nil, coderBoolSlice\n\t\t\t}\n\t\tcase protoreflect.EnumKind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderEnumSlice\n\t\t\t}\n\t\tcase protoreflect.Int32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderInt32Slice\n\t\t\t}\n\t\tcase protoreflect.Sint32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderSint32Slice\n\t\t\t}\n\t\tcase protoreflect.Uint32Kind:\n\t\t\tif ft.Kind() == reflect.Uint32 {\n\t\t\t\treturn nil, coderUint32Slice\n\t\t\t}\n\t\tcase protoreflect.Int64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderInt64Slice\n\t\t\t}\n\t\tcase protoreflect.Sint64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderSint64Slice\n\t\t\t}\n\t\tcase protoreflect.Uint64Kind:\n\t\t\tif ft.Kind() == reflect.Uint64 {\n\t\t\t\treturn nil, coderUint64Slice\n\t\t\t}\n\t\tcase protoreflect.Sfixed32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderSfixed32Slice\n\t\t\t}\n\t\tcase protoreflect.Fixed32Kind:\n\t\t\tif ft.Kind() == reflect.Uint32 {\n\t\t\t\treturn nil, coderFixed32Slice\n\t\t\t}\n\t\tcase protoreflect.FloatKind:\n\t\t\tif ft.Kind() == reflect.Float32 {\n\t\t\t\treturn nil, coderFloatSlice\n\t\t\t}\n\t\tcase protoreflect.Sfixed64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderSfixed64Slice\n\t\t\t}\n\t\tcase protoreflect.Fixed64Kind:\n\t\t\tif ft.Kind() == reflect.Uint64 {\n\t\t\t\treturn nil, coderFixed64Slice\n\t\t\t}\n\t\tcase protoreflect.DoubleKind:\n\t\t\tif ft.Kind() == reflect.Float64 {\n\t\t\t\treturn nil, coderDoubleSlice\n\t\t\t}\n\t\tcase protoreflect.StringKind:\n\t\t\tif ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {\n\t\t\t\treturn nil, coderStringSliceValidateUTF8\n\t\t\t}\n\t\t\tif ft.Kind() == reflect.String {\n\t\t\t\treturn nil, coderStringSlice\n\t\t\t}\n\t\t\tif ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 && strs.EnforceUTF8(fd) {\n\t\t\t\treturn nil, coderBytesSliceValidateUTF8\n\t\t\t}\n\t\t\tif ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {\n\t\t\t\treturn nil, coderBytesSlice\n\t\t\t}\n\t\tcase protoreflect.BytesKind:\n\t\t\tif ft.Kind() == reflect.String {\n\t\t\t\treturn nil, coderStringSlice\n\t\t\t}\n\t\t\tif ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {\n\t\t\t\treturn nil, coderBytesSlice\n\t\t\t}\n\t\tcase protoreflect.MessageKind:\n\t\t\treturn getMessageInfo(ft), makeMessageSliceFieldCoder(fd, ft)\n\t\tcase protoreflect.GroupKind:\n\t\t\treturn getMessageInfo(ft), makeGroupSliceFieldCoder(fd, ft)\n\t\t}\n\tcase fd.Cardinality() == protoreflect.Repeated && fd.IsPacked():\n\t\t// Packed repeated fields.\n\t\t//\n\t\t// Only repeated fields of primitive numeric types\n\t\t// (Varint, Fixed32, or Fixed64 wire type) can be packed.\n\t\tif ft.Kind() != reflect.Slice {\n\t\t\tbreak\n\t\t}\n\t\tft := ft.Elem()\n\t\tswitch fd.Kind() {\n\t\tcase protoreflect.BoolKind:\n\t\t\tif ft.Kind() == reflect.Bool {\n\t\t\t\treturn nil, coderBoolPackedSlice\n\t\t\t}\n\t\tcase protoreflect.EnumKind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderEnumPackedSlice\n\t\t\t}\n\t\tcase protoreflect.Int32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderInt32PackedSlice\n\t\t\t}\n\t\tcase protoreflect.Sint32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderSint32PackedSlice\n\t\t\t}\n\t\tcase protoreflect.Uint32Kind:\n\t\t\tif ft.Kind() == reflect.Uint32 {\n\t\t\t\treturn nil, coderUint32PackedSlice\n\t\t\t}\n\t\tcase protoreflect.Int64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderInt64PackedSlice\n\t\t\t}\n\t\tcase protoreflect.Sint64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderSint64PackedSlice\n\t\t\t}\n\t\tcase protoreflect.Uint64Kind:\n\t\t\tif ft.Kind() == reflect.Uint64 {\n\t\t\t\treturn nil, coderUint64PackedSlice\n\t\t\t}\n\t\tcase protoreflect.Sfixed32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderSfixed32PackedSlice\n\t\t\t}\n\t\tcase protoreflect.Fixed32Kind:\n\t\t\tif ft.Kind() == reflect.Uint32 {\n\t\t\t\treturn nil, coderFixed32PackedSlice\n\t\t\t}\n\t\tcase protoreflect.FloatKind:\n\t\t\tif ft.Kind() == reflect.Float32 {\n\t\t\t\treturn nil, coderFloatPackedSlice\n\t\t\t}\n\t\tcase protoreflect.Sfixed64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderSfixed64PackedSlice\n\t\t\t}\n\t\tcase protoreflect.Fixed64Kind:\n\t\t\tif ft.Kind() == reflect.Uint64 {\n\t\t\t\treturn nil, coderFixed64PackedSlice\n\t\t\t}\n\t\tcase protoreflect.DoubleKind:\n\t\t\tif ft.Kind() == reflect.Float64 {\n\t\t\t\treturn nil, coderDoublePackedSlice\n\t\t\t}\n\t\t}\n\tcase fd.Kind() == protoreflect.MessageKind:\n\t\treturn getMessageInfo(ft), makeMessageFieldCoder(fd, ft)\n\tcase fd.Kind() == protoreflect.GroupKind:\n\t\treturn getMessageInfo(ft), makeGroupFieldCoder(fd, ft)\n\tcase !fd.HasPresence() && fd.ContainingOneof() == nil:\n\t\t// Populated oneof fields always encode even if set to the zero value,\n\t\t// which normally are not encoded in proto3.\n\t\tswitch fd.Kind() {\n\t\tcase protoreflect.BoolKind:\n\t\t\tif ft.Kind() == reflect.Bool {\n\t\t\t\treturn nil, coderBoolNoZero\n\t\t\t}\n\t\tcase protoreflect.EnumKind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderEnumNoZero\n\t\t\t}\n\t\tcase protoreflect.Int32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderInt32NoZero\n\t\t\t}\n\t\tcase protoreflect.Sint32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderSint32NoZero\n\t\t\t}\n\t\tcase protoreflect.Uint32Kind:\n\t\t\tif ft.Kind() == reflect.Uint32 {\n\t\t\t\treturn nil, coderUint32NoZero\n\t\t\t}\n\t\tcase protoreflect.Int64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderInt64NoZero\n\t\t\t}\n\t\tcase protoreflect.Sint64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderSint64NoZero\n\t\t\t}\n\t\tcase protoreflect.Uint64Kind:\n\t\t\tif ft.Kind() == reflect.Uint64 {\n\t\t\t\treturn nil, coderUint64NoZero\n\t\t\t}\n\t\tcase protoreflect.Sfixed32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderSfixed32NoZero\n\t\t\t}\n\t\tcase protoreflect.Fixed32Kind:\n\t\t\tif ft.Kind() == reflect.Uint32 {\n\t\t\t\treturn nil, coderFixed32NoZero\n\t\t\t}\n\t\tcase protoreflect.FloatKind:\n\t\t\tif ft.Kind() == reflect.Float32 {\n\t\t\t\treturn nil, coderFloatNoZero\n\t\t\t}\n\t\tcase protoreflect.Sfixed64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderSfixed64NoZero\n\t\t\t}\n\t\tcase protoreflect.Fixed64Kind:\n\t\t\tif ft.Kind() == reflect.Uint64 {\n\t\t\t\treturn nil, coderFixed64NoZero\n\t\t\t}\n\t\tcase protoreflect.DoubleKind:\n\t\t\tif ft.Kind() == reflect.Float64 {\n\t\t\t\treturn nil, coderDoubleNoZero\n\t\t\t}\n\t\tcase protoreflect.StringKind:\n\t\t\tif ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {\n\t\t\t\treturn nil, coderStringNoZeroValidateUTF8\n\t\t\t}\n\t\t\tif ft.Kind() == reflect.String {\n\t\t\t\treturn nil, coderStringNoZero\n\t\t\t}\n\t\t\tif ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 && strs.EnforceUTF8(fd) {\n\t\t\t\treturn nil, coderBytesNoZeroValidateUTF8\n\t\t\t}\n\t\t\tif ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {\n\t\t\t\treturn nil, coderBytesNoZero\n\t\t\t}\n\t\tcase protoreflect.BytesKind:\n\t\t\tif ft.Kind() == reflect.String {\n\t\t\t\treturn nil, coderStringNoZero\n\t\t\t}\n\t\t\tif ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {\n\t\t\t\treturn nil, coderBytesNoZero\n\t\t\t}\n\t\t}\n\tcase ft.Kind() == reflect.Ptr:\n\t\tft := ft.Elem()\n\t\tswitch fd.Kind() {\n\t\tcase protoreflect.BoolKind:\n\t\t\tif ft.Kind() == reflect.Bool {\n\t\t\t\treturn nil, coderBoolPtr\n\t\t\t}\n\t\tcase protoreflect.EnumKind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderEnumPtr\n\t\t\t}\n\t\tcase protoreflect.Int32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderInt32Ptr\n\t\t\t}\n\t\tcase protoreflect.Sint32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderSint32Ptr\n\t\t\t}\n\t\tcase protoreflect.Uint32Kind:\n\t\t\tif ft.Kind() == reflect.Uint32 {\n\t\t\t\treturn nil, coderUint32Ptr\n\t\t\t}\n\t\tcase protoreflect.Int64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderInt64Ptr\n\t\t\t}\n\t\tcase protoreflect.Sint64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderSint64Ptr\n\t\t\t}\n\t\tcase protoreflect.Uint64Kind:\n\t\t\tif ft.Kind() == reflect.Uint64 {\n\t\t\t\treturn nil, coderUint64Ptr\n\t\t\t}\n\t\tcase protoreflect.Sfixed32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderSfixed32Ptr\n\t\t\t}\n\t\tcase protoreflect.Fixed32Kind:\n\t\t\tif ft.Kind() == reflect.Uint32 {\n\t\t\t\treturn nil, coderFixed32Ptr\n\t\t\t}\n\t\tcase protoreflect.FloatKind:\n\t\t\tif ft.Kind() == reflect.Float32 {\n\t\t\t\treturn nil, coderFloatPtr\n\t\t\t}\n\t\tcase protoreflect.Sfixed64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderSfixed64Ptr\n\t\t\t}\n\t\tcase protoreflect.Fixed64Kind:\n\t\t\tif ft.Kind() == reflect.Uint64 {\n\t\t\t\treturn nil, coderFixed64Ptr\n\t\t\t}\n\t\tcase protoreflect.DoubleKind:\n\t\t\tif ft.Kind() == reflect.Float64 {\n\t\t\t\treturn nil, coderDoublePtr\n\t\t\t}\n\t\tcase protoreflect.StringKind:\n\t\t\tif ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {\n\t\t\t\treturn nil, coderStringPtrValidateUTF8\n\t\t\t}\n\t\t\tif ft.Kind() == reflect.String {\n\t\t\t\treturn nil, coderStringPtr\n\t\t\t}\n\t\tcase protoreflect.BytesKind:\n\t\t\tif ft.Kind() == reflect.String {\n\t\t\t\treturn nil, coderStringPtr\n\t\t\t}\n\t\t}\n\tdefault:\n\t\tswitch fd.Kind() {\n\t\tcase protoreflect.BoolKind:\n\t\t\tif ft.Kind() == reflect.Bool {\n\t\t\t\treturn nil, coderBool\n\t\t\t}\n\t\tcase protoreflect.EnumKind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderEnum\n\t\t\t}\n\t\tcase protoreflect.Int32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderInt32\n\t\t\t}\n\t\tcase protoreflect.Sint32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderSint32\n\t\t\t}\n\t\tcase protoreflect.Uint32Kind:\n\t\t\tif ft.Kind() == reflect.Uint32 {\n\t\t\t\treturn nil, coderUint32\n\t\t\t}\n\t\tcase protoreflect.Int64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderInt64\n\t\t\t}\n\t\tcase protoreflect.Sint64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderSint64\n\t\t\t}\n\t\tcase protoreflect.Uint64Kind:\n\t\t\tif ft.Kind() == reflect.Uint64 {\n\t\t\t\treturn nil, coderUint64\n\t\t\t}\n\t\tcase protoreflect.Sfixed32Kind:\n\t\t\tif ft.Kind() == reflect.Int32 {\n\t\t\t\treturn nil, coderSfixed32\n\t\t\t}\n\t\tcase protoreflect.Fixed32Kind:\n\t\t\tif ft.Kind() == reflect.Uint32 {\n\t\t\t\treturn nil, coderFixed32\n\t\t\t}\n\t\tcase protoreflect.FloatKind:\n\t\t\tif ft.Kind() == reflect.Float32 {\n\t\t\t\treturn nil, coderFloat\n\t\t\t}\n\t\tcase protoreflect.Sfixed64Kind:\n\t\t\tif ft.Kind() == reflect.Int64 {\n\t\t\t\treturn nil, coderSfixed64\n\t\t\t}\n\t\tcase protoreflect.Fixed64Kind:\n\t\t\tif ft.Kind() == reflect.Uint64 {\n\t\t\t\treturn nil, coderFixed64\n\t\t\t}\n\t\tcase protoreflect.DoubleKind:\n\t\t\tif ft.Kind() == reflect.Float64 {\n\t\t\t\treturn nil, coderDouble\n\t\t\t}\n\t\tcase protoreflect.StringKind:\n\t\t\tif ft.Kind() == reflect.String && strs.EnforceUTF8(fd) {\n\t\t\t\treturn nil, coderStringValidateUTF8\n\t\t\t}\n\t\t\tif ft.Kind() == reflect.String {\n\t\t\t\treturn nil, coderString\n\t\t\t}\n\t\t\tif ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 && strs.EnforceUTF8(fd) {\n\t\t\t\treturn nil, coderBytesValidateUTF8\n\t\t\t}\n\t\t\tif ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {\n\t\t\t\treturn nil, coderBytes\n\t\t\t}\n\t\tcase protoreflect.BytesKind:\n\t\t\tif ft.Kind() == reflect.String {\n\t\t\t\treturn nil, coderString\n\t\t\t}\n\t\t\tif ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 {\n\t\t\t\treturn nil, coderBytes\n\t\t\t}\n\t\t}\n\t}\n\tpanic(fmt.Sprintf(\"invalid type: no encoder for %v %v %v/%v\", fd.FullName(), fd.Cardinality(), fd.Kind(), ft))\n}\n\n// encoderFuncsForValue returns value functions for a field, used for\n// extension values and map encoding.\nfunc encoderFuncsForValue(fd protoreflect.FieldDescriptor) valueCoderFuncs {\n\tswitch {\n\tcase fd.Cardinality() == protoreflect.Repeated && !fd.IsPacked():\n\t\tswitch fd.Kind() {\n\t\tcase protoreflect.BoolKind:\n\t\t\treturn coderBoolSliceValue\n\t\tcase protoreflect.EnumKind:\n\t\t\treturn coderEnumSliceValue\n\t\tcase protoreflect.Int32Kind:\n\t\t\treturn coderInt32SliceValue\n\t\tcase protoreflect.Sint32Kind:\n\t\t\treturn coderSint32SliceValue\n\t\tcase protoreflect.Uint32Kind:\n\t\t\treturn coderUint32SliceValue\n\t\tcase protoreflect.Int64Kind:\n\t\t\treturn coderInt64SliceValue\n\t\tcase protoreflect.Sint64Kind:\n\t\t\treturn coderSint64SliceValue\n\t\tcase protoreflect.Uint64Kind:\n\t\t\treturn coderUint64SliceValue\n\t\tcase protoreflect.Sfixed32Kind:\n\t\t\treturn coderSfixed32SliceValue\n\t\tcase protoreflect.Fixed32Kind:\n\t\t\treturn coderFixed32SliceValue\n\t\tcase protoreflect.FloatKind:\n\t\t\treturn coderFloatSliceValue\n\t\tcase protoreflect.Sfixed64Kind:\n\t\t\treturn coderSfixed64SliceValue\n\t\tcase protoreflect.Fixed64Kind:\n\t\t\treturn coderFixed64SliceValue\n\t\tcase protoreflect.DoubleKind:\n\t\t\treturn coderDoubleSliceValue\n\t\tcase protoreflect.StringKind:\n\t\t\t// We don't have a UTF-8 validating coder for repeated string fields.\n\t\t\t// Value coders are used for extensions and maps.\n\t\t\t// Extensions are never proto3, and maps never contain lists.\n\t\t\treturn coderStringSliceValue\n\t\tcase protoreflect.BytesKind:\n\t\t\treturn coderBytesSliceValue\n\t\tcase protoreflect.MessageKind:\n\t\t\treturn coderMessageSliceValue\n\t\tcase protoreflect.GroupKind:\n\t\t\treturn coderGroupSliceValue\n\t\t}\n\tcase fd.Cardinality() == protoreflect.Repeated && fd.IsPacked():\n\t\tswitch fd.Kind() {\n\t\tcase protoreflect.BoolKind:\n\t\t\treturn coderBoolPackedSliceValue\n\t\tcase protoreflect.EnumKind:\n\t\t\treturn coderEnumPackedSliceValue\n\t\tcase protoreflect.Int32Kind:\n\t\t\treturn coderInt32PackedSliceValue\n\t\tcase protoreflect.Sint32Kind:\n\t\t\treturn coderSint32PackedSliceValue\n\t\tcase protoreflect.Uint32Kind:\n\t\t\treturn coderUint32PackedSliceValue\n\t\tcase protoreflect.Int64Kind:\n\t\t\treturn coderInt64PackedSliceValue\n\t\tcase protoreflect.Sint64Kind:\n\t\t\treturn coderSint64PackedSliceValue\n\t\tcase protoreflect.Uint64Kind:\n\t\t\treturn coderUint64PackedSliceValue\n\t\tcase protoreflect.Sfixed32Kind:\n\t\t\treturn coderSfixed32PackedSliceValue\n\t\tcase protoreflect.Fixed32Kind:\n\t\t\treturn coderFixed32PackedSliceValue\n\t\tcase protoreflect.FloatKind:\n\t\t\treturn coderFloatPackedSliceValue\n\t\tcase protoreflect.Sfixed64Kind:\n\t\t\treturn coderSfixed64PackedSliceValue\n\t\tcase protoreflect.Fixed64Kind:\n\t\t\treturn coderFixed64PackedSliceValue\n\t\tcase protoreflect.DoubleKind:\n\t\t\treturn coderDoublePackedSliceValue\n\t\t}\n\tdefault:\n\t\tswitch fd.Kind() {\n\t\tdefault:\n\t\tcase protoreflect.BoolKind:\n\t\t\treturn coderBoolValue\n\t\tcase protoreflect.EnumKind:\n\t\t\treturn coderEnumValue\n\t\tcase protoreflect.Int32Kind:\n\t\t\treturn coderInt32Value\n\t\tcase protoreflect.Sint32Kind:\n\t\t\treturn coderSint32Value\n\t\tcase protoreflect.Uint32Kind:\n\t\t\treturn coderUint32Value\n\t\tcase protoreflect.Int64Kind:\n\t\t\treturn coderInt64Value\n\t\tcase protoreflect.Sint64Kind:\n\t\t\treturn coderSint64Value\n\t\tcase protoreflect.Uint64Kind:\n\t\t\treturn coderUint64Value\n\t\tcase protoreflect.Sfixed32Kind:\n\t\t\treturn coderSfixed32Value\n\t\tcase protoreflect.Fixed32Kind:\n\t\t\treturn coderFixed32Value\n\t\tcase protoreflect.FloatKind:\n\t\t\treturn coderFloatValue\n\t\tcase protoreflect.Sfixed64Kind:\n\t\t\treturn coderSfixed64Value\n\t\tcase protoreflect.Fixed64Kind:\n\t\t\treturn coderFixed64Value\n\t\tcase protoreflect.DoubleKind:\n\t\t\treturn coderDoubleValue\n\t\tcase protoreflect.StringKind:\n\t\t\tif strs.EnforceUTF8(fd) {\n\t\t\t\treturn coderStringValueValidateUTF8\n\t\t\t}\n\t\t\treturn coderStringValue\n\t\tcase protoreflect.BytesKind:\n\t\t\treturn coderBytesValue\n\t\tcase protoreflect.MessageKind:\n\t\t\treturn coderMessageValue\n\t\tcase protoreflect.GroupKind:\n\t\t\treturn coderGroupValue\n\t\t}\n\t}\n\tpanic(fmt.Sprintf(\"invalid field: no encoder for %v %v %v\", fd.FullName(), fd.Cardinality(), fd.Kind()))\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.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 impl\n\n// When using unsafe pointers, we can just treat enum values as int32s.\n\nvar (\n\tcoderEnumNoZero      = coderInt32NoZero\n\tcoderEnum            = coderInt32\n\tcoderEnumPtr         = coderInt32Ptr\n\tcoderEnumSlice       = coderInt32Slice\n\tcoderEnumPackedSlice = coderInt32PackedSlice\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/convert.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 impl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// unwrapper unwraps the value to the underlying value.\n// This is implemented by List and Map.\ntype unwrapper interface {\n\tprotoUnwrap() any\n}\n\n// A Converter coverts to/from Go reflect.Value types and protobuf protoreflect.Value types.\ntype Converter interface {\n\t// PBValueOf converts a reflect.Value to a protoreflect.Value.\n\tPBValueOf(reflect.Value) protoreflect.Value\n\n\t// GoValueOf converts a protoreflect.Value to a reflect.Value.\n\tGoValueOf(protoreflect.Value) reflect.Value\n\n\t// IsValidPB returns whether a protoreflect.Value is compatible with this type.\n\tIsValidPB(protoreflect.Value) bool\n\n\t// IsValidGo returns whether a reflect.Value is compatible with this type.\n\tIsValidGo(reflect.Value) bool\n\n\t// New returns a new field value.\n\t// For scalars, it returns the default value of the field.\n\t// For composite types, it returns a new mutable value.\n\tNew() protoreflect.Value\n\n\t// Zero returns a new field value.\n\t// For scalars, it returns the default value of the field.\n\t// For composite types, it returns an immutable, empty value.\n\tZero() protoreflect.Value\n}\n\n// NewConverter matches a Go type with a protobuf field and returns a Converter\n// that converts between the two. Enums must be a named int32 kind that\n// implements protoreflect.Enum, and messages must be pointer to a named\n// struct type that implements protoreflect.ProtoMessage.\n//\n// This matcher deliberately supports a wider range of Go types than what\n// protoc-gen-go historically generated to be able to automatically wrap some\n// v1 messages generated by other forks of protoc-gen-go.\nfunc NewConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter {\n\tswitch {\n\tcase fd.IsList():\n\t\treturn newListConverter(t, fd)\n\tcase fd.IsMap():\n\t\treturn newMapConverter(t, fd)\n\tdefault:\n\t\treturn newSingularConverter(t, fd)\n\t}\n}\n\nvar (\n\tboolType    = reflect.TypeOf(bool(false))\n\tint32Type   = reflect.TypeOf(int32(0))\n\tint64Type   = reflect.TypeOf(int64(0))\n\tuint32Type  = reflect.TypeOf(uint32(0))\n\tuint64Type  = reflect.TypeOf(uint64(0))\n\tfloat32Type = reflect.TypeOf(float32(0))\n\tfloat64Type = reflect.TypeOf(float64(0))\n\tstringType  = reflect.TypeOf(string(\"\"))\n\tbytesType   = reflect.TypeOf([]byte(nil))\n\tbyteType    = reflect.TypeOf(byte(0))\n)\n\nvar (\n\tboolZero    = protoreflect.ValueOfBool(false)\n\tint32Zero   = protoreflect.ValueOfInt32(0)\n\tint64Zero   = protoreflect.ValueOfInt64(0)\n\tuint32Zero  = protoreflect.ValueOfUint32(0)\n\tuint64Zero  = protoreflect.ValueOfUint64(0)\n\tfloat32Zero = protoreflect.ValueOfFloat32(0)\n\tfloat64Zero = protoreflect.ValueOfFloat64(0)\n\tstringZero  = protoreflect.ValueOfString(\"\")\n\tbytesZero   = protoreflect.ValueOfBytes(nil)\n)\n\nfunc newSingularConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter {\n\tdefVal := func(fd protoreflect.FieldDescriptor, zero protoreflect.Value) protoreflect.Value {\n\t\tif fd.Cardinality() == protoreflect.Repeated {\n\t\t\t// Default isn't defined for repeated fields.\n\t\t\treturn zero\n\t\t}\n\t\treturn fd.Default()\n\t}\n\tswitch fd.Kind() {\n\tcase protoreflect.BoolKind:\n\t\tif t.Kind() == reflect.Bool {\n\t\t\treturn &boolConverter{t, defVal(fd, boolZero)}\n\t\t}\n\tcase protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:\n\t\tif t.Kind() == reflect.Int32 {\n\t\t\treturn &int32Converter{t, defVal(fd, int32Zero)}\n\t\t}\n\tcase protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:\n\t\tif t.Kind() == reflect.Int64 {\n\t\t\treturn &int64Converter{t, defVal(fd, int64Zero)}\n\t\t}\n\tcase protoreflect.Uint32Kind, protoreflect.Fixed32Kind:\n\t\tif t.Kind() == reflect.Uint32 {\n\t\t\treturn &uint32Converter{t, defVal(fd, uint32Zero)}\n\t\t}\n\tcase protoreflect.Uint64Kind, protoreflect.Fixed64Kind:\n\t\tif t.Kind() == reflect.Uint64 {\n\t\t\treturn &uint64Converter{t, defVal(fd, uint64Zero)}\n\t\t}\n\tcase protoreflect.FloatKind:\n\t\tif t.Kind() == reflect.Float32 {\n\t\t\treturn &float32Converter{t, defVal(fd, float32Zero)}\n\t\t}\n\tcase protoreflect.DoubleKind:\n\t\tif t.Kind() == reflect.Float64 {\n\t\t\treturn &float64Converter{t, defVal(fd, float64Zero)}\n\t\t}\n\tcase protoreflect.StringKind:\n\t\tif t.Kind() == reflect.String || (t.Kind() == reflect.Slice && t.Elem() == byteType) {\n\t\t\treturn &stringConverter{t, defVal(fd, stringZero)}\n\t\t}\n\tcase protoreflect.BytesKind:\n\t\tif t.Kind() == reflect.String || (t.Kind() == reflect.Slice && t.Elem() == byteType) {\n\t\t\treturn &bytesConverter{t, defVal(fd, bytesZero)}\n\t\t}\n\tcase protoreflect.EnumKind:\n\t\t// Handle enums, which must be a named int32 type.\n\t\tif t.Kind() == reflect.Int32 {\n\t\t\treturn newEnumConverter(t, fd)\n\t\t}\n\tcase protoreflect.MessageKind, protoreflect.GroupKind:\n\t\treturn newMessageConverter(t)\n\t}\n\tpanic(fmt.Sprintf(\"invalid Go type %v for field %v\", t, fd.FullName()))\n}\n\ntype boolConverter struct {\n\tgoType reflect.Type\n\tdef    protoreflect.Value\n}\n\nfunc (c *boolConverter) PBValueOf(v reflect.Value) protoreflect.Value {\n\tif v.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", v.Type(), c.goType))\n\t}\n\treturn protoreflect.ValueOfBool(v.Bool())\n}\nfunc (c *boolConverter) GoValueOf(v protoreflect.Value) reflect.Value {\n\treturn reflect.ValueOf(v.Bool()).Convert(c.goType)\n}\nfunc (c *boolConverter) IsValidPB(v protoreflect.Value) bool {\n\t_, ok := v.Interface().(bool)\n\treturn ok\n}\nfunc (c *boolConverter) IsValidGo(v reflect.Value) bool {\n\treturn v.IsValid() && v.Type() == c.goType\n}\nfunc (c *boolConverter) New() protoreflect.Value  { return c.def }\nfunc (c *boolConverter) Zero() protoreflect.Value { return c.def }\n\ntype int32Converter struct {\n\tgoType reflect.Type\n\tdef    protoreflect.Value\n}\n\nfunc (c *int32Converter) PBValueOf(v reflect.Value) protoreflect.Value {\n\tif v.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", v.Type(), c.goType))\n\t}\n\treturn protoreflect.ValueOfInt32(int32(v.Int()))\n}\nfunc (c *int32Converter) GoValueOf(v protoreflect.Value) reflect.Value {\n\treturn reflect.ValueOf(int32(v.Int())).Convert(c.goType)\n}\nfunc (c *int32Converter) IsValidPB(v protoreflect.Value) bool {\n\t_, ok := v.Interface().(int32)\n\treturn ok\n}\nfunc (c *int32Converter) IsValidGo(v reflect.Value) bool {\n\treturn v.IsValid() && v.Type() == c.goType\n}\nfunc (c *int32Converter) New() protoreflect.Value  { return c.def }\nfunc (c *int32Converter) Zero() protoreflect.Value { return c.def }\n\ntype int64Converter struct {\n\tgoType reflect.Type\n\tdef    protoreflect.Value\n}\n\nfunc (c *int64Converter) PBValueOf(v reflect.Value) protoreflect.Value {\n\tif v.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", v.Type(), c.goType))\n\t}\n\treturn protoreflect.ValueOfInt64(int64(v.Int()))\n}\nfunc (c *int64Converter) GoValueOf(v protoreflect.Value) reflect.Value {\n\treturn reflect.ValueOf(int64(v.Int())).Convert(c.goType)\n}\nfunc (c *int64Converter) IsValidPB(v protoreflect.Value) bool {\n\t_, ok := v.Interface().(int64)\n\treturn ok\n}\nfunc (c *int64Converter) IsValidGo(v reflect.Value) bool {\n\treturn v.IsValid() && v.Type() == c.goType\n}\nfunc (c *int64Converter) New() protoreflect.Value  { return c.def }\nfunc (c *int64Converter) Zero() protoreflect.Value { return c.def }\n\ntype uint32Converter struct {\n\tgoType reflect.Type\n\tdef    protoreflect.Value\n}\n\nfunc (c *uint32Converter) PBValueOf(v reflect.Value) protoreflect.Value {\n\tif v.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", v.Type(), c.goType))\n\t}\n\treturn protoreflect.ValueOfUint32(uint32(v.Uint()))\n}\nfunc (c *uint32Converter) GoValueOf(v protoreflect.Value) reflect.Value {\n\treturn reflect.ValueOf(uint32(v.Uint())).Convert(c.goType)\n}\nfunc (c *uint32Converter) IsValidPB(v protoreflect.Value) bool {\n\t_, ok := v.Interface().(uint32)\n\treturn ok\n}\nfunc (c *uint32Converter) IsValidGo(v reflect.Value) bool {\n\treturn v.IsValid() && v.Type() == c.goType\n}\nfunc (c *uint32Converter) New() protoreflect.Value  { return c.def }\nfunc (c *uint32Converter) Zero() protoreflect.Value { return c.def }\n\ntype uint64Converter struct {\n\tgoType reflect.Type\n\tdef    protoreflect.Value\n}\n\nfunc (c *uint64Converter) PBValueOf(v reflect.Value) protoreflect.Value {\n\tif v.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", v.Type(), c.goType))\n\t}\n\treturn protoreflect.ValueOfUint64(uint64(v.Uint()))\n}\nfunc (c *uint64Converter) GoValueOf(v protoreflect.Value) reflect.Value {\n\treturn reflect.ValueOf(uint64(v.Uint())).Convert(c.goType)\n}\nfunc (c *uint64Converter) IsValidPB(v protoreflect.Value) bool {\n\t_, ok := v.Interface().(uint64)\n\treturn ok\n}\nfunc (c *uint64Converter) IsValidGo(v reflect.Value) bool {\n\treturn v.IsValid() && v.Type() == c.goType\n}\nfunc (c *uint64Converter) New() protoreflect.Value  { return c.def }\nfunc (c *uint64Converter) Zero() protoreflect.Value { return c.def }\n\ntype float32Converter struct {\n\tgoType reflect.Type\n\tdef    protoreflect.Value\n}\n\nfunc (c *float32Converter) PBValueOf(v reflect.Value) protoreflect.Value {\n\tif v.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", v.Type(), c.goType))\n\t}\n\treturn protoreflect.ValueOfFloat32(float32(v.Float()))\n}\nfunc (c *float32Converter) GoValueOf(v protoreflect.Value) reflect.Value {\n\treturn reflect.ValueOf(float32(v.Float())).Convert(c.goType)\n}\nfunc (c *float32Converter) IsValidPB(v protoreflect.Value) bool {\n\t_, ok := v.Interface().(float32)\n\treturn ok\n}\nfunc (c *float32Converter) IsValidGo(v reflect.Value) bool {\n\treturn v.IsValid() && v.Type() == c.goType\n}\nfunc (c *float32Converter) New() protoreflect.Value  { return c.def }\nfunc (c *float32Converter) Zero() protoreflect.Value { return c.def }\n\ntype float64Converter struct {\n\tgoType reflect.Type\n\tdef    protoreflect.Value\n}\n\nfunc (c *float64Converter) PBValueOf(v reflect.Value) protoreflect.Value {\n\tif v.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", v.Type(), c.goType))\n\t}\n\treturn protoreflect.ValueOfFloat64(float64(v.Float()))\n}\nfunc (c *float64Converter) GoValueOf(v protoreflect.Value) reflect.Value {\n\treturn reflect.ValueOf(float64(v.Float())).Convert(c.goType)\n}\nfunc (c *float64Converter) IsValidPB(v protoreflect.Value) bool {\n\t_, ok := v.Interface().(float64)\n\treturn ok\n}\nfunc (c *float64Converter) IsValidGo(v reflect.Value) bool {\n\treturn v.IsValid() && v.Type() == c.goType\n}\nfunc (c *float64Converter) New() protoreflect.Value  { return c.def }\nfunc (c *float64Converter) Zero() protoreflect.Value { return c.def }\n\ntype stringConverter struct {\n\tgoType reflect.Type\n\tdef    protoreflect.Value\n}\n\nfunc (c *stringConverter) PBValueOf(v reflect.Value) protoreflect.Value {\n\tif v.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", v.Type(), c.goType))\n\t}\n\treturn protoreflect.ValueOfString(v.Convert(stringType).String())\n}\nfunc (c *stringConverter) GoValueOf(v protoreflect.Value) reflect.Value {\n\t// protoreflect.Value.String never panics, so we go through an interface\n\t// conversion here to check the type.\n\ts := v.Interface().(string)\n\tif c.goType.Kind() == reflect.Slice && s == \"\" {\n\t\treturn reflect.Zero(c.goType) // ensure empty string is []byte(nil)\n\t}\n\treturn reflect.ValueOf(s).Convert(c.goType)\n}\nfunc (c *stringConverter) IsValidPB(v protoreflect.Value) bool {\n\t_, ok := v.Interface().(string)\n\treturn ok\n}\nfunc (c *stringConverter) IsValidGo(v reflect.Value) bool {\n\treturn v.IsValid() && v.Type() == c.goType\n}\nfunc (c *stringConverter) New() protoreflect.Value  { return c.def }\nfunc (c *stringConverter) Zero() protoreflect.Value { return c.def }\n\ntype bytesConverter struct {\n\tgoType reflect.Type\n\tdef    protoreflect.Value\n}\n\nfunc (c *bytesConverter) PBValueOf(v reflect.Value) protoreflect.Value {\n\tif v.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", v.Type(), c.goType))\n\t}\n\tif c.goType.Kind() == reflect.String && v.Len() == 0 {\n\t\treturn protoreflect.ValueOfBytes(nil) // ensure empty string is []byte(nil)\n\t}\n\treturn protoreflect.ValueOfBytes(v.Convert(bytesType).Bytes())\n}\nfunc (c *bytesConverter) GoValueOf(v protoreflect.Value) reflect.Value {\n\treturn reflect.ValueOf(v.Bytes()).Convert(c.goType)\n}\nfunc (c *bytesConverter) IsValidPB(v protoreflect.Value) bool {\n\t_, ok := v.Interface().([]byte)\n\treturn ok\n}\nfunc (c *bytesConverter) IsValidGo(v reflect.Value) bool {\n\treturn v.IsValid() && v.Type() == c.goType\n}\nfunc (c *bytesConverter) New() protoreflect.Value  { return c.def }\nfunc (c *bytesConverter) Zero() protoreflect.Value { return c.def }\n\ntype enumConverter struct {\n\tgoType reflect.Type\n\tdef    protoreflect.Value\n}\n\nfunc newEnumConverter(goType reflect.Type, fd protoreflect.FieldDescriptor) Converter {\n\tvar def protoreflect.Value\n\tif fd.Cardinality() == protoreflect.Repeated {\n\t\tdef = protoreflect.ValueOfEnum(fd.Enum().Values().Get(0).Number())\n\t} else {\n\t\tdef = fd.Default()\n\t}\n\treturn &enumConverter{goType, def}\n}\n\nfunc (c *enumConverter) PBValueOf(v reflect.Value) protoreflect.Value {\n\tif v.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", v.Type(), c.goType))\n\t}\n\treturn protoreflect.ValueOfEnum(protoreflect.EnumNumber(v.Int()))\n}\n\nfunc (c *enumConverter) GoValueOf(v protoreflect.Value) reflect.Value {\n\treturn reflect.ValueOf(v.Enum()).Convert(c.goType)\n}\n\nfunc (c *enumConverter) IsValidPB(v protoreflect.Value) bool {\n\t_, ok := v.Interface().(protoreflect.EnumNumber)\n\treturn ok\n}\n\nfunc (c *enumConverter) IsValidGo(v reflect.Value) bool {\n\treturn v.IsValid() && v.Type() == c.goType\n}\n\nfunc (c *enumConverter) New() protoreflect.Value {\n\treturn c.def\n}\n\nfunc (c *enumConverter) Zero() protoreflect.Value {\n\treturn c.def\n}\n\ntype messageConverter struct {\n\tgoType reflect.Type\n}\n\nfunc newMessageConverter(goType reflect.Type) Converter {\n\treturn &messageConverter{goType}\n}\n\nfunc (c *messageConverter) PBValueOf(v reflect.Value) protoreflect.Value {\n\tif v.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", v.Type(), c.goType))\n\t}\n\tif c.isNonPointer() {\n\t\tif v.CanAddr() {\n\t\t\tv = v.Addr() // T => *T\n\t\t} else {\n\t\t\tv = reflect.Zero(reflect.PtrTo(v.Type()))\n\t\t}\n\t}\n\tif m, ok := v.Interface().(protoreflect.ProtoMessage); ok {\n\t\treturn protoreflect.ValueOfMessage(m.ProtoReflect())\n\t}\n\treturn protoreflect.ValueOfMessage(legacyWrapMessage(v))\n}\n\nfunc (c *messageConverter) GoValueOf(v protoreflect.Value) reflect.Value {\n\tm := v.Message()\n\tvar rv reflect.Value\n\tif u, ok := m.(unwrapper); ok {\n\t\trv = reflect.ValueOf(u.protoUnwrap())\n\t} else {\n\t\trv = reflect.ValueOf(m.Interface())\n\t}\n\tif c.isNonPointer() {\n\t\tif rv.Type() != reflect.PtrTo(c.goType) {\n\t\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", rv.Type(), reflect.PtrTo(c.goType)))\n\t\t}\n\t\tif !rv.IsNil() {\n\t\t\trv = rv.Elem() // *T => T\n\t\t} else {\n\t\t\trv = reflect.Zero(rv.Type().Elem())\n\t\t}\n\t}\n\tif rv.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", rv.Type(), c.goType))\n\t}\n\treturn rv\n}\n\nfunc (c *messageConverter) IsValidPB(v protoreflect.Value) bool {\n\tm := v.Message()\n\tvar rv reflect.Value\n\tif u, ok := m.(unwrapper); ok {\n\t\trv = reflect.ValueOf(u.protoUnwrap())\n\t} else {\n\t\trv = reflect.ValueOf(m.Interface())\n\t}\n\tif c.isNonPointer() {\n\t\treturn rv.Type() == reflect.PtrTo(c.goType)\n\t}\n\treturn rv.Type() == c.goType\n}\n\nfunc (c *messageConverter) IsValidGo(v reflect.Value) bool {\n\treturn v.IsValid() && v.Type() == c.goType\n}\n\nfunc (c *messageConverter) New() protoreflect.Value {\n\tif c.isNonPointer() {\n\t\treturn c.PBValueOf(reflect.New(c.goType).Elem())\n\t}\n\treturn c.PBValueOf(reflect.New(c.goType.Elem()))\n}\n\nfunc (c *messageConverter) Zero() protoreflect.Value {\n\treturn c.PBValueOf(reflect.Zero(c.goType))\n}\n\n// isNonPointer reports whether the type is a non-pointer type.\n// This never occurs for generated message types.\nfunc (c *messageConverter) isNonPointer() bool {\n\treturn c.goType.Kind() != reflect.Ptr\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/convert_list.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 impl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nfunc newListConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter {\n\tswitch {\n\tcase t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Slice:\n\t\treturn &listPtrConverter{t, newSingularConverter(t.Elem().Elem(), fd)}\n\tcase t.Kind() == reflect.Slice:\n\t\treturn &listConverter{t, newSingularConverter(t.Elem(), fd)}\n\t}\n\tpanic(fmt.Sprintf(\"invalid Go type %v for field %v\", t, fd.FullName()))\n}\n\ntype listConverter struct {\n\tgoType reflect.Type // []T\n\tc      Converter\n}\n\nfunc (c *listConverter) PBValueOf(v reflect.Value) protoreflect.Value {\n\tif v.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", v.Type(), c.goType))\n\t}\n\tpv := reflect.New(c.goType)\n\tpv.Elem().Set(v)\n\treturn protoreflect.ValueOfList(&listReflect{pv, c.c})\n}\n\nfunc (c *listConverter) GoValueOf(v protoreflect.Value) reflect.Value {\n\trv := v.List().(*listReflect).v\n\tif rv.IsNil() {\n\t\treturn reflect.Zero(c.goType)\n\t}\n\treturn rv.Elem()\n}\n\nfunc (c *listConverter) IsValidPB(v protoreflect.Value) bool {\n\tlist, ok := v.Interface().(*listReflect)\n\tif !ok {\n\t\treturn false\n\t}\n\treturn list.v.Type().Elem() == c.goType\n}\n\nfunc (c *listConverter) IsValidGo(v reflect.Value) bool {\n\treturn v.IsValid() && v.Type() == c.goType\n}\n\nfunc (c *listConverter) New() protoreflect.Value {\n\treturn protoreflect.ValueOfList(&listReflect{reflect.New(c.goType), c.c})\n}\n\nfunc (c *listConverter) Zero() protoreflect.Value {\n\treturn protoreflect.ValueOfList(&listReflect{reflect.Zero(reflect.PtrTo(c.goType)), c.c})\n}\n\ntype listPtrConverter struct {\n\tgoType reflect.Type // *[]T\n\tc      Converter\n}\n\nfunc (c *listPtrConverter) PBValueOf(v reflect.Value) protoreflect.Value {\n\tif v.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", v.Type(), c.goType))\n\t}\n\treturn protoreflect.ValueOfList(&listReflect{v, c.c})\n}\n\nfunc (c *listPtrConverter) GoValueOf(v protoreflect.Value) reflect.Value {\n\treturn v.List().(*listReflect).v\n}\n\nfunc (c *listPtrConverter) IsValidPB(v protoreflect.Value) bool {\n\tlist, ok := v.Interface().(*listReflect)\n\tif !ok {\n\t\treturn false\n\t}\n\treturn list.v.Type() == c.goType\n}\n\nfunc (c *listPtrConverter) IsValidGo(v reflect.Value) bool {\n\treturn v.IsValid() && v.Type() == c.goType\n}\n\nfunc (c *listPtrConverter) New() protoreflect.Value {\n\treturn c.PBValueOf(reflect.New(c.goType.Elem()))\n}\n\nfunc (c *listPtrConverter) Zero() protoreflect.Value {\n\treturn c.PBValueOf(reflect.Zero(c.goType))\n}\n\ntype listReflect struct {\n\tv    reflect.Value // *[]T\n\tconv Converter\n}\n\nfunc (ls *listReflect) Len() int {\n\tif ls.v.IsNil() {\n\t\treturn 0\n\t}\n\treturn ls.v.Elem().Len()\n}\nfunc (ls *listReflect) Get(i int) protoreflect.Value {\n\treturn ls.conv.PBValueOf(ls.v.Elem().Index(i))\n}\nfunc (ls *listReflect) Set(i int, v protoreflect.Value) {\n\tls.v.Elem().Index(i).Set(ls.conv.GoValueOf(v))\n}\nfunc (ls *listReflect) Append(v protoreflect.Value) {\n\tls.v.Elem().Set(reflect.Append(ls.v.Elem(), ls.conv.GoValueOf(v)))\n}\nfunc (ls *listReflect) AppendMutable() protoreflect.Value {\n\tif _, ok := ls.conv.(*messageConverter); !ok {\n\t\tpanic(\"invalid AppendMutable on list with non-message type\")\n\t}\n\tv := ls.NewElement()\n\tls.Append(v)\n\treturn v\n}\nfunc (ls *listReflect) Truncate(i int) {\n\tls.v.Elem().Set(ls.v.Elem().Slice(0, i))\n}\nfunc (ls *listReflect) NewElement() protoreflect.Value {\n\treturn ls.conv.New()\n}\nfunc (ls *listReflect) IsValid() bool {\n\treturn !ls.v.IsNil()\n}\nfunc (ls *listReflect) protoUnwrap() any {\n\treturn ls.v.Interface()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/convert_map.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 impl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\ntype mapConverter struct {\n\tgoType           reflect.Type // map[K]V\n\tkeyConv, valConv Converter\n}\n\nfunc newMapConverter(t reflect.Type, fd protoreflect.FieldDescriptor) *mapConverter {\n\tif t.Kind() != reflect.Map {\n\t\tpanic(fmt.Sprintf(\"invalid Go type %v for field %v\", t, fd.FullName()))\n\t}\n\treturn &mapConverter{\n\t\tgoType:  t,\n\t\tkeyConv: newSingularConverter(t.Key(), fd.MapKey()),\n\t\tvalConv: newSingularConverter(t.Elem(), fd.MapValue()),\n\t}\n}\n\nfunc (c *mapConverter) PBValueOf(v reflect.Value) protoreflect.Value {\n\tif v.Type() != c.goType {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want %v\", v.Type(), c.goType))\n\t}\n\treturn protoreflect.ValueOfMap(&mapReflect{v, c.keyConv, c.valConv})\n}\n\nfunc (c *mapConverter) GoValueOf(v protoreflect.Value) reflect.Value {\n\treturn v.Map().(*mapReflect).v\n}\n\nfunc (c *mapConverter) IsValidPB(v protoreflect.Value) bool {\n\tmapv, ok := v.Interface().(*mapReflect)\n\tif !ok {\n\t\treturn false\n\t}\n\treturn mapv.v.Type() == c.goType\n}\n\nfunc (c *mapConverter) IsValidGo(v reflect.Value) bool {\n\treturn v.IsValid() && v.Type() == c.goType\n}\n\nfunc (c *mapConverter) New() protoreflect.Value {\n\treturn c.PBValueOf(reflect.MakeMap(c.goType))\n}\n\nfunc (c *mapConverter) Zero() protoreflect.Value {\n\treturn c.PBValueOf(reflect.Zero(c.goType))\n}\n\ntype mapReflect struct {\n\tv       reflect.Value // map[K]V\n\tkeyConv Converter\n\tvalConv Converter\n}\n\nfunc (ms *mapReflect) Len() int {\n\treturn ms.v.Len()\n}\nfunc (ms *mapReflect) Has(k protoreflect.MapKey) bool {\n\trk := ms.keyConv.GoValueOf(k.Value())\n\trv := ms.v.MapIndex(rk)\n\treturn rv.IsValid()\n}\nfunc (ms *mapReflect) Get(k protoreflect.MapKey) protoreflect.Value {\n\trk := ms.keyConv.GoValueOf(k.Value())\n\trv := ms.v.MapIndex(rk)\n\tif !rv.IsValid() {\n\t\treturn protoreflect.Value{}\n\t}\n\treturn ms.valConv.PBValueOf(rv)\n}\nfunc (ms *mapReflect) Set(k protoreflect.MapKey, v protoreflect.Value) {\n\trk := ms.keyConv.GoValueOf(k.Value())\n\trv := ms.valConv.GoValueOf(v)\n\tms.v.SetMapIndex(rk, rv)\n}\nfunc (ms *mapReflect) Clear(k protoreflect.MapKey) {\n\trk := ms.keyConv.GoValueOf(k.Value())\n\tms.v.SetMapIndex(rk, reflect.Value{})\n}\nfunc (ms *mapReflect) Mutable(k protoreflect.MapKey) protoreflect.Value {\n\tif _, ok := ms.valConv.(*messageConverter); !ok {\n\t\tpanic(\"invalid Mutable on map with non-message value type\")\n\t}\n\tv := ms.Get(k)\n\tif !v.IsValid() {\n\t\tv = ms.NewValue()\n\t\tms.Set(k, v)\n\t}\n\treturn v\n}\nfunc (ms *mapReflect) Range(f func(protoreflect.MapKey, protoreflect.Value) bool) {\n\titer := ms.v.MapRange()\n\tfor iter.Next() {\n\t\tk := ms.keyConv.PBValueOf(iter.Key()).MapKey()\n\t\tv := ms.valConv.PBValueOf(iter.Value())\n\t\tif !f(k, v) {\n\t\t\treturn\n\t\t}\n\t}\n}\nfunc (ms *mapReflect) NewValue() protoreflect.Value {\n\treturn ms.valConv.New()\n}\nfunc (ms *mapReflect) IsValid() bool {\n\treturn !ms.v.IsNil()\n}\nfunc (ms *mapReflect) protoUnwrap() any {\n\treturn ms.v.Interface()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/decode.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 impl\n\nimport (\n\t\"math/bits\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/internal/flags\"\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/reflect/protoregistry\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\nvar errDecode = errors.New(\"cannot parse invalid wire-format data\")\nvar errRecursionDepth = errors.New(\"exceeded maximum recursion depth\")\n\ntype unmarshalOptions struct {\n\tflags    protoiface.UnmarshalInputFlags\n\tresolver interface {\n\t\tFindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error)\n\t\tFindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error)\n\t}\n\tdepth int\n}\n\nfunc (o unmarshalOptions) Options() proto.UnmarshalOptions {\n\treturn proto.UnmarshalOptions{\n\t\tMerge:          true,\n\t\tAllowPartial:   true,\n\t\tDiscardUnknown: o.DiscardUnknown(),\n\t\tResolver:       o.resolver,\n\n\t\tNoLazyDecoding: o.NoLazyDecoding(),\n\t}\n}\n\nfunc (o unmarshalOptions) DiscardUnknown() bool {\n\treturn o.flags&protoiface.UnmarshalDiscardUnknown != 0\n}\n\nfunc (o unmarshalOptions) AliasBuffer() bool { return o.flags&protoiface.UnmarshalAliasBuffer != 0 }\nfunc (o unmarshalOptions) Validated() bool   { return o.flags&protoiface.UnmarshalValidated != 0 }\nfunc (o unmarshalOptions) NoLazyDecoding() bool {\n\treturn o.flags&protoiface.UnmarshalNoLazyDecoding != 0\n}\n\nfunc (o unmarshalOptions) CanBeLazy() bool {\n\tif o.resolver != protoregistry.GlobalTypes {\n\t\treturn false\n\t}\n\t// We ignore the UnmarshalInvalidateSizeCache even though it's not in the default set\n\treturn (o.flags & ^(protoiface.UnmarshalAliasBuffer | protoiface.UnmarshalValidated | protoiface.UnmarshalCheckRequired)) == 0\n}\n\nvar lazyUnmarshalOptions = unmarshalOptions{\n\tresolver: protoregistry.GlobalTypes,\n\n\tflags: protoiface.UnmarshalAliasBuffer | protoiface.UnmarshalValidated,\n\n\tdepth: protowire.DefaultRecursionLimit,\n}\n\ntype unmarshalOutput struct {\n\tn           int // number of bytes consumed\n\tinitialized bool\n}\n\n// unmarshal is protoreflect.Methods.Unmarshal.\nfunc (mi *MessageInfo) unmarshal(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {\n\tvar p pointer\n\tif ms, ok := in.Message.(*messageState); ok {\n\t\tp = ms.pointer()\n\t} else {\n\t\tp = in.Message.(*messageReflectWrapper).pointer()\n\t}\n\tout, err := mi.unmarshalPointer(in.Buf, p, 0, unmarshalOptions{\n\t\tflags:    in.Flags,\n\t\tresolver: in.Resolver,\n\t\tdepth:    in.Depth,\n\t})\n\tvar flags protoiface.UnmarshalOutputFlags\n\tif out.initialized {\n\t\tflags |= protoiface.UnmarshalInitialized\n\t}\n\treturn protoiface.UnmarshalOutput{\n\t\tFlags: flags,\n\t}, err\n}\n\n// errUnknown is returned during unmarshaling to indicate a parse error that\n// should result in a field being placed in the unknown fields section (for example,\n// when the wire type doesn't match) as opposed to the entire unmarshal operation\n// failing (for example, when a field extends past the available input).\n//\n// This is a sentinel error which should never be visible to the user.\nvar errUnknown = errors.New(\"unknown\")\n\nfunc (mi *MessageInfo) unmarshalPointer(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tmi.init()\n\tif opts.depth--; opts.depth < 0 {\n\t\treturn out, errRecursionDepth\n\t}\n\tif flags.ProtoLegacy && mi.isMessageSet {\n\t\treturn unmarshalMessageSet(mi, b, p, opts)\n\t}\n\n\tlazyDecoding := LazyEnabled() // default\n\tif opts.NoLazyDecoding() {\n\t\tlazyDecoding = false // explicitly disabled\n\t}\n\tif mi.lazyOffset.IsValid() && lazyDecoding {\n\t\treturn mi.unmarshalPointerLazy(b, p, groupTag, opts)\n\t}\n\treturn mi.unmarshalPointerEager(b, p, groupTag, opts)\n}\n\n// unmarshalPointerEager is the message unmarshalling function for all messages that are not lazy.\n// The corresponding function for Lazy is in google_lazy.go.\nfunc (mi *MessageInfo) unmarshalPointerEager(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\n\tinitialized := true\n\tvar requiredMask uint64\n\tvar exts *map[int32]ExtensionField\n\n\tvar presence presence\n\tif mi.presenceOffset.IsValid() {\n\t\tpresence = p.Apply(mi.presenceOffset).PresenceInfo()\n\t}\n\n\tstart := len(b)\n\tfor len(b) > 0 {\n\t\t// Parse the tag (field number and wire type).\n\t\tvar tag uint64\n\t\tif b[0] < 0x80 {\n\t\t\ttag = uint64(b[0])\n\t\t\tb = b[1:]\n\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\ttag = 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\ttag, n = protowire.ConsumeVarint(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t}\n\t\tvar num protowire.Number\n\t\tif n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) {\n\t\t\treturn out, errDecode\n\t\t} else {\n\t\t\tnum = protowire.Number(n)\n\t\t}\n\t\twtyp := protowire.Type(tag & 7)\n\n\t\tif wtyp == protowire.EndGroupType {\n\t\t\tif num != groupTag {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\tgroupTag = 0\n\t\t\tbreak\n\t\t}\n\n\t\tvar f *coderFieldInfo\n\t\tif int(num) < len(mi.denseCoderFields) {\n\t\t\tf = mi.denseCoderFields[num]\n\t\t} else {\n\t\t\tf = mi.coderFields[num]\n\t\t}\n\t\tvar n int\n\t\terr := errUnknown\n\t\tswitch {\n\t\tcase f != nil:\n\t\t\tif f.funcs.unmarshal == nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tvar o unmarshalOutput\n\t\t\to, err = f.funcs.unmarshal(b, p.Apply(f.offset), wtyp, f, opts)\n\t\t\tn = o.n\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\trequiredMask |= f.validation.requiredBit\n\t\t\tif f.funcs.isInit != nil && !o.initialized {\n\t\t\t\tinitialized = false\n\t\t\t}\n\n\t\t\tif f.presenceIndex != noPresence {\n\t\t\t\tpresence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize)\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// Possible extension.\n\t\t\tif exts == nil && mi.extensionOffset.IsValid() {\n\t\t\t\texts = p.Apply(mi.extensionOffset).Extensions()\n\t\t\t\tif *exts == nil {\n\t\t\t\t\t*exts = make(map[int32]ExtensionField)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif exts == nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tvar o unmarshalOutput\n\t\t\to, err = mi.unmarshalExtension(b, num, wtyp, *exts, opts)\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tn = o.n\n\t\t\tif !o.initialized {\n\t\t\t\tinitialized = false\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err != errUnknown {\n\t\t\t\treturn out, err\n\t\t\t}\n\t\t\tn = protowire.ConsumeFieldValue(num, wtyp, b)\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\tif !opts.DiscardUnknown() && mi.unknownOffset.IsValid() {\n\t\t\t\tu := mi.mutableUnknownBytes(p)\n\t\t\t\t*u = protowire.AppendTag(*u, num, wtyp)\n\t\t\t\t*u = append(*u, b[:n]...)\n\t\t\t}\n\t\t}\n\t\tb = b[n:]\n\t}\n\tif groupTag != 0 {\n\t\treturn out, errDecode\n\t}\n\tif mi.numRequiredFields > 0 && bits.OnesCount64(requiredMask) != int(mi.numRequiredFields) {\n\t\tinitialized = false\n\t}\n\tif initialized {\n\t\tout.initialized = true\n\t}\n\tout.n = start - len(b)\n\treturn out, nil\n}\n\nfunc (mi *MessageInfo) unmarshalExtension(b []byte, num protowire.Number, wtyp protowire.Type, exts map[int32]ExtensionField, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tx := exts[int32(num)]\n\txt := x.Type()\n\tif xt == nil {\n\t\tvar err error\n\t\txt, err = opts.resolver.FindExtensionByNumber(mi.Desc.FullName(), num)\n\t\tif err != nil {\n\t\t\tif err == protoregistry.NotFound {\n\t\t\t\treturn out, errUnknown\n\t\t\t}\n\t\t\treturn out, errors.New(\"%v: unable to resolve extension %v: %v\", mi.Desc.FullName(), num, err)\n\t\t}\n\t}\n\txi := getExtensionFieldInfo(xt)\n\tif xi.funcs.unmarshal == nil {\n\t\treturn out, errUnknown\n\t}\n\tif flags.LazyUnmarshalExtensions {\n\t\tif opts.CanBeLazy() && x.canLazy(xt) {\n\t\t\tout, valid := skipExtension(b, xi, num, wtyp, opts)\n\t\t\tswitch valid {\n\t\t\tcase ValidationValid:\n\t\t\t\tif out.initialized {\n\t\t\t\t\tx.appendLazyBytes(xt, xi, num, wtyp, b[:out.n])\n\t\t\t\t\texts[int32(num)] = x\n\t\t\t\t\treturn out, nil\n\t\t\t\t}\n\t\t\tcase ValidationInvalid:\n\t\t\t\treturn out, errDecode\n\t\t\tcase ValidationUnknown:\n\t\t\t}\n\t\t}\n\t}\n\tival := x.Value()\n\tif !ival.IsValid() && xi.unmarshalNeedsValue {\n\t\t// Create a new message, list, or map value to fill in.\n\t\t// For enums, create a prototype value to let the unmarshal func know the\n\t\t// concrete type.\n\t\tival = xt.New()\n\t}\n\tv, out, err := xi.funcs.unmarshal(b, ival, num, wtyp, opts)\n\tif err != nil {\n\t\treturn out, err\n\t}\n\tif xi.funcs.isInit == nil {\n\t\tout.initialized = true\n\t}\n\tx.Set(xt, v)\n\texts[int32(num)] = x\n\treturn out, nil\n}\n\nfunc skipExtension(b []byte, xi *extensionFieldInfo, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, _ ValidationStatus) {\n\tif xi.validation.mi == nil {\n\t\treturn out, ValidationUnknown\n\t}\n\txi.validation.mi.init()\n\tswitch xi.validation.typ {\n\tcase validationTypeMessage:\n\t\tif wtyp != protowire.BytesType {\n\t\t\treturn out, ValidationUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, ValidationUnknown\n\t\t}\n\n\t\tif opts.Validated() {\n\t\t\tout.initialized = true\n\t\t\tout.n = n\n\t\t\treturn out, ValidationValid\n\t\t}\n\n\t\tout, st := xi.validation.mi.validate(v, 0, opts)\n\t\tout.n = n\n\t\treturn out, st\n\tcase validationTypeGroup:\n\t\tif wtyp != protowire.StartGroupType {\n\t\t\treturn out, ValidationUnknown\n\t\t}\n\t\tout, st := xi.validation.mi.validate(b, num, opts)\n\t\treturn out, st\n\tdefault:\n\t\treturn out, ValidationUnknown\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/encode.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 impl\n\nimport (\n\t\"math\"\n\t\"sort\"\n\t\"sync/atomic\"\n\n\t\"google.golang.org/protobuf/internal/flags\"\n\t\"google.golang.org/protobuf/internal/protolazy\"\n\t\"google.golang.org/protobuf/proto\"\n\tpiface \"google.golang.org/protobuf/runtime/protoiface\"\n)\n\ntype marshalOptions struct {\n\tflags piface.MarshalInputFlags\n}\n\nfunc (o marshalOptions) Options() proto.MarshalOptions {\n\treturn proto.MarshalOptions{\n\t\tAllowPartial:  true,\n\t\tDeterministic: o.Deterministic(),\n\t\tUseCachedSize: o.UseCachedSize(),\n\t}\n}\n\nfunc (o marshalOptions) Deterministic() bool { return o.flags&piface.MarshalDeterministic != 0 }\nfunc (o marshalOptions) UseCachedSize() bool { return o.flags&piface.MarshalUseCachedSize != 0 }\n\n// size is protoreflect.Methods.Size.\nfunc (mi *MessageInfo) size(in piface.SizeInput) piface.SizeOutput {\n\tvar p pointer\n\tif ms, ok := in.Message.(*messageState); ok {\n\t\tp = ms.pointer()\n\t} else {\n\t\tp = in.Message.(*messageReflectWrapper).pointer()\n\t}\n\tsize := mi.sizePointer(p, marshalOptions{\n\t\tflags: in.Flags,\n\t})\n\treturn piface.SizeOutput{Size: size}\n}\n\nfunc (mi *MessageInfo) sizePointer(p pointer, opts marshalOptions) (size int) {\n\tmi.init()\n\tif p.IsNil() {\n\t\treturn 0\n\t}\n\tif opts.UseCachedSize() && mi.sizecacheOffset.IsValid() {\n\t\t// The size cache contains the size + 1, to allow the\n\t\t// zero value to be invalid, while also allowing for a\n\t\t// 0 size to be cached.\n\t\tif size := atomic.LoadInt32(p.Apply(mi.sizecacheOffset).Int32()); size > 0 {\n\t\t\treturn int(size - 1)\n\t\t}\n\t}\n\treturn mi.sizePointerSlow(p, opts)\n}\n\nfunc (mi *MessageInfo) sizePointerSlow(p pointer, opts marshalOptions) (size int) {\n\tif flags.ProtoLegacy && mi.isMessageSet {\n\t\tsize = sizeMessageSet(mi, p, opts)\n\t\tif mi.sizecacheOffset.IsValid() {\n\t\t\tatomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), int32(size+1))\n\t\t}\n\t\treturn size\n\t}\n\tif mi.extensionOffset.IsValid() {\n\t\te := p.Apply(mi.extensionOffset).Extensions()\n\t\tsize += mi.sizeExtensions(e, opts)\n\t}\n\n\tvar lazy **protolazy.XXX_lazyUnmarshalInfo\n\tvar presence presence\n\tif mi.presenceOffset.IsValid() {\n\t\tpresence = p.Apply(mi.presenceOffset).PresenceInfo()\n\t\tif mi.lazyOffset.IsValid() {\n\t\t\tlazy = p.Apply(mi.lazyOffset).LazyInfoPtr()\n\t\t}\n\t}\n\n\tfor _, f := range mi.orderedCoderFields {\n\t\tif f.funcs.size == nil {\n\t\t\tcontinue\n\t\t}\n\t\tfptr := p.Apply(f.offset)\n\n\t\tif f.presenceIndex != noPresence {\n\t\t\tif !presence.Present(f.presenceIndex) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif f.isLazy && fptr.AtomicGetPointer().IsNil() {\n\t\t\t\tif lazyFields(opts) {\n\t\t\t\t\tsize += (*lazy).SizeField(uint32(f.num))\n\t\t\t\t\tcontinue\n\t\t\t\t} else {\n\t\t\t\t\tmi.lazyUnmarshal(p, f.num)\n\t\t\t\t}\n\t\t\t}\n\t\t\tsize += f.funcs.size(fptr, f, opts)\n\t\t\tcontinue\n\t\t}\n\n\t\tif f.isPointer && fptr.Elem().IsNil() {\n\t\t\tcontinue\n\t\t}\n\t\tsize += f.funcs.size(fptr, f, opts)\n\t}\n\tif mi.unknownOffset.IsValid() {\n\t\tif u := mi.getUnknownBytes(p); u != nil {\n\t\t\tsize += len(*u)\n\t\t}\n\t}\n\tif mi.sizecacheOffset.IsValid() {\n\t\tif size > (math.MaxInt32 - 1) {\n\t\t\t// The size is too large for the int32 sizecache field.\n\t\t\t// We will need to recompute the size when encoding;\n\t\t\t// unfortunately expensive, but better than invalid output.\n\t\t\tatomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), 0)\n\t\t} else {\n\t\t\t// The size cache contains the size + 1, to allow the\n\t\t\t// zero value to be invalid, while also allowing for a\n\t\t\t// 0 size to be cached.\n\t\t\tatomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), int32(size+1))\n\t\t}\n\t}\n\treturn size\n}\n\n// marshal is protoreflect.Methods.Marshal.\nfunc (mi *MessageInfo) marshal(in piface.MarshalInput) (out piface.MarshalOutput, err error) {\n\tvar p pointer\n\tif ms, ok := in.Message.(*messageState); ok {\n\t\tp = ms.pointer()\n\t} else {\n\t\tp = in.Message.(*messageReflectWrapper).pointer()\n\t}\n\tb, err := mi.marshalAppendPointer(in.Buf, p, marshalOptions{\n\t\tflags: in.Flags,\n\t})\n\treturn piface.MarshalOutput{Buf: b}, err\n}\n\nfunc (mi *MessageInfo) marshalAppendPointer(b []byte, p pointer, opts marshalOptions) ([]byte, error) {\n\tmi.init()\n\tif p.IsNil() {\n\t\treturn b, nil\n\t}\n\tif flags.ProtoLegacy && mi.isMessageSet {\n\t\treturn marshalMessageSet(mi, b, p, opts)\n\t}\n\tvar err error\n\t// The old marshaler encodes extensions at beginning.\n\tif mi.extensionOffset.IsValid() {\n\t\te := p.Apply(mi.extensionOffset).Extensions()\n\t\t// TODO: Special handling for MessageSet?\n\t\tb, err = mi.appendExtensions(b, e, opts)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t}\n\n\tvar lazy **protolazy.XXX_lazyUnmarshalInfo\n\tvar presence presence\n\tif mi.presenceOffset.IsValid() {\n\t\tpresence = p.Apply(mi.presenceOffset).PresenceInfo()\n\t\tif mi.lazyOffset.IsValid() {\n\t\t\tlazy = p.Apply(mi.lazyOffset).LazyInfoPtr()\n\t\t}\n\t}\n\n\tfor _, f := range mi.orderedCoderFields {\n\t\tif f.funcs.marshal == nil {\n\t\t\tcontinue\n\t\t}\n\t\tfptr := p.Apply(f.offset)\n\n\t\tif f.presenceIndex != noPresence {\n\t\t\tif !presence.Present(f.presenceIndex) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif f.isLazy {\n\t\t\t\t// Be careful, this field needs to be read atomically, like for a get\n\t\t\t\tif f.isPointer && fptr.AtomicGetPointer().IsNil() {\n\t\t\t\t\tif lazyFields(opts) {\n\t\t\t\t\t\tb, _ = (*lazy).AppendField(b, uint32(f.num))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmi.lazyUnmarshal(p, f.num)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tb, err = f.funcs.marshal(b, fptr, f, opts)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn b, err\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t} else if f.isPointer && fptr.Elem().IsNil() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tb, err = f.funcs.marshal(b, fptr, f, opts)\n\t\t\tif err != nil {\n\t\t\t\treturn b, err\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif f.isPointer && fptr.Elem().IsNil() {\n\t\t\tcontinue\n\t\t}\n\t\tb, err = f.funcs.marshal(b, fptr, f, opts)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t}\n\tif mi.unknownOffset.IsValid() && !mi.isMessageSet {\n\t\tif u := mi.getUnknownBytes(p); u != nil {\n\t\t\tb = append(b, (*u)...)\n\t\t}\n\t}\n\treturn b, nil\n}\n\n// fullyLazyExtensions returns true if we should attempt to keep extensions lazy over size and marshal.\nfunc fullyLazyExtensions(opts marshalOptions) bool {\n\t// When deterministic marshaling is requested, force an unmarshal for lazy\n\t// extensions to produce a deterministic result, instead of passing through\n\t// bytes lazily that may or may not match what Go Protobuf would produce.\n\treturn opts.flags&piface.MarshalDeterministic == 0\n}\n\n// lazyFields returns true if we should attempt to keep fields lazy over size and marshal.\nfunc lazyFields(opts marshalOptions) bool {\n\t// When deterministic marshaling is requested, force an unmarshal for lazy\n\t// fields to produce a deterministic result, instead of passing through\n\t// bytes lazily that may or may not match what Go Protobuf would produce.\n\treturn opts.flags&piface.MarshalDeterministic == 0\n}\n\nfunc (mi *MessageInfo) sizeExtensions(ext *map[int32]ExtensionField, opts marshalOptions) (n int) {\n\tif ext == nil {\n\t\treturn 0\n\t}\n\tfor _, x := range *ext {\n\t\txi := getExtensionFieldInfo(x.Type())\n\t\tif xi.funcs.size == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif fullyLazyExtensions(opts) {\n\t\t\t// Don't expand the extension, instead use the buffer to calculate size\n\t\t\tif lb := x.lazyBuffer(); lb != nil {\n\t\t\t\t// We got hold of the buffer, so it's still lazy.\n\t\t\t\tn += len(lb)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tn += xi.funcs.size(x.Value(), xi.tagsize, opts)\n\t}\n\treturn n\n}\n\nfunc (mi *MessageInfo) appendExtensions(b []byte, ext *map[int32]ExtensionField, opts marshalOptions) ([]byte, error) {\n\tif ext == nil {\n\t\treturn b, nil\n\t}\n\n\tswitch len(*ext) {\n\tcase 0:\n\t\treturn b, nil\n\tcase 1:\n\t\t// Fast-path for one extension: Don't bother sorting the keys.\n\t\tvar err error\n\t\tfor _, x := range *ext {\n\t\t\txi := getExtensionFieldInfo(x.Type())\n\t\t\tif fullyLazyExtensions(opts) {\n\t\t\t\t// Don't expand the extension if it's still in wire format, instead use the buffer content.\n\t\t\t\tif lb := x.lazyBuffer(); lb != nil {\n\t\t\t\t\tb = append(b, lb...)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tb, err = xi.funcs.marshal(b, x.Value(), xi.wiretag, opts)\n\t\t}\n\t\treturn b, err\n\tdefault:\n\t\t// Sort the keys to provide a deterministic encoding.\n\t\t// Not sure this is required, but the old code does it.\n\t\tkeys := make([]int, 0, len(*ext))\n\t\tfor k := range *ext {\n\t\t\tkeys = append(keys, int(k))\n\t\t}\n\t\tsort.Ints(keys)\n\t\tvar err error\n\t\tfor _, k := range keys {\n\t\t\tx := (*ext)[int32(k)]\n\t\t\txi := getExtensionFieldInfo(x.Type())\n\t\t\tif fullyLazyExtensions(opts) {\n\t\t\t\t// Don't expand the extension if it's still in wire format, instead use the buffer content.\n\t\t\t\tif lb := x.lazyBuffer(); lb != nil {\n\t\t\t\t\tb = append(b, lb...)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tb, err = xi.funcs.marshal(b, x.Value(), xi.wiretag, opts)\n\t\t\tif err != nil {\n\t\t\t\treturn b, err\n\t\t\t}\n\t\t}\n\t\treturn b, nil\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/enum.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 impl\n\nimport (\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\ntype EnumInfo struct {\n\tGoReflectType reflect.Type // int32 kind\n\tDesc          protoreflect.EnumDescriptor\n}\n\nfunc (t *EnumInfo) New(n protoreflect.EnumNumber) protoreflect.Enum {\n\treturn reflect.ValueOf(n).Convert(t.GoReflectType).Interface().(protoreflect.Enum)\n}\nfunc (t *EnumInfo) Descriptor() protoreflect.EnumDescriptor { return t.Desc }\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/equal.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 impl\n\nimport (\n\t\"bytes\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\nfunc equal(in protoiface.EqualInput) protoiface.EqualOutput {\n\treturn protoiface.EqualOutput{Equal: equalMessage(in.MessageA, in.MessageB)}\n}\n\n// equalMessage is a fast-path variant of protoreflect.equalMessage.\n// It takes advantage of the internal messageState type to avoid\n// unnecessary allocations, type assertions.\nfunc equalMessage(mx, my protoreflect.Message) bool {\n\tif mx == nil || my == nil {\n\t\treturn mx == my\n\t}\n\tif mx.Descriptor() != my.Descriptor() {\n\t\treturn false\n\t}\n\n\tmsx, ok := mx.(*messageState)\n\tif !ok {\n\t\treturn protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))\n\t}\n\tmsy, ok := my.(*messageState)\n\tif !ok {\n\t\treturn protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))\n\t}\n\n\tmi := msx.messageInfo()\n\tmiy := msy.messageInfo()\n\tif mi != miy {\n\t\treturn protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my))\n\t}\n\tmi.init()\n\t// Compares regular fields\n\t// Modified Message.Range code that compares two messages of the same type\n\t// while going over the fields.\n\tfor _, ri := range mi.rangeInfos {\n\t\tvar fd protoreflect.FieldDescriptor\n\t\tvar vx, vy protoreflect.Value\n\n\t\tswitch ri := ri.(type) {\n\t\tcase *fieldInfo:\n\t\t\thx := ri.has(msx.pointer())\n\t\t\thy := ri.has(msy.pointer())\n\t\t\tif hx != hy {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !hx {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfd = ri.fieldDesc\n\t\t\tvx = ri.get(msx.pointer())\n\t\t\tvy = ri.get(msy.pointer())\n\t\tcase *oneofInfo:\n\t\t\tfnx := ri.which(msx.pointer())\n\t\t\tfny := ri.which(msy.pointer())\n\t\t\tif fnx != fny {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif fnx <= 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfi := mi.fields[fnx]\n\t\t\tfd = fi.fieldDesc\n\t\t\tvx = fi.get(msx.pointer())\n\t\t\tvy = fi.get(msy.pointer())\n\t\t}\n\n\t\tif !equalValue(fd, vx, vy) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Compare extensions.\n\t// This is more complicated because mx or my could have empty/nil extension maps,\n\t// however some populated extension map values are equal to nil extension maps.\n\temx := mi.extensionMap(msx.pointer())\n\temy := mi.extensionMap(msy.pointer())\n\tif emx != nil {\n\t\tfor k, x := range *emx {\n\t\t\txd := x.Type().TypeDescriptor()\n\t\t\txv := x.Value()\n\t\t\tvar y ExtensionField\n\t\t\tok := false\n\t\t\tif emy != nil {\n\t\t\t\ty, ok = (*emy)[k]\n\t\t\t}\n\t\t\t// We need to treat empty lists as equal to nil values\n\t\t\tif emy == nil || !ok {\n\t\t\t\tif xd.IsList() && xv.List().Len() == 0 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tif !equalValue(xd, xv, y.Value()) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\tif emy != nil {\n\t\t// emy may have extensions emx does not have, need to check them as well\n\t\tfor k, y := range *emy {\n\t\t\tif emx != nil {\n\t\t\t\t// emx has the field, so we already checked it\n\t\t\t\tif _, ok := (*emx)[k]; ok {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Empty lists are equal to nil\n\t\t\tif y.Type().TypeDescriptor().IsList() && y.Value().List().Len() == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Cant be equal if the extension is populated\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn equalUnknown(mx.GetUnknown(), my.GetUnknown())\n}\n\nfunc equalValue(fd protoreflect.FieldDescriptor, vx, vy protoreflect.Value) bool {\n\t// slow path\n\tif fd.Kind() != protoreflect.MessageKind {\n\t\treturn vx.Equal(vy)\n\t}\n\n\t// fast path special cases\n\tif fd.IsMap() {\n\t\tif fd.MapValue().Kind() == protoreflect.MessageKind {\n\t\t\treturn equalMessageMap(vx.Map(), vy.Map())\n\t\t}\n\t\treturn vx.Equal(vy)\n\t}\n\n\tif fd.IsList() {\n\t\treturn equalMessageList(vx.List(), vy.List())\n\t}\n\n\treturn equalMessage(vx.Message(), vy.Message())\n}\n\n// Mostly copied from protoreflect.equalMap.\n// This variant only works for messages as map types.\n// All other map types should be handled via Value.Equal.\nfunc equalMessageMap(mx, my protoreflect.Map) bool {\n\tif mx.Len() != my.Len() {\n\t\treturn false\n\t}\n\tequal := true\n\tmx.Range(func(k protoreflect.MapKey, vx protoreflect.Value) bool {\n\t\tif !my.Has(k) {\n\t\t\tequal = false\n\t\t\treturn false\n\t\t}\n\t\tvy := my.Get(k)\n\t\tequal = equalMessage(vx.Message(), vy.Message())\n\t\treturn equal\n\t})\n\treturn equal\n}\n\n// Mostly copied from protoreflect.equalList.\n// The only change is the usage of equalImpl instead of protoreflect.equalValue.\nfunc equalMessageList(lx, ly protoreflect.List) bool {\n\tif lx.Len() != ly.Len() {\n\t\treturn false\n\t}\n\tfor i := 0; i < lx.Len(); i++ {\n\t\t// We only operate on messages here since equalImpl will not call us in any other case.\n\t\tif !equalMessage(lx.Get(i).Message(), ly.Get(i).Message()) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// equalUnknown compares unknown fields by direct comparison on the raw bytes\n// of each individual field number.\n// Copied from protoreflect.equalUnknown.\nfunc equalUnknown(x, y protoreflect.RawFields) bool {\n\tif len(x) != len(y) {\n\t\treturn false\n\t}\n\tif bytes.Equal([]byte(x), []byte(y)) {\n\t\treturn true\n\t}\n\n\tmx := make(map[protoreflect.FieldNumber]protoreflect.RawFields)\n\tmy := make(map[protoreflect.FieldNumber]protoreflect.RawFields)\n\tfor len(x) > 0 {\n\t\tfnum, _, n := protowire.ConsumeField(x)\n\t\tmx[fnum] = append(mx[fnum], x[:n]...)\n\t\tx = x[n:]\n\t}\n\tfor len(y) > 0 {\n\t\tfnum, _, n := protowire.ConsumeField(y)\n\t\tmy[fnum] = append(my[fnum], y[:n]...)\n\t\ty = y[n:]\n\t}\n\tif len(mx) != len(my) {\n\t\treturn false\n\t}\n\n\tfor k, v1 := range mx {\n\t\tif v2, ok := my[k]; !ok || !bytes.Equal([]byte(v1), []byte(v2)) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/extension.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 impl\n\nimport (\n\t\"reflect\"\n\t\"sync\"\n\t\"sync/atomic\"\n\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\n// ExtensionInfo implements ExtensionType.\n//\n// This type contains a number of exported fields for legacy compatibility.\n// The only non-deprecated use of this type is through the methods of the\n// ExtensionType interface.\ntype ExtensionInfo struct {\n\t// An ExtensionInfo may exist in several stages of initialization.\n\t//\n\t// extensionInfoUninitialized: Some or all of the legacy exported\n\t// fields may be set, but none of the unexported fields have been\n\t// initialized. This is the starting state for an ExtensionInfo\n\t// in legacy generated code.\n\t//\n\t// extensionInfoDescInit: The desc field is set, but other unexported fields\n\t// may not be initialized. Legacy exported fields may or may not be set.\n\t// This is the starting state for an ExtensionInfo in newly generated code.\n\t//\n\t// extensionInfoFullInit: The ExtensionInfo is fully initialized.\n\t// This state is only entered after lazy initialization is complete.\n\tinit uint32\n\tmu   sync.Mutex\n\n\tgoType reflect.Type\n\tdesc   extensionTypeDescriptor\n\tconv   Converter\n\tinfo   *extensionFieldInfo // for fast-path method implementations\n\n\t// ExtendedType is a typed nil-pointer to the parent message type that\n\t// is being extended. It is possible for this to be unpopulated in v2\n\t// since the message may no longer implement the MessageV1 interface.\n\t//\n\t// Deprecated: Use the ExtendedType method instead.\n\tExtendedType protoiface.MessageV1\n\n\t// ExtensionType is the zero value of the extension type.\n\t//\n\t// For historical reasons, reflect.TypeOf(ExtensionType) and the\n\t// type returned by InterfaceOf may not be identical.\n\t//\n\t// Deprecated: Use InterfaceOf(xt.Zero()) instead.\n\tExtensionType any\n\n\t// Field is the field number of the extension.\n\t//\n\t// Deprecated: Use the Descriptor().Number method instead.\n\tField int32\n\n\t// Name is the fully qualified name of extension.\n\t//\n\t// Deprecated: Use the Descriptor().FullName method instead.\n\tName string\n\n\t// Tag is the protobuf struct tag used in the v1 API.\n\t//\n\t// Deprecated: Do not use.\n\tTag string\n\n\t// Filename is the proto filename in which the extension is defined.\n\t//\n\t// Deprecated: Use Descriptor().ParentFile().Path() instead.\n\tFilename string\n}\n\n// Stages of initialization: See the ExtensionInfo.init field.\nconst (\n\textensionInfoUninitialized = 0\n\textensionInfoDescInit      = 1\n\textensionInfoFullInit      = 2\n)\n\nfunc InitExtensionInfo(xi *ExtensionInfo, xd protoreflect.ExtensionDescriptor, goType reflect.Type) {\n\txi.goType = goType\n\txi.desc = extensionTypeDescriptor{xd, xi}\n\txi.init = extensionInfoDescInit\n}\n\nfunc (xi *ExtensionInfo) New() protoreflect.Value {\n\treturn xi.lazyInit().New()\n}\nfunc (xi *ExtensionInfo) Zero() protoreflect.Value {\n\treturn xi.lazyInit().Zero()\n}\nfunc (xi *ExtensionInfo) ValueOf(v any) protoreflect.Value {\n\treturn xi.lazyInit().PBValueOf(reflect.ValueOf(v))\n}\nfunc (xi *ExtensionInfo) InterfaceOf(v protoreflect.Value) any {\n\treturn xi.lazyInit().GoValueOf(v).Interface()\n}\nfunc (xi *ExtensionInfo) IsValidValue(v protoreflect.Value) bool {\n\treturn xi.lazyInit().IsValidPB(v)\n}\nfunc (xi *ExtensionInfo) IsValidInterface(v any) bool {\n\treturn xi.lazyInit().IsValidGo(reflect.ValueOf(v))\n}\nfunc (xi *ExtensionInfo) TypeDescriptor() protoreflect.ExtensionTypeDescriptor {\n\tif atomic.LoadUint32(&xi.init) < extensionInfoDescInit {\n\t\txi.lazyInitSlow()\n\t}\n\treturn &xi.desc\n}\n\nfunc (xi *ExtensionInfo) lazyInit() Converter {\n\tif atomic.LoadUint32(&xi.init) < extensionInfoFullInit {\n\t\txi.lazyInitSlow()\n\t}\n\treturn xi.conv\n}\n\nfunc (xi *ExtensionInfo) lazyInitSlow() {\n\txi.mu.Lock()\n\tdefer xi.mu.Unlock()\n\n\tif xi.init == extensionInfoFullInit {\n\t\treturn\n\t}\n\tdefer atomic.StoreUint32(&xi.init, extensionInfoFullInit)\n\n\tif xi.desc.ExtensionDescriptor == nil {\n\t\txi.initFromLegacy()\n\t}\n\tif !xi.desc.ExtensionDescriptor.IsPlaceholder() {\n\t\tif xi.ExtensionType == nil {\n\t\t\txi.initToLegacy()\n\t\t}\n\t\txi.conv = NewConverter(xi.goType, xi.desc.ExtensionDescriptor)\n\t\txi.info = makeExtensionFieldInfo(xi.desc.ExtensionDescriptor)\n\t\txi.info.validation = newValidationInfo(xi.desc.ExtensionDescriptor, xi.goType)\n\t}\n}\n\ntype extensionTypeDescriptor struct {\n\tprotoreflect.ExtensionDescriptor\n\txi *ExtensionInfo\n}\n\nfunc (xtd *extensionTypeDescriptor) Type() protoreflect.ExtensionType {\n\treturn xtd.xi\n}\nfunc (xtd *extensionTypeDescriptor) Descriptor() protoreflect.ExtensionDescriptor {\n\treturn xtd.ExtensionDescriptor\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/lazy.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 impl\n\nimport (\n\t\"fmt\"\n\t\"math/bits\"\n\t\"os\"\n\t\"reflect\"\n\t\"sort\"\n\t\"sync/atomic\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/internal/protolazy\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\tpreg \"google.golang.org/protobuf/reflect/protoregistry\"\n\tpiface \"google.golang.org/protobuf/runtime/protoiface\"\n)\n\nvar enableLazy int32 = func() int32 {\n\tif os.Getenv(\"GOPROTODEBUG\") == \"nolazy\" {\n\t\treturn 0\n\t}\n\treturn 1\n}()\n\n// EnableLazyUnmarshal enables lazy unmarshaling.\nfunc EnableLazyUnmarshal(enable bool) {\n\tif enable {\n\t\tatomic.StoreInt32(&enableLazy, 1)\n\t\treturn\n\t}\n\tatomic.StoreInt32(&enableLazy, 0)\n}\n\n// LazyEnabled reports whether lazy unmarshalling is currently enabled.\nfunc LazyEnabled() bool {\n\treturn atomic.LoadInt32(&enableLazy) != 0\n}\n\n// UnmarshalField unmarshals a field in a message.\nfunc UnmarshalField(m interface{}, num protowire.Number) {\n\tswitch m := m.(type) {\n\tcase *messageState:\n\t\tm.messageInfo().lazyUnmarshal(m.pointer(), num)\n\tcase *messageReflectWrapper:\n\t\tm.messageInfo().lazyUnmarshal(m.pointer(), num)\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unsupported wrapper type %T\", m))\n\t}\n}\n\nfunc (mi *MessageInfo) lazyUnmarshal(p pointer, num protoreflect.FieldNumber) {\n\tvar f *coderFieldInfo\n\tif int(num) < len(mi.denseCoderFields) {\n\t\tf = mi.denseCoderFields[num]\n\t} else {\n\t\tf = mi.coderFields[num]\n\t}\n\tif f == nil {\n\t\tpanic(fmt.Sprintf(\"lazyUnmarshal: field info for %v.%v\", mi.Desc.FullName(), num))\n\t}\n\tlazy := *p.Apply(mi.lazyOffset).LazyInfoPtr()\n\tstart, end, found, _, multipleEntries := lazy.FindFieldInProto(uint32(num))\n\tif !found && multipleEntries == nil {\n\t\tpanic(fmt.Sprintf(\"lazyUnmarshal: can't find field data for %v.%v\", mi.Desc.FullName(), num))\n\t}\n\t// The actual pointer in the message can not be set until the whole struct is filled in, otherwise we will have races.\n\t// Create another pointer and set it atomically, if we won the race and the pointer in the original message is still nil.\n\tfp := pointerOfValue(reflect.New(f.ft))\n\tif multipleEntries != nil {\n\t\tfor _, entry := range multipleEntries {\n\t\t\tmi.unmarshalField(lazy.Buffer()[entry.Start:entry.End], fp, f, lazy, lazy.UnmarshalFlags())\n\t\t}\n\t} else {\n\t\tmi.unmarshalField(lazy.Buffer()[start:end], fp, f, lazy, lazy.UnmarshalFlags())\n\t}\n\tp.Apply(f.offset).AtomicSetPointerIfNil(fp.Elem())\n}\n\nfunc (mi *MessageInfo) unmarshalField(b []byte, p pointer, f *coderFieldInfo, lazyInfo *protolazy.XXX_lazyUnmarshalInfo, flags piface.UnmarshalInputFlags) error {\n\topts := lazyUnmarshalOptions\n\topts.flags |= flags\n\tfor len(b) > 0 {\n\t\t// Parse the tag (field number and wire type).\n\t\tvar tag uint64\n\t\tif b[0] < 0x80 {\n\t\t\ttag = uint64(b[0])\n\t\t\tb = b[1:]\n\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\ttag = 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\ttag, n = protowire.ConsumeVarint(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn errors.New(\"invalid wire data\")\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t}\n\t\tvar num protowire.Number\n\t\tif n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) {\n\t\t\treturn errors.New(\"invalid wire data\")\n\t\t} else {\n\t\t\tnum = protowire.Number(n)\n\t\t}\n\t\twtyp := protowire.Type(tag & 7)\n\t\tif num == f.num {\n\t\t\to, err := f.funcs.unmarshal(b, p, wtyp, f, opts)\n\t\t\tif err == nil {\n\t\t\t\tb = b[o.n:]\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err != errUnknown {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tn := protowire.ConsumeFieldValue(num, wtyp, b)\n\t\tif n < 0 {\n\t\t\treturn errors.New(\"invalid wire data\")\n\t\t}\n\t\tb = b[n:]\n\t}\n\treturn nil\n}\n\nfunc (mi *MessageInfo) skipField(b []byte, f *coderFieldInfo, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, _ ValidationStatus) {\n\tfmi := f.validation.mi\n\tif fmi == nil {\n\t\tfd := mi.Desc.Fields().ByNumber(f.num)\n\t\tif fd == nil {\n\t\t\treturn out, ValidationUnknown\n\t\t}\n\t\tmessageName := fd.Message().FullName()\n\t\tmessageType, err := preg.GlobalTypes.FindMessageByName(messageName)\n\t\tif err != nil {\n\t\t\treturn out, ValidationUnknown\n\t\t}\n\t\tvar ok bool\n\t\tfmi, ok = messageType.(*MessageInfo)\n\t\tif !ok {\n\t\t\treturn out, ValidationUnknown\n\t\t}\n\t}\n\tfmi.init()\n\tswitch f.validation.typ {\n\tcase validationTypeMessage:\n\t\tif wtyp != protowire.BytesType {\n\t\t\treturn out, ValidationWrongWireType\n\t\t}\n\t\tv, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn out, ValidationInvalid\n\t\t}\n\t\tout, st := fmi.validate(v, 0, opts)\n\t\tout.n = n\n\t\treturn out, st\n\tcase validationTypeGroup:\n\t\tif wtyp != protowire.StartGroupType {\n\t\t\treturn out, ValidationWrongWireType\n\t\t}\n\t\tout, st := fmi.validate(b, f.num, opts)\n\t\treturn out, st\n\tdefault:\n\t\treturn out, ValidationUnknown\n\t}\n}\n\n// unmarshalPointerLazy is similar to unmarshalPointerEager, but it\n// specifically handles lazy unmarshalling.  it expects lazyOffset and\n// presenceOffset to both be valid.\nfunc (mi *MessageInfo) unmarshalPointerLazy(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) {\n\tinitialized := true\n\tvar requiredMask uint64\n\tvar lazy **protolazy.XXX_lazyUnmarshalInfo\n\tvar presence presence\n\tvar lazyIndex []protolazy.IndexEntry\n\tvar lastNum protowire.Number\n\toutOfOrder := false\n\tlazyDecode := false\n\tpresence = p.Apply(mi.presenceOffset).PresenceInfo()\n\tlazy = p.Apply(mi.lazyOffset).LazyInfoPtr()\n\tif !presence.AnyPresent(mi.presenceSize) {\n\t\tif opts.CanBeLazy() {\n\t\t\t// If the message contains existing data, we need to merge into it.\n\t\t\t// Lazy unmarshaling doesn't merge, so only enable it when the\n\t\t\t// message is empty (has no presence bitmap).\n\t\t\tlazyDecode = true\n\t\t\tif *lazy == nil {\n\t\t\t\t*lazy = &protolazy.XXX_lazyUnmarshalInfo{}\n\t\t\t}\n\t\t\t(*lazy).SetUnmarshalFlags(opts.flags)\n\t\t\tif !opts.AliasBuffer() {\n\t\t\t\t// Make a copy of the buffer for lazy unmarshaling.\n\t\t\t\t// Set the AliasBuffer flag so recursive unmarshal\n\t\t\t\t// operations reuse the copy.\n\t\t\t\tb = append([]byte{}, b...)\n\t\t\t\topts.flags |= piface.UnmarshalAliasBuffer\n\t\t\t}\n\t\t\t(*lazy).SetBuffer(b)\n\t\t}\n\t}\n\t// Track special handling of lazy fields.\n\t//\n\t// In the common case, all fields are lazyValidateOnly (and lazyFields remains nil).\n\t// In the event that validation for a field fails, this map tracks handling of the field.\n\ttype lazyAction uint8\n\tconst (\n\t\tlazyValidateOnly   lazyAction = iota // validate the field only\n\t\tlazyUnmarshalNow                     // eagerly unmarshal the field\n\t\tlazyUnmarshalLater                   // unmarshal the field after the message is fully processed\n\t)\n\tvar lazyFields map[*coderFieldInfo]lazyAction\n\tvar exts *map[int32]ExtensionField\n\tstart := len(b)\n\tpos := 0\n\tfor len(b) > 0 {\n\t\t// Parse the tag (field number and wire type).\n\t\tvar tag uint64\n\t\tif b[0] < 0x80 {\n\t\t\ttag = uint64(b[0])\n\t\t\tb = b[1:]\n\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\ttag = 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\ttag, n = protowire.ConsumeVarint(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t}\n\t\tvar num protowire.Number\n\t\tif n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) {\n\t\t\treturn out, errors.New(\"invalid field number\")\n\t\t} else {\n\t\t\tnum = protowire.Number(n)\n\t\t}\n\t\twtyp := protowire.Type(tag & 7)\n\n\t\tif wtyp == protowire.EndGroupType {\n\t\t\tif num != groupTag {\n\t\t\t\treturn out, errors.New(\"mismatching end group marker\")\n\t\t\t}\n\t\t\tgroupTag = 0\n\t\t\tbreak\n\t\t}\n\n\t\tvar f *coderFieldInfo\n\t\tif int(num) < len(mi.denseCoderFields) {\n\t\t\tf = mi.denseCoderFields[num]\n\t\t} else {\n\t\t\tf = mi.coderFields[num]\n\t\t}\n\t\tvar n int\n\t\terr := errUnknown\n\t\tdiscardUnknown := false\n\tField:\n\t\tswitch {\n\t\tcase f != nil:\n\t\t\tif f.funcs.unmarshal == nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif f.isLazy && lazyDecode {\n\t\t\t\tswitch {\n\t\t\t\tcase lazyFields == nil || lazyFields[f] == lazyValidateOnly:\n\t\t\t\t\t// Attempt to validate this field and leave it for later lazy unmarshaling.\n\t\t\t\t\to, valid := mi.skipField(b, f, wtyp, opts)\n\t\t\t\t\tswitch valid {\n\t\t\t\t\tcase ValidationValid:\n\t\t\t\t\t\t// Skip over the valid field and continue.\n\t\t\t\t\t\terr = nil\n\t\t\t\t\t\tpresence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize)\n\t\t\t\t\t\trequiredMask |= f.validation.requiredBit\n\t\t\t\t\t\tif !o.initialized {\n\t\t\t\t\t\t\tinitialized = false\n\t\t\t\t\t\t}\n\t\t\t\t\t\tn = o.n\n\t\t\t\t\t\tbreak Field\n\t\t\t\t\tcase ValidationInvalid:\n\t\t\t\t\t\treturn out, errors.New(\"invalid proto wire format\")\n\t\t\t\t\tcase ValidationWrongWireType:\n\t\t\t\t\t\tbreak Field\n\t\t\t\t\tcase ValidationUnknown:\n\t\t\t\t\t\tif lazyFields == nil {\n\t\t\t\t\t\t\tlazyFields = make(map[*coderFieldInfo]lazyAction)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif presence.Present(f.presenceIndex) {\n\t\t\t\t\t\t\t// We were unable to determine if the field is valid or not,\n\t\t\t\t\t\t\t// and we've already skipped over at least one instance of this\n\t\t\t\t\t\t\t// field. Clear the presence bit (so if we stop decoding early,\n\t\t\t\t\t\t\t// we don't leave a partially-initialized field around) and flag\n\t\t\t\t\t\t\t// the field for unmarshaling before we return.\n\t\t\t\t\t\t\tpresence.ClearPresent(f.presenceIndex)\n\t\t\t\t\t\t\tlazyFields[f] = lazyUnmarshalLater\n\t\t\t\t\t\t\tdiscardUnknown = true\n\t\t\t\t\t\t\tbreak Field\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// We were unable to determine if the field is valid or not,\n\t\t\t\t\t\t\t// but this is the first time we've seen it. Flag it as needing\n\t\t\t\t\t\t\t// eager unmarshaling and fall through to the eager unmarshal case below.\n\t\t\t\t\t\t\tlazyFields[f] = lazyUnmarshalNow\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\tcase lazyFields[f] == lazyUnmarshalLater:\n\t\t\t\t\t// This field will be unmarshaled in a separate pass below.\n\t\t\t\t\t// Skip over it here.\n\t\t\t\t\tdiscardUnknown = true\n\t\t\t\t\tbreak Field\n\t\t\t\tdefault:\n\t\t\t\t\t// Eagerly unmarshal the field.\n\t\t\t\t}\n\t\t\t}\n\t\t\tif f.isLazy && !lazyDecode && presence.Present(f.presenceIndex) {\n\t\t\t\tif p.Apply(f.offset).AtomicGetPointer().IsNil() {\n\t\t\t\t\tmi.lazyUnmarshal(p, f.num)\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar o unmarshalOutput\n\t\t\to, err = f.funcs.unmarshal(b, p.Apply(f.offset), wtyp, f, opts)\n\t\t\tn = o.n\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\trequiredMask |= f.validation.requiredBit\n\t\t\tif f.funcs.isInit != nil && !o.initialized {\n\t\t\t\tinitialized = false\n\t\t\t}\n\t\t\tif f.presenceIndex != noPresence {\n\t\t\t\tpresence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize)\n\t\t\t}\n\t\tdefault:\n\t\t\t// Possible extension.\n\t\t\tif exts == nil && mi.extensionOffset.IsValid() {\n\t\t\t\texts = p.Apply(mi.extensionOffset).Extensions()\n\t\t\t\tif *exts == nil {\n\t\t\t\t\t*exts = make(map[int32]ExtensionField)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif exts == nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tvar o unmarshalOutput\n\t\t\to, err = mi.unmarshalExtension(b, num, wtyp, *exts, opts)\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tn = o.n\n\t\t\tif !o.initialized {\n\t\t\t\tinitialized = false\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tif err != errUnknown {\n\t\t\t\treturn out, err\n\t\t\t}\n\t\t\tn = protowire.ConsumeFieldValue(num, wtyp, b)\n\t\t\tif n < 0 {\n\t\t\t\treturn out, errDecode\n\t\t\t}\n\t\t\tif !discardUnknown && !opts.DiscardUnknown() && mi.unknownOffset.IsValid() {\n\t\t\t\tu := mi.mutableUnknownBytes(p)\n\t\t\t\t*u = protowire.AppendTag(*u, num, wtyp)\n\t\t\t\t*u = append(*u, b[:n]...)\n\t\t\t}\n\t\t}\n\t\tb = b[n:]\n\t\tend := start - len(b)\n\t\tif lazyDecode && f != nil && f.isLazy {\n\t\t\tif num != lastNum {\n\t\t\t\tlazyIndex = append(lazyIndex, protolazy.IndexEntry{\n\t\t\t\t\tFieldNum: uint32(num),\n\t\t\t\t\tStart:    uint32(pos),\n\t\t\t\t\tEnd:      uint32(end),\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\ti := len(lazyIndex) - 1\n\t\t\t\tlazyIndex[i].End = uint32(end)\n\t\t\t\tlazyIndex[i].MultipleContiguous = true\n\t\t\t}\n\t\t}\n\t\tif num < lastNum {\n\t\t\toutOfOrder = true\n\t\t}\n\t\tpos = end\n\t\tlastNum = num\n\t}\n\tif groupTag != 0 {\n\t\treturn out, errors.New(\"missing end group marker\")\n\t}\n\tif lazyFields != nil {\n\t\t// Some fields failed validation, and now need to be unmarshaled.\n\t\tfor f, action := range lazyFields {\n\t\t\tif action != lazyUnmarshalLater {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tinitialized = false\n\t\t\tif *lazy == nil {\n\t\t\t\t*lazy = &protolazy.XXX_lazyUnmarshalInfo{}\n\t\t\t}\n\t\t\tif err := mi.unmarshalField((*lazy).Buffer(), p.Apply(f.offset), f, *lazy, opts.flags); err != nil {\n\t\t\t\treturn out, err\n\t\t\t}\n\t\t\tpresence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize)\n\t\t}\n\t}\n\tif lazyDecode {\n\t\tif outOfOrder {\n\t\t\tsort.Slice(lazyIndex, func(i, j int) bool {\n\t\t\t\treturn lazyIndex[i].FieldNum < lazyIndex[j].FieldNum ||\n\t\t\t\t\t(lazyIndex[i].FieldNum == lazyIndex[j].FieldNum &&\n\t\t\t\t\t\tlazyIndex[i].Start < lazyIndex[j].Start)\n\t\t\t})\n\t\t}\n\t\tif *lazy == nil {\n\t\t\t*lazy = &protolazy.XXX_lazyUnmarshalInfo{}\n\t\t}\n\n\t\t(*lazy).SetIndex(lazyIndex)\n\t}\n\tif mi.numRequiredFields > 0 && bits.OnesCount64(requiredMask) != int(mi.numRequiredFields) {\n\t\tinitialized = false\n\t}\n\tif initialized {\n\t\tout.initialized = true\n\t}\n\tout.n = start - len(b)\n\treturn out, nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/legacy_enum.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 impl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"google.golang.org/protobuf/internal/filedesc\"\n\t\"google.golang.org/protobuf/internal/strs\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// legacyEnumName returns the name of enums used in legacy code.\n// It is neither the protobuf full name nor the qualified Go name,\n// but rather an odd hybrid of both.\nfunc legacyEnumName(ed protoreflect.EnumDescriptor) string {\n\tvar protoPkg string\n\tenumName := string(ed.FullName())\n\tif fd := ed.ParentFile(); fd != nil {\n\t\tprotoPkg = string(fd.Package())\n\t\tenumName = strings.TrimPrefix(enumName, protoPkg+\".\")\n\t}\n\tif protoPkg == \"\" {\n\t\treturn strs.GoCamelCase(enumName)\n\t}\n\treturn protoPkg + \".\" + strs.GoCamelCase(enumName)\n}\n\n// legacyWrapEnum wraps v as a protoreflect.Enum,\n// where v must be a int32 kind and not implement the v2 API already.\nfunc legacyWrapEnum(v reflect.Value) protoreflect.Enum {\n\tet := legacyLoadEnumType(v.Type())\n\treturn et.New(protoreflect.EnumNumber(v.Int()))\n}\n\nvar legacyEnumTypeCache sync.Map // map[reflect.Type]protoreflect.EnumType\n\n// legacyLoadEnumType dynamically loads a protoreflect.EnumType for t,\n// where t must be an int32 kind and not implement the v2 API already.\nfunc legacyLoadEnumType(t reflect.Type) protoreflect.EnumType {\n\t// Fast-path: check if a EnumType is cached for this concrete type.\n\tif et, ok := legacyEnumTypeCache.Load(t); ok {\n\t\treturn et.(protoreflect.EnumType)\n\t}\n\n\t// Slow-path: derive enum descriptor and initialize EnumType.\n\tvar et protoreflect.EnumType\n\ted := LegacyLoadEnumDesc(t)\n\tet = &legacyEnumType{\n\t\tdesc:   ed,\n\t\tgoType: t,\n\t}\n\tif et, ok := legacyEnumTypeCache.LoadOrStore(t, et); ok {\n\t\treturn et.(protoreflect.EnumType)\n\t}\n\treturn et\n}\n\ntype legacyEnumType struct {\n\tdesc   protoreflect.EnumDescriptor\n\tgoType reflect.Type\n\tm      sync.Map // map[protoreflect.EnumNumber]proto.Enum\n}\n\nfunc (t *legacyEnumType) New(n protoreflect.EnumNumber) protoreflect.Enum {\n\tif e, ok := t.m.Load(n); ok {\n\t\treturn e.(protoreflect.Enum)\n\t}\n\te := &legacyEnumWrapper{num: n, pbTyp: t, goTyp: t.goType}\n\tt.m.Store(n, e)\n\treturn e\n}\nfunc (t *legacyEnumType) Descriptor() protoreflect.EnumDescriptor {\n\treturn t.desc\n}\n\ntype legacyEnumWrapper struct {\n\tnum   protoreflect.EnumNumber\n\tpbTyp protoreflect.EnumType\n\tgoTyp reflect.Type\n}\n\nfunc (e *legacyEnumWrapper) Descriptor() protoreflect.EnumDescriptor {\n\treturn e.pbTyp.Descriptor()\n}\nfunc (e *legacyEnumWrapper) Type() protoreflect.EnumType {\n\treturn e.pbTyp\n}\nfunc (e *legacyEnumWrapper) Number() protoreflect.EnumNumber {\n\treturn e.num\n}\nfunc (e *legacyEnumWrapper) ProtoReflect() protoreflect.Enum {\n\treturn e\n}\nfunc (e *legacyEnumWrapper) protoUnwrap() any {\n\tv := reflect.New(e.goTyp).Elem()\n\tv.SetInt(int64(e.num))\n\treturn v.Interface()\n}\n\nvar (\n\t_ protoreflect.Enum = (*legacyEnumWrapper)(nil)\n\t_ unwrapper         = (*legacyEnumWrapper)(nil)\n)\n\nvar legacyEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescriptor\n\n// LegacyLoadEnumDesc returns an EnumDescriptor derived from the Go type,\n// which must be an int32 kind and not implement the v2 API already.\n//\n// This is exported for testing purposes.\nfunc LegacyLoadEnumDesc(t reflect.Type) protoreflect.EnumDescriptor {\n\t// Fast-path: check if an EnumDescriptor is cached for this concrete type.\n\tif ed, ok := legacyEnumDescCache.Load(t); ok {\n\t\treturn ed.(protoreflect.EnumDescriptor)\n\t}\n\n\t// Slow-path: initialize EnumDescriptor from the raw descriptor.\n\tev := reflect.Zero(t).Interface()\n\tif _, ok := ev.(protoreflect.Enum); ok {\n\t\tpanic(fmt.Sprintf(\"%v already implements proto.Enum\", t))\n\t}\n\tedV1, ok := ev.(enumV1)\n\tif !ok {\n\t\treturn aberrantLoadEnumDesc(t)\n\t}\n\tb, idxs := edV1.EnumDescriptor()\n\n\tvar ed protoreflect.EnumDescriptor\n\tif len(idxs) == 1 {\n\t\ted = legacyLoadFileDesc(b).Enums().Get(idxs[0])\n\t} else {\n\t\tmd := legacyLoadFileDesc(b).Messages().Get(idxs[0])\n\t\tfor _, i := range idxs[1 : len(idxs)-1] {\n\t\t\tmd = md.Messages().Get(i)\n\t\t}\n\t\ted = md.Enums().Get(idxs[len(idxs)-1])\n\t}\n\tif ed, ok := legacyEnumDescCache.LoadOrStore(t, ed); ok {\n\t\treturn ed.(protoreflect.EnumDescriptor)\n\t}\n\treturn ed\n}\n\nvar aberrantEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescriptor\n\n// aberrantLoadEnumDesc returns an EnumDescriptor derived from the Go type,\n// which must not implement protoreflect.Enum or enumV1.\n//\n// If the type does not implement enumV1, then there is no reliable\n// way to derive the original protobuf type information.\n// We are unable to use the global enum registry since it is\n// unfortunately keyed by the protobuf full name, which we also do not know.\n// Thus, this produces some bogus enum descriptor based on the Go type name.\nfunc aberrantLoadEnumDesc(t reflect.Type) protoreflect.EnumDescriptor {\n\t// Fast-path: check if an EnumDescriptor is cached for this concrete type.\n\tif ed, ok := aberrantEnumDescCache.Load(t); ok {\n\t\treturn ed.(protoreflect.EnumDescriptor)\n\t}\n\n\t// Slow-path: construct a bogus, but unique EnumDescriptor.\n\ted := &filedesc.Enum{L2: new(filedesc.EnumL2)}\n\ted.L0.FullName = AberrantDeriveFullName(t) // e.g., github_com.user.repo.MyEnum\n\ted.L0.ParentFile = filedesc.SurrogateProto3\n\ted.L1.EditionFeatures = ed.L0.ParentFile.L1.EditionFeatures\n\ted.L2.Values.List = append(ed.L2.Values.List, filedesc.EnumValue{})\n\n\t// TODO: Use the presence of a UnmarshalJSON method to determine proto2?\n\n\tvd := &ed.L2.Values.List[0]\n\tvd.L0.FullName = ed.L0.FullName + \"_UNKNOWN\" // e.g., github_com.user.repo.MyEnum_UNKNOWN\n\tvd.L0.ParentFile = ed.L0.ParentFile\n\tvd.L0.Parent = ed\n\n\t// TODO: We could use the String method to obtain some enum value names by\n\t// starting at 0 and print the enum until it produces invalid identifiers.\n\t// An exhaustive query is clearly impractical, but can be best-effort.\n\n\tif ed, ok := aberrantEnumDescCache.LoadOrStore(t, ed); ok {\n\t\treturn ed.(protoreflect.EnumDescriptor)\n\t}\n\treturn ed\n}\n\n// AberrantDeriveFullName derives a fully qualified protobuf name for the given Go type\n// The provided name is not guaranteed to be stable nor universally unique.\n// It should be sufficiently unique within a program.\n//\n// This is exported for testing purposes.\nfunc AberrantDeriveFullName(t reflect.Type) protoreflect.FullName {\n\tsanitize := func(r rune) rune {\n\t\tswitch {\n\t\tcase r == '/':\n\t\t\treturn '.'\n\t\tcase 'a' <= r && r <= 'z', 'A' <= r && r <= 'Z', '0' <= r && r <= '9':\n\t\t\treturn r\n\t\tdefault:\n\t\t\treturn '_'\n\t\t}\n\t}\n\tprefix := strings.Map(sanitize, t.PkgPath())\n\tsuffix := strings.Map(sanitize, t.Name())\n\tif suffix == \"\" {\n\t\tsuffix = fmt.Sprintf(\"UnknownX%X\", reflect.ValueOf(t).Pointer())\n\t}\n\n\tss := append(strings.Split(prefix, \".\"), suffix)\n\tfor i, s := range ss {\n\t\tif s == \"\" || ('0' <= s[0] && s[0] <= '9') {\n\t\t\tss[i] = \"x\" + s\n\t\t}\n\t}\n\treturn protoreflect.FullName(strings.Join(ss, \".\"))\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/legacy_export.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 impl\n\nimport (\n\t\"encoding/binary\"\n\t\"encoding/json\"\n\t\"hash/crc32\"\n\t\"math\"\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\n// These functions exist to support exported APIs in generated protobufs.\n// While these are deprecated, they cannot be removed for compatibility reasons.\n\n// LegacyEnumName returns the name of enums used in legacy code.\nfunc (Export) LegacyEnumName(ed protoreflect.EnumDescriptor) string {\n\treturn legacyEnumName(ed)\n}\n\n// LegacyMessageTypeOf returns the protoreflect.MessageType for m,\n// with name used as the message name if necessary.\nfunc (Export) LegacyMessageTypeOf(m protoiface.MessageV1, name protoreflect.FullName) protoreflect.MessageType {\n\tif mv := (Export{}).protoMessageV2Of(m); mv != nil {\n\t\treturn mv.ProtoReflect().Type()\n\t}\n\treturn legacyLoadMessageType(reflect.TypeOf(m), name)\n}\n\n// UnmarshalJSONEnum unmarshals an enum from a JSON-encoded input.\n// The input can either be a string representing the enum value by name,\n// or a number representing the enum number itself.\nfunc (Export) UnmarshalJSONEnum(ed protoreflect.EnumDescriptor, b []byte) (protoreflect.EnumNumber, error) {\n\tif b[0] == '\"' {\n\t\tvar name protoreflect.Name\n\t\tif err := json.Unmarshal(b, &name); err != nil {\n\t\t\treturn 0, errors.New(\"invalid input for enum %v: %s\", ed.FullName(), b)\n\t\t}\n\t\tev := ed.Values().ByName(name)\n\t\tif ev == nil {\n\t\t\treturn 0, errors.New(\"invalid value for enum %v: %s\", ed.FullName(), name)\n\t\t}\n\t\treturn ev.Number(), nil\n\t} else {\n\t\tvar num protoreflect.EnumNumber\n\t\tif err := json.Unmarshal(b, &num); err != nil {\n\t\t\treturn 0, errors.New(\"invalid input for enum %v: %s\", ed.FullName(), b)\n\t\t}\n\t\treturn num, nil\n\t}\n}\n\n// CompressGZIP compresses the input as a GZIP-encoded file.\n// The current implementation does no compression.\nfunc (Export) CompressGZIP(in []byte) (out []byte) {\n\t// RFC 1952, section 2.3.1.\n\tvar gzipHeader = [10]byte{0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff}\n\n\t// RFC 1951, section 3.2.4.\n\tvar blockHeader [5]byte\n\tconst maxBlockSize = math.MaxUint16\n\tnumBlocks := 1 + len(in)/maxBlockSize\n\n\t// RFC 1952, section 2.3.1.\n\tvar gzipFooter [8]byte\n\tbinary.LittleEndian.PutUint32(gzipFooter[0:4], crc32.ChecksumIEEE(in))\n\tbinary.LittleEndian.PutUint32(gzipFooter[4:8], uint32(len(in)))\n\n\t// Encode the input without compression using raw DEFLATE blocks.\n\tout = make([]byte, 0, len(gzipHeader)+len(blockHeader)*numBlocks+len(in)+len(gzipFooter))\n\tout = append(out, gzipHeader[:]...)\n\tfor blockHeader[0] == 0 {\n\t\tblockSize := maxBlockSize\n\t\tif blockSize > len(in) {\n\t\t\tblockHeader[0] = 0x01 // final bit per RFC 1951, section 3.2.3.\n\t\t\tblockSize = len(in)\n\t\t}\n\t\tbinary.LittleEndian.PutUint16(blockHeader[1:3], uint16(blockSize))\n\t\tbinary.LittleEndian.PutUint16(blockHeader[3:5], ^uint16(blockSize))\n\t\tout = append(out, blockHeader[:]...)\n\t\tout = append(out, in[:blockSize]...)\n\t\tin = in[blockSize:]\n\t}\n\tout = append(out, gzipFooter[:]...)\n\treturn out\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/legacy_extension.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 impl\n\nimport (\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/internal/descopts\"\n\t\"google.golang.org/protobuf/internal/encoding/messageset\"\n\tptag \"google.golang.org/protobuf/internal/encoding/tag\"\n\t\"google.golang.org/protobuf/internal/filedesc\"\n\t\"google.golang.org/protobuf/internal/pragma\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/reflect/protoregistry\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\nfunc (xi *ExtensionInfo) initToLegacy() {\n\txd := xi.desc\n\tvar parent protoiface.MessageV1\n\tmessageName := xd.ContainingMessage().FullName()\n\tif mt, _ := protoregistry.GlobalTypes.FindMessageByName(messageName); mt != nil {\n\t\t// Create a new parent message and unwrap it if possible.\n\t\tmv := mt.New().Interface()\n\t\tt := reflect.TypeOf(mv)\n\t\tif mv, ok := mv.(unwrapper); ok {\n\t\t\tt = reflect.TypeOf(mv.protoUnwrap())\n\t\t}\n\n\t\t// Check whether the message implements the legacy v1 Message interface.\n\t\tmz := reflect.Zero(t).Interface()\n\t\tif mz, ok := mz.(protoiface.MessageV1); ok {\n\t\t\tparent = mz\n\t\t}\n\t}\n\n\t// Determine the v1 extension type, which is unfortunately not the same as\n\t// the v2 ExtensionType.GoType.\n\textType := xi.goType\n\tswitch extType.Kind() {\n\tcase reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String:\n\t\textType = reflect.PtrTo(extType) // T -> *T for singular scalar fields\n\t}\n\n\t// Reconstruct the legacy enum full name.\n\tvar enumName string\n\tif xd.Kind() == protoreflect.EnumKind {\n\t\tenumName = legacyEnumName(xd.Enum())\n\t}\n\n\t// Derive the proto file that the extension was declared within.\n\tvar filename string\n\tif fd := xd.ParentFile(); fd != nil {\n\t\tfilename = fd.Path()\n\t}\n\n\t// For MessageSet extensions, the name used is the parent message.\n\tname := xd.FullName()\n\tif messageset.IsMessageSetExtension(xd) {\n\t\tname = name.Parent()\n\t}\n\n\txi.ExtendedType = parent\n\txi.ExtensionType = reflect.Zero(extType).Interface()\n\txi.Field = int32(xd.Number())\n\txi.Name = string(name)\n\txi.Tag = ptag.Marshal(xd, enumName)\n\txi.Filename = filename\n}\n\n// initFromLegacy initializes an ExtensionInfo from\n// the contents of the deprecated exported fields of the type.\nfunc (xi *ExtensionInfo) initFromLegacy() {\n\t// The v1 API returns \"type incomplete\" descriptors where only the\n\t// field number is specified. In such a case, use a placeholder.\n\tif xi.ExtendedType == nil || xi.ExtensionType == nil {\n\t\txd := placeholderExtension{\n\t\t\tname:   protoreflect.FullName(xi.Name),\n\t\t\tnumber: protoreflect.FieldNumber(xi.Field),\n\t\t}\n\t\txi.desc = extensionTypeDescriptor{xd, xi}\n\t\treturn\n\t}\n\n\t// Resolve enum or message dependencies.\n\tvar ed protoreflect.EnumDescriptor\n\tvar md protoreflect.MessageDescriptor\n\tt := reflect.TypeOf(xi.ExtensionType)\n\tisOptional := t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct\n\tisRepeated := t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8\n\tif isOptional || isRepeated {\n\t\tt = t.Elem()\n\t}\n\tswitch v := reflect.Zero(t).Interface().(type) {\n\tcase protoreflect.Enum:\n\t\ted = v.Descriptor()\n\tcase enumV1:\n\t\ted = LegacyLoadEnumDesc(t)\n\tcase protoreflect.ProtoMessage:\n\t\tmd = v.ProtoReflect().Descriptor()\n\tcase messageV1:\n\t\tmd = LegacyLoadMessageDesc(t)\n\t}\n\n\t// Derive basic field information from the struct tag.\n\tvar evs protoreflect.EnumValueDescriptors\n\tif ed != nil {\n\t\tevs = ed.Values()\n\t}\n\tfd := ptag.Unmarshal(xi.Tag, t, evs).(*filedesc.Field)\n\n\t// Construct a v2 ExtensionType.\n\txd := &filedesc.Extension{L2: new(filedesc.ExtensionL2)}\n\txd.L0.ParentFile = filedesc.SurrogateProto2\n\txd.L0.FullName = protoreflect.FullName(xi.Name)\n\txd.L1.Number = protoreflect.FieldNumber(xi.Field)\n\txd.L1.Cardinality = fd.L1.Cardinality\n\txd.L1.Kind = fd.L1.Kind\n\txd.L1.EditionFeatures = fd.L1.EditionFeatures\n\txd.L2.Default = fd.L1.Default\n\txd.L1.Extendee = Export{}.MessageDescriptorOf(xi.ExtendedType)\n\txd.L2.Enum = ed\n\txd.L2.Message = md\n\n\t// Derive real extension field name for MessageSets.\n\tif messageset.IsMessageSet(xd.L1.Extendee) && md.FullName() == xd.L0.FullName {\n\t\txd.L0.FullName = xd.L0.FullName.Append(messageset.ExtensionName)\n\t}\n\n\ttt := reflect.TypeOf(xi.ExtensionType)\n\tif isOptional {\n\t\ttt = tt.Elem()\n\t}\n\txi.goType = tt\n\txi.desc = extensionTypeDescriptor{xd, xi}\n}\n\ntype placeholderExtension struct {\n\tname   protoreflect.FullName\n\tnumber protoreflect.FieldNumber\n}\n\nfunc (x placeholderExtension) ParentFile() protoreflect.FileDescriptor            { return nil }\nfunc (x placeholderExtension) Parent() protoreflect.Descriptor                    { return nil }\nfunc (x placeholderExtension) Index() int                                         { return 0 }\nfunc (x placeholderExtension) Syntax() protoreflect.Syntax                        { return 0 }\nfunc (x placeholderExtension) Name() protoreflect.Name                            { return x.name.Name() }\nfunc (x placeholderExtension) FullName() protoreflect.FullName                    { return x.name }\nfunc (x placeholderExtension) IsPlaceholder() bool                                { return true }\nfunc (x placeholderExtension) Options() protoreflect.ProtoMessage                 { return descopts.Field }\nfunc (x placeholderExtension) Number() protoreflect.FieldNumber                   { return x.number }\nfunc (x placeholderExtension) Cardinality() protoreflect.Cardinality              { return 0 }\nfunc (x placeholderExtension) Kind() protoreflect.Kind                            { return 0 }\nfunc (x placeholderExtension) HasJSONName() bool                                  { return false }\nfunc (x placeholderExtension) JSONName() string                                   { return \"[\" + string(x.name) + \"]\" }\nfunc (x placeholderExtension) TextName() string                                   { return \"[\" + string(x.name) + \"]\" }\nfunc (x placeholderExtension) HasPresence() bool                                  { return false }\nfunc (x placeholderExtension) HasOptionalKeyword() bool                           { return false }\nfunc (x placeholderExtension) IsExtension() bool                                  { return true }\nfunc (x placeholderExtension) IsWeak() bool                                       { return false }\nfunc (x placeholderExtension) IsLazy() bool                                       { return false }\nfunc (x placeholderExtension) IsPacked() bool                                     { return false }\nfunc (x placeholderExtension) IsList() bool                                       { return false }\nfunc (x placeholderExtension) IsMap() bool                                        { return false }\nfunc (x placeholderExtension) MapKey() protoreflect.FieldDescriptor               { return nil }\nfunc (x placeholderExtension) MapValue() protoreflect.FieldDescriptor             { return nil }\nfunc (x placeholderExtension) HasDefault() bool                                   { return false }\nfunc (x placeholderExtension) Default() protoreflect.Value                        { return protoreflect.Value{} }\nfunc (x placeholderExtension) DefaultEnumValue() protoreflect.EnumValueDescriptor { return nil }\nfunc (x placeholderExtension) ContainingOneof() protoreflect.OneofDescriptor      { return nil }\nfunc (x placeholderExtension) ContainingMessage() protoreflect.MessageDescriptor  { return nil }\nfunc (x placeholderExtension) Enum() protoreflect.EnumDescriptor                  { return nil }\nfunc (x placeholderExtension) Message() protoreflect.MessageDescriptor            { return nil }\nfunc (x placeholderExtension) ProtoType(protoreflect.FieldDescriptor)             { return }\nfunc (x placeholderExtension) ProtoInternal(pragma.DoNotImplement)                { return }\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/legacy_file.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 impl\n\nimport (\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"io\"\n\t\"sync\"\n\n\t\"google.golang.org/protobuf/internal/filedesc\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/reflect/protoregistry\"\n)\n\n// Every enum and message type generated by protoc-gen-go since commit 2fc053c5\n// on February 25th, 2016 has had a method to get the raw descriptor.\n// Types that were not generated by protoc-gen-go or were generated prior\n// to that version are not supported.\n//\n// The []byte returned is the encoded form of a FileDescriptorProto message\n// compressed using GZIP. The []int is the path from the top-level file\n// to the specific message or enum declaration.\ntype (\n\tenumV1 interface {\n\t\tEnumDescriptor() ([]byte, []int)\n\t}\n\tmessageV1 interface {\n\t\tDescriptor() ([]byte, []int)\n\t}\n)\n\nvar legacyFileDescCache sync.Map // map[*byte]protoreflect.FileDescriptor\n\n// legacyLoadFileDesc unmarshals b as a compressed FileDescriptorProto message.\n//\n// This assumes that b is immutable and that b does not refer to part of a\n// concatenated series of GZIP files (which would require shenanigans that\n// rely on the concatenation properties of both protobufs and GZIP).\n// File descriptors generated by protoc-gen-go do not rely on that property.\nfunc legacyLoadFileDesc(b []byte) protoreflect.FileDescriptor {\n\t// Fast-path: check whether we already have a cached file descriptor.\n\tif fd, ok := legacyFileDescCache.Load(&b[0]); ok {\n\t\treturn fd.(protoreflect.FileDescriptor)\n\t}\n\n\t// Slow-path: decompress and unmarshal the file descriptor proto.\n\tzr, err := gzip.NewReader(bytes.NewReader(b))\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tb2, err := io.ReadAll(zr)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfd := filedesc.Builder{\n\t\tRawDescriptor: b2,\n\t\tFileRegistry:  resolverOnly{protoregistry.GlobalFiles}, // do not register back to global registry\n\t}.Build().File\n\tif fd, ok := legacyFileDescCache.LoadOrStore(&b[0], fd); ok {\n\t\treturn fd.(protoreflect.FileDescriptor)\n\t}\n\treturn fd\n}\n\ntype resolverOnly struct {\n\treg *protoregistry.Files\n}\n\nfunc (r resolverOnly) FindFileByPath(path string) (protoreflect.FileDescriptor, error) {\n\treturn r.reg.FindFileByPath(path)\n}\nfunc (r resolverOnly) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error) {\n\treturn r.reg.FindDescriptorByName(name)\n}\nfunc (resolverOnly) RegisterFile(protoreflect.FileDescriptor) error {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/legacy_message.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 impl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"google.golang.org/protobuf/internal/descopts\"\n\tptag \"google.golang.org/protobuf/internal/encoding/tag\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/internal/filedesc\"\n\t\"google.golang.org/protobuf/internal/strs\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\n// legacyWrapMessage wraps v as a protoreflect.Message,\n// where v must be a *struct kind and not implement the v2 API already.\nfunc legacyWrapMessage(v reflect.Value) protoreflect.Message {\n\tt := v.Type()\n\tif t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct {\n\t\treturn aberrantMessage{v: v}\n\t}\n\tmt := legacyLoadMessageInfo(t, \"\")\n\treturn mt.MessageOf(v.Interface())\n}\n\n// legacyLoadMessageType dynamically loads a protoreflect.Type for t,\n// where t must be not implement the v2 API already.\n// The provided name is used if it cannot be determined from the message.\nfunc legacyLoadMessageType(t reflect.Type, name protoreflect.FullName) protoreflect.MessageType {\n\tif t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct {\n\t\treturn aberrantMessageType{t}\n\t}\n\treturn legacyLoadMessageInfo(t, name)\n}\n\nvar legacyMessageTypeCache sync.Map // map[reflect.Type]*MessageInfo\n\n// legacyLoadMessageInfo dynamically loads a *MessageInfo for t,\n// where t must be a *struct kind and not implement the v2 API already.\n// The provided name is used if it cannot be determined from the message.\nfunc legacyLoadMessageInfo(t reflect.Type, name protoreflect.FullName) *MessageInfo {\n\t// Fast-path: check if a MessageInfo is cached for this concrete type.\n\tif mt, ok := legacyMessageTypeCache.Load(t); ok {\n\t\treturn mt.(*MessageInfo)\n\t}\n\n\t// Slow-path: derive message descriptor and initialize MessageInfo.\n\tmi := &MessageInfo{\n\t\tDesc:          legacyLoadMessageDesc(t, name),\n\t\tGoReflectType: t,\n\t}\n\n\tvar hasMarshal, hasUnmarshal bool\n\tv := reflect.Zero(t).Interface()\n\tif _, hasMarshal = v.(legacyMarshaler); hasMarshal {\n\t\tmi.methods.Marshal = legacyMarshal\n\n\t\t// We have no way to tell whether the type's Marshal method\n\t\t// supports deterministic serialization or not, but this\n\t\t// preserves the v1 implementation's behavior of always\n\t\t// calling Marshal methods when present.\n\t\tmi.methods.Flags |= protoiface.SupportMarshalDeterministic\n\t}\n\tif _, hasUnmarshal = v.(legacyUnmarshaler); hasUnmarshal {\n\t\tmi.methods.Unmarshal = legacyUnmarshal\n\t}\n\tif _, hasMerge := v.(legacyMerger); hasMerge || (hasMarshal && hasUnmarshal) {\n\t\tmi.methods.Merge = legacyMerge\n\t}\n\n\tif mi, ok := legacyMessageTypeCache.LoadOrStore(t, mi); ok {\n\t\treturn mi.(*MessageInfo)\n\t}\n\treturn mi\n}\n\nvar legacyMessageDescCache sync.Map // map[reflect.Type]protoreflect.MessageDescriptor\n\n// LegacyLoadMessageDesc returns an MessageDescriptor derived from the Go type,\n// which should be a *struct kind and must not implement the v2 API already.\n//\n// This is exported for testing purposes.\nfunc LegacyLoadMessageDesc(t reflect.Type) protoreflect.MessageDescriptor {\n\treturn legacyLoadMessageDesc(t, \"\")\n}\nfunc legacyLoadMessageDesc(t reflect.Type, name protoreflect.FullName) protoreflect.MessageDescriptor {\n\t// Fast-path: check if a MessageDescriptor is cached for this concrete type.\n\tif mi, ok := legacyMessageDescCache.Load(t); ok {\n\t\treturn mi.(protoreflect.MessageDescriptor)\n\t}\n\n\t// Slow-path: initialize MessageDescriptor from the raw descriptor.\n\tmv := reflect.Zero(t).Interface()\n\tif _, ok := mv.(protoreflect.ProtoMessage); ok {\n\t\tpanic(fmt.Sprintf(\"%v already implements proto.Message\", t))\n\t}\n\tmdV1, ok := mv.(messageV1)\n\tif !ok {\n\t\treturn aberrantLoadMessageDesc(t, name)\n\t}\n\n\t// If this is a dynamic message type where there isn't a 1-1 mapping between\n\t// Go and protobuf types, calling the Descriptor method on the zero value of\n\t// the message type isn't likely to work. If it panics, swallow the panic and\n\t// continue as if the Descriptor method wasn't present.\n\tb, idxs := func() ([]byte, []int) {\n\t\tdefer func() {\n\t\t\trecover()\n\t\t}()\n\t\treturn mdV1.Descriptor()\n\t}()\n\tif b == nil {\n\t\treturn aberrantLoadMessageDesc(t, name)\n\t}\n\n\t// If the Go type has no fields, then this might be a proto3 empty message\n\t// from before the size cache was added. If there are any fields, check to\n\t// see that at least one of them looks like something we generated.\n\tif t.Elem().Kind() == reflect.Struct {\n\t\tif nfield := t.Elem().NumField(); nfield > 0 {\n\t\t\thasProtoField := false\n\t\t\tfor i := 0; i < nfield; i++ {\n\t\t\t\tf := t.Elem().Field(i)\n\t\t\t\tif f.Tag.Get(\"protobuf\") != \"\" || f.Tag.Get(\"protobuf_oneof\") != \"\" || strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\t\t\thasProtoField = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !hasProtoField {\n\t\t\t\treturn aberrantLoadMessageDesc(t, name)\n\t\t\t}\n\t\t}\n\t}\n\n\tmd := legacyLoadFileDesc(b).Messages().Get(idxs[0])\n\tfor _, i := range idxs[1:] {\n\t\tmd = md.Messages().Get(i)\n\t}\n\tif name != \"\" && md.FullName() != name {\n\t\tpanic(fmt.Sprintf(\"mismatching message name: got %v, want %v\", md.FullName(), name))\n\t}\n\tif md, ok := legacyMessageDescCache.LoadOrStore(t, md); ok {\n\t\treturn md.(protoreflect.MessageDescriptor)\n\t}\n\treturn md\n}\n\nvar (\n\taberrantMessageDescLock  sync.Mutex\n\taberrantMessageDescCache map[reflect.Type]protoreflect.MessageDescriptor\n)\n\n// aberrantLoadMessageDesc returns an MessageDescriptor derived from the Go type,\n// which must not implement protoreflect.ProtoMessage or messageV1.\n//\n// This is a best-effort derivation of the message descriptor using the protobuf\n// tags on the struct fields.\nfunc aberrantLoadMessageDesc(t reflect.Type, name protoreflect.FullName) protoreflect.MessageDescriptor {\n\taberrantMessageDescLock.Lock()\n\tdefer aberrantMessageDescLock.Unlock()\n\tif aberrantMessageDescCache == nil {\n\t\taberrantMessageDescCache = make(map[reflect.Type]protoreflect.MessageDescriptor)\n\t}\n\treturn aberrantLoadMessageDescReentrant(t, name)\n}\nfunc aberrantLoadMessageDescReentrant(t reflect.Type, name protoreflect.FullName) protoreflect.MessageDescriptor {\n\t// Fast-path: check if an MessageDescriptor is cached for this concrete type.\n\tif md, ok := aberrantMessageDescCache[t]; ok {\n\t\treturn md\n\t}\n\n\t// Slow-path: construct a descriptor from the Go struct type (best-effort).\n\t// Cache the MessageDescriptor early on so that we can resolve internal\n\t// cyclic references.\n\tmd := &filedesc.Message{L2: new(filedesc.MessageL2)}\n\tmd.L0.FullName = aberrantDeriveMessageName(t, name)\n\tmd.L0.ParentFile = filedesc.SurrogateProto2\n\taberrantMessageDescCache[t] = md\n\n\tif t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct {\n\t\treturn md\n\t}\n\n\t// Try to determine if the message is using proto3 by checking scalars.\n\tfor i := 0; i < t.Elem().NumField(); i++ {\n\t\tf := t.Elem().Field(i)\n\t\tif tag := f.Tag.Get(\"protobuf\"); tag != \"\" {\n\t\t\tswitch f.Type.Kind() {\n\t\t\tcase reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String:\n\t\t\t\tmd.L0.ParentFile = filedesc.SurrogateProto3\n\t\t\t}\n\t\t\tfor _, s := range strings.Split(tag, \",\") {\n\t\t\t\tif s == \"proto3\" {\n\t\t\t\t\tmd.L0.ParentFile = filedesc.SurrogateProto3\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tmd.L1.EditionFeatures = md.L0.ParentFile.L1.EditionFeatures\n\t// Obtain a list of oneof wrapper types.\n\tvar oneofWrappers []reflect.Type\n\tmethods := make([]reflect.Method, 0, 2)\n\tif m, ok := t.MethodByName(\"XXX_OneofFuncs\"); ok {\n\t\tmethods = append(methods, m)\n\t}\n\tif m, ok := t.MethodByName(\"XXX_OneofWrappers\"); ok {\n\t\tmethods = append(methods, m)\n\t}\n\tfor _, fn := range methods {\n\t\tfor _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) {\n\t\t\tif vs, ok := v.Interface().([]any); ok {\n\t\t\t\tfor _, v := range vs {\n\t\t\t\t\toneofWrappers = append(oneofWrappers, reflect.TypeOf(v))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Obtain a list of the extension ranges.\n\tif fn, ok := t.MethodByName(\"ExtensionRangeArray\"); ok {\n\t\tvs := fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))})[0]\n\t\tfor i := 0; i < vs.Len(); i++ {\n\t\t\tv := vs.Index(i)\n\t\t\tmd.L2.ExtensionRanges.List = append(md.L2.ExtensionRanges.List, [2]protoreflect.FieldNumber{\n\t\t\t\tprotoreflect.FieldNumber(v.FieldByName(\"Start\").Int()),\n\t\t\t\tprotoreflect.FieldNumber(v.FieldByName(\"End\").Int() + 1),\n\t\t\t})\n\t\t\tmd.L2.ExtensionRangeOptions = append(md.L2.ExtensionRangeOptions, nil)\n\t\t}\n\t}\n\n\t// Derive the message fields by inspecting the struct fields.\n\tfor i := 0; i < t.Elem().NumField(); i++ {\n\t\tf := t.Elem().Field(i)\n\t\tif tag := f.Tag.Get(\"protobuf\"); tag != \"\" {\n\t\t\ttagKey := f.Tag.Get(\"protobuf_key\")\n\t\t\ttagVal := f.Tag.Get(\"protobuf_val\")\n\t\t\taberrantAppendField(md, f.Type, tag, tagKey, tagVal)\n\t\t}\n\t\tif tag := f.Tag.Get(\"protobuf_oneof\"); tag != \"\" {\n\t\t\tn := len(md.L2.Oneofs.List)\n\t\t\tmd.L2.Oneofs.List = append(md.L2.Oneofs.List, filedesc.Oneof{})\n\t\t\tod := &md.L2.Oneofs.List[n]\n\t\t\tod.L0.FullName = md.FullName().Append(protoreflect.Name(tag))\n\t\t\tod.L0.ParentFile = md.L0.ParentFile\n\t\t\tod.L1.EditionFeatures = md.L1.EditionFeatures\n\t\t\tod.L0.Parent = md\n\t\t\tod.L0.Index = n\n\n\t\t\tfor _, t := range oneofWrappers {\n\t\t\t\tif t.Implements(f.Type) {\n\t\t\t\t\tf := t.Elem().Field(0)\n\t\t\t\t\tif tag := f.Tag.Get(\"protobuf\"); tag != \"\" {\n\t\t\t\t\t\taberrantAppendField(md, f.Type, tag, \"\", \"\")\n\t\t\t\t\t\tfd := &md.L2.Fields.List[len(md.L2.Fields.List)-1]\n\t\t\t\t\t\tfd.L1.ContainingOneof = od\n\t\t\t\t\t\tfd.L1.EditionFeatures = od.L1.EditionFeatures\n\t\t\t\t\t\tod.L1.Fields.List = append(od.L1.Fields.List, fd)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn md\n}\n\nfunc aberrantDeriveMessageName(t reflect.Type, name protoreflect.FullName) protoreflect.FullName {\n\tif name.IsValid() {\n\t\treturn name\n\t}\n\tfunc() {\n\t\tdefer func() { recover() }() // swallow possible nil panics\n\t\tif m, ok := reflect.Zero(t).Interface().(interface{ XXX_MessageName() string }); ok {\n\t\t\tname = protoreflect.FullName(m.XXX_MessageName())\n\t\t}\n\t}()\n\tif name.IsValid() {\n\t\treturn name\n\t}\n\tif t.Kind() == reflect.Ptr {\n\t\tt = t.Elem()\n\t}\n\treturn AberrantDeriveFullName(t)\n}\n\nfunc aberrantAppendField(md *filedesc.Message, goType reflect.Type, tag, tagKey, tagVal string) {\n\tt := goType\n\tisOptional := t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct\n\tisRepeated := t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8\n\tif isOptional || isRepeated {\n\t\tt = t.Elem()\n\t}\n\tfd := ptag.Unmarshal(tag, t, placeholderEnumValues{}).(*filedesc.Field)\n\n\t// Append field descriptor to the message.\n\tn := len(md.L2.Fields.List)\n\tmd.L2.Fields.List = append(md.L2.Fields.List, *fd)\n\tfd = &md.L2.Fields.List[n]\n\tfd.L0.FullName = md.FullName().Append(fd.Name())\n\tfd.L0.ParentFile = md.L0.ParentFile\n\tfd.L0.Parent = md\n\tfd.L0.Index = n\n\n\tif fd.L1.EditionFeatures.IsPacked {\n\t\tfd.L1.Options = func() protoreflect.ProtoMessage {\n\t\t\topts := descopts.Field.ProtoReflect().New()\n\t\t\tif fd.L1.EditionFeatures.IsPacked {\n\t\t\t\topts.Set(opts.Descriptor().Fields().ByName(\"packed\"), protoreflect.ValueOfBool(fd.L1.EditionFeatures.IsPacked))\n\t\t\t}\n\t\t\treturn opts.Interface()\n\t\t}\n\t}\n\n\t// Populate Enum and Message.\n\tif fd.Enum() == nil && fd.Kind() == protoreflect.EnumKind {\n\t\tswitch v := reflect.Zero(t).Interface().(type) {\n\t\tcase protoreflect.Enum:\n\t\t\tfd.L1.Enum = v.Descriptor()\n\t\tdefault:\n\t\t\tfd.L1.Enum = LegacyLoadEnumDesc(t)\n\t\t}\n\t}\n\tif fd.Message() == nil && (fd.Kind() == protoreflect.MessageKind || fd.Kind() == protoreflect.GroupKind) {\n\t\tswitch v := reflect.Zero(t).Interface().(type) {\n\t\tcase protoreflect.ProtoMessage:\n\t\t\tfd.L1.Message = v.ProtoReflect().Descriptor()\n\t\tcase messageV1:\n\t\t\tfd.L1.Message = LegacyLoadMessageDesc(t)\n\t\tdefault:\n\t\t\tif t.Kind() == reflect.Map {\n\t\t\t\tn := len(md.L1.Messages.List)\n\t\t\t\tmd.L1.Messages.List = append(md.L1.Messages.List, filedesc.Message{L2: new(filedesc.MessageL2)})\n\t\t\t\tmd2 := &md.L1.Messages.List[n]\n\t\t\t\tmd2.L0.FullName = md.FullName().Append(protoreflect.Name(strs.MapEntryName(string(fd.Name()))))\n\t\t\t\tmd2.L0.ParentFile = md.L0.ParentFile\n\t\t\t\tmd2.L0.Parent = md\n\t\t\t\tmd2.L0.Index = n\n\t\t\t\tmd2.L1.EditionFeatures = md.L1.EditionFeatures\n\n\t\t\t\tmd2.L1.IsMapEntry = true\n\t\t\t\tmd2.L2.Options = func() protoreflect.ProtoMessage {\n\t\t\t\t\topts := descopts.Message.ProtoReflect().New()\n\t\t\t\t\topts.Set(opts.Descriptor().Fields().ByName(\"map_entry\"), protoreflect.ValueOfBool(true))\n\t\t\t\t\treturn opts.Interface()\n\t\t\t\t}\n\n\t\t\t\taberrantAppendField(md2, t.Key(), tagKey, \"\", \"\")\n\t\t\t\taberrantAppendField(md2, t.Elem(), tagVal, \"\", \"\")\n\n\t\t\t\tfd.L1.Message = md2\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tfd.L1.Message = aberrantLoadMessageDescReentrant(t, \"\")\n\t\t}\n\t}\n}\n\ntype placeholderEnumValues struct {\n\tprotoreflect.EnumValueDescriptors\n}\n\nfunc (placeholderEnumValues) ByNumber(n protoreflect.EnumNumber) protoreflect.EnumValueDescriptor {\n\treturn filedesc.PlaceholderEnumValue(protoreflect.FullName(fmt.Sprintf(\"UNKNOWN_%d\", n)))\n}\n\n// legacyMarshaler is the proto.Marshaler interface superseded by protoiface.Methoder.\ntype legacyMarshaler interface {\n\tMarshal() ([]byte, error)\n}\n\n// legacyUnmarshaler is the proto.Unmarshaler interface superseded by protoiface.Methoder.\ntype legacyUnmarshaler interface {\n\tUnmarshal([]byte) error\n}\n\n// legacyMerger is the proto.Merger interface superseded by protoiface.Methoder.\ntype legacyMerger interface {\n\tMerge(protoiface.MessageV1)\n}\n\nvar aberrantProtoMethods = &protoiface.Methods{\n\tMarshal:   legacyMarshal,\n\tUnmarshal: legacyUnmarshal,\n\tMerge:     legacyMerge,\n\n\t// We have no way to tell whether the type's Marshal method\n\t// supports deterministic serialization or not, but this\n\t// preserves the v1 implementation's behavior of always\n\t// calling Marshal methods when present.\n\tFlags: protoiface.SupportMarshalDeterministic,\n}\n\nfunc legacyMarshal(in protoiface.MarshalInput) (protoiface.MarshalOutput, error) {\n\tv := in.Message.(unwrapper).protoUnwrap()\n\tmarshaler, ok := v.(legacyMarshaler)\n\tif !ok {\n\t\treturn protoiface.MarshalOutput{}, errors.New(\"%T does not implement Marshal\", v)\n\t}\n\tout, err := marshaler.Marshal()\n\tif in.Buf != nil {\n\t\tout = append(in.Buf, out...)\n\t}\n\treturn protoiface.MarshalOutput{\n\t\tBuf: out,\n\t}, err\n}\n\nfunc legacyUnmarshal(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {\n\tv := in.Message.(unwrapper).protoUnwrap()\n\tunmarshaler, ok := v.(legacyUnmarshaler)\n\tif !ok {\n\t\treturn protoiface.UnmarshalOutput{}, errors.New(\"%T does not implement Unmarshal\", v)\n\t}\n\treturn protoiface.UnmarshalOutput{}, unmarshaler.Unmarshal(in.Buf)\n}\n\nfunc legacyMerge(in protoiface.MergeInput) protoiface.MergeOutput {\n\t// Check whether this supports the legacy merger.\n\tdstv := in.Destination.(unwrapper).protoUnwrap()\n\tmerger, ok := dstv.(legacyMerger)\n\tif ok {\n\t\tmerger.Merge(Export{}.ProtoMessageV1Of(in.Source))\n\t\treturn protoiface.MergeOutput{Flags: protoiface.MergeComplete}\n\t}\n\n\t// If legacy merger is unavailable, implement merge in terms of\n\t// a marshal and unmarshal operation.\n\tsrcv := in.Source.(unwrapper).protoUnwrap()\n\tmarshaler, ok := srcv.(legacyMarshaler)\n\tif !ok {\n\t\treturn protoiface.MergeOutput{}\n\t}\n\tdstv = in.Destination.(unwrapper).protoUnwrap()\n\tunmarshaler, ok := dstv.(legacyUnmarshaler)\n\tif !ok {\n\t\treturn protoiface.MergeOutput{}\n\t}\n\tif !in.Source.IsValid() {\n\t\t// Legacy Marshal methods may not function on nil messages.\n\t\t// Check for a typed nil source only after we confirm that\n\t\t// legacy Marshal/Unmarshal methods are present, for\n\t\t// consistency.\n\t\treturn protoiface.MergeOutput{Flags: protoiface.MergeComplete}\n\t}\n\tb, err := marshaler.Marshal()\n\tif err != nil {\n\t\treturn protoiface.MergeOutput{}\n\t}\n\terr = unmarshaler.Unmarshal(b)\n\tif err != nil {\n\t\treturn protoiface.MergeOutput{}\n\t}\n\treturn protoiface.MergeOutput{Flags: protoiface.MergeComplete}\n}\n\n// aberrantMessageType implements MessageType for all types other than pointer-to-struct.\ntype aberrantMessageType struct {\n\tt reflect.Type\n}\n\nfunc (mt aberrantMessageType) New() protoreflect.Message {\n\tif mt.t.Kind() == reflect.Ptr {\n\t\treturn aberrantMessage{reflect.New(mt.t.Elem())}\n\t}\n\treturn aberrantMessage{reflect.Zero(mt.t)}\n}\nfunc (mt aberrantMessageType) Zero() protoreflect.Message {\n\treturn aberrantMessage{reflect.Zero(mt.t)}\n}\nfunc (mt aberrantMessageType) GoType() reflect.Type {\n\treturn mt.t\n}\nfunc (mt aberrantMessageType) Descriptor() protoreflect.MessageDescriptor {\n\treturn LegacyLoadMessageDesc(mt.t)\n}\n\n// aberrantMessage implements Message for all types other than pointer-to-struct.\n//\n// When the underlying type implements legacyMarshaler or legacyUnmarshaler,\n// the aberrant Message can be marshaled or unmarshaled. Otherwise, there is\n// not much that can be done with values of this type.\ntype aberrantMessage struct {\n\tv reflect.Value\n}\n\n// Reset implements the v1 proto.Message.Reset method.\nfunc (m aberrantMessage) Reset() {\n\tif mr, ok := m.v.Interface().(interface{ Reset() }); ok {\n\t\tmr.Reset()\n\t\treturn\n\t}\n\tif m.v.Kind() == reflect.Ptr && !m.v.IsNil() {\n\t\tm.v.Elem().Set(reflect.Zero(m.v.Type().Elem()))\n\t}\n}\n\nfunc (m aberrantMessage) ProtoReflect() protoreflect.Message {\n\treturn m\n}\n\nfunc (m aberrantMessage) Descriptor() protoreflect.MessageDescriptor {\n\treturn LegacyLoadMessageDesc(m.v.Type())\n}\nfunc (m aberrantMessage) Type() protoreflect.MessageType {\n\treturn aberrantMessageType{m.v.Type()}\n}\nfunc (m aberrantMessage) New() protoreflect.Message {\n\tif m.v.Type().Kind() == reflect.Ptr {\n\t\treturn aberrantMessage{reflect.New(m.v.Type().Elem())}\n\t}\n\treturn aberrantMessage{reflect.Zero(m.v.Type())}\n}\nfunc (m aberrantMessage) Interface() protoreflect.ProtoMessage {\n\treturn m\n}\nfunc (m aberrantMessage) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {\n\treturn\n}\nfunc (m aberrantMessage) Has(protoreflect.FieldDescriptor) bool {\n\treturn false\n}\nfunc (m aberrantMessage) Clear(protoreflect.FieldDescriptor) {\n\tpanic(\"invalid Message.Clear on \" + string(m.Descriptor().FullName()))\n}\nfunc (m aberrantMessage) Get(fd protoreflect.FieldDescriptor) protoreflect.Value {\n\tif fd.Default().IsValid() {\n\t\treturn fd.Default()\n\t}\n\tpanic(\"invalid Message.Get on \" + string(m.Descriptor().FullName()))\n}\nfunc (m aberrantMessage) Set(protoreflect.FieldDescriptor, protoreflect.Value) {\n\tpanic(\"invalid Message.Set on \" + string(m.Descriptor().FullName()))\n}\nfunc (m aberrantMessage) Mutable(protoreflect.FieldDescriptor) protoreflect.Value {\n\tpanic(\"invalid Message.Mutable on \" + string(m.Descriptor().FullName()))\n}\nfunc (m aberrantMessage) NewField(protoreflect.FieldDescriptor) protoreflect.Value {\n\tpanic(\"invalid Message.NewField on \" + string(m.Descriptor().FullName()))\n}\nfunc (m aberrantMessage) WhichOneof(protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {\n\tpanic(\"invalid Message.WhichOneof descriptor on \" + string(m.Descriptor().FullName()))\n}\nfunc (m aberrantMessage) GetUnknown() protoreflect.RawFields {\n\treturn nil\n}\nfunc (m aberrantMessage) SetUnknown(protoreflect.RawFields) {\n\t// SetUnknown discards its input on messages which don't support unknown field storage.\n}\nfunc (m aberrantMessage) IsValid() bool {\n\tif m.v.Kind() == reflect.Ptr {\n\t\treturn !m.v.IsNil()\n\t}\n\treturn false\n}\nfunc (m aberrantMessage) ProtoMethods() *protoiface.Methods {\n\treturn aberrantProtoMethods\n}\nfunc (m aberrantMessage) protoUnwrap() any {\n\treturn m.v.Interface()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/merge.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 impl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/proto\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\ntype mergeOptions struct{}\n\nfunc (o mergeOptions) Merge(dst, src proto.Message) {\n\tproto.Merge(dst, src)\n}\n\n// merge is protoreflect.Methods.Merge.\nfunc (mi *MessageInfo) merge(in protoiface.MergeInput) protoiface.MergeOutput {\n\tdp, ok := mi.getPointer(in.Destination)\n\tif !ok {\n\t\treturn protoiface.MergeOutput{}\n\t}\n\tsp, ok := mi.getPointer(in.Source)\n\tif !ok {\n\t\treturn protoiface.MergeOutput{}\n\t}\n\tmi.mergePointer(dp, sp, mergeOptions{})\n\treturn protoiface.MergeOutput{Flags: protoiface.MergeComplete}\n}\n\nfunc (mi *MessageInfo) mergePointer(dst, src pointer, opts mergeOptions) {\n\tmi.init()\n\tif dst.IsNil() {\n\t\tpanic(fmt.Sprintf(\"invalid value: merging into nil message\"))\n\t}\n\tif src.IsNil() {\n\t\treturn\n\t}\n\n\tvar presenceSrc presence\n\tvar presenceDst presence\n\tif mi.presenceOffset.IsValid() {\n\t\tpresenceSrc = src.Apply(mi.presenceOffset).PresenceInfo()\n\t\tpresenceDst = dst.Apply(mi.presenceOffset).PresenceInfo()\n\t}\n\n\tfor _, f := range mi.orderedCoderFields {\n\t\tif f.funcs.merge == nil {\n\t\t\tcontinue\n\t\t}\n\t\tsfptr := src.Apply(f.offset)\n\n\t\tif f.presenceIndex != noPresence {\n\t\t\tif !presenceSrc.Present(f.presenceIndex) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tdfptr := dst.Apply(f.offset)\n\t\t\tif f.isLazy {\n\t\t\t\tif sfptr.AtomicGetPointer().IsNil() {\n\t\t\t\t\tmi.lazyUnmarshal(src, f.num)\n\t\t\t\t}\n\t\t\t\tif presenceDst.Present(f.presenceIndex) && dfptr.AtomicGetPointer().IsNil() {\n\t\t\t\t\tmi.lazyUnmarshal(dst, f.num)\n\t\t\t\t}\n\t\t\t}\n\t\t\tf.funcs.merge(dst.Apply(f.offset), sfptr, f, opts)\n\t\t\tpresenceDst.SetPresentUnatomic(f.presenceIndex, mi.presenceSize)\n\t\t\tcontinue\n\t\t}\n\n\t\tif f.isPointer && sfptr.Elem().IsNil() {\n\t\t\tcontinue\n\t\t}\n\t\tf.funcs.merge(dst.Apply(f.offset), sfptr, f, opts)\n\t}\n\tif mi.extensionOffset.IsValid() {\n\t\tsext := src.Apply(mi.extensionOffset).Extensions()\n\t\tdext := dst.Apply(mi.extensionOffset).Extensions()\n\t\tif *dext == nil {\n\t\t\t*dext = make(map[int32]ExtensionField)\n\t\t}\n\t\tfor num, sx := range *sext {\n\t\t\txt := sx.Type()\n\t\t\txi := getExtensionFieldInfo(xt)\n\t\t\tif xi.funcs.merge == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tdx := (*dext)[num]\n\t\t\tvar dv protoreflect.Value\n\t\t\tif dx.Type() == sx.Type() {\n\t\t\t\tdv = dx.Value()\n\t\t\t}\n\t\t\tif !dv.IsValid() && xi.unmarshalNeedsValue {\n\t\t\t\tdv = xt.New()\n\t\t\t}\n\t\t\tdv = xi.funcs.merge(dv, sx.Value(), opts)\n\t\t\tdx.Set(sx.Type(), dv)\n\t\t\t(*dext)[num] = dx\n\t\t}\n\t}\n\tif mi.unknownOffset.IsValid() {\n\t\tsu := mi.getUnknownBytes(src)\n\t\tif su != nil && len(*su) > 0 {\n\t\t\tdu := mi.mutableUnknownBytes(dst)\n\t\t\t*du = append(*du, *su...)\n\t\t}\n\t}\n}\n\nfunc mergeScalarValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {\n\treturn src\n}\n\nfunc mergeBytesValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {\n\treturn protoreflect.ValueOfBytes(append(emptyBuf[:], src.Bytes()...))\n}\n\nfunc mergeListValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {\n\tdstl := dst.List()\n\tsrcl := src.List()\n\tfor i, llen := 0, srcl.Len(); i < llen; i++ {\n\t\tdstl.Append(srcl.Get(i))\n\t}\n\treturn dst\n}\n\nfunc mergeBytesListValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {\n\tdstl := dst.List()\n\tsrcl := src.List()\n\tfor i, llen := 0, srcl.Len(); i < llen; i++ {\n\t\tsb := srcl.Get(i).Bytes()\n\t\tdb := append(emptyBuf[:], sb...)\n\t\tdstl.Append(protoreflect.ValueOfBytes(db))\n\t}\n\treturn dst\n}\n\nfunc mergeMessageListValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {\n\tdstl := dst.List()\n\tsrcl := src.List()\n\tfor i, llen := 0, srcl.Len(); i < llen; i++ {\n\t\tsm := srcl.Get(i).Message()\n\t\tdm := proto.Clone(sm.Interface()).ProtoReflect()\n\t\tdstl.Append(protoreflect.ValueOfMessage(dm))\n\t}\n\treturn dst\n}\n\nfunc mergeMessageValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value {\n\topts.Merge(dst.Message().Interface(), src.Message().Interface())\n\treturn dst\n}\n\nfunc mergeMessage(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {\n\tif f.mi != nil {\n\t\tif dst.Elem().IsNil() {\n\t\t\tdst.SetPointer(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())))\n\t\t}\n\t\tf.mi.mergePointer(dst.Elem(), src.Elem(), opts)\n\t} else {\n\t\tdm := dst.AsValueOf(f.ft).Elem()\n\t\tsm := src.AsValueOf(f.ft).Elem()\n\t\tif dm.IsNil() {\n\t\t\tdm.Set(reflect.New(f.ft.Elem()))\n\t\t}\n\t\topts.Merge(asMessage(dm), asMessage(sm))\n\t}\n}\n\nfunc mergeMessageSlice(dst, src pointer, f *coderFieldInfo, opts mergeOptions) {\n\tfor _, sp := range src.PointerSlice() {\n\t\tdm := reflect.New(f.ft.Elem().Elem())\n\t\tif f.mi != nil {\n\t\t\tf.mi.mergePointer(pointerOfValue(dm), sp, opts)\n\t\t} else {\n\t\t\topts.Merge(asMessage(dm), asMessage(sp.AsValueOf(f.ft.Elem().Elem())))\n\t\t}\n\t\tdst.AppendPointerSlice(pointerOfValue(dm))\n\t}\n}\n\nfunc mergeBytes(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\t*dst.Bytes() = append(emptyBuf[:], *src.Bytes()...)\n}\n\nfunc mergeBytesNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tv := *src.Bytes()\n\tif len(v) > 0 {\n\t\t*dst.Bytes() = append(emptyBuf[:], v...)\n\t}\n}\n\nfunc mergeBytesSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tds := dst.BytesSlice()\n\tfor _, v := range *src.BytesSlice() {\n\t\t*ds = append(*ds, append(emptyBuf[:], v...))\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/merge_gen.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 generated by generate-types. DO NOT EDIT.\n\npackage impl\n\nimport ()\n\nfunc mergeBool(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\t*dst.Bool() = *src.Bool()\n}\n\nfunc mergeBoolNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tv := *src.Bool()\n\tif v != false {\n\t\t*dst.Bool() = v\n\t}\n}\n\nfunc mergeBoolPtr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tp := *src.BoolPtr()\n\tif p != nil {\n\t\tv := *p\n\t\t*dst.BoolPtr() = &v\n\t}\n}\n\nfunc mergeBoolSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tds := dst.BoolSlice()\n\tss := src.BoolSlice()\n\t*ds = append(*ds, *ss...)\n}\n\nfunc mergeInt32(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\t*dst.Int32() = *src.Int32()\n}\n\nfunc mergeInt32NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tv := *src.Int32()\n\tif v != 0 {\n\t\t*dst.Int32() = v\n\t}\n}\n\nfunc mergeInt32Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tp := *src.Int32Ptr()\n\tif p != nil {\n\t\tv := *p\n\t\t*dst.Int32Ptr() = &v\n\t}\n}\n\nfunc mergeInt32Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tds := dst.Int32Slice()\n\tss := src.Int32Slice()\n\t*ds = append(*ds, *ss...)\n}\n\nfunc mergeUint32(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\t*dst.Uint32() = *src.Uint32()\n}\n\nfunc mergeUint32NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tv := *src.Uint32()\n\tif v != 0 {\n\t\t*dst.Uint32() = v\n\t}\n}\n\nfunc mergeUint32Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tp := *src.Uint32Ptr()\n\tif p != nil {\n\t\tv := *p\n\t\t*dst.Uint32Ptr() = &v\n\t}\n}\n\nfunc mergeUint32Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tds := dst.Uint32Slice()\n\tss := src.Uint32Slice()\n\t*ds = append(*ds, *ss...)\n}\n\nfunc mergeInt64(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\t*dst.Int64() = *src.Int64()\n}\n\nfunc mergeInt64NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tv := *src.Int64()\n\tif v != 0 {\n\t\t*dst.Int64() = v\n\t}\n}\n\nfunc mergeInt64Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tp := *src.Int64Ptr()\n\tif p != nil {\n\t\tv := *p\n\t\t*dst.Int64Ptr() = &v\n\t}\n}\n\nfunc mergeInt64Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tds := dst.Int64Slice()\n\tss := src.Int64Slice()\n\t*ds = append(*ds, *ss...)\n}\n\nfunc mergeUint64(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\t*dst.Uint64() = *src.Uint64()\n}\n\nfunc mergeUint64NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tv := *src.Uint64()\n\tif v != 0 {\n\t\t*dst.Uint64() = v\n\t}\n}\n\nfunc mergeUint64Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tp := *src.Uint64Ptr()\n\tif p != nil {\n\t\tv := *p\n\t\t*dst.Uint64Ptr() = &v\n\t}\n}\n\nfunc mergeUint64Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tds := dst.Uint64Slice()\n\tss := src.Uint64Slice()\n\t*ds = append(*ds, *ss...)\n}\n\nfunc mergeFloat32(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\t*dst.Float32() = *src.Float32()\n}\n\nfunc mergeFloat32NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tv := *src.Float32()\n\tif v != 0 {\n\t\t*dst.Float32() = v\n\t}\n}\n\nfunc mergeFloat32Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tp := *src.Float32Ptr()\n\tif p != nil {\n\t\tv := *p\n\t\t*dst.Float32Ptr() = &v\n\t}\n}\n\nfunc mergeFloat32Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tds := dst.Float32Slice()\n\tss := src.Float32Slice()\n\t*ds = append(*ds, *ss...)\n}\n\nfunc mergeFloat64(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\t*dst.Float64() = *src.Float64()\n}\n\nfunc mergeFloat64NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tv := *src.Float64()\n\tif v != 0 {\n\t\t*dst.Float64() = v\n\t}\n}\n\nfunc mergeFloat64Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tp := *src.Float64Ptr()\n\tif p != nil {\n\t\tv := *p\n\t\t*dst.Float64Ptr() = &v\n\t}\n}\n\nfunc mergeFloat64Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tds := dst.Float64Slice()\n\tss := src.Float64Slice()\n\t*ds = append(*ds, *ss...)\n}\n\nfunc mergeString(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\t*dst.String() = *src.String()\n}\n\nfunc mergeStringNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tv := *src.String()\n\tif v != \"\" {\n\t\t*dst.String() = v\n\t}\n}\n\nfunc mergeStringPtr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tp := *src.StringPtr()\n\tif p != nil {\n\t\tv := *p\n\t\t*dst.StringPtr() = &v\n\t}\n}\n\nfunc mergeStringSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) {\n\tds := dst.StringSlice()\n\tss := src.StringSlice()\n\t*ds = append(*ds, *ss...)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/message.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 impl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\n\t\"google.golang.org/protobuf/internal/genid\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// MessageInfo provides protobuf related functionality for a given Go type\n// that represents a message. A given instance of MessageInfo is tied to\n// exactly one Go type, which must be a pointer to a struct type.\n//\n// The exported fields must be populated before any methods are called\n// and cannot be mutated after set.\ntype MessageInfo struct {\n\t// GoReflectType is the underlying message Go type and must be populated.\n\tGoReflectType reflect.Type // pointer to struct\n\n\t// Desc is the underlying message descriptor type and must be populated.\n\tDesc protoreflect.MessageDescriptor\n\n\t// Deprecated: Exporter will be removed the next time we bump\n\t// protoimpl.GenVersion. See https://github.com/golang/protobuf/issues/1640\n\tExporter exporter\n\n\t// OneofWrappers is list of pointers to oneof wrapper struct types.\n\tOneofWrappers []any\n\n\tinitMu   sync.Mutex // protects all unexported fields\n\tinitDone uint32\n\n\treflectMessageInfo // for reflection implementation\n\tcoderMessageInfo   // for fast-path method implementations\n}\n\n// exporter is a function that returns a reference to the ith field of v,\n// where v is a pointer to a struct. It returns nil if it does not support\n// exporting the requested field (e.g., already exported).\ntype exporter func(v any, i int) any\n\n// getMessageInfo returns the MessageInfo for any message type that\n// is generated by our implementation of protoc-gen-go (for v2 and on).\n// If it is unable to obtain a MessageInfo, it returns nil.\nfunc getMessageInfo(mt reflect.Type) *MessageInfo {\n\tm, ok := reflect.Zero(mt).Interface().(protoreflect.ProtoMessage)\n\tif !ok {\n\t\treturn nil\n\t}\n\tmr, ok := m.ProtoReflect().(interface{ ProtoMessageInfo() *MessageInfo })\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn mr.ProtoMessageInfo()\n}\n\nfunc (mi *MessageInfo) init() {\n\t// This function is called in the hot path. Inline the sync.Once logic,\n\t// since allocating a closure for Once.Do is expensive.\n\t// Keep init small to ensure that it can be inlined.\n\tif atomic.LoadUint32(&mi.initDone) == 0 {\n\t\tmi.initOnce()\n\t}\n}\n\nfunc (mi *MessageInfo) initOnce() {\n\tmi.initMu.Lock()\n\tdefer mi.initMu.Unlock()\n\tif mi.initDone == 1 {\n\t\treturn\n\t}\n\tif opaqueInitHook(mi) {\n\t\treturn\n\t}\n\n\tt := mi.GoReflectType\n\tif t.Kind() != reflect.Ptr && t.Elem().Kind() != reflect.Struct {\n\t\tpanic(fmt.Sprintf(\"got %v, want *struct kind\", t))\n\t}\n\tt = t.Elem()\n\n\tsi := mi.makeStructInfo(t)\n\tmi.makeReflectFuncs(t, si)\n\tmi.makeCoderMethods(t, si)\n\n\tatomic.StoreUint32(&mi.initDone, 1)\n}\n\n// getPointer returns the pointer for a message, which should be of\n// the type of the MessageInfo. If the message is of a different type,\n// it returns ok==false.\nfunc (mi *MessageInfo) getPointer(m protoreflect.Message) (p pointer, ok bool) {\n\tswitch m := m.(type) {\n\tcase *messageState:\n\t\treturn m.pointer(), m.messageInfo() == mi\n\tcase *messageReflectWrapper:\n\t\treturn m.pointer(), m.messageInfo() == mi\n\t}\n\treturn pointer{}, false\n}\n\ntype (\n\tSizeCache       = int32\n\tWeakFields      = map[int32]protoreflect.ProtoMessage\n\tUnknownFields   = unknownFieldsA // TODO: switch to unknownFieldsB\n\tunknownFieldsA  = []byte\n\tunknownFieldsB  = *[]byte\n\tExtensionFields = map[int32]ExtensionField\n)\n\nvar (\n\tsizecacheType       = reflect.TypeOf(SizeCache(0))\n\tunknownFieldsAType  = reflect.TypeOf(unknownFieldsA(nil))\n\tunknownFieldsBType  = reflect.TypeOf(unknownFieldsB(nil))\n\textensionFieldsType = reflect.TypeOf(ExtensionFields(nil))\n)\n\ntype structInfo struct {\n\tsizecacheOffset offset\n\tsizecacheType   reflect.Type\n\tunknownOffset   offset\n\tunknownType     reflect.Type\n\textensionOffset offset\n\textensionType   reflect.Type\n\n\tlazyOffset     offset\n\tpresenceOffset offset\n\n\tfieldsByNumber        map[protoreflect.FieldNumber]reflect.StructField\n\toneofsByName          map[protoreflect.Name]reflect.StructField\n\toneofWrappersByType   map[reflect.Type]protoreflect.FieldNumber\n\toneofWrappersByNumber map[protoreflect.FieldNumber]reflect.Type\n}\n\nfunc (mi *MessageInfo) makeStructInfo(t reflect.Type) structInfo {\n\tsi := structInfo{\n\t\tsizecacheOffset: invalidOffset,\n\t\tunknownOffset:   invalidOffset,\n\t\textensionOffset: invalidOffset,\n\t\tlazyOffset:      invalidOffset,\n\t\tpresenceOffset:  invalidOffset,\n\n\t\tfieldsByNumber:        map[protoreflect.FieldNumber]reflect.StructField{},\n\t\toneofsByName:          map[protoreflect.Name]reflect.StructField{},\n\t\toneofWrappersByType:   map[reflect.Type]protoreflect.FieldNumber{},\n\t\toneofWrappersByNumber: map[protoreflect.FieldNumber]reflect.Type{},\n\t}\n\nfieldLoop:\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tswitch f := t.Field(i); f.Name {\n\t\tcase genid.SizeCache_goname, genid.SizeCacheA_goname:\n\t\t\tif f.Type == sizecacheType {\n\t\t\t\tsi.sizecacheOffset = offsetOf(f)\n\t\t\t\tsi.sizecacheType = f.Type\n\t\t\t}\n\t\tcase genid.UnknownFields_goname, genid.UnknownFieldsA_goname:\n\t\t\tif f.Type == unknownFieldsAType || f.Type == unknownFieldsBType {\n\t\t\t\tsi.unknownOffset = offsetOf(f)\n\t\t\t\tsi.unknownType = f.Type\n\t\t\t}\n\t\tcase genid.ExtensionFields_goname, genid.ExtensionFieldsA_goname, genid.ExtensionFieldsB_goname:\n\t\t\tif f.Type == extensionFieldsType {\n\t\t\t\tsi.extensionOffset = offsetOf(f)\n\t\t\t\tsi.extensionType = f.Type\n\t\t\t}\n\t\tcase \"lazyFields\", \"XXX_lazyUnmarshalInfo\":\n\t\t\tsi.lazyOffset = offsetOf(f)\n\t\tcase \"XXX_presence\":\n\t\t\tsi.presenceOffset = offsetOf(f)\n\t\tdefault:\n\t\t\tfor _, s := range strings.Split(f.Tag.Get(\"protobuf\"), \",\") {\n\t\t\t\tif len(s) > 0 && strings.Trim(s, \"0123456789\") == \"\" {\n\t\t\t\t\tn, _ := strconv.ParseUint(s, 10, 64)\n\t\t\t\t\tsi.fieldsByNumber[protoreflect.FieldNumber(n)] = f\n\t\t\t\t\tcontinue fieldLoop\n\t\t\t\t}\n\t\t\t}\n\t\t\tif s := f.Tag.Get(\"protobuf_oneof\"); len(s) > 0 {\n\t\t\t\tsi.oneofsByName[protoreflect.Name(s)] = f\n\t\t\t\tcontinue fieldLoop\n\t\t\t}\n\t\t}\n\t}\n\n\t// Derive a mapping of oneof wrappers to fields.\n\toneofWrappers := mi.OneofWrappers\n\tmethods := make([]reflect.Method, 0, 2)\n\tif m, ok := reflect.PtrTo(t).MethodByName(\"XXX_OneofFuncs\"); ok {\n\t\tmethods = append(methods, m)\n\t}\n\tif m, ok := reflect.PtrTo(t).MethodByName(\"XXX_OneofWrappers\"); ok {\n\t\tmethods = append(methods, m)\n\t}\n\tfor _, fn := range methods {\n\t\tfor _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) {\n\t\t\tif vs, ok := v.Interface().([]any); ok {\n\t\t\t\toneofWrappers = vs\n\t\t\t}\n\t\t}\n\t}\n\tfor _, v := range oneofWrappers {\n\t\ttf := reflect.TypeOf(v).Elem()\n\t\tf := tf.Field(0)\n\t\tfor _, s := range strings.Split(f.Tag.Get(\"protobuf\"), \",\") {\n\t\t\tif len(s) > 0 && strings.Trim(s, \"0123456789\") == \"\" {\n\t\t\t\tn, _ := strconv.ParseUint(s, 10, 64)\n\t\t\t\tsi.oneofWrappersByType[tf] = protoreflect.FieldNumber(n)\n\t\t\t\tsi.oneofWrappersByNumber[protoreflect.FieldNumber(n)] = tf\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn si\n}\n\nfunc (mi *MessageInfo) New() protoreflect.Message {\n\tm := reflect.New(mi.GoReflectType.Elem()).Interface()\n\tif r, ok := m.(protoreflect.ProtoMessage); ok {\n\t\treturn r.ProtoReflect()\n\t}\n\treturn mi.MessageOf(m)\n}\nfunc (mi *MessageInfo) Zero() protoreflect.Message {\n\treturn mi.MessageOf(reflect.Zero(mi.GoReflectType).Interface())\n}\nfunc (mi *MessageInfo) Descriptor() protoreflect.MessageDescriptor {\n\treturn mi.Desc\n}\nfunc (mi *MessageInfo) Enum(i int) protoreflect.EnumType {\n\tmi.init()\n\tfd := mi.Desc.Fields().Get(i)\n\treturn Export{}.EnumTypeOf(mi.fieldTypes[fd.Number()])\n}\nfunc (mi *MessageInfo) Message(i int) protoreflect.MessageType {\n\tmi.init()\n\tfd := mi.Desc.Fields().Get(i)\n\tswitch {\n\tcase fd.IsMap():\n\t\treturn mapEntryType{fd.Message(), mi.fieldTypes[fd.Number()]}\n\tdefault:\n\t\treturn Export{}.MessageTypeOf(mi.fieldTypes[fd.Number()])\n\t}\n}\n\ntype mapEntryType struct {\n\tdesc    protoreflect.MessageDescriptor\n\tvalType any // zero value of enum or message type\n}\n\nfunc (mt mapEntryType) New() protoreflect.Message {\n\treturn nil\n}\nfunc (mt mapEntryType) Zero() protoreflect.Message {\n\treturn nil\n}\nfunc (mt mapEntryType) Descriptor() protoreflect.MessageDescriptor {\n\treturn mt.desc\n}\nfunc (mt mapEntryType) Enum(i int) protoreflect.EnumType {\n\tfd := mt.desc.Fields().Get(i)\n\tif fd.Enum() == nil {\n\t\treturn nil\n\t}\n\treturn Export{}.EnumTypeOf(mt.valType)\n}\nfunc (mt mapEntryType) Message(i int) protoreflect.MessageType {\n\tfd := mt.desc.Fields().Get(i)\n\tif fd.Message() == nil {\n\t\treturn nil\n\t}\n\treturn Export{}.MessageTypeOf(mt.valType)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/message_opaque.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 impl\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync/atomic\"\n\n\t\"google.golang.org/protobuf/internal/filedesc\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\ntype opaqueStructInfo struct {\n\tstructInfo\n}\n\n// isOpaque determines whether a protobuf message type is on the Opaque API.  It\n// checks whether the type is a Go struct that protoc-gen-go would generate.\n//\n// This function only detects newly generated messages from the v2\n// implementation of protoc-gen-go. It is unable to classify generated messages\n// that are too old or those that are generated by a different generator\n// such as protoc-gen-gogo.\nfunc isOpaque(t reflect.Type) bool {\n\t// The current detection mechanism is to simply check the first field\n\t// for a struct tag with the \"protogen\" key.\n\tif t.Kind() == reflect.Struct && t.NumField() > 0 {\n\t\tpgt := t.Field(0).Tag.Get(\"protogen\")\n\t\treturn strings.HasPrefix(pgt, \"opaque.\")\n\t}\n\treturn false\n}\n\nfunc opaqueInitHook(mi *MessageInfo) bool {\n\tmt := mi.GoReflectType.Elem()\n\tsi := opaqueStructInfo{\n\t\tstructInfo: mi.makeStructInfo(mt),\n\t}\n\n\tif !isOpaque(mt) {\n\t\treturn false\n\t}\n\n\tdefer atomic.StoreUint32(&mi.initDone, 1)\n\n\tmi.fields = map[protoreflect.FieldNumber]*fieldInfo{}\n\tfds := mi.Desc.Fields()\n\tfor i := 0; i < fds.Len(); i++ {\n\t\tfd := fds.Get(i)\n\t\tfs := si.fieldsByNumber[fd.Number()]\n\t\tvar fi fieldInfo\n\t\tusePresence, _ := filedesc.UsePresenceForField(fd)\n\n\t\tswitch {\n\t\tcase fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic():\n\t\t\t// Oneofs are no different for opaque.\n\t\t\tfi = fieldInfoForOneof(fd, si.oneofsByName[fd.ContainingOneof().Name()], mi.Exporter, si.oneofWrappersByNumber[fd.Number()])\n\t\tcase fd.IsMap():\n\t\t\tfi = mi.fieldInfoForMapOpaque(si, fd, fs)\n\t\tcase fd.IsList() && fd.Message() == nil && usePresence:\n\t\t\tfi = mi.fieldInfoForScalarListOpaque(si, fd, fs)\n\t\tcase fd.IsList() && fd.Message() == nil:\n\t\t\t// Proto3 lists without presence can use same access methods as open\n\t\t\tfi = fieldInfoForList(fd, fs, mi.Exporter)\n\t\tcase fd.IsList() && usePresence:\n\t\t\tfi = mi.fieldInfoForMessageListOpaque(si, fd, fs)\n\t\tcase fd.IsList():\n\t\t\t// Proto3 opaque messages that does not need presence bitmap.\n\t\t\t// Different representation than open struct, but same logic\n\t\t\tfi = mi.fieldInfoForMessageListOpaqueNoPresence(si, fd, fs)\n\t\tcase fd.Message() != nil && usePresence:\n\t\t\tfi = mi.fieldInfoForMessageOpaque(si, fd, fs)\n\t\tcase fd.Message() != nil:\n\t\t\t// Proto3 messages without presence can use same access methods as open\n\t\t\tfi = fieldInfoForMessage(fd, fs, mi.Exporter)\n\t\tdefault:\n\t\t\tfi = mi.fieldInfoForScalarOpaque(si, fd, fs)\n\t\t}\n\t\tmi.fields[fd.Number()] = &fi\n\t}\n\tmi.oneofs = map[protoreflect.Name]*oneofInfo{}\n\tfor i := 0; i < mi.Desc.Oneofs().Len(); i++ {\n\t\tod := mi.Desc.Oneofs().Get(i)\n\t\tmi.oneofs[od.Name()] = makeOneofInfoOpaque(mi, od, si.structInfo, mi.Exporter)\n\t}\n\n\tmi.denseFields = make([]*fieldInfo, fds.Len()*2)\n\tfor i := 0; i < fds.Len(); i++ {\n\t\tif fd := fds.Get(i); int(fd.Number()) < len(mi.denseFields) {\n\t\t\tmi.denseFields[fd.Number()] = mi.fields[fd.Number()]\n\t\t}\n\t}\n\n\tfor i := 0; i < fds.Len(); {\n\t\tfd := fds.Get(i)\n\t\tif od := fd.ContainingOneof(); od != nil && !fd.ContainingOneof().IsSynthetic() {\n\t\t\tmi.rangeInfos = append(mi.rangeInfos, mi.oneofs[od.Name()])\n\t\t\ti += od.Fields().Len()\n\t\t} else {\n\t\t\tmi.rangeInfos = append(mi.rangeInfos, mi.fields[fd.Number()])\n\t\t\ti++\n\t\t}\n\t}\n\n\tmi.makeExtensionFieldsFunc(mt, si.structInfo)\n\tmi.makeUnknownFieldsFunc(mt, si.structInfo)\n\tmi.makeOpaqueCoderMethods(mt, si)\n\tmi.makeFieldTypes(si.structInfo)\n\n\treturn true\n}\n\nfunc makeOneofInfoOpaque(mi *MessageInfo, od protoreflect.OneofDescriptor, si structInfo, x exporter) *oneofInfo {\n\toi := &oneofInfo{oneofDesc: od}\n\tif od.IsSynthetic() {\n\t\tfd := od.Fields().Get(0)\n\t\tindex, _ := presenceIndex(mi.Desc, fd)\n\t\toi.which = func(p pointer) protoreflect.FieldNumber {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tif !mi.present(p, index) {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\treturn od.Fields().Get(0).Number()\n\t\t}\n\t\treturn oi\n\t}\n\t// Dispatch to non-opaque oneof implementation for non-synthetic oneofs.\n\treturn makeOneofInfo(od, si, x)\n}\n\nfunc (mi *MessageInfo) fieldInfoForMapOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo {\n\tft := fs.Type\n\tif ft.Kind() != reflect.Map {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want map kind\", ft))\n\t}\n\tfieldOffset := offsetOf(fs)\n\tconv := NewConverter(ft, fd)\n\treturn fieldInfo{\n\t\tfieldDesc: fd,\n\t\thas: func(p pointer) bool {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Don't bother checking presence bits, since we need to\n\t\t\t// look at the map length even if the presence bit is set.\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\treturn rv.Len() > 0\n\t\t},\n\t\tclear: func(p pointer) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\trv.Set(reflect.Zero(rv.Type()))\n\t\t},\n\t\tget: func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif rv.Len() == 0 {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn conv.PBValueOf(rv)\n\t\t},\n\t\tset: func(p pointer, v protoreflect.Value) {\n\t\t\tpv := conv.GoValueOf(v)\n\t\t\tif pv.IsNil() {\n\t\t\t\tpanic(fmt.Sprintf(\"invalid value: setting map field to read-only value\"))\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\trv.Set(pv)\n\t\t},\n\t\tmutable: func(p pointer) protoreflect.Value {\n\t\t\tv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif v.IsNil() {\n\t\t\t\tv.Set(reflect.MakeMap(fs.Type))\n\t\t\t}\n\t\t\treturn conv.PBValueOf(v)\n\t\t},\n\t\tnewField: func() protoreflect.Value {\n\t\t\treturn conv.New()\n\t\t},\n\t}\n}\n\nfunc (mi *MessageInfo) fieldInfoForScalarListOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo {\n\tft := fs.Type\n\tif ft.Kind() != reflect.Slice {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want slice kind\", ft))\n\t}\n\tconv := NewConverter(reflect.PtrTo(ft), fd)\n\tfieldOffset := offsetOf(fs)\n\tindex, _ := presenceIndex(mi.Desc, fd)\n\treturn fieldInfo{\n\t\tfieldDesc: fd,\n\t\thas: func(p pointer) bool {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\treturn rv.Len() > 0\n\t\t},\n\t\tclear: func(p pointer) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\trv.Set(reflect.Zero(rv.Type()))\n\t\t},\n\t\tget: func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type)\n\t\t\tif rv.Elem().Len() == 0 {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn conv.PBValueOf(rv)\n\t\t},\n\t\tset: func(p pointer, v protoreflect.Value) {\n\t\t\tpv := conv.GoValueOf(v)\n\t\t\tif pv.IsNil() {\n\t\t\t\tpanic(fmt.Sprintf(\"invalid value: setting repeated field to read-only value\"))\n\t\t\t}\n\t\t\tmi.setPresent(p, index)\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\trv.Set(pv.Elem())\n\t\t},\n\t\tmutable: func(p pointer) protoreflect.Value {\n\t\t\tmi.setPresent(p, index)\n\t\t\treturn conv.PBValueOf(p.Apply(fieldOffset).AsValueOf(fs.Type))\n\t\t},\n\t\tnewField: func() protoreflect.Value {\n\t\t\treturn conv.New()\n\t\t},\n\t}\n}\n\nfunc (mi *MessageInfo) fieldInfoForMessageListOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo {\n\tft := fs.Type\n\tif ft.Kind() != reflect.Ptr || ft.Elem().Kind() != reflect.Slice {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want slice kind\", ft))\n\t}\n\tconv := NewConverter(ft, fd)\n\tfieldOffset := offsetOf(fs)\n\tindex, _ := presenceIndex(mi.Desc, fd)\n\tfieldNumber := fd.Number()\n\treturn fieldInfo{\n\t\tfieldDesc: fd,\n\t\thas: func(p pointer) bool {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !mi.present(p, index) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tsp := p.Apply(fieldOffset).AtomicGetPointer()\n\t\t\tif sp.IsNil() {\n\t\t\t\t// Lazily unmarshal this field.\n\t\t\t\tmi.lazyUnmarshal(p, fieldNumber)\n\t\t\t\tsp = p.Apply(fieldOffset).AtomicGetPointer()\n\t\t\t}\n\t\t\trv := sp.AsValueOf(fs.Type.Elem())\n\t\t\treturn rv.Elem().Len() > 0\n\t\t},\n\t\tclear: func(p pointer) {\n\t\t\tfp := p.Apply(fieldOffset)\n\t\t\tsp := fp.AtomicGetPointer()\n\t\t\tif sp.IsNil() {\n\t\t\t\tsp = fp.AtomicSetPointerIfNil(pointerOfValue(reflect.New(fs.Type.Elem())))\n\t\t\t\tmi.setPresent(p, index)\n\t\t\t}\n\t\t\trv := sp.AsValueOf(fs.Type.Elem())\n\t\t\trv.Elem().Set(reflect.Zero(rv.Type().Elem()))\n\t\t},\n\t\tget: func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tif !mi.present(p, index) {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tsp := p.Apply(fieldOffset).AtomicGetPointer()\n\t\t\tif sp.IsNil() {\n\t\t\t\t// Lazily unmarshal this field.\n\t\t\t\tmi.lazyUnmarshal(p, fieldNumber)\n\t\t\t\tsp = p.Apply(fieldOffset).AtomicGetPointer()\n\t\t\t}\n\t\t\trv := sp.AsValueOf(fs.Type.Elem())\n\t\t\tif rv.Elem().Len() == 0 {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn conv.PBValueOf(rv)\n\t\t},\n\t\tset: func(p pointer, v protoreflect.Value) {\n\t\t\tfp := p.Apply(fieldOffset)\n\t\t\tsp := fp.AtomicGetPointer()\n\t\t\tif sp.IsNil() {\n\t\t\t\tsp = fp.AtomicSetPointerIfNil(pointerOfValue(reflect.New(fs.Type.Elem())))\n\t\t\t\tmi.setPresent(p, index)\n\t\t\t}\n\t\t\trv := sp.AsValueOf(fs.Type.Elem())\n\t\t\tval := conv.GoValueOf(v)\n\t\t\tif val.IsNil() {\n\t\t\t\tpanic(fmt.Sprintf(\"invalid value: setting repeated field to read-only value\"))\n\t\t\t} else {\n\t\t\t\trv.Elem().Set(val.Elem())\n\t\t\t}\n\t\t},\n\t\tmutable: func(p pointer) protoreflect.Value {\n\t\t\tfp := p.Apply(fieldOffset)\n\t\t\tsp := fp.AtomicGetPointer()\n\t\t\tif sp.IsNil() {\n\t\t\t\tif mi.present(p, index) {\n\t\t\t\t\t// Lazily unmarshal this field.\n\t\t\t\t\tmi.lazyUnmarshal(p, fieldNumber)\n\t\t\t\t\tsp = p.Apply(fieldOffset).AtomicGetPointer()\n\t\t\t\t} else {\n\t\t\t\t\tsp = fp.AtomicSetPointerIfNil(pointerOfValue(reflect.New(fs.Type.Elem())))\n\t\t\t\t\tmi.setPresent(p, index)\n\t\t\t\t}\n\t\t\t}\n\t\t\trv := sp.AsValueOf(fs.Type.Elem())\n\t\t\treturn conv.PBValueOf(rv)\n\t\t},\n\t\tnewField: func() protoreflect.Value {\n\t\t\treturn conv.New()\n\t\t},\n\t}\n}\n\nfunc (mi *MessageInfo) fieldInfoForMessageListOpaqueNoPresence(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo {\n\tft := fs.Type\n\tif ft.Kind() != reflect.Ptr || ft.Elem().Kind() != reflect.Slice {\n\t\tpanic(fmt.Sprintf(\"invalid type: got %v, want slice kind\", ft))\n\t}\n\tconv := NewConverter(ft, fd)\n\tfieldOffset := offsetOf(fs)\n\treturn fieldInfo{\n\t\tfieldDesc: fd,\n\t\thas: func(p pointer) bool {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif rv.IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn rv.Elem().Len() > 0\n\t\t},\n\t\tclear: func(p pointer) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif !rv.IsNil() {\n\t\t\t\trv.Elem().Set(reflect.Zero(rv.Type().Elem()))\n\t\t\t}\n\t\t},\n\t\tget: func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif rv.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tif rv.Elem().Len() == 0 {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn conv.PBValueOf(rv)\n\t\t},\n\t\tset: func(p pointer, v protoreflect.Value) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif rv.IsNil() {\n\t\t\t\trv.Set(reflect.New(fs.Type.Elem()))\n\t\t\t}\n\t\t\tval := conv.GoValueOf(v)\n\t\t\tif val.IsNil() {\n\t\t\t\tpanic(fmt.Sprintf(\"invalid value: setting repeated field to read-only value\"))\n\t\t\t} else {\n\t\t\t\trv.Elem().Set(val.Elem())\n\t\t\t}\n\t\t},\n\t\tmutable: func(p pointer) protoreflect.Value {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif rv.IsNil() {\n\t\t\t\trv.Set(reflect.New(fs.Type.Elem()))\n\t\t\t}\n\t\t\treturn conv.PBValueOf(rv)\n\t\t},\n\t\tnewField: func() protoreflect.Value {\n\t\t\treturn conv.New()\n\t\t},\n\t}\n}\n\nfunc (mi *MessageInfo) fieldInfoForScalarOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo {\n\tft := fs.Type\n\tnullable := fd.HasPresence()\n\tif oneof := fd.ContainingOneof(); oneof != nil && oneof.IsSynthetic() {\n\t\tnullable = true\n\t}\n\tderef := false\n\tif nullable && ft.Kind() == reflect.Ptr {\n\t\tft = ft.Elem()\n\t\tderef = true\n\t}\n\tconv := NewConverter(ft, fd)\n\tfieldOffset := offsetOf(fs)\n\tindex, _ := presenceIndex(mi.Desc, fd)\n\tvar getter func(p pointer) protoreflect.Value\n\tif !nullable {\n\t\tgetter = getterForDirectScalar(fd, fs, conv, fieldOffset)\n\t} else {\n\t\tgetter = getterForOpaqueNullableScalar(mi, index, fd, fs, conv, fieldOffset)\n\t}\n\treturn fieldInfo{\n\t\tfieldDesc: fd,\n\t\thas: func(p pointer) bool {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif nullable {\n\t\t\t\treturn mi.present(p, index)\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tswitch rv.Kind() {\n\t\t\tcase reflect.Bool:\n\t\t\t\treturn rv.Bool()\n\t\t\tcase reflect.Int32, reflect.Int64:\n\t\t\t\treturn rv.Int() != 0\n\t\t\tcase reflect.Uint32, reflect.Uint64:\n\t\t\t\treturn rv.Uint() != 0\n\t\t\tcase reflect.Float32, reflect.Float64:\n\t\t\t\treturn rv.Float() != 0 || math.Signbit(rv.Float())\n\t\t\tcase reflect.String, reflect.Slice:\n\t\t\t\treturn rv.Len() > 0\n\t\t\tdefault:\n\t\t\t\tpanic(fmt.Sprintf(\"invalid type: %v\", rv.Type())) // should never happen\n\t\t\t}\n\t\t},\n\t\tclear: func(p pointer) {\n\t\t\tif nullable {\n\t\t\t\tmi.clearPresent(p, index)\n\t\t\t}\n\t\t\t// This is only valuable for bytes and strings, but we do it unconditionally.\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\trv.Set(reflect.Zero(rv.Type()))\n\t\t},\n\t\tget: getter,\n\t\t// TODO: Implement unsafe fast path for set?\n\t\tset: func(p pointer, v protoreflect.Value) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif deref {\n\t\t\t\tif rv.IsNil() {\n\t\t\t\t\trv.Set(reflect.New(ft))\n\t\t\t\t}\n\t\t\t\trv = rv.Elem()\n\t\t\t}\n\n\t\t\trv.Set(conv.GoValueOf(v))\n\t\t\tif nullable && rv.Kind() == reflect.Slice && rv.IsNil() {\n\t\t\t\trv.Set(emptyBytes)\n\t\t\t}\n\t\t\tif nullable {\n\t\t\t\tmi.setPresent(p, index)\n\t\t\t}\n\t\t},\n\t\tnewField: func() protoreflect.Value {\n\t\t\treturn conv.New()\n\t\t},\n\t}\n}\n\nfunc (mi *MessageInfo) fieldInfoForMessageOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo {\n\tft := fs.Type\n\tconv := NewConverter(ft, fd)\n\tfieldOffset := offsetOf(fs)\n\tindex, _ := presenceIndex(mi.Desc, fd)\n\tfieldNumber := fd.Number()\n\telemType := fs.Type.Elem()\n\treturn fieldInfo{\n\t\tfieldDesc: fd,\n\t\thas: func(p pointer) bool {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn mi.present(p, index)\n\t\t},\n\t\tclear: func(p pointer) {\n\t\t\tmi.clearPresent(p, index)\n\t\t\tp.Apply(fieldOffset).AtomicSetNilPointer()\n\t\t},\n\t\tget: func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() || !mi.present(p, index) {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tfp := p.Apply(fieldOffset)\n\t\t\tmp := fp.AtomicGetPointer()\n\t\t\tif mp.IsNil() {\n\t\t\t\t// Lazily unmarshal this field.\n\t\t\t\tmi.lazyUnmarshal(p, fieldNumber)\n\t\t\t\tmp = fp.AtomicGetPointer()\n\t\t\t}\n\t\t\trv := mp.AsValueOf(elemType)\n\t\t\treturn conv.PBValueOf(rv)\n\t\t},\n\t\tset: func(p pointer, v protoreflect.Value) {\n\t\t\tval := pointerOfValue(conv.GoValueOf(v))\n\t\t\tif val.IsNil() {\n\t\t\t\tpanic(\"invalid nil pointer\")\n\t\t\t}\n\t\t\tp.Apply(fieldOffset).AtomicSetPointer(val)\n\t\t\tmi.setPresent(p, index)\n\t\t},\n\t\tmutable: func(p pointer) protoreflect.Value {\n\t\t\tfp := p.Apply(fieldOffset)\n\t\t\tmp := fp.AtomicGetPointer()\n\t\t\tif mp.IsNil() {\n\t\t\t\tif mi.present(p, index) {\n\t\t\t\t\t// Lazily unmarshal this field.\n\t\t\t\t\tmi.lazyUnmarshal(p, fieldNumber)\n\t\t\t\t\tmp = fp.AtomicGetPointer()\n\t\t\t\t} else {\n\t\t\t\t\tmp = pointerOfValue(conv.GoValueOf(conv.New()))\n\t\t\t\t\tfp.AtomicSetPointer(mp)\n\t\t\t\t\tmi.setPresent(p, index)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn conv.PBValueOf(mp.AsValueOf(fs.Type.Elem()))\n\t\t},\n\t\tnewMessage: func() protoreflect.Message {\n\t\t\treturn conv.New().Message()\n\t\t},\n\t\tnewField: func() protoreflect.Value {\n\t\t\treturn conv.New()\n\t\t},\n\t}\n}\n\n// A presenceList wraps a List, updating presence bits as necessary when the\n// list contents change.\ntype presenceList struct {\n\tpvalueList\n\tsetPresence func(bool)\n}\ntype pvalueList interface {\n\tprotoreflect.List\n\t//Unwrapper\n}\n\nfunc (list presenceList) Append(v protoreflect.Value) {\n\tlist.pvalueList.Append(v)\n\tlist.setPresence(true)\n}\nfunc (list presenceList) Truncate(i int) {\n\tlist.pvalueList.Truncate(i)\n\tlist.setPresence(i > 0)\n}\n\n// presenceIndex returns the index to pass to presence functions.\n//\n// TODO: field.Desc.Index() would be simpler, and would give space to record the presence of oneof fields.\nfunc presenceIndex(md protoreflect.MessageDescriptor, fd protoreflect.FieldDescriptor) (uint32, presenceSize) {\n\tfound := false\n\tvar index, numIndices uint32\n\tfor i := 0; i < md.Fields().Len(); i++ {\n\t\tf := md.Fields().Get(i)\n\t\tif f == fd {\n\t\t\tfound = true\n\t\t\tindex = numIndices\n\t\t}\n\t\tif f.ContainingOneof() == nil || isLastOneofField(f) {\n\t\t\tnumIndices++\n\t\t}\n\t}\n\tif !found {\n\t\tpanic(fmt.Sprintf(\"BUG: %v not in %v\", fd.Name(), md.FullName()))\n\t}\n\treturn index, presenceSize(numIndices)\n}\n\nfunc isLastOneofField(fd protoreflect.FieldDescriptor) bool {\n\tfields := fd.ContainingOneof().Fields()\n\treturn fields.Get(fields.Len()-1) == fd\n}\n\nfunc (mi *MessageInfo) setPresent(p pointer, index uint32) {\n\tp.Apply(mi.presenceOffset).PresenceInfo().SetPresent(index, mi.presenceSize)\n}\n\nfunc (mi *MessageInfo) clearPresent(p pointer, index uint32) {\n\tp.Apply(mi.presenceOffset).PresenceInfo().ClearPresent(index)\n}\n\nfunc (mi *MessageInfo) present(p pointer, index uint32) bool {\n\treturn p.Apply(mi.presenceOffset).PresenceInfo().Present(index)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/message_opaque_gen.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 generated by generate-types. DO NOT EDIT.\n\npackage impl\n\nimport (\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nfunc getterForOpaqueNullableScalar(mi *MessageInfo, index uint32, fd protoreflect.FieldDescriptor, fs reflect.StructField, conv Converter, fieldOffset offset) func(p pointer) protoreflect.Value {\n\tft := fs.Type\n\tif ft.Kind() == reflect.Ptr {\n\t\tft = ft.Elem()\n\t}\n\tif fd.Kind() == protoreflect.EnumKind {\n\t\t// Enums for nullable opaque types.\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() || !mi.present(p, index) {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\treturn conv.PBValueOf(rv)\n\t\t}\n\t}\n\tswitch ft.Kind() {\n\tcase reflect.Bool:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() || !mi.present(p, index) {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Bool()\n\t\t\treturn protoreflect.ValueOfBool(*x)\n\t\t}\n\tcase reflect.Int32:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() || !mi.present(p, index) {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Int32()\n\t\t\treturn protoreflect.ValueOfInt32(*x)\n\t\t}\n\tcase reflect.Uint32:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() || !mi.present(p, index) {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Uint32()\n\t\t\treturn protoreflect.ValueOfUint32(*x)\n\t\t}\n\tcase reflect.Int64:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() || !mi.present(p, index) {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Int64()\n\t\t\treturn protoreflect.ValueOfInt64(*x)\n\t\t}\n\tcase reflect.Uint64:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() || !mi.present(p, index) {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Uint64()\n\t\t\treturn protoreflect.ValueOfUint64(*x)\n\t\t}\n\tcase reflect.Float32:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() || !mi.present(p, index) {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Float32()\n\t\t\treturn protoreflect.ValueOfFloat32(*x)\n\t\t}\n\tcase reflect.Float64:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() || !mi.present(p, index) {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Float64()\n\t\t\treturn protoreflect.ValueOfFloat64(*x)\n\t\t}\n\tcase reflect.String:\n\t\tif fd.Kind() == protoreflect.BytesKind {\n\t\t\treturn func(p pointer) protoreflect.Value {\n\t\t\t\tif p.IsNil() || !mi.present(p, index) {\n\t\t\t\t\treturn conv.Zero()\n\t\t\t\t}\n\t\t\t\tx := p.Apply(fieldOffset).StringPtr()\n\t\t\t\tif *x == nil {\n\t\t\t\t\treturn conv.Zero()\n\t\t\t\t}\n\t\t\t\tif len(**x) == 0 {\n\t\t\t\t\treturn protoreflect.ValueOfBytes(nil)\n\t\t\t\t}\n\t\t\t\treturn protoreflect.ValueOfBytes([]byte(**x))\n\t\t\t}\n\t\t}\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() || !mi.present(p, index) {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).StringPtr()\n\t\t\tif *x == nil {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn protoreflect.ValueOfString(**x)\n\t\t}\n\tcase reflect.Slice:\n\t\tif fd.Kind() == protoreflect.StringKind {\n\t\t\treturn func(p pointer) protoreflect.Value {\n\t\t\t\tif p.IsNil() || !mi.present(p, index) {\n\t\t\t\t\treturn conv.Zero()\n\t\t\t\t}\n\t\t\t\tx := p.Apply(fieldOffset).Bytes()\n\t\t\t\treturn protoreflect.ValueOfString(string(*x))\n\t\t\t}\n\t\t}\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() || !mi.present(p, index) {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Bytes()\n\t\t\treturn protoreflect.ValueOfBytes(*x)\n\t\t}\n\t}\n\tpanic(\"unexpected protobuf kind: \" + ft.Kind().String())\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/message_reflect.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 impl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/internal/detrand\"\n\t\"google.golang.org/protobuf/internal/pragma\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\ntype reflectMessageInfo struct {\n\tfields map[protoreflect.FieldNumber]*fieldInfo\n\toneofs map[protoreflect.Name]*oneofInfo\n\n\t// fieldTypes contains the zero value of an enum or message field.\n\t// For lists, it contains the element type.\n\t// For maps, it contains the entry value type.\n\tfieldTypes map[protoreflect.FieldNumber]any\n\n\t// denseFields is a subset of fields where:\n\t//\t0 < fieldDesc.Number() < len(denseFields)\n\t// It provides faster access to the fieldInfo, but may be incomplete.\n\tdenseFields []*fieldInfo\n\n\t// rangeInfos is a list of all fields (not belonging to a oneof) and oneofs.\n\trangeInfos []any // either *fieldInfo or *oneofInfo\n\n\tgetUnknown   func(pointer) protoreflect.RawFields\n\tsetUnknown   func(pointer, protoreflect.RawFields)\n\textensionMap func(pointer) *extensionMap\n\n\tnilMessage atomicNilMessage\n}\n\n// makeReflectFuncs generates the set of functions to support reflection.\nfunc (mi *MessageInfo) makeReflectFuncs(t reflect.Type, si structInfo) {\n\tmi.makeKnownFieldsFunc(si)\n\tmi.makeUnknownFieldsFunc(t, si)\n\tmi.makeExtensionFieldsFunc(t, si)\n\tmi.makeFieldTypes(si)\n}\n\n// makeKnownFieldsFunc generates functions for operations that can be performed\n// on each protobuf message field. It takes in a reflect.Type representing the\n// Go struct and matches message fields with struct fields.\n//\n// This code assumes that the struct is well-formed and panics if there are\n// any discrepancies.\nfunc (mi *MessageInfo) makeKnownFieldsFunc(si structInfo) {\n\tmi.fields = map[protoreflect.FieldNumber]*fieldInfo{}\n\tmd := mi.Desc\n\tfds := md.Fields()\n\tfor i := 0; i < fds.Len(); i++ {\n\t\tfd := fds.Get(i)\n\t\tfs := si.fieldsByNumber[fd.Number()]\n\t\tisOneof := fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic()\n\t\tif isOneof {\n\t\t\tfs = si.oneofsByName[fd.ContainingOneof().Name()]\n\t\t}\n\t\tvar fi fieldInfo\n\t\tswitch {\n\t\tcase fs.Type == nil:\n\t\t\tfi = fieldInfoForMissing(fd) // never occurs for officially generated message types\n\t\tcase isOneof:\n\t\t\tfi = fieldInfoForOneof(fd, fs, mi.Exporter, si.oneofWrappersByNumber[fd.Number()])\n\t\tcase fd.IsMap():\n\t\t\tfi = fieldInfoForMap(fd, fs, mi.Exporter)\n\t\tcase fd.IsList():\n\t\t\tfi = fieldInfoForList(fd, fs, mi.Exporter)\n\t\tcase fd.Message() != nil:\n\t\t\tfi = fieldInfoForMessage(fd, fs, mi.Exporter)\n\t\tdefault:\n\t\t\tfi = fieldInfoForScalar(fd, fs, mi.Exporter)\n\t\t}\n\t\tmi.fields[fd.Number()] = &fi\n\t}\n\n\tmi.oneofs = map[protoreflect.Name]*oneofInfo{}\n\tfor i := 0; i < md.Oneofs().Len(); i++ {\n\t\tod := md.Oneofs().Get(i)\n\t\tmi.oneofs[od.Name()] = makeOneofInfo(od, si, mi.Exporter)\n\t}\n\n\tmi.denseFields = make([]*fieldInfo, fds.Len()*2)\n\tfor i := 0; i < fds.Len(); i++ {\n\t\tif fd := fds.Get(i); int(fd.Number()) < len(mi.denseFields) {\n\t\t\tmi.denseFields[fd.Number()] = mi.fields[fd.Number()]\n\t\t}\n\t}\n\n\tfor i := 0; i < fds.Len(); {\n\t\tfd := fds.Get(i)\n\t\tif od := fd.ContainingOneof(); od != nil && !od.IsSynthetic() {\n\t\t\tmi.rangeInfos = append(mi.rangeInfos, mi.oneofs[od.Name()])\n\t\t\ti += od.Fields().Len()\n\t\t} else {\n\t\t\tmi.rangeInfos = append(mi.rangeInfos, mi.fields[fd.Number()])\n\t\t\ti++\n\t\t}\n\t}\n\n\t// Introduce instability to iteration order, but keep it deterministic.\n\tif len(mi.rangeInfos) > 1 && detrand.Bool() {\n\t\ti := detrand.Intn(len(mi.rangeInfos) - 1)\n\t\tmi.rangeInfos[i], mi.rangeInfos[i+1] = mi.rangeInfos[i+1], mi.rangeInfos[i]\n\t}\n}\n\nfunc (mi *MessageInfo) makeUnknownFieldsFunc(t reflect.Type, si structInfo) {\n\tswitch {\n\tcase si.unknownOffset.IsValid() && si.unknownType == unknownFieldsAType:\n\t\t// Handle as []byte.\n\t\tmi.getUnknown = func(p pointer) protoreflect.RawFields {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn *p.Apply(mi.unknownOffset).Bytes()\n\t\t}\n\t\tmi.setUnknown = func(p pointer, b protoreflect.RawFields) {\n\t\t\tif p.IsNil() {\n\t\t\t\tpanic(\"invalid SetUnknown on nil Message\")\n\t\t\t}\n\t\t\t*p.Apply(mi.unknownOffset).Bytes() = b\n\t\t}\n\tcase si.unknownOffset.IsValid() && si.unknownType == unknownFieldsBType:\n\t\t// Handle as *[]byte.\n\t\tmi.getUnknown = func(p pointer) protoreflect.RawFields {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tbp := p.Apply(mi.unknownOffset).BytesPtr()\n\t\t\tif *bp == nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn **bp\n\t\t}\n\t\tmi.setUnknown = func(p pointer, b protoreflect.RawFields) {\n\t\t\tif p.IsNil() {\n\t\t\t\tpanic(\"invalid SetUnknown on nil Message\")\n\t\t\t}\n\t\t\tbp := p.Apply(mi.unknownOffset).BytesPtr()\n\t\t\tif *bp == nil {\n\t\t\t\t*bp = new([]byte)\n\t\t\t}\n\t\t\t**bp = b\n\t\t}\n\tdefault:\n\t\tmi.getUnknown = func(pointer) protoreflect.RawFields {\n\t\t\treturn nil\n\t\t}\n\t\tmi.setUnknown = func(p pointer, _ protoreflect.RawFields) {\n\t\t\tif p.IsNil() {\n\t\t\t\tpanic(\"invalid SetUnknown on nil Message\")\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (mi *MessageInfo) makeExtensionFieldsFunc(t reflect.Type, si structInfo) {\n\tif si.extensionOffset.IsValid() {\n\t\tmi.extensionMap = func(p pointer) *extensionMap {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn (*extensionMap)(nil)\n\t\t\t}\n\t\t\tv := p.Apply(si.extensionOffset).AsValueOf(extensionFieldsType)\n\t\t\treturn (*extensionMap)(v.Interface().(*map[int32]ExtensionField))\n\t\t}\n\t} else {\n\t\tmi.extensionMap = func(pointer) *extensionMap {\n\t\t\treturn (*extensionMap)(nil)\n\t\t}\n\t}\n}\nfunc (mi *MessageInfo) makeFieldTypes(si structInfo) {\n\tmd := mi.Desc\n\tfds := md.Fields()\n\tfor i := 0; i < fds.Len(); i++ {\n\t\tvar ft reflect.Type\n\t\tfd := fds.Get(i)\n\t\tfs := si.fieldsByNumber[fd.Number()]\n\t\tisOneof := fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic()\n\t\tif isOneof {\n\t\t\tfs = si.oneofsByName[fd.ContainingOneof().Name()]\n\t\t}\n\t\tvar isMessage bool\n\t\tswitch {\n\t\tcase fs.Type == nil:\n\t\t\tcontinue // never occurs for officially generated message types\n\t\tcase isOneof:\n\t\t\tif fd.Enum() != nil || fd.Message() != nil {\n\t\t\t\tft = si.oneofWrappersByNumber[fd.Number()].Field(0).Type\n\t\t\t}\n\t\tcase fd.IsMap():\n\t\t\tif fd.MapValue().Enum() != nil || fd.MapValue().Message() != nil {\n\t\t\t\tft = fs.Type.Elem()\n\t\t\t}\n\t\t\tisMessage = fd.MapValue().Message() != nil\n\t\tcase fd.IsList():\n\t\t\tif fd.Enum() != nil || fd.Message() != nil {\n\t\t\t\tft = fs.Type.Elem()\n\n\t\t\t\tif ft.Kind() == reflect.Slice {\n\t\t\t\t\tft = ft.Elem()\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tisMessage = fd.Message() != nil\n\t\tcase fd.Enum() != nil:\n\t\t\tft = fs.Type\n\t\t\tif fd.HasPresence() && ft.Kind() == reflect.Ptr {\n\t\t\t\tft = ft.Elem()\n\t\t\t}\n\t\tcase fd.Message() != nil:\n\t\t\tft = fs.Type\n\t\t\tisMessage = true\n\t\t}\n\t\tif isMessage && ft != nil && ft.Kind() != reflect.Ptr {\n\t\t\tft = reflect.PtrTo(ft) // never occurs for officially generated message types\n\t\t}\n\t\tif ft != nil {\n\t\t\tif mi.fieldTypes == nil {\n\t\t\t\tmi.fieldTypes = make(map[protoreflect.FieldNumber]any)\n\t\t\t}\n\t\t\tmi.fieldTypes[fd.Number()] = reflect.Zero(ft).Interface()\n\t\t}\n\t}\n}\n\ntype extensionMap map[int32]ExtensionField\n\nfunc (m *extensionMap) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {\n\tif m != nil {\n\t\tfor _, x := range *m {\n\t\t\txd := x.Type().TypeDescriptor()\n\t\t\tv := x.Value()\n\t\t\tif xd.IsList() && v.List().Len() == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !f(xd, v) {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\nfunc (m *extensionMap) Has(xd protoreflect.ExtensionTypeDescriptor) (ok bool) {\n\tif m == nil {\n\t\treturn false\n\t}\n\tx, ok := (*m)[int32(xd.Number())]\n\tif !ok {\n\t\treturn false\n\t}\n\tif x.isUnexpandedLazy() {\n\t\t// Avoid calling x.Value(), which triggers a lazy unmarshal.\n\t\treturn true\n\t}\n\tswitch {\n\tcase xd.IsList():\n\t\treturn x.Value().List().Len() > 0\n\tcase xd.IsMap():\n\t\treturn x.Value().Map().Len() > 0\n\t}\n\treturn true\n}\nfunc (m *extensionMap) Clear(xd protoreflect.ExtensionTypeDescriptor) {\n\tdelete(*m, int32(xd.Number()))\n}\nfunc (m *extensionMap) Get(xd protoreflect.ExtensionTypeDescriptor) protoreflect.Value {\n\tif m != nil {\n\t\tif x, ok := (*m)[int32(xd.Number())]; ok {\n\t\t\treturn x.Value()\n\t\t}\n\t}\n\treturn xd.Type().Zero()\n}\nfunc (m *extensionMap) Set(xd protoreflect.ExtensionTypeDescriptor, v protoreflect.Value) {\n\txt := xd.Type()\n\tisValid := true\n\tswitch {\n\tcase !xt.IsValidValue(v):\n\t\tisValid = false\n\tcase xd.IsList():\n\t\tisValid = v.List().IsValid()\n\tcase xd.IsMap():\n\t\tisValid = v.Map().IsValid()\n\tcase xd.Message() != nil:\n\t\tisValid = v.Message().IsValid()\n\t}\n\tif !isValid {\n\t\tpanic(fmt.Sprintf(\"%v: assigning invalid value\", xd.FullName()))\n\t}\n\n\tif *m == nil {\n\t\t*m = make(map[int32]ExtensionField)\n\t}\n\tvar x ExtensionField\n\tx.Set(xt, v)\n\t(*m)[int32(xd.Number())] = x\n}\nfunc (m *extensionMap) Mutable(xd protoreflect.ExtensionTypeDescriptor) protoreflect.Value {\n\tif xd.Kind() != protoreflect.MessageKind && xd.Kind() != protoreflect.GroupKind && !xd.IsList() && !xd.IsMap() {\n\t\tpanic(\"invalid Mutable on field with non-composite type\")\n\t}\n\tif x, ok := (*m)[int32(xd.Number())]; ok {\n\t\treturn x.Value()\n\t}\n\tv := xd.Type().New()\n\tm.Set(xd, v)\n\treturn v\n}\n\n// MessageState is a data structure that is nested as the first field in a\n// concrete message. It provides a way to implement the ProtoReflect method\n// in an allocation-free way without needing to have a shadow Go type generated\n// for every message type. This technique only works using unsafe.\n//\n// Example generated code:\n//\n//\ttype M struct {\n//\t\tstate protoimpl.MessageState\n//\n//\t\tField1 int32\n//\t\tField2 string\n//\t\tField3 *BarMessage\n//\t\t...\n//\t}\n//\n//\tfunc (m *M) ProtoReflect() protoreflect.Message {\n//\t\tmi := &file_fizz_buzz_proto_msgInfos[5]\n//\t\tif protoimpl.UnsafeEnabled && m != nil {\n//\t\t\tms := protoimpl.X.MessageStateOf(Pointer(m))\n//\t\t\tif ms.LoadMessageInfo() == nil {\n//\t\t\t\tms.StoreMessageInfo(mi)\n//\t\t\t}\n//\t\t\treturn ms\n//\t\t}\n//\t\treturn mi.MessageOf(m)\n//\t}\n//\n// The MessageState type holds a *MessageInfo, which must be atomically set to\n// the message info associated with a given message instance.\n// By unsafely converting a *M into a *MessageState, the MessageState object\n// has access to all the information needed to implement protobuf reflection.\n// It has access to the message info as its first field, and a pointer to the\n// MessageState is identical to a pointer to the concrete message value.\n//\n// Requirements:\n//   - The type M must implement protoreflect.ProtoMessage.\n//   - The address of m must not be nil.\n//   - The address of m and the address of m.state must be equal,\n//     even though they are different Go types.\ntype MessageState struct {\n\tpragma.NoUnkeyedLiterals\n\tpragma.DoNotCompare\n\tpragma.DoNotCopy\n\n\tatomicMessageInfo *MessageInfo\n}\n\ntype messageState MessageState\n\nvar (\n\t_ protoreflect.Message = (*messageState)(nil)\n\t_ unwrapper            = (*messageState)(nil)\n)\n\n// messageDataType is a tuple of a pointer to the message data and\n// a pointer to the message type. It is a generalized way of providing a\n// reflective view over a message instance. The disadvantage of this approach\n// is the need to allocate this tuple of 16B.\ntype messageDataType struct {\n\tp  pointer\n\tmi *MessageInfo\n}\n\ntype (\n\tmessageReflectWrapper messageDataType\n\tmessageIfaceWrapper   messageDataType\n)\n\nvar (\n\t_ protoreflect.Message      = (*messageReflectWrapper)(nil)\n\t_ unwrapper                 = (*messageReflectWrapper)(nil)\n\t_ protoreflect.ProtoMessage = (*messageIfaceWrapper)(nil)\n\t_ unwrapper                 = (*messageIfaceWrapper)(nil)\n)\n\n// MessageOf returns a reflective view over a message. The input must be a\n// pointer to a named Go struct. If the provided type has a ProtoReflect method,\n// it must be implemented by calling this method.\nfunc (mi *MessageInfo) MessageOf(m any) protoreflect.Message {\n\tif reflect.TypeOf(m) != mi.GoReflectType {\n\t\tpanic(fmt.Sprintf(\"type mismatch: got %T, want %v\", m, mi.GoReflectType))\n\t}\n\tp := pointerOfIface(m)\n\tif p.IsNil() {\n\t\treturn mi.nilMessage.Init(mi)\n\t}\n\treturn &messageReflectWrapper{p, mi}\n}\n\nfunc (m *messageReflectWrapper) pointer() pointer          { return m.p }\nfunc (m *messageReflectWrapper) messageInfo() *MessageInfo { return m.mi }\n\n// Reset implements the v1 proto.Message.Reset method.\nfunc (m *messageIfaceWrapper) Reset() {\n\tif mr, ok := m.protoUnwrap().(interface{ Reset() }); ok {\n\t\tmr.Reset()\n\t\treturn\n\t}\n\trv := reflect.ValueOf(m.protoUnwrap())\n\tif rv.Kind() == reflect.Ptr && !rv.IsNil() {\n\t\trv.Elem().Set(reflect.Zero(rv.Type().Elem()))\n\t}\n}\nfunc (m *messageIfaceWrapper) ProtoReflect() protoreflect.Message {\n\treturn (*messageReflectWrapper)(m)\n}\nfunc (m *messageIfaceWrapper) protoUnwrap() any {\n\treturn m.p.AsIfaceOf(m.mi.GoReflectType.Elem())\n}\n\n// checkField verifies that the provided field descriptor is valid.\n// Exactly one of the returned values is populated.\nfunc (mi *MessageInfo) checkField(fd protoreflect.FieldDescriptor) (*fieldInfo, protoreflect.ExtensionTypeDescriptor) {\n\tvar fi *fieldInfo\n\tif n := fd.Number(); 0 < n && int(n) < len(mi.denseFields) {\n\t\tfi = mi.denseFields[n]\n\t} else {\n\t\tfi = mi.fields[n]\n\t}\n\tif fi != nil {\n\t\tif fi.fieldDesc != fd {\n\t\t\tif got, want := fd.FullName(), fi.fieldDesc.FullName(); got != want {\n\t\t\t\tpanic(fmt.Sprintf(\"mismatching field: got %v, want %v\", got, want))\n\t\t\t}\n\t\t\tpanic(fmt.Sprintf(\"mismatching field: %v\", fd.FullName()))\n\t\t}\n\t\treturn fi, nil\n\t}\n\n\tif fd.IsExtension() {\n\t\tif got, want := fd.ContainingMessage().FullName(), mi.Desc.FullName(); got != want {\n\t\t\t// TODO: Should this be exact containing message descriptor match?\n\t\t\tpanic(fmt.Sprintf(\"extension %v has mismatching containing message: got %v, want %v\", fd.FullName(), got, want))\n\t\t}\n\t\tif !mi.Desc.ExtensionRanges().Has(fd.Number()) {\n\t\t\tpanic(fmt.Sprintf(\"extension %v extends %v outside the extension range\", fd.FullName(), mi.Desc.FullName()))\n\t\t}\n\t\txtd, ok := fd.(protoreflect.ExtensionTypeDescriptor)\n\t\tif !ok {\n\t\t\tpanic(fmt.Sprintf(\"extension %v does not implement protoreflect.ExtensionTypeDescriptor\", fd.FullName()))\n\t\t}\n\t\treturn nil, xtd\n\t}\n\tpanic(fmt.Sprintf(\"field %v is invalid\", fd.FullName()))\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.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 impl\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\ntype fieldInfo struct {\n\tfieldDesc protoreflect.FieldDescriptor\n\n\t// These fields are used for protobuf reflection support.\n\thas        func(pointer) bool\n\tclear      func(pointer)\n\tget        func(pointer) protoreflect.Value\n\tset        func(pointer, protoreflect.Value)\n\tmutable    func(pointer) protoreflect.Value\n\tnewMessage func() protoreflect.Message\n\tnewField   func() protoreflect.Value\n}\n\nfunc fieldInfoForMissing(fd protoreflect.FieldDescriptor) fieldInfo {\n\t// This never occurs for generated message types.\n\t// It implies that a hand-crafted type has missing Go fields\n\t// for specific protobuf message fields.\n\treturn fieldInfo{\n\t\tfieldDesc: fd,\n\t\thas: func(p pointer) bool {\n\t\t\treturn false\n\t\t},\n\t\tclear: func(p pointer) {\n\t\t\tpanic(\"missing Go struct field for \" + string(fd.FullName()))\n\t\t},\n\t\tget: func(p pointer) protoreflect.Value {\n\t\t\treturn fd.Default()\n\t\t},\n\t\tset: func(p pointer, v protoreflect.Value) {\n\t\t\tpanic(\"missing Go struct field for \" + string(fd.FullName()))\n\t\t},\n\t\tmutable: func(p pointer) protoreflect.Value {\n\t\t\tpanic(\"missing Go struct field for \" + string(fd.FullName()))\n\t\t},\n\t\tnewMessage: func() protoreflect.Message {\n\t\t\tpanic(\"missing Go struct field for \" + string(fd.FullName()))\n\t\t},\n\t\tnewField: func() protoreflect.Value {\n\t\t\tif v := fd.Default(); v.IsValid() {\n\t\t\t\treturn v\n\t\t\t}\n\t\t\tpanic(\"missing Go struct field for \" + string(fd.FullName()))\n\t\t},\n\t}\n}\n\nfunc fieldInfoForOneof(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter, ot reflect.Type) fieldInfo {\n\tft := fs.Type\n\tif ft.Kind() != reflect.Interface {\n\t\tpanic(fmt.Sprintf(\"field %v has invalid type: got %v, want interface kind\", fd.FullName(), ft))\n\t}\n\tif ot.Kind() != reflect.Struct {\n\t\tpanic(fmt.Sprintf(\"field %v has invalid type: got %v, want struct kind\", fd.FullName(), ot))\n\t}\n\tif !reflect.PtrTo(ot).Implements(ft) {\n\t\tpanic(fmt.Sprintf(\"field %v has invalid type: %v does not implement %v\", fd.FullName(), ot, ft))\n\t}\n\tconv := NewConverter(ot.Field(0).Type, fd)\n\tisMessage := fd.Message() != nil\n\n\t// TODO: Implement unsafe fast path?\n\tfieldOffset := offsetOf(fs)\n\treturn fieldInfo{\n\t\t// NOTE: The logic below intentionally assumes that oneof fields are\n\t\t// well-formatted. That is, the oneof interface never contains a\n\t\t// typed nil pointer to one of the wrapper structs.\n\n\t\tfieldDesc: fd,\n\t\thas: func(p pointer) bool {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\tclear: func(p pointer) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif rv.IsNil() || rv.Elem().Type().Elem() != ot {\n\t\t\t\t// NOTE: We intentionally don't check for rv.Elem().IsNil()\n\t\t\t\t// so that (*OneofWrapperType)(nil) gets cleared to nil.\n\t\t\t\treturn\n\t\t\t}\n\t\t\trv.Set(reflect.Zero(rv.Type()))\n\t\t},\n\t\tget: func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\trv = rv.Elem().Elem().Field(0)\n\t\t\treturn conv.PBValueOf(rv)\n\t\t},\n\t\tset: func(p pointer, v protoreflect.Value) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() {\n\t\t\t\trv.Set(reflect.New(ot))\n\t\t\t}\n\t\t\trv = rv.Elem().Elem().Field(0)\n\t\t\trv.Set(conv.GoValueOf(v))\n\t\t},\n\t\tmutable: func(p pointer) protoreflect.Value {\n\t\t\tif !isMessage {\n\t\t\t\tpanic(fmt.Sprintf(\"field %v with invalid Mutable call on field with non-composite type\", fd.FullName()))\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() {\n\t\t\t\trv.Set(reflect.New(ot))\n\t\t\t}\n\t\t\trv = rv.Elem().Elem().Field(0)\n\t\t\tif rv.Kind() == reflect.Ptr && rv.IsNil() {\n\t\t\t\trv.Set(conv.GoValueOf(protoreflect.ValueOfMessage(conv.New().Message())))\n\t\t\t}\n\t\t\treturn conv.PBValueOf(rv)\n\t\t},\n\t\tnewMessage: func() protoreflect.Message {\n\t\t\treturn conv.New().Message()\n\t\t},\n\t\tnewField: func() protoreflect.Value {\n\t\t\treturn conv.New()\n\t\t},\n\t}\n}\n\nfunc fieldInfoForMap(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo {\n\tft := fs.Type\n\tif ft.Kind() != reflect.Map {\n\t\tpanic(fmt.Sprintf(\"field %v has invalid type: got %v, want map kind\", fd.FullName(), ft))\n\t}\n\tconv := NewConverter(ft, fd)\n\n\t// TODO: Implement unsafe fast path?\n\tfieldOffset := offsetOf(fs)\n\treturn fieldInfo{\n\t\tfieldDesc: fd,\n\t\thas: func(p pointer) bool {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\treturn rv.Len() > 0\n\t\t},\n\t\tclear: func(p pointer) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\trv.Set(reflect.Zero(rv.Type()))\n\t\t},\n\t\tget: func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif rv.Len() == 0 {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn conv.PBValueOf(rv)\n\t\t},\n\t\tset: func(p pointer, v protoreflect.Value) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tpv := conv.GoValueOf(v)\n\t\t\tif pv.IsNil() {\n\t\t\t\tpanic(fmt.Sprintf(\"map field %v cannot be set with read-only value\", fd.FullName()))\n\t\t\t}\n\t\t\trv.Set(pv)\n\t\t},\n\t\tmutable: func(p pointer) protoreflect.Value {\n\t\t\tv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif v.IsNil() {\n\t\t\t\tv.Set(reflect.MakeMap(fs.Type))\n\t\t\t}\n\t\t\treturn conv.PBValueOf(v)\n\t\t},\n\t\tnewField: func() protoreflect.Value {\n\t\t\treturn conv.New()\n\t\t},\n\t}\n}\n\nfunc fieldInfoForList(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo {\n\tft := fs.Type\n\tif ft.Kind() != reflect.Slice {\n\t\tpanic(fmt.Sprintf(\"field %v has invalid type: got %v, want slice kind\", fd.FullName(), ft))\n\t}\n\tconv := NewConverter(reflect.PtrTo(ft), fd)\n\n\t// TODO: Implement unsafe fast path?\n\tfieldOffset := offsetOf(fs)\n\treturn fieldInfo{\n\t\tfieldDesc: fd,\n\t\thas: func(p pointer) bool {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\treturn rv.Len() > 0\n\t\t},\n\t\tclear: func(p pointer) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\trv.Set(reflect.Zero(rv.Type()))\n\t\t},\n\t\tget: func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type)\n\t\t\tif rv.Elem().Len() == 0 {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn conv.PBValueOf(rv)\n\t\t},\n\t\tset: func(p pointer, v protoreflect.Value) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tpv := conv.GoValueOf(v)\n\t\t\tif pv.IsNil() {\n\t\t\t\tpanic(fmt.Sprintf(\"list field %v cannot be set with read-only value\", fd.FullName()))\n\t\t\t}\n\t\t\trv.Set(pv.Elem())\n\t\t},\n\t\tmutable: func(p pointer) protoreflect.Value {\n\t\t\tv := p.Apply(fieldOffset).AsValueOf(fs.Type)\n\t\t\treturn conv.PBValueOf(v)\n\t\t},\n\t\tnewField: func() protoreflect.Value {\n\t\t\treturn conv.New()\n\t\t},\n\t}\n}\n\nvar (\n\tnilBytes   = reflect.ValueOf([]byte(nil))\n\temptyBytes = reflect.ValueOf([]byte{})\n)\n\nfunc fieldInfoForScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo {\n\tft := fs.Type\n\tnullable := fd.HasPresence()\n\tisBytes := ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8\n\tvar getter func(p pointer) protoreflect.Value\n\tif nullable {\n\t\tif ft.Kind() != reflect.Ptr && ft.Kind() != reflect.Slice {\n\t\t\t// This never occurs for generated message types.\n\t\t\t// Despite the protobuf type system specifying presence,\n\t\t\t// the Go field type cannot represent it.\n\t\t\tnullable = false\n\t\t}\n\t\tif ft.Kind() == reflect.Ptr {\n\t\t\tft = ft.Elem()\n\t\t}\n\t}\n\tconv := NewConverter(ft, fd)\n\tfieldOffset := offsetOf(fs)\n\n\t// Generate specialized getter functions to avoid going through reflect.Value\n\tif nullable {\n\t\tgetter = getterForNullableScalar(fd, fs, conv, fieldOffset)\n\t} else {\n\t\tgetter = getterForDirectScalar(fd, fs, conv, fieldOffset)\n\t}\n\n\treturn fieldInfo{\n\t\tfieldDesc: fd,\n\t\thas: func(p pointer) bool {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif nullable {\n\t\t\t\treturn !p.Apply(fieldOffset).Elem().IsNil()\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tswitch rv.Kind() {\n\t\t\tcase reflect.Bool:\n\t\t\t\treturn rv.Bool()\n\t\t\tcase reflect.Int32, reflect.Int64:\n\t\t\t\treturn rv.Int() != 0\n\t\t\tcase reflect.Uint32, reflect.Uint64:\n\t\t\t\treturn rv.Uint() != 0\n\t\t\tcase reflect.Float32, reflect.Float64:\n\t\t\t\treturn rv.Float() != 0 || math.Signbit(rv.Float())\n\t\t\tcase reflect.String, reflect.Slice:\n\t\t\t\treturn rv.Len() > 0\n\t\t\tdefault:\n\t\t\t\tpanic(fmt.Sprintf(\"field %v has invalid type: %v\", fd.FullName(), rv.Type())) // should never happen\n\t\t\t}\n\t\t},\n\t\tclear: func(p pointer) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\trv.Set(reflect.Zero(rv.Type()))\n\t\t},\n\t\tget: getter,\n\t\t// TODO: Implement unsafe fast path for set?\n\t\tset: func(p pointer, v protoreflect.Value) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif nullable && rv.Kind() == reflect.Ptr {\n\t\t\t\tif rv.IsNil() {\n\t\t\t\t\trv.Set(reflect.New(ft))\n\t\t\t\t}\n\t\t\t\trv = rv.Elem()\n\t\t\t}\n\t\t\trv.Set(conv.GoValueOf(v))\n\t\t\tif isBytes && rv.Len() == 0 {\n\t\t\t\tif nullable {\n\t\t\t\t\trv.Set(emptyBytes) // preserve presence\n\t\t\t\t} else {\n\t\t\t\t\trv.Set(nilBytes) // do not preserve presence\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tnewField: func() protoreflect.Value {\n\t\t\treturn conv.New()\n\t\t},\n\t}\n}\n\nfunc fieldInfoForMessage(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo {\n\tft := fs.Type\n\tconv := NewConverter(ft, fd)\n\n\t// TODO: Implement unsafe fast path?\n\tfieldOffset := offsetOf(fs)\n\treturn fieldInfo{\n\t\tfieldDesc: fd,\n\t\thas: func(p pointer) bool {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif fs.Type.Kind() != reflect.Ptr {\n\t\t\t\treturn !rv.IsZero()\n\t\t\t}\n\t\t\treturn !rv.IsNil()\n\t\t},\n\t\tclear: func(p pointer) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\trv.Set(reflect.Zero(rv.Type()))\n\t\t},\n\t\tget: func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\treturn conv.PBValueOf(rv)\n\t\t},\n\t\tset: func(p pointer, v protoreflect.Value) {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\trv.Set(conv.GoValueOf(v))\n\t\t\tif fs.Type.Kind() == reflect.Ptr && rv.IsNil() {\n\t\t\t\tpanic(fmt.Sprintf(\"field %v has invalid nil pointer\", fd.FullName()))\n\t\t\t}\n\t\t},\n\t\tmutable: func(p pointer) protoreflect.Value {\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif fs.Type.Kind() == reflect.Ptr && rv.IsNil() {\n\t\t\t\trv.Set(conv.GoValueOf(conv.New()))\n\t\t\t}\n\t\t\treturn conv.PBValueOf(rv)\n\t\t},\n\t\tnewMessage: func() protoreflect.Message {\n\t\t\treturn conv.New().Message()\n\t\t},\n\t\tnewField: func() protoreflect.Value {\n\t\t\treturn conv.New()\n\t\t},\n\t}\n}\n\ntype oneofInfo struct {\n\toneofDesc protoreflect.OneofDescriptor\n\twhich     func(pointer) protoreflect.FieldNumber\n}\n\nfunc makeOneofInfo(od protoreflect.OneofDescriptor, si structInfo, x exporter) *oneofInfo {\n\toi := &oneofInfo{oneofDesc: od}\n\tif od.IsSynthetic() {\n\t\tfs := si.fieldsByNumber[od.Fields().Get(0).Number()]\n\t\tfieldOffset := offsetOf(fs)\n\t\toi.which = func(p pointer) protoreflect.FieldNumber {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif rv.IsNil() { // valid on either *T or []byte\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\treturn od.Fields().Get(0).Number()\n\t\t}\n\t} else {\n\t\tfs := si.oneofsByName[od.Name()]\n\t\tfieldOffset := offsetOf(fs)\n\t\toi.which = func(p pointer) protoreflect.FieldNumber {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\tif rv.IsNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\trv = rv.Elem()\n\t\t\tif rv.IsNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\treturn si.oneofWrappersByType[rv.Type().Elem()]\n\t\t}\n\t}\n\treturn oi\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/message_reflect_field_gen.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 generated by generate-types. DO NOT EDIT.\n\npackage impl\n\nimport (\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nfunc getterForNullableScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, conv Converter, fieldOffset offset) func(p pointer) protoreflect.Value {\n\tft := fs.Type\n\tif ft.Kind() == reflect.Ptr {\n\t\tft = ft.Elem()\n\t}\n\tif fd.Kind() == protoreflect.EnumKind {\n\t\telemType := fs.Type.Elem()\n\t\t// Enums for nullable types.\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).Elem().AsValueOf(elemType)\n\t\t\tif rv.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn conv.PBValueOf(rv.Elem())\n\t\t}\n\t}\n\tswitch ft.Kind() {\n\tcase reflect.Bool:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).BoolPtr()\n\t\t\tif *x == nil {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn protoreflect.ValueOfBool(**x)\n\t\t}\n\tcase reflect.Int32:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Int32Ptr()\n\t\t\tif *x == nil {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn protoreflect.ValueOfInt32(**x)\n\t\t}\n\tcase reflect.Uint32:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Uint32Ptr()\n\t\t\tif *x == nil {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn protoreflect.ValueOfUint32(**x)\n\t\t}\n\tcase reflect.Int64:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Int64Ptr()\n\t\t\tif *x == nil {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn protoreflect.ValueOfInt64(**x)\n\t\t}\n\tcase reflect.Uint64:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Uint64Ptr()\n\t\t\tif *x == nil {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn protoreflect.ValueOfUint64(**x)\n\t\t}\n\tcase reflect.Float32:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Float32Ptr()\n\t\t\tif *x == nil {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn protoreflect.ValueOfFloat32(**x)\n\t\t}\n\tcase reflect.Float64:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Float64Ptr()\n\t\t\tif *x == nil {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn protoreflect.ValueOfFloat64(**x)\n\t\t}\n\tcase reflect.String:\n\t\tif fd.Kind() == protoreflect.BytesKind {\n\t\t\treturn func(p pointer) protoreflect.Value {\n\t\t\t\tif p.IsNil() {\n\t\t\t\t\treturn conv.Zero()\n\t\t\t\t}\n\t\t\t\tx := p.Apply(fieldOffset).StringPtr()\n\t\t\t\tif *x == nil {\n\t\t\t\t\treturn conv.Zero()\n\t\t\t\t}\n\t\t\t\tif len(**x) == 0 {\n\t\t\t\t\treturn protoreflect.ValueOfBytes(nil)\n\t\t\t\t}\n\t\t\t\treturn protoreflect.ValueOfBytes([]byte(**x))\n\t\t\t}\n\t\t}\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).StringPtr()\n\t\t\tif *x == nil {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn protoreflect.ValueOfString(**x)\n\t\t}\n\tcase reflect.Slice:\n\t\tif fd.Kind() == protoreflect.StringKind {\n\t\t\treturn func(p pointer) protoreflect.Value {\n\t\t\t\tif p.IsNil() {\n\t\t\t\t\treturn conv.Zero()\n\t\t\t\t}\n\t\t\t\tx := p.Apply(fieldOffset).Bytes()\n\t\t\t\tif len(*x) == 0 {\n\t\t\t\t\treturn conv.Zero()\n\t\t\t\t}\n\t\t\t\treturn protoreflect.ValueOfString(string(*x))\n\t\t\t}\n\t\t}\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Bytes()\n\t\t\tif *x == nil {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\treturn protoreflect.ValueOfBytes(*x)\n\t\t}\n\t}\n\tpanic(\"unexpected protobuf kind: \" + ft.Kind().String())\n}\n\nfunc getterForDirectScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, conv Converter, fieldOffset offset) func(p pointer) protoreflect.Value {\n\tft := fs.Type\n\tif fd.Kind() == protoreflect.EnumKind {\n\t\t// Enums for non nullable types.\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\trv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem()\n\t\t\treturn conv.PBValueOf(rv)\n\t\t}\n\t}\n\tswitch ft.Kind() {\n\tcase reflect.Bool:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Bool()\n\t\t\treturn protoreflect.ValueOfBool(*x)\n\t\t}\n\tcase reflect.Int32:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Int32()\n\t\t\treturn protoreflect.ValueOfInt32(*x)\n\t\t}\n\tcase reflect.Uint32:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Uint32()\n\t\t\treturn protoreflect.ValueOfUint32(*x)\n\t\t}\n\tcase reflect.Int64:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Int64()\n\t\t\treturn protoreflect.ValueOfInt64(*x)\n\t\t}\n\tcase reflect.Uint64:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Uint64()\n\t\t\treturn protoreflect.ValueOfUint64(*x)\n\t\t}\n\tcase reflect.Float32:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Float32()\n\t\t\treturn protoreflect.ValueOfFloat32(*x)\n\t\t}\n\tcase reflect.Float64:\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Float64()\n\t\t\treturn protoreflect.ValueOfFloat64(*x)\n\t\t}\n\tcase reflect.String:\n\t\tif fd.Kind() == protoreflect.BytesKind {\n\t\t\treturn func(p pointer) protoreflect.Value {\n\t\t\t\tif p.IsNil() {\n\t\t\t\t\treturn conv.Zero()\n\t\t\t\t}\n\t\t\t\tx := p.Apply(fieldOffset).String()\n\t\t\t\tif len(*x) == 0 {\n\t\t\t\t\treturn protoreflect.ValueOfBytes(nil)\n\t\t\t\t}\n\t\t\t\treturn protoreflect.ValueOfBytes([]byte(*x))\n\t\t\t}\n\t\t}\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).String()\n\t\t\treturn protoreflect.ValueOfString(*x)\n\t\t}\n\tcase reflect.Slice:\n\t\tif fd.Kind() == protoreflect.StringKind {\n\t\t\treturn func(p pointer) protoreflect.Value {\n\t\t\t\tif p.IsNil() {\n\t\t\t\t\treturn conv.Zero()\n\t\t\t\t}\n\t\t\t\tx := p.Apply(fieldOffset).Bytes()\n\t\t\t\treturn protoreflect.ValueOfString(string(*x))\n\t\t\t}\n\t\t}\n\t\treturn func(p pointer) protoreflect.Value {\n\t\t\tif p.IsNil() {\n\t\t\t\treturn conv.Zero()\n\t\t\t}\n\t\t\tx := p.Apply(fieldOffset).Bytes()\n\t\t\treturn protoreflect.ValueOfBytes(*x)\n\t\t}\n\t}\n\tpanic(\"unexpected protobuf kind: \" + ft.Kind().String())\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.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 generated by generate-types. DO NOT EDIT.\n\npackage impl\n\nimport (\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\nfunc (m *messageState) Descriptor() protoreflect.MessageDescriptor {\n\treturn m.messageInfo().Desc\n}\nfunc (m *messageState) Type() protoreflect.MessageType {\n\treturn m.messageInfo()\n}\nfunc (m *messageState) New() protoreflect.Message {\n\treturn m.messageInfo().New()\n}\nfunc (m *messageState) Interface() protoreflect.ProtoMessage {\n\treturn m.protoUnwrap().(protoreflect.ProtoMessage)\n}\nfunc (m *messageState) protoUnwrap() any {\n\treturn m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem())\n}\nfunc (m *messageState) ProtoMethods() *protoiface.Methods {\n\tmi := m.messageInfo()\n\tmi.init()\n\treturn &mi.methods\n}\n\n// ProtoMessageInfo is a pseudo-internal API for allowing the v1 code\n// to be able to retrieve a v2 MessageInfo struct.\n//\n// WARNING: This method is exempt from the compatibility promise and\n// may be removed in the future without warning.\nfunc (m *messageState) ProtoMessageInfo() *MessageInfo {\n\treturn m.messageInfo()\n}\n\nfunc (m *messageState) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {\n\tmi := m.messageInfo()\n\tmi.init()\n\tfor _, ri := range mi.rangeInfos {\n\t\tswitch ri := ri.(type) {\n\t\tcase *fieldInfo:\n\t\t\tif ri.has(m.pointer()) {\n\t\t\t\tif !f(ri.fieldDesc, ri.get(m.pointer())) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\tcase *oneofInfo:\n\t\t\tif n := ri.which(m.pointer()); n > 0 {\n\t\t\t\tfi := mi.fields[n]\n\t\t\t\tif !f(fi.fieldDesc, fi.get(m.pointer())) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tmi.extensionMap(m.pointer()).Range(f)\n}\nfunc (m *messageState) Has(fd protoreflect.FieldDescriptor) bool {\n\tmi := m.messageInfo()\n\tmi.init()\n\tif fi, xd := mi.checkField(fd); fi != nil {\n\t\treturn fi.has(m.pointer())\n\t} else {\n\t\treturn mi.extensionMap(m.pointer()).Has(xd)\n\t}\n}\nfunc (m *messageState) Clear(fd protoreflect.FieldDescriptor) {\n\tmi := m.messageInfo()\n\tmi.init()\n\tif fi, xd := mi.checkField(fd); fi != nil {\n\t\tfi.clear(m.pointer())\n\t} else {\n\t\tmi.extensionMap(m.pointer()).Clear(xd)\n\t}\n}\nfunc (m *messageState) Get(fd protoreflect.FieldDescriptor) protoreflect.Value {\n\tmi := m.messageInfo()\n\tmi.init()\n\tif fi, xd := mi.checkField(fd); fi != nil {\n\t\treturn fi.get(m.pointer())\n\t} else {\n\t\treturn mi.extensionMap(m.pointer()).Get(xd)\n\t}\n}\nfunc (m *messageState) Set(fd protoreflect.FieldDescriptor, v protoreflect.Value) {\n\tmi := m.messageInfo()\n\tmi.init()\n\tif fi, xd := mi.checkField(fd); fi != nil {\n\t\tfi.set(m.pointer(), v)\n\t} else {\n\t\tmi.extensionMap(m.pointer()).Set(xd, v)\n\t}\n}\nfunc (m *messageState) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {\n\tmi := m.messageInfo()\n\tmi.init()\n\tif fi, xd := mi.checkField(fd); fi != nil {\n\t\treturn fi.mutable(m.pointer())\n\t} else {\n\t\treturn mi.extensionMap(m.pointer()).Mutable(xd)\n\t}\n}\nfunc (m *messageState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {\n\tmi := m.messageInfo()\n\tmi.init()\n\tif fi, xd := mi.checkField(fd); fi != nil {\n\t\treturn fi.newField()\n\t} else {\n\t\treturn xd.Type().New()\n\t}\n}\nfunc (m *messageState) WhichOneof(od protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {\n\tmi := m.messageInfo()\n\tmi.init()\n\tif oi := mi.oneofs[od.Name()]; oi != nil && oi.oneofDesc == od {\n\t\treturn od.Fields().ByNumber(oi.which(m.pointer()))\n\t}\n\tpanic(\"invalid oneof descriptor \" + string(od.FullName()) + \" for message \" + string(m.Descriptor().FullName()))\n}\nfunc (m *messageState) GetUnknown() protoreflect.RawFields {\n\tmi := m.messageInfo()\n\tmi.init()\n\treturn mi.getUnknown(m.pointer())\n}\nfunc (m *messageState) SetUnknown(b protoreflect.RawFields) {\n\tmi := m.messageInfo()\n\tmi.init()\n\tmi.setUnknown(m.pointer(), b)\n}\nfunc (m *messageState) IsValid() bool {\n\treturn !m.pointer().IsNil()\n}\n\nfunc (m *messageReflectWrapper) Descriptor() protoreflect.MessageDescriptor {\n\treturn m.messageInfo().Desc\n}\nfunc (m *messageReflectWrapper) Type() protoreflect.MessageType {\n\treturn m.messageInfo()\n}\nfunc (m *messageReflectWrapper) New() protoreflect.Message {\n\treturn m.messageInfo().New()\n}\nfunc (m *messageReflectWrapper) Interface() protoreflect.ProtoMessage {\n\tif m, ok := m.protoUnwrap().(protoreflect.ProtoMessage); ok {\n\t\treturn m\n\t}\n\treturn (*messageIfaceWrapper)(m)\n}\nfunc (m *messageReflectWrapper) protoUnwrap() any {\n\treturn m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem())\n}\nfunc (m *messageReflectWrapper) ProtoMethods() *protoiface.Methods {\n\tmi := m.messageInfo()\n\tmi.init()\n\treturn &mi.methods\n}\n\n// ProtoMessageInfo is a pseudo-internal API for allowing the v1 code\n// to be able to retrieve a v2 MessageInfo struct.\n//\n// WARNING: This method is exempt from the compatibility promise and\n// may be removed in the future without warning.\nfunc (m *messageReflectWrapper) ProtoMessageInfo() *MessageInfo {\n\treturn m.messageInfo()\n}\n\nfunc (m *messageReflectWrapper) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {\n\tmi := m.messageInfo()\n\tmi.init()\n\tfor _, ri := range mi.rangeInfos {\n\t\tswitch ri := ri.(type) {\n\t\tcase *fieldInfo:\n\t\t\tif ri.has(m.pointer()) {\n\t\t\t\tif !f(ri.fieldDesc, ri.get(m.pointer())) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\tcase *oneofInfo:\n\t\t\tif n := ri.which(m.pointer()); n > 0 {\n\t\t\t\tfi := mi.fields[n]\n\t\t\t\tif !f(fi.fieldDesc, fi.get(m.pointer())) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tmi.extensionMap(m.pointer()).Range(f)\n}\nfunc (m *messageReflectWrapper) Has(fd protoreflect.FieldDescriptor) bool {\n\tmi := m.messageInfo()\n\tmi.init()\n\tif fi, xd := mi.checkField(fd); fi != nil {\n\t\treturn fi.has(m.pointer())\n\t} else {\n\t\treturn mi.extensionMap(m.pointer()).Has(xd)\n\t}\n}\nfunc (m *messageReflectWrapper) Clear(fd protoreflect.FieldDescriptor) {\n\tmi := m.messageInfo()\n\tmi.init()\n\tif fi, xd := mi.checkField(fd); fi != nil {\n\t\tfi.clear(m.pointer())\n\t} else {\n\t\tmi.extensionMap(m.pointer()).Clear(xd)\n\t}\n}\nfunc (m *messageReflectWrapper) Get(fd protoreflect.FieldDescriptor) protoreflect.Value {\n\tmi := m.messageInfo()\n\tmi.init()\n\tif fi, xd := mi.checkField(fd); fi != nil {\n\t\treturn fi.get(m.pointer())\n\t} else {\n\t\treturn mi.extensionMap(m.pointer()).Get(xd)\n\t}\n}\nfunc (m *messageReflectWrapper) Set(fd protoreflect.FieldDescriptor, v protoreflect.Value) {\n\tmi := m.messageInfo()\n\tmi.init()\n\tif fi, xd := mi.checkField(fd); fi != nil {\n\t\tfi.set(m.pointer(), v)\n\t} else {\n\t\tmi.extensionMap(m.pointer()).Set(xd, v)\n\t}\n}\nfunc (m *messageReflectWrapper) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {\n\tmi := m.messageInfo()\n\tmi.init()\n\tif fi, xd := mi.checkField(fd); fi != nil {\n\t\treturn fi.mutable(m.pointer())\n\t} else {\n\t\treturn mi.extensionMap(m.pointer()).Mutable(xd)\n\t}\n}\nfunc (m *messageReflectWrapper) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {\n\tmi := m.messageInfo()\n\tmi.init()\n\tif fi, xd := mi.checkField(fd); fi != nil {\n\t\treturn fi.newField()\n\t} else {\n\t\treturn xd.Type().New()\n\t}\n}\nfunc (m *messageReflectWrapper) WhichOneof(od protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {\n\tmi := m.messageInfo()\n\tmi.init()\n\tif oi := mi.oneofs[od.Name()]; oi != nil && oi.oneofDesc == od {\n\t\treturn od.Fields().ByNumber(oi.which(m.pointer()))\n\t}\n\tpanic(\"invalid oneof descriptor \" + string(od.FullName()) + \" for message \" + string(m.Descriptor().FullName()))\n}\nfunc (m *messageReflectWrapper) GetUnknown() protoreflect.RawFields {\n\tmi := m.messageInfo()\n\tmi.init()\n\treturn mi.getUnknown(m.pointer())\n}\nfunc (m *messageReflectWrapper) SetUnknown(b protoreflect.RawFields) {\n\tmi := m.messageInfo()\n\tmi.init()\n\tmi.setUnknown(m.pointer(), b)\n}\nfunc (m *messageReflectWrapper) IsValid() bool {\n\treturn !m.pointer().IsNil()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.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 impl\n\nimport (\n\t\"reflect\"\n\t\"sync/atomic\"\n\t\"unsafe\"\n\n\t\"google.golang.org/protobuf/internal/protolazy\"\n)\n\nconst UnsafeEnabled = true\n\n// Pointer is an opaque pointer type.\ntype Pointer unsafe.Pointer\n\n// offset represents the offset to a struct field, accessible from a pointer.\n// The offset is the byte offset to the field from the start of the struct.\ntype offset uintptr\n\n// offsetOf returns a field offset for the struct field.\nfunc offsetOf(f reflect.StructField) offset {\n\treturn offset(f.Offset)\n}\n\n// IsValid reports whether the offset is valid.\nfunc (f offset) IsValid() bool { return f != invalidOffset }\n\n// invalidOffset is an invalid field offset.\nvar invalidOffset = ^offset(0)\n\n// zeroOffset is a noop when calling pointer.Apply.\nvar zeroOffset = offset(0)\n\n// pointer is a pointer to a message struct or field.\ntype pointer struct{ p unsafe.Pointer }\n\n// pointerOf returns p as a pointer.\nfunc pointerOf(p Pointer) pointer {\n\treturn pointer{p: unsafe.Pointer(p)}\n}\n\n// pointerOfValue returns v as a pointer.\nfunc pointerOfValue(v reflect.Value) pointer {\n\treturn pointer{p: unsafe.Pointer(v.Pointer())}\n}\n\n// pointerOfIface returns the pointer portion of an interface.\nfunc pointerOfIface(v any) pointer {\n\ttype ifaceHeader struct {\n\t\tType unsafe.Pointer\n\t\tData unsafe.Pointer\n\t}\n\treturn pointer{p: (*ifaceHeader)(unsafe.Pointer(&v)).Data}\n}\n\n// IsNil reports whether the pointer is nil.\nfunc (p pointer) IsNil() bool {\n\treturn p.p == nil\n}\n\n// Apply adds an offset to the pointer to derive a new pointer\n// to a specified field. The pointer must be valid and pointing at a struct.\nfunc (p pointer) Apply(f offset) pointer {\n\tif p.IsNil() {\n\t\tpanic(\"invalid nil pointer\")\n\t}\n\treturn pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))}\n}\n\n// AsValueOf treats p as a pointer to an object of type t and returns the value.\n// It is equivalent to reflect.ValueOf(p.AsIfaceOf(t))\nfunc (p pointer) AsValueOf(t reflect.Type) reflect.Value {\n\treturn reflect.NewAt(t, p.p)\n}\n\n// AsIfaceOf treats p as a pointer to an object of type t and returns the value.\n// It is equivalent to p.AsValueOf(t).Interface()\nfunc (p pointer) AsIfaceOf(t reflect.Type) any {\n\t// TODO: Use tricky unsafe magic to directly create ifaceHeader.\n\treturn p.AsValueOf(t).Interface()\n}\n\nfunc (p pointer) Bool() *bool                           { return (*bool)(p.p) }\nfunc (p pointer) BoolPtr() **bool                       { return (**bool)(p.p) }\nfunc (p pointer) BoolSlice() *[]bool                    { return (*[]bool)(p.p) }\nfunc (p pointer) Int32() *int32                         { return (*int32)(p.p) }\nfunc (p pointer) Int32Ptr() **int32                     { return (**int32)(p.p) }\nfunc (p pointer) Int32Slice() *[]int32                  { return (*[]int32)(p.p) }\nfunc (p pointer) Int64() *int64                         { return (*int64)(p.p) }\nfunc (p pointer) Int64Ptr() **int64                     { return (**int64)(p.p) }\nfunc (p pointer) Int64Slice() *[]int64                  { return (*[]int64)(p.p) }\nfunc (p pointer) Uint32() *uint32                       { return (*uint32)(p.p) }\nfunc (p pointer) Uint32Ptr() **uint32                   { return (**uint32)(p.p) }\nfunc (p pointer) Uint32Slice() *[]uint32                { return (*[]uint32)(p.p) }\nfunc (p pointer) Uint64() *uint64                       { return (*uint64)(p.p) }\nfunc (p pointer) Uint64Ptr() **uint64                   { return (**uint64)(p.p) }\nfunc (p pointer) Uint64Slice() *[]uint64                { return (*[]uint64)(p.p) }\nfunc (p pointer) Float32() *float32                     { return (*float32)(p.p) }\nfunc (p pointer) Float32Ptr() **float32                 { return (**float32)(p.p) }\nfunc (p pointer) Float32Slice() *[]float32              { return (*[]float32)(p.p) }\nfunc (p pointer) Float64() *float64                     { return (*float64)(p.p) }\nfunc (p pointer) Float64Ptr() **float64                 { return (**float64)(p.p) }\nfunc (p pointer) Float64Slice() *[]float64              { return (*[]float64)(p.p) }\nfunc (p pointer) String() *string                       { return (*string)(p.p) }\nfunc (p pointer) StringPtr() **string                   { return (**string)(p.p) }\nfunc (p pointer) StringSlice() *[]string                { return (*[]string)(p.p) }\nfunc (p pointer) Bytes() *[]byte                        { return (*[]byte)(p.p) }\nfunc (p pointer) BytesPtr() **[]byte                    { return (**[]byte)(p.p) }\nfunc (p pointer) BytesSlice() *[][]byte                 { return (*[][]byte)(p.p) }\nfunc (p pointer) Extensions() *map[int32]ExtensionField { return (*map[int32]ExtensionField)(p.p) }\nfunc (p pointer) LazyInfoPtr() **protolazy.XXX_lazyUnmarshalInfo {\n\treturn (**protolazy.XXX_lazyUnmarshalInfo)(p.p)\n}\n\nfunc (p pointer) PresenceInfo() presence {\n\treturn presence{P: p.p}\n}\n\nfunc (p pointer) Elem() pointer {\n\treturn pointer{p: *(*unsafe.Pointer)(p.p)}\n}\n\n// PointerSlice 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) PointerSlice() []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// AppendPointerSlice appends v to p, which must be a []*T.\nfunc (p pointer) AppendPointerSlice(v pointer) {\n\t*(*[]pointer)(p.p) = append(*(*[]pointer)(p.p), v)\n}\n\n// SetPointer sets *p to v.\nfunc (p pointer) SetPointer(v pointer) {\n\t*(*unsafe.Pointer)(p.p) = (unsafe.Pointer)(v.p)\n}\n\nfunc (p pointer) growBoolSlice(addCap int) {\n\tsp := p.BoolSlice()\n\ts := make([]bool, 0, addCap+len(*sp))\n\ts = s[:len(*sp)]\n\tcopy(s, *sp)\n\t*sp = s\n}\n\nfunc (p pointer) growInt32Slice(addCap int) {\n\tsp := p.Int32Slice()\n\ts := make([]int32, 0, addCap+len(*sp))\n\ts = s[:len(*sp)]\n\tcopy(s, *sp)\n\t*sp = s\n}\n\nfunc (p pointer) growUint32Slice(addCap int) {\n\tp.growInt32Slice(addCap)\n}\n\nfunc (p pointer) growFloat32Slice(addCap int) {\n\tp.growInt32Slice(addCap)\n}\n\nfunc (p pointer) growInt64Slice(addCap int) {\n\tsp := p.Int64Slice()\n\ts := make([]int64, 0, addCap+len(*sp))\n\ts = s[:len(*sp)]\n\tcopy(s, *sp)\n\t*sp = s\n}\n\nfunc (p pointer) growUint64Slice(addCap int) {\n\tp.growInt64Slice(addCap)\n}\n\nfunc (p pointer) growFloat64Slice(addCap int) {\n\tp.growInt64Slice(addCap)\n}\n\n// Static check that MessageState does not exceed the size of a pointer.\nconst _ = uint(unsafe.Sizeof(unsafe.Pointer(nil)) - unsafe.Sizeof(MessageState{}))\n\nfunc (Export) MessageStateOf(p Pointer) *messageState {\n\t// Super-tricky - see documentation on MessageState.\n\treturn (*messageState)(unsafe.Pointer(p))\n}\nfunc (ms *messageState) pointer() pointer {\n\t// Super-tricky - see documentation on MessageState.\n\treturn pointer{p: unsafe.Pointer(ms)}\n}\nfunc (ms *messageState) messageInfo() *MessageInfo {\n\tmi := ms.LoadMessageInfo()\n\tif mi == nil {\n\t\tpanic(\"invalid nil message info; this suggests memory corruption due to a race or shallow copy on the message struct\")\n\t}\n\treturn mi\n}\nfunc (ms *messageState) LoadMessageInfo() *MessageInfo {\n\treturn (*MessageInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&ms.atomicMessageInfo))))\n}\nfunc (ms *messageState) StoreMessageInfo(mi *MessageInfo) {\n\tatomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&ms.atomicMessageInfo)), unsafe.Pointer(mi))\n}\n\ntype atomicNilMessage struct{ p unsafe.Pointer } // p is a *messageReflectWrapper\n\nfunc (m *atomicNilMessage) Init(mi *MessageInfo) *messageReflectWrapper {\n\tif p := atomic.LoadPointer(&m.p); p != nil {\n\t\treturn (*messageReflectWrapper)(p)\n\t}\n\tw := &messageReflectWrapper{mi: mi}\n\tatomic.CompareAndSwapPointer(&m.p, nil, (unsafe.Pointer)(w))\n\treturn (*messageReflectWrapper)(atomic.LoadPointer(&m.p))\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe_opaque.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 impl\n\nimport (\n\t\"sync/atomic\"\n\t\"unsafe\"\n)\n\nfunc (p pointer) AtomicGetPointer() pointer {\n\treturn pointer{p: atomic.LoadPointer((*unsafe.Pointer)(p.p))}\n}\n\nfunc (p pointer) AtomicSetPointer(v pointer) {\n\tatomic.StorePointer((*unsafe.Pointer)(p.p), v.p)\n}\n\nfunc (p pointer) AtomicSetNilPointer() {\n\tatomic.StorePointer((*unsafe.Pointer)(p.p), unsafe.Pointer(nil))\n}\n\nfunc (p pointer) AtomicSetPointerIfNil(v pointer) pointer {\n\tif atomic.CompareAndSwapPointer((*unsafe.Pointer)(p.p), unsafe.Pointer(nil), v.p) {\n\t\treturn v\n\t}\n\treturn pointer{p: atomic.LoadPointer((*unsafe.Pointer)(p.p))}\n}\n\ntype atomicV1MessageInfo struct{ p Pointer }\n\nfunc (mi *atomicV1MessageInfo) Get() Pointer {\n\treturn Pointer(atomic.LoadPointer((*unsafe.Pointer)(&mi.p)))\n}\n\nfunc (mi *atomicV1MessageInfo) SetIfNil(p Pointer) Pointer {\n\tif atomic.CompareAndSwapPointer((*unsafe.Pointer)(&mi.p), nil, unsafe.Pointer(p)) {\n\t\treturn p\n\t}\n\treturn mi.Get()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/presence.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 impl\n\nimport (\n\t\"sync/atomic\"\n\t\"unsafe\"\n)\n\n// presenceSize represents the size of a presence set, which should be the largest index of the set+1\ntype presenceSize uint32\n\n// presence is the internal representation of the bitmap array in a generated protobuf\ntype presence struct {\n\t// This is a pointer to the beginning of an array of uint32\n\tP unsafe.Pointer\n}\n\nfunc (p presence) toElem(num uint32) (ret *uint32) {\n\tconst (\n\t\tbitsPerByte = 8\n\t\tsiz         = unsafe.Sizeof(*ret)\n\t)\n\t// p.P points to an array of uint32, num is the bit in this array that the\n\t// caller wants to check/manipulate. Calculate the index in the array that\n\t// contains this specific bit. E.g.: 76 / 32 = 2 (integer division).\n\toffset := uintptr(num) / (siz * bitsPerByte) * siz\n\treturn (*uint32)(unsafe.Pointer(uintptr(p.P) + offset))\n}\n\n// Present checks for the presence of a specific field number in a presence set.\nfunc (p presence) Present(num uint32) bool {\n\treturn Export{}.Present(p.toElem(num), num)\n}\n\n// SetPresent adds presence for a specific field number in a presence set.\nfunc (p presence) SetPresent(num uint32, size presenceSize) {\n\tExport{}.SetPresent(p.toElem(num), num, uint32(size))\n}\n\n// SetPresentUnatomic adds presence for a specific field number in a presence set without using\n// atomic operations. Only to be called during unmarshaling.\nfunc (p presence) SetPresentUnatomic(num uint32, size presenceSize) {\n\tExport{}.SetPresentNonAtomic(p.toElem(num), num, uint32(size))\n}\n\n// ClearPresent removes presence for a specific field number in a presence set.\nfunc (p presence) ClearPresent(num uint32) {\n\tExport{}.ClearPresent(p.toElem(num), num)\n}\n\n// LoadPresenceCache (together with PresentInCache) allows for a\n// cached version of checking for presence without re-reading the word\n// for every field. It is optimized for efficiency and assumes no\n// simltaneous mutation of the presence set (or at least does not have\n// a problem with simultaneous mutation giving inconsistent results).\nfunc (p presence) LoadPresenceCache() (current uint32) {\n\tif p.P == nil {\n\t\treturn 0\n\t}\n\treturn atomic.LoadUint32((*uint32)(p.P))\n}\n\n// PresentInCache reads presence from a cached word in the presence\n// bitmap. It caches up a new word if the bit is outside the\n// word. This is for really fast iteration through bitmaps in cases\n// where we either know that the bitmap will not be altered, or we\n// don't care about inconsistencies caused by simultaneous writes.\nfunc (p presence) PresentInCache(num uint32, cachedElement *uint32, current *uint32) bool {\n\tif num/32 != *cachedElement {\n\t\to := uintptr(num/32) * unsafe.Sizeof(uint32(0))\n\t\tq := (*uint32)(unsafe.Pointer(uintptr(p.P) + o))\n\t\t*current = atomic.LoadUint32(q)\n\t\t*cachedElement = num / 32\n\t}\n\treturn (*current & (1 << (num % 32))) > 0\n}\n\n// AnyPresent checks if any field is marked as present in the bitmap.\nfunc (p presence) AnyPresent(size presenceSize) bool {\n\tn := uintptr((size + 31) / 32)\n\tfor j := uintptr(0); j < n; j++ {\n\t\to := j * unsafe.Sizeof(uint32(0))\n\t\tq := (*uint32)(unsafe.Pointer(uintptr(p.P) + o))\n\t\tb := atomic.LoadUint32(q)\n\t\tif b > 0 {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// toRaceDetectData finds the preceding RaceDetectHookData in a\n// message by using pointer arithmetic. As the type of the presence\n// set (bitmap) varies with the number of fields in the protobuf, we\n// can not have a struct type containing the array and the\n// RaceDetectHookData.  instead the RaceDetectHookData is placed\n// immediately before the bitmap array, and we find it by walking\n// backwards in the struct.\n//\n// This method is only called from the race-detect version of the code,\n// so RaceDetectHookData is never an empty struct.\nfunc (p presence) toRaceDetectData() *RaceDetectHookData {\n\tvar template struct {\n\t\td RaceDetectHookData\n\t\ta [1]uint32\n\t}\n\to := (uintptr(unsafe.Pointer(&template.a)) - uintptr(unsafe.Pointer(&template.d)))\n\treturn (*RaceDetectHookData)(unsafe.Pointer(uintptr(p.P) - o))\n}\n\nfunc atomicLoadShadowPresence(p **[]byte) *[]byte {\n\treturn (*[]byte)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))\n}\nfunc atomicStoreShadowPresence(p **[]byte, v *[]byte) {\n\tatomic.CompareAndSwapPointer((*unsafe.Pointer)(unsafe.Pointer(p)), nil, unsafe.Pointer(v))\n}\n\n// findPointerToRaceDetectData finds the preceding RaceDetectHookData\n// in a message by using pointer arithmetic. For the methods called\n// directy from generated code, we don't have a pointer to the\n// beginning of the presence set, but a pointer inside the array. As\n// we know the index of the bit we're manipulating (num), we can\n// calculate which element of the array ptr is pointing to. With that\n// information we find the preceding RaceDetectHookData and can\n// manipulate the shadow bitmap.\n//\n// This method is only called from the race-detect version of the\n// code, so RaceDetectHookData is never an empty struct.\nfunc findPointerToRaceDetectData(ptr *uint32, num uint32) *RaceDetectHookData {\n\tvar template struct {\n\t\td RaceDetectHookData\n\t\ta [1]uint32\n\t}\n\to := (uintptr(unsafe.Pointer(&template.a)) - uintptr(unsafe.Pointer(&template.d))) + uintptr(num/32)*unsafe.Sizeof(uint32(0))\n\treturn (*RaceDetectHookData)(unsafe.Pointer(uintptr(unsafe.Pointer(ptr)) - o))\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/impl/validate.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 impl\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"math/bits\"\n\t\"reflect\"\n\t\"unicode/utf8\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/encoding/messageset\"\n\t\"google.golang.org/protobuf/internal/flags\"\n\t\"google.golang.org/protobuf/internal/genid\"\n\t\"google.golang.org/protobuf/internal/strs\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/reflect/protoregistry\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\n// ValidationStatus is the result of validating the wire-format encoding of a message.\ntype ValidationStatus int\n\nconst (\n\t// ValidationUnknown indicates that unmarshaling the message might succeed or fail.\n\t// The validator was unable to render a judgement.\n\t//\n\t// The only causes of this status are an aberrant message type appearing somewhere\n\t// in the message or a failure in the extension resolver.\n\tValidationUnknown ValidationStatus = iota + 1\n\n\t// ValidationInvalid indicates that unmarshaling the message will fail.\n\tValidationInvalid\n\n\t// ValidationValid indicates that unmarshaling the message will succeed.\n\tValidationValid\n\n\t// ValidationWrongWireType indicates that a validated field does not have\n\t// the expected wire type.\n\tValidationWrongWireType\n)\n\nfunc (v ValidationStatus) String() string {\n\tswitch v {\n\tcase ValidationUnknown:\n\t\treturn \"ValidationUnknown\"\n\tcase ValidationInvalid:\n\t\treturn \"ValidationInvalid\"\n\tcase ValidationValid:\n\t\treturn \"ValidationValid\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"ValidationStatus(%d)\", int(v))\n\t}\n}\n\n// Validate determines whether the contents of the buffer are a valid wire encoding\n// of the message type.\n//\n// This function is exposed for testing.\nfunc Validate(mt protoreflect.MessageType, in protoiface.UnmarshalInput) (out protoiface.UnmarshalOutput, _ ValidationStatus) {\n\tmi, ok := mt.(*MessageInfo)\n\tif !ok {\n\t\treturn out, ValidationUnknown\n\t}\n\tif in.Resolver == nil {\n\t\tin.Resolver = protoregistry.GlobalTypes\n\t}\n\tif in.Depth == 0 {\n\t\tin.Depth = protowire.DefaultRecursionLimit\n\t}\n\to, st := mi.validate(in.Buf, 0, unmarshalOptions{\n\t\tflags:    in.Flags,\n\t\tresolver: in.Resolver,\n\t\tdepth:    in.Depth,\n\t})\n\tif o.initialized {\n\t\tout.Flags |= protoiface.UnmarshalInitialized\n\t}\n\treturn out, st\n}\n\ntype validationInfo struct {\n\tmi               *MessageInfo\n\ttyp              validationType\n\tkeyType, valType validationType\n\n\t// For non-required fields, requiredBit is 0.\n\t//\n\t// For required fields, requiredBit's nth bit is set, where n is a\n\t// unique index in the range [0, MessageInfo.numRequiredFields).\n\t//\n\t// If there are more than 64 required fields, requiredBit is 0.\n\trequiredBit uint64\n}\n\ntype validationType uint8\n\nconst (\n\tvalidationTypeOther validationType = iota\n\tvalidationTypeMessage\n\tvalidationTypeGroup\n\tvalidationTypeMap\n\tvalidationTypeRepeatedVarint\n\tvalidationTypeRepeatedFixed32\n\tvalidationTypeRepeatedFixed64\n\tvalidationTypeVarint\n\tvalidationTypeFixed32\n\tvalidationTypeFixed64\n\tvalidationTypeBytes\n\tvalidationTypeUTF8String\n\tvalidationTypeMessageSetItem\n)\n\nfunc newFieldValidationInfo(mi *MessageInfo, si structInfo, fd protoreflect.FieldDescriptor, ft reflect.Type) validationInfo {\n\tvar vi validationInfo\n\tswitch {\n\tcase fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic():\n\t\tswitch fd.Kind() {\n\t\tcase protoreflect.MessageKind:\n\t\t\tvi.typ = validationTypeMessage\n\t\t\tif ot, ok := si.oneofWrappersByNumber[fd.Number()]; ok {\n\t\t\t\tvi.mi = getMessageInfo(ot.Field(0).Type)\n\t\t\t}\n\t\tcase protoreflect.GroupKind:\n\t\t\tvi.typ = validationTypeGroup\n\t\t\tif ot, ok := si.oneofWrappersByNumber[fd.Number()]; ok {\n\t\t\t\tvi.mi = getMessageInfo(ot.Field(0).Type)\n\t\t\t}\n\t\tcase protoreflect.StringKind:\n\t\t\tif strs.EnforceUTF8(fd) {\n\t\t\t\tvi.typ = validationTypeUTF8String\n\t\t\t}\n\t\t}\n\tdefault:\n\t\tvi = newValidationInfo(fd, ft)\n\t}\n\tif fd.Cardinality() == protoreflect.Required {\n\t\t// Avoid overflow. The required field check is done with a 64-bit mask, with\n\t\t// any message containing more than 64 required fields always reported as\n\t\t// potentially uninitialized, so it is not important to get a precise count\n\t\t// of the required fields past 64.\n\t\tif mi.numRequiredFields < math.MaxUint8 {\n\t\t\tmi.numRequiredFields++\n\t\t\tvi.requiredBit = 1 << (mi.numRequiredFields - 1)\n\t\t}\n\t}\n\treturn vi\n}\n\nfunc newValidationInfo(fd protoreflect.FieldDescriptor, ft reflect.Type) validationInfo {\n\tvar vi validationInfo\n\tswitch {\n\tcase fd.IsList():\n\t\tswitch fd.Kind() {\n\t\tcase protoreflect.MessageKind:\n\t\t\tvi.typ = validationTypeMessage\n\n\t\t\tif ft.Kind() == reflect.Ptr {\n\t\t\t\t// Repeated opaque message fields are *[]*T.\n\t\t\t\tft = ft.Elem()\n\t\t\t}\n\n\t\t\tif ft.Kind() == reflect.Slice {\n\t\t\t\tvi.mi = getMessageInfo(ft.Elem())\n\t\t\t}\n\t\tcase protoreflect.GroupKind:\n\t\t\tvi.typ = validationTypeGroup\n\n\t\t\tif ft.Kind() == reflect.Ptr {\n\t\t\t\t// Repeated opaque message fields are *[]*T.\n\t\t\t\tft = ft.Elem()\n\t\t\t}\n\n\t\t\tif ft.Kind() == reflect.Slice {\n\t\t\t\tvi.mi = getMessageInfo(ft.Elem())\n\t\t\t}\n\t\tcase protoreflect.StringKind:\n\t\t\tvi.typ = validationTypeBytes\n\t\t\tif strs.EnforceUTF8(fd) {\n\t\t\t\tvi.typ = validationTypeUTF8String\n\t\t\t}\n\t\tdefault:\n\t\t\tswitch wireTypes[fd.Kind()] {\n\t\t\tcase protowire.VarintType:\n\t\t\t\tvi.typ = validationTypeRepeatedVarint\n\t\t\tcase protowire.Fixed32Type:\n\t\t\t\tvi.typ = validationTypeRepeatedFixed32\n\t\t\tcase protowire.Fixed64Type:\n\t\t\t\tvi.typ = validationTypeRepeatedFixed64\n\t\t\t}\n\t\t}\n\tcase fd.IsMap():\n\t\tvi.typ = validationTypeMap\n\t\tswitch fd.MapKey().Kind() {\n\t\tcase protoreflect.StringKind:\n\t\t\tif strs.EnforceUTF8(fd) {\n\t\t\t\tvi.keyType = validationTypeUTF8String\n\t\t\t}\n\t\t}\n\t\tswitch fd.MapValue().Kind() {\n\t\tcase protoreflect.MessageKind:\n\t\t\tvi.valType = validationTypeMessage\n\t\t\tif ft.Kind() == reflect.Map {\n\t\t\t\tvi.mi = getMessageInfo(ft.Elem())\n\t\t\t}\n\t\tcase protoreflect.StringKind:\n\t\t\tif strs.EnforceUTF8(fd) {\n\t\t\t\tvi.valType = validationTypeUTF8String\n\t\t\t}\n\t\t}\n\tdefault:\n\t\tswitch fd.Kind() {\n\t\tcase protoreflect.MessageKind:\n\t\t\tvi.typ = validationTypeMessage\n\t\t\tvi.mi = getMessageInfo(ft)\n\t\tcase protoreflect.GroupKind:\n\t\t\tvi.typ = validationTypeGroup\n\t\t\tvi.mi = getMessageInfo(ft)\n\t\tcase protoreflect.StringKind:\n\t\t\tvi.typ = validationTypeBytes\n\t\t\tif strs.EnforceUTF8(fd) {\n\t\t\t\tvi.typ = validationTypeUTF8String\n\t\t\t}\n\t\tdefault:\n\t\t\tswitch wireTypes[fd.Kind()] {\n\t\t\tcase protowire.VarintType:\n\t\t\t\tvi.typ = validationTypeVarint\n\t\t\tcase protowire.Fixed32Type:\n\t\t\t\tvi.typ = validationTypeFixed32\n\t\t\tcase protowire.Fixed64Type:\n\t\t\t\tvi.typ = validationTypeFixed64\n\t\t\tcase protowire.BytesType:\n\t\t\t\tvi.typ = validationTypeBytes\n\t\t\t}\n\t\t}\n\t}\n\treturn vi\n}\n\nfunc (mi *MessageInfo) validate(b []byte, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, result ValidationStatus) {\n\tmi.init()\n\ttype validationState struct {\n\t\ttyp              validationType\n\t\tkeyType, valType validationType\n\t\tendGroup         protowire.Number\n\t\tmi               *MessageInfo\n\t\ttail             []byte\n\t\trequiredMask     uint64\n\t}\n\n\t// Pre-allocate some slots to avoid repeated slice reallocation.\n\tstates := make([]validationState, 0, 16)\n\tstates = append(states, validationState{\n\t\ttyp: validationTypeMessage,\n\t\tmi:  mi,\n\t})\n\tif groupTag > 0 {\n\t\tstates[0].typ = validationTypeGroup\n\t\tstates[0].endGroup = groupTag\n\t}\n\tif opts.depth--; opts.depth < 0 {\n\t\treturn out, ValidationInvalid\n\t}\n\tinitialized := true\n\tstart := len(b)\nState:\n\tfor len(states) > 0 {\n\t\tst := &states[len(states)-1]\n\t\tfor len(b) > 0 {\n\t\t\t// Parse the tag (field number and wire type).\n\t\t\tvar tag uint64\n\t\t\tif b[0] < 0x80 {\n\t\t\t\ttag = uint64(b[0])\n\t\t\t\tb = b[1:]\n\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\ttag = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\tb = b[2:]\n\t\t\t} else {\n\t\t\t\tvar n int\n\t\t\t\ttag, n = protowire.ConsumeVarint(b)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t}\n\t\t\t\tb = b[n:]\n\t\t\t}\n\t\t\tvar num protowire.Number\n\t\t\tif n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) {\n\t\t\t\treturn out, ValidationInvalid\n\t\t\t} else {\n\t\t\t\tnum = protowire.Number(n)\n\t\t\t}\n\t\t\twtyp := protowire.Type(tag & 7)\n\n\t\t\tif wtyp == protowire.EndGroupType {\n\t\t\t\tif st.endGroup == num {\n\t\t\t\t\tgoto PopState\n\t\t\t\t}\n\t\t\t\treturn out, ValidationInvalid\n\t\t\t}\n\t\t\tvar vi validationInfo\n\t\t\tswitch {\n\t\t\tcase st.typ == validationTypeMap:\n\t\t\t\tswitch num {\n\t\t\t\tcase genid.MapEntry_Key_field_number:\n\t\t\t\t\tvi.typ = st.keyType\n\t\t\t\tcase genid.MapEntry_Value_field_number:\n\t\t\t\t\tvi.typ = st.valType\n\t\t\t\t\tvi.mi = st.mi\n\t\t\t\t\tvi.requiredBit = 1\n\t\t\t\t}\n\t\t\tcase flags.ProtoLegacy && st.mi.isMessageSet:\n\t\t\t\tswitch num {\n\t\t\t\tcase messageset.FieldItem:\n\t\t\t\t\tvi.typ = validationTypeMessageSetItem\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tvar f *coderFieldInfo\n\t\t\t\tif int(num) < len(st.mi.denseCoderFields) {\n\t\t\t\t\tf = st.mi.denseCoderFields[num]\n\t\t\t\t} else {\n\t\t\t\t\tf = st.mi.coderFields[num]\n\t\t\t\t}\n\t\t\t\tif f != nil {\n\t\t\t\t\tvi = f.validation\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\t// Possible extension field.\n\t\t\t\t//\n\t\t\t\t// TODO: We should return ValidationUnknown when:\n\t\t\t\t//   1. The resolver is not frozen. (More extensions may be added to it.)\n\t\t\t\t//   2. The resolver returns preg.NotFound.\n\t\t\t\t// In this case, a type added to the resolver in the future could cause\n\t\t\t\t// unmarshaling to begin failing. Supporting this requires some way to\n\t\t\t\t// determine if the resolver is frozen.\n\t\t\t\txt, err := opts.resolver.FindExtensionByNumber(st.mi.Desc.FullName(), num)\n\t\t\t\tif err != nil && err != protoregistry.NotFound {\n\t\t\t\t\treturn out, ValidationUnknown\n\t\t\t\t}\n\t\t\t\tif err == nil {\n\t\t\t\t\tvi = getExtensionFieldInfo(xt).validation\n\t\t\t\t}\n\t\t\t}\n\t\t\tif vi.requiredBit != 0 {\n\t\t\t\t// Check that the field has a compatible wire type.\n\t\t\t\t// We only need to consider non-repeated field types,\n\t\t\t\t// since repeated fields (and maps) can never be required.\n\t\t\t\tok := false\n\t\t\t\tswitch vi.typ {\n\t\t\t\tcase validationTypeVarint:\n\t\t\t\t\tok = wtyp == protowire.VarintType\n\t\t\t\tcase validationTypeFixed32:\n\t\t\t\t\tok = wtyp == protowire.Fixed32Type\n\t\t\t\tcase validationTypeFixed64:\n\t\t\t\t\tok = wtyp == protowire.Fixed64Type\n\t\t\t\tcase validationTypeBytes, validationTypeUTF8String, validationTypeMessage:\n\t\t\t\t\tok = wtyp == protowire.BytesType\n\t\t\t\tcase validationTypeGroup:\n\t\t\t\t\tok = wtyp == protowire.StartGroupType\n\t\t\t\t}\n\t\t\t\tif ok {\n\t\t\t\t\tst.requiredMask |= vi.requiredBit\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswitch wtyp {\n\t\t\tcase protowire.VarintType:\n\t\t\t\tif len(b) >= 10 {\n\t\t\t\t\tswitch {\n\t\t\t\t\tcase b[0] < 0x80:\n\t\t\t\t\t\tb = b[1:]\n\t\t\t\t\tcase b[1] < 0x80:\n\t\t\t\t\t\tb = b[2:]\n\t\t\t\t\tcase b[2] < 0x80:\n\t\t\t\t\t\tb = b[3:]\n\t\t\t\t\tcase b[3] < 0x80:\n\t\t\t\t\t\tb = b[4:]\n\t\t\t\t\tcase b[4] < 0x80:\n\t\t\t\t\t\tb = b[5:]\n\t\t\t\t\tcase b[5] < 0x80:\n\t\t\t\t\t\tb = b[6:]\n\t\t\t\t\tcase b[6] < 0x80:\n\t\t\t\t\t\tb = b[7:]\n\t\t\t\t\tcase b[7] < 0x80:\n\t\t\t\t\t\tb = b[8:]\n\t\t\t\t\tcase b[8] < 0x80:\n\t\t\t\t\t\tb = b[9:]\n\t\t\t\t\tcase b[9] < 0x80 && b[9] < 2:\n\t\t\t\t\t\tb = b[10:]\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch {\n\t\t\t\t\tcase len(b) > 0 && b[0] < 0x80:\n\t\t\t\t\t\tb = b[1:]\n\t\t\t\t\tcase len(b) > 1 && b[1] < 0x80:\n\t\t\t\t\t\tb = b[2:]\n\t\t\t\t\tcase len(b) > 2 && b[2] < 0x80:\n\t\t\t\t\t\tb = b[3:]\n\t\t\t\t\tcase len(b) > 3 && b[3] < 0x80:\n\t\t\t\t\t\tb = b[4:]\n\t\t\t\t\tcase len(b) > 4 && b[4] < 0x80:\n\t\t\t\t\t\tb = b[5:]\n\t\t\t\t\tcase len(b) > 5 && b[5] < 0x80:\n\t\t\t\t\t\tb = b[6:]\n\t\t\t\t\tcase len(b) > 6 && b[6] < 0x80:\n\t\t\t\t\t\tb = b[7:]\n\t\t\t\t\tcase len(b) > 7 && b[7] < 0x80:\n\t\t\t\t\t\tb = b[8:]\n\t\t\t\t\tcase len(b) > 8 && b[8] < 0x80:\n\t\t\t\t\t\tb = b[9:]\n\t\t\t\t\tcase len(b) > 9 && b[9] < 2:\n\t\t\t\t\t\tb = b[10:]\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue State\n\t\t\tcase protowire.BytesType:\n\t\t\t\tvar size uint64\n\t\t\t\tif len(b) >= 1 && b[0] < 0x80 {\n\t\t\t\t\tsize = uint64(b[0])\n\t\t\t\t\tb = b[1:]\n\t\t\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\t\t\tsize = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\t\t\tb = b[2:]\n\t\t\t\t} else {\n\t\t\t\t\tvar n int\n\t\t\t\t\tsize, n = protowire.ConsumeVarint(b)\n\t\t\t\t\tif n < 0 {\n\t\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t\t}\n\t\t\t\t\tb = b[n:]\n\t\t\t\t}\n\t\t\t\tif size > uint64(len(b)) {\n\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t}\n\t\t\t\tv := b[:size]\n\t\t\t\tb = b[size:]\n\t\t\t\tswitch vi.typ {\n\t\t\t\tcase validationTypeMessage:\n\t\t\t\t\tif vi.mi == nil {\n\t\t\t\t\t\treturn out, ValidationUnknown\n\t\t\t\t\t}\n\t\t\t\t\tvi.mi.init()\n\t\t\t\t\tfallthrough\n\t\t\t\tcase validationTypeMap:\n\t\t\t\t\tif vi.mi != nil {\n\t\t\t\t\t\tvi.mi.init()\n\t\t\t\t\t}\n\t\t\t\t\tstates = append(states, validationState{\n\t\t\t\t\t\ttyp:     vi.typ,\n\t\t\t\t\t\tkeyType: vi.keyType,\n\t\t\t\t\t\tvalType: vi.valType,\n\t\t\t\t\t\tmi:      vi.mi,\n\t\t\t\t\t\ttail:    b,\n\t\t\t\t\t})\n\t\t\t\t\tif vi.typ == validationTypeMessage ||\n\t\t\t\t\t\tvi.typ == validationTypeGroup ||\n\t\t\t\t\t\tvi.typ == validationTypeMap {\n\t\t\t\t\t\tif opts.depth--; opts.depth < 0 {\n\t\t\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tb = v\n\t\t\t\t\tcontinue State\n\t\t\t\tcase validationTypeRepeatedVarint:\n\t\t\t\t\t// Packed field.\n\t\t\t\t\tfor len(v) > 0 {\n\t\t\t\t\t\t_, n := protowire.ConsumeVarint(v)\n\t\t\t\t\t\tif n < 0 {\n\t\t\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t\t\t}\n\t\t\t\t\t\tv = v[n:]\n\t\t\t\t\t}\n\t\t\t\tcase validationTypeRepeatedFixed32:\n\t\t\t\t\t// Packed field.\n\t\t\t\t\tif len(v)%4 != 0 {\n\t\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t\t}\n\t\t\t\tcase validationTypeRepeatedFixed64:\n\t\t\t\t\t// Packed field.\n\t\t\t\t\tif len(v)%8 != 0 {\n\t\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t\t}\n\t\t\t\tcase validationTypeUTF8String:\n\t\t\t\t\tif !utf8.Valid(v) {\n\t\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase protowire.Fixed32Type:\n\t\t\t\tif len(b) < 4 {\n\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t}\n\t\t\t\tb = b[4:]\n\t\t\tcase protowire.Fixed64Type:\n\t\t\t\tif len(b) < 8 {\n\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t}\n\t\t\t\tb = b[8:]\n\t\t\tcase protowire.StartGroupType:\n\t\t\t\tswitch {\n\t\t\t\tcase vi.typ == validationTypeGroup:\n\t\t\t\t\tif vi.mi == nil {\n\t\t\t\t\t\treturn out, ValidationUnknown\n\t\t\t\t\t}\n\t\t\t\t\tvi.mi.init()\n\t\t\t\t\tstates = append(states, validationState{\n\t\t\t\t\t\ttyp:      validationTypeGroup,\n\t\t\t\t\t\tmi:       vi.mi,\n\t\t\t\t\t\tendGroup: num,\n\t\t\t\t\t})\n\t\t\t\t\tif opts.depth--; opts.depth < 0 {\n\t\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t\t}\n\t\t\t\t\tcontinue State\n\t\t\t\tcase flags.ProtoLegacy && vi.typ == validationTypeMessageSetItem:\n\t\t\t\t\ttypeid, v, n, err := messageset.ConsumeFieldValue(b, false)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t\t}\n\t\t\t\t\txt, err := opts.resolver.FindExtensionByNumber(st.mi.Desc.FullName(), typeid)\n\t\t\t\t\tswitch {\n\t\t\t\t\tcase err == protoregistry.NotFound:\n\t\t\t\t\t\tb = b[n:]\n\t\t\t\t\tcase err != nil:\n\t\t\t\t\t\treturn out, ValidationUnknown\n\t\t\t\t\tdefault:\n\t\t\t\t\t\txvi := getExtensionFieldInfo(xt).validation\n\t\t\t\t\t\tif xvi.mi != nil {\n\t\t\t\t\t\t\txvi.mi.init()\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstates = append(states, validationState{\n\t\t\t\t\t\t\ttyp:  xvi.typ,\n\t\t\t\t\t\t\tmi:   xvi.mi,\n\t\t\t\t\t\t\ttail: b[n:],\n\t\t\t\t\t\t})\n\t\t\t\t\t\tif xvi.typ == validationTypeMessage ||\n\t\t\t\t\t\t\txvi.typ == validationTypeGroup ||\n\t\t\t\t\t\t\txvi.typ == validationTypeMap {\n\t\t\t\t\t\t\tif opts.depth--; opts.depth < 0 {\n\t\t\t\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tb = v\n\t\t\t\t\t\tcontinue State\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tn := protowire.ConsumeFieldValue(num, wtyp, b)\n\t\t\t\t\tif n < 0 {\n\t\t\t\t\t\treturn out, ValidationInvalid\n\t\t\t\t\t}\n\t\t\t\t\tb = b[n:]\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn out, ValidationInvalid\n\t\t\t}\n\t\t}\n\t\tif st.endGroup != 0 {\n\t\t\treturn out, ValidationInvalid\n\t\t}\n\t\tif len(b) != 0 {\n\t\t\treturn out, ValidationInvalid\n\t\t}\n\t\tb = st.tail\n\tPopState:\n\t\tnumRequiredFields := 0\n\t\tswitch st.typ {\n\t\tcase validationTypeMessage, validationTypeGroup:\n\t\t\tnumRequiredFields = int(st.mi.numRequiredFields)\n\t\t\topts.depth++\n\t\tcase validationTypeMap:\n\t\t\t// If this is a map field with a message value that contains\n\t\t\t// required fields, require that the value be present.\n\t\t\tif st.mi != nil && st.mi.numRequiredFields > 0 {\n\t\t\t\tnumRequiredFields = 1\n\t\t\t}\n\t\t\topts.depth++\n\t\t}\n\t\t// If there are more than 64 required fields, this check will\n\t\t// always fail and we will report that the message is potentially\n\t\t// uninitialized.\n\t\tif numRequiredFields > 0 && bits.OnesCount64(st.requiredMask) != numRequiredFields {\n\t\t\tinitialized = false\n\t\t}\n\t\tstates = states[:len(states)-1]\n\t}\n\tout.n = start - len(b)\n\tif initialized {\n\t\tout.initialized = true\n\t}\n\treturn out, ValidationValid\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/order/order.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 order\n\nimport (\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// FieldOrder specifies the ordering to visit message fields.\n// It is a function that reports whether x is ordered before y.\ntype FieldOrder func(x, y protoreflect.FieldDescriptor) bool\n\nvar (\n\t// AnyFieldOrder specifies no specific field ordering.\n\tAnyFieldOrder FieldOrder = nil\n\n\t// LegacyFieldOrder sorts fields in the same ordering as emitted by\n\t// wire serialization in the github.com/golang/protobuf implementation.\n\tLegacyFieldOrder FieldOrder = func(x, y protoreflect.FieldDescriptor) bool {\n\t\tox, oy := x.ContainingOneof(), y.ContainingOneof()\n\t\tinOneof := func(od protoreflect.OneofDescriptor) bool {\n\t\t\treturn od != nil && !od.IsSynthetic()\n\t\t}\n\n\t\t// Extension fields sort before non-extension fields.\n\t\tif x.IsExtension() != y.IsExtension() {\n\t\t\treturn x.IsExtension() && !y.IsExtension()\n\t\t}\n\t\t// Fields not within a oneof sort before those within a oneof.\n\t\tif inOneof(ox) != inOneof(oy) {\n\t\t\treturn !inOneof(ox) && inOneof(oy)\n\t\t}\n\t\t// Fields in disjoint oneof sets are sorted by declaration index.\n\t\tif inOneof(ox) && inOneof(oy) && ox != oy {\n\t\t\treturn ox.Index() < oy.Index()\n\t\t}\n\t\t// Fields sorted by field number.\n\t\treturn x.Number() < y.Number()\n\t}\n\n\t// NumberFieldOrder sorts fields by their field number.\n\tNumberFieldOrder FieldOrder = func(x, y protoreflect.FieldDescriptor) bool {\n\t\treturn x.Number() < y.Number()\n\t}\n\n\t// IndexNameFieldOrder sorts non-extension fields before extension fields.\n\t// Non-extensions are sorted according to their declaration index.\n\t// Extensions are sorted according to their full name.\n\tIndexNameFieldOrder FieldOrder = func(x, y protoreflect.FieldDescriptor) bool {\n\t\t// Non-extension fields sort before extension fields.\n\t\tif x.IsExtension() != y.IsExtension() {\n\t\t\treturn !x.IsExtension() && y.IsExtension()\n\t\t}\n\t\t// Extensions sorted by fullname.\n\t\tif x.IsExtension() && y.IsExtension() {\n\t\t\treturn x.FullName() < y.FullName()\n\t\t}\n\t\t// Non-extensions sorted by declaration index.\n\t\treturn x.Index() < y.Index()\n\t}\n)\n\n// KeyOrder specifies the ordering to visit map entries.\n// It is a function that reports whether x is ordered before y.\ntype KeyOrder func(x, y protoreflect.MapKey) bool\n\nvar (\n\t// AnyKeyOrder specifies no specific key ordering.\n\tAnyKeyOrder KeyOrder = nil\n\n\t// GenericKeyOrder sorts false before true, numeric keys in ascending order,\n\t// and strings in lexicographical ordering according to UTF-8 codepoints.\n\tGenericKeyOrder KeyOrder = func(x, y protoreflect.MapKey) bool {\n\t\tswitch x.Interface().(type) {\n\t\tcase bool:\n\t\t\treturn !x.Bool() && y.Bool()\n\t\tcase int32, int64:\n\t\t\treturn x.Int() < y.Int()\n\t\tcase uint32, uint64:\n\t\t\treturn x.Uint() < y.Uint()\n\t\tcase string:\n\t\t\treturn x.String() < y.String()\n\t\tdefault:\n\t\t\tpanic(\"invalid map key type\")\n\t\t}\n\t}\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/order/range.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// Package order provides ordered access to messages and maps.\npackage order\n\nimport (\n\t\"sort\"\n\t\"sync\"\n\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\ntype messageField struct {\n\tfd protoreflect.FieldDescriptor\n\tv  protoreflect.Value\n}\n\nvar messageFieldPool = sync.Pool{\n\tNew: func() any { return new([]messageField) },\n}\n\ntype (\n\t// FieldRnger is an interface for visiting all fields in a message.\n\t// The protoreflect.Message type implements this interface.\n\tFieldRanger interface{ Range(VisitField) }\n\t// VisitField is called every time a message field is visited.\n\tVisitField = func(protoreflect.FieldDescriptor, protoreflect.Value) bool\n)\n\n// RangeFields iterates over the fields of fs according to the specified order.\nfunc RangeFields(fs FieldRanger, less FieldOrder, fn VisitField) {\n\tif less == nil {\n\t\tfs.Range(fn)\n\t\treturn\n\t}\n\n\t// Obtain a pre-allocated scratch buffer.\n\tp := messageFieldPool.Get().(*[]messageField)\n\tfields := (*p)[:0]\n\tdefer func() {\n\t\tif cap(fields) < 1024 {\n\t\t\t*p = fields\n\t\t\tmessageFieldPool.Put(p)\n\t\t}\n\t}()\n\n\t// Collect all fields in the message and sort them.\n\tfs.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {\n\t\tfields = append(fields, messageField{fd, v})\n\t\treturn true\n\t})\n\tsort.Slice(fields, func(i, j int) bool {\n\t\treturn less(fields[i].fd, fields[j].fd)\n\t})\n\n\t// Visit the fields in the specified ordering.\n\tfor _, f := range fields {\n\t\tif !fn(f.fd, f.v) {\n\t\t\treturn\n\t\t}\n\t}\n}\n\ntype mapEntry struct {\n\tk protoreflect.MapKey\n\tv protoreflect.Value\n}\n\nvar mapEntryPool = sync.Pool{\n\tNew: func() any { return new([]mapEntry) },\n}\n\ntype (\n\t// EntryRanger is an interface for visiting all fields in a message.\n\t// The protoreflect.Map type implements this interface.\n\tEntryRanger interface{ Range(VisitEntry) }\n\t// VisitEntry is called every time a map entry is visited.\n\tVisitEntry = func(protoreflect.MapKey, protoreflect.Value) bool\n)\n\n// RangeEntries iterates over the entries of es according to the specified order.\nfunc RangeEntries(es EntryRanger, less KeyOrder, fn VisitEntry) {\n\tif less == nil {\n\t\tes.Range(fn)\n\t\treturn\n\t}\n\n\t// Obtain a pre-allocated scratch buffer.\n\tp := mapEntryPool.Get().(*[]mapEntry)\n\tentries := (*p)[:0]\n\tdefer func() {\n\t\tif cap(entries) < 1024 {\n\t\t\t*p = entries\n\t\t\tmapEntryPool.Put(p)\n\t\t}\n\t}()\n\n\t// Collect all entries in the map and sort them.\n\tes.Range(func(k protoreflect.MapKey, v protoreflect.Value) bool {\n\t\tentries = append(entries, mapEntry{k, v})\n\t\treturn true\n\t})\n\tsort.Slice(entries, func(i, j int) bool {\n\t\treturn less(entries[i].k, entries[j].k)\n\t})\n\n\t// Visit the entries in the specified ordering.\n\tfor _, e := range entries {\n\t\tif !fn(e.k, e.v) {\n\t\t\treturn\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/pragma/pragma.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 pragma provides types that can be embedded into a struct to\n// statically enforce or prevent certain language properties.\npackage pragma\n\nimport \"sync\"\n\n// NoUnkeyedLiterals can be embedded in a struct to prevent unkeyed literals.\ntype NoUnkeyedLiterals struct{}\n\n// DoNotImplement can be embedded in an interface to prevent trivial\n// implementations of the interface.\n//\n// This is useful to prevent unauthorized implementations of an interface\n// so that it can be extended in the future for any protobuf language changes.\ntype DoNotImplement interface{ ProtoInternal(DoNotImplement) }\n\n// DoNotCompare can be embedded in a struct to prevent comparability.\ntype DoNotCompare [0]func()\n\n// DoNotCopy can be embedded in a struct to help prevent shallow copies.\n// This does not rely on a Go language feature, but rather a special case\n// within the vet checker.\n//\n// See https://golang.org/issues/8005.\ntype DoNotCopy [0]sync.Mutex\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/protolazy/bufferreader.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// Helper code for parsing a protocol buffer\n\npackage protolazy\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n)\n\n// BufferReader is a structure encapsulating a protobuf and a current position\ntype BufferReader struct {\n\tBuf []byte\n\tPos int\n}\n\n// NewBufferReader creates a new BufferRead from a protobuf\nfunc NewBufferReader(buf []byte) BufferReader {\n\treturn BufferReader{Buf: buf, Pos: 0}\n}\n\nvar errOutOfBounds = errors.New(\"protobuf decoding: out of bounds\")\nvar errOverflow = errors.New(\"proto: integer overflow\")\n\nfunc (b *BufferReader) DecodeVarintSlow() (x uint64, err error) {\n\ti := b.Pos\n\tl := len(b.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\tv := b.Buf[i]\n\t\ti++\n\t\tx |= (uint64(v) & 0x7F) << shift\n\t\tif v < 0x80 {\n\t\t\tb.Pos = 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 decodes a varint at the current position\nfunc (b *BufferReader) DecodeVarint() (x uint64, err error) {\n\ti := b.Pos\n\tbuf := b.Buf\n\n\tif i >= len(buf) {\n\t\treturn 0, io.ErrUnexpectedEOF\n\t} else if buf[i] < 0x80 {\n\t\tb.Pos++\n\t\treturn uint64(buf[i]), nil\n\t} else if len(buf)-i < 10 {\n\t\treturn b.DecodeVarintSlow()\n\t}\n\n\tvar v uint64\n\t// we already checked the first byte\n\tx = uint64(buf[i]) & 127\n\ti++\n\n\tv = uint64(buf[i])\n\ti++\n\tx |= (v & 127) << 7\n\tif v < 128 {\n\t\tgoto done\n\t}\n\n\tv = uint64(buf[i])\n\ti++\n\tx |= (v & 127) << 14\n\tif v < 128 {\n\t\tgoto done\n\t}\n\n\tv = uint64(buf[i])\n\ti++\n\tx |= (v & 127) << 21\n\tif v < 128 {\n\t\tgoto done\n\t}\n\n\tv = uint64(buf[i])\n\ti++\n\tx |= (v & 127) << 28\n\tif v < 128 {\n\t\tgoto done\n\t}\n\n\tv = uint64(buf[i])\n\ti++\n\tx |= (v & 127) << 35\n\tif v < 128 {\n\t\tgoto done\n\t}\n\n\tv = uint64(buf[i])\n\ti++\n\tx |= (v & 127) << 42\n\tif v < 128 {\n\t\tgoto done\n\t}\n\n\tv = uint64(buf[i])\n\ti++\n\tx |= (v & 127) << 49\n\tif v < 128 {\n\t\tgoto done\n\t}\n\n\tv = uint64(buf[i])\n\ti++\n\tx |= (v & 127) << 56\n\tif v < 128 {\n\t\tgoto done\n\t}\n\n\tv = uint64(buf[i])\n\ti++\n\tx |= (v & 127) << 63\n\tif v < 128 {\n\t\tgoto done\n\t}\n\n\treturn 0, errOverflow\n\ndone:\n\tb.Pos = i\n\treturn\n}\n\n// decodeVarint32 decodes a varint32 at the current position\nfunc (b *BufferReader) DecodeVarint32() (x uint32, err error) {\n\ti := b.Pos\n\tbuf := b.Buf\n\n\tif i >= len(buf) {\n\t\treturn 0, io.ErrUnexpectedEOF\n\t} else if buf[i] < 0x80 {\n\t\tb.Pos++\n\t\treturn uint32(buf[i]), nil\n\t} else if len(buf)-i < 5 {\n\t\tv, err := b.DecodeVarintSlow()\n\t\treturn uint32(v), err\n\t}\n\n\tvar v uint32\n\t// we already checked the first byte\n\tx = uint32(buf[i]) & 127\n\ti++\n\n\tv = uint32(buf[i])\n\ti++\n\tx |= (v & 127) << 7\n\tif v < 128 {\n\t\tgoto done\n\t}\n\n\tv = uint32(buf[i])\n\ti++\n\tx |= (v & 127) << 14\n\tif v < 128 {\n\t\tgoto done\n\t}\n\n\tv = uint32(buf[i])\n\ti++\n\tx |= (v & 127) << 21\n\tif v < 128 {\n\t\tgoto done\n\t}\n\n\tv = uint32(buf[i])\n\ti++\n\tx |= (v & 127) << 28\n\tif v < 128 {\n\t\tgoto done\n\t}\n\n\treturn 0, errOverflow\n\ndone:\n\tb.Pos = i\n\treturn\n}\n\n// skipValue skips a value in the protobuf, based on the specified tag\nfunc (b *BufferReader) SkipValue(tag uint32) (err error) {\n\twireType := tag & 0x7\n\tswitch protowire.Type(wireType) {\n\tcase protowire.VarintType:\n\t\terr = b.SkipVarint()\n\tcase protowire.Fixed64Type:\n\t\terr = b.SkipFixed64()\n\tcase protowire.BytesType:\n\t\tvar n uint32\n\t\tn, err = b.DecodeVarint32()\n\t\tif err == nil {\n\t\t\terr = b.Skip(int(n))\n\t\t}\n\tcase protowire.StartGroupType:\n\t\terr = b.SkipGroup(tag)\n\tcase protowire.Fixed32Type:\n\t\terr = b.SkipFixed32()\n\tdefault:\n\t\terr = fmt.Errorf(\"Unexpected wire type (%d)\", wireType)\n\t}\n\treturn\n}\n\n// skipGroup skips a group with the specified tag.  It executes efficiently using a tag stack\nfunc (b *BufferReader) SkipGroup(tag uint32) (err error) {\n\ttagStack := make([]uint32, 0, 16)\n\ttagStack = append(tagStack, tag)\n\tvar n uint32\n\tfor len(tagStack) > 0 {\n\t\ttag, err = b.DecodeVarint32()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch protowire.Type(tag & 0x7) {\n\t\tcase protowire.VarintType:\n\t\t\terr = b.SkipVarint()\n\t\tcase protowire.Fixed64Type:\n\t\t\terr = b.Skip(8)\n\t\tcase protowire.BytesType:\n\t\t\tn, err = b.DecodeVarint32()\n\t\t\tif err == nil {\n\t\t\t\terr = b.Skip(int(n))\n\t\t\t}\n\t\tcase protowire.StartGroupType:\n\t\t\ttagStack = append(tagStack, tag)\n\t\tcase protowire.Fixed32Type:\n\t\t\terr = b.SkipFixed32()\n\t\tcase protowire.EndGroupType:\n\t\t\tif protoFieldNumber(tagStack[len(tagStack)-1]) == protoFieldNumber(tag) {\n\t\t\t\ttagStack = tagStack[:len(tagStack)-1]\n\t\t\t} else {\n\t\t\t\terr = fmt.Errorf(\"end group tag %d does not match begin group tag %d at pos %d\",\n\t\t\t\t\tprotoFieldNumber(tag), protoFieldNumber(tagStack[len(tagStack)-1]), b.Pos)\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// skipVarint effiently skips a varint\nfunc (b *BufferReader) SkipVarint() (err error) {\n\ti := b.Pos\n\n\tif len(b.Buf)-i < 10 {\n\t\t// Use DecodeVarintSlow() to check for buffer overflow, but ignore result\n\t\tif _, err := b.DecodeVarintSlow(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\n\tif b.Buf[i] < 0x80 {\n\t\tgoto out\n\t}\n\ti++\n\n\tif b.Buf[i] < 0x80 {\n\t\tgoto out\n\t}\n\ti++\n\n\tif b.Buf[i] < 0x80 {\n\t\tgoto out\n\t}\n\ti++\n\n\tif b.Buf[i] < 0x80 {\n\t\tgoto out\n\t}\n\ti++\n\n\tif b.Buf[i] < 0x80 {\n\t\tgoto out\n\t}\n\ti++\n\n\tif b.Buf[i] < 0x80 {\n\t\tgoto out\n\t}\n\ti++\n\n\tif b.Buf[i] < 0x80 {\n\t\tgoto out\n\t}\n\ti++\n\n\tif b.Buf[i] < 0x80 {\n\t\tgoto out\n\t}\n\ti++\n\n\tif b.Buf[i] < 0x80 {\n\t\tgoto out\n\t}\n\ti++\n\n\tif b.Buf[i] < 0x80 {\n\t\tgoto out\n\t}\n\treturn errOverflow\n\nout:\n\tb.Pos = i + 1\n\treturn nil\n}\n\n// skip skips the specified number of bytes\nfunc (b *BufferReader) Skip(n int) (err error) {\n\tif len(b.Buf) < b.Pos+n {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\tb.Pos += n\n\treturn\n}\n\n// skipFixed64 skips a fixed64\nfunc (b *BufferReader) SkipFixed64() (err error) {\n\treturn b.Skip(8)\n}\n\n// skipFixed32 skips a fixed32\nfunc (b *BufferReader) SkipFixed32() (err error) {\n\treturn b.Skip(4)\n}\n\n// skipBytes skips a set of bytes\nfunc (b *BufferReader) SkipBytes() (err error) {\n\tn, err := b.DecodeVarint32()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn b.Skip(int(n))\n}\n\n// Done returns whether we are at the end of the protobuf\nfunc (b *BufferReader) Done() bool {\n\treturn b.Pos == len(b.Buf)\n}\n\n// Remaining returns how many bytes remain\nfunc (b *BufferReader) Remaining() int {\n\treturn len(b.Buf) - b.Pos\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/protolazy/lazy.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// Package protolazy contains internal data structures for lazy message decoding.\npackage protolazy\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\tpiface \"google.golang.org/protobuf/runtime/protoiface\"\n)\n\n// IndexEntry is the structure for an index of the fields in a message of a\n// proto (not descending to sub-messages)\ntype IndexEntry struct {\n\tFieldNum uint32\n\t// first byte of this tag/field\n\tStart uint32\n\t// first byte after a contiguous sequence of bytes for this tag/field, which could\n\t// include a single encoding of the field, or multiple encodings for the field\n\tEnd uint32\n\t// True if this protobuf segment includes multiple encodings of the field\n\tMultipleContiguous bool\n}\n\n// XXX_lazyUnmarshalInfo has information about a particular lazily decoded message\n//\n// Deprecated: Do not use. This will be deleted in the near future.\ntype XXX_lazyUnmarshalInfo struct {\n\t// Index of fields and their positions in the protobuf for this\n\t// message.  Make index be a pointer to a slice so it can be updated\n\t// atomically.  The index pointer is only set once (lazily when/if\n\t// the index is first needed), and must always be SET and LOADED\n\t// ATOMICALLY.\n\tindex *[]IndexEntry\n\t// The protobuf associated with this lazily decoded message.  It is\n\t// only set during proto.Unmarshal().  It doesn't need to be set and\n\t// loaded atomically, since any simultaneous set (Unmarshal) and read\n\t// (during a get) would already be a race in the app code.\n\tProtobuf []byte\n\t// The flags present when Unmarshal was originally called for this particular message\n\tunmarshalFlags piface.UnmarshalInputFlags\n}\n\n// The Buffer and SetBuffer methods let v2/internal/impl interact with\n// XXX_lazyUnmarshalInfo via an interface, to avoid an import cycle.\n\n// Buffer returns the lazy unmarshal buffer.\n//\n// Deprecated: Do not use. This will be deleted in the near future.\nfunc (lazy *XXX_lazyUnmarshalInfo) Buffer() []byte {\n\treturn lazy.Protobuf\n}\n\n// SetBuffer sets the lazy unmarshal buffer.\n//\n// Deprecated: Do not use. This will be deleted in the near future.\nfunc (lazy *XXX_lazyUnmarshalInfo) SetBuffer(b []byte) {\n\tlazy.Protobuf = b\n}\n\n// SetUnmarshalFlags is called to set a copy of the original unmarshalInputFlags.\n// The flags should reflect how Unmarshal was called.\nfunc (lazy *XXX_lazyUnmarshalInfo) SetUnmarshalFlags(f piface.UnmarshalInputFlags) {\n\tlazy.unmarshalFlags = f\n}\n\n// UnmarshalFlags returns the original unmarshalInputFlags.\nfunc (lazy *XXX_lazyUnmarshalInfo) UnmarshalFlags() piface.UnmarshalInputFlags {\n\treturn lazy.unmarshalFlags\n}\n\n// AllowedPartial returns true if the user originally unmarshalled this message with\n// AllowPartial set to true\nfunc (lazy *XXX_lazyUnmarshalInfo) AllowedPartial() bool {\n\treturn (lazy.unmarshalFlags & piface.UnmarshalCheckRequired) == 0\n}\n\nfunc protoFieldNumber(tag uint32) uint32 {\n\treturn tag >> 3\n}\n\n// buildIndex builds an index of the specified protobuf, return the index\n// array and an error.\nfunc buildIndex(buf []byte) ([]IndexEntry, error) {\n\tindex := make([]IndexEntry, 0, 16)\n\tvar lastProtoFieldNum uint32\n\tvar outOfOrder bool\n\n\tvar r BufferReader = NewBufferReader(buf)\n\n\tfor !r.Done() {\n\t\tvar tag uint32\n\t\tvar err error\n\t\tvar curPos = r.Pos\n\t\t// INLINED: tag, err = r.DecodeVarint32()\n\t\t{\n\t\t\ti := r.Pos\n\t\t\tbuf := r.Buf\n\n\t\t\tif i >= len(buf) {\n\t\t\t\treturn nil, errOutOfBounds\n\t\t\t} else if buf[i] < 0x80 {\n\t\t\t\tr.Pos++\n\t\t\t\ttag = uint32(buf[i])\n\t\t\t} else if r.Remaining() < 5 {\n\t\t\t\tvar v uint64\n\t\t\t\tv, err = r.DecodeVarintSlow()\n\t\t\t\ttag = uint32(v)\n\t\t\t} else {\n\t\t\t\tvar v uint32\n\t\t\t\t// we already checked the first byte\n\t\t\t\ttag = uint32(buf[i]) & 127\n\t\t\t\ti++\n\n\t\t\t\tv = uint32(buf[i])\n\t\t\t\ti++\n\t\t\t\ttag |= (v & 127) << 7\n\t\t\t\tif v < 128 {\n\t\t\t\t\tgoto done\n\t\t\t\t}\n\n\t\t\t\tv = uint32(buf[i])\n\t\t\t\ti++\n\t\t\t\ttag |= (v & 127) << 14\n\t\t\t\tif v < 128 {\n\t\t\t\t\tgoto done\n\t\t\t\t}\n\n\t\t\t\tv = uint32(buf[i])\n\t\t\t\ti++\n\t\t\t\ttag |= (v & 127) << 21\n\t\t\t\tif v < 128 {\n\t\t\t\t\tgoto done\n\t\t\t\t}\n\n\t\t\t\tv = uint32(buf[i])\n\t\t\t\ti++\n\t\t\t\ttag |= (v & 127) << 28\n\t\t\t\tif v < 128 {\n\t\t\t\t\tgoto done\n\t\t\t\t}\n\n\t\t\t\treturn nil, errOutOfBounds\n\n\t\t\tdone:\n\t\t\t\tr.Pos = i\n\t\t\t}\n\t\t}\n\t\t// DONE: tag, err = r.DecodeVarint32()\n\n\t\tfieldNum := protoFieldNumber(tag)\n\t\tif fieldNum < lastProtoFieldNum {\n\t\t\toutOfOrder = true\n\t\t}\n\n\t\t// Skip the current value -- will skip over an entire group as well.\n\t\t// INLINED: err = r.SkipValue(tag)\n\t\twireType := tag & 0x7\n\t\tswitch protowire.Type(wireType) {\n\t\tcase protowire.VarintType:\n\t\t\t// INLINED: err = r.SkipVarint()\n\t\t\ti := r.Pos\n\n\t\t\tif len(r.Buf)-i < 10 {\n\t\t\t\t// Use DecodeVarintSlow() to skip while\n\t\t\t\t// checking for buffer overflow, but ignore result\n\t\t\t\t_, err = r.DecodeVarintSlow()\n\t\t\t\tgoto out2\n\t\t\t}\n\t\t\tif r.Buf[i] < 0x80 {\n\t\t\t\tgoto out\n\t\t\t}\n\t\t\ti++\n\n\t\t\tif r.Buf[i] < 0x80 {\n\t\t\t\tgoto out\n\t\t\t}\n\t\t\ti++\n\n\t\t\tif r.Buf[i] < 0x80 {\n\t\t\t\tgoto out\n\t\t\t}\n\t\t\ti++\n\n\t\t\tif r.Buf[i] < 0x80 {\n\t\t\t\tgoto out\n\t\t\t}\n\t\t\ti++\n\n\t\t\tif r.Buf[i] < 0x80 {\n\t\t\t\tgoto out\n\t\t\t}\n\t\t\ti++\n\n\t\t\tif r.Buf[i] < 0x80 {\n\t\t\t\tgoto out\n\t\t\t}\n\t\t\ti++\n\n\t\t\tif r.Buf[i] < 0x80 {\n\t\t\t\tgoto out\n\t\t\t}\n\t\t\ti++\n\n\t\t\tif r.Buf[i] < 0x80 {\n\t\t\t\tgoto out\n\t\t\t}\n\t\t\ti++\n\n\t\t\tif r.Buf[i] < 0x80 {\n\t\t\t\tgoto out\n\t\t\t}\n\t\t\ti++\n\n\t\t\tif r.Buf[i] < 0x80 {\n\t\t\t\tgoto out\n\t\t\t}\n\t\t\treturn nil, errOverflow\n\t\tout:\n\t\t\tr.Pos = i + 1\n\t\t\t// DONE: err = r.SkipVarint()\n\t\tcase protowire.Fixed64Type:\n\t\t\terr = r.SkipFixed64()\n\t\tcase protowire.BytesType:\n\t\t\tvar n uint32\n\t\t\tn, err = r.DecodeVarint32()\n\t\t\tif err == nil {\n\t\t\t\terr = r.Skip(int(n))\n\t\t\t}\n\t\tcase protowire.StartGroupType:\n\t\t\terr = r.SkipGroup(tag)\n\t\tcase protowire.Fixed32Type:\n\t\t\terr = r.SkipFixed32()\n\t\tdefault:\n\t\t\terr = fmt.Errorf(\"Unexpected wire type (%d)\", wireType)\n\t\t}\n\t\t// DONE: err = r.SkipValue(tag)\n\n\tout2:\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif fieldNum != lastProtoFieldNum {\n\t\t\tindex = append(index, IndexEntry{FieldNum: fieldNum,\n\t\t\t\tStart: uint32(curPos),\n\t\t\t\tEnd:   uint32(r.Pos)},\n\t\t\t)\n\t\t} else {\n\t\t\tindex[len(index)-1].End = uint32(r.Pos)\n\t\t\tindex[len(index)-1].MultipleContiguous = true\n\t\t}\n\t\tlastProtoFieldNum = fieldNum\n\t}\n\tif outOfOrder {\n\t\tsort.Slice(index, func(i, j int) bool {\n\t\t\treturn index[i].FieldNum < index[j].FieldNum ||\n\t\t\t\t(index[i].FieldNum == index[j].FieldNum &&\n\t\t\t\t\tindex[i].Start < index[j].Start)\n\t\t})\n\t}\n\treturn index, nil\n}\n\nfunc (lazy *XXX_lazyUnmarshalInfo) SizeField(num uint32) (size int) {\n\tstart, end, found, _, multipleEntries := lazy.FindFieldInProto(num)\n\tif multipleEntries != nil {\n\t\tfor _, entry := range multipleEntries {\n\t\t\tsize += int(entry.End - entry.Start)\n\t\t}\n\t\treturn size\n\t}\n\tif !found {\n\t\treturn 0\n\t}\n\treturn int(end - start)\n}\n\nfunc (lazy *XXX_lazyUnmarshalInfo) AppendField(b []byte, num uint32) ([]byte, bool) {\n\tstart, end, found, _, multipleEntries := lazy.FindFieldInProto(num)\n\tif multipleEntries != nil {\n\t\tfor _, entry := range multipleEntries {\n\t\t\tb = append(b, lazy.Protobuf[entry.Start:entry.End]...)\n\t\t}\n\t\treturn b, true\n\t}\n\tif !found {\n\t\treturn nil, false\n\t}\n\tb = append(b, lazy.Protobuf[start:end]...)\n\treturn b, true\n}\n\nfunc (lazy *XXX_lazyUnmarshalInfo) SetIndex(index []IndexEntry) {\n\tatomicStoreIndex(&lazy.index, &index)\n}\n\n// FindFieldInProto looks for field fieldNum in lazyUnmarshalInfo information\n// (including protobuf), returns startOffset/endOffset/found.\nfunc (lazy *XXX_lazyUnmarshalInfo) FindFieldInProto(fieldNum uint32) (start, end uint32, found, multipleContiguous bool, multipleEntries []IndexEntry) {\n\tif lazy.Protobuf == nil {\n\t\t// There is no backing protobuf for this message -- it was made from a builder\n\t\treturn 0, 0, false, false, nil\n\t}\n\tindex := atomicLoadIndex(&lazy.index)\n\tif index == nil {\n\t\tr, err := buildIndex(lazy.Protobuf)\n\t\tif err != nil {\n\t\t\tpanic(fmt.Sprintf(\"findFieldInfo: error building index when looking for field %d: %v\", fieldNum, err))\n\t\t}\n\t\t// lazy.index is a pointer to the slice returned by BuildIndex\n\t\tindex = &r\n\t\tatomicStoreIndex(&lazy.index, index)\n\t}\n\treturn lookupField(index, fieldNum)\n}\n\n// lookupField returns the offset at which the indicated field starts using\n// the index, offset immediately after field ends (including all instances of\n// a repeated field), and bools indicating if field was found and if there\n// are multiple encodings of the field in the byte range.\n//\n// To hande the uncommon case where there are repeated encodings for the same\n// field which are not consecutive in the protobuf (so we need to returns\n// multiple start/end offsets), we also return a slice multipleEntries.  If\n// multipleEntries is non-nil, then multiple entries were found, and the\n// values in the slice should be used, rather than start/end/found.\nfunc lookupField(indexp *[]IndexEntry, fieldNum uint32) (start, end uint32, found bool, multipleContiguous bool, multipleEntries []IndexEntry) {\n\t// The pointer indexp to the index was already loaded atomically.\n\t// The slice is uniquely associated with the pointer, so it doesn't\n\t// need to be loaded atomically.\n\tindex := *indexp\n\tfor i, entry := range index {\n\t\tif fieldNum == entry.FieldNum {\n\t\t\tif i < len(index)-1 && entry.FieldNum == index[i+1].FieldNum {\n\t\t\t\t// Handle the uncommon case where there are\n\t\t\t\t// repeated entries for the same field which\n\t\t\t\t// are not contiguous in the protobuf.\n\t\t\t\tmultiple := make([]IndexEntry, 1, 2)\n\t\t\t\tmultiple[0] = IndexEntry{fieldNum, entry.Start, entry.End, entry.MultipleContiguous}\n\t\t\t\ti++\n\t\t\t\tfor i < len(index) && index[i].FieldNum == fieldNum {\n\t\t\t\t\tmultiple = append(multiple, IndexEntry{fieldNum, index[i].Start, index[i].End, index[i].MultipleContiguous})\n\t\t\t\t\ti++\n\t\t\t\t}\n\t\t\t\treturn 0, 0, false, false, multiple\n\n\t\t\t}\n\t\t\treturn entry.Start, entry.End, true, entry.MultipleContiguous, nil\n\t\t}\n\t\tif fieldNum < entry.FieldNum {\n\t\t\treturn 0, 0, false, false, nil\n\t\t}\n\t}\n\treturn 0, 0, false, false, nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/protolazy/pointer_unsafe.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 protolazy\n\nimport (\n\t\"sync/atomic\"\n\t\"unsafe\"\n)\n\nfunc atomicLoadIndex(p **[]IndexEntry) *[]IndexEntry {\n\treturn (*[]IndexEntry)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))\n}\nfunc atomicStoreIndex(p **[]IndexEntry, v *[]IndexEntry) {\n\tatomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/set/ints.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 set provides simple set data structures for uint64s.\npackage set\n\nimport \"math/bits\"\n\n// int64s represents a set of integers within the range of 0..63.\ntype int64s uint64\n\nfunc (bs *int64s) Len() int {\n\treturn bits.OnesCount64(uint64(*bs))\n}\nfunc (bs *int64s) Has(n uint64) bool {\n\treturn uint64(*bs)&(uint64(1)<<n) > 0\n}\nfunc (bs *int64s) Set(n uint64) {\n\t*(*uint64)(bs) |= uint64(1) << n\n}\nfunc (bs *int64s) Clear(n uint64) {\n\t*(*uint64)(bs) &^= uint64(1) << n\n}\n\n// Ints represents a set of integers within the range of 0..math.MaxUint64.\ntype Ints struct {\n\tlo int64s\n\thi map[uint64]struct{}\n}\n\nfunc (bs *Ints) Len() int {\n\treturn bs.lo.Len() + len(bs.hi)\n}\nfunc (bs *Ints) Has(n uint64) bool {\n\tif n < 64 {\n\t\treturn bs.lo.Has(n)\n\t}\n\t_, ok := bs.hi[n]\n\treturn ok\n}\nfunc (bs *Ints) Set(n uint64) {\n\tif n < 64 {\n\t\tbs.lo.Set(n)\n\t\treturn\n\t}\n\tif bs.hi == nil {\n\t\tbs.hi = make(map[uint64]struct{})\n\t}\n\tbs.hi[n] = struct{}{}\n}\nfunc (bs *Ints) Clear(n uint64) {\n\tif n < 64 {\n\t\tbs.lo.Clear(n)\n\t\treturn\n\t}\n\tdelete(bs.hi, n)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/strs/strings.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 strs provides string manipulation functionality specific to protobuf.\npackage strs\n\nimport (\n\t\"go/token\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n\n\t\"google.golang.org/protobuf/internal/flags\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// EnforceUTF8 reports whether to enforce strict UTF-8 validation.\nfunc EnforceUTF8(fd protoreflect.FieldDescriptor) bool {\n\tif flags.ProtoLegacy || fd.Syntax() == protoreflect.Editions {\n\t\tif fd, ok := fd.(interface{ EnforceUTF8() bool }); ok {\n\t\t\treturn fd.EnforceUTF8()\n\t\t}\n\t}\n\treturn fd.Syntax() == protoreflect.Proto3\n}\n\n// GoCamelCase camel-cases a protobuf name for use as a Go identifier.\n//\n// If there is an interior underscore followed by a lower case letter,\n// drop the underscore and convert the letter to upper case.\nfunc GoCamelCase(s string) string {\n\t// Invariant: if the next letter is lower case, it must be converted\n\t// to upper case.\n\t// That is, we process a word at a time, where words are marked by _ or\n\t// upper case letter. Digits are treated as words.\n\tvar b []byte\n\tfor i := 0; i < len(s); i++ {\n\t\tc := s[i]\n\t\tswitch {\n\t\tcase c == '.' && i+1 < len(s) && isASCIILower(s[i+1]):\n\t\t\t// Skip over '.' in \".{{lowercase}}\".\n\t\tcase c == '.':\n\t\t\tb = append(b, '_') // convert '.' to '_'\n\t\tcase c == '_' && (i == 0 || s[i-1] == '.'):\n\t\t\t// Convert initial '_' to ensure we start with a capital letter.\n\t\t\t// Do the same for '_' after '.' to match historic behavior.\n\t\t\tb = append(b, 'X') // convert '_' to 'X'\n\t\tcase c == '_' && i+1 < len(s) && isASCIILower(s[i+1]):\n\t\t\t// Skip over '_' in \"_{{lowercase}}\".\n\t\tcase isASCIIDigit(c):\n\t\t\tb = append(b, c)\n\t\tdefault:\n\t\t\t// Assume we have a letter now - if not, it's a bogus identifier.\n\t\t\t// The next word is a sequence of characters that must start upper case.\n\t\t\tif isASCIILower(c) {\n\t\t\t\tc -= 'a' - 'A' // convert lowercase to uppercase\n\t\t\t}\n\t\t\tb = append(b, c)\n\n\t\t\t// Accept lower case sequence that follows.\n\t\t\tfor ; i+1 < len(s) && isASCIILower(s[i+1]); i++ {\n\t\t\t\tb = append(b, s[i+1])\n\t\t\t}\n\t\t}\n\t}\n\treturn string(b)\n}\n\n// GoSanitized converts a string to a valid Go identifier.\nfunc GoSanitized(s string) string {\n\t// Sanitize the input to the set of valid characters,\n\t// which must be '_' or be in the Unicode L or N categories.\n\ts = strings.Map(func(r rune) rune {\n\t\tif unicode.IsLetter(r) || unicode.IsDigit(r) {\n\t\t\treturn r\n\t\t}\n\t\treturn '_'\n\t}, s)\n\n\t// Prepend '_' in the event of a Go keyword conflict or if\n\t// the identifier is invalid (does not start in the Unicode L category).\n\tr, _ := utf8.DecodeRuneInString(s)\n\tif token.Lookup(s).IsKeyword() || !unicode.IsLetter(r) {\n\t\treturn \"_\" + s\n\t}\n\treturn s\n}\n\n// JSONCamelCase converts a snake_case identifier to a camelCase identifier,\n// according to the protobuf JSON specification.\nfunc JSONCamelCase(s string) string {\n\tvar b []byte\n\tvar wasUnderscore bool\n\tfor i := 0; i < len(s); i++ { // proto identifiers are always ASCII\n\t\tc := s[i]\n\t\tif c != '_' {\n\t\t\tif wasUnderscore && isASCIILower(c) {\n\t\t\t\tc -= 'a' - 'A' // convert to uppercase\n\t\t\t}\n\t\t\tb = append(b, c)\n\t\t}\n\t\twasUnderscore = c == '_'\n\t}\n\treturn string(b)\n}\n\n// JSONSnakeCase converts a camelCase identifier to a snake_case identifier,\n// according to the protobuf JSON specification.\nfunc JSONSnakeCase(s string) string {\n\tvar b []byte\n\tfor i := 0; i < len(s); i++ { // proto identifiers are always ASCII\n\t\tc := s[i]\n\t\tif isASCIIUpper(c) {\n\t\t\tb = append(b, '_')\n\t\t\tc += 'a' - 'A' // convert to lowercase\n\t\t}\n\t\tb = append(b, c)\n\t}\n\treturn string(b)\n}\n\n// MapEntryName derives the name of the map entry message given the field name.\n// See protoc v3.8.0: src/google/protobuf/descriptor.cc:254-276,6057\nfunc MapEntryName(s string) string {\n\tvar b []byte\n\tupperNext := true\n\tfor _, c := range s {\n\t\tswitch {\n\t\tcase c == '_':\n\t\t\tupperNext = true\n\t\tcase upperNext:\n\t\t\tb = append(b, byte(unicode.ToUpper(c)))\n\t\t\tupperNext = false\n\t\tdefault:\n\t\t\tb = append(b, byte(c))\n\t\t}\n\t}\n\tb = append(b, \"Entry\"...)\n\treturn string(b)\n}\n\n// EnumValueName derives the camel-cased enum value name.\n// See protoc v3.8.0: src/google/protobuf/descriptor.cc:297-313\nfunc EnumValueName(s string) string {\n\tvar b []byte\n\tupperNext := true\n\tfor _, c := range s {\n\t\tswitch {\n\t\tcase c == '_':\n\t\t\tupperNext = true\n\t\tcase upperNext:\n\t\t\tb = append(b, byte(unicode.ToUpper(c)))\n\t\t\tupperNext = false\n\t\tdefault:\n\t\t\tb = append(b, byte(unicode.ToLower(c)))\n\t\t\tupperNext = false\n\t\t}\n\t}\n\treturn string(b)\n}\n\n// TrimEnumPrefix trims the enum name prefix from an enum value name,\n// where the prefix is all lowercase without underscores.\n// See protoc v3.8.0: src/google/protobuf/descriptor.cc:330-375\nfunc TrimEnumPrefix(s, prefix string) string {\n\ts0 := s // original input\n\tfor len(s) > 0 && len(prefix) > 0 {\n\t\tif s[0] == '_' {\n\t\t\ts = s[1:]\n\t\t\tcontinue\n\t\t}\n\t\tif unicode.ToLower(rune(s[0])) != rune(prefix[0]) {\n\t\t\treturn s0 // no prefix match\n\t\t}\n\t\ts, prefix = s[1:], prefix[1:]\n\t}\n\tif len(prefix) > 0 {\n\t\treturn s0 // no prefix match\n\t}\n\ts = strings.TrimLeft(s, \"_\")\n\tif len(s) == 0 {\n\t\treturn s0 // avoid returning empty string\n\t}\n\treturn s\n}\n\nfunc isASCIILower(c byte) bool {\n\treturn 'a' <= c && c <= 'z'\n}\nfunc isASCIIUpper(c byte) bool {\n\treturn 'A' <= c && c <= 'Z'\n}\nfunc isASCIIDigit(c byte) bool {\n\treturn '0' <= c && c <= '9'\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.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 strs\n\nimport (\n\t\"unsafe\"\n\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// UnsafeString returns an unsafe string reference of b.\n// The caller must treat the input slice as immutable.\n//\n// WARNING: Use carefully. The returned result must not leak to the end user\n// unless the input slice is provably immutable.\nfunc UnsafeString(b []byte) string {\n\treturn unsafe.String(unsafe.SliceData(b), len(b))\n}\n\n// UnsafeBytes returns an unsafe bytes slice reference of s.\n// The caller must treat returned slice as immutable.\n//\n// WARNING: Use carefully. The returned result must not leak to the end user.\nfunc UnsafeBytes(s string) []byte {\n\treturn unsafe.Slice(unsafe.StringData(s), len(s))\n}\n\n// Builder builds a set of strings with shared lifetime.\n// This differs from strings.Builder, which is for building a single string.\ntype Builder struct {\n\tbuf []byte\n}\n\n// AppendFullName is equivalent to protoreflect.FullName.Append,\n// but optimized for large batches where each name has a shared lifetime.\nfunc (sb *Builder) AppendFullName(prefix protoreflect.FullName, name protoreflect.Name) protoreflect.FullName {\n\tn := len(prefix) + len(\".\") + len(name)\n\tif len(prefix) == 0 {\n\t\tn -= len(\".\")\n\t}\n\tsb.grow(n)\n\tsb.buf = append(sb.buf, prefix...)\n\tsb.buf = append(sb.buf, '.')\n\tsb.buf = append(sb.buf, name...)\n\treturn protoreflect.FullName(sb.last(n))\n}\n\n// MakeString is equivalent to string(b), but optimized for large batches\n// with a shared lifetime.\nfunc (sb *Builder) MakeString(b []byte) string {\n\tsb.grow(len(b))\n\tsb.buf = append(sb.buf, b...)\n\treturn sb.last(len(b))\n}\n\nfunc (sb *Builder) grow(n int) {\n\tif cap(sb.buf)-len(sb.buf) >= n {\n\t\treturn\n\t}\n\n\t// Unlike strings.Builder, we do not need to copy over the contents\n\t// of the old buffer since our builder provides no API for\n\t// retrieving previously created strings.\n\tsb.buf = make([]byte, 0, 2*(cap(sb.buf)+n))\n}\n\nfunc (sb *Builder) last(n int) string {\n\treturn UnsafeString(sb.buf[len(sb.buf)-n:])\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/internal/version/version.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 version records versioning information about this module.\npackage version\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// These constants determine the current version of this module.\n//\n// For our release process, we enforce the following rules:\n//   - Tagged releases use a tag that is identical to String.\n//   - Tagged releases never reference a commit where the String\n//     contains \"devel\".\n//   - The set of all commits in this repository where String\n//     does not contain \"devel\" must have a unique String.\n//\n// Steps for tagging a new release:\n//\n//  1. Create a new CL.\n//\n//  2. Update Minor, Patch, and/or PreRelease as necessary.\n//     PreRelease must not contain the string \"devel\".\n//\n//  3. Since the last released minor version, have there been any changes to\n//     generator that relies on new functionality in the runtime?\n//     If yes, then increment RequiredGenerated.\n//\n//  4. Since the last released minor version, have there been any changes to\n//     the runtime that removes support for old .pb.go source code?\n//     If yes, then increment SupportMinimum.\n//\n//  5. Send out the CL for review and submit it.\n//     Note that the next CL in step 8 must be submitted after this CL\n//     without any other CLs in-between.\n//\n//  6. Tag a new version, where the tag is is the current String.\n//\n//  7. Write release notes for all notable changes\n//     between this release and the last release.\n//\n//  8. Create a new CL.\n//\n//  9. Update PreRelease to include the string \"devel\".\n//     For example: \"\" -> \"devel\" or \"rc.1\" -> \"rc.1.devel\"\n//\n//  10. Send out the CL for review and submit it.\nconst (\n\tMajor      = 1\n\tMinor      = 36\n\tPatch      = 11\n\tPreRelease = \"\"\n)\n\n// String formats the version string for this module in semver format.\n//\n// Examples:\n//\n//\tv1.20.1\n//\tv1.21.0-rc.1\nfunc String() string {\n\tv := fmt.Sprintf(\"v%d.%d.%d\", Major, Minor, Patch)\n\tif PreRelease != \"\" {\n\t\tv += \"-\" + PreRelease\n\n\t\t// TODO: Add metadata about the commit or build hash.\n\t\t// See https://golang.org/issue/29814\n\t\t// See https://golang.org/issue/33533\n\t\tvar metadata string\n\t\tif strings.Contains(PreRelease, \"devel\") && metadata != \"\" {\n\t\t\tv += \"+\" + metadata\n\t\t}\n\t}\n\treturn v\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/checkinit.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 proto\n\nimport (\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\n// CheckInitialized returns an error if any required fields in m are not set.\nfunc CheckInitialized(m Message) error {\n\t// Treat a nil message interface as an \"untyped\" empty message,\n\t// which we assume to have no required fields.\n\tif m == nil {\n\t\treturn nil\n\t}\n\n\treturn checkInitialized(m.ProtoReflect())\n}\n\n// CheckInitialized returns an error if any required fields in m are not set.\nfunc checkInitialized(m protoreflect.Message) error {\n\tif methods := protoMethods(m); methods != nil && methods.CheckInitialized != nil {\n\t\t_, err := methods.CheckInitialized(protoiface.CheckInitializedInput{\n\t\t\tMessage: m,\n\t\t})\n\t\treturn err\n\t}\n\treturn checkInitializedSlow(m)\n}\n\nfunc checkInitializedSlow(m protoreflect.Message) error {\n\tmd := m.Descriptor()\n\tfds := md.Fields()\n\tfor i, nums := 0, md.RequiredNumbers(); i < nums.Len(); i++ {\n\t\tfd := fds.ByNumber(nums.Get(i))\n\t\tif !m.Has(fd) {\n\t\t\treturn errors.RequiredNotSet(string(fd.FullName()))\n\t\t}\n\t}\n\tvar err error\n\tm.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {\n\t\tswitch {\n\t\tcase fd.IsList():\n\t\t\tif fd.Message() == nil {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tfor i, list := 0, v.List(); i < list.Len() && err == nil; i++ {\n\t\t\t\terr = checkInitialized(list.Get(i).Message())\n\t\t\t}\n\t\tcase fd.IsMap():\n\t\t\tif fd.MapValue().Message() == nil {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tv.Map().Range(func(key protoreflect.MapKey, v protoreflect.Value) bool {\n\t\t\t\terr = checkInitialized(v.Message())\n\t\t\t\treturn err == nil\n\t\t\t})\n\t\tdefault:\n\t\t\tif fd.Message() == nil {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\terr = checkInitialized(v.Message())\n\t\t}\n\t\treturn err == nil\n\t})\n\treturn err\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/decode.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 proto\n\nimport (\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/encoding/messageset\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/internal/genid\"\n\t\"google.golang.org/protobuf/internal/pragma\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/reflect/protoregistry\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\n// UnmarshalOptions configures the unmarshaler.\n//\n// Example usage:\n//\n//\terr := UnmarshalOptions{DiscardUnknown: true}.Unmarshal(b, m)\ntype UnmarshalOptions struct {\n\tpragma.NoUnkeyedLiterals\n\n\t// Merge merges the input into the destination message.\n\t// The default behavior is to always reset the message before unmarshaling,\n\t// unless Merge is specified.\n\tMerge bool\n\n\t// AllowPartial accepts input for messages that will result in missing\n\t// required fields. If AllowPartial is false (the default), Unmarshal will\n\t// return an error if there are any missing required fields.\n\tAllowPartial bool\n\n\t// If DiscardUnknown is set, unknown fields are ignored.\n\tDiscardUnknown bool\n\n\t// Resolver is used for looking up types when unmarshaling extension fields.\n\t// If nil, this defaults to using protoregistry.GlobalTypes.\n\tResolver interface {\n\t\tFindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error)\n\t\tFindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error)\n\t}\n\n\t// RecursionLimit limits how deeply messages may be nested.\n\t// If zero, a default limit is applied.\n\tRecursionLimit int\n\n\t//\n\t// NoLazyDecoding turns off lazy decoding, which otherwise is enabled by\n\t// default. Lazy decoding only affects submessages (annotated with [lazy =\n\t// true] in the .proto file) within messages that use the Opaque API.\n\tNoLazyDecoding bool\n}\n\n// Unmarshal parses the wire-format message in b and places the result in m.\n// The provided message must be mutable (e.g., a non-nil pointer to a message).\n//\n// See the [UnmarshalOptions] type if you need more control.\nfunc Unmarshal(b []byte, m Message) error {\n\t_, err := UnmarshalOptions{RecursionLimit: protowire.DefaultRecursionLimit}.unmarshal(b, m.ProtoReflect())\n\treturn err\n}\n\n// Unmarshal parses the wire-format message in b and places the result in m.\n// The provided message must be mutable (e.g., a non-nil pointer to a message).\nfunc (o UnmarshalOptions) Unmarshal(b []byte, m Message) error {\n\tif o.RecursionLimit == 0 {\n\t\to.RecursionLimit = protowire.DefaultRecursionLimit\n\t}\n\t_, err := o.unmarshal(b, m.ProtoReflect())\n\treturn err\n}\n\n// UnmarshalState parses a wire-format message and places the result in m.\n//\n// This method permits fine-grained control over the unmarshaler.\n// Most users should use [Unmarshal] instead.\nfunc (o UnmarshalOptions) UnmarshalState(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {\n\tif o.RecursionLimit == 0 {\n\t\to.RecursionLimit = protowire.DefaultRecursionLimit\n\t}\n\treturn o.unmarshal(in.Buf, in.Message)\n}\n\n// unmarshal is a centralized function that all unmarshal operations go through.\n// For profiling purposes, avoid changing the name of this function or\n// introducing other code paths for unmarshal that do not go through this.\nfunc (o UnmarshalOptions) unmarshal(b []byte, m protoreflect.Message) (out protoiface.UnmarshalOutput, err error) {\n\tif o.Resolver == nil {\n\t\to.Resolver = protoregistry.GlobalTypes\n\t}\n\tif !o.Merge {\n\t\tReset(m.Interface())\n\t}\n\tallowPartial := o.AllowPartial\n\to.Merge = true\n\to.AllowPartial = true\n\tmethods := protoMethods(m)\n\tif methods != nil && methods.Unmarshal != nil &&\n\t\t!(o.DiscardUnknown && methods.Flags&protoiface.SupportUnmarshalDiscardUnknown == 0) {\n\t\tin := protoiface.UnmarshalInput{\n\t\t\tMessage:  m,\n\t\t\tBuf:      b,\n\t\t\tResolver: o.Resolver,\n\t\t\tDepth:    o.RecursionLimit,\n\t\t}\n\t\tif o.DiscardUnknown {\n\t\t\tin.Flags |= protoiface.UnmarshalDiscardUnknown\n\t\t}\n\n\t\tif !allowPartial {\n\t\t\t// This does not affect how current unmarshal functions work, it just allows them\n\t\t\t// to record this for lazy the decoding case.\n\t\t\tin.Flags |= protoiface.UnmarshalCheckRequired\n\t\t}\n\t\tif o.NoLazyDecoding {\n\t\t\tin.Flags |= protoiface.UnmarshalNoLazyDecoding\n\t\t}\n\n\t\tout, err = methods.Unmarshal(in)\n\t} else {\n\t\tif o.RecursionLimit--; o.RecursionLimit < 0 {\n\t\t\treturn out, errRecursionDepth\n\t\t}\n\t\terr = o.unmarshalMessageSlow(b, m)\n\t}\n\tif err != nil {\n\t\treturn out, err\n\t}\n\tif allowPartial || (out.Flags&protoiface.UnmarshalInitialized != 0) {\n\t\treturn out, nil\n\t}\n\treturn out, checkInitialized(m)\n}\n\nfunc (o UnmarshalOptions) unmarshalMessage(b []byte, m protoreflect.Message) error {\n\t_, err := o.unmarshal(b, m)\n\treturn err\n}\n\nfunc (o UnmarshalOptions) unmarshalMessageSlow(b []byte, m protoreflect.Message) error {\n\tmd := m.Descriptor()\n\tif messageset.IsMessageSet(md) {\n\t\treturn o.unmarshalMessageSet(b, m)\n\t}\n\tfields := md.Fields()\n\tfor len(b) > 0 {\n\t\t// Parse the tag (field number and wire type).\n\t\tnum, wtyp, tagLen := protowire.ConsumeTag(b)\n\t\tif tagLen < 0 {\n\t\t\treturn errDecode\n\t\t}\n\t\tif num > protowire.MaxValidNumber {\n\t\t\treturn errDecode\n\t\t}\n\n\t\t// Find the field descriptor for this field number.\n\t\tfd := fields.ByNumber(num)\n\t\tif fd == nil && md.ExtensionRanges().Has(num) {\n\t\t\textType, err := o.Resolver.FindExtensionByNumber(md.FullName(), num)\n\t\t\tif err != nil && err != protoregistry.NotFound {\n\t\t\t\treturn errors.New(\"%v: unable to resolve extension %v: %v\", md.FullName(), num, err)\n\t\t\t}\n\t\t\tif extType != nil {\n\t\t\t\tfd = extType.TypeDescriptor()\n\t\t\t}\n\t\t}\n\t\tvar err error\n\t\tif fd == nil {\n\t\t\terr = errUnknown\n\t\t}\n\n\t\t// Parse the field value.\n\t\tvar valLen int\n\t\tswitch {\n\t\tcase err != nil:\n\t\tcase fd.IsList():\n\t\t\tvalLen, err = o.unmarshalList(b[tagLen:], wtyp, m.Mutable(fd).List(), fd)\n\t\tcase fd.IsMap():\n\t\t\tvalLen, err = o.unmarshalMap(b[tagLen:], wtyp, m.Mutable(fd).Map(), fd)\n\t\tdefault:\n\t\t\tvalLen, err = o.unmarshalSingular(b[tagLen:], wtyp, m, fd)\n\t\t}\n\t\tif err != nil {\n\t\t\tif err != errUnknown {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tvalLen = protowire.ConsumeFieldValue(num, wtyp, b[tagLen:])\n\t\t\tif valLen < 0 {\n\t\t\t\treturn errDecode\n\t\t\t}\n\t\t\tif !o.DiscardUnknown {\n\t\t\t\tm.SetUnknown(append(m.GetUnknown(), b[:tagLen+valLen]...))\n\t\t\t}\n\t\t}\n\t\tb = b[tagLen+valLen:]\n\t}\n\treturn nil\n}\n\nfunc (o UnmarshalOptions) unmarshalSingular(b []byte, wtyp protowire.Type, m protoreflect.Message, fd protoreflect.FieldDescriptor) (n int, err error) {\n\tv, n, err := o.unmarshalScalar(b, wtyp, fd)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tswitch fd.Kind() {\n\tcase protoreflect.GroupKind, protoreflect.MessageKind:\n\t\tm2 := m.Mutable(fd).Message()\n\t\tif err := o.unmarshalMessage(v.Bytes(), m2); err != nil {\n\t\t\treturn n, err\n\t\t}\n\tdefault:\n\t\t// Non-message scalars replace the previous value.\n\t\tm.Set(fd, v)\n\t}\n\treturn n, nil\n}\n\nfunc (o UnmarshalOptions) unmarshalMap(b []byte, wtyp protowire.Type, mapv protoreflect.Map, fd protoreflect.FieldDescriptor) (n int, err error) {\n\tif o.RecursionLimit--; o.RecursionLimit < 0 {\n\t\treturn 0, errRecursionDepth\n\t}\n\tif wtyp != protowire.BytesType {\n\t\treturn 0, errUnknown\n\t}\n\tb, n = protowire.ConsumeBytes(b)\n\tif n < 0 {\n\t\treturn 0, errDecode\n\t}\n\tvar (\n\t\tkeyField = fd.MapKey()\n\t\tvalField = fd.MapValue()\n\t\tkey      protoreflect.Value\n\t\tval      protoreflect.Value\n\t\thaveKey  bool\n\t\thaveVal  bool\n\t)\n\tswitch valField.Kind() {\n\tcase protoreflect.GroupKind, protoreflect.MessageKind:\n\t\tval = mapv.NewValue()\n\t}\n\t// Map entries are represented as a two-element message with fields\n\t// containing the key and value.\n\tfor len(b) > 0 {\n\t\tnum, wtyp, n := protowire.ConsumeTag(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tif num > protowire.MaxValidNumber {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tb = b[n:]\n\t\terr = errUnknown\n\t\tswitch num {\n\t\tcase genid.MapEntry_Key_field_number:\n\t\t\tkey, n, err = o.unmarshalScalar(b, wtyp, keyField)\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\thaveKey = true\n\t\tcase genid.MapEntry_Value_field_number:\n\t\t\tvar v protoreflect.Value\n\t\t\tv, n, err = o.unmarshalScalar(b, wtyp, valField)\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tswitch valField.Kind() {\n\t\t\tcase protoreflect.GroupKind, protoreflect.MessageKind:\n\t\t\t\tif err := o.unmarshalMessage(v.Bytes(), val.Message()); err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tval = v\n\t\t\t}\n\t\t\thaveVal = true\n\t\t}\n\t\tif err == errUnknown {\n\t\t\tn = protowire.ConsumeFieldValue(num, wtyp, b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t} else if err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tb = b[n:]\n\t}\n\t// Every map entry should have entries for key and value, but this is not strictly required.\n\tif !haveKey {\n\t\tkey = keyField.Default()\n\t}\n\tif !haveVal {\n\t\tswitch valField.Kind() {\n\t\tcase protoreflect.GroupKind, protoreflect.MessageKind:\n\t\tdefault:\n\t\t\tval = valField.Default()\n\t\t}\n\t}\n\tmapv.Set(key.MapKey(), val)\n\treturn n, nil\n}\n\n// errUnknown is used internally to indicate fields which should be added\n// to the unknown field set of a message. It is never returned from an exported\n// function.\nvar errUnknown = errors.New(\"BUG: internal error (unknown)\")\n\nvar errDecode = errors.New(\"cannot parse invalid wire-format data\")\n\nvar errRecursionDepth = errors.New(\"exceeded maximum recursion depth\")\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/decode_gen.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 generated by generate-types. DO NOT EDIT.\n\npackage proto\n\nimport (\n\t\"math\"\n\t\"unicode/utf8\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/internal/strs\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// unmarshalScalar decodes a value of the given kind.\n//\n// Message values are decoded into a []byte which aliases the input data.\nfunc (o UnmarshalOptions) unmarshalScalar(b []byte, wtyp protowire.Type, fd protoreflect.FieldDescriptor) (val protoreflect.Value, n int, err error) {\n\tswitch fd.Kind() {\n\tcase protoreflect.BoolKind:\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfBool(protowire.DecodeBool(v)), n, nil\n\tcase protoreflect.EnumKind:\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)), n, nil\n\tcase protoreflect.Int32Kind:\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfInt32(int32(v)), n, nil\n\tcase protoreflect.Sint32Kind:\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))), n, nil\n\tcase protoreflect.Uint32Kind:\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfUint32(uint32(v)), n, nil\n\tcase protoreflect.Int64Kind:\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfInt64(int64(v)), n, nil\n\tcase protoreflect.Sint64Kind:\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)), n, nil\n\tcase protoreflect.Uint64Kind:\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfUint64(v), n, nil\n\tcase protoreflect.Sfixed32Kind:\n\t\tif wtyp != protowire.Fixed32Type {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeFixed32(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfInt32(int32(v)), n, nil\n\tcase protoreflect.Fixed32Kind:\n\t\tif wtyp != protowire.Fixed32Type {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeFixed32(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfUint32(uint32(v)), n, nil\n\tcase protoreflect.FloatKind:\n\t\tif wtyp != protowire.Fixed32Type {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeFixed32(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))), n, nil\n\tcase protoreflect.Sfixed64Kind:\n\t\tif wtyp != protowire.Fixed64Type {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeFixed64(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfInt64(int64(v)), n, nil\n\tcase protoreflect.Fixed64Kind:\n\t\tif wtyp != protowire.Fixed64Type {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeFixed64(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfUint64(v), n, nil\n\tcase protoreflect.DoubleKind:\n\t\tif wtyp != protowire.Fixed64Type {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeFixed64(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfFloat64(math.Float64frombits(v)), n, nil\n\tcase protoreflect.StringKind:\n\t\tif wtyp != protowire.BytesType {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\tif strs.EnforceUTF8(fd) && !utf8.Valid(v) {\n\t\t\treturn protoreflect.Value{}, 0, errors.InvalidUTF8(string(fd.FullName()))\n\t\t}\n\t\treturn protoreflect.ValueOfString(string(v)), n, nil\n\tcase protoreflect.BytesKind:\n\t\tif wtyp != protowire.BytesType {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfBytes(append(emptyBuf[:], v...)), n, nil\n\tcase protoreflect.MessageKind:\n\t\tif wtyp != protowire.BytesType {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfBytes(v), n, nil\n\tcase protoreflect.GroupKind:\n\t\tif wtyp != protowire.StartGroupType {\n\t\t\treturn val, 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeGroup(fd.Number(), b)\n\t\tif n < 0 {\n\t\t\treturn val, 0, errDecode\n\t\t}\n\t\treturn protoreflect.ValueOfBytes(v), n, nil\n\tdefault:\n\t\treturn val, 0, errUnknown\n\t}\n}\n\nfunc (o UnmarshalOptions) unmarshalList(b []byte, wtyp protowire.Type, list protoreflect.List, fd protoreflect.FieldDescriptor) (n int, err error) {\n\tswitch fd.Kind() {\n\tcase protoreflect.BoolKind:\n\t\tif wtyp == protowire.BytesType {\n\t\t\tbuf, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t\tfor len(buf) > 0 {\n\t\t\t\tv, n := protowire.ConsumeVarint(buf)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn 0, errDecode\n\t\t\t\t}\n\t\t\t\tbuf = buf[n:]\n\t\t\t\tlist.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v)))\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v)))\n\t\treturn n, nil\n\tcase protoreflect.EnumKind:\n\t\tif wtyp == protowire.BytesType {\n\t\t\tbuf, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t\tfor len(buf) > 0 {\n\t\t\t\tv, n := protowire.ConsumeVarint(buf)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn 0, errDecode\n\t\t\t\t}\n\t\t\t\tbuf = buf[n:]\n\t\t\t\tlist.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)))\n\t\treturn n, nil\n\tcase protoreflect.Int32Kind:\n\t\tif wtyp == protowire.BytesType {\n\t\t\tbuf, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t\tfor len(buf) > 0 {\n\t\t\t\tv, n := protowire.ConsumeVarint(buf)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn 0, errDecode\n\t\t\t\t}\n\t\t\t\tbuf = buf[n:]\n\t\t\t\tlist.Append(protoreflect.ValueOfInt32(int32(v)))\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfInt32(int32(v)))\n\t\treturn n, nil\n\tcase protoreflect.Sint32Kind:\n\t\tif wtyp == protowire.BytesType {\n\t\t\tbuf, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t\tfor len(buf) > 0 {\n\t\t\t\tv, n := protowire.ConsumeVarint(buf)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn 0, errDecode\n\t\t\t\t}\n\t\t\t\tbuf = buf[n:]\n\t\t\t\tlist.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))))\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))))\n\t\treturn n, nil\n\tcase protoreflect.Uint32Kind:\n\t\tif wtyp == protowire.BytesType {\n\t\t\tbuf, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t\tfor len(buf) > 0 {\n\t\t\t\tv, n := protowire.ConsumeVarint(buf)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn 0, errDecode\n\t\t\t\t}\n\t\t\t\tbuf = buf[n:]\n\t\t\t\tlist.Append(protoreflect.ValueOfUint32(uint32(v)))\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfUint32(uint32(v)))\n\t\treturn n, nil\n\tcase protoreflect.Int64Kind:\n\t\tif wtyp == protowire.BytesType {\n\t\t\tbuf, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t\tfor len(buf) > 0 {\n\t\t\t\tv, n := protowire.ConsumeVarint(buf)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn 0, errDecode\n\t\t\t\t}\n\t\t\t\tbuf = buf[n:]\n\t\t\t\tlist.Append(protoreflect.ValueOfInt64(int64(v)))\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfInt64(int64(v)))\n\t\treturn n, nil\n\tcase protoreflect.Sint64Kind:\n\t\tif wtyp == protowire.BytesType {\n\t\t\tbuf, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t\tfor len(buf) > 0 {\n\t\t\t\tv, n := protowire.ConsumeVarint(buf)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn 0, errDecode\n\t\t\t\t}\n\t\t\t\tbuf = buf[n:]\n\t\t\t\tlist.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)))\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)))\n\t\treturn n, nil\n\tcase protoreflect.Uint64Kind:\n\t\tif wtyp == protowire.BytesType {\n\t\t\tbuf, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t\tfor len(buf) > 0 {\n\t\t\t\tv, n := protowire.ConsumeVarint(buf)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn 0, errDecode\n\t\t\t\t}\n\t\t\t\tbuf = buf[n:]\n\t\t\t\tlist.Append(protoreflect.ValueOfUint64(v))\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif wtyp != protowire.VarintType {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeVarint(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfUint64(v))\n\t\treturn n, nil\n\tcase protoreflect.Sfixed32Kind:\n\t\tif wtyp == protowire.BytesType {\n\t\t\tbuf, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t\tfor len(buf) > 0 {\n\t\t\t\tv, n := protowire.ConsumeFixed32(buf)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn 0, errDecode\n\t\t\t\t}\n\t\t\t\tbuf = buf[n:]\n\t\t\t\tlist.Append(protoreflect.ValueOfInt32(int32(v)))\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif wtyp != protowire.Fixed32Type {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeFixed32(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfInt32(int32(v)))\n\t\treturn n, nil\n\tcase protoreflect.Fixed32Kind:\n\t\tif wtyp == protowire.BytesType {\n\t\t\tbuf, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t\tfor len(buf) > 0 {\n\t\t\t\tv, n := protowire.ConsumeFixed32(buf)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn 0, errDecode\n\t\t\t\t}\n\t\t\t\tbuf = buf[n:]\n\t\t\t\tlist.Append(protoreflect.ValueOfUint32(uint32(v)))\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif wtyp != protowire.Fixed32Type {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeFixed32(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfUint32(uint32(v)))\n\t\treturn n, nil\n\tcase protoreflect.FloatKind:\n\t\tif wtyp == protowire.BytesType {\n\t\t\tbuf, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t\tfor len(buf) > 0 {\n\t\t\t\tv, n := protowire.ConsumeFixed32(buf)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn 0, errDecode\n\t\t\t\t}\n\t\t\t\tbuf = buf[n:]\n\t\t\t\tlist.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif wtyp != protowire.Fixed32Type {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeFixed32(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))))\n\t\treturn n, nil\n\tcase protoreflect.Sfixed64Kind:\n\t\tif wtyp == protowire.BytesType {\n\t\t\tbuf, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t\tfor len(buf) > 0 {\n\t\t\t\tv, n := protowire.ConsumeFixed64(buf)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn 0, errDecode\n\t\t\t\t}\n\t\t\t\tbuf = buf[n:]\n\t\t\t\tlist.Append(protoreflect.ValueOfInt64(int64(v)))\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif wtyp != protowire.Fixed64Type {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeFixed64(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfInt64(int64(v)))\n\t\treturn n, nil\n\tcase protoreflect.Fixed64Kind:\n\t\tif wtyp == protowire.BytesType {\n\t\t\tbuf, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t\tfor len(buf) > 0 {\n\t\t\t\tv, n := protowire.ConsumeFixed64(buf)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn 0, errDecode\n\t\t\t\t}\n\t\t\t\tbuf = buf[n:]\n\t\t\t\tlist.Append(protoreflect.ValueOfUint64(v))\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif wtyp != protowire.Fixed64Type {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeFixed64(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfUint64(v))\n\t\treturn n, nil\n\tcase protoreflect.DoubleKind:\n\t\tif wtyp == protowire.BytesType {\n\t\t\tbuf, n := protowire.ConsumeBytes(b)\n\t\t\tif n < 0 {\n\t\t\t\treturn 0, errDecode\n\t\t\t}\n\t\t\tfor len(buf) > 0 {\n\t\t\t\tv, n := protowire.ConsumeFixed64(buf)\n\t\t\t\tif n < 0 {\n\t\t\t\t\treturn 0, errDecode\n\t\t\t\t}\n\t\t\t\tbuf = buf[n:]\n\t\t\t\tlist.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif wtyp != protowire.Fixed64Type {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeFixed64(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v)))\n\t\treturn n, nil\n\tcase protoreflect.StringKind:\n\t\tif wtyp != protowire.BytesType {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tif strs.EnforceUTF8(fd) && !utf8.Valid(v) {\n\t\t\treturn 0, errors.InvalidUTF8(string(fd.FullName()))\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfString(string(v)))\n\t\treturn n, nil\n\tcase protoreflect.BytesKind:\n\t\tif wtyp != protowire.BytesType {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tlist.Append(protoreflect.ValueOfBytes(append(emptyBuf[:], v...)))\n\t\treturn n, nil\n\tcase protoreflect.MessageKind:\n\t\tif wtyp != protowire.BytesType {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeBytes(b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tm := list.NewElement()\n\t\tif err := o.unmarshalMessage(v, m.Message()); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tlist.Append(m)\n\t\treturn n, nil\n\tcase protoreflect.GroupKind:\n\t\tif wtyp != protowire.StartGroupType {\n\t\t\treturn 0, errUnknown\n\t\t}\n\t\tv, n := protowire.ConsumeGroup(fd.Number(), b)\n\t\tif n < 0 {\n\t\t\treturn 0, errDecode\n\t\t}\n\t\tm := list.NewElement()\n\t\tif err := o.unmarshalMessage(v, m.Message()); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tlist.Append(m)\n\t\treturn n, nil\n\tdefault:\n\t\treturn 0, errUnknown\n\t}\n}\n\n// We append to an empty array rather than a nil []byte to get non-nil zero-length byte slices.\nvar emptyBuf [0]byte\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/doc.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 proto provides functions operating on protocol buffer messages.\n//\n// For documentation on protocol buffers in general, see:\n// https://protobuf.dev.\n//\n// For a tutorial on using protocol buffers with Go, see:\n// https://protobuf.dev/getting-started/gotutorial.\n//\n// For a guide to generated Go protocol buffer code, see:\n// https://protobuf.dev/reference/go/go-generated.\n//\n// # Binary serialization\n//\n// This package contains functions to convert to and from the wire format,\n// an efficient binary serialization of protocol buffers.\n//\n//   - [Size] reports the size of a message in the wire format.\n//\n//   - [Marshal] converts a message to the wire format.\n//     The [MarshalOptions] type provides more control over wire marshaling.\n//\n//   - [Unmarshal] converts a message from the wire format.\n//     The [UnmarshalOptions] type provides more control over wire unmarshaling.\n//\n// # Basic message operations\n//\n//   - [Clone] makes a deep copy of a message.\n//\n//   - [Merge] merges the content of a message into another.\n//\n//   - [Equal] compares two messages. For more control over comparisons\n//     and detailed reporting of differences, see package\n//     [google.golang.org/protobuf/testing/protocmp].\n//\n//   - [Reset] clears the content of a message.\n//\n//   - [CheckInitialized] reports whether all required fields in a message are set.\n//\n// # Optional scalar constructors\n//\n// The API for some generated messages represents optional scalar fields\n// as pointers to a value. For example, an optional string field has the\n// Go type *string.\n//\n//   - [Bool], [Int32], [Int64], [Uint32], [Uint64], [Float32], [Float64], and [String]\n//     take a value and return a pointer to a new instance of it,\n//     to simplify construction of optional field values.\n//\n// Generated enum types usually have an Enum method which performs the\n// same operation.\n//\n// Optional scalar fields are only supported in proto2.\n//\n// # Extension accessors\n//\n//   - [HasExtension], [GetExtension], [SetExtension], and [ClearExtension]\n//     access extension field values in a protocol buffer message.\n//\n// Extension fields are only supported in proto2.\n//\n// # Related packages\n//\n//   - Package [google.golang.org/protobuf/encoding/protojson] converts messages to\n//     and from JSON.\n//\n//   - Package [google.golang.org/protobuf/encoding/prototext] converts messages to\n//     and from the text format.\n//\n//   - Package [google.golang.org/protobuf/reflect/protoreflect] provides a\n//     reflection interface for protocol buffer data types.\n//\n//   - Package [google.golang.org/protobuf/testing/protocmp] provides features\n//     to compare protocol buffer messages with the [github.com/google/go-cmp/cmp]\n//     package.\n//\n//   - Package [google.golang.org/protobuf/types/dynamicpb] provides a dynamic\n//     message type, suitable for working with messages where the protocol buffer\n//     type is only known at runtime.\n//\n// This module contains additional packages for more specialized use cases.\n// Consult the individual package documentation for details.\npackage proto\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/encode.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 proto\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/encoding/messageset\"\n\t\"google.golang.org/protobuf/internal/order\"\n\t\"google.golang.org/protobuf/internal/pragma\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n\n\tprotoerrors \"google.golang.org/protobuf/internal/errors\"\n)\n\n// MarshalOptions configures the marshaler.\n//\n// Example usage:\n//\n//\tb, err := MarshalOptions{Deterministic: true}.Marshal(m)\ntype MarshalOptions struct {\n\tpragma.NoUnkeyedLiterals\n\n\t// AllowPartial allows messages that have missing required fields to marshal\n\t// without returning an error. If AllowPartial is false (the default),\n\t// Marshal will return an error if there are any missing required fields.\n\tAllowPartial bool\n\n\t// Deterministic controls whether the same message will always be\n\t// serialized to the same bytes within the same binary.\n\t//\n\t// Setting this option guarantees that repeated serialization of\n\t// the same message will return the same bytes, and that different\n\t// processes of the same binary (which may be executing on different\n\t// machines) will serialize equal messages to the same bytes.\n\t// It has no effect on the resulting size of the encoded message compared\n\t// to a non-deterministic marshal.\n\t//\n\t// Note that the deterministic serialization is NOT canonical across\n\t// languages. It is not guaranteed to remain stable over time. It is\n\t// unstable across different builds with schema changes due to unknown\n\t// fields. Users who need canonical serialization (e.g., persistent\n\t// storage in a canonical form, fingerprinting, etc.) must define\n\t// their own canonicalization specification and implement their own\n\t// serializer rather than relying on this API.\n\t//\n\t// If deterministic serialization is requested, map entries will be\n\t// sorted by keys in lexographical order. This is an implementation\n\t// detail and subject to change.\n\tDeterministic bool\n\n\t// UseCachedSize indicates that the result of a previous Size call\n\t// may be reused.\n\t//\n\t// Setting this option asserts that:\n\t//\n\t// 1. Size has previously been called on this message with identical\n\t// options (except for UseCachedSize itself).\n\t//\n\t// 2. The message and all its submessages have not changed in any\n\t// way since the Size call. For lazily decoded messages, accessing\n\t// a message results in decoding the message, which is a change.\n\t//\n\t// If either of these invariants is violated,\n\t// the results are undefined and may include panics or corrupted output.\n\t//\n\t// Implementations MAY take this option into account to provide\n\t// better performance, but there is no guarantee that they will do so.\n\t// There is absolutely no guarantee that Size followed by Marshal with\n\t// UseCachedSize set will perform equivalently to Marshal alone.\n\tUseCachedSize bool\n}\n\n// flags turns the specified MarshalOptions (user-facing) into\n// protoiface.MarshalInputFlags (used internally by the marshaler).\n//\n// See impl.marshalOptions.Options for the inverse operation.\nfunc (o MarshalOptions) flags() protoiface.MarshalInputFlags {\n\tvar flags protoiface.MarshalInputFlags\n\n\t// Note: o.AllowPartial is always forced to true by MarshalOptions.marshal,\n\t// which is why it is not a part of MarshalInputFlags.\n\n\tif o.Deterministic {\n\t\tflags |= protoiface.MarshalDeterministic\n\t}\n\n\tif o.UseCachedSize {\n\t\tflags |= protoiface.MarshalUseCachedSize\n\t}\n\n\treturn flags\n}\n\n// Marshal returns the wire-format encoding of m.\n//\n// This is the most common entry point for encoding a Protobuf message.\n//\n// See the [MarshalOptions] type if you need more control.\nfunc Marshal(m Message) ([]byte, error) {\n\t// Treat nil message interface as an empty message; nothing to output.\n\tif m == nil {\n\t\treturn nil, nil\n\t}\n\n\tout, err := MarshalOptions{}.marshal(nil, m.ProtoReflect())\n\tif len(out.Buf) == 0 && err == nil {\n\t\tout.Buf = emptyBytesForMessage(m)\n\t}\n\treturn out.Buf, err\n}\n\n// Marshal returns the wire-format encoding of m.\nfunc (o MarshalOptions) Marshal(m Message) ([]byte, error) {\n\t// Treat nil message interface as an empty message; nothing to output.\n\tif m == nil {\n\t\treturn nil, nil\n\t}\n\n\tout, err := o.marshal(nil, m.ProtoReflect())\n\tif len(out.Buf) == 0 && err == nil {\n\t\tout.Buf = emptyBytesForMessage(m)\n\t}\n\treturn out.Buf, err\n}\n\n// emptyBytesForMessage returns a nil buffer if and only if m is invalid,\n// otherwise it returns a non-nil empty buffer.\n//\n// This is to assist the edge-case where user-code does the following:\n//\n//\tm1.OptionalBytes, _ = proto.Marshal(m2)\n//\n// where they expect the proto2 \"optional_bytes\" field to be populated\n// if any only if m2 is a valid message.\nfunc emptyBytesForMessage(m Message) []byte {\n\tif m == nil || !m.ProtoReflect().IsValid() {\n\t\treturn nil\n\t}\n\treturn emptyBuf[:]\n}\n\n// MarshalAppend appends the wire-format encoding of m to b,\n// returning the result.\n//\n// This is a less common entry point than [Marshal], which is only needed if you\n// need to supply your own buffers for performance reasons.\nfunc (o MarshalOptions) MarshalAppend(b []byte, m Message) ([]byte, error) {\n\t// Treat nil message interface as an empty message; nothing to append.\n\tif m == nil {\n\t\treturn b, nil\n\t}\n\n\tout, err := o.marshal(b, m.ProtoReflect())\n\treturn out.Buf, err\n}\n\n// MarshalState returns the wire-format encoding of a message.\n//\n// This method permits fine-grained control over the marshaler.\n// Most users should use [Marshal] instead.\nfunc (o MarshalOptions) MarshalState(in protoiface.MarshalInput) (protoiface.MarshalOutput, error) {\n\treturn o.marshal(in.Buf, in.Message)\n}\n\n// marshal is a centralized function that all marshal operations go through.\n// For profiling purposes, avoid changing the name of this function or\n// introducing other code paths for marshal that do not go through this.\nfunc (o MarshalOptions) marshal(b []byte, m protoreflect.Message) (out protoiface.MarshalOutput, err error) {\n\tallowPartial := o.AllowPartial\n\to.AllowPartial = true\n\tif methods := protoMethods(m); methods != nil && methods.Marshal != nil &&\n\t\t!(o.Deterministic && methods.Flags&protoiface.SupportMarshalDeterministic == 0) {\n\t\tin := protoiface.MarshalInput{\n\t\t\tMessage: m,\n\t\t\tBuf:     b,\n\t\t\tFlags:   o.flags(),\n\t\t}\n\t\tif methods.Size != nil {\n\t\t\tsout := methods.Size(protoiface.SizeInput{\n\t\t\t\tMessage: m,\n\t\t\t\tFlags:   in.Flags,\n\t\t\t})\n\t\t\tif cap(b) < len(b)+sout.Size {\n\t\t\t\tin.Buf = make([]byte, len(b), growcap(cap(b), len(b)+sout.Size))\n\t\t\t\tcopy(in.Buf, b)\n\t\t\t}\n\t\t\tin.Flags |= protoiface.MarshalUseCachedSize\n\t\t}\n\t\tout, err = methods.Marshal(in)\n\t} else {\n\t\tout.Buf, err = o.marshalMessageSlow(b, m)\n\t}\n\tif err != nil {\n\t\tvar mismatch *protoerrors.SizeMismatchError\n\t\tif errors.As(err, &mismatch) {\n\t\t\treturn out, fmt.Errorf(\"marshaling %s: %v\", string(m.Descriptor().FullName()), err)\n\t\t}\n\t\treturn out, err\n\t}\n\tif allowPartial {\n\t\treturn out, nil\n\t}\n\treturn out, checkInitialized(m)\n}\n\nfunc (o MarshalOptions) marshalMessage(b []byte, m protoreflect.Message) ([]byte, error) {\n\tout, err := o.marshal(b, m)\n\treturn out.Buf, err\n}\n\n// growcap scales up the capacity of a slice.\n//\n// Given a slice with a current capacity of oldcap and a desired\n// capacity of wantcap, growcap returns a new capacity >= wantcap.\n//\n// The algorithm is mostly identical to the one used by append as of Go 1.14.\nfunc growcap(oldcap, wantcap int) (newcap int) {\n\tif wantcap > oldcap*2 {\n\t\tnewcap = wantcap\n\t} else if oldcap < 1024 {\n\t\t// The Go 1.14 runtime takes this case when len(s) < 1024,\n\t\t// not when cap(s) < 1024. The difference doesn't seem\n\t\t// significant here.\n\t\tnewcap = oldcap * 2\n\t} else {\n\t\tnewcap = oldcap\n\t\tfor 0 < newcap && newcap < wantcap {\n\t\t\tnewcap += newcap / 4\n\t\t}\n\t\tif newcap <= 0 {\n\t\t\tnewcap = wantcap\n\t\t}\n\t}\n\treturn newcap\n}\n\nfunc (o MarshalOptions) marshalMessageSlow(b []byte, m protoreflect.Message) ([]byte, error) {\n\tif messageset.IsMessageSet(m.Descriptor()) {\n\t\treturn o.marshalMessageSet(b, m)\n\t}\n\tfieldOrder := order.AnyFieldOrder\n\tif o.Deterministic {\n\t\t// TODO: This should use a more natural ordering like NumberFieldOrder,\n\t\t// but doing so breaks golden tests that make invalid assumption about\n\t\t// output stability of this implementation.\n\t\tfieldOrder = order.LegacyFieldOrder\n\t}\n\tvar err error\n\torder.RangeFields(m, fieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {\n\t\tb, err = o.marshalField(b, fd, v)\n\t\treturn err == nil\n\t})\n\tif err != nil {\n\t\treturn b, err\n\t}\n\tb = append(b, m.GetUnknown()...)\n\treturn b, nil\n}\n\nfunc (o MarshalOptions) marshalField(b []byte, fd protoreflect.FieldDescriptor, value protoreflect.Value) ([]byte, error) {\n\tswitch {\n\tcase fd.IsList():\n\t\treturn o.marshalList(b, fd, value.List())\n\tcase fd.IsMap():\n\t\treturn o.marshalMap(b, fd, value.Map())\n\tdefault:\n\t\tb = protowire.AppendTag(b, fd.Number(), wireTypes[fd.Kind()])\n\t\treturn o.marshalSingular(b, fd, value)\n\t}\n}\n\nfunc (o MarshalOptions) marshalList(b []byte, fd protoreflect.FieldDescriptor, list protoreflect.List) ([]byte, error) {\n\tif fd.IsPacked() && list.Len() > 0 {\n\t\tb = protowire.AppendTag(b, fd.Number(), protowire.BytesType)\n\t\tb, pos := appendSpeculativeLength(b)\n\t\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\t\tvar err error\n\t\t\tb, err = o.marshalSingular(b, fd, list.Get(i))\n\t\t\tif err != nil {\n\t\t\t\treturn b, err\n\t\t\t}\n\t\t}\n\t\tb = finishSpeculativeLength(b, pos)\n\t\treturn b, nil\n\t}\n\n\tkind := fd.Kind()\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tvar err error\n\t\tb = protowire.AppendTag(b, fd.Number(), wireTypes[kind])\n\t\tb, err = o.marshalSingular(b, fd, list.Get(i))\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t}\n\treturn b, nil\n}\n\nfunc (o MarshalOptions) marshalMap(b []byte, fd protoreflect.FieldDescriptor, mapv protoreflect.Map) ([]byte, error) {\n\tkeyf := fd.MapKey()\n\tvalf := fd.MapValue()\n\tkeyOrder := order.AnyKeyOrder\n\tif o.Deterministic {\n\t\tkeyOrder = order.GenericKeyOrder\n\t}\n\tvar err error\n\torder.RangeEntries(mapv, keyOrder, func(key protoreflect.MapKey, value protoreflect.Value) bool {\n\t\tb = protowire.AppendTag(b, fd.Number(), protowire.BytesType)\n\t\tvar pos int\n\t\tb, pos = appendSpeculativeLength(b)\n\n\t\tb, err = o.marshalField(b, keyf, key.Value())\n\t\tif err != nil {\n\t\t\treturn false\n\t\t}\n\t\tb, err = o.marshalField(b, valf, value)\n\t\tif err != nil {\n\t\t\treturn false\n\t\t}\n\t\tb = finishSpeculativeLength(b, pos)\n\t\treturn true\n\t})\n\treturn b, err\n}\n\n// When encoding length-prefixed fields, we speculatively set aside some number of bytes\n// for the length, encode the data, and then encode the length (shifting the data if necessary\n// to make room).\nconst speculativeLength = 1\n\nfunc appendSpeculativeLength(b []byte) ([]byte, int) {\n\tpos := len(b)\n\tb = append(b, \"\\x00\\x00\\x00\\x00\"[:speculativeLength]...)\n\treturn b, pos\n}\n\nfunc finishSpeculativeLength(b []byte, pos int) []byte {\n\tmlen := len(b) - pos - speculativeLength\n\tmsiz := protowire.SizeVarint(uint64(mlen))\n\tif msiz != speculativeLength {\n\t\tfor i := 0; i < msiz-speculativeLength; i++ {\n\t\t\tb = append(b, 0)\n\t\t}\n\t\tcopy(b[pos+msiz:], b[pos+speculativeLength:])\n\t\tb = b[:pos+msiz+mlen]\n\t}\n\tprotowire.AppendVarint(b[:pos], uint64(mlen))\n\treturn b\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/encode_gen.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 generated by generate-types. DO NOT EDIT.\n\npackage proto\n\nimport (\n\t\"math\"\n\t\"unicode/utf8\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/internal/strs\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nvar wireTypes = map[protoreflect.Kind]protowire.Type{\n\tprotoreflect.BoolKind:     protowire.VarintType,\n\tprotoreflect.EnumKind:     protowire.VarintType,\n\tprotoreflect.Int32Kind:    protowire.VarintType,\n\tprotoreflect.Sint32Kind:   protowire.VarintType,\n\tprotoreflect.Uint32Kind:   protowire.VarintType,\n\tprotoreflect.Int64Kind:    protowire.VarintType,\n\tprotoreflect.Sint64Kind:   protowire.VarintType,\n\tprotoreflect.Uint64Kind:   protowire.VarintType,\n\tprotoreflect.Sfixed32Kind: protowire.Fixed32Type,\n\tprotoreflect.Fixed32Kind:  protowire.Fixed32Type,\n\tprotoreflect.FloatKind:    protowire.Fixed32Type,\n\tprotoreflect.Sfixed64Kind: protowire.Fixed64Type,\n\tprotoreflect.Fixed64Kind:  protowire.Fixed64Type,\n\tprotoreflect.DoubleKind:   protowire.Fixed64Type,\n\tprotoreflect.StringKind:   protowire.BytesType,\n\tprotoreflect.BytesKind:    protowire.BytesType,\n\tprotoreflect.MessageKind:  protowire.BytesType,\n\tprotoreflect.GroupKind:    protowire.StartGroupType,\n}\n\nfunc (o MarshalOptions) marshalSingular(b []byte, fd protoreflect.FieldDescriptor, v protoreflect.Value) ([]byte, error) {\n\tswitch fd.Kind() {\n\tcase protoreflect.BoolKind:\n\t\tb = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool()))\n\tcase protoreflect.EnumKind:\n\t\tb = protowire.AppendVarint(b, uint64(v.Enum()))\n\tcase protoreflect.Int32Kind:\n\t\tb = protowire.AppendVarint(b, uint64(int32(v.Int())))\n\tcase protoreflect.Sint32Kind:\n\t\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int()))))\n\tcase protoreflect.Uint32Kind:\n\t\tb = protowire.AppendVarint(b, uint64(uint32(v.Uint())))\n\tcase protoreflect.Int64Kind:\n\t\tb = protowire.AppendVarint(b, uint64(v.Int()))\n\tcase protoreflect.Sint64Kind:\n\t\tb = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int()))\n\tcase protoreflect.Uint64Kind:\n\t\tb = protowire.AppendVarint(b, v.Uint())\n\tcase protoreflect.Sfixed32Kind:\n\t\tb = protowire.AppendFixed32(b, uint32(v.Int()))\n\tcase protoreflect.Fixed32Kind:\n\t\tb = protowire.AppendFixed32(b, uint32(v.Uint()))\n\tcase protoreflect.FloatKind:\n\t\tb = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float())))\n\tcase protoreflect.Sfixed64Kind:\n\t\tb = protowire.AppendFixed64(b, uint64(v.Int()))\n\tcase protoreflect.Fixed64Kind:\n\t\tb = protowire.AppendFixed64(b, v.Uint())\n\tcase protoreflect.DoubleKind:\n\t\tb = protowire.AppendFixed64(b, math.Float64bits(v.Float()))\n\tcase protoreflect.StringKind:\n\t\tif strs.EnforceUTF8(fd) && !utf8.ValidString(v.String()) {\n\t\t\treturn b, errors.InvalidUTF8(string(fd.FullName()))\n\t\t}\n\t\tb = protowire.AppendString(b, v.String())\n\tcase protoreflect.BytesKind:\n\t\tb = protowire.AppendBytes(b, v.Bytes())\n\tcase protoreflect.MessageKind:\n\t\tvar pos int\n\t\tvar err error\n\t\tb, pos = appendSpeculativeLength(b)\n\t\tb, err = o.marshalMessage(b, v.Message())\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t\tb = finishSpeculativeLength(b, pos)\n\tcase protoreflect.GroupKind:\n\t\tvar err error\n\t\tb, err = o.marshalMessage(b, v.Message())\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t\tb = protowire.AppendVarint(b, protowire.EncodeTag(fd.Number(), protowire.EndGroupType))\n\tdefault:\n\t\treturn b, errors.New(\"invalid kind %v\", fd.Kind())\n\t}\n\treturn b, nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/equal.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 proto\n\nimport (\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\n// Equal reports whether two messages are equal,\n// by recursively comparing the fields of the message.\n//\n//   - Bytes fields are equal if they contain identical bytes.\n//     Empty bytes (regardless of nil-ness) are considered equal.\n//\n//   - Floating-point fields are equal if they contain the same value.\n//     Unlike the == operator, a NaN is equal to another NaN.\n//\n//   - Other scalar fields are equal if they contain the same value.\n//\n//   - Message fields are equal if they have\n//     the same set of populated known and extension field values, and\n//     the same set of unknown fields values.\n//\n//   - Lists are equal if they are the same length and\n//     each corresponding element is equal.\n//\n//   - Maps are equal if they have the same set of keys and\n//     the corresponding value for each key is equal.\n//\n// An invalid message is not equal to a valid message.\n// An invalid message is only equal to another invalid message of the\n// same type. An invalid message often corresponds to a nil pointer\n// of the concrete message type. For example, (*pb.M)(nil) is not equal\n// to &pb.M{}.\n// If two valid messages marshal to the same bytes under deterministic\n// serialization, then Equal is guaranteed to report true.\nfunc Equal(x, y Message) bool {\n\tif x == nil || y == nil {\n\t\treturn x == nil && y == nil\n\t}\n\tif reflect.TypeOf(x).Kind() == reflect.Ptr && x == y {\n\t\t// Avoid an expensive comparison if both inputs are identical pointers.\n\t\treturn true\n\t}\n\tmx := x.ProtoReflect()\n\tmy := y.ProtoReflect()\n\tif mx.IsValid() != my.IsValid() {\n\t\treturn false\n\t}\n\n\t// Only one of the messages needs to implement the fast-path for it to work.\n\tpmx := protoMethods(mx)\n\tpmy := protoMethods(my)\n\tif pmx != nil && pmy != nil && pmx.Equal != nil && pmy.Equal != nil {\n\t\treturn pmx.Equal(protoiface.EqualInput{MessageA: mx, MessageB: my}).Equal\n\t}\n\n\tvx := protoreflect.ValueOfMessage(mx)\n\tvy := protoreflect.ValueOfMessage(my)\n\treturn vx.Equal(vy)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/extension.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 proto\n\nimport (\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// HasExtension reports whether an extension field is populated.\n// It returns false if m is invalid or if xt does not extend m.\nfunc HasExtension(m Message, xt protoreflect.ExtensionType) bool {\n\t// Treat nil message interface or descriptor as an empty message; no populated\n\t// fields.\n\tif m == nil || xt == nil {\n\t\treturn false\n\t}\n\n\t// As a special-case, we reports invalid or mismatching descriptors\n\t// as always not being populated (since they aren't).\n\tmr := m.ProtoReflect()\n\txd := xt.TypeDescriptor()\n\tif mr.Descriptor() != xd.ContainingMessage() {\n\t\treturn false\n\t}\n\n\treturn mr.Has(xd)\n}\n\n// ClearExtension clears an extension field such that subsequent\n// [HasExtension] calls return false.\n// It panics if m is invalid or if xt does not extend m.\nfunc ClearExtension(m Message, xt protoreflect.ExtensionType) {\n\tm.ProtoReflect().Clear(xt.TypeDescriptor())\n}\n\n// GetExtension retrieves the value for an extension field.\n// If the field is unpopulated, it returns the default value for\n// scalars and an immutable, empty value for lists or messages.\n// It panics if xt does not extend m.\n//\n// The type of the value is dependent on the field type of the extension.\n// For extensions generated by protoc-gen-go, the Go type is as follows:\n//\n//\t╔═══════════════════╤═════════════════════════╗\n//\t║ Go type           │ Protobuf kind           ║\n//\t╠═══════════════════╪═════════════════════════╣\n//\t║ bool              │ bool                    ║\n//\t║ int32             │ int32, sint32, sfixed32 ║\n//\t║ int64             │ int64, sint64, sfixed64 ║\n//\t║ uint32            │ uint32, fixed32         ║\n//\t║ uint64            │ uint64, fixed64         ║\n//\t║ float32           │ float                   ║\n//\t║ float64           │ double                  ║\n//\t║ string            │ string                  ║\n//\t║ []byte            │ bytes                   ║\n//\t║ protoreflect.Enum │ enum                    ║\n//\t║ proto.Message     │ message, group          ║\n//\t╚═══════════════════╧═════════════════════════╝\n//\n// The protoreflect.Enum and proto.Message types are the concrete Go type\n// associated with the named enum or message. Repeated fields are represented\n// using a Go slice of the base element type.\n//\n// If a generated extension descriptor variable is directly passed to\n// GetExtension, then the call should be followed immediately by a\n// type assertion to the expected output value. For example:\n//\n//\tmm := proto.GetExtension(m, foopb.E_MyExtension).(*foopb.MyMessage)\n//\n// This pattern enables static analysis tools to verify that the asserted type\n// matches the Go type associated with the extension field and\n// also enables a possible future migration to a type-safe extension API.\n//\n// Since singular messages are the most common extension type, the pattern of\n// calling HasExtension followed by GetExtension may be simplified to:\n//\n//\tif mm := proto.GetExtension(m, foopb.E_MyExtension).(*foopb.MyMessage); mm != nil {\n//\t    ... // make use of mm\n//\t}\n//\n// The mm variable is non-nil if and only if HasExtension reports true.\nfunc GetExtension(m Message, xt protoreflect.ExtensionType) any {\n\t// Treat nil message interface as an empty message; return the default.\n\tif m == nil {\n\t\treturn xt.InterfaceOf(xt.Zero())\n\t}\n\n\treturn xt.InterfaceOf(m.ProtoReflect().Get(xt.TypeDescriptor()))\n}\n\n// SetExtension stores the value of an extension field.\n// It panics if m is invalid, xt does not extend m, or if type of v\n// is invalid for the specified extension field.\n//\n// The type of the value is dependent on the field type of the extension.\n// For extensions generated by protoc-gen-go, the Go type is as follows:\n//\n//\t╔═══════════════════╤═════════════════════════╗\n//\t║ Go type           │ Protobuf kind           ║\n//\t╠═══════════════════╪═════════════════════════╣\n//\t║ bool              │ bool                    ║\n//\t║ int32             │ int32, sint32, sfixed32 ║\n//\t║ int64             │ int64, sint64, sfixed64 ║\n//\t║ uint32            │ uint32, fixed32         ║\n//\t║ uint64            │ uint64, fixed64         ║\n//\t║ float32           │ float                   ║\n//\t║ float64           │ double                  ║\n//\t║ string            │ string                  ║\n//\t║ []byte            │ bytes                   ║\n//\t║ protoreflect.Enum │ enum                    ║\n//\t║ proto.Message     │ message, group          ║\n//\t╚═══════════════════╧═════════════════════════╝\n//\n// The protoreflect.Enum and proto.Message types are the concrete Go type\n// associated with the named enum or message. Repeated fields are represented\n// using a Go slice of the base element type.\n//\n// If a generated extension descriptor variable is directly passed to\n// SetExtension (e.g., foopb.E_MyExtension), then the value should be a\n// concrete type that matches the expected Go type for the extension descriptor\n// so that static analysis tools can verify type correctness.\n// This also enables a possible future migration to a type-safe extension API.\nfunc SetExtension(m Message, xt protoreflect.ExtensionType, v any) {\n\txd := xt.TypeDescriptor()\n\tpv := xt.ValueOf(v)\n\n\t// Specially treat an invalid list, map, or message as clear.\n\tisValid := true\n\tswitch {\n\tcase xd.IsList():\n\t\tisValid = pv.List().IsValid()\n\tcase xd.IsMap():\n\t\tisValid = pv.Map().IsValid()\n\tcase xd.Message() != nil:\n\t\tisValid = pv.Message().IsValid()\n\t}\n\tif !isValid {\n\t\tm.ProtoReflect().Clear(xd)\n\t\treturn\n\t}\n\n\tm.ProtoReflect().Set(xd, pv)\n}\n\n// RangeExtensions iterates over every populated extension field in m in an\n// undefined order, calling f for each extension type and value encountered.\n// It returns immediately if f returns false.\n// While iterating, mutating operations may only be performed\n// on the current extension field.\nfunc RangeExtensions(m Message, f func(protoreflect.ExtensionType, any) bool) {\n\t// Treat nil message interface as an empty message; nothing to range over.\n\tif m == nil {\n\t\treturn\n\t}\n\n\tm.ProtoReflect().Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {\n\t\tif fd.IsExtension() {\n\t\t\txt := fd.(protoreflect.ExtensionTypeDescriptor).Type()\n\t\t\tvi := xt.InterfaceOf(v)\n\t\t\treturn f(xt, vi)\n\t\t}\n\t\treturn true\n\t})\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/merge.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 proto\n\nimport (\n\t\"fmt\"\n\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\n// Merge merges src into dst, which must be a message with the same descriptor.\n//\n// Populated scalar fields in src are copied to dst, while populated\n// singular messages in src are merged into dst by recursively calling Merge.\n// The elements of every list field in src is appended to the corresponded\n// list fields in dst. The entries of every map field in src is copied into\n// the corresponding map field in dst, possibly replacing existing entries.\n// The unknown fields of src are appended to the unknown fields of dst.\n//\n// It is semantically equivalent to unmarshaling the encoded form of src\n// into dst with the [UnmarshalOptions.Merge] option specified.\nfunc Merge(dst, src Message) {\n\t// TODO: Should nil src be treated as semantically equivalent to a\n\t// untyped, read-only, empty message? What about a nil dst?\n\n\tdstMsg, srcMsg := dst.ProtoReflect(), src.ProtoReflect()\n\tif dstMsg.Descriptor() != srcMsg.Descriptor() {\n\t\tif got, want := dstMsg.Descriptor().FullName(), srcMsg.Descriptor().FullName(); got != want {\n\t\t\tpanic(fmt.Sprintf(\"descriptor mismatch: %v != %v\", got, want))\n\t\t}\n\t\tpanic(\"descriptor mismatch\")\n\t}\n\tmergeOptions{}.mergeMessage(dstMsg, srcMsg)\n}\n\n// Clone returns a deep copy of m.\n// If the top-level message is invalid, it returns an invalid message as well.\nfunc Clone(m Message) Message {\n\t// NOTE: Most usages of Clone assume the following properties:\n\t//\tt := reflect.TypeOf(m)\n\t//\tt == reflect.TypeOf(m.ProtoReflect().New().Interface())\n\t//\tt == reflect.TypeOf(m.ProtoReflect().Type().Zero().Interface())\n\t//\n\t// Embedding protobuf messages breaks this since the parent type will have\n\t// a forwarded ProtoReflect method, but the Interface method will return\n\t// the underlying embedded message type.\n\tif m == nil {\n\t\treturn nil\n\t}\n\tsrc := m.ProtoReflect()\n\tif !src.IsValid() {\n\t\treturn src.Type().Zero().Interface()\n\t}\n\tdst := src.New()\n\tmergeOptions{}.mergeMessage(dst, src)\n\treturn dst.Interface()\n}\n\n// CloneOf returns a deep copy of m. If the top-level message is invalid,\n// it returns an invalid message as well.\nfunc CloneOf[M Message](m M) M {\n\treturn Clone(m).(M)\n}\n\n// mergeOptions provides a namespace for merge functions, and can be\n// exported in the future if we add user-visible merge options.\ntype mergeOptions struct{}\n\nfunc (o mergeOptions) mergeMessage(dst, src protoreflect.Message) {\n\tmethods := protoMethods(dst)\n\tif methods != nil && methods.Merge != nil {\n\t\tin := protoiface.MergeInput{\n\t\t\tDestination: dst,\n\t\t\tSource:      src,\n\t\t}\n\t\tout := methods.Merge(in)\n\t\tif out.Flags&protoiface.MergeComplete != 0 {\n\t\t\treturn\n\t\t}\n\t}\n\n\tif !dst.IsValid() {\n\t\tpanic(fmt.Sprintf(\"cannot merge into invalid %v message\", dst.Descriptor().FullName()))\n\t}\n\n\tsrc.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {\n\t\tswitch {\n\t\tcase fd.IsList():\n\t\t\to.mergeList(dst.Mutable(fd).List(), v.List(), fd)\n\t\tcase fd.IsMap():\n\t\t\to.mergeMap(dst.Mutable(fd).Map(), v.Map(), fd.MapValue())\n\t\tcase fd.Message() != nil:\n\t\t\to.mergeMessage(dst.Mutable(fd).Message(), v.Message())\n\t\tcase fd.Kind() == protoreflect.BytesKind:\n\t\t\tdst.Set(fd, o.cloneBytes(v))\n\t\tdefault:\n\t\t\tdst.Set(fd, v)\n\t\t}\n\t\treturn true\n\t})\n\n\tif len(src.GetUnknown()) > 0 {\n\t\tdst.SetUnknown(append(dst.GetUnknown(), src.GetUnknown()...))\n\t}\n}\n\nfunc (o mergeOptions) mergeList(dst, src protoreflect.List, fd protoreflect.FieldDescriptor) {\n\t// Merge semantics appends to the end of the existing list.\n\tfor i, n := 0, src.Len(); i < n; i++ {\n\t\tswitch v := src.Get(i); {\n\t\tcase fd.Message() != nil:\n\t\t\tdstv := dst.NewElement()\n\t\t\to.mergeMessage(dstv.Message(), v.Message())\n\t\t\tdst.Append(dstv)\n\t\tcase fd.Kind() == protoreflect.BytesKind:\n\t\t\tdst.Append(o.cloneBytes(v))\n\t\tdefault:\n\t\t\tdst.Append(v)\n\t\t}\n\t}\n}\n\nfunc (o mergeOptions) mergeMap(dst, src protoreflect.Map, fd protoreflect.FieldDescriptor) {\n\t// Merge semantics replaces, rather than merges into existing entries.\n\tsrc.Range(func(k protoreflect.MapKey, v protoreflect.Value) bool {\n\t\tswitch {\n\t\tcase fd.Message() != nil:\n\t\t\tdstv := dst.NewValue()\n\t\t\to.mergeMessage(dstv.Message(), v.Message())\n\t\t\tdst.Set(k, dstv)\n\t\tcase fd.Kind() == protoreflect.BytesKind:\n\t\t\tdst.Set(k, o.cloneBytes(v))\n\t\tdefault:\n\t\t\tdst.Set(k, v)\n\t\t}\n\t\treturn true\n\t})\n}\n\nfunc (o mergeOptions) cloneBytes(v protoreflect.Value) protoreflect.Value {\n\treturn protoreflect.ValueOfBytes(append([]byte{}, v.Bytes()...))\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/messageset.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 proto\n\nimport (\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/encoding/messageset\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/internal/flags\"\n\t\"google.golang.org/protobuf/internal/order\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/reflect/protoregistry\"\n)\n\nfunc (o MarshalOptions) sizeMessageSet(m protoreflect.Message) (size int) {\n\tm.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {\n\t\tsize += messageset.SizeField(fd.Number())\n\t\tsize += protowire.SizeTag(messageset.FieldMessage)\n\t\tsize += protowire.SizeBytes(o.size(v.Message()))\n\t\treturn true\n\t})\n\tsize += messageset.SizeUnknown(m.GetUnknown())\n\treturn size\n}\n\nfunc (o MarshalOptions) marshalMessageSet(b []byte, m protoreflect.Message) ([]byte, error) {\n\tif !flags.ProtoLegacy {\n\t\treturn b, errors.New(\"no support for message_set_wire_format\")\n\t}\n\tfieldOrder := order.AnyFieldOrder\n\tif o.Deterministic {\n\t\tfieldOrder = order.NumberFieldOrder\n\t}\n\tvar err error\n\torder.RangeFields(m, fieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {\n\t\tb, err = o.marshalMessageSetField(b, fd, v)\n\t\treturn err == nil\n\t})\n\tif err != nil {\n\t\treturn b, err\n\t}\n\treturn messageset.AppendUnknown(b, m.GetUnknown())\n}\n\nfunc (o MarshalOptions) marshalMessageSetField(b []byte, fd protoreflect.FieldDescriptor, value protoreflect.Value) ([]byte, error) {\n\tb = messageset.AppendFieldStart(b, fd.Number())\n\tb = protowire.AppendTag(b, messageset.FieldMessage, protowire.BytesType)\n\tcalculatedSize := o.Size(value.Message().Interface())\n\tb = protowire.AppendVarint(b, uint64(calculatedSize))\n\tbefore := len(b)\n\tb, err := o.marshalMessage(b, value.Message())\n\tif err != nil {\n\t\treturn b, err\n\t}\n\tif measuredSize := len(b) - before; calculatedSize != measuredSize {\n\t\treturn nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize)\n\t}\n\tb = messageset.AppendFieldEnd(b)\n\treturn b, nil\n}\n\nfunc (o UnmarshalOptions) unmarshalMessageSet(b []byte, m protoreflect.Message) error {\n\tif !flags.ProtoLegacy {\n\t\treturn errors.New(\"no support for message_set_wire_format\")\n\t}\n\treturn messageset.Unmarshal(b, false, func(num protowire.Number, v []byte) error {\n\t\terr := o.unmarshalMessageSetField(m, num, v)\n\t\tif err == errUnknown {\n\t\t\tunknown := m.GetUnknown()\n\t\t\tunknown = protowire.AppendTag(unknown, num, protowire.BytesType)\n\t\t\tunknown = protowire.AppendBytes(unknown, v)\n\t\t\tm.SetUnknown(unknown)\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t})\n}\n\nfunc (o UnmarshalOptions) unmarshalMessageSetField(m protoreflect.Message, num protowire.Number, v []byte) error {\n\tmd := m.Descriptor()\n\tif !md.ExtensionRanges().Has(num) {\n\t\treturn errUnknown\n\t}\n\txt, err := o.Resolver.FindExtensionByNumber(md.FullName(), num)\n\tif err == protoregistry.NotFound {\n\t\treturn errUnknown\n\t}\n\tif err != nil {\n\t\treturn errors.New(\"%v: unable to resolve extension %v: %v\", md.FullName(), num, err)\n\t}\n\txd := xt.TypeDescriptor()\n\tif err := o.unmarshalMessage(v, m.Mutable(xd).Message()); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/proto.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 proto\n\nimport (\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// Message is the top-level interface that all messages must implement.\n// It provides access to a reflective view of a message.\n// Any implementation of this interface may be used with all functions in the\n// protobuf module that accept a Message, except where otherwise specified.\n//\n// This is the v2 interface definition for protobuf messages.\n// The v1 interface definition is [github.com/golang/protobuf/proto.Message].\n//\n//   - To convert a v1 message to a v2 message,\n//     use [google.golang.org/protobuf/protoadapt.MessageV2Of].\n//   - To convert a v2 message to a v1 message,\n//     use [google.golang.org/protobuf/protoadapt.MessageV1Of].\ntype Message = protoreflect.ProtoMessage\n\n// Error matches all errors produced by packages in the protobuf module\n// according to [errors.Is].\n//\n// Example usage:\n//\n//\tif errors.Is(err, proto.Error) { ... }\nvar Error error\n\nfunc init() {\n\tError = errors.Error\n}\n\n// MessageName returns the full name of m.\n// If m is nil, it returns an empty string.\nfunc MessageName(m Message) protoreflect.FullName {\n\tif m == nil {\n\t\treturn \"\"\n\t}\n\treturn m.ProtoReflect().Descriptor().FullName()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/proto_methods.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// The protoreflect build tag disables use of fast-path methods.\n//go:build !protoreflect\n// +build !protoreflect\n\npackage proto\n\nimport (\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\nconst hasProtoMethods = true\n\nfunc protoMethods(m protoreflect.Message) *protoiface.Methods {\n\treturn m.ProtoMethods()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/proto_reflect.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// The protoreflect build tag disables use of fast-path methods.\n//go:build protoreflect\n// +build protoreflect\n\npackage proto\n\nimport (\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\nconst hasProtoMethods = false\n\nfunc protoMethods(m protoreflect.Message) *protoiface.Methods {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/reset.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 proto\n\nimport (\n\t\"fmt\"\n\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// Reset clears every field in the message.\n// The resulting message shares no observable memory with its previous state\n// other than the memory for the message itself.\nfunc Reset(m Message) {\n\tif mr, ok := m.(interface{ Reset() }); ok && hasProtoMethods {\n\t\tmr.Reset()\n\t\treturn\n\t}\n\tresetMessage(m.ProtoReflect())\n}\n\nfunc resetMessage(m protoreflect.Message) {\n\tif !m.IsValid() {\n\t\tpanic(fmt.Sprintf(\"cannot reset invalid %v message\", m.Descriptor().FullName()))\n\t}\n\n\t// Clear all known fields.\n\tfds := m.Descriptor().Fields()\n\tfor i := 0; i < fds.Len(); i++ {\n\t\tm.Clear(fds.Get(i))\n\t}\n\n\t// Clear extension fields.\n\tm.Range(func(fd protoreflect.FieldDescriptor, _ protoreflect.Value) bool {\n\t\tm.Clear(fd)\n\t\treturn true\n\t})\n\n\t// Clear unknown fields.\n\tm.SetUnknown(nil)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/size.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 proto\n\nimport (\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/encoding/messageset\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n\t\"google.golang.org/protobuf/runtime/protoiface\"\n)\n\n// Size returns the size in bytes of the wire-format encoding of m.\n//\n// Note that Size might return more bytes than Marshal will write in the case of\n// lazily decoded messages that arrive in non-minimal wire format: see\n// https://protobuf.dev/reference/go/size/ for more details.\nfunc Size(m Message) int {\n\treturn MarshalOptions{}.Size(m)\n}\n\n// Size returns the size in bytes of the wire-format encoding of m.\n//\n// Note that Size might return more bytes than Marshal will write in the case of\n// lazily decoded messages that arrive in non-minimal wire format: see\n// https://protobuf.dev/reference/go/size/ for more details.\nfunc (o MarshalOptions) Size(m Message) int {\n\t// Treat a nil message interface as an empty message; nothing to output.\n\tif m == nil {\n\t\treturn 0\n\t}\n\n\treturn o.size(m.ProtoReflect())\n}\n\n// size is a centralized function that all size operations go through.\n// For profiling purposes, avoid changing the name of this function or\n// introducing other code paths for size that do not go through this.\nfunc (o MarshalOptions) size(m protoreflect.Message) (size int) {\n\tmethods := protoMethods(m)\n\tif methods != nil && methods.Size != nil {\n\t\tout := methods.Size(protoiface.SizeInput{\n\t\t\tMessage: m,\n\t\t\tFlags:   o.flags(),\n\t\t})\n\t\treturn out.Size\n\t}\n\tif methods != nil && methods.Marshal != nil {\n\t\t// This is not efficient, but we don't have any choice.\n\t\t// This case is mainly used for legacy types with a Marshal method.\n\t\tout, _ := methods.Marshal(protoiface.MarshalInput{\n\t\t\tMessage: m,\n\t\t\tFlags:   o.flags(),\n\t\t})\n\t\treturn len(out.Buf)\n\t}\n\treturn o.sizeMessageSlow(m)\n}\n\nfunc (o MarshalOptions) sizeMessageSlow(m protoreflect.Message) (size int) {\n\tif messageset.IsMessageSet(m.Descriptor()) {\n\t\treturn o.sizeMessageSet(m)\n\t}\n\tm.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {\n\t\tsize += o.sizeField(fd, v)\n\t\treturn true\n\t})\n\tsize += len(m.GetUnknown())\n\treturn size\n}\n\nfunc (o MarshalOptions) sizeField(fd protoreflect.FieldDescriptor, value protoreflect.Value) (size int) {\n\tnum := fd.Number()\n\tswitch {\n\tcase fd.IsList():\n\t\treturn o.sizeList(num, fd, value.List())\n\tcase fd.IsMap():\n\t\treturn o.sizeMap(num, fd, value.Map())\n\tdefault:\n\t\treturn protowire.SizeTag(num) + o.sizeSingular(num, fd.Kind(), value)\n\t}\n}\n\nfunc (o MarshalOptions) sizeList(num protowire.Number, fd protoreflect.FieldDescriptor, list protoreflect.List) (size int) {\n\tsizeTag := protowire.SizeTag(num)\n\n\tif fd.IsPacked() && list.Len() > 0 {\n\t\tcontent := 0\n\t\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\t\tcontent += o.sizeSingular(num, fd.Kind(), list.Get(i))\n\t\t}\n\t\treturn sizeTag + protowire.SizeBytes(content)\n\t}\n\n\tfor i, llen := 0, list.Len(); i < llen; i++ {\n\t\tsize += sizeTag + o.sizeSingular(num, fd.Kind(), list.Get(i))\n\t}\n\treturn size\n}\n\nfunc (o MarshalOptions) sizeMap(num protowire.Number, fd protoreflect.FieldDescriptor, mapv protoreflect.Map) (size int) {\n\tsizeTag := protowire.SizeTag(num)\n\n\tmapv.Range(func(key protoreflect.MapKey, value protoreflect.Value) bool {\n\t\tsize += sizeTag\n\t\tsize += protowire.SizeBytes(o.sizeField(fd.MapKey(), key.Value()) + o.sizeField(fd.MapValue(), value))\n\t\treturn true\n\t})\n\treturn size\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/size_gen.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 generated by generate-types. DO NOT EDIT.\n\npackage proto\n\nimport (\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\nfunc (o MarshalOptions) sizeSingular(num protowire.Number, kind protoreflect.Kind, v protoreflect.Value) int {\n\tswitch kind {\n\tcase protoreflect.BoolKind:\n\t\treturn protowire.SizeVarint(protowire.EncodeBool(v.Bool()))\n\tcase protoreflect.EnumKind:\n\t\treturn protowire.SizeVarint(uint64(v.Enum()))\n\tcase protoreflect.Int32Kind:\n\t\treturn protowire.SizeVarint(uint64(int32(v.Int())))\n\tcase protoreflect.Sint32Kind:\n\t\treturn protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int()))))\n\tcase protoreflect.Uint32Kind:\n\t\treturn protowire.SizeVarint(uint64(uint32(v.Uint())))\n\tcase protoreflect.Int64Kind:\n\t\treturn protowire.SizeVarint(uint64(v.Int()))\n\tcase protoreflect.Sint64Kind:\n\t\treturn protowire.SizeVarint(protowire.EncodeZigZag(v.Int()))\n\tcase protoreflect.Uint64Kind:\n\t\treturn protowire.SizeVarint(v.Uint())\n\tcase protoreflect.Sfixed32Kind:\n\t\treturn protowire.SizeFixed32()\n\tcase protoreflect.Fixed32Kind:\n\t\treturn protowire.SizeFixed32()\n\tcase protoreflect.FloatKind:\n\t\treturn protowire.SizeFixed32()\n\tcase protoreflect.Sfixed64Kind:\n\t\treturn protowire.SizeFixed64()\n\tcase protoreflect.Fixed64Kind:\n\t\treturn protowire.SizeFixed64()\n\tcase protoreflect.DoubleKind:\n\t\treturn protowire.SizeFixed64()\n\tcase protoreflect.StringKind:\n\t\treturn protowire.SizeBytes(len(v.String()))\n\tcase protoreflect.BytesKind:\n\t\treturn protowire.SizeBytes(len(v.Bytes()))\n\tcase protoreflect.MessageKind:\n\t\treturn protowire.SizeBytes(o.size(v.Message()))\n\tcase protoreflect.GroupKind:\n\t\treturn protowire.SizeGroup(num, o.size(v.Message()))\n\tdefault:\n\t\treturn 0\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/wrapperopaque.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 proto\n\n// ValueOrNil returns nil if has is false, or a pointer to a new variable\n// containing the value returned by the specified getter.\n//\n// This function is similar to the wrappers (proto.Int32(), proto.String(),\n// etc.), but is generic (works for any field type) and works with the hasser\n// and getter of a field, as opposed to a value.\n//\n// This is convenient when populating builder fields.\n//\n// Example:\n//\n//\thop := attr.GetDirectHop()\n//\tinjectedRoute := ripb.InjectedRoute_builder{\n//\t  Prefixes: route.GetPrefixes(),\n//\t  NextHop:  proto.ValueOrNil(hop.HasAddress(), hop.GetAddress),\n//\t}\nfunc ValueOrNil[T any](has bool, getter func() T) *T {\n\tif !has {\n\t\treturn nil\n\t}\n\tv := getter()\n\treturn &v\n}\n\n// ValueOrDefault returns the protobuf message val if val is not nil, otherwise\n// it returns a pointer to an empty val message.\n//\n// This function allows for translating code from the old Open Struct API to the\n// new Opaque API.\n//\n// The old Open Struct API represented oneof fields with a wrapper struct:\n//\n//\tvar signedImg *accountpb.SignedImage\n//\tprofile := &accountpb.Profile{\n//\t\t// The Avatar oneof will be set, with an empty SignedImage.\n//\t\tAvatar: &accountpb.Profile_SignedImage{signedImg},\n//\t}\n//\n// The new Opaque API treats oneof fields like regular fields, there are no more\n// wrapper structs:\n//\n//\tvar signedImg *accountpb.SignedImage\n//\tprofile := &accountpb.Profile{}\n//\tprofile.SetSignedImage(signedImg)\n//\n// For convenience, the Opaque API also offers Builders, which allow for a\n// direct translation of struct initialization. However, because Builders use\n// nilness to represent field presence (but there is no non-nil wrapper struct\n// anymore), Builders cannot distinguish between an unset oneof and a set oneof\n// with nil message. The above code would need to be translated with help of the\n// ValueOrDefault function to retain the same behavior:\n//\n//\tvar signedImg *accountpb.SignedImage\n//\treturn &accountpb.Profile_builder{\n//\t\tSignedImage: proto.ValueOrDefault(signedImg),\n//\t}.Build()\nfunc ValueOrDefault[T interface {\n\t*P\n\tMessage\n}, P any](val T) T {\n\tif val == nil {\n\t\treturn T(new(P))\n\t}\n\treturn val\n}\n\n// ValueOrDefaultBytes is like ValueOrDefault but for working with fields of\n// type []byte.\nfunc ValueOrDefaultBytes(val []byte) []byte {\n\tif val == nil {\n\t\treturn []byte{}\n\t}\n\treturn val\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/proto/wrappers.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 proto\n\n// Bool stores v in a new bool value and returns a pointer to it.\nfunc Bool(v bool) *bool { return &v }\n\n// Int32 stores v in a new int32 value and returns a pointer to it.\nfunc Int32(v int32) *int32 { return &v }\n\n// Int64 stores v in a new int64 value and returns a pointer to it.\nfunc Int64(v int64) *int64 { return &v }\n\n// Float32 stores v in a new float32 value and returns a pointer to it.\nfunc Float32(v float32) *float32 { return &v }\n\n// Float64 stores v in a new float64 value and returns a pointer to it.\nfunc Float64(v float64) *float64 { return &v }\n\n// Uint32 stores v in a new uint32 value and returns a pointer to it.\nfunc Uint32(v uint32) *uint32 { return &v }\n\n// Uint64 stores v in a new uint64 value and returns a pointer to it.\nfunc Uint64(v uint64) *uint64 { return &v }\n\n// String stores v in a new string value and returns a pointer to it.\nfunc String(v string) *string { return &v }\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/reflect/protoreflect/methods.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 protoreflect\n\nimport (\n\t\"google.golang.org/protobuf/internal/pragma\"\n)\n\n// The following types are used by the fast-path Message.ProtoMethods method.\n//\n// To avoid polluting the public protoreflect API with types used only by\n// low-level implementations, the canonical definitions of these types are\n// in the runtime/protoiface package. The definitions here and in protoiface\n// must be kept in sync.\ntype (\n\tmethods = struct {\n\t\tpragma.NoUnkeyedLiterals\n\t\tFlags            supportFlags\n\t\tSize             func(sizeInput) sizeOutput\n\t\tMarshal          func(marshalInput) (marshalOutput, error)\n\t\tUnmarshal        func(unmarshalInput) (unmarshalOutput, error)\n\t\tMerge            func(mergeInput) mergeOutput\n\t\tCheckInitialized func(checkInitializedInput) (checkInitializedOutput, error)\n\t\tEqual            func(equalInput) equalOutput\n\t}\n\tsupportFlags = uint64\n\tsizeInput    = struct {\n\t\tpragma.NoUnkeyedLiterals\n\t\tMessage Message\n\t\tFlags   uint8\n\t}\n\tsizeOutput = struct {\n\t\tpragma.NoUnkeyedLiterals\n\t\tSize int\n\t}\n\tmarshalInput = struct {\n\t\tpragma.NoUnkeyedLiterals\n\t\tMessage Message\n\t\tBuf     []byte\n\t\tFlags   uint8\n\t}\n\tmarshalOutput = struct {\n\t\tpragma.NoUnkeyedLiterals\n\t\tBuf []byte\n\t}\n\tunmarshalInput = struct {\n\t\tpragma.NoUnkeyedLiterals\n\t\tMessage  Message\n\t\tBuf      []byte\n\t\tFlags    uint8\n\t\tResolver interface {\n\t\t\tFindExtensionByName(field FullName) (ExtensionType, error)\n\t\t\tFindExtensionByNumber(message FullName, field FieldNumber) (ExtensionType, error)\n\t\t}\n\t\tDepth int\n\t}\n\tunmarshalOutput = struct {\n\t\tpragma.NoUnkeyedLiterals\n\t\tFlags uint8\n\t}\n\tmergeInput = struct {\n\t\tpragma.NoUnkeyedLiterals\n\t\tSource      Message\n\t\tDestination Message\n\t}\n\tmergeOutput = struct {\n\t\tpragma.NoUnkeyedLiterals\n\t\tFlags uint8\n\t}\n\tcheckInitializedInput = struct {\n\t\tpragma.NoUnkeyedLiterals\n\t\tMessage Message\n\t}\n\tcheckInitializedOutput = struct {\n\t\tpragma.NoUnkeyedLiterals\n\t}\n\tequalInput = struct {\n\t\tpragma.NoUnkeyedLiterals\n\t\tMessageA Message\n\t\tMessageB Message\n\t}\n\tequalOutput = struct {\n\t\tpragma.NoUnkeyedLiterals\n\t\tEqual bool\n\t}\n)\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/reflect/protoreflect/proto.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 protoreflect provides interfaces to dynamically manipulate messages.\n//\n// This package includes type descriptors which describe the structure of types\n// defined in proto source files and value interfaces which provide the\n// ability to examine and manipulate the contents of messages.\n//\n// # Protocol Buffer Descriptors\n//\n// Protobuf descriptors (e.g., [EnumDescriptor] or [MessageDescriptor])\n// are immutable objects that represent protobuf type information.\n// They are wrappers around the messages declared in descriptor.proto.\n// Protobuf descriptors alone lack any information regarding Go types.\n//\n// Enums and messages generated by this module implement [Enum] and [ProtoMessage],\n// where the Descriptor and ProtoReflect.Descriptor accessors respectively\n// return the protobuf descriptor for the values.\n//\n// The protobuf descriptor interfaces are not meant to be implemented by\n// user code since they might need to be extended in the future to support\n// additions to the protobuf language.\n// The [google.golang.org/protobuf/reflect/protodesc] package converts between\n// google.protobuf.DescriptorProto messages and protobuf descriptors.\n//\n// # Go Type Descriptors\n//\n// A type descriptor (e.g., [EnumType] or [MessageType]) is a constructor for\n// a concrete Go type that represents the associated protobuf descriptor.\n// There is commonly a one-to-one relationship between protobuf descriptors and\n// Go type descriptors, but it can potentially be a one-to-many relationship.\n//\n// Enums and messages generated by this module implement [Enum] and [ProtoMessage],\n// where the Type and ProtoReflect.Type accessors respectively\n// return the protobuf descriptor for the values.\n//\n// The [google.golang.org/protobuf/types/dynamicpb] package can be used to\n// create Go type descriptors from protobuf descriptors.\n//\n// # Value Interfaces\n//\n// The [Enum] and [Message] interfaces provide a reflective view over an\n// enum or message instance. For enums, it provides the ability to retrieve\n// the enum value number for any concrete enum type. For messages, it provides\n// the ability to access or manipulate fields of the message.\n//\n// To convert a [google.golang.org/protobuf/proto.Message] to a [protoreflect.Message], use the\n// former's ProtoReflect method. Since the ProtoReflect method is new to the\n// v2 message interface, it may not be present on older message implementations.\n// The [github.com/golang/protobuf/proto.MessageReflect] function can be used\n// to obtain a reflective view on older messages.\n//\n// # Relationships\n//\n// The following diagrams demonstrate the relationships between\n// various types declared in this package.\n//\n//\t                       ┌───────────────────────────────────┐\n//\t                       V                                   │\n//\t   ┌────────────── New(n) ─────────────┐                   │\n//\t   │                                   │                   │\n//\t   │      ┌──── Descriptor() ──┐       │  ┌── Number() ──┐ │\n//\t   │      │                    V       V  │              V │\n//\t╔════════════╗  ╔════════════════╗  ╔════════╗  ╔════════════╗\n//\t║  EnumType  ║  ║ EnumDescriptor ║  ║  Enum  ║  ║ EnumNumber ║\n//\t╚════════════╝  ╚════════════════╝  ╚════════╝  ╚════════════╝\n//\t      Λ           Λ                   │ │\n//\t      │           └─── Descriptor() ──┘ │\n//\t      │                                 │\n//\t      └────────────────── Type() ───────┘\n//\n// • An [EnumType] describes a concrete Go enum type.\n// It has an EnumDescriptor and can construct an Enum instance.\n//\n// • An [EnumDescriptor] describes an abstract protobuf enum type.\n//\n// • An [Enum] is a concrete enum instance. Generated enums implement Enum.\n//\n//\t  ┌──────────────── New() ─────────────────┐\n//\t  │                                        │\n//\t  │         ┌─── Descriptor() ─────┐       │   ┌── Interface() ───┐\n//\t  │         │                      V       V   │                  V\n//\t╔═════════════╗  ╔═══════════════════╗  ╔═════════╗  ╔══════════════╗\n//\t║ MessageType ║  ║ MessageDescriptor ║  ║ Message ║  ║ ProtoMessage ║\n//\t╚═════════════╝  ╚═══════════════════╝  ╚═════════╝  ╚══════════════╝\n//\t       Λ           Λ                      │ │  Λ                  │\n//\t       │           └──── Descriptor() ────┘ │  └─ ProtoReflect() ─┘\n//\t       │                                    │\n//\t       └─────────────────── Type() ─────────┘\n//\n// • A [MessageType] describes a concrete Go message type.\n// It has a [MessageDescriptor] and can construct a [Message] instance.\n// Just as how Go's [reflect.Type] is a reflective description of a Go type,\n// a [MessageType] is a reflective description of a Go type for a protobuf message.\n//\n// • A [MessageDescriptor] describes an abstract protobuf message type.\n// It has no understanding of Go types. In order to construct a [MessageType]\n// from just a [MessageDescriptor], you can consider looking up the message type\n// in the global registry using the FindMessageByName method on\n// [google.golang.org/protobuf/reflect/protoregistry.GlobalTypes]\n// or constructing a dynamic [MessageType] using\n// [google.golang.org/protobuf/types/dynamicpb.NewMessageType].\n//\n// • A [Message] is a reflective view over a concrete message instance.\n// Generated messages implement [ProtoMessage], which can convert to a [Message].\n// Just as how Go's [reflect.Value] is a reflective view over a Go value,\n// a [Message] is a reflective view over a concrete protobuf message instance.\n// Using Go reflection as an analogy, the [ProtoMessage.ProtoReflect] method is similar to\n// calling [reflect.ValueOf], and the [Message.Interface] method is similar to\n// calling [reflect.Value.Interface].\n//\n//\t      ┌── TypeDescriptor() ──┐    ┌───── Descriptor() ─────┐\n//\t      │                      V    │                        V\n//\t╔═══════════════╗  ╔═════════════════════════╗  ╔═════════════════════╗\n//\t║ ExtensionType ║  ║ ExtensionTypeDescriptor ║  ║ ExtensionDescriptor ║\n//\t╚═══════════════╝  ╚═════════════════════════╝  ╚═════════════════════╝\n//\t      Λ                      │   │ Λ                      │ Λ\n//\t      └─────── Type() ───────┘   │ └─── may implement ────┘ │\n//\t                                 │                          │\n//\t                                 └────── implements ────────┘\n//\n// • An [ExtensionType] describes a concrete Go implementation of an extension.\n// It has an [ExtensionTypeDescriptor] and can convert to/from\n// an abstract [Value] and a Go value.\n//\n// • An [ExtensionTypeDescriptor] is an [ExtensionDescriptor]\n// which also has an [ExtensionType].\n//\n// • An [ExtensionDescriptor] describes an abstract protobuf extension field and\n// may not always be an [ExtensionTypeDescriptor].\npackage protoreflect\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n\t\"google.golang.org/protobuf/internal/pragma\"\n)\n\ntype doNotImplement pragma.DoNotImplement\n\n// ProtoMessage is the top-level interface that all proto messages implement.\n// This is declared in the protoreflect package to avoid a cyclic dependency;\n// use the [google.golang.org/protobuf/proto.Message] type instead, which aliases this type.\ntype ProtoMessage interface{ ProtoReflect() Message }\n\n// Syntax is the language version of the proto file.\ntype Syntax syntax\n\ntype syntax int8 // keep exact type opaque as the int type may change\n\nconst (\n\tProto2   Syntax = 2\n\tProto3   Syntax = 3\n\tEditions Syntax = 4\n)\n\n// IsValid reports whether the syntax is valid.\nfunc (s Syntax) IsValid() bool {\n\tswitch s {\n\tcase Proto2, Proto3, Editions:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// String returns s as a proto source identifier (e.g., \"proto2\").\nfunc (s Syntax) String() string {\n\tswitch s {\n\tcase Proto2:\n\t\treturn \"proto2\"\n\tcase Proto3:\n\t\treturn \"proto3\"\n\tcase Editions:\n\t\treturn \"editions\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"<unknown:%d>\", s)\n\t}\n}\n\n// GoString returns s as a Go source identifier (e.g., \"Proto2\").\nfunc (s Syntax) GoString() string {\n\tswitch s {\n\tcase Proto2:\n\t\treturn \"Proto2\"\n\tcase Proto3:\n\t\treturn \"Proto3\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"Syntax(%d)\", s)\n\t}\n}\n\n// Cardinality determines whether a field is optional, required, or repeated.\ntype Cardinality cardinality\n\ntype cardinality int8 // keep exact type opaque as the int type may change\n\n// Constants as defined by the google.protobuf.Cardinality enumeration.\nconst (\n\tOptional Cardinality = 1 // appears zero or one times\n\tRequired Cardinality = 2 // appears exactly one time; invalid with Proto3\n\tRepeated Cardinality = 3 // appears zero or more times\n)\n\n// IsValid reports whether the cardinality is valid.\nfunc (c Cardinality) IsValid() bool {\n\tswitch c {\n\tcase Optional, Required, Repeated:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// String returns c as a proto source identifier (e.g., \"optional\").\nfunc (c Cardinality) String() string {\n\tswitch c {\n\tcase Optional:\n\t\treturn \"optional\"\n\tcase Required:\n\t\treturn \"required\"\n\tcase Repeated:\n\t\treturn \"repeated\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"<unknown:%d>\", c)\n\t}\n}\n\n// GoString returns c as a Go source identifier (e.g., \"Optional\").\nfunc (c Cardinality) GoString() string {\n\tswitch c {\n\tcase Optional:\n\t\treturn \"Optional\"\n\tcase Required:\n\t\treturn \"Required\"\n\tcase Repeated:\n\t\treturn \"Repeated\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"Cardinality(%d)\", c)\n\t}\n}\n\n// Kind indicates the basic proto kind of a field.\ntype Kind kind\n\ntype kind int8 // keep exact type opaque as the int type may change\n\n// Constants as defined by the google.protobuf.Field.Kind enumeration.\nconst (\n\tBoolKind     Kind = 8\n\tEnumKind     Kind = 14\n\tInt32Kind    Kind = 5\n\tSint32Kind   Kind = 17\n\tUint32Kind   Kind = 13\n\tInt64Kind    Kind = 3\n\tSint64Kind   Kind = 18\n\tUint64Kind   Kind = 4\n\tSfixed32Kind Kind = 15\n\tFixed32Kind  Kind = 7\n\tFloatKind    Kind = 2\n\tSfixed64Kind Kind = 16\n\tFixed64Kind  Kind = 6\n\tDoubleKind   Kind = 1\n\tStringKind   Kind = 9\n\tBytesKind    Kind = 12\n\tMessageKind  Kind = 11\n\tGroupKind    Kind = 10\n)\n\n// IsValid reports whether the kind is valid.\nfunc (k Kind) IsValid() bool {\n\tswitch k {\n\tcase BoolKind, EnumKind,\n\t\tInt32Kind, Sint32Kind, Uint32Kind,\n\t\tInt64Kind, Sint64Kind, Uint64Kind,\n\t\tSfixed32Kind, Fixed32Kind, FloatKind,\n\t\tSfixed64Kind, Fixed64Kind, DoubleKind,\n\t\tStringKind, BytesKind, MessageKind, GroupKind:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// String returns k as a proto source identifier (e.g., \"bool\").\nfunc (k Kind) String() string {\n\tswitch k {\n\tcase BoolKind:\n\t\treturn \"bool\"\n\tcase EnumKind:\n\t\treturn \"enum\"\n\tcase Int32Kind:\n\t\treturn \"int32\"\n\tcase Sint32Kind:\n\t\treturn \"sint32\"\n\tcase Uint32Kind:\n\t\treturn \"uint32\"\n\tcase Int64Kind:\n\t\treturn \"int64\"\n\tcase Sint64Kind:\n\t\treturn \"sint64\"\n\tcase Uint64Kind:\n\t\treturn \"uint64\"\n\tcase Sfixed32Kind:\n\t\treturn \"sfixed32\"\n\tcase Fixed32Kind:\n\t\treturn \"fixed32\"\n\tcase FloatKind:\n\t\treturn \"float\"\n\tcase Sfixed64Kind:\n\t\treturn \"sfixed64\"\n\tcase Fixed64Kind:\n\t\treturn \"fixed64\"\n\tcase DoubleKind:\n\t\treturn \"double\"\n\tcase StringKind:\n\t\treturn \"string\"\n\tcase BytesKind:\n\t\treturn \"bytes\"\n\tcase MessageKind:\n\t\treturn \"message\"\n\tcase GroupKind:\n\t\treturn \"group\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"<unknown:%d>\", k)\n\t}\n}\n\n// GoString returns k as a Go source identifier (e.g., \"BoolKind\").\nfunc (k Kind) GoString() string {\n\tswitch k {\n\tcase BoolKind:\n\t\treturn \"BoolKind\"\n\tcase EnumKind:\n\t\treturn \"EnumKind\"\n\tcase Int32Kind:\n\t\treturn \"Int32Kind\"\n\tcase Sint32Kind:\n\t\treturn \"Sint32Kind\"\n\tcase Uint32Kind:\n\t\treturn \"Uint32Kind\"\n\tcase Int64Kind:\n\t\treturn \"Int64Kind\"\n\tcase Sint64Kind:\n\t\treturn \"Sint64Kind\"\n\tcase Uint64Kind:\n\t\treturn \"Uint64Kind\"\n\tcase Sfixed32Kind:\n\t\treturn \"Sfixed32Kind\"\n\tcase Fixed32Kind:\n\t\treturn \"Fixed32Kind\"\n\tcase FloatKind:\n\t\treturn \"FloatKind\"\n\tcase Sfixed64Kind:\n\t\treturn \"Sfixed64Kind\"\n\tcase Fixed64Kind:\n\t\treturn \"Fixed64Kind\"\n\tcase DoubleKind:\n\t\treturn \"DoubleKind\"\n\tcase StringKind:\n\t\treturn \"StringKind\"\n\tcase BytesKind:\n\t\treturn \"BytesKind\"\n\tcase MessageKind:\n\t\treturn \"MessageKind\"\n\tcase GroupKind:\n\t\treturn \"GroupKind\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"Kind(%d)\", k)\n\t}\n}\n\n// FieldNumber is the field number in a message.\ntype FieldNumber = protowire.Number\n\n// FieldNumbers represent a list of field numbers.\ntype FieldNumbers interface {\n\t// Len reports the number of fields in the list.\n\tLen() int\n\t// Get returns the ith field number. It panics if out of bounds.\n\tGet(i int) FieldNumber\n\t// Has reports whether n is within the list of fields.\n\tHas(n FieldNumber) bool\n\n\tdoNotImplement\n}\n\n// FieldRanges represent a list of field number ranges.\ntype FieldRanges interface {\n\t// Len reports the number of ranges in the list.\n\tLen() int\n\t// Get returns the ith range. It panics if out of bounds.\n\tGet(i int) [2]FieldNumber // start inclusive; end exclusive\n\t// Has reports whether n is within any of the ranges.\n\tHas(n FieldNumber) bool\n\n\tdoNotImplement\n}\n\n// EnumNumber is the numeric value for an enum.\ntype EnumNumber int32\n\n// EnumRanges represent a list of enum number ranges.\ntype EnumRanges interface {\n\t// Len reports the number of ranges in the list.\n\tLen() int\n\t// Get returns the ith range. It panics if out of bounds.\n\tGet(i int) [2]EnumNumber // start inclusive; end inclusive\n\t// Has reports whether n is within any of the ranges.\n\tHas(n EnumNumber) bool\n\n\tdoNotImplement\n}\n\n// Name is the short name for a proto declaration. This is not the name\n// as used in Go source code, which might not be identical to the proto name.\ntype Name string // e.g., \"Kind\"\n\n// IsValid reports whether s is a syntactically valid name.\n// An empty name is invalid.\nfunc (s Name) IsValid() bool {\n\treturn consumeIdent(string(s)) == len(s)\n}\n\n// Names represent a list of names.\ntype Names interface {\n\t// Len reports the number of names in the list.\n\tLen() int\n\t// Get returns the ith name. It panics if out of bounds.\n\tGet(i int) Name\n\t// Has reports whether s matches any names in the list.\n\tHas(s Name) bool\n\n\tdoNotImplement\n}\n\n// FullName is a qualified name that uniquely identifies a proto declaration.\n// A qualified name is the concatenation of the proto package along with the\n// fully-declared name (i.e., name of parent preceding the name of the child),\n// with a '.' delimiter placed between each [Name].\n//\n// This should not have any leading or trailing dots.\ntype FullName string // e.g., \"google.protobuf.Field.Kind\"\n\n// IsValid reports whether s is a syntactically valid full name.\n// An empty full name is invalid.\nfunc (s FullName) IsValid() bool {\n\ti := consumeIdent(string(s))\n\tif i < 0 {\n\t\treturn false\n\t}\n\tfor len(s) > i {\n\t\tif s[i] != '.' {\n\t\t\treturn false\n\t\t}\n\t\ti++\n\t\tn := consumeIdent(string(s[i:]))\n\t\tif n < 0 {\n\t\t\treturn false\n\t\t}\n\t\ti += n\n\t}\n\treturn true\n}\n\nfunc consumeIdent(s string) (i int) {\n\tif len(s) == 0 || !isLetter(s[i]) {\n\t\treturn -1\n\t}\n\ti++\n\tfor len(s) > i && isLetterDigit(s[i]) {\n\t\ti++\n\t}\n\treturn i\n}\nfunc isLetter(c byte) bool {\n\treturn c == '_' || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')\n}\nfunc isLetterDigit(c byte) bool {\n\treturn isLetter(c) || ('0' <= c && c <= '9')\n}\n\n// Name returns the short name, which is the last identifier segment.\n// A single segment FullName is the [Name] itself.\nfunc (n FullName) Name() Name {\n\tif i := strings.LastIndexByte(string(n), '.'); i >= 0 {\n\t\treturn Name(n[i+1:])\n\t}\n\treturn Name(n)\n}\n\n// Parent returns the full name with the trailing identifier removed.\n// A single segment FullName has no parent.\nfunc (n FullName) Parent() FullName {\n\tif i := strings.LastIndexByte(string(n), '.'); i >= 0 {\n\t\treturn n[:i]\n\t}\n\treturn \"\"\n}\n\n// Append returns the qualified name appended with the provided short name.\n//\n// Invariant: n == n.Parent().Append(n.Name()) // assuming n is valid\nfunc (n FullName) Append(s Name) FullName {\n\tif n == \"\" {\n\t\treturn FullName(s)\n\t}\n\treturn n + \".\" + FullName(s)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/reflect/protoreflect/source.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 protoreflect\n\nimport (\n\t\"strconv\"\n)\n\n// SourceLocations is a list of source locations.\ntype SourceLocations interface {\n\t// Len reports the number of source locations in the proto file.\n\tLen() int\n\t// Get returns the ith SourceLocation. It panics if out of bounds.\n\tGet(int) SourceLocation\n\n\t// ByPath returns the SourceLocation for the given path,\n\t// returning the first location if multiple exist for the same path.\n\t// If multiple locations exist for the same path,\n\t// then SourceLocation.Next index can be used to identify the\n\t// index of the next SourceLocation.\n\t// If no location exists for this path, it returns the zero value.\n\tByPath(path SourcePath) SourceLocation\n\n\t// ByDescriptor returns the SourceLocation for the given descriptor,\n\t// returning the first location if multiple exist for the same path.\n\t// If no location exists for this descriptor, it returns the zero value.\n\tByDescriptor(desc Descriptor) SourceLocation\n\n\tdoNotImplement\n}\n\n// SourceLocation describes a source location and\n// corresponds with the google.protobuf.SourceCodeInfo.Location message.\ntype SourceLocation struct {\n\t// Path is the path to the declaration from the root file descriptor.\n\t// The contents of this slice must not be mutated.\n\tPath SourcePath\n\n\t// StartLine and StartColumn are the zero-indexed starting location\n\t// in the source file for the declaration.\n\tStartLine, StartColumn int\n\t// EndLine and EndColumn are the zero-indexed ending location\n\t// in the source file for the declaration.\n\t// In the descriptor.proto, the end line may be omitted if it is identical\n\t// to the start line. Here, it is always populated.\n\tEndLine, EndColumn int\n\n\t// LeadingDetachedComments are the leading detached comments\n\t// for the declaration. The contents of this slice must not be mutated.\n\tLeadingDetachedComments []string\n\t// LeadingComments is the leading attached comment for the declaration.\n\tLeadingComments string\n\t// TrailingComments is the trailing attached comment for the declaration.\n\tTrailingComments string\n\n\t// Next is an index into SourceLocations for the next source location that\n\t// has the same Path. It is zero if there is no next location.\n\tNext int\n}\n\n// SourcePath identifies part of a file descriptor for a source location.\n// The SourcePath is a sequence of either field numbers or indexes into\n// a repeated field that form a path starting from the root file descriptor.\n//\n// See google.protobuf.SourceCodeInfo.Location.path.\ntype SourcePath []int32\n\n// Equal reports whether p1 equals p2.\nfunc (p1 SourcePath) Equal(p2 SourcePath) bool {\n\tif len(p1) != len(p2) {\n\t\treturn false\n\t}\n\tfor i := range p1 {\n\t\tif p1[i] != p2[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// String formats the path in a humanly readable manner.\n// The output is guaranteed to be deterministic,\n// making it suitable for use as a key into a Go map.\n// It is not guaranteed to be stable as the exact output could change\n// in a future version of this module.\n//\n// Example output:\n//\n//\t.message_type[6].nested_type[15].field[3]\nfunc (p SourcePath) String() string {\n\tb := p.appendFileDescriptorProto(nil)\n\tfor _, i := range p {\n\t\tb = append(b, '.')\n\t\tb = strconv.AppendInt(b, int64(i), 10)\n\t}\n\treturn string(b)\n}\n\ntype appendFunc func(*SourcePath, []byte) []byte\n\nfunc (p *SourcePath) appendSingularField(b []byte, name string, f appendFunc) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tb = append(b, '.')\n\tb = append(b, name...)\n\t*p = (*p)[1:]\n\tif f != nil {\n\t\tb = f(p, b)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendRepeatedField(b []byte, name string, f appendFunc) []byte {\n\tb = p.appendSingularField(b, name, nil)\n\tif len(*p) == 0 || (*p)[0] < 0 {\n\t\treturn b\n\t}\n\tb = append(b, '[')\n\tb = strconv.AppendUint(b, uint64((*p)[0]), 10)\n\tb = append(b, ']')\n\t*p = (*p)[1:]\n\tif f != nil {\n\t\tb = f(p, b)\n\t}\n\treturn b\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.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// Code generated by generate-protos. DO NOT EDIT.\n\npackage protoreflect\n\nfunc (p *SourcePath) appendFileDescriptorProto(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"name\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"package\", nil)\n\tcase 3:\n\t\tb = p.appendRepeatedField(b, \"dependency\", nil)\n\tcase 10:\n\t\tb = p.appendRepeatedField(b, \"public_dependency\", nil)\n\tcase 11:\n\t\tb = p.appendRepeatedField(b, \"weak_dependency\", nil)\n\tcase 15:\n\t\tb = p.appendRepeatedField(b, \"option_dependency\", nil)\n\tcase 4:\n\t\tb = p.appendRepeatedField(b, \"message_type\", (*SourcePath).appendDescriptorProto)\n\tcase 5:\n\t\tb = p.appendRepeatedField(b, \"enum_type\", (*SourcePath).appendEnumDescriptorProto)\n\tcase 6:\n\t\tb = p.appendRepeatedField(b, \"service\", (*SourcePath).appendServiceDescriptorProto)\n\tcase 7:\n\t\tb = p.appendRepeatedField(b, \"extension\", (*SourcePath).appendFieldDescriptorProto)\n\tcase 8:\n\t\tb = p.appendSingularField(b, \"options\", (*SourcePath).appendFileOptions)\n\tcase 9:\n\t\tb = p.appendSingularField(b, \"source_code_info\", (*SourcePath).appendSourceCodeInfo)\n\tcase 12:\n\t\tb = p.appendSingularField(b, \"syntax\", nil)\n\tcase 14:\n\t\tb = p.appendSingularField(b, \"edition\", nil)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendDescriptorProto(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"name\", nil)\n\tcase 2:\n\t\tb = p.appendRepeatedField(b, \"field\", (*SourcePath).appendFieldDescriptorProto)\n\tcase 6:\n\t\tb = p.appendRepeatedField(b, \"extension\", (*SourcePath).appendFieldDescriptorProto)\n\tcase 3:\n\t\tb = p.appendRepeatedField(b, \"nested_type\", (*SourcePath).appendDescriptorProto)\n\tcase 4:\n\t\tb = p.appendRepeatedField(b, \"enum_type\", (*SourcePath).appendEnumDescriptorProto)\n\tcase 5:\n\t\tb = p.appendRepeatedField(b, \"extension_range\", (*SourcePath).appendDescriptorProto_ExtensionRange)\n\tcase 8:\n\t\tb = p.appendRepeatedField(b, \"oneof_decl\", (*SourcePath).appendOneofDescriptorProto)\n\tcase 7:\n\t\tb = p.appendSingularField(b, \"options\", (*SourcePath).appendMessageOptions)\n\tcase 9:\n\t\tb = p.appendRepeatedField(b, \"reserved_range\", (*SourcePath).appendDescriptorProto_ReservedRange)\n\tcase 10:\n\t\tb = p.appendRepeatedField(b, \"reserved_name\", nil)\n\tcase 11:\n\t\tb = p.appendSingularField(b, \"visibility\", nil)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendEnumDescriptorProto(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"name\", nil)\n\tcase 2:\n\t\tb = p.appendRepeatedField(b, \"value\", (*SourcePath).appendEnumValueDescriptorProto)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"options\", (*SourcePath).appendEnumOptions)\n\tcase 4:\n\t\tb = p.appendRepeatedField(b, \"reserved_range\", (*SourcePath).appendEnumDescriptorProto_EnumReservedRange)\n\tcase 5:\n\t\tb = p.appendRepeatedField(b, \"reserved_name\", nil)\n\tcase 6:\n\t\tb = p.appendSingularField(b, \"visibility\", nil)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendServiceDescriptorProto(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"name\", nil)\n\tcase 2:\n\t\tb = p.appendRepeatedField(b, \"method\", (*SourcePath).appendMethodDescriptorProto)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"options\", (*SourcePath).appendServiceOptions)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendFieldDescriptorProto(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"name\", nil)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"number\", nil)\n\tcase 4:\n\t\tb = p.appendSingularField(b, \"label\", nil)\n\tcase 5:\n\t\tb = p.appendSingularField(b, \"type\", nil)\n\tcase 6:\n\t\tb = p.appendSingularField(b, \"type_name\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"extendee\", nil)\n\tcase 7:\n\t\tb = p.appendSingularField(b, \"default_value\", nil)\n\tcase 9:\n\t\tb = p.appendSingularField(b, \"oneof_index\", nil)\n\tcase 10:\n\t\tb = p.appendSingularField(b, \"json_name\", nil)\n\tcase 8:\n\t\tb = p.appendSingularField(b, \"options\", (*SourcePath).appendFieldOptions)\n\tcase 17:\n\t\tb = p.appendSingularField(b, \"proto3_optional\", nil)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendFileOptions(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"java_package\", nil)\n\tcase 8:\n\t\tb = p.appendSingularField(b, \"java_outer_classname\", nil)\n\tcase 10:\n\t\tb = p.appendSingularField(b, \"java_multiple_files\", nil)\n\tcase 20:\n\t\tb = p.appendSingularField(b, \"java_generate_equals_and_hash\", nil)\n\tcase 27:\n\t\tb = p.appendSingularField(b, \"java_string_check_utf8\", nil)\n\tcase 9:\n\t\tb = p.appendSingularField(b, \"optimize_for\", nil)\n\tcase 11:\n\t\tb = p.appendSingularField(b, \"go_package\", nil)\n\tcase 16:\n\t\tb = p.appendSingularField(b, \"cc_generic_services\", nil)\n\tcase 17:\n\t\tb = p.appendSingularField(b, \"java_generic_services\", nil)\n\tcase 18:\n\t\tb = p.appendSingularField(b, \"py_generic_services\", nil)\n\tcase 23:\n\t\tb = p.appendSingularField(b, \"deprecated\", nil)\n\tcase 31:\n\t\tb = p.appendSingularField(b, \"cc_enable_arenas\", nil)\n\tcase 36:\n\t\tb = p.appendSingularField(b, \"objc_class_prefix\", nil)\n\tcase 37:\n\t\tb = p.appendSingularField(b, \"csharp_namespace\", nil)\n\tcase 39:\n\t\tb = p.appendSingularField(b, \"swift_prefix\", nil)\n\tcase 40:\n\t\tb = p.appendSingularField(b, \"php_class_prefix\", nil)\n\tcase 41:\n\t\tb = p.appendSingularField(b, \"php_namespace\", nil)\n\tcase 44:\n\t\tb = p.appendSingularField(b, \"php_metadata_namespace\", nil)\n\tcase 45:\n\t\tb = p.appendSingularField(b, \"ruby_package\", nil)\n\tcase 50:\n\t\tb = p.appendSingularField(b, \"features\", (*SourcePath).appendFeatureSet)\n\tcase 999:\n\t\tb = p.appendRepeatedField(b, \"uninterpreted_option\", (*SourcePath).appendUninterpretedOption)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendSourceCodeInfo(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendRepeatedField(b, \"location\", (*SourcePath).appendSourceCodeInfo_Location)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendDescriptorProto_ExtensionRange(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"start\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"end\", nil)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"options\", (*SourcePath).appendExtensionRangeOptions)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendOneofDescriptorProto(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"name\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"options\", (*SourcePath).appendOneofOptions)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendMessageOptions(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"message_set_wire_format\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"no_standard_descriptor_accessor\", nil)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"deprecated\", nil)\n\tcase 7:\n\t\tb = p.appendSingularField(b, \"map_entry\", nil)\n\tcase 11:\n\t\tb = p.appendSingularField(b, \"deprecated_legacy_json_field_conflicts\", nil)\n\tcase 12:\n\t\tb = p.appendSingularField(b, \"features\", (*SourcePath).appendFeatureSet)\n\tcase 999:\n\t\tb = p.appendRepeatedField(b, \"uninterpreted_option\", (*SourcePath).appendUninterpretedOption)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendDescriptorProto_ReservedRange(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"start\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"end\", nil)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendEnumValueDescriptorProto(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"name\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"number\", nil)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"options\", (*SourcePath).appendEnumValueOptions)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendEnumOptions(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"allow_alias\", nil)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"deprecated\", nil)\n\tcase 6:\n\t\tb = p.appendSingularField(b, \"deprecated_legacy_json_field_conflicts\", nil)\n\tcase 7:\n\t\tb = p.appendSingularField(b, \"features\", (*SourcePath).appendFeatureSet)\n\tcase 999:\n\t\tb = p.appendRepeatedField(b, \"uninterpreted_option\", (*SourcePath).appendUninterpretedOption)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendEnumDescriptorProto_EnumReservedRange(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"start\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"end\", nil)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendMethodDescriptorProto(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"name\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"input_type\", nil)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"output_type\", nil)\n\tcase 4:\n\t\tb = p.appendSingularField(b, \"options\", (*SourcePath).appendMethodOptions)\n\tcase 5:\n\t\tb = p.appendSingularField(b, \"client_streaming\", nil)\n\tcase 6:\n\t\tb = p.appendSingularField(b, \"server_streaming\", nil)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendServiceOptions(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 34:\n\t\tb = p.appendSingularField(b, \"features\", (*SourcePath).appendFeatureSet)\n\tcase 33:\n\t\tb = p.appendSingularField(b, \"deprecated\", nil)\n\tcase 999:\n\t\tb = p.appendRepeatedField(b, \"uninterpreted_option\", (*SourcePath).appendUninterpretedOption)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendFieldOptions(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"ctype\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"packed\", nil)\n\tcase 6:\n\t\tb = p.appendSingularField(b, \"jstype\", nil)\n\tcase 5:\n\t\tb = p.appendSingularField(b, \"lazy\", nil)\n\tcase 15:\n\t\tb = p.appendSingularField(b, \"unverified_lazy\", nil)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"deprecated\", nil)\n\tcase 10:\n\t\tb = p.appendSingularField(b, \"weak\", nil)\n\tcase 16:\n\t\tb = p.appendSingularField(b, \"debug_redact\", nil)\n\tcase 17:\n\t\tb = p.appendSingularField(b, \"retention\", nil)\n\tcase 19:\n\t\tb = p.appendRepeatedField(b, \"targets\", nil)\n\tcase 20:\n\t\tb = p.appendRepeatedField(b, \"edition_defaults\", (*SourcePath).appendFieldOptions_EditionDefault)\n\tcase 21:\n\t\tb = p.appendSingularField(b, \"features\", (*SourcePath).appendFeatureSet)\n\tcase 22:\n\t\tb = p.appendSingularField(b, \"feature_support\", (*SourcePath).appendFieldOptions_FeatureSupport)\n\tcase 999:\n\t\tb = p.appendRepeatedField(b, \"uninterpreted_option\", (*SourcePath).appendUninterpretedOption)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendFeatureSet(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"field_presence\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"enum_type\", nil)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"repeated_field_encoding\", nil)\n\tcase 4:\n\t\tb = p.appendSingularField(b, \"utf8_validation\", nil)\n\tcase 5:\n\t\tb = p.appendSingularField(b, \"message_encoding\", nil)\n\tcase 6:\n\t\tb = p.appendSingularField(b, \"json_format\", nil)\n\tcase 7:\n\t\tb = p.appendSingularField(b, \"enforce_naming_style\", nil)\n\tcase 8:\n\t\tb = p.appendSingularField(b, \"default_symbol_visibility\", nil)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendUninterpretedOption(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 2:\n\t\tb = p.appendRepeatedField(b, \"name\", (*SourcePath).appendUninterpretedOption_NamePart)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"identifier_value\", nil)\n\tcase 4:\n\t\tb = p.appendSingularField(b, \"positive_int_value\", nil)\n\tcase 5:\n\t\tb = p.appendSingularField(b, \"negative_int_value\", nil)\n\tcase 6:\n\t\tb = p.appendSingularField(b, \"double_value\", nil)\n\tcase 7:\n\t\tb = p.appendSingularField(b, \"string_value\", nil)\n\tcase 8:\n\t\tb = p.appendSingularField(b, \"aggregate_value\", nil)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendSourceCodeInfo_Location(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendRepeatedField(b, \"path\", nil)\n\tcase 2:\n\t\tb = p.appendRepeatedField(b, \"span\", nil)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"leading_comments\", nil)\n\tcase 4:\n\t\tb = p.appendSingularField(b, \"trailing_comments\", nil)\n\tcase 6:\n\t\tb = p.appendRepeatedField(b, \"leading_detached_comments\", nil)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendExtensionRangeOptions(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 999:\n\t\tb = p.appendRepeatedField(b, \"uninterpreted_option\", (*SourcePath).appendUninterpretedOption)\n\tcase 2:\n\t\tb = p.appendRepeatedField(b, \"declaration\", (*SourcePath).appendExtensionRangeOptions_Declaration)\n\tcase 50:\n\t\tb = p.appendSingularField(b, \"features\", (*SourcePath).appendFeatureSet)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"verification\", nil)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendOneofOptions(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"features\", (*SourcePath).appendFeatureSet)\n\tcase 999:\n\t\tb = p.appendRepeatedField(b, \"uninterpreted_option\", (*SourcePath).appendUninterpretedOption)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendEnumValueOptions(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"deprecated\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"features\", (*SourcePath).appendFeatureSet)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"debug_redact\", nil)\n\tcase 4:\n\t\tb = p.appendSingularField(b, \"feature_support\", (*SourcePath).appendFieldOptions_FeatureSupport)\n\tcase 999:\n\t\tb = p.appendRepeatedField(b, \"uninterpreted_option\", (*SourcePath).appendUninterpretedOption)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendMethodOptions(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 33:\n\t\tb = p.appendSingularField(b, \"deprecated\", nil)\n\tcase 34:\n\t\tb = p.appendSingularField(b, \"idempotency_level\", nil)\n\tcase 35:\n\t\tb = p.appendSingularField(b, \"features\", (*SourcePath).appendFeatureSet)\n\tcase 999:\n\t\tb = p.appendRepeatedField(b, \"uninterpreted_option\", (*SourcePath).appendUninterpretedOption)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendFieldOptions_EditionDefault(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"edition\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"value\", nil)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendFieldOptions_FeatureSupport(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"edition_introduced\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"edition_deprecated\", nil)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"deprecation_warning\", nil)\n\tcase 4:\n\t\tb = p.appendSingularField(b, \"edition_removed\", nil)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendUninterpretedOption_NamePart(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"name_part\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"is_extension\", nil)\n\t}\n\treturn b\n}\n\nfunc (p *SourcePath) appendExtensionRangeOptions_Declaration(b []byte) []byte {\n\tif len(*p) == 0 {\n\t\treturn b\n\t}\n\tswitch (*p)[0] {\n\tcase 1:\n\t\tb = p.appendSingularField(b, \"number\", nil)\n\tcase 2:\n\t\tb = p.appendSingularField(b, \"full_name\", nil)\n\tcase 3:\n\t\tb = p.appendSingularField(b, \"type\", nil)\n\tcase 5:\n\t\tb = p.appendSingularField(b, \"reserved\", nil)\n\tcase 6:\n\t\tb = p.appendSingularField(b, \"repeated\", nil)\n\t}\n\treturn b\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/reflect/protoreflect/type.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 protoreflect\n\n// Descriptor provides a set of accessors that are common to every descriptor.\n// Each descriptor type wraps the equivalent google.protobuf.XXXDescriptorProto,\n// but provides efficient lookup and immutability.\n//\n// Each descriptor is comparable. Equality implies that the two types are\n// exactly identical. However, it is possible for the same semantically\n// identical proto type to be represented by multiple type descriptors.\n//\n// For example, suppose we have t1 and t2 which are both an [MessageDescriptor].\n// If t1 == t2, then the types are definitely equal and all accessors return\n// the same information. However, if t1 != t2, then it is still possible that\n// they still represent the same proto type (e.g., t1.FullName == t2.FullName).\n// This can occur if a descriptor type is created dynamically, or multiple\n// versions of the same proto type are accidentally linked into the Go binary.\ntype Descriptor interface {\n\t// ParentFile returns the parent file descriptor that this descriptor\n\t// is declared within. The parent file for the file descriptor is itself.\n\t//\n\t// Support for this functionality is optional and may return nil.\n\tParentFile() FileDescriptor\n\n\t// Parent returns the parent containing this descriptor declaration.\n\t// The following shows the mapping from child type to possible parent types:\n\t//\n\t//\t╔═════════════════════╤═══════════════════════════════════╗\n\t//\t║ Child type          │ Possible parent types             ║\n\t//\t╠═════════════════════╪═══════════════════════════════════╣\n\t//\t║ FileDescriptor      │ nil                               ║\n\t//\t║ MessageDescriptor   │ FileDescriptor, MessageDescriptor ║\n\t//\t║ FieldDescriptor     │ FileDescriptor, MessageDescriptor ║\n\t//\t║ OneofDescriptor     │ MessageDescriptor                 ║\n\t//\t║ EnumDescriptor      │ FileDescriptor, MessageDescriptor ║\n\t//\t║ EnumValueDescriptor │ EnumDescriptor                    ║\n\t//\t║ ServiceDescriptor   │ FileDescriptor                    ║\n\t//\t║ MethodDescriptor    │ ServiceDescriptor                 ║\n\t//\t╚═════════════════════╧═══════════════════════════════════╝\n\t//\n\t// Support for this functionality is optional and may return nil.\n\tParent() Descriptor\n\n\t// Index returns the index of this descriptor within its parent.\n\t// It returns 0 if the descriptor does not have a parent or if the parent\n\t// is unknown.\n\tIndex() int\n\n\t// Syntax is the protobuf syntax.\n\tSyntax() Syntax // e.g., Proto2 or Proto3\n\n\t// Name is the short name of the declaration (i.e., FullName.Name).\n\tName() Name // e.g., \"Any\"\n\n\t// FullName is the fully-qualified name of the declaration.\n\t//\n\t// The FullName is a concatenation of the full name of the type that this\n\t// type is declared within and the declaration name. For example,\n\t// field \"foo_field\" in message \"proto.package.MyMessage\" is\n\t// uniquely identified as \"proto.package.MyMessage.foo_field\".\n\t// Enum values are an exception to the rule (see EnumValueDescriptor).\n\tFullName() FullName // e.g., \"google.protobuf.Any\"\n\n\t// IsPlaceholder reports whether type information is missing since a\n\t// dependency is not resolved, in which case only name information is known.\n\t//\n\t// Placeholder types may only be returned by the following accessors\n\t// as a result of unresolved dependencies:\n\t//\n\t//\t╔═══════════════════════════════════╤═════════════════════╗\n\t//\t║ Accessor                          │ Descriptor          ║\n\t//\t╠═══════════════════════════════════╪═════════════════════╣\n\t//\t║ FileImports.FileDescriptor        │ FileDescriptor      ║\n\t//\t║ FieldDescriptor.Enum              │ EnumDescriptor      ║\n\t//\t║ FieldDescriptor.Message           │ MessageDescriptor   ║\n\t//\t║ FieldDescriptor.DefaultEnumValue  │ EnumValueDescriptor ║\n\t//\t║ FieldDescriptor.ContainingMessage │ MessageDescriptor   ║\n\t//\t║ MethodDescriptor.Input            │ MessageDescriptor   ║\n\t//\t║ MethodDescriptor.Output           │ MessageDescriptor   ║\n\t//\t╚═══════════════════════════════════╧═════════════════════╝\n\t//\n\t// If true, only Name and FullName are valid.\n\t// For FileDescriptor, the Path is also valid.\n\tIsPlaceholder() bool\n\n\t// Options returns the descriptor options. The caller must not modify\n\t// the returned value.\n\t//\n\t// To avoid a dependency cycle, this function returns a proto.Message value.\n\t// The proto message type returned for each descriptor type is as follows:\n\t//\t╔═════════════════════╤══════════════════════════════════════════╗\n\t//\t║ Go type             │ Protobuf message type                    ║\n\t//\t╠═════════════════════╪══════════════════════════════════════════╣\n\t//\t║ FileDescriptor      │ google.protobuf.FileOptions              ║\n\t//\t║ EnumDescriptor      │ google.protobuf.EnumOptions              ║\n\t//\t║ EnumValueDescriptor │ google.protobuf.EnumValueOptions         ║\n\t//\t║ MessageDescriptor   │ google.protobuf.MessageOptions           ║\n\t//\t║ FieldDescriptor     │ google.protobuf.FieldOptions             ║\n\t//\t║ OneofDescriptor     │ google.protobuf.OneofOptions             ║\n\t//\t║ ServiceDescriptor   │ google.protobuf.ServiceOptions           ║\n\t//\t║ MethodDescriptor    │ google.protobuf.MethodOptions            ║\n\t//\t╚═════════════════════╧══════════════════════════════════════════╝\n\t//\n\t// This method returns a typed nil-pointer if no options are present.\n\t// The caller must import the descriptorpb package to use this.\n\tOptions() ProtoMessage\n\n\tdoNotImplement\n}\n\n// FileDescriptor describes the types in a complete proto file and\n// corresponds with the google.protobuf.FileDescriptorProto message.\n//\n// Top-level declarations:\n// [EnumDescriptor], [MessageDescriptor], [FieldDescriptor], and/or [ServiceDescriptor].\ntype FileDescriptor interface {\n\tDescriptor // Descriptor.FullName is identical to Package\n\n\t// Path returns the file name, relative to the source tree root.\n\tPath() string // e.g., \"path/to/file.proto\"\n\t// Package returns the protobuf package namespace.\n\tPackage() FullName // e.g., \"google.protobuf\"\n\n\t// Imports is a list of imported proto files.\n\tImports() FileImports\n\n\t// Enums is a list of the top-level enum declarations.\n\tEnums() EnumDescriptors\n\t// Messages is a list of the top-level message declarations.\n\tMessages() MessageDescriptors\n\t// Extensions is a list of the top-level extension declarations.\n\tExtensions() ExtensionDescriptors\n\t// Services is a list of the top-level service declarations.\n\tServices() ServiceDescriptors\n\n\t// SourceLocations is a list of source locations.\n\tSourceLocations() SourceLocations\n\n\tisFileDescriptor\n}\ntype isFileDescriptor interface{ ProtoType(FileDescriptor) }\n\n// FileImports is a list of file imports.\ntype FileImports interface {\n\t// Len reports the number of files imported by this proto file.\n\tLen() int\n\t// Get returns the ith FileImport. It panics if out of bounds.\n\tGet(i int) FileImport\n\n\tdoNotImplement\n}\n\n// FileImport is the declaration for a proto file import.\ntype FileImport struct {\n\t// FileDescriptor is the file type for the given import.\n\t// It is a placeholder descriptor if IsWeak is set or if a dependency has\n\t// not been regenerated to implement the new reflection APIs.\n\tFileDescriptor\n\n\t// IsPublic reports whether this is a public import, which causes this file\n\t// to alias declarations within the imported file. The intended use cases\n\t// for this feature is the ability to move proto files without breaking\n\t// existing dependencies.\n\t//\n\t// The current file and the imported file must be within proto package.\n\tIsPublic bool\n\n\t// Deprecated: support for weak fields has been removed.\n\tIsWeak bool\n}\n\n// MessageDescriptor describes a message and\n// corresponds with the google.protobuf.DescriptorProto message.\n//\n// Nested declarations:\n// [FieldDescriptor], [OneofDescriptor], [FieldDescriptor], [EnumDescriptor],\n// and/or [MessageDescriptor].\ntype MessageDescriptor interface {\n\tDescriptor\n\n\t// IsMapEntry indicates that this is an auto-generated message type to\n\t// represent the entry type for a map field.\n\t//\n\t// Map entry messages have only two fields:\n\t//\t• a \"key\" field with a field number of 1\n\t//\t• a \"value\" field with a field number of 2\n\t// The key and value types are determined by these two fields.\n\t//\n\t// If IsMapEntry is true, it implies that FieldDescriptor.IsMap is true\n\t// for some field with this message type.\n\tIsMapEntry() bool\n\n\t// Fields is a list of nested field declarations.\n\tFields() FieldDescriptors\n\t// Oneofs is a list of nested oneof declarations.\n\tOneofs() OneofDescriptors\n\n\t// ReservedNames is a list of reserved field names.\n\tReservedNames() Names\n\t// ReservedRanges is a list of reserved ranges of field numbers.\n\tReservedRanges() FieldRanges\n\t// RequiredNumbers is a list of required field numbers.\n\t// In Proto3, it is always an empty list.\n\tRequiredNumbers() FieldNumbers\n\t// ExtensionRanges is the field ranges used for extension fields.\n\t// In Proto3, it is always an empty ranges.\n\tExtensionRanges() FieldRanges\n\t// ExtensionRangeOptions returns the ith extension range options.\n\t//\n\t// To avoid a dependency cycle, this method returns a proto.Message] value,\n\t// which always contains a google.protobuf.ExtensionRangeOptions message.\n\t// This method returns a typed nil-pointer if no options are present.\n\t// The caller must import the descriptorpb package to use this.\n\tExtensionRangeOptions(i int) ProtoMessage\n\n\t// Enums is a list of nested enum declarations.\n\tEnums() EnumDescriptors\n\t// Messages is a list of nested message declarations.\n\tMessages() MessageDescriptors\n\t// Extensions is a list of nested extension declarations.\n\tExtensions() ExtensionDescriptors\n\n\tisMessageDescriptor\n}\ntype isMessageDescriptor interface{ ProtoType(MessageDescriptor) }\n\n// MessageType encapsulates a [MessageDescriptor] with a concrete Go implementation.\n// It is recommended that implementations of this interface also implement the\n// [MessageFieldTypes] interface.\ntype MessageType interface {\n\t// New returns a newly allocated empty message.\n\t// It may return nil for synthetic messages representing a map entry.\n\tNew() Message\n\n\t// Zero returns an empty, read-only message.\n\t// It may return nil for synthetic messages representing a map entry.\n\tZero() Message\n\n\t// Descriptor returns the message descriptor.\n\t//\n\t// Invariant: t.Descriptor() == t.New().Descriptor()\n\tDescriptor() MessageDescriptor\n}\n\n// MessageFieldTypes extends a [MessageType] by providing type information\n// regarding enums and messages referenced by the message fields.\ntype MessageFieldTypes interface {\n\tMessageType\n\n\t// Enum returns the EnumType for the ith field in MessageDescriptor.Fields.\n\t// It returns nil if the ith field is not an enum kind.\n\t// It panics if out of bounds.\n\t//\n\t// Invariant: mt.Enum(i).Descriptor() == mt.Descriptor().Fields(i).Enum()\n\tEnum(i int) EnumType\n\n\t// Message returns the MessageType for the ith field in MessageDescriptor.Fields.\n\t// It returns nil if the ith field is not a message or group kind.\n\t// It panics if out of bounds.\n\t//\n\t// Invariant: mt.Message(i).Descriptor() == mt.Descriptor().Fields(i).Message()\n\tMessage(i int) MessageType\n}\n\n// MessageDescriptors is a list of message declarations.\ntype MessageDescriptors interface {\n\t// Len reports the number of messages.\n\tLen() int\n\t// Get returns the ith MessageDescriptor. It panics if out of bounds.\n\tGet(i int) MessageDescriptor\n\t// ByName returns the MessageDescriptor for a message named s.\n\t// It returns nil if not found.\n\tByName(s Name) MessageDescriptor\n\n\tdoNotImplement\n}\n\n// FieldDescriptor describes a field within a message and\n// corresponds with the google.protobuf.FieldDescriptorProto message.\n//\n// It is used for both normal fields defined within the parent message\n// (e.g., [MessageDescriptor.Fields]) and fields that extend some remote message\n// (e.g., [FileDescriptor.Extensions] or [MessageDescriptor.Extensions]).\ntype FieldDescriptor interface {\n\tDescriptor\n\n\t// Number reports the unique number for this field.\n\tNumber() FieldNumber\n\t// Cardinality reports the cardinality for this field.\n\tCardinality() Cardinality\n\t// Kind reports the basic kind for this field.\n\tKind() Kind\n\n\t// HasJSONName reports whether this field has an explicitly set JSON name.\n\tHasJSONName() bool\n\n\t// JSONName reports the name used for JSON serialization.\n\t// It is usually the camel-cased form of the field name.\n\t// Extension fields are represented by the full name surrounded by brackets.\n\tJSONName() string\n\n\t// TextName reports the name used for text serialization.\n\t// It is usually the name of the field, except that groups use the name\n\t// of the inlined message, and extension fields are represented by the\n\t// full name surrounded by brackets.\n\tTextName() string\n\n\t// HasPresence reports whether the field distinguishes between unpopulated\n\t// and default values.\n\tHasPresence() bool\n\n\t// IsExtension reports whether this is an extension field. If false,\n\t// then Parent and ContainingMessage refer to the same message.\n\t// Otherwise, ContainingMessage and Parent likely differ.\n\tIsExtension() bool\n\n\t// HasOptionalKeyword reports whether the \"optional\" keyword was explicitly\n\t// specified in the source .proto file.\n\tHasOptionalKeyword() bool\n\n\t// Deprecated: support for weak fields has been removed.\n\tIsWeak() bool\n\n\t// IsPacked reports whether repeated primitive numeric kinds should be\n\t// serialized using a packed encoding.\n\t// If true, then it implies Cardinality is Repeated.\n\tIsPacked() bool\n\n\t// IsList reports whether this field represents a list,\n\t// where the value type for the associated field is a List.\n\t// It is equivalent to checking whether Cardinality is Repeated and\n\t// that IsMap reports false.\n\tIsList() bool\n\n\t// IsMap reports whether this field represents a map,\n\t// where the value type for the associated field is a Map.\n\t// It is equivalent to checking whether Cardinality is Repeated,\n\t// that the Kind is MessageKind, and that MessageDescriptor.IsMapEntry reports true.\n\tIsMap() bool\n\n\t// MapKey returns the field descriptor for the key in the map entry.\n\t// It returns nil if IsMap reports false.\n\tMapKey() FieldDescriptor\n\n\t// MapValue returns the field descriptor for the value in the map entry.\n\t// It returns nil if IsMap reports false.\n\tMapValue() FieldDescriptor\n\n\t// HasDefault reports whether this field has a default value.\n\tHasDefault() bool\n\n\t// Default returns the default value for scalar fields.\n\t// For proto2, it is the default value as specified in the proto file,\n\t// or the zero value if unspecified.\n\t// For proto3, it is always the zero value of the scalar.\n\t// The Value type is determined by the Kind.\n\tDefault() Value\n\n\t// DefaultEnumValue returns the enum value descriptor for the default value\n\t// of an enum field, and is nil for any other kind of field.\n\tDefaultEnumValue() EnumValueDescriptor\n\n\t// ContainingOneof is the containing oneof that this field belongs to,\n\t// and is nil if this field is not part of a oneof.\n\tContainingOneof() OneofDescriptor\n\n\t// ContainingMessage is the containing message that this field belongs to.\n\t// For extension fields, this may not necessarily be the parent message\n\t// that the field is declared within.\n\tContainingMessage() MessageDescriptor\n\n\t// Enum is the enum descriptor if Kind is EnumKind.\n\t// It returns nil for any other Kind.\n\tEnum() EnumDescriptor\n\n\t// Message is the message descriptor if Kind is\n\t// MessageKind or GroupKind. It returns nil for any other Kind.\n\tMessage() MessageDescriptor\n\n\tisFieldDescriptor\n}\ntype isFieldDescriptor interface{ ProtoType(FieldDescriptor) }\n\n// FieldDescriptors is a list of field declarations.\ntype FieldDescriptors interface {\n\t// Len reports the number of fields.\n\tLen() int\n\t// Get returns the ith FieldDescriptor. It panics if out of bounds.\n\tGet(i int) FieldDescriptor\n\t// ByName returns the FieldDescriptor for a field named s.\n\t// It returns nil if not found.\n\tByName(s Name) FieldDescriptor\n\t// ByJSONName returns the FieldDescriptor for a field with s as the JSON name.\n\t// It returns nil if not found.\n\tByJSONName(s string) FieldDescriptor\n\t// ByTextName returns the FieldDescriptor for a field with s as the text name.\n\t// It returns nil if not found.\n\tByTextName(s string) FieldDescriptor\n\t// ByNumber returns the FieldDescriptor for a field numbered n.\n\t// It returns nil if not found.\n\tByNumber(n FieldNumber) FieldDescriptor\n\n\tdoNotImplement\n}\n\n// OneofDescriptor describes a oneof field set within a given message and\n// corresponds with the google.protobuf.OneofDescriptorProto message.\ntype OneofDescriptor interface {\n\tDescriptor\n\n\t// IsSynthetic reports whether this is a synthetic oneof created to support\n\t// proto3 optional semantics. If true, Fields contains exactly one field\n\t// with FieldDescriptor.HasOptionalKeyword specified.\n\tIsSynthetic() bool\n\n\t// Fields is a list of fields belonging to this oneof.\n\tFields() FieldDescriptors\n\n\tisOneofDescriptor\n}\ntype isOneofDescriptor interface{ ProtoType(OneofDescriptor) }\n\n// OneofDescriptors is a list of oneof declarations.\ntype OneofDescriptors interface {\n\t// Len reports the number of oneof fields.\n\tLen() int\n\t// Get returns the ith OneofDescriptor. It panics if out of bounds.\n\tGet(i int) OneofDescriptor\n\t// ByName returns the OneofDescriptor for a oneof named s.\n\t// It returns nil if not found.\n\tByName(s Name) OneofDescriptor\n\n\tdoNotImplement\n}\n\n// ExtensionDescriptor is an alias of [FieldDescriptor] for documentation.\ntype ExtensionDescriptor = FieldDescriptor\n\n// ExtensionTypeDescriptor is an [ExtensionDescriptor] with an associated [ExtensionType].\ntype ExtensionTypeDescriptor interface {\n\tExtensionDescriptor\n\n\t// Type returns the associated ExtensionType.\n\tType() ExtensionType\n\n\t// Descriptor returns the plain ExtensionDescriptor without the\n\t// associated ExtensionType.\n\tDescriptor() ExtensionDescriptor\n}\n\n// ExtensionDescriptors is a list of field declarations.\ntype ExtensionDescriptors interface {\n\t// Len reports the number of fields.\n\tLen() int\n\t// Get returns the ith ExtensionDescriptor. It panics if out of bounds.\n\tGet(i int) ExtensionDescriptor\n\t// ByName returns the ExtensionDescriptor for a field named s.\n\t// It returns nil if not found.\n\tByName(s Name) ExtensionDescriptor\n\n\tdoNotImplement\n}\n\n// ExtensionType encapsulates an [ExtensionDescriptor] with a concrete\n// Go implementation. The nested field descriptor must be for a extension field.\n//\n// While a normal field is a member of the parent message that it is declared\n// within (see [Descriptor.Parent]), an extension field is a member of some other\n// target message (see [FieldDescriptor.ContainingMessage]) and may have no\n// relationship with the parent. However, the full name of an extension field is\n// relative to the parent that it is declared within.\n//\n// For example:\n//\n//\tsyntax = \"proto2\";\n//\tpackage example;\n//\tmessage FooMessage {\n//\t\textensions 100 to max;\n//\t}\n//\tmessage BarMessage {\n//\t\textends FooMessage { optional BarMessage bar_field = 100; }\n//\t}\n//\n// Field \"bar_field\" is an extension of FooMessage, but its full name is\n// \"example.BarMessage.bar_field\" instead of \"example.FooMessage.bar_field\".\ntype ExtensionType interface {\n\t// New returns a new value for the field.\n\t// For scalars, this returns the default value in native Go form.\n\tNew() Value\n\n\t// Zero returns a new value for the field.\n\t// For scalars, this returns the default value in native Go form.\n\t// For composite types, this returns an empty, read-only message, list, or map.\n\tZero() Value\n\n\t// TypeDescriptor returns the extension type descriptor.\n\tTypeDescriptor() ExtensionTypeDescriptor\n\n\t// ValueOf wraps the input and returns it as a Value.\n\t// ValueOf panics if the input value is invalid or not the appropriate type.\n\t//\n\t// ValueOf is more extensive than protoreflect.ValueOf for a given field's\n\t// value as it has more type information available.\n\tValueOf(any) Value\n\n\t// InterfaceOf completely unwraps the Value to the underlying Go type.\n\t// InterfaceOf panics if the input is nil or does not represent the\n\t// appropriate underlying Go type. For composite types, it panics if the\n\t// value is not mutable.\n\t//\n\t// InterfaceOf is able to unwrap the Value further than Value.Interface\n\t// as it has more type information available.\n\tInterfaceOf(Value) any\n\n\t// IsValidValue reports whether the Value is valid to assign to the field.\n\tIsValidValue(Value) bool\n\n\t// IsValidInterface reports whether the input is valid to assign to the field.\n\tIsValidInterface(any) bool\n}\n\n// EnumDescriptor describes an enum and\n// corresponds with the google.protobuf.EnumDescriptorProto message.\n//\n// Nested declarations:\n// [EnumValueDescriptor].\ntype EnumDescriptor interface {\n\tDescriptor\n\n\t// Values is a list of nested enum value declarations.\n\tValues() EnumValueDescriptors\n\n\t// ReservedNames is a list of reserved enum names.\n\tReservedNames() Names\n\t// ReservedRanges is a list of reserved ranges of enum numbers.\n\tReservedRanges() EnumRanges\n\n\t// IsClosed reports whether this enum uses closed semantics.\n\t// See https://protobuf.dev/programming-guides/enum/#definitions.\n\t// Note: the Go protobuf implementation is not spec compliant and treats\n\t// all enums as open enums.\n\tIsClosed() bool\n\n\tisEnumDescriptor\n}\ntype isEnumDescriptor interface{ ProtoType(EnumDescriptor) }\n\n// EnumType encapsulates an [EnumDescriptor] with a concrete Go implementation.\ntype EnumType interface {\n\t// New returns an instance of this enum type with its value set to n.\n\tNew(n EnumNumber) Enum\n\n\t// Descriptor returns the enum descriptor.\n\t//\n\t// Invariant: t.Descriptor() == t.New(0).Descriptor()\n\tDescriptor() EnumDescriptor\n}\n\n// EnumDescriptors is a list of enum declarations.\ntype EnumDescriptors interface {\n\t// Len reports the number of enum types.\n\tLen() int\n\t// Get returns the ith EnumDescriptor. It panics if out of bounds.\n\tGet(i int) EnumDescriptor\n\t// ByName returns the EnumDescriptor for an enum named s.\n\t// It returns nil if not found.\n\tByName(s Name) EnumDescriptor\n\n\tdoNotImplement\n}\n\n// EnumValueDescriptor describes an enum value and\n// corresponds with the google.protobuf.EnumValueDescriptorProto message.\n//\n// All other proto declarations are in the namespace of the parent.\n// However, enum values do not follow this rule and are within the namespace\n// of the parent's parent (i.e., they are a sibling of the containing enum).\n// Thus, a value named \"FOO_VALUE\" declared within an enum uniquely identified\n// as \"proto.package.MyEnum\" has a full name of \"proto.package.FOO_VALUE\".\ntype EnumValueDescriptor interface {\n\tDescriptor\n\n\t// Number returns the enum value as an integer.\n\tNumber() EnumNumber\n\n\tisEnumValueDescriptor\n}\ntype isEnumValueDescriptor interface{ ProtoType(EnumValueDescriptor) }\n\n// EnumValueDescriptors is a list of enum value declarations.\ntype EnumValueDescriptors interface {\n\t// Len reports the number of enum values.\n\tLen() int\n\t// Get returns the ith EnumValueDescriptor. It panics if out of bounds.\n\tGet(i int) EnumValueDescriptor\n\t// ByName returns the EnumValueDescriptor for the enum value named s.\n\t// It returns nil if not found.\n\tByName(s Name) EnumValueDescriptor\n\t// ByNumber returns the EnumValueDescriptor for the enum value numbered n.\n\t// If multiple have the same number, the first one defined is returned\n\t// It returns nil if not found.\n\tByNumber(n EnumNumber) EnumValueDescriptor\n\n\tdoNotImplement\n}\n\n// ServiceDescriptor describes a service and\n// corresponds with the google.protobuf.ServiceDescriptorProto message.\n//\n// Nested declarations: [MethodDescriptor].\ntype ServiceDescriptor interface {\n\tDescriptor\n\n\t// Methods is a list of nested message declarations.\n\tMethods() MethodDescriptors\n\n\tisServiceDescriptor\n}\ntype isServiceDescriptor interface{ ProtoType(ServiceDescriptor) }\n\n// ServiceDescriptors is a list of service declarations.\ntype ServiceDescriptors interface {\n\t// Len reports the number of services.\n\tLen() int\n\t// Get returns the ith ServiceDescriptor. It panics if out of bounds.\n\tGet(i int) ServiceDescriptor\n\t// ByName returns the ServiceDescriptor for a service named s.\n\t// It returns nil if not found.\n\tByName(s Name) ServiceDescriptor\n\n\tdoNotImplement\n}\n\n// MethodDescriptor describes a method and\n// corresponds with the google.protobuf.MethodDescriptorProto message.\ntype MethodDescriptor interface {\n\tDescriptor\n\n\t// Input is the input message descriptor.\n\tInput() MessageDescriptor\n\t// Output is the output message descriptor.\n\tOutput() MessageDescriptor\n\t// IsStreamingClient reports whether the client streams multiple messages.\n\tIsStreamingClient() bool\n\t// IsStreamingServer reports whether the server streams multiple messages.\n\tIsStreamingServer() bool\n\n\tisMethodDescriptor\n}\ntype isMethodDescriptor interface{ ProtoType(MethodDescriptor) }\n\n// MethodDescriptors is a list of method declarations.\ntype MethodDescriptors interface {\n\t// Len reports the number of methods.\n\tLen() int\n\t// Get returns the ith MethodDescriptor. It panics if out of bounds.\n\tGet(i int) MethodDescriptor\n\t// ByName returns the MethodDescriptor for a service method named s.\n\t// It returns nil if not found.\n\tByName(s Name) MethodDescriptor\n\n\tdoNotImplement\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/reflect/protoreflect/value.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 protoreflect\n\nimport \"google.golang.org/protobuf/encoding/protowire\"\n\n// Enum is a reflection interface for a concrete enum value,\n// which provides type information and a getter for the enum number.\n// Enum does not provide a mutable API since enums are commonly backed by\n// Go constants, which are not addressable.\ntype Enum interface {\n\t// Descriptor returns enum descriptor, which contains only the protobuf\n\t// type information for the enum.\n\tDescriptor() EnumDescriptor\n\n\t// Type returns the enum type, which encapsulates both Go and protobuf\n\t// type information. If the Go type information is not needed,\n\t// it is recommended that the enum descriptor be used instead.\n\tType() EnumType\n\n\t// Number returns the enum value as an integer.\n\tNumber() EnumNumber\n}\n\n// Message is a reflective interface for a concrete message value,\n// encapsulating both type and value information for the message.\n//\n// Accessor/mutators for individual fields are keyed by [FieldDescriptor].\n// For non-extension fields, the descriptor must exactly match the\n// field known by the parent message.\n// For extension fields, the descriptor must implement [ExtensionTypeDescriptor],\n// extend the parent message (i.e., have the same message [FullName]), and\n// be within the parent's extension range.\n//\n// Each field [Value] can be a scalar or a composite type ([Message], [List], or [Map]).\n// See [Value] for the Go types associated with a [FieldDescriptor].\n// Providing a [Value] that is invalid or of an incorrect type panics.\ntype Message interface {\n\t// Descriptor returns message descriptor, which contains only the protobuf\n\t// type information for the message.\n\tDescriptor() MessageDescriptor\n\n\t// Type returns the message type, which encapsulates both Go and protobuf\n\t// type information. If the Go type information is not needed,\n\t// it is recommended that the message descriptor be used instead.\n\tType() MessageType\n\n\t// New returns a newly allocated and mutable empty message.\n\tNew() Message\n\n\t// Interface unwraps the message reflection interface and\n\t// returns the underlying ProtoMessage interface.\n\tInterface() ProtoMessage\n\n\t// Range iterates over every populated field in an undefined order,\n\t// calling f for each field descriptor and value encountered.\n\t// Range returns immediately if f returns false.\n\t// While iterating, mutating operations may only be performed\n\t// on the current field descriptor.\n\tRange(f func(FieldDescriptor, Value) bool)\n\n\t// Has reports whether a field is populated.\n\t//\n\t// Some fields have the property of nullability where it is possible to\n\t// distinguish between the default value of a field and whether the field\n\t// was explicitly populated with the default value. Singular message fields,\n\t// member fields of a oneof, and proto2 scalar fields are nullable. Such\n\t// fields are populated only if explicitly set.\n\t//\n\t// In other cases (aside from the nullable cases above),\n\t// a proto3 scalar field is populated if it contains a non-zero value, and\n\t// a repeated field is populated if it is non-empty.\n\tHas(FieldDescriptor) bool\n\n\t// Clear clears the field such that a subsequent Has call reports false.\n\t//\n\t// Clearing an extension field clears both the extension type and value\n\t// associated with the given field number.\n\t//\n\t// Clear is a mutating operation and unsafe for concurrent use.\n\tClear(FieldDescriptor)\n\n\t// Get retrieves the value for a field.\n\t//\n\t// For unpopulated scalars, it returns the default value, where\n\t// the default value of a bytes scalar is guaranteed to be a copy.\n\t// For unpopulated composite types, it returns an empty, read-only view\n\t// of the value; to obtain a mutable reference, use Mutable.\n\tGet(FieldDescriptor) Value\n\n\t// Set stores the value for a field.\n\t//\n\t// For a field belonging to a oneof, it implicitly clears any other field\n\t// that may be currently set within the same oneof.\n\t// For extension fields, it implicitly stores the provided ExtensionType.\n\t// When setting a composite type, it is unspecified whether the stored value\n\t// aliases the source's memory in any way. If the composite value is an\n\t// empty, read-only value, then it panics.\n\t//\n\t// Set is a mutating operation and unsafe for concurrent use.\n\tSet(FieldDescriptor, Value)\n\n\t// Mutable returns a mutable reference to a composite type.\n\t//\n\t// If the field is unpopulated, it may allocate a composite value.\n\t// For a field belonging to a oneof, it implicitly clears any other field\n\t// that may be currently set within the same oneof.\n\t// For extension fields, it implicitly stores the provided ExtensionType\n\t// if not already stored.\n\t// It panics if the field does not contain a composite type.\n\t//\n\t// Mutable is a mutating operation and unsafe for concurrent use.\n\tMutable(FieldDescriptor) Value\n\n\t// NewField returns a new value that is assignable to the field\n\t// for the given descriptor. For scalars, this returns the default value.\n\t// For lists, maps, and messages, this returns a new, empty, mutable value.\n\tNewField(FieldDescriptor) Value\n\n\t// WhichOneof reports which field within the oneof is populated,\n\t// returning nil if none are populated.\n\t// It panics if the oneof descriptor does not belong to this message.\n\tWhichOneof(OneofDescriptor) FieldDescriptor\n\n\t// GetUnknown retrieves the entire list of unknown fields.\n\t// The caller may only mutate the contents of the RawFields\n\t// if the mutated bytes are stored back into the message with SetUnknown.\n\tGetUnknown() RawFields\n\n\t// SetUnknown stores an entire list of unknown fields.\n\t// The raw fields must be syntactically valid according to the wire format.\n\t// An implementation may panic if this is not the case.\n\t// Once stored, the caller must not mutate the content of the RawFields.\n\t// An empty RawFields may be passed to clear the fields.\n\t//\n\t// SetUnknown is a mutating operation and unsafe for concurrent use.\n\tSetUnknown(RawFields)\n\n\t// IsValid reports whether the message is valid.\n\t//\n\t// An invalid message is an empty, read-only value.\n\t//\n\t// An invalid message often corresponds to a nil pointer of the concrete\n\t// message type, but the details are implementation dependent.\n\t// Validity is not part of the protobuf data model, and may not\n\t// be preserved in marshaling or other operations.\n\tIsValid() bool\n\n\t// ProtoMethods returns optional fast-path implementations of various operations.\n\t// This method may return nil.\n\t//\n\t// The returned methods type is identical to\n\t// [google.golang.org/protobuf/runtime/protoiface.Methods].\n\t// Consult the protoiface package documentation for details.\n\tProtoMethods() *methods\n}\n\n// RawFields is the raw bytes for an ordered sequence of fields.\n// Each field contains both the tag (representing field number and wire type),\n// and also the wire data itself.\ntype RawFields []byte\n\n// IsValid reports whether b is syntactically correct wire format.\nfunc (b RawFields) IsValid() bool {\n\tfor len(b) > 0 {\n\t\t_, _, n := protowire.ConsumeField(b)\n\t\tif n < 0 {\n\t\t\treturn false\n\t\t}\n\t\tb = b[n:]\n\t}\n\treturn true\n}\n\n// List is a zero-indexed, ordered list.\n// The element [Value] type is determined by [FieldDescriptor.Kind].\n// Providing a [Value] that is invalid or of an incorrect type panics.\ntype List interface {\n\t// Len reports the number of entries in the List.\n\t// Get, Set, and Truncate panic with out of bound indexes.\n\tLen() int\n\n\t// Get retrieves the value at the given index.\n\t// It never returns an invalid value.\n\tGet(int) Value\n\n\t// Set stores a value for the given index.\n\t// When setting a composite type, it is unspecified whether the set\n\t// value aliases the source's memory in any way.\n\t//\n\t// Set is a mutating operation and unsafe for concurrent use.\n\tSet(int, Value)\n\n\t// Append appends the provided value to the end of the list.\n\t// When appending a composite type, it is unspecified whether the appended\n\t// value aliases the source's memory in any way.\n\t//\n\t// Append is a mutating operation and unsafe for concurrent use.\n\tAppend(Value)\n\n\t// AppendMutable appends a new, empty, mutable message value to the end\n\t// of the list and returns it.\n\t// It panics if the list does not contain a message type.\n\tAppendMutable() Value\n\n\t// Truncate truncates the list to a smaller length.\n\t//\n\t// Truncate is a mutating operation and unsafe for concurrent use.\n\tTruncate(int)\n\n\t// NewElement returns a new value for a list element.\n\t// For enums, this returns the first enum value.\n\t// For other scalars, this returns the zero value.\n\t// For messages, this returns a new, empty, mutable value.\n\tNewElement() Value\n\n\t// IsValid reports whether the list is valid.\n\t//\n\t// An invalid list is an empty, read-only value.\n\t//\n\t// Validity is not part of the protobuf data model, and may not\n\t// be preserved in marshaling or other operations.\n\tIsValid() bool\n}\n\n// Map is an unordered, associative map.\n// The entry [MapKey] type is determined by [FieldDescriptor.MapKey].Kind.\n// The entry [Value] type is determined by [FieldDescriptor.MapValue].Kind.\n// Providing a [MapKey] or [Value] that is invalid or of an incorrect type panics.\ntype Map interface {\n\t// Len reports the number of elements in the map.\n\tLen() int\n\n\t// Range iterates over every map entry in an undefined order,\n\t// calling f for each key and value encountered.\n\t// Range calls f Len times unless f returns false, which stops iteration.\n\t// While iterating, mutating operations may only be performed\n\t// on the current map key.\n\tRange(f func(MapKey, Value) bool)\n\n\t// Has reports whether an entry with the given key is in the map.\n\tHas(MapKey) bool\n\n\t// Clear clears the entry associated with they given key.\n\t// The operation does nothing if there is no entry associated with the key.\n\t//\n\t// Clear is a mutating operation and unsafe for concurrent use.\n\tClear(MapKey)\n\n\t// Get retrieves the value for an entry with the given key.\n\t// It returns an invalid value for non-existent entries.\n\tGet(MapKey) Value\n\n\t// Set stores the value for an entry with the given key.\n\t// It panics when given a key or value that is invalid or the wrong type.\n\t// When setting a composite type, it is unspecified whether the set\n\t// value aliases the source's memory in any way.\n\t//\n\t// Set is a mutating operation and unsafe for concurrent use.\n\tSet(MapKey, Value)\n\n\t// Mutable retrieves a mutable reference to the entry for the given key.\n\t// If no entry exists for the key, it creates a new, empty, mutable value\n\t// and stores it as the entry for the key.\n\t// It panics if the map value is not a message.\n\tMutable(MapKey) Value\n\n\t// NewValue returns a new value assignable as a map value.\n\t// For enums, this returns the first enum value.\n\t// For other scalars, this returns the zero value.\n\t// For messages, this returns a new, empty, mutable value.\n\tNewValue() Value\n\n\t// IsValid reports whether the map is valid.\n\t//\n\t// An invalid map is an empty, read-only value.\n\t//\n\t// An invalid message often corresponds to a nil Go map value,\n\t// but the details are implementation dependent.\n\t// Validity is not part of the protobuf data model, and may not\n\t// be preserved in marshaling or other operations.\n\tIsValid() bool\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.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 protoreflect\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\n\t\"google.golang.org/protobuf/encoding/protowire\"\n)\n\n// Equal reports whether v1 and v2 are recursively equal.\n//\n//   - Values of different types are always unequal.\n//\n//   - Bytes values are equal if they contain identical bytes.\n//     Empty bytes (regardless of nil-ness) are considered equal.\n//\n//   - Floating point values are equal if they contain the same value.\n//     Unlike the == operator, a NaN is equal to another NaN.\n//\n//   - Enums are equal if they contain the same number.\n//     Since [Value] does not contain an enum descriptor,\n//     enum values do not consider the type of the enum.\n//\n//   - Other scalar values are equal if they contain the same value.\n//\n//   - [Message] values are equal if they belong to the same message descriptor,\n//     have the same set of populated known and extension field values,\n//     and the same set of unknown fields values.\n//\n//   - [List] values are equal if they are the same length and\n//     each corresponding element is equal.\n//\n//   - [Map] values are equal if they have the same set of keys and\n//     the corresponding value for each key is equal.\nfunc (v1 Value) Equal(v2 Value) bool {\n\treturn equalValue(v1, v2)\n}\n\nfunc equalValue(x, y Value) bool {\n\teqType := x.typ == y.typ\n\tswitch x.typ {\n\tcase nilType:\n\t\treturn eqType\n\tcase boolType:\n\t\treturn eqType && x.Bool() == y.Bool()\n\tcase int32Type, int64Type:\n\t\treturn eqType && x.Int() == y.Int()\n\tcase uint32Type, uint64Type:\n\t\treturn eqType && x.Uint() == y.Uint()\n\tcase float32Type, float64Type:\n\t\treturn eqType && equalFloat(x.Float(), y.Float())\n\tcase stringType:\n\t\treturn eqType && x.String() == y.String()\n\tcase bytesType:\n\t\treturn eqType && bytes.Equal(x.Bytes(), y.Bytes())\n\tcase enumType:\n\t\treturn eqType && x.Enum() == y.Enum()\n\tdefault:\n\t\tswitch x := x.Interface().(type) {\n\t\tcase Message:\n\t\t\ty, ok := y.Interface().(Message)\n\t\t\treturn ok && equalMessage(x, y)\n\t\tcase List:\n\t\t\ty, ok := y.Interface().(List)\n\t\t\treturn ok && equalList(x, y)\n\t\tcase Map:\n\t\t\ty, ok := y.Interface().(Map)\n\t\t\treturn ok && equalMap(x, y)\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"unknown type: %T\", x))\n\t\t}\n\t}\n}\n\n// equalFloat compares two floats, where NaNs are treated as equal.\nfunc equalFloat(x, y float64) bool {\n\tif math.IsNaN(x) || math.IsNaN(y) {\n\t\treturn math.IsNaN(x) && math.IsNaN(y)\n\t}\n\treturn x == y\n}\n\n// equalMessage compares two messages.\nfunc equalMessage(mx, my Message) bool {\n\tif mx.Descriptor() != my.Descriptor() {\n\t\treturn false\n\t}\n\n\tnx := 0\n\tequal := true\n\tmx.Range(func(fd FieldDescriptor, vx Value) bool {\n\t\tnx++\n\t\tvy := my.Get(fd)\n\t\tequal = my.Has(fd) && equalValue(vx, vy)\n\t\treturn equal\n\t})\n\tif !equal {\n\t\treturn false\n\t}\n\tny := 0\n\tmy.Range(func(fd FieldDescriptor, vx Value) bool {\n\t\tny++\n\t\treturn true\n\t})\n\tif nx != ny {\n\t\treturn false\n\t}\n\n\treturn equalUnknown(mx.GetUnknown(), my.GetUnknown())\n}\n\n// equalList compares two lists.\nfunc equalList(x, y List) bool {\n\tif x.Len() != y.Len() {\n\t\treturn false\n\t}\n\tfor i := x.Len() - 1; i >= 0; i-- {\n\t\tif !equalValue(x.Get(i), y.Get(i)) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// equalMap compares two maps.\nfunc equalMap(x, y Map) bool {\n\tif x.Len() != y.Len() {\n\t\treturn false\n\t}\n\tequal := true\n\tx.Range(func(k MapKey, vx Value) bool {\n\t\tvy := y.Get(k)\n\t\tequal = y.Has(k) && equalValue(vx, vy)\n\t\treturn equal\n\t})\n\treturn equal\n}\n\n// equalUnknown compares unknown fields by direct comparison on the raw bytes\n// of each individual field number.\nfunc equalUnknown(x, y RawFields) bool {\n\tif len(x) != len(y) {\n\t\treturn false\n\t}\n\tif bytes.Equal([]byte(x), []byte(y)) {\n\t\treturn true\n\t}\n\n\tmx := make(map[FieldNumber]RawFields)\n\tmy := make(map[FieldNumber]RawFields)\n\tfor len(x) > 0 {\n\t\tfnum, _, n := protowire.ConsumeField(x)\n\t\tmx[fnum] = append(mx[fnum], x[:n]...)\n\t\tx = x[n:]\n\t}\n\tfor len(y) > 0 {\n\t\tfnum, _, n := protowire.ConsumeField(y)\n\t\tmy[fnum] = append(my[fnum], y[:n]...)\n\t\ty = y[n:]\n\t}\n\treturn reflect.DeepEqual(mx, my)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.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 protoreflect\n\nimport (\n\t\"fmt\"\n\t\"math\"\n)\n\n// Value is a union where only one Go type may be set at a time.\n// The Value is used to represent all possible values a field may take.\n// The following shows which Go type is used to represent each proto [Kind]:\n//\n//\t╔════════════╤═════════════════════════════════════╗\n//\t║ Go type    │ Protobuf kind                       ║\n//\t╠════════════╪═════════════════════════════════════╣\n//\t║ bool       │ BoolKind                            ║\n//\t║ int32      │ Int32Kind, Sint32Kind, Sfixed32Kind ║\n//\t║ int64      │ Int64Kind, Sint64Kind, Sfixed64Kind ║\n//\t║ uint32     │ Uint32Kind, Fixed32Kind             ║\n//\t║ uint64     │ Uint64Kind, Fixed64Kind             ║\n//\t║ float32    │ FloatKind                           ║\n//\t║ float64    │ DoubleKind                          ║\n//\t║ string     │ StringKind                          ║\n//\t║ []byte     │ BytesKind                           ║\n//\t║ EnumNumber │ EnumKind                            ║\n//\t║ Message    │ MessageKind, GroupKind              ║\n//\t╚════════════╧═════════════════════════════════════╝\n//\n// Multiple protobuf Kinds may be represented by a single Go type if the type\n// can losslessly represent the information for the proto kind. For example,\n// [Int64Kind], [Sint64Kind], and [Sfixed64Kind] are all represented by int64,\n// but use different integer encoding methods.\n//\n// The [List] or [Map] types are used if the field cardinality is repeated.\n// A field is a [List] if [FieldDescriptor.IsList] reports true.\n// A field is a [Map] if [FieldDescriptor.IsMap] reports true.\n//\n// Converting to/from a Value and a concrete Go value panics on type mismatch.\n// For example, [ValueOf](\"hello\").Int() panics because this attempts to\n// retrieve an int64 from a string.\n//\n// [List], [Map], and [Message] Values are called \"composite\" values.\n//\n// A composite Value may alias (reference) memory at some location,\n// such that changes to the Value updates the that location.\n// A composite value acquired with a Mutable method, such as [Message.Mutable],\n// always references the source object.\n//\n// For example:\n//\n//\t// Append a 0 to a \"repeated int32\" field.\n//\t// Since the Value returned by Mutable is guaranteed to alias\n//\t// the source message, modifying the Value modifies the message.\n//\tmessage.Mutable(fieldDesc).List().Append(protoreflect.ValueOfInt32(0))\n//\n//\t// Assign [0] to a \"repeated int32\" field by creating a new Value,\n//\t// modifying it, and assigning it.\n//\tlist := message.NewField(fieldDesc).List()\n//\tlist.Append(protoreflect.ValueOfInt32(0))\n//\tmessage.Set(fieldDesc, list)\n//\t// ERROR: Since it is not defined whether Set aliases the source,\n//\t// appending to the List here may or may not modify the message.\n//\tlist.Append(protoreflect.ValueOfInt32(0))\n//\n// Some operations, such as [Message.Get], may return an \"empty, read-only\"\n// composite Value. Modifying an empty, read-only value panics.\ntype Value value\n\n// The protoreflect API uses a custom Value union type instead of any\n// to keep the future open for performance optimizations. Using an any\n// always incurs an allocation for primitives (e.g., int64) since it needs to\n// be boxed on the heap (as interfaces can only contain pointers natively).\n// Instead, we represent the Value union as a flat struct that internally keeps\n// track of which type is set. Using unsafe, the Value union can be reduced\n// down to 24B, which is identical in size to a slice.\n//\n// The latest compiler (Go1.11) currently suffers from some limitations:\n//\t• With inlining, the compiler should be able to statically prove that\n//\tonly one of these switch cases are taken and inline one specific case.\n//\tSee https://golang.org/issue/22310.\n\n// ValueOf returns a Value initialized with the concrete value stored in v.\n// This panics if the type does not match one of the allowed types in the\n// Value union.\nfunc ValueOf(v any) Value {\n\tswitch v := v.(type) {\n\tcase nil:\n\t\treturn Value{}\n\tcase bool:\n\t\treturn ValueOfBool(v)\n\tcase int32:\n\t\treturn ValueOfInt32(v)\n\tcase int64:\n\t\treturn ValueOfInt64(v)\n\tcase uint32:\n\t\treturn ValueOfUint32(v)\n\tcase uint64:\n\t\treturn ValueOfUint64(v)\n\tcase float32:\n\t\treturn ValueOfFloat32(v)\n\tcase float64:\n\t\treturn ValueOfFloat64(v)\n\tcase string:\n\t\treturn ValueOfString(v)\n\tcase []byte:\n\t\treturn ValueOfBytes(v)\n\tcase EnumNumber:\n\t\treturn ValueOfEnum(v)\n\tcase Message, List, Map:\n\t\treturn valueOfIface(v)\n\tcase ProtoMessage:\n\t\tpanic(fmt.Sprintf(\"invalid proto.Message(%T) type, expected a protoreflect.Message type\", v))\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"invalid type: %T\", v))\n\t}\n}\n\n// ValueOfBool returns a new boolean value.\nfunc ValueOfBool(v bool) Value {\n\tif v {\n\t\treturn Value{typ: boolType, num: 1}\n\t} else {\n\t\treturn Value{typ: boolType, num: 0}\n\t}\n}\n\n// ValueOfInt32 returns a new int32 value.\nfunc ValueOfInt32(v int32) Value {\n\treturn Value{typ: int32Type, num: uint64(v)}\n}\n\n// ValueOfInt64 returns a new int64 value.\nfunc ValueOfInt64(v int64) Value {\n\treturn Value{typ: int64Type, num: uint64(v)}\n}\n\n// ValueOfUint32 returns a new uint32 value.\nfunc ValueOfUint32(v uint32) Value {\n\treturn Value{typ: uint32Type, num: uint64(v)}\n}\n\n// ValueOfUint64 returns a new uint64 value.\nfunc ValueOfUint64(v uint64) Value {\n\treturn Value{typ: uint64Type, num: v}\n}\n\n// ValueOfFloat32 returns a new float32 value.\nfunc ValueOfFloat32(v float32) Value {\n\treturn Value{typ: float32Type, num: uint64(math.Float64bits(float64(v)))}\n}\n\n// ValueOfFloat64 returns a new float64 value.\nfunc ValueOfFloat64(v float64) Value {\n\treturn Value{typ: float64Type, num: uint64(math.Float64bits(float64(v)))}\n}\n\n// ValueOfString returns a new string value.\nfunc ValueOfString(v string) Value {\n\treturn valueOfString(v)\n}\n\n// ValueOfBytes returns a new bytes value.\nfunc ValueOfBytes(v []byte) Value {\n\treturn valueOfBytes(v[:len(v):len(v)])\n}\n\n// ValueOfEnum returns a new enum value.\nfunc ValueOfEnum(v EnumNumber) Value {\n\treturn Value{typ: enumType, num: uint64(v)}\n}\n\n// ValueOfMessage returns a new Message value.\nfunc ValueOfMessage(v Message) Value {\n\treturn valueOfIface(v)\n}\n\n// ValueOfList returns a new List value.\nfunc ValueOfList(v List) Value {\n\treturn valueOfIface(v)\n}\n\n// ValueOfMap returns a new Map value.\nfunc ValueOfMap(v Map) Value {\n\treturn valueOfIface(v)\n}\n\n// IsValid reports whether v is populated with a value.\nfunc (v Value) IsValid() bool {\n\treturn v.typ != nilType\n}\n\n// Interface returns v as an any.\n//\n// Invariant: v == ValueOf(v).Interface()\nfunc (v Value) Interface() any {\n\tswitch v.typ {\n\tcase nilType:\n\t\treturn nil\n\tcase boolType:\n\t\treturn v.Bool()\n\tcase int32Type:\n\t\treturn int32(v.Int())\n\tcase int64Type:\n\t\treturn int64(v.Int())\n\tcase uint32Type:\n\t\treturn uint32(v.Uint())\n\tcase uint64Type:\n\t\treturn uint64(v.Uint())\n\tcase float32Type:\n\t\treturn float32(v.Float())\n\tcase float64Type:\n\t\treturn float64(v.Float())\n\tcase stringType:\n\t\treturn v.String()\n\tcase bytesType:\n\t\treturn v.Bytes()\n\tcase enumType:\n\t\treturn v.Enum()\n\tdefault:\n\t\treturn v.getIface()\n\t}\n}\n\nfunc (v Value) typeName() string {\n\tswitch v.typ {\n\tcase nilType:\n\t\treturn \"nil\"\n\tcase boolType:\n\t\treturn \"bool\"\n\tcase int32Type:\n\t\treturn \"int32\"\n\tcase int64Type:\n\t\treturn \"int64\"\n\tcase uint32Type:\n\t\treturn \"uint32\"\n\tcase uint64Type:\n\t\treturn \"uint64\"\n\tcase float32Type:\n\t\treturn \"float32\"\n\tcase float64Type:\n\t\treturn \"float64\"\n\tcase stringType:\n\t\treturn \"string\"\n\tcase bytesType:\n\t\treturn \"bytes\"\n\tcase enumType:\n\t\treturn \"enum\"\n\tdefault:\n\t\tswitch v := v.getIface().(type) {\n\t\tcase Message:\n\t\t\treturn \"message\"\n\t\tcase List:\n\t\t\treturn \"list\"\n\t\tcase Map:\n\t\t\treturn \"map\"\n\t\tdefault:\n\t\t\treturn fmt.Sprintf(\"<unknown: %T>\", v)\n\t\t}\n\t}\n}\n\nfunc (v Value) panicMessage(what string) string {\n\treturn fmt.Sprintf(\"type mismatch: cannot convert %v to %s\", v.typeName(), what)\n}\n\n// Bool returns v as a bool and panics if the type is not a bool.\nfunc (v Value) Bool() bool {\n\tswitch v.typ {\n\tcase boolType:\n\t\treturn v.num > 0\n\tdefault:\n\t\tpanic(v.panicMessage(\"bool\"))\n\t}\n}\n\n// Int returns v as a int64 and panics if the type is not a int32 or int64.\nfunc (v Value) Int() int64 {\n\tswitch v.typ {\n\tcase int32Type, int64Type:\n\t\treturn int64(v.num)\n\tdefault:\n\t\tpanic(v.panicMessage(\"int\"))\n\t}\n}\n\n// Uint returns v as a uint64 and panics if the type is not a uint32 or uint64.\nfunc (v Value) Uint() uint64 {\n\tswitch v.typ {\n\tcase uint32Type, uint64Type:\n\t\treturn uint64(v.num)\n\tdefault:\n\t\tpanic(v.panicMessage(\"uint\"))\n\t}\n}\n\n// Float returns v as a float64 and panics if the type is not a float32 or float64.\nfunc (v Value) Float() float64 {\n\tswitch v.typ {\n\tcase float32Type, float64Type:\n\t\treturn math.Float64frombits(uint64(v.num))\n\tdefault:\n\t\tpanic(v.panicMessage(\"float\"))\n\t}\n}\n\n// String returns v as a string. Since this method implements [fmt.Stringer],\n// this returns the formatted string value for any non-string type.\nfunc (v Value) String() string {\n\tswitch v.typ {\n\tcase stringType:\n\t\treturn v.getString()\n\tdefault:\n\t\treturn fmt.Sprint(v.Interface())\n\t}\n}\n\n// Bytes returns v as a []byte and panics if the type is not a []byte.\nfunc (v Value) Bytes() []byte {\n\tswitch v.typ {\n\tcase bytesType:\n\t\treturn v.getBytes()\n\tdefault:\n\t\tpanic(v.panicMessage(\"bytes\"))\n\t}\n}\n\n// Enum returns v as a [EnumNumber] and panics if the type is not a [EnumNumber].\nfunc (v Value) Enum() EnumNumber {\n\tswitch v.typ {\n\tcase enumType:\n\t\treturn EnumNumber(v.num)\n\tdefault:\n\t\tpanic(v.panicMessage(\"enum\"))\n\t}\n}\n\n// Message returns v as a [Message] and panics if the type is not a [Message].\nfunc (v Value) Message() Message {\n\tswitch vi := v.getIface().(type) {\n\tcase Message:\n\t\treturn vi\n\tdefault:\n\t\tpanic(v.panicMessage(\"message\"))\n\t}\n}\n\n// List returns v as a [List] and panics if the type is not a [List].\nfunc (v Value) List() List {\n\tswitch vi := v.getIface().(type) {\n\tcase List:\n\t\treturn vi\n\tdefault:\n\t\tpanic(v.panicMessage(\"list\"))\n\t}\n}\n\n// Map returns v as a [Map] and panics if the type is not a [Map].\nfunc (v Value) Map() Map {\n\tswitch vi := v.getIface().(type) {\n\tcase Map:\n\t\treturn vi\n\tdefault:\n\t\tpanic(v.panicMessage(\"map\"))\n\t}\n}\n\n// MapKey returns v as a [MapKey] and panics for invalid [MapKey] types.\nfunc (v Value) MapKey() MapKey {\n\tswitch v.typ {\n\tcase boolType, int32Type, int64Type, uint32Type, uint64Type, stringType:\n\t\treturn MapKey(v)\n\tdefault:\n\t\tpanic(v.panicMessage(\"map key\"))\n\t}\n}\n\n// MapKey is used to index maps, where the Go type of the MapKey must match\n// the specified key [Kind] (see [MessageDescriptor.IsMapEntry]).\n// The following shows what Go type is used to represent each proto [Kind]:\n//\n//\t╔═════════╤═════════════════════════════════════╗\n//\t║ Go type │ Protobuf kind                       ║\n//\t╠═════════╪═════════════════════════════════════╣\n//\t║ bool    │ BoolKind                            ║\n//\t║ int32   │ Int32Kind, Sint32Kind, Sfixed32Kind ║\n//\t║ int64   │ Int64Kind, Sint64Kind, Sfixed64Kind ║\n//\t║ uint32  │ Uint32Kind, Fixed32Kind             ║\n//\t║ uint64  │ Uint64Kind, Fixed64Kind             ║\n//\t║ string  │ StringKind                          ║\n//\t╚═════════╧═════════════════════════════════════╝\n//\n// A MapKey is constructed and accessed through a [Value]:\n//\n//\tk := ValueOf(\"hash\").MapKey() // convert string to MapKey\n//\ts := k.String()               // convert MapKey to string\n//\n// The MapKey is a strict subset of valid types used in [Value];\n// converting a [Value] to a MapKey with an invalid type panics.\ntype MapKey value\n\n// IsValid reports whether k is populated with a value.\nfunc (k MapKey) IsValid() bool {\n\treturn Value(k).IsValid()\n}\n\n// Interface returns k as an any.\nfunc (k MapKey) Interface() any {\n\treturn Value(k).Interface()\n}\n\n// Bool returns k as a bool and panics if the type is not a bool.\nfunc (k MapKey) Bool() bool {\n\treturn Value(k).Bool()\n}\n\n// Int returns k as a int64 and panics if the type is not a int32 or int64.\nfunc (k MapKey) Int() int64 {\n\treturn Value(k).Int()\n}\n\n// Uint returns k as a uint64 and panics if the type is not a uint32 or uint64.\nfunc (k MapKey) Uint() uint64 {\n\treturn Value(k).Uint()\n}\n\n// String returns k as a string. Since this method implements [fmt.Stringer],\n// this returns the formatted string value for any non-string type.\nfunc (k MapKey) String() string {\n\treturn Value(k).String()\n}\n\n// Value returns k as a [Value].\nfunc (k MapKey) Value() Value {\n\treturn Value(k)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.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 protoreflect\n\nimport (\n\t\"unsafe\"\n\n\t\"google.golang.org/protobuf/internal/pragma\"\n)\n\ntype (\n\tifaceHeader struct {\n\t\t_    [0]any // if interfaces have greater alignment than unsafe.Pointer, this will enforce it.\n\t\tType unsafe.Pointer\n\t\tData unsafe.Pointer\n\t}\n)\n\nvar (\n\tnilType     = typeOf(nil)\n\tboolType    = typeOf(*new(bool))\n\tint32Type   = typeOf(*new(int32))\n\tint64Type   = typeOf(*new(int64))\n\tuint32Type  = typeOf(*new(uint32))\n\tuint64Type  = typeOf(*new(uint64))\n\tfloat32Type = typeOf(*new(float32))\n\tfloat64Type = typeOf(*new(float64))\n\tstringType  = typeOf(*new(string))\n\tbytesType   = typeOf(*new([]byte))\n\tenumType    = typeOf(*new(EnumNumber))\n)\n\n// typeOf returns a pointer to the Go type information.\n// The pointer is comparable and equal if and only if the types are identical.\nfunc typeOf(t any) unsafe.Pointer {\n\treturn (*ifaceHeader)(unsafe.Pointer(&t)).Type\n}\n\n// value is a union where only one type can be represented at a time.\n// The struct is 24B large on 64-bit systems and requires the minimum storage\n// necessary to represent each possible type.\n//\n// The Go GC needs to be able to scan variables containing pointers.\n// As such, pointers and non-pointers cannot be intermixed.\ntype value struct {\n\tpragma.DoNotCompare // 0B\n\n\t// typ stores the type of the value as a pointer to the Go type.\n\ttyp unsafe.Pointer // 8B\n\n\t// ptr stores the data pointer for a String, Bytes, or interface value.\n\tptr unsafe.Pointer // 8B\n\n\t// num stores a Bool, Int32, Int64, Uint32, Uint64, Float32, Float64, or\n\t// Enum value as a raw uint64.\n\t//\n\t// It is also used to store the length of a String or Bytes value;\n\t// the capacity is ignored.\n\tnum uint64 // 8B\n}\n\nfunc valueOfString(v string) Value {\n\treturn Value{typ: stringType, ptr: unsafe.Pointer(unsafe.StringData(v)), num: uint64(len(v))}\n}\nfunc valueOfBytes(v []byte) Value {\n\treturn Value{typ: bytesType, ptr: unsafe.Pointer(unsafe.SliceData(v)), num: uint64(len(v))}\n}\nfunc valueOfIface(v any) Value {\n\tp := (*ifaceHeader)(unsafe.Pointer(&v))\n\treturn Value{typ: p.Type, ptr: p.Data}\n}\n\nfunc (v Value) getString() string {\n\treturn unsafe.String((*byte)(v.ptr), v.num)\n}\nfunc (v Value) getBytes() []byte {\n\treturn unsafe.Slice((*byte)(v.ptr), v.num)\n}\nfunc (v Value) getIface() (x any) {\n\t*(*ifaceHeader)(unsafe.Pointer(&x)) = ifaceHeader{Type: v.typ, Data: v.ptr}\n\treturn x\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/reflect/protoregistry/registry.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 protoregistry provides data structures to register and lookup\n// protobuf descriptor types.\n//\n// The [Files] registry contains file descriptors and provides the ability\n// to iterate over the files or lookup a specific descriptor within the files.\n// [Files] only contains protobuf descriptors and has no understanding of Go\n// type information that may be associated with each descriptor.\n//\n// The [Types] registry contains descriptor types for which there is a known\n// Go type associated with that descriptor. It provides the ability to iterate\n// over the registered types or lookup a type by name.\npackage protoregistry\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"google.golang.org/protobuf/internal/encoding/messageset\"\n\t\"google.golang.org/protobuf/internal/errors\"\n\t\"google.golang.org/protobuf/internal/flags\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// conflictPolicy configures the policy for handling registration conflicts.\n//\n// It can be over-written at compile time with a linker-initialized variable:\n//\n//\tgo build -ldflags \"-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn\"\n//\n// It can be over-written at program execution with an environment variable:\n//\n//\tGOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn ./main\n//\n// Neither of the above are covered by the compatibility promise and\n// may be removed in a future release of this module.\nvar conflictPolicy = \"panic\" // \"panic\" | \"warn\" | \"ignore\"\n\n// ignoreConflict reports whether to ignore a registration conflict\n// given the descriptor being registered and the error.\n// It is a variable so that the behavior is easily overridden in another file.\nvar ignoreConflict = func(d protoreflect.Descriptor, err error) bool {\n\tconst env = \"GOLANG_PROTOBUF_REGISTRATION_CONFLICT\"\n\tconst faq = \"https://protobuf.dev/reference/go/faq#namespace-conflict\"\n\tpolicy := conflictPolicy\n\tif v := os.Getenv(env); v != \"\" {\n\t\tpolicy = v\n\t}\n\tswitch policy {\n\tcase \"panic\":\n\t\tpanic(fmt.Sprintf(\"%v\\nSee %v\\n\", err, faq))\n\tcase \"warn\":\n\t\tfmt.Fprintf(os.Stderr, \"WARNING: %v\\nSee %v\\n\\n\", err, faq)\n\t\treturn true\n\tcase \"ignore\":\n\t\treturn true\n\tdefault:\n\t\tpanic(\"invalid \" + env + \" value: \" + os.Getenv(env))\n\t}\n}\n\nvar globalMutex sync.RWMutex\n\n// GlobalFiles is a global registry of file descriptors.\nvar GlobalFiles *Files = new(Files)\n\n// GlobalTypes is the registry used by default for type lookups\n// unless a local registry is provided by the user.\nvar GlobalTypes *Types = new(Types)\n\n// NotFound is a sentinel error value to indicate that the type was not found.\n//\n// Since registry lookup can happen in the critical performance path, resolvers\n// must return this exact error value, not an error wrapping it.\nvar NotFound = errors.New(\"not found\")\n\n// Files is a registry for looking up or iterating over files and the\n// descriptors contained within them.\n// The Find and Range methods are safe for concurrent use.\ntype Files struct {\n\t// The map of descsByName contains:\n\t//\tEnumDescriptor\n\t//\tEnumValueDescriptor\n\t//\tMessageDescriptor\n\t//\tExtensionDescriptor\n\t//\tServiceDescriptor\n\t//\t*packageDescriptor\n\t//\n\t// Note that files are stored as a slice, since a package may contain\n\t// multiple files. Only top-level declarations are registered.\n\t// Note that enum values are in the top-level since that are in the same\n\t// scope as the parent enum.\n\tdescsByName map[protoreflect.FullName]any\n\tfilesByPath map[string][]protoreflect.FileDescriptor\n\tnumFiles    int\n}\n\ntype packageDescriptor struct {\n\tfiles []protoreflect.FileDescriptor\n}\n\n// RegisterFile registers the provided file descriptor.\n//\n// If any descriptor within the file conflicts with the descriptor of any\n// previously registered file (e.g., two enums with the same full name),\n// then the file is not registered and an error is returned.\n//\n// It is permitted for multiple files to have the same file path.\nfunc (r *Files) RegisterFile(file protoreflect.FileDescriptor) error {\n\tif r == GlobalFiles {\n\t\tglobalMutex.Lock()\n\t\tdefer globalMutex.Unlock()\n\t}\n\tif r.descsByName == nil {\n\t\tr.descsByName = map[protoreflect.FullName]any{\n\t\t\t\"\": &packageDescriptor{},\n\t\t}\n\t\tr.filesByPath = make(map[string][]protoreflect.FileDescriptor)\n\t}\n\tpath := file.Path()\n\tif prev := r.filesByPath[path]; len(prev) > 0 {\n\t\tr.checkGenProtoConflict(path)\n\t\terr := errors.New(\"file %q is already registered\", file.Path())\n\t\terr = amendErrorWithCaller(err, prev[0], file)\n\t\tif !(r == GlobalFiles && ignoreConflict(file, err)) {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tfor name := file.Package(); name != \"\"; name = name.Parent() {\n\t\tswitch prev := r.descsByName[name]; prev.(type) {\n\t\tcase nil, *packageDescriptor:\n\t\tdefault:\n\t\t\terr := errors.New(\"file %q has a package name conflict over %v\", file.Path(), name)\n\t\t\terr = amendErrorWithCaller(err, prev, file)\n\t\t\tif r == GlobalFiles && ignoreConflict(file, err) {\n\t\t\t\terr = nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\tvar err error\n\tvar hasConflict bool\n\trangeTopLevelDescriptors(file, func(d protoreflect.Descriptor) {\n\t\tif prev := r.descsByName[d.FullName()]; prev != nil {\n\t\t\thasConflict = true\n\t\t\terr = errors.New(\"file %q has a name conflict over %v\", file.Path(), d.FullName())\n\t\t\terr = amendErrorWithCaller(err, prev, file)\n\t\t\tif r == GlobalFiles && ignoreConflict(d, err) {\n\t\t\t\terr = nil\n\t\t\t}\n\t\t}\n\t})\n\tif hasConflict {\n\t\treturn err\n\t}\n\n\tfor name := file.Package(); name != \"\"; name = name.Parent() {\n\t\tif r.descsByName[name] == nil {\n\t\t\tr.descsByName[name] = &packageDescriptor{}\n\t\t}\n\t}\n\tp := r.descsByName[file.Package()].(*packageDescriptor)\n\tp.files = append(p.files, file)\n\trangeTopLevelDescriptors(file, func(d protoreflect.Descriptor) {\n\t\tr.descsByName[d.FullName()] = d\n\t})\n\tr.filesByPath[path] = append(r.filesByPath[path], file)\n\tr.numFiles++\n\treturn nil\n}\n\n// Several well-known types were hosted in the google.golang.org/genproto module\n// but were later moved to this module. To avoid a weak dependency on the\n// genproto module (and its relatively large set of transitive dependencies),\n// we rely on a registration conflict to determine whether the genproto version\n// is too old (i.e., does not contain aliases to the new type declarations).\nfunc (r *Files) checkGenProtoConflict(path string) {\n\tif r != GlobalFiles {\n\t\treturn\n\t}\n\tvar prevPath string\n\tconst prevModule = \"google.golang.org/genproto\"\n\tconst prevVersion = \"cb27e3aa (May 26th, 2020)\"\n\tswitch path {\n\tcase \"google/protobuf/field_mask.proto\":\n\t\tprevPath = prevModule + \"/protobuf/field_mask\"\n\tcase \"google/protobuf/api.proto\":\n\t\tprevPath = prevModule + \"/protobuf/api\"\n\tcase \"google/protobuf/type.proto\":\n\t\tprevPath = prevModule + \"/protobuf/ptype\"\n\tcase \"google/protobuf/source_context.proto\":\n\t\tprevPath = prevModule + \"/protobuf/source_context\"\n\tdefault:\n\t\treturn\n\t}\n\tpkgName := strings.TrimSuffix(strings.TrimPrefix(path, \"google/protobuf/\"), \".proto\")\n\tpkgName = strings.Replace(pkgName, \"_\", \"\", -1) + \"pb\" // e.g., \"field_mask\" => \"fieldmaskpb\"\n\tcurrPath := \"google.golang.org/protobuf/types/known/\" + pkgName\n\tpanic(fmt.Sprintf(\"\"+\n\t\t\"duplicate registration of %q\\n\"+\n\t\t\"\\n\"+\n\t\t\"The generated definition for this file has moved:\\n\"+\n\t\t\"\\tfrom: %q\\n\"+\n\t\t\"\\tto:   %q\\n\"+\n\t\t\"A dependency on the %q module must\\n\"+\n\t\t\"be at version %v or higher.\\n\"+\n\t\t\"\\n\"+\n\t\t\"Upgrade the dependency by running:\\n\"+\n\t\t\"\\tgo get -u %v\\n\",\n\t\tpath, prevPath, currPath, prevModule, prevVersion, prevPath))\n}\n\n// FindDescriptorByName looks up a descriptor by the full name.\n//\n// This returns (nil, [NotFound]) if not found.\nfunc (r *Files) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error) {\n\tif r == nil {\n\t\treturn nil, NotFound\n\t}\n\tif r == GlobalFiles {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\tprefix := name\n\tsuffix := nameSuffix(\"\")\n\tfor prefix != \"\" {\n\t\tif d, ok := r.descsByName[prefix]; ok {\n\t\t\tswitch d := d.(type) {\n\t\t\tcase protoreflect.EnumDescriptor:\n\t\t\t\tif d.FullName() == name {\n\t\t\t\t\treturn d, nil\n\t\t\t\t}\n\t\t\tcase protoreflect.EnumValueDescriptor:\n\t\t\t\tif d.FullName() == name {\n\t\t\t\t\treturn d, nil\n\t\t\t\t}\n\t\t\tcase protoreflect.MessageDescriptor:\n\t\t\t\tif d.FullName() == name {\n\t\t\t\t\treturn d, nil\n\t\t\t\t}\n\t\t\t\tif d := findDescriptorInMessage(d, suffix); d != nil && d.FullName() == name {\n\t\t\t\t\treturn d, nil\n\t\t\t\t}\n\t\t\tcase protoreflect.ExtensionDescriptor:\n\t\t\t\tif d.FullName() == name {\n\t\t\t\t\treturn d, nil\n\t\t\t\t}\n\t\t\tcase protoreflect.ServiceDescriptor:\n\t\t\t\tif d.FullName() == name {\n\t\t\t\t\treturn d, nil\n\t\t\t\t}\n\t\t\t\tif d := d.Methods().ByName(suffix.Pop()); d != nil && d.FullName() == name {\n\t\t\t\t\treturn d, nil\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil, NotFound\n\t\t}\n\t\tprefix = prefix.Parent()\n\t\tsuffix = nameSuffix(name[len(prefix)+len(\".\"):])\n\t}\n\treturn nil, NotFound\n}\n\nfunc findDescriptorInMessage(md protoreflect.MessageDescriptor, suffix nameSuffix) protoreflect.Descriptor {\n\tname := suffix.Pop()\n\tif suffix == \"\" {\n\t\tif ed := md.Enums().ByName(name); ed != nil {\n\t\t\treturn ed\n\t\t}\n\t\tfor i := md.Enums().Len() - 1; i >= 0; i-- {\n\t\t\tif vd := md.Enums().Get(i).Values().ByName(name); vd != nil {\n\t\t\t\treturn vd\n\t\t\t}\n\t\t}\n\t\tif xd := md.Extensions().ByName(name); xd != nil {\n\t\t\treturn xd\n\t\t}\n\t\tif fd := md.Fields().ByName(name); fd != nil {\n\t\t\treturn fd\n\t\t}\n\t\tif od := md.Oneofs().ByName(name); od != nil {\n\t\t\treturn od\n\t\t}\n\t}\n\tif md := md.Messages().ByName(name); md != nil {\n\t\tif suffix == \"\" {\n\t\t\treturn md\n\t\t}\n\t\treturn findDescriptorInMessage(md, suffix)\n\t}\n\treturn nil\n}\n\ntype nameSuffix string\n\nfunc (s *nameSuffix) Pop() (name protoreflect.Name) {\n\tif i := strings.IndexByte(string(*s), '.'); i >= 0 {\n\t\tname, *s = protoreflect.Name((*s)[:i]), (*s)[i+1:]\n\t} else {\n\t\tname, *s = protoreflect.Name((*s)), \"\"\n\t}\n\treturn name\n}\n\n// FindFileByPath looks up a file by the path.\n//\n// This returns (nil, [NotFound]) if not found.\n// This returns an error if multiple files have the same path.\nfunc (r *Files) FindFileByPath(path string) (protoreflect.FileDescriptor, error) {\n\tif r == nil {\n\t\treturn nil, NotFound\n\t}\n\tif r == GlobalFiles {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\tfds := r.filesByPath[path]\n\tswitch len(fds) {\n\tcase 0:\n\t\treturn nil, NotFound\n\tcase 1:\n\t\treturn fds[0], nil\n\tdefault:\n\t\treturn nil, errors.New(\"multiple files named %q\", path)\n\t}\n}\n\n// NumFiles reports the number of registered files,\n// including duplicate files with the same name.\nfunc (r *Files) NumFiles() int {\n\tif r == nil {\n\t\treturn 0\n\t}\n\tif r == GlobalFiles {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\treturn r.numFiles\n}\n\n// RangeFiles iterates over all registered files while f returns true.\n// If multiple files have the same name, RangeFiles iterates over all of them.\n// The iteration order is undefined.\nfunc (r *Files) RangeFiles(f func(protoreflect.FileDescriptor) bool) {\n\tif r == nil {\n\t\treturn\n\t}\n\tif r == GlobalFiles {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\tfor _, files := range r.filesByPath {\n\t\tfor _, file := range files {\n\t\t\tif !f(file) {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\n\n// NumFilesByPackage reports the number of registered files in a proto package.\nfunc (r *Files) NumFilesByPackage(name protoreflect.FullName) int {\n\tif r == nil {\n\t\treturn 0\n\t}\n\tif r == GlobalFiles {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\tp, ok := r.descsByName[name].(*packageDescriptor)\n\tif !ok {\n\t\treturn 0\n\t}\n\treturn len(p.files)\n}\n\n// RangeFilesByPackage iterates over all registered files in a given proto package\n// while f returns true. The iteration order is undefined.\nfunc (r *Files) RangeFilesByPackage(name protoreflect.FullName, f func(protoreflect.FileDescriptor) bool) {\n\tif r == nil {\n\t\treturn\n\t}\n\tif r == GlobalFiles {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\tp, ok := r.descsByName[name].(*packageDescriptor)\n\tif !ok {\n\t\treturn\n\t}\n\tfor _, file := range p.files {\n\t\tif !f(file) {\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// rangeTopLevelDescriptors iterates over all top-level descriptors in a file\n// which will be directly entered into the registry.\nfunc rangeTopLevelDescriptors(fd protoreflect.FileDescriptor, f func(protoreflect.Descriptor)) {\n\teds := fd.Enums()\n\tfor i := eds.Len() - 1; i >= 0; i-- {\n\t\tf(eds.Get(i))\n\t\tvds := eds.Get(i).Values()\n\t\tfor i := vds.Len() - 1; i >= 0; i-- {\n\t\t\tf(vds.Get(i))\n\t\t}\n\t}\n\tmds := fd.Messages()\n\tfor i := mds.Len() - 1; i >= 0; i-- {\n\t\tf(mds.Get(i))\n\t}\n\txds := fd.Extensions()\n\tfor i := xds.Len() - 1; i >= 0; i-- {\n\t\tf(xds.Get(i))\n\t}\n\tsds := fd.Services()\n\tfor i := sds.Len() - 1; i >= 0; i-- {\n\t\tf(sds.Get(i))\n\t}\n}\n\n// MessageTypeResolver is an interface for looking up messages.\n//\n// A compliant implementation must deterministically return the same type\n// if no error is encountered.\n//\n// The [Types] type implements this interface.\ntype MessageTypeResolver interface {\n\t// FindMessageByName looks up a message by its full name.\n\t// E.g., \"google.protobuf.Any\"\n\t//\n\t// This return (nil, NotFound) if not found.\n\tFindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error)\n\n\t// FindMessageByURL looks up a message by a URL identifier.\n\t// See documentation on google.protobuf.Any.type_url for the URL format.\n\t//\n\t// This returns (nil, NotFound) if not found.\n\tFindMessageByURL(url string) (protoreflect.MessageType, error)\n}\n\n// ExtensionTypeResolver is an interface for looking up extensions.\n//\n// A compliant implementation must deterministically return the same type\n// if no error is encountered.\n//\n// The [Types] type implements this interface.\ntype ExtensionTypeResolver interface {\n\t// FindExtensionByName looks up a extension field by the field's full name.\n\t// Note that this is the full name of the field as determined by\n\t// where the extension is declared and is unrelated to the full name of the\n\t// message being extended.\n\t//\n\t// This returns (nil, NotFound) if not found.\n\tFindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error)\n\n\t// FindExtensionByNumber looks up a extension field by the field number\n\t// within some parent message, identified by full name.\n\t//\n\t// This returns (nil, NotFound) if not found.\n\tFindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error)\n}\n\nvar (\n\t_ MessageTypeResolver   = (*Types)(nil)\n\t_ ExtensionTypeResolver = (*Types)(nil)\n)\n\n// Types is a registry for looking up or iterating over descriptor types.\n// The Find and Range methods are safe for concurrent use.\ntype Types struct {\n\ttypesByName         typesByName\n\textensionsByMessage extensionsByMessage\n\n\tnumEnums      int\n\tnumMessages   int\n\tnumExtensions int\n}\n\ntype (\n\ttypesByName         map[protoreflect.FullName]any\n\textensionsByMessage map[protoreflect.FullName]extensionsByNumber\n\textensionsByNumber  map[protoreflect.FieldNumber]protoreflect.ExtensionType\n)\n\n// RegisterMessage registers the provided message type.\n//\n// If a naming conflict occurs, the type is not registered and an error is returned.\nfunc (r *Types) RegisterMessage(mt protoreflect.MessageType) error {\n\t// Under rare circumstances getting the descriptor might recursively\n\t// examine the registry, so fetch it before locking.\n\tmd := mt.Descriptor()\n\n\tif r == GlobalTypes {\n\t\tglobalMutex.Lock()\n\t\tdefer globalMutex.Unlock()\n\t}\n\n\tif err := r.register(\"message\", md, mt); err != nil {\n\t\treturn err\n\t}\n\tr.numMessages++\n\treturn nil\n}\n\n// RegisterEnum registers the provided enum type.\n//\n// If a naming conflict occurs, the type is not registered and an error is returned.\nfunc (r *Types) RegisterEnum(et protoreflect.EnumType) error {\n\t// Under rare circumstances getting the descriptor might recursively\n\t// examine the registry, so fetch it before locking.\n\ted := et.Descriptor()\n\n\tif r == GlobalTypes {\n\t\tglobalMutex.Lock()\n\t\tdefer globalMutex.Unlock()\n\t}\n\n\tif err := r.register(\"enum\", ed, et); err != nil {\n\t\treturn err\n\t}\n\tr.numEnums++\n\treturn nil\n}\n\n// RegisterExtension registers the provided extension type.\n//\n// If a naming conflict occurs, the type is not registered and an error is returned.\nfunc (r *Types) RegisterExtension(xt protoreflect.ExtensionType) error {\n\t// Under rare circumstances getting the descriptor might recursively\n\t// examine the registry, so fetch it before locking.\n\t//\n\t// A known case where this can happen: Fetching the TypeDescriptor for a\n\t// legacy ExtensionDesc can consult the global registry.\n\txd := xt.TypeDescriptor()\n\n\tif r == GlobalTypes {\n\t\tglobalMutex.Lock()\n\t\tdefer globalMutex.Unlock()\n\t}\n\n\tfield := xd.Number()\n\tmessage := xd.ContainingMessage().FullName()\n\tif prev := r.extensionsByMessage[message][field]; prev != nil {\n\t\terr := errors.New(\"extension number %d is already registered on message %v\", field, message)\n\t\terr = amendErrorWithCaller(err, prev, xt)\n\t\tif !(r == GlobalTypes && ignoreConflict(xd, err)) {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif err := r.register(\"extension\", xd, xt); err != nil {\n\t\treturn err\n\t}\n\tif r.extensionsByMessage == nil {\n\t\tr.extensionsByMessage = make(extensionsByMessage)\n\t}\n\tif r.extensionsByMessage[message] == nil {\n\t\tr.extensionsByMessage[message] = make(extensionsByNumber)\n\t}\n\tr.extensionsByMessage[message][field] = xt\n\tr.numExtensions++\n\treturn nil\n}\n\nfunc (r *Types) register(kind string, desc protoreflect.Descriptor, typ any) error {\n\tname := desc.FullName()\n\tprev := r.typesByName[name]\n\tif prev != nil {\n\t\terr := errors.New(\"%v %v is already registered\", kind, name)\n\t\terr = amendErrorWithCaller(err, prev, typ)\n\t\tif !(r == GlobalTypes && ignoreConflict(desc, err)) {\n\t\t\treturn err\n\t\t}\n\t}\n\tif r.typesByName == nil {\n\t\tr.typesByName = make(typesByName)\n\t}\n\tr.typesByName[name] = typ\n\treturn nil\n}\n\n// FindEnumByName looks up an enum by its full name.\n// E.g., \"google.protobuf.Field.Kind\".\n//\n// This returns (nil, [NotFound]) if not found.\nfunc (r *Types) FindEnumByName(enum protoreflect.FullName) (protoreflect.EnumType, error) {\n\tif r == nil {\n\t\treturn nil, NotFound\n\t}\n\tif r == GlobalTypes {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\tif v := r.typesByName[enum]; v != nil {\n\t\tif et, _ := v.(protoreflect.EnumType); et != nil {\n\t\t\treturn et, nil\n\t\t}\n\t\treturn nil, errors.New(\"found wrong type: got %v, want enum\", typeName(v))\n\t}\n\treturn nil, NotFound\n}\n\n// FindMessageByName looks up a message by its full name,\n// e.g. \"google.protobuf.Any\".\n//\n// This returns (nil, [NotFound]) if not found.\nfunc (r *Types) FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) {\n\tif r == nil {\n\t\treturn nil, NotFound\n\t}\n\tif r == GlobalTypes {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\tif v := r.typesByName[message]; v != nil {\n\t\tif mt, _ := v.(protoreflect.MessageType); mt != nil {\n\t\t\treturn mt, nil\n\t\t}\n\t\treturn nil, errors.New(\"found wrong type: got %v, want message\", typeName(v))\n\t}\n\treturn nil, NotFound\n}\n\n// FindMessageByURL looks up a message by a URL identifier.\n// See documentation on google.protobuf.Any.type_url for the URL format.\n//\n// This returns (nil, [NotFound]) if not found.\nfunc (r *Types) FindMessageByURL(url string) (protoreflect.MessageType, error) {\n\t// This function is similar to FindMessageByName but\n\t// truncates anything before and including '/' in the URL.\n\tif r == nil {\n\t\treturn nil, NotFound\n\t}\n\tif r == GlobalTypes {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\tmessage := protoreflect.FullName(url)\n\tif i := strings.LastIndexByte(url, '/'); i >= 0 {\n\t\tmessage = message[i+len(\"/\"):]\n\t}\n\n\tif v := r.typesByName[message]; v != nil {\n\t\tif mt, _ := v.(protoreflect.MessageType); mt != nil {\n\t\t\treturn mt, nil\n\t\t}\n\t\treturn nil, errors.New(\"found wrong type: got %v, want message\", typeName(v))\n\t}\n\treturn nil, NotFound\n}\n\n// FindExtensionByName looks up a extension field by the field's full name.\n// Note that this is the full name of the field as determined by\n// where the extension is declared and is unrelated to the full name of the\n// message being extended.\n//\n// This returns (nil, [NotFound]) if not found.\nfunc (r *Types) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) {\n\tif r == nil {\n\t\treturn nil, NotFound\n\t}\n\tif r == GlobalTypes {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\tif v := r.typesByName[field]; v != nil {\n\t\tif xt, _ := v.(protoreflect.ExtensionType); xt != nil {\n\t\t\treturn xt, nil\n\t\t}\n\n\t\t// MessageSet extensions are special in that the name of the extension\n\t\t// is the name of the message type used to extend the MessageSet.\n\t\t// This naming scheme is used by text and JSON serialization.\n\t\t//\n\t\t// This feature is protected by the ProtoLegacy flag since MessageSets\n\t\t// are a proto1 feature that is long deprecated.\n\t\tif flags.ProtoLegacy {\n\t\t\tif _, ok := v.(protoreflect.MessageType); ok {\n\t\t\t\tfield := field.Append(messageset.ExtensionName)\n\t\t\t\tif v := r.typesByName[field]; v != nil {\n\t\t\t\t\tif xt, _ := v.(protoreflect.ExtensionType); xt != nil {\n\t\t\t\t\t\tif messageset.IsMessageSetExtension(xt.TypeDescriptor()) {\n\t\t\t\t\t\t\treturn xt, nil\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\treturn nil, errors.New(\"found wrong type: got %v, want extension\", typeName(v))\n\t}\n\treturn nil, NotFound\n}\n\n// FindExtensionByNumber looks up a extension field by the field number\n// within some parent message, identified by full name.\n//\n// This returns (nil, [NotFound]) if not found.\nfunc (r *Types) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) {\n\tif r == nil {\n\t\treturn nil, NotFound\n\t}\n\tif r == GlobalTypes {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\tif xt, ok := r.extensionsByMessage[message][field]; ok {\n\t\treturn xt, nil\n\t}\n\treturn nil, NotFound\n}\n\n// NumEnums reports the number of registered enums.\nfunc (r *Types) NumEnums() int {\n\tif r == nil {\n\t\treturn 0\n\t}\n\tif r == GlobalTypes {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\treturn r.numEnums\n}\n\n// RangeEnums iterates over all registered enums while f returns true.\n// Iteration order is undefined.\nfunc (r *Types) RangeEnums(f func(protoreflect.EnumType) bool) {\n\tif r == nil {\n\t\treturn\n\t}\n\tif r == GlobalTypes {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\tfor _, typ := range r.typesByName {\n\t\tif et, ok := typ.(protoreflect.EnumType); ok {\n\t\t\tif !f(et) {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\n\n// NumMessages reports the number of registered messages.\nfunc (r *Types) NumMessages() int {\n\tif r == nil {\n\t\treturn 0\n\t}\n\tif r == GlobalTypes {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\treturn r.numMessages\n}\n\n// RangeMessages iterates over all registered messages while f returns true.\n// Iteration order is undefined.\nfunc (r *Types) RangeMessages(f func(protoreflect.MessageType) bool) {\n\tif r == nil {\n\t\treturn\n\t}\n\tif r == GlobalTypes {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\tfor _, typ := range r.typesByName {\n\t\tif mt, ok := typ.(protoreflect.MessageType); ok {\n\t\t\tif !f(mt) {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\n\n// NumExtensions reports the number of registered extensions.\nfunc (r *Types) NumExtensions() int {\n\tif r == nil {\n\t\treturn 0\n\t}\n\tif r == GlobalTypes {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\treturn r.numExtensions\n}\n\n// RangeExtensions iterates over all registered extensions while f returns true.\n// Iteration order is undefined.\nfunc (r *Types) RangeExtensions(f func(protoreflect.ExtensionType) bool) {\n\tif r == nil {\n\t\treturn\n\t}\n\tif r == GlobalTypes {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\tfor _, typ := range r.typesByName {\n\t\tif xt, ok := typ.(protoreflect.ExtensionType); ok {\n\t\t\tif !f(xt) {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\n\n// NumExtensionsByMessage reports the number of registered extensions for\n// a given message type.\nfunc (r *Types) NumExtensionsByMessage(message protoreflect.FullName) int {\n\tif r == nil {\n\t\treturn 0\n\t}\n\tif r == GlobalTypes {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\treturn len(r.extensionsByMessage[message])\n}\n\n// RangeExtensionsByMessage iterates over all registered extensions filtered\n// by a given message type while f returns true. Iteration order is undefined.\nfunc (r *Types) RangeExtensionsByMessage(message protoreflect.FullName, f func(protoreflect.ExtensionType) bool) {\n\tif r == nil {\n\t\treturn\n\t}\n\tif r == GlobalTypes {\n\t\tglobalMutex.RLock()\n\t\tdefer globalMutex.RUnlock()\n\t}\n\tfor _, xt := range r.extensionsByMessage[message] {\n\t\tif !f(xt) {\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc typeName(t any) string {\n\tswitch t.(type) {\n\tcase protoreflect.EnumType:\n\t\treturn \"enum\"\n\tcase protoreflect.MessageType:\n\t\treturn \"message\"\n\tcase protoreflect.ExtensionType:\n\t\treturn \"extension\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"%T\", t)\n\t}\n}\n\nfunc amendErrorWithCaller(err error, prev, curr any) error {\n\tprevPkg := goPackage(prev)\n\tcurrPkg := goPackage(curr)\n\tif prevPkg == \"\" || currPkg == \"\" || prevPkg == currPkg {\n\t\treturn err\n\t}\n\treturn errors.New(\"%s\\n\\tpreviously from: %q\\n\\tcurrently from:  %q\", err, prevPkg, currPkg)\n}\n\nfunc goPackage(v any) string {\n\tswitch d := v.(type) {\n\tcase protoreflect.EnumType:\n\t\tv = d.Descriptor()\n\tcase protoreflect.MessageType:\n\t\tv = d.Descriptor()\n\tcase protoreflect.ExtensionType:\n\t\tv = d.TypeDescriptor()\n\t}\n\tif d, ok := v.(protoreflect.Descriptor); ok {\n\t\tv = d.ParentFile()\n\t}\n\tif d, ok := v.(interface{ GoPackagePath() string }); ok {\n\t\treturn d.GoPackagePath()\n\t}\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/runtime/protoiface/legacy.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 protoiface\n\ntype MessageV1 interface {\n\tReset()\n\tString() string\n\tProtoMessage()\n}\n\ntype ExtensionRangeV1 struct {\n\tStart, End int32 // both inclusive\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/runtime/protoiface/methods.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 protoiface contains types referenced or implemented by messages.\n//\n// WARNING: This package should only be imported by message implementations.\n// The functionality found in this package should be accessed through\n// higher-level abstractions provided by the proto package.\npackage protoiface\n\nimport (\n\t\"google.golang.org/protobuf/internal/pragma\"\n\t\"google.golang.org/protobuf/reflect/protoreflect\"\n)\n\n// Methods is a set of optional fast-path implementations of various operations.\ntype Methods = struct {\n\tpragma.NoUnkeyedLiterals\n\n\t// Flags indicate support for optional features.\n\tFlags SupportFlags\n\n\t// Size returns the size in bytes of the wire-format encoding of a message.\n\t// Marshal must be provided if a custom Size is provided.\n\tSize func(SizeInput) SizeOutput\n\n\t// Marshal formats a message in the wire-format encoding to the provided buffer.\n\t// Size should be provided if a custom Marshal is provided.\n\t// It must not return an error for a partial message.\n\tMarshal func(MarshalInput) (MarshalOutput, error)\n\n\t// Unmarshal parses the wire-format encoding and merges the result into a message.\n\t// It must not reset the target message or return an error for a partial message.\n\tUnmarshal func(UnmarshalInput) (UnmarshalOutput, error)\n\n\t// Merge merges the contents of a source message into a destination message.\n\tMerge func(MergeInput) MergeOutput\n\n\t// CheckInitialized returns an error if any required fields in the message are not set.\n\tCheckInitialized func(CheckInitializedInput) (CheckInitializedOutput, error)\n\n\t// Equal compares two messages and returns EqualOutput.Equal == true if they are equal.\n\tEqual func(EqualInput) EqualOutput\n}\n\n// SupportFlags indicate support for optional features.\ntype SupportFlags = uint64\n\nconst (\n\t// SupportMarshalDeterministic reports whether MarshalOptions.Deterministic is supported.\n\tSupportMarshalDeterministic SupportFlags = 1 << iota\n\n\t// SupportUnmarshalDiscardUnknown reports whether UnmarshalOptions.DiscardUnknown is supported.\n\tSupportUnmarshalDiscardUnknown\n)\n\n// SizeInput is input to the Size method.\ntype SizeInput = struct {\n\tpragma.NoUnkeyedLiterals\n\n\tMessage protoreflect.Message\n\tFlags   MarshalInputFlags\n}\n\n// SizeOutput is output from the Size method.\ntype SizeOutput = struct {\n\tpragma.NoUnkeyedLiterals\n\n\tSize int\n}\n\n// MarshalInput is input to the Marshal method.\ntype MarshalInput = struct {\n\tpragma.NoUnkeyedLiterals\n\n\tMessage protoreflect.Message\n\tBuf     []byte // output is appended to this buffer\n\tFlags   MarshalInputFlags\n}\n\n// MarshalOutput is output from the Marshal method.\ntype MarshalOutput = struct {\n\tpragma.NoUnkeyedLiterals\n\n\tBuf []byte // contains marshaled message\n}\n\n// MarshalInputFlags configure the marshaler.\n// Most flags correspond to fields in proto.MarshalOptions.\ntype MarshalInputFlags = uint8\n\nconst (\n\tMarshalDeterministic MarshalInputFlags = 1 << iota\n\tMarshalUseCachedSize\n)\n\n// UnmarshalInput is input to the Unmarshal method.\ntype UnmarshalInput = struct {\n\tpragma.NoUnkeyedLiterals\n\n\tMessage  protoreflect.Message\n\tBuf      []byte // input buffer\n\tFlags    UnmarshalInputFlags\n\tResolver interface {\n\t\tFindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error)\n\t\tFindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error)\n\t}\n\tDepth int\n}\n\n// UnmarshalOutput is output from the Unmarshal method.\ntype UnmarshalOutput = struct {\n\tpragma.NoUnkeyedLiterals\n\n\tFlags UnmarshalOutputFlags\n}\n\n// UnmarshalInputFlags configure the unmarshaler.\n// Most flags correspond to fields in proto.UnmarshalOptions.\ntype UnmarshalInputFlags = uint8\n\nconst (\n\tUnmarshalDiscardUnknown UnmarshalInputFlags = 1 << iota\n\n\t// UnmarshalAliasBuffer permits unmarshal operations to alias the input buffer.\n\t// The unmarshaller must not modify the contents of the buffer.\n\tUnmarshalAliasBuffer\n\n\t// UnmarshalValidated indicates that validation has already been\n\t// performed on the input buffer.\n\tUnmarshalValidated\n\n\t// UnmarshalCheckRequired is set if this unmarshal operation ultimately will care if required fields are\n\t// initialized.\n\tUnmarshalCheckRequired\n\n\t// UnmarshalNoLazyDecoding is set if this unmarshal operation should not use\n\t// lazy decoding, even when otherwise available.\n\tUnmarshalNoLazyDecoding\n)\n\n// UnmarshalOutputFlags are output from the Unmarshal method.\ntype UnmarshalOutputFlags = uint8\n\nconst (\n\t// UnmarshalInitialized may be set on return if all required fields are known to be set.\n\t// If unset, then it does not necessarily indicate that the message is uninitialized,\n\t// only that its status could not be confirmed.\n\tUnmarshalInitialized UnmarshalOutputFlags = 1 << iota\n)\n\n// MergeInput is input to the Merge method.\ntype MergeInput = struct {\n\tpragma.NoUnkeyedLiterals\n\n\tSource      protoreflect.Message\n\tDestination protoreflect.Message\n}\n\n// MergeOutput is output from the Merge method.\ntype MergeOutput = struct {\n\tpragma.NoUnkeyedLiterals\n\n\tFlags MergeOutputFlags\n}\n\n// MergeOutputFlags are output from the Merge method.\ntype MergeOutputFlags = uint8\n\nconst (\n\t// MergeComplete reports whether the merge was performed.\n\t// If unset, the merger must have made no changes to the destination.\n\tMergeComplete MergeOutputFlags = 1 << iota\n)\n\n// CheckInitializedInput is input to the CheckInitialized method.\ntype CheckInitializedInput = struct {\n\tpragma.NoUnkeyedLiterals\n\n\tMessage protoreflect.Message\n}\n\n// CheckInitializedOutput is output from the CheckInitialized method.\ntype CheckInitializedOutput = struct {\n\tpragma.NoUnkeyedLiterals\n}\n\n// EqualInput is input to the Equal method.\ntype EqualInput = struct {\n\tpragma.NoUnkeyedLiterals\n\n\tMessageA protoreflect.Message\n\tMessageB protoreflect.Message\n}\n\n// EqualOutput is output from the Equal method.\ntype EqualOutput = struct {\n\tpragma.NoUnkeyedLiterals\n\n\tEqual bool\n}\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/runtime/protoimpl/impl.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 protoimpl contains the default implementation for messages\n// generated by protoc-gen-go.\n//\n// WARNING: This package should only ever be imported by generated messages.\n// The compatibility agreement covers nothing except for functionality needed\n// to keep existing generated messages operational. Breakages that occur due\n// to unauthorized usages of this package are not the author's responsibility.\npackage protoimpl\n\nimport (\n\t\"google.golang.org/protobuf/internal/filedesc\"\n\t\"google.golang.org/protobuf/internal/filetype\"\n\t\"google.golang.org/protobuf/internal/impl\"\n\t\"google.golang.org/protobuf/internal/protolazy\"\n)\n\n// UnsafeEnabled specifies whether package unsafe can be used.\nconst UnsafeEnabled = impl.UnsafeEnabled\n\ntype (\n\t// Types used by generated code in init functions.\n\tDescBuilder = filedesc.Builder\n\tTypeBuilder = filetype.Builder\n\n\t// Types used by generated code to implement EnumType, MessageType, and ExtensionType.\n\tEnumInfo      = impl.EnumInfo\n\tMessageInfo   = impl.MessageInfo\n\tExtensionInfo = impl.ExtensionInfo\n\n\t// Types embedded in generated messages.\n\tMessageState     = impl.MessageState\n\tSizeCache        = impl.SizeCache\n\tWeakFields       = impl.WeakFields\n\tUnknownFields    = impl.UnknownFields\n\tExtensionFields  = impl.ExtensionFields\n\tExtensionFieldV1 = impl.ExtensionField\n\n\tPointer = impl.Pointer\n\n\tLazyUnmarshalInfo  = *protolazy.XXX_lazyUnmarshalInfo\n\tRaceDetectHookData = impl.RaceDetectHookData\n)\n\nvar X impl.Export\n"
  },
  {
    "path": "vendor/google.golang.org/protobuf/runtime/protoimpl/version.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 protoimpl\n\nimport (\n\t\"google.golang.org/protobuf/internal/version\"\n)\n\nconst (\n\t// MaxVersion is the maximum supported version for generated .pb.go files.\n\t// It is always the current version of the module.\n\tMaxVersion = version.Minor\n\n\t// GenVersion is the runtime version required by generated .pb.go files.\n\t// This is incremented when generated code relies on new functionality\n\t// in the runtime.\n\tGenVersion = 20\n\n\t// MinVersion is the minimum supported version for generated .pb.go files.\n\t// This is incremented when the runtime drops support for old code.\n\tMinVersion = 0\n)\n\n// EnforceVersion is used by code generated by protoc-gen-go\n// to statically enforce minimum and maximum versions of this package.\n// A compilation failure implies either that:\n//   - the runtime package is too old and needs to be updated OR\n//   - the generated code is too old and needs to be regenerated.\n//\n// The runtime package can be upgraded by running:\n//\n//\tgo get google.golang.org/protobuf\n//\n// The generated code can be regenerated by running:\n//\n//\tprotoc --go_out=${PROTOC_GEN_GO_ARGS} ${PROTO_FILES}\n//\n// Example usage by generated code:\n//\n//\tconst (\n//\t\t// Verify that this generated code is sufficiently up-to-date.\n//\t\t_ = protoimpl.EnforceVersion(genVersion - protoimpl.MinVersion)\n//\t\t// Verify that runtime/protoimpl is sufficiently up-to-date.\n//\t\t_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - genVersion)\n//\t)\n//\n// The genVersion is the current minor version used to generated the code.\n// This compile-time check relies on negative integer overflow of a uint\n// being a compilation failure (guaranteed by the Go specification).\ntype EnforceVersion uint\n\n// This enforces the following invariant:\n//\n//\tMinVersion ≤ GenVersion ≤ MaxVersion\nconst (\n\t_ = EnforceVersion(GenVersion - MinVersion)\n\t_ = EnforceVersion(MaxVersion - GenVersion)\n)\n"
  },
  {
    "path": "vendor/modules.txt",
    "content": "# cyphar.com/go-pathrs v0.2.4\n## explicit; go 1.18\ncyphar.com/go-pathrs\ncyphar.com/go-pathrs/internal/fdutils\ncyphar.com/go-pathrs/internal/libpathrs\ncyphar.com/go-pathrs/procfs\n# github.com/checkpoint-restore/go-criu/v7 v7.2.0\n## explicit; go 1.20\ngithub.com/checkpoint-restore/go-criu/v7\ngithub.com/checkpoint-restore/go-criu/v7/rpc\n# github.com/cilium/ebpf v0.17.3\n## explicit; go 1.22\ngithub.com/cilium/ebpf\ngithub.com/cilium/ebpf/asm\ngithub.com/cilium/ebpf/btf\ngithub.com/cilium/ebpf/internal\ngithub.com/cilium/ebpf/internal/kallsyms\ngithub.com/cilium/ebpf/internal/kconfig\ngithub.com/cilium/ebpf/internal/linux\ngithub.com/cilium/ebpf/internal/sys\ngithub.com/cilium/ebpf/internal/sysenc\ngithub.com/cilium/ebpf/internal/testutils/fdtrace\ngithub.com/cilium/ebpf/internal/tracefs\ngithub.com/cilium/ebpf/internal/unix\ngithub.com/cilium/ebpf/link\n# github.com/containerd/console v1.0.5\n## explicit; go 1.13\ngithub.com/containerd/console\n# github.com/coreos/go-systemd/v22 v22.7.0\n## explicit; go 1.23\ngithub.com/coreos/go-systemd/v22/dbus\n# github.com/cpuguy83/go-md2man/v2 v2.0.7\n## explicit; go 1.12\ngithub.com/cpuguy83/go-md2man/v2/md2man\n# github.com/cyphar/filepath-securejoin v0.6.1\n## explicit; go 1.18\ngithub.com/cyphar/filepath-securejoin\ngithub.com/cyphar/filepath-securejoin/internal/consts\ngithub.com/cyphar/filepath-securejoin/pathrs-lite\ngithub.com/cyphar/filepath-securejoin/pathrs-lite/internal\ngithub.com/cyphar/filepath-securejoin/pathrs-lite/internal/assert\ngithub.com/cyphar/filepath-securejoin/pathrs-lite/internal/fd\ngithub.com/cyphar/filepath-securejoin/pathrs-lite/internal/gocompat\ngithub.com/cyphar/filepath-securejoin/pathrs-lite/internal/gopathrs\ngithub.com/cyphar/filepath-securejoin/pathrs-lite/internal/kernelversion\ngithub.com/cyphar/filepath-securejoin/pathrs-lite/internal/linux\ngithub.com/cyphar/filepath-securejoin/pathrs-lite/internal/procfs\ngithub.com/cyphar/filepath-securejoin/pathrs-lite/procfs\n# github.com/docker/go-units v0.5.0\n## explicit\ngithub.com/docker/go-units\n# github.com/godbus/dbus/v5 v5.2.2\n## explicit; go 1.20\ngithub.com/godbus/dbus/v5\n# github.com/moby/sys/capability v0.4.0\n## explicit; go 1.21\ngithub.com/moby/sys/capability\n# github.com/moby/sys/mountinfo v0.7.2\n## explicit; go 1.17\ngithub.com/moby/sys/mountinfo\n# github.com/moby/sys/user v0.4.0\n## explicit; go 1.17\ngithub.com/moby/sys/user\n# github.com/moby/sys/userns v0.1.0\n## explicit; go 1.21\ngithub.com/moby/sys/userns\n# github.com/mrunalp/fileutils v0.5.1\n## explicit; go 1.13\ngithub.com/mrunalp/fileutils\n# github.com/opencontainers/cgroups v0.0.6\n## explicit; go 1.23.0\ngithub.com/opencontainers/cgroups\ngithub.com/opencontainers/cgroups/devices\ngithub.com/opencontainers/cgroups/devices/config\ngithub.com/opencontainers/cgroups/fs\ngithub.com/opencontainers/cgroups/fs2\ngithub.com/opencontainers/cgroups/fscommon\ngithub.com/opencontainers/cgroups/internal/path\ngithub.com/opencontainers/cgroups/manager\ngithub.com/opencontainers/cgroups/systemd\n# github.com/opencontainers/runtime-spec v1.3.0\n## explicit\ngithub.com/opencontainers/runtime-spec/specs-go\ngithub.com/opencontainers/runtime-spec/specs-go/features\n# github.com/opencontainers/selinux v1.13.1\n## explicit; go 1.19\ngithub.com/opencontainers/selinux/go-selinux\ngithub.com/opencontainers/selinux/go-selinux/label\ngithub.com/opencontainers/selinux/pkg/pwalkdir\n# github.com/russross/blackfriday/v2 v2.1.0\n## explicit\ngithub.com/russross/blackfriday/v2\n# github.com/seccomp/libseccomp-golang v0.11.1\n## explicit; go 1.19\ngithub.com/seccomp/libseccomp-golang\n# github.com/sirupsen/logrus v1.9.4\n## explicit; go 1.17\ngithub.com/sirupsen/logrus\ngithub.com/sirupsen/logrus/hooks/test\n# github.com/urfave/cli v1.22.17\n## explicit; go 1.11\ngithub.com/urfave/cli\n# github.com/vishvananda/netlink v1.3.1\n## explicit; go 1.12\ngithub.com/vishvananda/netlink\ngithub.com/vishvananda/netlink/nl\n# github.com/vishvananda/netns v0.0.5\n## explicit; go 1.17\ngithub.com/vishvananda/netns\n# golang.org/x/net v0.50.0\n## explicit; go 1.24.0\ngolang.org/x/net/bpf\n# golang.org/x/sys v0.41.0\n## explicit; go 1.24.0\ngolang.org/x/sys/unix\ngolang.org/x/sys/windows\n# google.golang.org/protobuf v1.36.11\n## explicit; go 1.23\ngoogle.golang.org/protobuf/encoding/prototext\ngoogle.golang.org/protobuf/encoding/protowire\ngoogle.golang.org/protobuf/internal/descfmt\ngoogle.golang.org/protobuf/internal/descopts\ngoogle.golang.org/protobuf/internal/detrand\ngoogle.golang.org/protobuf/internal/editiondefaults\ngoogle.golang.org/protobuf/internal/encoding/defval\ngoogle.golang.org/protobuf/internal/encoding/messageset\ngoogle.golang.org/protobuf/internal/encoding/tag\ngoogle.golang.org/protobuf/internal/encoding/text\ngoogle.golang.org/protobuf/internal/errors\ngoogle.golang.org/protobuf/internal/filedesc\ngoogle.golang.org/protobuf/internal/filetype\ngoogle.golang.org/protobuf/internal/flags\ngoogle.golang.org/protobuf/internal/genid\ngoogle.golang.org/protobuf/internal/impl\ngoogle.golang.org/protobuf/internal/order\ngoogle.golang.org/protobuf/internal/pragma\ngoogle.golang.org/protobuf/internal/protolazy\ngoogle.golang.org/protobuf/internal/set\ngoogle.golang.org/protobuf/internal/strs\ngoogle.golang.org/protobuf/internal/version\ngoogle.golang.org/protobuf/proto\ngoogle.golang.org/protobuf/reflect/protoreflect\ngoogle.golang.org/protobuf/reflect/protoregistry\ngoogle.golang.org/protobuf/runtime/protoiface\ngoogle.golang.org/protobuf/runtime/protoimpl\n"
  }
]